LyoKICogQ29weXJpZ2h0IDIwMDYgRmF0aWggQf79Y/0KICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKI2luY2x1ZGUgImNvbWN0bDMyLmgiCgpMQU5HVUFHRSBMQU5HX1RVUktJU0gsIFNVQkxBTkdfREVGQVVMVAoKSUREX1BST1BTSEVFVCBESUFMT0cgRElTQ0FSREFCTEUgMCwgMCwgMjIwLCAxNDAKU1RZTEUgRFNfQ09OVEVYVEhFTFAgfCBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVSB8IFdTX1ZJU0lCTEUKQ0FQVElPTiAi1nplbGxpa2xlcjogJXMiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQkVHSU4KICBERUZQVVNIQlVUVE9OICJUYW1hbSIsICAgICBJRE9LLDQsMTIyLDUwLDE0LCBXU19UQUJTVE9QIHwgV1NfR1JPVVAKICBQVVNIQlVUVE9OICAgICLdcHRhbCIsIElEQ0FOQ0VMLDU4LDEyMiw1MCwxNAogIFBVU0hCVVRUT04gICAgIiZVeWd1bGEiLCBJRENfQVBQTFlfQlVUVE9OLDExMiwxMjIsNTAsMTQsV1NfRElTQUJMRUQKICBQVVNIQlVUVE9OICAgICJZYXJk/W0iLCAgIElESEVMUCwxNjYsMTIyLDUwLDE0LFdTX1RBQlNUT1B8V1NfR1JPVVAKICBDT05UUk9MICAgICAgICJTZWttZSIsICAgIElEQ19UQUJDT05UUk9MLCJTeXNUYWJDb250cm9sMzIiLFdTX0NMSVBTSUJMSU5HU3xXU19HUk9VUHxXU19UQUJTVE9QfFRDU19NVUxUSUxJTkUsNCw0LDIxMiwxMTQKRU5ECgoKSUREX1dJWkFSRCBESUFMT0cgRElTQ0FSREFCTEUgMCwgMCwgMjkwLCAxNTkKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUgfCBXU19WSVNJQkxFCkNBUFRJT04gIlNpaGlyYmF6IgpGT05UIDgsICJNUyBTaGVsbCBEbGciCkJFR0lOCiAgUFVTSEJVVFRPTiAgICAiPCAmR2VyaSIsIElEQ19CQUNLX0JVVFRPTiw3MSwxMzgsNTAsMTQKICBERUZQVVNIQlVUVE9OICIm3WxlcmkgPiIsIElEQ19ORVhUX0JVVFRPTiwxMjEsMTM4LDUwLDE0CiAgREVGUFVTSEJVVFRPTiAiU29uIiwgIElEQ19GSU5JU0hfQlVUVE9OLDEyMSwxMzgsNTAsMTQKICBQVVNIQlVUVE9OICAgICLdcHRhbCIsICBJRENBTkNFTCwxNzgsMTM4LDUwLDE0CiAgUFVTSEJVVFRPTiAgICAiWWFyZP1tIiwgICAgSURIRUxQLDIzNSwxMzgsNTAsMTQsV1NfR1JPVVAKICBMVEVYVCAgICAgICAgICIiLCAgICAgICAgSURDX1NVTktFTl9MSU5FLDcsMTI5LDI3OCwxLFNTX1NVTktFTgogIENPTlRST0wgICAgICAgIlNla21lIiwgICAgIElEQ19UQUJDT05UUk9MLCJTeXNUYWJDb250cm9sMzIiLFdTX0NMSVBTSUJMSU5HUyB8IFdTX0RJU0FCTEVELDcsNywyNTgsNQogIExURVhUCSAgICAgICAgIiIsICAgICAgICBJRENfU1VOS0VOX0xJTkVIRUFERVIsMCwzNSwyOTAsMSxTU19MRUZUIHwgU1NfU1VOS0VOIHwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFCkVORAoKCklERF9UQkNVU1RPTUlaRSBESUFMT0cgRElTQ0FSREFCTEUgMTAsIDIwLCAzNTcsIDEyNQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiQXJh5yDHdWJ18HVudSDWemVsbGX+dGlyIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCkJFR0lOCiAgREVGUFVTSEJVVFRPTiAiJkthcGF0IiwgICAgIElEQ0FOQ0VMLDMwOCw2LDQ0LDE0CiAgUFVTSEJVVFRPTiAgICAiUyb9Zv1ybGEiLCAgICAgSURDX1JFU0VUX0JUTiwzMDgsMjMsNDQsMTQKICBQVVNIQlVUVE9OICAgICImWWFyZP1tIiwgICAgICBJRENfSEVMUF9CVE4sMzA4LDQwLDQ0LDE0CiAgUFVTSEJVVFRPTiAgICAiJll1a2Fy/SBUYf79IiwgICBJRENfTU9WRVVQX0JUTiwzMDgsNzQsNDQsMTQKICBQVVNIQlVUVE9OICAgICImQf5h8P0gVGH+/SIsIElEQ19NT1ZFRE5fQlROLDMwOCw5MSw0NCwxNAogIExURVhUICAgICAgICAgIksmdWxsYW79bGFiaWxpciBidXRvbmxhcjoiLCAtMSw0LDUsODQsMTAKICBMSVNUQk9YICAgICAgIElEQ19BVkFJTEJUTl9MQk9YLDQsMTcsMTIwLDEwMCwgTEJTX05PVElGWSB8IExCU19PV05FUkRSQVdGSVhFRCB8IExCU19IQVNTVFJJTkdTIHwgTEJTX05PSU5URUdSQUxIRUlHSFQgfCBMQlNfRElTQUJMRU5PU0NST0xMIHwgV1NfQk9SREVSIHwgV1NfVlNDUk9MTCB8IFdTX0hTQ1JPTEwgfCBXU19UQUJTVE9QCiAgUFVTSEJVVFRPTiAgICAiJkVrbGUgLT4iLCAgICBJRE9LLCAxMzEsIDQyLCA0NCwgMTQKICBQVVNIQlVUVE9OICAgICI8LSAmS2FsZP1yIiwgSURDX1JFTU9WRV9CVE4sMTMxLDYyLDQ0LDE0CiAgTFRFWFQgICAgICAgICAiJkFyYecgx3VidfB1IGJ1dG9ubGFy/ToiLCAtMSwxODIsNSw3OCwxMAogIExJU1RCT1ggICAgICAgSURDX1RPT0xCQVJCVE5fTEJPWCwgMTgyLDE3LDEyMCwxMDAsTEJTX05PVElGWSB8IExCU19PV05FUkRSQVdGSVhFRCB8IExCU19IQVNTVFJJTkdTIHwgTEJTX05PSU5URUdSQUxIRUlHSFQgfCBMQlNfRElTQUJMRU5PU0NST0xMIHwgV1NfQk9SREVSIHwgV1NfVlNDUk9MTCB8IFdTX0hTQ1JPTEwgfCBXU19UQUJTVE9QCkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKewogICAgSURTX0NMT1NFICAgICJLYXBhdCIKfQoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKewogICAgSURNX1RPREFZICAgICJCdWf8bjoiCiAgICBJRE1fR09UT0RBWSAgIkJ1Z/xuZSBnaXQiCn0KClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKICAgIElEU19TRVBBUkFUT1IgIkF5cmHnIgp9CgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CiAgICBIS1lfTk9ORSAiSGnnYmlyaSIKfQo=