LyoKICogIE5vdGVwYWQgKFR1cmtpc2ggcmVzb3VyY2VzKQogKgogKiAgQ29weXJpZ2h0IDIwMDYgRmF0aWggQf79Y/0gPGZhdGloLmFzaWNpQGdtYWlsLmNvbT4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19UVVJLSVNILCBTVUJMQU5HX0RFRkFVTFQKCk1BSU5fTUVOVSBNRU5VCnsKIFBPUFVQICImRG9zeWEiIHsKICBNRU5VSVRFTSAiJlllbmlcdEN0cmwrTiIsICAgIENNRF9ORVcKICBNRU5VSVRFTSAiJkHnLi4uXHRDdHJsK08iLCAgICAgICAgIENNRF9PUEVOCiAgTUVOVUlURU0gIiZLYXlkZXRcdEN0cmwrUyIsICAgICBDTURfU0FWRQogIE1FTlVJVEVNICImRmFya2z9IEtheWRldC4uLiIsICAgQ01EX1NBVkVfQVMKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiWWEmemT9ci4uLlx0Q3RybCtQIiwgICAgIENNRF9QUklOVAogIE1FTlVJVEVNICJTYSZ5ZmEgQXlhcv0uLi4iLCAgICAgQ01EX1BBR0VfU0VUVVAKICBNRU5VSVRFTSAiWWF6/WP9ICZBeWFybGFy/S4uLiIsIENNRF9QUklOVEVSX1NFVFVQCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIibH/Wv9/iIsICAgICAgICAgICAgICBDTURfRVhJVAogfQpQT1BVUCAiRCb8emVubGUiIHsKICBNRU5VSVRFTSAiJkdlcmkgQWxcdEN0cmwrWiIsICAgICBDTURfVU5ETwogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImS2VzXHRDdHJsK1giLCAgICAgICAgIENNRF9DVVQKICBNRU5VSVRFTSAiSyZvcHlhbGFcdEN0cmwrQyIsICAgICBDTURfQ09QWQogIE1FTlVJVEVNICJZYSZw/f50/XJcdEN0cmwrViIsICAgIENNRF9QQVNURQogIE1FTlVJVEVNICImU2lsXHREZWwiLCAgICAgICAgICAgIENNRF9ERUxFVEUKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJlT8bfxu/CBzZedcdEN0cmwrQSIsICBDTURfU0VMRUNUX0FMTAogIE1FTlVJVEVNICJTJmFhdC9UYXJpaFx0RjUiLCAgICAgIENNRF9USU1FX0RBVEUKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJlV6dW4gc2F0/XJsYXL9IGv9cnAiLCBDTURfV1JBUAogIE1FTlVJVEVNICImWWF6/SBUaXBpLi4uIiwgICAgICAgIENNRF9GT05UCiB9ClBPUFVQICImQnVsIiB7CiAgTUVOVUlURU0gIiZCdWwuLi5cdEN0cmwrRiIsICAgICAgICAgQ01EX1NFQVJDSAogIE1FTlVJVEVNICImU29ucmFraW5pIGJ1bFx0RjMiLCAgIENNRF9TRUFSQ0hfTkVYVAogfQpQT1BVUCAiJllhcmT9bSIgewogIE1FTlVJVEVNICIm3edpbmRla2lsZXIiLCAgICAgICAgICAgICAgQ01EX0hFTFBfQ09OVEVOVFMKICBNRU5VSVRFTSAiJkFyYS4uLiIsICAgICAgICAgICAgICBDTURfSEVMUF9TRUFSQ0gKICBNRU5VSVRFTSAiJllhcmT9bSBrdWxsYW79bf0iLCAgICBDTURfSEVMUF9PTl9IRUxQCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZBYm91dCBOb3RlcGFkIiwgQ01EX0hFTFBfQUJPVVRfTk9URVBBRAogfQp9CgovKiBEaWFsb2cgYFBhZ2Ugc2V0dXAnICovCgpESUFMT0dfUEFHRVNFVFVQIERJQUxPRyAwLCAwLCAyMjUsIDk1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpGT05UIDgsICJNUyBTaGVsbCBEbGciCkNBUFRJT04gIlNheWZhIEF5YXJsYXL9Igp7CkxURVhUICAgICImU2F5ZmEgQmH+/ToiLCAgMHgxNDAsICAgMTAsIDA3LCA0MCwgMTUKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9IRUFERVJWQUxVRSwgICA2MCwgMDUsMTEwLCAxMiwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJlNheWZhIFNvbnU6IiwgIDB4MTQyLCAgIDEwLCAyNCwgNDAsIDE1CkVESVRURVhUIElEQ19QQUdFU0VUVVBfRk9PVEVSVkFMVUUsICAgNjAsIDIyLDExMCwgMTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKCkdST1VQQk9YICImS2VuYXJs/WtsYXI6IiwgICAgICAweDE0NCwgICAgIDEwLCA0MywxNjAsIDQ1CkxURVhUICAgICImU29sOiIsICAgICAgICAweDE0NSwgICAyMCwgNTUsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9MRUZUVkFMVUUsICAgICA1MCwgNTUsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICIm3HN0OiIsICAgICAgICAgMHgxNDgsICAgIDIwLCA3MywgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCBJRENfUEFHRVNFVFVQX1RPUFZBTFVFLCAgICAgIDUwLCA3MywgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIlMmYfA6IiwgICAgICAgMHgxNEIsIDEwMCwgNTUsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9SSUdIVFZBTFVFLCAgIDEzMCwgNTUsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICJBJmx0OiIsICAgICAgMHgxNEUsMTAwLCA3MywgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCBJRENfUEFHRVNFVFVQX0JPVFRPTVZBTFVFLCAgMTMwLCA3MywgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKCkRFRlBVU0hCVVRUT04gIlRhbWFtIiwgICAgICAgICBJRE9LLCAgICAgICAgICAgICAgICAgICAxODAsICAzLCA0MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAi3XB0YWwiLCAgICAgSURDQU5DRUwsICAgICAgICAgICAgICAgMTgwLCAyMSwgNDAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIiZZYXJk/W0iLCAgICAgICBJREhFTFAsICAgICAgICAgICAgICAgIDE4MCwgMzksIDQwLCAxNSwgV1NfVEFCU1RPUAp9CgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7ClNUUklOR19QQUdFU0VUVVBfSEVBREVSVkFMVUUsICAgIiZmIgpTVFJJTkdfUEFHRVNFVFVQX0ZPT1RFUlZBTFVFLCAgICImcC4gU2F5ZmEiCgpTVFJJTkdfTk9URVBBRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm90IERlZnRlcmkiClNUUklOR19FUlJPUiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIQVRBIgpTVFJJTkdfV0FSTklORywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVVlBUkkiClNUUklOR19JTkZPLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCaWxnaSIKClNUUklOR19VTlRJVExFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBZHP9eiIKClNUUklOR19BTExfRklMRVMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJU/G0gZG9zeWFsYXIgKCouKikiClNUUklOR19URVhUX0ZJTEVTX1RYVCwgICAgICAgICAgICAgICAgICAiTWV0aW4gRG9zeWFsYXL9ICgqLnR4dCkiCgpTVFJJTkdfVE9PTEFSR0UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJyVzJyBkb3N5YXP9IG5vdCBkZWZ0ZXJpIGnnaW4g529rIGL8efxrLlxuIFwKTPx0ZmVuIGRl8Gn+aWsgYmlyIGT8emVubGV5aWNpIGt1bGxhbv1uLiIKU1RSSU5HX05PVEVYVCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhp52JpciBtZXRpbiB5YXptYWT9bv16LiBcClxuTPx0ZmVuIGJpcv5leSB5YXr9biB2ZSB0ZWtyYXIgZGVuZXlpbiIKU1RSSU5HX0RPRVNOT1RFWElTVCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiclcycgZG9zeWFz/VxubWV2Y3V0IGRl8GlsXG5cbiBcClllbmkgYmlyIGRvc3lhIG9sdf50dXJtYWsgaXN0ZXIgbWlzaW5pej8iClNUUklOR19OT1RTQVZFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICInJXMnIGRvc3lhc/1cbmRl8Gn+dGlyaWxkaVxuXG4gXApEZfBp/mlrbGlrbGVyaSBrYXlkZXRtZWsgaXN0ZXIgbWlzaW5pej8iClNUUklOR19OT1RGT1VORCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiclcycgYnVsdW5hbf15b3IuIgpTVFJJTkdfT1VUX09GX01FTU9SWSwgICAgICAgICAgICAgICAgICAgIkJ1IGn+bGVtaSB0YW1hbWxhbWFrIGnnaW4geWV0ZXJsaSBiZWxsZWtcCmFsYW79IHlvay5cbkJpciB2ZXlhIGRhaGEgZmF6bGEgdXlndWxhbWF5/SBrYXBhdGFyYWsgYm/+IGJlbGxlayBtaWt0YXL9bv1cbmFydHT9cm1hef0gXApkZW5leWluLiIKCn0K