LyoKICogY29tY3RsIChCdWxnYXJpYW4gcmVzb3VyY2UpCiAqCiAqIENvcHlyaWdodCAyMDA1IE1pbGtvIEtyYWNob3Vub3YKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19CVUxHQVJJQU4sIFNVQkxBTkdfREVGQVVMVAoKSUREX1BST1BTSEVFVCBESUFMT0cgRElTQ0FSREFCTEUgMCwgMCwgMjIwLCAxNDAKU1RZTEUgRFNfQ09OVEVYVEhFTFAgfCBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVSB8IFdTX1ZJU0lCTEUKQ0FQVElPTiAi0eLu6fHy4uAg7eAgJXMiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQkVHSU4KICBERUZQVVNIQlVUVE9OICJPSyIsICAgICBJRE9LLDQsMTIyLDUwLDE0LCBXU19UQUJTVE9QIHwgV1NfR1JPVVAKICBQVVNIQlVUVE9OICAgICLO8uzl7egiLCBJRENBTkNFTCw1OCwxMjIsNTAsMTQKICBQVVNIQlVUVE9OICAgICImz+7y4vrw5OgiLCBJRENfQVBQTFlfQlVUVE9OLDExMiwxMjIsNTAsMTQsV1NfRElTQUJMRUQKICBQVVNIQlVUVE9OICAgICLP7uzu+SIsICAgSURIRUxQLDE2NiwxMjIsNTAsMTQsV1NfVEFCU1RPUHxXU19HUk9VUAogIENPTlRST0wgICAgICAgIlRhYiIsICAgIElEQ19UQUJDT05UUk9MLCJTeXNUYWJDb250cm9sMzIiLFdTX0NMSVBTSUJMSU5HU3xXU19HUk9VUHxXU19UQUJTVE9QfFRDU19NVUxUSUxJTkUsNCw0LDIxMiwxMTQKRU5ECgoKSUREX1dJWkFSRCBESUFMT0cgRElTQ0FSREFCTEUgMCwgMCwgMjkwLCAxNTkKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUgfCBXU19WSVNJQkxFCkNBUFRJT04gIldpemFyZCIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgpCRUdJTgogIFBVU0hCVVRUT04gICAgIjwgzeAm5+DkIiwgSURDX0JBQ0tfQlVUVE9OLDcxLDEzOCw1MCwxNAogIERFRlBVU0hCVVRUT04gIs3gJu/w5eQgPiIsIElEQ19ORVhUX0JVVFRPTiwxMjEsMTM4LDUwLDE0CiAgREVGUFVTSEJVVFRPTiAiz/Do6uv+9+giLCAgSURDX0ZJTklTSF9CVVRUT04sMTIxLDEzOCw1MCwxNAogIFBVU0hCVVRUT04gICAgIs7y7OXt6CIsICBJRENBTkNFTCwxNzgsMTM4LDUwLDE0CiAgUFVTSEJVVFRPTiAgICAiz+7s7vkiLCAgICBJREhFTFAsMjM1LDEzOCw1MCwxNCxXU19HUk9VUAogIExURVhUICAgICAgICAgIiIsICAgICAgICBJRENfU1VOS0VOX0xJTkUsNywxMjksMjc4LDEsU1NfU1VOS0VOCiAgQ09OVFJPTCAgICAgICAiVGFiIiwgICAgIElEQ19UQUJDT05UUk9MLCJTeXNUYWJDb250cm9sMzIiLFdTX0NMSVBTSUJMSU5HUyB8IFdTX0RJU0FCTEVELDcsNywyNTgsNQogIExURVhUCSAgICAgICAgIiIsICAgICAgICBJRENfU1VOS0VOX0xJTkVIRUFERVIsMCwzNSwyOTAsMSxTU19MRUZUIHwgU1NfU1VOS0VOIHwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFCkVORAoKCklERF9UQkNVU1RPTUlaRSBESUFMT0cgRElTQ0FSREFCTEUgMTAsIDIwLCA0MDcsIDEyNSAvKiAzNTcgLT4gNDA3ID8gKi8KU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIs/l8PHu7eDr6Ofo8ODt5SDt4CDr5e3y4PLgIPEg6O3x8vDz7OXt8ugiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQkVHSU4KICBERUZQVVNIQlVUVE9OICImx+Dy4u7w6CIsICAgICBJRENBTkNFTCwzMTgsNiw4NCwxNCAgICAgICAgICAgLyogNDQgLT4gODQ7IDMwOCAtPiAzMTggPyAqLwogIFBVU0hCVVRUT04gICAgIibC+ufx8uDt7uLoIiwgICAgIElEQ19SRVNFVF9CVE4sMzE4LDIzLDg0LDE0ICAgICAvKiA0NCAtPiA4NCA/ICovCiAgUFVTSEJVVFRPTiAgICAiJs/u7O75IiwgICAgICBJRENfSEVMUF9CVE4sMzE4LDQwLDg0LDE0ICAgICAgICAgIC8qIDQ0IC0+IDg0ID8gKi8KICBQVVNIQlVUVE9OICAgICLP8OXs5fHy6CDt4Cbj7vDlIiwgICBJRENfTU9WRVVQX0JUTiwzMTgsNzQsODQsMTQgLyogNDQgLT4gODQgPyAqLwogIFBVU0hCVVRUT04gICAgIs/w5ezl8fLoIO3gJuTu6/MiLCBJRENfTU9WRUROX0JUTiwzMTgsOTEsODQsMTQgICAvKiA0NCAtPiA4NCA/ICovCiAgTFRFWFQgICAgICAgICAiJs3g6+j37egg4fPy7u3oOiIsIC0xLDQsNSw4NCwxMAogIExJU1RCT1ggICAgICAgSURDX0FWQUlMQlROX0xCT1gsNCwxNywxMjAsMTAwLCBMQlNfTk9USUZZIHwgTEJTX09XTkVSRFJBV0ZJWEVEIHwgTEJTX0hBU1NUUklOR1MgfCBMQlNfTk9JTlRFR1JBTEhFSUdIVCB8IExCU19ESVNBQkxFTk9TQ1JPTEwgfCBXU19CT1JERVIgfCBXU19WU0NST0xMIHwgV1NfSFNDUk9MTCB8IFdTX1RBQlNUT1AKICBQVVNIQlVUVE9OICAgICLE7ibh4OLoIC0+IiwgICAgSURPSywgMTMxLCA0MiwgNTQsIDE0ICAgICAgIC8qIDQ0IC0+IDU0ID8gKi8KICBQVVNIQlVUVE9OICAgICI8LSDP8OUm7OD17egiLCBJRENfUkVNT1ZFX0JUTiwxMzEsNjIsNTQsMTQgIC8qIDQ0IC0+IDU0ID8gKi8KICBMVEVYVCAgICAgICAgICImwfPy7u3oIO3gIOvl7fLg8uAg8SDo7fHy8PPs5e3y6DoiLCAtMSwxOTIsNSw3OCwxMCAvKiAxODIgLT4gMTkyID8gKi8KICBMSVNUQk9YICAgICAgIElEQ19UT09MQkFSQlROX0xCT1gsIDE5MiwxNywxMjAsMTAwLExCU19OT1RJRlkgfCBMQlNfT1dORVJEUkFXRklYRUQgfCBMQlNfSEFTU1RSSU5HUyB8IExCU19OT0lOVEVHUkFMSEVJR0hUIHwgTEJTX0RJU0FCTEVOT1NDUk9MTCB8IFdTX0JPUkRFUiB8IFdTX1ZTQ1JPTEwgfCBXU19IU0NST0xMIHwgV1NfVEFCU1RPUCAvKiAxODIgLT4gMTkyID8gKi8KRU5ECgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CiAgICBJRFNfQ0xPU0UgICAgIsfg8uLu8OgiCn0KClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKICAgIElETV9UT0RBWSAgICAixO3l8ToiCiAgICBJRE1fR09UT0RBWSAgIsjk6CDt4CDk7eXxIgp9CgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CiAgICBJRFNfU0VQQVJBVE9SICLQ4Ofk5evo8uXrIgp9CgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CiAgICBIS1lfTk9ORSAizej57iIKfQo=