LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiogqSAyMDEzIE1pY3JvY2hpcCBUZWNobm9sb2d5IEluYy4gYW5kIGl0cyBzdWJzaWRpYXJpZXMuDQoqIFlvdSBtYXkgdXNlIHRoaXMgc29mdHdhcmUgYW5kIGFueSBkZXJpdmF0aXZlcyBleGNsdXNpdmVseSB3aXRoDQoqIE1pY3JvY2hpcCBwcm9kdWN0cy4NCiogVEhJUyBTT0ZUV0FSRSBJUyBTVVBQTElFRCBCWSBNSUNST0NISVAgIkFTIElTIi4NCiogTk8gV0FSUkFOVElFUywgV0hFVEhFUiBFWFBSRVNTLCBJTVBMSUVEIE9SIFNUQVRVVE9SWSwgQVBQTFkgVE8gVEhJUyBTT0ZUV0FSRSwNCiogSU5DTFVESU5HIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLA0KKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SIElUUyBJTlRFUkFDVElPTiBXSVRIIE1JQ1JPQ0hJUA0KKiBQUk9EVUNUUywgQ09NQklOQVRJT04gV0lUSCBBTlkgT1RIRVIgUFJPRFVDVFMsIE9SIFVTRSBJTiBBTlkgQVBQTElDQVRJT04uDQoqIElOIE5PIEVWRU5UIFdJTEwgTUlDUk9DSElQIEJFIExJQUJMRSBGT1IgQU5ZIElORElSRUNULCBTUEVDSUFMLCBQVU5JVElWRSwNCiogSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIExPU1MsIERBTUFHRSwgQ09TVCBPUiBFWFBFTlNFIE9GIEFOWSBLSU5EDQoqIFdIQVRTT0VWRVIgUkVMQVRFRCBUTyBUSEUgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VELCBFVkVOIElGIE1JQ1JPQ0hJUCBIQVMNCiogQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPUiBUSEUgREFNQUdFUyBBUkUgRk9SRVNFRUFCTEUuDQoqIFRPIFRIRSBGVUxMRVNUIEVYVEVOVCBBTExPV0VEIEJZIExBVywgTUlDUk9DSElQJ1MgVE9UQUwgTElBQklMSVRZIE9OIEFMTA0KKiBDTEFJTVMgSU4gQU5ZIFdBWSBSRUxBVEVEIFRPIFRISVMgU09GVFdBUkUgV0lMTCBOT1QgRVhDRUVEIFRIRSBBTU9VTlQgT0YNCiogRkVFUywgSUYgQU5ZLCBUSEFUIFlPVSBIQVZFIFBBSUQgRElSRUNUTFkgVE8gTUlDUk9DSElQIEZPUiBUSElTIFNPRlRXQVJFLg0KKiBNSUNST0NISVAgUFJPVklERVMgVEhJUyBTT0ZUV0FSRSBDT05ESVRJT05BTExZIFVQT04gWU9VUiBBQ0NFUFRBTkNFDQoqIE9GIFRIRVNFIFRFUk1TLg0KKi8NCg0KLyoqIEBkZWZncm91cCBwd20gcHdtX2Nfd3JhcHBlcg0KICogIEB7DQogKi8NCi8qKiBAZmlsZSBwd21fY193cmFwcGVyLmNwcA0KIFxicmllZiB0aGUgcHdtIGNvbXBvbmVudCBDIHdyYXBwZXIgICANCiBUaGlzIHByb2dyYW0gaXMgZGVzaWduZWQgdG8gYWxsb3cgdGhlIG90aGVyIEMgcHJvZ3JhbXMgdG8gYmUgYWJsZSB0byB1c2UgdGhpcyBjb21wb25lbnQNCg0KIFRoZXJlIGFyZSBlbnRyeSBwb2ludHMgZm9yIGFsbCBDIHdyYXBwZXIgQVBJIGltcGxlbWVudGF0aW9uDQoNCjxiPlBsYXRmb3JtOjwvYj4gVGhpcyBpcyBBUkMtYmFzZWQgY29tcG9uZW50IA0KDQo8Yj5Ub29sc2V0OjwvYj4gTWV0YXdhcmUgSURFKDguNS4xKQ0KPGI+UmVmZXJlbmNlOjwvYj4gc21zY19yZXVzYWJsZV9md19yZXF1aXJlbWVudC5kb2MgKi8NCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqICBTTVNDIHZlcnNpb24gY29udHJvbCBpbmZvcm1hdGlvbiAoUGVyZm9yY2UpOg0KICoNCiAqICBGSUxFOiAgICAgJEZpbGU6IC8vZGVwb3RfcGNzL0ZXRW5nL1JlbGVhc2UvcHJvamVjdHMvQ0VDMTMwMl9QTElCX0NMSUIvcmVsZWFzZTUvU291cmNlL2h3X2Jsa3MvY29tbW9uL2luY2x1ZGUvcGxhdGZvcm0uaCAkDQogKiAgUkVWSVNJT046ICRSZXZpc2lvbjogIzEgJA0KICogIERBVEVUSU1FOiAkRGF0ZVRpbWU6IDIwMTYvMDQvMDggMTA6MTg6MjggJA0KICogIEFVVEhPUjogICAkQXV0aG9yOiBwcmFtYW5zICQNCiAqDQogKiAgUmV2aXNpb24gaGlzdG9yeSAobGF0ZXN0IGZpcnN0KToNCiAqICAgICAgI3h4DQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqLw0KDQojaWZuZGVmIF9QTEFURk9STV9IXw0KI2RlZmluZSBfUExBVEZPUk1fSF8NCiNpbmNsdWRlIDxzdGRpbnQuaD4NCg0KLyogRW5hYmxlIGFueSBvbmUgb2YgdGhlIGJlbG93IGZsYWcgd2hpY2ggZW5hYmxlcyBlaXRoZXIgQWdncmVnYXRlZCBvciBEaXNhZ2dyZWdhdGVkIEludGVycnVwdHMgKi8NCiNkZWZpbmUgRElTQUdHUkVHQVRFRF9JTlBUX0RFRklORUQgCQkxDQovLyNkZWZpbmUgQUdHUkVHQVRFRF9JTlBUX0RFRklORUQJCQkxDQoNCg0KLyogUGxhdGZvcm0gQ29uZmlndXJhdGlvbiBQcmVQcm9jZXNzb3IgQ29uZGl0aW9ucyAqLw0KI2RlZmluZSBUT09MS0VJTCAgICAxDQojZGVmaW5lIFRPT0xQQyAgICAgIDINCiNkZWZpbmUgVE9PTE1XCQkzDQojZGVmaW5lIFRPT0xNREsJCTQNCg0KI2RlZmluZSBQQ0xJTlQgICAgICA5ICAgLy9hZGRlZCB0byBzYXRpc2Z5IFBDIExpbnQncyBuZWVkIGZvciBhIHZhbHVlIGhlcmUNCg0KI2lmZGVmIF9fQ0NfQVJNICAgICAgICAgLy8gS2VpbCBBUk0gTURLDQojZGVmaW5lIFRPT0xTRVQgVE9PTE1ESw0KI2VuZGlmDQoNCiNpZiAwDQojaWZkZWYgX1dJTjMyICAgICAgICAgICAvL2Fsd2F5cyBkZWZpbmVkIGJ5IHZpc3VhbCBjKysNCiNkZWZpbmUgVE9PTFNFVCBUT09MUEMNCiNlbmRpZg0KDQojaWZkZWYgX19XSU4zMl9fICAgICAgICAvL2Fsd2F5cyBkZWZpbmVkIGJ5IGJvcmxhbmQNCiNkZWZpbmUgVE9PTFNFVCBUT09MUEMNCiNlbmRpZg0KI2VuZGlmDQoNCg0KI2lmZGVmIF9BUkMNCiNkZWZpbmUgVE9PTFNFVCBUT09MTVcgICAgLy8gQVJDIE1ldGF3YXJlDQojZW5kaWYNCg0KI2lmbmRlZiBUT09MU0VUDQovLyNlcnJvciAiRVJST1I6IGNmZy5oIFRPT0xTRVQgbm90IGRlZmluZWQhIg0KI2VuZGlmDQoNCiNpZiBUT09MU0VUID09IFRPT0xNREsNCiNkZWZpbmUgX0tFSUxfQVJNXyAgMSAgIC8qIE1ha2UgMSBmb3IgS2VpbCBNREsgQ29tcGlsZXIgICAgICovDQojZGVmaW5lIF9LRUlMXyAgMCAgICAgICAvKiBNYWtlIDEgZm9yIEtlaWwgQ29tcGlsZXIgICAgICovDQojZGVmaW5lIF9QQ18gICAgMCAgIA0KI2RlZmluZSBfQVJDX0NPUkVfCTANCiNlbmRpZg0KDQojaWYgVE9PTFNFVCA9PSBUT09MS0VJTA0KI2RlZmluZSBfS0VJTF9BUk1fICAwDQojZGVmaW5lIF9LRUlMXyAgMSAgIC8qIE1ha2UgMSBmb3IgS2VpbCBDb21waWxlciAgICAgKi8NCiNkZWZpbmUgX1BDXyAgICAwICAgDQojZGVmaW5lIF9BUkNfQ09SRV8JMA0KI2VuZGlmDQoNCiNpZiBUT09MU0VUID09IFRPT0xQQw0KI2RlZmluZSBfS0VJTF9BUk1fICAwDQojZGVmaW5lIF9LRUlMXyAgMCAgIA0KI2RlZmluZSBfUENfICAgIDEgCS8qIE1ha2UgMSBmb3IgUEMgRW52aXJvbm1lbnQgICAgKi8NCiNkZWZpbmUgX0FSQ19DT1JFXwkwDQojZW5kaWYNCg0KI2lmIFRPT0xTRVQgPT0gVE9PTE1XDQojZGVmaW5lIF9LRUlMX0FSTV8gIDANCiNkZWZpbmUgX0tFSUxfCTANCiNkZWZpbmUgX1BDXwkwDQojZGVmaW5lIF9BUkNfQ09SRV8JMQ0KI2VuZGlmDQoNCi8qIFNob3J0IGZvcm0gZm9yIFN0YW5kYXJkIERhdGEgVHlwZXMgKi8NCnR5cGVkZWYgdW5zaWduZWQgY2hhciAgICAgICAgICAgVUlOVDg7DQp0eXBlZGVmIHVuc2lnbmVkIHNob3J0ICAgICAgICAgIFVJTlQxNjsNCnR5cGVkZWYgdW5zaWduZWQgbG9uZyAgICAgICAgICAgVUlOVDMyOw0KDQp0eXBlZGVmIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgIFJFRzg7DQoNCnR5cGVkZWYgdW5zaWduZWQgY2hhciAgICAgICAgICAgQllURTsNCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgICAgICAgICAgV09SRDsNCnR5cGVkZWYgdW5zaWduZWQgbG9uZyAgICAgICAgICAgRFdPUkQ7DQoNCnR5cGVkZWYgdW5zaWduZWQgY2hhciAgICAgICAgICAgVUNIQVI7DQp0eXBlZGVmIHVuc2lnbmVkIHNob3J0ICAgICAgICAgIFVTSE9SVDsNCnR5cGVkZWYgdW5zaWduZWQgbG9uZyAgICAgICAgICAgVUxPTkc7DQoNCnR5cGVkZWYgdW5zaWduZWQgY2hhciAgICAgICAgICAgQk9PTDsNCnR5cGVkZWYgdW5zaWduZWQgaW50ICAgICAgICAgICAgVUlOVDsNCg0KLyogc2lnbmVkIHR5cGVzICovDQp0eXBlZGVmIHNpZ25lZCBjaGFyICAgICAgICAgICAgIElOVDg7DQp0eXBlZGVmIHNpZ25lZCBzaG9ydCAgICAgICAgICAgIElOVDE2Ow0KdHlwZWRlZiBzaWduZWQgbG9uZyAgICAgICAgICAgICBJTlQzMjsNCg0KdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgICAgICBWT0lEOw0KDQp0eXBlZGVmIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgICAgICBWVUlOVDg7DQp0eXBlZGVmIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBWVUlOVDE2Ow0KdHlwZWRlZiB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGludCAgVlVJTlQzMjsNCg0KLyogdW5pb24gdHlwZXMgKi8NCnR5cGVkZWYgdW5pb24gX0JJVFNfOA0Kew0KICAgIFVJTlQ4IGJ5dGU7DQogICAgc3RydWN0DQogICAgew0KCQlVSU5UOCBiaXQwOiAxOw0KCQlVSU5UOCBiaXQxOiAxOw0KCQlVSU5UOCBiaXQyOiAxOw0KCQlVSU5UOCBiaXQzOiAxOw0KCQlVSU5UOCBiaXQ0OiAxOw0KCQlVSU5UOCBiaXQ1OiAxOw0KCQlVSU5UOCBiaXQ2OiAxOw0KCQlVSU5UOCBiaXQ3OiAxOw0KICAgfWJpdDsNCn1CSVRTXzg7DQoNCg0KLyogTUFDUk9TIEZPUiBQbGF0Zm9ybSBQb3J0YWJpbGl0eSAqLw0KDQovKiBtYWNybyBmb3IgZGVmaW5pbmcgTU1DUiByZWdpc3RlciAqLw0KLyogYWRkIE1NQ1JBUlJBWSgpICYgRVhURVJOTU1DUkFSUkFZKCkgKi8NCiNpZglfS0VJTF8NCiNkZWZpbmUgTU1DUihuYW1lLGFkZHJlc3MpICAgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciB4ZGF0YSBuYW1lIF9hdF8gYWRkcmVzcw0KI2RlZmluZSBNTUNSQVJSQVkobmFtZSxsZW5ndGgsYWRkcmVzcykgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgeGRhdGEgbmFtZVtsZW5ndGhdIF9hdF8gYWRkcmVzcw0KI2RlZmluZSBNTUNSVFlQRShuYW1lLGR0eXBlLGFkZHJlc3MpIHZvbGF0aWxlIGR0eXBlIHhkYXRhIG5hbWUgX2F0XyBhZGRyZXNzDQojZGVmaW5lIEVYVEVSTk1NQ1IobmFtZSkgICAgICAgIGV4dGVybiB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIHhkYXRhIG5hbWUNCiNkZWZpbmUgRVhURVJOTU1DUkFSUkFZKG5hbWUpICAgZXh0ZXJuIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgeGRhdGEgbmFtZVtdDQojZGVmaW5lIEVYVEVSTk1NQ1JUWVBFKG5hbWUsZHR5cGUpIGV4dGVybiB2b2xhdGlsZSBkdHlwZSB4ZGF0YSBuYW1lDQojZGVmaW5lIFNGUihuYW1lLGFkZHJlc3MpICAgICAgIHNmciBuYW1lID0gYWRkcmVzcw0KI2RlZmluZSBTRlJCSVQobmFtZSxhZGRyZXNzKSAgICBzYml0IG5hbWUgPSBhZGRyZXNzDQojZGVmaW5lIEVYVEVSTlNGUihuYW1lKSANCiNkZWZpbmUgQklUQUREUkVTU1RZUEUobmFtZSkgICAgYml0IG5hbWUNCiNkZWZpbmUgWERBVEEgICAgICAgICAgICAgICAgICAgeGRhdGENCiNkZWZpbmUgQ09ERSAgICAgICAgICAgICAgICAgICAgY29kZQ0KI2RlZmluZSBEQVRBICAgICAgICAgICAgICAgICAgICBkYXRhDQojZGVmaW5lIElEQVRBICAgICAgICAgICAgICAgICAgIGlkYXRhDQojZGVmaW5lIElOVEVSUlVQVCh4KSAgICAgICAgICAgIGludGVycnVwdCB4DQojZGVmaW5lIFNFVF9HTE9CQUxfSU5UUl9FTkFCTEUoKQkoc2ZySUVfRUFiaXQgPSBUUlVFOykNCiNkZWZpbmUgQ0xSX0dMT0JBTF9JTlRSX0VOQUJMRSgpCShzZnJJRV9FQWJpdCA9IEZBTFNFOykNCiNkZWZpbmUgTlVMTFBUUgkJCQkJCShjaGFyICopKDApDQojZGVmaW5lCVBMQVRGT1JNX1RSSU1fT1NDKCkJCQkvLyBUT0RPDQojZGVmaW5lIFBOT1AoKSANCiNkZWZpbmUgRElTQUJMRV9JTlRFUlJVUFRTKCkgc2ZySUVfRUFiaXQ9MA0KI2RlZmluZSBFTkFCTEVfSU5URVJSVVBUUygpIHNmcklFX0VBYml0PTENCiNkZWZpbmUgU0FWRV9ESVNfSU5URVJSVVBUUyh4KSB7IHg9c2ZySUVfRUFiaXQ7IHNmcklFX0VBYml0PTA7IH0NCiNkZWZpbmUgUkVTVE9SRV9JTlRFUlJVUFRTKHgpIHsgc2ZySUVfRUFiaXQ9eDsgfQ0KI2RlZmluZSBBVE9NSUNfQ1BVX1NMRUVQKCkNCiNkZWZpbmUgTlVNX0lSUV9WRUNUT1JTICAgICAxMiAgLy8gRFctODA1MQ0KI2RlZmluZSBJUlFfVkVDVE9SX1NJWkUgICAgIDggDQojZGVmaW5lIFVTRV9JTkxJTkVfUEFUQ0hFUiAgMQ0KI2RlZmluZSBJUlFfVkVDVEFCTEVfSU5fUkFNIDANCiNkZWZpbmUgUExBVF9ST01fSVJRX1ZFQ1RPUl9CQVNFIDB4MDMgIC8vIFJPTSBzdGFydA0KI2RlZmluZSBQTEFUX0lSUV9WRUNUT1JfQkFTRSAweDEwMDMgICAgLy8gUkFNIHN0YXJ0DQojZGVmaW5lIEZVTkNfTkVWRVJfUkVUVVJOUw0KI2RlZmluZSBCRUdJTl9TTUFMTF9EQVRBX0JMT0NLKHgpDQojZGVmaW5lIEVORF9TTUFMTF9EQVRBX0JMT0NLKCkNCnVpbnQzMl90IHNvZnRfbm9ybSh1aW50MzJfdCB2YWwpOw0KI2RlZmluZSBOT1JNKHgpIHNvZnRfbm9ybSh4KQ0KLy8NCiNkZWZpbmUgVVNFX0ZVTkNfUkVQTEFDRU1FTlQgICAgMA0KI2VuZGlmDQoNCiNpZiBfUENfDQojZGVmaW5lIE1NQ1IobmFtZSxhZGRyZXNzKSAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgbmFtZQ0KI2RlZmluZSBNTUNSQVJSQVkobmFtZSxsZW5ndGgsYWRkcmVzcykgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgbmFtZVtsZW5ndGhdDQojZGVmaW5lIE1NQ1JUWVBFKG5hbWUsZHR5cGUsYWRkcmVzcykgdm9sYXRpbGUgZHR5cGUgbmFtZQ0KI2RlZmluZSBFWFRFUk5NTUNSKG5hbWUpICAgICAgICBleHRlcm4gdm9sYXRpbGUgdW5zaWduZWQgY2hhciBuYW1lDQojZGVmaW5lIEVYVEVSTk1NQ1JBUlJBWShuYW1lKSAgIGV4dGVybiB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIG5hbWVbXQ0KI2RlZmluZSBFWFRFUk5NTUNSVFlQRShuYW1lLGR0eXBlKSBleHRlcm4gdm9sYXRpbGUgZHR5cGUgbmFtZQ0KI2RlZmluZSBTRlIobmFtZSxhZGRyZXNzKSAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIG5hbWUNCiNkZWZpbmUgU0ZSQklUKG5hbWUsYWRkcmVzcykgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciBuYW1lDQojZGVmaW5lIEVYVEVSTlNGUihuYW1lKSAgICAgICAgIGV4dGVybgl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIG5hbWUNCiNkZWZpbmUgQklUQUREUkVTU1RZUEUobmFtZSkgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciBuYW1lDQojZGVmaW5lIFhEQVRBDQojZGVmaW5lIENPREUgICAgICAgICAgICAgICAgDQojZGVmaW5lIERBVEENCiNkZWZpbmUgSURBVEENCiNkZWZpbmUgSU5URVJSVVBUKHgpDQojZGVmaW5lIFNFVF9HTE9CQUxfSU5UUl9FTkFCTEUoKQkoc2ZySUVfRUFiaXQgPSBUUlVFOykNCiNkZWZpbmUgQ0xSX0dMT0JBTF9JTlRSX0VOQUJMRSgpCShzZnJJRV9FQWJpdCA9IEZBTFNFOykNCiNkZWZpbmUgTlVMTFBUUgkJCQkJCShjaGFyICopKDApDQojZGVmaW5lCVBMQVRGT1JNX1RSSU1fT1NDKCkJCQkvLyBUT0RPDQojZGVmaW5lIFBOT1AoKSANCiNkZWZpbmUgRElTQUJMRV9JTlRFUlJVUFRTKCkgDQojZGVmaW5lIEVOQUJMRV9JTlRFUlJVUFRTKCkNCiNkZWZpbmUgU0FWRV9ESVNfSU5URVJSVVBUUyh4KSANCiNkZWZpbmUgUkVTVE9SRV9JTlRFUlJVUFRTKHgpIA0KI2RlZmluZSBBVE9NSUNfQ1BVX1NMRUVQKCkNCiNkZWZpbmUgTlVNX0lSUV9WRUNUT1JTICAgICAyNA0KI2RlZmluZSBJUlFfVkVDVE9SX1NJWkUgICAgIDgNCiNkZWZpbmUgVVNFX0lOTElORV9QQVRDSEVSICAxDQojZGVmaW5lIElSUV9WRUNUQUJMRV9JTl9SQU0gMA0KI2RlZmluZSBGVU5DX05FVkVSX1JFVFVSTlMNCiNkZWZpbmUgQkVHSU5fU01BTExfREFUQV9CTE9DSyh4KQ0KI2RlZmluZSBFTkRfU01BTExfREFUQV9CTE9DSygpDQp1aW50MzJfdCBzb2Z0X25vcm0odWludDMyX3QgdmFsKTsNCiNkZWZpbmUgTk9STSh4KSBzb2Z0X25vcm0oeCkNCi8vDQojZGVmaW5lIFVTRV9GVU5DX1JFUExBQ0VNRU5UICAgIDANCiNlbmRpZg0KDQojaWYgX0FSQ19DT1JFXw0KLy8gQVJDIEMgaGFzIG5vIGVxdWl2YWxlbnQgb3BlcmF0b3IgdG8gc3BlY2lmeSBhZGRyZXNzIG9mIGEgdmFyaWFibGUNCi8vIEFSQyBNTUNSJ3MgYXJlIDMyLWJpdCByZWdpc3RlcnMNCiNkZWZpbmUgTU1DUihuYW1lLGFkZHJlc3MpICAgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciBuYW1lDQojZGVmaW5lIE1NQ1JBUlJBWShuYW1lLGxlbmd0aCxhZGRyZXNzKSAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciBuYW1lW2xlbmd0aF0NCiNkZWZpbmUgTU1DUlRZUEUobmFtZSxkdHlwZSxhZGRyZXNzKSB2b2xhdGlsZSBkdHlwZSBuYW1lIA0KI2RlZmluZSBFWFRFUk5NTUNSKG5hbWUpICAgICAgICBleHRlcm4gdm9sYXRpbGUgdW5zaWduZWQgY2hhciBuYW1lDQojZGVmaW5lIEVYVEVSTk1NQ1JBUlJBWShuYW1lKSAgIGV4dGVybiB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIG5hbWVbXQ0KI2RlZmluZSBFWFRFUk5NTUNSVFlQRShuYW1lLGR0eXBlKSBleHRlcm4gdm9sYXRpbGUgZHR5cGUgbmFtZQ0KI2RlZmluZSBTRlIobmFtZSxhZGRyZXNzKSAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgbmFtZSAgICAgICAgDQojZGVmaW5lIFNGUkJJVChuYW1lLGFkZHJlc3MpIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgbmFtZSANCiNkZWZpbmUgRVhURVJOU0ZSKG5hbWUpIGV4dGVybiB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIG5hbWUgDQojZGVmaW5lIEJJVEFERFJFU1NUWVBFKG5hbWUpIA0KI2RlZmluZSBYREFUQQ0KI2RlZmluZSBDT0RFICAgICANCiNkZWZpbmUgREFUQQ0KI2RlZmluZSBJREFUQQ0KI2RlZmluZSBJTlRFUlJVUFQoeCkNCiNkZWZpbmUgU0VUX0dMT0JBTF9JTlRSX0VOQUJMRSgpCShfZW5hYmxlKCkpDQojZGVmaW5lIENMUl9HTE9CQUxfSU5UUl9FTkFCTEUoKQkoX2Rpc2FibGUoKSkNCiNkZWZpbmUgTlVMTFBUUgkJCQkJCShjaGFyICopKDApDQojZGVmaW5lIE5VTExWT0lEUFRSICAgICAgICAgICAgICAgICAodm9pZCAqKSgwKQ0KI2RlZmluZSBOVUxMRlBUUgkJCQkJKHZvaWQgKCopKHZvaWQpKTANCiNkZWZpbmUJUExBVEZPUk1fVFJJTV9PU0MoKQkJCS8vIFRPRE8NCiNkZWZpbmUgUE5PUCgpIF9ub3AoKQ0KI2RlZmluZSBESVNBQkxFX0lOVEVSUlVQVFMoKSBfZGlzYWJsZSgpDQojZGVmaW5lIEVOQUJMRV9JTlRFUlJVUFRTKCkgX2VuYWJsZSgpDQojZGVmaW5lIFNBVkVfRElTX0lOVEVSUlVQVFMoeCkgeyB4PV9scihSRUdfU1RBVFVTMzIpO19mbGFnKHggJiB+KFJFR19TVEFUVVMzMl9FMV9CSVQgfCBSRUdfU1RBVFVTMzJfRTJfQklUKSk7X25vcCgpOyB9DQojZGVmaW5lIFJFU1RPUkVfSU5URVJSVVBUUyh4KSB7IF9mbGFnKChfbHIoUkVHX1NUQVRVUzMyKSB8ICh4ICYgKFJFR19TVEFUVVMzMl9FMV9CSVQgfCBSRUdfU1RBVFVTMzJfRTJfQklUKSkpKTtfbm9wKCk7IH0NCiNkZWZpbmUgQVRPTUlDX0NQVV9TTEVFUCgpIF9mbGFnKDYpO19zbGVlcCgpO19ub3AoKTtfbm9wKCk7DQojZGVmaW5lIE5VTV9JUlFfVkVDVE9SUyAgICAgMjQNCiNkZWZpbmUgSVJRX1ZFQ1RPUl9TSVpFICAgICA4DQojZGVmaW5lIFVTRV9JTkxJTkVfUEFUQ0hFUiAgMA0KI2RlZmluZSBEQ0NNX0NPREVfQUxJQVNfQUREUiAgMHgwMDA2MDAwMA0KI2RlZmluZSBQTEFUX1JPTV9JUlFfVkVDVE9SX0JBU0UgMA0KI2RlZmluZSBQTEFUX0lSUV9WRUNUT1JfQkFTRSAgKERDQ01fQ09ERV9BTElBU19BRERSKQ0KLy8vIHkgI2RlZmluZSBJUlFfVkVDVEFCTEVfSU5fUkFNIDENCiNkZWZpbmUgSVJRX1ZFQ1RBQkxFX0lOX1JBTSAwDQojZGVmaW5lIEZVTkNfTkVWRVJfUkVUVVJOUyAgX0NDKF9ORVZFUl9SRVRVUk5TKQ0KI2RlZmluZSBCRUdJTl9TTUFMTF9EQVRBX0JMT0NLKHgpICAjcHJhZ21hIFB1c2hfc21hbGxfZGF0YSh4KQ0KI2RlZmluZSBFTkRfU01BTExfREFUQV9CTE9DSygpICAjcHJhZ21hIFBvcF9zbWFsbF9kYXRhKCkNCiNkZWZpbmUgTk9STSh4KSBfbm9ybSh4KQ0KDQojZGVmaW5lIElOTElORV9GVU5DVElPTih4KSAjcHJhZ21hIE9uX2lubGluZSh4KQ0KDQovLw0KI2RlZmluZSBVU0VfRlVOQ19SRVBMQUNFTUVOVCAgICAwDQojZW5kaWYNCg0KI2lmIF9LRUlMX0FSTV8NCi8vIEZvciBBUk0gTURLIGNvbXBpbGVyDQovLyBBUk0gTU1DUidzIGFyZSAzMi1iaXQgcmVnaXN0ZXJzDQojZGVmaW5lIE1NQ1IobmFtZSxhZGRyZXNzKSAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgbmFtZQ0KI2RlZmluZSBNTUNSQVJSQVkobmFtZSxsZW5ndGgsYWRkcmVzcykgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgbmFtZVtsZW5ndGhdDQojZGVmaW5lIE1NQ1JUWVBFKG5hbWUsZHR5cGUsYWRkcmVzcykgdm9sYXRpbGUgZHR5cGUgbmFtZSANCiNkZWZpbmUgRVhURVJOTU1DUihuYW1lKSAgICAgICAgZXh0ZXJuIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgbmFtZQ0KI2RlZmluZSBFWFRFUk5NTUNSQVJSQVkobmFtZSkgICBleHRlcm4gdm9sYXRpbGUgdW5zaWduZWQgY2hhciBuYW1lW10NCiNkZWZpbmUgRVhURVJOTU1DUlRZUEUobmFtZSxkdHlwZSkgZXh0ZXJuIHZvbGF0aWxlIGR0eXBlIG5hbWUNCiNkZWZpbmUgU0ZSKG5hbWUsYWRkcmVzcykgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIG5hbWUgICAgICAgIA0KI2RlZmluZSBTRlJCSVQobmFtZSxhZGRyZXNzKSB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIG5hbWUgDQojZGVmaW5lIEVYVEVSTlNGUihuYW1lKSBleHRlcm4gdm9sYXRpbGUgdW5zaWduZWQgY2hhciBuYW1lIA0KI2RlZmluZSBCSVRBRERSRVNTVFlQRShuYW1lKSANCiNkZWZpbmUgWERBVEENCiNkZWZpbmUgQ09ERSAgICAgDQojZGVmaW5lIERBVEENCiNkZWZpbmUgSURBVEENCiNkZWZpbmUgSU5URVJSVVBUKHgpDQojZGVmaW5lIFNFVF9HTE9CQUxfSU5UUl9FTkFCTEUoKQkoX19lbmFibGVfaXJxKCkpDQojZGVmaW5lIENMUl9HTE9CQUxfSU5UUl9FTkFCTEUoKQkoX19kaXNhYmxlX2lycSgpKQ0KI2RlZmluZSBOVUxMUFRSCQkJCQkJKGNoYXIgKikoMCkNCiNkZWZpbmUgTlVMTFZPSURQVFIgICAgICAgICAgICAgICAgICh2b2lkICopKDApDQojZGVmaW5lIE5VTExGUFRSCQkJCQkodm9pZCAoKikodm9pZCkpMA0KI2RlZmluZQlQTEFURk9STV9UUklNX09TQygpCQkJLy8gVE9ETw0KI2RlZmluZSBQTk9QKCkgX19OT1AoKQ0KI2RlZmluZSBESVNBQkxFX0lOVEVSUlVQVFMoKSBfX2Rpc2FibGVfaXJxKCkNCiNkZWZpbmUgRU5BQkxFX0lOVEVSUlVQVFMoKSBfX2VuYWJsZV9pcnEoKQ0KI2RlZmluZSBBVE9NSUNfQ1BVX1NMRUVQKCkgX193ZmkoKTtfX25vcCgpO19fbm9wKCk7DQoNCiNpZiAwIC8qIG5lZWQgZnVydGhlciBlZmZvcnRzIGlmIG5lZWRlZCAqLw0KI2RlZmluZSBTQVZFX0RJU19JTlRFUlJVUFRTKHgpIHsgeD1fbHIoUkVHX1NUQVRVUzMyKTtfZmxhZyh4ICYgfihSRUdfU1RBVFVTMzJfRTFfQklUIHwgUkVHX1NUQVRVUzMyX0UyX0JJVCkpO19ub3AoKTsgfQ0KI2RlZmluZSBSRVNUT1JFX0lOVEVSUlVQVFMoeCkgeyBfZmxhZygoX2xyKFJFR19TVEFUVVMzMikgfCAoeCAmIChSRUdfU1RBVFVTMzJfRTFfQklUIHwgUkVHX1NUQVRVUzMyX0UyX0JJVCkpKSk7X25vcCgpOyB9DQojZGVmaW5lIE5VTV9JUlFfVkVDVE9SUyAgICAgMjQNCiNkZWZpbmUgSVJRX1ZFQ1RPUl9TSVpFICAgICA4DQojZGVmaW5lIFVTRV9JTkxJTkVfUEFUQ0hFUiAgMA0KI2RlZmluZSBEQ0NNX0NPREVfQUxJQVNfQUREUiAgMHgwMDA2MDAwMA0KI2RlZmluZSBQTEFUX1JPTV9JUlFfVkVDVE9SX0JBU0UgMA0KI2RlZmluZSBQTEFUX0lSUV9WRUNUT1JfQkFTRSAgKERDQ01fQ09ERV9BTElBU19BRERSKQ0KLy8vIHkgI2RlZmluZSBJUlFfVkVDVEFCTEVfSU5fUkFNIDENCiNkZWZpbmUgSVJRX1ZFQ1RBQkxFX0lOX1JBTSAwDQojZGVmaW5lIEJFR0lOX1NNQUxMX0RBVEFfQkxPQ0soeCkgICNwcmFnbWEgUHVzaF9zbWFsbF9kYXRhKHgpDQojZGVmaW5lIEVORF9TTUFMTF9EQVRBX0JMT0NLKCkgICNwcmFnbWEgUG9wX3NtYWxsX2RhdGEoKQ0KI2RlZmluZSBJTkxJTkVfRlVOQ1RJT04oeCkgI3ByYWdtYSBPbl9pbmxpbmUoeCkNCiNkZWZpbmUgVVNFX0ZVTkNfUkVQTEFDRU1FTlQgICAgMA0KI2VuZGlmDQoNCiNpZiAwDQojZGVmaW5lIEZVTkNfTkVWRVJfUkVUVVJOUyAgX0NDKF9ORVZFUl9SRVRVUk5TKQ0KI2RlZmluZSBOT1JNKHgpIF9ub3JtKHgpDQojZWxzZQ0KLyogZm9yIEFSTSBNREsgKi8NCiNkZWZpbmUgRlVOQ19ORVZFUl9SRVRVUk5TDQp1aW50MzJfdCBzb2Z0X25vcm0odWludDMyX3QgdmFsKTsNCiNkZWZpbmUgTk9STSh4KSBzb2Z0X25vcm0oeCkNCiNlbmRpZg0KI2VuZGlmDQoNCi8qIEdlbmVyYWwgQ29uc3RhbnRzICovDQojZGVmaW5lIEZBTFNFICAgMHgwMA0KI2RlZmluZSBUUlVFICAgICFGQUxTRQ0KDQojZGVmaW5lIEJJVF9uX01BU0sobikJKDFVIDw8IChuKSkNCiNkZWZpbmUgQklUXzBfTUFTSyAgICAoMTw8MCkNCiNkZWZpbmUgQklUXzFfTUFTSyAgICAoMTw8MSkNCiNkZWZpbmUgQklUXzJfTUFTSyAgICAoMTw8MikNCiNkZWZpbmUgQklUXzNfTUFTSyAgICAoMTw8MykNCiNkZWZpbmUgQklUXzRfTUFTSyAgICAoMTw8NCkNCiNkZWZpbmUgQklUXzVfTUFTSyAgICAoMTw8NSkNCiNkZWZpbmUgQklUXzZfTUFTSyAgICAoMTw8NikNCiNkZWZpbmUgQklUXzdfTUFTSyAgICAoMTw8NykNCiNkZWZpbmUgQklUXzhfTUFTSyAgICAoKFVJTlQxNikxPDw4KQ0KI2RlZmluZSBCSVRfOV9NQVNLICAgICgoVUlOVDE2KTE8PDkpDQojZGVmaW5lIEJJVF8xMF9NQVNLICAgKChVSU5UMTYpMTw8MTApDQojZGVmaW5lIEJJVF8xMV9NQVNLICAgKChVSU5UMTYpMTw8MTEpDQojZGVmaW5lIEJJVF8xMl9NQVNLICAgKChVSU5UMTYpMTw8MTIpDQojZGVmaW5lIEJJVF8xM19NQVNLICAgKChVSU5UMTYpMTw8MTMpDQojZGVmaW5lIEJJVF8xNF9NQVNLICAgKChVSU5UMTYpMTw8MTQpDQojZGVmaW5lIEJJVF8xNV9NQVNLICAgKChVSU5UMTYpMTw8MTUpDQojZGVmaW5lIEJJVF8xNl9NQVNLICAgICAoKFVJTlQzMikxPDwxNikNCiNkZWZpbmUgQklUXzE3X01BU0sgICAgICgoVUlOVDMyKTE8PDE3KQ0KI2RlZmluZSBCSVRfMThfTUFTSyAgICAgKChVSU5UMzIpMTw8MTgpDQojZGVmaW5lIEJJVF8xOV9NQVNLICAgICAoKFVJTlQzMikxPDwxOSkNCiNkZWZpbmUgQklUXzIwX01BU0sgICAgICgoVUlOVDMyKTE8PDIwKQ0KI2RlZmluZSBCSVRfMjFfTUFTSyAgICAgKChVSU5UMzIpMTw8MjEpDQojZGVmaW5lIEJJVF8yMl9NQVNLICAgICAoKFVJTlQzMikxPDwyMikNCiNkZWZpbmUgQklUXzIzX01BU0sgICAgICgoVUlOVDMyKTE8PDIzKQ0KI2RlZmluZSBCSVRfMjRfTUFTSyAgICAgKChVSU5UMzIpMTw8MjQpDQojZGVmaW5lIEJJVF8yNV9NQVNLICAgICAoKFVJTlQzMikxPDwyNSkNCiNkZWZpbmUgQklUXzI2X01BU0sgICAgICgoVUlOVDMyKTE8PDI2KQ0KI2RlZmluZSBCSVRfMjdfTUFTSyAgICAgKChVSU5UMzIpMTw8MjcpDQojZGVmaW5lIEJJVF8yOF9NQVNLICAgICAoKFVJTlQzMikxPDwyOCkNCiNkZWZpbmUgQklUXzI5X01BU0sgICAgICgoVUlOVDMyKTE8PDI5KQ0KI2RlZmluZSBCSVRfMzBfTUFTSyAgICAgKChVSU5UMzIpMTw8MzApDQojZGVmaW5lIEJJVF8zMV9NQVNLICAgICAoKFVJTlQzMikxPDwzMSkNCg0KDQovKiBGb3IgQ0VDIGFwcGxpY2F0aW9uICAqLw0KI2RlZmluZSBPTiAgMQ0KI2RlZmluZSBPRkYgMA0KDQojZW5kaWYgLypfUExBVEZPUk1fSF8qLw0KDQovKiogICBAfQ0KICovDQoNCg==