LyoKICogWENPUFkgLSBXaW5lLWNvbXBhdGlibGUgeGNvcHkgcHJvZ3JhbQogKiBQb2xpc2ggbGFuZ3VhZ2Ugc3VwcG9ydAogKgogKiBDb3B5cmlnaHQgKEMpIDIwMDcgSi4gRWRtZWFkZXMKICogQ29weXJpZ2h0IChDKSAyMDA3IE1pa29sYWogWmFsZXdza2kKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKCkxBTkdVQUdFIExBTkdfUE9MSVNILCBTVUJMQU5HX0RFRkFVTFQKClNUUklOR1RBQkxFCnsKICAgIFNUUklOR19JTlZQQVJNUywgIk5pZXezYZxjaXdhIGxpY3piYSBwYXJhbWV0cvN3IC0gdXJ1Y2hvbSB4Y29weSAvPyBhYnkgd3mcd2lldGxp5iBwb21vY1xuIgogICAgU1RSSU5HX0lOVlBBUk0sICAiTmllem5hbnkgcGFyYW1ldGVyICclcycgLSAgdXJ1Y2hvbSB4Y29weSAvPyBhYnkgd3mcd2lldGxp5iBwb21vY1xuIgogICAgU1RSSU5HX1BBVVNFLCAgICAiTmFjaZxuaWogPGVudGVyPiBhYnkgcm96cG9jernmIGtvcGlvd2FuaWVcbiIKICAgIFNUUklOR19TSU1DT1BZLCAgIiVkIHBsaWso83cpIHpvc3Rhs29ieSBza29waW93YW55Y2hcbiIKICAgIFNUUklOR19DT1BZLCAgICAgIiVkIHBsaWso83cpIHNrb3Bpb3dhbnljaFxuIgogICAgU1RSSU5HX1FJU0RJUiwgICAiQ3p5ICclcycgamVzdCBuYXp3uSBwbGlrdSBjenkga2F0YWxvZ3VcbiIgXAogICAgICAgICAgICAgICAgICAgICAiZG9jZWxvd2Vnbz9cbiIgXAogICAgICAgICAgICAgICAgICAgICAiKFAgLSBwbGlrLCBLIC0ga2F0YWxvZylcbiIKICAgIFNUUklOR19TUkNQUk9NUFQsIiVzPyAoVGFrfE5pZSlcbiIKICAgIFNUUklOR19PVkVSV1JJVEUsIlphc3S5cGnmICVzPyAoVGFrfE5pZXxXc3p5c3RraWUpXG4iCiAgICBTVFJJTkdfQ09QWUZBSUwsICJLb3Bpb3dhbmllICclcycgZG8gJyVzJyBuaWUgcG93aW9ks28gc2nqIC0ga29kIGKz6mR1ICVkXG4iCiAgICBTVFJJTkdfT1BFTkZBSUwsICJOaWUgdWRhs28gc2nqIG90d29yennmICclcydcbiIKICAgIFNUUklOR19SRUFERkFJTCwgIkKzuWQgcG9kY3phcyBjenl0YW5pYSAnJXMnXG4iCiAgICBTVFJJTkdfWUVTX0NIQVIsICJUIgogICAgU1RSSU5HX05PX0NIQVIsICAiTiIKICAgIFNUUklOR19BTExfQ0hBUiwgIlciCiAgICBTVFJJTkdfRklMRV9DSEFSLCJQIgogICAgU1RSSU5HX0RJUl9DSEFSLCAiSyIKCiAgICBTVFJJTkdfSEVMUCwKIlhDT1BZIC0ga29waXVqZSBwbGlraSBsdWIgZHJ6ZXdhIGthdGFsb2fzd1xuXApcblwKU2uzYWRuaWE6XG5cClhDT1BZIJ9y82SzbyBbY2VsXSBbL0ldIFsvU10gWy9RXSBbL0ZdIFsvTF0gWy9XXSBbL1RdIFsvTl0gWy9VXVxuXApcdCAgICAgWy9SXSBbL0hdIFsvQ10gWy9QXSBbL0FdIFsvTV0gWy9FXSBbL0RdIFsvWV0gWy8tWV1cblwKXG5cCkdkemllOlxuXApcblwKWy9JXSAgSmW/ZWxpIFwiY2VsXCIgbmllIGlzdG5pZWplIGkga29waW93YW5lIHO5IGNvIG5ham1uaWVqIGR3YSBwbGlraSxcblwKXHR6YWuzYWRhLCC/ZSBcImNlbFwiIHBvd2llbiBieeYga2F0YWxvZ2llbVxuXApbL1NdICBLb3BpdWplIGthdGFsb2dpIGkgcG9ka2F0YWxvZ2lcblwKWy9FXSAgS29waXVqZSBrYXRhbG9naSBpIHBvZGthdGFsb2dpLCCzuWN6bmllIHogcHVzdHltaVxuXApbL1FdICBOaWUgd3lwaXN1amUgbmF6dyBwbGlr83cgcG9kY3phcyBrb3Bpb3dhbmlhICh0cnliIGNpY2h5KVxuXApbL0ZdICBXeXBpc3VqZSBwZbNuZSCcY2llv2tpIJ9y82Szb3dlIGkgZG9jZWxvd2UgcG9kY3phcyBrb3Bpb3dhbmlhXG5cClsvTF0gIEplZHluaWUgc3ltdWx1amUgb3BlcmFjauosIHBva2F6dWq5YyBwbGlraSwga3TzcmUgYnmzeWJ5IGtvcGlvd2FuZVxuXApbL1ddICBQcm9zaSBvIHBvdHdpZXJkemVuaWUgcHJ6ZWQgcm96cG9jeupjaWVtIGtvcGlvd2FuaWFcblwKWy9UXSAgVHdvcnp5IHB1c3RlIGthdGFsb2dpLCBhbGUgbmllIGtvcGl1amUgcGxpa/N3XG5cClsvWV0gIFphc3TqcHVqZSBwbGlraSBiZXogcHJvnGJ5IG8gcG90d2llcmR6ZW5pZVxuXApbLy1ZXSBaYXdzemUgcHJvc2kgbyBwb3R3aWVyZHplbmllIHByemVkIHphc3S5cGllbmllbSBwbGlrdVxuXApbL1BdICBQcm9zaSBvIHBvdHdpZXJkemVuaWUgcHJ6ZWQgc2tvcGlvd2FuaWVtIGthv2RlZ28gcGxpa3VcblwKWy9OXSAgS29waXVqZSB1v3l3YWq5YyBrcvN0a2ljaCBuYXp3IHBsaWvzd1xuXApbL1VdICBLb3BpdWplIHR5bGtvIHBsaWtpLCBrdPNyZSBqdb8gaXN0bmllarkgdyBtaWVqc2N1IGRvY2Vsb3d5bVxuXApbL1JdICBaYXN06nB1amUgcGxpa2kgdHlsa28gZG8gb2Rjenl0dVxuXApbL0hdICBLb3BpdWplIHLzd25pZb8gcGxpa2kgdWtyeXRlIGkgc3lzdGVtb3dlXG5cClsvQ10gIEtvbnR5bnV1amUgbmF3ZXQgamW/ZWxpIHBvZGN6YXMga29waW93YW5pYSB3eXN06nBps3kgYrPqZHlcblwKWy9BXSAgS29waXVqZSB0eWxrbyBwbGlraSB6IGF0cnlidXRlbSBhcmNoaXdhbG55XG5cClsvTV0gIEtvcGl1amUgdHlsa28gcGxpa2kgeiBhdHJ5YnV0ZW0gYXJjaGl3YWxueSBpIHVzdXdhIHRlbiBhdHJ5YnV0XG5cClsvRCB8IC9EOm0tZC15XSBLb3BpdWplIHR5bGtvIG5vd2UgcGxpa2kgbHViIHRlIHptb2RpZmlrb3dhbmUgcG8gcG9kYW5laiBkYWNpZS5cblwKXHRcdEplv2VsaSBuaWUgcG9kYW5vIL9hZG5laiBkYXR5LCB0byBrb3Bpb3dhbmUgc7kgcGxpa2ksIGt083JlIHO5XG5cClx0XHRub3dzemUgbmm/IHcga2F0YWxvZ3UgZG9jZWxvd3ltXG5cbiIKCn0K