From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH v2 47/62] xen/pvshim: forward evtchn ops between L0 Xen and L2 DomU Date: Fri, 12 Jan 2018 11:28:55 +0000 Message-ID: <20180112112910.16762-48-wei.liu2@citrix.com> References: <20180112112910.16762-1-wei.liu2@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1eZxyo-000324-Hr for xen-devel@lists.xenproject.org; Fri, 12 Jan 2018 11:58:38 +0000 In-Reply-To: <20180112112910.16762-1-wei.liu2@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Xen-devel Cc: wei.liu2@citrix.com List-Id: xen-devel@lists.xenproject.org RnJvbTogUm9nZXIgUGF1IE1vbm5lIDxyb2dlci5wYXVAY2l0cml4LmNvbT4KCk5vdGUgdGhhdCB0 aGUgdW5tYXNrIGFuZCB0aGUgdmlycSBvcGVyYXRpb25zIGFyZSBoYW5kbGVkIGJ5IHRoZSBzaGlt Cml0c2VsZiwgYW5kIHRoYXQgRklGTyBldmVudCBjaGFubmVscyBhcmUgbm90IGV4cG9zZWQgdG8g dGhlIGd1ZXN0LgoKU2lnbmVkLW9mZi1ieTogUm9nZXIgUGF1IE1vbm7DqSA8cm9nZXIucGF1QGNp dHJpeC5jb20+ClNpZ25lZC1vZmYtYnk6IEFudGhvbnkgTGlndW9yaSA8YWxpZ3VvcmlAYW1hem9u LmNvbT4KU2lnbmVkLW9mZi1ieTogU2VyZ2V5IER5YXNsaSA8c2VyZ2V5LmR5YXNsaUBjaXRyaXgu Y29tPgotLS0KQ2hhbmdlcyBzaW5jZSB2MToKIC0gVXNlIGZpbmRfZmlyc3Rfc2V0X2JpdCBpbnN0 ZWFkIG9mIGZmc2wuCiAtIEluZGVudCBtYWNybyBvbmUgbW9yZSBsZXZlbC4KIC0gSGF2ZSBhIHNp bmdsZSBldnRjaG5fY2xvc2Ugc3RydWN0IGluIHB2X3NoaW1fZXZlbnRfY2hhbm5lbF9vcC4KIC0g QWRkIGJsYW5rIGxpbmVzIGJldHdlZW4gc3dpdGNoIGNhc2VzLgogLSBVc2UgLUVPUE5PVFNVUFAg aW4gb3JkZXIgdG8gc2lnbmFsIGxhY2sgb2YgRklGTyBvciBQSVJRIHN1cHBvcnQuCiAtIFN3aXRj aCBldnRjaG5fYmluZF92aXJxIHBhcmFtZXRlciB0byBldnRjaG5fcG9ydF90IGFuZCB1c2UgMCBz aWduYWwKICAgYWxsb2NhdGlvbiBuZWVkZWQuCiAtIFN3aXRjaCBldnRjaG4gaGVscGVycyByZXR1 cm4gdHlwZSB0byBpbnQgaW5zdGVhZCBvZiBsb25nLgogLSBSZS13cml0ZSBldmVudCBjaGFubmVs IGh5cGVyY2FsbCB0YWJsZSBoYW5kbGVyIGluc3RlYWQgb2YgYWRkaW5nCiAgIGhvb2tzLgogLSBS ZW1vdmUgdGhlIHB2X2RvbWFpbiB2YXJpYWJsZSBhbmQgaW5zdGVhZCB1c2UgYSBzdGF0aWMgdmFy aWFibGUgaW4KICAgc2hpbSBjb2RlLgotLS0KIHhlbi9hcmNoL3g4Ni9jb21wYXQuYyAgICAgICAg ICAgICB8ICAgNCArLQogeGVuL2FyY2gveDg2L2d1ZXN0L3hlbi5jICAgICAgICAgIHwgIDI1ICsr Ky0KIHhlbi9hcmNoL3g4Ni9wdi9oeXBlcmNhbGwuYyAgICAgICB8ICAxNyArKysKIHhlbi9hcmNo L3g4Ni9wdi9zaGltLmMgICAgICAgICAgICB8IDI2MyArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKwogeGVuL2NvbW1vbi9ldmVudF9jaGFubmVsLmMgICAgICAgIHwgIDk5ICsr KysrKysrLS0tLS0tCiB4ZW4vZHJpdmVycy9jaGFyL3hlbl9wdl9jb25zb2xlLmMgfCAgMTEgKy0K IHhlbi9pbmNsdWRlL2FzbS14ODYvaHlwZXJjYWxsLmggICB8ICAgMyArCiB4ZW4vaW5jbHVkZS9h c20teDg2L3B2L3NoaW0uaCAgICAgfCAgIDUgKwogeGVuL2luY2x1ZGUveGVuL2V2ZW50LmggICAg ICAgICAgIHwgIDE1ICsrKwogeGVuL2luY2x1ZGUveGVuL3B2X2NvbnNvbGUuaCAgICAgIHwgICA2 ICsKIDEwIGZpbGVzIGNoYW5nZWQsIDQwMiBpbnNlcnRpb25zKCspLCA0NiBkZWxldGlvbnMoLSkK CmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvY29tcGF0LmMgYi94ZW4vYXJjaC94ODYvY29tcGF0 LmMKaW5kZXggZjQxN2NkNTAzNC4uOWQzNzZhNDU4OSAxMDA2NDQKLS0tIGEveGVuL2FyY2gveDg2 L2NvbXBhdC5jCisrKyBiL3hlbi9hcmNoL3g4Ni9jb21wYXQuYwpAQCAtNjksOCArNjksOCBAQCBs b25nIGRvX2V2ZW50X2NoYW5uZWxfb3BfY29tcGF0KFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0oZXZ0 Y2huX29wX3QpIHVvcCkKICAgICBjYXNlIEVWVENITk9QX2JpbmRfaXBpOgogICAgIGNhc2UgRVZU Q0hOT1BfYmluZF92Y3B1OgogICAgIGNhc2UgRVZUQ0hOT1BfdW5tYXNrOgotICAgICAgICByZXR1 cm4gZG9fZXZlbnRfY2hhbm5lbF9vcChvcC5jbWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGd1ZXN0X2hhbmRsZV9mcm9tX3B0cigmdW9wLnAtPnUsIHZvaWQpKTsKKyAgICAg ICAgcmV0dXJuIHB2X2dldF9oeXBlcmNhbGxfaGFuZGxlcihfX0hZUEVSVklTT1JfZXZlbnRfY2hh bm5lbF9vcCwgZmFsc2UpCisgICAgICAgICAgICAgICAob3AuY21kLCAodW5zaWduZWQgbG9uZykm dW9wLnAtPnUsIDAsIDAsIDAsIDApOwogCiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIC1F Tk9TWVM7CmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvZ3Vlc3QveGVuLmMgYi94ZW4vYXJjaC94 ODYvZ3Vlc3QveGVuLmMKaW5kZXggYWZmMTZhMGUzNS4uNTdiMjk3YWQ0NyAxMDA2NDQKLS0tIGEv eGVuL2FyY2gveDg2L2d1ZXN0L3hlbi5jCisrKyBiL3hlbi9hcmNoL3g4Ni9ndWVzdC94ZW4uYwpA QCAtMTgsNiArMTgsNyBAQAogICoKICAqIENvcHlyaWdodCAoYykgMjAxNyBDaXRyaXggU3lzdGVt cyBMdGQuCiAgKi8KKyNpbmNsdWRlIDx4ZW4vZXZlbnQuaD4KICNpbmNsdWRlIDx4ZW4vaW5pdC5o PgogI2luY2x1ZGUgPHhlbi9tbS5oPgogI2luY2x1ZGUgPHhlbi9wZm4uaD4KQEAgLTE5MywxMSAr MTk0LDMxIEBAIHN0YXRpYyB2b2lkIF9faW5pdCBpbml0X21lbW1hcCh2b2lkKQogc3RhdGljIHZv aWQgeGVuX2V2dGNobl91cGNhbGwoc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MpCiB7CiAgICAg c3RydWN0IHZjcHVfaW5mbyAqdmNwdV9pbmZvID0gdGhpc19jcHUodmNwdV9pbmZvKTsKKyAgICB1 bnNpZ25lZCBsb25nIHBlbmRpbmc7CiAKICAgICB2Y3B1X2luZm8tPmV2dGNobl91cGNhbGxfcGVu ZGluZyA9IDA7Ci0gICAgd3JpdGVfYXRvbWljKCZ2Y3B1X2luZm8tPmV2dGNobl9wZW5kaW5nX3Nl bCwgMCk7CisgICAgcGVuZGluZyA9IHhjaGcoJnZjcHVfaW5mby0+ZXZ0Y2huX3BlbmRpbmdfc2Vs LCAwKTsKIAotICAgIHB2X2NvbnNvbGVfcngocmVncyk7CisgICAgd2hpbGUgKCBwZW5kaW5nICkK KyAgICB7CisgICAgICAgIHVuc2lnbmVkIGludCBsMSA9IGZpbmRfZmlyc3Rfc2V0X2JpdChwZW5k aW5nKTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBldnRjaG4gPSB4Y2hnKCZYRU5fc2hhcmVkX2lu Zm8tPmV2dGNobl9wZW5kaW5nW2wxXSwgMCk7CisKKyAgICAgICAgX19jbGVhcl9iaXQobDEsICZw ZW5kaW5nKTsKKyAgICAgICAgZXZ0Y2huICY9IH5YRU5fc2hhcmVkX2luZm8tPmV2dGNobl9tYXNr W2wxXTsKKyAgICAgICAgd2hpbGUgKCBldnRjaG4gKQorICAgICAgICB7CisgICAgICAgICAgICB1 bnNpZ25lZCBpbnQgcG9ydCA9IGZpbmRfZmlyc3Rfc2V0X2JpdChldnRjaG4pOworCisgICAgICAg ICAgICBfX2NsZWFyX2JpdChwb3J0LCAmZXZ0Y2huKTsKKyAgICAgICAgICAgIHBvcnQgKz0gbDEg KiBCSVRTX1BFUl9MT05HOworCisgICAgICAgICAgICBpZiAoIHB2X2NvbnNvbGUgJiYgcG9ydCA9 PSBwdl9jb25zb2xlX2V2dGNobigpICkKKyAgICAgICAgICAgICAgICBwdl9jb25zb2xlX3J4KHJl Z3MpOworICAgICAgICAgICAgZWxzZSBpZiAoIHB2X3NoaW0gKQorICAgICAgICAgICAgICAgIHB2 X3NoaW1faW5qZWN0X2V2dGNobihwb3J0KTsKKyAgICAgICAgfQorICAgIH0KIAogICAgIGFja19B UElDX2lycSgpOwogfQpkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L3B2L2h5cGVyY2FsbC5jIGIv eGVuL2FyY2gveDg2L3B2L2h5cGVyY2FsbC5jCmluZGV4IGY3OWY3ZWVmNjIuLjNiNzJkNmE0NGQg MTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni9wdi9oeXBlcmNhbGwuYworKysgYi94ZW4vYXJjaC94 ODYvcHYvaHlwZXJjYWxsLmMKQEAgLTMyMCw2ICszMjAsMjMgQEAgdm9pZCBoeXBlcmNhbGxfcGFn ZV9pbml0aWFsaXNlX3JpbmcxX2tlcm5lbCh2b2lkICpoeXBlcmNhbGxfcGFnZSkKICAgICAqKHUx NiAqKShwKyA2KSA9IChIWVBFUkNBTExfVkVDVE9SIDw8IDgpIHwgMHhjZDsgLyogaW50ICAkeHgg Ki8KIH0KIAordm9pZCBfX2luaXQgcHZfaHlwZXJjYWxsX3RhYmxlX3JlcGxhY2UodW5zaWduZWQg aW50IGh5cGVyY2FsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh5 cGVyY2FsbF9mbl90ICogbmF0aXZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaHlwZXJjYWxsX2ZuX3QgKmNvbXBhdCkKK3sKKyNkZWZpbmUgSEFORExFUl9QT0lOVEVS KGYpIFwKKyAgICAoKHVuc2lnbmVkIGxvbmcgKilfX3ZhKF9fcGEoJnB2X2h5cGVyY2FsbF90YWJs ZVtoeXBlcmNhbGxdLmYpKSkKKyAgICB3cml0ZV9hdG9taWMoSEFORExFUl9QT0lOVEVSKG5hdGl2 ZSksICh1bnNpZ25lZCBsb25nKW5hdGl2ZSk7CisgICAgd3JpdGVfYXRvbWljKEhBTkRMRVJfUE9J TlRFUihjb21wYXQpLCAodW5zaWduZWQgbG9uZyljb21wYXQpOworI3VuZGVmIEhBTkRMRVJfUE9J TlRFUgorfQorCitoeXBlcmNhbGxfZm5fdCAqcHZfZ2V0X2h5cGVyY2FsbF9oYW5kbGVyKHVuc2ln bmVkIGludCBoeXBlcmNhbGwsIGJvb2wgY29tcGF0KQoreworICAgIHJldHVybiBjb21wYXQgPyBw dl9oeXBlcmNhbGxfdGFibGVbaHlwZXJjYWxsXS5jb21wYXQKKyAgICAgICAgICAgICAgICAgIDog cHZfaHlwZXJjYWxsX3RhYmxlW2h5cGVyY2FsbF0ubmF0aXZlOworfQorCiAvKgogICogTG9jYWwg dmFyaWFibGVzOgogICogbW9kZTogQwpkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L3B2L3NoaW0u YyBiL3hlbi9hcmNoL3g4Ni9wdi9zaGltLmMKaW5kZXggNzgzNTFjOWVlMC4uMzZmM2EzNjZkMyAx MDA2NDQKLS0tIGEveGVuL2FyY2gveDg2L3B2L3NoaW0uYworKysgYi94ZW4vYXJjaC94ODYvcHYv c2hpbS5jCkBAIC0xOCw2ICsxOCw4IEBACiAgKgogICogQ29weXJpZ2h0IChjKSAyMDE3IENpdHJp eCBTeXN0ZW1zIEx0ZC4KICAqLworI2luY2x1ZGUgPHhlbi9ldmVudC5oPgorI2luY2x1ZGUgPHhl bi9ndWVzdF9hY2Nlc3MuaD4KICNpbmNsdWRlIDx4ZW4vaHlwZXJjYWxsLmg+CiAjaW5jbHVkZSA8 eGVuL2luaXQuaD4KICNpbmNsdWRlIDx4ZW4vc2h1dGRvd24uaD4KQEAgLTM1LDYgKzM3LDEwIEBA IGJvb2wgcHZfc2hpbTsKIGJvb2xlYW5fcGFyYW0oInB2LXNoaW0iLCBwdl9zaGltKTsKICNlbmRp ZgogCitzdGF0aWMgc3RydWN0IGRvbWFpbiAqZ3Vlc3Q7CisKK3N0YXRpYyBsb25nIHB2X3NoaW1f ZXZlbnRfY2hhbm5lbF9vcChpbnQgY21kLCBYRU5fR1VFU1RfSEFORExFX1BBUkFNKHZvaWQpIGFy Zyk7CisKICNkZWZpbmUgTDFfUFJPVCAoX1BBR0VfUFJFU0VOVHxfUEFHRV9SV3xfUEFHRV9BQ0NF U1NFRHxfUEFHRV9VU0VSfCBcCiAgICAgICAgICAgICAgICAgIF9QQUdFX0dVRVNUX0tFUk5FTCkK ICNkZWZpbmUgQ09NUEFUX0wxX1BST1QgKF9QQUdFX1BSRVNFTlR8X1BBR0VfUld8X1BBR0VfQUND RVNTRUQpCkBAIC02Myw2ICs2OSwyNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcmVwbGFjZV92YV9t YXBwaW5nKHN0cnVjdCBkb21haW4gKmQsIGw0X3BnZW50cnlfdCAqbDRzdGFydCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogQ09NUEFUX0wx X1BST1QpKTsKIH0KIAorc3RhdGljIHZvaWQgZXZ0Y2huX3Jlc2VydmUoc3RydWN0IGRvbWFpbiAq ZCwgdW5zaWduZWQgaW50IHBvcnQpCit7CisgICAgQVNTRVJUKHBvcnRfaXNfdmFsaWQoZCwgcG9y dCkpOworICAgIGV2dGNobl9mcm9tX3BvcnQoZCwgcG9ydCktPnN0YXRlID0gRUNTX1JFU0VSVkVE OworICAgIEJVR19PTih4ZW5faHlwZXJjYWxsX2V2dGNobl91bm1hc2socG9ydCkpOworfQorCitz dGF0aWMgYm9vbCBldnRjaG5faGFuZGxlZChzdHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25lZCBpbnQg cG9ydCkKK3sKKyAgICBBU1NFUlQocG9ydF9pc192YWxpZChkLCBwb3J0KSk7CisgICAgLyogVGhl IHNoaW0gbWFuYWdlcyBWSVJRcywgdGhlIHJlc3QgaXMgZm9yd2FyZGVkIHRvIEwwLiAqLworICAg IHJldHVybiBldnRjaG5fZnJvbV9wb3J0KGQsIHBvcnQpLT5zdGF0ZSA9PSBFQ1NfVklSUTsKK30K Kworc3RhdGljIHZvaWQgZXZ0Y2huX2Fzc2lnbl92Y3B1KHN0cnVjdCBkb21haW4gKmQsIHVuc2ln bmVkIGludCBwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu dCB2Y3B1KQoreworICAgIEFTU0VSVChwb3J0X2lzX3ZhbGlkKGQsIHBvcnQpKTsKKyAgICBldnRj aG5fZnJvbV9wb3J0KGQsIHBvcnQpLT5ub3RpZnlfdmNwdV9pZCA9IHZjcHU7Cit9CisKIHZvaWQg X19pbml0IHB2X3NoaW1fc2V0dXBfZG9tKHN0cnVjdCBkb21haW4gKmQsIGw0X3BnZW50cnlfdCAq bDRzdGFydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdmFf c3RhcnQsIHVuc2lnbmVkIGxvbmcgc3RvcmVfdmEsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1bnNpZ25lZCBsb25nIGNvbnNvbGVfdmEsIHVuc2lnbmVkIGxvbmcgdnBoeXNtYXAsCkBA IC04Miw2ICsxMDksMTEgQEAgdm9pZCBfX2luaXQgcHZfc2hpbV9zZXR1cF9kb20oc3RydWN0IGRv bWFpbiAqZCwgbDRfcGdlbnRyeV90ICpsNHN0YXJ0LAogICAgICAgICByZXBsYWNlX3ZhX21hcHBp bmcoZCwgbDRzdGFydCwgdmEsIHBhcmFtKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK ICAgICAgICAgZG9tMF91cGRhdGVfcGh5c21hcChkLCBQRk5fRE9XTigodmEpIC0gdmFfc3RhcnQp LCBwYXJhbSwgdnBoeXNtYXApOyAgICBcCiAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVs c2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIEJVR19P TihldnRjaG5fYWxsb2NhdGVfcG9ydChkLCBwYXJhbSkpOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorICAgICAgICBldnRjaG5fcmVzZXJ2ZShkLCBwYXJhbSk7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCiB9KQogICAgIFNFVF9BTkRfTUFQX1BBUkFNKEhWTV9QQVJBTV9TVE9SRV9QRk4sIHNpLT5z dG9yZV9tZm4sIHN0b3JlX3ZhKTsKICAgICBTRVRfQU5EX01BUF9QQVJBTShIVk1fUEFSQU1fU1RP UkVfRVZUQ0hOLCBzaS0+c3RvcmVfZXZ0Y2huLCAwKTsKQEAgLTkyLDYgKzEyNCwxMCBAQCB2b2lk IF9faW5pdCBwdl9zaGltX3NldHVwX2RvbShzdHJ1Y3QgZG9tYWluICpkLCBsNF9wZ2VudHJ5X3Qg Kmw0c3RhcnQsCiAgICAgICAgIFNFVF9BTkRfTUFQX1BBUkFNKEhWTV9QQVJBTV9DT05TT0xFX0VW VENITiwgc2ktPmNvbnNvbGUuZG9tVS5ldnRjaG4sIDApOwogICAgIH0KICN1bmRlZiBTRVRfQU5E X01BUF9QQVJBTQorICAgIHB2X2h5cGVyY2FsbF90YWJsZV9yZXBsYWNlKF9fSFlQRVJWSVNPUl9l dmVudF9jaGFubmVsX29wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChoeXBlcmNh bGxfZm5fdCAqKXB2X3NoaW1fZXZlbnRfY2hhbm5lbF9vcCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoaHlwZXJjYWxsX2ZuX3QgKilwdl9zaGltX2V2ZW50X2NoYW5uZWxfb3ApOwor ICAgIGd1ZXN0ID0gZDsKIH0KIAogdm9pZCBwdl9zaGltX3NodXRkb3duKHVpbnQ4X3QgcmVhc29u KQpAQCAtMTAwLDYgKzEzNiwyMzMgQEAgdm9pZCBwdl9zaGltX3NodXRkb3duKHVpbnQ4X3QgcmVh c29uKQogICAgIHhlbl9oeXBlcmNhbGxfc2h1dGRvd24ocmVhc29uKTsKIH0KIAorc3RhdGljIGxv bmcgcHZfc2hpbV9ldmVudF9jaGFubmVsX29wKGludCBjbWQsIFhFTl9HVUVTVF9IQU5ETEVfUEFS QU0odm9pZCkgYXJnKQoreworICAgIHN0cnVjdCBkb21haW4gKmQgPSBjdXJyZW50LT5kb21haW47 CisgICAgc3RydWN0IGV2dGNobl9jbG9zZSBjbG9zZTsKKyAgICBsb25nIHJjOworCisgICAgc3dp dGNoICggY21kICkKKyAgICB7CisjZGVmaW5lIEVWVENITl9GT1JXQVJEKGNtZCwgcG9ydF9maWVs ZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgRVZUQ0hO T1BfIyNjbWQ6IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKyAgICAgICAgc3RydWN0IGV2dGNobl8jI2NtZCBvcDsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg ICBpZiAoIGNvcHlfZnJvbV9ndWVzdCgmb3AsIGFyZywgMSkgIT0gMCApICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorICAgICAgICByYyA9IHhlbl9oeXBlcmNhbGxfZXZlbnRfY2hhbm5lbF9vcChFVlRDSE5PUF8j I2NtZCwgJm9wKTsgICAgICAgICAgIFwKKyAgICAgICAgaWYgKCByYyApICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAg ICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgc3Bpbl9sb2NrKCZkLT5l dmVudF9sb2NrKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg ICAgICAgIHJjID0gZXZ0Y2huX2FsbG9jYXRlX3BvcnQoZCwgb3AucG9ydF9maWVsZCk7ICAgICAg ICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoIHJjICkgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisgICAgICAgICAgICBjbG9zZS5wb3J0ID0gb3AucG9ydF9maWVsZDsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgQlVHX09OKHhlbl9oeXBl cmNhbGxfZXZlbnRfY2hhbm5lbF9vcChFVlRDSE5PUF9jbG9zZSwgJmNsb3NlKSk7IFwKKyAgICAg ICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgZXZ0Y2hu X3Jlc2VydmUoZCwgb3AucG9ydF9maWVsZCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKyAgICAgICAgc3Bpbl91bmxvY2soJmQtPmV2ZW50X2xvY2spOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBp ZiAoICFyYyAmJiBfX2NvcHlfdG9fZ3Vlc3QoYXJnLCAmb3AsIDEpICkgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKyAgICAgICAgICAgIHJjID0gLUVGQVVMVDsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor ICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfQorCisgICAgRVZUQ0hOX0ZPUldBUkQoYWxs b2NfdW5ib3VuZCwgcG9ydCkKKyAgICBFVlRDSE5fRk9SV0FSRChiaW5kX2ludGVyZG9tYWluLCBs b2NhbF9wb3J0KQorI3VuZGVmIEVWVENITl9GT1JXQVJECisKKyAgICBjYXNlIEVWVENITk9QX2Jp bmRfdmlycTogeworICAgICAgICBzdHJ1Y3QgZXZ0Y2huX2JpbmRfdmlycSB2aXJxOworICAgICAg ICBzdHJ1Y3QgZXZ0Y2huX2FsbG9jX3VuYm91bmQgYWxsb2MgPSB7CisgICAgICAgICAgICAuZG9t ID0gRE9NSURfU0VMRiwKKyAgICAgICAgICAgIC5yZW1vdGVfZG9tID0gRE9NSURfU0VMRiwKKyAg ICAgICAgfTsKKworICAgICAgICBpZiAoIGNvcHlfZnJvbV9ndWVzdCgmdmlycSwgYXJnLCAxKSAh PSAwICkKKyAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOworICAgICAgICAvKgorICAgICAgICAg KiBUaGUgZXZlbnQgY2hhbm5lbCBzcGFjZSBpcyBhY3R1YWxseSBjb250cm9sbGVkIGJ5IEwwIFhl biwgc28KKyAgICAgICAgICogYWxsb2NhdGUgYSBwb3J0IGZyb20gTDAgYW5kIHRoZW4gZm9yY2Ug dGhlIFZJUlEgdG8gYmUgYm91bmQgdG8gdGhhdAorICAgICAgICAgKiBzcGVjaWZpYyBwb3J0Lgor ICAgICAgICAgKgorICAgICAgICAgKiBUaGlzIGlzIG9ubHkgcmVxdWlyZWQgZm9yIFZJUlEgYmVj YXVzZSB0aGUgcmVzdCBvZiB0aGUgZXZlbnQgY2hhbm5lbAorICAgICAgICAgKiBvcGVyYXRpb25z IGFyZSBoYW5kbGVkIGRpcmVjdGx5IGJ5IEwwLgorICAgICAgICAgKi8KKyAgICAgICAgcmMgPSB4 ZW5faHlwZXJjYWxsX2V2ZW50X2NoYW5uZWxfb3AoRVZUQ0hOT1BfYWxsb2NfdW5ib3VuZCwgJmFs bG9jKTsKKyAgICAgICAgaWYgKCByYyApCisgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIC8q IEZvcmNlIEwxIHRvIHVzZSB0aGUgZXZlbnQgY2hhbm5lbCBwb3J0IGFsbG9jYXRlZCBvbiBMMC4g Ki8KKyAgICAgICAgcmMgPSBldnRjaG5fYmluZF92aXJxKCZ2aXJxLCBhbGxvYy5wb3J0KTsKKyAg ICAgICAgaWYgKCByYyApCisgICAgICAgIHsKKyAgICAgICAgICAgIGNsb3NlLnBvcnQgPSBhbGxv Yy5wb3J0OworICAgICAgICAgICAgQlVHX09OKHhlbl9oeXBlcmNhbGxfZXZlbnRfY2hhbm5lbF9v cChFVlRDSE5PUF9jbG9zZSwgJmNsb3NlKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoICFy YyAmJiBfX2NvcHlfdG9fZ3Vlc3QoYXJnLCAmdmlycSwgMSkgKQorICAgICAgICAgICAgcmMgPSAt RUZBVUxUOworCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgRVZUQ0hOT1Bfc3Rh dHVzOiB7CisgICAgICAgIHN0cnVjdCBldnRjaG5fc3RhdHVzIHN0YXR1czsKKworICAgICAgICBp ZiAoIGNvcHlfZnJvbV9ndWVzdCgmc3RhdHVzLCBhcmcsIDEpICE9IDAgKQorICAgICAgICAgICAg cmV0dXJuIC1FRkFVTFQ7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogTkI6IGlmIHRoZSBldmVu dCBjaGFubmVsIGlzIG5vdCBoYW5kbGVkIGJ5IHRoZSBzaGltLCBqdXN0IGZvcndhcmQKKyAgICAg ICAgICogdGhlIHN0YXR1cyByZXF1ZXN0IHRvIEwwLCBldmVuIGlmIHRoZSBwb3J0IGlzIG5vdCB2 YWxpZC4KKyAgICAgICAgICovCisgICAgICAgIGlmICggcG9ydF9pc192YWxpZChkLCBzdGF0dXMu cG9ydCkgJiYgZXZ0Y2huX2hhbmRsZWQoZCwgc3RhdHVzLnBvcnQpICkKKyAgICAgICAgICAgIHJj ID0gZXZ0Y2huX3N0YXR1cygmc3RhdHVzKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmMg PSB4ZW5faHlwZXJjYWxsX2V2ZW50X2NoYW5uZWxfb3AoRVZUQ0hOT1Bfc3RhdHVzLCAmc3RhdHVz KTsKKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEVWVENITk9QX2JpbmRfdmNw dTogeworICAgICAgICBzdHJ1Y3QgZXZ0Y2huX2JpbmRfdmNwdSB2Y3B1OworCisgICAgICAgIGlm ICggY29weV9mcm9tX2d1ZXN0KCZ2Y3B1LCBhcmcsIDEpICE9IDAgKQorICAgICAgICAgICAgcmV0 dXJuIC1FRkFVTFQ7CisKKyAgICAgICAgaWYgKCAhcG9ydF9pc192YWxpZChkLCB2Y3B1LnBvcnQp ICkKKyAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworCisgICAgICAgIGlmICggZXZ0Y2huX2hh bmRsZWQoZCwgdmNwdS5wb3J0KSApCisgICAgICAgICAgICByYyA9IGV2dGNobl9iaW5kX3ZjcHUo dmNwdS5wb3J0LCB2Y3B1LnZjcHUpOworICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAg ICAgIHJjID0geGVuX2h5cGVyY2FsbF9ldmVudF9jaGFubmVsX29wKEVWVENITk9QX2JpbmRfdmNw dSwgJnZjcHUpOworICAgICAgICAgICAgaWYgKCAhcmMgKQorICAgICAgICAgICAgICAgICBldnRj aG5fYXNzaWduX3ZjcHUoZCwgdmNwdS5wb3J0LCB2Y3B1LnZjcHUpOworICAgICAgICB9CisKKyAg ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBFVlRDSE5PUF9jbG9zZTogeworICAgICAg ICBpZiAoIGNvcHlfZnJvbV9ndWVzdCgmY2xvc2UsIGFyZywgMSkgIT0gMCApCisgICAgICAgICAg ICByZXR1cm4gLUVGQVVMVDsKKworICAgICAgICBpZiAoICFwb3J0X2lzX3ZhbGlkKGQsIGNsb3Nl LnBvcnQpICkKKyAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworCisgICAgICAgIHNldF9iaXQo Y2xvc2UucG9ydCwgWEVOX3NoYXJlZF9pbmZvLT5ldnRjaG5fbWFzayk7CisKKyAgICAgICAgaWYg KCBldnRjaG5faGFuZGxlZChkLCBjbG9zZS5wb3J0KSApCisgICAgICAgIHsKKyAgICAgICAgICAg IHJjID0gZXZ0Y2huX2Nsb3NlKGQsIGNsb3NlLnBvcnQsIHRydWUpOworICAgICAgICAgICAgaWYg KCByYyApCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQor ICAgICAgICAgICAgZXZ0Y2huX2ZyZWUoZCwgZXZ0Y2huX2Zyb21fcG9ydChkLCBjbG9zZS5wb3J0 KSk7CisKKyAgICAgICAgcmMgPSB4ZW5faHlwZXJjYWxsX2V2ZW50X2NoYW5uZWxfb3AoRVZUQ0hO T1BfY2xvc2UsICZjbG9zZSk7CisgICAgICAgIGlmICggcmMgKQorICAgICAgICAgICAgLyoKKyAg ICAgICAgICAgICAqIElmIHRoZSBwb3J0IGNhbm5vdCBiZSBjbG9zZWQgb24gdGhlIEwwIG1hcmsg aXQgYXMgcmVzZXJ2ZWQKKyAgICAgICAgICAgICAqIGluIHRoZSBzaGltIHRvIGF2b2lkIHJlLXVz aW5nIGl0LgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBldnRjaG5fcmVzZXJ2ZShkLCBj bG9zZS5wb3J0KTsKKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEVWVENITk9Q X2JpbmRfaXBpOiB7CisgICAgICAgIHN0cnVjdCBldnRjaG5fYmluZF9pcGkgaXBpOworCisgICAg ICAgIGlmICggY29weV9mcm9tX2d1ZXN0KCZpcGksIGFyZywgMSkgIT0gMCApCisgICAgICAgICAg ICByZXR1cm4gLUVGQVVMVDsKKworICAgICAgICByYyA9IHhlbl9oeXBlcmNhbGxfZXZlbnRfY2hh bm5lbF9vcChFVlRDSE5PUF9iaW5kX2lwaSwgJmlwaSk7CisgICAgICAgIGlmICggcmMgKQorICAg ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgc3Bpbl9sb2NrKCZkLT5ldmVudF9sb2NrKTsKKyAg ICAgICAgcmMgPSBldnRjaG5fYWxsb2NhdGVfcG9ydChkLCBpcGkucG9ydCk7CisgICAgICAgIGlm ICggcmMgKQorICAgICAgICB7CisgICAgICAgICAgICBzcGluX3VubG9jaygmZC0+ZXZlbnRfbG9j ayk7CisKKyAgICAgICAgICAgIGNsb3NlLnBvcnQgPSBpcGkucG9ydDsKKyAgICAgICAgICAgIEJV R19PTih4ZW5faHlwZXJjYWxsX2V2ZW50X2NoYW5uZWxfb3AoRVZUQ0hOT1BfY2xvc2UsICZjbG9z ZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBldnRjaG5fYXNz aWduX3ZjcHUoZCwgaXBpLnBvcnQsIGlwaS52Y3B1KTsKKyAgICAgICAgZXZ0Y2huX3Jlc2VydmUo ZCwgaXBpLnBvcnQpOworICAgICAgICBzcGluX3VubG9jaygmZC0+ZXZlbnRfbG9jayk7CisKKyAg ICAgICAgaWYgKCBfX2NvcHlfdG9fZ3Vlc3QoYXJnLCAmaXBpLCAxKSApCisgICAgICAgICAgICBy YyA9IC1FRkFVTFQ7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBFVlRDSE5P UF91bm1hc2s6IHsKKyAgICAgICAgc3RydWN0IGV2dGNobl91bm1hc2sgdW5tYXNrOworCisgICAg ICAgIGlmICggY29weV9mcm9tX2d1ZXN0KCZ1bm1hc2ssIGFyZywgMSkgIT0gMCApCisgICAgICAg ICAgICByZXR1cm4gLUVGQVVMVDsKKworICAgICAgICAvKiBVbm1hc2sgaXMgaGFuZGxlZCBpbiBM MSAqLworICAgICAgICByYyA9IGV2dGNobl91bm1hc2sodW5tYXNrLnBvcnQpOworCisgICAgICAg IGJyZWFrOworICAgIH0KKworICAgIGNhc2UgRVZUQ0hOT1Bfc2VuZDogeworICAgICAgICBzdHJ1 Y3QgZXZ0Y2huX3NlbmQgc2VuZDsKKworICAgICAgICBpZiAoIGNvcHlfZnJvbV9ndWVzdCgmc2Vu ZCwgYXJnLCAxKSAhPSAwICkKKyAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOworCisgICAgICAg IHJjID0geGVuX2h5cGVyY2FsbF9ldmVudF9jaGFubmVsX29wKEVWVENITk9QX3NlbmQsICZzZW5k KTsKKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEVWVENITk9QX3Jlc2V0OiB7 CisgICAgICAgIHN0cnVjdCBldnRjaG5fcmVzZXQgcmVzZXQ7CisKKyAgICAgICAgaWYgKCBjb3B5 X2Zyb21fZ3Vlc3QoJnJlc2V0LCBhcmcsIDEpICE9IDAgKQorICAgICAgICAgICAgcmV0dXJuIC1F RkFVTFQ7CisKKyAgICAgICAgcmMgPSB4ZW5faHlwZXJjYWxsX2V2ZW50X2NoYW5uZWxfb3AoRVZU Q0hOT1BfcmVzZXQsICZyZXNldCk7CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZGVm YXVsdDoKKyAgICAgICAgLyogTm8gRklGTyBvciBQSVJRIHN1cHBvcnQgZm9yIG5vdyAqLworICAg ICAgICByYyA9IC1FT1BOT1RTVVBQOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1 cm4gcmM7Cit9CisKK3ZvaWQgcHZfc2hpbV9pbmplY3RfZXZ0Y2huKHVuc2lnbmVkIGludCBwb3J0 KQoreworICAgIGlmICggcG9ydF9pc192YWxpZChndWVzdCwgcG9ydCkgKQorICAgIHsKKyAgICAg ICAgIHN0cnVjdCBldnRjaG4gKmNobiA9IGV2dGNobl9mcm9tX3BvcnQoZ3Vlc3QsIHBvcnQpOwor CisgICAgICAgICBldnRjaG5fcG9ydF9zZXRfcGVuZGluZyhndWVzdCwgY2huLT5ub3RpZnlfdmNw dV9pZCwgY2huKTsKKyAgICB9Cit9CisKIGRvbWlkX3QgZ2V0X2luaXRpYWxfZG9tYWluX2lkKHZv aWQpCiB7CiAgICAgdWludDMyX3QgZWF4LCBlYngsIGVjeCwgZWR4OwpkaWZmIC0tZ2l0IGEveGVu L2NvbW1vbi9ldmVudF9jaGFubmVsLmMgYi94ZW4vY29tbW9uL2V2ZW50X2NoYW5uZWwuYwppbmRl eCBjNjlmOWRiNmRiLi5iZTgzNGM1Yzc4IDEwMDY0NAotLS0gYS94ZW4vY29tbW9uL2V2ZW50X2No YW5uZWwuYworKysgYi94ZW4vY29tbW9uL2V2ZW50X2NoYW5uZWwuYwpAQCAtMTU2LDQ2ICsxNTYs NjIgQEAgc3RhdGljIHZvaWQgZnJlZV9ldnRjaG5fYnVja2V0KHN0cnVjdCBkb21haW4gKmQsIHN0 cnVjdCBldnRjaG4gKmJ1Y2tldCkKICAgICB4ZnJlZShidWNrZXQpOwogfQogCitpbnQgZXZ0Y2hu X2FsbG9jYXRlX3BvcnQoc3RydWN0IGRvbWFpbiAqZCwgZXZ0Y2huX3BvcnRfdCBwb3J0KQorewor ICAgIGlmICggcG9ydCA+IGQtPm1heF9ldnRjaG5fcG9ydCB8fCBwb3J0ID49IGQtPm1heF9ldnRj aG5zICkKKyAgICAgICAgcmV0dXJuIC1FTk9TUEM7CisKKyAgICBpZiAoIHBvcnRfaXNfdmFsaWQo ZCwgcG9ydCkgKQorICAgIHsKKyAgICAgICAgaWYgKCBldnRjaG5fZnJvbV9wb3J0KGQsIHBvcnQp LT5zdGF0ZSAhPSBFQ1NfRlJFRSB8fAorICAgICAgICAgICAgIGV2dGNobl9wb3J0X2lzX2J1c3ko ZCwgcG9ydCkgKQorICAgICAgICAgICAgcmV0dXJuIC1FQlVTWTsKKyAgICB9CisgICAgZWxzZQor ICAgIHsKKyAgICAgICAgc3RydWN0IGV2dGNobiAqY2huOworICAgICAgICBzdHJ1Y3QgZXZ0Y2hu ICoqZ3JwOworCisgICAgICAgIGlmICggIWdyb3VwX2Zyb21fcG9ydChkLCBwb3J0KSApCisgICAg ICAgIHsKKyAgICAgICAgICAgIGdycCA9IHh6YWxsb2NfYXJyYXkoc3RydWN0IGV2dGNobiAqLCBC VUNLRVRTX1BFUl9HUk9VUCk7CisgICAgICAgICAgICBpZiAoICFncnAgKQorICAgICAgICAgICAg ICAgIHJldHVybiAtRU5PTUVNOworICAgICAgICAgICAgZ3JvdXBfZnJvbV9wb3J0KGQsIHBvcnQp ID0gZ3JwOworICAgICAgICB9CisKKyAgICAgICAgY2huID0gYWxsb2NfZXZ0Y2huX2J1Y2tldChk LCBwb3J0KTsKKyAgICAgICAgaWYgKCAhY2huICkKKyAgICAgICAgICAgIHJldHVybiAtRU5PTUVN OworICAgICAgICBidWNrZXRfZnJvbV9wb3J0KGQsIHBvcnQpID0gY2huOworCisgICAgICAgIHdy aXRlX2F0b21pYygmZC0+dmFsaWRfZXZ0Y2hucywgZC0+dmFsaWRfZXZ0Y2hucyArIEVWVENITlNf UEVSX0JVQ0tFVCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgZ2V0 X2ZyZWVfcG9ydChzdHJ1Y3QgZG9tYWluICpkKQogewotICAgIHN0cnVjdCBldnRjaG4gKmNobjsK LSAgICBzdHJ1Y3QgZXZ0Y2huICoqZ3JwOwogICAgIGludCAgICAgICAgICAgIHBvcnQ7CiAKICAg ICBpZiAoIGQtPmlzX2R5aW5nICkKICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CiAKLSAgICBmb3Ig KCBwb3J0ID0gMDsgcG9ydF9pc192YWxpZChkLCBwb3J0KTsgcG9ydCsrICkKKyAgICBmb3IgKCBw b3J0ID0gMDsgcG9ydCA8PSBkLT5tYXhfZXZ0Y2huX3BvcnQ7IHBvcnQrKyApCiAgICAgewotICAg ICAgICBpZiAoIHBvcnQgPiBkLT5tYXhfZXZ0Y2huX3BvcnQgKQotICAgICAgICAgICAgcmV0dXJu IC1FTk9TUEM7Ci0gICAgICAgIGlmICggZXZ0Y2huX2Zyb21fcG9ydChkLCBwb3J0KS0+c3RhdGUg PT0gRUNTX0ZSRUUKLSAgICAgICAgICAgICAmJiAhZXZ0Y2huX3BvcnRfaXNfYnVzeShkLCBwb3J0 KSApCi0gICAgICAgICAgICByZXR1cm4gcG9ydDsKLSAgICB9CisgICAgICAgIGludCByYyA9IGV2 dGNobl9hbGxvY2F0ZV9wb3J0KGQsIHBvcnQpOwogCi0gICAgaWYgKCBwb3J0ID09IGQtPm1heF9l dnRjaG5zIHx8IHBvcnQgPiBkLT5tYXhfZXZ0Y2huX3BvcnQgKQotICAgICAgICByZXR1cm4gLUVO T1NQQzsKKyAgICAgICAgaWYgKCByYyA9PSAtRUJVU1kgKQorICAgICAgICAgICAgY29udGludWU7 CiAKLSAgICBpZiAoICFncm91cF9mcm9tX3BvcnQoZCwgcG9ydCkgKQotICAgIHsKLSAgICAgICAg Z3JwID0geHphbGxvY19hcnJheShzdHJ1Y3QgZXZ0Y2huICosIEJVQ0tFVFNfUEVSX0dST1VQKTsK LSAgICAgICAgaWYgKCAhZ3JwICkKLSAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOwotICAgICAg ICBncm91cF9mcm9tX3BvcnQoZCwgcG9ydCkgPSBncnA7CisgICAgICAgIHJldHVybiBwb3J0Owog ICAgIH0KIAotICAgIGNobiA9IGFsbG9jX2V2dGNobl9idWNrZXQoZCwgcG9ydCk7Ci0gICAgaWYg KCAhY2huICkKLSAgICAgICAgcmV0dXJuIC1FTk9NRU07Ci0gICAgYnVja2V0X2Zyb21fcG9ydChk LCBwb3J0KSA9IGNobjsKLQotICAgIHdyaXRlX2F0b21pYygmZC0+dmFsaWRfZXZ0Y2hucywgZC0+ dmFsaWRfZXZ0Y2hucyArIEVWVENITlNfUEVSX0JVQ0tFVCk7Ci0KLSAgICByZXR1cm4gcG9ydDsK KyAgICByZXR1cm4gLUVOT1NQQzsKIH0KIAotc3RhdGljIHZvaWQgZnJlZV9ldnRjaG4oc3RydWN0 IGRvbWFpbiAqZCwgc3RydWN0IGV2dGNobiAqY2huKQordm9pZCBldnRjaG5fZnJlZShzdHJ1Y3Qg ZG9tYWluICpkLCBzdHJ1Y3QgZXZ0Y2huICpjaG4pCiB7CiAgICAgLyogQ2xlYXIgcGVuZGluZyBl dmVudCB0byBhdm9pZCB1bmV4cGVjdGVkIGJlaGF2aW9yIG9uIHJlLWJpbmQuICovCiAgICAgZXZ0 Y2huX3BvcnRfY2xlYXJfcGVuZGluZyhkLCBjaG4pOwpAQCAtMzQ1LDEzICszNjEsMTMgQEAgc3Rh dGljIGxvbmcgZXZ0Y2huX2JpbmRfaW50ZXJkb21haW4oZXZ0Y2huX2JpbmRfaW50ZXJkb21haW5f dCAqYmluZCkKIH0KIAogCi1zdGF0aWMgbG9uZyBldnRjaG5fYmluZF92aXJxKGV2dGNobl9iaW5k X3ZpcnFfdCAqYmluZCkKK2ludCBldnRjaG5fYmluZF92aXJxKGV2dGNobl9iaW5kX3ZpcnFfdCAq YmluZCwgZXZ0Y2huX3BvcnRfdCBwb3J0KQogewogICAgIHN0cnVjdCBldnRjaG4gKmNobjsKICAg ICBzdHJ1Y3QgdmNwdSAgICp2OwogICAgIHN0cnVjdCBkb21haW4gKmQgPSBjdXJyZW50LT5kb21h aW47Ci0gICAgaW50ICAgICAgICAgICAgcG9ydCwgdmlycSA9IGJpbmQtPnZpcnEsIHZjcHUgPSBi aW5kLT52Y3B1OwotICAgIGxvbmcgICAgICAgICAgIHJjID0gMDsKKyAgICBpbnQgICAgICAgICAg ICB2aXJxID0gYmluZC0+dmlycSwgdmNwdSA9IGJpbmQtPnZjcHU7CisgICAgaW50ICAgICAgICAg ICAgcmMgPSAwOwogCiAgICAgaWYgKCAodmlycSA8IDApIHx8ICh2aXJxID49IEFSUkFZX1NJWkUo di0+dmlycV90b19ldnRjaG4pKSApCiAgICAgICAgIHJldHVybiAtRUlOVkFMOwpAQCAtMzY4LDgg KzM4NCwxOSBAQCBzdGF0aWMgbG9uZyBldnRjaG5fYmluZF92aXJxKGV2dGNobl9iaW5kX3ZpcnFf dCAqYmluZCkKICAgICBpZiAoIHYtPnZpcnFfdG9fZXZ0Y2huW3ZpcnFdICE9IDAgKQogICAgICAg ICBFUlJPUl9FWElUKC1FRVhJU1QpOwogCi0gICAgaWYgKCAocG9ydCA9IGdldF9mcmVlX3BvcnQo ZCkpIDwgMCApCi0gICAgICAgIEVSUk9SX0VYSVQocG9ydCk7CisgICAgaWYgKCBwb3J0ICE9IDAg KQorICAgIHsKKyAgICAgICAgaWYgKCAocmMgPSBldnRjaG5fYWxsb2NhdGVfcG9ydChkLCBwb3J0 KSkgIT0gMCApCisgICAgICAgICAgICBFUlJPUl9FWElUKHJjKTsKKyAgICB9CisgICAgZWxzZQor ICAgIHsKKyAgICAgICAgaW50IGFsbG9jX3BvcnQgPSBnZXRfZnJlZV9wb3J0KGQpOworCisgICAg ICAgIGlmICggYWxsb2NfcG9ydCA8IDAgKQorICAgICAgICAgICAgRVJST1JfRVhJVChhbGxvY19w b3J0KTsKKyAgICAgICAgcG9ydCA9IGFsbG9jX3BvcnQ7CisgICAgfQogCiAgICAgY2huID0gZXZ0 Y2huX2Zyb21fcG9ydChkLCBwb3J0KTsKIApAQCAtNTExLDcgKzUzOCw3IEBAIHN0YXRpYyBsb25n IGV2dGNobl9iaW5kX3BpcnEoZXZ0Y2huX2JpbmRfcGlycV90ICpiaW5kKQogfQogCiAKLXN0YXRp YyBsb25nIGV2dGNobl9jbG9zZShzdHJ1Y3QgZG9tYWluICpkMSwgaW50IHBvcnQxLCBib29sX3Qg Z3Vlc3QpCitpbnQgZXZ0Y2huX2Nsb3NlKHN0cnVjdCBkb21haW4gKmQxLCBpbnQgcG9ydDEsIGJv b2wgZ3Vlc3QpCiB7CiAgICAgc3RydWN0IGRvbWFpbiAqZDIgPSBOVUxMOwogICAgIHN0cnVjdCB2 Y3B1ICAgKnY7CkBAIC02MTksNyArNjQ2LDcgQEAgc3RhdGljIGxvbmcgZXZ0Y2huX2Nsb3NlKHN0 cnVjdCBkb21haW4gKmQxLCBpbnQgcG9ydDEsIGJvb2xfdCBndWVzdCkKIAogICAgICAgICBkb3Vi bGVfZXZ0Y2huX2xvY2soY2huMSwgY2huMik7CiAKLSAgICAgICAgZnJlZV9ldnRjaG4oZDEsIGNo bjEpOworICAgICAgICBldnRjaG5fZnJlZShkMSwgY2huMSk7CiAKICAgICAgICAgY2huMi0+c3Rh dGUgPSBFQ1NfVU5CT1VORDsKICAgICAgICAgY2huMi0+dS51bmJvdW5kLnJlbW90ZV9kb21pZCA9 IGQxLT5kb21haW5faWQ7CkBAIC02MzMsNyArNjYwLDcgQEAgc3RhdGljIGxvbmcgZXZ0Y2huX2Ns b3NlKHN0cnVjdCBkb21haW4gKmQxLCBpbnQgcG9ydDEsIGJvb2xfdCBndWVzdCkKICAgICB9CiAK ICAgICBzcGluX2xvY2soJmNobjEtPmxvY2spOwotICAgIGZyZWVfZXZ0Y2huKGQxLCBjaG4xKTsK KyAgICBldnRjaG5fZnJlZShkMSwgY2huMSk7CiAgICAgc3Bpbl91bmxvY2soJmNobjEtPmxvY2sp OwogCiAgb3V0OgpAQCAtODM5LDcgKzg2Niw3IEBAIHN0YXRpYyB2b2lkIGNsZWFyX2dsb2JhbF92 aXJxX2hhbmRsZXJzKHN0cnVjdCBkb21haW4gKmQpCiAgICAgfQogfQogCi1zdGF0aWMgbG9uZyBl dnRjaG5fc3RhdHVzKGV2dGNobl9zdGF0dXNfdCAqc3RhdHVzKQoraW50IGV2dGNobl9zdGF0dXMo ZXZ0Y2huX3N0YXR1c190ICpzdGF0dXMpCiB7CiAgICAgc3RydWN0IGRvbWFpbiAgICpkOwogICAg IGRvbWlkX3QgICAgICAgICAgZG9tID0gc3RhdHVzLT5kb207CkBAIC0xMDU2LDcgKzEwODMsNyBA QCBsb25nIGRvX2V2ZW50X2NoYW5uZWxfb3AoaW50IGNtZCwgWEVOX0dVRVNUX0hBTkRMRV9QQVJB TSh2b2lkKSBhcmcpCiAgICAgICAgIHN0cnVjdCBldnRjaG5fYmluZF92aXJxIGJpbmRfdmlycTsK ICAgICAgICAgaWYgKCBjb3B5X2Zyb21fZ3Vlc3QoJmJpbmRfdmlycSwgYXJnLCAxKSAhPSAwICkK ICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOwotICAgICAgICByYyA9IGV2dGNobl9iaW5kX3Zp cnEoJmJpbmRfdmlycSk7CisgICAgICAgIHJjID0gZXZ0Y2huX2JpbmRfdmlycSgmYmluZF92aXJx LCAwKTsKICAgICAgICAgaWYgKCAhcmMgJiYgX19jb3B5X3RvX2d1ZXN0KGFyZywgJmJpbmRfdmly cSwgMSkgKQogICAgICAgICAgICAgcmMgPSAtRUZBVUxUOyAvKiBDbGVhbmluZyB1cCBoZXJlIHdv dWxkIGJlIGEgbWVzcyEgKi8KICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS94ZW4vZHJpdmVy cy9jaGFyL3hlbl9wdl9jb25zb2xlLmMgYi94ZW4vZHJpdmVycy9jaGFyL3hlbl9wdl9jb25zb2xl LmMKaW5kZXggZDRmMDUzMjEwMS4uOTQ4MzQzMzAzZSAxMDA2NDQKLS0tIGEveGVuL2RyaXZlcnMv Y2hhci94ZW5fcHZfY29uc29sZS5jCisrKyBiL3hlbi9kcml2ZXJzL2NoYXIveGVuX3B2X2NvbnNv bGUuYwpAQCAtODgsNiArODgsMTEgQEAgc3RhdGljIHZvaWQgbm90aWZ5X2RhZW1vbih2b2lkKQog ICAgIHhlbl9oeXBlcmNhbGxfZXZ0Y2huX3NlbmQoY29uc19ldnRjaG4pOwogfQogCitldnRjaG5f cG9ydF90IHB2X2NvbnNvbGVfZXZ0Y2huKHZvaWQpCit7CisgICAgcmV0dXJuIGNvbnNfZXZ0Y2hu OworfQorCiBzaXplX3QgcHZfY29uc29sZV9yeChzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncykK IHsKICAgICBjaGFyIGM7CkBAIC05NywxMCArMTAyLDYgQEAgc2l6ZV90IHB2X2NvbnNvbGVfcngo c3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MpCiAgICAgaWYgKCAhY29uc19yaW5nICkKICAgICAg ICAgcmV0dXJuIDA7CiAKLSAgICAvKiBUT0RPOiBtb3ZlIHRoaXMgc29tZXdoZXJlICovCi0gICAg aWYgKCAhdGVzdF9iaXQoY29uc19ldnRjaG4sIFhFTl9zaGFyZWRfaW5mby0+ZXZ0Y2huX3BlbmRp bmcpICkKLSAgICAgICAgcmV0dXJuIDA7Ci0KICAgICBwcm9kID0gQUNDRVNTX09OQ0UoY29uc19y aW5nLT5pbl9wcm9kKTsKICAgICBjb25zID0gY29uc19yaW5nLT5pbl9jb25zOwogCkBAIC0xMjUs OCArMTI2LDYgQEAgc2l6ZV90IHB2X2NvbnNvbGVfcngoc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJl Z3MpCiAgICAgQUNDRVNTX09OQ0UoY29uc19yaW5nLT5pbl9jb25zKSA9IGNvbnM7CiAgICAgbm90 aWZ5X2RhZW1vbigpOwogCi0gICAgY2xlYXJfYml0KGNvbnNfZXZ0Y2huLCBYRU5fc2hhcmVkX2lu Zm8tPmV2dGNobl9wZW5kaW5nKTsKLQogICAgIHJldHVybiByZWN2OwogfQogCmRpZmYgLS1naXQg YS94ZW4vaW5jbHVkZS9hc20teDg2L2h5cGVyY2FsbC5oIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9o eXBlcmNhbGwuaAppbmRleCAzZWI0YThkYjg5Li5iOWYzZWNmOWEzIDEwMDY0NAotLS0gYS94ZW4v aW5jbHVkZS9hc20teDg2L2h5cGVyY2FsbC5oCisrKyBiL3hlbi9pbmNsdWRlL2FzbS14ODYvaHlw ZXJjYWxsLmgKQEAgLTI4LDYgKzI4LDkgQEAgZXh0ZXJuIGNvbnN0IGh5cGVyY2FsbF9hcmdzX3Qg aHlwZXJjYWxsX2FyZ3NfdGFibGVbTlJfaHlwZXJjYWxsc107CiB2b2lkIHB2X2h5cGVyY2FsbChz dHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncyk7CiB2b2lkIGh5cGVyY2FsbF9wYWdlX2luaXRpYWxp c2VfcmluZzNfa2VybmVsKHZvaWQgKmh5cGVyY2FsbF9wYWdlKTsKIHZvaWQgaHlwZXJjYWxsX3Bh Z2VfaW5pdGlhbGlzZV9yaW5nMV9rZXJuZWwodm9pZCAqaHlwZXJjYWxsX3BhZ2UpOwordm9pZCBw dl9oeXBlcmNhbGxfdGFibGVfcmVwbGFjZSh1bnNpZ25lZCBpbnQgaHlwZXJjYWxsLCBoeXBlcmNh bGxfZm5fdCAqIG5hdGl2ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHlwZXJj YWxsX2ZuX3QgKmNvbXBhdCk7CitoeXBlcmNhbGxfZm5fdCAqcHZfZ2V0X2h5cGVyY2FsbF9oYW5k bGVyKHVuc2lnbmVkIGludCBoeXBlcmNhbGwsIGJvb2wgY29tcGF0KTsKIAogLyoKICAqIEJvdGgg ZG9fbW11ZXh0X29wKCkgYW5kIGRvX21tdV91cGRhdGUoKToKZGlmZiAtLWdpdCBhL3hlbi9pbmNs dWRlL2FzbS14ODYvcHYvc2hpbS5oIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9wdi9zaGltLmgKaW5k ZXggZmY3YzA1MGRjNi4uYWI2NTZmZDg1NCAxMDA2NDQKLS0tIGEveGVuL2luY2x1ZGUvYXNtLXg4 Ni9wdi9zaGltLmgKKysrIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9wdi9zaGltLmgKQEAgLTM2LDYg KzM2LDcgQEAgdm9pZCBwdl9zaGltX3NldHVwX2RvbShzdHJ1Y3QgZG9tYWluICpkLCBsNF9wZ2Vu dHJ5X3QgKmw0c3RhcnQsCiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgY29u c29sZV92YSwgdW5zaWduZWQgbG9uZyB2cGh5c21hcCwKICAgICAgICAgICAgICAgICAgICAgICAg c3RhcnRfaW5mb190ICpzaSk7CiB2b2lkIHB2X3NoaW1fc2h1dGRvd24odWludDhfdCByZWFzb24p Owordm9pZCBwdl9zaGltX2luamVjdF9ldnRjaG4odW5zaWduZWQgaW50IHBvcnQpOwogZG9taWRf dCBnZXRfaW5pdGlhbF9kb21haW5faWQodm9pZCk7CiAKICNlbHNlCkBAIC01Myw2ICs1NCwxMCBA QCBzdGF0aWMgaW5saW5lIHZvaWQgcHZfc2hpbV9zaHV0ZG93bih1aW50OF90IHJlYXNvbikKIHsK ICAgICBBU1NFUlRfVU5SRUFDSEFCTEUoKTsKIH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBwdl9zaGlt X2luamVjdF9ldnRjaG4odW5zaWduZWQgaW50IHBvcnQpCit7CisgICAgQVNTRVJUX1VOUkVBQ0hB QkxFKCk7Cit9CiBzdGF0aWMgaW5saW5lIGRvbWlkX3QgZ2V0X2luaXRpYWxfZG9tYWluX2lkKHZv aWQpCiB7CiAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS94ZW4vZXZlbnQu aCBiL3hlbi9pbmNsdWRlL3hlbi9ldmVudC5oCmluZGV4IDg3OTE1ZWFkNjkuLmViYjg3OWU4OGQg MTAwNjQ0Ci0tLSBhL3hlbi9pbmNsdWRlL3hlbi9ldmVudC5oCisrKyBiL3hlbi9pbmNsdWRlL3hl bi9ldmVudC5oCkBAIC00OCw2ICs0OCwyMSBAQCBpbnQgZXZ0Y2huX3NlbmQoc3RydWN0IGRvbWFp biAqZCwgdW5zaWduZWQgaW50IGxwb3J0KTsKIC8qIEJpbmQgYSBsb2NhbCBldmVudC1jaGFubmVs IHBvcnQgdG8gdGhlIHNwZWNpZmllZCBWQ1BVLiAqLwogbG9uZyBldnRjaG5fYmluZF92Y3B1KHVu c2lnbmVkIGludCBwb3J0LCB1bnNpZ25lZCBpbnQgdmNwdV9pZCk7CiAKKy8qIEJpbmQgYSBWSVJR LiAqLworaW50IGV2dGNobl9iaW5kX3ZpcnEoZXZ0Y2huX2JpbmRfdmlycV90ICpiaW5kLCBldnRj aG5fcG9ydF90IHBvcnQpOworCisvKiBHZXQgdGhlIHN0YXR1cyBvZiBhbiBldmVudCBjaGFubmVs IHBvcnQuICovCitpbnQgZXZ0Y2huX3N0YXR1cyhldnRjaG5fc3RhdHVzX3QgKnN0YXR1cyk7CisK Ky8qIENsb3NlIGFuIGV2ZW50IGNoYW5uZWwuICovCitpbnQgZXZ0Y2huX2Nsb3NlKHN0cnVjdCBk b21haW4gKmQxLCBpbnQgcG9ydDEsIGJvb2wgZ3Vlc3QpOworCisvKiBGcmVlIGFuIGV2ZW50IGNo YW5uZWwuICovCit2b2lkIGV2dGNobl9mcmVlKHN0cnVjdCBkb21haW4gKmQsIHN0cnVjdCBldnRj aG4gKmNobik7CisKKy8qIEFsbG9jYXRlIGEgc3BlY2lmaWMgZXZlbnQgY2hhbm5lbCBwb3J0LiAq LworaW50IGV2dGNobl9hbGxvY2F0ZV9wb3J0KHN0cnVjdCBkb21haW4gKmQsIHVuc2lnbmVkIGlu dCBwb3J0KTsKKwogLyogVW5tYXNrIGEgbG9jYWwgZXZlbnQtY2hhbm5lbCBwb3J0LiAqLwogaW50 IGV2dGNobl91bm1hc2sodW5zaWduZWQgaW50IHBvcnQpOwogCmRpZmYgLS1naXQgYS94ZW4vaW5j bHVkZS94ZW4vcHZfY29uc29sZS5oIGIveGVuL2luY2x1ZGUveGVuL3B2X2NvbnNvbGUuaAppbmRl eCBlNTc4YjU2NjIwLi5jYjkyNTM5NjY2IDEwMDY0NAotLS0gYS94ZW4vaW5jbHVkZS94ZW4vcHZf Y29uc29sZS5oCisrKyBiL3hlbi9pbmNsdWRlL3hlbi9wdl9jb25zb2xlLmgKQEAgLTEwLDYgKzEw LDcgQEAgdm9pZCBwdl9jb25zb2xlX3NldF9yeF9oYW5kbGVyKHNlcmlhbF9yeF9mbiBmbik7CiB2 b2lkIHB2X2NvbnNvbGVfaW5pdF9wb3N0aXJxKHZvaWQpOwogdm9pZCBwdl9jb25zb2xlX3B1dHMo Y29uc3QgY2hhciAqYnVmKTsKIHNpemVfdCBwdl9jb25zb2xlX3J4KHN0cnVjdCBjcHVfdXNlcl9y ZWdzICpyZWdzKTsKK2V2dGNobl9wb3J0X3QgcHZfY29uc29sZV9ldnRjaG4odm9pZCk7CiAKICNl bHNlCiAKQEAgLTE4LDYgKzE5LDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwdl9jb25zb2xlX3Nl dF9yeF9oYW5kbGVyKHNlcmlhbF9yeF9mbiBmbikgeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgcHZf Y29uc29sZV9pbml0X3Bvc3RpcnEodm9pZCkgeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgcHZfY29u c29sZV9wdXRzKGNvbnN0IGNoYXIgKmJ1ZikgeyB9CiBzdGF0aWMgaW5saW5lIHNpemVfdCBwdl9j b25zb2xlX3J4KHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdzKSB7IHJldHVybiAwOyB9CitldnRj aG5fcG9ydF90IHB2X2NvbnNvbGVfZXZ0Y2huKHZvaWQpCit7CisgICAgQVNTRVJUX1VOUkVBQ0hB QkxFKCk7CisgICAgcmV0dXJuIDA7Cit9CiAKICNlbmRpZiAvKiAhQ09ORklHX1hFTl9HVUVTVCAq LwogI2VuZGlmIC8qIF9fWEVOX1BWX0NPTlNPTEVfSF9fICovCi0tIAoyLjExLjAKCgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGlu ZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnBy b2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8veGVuLWRldmVs