LyoKICogV2luZUZpbGUKICogRnJlbmNoIExhbmd1YWdlIFN1cHBvcnQKICoKICogQ29weXJpZ2h0IDIwMDAgTWFydGluIEZ1Y2hzCiAqIENvcHlyaWdodCAyMDAyIFN0ZXZlbiBFZHdhcmRzCiAqIENvcHlyaWdodCAyMDAyIEFsZXhhbmRyZSBKdWxsaWFyZAogKiBDb3B5cmlnaHQgMjAwMyBTeWx2YWluIFBldHJlb2xsZQogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICovCgpMQU5HVUFHRSBMQU5HX0ZSRU5DSCwgU1VCTEFOR19ERUZBVUxUCiNwcmFnbWEgY29kZV9wYWdlKDg1MCkKCgovKiBNZW51ICovCgpJRE1fV0lORUZJTEUgTUVOVSBGSVhFRCBJTVBVUkUKewoJUE9QVVAgIiZGaWNoaWVyIiAgewoJCU1FTlVJVEVNICImT3V2cmlyXHRFbnRy6WUiICwJCQkxMDEKCQlNRU5VSVRFTSAiJkTpcGxhY2VyLi4uXHRGNyIgLCAJCQkxMDYKCQlNRU5VSVRFTSAiJkNvcGllci4uLlx0RjgiICwJCQkxMDcKCQlNRU5VSVRFTSAiUHJlc3NlIFBhcGllcnMuLi5cdEY5IiAsCQkxMTgKCQlNRU5VSVRFTSAiJkVmZmFjZXJcdERlbCIgLAkJCTEwOAoJCU1FTlVJVEVNICJSZSZub21tZXIuLi4iICwJCQkxMDkKCQlNRU5VSVRFTSAiJlByb3Byael06XMuLi5cdEFsdCtFbnRyZWUiICwgSURfRURJVF9QUk9QRVJUSUVTCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIkMmb21wcmVzc2VyLi4uIiAsCQkxMTkKCQlNRU5VSVRFTSAiROljJm9tcHJlc3Nlci4uLiIgLAkJMTIwCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIiZFeOljdXRlci4uLiIgLAkJCUlEX0VYRUNVVEUKCQlNRU5VSVRFTSAiJkltcHJpbWVyLi4uIiAsIAkJCTEwMgoJCU1FTlVJVEVNICJBc3NvY2llci4uLiIgLAkJMTAzCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIkNy6WVyICZSZXBlcnRvaXJlLi4uIiAsCQkJMTExCgkJTUVOVUlURU0gIlJlYyZoZXJjaGVyLi4uIiAsCQkJMTA0CgkJTUVOVUlURU0gIiZT6WxlY3Rpb25uZXIgRmljaGllcnMuLi4iICwJCQkxMTYKCQlNRU5VSVRFTSBTRVBBUkFUT1IKI2lmbmRlZiBfTk9fRVhURU5TSU9OUwoJCU1FTlVJVEVNICImUXVpdHRlclx0QWx0K1giICwgCQkJSURfRklMRV9FWElUCiNlbHNlCgkJTUVOVUlURU0gIiZRdWl0dGVyIiwgCQkJCUlEX0ZJTEVfRVhJVAojZW5kaWYKCX0KCglQT1BVUCAiJkRpc3F1ZSIgIHsKCQlNRU5VSVRFTSAiJkNvcGllciBEaXNxdWUuLi4iICwJCQkyMDEKCQlNRU5VSVRFTSAiJk5vbW1lciBEaXNxdWUuLi4iICwJCQkyMDIKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiJkZvcm1hdGVyIERpc3F1ZS4uLiIgLAkJCTIwMwojaWZkZWYgX1dJTjk1CgkJTUVOVUlURU0gIkNy6WVyIHVuIGRpc3F1ZSBzeXN06G1lLi4uIiwgLTEJLypAQCAqLwojZW5kaWYKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiJkNvbm5lY3RlciB1biBsZWN0ZXVyIHLpc2VhdSIgLAkJCTI1MgoJCU1FTlVJVEVNICImROljb25uZWN0ZXIgdW4gbGVjdGV1ciBy6XNlYXUiICwJCTI1MwoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICImUGFydGFnZXIuLi4iICwJCQkyNTQKCQlNRU5VSVRFTSAiJkNlc3NlciBkZSBwYXJ0YWdlciIgLAkJCTI1NQoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICJDaG9pc2lyIGxlICZsZWN0ZXVyIiAsCQkJMjUxCgl9CgoJUE9QVVAgIiZS6XBlcnRvaXJlcyIgIHsKCQlNRU5VSVRFTSAiJkTpdmVsb3BwZXIgdW4gbml2ZWF1IFx0KyIgLAkJCTMwMQoJCU1FTlVJVEVNICImROl2ZWxvcHBlciB1bmUgYnJhbmNoZVx0KiIgLAkJMzAyCgkJTUVOVUlURU0gIlRvdXQgZOl2ZWxvcHBlciBcdEN0cmwrKiIgLAkJMzAzCgkJTUVOVUlURU0gIlLpZHVpcmUgdW5lIGJyYW5jaGVcdC0iICwJCQkzMDQKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiJkluZGlxdWVyIGwnYXJib3Jlc2NlbmNlIiAsCQkJCTUwNQoJfQoKCVBPUFVQICImVnVlIiAgewoJCU1FTlVJVEVNICJBcmJyZSAmZXQgculwZXJ0b2lyZSIgLAkJCTQxMwoJCU1FTlVJVEVNICImQXJicmUgc2V1bGVtZW50IiAsCQkJNDExCgkJTUVOVUlURU0gIiZS6XBlcnRvaXJlIHNldWxlbWVudCIgLAkJCTQxMgoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICImU+lwYXJlciIgLAkJCTQxNAoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICImTm9tIiAsCQkJSURfVklFV19OQU1FCgkJTUVOVUlURU0gIlRvdXMgJmxlcyBE6XRhaWxzIiAsCQkJCUlEX1ZJRVdfQUxMX0FUVFJJQlVURVMsIENIRUNLRUQKCQlNRU5VSVRFTSAiJkTpdGFpbHMuLi4iICwJCQlJRF9WSUVXX1NFTEVDVEVEX0FUVFJJQlVURVMKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiVHJpZXIgcGFyIE4mb20iICwJCTQwNAoJCU1FTlVJVEVNICJUcmllciBwYXIgJlR5cGUiICwJCTQwNQoJCU1FTlVJVEVNICJUcmllciBwYXIgVCZhaWxsZSIgLCAJCTQwNgoJCU1FTlVJVEVNICJUcmllciBwYXIgJkRhdGUiICwgCQk0MDcKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiVHJpZXIgcGFyICYuLi4iICwJCQk0MDkKCX0KCglQT1BVUCAiJk9wdGlvbnMiICB7CgkJTUVOVUlURU0gIiZDb25maXJtYXRpb24uLi4iICwJCS0xCgkJTUVOVUlURU0gIiZGb250ZS4uLiIgLAkJCS0xCgkJTUVOVUlURU0gIiZQZXJzb25uYWxpc2VyIGxhIGJhcnJlIGQnT3V0aWxzLi4uIiAsIC0xCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIkJhcnJlIGQnJk91dGlscyIgLAkJSURfVklFV19UT09MX0JBUiwgQ0hFQ0tFRAoJCU1FTlVJVEVNICJCYXJyZSBkZSAmTGVjdGV1ciIgLAkJSURfVklFV19EUklWRV9CQVIsIENIRUNLRUQKCQlNRU5VSVRFTSAiQmFycmUgZCcmyXRhdCIgLAlJRF9WSUVXX1NUQVRVU0JBUiwgQ0hFQ0tFRAojaWZuZGVmIF9OT19FWFRFTlNJT05TCgkJTUVOVUlURU0gIiZQbGVpbiDJY3Jhblx0Q3RybCtTaGlmdCtTIiAsIAlJRF9WSUVXX0ZVTExTQ1JFRU4KI2VuZGlmCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIiZS6WR1aXJlIGEgbCd1dGlsaXNhdGlvbiIgLAkJLTEKCQlNRU5VSVRFTSAiJkVucmVnaXN0cmVyIGxhIGNvbmZpZ3VyYXRpb24gZW4gcXVpdHRhbnQiICwJCQk1MTEKCX0KCgoJUE9QVVAgIiZT6WN1cml06SIgIHsKCQlNRU5VSVRFTSAiJkFjY+hzLi4uIiAsCQk2MDUKCQlNRU5VSVRFTSAiJlN1cnZlaWxsYW5jZS4uLiIgLAkJCTYwNgoJCU1FTlVJVEVNICImUHJvcHJp6XRhaXJlLi4uIiAsCQk2MDcKCX0KCglQT1BVUCAiJkZlbup0cmUiICB7CgkJTUVOVUlURU0gIk5vdXZlbGxlICZmZW7qdHJlIiAsCQkJSURfV0lORE9XX05FVwoJCU1FTlVJVEVNICJNb3Nh73F1ZSAmaG9yaXpvbnRhbGUiICwJCUlEX1dJTkRPV19USUxFX0hPUloKCQlNRU5VSVRFTSAiTW9zYe9xdWUgJnZlcnRpY2FsZVx0Q3RybCtGNCIgLAkJSURfV0lORE9XX1RJTEVfVkVSVAojaWZuZGVmIF9OT19FWFRFTlNJT05TCgkJTUVOVUlURU0gIlLpb3JnYW5pc2F0aW9uICZBdXRvbWF0aXF1ZSIgLAkJSURfV0lORE9XX0FVVE9TT1JUCiNlbmRpZgoJCU1FTlVJVEVNICJS6W9yZ2FuaXNlciBsZXMgaWP0bmVzIiAsCQlJRF9XSU5ET1dfQVJSQU5HRQoJCU1FTlVJVEVNICImQWN0dWFsaXNlclx0RjUiICwJCUlEX1JFRlJFU0gKCX0KCglQT1BVUCAiJj8iICB7CgkJTUVOVUlURU0gIiZTb21tYWlyZSBkZSBsJ2FpZGVcdEYxIiAsCQkJSURfSEVMUAoJCU1FTlVJVEVNICImUmVjaGVyY2hlciBkYW5zIGwnYWlkZVx0RjEiICwJCQlJRF9IRUxQCgkJTUVOVUlURU0gIiZVc2luZyBIZWxwXHRGMSIgLAkJCUlEX0hFTFBfVVNJTkcKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlQT1BVUCAiSW5mby4uLiIgIHsKCQkgIE1FTlVJVEVNICJBIHByb3BvcyBkZSAmV2luZS4uLiIgLAkJCUlEX0FCT1VUX1dJTkUKCQkgIE1FTlVJVEVNICImTGljZW5jZS4uLiIJCUlEX0xJQ0VOU0UKCQkgIE1FTlVJVEVNICImTk8gV0FSUkFOVFkiCQlJRF9OT19XQVJSQU5UWQoJCX0KCX0KfQoKCklERF9FWEVDVVRFIERJQUxPRyBGSVhFRCBJTVBVUkUgMTUsIDEzLCAyMTAsIDYzClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIkV46WN1dGVyIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKCUNPTlRST0wgCQkiIiwgMTAxLCAiU3RhdGljIiwgU1NfU0lNUExFfFNTX05PUFJFRklYLCAzLCA2LCAxNjIsIDEwCglDT05UUk9MIAkJIiZDb21tYW5kZToiICwgLTEsICJTdGF0aWMiLCBTU19MRUZUTk9XT1JEV1JBUHxXU19HUk9VUCwgMywgMTgsIDYwLCAxMAoJRURJVFRFWFQJCTIwMSwgMywgMjksIDEzNCwgMTIsIEVTX0FVVE9IU0NST0xMCglDT05UUk9MIAkJIlNvdXMgZm9ybWUgZCdpY/RuZSIgLCAyMTQsICJCdXR0b24iLCBCU19BVVRPQ0hFQ0tCT1h8V1NfVEFCU1RPUCwzLCA0NSwgNzEsIDEyCglERUZQVVNIQlVUVE9OCSJPSyIgLCAxLCAxNTgsIDYsIDQ3LCAxNAoJUFVTSEJVVFRPTgkJIkFubnVsZXIiICwgMiwgMTU4LCAyMywgNDcsIDE0CglQVVNIQlVUVE9OCQkiJkFpZGUiICwgMjU0LCAxNTgsIDQzLCA0NywgMTQKfQo=