LyoKICogV2luZUZpbGUKICogRnJlbmNoIExhbmd1YWdlIFN1cHBvcnQKICoKICogQ29weXJpZ2h0IDIwMDAgTWFydGluIEZ1Y2hzCiAqIENvcHlyaWdodCAyMDAyIFN0ZXZlbiBFZHdhcmRzCiAqIENvcHlyaWdodCAyMDAyIEFsZXhhbmRyZSBKdWxsaWFyZAogKiBDb3B5cmlnaHQgMjAwMyBTeWx2YWluIFBldHJlb2xsZQogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICovCgpMQU5HVUFHRSBMQU5HX0ZSRU5DSCwgU1VCTEFOR19ORVVUUkFMCgovKiBNZW51ICovCgpJRE1fV0lORUZJTEUgTUVOVSBGSVhFRCBJTVBVUkUKewoJUE9QVVAgIiZGaWNoaWVyIiAgewoJCU1FTlVJVEVNICImT3V2cmlyXHRFbnRy6WUiICwJCQlJRF9BQ1RJVkFURQoJCU1FTlVJVEVNICImROlwbGFjZXIuLi5cdEY3IiAsIAkJCUlEX0ZJTEVfTU9WRQoJCU1FTlVJVEVNICImQ29waWVyLi4uXHRGOCIgLAkJCTEwNwoJCU1FTlVJVEVNICJQJnJlc3NlLVBhcGllcnMuLi5cdEY5IiAsCQkxMTgKCQlNRU5VSVRFTSAiJkVmZmFjZXJcdERlbCIgLAkJCTEwOAoJCU1FTlVJVEVNICJSZSZub21tZXIuLi4iICwJCQkxMDkKCQlNRU5VSVRFTSAiJlByb3Byael06XMuLi5cdEFsdCtFbnRyZWUiICwgSURfRURJVF9QUk9QRVJUSUVTCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIkNvJm1wcmVzc2VyLi4uIiAsCQkxMTkKCQlNRU5VSVRFTSAiROljb21wcmUmc3Nlci4uLiIgLAkJMTIwCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIkUmeOljdXRlci4uLiIgLAkJCUlEX0VYRUNVVEUKCQlNRU5VSVRFTSAiJkltcHJpbWVyLi4uIiAsIAkJCTEwMgoJCU1FTlVJVEVNICImQXNzb2NpZXIuLi4iICwJCTEwMwoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICJDcullciBS6XBlciZ0b2lyZS4uLiIgLAkJCTExMQoJCU1FTlVJVEVNICJSZWMmaGVyY2hlci4uLiIgLAkJCTEwNAoJCU1FTlVJVEVNICJT6WxlY3Rpb25uZXIgJkZpY2hpZXJzLi4uIiAsCQkJMTE2CgkJTUVOVUlURU0gU0VQQVJBVE9SCiNpZm5kZWYgX05PX0VYVEVOU0lPTlMKCQlNRU5VSVRFTSAiJlF1aXR0ZXJcdEFsdCtYIiAsIAkJCUlEX0ZJTEVfRVhJVAojZWxzZQoJCU1FTlVJVEVNICImUXVpdHRlciIsIAkJCQlJRF9GSUxFX0VYSVQKI2VuZGlmCgl9CgoJUE9QVVAgIiZEaXNxdWUiICB7CgkJTUVOVUlURU0gIiZDb3BpZXIgRGlzcXVlLi4uIiAsCQkJMjAxCgkJTUVOVUlURU0gIiZOb21tZXIgRGlzcXVlLi4uIiAsCQkJMjAyCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIiZGb3JtYXRlciBEaXNxdWUuLi4iICwJCQlJRF9GT1JNQVRfRElTSwojaWZkZWYgX1dJTjk1CgkJTUVOVUlURU0gIkNy6WVyIHVuIGRpc3F1ZSAqc3lzdOhtZS4uLiIsIC0xCS8qQEAgKi8KI2VuZGlmCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIkNvbm5lY3RlciB1biBsZWN0ZXVyICZy6XNlYXUiICwJCQlJRF9DT05ORUNUX05FVFdPUktfRFJJVkUKCQlNRU5VSVRFTSAiJkTpY29ubmVjdGVyIHVuIGxlY3RldXIgculzZWF1IiAsCQlJRF9ESVNDT05ORUNUX05FVFdPUktfRFJJVkUKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiJlBhcnRhZ2VyLi4uIiAsCQkJMjU0CgkJTUVOVUlURU0gIkNlc3NlciBkZSBwYXJ0YSZnZXIiICwJCQkyNTUKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiQ2hvaXNpciBsZSAmbGVjdGV1ciIgLAkJCTI1MQoJfQoKCVBPUFVQICImUulwZXJ0b2lyZXMiICB7CgkJTUVOVUlURU0gIiZE6XZlbG9wcGVyIHVuIG5pdmVhdVx0KyIgLAkJCTMwMQoJCU1FTlVJVEVNICJE6XZlbG9wcGVyIHVuZSAmYnJhbmNoZVx0KiIgLAkJMzAyCgkJTUVOVUlURU0gIiZUb3V0IGTpdmVsb3BwZXJcdEN0cmwrKiIgLAkJMzAzCgkJTUVOVUlURU0gIiZS6WR1aXJlIHVuZSBicmFuY2hlXHQtIiAsCQkJMzA0CgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIiZJbmRpcXVlciBsJ2FyYm9yZXNjZW5jZSIgLAkJCQk1MDUKCX0KCglQT1BVUCAiJlZ1ZSIgIHsKCQlNRU5VSVRFTSAiQXJicmUgZXQgcukmcGVydG9pcmUiICwJCQk0MTMKCQlNRU5VSVRFTSAiJkFyYnJlIHNldWxlbWVudCIgLAkJCTQxMQoJCU1FTlVJVEVNICImUulwZXJ0b2lyZSBzZXVsZW1lbnQiICwJCQk0MTIKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiJlPpcGFyZXIiICwJCQk0MTQKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiJk5vbSIgLAkJCUlEX1ZJRVdfTkFNRQoJCU1FTlVJVEVNICJUb3VzICZsZXMgROl0YWlscyIgLAkJCQlJRF9WSUVXX0FMTF9BVFRSSUJVVEVTLCBDSEVDS0VECgkJTUVOVUlURU0gIiZE6XRhaWxzLi4uIiAsCQkJSURfVklFV19TRUxFQ1RFRF9BVFRSSUJVVEVTCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIlRyaWVyIHBhciBOJm9tIiAsCQlJRF9WSUVXX1NPUlRfTkFNRQoJCU1FTlVJVEVNICJUcmllciBwYXIgJlR5cGUiICwJCUlEX1ZJRVdfU09SVF9UWVBFCgkJTUVOVUlURU0gIlRyaWVyIHBhciBUYSZpbGxlIiAsIAkJSURfVklFV19TT1JUX1NJWkUKCQlNRU5VSVRFTSAiVHJpZXIgcGFyIERhdCZlIiAsIAkJSURfVklFV19TT1JUX0RBVEUKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiVHJpZXIgcGFyICYuLi4iICwJCQk0MDkKCX0KCglQT1BVUCAiJk9wdGlvbnMiICB7CgkJTUVOVUlURU0gIiZDb25maXJtYXRpb24uLi4iICwJCS0xCgkJTUVOVUlURU0gIiZQb2xpY2UuLi4iICwJCQlJRF9TRUxFQ1RfRk9OVAoJCU1FTlVJVEVNICJQZXJzb25uYWxpc2VyIGxhICZiYXJyZSBkJ091dGlscy4uLiIgLCAtMQoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICJCYXJyZSBkJyZPdXRpbHMiICwJCUlEX1ZJRVdfVE9PTF9CQVIsIENIRUNLRUQKCQlNRU5VSVRFTSAiQmFycmUgZGUgJkxlY3RldXIiICwJCUlEX1ZJRVdfRFJJVkVfQkFSLCBDSEVDS0VECgkJTUVOVUlURU0gIkJhcnJlIGQnJsl0YXQiICwJSURfVklFV19TVEFUVVNCQVIsIENIRUNLRUQKI2lmbmRlZiBfTk9fRVhURU5TSU9OUwoJCU1FTlVJVEVNICJQJmxlaW4gyWNyYW5cdEN0cmwrU2hpZnQrUyIgLCAJSURfVklFV19GVUxMU0NSRUVOCiNlbmRpZgoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICImUulkdWlyZSBhIGwndXRpbGlzYXRpb24iICwJCS0xCgkJTUVOVUlURU0gIiZFbnJlZ2lzdHJlciBsYSBjb25maWd1cmF0aW9uIGVuIHF1aXR0YW50IiAsCQkJNTExCgl9CgoKCVBPUFVQICImU+ljdXJpdOkiICB7CgkJTUVOVUlURU0gIiZBY2Pocy4uLiIgLAkJNjA1CgkJTUVOVUlURU0gIiZTdXJ2ZWlsbGFuY2UuLi4iICwJCQk2MDYKCQlNRU5VSVRFTSAiJlByb3Byael0YWlyZS4uLiIgLAkJNjA3Cgl9CgoJUE9QVVAgIiZGZW7qdHJlIiAgewoJCU1FTlVJVEVNICJOb3V2ZWxsZSAmZmVu6nRyZSIgLAkJCUlEX1dJTkRPV19ORVcKCQlNRU5VSVRFTSAiJkVuIGNhc2NhZGVcdEN0cmwrRjUiICwJCUlEX1dJTkRPV19DQVNDQURFCgkJTUVOVUlURU0gIk1vc2HvcXVlICZob3Jpem9udGFsZSIgLAkJSURfV0lORE9XX1RJTEVfSE9SWgoJCU1FTlVJVEVNICJNb3Nh73F1ZSAmdmVydGljYWxlXHRDdHJsK0Y0IiAsCQlJRF9XSU5ET1dfVElMRV9WRVJUCiNpZm5kZWYgX05PX0VYVEVOU0lPTlMKCQlNRU5VSVRFTSAiUulvcmdhbmlzYXRpb24gJkF1dG9tYXRpcXVlIiAsCQlJRF9XSU5ET1dfQVVUT1NPUlQKI2VuZGlmCgkJTUVOVUlURU0gIlLpb3JnYW5pc2VyIGxlcyAmaWP0bmVzIiAsCQlJRF9XSU5ET1dfQVJSQU5HRQoJCU1FTlVJVEVNICImQWN0dWFsaXNlclx0RjUiICwJCUlEX1JFRlJFU0gKCX0KCglQT1BVUCAiJkFpZGUiICB7CgkJTUVOVUlURU0gIiZTb21tYWlyZSBkZSBsJ2FpZGVcdEYxIiAsCQkJSURfSEVMUAoJCU1FTlVJVEVNICImUmVjaGVyY2hlciBkYW5zIGwnYWlkZVx0RjEiICwJCQlJRF9IRUxQCgkJTUVOVUlURU0gIiZVdGlsaXNlciBsJ2FpZGVcdEYxIiAsCQkJSURfSEVMUF9VU0lORwoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCVBPUFVQICJJbmZvLi4uIiAgewoJCSAgTUVOVUlURU0gIkEgcHJvcG9zIGRlICZXaW5lLi4uIiAsCQkJSURfQUJPVVRfV0lORQovKgogKgkJICBNRU5VSVRFTSAiJkxpY2VuY2UuLi4iCQlJRF9MSUNFTlNFCiAqCQkgIE1FTlVJVEVNICImTk8gV0FSUkFOVFkiCQlJRF9OT19XQVJSQU5UWQogKi8KCQl9Cgl9Cn0KCgpJRERfRVhFQ1VURSBESUFMT0cgRklYRUQgSU1QVVJFIDE1LCAxMywgMjEwLCA2MwpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJFeOljdXRlciIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CglDT05UUk9MIAkJIiIsIDEwMSwgIlN0YXRpYyIsIFNTX1NJTVBMRXxTU19OT1BSRUZJWCwgMywgNiwgMTYyLCAxMAoJQ09OVFJPTCAJCSImQ29tbWFuZGUgOiIgLCAtMSwgIlN0YXRpYyIsIFNTX0xFRlROT1dPUkRXUkFQfFdTX0dST1VQLCAzLCAxOCwgNjAsIDEwCglFRElUVEVYVAkJMjAxLCAzLCAyOSwgMTM0LCAxMiwgRVNfQVVUT0hTQ1JPTEwKCUNPTlRST0wgCQkiU291cyBmb3JtZSBkJ2lj9G5lIiAsIDIxNCwgIkJ1dHRvbiIsIEJTX0FVVE9DSEVDS0JPWHxXU19UQUJTVE9QLDMsIDQ1LCA3MSwgMTIKCURFRlBVU0hCVVRUT04JIk9LIiAsIDEsIDE1OCwgNiwgNDcsIDE0CglQVVNIQlVUVE9OCQkiQW5udWxlciIgLCAyLCAxNTgsIDIzLCA0NywgMTQKCVBVU0hCVVRUT04JCSImQWlkZSIgLCAyNTQsIDE1OCwgNDMsIDQ3LCAxNAp9CgpJRERfU0VMRUNUX0RFU1RJTkFUSU9OIERJQUxPRyBGSVhFRCBJTVBVUkUgMTUsIDEzLCAyMTAsIDYzClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIlPpbGVjdGlvbm5lciBsYSBkZXN0aW5hdGlvbiIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CglDT05UUk9MIAkJIiIsIDEwMSwgIlN0YXRpYyIsIFNTX1NJTVBMRXxTU19OT1BSRUZJWCwgMywgNiwgMTYyLCAxMAoJQ09OVFJPTCAJCSImRG9zc2llcjoiICwgLTEsICJTdGF0aWMiLCBTU19MRUZUTk9XT1JEV1JBUHxXU19HUk9VUCwgMywgMTgsIDYwLCAxMAoJRURJVFRFWFQJCTIwMSwgMywgMjksIDEzNCwgMTIsIEVTX0FVVE9IU0NST0xMCglERUZQVVNIQlVUVE9OCQkiT0siICwgMSwgMTU4LCA2LCA0NywgMTQKCVBVU0hCVVRUT04JCSJBbm51bGVyIiAsIDIsIDE1OCwgMjMsIDQ3LCAxNAoJUFVTSEJVVFRPTgkJIlBhJnJjb3VyaXIuLi4iICwgMjU0LCAxNTgsIDQzLCA0NywgMTQKfQoKU1RSSU5HVEFCTEUKewoJSURTX0ZPTlRfU0VMX0RMR19OQU1FCSJBcHBsaXF1ZXIgbGVzIHLpZ2xhZ2VzIGRlcyBmb250ZXMiCglJRFNfRk9OVF9TRUxfRVJST1IJIkVycmV1ciBkYW5zIGxhIHPpbGVjdGlvbiBkZSBsYSBub3V2ZWxsZSBmb250ZS4iCn0K