LyoKICogIE5vdGVwYWQgKEtvcmVhbiByZXNvdXJjZXMpCiAqCiAqICBDb3B5cmlnaHQgMTk5Nyw5OCBNYXJjZWwgQmF1ciA8bWJhdXJAZzI2LmV0aHouY2g+CiAqICBQcm9vZnJlYWQgMTk5OCBieSBEYXZpZCBMZWUgTGFtYmVydCA8bGFtYmVyNDVAZWdyLm1zdS5lZHU+CiAqICBDb3B5cmlnaHQgMjAwMiBTeWx2YWluIFBldHJlb2xsZSA8c3BldHJlb2xsZUB5YWhvby5mcj4KICogIENvcHlyaWdodCAyMDA3IEJhbmcgSnVuLVlvdW5nIDxqdW55b3VuZ0Btb2d1YS5jb20+CiAqICBDb3B5cmlnaHQgMjAwOSAgWXVuU29uZyBId2FuZyA8aHlzNTQ1QGRyZWFtd2l6LmNvbT4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19LT1JFQU4sIFNVQkxBTkdfREVGQVVMVAoKTUFJTl9NRU5VIE1FTlUKewogUE9QVVAgIsbEwM8oJkYpIiB7CiAgTUVOVUlURU0gIrv1t84guLi16bHiKCZOKVx0Q3RybCtOIiwgICBDTURfTkVXCiAgTUVOVUlURU0gIr+tseIoJk8pLi4uXHRDdHJsK08iLCAgICAgICBDTURfT1BFTgogIE1FTlVJVEVNICLA+sDlKCZTKVx0Q3RybCtTIiwgICAgICAgICAgQ01EX1NBVkUKICBNRU5VSVRFTSAitNm4pSDAzLinwLi3ziDA+sDlKCZBKS4uLiIsIENNRF9TQVZFX0FTCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIsDOvOIoJlApLi4uXHRDdHJsK1AiLCAgICAgICBDTURfUFJJTlQKICBNRU5VSVRFTSAixuTAzMH2ILyzwaQoJlQpLi4uIiwgICAgICAgIENNRF9QQUdFX1NFVFVQCiAgTUVOVUlURU0gIsfBuLDFzSC8s8GkKCZSKS4uLiIsICAgICAgICBDTURfUFJJTlRFUl9TRVRVUAogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICKzobO7seIoJlgpIiwgICAgICAgICAgICAgICAgQ01EX0VYSVQKIH0KUE9QVVAgIsbtwf0oJkUpIiB7CiAgTUVOVUlURU0gIr3Hx+Agw+u80igmVSlcdEN0cmwrWiIsICAgICBDTURfVU5ETwogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICLA37bzs7ux4igmVClcdEN0cmwrWCIsICAgICAgQ01EX0NVVAogIE1FTlVJVEVNICK6ubvnKCZDKVx0Q3RybCtDIiwgICAgICAgICAgQ01EX0NPUFkKICBNRU5VSVRFTSAiutm/qbPWseIoJlApXHRDdHJsK1YiLCAgICAgIENNRF9QQVNURQogIE1FTlVJVEVNICK76MGmKCZEKVx0RGVsIiwgICAgICAgICAgICAgQ01EX0RFTEVURQogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICK48LXOILyxxcMoJkEpXHRDdHJsK0EiLCAgICAgQ01EX1NFTEVDVF9BTEwKICBNRU5VSVRFTSAivcOwoy+zr8KlKCZUKVx0RjUiLCAgICAgICAgIENNRF9USU1FX0RBVEUKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiwNq1vyDB2SC52bLeKCZXKSIsICAgICAgICAgIENNRF9XUkFQCiAgTUVOVUlURU0gIrHbssMoJkYpLi4uIiwgICAgICAgICAgICAgICBDTURfRk9OVAogfQpQT1BVUCAiw6Ox4igmUykiIHsKICBNRU5VSVRFTSAiw6Ox4igmUykuLi5cdEN0cmwrRiIsICAgICAgIENNRF9TRUFSQ0gKICBNRU5VSVRFTSAitNnAvSDDo7HiKCZOKVx0RjMiLCAgICAgICAgIENNRF9TRUFSQ0hfTkVYVAogIE1FTlVJVEVNICK52bLZseIoJlIpLi4uXHRDdHJsK0giLCBDTURfUkVQTEFDRQogfQpQT1BVUCAitbW/8ri7KCZIKSIgewogIE1FTlVJVEVNICLH17jxKCZDKSIsICAgICAgICAgICAgICAgICAgQ01EX0hFTFBfQ09OVEVOVFMKICBNRU5VSVRFTSAiw6Ox4igmUykuLi4iLCAgICAgICAgICAgICAgIENNRF9IRUxQX1NFQVJDSAogIE1FTlVJVEVNICK1tb/yuLsgu+e/67n9KCZIKSIsICAgICAgICAgQ01EX0hFTFBfT05fSEVMUAogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICKz68auxtC15SDBpLq4KCZBKSIsIENNRF9IRUxQX0FCT1VUX05PVEVQQUQKIH0KfQoKLyogRGlhbG9nIGBQYWdlIHNldHVwJyAqLwoKRElBTE9HX1BBR0VTRVRVUCBESUFMT0cgMCwgMCwgMjI1LCA5NQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKRk9OVCA5LCAiTVMgU2hlbGwgRGxnIgpDQVBUSU9OICLG5MDMwfYgvLPBpCIKewpMVEVYVCAgICAiuNO4rrHbKCZIKToiLCAgMHgxNDAsICAgMTAsIDA3LCA0MCwgMTUKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9IRUFERVJWQUxVRSwgICA2MCwgMDUsMTEwLCAxMiwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiudm02rHbKCZGKToiLCAgMHgxNDIsICAgMTAsIDI0LCA0MCwgMTUKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9GT09URVJWQUxVRSwgICA2MCwgMjIsMTEwLCAxMiwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUAoKR1JPVVBCT1ggIr+puekoJk0pOiIsICAgICAgMHgxNDQsICAgICAxMCwgNDMsMTYwLCA0NQpMVEVYVCAgICAiv97CyigmTCk6IiwgICAgICAgIDB4MTQ1LCAgIDIwLCA1NSwgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCBJRENfUEFHRVNFVFVQX0xFRlRWQUxVRSwgICAgIDUwLCA1NSwgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIsCnKCZUKToiLCAgICAgICAgIDB4MTQ4LCAgICAyMCwgNzMsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9UT1BWQUxVRSwgICAgICA1MCwgNzMsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICK/wLilwsooJlIpOiIsICAgICAgIDB4MTRCLCAxMDAsIDU1LCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIElEQ19QQUdFU0VUVVBfUklHSFRWQUxVRSwgICAxMzAsIDU1LCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAivsa3oSgmQik6IiwgICAgICAweDE0RSwxMDAsIDczLCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIElEQ19QQUdFU0VUVVBfQk9UVE9NVkFMVUUsICAxMzAsIDczLCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUAoKREVGUFVTSEJVVFRPTiAiyK7AziIsICAgICAgIElET0ssICAgICAgICAgICAgICAgICAgIDE4MCwgIDMsIDQwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICLD67zSIiwgICAgICAgSURDQU5DRUwsICAgICAgICAgICAgICAgMTgwLCAyMSwgNDAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIrW1v/K4uygmSCkiLCBJREhFTFAsICAgICAgICAgICAgICAgICAxODAsIDM5LCA0MCwgMTUsIFdTX1RBQlNUT1AKfQoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKewpTVFJJTkdfUEFHRVNFVFVQX0hFQURFUlZBTFVFLCAgICImZiIKU1RSSU5HX1BBR0VTRVRVUF9GT09URVJWQUxVRSwgICAiJnAgxuTAzMH2IgoKU1RSSU5HX05PVEVQQUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIrjeuPDA5SIKU1RSSU5HX0VSUk9SLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIr/At/kiClNUUklOR19XQVJOSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICKw5rDtIgpTVFJJTkdfSU5GTywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiwaS6uCIKClNUUklOR19VTlRJVExFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICLBprjxIL74wL0iCgpTVFJJTkdfQUxMX0ZJTEVTLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiuPC15yDGxMDPICgqLiopIgpTVFJJTkdfVEVYVF9GSUxFU19UWFQsICAgICAgICAgICAgICAgICAgICAgICAgICAixdi9usauILmuvK0gKCoudHh0KSIKClNUUklOR19UT09MQVJHRSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyDGxMDPwMwgs8q5qyDEv7ytILjeuPDA5cC4t860wiC/rSC89iC++L3AtM+02S5cbiBcCrTZuKUgxu3B/bHiuKYgu+e/68fPvcq9w7/ALiIKU1RSSU5HX05PVEVYVCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIsDUt8LH0SCzu7/rwMwgvvi9wLTPtNkuXApcbrO7v+vAuyDA1LfCx9EgyMQgwOe9w7W1x8+9yr3Dv8AiClNUUklOR19ET0VTTk9URVhJU1QsICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlc1xuxsTAz8DMIL74vcC0z7TZLlxuXG4gXArGxMDPwLsgu/W3ziC4uLXlvcOw2r3AtM+x7j8iClNUUklOR19OT1RTQVZFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlc1xuxsTAzyCzu7/rwMwguq+w5rXHvvq9wLTPtNkuXG5cbiBcCrqvsOYgs7u/68C7IMD6wOXHz73DsNq9wLTPse4/IgpTVFJJTkdfTk9URk9VTkQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMgua7A2r+twLsgw6PAuyC89iC++L3AtM+02S4iClNUUklOR19PVVRfT0ZfTUVNT1JZLCAgICAgICAgICAgICAgICAgICAgICAgICAgICLAzCDA2773wLsgv8+34cfPtMIgtaUgx8q/5MfRILjeuPC4rrChILrOwbfH1bTPtNkuXApcbrvnv+sgsKG0ycfRILjeuPC4rsDHIL7nwLsgyK66uMfPseIgwKfH2CDHz7OqIMDMu/PAxyDAwL/rIMfBt86x17elwLsgtN2+xiDB1r3KvcO/wC5cbiIKCn0K