From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: [PATCH v4 12/34] xen/xsplice: Hypervisor implementation of XEN_XSPLICE_op Date: Tue, 15 Mar 2016 13:56:34 -0400 Message-ID: <1458064616-23101-13-git-send-email-konrad.wilk@oracle.com> References: <1458064616-23101-1-git-send-email-konrad.wilk@oracle.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1aftHa-00033b-Lk for xen-devel@lists.xenproject.org; Tue, 15 Mar 2016 18:01:26 +0000 In-Reply-To: <1458064616-23101-1-git-send-email-konrad.wilk@oracle.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org, ross.lagerwall@citrix.com, konrad@kernel.org, andrew.cooper3@citrix.com, mpohlack@amazon.de, sasha.levin@oracle.com Cc: Wei Liu , Daniel De Graaf , Stefano Stabellini , Ian Jackson , Konrad Rzeszutek Wilk List-Id: xen-devel@lists.xenproject.org VGhlIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IGFjdHVhbGx5IGRvIGFueSBwYXRjaGluZy4KCkl0 IGp1c3QgYWRkcyB0aGUgZnJhbWV3b3JrIGZvciBkb2luZyB0aGUgaHlwZXJjYWxscywKa2VlcGlu ZyB0cmFjayBvZiBFTEYgcGF5bG9hZHMsIGFuZCB0aGUgYmFzaWMgb3BlcmF0aW9uczoKIC0gcXVl cnkgd2hpY2ggcGF5bG9hZHMgZXhpc3QsCiAtIHF1ZXJ5IGZvciBzcGVjaWZpYyBwYXlsb2FkcywK IC0gY2hlY2sqMSwgYXBwbHkqMSwgcmVwbGFjZSoxLCBhbmQgdW5sb2FkIHBheWxvYWRzLgoKKjE6 IFdoaWNoIG9mIGNvdXJzZSBpbiB0aGlzIHBhdGNoIGFyZSBub3BzLgoKQWNrZWQtYnk6IERhbmll bCBEZSBHcmFhZiA8ZGdkZWdyYUB0eWNoby5uc2EuZ292PgpTaWduZWQtb2ZmLWJ5OiBLb25yYWQg Unplc3p1dGVrIFdpbGsgPGtvbnJhZC53aWxrQG9yYWNsZS5jb20+ClNpZ25lZC1vZmYtYnk6IFJv c3MgTGFnZXJ3YWxsIDxyb3NzLmxhZ2Vyd2FsbEBjaXRyaXguY29tPgoKLS0tCkNjOiBEYW5pZWwg RGUgR3JhYWYgPGRnZGVncmFAdHljaG8ubnNhLmdvdj4KQ2M6IElhbiBKYWNrc29uIDxpYW4uamFj a3NvbkBldS5jaXRyaXguY29tPgpDYzogU3RlZmFubyBTdGFiZWxsaW5pIDxzdGVmYW5vLnN0YWJl bGxpbmlAZXUuY2l0cml4LmNvbT4KQ2M6IFdlaSBMaXUgPHdlaS5saXUyQGNpdHJpeC5jb20+Cgp2 MjogUmViYXNlZCBvbiBrZXloYW5kbGVyOiByZXdvcmsga2V5aGFuZGxlciBpbmZyYXN0cnVjdHVy ZQp2MzogRml4ZWQgWFNNLgp2NDogUmVtb3ZlZCBSRVZFUlRFRCBzdGF0ZS4KICAgIFNwbGl0IHN0 YXR1cyBhbmQgZXJyb3IgY29kZS4KICAgIEFkZCBSRVBMQUNFIGFjdGlvbi4KICAgIFNlcGFyYXRl IHBheWxvYWQgZGF0YSBmcm9tIHRoZSBwYXlsb2FkIHN0cnVjdHVyZS4KICAgIHMvWFNQTElDRV9J RF8uLi9YU1BMSUNFX05BTUVfLi4vCnY1OiBBZGQgeHNwbGljZSBhbmQgQ09ORklHX1hTUExJQ0Ug YnVpbGQgdG9wdGlvbi4KICAgIEZpeCBjb2RlIHBlciBKYW4ncyByZXZpZXcuCiAgICBVcGRhdGUg dGhlIHN5c2N0bC5oIChjaGFuZ2UgYml0cyB0byBlbnVtIGxpa2UpCnY2OiBSZWJhc2Ugb24gS2Nv bmZpZyBjaGFuZ2VzLgp2NzogQWRkIG1pc3NpbmcgcGFkIGNoZWNrcy4gUmUtb3JkZXIga2V5aGFu ZGxlci5oIHRvIGJ1aWxkIG9uIEFSTS4Kdjg6IFJlYmFzZSBvbiBidWlsZDogaG9vayB0aGUgc2No ZWR1bGVycyBpbnRvIEtjb25maWcKdjk6IHMvaWQvbmFtZS8KICAgIHMvcGF5bG9hZF9saXN0X2xv Y2svcGF5bG9hZF9sb2NrLwp2MTA6IFB1dCAjaWZkZWYgQ09ORklHX1hTUExJQ0UgaW4gaGVhZGVy IGZpbGUgcGVyIERvdWcgcmV2aWV3Lgp2MTE6IEFuZHJldyByZXZpZXc6CiAgICAtIHVzZSByZWN1 cnNpdmUgc3BpbmxvY2tzLCBjaGFuZ2UgbmFtZSB0byB4c3BsaWNlX29wLAogICAgICBzcHJpbmts ZSBuZXctbGluZXMsIGFkZCBsb2NhbCB2YXJpYWJsZSBibG9jaywgaW5jbHVkZQogICAgICBzdGF0 ZSBkaWFncmFtLCBzcXVhc2ggdHdvIGdvdG8gbGFiZWxzLCB1c2UgdnphbGxvYyBpbnN0ZWFkIG9m CiAgICAgIGFsbG9jX3hlbmhlYXBfcGFnZXMuCiAgICAtIGNoYW5nZSAnc3RhdGUnIGZyb20gaW50 MzIgdG8gdWludDMyX3QKICAgIC0gcmVtb3ZlIHRoZSBlcnIgbGFiZWwgb3V0IG9mIHhzcGxpY2Vf dXBsb2FkCiAgICAtIHVzZSB2b2lkKiBpbnN0YWVkIG9mIHVpbnQ4X3QKICAgIC0gbW92ZSBjb2Rl IGFyb3VuZCB0byBtYWtlIGl0IGVhc2llciB0byByZWFkLgogICAgLSBBZGQgdm1hcC5oIHRvIGNv bXBpbGVyIHVuZGVyIEFSTS4KdjEyOiBBZGQgbWlzc2luZyBDb3B5cmlnaHQgaW4gaGVhZGVyIGZp bGUKdjEzOiBEcm9wcGVkIExPQURFRCBzdGF0ZSwgbWFrZSB0aGUgcGF5bG9hZCBnbyBpbiBDSEVD S0VELgotLS0KIHRvb2xzL2ZsYXNrL3BvbGljeS9wb2xpY3kvbW9kdWxlcy94ZW4veGVuLnRlIHwg ICAxICsKIHhlbi9jb21tb24vS2NvbmZpZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEx ICsKIHhlbi9jb21tb24vTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsK IHhlbi9jb21tb24vc3lzY3RsLmMgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA3ICsKIHhl bi9jb21tb24veHNwbGljZS5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgMzg5ICsrKysrKysr KysrKysrKysrKysrKysrKysrKwogeGVuL2luY2x1ZGUvcHVibGljL3N5c2N0bC5oICAgICAgICAg ICAgICAgICAgfCAxNjkgKysrKysrKysrKysrCiB4ZW4vaW5jbHVkZS94ZW4veHNwbGljZS5oICAg ICAgICAgICAgICAgICAgICB8ICAzNSArKysKIHhlbi94c20vZmxhc2svaG9va3MuYyAgICAgICAg ICAgICAgICAgICAgICAgIHwgICA2ICsKIHhlbi94c20vZmxhc2svcG9saWN5L2FjY2Vzc192ZWN0 b3JzICAgICAgICAgIHwgICAyICsKIDkgZmlsZXMgY2hhbmdlZCwgNjIxIGluc2VydGlvbnMoKykK IGNyZWF0ZSBtb2RlIDEwMDY0NCB4ZW4vY29tbW9uL3hzcGxpY2UuYwogY3JlYXRlIG1vZGUgMTAw NjQ0IHhlbi9pbmNsdWRlL3hlbi94c3BsaWNlLmgKCmRpZmYgLS1naXQgYS90b29scy9mbGFzay9w b2xpY3kvcG9saWN5L21vZHVsZXMveGVuL3hlbi50ZSBiL3Rvb2xzL2ZsYXNrL3BvbGljeS9wb2xp Y3kvbW9kdWxlcy94ZW4veGVuLnRlCmluZGV4IGJlYTQwYzEuLmJhYzBjOWUgMTAwNjQ0Ci0tLSBh L3Rvb2xzL2ZsYXNrL3BvbGljeS9wb2xpY3kvbW9kdWxlcy94ZW4veGVuLnRlCisrKyBiL3Rvb2xz L2ZsYXNrL3BvbGljeS9wb2xpY3kvbW9kdWxlcy94ZW4veGVuLnRlCkBAIC03Miw2ICs3Miw3IEBA IGFsbG93IGRvbTBfdCB4ZW5fdDp4ZW4yIHsKIGFsbG93IGRvbTBfdCB4ZW5fdDp4ZW4yIHsKICAg ICBwbXVfY3RybAogICAgIGdldF9zeW1ib2wKKyAgICB4c3BsaWNlX29wCiB9OwogCiAjIEFsbG93 IGRvbTAgdG8gdXNlIGFsbCBYRU5WRVJfIHN1Ym9wcyBhbmQgVkVSU0lPTl9PUCBzdWJvcHMKZGlm ZiAtLWdpdCBhL3hlbi9jb21tb24vS2NvbmZpZyBiL3hlbi9jb21tb24vS2NvbmZpZwppbmRleCA4 ZmJjNDZkLi5kYmU5Y2NjIDEwMDY0NAotLS0gYS94ZW4vY29tbW9uL0tjb25maWcKKysrIGIveGVu L2NvbW1vbi9LY29uZmlnCkBAIC0xNjgsNCArMTY4LDE1IEBAIGNvbmZpZyBTQ0hFRF9ERUZBVUxU CiAKIGVuZG1lbnUKIAorIyBFbmFibGUvRGlzYWJsZSB4c3BsaWNlIHN1cHBvcnQKK2NvbmZpZyBY U1BMSUNFCisJYm9vbCAieFNwbGljZSBsaXZlIHBhdGNoaW5nIHN1cHBvcnQiCisJZGVmYXVsdCB5 CisJLS0taGVscC0tLQorCSAgQWxsb3dzIGEgcnVubmluZyBYZW4gaHlwZXJ2aXNvciB0byBiZSBk eW5hbWljYWxseSBwYXRjaGVkIHVzaW5nCisJICBiaW5hcnkgcGF0Y2hlcyB3aXRob3V0IHJlYm9v dGluZy4gVGhpcyBpcyBwcmltYXJpbHkgdXNlZCB0byBiaW5hcmlseQorCSAgcGF0Y2ggaW4gdGhl IGZpZWxkIGFuIGh5cGVydmlzb3Igd2l0aCBYU0EgZml4ZXMuCisKKwkgIElmIHVuc3VyZSwgc2F5 IFkuCisKIGVuZG1lbnUKZGlmZiAtLWdpdCBhL3hlbi9jb21tb24vTWFrZWZpbGUgYi94ZW4vY29t bW9uL01ha2VmaWxlCmluZGV4IDc2ZDdiMDcuLjBjOGJhMmMgMTAwNjQ0Ci0tLSBhL3hlbi9jb21t b24vTWFrZWZpbGUKKysrIGIveGVuL2NvbW1vbi9NYWtlZmlsZQpAQCAtNjAsNiArNjAsNyBAQCBv YmoteSArPSB2c3ByaW50Zi5vCiBvYmoteSArPSB3YWl0Lm8KIG9iai0kKENPTkZJR19YRU5PUFJP RikgKz0geGVub3Byb2Yubwogb2JqLXkgKz0geG1hbGxvY190bHNmLm8KK29iai0kKENPTkZJR19Y U1BMSUNFKSArPSB4c3BsaWNlLm8KIAogb2JqLWJpbi0kKENPTkZJR19YODYpICs9ICQoZm9yZWFj aCBuLGRlY29tcHJlc3MgYnVuemlwMiB1bnh6IHVubHptYSB1bmx6byB1bmx6NCBlYXJseWNwaW8s JChuKS5pbml0Lm8pCiAKZGlmZiAtLWdpdCBhL3hlbi9jb21tb24vc3lzY3RsLmMgYi94ZW4vY29t bW9uL3N5c2N0bC5jCmluZGV4IDI1M2I3YzguLjE2OGExNTMgMTAwNjQ0Ci0tLSBhL3hlbi9jb21t b24vc3lzY3RsLmMKKysrIGIveGVuL2NvbW1vbi9zeXNjdGwuYwpAQCAtMjgsNiArMjgsNyBAQAog I2luY2x1ZGUgPHhzbS94c20uaD4KICNpbmNsdWRlIDx4ZW4vcG1zdGF0Lmg+CiAjaW5jbHVkZSA8 eGVuL2djb3YuaD4KKyNpbmNsdWRlIDx4ZW4veHNwbGljZS5oPgogCiBsb25nIGRvX3N5c2N0bChY RU5fR1VFU1RfSEFORExFX1BBUkFNKHhlbl9zeXNjdGxfdCkgdV9zeXNjdGwpCiB7CkBAIC00NjAs NiArNDYxLDEyIEBAIGxvbmcgZG9fc3lzY3RsKFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0oeGVuX3N5 c2N0bF90KSB1X3N5c2N0bCkKICAgICAgICAgcmV0ID0gdG1lbV9jb250cm9sKCZvcC0+dS50bWVt X29wKTsKICAgICAgICAgYnJlYWs7CiAKKyAgICBjYXNlIFhFTl9TWVNDVExfeHNwbGljZV9vcDoK KyAgICAgICAgcmV0ID0geHNwbGljZV9vcCgmb3AtPnUueHNwbGljZSk7CisgICAgICAgIGlmICgg cmV0ICE9IC1FTk9TWVMgKQorICAgICAgICAgICAgY29weWJhY2sgPSAxOworICAgICAgICBicmVh azsKKwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldCA9IGFyY2hfZG9fc3lzY3RsKG9wLCB1X3N5 c2N0bCk7CiAgICAgICAgIGNvcHliYWNrID0gMDsKZGlmZiAtLWdpdCBhL3hlbi9jb21tb24veHNw bGljZS5jIGIveGVuL2NvbW1vbi94c3BsaWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uYmEyZDM3NgotLS0gL2Rldi9udWxsCisrKyBiL3hlbi9jb21tb24veHNwbGljZS5j CkBAIC0wLDAgKzEsMzg5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE2IE9yYWNsZSBhbmQv b3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICovCisKKyNpbmNs dWRlIDx4ZW4vZ3Vlc3RfYWNjZXNzLmg+CisjaW5jbHVkZSA8eGVuL2tleWhhbmRsZXIuaD4KKyNp bmNsdWRlIDx4ZW4vbGliLmg+CisjaW5jbHVkZSA8eGVuL2xpc3QuaD4KKyNpbmNsdWRlIDx4ZW4v bW0uaD4KKyNpbmNsdWRlIDx4ZW4vc2NoZWQuaD4KKyNpbmNsdWRlIDx4ZW4vc21wLmg+CisjaW5j bHVkZSA8eGVuL3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8eGVuL3ZtYXAuaD4KKyNpbmNsdWRlIDx4 ZW4veHNwbGljZS5oPgorCisjaW5jbHVkZSA8YXNtL2V2ZW50Lmg+CisjaW5jbHVkZSA8cHVibGlj L3N5c2N0bC5oPgorCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHBheWxvYWRfbG9jayk7CitzdGF0 aWMgTElTVF9IRUFEKHBheWxvYWRfbGlzdCk7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGF5bG9h ZF9jbnQ7CitzdGF0aWMgdW5zaWduZWQgaW50IHBheWxvYWRfdmVyc2lvbiA9IDE7CisKK3N0cnVj dCBwYXlsb2FkIHsKKyAgICB1aW50MzJfdCBzdGF0ZTsgICAgICAgICAgICAgICAgICAgICAgLyog T25lIG9mIHRoZSBYU1BMSUNFX1NUQVRFXyouICovCisgICAgaW50MzJfdCByYzsgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIDAgb3IgLVhFTl9FWFguICovCisgICAgc3RydWN0IGxpc3RfaGVh ZCBsaXN0OyAgICAgICAgICAgICAgIC8qIExpbmtlZCB0byAncGF5bG9hZF9saXN0Jy4gKi8KKyAg ICBjaGFyIG5hbWVbWEVOX1hTUExJQ0VfTkFNRV9TSVpFICsgMV07LyogTmFtZSBvZiBpdC4gKi8K K307CisKK3N0YXRpYyBpbnQgdmVyaWZ5X25hbWUoY29uc3QgeGVuX3hzcGxpY2VfbmFtZV90ICpu YW1lKQoreworICAgIGlmICggbmFtZS0+c2l6ZSA9PSAwIHx8IG5hbWUtPnNpemUgPiBYRU5fWFNQ TElDRV9OQU1FX1NJWkUgKQorICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAgIGlmICggbmFt ZS0+cGFkWzBdIHx8IG5hbWUtPnBhZFsxXSB8fCBuYW1lLT5wYWRbMl0gKQorICAgICAgICByZXR1 cm4gLUVJTlZBTDsKKworICAgIGlmICggIWd1ZXN0X2hhbmRsZV9va2F5KG5hbWUtPm5hbWUsIG5h bWUtPnNpemUpICkKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisKKyAgICByZXR1cm4gMDsKK30K Kworc3RhdGljIGludCB2ZXJpZnlfcGF5bG9hZChjb25zdCB4ZW5fc3lzY3RsX3hzcGxpY2VfdXBs b2FkX3QgKnVwbG9hZCkKK3sKKyAgICBpZiAoIHZlcmlmeV9uYW1lKCZ1cGxvYWQtPm5hbWUpICkK KyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisKKyAgICBpZiAoIHVwbG9hZC0+c2l6ZSA9PSAwICkK KyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisKKyAgICBpZiAoICFndWVzdF9oYW5kbGVfb2theSh1 cGxvYWQtPnBheWxvYWQsIHVwbG9hZC0+c2l6ZSkgKQorICAgICAgICByZXR1cm4gLUVGQVVMVDsK KworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZpbmRfcGF5bG9hZChjb25zdCB4ZW5f eHNwbGljZV9uYW1lX3QgKm5hbWUsIHN0cnVjdCBwYXlsb2FkICoqZikKK3sKKyAgICBzdHJ1Y3Qg cGF5bG9hZCAqZGF0YTsKKyAgICBYRU5fR1VFU1RfSEFORExFX1BBUkFNKGNoYXIpIHN0cjsKKyAg ICBjaGFyIG5bWEVOX1hTUExJQ0VfTkFNRV9TSVpFICsgMV0gPSB7IDAgfTsKKyAgICBpbnQgcmMg PSAtRUlOVkFMOworCisgICAgcmMgPSB2ZXJpZnlfbmFtZShuYW1lKTsKKyAgICBpZiAoIHJjICkK KyAgICAgICAgcmV0dXJuIHJjOworCisgICAgc3RyID0gZ3Vlc3RfaGFuZGxlX2Nhc3QobmFtZS0+ bmFtZSwgY2hhcik7CisgICAgaWYgKCBjb3B5X2Zyb21fZ3Vlc3Qobiwgc3RyLCBuYW1lLT5zaXpl KSApCisgICAgICAgIHJldHVybiAtRUZBVUxUOworCisgICAgc3Bpbl9sb2NrX3JlY3Vyc2l2ZSgm cGF5bG9hZF9sb2NrKTsKKworICAgIHJjID0gLUVOT0VOVDsKKyAgICBsaXN0X2Zvcl9lYWNoX2Vu dHJ5ICggZGF0YSwgJnBheWxvYWRfbGlzdCwgbGlzdCApCisgICAgeworICAgICAgICBpZiAoICFz dHJjbXAoZGF0YS0+bmFtZSwgbikgKQorICAgICAgICB7CisgICAgICAgICAgICAqZiA9IGRhdGE7 CisgICAgICAgICAgICByYyA9IDA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg IH0KKworICAgIHNwaW5fdW5sb2NrX3JlY3Vyc2l2ZSgmcGF5bG9hZF9sb2NrKTsKKworICAgIHJl dHVybiByYzsKK30KKworLyoKKyAqIFdlIE1VU1QgYmUgaG9sZGluZyB0aGUgcGF5bG9hZF9sb2Nr IHNwaW5sb2NrLgorICovCitzdGF0aWMgdm9pZCBmcmVlX3BheWxvYWQoc3RydWN0IHBheWxvYWQg KmRhdGEpCit7CisgICAgQVNTRVJUKHNwaW5faXNfbG9ja2VkKCZwYXlsb2FkX2xvY2spKTsKKyAg ICBsaXN0X2RlbCgmZGF0YS0+bGlzdCk7CisgICAgcGF5bG9hZF9jbnQtLTsKKyAgICBwYXlsb2Fk X3ZlcnNpb24rKzsKKyAgICB4ZnJlZShkYXRhKTsKK30KKworc3RhdGljIGludCB4c3BsaWNlX3Vw bG9hZCh4ZW5fc3lzY3RsX3hzcGxpY2VfdXBsb2FkX3QgKnVwbG9hZCkKK3sKKyAgICBzdHJ1Y3Qg cGF5bG9hZCAqZGF0YSA9IE5VTEw7CisgICAgdm9pZCAqcmF3X2RhdGEgPSBOVUxMOworICAgIGlu dCByYzsKKworICAgIHJjID0gdmVyaWZ5X3BheWxvYWQodXBsb2FkKTsKKyAgICBpZiAoIHJjICkK KyAgICAgICAgcmV0dXJuIHJjOworCisgICAgcmMgPSBmaW5kX3BheWxvYWQoJnVwbG9hZC0+bmFt ZSwgJmRhdGEpOworICAgIGlmICggcmMgPT0gMCAvKiBGb3VuZC4gKi8gKQorICAgICAgICByZXR1 cm4gLUVFWElTVDsKKworICAgIGlmICggcmMgIT0gLUVOT0VOVCApCisgICAgICAgIHJldHVybiBy YzsKKworICAgIGRhdGEgPSB4emFsbG9jKHN0cnVjdCBwYXlsb2FkKTsKKyAgICBpZiAoICFkYXRh ICkKKyAgICAgICAgcmV0dXJuIC1FTk9NRU07CisKKyAgICByYyA9IC1FRkFVTFQ7CisgICAgaWYg KCBjb3B5X2Zyb21fZ3Vlc3QoZGF0YS0+bmFtZSwgdXBsb2FkLT5uYW1lLm5hbWUsIHVwbG9hZC0+ bmFtZS5zaXplKSApCisgICAgICAgIGdvdG8gb3V0OworCisgICAgcmMgPSAtRU5PTUVNOworICAg IHJhd19kYXRhID0gdnphbGxvYyh1cGxvYWQtPnNpemUpOworICAgIGlmICggIXJhd19kYXRhICkK KyAgICAgICAgZ290byBvdXQ7CisKKyAgICByYyA9IC1FRkFVTFQ7CisgICAgaWYgKCBjb3B5X2Zy b21fZ3Vlc3QocmF3X2RhdGEsIHVwbG9hZC0+cGF5bG9hZCwgdXBsb2FkLT5zaXplKSApCisgICAg ICAgIGdvdG8gb3V0OworCisgICAgZGF0YS0+c3RhdGUgPSBYU1BMSUNFX1NUQVRFX0NIRUNLRUQ7 CisgICAgZGF0YS0+cmMgPSAwOworICAgIElOSVRfTElTVF9IRUFEKCZkYXRhLT5saXN0KTsKKwor ICAgIHNwaW5fbG9ja19yZWN1cnNpdmUoJnBheWxvYWRfbG9jayk7CisgICAgbGlzdF9hZGRfdGFp bCgmZGF0YS0+bGlzdCwgJnBheWxvYWRfbGlzdCk7CisgICAgcGF5bG9hZF9jbnQrKzsKKyAgICBw YXlsb2FkX3ZlcnNpb24rKzsKKyAgICBzcGluX3VubG9ja19yZWN1cnNpdmUoJnBheWxvYWRfbG9j ayk7CisKKyBvdXQ6CisgICAgdmZyZWUocmF3X2RhdGEpOworICAgIGlmICggcmMgKQorICAgIHsK KyAgICAgICAgeGZyZWUoZGF0YSk7CisgICAgfQorICAgIHJldHVybiByYzsKK30KKworc3RhdGlj IGludCB4c3BsaWNlX2dldCh4ZW5fc3lzY3RsX3hzcGxpY2VfZ2V0X3QgKmdldCkKK3sKKyAgICBz dHJ1Y3QgcGF5bG9hZCAqZGF0YTsKKyAgICBpbnQgcmM7CisKKyAgICByYyA9IHZlcmlmeV9uYW1l KCZnZXQtPm5hbWUpOworICAgIGlmICggcmMgKQorICAgICAgICByZXR1cm4gcmM7CisKKyAgICBy YyA9IGZpbmRfcGF5bG9hZCgmZ2V0LT5uYW1lLCAmZGF0YSk7CisgICAgaWYgKCByYyApCisgICAg ICAgIHJldHVybiByYzsKKworICAgIGdldC0+c3RhdHVzLnN0YXRlID0gZGF0YS0+c3RhdGU7Cisg ICAgZ2V0LT5zdGF0dXMucmMgPSBkYXRhLT5yYzsKKworICAgIHJldHVybiAwOworfQorCitzdGF0 aWMgaW50IHhzcGxpY2VfbGlzdCh4ZW5fc3lzY3RsX3hzcGxpY2VfbGlzdF90ICpsaXN0KQorewor ICAgIHhlbl94c3BsaWNlX3N0YXR1c190IHN0YXR1czsKKyAgICBzdHJ1Y3QgcGF5bG9hZCAqZGF0 YTsKKyAgICB1bnNpZ25lZCBpbnQgaWR4ID0gMCwgaSA9IDA7CisgICAgaW50IHJjID0gMDsKKwor ICAgIGlmICggbGlzdC0+bnIgPiAxMDI0ICkKKyAgICAgICAgcmV0dXJuIC1FMkJJRzsKKworICAg IGlmICggbGlzdC0+cGFkICE9IDAgKQorICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAgIGlm ICggIWd1ZXN0X2hhbmRsZV9va2F5KGxpc3QtPnN0YXR1cywgc2l6ZW9mKHN0YXR1cykgKiBsaXN0 LT5ucikgfHwKKyAgICAgICAgICFndWVzdF9oYW5kbGVfb2theShsaXN0LT5uYW1lLCBYRU5fWFNQ TElDRV9OQU1FX1NJWkUgKiBsaXN0LT5ucikgfHwKKyAgICAgICAgICFndWVzdF9oYW5kbGVfb2th eShsaXN0LT5sZW4sIHNpemVvZih1aW50MzJfdCkgKiBsaXN0LT5ucikgKQorICAgICAgICByZXR1 cm4gLUVJTlZBTDsKKworICAgIHNwaW5fbG9ja19yZWN1cnNpdmUoJnBheWxvYWRfbG9jayk7Cisg ICAgaWYgKCBsaXN0LT5pZHggPiBwYXlsb2FkX2NudCB8fCAhbGlzdC0+bnIgKQorICAgIHsKKyAg ICAgICAgc3Bpbl91bmxvY2tfcmVjdXJzaXZlKCZwYXlsb2FkX2xvY2spOworICAgICAgICByZXR1 cm4gLUVJTlZBTDsKKyAgICB9CisKKyAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5KCBkYXRhLCAmcGF5 bG9hZF9saXN0LCBsaXN0ICkKKyAgICB7CisgICAgICAgIHVpbnQzMl90IGxlbjsKKworICAgICAg ICBpZiAoIGxpc3QtPmlkeCA+IGkrKyApCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg ICBzdGF0dXMuc3RhdGUgPSBkYXRhLT5zdGF0ZTsKKyAgICAgICAgc3RhdHVzLnJjID0gZGF0YS0+ cmM7CisgICAgICAgIGxlbiA9IHN0cmxlbihkYXRhLT5uYW1lKTsKKworICAgICAgICAvKiBOLkIu ICdpZHgnICE9ICdpJy4gKi8KKyAgICAgICAgaWYgKCBfX2NvcHlfdG9fZ3Vlc3Rfb2Zmc2V0KGxp c3QtPm5hbWUsIGlkeCAqIFhFTl9YU1BMSUNFX05BTUVfU0laRSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGRhdGEtPm5hbWUsIGxlbikgfHwKKyAgICAgICAgICAgICBfX2Nv cHlfdG9fZ3Vlc3Rfb2Zmc2V0KGxpc3QtPmxlbiwgaWR4LCAmbGVuLCAxKSB8fAorICAgICAgICAg ICAgIF9fY29weV90b19ndWVzdF9vZmZzZXQobGlzdC0+c3RhdHVzLCBpZHgsICZzdGF0dXMsIDEp ICkKKyAgICAgICAgeworICAgICAgICAgICAgcmMgPSAtRUZBVUxUOworICAgICAgICAgICAgYnJl YWs7CisgICAgICAgIH0KKworICAgICAgICBpZHgrKzsKKworICAgICAgICBpZiAoIGh5cGVyY2Fs bF9wcmVlbXB0X2NoZWNrKCkgfHwgKGlkeCArIDEgPiBsaXN0LT5ucikgKQorICAgICAgICAgICAg YnJlYWs7CisgICAgfQorICAgIGxpc3QtPm5yID0gcGF5bG9hZF9jbnQgLSBpOyAvKiBSZW1haW5p bmcgYW1vdW50LiAqLworICAgIGxpc3QtPnZlcnNpb24gPSBwYXlsb2FkX3ZlcnNpb247CisgICAg c3Bpbl91bmxvY2tfcmVjdXJzaXZlKCZwYXlsb2FkX2xvY2spOworCisgICAgLyogQW5kIGhvdyBt YW55IHdlIGhhdmUgcHJvY2Vzc2VkLiAqLworICAgIHJldHVybiByYyA/IDogaWR4OworfQorCitz dGF0aWMgaW50IHhzcGxpY2VfYWN0aW9uKHhlbl9zeXNjdGxfeHNwbGljZV9hY3Rpb25fdCAqYWN0 aW9uKQoreworICAgIHN0cnVjdCBwYXlsb2FkICpkYXRhOworICAgIGludCByYzsKKworICAgIHJj ID0gdmVyaWZ5X25hbWUoJmFjdGlvbi0+bmFtZSk7CisgICAgaWYgKCByYyApCisgICAgICAgIHJl dHVybiByYzsKKworICAgIHNwaW5fbG9ja19yZWN1cnNpdmUoJnBheWxvYWRfbG9jayk7CisgICAg cmMgPSBmaW5kX3BheWxvYWQoJmFjdGlvbi0+bmFtZSwgJmRhdGEpOworICAgIGlmICggcmMgKQor ICAgICAgICBnb3RvIG91dDsKKworICAgIHN3aXRjaCAoIGFjdGlvbi0+Y21kICkKKyAgICB7Cisg ICAgY2FzZSBYU1BMSUNFX0FDVElPTl9DSEVDSzoKKyAgICAgICAgaWYgKCBkYXRhLT5zdGF0ZSA9 PSBYU1BMSUNFX1NUQVRFX0NIRUNLRUQgKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBObyBp bXBsZW1lbnRhdGlvbiB5ZXQuICovCisgICAgICAgICAgICBkYXRhLT5zdGF0ZSA9IFhTUExJQ0Vf U1RBVEVfQ0hFQ0tFRDsKKyAgICAgICAgICAgIGRhdGEtPnJjID0gMDsKKyAgICAgICAgICAgIHJj ID0gMDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgWFNQTElDRV9BQ1RJ T05fVU5MT0FEOgorICAgICAgICBpZiAoIGRhdGEtPnN0YXRlID09IFhTUExJQ0VfU1RBVEVfQ0hF Q0tFRCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGZyZWVfcGF5bG9hZChkYXRhKTsKKyAgICAg ICAgICAgIC8qIE5vIHRvdWNoaW5nICdkYXRhJyBmcm9tIGhlcmUgb24hICovCisgICAgICAgICAg ICByYyA9IDA7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFhTUExJQ0Vf QUNUSU9OX1JFVkVSVDoKKyAgICAgICAgaWYgKCBkYXRhLT5zdGF0ZSA9PSBYU1BMSUNFX1NUQVRF X0FQUExJRUQgKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBObyBpbXBsZW1lbnRhdGlvbiB5 ZXQuICovCisgICAgICAgICAgICBkYXRhLT5zdGF0ZSA9IFhTUExJQ0VfU1RBVEVfQ0hFQ0tFRDsK KyAgICAgICAgICAgIGRhdGEtPnJjID0gMDsKKyAgICAgICAgICAgIHJjID0gMDsKKyAgICAgICAg fQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgWFNQTElDRV9BQ1RJT05fQVBQTFk6CisgICAg ICAgIGlmICggKGRhdGEtPnN0YXRlID09IFhTUExJQ0VfU1RBVEVfQ0hFQ0tFRCkgKQorICAgICAg ICB7CisgICAgICAgICAgICAvKiBObyBpbXBsZW1lbnRhdGlvbiB5ZXQuICovCisgICAgICAgICAg ICBkYXRhLT5zdGF0ZSA9IFhTUExJQ0VfU1RBVEVfQVBQTElFRDsKKyAgICAgICAgICAgIGRhdGEt PnJjID0gMDsKKyAgICAgICAgICAgIHJjID0gMDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK KworICAgIGNhc2UgWFNQTElDRV9BQ1RJT05fUkVQTEFDRToKKyAgICAgICAgaWYgKCBkYXRhLT5z dGF0ZSA9PSBYU1BMSUNFX1NUQVRFX0NIRUNLRUQgKQorICAgICAgICB7CisgICAgICAgICAgICAv KiBObyBpbXBsZW1lbnRhdGlvbiB5ZXQuICovCisgICAgICAgICAgICBkYXRhLT5zdGF0ZSA9IFhT UExJQ0VfU1RBVEVfQ0hFQ0tFRDsKKyAgICAgICAgICAgIGRhdGEtPnJjID0gMDsKKyAgICAgICAg ICAgIHJjID0gMDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6Cisg ICAgICAgIHJjID0gLUVPUE5PVFNVUFA7CisgICAgICAgIGJyZWFrOworICAgIH0KKworIG91dDoK KyAgICBzcGluX3VubG9ja19yZWN1cnNpdmUoJnBheWxvYWRfbG9jayk7CisKKyAgICByZXR1cm4g cmM7Cit9CisKK2ludCB4c3BsaWNlX29wKHhlbl9zeXNjdGxfeHNwbGljZV9vcF90ICp4c3BsaWNl KQoreworICAgIGludCByYzsKKworICAgIGlmICggeHNwbGljZS0+cGFkICE9IDAgKQorICAgICAg ICByZXR1cm4gLUVJTlZBTDsKKworICAgIHN3aXRjaCAoIHhzcGxpY2UtPmNtZCApCisgICAgewor ICAgIGNhc2UgWEVOX1NZU0NUTF9YU1BMSUNFX1VQTE9BRDoKKyAgICAgICAgcmMgPSB4c3BsaWNl X3VwbG9hZCgmeHNwbGljZS0+dS51cGxvYWQpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ug WEVOX1NZU0NUTF9YU1BMSUNFX0dFVDoKKyAgICAgICAgcmMgPSB4c3BsaWNlX2dldCgmeHNwbGlj ZS0+dS5nZXQpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgWEVOX1NZU0NUTF9YU1BMSUNF X0xJU1Q6CisgICAgICAgIHJjID0geHNwbGljZV9saXN0KCZ4c3BsaWNlLT51Lmxpc3QpOworICAg ICAgICBicmVhazsKKworICAgIGNhc2UgWEVOX1NZU0NUTF9YU1BMSUNFX0FDVElPTjoKKyAgICAg ICAgcmMgPSB4c3BsaWNlX2FjdGlvbigmeHNwbGljZS0+dS5hY3Rpb24pOworICAgICAgICBicmVh azsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIHJjID0gLUVPUE5PVFNVUFA7CisgICAgICAgIGJy ZWFrOworICAgfQorCisgICAgcmV0dXJuIHJjOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqc3Rh dGUyc3RyKHVpbnQzMl90IHN0YXRlKQoreworI2RlZmluZSBTVEFURSh4KSBbWFNQTElDRV9TVEFU RV8jI3hdID0gI3gKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgbmFtZXNbXSA9IHsKKyAg ICAgICAgICAgIFNUQVRFKENIRUNLRUQpLAorICAgICAgICAgICAgU1RBVEUoQVBQTElFRCksCisg ICAgfTsKKyN1bmRlZiBTVEFURQorCisgICAgaWYgKHN0YXRlID49IEFSUkFZX1NJWkUobmFtZXMp IHx8ICFuYW1lc1tzdGF0ZV0pCisgICAgICAgIHJldHVybiAidW5rbm93biI7CisKKyAgICByZXR1 cm4gbmFtZXNbc3RhdGVdOworfQorCitzdGF0aWMgdm9pZCB4c3BsaWNlX3ByaW50YWxsKHVuc2ln bmVkIGNoYXIga2V5KQoreworICAgIHN0cnVjdCBwYXlsb2FkICpkYXRhOworCisgICAgc3Bpbl9s b2NrX3JlY3Vyc2l2ZSgmcGF5bG9hZF9sb2NrKTsKKworICAgIGxpc3RfZm9yX2VhY2hfZW50cnkg KCBkYXRhLCAmcGF5bG9hZF9saXN0LCBsaXN0ICkKKyAgICAgICAgcHJpbnRrKCIgbmFtZT0lcyBz dGF0ZT0lcyglZClcbiIsIGRhdGEtPm5hbWUsCisgICAgICAgICAgICAgICBzdGF0ZTJzdHIoZGF0 YS0+c3RhdGUpLCBkYXRhLT5zdGF0ZSk7CisKKyAgICBzcGluX3VubG9ja19yZWN1cnNpdmUoJnBh eWxvYWRfbG9jayk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHhzcGxpY2VfaW5pdCh2b2lkKQor eworICAgIHJlZ2lzdGVyX2tleWhhbmRsZXIoJ3gnLCB4c3BsaWNlX3ByaW50YWxsLCAicHJpbnQg eHNwbGljaW5nIGluZm8iLCAxKTsKKyAgICByZXR1cm4gMDsKK30KK19faW5pdGNhbGwoeHNwbGlj ZV9pbml0KTsKKworLyoKKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIG1vZGU6IEMKKyAqIGMtZmls ZS1zdHlsZTogIkJTRCIKKyAqIGMtYmFzaWMtb2Zmc2V0OiA0CisgKiB0YWItd2lkdGg6IDQKKyAq IGluZGVudC10YWJzLW1vZGU6IG5pbAorICogRW5kOgorICovCmRpZmYgLS1naXQgYS94ZW4vaW5j bHVkZS9wdWJsaWMvc3lzY3RsLmggYi94ZW4vaW5jbHVkZS9wdWJsaWMvc3lzY3RsLmgKaW5kZXgg OTY2ODBlYi4uNDg3ZjYyYyAxMDA2NDQKLS0tIGEveGVuL2luY2x1ZGUvcHVibGljL3N5c2N0bC5o CisrKyBiL3hlbi9pbmNsdWRlL3B1YmxpYy9zeXNjdGwuaApAQCAtNzY2LDYgKzc2NiwxNzMgQEAg c3RydWN0IHhlbl9zeXNjdGxfdG1lbV9vcCB7CiB0eXBlZGVmIHN0cnVjdCB4ZW5fc3lzY3RsX3Rt ZW1fb3AgeGVuX3N5c2N0bF90bWVtX29wX3Q7CiBERUZJTkVfWEVOX0dVRVNUX0hBTkRMRSh4ZW5f c3lzY3RsX3RtZW1fb3BfdCk7CiAKKy8qCisgKiBYRU5fU1lTQ1RMX1hTUExJQ0Vfb3AKKyAqCisg KiBSZWZlciB0byB0aGUgZG9jcy91bnN0YWJsZS9taXNjL3hzcGxpY2UubWFya2Rvd24KKyAqIGZv ciB0aGUgZGVzaWduIGRldGFpbHMgb2YgdGhpcyBoeXBlcmNhbGwuCisgKgorICogVGhlcmUgYXJl IGZvdXIgc3ViLW9wczoKKyAqICBYRU5fU1lTQ1RMX1hTUExJQ0VfVVBMT0FEICgwKQorICogIFhF Tl9TWVNDVExfWFNQTElDRV9HRVQgKDEpCisgKiAgWEVOX1NZU0NUTF9YU1BMSUNFX0xJU1QgKDIp CisgKiAgWEVOX1NZU0NUTF9YU1BMSUNFX0FDVElPTiAoMykKKyAqCisgKiBUaGUgbm9ybWFsIHNl cXVlbmNlIG9mIHN1Yi1vcHMgaXMgdG86CisgKiAgMSkgWEVOX1NZU0NUTF9YU1BMSUNFX1VQTE9B RCB0byB1cGxvYWQgdGhlIHBheWxvYWQuIElmIGVycm9ycyBTVE9QLgorICogIDIpIFhFTl9TWVND VExfWFNQTElDRV9HRVQgdG8gY2hlY2sgdGhlIGAtPnJjYC4gSWYgLVhFTl9FQUdBSU4gc3Bpbi4K KyAqICAgICBJZiB6ZXJvIGdvIHRvIG5leHQgc3RlcC4KKyAqICAzKSBYRU5fU1lTQ1RMX1hTUExJ Q0VfQUNUSU9OIHdpdGggWFNQTElDRV9BQ1RJT05fQ0hFQ0sgY29tbWFuZCB0byB2ZXJpZnkKKyAq ICAgICB0aGF0IHRoZSBwYXlsb2FkIGNhbiBiZSBzdWNjZXNmdWxseSBhcHBsaWVkLgorICogIDQp IFhFTl9TWVNDVExfWFNQTElDRV9HRVQgdG8gY2hlY2sgdGhlIGAtPnJjYC4gSWYgLVhFTl9FQUdB SU4gc3Bpbi4KKyAqICAgICBJZiB6ZXJvIGdvIHRvIG5leHQgc3RlcC4KKyAqICA1KSBYRU5fU1lT Q1RMX1hTUExJQ0VfQUNUSU9OIHdpdGggWFNQTElDRV9BQ1RJT05fQVBQTFkgdG8gYXBwbHkgdGhl IHBhdGNoLgorICogIDYpIFhFTl9TWVNDVExfWFNQTElDRV9HRVQgdG8gY2hlY2sgdGhlIGAtPnJj YC4gSWYgaW4gLVhFTl9FQUdBSU4gc3Bpbi4KKyAqICAgICBJZiB6ZXJvIGV4aXQgd2l0aCBzdWNj ZXNzLgorICovCisKKy8qCisgKiBTdHJ1Y3R1cmUgZGVzY3JpYmluZyBhbiBFTEYgcGF5bG9hZC4g VW5pcXVlbHkgaWRlbnRpZmllcyB0aGUKKyAqIHBheWxvYWQuIFNob3VsZCBiZSBodW1hbiByZWFk YWJsZS4KKyAqIFJlY29tbWVuZGVkIGxlbmd0aCBpcyB1cHRvIFhFTl9YU1BMSUNFX05BTUVfU0la RS4KKyAqLworI2RlZmluZSBYRU5fWFNQTElDRV9OQU1FX1NJWkUgMTI4CitzdHJ1Y3QgeGVuX3hz cGxpY2VfbmFtZSB7CisgICAgWEVOX0dVRVNUX0hBTkRMRV82NChjaGFyKSBuYW1lOyAgICAgICAg IC8qIElOOiBwb2ludGVyIHRvIG5hbWUuICovCisgICAgdWludDE2X3Qgc2l6ZTsgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIElOOiBzaXplIG9mIG5hbWUuIE1heSBiZSB1cHRvCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhFTl9YU1BMSUNFX05BTUVf U0laRS4gKi8KKyAgICB1aW50MTZfdCBwYWRbM107ICAgICAgICAgICAgICAgICAgICAgICAgLyog SU46IE1VU1QgYmUgemVyby4gKi8KK307Cit0eXBlZGVmIHN0cnVjdCB4ZW5feHNwbGljZV9uYW1l IHhlbl94c3BsaWNlX25hbWVfdDsKK0RFRklORV9YRU5fR1VFU1RfSEFORExFKHhlbl94c3BsaWNl X25hbWVfdCk7CisKKy8qCisgKiBVcGxvYWQgYSBwYXlsb2FkIHRvIHRoZSBoeXBlcnZpc29yLiBU aGUgcGF5bG9hZCBpcyB2ZXJpZmllZAorICogYWdhaW5zdCBiYXNpYyBjaGVja3MgYW5kIGlmIHRo ZXJlIGFyZSBhbnkgaXNzdWVzIHRoZSBwcm9wZXIgcmV0dXJuIGNvZGUKKyAqIHdpbGwgYmUgcmV0 dXJuZWQuIFRoZSBwYXlsb2FkIGlzIG5vdCBhcHBsaWVkIGF0IHRoaXMgdGltZSAtIHRoYXQgaXMK KyAqIGNvbnRyb2xsZWQgYnkgWEVOX1NZU0NUTF9YU1BMSUNFX0FDVElPTi4KKyAqCisgKiBUaGUg cmV0dXJuIHZhbHVlIGlzIHplcm8gaWYgdGhlIHBheWxvYWQgd2FzIHN1Y2Nlc2Z1bGx5IHVwbG9h ZGVkLgorICogT3RoZXJ3aXNlIGFuIEVYWCByZXR1cm4gdmFsdWUgaXMgcHJvdmlkZWQuIER1cGxp Y2F0ZSBgbmFtZWAgYXJlIG5vdAorICogc3VwcG9ydGVkLgorICoKKyAqIFRoZSBwYXlsb2FkIGF0 IHRoaXMgcG9pbnQgaXMgdmVyaWZpZWQgYWdhaW5zdCBiYXNpYyBjaGVja3MuCisgKgorICogVGhl IGBwYXlsb2FkYCBpcyB0aGUgRUxGIHBheWxvYWQgYXMgbWVudGlvbmVkIGluIHRoZSBgUGF5bG9h ZCBmb3JtYXRgCisgKiBzZWN0aW9uIGluIHRoZSB4U3BsaWNlIGRlc2lnbiBkb2N1bWVudC4KKyAq LworI2RlZmluZSBYRU5fU1lTQ1RMX1hTUExJQ0VfVVBMT0FEIDAKK3N0cnVjdCB4ZW5fc3lzY3Rs X3hzcGxpY2VfdXBsb2FkIHsKKyAgICB4ZW5feHNwbGljZV9uYW1lX3QgbmFtZTsgICAgICAgICAg ICAgICAgLyogSU4sIG5hbWUgb2YgdGhlIHBhdGNoLiAqLworICAgIHVpbnQ2NF90IHNpemU7ICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBJTiwgc2l6ZSBvZiB0aGUgRUxGIGZpbGUuICovCisg ICAgWEVOX0dVRVNUX0hBTkRMRV82NCh1aW50OCkgcGF5bG9hZDsgICAgIC8qIElOLCB0aGUgRUxG IGZpbGUuICovCit9OwordHlwZWRlZiBzdHJ1Y3QgeGVuX3N5c2N0bF94c3BsaWNlX3VwbG9hZCB4 ZW5fc3lzY3RsX3hzcGxpY2VfdXBsb2FkX3Q7CitERUZJTkVfWEVOX0dVRVNUX0hBTkRMRSh4ZW5f c3lzY3RsX3hzcGxpY2VfdXBsb2FkX3QpOworCisvKgorICogUmV0cmlldmUgYW4gc3RhdHVzIG9m IGFuIHNwZWNpZmljIHBheWxvYWQuCisgKgorICogVXBvbiBjb21wbGV0aW9uIHRoZSBgc3RydWN0 IHhlbl94c3BsaWNlX3N0YXR1c2AgaXMgdXBkYXRlZC4KKyAqCisgKiBUaGUgcmV0dXJuIHZhbHVl IGlzIHplcm8gb24gc3VjY2VzcyBhbmQgWEVOX0VYWCBvbiBmYWlsdXJlLiBUaGlzIG9wZXJhdGlv bgorICogaXMgc3luY2hyb25vdXMgYW5kIGRvZXMgbm90IHJlcXVpcmUgcHJlZW1wdGlvbi4KKyAq LworI2RlZmluZSBYRU5fU1lTQ1RMX1hTUExJQ0VfR0VUIDEKKworc3RydWN0IHhlbl94c3BsaWNl X3N0YXR1cyB7CisjZGVmaW5lIFhTUExJQ0VfU1RBVEVfQ0hFQ0tFRCAgICAgIDEKKyNkZWZpbmUg WFNQTElDRV9TVEFURV9BUFBMSUVEICAgICAgMgorICAgIHVpbnQzMl90IHN0YXRlOyAgICAgICAg ICAgICAgICAvKiBPVVQ6IFhTUExJQ0VfU1RBVEVfKi4gKi8KKyAgICBpbnQzMl90IHJjOyAgICAg ICAgICAgICAgICAgICAgLyogT1VUOiAwIGlmIG5vIGVycm9yLCBvdGhlcndpc2UgLVhFTl9FWFgu ICovCit9OwordHlwZWRlZiBzdHJ1Y3QgeGVuX3hzcGxpY2Vfc3RhdHVzIHhlbl94c3BsaWNlX3N0 YXR1c190OworREVGSU5FX1hFTl9HVUVTVF9IQU5ETEUoeGVuX3hzcGxpY2Vfc3RhdHVzX3QpOwor CitzdHJ1Y3QgeGVuX3N5c2N0bF94c3BsaWNlX2dldCB7CisgICAgeGVuX3hzcGxpY2VfbmFtZV90 IG5hbWU7ICAgICAgICAgICAgICAgIC8qIElOLCBuYW1lIG9mIHRoZSBwYXlsb2FkLiAqLworICAg IHhlbl94c3BsaWNlX3N0YXR1c190IHN0YXR1czsgICAgICAgICAgICAvKiBJTi9PVVQsIHN0YXRl IG9mIGl0LiAqLworfTsKK3R5cGVkZWYgc3RydWN0IHhlbl9zeXNjdGxfeHNwbGljZV9nZXQgeGVu X3N5c2N0bF94c3BsaWNlX2dldF90OworREVGSU5FX1hFTl9HVUVTVF9IQU5ETEUoeGVuX3N5c2N0 bF94c3BsaWNlX2dldF90KTsKKworLyoKKyAqIFJldHJpZXZlIGFuIGFycmF5IG9mIGFiYnJldmlh dGVkIHN0YXR1cyBhbmQgbmFtZXMgb2YgcGF5bG9hZHMgdGhhdCBhcmUKKyAqIGxvYWRlZCBpbiB0 aGUgaHlwZXJ2aXNvci4KKyAqCisgKiBJZiB0aGUgaHlwZXJjYWxsIHJldHVybnMgYW4gcG9zaXRp dmUgbnVtYmVyLCBpdCBpcyB0aGUgbnVtYmVyICh1cCB0byBgbnJgKQorICogb2YgdGhlIHBheWxv YWRzIHJldHVybmVkLCBhbG9uZyB3aXRoIGBucmAgdXBkYXRlZCB3aXRoIHRoZSBudW1iZXIgb2Yg cmVtYWluaW5nCisgKiBwYXlsb2FkcywgYHZlcnNpb25gIHVwZGF0ZWQgKGl0IG1heSBiZSB0aGUg c2FtZSBhY3Jvc3MgaHlwZXJjYWxscy4gSWYgaXQKKyAqIHZhcmllcyB0aGUgZGF0YSBpcyBzdGFs ZSBhbmQgZnVydGhlciBjYWxscyBjb3VsZCBmYWlsKS4gVGhlIGBzdGF0dXNgLAorICogYG5hbWVg LCBhbmQgYGxlbmAnIGFyZSB1cGRhdGVkIGF0IHRoZWlyIGRlc2lnbmVkIGluZGV4IHZhbHVlIChg aWR4YCkgd2l0aAorICogdGhlIHJldHVybmVkIHZhbHVlIG9mIGRhdGEuCisgKgorICogSWYgdGhl IGh5cGVyY2FsbCByZXR1cm5zIEUyQklHIHRoZSBgbnJgIGlzIHRvbyBiaWcgYW5kIHNob3VsZCBi ZQorICogbG93ZXJlZC4gVGhlIHVwcGVyIGxpbWl0IG9mIGBucmAgaXMgbGVmdCB0byB0aGUgaW1w bGVtZW50aW9uLgorICoKKyAqIE5vdGUgdGhhdCBkdWUgdG8gdGhlIGFzeW5jaHJvbm91cyBuYXR1 cmUgb2YgaHlwZXJjYWxscyB0aGUgZG9tYWluIG1pZ2h0IGhhdmUKKyAqIGFkZGVkIG9yIHJlbW92 ZWQgdGhlIG51bWJlciBvZiBwYXlsb2FkcyBtYWtpbmcgdGhpcyBpbmZvcm1hdGlvbiBzdGFsZS4g SXQgaXMKKyAqIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgdG9vbHN0YWNrIHRvIHVzZSB0aGUg YHZlcnNpb25gIGZpZWxkIHRvIGNoZWNrCisgKiBiZXR3ZWVuIGVhY2ggaW52b2NhdGlvbi4gaWYg dGhlIHZlcnNpb24gZGlmZmVycyBpdCBzaG91bGQgZGlzY2FyZCB0aGUgc3RhbGUKKyAqIGRhdGEg YW5kIHN0YXJ0IGZyb20gc2NyYXRjaC4gSXQgaXMgT0sgZm9yIHRoZSB0b29sc3RhY2sgdG8gdXNl IHRoZSBuZXcKKyAqIGB2ZXJzaW9uYCBmaWVsZC4KKyAqLworI2RlZmluZSBYRU5fU1lTQ1RMX1hT UExJQ0VfTElTVCAyCitzdHJ1Y3QgeGVuX3N5c2N0bF94c3BsaWNlX2xpc3QgeworICAgIHVpbnQz Ml90IHZlcnNpb247ICAgICAgICAgICAgICAgICAgICAgICAvKiBJTi9PVVQ6IEluaXRpYWxseSAq TVVTVCogYmUgemVyby4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgT24gc3Vic2VxdWVudCBjYWxscyByZXVzZSB2YWx1ZS4KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgdmFyaWVzIGJldHdlZW4gY2FsbHMsIHdl IGFyZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBnZXR0 aW5nIHN0YWxlIGRhdGEuICovCisgICAgdWludDMyX3QgaWR4OyAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIElOL09VVDogSW5kZXggaW50byBhcnJheS4gKi8KKyAgICB1aW50MzJfdCBucjsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSU46IEhvdyBtYW55IHN0YXR1cywgbmFtZSwg YW5kIGxlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz aG91bGQgZmlsbCBvdXQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE9VVDogSG93IG1hbnkgcGF5bG9hZHMgbGVmdC4gKi8KKyAgICB1aW50MzJfdCBwYWQ7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSU46IE11c3QgYmUgemVyby4gKi8KKyAgICBY RU5fR1VFU1RfSEFORExFXzY0KHhlbl94c3BsaWNlX3N0YXR1c190KSBzdGF0dXM7ICAvKiBPVVQu IE11c3QgaGF2ZSBlbm91Z2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3BhY2UgYWxsb2NhdGUgZm9yIG5yIG9mIHRoZW0uICovCisgICAgWEVOX0dVRVNU X0hBTkRMRV82NChjaGFyKSBuYW1lOyAgICAgICAgIC8qIE9VVDogQXJyYXkgb2YgbmFtZXMuIEVh Y2ggbWVtYmVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE1VU1QgWEVOX1hTUExJQ0VfTkFNRV9TSVpFIGluIHNpemUuCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE11c3QgaGF2ZSBuciBvZiB0aGVtLiAqLworICAg IFhFTl9HVUVTVF9IQU5ETEVfNjQodWludDMyKSBsZW47ICAgICAgICAvKiBPVVQ6IEFycmF5IG9m IGxlbmd0aHMgb2YgbmFtZSdzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBNdXN0IGhhdmUgbnIgb2YgdGhlbS4gKi8KK307Cit0eXBlZGVmIHN0cnVjdCB4 ZW5fc3lzY3RsX3hzcGxpY2VfbGlzdCB4ZW5fc3lzY3RsX3hzcGxpY2VfbGlzdF90OworREVGSU5F X1hFTl9HVUVTVF9IQU5ETEUoeGVuX3N5c2N0bF94c3BsaWNlX2xpc3RfdCk7CisKKy8qCisgKiBQ ZXJmb3JtIGFuIG9wZXJhdGlvbiBvbiB0aGUgcGF5bG9hZCBzdHJ1Y3R1cmUgcmVmZXJlbmNlZCBi eSB0aGUgYG5hbWVgIGZpZWxkLgorICogVGhlIG9wZXJhdGlvbiByZXF1ZXN0IGlzIGFzeW5jaHJv bm91cyBhbmQgdGhlIHN0YXR1cyBzaG91bGQgYmUgcmV0cmlldmVkCisgKiBieSB1c2luZyBlaXRo ZXIgWEVOX1NZU0NUTF9YU1BMSUNFX0dFVCBvciBYRU5fU1lTQ1RMX1hTUExJQ0VfTElTVCBoeXBl cmNhbGwuCisgKi8KKyNkZWZpbmUgWEVOX1NZU0NUTF9YU1BMSUNFX0FDVElPTiAzCitzdHJ1Y3Qg eGVuX3N5c2N0bF94c3BsaWNlX2FjdGlvbiB7CisgICAgeGVuX3hzcGxpY2VfbmFtZV90IG5hbWU7 ICAgICAgICAgICAgICAgIC8qIElOLCBuYW1lIG9mIHRoZSBwYXRjaC4gKi8KKyNkZWZpbmUgWFNQ TElDRV9BQ1RJT05fQ0hFQ0sgICAgICAgIDEKKyNkZWZpbmUgWFNQTElDRV9BQ1RJT05fVU5MT0FE ICAgICAgIDIKKyNkZWZpbmUgWFNQTElDRV9BQ1RJT05fUkVWRVJUICAgICAgIDMKKyNkZWZpbmUg WFNQTElDRV9BQ1RJT05fQVBQTFkgICAgICAgIDQKKyNkZWZpbmUgWFNQTElDRV9BQ1RJT05fUkVQ TEFDRSAgICAgIDUKKyAgICB1aW50MzJfdCBjbWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogSU46IFhTUExJQ0VfQUNUSU9OXyouICovCisgICAgdWludDMyX3QgdGltZW91dDsgICAgICAg ICAgICAgICAgICAgICAgIC8qIElOOiBaZXJvIGlmIG5vIHRpbWVvdXQuICovCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9yIHVwcGVyIGJvdW5kIG9mIHRp bWUgKG1zKSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBmb3Igb3BlcmF0aW9uIHRvIHRha2UuICovCit9OwordHlwZWRlZiBzdHJ1Y3QgeGVuX3N5c2N0 bF94c3BsaWNlX2FjdGlvbiB4ZW5fc3lzY3RsX3hzcGxpY2VfYWN0aW9uX3Q7CitERUZJTkVfWEVO X0dVRVNUX0hBTkRMRSh4ZW5fc3lzY3RsX3hzcGxpY2VfYWN0aW9uX3QpOworCitzdHJ1Y3QgeGVu X3N5c2N0bF94c3BsaWNlX29wIHsKKyAgICB1aW50MzJfdCBjbWQ7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogSU46IFhFTl9TWVNDVExfWFNQTElDRV8qLiAqLworICAgIHVpbnQzMl90IHBh ZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJTjogQWx3YXlzIHplcm8uICovCisgICAg dW5pb24geworICAgICAgICB4ZW5fc3lzY3RsX3hzcGxpY2VfdXBsb2FkX3QgdXBsb2FkOworICAg ICAgICB4ZW5fc3lzY3RsX3hzcGxpY2VfbGlzdF90IGxpc3Q7CisgICAgICAgIHhlbl9zeXNjdGxf eHNwbGljZV9nZXRfdCBnZXQ7CisgICAgICAgIHhlbl9zeXNjdGxfeHNwbGljZV9hY3Rpb25fdCBh Y3Rpb247CisgICAgfSB1OworfTsKK3R5cGVkZWYgc3RydWN0IHhlbl9zeXNjdGxfeHNwbGljZV9v cCB4ZW5fc3lzY3RsX3hzcGxpY2Vfb3BfdDsKK0RFRklORV9YRU5fR1VFU1RfSEFORExFKHhlbl9z eXNjdGxfeHNwbGljZV9vcF90KTsKKwogc3RydWN0IHhlbl9zeXNjdGwgewogICAgIHVpbnQzMl90 IGNtZDsKICNkZWZpbmUgWEVOX1NZU0NUTF9yZWFkY29uc29sZSAgICAgICAgICAgICAgICAgICAg MQpAQCAtNzkxLDYgKzk1OCw3IEBAIHN0cnVjdCB4ZW5fc3lzY3RsIHsKICNkZWZpbmUgWEVOX1NZ U0NUTF9wY2l0b3BvaW5mbyAgICAgICAgICAgICAgICAgICAyMgogI2RlZmluZSBYRU5fU1lTQ1RM X3Bzcl9jYXRfb3AgICAgICAgICAgICAgICAgICAgIDIzCiAjZGVmaW5lIFhFTl9TWVNDVExfdG1l bV9vcCAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgWEVOX1NZU0NUTF94c3BsaWNl X29wICAgICAgICAgICAgICAgICAgICAyNQogICAgIHVpbnQzMl90IGludGVyZmFjZV92ZXJzaW9u OyAvKiBYRU5fU1lTQ1RMX0lOVEVSRkFDRV9WRVJTSU9OICovCiAgICAgdW5pb24gewogICAgICAg ICBzdHJ1Y3QgeGVuX3N5c2N0bF9yZWFkY29uc29sZSAgICAgICByZWFkY29uc29sZTsKQEAgLTgx Niw2ICs5ODQsNyBAQCBzdHJ1Y3QgeGVuX3N5c2N0bCB7CiAgICAgICAgIHN0cnVjdCB4ZW5fc3lz Y3RsX3Bzcl9jbXRfb3AgICAgICAgIHBzcl9jbXRfb3A7CiAgICAgICAgIHN0cnVjdCB4ZW5fc3lz Y3RsX3Bzcl9jYXRfb3AgICAgICAgIHBzcl9jYXRfb3A7CiAgICAgICAgIHN0cnVjdCB4ZW5fc3lz Y3RsX3RtZW1fb3AgICAgICAgICAgIHRtZW1fb3A7CisgICAgICAgIHN0cnVjdCB4ZW5fc3lzY3Rs X3hzcGxpY2Vfb3AgICAgICAgIHhzcGxpY2U7CiAgICAgICAgIHVpbnQ4X3QgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHBhZFsxMjhdOwogICAgIH0gdTsKIH07CmRpZmYgLS1naXQgYS94ZW4v aW5jbHVkZS94ZW4veHNwbGljZS5oIGIveGVuL2luY2x1ZGUveGVuL3hzcGxpY2UuaApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWYwOGNkCi0tLSAvZGV2L251bGwKKysrIGIv eGVuL2luY2x1ZGUveGVuL3hzcGxpY2UuaApAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJp Z2h0IChjKSAyMDE2IE9yYWNsZSBhbmQvb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVz ZXJ2ZWQuCisgKgorICovCisKKyNpZm5kZWYgX19YRU5fWFNQTElDRV9IX18KKyNkZWZpbmUgX19Y RU5fWFNQTElDRV9IX18KKworc3RydWN0IHhlbl9zeXNjdGxfeHNwbGljZV9vcDsKKworI2lmZGVm IENPTkZJR19YU1BMSUNFCisKK2ludCB4c3BsaWNlX29wKHN0cnVjdCB4ZW5fc3lzY3RsX3hzcGxp Y2Vfb3AgKik7CisKKyNlbHNlCisKKyNpbmNsdWRlIDx4ZW4vZXJybm8uaD4gLyogRm9yIC1FTk9T WVMgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHhzcGxpY2Vfb3Aoc3RydWN0IHhlbl9zeXNjdGxfeHNw bGljZV9vcCAqb3ApCit7CisgICAgcmV0dXJuIC1FTk9TWVM7Cit9CisKKyNlbmRpZiAvKiBDT05G SUdfWFNQTElDRSAqLworCisjZW5kaWYgLyogX19YRU5fWFNQTElDRV9IX18gKi8KKworLyoKKyAq IExvY2FsIHZhcmlhYmxlczoKKyAqIG1vZGU6IEMKKyAqIGMtZmlsZS1zdHlsZTogIkJTRCIKKyAq IGMtYmFzaWMtb2Zmc2V0OiA0CisgKiB0YWItd2lkdGg6IDQKKyAqIGluZGVudC10YWJzLW1vZGU6 IG5pbAorICogRW5kOgorICovCmRpZmYgLS1naXQgYS94ZW4veHNtL2ZsYXNrL2hvb2tzLmMgYi94 ZW4veHNtL2ZsYXNrL2hvb2tzLmMKaW5kZXggMjUxMDIyOS4uZmI1Y2M0YSAxMDA2NDQKLS0tIGEv eGVuL3hzbS9mbGFzay9ob29rcy5jCisrKyBiL3hlbi94c20vZmxhc2svaG9va3MuYwpAQCAtODA4 LDYgKzgwOCwxMiBAQCBzdGF0aWMgaW50IGZsYXNrX3N5c2N0bChpbnQgY21kKQogICAgIGNhc2Ug WEVOX1NZU0NUTF90bWVtX29wOgogICAgICAgICByZXR1cm4gZG9tYWluX2hhc194ZW4oY3VycmVu dC0+ZG9tYWluLCBYRU5fX1RNRU1fQ09OVFJPTCk7CiAKKyNpZmRlZiBDT05GSUdfWFNQTElDRQor ICAgIGNhc2UgWEVOX1NZU0NUTF94c3BsaWNlX29wOgorICAgICAgICByZXR1cm4gYXZjX2N1cnJl bnRfaGFzX3Blcm0oU0VDSU5JVFNJRF9YRU4sIFNFQ0NMQVNTX1hFTjIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBYRU4yX19YU1BMSUNFX09QLCBOVUxMKTsKKyNlbmRpZgor CiAgICAgZGVmYXVsdDoKICAgICAgICAgcHJpbnRrKCJmbGFza19zeXNjdGw6IFVua25vd24gb3Ag JWRcbiIsIGNtZCk7CiAgICAgICAgIHJldHVybiAtRVBFUk07CmRpZmYgLS1naXQgYS94ZW4veHNt L2ZsYXNrL3BvbGljeS9hY2Nlc3NfdmVjdG9ycyBiL3hlbi94c20vZmxhc2svcG9saWN5L2FjY2Vz c192ZWN0b3JzCmluZGV4IDU5YzlmNjkuLmEyMjdmODggMTAwNjQ0Ci0tLSBhL3hlbi94c20vZmxh c2svcG9saWN5L2FjY2Vzc192ZWN0b3JzCisrKyBiL3hlbi94c20vZmxhc2svcG9saWN5L2FjY2Vz c192ZWN0b3JzCkBAIC05Myw2ICs5Myw4IEBAIGNsYXNzIHhlbjIKICAgICBwbXVfY3RybAogIyBQ TVUgdXNlIChkb21haW5zLCBpbmNsdWRpbmcgdW5wcml2aWxlZ2VkIG9uZXMsIHdpbGwgYmUgdXNp bmcgdGhpcyBvcGVyYXRpb24pCiAgICAgcG11X3VzZQorIyBYRU5fU1lTQ1RMX3hzcGxpY2Vfb3AK KyAgICB4c3BsaWNlX29wCiB9CiAKICMgQ2xhc3NlcyBkb21haW4gYW5kIGRvbWFpbjIgY29uc2lz dCBvZiBvcGVyYXRpb25zIHRoYXQgYSBkb21haW4gcGVyZm9ybXMgb24KLS0gCjIuNS4wCgoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1h aWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwOi8vbGlzdHMueGVuLm9yZy94 ZW4tZGV2ZWwK