LyoKICogIE5vdGVwYWQgKFNwYW5pc2ggcmVzb3VyY2VzKQogKgogKiAgQ29weXJpZ2h0IDE5OTcsOTggTWFyY2VsIEJhdXIgPG1iYXVyQGcyNi5ldGh6LmNoPgogKiAgUHJvb2ZyZWFkIDE5OTggYnkgRGF2aWQgTGVlIExhbWJlcnQgPGxhbWJlcjQ1QGVnci5tc3UuZWR1PgogKiAgUHJvb2ZyZWFkIDE5OTkgYnkgSm9zZSBNYXJjb3MgTG9wZXogPGpvc2UubG9wZXpAdXBjbmV0LnVwYy5lcz4KICogIENvcHlyaWdodCAyMDAyIFN5bHZhaW4gUGV0cmVvbGxlIDxzcGV0cmVvbGxlQHlhaG9vLmZyPgogKiAgQ29weXJpZ2h0IDIwMDMsMjAwNCBKb3PpIE1hbnVlbCBGZXJyZXIgT3J0aXoKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19TUEFOSVNILCBTVUJMQU5HX0RFRkFVTFQKCk1BSU5fTUVOVSBNRU5VCnsKIFBPUFVQICImQXJjaGl2byIgewogIE1FTlVJVEVNICImTnVldm8uLi4iLCAgICAgICAgICAgICAgICAgICBDTURfTkVXCiAgTUVOVUlURU0gIiZBYnJpclx0Q3RybCtPIiwgICAgICAgICAgICAgIENNRF9PUEVOCiAgTUVOVUlURU0gIiZHdWFyZGFyXHRDdHJsK1MiLCAgICAgICAgICAgIENNRF9TQVZFCiAgTUVOVUlURU0gIkd1YXJkYXIgJmNvbW8uLi4iLCAgICAgICAgICAgIENNRF9TQVZFX0FTCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZJbXByaW1pciIsICAgICAgICAgICAgICAgICAgIENNRF9QUklOVAogIE1FTlVJVEVNICJDb25maWd1cmFyICZw4WdpbmEuLi4iLCAgICAgICBDTURfUEFHRV9TRVRVUAogIE1FTlVJVEVNICJDb25maWd1cmFjafNuICZpbXByZXNvcmEuLi4iLCBDTURfUFJJTlRFUl9TRVRVUAogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImU2FsaXIiLCAgICAgICAgICAgICAgICAgICAgICBDTURfRVhJVAogfQpQT1BVUCAiJkVkaXRhciIgewogIE1FTlVJVEVNICImRGVzaGFjZXJcdEN0cmwrWiIsICAgICAgICAgQ01EX1VORE8KICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiQ29yJnRhclx0Q3RybCtYIiwgICAgICAgICAgIENNRF9DVVQKICBNRU5VSVRFTSAiJkNvcGlhclx0Q3RybCtDIiwgICAgICAgICAgIENNRF9DT1BZCiAgTUVOVUlURU0gIiZQZWdhclx0Q3RybCtWIiwgICAgICAgICAgICBDTURfUEFTVEUKICBNRU5VSVRFTSAiJkJvcnJhclx0RGVsIiwgICAgICAgICAgICAgIENNRF9ERUxFVEUKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiU2VsZWNjaW9uYXIgdCZvZG9cdEN0cmwrQSIsIENNRF9TRUxFQ1RfQUxMCiAgTUVOVUlURU0gIiZIb3JhIHkgZmVjaGFcdEY1IiwgICAgICAgICBDTURfVElNRV9EQVRFCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZBanVzdGUgZGUgbO1uZWEiLCAgICAgICAgICBDTURfV1JBUAogIE1FTlVJVEVNICJUaXBvIGRlICZsZXRyYS4uLiIsICAgICAgICAgQ01EX0ZPTlQKIH0KUE9QVVAgIiZCdXNjYXIiIHsKICBNRU5VSVRFTSAiJkJ1c2Nhclx0Q3RybCtGIiwgICAgICAgQ01EX1NFQVJDSAogIE1FTlVJVEVNICJCdXNjYXIgJnNpZ3VpZW50ZVx0RjMiLCBDTURfU0VBUkNIX05FWFQKIH0KUE9QVVAgIkEmeXVkYSIgewogIE1FTlVJVEVNICLNJm5kaWNlIiwgICAgICAgICAgICAgICBDTURfSEVMUF9DT05URU5UUwogIE1FTlVJVEVNICImQnVzY2FyLi4uIiwgICAgICAgICAgICBDTURfSEVMUF9TRUFSQ0gKICBNRU5VSVRFTSAiQSZ5dWRhIHNvYnJlIGxhIGF5dWRhIiwgQ01EX0hFTFBfT05fSEVMUAogIE1FTlVJVEVNIFNFUEFSQVRPUgogIFBPUFVQICImSW5mb3JtYWNp824uLi4iIHsKICAgTUVOVUlURU0gIiZMaWNlbmNpYSIsICAgICAgICAgICAgQ01EX0xJQ0VOU0UKICAgTUVOVUlURU0gIlNJTiAmR0FSQU5UzUEiLCAgICAgICAgQ01EX05PX1dBUlJBTlRZCiAgIE1FTlVJVEVNICImQWNlcmNhIGRlIFdpbmUiLCAgICAgIENNRF9BQk9VVF9XSU5FCiAgfQogfQp9CgovKiBEaWFsb2cgYFBhZ2Ugc2V0dXAnICovCgpESUFMT0dfUEFHRVNFVFVQIERJQUxPRyAwLCAwLCAyMjUsIDk1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpGT05UIDgsICJIZWx2IgpDQVBUSU9OICJBanVzdGUgZGUgcOFnaW5hIgp7CkxURVhUICAgICImQ2FiZWNlcmE6IiwgIDB4MTQwLCAgIDEwLCAwNywgNDAsIDE1CkVESVRURVhUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQxLCAgICAgICA2MCwgMDUsMTEwLCAxMiwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJlBpZToiLCAgMHgxNDIsICAgMTAsIDI0LCA0MCwgMTUKRURJVFRFWFQgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDMsICAgICAgIDYwLCAyMiwxMTAsIDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QCgpHUk9VUEJPWCAiJk3hcmdlbmVzOiIsICAgICAgMHgxNDQsICAgICAxMCwgNDMsMTYwLCA0NQpMVEVYVCAgICAiJkl6cXVpZXJkYToiLCAgICAgICAgMHgxNDUsICAgMjAsIDU1LCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIC8qU1RSSU5HX1BBR0VTRVRVUF9MRUZUVkFMVUUsKi8gICAweDE0NywgICAgICAgNTAsIDU1LCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiQSZycmliYToiLCAgICAgICAgIDB4MTQ4LCAgICAyMCwgNzMsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgLypTVFJJTkdfUEFHRVNFVFVQX1RPUFZBTFVFLCovICAgIDB4MTRBLCAgICAgICAgNTAsIDczLCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJkRlcmVjaGE6IiwgICAgICAgMHgxNEIsIDEwMCwgNTUsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgLypTVFJJTkdfUEFHRVNFVFVQX1JJR0hUVkFMVUUsKi8gIDB4MTRELCAgICAgMTMwLCA1NSwgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIkFiYSZqbzoiLCAgICAgIDB4MTRFLDEwMCwgNzMsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgLypTVFJJTkdfUEFHRVNFVFVQX0JPVFRPTVZBTFVFLCovIDB4MTUwLCAgICAxMzAsIDczLCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUAoKREVGUFVTSEJVVFRPTiAiQWNlcHRhciIsICAgICAgMHgxNTEsICAgICAgICAgICAgICAgICAxODAsICAzLCA0MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiQ2FuY2VsYXIiLCAgICAgMHgxNTIsICAgICAgICAgICAgICAgMTgwLCAyMSwgNDAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIiZBeXVkYSIsICAgICAgIDB4MTUzLCAgICAgICAgICAgICAgICAxODAsIDM5LCA0MCwgMTUsIFdTX1RBQlNUT1AKfQoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKewpTVFJJTkdfUEFHRVNFVFVQX0hFQURFUlZBTFVFLCAgICImbiIgICAgICAgICAvKiBGSVhNRSAqLwpTVFJJTkdfUEFHRVNFVFVQX0ZPT1RFUlZBTFVFLCAgICJQ4WdpbmEgJnMiICAvKiBGSVhNRSAqLwpTVFJJTkdfUEFHRVNFVFVQX0xFRlRWQUxVRSwgICAgICIyMCBtbSIgICAgICAvKiBGSVhNRSAqLwpTVFJJTkdfUEFHRVNFVFVQX1JJR0hUVkFMVUUsICAgICIyMCBtbSIgICAgICAvKiBGSVhNRSAqLwpTVFJJTkdfUEFHRVNFVFVQX1RPUFZBTFVFLCAgICAgICIyNSBtbSIgICAgICAvKiBGSVhNRSAqLwpTVFJJTkdfUEFHRVNFVFVQX0JPVFRPTVZBTFVFLCAgICIyNSBtbSIgICAgICAvKiBGSVhNRSAqLwoKU1RSSU5HX05PVEVQQUQsICAgICAgICAgICAgICAgICAiQmxvYyBkZSBub3RhcyIKU1RSSU5HX0VSUk9SLCAgICAgICAgICAgICAgICAgICAiRVJST1IiClNUUklOR19XQVJOSU5HLCAgICAgICAgICAgICAgICAgIkFEVkVSVEVOQ0lBIgpTVFJJTkdfSU5GTywgICAgICAgICAgICAgICAgICAgICJJbmZvcm1hY2nzbiIKClNUUklOR19VTlRJVExFRCwgICAgICAgICAgICAgICAgIihzaW4gdO10dWxvKSIKClNUUklOR19BTExfRklMRVMsICAgICAgICAgICAgICAgIlRvZG9zIGxvcyBhcmNoaXZvcyAoKi4qKSIKU1RSSU5HX1RFWFRfRklMRVNfVFhULCAgICAgICAgICAiRG9jdW1lbnRvcyBkZSB0ZXh0byAoKi50eHQpIgoKU1RSSU5HX1RPT0xBUkdFLCAgICAgICAgICAgICAgICAiRWwgYXJjaGl2byAnJXMnIGVzIGRlbWFzaWFkbyBncmFuZGUgcGFyYSBlbCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2MgZGUgbm90YXMuXG4gVXNlIG90cm8gZWRpdG9yLiIKU1RSSU5HX05PVEVYVCwgICAgICAgICAgICAgICAgICAiTm8gZXNjcmliafMgbmFkYS4gXG5Qb3IgZmF2b3IgZXNjcmliYSBhbGdvIGUgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnTpbnRlbG8gZGUgbnVldm8iClNUUklOR19ET0VTTk9URVhJU1QsICAgICAgICAgICAgIkVsIGFyY2hpdm8gJyVzJ1xubm8gZXhpc3RlXG5cbiC/RGVzZWEgY3JlYXIgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1biBudWV2byBhcmNoaXZvPyIKU1RSSU5HX05PVFNBVkVELCAgICAgICAgICAgICAgICAiRWwgdGV4dG8gZW4gZWwgYXJjaGl2byAnJXMnIGhhIGNhbWJpYWRvXG5cbiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIL9EZXNlYSBndWFyZGFyIGxvcyBjYW1iaW9zPyIKU1RSSU5HX05PVEZPVU5ELCAgICAgICAgICAgICAgICAiTm8gc2UgZW5jb250cvMgJyVzJy4iClNUUklOR19PVVRfT0ZfTUVNT1JZLCAgICAgICAgICAgIk5vIGhheSBzdWZpY2llbnRlIG1lbW9yaWEgcGFyYSB0ZXJtaW5hciBlc3RhIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZWEuIFxuQ2llcnJlIHVuYSBvIG3hcyBhcGxpY2FjaW9uZXMgcGFyYSBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1bWVudGFyIGxhIGNhbnRpZGFkIFxuZGUgbWVtb3JpYSBsaWJyZS4iCgp9Cg==