LyoKICogV2luZUZpbGUKICogU3BhbmlzaCBMYW5ndWFnZSBTdXBwb3J0CiAqCiAqIENvcHlyaWdodCAyMDA0IEpvc+kgTWFudWVsIEZlcnJlciBPcnRpegogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICovCgpMQU5HVUFHRSBMQU5HX1NQQU5JU0gsIFNVQkxBTkdfTkVVVFJBTAoKLyogTWVudSAqLwoKSURNX1dJTkVGSUxFIE1FTlUgRklYRUQgSU1QVVJFCnsKICAgIFBPUFVQICImQXJjaGl2byIgIHsKICAgICAgICBNRU5VSVRFTSAiJkFicmlyXHRFbnRlciIsICAgICAgICAgICAgICAgSURfQUNUSVZBVEUKICAgICAgICBNRU5VSVRFTSAiTW8mdmVyLi4uXHRGNyIsICAgICAgICAgICAgICAgSURfRklMRV9NT1ZFCiAgICAgICAgTUVOVUlURU0gIiZDb3BpYXIuLi5cdEY4IiwgICAgICAgICAgICAgIElEX0ZJTEVfQ09QWQogICAgICAgIE1FTlVJVEVNICJFJm4gcG9ydGFwYXBlbGVzLi4uXHRGOSIsICAgICAxMTgKICAgICAgICBNRU5VSVRFTSAiJkVsaW1pbmFyXHREZWwiLCAgICAgICAgICAgICAgSURfRklMRV9ERUxFVEUKICAgICAgICBNRU5VSVRFTSAiJlJlbm9tYnJhci4uLiIsICAgICAgICAgICAgICAgMTA5CiAgICAgICAgTUVOVUlURU0gIiZQcm9waWVkYWRlcy4uLlx0QWx0K0VudGVyIiwgIElEX0VESVRfUFJPUEVSVElFUwogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICJDJm9tcHJpbWlyLi4uIiwgICAgICAgICAgICAgICAxMTkKICAgICAgICBNRU5VSVRFTSAiJkRlc2NvbXByaW1pci4uLiIsICAgICAgICAgICAgMTIwCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIkUmamVjdXRhci4uLiIsICAgICAgICAgICAgICAgIElEX0VYRUNVVEUKICAgICAgICBNRU5VSVRFTSAiSSZtcHJpbWlyLi4uIiwgICAgICAgICAgICAgICAgMTAyCiAgICAgICAgTUVOVUlURU0gIkFzb2MmaWFyLi4uIiwgICAgICAgICAgICAgICAgIDEwMwogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICJDcmVhciBkaXJlYyZ0b3Jpby4uLiIsICAgICAgICAxMTEKICAgICAgICBNRU5VSVRFTSAiJkJ1c2Nhci4uLiIsICAgICAgICAgICAgICAgICAgMTA0CiAgICAgICAgTUVOVUlURU0gIlNlJmxlY2Npb25hciBhcmNoaXZvcy4uLiIsICAgIDExNgogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgojaWZuZGVmIF9OT19FWFRFTlNJT05TCiAgICAgICAgTUVOVUlURU0gIiZTYWxpclx0QWx0K1giLCAgICAgICAgICAgICAgIElEX0ZJTEVfRVhJVAojZWxzZQogICAgICAgIE1FTlVJVEVNICImU2FsaXIiLCAgICAgICAgICAgICAgICAgICAgICBJRF9GSUxFX0VYSVQKI2VuZGlmCiAgICB9CgogICAgUE9QVVAgIiZEaXNjbyIgIHsKICAgICAgICBNRU5VSVRFTSAiJkNvcGlhciBkaXNjby4uLiIsICAgICAgICAgICAgMjAxCiAgICAgICAgTUVOVUlURU0gIkUmdGlxdWV0YXIgZGlzY28uLi4iLCAgICAgICAgIDIwMgogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImRm9ybWF0ZWFyIGRpc2NvLi4uIiwgICAgICAgICBJRF9GT1JNQVRfRElTSwojaWZkZWYgX1dJTjk1CiAgICAgICAgTUVOVUlURU0gIiZIYWNlciBkaXNjbyBkZSBzaXN0ZW1hLi4uIiwgLTEgICAvKlRPRE8qLwojZW5kaWYKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiQyZvbmVjdGFyIHVuaWRhZCBkZSByZWQiLCAgICAgSURfQ09OTkVDVF9ORVRXT1JLX0RSSVZFCiAgICAgICAgTUVOVUlURU0gIiZEZXNjb25lY3RhciB1bmlkYWQgZGUgcmVkIiwgIElEX0RJU0NPTk5FQ1RfTkVUV09SS19EUklWRQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICJDbyZtcGFydGlyIGNvbW8uLi4iLCAgICAgICAgICAyNTQKICAgICAgICBNRU5VSVRFTSAiJkVsaW1pbmFyIGNvbXBhcnRpZG8uLi4iLCAgICAgMjU1CiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZTZWxlY2Npb25hciB1bmlkYWQuLi4iLCAgICAgIDI1MQogICAgfQoKICAgIFBPUFVQICJEaSZyZWN0b3Jpb3MiICB7CiAgICAgICAgTUVOVUlURU0gIiZTaWd1aWVudGUgbml2ZWxcdCsiLCAgICAgICAgIDMwMQogICAgICAgIE1FTlVJVEVNICImRXhwYW5kaXIg4XJib2xcdCoiLCAgICAgICAgICAzMDIKICAgICAgICBNRU5VSVRFTSAiRXhwYW5kaXIgJnRvZG9cdFN0cmcrKiIsICAgICAgMzAzCiAgICAgICAgTUVOVUlURU0gIiZDb2xhcHNhciDhcmJvbFx0LSIsICAgICAgICAgIDMwNAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImTWFyY2FyIGhpam9zIiwgICAgICAgICAgICAgICA1MDUKICAgIH0KCiAgICBQT1BVUCAiJlZlciIgIHsKICAgICAgICBNRU5VSVRFTSAiwSZyYm9sIHkgZGlyZWN0b3JpbyIsICAgICAgICAgNDEzCiAgICAgICAgTUVOVUlURU0gIsFyYm9sICZz82xvIiwgICAgICAgICAgICAgICAgIDQxMQogICAgICAgIE1FTlVJVEVNICImRGlyZWN0b3JpbyBz82xvIiwgICAgICAgICAgICA0MTIKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiRGkmdmlkaXIiLCAgICAgICAgICAgICAgICAgICAgSURfVklFV19TUExJVAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICJObyZtYnJlIiwgICAgICAgICAgICAgICAgICAgICBJRF9WSUVXX05BTUUKICAgICAgICBNRU5VSVRFTSAiVCZvZG9zIGxvcyBkZXRhbGxlcyIsICAgICAgICAgSURfVklFV19BTExfQVRUUklCVVRFUywgQ0hFQ0tFRAogICAgICAgIE1FTlVJVEVNICJEZXRhbGxlcyAmcGFyY2lhbGVzLi4uIiwgICAgICBJRF9WSUVXX1NFTEVDVEVEX0FUVFJJQlVURVMKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiT3JkZW5hciBwb3IgJm5vbWJyZSIsICAgICAgICAgSURfVklFV19TT1JUX05BTUUKICAgICAgICBNRU5VSVRFTSAiT3JkZW5hciBwb3IgJnRpcG8iLCAgICAgICAgICAgSURfVklFV19TT1JUX1RZUEUKICAgICAgICBNRU5VSVRFTSAiT3JkZW5hciBwb3IgdCZhbWHxbyIsICAgICAgICAgSURfVklFV19TT1JUX1NJWkUKICAgICAgICBNRU5VSVRFTSAiT3JkZW5hciBwb3IgJmZlY2hhIiwgICAgICAgICAgSURfVklFV19TT1JUX0RBVEUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiT3JkZW5hciBwb3IgJi4uLiIsICAgICAgICAgICAgSURfVklFV19GSUxURVIKICAgIH0KCiAgICBQT1BVUCAiJk9wY2lvbmVzIiAgewogICAgICAgIE1FTlVJVEVNICImQ29uZmlybWFjafNuLi4uIiwgICAgICAgICAgICA1MDEKICAgICAgICBNRU5VSVRFTSAiJkZ1ZW50ZS4uLiIsICAgICAgICAgICAgICAgICAgSURfU0VMRUNUX0ZPTlQKICAgICAgICBNRU5VSVRFTSAiUGVyc29uYWxpemFyIGJhcnJhICZoZXJyYW1pZW50YXMuLi4iLCA1MTIKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJkJhcnJhIGRlIGhlcnJhbWllbnRhcyIsICAgICAgSURfVklFV19UT09MX0JBUiwgQ0hFQ0tFRAogICAgICAgIE1FTlVJVEVNICJCYXJyYSBkZSAmdW5pZGFkZXMiLCAgICAgICAgICBJRF9WSUVXX0RSSVZFX0JBUiwgQ0hFQ0tFRAogICAgICAgIE1FTlVJVEVNICJCYXJyYSBkZSAmZXN0YWRvIiwgICAgICAgICAgICBJRF9WSUVXX1NUQVRVU0JBUiwgQ0hFQ0tFRAojaWZuZGVmIF9OT19FWFRFTlNJT05TCiAgICAgICAgTUVOVUlURU0gIiZQYW50YWxsYSBjb21wbGV0YVx0Q3RybCtTaGlmdCtTIiwgSURfVklFV19GVUxMU0NSRUVOCiNlbmRpZgogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImTWluaW1pemFyIGFsIGVqZWN1dGFyc2UiLCAgICA1MDQKICAgICAgICBNRU5VSVRFTSAiJkd1YXJkYXIgb3BjaW9uZXMgYWwgc2FsaXIiLCAgNTExCiAgICB9CgoKICAgIFBPUFVQICImU2VndXJpZGFkIiAgewogICAgICAgIE1FTlVJVEVNICImQWNjZXNvLi4uIiwgICAgICAgICAgICAgICAgICA2MDUKICAgICAgICBNRU5VSVRFTSAiJkxvZ2dpbmcuLi4iLCAgICAgICAgICAgICAgICAgNjA2CiAgICAgICAgTUVOVUlURU0gIiZQcm9waWV0YXJpby4uLiIsICAgICAgICAgICAgIDYwNwogICAgfQoKICAgIFBPUFVQICImVmVudGFuYSIgIHsKICAgICAgICBNRU5VSVRFTSAiJk51ZXZhIHZlbnRhbmEiLCAgICAgICAgICAgICAgSURfV0lORE9XX05FVwogICAgICAgIE1FTlVJVEVNICImQ2FzY2FkYVx0Q3RybCtGNSIsICAgICAgICAgICBJRF9XSU5ET1dfQ0FTQ0FERQogICAgICAgIE1FTlVJVEVNICJNb3NhaWNvICZob3Jpem9udGFsIiwgICAgICAgICBJRF9XSU5ET1dfVElMRV9IT1JaCiAgICAgICAgTUVOVUlURU0gIk1vc2FpY28gJnZlcnRpY2FsXHRDdHJsK0Y0IiwgIElEX1dJTkRPV19USUxFX1ZFUlQKI2lmbmRlZiBfTk9fRVhURU5TSU9OUwogICAgICAgIE1FTlVJVEVNICJBJmxpbmVhciBhdXRvbeF0aWNhbWVudGUiLCAgICBJRF9XSU5ET1dfQVVUT1NPUlQKI2VuZGlmCiAgICAgICAgTUVOVUlURU0gIkFsaW5lYXIgJnPtbWJvbG9zIiwgICAgICAgICAgIElEX1dJTkRPV19BUlJBTkdFCiAgICAgICAgTUVOVUlURU0gIiZBY3R1YWxpemFyXHRGNSIsICAgICAgICAgICAgIElEX1JFRlJFU0gKICAgIH0KCiAgICBQT1BVUCAiJj8iICB7CiAgICAgICAgTUVOVUlURU0gIiZUZW1hcyBkZSBheXVkYVx0RjEiLCAgICAgICAgIElEX0hFTFAKICAgICAgICBNRU5VSVRFTSAiJkJ1c2NhciBlbiBsYSBheXVkYS4uLlx0RjEiLCAgSURfSEVMUAogICAgICAgIE1FTlVJVEVNICImVXNhbmRvIGxhIGF5dWRhXHRGMSIsICAgICAgICBJRF9IRUxQX1VTSU5HCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZBY2VyY2EgZGUgV2luZWZpbGUuLi4iLCAgICAgIElEX0FCT1VUCiNpZmRlZiBfX1dJTkVfXwogICAgICAgIE1FTlVJVEVNICJBY2VyY2EgZGUgJldpbmUuLi4iLCAgICAgICAgICBJRF9BQk9VVF9XSU5FCiNlbmRpZgogICAgfQp9CgoKSUREX0VYRUNVVEUgRElBTE9HIEZJWEVEIElNUFVSRSAxNSwgMTMsIDIxMCwgNjMKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiRWplY3V0YXIiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewogICAgQ09OVFJPTCAgICAgICAgICIiLCAxMDEsICJTdGF0aWMiLCBTU19TSU1QTEV8U1NfTk9QUkVGSVgsIDMsIDYsIDE2MiwgMTAKICAgIENPTlRST0wgICAgICAgICAiJkNvbWFuZG86IiwgLTEsICJTdGF0aWMiLCBTU19MRUZUTk9XT1JEV1JBUHxXU19HUk9VUCwgMywgMTgsIDYwLCAxMAogICAgRURJVFRFWFQgICAgICAgIDIwMSwgMywgMjksIDEzNCwgMTIsIEVTX0FVVE9IU0NST0xMCiAgICBDT05UUk9MICAgICAgICAgIkNvbW8gJnPtbWJvbG8iLCAyMTQsICJCdXR0b24iLCBCU19BVVRPQ0hFQ0tCT1h8V1NfVEFCU1RPUCwzLCA0NSwgNzEsIDEyCiAgICBERUZQVVNIQlVUVE9OICAgIkFjZXB0YXIiLCAxLCAxNTgsIDYsIDQ3LCAxNAogICAgUFVTSEJVVFRPTiAgICAgICJDYW5jZWxhciIsIDIsIDE1OCwgMjMsIDQ3LCAxNAogICAgUFVTSEJVVFRPTiAgICAgICImQXl1ZGEiLCAyNTQsIDE1OCwgNDMsIDQ3LCAxNAp9CgpJRERfU0VMRUNUX0RFU1RJTkFUSU9OIERJQUxPRyBGSVhFRCBJTVBVUkUgMTUsIDEzLCAyMTAsIDYzClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIlNlbGVjY2lvbmUgZGVzdGlubyIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CiAgICBDT05UUk9MICAgICAgICAgIiIsIDEwMSwgIlN0YXRpYyIsIFNTX1NJTVBMRXxTU19OT1BSRUZJWCwgMywgNiwgMTYyLCAxMAogICAgQ09OVFJPTCAgICAgICAgICImUnV0YToiLCAtMSwgIlN0YXRpYyIsIFNTX0xFRlROT1dPUkRXUkFQfFdTX0dST1VQLCAzLCAxOCwgNjAsIDEwCiAgICBFRElUVEVYVCAgICAgICAgMjAxLCAzLCAyOSwgMTM0LCAxMiwgRVNfQVVUT0hTQ1JPTEwKICAgIERFRlBVU0hCVVRUT04gICAiQWNlcHRhciIsIDEsIDE1OCwgNiwgNDcsIDE0CiAgICBQVVNIQlVUVE9OICAgICAgIkNhbmNlbGFyIiwgMiwgMTU4LCAyMywgNDcsIDE0CiAgICBQVVNIQlVUVE9OICAgICAgIiZFeGFtaW5hciIsIDI1NCwgMTU4LCA0MywgNDcsIDE0Cn0KClNUUklOR1RBQkxFCnsKICAgIElEU19GT05UX1NFTF9ETEdfTkFNRSAgICJBcGxpY2FuZG8gY29uZmlndXJhY2nzbiBkZSBmdWVudGUiCiAgICBJRFNfRk9OVF9TRUxfRVJST1IgICAgICAiRXJyb3IgYWwgc2VsZWNjaW9uYXIgbGEgbnVldmEgZnVlbnRlLiIKfQoKU1RSSU5HVEFCTEUKewogICAgSURTX1dJTkVGSUxFICAgICAgICAgICAgIldpbmVmaWxlIgogICAgSURTX0VSUk9SICAgICAgICAgICAgICAgIkVycm9yIgogICAgSURTX1JPT1RfRlMgICAgICAgICAgICAgInNmIHJh7XoiCiAgICBJRFNfVU5JWEZTICAgICAgICAgICAgICAidW5peGZzIgogICAgSURTX0RFU0tUT1AgICAgICAgICAgICAgIkVzY3JpdG9yaW8iCiAgICBJRFNfU0hFTEwgICAgICAgICAgICAgICAiU2hlbGwiCiAgICBJRFNfVElUTEVGTVQgICAgICAgICAgICAiJXMgLSAlcyIKICAgIElEU19OT19JTVBMICAgICAgICAgICAgICJB+m4gbm8gaW1wbGVtZW50YWRvIgogICAgSURTX1dJTkUgICAgICAgICAgICAgICAgIldJTkUiCiAgICBJRFNfV0lORV9GSUxFICAgICAgICAgICAiV2luZSBGaWxlIgp9CgpTVFJJTkdUQUJMRQp7CiAgICBJRFNfQ09MX05BTUUgICAgICAgICAgICAiTm9tYnJlIgogICAgSURTX0NPTF9TSVpFICAgICAgICAgICAgIlRhbWHxbyIKICAgIElEU19DT0xfQ0RBVEUgICAgICAgICAgICJGZWNoYUMiCiAgICBJRFNfQ09MX0FEQVRFICAgICAgICAgICAiRmVjaGFBIgogICAgSURTX0NPTF9NREFURSAgICAgICAgICAgIkZlY2hhTSIKICAgIElEU19DT0xfSURYICAgICAgICAgICAgICLNbmRpY2UvTm9kby1pIgogICAgSURTX0NPTF9MSU5LUyAgICAgICAgICAgIkVubGFjZXMiCiAgICBJRFNfQ09MX0FUVFIgICAgICAgICAgICAiQXRyaWJ1dG9zIgogICAgSURTX0NPTF9TRUMgICAgICAgICAgICAgIlNlZ3VyaWRhZCIKfQo=