LyoKICogU3RhcnQKICogVHVya2lzaCBMYW5ndWFnZSBTdXBwb3J0CiAqCiAqIENvcHlyaWdodCAyMDA2IEZhdGloIEH+/WP9CiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfVFVSS0lTSCwgU1VCTEFOR19ERUZBVUxUCgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRSBMQU5HVUFHRSBMQU5HX1RVUktJU0gsIFNVQkxBTkdfREVGQVVMVAp7ClNUUklOR19VU0FHRSwgICAgIkJpciBwcm9ncmFt/SB2ZXlhIHV6YW50/XP9IGlsZSBpbGn+a2lsaSBvbGFuIHByb2dyYW0gaedpbmRlIGJpciBiZWxnZXlpIGHnYXIuXG5cCkt1bGxhbv1tOlxuXApzdGFydCBbc2XnZW5la2xlcl0gcHJvZ3JhbV9kb3N5YWFk/SBbLi4uXVxuXApzdGFydCBbc2XnZW5la2xlcl0gYmVsZ2VfZG9zeWFhZP1cblwKXG5cClNl52VuZWtsZXI6XG5cCi9NW2luaW1pemVkXSBTaW1nZSBoYWxpbmRlIGJh/mxhdC5cblwKL01BWFtpbWl6ZWRdIEVrcmFu/SBrYXBsYXlhY2FrIP5la2lsZGUgYmH+bGF0LlxuXAovUltlc3RvcmVkXSAgUHJvZ3Jhbf0gbm9ybWFsIGJpciD+ZWtpbGRlIGJh/mxhdCAoc2ltZ2UgaGFsaW5kZSB2ZXlhIGL8efx0/Gxt/P4gaGFsZGUgb2xhYmlsaXIpLlxuXAovV1thaXRdICAgICAgQmH+bGF0/Wxt/f4gcHJvZ3Jhbf1uIGJpdG1lc2luaSBiZWtsZSwgc29ucmEg5/1r/f4ga29kdXlsYSDn/WsuXG5cCi9MICAgICAgICAgICBTb24ta3VsbGFu/WP9IGxpc2Fuc/1u/SBn9nN0ZXIuXG5cClxuXApzdGFydC5leGUgc/xy/G0gMC4yIFRlbGlmIEhha2v9IChDKSAyMDAzLCBEYW4gS2VnZWxcblwKU3RhcnQgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyBydW4gd2l0aCAvTCBvcHRpb24uXG5cClRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXRcblwKdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyBydW4gJ3N0YXJ0IC9MJyBmb3IgZGV0YWlscy5cblwKIgoKU1RSSU5HX0xJQ0VOU0UsICJzdGFydC5leGUgc/xy/G0gMC4yIFRlbGlmIEhha2v9IChDKSAyMDAzLCBEYW4gS2VnZWxcblwKVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vclxuXAptb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIFB1YmxpYyBMaWNlbnNlXG5cCmFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjFcblwKb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cClxuXApUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcblwKYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcblwKTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuXApHTlUgTGVzc2VyIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cClxuXApZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIFB1YmxpYyBMaWNlbnNlXG5cCmFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG5cCkZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuXG5cClxuXApTZWUgdGhlIENPUFlJTkcuTElCIGZpbGUgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXG5cCiIKClNUUklOR19FWEVDRkFJTCAiVXlndWxhbWEgYmH+bGF0/WxhbWFk/SB2ZXlhIGJlbGlydGlsZW4gZG9zeWEgaWxlIGlsaf5raWxpIGJpciB1eWd1bGFtYSB5b2suXG5TaGVsbEV4ZWN1dGVFeCBiYf5hcv1z/XoiCgpTVFJJTkdfVU5JWEZBSUwgIkNvdWxkIG5vdCB0cmFuc2xhdGUgdGhlIHNwZWNpZmllZCBVbml4IGZpbGVuYW1lIHRvIGEgRE9TIGZpbGVuYW1lLiIKfQo=