LyoKICogU3RhcnQKICogVHVya2lzaCBMYW5ndWFnZSBTdXBwb3J0CiAqCiAqIENvcHlyaWdodCAyMDA2IEZhdGloIEH+/WP9CiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfVFVSS0lTSCwgU1VCTEFOR19ERUZBVUxUCgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRSBMQU5HVUFHRSBMQU5HX1RVUktJU0gsIFNVQkxBTkdfREVGQVVMVAp7ClNUUklOR19VU0FHRSwgICAgIkJpciBwcm9ncmFt/SB2ZXlhIHV6YW50/XP9IGlsZSBpbGn+a2lsaSBvbGFuIHByb2dyYW0gaedpbmRlIGJpciBiZWxnZXlpIGHnYXIuIFxuXApLdWxsYW79bTogXG5cCnN0YXJ0IFtzZedlbmVrbGVyXSBwcm9ncmFtX2Rvc3lhYWT9IFsuLi5dIFxuXApzdGFydCBbc2XnZW5la2xlcl0gYmVsZ2VfZG9zeWFhZP0gXG5cCiBcblwKU2XnZW5la2xlcjogXG5cCi9NW2luaW1pemVkXSBTaW1nZSBoYWxpbmRlIGJh/mxhdC4gXG5cCi9NQVhbaW1pemVkXSBFa3Jhbv0ga2FwbGF5YWNhayD+ZWtpbGRlIGJh/mxhdC4gXG5cCi9SW2VzdG9yZWRdICBQcm9ncmFt/SBub3JtYWwgYmlyIP5la2lsZGUgYmH+bGF0IChzaW1nZSBoYWxpbmRlIHZleWEgYvx5/HT8bG38/iBoYWxkZSBvbGFiaWxpcikuIFxuXAovV1thaXRdICAgICAgQmH+bGF0/Wxt/f4gcHJvZ3Jhbf1uIGJpdG1lc2luaSBiZWtsZSwgc29ucmEg5/1r/f4ga29kdXlsYSDn/WsuIFxuXAovTCAgICAgICAgICAgU29uLWt1bGxhbv1j/SBsaXNhbnP9bv0gZ/ZzdGVyLiBcblwKIFxuXApzdGFydC5leGUgc/xy/G0gMC4yIFRlbGlmIEhha2v9IChDKSAyMDAzLCBEYW4gS2VnZWwgXG5cClN0YXJ0IGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgcnVuIHdpdGggL0wgb3B0aW9uLiBcblwKVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdCBcblwKdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyBydW4gJ3N0YXJ0IC9MJyBmb3IgZGV0YWlscy4gXG5cCiIKClNUUklOR19MSUNFTlNFLCAic3RhcnQuZXhlIHP8cvxtIDAuMiBUZWxpZiBIYWtr/SAoQykgMjAwMywgRGFuIEtlZ2VsIFxuXApUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIFxuXAptb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIFB1YmxpYyBMaWNlbnNlIFxuXAphcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIFxuXApvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gXG5cCiBcblwKVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIFxuXApidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBcblwKTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBcblwKR05VIExlc3NlciBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiBcblwKIFxuXApZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIFB1YmxpYyBMaWNlbnNlIFxuXAphbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBcblwKRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuIFxuXAogXG5cClNlZSB0aGUgQ09QWUlORy5MSUIgZmlsZSBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi4gXG5cCiIKClNUUklOR19FWEVDRkFJTCAiVXlndWxhbWEgYmH+bGF0/WxhbWFk/SB2ZXlhIGJlbGlydGlsZW4gZG9zeWEgaWxlIGlsaf5raWxpIGJpciB1eWd1bGFtYSB5b2suXG5TaGVsbEV4ZWN1dGVFeCBiYf5hcv1z/XoiCn0K