LyoKICogV2luZUZpbGUKICogU3dlZGlzaCBMYW5ndWFnZSBTdXBwb3J0CiAqCiAqIENvcHlyaWdodCAyMDA1IERhdmlkIE5vcmRlbmJlcmcKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19TV0VESVNILCBTVUJMQU5HX0RFRkFVTFQKCi8qIE1lbnUgKi8KCgpJRE1fV0lORUZJTEUgTUVOVSBGSVhFRCBJTVBVUkUKewogICAgUE9QVVAgIiZBcmtpdiIgewogICAgICAgIE1FTlVJVEVNICIm1nBwbmFcdEVudGVyIiwgICAgICAgICAgICAgICBJRF9BQ1RJVkFURQogICAgICAgIE1FTlVJVEVNICImRmx5dHRhLi4uXHRGNyIsICAgICAgICAgICAgICBJRF9GSUxFX01PVkUKICAgICAgICBNRU5VSVRFTSAiJktvcGllcmEuLi5cdEY4IiwgICAgICAgICAgICAgSURfRklMRV9DT1BZCiAgICAgICAgTUVOVUlURU0gIiZJIHVya2xpcHAuLi5cdEY5IiwgICAgICAgICAgIDExOAogICAgICAgIE1FTlVJVEVNICImVGEgYm9ydFx0RGVsIiwgICAgICAgICAgICAgICBJRF9GSUxFX0RFTEVURQogICAgICAgIE1FTlVJVEVNICImQnl0IG5hbW4uLi4iLCAgICAgICAgICAgICAgICAxMDkKICAgICAgICBNRU5VSVRFTSAiJkVnZW5za2FwZXIuLi5cdEFsdCtFbnRlciIsICAgSURfRURJVF9QUk9QRVJUSUVTCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZLb21wcmltZXJhLi4uIiwgICAgICAgICAgICAgIDExOQogICAgICAgIE1FTlVJVEVNICJQYWNrYSAmdXBwLi4uIiwgICAgICAgICAgICAgICAxMjAKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJkv2ci4uLiIsICAgICAgICAgICAgICAgICAgICAgSURfRVhFQ1VURQogICAgICAgIE1FTlVJVEVNICImU2tyaXYgdXQuLi4iLCAgICAgICAgICAgICAgICAxMDIKICAgICAgICBNRU5VSVRFTSAiQXNzb2NpZXJhLi4uIiwgICAgICAgICAgICAgICAgMTAzCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIlNrYXBhIG1hcHAuLi4iLCAgICAgICAgICAgICAgIDExMQogICAgICAgIE1FTlVJVEVNICImU/ZrLi4uIiwgICAgICAgICAgICAgICAgICAgICAxMDQKICAgICAgICBNRU5VSVRFTSAiJlbkbGogZmlsZXIuLi4iLCAgICAgICAgICAgICAgMTE2CiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiNpZm5kZWYgX05PX0VYVEVOU0lPTlMKICAgICAgICBNRU5VSVRFTSAiJkF2c2x1dGFcdEFsdCtYIiwgICAgICAgICAgICAgSURfRklMRV9FWElUCiNlbHNlCiAgICAgICAgTUVOVUlURU0gIiZBdnNsdXRhIiwgICAgICAgICAgICAgICAgICAgIElEX0ZJTEVfRVhJVAojZW5kaWYKICAgIH0KCiAgICBQT1BVUCAiJkRpc2siIHsKICAgICAgICBNRU5VSVRFTSAiJktvcGllcmEgZGlzay4uLiIsICAgICAgICAgICAgMjAxCiAgICAgICAgTUVOVUlURU0gIiZOYW1uZ2UgZGlzay4uLiIsICAgICAgICAgICAgIDIwMgogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImRm9ybWF0ZXJhIGRpc2suLi4iLCAgICAgICAgICBJRF9GT1JNQVRfRElTSwojaWZkZWYgX1dJTjk1CiAgICAgICAgTUVOVUlURU0gIiZTa2FwYSBzeXN0ZW1kaXNrLi4uIiwgLTEgLypUT0RPKi8KI2VuZGlmCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIkFuc2x1dCAmTuR0dmVya3NlbmhldCIsICAgICAgIElEX0NPTk5FQ1RfTkVUV09SS19EUklWRQogICAgICAgIE1FTlVJVEVNICImS29wcGxhIGlmcuVuIE7kdHZlcmtzZW5oZXQiLCBJRF9ESVNDT05ORUNUX05FVFdPUktfRFJJVkUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiRGVsYSB1dC4uLiIsICAgICAgICAgICAgICAgICAgMjU0CiAgICAgICAgTUVOVUlURU0gIiZUYSBib3J0IHV0ZGVsbmluZy4uLiIsICAgICAgIDI1NQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImVuRsaiBlbmhldC4uLiIsICAgICAgICAgICAgICAyNTEKICAgIH0KCiAgICBQT1BVUCAiJlRy5GQiIHsKICAgICAgICBNRU5VSVRFTSAiJk7kc3RhIG5pduVcdCsiLCAgICAgICAgICAgICAgMzAxCiAgICAgICAgTUVOVUlURU0gIlV09mthICZ0cuRkXHQqIiwgICAgICAgICAgICAgIDMwMgogICAgICAgIE1FTlVJVEVNICJVdPZrYSAmYWxsYVx0Q3RybCsqIiwgICAgICAgICAzMDMKICAgICAgICBNRU5VSVRFTSAiS29sbGFwc2EgJnRy5GRcdC0iLCAgICAgICAgICAgMzA0CiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZNYXJrZXJhIHVuZGVybWFwcGFyIiwgICAgICAgIDUwNQogICAgfQoKICAgIFBPUFVQICImVmlzYSIgewogICAgICAgIE1FTlVJVEVNICImVHLkZCBvY2ggbWFwcCIsICAgICAgICAgICAgICA0MTMKICAgICAgICBNRU5VSVRFTSAiQmFyYSB0cibkZCIsICAgICAgICAgICAgICAgICAgNDExCiAgICAgICAgTUVOVUlURU0gIkJhcmEgJm1hcHAiLCAgICAgICAgICAgICAgICAgIDQxMgogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICJEZSZsYSIsICAgICAgICAgICAgICAgICAgICAgICBJRF9WSUVXX1NQTElUCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZOYW1uIiwgICAgICAgICAgICAgICAgICAgICAgIElEX1ZJRVdfTkFNRQogICAgICAgIE1FTlVJVEVNICImQWxsYSBGaWxkZXRhbGplciIsICAgICAgICAgICBJRF9WSUVXX0FMTF9BVFRSSUJVVEVTLCBDSEVDS0VECiAgICAgICAgTUVOVUlURU0gIiZWaXNzYSBkZXRhbGplci4uLiIsICAgICAgICAgIElEX1ZJRVdfU0VMRUNURURfQVRUUklCVVRFUwogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImU29ydGVyYSBlZnRlciBuYW1uIiwgICAgICAgICBJRF9WSUVXX1NPUlRfTkFNRQogICAgICAgIE1FTlVJVEVNICJTb3J0ZXJhIGVmdGVyIHQmeXAiLCAgICAgICAgICBJRF9WSUVXX1NPUlRfVFlQRQogICAgICAgIE1FTlVJVEVNICJTb3J0ZXJhIGVmdGVyIHN0Jm9ybGVrIiwgICAgICBJRF9WSUVXX1NPUlRfU0laRQogICAgICAgIE1FTlVJVEVNICJTb3J0ZXJhIGVmdGVyICZkYXR1bSIsICAgICAgICBJRF9WSUVXX1NPUlRfREFURQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICJTb3J0ZXJhIGVmdGVyICYuLi4iLCAgICAgICAgICBJRF9WSUVXX0ZJTFRFUgogICAgfQoKICAgIFBPUFVQICImSW5zdORsbG5pbmdhciIgewogICAgICAgIE1FTlVJVEVNICImQmVrcuRmdGVsc2UuLi4iLCAgICAgICAgICAgICA1MDEKICAgICAgICBNRU5VSVRFTSAiJlRlY2tlbnNuaXR0Li4uIiwgICAgICAgICAgICAgSURfU0VMRUNUX0ZPTlQKICAgICAgICBNRU5VSVRFTSAiJktvbmZpZ3VyZXJhIHZlcmt0eWdzZuRsdC4uLiIsIDUxMgogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImVmVya3R5Z3Nm5Gx0IiwgICAgICAgICAgICAgICBJRF9WSUVXX1RPT0xfQkFSLCBDSEVDS0VECiAgICAgICAgTUVOVUlURU0gIiZFbmhldHNm5Gx0IiwgICAgICAgICAgICAgICAgIElEX1ZJRVdfRFJJVkVfQkFSLCBDSEVDS0VECiAgICAgICAgTUVOVUlURU0gIlN0JmF0dXNm5Gx0IiwgICAgICAgICAgICAgICAgIElEX1ZJRVdfU1RBVFVTQkFSLCBDSEVDS0VECiNpZm5kZWYgX05PX0VYVEVOU0lPTlMKICAgICAgICBNRU5VSVRFTSAiRiZ1bGxza+RybVx0Q3RybCtTaGlmdCtTIiwgICAgSURfVklFV19GVUxMU0NSRUVOCiNlbmRpZgogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImTWluaW1lcmEgdmlkIGv2cm5pbmciLCAgICAgICA1MDQKICAgICAgICBNRU5VSVRFTSAiJlNwYXJhIORuZHJpbmdhciB2aWQgc3TkbmduaW5nIiwgNTExCiAgICB9CgogICAgUE9QVVAgIiZT5GtlcmhldCIgewogICAgICAgIE1FTlVJVEVNICImxXRrb21zdC4uLiIsICAgICAgICAgICAgICAgICA2MDUKICAgICAgICBNRU5VSVRFTSAiJkxvZ2duaW5nLi4uIiwgICAgICAgICAgICAgICAgNjA2CiAgICAgICAgTUVOVUlURU0gIibEZ2FyZS4uLiIsICAgICAgICAgICAgICAgICAgIDYwNwogICAgfQoKICAgIFBPUFVQICImRvZuc3RlciIgewogICAgICAgIE1FTlVJVEVNICJOeXR0ICZm9m5zdGVyIiwgICAgICAgICAgICAgICBJRF9XSU5ET1dfTkVXCiAgICAgICAgTUVOVUlURU0gItZ2ZXJsYXBwYW5kZVx0Q3RybCtGNSIsICAgICAgIElEX1dJTkRPV19DQVNDQURFCiAgICAgICAgTUVOVUlURU0gIk9yZG5hICZob3Jpem9udGVsbHQiLCAgICAgICAgIElEX1dJTkRPV19USUxFX0hPUloKICAgICAgICBNRU5VSVRFTSAiT3JkbmEgJnZlcnRpa2FsdFx0Q3RybCtGNCIsICAgSURfV0lORE9XX1RJTEVfVkVSVAojaWZuZGVmIF9OT19FWFRFTlNJT05TCiAgICAgICAgTUVOVUlURU0gIk9yZG5hIGF1dG9tYXRpc2t0IiwgICAgICAgICAgIElEX1dJTkRPV19BVVRPU09SVAojZW5kaWYKICAgICAgICBNRU5VSVRFTSAiT3JkbmEgJnN5bWJvbGVyIiwgICAgICAgICAgICAgSURfV0lORE9XX0FSUkFOR0UKICAgICAgICBNRU5VSVRFTSAiJlVwcGRhdGVyYVx0RjUiLCAgICAgICAgICAgICAgSURfUkVGUkVTSAogICAgfQoKICAgIFBPUFVQICImPyIgewogICAgICAgIE1FTlVJVEVNICImSGrkbHBhdnNuaXR0XHRGMSIsICAgICAgICAgICBJRF9IRUxQCiAgICAgICAgTUVOVUlURU0gIkhq5GxwICZz9msuLi5cdEYxIiwgICAgICAgICAgIElEX0hFTFAKICAgICAgICBNRU5VSVRFTSAiJkFuduRuZGEgaGrkbHBlblx0RjEiLCAgICAgICAgSURfSEVMUF9VU0lORwogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICJJbmZvcm1hdGlvbiBvbSAmV2luZWZpbGUuLi4iLCBJRF9BQk9VVAogICAgfQp9CgoKSUREX0VYRUNVVEUgRElBTE9HIEZJWEVEIElNUFVSRSAxNSwgMTMsIDIxMCwgNjMKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiS/ZyIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKICAgIENPTlRST0wgICAgICAgICAiIiwgMTAxLCAiU3RhdGljIiwgU1NfU0lNUExFfFNTX05PUFJFRklYLCAzLCA2LCAxNjIsIDEwCiAgICBDT05UUk9MICAgICAgICAgIiZLb21tYW5kbzoiLCAtMSwgIlN0YXRpYyIsIFNTX0xFRlROT1dPUkRXUkFQfFdTX0dST1VQLCAzLCAxOCwgNjAsIDEwCiAgICBFRElUVEVYVCAgICAgICAgMjAxLCAzLCAyOSwgMTM0LCAxMiwgRVNfQVVUT0hTQ1JPTEwKICAgIENPTlRST0wgICAgICAgICAiU29tICZzeW1ib2wiLCAyMTQsICJCdXR0b24iLCBCU19BVVRPQ0hFQ0tCT1h8V1NfVEFCU1RPUCwzLCA0NSwgNzEsIDEyCiAgICBERUZQVVNIQlVUVE9OICAgIk9LIiwgMSwgMTU4LCA2LCA0NywgMTQKICAgIFBVU0hCVVRUT04gICAgICAiQXZicnl0IiwgMiwgMTU4LCAyMywgNDcsIDE0CiAgICBQVVNIQlVUVE9OICAgICAgIiZIauRscCIsIDI1NCwgMTU4LCA0MywgNDcsIDE0Cn0KCklERF9TRUxFQ1RfREVTVElOQVRJT04gRElBTE9HIEZJWEVEIElNUFVSRSAxNSwgMTMsIDIxMCwgNjMKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiVuRsaiBt5WwiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewogICAgQ09OVFJPTCAgICAgICAgICIiLCAxMDEsICJTdGF0aWMiLCBTU19TSU1QTEV8U1NfTk9QUkVGSVgsIDMsIDYsIDE2MiwgMTAKICAgIENPTlRST0wgICAgICAgICAiJlP2a3bkZzoiLCAtMSwgIlN0YXRpYyIsIFNTX0xFRlROT1dPUkRXUkFQfFdTX0dST1VQLCAzLCAxOCwgNjAsIDEwCiAgICBFRElUVEVYVCAgICAgICAgMjAxLCAzLCAyOSwgMTM0LCAxMiwgRVNfQVVUT0hTQ1JPTEwKICAgIERFRlBVU0hCVVRUT04gICAiT0siLCAxLCAxNTgsIDYsIDQ3LCAxNAogICAgUFVTSEJVVFRPTiAgICAgICJBdmJyeXQiLCAyLCAxNTgsIDIzLCA0NywgMTQKICAgIFBVU0hCVVRUT04gICAgICAiJkJs5GRkcmEiLCAyNTQsIDE1OCwgNDMsIDQ3LCAxNAp9CgpTVFJJTkdUQUJMRQp7CiAgICBJRFNfRk9OVF9TRUxfRExHX05BTUUgICAiVmVya3N05GxsIHRlY2tlbnNuaXR0c2luc3TkbGxuaW5nYXIiCiAgICBJRFNfRk9OVF9TRUxfRVJST1IgICAgICAiRXR0IGZlbCB1cHBzdG9nIG7kciBldHQgbnl0dCB0ZWNrZW5zbml0dCB2YWxkZXMuIgp9CgpTVFJJTkdUQUJMRQp7CiAgICBJRFNfV0lORUZJTEUgICAgICAgICAgICAiV2luZWZpbGUiCiAgICBJRFNfRVJST1IgICAgICAgICAgICAgICAiRmVsIgogICAgSURTX1JPT1RfRlMgICAgICAgICAgICAgInJvb3QgZnMiCiAgICBJRFNfVU5JWEZTICAgICAgICAgICAgICAidW5peGZzIgogICAgSURTX0RFU0tUT1AgICAgICAgICAgICAgIlNrcml2Ym9yZCIKICAgIElEU19TSEVMTCAgICAgICAgICAgICAgICJTa2FsIgogICAgSURTX1RJVExFRk1UICAgICAgICAgICAgIiVzIC0gJXMiCiAgICBJRFNfTk9fSU1QTCAgICAgICAgICAgICAiRWogaW1wbGVtZW50ZXJhdCDkbm51IgogICAgSURTX1dJTkVfRklMRSAgICAgICAgICAgIldpbmUgRmlsZSIKfQoKU1RSSU5HVEFCTEUKewogICAgSURTX0NPTF9OQU1FICAgICAgICAgICAgIk5hbW4iCiAgICBJRFNfQ09MX1NJWkUgICAgICAgICAgICAiU3RvcmxlayIKICAgIElEU19DT0xfQ0RBVEUgICAgICAgICAgICJDRGF0dW0iCiAgICBJRFNfQ09MX0FEQVRFICAgICAgICAgICAiQURhdHVtIgogICAgSURTX0NPTF9NREFURSAgICAgICAgICAgIk1EYXR1bSIKICAgIElEU19DT0xfSURYICAgICAgICAgICAgICJJbmRleC9Jbm9kZSIKICAgIElEU19DT0xfTElOS1MgICAgICAgICAgICJM5G5rYXIiCiAgICBJRFNfQ09MX0FUVFIgICAgICAgICAgICAiQXR0cmlidXQiCiAgICBJRFNfQ09MX1NFQyAgICAgICAgICAgICAiU+RrZXJoZXQiCn0K