LyoKICogIE5vdGVwYWQgKEZyZW5jaCByZXNvdXJjZXMpCiAqCiAqICBDb3B5cmlnaHQgMTk5Nyw5OCBNYXJjZWwgQmF1ciA8bWJhdXJAZzI2LmV0aHouY2g+CiAqICBUcmFuc2xhdGlvbiBieSBMYXVyZW50IEJ1ZmZsZXIgPGxhdXJlbnRAYmx1ZXdpbi5jaD4KICogIENvcHlyaWdodCAyMDAyIFN5bHZhaW4gUGV0cmVvbGxlIDxzcGV0cmVvbGxlQHlhaG9vLmZyPgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICovCgpMQU5HVUFHRSBMQU5HX0ZSRU5DSCwgU1VCTEFOR19ORVVUUkFMCgpNQUlOX01FTlUgTUVOVQp7CiBQT1BVUCAiJkZpY2hpZXIiIHsKICBNRU5VSVRFTSAiJk5vdXZlYXUuLi4iLCAgICAgICBDTURfTkVXCiAgTUVOVUlURU0gIiZPdXZyaXJcdEN0cmwrTyIsICAgQ01EX09QRU4KICBNRU5VSVRFTSAiJkVucmVnaXN0cmVyXHRDdHJsK1MiLCBDTURfU0FWRQogIE1FTlVJVEVNICJFbnJlZ2lzdHJlciAmc291cy4uLiIsIENNRF9TQVZFX0FTCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIkltJnByaW1lciIsICAgICAgICAgQ01EX1BSSU5UCiAgTUVOVUlURU0gIiZNaXNlIGVuIHBhZ2UuLi4iLCAgQ01EX1BBR0VfU0VUVVAKICBNRU5VSVRFTSAiJkNvbmZpZ3VyYXRpb24gZGUgbCdpbXByaW1hbnRlLi4uIiwgQ01EX1BSSU5URVJfU0VUVVAKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJlF1aXR0ZXIiLCAgICAgICAgICBDTURfRVhJVAogfQpQT1BVUCAiJkVkaXRpb24iIHsKICBNRU5VSVRFTSAiJkFubnVsZXJcdEN0cmwrWiIsICBDTURfVU5ETwogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICJDbyZ1cGVyXHRDdHJsK1giLCAgIENNRF9DVVQKICBNRU5VSVRFTSAiJkNvcGllclx0Q3RybCtDIiwgICBDTURfQ09QWQogIE1FTlVJVEVNICJDJm9sbGVyXHRDdHJsK1YiLCAgIENNRF9QQVNURQogIE1FTlVJVEVNICImRWZmYWNlclx0RGVsIiwgICAgIENNRF9ERUxFVEUKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiVG91dCAmc+lsZWN0aW9ubmVyXHRDdHJsK0EiLCBDTURfU0VMRUNUX0FMTAogIE1FTlVJVEVNICImSGV1cmUvRGF0ZVx0RjUiLCAgIENNRF9USU1FX0RBVEUKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJlJldG91ciDgIGxhIGxpZ25lIiwgQ01EX1dSQVAKICBNRU5VSVRFTSAiJlBvbGljZS4uLiIsICAgICAgICBDTURfRk9OVAogfQpQT1BVUCAiJlJlY2hlcmNoZXIiIHsKICBNRU5VSVRFTSAiJlJlY2hlcmNoZXJcdEN0cmwrRiIsIENNRF9TRUFSQ0gKICBNRU5VSVRFTSAiJlN1aXZhbnRcdEYzIiwgICAgICBDTURfU0VBUkNIX05FWFQKIH0KUE9QVVAgIiZBaWRlIiB7CiAgTUVOVUlURU0gIiZTb21tYWlyZSIsICAgICAgICAgQ01EX0hFTFBfQ09OVEVOVFMKICBNRU5VSVRFTSAiJlJlY2hlcmNoZXIuLi4iLCAgICBDTURfSEVMUF9TRUFSQ0gKICBNRU5VSVRFTSAiJlV0aWxpc2VyIGwnYWlkZSIsICBDTURfSEVMUF9PTl9IRUxQCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgUE9QVVAgIkluZiZvLi4uIiB7CiAgIE1FTlVJVEVNICImTGljZW5jZSIsICAgICAgICAgQ01EX0xJQ0VOU0UKICAgTUVOVUlURU0gIiZBVUNVTkUgR0FSQU5USUUiLCBDTURfTk9fV0FSUkFOVFkKICAgTUVOVUlURU0gIiZBIHByb3BvcyBkZSBXaW5lIiwgICAgICAgIENNRF9BQk9VVF9XSU5FCiAgfQogfQp9CgovKiBEaWFsb2cgYFBhZ2Ugc2V0dXAnICovCgpESUFMT0dfUEFHRVNFVFVQIERJQUxPRyAwLCAwLCAyMjUsIDk1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpGT05UIDgsICJIZWx2IgpDQVBUSU9OICJNaXNlIGVuIHBhZ2UiCnsKTFRFWFQgICAgIiZFbi106nRlIDoiLCAgMHgxNDAsICAgMTAsIDA3LCA0MCwgMTUKRURJVFRFWFQgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDEsICAgICAgIDYwLCAwNSwxMTAsIDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICImUGllZCBkZSBwYWdlIDoiLCAgMHgxNDIsICAgMTAsIDI0LCA0MCwgMTUKRURJVFRFWFQgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDMsICAgICAgIDYwLCAyMiwxMTAsIDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QCgpHUk9VUEJPWCAiJk1hcmdlcyA6IiwgICAgICAweDE0NCwgICAgIDEwLCA0MywxNjAsIDQ1CkxURVhUICAgICImR2F1Y2hlIDoiLCAgICAgICAgMHgxNDUsICAgMjAsIDU1LCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIC8qU1RSSU5HX1BBR0VTRVRVUF9MRUZUVkFMVUUsKi8gICAweDE0NywgICAgICAgNTAsIDU1LCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJkhhdXQgOiIsICAgICAgICAgMHgxNDgsICAgIDIwLCA3MywgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCAvKlNUUklOR19QQUdFU0VUVVBfVE9QVkFMVUUsKi8gICAgMHgxNEEsICAgICAgICA1MCwgNzMsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICImRHJvaXRlIDoiLCAgICAgICAweDE0QiwgMTAwLCA1NSwgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCAvKlNUUklOR19QQUdFU0VUVVBfUklHSFRWQUxVRSwqLyAgMHgxNEQsICAgICAxMzAsIDU1LCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJkJhcyA6IiwgICAgICAweDE0RSwxMDAsIDczLCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIC8qU1RSSU5HX1BBR0VTRVRVUF9CT1RUT01WQUxVRSwqLyAweDE1MCwgICAgMTMwLCA3MywgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKCkRFRlBVU0hCVVRUT04gIk9LIiwgICAgICAgICAweDE1MSwgICAgICAgICAgICAgICAgICAgMTgwLCAgMywgNDAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIkFubnVsZXIiLCAgICAgMHgxNTIsICAgICAgICAgICAgICAgMTgwLCAyMSwgNDAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIiZBaWRlIiwgICAgICAgMHgxNTMsICAgICAgICAgICAgICAgIDE4MCwgMzksIDQwLCAxNSwgV1NfVEFCU1RPUAp9CgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7ClNUUklOR19QQUdFU0VUVVBfSEVBREVSVkFMVUUsICAgIiZuIiAgICAgICAgLyogRklYTUUgKi8KU1RSSU5HX1BBR0VTRVRVUF9GT09URVJWQUxVRSwgICAiUGFnZSAmcyIgICAvKiBGSVhNRSAqLwpTVFJJTkdfUEFHRVNFVFVQX0xFRlRWQUxVRSwgICAgICIyMCBtbSIgICAgIC8qIEZJWE1FICovClNUUklOR19QQUdFU0VUVVBfUklHSFRWQUxVRSwgICAgIjIwIG1tIiAgICAgLyogRklYTUUgKi8KU1RSSU5HX1BBR0VTRVRVUF9UT1BWQUxVRSwgICAgICAiMjUgbW0iICAgICAvKiBGSVhNRSAqLwpTVFJJTkdfUEFHRVNFVFVQX0JPVFRPTVZBTFVFLCAgICIyNSBtbSIgICAgIC8qIEZJWE1FICovCgpTVFJJTkdfTk9URVBBRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQmxvYy1ub3RlcyIKU1RSSU5HX0VSUk9SLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVSUkVVUiIKU1RSSU5HX1dBUk5JTkcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFUVEVOVElPTiIKU1RSSU5HX0lORk8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZm9ybWF0aW9uIgoKU1RSSU5HX1VOVElUTEVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihzYW5zLXRpdHJlKSIKClNUUklOR19BTExfRklMRVMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUb3VzIGZpY2hpZXJzICgqLiopIgpTVFJJTkdfVEVYVF9GSUxFU19UWFQsICAgICAgICAgICAgICAgICAgICAgICAgICAiRmljaGllcnMgdGV4dGUgKCoudHh0KSIKClNUUklOR19UT09MQVJHRSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJMZSBmaWNoaWVyICclcycgZXN0IHRyb3AgZ3JhbmQgcG91ciBsZSBibG9jLW5vdGVzLlxuIFwKVmV1aWxsZXogdXRpbGlzZXIgdW4gYXV0cmUg6WRpdGV1ci4iClNUUklOR19OT1RFWFQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJWb3VzIG4nYXZleiBwYXMgZW50cukgZGUgdGV4dGUuIFwKVmV1aWxsZXogdGFwZXIgcXVlbHF1ZSBjaG9zZSBldCByZWNvbW1lbmNlciIKU1RSSU5HX0RPRVNOT1RFWElTVCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkxlIGZpY2hpZXIgJyVzJ1xubidleGlzdGUgcGFzLlxuXG4gXApWb3VsZXotdm91cyBjcullciB1biBub3V2ZWF1IGZpY2hpZXIgPyIKU1RSSU5HX05PVFNBVkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkxlIGZpY2hpZXIgJyVzJ1xuYSDpdOkgbW9kaWZp6VxuXG4gXApWb3VsZXotdm91cyBlbnJlZ2lzdHJlciB2b3MgbW9kaWZpY2F0aW9ucyA/IgpTVFJJTkdfTk9URk9VTkQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJyVzJyBub24gdHJvdXbpLiIKU1RSSU5HX09VVF9PRl9NRU1PUlksICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBhcyBhc3NleiBkZSBt6W1vaXJlIHBvdXIgY29tcGzpdGVyIGNldHRlIFwKdOJjaGUuIFxuRmVybWV6IHVuZSBvdSBwbHVzaWV1cnMgYXBwbGljYXRpb25zIHBvdXIgbGli6XJlclxuXApkZSBsYSBt6W1vaXJlLiIKCn0K