LyoKICogQ29weXJpZ2h0IDIwMDMgSm9z6SBNYW51ZWwgRmVycmVyIE9ydGl6CiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfU1BBTklTSCwgU1VCTEFOR19ERUZBVUxUCgpJRERfU0FWRU9QVElPTlMgRElBTE9HIEZJWEVEIElNUFVSRSAgNDMsIDM3LCAxOTYsIDgyClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX1ZJU0lCTEUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJPcGNpb25lcyBkZSBjb21wcmVzafNuIgpGT05UIDgsICJNUyBTYW5zIFNlcmlmIgpCRUdJTgogICAgTFRFWFQgICAgICAgICAgICImRWxpamEgdW4gc3RyZWFtOiIsLTEsMiw1LDExNCwxMAogICAgQ09NQk9CT1ggICAgICAgIElEQ19TVFJFQU0sMiwxOCwxMzQsNjEsQ0JTX0RST1BET1dOTElTVCB8IFdTX1ZTQ1JPTEwgfCAKICAgICAgICAgICAgICAgICAgICBXU19UQUJTVE9QCiAgICBQVVNIQlVUVE9OICAgICAgIiZPcGNpb25lcy4uLiIsSURDX09QVElPTlMsMTQ1LDE3LDQ1LDE0CiAgICBBVVRPQ0hFQ0tCT1ggICAgIiZJbnRlcmxlYXZlIGNhZGEiLElEQ19JTlRFUkxFQVZFLDMsNDIsNjAsMTEsV1NfVEFCU1RPUAogICAgRURJVFRFWFQgICAgICAgIElEQ19JTlRFUkxFQVZFRVZFUlksNjYsNDEsMzIsMTIsRVNfQVVUT0hTQ1JPTEwKICAgIExURVhUICAgICAgICAgICAiY3VhZHJvcyIsLTEsMTA0LDQzLDM2LDkKICAgIExURVhUICAgICAgICAgICAiRm9ybWF0byBhY3R1YWw6IiwtMSwzLDU2LDUzLDkKICAgIExURVhUICAgICAgICAgICAiRXNwYWNpbyBlbiBhbHF1aWxlciIsSURDX0ZPUk1BVFRFWFQsNTUsNTYsOTAsMjYKICAgIERFRlBVU0hCVVRUT04gICAiQWNlcHRhciIsSURPSywxNDUsNDIsNDUsMTQKICAgIFBVU0hCVVRUT04gICAgICAiQ2FuY2VsYXIiLElEQ0FOQ0VMLDE0NSw2MSw0NSwxNApFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKICBJRFNfV0FWRVNUUkVBTUZPUk1BVAkiRm9ybWF0byBkZSBvbmRhczogJXMiCiAgSURTX1dBVkVGSUxFVFlQRQkiRm9ybWF0byBkZSBvbmRhcyIKICBJRFNfQUxMTVVMVElNRURJQQkiVG9kb3MgbG9zIGFyY2hpdm9zIG11bHRpbWVkaWEiCiAgSURTX0FMTEZJTEVTCQkiVG9kb3MgbG9zIGFyY2hpdm9zICgqLiopQCouKiIKICBJRFNfVklERU8JCSJ27WRlbyIKICBJRFNfQVVESU8JCSJhdWRpbyIKICBJRFNfQVZJU1RSRUFNRk9STUFUCSIlcyAlcyAjJWQiCiAgSURTX0FWSUZJTEVUWVBFCSJNYW5lamFkb3IgZGUgYXJjaGl2byBBVkkgcG9yIGRlZmVjdG8gZGUgV2luZSIKICBJRFNfVU5DT01QUkVTU0VEICAgICAgInNpbiBjb21wcmVzafNuIgp9Cg==