LyoKICogV2luZUZpbGUKICogU3dlZGlzaCBMYW5ndWFnZSBTdXBwb3J0CiAqCiAqIENvcHlyaWdodCAyMDA1IERhdmlkIE5vcmRlbmJlcmcKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19TV0VESVNILCBTVUJMQU5HX0RFRkFVTFQKI3ByYWdtYSBjb2RlX3BhZ2UoMTI1MikKCgovKiBNZW51ICovCgoKSURNX1dJTkVGSUxFIE1FTlUgRklYRUQgSU1QVVJFCnsKICAgIFBPUFVQICImQXJraXYiIHsKICAgICAgICBNRU5VSVRFTSAiJtZwcG5hXHRFbnRlciIsICAgICAgICAgICAgICAgSURfQUNUSVZBVEUKICAgICAgICBNRU5VSVRFTSAiJkZseXR0YS4uLlx0RjciLCAgICAgICAgICAgICAgSURfRklMRV9NT1ZFCiAgICAgICAgTUVOVUlURU0gIiZLb3BpZXJhLi4uXHRGOCIsICAgICAgICAgICAgIElEX0ZJTEVfQ09QWQogICAgICAgIE1FTlVJVEVNICImSSB1cmtsaXBwLi4uXHRGOSIsICAgICAgICAgICAxMTgKICAgICAgICBNRU5VSVRFTSAiJlRhIGJvcnRcdERlbCIsICAgICAgICAgICAgICAgSURfRklMRV9ERUxFVEUKICAgICAgICBNRU5VSVRFTSAiJkJ5dCBuYW1uLi4uIiwgICAgICAgICAgICAgICAgMTA5CiAgICAgICAgTUVOVUlURU0gIiZFZ2Vuc2thcGVyLi4uXHRBbHQrRW50ZXIiLCAgIElEX0VESVRfUFJPUEVSVElFUwogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImS29tcHJpbWVyYS4uLiIsICAgICAgICAgICAgICAxMTkKICAgICAgICBNRU5VSVRFTSAiUGFja2EgJnVwcC4uLiIsICAgICAgICAgICAgICAgMTIwCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZL9nIuLi4iLCAgICAgICAgICAgICAgICAgICAgIElEX0VYRUNVVEUKICAgICAgICBNRU5VSVRFTSAiJlNrcml2IHV0Li4uIiwgICAgICAgICAgICAgICAgMTAyCiAgICAgICAgTUVOVUlURU0gIkFzc29jaWVyYS4uLiIsICAgICAgICAgICAgICAgIDEwMwogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICJTa2FwYSBtYXBwLi4uIiwgICAgICAgICAgICAgICAxMTEKICAgICAgICBNRU5VSVRFTSAiJlP2ay4uLiIsICAgICAgICAgICAgICAgICAgICAgMTA0CiAgICAgICAgTUVOVUlURU0gIiZW5GxqIGZpbGVyLi4uIiwgICAgICAgICAgICAgIDExNgogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgojaWZuZGVmIF9OT19FWFRFTlNJT05TCiAgICAgICAgTUVOVUlURU0gIiZBdnNsdXRhXHRBbHQrWCIsICAgICAgICAgICAgIElEX0ZJTEVfRVhJVAojZWxzZQogICAgICAgIE1FTlVJVEVNICImQXZzbHV0YSIsICAgICAgICAgICAgICAgICAgICBJRF9GSUxFX0VYSVQKI2VuZGlmCiAgICB9CgogICAgUE9QVVAgIiZEaXNrIiB7CiAgICAgICAgTUVOVUlURU0gIiZLb3BpZXJhIGRpc2suLi4iLCAgICAgICAgICAgIDIwMQogICAgICAgIE1FTlVJVEVNICImTmFtbmdlIGRpc2suLi4iLCAgICAgICAgICAgICAyMDIKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJkZvcm1hdGVyYSBkaXNrLi4uIiwgICAgICAgICAgSURfRk9STUFUX0RJU0sKI2lmZGVmIF9XSU45NQogICAgICAgIE1FTlVJVEVNICImU2thcGEgc3lzdGVtZGlzay4uLiIsIC0xIC8qVE9ETyovCiNlbmRpZgogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICJBbnNsdXQgJk7kdHZlcmtzZW5oZXQiLCAgICAgICBJRF9DT05ORUNUX05FVFdPUktfRFJJVkUKICAgICAgICBNRU5VSVRFTSAiJktvcHBsYSBpZnLlbiBO5HR2ZXJrc2VuaGV0IiwgSURfRElTQ09OTkVDVF9ORVRXT1JLX0RSSVZFCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIkRlbGEgdXQuLi4iLCAgICAgICAgICAgICAgICAgIDI1NAogICAgICAgIE1FTlVJVEVNICImVGEgYm9ydCB1dGRlbG5pbmcuLi4iLCAgICAgICAyNTUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJlbkbGogZW5oZXQuLi4iLCAgICAgICAgICAgICAgMjUxCiAgICB9CgogICAgUE9QVVAgIiZUcuRkIiB7CiAgICAgICAgTUVOVUlURU0gIiZO5HN0YSBuaXblXHQrIiwgICAgICAgICAgICAgIDMwMQogICAgICAgIE1FTlVJVEVNICJVdPZrYSAmdHLkZFx0KiIsICAgICAgICAgICAgICAzMDIKICAgICAgICBNRU5VSVRFTSAiVXT2a2EgJmFsbGFcdEN0cmwrKiIsICAgICAgICAgMzAzCiAgICAgICAgTUVOVUlURU0gIktvbGxhcHNhICZ0cuRkXHQtIiwgICAgICAgICAgIDMwNAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImTWFya2VyYSB1bmRlcm1hcHBhciIsICAgICAgICA1MDUKICAgIH0KCiAgICBQT1BVUCAiJlZpc2EiIHsKICAgICAgICBNRU5VSVRFTSAiJlRy5GQgb2NoIG1hcHAiLCAgICAgICAgICAgICAgNDEzCiAgICAgICAgTUVOVUlURU0gIkJhcmEgdHIm5GQiLCAgICAgICAgICAgICAgICAgIDQxMQogICAgICAgIE1FTlVJVEVNICJCYXJhICZtYXBwIiwgICAgICAgICAgICAgICAgICA0MTIKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiRGUmbGEiLCAgICAgICAgICAgICAgICAgICAgICAgSURfVklFV19TUExJVAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImTmFtbiIsICAgICAgICAgICAgICAgICAgICAgICBJRF9WSUVXX05BTUUKICAgICAgICBNRU5VSVRFTSAiJkFsbGEgRmlsZGV0YWxqZXIiLCAgICAgICAgICAgSURfVklFV19BTExfQVRUUklCVVRFUywgQ0hFQ0tFRAogICAgICAgIE1FTlVJVEVNICImVmlzc2EgZGV0YWxqZXIuLi4iLCAgICAgICAgICBJRF9WSUVXX1NFTEVDVEVEX0FUVFJJQlVURVMKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJlNvcnRlcmEgZWZ0ZXIgbmFtbiIsICAgICAgICAgSURfVklFV19TT1JUX05BTUUKICAgICAgICBNRU5VSVRFTSAiU29ydGVyYSBlZnRlciB0JnlwIiwgICAgICAgICAgSURfVklFV19TT1JUX1RZUEUKICAgICAgICBNRU5VSVRFTSAiU29ydGVyYSBlZnRlciBzdCZvcmxlayIsICAgICAgSURfVklFV19TT1JUX1NJWkUKICAgICAgICBNRU5VSVRFTSAiU29ydGVyYSBlZnRlciAmZGF0dW0iLCAgICAgICAgSURfVklFV19TT1JUX0RBVEUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiU29ydGVyYSBlZnRlciAmLi4uIiwgICAgICAgICAgSURfVklFV19GSUxURVIKICAgIH0KCiAgICBQT1BVUCAiJkluc3TkbGxuaW5nYXIiIHsKICAgICAgICBNRU5VSVRFTSAiJkJla3LkZnRlbHNlLi4uIiwgICAgICAgICAgICAgNTAxCiAgICAgICAgTUVOVUlURU0gIiZUZWNrZW5zbml0dC4uLiIsICAgICAgICAgICAgIElEX1NFTEVDVF9GT05UCiAgICAgICAgTUVOVUlURU0gIiZLb25maWd1cmVyYSB2ZXJrdHlnc2bkbHQuLi4iLCA1MTIKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJlZlcmt0eWdzZuRsdCIsICAgICAgICAgICAgICAgSURfVklFV19UT09MX0JBUiwgQ0hFQ0tFRAogICAgICAgIE1FTlVJVEVNICImRW5oZXRzZuRsdCIsICAgICAgICAgICAgICAgICBJRF9WSUVXX0RSSVZFX0JBUiwgQ0hFQ0tFRAogICAgICAgIE1FTlVJVEVNICJTdCZhdHVzZuRsdCIsICAgICAgICAgICAgICAgICBJRF9WSUVXX1NUQVRVU0JBUiwgQ0hFQ0tFRAojaWZuZGVmIF9OT19FWFRFTlNJT05TCiAgICAgICAgTUVOVUlURU0gIkYmdWxsc2vkcm1cdEN0cmwrU2hpZnQrUyIsICAgIElEX1ZJRVdfRlVMTFNDUkVFTgojZW5kaWYKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJk1pbmltZXJhIHZpZCBr9nJuaW5nIiwgICAgICAgNTA0CiAgICAgICAgTUVOVUlURU0gIiZTcGFyYSDkbmRyaW5nYXIgdmlkIHN05G5nbmluZyIsIDUxMQogICAgfQoKICAgIFBPUFVQICImU+RrZXJoZXQiIHsKICAgICAgICBNRU5VSVRFTSAiJsV0a29tc3QuLi4iLCAgICAgICAgICAgICAgICAgNjA1CiAgICAgICAgTUVOVUlURU0gIiZMb2dnbmluZy4uLiIsICAgICAgICAgICAgICAgIDYwNgogICAgICAgIE1FTlVJVEVNICImxGdhcmUuLi4iLCAgICAgICAgICAgICAgICAgICA2MDcKICAgIH0KCiAgICBQT1BVUCAiJkb2bnN0ZXIiIHsKICAgICAgICBNRU5VSVRFTSAiTnl0dCAmZvZuc3RlciIsICAgICAgICAgICAgICAgSURfV0lORE9XX05FVwogICAgICAgIE1FTlVJVEVNICLWdmVybGFwcGFuZGVcdEN0cmwrRjUiLCAgICAgICBJRF9XSU5ET1dfQ0FTQ0FERQogICAgICAgIE1FTlVJVEVNICJPcmRuYSAmaG9yaXpvbnRlbGx0IiwgICAgICAgICBJRF9XSU5ET1dfVElMRV9IT1JaCiAgICAgICAgTUVOVUlURU0gIk9yZG5hICZ2ZXJ0aWthbHRcdEN0cmwrRjQiLCAgIElEX1dJTkRPV19USUxFX1ZFUlQKI2lmbmRlZiBfTk9fRVhURU5TSU9OUwogICAgICAgIE1FTlVJVEVNICJPcmRuYSBhdXRvbWF0aXNrdCIsICAgICAgICAgICBJRF9XSU5ET1dfQVVUT1NPUlQKI2VuZGlmCiAgICAgICAgTUVOVUlURU0gIk9yZG5hICZzeW1ib2xlciIsICAgICAgICAgICAgIElEX1dJTkRPV19BUlJBTkdFCiAgICAgICAgTUVOVUlURU0gIiZVcHBkYXRlcmFcdEY1IiwgICAgICAgICAgICAgIElEX1JFRlJFU0gKICAgIH0KCiAgICBQT1BVUCAiJj8iIHsKICAgICAgICBNRU5VSVRFTSAiJkhq5GxwYXZzbml0dFx0RjEiLCAgICAgICAgICAgSURfSEVMUAogICAgICAgIE1FTlVJVEVNICJIauRscCAmc/ZrLi4uXHRGMSIsICAgICAgICAgICBJRF9IRUxQCiAgICAgICAgTUVOVUlURU0gIiZBbnbkbmRhIGhq5GxwZW5cdEYxIiwgICAgICAgIElEX0hFTFBfVVNJTkcKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiSW5mb3JtYXRpb24gb20gJldpbmVmaWxlLi4uIiwgSURfQUJPVVQKI2lmZGVmIF9fV0lORV9fCiAgICAgICAgTUVOVUlURU0gIkluZm8gYWJvdXQgJldpbmUuLi4iLCAgICAgICAgIElEX0FCT1VUX1dJTkUKI2VuZGlmCiAgICB9Cn0KCgpJRERfRVhFQ1VURSBESUFMT0cgRklYRUQgSU1QVVJFIDE1LCAxMywgMjEwLCA2MwpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJL9nIiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewogICAgQ09OVFJPTCAgICAgICAgICIiLCAxMDEsICJTdGF0aWMiLCBTU19TSU1QTEV8U1NfTk9QUkVGSVgsIDMsIDYsIDE2MiwgMTAKICAgIENPTlRST0wgICAgICAgICAiJktvbW1hbmRvOiIsIC0xLCAiU3RhdGljIiwgU1NfTEVGVE5PV09SRFdSQVB8V1NfR1JPVVAsIDMsIDE4LCA2MCwgMTAKICAgIEVESVRURVhUICAgICAgICAyMDEsIDMsIDI5LCAxMzQsIDEyLCBFU19BVVRPSFNDUk9MTAogICAgQ09OVFJPTCAgICAgICAgICJTb20gJnN5bWJvbCIsIDIxNCwgIkJ1dHRvbiIsIEJTX0FVVE9DSEVDS0JPWHxXU19UQUJTVE9QLDMsIDQ1LCA3MSwgMTIKICAgIERFRlBVU0hCVVRUT04gICAiT0siLCAxLCAxNTgsIDYsIDQ3LCAxNAogICAgUFVTSEJVVFRPTiAgICAgICJBdmJyeXQiLCAyLCAxNTgsIDIzLCA0NywgMTQKICAgIFBVU0hCVVRUT04gICAgICAiJkhq5GxwIiwgMjU0LCAxNTgsIDQzLCA0NywgMTQKfQoKSUREX1NFTEVDVF9ERVNUSU5BVElPTiBESUFMT0cgRklYRUQgSU1QVVJFIDE1LCAxMywgMjEwLCA2MwpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJW5GxqIG3lbCIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CiAgICBDT05UUk9MICAgICAgICAgIiIsIDEwMSwgIlN0YXRpYyIsIFNTX1NJTVBMRXxTU19OT1BSRUZJWCwgMywgNiwgMTYyLCAxMAogICAgQ09OVFJPTCAgICAgICAgICImU/ZrduRnOiIsIC0xLCAiU3RhdGljIiwgU1NfTEVGVE5PV09SRFdSQVB8V1NfR1JPVVAsIDMsIDE4LCA2MCwgMTAKICAgIEVESVRURVhUICAgICAgICAyMDEsIDMsIDI5LCAxMzQsIDEyLCBFU19BVVRPSFNDUk9MTAogICAgREVGUFVTSEJVVFRPTiAgICJPSyIsIDEsIDE1OCwgNiwgNDcsIDE0CiAgICBQVVNIQlVUVE9OICAgICAgIkF2YnJ5dCIsIDIsIDE1OCwgMjMsIDQ3LCAxNAogICAgUFVTSEJVVFRPTiAgICAgICImQmzkZGRyYSIsIDI1NCwgMTU4LCA0MywgNDcsIDE0Cn0KClNUUklOR1RBQkxFCnsKICAgIElEU19GT05UX1NFTF9ETEdfTkFNRSAgICJWZXJrc3TkbGwgdGVja2Vuc25pdHRzaW5zdORsbG5pbmdhciIKICAgIElEU19GT05UX1NFTF9FUlJPUiAgICAgICJFdHQgZmVsIHVwcHN0b2cgbuRyIGV0dCBueXR0IHRlY2tlbnNuaXR0IHZhbGRlcy4iCn0KClNUUklOR1RBQkxFCnsKICAgIElEU19XSU5FRklMRSAgICAgICAgICAgICJXaW5lZmlsZSIKICAgIElEU19FUlJPUiAgICAgICAgICAgICAgICJGZWwiCiAgICBJRFNfUk9PVF9GUyAgICAgICAgICAgICAicm9vdCBmcyIKICAgIElEU19VTklYRlMgICAgICAgICAgICAgICJ1bml4ZnMiCiAgICBJRFNfREVTS1RPUCAgICAgICAgICAgICAiU2tyaXZib3JkIgogICAgSURTX1NIRUxMICAgICAgICAgICAgICAgIlNrYWwiCiAgICBJRFNfVElUTEVGTVQgICAgICAgICAgICAiJXMgLSAlcyIKICAgIElEU19OT19JTVBMICAgICAgICAgICAgICJFaiBpbXBsZW1lbnRlcmF0IORubnUiCiAgICBJRFNfV0lORSAgICAgICAgICAgICAgICAiV0lORSIKICAgIElEU19XSU5FX0ZJTEUgICAgICAgICAgICJXaW5lIEZpbGUiCn0KClNUUklOR1RBQkxFCnsKICAgIElEU19DT0xfTkFNRSAgICAgICAgICAgICJOYW1uIgogICAgSURTX0NPTF9TSVpFICAgICAgICAgICAgIlN0b3JsZWsiCiAgICBJRFNfQ09MX0NEQVRFICAgICAgICAgICAiQ0RhdHVtIgogICAgSURTX0NPTF9BREFURSAgICAgICAgICAgIkFEYXR1bSIKICAgIElEU19DT0xfTURBVEUgICAgICAgICAgICJNRGF0dW0iCiAgICBJRFNfQ09MX0lEWCAgICAgICAgICAgICAiSW5kZXgvSW5vZGUiCiAgICBJRFNfQ09MX0xJTktTICAgICAgICAgICAiTORua2FyIgogICAgSURTX0NPTF9BVFRSICAgICAgICAgICAgIkF0dHJpYnV0IgogICAgSURTX0NPTF9TRUMgICAgICAgICAgICAgIlPka2VyaGV0Igp9Cg==