LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIFRyYWNlIFJlY29yZGVyIExpYnJhcnkgZm9yIFRyYWNlYWx5emVyIHYzLjAuMg0KICogUGVyY2VwaW8gQUIsIHd3dy5wZXJjZXBpby5jb20NCiAqDQogKiB0cmNLZXJuZWxQb3J0LmgNCiAqDQogKiBUaGUga2VybmVsLXNwZWNpZmljIGRlZmluaXRpb25zIGZvciBGcmVlUlRPUy4NCiAqDQogKiBUZXJtcyBvZiBVc2UNCiAqIFRoaXMgc29mdHdhcmUgKHRoZSAiVHJhY2VhbHl6ZXIgUmVjb3JkZXIgTGlicmFyeSIpIGlzIHRoZSBpbnRlbGxlY3R1YWwNCiAqIHByb3BlcnR5IG9mIFBlcmNlcGlvIEFCIGFuZCBtYXkgbm90IGJlIHNvbGQgb3IgaW4gb3RoZXIgd2F5cyBjb21tZXJjaWFsbHkNCiAqIHJlZGlzdHJpYnV0ZWQgd2l0aG91dCBleHBsaWNpdCB3cml0dGVuIHBlcm1pc3Npb24gYnkgUGVyY2VwaW8gQUIuDQogKg0KICogU2VwYXJhdGUgY29uZGl0aW9ucyBhcHBsaWVzIGZvciB0aGUgU0VHR0VSIGJyYW5kZWQgc291cmNlIGNvZGUgaW5jbHVkZWQuDQogKg0KICogVGhlIHJlY29yZGVyIGxpYnJhcnkgaXMgZnJlZSBmb3IgdXNlIHRvZ2V0aGVyIHdpdGggUGVyY2VwaW8gcHJvZHVjdHMuDQogKiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIHJlY29yZGVyIGxpYnJhcnkgaW4gaXRzIG9yaWdpbmFsIGZvcm0sIGJ1dCBwdWJsaWMNCiAqIGRpc3RyaWJ1dGlvbiBvZiBtb2RpZmllZCB2ZXJzaW9ucyByZXF1aXJlIGFwcHJvdmFsIGJ5IFBlcmNlcGlvIEFCLg0KICoNCiAqIERpc2NsYWltZXINCiAqIFRoZSB0cmFjZSB0b29sIGFuZCByZWNvcmRlciBsaWJyYXJ5IGlzIGJlaW5nIGRlbGl2ZXJlZCB0byB5b3UgQVMgSVMgYW5kDQogKiBQZXJjZXBpbyBBQiBtYWtlcyBubyB3YXJyYW50eSBhcyB0byBpdHMgdXNlIG9yIHBlcmZvcm1hbmNlLiBQZXJjZXBpbyBBQiBkb2VzDQogKiBub3QgYW5kIGNhbm5vdCB3YXJyYW50IHRoZSBwZXJmb3JtYW5jZSBvciByZXN1bHRzIHlvdSBtYXkgb2J0YWluIGJ5IHVzaW5nIHRoZQ0KICogc29mdHdhcmUgb3IgZG9jdW1lbnRhdGlvbi4gUGVyY2VwaW8gQUIgbWFrZSBubyB3YXJyYW50aWVzLCBleHByZXNzIG9yDQogKiBpbXBsaWVkLCBhcyB0byBub25pbmZyaW5nZW1lbnQgb2YgdGhpcmQgcGFydHkgcmlnaHRzLCBtZXJjaGFudGFiaWxpdHksIG9yDQogKiBmaXRuZXNzIGZvciBhbnkgcGFydGljdWxhciBwdXJwb3NlLiBJbiBubyBldmVudCB3aWxsIFBlcmNlcGlvIEFCLCBpdHMNCiAqIHRlY2hub2xvZ3kgcGFydG5lcnMsIG9yIGRpc3RyaWJ1dG9ycyBiZSBsaWFibGUgdG8geW91IGZvciBhbnkgY29uc2VxdWVudGlhbCwNCiAqIGluY2lkZW50YWwgb3Igc3BlY2lhbCBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGxvc3QgcHJvZml0cyBvciBsb3N0IHNhdmluZ3MsDQogKiBldmVuIGlmIGEgcmVwcmVzZW50YXRpdmUgb2YgUGVyY2VwaW8gQUIgaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkNCiAqIG9mIHN1Y2ggZGFtYWdlcywgb3IgZm9yIGFueSBjbGFpbSBieSBhbnkgdGhpcmQgcGFydHkuIFNvbWUganVyaXNkaWN0aW9ucyBkbw0KICogbm90IGFsbG93IHRoZSBleGNsdXNpb24gb3IgbGltaXRhdGlvbiBvZiBpbmNpZGVudGFsLCBjb25zZXF1ZW50aWFsIG9yIHNwZWNpYWwNCiAqIGRhbWFnZXMsIG9yIHRoZSBleGNsdXNpb24gb2YgaW1wbGllZCB3YXJyYW50aWVzIG9yIGxpbWl0YXRpb25zIG9uIGhvdyBsb25nIGFuDQogKiBpbXBsaWVkIHdhcnJhbnR5IG1heSBsYXN0LCBzbyB0aGUgYWJvdmUgbGltaXRhdGlvbnMgbWF5IG5vdCBhcHBseSB0byB5b3UuDQogKg0KICogVGFicyBhcmUgdXNlZCBmb3IgaW5kZW50IGluIHRoaXMgZmlsZSAoMSB0YWIgPSA0IHNwYWNlcykNCiAqDQogKiBDb3B5cmlnaHQgUGVyY2VwaW8gQUIsIDIwMTUuDQogKiB3d3cucGVyY2VwaW8uY29tDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KDQoNCiNpZm5kZWYgVFJDX0tFUk5FTF9QT1JUX0gNCiNkZWZpbmUgVFJDX0tFUk5FTF9QT1JUX0gNCg0KI2lmZGVmIF9fY3BsdXNwbHVzDQpleHRlcm4gk0OUIHsNCiNlbmRpZg0KDQojaW5jbHVkZSAiRnJlZVJUT1MuaCIJLyogRGVmaW5lcyBjb25maWdVU0VfVFJBQ0VfRkFDSUxJVFkgKi8NCiNpbmNsdWRlICJ0cmNDb25maWcuaCINCiNpbmNsdWRlICJ0cmNIYXJkd2FyZVBvcnQuaCINCg0KZXh0ZXJuIGludCB1aUluRXZlbnRHcm91cFNldEJpdHNGcm9tSVNSOw0KDQojZGVmaW5lIFVTRV9UUkFDRUFMWVpFUl9SRUNPUkRFUiBjb25maWdVU0VfVFJBQ0VfRkFDSUxJVFkNCg0KI2lmIChVU0VfVFJBQ0VBTFlaRVJfUkVDT1JERVIgPT0gMSkNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIFRyYWNlX0luaXQNCiAqDQogKiBUaGUgbWFpbiBpbml0YWxpemF0aW9uIHJvdXRpbmUgZm9yIHRoZSBlbWJPUy1UcmFjZSByZWNvcmRlci4gQ29uZmlndXJlcyBSVFQsDQogKiBhY3RpdmF0ZXMgdGhlIFBUUkFDRSBpbnN0cnVtZW50YXRpb24gaW4gZW1iT1MgYW5kIHRoZSBUekN0cmwgdGFzay4NCiAqIEFsc28gc2V0cyB1cCB0aGUgZGlhZ25vc3RpYyBVc2VyIEV2ZW50IGNoYW5uZWxzIHVzZWQgYnkgVHpDdHJsIHRhc2suDQogKg0KICogU2V0dGluZ3MgdXNlZCBieSB0aGUgdHJhY2UgcmVjb3JkZXIgYXJlIGZvdW5kIGluIHRoZXNlIGhlYWRlciBmaWxlczoNCiAqICAtIFNFR0dFUl9SVFRfQ29uZi5oOiBzZXR0aW5ncyBmb3IgU0VHR0VSIFJlYWwtVGltZSBUZXJtaW5hbCAoUlRUKSB3aGljaCBpcw0KICogICAgdXNlZCBmb3IgdGhlIHRyYWNlIHN0cmVhbWluZy4NCiAqICAtIHRyY0tlcm5lbFBvcnQuaDogUlRUIHJlbGF0ZWQgc2V0dGluZ3MgZm9yIHRoZSB0cmFjZSBzdHJlYW1pbmcuDQogKiAgLSB0cmNSZWNvcmRlci5oIC0gc2V0dGluZ3MgZm9yIGFsbG9jYXRpb24gb2YgaW50ZXJuYWwgcmVjb3JkZXIgdGFibGVzLg0KICogIC0gdHJjSGFyZHdhcmVQb3J0LmggLSBoYXJkd2FyZS1zcGVjaWZpYyBjb25maWd1cmF0aW9uICh0aW1lc3RhbXBpbmcpLg0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCnZvaWQgVHJhY2VfSW5pdCh2b2lkKTsNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIHZUcmFjZU9uVHJhY2VCZWdpbg0KICoNCiAqIENhbGxlZCBvbiB0cmFjZSBiZWdpbi4NCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQp2b2lkIHZUcmFjZU9uVHJhY2VCZWdpbih2b2lkKTsNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIHZUcmFjZU9uVHJhY2VFbmQNCiAqDQogKiBDYWxsZWQgb24gdHJhY2UgZW5kLg0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCnZvaWQgdlRyYWNlT25UcmFjZUVuZCh2b2lkKTsNCg0KI2luY2x1ZGUgInRyY1JlY29yZGVyLmgiDQoNCi8qIERlZmluZXMgdGhhdCBtdXN0IGJlIHNldCBmb3IgdGhlIHJlY29yZGVyIHRvIHdvcmsgcHJvcGVybHkgKi8NCiNkZWZpbmUgS0VSTkVMX0lEIDB4MUFBMQ0KI2RlZmluZSBUUkFDRV9USUNLX1JBVEVfSFogY29uZmlnVElDS19SQVRFX0haIC8qIERlZmluZWQgaW4gIkZyZWVSVE9TLmgiICovDQojZGVmaW5lIFRSQUNFX0NQVV9DTE9DS19IWiBjb25maWdDUFVfQ0xPQ0tfSFogLyogRGVmaW5lZCBpbiAiRnJlZVJUT1NDb25maWcuaCIgKi8NCg0KI2lmIChUUkNfUkVDT1JERVJfSEFSRFdBUkVfUE9SVCA9PSBUUkNfUE9SVF9BUk1fQ29ydGV4X00pDQoJDQoJLyogVXNlcyBDTVNJUyBBUEkuIE11c3QgYmUgI2luY2x1ZGVkIGluIHRyY0NvbmZpZy5oLiAqLw0KCSNkZWZpbmUgVFJBQ0VfQUxMT0NfQ1JJVElDQUxfU0VDVElPTigpIGludCBfX2lycV9zdGF0dXM7DQoJI2RlZmluZSBUUkFDRV9FTlRFUl9DUklUSUNBTF9TRUNUSU9OKCkge19faXJxX3N0YXR1cyA9IF9fZ2V0X1BSSU1BU0soKTsgX19zZXRfUFJJTUFTSygxKTt9DQoJI2RlZmluZSBUUkFDRV9FWElUX0NSSVRJQ0FMX1NFQ1RJT04oKSB7X19zZXRfUFJJTUFTSyhfX2lycV9zdGF0dXMpO30NCg0KI2VuZGlmDQoNCiNpZiAoKFRSQ19SRUNPUkRFUl9IQVJEV0FSRV9QT1JUID09IFRSQ19QT1JUX0FSTV9DT1JURVhfQTkpIHx8IChUUkNfUkVDT1JERVJfSEFSRFdBUkVfUE9SVCA9PSBUUkNfUE9SVF9SZW5lc2FzX1JYNjAwKSkNCgkjZGVmaW5lIFRSQUNFX0FMTE9DX0NSSVRJQ0FMX1NFQ1RJT04oKSBpbnQgX19pcnFfc3RhdHVzOw0KCSNkZWZpbmUgVFJBQ0VfRU5URVJfQ1JJVElDQUxfU0VDVElPTigpIHtfX2lycV9zdGF0dXMgPSBwb3J0U0VUX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCk7fQ0KCSNkZWZpbmUgVFJBQ0VfRVhJVF9DUklUSUNBTF9TRUNUSU9OKCkge3BvcnRDTEVBUl9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUihfX2lycV9zdGF0dXMpO30NCiNlbmRpZg0KDQojaWZuZGVmIFRSQUNFX0VOVEVSX0NSSVRJQ0FMX1NFQ1RJT04NCgkjZXJyb3IgIlRoaXMgcG9ydCBoYXMgbm8gdmFsaWQgZGVmaW5pdGlvbiBmb3IgY3JpdGljYWwgc2VjdGlvbnMhIFNlZSBodHRwOi8vcGVyY2VwaW8uY29tLzIwMTQvMTAvMjcvaG93LXRvLWRlZmluZS1jcml0aWNhbC1zZWN0aW9ucy1mb3ItdGhlLXJlY29yZGVyLyINCiNlbmRpZg0KDQp2b2lkKiBwcnZUcmFjZUdldEN1cnJlbnRUYXNrSGFuZGxlKHZvaWQpOw0KdWludDMyX3QgcHJ2SXNOZXdUQ0Iodm9pZCogcE5ld1RDQik7DQoNCiNkZWZpbmUgT1NfSVNfU1dJVENIX0ZST01fSU5UX1JFUVVJUkVEKCkgMA0KI2RlZmluZSBUUkFDRV9HRVRfQ1VSUkVOVF9UQVNLKCkgcHJ2VHJhY2VHZXRDdXJyZW50VGFza0hhbmRsZSgpDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLyogS0VSTkVMIFNQRUNJRklDIE9CSkVDVCBDT05GSUdVUkFUSU9OCQkJCQkJCQkJICovDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIFRoZSBldmVudCBjb2RlcyAtIHNob3VsZCBtYXRjaCB0aGUgb2ZmbGluZSBjb25maWcgZmlsZS4NCiAqDQogKiBTb21lIHNlY3Rpb25zIGJlbG93IGFyZSBlbmNvZGVkIHRvIGFsbG93IGZvciBjb25zdHJ1Y3Rpb25zIGxpa2U6DQogKg0KICogdlRyYWNlU3RvcmVLZXJuZWxDYWxsKEVWRU5UR1JPVVBfQ1JFQVRFICsgb2JqZWN0Y2xhc3MsIC4uLg0KICoNCiAqIFRoZSBvYmplY3QgY2xhc3MgSUQgaXMgZ2l2ZW4gYnkgdGhlIHRocmVlIExTQiBiaXRzLCBpbiBzdWNoIGNhc2VzLiBTaW5jZSBlYWNoDQogKiBvYmplY3QgY2xhc3MgaGFzIGEgc2VwYXJhdGUgb2JqZWN0IHByb3BlcnR5IHRhYmxlLCB0aGUgY2xhc3MgSUQgaXMgbmVlZGVkIHRvDQogKiBrbm93IHdoYXQgc2VjdGlvbiBpbiB0aGUgb2JqZWN0IHRhYmxlIHRvIHVzZSBmb3IgZ2V0dGluZyBhbiBvYmplY3QgbmFtZSBmcm9tDQogKiBhbiBvYmplY3QgaGFuZGxlLg0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCg0KI2RlZmluZSBQU0ZfRVZFTlRfTlVMTF9FVkVOVAkJCQkJCQkJMHgwMA0KDQovKiBQU0YgZXZlbnQgY29kZXMgKi8NCiNkZWZpbmUgUFNGX0VWRU5UX1RSQUNFX1NUQVJUCQkJCQkJCQkweDAxDQojZGVmaW5lIFBTRl9FVkVOVF9UU19DT05GSUcJCQkJCQkJCQkweDAyDQojZGVmaW5lIFBTRl9FVkVOVF9PQkpfTkFNRQkJCQkJCQkJCTB4MDMNCiNkZWZpbmUgUFNGX0VWRU5UX1RBU0tfUFJJT1JJVFkJCQkJCQkJCTB4MDQNCiNkZWZpbmUgUFNGX0VWRU5UX1RBU0tfUFJJT19JTkhFUklUCQkJCQkJCTB4MDUNCiNkZWZpbmUgUFNGX0VWRU5UX1RBU0tfUFJJT19ESVNJTkhFUklUCQkJCQkJMHgwNg0KI2RlZmluZSBQU0ZfRVZFTlRfREVGSU5FX0lTUgkJCQkJCQkJMHgwNw0KDQojZGVmaW5lIFBTRl9FVkVOVF9UQVNLX0NSRUFURQkJCQkJCQkJMHgxMA0KI2RlZmluZSBQU0ZfRVZFTlRfUVVFVUVfQ1JFQVRFCQkJCQkJCQkweDExDQojZGVmaW5lIFBTRl9FVkVOVF9TRU1BUEhPUkVfQklOQVJZX0NSRUFURQkJCQkJMHgxMg0KI2RlZmluZSBQU0ZfRVZFTlRfTVVURVhfQ1JFQVRFCQkJCQkJCQkweDEzDQojZGVmaW5lIFBTRl9FVkVOVF9USU1FUl9DUkVBVEUJCQkJCQkJCTB4MTQNCiNkZWZpbmUgUFNGX0VWRU5UX0VWRU5UR1JPVVBfQ1JFQVRFCQkJCQkJCTB4MTUNCiNkZWZpbmUgUFNGX0VWRU5UX1NFTUFQSE9SRV9DT1VOVElOR19DUkVBVEUJCQkJCTB4MTYNCiNkZWZpbmUgUFNGX0VWRU5UX01VVEVYX1JFQ1VSU0lWRV9DUkVBVEUJCQkJCTB4MTcNCg0KI2RlZmluZSBQU0ZfRVZFTlRfVEFTS19ERUxFVEUJCQkJCQkJCTB4MjANCiNkZWZpbmUgUFNGX0VWRU5UX1FVRVVFX0RFTEVURQkJCQkJCQkJMHgyMQ0KI2RlZmluZSBQU0ZfRVZFTlRfU0VNQVBIT1JFX0RFTEVURQkJCQkJCQkweDIyDQojZGVmaW5lIFBTRl9FVkVOVF9NVVRFWF9ERUxFVEUJCQkJCQkJCTB4MjMNCiNkZWZpbmUgUFNGX0VWRU5UX1RJTUVSX0RFTEVURQkJCQkJCQkJMHgyNA0KI2RlZmluZSBQU0ZfRVZFTlRfRVZFTlRHUk9VUF9ERUxFVEUJCQkJCQkJMHgyNQ0KDQojZGVmaW5lIFBTRl9FVkVOVF9UQVNLX1JFQURZCQkJCQkJCQkweDMwDQojZGVmaW5lIFBTRl9FVkVOVF9ORVdfVElNRQkJCQkJCQkJCTB4MzENCiNkZWZpbmUgUFNGX0VWRU5UX05FV19USU1FX1NDSEVEVUxFUl9TVVNQRU5ERUQJCQkJMHgzMg0KI2RlZmluZSBQU0ZfRVZFTlRfSVNSX0JFR0lOCQkJCQkJCQkJMHgzMw0KI2RlZmluZSBQU0ZfRVZFTlRfSVNSX1JFU1VNRQkJCQkJCQkJMHgzNA0KI2RlZmluZSBQU0ZfRVZFTlRfVFNfQkVHSU4JCQkJCQkJCQkweDM1DQojZGVmaW5lIFBTRl9FVkVOVF9UU19SRVNVTUUJCQkJCQkJCQkweDM2DQojZGVmaW5lIFBTRl9FVkVOVF9UQVNLX0FDVElWQVRFCQkJCQkJCQkweDM3DQoNCiNkZWZpbmUgUFNGX0VWRU5UX01BTExPQwkJCQkJCQkJCTB4MzgNCiNkZWZpbmUgUFNGX0VWRU5UX0ZSRUUJCQkJCQkJCQkJMHgzOQ0KDQojZGVmaW5lIFBTRl9FVkVOVF9MT1dQT1dFUl9CRUdJTgkJCQkJCQkweDNBDQojZGVmaW5lIFBTRl9FVkVOVF9MT1dQT1dFUl9FTkQJCQkJCQkJCTB4M0INCg0KI2RlZmluZSBQU0ZfRVZFTlRfSUZFX05FWFQJCQkJCQkJCQkweDNDDQojZGVmaW5lIFBTRl9FVkVOVF9JRkVfRElSRUNUCQkJCQkJCQkweDNEDQoNCiNkZWZpbmUgUFNGX0VWRU5UX1RBU0tfQ1JFQVRFX0ZBSUxFRAkJCQkJCTB4NDANCiNkZWZpbmUgUFNGX0VWRU5UX1FVRVVFX0NSRUFURV9GQUlMRUQJCQkJCQkweDQxDQojZGVmaW5lIFBTRl9FVkVOVF9TRU1BUEhPUkVfQklOQVJZX0NSRUFURV9GQUlMRUQJCQkweDQyDQojZGVmaW5lIFBTRl9FVkVOVF9NVVRFWF9DUkVBVEVfRkFJTEVECQkJCQkJMHg0Mw0KI2RlZmluZSBQU0ZfRVZFTlRfVElNRVJfQ1JFQVRFX0ZBSUxFRAkJCQkJCTB4NDQNCiNkZWZpbmUgUFNGX0VWRU5UX0VWRU5UR1JPVVBfQ1JFQVRFX0ZBSUxFRAkJCQkJMHg0NQ0KI2RlZmluZSBQU0ZfRVZFTlRfU0VNQVBIT1JFX0NPVU5USU5HX0NSRUFURV9GQUlMRUQJCQkweDQ2DQojZGVmaW5lIFBTRl9FVkVOVF9NVVRFWF9SRUNVUlNJVkVfQ1JFQVRFX0ZBSUxFRAkJCQkweDQ3DQoNCiNkZWZpbmUgUFNGX0VWRU5UX1RJTUVSX0RFTEVURV9GQUlMRUQJCQkJCQkweDQ4DQoNCiNkZWZpbmUgUFNGX0VWRU5UX1FVRVVFX1NFTkQJCQkJCQkJCTB4NTANCiNkZWZpbmUgUFNGX0VWRU5UX1NFTUFQSE9SRV9HSVZFCQkJCQkJCTB4NTENCiNkZWZpbmUgUFNGX0VWRU5UX01VVEVYX0dJVkUJCQkJCQkJCTB4NTINCg0KI2RlZmluZSBQU0ZfRVZFTlRfUVVFVUVfU0VORF9GQUlMRUQJCQkJCQkJMHg1Mw0KI2RlZmluZSBQU0ZfRVZFTlRfU0VNQVBIT1JFX0dJVkVfRkFJTEVECQkJCQkJMHg1NA0KI2RlZmluZSBQU0ZfRVZFTlRfTVVURVhfR0lWRV9GQUlMRUQJCQkJCQkJMHg1NQ0KDQojZGVmaW5lIFBTRl9FVkVOVF9RVUVVRV9TRU5EX0JMT0NLCQkJCQkJCTB4NTYNCiNkZWZpbmUgUFNGX0VWRU5UX1NFTUFQSE9SRV9HSVZFX0JMT0NLCQkJCQkJMHg1Nw0KI2RlZmluZSBQU0ZfRVZFTlRfTVVURVhfR0lWRV9CTE9DSwkJCQkJCQkweDU4DQoNCiNkZWZpbmUgUFNGX0VWRU5UX1FVRVVFX1NFTkRfRlJPTUlTUgkJCQkJCTB4NTkNCiNkZWZpbmUgUFNGX0VWRU5UX1NFTUFQSE9SRV9HSVZFX0ZST01JU1IJCQkJCTB4NUENCg0KI2RlZmluZSBQU0ZfRVZFTlRfUVVFVUVfU0VORF9GUk9NSVNSX0ZBSUxFRAkJCQkJMHg1Qw0KI2RlZmluZSBQU0ZfRVZFTlRfU0VNQVBIT1JFX0dJVkVfRlJPTUlTUl9GQUlMRUQJCQkJMHg1RA0KDQojZGVmaW5lIFBTRl9FVkVOVF9RVUVVRV9SRUNFSVZFCQkJCQkJCQkweDYwDQojZGVmaW5lIFBTRl9FVkVOVF9TRU1BUEhPUkVfVEFLRQkJCQkJCQkweDYxDQojZGVmaW5lIFBTRl9FVkVOVF9NVVRFWF9UQUtFCQkJCQkJCQkweDYyDQoNCiNkZWZpbmUgUFNGX0VWRU5UX1FVRVVFX1JFQ0VJVkVfRkFJTEVECQkJCQkJMHg2Mw0KI2RlZmluZSBQU0ZfRVZFTlRfU0VNQVBIT1JFX1RBS0VfRkFJTEVECQkJCQkJMHg2NA0KI2RlZmluZSBQU0ZfRVZFTlRfTVVURVhfVEFLRV9GQUlMRUQJCQkJCQkJMHg2NQ0KDQojZGVmaW5lIFBTRl9FVkVOVF9RVUVVRV9SRUNFSVZFX0JMT0NLCQkJCQkJMHg2Ng0KI2RlZmluZSBQU0ZfRVZFTlRfU0VNQVBIT1JFX1RBS0VfQkxPQ0sJCQkJCQkweDY3DQojZGVmaW5lIFBTRl9FVkVOVF9NVVRFWF9UQUtFX0JMT0NLCQkJCQkJCTB4NjgNCg0KI2RlZmluZSBQU0ZfRVZFTlRfUVVFVUVfUkVDRUlWRV9GUk9NSVNSCQkJCQkJMHg2OQ0KI2RlZmluZSBQU0ZfRVZFTlRfU0VNQVBIT1JFX1RBS0VfRlJPTUlTUgkJCQkJMHg2QQ0KDQojZGVmaW5lIFBTRl9FVkVOVF9RVUVVRV9SRUNFSVZFX0ZST01JU1JfRkFJTEVECQkJCTB4NkMNCiNkZWZpbmUgUFNGX0VWRU5UX1NFTUFQSE9SRV9UQUtFX0ZST01JU1JfRkFJTEVECQkJCTB4NkQNCg0KI2RlZmluZSBQU0ZfRVZFTlRfUVVFVUVfUEVFSwkJCQkJCQkJMHg3MA0KI2RlZmluZSBQU0ZfRVZFTlRfU0VNQVBIT1JFX1BFRUsJCQkJCQkJMHg3MQkvKiBXaWxsIG5ldmVyIGJlIHVzZWQgKi8NCiNkZWZpbmUgUFNGX0VWRU5UX01VVEVYX1BFRUsJCQkJCQkJCTB4NzIJLyogV2lsbCBuZXZlciBiZSB1c2VkICovDQoNCiNkZWZpbmUgUFNGX0VWRU5UX1FVRVVFX1BFRUtfRkFJTEVECQkJCQkJCTB4NzMNCiNkZWZpbmUgUFNGX0VWRU5UX1NFTUFQSE9SRV9QRUVLX0ZBSUxFRAkJCQkJCTB4NzQJLyogV2lsbCBuZXZlciBiZSB1c2VkICovDQojZGVmaW5lIFBTRl9FVkVOVF9NVVRFWF9QRUVLX0ZBSUxFRAkJCQkJCQkweDc1CS8qIFdpbGwgbmV2ZXIgYmUgdXNlZCAqLw0KDQojZGVmaW5lIFBTRl9FVkVOVF9RVUVVRV9QRUVLX0JMT0NLCQkJCQkJCTB4NzYNCiNkZWZpbmUgUFNGX0VWRU5UX1NFTUFQSE9SRV9QRUVLX0JMT0NLCQkJCQkJMHg3NwkvKiBXaWxsIG5ldmVyIGJlIHVzZWQgKi8NCiNkZWZpbmUgUFNGX0VWRU5UX01VVEVYX1BFRUtfQkxPQ0sJCQkJCQkJMHg3OAkvKiBXaWxsIG5ldmVyIGJlIHVzZWQgKi8NCg0KI2RlZmluZSBQU0ZfRVZFTlRfVEFTS19ERUxBWV9VTlRJTAkJCQkJCQkweDc5DQojZGVmaW5lIFBTRl9FVkVOVF9UQVNLX0RFTEFZCQkJCQkJCQkweDdBDQojZGVmaW5lIFBTRl9FVkVOVF9UQVNLX1NVU1BFTkQJCQkJCQkJCTB4N0INCiNkZWZpbmUgUFNGX0VWRU5UX1RBU0tfUkVTVU1FCQkJCQkJCQkweDdDDQojZGVmaW5lIFBTRl9FVkVOVF9UQVNLX1JFU1VNRV9GUk9NSVNSCQkJCQkJMHg3RA0KDQojZGVmaW5lIFBTRl9FVkVOVF9USU1FUl9QRU5ERlVOQ0NBTEwJCQkJCQkweDgwDQojZGVmaW5lIFBTRl9FVkVOVF9USU1FUl9QRU5ERlVOQ0NBTExfRlJPTUlTUgkJCQkweDgxDQojZGVmaW5lIFBTRl9FVkVOVF9USU1FUl9QRU5ERlVOQ0NBTExfRkFJTEVECQkJCQkweDgyDQojZGVmaW5lIFBTRl9FVkVOVF9USU1FUl9QRU5ERlVOQ0NBTExfRlJPTUlTUl9GQUlMRUQJCQkweDgzDQoNCiNkZWZpbmUgUFNGX0VWRU5UX1VTRVJfRVZFTlQJCQkJCQkJCTB4OTANCg0KI2RlZmluZSBQU0ZfRVZFTlRfVElNRVJfU1RBUlQJCQkJCQkJCTB4QTANCiNkZWZpbmUgUFNGX0VWRU5UX1RJTUVSX1JFU0VUCQkJCQkJCQkweEExDQojZGVmaW5lIFBTRl9FVkVOVF9USU1FUl9TVE9QCQkJCQkJCQkweEEyDQojZGVmaW5lIFBTRl9FVkVOVF9USU1FUl9DSEFOR0VQRVJJT0QJCQkJCQkweEEzDQojZGVmaW5lIFBTRl9FVkVOVF9USU1FUl9TVEFSVF9GUk9NSVNSCQkJCQkJMHhBNA0KI2RlZmluZSBQU0ZfRVZFTlRfVElNRVJfUkVTRVRfRlJPTUlTUgkJCQkJCTB4QTUNCiNkZWZpbmUgUFNGX0VWRU5UX1RJTUVSX1NUT1BfRlJPTUlTUgkJCQkJCTB4QTYNCiNkZWZpbmUgUFNGX0VWRU5UX1RJTUVSX0NIQU5HRVBFUklPRF9GUk9NSVNSCQkJCTB4QTcNCiNkZWZpbmUgUFNGX0VWRU5UX1RJTUVSX1NUQVJUX0ZBSUxFRAkJCQkJCTB4QTgNCiNkZWZpbmUgUFNGX0VWRU5UX1RJTUVSX1JFU0VUX0ZBSUxFRAkJCQkJCTB4QTkNCiNkZWZpbmUgUFNGX0VWRU5UX1RJTUVSX1NUT1BfRkFJTEVECQkJCQkJCTB4QUENCiNkZWZpbmUgUFNGX0VWRU5UX1RJTUVSX0NIQU5HRVBFUklPRF9GQUlMRUQJCQkJCTB4QUINCiNkZWZpbmUgUFNGX0VWRU5UX1RJTUVSX1NUQVJUX0ZST01JU1JfRkFJTEVECQkJCTB4QUMNCiNkZWZpbmUgUFNGX0VWRU5UX1RJTUVSX1JFU0VUX0ZST01JU1JfRkFJTEVECQkJCTB4QUQNCiNkZWZpbmUgUFNGX0VWRU5UX1RJTUVSX1NUT1BfRlJPTUlTUl9GQUlMRUQJCQkJCTB4QUUNCiNkZWZpbmUgUFNGX0VWRU5UX1RJTUVSX0NIQU5HRVBFUklPRF9GUk9NSVNSX0ZBSUxFRAkJCTB4QUYNCg0KI2RlZmluZSBQU0ZfRVZFTlRfRVZFTlRHUk9VUF9TWU5DCQkJCQkJCTB4QjANCiNkZWZpbmUgUFNGX0VWRU5UX0VWRU5UR1JPVVBfV0FJVEJJVFMJCQkJCQkweEIxDQojZGVmaW5lIFBTRl9FVkVOVF9FVkVOVEdST1VQX0NMRUFSQklUUwkJCQkJCTB4QjINCiNkZWZpbmUgUFNGX0VWRU5UX0VWRU5UR1JPVVBfQ0xFQVJCSVRTX0ZST01JU1IJCQkJMHhCMw0KI2RlZmluZSBQU0ZfRVZFTlRfRVZFTlRHUk9VUF9TRVRCSVRTCQkJCQkJMHhCNA0KI2RlZmluZSBQU0ZfRVZFTlRfRVZFTlRHUk9VUF9TRVRCSVRTX0ZST01JU1IJCQkJMHhCNQ0KI2RlZmluZSBQU0ZfRVZFTlRfRVZFTlRHUk9VUF9TWU5DX0JMT0NLCQkJCQkJMHhCNg0KI2RlZmluZSBQU0ZfRVZFTlRfRVZFTlRHUk9VUF9XQUlUQklUU19CTE9DSwkJCQkJMHhCNw0KI2RlZmluZSBQU0ZfRVZFTlRfRVZFTlRHUk9VUF9TWU5DX0ZBSUxFRAkJCQkJMHhCOA0KI2RlZmluZSBQU0ZfRVZFTlRfRVZFTlRHUk9VUF9XQUlUQklUU19GQUlMRUQJCQkJMHhCOQ0KDQojZGVmaW5lIFBTRl9FVkVOVF9RVUVVRV9TRU5EX0ZST05UCQkJCQkJCTB4QzANCiNkZWZpbmUgUFNGX0VWRU5UX1FVRVVFX1NFTkRfRlJPTlRfRkFJTEVECQkJCQkweEMxDQojZGVmaW5lIFBTRl9FVkVOVF9RVUVVRV9TRU5EX0ZST05UX0JMT0NLCQkJCQkweEMyDQojZGVmaW5lIFBTRl9FVkVOVF9RVUVVRV9TRU5EX0ZST05UX0ZST01JU1IJCQkJCTB4QzMNCiNkZWZpbmUgUFNGX0VWRU5UX1FVRVVFX1NFTkRfRlJPTlRfRlJPTUlTUl9GQUlMRUQJCQkweEM0DQojZGVmaW5lIFBTRl9FVkVOVF9NVVRFWF9HSVZFX1JFQ1VSU0lWRQkJCQkJCTB4QzUNCiNkZWZpbmUgUFNGX0VWRU5UX01VVEVYX0dJVkVfUkVDVVJTSVZFX0ZBSUxFRAkJCQkweEM2DQojZGVmaW5lIFBTRl9FVkVOVF9NVVRFWF9UQUtFX1JFQ1VSU0lWRQkJCQkJCTB4QzcNCiNkZWZpbmUgUFNGX0VWRU5UX01VVEVYX1RBS0VfUkVDVVJTSVZFX0ZBSUxFRAkJCQkweEM4DQoNCiNkZWZpbmUgUFNGX0VWRU5UX1RBU0tfTk9USUZZCQkJCQkJCQkweEM5DQojZGVmaW5lIFBTRl9FVkVOVF9UQVNLX05PVElGWV9UQUtFCQkJCQkJCTB4Q0ENCiNkZWZpbmUgUFNGX0VWRU5UX1RBU0tfTk9USUZZX1RBS0VfQkxPQ0sJCQkJCTB4Q0INCiNkZWZpbmUgUFNGX0VWRU5UX1RBU0tfTk9USUZZX1RBS0VfRkFJTEVECQkJCQkweENDDQojZGVmaW5lIFBTRl9FVkVOVF9UQVNLX05PVElGWV9XQUlUCQkJCQkJCTB4Q0QNCiNkZWZpbmUgUFNGX0VWRU5UX1RBU0tfTk9USUZZX1dBSVRfQkxPQ0sJCQkJCTB4Q0UNCiNkZWZpbmUgUFNGX0VWRU5UX1RBU0tfTk9USUZZX1dBSVRfRkFJTEVECQkJCQkweENGDQojZGVmaW5lIFBTRl9FVkVOVF9UQVNLX05PVElGWV9GUk9NX0lTUgkJCQkJCTB4RDANCiNkZWZpbmUgUFNGX0VWRU5UX1RBU0tfTk9USUZZX0dJVkVfRlJPTV9JU1IJCQkJCTB4RDENCg0KI2RlZmluZSBUUkFDRV9HRVRfT1NfVElDS1MoKSAodWlUcmFjZVRpY2tDb3VudCkNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi8qIEtFUk5FTCBTUEVDSUZJQyBEQVRBIEFORCBGVU5DVElPTlMgTkVFREVEIFRPIFBST1ZJREUgVEhFCQkJCSovDQovKiBGVU5DVElPTkFMSVRZIFJFUVVFU1RFRCBCWSBUSEUgVFJBQ0UgUkVDT1JERVIJCQkJCQkqLw0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCg0KI2lmIChjb25maWdVU0VfVElNRVJTID09IDEpDQojdW5kZWYgSU5DTFVERV94VGltZXJHZXRUaW1lckRhZW1vblRhc2tIYW5kbGUNCiNkZWZpbmUgSU5DTFVERV94VGltZXJHZXRUaW1lckRhZW1vblRhc2tIYW5kbGUgMQ0KI2VuZGlmDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQovKiBLRVJORUwgU1BFQ0lGSUMgTUFDUk9TIFVTRUQgQlkgVEhFIFRSQUNFIFJFQ09SREVSCQkJCQkqLw0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCg0KI2RlZmluZSBUUkFDRV9NQUxMT0Moc2l6ZSkgcHZQb3J0TWFsbG9jKHNpemUpDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQovKiBLRVJORUwgU1BFQ0lGSUMgV1JBUFBFUlMgVEhBVCBTSE9VTEQgQkUgQ0FMTEVEIEJZIFRIRSBLRVJORUwJCSAqLw0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCg0KI2lmIChjb25maWdVU0VfVElDS0xFU1NfSURMRSAhPSAwKQ0KDQojdW5kZWYgdHJhY2VMT1dfUE9XRVJfSURMRV9CRUdJTg0KI2RlZmluZSB0cmFjZUxPV19QT1dFUl9JRExFX0JFR0lOKCkgXA0KCXsgXA0KCQl2VHJhY2VTdG9yZUV2ZW50MChQU0ZfRVZFTlRfTE9XUE9XRVJfQkVHSU4pOyBcDQoJfQ0KDQojdW5kZWYgdHJhY2VMT1dfUE9XRVJfSURMRV9FTkQNCiNkZWZpbmUgdHJhY2VMT1dfUE9XRVJfSURMRV9FTkQoKSBcDQoJeyBcDQoJCXZUcmFjZVN0b3JlRXZlbnQwKFBTRl9FVkVOVF9MT1dQT1dFUl9FTkQpOyBcDQoJfQ0KDQojZW5kaWYNCg0KLyogQSBtYWNybyB0aGF0IHdpbGwgdXBkYXRlIHRoZSB0aWNrIGNvdW50IHdoZW4gcmV0dXJuaW5nIGZyb20gdGlja2xlc3MgaWRsZSAqLw0KI3VuZGVmIHRyYWNlSU5DUkVBU0VfVElDS19DT1VOVA0KLyogTm90ZTogVGhpcyBjYW4gaGFuZGxlIHRpbWUgYWRqdXN0bWVudHMgb2YgbWF4IDJeMzIgdGlja3MsIGkuZS4sIDM1IHNlY29uZHMgYXQgMTIwIE1Iei4gVGh1cywgdGljay1sZXNzIGlkbGUgcGVyaW9kcyBsb25nZXIgdGhhbiAyXjMyIHRpY2tzIHdpbGwgYXBwZWFyICJjb21wcmVzc2VkIiBvbiB0aGUgdGltZSBsaW5lLiovDQojZGVmaW5lIHRyYWNlSU5DUkVBU0VfVElDS19DT1VOVCggeENvdW50ICkgDQoNCi8qIENhbGxlZCBmb3IgZWFjaCB0YXNrIHRoYXQgYmVjb21lcyByZWFkeSAqLw0KI3VuZGVmIHRyYWNlTU9WRURfVEFTS19UT19SRUFEWV9TVEFURQ0KI2RlZmluZSB0cmFjZU1PVkVEX1RBU0tfVE9fUkVBRFlfU1RBVEUoIHB4VENCICkgXA0KCXZUcmFjZVN0b3JlRXZlbnQxKFBTRl9FVkVOVF9UQVNLX1JFQURZLCAodWludDMyX3QpcHhUQ0IpOw0KDQovKiBDYWxsZWQgb24gZWFjaCBPUyB0aWNrLiBXaWxsIGNhbGwgdWlQb3J0R2V0VGltZXN0YW1wIHRvIG1ha2Ugc3VyZSBpdCBpcyBjYWxsZWQgYXQgbGVhc3Qgb25jZSBldmVyeSBPUyB0aWNrLiAqLw0KI3VuZGVmIHRyYWNlVEFTS19JTkNSRU1FTlRfVElDSw0KI2lmIChUUkNfRlJFRVJUT1NfVkVSU0lPTiA9PSBUUkNfRlJFRVJUT1NfVkVSU0lPTl83XzNfT1JfN180KQ0KDQojZGVmaW5lIHRyYWNlVEFTS19JTkNSRU1FTlRfVElDSyggeFRpY2tDb3VudCApIFwNCglpZiAodXhTY2hlZHVsZXJTdXNwZW5kZWQgPT0gKCB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFICkgcGRUUlVFIHx8IHV4TWlzc2VkVGlja3MgPT0gMCkgeyBleHRlcm4gdWludDMyX3QgdWlUcmFjZVRpY2tDb3VudDsgdWlUcmFjZVRpY2tDb3VudCsrOyB9IFwNCglpZiAodXhTY2hlZHVsZXJTdXNwZW5kZWQgPT0gKCB1bnNpZ25lZCBwb3J0QkFTRV9UWVBFICkgcGRGQUxTRSkgeyB2VHJhY2VTdG9yZUV2ZW50MShQU0ZfRVZFTlRfTkVXX1RJTUUsICh4VGlja0NvdW50ICsgMSkpOyB9DQoNCiNlbHNlDQoNCiNkZWZpbmUgdHJhY2VUQVNLX0lOQ1JFTUVOVF9USUNLKCB4VGlja0NvdW50ICkgXA0KCWlmICh1eFNjaGVkdWxlclN1c3BlbmRlZCA9PSAoIHVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgKSBwZFRSVUUgfHwgdXhQZW5kZWRUaWNrcyA9PSAwKSB7IGV4dGVybiB1aW50MzJfdCB1aVRyYWNlVGlja0NvdW50OyB1aVRyYWNlVGlja0NvdW50Kys7IH0gXA0KCWlmICh1eFNjaGVkdWxlclN1c3BlbmRlZCA9PSAoIHVuc2lnbmVkIHBvcnRCQVNFX1RZUEUgKSBwZEZBTFNFKSB7IHZUcmFjZVN0b3JlRXZlbnQxKFBTRl9FVkVOVF9ORVdfVElNRSwgKHhUaWNrQ291bnQgKyAxKSk7IH0NCg0KI2VuZGlmDQoNCi8qIENhbGxlZCBvbiBlYWNoIHRhc2stc3dpdGNoICovDQojdW5kZWYgdHJhY2VUQVNLX1NXSVRDSEVEX0lODQojZGVmaW5lIHRyYWNlVEFTS19TV0lUQ0hFRF9JTigpIFwNCglpZiAocHJ2SXNOZXdUQ0IocHhDdXJyZW50VENCKSkgXA0KCXsgXA0KCQl2VHJhY2VTdG9yZUV2ZW50MihQU0ZfRVZFTlRfVEFTS19BQ1RJVkFURSwgKHVpbnQzMl90KXB4Q3VycmVudFRDQiwgcHhDdXJyZW50VENCLT51eFByaW9yaXR5KTsgXA0KCX0NCg0KLyogQ2FsbGVkIG9uIHZUYXNrU3VzcGVuZCAqLw0KI3VuZGVmIHRyYWNlVEFTS19TVVNQRU5EDQojZGVmaW5lIHRyYWNlVEFTS19TVVNQRU5EKCBweFRhc2tUb1N1c3BlbmQgKSBcDQoJdlRyYWNlU3RvcmVFdmVudDEoUFNGX0VWRU5UX1RBU0tfU1VTUEVORCwgKHVpbnQzMl90KXB4VGFza1RvU3VzcGVuZCk7DQoNCi8qIENhbGxlZCBvbiB2VGFza0RlbGF5IC0gbm90ZSB0aGUgdXNlIG9mIEZyZWVSVE9TIHZhcmlhYmxlIHhUaWNrc1RvRGVsYXkgKi8NCiN1bmRlZiB0cmFjZVRBU0tfREVMQVkNCiNkZWZpbmUgdHJhY2VUQVNLX0RFTEFZKCkgXA0KCXZUcmFjZVN0b3JlRXZlbnQxKFBTRl9FVkVOVF9UQVNLX0RFTEFZLCB4VGlja3NUb0RlbGF5KTsNCg0KLyogQ2FsbGVkIG9uIHZUYXNrRGVsYXlVbnRpbCAtIG5vdGUgdGhlIHVzZSBvZiBGcmVlUlRPUyB2YXJpYWJsZSB4VGltZVRvV2FrZSAqLw0KI3VuZGVmIHRyYWNlVEFTS19ERUxBWV9VTlRJTA0KI2RlZmluZSB0cmFjZVRBU0tfREVMQVlfVU5USUwoKSBcDQoJdlRyYWNlU3RvcmVFdmVudDEoUFNGX0VWRU5UX1RBU0tfREVMQVlfVU5USUwsIHhUaW1lVG9XYWtlKTsNCg0KLyogQ2FsbGVkIG9uIHZUYXNrRGVsZXRlICovDQojdW5kZWYgdHJhY2VUQVNLX0RFTEVURQ0KI2RlZmluZSB0cmFjZVRBU0tfREVMRVRFKCBweFRhc2tUb0RlbGV0ZSApIFwNCgl2VHJhY2VTdG9yZUV2ZW50MihQU0ZfRVZFTlRfVEFTS19ERUxFVEUsICh1aW50MzJfdClweFRhc2tUb0RlbGV0ZSwgKHB4VGFza1RvRGVsZXRlICE9IE5VTEwpID8gKHB4VGFza1RvRGVsZXRlLT51eFByaW9yaXR5KSA6IDApOw0KDQovKiBDYWxsZWQgb24gdlF1ZXVlRGVsZXRlICovDQojdW5kZWYgdHJhY2VRVUVVRV9ERUxFVEUNCiNkZWZpbmUgdHJhY2VRVUVVRV9ERUxFVEUoIHB4UXVldWUgKSBcDQoJc3dpdGNoIChweFF1ZXVlLT51Y1F1ZXVlVHlwZSkgXA0KCXsgXA0KCQljYXNlIHF1ZXVlUVVFVUVfVFlQRV9CQVNFOiBcDQoJCQl2VHJhY2VTdG9yZUV2ZW50MihQU0ZfRVZFTlRfUVVFVUVfREVMRVRFLCAodWludDMyX3QpcHhRdWV1ZSwgKHB4UXVldWUgIT0gTlVMTCkgPyAocHhRdWV1ZS0+dXhNZXNzYWdlc1dhaXRpbmcpIDogMCk7IFwNCgkJCWJyZWFrOyBcDQoJCWNhc2UgcXVldWVRVUVVRV9UWVBFX01VVEVYOiBcDQoJCWNhc2UgcXVldWVRVUVVRV9UWVBFX1JFQ1VSU0lWRV9NVVRFWDogXA0KCQkJdlRyYWNlU3RvcmVFdmVudDIoUFNGX0VWRU5UX01VVEVYX0RFTEVURSwgKHVpbnQzMl90KXB4UXVldWUsIChweFF1ZXVlICE9IE5VTEwpID8gKHB4UXVldWUtPnV4TWVzc2FnZXNXYWl0aW5nKSA6IDApOyBcDQoJCQlicmVhazsgXA0KCQljYXNlIHF1ZXVlUVVFVUVfVFlQRV9DT1VOVElOR19TRU1BUEhPUkU6IFwNCgkJY2FzZSBxdWV1ZVFVRVVFX1RZUEVfQklOQVJZX1NFTUFQSE9SRTogXA0KCQkJdlRyYWNlU3RvcmVFdmVudDIoUFNGX0VWRU5UX1NFTUFQSE9SRV9ERUxFVEUsICh1aW50MzJfdClweFF1ZXVlLCAocHhRdWV1ZSAhPSBOVUxMKSA/IChweFF1ZXVlLT51eE1lc3NhZ2VzV2FpdGluZykgOiAwKTsgXA0KCQkJYnJlYWs7IFwNCgl9DQoNCi8qIENhbGxlZCBvbiB2VGFza0NyZWF0ZSAqLw0KI3VuZGVmIHRyYWNlVEFTS19DUkVBVEUNCiNkZWZpbmUgdHJhY2VUQVNLX0NSRUFURShweE5ld1RDQikgXA0KCWlmIChweE5ld1RDQiAhPSBOVUxMKSBcDQoJeyBcDQoJCXZUcmFjZVNhdmVTeW1ib2wocHhOZXdUQ0IsIChjb25zdCBjaGFyKilwY05hbWUpOyBcDQoJCXZUcmFjZVNhdmVPYmplY3REYXRhKHB4TmV3VENCLCB1eFByaW9yaXR5KTsgXA0KCQl2VHJhY2VTdG9yZVN0cmluZ0V2ZW50KDEsIFBTRl9FVkVOVF9PQkpfTkFNRSwgcGNOYW1lLCBweE5ld1RDQik7IFwNCgkJdlRyYWNlU3RvcmVFdmVudDIoUFNGX0VWRU5UX1RBU0tfQ1JFQVRFLCAodWludDMyX3QpcHhOZXdUQ0IsIHV4UHJpb3JpdHkpOyBcDQoJfQ0KDQovKiBDYWxsZWQgaW4gdlRhc2tDcmVhdGUsIGlmIGl0IGZhaWxzICh0eXBpY2FsbHkgaWYgdGhlIHN0YWNrIGNhbiBub3QgYmUgYWxsb2NhdGVkKSAqLw0KI3VuZGVmIHRyYWNlVEFTS19DUkVBVEVfRkFJTEVEDQojZGVmaW5lIHRyYWNlVEFTS19DUkVBVEVfRkFJTEVEKCkgXA0KCXZUcmFjZVN0b3JlRXZlbnQwKFBTRl9FVkVOVF9UQVNLX0NSRUFURV9GQUlMRUQpOw0KDQovKiBDYWxsZWQgaW4geFF1ZXVlQ3JlYXRlLCBhbmQgdGhlcmVieSBmb3IgYWxsIG90aGVyIG9iamVjdCBiYXNlZCBvbiBxdWV1ZXMsIHN1Y2ggYXMgc2VtYXBob3Jlcy4gKi8NCiN1bmRlZiB0cmFjZVFVRVVFX0NSRUFURQ0KI2RlZmluZSB0cmFjZVFVRVVFX0NSRUFURSggcHhOZXdRdWV1ZSApXA0KCXN3aXRjaCAocHhOZXdRdWV1ZS0+dWNRdWV1ZVR5cGUpIFwNCgl7IFwNCgkJY2FzZSBxdWV1ZVFVRVVFX1RZUEVfQkFTRTogXA0KCQkJdlRyYWNlU3RvcmVFdmVudDIoUFNGX0VWRU5UX1FVRVVFX0NSRUFURSwgKHVpbnQzMl90KXB4TmV3UXVldWUsIHB4TmV3UXVldWUtPnV4TGVuZ3RoKTsgXA0KCQkJYnJlYWs7IFwNCgkJY2FzZSBxdWV1ZVFVRVVFX1RZUEVfQklOQVJZX1NFTUFQSE9SRTogXA0KCQkJdlRyYWNlU3RvcmVFdmVudDEoUFNGX0VWRU5UX1NFTUFQSE9SRV9CSU5BUllfQ1JFQVRFLCAodWludDMyX3QpcHhOZXdRdWV1ZSk7IFwNCgkJCWJyZWFrOyBcDQoJfQ0KDQovKiBDYWxsZWQgaW4geFF1ZXVlQ3JlYXRlLCBpZiB0aGUgcXVldWUgY3JlYXRpb24gZmFpbHMgKi8NCiN1bmRlZiB0cmFjZVFVRVVFX0NSRUFURV9GQUlMRUQNCiNkZWZpbmUgdHJhY2VRVUVVRV9DUkVBVEVfRkFJTEVEKCBxdWV1ZVR5cGUgKSBcDQoJc3dpdGNoIChxdWV1ZVR5cGUpIFwNCgl7IFwNCgkJY2FzZSBxdWV1ZVFVRVVFX1RZUEVfQkFTRTogXA0KCQkJdlRyYWNlU3RvcmVFdmVudDAoUFNGX0VWRU5UX1FVRVVFX0NSRUFURV9GQUlMRUQpOyBcDQoJCQlicmVhazsgXA0KCQljYXNlIHF1ZXVlUVVFVUVfVFlQRV9CSU5BUllfU0VNQVBIT1JFOiBcDQoJCQl2VHJhY2VTdG9yZUV2ZW50MChQU0ZfRVZFTlRfU0VNQVBIT1JFX0JJTkFSWV9DUkVBVEVfRkFJTEVEKTsgXA0KCQkJYnJlYWs7IFwNCgl9DQoNCi8qIENhbGxlZCBpbiB4UXVldWVDcmVhdGVDb3VudGluZ1NlbWFwaG9yZSwgaWYgdGhlIHF1ZXVlIGNyZWF0aW9uIGZhaWxzICovDQojdW5kZWYgdHJhY2VDUkVBVEVfQ09VTlRJTkdfU0VNQVBIT1JFDQojaWYgVFJDX0ZSRUVSVE9TX1ZFUlNJT04gPT0gVFJDX0ZSRUVSVE9TX1ZFUlNJT05fOF8wX09SX0xBVEVSDQojZGVmaW5lIHRyYWNlQ1JFQVRFX0NPVU5USU5HX1NFTUFQSE9SRSgpIFwNCgl2VHJhY2VTdG9yZUV2ZW50MihQU0ZfRVZFTlRfU0VNQVBIT1JFX0NPVU5USU5HX0NSRUFURSwgKHVpbnQzMl90KXhIYW5kbGUsICgoUXVldWVfdCAqKSB4SGFuZGxlKS0+dXhNZXNzYWdlc1dhaXRpbmcpOw0KI2Vsc2UNCiNkZWZpbmUgdHJhY2VDUkVBVEVfQ09VTlRJTkdfU0VNQVBIT1JFKCkgXA0KCXZUcmFjZVN0b3JlRXZlbnQyKFBTRl9FVkVOVF9TRU1BUEhPUkVfQ09VTlRJTkdfQ1JFQVRFLCAodWludDMyX3QpcHhIYW5kbGUsIHB4SGFuZGxlLT51eE1lc3NhZ2VzV2FpdGluZyk7DQojZW5kaWYNCg0KI3VuZGVmIHRyYWNlQ1JFQVRFX0NPVU5USU5HX1NFTUFQSE9SRV9GQUlMRUQNCiNkZWZpbmUgdHJhY2VDUkVBVEVfQ09VTlRJTkdfU0VNQVBIT1JFX0ZBSUxFRCgpIFwNCgl2VHJhY2VTdG9yZUV2ZW50MChQU0ZfRVZFTlRfU0VNQVBIT1JFX0NPVU5USU5HX0NSRUFURV9GQUlMRUQpOw0KDQovKiBDYWxsZWQgaW4geFF1ZXVlQ3JlYXRlTXV0ZXgsIGFuZCB0aGVyZWJ5IGFsc28gZnJvbSB4U2VtYXBob3JlQ3JlYXRlTXV0ZXggYW5kIHhTZW1hcGhvcmVDcmVhdGVSZWN1cnNpdmVNdXRleCAqLw0KI3VuZGVmIHRyYWNlQ1JFQVRFX01VVEVYDQojZGVmaW5lIHRyYWNlQ1JFQVRFX01VVEVYKCBweE5ld1F1ZXVlICkgXA0KCXN3aXRjaCAodWNRdWV1ZVR5cGUpIFwNCgl7IFwNCgkJY2FzZSBxdWV1ZVFVRVVFX1RZUEVfTVVURVg6IFwNCgkJCXZUcmFjZVN0b3JlRXZlbnQxKFBTRl9FVkVOVF9NVVRFWF9DUkVBVEUsICh1aW50MzJfdClweE5ld1F1ZXVlKTsgXA0KCQkJYnJlYWs7IFwNCgkJY2FzZSBxdWV1ZVFVRVVFX1RZUEVfUkVDVVJTSVZFX01VVEVYOiBcDQoJCQl2VHJhY2VTdG9yZUV2ZW50MShQU0ZfRVZFTlRfTVVURVhfUkVDVVJTSVZFX0NSRUFURSwgKHVpbnQzMl90KXB4TmV3UXVldWUpOyBcDQoJCQlicmVhazsgXA0KCX0NCg0KLyogQ2FsbGVkIGluIHhRdWV1ZUNyZWF0ZU11dGV4IHdoZW4gdGhlIG9wZXJhdGlvbiBmYWlscyAod2hlbiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlscykgKi8NCiN1bmRlZiB0cmFjZUNSRUFURV9NVVRFWF9GQUlMRUQNCiNkZWZpbmUgdHJhY2VDUkVBVEVfTVVURVhfRkFJTEVEKCkgXA0KCXN3aXRjaCAodWNRdWV1ZVR5cGUpIFwNCgl7IFwNCgkJY2FzZSBxdWV1ZVFVRVVFX1RZUEVfTVVURVg6IFwNCgkJCXZUcmFjZVN0b3JlRXZlbnQwKFBTRl9FVkVOVF9NVVRFWF9DUkVBVEVfRkFJTEVEKTsgXA0KCQkJYnJlYWs7IFwNCgkJY2FzZSBxdWV1ZVFVRVVFX1RZUEVfUkVDVVJTSVZFX01VVEVYOiBcDQoJCQl2VHJhY2VTdG9yZUV2ZW50MChQU0ZfRVZFTlRfTVVURVhfQ1JFQVRFX0ZBSUxFRCk7IFwNCgkJCWJyZWFrOyBcDQoJfQ0KDQovKiBDYWxsZWQgd2hlbiBhIG1lc3NhZ2UgaXMgc2VudCB0byBhIHF1ZXVlICovCS8qIENTIElTIE5FVyAhICovDQojdW5kZWYgdHJhY2VRVUVVRV9TRU5EDQojZGVmaW5lIHRyYWNlUVVFVUVfU0VORCggcHhRdWV1ZSApIFwNCglzd2l0Y2ggKHB4UXVldWUtPnVjUXVldWVUeXBlKSBcDQoJeyBcDQoJCWNhc2UgcXVldWVRVUVVRV9UWVBFX0JBU0U6IFwNCgkJCXZUcmFjZVN0b3JlRXZlbnQyKHhDb3B5UG9zaXRpb24gPT0gcXVldWVTRU5EX1RPX0JBQ0sgPyBQU0ZfRVZFTlRfUVVFVUVfU0VORCA6IFBTRl9FVkVOVF9RVUVVRV9TRU5EX0ZST05ULCAodWludDMyX3QpcHhRdWV1ZSwgcHhRdWV1ZS0+dXhNZXNzYWdlc1dhaXRpbmcgKyAxKTsgXA0KCQkJYnJlYWs7IFwNCgkJY2FzZSBxdWV1ZVFVRVVFX1RZUEVfQklOQVJZX1NFTUFQSE9SRTogXA0KCQljYXNlIHF1ZXVlUVVFVUVfVFlQRV9DT1VOVElOR19TRU1BUEhPUkU6IFwNCgkJCXZUcmFjZVN0b3JlRXZlbnQyKFBTRl9FVkVOVF9TRU1BUEhPUkVfR0lWRSwgKHVpbnQzMl90KXB4UXVldWUsIHB4UXVldWUtPnV4TWVzc2FnZXNXYWl0aW5nICsgMSk7IFwNCgkJCWJyZWFrOyBcDQoJCWNhc2UgcXVldWVRVUVVRV9UWVBFX01VVEVYOiBcDQoJCWNhc2UgcXVldWVRVUVVRV9UWVBFX1JFQ1VSU0lWRV9NVVRFWDogXA0KCQkJdlRyYWNlU3RvcmVFdmVudDEoUFNGX0VWRU5UX01VVEVYX0dJVkUsICh1aW50MzJfdClweFF1ZXVlKTsgXA0KCQkJYnJlYWs7IFwNCgl9DQoNCi8qIENhbGxlZCB3aGVuIGEgbWVzc2FnZSBmYWlsZWQgdG8gYmUgc2VudCB0byBhIHF1ZXVlICh0aW1lb3V0KSAqLw0KI3VuZGVmIHRyYWNlUVVFVUVfU0VORF9GQUlMRUQNCiNkZWZpbmUgdHJhY2VRVUVVRV9TRU5EX0ZBSUxFRCggcHhRdWV1ZSApIFwNCglzd2l0Y2ggKHB4UXVldWUtPnVjUXVldWVUeXBlKSBcDQoJeyBcDQoJCWNhc2UgcXVldWVRVUVVRV9UWVBFX0JBU0U6IFwNCgkJCXZUcmFjZVN0b3JlRXZlbnQyKHhDb3B5UG9zaXRpb24gPT0gcXVldWVTRU5EX1RPX0JBQ0sgPyBQU0ZfRVZFTlRfUVVFVUVfU0VORF9GQUlMRUQgOiBQU0ZfRVZFTlRfUVVFVUVfU0VORF9GUk9OVF9GQUlMRUQsICh1aW50MzJfdClweFF1ZXVlLCBweFF1ZXVlLT51eE1lc3NhZ2VzV2FpdGluZyk7IFwNCgkJCWJyZWFrOyBcDQoJCWNhc2UgcXVldWVRVUVVRV9UWVBFX0JJTkFSWV9TRU1BUEhPUkU6IFwNCgkJY2FzZSBxdWV1ZVFVRVVFX1RZUEVfQ09VTlRJTkdfU0VNQVBIT1JFOiBcDQoJCQl2VHJhY2VTdG9yZUV2ZW50MihQU0ZfRVZFTlRfU0VNQVBIT1JFX0dJVkVfRkFJTEVELCAodWludDMyX3QpcHhRdWV1ZSwgcHhRdWV1ZS0+dXhNZXNzYWdlc1dhaXRpbmcpOyBcDQoJCQlicmVhazsgXA0KCQljYXNlIHF1ZXVlUVVFVUVfVFlQRV9NVVRFWDogXA0KCQljYXNlIHF1ZXVlUVVFVUVfVFlQRV9SRUNVUlNJVkVfTVVURVg6IFwNCgkJCXZUcmFjZVN0b3JlRXZlbnQxKFBTRl9FVkVOVF9NVVRFWF9HSVZFX0ZBSUxFRCwgKHVpbnQzMl90KXB4UXVldWUpOyBcDQoJCQlicmVhazsgXA0KCX0NCg0KCS8qdHJjS0VSTkVMX0hPT0tTX0tFUk5FTF9TRVJWSUNFKFNFTkQsIEZBSUxFRCwgVU5VU0VELCBweFF1ZXVlKTsqLw0KDQovKiBDYWxsZWQgd2hlbiB0aGUgdGFzayBpcyBibG9ja2VkIGR1ZSB0byBhIHNlbmQgb3BlcmF0aW9uIG9uIGEgZnVsbCBxdWV1ZSAqLw0KI3VuZGVmIHRyYWNlQkxPQ0tJTkdfT05fUVVFVUVfU0VORA0KI2RlZmluZSB0cmFjZUJMT0NLSU5HX09OX1FVRVVFX1NFTkQoIHB4UXVldWUgKSBcDQoJc3dpdGNoIChweFF1ZXVlLT51Y1F1ZXVlVHlwZSkgXA0KCXsgXA0KCQljYXNlIHF1ZXVlUVVFVUVfVFlQRV9CQVNFOiBcDQoJCQl2VHJhY2VTdG9yZUV2ZW50Mih4Q29weVBvc2l0aW9uID09IHF1ZXVlU0VORF9UT19CQUNLID8gUFNGX0VWRU5UX1FVRVVFX1NFTkRfQkxPQ0sgOiBQU0ZfRVZFTlRfUVVFVUVfU0VORF9GUk9OVF9CTE9DSywgKHVpbnQzMl90KXB4UXVldWUsIHB4UXVldWUtPnV4TWVzc2FnZXNXYWl0aW5nKTsgXA0KCQkJYnJlYWs7IFwNCgkJY2FzZSBxdWV1ZVFVRVVFX1RZUEVfQklOQVJZX1NFTUFQSE9SRTogXA0KCQljYXNlIHF1ZXVlUVVFVUVfVFlQRV9DT1VOVElOR19TRU1BUEhPUkU6IFwNCgkJCXZUcmFjZVN0b3JlRXZlbnQyKFBTRl9FVkVOVF9TRU1BUEhPUkVfR0lWRV9CTE9DSywgKHVpbnQzMl90KXB4UXVldWUsIHB4UXVldWUtPnV4TWVzc2FnZXNXYWl0aW5nKTsgXA0KCQkJYnJlYWs7IFwNCgkJY2FzZSBxdWV1ZVFVRVVFX1RZUEVfTVVURVg6IFwNCgkJY2FzZSBxdWV1ZVFVRVVFX1RZUEVfUkVDVVJTSVZFX01VVEVYOiBcDQoJCQl2VHJhY2VTdG9yZUV2ZW50MShQU0ZfRVZFTlRfTVVURVhfR0lWRV9CTE9DSywgKHVpbnQzMl90KXB4UXVldWUpOyBcDQoJCQlicmVhazsgXA0KCX0NCg0KLyogQ2FsbGVkIGZvciBSZWN1cnNpdmUgTXV0ZXggKi8NCiN1bmRlZiB0cmFjZUdJVkVfTVVURVhfUkVDVVJTSVZFDQojZGVmaW5lIHRyYWNlR0lWRV9NVVRFWF9SRUNVUlNJVkUoIHB4TXV0ZXggKSBcDQoJdlRyYWNlU3RvcmVFdmVudDEoUFNGX0VWRU5UX01VVEVYX0dJVkVfUkVDVVJTSVZFLCAodWludDMyX3QpcHhNdXRleCk7DQoNCi8qIENhbGxlZCBmb3IgUmVjdXJzaXZlIE11dGV4ICovDQojdW5kZWYgdHJhY2VHSVZFX01VVEVYX1JFQ1VSU0lWRV9GQUlMRUQNCiNkZWZpbmUgdHJhY2VHSVZFX01VVEVYX1JFQ1VSU0lWRV9GQUlMRUQoIHB4TXV0ZXggKSBcDQoJdlRyYWNlU3RvcmVFdmVudDEoUFNGX0VWRU5UX01VVEVYX0dJVkVfUkVDVVJTSVZFX0ZBSUxFRCwgKHVpbnQzMl90KXB4TXV0ZXgpOw0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQovKiBIYWNrIHRvIG1ha2Ugc3VyZSB4UXVldWVHaXZlRnJvbUlTUiBhbHNvIGhhcyBhIHhDb3B5UG9zaXRpb24gcGFyYW1ldGVyICovDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQovKiBIZWxwZXJzIG5lZWRlZCB0byBjb3JyZWN0bHkgZXhwYW5kIG5hbWVzICovDQojZGVmaW5lIFRaX19DQVQyKGEsYikgYSAjIyBiDQojZGVmaW5lIFRaX19DQVQoYSxiKSBUWl9fQ0FUMihhLCBiKQ0KDQovKiBFeHBhbmRzIG5hbWUgaWYgdGhpcyBoZWFkZXIgaXMgaW5jbHVkZWQuLi4gdXhRdWV1ZVR5cGUgbXVzdCBiZSBhIG1hY3JvIHRoYXQgb25seSBleGlzdHMgaW4gcXVldWUuYyBvciB3aGF0ZXZlciwgYW5kIGl0IG11c3QgZXhwYW5kIHRvIG5vdGhpbmcgb3IgdG8gc29tZXRoaW5nIHRoYXQncyB2YWxpZCBpbiBpZGVudGlmaWVycyAqLw0KI2RlZmluZSB4UXVldWVHaXZlRnJvbUlTUihhLGIpIFRaX19DQVQoeFF1ZXVlR2l2ZUZyb21JU1JfXywgdXhRdWV1ZVR5cGUpIChhLGIpDQoNCi8qIElmIGluIHF1ZXVlLmMsIHRoZSAidXhRdWV1ZVR5cGUiIG1hY3JvIGV4cGFuZHMgdG8gInBjSGVhZCIuIHF1ZXVlU0VORF9UT19CQUNLIGlzIHRoZSB2YWx1ZSB3ZSBuZWVkIHRvIHNlbmQgaW4gKi8NCiNkZWZpbmUgeFF1ZXVlR2l2ZUZyb21JU1JfX3BjSGVhZChfX2EsIF9fYikgTXlXcmFwcGVyKF9fYSwgX19iLCBjb25zdCBCYXNlVHlwZV90IHhDb3B5UG9zaXRpb24pOyBcDQpCYXNlVHlwZV90IHhRdWV1ZUdpdmVGcm9tSVNSKF9fYSwgX19iKSB7IHJldHVybiBNeVdyYXBwZXIoeFF1ZXVlLCBweEhpZ2hlclByaW9yaXR5VGFza1dva2VuLCBxdWV1ZVNFTkRfVE9fQkFDSyk7IH0gXA0KQmFzZVR5cGVfdCBNeVdyYXBwZXIoX19hLCBfX2IsIGNvbnN0IEJhc2VUeXBlX3QgeENvcHlQb3NpdGlvbikNCg0KLyogSWYgbm90IGluIHF1ZXVlLmMsICJ1eFF1ZXVlVHlwZSIgaXNuJ3QgZXhwYW5kZWQgKi8NCiNkZWZpbmUgeFF1ZXVlR2l2ZUZyb21JU1JfX3V4UXVldWVUeXBlKF9fYSwgX19iKSB4UXVldWVHaXZlRnJvbUlTUihfX2EsX19iKQ0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQovKiBFbmQgb2YgeFF1ZXVlR2l2ZUZyb21JU1IgaGFjayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQoNCi8qIENhbGxlZCB3aGVuIGEgbWVzc2FnZSBpcyBzZW50IGZyb20gaW50ZXJydXB0IGNvbnRleHQsIGUuZy4sIHVzaW5nIHhRdWV1ZVNlbmRGcm9tSVNSICovDQojdW5kZWYgdHJhY2VRVUVVRV9TRU5EX0ZST01fSVNSDQojZGVmaW5lIHRyYWNlUVVFVUVfU0VORF9GUk9NX0lTUiggcHhRdWV1ZSApIFwNCglzd2l0Y2ggKHB4UXVldWUtPnVjUXVldWVUeXBlKSBcDQoJeyBcDQoJCWNhc2UgcXVldWVRVUVVRV9UWVBFX0JBU0U6IFwNCgkJCXZUcmFjZVN0b3JlRXZlbnQyKHhDb3B5UG9zaXRpb24gPT0gcXVldWVTRU5EX1RPX0JBQ0sgPyBQU0ZfRVZFTlRfUVVFVUVfU0VORF9GUk9NSVNSIDogUFNGX0VWRU5UX1FVRVVFX1NFTkRfRlJPTlRfRlJPTUlTUiwgKHVpbnQzMl90KXB4UXVldWUsIHB4UXVldWUtPnV4TWVzc2FnZXNXYWl0aW5nICsgMSk7IFwNCgkJCWJyZWFrOyBcDQoJCWNhc2UgcXVldWVRVUVVRV9UWVBFX0JJTkFSWV9TRU1BUEhPUkU6IFwNCgkJY2FzZSBxdWV1ZVFVRVVFX1RZUEVfQ09VTlRJTkdfU0VNQVBIT1JFOiBcDQoJCQl2VHJhY2VTdG9yZUV2ZW50MihQU0ZfRVZFTlRfU0VNQVBIT1JFX0dJVkVfRlJPTUlTUiwgKHVpbnQzMl90KXB4UXVldWUsIHB4UXVldWUtPnV4TWVzc2FnZXNXYWl0aW5nICsgMSk7IFwNCgkJCWJyZWFrOyBcDQoJfQ0KDQovKiBDYWxsZWQgd2hlbiBhIG1lc3NhZ2Ugc2VuZCBmcm9tIGludGVycnVwdCBjb250ZXh0IGZhaWxzIChzaW5jZSB0aGUgcXVldWUgd2FzIGZ1bGwpICovDQojdW5kZWYgdHJhY2VRVUVVRV9TRU5EX0ZST01fSVNSX0ZBSUxFRA0KI2RlZmluZSB0cmFjZVFVRVVFX1NFTkRfRlJPTV9JU1JfRkFJTEVEKCBweFF1ZXVlICkgXA0KCXN3aXRjaCAocHhRdWV1ZS0+dWNRdWV1ZVR5cGUpIFwNCgl7IFwNCgkJY2FzZSBxdWV1ZVFVRVVFX1RZUEVfQkFTRTogXA0KCQkJdlRyYWNlU3RvcmVFdmVudDIoeENvcHlQb3NpdGlvbiA9PSBxdWV1ZVNFTkRfVE9fQkFDSyA/IFBTRl9FVkVOVF9RVUVVRV9TRU5EX0ZST01JU1JfRkFJTEVEIDogUFNGX0VWRU5UX1FVRVVFX1NFTkRfRlJPTlRfRlJPTUlTUl9GQUlMRUQsICh1aW50MzJfdClweFF1ZXVlLCBweFF1ZXVlLT51eE1lc3NhZ2VzV2FpdGluZyk7IFwNCgkJCWJyZWFrOyBcDQoJCWNhc2UgcXVldWVRVUVVRV9UWVBFX0JJTkFSWV9TRU1BUEhPUkU6IFwNCgkJY2FzZSBxdWV1ZVFVRVVFX1RZUEVfQ09VTlRJTkdfU0VNQVBIT1JFOiBcDQoJCQl2VHJhY2VTdG9yZUV2ZW50MihQU0ZfRVZFTlRfU0VNQVBIT1JFX0dJVkVfRlJPTUlTUl9GQUlMRUQsICh1aW50MzJfdClweFF1ZXVlLCBweFF1ZXVlLT51eE1lc3NhZ2VzV2FpdGluZyk7IFwNCgkJCWJyZWFrOyBcDQoJfQ0KDQovKiBDYWxsZWQgd2hlbiBhIG1lc3NhZ2UgaXMgcmVjZWl2ZWQgZnJvbSBhIHF1ZXVlICovDQojdW5kZWYgdHJhY2VRVUVVRV9SRUNFSVZFDQojZGVmaW5lIHRyYWNlUVVFVUVfUkVDRUlWRSggcHhRdWV1ZSApIFwNCglzd2l0Y2ggKHB4UXVldWUtPnVjUXVldWVUeXBlKSBcDQoJeyBcDQoJCWNhc2UgcXVldWVRVUVVRV9UWVBFX0JBU0U6IFwNCgkJCXZUcmFjZVN0b3JlRXZlbnQzKFBTRl9FVkVOVF9RVUVVRV9SRUNFSVZFLCAodWludDMyX3QpcHhRdWV1ZSwgeFRpY2tzVG9XYWl0LCBweFF1ZXVlLT51eE1lc3NhZ2VzV2FpdGluZyAtIDEpOyBcDQoJCQlicmVhazsgXA0KCQljYXNlIHF1ZXVlUVVFVUVfVFlQRV9CSU5BUllfU0VNQVBIT1JFOiBcDQoJCWNhc2UgcXVldWVRVUVVRV9UWVBFX0NPVU5USU5HX1NFTUFQSE9SRTogXA0KCQkJdlRyYWNlU3RvcmVFdmVudDMoUFNGX0VWRU5UX1NFTUFQSE9SRV9UQUtFLCAodWludDMyX3QpcHhRdWV1ZSwgeFRpY2tzVG9XYWl0LCBweFF1ZXVlLT51eE1lc3NhZ2VzV2FpdGluZyAtIDEpOyBcDQoJCQlicmVhazsgXA0KCQljYXNlIHF1ZXVlUVVFVUVfVFlQRV9NVVRFWDogXA0KCQljYXNlIHF1ZXVlUVVFVUVfVFlQRV9SRUNVUlNJVkVfTVVURVg6IFwNCgkJCXZUcmFjZVN0b3JlRXZlbnQyKFBTRl9FVkVOVF9NVVRFWF9UQUtFLCAodWludDMyX3QpcHhRdWV1ZSwgeFRpY2tzVG9XYWl0KTsgXA0KCQkJYnJlYWs7IFwNCgl9DQoNCi8qIENhbGxlZCB3aGVuIGEgcmVjZWl2ZSBvcGVyYXRpb24gb24gYSBxdWV1ZSBmYWlscyAodGltZW91dCkgKi8NCiN1bmRlZiB0cmFjZVFVRVVFX1JFQ0VJVkVfRkFJTEVEDQojZGVmaW5lIHRyYWNlUVVFVUVfUkVDRUlWRV9GQUlMRUQoIHB4UXVldWUgKSBcDQoJc3dpdGNoIChweFF1ZXVlLT51Y1F1ZXVlVHlwZSkgXA0KCXsgXA0KCQljYXNlIHF1ZXVlUVVFVUVfVFlQRV9CQVNFOiBcDQoJCQl2VHJhY2VTdG9yZUV2ZW50Myh4SnVzdFBlZWtpbmcgPT0gcGRGQUxTRSA/IFBTRl9FVkVOVF9RVUVVRV9SRUNFSVZFX0ZBSUxFRCA6IFBTRl9FVkVOVF9RVUVVRV9QRUVLX0ZBSUxFRCwgKHVpbnQzMl90KXB4UXVldWUsIHhUaWNrc1RvV2FpdCwgcHhRdWV1ZS0+dXhNZXNzYWdlc1dhaXRpbmcpOyBcDQoJCQlicmVhazsgXA0KCQljYXNlIHF1ZXVlUVVFVUVfVFlQRV9CSU5BUllfU0VNQVBIT1JFOiBcDQoJCWNhc2UgcXVldWVRVUVVRV9UWVBFX0NPVU5USU5HX1NFTUFQSE9SRTogXA0KCQkJdlRyYWNlU3RvcmVFdmVudDMoeEp1c3RQZWVraW5nID09IHBkRkFMU0UgPyBQU0ZfRVZFTlRfU0VNQVBIT1JFX1RBS0VfRkFJTEVEIDogUFNGX0VWRU5UX1NFTUFQSE9SRV9QRUVLX0ZBSUxFRCwgKHVpbnQzMl90KXB4UXVldWUsIHhUaWNrc1RvV2FpdCwgcHhRdWV1ZS0+dXhNZXNzYWdlc1dhaXRpbmcpOyBcDQoJCQlicmVhazsgXA0KCQljYXNlIHF1ZXVlUVVFVUVfVFlQRV9NVVRFWDogXA0KCQljYXNlIHF1ZXVlUVVFVUVfVFlQRV9SRUNVUlNJVkVfTVVURVg6IFwNCgkJCXZUcmFjZVN0b3JlRXZlbnQyKHhKdXN0UGVla2luZyA9PSBwZEZBTFNFID8gUFNGX0VWRU5UX01VVEVYX1RBS0VfRkFJTEVEIDogUFNGX0VWRU5UX01VVEVYX1BFRUtfRkFJTEVELCAodWludDMyX3QpcHhRdWV1ZSwgeFRpY2tzVG9XYWl0KTsgXA0KCQkJYnJlYWs7IFwNCgl9DQoNCi8qIENhbGxlZCB3aGVuIHRoZSB0YXNrIGlzIGJsb2NrZWQgZHVlIHRvIGEgcmVjZWl2ZSBvcGVyYXRpb24gb24gYW4gZW1wdHkgcXVldWUgKi8NCiN1bmRlZiB0cmFjZUJMT0NLSU5HX09OX1FVRVVFX1JFQ0VJVkUNCiNkZWZpbmUgdHJhY2VCTE9DS0lOR19PTl9RVUVVRV9SRUNFSVZFKCBweFF1ZXVlICkgXA0KCXN3aXRjaCAocHhRdWV1ZS0+dWNRdWV1ZVR5cGUpIFwNCgl7IFwNCgkJY2FzZSBxdWV1ZVFVRVVFX1RZUEVfQkFTRTogXA0KCQkJdlRyYWNlU3RvcmVFdmVudDMoeEp1c3RQZWVraW5nID09IHBkRkFMU0UgPyBQU0ZfRVZFTlRfUVVFVUVfUkVDRUlWRV9CTE9DSyA6IFBTRl9FVkVOVF9RVUVVRV9QRUVLX0JMT0NLLCAodWludDMyX3QpcHhRdWV1ZSwgeFRpY2tzVG9XYWl0LCBweFF1ZXVlLT51eE1lc3NhZ2VzV2FpdGluZyk7IFwNCgkJCWJyZWFrOyBcDQoJCWNhc2UgcXVldWVRVUVVRV9UWVBFX0JJTkFSWV9TRU1BUEhPUkU6IFwNCgkJY2FzZSBxdWV1ZVFVRVVFX1RZUEVfQ09VTlRJTkdfU0VNQVBIT1JFOiBcDQoJCQl2VHJhY2VTdG9yZUV2ZW50Myh4SnVzdFBlZWtpbmcgPT0gcGRGQUxTRSA/IFBTRl9FVkVOVF9TRU1BUEhPUkVfVEFLRV9CTE9DSyA6IFBTRl9FVkVOVF9TRU1BUEhPUkVfUEVFS19CTE9DSywgKHVpbnQzMl90KXB4UXVldWUsIHhUaWNrc1RvV2FpdCwgcHhRdWV1ZS0+dXhNZXNzYWdlc1dhaXRpbmcpOyBcDQoJCQlicmVhazsgXA0KCQljYXNlIHF1ZXVlUVVFVUVfVFlQRV9NVVRFWDogXA0KCQljYXNlIHF1ZXVlUVVFVUVfVFlQRV9SRUNVUlNJVkVfTVVURVg6IFwNCgkJCXZUcmFjZVN0b3JlRXZlbnQyKHhKdXN0UGVla2luZyA9PSBwZEZBTFNFID8gUFNGX0VWRU5UX01VVEVYX1RBS0VfQkxPQ0sgOiBQU0ZfRVZFTlRfTVVURVhfUEVFS19CTE9DSywgKHVpbnQzMl90KXB4UXVldWUsIHhUaWNrc1RvV2FpdCk7IFwNCgkJCWJyZWFrOyBcDQoJfQ0KCQkNCiN1bmRlZiB0cmFjZVRBS0VfTVVURVhfUkVDVVJTSVZFDQojaWYgVFJDX0ZSRUVSVE9TX1ZFUlNJT04gPT0gVFJDX0ZSRUVSVE9TX1ZFUlNJT05fOF8wX09SX0xBVEVSDQojZGVmaW5lIHRyYWNlVEFLRV9NVVRFWF9SRUNVUlNJVkUoIHB4UXVldWUgKSBcDQoJdlRyYWNlU3RvcmVFdmVudDIoUFNGX0VWRU5UX01VVEVYX1RBS0VfUkVDVVJTSVZFLCAodWludDMyX3QpcHhRdWV1ZSwgeFRpY2tzVG9XYWl0KTsNCiNlbHNlDQojZGVmaW5lIHRyYWNlVEFLRV9NVVRFWF9SRUNVUlNJVkUoIHB4UXVldWUgKSBcDQoJdlRyYWNlU3RvcmVFdmVudDIoUFNGX0VWRU5UX01VVEVYX1RBS0VfUkVDVVJTSVZFLCAodWludDMyX3QpcHhRdWV1ZSwgeEJsb2NrVGltZSk7DQojZW5kaWYNCg0KI3VuZGVmIHRyYWNlVEFLRV9NVVRFWF9SRUNVUlNJVkVfRkFJTEVEDQojaWYgVFJDX0ZSRUVSVE9TX1ZFUlNJT04gPT0gVFJDX0ZSRUVSVE9TX1ZFUlNJT05fOF8wX09SX0xBVEVSDQojZGVmaW5lIHRyYWNlVEFLRV9NVVRFWF9SRUNVUlNJVkVfRkFJTEVEKCBweFF1ZXVlICkgXA0KdlRyYWNlU3RvcmVFdmVudDIoUFNGX0VWRU5UX01VVEVYX1RBS0VfUkVDVVJTSVZFX0ZBSUxFRCwgKHVpbnQzMl90KXB4UXVldWUsIHhUaWNrc1RvV2FpdCk7DQojZWxzZQ0KI2RlZmluZSB0cmFjZVRBS0VfTVVURVhfUkVDVVJTSVZFX0ZBSUxFRCggcHhRdWV1ZSApIFwNCnZUcmFjZVN0b3JlRXZlbnQyKFBTRl9FVkVOVF9NVVRFWF9UQUtFX1JFQ1VSU0lWRV9GQUlMRUQsICh1aW50MzJfdClweFF1ZXVlLCB4QmxvY2tUaW1lKTsNCiNlbmRpZg0KDQovKiBDYWxsZWQgd2hlbiBhIG1lc3NhZ2UgaXMgcmVjZWl2ZWQgaW4gaW50ZXJydXB0IGNvbnRleHQsIGUuZy4sIHVzaW5nIHhRdWV1ZVJlY2VpdmVGcm9tSVNSICovDQojdW5kZWYgdHJhY2VRVUVVRV9SRUNFSVZFX0ZST01fSVNSDQojZGVmaW5lIHRyYWNlUVVFVUVfUkVDRUlWRV9GUk9NX0lTUiggcHhRdWV1ZSApIFwNCnN3aXRjaCAocHhRdWV1ZS0+dWNRdWV1ZVR5cGUpIFwNCgl7IFwNCgkJY2FzZSBxdWV1ZVFVRVVFX1RZUEVfQkFTRTogXA0KCQkJdlRyYWNlU3RvcmVFdmVudDIoUFNGX0VWRU5UX1FVRVVFX1JFQ0VJVkVfRlJPTUlTUiwgKHVpbnQzMl90KXB4UXVldWUsIHB4UXVldWUtPnV4TWVzc2FnZXNXYWl0aW5nIC0gMSk7IFwNCgkJCWJyZWFrOyBcDQoJCWNhc2UgcXVldWVRVUVVRV9UWVBFX0JJTkFSWV9TRU1BUEhPUkU6IFwNCgkJY2FzZSBxdWV1ZVFVRVVFX1RZUEVfQ09VTlRJTkdfU0VNQVBIT1JFOiBcDQoJCQl2VHJhY2VTdG9yZUV2ZW50MihQU0ZfRVZFTlRfU0VNQVBIT1JFX1RBS0VfRlJPTUlTUiwgKHVpbnQzMl90KXB4UXVldWUsIHB4UXVldWUtPnV4TWVzc2FnZXNXYWl0aW5nIC0gMSk7IFwNCgkJCWJyZWFrOyBcDQoJfQ0KDQovKiBDYWxsZWQgd2hlbiBhIG1lc3NhZ2UgcmVjZWl2ZSBmcm9tIGludGVycnVwdCBjb250ZXh0IGZhaWxzIChzaW5jZSB0aGUgcXVldWUgd2FzIGVtcHR5KSAqLw0KI3VuZGVmIHRyYWNlUVVFVUVfUkVDRUlWRV9GUk9NX0lTUl9GQUlMRUQNCiNkZWZpbmUgdHJhY2VRVUVVRV9SRUNFSVZFX0ZST01fSVNSX0ZBSUxFRCggcHhRdWV1ZSApIFwNCglzd2l0Y2ggKHB4UXVldWUtPnVjUXVldWVUeXBlKSBcDQoJeyBcDQoJCWNhc2UgcXVldWVRVUVVRV9UWVBFX0JBU0U6IFwNCgkJCXZUcmFjZVN0b3JlRXZlbnQyKFBTRl9FVkVOVF9RVUVVRV9SRUNFSVZFX0ZST01JU1JfRkFJTEVELCAodWludDMyX3QpcHhRdWV1ZSwgcHhRdWV1ZS0+dXhNZXNzYWdlc1dhaXRpbmcpOyBcDQoJCQlicmVhazsgXA0KCQljYXNlIHF1ZXVlUVVFVUVfVFlQRV9CSU5BUllfU0VNQVBIT1JFOiBcDQoJCWNhc2UgcXVldWVRVUVVRV9UWVBFX0NPVU5USU5HX1NFTUFQSE9SRTogXA0KCQkJdlRyYWNlU3RvcmVFdmVudDIoUFNGX0VWRU5UX1NFTUFQSE9SRV9UQUtFX0ZST01JU1JfRkFJTEVELCAodWludDMyX3QpcHhRdWV1ZSwgcHhRdWV1ZS0+dXhNZXNzYWdlc1dhaXRpbmcpOyBcDQoJCQlicmVhazsgXA0KCX0NCg0KLyogQ2FsbGVkIG9uIHhRdWV1ZVBlZWsgKi8NCiN1bmRlZiB0cmFjZVFVRVVFX1BFRUsNCiNkZWZpbmUgdHJhY2VRVUVVRV9QRUVLKCBweFF1ZXVlICkgXA0KCXN3aXRjaCAocHhRdWV1ZS0+dWNRdWV1ZVR5cGUpIFwNCgl7IFwNCgkJY2FzZSBxdWV1ZVFVRVVFX1RZUEVfQkFTRTogXA0KCQkJdlRyYWNlU3RvcmVFdmVudDMoUFNGX0VWRU5UX1FVRVVFX1BFRUssICh1aW50MzJfdClweFF1ZXVlLCB4VGlja3NUb1dhaXQsIHB4UXVldWUtPnV4TWVzc2FnZXNXYWl0aW5nKTsgXA0KCQkJYnJlYWs7IFwNCgkJY2FzZSBxdWV1ZVFVRVVFX1RZUEVfQklOQVJZX1NFTUFQSE9SRTogXA0KCQljYXNlIHF1ZXVlUVVFVUVfVFlQRV9DT1VOVElOR19TRU1BUEhPUkU6IFwNCgkJCXZUcmFjZVN0b3JlRXZlbnQzKFBTRl9FVkVOVF9TRU1BUEhPUkVfUEVFSywgKHVpbnQzMl90KXB4UXVldWUsIHhUaWNrc1RvV2FpdCwgcHhRdWV1ZS0+dXhNZXNzYWdlc1dhaXRpbmcpOyBcDQoJCQlicmVhazsgXA0KCQljYXNlIHF1ZXVlUVVFVUVfVFlQRV9NVVRFWDogXA0KCQljYXNlIHF1ZXVlUVVFVUVfVFlQRV9SRUNVUlNJVkVfTVVURVg6IFwNCgkJCXZUcmFjZVN0b3JlRXZlbnQxKFBTRl9FVkVOVF9NVVRFWF9QRUVLLCAodWludDMyX3QpcHhRdWV1ZSk7IFwNCgkJCWJyZWFrOyBcDQoJfQ0KDQovKiBDYWxsZWQgaW4gdlRhc2tQcmlvcml0eVNldCAqLw0KI3VuZGVmIHRyYWNlVEFTS19QUklPUklUWV9TRVQNCiNkZWZpbmUgdHJhY2VUQVNLX1BSSU9SSVRZX1NFVCggcHhUYXNrLCB1eE5ld1ByaW9yaXR5ICkgXA0KCXZUcmFjZVN0b3JlRXZlbnQyKFBTRl9FVkVOVF9UQVNLX1BSSU9SSVRZLCAodWludDMyX3QpcHhUYXNrLCB1eE5ld1ByaW9yaXR5KTsNCgkNCi8qIENhbGxlZCBpbiB2VGFza1ByaW9yaXR5SW5oZXJpdCwgd2hpY2ggaXMgY2FsbGVkIGJ5IE11dGV4IG9wZXJhdGlvbnMgKi8NCiN1bmRlZiB0cmFjZVRBU0tfUFJJT1JJVFlfSU5IRVJJVA0KI2RlZmluZSB0cmFjZVRBU0tfUFJJT1JJVFlfSU5IRVJJVCggcHhUYXNrLCB1eE5ld1ByaW9yaXR5ICkgXA0KCXZUcmFjZVN0b3JlRXZlbnQyKFBTRl9FVkVOVF9UQVNLX1BSSU9fSU5IRVJJVCwgKHVpbnQzMl90KXB4VGFzaywgdXhOZXdQcmlvcml0eSk7DQoNCi8qIENhbGxlZCBpbiB2VGFza1ByaW9yaXR5RGlzaW5oZXJpdCwgd2hpY2ggaXMgY2FsbGVkIGJ5IE11dGV4IG9wZXJhdGlvbnMgKi8NCiN1bmRlZiB0cmFjZVRBU0tfUFJJT1JJVFlfRElTSU5IRVJJVA0KI2RlZmluZSB0cmFjZVRBU0tfUFJJT1JJVFlfRElTSU5IRVJJVCggcHhUYXNrLCB1eE5ld1ByaW9yaXR5ICkgXA0KCXZUcmFjZVN0b3JlRXZlbnQyKFBTRl9FVkVOVF9UQVNLX1BSSU9fRElTSU5IRVJJVCwgKHVpbnQzMl90KXB4VGFzaywgdXhOZXdQcmlvcml0eSk7DQoNCi8qIENhbGxlZCBpbiB2VGFza1Jlc3VtZSAqLw0KI3VuZGVmIHRyYWNlVEFTS19SRVNVTUUNCiNkZWZpbmUgdHJhY2VUQVNLX1JFU1VNRSggcHhUYXNrVG9SZXN1bWUgKSBcDQoJdlRyYWNlU3RvcmVFdmVudDEoUFNGX0VWRU5UX1RBU0tfUkVTVU1FLCAodWludDMyX3QpcHhUYXNrVG9SZXN1bWUpOw0KDQovKiBDYWxsZWQgaW4gdlRhc2tSZXN1bWVGcm9tSVNSICovDQojdW5kZWYgdHJhY2VUQVNLX1JFU1VNRV9GUk9NX0lTUg0KI2RlZmluZSB0cmFjZVRBU0tfUkVTVU1FX0ZST01fSVNSKCBweFRhc2tUb1Jlc3VtZSApIFwNCgl2VHJhY2VTdG9yZUV2ZW50MShQU0ZfRVZFTlRfVEFTS19SRVNVTUVfRlJPTUlTUiwgKHVpbnQzMl90KXB4VGFza1RvUmVzdW1lKTsNCg0KI3VuZGVmIHRyYWNlTUFMTE9DDQojZGVmaW5lIHRyYWNlTUFMTE9DKCBwdkFkZHJlc3MsIHVpU2l6ZSApIFwNCgl2VHJhY2VTdG9yZUV2ZW50MihQU0ZfRVZFTlRfTUFMTE9DLCAodWludDMyX3QpcHZBZGRyZXNzLCAoaW50MzJfdCl1aVNpemUpOw0KDQojdW5kZWYgdHJhY2VGUkVFDQojZGVmaW5lIHRyYWNlRlJFRSggcHZBZGRyZXNzLCB1aVNpemUgKSBcDQoJdlRyYWNlU3RvcmVFdmVudDIoUFNGX0VWRU5UX0ZSRUUsICh1aW50MzJfdClwdkFkZHJlc3MsIChpbnQzMl90KSgtdWlTaXplKSk7DQoNCi8qIENhbGxlZCBpbiB0aW1lci5jIC0geFRpbWVyQ3JlYXRlICovDQojdW5kZWYgdHJhY2VUSU1FUl9DUkVBVEUNCiNkZWZpbmUgdHJhY2VUSU1FUl9DUkVBVEUodG1yKSBcDQoJdlRyYWNlU3RvcmVFdmVudDIoUFNGX0VWRU5UX1RJTUVSX0NSRUFURSwgKHVpbnQzMl90KXRtciwgdG1yLT54VGltZXJQZXJpb2RJblRpY2tzKTsNCg0KI3VuZGVmIHRyYWNlVElNRVJfQ1JFQVRFX0ZBSUxFRA0KI2RlZmluZSB0cmFjZVRJTUVSX0NSRUFURV9GQUlMRUQoKSBcDQoJdlRyYWNlU3RvcmVFdmVudDAoUFNGX0VWRU5UX1RJTUVSX0NSRUFURV9GQUlMRUQpOw0KDQojaWYgVFJDX0ZSRUVSVE9TX1ZFUlNJT04gPT0gVFJDX0ZSRUVSVE9TX1ZFUlNJT05fOF8wX09SX0xBVEVSDQojZGVmaW5lIHRyYWNlVElNRVJfQ09NTUFORF9TRU5EXzhfMF9DQVNFUyh0bXIpIFwNCgljYXNlIHRtckNPTU1BTkRfUkVTRVQ6IFwNCgkJdlRyYWNlU3RvcmVFdmVudDIoKHhSZXR1cm4gPT0gcGRQQVNTKSA/IFBTRl9FVkVOVF9USU1FUl9SRVNFVCA6IFBTRl9FVkVOVF9USU1FUl9SRVNFVF9GQUlMRUQsICh1aW50MzJfdCl0bXIsIHhPcHRpb25hbFZhbHVlKTsgXA0KCQlicmVhazsgXA0KCWNhc2UgdG1yQ09NTUFORF9TVEFSVF9GUk9NX0lTUjogXA0KCQl2VHJhY2VTdG9yZUV2ZW50MigoeFJldHVybiA9PSBwZFBBU1MpID8gUFNGX0VWRU5UX1RJTUVSX1NUQVJUX0ZST01JU1IgOiBQU0ZfRVZFTlRfVElNRVJfU1RBUlRfRlJPTUlTUl9GQUlMRUQsICh1aW50MzJfdCl0bXIsIHhPcHRpb25hbFZhbHVlKTsgXA0KCQlicmVhazsgXA0KCWNhc2UgdG1yQ09NTUFORF9SRVNFVF9GUk9NX0lTUjogXA0KCQl2VHJhY2VTdG9yZUV2ZW50MigoeFJldHVybiA9PSBwZFBBU1MpID8gUFNGX0VWRU5UX1RJTUVSX1JFU0VUX0ZST01JU1IgOiBQU0ZfRVZFTlRfVElNRVJfUkVTRVRfRlJPTUlTUl9GQUlMRUQsICh1aW50MzJfdCl0bXIsIHhPcHRpb25hbFZhbHVlKTsgXA0KCQlicmVhazsgXA0KCWNhc2UgdG1yQ09NTUFORF9TVE9QX0ZST01fSVNSOiBcDQoJCXZUcmFjZVN0b3JlRXZlbnQyKCh4UmV0dXJuID09IHBkUEFTUykgPyBQU0ZfRVZFTlRfVElNRVJfU1RPUF9GUk9NSVNSIDogUFNGX0VWRU5UX1RJTUVSX1NUT1BfRlJPTUlTUl9GQUlMRUQsICh1aW50MzJfdCl0bXIsIHhPcHRpb25hbFZhbHVlKTsgXA0KCQlicmVhazsgXA0KCWNhc2UgdG1yQ09NTUFORF9DSEFOR0VfUEVSSU9EX0ZST01fSVNSOiBcDQoJCXZUcmFjZVN0b3JlRXZlbnQyKCh4UmV0dXJuID09IHBkUEFTUykgPyBQU0ZfRVZFTlRfVElNRVJfQ0hBTkdFUEVSSU9EX0ZST01JU1IgOiBQU0ZfRVZFTlRfVElNRVJfQ0hBTkdFUEVSSU9EX0ZST01JU1JfRkFJTEVELCAodWludDMyX3QpdG1yLCB4T3B0aW9uYWxWYWx1ZSk7IFwNCgkJYnJlYWs7DQojZWxzZQ0KI2RlZmluZSB0cmFjZVRJTUVSX0NPTU1BTkRfU0VORF84XzBfQ0FTRVModG1yKSANCiNlbmRpZg0KDQovKiBOb3RlIHRoYXQgeENvbW1hbmRJRCBjYW4gbmV2ZXIgYmUgdG1yQ09NTUFORF9FWEVDVVRFX0NBTExCQUNLICgtMSkgc2luY2UgdGhlIHRyYWNlIG1hY3JvIGlzIG5vdCBjYWxsZWQgaW4gdGhhdCBjYXNlICovDQojdW5kZWYgdHJhY2VUSU1FUl9DT01NQU5EX1NFTkQNCiNkZWZpbmUgdHJhY2VUSU1FUl9DT01NQU5EX1NFTkQodG1yLCB4Q29tbWFuZElELCB4T3B0aW9uYWxWYWx1ZSwgeFJldHVybikgXA0KCXN3aXRjaCh4Q29tbWFuZElEKSBcDQoJeyBcDQoJCWNhc2UgdG1yQ09NTUFORF9TVEFSVDogXA0KCQkJYnJlYWs7IFwNCgkJY2FzZSB0bXJDT01NQU5EX1NUT1A6IFwNCgkJCWJyZWFrOyBcDQoJCWNhc2UgdG1yQ09NTUFORF9DSEFOR0VfUEVSSU9EOiBcDQoJCQl2VHJhY2VTdG9yZUV2ZW50MigoeFJldHVybiA9PSBwZFBBU1MpID8gUFNGX0VWRU5UX1RJTUVSX0NIQU5HRVBFUklPRCA6IFBTRl9FVkVOVF9USU1FUl9DSEFOR0VQRVJJT0RfRkFJTEVELCAodWludDMyX3QpdG1yLCB4T3B0aW9uYWxWYWx1ZSk7IFwNCgkJCWJyZWFrOyBcDQoJCWNhc2UgdG1yQ09NTUFORF9ERUxFVEU6IFwNCgkJCXZUcmFjZVN0b3JlRXZlbnQxKCh4UmV0dXJuID09IHBkUEFTUykgPyBQU0ZfRVZFTlRfVElNRVJfREVMRVRFIDogUFNGX0VWRU5UX1RJTUVSX0RFTEVURV9GQUlMRUQsICh1aW50MzJfdCl0bXIpOyBcDQoJCQlicmVhazsgXA0KCQl0cmFjZVRJTUVSX0NPTU1BTkRfU0VORF84XzBfQ0FTRVModG1yKSBcDQoJfQ0KDQojdW5kZWYgdHJhY2VQRU5EX0ZVTkNfQ0FMTA0KI2RlZmluZSB0cmFjZVBFTkRfRlVOQ19DQUxMKGZ1bmMsIGFyZzEsIGFyZzIsIHJldCkgXA0KCXZUcmFjZVN0b3JlRXZlbnQxKChyZXQgPT0gcGRQQVNTKSA/IFBTRl9FVkVOVF9USU1FUl9QRU5ERlVOQ0NBTEwgOiBQU0ZfRVZFTlRfVElNRVJfUEVOREZVTkNDQUxMX0ZBSUxFRCwgKHVpbnQzMl90KWZ1bmMpOw0KDQojdW5kZWYgdHJhY2VQRU5EX0ZVTkNfQ0FMTF9GUk9NX0lTUg0KI2RlZmluZSB0cmFjZVBFTkRfRlVOQ19DQUxMX0ZST01fSVNSKGZ1bmMsIGFyZzEsIGFyZzIsIHJldCkgXA0KCXZUcmFjZVN0b3JlRXZlbnQxKChyZXQgPT0gcGRQQVNTKSA/IFBTRl9FVkVOVF9USU1FUl9QRU5ERlVOQ0NBTExfRlJPTUlTUiA6IFBTRl9FVkVOVF9USU1FUl9QRU5ERlVOQ0NBTExfRlJPTUlTUl9GQUlMRUQsICh1aW50MzJfdClmdW5jKTsNCg0KI3VuZGVmIHRyYWNlRVZFTlRfR1JPVVBfQ1JFQVRFDQojZGVmaW5lIHRyYWNlRVZFTlRfR1JPVVBfQ1JFQVRFKGVnKSBcDQoJdlRyYWNlU3RvcmVFdmVudDEoUFNGX0VWRU5UX0VWRU5UR1JPVVBfQ1JFQVRFLCAodWludDMyX3QpZWcpOw0KDQojdW5kZWYgdHJhY2VFVkVOVF9HUk9VUF9ERUxFVEUNCiNkZWZpbmUgdHJhY2VFVkVOVF9HUk9VUF9ERUxFVEUoZWcpIFwNCgl2VHJhY2VTdG9yZUV2ZW50MShQU0ZfRVZFTlRfRVZFTlRHUk9VUF9ERUxFVEUsICh1aW50MzJfdCllZyk7DQoNCiN1bmRlZiB0cmFjZUVWRU5UX0dST1VQX0NSRUFURV9GQUlMRUQNCiNkZWZpbmUgdHJhY2VFVkVOVF9HUk9VUF9DUkVBVEVfRkFJTEVEKCkgXA0KCXZUcmFjZVN0b3JlRXZlbnQwKFBTRl9FVkVOVF9FVkVOVEdST1VQX0NSRUFURV9GQUlMRUQpOw0KDQojdW5kZWYgdHJhY2VFVkVOVF9HUk9VUF9TWU5DX0JMT0NLDQojZGVmaW5lIHRyYWNlRVZFTlRfR1JPVVBfU1lOQ19CTE9DSyhlZywgYml0c1RvU2V0LCBiaXRzVG9XYWl0Rm9yKSBcDQoJdlRyYWNlU3RvcmVFdmVudDIoUFNGX0VWRU5UX0VWRU5UR1JPVVBfU1lOQ19CTE9DSywgKHVpbnQzMl90KWVnLCBiaXRzVG9XYWl0Rm9yKTsNCg0KI3VuZGVmIHRyYWNlRVZFTlRfR1JPVVBfU1lOQ19FTkQNCiNkZWZpbmUgdHJhY2VFVkVOVF9HUk9VUF9TWU5DX0VORChlZywgYml0c1RvU2V0LCBiaXRzVG9XYWl0Rm9yLCB3YXNUaW1lb3V0KSBcDQoJdlRyYWNlU3RvcmVFdmVudDIoKHdhc1RpbWVvdXQgIT0gcGRUUlVFKSA/IFBTRl9FVkVOVF9FVkVOVEdST1VQX1NZTkMgOiBQU0ZfRVZFTlRfRVZFTlRHUk9VUF9TWU5DX0ZBSUxFRCwgKHVpbnQzMl90KWVnLCBiaXRzVG9XYWl0Rm9yKTsNCg0KI3VuZGVmIHRyYWNlRVZFTlRfR1JPVVBfV0FJVF9CSVRTX0JMT0NLDQojZGVmaW5lIHRyYWNlRVZFTlRfR1JPVVBfV0FJVF9CSVRTX0JMT0NLKGVnLCBiaXRzVG9XYWl0Rm9yKSBcDQoJdlRyYWNlU3RvcmVFdmVudDIoUFNGX0VWRU5UX0VWRU5UR1JPVVBfV0FJVEJJVFNfQkxPQ0ssICh1aW50MzJfdCllZywgYml0c1RvV2FpdEZvcik7DQoNCiN1bmRlZiB0cmFjZUVWRU5UX0dST1VQX1dBSVRfQklUU19FTkQNCiNkZWZpbmUgdHJhY2VFVkVOVF9HUk9VUF9XQUlUX0JJVFNfRU5EKGVnLCBiaXRzVG9XYWl0Rm9yLCB3YXNUaW1lb3V0KSBcDQoJdlRyYWNlU3RvcmVFdmVudDIoKHdhc1RpbWVvdXQgIT0gcGRUUlVFKSA/IFBTRl9FVkVOVF9FVkVOVEdST1VQX1dBSVRCSVRTIDogUFNGX0VWRU5UX0VWRU5UR1JPVVBfV0FJVEJJVFNfRkFJTEVELCAodWludDMyX3QpZWcsIGJpdHNUb1dhaXRGb3IpOw0KDQojdW5kZWYgdHJhY2VFVkVOVF9HUk9VUF9DTEVBUl9CSVRTDQojZGVmaW5lIHRyYWNlRVZFTlRfR1JPVVBfQ0xFQVJfQklUUyhlZywgYml0c1RvQ2xlYXIpIFwNCgl2VHJhY2VTdG9yZUV2ZW50MihQU0ZfRVZFTlRfRVZFTlRHUk9VUF9DTEVBUkJJVFMsICh1aW50MzJfdCllZywgYml0c1RvQ2xlYXIpOw0KDQojdW5kZWYgdHJhY2VFVkVOVF9HUk9VUF9DTEVBUl9CSVRTX0ZST01fSVNSDQojZGVmaW5lIHRyYWNlRVZFTlRfR1JPVVBfQ0xFQVJfQklUU19GUk9NX0lTUihlZywgYml0c1RvQ2xlYXIpIFwNCgl2VHJhY2VTdG9yZUV2ZW50MihQU0ZfRVZFTlRfRVZFTlRHUk9VUF9DTEVBUkJJVFNfRlJPTUlTUiwgKHVpbnQzMl90KWVnLCBiaXRzVG9DbGVhcik7DQoNCiN1bmRlZiB0cmFjZUVWRU5UX0dST1VQX1NFVF9CSVRTDQojZGVmaW5lIHRyYWNlRVZFTlRfR1JPVVBfU0VUX0JJVFMoZWcsIGJpdHNUb1NldCkgXA0KCXZUcmFjZVN0b3JlRXZlbnQyKFBTRl9FVkVOVF9FVkVOVEdST1VQX1NFVEJJVFMsICh1aW50MzJfdCllZywgYml0c1RvU2V0KTsNCg0KI3VuZGVmIHRyYWNlRVZFTlRfR1JPVVBfU0VUX0JJVFNfRlJPTV9JU1INCiNkZWZpbmUgdHJhY2VFVkVOVF9HUk9VUF9TRVRfQklUU19GUk9NX0lTUihlZywgYml0c1RvU2V0KSBcDQoJdlRyYWNlU3RvcmVFdmVudDIoUFNGX0VWRU5UX0VWRU5UR1JPVVBfU0VUQklUU19GUk9NSVNSLCAodWludDMyX3QpZWcsIGJpdHNUb1NldCk7DQoNCiN1bmRlZiB0cmFjZVRBU0tfTk9USUZZX1RBS0UNCiNkZWZpbmUgdHJhY2VUQVNLX05PVElGWV9UQUtFKCkgXA0KCWlmIChweEN1cnJlbnRUQ0ItPmVOb3RpZnlTdGF0ZSA9PSBlTm90aWZpZWQpIFwNCgkJdlRyYWNlU3RvcmVFdmVudDIoUFNGX0VWRU5UX1RBU0tfTk9USUZZX1RBS0UsICh1aW50MzJfdClweEN1cnJlbnRUQ0IsIHhUaWNrc1RvV2FpdCk7IFwNCgllbHNlIFwNCgkJdlRyYWNlU3RvcmVFdmVudDIoUFNGX0VWRU5UX1RBU0tfTk9USUZZX1RBS0VfRkFJTEVELCAodWludDMyX3QpcHhDdXJyZW50VENCLCB4VGlja3NUb1dhaXQpOw0KDQojdW5kZWYgdHJhY2VUQVNLX05PVElGWV9UQUtFX0JMT0NLDQojZGVmaW5lIHRyYWNlVEFTS19OT1RJRllfVEFLRV9CTE9DSygpIFwNCgl2VHJhY2VTdG9yZUV2ZW50MihQU0ZfRVZFTlRfVEFTS19OT1RJRllfVEFLRV9CTE9DSywgKHVpbnQzMl90KXB4Q3VycmVudFRDQiwgeFRpY2tzVG9XYWl0KTsNCg0KI3VuZGVmIHRyYWNlVEFTS19OT1RJRllfV0FJVA0KI2RlZmluZSB0cmFjZVRBU0tfTk9USUZZX1dBSVQoKSBcDQoJaWYgKHB4Q3VycmVudFRDQi0+ZU5vdGlmeVN0YXRlID09IGVOb3RpZmllZCkgXA0KCQl2VHJhY2VTdG9yZUV2ZW50MihQU0ZfRVZFTlRfVEFTS19OT1RJRllfV0FJVCwgKHVpbnQzMl90KXB4Q3VycmVudFRDQiwgeFRpY2tzVG9XYWl0KTsgXA0KCWVsc2UgXA0KCQl2VHJhY2VTdG9yZUV2ZW50MihQU0ZfRVZFTlRfVEFTS19OT1RJRllfV0FJVF9GQUlMRUQsICh1aW50MzJfdClweEN1cnJlbnRUQ0IsIHhUaWNrc1RvV2FpdCk7DQoNCiN1bmRlZiB0cmFjZVRBU0tfTk9USUZZX1dBSVRfQkxPQ0sNCiNkZWZpbmUgdHJhY2VUQVNLX05PVElGWV9XQUlUX0JMT0NLKCkgXA0KCXZUcmFjZVN0b3JlRXZlbnQyKFBTRl9FVkVOVF9UQVNLX05PVElGWV9XQUlUX0JMT0NLLCAodWludDMyX3QpcHhDdXJyZW50VENCLCB4VGlja3NUb1dhaXQpOw0KDQojdW5kZWYgdHJhY2VUQVNLX05PVElGWQ0KI2RlZmluZSB0cmFjZVRBU0tfTk9USUZZKCkgXA0KCXZUcmFjZVN0b3JlRXZlbnQxKFBTRl9FVkVOVF9UQVNLX05PVElGWSwgKHVpbnQzMl90KXhUYXNrVG9Ob3RpZnkpOw0KDQojdW5kZWYgdHJhY2VUQVNLX05PVElGWV9GUk9NX0lTUg0KI2RlZmluZSB0cmFjZVRBU0tfTk9USUZZX0ZST01fSVNSKCkgXA0KCXZUcmFjZVN0b3JlRXZlbnQxKFBTRl9FVkVOVF9UQVNLX05PVElGWV9GUk9NX0lTUiwgKHVpbnQzMl90KXhUYXNrVG9Ob3RpZnkpOw0KCQ0KI3VuZGVmIHRyYWNlVEFTS19OT1RJRllfR0lWRV9GUk9NX0lTUg0KI2RlZmluZSB0cmFjZVRBU0tfTk9USUZZX0dJVkVfRlJPTV9JU1IoKSBcDQoJdlRyYWNlU3RvcmVFdmVudDEoUFNGX0VWRU5UX1RBU0tfTk9USUZZX0dJVkVfRlJPTV9JU1IsICh1aW50MzJfdCl4VGFza1RvTm90aWZ5KTsNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi8qIEtFUk5FTCBTUEVDSUZJQyBNQUNST1MgVE8gTkFNRSBPQkpFQ1RTLCBJRiBORUNFU1NBUlkJCQkJICovDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KI2RlZmluZSB2VHJhY2VTZXRRdWV1ZU5hbWUob2JqZWN0LCBuYW1lKSBcDQp2VHJhY2VTdG9yZUtlcm5lbE9iamVjdE5hbWUob2JqZWN0LCBuYW1lKTsNCg0KI2RlZmluZSB2VHJhY2VTZXRTZW1hcGhvcmVOYW1lKG9iamVjdCwgbmFtZSkgXA0KdlRyYWNlU3RvcmVLZXJuZWxPYmplY3ROYW1lKG9iamVjdCwgbmFtZSk7DQoNCiNkZWZpbmUgdlRyYWNlU2V0TXV0ZXhOYW1lKG9iamVjdCwgbmFtZSkgXA0KdlRyYWNlU3RvcmVLZXJuZWxPYmplY3ROYW1lKG9iamVjdCwgbmFtZSk7DQoNCiNkZWZpbmUgdlRyYWNlU2V0RXZlbnRHcm91cE5hbWUob2JqZWN0LCBuYW1lKSBcDQp2VHJhY2VTdG9yZUtlcm5lbE9iamVjdE5hbWUob2JqZWN0LCBuYW1lKTsNCg0KI2Vsc2UgLyooVVNFX1RSQUNFQUxZWkVSX1JFQ09SREVSID09IDEpKi8NCg0KI2RlZmluZSB2VHJhY2VTZXRRdWV1ZU5hbWUob2JqZWN0LCBuYW1lKQ0KDQojZGVmaW5lIHZUcmFjZVNldFNlbWFwaG9yZU5hbWUob2JqZWN0LCBuYW1lKQ0KDQojZGVmaW5lIHZUcmFjZVNldE11dGV4TmFtZShvYmplY3QsIG5hbWUpDQoNCiNkZWZpbmUgdlRyYWNlU2V0RXZlbnRHcm91cE5hbWUob2JqZWN0LCBuYW1lKQ0KDQojZGVmaW5lIFRyYWNlX0luaXQoKSANCg0KI2VuZGlmIC8qKFVTRV9UUkFDRUFMWVpFUl9SRUNPUkRFUiA9PSAxKSovDQoNCiNpZmRlZiBfX2NwbHVzcGx1cw0KfQ0KI2VuZGlmDQoNCiNlbmRpZiAvKiBUUkNfS0VSTkVMX1BPUlRfSCAqLw0K