LyoKICogQ29weXJpZ2h0IDIwMDUgSmFjZWsgQ2FiYW4KICogQ29weXJpZ2h0IDIwMDUsMjAwNiBZdW5Tb25nIEh3YW5nCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCgpMQU5HVUFHRSBMQU5HX0tPUkVBTiwgU1VCTEFOR19ORVVUUkFMCgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CiAgICBJRFNfSFRNTERJU0FCTEVEICAgICJIVE1MILe7tPW4tcC6IMf2wOcgsKG0ycfPwfYgvsrAvS4iCiAgICBJRFNfSFRNTERPQ1VNRU5UICAgICJIVE1MILmuvK0iCiAgIElEU19ET1dOTE9BRElORyAgICAgIrTZv+63zrXlIMHfLi4uIgogICBJRFNfSU5TVEFMTElORyAgICAgICK8s8ShIMHfLi4uIgp9CgpJRF9EV0xfRElBTE9HIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFICAwLCAwLCAyNjAsIDg1ClNUWUxFIERTX01PREFMRlJBTUUgfCBEU19DRU5URVIgfCBXU19QT1BVUCB8IFdTX1ZJU0lCTEUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJXaW5lIEdlY2tvILyzxKEgx66x17iyIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKICAgIExURVhUICLAzCC+7sfDuK7EycDMvMfAuiBIVE1MIMbkwMzB9rimILq4v6nB1rfBsO0gx9W0z7TZLiBXaW5lwLogwMwgxuTAzMH2uKYguri/qcHWseIgwKfH2LimICAiIFwKICAgICJHZWNrbyAoTW96aWxsYSBIVE1MIL+jwfgpuKYgvLPEocfSILDNwNS0z7TZLiBXaW5lwMwgwNq1v8C4t84gR2Vja2+4piC02b/ut8615cfPsO0gvLPEocfPseK4piC/+MfRtNm46SAiIFwKICAgIlu8s8ShXbn2xrDAuyDFrLivx8+9yr3Dv8AiLCBJRF9EV0xfU1RBVFVTLCAxMCwgMTAsIDI0MCwgMzAsIFNTX0xFRlQKICAgQ09OVFJPTCAiwfjH4MHfIiwgSURfRFdMX1BST0dSRVNTLCBQUk9HUkVTU19DTEFTU0EsIFdTX0JPUkRFUnxQQlNfU01PT1RILCAxMCwgNDAsIDI0MCwgMTIKICAgREVGUFVTSEJVVFRPTiAivLPEoSgmSSkiLCBJRF9EV0xfSU5TVEFMTCwgMjAwLCA2MCwgNTAsIDE1LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKICAgUFVTSEJVVFRPTiAiw+u80igmQykiLCBJRENBTkNFTCwgMTQwLCA2MCwgNTAsIDE1LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKfQo=