From owner-freebsd-arm@freebsd.org Fri Mar 31 14:05:09 2017 Return-Path: Delivered-To: freebsd-arm@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 2F54FD2733C for ; Fri, 31 Mar 2017 14:05:09 +0000 (UTC) (envelope-from mw@semihalf.com) Received: from mail-io0-x232.google.com (mail-io0-x232.google.com [IPv6:2607:f8b0:4001:c06::232]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id EB5016B5 for ; Fri, 31 Mar 2017 14:05:08 +0000 (UTC) (envelope-from mw@semihalf.com) Received: by mail-io0-x232.google.com with SMTP id b140so40266803iof.1 for ; Fri, 31 Mar 2017 07:05:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf-com.20150623.gappssmtp.com; s=20150623; h=mime-version:in-reply-to:references:from:date:message-id:subject:to; bh=Dr4C4+06ZK39jo1tUcV8FiM6AZ2pnLY5x0T2/NN4OOE=; b=rrGSKlWURSE8Nuajnyij+EW1Tfon5yvPzN3yB5QEuHtxspAb+TlXGuZWpl8CzY024E /WnGZ1qD3sPdkoVzYBccA65mF7VIN1U/pu65l2CQIXa9TfYAKZ8o5va4C2kqzMw2INnH eomnbNvN2ViWANwhiDxk5h8fs6BclCE3DTrlK59UvG2ywI0Nwt9kOWHYJ+6+BLF6sJnV B53Y7749Z638/tQG+zlvI/MRKZ5oHInW+x9cbW6XyRtjvwklrTkTG88cKDuziBbZgRs4 9dPuMnnZ02azva0FaTYPDpQW5UviVhNcG6VYmIB+ULpwYu/ZOBN8O2bLfLU0oR+Q0jrv Z5iQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to; bh=Dr4C4+06ZK39jo1tUcV8FiM6AZ2pnLY5x0T2/NN4OOE=; b=hnuk2prpgPvLZ5vWMVMbp3h1NCgRUAu5CyPBEem4Aghn/nn5HuiQaQ4YqVgPaxWOQL b3Ni3gv/Q1p+0shhsOR9gnky12UwlNx+/lAvTOi1zGYl1EMVdmsL/9z+o5V7Wd+ACRtx 4K0me7uf7u2JpCbrC3LzFTy1Po0SRRgMpIxEFOnYb/rzH6HZnMcKE/UhYH2Tpz6EQF5H st2km10nOj9m2ejp9Os+HyYvHSf1D0PwzYiZkar3p9ge5MKI5QCTvH2AekKnuh572Gto ufkgw9lhM3By5Cjz44fZX0BDAOCu2Y4jood2xGZwUHO5n9ERqgS4RWzRVeGImqDKOdMX KZew== X-Gm-Message-State: AFeK/H1/+SXNlPGcfcx2T2lGn3QL2fiR1vuJBYQBBHpcHQq7Y0+gZvVofMtCWc7bMpmLwc/7yuXfMzvoSyB/VA== X-Received: by 10.107.134.94 with SMTP id i91mr3282109iod.0.1490969108000; Fri, 31 Mar 2017 07:05:08 -0700 (PDT) MIME-Version: 1.0 Received: by 10.107.169.146 with HTTP; Fri, 31 Mar 2017 07:05:07 -0700 (PDT) In-Reply-To: References: From: Marcin Wojtas Date: Fri, 31 Mar 2017 16:05:07 +0200 Message-ID: Subject: Re: Coherent bus_dma for ARMv7 To: freebsd-arm@freebsd.org Content-Type: multipart/mixed; boundary=001a113ec89c0de2a2054c074ca8 X-BeenThere: freebsd-arm@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Porting FreeBSD to ARM processors." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 31 Mar 2017 14:05:09 -0000 --001a113ec89c0de2a2054c074ca8 Content-Type: text/plain; charset=UTF-8 Patch with the coherent bus_dma support attached. Marcin 2017-03-31 16:01 GMT+02:00 Marcin Wojtas : > Hi, > > In current FreeBSD-HEAD ARMv7 platforms, which support hardware IO > cache coherency cannot make use of this feature. In our project we > implemented coherent variant bus_dma, which is basing on x86 and arm64 > approach. Using of above solution is not obligatory and depends on > setting newly added option for that purpose. > > Needless to say, our platform (Marvell Armada 38x) IO performance > boosted after switching to it. Do you wish to enable such option in > HEAD? > > Regards, > Marcin --001a113ec89c0de2a2054c074ca8 Content-Type: application/octet-stream; name="0001-Introduce-preliminary-version-of-coherent-DMA-for-AR.patch" Content-Disposition: attachment; filename="0001-Introduce-preliminary-version-of-coherent-DMA-for-AR.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_j0xwi9m40 RnJvbSBlMjJiZTYzNTQ0MGEwYzNiNWY3OTdjMmNkNGNkOThmODUxNmMyZjE1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBaYmlnbmlldyBCb2RlayA8emJiQHNlbWloYWxmLmNvbT4KRGF0 ZTogV2VkLCAyNCBBdWcgMjAxNiAyMTowMTowOSArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIEludHJv ZHVjZSBwcmVsaW1pbmFyeSB2ZXJzaW9uIG9mIGNvaGVyZW50IERNQSBmb3IgQVJNCgotIEJhc2Vk IG9uIHg4NiBpbXBsZW1lbnRhdGlvbiB3aXRoIGJ1c19kbWFtYXBfc3luYygpCiAgaW5zcGlyZWQg YnkgYXJtNjQgb25lLgotIE5vdCBzdXJlIHdoeSBEU0Igd2FzIHVzZWQgaW5zdGVhZCBvZiBETUIg YnV0IHRoaXMgc2hvdWxkCiAgbm90IGNhdXNlIGFueSBpbXBhY3Qgb24gZGF0YSB2YWxpZGl0eSBi dXQgcmF0aGVyIG9uIHNwZWVkLgotLS0KIHN5cy9hcm0vYXJtL2J1c2RtYV9ib3VuY2UuYyAgICAg ICAgICAgfCAxMDg4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogc3lzL2FybS9h cm0vYnVzZG1hX21hY2hkZXAtY29oZXJlbnQuYyB8ICAzNTkgKysrKysrKysrKysKIHN5cy9hcm0v aW5jbHVkZS9idXNkbWFfaW1wbC5oICAgICAgICAgfCAgIDk2ICsrKwogc3lzL2NvbmYvZmlsZXMu YXJtICAgICAgICAgICAgICAgICAgICB8ICAgIDYgKy0KIHN5cy9jb25mL29wdGlvbnMuYXJtICAg ICAgICAgICAgICAgICAgfCAgICAxICsKIDUgZmlsZXMgY2hhbmdlZCwgMTU0OCBpbnNlcnRpb25z KCspLCAyIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHN5cy9hcm0vYXJtL2J1c2Rt YV9ib3VuY2UuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN5cy9hcm0vYXJtL2J1c2RtYV9tYWNoZGVw LWNvaGVyZW50LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzeXMvYXJtL2luY2x1ZGUvYnVzZG1hX2lt cGwuaAoKZGlmZiAtLWdpdCBhL3N5cy9hcm0vYXJtL2J1c2RtYV9ib3VuY2UuYyBiL3N5cy9hcm0v YXJtL2J1c2RtYV9ib3VuY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4x M2Q3OTdhCi0tLSAvZGV2L251bGwKKysrIGIvc3lzL2FybS9hcm0vYnVzZG1hX2JvdW5jZS5jCkBA IC0wLDAgKzEsMTA4OCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTcsIDE5OTggSnVzdGlu IFQuIEdpYmJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLAorICogICAg d2l0aG91dCBtb2RpZmljYXRpb24sIGltbWVkaWF0ZWx5IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhl IGZpbGUuCisgKiAyLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBl bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3 YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBg QVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFS RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9S UyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcs IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICog T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ TlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JU IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQor ICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI RSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy9j ZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+ CisjaW5jbHVkZSA8c3lzL3N5c3RtLmg+CisjaW5jbHVkZSA8c3lzL21hbGxvYy5oPgorI2luY2x1 ZGUgPHN5cy9idXMuaD4KKyNpbmNsdWRlIDxzeXMvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8c3lz L2tlcm5lbC5oPgorI2luY2x1ZGUgPHN5cy9rdHIuaD4KKyNpbmNsdWRlIDxzeXMvbG9jay5oPgor I2luY2x1ZGUgPHN5cy9wcm9jLmg+CisjaW5jbHVkZSA8c3lzL21lbWRlc2MuaD4KKyNpbmNsdWRl IDxzeXMvbXV0ZXguaD4KKyNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CisjaW5jbHVkZSA8c3lzL3Vp by5oPgorCisjaW5jbHVkZSA8dm0vdm0uaD4KKyNpbmNsdWRlIDx2bS92bV9leHRlcm4uaD4KKyNp bmNsdWRlIDx2bS92bV9rZXJuLmg+CisjaW5jbHVkZSA8dm0vdm1fcGFnZS5oPgorI2luY2x1ZGUg PHZtL3ZtX21hcC5oPgorCisjaW5jbHVkZSA8bWFjaGluZS9hdG9taWMuaD4KKyNpbmNsdWRlIDxt YWNoaW5lL2J1cy5oPgorI2luY2x1ZGUgPG1hY2hpbmUvbWRfdmFyLmg+CisjaW5jbHVkZSA8bWFj aGluZS9idXNkbWFfaW1wbC5oPgorCisjZGVmaW5lIE1BWF9CUEFHRVMgNjQKKworZW51bSB7CisJ QlVTX0RNQV9DT1VMRF9CT1VOQ0UJPSAweDAxLAorCUJVU19ETUFfTUlOX0FMTE9DX0NPTVAJPSAw eDAyLAorCUJVU19ETUFfS01FTV9BTExPQwk9IDB4MDQsCit9OworCitzdHJ1Y3QgYm91bmNlX3pv bmU7CisKK3N0cnVjdCBidXNfZG1hX3RhZyB7CisJc3RydWN0IGJ1c19kbWFfdGFnX2NvbW1vbiBj b21tb247CisJaW50CQkJbWFwX2NvdW50OworCWludAkJCWJvdW5jZV9mbGFnczsKKwlidXNfZG1h X3NlZ21lbnRfdAkqc2VnbWVudHM7CisJc3RydWN0IGJvdW5jZV96b25lCSpib3VuY2Vfem9uZTsK K307CisKK3N0cnVjdCBib3VuY2VfcGFnZSB7CisJdm1fb2Zmc2V0X3QJdmFkZHI7CQkvKiBrdmEg b2YgYm91bmNlIGJ1ZmZlciAqLworCWJ1c19hZGRyX3QJYnVzYWRkcjsJLyogUGh5c2ljYWwgYWRk cmVzcyAqLworCXZtX29mZnNldF90CWRhdGF2YWRkcjsJLyoga3ZhIG9mIGNsaWVudCBkYXRhICov CisJYnVzX2FkZHJfdAlkYXRhYWRkcjsJLyogY2xpZW50IHBoeXNpY2FsIGFkZHJlc3MgKi8KKwli dXNfc2l6ZV90CWRhdGFjb3VudDsJLyogY2xpZW50IGRhdGEgY291bnQgKi8KKwlTVEFJTFFfRU5U UlkoYm91bmNlX3BhZ2UpIGxpbmtzOworfTsKKworaW50IGJ1c2RtYV9zd2lfcGVuZGluZzsKKwor c3RydWN0IGJvdW5jZV96b25lIHsKKwlTVEFJTFFfRU5UUlkoYm91bmNlX3pvbmUpIGxpbmtzOwor CVNUQUlMUV9IRUFEKGJwX2xpc3QsIGJvdW5jZV9wYWdlKSBib3VuY2VfcGFnZV9saXN0OworCWlu dAkJdG90YWxfYnBhZ2VzOworCWludAkJZnJlZV9icGFnZXM7CisJaW50CQlyZXNlcnZlZF9icGFn ZXM7CisJaW50CQlhY3RpdmVfYnBhZ2VzOworCWludAkJdG90YWxfYm91bmNlZDsKKwlpbnQJCXRv dGFsX2RlZmVycmVkOworCWludAkJbWFwX2NvdW50OworCWJ1c19zaXplX3QJYWxpZ25tZW50Owor CWJ1c19hZGRyX3QJbG93YWRkcjsKKwljaGFyCQl6b25laWRbOF07CisJY2hhcgkJbG93YWRkcmlk WzIwXTsKKwlzdHJ1Y3Qgc3lzY3RsX2N0eF9saXN0IHN5c2N0bF90cmVlOworCXN0cnVjdCBzeXNj dGxfb2lkICpzeXNjdGxfdHJlZV90b3A7Cit9OworCitzdGF0aWMgc3RydWN0IG10eCBib3VuY2Vf bG9jazsKK3N0YXRpYyBpbnQgdG90YWxfYnBhZ2VzOworc3RhdGljIGludCBidXNkbWFfem9uZWNv dW50Oworc3RhdGljIFNUQUlMUV9IRUFEKCwgYm91bmNlX3pvbmUpIGJvdW5jZV96b25lX2xpc3Q7 CisKK3N0YXRpYyBTWVNDVExfTk9ERShfaHcsIE9JRF9BVVRPLCBidXNkbWEsIENUTEZMQUdfUkQs IDAsICJCdXNkbWEgcGFyYW1ldGVycyIpOworU1lTQ1RMX0lOVChfaHdfYnVzZG1hLCBPSURfQVVU TywgdG90YWxfYnBhZ2VzLCBDVExGTEFHX1JELCAmdG90YWxfYnBhZ2VzLCAwLAorCSAgICJUb3Rh bCBib3VuY2UgcGFnZXMiKTsKKworc3RydWN0IGJ1c19kbWFtYXAgeworCXN0cnVjdCBicF9saXN0 CSAgICAgICBicGFnZXM7CisJaW50CQkgICAgICAgcGFnZXNuZWVkZWQ7CisJaW50CQkgICAgICAg cGFnZXNyZXNlcnZlZDsKKwlidXNfZG1hX3RhZ190CSAgICAgICBkbWF0OworCXN0cnVjdCBtZW1k ZXNjCSAgICAgICBtZW07CisJYnVzX2RtYW1hcF9jYWxsYmFja190ICpjYWxsYmFjazsKKwl2b2lk CQkgICAgICAqY2FsbGJhY2tfYXJnOworCVNUQUlMUV9FTlRSWShidXNfZG1hbWFwKSBsaW5rczsK K307CisKK3N0YXRpYyBTVEFJTFFfSEVBRCgsIGJ1c19kbWFtYXApIGJvdW5jZV9tYXBfd2FpdGlu Z2xpc3Q7CitzdGF0aWMgU1RBSUxRX0hFQUQoLCBidXNfZG1hbWFwKSBib3VuY2VfbWFwX2NhbGxi YWNrbGlzdDsKK3N0YXRpYyBzdHJ1Y3QgYnVzX2RtYW1hcCBub2JvdW5jZV9kbWFtYXA7CisKK3N0 YXRpYyB2b2lkIGluaXRfYm91bmNlX3BhZ2VzKHZvaWQgKmR1bW15KTsKK3N0YXRpYyBpbnQgYWxs b2NfYm91bmNlX3pvbmUoYnVzX2RtYV90YWdfdCBkbWF0KTsKK3N0YXRpYyBpbnQgYWxsb2NfYm91 bmNlX3BhZ2VzKGJ1c19kbWFfdGFnX3QgZG1hdCwgdV9pbnQgbnVtcGFnZXMpOworc3RhdGljIGlu dCByZXNlcnZlX2JvdW5jZV9wYWdlcyhidXNfZG1hX3RhZ190IGRtYXQsIGJ1c19kbWFtYXBfdCBt YXAsCisJCQkJaW50IGNvbW1pdCk7CitzdGF0aWMgYnVzX2FkZHJfdCBhZGRfYm91bmNlX3BhZ2Uo YnVzX2RtYV90YWdfdCBkbWF0LCBidXNfZG1hbWFwX3QgbWFwLAorCQkJCSAgdm1fb2Zmc2V0X3Qg dmFkZHIsIGJ1c19hZGRyX3QgYWRkciwKKwkJCQkgIGJ1c19zaXplX3Qgc2l6ZSk7CitzdGF0aWMg dm9pZCBmcmVlX2JvdW5jZV9wYWdlKGJ1c19kbWFfdGFnX3QgZG1hdCwgc3RydWN0IGJvdW5jZV9w YWdlICpicGFnZSk7CitpbnQgcnVuX2ZpbHRlcihidXNfZG1hX3RhZ190IGRtYXQsIGJ1c19hZGRy X3QgcGFkZHIpOworc3RhdGljIHZvaWQgX2J1c19kbWFtYXBfY291bnRfcGFnZXMoYnVzX2RtYV90 YWdfdCBkbWF0LCBidXNfZG1hbWFwX3QgbWFwLAorCQkJCSAgICBwbWFwX3QgcG1hcCwgdm9pZCAq YnVmLCBidXNfc2l6ZV90IGJ1ZmxlbiwKKwkJCQkgICAgaW50IGZsYWdzKTsKK3N0YXRpYyB2b2lk IF9idXNfZG1hbWFwX2NvdW50X3BoeXMoYnVzX2RtYV90YWdfdCBkbWF0LCBidXNfZG1hbWFwX3Qg bWFwLAorCQkJCSAgIHZtX3BhZGRyX3QgYnVmLCBidXNfc2l6ZV90IGJ1ZmxlbiwKKwkJCQkgICBp bnQgZmxhZ3MpOworc3RhdGljIGludCBfYnVzX2RtYW1hcF9yZXNlcnZlX3BhZ2VzKGJ1c19kbWFf dGFnX3QgZG1hdCwgYnVzX2RtYW1hcF90IG1hcCwKKwkJCQkgICAgIGludCBmbGFncyk7CisvKgor ICogQWxsb2NhdGUgYSBkZXZpY2Ugc3BlY2lmaWMgZG1hX3RhZy4KKyAqLworc3RhdGljIGludAor Ym91bmNlX2J1c19kbWFfdGFnX2NyZWF0ZShidXNfZG1hX3RhZ190IHBhcmVudCwgYnVzX3NpemVf dCBhbGlnbm1lbnQsCisgICAgYnVzX2FkZHJfdCBib3VuZGFyeSwgYnVzX2FkZHJfdCBsb3dhZGRy LCBidXNfYWRkcl90IGhpZ2hhZGRyLAorICAgIGJ1c19kbWFfZmlsdGVyX3QgKmZpbHRlciwgdm9p ZCAqZmlsdGVyYXJnLCBidXNfc2l6ZV90IG1heHNpemUsCisgICAgaW50IG5zZWdtZW50cywgYnVz X3NpemVfdCBtYXhzZWdzeiwgaW50IGZsYWdzLCBidXNfZG1hX2xvY2tfdCAqbG9ja2Z1bmMsCisg ICAgdm9pZCAqbG9ja2Z1bmNhcmcsIGJ1c19kbWFfdGFnX3QgKmRtYXQpCit7CisJYnVzX2RtYV90 YWdfdCBuZXd0YWc7CisJaW50IGVycm9yOworCisJKmRtYXQgPSBOVUxMOworCWVycm9yID0gY29t bW9uX2J1c19kbWFfdGFnX2NyZWF0ZShwYXJlbnQgIT0gTlVMTCA/ICZwYXJlbnQtPmNvbW1vbiA6 CisJICAgIE5VTEwsIGFsaWdubWVudCwgYm91bmRhcnksIGxvd2FkZHIsIGhpZ2hhZGRyLCBmaWx0 ZXIsIGZpbHRlcmFyZywKKwkgICAgbWF4c2l6ZSwgbnNlZ21lbnRzLCBtYXhzZWdzeiwgZmxhZ3Ms IGxvY2tmdW5jLCBsb2NrZnVuY2FyZywKKwkgICAgc2l6ZW9mIChzdHJ1Y3QgYnVzX2RtYV90YWcp LCAodm9pZCAqKikmbmV3dGFnKTsKKwlpZiAoZXJyb3IgIT0gMCkKKwkJcmV0dXJuIChlcnJvcik7 CisKKwluZXd0YWctPmNvbW1vbi5pbXBsID0gJmJ1c19kbWFfYm91bmNlX2ltcGw7CisJbmV3dGFn LT5tYXBfY291bnQgPSAwOworCW5ld3RhZy0+c2VnbWVudHMgPSBOVUxMOworCisJaWYgKHBhcmVu dCAhPSBOVUxMICYmICgobmV3dGFnLT5jb21tb24uZmlsdGVyICE9IE5VTEwpIHx8CisJICAgICgo cGFyZW50LT5ib3VuY2VfZmxhZ3MgJiBCVVNfRE1BX0NPVUxEX0JPVU5DRSkgIT0gMCkpKQorCQlu ZXd0YWctPmJvdW5jZV9mbGFncyB8PSBCVVNfRE1BX0NPVUxEX0JPVU5DRTsKKworCWlmIChuZXd0 YWctPmNvbW1vbi5sb3dhZGRyIDwgcHRvYSgodm1fcGFkZHJfdClNYXhtZW0pIHx8CisJICAgIG5l d3RhZy0+Y29tbW9uLmFsaWdubWVudCA+IDEpCisJCW5ld3RhZy0+Ym91bmNlX2ZsYWdzIHw9IEJV U19ETUFfQ09VTERfQk9VTkNFOworCisJaWYgKCgobmV3dGFnLT5ib3VuY2VfZmxhZ3MgJiBCVVNf RE1BX0NPVUxEX0JPVU5DRSkgIT0gMCkgJiYKKwkgICAgKGZsYWdzICYgQlVTX0RNQV9BTExPQ05P VykgIT0gMCkgeworCQlzdHJ1Y3QgYm91bmNlX3pvbmUgKmJ6OworCisJCS8qIE11c3QgYm91bmNl ICovCisJCWlmICgoZXJyb3IgPSBhbGxvY19ib3VuY2Vfem9uZShuZXd0YWcpKSAhPSAwKSB7CisJ CQlmcmVlKG5ld3RhZywgTV9ERVZCVUYpOworCQkJcmV0dXJuIChlcnJvcik7CisJCX0KKwkJYnog PSBuZXd0YWctPmJvdW5jZV96b25lOworCisJCWlmIChwdG9hKGJ6LT50b3RhbF9icGFnZXMpIDwg bWF4c2l6ZSkgeworCQkJaW50IHBhZ2VzOworCisJCQlwYWdlcyA9IGF0b3AobWF4c2l6ZSkgLSBi ei0+dG90YWxfYnBhZ2VzOworCisJCQkvKiBBZGQgcGFnZXMgdG8gb3VyIGJvdW5jZSBwb29sICov CisJCQlpZiAoYWxsb2NfYm91bmNlX3BhZ2VzKG5ld3RhZywgcGFnZXMpIDwgcGFnZXMpCisJCQkJ ZXJyb3IgPSBFTk9NRU07CisJCX0KKwkJLyogUGVyZm9ybWVkIGluaXRpYWwgYWxsb2NhdGlvbiAq LworCQluZXd0YWctPmJvdW5jZV9mbGFncyB8PSBCVVNfRE1BX01JTl9BTExPQ19DT01QOworCX0g ZWxzZQorCQllcnJvciA9IDA7CisJCisJaWYgKGVycm9yICE9IDApCisJCWZyZWUobmV3dGFnLCBN X0RFVkJVRik7CisJZWxzZQorCQkqZG1hdCA9IG5ld3RhZzsKKwlDVFI0KEtUUl9CVVNETUEsICIl cyByZXR1cm5lZCB0YWcgJXAgdGFnIGZsYWdzIDB4JXggZXJyb3IgJWQiLAorCSAgICBfX2Z1bmNf XywgbmV3dGFnLCAobmV3dGFnICE9IE5VTEwgPyBuZXd0YWctPmNvbW1vbi5mbGFncyA6IDApLAor CSAgICBlcnJvcik7CisJcmV0dXJuIChlcnJvcik7Cit9CisKK3N0YXRpYyBpbnQKK2JvdW5jZV9i dXNfZG1hX3RhZ19kZXN0cm95KGJ1c19kbWFfdGFnX3QgZG1hdCkKK3sKKwlidXNfZG1hX3RhZ190 IGRtYXRfY29weSwgcGFyZW50OworCWludCBlcnJvcjsKKworCWVycm9yID0gMDsKKwlkbWF0X2Nv cHkgPSBkbWF0OworCisJaWYgKGRtYXQgIT0gTlVMTCkgeworCQlpZiAoZG1hdC0+bWFwX2NvdW50 ICE9IDApIHsKKwkJCWVycm9yID0gRUJVU1k7CisJCQlnb3RvIG91dDsKKwkJfQorCQl3aGlsZSAo ZG1hdCAhPSBOVUxMKSB7CisJCQlwYXJlbnQgPSAoYnVzX2RtYV90YWdfdClkbWF0LT5jb21tb24u cGFyZW50OworCQkJYXRvbWljX3N1YnRyYWN0X2ludCgmZG1hdC0+Y29tbW9uLnJlZl9jb3VudCwg MSk7CisJCQlpZiAoZG1hdC0+Y29tbW9uLnJlZl9jb3VudCA9PSAwKSB7CisJCQkJaWYgKGRtYXQt PnNlZ21lbnRzICE9IE5VTEwpCisJCQkJCWZyZWUoZG1hdC0+c2VnbWVudHMsIE1fREVWQlVGKTsK KwkJCQlmcmVlKGRtYXQsIE1fREVWQlVGKTsKKwkJCQkvKgorCQkJCSAqIExhc3QgcmVmZXJlbmNl IGNvdW50LCBzbworCQkJCSAqIHJlbGVhc2Ugb3VyIHJlZmVyZW5jZQorCQkJCSAqIGNvdW50IG9u IG91ciBwYXJlbnQuCisJCQkJICovCisJCQkJZG1hdCA9IHBhcmVudDsKKwkJCX0gZWxzZQorCQkJ CWRtYXQgPSBOVUxMOworCQl9CisJfQorb3V0OgorCUNUUjMoS1RSX0JVU0RNQSwgIiVzIHRhZyAl cCBlcnJvciAlZCIsIF9fZnVuY19fLCBkbWF0X2NvcHksIGVycm9yKTsKKwlyZXR1cm4gKGVycm9y KTsKK30KKworLyoKKyAqIEFsbG9jYXRlIGEgaGFuZGxlIGZvciBtYXBwaW5nIGZyb20ga3ZhL3V2 YS9waHlzaWNhbAorICogYWRkcmVzcyBzcGFjZSBpbnRvIGJ1cyBkZXZpY2Ugc3BhY2UuCisgKi8K K3N0YXRpYyBpbnQKK2JvdW5jZV9idXNfZG1hbWFwX2NyZWF0ZShidXNfZG1hX3RhZ190IGRtYXQs IGludCBmbGFncywgYnVzX2RtYW1hcF90ICptYXBwKQoreworCXN0cnVjdCBib3VuY2Vfem9uZSAq Yno7CisJaW50IGVycm9yLCBtYXhwYWdlcywgcGFnZXM7CisKKwllcnJvciA9IDA7CisKKwlpZiAo ZG1hdC0+c2VnbWVudHMgPT0gTlVMTCkgeworCQlkbWF0LT5zZWdtZW50cyA9IChidXNfZG1hX3Nl Z21lbnRfdCAqKW1hbGxvYygKKwkJICAgIHNpemVvZihidXNfZG1hX3NlZ21lbnRfdCkgKiBkbWF0 LT5jb21tb24ubnNlZ21lbnRzLAorCQkgICAgTV9ERVZCVUYsIE1fTk9XQUlUKTsKKwkJaWYgKGRt YXQtPnNlZ21lbnRzID09IE5VTEwpIHsKKwkJCUNUUjMoS1RSX0JVU0RNQSwgIiVzOiB0YWcgJXAg ZXJyb3IgJWQiLAorCQkJICAgIF9fZnVuY19fLCBkbWF0LCBFTk9NRU0pOworCQkJcmV0dXJuIChF Tk9NRU0pOworCQl9CisJfQorCisJLyoKKwkgKiBCb3VuY2luZyBtaWdodCBiZSByZXF1aXJlZCBp ZiB0aGUgZHJpdmVyIGFza3MgZm9yIGFuIGFjdGl2ZQorCSAqIGV4Y2x1c2lvbiByZWdpb24sIGEg ZGF0YSBhbGlnbm1lbnQgdGhhdCBpcyBzdHJpY3RlciB0aGFuIDEsIGFuZC9vcgorCSAqIGFuIGFj dGl2ZSBhZGRyZXNzIGJvdW5kYXJ5LgorCSAqLworCWlmIChkbWF0LT5ib3VuY2VfZmxhZ3MgJiBC VVNfRE1BX0NPVUxEX0JPVU5DRSkgeworCQkvKiBNdXN0IGJvdW5jZSAqLworCQlpZiAoZG1hdC0+ Ym91bmNlX3pvbmUgPT0gTlVMTCkgeworCQkJaWYgKChlcnJvciA9IGFsbG9jX2JvdW5jZV96b25l KGRtYXQpKSAhPSAwKQorCQkJCXJldHVybiAoZXJyb3IpOworCQl9CisJCWJ6ID0gZG1hdC0+Ym91 bmNlX3pvbmU7CisKKwkJKm1hcHAgPSAoYnVzX2RtYW1hcF90KW1hbGxvYyhzaXplb2YoKiptYXBw KSwgTV9ERVZCVUYsCisJCSAgICBNX05PV0FJVCB8IE1fWkVSTyk7CisJCWlmICgqbWFwcCA9PSBO VUxMKSB7CisJCQlDVFIzKEtUUl9CVVNETUEsICIlczogdGFnICVwIGVycm9yICVkIiwKKwkJCSAg ICBfX2Z1bmNfXywgZG1hdCwgRU5PTUVNKTsKKwkJCXJldHVybiAoRU5PTUVNKTsKKwkJfQorCisJ CS8qIEluaXRpYWxpemUgdGhlIG5ldyBtYXAgKi8KKwkJU1RBSUxRX0lOSVQoJigoKm1hcHApLT5i cGFnZXMpKTsKKworCQkvKgorCQkgKiBBdHRlbXB0IHRvIGFkZCBwYWdlcyB0byBvdXIgcG9vbCBv biBhIHBlci1pbnN0YW5jZQorCQkgKiBiYXNpcyB1cCB0byBhIHNhbmUgbGltaXQuCisJCSAqLwor CQlpZiAoZG1hdC0+Y29tbW9uLmFsaWdubWVudCA+IDEpCisJCQltYXhwYWdlcyA9IE1BWF9CUEFH RVM7CisJCWVsc2UKKwkJCW1heHBhZ2VzID0gTUlOKE1BWF9CUEFHRVMsIE1heG1lbSAtCisJCQkg ICAgYXRvcChkbWF0LT5jb21tb24ubG93YWRkcikpOworCQlpZiAoKGRtYXQtPmJvdW5jZV9mbGFn cyAmIEJVU19ETUFfTUlOX0FMTE9DX0NPTVApID09IDAgfHwKKwkJICAgIChiei0+bWFwX2NvdW50 ID4gMCAmJiBiei0+dG90YWxfYnBhZ2VzIDwgbWF4cGFnZXMpKSB7CisJCQlwYWdlcyA9IE1BWChh dG9wKGRtYXQtPmNvbW1vbi5tYXhzaXplKSwgMSk7CisJCQlwYWdlcyA9IE1JTihtYXhwYWdlcyAt IGJ6LT50b3RhbF9icGFnZXMsIHBhZ2VzKTsKKwkJCXBhZ2VzID0gTUFYKHBhZ2VzLCAxKTsKKwkJ CWlmIChhbGxvY19ib3VuY2VfcGFnZXMoZG1hdCwgcGFnZXMpIDwgcGFnZXMpCisJCQkJZXJyb3Ig PSBFTk9NRU07CisJCQlpZiAoKGRtYXQtPmJvdW5jZV9mbGFncyAmIEJVU19ETUFfTUlOX0FMTE9D X0NPTVApCisJCQkgICAgPT0gMCkgeworCQkJCWlmIChlcnJvciA9PSAwKSB7CisJCQkJCWRtYXQt PmJvdW5jZV9mbGFncyB8PQorCQkJCQkgICAgQlVTX0RNQV9NSU5fQUxMT0NfQ09NUDsKKwkJCQl9 CisJCQl9IGVsc2UKKwkJCQllcnJvciA9IDA7CisJCX0KKwkJYnotPm1hcF9jb3VudCsrOworCX0g ZWxzZSB7CisJCSptYXBwID0gTlVMTDsKKwl9CisJaWYgKGVycm9yID09IDApCisJCWRtYXQtPm1h cF9jb3VudCsrOworCUNUUjQoS1RSX0JVU0RNQSwgIiVzOiB0YWcgJXAgdGFnIGZsYWdzIDB4JXgg ZXJyb3IgJWQiLAorCSAgICBfX2Z1bmNfXywgZG1hdCwgZG1hdC0+Y29tbW9uLmZsYWdzLCBlcnJv cik7CisJcmV0dXJuIChlcnJvcik7Cit9CisKKy8qCisgKiBEZXN0cm95IGEgaGFuZGxlIGZvciBt YXBwaW5nIGZyb20ga3ZhL3V2YS9waHlzaWNhbAorICogYWRkcmVzcyBzcGFjZSBpbnRvIGJ1cyBk ZXZpY2Ugc3BhY2UuCisgKi8KK3N0YXRpYyBpbnQKK2JvdW5jZV9idXNfZG1hbWFwX2Rlc3Ryb3ko YnVzX2RtYV90YWdfdCBkbWF0LCBidXNfZG1hbWFwX3QgbWFwKQoreworCisJaWYgKG1hcCAhPSBO VUxMICYmIG1hcCAhPSAmbm9ib3VuY2VfZG1hbWFwKSB7CisJCWlmIChTVEFJTFFfRklSU1QoJm1h cC0+YnBhZ2VzKSAhPSBOVUxMKSB7CisJCQlDVFIzKEtUUl9CVVNETUEsICIlczogdGFnICVwIGVy cm9yICVkIiwKKwkJCSAgICBfX2Z1bmNfXywgZG1hdCwgRUJVU1kpOworCQkJcmV0dXJuIChFQlVT WSk7CisJCX0KKwkJaWYgKGRtYXQtPmJvdW5jZV96b25lKQorCQkJZG1hdC0+Ym91bmNlX3pvbmUt Pm1hcF9jb3VudC0tOworCQlmcmVlKG1hcCwgTV9ERVZCVUYpOworCX0KKwlkbWF0LT5tYXBfY291 bnQtLTsKKwlDVFIyKEtUUl9CVVNETUEsICIlczogdGFnICVwIGVycm9yIDAiLCBfX2Z1bmNfXywg ZG1hdCk7CisJcmV0dXJuICgwKTsKK30KKworCisvKgorICogQWxsb2NhdGUgYSBwaWVjZSBvZiBt ZW1vcnkgdGhhdCBjYW4gYmUgZWZmaWNpZW50bHkgbWFwcGVkIGludG8KKyAqIGJ1cyBkZXZpY2Ug c3BhY2UgYmFzZWQgb24gdGhlIGNvbnN0cmFpbnRzIGxpdGVkIGluIHRoZSBkbWEgdGFnLgorICog QSBkbWFtYXAgdG8gZm9yIHVzZSB3aXRoIGRtYW1hcF9sb2FkIGlzIGFsc28gYWxsb2NhdGVkLgor ICovCitzdGF0aWMgaW50Citib3VuY2VfYnVzX2RtYW1lbV9hbGxvYyhidXNfZG1hX3RhZ190IGRt YXQsIHZvaWQqKiB2YWRkciwgaW50IGZsYWdzLAorICAgIGJ1c19kbWFtYXBfdCAqbWFwcCkKK3sK Kwl2bV9tZW1hdHRyX3QgYXR0cjsKKwlpbnQgbWZsYWdzOworCisJaWYgKGZsYWdzICYgQlVTX0RN QV9OT1dBSVQpCisJCW1mbGFncyA9IE1fTk9XQUlUOworCWVsc2UKKwkJbWZsYWdzID0gTV9XQUlU T0s7CisKKwkvKiBJZiB3ZSBzdWNjZWVkLCBubyBtYXBwaW5nL2JvdW5jaW5nIHdpbGwgYmUgcmVx dWlyZWQgKi8KKwkqbWFwcCA9IE5VTEw7CisKKwlpZiAoZG1hdC0+c2VnbWVudHMgPT0gTlVMTCkg eworCQlkbWF0LT5zZWdtZW50cyA9IChidXNfZG1hX3NlZ21lbnRfdCAqKW1hbGxvYygKKwkJICAg IHNpemVvZihidXNfZG1hX3NlZ21lbnRfdCkgKiBkbWF0LT5jb21tb24ubnNlZ21lbnRzLAorCQkg ICAgTV9ERVZCVUYsIG1mbGFncyk7CisJCWlmIChkbWF0LT5zZWdtZW50cyA9PSBOVUxMKSB7CisJ CQlDVFI0KEtUUl9CVVNETUEsICIlczogdGFnICVwIHRhZyBmbGFncyAweCV4IGVycm9yICVkIiwK KwkJCSAgICBfX2Z1bmNfXywgZG1hdCwgZG1hdC0+Y29tbW9uLmZsYWdzLCBFTk9NRU0pOworCQkJ cmV0dXJuIChFTk9NRU0pOworCQl9CisJfQorCWlmIChmbGFncyAmIEJVU19ETUFfWkVSTykKKwkJ bWZsYWdzIHw9IE1fWkVSTzsKKwlpZiAoZmxhZ3MgJiBCVVNfRE1BX05PQ0FDSEUpCisJCWF0dHIg PSBWTV9NRU1BVFRSX1VOQ0FDSEVBQkxFOworCWVsc2UKKwkJYXR0ciA9IFZNX01FTUFUVFJfREVG QVVMVDsKKworCS8qIAorCSAqIFhYWDoKKwkgKiAoZG1hdC0+YWxpZ25tZW50IDw9IGRtYXQtPm1h eHNpemUpIGlzIGp1c3QgYSBxdWljayBoYWNrOyB0aGUgZXhhY3QKKwkgKiBhbGlnbm1lbnQgZ3Vh cmFudGVlcyBvZiBtYWxsb2MgbmVlZCB0byBiZSBuYWlsZWQgZG93biwgYW5kIHRoZQorCSAqIGNv ZGUgYmVsb3cgc2hvdWxkIGJlIHJld3JpdHRlbiB0byB0YWtlIHRoYXQgaW50byBhY2NvdW50Lgor CSAqCisJICogSW4gdGhlIG1lYW50aW1lLCB3ZSdsbCB3YXJuIHRoZSB1c2VyIGlmIG1hbGxvYyBn ZXRzIGl0IHdyb25nLgorCSAqLworCWlmICgoZG1hdC0+Y29tbW9uLm1heHNpemUgPD0gUEFHRV9T SVpFKSAmJgorCSAgIChkbWF0LT5jb21tb24uYWxpZ25tZW50IDw9IGRtYXQtPmNvbW1vbi5tYXhz aXplKSAmJgorCSAgICBkbWF0LT5jb21tb24ubG93YWRkciA+PSBwdG9hKCh2bV9wYWRkcl90KU1h eG1lbSkgJiYKKwkgICAgYXR0ciA9PSBWTV9NRU1BVFRSX0RFRkFVTFQpIHsKKwkJKnZhZGRyID0g bWFsbG9jKGRtYXQtPmNvbW1vbi5tYXhzaXplLCBNX0RFVkJVRiwgbWZsYWdzKTsKKwl9IGVsc2Ug aWYgKGRtYXQtPmNvbW1vbi5uc2VnbWVudHMgPj0gYnRvYyhkbWF0LT5jb21tb24ubWF4c2l6ZSkg JiYKKwkgICAgZG1hdC0+Y29tbW9uLmFsaWdubWVudCA8PSBQQUdFX1NJWkUgJiYKKwkgICAgKGRt YXQtPmNvbW1vbi5ib3VuZGFyeSA9PSAwIHx8CisJICAgIGRtYXQtPmNvbW1vbi5ib3VuZGFyeSA+ PSBkbWF0LT5jb21tb24ubG93YWRkcikpIHsKKwkJLyogUGFnZS1iYXNlZCBtdWx0aS1zZWdtZW50 IGFsbG9jYXRpb25zIGFsbG93ZWQgKi8KKwkJKnZhZGRyID0gKHZvaWQgKilrbWVtX2FsbG9jX2F0 dHIoa2VybmVsX2FyZW5hLAorCQkgICAgZG1hdC0+Y29tbW9uLm1heHNpemUsIG1mbGFncywgMHVs LCBkbWF0LT5jb21tb24ubG93YWRkciwKKwkJICAgIGF0dHIpOworCQlkbWF0LT5ib3VuY2VfZmxh Z3MgfD0gQlVTX0RNQV9LTUVNX0FMTE9DOworCX0gZWxzZSB7CisJCSp2YWRkciA9ICh2b2lkICop a21lbV9hbGxvY19jb250aWcoa2VybmVsX2FyZW5hLAorCQkgICAgZG1hdC0+Y29tbW9uLm1heHNp emUsIG1mbGFncywgMHVsLCBkbWF0LT5jb21tb24ubG93YWRkciwKKwkJICAgIGRtYXQtPmNvbW1v bi5hbGlnbm1lbnQgIT0gMCA/IGRtYXQtPmNvbW1vbi5hbGlnbm1lbnQgOiAxdWwsCisJCSAgICBk bWF0LT5jb21tb24uYm91bmRhcnksIGF0dHIpOworCQlkbWF0LT5ib3VuY2VfZmxhZ3MgfD0gQlVT X0RNQV9LTUVNX0FMTE9DOworCX0KKwlpZiAoKnZhZGRyID09IE5VTEwpIHsKKwkJQ1RSNChLVFJf QlVTRE1BLCAiJXM6IHRhZyAlcCB0YWcgZmxhZ3MgMHgleCBlcnJvciAlZCIsCisJCSAgICBfX2Z1 bmNfXywgZG1hdCwgZG1hdC0+Y29tbW9uLmZsYWdzLCBFTk9NRU0pOworCQlyZXR1cm4gKEVOT01F TSk7CisJfSBlbHNlIGlmICh2dG9waHlzKCp2YWRkcikgJiAoZG1hdC0+Y29tbW9uLmFsaWdubWVu dCAtIDEpKSB7CisJCXByaW50ZigiYnVzX2RtYW1lbV9hbGxvYyBmYWlsZWQgdG8gYWxpZ24gbWVt b3J5IHByb3Blcmx5LlxuIik7CisJfQorCUNUUjQoS1RSX0JVU0RNQSwgIiVzOiB0YWcgJXAgdGFn IGZsYWdzIDB4JXggZXJyb3IgJWQiLAorCSAgICBfX2Z1bmNfXywgZG1hdCwgZG1hdC0+Y29tbW9u LmZsYWdzLCAwKTsKKwlyZXR1cm4gKDApOworfQorCisvKgorICogRnJlZSBhIHBpZWNlIG9mIG1l bW9yeSBhbmQgaXQncyBhbGxvY2lhdGVkIGRtYW1hcCwgdGhhdCB3YXMgYWxsb2NhdGVkCisgKiB2 aWEgYnVzX2RtYW1lbV9hbGxvYy4gIE1ha2UgdGhlIHNhbWUgY2hvaWNlIGZvciBmcmVlL2NvbnRp Z2ZyZWUuCisgKi8KK3N0YXRpYyB2b2lkCitib3VuY2VfYnVzX2RtYW1lbV9mcmVlKGJ1c19kbWFf dGFnX3QgZG1hdCwgdm9pZCAqdmFkZHIsIGJ1c19kbWFtYXBfdCBtYXApCit7CisJLyoKKwkgKiBk bWFtZW0gZG9lcyBub3QgbmVlZCB0byBiZSBib3VuY2VkLCBzbyB0aGUgbWFwIHNob3VsZCBiZQor CSAqIE5VTEwgYW5kIHRoZSBCVVNfRE1BX0tNRU1fQUxMT0MgZmxhZyBjbGVhcmVkIGlmIG1hbGxv YygpCisJICogd2FzIHVzZWQgYW5kIHNldCBpZiBrbWVtX2FsbG9jX2NvbnRpZygpIHdhcyB1c2Vk LgorCSAqLworCWlmIChtYXAgIT0gTlVMTCkKKwkJcGFuaWMoImJ1c19kbWFtZW1fZnJlZTogSW52 YWxpZCBtYXAgZnJlZWRcbiIpOworCWlmICgoZG1hdC0+Ym91bmNlX2ZsYWdzICYgQlVTX0RNQV9L TUVNX0FMTE9DKSA9PSAwKQorCQlmcmVlKHZhZGRyLCBNX0RFVkJVRik7CisJZWxzZQorCQlrbWVt X2ZyZWUoa2VybmVsX2FyZW5hLCAodm1fb2Zmc2V0X3QpdmFkZHIsCisJCSAgICBkbWF0LT5jb21t b24ubWF4c2l6ZSk7CisJQ1RSMyhLVFJfQlVTRE1BLCAiJXM6IHRhZyAlcCBmbGFncyAweCV4Iiwg X19mdW5jX18sIGRtYXQsCisJICAgIGRtYXQtPmJvdW5jZV9mbGFncyk7Cit9CisKK3N0YXRpYyB2 b2lkCitfYnVzX2RtYW1hcF9jb3VudF9waHlzKGJ1c19kbWFfdGFnX3QgZG1hdCwgYnVzX2RtYW1h cF90IG1hcCwgdm1fcGFkZHJfdCBidWYsCisgICAgYnVzX3NpemVfdCBidWZsZW4sIGludCBmbGFn cykKK3sKKwlidXNfYWRkcl90IGN1cmFkZHI7CisJYnVzX3NpemVfdCBzZ3NpemU7CisKKwlpZiAo KG1hcCAhPSAmbm9ib3VuY2VfZG1hbWFwICYmIG1hcC0+cGFnZXNuZWVkZWQgPT0gMCkpIHsKKwkJ LyoKKwkJICogQ291bnQgdGhlIG51bWJlciBvZiBib3VuY2UgcGFnZXMKKwkJICogbmVlZGVkIGlu IG9yZGVyIHRvIGNvbXBsZXRlIHRoaXMgdHJhbnNmZXIKKwkJICovCisJCWN1cmFkZHIgPSBidWY7 CisJCXdoaWxlIChidWZsZW4gIT0gMCkgeworCQkJc2dzaXplID0gTUlOKGJ1ZmxlbiwgZG1hdC0+ Y29tbW9uLm1heHNlZ3N6KTsKKwkJCWlmIChidXNfZG1hX3J1bl9maWx0ZXIoJmRtYXQtPmNvbW1v biwgY3VyYWRkcikpIHsKKwkJCQlzZ3NpemUgPSBNSU4oc2dzaXplLCBQQUdFX1NJWkUpOworCQkJ CW1hcC0+cGFnZXNuZWVkZWQrKzsKKwkJCX0KKwkJCWN1cmFkZHIgKz0gc2dzaXplOworCQkJYnVm bGVuIC09IHNnc2l6ZTsKKwkJfQorCQlDVFIxKEtUUl9CVVNETUEsICJwYWdlc25lZWRlZD0gJWRc biIsIG1hcC0+cGFnZXNuZWVkZWQpOworCX0KK30KKworc3RhdGljIHZvaWQKK19idXNfZG1hbWFw X2NvdW50X3BhZ2VzKGJ1c19kbWFfdGFnX3QgZG1hdCwgYnVzX2RtYW1hcF90IG1hcCwgcG1hcF90 IHBtYXAsCisgICAgdm9pZCAqYnVmLCBidXNfc2l6ZV90IGJ1ZmxlbiwgaW50IGZsYWdzKQorewor CXZtX29mZnNldF90IHZhZGRyOworCXZtX29mZnNldF90IHZlbmRhZGRyOworCWJ1c19hZGRyX3Qg cGFkZHI7CisJYnVzX3NpemVfdCBzZ19sZW47CisKKwlpZiAoKG1hcCAhPSAmbm9ib3VuY2VfZG1h bWFwICYmIG1hcC0+cGFnZXNuZWVkZWQgPT0gMCkpIHsKKwkJQ1RSNChLVFJfQlVTRE1BLCAibG93 YWRkcj0gJWQgTWF4bWVtPSAlZCwgYm91bmRhcnk9ICVkLCAiCisJCSAgICAiYWxpZ25tZW50PSAl ZCIsIGRtYXQtPmNvbW1vbi5sb3dhZGRyLAorCQkgICAgcHRvYSgodm1fcGFkZHJfdClNYXhtZW0p LAorCQkgICAgZG1hdC0+Y29tbW9uLmJvdW5kYXJ5LCBkbWF0LT5jb21tb24uYWxpZ25tZW50KTsK KwkJQ1RSMyhLVFJfQlVTRE1BLCAibWFwPSAlcCwgbm9ib3VuY2VtYXA9ICVwLCBwYWdlc25lZWRl ZD0gJWQiLAorCQkgICAgbWFwLCAmbm9ib3VuY2VfZG1hbWFwLCBtYXAtPnBhZ2VzbmVlZGVkKTsK KwkJLyoKKwkJICogQ291bnQgdGhlIG51bWJlciBvZiBib3VuY2UgcGFnZXMKKwkJICogbmVlZGVk IGluIG9yZGVyIHRvIGNvbXBsZXRlIHRoaXMgdHJhbnNmZXIKKwkJICovCisJCXZhZGRyID0gKHZt X29mZnNldF90KWJ1ZjsKKwkJdmVuZGFkZHIgPSAodm1fb2Zmc2V0X3QpYnVmICsgYnVmbGVuOwor CisJCXdoaWxlICh2YWRkciA8IHZlbmRhZGRyKSB7CisJCQlzZ19sZW4gPSBQQUdFX1NJWkUgLSAo KHZtX29mZnNldF90KXZhZGRyICYgUEFHRV9NQVNLKTsKKwkJCWlmIChwbWFwID09IGtlcm5lbF9w bWFwKQorCQkJCXBhZGRyID0gcG1hcF9rZXh0cmFjdCh2YWRkcik7CisJCQllbHNlCisJCQkJcGFk ZHIgPSBwbWFwX2V4dHJhY3QocG1hcCwgdmFkZHIpOworCQkJaWYgKGJ1c19kbWFfcnVuX2ZpbHRl cigmZG1hdC0+Y29tbW9uLCBwYWRkcikgIT0gMCkgeworCQkJCXNnX2xlbiA9IHJvdW5kdXAyKHNn X2xlbiwKKwkJCQkgICAgZG1hdC0+Y29tbW9uLmFsaWdubWVudCk7CisJCQkJbWFwLT5wYWdlc25l ZWRlZCsrOworCQkJfQorCQkJdmFkZHIgKz0gc2dfbGVuOworCQl9CisJCUNUUjEoS1RSX0JVU0RN QSwgInBhZ2VzbmVlZGVkPSAlZFxuIiwgbWFwLT5wYWdlc25lZWRlZCk7CisJfQorfQorCitzdGF0 aWMgaW50CitfYnVzX2RtYW1hcF9yZXNlcnZlX3BhZ2VzKGJ1c19kbWFfdGFnX3QgZG1hdCwgYnVz X2RtYW1hcF90IG1hcCwgaW50IGZsYWdzKQoreworCisJLyogUmVzZXJ2ZSBOZWNlc3NhcnkgQm91 bmNlIFBhZ2VzICovCisJbXR4X2xvY2soJmJvdW5jZV9sb2NrKTsKKwlpZiAoZmxhZ3MgJiBCVVNf RE1BX05PV0FJVCkgeworCQlpZiAocmVzZXJ2ZV9ib3VuY2VfcGFnZXMoZG1hdCwgbWFwLCAwKSAh PSAwKSB7CisJCQltdHhfdW5sb2NrKCZib3VuY2VfbG9jayk7CisJCQlyZXR1cm4gKEVOT01FTSk7 CisJCX0KKwl9IGVsc2UgeworCQlpZiAocmVzZXJ2ZV9ib3VuY2VfcGFnZXMoZG1hdCwgbWFwLCAx KSAhPSAwKSB7CisJCQkvKiBRdWV1ZSB1cyBmb3IgcmVzb3VyY2VzICovCisJCQlTVEFJTFFfSU5T RVJUX1RBSUwoJmJvdW5jZV9tYXBfd2FpdGluZ2xpc3QsIG1hcCwgbGlua3MpOworCQkJbXR4X3Vu bG9jaygmYm91bmNlX2xvY2spOworCQkJcmV0dXJuIChFSU5QUk9HUkVTUyk7CisJCX0KKwl9CisJ bXR4X3VubG9jaygmYm91bmNlX2xvY2spOworCisJcmV0dXJuICgwKTsKK30KKworLyoKKyAqIEFk ZCBhIHNpbmdsZSBjb250aWd1b3VzIHBoeXNpY2FsIHJhbmdlIHRvIHRoZSBzZWdtZW50IGxpc3Qu CisgKi8KK3N0YXRpYyBpbnQKK19idXNfZG1hbWFwX2FkZHNlZyhidXNfZG1hX3RhZ190IGRtYXQs IGJ1c19kbWFtYXBfdCBtYXAsIGJ1c19hZGRyX3QgY3VyYWRkciwKKyAgICBidXNfc2l6ZV90IHNn c2l6ZSwgYnVzX2RtYV9zZWdtZW50X3QgKnNlZ3MsIGludCAqc2VncCkKK3sKKwlidXNfYWRkcl90 IGJhZGRyLCBibWFzazsKKwlpbnQgc2VnOworCisJLyoKKwkgKiBNYWtlIHN1cmUgd2UgZG9uJ3Qg Y3Jvc3MgYW55IGJvdW5kYXJpZXMuCisJICovCisJYm1hc2sgPSB+KGRtYXQtPmNvbW1vbi5ib3Vu ZGFyeSAtIDEpOworCWlmIChkbWF0LT5jb21tb24uYm91bmRhcnkgPiAwKSB7CisJCWJhZGRyID0g KGN1cmFkZHIgKyBkbWF0LT5jb21tb24uYm91bmRhcnkpICYgYm1hc2s7CisJCWlmIChzZ3NpemUg PiAoYmFkZHIgLSBjdXJhZGRyKSkKKwkJCXNnc2l6ZSA9IChiYWRkciAtIGN1cmFkZHIpOworCX0K KworCS8qCisJICogSW5zZXJ0IGNodW5rIGludG8gYSBzZWdtZW50LCBjb2FsZXNjaW5nIHdpdGgK KwkgKiBwcmV2aW91cyBzZWdtZW50IGlmIHBvc3NpYmxlLgorCSAqLworCXNlZyA9ICpzZWdwOwor CWlmIChzZWcgPT0gLTEpIHsKKwkJc2VnID0gMDsKKwkJc2Vnc1tzZWddLmRzX2FkZHIgPSBjdXJh ZGRyOworCQlzZWdzW3NlZ10uZHNfbGVuID0gc2dzaXplOworCX0gZWxzZSB7CisJCWlmIChjdXJh ZGRyID09IHNlZ3Nbc2VnXS5kc19hZGRyICsgc2Vnc1tzZWddLmRzX2xlbiAmJgorCQkgICAgKHNl Z3Nbc2VnXS5kc19sZW4gKyBzZ3NpemUpIDw9IGRtYXQtPmNvbW1vbi5tYXhzZWdzeiAmJgorCQkg ICAgKGRtYXQtPmNvbW1vbi5ib3VuZGFyeSA9PSAwIHx8CisJCSAgICAgKHNlZ3Nbc2VnXS5kc19h ZGRyICYgYm1hc2spID09IChjdXJhZGRyICYgYm1hc2spKSkKKwkJCXNlZ3Nbc2VnXS5kc19sZW4g Kz0gc2dzaXplOworCQllbHNlIHsKKwkJCWlmICgrK3NlZyA+PSBkbWF0LT5jb21tb24ubnNlZ21l bnRzKQorCQkJCXJldHVybiAoMCk7CisJCQlzZWdzW3NlZ10uZHNfYWRkciA9IGN1cmFkZHI7CisJ CQlzZWdzW3NlZ10uZHNfbGVuID0gc2dzaXplOworCQl9CisJfQorCSpzZWdwID0gc2VnOworCXJl dHVybiAoc2dzaXplKTsKK30KKworLyoKKyAqIFV0aWxpdHkgZnVuY3Rpb24gdG8gbG9hZCBhIHBo eXNpY2FsIGJ1ZmZlci4gIHNlZ3AgY29udGFpbnMKKyAqIHRoZSBzdGFydGluZyBzZWdtZW50IG9u IGVudHJhY2UsIGFuZCB0aGUgZW5kaW5nIHNlZ21lbnQgb24gZXhpdC4KKyAqLworc3RhdGljIGlu dAorYm91bmNlX2J1c19kbWFtYXBfbG9hZF9waHlzKGJ1c19kbWFfdGFnX3QgZG1hdCwgYnVzX2Rt YW1hcF90IG1hcCwKKyAgICB2bV9wYWRkcl90IGJ1ZiwgYnVzX3NpemVfdCBidWZsZW4sIGludCBm bGFncywgYnVzX2RtYV9zZWdtZW50X3QgKnNlZ3MsCisgICAgaW50ICpzZWdwKQoreworCWJ1c19z aXplX3Qgc2dzaXplOworCWJ1c19hZGRyX3QgY3VyYWRkcjsKKwlpbnQgZXJyb3I7CisKKwlpZiAo bWFwID09IE5VTEwpCisJCW1hcCA9ICZub2JvdW5jZV9kbWFtYXA7CisKKwlpZiAoc2VncyA9PSBO VUxMKQorCQlzZWdzID0gZG1hdC0+c2VnbWVudHM7CisKKwlpZiAoKGRtYXQtPmJvdW5jZV9mbGFn cyAmIEJVU19ETUFfQ09VTERfQk9VTkNFKSAhPSAwKSB7CisJCV9idXNfZG1hbWFwX2NvdW50X3Bo eXMoZG1hdCwgbWFwLCBidWYsIGJ1ZmxlbiwgZmxhZ3MpOworCQlpZiAobWFwLT5wYWdlc25lZWRl ZCAhPSAwKSB7CisJCQllcnJvciA9IF9idXNfZG1hbWFwX3Jlc2VydmVfcGFnZXMoZG1hdCwgbWFw LCBmbGFncyk7CisJCQlpZiAoZXJyb3IpCisJCQkJcmV0dXJuIChlcnJvcik7CisJCX0KKwl9CisK Kwl3aGlsZSAoYnVmbGVuID4gMCkgeworCQljdXJhZGRyID0gYnVmOworCQlzZ3NpemUgPSBNSU4o YnVmbGVuLCBkbWF0LT5jb21tb24ubWF4c2Vnc3opOworCQlpZiAoKChkbWF0LT5ib3VuY2VfZmxh Z3MgJiBCVVNfRE1BX0NPVUxEX0JPVU5DRSkgIT0gMCkgJiYKKwkJICAgIG1hcC0+cGFnZXNuZWVk ZWQgIT0gMCAmJgorCQkgICAgYnVzX2RtYV9ydW5fZmlsdGVyKCZkbWF0LT5jb21tb24sIGN1cmFk ZHIpKSB7CisJCQlzZ3NpemUgPSBNSU4oc2dzaXplLCBQQUdFX1NJWkUpOworCQkJY3VyYWRkciA9 IGFkZF9ib3VuY2VfcGFnZShkbWF0LCBtYXAsIDAsIGN1cmFkZHIsCisJCQkgICAgc2dzaXplKTsK KwkJfQorCQlzZ3NpemUgPSBfYnVzX2RtYW1hcF9hZGRzZWcoZG1hdCwgbWFwLCBjdXJhZGRyLCBz Z3NpemUsIHNlZ3MsCisJCSAgICBzZWdwKTsKKwkJaWYgKHNnc2l6ZSA9PSAwKQorCQkJYnJlYWs7 CisJCWJ1ZiArPSBzZ3NpemU7CisJCWJ1ZmxlbiAtPSBzZ3NpemU7CisJfQorCisJLyoKKwkgKiBE aWQgd2UgZml0PworCSAqLworCXJldHVybiAoYnVmbGVuICE9IDAgPyBFRkJJRyA6IDApOyAvKiBY WFggYmV0dGVyIHJldHVybiB2YWx1ZSBoZXJlPyAqLworfQorCisvKgorICogVXRpbGl0eSBmdW5j dGlvbiB0byBsb2FkIGEgbGluZWFyIGJ1ZmZlci4gIHNlZ3AgY29udGFpbnMKKyAqIHRoZSBzdGFy dGluZyBzZWdtZW50IG9uIGVudHJhY2UsIGFuZCB0aGUgZW5kaW5nIHNlZ21lbnQgb24gZXhpdC4K KyAqLworc3RhdGljIGludAorYm91bmNlX2J1c19kbWFtYXBfbG9hZF9idWZmZXIoYnVzX2RtYV90 YWdfdCBkbWF0LCBidXNfZG1hbWFwX3QgbWFwLCB2b2lkICpidWYsCisgICAgYnVzX3NpemVfdCBi dWZsZW4sIHBtYXBfdCBwbWFwLCBpbnQgZmxhZ3MsIGJ1c19kbWFfc2VnbWVudF90ICpzZWdzLAor ICAgIGludCAqc2VncCkKK3sKKwlidXNfc2l6ZV90IHNnc2l6ZSwgbWF4X3Nnc2l6ZTsKKwlidXNf YWRkcl90IGN1cmFkZHI7CisJdm1fb2Zmc2V0X3QgdmFkZHI7CisJaW50IGVycm9yOworCisJaWYg KG1hcCA9PSBOVUxMKQorCQltYXAgPSAmbm9ib3VuY2VfZG1hbWFwOworCisJaWYgKHNlZ3MgPT0g TlVMTCkKKwkJc2VncyA9IGRtYXQtPnNlZ21lbnRzOworCisJaWYgKChkbWF0LT5ib3VuY2VfZmxh Z3MgJiBCVVNfRE1BX0NPVUxEX0JPVU5DRSkgIT0gMCkgeworCQlfYnVzX2RtYW1hcF9jb3VudF9w YWdlcyhkbWF0LCBtYXAsIHBtYXAsIGJ1ZiwgYnVmbGVuLCBmbGFncyk7CisJCWlmIChtYXAtPnBh Z2VzbmVlZGVkICE9IDApIHsKKwkJCWVycm9yID0gX2J1c19kbWFtYXBfcmVzZXJ2ZV9wYWdlcyhk bWF0LCBtYXAsIGZsYWdzKTsKKwkJCWlmIChlcnJvcikKKwkJCQlyZXR1cm4gKGVycm9yKTsKKwkJ fQorCX0KKworCXZhZGRyID0gKHZtX29mZnNldF90KWJ1ZjsKKwl3aGlsZSAoYnVmbGVuID4gMCkg eworCQkvKgorCQkgKiBHZXQgdGhlIHBoeXNpY2FsIGFkZHJlc3MgZm9yIHRoaXMgc2VnbWVudC4K KwkJICovCisJCWlmIChwbWFwID09IGtlcm5lbF9wbWFwKQorCQkJY3VyYWRkciA9IHBtYXBfa2V4 dHJhY3QodmFkZHIpOworCQllbHNlCisJCQljdXJhZGRyID0gcG1hcF9leHRyYWN0KHBtYXAsIHZh ZGRyKTsKKworCQkvKgorCQkgKiBDb21wdXRlIHRoZSBzZWdtZW50IHNpemUsIGFuZCBhZGp1c3Qg Y291bnRzLgorCQkgKi8KKwkJbWF4X3Nnc2l6ZSA9IE1JTihidWZsZW4sIGRtYXQtPmNvbW1vbi5t YXhzZWdzeik7CisJCXNnc2l6ZSA9IFBBR0VfU0laRSAtICgodm1fb2Zmc2V0X3QpY3VyYWRkciAm IFBBR0VfTUFTSyk7CisJCWlmICgoKGRtYXQtPmJvdW5jZV9mbGFncyAmIEJVU19ETUFfQ09VTERf Qk9VTkNFKSAhPSAwKSAmJgorCQkgICAgbWFwLT5wYWdlc25lZWRlZCAhPSAwICYmCisJCSAgICBi dXNfZG1hX3J1bl9maWx0ZXIoJmRtYXQtPmNvbW1vbiwgY3VyYWRkcikpIHsKKwkJCXNnc2l6ZSA9 IHJvdW5kdXAyKHNnc2l6ZSwgZG1hdC0+Y29tbW9uLmFsaWdubWVudCk7CisJCQlzZ3NpemUgPSBN SU4oc2dzaXplLCBtYXhfc2dzaXplKTsKKwkJCWN1cmFkZHIgPSBhZGRfYm91bmNlX3BhZ2UoZG1h dCwgbWFwLCB2YWRkciwgY3VyYWRkciwKKwkJCSAgICBzZ3NpemUpOworCQl9IGVsc2UgeworCQkJ c2dzaXplID0gTUlOKHNnc2l6ZSwgbWF4X3Nnc2l6ZSk7CisJCX0KKwkJc2dzaXplID0gX2J1c19k bWFtYXBfYWRkc2VnKGRtYXQsIG1hcCwgY3VyYWRkciwgc2dzaXplLCBzZWdzLAorCQkgICAgc2Vn cCk7CisJCWlmIChzZ3NpemUgPT0gMCkKKwkJCWJyZWFrOworCQl2YWRkciArPSBzZ3NpemU7CisJ CWJ1ZmxlbiAtPSBzZ3NpemU7CisJfQorCisJLyoKKwkgKiBEaWQgd2UgZml0PworCSAqLworCXJl dHVybiAoYnVmbGVuICE9IDAgPyBFRkJJRyA6IDApOyAvKiBYWFggYmV0dGVyIHJldHVybiB2YWx1 ZSBoZXJlPyAqLworfQorCitzdGF0aWMgdm9pZAorYm91bmNlX2J1c19kbWFtYXBfd2FpdG9rKGJ1 c19kbWFfdGFnX3QgZG1hdCwgYnVzX2RtYW1hcF90IG1hcCwKKyAgICBzdHJ1Y3QgbWVtZGVzYyAq bWVtLCBidXNfZG1hbWFwX2NhbGxiYWNrX3QgKmNhbGxiYWNrLCB2b2lkICpjYWxsYmFja19hcmcp Cit7CisKKwlpZiAobWFwID09IE5VTEwpCisJCXJldHVybjsKKwltYXAtPm1lbSA9ICptZW07CisJ bWFwLT5kbWF0ID0gZG1hdDsKKwltYXAtPmNhbGxiYWNrID0gY2FsbGJhY2s7CisJbWFwLT5jYWxs YmFja19hcmcgPSBjYWxsYmFja19hcmc7Cit9CisKK3N0YXRpYyBidXNfZG1hX3NlZ21lbnRfdCAq Citib3VuY2VfYnVzX2RtYW1hcF9jb21wbGV0ZShidXNfZG1hX3RhZ190IGRtYXQsIGJ1c19kbWFt YXBfdCBtYXAsCisgICAgYnVzX2RtYV9zZWdtZW50X3QgKnNlZ3MsIGludCBuc2VncywgaW50IGVy cm9yKQoreworCisJaWYgKHNlZ3MgPT0gTlVMTCkKKwkJc2VncyA9IGRtYXQtPnNlZ21lbnRzOwor CXJldHVybiAoc2Vncyk7Cit9CisKKy8qCisgKiBSZWxlYXNlIHRoZSBtYXBwaW5nIGhlbGQgYnkg bWFwLgorICovCitzdGF0aWMgdm9pZAorYm91bmNlX2J1c19kbWFtYXBfdW5sb2FkKGJ1c19kbWFf dGFnX3QgZG1hdCwgYnVzX2RtYW1hcF90IG1hcCkKK3sKKwlzdHJ1Y3QgYm91bmNlX3BhZ2UgKmJw YWdlOworCisJaWYgKG1hcCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwl3aGlsZSAoKGJwYWdlID0g U1RBSUxRX0ZJUlNUKCZtYXAtPmJwYWdlcykpICE9IE5VTEwpIHsKKwkJU1RBSUxRX1JFTU9WRV9I RUFEKCZtYXAtPmJwYWdlcywgbGlua3MpOworCQlmcmVlX2JvdW5jZV9wYWdlKGRtYXQsIGJwYWdl KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitib3VuY2VfYnVzX2RtYW1hcF9zeW5jKGJ1c19kbWFf dGFnX3QgZG1hdCwgYnVzX2RtYW1hcF90IG1hcCwKKyAgICBidXNfZG1hc3luY19vcF90IG9wKQor eworCXN0cnVjdCBib3VuY2VfcGFnZSAqYnBhZ2U7CisJLyoKKwkgKiBYWFg6CisJICogVGhpcyBi dXNfZG1hIGltcGxlbWVudGF0aW9uIHJlcXVpcmVzIElPLUNvaGVyZW50IGFyY2hpdGVjdXRyZS4K KwkgKiBJZiBJTy1Db2hlcmVuY3kgaXMgbm90IGd1YXJhbnRlZWQsIGNhY2hlIG9wZXJhdGlvbnMg aGF2ZSB0byBiZQorCSAqIGFkZGVkIHRvIHRoaXMgZnVuY3Rpb24uCisJICovCisKKwlpZiAob3Ag PT0gQlVTX0RNQVNZTkNfUE9TVFdSSVRFKQorCQlyZXR1cm47CisKKwlpZiAoKG9wICYgQlVTX0RN QVNZTkNfUE9TVFJFQUQpICE9IDApIHsKKwkJLyoKKwkJICogV2FpdCBmb3IgYW55IERNQSBvcGVy YXRpb25zIHRvIGNvbXBsZXRlIGJlZm9yZSB0aGUgYmNvcHkuCisJCSAqLworCQlkc2IoKTsKKwl9 CisKKwlpZiAoKGJwYWdlID0gU1RBSUxRX0ZJUlNUKCZtYXAtPmJwYWdlcykpICE9IE5VTEwpIHsK KwkJQ1RSNChLVFJfQlVTRE1BLCAiJXM6IHRhZyAlcCB0YWcgZmxhZ3MgMHgleCBvcCAweCV4ICIK KwkJICAgICJwZXJmb3JtaW5nIGJvdW5jZSIsIF9fZnVuY19fLCBkbWF0LCBkbWF0LT5jb21tb24u ZmxhZ3MsCisJCSAgICBvcCk7CisJCWlmICgob3AgJiBCVVNfRE1BU1lOQ19QUkVXUklURSkgIT0g MCkgeworCQkJd2hpbGUgKGJwYWdlICE9IE5VTEwpIHsKKwkJCQlpZiAoYnBhZ2UtPmRhdGF2YWRk ciAhPSAwKSB7CisJCQkJCWJjb3B5KCh2b2lkICopYnBhZ2UtPmRhdGF2YWRkciwKKwkJCQkJICAg ICh2b2lkICopYnBhZ2UtPnZhZGRyLAorCQkJCQkgICAgYnBhZ2UtPmRhdGFjb3VudCk7CisJCQkJ fSBlbHNlIHsKKwkJCQkJcGh5c2NvcHlvdXQoYnBhZ2UtPmRhdGFhZGRyLAorCQkJCQkgICAgKHZv aWQgKilicGFnZS0+dmFkZHIsCisJCQkJCSAgICBicGFnZS0+ZGF0YWNvdW50KTsKKwkJCQl9CisJ CQkJYnBhZ2UgPSBTVEFJTFFfTkVYVChicGFnZSwgbGlua3MpOworCQkJfQorCQkJZG1hdC0+Ym91 bmNlX3pvbmUtPnRvdGFsX2JvdW5jZWQrKzsKKwkJfQorCisJCWlmICgob3AgJiBCVVNfRE1BU1lO Q19QT1NUUkVBRCkgIT0gMCkgeworCQkJd2hpbGUgKGJwYWdlICE9IE5VTEwpIHsKKwkJCQlpZiAo YnBhZ2UtPmRhdGF2YWRkciAhPSAwKSB7CisJCQkJCWJjb3B5KCh2b2lkICopYnBhZ2UtPnZhZGRy LAorCQkJCQkgICAgKHZvaWQgKilicGFnZS0+ZGF0YXZhZGRyLAorCQkJCQkgICAgYnBhZ2UtPmRh dGFjb3VudCk7CisJCQkJfSBlbHNlIHsKKwkJCQkJcGh5c2NvcHlpbigodm9pZCAqKWJwYWdlLT52 YWRkciwKKwkJCQkJICAgIGJwYWdlLT5kYXRhYWRkciwgYnBhZ2UtPmRhdGFjb3VudCk7CisJCQkJ fQorCQkJCWJwYWdlID0gU1RBSUxRX05FWFQoYnBhZ2UsIGxpbmtzKTsKKwkJCX0KKwkJCWRtYXQt PmJvdW5jZV96b25lLT50b3RhbF9ib3VuY2VkKys7CisJCX0KKwl9CisKKwlpZiAoKG9wICYgQlVT X0RNQVNZTkNfUFJFV1JJVEUpICE9IDApIHsKKwkJLyoKKwkJICogV2FpdCBmb3IgdGhlIGJjb3B5 IHRvIGNvbXBsZXRlIGJlZm9yZSBhbnkgRE1BIG9wZXJhdGlvbnMuCisJCSAqLworCQlkc2IoKTsK Kwl9Cit9CisKK3N0YXRpYyB2b2lkCitpbml0X2JvdW5jZV9wYWdlcyh2b2lkICpkdW1teSBfX3Vu dXNlZCkKK3sKKworCXRvdGFsX2JwYWdlcyA9IDA7CisJU1RBSUxRX0lOSVQoJmJvdW5jZV96b25l X2xpc3QpOworCVNUQUlMUV9JTklUKCZib3VuY2VfbWFwX3dhaXRpbmdsaXN0KTsKKwlTVEFJTFFf SU5JVCgmYm91bmNlX21hcF9jYWxsYmFja2xpc3QpOworCW10eF9pbml0KCZib3VuY2VfbG9jaywg ImJvdW5jZSBwYWdlcyBsb2NrIiwgTlVMTCwgTVRYX0RFRik7Cit9CitTWVNJTklUKGJwYWdlcywg U0lfU1VCX0xPQ0ssIFNJX09SREVSX0FOWSwgaW5pdF9ib3VuY2VfcGFnZXMsIE5VTEwpOworCitz dGF0aWMgc3RydWN0IHN5c2N0bF9jdHhfbGlzdCAqCitidXNkbWFfc3lzY3RsX3RyZWUoc3RydWN0 IGJvdW5jZV96b25lICpieikKK3sKKworCXJldHVybiAoJmJ6LT5zeXNjdGxfdHJlZSk7Cit9CisK K3N0YXRpYyBzdHJ1Y3Qgc3lzY3RsX29pZCAqCitidXNkbWFfc3lzY3RsX3RyZWVfdG9wKHN0cnVj dCBib3VuY2Vfem9uZSAqYnopCit7CisKKwlyZXR1cm4gKGJ6LT5zeXNjdGxfdHJlZV90b3ApOwor fQorCitzdGF0aWMgaW50CithbGxvY19ib3VuY2Vfem9uZShidXNfZG1hX3RhZ190IGRtYXQpCit7 CisJc3RydWN0IGJvdW5jZV96b25lICpiejsKKworCS8qIENoZWNrIHRvIHNlZSBpZiB3ZSBhbHJl YWR5IGhhdmUgYSBzdWl0YWJsZSB6b25lICovCisJU1RBSUxRX0ZPUkVBQ0goYnosICZib3VuY2Vf em9uZV9saXN0LCBsaW5rcykgeworCQlpZiAoKGRtYXQtPmNvbW1vbi5hbGlnbm1lbnQgPD0gYnot PmFsaWdubWVudCkgJiYKKwkJICAgIChkbWF0LT5jb21tb24ubG93YWRkciA+PSBiei0+bG93YWRk cikpIHsKKwkJCWRtYXQtPmJvdW5jZV96b25lID0gYno7CisJCQlyZXR1cm4gKDApOworCQl9CisJ fQorCisJaWYgKChieiA9IChzdHJ1Y3QgYm91bmNlX3pvbmUgKiltYWxsb2Moc2l6ZW9mKCpieiks IE1fREVWQlVGLAorCSAgICBNX05PV0FJVCB8IE1fWkVSTykpID09IE5VTEwpCisJCXJldHVybiAo RU5PTUVNKTsKKworCVNUQUlMUV9JTklUKCZiei0+Ym91bmNlX3BhZ2VfbGlzdCk7CisJYnotPmZy ZWVfYnBhZ2VzID0gMDsKKwliei0+cmVzZXJ2ZWRfYnBhZ2VzID0gMDsKKwliei0+YWN0aXZlX2Jw YWdlcyA9IDA7CisJYnotPmxvd2FkZHIgPSBkbWF0LT5jb21tb24ubG93YWRkcjsKKwliei0+YWxp Z25tZW50ID0gTUFYKGRtYXQtPmNvbW1vbi5hbGlnbm1lbnQsIFBBR0VfU0laRSk7CisJYnotPm1h cF9jb3VudCA9IDA7CisJc25wcmludGYoYnotPnpvbmVpZCwgOCwgInpvbmUlZCIsIGJ1c2RtYV96 b25lY291bnQpOworCWJ1c2RtYV96b25lY291bnQrKzsKKwlzbnByaW50Zihiei0+bG93YWRkcmlk LCAxOCwgIiUjangiLCAodWludG1heF90KWJ6LT5sb3dhZGRyKTsKKwlTVEFJTFFfSU5TRVJUX1RB SUwoJmJvdW5jZV96b25lX2xpc3QsIGJ6LCBsaW5rcyk7CisJZG1hdC0+Ym91bmNlX3pvbmUgPSBi ejsKKworCXN5c2N0bF9jdHhfaW5pdCgmYnotPnN5c2N0bF90cmVlKTsKKwliei0+c3lzY3RsX3Ry ZWVfdG9wID0gU1lTQ1RMX0FERF9OT0RFKCZiei0+c3lzY3RsX3RyZWUsCisJICAgIFNZU0NUTF9T VEFUSUNfQ0hJTERSRU4oX2h3X2J1c2RtYSksIE9JRF9BVVRPLCBiei0+em9uZWlkLAorCSAgICBD VExGTEFHX1JELCAwLCAiIik7CisJaWYgKGJ6LT5zeXNjdGxfdHJlZV90b3AgPT0gTlVMTCkgewor CQlzeXNjdGxfY3R4X2ZyZWUoJmJ6LT5zeXNjdGxfdHJlZSk7CisJCXJldHVybiAoMCk7CS8qIFhY WCBlcnJvciBjb2RlPyAqLworCX0KKworCVNZU0NUTF9BRERfSU5UKGJ1c2RtYV9zeXNjdGxfdHJl ZShieiksCisJICAgIFNZU0NUTF9DSElMRFJFTihidXNkbWFfc3lzY3RsX3RyZWVfdG9wKGJ6KSks IE9JRF9BVVRPLAorCSAgICAidG90YWxfYnBhZ2VzIiwgQ1RMRkxBR19SRCwgJmJ6LT50b3RhbF9i cGFnZXMsIDAsCisJICAgICJUb3RhbCBib3VuY2UgcGFnZXMiKTsKKwlTWVNDVExfQUREX0lOVChi dXNkbWFfc3lzY3RsX3RyZWUoYnopLAorCSAgICBTWVNDVExfQ0hJTERSRU4oYnVzZG1hX3N5c2N0 bF90cmVlX3RvcChieikpLCBPSURfQVVUTywKKwkgICAgImZyZWVfYnBhZ2VzIiwgQ1RMRkxBR19S RCwgJmJ6LT5mcmVlX2JwYWdlcywgMCwKKwkgICAgIkZyZWUgYm91bmNlIHBhZ2VzIik7CisJU1lT Q1RMX0FERF9JTlQoYnVzZG1hX3N5c2N0bF90cmVlKGJ6KSwKKwkgICAgU1lTQ1RMX0NISUxEUkVO KGJ1c2RtYV9zeXNjdGxfdHJlZV90b3AoYnopKSwgT0lEX0FVVE8sCisJICAgICJyZXNlcnZlZF9i cGFnZXMiLCBDVExGTEFHX1JELCAmYnotPnJlc2VydmVkX2JwYWdlcywgMCwKKwkgICAgIlJlc2Vy dmVkIGJvdW5jZSBwYWdlcyIpOworCVNZU0NUTF9BRERfSU5UKGJ1c2RtYV9zeXNjdGxfdHJlZShi eiksCisJICAgIFNZU0NUTF9DSElMRFJFTihidXNkbWFfc3lzY3RsX3RyZWVfdG9wKGJ6KSksIE9J RF9BVVRPLAorCSAgICAiYWN0aXZlX2JwYWdlcyIsIENUTEZMQUdfUkQsICZiei0+YWN0aXZlX2Jw YWdlcywgMCwKKwkgICAgIkFjdGl2ZSBib3VuY2UgcGFnZXMiKTsKKwlTWVNDVExfQUREX0lOVChi dXNkbWFfc3lzY3RsX3RyZWUoYnopLAorCSAgICBTWVNDVExfQ0hJTERSRU4oYnVzZG1hX3N5c2N0 bF90cmVlX3RvcChieikpLCBPSURfQVVUTywKKwkgICAgInRvdGFsX2JvdW5jZWQiLCBDVExGTEFH X1JELCAmYnotPnRvdGFsX2JvdW5jZWQsIDAsCisJICAgICJUb3RhbCBib3VuY2UgcmVxdWVzdHMi KTsKKwlTWVNDVExfQUREX0lOVChidXNkbWFfc3lzY3RsX3RyZWUoYnopLAorCSAgICBTWVNDVExf Q0hJTERSRU4oYnVzZG1hX3N5c2N0bF90cmVlX3RvcChieikpLCBPSURfQVVUTywKKwkgICAgInRv dGFsX2RlZmVycmVkIiwgQ1RMRkxBR19SRCwgJmJ6LT50b3RhbF9kZWZlcnJlZCwgMCwKKwkgICAg IlRvdGFsIGJvdW5jZSByZXF1ZXN0cyB0aGF0IHdlcmUgZGVmZXJyZWQiKTsKKwlTWVNDVExfQURE X1NUUklORyhidXNkbWFfc3lzY3RsX3RyZWUoYnopLAorCSAgICBTWVNDVExfQ0hJTERSRU4oYnVz ZG1hX3N5c2N0bF90cmVlX3RvcChieikpLCBPSURfQVVUTywKKwkgICAgImxvd2FkZHIiLCBDVExG TEFHX1JELCBiei0+bG93YWRkcmlkLCAwLCAiIik7CisJU1lTQ1RMX0FERF9VQVVUTyhidXNkbWFf c3lzY3RsX3RyZWUoYnopLAorCSAgICBTWVNDVExfQ0hJTERSRU4oYnVzZG1hX3N5c2N0bF90cmVl X3RvcChieikpLCBPSURfQVVUTywKKwkgICAgImFsaWdubWVudCIsIENUTEZMQUdfUkQsICZiei0+ YWxpZ25tZW50LCAiIik7CisKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CithbGxvY19i b3VuY2VfcGFnZXMoYnVzX2RtYV90YWdfdCBkbWF0LCB1X2ludCBudW1wYWdlcykKK3sKKwlzdHJ1 Y3QgYm91bmNlX3pvbmUgKmJ6OworCWludCBjb3VudDsKKworCWJ6ID0gZG1hdC0+Ym91bmNlX3pv bmU7CisJY291bnQgPSAwOworCXdoaWxlIChudW1wYWdlcyA+IDApIHsKKwkJc3RydWN0IGJvdW5j ZV9wYWdlICpicGFnZTsKKworCQlicGFnZSA9IChzdHJ1Y3QgYm91bmNlX3BhZ2UgKiltYWxsb2Mo c2l6ZW9mKCpicGFnZSksIE1fREVWQlVGLAorCQkJCQkJICAgICBNX05PV0FJVCB8IE1fWkVSTyk7 CisKKwkJaWYgKGJwYWdlID09IE5VTEwpCisJCQlicmVhazsKKwkJYnBhZ2UtPnZhZGRyID0gKHZt X29mZnNldF90KWNvbnRpZ21hbGxvYyhQQUdFX1NJWkUsIE1fREVWQlVGLAorCQkJCQkJCSBNX05P V0FJVCwgMHVsLAorCQkJCQkJCSBiei0+bG93YWRkciwKKwkJCQkJCQkgUEFHRV9TSVpFLAorCQkJ CQkJCSAwKTsKKwkJaWYgKGJwYWdlLT52YWRkciA9PSAwKSB7CisJCQlmcmVlKGJwYWdlLCBNX0RF VkJVRik7CisJCQlicmVhazsKKwkJfQorCQlicGFnZS0+YnVzYWRkciA9IHBtYXBfa2V4dHJhY3Qo YnBhZ2UtPnZhZGRyKTsKKwkJbXR4X2xvY2soJmJvdW5jZV9sb2NrKTsKKwkJU1RBSUxRX0lOU0VS VF9UQUlMKCZiei0+Ym91bmNlX3BhZ2VfbGlzdCwgYnBhZ2UsIGxpbmtzKTsKKwkJdG90YWxfYnBh Z2VzKys7CisJCWJ6LT50b3RhbF9icGFnZXMrKzsKKwkJYnotPmZyZWVfYnBhZ2VzKys7CisJCW10 eF91bmxvY2soJmJvdW5jZV9sb2NrKTsKKwkJY291bnQrKzsKKwkJbnVtcGFnZXMtLTsKKwl9CisJ cmV0dXJuIChjb3VudCk7Cit9CisKK3N0YXRpYyBpbnQKK3Jlc2VydmVfYm91bmNlX3BhZ2VzKGJ1 c19kbWFfdGFnX3QgZG1hdCwgYnVzX2RtYW1hcF90IG1hcCwgaW50IGNvbW1pdCkKK3sKKwlzdHJ1 Y3QgYm91bmNlX3pvbmUgKmJ6OworCWludCBwYWdlczsKKworCW10eF9hc3NlcnQoJmJvdW5jZV9s b2NrLCBNQV9PV05FRCk7CisJYnogPSBkbWF0LT5ib3VuY2Vfem9uZTsKKwlwYWdlcyA9IE1JTihi ei0+ZnJlZV9icGFnZXMsIG1hcC0+cGFnZXNuZWVkZWQgLSBtYXAtPnBhZ2VzcmVzZXJ2ZWQpOwor CWlmIChjb21taXQgPT0gMCAmJiBtYXAtPnBhZ2VzbmVlZGVkID4gKG1hcC0+cGFnZXNyZXNlcnZl ZCArIHBhZ2VzKSkKKwkJcmV0dXJuIChtYXAtPnBhZ2VzbmVlZGVkIC0gKG1hcC0+cGFnZXNyZXNl cnZlZCArIHBhZ2VzKSk7CisJYnotPmZyZWVfYnBhZ2VzIC09IHBhZ2VzOworCWJ6LT5yZXNlcnZl ZF9icGFnZXMgKz0gcGFnZXM7CisJbWFwLT5wYWdlc3Jlc2VydmVkICs9IHBhZ2VzOworCXBhZ2Vz ID0gbWFwLT5wYWdlc25lZWRlZCAtIG1hcC0+cGFnZXNyZXNlcnZlZDsKKworCXJldHVybiAocGFn ZXMpOworfQorCitzdGF0aWMgYnVzX2FkZHJfdAorYWRkX2JvdW5jZV9wYWdlKGJ1c19kbWFfdGFn X3QgZG1hdCwgYnVzX2RtYW1hcF90IG1hcCwgdm1fb2Zmc2V0X3QgdmFkZHIsCisJCWJ1c19hZGRy X3QgYWRkciwgYnVzX3NpemVfdCBzaXplKQoreworCXN0cnVjdCBib3VuY2Vfem9uZSAqYno7CisJ c3RydWN0IGJvdW5jZV9wYWdlICpicGFnZTsKKworCUtBU1NFUlQoZG1hdC0+Ym91bmNlX3pvbmUg IT0gTlVMTCwgKCJubyBib3VuY2Ugem9uZSBpbiBkbWEgdGFnIikpOworCUtBU1NFUlQobWFwICE9 IE5VTEwgJiYgbWFwICE9ICZub2JvdW5jZV9kbWFtYXAsCisJICAgICgiYWRkX2JvdW5jZV9wYWdl OiBiYWQgbWFwICVwIiwgbWFwKSk7CisKKwlieiA9IGRtYXQtPmJvdW5jZV96b25lOworCWlmICht YXAtPnBhZ2VzbmVlZGVkID09IDApCisJCXBhbmljKCJhZGRfYm91bmNlX3BhZ2U6IG1hcCBkb2Vz bid0IG5lZWQgYW55IHBhZ2VzIik7CisJbWFwLT5wYWdlc25lZWRlZC0tOworCisJaWYgKG1hcC0+ cGFnZXNyZXNlcnZlZCA9PSAwKQorCQlwYW5pYygiYWRkX2JvdW5jZV9wYWdlOiBtYXAgZG9lc24n dCBuZWVkIGFueSBwYWdlcyIpOworCW1hcC0+cGFnZXNyZXNlcnZlZC0tOworCisJbXR4X2xvY2so JmJvdW5jZV9sb2NrKTsKKwlicGFnZSA9IFNUQUlMUV9GSVJTVCgmYnotPmJvdW5jZV9wYWdlX2xp c3QpOworCWlmIChicGFnZSA9PSBOVUxMKQorCQlwYW5pYygiYWRkX2JvdW5jZV9wYWdlOiBmcmVl IHBhZ2UgbGlzdCBpcyBlbXB0eSIpOworCisJU1RBSUxRX1JFTU9WRV9IRUFEKCZiei0+Ym91bmNl X3BhZ2VfbGlzdCwgbGlua3MpOworCWJ6LT5yZXNlcnZlZF9icGFnZXMtLTsKKwliei0+YWN0aXZl X2JwYWdlcysrOworCW10eF91bmxvY2soJmJvdW5jZV9sb2NrKTsKKworCWlmIChkbWF0LT5jb21t b24uZmxhZ3MgJiBCVVNfRE1BX0tFRVBfUEdfT0ZGU0VUKSB7CisJCS8qIFBhZ2Ugb2Zmc2V0IG5l ZWRzIHRvIGJlIHByZXNlcnZlZC4gKi8KKwkJYnBhZ2UtPnZhZGRyIHw9IGFkZHIgJiBQQUdFX01B U0s7CisJCWJwYWdlLT5idXNhZGRyIHw9IGFkZHIgJiBQQUdFX01BU0s7CisJfQorCWJwYWdlLT5k YXRhdmFkZHIgPSB2YWRkcjsKKwlicGFnZS0+ZGF0YWFkZHIgPSBhZGRyOworCWJwYWdlLT5kYXRh Y291bnQgPSBzaXplOworCVNUQUlMUV9JTlNFUlRfVEFJTCgmKG1hcC0+YnBhZ2VzKSwgYnBhZ2Us IGxpbmtzKTsKKwlyZXR1cm4gKGJwYWdlLT5idXNhZGRyKTsKK30KKworc3RhdGljIHZvaWQKK2Zy ZWVfYm91bmNlX3BhZ2UoYnVzX2RtYV90YWdfdCBkbWF0LCBzdHJ1Y3QgYm91bmNlX3BhZ2UgKmJw YWdlKQoreworCXN0cnVjdCBidXNfZG1hbWFwICptYXA7CisJc3RydWN0IGJvdW5jZV96b25lICpi ejsKKworCWJ6ID0gZG1hdC0+Ym91bmNlX3pvbmU7CisJYnBhZ2UtPmRhdGF2YWRkciA9IDA7CisJ YnBhZ2UtPmRhdGFjb3VudCA9IDA7CisJaWYgKGRtYXQtPmNvbW1vbi5mbGFncyAmIEJVU19ETUFf S0VFUF9QR19PRkZTRVQpIHsKKwkJLyoKKwkJICogUmVzZXQgdGhlIGJvdW5jZSBwYWdlIHRvIHN0 YXJ0IGF0IG9mZnNldCAwLiAgT3RoZXIgdXNlcworCQkgKiBvZiB0aGlzIGJvdW5jZSBwYWdlIG1h eSBuZWVkIHRvIHN0b3JlIGEgZnVsbCBwYWdlIG9mCisJCSAqIGRhdGEgYW5kL29yIGFzc3VtZSBp dCBzdGFydHMgb24gYSBwYWdlIGJvdW5kYXJ5LgorCQkgKi8KKwkJYnBhZ2UtPnZhZGRyICY9IH5Q QUdFX01BU0s7CisJCWJwYWdlLT5idXNhZGRyICY9IH5QQUdFX01BU0s7CisJfQorCisJbXR4X2xv Y2soJmJvdW5jZV9sb2NrKTsKKwlTVEFJTFFfSU5TRVJUX0hFQUQoJmJ6LT5ib3VuY2VfcGFnZV9s aXN0LCBicGFnZSwgbGlua3MpOworCWJ6LT5mcmVlX2JwYWdlcysrOworCWJ6LT5hY3RpdmVfYnBh Z2VzLS07CisJaWYgKChtYXAgPSBTVEFJTFFfRklSU1QoJmJvdW5jZV9tYXBfd2FpdGluZ2xpc3Qp KSAhPSBOVUxMKSB7CisJCWlmIChyZXNlcnZlX2JvdW5jZV9wYWdlcyhtYXAtPmRtYXQsIG1hcCwg MSkgPT0gMCkgeworCQkJU1RBSUxRX1JFTU9WRV9IRUFEKCZib3VuY2VfbWFwX3dhaXRpbmdsaXN0 LCBsaW5rcyk7CisJCQlTVEFJTFFfSU5TRVJUX1RBSUwoJmJvdW5jZV9tYXBfY2FsbGJhY2tsaXN0 LAorCQkJICAgIG1hcCwgbGlua3MpOworCQkJYnVzZG1hX3N3aV9wZW5kaW5nID0gMTsKKwkJCWJ6 LT50b3RhbF9kZWZlcnJlZCsrOworCQkJc3dpX3NjaGVkKHZtX2loLCAwKTsKKwkJfQorCX0KKwlt dHhfdW5sb2NrKCZib3VuY2VfbG9jayk7Cit9CisKK3ZvaWQKK2J1c2RtYV9zd2kodm9pZCkKK3sK KwlidXNfZG1hX3RhZ190IGRtYXQ7CisJc3RydWN0IGJ1c19kbWFtYXAgKm1hcDsKKworCW10eF9s b2NrKCZib3VuY2VfbG9jayk7CisJd2hpbGUgKChtYXAgPSBTVEFJTFFfRklSU1QoJmJvdW5jZV9t YXBfY2FsbGJhY2tsaXN0KSkgIT0gTlVMTCkgeworCQlTVEFJTFFfUkVNT1ZFX0hFQUQoJmJvdW5j ZV9tYXBfY2FsbGJhY2tsaXN0LCBsaW5rcyk7CisJCW10eF91bmxvY2soJmJvdW5jZV9sb2NrKTsK KwkJZG1hdCA9IG1hcC0+ZG1hdDsKKwkJKGRtYXQtPmNvbW1vbi5sb2NrZnVuYykoZG1hdC0+Y29t bW9uLmxvY2tmdW5jYXJnLCBCVVNfRE1BX0xPQ0spOworCQlidXNfZG1hbWFwX2xvYWRfbWVtKG1h cC0+ZG1hdCwgbWFwLCAmbWFwLT5tZW0sCisJCSAgICBtYXAtPmNhbGxiYWNrLCBtYXAtPmNhbGxi YWNrX2FyZywgQlVTX0RNQV9XQUlUT0spOworCQkoZG1hdC0+Y29tbW9uLmxvY2tmdW5jKShkbWF0 LT5jb21tb24ubG9ja2Z1bmNhcmcsCisJCSAgICBCVVNfRE1BX1VOTE9DSyk7CisJCW10eF9sb2Nr KCZib3VuY2VfbG9jayk7CisJfQorCW10eF91bmxvY2soJmJvdW5jZV9sb2NrKTsKK30KKworc3Ry dWN0IGJ1c19kbWFfaW1wbCBidXNfZG1hX2JvdW5jZV9pbXBsID0geworCS50YWdfY3JlYXRlID0g Ym91bmNlX2J1c19kbWFfdGFnX2NyZWF0ZSwKKwkudGFnX2Rlc3Ryb3kgPSBib3VuY2VfYnVzX2Rt YV90YWdfZGVzdHJveSwKKwkubWFwX2NyZWF0ZSA9IGJvdW5jZV9idXNfZG1hbWFwX2NyZWF0ZSwK KwkubWFwX2Rlc3Ryb3kgPSBib3VuY2VfYnVzX2RtYW1hcF9kZXN0cm95LAorCS5tZW1fYWxsb2Mg PSBib3VuY2VfYnVzX2RtYW1lbV9hbGxvYywKKwkubWVtX2ZyZWUgPSBib3VuY2VfYnVzX2RtYW1l bV9mcmVlLAorCS5sb2FkX3BoeXMgPSBib3VuY2VfYnVzX2RtYW1hcF9sb2FkX3BoeXMsCisJLmxv YWRfYnVmZmVyID0gYm91bmNlX2J1c19kbWFtYXBfbG9hZF9idWZmZXIsCisJLmxvYWRfbWEgPSBi dXNfZG1hbWFwX2xvYWRfbWFfdHJpdiwKKwkubWFwX3dhaXRvayA9IGJvdW5jZV9idXNfZG1hbWFw X3dhaXRvaywKKwkubWFwX2NvbXBsZXRlID0gYm91bmNlX2J1c19kbWFtYXBfY29tcGxldGUsCisJ Lm1hcF91bmxvYWQgPSBib3VuY2VfYnVzX2RtYW1hcF91bmxvYWQsCisJLm1hcF9zeW5jID0gYm91 bmNlX2J1c19kbWFtYXBfc3luYworfTsKZGlmZiAtLWdpdCBhL3N5cy9hcm0vYXJtL2J1c2RtYV9t YWNoZGVwLWNvaGVyZW50LmMgYi9zeXMvYXJtL2FybS9idXNkbWFfbWFjaGRlcC1jb2hlcmVudC5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlMWVjZGIKLS0tIC9kZXYvbnVs bAorKysgYi9zeXMvYXJtL2FybS9idXNkbWFfbWFjaGRlcC1jb2hlcmVudC5jCkBAIC0wLDAgKzEs MzU5IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5NywgMTk5OCBKdXN0aW4gVC4gR2liYnMu CisgKiBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEZyZWVCU0QgRm91bmRhdGlvbgorICogQWxsIHJp Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIHdhcyBkZXZlbG9wZWQgYnkgS29u c3RhbnRpbiBCZWxvdXNvdiA8a2liQEZyZWVCU0Qub3JnPgorICogdW5kZXIgc3BvbnNvcnNoaXAg ZnJvbSB0aGUgRnJlZUJTRCBGb3VuZGF0aW9uLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1 c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11 c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIsCisgKiAgICB3aXRob3V0 IG1vZGlmaWNhdGlvbiwgaW1tZWRpYXRlbHkgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS4K KyAqIDIuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ug b3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0 aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycn IEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NM QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJ QUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJW SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ VElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQg T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ QklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+ CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNs dWRlIDxzeXMvc3lzdG0uaD4KKyNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+CisjaW5jbHVkZSA8c3lz L2J1cy5oPgorI2luY2x1ZGUgPHN5cy9rZXJuZWwuaD4KKyNpbmNsdWRlIDxzeXMva3RyLmg+Cisj aW5jbHVkZSA8c3lzL2xvY2suaD4KKyNpbmNsdWRlIDxzeXMvbWVtZGVzYy5oPgorI2luY2x1ZGUg PHN5cy9tdXRleC5oPgorI2luY2x1ZGUgPHN5cy91aW8uaD4KKyNpbmNsdWRlIDx2bS92bS5oPgor I2luY2x1ZGUgPHZtL3ZtX2V4dGVybi5oPgorI2luY2x1ZGUgPHZtL3BtYXAuaD4KKyNpbmNsdWRl IDxtYWNoaW5lL2J1cy5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYnVzZG1hX2ltcGwuaD4KKworLyoK KyAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciBtYW5pcHVsYXRpbmcgZHJpdmVyIGxvY2tzIGZy b20gYnVzZG1hIChkdXJpbmcKKyAqIGJ1c2RtYV9zd2ksIGZvciBleGFtcGxlKS4gIERyaXZlcnMg dGhhdCBkb24ndCBwcm92aWRlIHRoZWlyIG93biBsb2NrcworICogc2hvdWxkIHNwZWNpZnkgJkdp YW50IHRvIGRtYXQtPmxvY2tmdW5jYXJnLiAgRHJpdmVycyB0aGF0IHVzZSB0aGVpciBvd24KKyAq IG5vbi1tdXRleCBsb2NraW5nIHNjaGVtZSBkb24ndCBoYXZlIHRvIHVzZSB0aGlzIGF0IGFsbC4K KyAqLwordm9pZAorYnVzZG1hX2xvY2tfbXV0ZXgodm9pZCAqYXJnLCBidXNfZG1hX2xvY2tfb3Bf dCBvcCkKK3sKKwlzdHJ1Y3QgbXR4ICpkbXR4OworCisJZG10eCA9IChzdHJ1Y3QgbXR4ICopYXJn OworCXN3aXRjaCAob3ApIHsKKwljYXNlIEJVU19ETUFfTE9DSzoKKwkJbXR4X2xvY2soZG10eCk7 CisJCWJyZWFrOworCWNhc2UgQlVTX0RNQV9VTkxPQ0s6CisJCW10eF91bmxvY2soZG10eCk7CisJ CWJyZWFrOworCWRlZmF1bHQ6CisJCXBhbmljKCJVbmtub3duIG9wZXJhdGlvbiAweCV4IGZvciBi dXNkbWFfbG9ja19tdXRleCEiLCBvcCk7CisJfQorfQorCisvKgorICogZGZsdF9sb2NrIHNob3Vs ZCBuZXZlciBnZXQgY2FsbGVkLiAgSXQgZ2V0cyBwdXQgaW50byB0aGUgZG1hIHRhZyB3aGVuCisg KiBsb2NrZnVuYyA9PSBOVUxMLCB3aGljaCBpcyBvbmx5IHZhbGlkIGlmIHRoZSBtYXBzIHRoYXQg YXJlIGFzc29jaWF0ZWQKKyAqIHdpdGggdGhlIHRhZyBhcmUgbWVhbnQgdG8gbmV2ZXIgYmUgZGVm ZXJlZC4KKyAqIFhYWCBTaG91bGQgaGF2ZSBhIHdheSB0byBpZGVudGlmeSB3aGljaCBkcml2ZXIg aXMgcmVzcG9uc2libGUgaGVyZS4KKyAqLwordm9pZAorYnVzX2RtYV9kZmx0X2xvY2sodm9pZCAq YXJnLCBidXNfZG1hX2xvY2tfb3BfdCBvcCkKK3sKKworCXBhbmljKCJkcml2ZXIgZXJyb3I6IGJ1 c2RtYSBkZmx0X2xvY2sgY2FsbGVkIik7Cit9CisKKy8qCisgKiBSZXR1cm4gdHJ1ZSBpZiBhIG1h dGNoIGlzIG1hZGUuCisgKgorICogVG8gZmluZCBhIG1hdGNoIHdhbGsgdGhlIGNoYWluIG9mIGJ1 c19kbWFfdGFnX3QncyBsb29raW5nIGZvciAncGFkZHInLgorICoKKyAqIElmIHBhZGRyIGlzIHdp dGhpbiB0aGUgYm91bmRzIG9mIHRoZSBkbWEgdGFnIHRoZW4gY2FsbCB0aGUgZmlsdGVyIGNhbGxi YWNrCisgKiB0byBjaGVjayBmb3IgYSBtYXRjaCwgaWYgdGhlcmUgaXMgbm8gZmlsdGVyIGNhbGxi YWNrIHRoZW4gYXNzdW1lIGEgbWF0Y2guCisgKi8KK2ludAorYnVzX2RtYV9ydW5fZmlsdGVyKHN0 cnVjdCBidXNfZG1hX3RhZ19jb21tb24gKnRjLCBidXNfYWRkcl90IHBhZGRyKQoreworCWludCBy ZXR2YWw7CisKKwlyZXR2YWwgPSAwOworCWRvIHsKKwkJaWYgKCgocGFkZHIgPiB0Yy0+bG93YWRk ciAmJiBwYWRkciA8PSB0Yy0+aGlnaGFkZHIpIHx8CisJCSAgICAoKHBhZGRyICYgKHRjLT5hbGln bm1lbnQgLSAxKSkgIT0gMCkpICYmCisJCSAgICAodGMtPmZpbHRlciA9PSBOVUxMIHx8CisJCSAg ICAoKnRjLT5maWx0ZXIpKHRjLT5maWx0ZXJhcmcsIHBhZGRyKSAhPSAwKSkKKwkJCXJldHZhbCA9 IDE7CisKKwkJdGMgPSB0Yy0+cGFyZW50OwkJCisJfSB3aGlsZSAocmV0dmFsID09IDAgJiYgdGMg IT0gTlVMTCk7CisJcmV0dXJuIChyZXR2YWwpOworfQorCitpbnQKK2NvbW1vbl9idXNfZG1hX3Rh Z19jcmVhdGUoc3RydWN0IGJ1c19kbWFfdGFnX2NvbW1vbiAqcGFyZW50LAorICAgIGJ1c19zaXpl X3QgYWxpZ25tZW50LCBidXNfYWRkcl90IGJvdW5kYXJ5LCBidXNfYWRkcl90IGxvd2FkZHIsCisg ICAgYnVzX2FkZHJfdCBoaWdoYWRkciwgYnVzX2RtYV9maWx0ZXJfdCAqZmlsdGVyLCB2b2lkICpm aWx0ZXJhcmcsCisgICAgYnVzX3NpemVfdCBtYXhzaXplLCBpbnQgbnNlZ21lbnRzLCBidXNfc2l6 ZV90IG1heHNlZ3N6LCBpbnQgZmxhZ3MsCisgICAgYnVzX2RtYV9sb2NrX3QgKmxvY2tmdW5jLCB2 b2lkICpsb2NrZnVuY2FyZywgc2l6ZV90IHN6LCB2b2lkICoqZG1hdCkKK3sKKwl2b2lkICpuZXd0 YWc7CisJc3RydWN0IGJ1c19kbWFfdGFnX2NvbW1vbiAqY29tbW9uOworCisJS0FTU0VSVChzeiA+ PSBzaXplb2Yoc3RydWN0IGJ1c19kbWFfdGFnX2NvbW1vbiksICgic3oiKSk7CisJLyogQmFzaWMg c2FuaXR5IGNoZWNraW5nICovCisJaWYgKGJvdW5kYXJ5ICE9IDAgJiYgYm91bmRhcnkgPCBtYXhz ZWdzeikKKwkJbWF4c2Vnc3ogPSBib3VuZGFyeTsKKwlpZiAobWF4c2Vnc3ogPT0gMCkKKwkJcmV0 dXJuIChFSU5WQUwpOworCS8qIFJldHVybiBhIE5VTEwgdGFnIG9uIGZhaWx1cmUgKi8KKwkqZG1h dCA9IE5VTEw7CisKKwluZXd0YWcgPSBtYWxsb2Moc3osIE1fREVWQlVGLCBNX1pFUk8gfCBNX05P V0FJVCk7CisJaWYgKG5ld3RhZyA9PSBOVUxMKSB7CisJCUNUUjQoS1RSX0JVU0RNQSwgIiVzIHJl dHVybmVkIHRhZyAlcCB0YWcgZmxhZ3MgMHgleCBlcnJvciAlZCIsCisJCSAgICBfX2Z1bmNfXywg bmV3dGFnLCAwLCBFTk9NRU0pOworCQlyZXR1cm4gKEVOT01FTSk7CisJfQorCisJY29tbW9uID0g bmV3dGFnOworCWNvbW1vbi0+aW1wbCA9ICZidXNfZG1hX2JvdW5jZV9pbXBsOworCWNvbW1vbi0+ cGFyZW50ID0gcGFyZW50OworCWNvbW1vbi0+YWxpZ25tZW50ID0gYWxpZ25tZW50OworCWNvbW1v bi0+Ym91bmRhcnkgPSBib3VuZGFyeTsKKwljb21tb24tPmxvd2FkZHIgPSB0cnVuY19wYWdlKCh2 bV9wYWRkcl90KWxvd2FkZHIpICsgKFBBR0VfU0laRSAtIDEpOworCWNvbW1vbi0+aGlnaGFkZHIg PSB0cnVuY19wYWdlKCh2bV9wYWRkcl90KWhpZ2hhZGRyKSArIChQQUdFX1NJWkUgLSAxKTsKKwlj b21tb24tPmZpbHRlciA9IGZpbHRlcjsKKwljb21tb24tPmZpbHRlcmFyZyA9IGZpbHRlcmFyZzsK Kwljb21tb24tPm1heHNpemUgPSBtYXhzaXplOworCWNvbW1vbi0+bnNlZ21lbnRzID0gbnNlZ21l bnRzOworCWNvbW1vbi0+bWF4c2Vnc3ogPSBtYXhzZWdzejsKKwljb21tb24tPmZsYWdzID0gZmxh Z3M7CisJY29tbW9uLT5yZWZfY291bnQgPSAxOyAvKiBDb3VudCBvdXJzZWxmICovCisJaWYgKGxv Y2tmdW5jICE9IE5VTEwpIHsKKwkJY29tbW9uLT5sb2NrZnVuYyA9IGxvY2tmdW5jOworCQljb21t b24tPmxvY2tmdW5jYXJnID0gbG9ja2Z1bmNhcmc7CisJfSBlbHNlIHsKKwkJY29tbW9uLT5sb2Nr ZnVuYyA9IGJ1c19kbWFfZGZsdF9sb2NrOworCQljb21tb24tPmxvY2tmdW5jYXJnID0gTlVMTDsK Kwl9CisKKwkvKiBUYWtlIGludG8gYWNjb3VudCBhbnkgcmVzdHJpY3Rpb25zIGltcG9zZWQgYnkg b3VyIHBhcmVudCB0YWcgKi8KKwlpZiAocGFyZW50ICE9IE5VTEwpIHsKKwkJY29tbW9uLT5pbXBs ID0gcGFyZW50LT5pbXBsOworCQljb21tb24tPmxvd2FkZHIgPSBNSU4ocGFyZW50LT5sb3dhZGRy LCBjb21tb24tPmxvd2FkZHIpOworCQljb21tb24tPmhpZ2hhZGRyID0gTUFYKHBhcmVudC0+aGln aGFkZHIsIGNvbW1vbi0+aGlnaGFkZHIpOworCQlpZiAoY29tbW9uLT5ib3VuZGFyeSA9PSAwKQor CQkJY29tbW9uLT5ib3VuZGFyeSA9IHBhcmVudC0+Ym91bmRhcnk7CisJCWVsc2UgaWYgKHBhcmVu dC0+Ym91bmRhcnkgIT0gMCkgeworCQkJY29tbW9uLT5ib3VuZGFyeSA9IE1JTihwYXJlbnQtPmJv dW5kYXJ5LAorCQkJICAgIGNvbW1vbi0+Ym91bmRhcnkpOworCQl9CisJCWlmIChjb21tb24tPmZp bHRlciA9PSBOVUxMKSB7CisJCQkvKgorCQkJICogU2hvcnQgY2lyY3VpdCBsb29raW5nIGF0IG91 ciBwYXJlbnQgZGlyZWN0bHkKKwkJCSAqIHNpbmNlIHdlIGhhdmUgZW5jYXBzdWxhdGVkIGFsbCBv ZiBpdHMgaW5mb3JtYXRpb24KKwkJCSAqLworCQkJY29tbW9uLT5maWx0ZXIgPSBwYXJlbnQtPmZp bHRlcjsKKwkJCWNvbW1vbi0+ZmlsdGVyYXJnID0gcGFyZW50LT5maWx0ZXJhcmc7CisJCQljb21t b24tPnBhcmVudCA9IHBhcmVudC0+cGFyZW50OworCQl9CisJCWF0b21pY19hZGRfaW50KCZwYXJl bnQtPnJlZl9jb3VudCwgMSk7CisJfQorCSpkbWF0ID0gY29tbW9uOworCXJldHVybiAoMCk7Cit9 CisKKy8qCisgKiBBbGxvY2F0ZSBhIGRldmljZSBzcGVjaWZpYyBkbWFfdGFnLgorICovCitpbnQK K2J1c19kbWFfdGFnX2NyZWF0ZShidXNfZG1hX3RhZ190IHBhcmVudCwgYnVzX3NpemVfdCBhbGln bm1lbnQsCisgICAgYnVzX2FkZHJfdCBib3VuZGFyeSwgYnVzX2FkZHJfdCBsb3dhZGRyLCBidXNf YWRkcl90IGhpZ2hhZGRyLAorICAgIGJ1c19kbWFfZmlsdGVyX3QgKmZpbHRlciwgdm9pZCAqZmls dGVyYXJnLCBidXNfc2l6ZV90IG1heHNpemUsCisgICAgaW50IG5zZWdtZW50cywgYnVzX3NpemVf dCBtYXhzZWdzeiwgaW50IGZsYWdzLCBidXNfZG1hX2xvY2tfdCAqbG9ja2Z1bmMsCisgICAgdm9p ZCAqbG9ja2Z1bmNhcmcsIGJ1c19kbWFfdGFnX3QgKmRtYXQpCit7CisJc3RydWN0IGJ1c19kbWFf dGFnX2NvbW1vbiAqdGM7CisJaW50IGVycm9yOworCisJaWYgKHBhcmVudCA9PSBOVUxMKSB7CisJ CWVycm9yID0gYnVzX2RtYV9ib3VuY2VfaW1wbC50YWdfY3JlYXRlKHBhcmVudCwgYWxpZ25tZW50 LAorCQkgICAgYm91bmRhcnksIGxvd2FkZHIsIGhpZ2hhZGRyLCBmaWx0ZXIsIGZpbHRlcmFyZywg bWF4c2l6ZSwKKwkJICAgIG5zZWdtZW50cywgbWF4c2Vnc3osIGZsYWdzLCBsb2NrZnVuYywgbG9j a2Z1bmNhcmcsIGRtYXQpOworCX0gZWxzZSB7CisJCXRjID0gKHN0cnVjdCBidXNfZG1hX3RhZ19j b21tb24gKilwYXJlbnQ7CisJCWVycm9yID0gdGMtPmltcGwtPnRhZ19jcmVhdGUocGFyZW50LCBh bGlnbm1lbnQsCisJCSAgICBib3VuZGFyeSwgbG93YWRkciwgaGlnaGFkZHIsIGZpbHRlciwgZmls dGVyYXJnLCBtYXhzaXplLAorCQkgICAgbnNlZ21lbnRzLCBtYXhzZWdzeiwgZmxhZ3MsIGxvY2tm dW5jLCBsb2NrZnVuY2FyZywgZG1hdCk7CisJfQorCXJldHVybiAoZXJyb3IpOworfQorCitpbnQK K2J1c19kbWFfdGFnX2Rlc3Ryb3koYnVzX2RtYV90YWdfdCBkbWF0KQoreworCXN0cnVjdCBidXNf ZG1hX3RhZ19jb21tb24gKnRjOworCisJdGMgPSAoc3RydWN0IGJ1c19kbWFfdGFnX2NvbW1vbiAq KWRtYXQ7CisJcmV0dXJuICh0Yy0+aW1wbC0+dGFnX2Rlc3Ryb3koZG1hdCkpOworfQorCisvKgor ICogQWxsb2NhdGUgYSBoYW5kbGUgZm9yIG1hcHBpbmcgZnJvbSBrdmEvdXZhL3BoeXNpY2FsCisg KiBhZGRyZXNzIHNwYWNlIGludG8gYnVzIGRldmljZSBzcGFjZS4KKyAqLworaW50CitidXNfZG1h bWFwX2NyZWF0ZShidXNfZG1hX3RhZ190IGRtYXQsIGludCBmbGFncywgYnVzX2RtYW1hcF90ICpt YXBwKQoreworCXN0cnVjdCBidXNfZG1hX3RhZ19jb21tb24gKnRjOworCisJdGMgPSAoc3RydWN0 IGJ1c19kbWFfdGFnX2NvbW1vbiAqKWRtYXQ7CisJcmV0dXJuICh0Yy0+aW1wbC0+bWFwX2NyZWF0 ZShkbWF0LCBmbGFncywgbWFwcCkpOworfQorCisvKgorICogRGVzdHJveSBhIGhhbmRsZSBmb3Ig bWFwcGluZyBmcm9tIGt2YS91dmEvcGh5c2ljYWwKKyAqIGFkZHJlc3Mgc3BhY2UgaW50byBidXMg ZGV2aWNlIHNwYWNlLgorICovCitpbnQKK2J1c19kbWFtYXBfZGVzdHJveShidXNfZG1hX3RhZ190 IGRtYXQsIGJ1c19kbWFtYXBfdCBtYXApCit7CisJc3RydWN0IGJ1c19kbWFfdGFnX2NvbW1vbiAq dGM7CisKKwl0YyA9IChzdHJ1Y3QgYnVzX2RtYV90YWdfY29tbW9uICopZG1hdDsKKwlyZXR1cm4g KHRjLT5pbXBsLT5tYXBfZGVzdHJveShkbWF0LCBtYXApKTsKK30KKworCisvKgorICogQWxsb2Nh dGUgYSBwaWVjZSBvZiBtZW1vcnkgdGhhdCBjYW4gYmUgZWZmaWNpZW50bHkgbWFwcGVkIGludG8K KyAqIGJ1cyBkZXZpY2Ugc3BhY2UgYmFzZWQgb24gdGhlIGNvbnN0cmFpbnRzIGxpdGVkIGluIHRo ZSBkbWEgdGFnLgorICogQSBkbWFtYXAgdG8gZm9yIHVzZSB3aXRoIGRtYW1hcF9sb2FkIGlzIGFs c28gYWxsb2NhdGVkLgorICovCitpbnQKK2J1c19kbWFtZW1fYWxsb2MoYnVzX2RtYV90YWdfdCBk bWF0LCB2b2lkKiogdmFkZHIsIGludCBmbGFncywKKyAgICBidXNfZG1hbWFwX3QgKm1hcHApCit7 CisJc3RydWN0IGJ1c19kbWFfdGFnX2NvbW1vbiAqdGM7CisKKwl0YyA9IChzdHJ1Y3QgYnVzX2Rt YV90YWdfY29tbW9uICopZG1hdDsKKwlyZXR1cm4gKHRjLT5pbXBsLT5tZW1fYWxsb2MoZG1hdCwg dmFkZHIsIGZsYWdzLCBtYXBwKSk7Cit9CisKKy8qCisgKiBGcmVlIGEgcGllY2Ugb2YgbWVtb3J5 IGFuZCBpdCdzIGFsbG9jaWF0ZWQgZG1hbWFwLCB0aGF0IHdhcyBhbGxvY2F0ZWQKKyAqIHZpYSBi dXNfZG1hbWVtX2FsbG9jLiAgTWFrZSB0aGUgc2FtZSBjaG9pY2UgZm9yIGZyZWUvY29udGlnZnJl ZS4KKyAqLwordm9pZAorYnVzX2RtYW1lbV9mcmVlKGJ1c19kbWFfdGFnX3QgZG1hdCwgdm9pZCAq dmFkZHIsIGJ1c19kbWFtYXBfdCBtYXApCit7CisJc3RydWN0IGJ1c19kbWFfdGFnX2NvbW1vbiAq dGM7CisKKwl0YyA9IChzdHJ1Y3QgYnVzX2RtYV90YWdfY29tbW9uICopZG1hdDsKKwl0Yy0+aW1w bC0+bWVtX2ZyZWUoZG1hdCwgdmFkZHIsIG1hcCk7Cit9CisKKy8qCisgKiBVdGlsaXR5IGZ1bmN0 aW9uIHRvIGxvYWQgYSBwaHlzaWNhbCBidWZmZXIuICBzZWdwIGNvbnRhaW5zCisgKiB0aGUgc3Rh cnRpbmcgc2VnbWVudCBvbiBlbnRyYWNlLCBhbmQgdGhlIGVuZGluZyBzZWdtZW50IG9uIGV4aXQu CisgKi8KK2ludAorX2J1c19kbWFtYXBfbG9hZF9waHlzKGJ1c19kbWFfdGFnX3QgZG1hdCwgYnVz X2RtYW1hcF90IG1hcCwgdm1fcGFkZHJfdCBidWYsCisgICAgYnVzX3NpemVfdCBidWZsZW4sIGlu dCBmbGFncywgYnVzX2RtYV9zZWdtZW50X3QgKnNlZ3MsIGludCAqc2VncCkKK3sKKwlzdHJ1Y3Qg YnVzX2RtYV90YWdfY29tbW9uICp0YzsKKworCXRjID0gKHN0cnVjdCBidXNfZG1hX3RhZ19jb21t b24gKilkbWF0OworCXJldHVybiAodGMtPmltcGwtPmxvYWRfcGh5cyhkbWF0LCBtYXAsIGJ1Ziwg YnVmbGVuLCBmbGFncywgc2VncywKKwkgICAgc2VncCkpOworfQorCitpbnQKK19idXNfZG1hbWFw X2xvYWRfbWEoYnVzX2RtYV90YWdfdCBkbWF0LCBidXNfZG1hbWFwX3QgbWFwLCBzdHJ1Y3Qgdm1f cGFnZSAqKm1hLAorICAgIGJ1c19zaXplX3QgdGxlbiwgaW50IG1hX29mZnMsIGludCBmbGFncywg YnVzX2RtYV9zZWdtZW50X3QgKnNlZ3MsCisgICAgaW50ICpzZWdwKQoreworCXN0cnVjdCBidXNf ZG1hX3RhZ19jb21tb24gKnRjOworCisJdGMgPSAoc3RydWN0IGJ1c19kbWFfdGFnX2NvbW1vbiAq KWRtYXQ7CisJcmV0dXJuICh0Yy0+aW1wbC0+bG9hZF9tYShkbWF0LCBtYXAsIG1hLCB0bGVuLCBt YV9vZmZzLCBmbGFncywKKwkgICAgc2Vncywgc2VncCkpOworfQorCisvKgorICogVXRpbGl0eSBm dW5jdGlvbiB0byBsb2FkIGEgbGluZWFyIGJ1ZmZlci4gIHNlZ3AgY29udGFpbnMKKyAqIHRoZSBz dGFydGluZyBzZWdtZW50IG9uIGVudHJhY2UsIGFuZCB0aGUgZW5kaW5nIHNlZ21lbnQgb24gZXhp dC4KKyAqLworaW50CitfYnVzX2RtYW1hcF9sb2FkX2J1ZmZlcihidXNfZG1hX3RhZ190IGRtYXQs IGJ1c19kbWFtYXBfdCBtYXAsIHZvaWQgKmJ1ZiwKKyAgICBidXNfc2l6ZV90IGJ1ZmxlbiwgcG1h cF90IHBtYXAsIGludCBmbGFncywgYnVzX2RtYV9zZWdtZW50X3QgKnNlZ3MsCisgICAgaW50ICpz ZWdwKQoreworCXN0cnVjdCBidXNfZG1hX3RhZ19jb21tb24gKnRjOworCisJdGMgPSAoc3RydWN0 IGJ1c19kbWFfdGFnX2NvbW1vbiAqKWRtYXQ7CisJcmV0dXJuICh0Yy0+aW1wbC0+bG9hZF9idWZm ZXIoZG1hdCwgbWFwLCBidWYsIGJ1ZmxlbiwgcG1hcCwgZmxhZ3MsIHNlZ3MsCisJICAgIHNlZ3Ap KTsKK30KKwordm9pZAorX19idXNfZG1hbWFwX3dhaXRvayhidXNfZG1hX3RhZ190IGRtYXQsIGJ1 c19kbWFtYXBfdCBtYXAsCisgICAgc3RydWN0IG1lbWRlc2MgKm1lbSwgYnVzX2RtYW1hcF9jYWxs YmFja190ICpjYWxsYmFjaywgdm9pZCAqY2FsbGJhY2tfYXJnKQoreworCXN0cnVjdCBidXNfZG1h X3RhZ19jb21tb24gKnRjOworCisJdGMgPSAoc3RydWN0IGJ1c19kbWFfdGFnX2NvbW1vbiAqKWRt YXQ7CisJdGMtPmltcGwtPm1hcF93YWl0b2soZG1hdCwgbWFwLCBtZW0sIGNhbGxiYWNrLCBjYWxs YmFja19hcmcpOworfQorCitidXNfZG1hX3NlZ21lbnRfdCAqCitfYnVzX2RtYW1hcF9jb21wbGV0 ZShidXNfZG1hX3RhZ190IGRtYXQsIGJ1c19kbWFtYXBfdCBtYXAsCisgICAgYnVzX2RtYV9zZWdt ZW50X3QgKnNlZ3MsIGludCBuc2VncywgaW50IGVycm9yKQoreworCXN0cnVjdCBidXNfZG1hX3Rh Z19jb21tb24gKnRjOworCisJdGMgPSAoc3RydWN0IGJ1c19kbWFfdGFnX2NvbW1vbiAqKWRtYXQ7 CisJcmV0dXJuICh0Yy0+aW1wbC0+bWFwX2NvbXBsZXRlKGRtYXQsIG1hcCwgc2VncywgbnNlZ3Ms IGVycm9yKSk7Cit9CisKKy8qCisgKiBSZWxlYXNlIHRoZSBtYXBwaW5nIGhlbGQgYnkgbWFwLgor ICovCit2b2lkCitfYnVzX2RtYW1hcF91bmxvYWQoYnVzX2RtYV90YWdfdCBkbWF0LCBidXNfZG1h bWFwX3QgbWFwKQoreworCXN0cnVjdCBidXNfZG1hX3RhZ19jb21tb24gKnRjOworCisJdGMgPSAo c3RydWN0IGJ1c19kbWFfdGFnX2NvbW1vbiAqKWRtYXQ7CisJdGMtPmltcGwtPm1hcF91bmxvYWQo ZG1hdCwgbWFwKTsKK30KKwordm9pZAorX2J1c19kbWFtYXBfc3luYyhidXNfZG1hX3RhZ190IGRt YXQsIGJ1c19kbWFtYXBfdCBtYXAsIGJ1c19kbWFzeW5jX29wX3Qgb3ApCit7CisJc3RydWN0IGJ1 c19kbWFfdGFnX2NvbW1vbiAqdGM7CisKKwl0YyA9IChzdHJ1Y3QgYnVzX2RtYV90YWdfY29tbW9u ICopZG1hdDsKKwl0Yy0+aW1wbC0+bWFwX3N5bmMoZG1hdCwgbWFwLCBvcCk7Cit9CmRpZmYgLS1n aXQgYS9zeXMvYXJtL2luY2x1ZGUvYnVzZG1hX2ltcGwuaCBiL3N5cy9hcm0vaW5jbHVkZS9idXNk bWFfaW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiODljMjEKLS0t IC9kZXYvbnVsbAorKysgYi9zeXMvYXJtL2luY2x1ZGUvYnVzZG1hX2ltcGwuaApAQCAtMCwwICsx LDk2IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAxMyBUaGUgRnJlZUJTRCBGb3VuZGF0aW9u CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgd2FzIGRldmVs b3BlZCBieSBLb25zdGFudGluIEJlbG91c292IDxraWJARnJlZUJTRC5vcmc+CisgKiB1bmRlciBz cG9uc29yc2hpcCBmcm9tIHRoZSBGcmVlQlNEIEZvdW5kYXRpb24uCisgKgorICogUmVkaXN0cmli dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0 CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93 aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291 cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92 ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMg YGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICog QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVU T1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElO RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisg KiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT IElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRP UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ CisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg VEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRCQKKyAq LworCisjaWZuZGVmCV9fQVJNX0JVU0RNQV9JTVBMX0gKKyNkZWZpbmUJX19BUk1fQlVTRE1BX0lN UExfSAorCitzdHJ1Y3QgYnVzX2RtYV90YWdfY29tbW9uIHsKKwlzdHJ1Y3QgYnVzX2RtYV9pbXBs ICppbXBsOworCXN0cnVjdCBidXNfZG1hX3RhZ19jb21tb24gKnBhcmVudDsKKwlidXNfc2l6ZV90 CSAgYWxpZ25tZW50OworCWJ1c19hZGRyX3QJICBib3VuZGFyeTsKKwlidXNfYWRkcl90CSAgbG93 YWRkcjsKKwlidXNfYWRkcl90CSAgaGlnaGFkZHI7CisJYnVzX2RtYV9maWx0ZXJfdCAqZmlsdGVy OworCXZvaWQJCSAqZmlsdGVyYXJnOworCWJ1c19zaXplX3QJICBtYXhzaXplOworCXVfaW50CQkg IG5zZWdtZW50czsKKwlidXNfc2l6ZV90CSAgbWF4c2Vnc3o7CisJaW50CQkgIGZsYWdzOworCWJ1 c19kbWFfbG9ja190CSAqbG9ja2Z1bmM7CisJdm9pZAkJICpsb2NrZnVuY2FyZzsKKwlpbnQJCSAg cmVmX2NvdW50OworfTsKKworc3RydWN0IGJ1c19kbWFfaW1wbCB7CisJaW50ICgqdGFnX2NyZWF0 ZSkoYnVzX2RtYV90YWdfdCBwYXJlbnQsCisJICAgIGJ1c19zaXplX3QgYWxpZ25tZW50LCBidXNf YWRkcl90IGJvdW5kYXJ5LCBidXNfYWRkcl90IGxvd2FkZHIsCisJICAgIGJ1c19hZGRyX3QgaGln aGFkZHIsIGJ1c19kbWFfZmlsdGVyX3QgKmZpbHRlciwKKwkgICAgdm9pZCAqZmlsdGVyYXJnLCBi dXNfc2l6ZV90IG1heHNpemUsIGludCBuc2VnbWVudHMsCisJICAgIGJ1c19zaXplX3QgbWF4c2Vn c3osIGludCBmbGFncywgYnVzX2RtYV9sb2NrX3QgKmxvY2tmdW5jLAorCSAgICB2b2lkICpsb2Nr ZnVuY2FyZywgYnVzX2RtYV90YWdfdCAqZG1hdCk7CisJaW50ICgqdGFnX2Rlc3Ryb3kpKGJ1c19k bWFfdGFnX3QgZG1hdCk7CisJaW50ICgqbWFwX2NyZWF0ZSkoYnVzX2RtYV90YWdfdCBkbWF0LCBp bnQgZmxhZ3MsIGJ1c19kbWFtYXBfdCAqbWFwcCk7CisJaW50ICgqbWFwX2Rlc3Ryb3kpKGJ1c19k bWFfdGFnX3QgZG1hdCwgYnVzX2RtYW1hcF90IG1hcCk7CisJaW50ICgqbWVtX2FsbG9jKShidXNf ZG1hX3RhZ190IGRtYXQsIHZvaWQqKiB2YWRkciwgaW50IGZsYWdzLAorCSAgICBidXNfZG1hbWFw X3QgKm1hcHApOworCXZvaWQgKCptZW1fZnJlZSkoYnVzX2RtYV90YWdfdCBkbWF0LCB2b2lkICp2 YWRkciwgYnVzX2RtYW1hcF90IG1hcCk7CisJaW50ICgqbG9hZF9tYSkoYnVzX2RtYV90YWdfdCBk bWF0LCBidXNfZG1hbWFwX3QgbWFwLAorCSAgICBzdHJ1Y3Qgdm1fcGFnZSAqKm1hLCBidXNfc2l6 ZV90IHRsZW4sIGludCBtYV9vZmZzLCBpbnQgZmxhZ3MsCisJICAgIGJ1c19kbWFfc2VnbWVudF90 ICpzZWdzLCBpbnQgKnNlZ3ApOworCWludCAoKmxvYWRfcGh5cykoYnVzX2RtYV90YWdfdCBkbWF0 LCBidXNfZG1hbWFwX3QgbWFwLAorCSAgICB2bV9wYWRkcl90IGJ1ZiwgYnVzX3NpemVfdCBidWZs ZW4sIGludCBmbGFncywKKwkgICAgYnVzX2RtYV9zZWdtZW50X3QgKnNlZ3MsIGludCAqc2VncCk7 CisJaW50ICgqbG9hZF9idWZmZXIpKGJ1c19kbWFfdGFnX3QgZG1hdCwgYnVzX2RtYW1hcF90IG1h cCwKKwkgICAgdm9pZCAqYnVmLCBidXNfc2l6ZV90IGJ1ZmxlbiwgcG1hcF90IHBtYXAsIGludCBm bGFncywKKwkgICAgYnVzX2RtYV9zZWdtZW50X3QgKnNlZ3MsIGludCAqc2VncCk7CisJdm9pZCAo Km1hcF93YWl0b2spKGJ1c19kbWFfdGFnX3QgZG1hdCwgYnVzX2RtYW1hcF90IG1hcCwKKwkgICAg c3RydWN0IG1lbWRlc2MgKm1lbSwgYnVzX2RtYW1hcF9jYWxsYmFja190ICpjYWxsYmFjaywKKwkg ICAgdm9pZCAqY2FsbGJhY2tfYXJnKTsKKwlidXNfZG1hX3NlZ21lbnRfdCAqKCptYXBfY29tcGxl dGUpKGJ1c19kbWFfdGFnX3QgZG1hdCwgYnVzX2RtYW1hcF90IG1hcCwKKwkgICAgYnVzX2RtYV9z ZWdtZW50X3QgKnNlZ3MsIGludCBuc2VncywgaW50IGVycm9yKTsKKwl2b2lkICgqbWFwX3VubG9h ZCkoYnVzX2RtYV90YWdfdCBkbWF0LCBidXNfZG1hbWFwX3QgbWFwKTsKKwl2b2lkICgqbWFwX3N5 bmMpKGJ1c19kbWFfdGFnX3QgZG1hdCwgYnVzX2RtYW1hcF90IG1hcCwKKwkgICAgYnVzX2RtYXN5 bmNfb3BfdCBvcCk7Cit9OworCit2b2lkIGJ1c19kbWFfZGZsdF9sb2NrKHZvaWQgKmFyZywgYnVz X2RtYV9sb2NrX29wX3Qgb3ApOworaW50IGJ1c19kbWFfcnVuX2ZpbHRlcihzdHJ1Y3QgYnVzX2Rt YV90YWdfY29tbW9uICpkbWF0LCBidXNfYWRkcl90IHBhZGRyKTsKK2ludCBjb21tb25fYnVzX2Rt YV90YWdfY3JlYXRlKHN0cnVjdCBidXNfZG1hX3RhZ19jb21tb24gKnBhcmVudCwKKyAgICBidXNf c2l6ZV90IGFsaWdubWVudCwKKyAgICBidXNfYWRkcl90IGJvdW5kYXJ5LCBidXNfYWRkcl90IGxv d2FkZHIsIGJ1c19hZGRyX3QgaGlnaGFkZHIsCisgICAgYnVzX2RtYV9maWx0ZXJfdCAqZmlsdGVy LCB2b2lkICpmaWx0ZXJhcmcsIGJ1c19zaXplX3QgbWF4c2l6ZSwKKyAgICBpbnQgbnNlZ21lbnRz LCBidXNfc2l6ZV90IG1heHNlZ3N6LCBpbnQgZmxhZ3MsIGJ1c19kbWFfbG9ja190ICpsb2NrZnVu YywKKyAgICB2b2lkICpsb2NrZnVuY2FyZywgc2l6ZV90IHN6LCB2b2lkICoqZG1hdCk7CisKK2V4 dGVybiBzdHJ1Y3QgYnVzX2RtYV9pbXBsIGJ1c19kbWFfYm91bmNlX2ltcGw7CisKKyNlbmRpZgpk aWZmIC0tZ2l0IGEvc3lzL2NvbmYvZmlsZXMuYXJtIGIvc3lzL2NvbmYvZmlsZXMuYXJtCmluZGV4 IGYwM2QyYTEuLjVhYTMyN2YgMTAwNjQ0Ci0tLSBhL3N5cy9jb25mL2ZpbGVzLmFybQorKysgYi9z eXMvY29uZi9maWxlcy5hcm0KQEAgLTI1LDggKzI1LDEwIEBAIGFybS9hcm0vYmxvY2tpby5TCQlz dGFuZGFyZAogYXJtL2FybS9idXNfc3BhY2VfYXNtX2dlbmVyaWMuUwlzdGFuZGFyZAogYXJtL2Fy bS9idXNfc3BhY2VfYmFzZS5jCW9wdGlvbmFsCWZkdAogYXJtL2FybS9idXNfc3BhY2VfZ2VuZXJp Yy5jCXN0YW5kYXJkCi1hcm0vYXJtL2J1c2RtYV9tYWNoZGVwLXY0LmMgCW9wdGlvbmFsCSFhcm12 NgotYXJtL2FybS9idXNkbWFfbWFjaGRlcC12Ni5jIAlvcHRpb25hbAlhcm12NgorYXJtL2FybS9i dXNkbWFfbWFjaGRlcC12NC5jCQlvcHRpb25hbAkhYXJtdjYKK2FybS9hcm0vYnVzZG1hX21hY2hk ZXAtdjYuYwkJb3B0aW9uYWwJYXJtdjYgIWFybV9kbWFfY29oZXJlbnQKK2FybS9hcm0vYnVzZG1h X21hY2hkZXAtY29oZXJlbnQuYyAJb3B0aW9uYWwJYXJtdjYgYXJtX2RtYV9jb2hlcmVudAorYXJt L2FybS9idXNkbWFfYm91bmNlLmMgCQlvcHRpb25hbAlhcm12NiBhcm1fZG1hX2NvaGVyZW50CiBh cm0vYXJtL2NvcHlzdHIuUwkJc3RhbmRhcmQKIGFybS9hcm0vY3B1ZnVuYy5jCQlzdGFuZGFyZAog YXJtL2FybS9jcHVmdW5jX2FzbS5TCQlzdGFuZGFyZApkaWZmIC0tZ2l0IGEvc3lzL2NvbmYvb3B0 aW9ucy5hcm0gYi9zeXMvY29uZi9vcHRpb25zLmFybQppbmRleCAyZDhmNDc0Li41MDEyYjE5IDEw MDY0NAotLS0gYS9zeXMvY29uZi9vcHRpb25zLmFybQorKysgYi9zeXMvY29uZi9vcHRpb25zLmFy bQpAQCAtMSw2ICsxLDcgQEAKICMkRnJlZUJTRCQKIEFSTVY2CQkJb3B0X2dsb2JhbC5oCiBBUk1f Q0FDSEVfTE9DS19FTkFCTEUJb3B0X2dsb2JhbC5oCitBUk1fRE1BX0NPSEVSRU5UCW9wdF9nbG9i YWwuaAogQVJNX0tFUk5fRElSRUNUTUFQCW9wdF92bS5oCiBBUk1fTDJfUElQVAkJb3B0X2dsb2Jh bC5oCiBBUk1fTDJfUFJFRkVUQ0gJCW9wdF9nbG9iYWwuaAotLSAKMi40LjYKCg== --001a113ec89c0de2a2054c074ca8--