From nobody Sun Feb 8 16:50:13 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id EE70DC001DE for ; Thu, 13 Jul 2023 22:19:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232607AbjGMWTd (ORCPT ); Thu, 13 Jul 2023 18:19:33 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54106 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232990AbjGMWT2 (ORCPT ); Thu, 13 Jul 2023 18:19:28 -0400 Received: from mail-qk1-x736.google.com (mail-qk1-x736.google.com [IPv6:2607:f8b0:4864:20::736]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 019382D61 for ; Thu, 13 Jul 2023 15:19:22 -0700 (PDT) Received: by mail-qk1-x736.google.com with SMTP id af79cd13be357-76754b9eac0so118660385a.0 for ; Thu, 13 Jul 2023 15:19:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; t=1689286761; x=1691878761; h=references:in-reply-to:message-id:date:subject:cc:to:from:from:to :cc:subject:date:message-id:reply-to; bh=UsKEN+Y09Hp2lx9eVDvwXB+ahY7ZJK0V2XFMrcTngBk=; b=I4VsYPWPZ7kKvVRYy76QMpHbmeewRy7UlBrukG3BGFUxZrbrMvnYrFKYeGAGKyn0NG 5t4Cpb6TKA4mj9Nd9nUHP6hsYIIHIpicDJQ8OKMDGWxEz/dk6W9zyQ5UQ//l8j7s82T2 zCXzw3ckELyzYmdsbj/1AU3uzl9Qwos7P1/YY= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689286761; x=1691878761; h=references:in-reply-to:message-id:date:subject:cc:to:from :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=UsKEN+Y09Hp2lx9eVDvwXB+ahY7ZJK0V2XFMrcTngBk=; b=ZfETpWpiyQ9reYqmf3Y5dEGZzv/R5ZAXYAceAmywc7sHrZXs8B1XecXa2uEj3Y6JOb 1JKieZ+1kFXA7mQpEzYXzZeXtukuXkfrEXN2AhccsSRbY0HNzTwBszGQkY1Vxk4CKwco M2q0IxnrwWSLKotBZg+Psz3Q/f10YCKs5yTIwZX+Hwfv9oVVYMPKx1xbuA3P5HGsDhGg /WrQ5ssBfags/z9W1ORcn3jZsYnE51xw1xjJHUcmp6AFP+5yoAFkCaqulXQaQj6l6EP1 4fJoOSHH1cV62gfUIcwTp0DQTTDb8qnhdJRbcssnJmMK5MexcUeGoaKFtSV+lleLYxld em/Q== X-Gm-Message-State: ABy/qLZOY6gOdBySTThNhamvAzJdipwOL5ySp+/uJHXxoQxNgI7mqJ/P ztsW/5yvz/cz1oOMozMhcA2F5A== X-Google-Smtp-Source: APBJJlHQ+kCLYrCBqM5fpq7cTJ2zd9qCk84Jtt+II8E6E+0zQ/lq6P/39U8Xu1JtZ4FnBdVp9pj52w== X-Received: by 2002:a0c:e4c5:0:b0:637:87eb:bbba with SMTP id g5-20020a0ce4c5000000b0063787ebbbbamr2754332qvm.8.1689286760631; Thu, 13 Jul 2023 15:19:20 -0700 (PDT) Received: from stbirv-lnx-2.igp.broadcom.net ([192.19.223.252]) by smtp.gmail.com with ESMTPSA id i14-20020a0cf38e000000b006262de12a8csm427623qvk.65.2023.07.13.15.19.17 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 13 Jul 2023 15:19:20 -0700 (PDT) From: Justin Chen To: netdev@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, bcm-kernel-feedback-list@broadcom.com Cc: florian.fainelli@broadcom.com, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, robh+dt@kernel.org, krzysztof.kozlowski+dt@linaro.org, conor+dt@kernel.org, opendmb@gmail.com, andrew@lunn.ch, hkallweit1@gmail.com, linux@armlinux.org.uk, richardcochran@gmail.com, sumit.semwal@linaro.org, simon.horman@corigine.com, christian.koenig@amd.com, Justin Chen Subject: [net-next v9 03/11] net: bcmasp: Add support for ASP2.0 Ethernet controller Date: Thu, 13 Jul 2023 15:18:58 -0700 Message-Id: <1689286746-43609-4-git-send-email-justin.chen@broadcom.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1689286746-43609-1-git-send-email-justin.chen@broadcom.com> References: <1689286746-43609-1-git-send-email-justin.chen@broadcom.com> Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-256; boundary="000000000000559e73060065b9ea" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable --000000000000559e73060065b9ea MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 QWRkIHN1cHBvcnQgZm9yIHRoZSBCcm9hZGNvbSBBU1AgMi4wIEV0aGVybmV0IGNvbnRyb2xsZXIg d2hpY2ggaXMgZmlyc3QKaW50cm9kdWNlZCB3aXRoIDcyMTY1LiBUaGlzIGNvbnRyb2xsZXIgZmVh dHVyZXMgdHdvIGRpc3RpbmN0IEV0aGVybmV0CnBvcnRzIHRoYXQgY2FuIGJlIGluZGVwZW5kZW50 bHkgb3BlcmF0ZWQuCgpSZXZpZXdlZC1ieTogU2ltb24gSG9ybWFuIDxzaW1vbi5ob3JtYW5AY29y aWdpbmUuY29tPgpTaWduZWQtb2ZmLWJ5OiBGbG9yaWFuIEZhaW5lbGxpIDxmbG9yaWFuLmZhaW5l bGxpQGJyb2FkY29tLmNvbT4KU2lnbmVkLW9mZi1ieTogSnVzdGluIENoZW4gPGp1c3Rpbi5jaGVu QGJyb2FkY29tLmNvbT4KLS0tCnY5CiAgICAgICAgLSBSZXdvcmtlZCBsb2dpYyB3aGVyZSBhIHBv cnQgZmFpbHMgdG8gcmVnaXN0ZXIgZHVyaW5nIHByb2JlCiAgICAgICAgLSBTd2l0Y2ggZnJvbSBh cnJheSB0byBsaW5rZWQgbGlzdCBmb3IgaW50ZXJmYWNlcy4gVGhpcyBzaW1wbGlmaWVzCiAgICAg ICAgICB0aGUgbG9naWMgYW5kIG1ha2VzIGl0IGEgYml0IGNsZWFuZXIgdG8gZm9sbG93LgogICAg ICAgIC0gQ2hlY2sgZm9yIGNhc2Ugd2hlcmUgcmVtb3ZlIGFuZCBzaHV0ZG93biBob29rIGJvdGgg Z2V0IGNhbGxlZC4KICAgICAgICAtIFVzZSBza2JfY293X2hlYWQgaW5zdGVhZCBvZiBza2JfcmVh bGxvY19oZWFkcm9vbQogICAgICAgIC0gQWRkIHJhdGVsaW1pdCBmb3Igc29tZSBlcnIgcHJpbnRz LgoJLSBVc2UgbmFwaV9hbGxvY19za2IgaW5zdGVhZCBvZiBfX25ldGRldl9hbGxvY19za2IoKS4K CS0gUmV3b3JrZWQgc29tZSBydG5sX2xpbmtfc3RhdHM2NCBhY2NvcmRpbmcgdG8gZG9jdW1lbnRh dGlvbi4KCnY4CgktIEFkZHJlc3Mgc29tZSBjaGVja3BhdGNoIHdhcm5pbmdzCgp2NwoJLSBGaXhl ZCBsZWFraW5nIHBvcnRzX25vZGUgZGV2aWNlIG5vZGUuCgktIFNwbGl0IG91dCB0byBzbWFsbGVy IGNvbW1pdHMKCnY2CgktIEZpeGVkIGEgcmVzZXJ2ZWQgbWFjIGZpbHRlciBpbmRleGluZyBlcnJv cgoJLSBSZW1vdmVkIHR4X2xvY2sKCS0gU2ltcGxpZmllZCB0eF90aW1lb3V0IGhvb2sKCS0gUmVt b3ZlZCBnZXRfc3RhdHMKCS0gRml4ZWQgcGh5IGlvY3RsCgktIEZpeGVkIGRldiAtPiBuZGV2IHR5 cG8KCS0gRml4ZWQgc2V0X3dvbCBkb3VibGUgZGlzYWJsZQoKdjUKCS0gUmVtb3ZlIHVubmVjZXNz YXJ5IHBhcmVudGhlc2lzCgktIFVzZSBib29sIGZvciBiY21hc3BfbmV0ZmlsdF9jaGVja19kdXAo KQoKdjQKICAgICAgICAtIEFkZHJlc3Mgc3BhcnNlIHdhcm5pbmdzCiAgICAgICAgLSBGaXggb25l IG1vcmUgcmV2ZXJzZSB4bWFzIHRyZWUgdmlvbGF0aW9uCiAgICAgICAgLSBJbXByb3ZlIGVycm9y IGxvZ2ljIGZvciBiY21hc3BfbmV0ZmlsdF9nZXRfcmVnX29mZnNldCgpCgktIFJlbW92ZSBpbmxp bmVzCgp2MwogICAgICAgIC0gRml4IGxvZ2ljIGVycm9yIHdpdGggbmV0IHN0YXRzIHdoZXJlIHNv bWUgc3RhdHMgd2VyZSBtaXNzaW5nCiAgICAgICAgLSBHZW5lcmFsIGNsZWFuIHVwIGFkZHJlc3Np bmcgZm9ybWF0dGluZy9zcGVsbGluZy9jb25zaXN0ZW5jeQogICAgICAgIC0gVXNlIGRldl9lcnJf cHJvYmUgdG8gc2F2ZSBhIGZldyBMb0NzCiAgICAgICAgLSBVc2UgcHV0X3VuYWxpZ25lZCB3aGVu IHVwZGF0aW5nIG5ldCBzdGF0cwoKdjIKICAgICAgICAtIFJlcGxhY2UgYSBjb3VwbGUgZnVuY3Rp b25zIHdpdGggaGVscGVyIGZ1bmN0aW9ucwogICAgICAgIC0gRml4IGEgZmV3IFdvTCBpc3N1ZXMK CiBkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnICAgICAgICAgICAgICB8ICAg MTEgKwogZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vTWFrZWZpbGUgICAgICAgICAgICAg fCAgICAxICsKIGRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2FzcDIvTWFrZWZpbGUgICAg ICAgIHwgICAgMiArCiBkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcC5j ICAgICAgICB8ICA2OTYgKysrKysrKysrKwogZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20v YXNwMi9iY21hc3AuaCAgICAgICAgfCAgNTAzICsrKysrKysrCiAuLi4vbmV0L2V0aGVybmV0L2Jy b2FkY29tL2FzcDIvYmNtYXNwX2V0aHRvb2wuYyAgICB8ICAgNDAgKwogZHJpdmVycy9uZXQvZXRo ZXJuZXQvYnJvYWRjb20vYXNwMi9iY21hc3BfaW50Zi5jICAgfCAxMzQyICsrKysrKysrKysrKysr Kys9CisrKysKIC4uLi9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9iY21hc3BfaW50Zl9kZWZz LmggIHwgIDE5NiArKysKIDggZmlsZXMgY2hhbmdlZCwgMjc5MSBpbnNlcnRpb25zKCspCiBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9NYWtlZmls ZQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2FzcDIv YmNtYXNwLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNv bS9hc3AyL2JjbWFzcC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvZXRoZXJuZXQv YnJvYWRjb20vYXNwMi9iY21hc3BfZXRodG9vbC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9iY21hc3BfaW50Zi5jCiBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9iY21hc3BfaW50Zl9kZWZz LmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnIGIv ZHJpdmVycy9uZXQvZXRoZXJuZXQvYj0Kcm9hZGNvbS9LY29uZmlnCmluZGV4IDk0ODU4NmJmMWI1 Yi4uZDQxNjYxNDExNDVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNv bS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWcKQEAg LTI1NSw0ICsyNTUsMTUgQEAgY29uZmlnIEJOWFRfSFdNT04KIAkgIFNheSBZIGlmIHlvdSB3YW50 IHRvIGV4cG9zZSB0aGUgdGhlcm1hbCBzZW5zb3IgZGF0YSBvbiBOZXRYdHJlbWUtQy9FCiAJICBk ZXZpY2VzLCB2aWEgdGhlIGh3bW9uIHN5c2ZzIGludGVyZmFjZS4KPTIwCitjb25maWcgQkNNQVNQ CisJdHJpc3RhdGUgIkJyb2FkY29tIEFTUCAyLjAgRXRoZXJuZXQgc3VwcG9ydCIKKwlkZWZhdWx0 IEFSQ0hfQlJDTVNUQgorCWRlcGVuZHMgb24gT0YKKwlzZWxlY3QgTUlJCisJc2VsZWN0IFBIWUxJ QgorCXNlbGVjdCBNRElPX0JDTV9VTklNQUMKKwloZWxwCisJICBUaGlzIGNvbmZpZ3VyYXRpb24g ZW5hYmxlcyB0aGUgQnJvYWRjb20gQVNQIDIuMCBFdGhlcm5ldCBjb250cm9sbGVyCisJICBkcml2 ZXIgd2hpY2ggaXMgcHJlc2VudCBpbiBCcm9hZGNvbSBTVEIgU29DcyBzdWNoIGFzIDcyMTY1Lgor CiBlbmRpZiAjIE5FVF9WRU5ET1JfQlJPQURDT00KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0 aGVybmV0L2Jyb2FkY29tL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvPQpicm9hZGNv bS9NYWtlZmlsZQppbmRleCAwZGRmYjViNWQ1M2MuLmJhYzVjYjZhZDBjZCAxMDA2NDQKLS0tIGEv ZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQv ZXRoZXJuZXQvYnJvYWRjb20vTWFrZWZpbGUKQEAgLTE3LDMgKzE3LDQgQEAgb2JqLSQoQ09ORklH X0JHTUFDX0JDTUEpICs9M0QgYmdtYWMtYmNtYS5vIGJnbWFjLWJjbWEtbWRpPQpvLm8KIG9iai0k KENPTkZJR19CR01BQ19QTEFURk9STSkgKz0zRCBiZ21hYy1wbGF0Zm9ybS5vCiBvYmotJChDT05G SUdfU1lTVEVNUE9SVCkgKz0zRCBiY21zeXNwb3J0Lm8KIG9iai0kKENPTkZJR19CTlhUKSArPTNE IGJueHQvCitvYmotJChDT05GSUdfQkNNQVNQKSArPTNEIGFzcDIvCmRpZmYgLS1naXQgYS9kcml2 ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRo ZT0Kcm5ldC9icm9hZGNvbS9hc3AyL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwMC4uZTA3NTUwMzE1ZjgzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9u ZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9NYWtlZmlsZQpAQCAtMCwwICsxLDIgQEAKK29iai0k KENPTkZJR19CQ01BU1ApICs9M0QgYmNtLWFzcC5vCitiY20tYXNwLW9ianMgOj0zRCBiY21hc3Au byBiY21hc3BfaW50Zi5vIGJjbWFzcF9ldGh0b29sLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0 L2V0aGVybmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwLmMgYi9kcml2ZXJzL25ldC9ldGhlPQpybmV0 L2Jyb2FkY29tL2FzcDIvYmNtYXNwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAwLi44MzQ5NDY0MWI1NDUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9ldGhl cm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcC5jCkBAIC0wLDAgKzEsNjk2IEBACisvLyBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLyoKKyAqIEJyb2FkY29tIFNUQiBBU1AgMi4wIERy aXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAyMyBCcm9hZGNvbQorICovCisjaW5jbHVkZSA8 bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CisjaW5jbHVk ZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUg PGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxp bnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8 bGludXgvb2ZfYWRkcmVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5j bHVkZSA8bGludXgvY2xrLmg+CisKKyNpbmNsdWRlICJiY21hc3AuaCIKKyNpbmNsdWRlICJiY21h c3BfaW50Zl9kZWZzLmgiCisKK3N0YXRpYyB2b2lkIF9pbnRyMl9tYXNrX2NsZWFyKHN0cnVjdCBi Y21hc3BfcHJpdiAqcHJpdiwgdTMyIG1hc2spCit7CisJaW50cjJfY29yZV93bChwcml2LCBtYXNr LCBBU1BfSU5UUjJfTUFTS19DTEVBUik7CisJcHJpdi0+aXJxX21hc2sgJj0zRCB+bWFzazsKK30K Kworc3RhdGljIHZvaWQgX2ludHIyX21hc2tfc2V0KHN0cnVjdCBiY21hc3BfcHJpdiAqcHJpdiwg dTMyIG1hc2spCit7CisJaW50cjJfY29yZV93bChwcml2LCBtYXNrLCBBU1BfSU5UUjJfTUFTS19T RVQpOworCXByaXYtPmlycV9tYXNrIHw9M0QgbWFzazsKK30KKwordm9pZCBiY21hc3BfZW5hYmxl X3R4X2lycShzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsIGludCBlbikKK3sKKwlzdHJ1Y3QgYmNt YXNwX3ByaXYgKnByaXYgPTNEIGludGYtPnBhcmVudDsKKworCWlmIChlbikKKwkJX2ludHIyX21h c2tfY2xlYXIocHJpdiwgQVNQX0lOVFIyX1RYX0RFU0MoaW50Zi0+Y2hhbm5lbCkpOworCWVsc2UK KwkJX2ludHIyX21hc2tfc2V0KHByaXYsIEFTUF9JTlRSMl9UWF9ERVNDKGludGYtPmNoYW5uZWwp KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGJjbWFzcF9lbmFibGVfdHhfaXJxKTsKKwordm9pZCBi Y21hc3BfZW5hYmxlX3J4X2lycShzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsIGludCBlbikKK3sK KwlzdHJ1Y3QgYmNtYXNwX3ByaXYgKnByaXYgPTNEIGludGYtPnBhcmVudDsKKworCWlmIChlbikK KwkJX2ludHIyX21hc2tfY2xlYXIocHJpdiwgQVNQX0lOVFIyX1JYX0VDSChpbnRmLT5jaGFubmVs KSk7CisJZWxzZQorCQlfaW50cjJfbWFza19zZXQocHJpdiwgQVNQX0lOVFIyX1JYX0VDSChpbnRm LT5jaGFubmVsKSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChiY21hc3BfZW5hYmxlX3J4X2lycSk7 CisKK3N0YXRpYyB2b2lkIGJjbWFzcF9pbnRyMl9tYXNrX3NldF9hbGwoc3RydWN0IGJjbWFzcF9w cml2ICpwcml2KQoreworCV9pbnRyMl9tYXNrX3NldChwcml2LCAweGZmZmZmZmZmKTsKKwlwcml2 LT5pcnFfbWFzayA9M0QgMHhmZmZmZmZmZjsKK30KKworc3RhdGljIHZvaWQgYmNtYXNwX2ludHIy X2NsZWFyX2FsbChzdHJ1Y3QgYmNtYXNwX3ByaXYgKnByaXYpCit7CisJaW50cjJfY29yZV93bChw cml2LCAweGZmZmZmZmZmLCBBU1BfSU5UUjJfQ0xFQVIpOworfQorCitzdGF0aWMgdm9pZCBiY21h c3BfaW50cjJfaGFuZGxpbmcoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmLCB1MzIgc3RhdHVzKQor eworCWlmIChzdGF0dXMgJiBBU1BfSU5UUjJfUlhfRUNIKGludGYtPmNoYW5uZWwpKSB7CisJCWlm IChsaWtlbHkobmFwaV9zY2hlZHVsZV9wcmVwKCZpbnRmLT5yeF9uYXBpKSkpIHsKKwkJCWJjbWFz cF9lbmFibGVfcnhfaXJxKGludGYsIDApOworCQkJX19uYXBpX3NjaGVkdWxlX2lycW9mZigmaW50 Zi0+cnhfbmFwaSk7CisJCX0KKwl9CisKKwlpZiAoc3RhdHVzICYgQVNQX0lOVFIyX1RYX0RFU0Mo aW50Zi0+Y2hhbm5lbCkpIHsKKwkJaWYgKGxpa2VseShuYXBpX3NjaGVkdWxlX3ByZXAoJmludGYt PnR4X25hcGkpKSkgeworCQkJYmNtYXNwX2VuYWJsZV90eF9pcnEoaW50ZiwgMCk7CisJCQlfX25h cGlfc2NoZWR1bGVfaXJxb2ZmKCZpbnRmLT50eF9uYXBpKTsKKwkJfQorCX0KK30KKworc3RhdGlj IGlycXJldHVybl90IGJjbWFzcF9pc3IoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qg YmNtYXNwX3ByaXYgKnByaXYgPTNEIGRhdGE7CisJc3RydWN0IGJjbWFzcF9pbnRmICppbnRmOwor CXUzMiBzdGF0dXM7CisKKwlzdGF0dXMgPTNEIGludHIyX2NvcmVfcmwocHJpdiwgQVNQX0lOVFIy X1NUQVRVUykgJgorCQl+aW50cjJfY29yZV9ybChwcml2LCBBU1BfSU5UUjJfTUFTS19TVEFUVVMp OworCisJaW50cjJfY29yZV93bChwcml2LCBzdGF0dXMsIEFTUF9JTlRSMl9DTEVBUik7CisKKwlp ZiAodW5saWtlbHkoc3RhdHVzID0zRD0zRCAwKSkgeworCQlkZXZfd2FybigmcHJpdi0+cGRldi0+ ZGV2LCAibDIgc3B1cmlvdXMgaW50ZXJydXB0XG4iKTsKKwkJcmV0dXJuIElSUV9OT05FOworCX0K KworCS8qIEhhbmRsZSBpbnRmZXJmYWNlcyAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoaW50Ziwg JnByaXYtPmludGZzLCBsaXN0KQorCQliY21hc3BfaW50cjJfaGFuZGxpbmcoaW50Ziwgc3RhdHVz KTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKwordm9pZCBiY21hc3BfZmx1c2hfcnhfcG9y dChzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYpCit7CisJc3RydWN0IGJjbWFzcF9wcml2ICpwcml2 ID0zRCBpbnRmLT5wYXJlbnQ7CisJdTMyIG1hc2s7CisKKwlzd2l0Y2ggKGludGYtPnBvcnQpIHsK KwljYXNlIDA6CisJCW1hc2sgPTNEIEFTUF9DVFJMX1VNQUMwX0ZMVVNIX01BU0s7CisJCWJyZWFr OworCWNhc2UgMToKKwkJbWFzayA9M0QgQVNQX0NUUkxfVU1BQzFfRkxVU0hfTUFTSzsKKwkJYnJl YWs7CisJY2FzZSAyOgorCQltYXNrID0zRCBBU1BfQ1RSTF9TUEJfRkxVU0hfTUFTSzsKKwkJYnJl YWs7CisJZGVmYXVsdDoKKwkJLyogTm90IHZhbGlkIHBvcnQgKi8KKwkJcmV0dXJuOworCX0KKwor CXJ4X2N0cmxfY29yZV93bChwcml2LCBtYXNrLCBwcml2LT5od19pbmZvLT5yeF9jdHJsX2ZsdXNo KTsKK30KKworc3RhdGljIHZvaWQgYmNtYXNwX2FkZHJfdG9fdWludCh1bnNpZ25lZCBjaGFyICph ZGRyLCB1MzIgKmhpZ2gsIHUzMiAqbG93KQoreworCSpoaWdoID0zRCAodTMyKShhZGRyWzBdIDw8 IDggfCBhZGRyWzFdKTsKKwkqbG93ID0zRCAodTMyKShhZGRyWzJdIDw8IDI0IHwgYWRkclszXSA8 PCAxNiB8IGFkZHJbNF0gPDwgOCB8CisJCSAgICAgYWRkcls1XSk7Cit9CisKK3N0YXRpYyB2b2lk IGJjbWFzcF9zZXRfbWRhX2ZpbHRlcihzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsCisJCQkJICBj b25zdCB1bnNpZ25lZCBjaGFyICphZGRyLAorCQkJCSAgdW5zaWduZWQgY2hhciAqbWFzaywKKwkJ CQkgIHVuc2lnbmVkIGludCBpKQoreworCXN0cnVjdCBiY21hc3BfcHJpdiAqcHJpdiA9M0QgaW50 Zi0+cGFyZW50OworCXUzMiBhZGRyX2gsIGFkZHJfbCwgbWFza19oLCBtYXNrX2w7CisKKwkvKiBT ZXQgbG9jYWwgY29weSAqLworCWV0aGVyX2FkZHJfY29weShwcml2LT5tZGFfZmlsdGVyc1tpXS5t YXNrLCBtYXNrKTsKKwlldGhlcl9hZGRyX2NvcHkocHJpdi0+bWRhX2ZpbHRlcnNbaV0uYWRkciwg YWRkcik7CisKKwkvKiBXcml0ZSB0byBIVyAqLworCWJjbWFzcF9hZGRyX3RvX3VpbnQocHJpdi0+ bWRhX2ZpbHRlcnNbaV0ubWFzaywgJm1hc2tfaCwgJm1hc2tfbCk7CisJYmNtYXNwX2FkZHJfdG9f dWludChwcml2LT5tZGFfZmlsdGVyc1tpXS5hZGRyLCAmYWRkcl9oLCAmYWRkcl9sKTsKKwlyeF9m aWx0ZXJfY29yZV93bChwcml2LCBhZGRyX2gsIEFTUF9SWF9GSUxURVJfTURBX1BBVF9IKGkpKTsK KwlyeF9maWx0ZXJfY29yZV93bChwcml2LCBhZGRyX2wsIEFTUF9SWF9GSUxURVJfTURBX1BBVF9M KGkpKTsKKwlyeF9maWx0ZXJfY29yZV93bChwcml2LCBtYXNrX2gsIEFTUF9SWF9GSUxURVJfTURB X01TS19IKGkpKTsKKwlyeF9maWx0ZXJfY29yZV93bChwcml2LCBtYXNrX2wsIEFTUF9SWF9GSUxU RVJfTURBX01TS19MKGkpKTsKK30KKworc3RhdGljIHZvaWQgYmNtYXNwX2VuX21kYV9maWx0ZXIo c3RydWN0IGJjbWFzcF9pbnRmICppbnRmLCBib29sIGVuLAorCQkJCSB1bnNpZ25lZCBpbnQgaSkK K3sKKwlzdHJ1Y3QgYmNtYXNwX3ByaXYgKnByaXYgPTNEIGludGYtPnBhcmVudDsKKworCWlmIChw cml2LT5tZGFfZmlsdGVyc1tpXS5lbiA9M0Q9M0QgZW4pCisJCXJldHVybjsKKworCXByaXYtPm1k YV9maWx0ZXJzW2ldLmVuID0zRCBlbjsKKwlwcml2LT5tZGFfZmlsdGVyc1tpXS5wb3J0ID0zRCBp bnRmLT5wb3J0OworCisJcnhfZmlsdGVyX2NvcmVfd2wocHJpdiwgKChpbnRmLT5jaGFubmVsICsg OCkgfAorCQkJICAoZW4gPDwgQVNQX1JYX0ZJTFRFUl9NREFfQ0ZHX0VOX1NISUZUKSB8CisJCQkg IEFTUF9SWF9GSUxURVJfTURBX0NGR19VTUNfU0VMKGludGYtPnBvcnQpKSwKKwkJCSAgQVNQX1JY X0ZJTFRFUl9NREFfQ0ZHKGkpKTsKK30KKworLyogVGhlcmUgYXJlIDMyIE1EQSBmaWx0ZXJzIHNo YXJlZCBiZXR3ZWVuIGFsbCBwb3J0cywgd2UgcmVzZXJ2ZSA0IGZpbHRlcnM9CiBwZXIKKyAqIHBv cnQgZm9yIHRoZSBmb2xsb3dpbmcuCisgKiAtIFByb21pc2M6IEZpbHRlciB0byBhbGxvdyBhbGwg cGFja2V0cyB3aGVuIHByb21pc2MgaXMgZW5hYmxlZAorICogLSBBbGwgTXVsdGljYXN0CisgKiAt IEJyb2FkY2FzdAorICogLSBPd24gYWRkcmVzcworICoKKyAqIFRoZSByZXNlcnZlZCBmaWx0ZXJz IGFyZSBpZGVudGlmaWVkIGFzIHNvLgorICogLSBQcm9taXNjOiAoaW5kZXggKiA0KSArIDAKKyAq IC0gQWxsIE11bHRpY2FzdDogKGluZGV4ICogNCkgKyAxCisgKiAtIEJyb2FkY2FzdDogKGluZGV4 ICogNCkgKyAyCisgKiAtIE93biBhZGRyZXNzOiAoaW5kZXggKiA0KSArIDMKKyAqLworZW51bSBh c3BfcnhfZmlsdGVyX2lkIHsKKwlBU1BfUlhfRklMVEVSX01EQV9QUk9NSVNDID0zRCAwLAorCUFT UF9SWF9GSUxURVJfTURBX0FMTE1VTFRJLAorCUFTUF9SWF9GSUxURVJfTURBX0JST0FEQ0FTVCwK KwlBU1BfUlhfRklMVEVSX01EQV9PV05fQUREUiwKKwlBU1BfUlhfRklMVEVSX01EQV9SRVNfTUFY LAorfTsKKworI2RlZmluZSBBU1BfUlhfRklMVF9NREEoaW50ZiwgbmFtZSkJKCgoaW50ZiktPmlu ZGV4ICogXAorCQkJCQkgIEFTUF9SWF9GSUxURVJfTURBX1JFU19NQVgpIFwKKwkJCQkJICsgQVNQ X1JYX0ZJTFRFUl9NREFfIyNuYW1lKQorCitzdGF0aWMgaW50IGJjbWFzcF90b3RhbF9yZXNfbWRh X2NudChzdHJ1Y3QgYmNtYXNwX3ByaXYgKnByaXYpCit7CisJcmV0dXJuIGxpc3RfY291bnRfbm9k ZXMoJnByaXYtPmludGZzKSAqIEFTUF9SWF9GSUxURVJfTURBX1JFU19NQVg7Cit9CisKK3ZvaWQg YmNtYXNwX3NldF9wcm9taXNjKHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZiwgYm9vbCBlbikKK3sK Kwl1bnNpZ25lZCBpbnQgaSA9M0QgQVNQX1JYX0ZJTFRfTURBKGludGYsIFBST01JU0MpOworCXVu c2lnbmVkIGNoYXIgcHJvbWlzY1tFVEhfQUxFTl07CisKKwlldGhfemVyb19hZGRyKHByb21pc2Mp OworCS8qIFNldCBtYXNrIHRvIDAwOjAwOjAwOjAwOjAwOjAwIHRvIG1hdGNoIGFsbCBwYWNrZXRz ICovCisJYmNtYXNwX3NldF9tZGFfZmlsdGVyKGludGYsIHByb21pc2MsIHByb21pc2MsIGkpOwor CWJjbWFzcF9lbl9tZGFfZmlsdGVyKGludGYsIGVuLCBpKTsKK30KKwordm9pZCBiY21hc3Bfc2V0 X2FsbG11bHRpKHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZiwgYm9vbCBlbikKK3sKKwl1bnNpZ25l ZCBjaGFyIGFsbG11bHRpW10gPTNEIHsweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw fTsKKwl1bnNpZ25lZCBpbnQgaSA9M0QgQVNQX1JYX0ZJTFRfTURBKGludGYsIEFMTE1VTFRJKTsK KworCS8qIFNldCBtYXNrIHRvIDAxOjAwOjAwOjAwOjAwOjAwIHRvIG1hdGNoIGFsbCBtdWx0aWNh c3QgKi8KKwliY21hc3Bfc2V0X21kYV9maWx0ZXIoaW50ZiwgYWxsbXVsdGksIGFsbG11bHRpLCBp KTsKKwliY21hc3BfZW5fbWRhX2ZpbHRlcihpbnRmLCBlbiwgaSk7Cit9CisKK3ZvaWQgYmNtYXNw X3NldF9icm9hZChzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsIGJvb2wgZW4pCit7CisJdW5zaWdu ZWQgaW50IGkgPTNEIEFTUF9SWF9GSUxUX01EQShpbnRmLCBCUk9BRENBU1QpOworCXVuc2lnbmVk IGNoYXIgYWRkcltFVEhfQUxFTl07CisKKwlldGhfYnJvYWRjYXN0X2FkZHIoYWRkcik7CisJYmNt YXNwX3NldF9tZGFfZmlsdGVyKGludGYsIGFkZHIsIGFkZHIsIGkpOworCWJjbWFzcF9lbl9tZGFf ZmlsdGVyKGludGYsIGVuLCBpKTsKK30KKwordm9pZCBiY21hc3Bfc2V0X29hZGRyKHN0cnVjdCBi Y21hc3BfaW50ZiAqaW50ZiwgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwKKwkJICAgICAgYm9v bCBlbikKK3sKKwl1bnNpZ25lZCBjaGFyIG1hc2tbXSA9M0QgezB4ZmYsIDB4ZmYsIDB4ZmYsIDB4 ZmYsIDB4ZmYsIDB4ZmZ9OworCXVuc2lnbmVkIGludCBpID0zRCBBU1BfUlhfRklMVF9NREEoaW50 ZiwgT1dOX0FERFIpOworCisJYmNtYXNwX3NldF9tZGFfZmlsdGVyKGludGYsIGFkZHIsIG1hc2ss IGkpOworCWJjbWFzcF9lbl9tZGFfZmlsdGVyKGludGYsIGVuLCBpKTsKK30KKwordm9pZCBiY21h c3BfZGlzYWJsZV9hbGxfZmlsdGVycyhzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYpCit7CisJc3Ry dWN0IGJjbWFzcF9wcml2ICpwcml2ID0zRCBpbnRmLT5wYXJlbnQ7CisJdW5zaWduZWQgaW50IGk7 CisJaW50IHJlc19jb3VudDsKKworCXJlc19jb3VudCA9M0QgYmNtYXNwX3RvdGFsX3Jlc19tZGFf Y250KGludGYtPnBhcmVudCk7CisKKwkvKiBEaXNhYmxlIGFsbCBmaWx0ZXJzIGhlbGQgYnkgdGhp cyBwb3J0ICovCisJZm9yIChpID0zRCByZXNfY291bnQ7IGkgPCBOVU1fTURBX0ZJTFRFUlM7IGkr KykgeworCQlpZiAocHJpdi0+bWRhX2ZpbHRlcnNbaV0uZW4gJiYKKwkJICAgIHByaXYtPm1kYV9m aWx0ZXJzW2ldLnBvcnQgPTNEPTNEIGludGYtPnBvcnQpCisJCQliY21hc3BfZW5fbWRhX2ZpbHRl cihpbnRmLCAwLCBpKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgYmNtYXNwX2NvbWJpbmVfc2V0X2Zp bHRlcihzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsCisJCQkJICAgICB1bnNpZ25lZCBjaGFyICph ZGRyLCB1bnNpZ25lZCBjaGFyICptYXNrLAorCQkJCSAgICAgaW50IGkpCit7CisJc3RydWN0IGJj bWFzcF9wcml2ICpwcml2ID0zRCBpbnRmLT5wYXJlbnQ7CisJdTY0IGFkZHIxLCBhZGRyMiwgbWFz azEsIG1hc2syLCBtYXNrMzsKKworCS8qIFN3aXRjaCB0byB1NjQgdG8gaGVscCB3aXRoIHRoZSBj YWxjdWxhdGlvbnMgKi8KKwlhZGRyMSA9M0QgZXRoZXJfYWRkcl90b191NjQocHJpdi0+bWRhX2Zp bHRlcnNbaV0uYWRkcik7CisJbWFzazEgPTNEIGV0aGVyX2FkZHJfdG9fdTY0KHByaXYtPm1kYV9m aWx0ZXJzW2ldLm1hc2spOworCWFkZHIyID0zRCBldGhlcl9hZGRyX3RvX3U2NChhZGRyKTsKKwlt YXNrMiA9M0QgZXRoZXJfYWRkcl90b191NjQobWFzayk7CisKKwkvKiBDaGVjayBpZiBvbmUgZmls dGVyIHJlc2lkZXMgd2l0aGluIHRoZSBvdGhlciAqLworCW1hc2szID0zRCBtYXNrMSAmIG1hc2sy OworCWlmIChtYXNrMyA9M0Q9M0QgbWFzazEgJiYgKChhZGRyMSAmIG1hc2sxKSA9M0Q9M0QgKGFk ZHIyICYgbWFzazEpKSkgeworCQkvKiBGaWx0ZXIgMiByZXNpZGVzIHdpdGhpbiBmaWx0ZXIgMSwg c28gZXZlcnl0aGluZyBpcyBnb29kICovCisJCXJldHVybiAwOworCX0gZWxzZSBpZiAobWFzazMg PTNEPTNEIG1hc2syICYmICgoYWRkcjEgJiBtYXNrMikgPTNEPTNEIChhZGRyMiAmIG1hc2syKSk9 CikgeworCQkvKiBGaWx0ZXIgMSByZXNpZGVzIHdpdGhpbiBmaWx0ZXIgMiwgc28gc3dhcCBmaWx0 ZXJzICovCisJCWJjbWFzcF9zZXRfbWRhX2ZpbHRlcihpbnRmLCBhZGRyLCBtYXNrLCBpKTsKKwkJ cmV0dXJuIDA7CisJfQorCisJLyogVW5hYmxlIHRvIGNvbWJpbmUgKi8KKwlyZXR1cm4gLUVJTlZB TDsKK30KKworaW50IGJjbWFzcF9zZXRfZW5fbWRhX2ZpbHRlcihzdHJ1Y3QgYmNtYXNwX2ludGYg KmludGYsIHVuc2lnbmVkIGNoYXIgKmFkZHIsCisJCQkgICAgIHVuc2lnbmVkIGNoYXIgKm1hc2sp Cit7CisJc3RydWN0IGJjbWFzcF9wcml2ICpwcml2ID0zRCBpbnRmLT5wYXJlbnQ7CisJaW50IHJl dCwgcmVzX2NvdW50OworCXVuc2lnbmVkIGludCBpOworCisJcmVzX2NvdW50ID0zRCBiY21hc3Bf dG90YWxfcmVzX21kYV9jbnQoaW50Zi0+cGFyZW50KTsKKworCWZvciAoaSA9M0QgcmVzX2NvdW50 OyBpIDwgTlVNX01EQV9GSUxURVJTOyBpKyspIHsKKwkJLyogSWYgZmlsdGVyIG5vdCBlbmFibGVk IG9yIGJlbG9uZ3MgdG8gYW5vdGhlciBwb3J0IHNraXAgKi8KKwkJaWYgKCFwcml2LT5tZGFfZmls dGVyc1tpXS5lbiB8fAorCQkgICAgcHJpdi0+bWRhX2ZpbHRlcnNbaV0ucG9ydCAhPTNEIGludGYt PnBvcnQpCisJCQljb250aW51ZTsKKworCQkvKiBBdHRlbXB0IHRvIGNvbWJpbmUgZmlsdGVycyAq LworCQlyZXQgPTNEIGJjbWFzcF9jb21iaW5lX3NldF9maWx0ZXIoaW50ZiwgYWRkciwgbWFzaywg aSk7CisJCWlmICghcmV0KQorCQkJcmV0dXJuIDA7CisJfQorCisJLyogQ3JlYXRlIG5ldyBmaWx0 ZXIgaWYgcG9zc2libGUgKi8KKwlmb3IgKGkgPTNEIHJlc19jb3VudDsgaSA8IE5VTV9NREFfRklM VEVSUzsgaSsrKSB7CisJCWlmIChwcml2LT5tZGFfZmlsdGVyc1tpXS5lbikKKwkJCWNvbnRpbnVl OworCisJCWJjbWFzcF9zZXRfbWRhX2ZpbHRlcihpbnRmLCBhZGRyLCBtYXNrLCBpKTsKKwkJYmNt YXNwX2VuX21kYV9maWx0ZXIoaW50ZiwgMSwgaSk7CisJCXJldHVybiAwOworCX0KKworCS8qIE5v IHJvb20gZm9yIG5ldyBmaWx0ZXIgKi8KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIHZv aWQgYmNtYXNwX2NvcmVfaW5pdF9maWx0ZXJzKHN0cnVjdCBiY21hc3BfcHJpdiAqcHJpdikKK3sK Kwl1bnNpZ25lZCBpbnQgaTsKKworCS8qIERpc2FibGUgYWxsIGZpbHRlcnMgYW5kIHJlc2V0IHNv ZnR3YXJlIHZpZXcgc2luY2UgdGhlIEhXCisJICogY2FuIGxvc2UgY29udGV4dCB3aGlsZSBpbiBk ZWVwIHNsZWVwIHN1c3BlbmQgc3RhdGVzCisJICovCisJZm9yIChpID0zRCAwOyBpIDwgTlVNX01E QV9GSUxURVJTOyBpKyspIHsKKwkJcnhfZmlsdGVyX2NvcmVfd2wocHJpdiwgMHgwLCBBU1BfUlhf RklMVEVSX01EQV9DRkcoaSkpOworCQlwcml2LT5tZGFfZmlsdGVyc1tpXS5lbiA9M0QgMDsKKwl9 CisKKwkvKiBUb3AgbGV2ZWwgZmlsdGVyIGVuYWJsZSBiaXQgc2hvdWxkIGJlIGVuYWJsZWQgYXQg YWxsIHRpbWVzLCBzZXQKKwkgKiBHRU5fV0FLRV9DTEVBUiB0byBjbGVhciB0aGUgbmV0d29yayBm aWx0ZXIgd2FrZS11cCB3aGljaCB3b3VsZAorCSAqIG90aGVyd2lzZSBiZSBzdGlja3kKKwkgKi8K KwlyeF9maWx0ZXJfY29yZV93bChwcml2LCAoQVNQX1JYX0ZJTFRFUl9PUFVUX0VOIHwKKwkJCSAg QVNQX1JYX0ZJTFRFUl9NREFfRU4gfAorCQkJICBBU1BfUlhfRklMVEVSX0dFTl9XS19DTFIgfAor CQkJICBBU1BfUlhfRklMVEVSX05UX0ZMVF9FTiksCisJCQkgIEFTUF9SWF9GSUxURVJfQkxLX0NU UkwpOworfQorCisvKiBBU1AgY29yZSBpbml0aWFsaXphdGlvbiAqLworc3RhdGljIHZvaWQgYmNt YXNwX2NvcmVfaW5pdChzdHJ1Y3QgYmNtYXNwX3ByaXYgKnByaXYpCit7CisJdHhfYW5hbHl0aWNz X2NvcmVfd2wocHJpdiwgMHgwLCBBU1BfVFhfQU5BTFlUSUNTX0NUUkwpOworCXJ4X2FuYWx5dGlj c19jb3JlX3dsKHByaXYsIDB4NCwgQVNQX1JYX0FOQUxZVElDU19DVFJMKTsKKworCXJ4X2VkcGt0 X2NvcmVfd2wocHJpdiwgKEFTUF9FRFBLVF9IRFJfU1pfMTI4IDw8IEFTUF9FRFBLVF9IRFJfU1pf U0hJRlQpLAorCQkJIEFTUF9FRFBLVF9IRFJfQ0ZHKTsKKwlyeF9lZHBrdF9jb3JlX3dsKHByaXYs CisJCQkgKEFTUF9FRFBLVF9FTkRJX0JUX1NXUF9XRCA8PCBBU1BfRURQS1RfRU5ESV9ERVNDX1NI SUZUKSwKKwkJCSBBU1BfRURQS1RfRU5ESSk7CisKKwlyeF9lZHBrdF9jb3JlX3dsKHByaXYsIDB4 MWIsIEFTUF9FRFBLVF9CVVJTVF9CVUZfUFNDQUxfVE9VVCk7CisJcnhfZWRwa3RfY29yZV93bChw cml2LCAweDNlOCwgQVNQX0VEUEtUX0JVUlNUX0JVRl9XUklURV9UT1VUKTsKKwlyeF9lZHBrdF9j b3JlX3dsKHByaXYsIDB4M2U4LCBBU1BfRURQS1RfQlVSU1RfQlVGX1JFQURfVE9VVCk7CisKKwly eF9lZHBrdF9jb3JlX3dsKHByaXYsIEFTUF9FRFBLVF9FTkFCTEVfRU4sIEFTUF9FRFBLVF9FTkFC TEUpOworCisJLyogRGlzYWJsZSBhbmQgY2xlYXIgYm90aCBVbmlNQUMncyB3YWtlLXVwIGludGVy cnVwdHMgdG8gYXZvaWQKKwkgKiBzdGlja3kgaW50ZXJydXB0cy4KKwkgKi8KKwlfaW50cjJfbWFz a19zZXQocHJpdiwgQVNQX0lOVFIyX1VNQzBfV0FLRSB8IEFTUF9JTlRSMl9VTUMxX1dBS0UpOwor CWludHIyX2NvcmVfd2wocHJpdiwgQVNQX0lOVFIyX1VNQzBfV0FLRSB8IEFTUF9JTlRSMl9VTUMx X1dBS0UsCisJCSAgICAgIEFTUF9JTlRSMl9DTEVBUik7Cit9CisKK3N0YXRpYyB2b2lkIGJjbWFz cF9jb3JlX2Nsb2NrX3NlbGVjdChzdHJ1Y3QgYmNtYXNwX3ByaXYgKnByaXYsIGJvb2wgc2xvdykK K3sKKwl1MzIgcmVnOworCisJcmVnID0zRCBjdHJsX2NvcmVfcmwocHJpdiwgQVNQX0NUUkxfQ09S RV9DTE9DS19TRUxFQ1QpOworCWlmIChzbG93KQorCQlyZWcgJj0zRCB+QVNQX0NUUkxfQ09SRV9D TE9DS19TRUxFQ1RfTUFJTjsKKwllbHNlCisJCXJlZyB8PTNEIEFTUF9DVFJMX0NPUkVfQ0xPQ0tf U0VMRUNUX01BSU47CisJY3RybF9jb3JlX3dsKHByaXYsIHJlZywgQVNQX0NUUkxfQ09SRV9DTE9D S19TRUxFQ1QpOworfQorCitzdGF0aWMgdm9pZCBiY21hc3BfY29yZV9jbG9ja19zZXRfbGwoc3Ry dWN0IGJjbWFzcF9wcml2ICpwcml2LCB1MzIgY2xyLCB1Mz0KMiBzZXQpCit7CisJdTMyIHJlZzsK KworCXJlZyA9M0QgY3RybF9jb3JlX3JsKHByaXYsIEFTUF9DVFJMX0NMT0NLX0NUUkwpOworCXJl ZyAmPTNEIH5jbHI7CisJcmVnIHw9M0Qgc2V0OworCWN0cmxfY29yZV93bChwcml2LCByZWcsIEFT UF9DVFJMX0NMT0NLX0NUUkwpOworCisJcmVnID0zRCBjdHJsX2NvcmVfcmwocHJpdiwgQVNQX0NU UkxfU0NSQVRDSF8wKTsKKwlyZWcgJj0zRCB+Y2xyOworCXJlZyB8PTNEIHNldDsKKwljdHJsX2Nv cmVfd2wocHJpdiwgcmVnLCBBU1BfQ1RSTF9TQ1JBVENIXzApOworfQorCitzdGF0aWMgdm9pZCBi Y21hc3BfY29yZV9jbG9ja19zZXQoc3RydWN0IGJjbWFzcF9wcml2ICpwcml2LCB1MzIgY2xyLCB1 MzIgcz0KZXQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZl KCZwcml2LT5jbGtfbG9jaywgZmxhZ3MpOworCWJjbWFzcF9jb3JlX2Nsb2NrX3NldF9sbChwcml2 LCBjbHIsIHNldCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+Y2xrX2xvY2ssIGZs YWdzKTsKK30KKwordm9pZCBiY21hc3BfY29yZV9jbG9ja19zZXRfaW50ZihzdHJ1Y3QgYmNtYXNw X2ludGYgKmludGYsIGJvb2wgZW4pCit7CisJdTMyIGludGZfbWFzayA9M0QgQVNQX0NUUkxfQ0xP Q0tfQ1RSTF9BU1BfUkdNSUlfRElTKGludGYtPnBvcnQpOworCXN0cnVjdCBiY21hc3BfcHJpdiAq cHJpdiA9M0QgaW50Zi0+cGFyZW50OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHJlZzsK KworCS8qIFdoZW4gZW5hYmxpbmcgYW4gaW50ZXJmYWNlLCBpZiB0aGUgUlggb3IgVFggY2xvY2tz IHdlcmUgbm90IGVuYWJsZWQsCisJICogZW5hYmxlIHRoZW0uIENvbnZlcnNlbHksIHdoaWxlIGRp c2FibGluZyBhbiBpbnRlcmZhY2UsIGlmIHRoaXMgaXMKKwkgKiB0aGUgbGFzdCBvbmUgZW5hYmxl ZCwgd2UgY2FuIHR1cm4gb2ZmIHRoZSBzaGFyZWQgUlggYW5kIFRYIGNsb2NrcyBhcworCSAqIHdl bGwuIFdlIGNvbnRyb2wgZW5hYmxlIGJpdHMgd2hpY2ggaXMgd2h5IHdlIHRlc3QgZm9yIGVxdWFs aXR5IG9uCisJICogdGhlIFJHTUlJIGNsb2NrIGJpdCBtYXNrLgorCSAqLworCXNwaW5fbG9ja19p cnFzYXZlKCZwcml2LT5jbGtfbG9jaywgZmxhZ3MpOworCWlmIChlbikgeworCQlpbnRmX21hc2sg fD0zRCBBU1BfQ1RSTF9DTE9DS19DVFJMX0FTUF9UWF9ESVNBQkxFIHwKKwkJCSAgICAgQVNQX0NU UkxfQ0xPQ0tfQ1RSTF9BU1BfUlhfRElTQUJMRTsKKwkJYmNtYXNwX2NvcmVfY2xvY2tfc2V0X2xs KHByaXYsIGludGZfbWFzaywgMCk7CisJfSBlbHNlIHsKKwkJcmVnID0zRCBjdHJsX2NvcmVfcmwo cHJpdiwgQVNQX0NUUkxfU0NSQVRDSF8wKSB8IGludGZfbWFzazsKKwkJaWYgKChyZWcgJiBBU1Bf Q1RSTF9DTE9DS19DVFJMX0FTUF9SR01JSV9NQVNLKSA9M0Q9M0QKKwkJICAgIEFTUF9DVFJMX0NM T0NLX0NUUkxfQVNQX1JHTUlJX01BU0spCisJCQlpbnRmX21hc2sgfD0zRCBBU1BfQ1RSTF9DTE9D S19DVFJMX0FTUF9UWF9ESVNBQkxFIHwKKwkJCQkgICAgIEFTUF9DVFJMX0NMT0NLX0NUUkxfQVNQ X1JYX0RJU0FCTEU7CisJCWJjbWFzcF9jb3JlX2Nsb2NrX3NldF9sbChwcml2LCAwLCBpbnRmX21h c2spOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5jbGtfbG9jaywgZmxhZ3Mp OworfQorCitzdGF0aWMgc3RydWN0IGJjbWFzcF9od19pbmZvIHYyMF9od19pbmZvID0zRCB7CisJ LnJ4X2N0cmxfZmx1c2ggPTNEIEFTUF9SWF9DVFJMX0ZMVVNILAorCS51bWFjMmZiID0zRCBVTUFD MkZCX09GRlNFVCwKKwkucnhfY3RybF9mYl9vdXRfZnJhbWVfY291bnQgPTNEIEFTUF9SWF9DVFJM X0ZCX09VVF9GUkFNRV9DT1VOVCwKKwkucnhfY3RybF9mYl9maWx0X291dF9mcmFtZV9jb3VudCA9 M0QgQVNQX1JYX0NUUkxfRkJfRklMVF9PVVRfRlJBTUVfQ09VTlQsCisJLnJ4X2N0cmxfZmJfcnhf Zmlmb19kZXB0aCA9M0QgQVNQX1JYX0NUUkxfRkJfUlhfRklGT19ERVBUSCwKK307CisKK3N0YXRp YyBjb25zdCBzdHJ1Y3QgYmNtYXNwX3BsYXRfZGF0YSB2MjBfcGxhdF9kYXRhID0zRCB7CisJLmh3 X2luZm8gPTNEICZ2MjBfaHdfaW5mbywKK307CisKK3N0YXRpYyBzdHJ1Y3QgYmNtYXNwX2h3X2lu Zm8gdjIxX2h3X2luZm8gPTNEIHsKKwkucnhfY3RybF9mbHVzaCA9M0QgQVNQX1JYX0NUUkxfRkxV U0hfMl8xLAorCS51bWFjMmZiID0zRCBVTUFDMkZCX09GRlNFVF8yXzEsCisJLnJ4X2N0cmxfZmJf b3V0X2ZyYW1lX2NvdW50ID0zRCBBU1BfUlhfQ1RSTF9GQl9PVVRfRlJBTUVfQ09VTlRfMl8xLAor CS5yeF9jdHJsX2ZiX2ZpbHRfb3V0X2ZyYW1lX2NvdW50ID0zRAorCQlBU1BfUlhfQ1RSTF9GQl9G SUxUX09VVF9GUkFNRV9DT1VOVF8yXzEsCisJLnJ4X2N0cmxfZmJfcnhfZmlmb19kZXB0aCA9M0Qg QVNQX1JYX0NUUkxfRkJfUlhfRklGT19ERVBUSF8yXzEsCit9OworCitzdGF0aWMgY29uc3Qgc3Ry dWN0IGJjbWFzcF9wbGF0X2RhdGEgdjIxX3BsYXRfZGF0YSA9M0QgeworCS5od19pbmZvID0zRCAm djIxX2h3X2luZm8sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBiY21h c3Bfb2ZfbWF0Y2hbXSA9M0QgeworCXsgLmNvbXBhdGlibGUgPTNEICJicmNtLGFzcC12Mi4wIiwg LmRhdGEgPTNEICZ2MjBfcGxhdF9kYXRhIH0sCisJeyAuY29tcGF0aWJsZSA9M0QgImJyY20sYXNw LXYyLjEiLCAuZGF0YSA9M0QgJnYyMV9wbGF0X2RhdGEgfSwKKwl7IC8qIHNlbnRpbmVsICovIH0s Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgYmNtYXNwX29mX21hdGNoKTsKKworc3RhdGlj IGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYmNtYXNwX21kaW9fb2ZfbWF0Y2hbXSA9M0Qgewor CXsgLmNvbXBhdGlibGUgPTNEICJicmNtLGFzcC12Mi4xLW1kaW8iLCB9LAorCXsgLmNvbXBhdGli bGUgPTNEICJicmNtLGFzcC12Mi4wLW1kaW8iLCB9LAorCXsgLyogc2VudGluZWwgKi8gfSwKK307 CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBiY21hc3BfbWRpb19vZl9tYXRjaCk7CisKK3N0YXRp YyB2b2lkIGJjbWFzcF9yZW1vdmVfaW50ZnMoc3RydWN0IGJjbWFzcF9wcml2ICpwcml2KQorewor CXN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZiwgKm47CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3Nh ZmUoaW50ZiwgbiwgJnByaXYtPmludGZzLCBsaXN0KSB7CisJCWxpc3RfZGVsKCZpbnRmLT5saXN0 KTsKKwkJYmNtYXNwX2ludGVyZmFjZV9kZXN0cm95KGludGYpOworCX0KK30KKworc3RhdGljIGlu dCBiY21hc3BfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qg ZGV2aWNlX25vZGUgKnBvcnRzX25vZGUsICppbnRmX25vZGU7CisJY29uc3Qgc3RydWN0IGJjbWFz cF9wbGF0X2RhdGEgKnBkYXRhOworCXN0cnVjdCBkZXZpY2UgKmRldiA9M0QgJnBkZXYtPmRldjsK KwlzdHJ1Y3QgYmNtYXNwX3ByaXYgKnByaXY7CisJc3RydWN0IGJjbWFzcF9pbnRmICppbnRmOwor CWludCByZXQgPTNEIDAsIGNvdW50ID0zRCAwOworCXVuc2lnbmVkIGludCBpOworCisJcHJpdiA9 M0QgZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFw cml2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXByaXYtPmlycSA9M0QgcGxhdGZvcm1fZ2V0X2ly cShwZGV2LCAwKTsKKwlpZiAocHJpdi0+aXJxIDw9M0QgMCkKKwkJcmV0dXJuIGRldl9lcnJfcHJv YmUoZGV2LCAtRUlOVkFMLCAiaW52YWxpZCBpbnRlcnJ1cHRcbiIpOworCisJcHJpdi0+Y2xrID0z RCBkZXZtX2Nsa19nZXRfb3B0aW9uYWxfZW5hYmxlZChkZXYsICJzd19hc3AiKTsKKwlpZiAoSVNf RVJSKHByaXYtPmNsaykpCisJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihwcml2 LT5jbGspLAorCQkJCSAgICAgImZhaWxlZCB0byByZXF1ZXN0IGNsb2NrXG4iKTsKKworCS8qIEJh c2UgZnJvbSBwYXJlbnQgbm9kZSAqLworCXByaXYtPmJhc2UgPTNEIGRldm1fcGxhdGZvcm1faW9y ZW1hcF9yZXNvdXJjZShwZGV2LCAwKTsKKwlpZiAoSVNfRVJSKHByaXYtPmJhc2UpKQorCQlyZXR1 cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHJpdi0+YmFzZSksICJmYWlsZWQgdG8gaW9t YXBcbiIpOworCisJcmV0ID0zRCBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KCZwZGV2LT5kZXYs IERNQV9CSVRfTUFTSyg0MCkpOworCWlmIChyZXQpCisJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRl diwgcmV0LCAidW5hYmxlIHRvIHNldCBETUEgbWFzazogJWRcbiIsIHJldCk7CisKKwlkZXZfc2V0 X2RydmRhdGEoJnBkZXYtPmRldiwgcHJpdik7CisJcHJpdi0+cGRldiA9M0QgcGRldjsKKwlzcGlu X2xvY2tfaW5pdCgmcHJpdi0+bWRhX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZwcml2LT5jbGtf bG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJnByaXYtPmludGZzKTsKKworCXBkYXRhID0zRCBkZXZp Y2VfZ2V0X21hdGNoX2RhdGEoJnBkZXYtPmRldik7CisJaWYgKCFwZGF0YSkKKwkJcmV0dXJuIGRl dl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLCAidW5hYmxlIHRvIGZpbmQgcGxhdGZvcm0gZGF0YVxu Iik7CisKKwlwcml2LT5od19pbmZvID0zRCBwZGF0YS0+aHdfaW5mbzsKKworCS8qIEVuYWJsZSBh bGwgY2xvY2tzIHRvIGVuc3VyZSBzdWNjZXNzZnVsIHByb2JpbmcgKi8KKwliY21hc3BfY29yZV9j bG9ja19zZXQocHJpdiwgQVNQX0NUUkxfQ0xPQ0tfQ1RSTF9BU1BfQUxMX0RJU0FCTEUsIDApOwor CisJLyogU3dpdGNoIHRvIHRoZSBtYWluIGNsb2NrICovCisJYmNtYXNwX2NvcmVfY2xvY2tfc2Vs ZWN0KHByaXYsIGZhbHNlKTsKKworCWJjbWFzcF9pbnRyMl9tYXNrX3NldF9hbGwocHJpdik7CisJ YmNtYXNwX2ludHIyX2NsZWFyX2FsbChwcml2KTsKKworCXJldCA9M0QgZGV2bV9yZXF1ZXN0X2ly cSgmcGRldi0+ZGV2LCBwcml2LT5pcnEsIGJjbWFzcF9pc3IsIDAsCisJCQkgICAgICAgcGRldi0+ bmFtZSwgcHJpdik7CisJaWYgKHJldCkKKwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQs ICJmYWlsZWQgdG8gcmVxdWVzdCBBU1AgaW50ZXJydXB0OiAlZCIsIHJlPQp0KTsKKworCS8qIFJl Z2lzdGVyIG1kaW8gY2hpbGQgbm9kZXMgKi8KKwlvZl9wbGF0Zm9ybV9wb3B1bGF0ZShkZXYtPm9m X25vZGUsIGJjbWFzcF9tZGlvX29mX21hdGNoLCBOVUxMLCBkZXYpOworCisJLyogQVNQIHNwZWNp ZmljIGluaXRpYWxpemF0aW9uLCBOZWVkcyB0byBiZSBkb25lIHJlZ2FyZGxlc3Mgb2YKKwkgKiBo b3cgbWFueSBpbnRlcmZhY2VzIGNvbWUgdXAuCisJICovCisJYmNtYXNwX2NvcmVfaW5pdChwcml2 KTsKKwliY21hc3BfY29yZV9pbml0X2ZpbHRlcnMocHJpdik7CisKKwlwb3J0c19ub2RlID0zRCBv Zl9maW5kX25vZGVfYnlfbmFtZShkZXYtPm9mX25vZGUsICJldGhlcm5ldC1wb3J0cyIpOworCWlm ICghcG9ydHNfbm9kZSkgeworCQlkZXZfd2FybihkZXYsICJObyBwb3J0cyBmb3VuZFxuIik7CisJ CXJldHVybiAtRUlOVkFMOworCX0KKworCWkgPTNEIDA7CisJZm9yX2VhY2hfYXZhaWxhYmxlX2No aWxkX29mX25vZGUocG9ydHNfbm9kZSwgaW50Zl9ub2RlKSB7CisJCWludGYgPTNEIGJjbWFzcF9p bnRlcmZhY2VfY3JlYXRlKHByaXYsIGludGZfbm9kZSwgaSk7CisJCWlmICghaW50ZikgeworCQkJ ZGV2X2VycihkZXYsICJDYW5ub3QgY3JlYXRlIGV0aCBpbnRlcmZhY2UgJWRcbiIsIGkpOworCQkJ YmNtYXNwX3JlbW92ZV9pbnRmcyhwcml2KTsKKwkJCWdvdG8gb2ZfcHV0X2V4aXQ7CisJCX0KKwkJ bGlzdF9hZGRfdGFpbCgmaW50Zi0+bGlzdCwgJnByaXYtPmludGZzKTsKKwkJaSsrOworCX0KKwor CS8qIERyb3AgdGhlIGNsb2NrIHJlZmVyZW5jZSBjb3VudCBub3cgYW5kIGxldCBuZG9fb3Blbigp L25kb19jbG9zZSgpCisJICogbWFuYWdlIGl0IGZvciB1cyBmcm9tIG5vdyBvbi4KKwkgKi8KKwli Y21hc3BfY29yZV9jbG9ja19zZXQocHJpdiwgMCwgQVNQX0NUUkxfQ0xPQ0tfQ1RSTF9BU1BfQUxM X0RJU0FCTEUpOworCisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHByaXYtPmNsayk7CisKKwkvKiBO b3cgZG8gdGhlIHJlZ2lzdHJhdGlvbiBvZiB0aGUgbmV0d29yayBwb3J0cyB3aGljaCB3aWxsIHRh a2UgY2FyZQorCSAqIG9mIG1hbmFnaW5nIHRoZSBjbG9jayBwcm9wZXJseS4KKwkgKi8KKwlsaXN0 X2Zvcl9lYWNoX2VudHJ5KGludGYsICZwcml2LT5pbnRmcywgbGlzdCkgeworCQlyZXQgPTNEIHJl Z2lzdGVyX25ldGRldihpbnRmLT5uZGV2KTsKKwkJaWYgKHJldCkgeworCQkJbmV0ZGV2X2Vycihp bnRmLT5uZGV2LAorCQkJCSAgICJmYWlsZWQgdG8gcmVnaXN0ZXIgbmV0X2RldmljZTogJWRcbiIs IHJldCk7CisJCQliY21hc3BfcmVtb3ZlX2ludGZzKHByaXYpOworCQkJZ290byBvZl9wdXRfZXhp dDsKKwkJfQorCQljb3VudCsrOworCX0KKworCWRldl9pbmZvKGRldiwgIkluaXRpYWxpemVkICVk IHBvcnQocylcbiIsIGNvdW50KTsKKworb2ZfcHV0X2V4aXQ6CisJb2Zfbm9kZV9wdXQocG9ydHNf bm9kZSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBiY21hc3BfcmVtb3ZlKHN0cnVj dCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGJjbWFzcF9wcml2ICpwcml2ID0z RCBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisKKwlpZiAoIXByaXYpCisJCXJldHVybiAw OworCisJYmNtYXNwX3JlbW92ZV9pbnRmcyhwcml2KTsKKworCXJldHVybiAwOworfQorCitzdGF0 aWMgdm9pZCBiY21hc3Bfc2h1dGRvd24oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sK KwliY21hc3BfcmVtb3ZlKHBkZXYpOworfQorCitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIGJj bWFzcF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmQpCit7CisJc3RydWN0IGJjbWFzcF9wcml2ICpw cml2ID0zRCBkZXZfZ2V0X2RydmRhdGEoZCk7CisJc3RydWN0IGJjbWFzcF9pbnRmICppbnRmOwor CWludCByZXQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGludGYsICZwcml2LT5pbnRmcywgbGlz dCkgeworCQlyZXQgPTNEIGJjbWFzcF9pbnRlcmZhY2Vfc3VzcGVuZChpbnRmKTsKKwkJaWYgKHJl dCkKKwkJCWJyZWFrOworCX0KKworCXJldCA9M0QgY2xrX3ByZXBhcmVfZW5hYmxlKHByaXYtPmNs ayk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFdoZXRoZXIgV2FrZS1vbi1MQU4g aXMgZW5hYmxlZCBvciBub3QsIHdlIGNhbiBhbHdheXMgZGlzYWJsZQorCSAqIHRoZSBzaGFyZWQg VFggY2xvY2sKKwkgKi8KKwliY21hc3BfY29yZV9jbG9ja19zZXQocHJpdiwgMCwgQVNQX0NUUkxf Q0xPQ0tfQ1RSTF9BU1BfVFhfRElTQUJMRSk7CisKKwliY21hc3BfY29yZV9jbG9ja19zZWxlY3Qo cHJpdiwgdHJ1ZSk7CisKKwljbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi0+Y2xrKTsKKworCXJl dHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgYmNtYXNwX3Jlc3VtZShz dHJ1Y3QgZGV2aWNlICpkKQoreworCXN0cnVjdCBiY21hc3BfcHJpdiAqcHJpdiA9M0QgZGV2X2dl dF9kcnZkYXRhKGQpOworCXN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZjsKKwlpbnQgcmV0OworCisJ cmV0ID0zRCBjbGtfcHJlcGFyZV9lbmFibGUocHJpdi0+Y2xrKTsKKwlpZiAocmV0KQorCQlyZXR1 cm4gcmV0OworCisJLyogU3dpdGNoIHRvIHRoZSBtYWluIGNsb2NrIGRvbWFpbiAqLworCWJjbWFz cF9jb3JlX2Nsb2NrX3NlbGVjdChwcml2LCBmYWxzZSk7CisKKwkvKiBSZS1lbmFibGUgYWxsIGNs b2NrcyBmb3IgcmUtaW5pdGlhbGl6YXRpb24gKi8KKwliY21hc3BfY29yZV9jbG9ja19zZXQocHJp diwgQVNQX0NUUkxfQ0xPQ0tfQ1RSTF9BU1BfQUxMX0RJU0FCTEUsIDApOworCisJYmNtYXNwX2Nv cmVfaW5pdChwcml2KTsKKwliY21hc3BfY29yZV9pbml0X2ZpbHRlcnMocHJpdik7CisKKwkvKiBB bmQgZGlzYWJsZSB0aGVtIHRvIGxldCB0aGUgbmV0d29yayBkZXZpY2VzIHRha2UgY2FyZSBvZiB0 aGVtICovCisJYmNtYXNwX2NvcmVfY2xvY2tfc2V0KHByaXYsIDAsIEFTUF9DVFJMX0NMT0NLX0NU UkxfQVNQX0FMTF9ESVNBQkxFKTsKKworCWNsa19kaXNhYmxlX3VucHJlcGFyZShwcml2LT5jbGsp OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShpbnRmLCAmcHJpdi0+aW50ZnMsIGxpc3QpIHsKKwkJ cmV0ID0zRCBiY21hc3BfaW50ZXJmYWNlX3Jlc3VtZShpbnRmKTsKKwkJaWYgKHJldCkKKwkJCWJy ZWFrOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBTSU1QTEVfREVWX1BNX09QUyhi Y21hc3BfcG1fb3BzLAorCQkJIGJjbWFzcF9zdXNwZW5kLCBiY21hc3BfcmVzdW1lKTsKKworc3Rh dGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYmNtYXNwX2RyaXZlciA9M0QgeworCS5wcm9iZSA9 M0QgYmNtYXNwX3Byb2JlLAorCS5yZW1vdmUgPTNEIGJjbWFzcF9yZW1vdmUsCisJLnNodXRkb3du ID0zRCBiY21hc3Bfc2h1dGRvd24sCisJLmRyaXZlciA9M0QgeworCQkubmFtZSA9M0QgImJyY20s YXNwLXYyIiwKKwkJLm9mX21hdGNoX3RhYmxlID0zRCBiY21hc3Bfb2ZfbWF0Y2gsCisJCS5wbSA9 M0QgJmJjbWFzcF9wbV9vcHMsCisJfSwKK307Cittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGJjbWFz cF9kcml2ZXIpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkJyb2FkY29tIEFTUCAyLjAgRXRoZXJu ZXQgY29udHJvbGxlciBkcml2ZXIiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06YnJjbSxhc3At djIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0 aGVybmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwLmggYi9kcml2ZXJzL25ldC9ldGhlPQpybmV0L2Jy b2FkY29tL2FzcDIvYmNtYXNwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAwLi40ZmU4NGQyNjI1MWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5l dC9icm9hZGNvbS9hc3AyL2JjbWFzcC5oCkBAIC0wLDAgKzEsNTAzIEBACisvKiBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLworI2lmbmRlZiBfX0JDTUFTUF9ICisjZGVmaW5lIF9f QkNNQVNQX0gKKworI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4 L3BoeS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLTY0LW5vbmF0b21pYy1oaS1sby5oPgorI2luY2x1 ZGUgPHVhcGkvbGludXgvZXRodG9vbC5oPgorCisjZGVmaW5lIEFTUF9JTlRSMl9PRkZTRVQJCQkw eDEwMDAKKyNkZWZpbmUgIEFTUF9JTlRSMl9TVEFUVVMJCQkweDAKKyNkZWZpbmUgIEFTUF9JTlRS Ml9TRVQJCQkJMHg0CisjZGVmaW5lICBBU1BfSU5UUjJfQ0xFQVIJCQkweDgKKyNkZWZpbmUgIEFT UF9JTlRSMl9NQVNLX1NUQVRVUwkJCTB4YworI2RlZmluZSAgQVNQX0lOVFIyX01BU0tfU0VUCQkJ MHgxMAorI2RlZmluZSAgQVNQX0lOVFIyX01BU0tfQ0xFQVIJCQkweDE0CisKKyNkZWZpbmUgQVNQ X0lOVFIyX1JYX0VDSChpbnRyKQkJCUJJVChpbnRyKQorI2RlZmluZSBBU1BfSU5UUjJfVFhfREVT QyhpbnRyKQkJCUJJVCgoaW50cikgKyAxNCkKKyNkZWZpbmUgQVNQX0lOVFIyX1VNQzBfV0FLRQkJ CUJJVCgyMikKKyNkZWZpbmUgQVNQX0lOVFIyX1VNQzFfV0FLRQkJCUJJVCgyOCkKKworI2RlZmlu ZSBBU1BfV0FLRVVQX0lOVFIyX09GRlNFVAkJCTB4MTIwMAorI2RlZmluZSAgQVNQX1dBS0VVUF9J TlRSMl9TVEFUVVMJCTB4MAorI2RlZmluZSAgQVNQX1dBS0VVUF9JTlRSMl9TRVQJCQkweDQKKyNk ZWZpbmUgIEFTUF9XQUtFVVBfSU5UUjJfQ0xFQVIJCQkweDgKKyNkZWZpbmUgIEFTUF9XQUtFVVBf SU5UUjJfTUFTS19TVEFUVVMJCTB4YworI2RlZmluZSAgQVNQX1dBS0VVUF9JTlRSMl9NQVNLX1NF VAkJMHgxMAorI2RlZmluZSAgQVNQX1dBS0VVUF9JTlRSMl9NQVNLX0NMRUFSCQkweDE0CisjZGVm aW5lIEFTUF9XQUtFVVBfSU5UUjJfTVBEXzAJCQlCSVQoMCkKKyNkZWZpbmUgQVNQX1dBS0VVUF9J TlRSMl9NUERfMQkJCUJJVCgxKQorI2RlZmluZSBBU1BfV0FLRVVQX0lOVFIyX0ZJTFRfMAkJCUJJ VCgyKQorI2RlZmluZSBBU1BfV0FLRVVQX0lOVFIyX0ZJTFRfMQkJCUJJVCgzKQorI2RlZmluZSBB U1BfV0FLRVVQX0lOVFIyX0ZXCQkJQklUKDQpCisKKyNkZWZpbmUgQVNQX1RYX0FOQUxZVElDU19P RkZTRVQJCQkweDRjMDAwCisjZGVmaW5lICBBU1BfVFhfQU5BTFlUSUNTX0NUUkwJCQkweDAKKwor I2RlZmluZSBBU1BfUlhfQU5BTFlUSUNTX09GRlNFVAkJCTB4OTgwMDAKKyNkZWZpbmUgIEFTUF9S WF9BTkFMWVRJQ1NfQ1RSTAkJCTB4MAorCisjZGVmaW5lIEFTUF9SWF9DVFJMX09GRlNFVAkJCTB4 OWYwMDAKKyNkZWZpbmUgQVNQX1JYX0NUUkxfVU1BQ18wX0ZSQU1FX0NPVU5UCQkweDgKKyNkZWZp bmUgQVNQX1JYX0NUUkxfVU1BQ18xX0ZSQU1FX0NPVU5UCQkweGMKKyNkZWZpbmUgQVNQX1JYX0NU UkxfRkJfMF9GUkFNRV9DT1VOVAkJMHgxNAorI2RlZmluZSBBU1BfUlhfQ1RSTF9GQl8xX0ZSQU1F X0NPVU5UCQkweDE4CisjZGVmaW5lIEFTUF9SWF9DVFJMX0ZCXzhfRlJBTUVfQ09VTlQJCTB4MWMK Ky8qIGFzcDIuMSBkaXZlcmdlcyBvZmZzZXRzIGhlcmUgKi8KKy8qIEFTUDIuMCAqLworI2RlZmlu ZSBBU1BfUlhfQ1RSTF9GQl9PVVRfRlJBTUVfQ09VTlQJCTB4MjAKKyNkZWZpbmUgQVNQX1JYX0NU UkxfRkJfRklMVF9PVVRfRlJBTUVfQ09VTlQJMHgyNAorI2RlZmluZSBBU1BfUlhfQ1RSTF9GTFVT SAkJCTB4MjgKKyNkZWZpbmUgIEFTUF9DVFJMX1VNQUMwX0ZMVVNIX01BU0sJCShCSVQoMCkgfCBC SVQoMTIpKQorI2RlZmluZSAgQVNQX0NUUkxfVU1BQzFfRkxVU0hfTUFTSwkJKEJJVCgxKSB8IEJJ VCgxMykpCisjZGVmaW5lICBBU1BfQ1RSTF9TUEJfRkxVU0hfTUFTSwkJKEJJVCg4KSB8IEJJVCgy MCkpCisjZGVmaW5lIEFTUF9SWF9DVFJMX0ZCX1JYX0ZJRk9fREVQVEgJCTB4MzAKKy8qIEFTUDIu MSAqLworI2RlZmluZSBBU1BfUlhfQ1RSTF9GQl85X0ZSQU1FX0NPVU5UXzJfMQkweDIwCisjZGVm aW5lIEFTUF9SWF9DVFJMX0ZCXzEwX0ZSQU1FX0NPVU5UXzJfMQkweDI0CisjZGVmaW5lIEFTUF9S WF9DVFJMX0ZCX09VVF9GUkFNRV9DT1VOVF8yXzEJMHgyOAorI2RlZmluZSBBU1BfUlhfQ1RSTF9G Ql9GSUxUX09VVF9GUkFNRV9DT1VOVF8yXzEJMHgyYworI2RlZmluZSBBU1BfUlhfQ1RSTF9GTFVT SF8yXzEJCQkweDMwCisjZGVmaW5lIEFTUF9SWF9DVFJMX0ZCX1JYX0ZJRk9fREVQVEhfMl8xCTB4 MzgKKworI2RlZmluZSBBU1BfUlhfRklMVEVSX09GRlNFVAkJCTB4ODAwMDAKKyNkZWZpbmUgIEFT UF9SWF9GSUxURVJfQkxLX0NUUkwJCQkweDAKKyNkZWZpbmUgICBBU1BfUlhfRklMVEVSX09QVVRf RU4JCQlCSVQoMCkKKyNkZWZpbmUgICBBU1BfUlhfRklMVEVSX01EQV9FTgkJCUJJVCgxKQorI2Rl ZmluZSAgIEFTUF9SWF9GSUxURVJfTE5SX01ECQkJQklUKDIpCisjZGVmaW5lICAgQVNQX1JYX0ZJ TFRFUl9HRU5fV0tfRU4JCUJJVCgzKQorI2RlZmluZSAgIEFTUF9SWF9GSUxURVJfR0VOX1dLX0NM UgkJQklUKDQpCisjZGVmaW5lICAgQVNQX1JYX0ZJTFRFUl9OVF9GTFRfRU4JCUJJVCg1KQorI2Rl ZmluZSAgQVNQX1JYX0ZJTFRFUl9NREFfQ0ZHKHNlbCkJCSgoKHNlbCkgKiAweDE0KSArIDB4MTAw KQorI2RlZmluZSAgIEFTUF9SWF9GSUxURVJfTURBX0NGR19FTl9TSElGVAk4CisjZGVmaW5lICAg QVNQX1JYX0ZJTFRFUl9NREFfQ0ZHX1VNQ19TRUwoc2VsKQkoKHNlbCkgPiAxID8gQklUKDE3KSA6 IFwKKwkJCQkJCSBCSVQoKHNlbCkgKyA5KSkKKyNkZWZpbmUgIEFTUF9SWF9GSUxURVJfTURBX1BB VF9IKHNlbCkJCSgoKHNlbCkgKiAweDE0KSArIDB4MTA0KQorI2RlZmluZSAgQVNQX1JYX0ZJTFRF Ul9NREFfUEFUX0woc2VsKQkJKCgoc2VsKSAqIDB4MTQpICsgMHgxMDgpCisjZGVmaW5lICBBU1Bf UlhfRklMVEVSX01EQV9NU0tfSChzZWwpCQkoKChzZWwpICogMHgxNCkgKyAweDEwYykKKyNkZWZp bmUgIEFTUF9SWF9GSUxURVJfTURBX01TS19MKHNlbCkJCSgoKHNlbCkgKiAweDE0KSArIDB4MTEw KQorI2RlZmluZSAgQVNQX1JYX0ZJTFRFUl9NREFfQ0ZHKHNlbCkJCSgoKHNlbCkgKiAweDE0KSAr IDB4MTAwKQorI2RlZmluZSAgQVNQX1JYX0ZJTFRFUl9NREFfUEFUX0goc2VsKQkJKCgoc2VsKSAq IDB4MTQpICsgMHgxMDQpCisjZGVmaW5lICBBU1BfUlhfRklMVEVSX01EQV9QQVRfTChzZWwpCQko KChzZWwpICogMHgxNCkgKyAweDEwOCkKKyNkZWZpbmUgIEFTUF9SWF9GSUxURVJfTURBX01TS19I KHNlbCkJCSgoKHNlbCkgKiAweDE0KSArIDB4MTBjKQorI2RlZmluZSAgQVNQX1JYX0ZJTFRFUl9N REFfTVNLX0woc2VsKQkJKCgoc2VsKSAqIDB4MTQpICsgMHgxMTApCisjZGVmaW5lICBBU1BfUlhf RklMVEVSX05FVF9DRkcoc2VsKQkJKCgoc2VsKSAqIDB4YTA0KSArIDB4NDAwKQorI2RlZmluZSAg IEFTUF9SWF9GSUxURVJfTkVUX0NGR19DSChzZWwpCQkoKHNlbCkgPDwgMCkKKyNkZWZpbmUgICBB U1BfUlhfRklMVEVSX05FVF9DRkdfRU4JCUJJVCg5KQorI2RlZmluZSAgIEFTUF9SWF9GSUxURVJf TkVUX0NGR19MMl9FTgkJQklUKDEwKQorI2RlZmluZSAgIEFTUF9SWF9GSUxURVJfTkVUX0NGR19M M19FTgkJQklUKDExKQorI2RlZmluZSAgIEFTUF9SWF9GSUxURVJfTkVUX0NGR19MNF9FTgkJQklU KDEyKQorI2RlZmluZSAgIEFTUF9SWF9GSUxURVJfTkVUX0NGR19MM19GUk0oc2VsKQkoKHNlbCkg PDwgMTMpCisjZGVmaW5lICAgQVNQX1JYX0ZJTFRFUl9ORVRfQ0ZHX0w0X0ZSTShzZWwpCSgoc2Vs KSA8PCAxNSkKKyNkZWZpbmUgICBBU1BfUlhfRklMVEVSX05FVF9DRkdfVU1DKHNlbCkJQklUKChz ZWwpICsgMTkpCisjZGVmaW5lICAgQVNQX1JYX0ZJTFRFUl9ORVRfQ0ZHX0RNQV9FTgkJQklUKDI3 KQorCisjZGVmaW5lICBBU1BfUlhfRklMVEVSX05FVF9PRkZTRVRfTUFYCQkzMgorI2RlZmluZSAg QVNQX1JYX0ZJTFRFUl9ORVRfUEFUKHNlbCwgYmxvY2ssIG9mZikgXAorCQkoKChzZWwpICogMHhh MDQpICsgKChibG9jaykgKiAweDIwMCkgKyAob2ZmKSArIDB4NjAwKQorI2RlZmluZSAgQVNQX1JY X0ZJTFRFUl9ORVRfTUFTSyhzZWwsIGJsb2NrLCBvZmYpIFwKKwkJKCgoc2VsKSAqIDB4YTA0KSAr ICgoYmxvY2spICogMHgyMDApICsgKG9mZikgKyAweDcwMCkKKworI2RlZmluZSAgQVNQX1JYX0ZJ TFRFUl9ORVRfT0ZGU0VUKHNlbCkJCSgoKHNlbCkgKiAweGEwNCkgKyAweGUwMCkKKyNkZWZpbmUg ICBBU1BfUlhfRklMVEVSX05FVF9PRkZTRVRfTDIodmFsKQkoKHZhbCkgPDwgMCkKKyNkZWZpbmUg ICBBU1BfUlhfRklMVEVSX05FVF9PRkZTRVRfTDNfMCh2YWwpCSgodmFsKSA8PCA4KQorI2RlZmlu ZSAgIEFTUF9SWF9GSUxURVJfTkVUX09GRlNFVF9MM18xKHZhbCkJKCh2YWwpIDw8IDE2KQorI2Rl ZmluZSAgIEFTUF9SWF9GSUxURVJfTkVUX09GRlNFVF9MNCh2YWwpCSgodmFsKSA8PCAyNCkKKwor I2RlZmluZSBBU1BfRURQS1RfT0ZGU0VUCQkJMHg5YzAwMAorI2RlZmluZSAgQVNQX0VEUEtUX0VO QUJMRQkJCTB4NAorI2RlZmluZSAgIEFTUF9FRFBLVF9FTkFCTEVfRU4JCQlCSVQoMCkKKyNkZWZp bmUgIEFTUF9FRFBLVF9IRFJfQ0ZHCQkJMHhjCisjZGVmaW5lICAgQVNQX0VEUEtUX0hEUl9TWl9T SElGVAkJMgorI2RlZmluZSAgIEFTUF9FRFBLVF9IRFJfU1pfMzIJCQkwCisjZGVmaW5lICAgQVNQ X0VEUEtUX0hEUl9TWl82NAkJCTEKKyNkZWZpbmUgICBBU1BfRURQS1RfSERSX1NaXzk2CQkJMgor I2RlZmluZSAgIEFTUF9FRFBLVF9IRFJfU1pfMTI4CQkJMworI2RlZmluZSBBU1BfRURQS1RfQlVS U1RfQlVGX1BTQ0FMX1RPVVQJCTB4MTAKKyNkZWZpbmUgQVNQX0VEUEtUX0JVUlNUX0JVRl9XUklU RV9UT1VUCQkweDE0CisjZGVmaW5lIEFTUF9FRFBLVF9CVVJTVF9CVUZfUkVBRF9UT1VUCQkweDE4 CisjZGVmaW5lIEFTUF9FRFBLVF9SWF9UU19DT1VOVEVSCQkJMHgzOAorI2RlZmluZSAgQVNQX0VE UEtUX0VOREkJCQkJMHg0OAorI2RlZmluZSAgIEFTUF9FRFBLVF9FTkRJX0RFU0NfU0hJRlQJCTgK KyNkZWZpbmUgICBBU1BfRURQS1RfRU5ESV9OT19CVF9TV1AJCTAKKyNkZWZpbmUgICBBU1BfRURQ S1RfRU5ESV9CVF9TV1BfV0QJCTEKKyNkZWZpbmUgQVNQX0VEUEtUX1JYX1BLVF9DTlQJCQkweDEz OAorI2RlZmluZSBBU1BfRURQS1RfSERSX0VYVFJfQ05UCQkJMHgxM2MKKyNkZWZpbmUgQVNQX0VE UEtUX0hEUl9PVVRfQ05UCQkJMHgxNDAKKworI2RlZmluZSBBU1BfQ1RSTAkJCQkweDEwMTAwMAor I2RlZmluZSAgQVNQX0NUUkxfQVNQX1NXX0lOSVQJCQkweDA0CisjZGVmaW5lICAgQVNQX0NUUkxf QVNQX1NXX0lOSVRfQUNQVVNTX0NPUkUJQklUKDApCisjZGVmaW5lICAgQVNQX0NUUkxfQVNQX1NX X0lOSVRfQVNQX1RYCQlCSVQoMSkKKyNkZWZpbmUgICBBU1BfQ1RSTF9BU1BfU1dfSU5JVF9BU19S WAkJQklUKDIpCisjZGVmaW5lICAgQVNQX0NUUkxfQVNQX1NXX0lOSVRfQVNQX1JHTUlJX1VNQUMw CUJJVCgzKQorI2RlZmluZSAgIEFTUF9DVFJMX0FTUF9TV19JTklUX0FTUF9SR01JSV9VTUFDMQlC SVQoNCkKKyNkZWZpbmUgICBBU1BfQ1RSTF9BU1BfU1dfSU5JVF9BU1BfWE1FTUlGCUJJVCg1KQor I2RlZmluZSAgQVNQX0NUUkxfQ0xPQ0tfQ1RSTAkJCTB4MDQKKyNkZWZpbmUgICBBU1BfQ1RSTF9D TE9DS19DVFJMX0FTUF9UWF9ESVNBQkxFCUJJVCgwKQorI2RlZmluZSAgIEFTUF9DVFJMX0NMT0NL X0NUUkxfQVNQX1JYX0RJU0FCTEUJQklUKDEpCisjZGVmaW5lICAgQVNQX0NUUkxfQ0xPQ0tfQ1RS TF9BU1BfUkdNSUlfU0hJRlQJMgorI2RlZmluZSAgIEFTUF9DVFJMX0NMT0NLX0NUUkxfQVNQX1JH TUlJX01BU0sJKDB4NyA8PCBBU1BfQ1RSTF9DTE9DS19DVFJMX0E9ClNQX1JHTUlJX1NISUZUKQor I2RlZmluZSAgIEFTUF9DVFJMX0NMT0NLX0NUUkxfQVNQX1JHTUlJX0RJUyh4KQlCSVQoQVNQX0NU UkxfQ0xPQ0tfQ1RSTF9BU1A9Cl9SR01JSV9TSElGVCArICh4KSkKKyNkZWZpbmUgICBBU1BfQ1RS TF9DTE9DS19DVFJMX0FTUF9BTExfRElTQUJMRQlHRU5NQVNLKDQsIDApCisjZGVmaW5lICBBU1Bf Q1RSTF9DT1JFX0NMT0NLX1NFTEVDVAkJMHgwOAorI2RlZmluZSAgIEFTUF9DVFJMX0NPUkVfQ0xP Q0tfU0VMRUNUX01BSU4JQklUKDApCisjZGVmaW5lICBBU1BfQ1RSTF9TQ1JBVENIXzAJCQkweDBj CisKK3N0cnVjdCBiY21hc3BfdHhfY2IgeworCXN0cnVjdCBza19idWZmCQkqc2tiOworCXVuc2ln bmVkIGludAkJYnl0ZXNfc2VudDsKKwlib29sCQkJbGFzdDsKKworCURFRklORV9ETUFfVU5NQVBf QUREUihkbWFfYWRkcik7CisJREVGSU5FX0RNQV9VTk1BUF9MRU4oZG1hX2xlbik7Cit9OworCitz dHJ1Y3QgYmNtYXNwX3JlcyB7CisJLyogUGVyIGludGVyZmFjZSByZXNvdXJjZXMgKi8KKwkvKiBQ b3J0ICovCisJdm9pZCBfX2lvbWVtCQkqdW1hYzsKKwl2b2lkIF9faW9tZW0JCSp1bWFjMmZiOwor CXZvaWQgX19pb21lbQkJKnJnbWlpOworCisJLyogVFggc2xvd3BhdGgvY29uZmlndXJhdGlvbiAq LworCXZvaWQgX19pb21lbQkJKnR4X3NwYl9jdHJsOworCXZvaWQgX19pb21lbQkJKnR4X3NwYl90 b3A7CisJdm9pZCBfX2lvbWVtCQkqdHhfZXBrdF9jb3JlOworCXZvaWQgX19pb21lbQkJKnR4X3Bh dXNlX2N0cmw7Cit9OworCisjZGVmaW5lIERFU0NfQUREUih4KQkJKCh4KSAmIEdFTk1BU0tfVUxM KDM5LCAwKSkKKyNkZWZpbmUgREVTQ19GTEFHUyh4KQkJKCh4KSAmIEdFTk1BU0tfVUxMKDYzLCA0 MCkpCisKK3N0cnVjdCBiY21hc3BfZGVzYyB7CisJdTY0CQlidWY7CisJI2RlZmluZSBERVNDX0NI S1NVTQlCSVRfVUxMKDQwKQorCSNkZWZpbmUgREVTQ19DUkNfRVJSCUJJVF9VTEwoNDEpCisJI2Rl ZmluZSBERVNDX1JYX1NZTV9FUlIJQklUX1VMTCg0MikKKwkjZGVmaW5lIERFU0NfTk9fT0NUX0FM TiBCSVRfVUxMKDQzKQorCSNkZWZpbmUgREVTQ19QS1RfVFJVQwlCSVRfVUxMKDQ0KQorCS8qICAz OTowIChUWC9SWCkgYml0cyAwLTM5IG9mIGJ1ZiBhZGRyCisJICogICAgNDAgKFJYKSBjaGVja3N1 bQorCSAqICAgIDQxIChSWCkgY3JjX2Vycm9yCisJICogICAgNDIgKFJYKSByeF9zeW1ib2xfZXJy b3IKKwkgKiAgICA0MyAoUlgpIG5vbl9vY3RldF9hbGlnbmVkCisJICogICAgNDQgKFJYKSBwa3Rf dHJ1bmNhdGVkCisJICogICAgNDUgUmVzZXJ2ZWQKKwkgKiA1Njo0NiAoUlgpIG1hY19maWx0ZXJf aWQKKwkgKiA2MDo1NyAoUlgpIHJ4X3BvcnRfbnVtICgwLXVuaWNtYWMwLCAxLXVuaW1hYzEpCisJ ICogICAgNjEgUmVzZXJ2ZWQKKwkgKiA2Mzo2MiAoVFgpIGZvcndhcmQgQ1JDLCBvdmVyd3JpdGUg Q1JDCisJICovCisJdTMyCQlzaXplOworCXUzMgkJZmxhZ3M7CisJI2RlZmluZSBERVNDX0lOVF9F TiAgICAgQklUKDApCisJI2RlZmluZSBERVNDX1NPRglCSVQoMSkKKwkjZGVmaW5lIERFU0NfRU9G CUJJVCgyKQorCSNkZWZpbmUgREVTQ19FUEtUX0NNRCAgIEJJVCgzKQorCSNkZWZpbmUgREVTQ19T Q1JBTV9TVCAgIEJJVCg4KQorCSNkZWZpbmUgREVTQ19TQ1JBTV9FTkQgIEJJVCg5KQorCSNkZWZp bmUgREVTQ19QQ1BQICAgICAgIEJJVCgxMCkKKwkjZGVmaW5lIERFU0NfUFBQUCAgICAgICBCSVQo MTEpCisJLyogICAgIDAgKFRYKSB0eF9pbnRfZW4KKwkgKiAgICAgMSAoVFgvUlgpIFNPRgorCSAq ICAgICAyIChUWC9SWCkgRU9GCisJICogICAgIDMgKFRYKSBlcGt0X2NvbW1hbmQKKwkgKiAgIDY6 NCAoVFgpIFBBCisJICogICAgIDcgKFRYKSBwYXVzZSBhdCBkZXNjIGVuZAorCSAqICAgICA4IChU WCkgc2NyYW1fc3RhcnQKKwkgKiAgICAgOSAoVFgpIHNjcmFtX2VuZAorCSAqICAgIDEwIChUWCkg UENQUAorCSAqICAgIDExIChUWCkgUFBQUAorCSAqIDE0OjEyIFJlc2VydmVkCisJICogICAgMTUg KFRYKSBwaWQgY2ggVmFsaWQKKwkgKiAxOToxNiAoVFgpIGRhdGFfcGt0X3R5cGUKKwkgKiAzMjoy MCAoVFgpIHBpZF9jaGFubmVsIChSWCkgbndfZmlsdGVyX2lkCisJICovCit9OworCitzdHJ1Y3Qg YmNtYXNwX2ludGY7CisKK3N0cnVjdCBiY21hc3BfaW50Zl9zdGF0czY0IHsKKwkvKiBSeCBTdGF0 cyAqLworCXU2NF9zdGF0c190CXJ4X3BhY2tldHM7CisJdTY0X3N0YXRzX3QJcnhfYnl0ZXM7CisJ dTY0X3N0YXRzX3QJcnhfZXJyb3JzOworCXU2NF9zdGF0c190CXJ4X2Ryb3BwZWQ7CisJdTY0X3N0 YXRzX3QJcnhfY3JjX2VycnM7CisJdTY0X3N0YXRzX3QJcnhfc3ltX2VycnM7CisKKwkvKiBUeCBT dGF0cyovCisJdTY0X3N0YXRzX3QJdHhfcGFja2V0czsKKwl1NjRfc3RhdHNfdAl0eF9ieXRlczsK KworCXN0cnVjdCB1NjRfc3RhdHNfc3luYwkJc3luY3A7Cit9OworCitzdHJ1Y3QgYmNtYXNwX2lu dGZfb3BzIHsKKwl1bnNpZ25lZCBsb25nICgqcnhfZGVzY19yZWFkKShzdHJ1Y3QgYmNtYXNwX2lu dGYgKmludGYpOworCXZvaWQgKCpyeF9idWZmZXJfd3JpdGUpKHN0cnVjdCBiY21hc3BfaW50ZiAq aW50ZiwgZG1hX2FkZHJfdCBhZGRyKTsKKwl2b2lkICgqcnhfZGVzY193cml0ZSkoc3RydWN0IGJj bWFzcF9pbnRmICppbnRmLCBkbWFfYWRkcl90IGFkZHIpOworCXVuc2lnbmVkIGxvbmcgKCp0eF9y ZWFkKShzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYpOworCXZvaWQgKCp0eF93cml0ZSkoc3RydWN0 IGJjbWFzcF9pbnRmICppbnRmLCBkbWFfYWRkcl90IGFkZHIpOworfTsKKworc3RydWN0IGJjbWFz cF9wcml2OworCitzdHJ1Y3QgYmNtYXNwX2ludGYgeworCXN0cnVjdCBsaXN0X2hlYWQJCWxpc3Q7 CisJc3RydWN0IG5ldF9kZXZpY2UJCSpuZGV2OworCXN0cnVjdCBiY21hc3BfcHJpdgkJKnBhcmVu dDsKKworCS8qIEFTUCBDaCAqLworCWludAkJCQljaGFubmVsOworCWludAkJCQlwb3J0OworCWNv bnN0IHN0cnVjdCBiY21hc3BfaW50Zl9vcHMJKm9wczsKKworCS8qIFVzZWQgZm9yIHNwbGl0dGlu ZyBzaGFyZWQgcmVzb3VyY2VzICovCisJaW50CQkJCWluZGV4OworCisJc3RydWN0IG5hcGlfc3Ry dWN0CQl0eF9uYXBpOworCS8qIFRYIHJpbmcsIHN0YXJ0cyBvbiBhIG5ldyBjYWNoZWxpbmUgYm91 bmRhcnkgKi8KKwl2b2lkIF9faW9tZW0JCQkqdHhfc3BiX2RtYTsKKwlpbnQJCQkJdHhfc3BiX2lu ZGV4OworCWludAkJCQl0eF9zcGJfY2xlYW5faW5kZXg7CisJc3RydWN0IGJjbWFzcF9kZXNjCQkq dHhfc3BiX2NwdTsKKwlkbWFfYWRkcl90CQkJdHhfc3BiX2RtYV9hZGRyOworCWRtYV9hZGRyX3QJ CQl0eF9zcGJfZG1hX3ZhbGlkOworCWRtYV9hZGRyX3QJCQl0eF9zcGJfZG1hX3JlYWQ7CisJc3Ry dWN0IGJjbWFzcF90eF9jYgkJKnR4X2NiczsKKworCS8qIFJYIHJpbmcsIHN0YXJ0cyBvbiBhIG5l dyBjYWNoZWxpbmUgYm91bmRhcnkgKi8KKwl2b2lkIF9faW9tZW0JCQkqcnhfZWRwa3RfY2ZnOwor CXZvaWQgX19pb21lbQkJCSpyeF9lZHBrdF9kbWE7CisJaW50CQkJCXJ4X2VkcGt0X2luZGV4Owor CWludAkJCQlyeF9idWZfb3JkZXI7CisJc3RydWN0IGJjbWFzcF9kZXNjCQkqcnhfZWRwa3RfY3B1 OworCWRtYV9hZGRyX3QJCQlyeF9lZHBrdF9kbWFfYWRkcjsKKwlkbWFfYWRkcl90CQkJcnhfZWRw a3RfZG1hX3JlYWQ7CisKKwkvKiBSWCBidWZmZXIgcHJlZmV0Y2hlciByaW5nKi8KKwl2b2lkCQkJ CSpyeF9yaW5nX2NwdTsKKwlkbWFfYWRkcl90CQkJcnhfcmluZ19kbWE7CisJZG1hX2FkZHJfdAkJ CXJ4X3JpbmdfZG1hX3ZhbGlkOworCXN0cnVjdCBuYXBpX3N0cnVjdAkJcnhfbmFwaTsKKworCXN0 cnVjdCBiY21hc3BfcmVzCQlyZXM7CisJdW5zaWduZWQgaW50CQkJY3JjX2Z3ZDsKKworCS8qIFBI WSBkZXZpY2UgKi8KKwlzdHJ1Y3QgZGV2aWNlX25vZGUJCSpwaHlfZG47CisJc3RydWN0IGRldmlj ZV9ub2RlCQkqbmRldl9kbjsKKwlwaHlfaW50ZXJmYWNlX3QJCQlwaHlfaW50ZXJmYWNlOworCWJv b2wJCQkJaW50ZXJuYWxfcGh5OworCWludAkJCQlvbGRfcGF1c2U7CisJaW50CQkJCW9sZF9saW5r OworCWludAkJCQlvbGRfZHVwbGV4OworCisJdTMyCQkJCW1zZ19lbmFibGU7CisKKwkvKiBTdGF0 aXN0aWNzICovCisJc3RydWN0IGJjbWFzcF9pbnRmX3N0YXRzNjQJc3RhdHM2NDsKK307CisKKyNk ZWZpbmUgTlVNX01EQV9GSUxURVJTCQkJCTMyCitzdHJ1Y3QgYmNtYXNwX21kYV9maWx0ZXIgewor CS8qIEN1cnJlbnQgb3duZXIgb2YgdGhpcyBmaWx0ZXIgKi8KKwlpbnQJCXBvcnQ7CisJYm9vbAkJ ZW47CisJdTgJCWFkZHJbRVRIX0FMRU5dOworCXU4CQltYXNrW0VUSF9BTEVOXTsKK307CisKK3N0 cnVjdCBiY21hc3BfaHdfaW5mbyB7CisJdTMyCQlyeF9jdHJsX2ZsdXNoOworCXUzMgkJdW1hYzJm YjsKKwl1MzIJCXJ4X2N0cmxfZmJfb3V0X2ZyYW1lX2NvdW50OworCXUzMgkJcnhfY3RybF9mYl9m aWx0X291dF9mcmFtZV9jb3VudDsKKwl1MzIJCXJ4X2N0cmxfZmJfcnhfZmlmb19kZXB0aDsKK307 CisKK3N0cnVjdCBiY21hc3BfcGxhdF9kYXRhIHsKKwlzdHJ1Y3QgYmNtYXNwX2h3X2luZm8JCSpo d19pbmZvOworfTsKKworc3RydWN0IGJjbWFzcF9wcml2IHsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2 aWNlCQkqcGRldjsKKwlzdHJ1Y3QgY2xrCQkJKmNsazsKKworCWludAkJCQlpcnE7CisJdTMyCQkJ CWlycV9tYXNrOworCisJdm9pZCBfX2lvbWVtCQkJKmJhc2U7CisJc3RydWN0CWJjbWFzcF9od19p bmZvCQkqaHdfaW5mbzsKKworCXN0cnVjdCBsaXN0X2hlYWQJCWludGZzOworCisJc3RydWN0IGJj bWFzcF9tZGFfZmlsdGVyCW1kYV9maWx0ZXJzW05VTV9NREFfRklMVEVSU107CisKKwkvKiBNQUMg ZGVzdGluYXRpb24gYWRkcmVzcyBmaWx0ZXJzIGxvY2sgKi8KKwlzcGlubG9ja190CQkJbWRhX2xv Y2s7CisKKwkvKiBQcm90ZWN0cyBhY2Nlc3NlcyB0byBBU1BfQ1RSTF9DTE9DS19DVFJMICovCisJ c3BpbmxvY2tfdAkJCWNsa19sb2NrOworfTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25n IGJjbWFzcF9pbnRmX3J4X2Rlc2NfcmVhZChzdHJ1Y3QgYmNtYXNwX2ludGYgKmk9Cm50ZikKK3sK KwlyZXR1cm4gaW50Zi0+b3BzLT5yeF9kZXNjX3JlYWQoaW50Zik7Cit9CisKK3N0YXRpYyBpbmxp bmUgdm9pZCBiY21hc3BfaW50Zl9yeF9idWZmZXJfd3JpdGUoc3RydWN0IGJjbWFzcF9pbnRmICpp bnRmLAorCQkJCQkgICAgICAgZG1hX2FkZHJfdCBhZGRyKQoreworCWludGYtPm9wcy0+cnhfYnVm ZmVyX3dyaXRlKGludGYsIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYmNtYXNwX2lu dGZfcnhfZGVzY193cml0ZShzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsCisJCQkJCSAgICAgZG1h X2FkZHJfdCBhZGRyKQoreworCWludGYtPm9wcy0+cnhfZGVzY193cml0ZShpbnRmLCBhZGRyKTsK K30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGJjbWFzcF9pbnRmX3R4X3JlYWQoc3Ry dWN0IGJjbWFzcF9pbnRmICppbnRmKQoreworCXJldHVybiBpbnRmLT5vcHMtPnR4X3JlYWQoaW50 Zik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBiY21hc3BfaW50Zl90eF93cml0ZShzdHJ1Y3Qg YmNtYXNwX2ludGYgKmludGYsCisJCQkJCWRtYV9hZGRyX3QgYWRkcikKK3sKKwlpbnRmLT5vcHMt PnR4X3dyaXRlKGludGYsIGFkZHIpOworfQorCisjZGVmaW5lIF9fQkNNQVNQX0lPX01BQ1JPKG5h bWUsIG0pCQkJCQlcCitzdGF0aWMgaW5saW5lIHUzMiBuYW1lIyNfcmwoc3RydWN0IGJjbWFzcF9p bnRmICppbnRmLCB1MzIgb2ZmKQkJXAorewkJCQkJCQkJCVwKKwl1MzIgcmVnID0zRCByZWFkbF9y ZWxheGVkKGludGYtPm0gKyBvZmYpOwkJCQlcCisJcmV0dXJuIHJlZzsJCQkJCQkJXAorfQkJCQkJ CQkJCVwKK3N0YXRpYyBpbmxpbmUgdm9pZCBuYW1lIyNfd2woc3RydWN0IGJjbWFzcF9pbnRmICpp bnRmLCB1MzIgdmFsLCB1MzIgb2ZmKVwKK3sJCQkJCQkJCQlcCisJd3JpdGVsX3JlbGF4ZWQodmFs LCBpbnRmLT5tICsgb2ZmKTsJCQkJXAorfQorCisjZGVmaW5lIEJDTUFTUF9JT19NQUNSTyhuYW1l KQkJX19CQ01BU1BfSU9fTUFDUk8obmFtZSwgcmVzLm5hbWUpCisjZGVmaW5lIEJDTUFTUF9GUF9J T19NQUNSTyhuYW1lKQlfX0JDTUFTUF9JT19NQUNSTyhuYW1lLCBuYW1lKQorCitCQ01BU1BfSU9f TUFDUk8odW1hYyk7CitCQ01BU1BfSU9fTUFDUk8odW1hYzJmYik7CitCQ01BU1BfSU9fTUFDUk8o cmdtaWkpOworQkNNQVNQX0ZQX0lPX01BQ1JPKHR4X3NwYl9kbWEpOworQkNNQVNQX0lPX01BQ1JP KHR4X3NwYl9jdHJsKTsKK0JDTUFTUF9JT19NQUNSTyh0eF9zcGJfdG9wKTsKK0JDTUFTUF9JT19N QUNSTyh0eF9lcGt0X2NvcmUpOworQkNNQVNQX0lPX01BQ1JPKHR4X3BhdXNlX2N0cmwpOworQkNN QVNQX0ZQX0lPX01BQ1JPKHJ4X2VkcGt0X2RtYSk7CitCQ01BU1BfRlBfSU9fTUFDUk8ocnhfZWRw a3RfY2ZnKTsKKworI2RlZmluZSBfX0JDTUFTUF9GUF9JT19NQUNST19RKG5hbWUsIG0pCQkJCQlc CitzdGF0aWMgaW5saW5lIHU2NCBuYW1lIyNfcnEoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmLCB1 MzIgb2ZmKQkJXAorewkJCQkJCQkJCVwKKwl1NjQgcmVnID0zRCByZWFkcV9yZWxheGVkKGludGYt Pm0gKyBvZmYpOwkJCQlcCisJcmV0dXJuIHJlZzsJCQkJCQkJXAorfQkJCQkJCQkJCVwKK3N0YXRp YyBpbmxpbmUgdm9pZCBuYW1lIyNfd3Eoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmLCB1NjQgdmFs LCB1MzIgb2ZmKVwKK3sJCQkJCQkJCQlcCisJd3JpdGVxX3JlbGF4ZWQodmFsLCBpbnRmLT5tICsg b2ZmKTsJCQkJXAorfQorCisjZGVmaW5lIEJDTUFTUF9GUF9JT19NQUNST19RKG5hbWUpCV9fQkNN QVNQX0ZQX0lPX01BQ1JPX1EobmFtZSwgbmFtZSkKKworQkNNQVNQX0ZQX0lPX01BQ1JPX1EodHhf c3BiX2RtYSk7CitCQ01BU1BfRlBfSU9fTUFDUk9fUShyeF9lZHBrdF9kbWEpOworQkNNQVNQX0ZQ X0lPX01BQ1JPX1EocnhfZWRwa3RfY2ZnKTsKKworI2RlZmluZSBQS1RfT0ZGTE9BRF9OT1AJCQko MCA8PCAyOCkKKyNkZWZpbmUgUEtUX09GRkxPQURfSERSX09QCQkoMSA8PCAyOCkKKyNkZWZpbmUg IFBLVF9PRkZMT0FEX0hEUl9XUkJBQ0sJCUJJVCgxOSkKKyNkZWZpbmUgIFBLVF9PRkZMT0FEX0hE Ul9DT1VOVCh4KQkoKHgpIDw8IDE2KQorI2RlZmluZSAgUEtUX09GRkxPQURfSERSX1NJWkVfMSh4 KQkoKHgpIDw8IDQpCisjZGVmaW5lICBQS1RfT0ZGTE9BRF9IRFJfU0laRV8yKHgpCSh4KQorI2Rl ZmluZSAgUEtUX09GRkxPQURfSERSMl9TSVpFXzIoeCkJKCh4KSA8PCAyNCkKKyNkZWZpbmUgIFBL VF9PRkZMT0FEX0hEUjJfU0laRV8zKHgpCSgoeCkgPDwgMTIpCisjZGVmaW5lICBQS1RfT0ZGTE9B RF9IRFIyX1NJWkVfNCh4KQkoeCkKKyNkZWZpbmUgUEtUX09GRkxPQURfRVBLVF9PUAkJKDIgPDwg MjgpCisjZGVmaW5lICBQS1RfT0ZGTE9BRF9FUEtUX1dSQkFDSwlCSVQoMjMpCisjZGVmaW5lICBQ S1RfT0ZGTE9BRF9FUEtUX0lQKHgpCQkoKHgpIDw8IDIxKQorI2RlZmluZSAgUEtUX09GRkxPQURf RVBLVF9UUCh4KQkJKCh4KSA8PCAxOSkKKyNkZWZpbmUgIFBLVF9PRkZMT0FEX0VQS1RfTEVOKHgp CSgoeCkgPDwgMTYpCisjZGVmaW5lICBQS1RfT0ZGTE9BRF9FUEtUX0NTVU1fTDMJQklUKDE1KQor I2RlZmluZSAgUEtUX09GRkxPQURfRVBLVF9DU1VNX0wyCUJJVCgxNCkKKyNkZWZpbmUgIFBLVF9P RkZMT0FEX0VQS1RfSUQoeCkJCSgoeCkgPDwgMTIpCisjZGVmaW5lICBQS1RfT0ZGTE9BRF9FUEtU X1NFUSh4KQkoKHgpIDw8IDEwKQorI2RlZmluZSAgUEtUX09GRkxPQURfRVBLVF9UUyh4KQkJKCh4 KSA8PCA4KQorI2RlZmluZSAgUEtUX09GRkxPQURfRVBLVF9CTE9DKHgpCSh4KQorI2RlZmluZSBQ S1RfT0ZGTE9BRF9FTkRfT1AJCSg3IDw8IDI4KQorCitzdHJ1Y3QgYmNtYXNwX3BrdF9vZmZsb2Fk IHsKKwlfX2JlMzIJCW5vcDsKKwlfX2JlMzIJCWhlYWRlcjsKKwlfX2JlMzIJCWhlYWRlcjI7CisJ X19iZTMyCQllcGt0OworCV9fYmUzMgkJZW5kOworfTsKKworI2RlZmluZSBCQ01BU1BfQ09SRV9J T19NQUNSTyhuYW1lLCBvZmZzZXQpCQkJCVwKK3N0YXRpYyBpbmxpbmUgdTMyIG5hbWUjI19jb3Jl X3JsKHN0cnVjdCBiY21hc3BfcHJpdiAqcHJpdiwJCVwKKwkJCQkgdTMyIG9mZikJCQkJXAorewkJ CQkJCQkJCVwKKwl1MzIgcmVnID0zRCByZWFkbF9yZWxheGVkKHByaXYtPmJhc2UgKyAob2Zmc2V0 KSArIG9mZik7CQlcCisJcmV0dXJuIHJlZzsJCQkJCQkJXAorfQkJCQkJCQkJCVwKK3N0YXRpYyBp bmxpbmUgdm9pZCBuYW1lIyNfY29yZV93bChzdHJ1Y3QgYmNtYXNwX3ByaXYgKnByaXYsCQlcCisJ CQkJICB1MzIgdmFsLCB1MzIgb2ZmKQkJCVwKK3sJCQkJCQkJCQlcCisJd3JpdGVsX3JlbGF4ZWQo dmFsLCBwcml2LT5iYXNlICsgKG9mZnNldCkgKyBvZmYpOwkJXAorfQorCitCQ01BU1BfQ09SRV9J T19NQUNSTyhpbnRyMiwgQVNQX0lOVFIyX09GRlNFVCk7CitCQ01BU1BfQ09SRV9JT19NQUNSTyh3 YWtldXBfaW50cjIsIEFTUF9XQUtFVVBfSU5UUjJfT0ZGU0VUKTsKK0JDTUFTUF9DT1JFX0lPX01B Q1JPKHR4X2FuYWx5dGljcywgQVNQX1RYX0FOQUxZVElDU19PRkZTRVQpOworQkNNQVNQX0NPUkVf SU9fTUFDUk8ocnhfYW5hbHl0aWNzLCBBU1BfUlhfQU5BTFlUSUNTX09GRlNFVCk7CitCQ01BU1Bf Q09SRV9JT19NQUNSTyhyeF9jdHJsLCBBU1BfUlhfQ1RSTF9PRkZTRVQpOworQkNNQVNQX0NPUkVf SU9fTUFDUk8ocnhfZmlsdGVyLCBBU1BfUlhfRklMVEVSX09GRlNFVCk7CitCQ01BU1BfQ09SRV9J T19NQUNSTyhyeF9lZHBrdCwgQVNQX0VEUEtUX09GRlNFVCk7CitCQ01BU1BfQ09SRV9JT19NQUNS TyhjdHJsLCBBU1BfQ1RSTCk7CisKK3N0cnVjdCBiY21hc3BfaW50ZiAqYmNtYXNwX2ludGVyZmFj ZV9jcmVhdGUoc3RydWN0IGJjbWFzcF9wcml2ICpwcml2LAorCQkJCQkgICAgc3RydWN0IGRldmlj ZV9ub2RlICpuZGV2X2RuLCBpbnQgaSk7CisKK3ZvaWQgYmNtYXNwX2ludGVyZmFjZV9kZXN0cm95 KHN0cnVjdCBiY21hc3BfaW50ZiAqaW50Zik7CisKK3ZvaWQgYmNtYXNwX2VuYWJsZV90eF9pcnEo c3RydWN0IGJjbWFzcF9pbnRmICppbnRmLCBpbnQgZW4pOworCit2b2lkIGJjbWFzcF9lbmFibGVf cnhfaXJxKHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZiwgaW50IGVuKTsKKwordm9pZCBiY21hc3Bf Zmx1c2hfcnhfcG9ydChzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYpOworCitleHRlcm4gY29uc3Qg c3RydWN0IGV0aHRvb2xfb3BzIGJjbWFzcF9ldGh0b29sX29wczsKKworaW50IGJjbWFzcF9pbnRl cmZhY2Vfc3VzcGVuZChzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYpOworCitpbnQgYmNtYXNwX2lu dGVyZmFjZV9yZXN1bWUoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmKTsKKwordm9pZCBiY21hc3Bf c2V0X3Byb21pc2Moc3RydWN0IGJjbWFzcF9pbnRmICppbnRmLCBib29sIGVuKTsKKwordm9pZCBi Y21hc3Bfc2V0X2FsbG11bHRpKHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZiwgYm9vbCBlbik7CisK K3ZvaWQgYmNtYXNwX3NldF9icm9hZChzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsIGJvb2wgZW4p OworCit2b2lkIGJjbWFzcF9zZXRfb2FkZHIoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmLCBjb25z dCB1bnNpZ25lZCBjaGFyICphZGRyLAorCQkgICAgICBib29sIGVuKTsKKworaW50IGJjbWFzcF9z ZXRfZW5fbWRhX2ZpbHRlcihzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsIHVuc2lnbmVkIGNoYXIg KmFkZHIsCisJCQkgICAgIHVuc2lnbmVkIGNoYXIgKm1hc2spOworCit2b2lkIGJjbWFzcF9kaXNh YmxlX2FsbF9maWx0ZXJzKHN0cnVjdCBiY21hc3BfaW50ZiAqaW50Zik7CisKK3ZvaWQgYmNtYXNw X2NvcmVfY2xvY2tfc2V0X2ludGYoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmLCBib29sIGVuKTsK KworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3Ay L2JjbWFzcF9ldGh0b29sLmMgYi9kcml2ZXJzLz0KbmV0L2V0aGVybmV0L2Jyb2FkY29tL2FzcDIv YmNtYXNwX2V0aHRvb2wuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAu LjM5NGMwZTFjYjAyNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jy b2FkY29tL2FzcDIvYmNtYXNwX2V0aHRvb2wuYwpAQCAtMCwwICsxLDQwIEBACisvLyBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorI2RlZmluZSBwcl9mbXQoZm10KQkJCQkiYmNtYXNw X2V0aHRvb2w6ICIgZm10CisKKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjaW5jbHVkZSA8 bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisK KyNpbmNsdWRlICJiY21hc3AuaCIKKyNpbmNsdWRlICJiY21hc3BfaW50Zl9kZWZzLmgiCisKK3N0 YXRpYyB2b2lkIGJjbWFzcF9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJ ICAgICAgIHN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pCit7CisJc3Ryc2NweShpbmZvLT5k cml2ZXIsICJiY21hc3AiLCBzaXplb2YoaW5mby0+ZHJpdmVyKSk7CisJc3Ryc2NweShpbmZvLT5i dXNfaW5mbywgZGV2X25hbWUoZGV2LT5kZXYucGFyZW50KSwKKwkJc2l6ZW9mKGluZm8tPmJ1c19p bmZvKSk7Cit9CisKK3N0YXRpYyB1MzIgYmNtYXNwX2dldF9tc2dsZXZlbChzdHJ1Y3QgbmV0X2Rl dmljZSAqZGV2KQoreworCXN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZiA9M0QgbmV0ZGV2X3ByaXYo ZGV2KTsKKworCXJldHVybiBpbnRmLT5tc2dfZW5hYmxlOworfQorCitzdGF0aWMgdm9pZCBiY21h c3Bfc2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBsZXZlbCkKK3sKKwlz dHJ1Y3QgYmNtYXNwX2ludGYgKmludGYgPTNEIG5ldGRldl9wcml2KGRldik7CisKKwlpbnRmLT5t c2dfZW5hYmxlID0zRCBsZXZlbDsKK30KKworY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGJjbWFz cF9ldGh0b29sX29wcyA9M0QgeworCS5nZXRfZHJ2aW5mbwkJPTNEIGJjbWFzcF9nZXRfZHJ2aW5m bywKKwkuZ2V0X2xpbmsJCT0zRCBldGh0b29sX29wX2dldF9saW5rLAorCS5nZXRfbGlua19rc2V0 dGluZ3MJPTNEIHBoeV9ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncywKKwkuc2V0X2xpbmtfa3Nl dHRpbmdzCT0zRCBwaHlfZXRodG9vbF9zZXRfbGlua19rc2V0dGluZ3MsCisJLmdldF9tc2dsZXZl bAkJPTNEIGJjbWFzcF9nZXRfbXNnbGV2ZWwsCisJLnNldF9tc2dsZXZlbAkJPTNEIGJjbWFzcF9z ZXRfbXNnbGV2ZWwsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRj b20vYXNwMi9iY21hc3BfaW50Zi5jIGIvZHJpdmVycy9uZXQ9Ci9ldGhlcm5ldC9icm9hZGNvbS9h c3AyL2JjbWFzcF9pbnRmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw Li4wMjMyZjVjZjg5MDkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9i cm9hZGNvbS9hc3AyL2JjbWFzcF9pbnRmLmMKQEAgLTAsMCArMSwxMzQyIEBACisvLyBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorI2RlZmluZSBwcl9mbXQoZm10KQkJCSJiY21hc3Bf aW50ZjogIiBmbXQKKworI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNpbmNsdWRlIDxsaW51 eC9icmNtcGh5Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZGVs YXkuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L25l dGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX25ldC5oPgorI2luY2x1ZGUgPGxpbnV4L29m X21kaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9waHkuaD4KKyNpbmNsdWRlIDxsaW51eC9waHlfZml4 ZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHBfY2xhc3NpZnkuaD4KKyNpbmNsdWRlIDxsaW51eC9w bGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxuZXQvaXAuaD4KKyNpbmNsdWRlIDxuZXQvaXB2 Ni5oPgorCisjaW5jbHVkZSAiYmNtYXNwLmgiCisjaW5jbHVkZSAiYmNtYXNwX2ludGZfZGVmcy5o IgorCitzdGF0aWMgaW50IGluY3JfcmluZyhpbnQgaW5kZXgsIGludCByaW5nX2NvdW50KQorewor CWluZGV4Kys7CisJaWYgKGluZGV4ID0zRD0zRCByaW5nX2NvdW50KQorCQlyZXR1cm4gMDsKKwor CXJldHVybiBpbmRleDsKK30KKworLyogUG9pbnRzIHRvIGxhc3QgYnl0ZSBvZiBkZXNjcmlwdG9y ICovCitzdGF0aWMgZG1hX2FkZHJfdCBpbmNyX2xhc3RfYnl0ZShkbWFfYWRkcl90IGFkZHIsIGRt YV9hZGRyX3QgYmVnLAorCQkJCSBpbnQgcmluZ19jb3VudCkKK3sKKwlkbWFfYWRkcl90IGVuZCA9 M0QgYmVnICsgKHJpbmdfY291bnQgKiBERVNDX1NJWkUpOworCisJYWRkciArPTNEIERFU0NfU0la RTsKKwlpZiAoYWRkciA+IGVuZCkKKwkJcmV0dXJuIGJlZyArIERFU0NfU0laRSAtIDE7CisKKwly ZXR1cm4gYWRkcjsKK30KKworLyogUG9pbnRzIHRvIGZpcnN0IGJ5dGUgb2YgZGVzY3JpcHRvciAq Lworc3RhdGljIGRtYV9hZGRyX3QgaW5jcl9maXJzdF9ieXRlKGRtYV9hZGRyX3QgYWRkciwgZG1h X2FkZHJfdCBiZWcsCisJCQkJICBpbnQgcmluZ19jb3VudCkKK3sKKwlkbWFfYWRkcl90IGVuZCA9 M0QgYmVnICsgKHJpbmdfY291bnQgKiBERVNDX1NJWkUpOworCisJYWRkciArPTNEIERFU0NfU0la RTsKKwlpZiAoYWRkciA+PTNEIGVuZCkKKwkJcmV0dXJuIGJlZzsKKworCXJldHVybiBhZGRyOwor fQorCitzdGF0aWMgdm9pZCBiY21hc3BfZW5hYmxlX3R4KHN0cnVjdCBiY21hc3BfaW50ZiAqaW50 ZiwgaW50IGVuKQoreworCWlmIChlbikgeworCQl0eF9zcGJfY3RybF93bChpbnRmLCBUWF9TUEJf Q1RSTF9FTkFCTEVfRU4sIFRYX1NQQl9DVFJMX0VOQUJMRSk7CisJCXR4X2Vwa3RfY29yZV93bChp bnRmLCAoVFhfRVBLVF9DX0NGR19NSVNDX0VOIHwKKwkJCQlUWF9FUEtUX0NfQ0ZHX01JU0NfUFQg fAorCQkJCShpbnRmLT5wb3J0IDw8IFRYX0VQS1RfQ19DRkdfTUlTQ19QU19TSElGVCkpLAorCQkJ CVRYX0VQS1RfQ19DRkdfTUlTQyk7CisJfSBlbHNlIHsKKwkJdHhfc3BiX2N0cmxfd2woaW50Ziwg MHgwLCBUWF9TUEJfQ1RSTF9FTkFCTEUpOworCQl0eF9lcGt0X2NvcmVfd2woaW50ZiwgMHgwLCBU WF9FUEtUX0NfQ0ZHX01JU0MpOworCX0KK30KKworc3RhdGljIHZvaWQgYmNtYXNwX2VuYWJsZV9y eChzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsIGludCBlbikKK3sKKwlpZiAoZW4pCisJCXJ4X2Vk cGt0X2NmZ193bChpbnRmLCBSWF9FRFBLVF9DRkdfRU5BQkxFX0VOLAorCQkJCVJYX0VEUEtUX0NG R19FTkFCTEUpOworCWVsc2UKKwkJcnhfZWRwa3RfY2ZnX3dsKGludGYsIDB4MCwgUlhfRURQS1Rf Q0ZHX0VOQUJMRSk7Cit9CisKK3N0YXRpYyB2b2lkIGJjbWFzcF9zZXRfcnhfbW9kZShzdHJ1Y3Qg bmV0X2RldmljZSAqZGV2KQoreworCXVuc2lnbmVkIGNoYXIgbWFza1tdID0zRCB7MHhmZiwgMHhm ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZn07CisJc3RydWN0IGJjbWFzcF9pbnRmICppbnRmID0z RCBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7CisJaW50IHJl dDsKKworCXNwaW5fbG9ja19iaCgmaW50Zi0+cGFyZW50LT5tZGFfbG9jayk7CisKKwliY21hc3Bf ZGlzYWJsZV9hbGxfZmlsdGVycyhpbnRmKTsKKworCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01J U0MpCisJCWdvdG8gc2V0X3Byb21pc2M7CisKKwliY21hc3Bfc2V0X3Byb21pc2MoaW50ZiwgMCk7 CisKKwliY21hc3Bfc2V0X2Jyb2FkKGludGYsIDEpOworCisJYmNtYXNwX3NldF9vYWRkcihpbnRm LCBkZXYtPmRldl9hZGRyLCAxKTsKKworCWlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB7 CisJCWJjbWFzcF9zZXRfYWxsbXVsdGkoaW50ZiwgMSk7CisJfSBlbHNlIHsKKwkJYmNtYXNwX3Nl dF9hbGxtdWx0aShpbnRmLCAwKTsKKworCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihoYSwgZGV2 KSB7CisJCQlyZXQgPTNEIGJjbWFzcF9zZXRfZW5fbWRhX2ZpbHRlcihpbnRmLCBoYS0+YWRkciwg bWFzayk7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gc2V0X3Byb21pc2M7CisJCX0KKwl9CisKKwlu ZXRkZXZfZm9yX2VhY2hfdWNfYWRkcihoYSwgZGV2KSB7CisJCXJldCA9M0QgYmNtYXNwX3NldF9l bl9tZGFfZmlsdGVyKGludGYsIGhhLT5hZGRyLCBtYXNrKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8g c2V0X3Byb21pc2M7CisJfQorCisJc3Bpbl91bmxvY2tfYmgoJmludGYtPnBhcmVudC0+bWRhX2xv Y2spOworCXJldHVybjsKKworc2V0X3Byb21pc2M6CisJYmNtYXNwX3NldF9wcm9taXNjKGludGYs IDEpOworCisJLyogZGlzYWJsZSBhbGwgZmlsdGVycyB1c2VkIGJ5IHRoaXMgcG9ydCAqLworCWJj bWFzcF9kaXNhYmxlX2FsbF9maWx0ZXJzKGludGYpOworCisJc3Bpbl91bmxvY2tfYmgoJmludGYt PnBhcmVudC0+bWRhX2xvY2spOworfQorCitzdGF0aWMgdm9pZCBiY21hc3BfY2xlYW5fdHhjYihz dHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsIGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgYmNtYXNwX3R4 X2NiICp0eGNiID0zRCAmaW50Zi0+dHhfY2JzW2luZGV4XTsKKworCXR4Y2ItPnNrYiA9M0QgTlVM TDsKKwlkbWFfdW5tYXBfYWRkcl9zZXQodHhjYiwgZG1hX2FkZHIsIDApOworCWRtYV91bm1hcF9s ZW5fc2V0KHR4Y2IsIGRtYV9sZW4sIDApOworCXR4Y2ItPmxhc3QgPTNEIGZhbHNlOworfQorCitz dGF0aWMgaW50IHR4X3NwYl9yaW5nX2Z1bGwoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmLCBpbnQg Y250KQoreworCWludCBuZXh0X2luZGV4LCBpOworCisJLyogQ2hlY2sgaWYgd2UgaGF2ZSBlbm91 Z2ggcm9vbSBmb3IgY250IGRlc2NyaXB0b3JzICovCisJZm9yIChpID0zRCAwOyBpIDwgY250OyBp KyspIHsKKwkJbmV4dF9pbmRleCA9M0QgaW5jcl9yaW5nKGludGYtPnR4X3NwYl9pbmRleCwgREVT Q19SSU5HX0NPVU5UKTsKKwkJaWYgKG5leHRfaW5kZXggPTNEPTNEIGludGYtPnR4X3NwYl9jbGVh bl9pbmRleCkKKwkJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3Ry dWN0IHNrX2J1ZmYgKmJjbWFzcF9jc3VtX29mZmxvYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwK KwkJCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgYm9vbCAqY3N1bV9odykKK3sK Kwl1MzIgaGVhZGVyID0zRCAwLCBoZWFkZXIyID0zRCAwLCBlcGt0ID0zRCAwOworCXN0cnVjdCBi Y21hc3BfcGt0X29mZmxvYWQgKm9mZmxvYWQ7CisJdW5zaWduZWQgaW50IGhlYWRlcl9jbnQgPTNE IDA7CisJdTggaXBfcHJvdG87CisJaW50IHJldDsKKworCWlmIChza2ItPmlwX3N1bW1lZCAhPTNE IENIRUNLU1VNX1BBUlRJQUwpCisJCXJldHVybiBza2I7CisKKwlyZXQgPTNEIHNrYl9jb3dfaGVh ZChza2IsIHNpemVvZigqb2ZmbG9hZCkpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGhlbHA7CisK Kwlzd2l0Y2ggKHNrYi0+cHJvdG9jb2wpIHsKKwljYXNlIGh0b25zKEVUSF9QX0lQKToKKwkJaGVh ZGVyIHw9M0QgUEtUX09GRkxPQURfSERSX1NJWkVfMigoaXBfaGRybGVuKHNrYikgPj4gOCkgJiAw eGYpOworCQloZWFkZXIyIHw9M0QgUEtUX09GRkxPQURfSERSMl9TSVpFXzIoaXBfaGRybGVuKHNr YikgJiAweGZmKTsKKwkJZXBrdCB8PTNEIFBLVF9PRkZMT0FEX0VQS1RfSVAoMCkgfCBQS1RfT0ZG TE9BRF9FUEtUX0NTVU1fTDI7CisJCWlwX3Byb3RvID0zRCBpcF9oZHIoc2tiKS0+cHJvdG9jb2w7 CisJCWhlYWRlcl9jbnQgKz0zRCAyOworCQlicmVhazsKKwljYXNlIGh0b25zKEVUSF9QX0lQVjYp OgorCQloZWFkZXIgfD0zRCBQS1RfT0ZGTE9BRF9IRFJfU0laRV8yKChJUDZfSExFTiA+PiA4KSAm IDB4Zik7CisJCWhlYWRlcjIgfD0zRCBQS1RfT0ZGTE9BRF9IRFIyX1NJWkVfMihJUDZfSExFTiAm IDB4ZmYpOworCQllcGt0IHw9M0QgUEtUX09GRkxPQURfRVBLVF9JUCgxKSB8IFBLVF9PRkZMT0FE X0VQS1RfQ1NVTV9MMjsKKwkJaXBfcHJvdG8gPTNEIGlwdjZfaGRyKHNrYiktPm5leHRoZHI7CisJ CWhlYWRlcl9jbnQgKz0zRCAyOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlnb3RvIGhlbHA7CisJ fQorCisJc3dpdGNoIChpcF9wcm90bykgeworCWNhc2UgSVBQUk9UT19UQ1A6CisJCWhlYWRlcjIg fD0zRCBQS1RfT0ZGTE9BRF9IRFIyX1NJWkVfMyh0Y3BfaGRybGVuKHNrYikpOworCQllcGt0IHw9 M0QgUEtUX09GRkxPQURfRVBLVF9UUCgwKSB8IFBLVF9PRkZMT0FEX0VQS1RfQ1NVTV9MMzsKKwkJ aGVhZGVyX2NudCsrOworCQlicmVhazsKKwljYXNlIElQUFJPVE9fVURQOgorCQloZWFkZXIyIHw9 M0QgUEtUX09GRkxPQURfSERSMl9TSVpFXzMoVURQX0hMRU4pOworCQllcGt0IHw9M0QgUEtUX09G RkxPQURfRVBLVF9UUCgxKSB8IFBLVF9PRkZMT0FEX0VQS1RfQ1NVTV9MMzsKKwkJaGVhZGVyX2Nu dCsrOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlnb3RvIGhlbHA7CisJfQorCisJb2ZmbG9hZCA9 M0QgKHN0cnVjdCBiY21hc3BfcGt0X29mZmxvYWQgKilza2JfcHVzaChza2IsIHNpemVvZigqb2Zm bG9hZCkpOworCisJaGVhZGVyIHw9M0QgUEtUX09GRkxPQURfSERSX09QIHwgUEtUX09GRkxPQURf SERSX0NPVU5UKGhlYWRlcl9jbnQpIHwKKwkJICBQS1RfT0ZGTE9BRF9IRFJfU0laRV8xKEVUSF9I TEVOKTsKKwllcGt0IHw9M0QgUEtUX09GRkxPQURfRVBLVF9PUDsKKworCW9mZmxvYWQtPm5vcCA9 M0QgaHRvbmwoUEtUX09GRkxPQURfTk9QKTsKKwlvZmZsb2FkLT5oZWFkZXIgPTNEIGh0b25sKGhl YWRlcik7CisJb2ZmbG9hZC0+aGVhZGVyMiA9M0QgaHRvbmwoaGVhZGVyMik7CisJb2ZmbG9hZC0+ ZXBrdCA9M0QgaHRvbmwoZXBrdCk7CisJb2ZmbG9hZC0+ZW5kID0zRCBodG9ubChQS1RfT0ZGTE9B RF9FTkRfT1ApOworCSpjc3VtX2h3ID0zRCB0cnVlOworCisJcmV0dXJuIHNrYjsKKworaGVscDoK Kwlza2JfY2hlY2tzdW1faGVscChza2IpOworCisJcmV0dXJuIHNrYjsKK30KKworc3RhdGljIHVu c2lnbmVkIGxvbmcgYmNtYXNwX3J4X2VkcGt0X2RtYV9ycShzdHJ1Y3QgYmNtYXNwX2ludGYgKmlu dGYpCit7CisJcmV0dXJuIHJ4X2VkcGt0X2RtYV9ycShpbnRmLCBSWF9FRFBLVF9ETUFfVkFMSUQp OworfQorCitzdGF0aWMgdm9pZCBiY21hc3BfcnhfZWRwa3RfY2ZnX3dxKHN0cnVjdCBiY21hc3Bf aW50ZiAqaW50ZiwgZG1hX2FkZHJfdCBhZD0KZHIpCit7CisJcnhfZWRwa3RfY2ZnX3dxKGludGYs IGFkZHIsIFJYX0VEUEtUX1JJTkdfQlVGRkVSX1JFQUQpOworfQorCitzdGF0aWMgdm9pZCBiY21h c3BfcnhfZWRwa3RfZG1hX3dxKHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZiwgZG1hX2FkZHJfdCBh ZD0KZHIpCit7CisJcnhfZWRwa3RfZG1hX3dxKGludGYsIGFkZHIsIFJYX0VEUEtUX0RNQV9SRUFE KTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgYmNtYXNwX3R4X3NwYl9kbWFfcnEoc3RydWN0 IGJjbWFzcF9pbnRmICppbnRmKQoreworCXJldHVybiB0eF9zcGJfZG1hX3JxKGludGYsIFRYX1NQ Ql9ETUFfUkVBRCk7Cit9CisKK3N0YXRpYyB2b2lkIGJjbWFzcF90eF9zcGJfZG1hX3dxKHN0cnVj dCBiY21hc3BfaW50ZiAqaW50ZiwgZG1hX2FkZHJfdCBhZGRyKQoreworCXR4X3NwYl9kbWFfd3Eo aW50ZiwgYWRkciwgVFhfU1BCX0RNQV9WQUxJRCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg YmNtYXNwX2ludGZfb3BzIGJjbWFzcF9pbnRmX29wcyA9M0QgeworCS5yeF9kZXNjX3JlYWQgPTNE IGJjbWFzcF9yeF9lZHBrdF9kbWFfcnEsCisJLnJ4X2J1ZmZlcl93cml0ZSA9M0QgYmNtYXNwX3J4 X2VkcGt0X2NmZ193cSwKKwkucnhfZGVzY193cml0ZSA9M0QgYmNtYXNwX3J4X2VkcGt0X2RtYV93 cSwKKwkudHhfcmVhZCA9M0QgYmNtYXNwX3R4X3NwYl9kbWFfcnEsCisJLnR4X3dyaXRlID0zRCBi Y21hc3BfdHhfc3BiX2RtYV93cSwKK307CisKK3N0YXRpYyBuZXRkZXZfdHhfdCBiY21hc3BfeG1p dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVj dCBiY21hc3BfaW50ZiAqaW50ZiA9M0QgbmV0ZGV2X3ByaXYoZGV2KTsKKwl1bnNpZ25lZCBpbnQg dG90YWxfYnl0ZXMsIHNpemU7CisJaW50IHNwYl9pbmRleCwgbnJfZnJhZ3MsIGksIGo7CisJc3Ry dWN0IGJjbWFzcF90eF9jYiAqdHhjYjsKKwlkbWFfYWRkcl90IG1hcHBpbmcsIHZhbGlkOworCXN0 cnVjdCBiY21hc3BfZGVzYyAqZGVzYzsKKwlib29sIGNzdW1faHcgPTNEIGZhbHNlOworCXN0cnVj dCBkZXZpY2UgKmtkZXY7CisJc2tiX2ZyYWdfdCAqZnJhZzsKKworCWtkZXYgPTNEICZpbnRmLT5w YXJlbnQtPnBkZXYtPmRldjsKKworCW5yX2ZyYWdzID0zRCBza2Jfc2hpbmZvKHNrYiktPm5yX2Zy YWdzOworCisJaWYgKHR4X3NwYl9yaW5nX2Z1bGwoaW50ZiwgbnJfZnJhZ3MgKyAxKSkgeworCQlu ZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQluZXRkZXZf ZXJyKGRldiwgIlR4IFJpbmcgRnVsbCFcbiIpOworCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CisJ fQorCisJLyogU2F2ZSBza2IgbGVuIGJlZm9yZSBhZGRpbmcgY3N1bSBvZmZsb2FkIGhlYWRlciAq LworCXRvdGFsX2J5dGVzID0zRCBza2ItPmxlbjsKKwlza2IgPTNEIGJjbWFzcF9jc3VtX29mZmxv YWQoZGV2LCBza2IsICZjc3VtX2h3KTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIE5FVERFVl9UWF9P SzsKKworCXNwYl9pbmRleCA9M0QgaW50Zi0+dHhfc3BiX2luZGV4OworCXZhbGlkID0zRCBpbnRm LT50eF9zcGJfZG1hX3ZhbGlkOworCWZvciAoaSA9M0QgMDsgaSA8PTNEIG5yX2ZyYWdzOyBpKysp IHsKKwkJaWYgKCFpKSB7CisJCQlzaXplID0zRCBza2JfaGVhZGxlbihza2IpOworCQkJaWYgKCFu cl9mcmFncyAmJiBzaXplIDwgKEVUSF9aTEVOICsgRVRIX0ZDU19MRU4pKSB7CisJCQkJaWYgKHNr Yl9wdXRfcGFkdG8oc2tiLCBFVEhfWkxFTiArIEVUSF9GQ1NfTEVOKSkKKwkJCQkJcmV0dXJuIE5F VERFVl9UWF9PSzsKKwkJCQlzaXplID0zRCBza2ItPmxlbjsKKwkJCX0KKwkJCW1hcHBpbmcgPTNE IGRtYV9tYXBfc2luZ2xlKGtkZXYsIHNrYi0+ZGF0YSwgc2l6ZSwKKwkJCQkJCSBETUFfVE9fREVW SUNFKTsKKwkJfSBlbHNlIHsKKwkJCWZyYWcgPTNEICZza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2kg LSAxXTsKKwkJCXNpemUgPTNEIHNrYl9mcmFnX3NpemUoZnJhZyk7CisJCQltYXBwaW5nID0zRCBz a2JfZnJhZ19kbWFfbWFwKGtkZXYsIGZyYWcsIDAsIHNpemUsCisJCQkJCQkgICBETUFfVE9fREVW SUNFKTsKKwkJfQorCisJCWlmIChkbWFfbWFwcGluZ19lcnJvcihrZGV2LCBtYXBwaW5nKSkgewor CQkJc3BiX2luZGV4ID0zRCBpbnRmLT50eF9zcGJfaW5kZXg7CisJCQlmb3IgKGogPTNEIDA7IGog PCBpOyBqKyspIHsKKwkJCQliY21hc3BfY2xlYW5fdHhjYihpbnRmLCBzcGJfaW5kZXgpOworCQkJ CXNwYl9pbmRleCA9M0QgaW5jcl9yaW5nKHNwYl9pbmRleCwKKwkJCQkJCSAgICAgIERFU0NfUklO R19DT1VOVCk7CisJCQl9CisJCQkvKiBSZXdpbmQgc28gd2UgZG8gbm90IGhhdmUgYSBob2xlICov CisJCQlzcGJfaW5kZXggPTNEIGludGYtPnR4X3NwYl9pbmRleDsKKwkJCXJldHVybiBORVRERVZf VFhfT0s7CisJCX0KKworCQl0eGNiID0zRCAmaW50Zi0+dHhfY2JzW3NwYl9pbmRleF07CisJCWRl c2MgPTNEICZpbnRmLT50eF9zcGJfY3B1W3NwYl9pbmRleF07CisJCW1lbXNldChkZXNjLCAwLCBz aXplb2YoKmRlc2MpKTsKKwkJdHhjYi0+c2tiID0zRCBza2I7CisJCXR4Y2ItPmJ5dGVzX3NlbnQg PTNEIHRvdGFsX2J5dGVzOworCQlkbWFfdW5tYXBfYWRkcl9zZXQodHhjYiwgZG1hX2FkZHIsIG1h cHBpbmcpOworCQlkbWFfdW5tYXBfbGVuX3NldCh0eGNiLCBkbWFfbGVuLCBzaXplKTsKKwkJaWYg KCFpKSB7CisJCQlkZXNjLT5mbGFncyB8PTNEIERFU0NfU09GOworCQkJaWYgKGNzdW1faHcpCisJ CQkJZGVzYy0+ZmxhZ3MgfD0zRCBERVNDX0VQS1RfQ01EOworCQl9CisKKwkJaWYgKGkgPTNEPTNE IG5yX2ZyYWdzKSB7CisJCQlkZXNjLT5mbGFncyB8PTNEIERFU0NfRU9GOworCQkJdHhjYi0+bGFz dCA9M0QgdHJ1ZTsKKwkJfQorCisJCWRlc2MtPmJ1ZiA9M0QgbWFwcGluZzsKKwkJZGVzYy0+c2l6 ZSA9M0Qgc2l6ZTsKKwkJZGVzYy0+ZmxhZ3MgfD0zRCBERVNDX0lOVF9FTjsKKworCQluZXRpZl9k YmcoaW50ZiwgdHhfcXVldWVkLCBkZXYsCisJCQkgICIlcyBkbWFfYnVmPTNEJXBhZCBkbWFfbGVu PTNEMHgleCBmbGFncz0zRDB4JXggaW5kZXg9M0QweCV4XG4iLAorCQkJICBfX2Z1bmNfXywgJm1h cHBpbmcsIGRlc2MtPnNpemUsIGRlc2MtPmZsYWdzLAorCQkJICBzcGJfaW5kZXgpOworCisJCXNw Yl9pbmRleCA9M0QgaW5jcl9yaW5nKHNwYl9pbmRleCwgREVTQ19SSU5HX0NPVU5UKTsKKwkJdmFs aWQgPTNEIGluY3JfbGFzdF9ieXRlKHZhbGlkLCBpbnRmLT50eF9zcGJfZG1hX2FkZHIsCisJCQkJ ICAgICAgIERFU0NfUklOR19DT1VOVCk7CisJfQorCisJLyogRW5zdXJlIGFsbCBkZXNjcmlwdG9y cyBoYXZlIGJlZW4gd3JpdHRlbiB0byBEUkFNIGZvciB0aGUKKwkgKiBoYXJkd2FyZSB0byBzZWUg dXAtdG8tZGF0ZSBjb250ZW50cy4KKwkgKi8KKwl3bWIoKTsKKworCWludGYtPnR4X3NwYl9pbmRl eCA9M0Qgc3BiX2luZGV4OworCWludGYtPnR4X3NwYl9kbWFfdmFsaWQgPTNEIHZhbGlkOworCWJj bWFzcF9pbnRmX3R4X3dyaXRlKGludGYsIGludGYtPnR4X3NwYl9kbWFfdmFsaWQpOworCisJaWYg KHR4X3NwYl9yaW5nX2Z1bGwoaW50ZiwgTUFYX1NLQl9GUkFHUyArIDEpKQorCQluZXRpZl9zdG9w X3F1ZXVlKGRldik7CisKKwlyZXR1cm4gTkVUREVWX1RYX09LOworfQorCitzdGF0aWMgdm9pZCBi Y21hc3BfbmV0aWZfc3RhcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYmNt YXNwX2ludGYgKmludGYgPTNEIG5ldGRldl9wcml2KGRldik7CisKKwliY21hc3Bfc2V0X3J4X21v ZGUoZGV2KTsKKwluYXBpX2VuYWJsZSgmaW50Zi0+dHhfbmFwaSk7CisJbmFwaV9lbmFibGUoJmlu dGYtPnJ4X25hcGkpOworCisJYmNtYXNwX2VuYWJsZV9yeF9pcnEoaW50ZiwgMSk7CisJYmNtYXNw X2VuYWJsZV90eF9pcnEoaW50ZiwgMSk7CisKKwlwaHlfc3RhcnQoZGV2LT5waHlkZXYpOworfQor CitzdGF0aWMgdm9pZCB1bWFjX3Jlc2V0KHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZikKK3sKKwl1 bWFjX3dsKGludGYsIDB4MCwgVU1DX0NNRCk7CisJdW1hY193bChpbnRmLCBVTUNfQ01EX1NXX1JF U0VULCBVTUNfQ01EKTsKKwl1c2xlZXBfcmFuZ2UoMTAsIDEwMCk7CisJdW1hY193bChpbnRmLCAw eDAsIFVNQ19DTUQpOworfQorCitzdGF0aWMgdm9pZCB1bWFjX3NldF9od19hZGRyKHN0cnVjdCBi Y21hc3BfaW50ZiAqaW50ZiwKKwkJCSAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcikKK3sK Kwl1MzIgbWFjMCA9M0QgKGFkZHJbMF0gPDwgMjQpIHwgKGFkZHJbMV0gPDwgMTYpIHwgKGFkZHJb Ml0gPDwgOCkgfAorCQkgICAgYWRkclszXTsKKwl1MzIgbWFjMSA9M0QgKGFkZHJbNF0gPDwgOCkg fCBhZGRyWzVdOworCisJdW1hY193bChpbnRmLCBtYWMwLCBVTUNfTUFDMCk7CisJdW1hY193bChp bnRmLCBtYWMxLCBVTUNfTUFDMSk7Cit9CisKK3N0YXRpYyB2b2lkIHVtYWNfZW5hYmxlX3NldChz dHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsIHUzMiBtYXNrLAorCQkJICAgIHVuc2lnbmVkIGludCBl bmFibGUpCit7CisJdTMyIHJlZzsKKworCXJlZyA9M0QgdW1hY19ybChpbnRmLCBVTUNfQ01EKTsK KwlpZiAoZW5hYmxlKQorCQlyZWcgfD0zRCBtYXNrOworCWVsc2UKKwkJcmVnICY9M0Qgfm1hc2s7 CisJdW1hY193bChpbnRmLCByZWcsIFVNQ19DTUQpOworCisJLyogVW5pTUFDIHN0b3BzIG9uIGEg cGFja2V0IGJvdW5kYXJ5LCB3YWl0IGZvciBhIGZ1bGwtc2l6ZWQgcGFja2V0CisJICogdG8gYmUg cHJvY2Vzc2VkICgxIG1zZWMpLgorCSAqLworCWlmIChlbmFibGUgPTNEPTNEIDApCisJCXVzbGVl cF9yYW5nZSgxMDAwLCAyMDAwKTsKK30KKworc3RhdGljIHZvaWQgdW1hY19pbml0KHN0cnVjdCBi Y21hc3BfaW50ZiAqaW50ZikKK3sKKwl1bWFjX3dsKGludGYsIDB4ODAwLCBVTUNfRlJNX0xFTik7 CisJdW1hY193bChpbnRmLCAweGZmZmYsIFVNQ19QQVVTRV9DTlRSTCk7CisJdW1hY193bChpbnRm LCAweDgwMCwgVU1DX1JYX01BWF9QS1RfU1opOworCXVtYWNfZW5hYmxlX3NldChpbnRmLCBVTUNf Q01EX1BST01JU0MsIDEpOworfQorCitzdGF0aWMgaW50IGJjbWFzcF90eF9wb2xsKHN0cnVjdCBu YXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKK3sKKwlzdHJ1Y3QgYmNtYXNwX2ludGYgKmlu dGYgPTNECisJCWNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QgYmNtYXNwX2ludGYsIHR4X25hcGkp OworCXN0cnVjdCBiY21hc3BfaW50Zl9zdGF0czY0ICpzdGF0cyA9M0QgJmludGYtPnN0YXRzNjQ7 CisJc3RydWN0IGRldmljZSAqa2RldiA9M0QgJmludGYtPnBhcmVudC0+cGRldi0+ZGV2OworCXVu c2lnbmVkIGxvbmcgcmVhZCwgcmVsZWFzZWQgPTNEIDA7CisJc3RydWN0IGJjbWFzcF90eF9jYiAq dHhjYjsKKwlzdHJ1Y3QgYmNtYXNwX2Rlc2MgKmRlc2M7CisJZG1hX2FkZHJfdCBtYXBwaW5nOwor CisJcmVhZCA9M0QgYmNtYXNwX2ludGZfdHhfcmVhZChpbnRmKTsKKwl3aGlsZSAoaW50Zi0+dHhf c3BiX2RtYV9yZWFkICE9M0QgcmVhZCkgeworCQl0eGNiID0zRCAmaW50Zi0+dHhfY2JzW2ludGYt PnR4X3NwYl9jbGVhbl9pbmRleF07CisJCW1hcHBpbmcgPTNEIGRtYV91bm1hcF9hZGRyKHR4Y2Is IGRtYV9hZGRyKTsKKworCQlkbWFfdW5tYXBfc2luZ2xlKGtkZXYsIG1hcHBpbmcsCisJCQkJIGRt YV91bm1hcF9sZW4odHhjYiwgZG1hX2xlbiksCisJCQkJIERNQV9UT19ERVZJQ0UpOworCisJCWlm ICh0eGNiLT5sYXN0KSB7CisJCQlkZXZfY29uc3VtZV9za2JfYW55KHR4Y2ItPnNrYik7CisKKwkJ CXU2NF9zdGF0c191cGRhdGVfYmVnaW4oJnN0YXRzLT5zeW5jcCk7CisJCQl1NjRfc3RhdHNfaW5j KCZzdGF0cy0+dHhfcGFja2V0cyk7CisJCQl1NjRfc3RhdHNfYWRkKCZzdGF0cy0+dHhfYnl0ZXMs IHR4Y2ItPmJ5dGVzX3NlbnQpOworCQkJdTY0X3N0YXRzX3VwZGF0ZV9lbmQoJnN0YXRzLT5zeW5j cCk7CisJCX0KKworCQlkZXNjID0zRCAmaW50Zi0+dHhfc3BiX2NwdVtpbnRmLT50eF9zcGJfY2xl YW5faW5kZXhdOworCisJCW5ldGlmX2RiZyhpbnRmLCB0eF9kb25lLCBpbnRmLT5uZGV2LAorCQkJ ICAiJXMgZG1hX2J1Zj0zRCVwYWQgZG1hX2xlbj0zRDB4JXggZmxhZ3M9M0QweCV4IGNfaW5kZXg9 M0QweCV4XG4iLAorCQkJICBfX2Z1bmNfXywgJm1hcHBpbmcsIGRlc2MtPnNpemUsIGRlc2MtPmZs YWdzLAorCQkJICBpbnRmLT50eF9zcGJfY2xlYW5faW5kZXgpOworCisJCWJjbWFzcF9jbGVhbl90 eGNiKGludGYsIGludGYtPnR4X3NwYl9jbGVhbl9pbmRleCk7CisJCXJlbGVhc2VkKys7CisKKwkJ aW50Zi0+dHhfc3BiX2NsZWFuX2luZGV4ID0zRCBpbmNyX3JpbmcoaW50Zi0+dHhfc3BiX2NsZWFu X2luZGV4LAorCQkJCQkJICAgICBERVNDX1JJTkdfQ09VTlQpOworCQlpbnRmLT50eF9zcGJfZG1h X3JlYWQgPTNEIGluY3JfZmlyc3RfYnl0ZShpbnRmLT50eF9zcGJfZG1hX3JlYWQsCisJCQkJCQkJ aW50Zi0+dHhfc3BiX2RtYV9hZGRyLAorCQkJCQkJCURFU0NfUklOR19DT1VOVCk7CisJfQorCisJ LyogRW5zdXJlIGFsbCBkZXNjcmlwdG9ycyBoYXZlIGJlZW4gd3JpdHRlbiB0byBEUkFNIGZvciB0 aGUgaGFyZHdhcmUKKwkgKiB0byBzZWUgdXBkYXRlZCBjb250ZW50cy4KKwkgKi8KKwl3bWIoKTsK KworCW5hcGlfY29tcGxldGUoJmludGYtPnR4X25hcGkpOworCisJYmNtYXNwX2VuYWJsZV90eF9p cnEoaW50ZiwgMSk7CisKKwlpZiAocmVsZWFzZWQpCisJCW5ldGlmX3dha2VfcXVldWUoaW50Zi0+ bmRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiY21hc3BfcnhfcG9sbChzdHJ1 Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCit7CisJc3RydWN0IGJjbWFzcF9pbnRm ICppbnRmID0zRAorCQljb250YWluZXJfb2YobmFwaSwgc3RydWN0IGJjbWFzcF9pbnRmLCByeF9u YXBpKTsKKwlzdHJ1Y3QgYmNtYXNwX2ludGZfc3RhdHM2NCAqc3RhdHMgPTNEICZpbnRmLT5zdGF0 czY0OworCXN0cnVjdCBkZXZpY2UgKmtkZXYgPTNEICZpbnRmLT5wYXJlbnQtPnBkZXYtPmRldjsK Kwl1bnNpZ25lZCBsb25nIHByb2Nlc3NlZCA9M0QgMDsKKwlzdHJ1Y3QgYmNtYXNwX2Rlc2MgKmRl c2M7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlkbWFfYWRkcl90IHZhbGlkOworCXZvaWQgKmRh dGE7CisJdTY0IGZsYWdzOworCXUzMiBsZW47CisKKwl2YWxpZCA9M0QgYmNtYXNwX2ludGZfcnhf ZGVzY19yZWFkKGludGYpICsgMTsKKwlpZiAodmFsaWQgPTNEPTNEIGludGYtPnJ4X2VkcGt0X2Rt YV9hZGRyICsgREVTQ19SSU5HX1NJWkUpCisJCXZhbGlkID0zRCBpbnRmLT5yeF9lZHBrdF9kbWFf YWRkcjsKKworCXdoaWxlICgocHJvY2Vzc2VkIDwgYnVkZ2V0KSAmJiAodmFsaWQgIT0zRCBpbnRm LT5yeF9lZHBrdF9kbWFfcmVhZCkpIHsKKwkJZGVzYyA9M0QgJmludGYtPnJ4X2VkcGt0X2NwdVtp bnRmLT5yeF9lZHBrdF9pbmRleF07CisKKwkJLyogRW5zdXJlIHRoYXQgZGVzY3JpcHRvciBoYXMg YmVlbiBmdWxseSB3cml0dGVuIHRvIERSQU0gYnkKKwkJICogaGFyZHdhcmUgYmVmb3JlIHJlYWRp bmcgYnkgdGhlIENQVQorCQkgKi8KKwkJcm1iKCk7CisKKwkJLyogQ2FsY3VsYXRlIHZpcnQgYWRk ciBieSBvZmZzZXR0aW5nIGZyb20gcGh5c2ljYWwgYWRkciAqLworCQlkYXRhID0zRCBpbnRmLT5y eF9yaW5nX2NwdSArCisJCQkoREVTQ19BRERSKGRlc2MtPmJ1ZikgLSBpbnRmLT5yeF9yaW5nX2Rt YSk7CisKKwkJZmxhZ3MgPTNEIERFU0NfRkxBR1MoZGVzYy0+YnVmKTsKKwkJaWYgKHVubGlrZWx5 KGZsYWdzICYgKERFU0NfQ1JDX0VSUiB8IERFU0NfUlhfU1lNX0VSUikpKSB7CisJCQlpZiAobmV0 X3JhdGVsaW1pdCgpKSB7CisJCQkJbmV0aWZfZXJyKGludGYsIHJ4X3N0YXR1cywgaW50Zi0+bmRl diwKKwkJCQkJICAiZmxhZ3M9M0QweCVsbHhcbiIsIGZsYWdzKTsKKwkJCX0KKworCQkJdTY0X3N0 YXRzX3VwZGF0ZV9iZWdpbigmc3RhdHMtPnN5bmNwKTsKKwkJCWlmIChmbGFncyAmIERFU0NfQ1JD X0VSUikKKwkJCQl1NjRfc3RhdHNfaW5jKCZzdGF0cy0+cnhfY3JjX2VycnMpOworCQkJaWYgKGZs YWdzICYgREVTQ19SWF9TWU1fRVJSKQorCQkJCXU2NF9zdGF0c19pbmMoJnN0YXRzLT5yeF9zeW1f ZXJycyk7CisJCQl1NjRfc3RhdHNfdXBkYXRlX2VuZCgmc3RhdHMtPnN5bmNwKTsKKworCQkJZ290 byBuZXh0OworCQl9CisKKwkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoa2RldiwgREVTQ19BRERS KGRlc2MtPmJ1ZiksIGRlc2MtPnNpemUsCisJCQkJCURNQV9GUk9NX0RFVklDRSk7CisKKwkJbGVu ID0zRCBkZXNjLT5zaXplOworCisJCXNrYiA9M0QgbmFwaV9hbGxvY19za2IobmFwaSwgbGVuKTsK KwkJaWYgKCFza2IpIHsKKwkJCXU2NF9zdGF0c191cGRhdGVfYmVnaW4oJnN0YXRzLT5zeW5jcCk7 CisJCQl1NjRfc3RhdHNfaW5jKCZzdGF0cy0+cnhfZHJvcHBlZCk7CisJCQl1NjRfc3RhdHNfdXBk YXRlX2VuZCgmc3RhdHMtPnN5bmNwKTsKKwkJCWdvdG8gbmV4dDsKKwkJfQorCisJCXNrYl9wdXQo c2tiLCBsZW4pOworCQltZW1jcHkoc2tiLT5kYXRhLCBkYXRhLCBsZW4pOworCisJCXNrYl9wdWxs KHNrYiwgMik7CisJCWxlbiAtPTNEIDI7CisJCWlmIChsaWtlbHkoaW50Zi0+Y3JjX2Z3ZCkpIHsK KwkJCXNrYl90cmltKHNrYiwgbGVuIC0gRVRIX0ZDU19MRU4pOworCQkJbGVuIC09M0QgRVRIX0ZD U19MRU47CisJCX0KKworCQlpZiAoKGludGYtPm5kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9SWENT VU0pICYmCisJCSAgICAoZGVzYy0+YnVmICYgREVTQ19DSEtTVU0pKQorCQkJc2tiLT5pcF9zdW1t ZWQgPTNEIENIRUNLU1VNX1VOTkVDRVNTQVJZOworCisJCXNrYi0+cHJvdG9jb2wgPTNEIGV0aF90 eXBlX3RyYW5zKHNrYiwgaW50Zi0+bmRldik7CisKKwkJbmFwaV9ncm9fcmVjZWl2ZShuYXBpLCBz a2IpOworCisJCXU2NF9zdGF0c191cGRhdGVfYmVnaW4oJnN0YXRzLT5zeW5jcCk7CisJCXU2NF9z dGF0c19pbmMoJnN0YXRzLT5yeF9wYWNrZXRzKTsKKwkJdTY0X3N0YXRzX2FkZCgmc3RhdHMtPnJ4 X2J5dGVzLCBsZW4pOworCQl1NjRfc3RhdHNfdXBkYXRlX2VuZCgmc3RhdHMtPnN5bmNwKTsKKwor bmV4dDoKKwkJYmNtYXNwX2ludGZfcnhfYnVmZmVyX3dyaXRlKGludGYsIChERVNDX0FERFIoZGVz Yy0+YnVmKSArCisJCQkJCSAgICBkZXNjLT5zaXplKSk7CisKKwkJcHJvY2Vzc2VkKys7CisJCWlu dGYtPnJ4X2VkcGt0X2RtYV9yZWFkID0zRAorCQkJaW5jcl9maXJzdF9ieXRlKGludGYtPnJ4X2Vk cGt0X2RtYV9yZWFkLAorCQkJCQlpbnRmLT5yeF9lZHBrdF9kbWFfYWRkciwKKwkJCQkJREVTQ19S SU5HX0NPVU5UKTsKKwkJaW50Zi0+cnhfZWRwa3RfaW5kZXggPTNEIGluY3JfcmluZyhpbnRmLT5y eF9lZHBrdF9pbmRleCwKKwkJCQkJCSBERVNDX1JJTkdfQ09VTlQpOworCX0KKworCWJjbWFzcF9p bnRmX3J4X2Rlc2Nfd3JpdGUoaW50ZiwgaW50Zi0+cnhfZWRwa3RfZG1hX3JlYWQpOworCisJaWYg KHByb2Nlc3NlZCA8IGJ1ZGdldCkgeworCQluYXBpX2NvbXBsZXRlX2RvbmUoJmludGYtPnJ4X25h cGksIHByb2Nlc3NlZCk7CisJCWJjbWFzcF9lbmFibGVfcnhfaXJxKGludGYsIDEpOworCX0KKwor CXJldHVybiBwcm9jZXNzZWQ7Cit9CisKK3N0YXRpYyB2b2lkIGJjbWFzcF9hZGpfbGluayhzdHJ1 Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZiA9M0QgbmV0 ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0zRCBkZXYtPnBoeWRl djsKKwl1MzIgY21kX2JpdHMgPTNEIDAsIHJlZzsKKwlpbnQgY2hhbmdlZCA9M0QgMDsKKworCWlm IChpbnRmLT5vbGRfbGluayAhPTNEIHBoeWRldi0+bGluaykgeworCQljaGFuZ2VkID0zRCAxOwor CQlpbnRmLT5vbGRfbGluayA9M0QgcGh5ZGV2LT5saW5rOworCX0KKworCWlmIChpbnRmLT5vbGRf ZHVwbGV4ICE9M0QgcGh5ZGV2LT5kdXBsZXgpIHsKKwkJY2hhbmdlZCA9M0QgMTsKKwkJaW50Zi0+ b2xkX2R1cGxleCA9M0QgcGh5ZGV2LT5kdXBsZXg7CisJfQorCisJc3dpdGNoIChwaHlkZXYtPnNw ZWVkKSB7CisJY2FzZSBTUEVFRF8yNTAwOgorCQljbWRfYml0cyA9M0QgVU1DX0NNRF9TUEVFRF8y NTAwOworCQlicmVhazsKKwljYXNlIFNQRUVEXzEwMDA6CisJCWNtZF9iaXRzID0zRCBVTUNfQ01E X1NQRUVEXzEwMDA7CisJCWJyZWFrOworCWNhc2UgU1BFRURfMTAwOgorCQljbWRfYml0cyA9M0Qg VU1DX0NNRF9TUEVFRF8xMDA7CisJCWJyZWFrOworCWNhc2UgU1BFRURfMTA6CisJCWNtZF9iaXRz ID0zRCBVTUNfQ01EX1NQRUVEXzEwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9 CisJY21kX2JpdHMgPDw9M0QgVU1DX0NNRF9TUEVFRF9TSElGVDsKKworCWlmIChwaHlkZXYtPmR1 cGxleCA9M0Q9M0QgRFVQTEVYX0hBTEYpCisJCWNtZF9iaXRzIHw9M0QgVU1DX0NNRF9IRF9FTjsK KworCWlmIChpbnRmLT5vbGRfcGF1c2UgIT0zRCBwaHlkZXYtPnBhdXNlKSB7CisJCWNoYW5nZWQg PTNEIDE7CisJCWludGYtPm9sZF9wYXVzZSA9M0QgcGh5ZGV2LT5wYXVzZTsKKwl9CisKKwlpZiAo IXBoeWRldi0+cGF1c2UpCisJCWNtZF9iaXRzIHw9M0QgVU1DX0NNRF9SWF9QQVVTRV9JR05PUkUg fCBVTUNfQ01EX1RYX1BBVVNFX0lHTk9SRTsKKworCWlmICghY2hhbmdlZCkKKwkJcmV0dXJuOwor CisJaWYgKHBoeWRldi0+bGluaykgeworCQlyZWcgPTNEIHVtYWNfcmwoaW50ZiwgVU1DX0NNRCk7 CisJCXJlZyAmPTNEIH4oKFVNQ19DTURfU1BFRURfTUFTSyA8PCBVTUNfQ01EX1NQRUVEX1NISUZU KSB8CisJCQlVTUNfQ01EX0hEX0VOIHwgVU1DX0NNRF9SWF9QQVVTRV9JR05PUkUgfAorCQkJVU1D X0NNRF9UWF9QQVVTRV9JR05PUkUpOworCQlyZWcgfD0zRCBjbWRfYml0czsKKwkJdW1hY193bChp bnRmLCByZWcsIFVNQ19DTUQpOworCX0KKworCXJlZyA9M0QgcmdtaWlfcmwoaW50ZiwgUkdNSUlf T09CX0NOVFJMKTsKKwlpZiAocGh5ZGV2LT5saW5rKQorCQlyZWcgfD0zRCBSR01JSV9MSU5LOwor CWVsc2UKKwkJcmVnICY9M0QgflJHTUlJX0xJTks7CisJcmdtaWlfd2woaW50ZiwgcmVnLCBSR01J SV9PT0JfQ05UUkwpOworCisJaWYgKGNoYW5nZWQpCisJCXBoeV9wcmludF9zdGF0dXMocGh5ZGV2 KTsKK30KKworc3RhdGljIGludCBiY21hc3BfaW5pdF9yeChzdHJ1Y3QgYmNtYXNwX2ludGYgKmlu dGYpCit7CisJc3RydWN0IGRldmljZSAqa2RldiA9M0QgJmludGYtPnBhcmVudC0+cGRldi0+ZGV2 OworCXN0cnVjdCBwYWdlICpidWZmZXJfcGc7CisJZG1hX2FkZHJfdCBkbWE7CisJdm9pZCAqcDsK Kwl1MzIgcmVnOworCWludCByZXQ7CisKKwlpbnRmLT5yeF9idWZfb3JkZXIgPTNEIGdldF9vcmRl cihSSU5HX0JVRkZFUl9TSVpFKTsKKwlidWZmZXJfcGcgPTNEIGFsbG9jX3BhZ2VzKEdGUF9LRVJO RUwsIGludGYtPnJ4X2J1Zl9vcmRlcik7CisKKwlkbWEgPTNEIGRtYV9tYXBfcGFnZShrZGV2LCBi dWZmZXJfcGcsIDAsIFJJTkdfQlVGRkVSX1NJWkUsCisJCQkgICBETUFfRlJPTV9ERVZJQ0UpOwor CWlmIChkbWFfbWFwcGluZ19lcnJvcihrZGV2LCBkbWEpKSB7CisJCV9fZnJlZV9wYWdlcyhidWZm ZXJfcGcsIGludGYtPnJ4X2J1Zl9vcmRlcik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlpbnRm LT5yeF9yaW5nX2NwdSA9M0QgcGFnZV90b192aXJ0KGJ1ZmZlcl9wZyk7CisJaW50Zi0+cnhfcmlu Z19kbWEgPTNEIGRtYTsKKwlpbnRmLT5yeF9yaW5nX2RtYV92YWxpZCA9M0QgaW50Zi0+cnhfcmlu Z19kbWEgKyBSSU5HX0JVRkZFUl9TSVpFIC0gMTsKKworCXAgPTNEIGRtYV9hbGxvY19jb2hlcmVu dChrZGV2LCBERVNDX1JJTkdfU0laRSwgJmludGYtPnJ4X2VkcGt0X2RtYV9hZGRyLAorCQkJICAg ICAgIEdGUF9LRVJORUwpOworCWlmICghcCkgeworCQlyZXQgPTNEIC1FTk9NRU07CisJCWdvdG8g ZnJlZV9yeF9yaW5nOworCX0KKwlpbnRmLT5yeF9lZHBrdF9jcHUgPTNEIHA7CisKKwluZXRpZl9u YXBpX2FkZChpbnRmLT5uZGV2LCAmaW50Zi0+cnhfbmFwaSwgYmNtYXNwX3J4X3BvbGwpOworCisJ aW50Zi0+cnhfZWRwa3RfZG1hX3JlYWQgPTNEIGludGYtPnJ4X2VkcGt0X2RtYV9hZGRyOworCWlu dGYtPnJ4X2VkcGt0X2luZGV4ID0zRCAwOworCisJLyogTWFrZSBzdXJlIGNoYW5uZWxzIGFyZSBk aXNhYmxlZCAqLworCXJ4X2VkcGt0X2NmZ193bChpbnRmLCAweDAsIFJYX0VEUEtUX0NGR19FTkFC TEUpOworCisJLyogUnggU1BCICovCisJcnhfZWRwa3RfY2ZnX3dxKGludGYsIGludGYtPnJ4X3Jp bmdfZG1hLCBSWF9FRFBLVF9SSU5HX0JVRkZFUl9SRUFEKTsKKwlyeF9lZHBrdF9jZmdfd3EoaW50 ZiwgaW50Zi0+cnhfcmluZ19kbWEsIFJYX0VEUEtUX1JJTkdfQlVGRkVSX1dSSVRFKTsKKwlyeF9l ZHBrdF9jZmdfd3EoaW50ZiwgaW50Zi0+cnhfcmluZ19kbWEsIFJYX0VEUEtUX1JJTkdfQlVGRkVS X0JBU0UpOworCXJ4X2VkcGt0X2NmZ193cShpbnRmLCBpbnRmLT5yeF9yaW5nX2RtYV92YWxpZCwK KwkJCVJYX0VEUEtUX1JJTkdfQlVGRkVSX0VORCk7CisJcnhfZWRwa3RfY2ZnX3dxKGludGYsIGlu dGYtPnJ4X3JpbmdfZG1hX3ZhbGlkLAorCQkJUlhfRURQS1RfUklOR19CVUZGRVJfVkFMSUQpOwor CisJLyogRURQS1QgKi8KKwlyeF9lZHBrdF9jZmdfd2woaW50ZiwgKFJYX0VEUEtUX0NGR19DRkcw X1JCVUZfNEsgPDwKKwkJCVJYX0VEUEtUX0NGR19DRkcwX0RCVUZfU0hJRlQpIHwKKwkJICAgICAg IChSWF9FRFBLVF9DRkdfQ0ZHMF82NF9BTE4gPDwKKwkJCVJYX0VEUEtUX0NGR19DRkcwX0JBTE5f U0hJRlQpIHwKKwkJICAgICAgIChSWF9FRFBLVF9DRkdfQ0ZHMF9FRlJNX1NUVUYpLAorCQkJUlhf RURQS1RfQ0ZHX0NGRzApOworCXJ4X2VkcGt0X2RtYV93cShpbnRmLCBpbnRmLT5yeF9lZHBrdF9k bWFfYWRkciwgUlhfRURQS1RfRE1BX1dSSVRFKTsKKwlyeF9lZHBrdF9kbWFfd3EoaW50ZiwgaW50 Zi0+cnhfZWRwa3RfZG1hX2FkZHIsIFJYX0VEUEtUX0RNQV9SRUFEKTsKKwlyeF9lZHBrdF9kbWFf d3EoaW50ZiwgaW50Zi0+cnhfZWRwa3RfZG1hX2FkZHIsIFJYX0VEUEtUX0RNQV9CQVNFKTsKKwly eF9lZHBrdF9kbWFfd3EoaW50ZiwgaW50Zi0+cnhfZWRwa3RfZG1hX2FkZHIgKyAoREVTQ19SSU5H X1NJWkUgLSAxKSwKKwkJCVJYX0VEUEtUX0RNQV9FTkQpOworCXJ4X2VkcGt0X2RtYV93cShpbnRm LCBpbnRmLT5yeF9lZHBrdF9kbWFfYWRkciArIChERVNDX1JJTkdfU0laRSAtIDEpLAorCQkJUlhf RURQS1RfRE1BX1ZBTElEKTsKKworCXJlZyA9M0QgVU1BQzJGQl9DRkdfREVGQVVMVF9FTiB8CisJ ICAgICAgKChpbnRmLT5jaGFubmVsICsgMTEpIDw8IFVNQUMyRkJfQ0ZHX0NISURfU0hJRlQpOwor CXJlZyB8PTNEICgweGQgPDwgVU1BQzJGQl9DRkdfT0tfU0VORF9TSElGVCk7CisJdW1hYzJmYl93 bChpbnRmLCByZWcsIFVNQUMyRkJfQ0ZHKTsKKworCXJldHVybiAwOworCitmcmVlX3J4X3Jpbmc6 CisJZG1hX3VubWFwX3BhZ2Uoa2RldiwgaW50Zi0+cnhfcmluZ19kbWEsIFJJTkdfQlVGRkVSX1NJ WkUsCisJCSAgICAgICBETUFfRlJPTV9ERVZJQ0UpOworCV9fZnJlZV9wYWdlcyh2aXJ0X3RvX3Bh Z2UoaW50Zi0+cnhfcmluZ19jcHUpLCBpbnRmLT5yeF9idWZfb3JkZXIpOworCisJcmV0dXJuIHJl dDsKK30KKworc3RhdGljIHZvaWQgYmNtYXNwX3JlY2xhaW1fZnJlZV9hbGxfcngoc3RydWN0IGJj bWFzcF9pbnRmICppbnRmKQoreworCXN0cnVjdCBkZXZpY2UgKmtkZXYgPTNEICZpbnRmLT5wYXJl bnQtPnBkZXYtPmRldjsKKworCWRtYV9mcmVlX2NvaGVyZW50KGtkZXYsIERFU0NfUklOR19TSVpF LCBpbnRmLT5yeF9lZHBrdF9jcHUsCisJCQkgIGludGYtPnJ4X2VkcGt0X2RtYV9hZGRyKTsKKwlk bWFfdW5tYXBfcGFnZShrZGV2LCBpbnRmLT5yeF9yaW5nX2RtYSwgUklOR19CVUZGRVJfU0laRSwK KwkJICAgICAgIERNQV9GUk9NX0RFVklDRSk7CisJX19mcmVlX3BhZ2VzKHZpcnRfdG9fcGFnZShp bnRmLT5yeF9yaW5nX2NwdSksIGludGYtPnJ4X2J1Zl9vcmRlcik7Cit9CisKK3N0YXRpYyBpbnQg YmNtYXNwX2luaXRfdHgoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmKQoreworCXN0cnVjdCBkZXZp Y2UgKmtkZXYgPTNEICZpbnRmLT5wYXJlbnQtPnBkZXYtPmRldjsKKwl2b2lkICpwOworCWludCBy ZXQ7CisKKwlwID0zRCBkbWFfYWxsb2NfY29oZXJlbnQoa2RldiwgREVTQ19SSU5HX1NJWkUsICZp bnRmLT50eF9zcGJfZG1hX2FkZHIsCisJCQkgICAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFwKQor CQlyZXR1cm4gLUVOT01FTTsKKworCWludGYtPnR4X3NwYl9jcHUgPTNEIHA7CisJaW50Zi0+dHhf c3BiX2RtYV92YWxpZCA9M0QgaW50Zi0+dHhfc3BiX2RtYV9hZGRyICsgREVTQ19SSU5HX1NJWkUg LSAxOworCWludGYtPnR4X3NwYl9kbWFfcmVhZCA9M0QgaW50Zi0+dHhfc3BiX2RtYV9hZGRyOwor CisJaW50Zi0+dHhfY2JzID0zRCBrY2FsbG9jKERFU0NfUklOR19DT1VOVCwgc2l6ZW9mKHN0cnVj dCBiY21hc3BfdHhfY2IpLAorCQkJICAgICAgIEdGUF9LRVJORUwpOworCWlmICghaW50Zi0+dHhf Y2JzKSB7CisJCXJldCA9M0QgLUVOT01FTTsKKwkJZ290byBmcmVlX3R4X3NwYjsKKwl9CisKKwlp bnRmLT50eF9zcGJfaW5kZXggPTNEIDA7CisJaW50Zi0+dHhfc3BiX2NsZWFuX2luZGV4ID0zRCAw OworCisJbmV0aWZfbmFwaV9hZGRfdHgoaW50Zi0+bmRldiwgJmludGYtPnR4X25hcGksIGJjbWFz cF90eF9wb2xsKTsKKworCS8qIE1ha2Ugc3VyZSBjaGFubmVscyBhcmUgZGlzYWJsZWQgKi8KKwl0 eF9zcGJfY3RybF93bChpbnRmLCAweDAsIFRYX1NQQl9DVFJMX0VOQUJMRSk7CisJdHhfZXBrdF9j b3JlX3dsKGludGYsIDB4MCwgVFhfRVBLVF9DX0NGR19NSVNDKTsKKworCS8qIFR4IFNQQiAqLwor CXR4X3NwYl9jdHJsX3dsKGludGYsICgoaW50Zi0+Y2hhbm5lbCArIDgpIDw8IFRYX1NQQl9DVFJM X1hGX0JJRF9TSElGVCksCisJCSAgICAgICBUWF9TUEJfQ1RSTF9YRl9DVFJMMik7CisJdHhfcGF1 c2VfY3RybF93bChpbnRmLCAoMSA8PCAoaW50Zi0+Y2hhbm5lbCArIDgpKSwgVFhfUEFVU0VfTUFQ X1ZFQ1RPUik7CisJdHhfc3BiX3RvcF93bChpbnRmLCAweDFlLCBUWF9TUEJfVE9QX0JMS09VVCk7 CisJdHhfc3BiX3RvcF93bChpbnRmLCAweDAsIFRYX1NQQl9UT1BfU1BSRV9CV19DVFJMKTsKKwor CXR4X3NwYl9kbWFfd3EoaW50ZiwgaW50Zi0+dHhfc3BiX2RtYV9hZGRyLCBUWF9TUEJfRE1BX1JF QUQpOworCXR4X3NwYl9kbWFfd3EoaW50ZiwgaW50Zi0+dHhfc3BiX2RtYV9hZGRyLCBUWF9TUEJf RE1BX0JBU0UpOworCXR4X3NwYl9kbWFfd3EoaW50ZiwgaW50Zi0+dHhfc3BiX2RtYV92YWxpZCwg VFhfU1BCX0RNQV9FTkQpOworCXR4X3NwYl9kbWFfd3EoaW50ZiwgaW50Zi0+dHhfc3BiX2RtYV92 YWxpZCwgVFhfU1BCX0RNQV9WQUxJRCk7CisKKwlyZXR1cm4gMDsKKworZnJlZV90eF9zcGI6CisJ ZG1hX2ZyZWVfY29oZXJlbnQoa2RldiwgREVTQ19SSU5HX1NJWkUsIGludGYtPnR4X3NwYl9jcHUs CisJCQkgIGludGYtPnR4X3NwYl9kbWFfYWRkcik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0 aWMgdm9pZCBiY21hc3BfcmVjbGFpbV9mcmVlX2FsbF90eChzdHJ1Y3QgYmNtYXNwX2ludGYgKmlu dGYpCit7CisJc3RydWN0IGRldmljZSAqa2RldiA9M0QgJmludGYtPnBhcmVudC0+cGRldi0+ZGV2 OworCisJLyogRnJlZSBkZXNjcmlwdG9ycyAqLworCWRtYV9mcmVlX2NvaGVyZW50KGtkZXYsIERF U0NfUklOR19TSVpFLCBpbnRmLT50eF9zcGJfY3B1LAorCQkJICBpbnRmLT50eF9zcGJfZG1hX2Fk ZHIpOworCisJLyogRnJlZSBjYnMgKi8KKwlrZnJlZShpbnRmLT50eF9jYnMpOworfQorCitzdGF0 aWMgdm9pZCBiY21hc3BfZXBoeV9lbmFibGVfc2V0KHN0cnVjdCBiY21hc3BfaW50ZiAqaW50Ziwg Ym9vbCBlbmFibGUpCit7CisJdTMyIG1hc2sgPTNEIFJHTUlJX0VQSFlfQ0ZHX0lERFFfQklBUyB8 IFJHTUlJX0VQSFlfQ0ZHX0VYVF9QV1JET1dOIHwKKwkJICAgUkdNSUlfRVBIWV9DRkdfSUREUV9H TE9CQUw7CisJdTMyIHJlZzsKKworCXJlZyA9M0QgcmdtaWlfcmwoaW50ZiwgUkdNSUlfRVBIWV9D TlRSTCk7CisJaWYgKGVuYWJsZSkgeworCQlyZWcgJj0zRCB+UkdNSUlfRVBIWV9DSzI1X0RJUzsK KwkJcmdtaWlfd2woaW50ZiwgcmVnLCBSR01JSV9FUEhZX0NOVFJMKTsKKwkJbWRlbGF5KDEpOwor CisJCXJlZyAmPTNEIH5tYXNrOworCQlyZWcgfD0zRCBSR01JSV9FUEhZX1JFU0VUOworCQlyZ21p aV93bChpbnRmLCByZWcsIFJHTUlJX0VQSFlfQ05UUkwpOworCQltZGVsYXkoMSk7CisKKwkJcmVn ICY9M0QgflJHTUlJX0VQSFlfUkVTRVQ7CisJfSBlbHNlIHsKKwkJcmVnIHw9M0QgbWFzayB8IFJH TUlJX0VQSFlfUkVTRVQ7CisJCXJnbWlpX3dsKGludGYsIHJlZywgUkdNSUlfRVBIWV9DTlRSTCk7 CisJCW1kZWxheSgxKTsKKwkJcmVnIHw9M0QgUkdNSUlfRVBIWV9DSzI1X0RJUzsKKwl9CisJcmdt aWlfd2woaW50ZiwgcmVnLCBSR01JSV9FUEhZX0NOVFJMKTsKKwltZGVsYXkoMSk7CisKKwkvKiBT ZXQgb3IgY2xlYXIgdGhlIExFRCBjb250cm9sIG92ZXJyaWRlIHRvIGF2b2lkIGxpZ2h0aW5nIHVw IExFRHMKKwkgKiB3aGlsZSB0aGUgRVBIWSBpcyBwb3dlcmVkIG9mZiBhbmQgZHJhd2luZyB1bm5l Y2Vzc2FyeSBjdXJyZW50LgorCSAqLworCXJlZyA9M0QgcmdtaWlfcmwoaW50ZiwgUkdNSUlfU1lT X0xFRF9DTlRSTCk7CisJaWYgKGVuYWJsZSkKKwkJcmVnICY9M0QgflJHTUlJX1NZU19MRURfQ05U UkxfTElOS19PVlJEOworCWVsc2UKKwkJcmVnIHw9M0QgUkdNSUlfU1lTX0xFRF9DTlRSTF9MSU5L X09WUkQ7CisJcmdtaWlfd2woaW50ZiwgcmVnLCBSR01JSV9TWVNfTEVEX0NOVFJMKTsKK30KKwor c3RhdGljIHZvaWQgYmNtYXNwX3JnbWlpX21vZGVfZW5fc2V0KHN0cnVjdCBiY21hc3BfaW50ZiAq aW50ZiwgYm9vbCBlbmFibGUpCit7CisJdTMyIHJlZzsKKworCXJlZyA9M0QgcmdtaWlfcmwoaW50 ZiwgUkdNSUlfT09CX0NOVFJMKTsKKwlyZWcgJj0zRCB+UkdNSUlfT09CX0RJUzsKKwlpZiAoZW5h YmxlKQorCQlyZWcgfD0zRCBSR01JSV9NT0RFX0VOOworCWVsc2UKKwkJcmVnICY9M0QgflJHTUlJ X01PREVfRU47CisJcmdtaWlfd2woaW50ZiwgcmVnLCBSR01JSV9PT0JfQ05UUkwpOworfQorCitz dGF0aWMgdm9pZCBiY21hc3BfbmV0aWZfZGVpbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7 CisJc3RydWN0IGJjbWFzcF9pbnRmICppbnRmID0zRCBuZXRkZXZfcHJpdihkZXYpOworCXUzMiBy ZWcsIHRpbWVvdXQgPTNEIDEwMDA7CisKKwluYXBpX2Rpc2FibGUoJmludGYtPnR4X25hcGkpOwor CisJYmNtYXNwX2VuYWJsZV90eChpbnRmLCAwKTsKKworCS8qIEZsdXNoIGFueSBUWCBwYWNrZXRz IGluIHRoZSBwaXBlICovCisJdHhfc3BiX2RtYV93bChpbnRmLCBUWF9TUEJfRE1BX0ZJRk9fRkxV U0gsIFRYX1NQQl9ETUFfRklGT19DVFJMKTsKKwlkbyB7CisJCXJlZyA9M0QgdHhfc3BiX2RtYV9y bChpbnRmLCBUWF9TUEJfRE1BX0ZJRk9fU1RBVFVTKTsKKwkJaWYgKCEocmVnICYgVFhfU1BCX0RN QV9GSUZPX0ZMVVNIKSkKKwkJCWJyZWFrOworCQl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7CisJ fSB3aGlsZSAodGltZW91dC0tID4gMCk7CisJdHhfc3BiX2RtYV93bChpbnRmLCAweDAsIFRYX1NQ Ql9ETUFfRklGT19DVFJMKTsKKworCXVtYWNfZW5hYmxlX3NldChpbnRmLCBVTUNfQ01EX1RYX0VO LCAwKTsKKworCXBoeV9zdG9wKGRldi0+cGh5ZGV2KTsKKworCXVtYWNfZW5hYmxlX3NldChpbnRm LCBVTUNfQ01EX1JYX0VOLCAwKTsKKworCWJjbWFzcF9mbHVzaF9yeF9wb3J0KGludGYpOworCXVz bGVlcF9yYW5nZSgxMDAwLCAyMDAwKTsKKwliY21hc3BfZW5hYmxlX3J4KGludGYsIDApOworCisJ bmFwaV9kaXNhYmxlKCZpbnRmLT5yeF9uYXBpKTsKKworCS8qIERpc2FibGUgaW50ZXJydXB0cyAq LworCWJjbWFzcF9lbmFibGVfdHhfaXJxKGludGYsIDApOworCWJjbWFzcF9lbmFibGVfcnhfaXJx KGludGYsIDApOworCisJbmV0aWZfbmFwaV9kZWwoJmludGYtPnR4X25hcGkpOworCWJjbWFzcF9y ZWNsYWltX2ZyZWVfYWxsX3R4KGludGYpOworCisJbmV0aWZfbmFwaV9kZWwoJmludGYtPnJ4X25h cGkpOworCWJjbWFzcF9yZWNsYWltX2ZyZWVfYWxsX3J4KGludGYpOworfQorCitzdGF0aWMgaW50 IGJjbWFzcF9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGJjbWFzcF9p bnRmICppbnRmID0zRCBuZXRkZXZfcHJpdihkZXYpOworCisJbmV0aWZfZGJnKGludGYsIGlmZG93 biwgZGV2LCAiYmNtYXNwIHN0b3BcbiIpOworCisJLyogU3RvcCB0eCBmcm9tIHVwZGF0aW5nIEhX ICovCisJbmV0aWZfdHhfZGlzYWJsZShkZXYpOworCisJYmNtYXNwX25ldGlmX2RlaW5pdChkZXYp OworCisJcGh5X2Rpc2Nvbm5lY3QoZGV2LT5waHlkZXYpOworCisJLyogRGlzYWJsZSBpbnRlcm5h bCBFUEhZIG9yIGV4dGVybmFsIFBIWSAqLworCWlmIChpbnRmLT5pbnRlcm5hbF9waHkpCisJCWJj bWFzcF9lcGh5X2VuYWJsZV9zZXQoaW50ZiwgZmFsc2UpOworCWVsc2UKKwkJYmNtYXNwX3JnbWlp X21vZGVfZW5fc2V0KGludGYsIGZhbHNlKTsKKworCS8qIERpc2FibGUgdGhlIGludGVyZmFjZSBj bG9ja3MgKi8KKwliY21hc3BfY29yZV9jbG9ja19zZXRfaW50ZihpbnRmLCBmYWxzZSk7CisKKwlj bGtfZGlzYWJsZV91bnByZXBhcmUoaW50Zi0+cGFyZW50LT5jbGspOworCisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyB2b2lkIGJjbWFzcF9jb25maWd1cmVfcG9ydChzdHJ1Y3QgYmNtYXNwX2ludGYg KmludGYpCit7CisJdTMyIHJlZywgaWRfbW9kZV9kaXMgPTNEIDA7CisKKwlyZWcgPTNEIHJnbWlp X3JsKGludGYsIFJHTUlJX1BPUlRfQ05UUkwpOworCXJlZyAmPTNEIH5SR01JSV9QT1JUX01PREVf TUFTSzsKKworCXN3aXRjaCAoaW50Zi0+cGh5X2ludGVyZmFjZSkgeworCWNhc2UgUEhZX0lOVEVS RkFDRV9NT0RFX1JHTUlJOgorCQkvKiBSR01JSV9OT19JRDogVFhDIHRyYW5zaXRpb25zIGF0IHRo ZSBzYW1lIHRpbWUgYXMgVFhECisJCSAqCQkocmVxdWlyZXMgUENCIG9yIHJlY2VpdmVyLXNpZGUg ZGVsYXkpCisJCSAqIFJHTUlJOglBZGQgMm5zIGRlbGF5IG9uIFRYQyAoOTAgZGVncmVlIHNoaWZ0 KQorCQkgKgorCQkgKiBJRCBpcyBpbXBsaWNpdGx5IGRpc2FibGVkIGZvciAxMDBNYnBzIChSRylN SUkgb3BlcmF0aW9uLgorCQkgKi8KKwkJaWRfbW9kZV9kaXMgPTNEIFJHTUlJX0lEX01PREVfRElT OworCQlmYWxsdGhyb3VnaDsKKwljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSV9UWElEOgor CQlyZWcgfD0zRCBSR01JSV9QT1JUX01PREVfRVhUX0dQSFk7CisJCWJyZWFrOworCWNhc2UgUEhZ X0lOVEVSRkFDRV9NT0RFX01JSToKKwkJcmVnIHw9M0QgUkdNSUlfUE9SVF9NT0RFX0VYVF9FUEhZ OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlpZiAoaW50Zi0+aW50ZXJu YWxfcGh5KQorCQlyZWcgfD0zRCBSR01JSV9QT1JUX01PREVfRVBIWTsKKworCXJnbWlpX3dsKGlu dGYsIHJlZywgUkdNSUlfUE9SVF9DTlRSTCk7CisKKwlyZWcgPTNEIHJnbWlpX3JsKGludGYsIFJH TUlJX09PQl9DTlRSTCk7CisJcmVnICY9M0QgflJHTUlJX0lEX01PREVfRElTOworCXJlZyB8PTNE IGlkX21vZGVfZGlzOworCXJnbWlpX3dsKGludGYsIHJlZywgUkdNSUlfT09CX0NOVFJMKTsKK30K Kworc3RhdGljIGludCBiY21hc3BfbmV0aWZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBi b29sIHBoeV9jb25uZWN0KQoreworCXN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZiA9M0QgbmV0ZGV2 X3ByaXYoZGV2KTsKKwlwaHlfaW50ZXJmYWNlX3QgcGh5X2lmYWNlID0zRCBpbnRmLT5waHlfaW50 ZXJmYWNlOworCXUzMiBwaHlfZmxhZ3MgPTNEIFBIWV9CUkNNX0FVVE9fUFdSRFdOX0VOQUJMRSB8 CisJCQlQSFlfQlJDTV9ESVNfVFhDUlhDX05PRU5SR1kgfAorCQkJUEhZX0JSQ01fSUREUV9TVVNQ RU5EOworCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPTNEIE5VTEw7CisJaW50IHJldDsKKwor CS8qIEFsd2F5cyBlbmFibGUgaW50ZXJmYWNlIGNsb2NrcyAqLworCWJjbWFzcF9jb3JlX2Nsb2Nr X3NldF9pbnRmKGludGYsIHRydWUpOworCisJLyogRW5hYmxlIGludGVybmFsIFBIWSBvciBleHRl cm5hbCBQSFkgYmVmb3JlIGFueSBNQUMgYWN0aXZpdHkgKi8KKwlpZiAoaW50Zi0+aW50ZXJuYWxf cGh5KQorCQliY21hc3BfZXBoeV9lbmFibGVfc2V0KGludGYsIHRydWUpOworCWVsc2UKKwkJYmNt YXNwX3JnbWlpX21vZGVfZW5fc2V0KGludGYsIHRydWUpOworCWJjbWFzcF9jb25maWd1cmVfcG9y dChpbnRmKTsKKworCS8qIFRoaXMgaXMgYW4gdWdseSBxdWlyayBidXQgd2UgaGF2ZSBub3QgYmVl biBjb3JyZWN0bHkKKwkgKiBpbnRlcnByZXRpbmcgdGhlIHBoeV9pbnRlcmZhY2UgdmFsdWVzIGFu ZCB3ZSBoYXZlIGRvbmUgdGhhdAorCSAqIGFjcm9zcyBkaWZmZXJlbnQgZHJpdmVycywgc28gYXQg bGVhc3Qgd2UgYXJlIGNvbnNpc3RlbnQgaW4KKwkgKiBvdXIgbWlzdGFrZXMuCisJICoKKwkgKiBX aGVuIHRoZSBHZW5lcmljIFBIWSBkcml2ZXIgaXMgaW4gdXNlIGVpdGhlciB0aGUgUEhZIGhhcwor CSAqIGJlZW4gc3RyYXBwZWQgb3IgcHJvZ3JhbW1lZCBjb3JyZWN0bHkgYnkgdGhlIGJvb3QgbG9h ZGVyIHNvCisJICogd2Ugc2hvdWxkIHN0aWNrIHRvIG91ciBpbmNvcnJlY3QgaW50ZXJwcmV0YXRp b24gc2luY2Ugd2UKKwkgKiBoYXZlIHZhbGlkYXRlZCBpdC4KKwkgKgorCSAqIE5vdyB3aGVuIGEg ZGVkaWNhdGVkIFBIWSBkcml2ZXIgaXMgaW4gdXNlLCB3ZSBuZWVkIHRvCisJICogcmV2ZXJzZSB0 aGUgbWVhbmluZyBvZiB0aGUgcGh5X2ludGVyZmFjZV9tb2RlIHZhbHVlcyB0bworCSAqIHNvbWV0 aGluZyB0aGF0IHRoZSBQSFkgZHJpdmVyIHdpbGwgaW50ZXJwcmV0IGFuZCBhY3Qgb24gc3VjaAor CSAqIHRoYXQgd2UgaGF2ZSB0d28gbWlzdGFrZXMgY2FuY2VsaW5nIHRoZW1zZWx2ZXMgc28gdG8g c3BlYWsuCisJICogV2Ugb25seSBkbyB0aGlzIGZvciB0aGUgdHdvIG1vZGVzIHRoYXQgR0VORVQg ZHJpdmVyCisJICogb2ZmaWNpYWxseSBzdXBwb3J0cyBvbiBCcm9hZGNvbSBTVEIgY2hpcHM6CisJ ICogUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJIGFuZCBQSFlfSU5URVJGQUNFX01PREVfUkdNSUlf VFhJRC4KKwkgKiBPdGhlciBtb2RlcyBhcmUgbm90ICpvZmZpY2lhbGx5KiBzdXBwb3J0ZWQgd2l0 aCB0aGUgYm9vdAorCSAqIGxvYWRlciBhbmQgdGhlIHNjcmlwdGVkIGVudmlyb25tZW50IGdlbmVy YXRpbmcgRGV2aWNlIFRyZWUKKwkgKiBibG9icyBmb3IgdGhvc2UgcGxhdGZvcm1zLgorCSAqCisJ ICogTm90ZSB0aGF0IGludGVybmFsIFBIWSBhbmQgZml4ZWQtbGluayBjb25maWd1cmF0aW9ucyBh cmUgbm90CisJICogYWZmZWN0ZWQgYmVjYXVzZSB0aGV5IHVzZSBkaWZmZXJlbnQgcGh5X2ludGVy ZmFjZV90IHZhbHVlcworCSAqIG9yIHRoZSBHZW5lcmljIFBIWSBkcml2ZXIuCisJICovCisJc3dp dGNoIChwaHlfaWZhY2UpIHsKKwljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSToKKwkJcGh5 X2lmYWNlID0zRCBQSFlfSU5URVJGQUNFX01PREVfUkdNSUlfSUQ7CisJCWJyZWFrOworCWNhc2Ug UEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX1RYSUQ6CisJCXBoeV9pZmFjZSA9M0QgUEhZX0lOVEVS RkFDRV9NT0RFX1JHTUlJX1JYSUQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0K KworCWlmIChwaHlfY29ubmVjdCkgeworCQlwaHlkZXYgPTNEIG9mX3BoeV9jb25uZWN0KGRldiwg aW50Zi0+cGh5X2RuLAorCQkJCQliY21hc3BfYWRqX2xpbmssIHBoeV9mbGFncywKKwkJCQkJcGh5 X2lmYWNlKTsKKwkJaWYgKCFwaHlkZXYpIHsKKwkJCXJldCA9M0QgLUVOT0RFVjsKKwkJCW5ldGRl dl9lcnIoZGV2LCAiY291bGQgbm90IGF0dGFjaCB0byBQSFlcbiIpOworCQkJZ290byBlcnJfcGh5 X2Rpc2FibGU7CisJCX0KKwl9IGVsc2UgeworCQlyZXQgPTNEIHBoeV9yZXN1bWUoZGV2LT5waHlk ZXYpOworCQlpZiAocmV0KQorCQkJZ290byBlcnJfcGh5X2Rpc2FibGU7CisJfQorCisJdW1hY19y ZXNldChpbnRmKTsKKworCXVtYWNfaW5pdChpbnRmKTsKKworCS8qIERpc2FibGUgdGhlIFVuaU1B QyBSWC9UWCAqLworCXVtYWNfZW5hYmxlX3NldChpbnRmLCAoVU1DX0NNRF9SWF9FTiB8IFVNQ19D TURfVFhfRU4pLCAwKTsKKworCXVtYWNfc2V0X2h3X2FkZHIoaW50ZiwgZGV2LT5kZXZfYWRkcik7 CisKKwlpbnRmLT5vbGRfZHVwbGV4ID0zRCAtMTsKKwlpbnRmLT5vbGRfbGluayA9M0QgLTE7CisJ aW50Zi0+b2xkX3BhdXNlID0zRCAtMTsKKworCXJldCA9M0QgYmNtYXNwX2luaXRfdHgoaW50Zik7 CisJaWYgKHJldCkKKwkJZ290byBlcnJfcGh5X2Rpc2Nvbm5lY3Q7CisKKwkvKiBUdXJuIG9uIGFz cCAqLworCWJjbWFzcF9lbmFibGVfdHgoaW50ZiwgMSk7CisKKwlyZXQgPTNEIGJjbWFzcF9pbml0 X3J4KGludGYpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX3JlY2xhaW1fdHg7CisKKwliY21hc3Bf ZW5hYmxlX3J4KGludGYsIDEpOworCisJLyogVHVybiBvbiBVbmlNQUMgVFgvUlggKi8KKwl1bWFj X2VuYWJsZV9zZXQoaW50ZiwgKFVNQ19DTURfUlhfRU4gfCBVTUNfQ01EX1RYX0VOKSwgMSk7CisK KwlpbnRmLT5jcmNfZndkID0zRCAhISh1bWFjX3JsKGludGYsIFVNQ19DTUQpICYgVU1DX0NNRF9D UkNfRldEKTsKKworCWJjbWFzcF9uZXRpZl9zdGFydChkZXYpOworCisJbmV0aWZfc3RhcnRfcXVl dWUoZGV2KTsKKworCXJldHVybiAwOworCitlcnJfcmVjbGFpbV90eDoKKwliY21hc3BfcmVjbGFp bV9mcmVlX2FsbF90eChpbnRmKTsKK2Vycl9waHlfZGlzY29ubmVjdDoKKwlpZiAocGh5ZGV2KQor CQlwaHlfZGlzY29ubmVjdChwaHlkZXYpOworZXJyX3BoeV9kaXNhYmxlOgorCWlmIChpbnRmLT5p bnRlcm5hbF9waHkpCisJCWJjbWFzcF9lcGh5X2VuYWJsZV9zZXQoaW50ZiwgZmFsc2UpOworCWVs c2UKKwkJYmNtYXNwX3JnbWlpX21vZGVfZW5fc2V0KGludGYsIGZhbHNlKTsKKwlyZXR1cm4gcmV0 OworfQorCitzdGF0aWMgaW50IGJjbWFzcF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7 CisJc3RydWN0IGJjbWFzcF9pbnRmICppbnRmID0zRCBuZXRkZXZfcHJpdihkZXYpOworCWludCBy ZXQ7CisKKwluZXRpZl9kYmcoaW50ZiwgaWZ1cCwgZGV2LCAiYmNtYXNwIG9wZW5cbiIpOworCisJ cmV0ID0zRCBjbGtfcHJlcGFyZV9lbmFibGUoaW50Zi0+cGFyZW50LT5jbGspOworCWlmIChyZXQp CisJCXJldHVybiByZXQ7CisKKwlyZXQgPTNEIGJjbWFzcF9uZXRpZl9pbml0KGRldiwgdHJ1ZSk7 CisJaWYgKHJldCkKKwkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGludGYtPnBhcmVudC0+Y2xrKTsK KworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGJjbWFzcF90eF90aW1lb3V0KHN0cnVj dCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCB0eHF1ZXVlKQoreworCXN0cnVjdCBiY21h c3BfaW50ZiAqaW50ZiA9M0QgbmV0ZGV2X3ByaXYoZGV2KTsKKworCW5ldGlmX2RiZyhpbnRmLCB0 eF9lcnIsIGRldiwgInRyYW5zbWl0IHRpbWVvdXQhXG4iKTsKK30KKworc3RhdGljIGludCBiY21h c3BfZ2V0X3BoeXNfcG9ydF9uYW1lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgICBj aGFyICpuYW1lLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZiA9M0Qg bmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmIChzbnByaW50ZihuYW1lLCBsZW4sICJwJWQiLCBpbnRm LT5wb3J0KSA+PTNEIGxlbikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIHZvaWQgYmNtYXNwX2dldF9zdGF0czY0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJ CQkgICAgICAgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdGF0cykKK3sKKwlzdHJ1Y3QgYmNt YXNwX2ludGYgKmludGYgPTNEIG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGJjbWFzcF9pbnRm X3N0YXRzNjQgKmxzdGF0czsKKwl1bnNpZ25lZCBpbnQgc3RhcnQ7CisKKwlsc3RhdHMgPTNEICZp bnRmLT5zdGF0czY0OworCisJZG8geworCQlzdGFydCA9M0QgdTY0X3N0YXRzX2ZldGNoX2JlZ2lu KCZsc3RhdHMtPnN5bmNwKTsKKwkJc3RhdHMtPnJ4X3BhY2tldHMgPTNEIHU2NF9zdGF0c19yZWFk KCZsc3RhdHMtPnJ4X3BhY2tldHMpOworCQlzdGF0cy0+cnhfYnl0ZXMgPTNEIHU2NF9zdGF0c19y ZWFkKCZsc3RhdHMtPnJ4X2J5dGVzKTsKKwkJc3RhdHMtPnJ4X2Ryb3BwZWQgPTNEIHU2NF9zdGF0 c19yZWFkKCZsc3RhdHMtPnJ4X2Ryb3BwZWQpOworCQlzdGF0cy0+cnhfY3JjX2Vycm9ycyA9M0Qg dTY0X3N0YXRzX3JlYWQoJmxzdGF0cy0+cnhfY3JjX2VycnMpOworCQlzdGF0cy0+cnhfZnJhbWVf ZXJyb3JzID0zRCB1NjRfc3RhdHNfcmVhZCgmbHN0YXRzLT5yeF9zeW1fZXJycyk7CisJCXN0YXRz LT5yeF9lcnJvcnMgPTNEIHN0YXRzLT5yeF9jcmNfZXJyb3JzICsgc3RhdHMtPnJ4X2ZyYW1lX2Vy cm9yczsKKworCQlzdGF0cy0+dHhfcGFja2V0cyA9M0QgdTY0X3N0YXRzX3JlYWQoJmxzdGF0cy0+ dHhfcGFja2V0cyk7CisJCXN0YXRzLT50eF9ieXRlcyA9M0QgdTY0X3N0YXRzX3JlYWQoJmxzdGF0 cy0+dHhfYnl0ZXMpOworCX0gd2hpbGUgKHU2NF9zdGF0c19mZXRjaF9yZXRyeSgmbHN0YXRzLT5z eW5jcCwgc3RhcnQpKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBi Y21hc3BfbmV0ZGV2X29wcyA9M0QgeworCS5uZG9fb3BlbgkJPTNEIGJjbWFzcF9vcGVuLAorCS5u ZG9fc3RvcAkJPTNEIGJjbWFzcF9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdAkJPTNEIGJjbWFzcF94 bWl0LAorCS5uZG9fdHhfdGltZW91dAkJPTNEIGJjbWFzcF90eF90aW1lb3V0LAorCS5uZG9fc2V0 X3J4X21vZGUJPTNEIGJjbWFzcF9zZXRfcnhfbW9kZSwKKwkubmRvX2dldF9waHlzX3BvcnRfbmFt ZQk9M0QgYmNtYXNwX2dldF9waHlzX3BvcnRfbmFtZSwKKwkubmRvX2V0aF9pb2N0bAkJPTNEIHBo eV9kb19pb2N0bF9ydW5uaW5nLAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0zRCBldGhfbWFjX2Fk ZHIsCisJLm5kb19nZXRfc3RhdHM2NAk9M0QgYmNtYXNwX2dldF9zdGF0czY0LAorfTsKKworc3Rh dGljIHZvaWQgYmNtYXNwX21hcF9yZXMoc3RydWN0IGJjbWFzcF9wcml2ICpwcml2LCBzdHJ1Y3Qg YmNtYXNwX2ludGYgKmk9Cm50ZikKK3sKKwkvKiBQZXIgcG9ydCAqLworCWludGYtPnJlcy51bWFj ID0zRCBwcml2LT5iYXNlICsgVU1DX09GRlNFVChpbnRmKTsKKwlpbnRmLT5yZXMudW1hYzJmYiA9 M0QgcHJpdi0+YmFzZSArIChwcml2LT5od19pbmZvLT51bWFjMmZiICsKKwkJCQkJICAoaW50Zi0+ cG9ydCAqIDB4NCkpOworCWludGYtPnJlcy5yZ21paSA9M0QgcHJpdi0+YmFzZSArIFJHTUlJX09G RlNFVChpbnRmKTsKKworCS8qIFBlciBjaCAqLworCWludGYtPnR4X3NwYl9kbWEgPTNEIHByaXYt PmJhc2UgKyBUWF9TUEJfRE1BX09GRlNFVChpbnRmKTsKKwlpbnRmLT5yZXMudHhfc3BiX2N0cmwg PTNEIHByaXYtPmJhc2UgKyBUWF9TUEJfQ1RSTF9PRkZTRVQoaW50Zik7CisJaW50Zi0+cmVzLnR4 X3NwYl90b3AgPTNEIHByaXYtPmJhc2UgKyBUWF9TUEJfVE9QX09GRlNFVChpbnRmKTsKKwlpbnRm LT5yZXMudHhfZXBrdF9jb3JlID0zRCBwcml2LT5iYXNlICsgVFhfRVBLVF9DX09GRlNFVChpbnRm KTsKKwlpbnRmLT5yZXMudHhfcGF1c2VfY3RybCA9M0QgcHJpdi0+YmFzZSArIFRYX1BBVVNFX0NU UkxfT0ZGU0VUKGludGYpOworCisJaW50Zi0+cnhfZWRwa3RfZG1hID0zRCBwcml2LT5iYXNlICsg UlhfRURQS1RfRE1BX09GRlNFVChpbnRmKTsKKwlpbnRmLT5yeF9lZHBrdF9jZmcgPTNEIHByaXYt PmJhc2UgKyBSWF9FRFBLVF9DRkdfT0ZGU0VUKGludGYpOworfQorCisjZGVmaW5lIE1BWF9JUlFf U1RSX0xFTgkJNjQKK3N0cnVjdCBiY21hc3BfaW50ZiAqYmNtYXNwX2ludGVyZmFjZV9jcmVhdGUo c3RydWN0IGJjbWFzcF9wcml2ICpwcml2LAorCQkJCQkgICAgc3RydWN0IGRldmljZV9ub2RlICpu ZGV2X2RuLCBpbnQgaSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPTNEICZwcml2LT5wZGV2LT5k ZXY7CisJc3RydWN0IGJjbWFzcF9pbnRmICppbnRmOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2 OworCWludCBjaCwgcG9ydCwgcmV0OworCisJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5kZXZf ZG4sICJyZWciLCAmcG9ydCkpIHsKKwkJZGV2X3dhcm4oZGV2LCAiJXM6IGludmFsaWQgcG9ydCBu dW1iZXJcbiIsIG5kZXZfZG4tPm5hbWUpOworCQlnb3RvIGVycjsKKwl9CisKKwlpZiAob2ZfcHJv cGVydHlfcmVhZF91MzIobmRldl9kbiwgImJyY20sY2hhbm5lbCIsICZjaCkpIHsKKwkJZGV2X3dh cm4oZGV2LCAiJXM6IGludmFsaWQgY2ggbnVtYmVyXG4iLCBuZGV2X2RuLT5uYW1lKTsKKwkJZ290 byBlcnI7CisJfQorCisJbmRldiA9M0QgYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBiY21h c3BfaW50ZikpOworCWlmICghbmRldikgeworCQlkZXZfd2FybihkZXYsICIlczogdW5hYmxlIHRv IGFsbG9jIG5kZXZcbiIsIG5kZXZfZG4tPm5hbWUpOworCQlnb3RvIGVycjsKKwl9CisJaW50ZiA9 M0QgbmV0ZGV2X3ByaXYobmRldik7CisKKwlpbnRmLT5wYXJlbnQgPTNEIHByaXY7CisJaW50Zi0+ bmRldiA9M0QgbmRldjsKKwlpbnRmLT5jaGFubmVsID0zRCBjaDsKKwlpbnRmLT5wb3J0ID0zRCBw b3J0OworCWludGYtPm5kZXZfZG4gPTNEIG5kZXZfZG47CisJaW50Zi0+aW5kZXggPTNEIGk7CisK KwlyZXQgPTNEIG9mX2dldF9waHlfbW9kZShuZGV2X2RuLCAmaW50Zi0+cGh5X2ludGVyZmFjZSk7 CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJpbnZhbGlkIFBIWSBtb2RlIHByb3Bl cnR5XG4iKTsKKwkJZ290byBlcnJfZnJlZV9uZXRkZXY7CisJfQorCisJaWYgKGludGYtPnBoeV9p bnRlcmZhY2UgPTNEPTNEIFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkKKwkJaW50Zi0+aW50 ZXJuYWxfcGh5ID0zRCB0cnVlOworCisJaW50Zi0+cGh5X2RuID0zRCBvZl9wYXJzZV9waGFuZGxl KG5kZXZfZG4sICJwaHktaGFuZGxlIiwgMCk7CisJaWYgKCFpbnRmLT5waHlfZG4gJiYgb2ZfcGh5 X2lzX2ZpeGVkX2xpbmsobmRldl9kbikpIHsKKwkJcmV0ID0zRCBvZl9waHlfcmVnaXN0ZXJfZml4 ZWRfbGluayhuZGV2X2RuKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X3dhcm4oZGV2LCAiJXM6IGZh aWxlZCB0byByZWdpc3RlciBmaXhlZCBQSFlcbiIsCisJCQkJIG5kZXZfZG4tPm5hbWUpOworCQkJ Z290byBlcnJfZnJlZV9uZXRkZXY7CisJCX0KKwkJaW50Zi0+cGh5X2RuID0zRCBuZGV2X2RuOwor CX0KKworCS8qIE1hcCByZXNvdXJjZSAqLworCWJjbWFzcF9tYXBfcmVzKHByaXYsIGludGYpOwor CisJaWYgKCghcGh5X2ludGVyZmFjZV9tb2RlX2lzX3JnbWlpKGludGYtPnBoeV9pbnRlcmZhY2Up ICYmCisJICAgICBpbnRmLT5waHlfaW50ZXJmYWNlICE9M0QgUEhZX0lOVEVSRkFDRV9NT0RFX01J SSAmJgorCSAgICAgaW50Zi0+cGh5X2ludGVyZmFjZSAhPTNEIFBIWV9JTlRFUkZBQ0VfTU9ERV9J TlRFUk5BTCkgfHwKKwkgICAgKGludGYtPnBvcnQgIT0zRCAxICYmIGludGYtPmludGVybmFsX3Bo eSkpIHsKKwkJbmV0ZGV2X2VycihpbnRmLT5uZGV2LCAiaW52YWxpZCBQSFkgbW9kZTogJXMgZm9y IHBvcnQgJWRcbiIsCisJCQkgICBwaHlfbW9kZXMoaW50Zi0+cGh5X2ludGVyZmFjZSksIGludGYt PnBvcnQpOworCQlyZXQgPTNEIC1FSU5WQUw7CisJCWdvdG8gZXJyX2ZyZWVfbmV0ZGV2OworCX0K KworCXJldCA9M0Qgb2ZfZ2V0X2V0aGRldl9hZGRyZXNzKG5kZXZfZG4sIG5kZXYpOworCWlmIChy ZXQpIHsKKwkJbmV0ZGV2X3dhcm4obmRldiwgInVzaW5nIHJhbmRvbSBFdGhlcm5ldCBNQUNcbiIp OworCQlldGhfaHdfYWRkcl9yYW5kb20obmRldik7CisJfQorCisJU0VUX05FVERFVl9ERVYobmRl diwgZGV2KTsKKwlpbnRmLT5vcHMgPTNEICZiY21hc3BfaW50Zl9vcHM7CisJbmRldi0+bmV0ZGV2 X29wcyA9M0QgJmJjbWFzcF9uZXRkZXZfb3BzOworCW5kZXYtPmV0aHRvb2xfb3BzID0zRCAmYmNt YXNwX2V0aHRvb2xfb3BzOworCWludGYtPm1zZ19lbmFibGUgPTNEIG5ldGlmX21zZ19pbml0KC0x LCBORVRJRl9NU0dfRFJWIHwKKwkJCQkJICBORVRJRl9NU0dfUFJPQkUgfAorCQkJCQkgIE5FVElG X01TR19MSU5LKTsKKwluZGV2LT5mZWF0dXJlcyB8PTNEIE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElG X0ZfSVBWNl9DU1VNIHwgTkVUSUZfRl9TRyB8CisJCQkgIE5FVElGX0ZfUlhDU1VNOworCW5kZXYt Pmh3X2ZlYXR1cmVzIHw9M0QgbmRldi0+ZmVhdHVyZXM7CisJbmRldi0+bmVlZGVkX2hlYWRyb29t ICs9M0Qgc2l6ZW9mKHN0cnVjdCBiY21hc3BfcGt0X29mZmxvYWQpOworCisJcmV0dXJuIGludGY7 CisKK2Vycl9mcmVlX25ldGRldjoKKwlmcmVlX25ldGRldihuZGV2KTsKK2VycjoKKwlyZXR1cm4g TlVMTDsKK30KKwordm9pZCBiY21hc3BfaW50ZXJmYWNlX2Rlc3Ryb3koc3RydWN0IGJjbWFzcF9p bnRmICppbnRmKQoreworCWlmIChpbnRmLT5uZGV2LT5yZWdfc3RhdGUgPTNEPTNEIE5FVFJFR19S RUdJU1RFUkVEKQorCQl1bnJlZ2lzdGVyX25ldGRldihpbnRmLT5uZGV2KTsKKwlpZiAob2ZfcGh5 X2lzX2ZpeGVkX2xpbmsoaW50Zi0+bmRldl9kbikpCisJCW9mX3BoeV9kZXJlZ2lzdGVyX2ZpeGVk X2xpbmsoaW50Zi0+bmRldl9kbik7CisJZnJlZV9uZXRkZXYoaW50Zi0+bmRldik7Cit9CisKK2lu dCBiY21hc3BfaW50ZXJmYWNlX3N1c3BlbmQoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmKQorewor CXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPTNEIGludGYtPm5kZXY7CisJaW50IHJldCA9M0QgMDsK KworCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQorCQlyZXR1cm4gMDsKKworCW5ldGlmX2Rldmlj ZV9kZXRhY2goZGV2KTsKKworCWJjbWFzcF9uZXRpZl9kZWluaXQoZGV2KTsKKworCXJldCA9M0Qg cGh5X3N1c3BlbmQoZGV2LT5waHlkZXYpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJaWYg KGludGYtPmludGVybmFsX3BoeSkKKwkJYmNtYXNwX2VwaHlfZW5hYmxlX3NldChpbnRmLCBmYWxz ZSk7CisJZWxzZQorCQliY21hc3BfcmdtaWlfbW9kZV9lbl9zZXQoaW50ZiwgZmFsc2UpOworCisJ LyogSWYgV2FrZS1vbi1MQU4gaXMgZGlzYWJsZWQsIHdlIGNhbiBzYWZlbHkKKwkgKiBkaXNhYmxl IHRoZSBuZXR3b3JrIGludGVyZmFjZSBjbG9ja3MuCisJICovCisJYmNtYXNwX2NvcmVfY2xvY2tf c2V0X2ludGYoaW50ZiwgZmFsc2UpOworCisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGludGYtPnBh cmVudC0+Y2xrKTsKKworCXJldHVybiByZXQ7CisKK291dDoKKwliY21hc3BfbmV0aWZfaW5pdChk ZXYsIGZhbHNlKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgYmNtYXNwX2ludGVyZmFjZV9yZXN1 bWUoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYg PTNEIGludGYtPm5kZXY7CisJaW50IHJldDsKKworCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQor CQlyZXR1cm4gMDsKKworCXJldCA9M0QgY2xrX3ByZXBhcmVfZW5hYmxlKGludGYtPnBhcmVudC0+ Y2xrKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0zRCBiY21hc3BfbmV0aWZf aW5pdChkZXYsIGZhbHNlKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCW5ldGlmX2Rldmlj ZV9hdHRhY2goZGV2KTsKKworCXJldHVybiAwOworCitvdXQ6CisJY2xrX2Rpc2FibGVfdW5wcmVw YXJlKGludGYtPnBhcmVudC0+Y2xrKTsKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJp dmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9iY21hc3BfaW50Zl9kZWZzLmggYi9kcml2 ZXI9CnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwX2ludGZfZGVmcy5oCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYjI1OWE0NzUyMDdmCi0tLSAvZGV2 L251bGwKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9iY21hc3BfaW50 Zl9kZWZzLmgKQEAgLTAsMCArMSwxOTYgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBH UEwtMi4wICovCisjaWZuZGVmIF9fQkNNQVNQX0lOVEZfREVGU19ICisjZGVmaW5lIF9fQkNNQVNQ X0lOVEZfREVGU19ICisKKyNkZWZpbmUgVU1DX09GRlNFVChpbnRmKQkJXAorCSgoKChpbnRmKS0+ cG9ydCkgKiAweDgwMCkgKyAweGMwMDApCisjZGVmaW5lICBVTUNfQ01ECQkJMHgwMDgKKyNkZWZp bmUgICBVTUNfQ01EX1RYX0VOCQkJQklUKDApCisjZGVmaW5lICAgVU1DX0NNRF9SWF9FTgkJCUJJ VCgxKQorI2RlZmluZSAgIFVNQ19DTURfU1BFRURfU0hJRlQJCTB4MgorI2RlZmluZSAgICBVTUNf Q01EX1NQRUVEX01BU0sJCTB4MworI2RlZmluZSAgICBVTUNfQ01EX1NQRUVEXzEwCQkweDAKKyNk ZWZpbmUgICAgVU1DX0NNRF9TUEVFRF8xMDAJCTB4MQorI2RlZmluZSAgICBVTUNfQ01EX1NQRUVE XzEwMDAJCTB4MgorI2RlZmluZSAgICBVTUNfQ01EX1NQRUVEXzI1MDAJCTB4MworI2RlZmluZSAg IFVNQ19DTURfUFJPTUlTQwkJQklUKDQpCisjZGVmaW5lICAgVU1DX0NNRF9QQURfRU4JCUJJVCg1 KQorI2RlZmluZSAgIFVNQ19DTURfQ1JDX0ZXRAkJQklUKDYpCisjZGVmaW5lICAgVU1DX0NNRF9Q QVVTRV9GV0QJCUJJVCg3KQorI2RlZmluZSAgIFVNQ19DTURfUlhfUEFVU0VfSUdOT1JFCUJJVCg4 KQorI2RlZmluZSAgIFVNQ19DTURfVFhfQUREUl9JTlMJCUJJVCg5KQorI2RlZmluZSAgIFVNQ19D TURfSERfRU4JCQlCSVQoMTApCisjZGVmaW5lICAgVU1DX0NNRF9TV19SRVNFVAkJQklUKDEzKQor I2RlZmluZSAgIFVNQ19DTURfTENMX0xPT1BfRU4JCUJJVCgxNSkKKyNkZWZpbmUgICBVTUNfQ01E X0FVVE9fQ09ORklHCQlCSVQoMjIpCisjZGVmaW5lICAgVU1DX0NNRF9DTlRMX0ZSTV9FTgkJQklU KDIzKQorI2RlZmluZSAgIFVNQ19DTURfTk9fTEVOX0NISwkJQklUKDI0KQorI2RlZmluZSAgIFVN Q19DTURfUk1UX0xPT1BfRU4JCUJJVCgyNSkKKyNkZWZpbmUgICBVTUNfQ01EX1BSQkxfRU4JCUJJ VCgyNykKKyNkZWZpbmUgICBVTUNfQ01EX1RYX1BBVVNFX0lHTk9SRQlCSVQoMjgpCisjZGVmaW5l ICAgVU1DX0NNRF9UWF9SWF9FTgkJQklUKDI5KQorI2RlZmluZSAgIFVNQ19DTURfUlVOVF9GSUxU RVJfRElTCUJJVCgzMCkKKyNkZWZpbmUgIFVNQ19NQUMwCQkJMHgwYworI2RlZmluZSAgVU1DX01B QzEJCQkweDEwCisjZGVmaW5lICBVTUNfRlJNX0xFTgkJCTB4MTQKKyNkZWZpbmUgIFVNQ19FRUVf Q1RSTAkJCTB4NjQKKyNkZWZpbmUgICBFTl9MUElfUlhfUEFVU0UJCUJJVCgwKQorI2RlZmluZSAg IEVOX0xQSV9UWF9QRkMJCQlCSVQoMSkKKyNkZWZpbmUgICBFTl9MUElfVFhfUEFVU0UJCUJJVCgy KQorI2RlZmluZSAgIEVFRV9FTgkJCUJJVCgzKQorI2RlZmluZSAgIFJYX0ZJRk9fQ0hFQ0sJCQlC SVQoNCkKKyNkZWZpbmUgICBFRUVfVFhfQ0xLX0RJUwkJQklUKDUpCisjZGVmaW5lICAgRElTX0VF RV8xME0JCQlCSVQoNikKKyNkZWZpbmUgICBMUF9JRExFX1BSRURJQ1RJT05fTU9ERQlCSVQoNykK KyNkZWZpbmUgIFVNQ19FRUVfTFBJX1RJTUVSCQkweDY4CisjZGVmaW5lICBVTUNfUEFVU0VfQ05U UkwJCTB4MzMwCisjZGVmaW5lICBVTUNfVFhfRkxVU0gJCQkweDMzNAorI2RlZmluZSAgVU1DX01J Ql9TVEFSVAkJCTB4NDAwCisjZGVmaW5lICBVTUNfTUlCX0NOVFJMCQkJMHg1ODAKKyNkZWZpbmUg ICBVTUNfTUlCX0NOVFJMX1JYX0NOVF9SU1QJQklUKDApCisjZGVmaW5lICAgVU1DX01JQl9DTlRS TF9SVU5UX0NOVF9SU1QJQklUKDEpCisjZGVmaW5lICAgVU1DX01JQl9DTlRSTF9UWF9DTlRfUlNU CUJJVCgyKQorI2RlZmluZSAgVU1DX1JYX01BWF9QS1RfU1oJCTB4NjA4CisjZGVmaW5lICBVTUNf TVBEX0NUUkwJCQkweDYyMAorI2RlZmluZSAgIFVNQ19NUERfQ1RSTF9NUERfRU4JCUJJVCgwKQor I2RlZmluZSAgIFVNQ19NUERfQ1RSTF9QU1dfRU4JCUJJVCgyNykKKyNkZWZpbmUgIFVNQ19QU1df TVMJCQkweDYyNAorI2RlZmluZSAgVU1DX1BTV19MUwkJCTB4NjI4CisKKyNkZWZpbmUgVU1BQzJG Ql9PRkZTRVRfMl8xCQkweDlmMDQ0CisjZGVmaW5lIFVNQUMyRkJfT0ZGU0VUCQkJMHg5ZjAzYwor I2RlZmluZSAgVU1BQzJGQl9DRkcJCQkweDAKKyNkZWZpbmUgICBVTUFDMkZCX0NGR19PUFVUX0VO CQlCSVQoMCkKKyNkZWZpbmUgICBVTUFDMkZCX0NGR19WTEFOX0VOCQlCSVQoMSkKKyNkZWZpbmUg ICBVTUFDMkZCX0NGR19TTkFQX0VOCQlCSVQoMikKKyNkZWZpbmUgICBVTUFDMkZCX0NGR19CQ01f VEdfRU4JCUJJVCgzKQorI2RlZmluZSAgIFVNQUMyRkJfQ0ZHX0lQVVRfRU4JCUJJVCg0KQorI2Rl ZmluZSAgIFVNQUMyRkJfQ0ZHX0NISURfU0hJRlQJOAorI2RlZmluZSAgIFVNQUMyRkJfQ0ZHX09L X1NFTkRfU0hJRlQJMjQKKyNkZWZpbmUgICBVTUFDMkZCX0NGR19ERUZBVUxUX0VOCVwKKwkJKFVN QUMyRkJfQ0ZHX09QVVRfRU4gfCBVTUFDMkZCX0NGR19WTEFOX0VOIFwKKwkJfCBVTUFDMkZCX0NG R19TTkFQX0VOIHwgVU1BQzJGQl9DRkdfSVBVVF9FTikKKworI2RlZmluZSBSR01JSV9PRkZTRVQo aW50ZikJXAorCSgoKChpbnRmKS0+cG9ydCkgKiAweDEwMCkgKyAweGQwMDApCisjZGVmaW5lICBS R01JSV9FUEhZX0NOVFJMCQkweDAwCisjZGVmaW5lICAgIFJHTUlJX0VQSFlfQ0ZHX0lERFFfQklB UwlCSVQoMCkKKyNkZWZpbmUgICAgUkdNSUlfRVBIWV9DRkdfRVhUX1BXUkRPV04JQklUKDEpCisj ZGVmaW5lICAgIFJHTUlJX0VQSFlfQ0ZHX0ZPUkNFX0RMTF9FTglCSVQoMikKKyNkZWZpbmUgICAg UkdNSUlfRVBIWV9DRkdfSUREUV9HTE9CQUwJQklUKDMpCisjZGVmaW5lICAgIFJHTUlJX0VQSFlf Q0syNV9ESVMJCUJJVCg0KQorI2RlZmluZSAgICBSR01JSV9FUEhZX1JFU0VUCQlCSVQoNykKKyNk ZWZpbmUgIFJHTUlJX09PQl9DTlRSTAkJMHgwYworI2RlZmluZSAgIFJHTUlJX0xJTksJCQlCSVQo NCkKKyNkZWZpbmUgICBSR01JSV9PT0JfRElTCQkJQklUKDUpCisjZGVmaW5lICAgUkdNSUlfTU9E RV9FTgkJCUJJVCg2KQorI2RlZmluZSAgIFJHTUlJX0lEX01PREVfRElTCQlCSVQoMTYpCisKKyNk ZWZpbmUgUkdNSUlfUE9SVF9DTlRSTAkJMHg2MAorI2RlZmluZSAgIFJHTUlJX1BPUlRfTU9ERV9F UEhZCQkwCisjZGVmaW5lICAgUkdNSUlfUE9SVF9NT0RFX0dQSFkJCTEKKyNkZWZpbmUgICBSR01J SV9QT1JUX01PREVfRVhUX0VQSFkJMgorI2RlZmluZSAgIFJHTUlJX1BPUlRfTU9ERV9FWFRfR1BI WQkzCisjZGVmaW5lICAgUkdNSUlfUE9SVF9NT0RFX0VYVF9SVk1JSQk0CisjZGVmaW5lICAgUkdN SUlfUE9SVF9NT0RFX01BU0sJCUdFTk1BU0soMiwgMCkKKworI2RlZmluZSBSR01JSV9TWVNfTEVE X0NOVFJMCQkweDc0CisjZGVmaW5lICBSR01JSV9TWVNfTEVEX0NOVFJMX0xJTktfT1ZSRAlCSVQo MTUpCisKKyNkZWZpbmUgVFhfU1BCX0RNQV9PRkZTRVQoaW50ZikgXAorCSgoKChpbnRmKS0+Y2hh bm5lbCkgKiAweDMwKSArIDB4NDgxODApCisjZGVmaW5lICBUWF9TUEJfRE1BX1JFQUQJCTB4MDAK KyNkZWZpbmUgIFRYX1NQQl9ETUFfQkFTRQkJMHgwOAorI2RlZmluZSAgVFhfU1BCX0RNQV9FTkQJ CQkweDEwCisjZGVmaW5lICBUWF9TUEJfRE1BX1ZBTElECQkweDE4CisjZGVmaW5lICBUWF9TUEJf RE1BX0ZJRk9fQ1RSTAkJMHgyMAorI2RlZmluZSAgIFRYX1NQQl9ETUFfRklGT19GTFVTSAkJQklU KDApCisjZGVmaW5lICBUWF9TUEJfRE1BX0ZJRk9fU1RBVFVTCQkweDI0CisKKyNkZWZpbmUgVFhf U1BCX0NUUkxfT0ZGU0VUKGludGYpIFwKKwkoKCgoaW50ZiktPmNoYW5uZWwpICogMHg2OCkgKyAw eDQ5MzQwKQorI2RlZmluZSAgVFhfU1BCX0NUUkxfRU5BQkxFCQkweDAKKyNkZWZpbmUgICBUWF9T UEJfQ1RSTF9FTkFCTEVfRU4JCUJJVCgwKQorI2RlZmluZSAgVFhfU1BCX0NUUkxfWEZfQ1RSTDIJ CTB4MjAKKyNkZWZpbmUgICBUWF9TUEJfQ1RSTF9YRl9CSURfU0hJRlQJMTYKKworI2RlZmluZSBU WF9TUEJfVE9QX09GRlNFVChpbnRmKSBcCisJKCgoKGludGYpLT5jaGFubmVsKSAqIDB4MWMpICsg MHg0YTBlMCkKKyNkZWZpbmUgVFhfU1BCX1RPUF9CTEtPVVQJCTB4MAorI2RlZmluZSBUWF9TUEJf VE9QX1NQUkVfQldfQ1RSTAkJMHg0CisKKyNkZWZpbmUgVFhfRVBLVF9DX09GRlNFVChpbnRmKSBc CisJKCgoKGludGYpLT5jaGFubmVsKSAqIDB4MTIwKSArIDB4NDA5MDApCisjZGVmaW5lICBUWF9F UEtUX0NfQ0ZHX01JU0MJCTB4MAorI2RlZmluZSAgIFRYX0VQS1RfQ19DRkdfTUlTQ19FTgkJQklU KDApCisjZGVmaW5lICAgVFhfRVBLVF9DX0NGR19NSVNDX1BUCQlCSVQoMSkKKyNkZWZpbmUgICBU WF9FUEtUX0NfQ0ZHX01JU0NfUFNfU0hJRlQJMTQKKyNkZWZpbmUgICBUWF9FUEtUX0NfQ0ZHX01J U0NfRkRfU0hJRlQJMjAKKworI2RlZmluZSBUWF9QQVVTRV9DVFJMX09GRlNFVChpbnRmKSBcCisJ KCgoKGludGYpLT5jaGFubmVsICogMHhjKSArIDB4NDlhMjApKQorI2RlZmluZSAgVFhfUEFVU0Vf TUFQX1ZFQ1RPUgkJMHg4CisKKyNkZWZpbmUgUlhfRURQS1RfRE1BX09GRlNFVChpbnRmKSBcCisJ KCgoKGludGYpLT5jaGFubmVsKSAqIDB4MzgpICsgMHg5Y2EwMCkKKyNkZWZpbmUgIFJYX0VEUEtU X0RNQV9XUklURQkJMHgwMAorI2RlZmluZSAgUlhfRURQS1RfRE1BX1JFQUQJCTB4MDgKKyNkZWZp bmUgIFJYX0VEUEtUX0RNQV9CQVNFCQkweDEwCisjZGVmaW5lICBSWF9FRFBLVF9ETUFfRU5ECQkw eDE4CisjZGVmaW5lICBSWF9FRFBLVF9ETUFfVkFMSUQJCTB4MjAKKyNkZWZpbmUgIFJYX0VEUEtU X0RNQV9GVUxMTkVTUwkJMHgyOAorI2RlZmluZSAgUlhfRURQS1RfRE1BX01JTl9USFJFUwkJMHgy YworI2RlZmluZSAgUlhfRURQS1RfRE1BX0NIX1hPTk9GRgkJMHgzMAorCisjZGVmaW5lIFJYX0VE UEtUX0NGR19PRkZTRVQoaW50ZikgXAorCSgoKChpbnRmKS0+Y2hhbm5lbCkgKiAweDcwKSArIDB4 OWM2MDApCisjZGVmaW5lICBSWF9FRFBLVF9DRkdfQ0ZHMAkJMHgwCisjZGVmaW5lICAgUlhfRURQ S1RfQ0ZHX0NGRzBfREJVRl9TSElGVAk5CisjZGVmaW5lICAgIFJYX0VEUEtUX0NGR19DRkcwX1JC VUYJMHgwCisjZGVmaW5lICAgIFJYX0VEUEtUX0NGR19DRkcwX1JCVUZfNEsJMHgxCisjZGVmaW5l ICAgIFJYX0VEUEtUX0NGR19DRkcwX0JVRl80SwkweDIKKy8qIEVGUk0gU1RVRkYsIDAgPTNEIG5v IGJ5dGUgc3R1ZmYsIDEgPTNEIHR3byBieXRlIHN0dWZmICovCisjZGVmaW5lICAgUlhfRURQS1Rf Q0ZHX0NGRzBfRUZSTV9TVFVGCUJJVCgxMSkKKyNkZWZpbmUgICBSWF9FRFBLVF9DRkdfQ0ZHMF9C QUxOX1NISUZUCTEyCisjZGVmaW5lICAgIFJYX0VEUEtUX0NGR19DRkcwX05PX0FMTgkwCisjZGVm aW5lICAgIFJYX0VEUEtUX0NGR19DRkcwXzRfQUxOCTIKKyNkZWZpbmUgICAgUlhfRURQS1RfQ0ZH X0NGRzBfNjRfQUxOCTYKKyNkZWZpbmUgIFJYX0VEUEtUX1JJTkdfQlVGRkVSX1dSSVRFCTB4MzgK KyNkZWZpbmUgIFJYX0VEUEtUX1JJTkdfQlVGRkVSX1JFQUQJMHg0MAorI2RlZmluZSAgUlhfRURQ S1RfUklOR19CVUZGRVJfQkFTRQkweDQ4CisjZGVmaW5lICBSWF9FRFBLVF9SSU5HX0JVRkZFUl9F TkQJMHg1MAorI2RlZmluZSAgUlhfRURQS1RfUklOR19CVUZGRVJfVkFMSUQJMHg1OAorI2RlZmlu ZSAgUlhfRURQS1RfQ0ZHX0VOQUJMRQkJMHg2YworI2RlZmluZSAgIFJYX0VEUEtUX0NGR19FTkFC TEVfRU4JQklUKDApCisKKyNkZWZpbmUgUlhfU1BCX0RNQV9PRkZTRVQoaW50ZikgXAorCSgoKChp bnRmKS0+Y2hhbm5lbCkgKiAweDMwKSArIDB4YTAwMDApCisjZGVmaW5lICBSWF9TUEJfRE1BX1JF QUQJCTB4MDAKKyNkZWZpbmUgIFJYX1NQQl9ETUFfQkFTRQkJMHgwOAorI2RlZmluZSAgUlhfU1BC X0RNQV9FTkQJCQkweDEwCisjZGVmaW5lICBSWF9TUEJfRE1BX1ZBTElECQkweDE4CisjZGVmaW5l ICBSWF9TUEJfRE1BX0ZJRk9fQ1RSTAkJMHgyMAorI2RlZmluZSAgIFJYX1NQQl9ETUFfRklGT19G TFVTSAkJQklUKDApCisjZGVmaW5lICBSWF9TUEJfRE1BX0ZJRk9fU1RBVFVTCQkweDI0CisKKyNk ZWZpbmUgUlhfU1BCX0NUUkxfT0ZGU0VUKGludGYpIFwKKwkoKCgoaW50ZiktPmNoYW5uZWwgLSA2 KSAqIDB4NjgpICsgMHhhMTAwMCkKKyNkZWZpbmUgIFJYX1NQQl9DVFJMX0VOQUJMRQkJMHgwMAor I2RlZmluZSAgIFJYX1NQQl9DVFJMX0VOQUJMRV9FTgkJQklUKDApCisKKyNkZWZpbmUgUlhfUEFV U0VfQ1RSTF9PRkZTRVQoaW50ZikgXAorCSgoKChpbnRmKS0+Y2hhbm5lbCAtIDYpICogMHg0KSAr IDB4YTExMzgpCisjZGVmaW5lICBSWF9QQVVTRV9NQVBfVkVDVE9SCQkweDAwCisKKyNkZWZpbmUg UlhfU1BCX1RPUF9DVFJMX09GRlNFVChpbnRmKSBcCisJKCgoKGludGYpLT5jaGFubmVsIC0gNikg KiAweDE0KSArIDB4YTIwMDApCisjZGVmaW5lICBSWF9TUEJfVE9QX0JMS09VVAkJMHgwMAorCisj ZGVmaW5lIE5VTV80S19CVUZGRVJTCQkJMzIKKyNkZWZpbmUgUklOR19CVUZGRVJfU0laRQkJKFBB R0VfU0laRSAqIE5VTV80S19CVUZGRVJTKQorCisjZGVmaW5lIERFU0NfUklOR19DT1VOVAkJCSg2 NCAqIE5VTV80S19CVUZGRVJTKQorI2RlZmluZSBERVNDX1NJWkUJCQkxNgorI2RlZmluZSBERVND X1JJTkdfU0laRQkJCShERVNDX1JJTkdfQ09VTlQgKiBERVNDX1NJWkUpCisKKyNlbmRpZgotLT0y MAoyLjcuNAo= --000000000000559e73060065b9ea Content-Type: application/pkcs7-signature; name="smime.p7s" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7s" Content-Description: S/MIME Cryptographic Signature MIIQagYJKoZIhvcNAQcCoIIQWzCCEFcCAQExDzANBglghkgBZQMEAgEFADALBgkqhkiG9w0BBwGg gg3BMIIFDTCCA/WgAwIBAgIQeEqpED+lv77edQixNJMdADANBgkqhkiG9w0BAQsFADBMMSAwHgYD VQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UE AxMKR2xvYmFsU2lnbjAeFw0yMDA5MTYwMDAwMDBaFw0yODA5MTYwMDAwMDBaMFsxCzAJBgNVBAYT AkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMTEwLwYDVQQDEyhHbG9iYWxTaWduIEdDQyBS MyBQZXJzb25hbFNpZ24gMiBDQSAyMDIwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA vbCmXCcsbZ/a0fRIQMBxp4gJnnyeneFYpEtNydrZZ+GeKSMdHiDgXD1UnRSIudKo+moQ6YlCOu4t rVWO/EiXfYnK7zeop26ry1RpKtogB7/O115zultAz64ydQYLe+a1e/czkALg3sgTcOOcFZTXk38e aqsXsipoX1vsNurqPtnC27TWsA7pk4uKXscFjkeUE8JZu9BDKaswZygxBOPBQBwrA5+20Wxlk6k1 e6EKaaNaNZUy30q3ArEf30ZDpXyfCtiXnupjSK8WU2cK4qsEtj09JS4+mhi0CTCrCnXAzum3tgcH cHRg0prcSzzEUDQWoFxyuqwiwhHu3sPQNmFOMwIDAQABo4IB2jCCAdYwDgYDVR0PAQH/BAQDAgGG MGAGA1UdJQRZMFcGCCsGAQUFBwMCBggrBgEFBQcDBAYKKwYBBAGCNxQCAgYKKwYBBAGCNwoDBAYJ KwYBBAGCNxUGBgorBgEEAYI3CgMMBggrBgEFBQcDBwYIKwYBBQUHAxEwEgYDVR0TAQH/BAgwBgEB /wIBADAdBgNVHQ4EFgQUljPR5lgXWzR1ioFWZNW+SN6hj88wHwYDVR0jBBgwFoAUj/BLf6guRSSu TVD6Y5qL3uLdG7wwegYIKwYBBQUHAQEEbjBsMC0GCCsGAQUFBzABhiFodHRwOi8vb2NzcC5nbG9i YWxzaWduLmNvbS9yb290cjMwOwYIKwYBBQUHMAKGL2h0dHA6Ly9zZWN1cmUuZ2xvYmFsc2lnbi5j b20vY2FjZXJ0L3Jvb3QtcjMuY3J0MDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwuZ2xvYmFs c2lnbi5jb20vcm9vdC1yMy5jcmwwWgYDVR0gBFMwUTALBgkrBgEEAaAyASgwQgYKKwYBBAGgMgEo CjA0MDIGCCsGAQUFBwIBFiZodHRwczovL3d3dy5nbG9iYWxzaWduLmNvbS9yZXBvc2l0b3J5LzAN BgkqhkiG9w0BAQsFAAOCAQEAdAXk/XCnDeAOd9nNEUvWPxblOQ/5o/q6OIeTYvoEvUUi2qHUOtbf jBGdTptFsXXe4RgjVF9b6DuizgYfy+cILmvi5hfk3Iq8MAZsgtW+A/otQsJvK2wRatLE61RbzkX8 9/OXEZ1zT7t/q2RiJqzpvV8NChxIj+P7WTtepPm9AIj0Keue+gS2qvzAZAY34ZZeRHgA7g5O4TPJ /oTd+4rgiU++wLDlcZYd/slFkaT3xg4qWDepEMjT4T1qFOQIL+ijUArYS4owpPg9NISTKa1qqKWJ jFoyms0d0GwOniIIbBvhI2MJ7BSY9MYtWVT5jJO3tsVHwj4cp92CSFuGwunFMzCCA18wggJHoAMC AQICCwQAAAAAASFYUwiiMA0GCSqGSIb3DQEBCwUAMEwxIDAeBgNVBAsTF0dsb2JhbFNpZ24gUm9v dCBDQSAtIFIzMRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMB4XDTA5 MDMxODEwMDAwMFoXDTI5MDMxODEwMDAwMFowTDEgMB4GA1UECxMXR2xvYmFsU2lnbiBSb290IENB IC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wggEiMA0GCSqG SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDMJXaQeQZ4Ihb1wIO2hMoonv0FdhHFrYhy/EYCQ8eyip0E XyTLLkvhYIJG4VKrDIFHcGzdZNHr9SyjD4I9DCuul9e2FIYQebs7E4B3jAjhSdJqYi8fXvqWaN+J J5U4nwbXPsnLJlkNc96wyOkmDoMVxu9bi9IEYMpJpij2aTv2y8gokeWdimFXN6x0FNx04Druci8u nPvQu7/1PQDhBjPogiuuU6Y6FnOM3UEOIDrAtKeh6bJPkC4yYOlXy7kEkmho5TgmYHWyn3f/kRTv riBJ/K1AFUjRAjFhGV64l++td7dkmnq/X8ET75ti+w1s4FRpFqkD2m7pg5NxdsZphYIXAgMBAAGj QjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSP8Et/qC5FJK5N UPpjmove4t0bvDANBgkqhkiG9w0BAQsFAAOCAQEAS0DbwFCq/sgM7/eWVEVJu5YACUGssxOGhigH M8pr5nS5ugAtrqQK0/Xx8Q+Kv3NnSoPHRHt44K9ubG8DKY4zOUXDjuS5V2yq/BKW7FPGLeQkbLmU Y/vcU2hnVj6DuM81IcPJaP7O2sJTqsyQiunwXUaMld16WCgaLx3ezQA3QY/tRG3XUyiXfvNnBB4V 14qWtNPeTCekTBtzc3b0F5nCH3oO4y0IrQocLP88q1UOD5F+NuvDV0m+4S4tfGCLw0FREyOdzvcy a5QBqJnnLDMfOjsl0oZAzjsshnjJYS8Uuu7bVW/fhO4FCU29KNhyztNiUGUe65KXgzHZs7XKR1g/ XzCCBUkwggQxoAMCAQICDCPwEotc2kAt96Z1EDANBgkqhkiG9w0BAQsFADBbMQswCQYDVQQGEwJC RTEZMBcGA1UEChMQR2xvYmFsU2lnbiBudi1zYTExMC8GA1UEAxMoR2xvYmFsU2lnbiBHQ0MgUjMg UGVyc29uYWxTaWduIDIgQ0EgMjAyMDAeFw0yMjA5MTAxMjM5NTBaFw0yNTA5MTAxMjM5NTBaMIGM MQswCQYDVQQGEwJJTjESMBAGA1UECBMJS2FybmF0YWthMRIwEAYDVQQHEwlCYW5nYWxvcmUxFjAU BgNVBAoTDUJyb2FkY29tIEluYy4xFDASBgNVBAMTC0p1c3RpbiBDaGVuMScwJQYJKoZIhvcNAQkB FhhqdXN0aW4uY2hlbkBicm9hZGNvbS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB AQDKX7oyRqaeT81UCy+OTzAUHJeHABD6GDVZu7IJxt8GWSGx+ebFexFz/gnRO/sgwnPzzrC2DwM1 kaDgYe+pI1lMzUZvAB5DfS1qXKNGoeeNv7FoNFlv3iD4bvOykX/K/voKtjS3QNs0EDnwkvETUWWu yiXtMiGENBBJcbGirKuFTT3U/2iPoSL5OeMSEqKLdkNTT9O79KN+Rf7Zi4Duz0LUqqpz9hZl4zGc NhTY3E+cXCB11wty89QStajwXdhGJTYEvUgvsq1h8CwJj9w/38ldAQf5WjhPmApYeJR2ewFrBMCM 4lHkdRJ6TDc9nXoEkypUfjJkJHe7Eal06tosh6JpAgMBAAGjggHZMIIB1TAOBgNVHQ8BAf8EBAMC BaAwgaMGCCsGAQUFBwEBBIGWMIGTME4GCCsGAQUFBzAChkJodHRwOi8vc2VjdXJlLmdsb2JhbHNp Z24uY29tL2NhY2VydC9nc2djY3IzcGVyc29uYWxzaWduMmNhMjAyMC5jcnQwQQYIKwYBBQUHMAGG NWh0dHA6Ly9vY3NwLmdsb2JhbHNpZ24uY29tL2dzZ2NjcjNwZXJzb25hbHNpZ24yY2EyMDIwME0G A1UdIARGMEQwQgYKKwYBBAGgMgEoCjA0MDIGCCsGAQUFBwIBFiZodHRwczovL3d3dy5nbG9iYWxz aWduLmNvbS9yZXBvc2l0b3J5LzAJBgNVHRMEAjAAMEkGA1UdHwRCMEAwPqA8oDqGOGh0dHA6Ly9j cmwuZ2xvYmFsc2lnbi5jb20vZ3NnY2NyM3BlcnNvbmFsc2lnbjJjYTIwMjAuY3JsMCMGA1UdEQQc MBqBGGp1c3Rpbi5jaGVuQGJyb2FkY29tLmNvbTATBgNVHSUEDDAKBggrBgEFBQcDBDAfBgNVHSME GDAWgBSWM9HmWBdbNHWKgVZk1b5I3qGPzzAdBgNVHQ4EFgQUIWGeYuaTsnIada5Xx8TR3cheUbgw DQYJKoZIhvcNAQELBQADggEBAHNQlMqQOFYPYFO71A+8t+qWMmtOdd2iGswSOvpSZ/pmGlfw8ZvY dRTkl27m37la84AxRkiVMes14JyOZJoMh/g7fbgPlU14eBc6WQWkIA6AmNkduFWTr1pRezkjpeo6 xVmdBLM4VY1TFDYj7S8H2adPuypd62uHMY/MZi+BIUys4uAFA+N3NuUBNjcVZXYPplYxxKEuIFq6 sDL+OV16G+F9CkNMN3txsym8Nnx5WAYZb6+rBUIhMGz70V05xsHQfzvo2s7f0J1tJ5BoRlPPhL0h VOnWA3h71u9TfSsv+PXVm3P21TfOS2uc1hbzEqyENCP4i5XQ0rv0TmPW42GZ0o4xggJtMIICaQIB ATBrMFsxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMTEwLwYDVQQDEyhH bG9iYWxTaWduIEdDQyBSMyBQZXJzb25hbFNpZ24gMiBDQSAyMDIwAgwj8BKLXNpALfemdRAwDQYJ YIZIAWUDBAIBBQCggdQwLwYJKoZIhvcNAQkEMSIEIMLfxmYoBmJGTjW6ASkNC+U0fSf1tqyu6kJA jjsHmK0UMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTIzMDcxMzIy MTkyMVowaQYJKoZIhvcNAQkPMVwwWjALBglghkgBZQMEASowCwYJYIZIAWUDBAEWMAsGCWCGSAFl AwQBAjAKBggqhkiG9w0DBzALBgkqhkiG9w0BAQowCwYJKoZIhvcNAQEHMAsGCWCGSAFlAwQCATAN BgkqhkiG9w0BAQEFAASCAQBGdyvN4M3JRSDo0M5qKt0CIDsg5VaA0ELkKkw7C+hrBaQAKN/JSPDf dyhmtV9iLIhXbottpqBTGu3buQtU/rzg/iKG+lkDN0JQ/sUKSgcfxCYyOnEq8EiEP2VMoDDhV3xO 0dXDGKE7bszwCjHy8dvwiOYG4cFlLSPi4YbyZP8anKOHvmfI0Tf0LY/PXgwP0B9vBSrMGlOnoGOP vSmomB/1NEo78CTw/A0xfK2qfe4aLad1JJ+MjL2t2TtdI0E7SWU8J/lWQsqxaX3VRK1nSOt8lF+J Rs3hDsZanR/wFTUew9U8ihdF/3/9EBTD077ZhPNAq73fhAhPg/HmhKhuKVQ5 --000000000000559e73060065b9ea--