From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6B160C2D0E4 for ; Fri, 27 Nov 2020 12:08:18 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 2F95D21D81 for ; Fri, 27 Nov 2020 12:08:18 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 2F95D21D81 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 021CF6EBB7; Fri, 27 Nov 2020 12:07:59 +0000 (UTC) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTPS id E5BC96EB9F; Fri, 27 Nov 2020 12:07:50 +0000 (UTC) IronPort-SDR: h6NMKOny4jmHDX4uS0gVX0kkyR0HtG4Yz/DZbP79IfOR0xxc+b2tiLZAmEB8gWbQRksDLPUoKX BK/RHoAvk1ww== X-IronPort-AV: E=McAfee;i="6000,8403,9817"; a="168883359" X-IronPort-AV: E=Sophos;i="5.78,374,1599548400"; d="scan'208";a="168883359" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Nov 2020 04:07:40 -0800 IronPort-SDR: 0jRt7oPLZhnhhWHCGYZMVHctGaOWAZFIug3/prfSeM7gqKAyiMAxXwZ1bgmXAxAcE8PpouF4VA kHtoTZGPcOpg== X-IronPort-AV: E=Sophos;i="5.78,374,1599548400"; d="scan'208";a="548028537" Received: from mjgleeso-mobl.ger.corp.intel.com (HELO mwauld-desk1.ger.corp.intel.com) ([10.251.85.2]) by orsmga005-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Nov 2020 04:07:38 -0800 From: Matthew Auld To: intel-gfx@lists.freedesktop.org Subject: [RFC PATCH 007/162] drm/i915: split wa_bb code to its own file Date: Fri, 27 Nov 2020 12:04:43 +0000 Message-Id: <20201127120718.454037-8-matthew.auld@intel.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20201127120718.454037-1-matthew.auld@intel.com> References: <20201127120718.454037-1-matthew.auld@intel.com> MIME-Version: 1.0 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Tvrtko Ursulin , Chris P Wilson , Daniele Ceraolo Spurio , dri-devel@lists.freedesktop.org, John Harrison Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" RnJvbTogRGFuaWVsZSBDZXJhb2xvIFNwdXJpbyA8ZGFuaWVsZS5jZXJhb2xvc3B1cmlvQGludGVs LmNvbT4KCkNvbnRpbnVpbmcgdGhlIHNwbGl0IG9mIGJhY2stZW5kIGluZGVwZW5kZW50IGNvZGUg ZnJvbSB0aGUgZXhlY2xpc3QKc3VibWlzc2lvbiBzcGVjaWZpYyBmaWxlLgoKQmFzZWQgb24gYSBw YXRjaCBieSBDaHJpcyBXaWxzb24uCgpTaWduZWQtb2ZmLWJ5OiBEYW5pZWxlIENlcmFvbG8gU3B1 cmlvIDxkYW5pZWxlLmNlcmFvbG9zcHVyaW9AaW50ZWwuY29tPgpDYzogQ2hyaXMgUCBXaWxzb24g PGNocmlzLnAud2lsc29uQGludGVsLmNvbT4KQ2M6IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJz dWxpbkBsaW51eC5pbnRlbC5jb20+ClJldmlld2VkLWJ5OiBKb2huIEhhcnJpc29uIDxKb2huLkMu SGFycmlzb25ASW50ZWwuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlICAg ICAgICAgICAgICAgICB8ICAgMSArCiAuLi4vZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5lX3dvcmth cm91bmRfYmIuYyAgfCAzMzUgKysrKysrKysrKysrKysrKysrCiAuLi4vZHJtL2k5MTUvZ3QvaW50 ZWxfZW5naW5lX3dvcmthcm91bmRfYmIuaCAgfCAgMTQgKwogLi4uL2RybS9pOTE1L2d0L2ludGVs X2V4ZWNsaXN0c19zdWJtaXNzaW9uLmMgIHwgMzI3ICstLS0tLS0tLS0tLS0tLS0tCiA0IGZpbGVz IGNoYW5nZWQsIDM1MiBpbnNlcnRpb25zKCspLCAzMjUgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5lX3dvcmthcm91bmRf YmIuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2Vu Z2luZV93b3JrYXJvdW5kX2JiLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9N YWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCmluZGV4IGY5ZWY1MTk5YjEy NC4uMjQ0NWNjOTkwZTE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmls ZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQpAQCAtOTIsNiArOTIsNyBAQCBn dC15ICs9IFwKIAlndC9pbnRlbF9lbmdpbmVfaGVhcnRiZWF0Lm8gXAogCWd0L2ludGVsX2VuZ2lu ZV9wbS5vIFwKIAlndC9pbnRlbF9lbmdpbmVfdXNlci5vIFwKKwlndC9pbnRlbF9lbmdpbmVfd29y a2Fyb3VuZF9iYi5vIFwKIAlndC9pbnRlbF9leGVjbGlzdHNfc3VibWlzc2lvbi5vIFwKIAlndC9p bnRlbF9nZ3R0Lm8gXAogCWd0L2ludGVsX2dndHRfZmVuY2luZy5vIFwKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2VuZ2luZV93b3JrYXJvdW5kX2JiLmMgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9lbmdpbmVfd29ya2Fyb3VuZF9iYi5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYjAzYmRmYzkyYmIyCi0tLSAvZGV2L251 bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5lX3dvcmthcm91bmRf YmIuYwpAQCAtMCwwICsxLDMzNSBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVAor LyoKKyAqIENvcHlyaWdodCDCqSAyMDE0IEludGVsIENvcnBvcmF0aW9uCisgKi8KKworI2luY2x1 ZGUgImk5MTVfZHJ2LmgiCisjaW5jbHVkZSAiaW50ZWxfZW5naW5lX3R5cGVzLmgiCisjaW5jbHVk ZSAiaW50ZWxfZW5naW5lX3dvcmthcm91bmRfYmIuaCIKKyNpbmNsdWRlICJpbnRlbF9leGVjbGlz dHNfc3VibWlzc2lvbi5oIiAvKiBYWFggKi8KKyNpbmNsdWRlICJpbnRlbF9ncHVfY29tbWFuZHMu aCIKKyNpbmNsdWRlICJpbnRlbF9ndC5oIgorCisvKgorICogSW4gdGhpcyBXQSB3ZSBuZWVkIHRv IHNldCBHRU44X0wzU1FDUkVHNFsyMToyMV0gYW5kIHJlc2V0IGl0IGFmdGVyCisgKiBQSVBFX0NP TlRST0wgaW5zdHJ1Y3Rpb24uIFRoaXMgaXMgcmVxdWlyZWQgZm9yIHRoZSBmbHVzaCB0byBoYXBw ZW4gY29ycmVjdGx5CisgKiBidXQgdGhlcmUgaXMgYSBzbGlnaHQgY29tcGxpY2F0aW9uIGFzIHRo aXMgaXMgYXBwbGllZCBpbiBXQSBiYXRjaCB3aGVyZSB0aGUKKyAqIHZhbHVlcyBhcmUgb25seSBp bml0aWFsaXplZCBvbmNlIHNvIHdlIGNhbm5vdCB0YWtlIHJlZ2lzdGVyIHZhbHVlIGF0IHRoZQor ICogYmVnaW5uaW5nIGFuZCByZXVzZSBpdCBmdXJ0aGVyOyBoZW5jZSB3ZSBzYXZlIGl0cyB2YWx1 ZSB0byBtZW1vcnksIHVwbG9hZCBhCisgKiBjb25zdGFudCB2YWx1ZSB3aXRoIGJpdDIxIHNldCBh bmQgdGhlbiB3ZSByZXN0b3JlIGl0IGJhY2sgd2l0aCB0aGUgc2F2ZWQgdmFsdWUuCisgKiBUbyBz aW1wbGlmeSB0aGUgV0EsIGEgY29uc3RhbnQgdmFsdWUgaXMgZm9ybWVkIGJ5IHVzaW5nIHRoZSBk ZWZhdWx0IHZhbHVlCisgKiBvZiB0aGlzIHJlZ2lzdGVyLiBUaGlzIHNob3VsZG4ndCBiZSBhIHBy b2JsZW0gYmVjYXVzZSB3ZSBhcmUgb25seSBtb2RpZnlpbmcKKyAqIGl0IGZvciBhIHNob3J0IHBl cmlvZCBhbmQgdGhpcyBiYXRjaCBpbiBub24tcHJlbXB0aWJsZS4gV2UgY2FuIG9mY291cnNlCisg KiB1c2UgYWRkaXRpb25hbCBpbnN0cnVjdGlvbnMgdGhhdCByZWFkIHRoZSBhY3R1YWwgdmFsdWUg b2YgdGhlIHJlZ2lzdGVyCisgKiBhdCB0aGF0IHRpbWUgYW5kIHNldCBvdXIgYml0IG9mIGludGVy ZXN0IGJ1dCBpdCBtYWtlcyB0aGUgV0EgY29tcGxpY2F0ZWQuCisgKgorICogVGhpcyBXQSBpcyBh bHNvIHJlcXVpcmVkIGZvciBHZW45IHNvIGV4dHJhY3RpbmcgYXMgYSBmdW5jdGlvbiBhdm9pZHMK KyAqIGNvZGUgZHVwbGljYXRpb24uCisgKi8KK3N0YXRpYyB1MzIgKgorZ2VuOF9lbWl0X2ZsdXNo X2NvaGVyZW50bDNfd2Eoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCB1MzIgKmJhdGNo KQoreworCS8qIE5CIG5vIG9uZSBlbHNlIGlzIGFsbG93ZWQgdG8gc2NyaWJibGUgb3ZlciBzY3Jh dGNoICsgMjU2ISAqLworCSpiYXRjaCsrID0gTUlfU1RPUkVfUkVHSVNURVJfTUVNX0dFTjggfCBN SV9TUk1fTFJNX0dMT0JBTF9HVFQ7CisJKmJhdGNoKysgPSBpOTE1X21taW9fcmVnX29mZnNldChH RU44X0wzU1FDUkVHNCk7CisJKmJhdGNoKysgPSBpbnRlbF9ndF9zY3JhdGNoX29mZnNldChlbmdp bmUtPmd0LAorCQkJCQkgICBJTlRFTF9HVF9TQ1JBVENIX0ZJRUxEX0NPSEVSRU5UTDNfV0EpOwor CSpiYXRjaCsrID0gMDsKKworCSpiYXRjaCsrID0gTUlfTE9BRF9SRUdJU1RFUl9JTU0oMSk7CisJ KmJhdGNoKysgPSBpOTE1X21taW9fcmVnX29mZnNldChHRU44X0wzU1FDUkVHNCk7CisJKmJhdGNo KysgPSAweDQwNDAwMDAwIHwgR0VOOF9MUVNDX0ZMVVNIX0NPSEVSRU5UX0xJTkVTOworCisJYmF0 Y2ggPSBnZW44X2VtaXRfcGlwZV9jb250cm9sKGJhdGNoLAorCQkJCSAgICAgICBQSVBFX0NPTlRS T0xfQ1NfU1RBTEwgfAorCQkJCSAgICAgICBQSVBFX0NPTlRST0xfRENfRkxVU0hfRU5BQkxFLAor CQkJCSAgICAgICAwKTsKKworCSpiYXRjaCsrID0gTUlfTE9BRF9SRUdJU1RFUl9NRU1fR0VOOCB8 IE1JX1NSTV9MUk1fR0xPQkFMX0dUVDsKKwkqYmF0Y2grKyA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0 KEdFTjhfTDNTUUNSRUc0KTsKKwkqYmF0Y2grKyA9IGludGVsX2d0X3NjcmF0Y2hfb2Zmc2V0KGVu Z2luZS0+Z3QsCisJCQkJCSAgIElOVEVMX0dUX1NDUkFUQ0hfRklFTERfQ09IRVJFTlRMM19XQSk7 CisJKmJhdGNoKysgPSAwOworCisJcmV0dXJuIGJhdGNoOworfQorCisvKgorICogVHlwaWNhbGx5 IHdlIG9ubHkgaGF2ZSBvbmUgaW5kaXJlY3RfY3R4IGFuZCBwZXJfY3R4IGJhdGNoIGJ1ZmZlciB3 aGljaCBhcmUKKyAqIGluaXRpYWxpemVkIGF0IHRoZSBiZWdpbm5pbmcgYW5kIHNoYXJlZCBhY3Jv c3MgYWxsIGNvbnRleHRzIGJ1dCB0aGlzIGZpZWxkCisgKiBoZWxwcyB1cyB0byBoYXZlIG11bHRp cGxlIGJhdGNoZXMgYXQgZGlmZmVyZW50IG9mZnNldHMgYW5kIHNlbGVjdCB0aGVtIGJhc2VkCisg KiBvbiBhIGNyaXRlcmlhLiBBdCB0aGUgbW9tZW50IHRoaXMgYmF0Y2ggYWx3YXlzIHN0YXJ0IGF0 IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBhZ2UKKyAqIGFuZCBhdCB0aGlzIHBvaW50IHdlIGRvbid0 IGhhdmUgbXVsdGlwbGUgd2FfY3R4IGJhdGNoIGJ1ZmZlcnMuCisgKgorICogVGhlIG51bWJlciBv ZiBXQSBhcHBsaWVkIGFyZSBub3Qga25vd24gYXQgdGhlIGJlZ2lubmluZzsgd2UgdXNlIHRoaXMg ZmllbGQKKyAqIHRvIHJldHVybiB0aGUgbm8gb2YgRFdPUkRTIHdyaXR0ZW4uCisgKgorICogSXQg aXMgdG8gYmUgbm90ZWQgdGhhdCB0aGlzIGJhdGNoIGRvZXMgbm90IGNvbnRhaW4gTUlfQkFUQ0hf QlVGRkVSX0VORAorICogc28gaXQgYWRkcyBOT09QcyBhcyBwYWRkaW5nIHRvIG1ha2UgaXQgY2Fj aGVsaW5lIGFsaWduZWQuCisgKiBNSV9CQVRDSF9CVUZGRVJfRU5EIHdpbGwgYmUgYWRkZWQgdG8g cGVyY3R4IGJhdGNoIGFuZCBib3RoIG9mIHRoZW0gdG9nZXRoZXIKKyAqIG1ha2VzIGEgY29tcGxl dGUgYmF0Y2ggYnVmZmVyLgorICovCitzdGF0aWMgdTMyICpnZW44X2luaXRfaW5kaXJlY3RjdHhf YmIoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCB1MzIgKmJhdGNoKQoreworCS8qIFdh RGlzYWJsZUN0eFJlc3RvcmVBcmJpdHJhdGlvbjpiZHcsY2h2ICovCisJKmJhdGNoKysgPSBNSV9B UkJfT05fT0ZGIHwgTUlfQVJCX0RJU0FCTEU7CisKKwkvKiBXYUZsdXNoQ29oZXJlbnRMM0NhY2hl TGluZXNBdENvbnRleHRTd2l0Y2g6YmR3ICovCisJaWYgKElTX0JST0FEV0VMTChlbmdpbmUtPmk5 MTUpKQorCQliYXRjaCA9IGdlbjhfZW1pdF9mbHVzaF9jb2hlcmVudGwzX3dhKGVuZ2luZSwgYmF0 Y2gpOworCisJLyogV2FDbGVhclNsbVNwYWNlQXRDb250ZXh0U3dpdGNoOmJkdyxjaHYgKi8KKwkv KiBBY3R1YWwgc2NyYXRjaCBsb2NhdGlvbiBpcyBhdCAxMjggYnl0ZXMgb2Zmc2V0ICovCisJYmF0 Y2ggPSBnZW44X2VtaXRfcGlwZV9jb250cm9sKGJhdGNoLAorCQkJCSAgICAgICBQSVBFX0NPTlRS T0xfRkxVU0hfTDMgfAorCQkJCSAgICAgICBQSVBFX0NPTlRST0xfU1RPUkVfREFUQV9JTkRFWCB8 CisJCQkJICAgICAgIFBJUEVfQ09OVFJPTF9DU19TVEFMTCB8CisJCQkJICAgICAgIFBJUEVfQ09O VFJPTF9RV19XUklURSwKKwkJCQkgICAgICAgTFJDX1BQSFdTUF9TQ1JBVENIX0FERFIpOworCisJ KmJhdGNoKysgPSBNSV9BUkJfT05fT0ZGIHwgTUlfQVJCX0VOQUJMRTsKKworCS8qIFBhZCB0byBl bmQgb2YgY2FjaGVsaW5lICovCisJd2hpbGUgKCh1bnNpZ25lZCBsb25nKWJhdGNoICUgQ0FDSEVM SU5FX0JZVEVTKQorCQkqYmF0Y2grKyA9IE1JX05PT1A7CisKKwkvKgorCSAqIE1JX0JBVENIX0JV RkZFUl9FTkQgaXMgbm90IHJlcXVpcmVkIGluIEluZGlyZWN0IGN0eCBCQiBiZWNhdXNlCisJICog ZXhlY3V0aW9uIGRlcGVuZHMgb24gdGhlIGxlbmd0aCBzcGVjaWZpZWQgaW4gdGVybXMgb2YgY2Fj aGUgbGluZXMKKwkgKiBpbiB0aGUgcmVnaXN0ZXIgQ1RYX1JDU19JTkRJUkVDVF9DVFgKKwkgKi8K KworCXJldHVybiBiYXRjaDsKK30KKworc3RydWN0IGxyaSB7CisJaTkxNV9yZWdfdCByZWc7CisJ dTMyIHZhbHVlOworfTsKKworc3RhdGljIHUzMiAqZW1pdF9scmkodTMyICpiYXRjaCwgY29uc3Qg c3RydWN0IGxyaSAqbHJpLCB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJR0VNX0JVR19PTighY291 bnQgfHwgY291bnQgPiA2Myk7CisKKwkqYmF0Y2grKyA9IE1JX0xPQURfUkVHSVNURVJfSU1NKGNv dW50KTsKKwlkbyB7CisJCSpiYXRjaCsrID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQobHJpLT5yZWcp OworCQkqYmF0Y2grKyA9IGxyaS0+dmFsdWU7CisJfSB3aGlsZSAobHJpKyssIC0tY291bnQpOwor CSpiYXRjaCsrID0gTUlfTk9PUDsKKworCXJldHVybiBiYXRjaDsKK30KKworc3RhdGljIHUzMiAq Z2VuOV9pbml0X2luZGlyZWN0Y3R4X2JiKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwg dTMyICpiYXRjaCkKK3sKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGxyaSBscmlbXSA9IHsKKwkJLyog V2FEaXNhYmxlR2F0aGVyQXRTZXRTaGFkZXJDb21tb25TbGljZTpza2wsYnh0LGtibCxnbGsgKi8K KwkJeworCQkJQ09NTU9OX1NMSUNFX0NISUNLRU4yLAorCQkJX19NQVNLRURfRklFTEQoR0VOOV9E SVNBQkxFX0dBVEhFUl9BVF9TRVRfU0hBREVSX0NPTU1PTl9TTElDRSwKKwkJCQkgICAgICAgMCks CisJCX0sCisKKwkJLyogQlNwZWM6IDExMzkxICovCisJCXsKKwkJCUZGX1NMSUNFX0NISUNLRU4s CisJCQlfX01BU0tFRF9GSUVMRChGRl9TTElDRV9DSElDS0VOX0NMX1BST1ZPS0lOR19WRVJURVhf RklYLAorCQkJCSAgICAgICBGRl9TTElDRV9DSElDS0VOX0NMX1BST1ZPS0lOR19WRVJURVhfRklY KSwKKwkJfSwKKworCQkvKiBCU3BlYzogMTEyOTkgKi8KKwkJeworCQkJXzNEX0NISUNLRU4zLAor CQkJX19NQVNLRURfRklFTEQoXzNEX0NISUNLRU5fU0ZfUFJPVk9LSU5HX1ZFUlRFWF9GSVgsCisJ CQkJICAgICAgIF8zRF9DSElDS0VOX1NGX1BST1ZPS0lOR19WRVJURVhfRklYKSwKKwkJfQorCX07 CisKKwkqYmF0Y2grKyA9IE1JX0FSQl9PTl9PRkYgfCBNSV9BUkJfRElTQUJMRTsKKworCS8qIFdh Rmx1c2hDb2hlcmVudEwzQ2FjaGVMaW5lc0F0Q29udGV4dFN3aXRjaDpza2wsYnh0LGdsayAqLwor CWJhdGNoID0gZ2VuOF9lbWl0X2ZsdXNoX2NvaGVyZW50bDNfd2EoZW5naW5lLCBiYXRjaCk7CisK KwkvKiBXYUNsZWFyU2xtU3BhY2VBdENvbnRleHRTd2l0Y2g6c2tsLGJ4dCxrYmwsZ2xrLGNmbCAq LworCWJhdGNoID0gZ2VuOF9lbWl0X3BpcGVfY29udHJvbChiYXRjaCwKKwkJCQkgICAgICAgUElQ RV9DT05UUk9MX0ZMVVNIX0wzIHwKKwkJCQkgICAgICAgUElQRV9DT05UUk9MX1NUT1JFX0RBVEFf SU5ERVggfAorCQkJCSAgICAgICBQSVBFX0NPTlRST0xfQ1NfU1RBTEwgfAorCQkJCSAgICAgICBQ SVBFX0NPTlRST0xfUVdfV1JJVEUsCisJCQkJICAgICAgIExSQ19QUEhXU1BfU0NSQVRDSF9BRERS KTsKKworCWJhdGNoID0gZW1pdF9scmkoYmF0Y2gsIGxyaSwgQVJSQVlfU0laRShscmkpKTsKKwor CS8qIFdhTWVkaWFQb29sU3RhdGVDbWRJbldBQkI6Ynh0LGdsayAqLworCWlmIChIQVNfUE9PTEVE X0VVKGVuZ2luZS0+aTkxNSkpIHsKKwkJLyoKKwkJICogRVUgcG9vbCBjb25maWd1cmF0aW9uIGlz IHNldHVwIGFsb25nIHdpdGggZ29sZGVuIGNvbnRleHQKKwkJICogZHVyaW5nIGNvbnRleHQgaW5p dGlhbGl6YXRpb24uIFRoaXMgdmFsdWUgZGVwZW5kcyBvbgorCQkgKiBkZXZpY2UgdHlwZSAoMng2 IG9yIDN4NikgYW5kIG5lZWRzIHRvIGJlIHVwZGF0ZWQgYmFzZWQKKwkJICogb24gd2hpY2ggc3Vi c2xpY2UgaXMgZGlzYWJsZWQgZXNwZWNpYWxseSBmb3IgMng2CisJCSAqIGRldmljZXMsIGhvd2V2 ZXIgaXQgaXMgc2FmZSB0byBsb2FkIGRlZmF1bHQKKwkJICogY29uZmlndXJhdGlvbiBvZiAzeDYg ZGV2aWNlIGluc3RlYWQgb2YgbWFza2luZyBvZmYKKwkJICogY29ycmVzcG9uZGluZyBiaXRzIGJl Y2F1c2UgSFcgaWdub3JlcyBiaXRzIG9mIGEgZGlzYWJsZWQKKwkJICogc3Vic2xpY2UgYW5kIGRy b3BzIGRvd24gdG8gYXBwcm9wcmlhdGUgY29uZmlnLiBQbGVhc2UKKwkJICogc2VlIHJlbmRlcl9z dGF0ZV9zZXR1cCgpIGluIGk5MTVfZ2VtX3JlbmRlcl9zdGF0ZS5jIGZvcgorCQkgKiBwb3NzaWJs ZSBjb25maWd1cmF0aW9ucywgdG8gYXZvaWQgZHVwbGljYXRpb24gdGhleSBhcmUKKwkJICogbm90 IHNob3duIGhlcmUgYWdhaW4uCisJCSAqLworCQkqYmF0Y2grKyA9IEdFTjlfTUVESUFfUE9PTF9T VEFURTsKKwkJKmJhdGNoKysgPSBHRU45X01FRElBX1BPT0xfRU5BQkxFOworCQkqYmF0Y2grKyA9 IDB4MDA3NzcwMDA7CisJCSpiYXRjaCsrID0gMDsKKwkJKmJhdGNoKysgPSAwOworCQkqYmF0Y2gr KyA9IDA7CisJfQorCisJKmJhdGNoKysgPSBNSV9BUkJfT05fT0ZGIHwgTUlfQVJCX0VOQUJMRTsK KworCS8qIFBhZCB0byBlbmQgb2YgY2FjaGVsaW5lICovCisJd2hpbGUgKCh1bnNpZ25lZCBsb25n KWJhdGNoICUgQ0FDSEVMSU5FX0JZVEVTKQorCQkqYmF0Y2grKyA9IE1JX05PT1A7CisKKwlyZXR1 cm4gYmF0Y2g7Cit9CisKK3N0YXRpYyB1MzIgKgorZ2VuMTBfaW5pdF9pbmRpcmVjdGN0eF9iYihz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsIHUzMiAqYmF0Y2gpCit7CisJaW50IGk7CisK KwkvKgorCSAqIFdhUGlwZUNvbnRyb2xCZWZvcmUzRFN0YXRlU2FtcGxlUGF0dGVybjogY25sCisJ ICoKKwkgKiBFbnN1cmUgdGhlIGVuZ2luZSBpcyBpZGxlIHByaW9yIHRvIHByb2dyYW1taW5nIGEK KwkgKiAzRFNUQVRFX1NBTVBMRV9QQVRURVJOIGR1cmluZyBhIGNvbnRleHQgcmVzdG9yZS4KKwkg Ki8KKwliYXRjaCA9IGdlbjhfZW1pdF9waXBlX2NvbnRyb2woYmF0Y2gsCisJCQkJICAgICAgIFBJ UEVfQ09OVFJPTF9DU19TVEFMTCwKKwkJCQkgICAgICAgMCk7CisJLyoKKwkgKiBXYVBpcGVDb250 cm9sQmVmb3JlM0RTdGF0ZVNhbXBsZVBhdHRlcm4gc2F5cyB3ZSBuZWVkIDQgZHdvcmRzIGZvcgor CSAqIHRoZSBQSVBFX0NPTlRST0wgZm9sbG93ZWQgYnkgMTIgZHdvcmRzIG9mIDB4MCwgc28gMTYg ZHdvcmRzIGluCisJICogdG90YWwuIEhvd2V2ZXIsIGEgUElQRV9DT05UUk9MIGlzIDYgZHdvcmRz IGxvbmcsIG5vdCA0LCB3aGljaCBpcworCSAqIGNvbmZ1c2luZy4gU2luY2UgZ2VuOF9lbWl0X3Bp cGVfY29udHJvbCgpIGFscmVhZHkgYWR2YW5jZXMgdGhlCisJICogYmF0Y2ggYnkgNiBkd29yZHMs IHdlIGFkdmFuY2UgdGhlIG90aGVyIDEwIGhlcmUsIGNvbXBsZXRpbmcgYQorCSAqIGNhY2hlbGlu ZS4gSXQncyBub3QgY2xlYXIgaWYgdGhlIHdvcmthcm91bmQgcmVxdWlyZXMgdGhpcyBwYWRkaW5n CisJICogYmVmb3JlIG90aGVyIGNvbW1hbmRzLCBvciBpZiBpdCdzIGp1c3QgdGhlIHJlZ3VsYXIg cGFkZGluZyB3ZSB3b3VsZAorCSAqIGFscmVhZHkgaGF2ZSBmb3IgdGhlIHdvcmthcm91bmQgYmIs IHNvIGxlYXZlIGl0IGhlcmUgZm9yIG5vdy4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkr KykKKwkJKmJhdGNoKysgPSBNSV9OT09QOworCisJLyogUGFkIHRvIGVuZCBvZiBjYWNoZWxpbmUg Ki8KKwl3aGlsZSAoKHVuc2lnbmVkIGxvbmcpYmF0Y2ggJSBDQUNIRUxJTkVfQllURVMpCisJCSpi YXRjaCsrID0gTUlfTk9PUDsKKworCXJldHVybiBiYXRjaDsKK30KKworI2RlZmluZSBDVFhfV0Ff QkJfT0JKX1NJWkUgKFBBR0VfU0laRSkKKworc3RhdGljIGludCBscmNfc2V0dXBfd2FfY3R4KHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdCAqb2JqOworCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOworCWludCBlcnI7CisKKwlvYmogPSBp OTE1X2dlbV9vYmplY3RfY3JlYXRlX3NobWVtKGVuZ2luZS0+aTkxNSwgQ1RYX1dBX0JCX09CSl9T SVpFKTsKKwlpZiAoSVNfRVJSKG9iaikpCisJCXJldHVybiBQVFJfRVJSKG9iaik7CisKKwl2bWEg PSBpOTE1X3ZtYV9pbnN0YW5jZShvYmosICZlbmdpbmUtPmd0LT5nZ3R0LT52bSwgTlVMTCk7CisJ aWYgKElTX0VSUih2bWEpKSB7CisJCWVyciA9IFBUUl9FUlIodm1hKTsKKwkJZ290byBlcnI7CisJ fQorCisJZXJyID0gaTkxNV9nZ3R0X3Bpbih2bWEsIE5VTEwsIDAsIFBJTl9ISUdIKTsKKwlpZiAo ZXJyKQorCQlnb3RvIGVycjsKKworCWVuZ2luZS0+d2FfY3R4LnZtYSA9IHZtYTsKKwlyZXR1cm4g MDsKKworZXJyOgorCWk5MTVfZ2VtX29iamVjdF9wdXQob2JqKTsKKwlyZXR1cm4gZXJyOworfQor Cit0eXBlZGVmIHUzMiAqKCp3YV9iYl9mdW5jX3QpKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZSwgdTMyICpiYXRjaCk7CisKK2ludCBpbnRlbF9pbml0X3dvcmthcm91bmRfYmIoc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQoreworCXN0cnVjdCBpOTE1X2N0eF93b3JrYXJvdW5k cyAqd2FfY3R4ID0gJmVuZ2luZS0+d2FfY3R4OworCXN0cnVjdCBpOTE1X3dhX2N0eF9iYiAqd2Ff YmJbMl0gPSB7ICZ3YV9jdHgtPmluZGlyZWN0X2N0eCwKKwkJCQkJICAgICZ3YV9jdHgtPnBlcl9j dHggfTsKKwl3YV9iYl9mdW5jX3Qgd2FfYmJfZm5bMl07CisJdm9pZCAqYmF0Y2gsICpiYXRjaF9w dHI7CisJdW5zaWduZWQgaW50IGk7CisJaW50IHJldDsKKworCWlmIChlbmdpbmUtPmNsYXNzICE9 IFJFTkRFUl9DTEFTUykKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKElOVEVMX0dFTihlbmdpbmUt Pmk5MTUpKSB7CisJY2FzZSAxMjoKKwljYXNlIDExOgorCQlyZXR1cm4gMDsKKwljYXNlIDEwOgor CQl3YV9iYl9mblswXSA9IGdlbjEwX2luaXRfaW5kaXJlY3RjdHhfYmI7CisJCXdhX2JiX2ZuWzFd ID0gTlVMTDsKKwkJYnJlYWs7CisJY2FzZSA5OgorCQl3YV9iYl9mblswXSA9IGdlbjlfaW5pdF9p bmRpcmVjdGN0eF9iYjsKKwkJd2FfYmJfZm5bMV0gPSBOVUxMOworCQlicmVhazsKKwljYXNlIDg6 CisJCXdhX2JiX2ZuWzBdID0gZ2VuOF9pbml0X2luZGlyZWN0Y3R4X2JiOworCQl3YV9iYl9mblsx XSA9IE5VTEw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCU1JU1NJTkdfQ0FTRShJTlRFTF9HRU4o ZW5naW5lLT5pOTE1KSk7CisJCXJldHVybiAwOworCX0KKworCXJldCA9IGxyY19zZXR1cF93YV9j dHgoZW5naW5lKTsKKwlpZiAocmV0KSB7CisJCWRybV9kYmcoJmVuZ2luZS0+aTkxNS0+ZHJtLAor CQkJIkZhaWxlZCB0byBzZXR1cCBjb250ZXh0IFdBIHBhZ2U6ICVkXG4iLCByZXQpOworCQlyZXR1 cm4gcmV0OworCX0KKworCWJhdGNoID0gaTkxNV9nZW1fb2JqZWN0X3Bpbl9tYXAod2FfY3R4LT52 bWEtPm9iaiwgSTkxNV9NQVBfV0IpOworCisJLyoKKwkgKiBFbWl0IHRoZSB0d28gd29ya2Fyb3Vu ZCBiYXRjaCBidWZmZXJzLCByZWNvcmRpbmcgdGhlIG9mZnNldCBmcm9tIHRoZQorCSAqIHN0YXJ0 IG9mIHRoZSB3b3JrYXJvdW5kIGJhdGNoIGJ1ZmZlciBvYmplY3QgZm9yIGVhY2ggYW5kIHRoZWly CisJICogcmVzcGVjdGl2ZSBzaXplcy4KKwkgKi8KKwliYXRjaF9wdHIgPSBiYXRjaDsKKwlmb3Ig KGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3YV9iYl9mbik7IGkrKykgeworCQl3YV9iYltpXS0+b2Zm c2V0ID0gYmF0Y2hfcHRyIC0gYmF0Y2g7CisJCWlmIChHRU1fREVCVUdfV0FSTl9PTighSVNfQUxJ R05FRCh3YV9iYltpXS0+b2Zmc2V0LAorCQkJCQkJICBDQUNIRUxJTkVfQllURVMpKSkgeworCQkJ cmV0ID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCWlmICh3YV9iYl9mbltpXSkKKwkJCWJh dGNoX3B0ciA9IHdhX2JiX2ZuW2ldKGVuZ2luZSwgYmF0Y2hfcHRyKTsKKwkJd2FfYmJbaV0tPnNp emUgPSBiYXRjaF9wdHIgLSAoYmF0Y2ggKyB3YV9iYltpXS0+b2Zmc2V0KTsKKwl9CisJR0VNX0JV R19PTihiYXRjaF9wdHIgLSBiYXRjaCA+IENUWF9XQV9CQl9PQkpfU0laRSk7CisKKwlfX2k5MTVf Z2VtX29iamVjdF9mbHVzaF9tYXAod2FfY3R4LT52bWEtPm9iaiwgMCwgYmF0Y2hfcHRyIC0gYmF0 Y2gpOworCV9faTkxNV9nZW1fb2JqZWN0X3JlbGVhc2VfbWFwKHdhX2N0eC0+dm1hLT5vYmopOwor CWlmIChyZXQpCisJCWludGVsX2Zpbmlfd29ya2Fyb3VuZF9iYihlbmdpbmUpOworCisJcmV0dXJu IHJldDsKK30KKwordm9pZCBpbnRlbF9maW5pX3dvcmthcm91bmRfYmIoc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqZW5naW5lKQoreworCWk5MTVfdm1hX3VucGluX2FuZF9yZWxlYXNlKCZlbmdpbmUt PndhX2N0eC52bWEsIDApOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qv aW50ZWxfZW5naW5lX3dvcmthcm91bmRfYmIuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2lu dGVsX2VuZ2luZV93b3JrYXJvdW5kX2JiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAwLi44ODc3MWQ3N2ZkNDIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9ndC9pbnRlbF9lbmdpbmVfd29ya2Fyb3VuZF9iYi5oCkBAIC0wLDAgKzEsMTQgQEAK Ky8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQgKi8KKy8qCisgKiBDb3B5cmlnaHQgwqkg MjAxNCBJbnRlbCBDb3Jwb3JhdGlvbgorICovCisKKyNpZm5kZWYgX19JTlRFTF9FTkdJTkVfV09S S0FST1VORF9CQl9IX18KKyNkZWZpbmUgX19JTlRFTF9FTkdJTkVfV09SS0FST1VORF9CQl9IX18K Kworc3RydWN0IGludGVsX2VuZ2luZV9jczsKKworaW50IGludGVsX2luaXRfd29ya2Fyb3VuZF9i YihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpOwordm9pZCBpbnRlbF9maW5pX3dvcmth cm91bmRfYmIoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKKworI2VuZGlmIC8qIF9f SU5URUxfRU5HSU5FX1dPUktBUk9VTkRfQkJfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9ndC9pbnRlbF9leGVjbGlzdHNfc3VibWlzc2lvbi5jIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ3QvaW50ZWxfZXhlY2xpc3RzX3N1Ym1pc3Npb24uYwppbmRleCA5MDY5YTQ1NmQy ZjcuLjFjYzkzZWE2YjdmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50 ZWxfZXhlY2xpc3RzX3N1Ym1pc3Npb24uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9p bnRlbF9leGVjbGlzdHNfc3VibWlzc2lvbi5jCkBAIC0xMTYsNiArMTE2LDcgQEAKICNpbmNsdWRl ICJpbnRlbF9icmVhZGNydW1icy5oIgogI2luY2x1ZGUgImludGVsX2NvbnRleHQuaCIKICNpbmNs dWRlICJpbnRlbF9lbmdpbmVfcG0uaCIKKyNpbmNsdWRlICJpbnRlbF9lbmdpbmVfd29ya2Fyb3Vu ZF9iYi5oIgogI2luY2x1ZGUgImludGVsX2V4ZWNsaXN0c19zdWJtaXNzaW9uLmgiCiAjaW5jbHVk ZSAiaW50ZWxfZ3QuaCIKICNpbmNsdWRlICJpbnRlbF9ndF9wbS5oIgpAQCAtMzY5NSwzMzAgKzM2 OTYsNiBAQCBzdGF0aWMgaW50IGV4ZWNsaXN0c19yZXF1ZXN0X2FsbG9jKHN0cnVjdCBpOTE1X3Jl cXVlc3QgKnJlcXVlc3QpCiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBJbiB0aGlzIFdBIHdlIG5l ZWQgdG8gc2V0IEdFTjhfTDNTUUNSRUc0WzIxOjIxXSBhbmQgcmVzZXQgaXQgYWZ0ZXIKLSAqIFBJ UEVfQ09OVFJPTCBpbnN0cnVjdGlvbi4gVGhpcyBpcyByZXF1aXJlZCBmb3IgdGhlIGZsdXNoIHRv IGhhcHBlbiBjb3JyZWN0bHkKLSAqIGJ1dCB0aGVyZSBpcyBhIHNsaWdodCBjb21wbGljYXRpb24g YXMgdGhpcyBpcyBhcHBsaWVkIGluIFdBIGJhdGNoIHdoZXJlIHRoZQotICogdmFsdWVzIGFyZSBv bmx5IGluaXRpYWxpemVkIG9uY2Ugc28gd2UgY2Fubm90IHRha2UgcmVnaXN0ZXIgdmFsdWUgYXQg dGhlCi0gKiBiZWdpbm5pbmcgYW5kIHJldXNlIGl0IGZ1cnRoZXI7IGhlbmNlIHdlIHNhdmUgaXRz IHZhbHVlIHRvIG1lbW9yeSwgdXBsb2FkIGEKLSAqIGNvbnN0YW50IHZhbHVlIHdpdGggYml0MjEg c2V0IGFuZCB0aGVuIHdlIHJlc3RvcmUgaXQgYmFjayB3aXRoIHRoZSBzYXZlZCB2YWx1ZS4KLSAq IFRvIHNpbXBsaWZ5IHRoZSBXQSwgYSBjb25zdGFudCB2YWx1ZSBpcyBmb3JtZWQgYnkgdXNpbmcg dGhlIGRlZmF1bHQgdmFsdWUKLSAqIG9mIHRoaXMgcmVnaXN0ZXIuIFRoaXMgc2hvdWxkbid0IGJl IGEgcHJvYmxlbSBiZWNhdXNlIHdlIGFyZSBvbmx5IG1vZGlmeWluZwotICogaXQgZm9yIGEgc2hv cnQgcGVyaW9kIGFuZCB0aGlzIGJhdGNoIGluIG5vbi1wcmVtcHRpYmxlLiBXZSBjYW4gb2Zjb3Vy c2UKLSAqIHVzZSBhZGRpdGlvbmFsIGluc3RydWN0aW9ucyB0aGF0IHJlYWQgdGhlIGFjdHVhbCB2 YWx1ZSBvZiB0aGUgcmVnaXN0ZXIKLSAqIGF0IHRoYXQgdGltZSBhbmQgc2V0IG91ciBiaXQgb2Yg aW50ZXJlc3QgYnV0IGl0IG1ha2VzIHRoZSBXQSBjb21wbGljYXRlZC4KLSAqCi0gKiBUaGlzIFdB IGlzIGFsc28gcmVxdWlyZWQgZm9yIEdlbjkgc28gZXh0cmFjdGluZyBhcyBhIGZ1bmN0aW9uIGF2 b2lkcwotICogY29kZSBkdXBsaWNhdGlvbi4KLSAqLwotc3RhdGljIHUzMiAqCi1nZW44X2VtaXRf Zmx1c2hfY29oZXJlbnRsM193YShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsIHUzMiAq YmF0Y2gpCi17Ci0JLyogTkIgbm8gb25lIGVsc2UgaXMgYWxsb3dlZCB0byBzY3JpYmJsZSBvdmVy IHNjcmF0Y2ggKyAyNTYhICovCi0JKmJhdGNoKysgPSBNSV9TVE9SRV9SRUdJU1RFUl9NRU1fR0VO OCB8IE1JX1NSTV9MUk1fR0xPQkFMX0dUVDsKLQkqYmF0Y2grKyA9IGk5MTVfbW1pb19yZWdfb2Zm c2V0KEdFTjhfTDNTUUNSRUc0KTsKLQkqYmF0Y2grKyA9IGludGVsX2d0X3NjcmF0Y2hfb2Zmc2V0 KGVuZ2luZS0+Z3QsCi0JCQkJCSAgIElOVEVMX0dUX1NDUkFUQ0hfRklFTERfQ09IRVJFTlRMM19X QSk7Ci0JKmJhdGNoKysgPSAwOwotCi0JKmJhdGNoKysgPSBNSV9MT0FEX1JFR0lTVEVSX0lNTSgx KTsKLQkqYmF0Y2grKyA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KEdFTjhfTDNTUUNSRUc0KTsKLQkq YmF0Y2grKyA9IDB4NDA0MDAwMDAgfCBHRU44X0xRU0NfRkxVU0hfQ09IRVJFTlRfTElORVM7Ci0K LQliYXRjaCA9IGdlbjhfZW1pdF9waXBlX2NvbnRyb2woYmF0Y2gsCi0JCQkJICAgICAgIFBJUEVf Q09OVFJPTF9DU19TVEFMTCB8Ci0JCQkJICAgICAgIFBJUEVfQ09OVFJPTF9EQ19GTFVTSF9FTkFC TEUsCi0JCQkJICAgICAgIDApOwotCi0JKmJhdGNoKysgPSBNSV9MT0FEX1JFR0lTVEVSX01FTV9H RU44IHwgTUlfU1JNX0xSTV9HTE9CQUxfR1RUOwotCSpiYXRjaCsrID0gaTkxNV9tbWlvX3JlZ19v ZmZzZXQoR0VOOF9MM1NRQ1JFRzQpOwotCSpiYXRjaCsrID0gaW50ZWxfZ3Rfc2NyYXRjaF9vZmZz ZXQoZW5naW5lLT5ndCwKLQkJCQkJICAgSU5URUxfR1RfU0NSQVRDSF9GSUVMRF9DT0hFUkVOVEwz X1dBKTsKLQkqYmF0Y2grKyA9IDA7Ci0KLQlyZXR1cm4gYmF0Y2g7Ci19Ci0KLS8qCi0gKiBUeXBp Y2FsbHkgd2Ugb25seSBoYXZlIG9uZSBpbmRpcmVjdF9jdHggYW5kIHBlcl9jdHggYmF0Y2ggYnVm ZmVyIHdoaWNoIGFyZQotICogaW5pdGlhbGl6ZWQgYXQgdGhlIGJlZ2lubmluZyBhbmQgc2hhcmVk IGFjcm9zcyBhbGwgY29udGV4dHMgYnV0IHRoaXMgZmllbGQKLSAqIGhlbHBzIHVzIHRvIGhhdmUg bXVsdGlwbGUgYmF0Y2hlcyBhdCBkaWZmZXJlbnQgb2Zmc2V0cyBhbmQgc2VsZWN0IHRoZW0gYmFz ZWQKLSAqIG9uIGEgY3JpdGVyaWEuIEF0IHRoZSBtb21lbnQgdGhpcyBiYXRjaCBhbHdheXMgc3Rh cnQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcGFnZQotICogYW5kIGF0IHRoaXMgcG9pbnQgd2Ug ZG9uJ3QgaGF2ZSBtdWx0aXBsZSB3YV9jdHggYmF0Y2ggYnVmZmVycy4KLSAqCi0gKiBUaGUgbnVt YmVyIG9mIFdBIGFwcGxpZWQgYXJlIG5vdCBrbm93biBhdCB0aGUgYmVnaW5uaW5nOyB3ZSB1c2Ug dGhpcyBmaWVsZAotICogdG8gcmV0dXJuIHRoZSBubyBvZiBEV09SRFMgd3JpdHRlbi4KLSAqCi0g KiBJdCBpcyB0byBiZSBub3RlZCB0aGF0IHRoaXMgYmF0Y2ggZG9lcyBub3QgY29udGFpbiBNSV9C QVRDSF9CVUZGRVJfRU5ECi0gKiBzbyBpdCBhZGRzIE5PT1BzIGFzIHBhZGRpbmcgdG8gbWFrZSBp dCBjYWNoZWxpbmUgYWxpZ25lZC4KLSAqIE1JX0JBVENIX0JVRkZFUl9FTkQgd2lsbCBiZSBhZGRl ZCB0byBwZXJjdHggYmF0Y2ggYW5kIGJvdGggb2YgdGhlbSB0b2dldGhlcgotICogbWFrZXMgYSBj b21wbGV0ZSBiYXRjaCBidWZmZXIuCi0gKi8KLXN0YXRpYyB1MzIgKmdlbjhfaW5pdF9pbmRpcmVj dGN0eF9iYihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsIHUzMiAqYmF0Y2gpCi17Ci0J LyogV2FEaXNhYmxlQ3R4UmVzdG9yZUFyYml0cmF0aW9uOmJkdyxjaHYgKi8KLQkqYmF0Y2grKyA9 IE1JX0FSQl9PTl9PRkYgfCBNSV9BUkJfRElTQUJMRTsKLQotCS8qIFdhRmx1c2hDb2hlcmVudEwz Q2FjaGVMaW5lc0F0Q29udGV4dFN3aXRjaDpiZHcgKi8KLQlpZiAoSVNfQlJPQURXRUxMKGVuZ2lu ZS0+aTkxNSkpCi0JCWJhdGNoID0gZ2VuOF9lbWl0X2ZsdXNoX2NvaGVyZW50bDNfd2EoZW5naW5l LCBiYXRjaCk7Ci0KLQkvKiBXYUNsZWFyU2xtU3BhY2VBdENvbnRleHRTd2l0Y2g6YmR3LGNodiAq LwotCS8qIEFjdHVhbCBzY3JhdGNoIGxvY2F0aW9uIGlzIGF0IDEyOCBieXRlcyBvZmZzZXQgKi8K LQliYXRjaCA9IGdlbjhfZW1pdF9waXBlX2NvbnRyb2woYmF0Y2gsCi0JCQkJICAgICAgIFBJUEVf Q09OVFJPTF9GTFVTSF9MMyB8Ci0JCQkJICAgICAgIFBJUEVfQ09OVFJPTF9TVE9SRV9EQVRBX0lO REVYIHwKLQkJCQkgICAgICAgUElQRV9DT05UUk9MX0NTX1NUQUxMIHwKLQkJCQkgICAgICAgUElQ RV9DT05UUk9MX1FXX1dSSVRFLAotCQkJCSAgICAgICBMUkNfUFBIV1NQX1NDUkFUQ0hfQUREUik7 Ci0KLQkqYmF0Y2grKyA9IE1JX0FSQl9PTl9PRkYgfCBNSV9BUkJfRU5BQkxFOwotCi0JLyogUGFk IHRvIGVuZCBvZiBjYWNoZWxpbmUgKi8KLQl3aGlsZSAoKHVuc2lnbmVkIGxvbmcpYmF0Y2ggJSBD QUNIRUxJTkVfQllURVMpCi0JCSpiYXRjaCsrID0gTUlfTk9PUDsKLQotCS8qCi0JICogTUlfQkFU Q0hfQlVGRkVSX0VORCBpcyBub3QgcmVxdWlyZWQgaW4gSW5kaXJlY3QgY3R4IEJCIGJlY2F1c2UK LQkgKiBleGVjdXRpb24gZGVwZW5kcyBvbiB0aGUgbGVuZ3RoIHNwZWNpZmllZCBpbiB0ZXJtcyBv ZiBjYWNoZSBsaW5lcwotCSAqIGluIHRoZSByZWdpc3RlciBDVFhfUkNTX0lORElSRUNUX0NUWAot CSAqLwotCi0JcmV0dXJuIGJhdGNoOwotfQotCi1zdHJ1Y3QgbHJpIHsKLQlpOTE1X3JlZ190IHJl ZzsKLQl1MzIgdmFsdWU7Ci19OwotCi1zdGF0aWMgdTMyICplbWl0X2xyaSh1MzIgKmJhdGNoLCBj b25zdCBzdHJ1Y3QgbHJpICpscmksIHVuc2lnbmVkIGludCBjb3VudCkKLXsKLQlHRU1fQlVHX09O KCFjb3VudCB8fCBjb3VudCA+IDYzKTsKLQotCSpiYXRjaCsrID0gTUlfTE9BRF9SRUdJU1RFUl9J TU0oY291bnQpOwotCWRvIHsKLQkJKmJhdGNoKysgPSBpOTE1X21taW9fcmVnX29mZnNldChscmkt PnJlZyk7Ci0JCSpiYXRjaCsrID0gbHJpLT52YWx1ZTsKLQl9IHdoaWxlIChscmkrKywgLS1jb3Vu dCk7Ci0JKmJhdGNoKysgPSBNSV9OT09QOwotCi0JcmV0dXJuIGJhdGNoOwotfQotCi1zdGF0aWMg dTMyICpnZW45X2luaXRfaW5kaXJlY3RjdHhfYmIoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5n aW5lLCB1MzIgKmJhdGNoKQotewotCXN0YXRpYyBjb25zdCBzdHJ1Y3QgbHJpIGxyaVtdID0gewot CQkvKiBXYURpc2FibGVHYXRoZXJBdFNldFNoYWRlckNvbW1vblNsaWNlOnNrbCxieHQsa2JsLGds ayAqLwotCQl7Ci0JCQlDT01NT05fU0xJQ0VfQ0hJQ0tFTjIsCi0JCQlfX01BU0tFRF9GSUVMRChH RU45X0RJU0FCTEVfR0FUSEVSX0FUX1NFVF9TSEFERVJfQ09NTU9OX1NMSUNFLAotCQkJCSAgICAg ICAwKSwKLQkJfSwKLQotCQkvKiBCU3BlYzogMTEzOTEgKi8KLQkJewotCQkJRkZfU0xJQ0VfQ0hJ Q0tFTiwKLQkJCV9fTUFTS0VEX0ZJRUxEKEZGX1NMSUNFX0NISUNLRU5fQ0xfUFJPVk9LSU5HX1ZF UlRFWF9GSVgsCi0JCQkJICAgICAgIEZGX1NMSUNFX0NISUNLRU5fQ0xfUFJPVk9LSU5HX1ZFUlRF WF9GSVgpLAotCQl9LAotCi0JCS8qIEJTcGVjOiAxMTI5OSAqLwotCQl7Ci0JCQlfM0RfQ0hJQ0tF TjMsCi0JCQlfX01BU0tFRF9GSUVMRChfM0RfQ0hJQ0tFTl9TRl9QUk9WT0tJTkdfVkVSVEVYX0ZJ WCwKLQkJCQkgICAgICAgXzNEX0NISUNLRU5fU0ZfUFJPVk9LSU5HX1ZFUlRFWF9GSVgpLAotCQl9 Ci0JfTsKLQotCSpiYXRjaCsrID0gTUlfQVJCX09OX09GRiB8IE1JX0FSQl9ESVNBQkxFOwotCi0J LyogV2FGbHVzaENvaGVyZW50TDNDYWNoZUxpbmVzQXRDb250ZXh0U3dpdGNoOnNrbCxieHQsZ2xr ICovCi0JYmF0Y2ggPSBnZW44X2VtaXRfZmx1c2hfY29oZXJlbnRsM193YShlbmdpbmUsIGJhdGNo KTsKLQotCS8qIFdhQ2xlYXJTbG1TcGFjZUF0Q29udGV4dFN3aXRjaDpza2wsYnh0LGtibCxnbGss Y2ZsICovCi0JYmF0Y2ggPSBnZW44X2VtaXRfcGlwZV9jb250cm9sKGJhdGNoLAotCQkJCSAgICAg ICBQSVBFX0NPTlRST0xfRkxVU0hfTDMgfAotCQkJCSAgICAgICBQSVBFX0NPTlRST0xfU1RPUkVf REFUQV9JTkRFWCB8Ci0JCQkJICAgICAgIFBJUEVfQ09OVFJPTF9DU19TVEFMTCB8Ci0JCQkJICAg ICAgIFBJUEVfQ09OVFJPTF9RV19XUklURSwKLQkJCQkgICAgICAgTFJDX1BQSFdTUF9TQ1JBVENI X0FERFIpOwotCi0JYmF0Y2ggPSBlbWl0X2xyaShiYXRjaCwgbHJpLCBBUlJBWV9TSVpFKGxyaSkp OwotCi0JLyogV2FNZWRpYVBvb2xTdGF0ZUNtZEluV0FCQjpieHQsZ2xrICovCi0JaWYgKEhBU19Q T09MRURfRVUoZW5naW5lLT5pOTE1KSkgewotCQkvKgotCQkgKiBFVSBwb29sIGNvbmZpZ3VyYXRp b24gaXMgc2V0dXAgYWxvbmcgd2l0aCBnb2xkZW4gY29udGV4dAotCQkgKiBkdXJpbmcgY29udGV4 dCBpbml0aWFsaXphdGlvbi4gVGhpcyB2YWx1ZSBkZXBlbmRzIG9uCi0JCSAqIGRldmljZSB0eXBl ICgyeDYgb3IgM3g2KSBhbmQgbmVlZHMgdG8gYmUgdXBkYXRlZCBiYXNlZAotCQkgKiBvbiB3aGlj aCBzdWJzbGljZSBpcyBkaXNhYmxlZCBlc3BlY2lhbGx5IGZvciAyeDYKLQkJICogZGV2aWNlcywg aG93ZXZlciBpdCBpcyBzYWZlIHRvIGxvYWQgZGVmYXVsdAotCQkgKiBjb25maWd1cmF0aW9uIG9m IDN4NiBkZXZpY2UgaW5zdGVhZCBvZiBtYXNraW5nIG9mZgotCQkgKiBjb3JyZXNwb25kaW5nIGJp dHMgYmVjYXVzZSBIVyBpZ25vcmVzIGJpdHMgb2YgYSBkaXNhYmxlZAotCQkgKiBzdWJzbGljZSBh bmQgZHJvcHMgZG93biB0byBhcHByb3ByaWF0ZSBjb25maWcuIFBsZWFzZQotCQkgKiBzZWUgcmVu ZGVyX3N0YXRlX3NldHVwKCkgaW4gaTkxNV9nZW1fcmVuZGVyX3N0YXRlLmMgZm9yCi0JCSAqIHBv c3NpYmxlIGNvbmZpZ3VyYXRpb25zLCB0byBhdm9pZCBkdXBsaWNhdGlvbiB0aGV5IGFyZQotCQkg KiBub3Qgc2hvd24gaGVyZSBhZ2Fpbi4KLQkJICovCi0JCSpiYXRjaCsrID0gR0VOOV9NRURJQV9Q T09MX1NUQVRFOwotCQkqYmF0Y2grKyA9IEdFTjlfTUVESUFfUE9PTF9FTkFCTEU7Ci0JCSpiYXRj aCsrID0gMHgwMDc3NzAwMDsKLQkJKmJhdGNoKysgPSAwOwotCQkqYmF0Y2grKyA9IDA7Ci0JCSpi YXRjaCsrID0gMDsKLQl9Ci0KLQkqYmF0Y2grKyA9IE1JX0FSQl9PTl9PRkYgfCBNSV9BUkJfRU5B QkxFOwotCi0JLyogUGFkIHRvIGVuZCBvZiBjYWNoZWxpbmUgKi8KLQl3aGlsZSAoKHVuc2lnbmVk IGxvbmcpYmF0Y2ggJSBDQUNIRUxJTkVfQllURVMpCi0JCSpiYXRjaCsrID0gTUlfTk9PUDsKLQot CXJldHVybiBiYXRjaDsKLX0KLQotc3RhdGljIHUzMiAqCi1nZW4xMF9pbml0X2luZGlyZWN0Y3R4 X2JiKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgdTMyICpiYXRjaCkKLXsKLQlpbnQg aTsKLQotCS8qCi0JICogV2FQaXBlQ29udHJvbEJlZm9yZTNEU3RhdGVTYW1wbGVQYXR0ZXJuOiBj bmwKLQkgKgotCSAqIEVuc3VyZSB0aGUgZW5naW5lIGlzIGlkbGUgcHJpb3IgdG8gcHJvZ3JhbW1p bmcgYQotCSAqIDNEU1RBVEVfU0FNUExFX1BBVFRFUk4gZHVyaW5nIGEgY29udGV4dCByZXN0b3Jl LgotCSAqLwotCWJhdGNoID0gZ2VuOF9lbWl0X3BpcGVfY29udHJvbChiYXRjaCwKLQkJCQkgICAg ICAgUElQRV9DT05UUk9MX0NTX1NUQUxMLAotCQkJCSAgICAgICAwKTsKLQkvKgotCSAqIFdhUGlw ZUNvbnRyb2xCZWZvcmUzRFN0YXRlU2FtcGxlUGF0dGVybiBzYXlzIHdlIG5lZWQgNCBkd29yZHMg Zm9yCi0JICogdGhlIFBJUEVfQ09OVFJPTCBmb2xsb3dlZCBieSAxMiBkd29yZHMgb2YgMHgwLCBz byAxNiBkd29yZHMgaW4KLQkgKiB0b3RhbC4gSG93ZXZlciwgYSBQSVBFX0NPTlRST0wgaXMgNiBk d29yZHMgbG9uZywgbm90IDQsIHdoaWNoIGlzCi0JICogY29uZnVzaW5nLiBTaW5jZSBnZW44X2Vt aXRfcGlwZV9jb250cm9sKCkgYWxyZWFkeSBhZHZhbmNlcyB0aGUKLQkgKiBiYXRjaCBieSA2IGR3 b3Jkcywgd2UgYWR2YW5jZSB0aGUgb3RoZXIgMTAgaGVyZSwgY29tcGxldGluZyBhCi0JICogY2Fj aGVsaW5lLiBJdCdzIG5vdCBjbGVhciBpZiB0aGUgd29ya2Fyb3VuZCByZXF1aXJlcyB0aGlzIHBh ZGRpbmcKLQkgKiBiZWZvcmUgb3RoZXIgY29tbWFuZHMsIG9yIGlmIGl0J3MganVzdCB0aGUgcmVn dWxhciBwYWRkaW5nIHdlIHdvdWxkCi0JICogYWxyZWFkeSBoYXZlIGZvciB0aGUgd29ya2Fyb3Vu ZCBiYiwgc28gbGVhdmUgaXQgaGVyZSBmb3Igbm93LgotCSAqLwotCWZvciAoaSA9IDA7IGkgPCAx MDsgaSsrKQotCQkqYmF0Y2grKyA9IE1JX05PT1A7Ci0KLQkvKiBQYWQgdG8gZW5kIG9mIGNhY2hl bGluZSAqLwotCXdoaWxlICgodW5zaWduZWQgbG9uZyliYXRjaCAlIENBQ0hFTElORV9CWVRFUykK LQkJKmJhdGNoKysgPSBNSV9OT09QOwotCi0JcmV0dXJuIGJhdGNoOwotfQotCi0jZGVmaW5lIENU WF9XQV9CQl9PQkpfU0laRSAoUEFHRV9TSVpFKQotCi1zdGF0aWMgaW50IGxyY19zZXR1cF93YV9j dHgoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQotewotCXN0cnVjdCBkcm1faTkxNV9n ZW1fb2JqZWN0ICpvYmo7Ci0Jc3RydWN0IGk5MTVfdm1hICp2bWE7Ci0JaW50IGVycjsKLQotCW9i aiA9IGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfc2htZW0oZW5naW5lLT5pOTE1LCBDVFhfV0FfQkJf T0JKX1NJWkUpOwotCWlmIChJU19FUlIob2JqKSkKLQkJcmV0dXJuIFBUUl9FUlIob2JqKTsKLQot CXZtYSA9IGk5MTVfdm1hX2luc3RhbmNlKG9iaiwgJmVuZ2luZS0+Z3QtPmdndHQtPnZtLCBOVUxM KTsKLQlpZiAoSVNfRVJSKHZtYSkpIHsKLQkJZXJyID0gUFRSX0VSUih2bWEpOwotCQlnb3RvIGVy cjsKLQl9Ci0KLQllcnIgPSBpOTE1X2dndHRfcGluKHZtYSwgTlVMTCwgMCwgUElOX0hJR0gpOwot CWlmIChlcnIpCi0JCWdvdG8gZXJyOwotCi0JZW5naW5lLT53YV9jdHgudm1hID0gdm1hOwotCXJl dHVybiAwOwotCi1lcnI6Ci0JaTkxNV9nZW1fb2JqZWN0X3B1dChvYmopOwotCXJldHVybiBlcnI7 Ci19Ci0KLXN0YXRpYyB2b2lkIGxyY19kZXN0cm95X3dhX2N0eChzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUpCi17Ci0JaTkxNV92bWFfdW5waW5fYW5kX3JlbGVhc2UoJmVuZ2luZS0+d2Ff Y3R4LnZtYSwgMCk7Ci19Ci0KLXR5cGVkZWYgdTMyICooKndhX2JiX2Z1bmNfdCkoc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lLCB1MzIgKmJhdGNoKTsKLQotc3RhdGljIGludCBpbnRlbF9p bml0X3dvcmthcm91bmRfYmIoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQotewotCXN0 cnVjdCBpOTE1X2N0eF93b3JrYXJvdW5kcyAqd2FfY3R4ID0gJmVuZ2luZS0+d2FfY3R4OwotCXN0 cnVjdCBpOTE1X3dhX2N0eF9iYiAqd2FfYmJbMl0gPSB7ICZ3YV9jdHgtPmluZGlyZWN0X2N0eCwK LQkJCQkJICAgICZ3YV9jdHgtPnBlcl9jdHggfTsKLQl3YV9iYl9mdW5jX3Qgd2FfYmJfZm5bMl07 Ci0Jdm9pZCAqYmF0Y2gsICpiYXRjaF9wdHI7Ci0JdW5zaWduZWQgaW50IGk7Ci0JaW50IHJldDsK LQotCWlmIChlbmdpbmUtPmNsYXNzICE9IFJFTkRFUl9DTEFTUykKLQkJcmV0dXJuIDA7Ci0KLQlz d2l0Y2ggKElOVEVMX0dFTihlbmdpbmUtPmk5MTUpKSB7Ci0JY2FzZSAxMjoKLQljYXNlIDExOgot CQlyZXR1cm4gMDsKLQljYXNlIDEwOgotCQl3YV9iYl9mblswXSA9IGdlbjEwX2luaXRfaW5kaXJl Y3RjdHhfYmI7Ci0JCXdhX2JiX2ZuWzFdID0gTlVMTDsKLQkJYnJlYWs7Ci0JY2FzZSA5OgotCQl3 YV9iYl9mblswXSA9IGdlbjlfaW5pdF9pbmRpcmVjdGN0eF9iYjsKLQkJd2FfYmJfZm5bMV0gPSBO VUxMOwotCQlicmVhazsKLQljYXNlIDg6Ci0JCXdhX2JiX2ZuWzBdID0gZ2VuOF9pbml0X2luZGly ZWN0Y3R4X2JiOwotCQl3YV9iYl9mblsxXSA9IE5VTEw7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0J CU1JU1NJTkdfQ0FTRShJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSk7Ci0JCXJldHVybiAwOwotCX0K LQotCXJldCA9IGxyY19zZXR1cF93YV9jdHgoZW5naW5lKTsKLQlpZiAocmV0KSB7Ci0JCWRybV9k YmcoJmVuZ2luZS0+aTkxNS0+ZHJtLAotCQkJIkZhaWxlZCB0byBzZXR1cCBjb250ZXh0IFdBIHBh Z2U6ICVkXG4iLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCWJhdGNoID0gaTkxNV9nZW1f b2JqZWN0X3Bpbl9tYXAod2FfY3R4LT52bWEtPm9iaiwgSTkxNV9NQVBfV0IpOwotCi0JLyoKLQkg KiBFbWl0IHRoZSB0d28gd29ya2Fyb3VuZCBiYXRjaCBidWZmZXJzLCByZWNvcmRpbmcgdGhlIG9m ZnNldCBmcm9tIHRoZQotCSAqIHN0YXJ0IG9mIHRoZSB3b3JrYXJvdW5kIGJhdGNoIGJ1ZmZlciBv YmplY3QgZm9yIGVhY2ggYW5kIHRoZWlyCi0JICogcmVzcGVjdGl2ZSBzaXplcy4KLQkgKi8KLQli YXRjaF9wdHIgPSBiYXRjaDsKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3YV9iYl9mbik7 IGkrKykgewotCQl3YV9iYltpXS0+b2Zmc2V0ID0gYmF0Y2hfcHRyIC0gYmF0Y2g7Ci0JCWlmIChH RU1fREVCVUdfV0FSTl9PTighSVNfQUxJR05FRCh3YV9iYltpXS0+b2Zmc2V0LAotCQkJCQkJICBD QUNIRUxJTkVfQllURVMpKSkgewotCQkJcmV0ID0gLUVJTlZBTDsKLQkJCWJyZWFrOwotCQl9Ci0J CWlmICh3YV9iYl9mbltpXSkKLQkJCWJhdGNoX3B0ciA9IHdhX2JiX2ZuW2ldKGVuZ2luZSwgYmF0 Y2hfcHRyKTsKLQkJd2FfYmJbaV0tPnNpemUgPSBiYXRjaF9wdHIgLSAoYmF0Y2ggKyB3YV9iYltp XS0+b2Zmc2V0KTsKLQl9Ci0JR0VNX0JVR19PTihiYXRjaF9wdHIgLSBiYXRjaCA+IENUWF9XQV9C Ql9PQkpfU0laRSk7Ci0KLQlfX2k5MTVfZ2VtX29iamVjdF9mbHVzaF9tYXAod2FfY3R4LT52bWEt Pm9iaiwgMCwgYmF0Y2hfcHRyIC0gYmF0Y2gpOwotCV9faTkxNV9nZW1fb2JqZWN0X3JlbGVhc2Vf bWFwKHdhX2N0eC0+dm1hLT5vYmopOwotCWlmIChyZXQpCi0JCWxyY19kZXN0cm95X3dhX2N0eChl bmdpbmUpOwotCi0JcmV0dXJuIHJldDsKLX0KLQogc3RhdGljIHZvaWQgcmVzZXRfY3NiX3BvaW50 ZXJzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIHsKIAlzdHJ1Y3QgaW50ZWxfZW5n aW5lX2V4ZWNsaXN0cyAqIGNvbnN0IGV4ZWNsaXN0cyA9ICZlbmdpbmUtPmV4ZWNsaXN0czsKQEAg LTQ3MDcsNyArNDM4NCw3IEBAIHN0YXRpYyB2b2lkIGV4ZWNsaXN0c19yZWxlYXNlKHN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIAlleGVjbGlzdHNfc2h1dGRvd24oZW5naW5lKTsKIAog CWludGVsX2VuZ2luZV9jbGVhbnVwX2NvbW1vbihlbmdpbmUpOwotCWxyY19kZXN0cm95X3dhX2N0 eChlbmdpbmUpOworCWludGVsX2Zpbmlfd29ya2Fyb3VuZF9iYihlbmdpbmUpOwogfQogCiBzdGF0 aWMgdm9pZAotLSAKMi4yNi4yCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVz a3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9k cmktZGV2ZWwK