LyoKICogV2luZU1pbmUKICogRnJlbmNoIExhbmd1YWdlIFN1cHBvcnQKICoKICogQ29weXJpZ2h0IDIwMDAgSm9zaHVhIFRoaWVsZW4KICogQ29weXJpZ2h0IDIwMDMgTWFyY2VsbyBEdWFydGUKICogQ29weXJpZ2h0IDIwMDMgVmluY2VudCBC6XJvbgogKiBDb3B5cmlnaHQgMjAwNiBKb25hdGhhbqBFcm5zdAogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgpMQU5HVUFHRSBMQU5HX0ZSRU5DSCwgU1VCTEFOR19ORVVUUkFMCgpTVFJJTkdUQUJMRSB7CiAgICAgSURTX0FQUE5BTUUsICJE6W1pbmV1ciBXaW5lIgogICAgIElEU19OT0JPRFksICAiQW5vbnltZSIKICAgICBJRFNfQUJPVVQsICAgIkNvcHlyaWdodCAyMDAwIEpvc2h1YSBUaGllbGVuIgp9CgpNRU5VX1dJTkVNSU5FIE1FTlUgRElTQ0FSREFCTEUKewogICAgUE9QVVAgIiZPcHRpb25zIiB7CiAgICAgICAgTUVOVUlURU0gIiZOb3V2ZWF1XHRGMiIsICAgICAgICAgICBJRE1fTkVXCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIlBvaW50cyBkJ2ludGVycm8mZ2F0aW9uIiwgSURNX01BUktRCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZE6WJ1dGFudCIsICAgICAgSURNX0JFR0lOTkVSCiAgICAgICAgTUVOVUlURU0gIiZBdmFuY+kiLCAgICAgIElETV9BRFZBTkNFRAogICAgICAgIE1FTlVJVEVNICImRXhwZXJ0IiwgICAgICAgIElETV9FWFBFUlQKICAgICAgICBNRU5VSVRFTSAiJlBlcnNvbm5hbGlz6S4uLiIsICAgICAgICBJRE1fQ1VTVE9NCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZRdWl0dGVyXHRBbHQrWCIsICAgICAgICAgIElETV9FWElUCiAgICB9CiAgICBQT1BVUCAiJkluZm8iIHsKICAgICAgICBNRU5VSVRFTSAiJlRlbXBzIGxlcyBwbHVzIHJhcGlkZXMiLCAgICBJRE1fVElNRVMKICAgICAgICBNRU5VSVRFTSAiwCAmcHJvcG9zIiwgICAgICAgICBJRE1fQUJPVVQKICAgIH0KfQoKRExHX1RJTUVTIERJQUxPRyBESVNDQVJEQUJMRSAwLCAwLCAxNjAsIDgwClNUWUxFICBEU19NT0RBTEZSQU1FIHwgRFNfM0RMT09LIHwKICAgIFdTX1ZJU0lCTEUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVSB8IFdTX1BPUFVQCkNBUFRJT04gIlRlbXBzIGxlcyBwbHVzIHJhcGlkZXMiCnsKICAgIEdST1VQQk9YICAgICAgICAiVGVtcHMgbGVzIHBsdXMgcmFwaWRlcyIsIElESUdOT1JFLCAgMTAsICAxMCwgMTQwLCAgNDUKICAgIExURVhUICAgICAgICAgICAiROlidXRhbnQiLCAgICAgIElESUdOT1JFLCAgMjAsICAyMCwgIDQwLCAgIDgKICAgIExURVhUICAgICAgICAgICAiQXZhbmPpIiwgICAgICAgIElESUdOT1JFLCAgMjAsICAzMCwgIDQwLCAgIDgKICAgIExURVhUICAgICAgICAgICAiRXhwZXJ0IiwgICAgICAgIElESUdOT1JFLCAgMjAsICA0MCwgIDQwLCAgIDgKICAgIExURVhUICAgICAgICAgICAiOTk5IiwgICAgICAgICAgSURDX1RJTUUxLCAgNzAsICAyMCwgIDE1LCAgIDgKICAgIExURVhUICAgICAgICAgICAiOTk5IiwgICAgICAgICAgSURDX1RJTUUyLCAgNzAsICAzMCwgIDE1LCAgIDgKICAgIExURVhUICAgICAgICAgICAiOTk5IiwgICAgICAgICAgSURDX1RJTUUzLCAgNzAsICA0MCwgIDE1LCAgIDgKICAgIExURVhUICAgICAgICAgICAiIiwgICAgICAgICAgICAgSURDX05BTUUxLCAgOTAsICAyMCwgIDU1LCAgIDgKICAgIExURVhUICAgICAgICAgICAiIiwgICAgICAgICAgICAgSURDX05BTUUyLCAgOTAsICAzMCwgIDU1LCAgIDgKICAgIExURVhUICAgICAgICAgICAiIiwgICAgICAgICAgICAgSURDX05BTUUzLCAgOTAsICA0MCwgIDU1LCAgIDgKICAgIERFRlBVU0hCVVRUT04gICAiT0siLCAgICAgICAgICAgICAgICBJRE9LLCAgNTUsICA2MCwgIDUwLCAgMTUKfQoKRExHX0NPTkdSQVRTIERJQUxPRyBESVNDQVJEQUJMRSAgMCwgMCwgMTYwLCA2MApTVFlMRSAgRFNfTU9EQUxGUkFNRSB8IERTXzNETE9PSyB8CiAgICBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUgfCBXU19QT1BVUApDQVBUSU9OICJG6WxpY2l0YXRpb25zoCEiCnsKICAgIExURVhUICAgICAgICAgICAiVmV1aWxsZXogc2Fpc2lyIHZvdHJlIG5vbSIsIElESUdOT1JFLCAgMTAsICAxMCwgMTUwLCAgMTAKICAgIEVESVRURVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSURDX0VESVROQU1FLCAgMjUsICAyMCwgMTEwLCAgMTIKICAgIERFRlBVU0hCVVRUT04gICAiT0siLCAgICAgICAgICAgICAgICAgICAgICAgICBJRE9LLCAgNjAsICA0MCwgIDQwLCAgMTUKfQoKRExHX0NVU1RPTSBESUFMT0cgRElTQ0FSREFCTEUgIDAsIDAsIDEwMCwgMTAwClNUWUxFICBEU19NT0RBTEZSQU1FIHwgRFNfM0RMT09LIHwKICAgIFdTX1ZJU0lCTEUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVSB8IFdTX1BPUFVQCkNBUFRJT04gIkdyaWxsZSBwZXJzb25uYWxpc+llIgp7CiAgICBMVEVYVCAgICAgICAgICAgIlJhbmfpZXMiLCAgSURJR05PUkUsICAgNSwgICA1LCAgMzAsICAxMAogICAgTFRFWFQgICAgICAgICAgICJDb2xvbm5lcyIsIElESUdOT1JFLCAgIDUsICAzNSwgIDMwLCAgMTAKICAgIExURVhUICAgICAgICAgICAiTWluZXMiLCAgICBJRElHTk9SRSwgICA1LCAgNjUsICAzMCwgIDEwCiAgICBFRElUVEVYVCAgICAgICAgICAgICAgIElEQ19FRElUUk9XUywgICA1LCAgMTUsICAyMCwgIDEyLCBFU19OVU1CRVIKICAgIEVESVRURVhUICAgICAgICAgICAgICAgSURDX0VESVRDT0xTLCAgIDUsICA0NSwgIDIwLCAgMTIsIEVTX05VTUJFUgogICAgRURJVFRFWFQgICAgICAgICAgICAgIElEQ19FRElUTUlORVMsICAgNSwgIDc1LCAgMjAsICAxMiwgRVNfTlVNQkVSCiAgICBERUZQVVNIQlVUVE9OICAgIk9LIiwgICAgICAgICAgSURPSywgICAgICA0MCwgIDMwLCAgNTAsICAxNQogICAgUFVTSEJVVFRPTiAgICAgICJBbm51bGVyIiwgSURDQU5DRUwsICA0MCwgIDUwLCAgNTAsICAxNQp9Cg==