LyoqDQogKiBcZmlsZQ0KICoNCiAqIFxicmllZiBDb21tb25seSB1c2VkIGluY2x1ZGVzLCB0eXBlcyBhbmQgbWFjcm9zLg0KICoNCiAqIENvcHlyaWdodCAoYykgMjAxMC0yMDEyIEF0bWVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KICoNCiAqIFxhc2ZfbGljZW5zZV9zdGFydA0KICoNCiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQogKg0KICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCiAqDQogKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQogKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uDQogKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCiAqDQogKiAzLiBUaGUgbmFtZSBvZiBBdG1lbCBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQNCiAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCiAqDQogKiA0LiBUaGlzIHNvZnR3YXJlIG1heSBvbmx5IGJlIHJlZGlzdHJpYnV0ZWQgYW5kIHVzZWQgaW4gY29ubmVjdGlvbiB3aXRoIGFuDQogKiAgICBBdG1lbCBtaWNyb2NvbnRyb2xsZXIgcHJvZHVjdC4NCiAqDQogKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFUTUVMICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQNCiAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GDQogKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5UIEFSRQ0KICogRVhQUkVTU0xZIEFORCBTUEVDSUZJQ0FMTFkgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVRNRUwgQkUgTElBQkxFIEZPUg0KICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTA0KICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMNCiAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQ0KICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULA0KICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElODQogKiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUNCiAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KICoNCiAqIFxhc2ZfbGljZW5zZV9zdG9wDQogKg0KICovDQoNCiNpZm5kZWYgVVRJTFNfQ09NUElMRVJfSA0KI2RlZmluZSBVVElMU19DT01QSUxFUl9IDQoNCi8qKg0KICogXGRlZmdyb3VwIGdyb3VwX3NhbV91dGlscyBDb21waWxlciBhYnN0cmFjdGlvbiBsYXllciBhbmQgY29kZSB1dGlsaXRpZXMNCiAqDQogKiBDb21waWxlciBhYnN0cmFjdGlvbiBsYXllciBhbmQgY29kZSB1dGlsaXRpZXMgZm9yIEFUOTFTQU0uDQogKiBUaGlzIG1vZHVsZSBwcm92aWRlcyB2YXJpb3VzIGFic3RyYWN0aW9uIGxheWVycyBhbmQgdXRpbGl0aWVzIHRvIG1ha2UgY29kZSBjb21wYXRpYmxlIGJldHdlZW4gZGlmZmVyZW50IGNvbXBpbGVycy4NCiAqDQogKiBcew0KICovDQojaW5jbHVkZSA8c3RkZGVmLmg+DQoNCiNpZiAoZGVmaW5lZCBfX0lDQ0FSTV9fKQ0KIyAgaW5jbHVkZSA8aW50cmluc2ljcy5oPg0KI2VuZGlmDQoNCiNpbmNsdWRlICJwYXJ0cy5oIg0KI2luY2x1ZGUgInByZXByb2Nlc3Nvci5oIg0KDQoNCi8vX19fX18gRCBFIEMgTCBBIFIgQSBUIEkgTyBOIFMgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18NCg0KI2lmbmRlZiBfX0FTU0VNQkxZX18gLy8gTm90IGRlZmluZWQgZm9yIGFzc2VtYmxpbmcuDQoNCiNpbmNsdWRlIDxzdGRpby5oPg0KI2luY2x1ZGUgPHN0ZGJvb2wuaD4NCiNpbmNsdWRlIDxzdGRpbnQuaD4NCiNpbmNsdWRlIDxzdGRsaWIuaD4NCg0KI2lmZGVmIF9fSUNDQVJNX18NCi8qISBcbmFtZSBDb21waWxlciBLZXl3b3Jkcw0KICoNCiAqIFBvcnQgb2Ygc29tZSBrZXl3b3JkcyBmcm9tIEdDQyB0byBJQVIgRW1iZWRkZWQgV29ya2JlbmNoLg0KICovDQovLyEgQHsNCiNkZWZpbmUgX19hc21fXyAgICAgICAgICAgICBhc20NCiNkZWZpbmUgX19pbmxpbmVfXyAgICAgICAgICBpbmxpbmUNCiNkZWZpbmUgX192b2xhdGlsZV9fDQovLyEgQH0NCg0KI2VuZGlmDQoNCi8qKg0KICogXGRlZiBiYXJyaWVyDQogKiBcYnJpZWYgTWVtb3J5IGJhcnJpZXINCiAqLw0KI2RlZmluZSBiYXJyaWVyKCkgICAgICAgICAgX19ETUIoKQ0KDQovKioNCiAqIFxicmllZiBFbWl0IHRoZSBjb21waWxlciBwcmFnbWEgXGEgYXJnLg0KICoNCiAqIFxwYXJhbSBhcmcgVGhlIHByYWdtYSBkaXJlY3RpdmUgYXMgaXQgd291bGQgYXBwZWFyIGFmdGVyIFxlIFwjcHJhZ21hDQogKiAoaS5lLiBub3Qgc3RyaW5naWZpZWQpLg0KICovDQojZGVmaW5lIENPTVBJTEVSX1BSQUdNQShhcmcpICAgICAgICAgICAgX1ByYWdtYSgjYXJnKQ0KDQovKioNCiAqIFxkZWYgQ09NUElMRVJfUEFDS19TRVQoYWxpZ25tZW50KQ0KICogXGJyaWVmIFNldCBtYXhpbXVtIGFsaWdubWVudCBmb3Igc3Vic2VxdWVudCBzdHJ1Y3QgYW5kIHVuaW9uDQogKiBkZWZpbml0aW9ucyB0byBcYSBhbGlnbm1lbnQuDQogKi8NCiNkZWZpbmUgQ09NUElMRVJfUEFDS19TRVQoYWxpZ25tZW50KSAgIENPTVBJTEVSX1BSQUdNQShwYWNrKGFsaWdubWVudCkpDQoNCi8qKg0KICogXGRlZiBDT01QSUxFUl9QQUNLX1JFU0VUKCkNCiAqIFxicmllZiBTZXQgZGVmYXVsdCBhbGlnbm1lbnQgZm9yIHN1YnNlcXVlbnQgc3RydWN0IGFuZCB1bmlvbg0KICogZGVmaW5pdGlvbnMuDQogKi8NCiNkZWZpbmUgQ09NUElMRVJfUEFDS19SRVNFVCgpICAgICAgICAgIENPTVBJTEVSX1BSQUdNQShwYWNrKCkpDQoNCg0KLyoqDQogKiBcYnJpZWYgU2V0IGFsaWduZWQgYm91bmRhcnkuDQogKi8NCiNpZiAoZGVmaW5lZCBfX0dOVUNfXykgfHwgKGRlZmluZWQgX19DQ19BUk0pDQojICAgZGVmaW5lIENPTVBJTEVSX0FMSUdORUQoYSkgICAgX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oYSkpKQ0KI2VsaWYgKGRlZmluZWQgX19JQ0NBUk1fXykNCiMgICBkZWZpbmUgQ09NUElMRVJfQUxJR05FRChhKSAgICBDT01QSUxFUl9QUkFHTUEoZGF0YV9hbGlnbm1lbnQgPSBhKQ0KI2VuZGlmDQoNCi8qKg0KICogXGJyaWVmIFNldCB3b3JkLWFsaWduZWQgYm91bmRhcnkuDQogKi8NCiNpZiAoZGVmaW5lZCBfX0dOVUNfXykgfHwgZGVmaW5lZChfX0NDX0FSTSkNCiNkZWZpbmUgQ09NUElMRVJfV09SRF9BTElHTkVEICAgIF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKDQpKSkNCiNlbGlmIChkZWZpbmVkIF9fSUNDQVJNX18pDQojZGVmaW5lIENPTVBJTEVSX1dPUkRfQUxJR05FRCAgICBDT01QSUxFUl9QUkFHTUEoZGF0YV9hbGlnbm1lbnQgPSA0KQ0KI2VuZGlmDQoNCi8qKg0KICogXGRlZiBfX2Fsd2F5c19pbmxpbmUNCiAqIFxicmllZiBUaGUgZnVuY3Rpb24gc2hvdWxkIGFsd2F5cyBiZSBpbmxpbmVkLg0KICoNCiAqIFRoaXMgYW5ub3RhdGlvbiBpbnN0cnVjdHMgdGhlIGNvbXBpbGVyIHRvIGlnbm9yZSBpdHMgaW5saW5pbmcNCiAqIGhldXJpc3RpY3MgYW5kIGlubGluZSB0aGUgZnVuY3Rpb24gbm8gbWF0dGVyIGhvdyBiaWcgaXQgdGhpbmtzIGl0DQogKiBiZWNvbWVzLg0KICovDQojaWYgZGVmaW5lZChfX0NDX0FSTSkNCiMgICAgICAgZGVmaW5lIF9fYWx3YXlzX2lubGluZSAgIF9fZm9yY2VpbmxpbmUNCiNlbGlmIChkZWZpbmVkIF9fR05VQ19fKQ0KIwlkZWZpbmUgX19hbHdheXNfaW5saW5lICAgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQ0KI2VsaWYgKGRlZmluZWQgX19JQ0NBUk1fXykNCiMJZGVmaW5lIF9fYWx3YXlzX2lubGluZSAgIF9QcmFnbWEoImlubGluZT1mb3JjZWQiKQ0KI2VuZGlmDQoNCi8qISBcYnJpZWYgVGhpcyBtYWNybyBpcyB1c2VkIHRvIHRlc3QgZmF0YWwgZXJyb3JzLg0KICoNCiAqIFRoZSBtYWNybyB0ZXN0cyBpZiB0aGUgZXhwcmVzc2lvbiBpcyBmYWxzZS4gSWYgaXQgaXMsIGEgZmF0YWwgZXJyb3IgaXMNCiAqIGRldGVjdGVkIGFuZCB0aGUgYXBwbGljYXRpb24gaGFuZ3MgdXAuIElmIFRFU1RfU1VJVEVfREVGSU5FX0FTU0VSVF9NQUNSTw0KICogaXMgZGVmaW5lZCwgYSB1bml0IHRlc3QgdmVyc2lvbiBvZiB0aGUgbWFjcm8gaXMgdXNlZCwgdG8gYWxsb3cgZXhlY3V0aW9uDQogKiBvZiBmdXJ0aGVyIHRlc3RzIGFmdGVyIGEgZmFsc2UgZXhwcmVzc2lvbi4NCiAqDQogKiBccGFyYW0gZXhwciAgRXhwcmVzc2lvbiB0byBldmFsdWF0ZSBhbmQgc3VwcG9zZWQgdG8gYmUgbm9uemVyby4NCiAqLw0KI2lmIGRlZmluZWQoX0FTU0VSVF9FTkFCTEVfKQ0KIyAgaWYgZGVmaW5lZChURVNUX1NVSVRFX0RFRklORV9BU1NFUlRfTUFDUk8pDQogICAgIC8vIEFzc2VydCgpIGlzIGRlZmluZWQgaW4gdW5pdF90ZXN0L3N1aXRlLmgNCiMgICAgaW5jbHVkZSAidW5pdF90ZXN0L3N1aXRlLmgiDQojICBlbHNlDQojdW5kZWYgVEVTVF9TVUlURV9ERUZJTkVfQVNTRVJUX01BQ1JPDQojICAgIGRlZmluZSBBc3NlcnQoZXhwcikgXA0KCXtcDQoJCWlmICghKGV4cHIpKSB3aGlsZSAodHJ1ZSk7XA0KCX0NCiMgIGVuZGlmDQojZWxzZQ0KIyAgZGVmaW5lIEFzc2VydChleHByKSAoKHZvaWQpIDApDQojZW5kaWYNCg0KLyogRGVmaW5lIGF0dHJpYnV0ZSAqLw0KI2lmIGRlZmluZWQgICAoIF9fQ0NfQVJNICAgKSAvKiBLZWlsILVWaXNpb24gNCAqLw0KIyAgIGRlZmluZSBXRUFLIF9fYXR0cmlidXRlX18gKCh3ZWFrKSkNCiNlbGlmIGRlZmluZWQgKCBfX0lDQ0FSTV9fICkgLyogSUFSIEV3YXJtIDUuNDErICovDQojICAgZGVmaW5lIFdFQUsgX193ZWFrDQojZWxpZiBkZWZpbmVkICggIF9fR05VQ19fICApIC8qIEdDQyBDUzMgMjAwOXEzLTY4ICovDQojICAgZGVmaW5lIFdFQUsgX19hdHRyaWJ1dGVfXyAoKHdlYWspKQ0KI2VuZGlmDQoNCi8qIERlZmluZSBOT19JTklUIGF0dHJpYnV0ZSAqLw0KI2lmIGRlZmluZWQgICAoIF9fQ0NfQVJNICAgKQ0KIyAgIGRlZmluZSBOT19JTklUIF9fYXR0cmlidXRlX18oKHplcm9faW5pdCkpDQojZWxpZiBkZWZpbmVkICggX19JQ0NBUk1fXyApDQojICAgZGVmaW5lIE5PX0lOSVQgX19ub19pbml0DQojZWxpZiBkZWZpbmVkICggIF9fR05VQ19fICApDQojICAgZGVmaW5lIE5PX0lOSVQgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiLm5vX2luaXQiKSkpDQojZW5kaWYNCg0KI2luY2x1ZGUgImludGVycnVwdC5oIg0KDQovKiEgXG5hbWUgVXN1YWwgVHlwZXMNCiAqLw0KLy8hIEB7DQp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgICAgICAgICAgIEJvb2w7IC8vITwgQm9vbGVhbi4NCiNpZm5kZWYgX19jcGx1c3BsdXMNCiNpZiAhZGVmaW5lZChfX2Jvb2xfdHJ1ZV9mYWxzZV9hcmVfZGVmaW5lZCkNCnR5cGVkZWYgdW5zaWduZWQgY2hhciAgICAgICAgICAgYm9vbDsgLy8hPCBCb29sZWFuLg0KI2VuZGlmDQojZW5kaWYNCnR5cGVkZWYgaW50OF90ICAgICAgICAgICAgICAgICAgUzggOyAgLy8hPCA4LWJpdCBzaWduZWQgaW50ZWdlci4NCnR5cGVkZWYgdWludDhfdCAgICAgICAgICAgICAgICAgVTggOyAgLy8hPCA4LWJpdCB1bnNpZ25lZCBpbnRlZ2VyLg0KdHlwZWRlZiBpbnQxNl90ICAgICAgICAgICAgICAgICBTMTY7ICAvLyE8IDE2LWJpdCBzaWduZWQgaW50ZWdlci4NCnR5cGVkZWYgdWludDE2X3QgICAgICAgICAgICAgICAgVTE2OyAgLy8hPCAxNi1iaXQgdW5zaWduZWQgaW50ZWdlci4NCnR5cGVkZWYgdWludDE2X3QgICAgICAgICAgICAgICAgbGUxNl90Ow0KdHlwZWRlZiB1aW50MTZfdCAgICAgICAgICAgICAgICBiZTE2X3Q7DQp0eXBlZGVmIGludDMyX3QgICAgICAgICAgICAgICAgIFMzMjsgIC8vITwgMzItYml0IHNpZ25lZCBpbnRlZ2VyLg0KdHlwZWRlZiB1aW50MzJfdCAgICAgICAgICAgICAgICBVMzI7ICAvLyE8IDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VyLg0KdHlwZWRlZiB1aW50MzJfdCAgICAgICAgICAgICAgICBsZTMyX3Q7DQp0eXBlZGVmIHVpbnQzMl90ICAgICAgICAgICAgICAgIGJlMzJfdDsNCnR5cGVkZWYgaW50NjRfdCAgICAgICAgICAgICAgICAgUzY0OyAgLy8hPCA2NC1iaXQgc2lnbmVkIGludGVnZXIuDQp0eXBlZGVmIHVpbnQ2NF90ICAgICAgICAgICAgICAgIFU2NDsgIC8vITwgNjQtYml0IHVuc2lnbmVkIGludGVnZXIuDQp0eXBlZGVmIGZsb2F0ICAgICAgICAgICAgICAgICAgIEYzMjsgIC8vITwgMzItYml0IGZsb2F0aW5nLXBvaW50IG51bWJlci4NCnR5cGVkZWYgZG91YmxlICAgICAgICAgICAgICAgICAgRjY0OyAgLy8hPCA2NC1iaXQgZmxvYXRpbmctcG9pbnQgbnVtYmVyLg0KdHlwZWRlZiB1aW50MzJfdCAgICAgICAgICAgICAgICBpcmFtX3NpemVfdDsNCi8vISBAfQ0KDQoNCi8qISBcbmFtZSBTdGF0dXMgVHlwZXMNCiAqLw0KLy8hIEB7DQp0eXBlZGVmIGJvb2wgICAgICAgICAgICAgICAgU3RhdHVzX2Jvb2xfdDsgIC8vITwgQm9vbGVhbiBzdGF0dXMuDQp0eXBlZGVmIFU4ICAgICAgICAgICAgICAgICAgU3RhdHVzX3Q7ICAgICAgIC8vITwgOC1iaXQtY29kZWQgc3RhdHVzLg0KLy8hIEB9DQoNCg0KLyohIFxuYW1lIEFsaWFzaW5nIEFnZ3JlZ2F0ZSBUeXBlcw0KICovDQovLyEgQHsNCg0KLy8hIDE2LWJpdCB1bmlvbi4NCnR5cGVkZWYgdW5pb24NCnsNCiAgUzE2IHMxNiAgIDsNCiAgVTE2IHUxNiAgIDsNCiAgUzggIHM4IFsyXTsNCiAgVTggIHU4IFsyXTsNCn0gVW5pb24xNjsNCg0KLy8hIDMyLWJpdCB1bmlvbi4NCnR5cGVkZWYgdW5pb24NCnsNCiAgUzMyIHMzMiAgIDsNCiAgVTMyIHUzMiAgIDsNCiAgUzE2IHMxNlsyXTsNCiAgVTE2IHUxNlsyXTsNCiAgUzggIHM4IFs0XTsNCiAgVTggIHU4IFs0XTsNCn0gVW5pb24zMjsNCg0KLy8hIDY0LWJpdCB1bmlvbi4NCnR5cGVkZWYgdW5pb24NCnsNCiAgUzY0IHM2NCAgIDsNCiAgVTY0IHU2NCAgIDsNCiAgUzMyIHMzMlsyXTsNCiAgVTMyIHUzMlsyXTsNCiAgUzE2IHMxNls0XTsNCiAgVTE2IHUxNls0XTsNCiAgUzggIHM4IFs4XTsNCiAgVTggIHU4IFs4XTsNCn0gVW5pb242NDsNCg0KLy8hIFVuaW9uIG9mIHBvaW50ZXJzIHRvIDY0LSwgMzItLCAxNi0gYW5kIDgtYml0IHVuc2lnbmVkIGludGVnZXJzLg0KdHlwZWRlZiB1bmlvbg0Kew0KICBTNjQgKnM2NHB0cjsNCiAgVTY0ICp1NjRwdHI7DQogIFMzMiAqczMycHRyOw0KICBVMzIgKnUzMnB0cjsNCiAgUzE2ICpzMTZwdHI7DQogIFUxNiAqdTE2cHRyOw0KICBTOCAgKnM4cHRyIDsNCiAgVTggICp1OHB0ciA7DQp9IFVuaW9uUHRyOw0KDQovLyEgVW5pb24gb2YgcG9pbnRlcnMgdG8gdm9sYXRpbGUgNjQtLCAzMi0sIDE2LSBhbmQgOC1iaXQgdW5zaWduZWQgaW50ZWdlcnMuDQp0eXBlZGVmIHVuaW9uDQp7DQogIHZvbGF0aWxlIFM2NCAqczY0cHRyOw0KICB2b2xhdGlsZSBVNjQgKnU2NHB0cjsNCiAgdm9sYXRpbGUgUzMyICpzMzJwdHI7DQogIHZvbGF0aWxlIFUzMiAqdTMycHRyOw0KICB2b2xhdGlsZSBTMTYgKnMxNnB0cjsNCiAgdm9sYXRpbGUgVTE2ICp1MTZwdHI7DQogIHZvbGF0aWxlIFM4ICAqczhwdHIgOw0KICB2b2xhdGlsZSBVOCAgKnU4cHRyIDsNCn0gVW5pb25WUHRyOw0KDQovLyEgVW5pb24gb2YgcG9pbnRlcnMgdG8gY29uc3RhbnQgNjQtLCAzMi0sIDE2LSBhbmQgOC1iaXQgdW5zaWduZWQgaW50ZWdlcnMuDQp0eXBlZGVmIHVuaW9uDQp7DQogIGNvbnN0IFM2NCAqczY0cHRyOw0KICBjb25zdCBVNjQgKnU2NHB0cjsNCiAgY29uc3QgUzMyICpzMzJwdHI7DQogIGNvbnN0IFUzMiAqdTMycHRyOw0KICBjb25zdCBTMTYgKnMxNnB0cjsNCiAgY29uc3QgVTE2ICp1MTZwdHI7DQogIGNvbnN0IFM4ICAqczhwdHIgOw0KICBjb25zdCBVOCAgKnU4cHRyIDsNCn0gVW5pb25DUHRyOw0KDQovLyEgVW5pb24gb2YgcG9pbnRlcnMgdG8gY29uc3RhbnQgdm9sYXRpbGUgNjQtLCAzMi0sIDE2LSBhbmQgOC1iaXQgdW5zaWduZWQgaW50ZWdlcnMuDQp0eXBlZGVmIHVuaW9uDQp7DQogIGNvbnN0IHZvbGF0aWxlIFM2NCAqczY0cHRyOw0KICBjb25zdCB2b2xhdGlsZSBVNjQgKnU2NHB0cjsNCiAgY29uc3Qgdm9sYXRpbGUgUzMyICpzMzJwdHI7DQogIGNvbnN0IHZvbGF0aWxlIFUzMiAqdTMycHRyOw0KICBjb25zdCB2b2xhdGlsZSBTMTYgKnMxNnB0cjsNCiAgY29uc3Qgdm9sYXRpbGUgVTE2ICp1MTZwdHI7DQogIGNvbnN0IHZvbGF0aWxlIFM4ICAqczhwdHIgOw0KICBjb25zdCB2b2xhdGlsZSBVOCAgKnU4cHRyIDsNCn0gVW5pb25DVlB0cjsNCg0KLy8hIFN0cnVjdHVyZSBvZiBwb2ludGVycyB0byA2NC0sIDMyLSwgMTYtIGFuZCA4LWJpdCB1bnNpZ25lZCBpbnRlZ2Vycy4NCnR5cGVkZWYgc3RydWN0DQp7DQogIFM2NCAqczY0cHRyOw0KICBVNjQgKnU2NHB0cjsNCiAgUzMyICpzMzJwdHI7DQogIFUzMiAqdTMycHRyOw0KICBTMTYgKnMxNnB0cjsNCiAgVTE2ICp1MTZwdHI7DQogIFM4ICAqczhwdHIgOw0KICBVOCAgKnU4cHRyIDsNCn0gU3RydWN0UHRyOw0KDQovLyEgU3RydWN0dXJlIG9mIHBvaW50ZXJzIHRvIHZvbGF0aWxlIDY0LSwgMzItLCAxNi0gYW5kIDgtYml0IHVuc2lnbmVkIGludGVnZXJzLg0KdHlwZWRlZiBzdHJ1Y3QNCnsNCiAgdm9sYXRpbGUgUzY0ICpzNjRwdHI7DQogIHZvbGF0aWxlIFU2NCAqdTY0cHRyOw0KICB2b2xhdGlsZSBTMzIgKnMzMnB0cjsNCiAgdm9sYXRpbGUgVTMyICp1MzJwdHI7DQogIHZvbGF0aWxlIFMxNiAqczE2cHRyOw0KICB2b2xhdGlsZSBVMTYgKnUxNnB0cjsNCiAgdm9sYXRpbGUgUzggICpzOHB0ciA7DQogIHZvbGF0aWxlIFU4ICAqdThwdHIgOw0KfSBTdHJ1Y3RWUHRyOw0KDQovLyEgU3RydWN0dXJlIG9mIHBvaW50ZXJzIHRvIGNvbnN0YW50IDY0LSwgMzItLCAxNi0gYW5kIDgtYml0IHVuc2lnbmVkIGludGVnZXJzLg0KdHlwZWRlZiBzdHJ1Y3QNCnsNCiAgY29uc3QgUzY0ICpzNjRwdHI7DQogIGNvbnN0IFU2NCAqdTY0cHRyOw0KICBjb25zdCBTMzIgKnMzMnB0cjsNCiAgY29uc3QgVTMyICp1MzJwdHI7DQogIGNvbnN0IFMxNiAqczE2cHRyOw0KICBjb25zdCBVMTYgKnUxNnB0cjsNCiAgY29uc3QgUzggICpzOHB0ciA7DQogIGNvbnN0IFU4ICAqdThwdHIgOw0KfSBTdHJ1Y3RDUHRyOw0KDQovLyEgU3RydWN0dXJlIG9mIHBvaW50ZXJzIHRvIGNvbnN0YW50IHZvbGF0aWxlIDY0LSwgMzItLCAxNi0gYW5kIDgtYml0IHVuc2lnbmVkIGludGVnZXJzLg0KdHlwZWRlZiBzdHJ1Y3QNCnsNCiAgY29uc3Qgdm9sYXRpbGUgUzY0ICpzNjRwdHI7DQogIGNvbnN0IHZvbGF0aWxlIFU2NCAqdTY0cHRyOw0KICBjb25zdCB2b2xhdGlsZSBTMzIgKnMzMnB0cjsNCiAgY29uc3Qgdm9sYXRpbGUgVTMyICp1MzJwdHI7DQogIGNvbnN0IHZvbGF0aWxlIFMxNiAqczE2cHRyOw0KICBjb25zdCB2b2xhdGlsZSBVMTYgKnUxNnB0cjsNCiAgY29uc3Qgdm9sYXRpbGUgUzggICpzOHB0ciA7DQogIGNvbnN0IHZvbGF0aWxlIFU4ICAqdThwdHIgOw0KfSBTdHJ1Y3RDVlB0cjsNCg0KLy8hIEB9DQoNCiNlbmRpZiAgLy8gI2lmbmRlZiBfX0FTU0VNQkxZX18NCg0KLyohIFxuYW1lIFVzdWFsIENvbnN0YW50cw0KICovDQovLyEgQHsNCiNkZWZpbmUgRElTQUJMRSAgIDANCiNkZWZpbmUgRU5BQkxFICAgIDENCiNpZm5kZWYgX19jcGx1c3BsdXMNCiNpZiAhZGVmaW5lZChfX2Jvb2xfdHJ1ZV9mYWxzZV9hcmVfZGVmaW5lZCkNCiNkZWZpbmUgZmFsc2UgICAgIDANCiNkZWZpbmUgdHJ1ZSAgICAgIDENCiNlbmRpZg0KI2VuZGlmDQojZGVmaW5lIFBBU1MgICAgICAwDQojZGVmaW5lIEZBSUwgICAgICAxDQojZGVmaW5lIExPVyAgICAgICAwDQojZGVmaW5lIEhJR0ggICAgICAxDQovLyEgQH0NCg0KDQojaWZuZGVmIF9fQVNTRU1CTFlfXyAvLyBub3QgZm9yIGFzc2VtYmxpbmcuDQoNCi8vISBcbmFtZSBPcHRpbWl6YXRpb24gQ29udHJvbA0KLy9Aew0KDQovKioNCiAqIFxkZWYgbGlrZWx5KGV4cCkNCiAqIFxicmllZiBUaGUgZXhwcmVzc2lvbiBcYSBleHAgaXMgbGlrZWx5IHRvIGJlIHRydWUNCiAqLw0KI2lmbmRlZiBsaWtlbHkNCiMgICBkZWZpbmUgbGlrZWx5KGV4cCkgICAgKGV4cCkNCiNlbmRpZg0KDQovKioNCiAqIFxkZWYgdW5saWtlbHkoZXhwKQ0KICogXGJyaWVmIFRoZSBleHByZXNzaW9uIFxhIGV4cCBpcyB1bmxpa2VseSB0byBiZSB0cnVlDQogKi8NCiNpZm5kZWYgdW5saWtlbHkNCiMgICBkZWZpbmUgdW5saWtlbHkoZXhwKSAgKGV4cCkNCiNlbmRpZg0KDQovKioNCiAqIFxkZWYgaXNfY29uc3RhbnQoZXhwKQ0KICogXGJyaWVmIERldGVybWluZSBpZiBhbiBleHByZXNzaW9uIGV2YWx1YXRlcyB0byBhIGNvbnN0YW50IHZhbHVlLg0KICoNCiAqIFxwYXJhbSBleHAgQW55IGV4cHJlc3Npb24NCiAqDQogKiBccmV0dXJuIHRydWUgaWYgXGEgZXhwIGlzIGNvbnN0YW50LCBmYWxzZSBvdGhlcndpc2UuDQogKi8NCiNpZiAoZGVmaW5lZCBfX0dOVUNfXykgfHwgKGRlZmluZWQgX19DQ19BUk0pDQojICAgZGVmaW5lIGlzX2NvbnN0YW50KGV4cCkgICAgICAgX19idWlsdGluX2NvbnN0YW50X3AoZXhwKQ0KI2Vsc2UNCiMgICBkZWZpbmUgaXNfY29uc3RhbnQoZXhwKSAgICAgICAoMCkNCiNlbmRpZg0KDQovLyEgQH0NCg0KLyohIFxuYW1lIEJpdC1GaWVsZCBIYW5kbGluZw0KICovDQovLyEgQHsNCg0KLyohIFxicmllZiBSZWFkcyB0aGUgYml0cyBvZiBhIHZhbHVlIHNwZWNpZmllZCBieSBhIGdpdmVuIGJpdC1tYXNrLg0KICoNCiAqIFxwYXJhbSB2YWx1ZSBWYWx1ZSB0byByZWFkIGJpdHMgZnJvbS4NCiAqIFxwYXJhbSBtYXNrICBCaXQtbWFzayBpbmRpY2F0aW5nIGJpdHMgdG8gcmVhZC4NCiAqDQogKiBccmV0dXJuIFJlYWQgYml0cy4NCiAqLw0KI2RlZmluZSBSZF9iaXRzKCB2YWx1ZSwgbWFzaykgICAgICAgICgodmFsdWUpICYgKG1hc2spKQ0KDQovKiEgXGJyaWVmIFdyaXRlcyB0aGUgYml0cyBvZiBhIEMgbHZhbHVlIHNwZWNpZmllZCBieSBhIGdpdmVuIGJpdC1tYXNrLg0KICoNCiAqIFxwYXJhbSBsdmFsdWUgIEMgbHZhbHVlIHRvIHdyaXRlIGJpdHMgdG8uDQogKiBccGFyYW0gbWFzayAgICBCaXQtbWFzayBpbmRpY2F0aW5nIGJpdHMgdG8gd3JpdGUuDQogKiBccGFyYW0gYml0cyAgICBCaXRzIHRvIHdyaXRlLg0KICoNCiAqIFxyZXR1cm4gUmVzdWx0aW5nIHZhbHVlIHdpdGggd3JpdHRlbiBiaXRzLg0KICovDQojZGVmaW5lIFdyX2JpdHMobHZhbHVlLCBtYXNrLCBiaXRzKSAgKChsdmFsdWUpID0gKChsdmFsdWUpICYgfihtYXNrKSkgfFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGJpdHMgICkgJiAgKG1hc2spKSkNCg0KLyohIFxicmllZiBUZXN0cyB0aGUgYml0cyBvZiBhIHZhbHVlIHNwZWNpZmllZCBieSBhIGdpdmVuIGJpdC1tYXNrLg0KICoNCiAqIFxwYXJhbSB2YWx1ZSBWYWx1ZSBvZiB3aGljaCB0byB0ZXN0IGJpdHMuDQogKiBccGFyYW0gbWFzayAgQml0LW1hc2sgaW5kaWNhdGluZyBiaXRzIHRvIHRlc3QuDQogKg0KICogXHJldHVybiBcYyAxIGlmIGF0IGxlYXN0IG9uZSBvZiB0aGUgdGVzdGVkIGJpdHMgaXMgc2V0LCBlbHNlIFxjIDAuDQogKi8NCiNkZWZpbmUgVHN0X2JpdHMoIHZhbHVlLCBtYXNrKSAgKFJkX2JpdHModmFsdWUsIG1hc2spICE9IDApDQoNCi8qISBcYnJpZWYgQ2xlYXJzIHRoZSBiaXRzIG9mIGEgQyBsdmFsdWUgc3BlY2lmaWVkIGJ5IGEgZ2l2ZW4gYml0LW1hc2suDQogKg0KICogXHBhcmFtIGx2YWx1ZSAgQyBsdmFsdWUgb2Ygd2hpY2ggdG8gY2xlYXIgYml0cy4NCiAqIFxwYXJhbSBtYXNrICAgIEJpdC1tYXNrIGluZGljYXRpbmcgYml0cyB0byBjbGVhci4NCiAqDQogKiBccmV0dXJuIFJlc3VsdGluZyB2YWx1ZSB3aXRoIGNsZWFyZWQgYml0cy4NCiAqLw0KI2RlZmluZSBDbHJfYml0cyhsdmFsdWUsIG1hc2spICAoKGx2YWx1ZSkgJj0gfihtYXNrKSkNCg0KLyohIFxicmllZiBTZXRzIHRoZSBiaXRzIG9mIGEgQyBsdmFsdWUgc3BlY2lmaWVkIGJ5IGEgZ2l2ZW4gYml0LW1hc2suDQogKg0KICogXHBhcmFtIGx2YWx1ZSAgQyBsdmFsdWUgb2Ygd2hpY2ggdG8gc2V0IGJpdHMuDQogKiBccGFyYW0gbWFzayAgICBCaXQtbWFzayBpbmRpY2F0aW5nIGJpdHMgdG8gc2V0Lg0KICoNCiAqIFxyZXR1cm4gUmVzdWx0aW5nIHZhbHVlIHdpdGggc2V0IGJpdHMuDQogKi8NCiNkZWZpbmUgU2V0X2JpdHMobHZhbHVlLCBtYXNrKSAgKChsdmFsdWUpIHw9ICAobWFzaykpDQoNCi8qISBcYnJpZWYgVG9nZ2xlcyB0aGUgYml0cyBvZiBhIEMgbHZhbHVlIHNwZWNpZmllZCBieSBhIGdpdmVuIGJpdC1tYXNrLg0KICoNCiAqIFxwYXJhbSBsdmFsdWUgIEMgbHZhbHVlIG9mIHdoaWNoIHRvIHRvZ2dsZSBiaXRzLg0KICogXHBhcmFtIG1hc2sgICAgQml0LW1hc2sgaW5kaWNhdGluZyBiaXRzIHRvIHRvZ2dsZS4NCiAqDQogKiBccmV0dXJuIFJlc3VsdGluZyB2YWx1ZSB3aXRoIHRvZ2dsZWQgYml0cy4NCiAqLw0KI2RlZmluZSBUZ2xfYml0cyhsdmFsdWUsIG1hc2spICAoKGx2YWx1ZSkgXj0gIChtYXNrKSkNCg0KLyohIFxicmllZiBSZWFkcyB0aGUgYml0LWZpZWxkIG9mIGEgdmFsdWUgc3BlY2lmaWVkIGJ5IGEgZ2l2ZW4gYml0LW1hc2suDQogKg0KICogXHBhcmFtIHZhbHVlIFZhbHVlIHRvIHJlYWQgYSBiaXQtZmllbGQgZnJvbS4NCiAqIFxwYXJhbSBtYXNrICBCaXQtbWFzayBpbmRpY2F0aW5nIHRoZSBiaXQtZmllbGQgdG8gcmVhZC4NCiAqDQogKiBccmV0dXJuIFJlYWQgYml0LWZpZWxkLg0KICovDQojZGVmaW5lIFJkX2JpdGZpZWxkKCB2YWx1ZSwgbWFzaykgICAgICAgICAgIChSZF9iaXRzKCB2YWx1ZSwgbWFzaykgPj4gY3R6KG1hc2spKQ0KDQovKiEgXGJyaWVmIFdyaXRlcyB0aGUgYml0LWZpZWxkIG9mIGEgQyBsdmFsdWUgc3BlY2lmaWVkIGJ5IGEgZ2l2ZW4gYml0LW1hc2suDQogKg0KICogXHBhcmFtIGx2YWx1ZSAgICBDIGx2YWx1ZSB0byB3cml0ZSBhIGJpdC1maWVsZCB0by4NCiAqIFxwYXJhbSBtYXNrICAgICAgQml0LW1hc2sgaW5kaWNhdGluZyB0aGUgYml0LWZpZWxkIHRvIHdyaXRlLg0KICogXHBhcmFtIGJpdGZpZWxkICBCaXQtZmllbGQgdG8gd3JpdGUuDQogKg0KICogXHJldHVybiBSZXN1bHRpbmcgdmFsdWUgd2l0aCB3cml0dGVuIGJpdC1maWVsZC4NCiAqLw0KI2RlZmluZSBXcl9iaXRmaWVsZChsdmFsdWUsIG1hc2ssIGJpdGZpZWxkKSAoV3JfYml0cyhsdmFsdWUsIG1hc2ssIChVMzIpKGJpdGZpZWxkKSA8PCBjdHoobWFzaykpKQ0KDQovLyEgQH0NCg0KDQovKiEgXG5hbWUgWmVyby1CaXQgQ291bnRpbmcNCiAqDQogKiBVbmRlciBHQ0MsIF9fYnVpbHRpbl9jbHogYW5kIF9fYnVpbHRpbl9jdHogYmVoYXZlIGxpa2UgbWFjcm9zIHdoZW4NCiAqIGFwcGxpZWQgdG8gY29uc3RhbnQgZXhwcmVzc2lvbnMgKHZhbHVlcyBrbm93biBhdCBjb21waWxlIHRpbWUpLCBzbyB0aGV5IGFyZQ0KICogbW9yZSBvcHRpbWl6ZWQgdGhhbiB0aGUgdXNlIG9mIHRoZSBjb3JyZXNwb25kaW5nIGFzc2VtYmx5IGluc3RydWN0aW9ucyBhbmQNCiAqIHRoZXkgY2FuIGJlIHVzZWQgYXMgY29uc3RhbnQgZXhwcmVzc2lvbnMgZS5nLiB0byBpbml0aWFsaXplIG9iamVjdHMgaGF2aW5nDQogKiBzdGF0aWMgc3RvcmFnZSBkdXJhdGlvbiwgYW5kIGxpa2UgdGhlIGNvcnJlc3BvbmRpbmcgYXNzZW1ibHkgaW5zdHJ1Y3Rpb25zDQogKiB3aGVuIGFwcGxpZWQgdG8gbm9uLWNvbnN0YW50IGV4cHJlc3Npb25zICh2YWx1ZXMgdW5rbm93biBhdCBjb21waWxlIHRpbWUpLCBzbw0KICogdGhleSBhcmUgbW9yZSBvcHRpbWl6ZWQgdGhhbiBhbiBhc3NlbWJseSBwZXJpcGhyYXNpcy4gSGVuY2UsIGNseiBhbmQgY3R6DQogKiBlbnN1cmUgYSBwb3NzaWJsZSBhbmQgb3B0aW1pemVkIGJlaGF2aW9yIGZvciBib3RoIGNvbnN0YW50IGFuZCBub24tY29uc3RhbnQNCiAqIGV4cHJlc3Npb25zLg0KICovDQovLyEgQHsNCg0KLyohIFxicmllZiBDb3VudHMgdGhlIGxlYWRpbmcgemVybyBiaXRzIG9mIHRoZSBnaXZlbiB2YWx1ZSBjb25zaWRlcmVkIGFzIGEgMzItYml0IGludGVnZXIuDQogKg0KICogXHBhcmFtIHUgVmFsdWUgb2Ygd2hpY2ggdG8gY291bnQgdGhlIGxlYWRpbmcgemVybyBiaXRzLg0KICoNCiAqIFxyZXR1cm4gVGhlIGNvdW50IG9mIGxlYWRpbmcgemVybyBiaXRzIGluIFxhIHUuDQogKi8NCiNpZiAoZGVmaW5lZCBfX0dOVUNfXykgfHwgKGRlZmluZWQgX19DQ19BUk0pDQojICAgZGVmaW5lIGNseih1KSAgICAgICAgICAgICAgX19idWlsdGluX2Nseih1KQ0KI2VsaWYgKGRlZmluZWQgX19JQ0NBUk1fXykNCiMgICBkZWZpbmUgY2x6KHUpICAgICAgICAgICAgICBfX0NMWih1KQ0KI2Vsc2UNCiMgICBkZWZpbmUgY2x6KHUpICAgICAgICAgICAgICAoKCh1KSA9PSAwKSAgICAgICAgICA/IDMyIDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHUpICYgKDF1bCA8PCAzMSkpID8gIDAgOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodSkgJiAoMXVsIDw8IDMwKSkgPyAgMSA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1KSAmICgxdWwgPDwgMjkpKSA/ICAyIDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHUpICYgKDF1bCA8PCAyOCkpID8gIDMgOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodSkgJiAoMXVsIDw8IDI3KSkgPyAgNCA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1KSAmICgxdWwgPDwgMjYpKSA/ICA1IDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHUpICYgKDF1bCA8PCAyNSkpID8gIDYgOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodSkgJiAoMXVsIDw8IDI0KSkgPyAgNyA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1KSAmICgxdWwgPDwgMjMpKSA/ICA4IDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHUpICYgKDF1bCA8PCAyMikpID8gIDkgOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodSkgJiAoMXVsIDw8IDIxKSkgPyAxMCA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1KSAmICgxdWwgPDwgMjApKSA/IDExIDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHUpICYgKDF1bCA8PCAxOSkpID8gMTIgOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodSkgJiAoMXVsIDw8IDE4KSkgPyAxMyA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1KSAmICgxdWwgPDwgMTcpKSA/IDE0IDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHUpICYgKDF1bCA8PCAxNikpID8gMTUgOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodSkgJiAoMXVsIDw8IDE1KSkgPyAxNiA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1KSAmICgxdWwgPDwgMTQpKSA/IDE3IDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHUpICYgKDF1bCA8PCAxMykpID8gMTggOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodSkgJiAoMXVsIDw8IDEyKSkgPyAxOSA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1KSAmICgxdWwgPDwgMTEpKSA/IDIwIDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHUpICYgKDF1bCA8PCAxMCkpID8gMjEgOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodSkgJiAoMXVsIDw8ICA5KSkgPyAyMiA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1KSAmICgxdWwgPDwgIDgpKSA/IDIzIDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHUpICYgKDF1bCA8PCAgNykpID8gMjQgOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodSkgJiAoMXVsIDw8ICA2KSkgPyAyNSA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1KSAmICgxdWwgPDwgIDUpKSA/IDI2IDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHUpICYgKDF1bCA8PCAgNCkpID8gMjcgOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodSkgJiAoMXVsIDw8ICAzKSkgPyAyOCA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1KSAmICgxdWwgPDwgIDIpKSA/IDI5IDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHUpICYgKDF1bCA8PCAgMSkpID8gMzAgOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxKQ0KI2VuZGlmDQoNCi8qISBcYnJpZWYgQ291bnRzIHRoZSB0cmFpbGluZyB6ZXJvIGJpdHMgb2YgdGhlIGdpdmVuIHZhbHVlIGNvbnNpZGVyZWQgYXMgYSAzMi1iaXQgaW50ZWdlci4NCiAqDQogKiBccGFyYW0gdSBWYWx1ZSBvZiB3aGljaCB0byBjb3VudCB0aGUgdHJhaWxpbmcgemVybyBiaXRzLg0KICoNCiAqIFxyZXR1cm4gVGhlIGNvdW50IG9mIHRyYWlsaW5nIHplcm8gYml0cyBpbiBcYSB1Lg0KICovDQojaWYgKGRlZmluZWQgX19HTlVDX18pIHx8IChkZWZpbmVkIF9fQ0NfQVJNKQ0KIyAgIGRlZmluZSBjdHoodSkgICAgICAgICAgICAgIF9fYnVpbHRpbl9jdHoodSkNCiNlbHNlDQojICAgZGVmaW5lIGN0eih1KSAgICAgICAgICAgICAgKCh1KSAmICgxdWwgPDwgIDApID8gIDAgOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1KSAmICgxdWwgPDwgIDEpID8gIDEgOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1KSAmICgxdWwgPDwgIDIpID8gIDIgOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1KSAmICgxdWwgPDwgIDMpID8gIDMgOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1KSAmICgxdWwgPDwgIDQpID8gIDQgOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1KSAmICgxdWwgPDwgIDUpID8gIDUgOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1KSAmICgxdWwgPDwgIDYpID8gIDYgOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1KSAmICgxdWwgPDwgIDcpID8gIDcgOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1KSAmICgxdWwgPDwgIDgpID8gIDggOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1KSAmICgxdWwgPDwgIDkpID8gIDkgOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1KSAmICgxdWwgPDwgMTApID8gMTAgOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1KSAmICgxdWwgPDwgMTEpID8gMTEgOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1KSAmICgxdWwgPDwgMTIpID8gMTIgOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1KSAmICgxdWwgPDwgMTMpID8gMTMgOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1KSAmICgxdWwgPDwgMTQpID8gMTQgOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1KSAmICgxdWwgPDwgMTUpID8gMTUgOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1KSAmICgxdWwgPDwgMTYpID8gMTYgOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1KSAmICgxdWwgPDwgMTcpID8gMTcgOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1KSAmICgxdWwgPDwgMTgpID8gMTggOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1KSAmICgxdWwgPDwgMTkpID8gMTkgOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1KSAmICgxdWwgPDwgMjApID8gMjAgOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1KSAmICgxdWwgPDwgMjEpID8gMjEgOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1KSAmICgxdWwgPDwgMjIpID8gMjIgOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1KSAmICgxdWwgPDwgMjMpID8gMjMgOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1KSAmICgxdWwgPDwgMjQpID8gMjQgOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1KSAmICgxdWwgPDwgMjUpID8gMjUgOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1KSAmICgxdWwgPDwgMjYpID8gMjYgOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1KSAmICgxdWwgPDwgMjcpID8gMjcgOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1KSAmICgxdWwgPDwgMjgpID8gMjggOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1KSAmICgxdWwgPDwgMjkpID8gMjkgOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1KSAmICgxdWwgPDwgMzApID8gMzAgOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1KSAmICgxdWwgPDwgMzEpID8gMzEgOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyKQ0KI2VuZGlmDQoNCi8vISBAfQ0KDQoNCi8qISBcbmFtZSBCaXQgUmV2ZXJzaW5nDQogKi8NCi8vISBAew0KDQovKiEgXGJyaWVmIFJldmVyc2VzIHRoZSBiaXRzIG9mIFxhIHU4Lg0KICoNCiAqIFxwYXJhbSB1OCAgVTggb2Ygd2hpY2ggdG8gcmV2ZXJzZSB0aGUgYml0cy4NCiAqDQogKiBccmV0dXJuIFZhbHVlIHJlc3VsdGluZyBmcm9tIFxhIHU4IHdpdGggcmV2ZXJzZWQgYml0cy4NCiAqLw0KI2RlZmluZSBiaXRfcmV2ZXJzZTgodTgpICAgICgoVTgpKGJpdF9yZXZlcnNlMzIoKFU4KSh1OCkpID4+IDI0KSkNCg0KLyohIFxicmllZiBSZXZlcnNlcyB0aGUgYml0cyBvZiBcYSB1MTYuDQogKg0KICogXHBhcmFtIHUxNiBVMTYgb2Ygd2hpY2ggdG8gcmV2ZXJzZSB0aGUgYml0cy4NCiAqDQogKiBccmV0dXJuIFZhbHVlIHJlc3VsdGluZyBmcm9tIFxhIHUxNiB3aXRoIHJldmVyc2VkIGJpdHMuDQogKi8NCiNkZWZpbmUgYml0X3JldmVyc2UxNih1MTYpICAoKFUxNikoYml0X3JldmVyc2UzMigoVTE2KSh1MTYpKSA+PiAxNikpDQoNCi8qISBcYnJpZWYgUmV2ZXJzZXMgdGhlIGJpdHMgb2YgXGEgdTMyLg0KICoNCiAqIFxwYXJhbSB1MzIgVTMyIG9mIHdoaWNoIHRvIHJldmVyc2UgdGhlIGJpdHMuDQogKg0KICogXHJldHVybiBWYWx1ZSByZXN1bHRpbmcgZnJvbSBcYSB1MzIgd2l0aCByZXZlcnNlZCBiaXRzLg0KICovDQojZGVmaW5lIGJpdF9yZXZlcnNlMzIodTMyKSAgIF9fUkJJVCh1MzIpDQoNCi8qISBcYnJpZWYgUmV2ZXJzZXMgdGhlIGJpdHMgb2YgXGEgdTY0Lg0KICoNCiAqIFxwYXJhbSB1NjQgVTY0IG9mIHdoaWNoIHRvIHJldmVyc2UgdGhlIGJpdHMuDQogKg0KICogXHJldHVybiBWYWx1ZSByZXN1bHRpbmcgZnJvbSBcYSB1NjQgd2l0aCByZXZlcnNlZCBiaXRzLg0KICovDQojZGVmaW5lIGJpdF9yZXZlcnNlNjQodTY0KSAgKChVNjQpKCgoVTY0KWJpdF9yZXZlcnNlMzIoKFU2NCkodTY0KSA+PiAzMikpIHxcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVTY0KWJpdF9yZXZlcnNlMzIoKFU2NCkodTY0KSkgPDwgMzIpKSkNCg0KLy8hIEB9DQoNCg0KLyohIFxuYW1lIEFsaWdubWVudA0KICovDQovLyEgQHsNCg0KLyohIFxicmllZiBUZXN0cyBhbGlnbm1lbnQgb2YgdGhlIG51bWJlciBcYSB2YWwgd2l0aCB0aGUgXGEgbiBib3VuZGFyeS4NCiAqDQogKiBccGFyYW0gdmFsIElucHV0IHZhbHVlLg0KICogXHBhcmFtIG4gICBCb3VuZGFyeS4NCiAqDQogKiBccmV0dXJuIFxjIDEgaWYgdGhlIG51bWJlciBcYSB2YWwgaXMgYWxpZ25lZCB3aXRoIHRoZSBcYSBuIGJvdW5kYXJ5LCBlbHNlIFxjIDAuDQogKi8NCiNkZWZpbmUgVGVzdF9hbGlnbih2YWwsIG4gICAgICkgKCFUc3RfYml0cyggdmFsLCAobikgLSAxICAgICApICAgKQ0KDQovKiEgXGJyaWVmIEdldHMgYWxpZ25tZW50IG9mIHRoZSBudW1iZXIgXGEgdmFsIHdpdGggcmVzcGVjdCB0byB0aGUgXGEgbiBib3VuZGFyeS4NCiAqDQogKiBccGFyYW0gdmFsIElucHV0IHZhbHVlLg0KICogXHBhcmFtIG4gICBCb3VuZGFyeS4NCiAqDQogKiBccmV0dXJuIEFsaWdubWVudCBvZiB0aGUgbnVtYmVyIFxhIHZhbCB3aXRoIHJlc3BlY3QgdG8gdGhlIFxhIG4gYm91bmRhcnkuDQogKi8NCiNkZWZpbmUgR2V0X2FsaWduKCB2YWwsIG4gICAgICkgKCAgUmRfYml0cyggdmFsLCAobikgLSAxICAgICApICAgKQ0KDQovKiEgXGJyaWVmIFNldHMgYWxpZ25tZW50IG9mIHRoZSBsdmFsdWUgbnVtYmVyIFxhIGx2YWwgdG8gXGEgYWxnIHdpdGggcmVzcGVjdCB0byB0aGUgXGEgbiBib3VuZGFyeS4NCiAqDQogKiBccGFyYW0gbHZhbCAgSW5wdXQvb3V0cHV0IGx2YWx1ZS4NCiAqIFxwYXJhbSBuICAgICBCb3VuZGFyeS4NCiAqIFxwYXJhbSBhbGcgICBBbGlnbm1lbnQuDQogKg0KICogXHJldHVybiBOZXcgdmFsdWUgb2YgXGEgbHZhbCByZXN1bHRpbmcgZnJvbSBpdHMgYWxpZ25tZW50IHNldCB0byBcYSBhbGcgd2l0aCByZXNwZWN0IHRvIHRoZSBcYSBuIGJvdW5kYXJ5Lg0KICovDQojZGVmaW5lIFNldF9hbGlnbihsdmFsLCBuLCBhbGcpICggIFdyX2JpdHMobHZhbCwgKG4pIC0gMSwgYWxnKSAgICkNCg0KLyohIFxicmllZiBBbGlnbnMgdGhlIG51bWJlciBcYSB2YWwgd2l0aCB0aGUgdXBwZXIgXGEgbiBib3VuZGFyeS4NCiAqDQogKiBccGFyYW0gdmFsIElucHV0IHZhbHVlLg0KICogXHBhcmFtIG4gICBCb3VuZGFyeS4NCiAqDQogKiBccmV0dXJuIFZhbHVlIHJlc3VsdGluZyBmcm9tIHRoZSBudW1iZXIgXGEgdmFsIGFsaWduZWQgd2l0aCB0aGUgdXBwZXIgXGEgbiBib3VuZGFyeS4NCiAqLw0KI2RlZmluZSBBbGlnbl91cCggIHZhbCwgbiAgICAgKSAoKCh2YWwpICsgKChuKSAtIDEpKSAmIH4oKG4pIC0gMSkpDQoNCi8qISBcYnJpZWYgQWxpZ25zIHRoZSBudW1iZXIgXGEgdmFsIHdpdGggdGhlIGxvd2VyIFxhIG4gYm91bmRhcnkuDQogKg0KICogXHBhcmFtIHZhbCBJbnB1dCB2YWx1ZS4NCiAqIFxwYXJhbSBuICAgQm91bmRhcnkuDQogKg0KICogXHJldHVybiBWYWx1ZSByZXN1bHRpbmcgZnJvbSB0aGUgbnVtYmVyIFxhIHZhbCBhbGlnbmVkIHdpdGggdGhlIGxvd2VyIFxhIG4gYm91bmRhcnkuDQogKi8NCiNkZWZpbmUgQWxpZ25fZG93bih2YWwsIG4gICAgICkgKCAodmFsKSAgICAgICAgICAgICAgJiB+KChuKSAtIDEpKQ0KDQovLyEgQH0NCg0KDQovKiEgXG5hbWUgTWF0aGVtYXRpY3MNCiAqDQogKiBUaGUgc2FtZSBjb25zaWRlcmF0aW9ucyBhcyBmb3IgY2x6IGFuZCBjdHogYXBwbHkgaGVyZSBidXQgR0NDIGRvZXMgbm90DQogKiBwcm92aWRlIGJ1aWx0LWluIGZ1bmN0aW9ucyB0byBhY2Nlc3MgdGhlIGFzc2VtYmx5IGluc3RydWN0aW9ucyBhYnMsIG1pbiBhbmQNCiAqIG1heCBhbmQgaXQgZG9lcyBub3QgcHJvZHVjZSB0aGVtIGJ5IGl0c2VsZiBpbiBtb3N0IGNhc2VzLCBzbyB0d28gc2V0cyBvZg0KICogbWFjcm9zIGFyZSBkZWZpbmVkIGhlcmU6DQogKiAgIC0gQWJzLCBNaW4gYW5kIE1heCB0byBhcHBseSB0byBjb25zdGFudCBleHByZXNzaW9ucyAodmFsdWVzIGtub3duIGF0DQogKiAgICAgY29tcGlsZSB0aW1lKTsNCiAqICAgLSBhYnMsIG1pbiBhbmQgbWF4IHRvIGFwcGx5IHRvIG5vbi1jb25zdGFudCBleHByZXNzaW9ucyAodmFsdWVzIHVua25vd24gYXQNCiAqICAgICBjb21waWxlIHRpbWUpLCBhYnMgaXMgZm91bmQgaW4gc3RkbGliLmguDQogKi8NCi8vISBAew0KDQovKiEgXGJyaWVmIFRha2VzIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiBcYSBhLg0KICoNCiAqIFxwYXJhbSBhIElucHV0IHZhbHVlLg0KICoNCiAqIFxyZXR1cm4gQWJzb2x1dGUgdmFsdWUgb2YgXGEgYS4NCiAqDQogKiBcbm90ZSBNb3JlIG9wdGltaXplZCBpZiBvbmx5IHVzZWQgd2l0aCB2YWx1ZXMga25vd24gYXQgY29tcGlsZSB0aW1lLg0KICovDQojZGVmaW5lIEFicyhhKSAgICAgICAgICAgICAgKCgoYSkgPCAgMCApID8gLShhKSA6IChhKSkNCg0KLyohIFxicmllZiBUYWtlcyB0aGUgbWluaW1hbCB2YWx1ZSBvZiBcYSBhIGFuZCBcYSBiLg0KICoNCiAqIFxwYXJhbSBhIElucHV0IHZhbHVlLg0KICogXHBhcmFtIGIgSW5wdXQgdmFsdWUuDQogKg0KICogXHJldHVybiBNaW5pbWFsIHZhbHVlIG9mIFxhIGEgYW5kIFxhIGIuDQogKg0KICogXG5vdGUgTW9yZSBvcHRpbWl6ZWQgaWYgb25seSB1c2VkIHdpdGggdmFsdWVzIGtub3duIGF0IGNvbXBpbGUgdGltZS4NCiAqLw0KI2RlZmluZSBNaW4oYSwgYikgICAgICAgICAgICgoKGEpIDwgKGIpKSA/ICAoYSkgOiAoYikpDQoNCi8qISBcYnJpZWYgVGFrZXMgdGhlIG1heGltYWwgdmFsdWUgb2YgXGEgYSBhbmQgXGEgYi4NCiAqDQogKiBccGFyYW0gYSBJbnB1dCB2YWx1ZS4NCiAqIFxwYXJhbSBiIElucHV0IHZhbHVlLg0KICoNCiAqIFxyZXR1cm4gTWF4aW1hbCB2YWx1ZSBvZiBcYSBhIGFuZCBcYSBiLg0KICoNCiAqIFxub3RlIE1vcmUgb3B0aW1pemVkIGlmIG9ubHkgdXNlZCB3aXRoIHZhbHVlcyBrbm93biBhdCBjb21waWxlIHRpbWUuDQogKi8NCiNkZWZpbmUgTWF4KGEsIGIpICAgICAgICAgICAoKChhKSA+IChiKSkgPyAgKGEpIDogKGIpKQ0KDQovLyBhYnMoKSBpcyBhbHJlYWR5IGRlZmluZWQgYnkgc3RkbGliLmgNCg0KLyohIFxicmllZiBUYWtlcyB0aGUgbWluaW1hbCB2YWx1ZSBvZiBcYSBhIGFuZCBcYSBiLg0KICoNCiAqIFxwYXJhbSBhIElucHV0IHZhbHVlLg0KICogXHBhcmFtIGIgSW5wdXQgdmFsdWUuDQogKg0KICogXHJldHVybiBNaW5pbWFsIHZhbHVlIG9mIFxhIGEgYW5kIFxhIGIuDQogKg0KICogXG5vdGUgTW9yZSBvcHRpbWl6ZWQgaWYgb25seSB1c2VkIHdpdGggdmFsdWVzIHVua25vd24gYXQgY29tcGlsZSB0aW1lLg0KICovDQojZGVmaW5lIG1pbihhLCBiKSAgIE1pbihhLCBiKQ0KDQovKiEgXGJyaWVmIFRha2VzIHRoZSBtYXhpbWFsIHZhbHVlIG9mIFxhIGEgYW5kIFxhIGIuDQogKg0KICogXHBhcmFtIGEgSW5wdXQgdmFsdWUuDQogKiBccGFyYW0gYiBJbnB1dCB2YWx1ZS4NCiAqDQogKiBccmV0dXJuIE1heGltYWwgdmFsdWUgb2YgXGEgYSBhbmQgXGEgYi4NCiAqDQogKiBcbm90ZSBNb3JlIG9wdGltaXplZCBpZiBvbmx5IHVzZWQgd2l0aCB2YWx1ZXMgdW5rbm93biBhdCBjb21waWxlIHRpbWUuDQogKi8NCiNkZWZpbmUgbWF4KGEsIGIpICAgTWF4KGEsIGIpDQoNCi8vISBAfQ0KDQoNCi8qISBcYnJpZWYgQ2FsbHMgdGhlIHJvdXRpbmUgYXQgYWRkcmVzcyBcYSBhZGRyLg0KICoNCiAqIEl0IGdlbmVyYXRlcyBhIGxvbmcgY2FsbCBvcGNvZGUuDQogKg0KICogRm9yIGV4YW1wbGUsIGBMb25nX2NhbGwoMHg4MDAwMDAwMCknIGdlbmVyYXRlcyBhIHNvZnR3YXJlIHJlc2V0IG9uIGEgVUMzIGlmDQogKiBpdCBpcyBpbnZva2VkIGZyb20gdGhlIENQVSBzdXBlcnZpc29yIG1vZGUuDQogKg0KICogXHBhcmFtIGFkZHIgIEFkZHJlc3Mgb2YgdGhlIHJvdXRpbmUgdG8gY2FsbC4NCiAqDQogKiBcbm90ZSBJdCBtYXkgYmUgdXNlZCBhcyBhIGxvbmcganVtcCBvcGNvZGUgaW4gc29tZSBzcGVjaWFsIGNhc2VzLg0KICovDQojZGVmaW5lIExvbmdfY2FsbChhZGRyKSAgICAgICAgICAgICAgICAgICAoKCoodm9pZCAoKikodm9pZCkpKGFkZHIpKSgpKQ0KDQoNCi8qISBcbmFtZSBNQ1UgRW5kaWFuaXNtIEhhbmRsaW5nDQogKiBBUk0gaXMgTUNVIGxpdHRsZSBlbmRpYW5pc20uDQogKi8NCi8vISBAew0KI2RlZmluZSAgTVNCKHUxNikgICAgICAgKCgoVTggICopJih1MTYpKVsxXSkgLy8hPCBNb3N0IHNpZ25pZmljYW50IGJ5dGUgb2YgXGEgdTE2Lg0KI2RlZmluZSAgTFNCKHUxNikgICAgICAgKCgoVTggICopJih1MTYpKVswXSkgLy8hPCBMZWFzdCBzaWduaWZpY2FudCBieXRlIG9mIFxhIHUxNi4NCg0KI2RlZmluZSAgTVNIKHUzMikgICAgICAgKCgoVTE2ICopJih1MzIpKVsxXSkgLy8hPCBNb3N0IHNpZ25pZmljYW50IGhhbGYtd29yZCBvZiBcYSB1MzIuDQojZGVmaW5lICBMU0godTMyKSAgICAgICAoKChVMTYgKikmKHUzMikpWzBdKSAvLyE8IExlYXN0IHNpZ25pZmljYW50IGhhbGYtd29yZCBvZiBcYSB1MzIuDQojZGVmaW5lICBNU0IwVyh1MzIpICAgICAoKChVOCAgKikmKHUzMikpWzNdKSAvLyE8IE1vc3Qgc2lnbmlmaWNhbnQgYnl0ZSBvZiAxc3QgcmFuayBvZiBcYSB1MzIuDQojZGVmaW5lICBNU0IxVyh1MzIpICAgICAoKChVOCAgKikmKHUzMikpWzJdKSAvLyE8IE1vc3Qgc2lnbmlmaWNhbnQgYnl0ZSBvZiAybmQgcmFuayBvZiBcYSB1MzIuDQojZGVmaW5lICBNU0IyVyh1MzIpICAgICAoKChVOCAgKikmKHUzMikpWzFdKSAvLyE8IE1vc3Qgc2lnbmlmaWNhbnQgYnl0ZSBvZiAzcmQgcmFuayBvZiBcYSB1MzIuDQojZGVmaW5lICBNU0IzVyh1MzIpICAgICAoKChVOCAgKikmKHUzMikpWzBdKSAvLyE8IE1vc3Qgc2lnbmlmaWNhbnQgYnl0ZSBvZiA0dGggcmFuayBvZiBcYSB1MzIuDQojZGVmaW5lICBMU0IzVyh1MzIpICAgICBNU0IwVyh1MzIpICAgICAgICAgICAvLyE8IExlYXN0IHNpZ25pZmljYW50IGJ5dGUgb2YgNHRoIHJhbmsgb2YgXGEgdTMyLg0KI2RlZmluZSAgTFNCMlcodTMyKSAgICAgTVNCMVcodTMyKSAgICAgICAgICAgLy8hPCBMZWFzdCBzaWduaWZpY2FudCBieXRlIG9mIDNyZCByYW5rIG9mIFxhIHUzMi4NCiNkZWZpbmUgIExTQjFXKHUzMikgICAgIE1TQjJXKHUzMikgICAgICAgICAgIC8vITwgTGVhc3Qgc2lnbmlmaWNhbnQgYnl0ZSBvZiAybmQgcmFuayBvZiBcYSB1MzIuDQojZGVmaW5lICBMU0IwVyh1MzIpICAgICBNU0IzVyh1MzIpICAgICAgICAgICAvLyE8IExlYXN0IHNpZ25pZmljYW50IGJ5dGUgb2YgMXN0IHJhbmsgb2YgXGEgdTMyLg0KICAgICAgICANCiNkZWZpbmUgIE1TVyh1NjQpICAgICAgICgoKFUzMiAqKSYodTY0KSlbMV0pIC8vITwgTW9zdCBzaWduaWZpY2FudCB3b3JkIG9mIFxhIHU2NC4NCiNkZWZpbmUgIExTVyh1NjQpICAgICAgICgoKFUzMiAqKSYodTY0KSlbMF0pIC8vITwgTGVhc3Qgc2lnbmlmaWNhbnQgd29yZCBvZiBcYSB1NjQuDQojZGVmaW5lICBNU0gwKHU2NCkgICAgICAoKChVMTYgKikmKHU2NCkpWzNdKSAvLyE8IE1vc3Qgc2lnbmlmaWNhbnQgaGFsZi13b3JkIG9mIDFzdCByYW5rIG9mIFxhIHU2NC4NCiNkZWZpbmUgIE1TSDEodTY0KSAgICAgICgoKFUxNiAqKSYodTY0KSlbMl0pIC8vITwgTW9zdCBzaWduaWZpY2FudCBoYWxmLXdvcmQgb2YgMm5kIHJhbmsgb2YgXGEgdTY0Lg0KI2RlZmluZSAgTVNIMih1NjQpICAgICAgKCgoVTE2ICopJih1NjQpKVsxXSkgLy8hPCBNb3N0IHNpZ25pZmljYW50IGhhbGYtd29yZCBvZiAzcmQgcmFuayBvZiBcYSB1NjQuDQojZGVmaW5lICBNU0gzKHU2NCkgICAgICAoKChVMTYgKikmKHU2NCkpWzBdKSAvLyE8IE1vc3Qgc2lnbmlmaWNhbnQgaGFsZi13b3JkIG9mIDR0aCByYW5rIG9mIFxhIHU2NC4NCiNkZWZpbmUgIExTSDModTY0KSAgICAgIE1TSDAodTY0KSAgICAgICAgICAgIC8vITwgTGVhc3Qgc2lnbmlmaWNhbnQgaGFsZi13b3JkIG9mIDR0aCByYW5rIG9mIFxhIHU2NC4NCiNkZWZpbmUgIExTSDIodTY0KSAgICAgIE1TSDEodTY0KSAgICAgICAgICAgIC8vITwgTGVhc3Qgc2lnbmlmaWNhbnQgaGFsZi13b3JkIG9mIDNyZCByYW5rIG9mIFxhIHU2NC4NCiNkZWZpbmUgIExTSDEodTY0KSAgICAgIE1TSDIodTY0KSAgICAgICAgICAgIC8vITwgTGVhc3Qgc2lnbmlmaWNhbnQgaGFsZi13b3JkIG9mIDJuZCByYW5rIG9mIFxhIHU2NC4NCiNkZWZpbmUgIExTSDAodTY0KSAgICAgIE1TSDModTY0KSAgICAgICAgICAgIC8vITwgTGVhc3Qgc2lnbmlmaWNhbnQgaGFsZi13b3JkIG9mIDFzdCByYW5rIG9mIFxhIHU2NC4NCiNkZWZpbmUgIE1TQjBEKHU2NCkgICAgICgoKFU4ICAqKSYodTY0KSlbN10pIC8vITwgTW9zdCBzaWduaWZpY2FudCBieXRlIG9mIDFzdCByYW5rIG9mIFxhIHU2NC4NCiNkZWZpbmUgIE1TQjFEKHU2NCkgICAgICgoKFU4ICAqKSYodTY0KSlbNl0pIC8vITwgTW9zdCBzaWduaWZpY2FudCBieXRlIG9mIDJuZCByYW5rIG9mIFxhIHU2NC4NCiNkZWZpbmUgIE1TQjJEKHU2NCkgICAgICgoKFU4ICAqKSYodTY0KSlbNV0pIC8vITwgTW9zdCBzaWduaWZpY2FudCBieXRlIG9mIDNyZCByYW5rIG9mIFxhIHU2NC4NCiNkZWZpbmUgIE1TQjNEKHU2NCkgICAgICgoKFU4ICAqKSYodTY0KSlbNF0pIC8vITwgTW9zdCBzaWduaWZpY2FudCBieXRlIG9mIDR0aCByYW5rIG9mIFxhIHU2NC4NCiNkZWZpbmUgIE1TQjREKHU2NCkgICAgICgoKFU4ICAqKSYodTY0KSlbM10pIC8vITwgTW9zdCBzaWduaWZpY2FudCBieXRlIG9mIDV0aCByYW5rIG9mIFxhIHU2NC4NCiNkZWZpbmUgIE1TQjVEKHU2NCkgICAgICgoKFU4ICAqKSYodTY0KSlbMl0pIC8vITwgTW9zdCBzaWduaWZpY2FudCBieXRlIG9mIDZ0aCByYW5rIG9mIFxhIHU2NC4NCiNkZWZpbmUgIE1TQjZEKHU2NCkgICAgICgoKFU4ICAqKSYodTY0KSlbMV0pIC8vITwgTW9zdCBzaWduaWZpY2FudCBieXRlIG9mIDd0aCByYW5rIG9mIFxhIHU2NC4NCiNkZWZpbmUgIE1TQjdEKHU2NCkgICAgICgoKFU4ICAqKSYodTY0KSlbMF0pIC8vITwgTW9zdCBzaWduaWZpY2FudCBieXRlIG9mIDh0aCByYW5rIG9mIFxhIHU2NC4NCiNkZWZpbmUgIExTQjdEKHU2NCkgICAgIE1TQjBEKHU2NCkgICAgICAgICAgIC8vITwgTGVhc3Qgc2lnbmlmaWNhbnQgYnl0ZSBvZiA4dGggcmFuayBvZiBcYSB1NjQuDQojZGVmaW5lICBMU0I2RCh1NjQpICAgICBNU0IxRCh1NjQpICAgICAgICAgICAvLyE8IExlYXN0IHNpZ25pZmljYW50IGJ5dGUgb2YgN3RoIHJhbmsgb2YgXGEgdTY0Lg0KI2RlZmluZSAgTFNCNUQodTY0KSAgICAgTVNCMkQodTY0KSAgICAgICAgICAgLy8hPCBMZWFzdCBzaWduaWZpY2FudCBieXRlIG9mIDZ0aCByYW5rIG9mIFxhIHU2NC4NCiNkZWZpbmUgIExTQjREKHU2NCkgICAgIE1TQjNEKHU2NCkgICAgICAgICAgIC8vITwgTGVhc3Qgc2lnbmlmaWNhbnQgYnl0ZSBvZiA1dGggcmFuayBvZiBcYSB1NjQuDQojZGVmaW5lICBMU0IzRCh1NjQpICAgICBNU0I0RCh1NjQpICAgICAgICAgICAvLyE8IExlYXN0IHNpZ25pZmljYW50IGJ5dGUgb2YgNHRoIHJhbmsgb2YgXGEgdTY0Lg0KI2RlZmluZSAgTFNCMkQodTY0KSAgICAgTVNCNUQodTY0KSAgICAgICAgICAgLy8hPCBMZWFzdCBzaWduaWZpY2FudCBieXRlIG9mIDNyZCByYW5rIG9mIFxhIHU2NC4NCiNkZWZpbmUgIExTQjFEKHU2NCkgICAgIE1TQjZEKHU2NCkgICAgICAgICAgIC8vITwgTGVhc3Qgc2lnbmlmaWNhbnQgYnl0ZSBvZiAybmQgcmFuayBvZiBcYSB1NjQuDQojZGVmaW5lICBMU0IwRCh1NjQpICAgICBNU0I3RCh1NjQpICAgICAgICAgICAvLyE8IExlYXN0IHNpZ25pZmljYW50IGJ5dGUgb2YgMXN0IHJhbmsgb2YgXGEgdTY0Lg0KDQojZGVmaW5lICBCRTE2KHgpICAgICAgICBTd2FwMTYoeCkNCiNkZWZpbmUgIExFMTYoeCkgICAgICAgICh4KQ0KDQojZGVmaW5lICBsZTE2X3RvX2NwdSh4KSAoeCkNCiNkZWZpbmUgIGNwdV90b19sZTE2KHgpICh4KQ0KI2RlZmluZSAgTEUxNl9UT19DUFUoeCkgKHgpDQojZGVmaW5lICBDUFVfVE9fTEUxNih4KSAoeCkNCg0KI2RlZmluZSAgYmUxNl90b19jcHUoeCkgU3dhcDE2KHgpDQojZGVmaW5lICBjcHVfdG9fYmUxNih4KSBTd2FwMTYoeCkNCiNkZWZpbmUgIEJFMTZfVE9fQ1BVKHgpIFN3YXAxNih4KQ0KI2RlZmluZSAgQ1BVX1RPX0JFMTYoeCkgU3dhcDE2KHgpDQoNCiNkZWZpbmUgIGxlMzJfdG9fY3B1KHgpICh4KQ0KI2RlZmluZSAgY3B1X3RvX2xlMzIoeCkgKHgpDQojZGVmaW5lICBMRTMyX1RPX0NQVSh4KSAoeCkNCiNkZWZpbmUgIENQVV9UT19MRTMyKHgpICh4KQ0KDQojZGVmaW5lICBiZTMyX3RvX2NwdSh4KSBzd2FwMzIoeCkNCiNkZWZpbmUgIGNwdV90b19iZTMyKHgpIHN3YXAzMih4KQ0KI2RlZmluZSAgQkUzMl9UT19DUFUoeCkgc3dhcDMyKHgpDQojZGVmaW5lICBDUFVfVE9fQkUzMih4KSBzd2FwMzIoeCkNCi8vISBAfQ0KDQoNCi8qISBcbmFtZSBFbmRpYW5pc20gQ29udmVyc2lvbg0KICoNCiAqIFRoZSBzYW1lIGNvbnNpZGVyYXRpb25zIGFzIGZvciBjbHogYW5kIGN0eiBhcHBseSBoZXJlIGJ1dCBHQ0Mncw0KICogX19idWlsdGluX2Jzd2FwXzMyIGFuZCBfX2J1aWx0aW5fYnN3YXBfNjQgZG8gbm90IGJlaGF2ZSBsaWtlIG1hY3JvcyB3aGVuDQogKiBhcHBsaWVkIHRvIGNvbnN0YW50IGV4cHJlc3Npb25zLCBzbyB0d28gc2V0cyBvZiBtYWNyb3MgYXJlIGRlZmluZWQgaGVyZToNCiAqICAgLSBTd2FwMTYsIFN3YXAzMiBhbmQgU3dhcDY0IHRvIGFwcGx5IHRvIGNvbnN0YW50IGV4cHJlc3Npb25zICh2YWx1ZXMga25vd24NCiAqICAgICBhdCBjb21waWxlIHRpbWUpOw0KICogICAtIHN3YXAxNiwgc3dhcDMyIGFuZCBzd2FwNjQgdG8gYXBwbHkgdG8gbm9uLWNvbnN0YW50IGV4cHJlc3Npb25zICh2YWx1ZXMNCiAqICAgICB1bmtub3duIGF0IGNvbXBpbGUgdGltZSkuDQogKi8NCi8vISBAew0KDQovKiEgXGJyaWVmIFRvZ2dsZXMgdGhlIGVuZGlhbmlzbSBvZiBcYSB1MTYgKGJ5IHN3YXBwaW5nIGl0cyBieXRlcykuDQogKg0KICogXHBhcmFtIHUxNiBVMTYgb2Ygd2hpY2ggdG8gdG9nZ2xlIHRoZSBlbmRpYW5pc20uDQogKg0KICogXHJldHVybiBWYWx1ZSByZXN1bHRpbmcgZnJvbSBcYSB1MTYgd2l0aCB0b2dnbGVkIGVuZGlhbmlzbS4NCiAqDQogKiBcbm90ZSBNb3JlIG9wdGltaXplZCBpZiBvbmx5IHVzZWQgd2l0aCB2YWx1ZXMga25vd24gYXQgY29tcGlsZSB0aW1lLg0KICovDQojZGVmaW5lIFN3YXAxNih1MTYpICgoVTE2KSgoKFUxNikodTE2KSA+PiA4KSB8XA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgKChVMTYpKHUxNikgPDwgOCkpKQ0KDQovKiEgXGJyaWVmIFRvZ2dsZXMgdGhlIGVuZGlhbmlzbSBvZiBcYSB1MzIgKGJ5IHN3YXBwaW5nIGl0cyBieXRlcykuDQogKg0KICogXHBhcmFtIHUzMiBVMzIgb2Ygd2hpY2ggdG8gdG9nZ2xlIHRoZSBlbmRpYW5pc20uDQogKg0KICogXHJldHVybiBWYWx1ZSByZXN1bHRpbmcgZnJvbSBcYSB1MzIgd2l0aCB0b2dnbGVkIGVuZGlhbmlzbS4NCiAqDQogKiBcbm90ZSBNb3JlIG9wdGltaXplZCBpZiBvbmx5IHVzZWQgd2l0aCB2YWx1ZXMga25vd24gYXQgY29tcGlsZSB0aW1lLg0KICovDQojZGVmaW5lIFN3YXAzMih1MzIpICgoVTMyKSgoKFUzMilTd2FwMTYoKFUzMikodTMyKSA+PiAxNikpIHxcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAoKFUzMilTd2FwMTYoKFUzMikodTMyKSkgPDwgMTYpKSkNCg0KLyohIFxicmllZiBUb2dnbGVzIHRoZSBlbmRpYW5pc20gb2YgXGEgdTY0IChieSBzd2FwcGluZyBpdHMgYnl0ZXMpLg0KICoNCiAqIFxwYXJhbSB1NjQgVTY0IG9mIHdoaWNoIHRvIHRvZ2dsZSB0aGUgZW5kaWFuaXNtLg0KICoNCiAqIFxyZXR1cm4gVmFsdWUgcmVzdWx0aW5nIGZyb20gXGEgdTY0IHdpdGggdG9nZ2xlZCBlbmRpYW5pc20uDQogKg0KICogXG5vdGUgTW9yZSBvcHRpbWl6ZWQgaWYgb25seSB1c2VkIHdpdGggdmFsdWVzIGtub3duIGF0IGNvbXBpbGUgdGltZS4NCiAqLw0KI2RlZmluZSBTd2FwNjQodTY0KSAoKFU2NCkoKChVNjQpU3dhcDMyKChVNjQpKHU2NCkgPj4gMzIpKSB8XA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgKChVNjQpU3dhcDMyKChVNjQpKHU2NCkpIDw8IDMyKSkpDQoNCi8qISBcYnJpZWYgVG9nZ2xlcyB0aGUgZW5kaWFuaXNtIG9mIFxhIHUxNiAoYnkgc3dhcHBpbmcgaXRzIGJ5dGVzKS4NCiAqDQogKiBccGFyYW0gdTE2IFUxNiBvZiB3aGljaCB0byB0b2dnbGUgdGhlIGVuZGlhbmlzbS4NCiAqDQogKiBccmV0dXJuIFZhbHVlIHJlc3VsdGluZyBmcm9tIFxhIHUxNiB3aXRoIHRvZ2dsZWQgZW5kaWFuaXNtLg0KICoNCiAqIFxub3RlIE1vcmUgb3B0aW1pemVkIGlmIG9ubHkgdXNlZCB3aXRoIHZhbHVlcyB1bmtub3duIGF0IGNvbXBpbGUgdGltZS4NCiAqLw0KI2RlZmluZSBzd2FwMTYodTE2KSBTd2FwMTYodTE2KQ0KDQovKiEgXGJyaWVmIFRvZ2dsZXMgdGhlIGVuZGlhbmlzbSBvZiBcYSB1MzIgKGJ5IHN3YXBwaW5nIGl0cyBieXRlcykuDQogKg0KICogXHBhcmFtIHUzMiBVMzIgb2Ygd2hpY2ggdG8gdG9nZ2xlIHRoZSBlbmRpYW5pc20uDQogKg0KICogXHJldHVybiBWYWx1ZSByZXN1bHRpbmcgZnJvbSBcYSB1MzIgd2l0aCB0b2dnbGVkIGVuZGlhbmlzbS4NCiAqDQogKiBcbm90ZSBNb3JlIG9wdGltaXplZCBpZiBvbmx5IHVzZWQgd2l0aCB2YWx1ZXMgdW5rbm93biBhdCBjb21waWxlIHRpbWUuDQogKi8NCiNpZiAoZGVmaW5lZCBfX0dOVUNfXykNCiMgICBkZWZpbmUgc3dhcDMyKHUzMikgKChVMzIpX19idWlsdGluX2Jzd2FwMzIoKFUzMikodTMyKSkpDQojZWxzZQ0KIyAgIGRlZmluZSBzd2FwMzIodTMyKSBTd2FwMzIodTMyKQ0KI2VuZGlmDQoNCi8qISBcYnJpZWYgVG9nZ2xlcyB0aGUgZW5kaWFuaXNtIG9mIFxhIHU2NCAoYnkgc3dhcHBpbmcgaXRzIGJ5dGVzKS4NCiAqDQogKiBccGFyYW0gdTY0IFU2NCBvZiB3aGljaCB0byB0b2dnbGUgdGhlIGVuZGlhbmlzbS4NCiAqDQogKiBccmV0dXJuIFZhbHVlIHJlc3VsdGluZyBmcm9tIFxhIHU2NCB3aXRoIHRvZ2dsZWQgZW5kaWFuaXNtLg0KICoNCiAqIFxub3RlIE1vcmUgb3B0aW1pemVkIGlmIG9ubHkgdXNlZCB3aXRoIHZhbHVlcyB1bmtub3duIGF0IGNvbXBpbGUgdGltZS4NCiAqLw0KI2lmIChkZWZpbmVkIF9fR05VQ19fKQ0KIyAgIGRlZmluZSBzd2FwNjQodTY0KSAoKFU2NClfX2J1aWx0aW5fYnN3YXA2NCgoVTY0KSh1NjQpKSkNCiNlbHNlDQojICAgZGVmaW5lIHN3YXA2NCh1NjQpICgoVTY0KSgoKFU2NClzd2FwMzIoKFU2NCkodTY0KSA+PiAzMikpIHxcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAoKFU2NClzd2FwMzIoKFU2NCkodTY0KSkgPDwgMzIpKSkNCiNlbmRpZg0KDQovLyEgQH0NCg0KDQovKiEgXG5hbWUgVGFyZ2V0IEFic3RyYWN0aW9uDQogKi8NCi8vISBAew0KDQojZGVmaW5lIF9HTE9CRVhUXyAgICAgICAgICAgZXh0ZXJuICAgICAgLy8hPCBleHRlcm4gc3RvcmFnZS1jbGFzcyBzcGVjaWZpZXIuDQojZGVmaW5lIF9DT05TVF9UWVBFXyAgICAgICAgY29uc3QgICAgICAgLy8hPCBjb25zdCB0eXBlIHF1YWxpZmllci4NCiNkZWZpbmUgX01FTV9UWVBFX1NMT1dfICAgICAgICAgICAgICAgICAvLyE8IFNsb3cgbWVtb3J5IHR5cGUuDQojZGVmaW5lIF9NRU1fVFlQRV9NRURGQVNUXyAgICAgICAgICAgICAgLy8hPCBGYWlybHkgZmFzdCBtZW1vcnkgdHlwZS4NCiNkZWZpbmUgX01FTV9UWVBFX0ZBU1RfICAgICAgICAgICAgICAgICAvLyE8IEZhc3QgbWVtb3J5IHR5cGUuDQoNCnR5cGVkZWYgVTggICAgICAgICAgICAgICAgICBCeXRlOyAgICAgICAvLyE8IDgtYml0IHVuc2lnbmVkIGludGVnZXIuDQoNCiNkZWZpbmUgbWVtY21wX3JhbTJyYW0gICAgICBtZW1jbXAgICAgICAvLyE8IFRhcmdldC1zcGVjaWZpYyBtZW1jbXAgb2YgUkFNIHRvIFJBTS4NCiNkZWZpbmUgbWVtY21wX2NvZGUycmFtICAgICBtZW1jbXAgICAgICAvLyE8IFRhcmdldC1zcGVjaWZpYyBtZW1jbXAgb2YgUkFNIHRvIE5WUkFNLg0KI2RlZmluZSBtZW1jcHlfcmFtMnJhbSAgICAgIG1lbWNweSAgICAgIC8vITwgVGFyZ2V0LXNwZWNpZmljIG1lbWNweSBmcm9tIFJBTSB0byBSQU0uDQojZGVmaW5lIG1lbWNweV9jb2RlMnJhbSAgICAgbWVtY3B5ICAgICAgLy8hPCBUYXJnZXQtc3BlY2lmaWMgbWVtY3B5IGZyb20gTlZSQU0gdG8gUkFNLg0KDQojZGVmaW5lIExTQjAodTMyKSAgICAgICAgICAgTFNCMFcodTMyKSAgLy8hPCBMZWFzdCBzaWduaWZpY2FudCBieXRlIG9mIDFzdCByYW5rIG9mIFxhIHUzMi4NCiNkZWZpbmUgTFNCMSh1MzIpICAgICAgICAgICBMU0IxVyh1MzIpICAvLyE8IExlYXN0IHNpZ25pZmljYW50IGJ5dGUgb2YgMm5kIHJhbmsgb2YgXGEgdTMyLg0KI2RlZmluZSBMU0IyKHUzMikgICAgICAgICAgIExTQjJXKHUzMikgIC8vITwgTGVhc3Qgc2lnbmlmaWNhbnQgYnl0ZSBvZiAzcmQgcmFuayBvZiBcYSB1MzIuDQojZGVmaW5lIExTQjModTMyKSAgICAgICAgICAgTFNCM1codTMyKSAgLy8hPCBMZWFzdCBzaWduaWZpY2FudCBieXRlIG9mIDR0aCByYW5rIG9mIFxhIHUzMi4NCiNkZWZpbmUgTVNCMyh1MzIpICAgICAgICAgICBNU0IzVyh1MzIpICAvLyE8IE1vc3Qgc2lnbmlmaWNhbnQgYnl0ZSBvZiA0dGggcmFuayBvZiBcYSB1MzIuDQojZGVmaW5lIE1TQjIodTMyKSAgICAgICAgICAgTVNCMlcodTMyKSAgLy8hPCBNb3N0IHNpZ25pZmljYW50IGJ5dGUgb2YgM3JkIHJhbmsgb2YgXGEgdTMyLg0KI2RlZmluZSBNU0IxKHUzMikgICAgICAgICAgIE1TQjFXKHUzMikgIC8vITwgTW9zdCBzaWduaWZpY2FudCBieXRlIG9mIDJuZCByYW5rIG9mIFxhIHUzMi4NCiNkZWZpbmUgTVNCMCh1MzIpICAgICAgICAgICBNU0IwVyh1MzIpICAvLyE8IE1vc3Qgc2lnbmlmaWNhbnQgYnl0ZSBvZiAxc3QgcmFuayBvZiBcYSB1MzIuDQoNCi8vISBAfQ0KDQovKioNCiAqIFxicmllZiBDYWxjdWxhdGUgXGYkIFxsZWZ0XGxjZWlsIFxmcmFje2F9e2J9IFxyaWdodFxyY2VpbCBcZiQgdXNpbmcNCiAqIGludGVnZXIgYXJpdGhtZXRpYy4NCiAqDQogKiBccGFyYW0gYSBBbiBpbnRlZ2VyDQogKiBccGFyYW0gYiBBbm90aGVyIGludGVnZXINCiAqDQogKiBccmV0dXJuIChcYSBhIC8gXGEgYikgcm91bmRlZCB1cCB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyLg0KICovDQojZGVmaW5lIGRpdl9jZWlsKGEsIGIpICAgICAgKCgoYSkgKyAoYikgLSAxKSAvIChiKSkNCg0KI2VuZGlmICAvLyAjaWZuZGVmIF9fQVNTRU1CTFlfXw0KDQovKioNCiAqIFx9DQogKi8NCg0KI2VuZGlmIC8qIFVUSUxTX0NPTVBJTEVSX0ggKi8NCg==