LyoKICogV2luZUZpbGUKICogU3BhbmlzaCBMYW5ndWFnZSBTdXBwb3J0CiAqCiAqIENvcHlyaWdodCAyMDA0IEpvc+kgTWFudWVsIEZlcnJlciBPcnRpegogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICovCgpMQU5HVUFHRSBMQU5HX1NQQU5JU0gsIFNVQkxBTkdfREVGQVVMVAoKLyogTWVudSAqLwoKSURNX1dJTkVGSUxFIE1FTlUgRklYRUQgSU1QVVJFCnsKCVBPUFVQICImQXJjaGl2byIgIHsKCQlNRU5VSVRFTSAiJkFicmlyXHRFbnRlciIgLAkJCTEwMQoJCU1FTlVJVEVNICJNbyZ2ZXIuLi5cdEY3IiAsIAkJCTEwNgoJCU1FTlVJVEVNICImQ29waWFyLi4uXHRGOCIgLAkJCTEwNwoJCU1FTlVJVEVNICJFJm4gcG9ydGFwYXBlbGVzLi4uXHRGOSIgLAkJMTE4CgkJTUVOVUlURU0gIiZFbGltaW5hclx0RGVsIiAsCQkJMTA4CgkJTUVOVUlURU0gIiZSZW5vbWJyYXIuLi4iICwJCQkxMDkKCQlNRU5VSVRFTSAiJlByb3BpZWRhZGVzLi4uXHRBbHQrRW50ZXIiICwJSURfRURJVF9QUk9QRVJUSUVTCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIkMmb21wcmltaXIuLi4iICwJCQkxMTkKCQlNRU5VSVRFTSAiJkRlc2NvbXByaW1pci4uLiIgLAkJCTEyMAoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICJFJmplY3V0YXIuLi4iICwJCQlJRF9FWEVDVVRFCgkJTUVOVUlURU0gIkkmbXByaW1pci4uLiIgLCAJCQkxMDIKCQlNRU5VSVRFTSAiQXNvYyZpYXIuLi4iICwJCQkxMDMKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiQ3JlYXIgZGlyZWMmdG9yaW8uLi4iICwJCTExMQoJCU1FTlVJVEVNICImQnVzY2FyLi4uIiAsCQkJCTEwNAoJCU1FTlVJVEVNICJTZSZsZWNjaW9uYXIgYXJjaGl2b3MuLi4iICwJCTExNgoJCU1FTlVJVEVNIFNFUEFSQVRPUgojaWZuZGVmIF9OT19FWFRFTlNJT05TCgkJTUVOVUlURU0gIiZTYWxpclx0QWx0K1giICwgCQkJSURfRklMRV9FWElUCiNlbHNlCgkJTUVOVUlURU0gIiZTYWxpciIsIAkJCQlJRF9GSUxFX0VYSVQKI2VuZGlmCgl9CgoJUE9QVVAgIiZEaXNjbyIgIHsKCQlNRU5VSVRFTSAiJkNvcGlhciBkaXNjby4uLiIgLAkJCTIwMQoJCU1FTlVJVEVNICJFJnRpcXVldGFyIGRpc2NvLi4uIiAsCQkyMDIKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiJkZvcm1hdGVhciBkaXNjby4uLiIgLAkJMjAzCiNpZmRlZiBfV0lOOTUKCQlNRU5VSVRFTSAiJkhhY2VyIGRpc2NvIGRlIHNpc3RlbWEuLi4iLCAtMQkvKkBAICovCiNlbmRpZgoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICJDJm9uZWN0YXIgdW5pZGFkIGRlIHJlZCIgLAkJMjUyCgkJTUVOVUlURU0gIiZEZXNjb25lY3RhciB1bmlkYWQgZGUgcmVkIiAsCQkyNTMKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiQ28mbXBhcnRpciBjb21vLi4uIiAsCQkJMjU0CgkJTUVOVUlURU0gIiZFbGltaW5hciBjb21wYXJ0aWRvLi4uIiAsCQkyNTUKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiJlNlbGVjY2lvbmFyIHVuaWRhZC4uLiIgLAkJMjUxCgl9CgoJUE9QVVAgIiZEaXJlY3RvcmlvcyIgIHsKCQlNRU5VSVRFTSAiJlNpZ3VpZW50ZSBuaXZlbFx0KyIgLAkJMzAxCgkJTUVOVUlURU0gIiZFeHBhbmRpciDhcmJvbFx0KiIgLAkJCTMwMgoJCU1FTlVJVEVNICJFeHBhbmRpciAmdG9kb1x0U3RyZysqIiAsCQkzMDMKCQlNRU5VSVRFTSAiJkNvbGFwc2FyIOFyYm9sXHQtIiAsCQkJMzA0CgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIiZNYXJjYXIgaGlqb3MiICwJCQk1MDUKCX0KCglQT1BVUCAiJlZlciIgIHsKCQlNRU5VSVRFTSAiwSZyYm9sIHkgZGlyZWN0b3JpbyIgLAkJNDEzCgkJTUVOVUlURU0gIsFyYm9sICZz82xvIiAsCQkJNDExCgkJTUVOVUlURU0gIiZEaXJlY3RvcmlvIHPzbG8iICwJCQk0MTIKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiRGkmdmlkaXIiICwJCQkJNDE0CgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIk5vJm1icmUiICwJCQlJRF9WSUVXX05BTUUKCQlNRU5VSVRFTSAiVCZvZG9zIGxvcyBkZXRhbGxlcyIgLAlJRF9WSUVXX0FMTF9BVFRSSUJVVEVTLCBDSEVDS0VECgkJTUVOVUlURU0gIkRldGFsbGVzICZwYXJjaWFsZXMuLi4iICwJSURfVklFV19TRUxFQ1RFRF9BVFRSSUJVVEVTCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIk9yZGVuYXIgcG9yICZub21icmUiICwJCTQwNAoJCU1FTlVJVEVNICJPcmRlbmFyIHBvciAmdGlwbyIgLAkJCTQwNQoJCU1FTlVJVEVNICJPcmRlbmFyIHBvciB0JmFtYfFvIiAsIAkJNDA2CgkJTUVOVUlURU0gIk9yZGVuYXIgcG9yICZmZWNoYSIgLCAJCTQwNwoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICJPcmRlbmFyIHBvciAmLi4uIiAsCQkJNDA5Cgl9CgoJUE9QVVAgIiZPcGNpb25lcyIgIHsKCQlNRU5VSVRFTSAiJkNvbmZpcm1hY2nzbi4uLiIgLAkJLTEKCQlNRU5VSVRFTSAiJkZ1ZW50ZS4uLiIgLAkJCS0xCgkJTUVOVUlURU0gIlBlcnNvbmFsaXphciBiYXJyYSAmaGVycmFtaWVudGFzLi4uIiAsIC0xCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIiZCYXJyYSBkZSBoZXJyYW1pZW50YXMiICwJSURfVklFV19UT09MX0JBUiwgQ0hFQ0tFRAoJCU1FTlVJVEVNICJCYXJyYSBkZSAmdW5pZGFkZXMiICwJCUlEX1ZJRVdfRFJJVkVfQkFSLCBDSEVDS0VECgkJTUVOVUlURU0gIkJhcnJhIGRlICZlc3RhZG8iICwJCUlEX1ZJRVdfU1RBVFVTQkFSLCBDSEVDS0VECiNpZm5kZWYgX05PX0VYVEVOU0lPTlMKCQlNRU5VSVRFTSAiJlBhbnRhbGxhIGNvbXBsZXRhXHRDdHJsK1NoaWZ0K1MiICwgCUlEX1ZJRVdfRlVMTFNDUkVFTgojZW5kaWYKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiJk1pbmltaXphciBhbCBlamVjdXRhcnNlIiAsCQktMQoJCU1FTlVJVEVNICImR3VhcmRhciBvcGNpb25lcyBhbCBzYWxpciIgLAkJNTExCgl9CgoKCVBPUFVQICImU2VndXJpZGFkIiAgewoJCU1FTlVJVEVNICImQWNjZXNvLi4uIiAsCQkJNjA1CgkJTUVOVUlURU0gIiZMb2dnaW5nLi4uIiAsCQk2MDYKCQlNRU5VSVRFTSAiJlByb3BpZXRhcmlvLi4uIiAsCQk2MDcKCX0KCglQT1BVUCAiJlZlbnRhbmEiICB7CgkJTUVOVUlURU0gIiZOdWV2YSB2ZW50YW5hIiAsCQlJRF9XSU5ET1dfTkVXCgkJTUVOVUlURU0gIiZDYXNjYWRhXHRDdHJsK0Y1IiAsCQlJRF9XSU5ET1dfQ0FTQ0FERQoJCU1FTlVJVEVNICJNb3NhaWNvICZob3Jpem9udGFsIiAsCQlJRF9XSU5ET1dfVElMRV9IT1JaCgkJTUVOVUlURU0gIk1vc2FpY28gJnZlcnRpY2FsXHRDdHJsK0Y0IiAsCQlJRF9XSU5ET1dfVElMRV9WRVJUCiNpZm5kZWYgX05PX0VYVEVOU0lPTlMKCQlNRU5VSVRFTSAiQWxpbmVhciAmYXV0b23hdGljYW1lbnRlIiAsCQlJRF9XSU5ET1dfQVVUT1NPUlQKI2VuZGlmCgkJTUVOVUlURU0gIkFsaW5lYXIgJnPtbWJvbG9zIiAsCQlJRF9XSU5ET1dfQVJSQU5HRQoJCU1FTlVJVEVNICImQWN0dWFsaXphclx0RjUiICwJCUlEX1JFRlJFU0gKCX0KCglQT1BVUCAiJj8iICB7CgkJTUVOVUlURU0gIiZUZW1hcyBkZSBheXVkYVx0RjEiICwJCQlJRF9IRUxQCgkJTUVOVUlURU0gIiZCdXNjYXIgZW4gbGEgYXl1ZGEuLi5cdEYxIiAsCQkJSURfSEVMUAoJCU1FTlVJVEVNICImVXNhbmRvIGxhIGF5dWRhXHRGMSIgLAkJCUlEX0hFTFBfVVNJTkcKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlQT1BVUCAiJkluZm9ybWFjafNuLi4uIiAgewoJCSAgTUVOVUlURU0gIkFjZXJjYSBkZSAmV2luZS4uLiIgLAkJCUlEX0FCT1VUX1dJTkUKLyoKICoJCSAgTUVOVUlURU0gIiZMaWNlbmNpYS4uLiIJCUlEX0xJQ0VOU0UKICoJCSAgTUVOVUlURU0gIiZTSU4gR0FSQU5UzUEiCQlJRF9OT19XQVJSQU5UWQogKi8KCQl9Cgl9Cn0KCgpJRERfRVhFQ1VURSBESUFMT0cgRklYRUQgSU1QVVJFIDE1LCAxMywgMjEwLCA2MwpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJFamVjdXRhciIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CglDT05UUk9MIAkJIiIsIDEwMSwgIlN0YXRpYyIsIFNTX1NJTVBMRXxTU19OT1BSRUZJWCwgMywgNiwgMTYyLCAxMAoJQ09OVFJPTCAJCSImQ29tYW5kbzoiICwgLTEsICJTdGF0aWMiLCBTU19MRUZUTk9XT1JEV1JBUHxXU19HUk9VUCwgMywgMTgsIDYwLCAxMAoJRURJVFRFWFQJCTIwMSwgMywgMjksIDEzNCwgMTIsIEVTX0FVVE9IU0NST0xMCglDT05UUk9MIAkJIkNvbW8gJnPtbWJvbG8iICwgMjE0LCAiQnV0dG9uIiwgQlNfQVVUT0NIRUNLQk9YfFdTX1RBQlNUT1AsMywgNDUsIDcxLCAxMgoJREVGUFVTSEJVVFRPTgkiQWNlcHRhciIgLCAxLCAxNTgsIDYsIDQ3LCAxNAoJUFVTSEJVVFRPTgkJIkNhbmNlbGFyIiAsIDIsIDE1OCwgMjMsIDQ3LCAxNAoJUFVTSEJVVFRPTgkJIiZBeXVkYSIgLCAyNTQsIDE1OCwgNDMsIDQ3LCAxNAp9Cg==