LyoKICogSGVscCBWaWV3ZXIKICoKICogQ29weXJpZ2h0IDE5OTYgVWxyaWNoIFNjaG1pZAogKiBDb3B5cmlnaHQgMjAwMiBTeWx2YWluIFBldHJlb2xsZSA8c3BldHJlb2xsZUB5YWhvby5mcj4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqLwoKLyogTWVudSAqLwoKTUFJTl9NRU5VIE1FTlUgTEFOR1VBR0UgTEFOR19IVU5HQVJJQU4sIFNVQkxBTkdfTkVVVFJBTAp7CiBQT1BVUCAiJkZpbGUiIHsKICBNRU5VSVRFTSAiJk1lZ255aXThcy4uLiIsIE1OSURfRklMRV9PUEVOCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZOeW9tdGF04XMiLCBNTklEX0ZJTEVfUFJJTlQKICBNRU5VSVRFTSAiTnlvbXRhdPMgJmJl4Wxs7XThcy4uLiIsIE1OSURfRklMRV9TRVRVUAogICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJktpbOlw6XMiLCBNTklEX0ZJTEVfRVhJVAogfQogUE9QVVAgIiZTemVya2VzenTpcyIgewogICBNRU5VSVRFTSAiJk3hc29s4XMuLi4iLCBNTklEX0VESVRfQ09QWURMRwogICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgTUVOVUlURU0gIiZBbm5vdGF0ZS4uLiIsIE1OSURfRURJVF9BTk5PVEFURQogfQogUE9QVVAgIiZL9m55dmplbHr1IiB7CiAgIE1FTlVJVEVNICImRGVmaW5p4Wzhcy4uLiIsIE1OSURfQktNS19ERUZJTkUKIH0KIFBPUFVQICImU2Vn7XRz6WciIHsKICAgTUVOVUlURU0gIlNlZ+10c+lnICZhIHNlZ+10c+lncvVsIiwgTU5JRF9IRUxQX0hFTFBPTgogICBNRU5VSVRFTSAiTWluZGlnICZsZWdmZWz8bCIsIE1OSURfSEVMUF9IRUxQVE9QCiAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICBNRU5VSVRFTSAiJkluZm9ybeFjafMuLi4iLCBNTklEX0hFTFBfQUJPVVQKI2lmZGVmIFdJTkVMSUIKICAgTUVOVUlURU0gIiYmQSBXSU5FLXLzbCIsIE1OSURfSEVMUF9XSU5FCiNlbmRpZgogfQp9CgovKiBTdHJpbmdzICovCgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRSBMQU5HVUFHRSBMQU5HX0hVTkdBUklBTiwgU1VCTEFOR19ORVVUUkFMCnsKU1RJRF9XSU5FX0hFTFAsIAkiV0lORSBzZWftdHPpZyIKU1RJRF9XSEVSUk9SLCAJCSJISUJBIgpTVElEX1dBUk5JTkcsICAJCSJGSUdZRUxNRVpURVTJUyIKU1RJRF9JTkZPLCAgCQkiSW5mb3Jt4WNp8yIKU1RJRF9OT1RfSU1QTEVNRU5URUQsIAkiTmluY3MgaW1wbGVtZW504Wx2YSIKU1RJRF9ITFBGSUxFX0VSUk9SX3MsIAkiSGliYSBhIGAlcycgZmlsZSBvbHZhc+FzYWtvciIKU1RJRF9DT05URU5UUywgCQkiJlRhcnRhbG9tIgpTVElEX1NFQVJDSCwgCQkiJktlcmVz6XMiClNUSURfQkFDSywgCQkiJlZpc3N6YSIKU1RJRF9ISVNUT1JZLCAJCSImSGlzdG9yeSIKU1RJRF9UT1BJQ1MsCQkiVCZvcGljcyIKU1RJRF9BTExfRklMRVMsIAkiTWluZGVuIGZpbGUgKCouKikiClNUSURfSEVMUF9GSUxFU19ITFAsIAkiU2Vn7XRz6WcgZmlsZS1vayAoKi5obHApIgp9Cg==