From nobody Sun Feb 8 10:49:01 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 4F91FC7EE2E for ; Wed, 24 May 2023 23:02:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238651AbjEXXC3 (ORCPT ); Wed, 24 May 2023 19:02:29 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45400 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238590AbjEXXCQ (ORCPT ); Wed, 24 May 2023 19:02:16 -0400 Received: from mail-pg1-x52f.google.com (mail-pg1-x52f.google.com [IPv6:2607:f8b0:4864:20::52f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9E20EBB for ; Wed, 24 May 2023 16:02:10 -0700 (PDT) Received: by mail-pg1-x52f.google.com with SMTP id 41be03b00d2f7-52867360efcso662505a12.2 for ; Wed, 24 May 2023 16:02:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; t=1684969330; x=1687561330; h=references:in-reply-to:message-id:date:subject:cc:to:from:from:to :cc:subject:date:message-id:reply-to; bh=RVce6AgC1yEte7dDvHTHJb3sUOCMrL4RfOiJvZR3L4c=; b=fJZeK0f5F68E6NRkaRQ8z9ArFbuDF3wEmjuKyBI20Zr8JQ9rVXlqRsnQ5aFSapSA87 ehJ93atC/i9n3z1JzzJagTX3lZBqKUQ7fnZdpPUwyZvUcRG3toc8wbv1wcBSdDJ9LnDR QoZSfKRavZkFAKAithlLzmlv+P5PaY4bRTIus= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1684969330; x=1687561330; 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=RVce6AgC1yEte7dDvHTHJb3sUOCMrL4RfOiJvZR3L4c=; b=E94Unl5qt/PrePhdBLhPwDD0KlY9ZC4qPltJEm6yhK082Yy+Ho+F2OdhDIJVDUhckJ 4jUkP8mLrRpEJRU6DpIsGveuZjaekbLFHMjvgGz0fbceCQqs2C3KaUyIjCqvaDxHMRr0 tSV5vj3N3d+wl1AcbQpPKhP9PCBBL5vcO+6G4iOp3U2jTmV21+mjd9B5fdEy0dGuc9Et AEwOzKkbLtF9X/It9gsPBdqDUKz3FPaCrV/EHRBXfeBHe74Nibo3p5x0ywRSASeVSBvV 66xoebHAxPPqOJML8prV9/QEh4I63vMhl1vNCdYVomIEopv3p4E1BxDntgO16Q6zpyC4 3wrw== X-Gm-Message-State: AC+VfDywwAo9ux2hIv0ILD12Xnk8+dPdVbo7ErUkWf3pLESez+akPItG tIMjMYLdaqKTVaehx6ZHzcfTfA== X-Google-Smtp-Source: ACHHUZ6GP6lFC0vzl1SyN31RCRIM90saRf3FpePYT//cZkS9gBTuChrnkJDZXNFV1Ys23RQD6oy1jg== X-Received: by 2002:a17:90b:2397:b0:255:c8e5:b736 with SMTP id mr23-20020a17090b239700b00255c8e5b736mr4711968pjb.0.1684969328953; Wed, 24 May 2023 16:02:08 -0700 (PDT) Received: from stbirv-lnx-2.igp.broadcom.net ([192.19.223.252]) by smtp.gmail.com with ESMTPSA id j10-20020a17090ae60a00b00246774a9addsm1789889pjy.48.2023.05.24.16.02.06 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 24 May 2023 16:02:08 -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: justin.chen@broadcom.com, 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, christian.koenig@amd.com, simon.horman@corigine.com Subject: [PATCH net-next v5 3/6] net: bcmasp: Add support for ASP2.0 Ethernet controller Date: Wed, 24 May 2023 16:01:50 -0700 Message-Id: <1684969313-35503-4-git-send-email-justin.chen@broadcom.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1684969313-35503-1-git-send-email-justin.chen@broadcom.com> References: <1684969313-35503-1-git-send-email-justin.chen@broadcom.com> Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-256; boundary="00000000000064485705fc787e5b" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable --00000000000064485705fc787e5b MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 QWRkIHN1cHBvcnQgZm9yIHRoZSBCcm9hZGNvbSBBU1AgMi4wIEV0aGVybmV0IGNvbnRyb2xsZXIg d2hpY2ggaXMgZmlyc3QKaW50cm9kdWNlZCB3aXRoIDcyMTY1LiBUaGlzIGNvbnRyb2xsZXIgZmVh dHVyZXMgdHdvIGRpc3RpbmN0IEV0aGVybmV0CnBvcnRzIHRoYXQgY2FuIGJlIGluZGVwZW5kZW50 bHkgb3BlcmF0ZWQuCgpUaGlzIHBhdGNoIHN1cHBvcnRzOgoKLSBXYWtlLW9uLUxBTiB1c2luZyBt YWdpYyBwYWNrZXRzCi0gYmFzaWMgZXRodG9vbCBvcGVyYXRpb25zIChsaW5rLCBjb3VudGVycywg bWVzc2FnZSBsZXZlbCkKLSBNQUMgZGVzdGluYXRpb24gYWRkcmVzcyBmaWx0ZXJpbmcgKHByb21p c2N1b3VzLCBBTExfTVVMVEksIGV0Yy4pCgpSZXZpZXdlZC1ieTogU2ltb24gSG9ybWFuIDxzaW1v bi5ob3JtYW5AY29yaWdpbmUuY29tPgpTaWduZWQtb2ZmLWJ5OiBGbG9yaWFuIEZhaW5lbGxpIDxm bG9yaWFuLmZhaW5lbGxpQGJyb2FkY29tLmNvbT4KU2lnbmVkLW9mZi1ieTogSnVzdGluIENoZW4g PGp1c3Rpbi5jaGVuQGJyb2FkY29tLmNvbT4KLS0tCnY1CgktIFJlbW92ZSB1bm5lY2Vzc2FyeSBw YXJlbnRoZXNpcwoJLSBVc2UgYm9vbCBmb3IgYmNtYXNwX25ldGZpbHRfY2hlY2tfZHVwKCkKCnY0 CiAgICAgICAgLSBBZGRyZXNzIHNwYXJzZSB3YXJuaW5ncwogICAgICAgIC0gRml4IG9uZSBtb3Jl IHJldmVyc2UgeG1hcyB0cmVlIHZpb2xhdGlvbgogICAgICAgIC0gSW1wcm92ZSBlcnJvciBsb2dp YyBmb3IgYmNtYXNwX25ldGZpbHRfZ2V0X3JlZ19vZmZzZXQoKQoJLSBSZW1vdmUgaW5saW5lcwoK djMKICAgICAgICAtIEZpeCBsb2dpYyBlcnJvciB3aXRoIG5ldCBzdGF0cyB3aGVyZSBzb21lIHN0 YXRzIHdlcmUgbWlzc2luZwogICAgICAgIC0gR2VuZXJhbCBjbGVhbiB1cCBhZGRyZXNzaW5nIGZv cm1hdHRpbmcvc3BlbGxpbmcvY29uc2lzdGVuY3kKICAgICAgICAtIFVzZSBkZXZfZXJyX3Byb2Jl IHRvIHNhdmUgYSBmZXcgTG9DcwogICAgICAgIC0gVXNlIHB1dF91bmFsaWduZWQgd2hlbiB1cGRh dGluZyBuZXQgc3RhdHMKCnYyCiAgICAgICAgLSBSZXBsYWNlIGEgY291cGxlIGZ1bmN0aW9ucyB3 aXRoIGhlbHBlciBmdW5jdGlvbnMKICAgICAgICAtIEZpeCBhIGZldyBXb0wgaXNzdWVzCgogZHJp dmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZyAgICAgICAgICAgICAgfCAgIDExICsK IGRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL01ha2VmaWxlICAgICAgICAgICAgIHwgICAg MSArCiBkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL01ha2VmaWxlICAgICAgICB8 ICAgIDIgKwogZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9iY21hc3AuYyAgICAg ICAgfCAxNDYyICsrKysrKysrKysrKysrKys9CisrKysKIGRyaXZlcnMvbmV0L2V0aGVybmV0L2Jy b2FkY29tL2FzcDIvYmNtYXNwLmggICAgICAgIHwgIDYzNyArKysrKysrKysKIC4uLi9uZXQvZXRo ZXJuZXQvYnJvYWRjb20vYXNwMi9iY21hc3BfZXRodG9vbC5jICAgIHwgIDU2OCArKysrKysrKwog ZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9iY21hc3BfaW50Zi5jICAgfCAxNDI1 ICsrKysrKysrKysrKysrKys9CisrKwogLi4uL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2Jj bWFzcF9pbnRmX2RlZnMuaCAgfCAgMjM4ICsrKysKIDggZmlsZXMgY2hhbmdlZCwgNDM0NCBpbnNl cnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRj b20vYXNwMi9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L2V0aGVybmV0 L2Jyb2FkY29tL2FzcDIvYmNtYXNwLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC9l dGhlcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9iY21hc3BfZXRodG9vbC5jCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9iY21hc3BfaW50Zi5j CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9i Y21hc3BfaW50Zl9kZWZzLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9h ZGNvbS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYj0Kcm9hZGNvbS9LY29uZmlnCmlu ZGV4IDk0ODU4NmJmMWI1Yi4uZDQxNjYxNDExNDVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9l dGhlcm5ldC9icm9hZGNvbS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2Fk Y29tL0tjb25maWcKQEAgLTI1NSw0ICsyNTUsMTUgQEAgY29uZmlnIEJOWFRfSFdNT04KIAkgIFNh eSBZIGlmIHlvdSB3YW50IHRvIGV4cG9zZSB0aGUgdGhlcm1hbCBzZW5zb3IgZGF0YSBvbiBOZXRY dHJlbWUtQy9FCiAJICBkZXZpY2VzLCB2aWEgdGhlIGh3bW9uIHN5c2ZzIGludGVyZmFjZS4KPTIw Citjb25maWcgQkNNQVNQCisJdHJpc3RhdGUgIkJyb2FkY29tIEFTUCAyLjAgRXRoZXJuZXQgc3Vw cG9ydCIKKwlkZWZhdWx0IEFSQ0hfQlJDTVNUQgorCWRlcGVuZHMgb24gT0YKKwlzZWxlY3QgTUlJ CisJc2VsZWN0IFBIWUxJQgorCXNlbGVjdCBNRElPX0JDTV9VTklNQUMKKwloZWxwCisJICBUaGlz IGNvbmZpZ3VyYXRpb24gZW5hYmxlcyB0aGUgQnJvYWRjb20gQVNQIDIuMCBFdGhlcm5ldCBjb250 cm9sbGVyCisJICBkcml2ZXIgd2hpY2ggaXMgcHJlc2VudCBpbiBCcm9hZGNvbSBTVEIgU29DcyBz dWNoIGFzIDcyMTY1LgorCiBlbmRpZiAjIE5FVF9WRU5ET1JfQlJPQURDT00KZGlmZiAtLWdpdCBh L2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRo ZXJuZXQvPQpicm9hZGNvbS9NYWtlZmlsZQppbmRleCAwZGRmYjViNWQ1M2MuLmJhYzVjYjZhZDBj ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vTWFrZWZpbGUKKysr IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vTWFrZWZpbGUKQEAgLTE3LDMgKzE3LDQg QEAgb2JqLSQoQ09ORklHX0JHTUFDX0JDTUEpICs9M0QgYmdtYWMtYmNtYS5vIGJnbWFjLWJjbWEt bWRpPQpvLm8KIG9iai0kKENPTkZJR19CR01BQ19QTEFURk9STSkgKz0zRCBiZ21hYy1wbGF0Zm9y bS5vCiBvYmotJChDT05GSUdfU1lTVEVNUE9SVCkgKz0zRCBiY21zeXNwb3J0Lm8KIG9iai0kKENP TkZJR19CTlhUKSArPTNEIGJueHQvCitvYmotJChDT05GSUdfQkNNQVNQKSArPTNEIGFzcDIvCmRp ZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL01ha2VmaWxlIGIv ZHJpdmVycy9uZXQvZXRoZT0Kcm5ldC9icm9hZGNvbS9hc3AyL01ha2VmaWxlCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZTA3NTUwMzE1ZjgzCi0tLSAvZGV2L251bGwK KysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9NYWtlZmlsZQpAQCAtMCww ICsxLDIgQEAKK29iai0kKENPTkZJR19CQ01BU1ApICs9M0QgYmNtLWFzcC5vCitiY20tYXNwLW9i anMgOj0zRCBiY21hc3AubyBiY21hc3BfaW50Zi5vIGJjbWFzcF9ldGh0b29sLm8KZGlmZiAtLWdp dCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwLmMgYi9kcml2ZXJz L25ldC9ldGhlPQpybmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5jYjBkNGYyZGU4OTAKLS0tIC9kZXYvbnVsbAorKysgYi9k cml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcC5jCkBAIC0wLDAgKzEsMTQ2 MiBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBCcm9hZGNv bSBTVEIgQVNQIDIuMCBEcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMjMgQnJvYWRjb20K KyAqLworI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaWZf dmxhbi5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1 cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwu aD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9v Zi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9w bGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorCisjaW5jbHVkZSAiYmNtYXNwLmgi CisjaW5jbHVkZSAiYmNtYXNwX2ludGZfZGVmcy5oIgorCitzdGF0aWMgdm9pZCBfaW50cjJfbWFz a19jbGVhcihzdHJ1Y3QgYmNtYXNwX3ByaXYgKnByaXYsIHUzMiBtYXNrKQoreworCWludHIyX2Nv cmVfd2wocHJpdiwgbWFzaywgQVNQX0lOVFIyX01BU0tfQ0xFQVIpOworCXByaXYtPmlycV9tYXNr ICY9M0Qgfm1hc2s7Cit9CisKK3N0YXRpYyB2b2lkIF9pbnRyMl9tYXNrX3NldChzdHJ1Y3QgYmNt YXNwX3ByaXYgKnByaXYsIHUzMiBtYXNrKQoreworCWludHIyX2NvcmVfd2wocHJpdiwgbWFzaywg QVNQX0lOVFIyX01BU0tfU0VUKTsKKwlwcml2LT5pcnFfbWFzayB8PTNEIG1hc2s7Cit9CisKK3Zv aWQgYmNtYXNwX2VuYWJsZV90eF9pcnEoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmLCBpbnQgZW4p Cit7CisJc3RydWN0IGJjbWFzcF9wcml2ICpwcml2ID0zRCBpbnRmLT5wYXJlbnQ7CisKKwlpZiAo ZW4pCisJCV9pbnRyMl9tYXNrX2NsZWFyKHByaXYsIEFTUF9JTlRSMl9UWF9ERVNDKGludGYtPmNo YW5uZWwpKTsKKwllbHNlCisJCV9pbnRyMl9tYXNrX3NldChwcml2LCBBU1BfSU5UUjJfVFhfREVT QyhpbnRmLT5jaGFubmVsKSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChiY21hc3BfZW5hYmxlX3R4 X2lycSk7CisKK3ZvaWQgYmNtYXNwX2VuYWJsZV9yeF9pcnEoc3RydWN0IGJjbWFzcF9pbnRmICpp bnRmLCBpbnQgZW4pCit7CisJc3RydWN0IGJjbWFzcF9wcml2ICpwcml2ID0zRCBpbnRmLT5wYXJl bnQ7CisKKwlpZiAoZW4pCisJCV9pbnRyMl9tYXNrX2NsZWFyKHByaXYsIEFTUF9JTlRSMl9SWF9F Q0goaW50Zi0+Y2hhbm5lbCkpOworCWVsc2UKKwkJX2ludHIyX21hc2tfc2V0KHByaXYsIEFTUF9J TlRSMl9SWF9FQ0goaW50Zi0+Y2hhbm5lbCkpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoYmNtYXNw X2VuYWJsZV9yeF9pcnEpOworCitzdGF0aWMgdm9pZCBiY21hc3BfaW50cjJfbWFza19zZXRfYWxs KHN0cnVjdCBiY21hc3BfcHJpdiAqcHJpdikKK3sKKwlfaW50cjJfbWFza19zZXQocHJpdiwgMHhm ZmZmZmZmZik7CisJcHJpdi0+aXJxX21hc2sgPTNEIDB4ZmZmZmZmZmY7Cit9CisKK3N0YXRpYyB2 b2lkIGJjbWFzcF9pbnRyMl9jbGVhcl9hbGwoc3RydWN0IGJjbWFzcF9wcml2ICpwcml2KQorewor CWludHIyX2NvcmVfd2wocHJpdiwgMHhmZmZmZmZmZiwgQVNQX0lOVFIyX0NMRUFSKTsKK30KKwor c3RhdGljIHZvaWQgYmNtYXNwX2ludHIyX2hhbmRsaW5nKHN0cnVjdCBiY21hc3BfaW50ZiAqaW50 ZiwgdTMyIHN0YXR1cykKK3sKKwlpZiAoc3RhdHVzICYgQVNQX0lOVFIyX1JYX0VDSChpbnRmLT5j aGFubmVsKSkgeworCQlpZiAobGlrZWx5KG5hcGlfc2NoZWR1bGVfcHJlcCgmaW50Zi0+cnhfbmFw aSkpKSB7CisJCQliY21hc3BfZW5hYmxlX3J4X2lycShpbnRmLCAwKTsKKwkJCV9fbmFwaV9zY2hl ZHVsZV9pcnFvZmYoJmludGYtPnJ4X25hcGkpOworCQl9CisJfQorCisJaWYgKHN0YXR1cyAmIEFT UF9JTlRSMl9UWF9ERVNDKGludGYtPmNoYW5uZWwpKSB7CisJCWlmIChsaWtlbHkobmFwaV9zY2hl ZHVsZV9wcmVwKCZpbnRmLT50eF9uYXBpKSkpIHsKKwkJCWJjbWFzcF9lbmFibGVfdHhfaXJxKGlu dGYsIDApOworCQkJX19uYXBpX3NjaGVkdWxlX2lycW9mZigmaW50Zi0+dHhfbmFwaSk7CisJCX0K Kwl9Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBiY21hc3BfaXNyKGludCBpcnEsIHZvaWQgKmRh dGEpCit7CisJc3RydWN0IGJjbWFzcF9wcml2ICpwcml2ID0zRCBkYXRhOworCXN0cnVjdCBiY21h c3BfaW50ZiAqaW50ZjsKKwl1MzIgc3RhdHVzOworCWludCBpOworCisJc3RhdHVzID0zRCBpbnRy Ml9jb3JlX3JsKHByaXYsIEFTUF9JTlRSMl9TVEFUVVMpICYKKwkJfmludHIyX2NvcmVfcmwocHJp diwgQVNQX0lOVFIyX01BU0tfU1RBVFVTKTsKKworCWludHIyX2NvcmVfd2wocHJpdiwgc3RhdHVz LCBBU1BfSU5UUjJfQ0xFQVIpOworCisJaWYgKHVubGlrZWx5KHN0YXR1cyA9M0Q9M0QgMCkpIHsK KwkJZGV2X3dhcm4oJnByaXYtPnBkZXYtPmRldiwgImwyIHNwdXJpb3VzIGludGVycnVwdFxuIik7 CisJCXJldHVybiBJUlFfTk9ORTsKKwl9CisKKwkvKiBIYW5kbGUgaW50ZmVyZmFjZXMgKi8KKwlm b3IgKGkgPTNEIDA7IGkgPCBwcml2LT5pbnRmX2NvdW50OyBpKyspIHsKKwkJaW50ZiA9M0QgcHJp di0+aW50ZnNbaV07CisJCWJjbWFzcF9pbnRyMl9oYW5kbGluZyhpbnRmLCBzdGF0dXMpOworCX0K KworCXJldHVybiBJUlFfSEFORExFRDsKK30KKwordm9pZCBiY21hc3BfZmx1c2hfcnhfcG9ydChz dHJ1Y3QgYmNtYXNwX2ludGYgKmludGYpCit7CisJc3RydWN0IGJjbWFzcF9wcml2ICpwcml2ID0z RCBpbnRmLT5wYXJlbnQ7CisJdTMyIG1hc2s7CisKKwlzd2l0Y2ggKGludGYtPnBvcnQpIHsKKwlj YXNlIDA6CisJCW1hc2sgPTNEIEFTUF9DVFJMX1VNQUMwX0ZMVVNIX01BU0s7CisJCWJyZWFrOwor CWNhc2UgMToKKwkJbWFzayA9M0QgQVNQX0NUUkxfVU1BQzFfRkxVU0hfTUFTSzsKKwkJYnJlYWs7 CisJY2FzZSAyOgorCQltYXNrID0zRCBBU1BfQ1RSTF9TUEJfRkxVU0hfTUFTSzsKKwkJYnJlYWs7 CisJZGVmYXVsdDoKKwkJLyogTm90IHZhbGlkIHBvcnQgKi8KKwkJcmV0dXJuOworCX0KKworCXJ4 X2N0cmxfY29yZV93bChwcml2LCBtYXNrLCBwcml2LT5od19pbmZvLT5yeF9jdHJsX2ZsdXNoKTsK K30KKworc3RhdGljIHZvaWQgYmNtYXNwX25ldGZpbHRfaHdfZW5fd2FrZShzdHJ1Y3QgYmNtYXNw X3ByaXYgKnByaXYsCisJCQkJICAgICAgc3RydWN0IGJjbWFzcF9uZXRfZmlsdGVyICpuZmlsdCkK K3sKKwlyeF9maWx0ZXJfY29yZV93bChwcml2LCBBU1BfUlhfRklMVEVSX05FVF9PRkZTRVRfTDNf MSg2NCksCisJCQkgIEFTUF9SWF9GSUxURVJfTkVUX09GRlNFVChuZmlsdC0+aHdfaW5kZXgpKTsK KworCXJ4X2ZpbHRlcl9jb3JlX3dsKHByaXYsIEFTUF9SWF9GSUxURVJfTkVUX09GRlNFVF9MMigz MikgfAorCQkJICBBU1BfUlhfRklMVEVSX05FVF9PRkZTRVRfTDNfMCgzMikgfAorCQkJICBBU1Bf UlhfRklMVEVSX05FVF9PRkZTRVRfTDNfMSg5NikgfAorCQkJICBBU1BfUlhfRklMVEVSX05FVF9P RkZTRVRfTDQoMzIpLAorCQkJICBBU1BfUlhfRklMVEVSX05FVF9PRkZTRVQobmZpbHQtPmh3X2lu ZGV4ICsgMSkpOworCisJcnhfZmlsdGVyX2NvcmVfd2wocHJpdiwgQVNQX1JYX0ZJTFRFUl9ORVRf Q0ZHX0NIKG5maWx0LT5wb3J0ICsgOCkgfAorCQkJICBBU1BfUlhfRklMVEVSX05FVF9DRkdfRU4g fAorCQkJICBBU1BfUlhfRklMVEVSX05FVF9DRkdfTDJfRU4gfAorCQkJICBBU1BfUlhfRklMVEVS X05FVF9DRkdfTDNfRU4gfAorCQkJICBBU1BfUlhfRklMVEVSX05FVF9DRkdfTDRfRU4gfAorCQkJ ICBBU1BfUlhfRklMVEVSX05FVF9DRkdfTDNfRlJNKDIpIHwKKwkJCSAgQVNQX1JYX0ZJTFRFUl9O RVRfQ0ZHX0w0X0ZSTSgyKSB8CisJCQkgIEFTUF9SWF9GSUxURVJfTkVUX0NGR19VTUMobmZpbHQt PnBvcnQpLAorCQkJICBBU1BfUlhfRklMVEVSX05FVF9DRkcobmZpbHQtPmh3X2luZGV4KSk7CisK KwlyeF9maWx0ZXJfY29yZV93bChwcml2LCBBU1BfUlhfRklMVEVSX05FVF9DRkdfQ0gobmZpbHQt PnBvcnQgKyA4KSB8CisJCQkgIEFTUF9SWF9GSUxURVJfTkVUX0NGR19FTiB8CisJCQkgIEFTUF9S WF9GSUxURVJfTkVUX0NGR19MMl9FTiB8CisJCQkgIEFTUF9SWF9GSUxURVJfTkVUX0NGR19MM19F TiB8CisJCQkgIEFTUF9SWF9GSUxURVJfTkVUX0NGR19MNF9FTiB8CisJCQkgIEFTUF9SWF9GSUxU RVJfTkVUX0NGR19MM19GUk0oMikgfAorCQkJICBBU1BfUlhfRklMVEVSX05FVF9DRkdfTDRfRlJN KDIpIHwKKwkJCSAgQVNQX1JYX0ZJTFRFUl9ORVRfQ0ZHX1VNQyhuZmlsdC0+cG9ydCksCisJCQkg IEFTUF9SWF9GSUxURVJfTkVUX0NGRyhuZmlsdC0+aHdfaW5kZXggKyAxKSk7Cit9CisKKyNkZWZp bmUgTUFYX1dBS0VfRklMVEVSX1NJWkUJCTI1NgorZW51bSBhc3BfbmV0ZmlsdF9yZWdfdHlwZSB7 CisJQVNQX05FVEZJTFRfTUFUQ0ggPTNEIDAsCisJQVNQX05FVEZJTFRfTUFTSywKKwlBU1BfTkVU RklMVF9NQVgKK307CisKK3N0YXRpYyBpbnQgYmNtYXNwX25ldGZpbHRfZ2V0X3JlZ19vZmZzZXQo c3RydWN0IGJjbWFzcF9wcml2ICpwcml2LAorCQkJCQkgc3RydWN0IGJjbWFzcF9uZXRfZmlsdGVy ICpuZmlsdCwKKwkJCQkJIGVudW0gYXNwX25ldGZpbHRfcmVnX3R5cGUgcmVnX3R5cGUsCisJCQkJ CSB1MzIgb2Zmc2V0KQoreworCXUzMiBibG9ja19pbmRleCwgZmlsdGVyX3NlbDsKKworCWlmIChv ZmZzZXQgPCAzMikgeworCQlibG9ja19pbmRleCA9M0QgQVNQX1JYX0ZJTFRFUl9ORVRfTDI7CisJ CWZpbHRlcl9zZWwgPTNEIG5maWx0LT5od19pbmRleDsKKwl9IGVsc2UgaWYgKG9mZnNldCA8IDY0 KSB7CisJCWJsb2NrX2luZGV4ID0zRCBBU1BfUlhfRklMVEVSX05FVF9MMjsKKwkJZmlsdGVyX3Nl bCA9M0QgbmZpbHQtPmh3X2luZGV4ICsgMTsKKwl9IGVsc2UgaWYgKG9mZnNldCA8IDk2KSB7CisJ CWJsb2NrX2luZGV4ID0zRCBBU1BfUlhfRklMVEVSX05FVF9MM18wOworCQlmaWx0ZXJfc2VsID0z RCBuZmlsdC0+aHdfaW5kZXg7CisJfSBlbHNlIGlmIChvZmZzZXQgPCAxMjgpIHsKKwkJYmxvY2tf aW5kZXggPTNEIEFTUF9SWF9GSUxURVJfTkVUX0wzXzA7CisJCWZpbHRlcl9zZWwgPTNEIG5maWx0 LT5od19pbmRleCArIDE7CisJfSBlbHNlIGlmIChvZmZzZXQgPCAxNjApIHsKKwkJYmxvY2tfaW5k ZXggPTNEIEFTUF9SWF9GSUxURVJfTkVUX0wzXzE7CisJCWZpbHRlcl9zZWwgPTNEIG5maWx0LT5o d19pbmRleDsKKwl9IGVsc2UgaWYgKG9mZnNldCA8IDE5MikgeworCQlibG9ja19pbmRleCA9M0Qg QVNQX1JYX0ZJTFRFUl9ORVRfTDNfMTsKKwkJZmlsdGVyX3NlbCA9M0QgbmZpbHQtPmh3X2luZGV4 ICsgMTsKKwl9IGVsc2UgaWYgKG9mZnNldCA8IDIyNCkgeworCQlibG9ja19pbmRleCA9M0QgQVNQ X1JYX0ZJTFRFUl9ORVRfTDQ7CisJCWZpbHRlcl9zZWwgPTNEIG5maWx0LT5od19pbmRleDsKKwl9 IGVsc2UgaWYgKG9mZnNldCA8IDI1NikgeworCQlibG9ja19pbmRleCA9M0QgQVNQX1JYX0ZJTFRF Ul9ORVRfTDQ7CisJCWZpbHRlcl9zZWwgPTNEIG5maWx0LT5od19pbmRleCArIDE7CisJfSBlbHNl IHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3dpdGNoIChyZWdfdHlwZSkgeworCWNhc2Ug QVNQX05FVEZJTFRfTUFUQ0g6CisJCXJldHVybiBBU1BfUlhfRklMVEVSX05FVF9QQVQoZmlsdGVy X3NlbCwgYmxvY2tfaW5kZXgsCisJCQkJCSAgICAgKG9mZnNldCAlIDMyKSk7CisJY2FzZSBBU1Bf TkVURklMVF9NQVNLOgorCQlyZXR1cm4gQVNQX1JYX0ZJTFRFUl9ORVRfTUFTSyhmaWx0ZXJfc2Vs LCBibG9ja19pbmRleCwKKwkJCQkJICAgICAgKG9mZnNldCAlIDMyKSk7CisJZGVmYXVsdDoKKwkJ cmV0dXJuIC1FSU5WQUw7CisJfQorfQorCitzdGF0aWMgdm9pZCBiY21hc3BfbmV0ZmlsdF93cihz dHJ1Y3QgYmNtYXNwX3ByaXYgKnByaXYsCisJCQkgICAgICBzdHJ1Y3QgYmNtYXNwX25ldF9maWx0 ZXIgKm5maWx0LAorCQkJICAgICAgZW51bSBhc3BfbmV0ZmlsdF9yZWdfdHlwZSByZWdfdHlwZSwK KwkJCSAgICAgIHUzMiB2YWwsIHUzMiBvZmZzZXQpCit7CisJaW50IHJlZ19vZmZzZXQ7CisKKwkv KiBIVyBvbmx5IGFjY2VwdHMgNCBieXRlIGFsaWduZWQgd3JpdGVzICovCisJaWYgKCFJU19BTElH TkVEKG9mZnNldCwgNCkgfHwgb2Zmc2V0ID4gTUFYX1dBS0VfRklMVEVSX1NJWkUpCisJCXJldHVy bjsKKworCXJlZ19vZmZzZXQgPTNEIGJjbWFzcF9uZXRmaWx0X2dldF9yZWdfb2Zmc2V0KHByaXYs IG5maWx0LCByZWdfdHlwZSwKKwkJCQkJCSAgIG9mZnNldCk7CisKKwlyeF9maWx0ZXJfY29yZV93 bChwcml2LCB2YWwsIHJlZ19vZmZzZXQpOworfQorCitzdGF0aWMgdTMyIGJjbWFzcF9uZXRmaWx0 X3JkKHN0cnVjdCBiY21hc3BfcHJpdiAqcHJpdiwKKwkJCSAgICAgc3RydWN0IGJjbWFzcF9uZXRf ZmlsdGVyICpuZmlsdCwKKwkJCSAgICAgZW51bSBhc3BfbmV0ZmlsdF9yZWdfdHlwZSByZWdfdHlw ZSwKKwkJCSAgICAgdTMyIG9mZnNldCkKK3sKKwlpbnQgcmVnX29mZnNldDsKKworCS8qIEhXIG9u bHkgYWNjZXB0cyA0IGJ5dGUgYWxpZ25lZCB3cml0ZXMgKi8KKwlpZiAoIUlTX0FMSUdORUQob2Zm c2V0LCA0KSB8fCBvZmZzZXQgPiBNQVhfV0FLRV9GSUxURVJfU0laRSkKKwkJcmV0dXJuIDA7CisK KwlyZWdfb2Zmc2V0ID0zRCBiY21hc3BfbmV0ZmlsdF9nZXRfcmVnX29mZnNldChwcml2LCBuZmls dCwgcmVnX3R5cGUsCisJCQkJCQkgICBvZmZzZXQpOworCisJcmV0dXJuIHJ4X2ZpbHRlcl9jb3Jl X3JsKHByaXYsIHJlZ19vZmZzZXQpOworfQorCitzdGF0aWMgaW50IGJjbWFzcF9uZXRmaWx0X3dy X21fd2FrZShzdHJ1Y3QgYmNtYXNwX3ByaXYgKnByaXYsCisJCQkJICAgIHN0cnVjdCBiY21hc3Bf bmV0X2ZpbHRlciAqbmZpbHQsCisJCQkJICAgIHUzMiBvZmZzZXQsIHZvaWQgKm1hdGNoLCB2b2lk ICptYXNrLAorCQkJCSAgICBzaXplX3Qgc2l6ZSkKK3sKKwl1MzIgc2hpZnQsIG1hc2tfdmFsID0z RCAwLCBtYXRjaF92YWwgPTNEIDA7CisJYm9vbCBmaXJzdF9ieXRlID0zRCB0cnVlOworCisJaWYg KChvZmZzZXQgKyBzaXplKSA+IE1BWF9XQUtFX0ZJTFRFUl9TSVpFKQorCQlyZXR1cm4gLUVJTlZB TDsKKworCXdoaWxlIChzaXplLS0pIHsKKwkJLyogVGhlIEhXIG9ubHkgYWNjZXB0cyA0IGJ5dGUg YWxpZ25lZCB3cml0ZXMsIHNvIGlmIHdlCisJCSAqIGJlZ2luIHVuYWxpZ25lZCBvciBpZiByZW1h aW5pbmcgYnl0ZXMgbGVzcyB0aGFuIDQsCisJCSAqIHdlIG5lZWQgdG8gcmVhZCB0aGVuIHdyaXRl IHRvIGF2b2lkIGxvc2luZyBjdXJyZW50CisJCSAqIHJlZ2lzdGVyIHN0YXRlCisJCSAqLworCQlp ZiAoZmlyc3RfYnl0ZSAmJiAoIUlTX0FMSUdORUQob2Zmc2V0LCA0KSB8fCBzaXplIDwgMykpIHsK KwkJCW1hdGNoX3ZhbCA9M0QgYmNtYXNwX25ldGZpbHRfcmQocHJpdiwgbmZpbHQsCisJCQkJCQkg ICAgICBBU1BfTkVURklMVF9NQVRDSCwKKwkJCQkJCSAgICAgIEFMSUdOX0RPV04ob2Zmc2V0LCA0 KSk7CisJCQltYXNrX3ZhbCA9M0QgYmNtYXNwX25ldGZpbHRfcmQocHJpdiwgbmZpbHQsCisJCQkJ CQkgICAgIEFTUF9ORVRGSUxUX01BU0ssCisJCQkJCQkgICAgIEFMSUdOX0RPV04ob2Zmc2V0LCA0 KSk7CisJCX0KKworCQlzaGlmdCA9M0QgKDMgLSAob2Zmc2V0ICUgNCkpICogODsKKwkJbWF0Y2hf dmFsICY9M0QgfkdFTk1BU0soc2hpZnQgKyA3LCBzaGlmdCk7CisJCW1hc2tfdmFsICY9M0QgfkdF Tk1BU0soc2hpZnQgKyA3LCBzaGlmdCk7CisJCW1hdGNoX3ZhbCB8PTNEICh1MzIpKCooKHU4ICop bWF0Y2gpIDw8IHNoaWZ0KTsKKwkJbWFza192YWwgfD0zRCAodTMyKSgqKCh1OCAqKW1hc2spIDw8 IHNoaWZ0KTsKKworCQkvKiBJZiBsYXN0IGJ5dGUgb3IgbGFzdCBieXRlIG9mIHdvcmQsIHdyaXRl IHRvIHJlZyAqLworCQlpZiAoIXNpemUgfHwgKChvZmZzZXQgJSA0KSA9M0Q9M0QgMykpIHsKKwkJ CWJjbWFzcF9uZXRmaWx0X3dyKHByaXYsIG5maWx0LCBBU1BfTkVURklMVF9NQVRDSCwKKwkJCQkJ ICBtYXRjaF92YWwsIEFMSUdOX0RPV04ob2Zmc2V0LCA0KSk7CisJCQliY21hc3BfbmV0ZmlsdF93 cihwcml2LCBuZmlsdCwgQVNQX05FVEZJTFRfTUFTSywKKwkJCQkJICBtYXNrX3ZhbCwgQUxJR05f RE9XTihvZmZzZXQsIDQpKTsKKwkJCWZpcnN0X2J5dGUgPTNEIHRydWU7CisJCX0gZWxzZSB7CisJ CQlmaXJzdF9ieXRlID0zRCBmYWxzZTsKKwkJfQorCisJCW9mZnNldCsrOworCQltYXRjaCsrOwor CQltYXNrKys7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGJjbWFzcF9uZXRm aWx0X3Jlc2V0X2h3KHN0cnVjdCBiY21hc3BfcHJpdiAqcHJpdiwKKwkJCQkgICAgc3RydWN0IGJj bWFzcF9uZXRfZmlsdGVyICpuZmlsdCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9M0QgMDsgaSA8 IE1BWF9XQUtFX0ZJTFRFUl9TSVpFOyBpICs9M0QgNCkgeworCQliY21hc3BfbmV0ZmlsdF93cihw cml2LCBuZmlsdCwgQVNQX05FVEZJTFRfTUFUQ0gsIDAsIGkpOworCQliY21hc3BfbmV0ZmlsdF93 cihwcml2LCBuZmlsdCwgQVNQX05FVEZJTFRfTUFTSywgMCwgaSk7CisJfQorfQorCitzdGF0aWMg dm9pZCBiY21hc3BfbmV0ZmlsdF90Y3BpcDRfd3Ioc3RydWN0IGJjbWFzcF9wcml2ICpwcml2LAor CQkJCSAgICAgc3RydWN0IGJjbWFzcF9uZXRfZmlsdGVyICpuZmlsdCwKKwkJCQkgICAgIHN0cnVj dCBldGh0b29sX3RjcGlwNF9zcGVjICptYXRjaCwKKwkJCQkgICAgIHN0cnVjdCBldGh0b29sX3Rj cGlwNF9zcGVjICptYXNrLAorCQkJCSAgICAgdTMyIG9mZnNldCkKK3sKKwlfX2JlMTYgdmFsXzE2 LCBtYXNrXzE2OworCisJdmFsXzE2ID0zRCBodG9ucyhFVEhfUF9JUCk7CisJbWFza18xNiA9M0Qg aHRvbnMoMHhGRkZGKTsKKwliY21hc3BfbmV0ZmlsdF93cl9tX3dha2UocHJpdiwgbmZpbHQsIChF VEhfQUxFTiAqIDIpICsgb2Zmc2V0LAorCQkJCSAmdmFsXzE2LCAmbWFza18xNiwgc2l6ZW9mKHZh bF8xNikpOworCWJjbWFzcF9uZXRmaWx0X3dyX21fd2FrZShwcml2LCBuZmlsdCwgRVRIX0hMRU4g KyBvZmZzZXQgKyAxLAorCQkJCSAmbWF0Y2gtPnRvcywgJm1hc2stPnRvcywKKwkJCQkgc2l6ZW9m KG1hdGNoLT50b3MpKTsKKwliY21hc3BfbmV0ZmlsdF93cl9tX3dha2UocHJpdiwgbmZpbHQsIEVU SF9ITEVOICsgb2Zmc2V0ICsgMTIsCisJCQkJICZtYXRjaC0+aXA0c3JjLCAmbWFzay0+aXA0c3Jj LAorCQkJCSBzaXplb2YobWF0Y2gtPmlwNHNyYykpOworCWJjbWFzcF9uZXRmaWx0X3dyX21fd2Fr ZShwcml2LCBuZmlsdCwgRVRIX0hMRU4gKyBvZmZzZXQgKyAxNiwKKwkJCQkgJm1hdGNoLT5pcDRk c3QsICZtYXNrLT5pcDRkc3QsCisJCQkJIHNpemVvZihtYXRjaC0+aXA0ZHN0KSk7CisJYmNtYXNw X25ldGZpbHRfd3JfbV93YWtlKHByaXYsIG5maWx0LCBFVEhfSExFTiArIG9mZnNldCArIDIwLAor CQkJCSAmbWF0Y2gtPnBzcmMsICZtYXNrLT5wc3JjLAorCQkJCSBzaXplb2YobWF0Y2gtPnBzcmMp KTsKKwliY21hc3BfbmV0ZmlsdF93cl9tX3dha2UocHJpdiwgbmZpbHQsIEVUSF9ITEVOICsgb2Zm c2V0ICsgMjIsCisJCQkJICZtYXRjaC0+cGRzdCwgJm1hc2stPnBkc3QsCisJCQkJIHNpemVvZiht YXRjaC0+cGRzdCkpOworfQorCitzdGF0aWMgdm9pZCBiY21hc3BfbmV0ZmlsdF90Y3BpcDZfd3Io c3RydWN0IGJjbWFzcF9wcml2ICpwcml2LAorCQkJCSAgICAgc3RydWN0IGJjbWFzcF9uZXRfZmls dGVyICpuZmlsdCwKKwkJCQkgICAgIHN0cnVjdCBldGh0b29sX3RjcGlwNl9zcGVjICptYXRjaCwK KwkJCQkgICAgIHN0cnVjdCBldGh0b29sX3RjcGlwNl9zcGVjICptYXNrLAorCQkJCSAgICAgdTMy IG9mZnNldCkKK3sKKwlfX2JlMTYgdmFsXzE2LCBtYXNrXzE2OworCisJdmFsXzE2ID0zRCBodG9u cyhFVEhfUF9JUFY2KTsKKwltYXNrXzE2ID0zRCBodG9ucygweEZGRkYpOworCWJjbWFzcF9uZXRm aWx0X3dyX21fd2FrZShwcml2LCBuZmlsdCwgKEVUSF9BTEVOICogMikgKyBvZmZzZXQsCisJCQkJ ICZ2YWxfMTYsICZtYXNrXzE2LCBzaXplb2YodmFsXzE2KSk7CisJdmFsXzE2ID0zRCBodG9ucyht YXRjaC0+dGNsYXNzIDw8IDQpOworCW1hc2tfMTYgPTNEIGh0b25zKG1hc2stPnRjbGFzcyA8PCA0 KTsKKwliY21hc3BfbmV0ZmlsdF93cl9tX3dha2UocHJpdiwgbmZpbHQsIEVUSF9ITEVOICsgb2Zm c2V0LAorCQkJCSAmdmFsXzE2LCAmbWFza18xNiwgc2l6ZW9mKHZhbF8xNikpOworCWJjbWFzcF9u ZXRmaWx0X3dyX21fd2FrZShwcml2LCBuZmlsdCwgRVRIX0hMRU4gKyBvZmZzZXQgKyA4LAorCQkJ CSAmbWF0Y2gtPmlwNnNyYywgJm1hc2stPmlwNnNyYywKKwkJCQkgc2l6ZW9mKG1hdGNoLT5pcDZz cmMpKTsKKwliY21hc3BfbmV0ZmlsdF93cl9tX3dha2UocHJpdiwgbmZpbHQsIEVUSF9ITEVOICsg b2Zmc2V0ICsgMjQsCisJCQkJICZtYXRjaC0+aXA2ZHN0LCAmbWFzay0+aXA2ZHN0LAorCQkJCSBz aXplb2YobWF0Y2gtPmlwNmRzdCkpOworCWJjbWFzcF9uZXRmaWx0X3dyX21fd2FrZShwcml2LCBu ZmlsdCwgRVRIX0hMRU4gKyBvZmZzZXQgKyA0MCwKKwkJCQkgJm1hdGNoLT5wc3JjLCAmbWFzay0+ cHNyYywKKwkJCQkgc2l6ZW9mKG1hdGNoLT5wc3JjKSk7CisJYmNtYXNwX25ldGZpbHRfd3JfbV93 YWtlKHByaXYsIG5maWx0LCBFVEhfSExFTiArIG9mZnNldCArIDQyLAorCQkJCSAmbWF0Y2gtPnBk c3QsICZtYXNrLT5wZHN0LAorCQkJCSBzaXplb2YobWF0Y2gtPnBkc3QpKTsKK30KKworc3RhdGlj IGludCBiY21hc3BfbmV0ZmlsdF93cl90b19odyhzdHJ1Y3QgYmNtYXNwX3ByaXYgKnByaXYsCisJ CQkJICAgc3RydWN0IGJjbWFzcF9uZXRfZmlsdGVyICpuZmlsdCkKK3sKKwlzdHJ1Y3QgZXRodG9v bF9yeF9mbG93X3NwZWMgKmZzID0zRCAmbmZpbHQtPmZzOworCXVuc2lnbmVkIGludCBvZmZzZXQg PTNEIDA7CisJX19iZTE2IHZhbF8xNiwgbWFza18xNjsKKwl1OCB2YWxfOCwgbWFza184OworCisJ LyogQ3VycmVudGx5IG9ubHkgc3VwcG9ydHMgd2FrZSBmaWx0ZXJzICovCisJaWYgKCFuZmlsdC0+ d2FrZV9maWx0ZXIpCisJCXJldHVybiAtRUlOVkFMOworCisJYmNtYXNwX25ldGZpbHRfcmVzZXRf aHcocHJpdiwgbmZpbHQpOworCisJaWYgKGZzLT5mbG93X3R5cGUgJiBGTE9XX01BQ19FWFQpIHsK KwkJYmNtYXNwX25ldGZpbHRfd3JfbV93YWtlKHByaXYsIG5maWx0LCAwLCAmZnMtPmhfZXh0Lmhf ZGVzdCwKKwkJCQkJICZmcy0+bV9leHQuaF9kZXN0LAorCQkJCQkgc2l6ZW9mKGZzLT5oX2V4dC5o X2Rlc3QpKTsKKwl9CisKKwlpZiAoKGZzLT5mbG93X3R5cGUgJiBGTE9XX0VYVCkgJiYKKwkgICAg KGZzLT5tX2V4dC52bGFuX2V0eXBlIHx8IGZzLT5tX2V4dC52bGFuX3RjaSkpIHsKKwkJYmNtYXNw X25ldGZpbHRfd3JfbV93YWtlKHByaXYsIG5maWx0LCAoRVRIX0FMRU4gKiAyKSwKKwkJCQkJICZm cy0+aF9leHQudmxhbl9ldHlwZSwKKwkJCQkJICZmcy0+bV9leHQudmxhbl9ldHlwZSwKKwkJCQkJ IHNpemVvZihmcy0+aF9leHQudmxhbl9ldHlwZSkpOworCQliY21hc3BfbmV0ZmlsdF93cl9tX3dh a2UocHJpdiwgbmZpbHQsICgoRVRIX0FMRU4gKiAyKSArIDIpLAorCQkJCQkgJmZzLT5oX2V4dC52 bGFuX3RjaSwKKwkJCQkJICZmcy0+bV9leHQudmxhbl90Y2ksCisJCQkJCSBzaXplb2YoZnMtPmhf ZXh0LnZsYW5fdGNpKSk7CisJCW9mZnNldCArPTNEIFZMQU5fSExFTjsKKwl9CisKKwlzd2l0Y2gg KGZzLT5mbG93X3R5cGUgJiB+KEZMT1dfRVhUIHwgRkxPV19NQUNfRVhUKSkgeworCWNhc2UgRVRI RVJfRkxPVzoKKwkJYmNtYXNwX25ldGZpbHRfd3JfbV93YWtlKHByaXYsIG5maWx0LCAwLAorCQkJ CQkgJmZzLT5oX3UuZXRoZXJfc3BlYy5oX2Rlc3QsCisJCQkJCSAmZnMtPm1fdS5ldGhlcl9zcGVj LmhfZGVzdCwKKwkJCQkJIHNpemVvZihmcy0+aF91LmV0aGVyX3NwZWMuaF9kZXN0KSk7CisJCWJj bWFzcF9uZXRmaWx0X3dyX21fd2FrZShwcml2LCBuZmlsdCwgRVRIX0FMRU4sCisJCQkJCSAmZnMt PmhfdS5ldGhlcl9zcGVjLmhfc291cmNlLAorCQkJCQkgJmZzLT5tX3UuZXRoZXJfc3BlYy5oX3Nv dXJjZSwKKwkJCQkJIHNpemVvZihmcy0+aF91LmV0aGVyX3NwZWMuaF9zb3VyY2UpKTsKKwkJYmNt YXNwX25ldGZpbHRfd3JfbV93YWtlKHByaXYsIG5maWx0LCAoRVRIX0FMRU4gKiAyKSArIG9mZnNl dCwKKwkJCQkJICZmcy0+aF91LmV0aGVyX3NwZWMuaF9wcm90bywKKwkJCQkJICZmcy0+bV91LmV0 aGVyX3NwZWMuaF9wcm90bywKKwkJCQkJIHNpemVvZihmcy0+aF91LmV0aGVyX3NwZWMuaF9wcm90 bykpOworCisJCWJyZWFrOworCWNhc2UgSVBfVVNFUl9GTE9XOgorCQl2YWxfMTYgPTNEIGh0b25z KEVUSF9QX0lQKTsKKwkJbWFza18xNiA9M0QgaHRvbnMoMHhGRkZGKTsKKwkJYmNtYXNwX25ldGZp bHRfd3JfbV93YWtlKHByaXYsIG5maWx0LCAoRVRIX0FMRU4gKiAyKSArIG9mZnNldCwKKwkJCQkJ ICZ2YWxfMTYsICZtYXNrXzE2LCBzaXplb2YodmFsXzE2KSk7CisJCWJjbWFzcF9uZXRmaWx0X3dy X21fd2FrZShwcml2LCBuZmlsdCwgRVRIX0hMRU4gKyBvZmZzZXQgKyAxLAorCQkJCQkgJmZzLT5o X3UudXNyX2lwNF9zcGVjLnRvcywKKwkJCQkJICZmcy0+bV91LnVzcl9pcDRfc3BlYy50b3MsCisJ CQkJCSBzaXplb2YoZnMtPmhfdS51c3JfaXA0X3NwZWMudG9zKSk7CisJCWJjbWFzcF9uZXRmaWx0 X3dyX21fd2FrZShwcml2LCBuZmlsdCwgRVRIX0hMRU4gKyBvZmZzZXQgKyA5LAorCQkJCQkgJmZz LT5oX3UudXNyX2lwNF9zcGVjLnByb3RvLAorCQkJCQkgJmZzLT5tX3UudXNyX2lwNF9zcGVjLnBy b3RvLAorCQkJCQkgc2l6ZW9mKGZzLT5oX3UudXNyX2lwNF9zcGVjLnByb3RvKSk7CisJCWJjbWFz cF9uZXRmaWx0X3dyX21fd2FrZShwcml2LCBuZmlsdCwgRVRIX0hMRU4gKyBvZmZzZXQgKyAxMiwK KwkJCQkJICZmcy0+aF91LnVzcl9pcDRfc3BlYy5pcDRzcmMsCisJCQkJCSAmZnMtPm1fdS51c3Jf aXA0X3NwZWMuaXA0c3JjLAorCQkJCQkgc2l6ZW9mKGZzLT5oX3UudXNyX2lwNF9zcGVjLmlwNHNy YykpOworCQliY21hc3BfbmV0ZmlsdF93cl9tX3dha2UocHJpdiwgbmZpbHQsIEVUSF9ITEVOICsg b2Zmc2V0ICsgMTYsCisJCQkJCSAmZnMtPmhfdS51c3JfaXA0X3NwZWMuaXA0ZHN0LAorCQkJCQkg JmZzLT5tX3UudXNyX2lwNF9zcGVjLmlwNGRzdCwKKwkJCQkJIHNpemVvZihmcy0+aF91LnVzcl9p cDRfc3BlYy5pcDRkc3QpKTsKKwkJaWYgKCFmcy0+bV91LnVzcl9pcDRfc3BlYy5sNF80X2J5dGVz KQorCQkJYnJlYWs7CisKKwkJLyogT25seSBzdXBwb3J0cyAyMCBieXRlIElQdjQgaGVhZGVyICov CisJCXZhbF84ID0zRCAweDQ1OworCQltYXNrXzggPTNEIDB4RkY7CisJCWJjbWFzcF9uZXRmaWx0 X3dyX21fd2FrZShwcml2LCBuZmlsdCwgRVRIX0hMRU4gKyBvZmZzZXQsCisJCQkJCSAmdmFsXzgs ICZtYXNrXzgsIHNpemVvZih2YWxfOCkpOworCQliY21hc3BfbmV0ZmlsdF93cl9tX3dha2UocHJp diwgbmZpbHQsCisJCQkJCSBFVEhfSExFTiArIDIwICsgb2Zmc2V0LAorCQkJCQkgJmZzLT5oX3Uu dXNyX2lwNF9zcGVjLmw0XzRfYnl0ZXMsCisJCQkJCSAmZnMtPm1fdS51c3JfaXA0X3NwZWMubDRf NF9ieXRlcywKKwkJCQkJIHNpemVvZihmcy0+aF91LnVzcl9pcDRfc3BlYy5sNF80X2J5dGVzKQor CQkJCQkgKTsKKwkJYnJlYWs7CisJY2FzZSBUQ1BfVjRfRkxPVzoKKwkJdmFsXzggPTNEIElQUFJP VE9fVENQOworCQltYXNrXzggPTNEIDB4RkY7CisJCWJjbWFzcF9uZXRmaWx0X3RjcGlwNF93cihw cml2LCBuZmlsdCwgJmZzLT5oX3UudGNwX2lwNF9zcGVjLAorCQkJCQkgJmZzLT5tX3UudGNwX2lw NF9zcGVjLCBvZmZzZXQpOworCQliY21hc3BfbmV0ZmlsdF93cl9tX3dha2UocHJpdiwgbmZpbHQs IEVUSF9ITEVOICsgb2Zmc2V0ICsgOSwKKwkJCQkJICZ2YWxfOCwgJm1hc2tfOCwgc2l6ZW9mKHZh bF84KSk7CisJCWJyZWFrOworCWNhc2UgVURQX1Y0X0ZMT1c6CisJCXZhbF84ID0zRCBJUFBST1RP X1VEUDsKKwkJbWFza184ID0zRCAweEZGOworCQliY21hc3BfbmV0ZmlsdF90Y3BpcDRfd3IocHJp diwgbmZpbHQsICZmcy0+aF91LnVkcF9pcDRfc3BlYywKKwkJCQkJICZmcy0+bV91LnVkcF9pcDRf c3BlYywgb2Zmc2V0KTsKKworCQliY21hc3BfbmV0ZmlsdF93cl9tX3dha2UocHJpdiwgbmZpbHQs IEVUSF9ITEVOICsgb2Zmc2V0ICsgOSwKKwkJCQkJICZ2YWxfOCwgJm1hc2tfOCwgc2l6ZW9mKHZh bF84KSk7CisJCWJyZWFrOworCWNhc2UgVENQX1Y2X0ZMT1c6CisJCXZhbF84ID0zRCBJUFBST1RP X1RDUDsKKwkJbWFza184ID0zRCAweEZGOworCQliY21hc3BfbmV0ZmlsdF90Y3BpcDZfd3IocHJp diwgbmZpbHQsICZmcy0+aF91LnRjcF9pcDZfc3BlYywKKwkJCQkJICZmcy0+bV91LnRjcF9pcDZf c3BlYywgb2Zmc2V0KTsKKwkJYmNtYXNwX25ldGZpbHRfd3JfbV93YWtlKHByaXYsIG5maWx0LCBF VEhfSExFTiArIG9mZnNldCArIDYsCisJCQkJCSAmdmFsXzgsICZtYXNrXzgsIHNpemVvZih2YWxf OCkpOworCQlicmVhazsKKwljYXNlIFVEUF9WNl9GTE9XOgorCQl2YWxfOCA9M0QgSVBQUk9UT19V RFA7CisJCW1hc2tfOCA9M0QgMHhGRjsKKwkJYmNtYXNwX25ldGZpbHRfdGNwaXA2X3dyKHByaXYs IG5maWx0LCAmZnMtPmhfdS51ZHBfaXA2X3NwZWMsCisJCQkJCSAmZnMtPm1fdS51ZHBfaXA2X3Nw ZWMsIG9mZnNldCk7CisJCWJjbWFzcF9uZXRmaWx0X3dyX21fd2FrZShwcml2LCBuZmlsdCwgRVRI X0hMRU4gKyBvZmZzZXQgKyA2LAorCQkJCQkgJnZhbF84LCAmbWFza184LCBzaXplb2YodmFsXzgp KTsKKwkJYnJlYWs7CisJfQorCisJYmNtYXNwX25ldGZpbHRfaHdfZW5fd2FrZShwcml2LCBuZmls dCk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBiY21hc3BfbmV0ZmlsdF9zdXNwZW5kKHN0cnVj dCBiY21hc3BfaW50ZiAqaW50ZikKK3sKKwlzdHJ1Y3QgYmNtYXNwX3ByaXYgKnByaXYgPTNEIGlu dGYtPnBhcmVudDsKKwlib29sIHdyaXRlID0zRCBmYWxzZTsKKwlpbnQgcmV0LCBpOworCisJLyog V3JpdGUgYWxsIGZpbHRlcnMgdG8gSFcgKi8KKwlmb3IgKGkgPTNEIDA7IGkgPCBOVU1fTkVUX0ZJ TFRFUlM7IGkrKykgeworCQkvKiBJZiB0aGUgZmlsdGVyIGRvZXMgbm90IG1hdGNoIHRoZSBwb3J0 LCBza2lwIHByb2dyYW1taW5nLiAqLworCQlpZiAoIXByaXYtPm5ldF9maWx0ZXJzW2ldLmNsYWlt ZWQgfHwKKwkJICAgIHByaXYtPm5ldF9maWx0ZXJzW2ldLnBvcnQgIT0zRCBpbnRmLT5wb3J0KQor CQkJY29udGludWU7CisKKwkJaWYgKGkgPiAwICYmIChpICUgMikgJiYKKwkJICAgIHByaXYtPm5l dF9maWx0ZXJzW2ldLndha2VfZmlsdGVyICYmCisJCSAgICBwcml2LT5uZXRfZmlsdGVyc1tpIC0g MV0ud2FrZV9maWx0ZXIpCisJCQljb250aW51ZTsKKworCQlyZXQgPTNEIGJjbWFzcF9uZXRmaWx0 X3dyX3RvX2h3KHByaXYsICZwcml2LT5uZXRfZmlsdGVyc1tpXSk7CisJCWlmICghcmV0KQorCQkJ d3JpdGUgPTNEIHRydWU7CisJfQorCisJLyogU3VjY2Vzc2Z1bGx5IHByb2dyYW1tZWQgYXQgbGVh c3Qgb25lIHdha2UgZmlsdGVyCisJICogc28gZW5hYmxlIHRvcCBsZXZlbCB3YWtlIGNvbmZpZwor CSAqLworCWlmICh3cml0ZSkKKwkJcnhfZmlsdGVyX2NvcmVfd2wocHJpdiwgKEFTUF9SWF9GSUxU RVJfT1BVVF9FTiB8CisJCQkJICBBU1BfUlhfRklMVEVSX0xOUl9NRCB8CisJCQkJICBBU1BfUlhf RklMVEVSX0dFTl9XS19FTiB8CisJCQkJICBBU1BfUlhfRklMVEVSX05UX0ZMVF9FTiksCisJCQkJ ICBBU1BfUlhfRklMVEVSX0JMS19DVFJMKTsKK30KKwordm9pZCBiY21hc3BfbmV0ZmlsdF9nZXRf YWxsX2FjdGl2ZShzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsIHUzMiAqcnVsZV9sb2M9CnMsCisJ CQkJICAgdTMyICpydWxlX2NudCkKK3sKKwlzdHJ1Y3QgYmNtYXNwX3ByaXYgKnByaXYgPTNEIGlu dGYtPnBhcmVudDsKKwlpbnQgaiA9M0QgMCwgaTsKKworCWZvciAoaSA9M0QgMDsgaSA8IE5VTV9O RVRfRklMVEVSUzsgaSsrKSB7CisJCWlmICghcHJpdi0+bmV0X2ZpbHRlcnNbaV0uY2xhaW1lZCB8 fAorCQkgICAgcHJpdi0+bmV0X2ZpbHRlcnNbaV0ucG9ydCAhPTNEIGludGYtPnBvcnQpCisJCQlj b250aW51ZTsKKworCQlpZiAoaSA+IDAgJiYgKGkgJSAyKSAmJgorCQkgICAgcHJpdi0+bmV0X2Zp bHRlcnNbaV0ud2FrZV9maWx0ZXIgJiYKKwkJICAgIHByaXYtPm5ldF9maWx0ZXJzW2kgLSAxXS53 YWtlX2ZpbHRlcikKKwkJCWNvbnRpbnVlOworCisJCXJ1bGVfbG9jc1tqKytdID0zRCBwcml2LT5u ZXRfZmlsdGVyc1tpXS5mcy5sb2NhdGlvbjsKKwl9CisKKwkqcnVsZV9jbnQgPTNEIGo7Cit9CisK K2ludCBiY21hc3BfbmV0ZmlsdF9nZXRfYWN0aXZlKHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZikK K3sKKwlzdHJ1Y3QgYmNtYXNwX3ByaXYgKnByaXYgPTNEIGludGYtPnBhcmVudDsKKwlpbnQgY250 ID0zRCAwLCBpOworCisJZm9yIChpID0zRCAwOyBpIDwgTlVNX05FVF9GSUxURVJTOyBpKyspIHsK KwkJaWYgKCFwcml2LT5uZXRfZmlsdGVyc1tpXS5jbGFpbWVkIHx8CisJCSAgICBwcml2LT5uZXRf ZmlsdGVyc1tpXS5wb3J0ICE9M0QgaW50Zi0+cG9ydCkKKwkJCWNvbnRpbnVlOworCisJCS8qIFNr aXAgb3ZlciBhIHdha2UgZmlsdGVyIHBhaXIgKi8KKwkJaWYgKGkgPiAwICYmIChpICUgMikgJiYK KwkJICAgIHByaXYtPm5ldF9maWx0ZXJzW2ldLndha2VfZmlsdGVyICYmCisJCSAgICBwcml2LT5u ZXRfZmlsdGVyc1tpIC0gMV0ud2FrZV9maWx0ZXIpCisJCQljb250aW51ZTsKKworCQljbnQrKzsK Kwl9CisKKwlyZXR1cm4gY250OworfQorCitib29sIGJjbWFzcF9uZXRmaWx0X2NoZWNrX2R1cChz dHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsCisJCQkgICAgICBzdHJ1Y3QgZXRodG9vbF9yeF9mbG93 X3NwZWMgKmZzKQoreworCXN0cnVjdCBiY21hc3BfcHJpdiAqcHJpdiA9M0QgaW50Zi0+cGFyZW50 OworCXN0cnVjdCBldGh0b29sX3J4X2Zsb3dfc3BlYyAqY3VyOworCXNpemVfdCBmc19zaXplID0z RCAwOworCWludCBpOworCisJZm9yIChpID0zRCAwOyBpIDwgTlVNX05FVF9GSUxURVJTOyBpKysp IHsKKwkJaWYgKCFwcml2LT5uZXRfZmlsdGVyc1tpXS5jbGFpbWVkIHx8CisJCSAgICBwcml2LT5u ZXRfZmlsdGVyc1tpXS5wb3J0ICE9M0QgaW50Zi0+cG9ydCkKKwkJCWNvbnRpbnVlOworCisJCWN1 ciA9M0QgJnByaXYtPm5ldF9maWx0ZXJzW2ldLmZzOworCisJCWlmIChjdXItPmZsb3dfdHlwZSAh PTNEIGZzLT5mbG93X3R5cGUgfHwKKwkJICAgIGN1ci0+cmluZ19jb29raWUgIT0zRCBmcy0+cmlu Z19jb29raWUpCisJCQljb250aW51ZTsKKworCQlzd2l0Y2ggKGZzLT5mbG93X3R5cGUgJiB+KEZM T1dfRVhUIHwgRkxPV19NQUNfRVhUKSkgeworCQljYXNlIEVUSEVSX0ZMT1c6CisJCQlmc19zaXpl ID0zRCBzaXplb2Yoc3RydWN0IGV0aGhkcik7CisJCQlicmVhazsKKwkJY2FzZSBJUF9VU0VSX0ZM T1c6CisJCQlmc19zaXplID0zRCBzaXplb2Yoc3RydWN0IGV0aHRvb2xfdXNyaXA0X3NwZWMpOwor CQkJYnJlYWs7CisJCWNhc2UgVENQX1Y2X0ZMT1c6CisJCWNhc2UgVURQX1Y2X0ZMT1c6CisJCQlm c19zaXplID0zRCBzaXplb2Yoc3RydWN0IGV0aHRvb2xfdGNwaXA2X3NwZWMpOworCQkJYnJlYWs7 CisJCWNhc2UgVENQX1Y0X0ZMT1c6CisJCWNhc2UgVURQX1Y0X0ZMT1c6CisJCQlmc19zaXplID0z RCBzaXplb2Yoc3RydWN0IGV0aHRvb2xfdGNwaXA0X3NwZWMpOworCQkJYnJlYWs7CisJCWRlZmF1 bHQ6CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChtZW1jbXAoJmN1ci0+aF91LCAmZnMtPmhf dSwgZnNfc2l6ZSkgfHwKKwkJICAgIG1lbWNtcCgmY3VyLT5tX3UsICZmcy0+bV91LCBmc19zaXpl KSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChjdXItPmZsb3dfdHlwZSAmIEZMT1dfRVhUKSB7CisJ CQlpZiAoY3VyLT5oX2V4dC52bGFuX2V0eXBlICE9M0QgZnMtPmhfZXh0LnZsYW5fZXR5cGUgfHwK KwkJCSAgICBjdXItPm1fZXh0LnZsYW5fZXR5cGUgIT0zRCBmcy0+bV9leHQudmxhbl9ldHlwZSB8 fAorCQkJICAgIGN1ci0+aF9leHQudmxhbl90Y2kgIT0zRCBmcy0+aF9leHQudmxhbl90Y2kgfHwK KwkJCSAgICBjdXItPm1fZXh0LnZsYW5fdGNpICE9M0QgZnMtPm1fZXh0LnZsYW5fdGNpIHx8CisJ CQkgICAgY3VyLT5oX2V4dC5kYXRhWzBdICE9M0QgZnMtPmhfZXh0LmRhdGFbMF0pCisJCQkJY29u dGludWU7CisJCX0KKwkJaWYgKGN1ci0+Zmxvd190eXBlICYgRkxPV19NQUNfRVhUKSB7CisJCQlp ZiAobWVtY21wKCZjdXItPmhfZXh0LmhfZGVzdCwKKwkJCQkgICAmZnMtPmhfZXh0LmhfZGVzdCwg RVRIX0FMRU4pIHx8CisJCQkgICAgbWVtY21wKCZjdXItPm1fZXh0LmhfZGVzdCwKKwkJCQkgICAm ZnMtPm1fZXh0LmhfZGVzdCwgRVRIX0FMRU4pKQorCQkJCWNvbnRpbnVlOworCQl9CisKKwkJcmV0 dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisvKiBJZiBubyBuZXR3b3JrIGZp bHRlciBmb3VuZCwgcmV0dXJuIG9wZW4gZmlsdGVyLgorICogSWYgbm8gbW9yZSBvcGVuIGZpbHRl cnMgcmV0dXJuIE5VTEwKKyAqLworc3RydWN0IGJjbWFzcF9uZXRfZmlsdGVyICpiY21hc3BfbmV0 ZmlsdF9nZXRfaW5pdChzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsCisJCQkJCQkgIGludCBsb2Ms IGJvb2wgd2FrZV9maWx0ZXIsCisJCQkJCQkgIGJvb2wgaW5pdCkKK3sKKwlzdHJ1Y3QgYmNtYXNw X25ldF9maWx0ZXIgKm5maWx0ZXIgPTNEIE5VTEw7CisJc3RydWN0IGJjbWFzcF9wcml2ICpwcml2 ID0zRCBpbnRmLT5wYXJlbnQ7CisJaW50IGksIG9wZW5faW5kZXggPTNEIC0xOworCisJLyogQ2hl Y2sgd2hldGhlciB3ZSBleGNlZWQgdGhlIGZpbHRlciB0YWJsZSBjYXBhY2l0eSAqLworCWlmIChs b2MgIT0zRCBSWF9DTFNfTE9DX0FOWSAmJiBsb2MgPj0zRCBOVU1fTkVUX0ZJTFRFUlMpCisJCXJl dHVybiBFUlJfUFRSKC1FSU5WQUwpOworCisJLyogSWYgdGhlIGZpbHRlciBsb2NhdGlvbiBpcyBi dXN5IChhbHJlYWR5IGNsYWltZWQpIGFuZCB3ZSBhcmUgaW5pdGlhbGl6aT0KbmcKKwkgKiB0aGUg ZmlsdGVyIChpbnNlcnRpb24pLCByZXR1cm4gYSBidXN5IGVycm9yIGNvZGUuCisJICovCisJaWYg KGxvYyAhPTNEIFJYX0NMU19MT0NfQU5ZICYmIGluaXQgJiYgcHJpdi0+bmV0X2ZpbHRlcnNbbG9j XS5jbGFpbWVkKQorCQlyZXR1cm4gRVJSX1BUUigtRUJVU1kpOworCisJLyogV2UgbmVlZCB0d28g ZmlsdGVycyBmb3Igd2FrZS11cCwgc28gd2UgY2Fubm90IHVzZSBhbiBvZGQgZmlsdGVyICovCisJ aWYgKHdha2VfZmlsdGVyICYmIGxvYyAhPTNEIFJYX0NMU19MT0NfQU5ZICYmIChsb2MgJSAyKSkK KwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwkvKiBJbml0aWFsaXplIHRoZSBsb29wIGlu ZGV4IGJhc2VkIG9uIHRoZSBkZXNpcmVkIGxvY2F0aW9uIG9yIGZyb20gMCAqLworCWkgPTNEIGxv YyA9M0Q9M0QgUlhfQ0xTX0xPQ19BTlkgPyAwIDogbG9jOworCisJZm9yICggOyBpIDwgTlVNX05F VF9GSUxURVJTOyBpKyspIHsKKwkJLyogRm91bmQgbWF0Y2hpbmcgbmV0d29yayBmaWx0ZXIgKi8K KwkJaWYgKCFpbml0ICYmCisJCSAgICBwcml2LT5uZXRfZmlsdGVyc1tpXS5jbGFpbWVkICYmCisJ CSAgICBwcml2LT5uZXRfZmlsdGVyc1tpXS5od19pbmRleCA9M0Q9M0QgaSAmJgorCQkgICAgcHJp di0+bmV0X2ZpbHRlcnNbaV0ucG9ydCA9M0Q9M0QgaW50Zi0+cG9ydCkKKwkJCXJldHVybiAmcHJp di0+bmV0X2ZpbHRlcnNbaV07CisKKwkJLyogSWYgd2UgZG9uJ3QgbmVlZCBhIG5ldyBmaWx0ZXIg b3IgbmV3IGZpbHRlciBhbHJlYWR5IGZvdW5kICovCisJCWlmICghaW5pdCB8fCBvcGVuX2luZGV4 ID49M0QgMCkKKwkJCWNvbnRpbnVlOworCisJCS8qIFdha2UgZmlsdGVyIGNvbnNsaWRhdGVzIHR3 byBmaWx0ZXJzIHRvIGNvdmVyIG1vcmUgYnl0ZXMKKwkJICogV2FrZSBmaWx0ZXIgaXMgb3BlbiBp Zi4uLgorCQkgKiAxLiBJdCBpcyBhbiBldmVuIGZpbHRlcgorCQkgKiAyLiBUaGUgY3VycmVudCBh bmQgbmV4dCBmaWx0ZXIgaXMgbm90IGNsYWltZWQKKwkJICovCisJCWlmICh3YWtlX2ZpbHRlciAm JiAhKGkgJSAyKSAmJiAhcHJpdi0+bmV0X2ZpbHRlcnNbaV0uY2xhaW1lZCAmJgorCQkgICAgIXBy aXYtPm5ldF9maWx0ZXJzW2kgKyAxXS5jbGFpbWVkKQorCQkJb3Blbl9pbmRleCA9M0QgaTsKKwkJ ZWxzZSBpZiAoIXByaXYtPm5ldF9maWx0ZXJzW2ldLmNsYWltZWQpCisJCQlvcGVuX2luZGV4ID0z RCBpOworCX0KKworCWlmIChvcGVuX2luZGV4ID49M0QgMCkgeworCQluZmlsdGVyID0zRCAmcHJp di0+bmV0X2ZpbHRlcnNbb3Blbl9pbmRleF07CisJCW5maWx0ZXItPmNsYWltZWQgPTNEIHRydWU7 CisJCW5maWx0ZXItPnBvcnQgPTNEIGludGYtPnBvcnQ7CisJCW5maWx0ZXItPmh3X2luZGV4ID0z RCBvcGVuX2luZGV4OworCX0KKworCWlmICh3YWtlX2ZpbHRlciAmJiBvcGVuX2luZGV4ID49M0Qg MCkgeworCQkvKiBDbGFpbSBuZXh0IGZpbHRlciAqLworCQlwcml2LT5uZXRfZmlsdGVyc1tvcGVu X2luZGV4ICsgMV0uY2xhaW1lZCA9M0QgdHJ1ZTsKKwkJcHJpdi0+bmV0X2ZpbHRlcnNbb3Blbl9p bmRleCArIDFdLndha2VfZmlsdGVyID0zRCB0cnVlOworCQluZmlsdGVyLT53YWtlX2ZpbHRlciA9 M0QgdHJ1ZTsKKwl9CisKKwlyZXR1cm4gbmZpbHRlciA/IG5maWx0ZXIgOiBFUlJfUFRSKC1FSU5W QUwpOworfQorCit2b2lkIGJjbWFzcF9uZXRmaWx0X3JlbGVhc2Uoc3RydWN0IGJjbWFzcF9pbnRm ICppbnRmLAorCQkJICAgIHN0cnVjdCBiY21hc3BfbmV0X2ZpbHRlciAqbmZpbHQpCit7CisJc3Ry dWN0IGJjbWFzcF9wcml2ICpwcml2ID0zRCBpbnRmLT5wYXJlbnQ7CisKKwlpZiAobmZpbHQtPndh a2VfZmlsdGVyKSB7CisJCW1lbXNldCgmcHJpdi0+bmV0X2ZpbHRlcnNbbmZpbHQtPmh3X2luZGV4 ICsgMV0sIDAsCisJCSAgICAgICBzaXplb2Yoc3RydWN0IGJjbWFzcF9uZXRfZmlsdGVyKSk7CisJ fQorCisJbWVtc2V0KG5maWx0LCAwLCBzaXplb2Yoc3RydWN0IGJjbWFzcF9uZXRfZmlsdGVyKSk7 Cit9CisKK3N0YXRpYyB2b2lkIGJjbWFzcF9hZGRyX3RvX3VpbnQodW5zaWduZWQgY2hhciAqYWRk ciwgdTMyICpoaWdoLCB1MzIgKmxvdykKK3sKKwkqaGlnaCA9M0QgKHUzMikoYWRkclswXSA8PCA4 IHwgYWRkclsxXSk7CisJKmxvdyA9M0QgKHUzMikoYWRkclsyXSA8PCAyNCB8IGFkZHJbM10gPDwg MTYgfCBhZGRyWzRdIDw8IDggfAorCQkgICAgIGFkZHJbNV0pOworfQorCitzdGF0aWMgdm9pZCBi Y21hc3Bfc2V0X21kYV9maWx0ZXIoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmLAorCQkJCSAgY29u c3QgdW5zaWduZWQgY2hhciAqYWRkciwKKwkJCQkgIHVuc2lnbmVkIGNoYXIgKm1hc2ssCisJCQkJ ICB1bnNpZ25lZCBpbnQgaSkKK3sKKwlzdHJ1Y3QgYmNtYXNwX3ByaXYgKnByaXYgPTNEIGludGYt PnBhcmVudDsKKwl1MzIgYWRkcl9oLCBhZGRyX2wsIG1hc2tfaCwgbWFza19sOworCisJLyogU2V0 IGxvY2FsIGNvcHkgKi8KKwlldGhlcl9hZGRyX2NvcHkocHJpdi0+bWRhX2ZpbHRlcnNbaV0ubWFz aywgbWFzayk7CisJZXRoZXJfYWRkcl9jb3B5KHByaXYtPm1kYV9maWx0ZXJzW2ldLmFkZHIsIGFk ZHIpOworCisJLyogV3JpdGUgdG8gSFcgKi8KKwliY21hc3BfYWRkcl90b191aW50KHByaXYtPm1k YV9maWx0ZXJzW2ldLm1hc2ssICZtYXNrX2gsICZtYXNrX2wpOworCWJjbWFzcF9hZGRyX3RvX3Vp bnQocHJpdi0+bWRhX2ZpbHRlcnNbaV0uYWRkciwgJmFkZHJfaCwgJmFkZHJfbCk7CisJcnhfZmls dGVyX2NvcmVfd2wocHJpdiwgYWRkcl9oLCBBU1BfUlhfRklMVEVSX01EQV9QQVRfSChpKSk7CisJ cnhfZmlsdGVyX2NvcmVfd2wocHJpdiwgYWRkcl9sLCBBU1BfUlhfRklMVEVSX01EQV9QQVRfTChp KSk7CisJcnhfZmlsdGVyX2NvcmVfd2wocHJpdiwgbWFza19oLCBBU1BfUlhfRklMVEVSX01EQV9N U0tfSChpKSk7CisJcnhfZmlsdGVyX2NvcmVfd2wocHJpdiwgbWFza19sLCBBU1BfUlhfRklMVEVS X01EQV9NU0tfTChpKSk7Cit9CisKK3N0YXRpYyB2b2lkIGJjbWFzcF9lbl9tZGFfZmlsdGVyKHN0 cnVjdCBiY21hc3BfaW50ZiAqaW50ZiwgYm9vbCBlbiwKKwkJCQkgdW5zaWduZWQgaW50IGkpCit7 CisJc3RydWN0IGJjbWFzcF9wcml2ICpwcml2ID0zRCBpbnRmLT5wYXJlbnQ7CisKKwlpZiAocHJp di0+bWRhX2ZpbHRlcnNbaV0uZW4gPTNEPTNEIGVuKQorCQlyZXR1cm47CisKKwlwcml2LT5tZGFf ZmlsdGVyc1tpXS5lbiA9M0QgZW47CisJcHJpdi0+bWRhX2ZpbHRlcnNbaV0ucG9ydCA9M0QgaW50 Zi0+cG9ydDsKKworCXJ4X2ZpbHRlcl9jb3JlX3dsKHByaXYsICgoaW50Zi0+Y2hhbm5lbCArIDgp IHwKKwkJCSAgKGVuIDw8IEFTUF9SWF9GSUxURVJfTURBX0NGR19FTl9TSElGVCkgfAorCQkJICBB U1BfUlhfRklMVEVSX01EQV9DRkdfVU1DX1NFTChpbnRmLT5wb3J0KSksCisJCQkgIEFTUF9SWF9G SUxURVJfTURBX0NGRyhpKSk7Cit9CisKKy8qIFRoZXJlIGFyZSAzMiBNREEgZmlsdGVycyBzaGFy ZWQgYmV0d2VlbiBhbGwgcG9ydHMsIHdlIHJlc2VydmUgNCBmaWx0ZXJzPQogcGVyCisgKiBwb3J0 IGZvciB0aGUgZm9sbG93aW5nLgorICogLSBQcm9taXNjOiBGaWx0ZXIgdG8gYWxsb3cgYWxsIHBh Y2tldHMgd2hlbiBwcm9taXNjIGlzIGVuYWJsZWQKKyAqIC0gQWxsIE11bHRpY2FzdAorICogLSBC cm9hZGNhc3QKKyAqIC0gT3duIGFkZHJlc3MKKyAqCisgKiBUaGUgcmVzZXJ2ZWQgZmlsdGVycyBh cmUgaWRlbnRpZmllZCBhcyBzby4KKyAqIC0gUHJvbWlzYzogKFBvcnQgKiA0KSArIDAKKyAqIC0g QWxsIE11bHRpY2FzdDogKFBvcnQgKiA0KSArIDEKKyAqIC0gQnJvYWRjYXN0OiAoUG9ydCAqIDQp ICsgMgorICogLSBPd24gYWRkcmVzczogKFBvcnQgKiA0KSArIDMKKyAqLworZW51bSBhc3Bfcnhf ZmlsdGVyX2lkIHsKKwlBU1BfUlhfRklMVEVSX01EQV9QUk9NSVNDID0zRCAwLAorCUFTUF9SWF9G SUxURVJfTURBX0FMTE1VTFRJLAorCUFTUF9SWF9GSUxURVJfTURBX0JST0FEQ0FTVCwKKwlBU1Bf UlhfRklMVEVSX01EQV9PV05fQUREUiwKKwlBU1BfUlhfRklMVEVSX01EQV9SRVNfQ09VTlQsCit9 OworCisjZGVmaW5lIEFTUF9SWF9GSUxUX01EQV9SRVNfQ09VTlQoaW50ZikJKChpbnRmKS0+cGFy ZW50LT5pbnRmX2NvdW50IFwKKwkJCQkJICogQVNQX1JYX0ZJTFRFUl9NREFfUkVTX0NPVU5UKQor CisjZGVmaW5lIEFTUF9SWF9GSUxUX01EQShpbnRmLCBuYW1lKQkoKChpbnRmKS0+cG9ydCAqIFwK KwkJCQkJICBBU1BfUlhfRklMVEVSX01EQV9SRVNfQ09VTlQpIFwKKwkJCQkJICsgQVNQX1JYX0ZJ TFRFUl9NREFfIyNuYW1lKQorCit2b2lkIGJjbWFzcF9zZXRfcHJvbWlzYyhzdHJ1Y3QgYmNtYXNw X2ludGYgKmludGYsIGJvb2wgZW4pCit7CisJdW5zaWduZWQgaW50IGkgPTNEIEFTUF9SWF9GSUxU X01EQShpbnRmLCBQUk9NSVNDKTsKKwl1bnNpZ25lZCBjaGFyIHByb21pc2NbRVRIX0FMRU5dOwor CisJZXRoX3plcm9fYWRkcihwcm9taXNjKTsKKwkvKiBTZXQgbWFzayB0byAwMDowMDowMDowMDow MDowMCB0byBtYXRjaCBhbGwgcGFja2V0cyAqLworCWJjbWFzcF9zZXRfbWRhX2ZpbHRlcihpbnRm LCBwcm9taXNjLCBwcm9taXNjLCBpKTsKKwliY21hc3BfZW5fbWRhX2ZpbHRlcihpbnRmLCBlbiwg aSk7Cit9CisKK3ZvaWQgYmNtYXNwX3NldF9hbGxtdWx0aShzdHJ1Y3QgYmNtYXNwX2ludGYgKmlu dGYsIGJvb2wgZW4pCit7CisJdW5zaWduZWQgY2hhciBhbGxtdWx0aVtdID0zRCB7MHgwMSwgMHgw MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH07CisJdW5zaWduZWQgaW50IGkgPTNEIEFTUF9SWF9G SUxUX01EQShpbnRmLCBBTExNVUxUSSk7CisKKwkvKiBTZXQgbWFzayB0byAwMTowMDowMDowMDow MDowMCB0byBtYXRjaCBhbGwgbXVsdGljYXN0ICovCisJYmNtYXNwX3NldF9tZGFfZmlsdGVyKGlu dGYsIGFsbG11bHRpLCBhbGxtdWx0aSwgaSk7CisJYmNtYXNwX2VuX21kYV9maWx0ZXIoaW50Ziwg ZW4sIGkpOworfQorCit2b2lkIGJjbWFzcF9zZXRfYnJvYWQoc3RydWN0IGJjbWFzcF9pbnRmICpp bnRmLCBib29sIGVuKQoreworCXVuc2lnbmVkIGludCBpID0zRCBBU1BfUlhfRklMVF9NREEoaW50 ZiwgQlJPQURDQVNUKTsKKwl1bnNpZ25lZCBjaGFyIGFkZHJbRVRIX0FMRU5dOworCisJZXRoX2Jy b2FkY2FzdF9hZGRyKGFkZHIpOworCWJjbWFzcF9zZXRfbWRhX2ZpbHRlcihpbnRmLCBhZGRyLCBh ZGRyLCBpKTsKKwliY21hc3BfZW5fbWRhX2ZpbHRlcihpbnRmLCBlbiwgaSk7Cit9CisKK3ZvaWQg YmNtYXNwX3NldF9vYWRkcihzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsIGNvbnN0IHVuc2lnbmVk IGNoYXIgKmFkZHIsCisJCSAgICAgIGJvb2wgZW4pCit7CisJdW5zaWduZWQgY2hhciBtYXNrW10g PTNEIHsweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmfTsKKwl1bnNpZ25lZCBpbnQg aSA9M0QgQVNQX1JYX0ZJTFRfTURBKGludGYsIE9XTl9BRERSKTsKKworCWJjbWFzcF9zZXRfbWRh X2ZpbHRlcihpbnRmLCBhZGRyLCBtYXNrLCBpKTsKKwliY21hc3BfZW5fbWRhX2ZpbHRlcihpbnRm LCBlbiwgaSk7Cit9CisKK3ZvaWQgYmNtYXNwX2Rpc2FibGVfYWxsX2ZpbHRlcnMoc3RydWN0IGJj bWFzcF9pbnRmICppbnRmKQoreworCXN0cnVjdCBiY21hc3BfcHJpdiAqcHJpdiA9M0QgaW50Zi0+ cGFyZW50OworCXVuc2lnbmVkIGludCBpOworCisJLyogRGlzYWJsZSBhbGwgZmlsdGVycyBoZWxk IGJ5IHRoaXMgcG9ydCAqLworCWZvciAoaSA9M0QgQVNQX1JYX0ZJTFRfTURBX1JFU19DT1VOVChp bnRmKTsgaSA8IE5VTV9NREFfRklMVEVSUzsgaSsrKSB7CisJCWlmIChwcml2LT5tZGFfZmlsdGVy c1tpXS5lbiAmJgorCQkgICAgcHJpdi0+bWRhX2ZpbHRlcnNbaV0ucG9ydCA9M0Q9M0QgaW50Zi0+ cG9ydCkKKwkJCWJjbWFzcF9lbl9tZGFfZmlsdGVyKGludGYsIDAsIGkpOworCX0KK30KKworc3Rh dGljIGludCBiY21hc3BfY29tYmluZV9zZXRfZmlsdGVyKHN0cnVjdCBiY21hc3BfaW50ZiAqaW50 ZiwKKwkJCQkgICAgIHVuc2lnbmVkIGNoYXIgKmFkZHIsIHVuc2lnbmVkIGNoYXIgKm1hc2ssCisJ CQkJICAgICBpbnQgaSkKK3sKKwlzdHJ1Y3QgYmNtYXNwX3ByaXYgKnByaXYgPTNEIGludGYtPnBh cmVudDsKKwl1NjQgYWRkcjEsIGFkZHIyLCBtYXNrMSwgbWFzazIsIG1hc2szOworCisJLyogU3dp dGNoIHRvIHU2NCB0byBoZWxwIHdpdGggdGhlIGNhbGN1bGF0aW9ucyAqLworCWFkZHIxID0zRCBl dGhlcl9hZGRyX3RvX3U2NChwcml2LT5tZGFfZmlsdGVyc1tpXS5hZGRyKTsKKwltYXNrMSA9M0Qg ZXRoZXJfYWRkcl90b191NjQocHJpdi0+bWRhX2ZpbHRlcnNbaV0ubWFzayk7CisJYWRkcjIgPTNE IGV0aGVyX2FkZHJfdG9fdTY0KGFkZHIpOworCW1hc2syID0zRCBldGhlcl9hZGRyX3RvX3U2NCht YXNrKTsKKworCS8qIENoZWNrIGlmIG9uZSBmaWx0ZXIgcmVzaWRlcyB3aXRoaW4gdGhlIG90aGVy ICovCisJbWFzazMgPTNEIG1hc2sxICYgbWFzazI7CisJaWYgKG1hc2szID0zRD0zRCBtYXNrMSAm JiAoKGFkZHIxICYgbWFzazEpID0zRD0zRCAoYWRkcjIgJiBtYXNrMSkpKSB7CisJCS8qIEZpbHRl ciAyIHJlc2lkZXMgd2l0aGluIGZpbHRlciAxLCBzbyBldmVyeXRoaW5nIGlzIGdvb2QgKi8KKwkJ cmV0dXJuIDA7CisJfSBlbHNlIGlmIChtYXNrMyA9M0Q9M0QgbWFzazIgJiYgKChhZGRyMSAmIG1h c2syKSA9M0Q9M0QgKGFkZHIyICYgbWFzazIpKT0KKSB7CisJCS8qIEZpbHRlciAxIHJlc2lkZXMg d2l0aGluIGZpbHRlciAyLCBzbyBzd2FwIGZpbHRlcnMgKi8KKwkJYmNtYXNwX3NldF9tZGFfZmls dGVyKGludGYsIGFkZHIsIG1hc2ssIGkpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBVbmFibGUg dG8gY29tYmluZSAqLworCXJldHVybiAtRUlOVkFMOworfQorCitpbnQgYmNtYXNwX3NldF9lbl9t ZGFfZmlsdGVyKHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZiwgdW5zaWduZWQgY2hhciAqYWRkciwK KwkJCSAgICAgdW5zaWduZWQgY2hhciAqbWFzaykKK3sKKwlzdHJ1Y3QgYmNtYXNwX3ByaXYgKnBy aXYgPTNEIGludGYtPnBhcmVudDsKKwlpbnQgaSwgcmV0OworCisJZm9yIChpID0zRCBBU1BfUlhf RklMVF9NREFfUkVTX0NPVU5UKGludGYpOyBpIDwgTlVNX01EQV9GSUxURVJTOyBpKyspIHsKKwkJ LyogSWYgZmlsdGVyIG5vdCBlbmFibGVkIG9yIGJlbG9uZ3MgdG8gYW5vdGhlciBwb3J0IHNraXAg Ki8KKwkJaWYgKCFwcml2LT5tZGFfZmlsdGVyc1tpXS5lbiB8fAorCQkgICAgcHJpdi0+bWRhX2Zp bHRlcnNbaV0ucG9ydCAhPTNEIGludGYtPnBvcnQpCisJCQljb250aW51ZTsKKworCQkvKiBBdHRl bXB0IHRvIGNvbWJpbmUgZmlsdGVycyAqLworCQlyZXQgPTNEIGJjbWFzcF9jb21iaW5lX3NldF9m aWx0ZXIoaW50ZiwgYWRkciwgbWFzaywgaSk7CisJCWlmICghcmV0KSB7CisJCQlpbnRmLT5taWIu ZmlsdGVyc19jb21iaW5lX2NudCsrOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwkvKiBDcmVh dGUgbmV3IGZpbHRlciBpZiBwb3NzaWJsZSAqLworCWZvciAoaSA9M0QgQVNQX1JYX0ZJTFRfTURB X1JFU19DT1VOVChpbnRmKTsgaSA8IE5VTV9NREFfRklMVEVSUzsgaSsrKSB7CisJCWlmIChwcml2 LT5tZGFfZmlsdGVyc1tpXS5lbikKKwkJCWNvbnRpbnVlOworCisJCWJjbWFzcF9zZXRfbWRhX2Zp bHRlcihpbnRmLCBhZGRyLCBtYXNrLCBpKTsKKwkJYmNtYXNwX2VuX21kYV9maWx0ZXIoaW50Ziwg MSwgaSk7CisJCXJldHVybiAwOworCX0KKworCS8qIE5vIHJvb20gZm9yIG5ldyBmaWx0ZXIgKi8K KwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIHZvaWQgYmNtYXNwX2NvcmVfaW5pdF9maWx0 ZXJzKHN0cnVjdCBiY21hc3BfcHJpdiAqcHJpdikKK3sKKwlpbnQgaTsKKworCS8qIERpc2FibGUg YWxsIGZpbHRlcnMgYW5kIHJlc2V0IHNvZnR3YXJlIHZpZXcgc2luY2UgdGhlIEhXCisJICogY2Fu IGxvc2UgY29udGV4dCB3aGlsZSBpbiBkZWVwIHNsZWVwIHN1c3BlbmQgc3RhdGVzCisJICovCisJ Zm9yIChpID0zRCAwOyBpIDwgTlVNX01EQV9GSUxURVJTOyBpKyspIHsKKwkJcnhfZmlsdGVyX2Nv cmVfd2wocHJpdiwgMHgwLCBBU1BfUlhfRklMVEVSX01EQV9DRkcoaSkpOworCQlwcml2LT5tZGFf ZmlsdGVyc1tpXS5lbiA9M0QgMDsKKwl9CisKKwlmb3IgKGkgPTNEIDA7IGkgPCBOVU1fTkVUX0ZJ TFRFUlM7IGkrKykKKwkJcnhfZmlsdGVyX2NvcmVfd2wocHJpdiwgMHgwLCBBU1BfUlhfRklMVEVS X05FVF9DRkcoaSkpOworCisJLyogVG9wIGxldmVsIGZpbHRlciBlbmFibGUgYml0IHNob3VsZCBi ZSBlbmFibGVkIGF0IGFsbCB0aW1lcywgc2V0CisJICogR0VOX1dBS0VfQ0xFQVIgdG8gY2xlYXIg dGhlIG5ldHdvcmsgZmlsdGVyIHdha2UtdXAgd2hpY2ggd291bGQKKwkgKiBvdGhlcndpc2UgYmUg c3RpY2t5CisJICovCisJcnhfZmlsdGVyX2NvcmVfd2wocHJpdiwgKEFTUF9SWF9GSUxURVJfT1BV VF9FTiB8CisJCQkgIEFTUF9SWF9GSUxURVJfTURBX0VOIHwKKwkJCSAgQVNQX1JYX0ZJTFRFUl9H RU5fV0tfQ0xSIHwKKwkJCSAgQVNQX1JYX0ZJTFRFUl9OVF9GTFRfRU4pLAorCQkJICBBU1BfUlhf RklMVEVSX0JMS19DVFJMKTsKK30KKworLyogQVNQIGNvcmUgaW5pdGlhbGl6YXRpb24gKi8KK3N0 YXRpYyB2b2lkIGJjbWFzcF9jb3JlX2luaXQoc3RydWN0IGJjbWFzcF9wcml2ICpwcml2KQorewor CXR4X2FuYWx5dGljc19jb3JlX3dsKHByaXYsIDB4MCwgQVNQX1RYX0FOQUxZVElDU19DVFJMKTsK KwlyeF9hbmFseXRpY3NfY29yZV93bChwcml2LCAweDQsIEFTUF9SWF9BTkFMWVRJQ1NfQ1RSTCk7 CisKKwlyeF9lZHBrdF9jb3JlX3dsKHByaXYsIChBU1BfRURQS1RfSERSX1NaXzEyOCA8PCBBU1Bf RURQS1RfSERSX1NaX1NISUZUKSwKKwkJCSBBU1BfRURQS1RfSERSX0NGRyk7CisJcnhfZWRwa3Rf Y29yZV93bChwcml2LAorCQkJIChBU1BfRURQS1RfRU5ESV9CVF9TV1BfV0QgPDwgQVNQX0VEUEtU X0VORElfREVTQ19TSElGVCksCisJCQkgQVNQX0VEUEtUX0VOREkpOworCisJcnhfZWRwa3RfY29y ZV93bChwcml2LCAweDFiLCBBU1BfRURQS1RfQlVSU1RfQlVGX1BTQ0FMX1RPVVQpOworCXJ4X2Vk cGt0X2NvcmVfd2wocHJpdiwgMHgzZTgsIEFTUF9FRFBLVF9CVVJTVF9CVUZfV1JJVEVfVE9VVCk7 CisJcnhfZWRwa3RfY29yZV93bChwcml2LCAweDNlOCwgQVNQX0VEUEtUX0JVUlNUX0JVRl9SRUFE X1RPVVQpOworCisJcnhfZWRwa3RfY29yZV93bChwcml2LCBBU1BfRURQS1RfRU5BQkxFX0VOLCBB U1BfRURQS1RfRU5BQkxFKTsKKworCS8qIERpc2FibGUgYW5kIGNsZWFyIGJvdGggVW5pTUFDJ3Mg d2FrZS11cCBpbnRlcnJ1cHRzIHRvIGF2b2lkCisJICogc3RpY2t5IGludGVycnVwdHMuCisJICov CisJX2ludHIyX21hc2tfc2V0KHByaXYsIEFTUF9JTlRSMl9VTUMwX1dBS0UgfCBBU1BfSU5UUjJf VU1DMV9XQUtFKTsKKwlpbnRyMl9jb3JlX3dsKHByaXYsIEFTUF9JTlRSMl9VTUMwX1dBS0UgfCBB U1BfSU5UUjJfVU1DMV9XQUtFLAorCQkgICAgICBBU1BfSU5UUjJfQ0xFQVIpOworfQorCitzdGF0 aWMgdm9pZCBiY21hc3BfY29yZV9jbG9ja19zZWxlY3Qoc3RydWN0IGJjbWFzcF9wcml2ICpwcml2 LCBib29sIHNsb3cpCit7CisJdTMyIHJlZzsKKworCXJlZyA9M0QgY3RybF9jb3JlX3JsKHByaXYs IEFTUF9DVFJMX0NPUkVfQ0xPQ0tfU0VMRUNUKTsKKwlpZiAoc2xvdykKKwkJcmVnICY9M0QgfkFT UF9DVFJMX0NPUkVfQ0xPQ0tfU0VMRUNUX01BSU47CisJZWxzZQorCQlyZWcgfD0zRCBBU1BfQ1RS TF9DT1JFX0NMT0NLX1NFTEVDVF9NQUlOOworCWN0cmxfY29yZV93bChwcml2LCByZWcsIEFTUF9D VFJMX0NPUkVfQ0xPQ0tfU0VMRUNUKTsKK30KKworc3RhdGljIHZvaWQgYmNtYXNwX2NvcmVfY2xv Y2tfc2V0X2xsKHN0cnVjdCBiY21hc3BfcHJpdiAqcHJpdiwgdTMyIGNsciwgdTM9CjIgc2V0KQor eworCXUzMiByZWc7CisKKwlyZWcgPTNEIGN0cmxfY29yZV9ybChwcml2LCBBU1BfQ1RSTF9DTE9D S19DVFJMKTsKKwlyZWcgJj0zRCB+Y2xyOworCXJlZyB8PTNEIHNldDsKKwljdHJsX2NvcmVfd2wo cHJpdiwgcmVnLCBBU1BfQ1RSTF9DTE9DS19DVFJMKTsKKworCXJlZyA9M0QgY3RybF9jb3JlX3Js KHByaXYsIEFTUF9DVFJMX1NDUkFUQ0hfMCk7CisJcmVnICY9M0QgfmNscjsKKwlyZWcgfD0zRCBz ZXQ7CisJY3RybF9jb3JlX3dsKHByaXYsIHJlZywgQVNQX0NUUkxfU0NSQVRDSF8wKTsKK30KKwor c3RhdGljIHZvaWQgYmNtYXNwX2NvcmVfY2xvY2tfc2V0KHN0cnVjdCBiY21hc3BfcHJpdiAqcHJp diwgdTMyIGNsciwgdTMyIHM9CmV0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGlu X2xvY2tfaXJxc2F2ZSgmcHJpdi0+Y2xrX2xvY2ssIGZsYWdzKTsKKwliY21hc3BfY29yZV9jbG9j a19zZXRfbGwocHJpdiwgY2xyLCBzZXQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYt PmNsa19sb2NrLCBmbGFncyk7Cit9CisKK3ZvaWQgYmNtYXNwX2NvcmVfY2xvY2tfc2V0X2ludGYo c3RydWN0IGJjbWFzcF9pbnRmICppbnRmLCBib29sIGVuKQoreworCXUzMiBpbnRmX21hc2sgPTNE IEFTUF9DVFJMX0NMT0NLX0NUUkxfQVNQX1JHTUlJX0RJUyhpbnRmLT5wb3J0KTsKKwlzdHJ1Y3Qg YmNtYXNwX3ByaXYgKnByaXYgPTNEIGludGYtPnBhcmVudDsKKwl1bnNpZ25lZCBsb25nIGZsYWdz OworCXUzMiByZWc7CisKKwkvKiBXaGVuIGVuYWJsaW5nIGFuIGludGVyZmFjZSwgaWYgdGhlIFJY IG9yIFRYIGNsb2NrcyB3ZXJlIG5vdCBlbmFibGVkLAorCSAqIGVuYWJsZSB0aGVtLiBDb252ZXJz ZWx5LCB3aGlsZSBkaXNhYmxpbmcgYW4gaW50ZXJmYWNlLCBpZiB0aGlzIGlzCisJICogdGhlIGxh c3Qgb25lIGVuYWJsZWQsIHdlIGNhbiB0dXJuIG9mZiB0aGUgc2hhcmVkIFJYIGFuZCBUWCBjbG9j a3MgYXMKKwkgKiB3ZWxsLiBXZSBjb250cm9sIGVuYWJsZSBiaXRzIHdoaWNoIGlzIHdoeSB3ZSB0 ZXN0IGZvciBlcXVhbGl0eSBvbgorCSAqIHRoZSBSR01JSSBjbG9jayBiaXQgbWFzay4KKwkgKi8K KwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+Y2xrX2xvY2ssIGZsYWdzKTsKKwlpZiAoZW4pIHsK KwkJaW50Zl9tYXNrIHw9M0QgQVNQX0NUUkxfQ0xPQ0tfQ1RSTF9BU1BfVFhfRElTQUJMRSB8CisJ CQkgICAgIEFTUF9DVFJMX0NMT0NLX0NUUkxfQVNQX1JYX0RJU0FCTEU7CisJCWJjbWFzcF9jb3Jl X2Nsb2NrX3NldF9sbChwcml2LCBpbnRmX21hc2ssIDApOworCX0gZWxzZSB7CisJCXJlZyA9M0Qg Y3RybF9jb3JlX3JsKHByaXYsIEFTUF9DVFJMX1NDUkFUQ0hfMCkgfCBpbnRmX21hc2s7CisJCWlm ICgocmVnICYgQVNQX0NUUkxfQ0xPQ0tfQ1RSTF9BU1BfUkdNSUlfTUFTSykgPTNEPTNECisJCSAg ICBBU1BfQ1RSTF9DTE9DS19DVFJMX0FTUF9SR01JSV9NQVNLKQorCQkJaW50Zl9tYXNrIHw9M0Qg QVNQX0NUUkxfQ0xPQ0tfQ1RSTF9BU1BfVFhfRElTQUJMRSB8CisJCQkJICAgICBBU1BfQ1RSTF9D TE9DS19DVFJMX0FTUF9SWF9ESVNBQkxFOworCQliY21hc3BfY29yZV9jbG9ja19zZXRfbGwocHJp diwgMCwgaW50Zl9tYXNrKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+Y2xr X2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCBiY21hc3BfaXNfcG9ydF92YWxpZChzdHJ1 Y3QgYmNtYXNwX3ByaXYgKnByaXYsIGludCBwb3J0KQoreworCS8qIFF1aWNrIHNhbml0eSBjaGVj aworCSAqICAgUG9ydHMgMC8xIHJlc2VydmVkIGZvciB1bmltYWMKKwkgKiAgIE1heCBzdXBwb3J0 ZWQgcG9ydHMgaXMgMgorCSAqLworCXJldHVybiBwb3J0ID0zRD0zRCAwIHx8IHBvcnQgPTNEPTNE IDE7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBiY21hc3BfaXNyX3dvbChpbnQgaXJxLCB2b2lk ICpkYXRhKQoreworCXN0cnVjdCBiY21hc3BfcHJpdiAqcHJpdiA9M0QgZGF0YTsKKwl1MzIgc3Rh dHVzOworCisJLyogTm8gTDMgSVJRLCBzbyB3ZSBnb29kICovCisJaWYgKHByaXYtPndvbF9pcnEg PD0zRCAwKQorCQlnb3RvIGlycV9oYW5kbGVkOworCisJc3RhdHVzID0zRCB3YWtldXBfaW50cjJf Y29yZV9ybChwcml2LCBBU1BfV0FLRVVQX0lOVFIyX1NUQVRVUykgJgorCQl+d2FrZXVwX2ludHIy X2NvcmVfcmwocHJpdiwgQVNQX1dBS0VVUF9JTlRSMl9NQVNLX1NUQVRVUyk7CisJd2FrZXVwX2lu dHIyX2NvcmVfd2wocHJpdiwgc3RhdHVzLCBBU1BfV0FLRVVQX0lOVFIyX0NMRUFSKTsKKworaXJx X2hhbmRsZWQ6CisJcG1fd2FrZXVwX2V2ZW50KCZwcml2LT5wZGV2LT5kZXYsIDApOworCXJldHVy biBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBiY21hc3BfZ2V0X2FuZF9yZXF1ZXN0X2ly cShzdHJ1Y3QgYmNtYXNwX3ByaXYgKnByaXYsIGludCBpKQoreworCXN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYgPTNEIHByaXYtPnBkZXY7CisJaW50IGlycSwgcmV0OworCisJaXJxID0zRCBw bGF0Zm9ybV9nZXRfaXJxX29wdGlvbmFsKHBkZXYsIGkpOworCWlmIChpcnEgPCAwKQorCQlyZXR1 cm4gaXJxOworCisJcmV0ID0zRCBkZXZtX3JlcXVlc3RfaXJxKCZwZGV2LT5kZXYsIGlycSwgYmNt YXNwX2lzcl93b2wsIDAsCisJCQkgICAgICAgcGRldi0+bmFtZSwgcHJpdik7CisJaWYgKHJldCkK KwkJcmV0dXJuIHJldDsKKworCXJldHVybiBpcnE7Cit9CisKK3N0YXRpYyB2b2lkIGJjbWFzcF9p bml0X3dvbF9zaGFyZWQoc3RydWN0IGJjbWFzcF9wcml2ICpwcml2KQoreworCXN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXYgPTNEIHByaXYtPnBkZXY7CisJc3RydWN0IGRldmljZSAqZGV2ID0z RCAmcGRldi0+ZGV2OworCWludCBpcnE7CisKKwlpcnEgPTNEIGJjbWFzcF9nZXRfYW5kX3JlcXVl c3RfaXJxKHByaXYsIDEpOworCWlmIChpcnEgPCAwKSB7CisJCWRldl93YXJuKGRldiwgIkZhaWxl ZCB0byBpbml0IFdvTCBpcnE6ICVkXG4iLCBpcnEpOworCQlyZXR1cm47CisJfQorCisJcHJpdi0+ d29sX2lycSA9M0QgaXJxOworCXByaXYtPndvbF9pcnFfZW5hYmxlZF9tYXNrID0zRCAwOworCWRl dmljZV9zZXRfd2FrZXVwX2NhcGFibGUoJnBkZXYtPmRldiwgMSk7Cit9CisKK3N0YXRpYyB2b2lk IGJjbWFzcF9lbmFibGVfd29sX3NoYXJlZChzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsIGJvb2wg ZW4pCit7CisJc3RydWN0IGJjbWFzcF9wcml2ICpwcml2ID0zRCBpbnRmLT5wYXJlbnQ7CisJc3Ry dWN0IGRldmljZSAqZGV2ID0zRCAmcHJpdi0+cGRldi0+ZGV2OworCisJaWYgKGVuKSB7CisJCWlm IChwcml2LT53b2xfaXJxX2VuYWJsZWRfbWFzaykgeworCQkJc2V0X2JpdChpbnRmLT5wb3J0LCAm cHJpdi0+d29sX2lycV9lbmFibGVkX21hc2spOworCQkJcmV0dXJuOworCQl9CisKKwkJLyogRmly c3QgZW5hYmxlICovCisJCXNldF9iaXQoaW50Zi0+cG9ydCwgJnByaXYtPndvbF9pcnFfZW5hYmxl ZF9tYXNrKTsKKwkJZW5hYmxlX2lycV93YWtlKHByaXYtPndvbF9pcnEpOworCQlkZXZpY2Vfc2V0 X3dha2V1cF9lbmFibGUoZGV2LCAxKTsKKwl9IGVsc2UgeworCQljbGVhcl9iaXQoaW50Zi0+cG9y dCwgJnByaXYtPndvbF9pcnFfZW5hYmxlZF9tYXNrKTsKKwkJaWYgKHByaXYtPndvbF9pcnFfZW5h YmxlZF9tYXNrKQorCQkJcmV0dXJuOworCisJCS8qIExhc3QgZGlzYWJsZSAqLworCQlkaXNhYmxl X2lycV93YWtlKHByaXYtPndvbF9pcnEpOworCQlkZXZpY2Vfc2V0X3dha2V1cF9lbmFibGUoZGV2 LCAwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGJjbWFzcF93b2xfaXJxX2Rlc3Ryb3lfc2hhcmVk KHN0cnVjdCBiY21hc3BfcHJpdiAqcHJpdikKK3sKKwlpZiAocHJpdi0+d29sX2lycSA+IDApCisJ CWZyZWVfaXJxKHByaXYtPndvbF9pcnEsIHByaXYpOworfQorCitzdGF0aWMgdm9pZCBiY21hc3Bf aW5pdF93b2xfcGVyX2ludGYoc3RydWN0IGJjbWFzcF9wcml2ICpwcml2KQoreworCXN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKnBkZXYgPTNEIHByaXYtPnBkZXY7CisJc3RydWN0IGRldmljZSAqZGV2 ID0zRCAmcGRldi0+ZGV2OworCXN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZjsKKwlpbnQgaXJxLCBp OworCisJZm9yIChpID0zRCAwOyBpIDwgcHJpdi0+aW50Zl9jb3VudDsgaSsrKSB7CisJCWludGYg PTNEIHByaXYtPmludGZzW2ldOworCQlpcnEgPTNEIGJjbWFzcF9nZXRfYW5kX3JlcXVlc3RfaXJx KHByaXYsIGludGYtPnBvcnQgKyAxKTsKKwkJaWYgKGlycSA8IDApIHsKKwkJCWRldl93YXJuKGRl diwgIkZhaWxlZCB0byBpbml0IFdvTCBpcnEocG9ydCAlZCk6ICVkXG4iLAorCQkJCSBpbnRmLT5w b3J0LCBpcnEpOworCQkJY29udGludWU7CisJCX0KKworCQlpbnRmLT53b2xfaXJxID0zRCBpcnE7 CisJCWludGYtPndvbF9pcnFfZW5hYmxlZCA9M0QgZmFsc2U7CisJCWRldmljZV9zZXRfd2FrZXVw X2NhcGFibGUoJnBkZXYtPmRldiwgMSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBiY21hc3BfZW5h YmxlX3dvbF9wZXJfaW50ZihzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsIGJvb2wgZW4pCit7CisJ c3RydWN0IGRldmljZSAqZGV2ID0zRCAmaW50Zi0+cGFyZW50LT5wZGV2LT5kZXY7CisKKwlpZiAo ZW4gXiBpbnRmLT53b2xfaXJxX2VuYWJsZWQpCisJCWlycV9zZXRfaXJxX3dha2UoaW50Zi0+d29s X2lycSwgZW4pOworCisJaW50Zi0+d29sX2lycV9lbmFibGVkID0zRCBlbjsKKwlkZXZpY2Vfc2V0 X3dha2V1cF9lbmFibGUoZGV2LCBlbik7Cit9CisKK3N0YXRpYyB2b2lkIGJjbWFzcF93b2xfaXJx X2Rlc3Ryb3lfcGVyX2ludGYoc3RydWN0IGJjbWFzcF9wcml2ICpwcml2KQoreworCXN0cnVjdCBi Y21hc3BfaW50ZiAqaW50ZjsKKwlpbnQgaTsKKworCWZvciAoaSA9M0QgMDsgaSA8IHByaXYtPmlu dGZfY291bnQ7IGkrKykgeworCQlpbnRmID0zRCBwcml2LT5pbnRmc1tpXTsKKworCQlpZiAoaW50 Zi0+d29sX2lycSA+IDApCisJCQlmcmVlX2lycShpbnRmLT53b2xfaXJxLCBwcml2KTsKKwl9Cit9 CisKK3N0YXRpYyBzdHJ1Y3QgYmNtYXNwX2h3X2luZm8gdjIwX2h3X2luZm8gPTNEIHsKKwkucnhf Y3RybF9mbHVzaCA9M0QgQVNQX1JYX0NUUkxfRkxVU0gsCisJLnVtYWMyZmIgPTNEIFVNQUMyRkJf T0ZGU0VULAorCS5yeF9jdHJsX2ZiX291dF9mcmFtZV9jb3VudCA9M0QgQVNQX1JYX0NUUkxfRkJf T1VUX0ZSQU1FX0NPVU5ULAorCS5yeF9jdHJsX2ZiX2ZpbHRfb3V0X2ZyYW1lX2NvdW50ID0zRCBB U1BfUlhfQ1RSTF9GQl9GSUxUX09VVF9GUkFNRV9DT1VOVCwKKwkucnhfY3RybF9mYl9yeF9maWZv X2RlcHRoID0zRCBBU1BfUlhfQ1RSTF9GQl9SWF9GSUZPX0RFUFRILAorfTsKKworc3RhdGljIGNv bnN0IHN0cnVjdCBiY21hc3BfcGxhdF9kYXRhIHYyMF9wbGF0X2RhdGEgPTNEIHsKKwkuaW5pdF93 b2wgPTNEIGJjbWFzcF9pbml0X3dvbF9wZXJfaW50ZiwKKwkuZW5hYmxlX3dvbCA9M0QgYmNtYXNw X2VuYWJsZV93b2xfcGVyX2ludGYsCisJLmRlc3Ryb3lfd29sID0zRCBiY21hc3Bfd29sX2lycV9k ZXN0cm95X3Blcl9pbnRmLAorCS5od19pbmZvID0zRCAmdjIwX2h3X2luZm8sCit9OworCitzdGF0 aWMgc3RydWN0IGJjbWFzcF9od19pbmZvIHYyMV9od19pbmZvID0zRCB7CisJLnJ4X2N0cmxfZmx1 c2ggPTNEIEFTUF9SWF9DVFJMX0ZMVVNIXzJfMSwKKwkudW1hYzJmYiA9M0QgVU1BQzJGQl9PRkZT RVRfMl8xLAorCS5yeF9jdHJsX2ZiX291dF9mcmFtZV9jb3VudCA9M0QgQVNQX1JYX0NUUkxfRkJf T1VUX0ZSQU1FX0NPVU5UXzJfMSwKKwkucnhfY3RybF9mYl9maWx0X291dF9mcmFtZV9jb3VudCA9 M0QKKwkJQVNQX1JYX0NUUkxfRkJfRklMVF9PVVRfRlJBTUVfQ09VTlRfMl8xLAorCS5yeF9jdHJs X2ZiX3J4X2ZpZm9fZGVwdGggPTNEIEFTUF9SWF9DVFJMX0ZCX1JYX0ZJRk9fREVQVEhfMl8xLAor fTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBiY21hc3BfcGxhdF9kYXRhIHYyMV9wbGF0X2RhdGEg PTNEIHsKKwkuaW5pdF93b2wgPTNEIGJjbWFzcF9pbml0X3dvbF9zaGFyZWQsCisJLmVuYWJsZV93 b2wgPTNEIGJjbWFzcF9lbmFibGVfd29sX3NoYXJlZCwKKwkuZGVzdHJveV93b2wgPTNEIGJjbWFz cF93b2xfaXJxX2Rlc3Ryb3lfc2hhcmVkLAorCS5od19pbmZvID0zRCAmdjIxX2h3X2luZm8sCit9 OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBiY21hc3Bfb2ZfbWF0Y2hbXSA9 M0QgeworCXsgLmNvbXBhdGlibGUgPTNEICJicmNtLGFzcC12Mi4wIiwgLmRhdGEgPTNEICZ2MjBf cGxhdF9kYXRhIH0sCisJeyAuY29tcGF0aWJsZSA9M0QgImJyY20sYXNwLXYyLjEiLCAuZGF0YSA9 M0QgJnYyMV9wbGF0X2RhdGEgfSwKKwl7IC8qIHNlbnRpbmVsICovIH0sCit9OworTU9EVUxFX0RF VklDRV9UQUJMRShvZiwgYmNtYXNwX29mX21hdGNoKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBv Zl9kZXZpY2VfaWQgYmNtYXNwX21kaW9fb2ZfbWF0Y2hbXSA9M0QgeworCXsgLmNvbXBhdGlibGUg PTNEICJicmNtLGFzcC12Mi4xLW1kaW8iLCB9LAorCXsgLmNvbXBhdGlibGUgPTNEICJicmNtLGFz cC12Mi4wLW1kaW8iLCB9LAorCXsgLyogc2VudGluZWwgKi8gfSwKK307CitNT0RVTEVfREVWSUNF X1RBQkxFKG9mLCBiY21hc3BfbWRpb19vZl9tYXRjaCk7CisKK3N0YXRpYyBpbnQgYmNtYXNwX3By b2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZV9ub2Rl ICpwb3J0c19ub2RlLCAqaW50Zl9ub2RlOworCWNvbnN0IHN0cnVjdCBiY21hc3BfcGxhdF9kYXRh ICpwZGF0YTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPTNEICZwZGV2LT5kZXY7CisJaW50IHJldCwg aSwgY291bnQgPTNEIDAsIHBvcnQ7CisJc3RydWN0IGJjbWFzcF9wcml2ICpwcml2OworCXN0cnVj dCBiY21hc3BfaW50ZiAqaW50ZjsKKworCXByaXYgPTNEIGRldm1fa3phbGxvYyhkZXYsIHNpemVv ZigqcHJpdiksIEdGUF9LRVJORUwpOworCWlmICghcHJpdikKKwkJcmV0dXJuIC1FTk9NRU07CisK Kwlwcml2LT5pcnEgPTNEIHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKHByaXYtPmly cSA8PTNEIDApCisJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwgImludmFsaWQg aW50ZXJydXB0XG4iKTsKKworCXByaXYtPmNsayA9M0QgZGV2bV9jbGtfZ2V0X29wdGlvbmFsX2Vu YWJsZWQoZGV2LCAic3dfYXNwIik7CisJaWYgKElTX0VSUihwcml2LT5jbGspKQorCQlyZXR1cm4g ZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHJpdi0+Y2xrKSwKKwkJCQkJCQkgImZhaWxlZCB0 byByZXF1ZXN0IGNsb2NrXG4iKTsKKworCS8qIEJhc2UgZnJvbSBwYXJlbnQgbm9kZSAqLworCXBy aXYtPmJhc2UgPTNEIGRldm1fcGxhdGZvcm1faW9yZW1hcF9yZXNvdXJjZShwZGV2LCAwKTsKKwlp ZiAoSVNfRVJSKHByaXYtPmJhc2UpKQorCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9F UlIocHJpdi0+YmFzZSksICJmYWlsZWQgdG8gaW9tYXBcbiIpOworCisJcmV0ID0zRCBkbWFfc2V0 X21hc2tfYW5kX2NvaGVyZW50KCZwZGV2LT5kZXYsIERNQV9CSVRfTUFTSyg0MCkpOworCWlmIChy ZXQpCisJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCAidW5hYmxlIHRvIHNldCBETUEg bWFzazogJWRcbiIsIHJldCk7CisKKwlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgcHJpdik7 CisJcHJpdi0+cGRldiA9M0QgcGRldjsKKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+bWRhX2xvY2sp OworCXNwaW5fbG9ja19pbml0KCZwcml2LT5jbGtfbG9jayk7CisJbXV0ZXhfaW5pdCgmcHJpdi0+ bmV0X2xvY2spOworCW11dGV4X2luaXQoJnByaXYtPndvbF9sb2NrKTsKKworCXBkYXRhID0zRCBk ZXZpY2VfZ2V0X21hdGNoX2RhdGEoJnBkZXYtPmRldik7CisJaWYgKCFwZGF0YSkKKwkJcmV0dXJu IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLCAidW5hYmxlIHRvIGZpbmQgcGxhdGZvcm0gZGF0 YVxuIik7CisKKwlwcml2LT5pbml0X3dvbCA9M0QgcGRhdGEtPmluaXRfd29sOworCXByaXYtPmVu YWJsZV93b2wgPTNEIHBkYXRhLT5lbmFibGVfd29sOworCXByaXYtPmRlc3Ryb3lfd29sID0zRCBw ZGF0YS0+ZGVzdHJveV93b2w7CisJcHJpdi0+aHdfaW5mbyA9M0QgcGRhdGEtPmh3X2luZm87CisK KwkvKiBFbmFibGUgYWxsIGNsb2NrcyB0byBlbnN1cmUgc3VjY2Vzc2Z1bCBwcm9iaW5nICovCisJ YmNtYXNwX2NvcmVfY2xvY2tfc2V0KHByaXYsIEFTUF9DVFJMX0NMT0NLX0NUUkxfQVNQX0FMTF9E SVNBQkxFLCAwKTsKKworCS8qIFN3aXRjaCB0byB0aGUgbWFpbiBjbG9jayAqLworCWJjbWFzcF9j b3JlX2Nsb2NrX3NlbGVjdChwcml2LCBmYWxzZSk7CisKKwliY21hc3BfaW50cjJfbWFza19zZXRf YWxsKHByaXYpOworCWJjbWFzcF9pbnRyMl9jbGVhcl9hbGwocHJpdik7CisKKwlyZXQgPTNEIGRl dm1fcmVxdWVzdF9pcnEoJnBkZXYtPmRldiwgcHJpdi0+aXJxLCBiY21hc3BfaXNyLCAwLAorCQkJ ICAgICAgIHBkZXYtPm5hbWUsIHByaXYpOworCWlmIChyZXQpCisJCXJldHVybiBkZXZfZXJyX3By b2JlKGRldiwgcmV0LCAiZmFpbGVkIHRvIHJlcXVlc3QgQVNQIGludGVycnVwdDogJWQiLCByZT0K dCk7CisKKwkvKiBSZWdpc3RlciBtZGlvIGNoaWxkIG5vZGVzICovCisJb2ZfcGxhdGZvcm1fcG9w dWxhdGUoZGV2LT5vZl9ub2RlLCBiY21hc3BfbWRpb19vZl9tYXRjaCwgTlVMTCwgZGV2KTsKKwor CS8qIEFTUCBzcGVjaWZpYyBpbml0aWFsaXphdGlvbiwgTmVlZHMgdG8gYmUgZG9uZSByZWdhcmRs ZXNzIG9mCisJICogaG93IG1hbnkgaW50ZXJmYWNlcyBjb21lIHVwLgorCSAqLworCWJjbWFzcF9j b3JlX2luaXQocHJpdik7CisJYmNtYXNwX2NvcmVfaW5pdF9maWx0ZXJzKHByaXYpOworCisJcG9y dHNfbm9kZSA9M0Qgb2ZfZmluZF9ub2RlX2J5X25hbWUoZGV2LT5vZl9ub2RlLCAiZXRoZXJuZXQt cG9ydHMiKTsKKwlpZiAoIXBvcnRzX25vZGUpIHsKKwkJZGV2X3dhcm4oZGV2LCAiTm8gcG9ydHMg Zm91bmRcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlmb3JfZWFjaF9hdmFpbGFibGVfY2hpbGRf b2Zfbm9kZShwb3J0c19ub2RlLCBpbnRmX25vZGUpIHsKKwkJb2ZfcHJvcGVydHlfcmVhZF91MzIo aW50Zl9ub2RlLCAicmVnIiwgJnBvcnQpOworCQlpZiAoIWJjbWFzcF9pc19wb3J0X3ZhbGlkKHBy aXYsIHBvcnQpKSB7CisJCQlkZXZfd2FybihkZXYsICIlcE9GOiAlZCBpcyBhbiBpbnZhbGlkIHBv cnRcbiIsCisJCQkJIGludGZfbm9kZSwgcG9ydCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCXBy aXYtPmludGZfY291bnQrKzsKKwl9CisKKwlwcml2LT5pbnRmcyA9M0QgZGV2bV9rY2FsbG9jKGRl diwgcHJpdi0+aW50Zl9jb3VudCwKKwkJCQkgICBzaXplb2Yoc3RydWN0IGJjbWFzcF9pbnRmICop LAorCQkJCSAgIEdGUF9LRVJORUwpOworCWlmICghcHJpdi0+aW50ZnMpCisJCXJldHVybiAtRU5P TUVNOworCisJLyogUHJvYmUgZWFjaCBpbnRlcmZhY2UgKEluaXRpYWxpemF0aW9uIHNob3VsZCBj b250aW51ZSBldmVuIGlmCisJICogaW50ZXJmYWNlcyBhcmUgdW5hYmxlIHRvIGNvbWUgdXApCisJ ICovCisJaSA9M0QgMDsKKwlmb3JfZWFjaF9hdmFpbGFibGVfY2hpbGRfb2Zfbm9kZShwb3J0c19u b2RlLCBpbnRmX25vZGUpCisJCXByaXYtPmludGZzW2krK10gPTNEIGJjbWFzcF9pbnRlcmZhY2Vf Y3JlYXRlKHByaXYsIGludGZfbm9kZSk7CisKKwkvKiBDaGVjayBhbmQgZW5hYmxlIFdvTCAqLwor CXByaXYtPmluaXRfd29sKHByaXYpOworCisJLyogRHJvcCB0aGUgY2xvY2sgcmVmZXJlbmNlIGNv dW50IG5vdyBhbmQgbGV0IG5kb19vcGVuKCkvbmRvX2Nsb3NlKCkKKwkgKiBtYW5hZ2UgaXQgZm9y IHVzIGZyb20gbm93IG9uLgorCSAqLworCWJjbWFzcF9jb3JlX2Nsb2NrX3NldChwcml2LCAwLCBB U1BfQ1RSTF9DTE9DS19DVFJMX0FTUF9BTExfRElTQUJMRSk7CisKKwljbGtfZGlzYWJsZV91bnBy ZXBhcmUocHJpdi0+Y2xrKTsKKworCS8qIE5vdyBkbyB0aGUgcmVnaXN0cmF0aW9uIG9mIHRoZSBu ZXR3b3JrIHBvcnRzIHdoaWNoIHdpbGwgdGFrZSBjYXJlCisJICogb2YgbWFuYWdpbmcgdGhlIGNs b2NrIHByb3Blcmx5LgorCSAqLworCWZvciAoaSA9M0QgMDsgaSA8IHByaXYtPmludGZfY291bnQ7 IGkrKykgeworCQlpbnRmID0zRCBwcml2LT5pbnRmc1tpXTsKKwkJaWYgKCFpbnRmKQorCQkJY29u dGludWU7CisKKwkJcmV0ID0zRCByZWdpc3Rlcl9uZXRkZXYoaW50Zi0+bmRldik7CisJCWlmIChy ZXQpIHsKKwkJCW5ldGRldl9lcnIoaW50Zi0+bmRldiwKKwkJCQkgICAiZmFpbGVkIHRvIHJlZ2lz dGVyIG5ldF9kZXZpY2U6ICVkXG4iLCByZXQpOworCQkJYmNtYXNwX2ludGVyZmFjZV9kZXN0cm95 KGludGYsIGZhbHNlKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWNvdW50Kys7CisJfQorCisJZGV2 X2luZm8oZGV2LCAiSW5pdGlhbGl6ZWQgJWQgcG9ydChzKVxuIiwgY291bnQpOworCisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQgYmNtYXNwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl ICpwZGV2KQoreworCXN0cnVjdCBiY21hc3BfcHJpdiAqcHJpdiA9M0QgZGV2X2dldF9kcnZkYXRh KCZwZGV2LT5kZXYpOworCXN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZjsKKwlpbnQgaTsKKworCXBy aXYtPmRlc3Ryb3lfd29sKHByaXYpOworCisJZm9yIChpID0zRCAwOyBpIDwgcHJpdi0+aW50Zl9j b3VudDsgaSsrKSB7CisJCWludGYgPTNEIHByaXYtPmludGZzW2ldOworCQlpZiAoIWludGYpCisJ CQljb250aW51ZTsKKworCQliY21hc3BfaW50ZXJmYWNlX2Rlc3Ryb3koaW50ZiwgdHJ1ZSk7CisJ fQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGJjbWFzcF9zaHV0ZG93bihzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCByZXQ7CisKKwlyZXQgPTNEIGJjbWFzcF9y ZW1vdmUocGRldik7CisJaWYgKHJldCkKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRv IHJlbW92ZTogJWRcbiIsIHJldCk7Cit9CisKK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgYmNt YXNwX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZCkKK3sKKwlzdHJ1Y3QgYmNtYXNwX3ByaXYgKnBy aXYgPTNEIGRldl9nZXRfZHJ2ZGF0YShkKTsKKwlzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGY7CisJ aW50IGksIHJldDsKKworCWZvciAoaSA9M0QgMDsgaSA8IHByaXYtPmludGZfY291bnQ7IGkrKykg eworCQlpbnRmID0zRCBwcml2LT5pbnRmc1tpXTsKKwkJaWYgKCFpbnRmKQorCQkJY29udGludWU7 CisKKwkJcmV0ID0zRCBiY21hc3BfaW50ZXJmYWNlX3N1c3BlbmQoaW50Zik7CisJCWlmIChyZXQp CisJCQlicmVhazsKKwl9CisKKwlyZXQgPTNEIGNsa19wcmVwYXJlX2VuYWJsZShwcml2LT5jbGsp OworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBXaGV0aGVyIFdha2Utb24tTEFOIGlz IGVuYWJsZWQgb3Igbm90LCB3ZSBjYW4gYWx3YXlzIGRpc2FibGUKKwkgKiB0aGUgc2hhcmVkIFRY IGNsb2NrCisJICovCisJYmNtYXNwX2NvcmVfY2xvY2tfc2V0KHByaXYsIDAsIEFTUF9DVFJMX0NM T0NLX0NUUkxfQVNQX1RYX0RJU0FCTEUpOworCisJYmNtYXNwX2NvcmVfY2xvY2tfc2VsZWN0KHBy aXYsIHRydWUpOworCisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHByaXYtPmNsayk7CisKKwlyZXR1 cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIGJjbWFzcF9yZXN1bWUoc3Ry dWN0IGRldmljZSAqZCkKK3sKKwlzdHJ1Y3QgYmNtYXNwX3ByaXYgKnByaXYgPTNEIGRldl9nZXRf ZHJ2ZGF0YShkKTsKKwlzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGY7CisJaW50IGksIHJldDsKKwor CXJldCA9M0QgY2xrX3ByZXBhcmVfZW5hYmxlKHByaXYtPmNsayk7CisJaWYgKHJldCkKKwkJcmV0 dXJuIHJldDsKKworCS8qIFN3aXRjaCB0byB0aGUgbWFpbiBjbG9jayBkb21haW4gKi8KKwliY21h c3BfY29yZV9jbG9ja19zZWxlY3QocHJpdiwgZmFsc2UpOworCisJLyogUmUtZW5hYmxlIGFsbCBj bG9ja3MgZm9yIHJlLWluaXRpYWxpemF0aW9uICovCisJYmNtYXNwX2NvcmVfY2xvY2tfc2V0KHBy aXYsIEFTUF9DVFJMX0NMT0NLX0NUUkxfQVNQX0FMTF9ESVNBQkxFLCAwKTsKKworCWJjbWFzcF9j b3JlX2luaXQocHJpdik7CisJYmNtYXNwX2NvcmVfaW5pdF9maWx0ZXJzKHByaXYpOworCisJLyog QW5kIGRpc2FibGUgdGhlbSB0byBsZXQgdGhlIG5ldHdvcmsgZGV2aWNlcyB0YWtlIGNhcmUgb2Yg dGhlbSAqLworCWJjbWFzcF9jb3JlX2Nsb2NrX3NldChwcml2LCAwLCBBU1BfQ1RSTF9DTE9DS19D VFJMX0FTUF9BTExfRElTQUJMRSk7CisKKwljbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi0+Y2xr KTsKKworCWZvciAoaSA9M0QgMDsgaSA8IHByaXYtPmludGZfY291bnQ7IGkrKykgeworCQlpbnRm ID0zRCBwcml2LT5pbnRmc1tpXTsKKwkJaWYgKCFpbnRmKQorCQkJY29udGludWU7CisKKwkJcmV0 ID0zRCBiY21hc3BfaW50ZXJmYWNlX3Jlc3VtZShpbnRmKTsKKwkJaWYgKHJldCkKKwkJCWJyZWFr OworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBTSU1QTEVfREVWX1BNX09QUyhiY21h c3BfcG1fb3BzLAorCQkJIGJjbWFzcF9zdXNwZW5kLCBiY21hc3BfcmVzdW1lKTsKKworc3RhdGlj IHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYmNtYXNwX2RyaXZlciA9M0QgeworCS5wcm9iZSA9M0Qg YmNtYXNwX3Byb2JlLAorCS5yZW1vdmUgPTNEIGJjbWFzcF9yZW1vdmUsCisJLnNodXRkb3duID0z RCBiY21hc3Bfc2h1dGRvd24sCisJLmRyaXZlciA9M0QgeworCQkubmFtZSA9M0QgImJyY20sYXNw LXYyIiwKKwkJLm9mX21hdGNoX3RhYmxlID0zRCBiY21hc3Bfb2ZfbWF0Y2gsCisJCS5wbSA9M0Qg JmJjbWFzcF9wbV9vcHMsCisJfSwKK307Cittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGJjbWFzcF9k cml2ZXIpOworCitNT0RVTEVfQVVUSE9SKCJCcm9hZGNvbSIpOworTU9EVUxFX0RFU0NSSVBUSU9O KCJCcm9hZGNvbSBBU1AgMi4wIEV0aGVybmV0IGNvbnRyb2xsZXIgZHJpdmVyIik7CitNT0RVTEVf QUxJQVMoInBsYXRmb3JtOmJyY20sYXNwLXYyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRp ZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcC5oIGIv ZHJpdmVycy9uZXQvZXRoZT0Kcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcC5oCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNWZjMjNhMDJmMjQyCi0tLSAvZGV2L251bGwK KysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9iY21hc3AuaApAQCAtMCww ICsxLDYzNyBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KKyNpZm5k ZWYgX19CQ01BU1BfSAorI2RlZmluZSBfX0JDTUFTUF9ICisKKyNpbmNsdWRlIDxsaW51eC9uZXRk ZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9waHkuaD4KKyNpbmNsdWRlIDxsaW51eC9pby02NC1u b25hdG9taWMtaGktbG8uaD4KKyNpbmNsdWRlIDx1YXBpL2xpbnV4L2V0aHRvb2wuaD4KKworI2Rl ZmluZSBBU1BfSU5UUjJfT0ZGU0VUCQkJMHgxMDAwCisjZGVmaW5lICBBU1BfSU5UUjJfU1RBVFVT CQkJMHgwCisjZGVmaW5lICBBU1BfSU5UUjJfU0VUCQkJCTB4NAorI2RlZmluZSAgQVNQX0lOVFIy X0NMRUFSCQkJMHg4CisjZGVmaW5lICBBU1BfSU5UUjJfTUFTS19TVEFUVVMJCQkweGMKKyNkZWZp bmUgIEFTUF9JTlRSMl9NQVNLX1NFVAkJCTB4MTAKKyNkZWZpbmUgIEFTUF9JTlRSMl9NQVNLX0NM RUFSCQkJMHgxNAorCisjZGVmaW5lIEFTUF9JTlRSMl9SWF9FQ0goaW50cikJCQlCSVQoaW50cikK KyNkZWZpbmUgQVNQX0lOVFIyX1RYX0RFU0MoaW50cikJCQlCSVQoKGludHIpICsgMTQpCisjZGVm aW5lIEFTUF9JTlRSMl9VTUMwX1dBS0UJCQlCSVQoMjIpCisjZGVmaW5lIEFTUF9JTlRSMl9VTUMx X1dBS0UJCQlCSVQoMjgpCisKKyNkZWZpbmUgQVNQX1dBS0VVUF9JTlRSMl9PRkZTRVQJCQkweDEy MDAKKyNkZWZpbmUgIEFTUF9XQUtFVVBfSU5UUjJfU1RBVFVTCQkweDAKKyNkZWZpbmUgIEFTUF9X QUtFVVBfSU5UUjJfU0VUCQkJMHg0CisjZGVmaW5lICBBU1BfV0FLRVVQX0lOVFIyX0NMRUFSCQkJ MHg4CisjZGVmaW5lICBBU1BfV0FLRVVQX0lOVFIyX01BU0tfU1RBVFVTCQkweGMKKyNkZWZpbmUg IEFTUF9XQUtFVVBfSU5UUjJfTUFTS19TRVQJCTB4MTAKKyNkZWZpbmUgIEFTUF9XQUtFVVBfSU5U UjJfTUFTS19DTEVBUgkJMHgxNAorI2RlZmluZSBBU1BfV0FLRVVQX0lOVFIyX01QRF8wCQkJQklU KDApCisjZGVmaW5lIEFTUF9XQUtFVVBfSU5UUjJfTVBEXzEJCQlCSVQoMSkKKyNkZWZpbmUgQVNQ X1dBS0VVUF9JTlRSMl9GSUxUXzAJCQlCSVQoMikKKyNkZWZpbmUgQVNQX1dBS0VVUF9JTlRSMl9G SUxUXzEJCQlCSVQoMykKKyNkZWZpbmUgQVNQX1dBS0VVUF9JTlRSMl9GVwkJCUJJVCg0KQorCisj ZGVmaW5lIEFTUF9UWF9BTkFMWVRJQ1NfT0ZGU0VUCQkJMHg0YzAwMAorI2RlZmluZSAgQVNQX1RY X0FOQUxZVElDU19DVFJMCQkJMHgwCisKKyNkZWZpbmUgQVNQX1JYX0FOQUxZVElDU19PRkZTRVQJ CQkweDk4MDAwCisjZGVmaW5lICBBU1BfUlhfQU5BTFlUSUNTX0NUUkwJCQkweDAKKworI2RlZmlu ZSBBU1BfUlhfQ1RSTF9PRkZTRVQJCQkweDlmMDAwCisjZGVmaW5lIEFTUF9SWF9DVFJMX1VNQUNf MF9GUkFNRV9DT1VOVAkJMHg4CisjZGVmaW5lIEFTUF9SWF9DVFJMX1VNQUNfMV9GUkFNRV9DT1VO VAkJMHhjCisjZGVmaW5lIEFTUF9SWF9DVFJMX0ZCXzBfRlJBTUVfQ09VTlQJCTB4MTQKKyNkZWZp bmUgQVNQX1JYX0NUUkxfRkJfMV9GUkFNRV9DT1VOVAkJMHgxOAorI2RlZmluZSBBU1BfUlhfQ1RS TF9GQl84X0ZSQU1FX0NPVU5UCQkweDFjCisvKiBhc3AyLjEgZGl2ZXJnZXMgb2Zmc2V0cyBoZXJl ICovCisvKiBBU1AyLjAgKi8KKyNkZWZpbmUgQVNQX1JYX0NUUkxfRkJfT1VUX0ZSQU1FX0NPVU5U CQkweDIwCisjZGVmaW5lIEFTUF9SWF9DVFJMX0ZCX0ZJTFRfT1VUX0ZSQU1FX0NPVU5UCTB4MjQK KyNkZWZpbmUgQVNQX1JYX0NUUkxfRkxVU0gJCQkweDI4CisjZGVmaW5lICBBU1BfQ1RSTF9VTUFD MF9GTFVTSF9NQVNLCQkoQklUKDApIHwgQklUKDEyKSkKKyNkZWZpbmUgIEFTUF9DVFJMX1VNQUMx X0ZMVVNIX01BU0sJCShCSVQoMSkgfCBCSVQoMTMpKQorI2RlZmluZSAgQVNQX0NUUkxfU1BCX0ZM VVNIX01BU0sJCShCSVQoOCkgfCBCSVQoMjApKQorI2RlZmluZSBBU1BfUlhfQ1RSTF9GQl9SWF9G SUZPX0RFUFRICQkweDMwCisvKiBBU1AyLjEgKi8KKyNkZWZpbmUgQVNQX1JYX0NUUkxfRkJfOV9G UkFNRV9DT1VOVF8yXzEJMHgyMAorI2RlZmluZSBBU1BfUlhfQ1RSTF9GQl8xMF9GUkFNRV9DT1VO VF8yXzEJMHgyNAorI2RlZmluZSBBU1BfUlhfQ1RSTF9GQl9PVVRfRlJBTUVfQ09VTlRfMl8xCTB4 MjgKKyNkZWZpbmUgQVNQX1JYX0NUUkxfRkJfRklMVF9PVVRfRlJBTUVfQ09VTlRfMl8xCTB4MmMK KyNkZWZpbmUgQVNQX1JYX0NUUkxfRkxVU0hfMl8xCQkJMHgzMAorI2RlZmluZSBBU1BfUlhfQ1RS TF9GQl9SWF9GSUZPX0RFUFRIXzJfMQkweDM4CisKKyNkZWZpbmUgQVNQX1JYX0ZJTFRFUl9PRkZT RVQJCQkweDgwMDAwCisjZGVmaW5lICBBU1BfUlhfRklMVEVSX0JMS19DVFJMCQkJMHgwCisjZGVm aW5lICAgQVNQX1JYX0ZJTFRFUl9PUFVUX0VOCQkJQklUKDApCisjZGVmaW5lICAgQVNQX1JYX0ZJ TFRFUl9NREFfRU4JCQlCSVQoMSkKKyNkZWZpbmUgICBBU1BfUlhfRklMVEVSX0xOUl9NRAkJCUJJ VCgyKQorI2RlZmluZSAgIEFTUF9SWF9GSUxURVJfR0VOX1dLX0VOCQlCSVQoMykKKyNkZWZpbmUg ICBBU1BfUlhfRklMVEVSX0dFTl9XS19DTFIJCUJJVCg0KQorI2RlZmluZSAgIEFTUF9SWF9GSUxU RVJfTlRfRkxUX0VOCQlCSVQoNSkKKyNkZWZpbmUgIEFTUF9SWF9GSUxURVJfTURBX0NGRyhzZWwp CQkoKChzZWwpICogMHgxNCkgKyAweDEwMCkKKyNkZWZpbmUgICBBU1BfUlhfRklMVEVSX01EQV9D RkdfRU5fU0hJRlQJOAorI2RlZmluZSAgIEFTUF9SWF9GSUxURVJfTURBX0NGR19VTUNfU0VMKHNl bCkJKChzZWwpID4gMSA/IEJJVCgxNykgOiBcCisJCQkJCQkgQklUKChzZWwpICsgOSkpCisjZGVm aW5lICBBU1BfUlhfRklMVEVSX01EQV9QQVRfSChzZWwpCQkoKChzZWwpICogMHgxNCkgKyAweDEw NCkKKyNkZWZpbmUgIEFTUF9SWF9GSUxURVJfTURBX1BBVF9MKHNlbCkJCSgoKHNlbCkgKiAweDE0 KSArIDB4MTA4KQorI2RlZmluZSAgQVNQX1JYX0ZJTFRFUl9NREFfTVNLX0goc2VsKQkJKCgoc2Vs KSAqIDB4MTQpICsgMHgxMGMpCisjZGVmaW5lICBBU1BfUlhfRklMVEVSX01EQV9NU0tfTChzZWwp CQkoKChzZWwpICogMHgxNCkgKyAweDExMCkKKyNkZWZpbmUgIEFTUF9SWF9GSUxURVJfTURBX0NG RyhzZWwpCQkoKChzZWwpICogMHgxNCkgKyAweDEwMCkKKyNkZWZpbmUgIEFTUF9SWF9GSUxURVJf TURBX1BBVF9IKHNlbCkJCSgoKHNlbCkgKiAweDE0KSArIDB4MTA0KQorI2RlZmluZSAgQVNQX1JY X0ZJTFRFUl9NREFfUEFUX0woc2VsKQkJKCgoc2VsKSAqIDB4MTQpICsgMHgxMDgpCisjZGVmaW5l ICBBU1BfUlhfRklMVEVSX01EQV9NU0tfSChzZWwpCQkoKChzZWwpICogMHgxNCkgKyAweDEwYykK KyNkZWZpbmUgIEFTUF9SWF9GSUxURVJfTURBX01TS19MKHNlbCkJCSgoKHNlbCkgKiAweDE0KSAr IDB4MTEwKQorI2RlZmluZSAgQVNQX1JYX0ZJTFRFUl9ORVRfQ0ZHKHNlbCkJCSgoKHNlbCkgKiAw eGEwNCkgKyAweDQwMCkKKyNkZWZpbmUgICBBU1BfUlhfRklMVEVSX05FVF9DRkdfQ0goc2VsKQkJ KChzZWwpIDw8IDApCisjZGVmaW5lICAgQVNQX1JYX0ZJTFRFUl9ORVRfQ0ZHX0VOCQlCSVQoOSkK KyNkZWZpbmUgICBBU1BfUlhfRklMVEVSX05FVF9DRkdfTDJfRU4JCUJJVCgxMCkKKyNkZWZpbmUg ICBBU1BfUlhfRklMVEVSX05FVF9DRkdfTDNfRU4JCUJJVCgxMSkKKyNkZWZpbmUgICBBU1BfUlhf RklMVEVSX05FVF9DRkdfTDRfRU4JCUJJVCgxMikKKyNkZWZpbmUgICBBU1BfUlhfRklMVEVSX05F VF9DRkdfTDNfRlJNKHNlbCkJKChzZWwpIDw8IDEzKQorI2RlZmluZSAgIEFTUF9SWF9GSUxURVJf TkVUX0NGR19MNF9GUk0oc2VsKQkoKHNlbCkgPDwgMTUpCisjZGVmaW5lICAgQVNQX1JYX0ZJTFRF Ul9ORVRfQ0ZHX1VNQyhzZWwpCUJJVCgoc2VsKSArIDE5KQorI2RlZmluZSAgIEFTUF9SWF9GSUxU RVJfTkVUX0NGR19ETUFfRU4JCUJJVCgyNykKKworZW51bSBhc3BfcnhfbmV0X2ZpbHRlcl9ibG9j ayB7CisJQVNQX1JYX0ZJTFRFUl9ORVRfTDIgPTNEIDAsCisJQVNQX1JYX0ZJTFRFUl9ORVRfTDNf MCwKKwlBU1BfUlhfRklMVEVSX05FVF9MM18xLAorCUFTUF9SWF9GSUxURVJfTkVUX0w0LAorCUFT UF9SWF9GSUxURVJfTkVUX0JMT0NLX01BWAorfTsKKworI2RlZmluZSAgQVNQX1JYX0ZJTFRFUl9O RVRfT0ZGU0VUX01BWAkJMzIKKyNkZWZpbmUgIEFTUF9SWF9GSUxURVJfTkVUX1BBVChzZWwsIGJs b2NrLCBvZmYpIFwKKwkJKCgoc2VsKSAqIDB4YTA0KSArICgoYmxvY2spICogMHgyMDApICsgKG9m ZikgKyAweDYwMCkKKyNkZWZpbmUgIEFTUF9SWF9GSUxURVJfTkVUX01BU0soc2VsLCBibG9jaywg b2ZmKSBcCisJCSgoKHNlbCkgKiAweGEwNCkgKyAoKGJsb2NrKSAqIDB4MjAwKSArIChvZmYpICsg MHg3MDApCisKKyNkZWZpbmUgIEFTUF9SWF9GSUxURVJfTkVUX09GRlNFVChzZWwpCQkoKChzZWwp ICogMHhhMDQpICsgMHhlMDApCisjZGVmaW5lICAgQVNQX1JYX0ZJTFRFUl9ORVRfT0ZGU0VUX0wy KHZhbCkJKCh2YWwpIDw8IDApCisjZGVmaW5lICAgQVNQX1JYX0ZJTFRFUl9ORVRfT0ZGU0VUX0wz XzAodmFsKQkoKHZhbCkgPDwgOCkKKyNkZWZpbmUgICBBU1BfUlhfRklMVEVSX05FVF9PRkZTRVRf TDNfMSh2YWwpCSgodmFsKSA8PCAxNikKKyNkZWZpbmUgICBBU1BfUlhfRklMVEVSX05FVF9PRkZT RVRfTDQodmFsKQkoKHZhbCkgPDwgMjQpCisKKyNkZWZpbmUgQVNQX0VEUEtUX09GRlNFVAkJCTB4 OWMwMDAKKyNkZWZpbmUgIEFTUF9FRFBLVF9FTkFCTEUJCQkweDQKKyNkZWZpbmUgICBBU1BfRURQ S1RfRU5BQkxFX0VOCQkJQklUKDApCisjZGVmaW5lICBBU1BfRURQS1RfSERSX0NGRwkJCTB4Ywor I2RlZmluZSAgIEFTUF9FRFBLVF9IRFJfU1pfU0hJRlQJCTIKKyNkZWZpbmUgICBBU1BfRURQS1Rf SERSX1NaXzMyCQkJMAorI2RlZmluZSAgIEFTUF9FRFBLVF9IRFJfU1pfNjQJCQkxCisjZGVmaW5l ICAgQVNQX0VEUEtUX0hEUl9TWl85NgkJCTIKKyNkZWZpbmUgICBBU1BfRURQS1RfSERSX1NaXzEy OAkJCTMKKyNkZWZpbmUgQVNQX0VEUEtUX0JVUlNUX0JVRl9QU0NBTF9UT1VUCQkweDEwCisjZGVm aW5lIEFTUF9FRFBLVF9CVVJTVF9CVUZfV1JJVEVfVE9VVAkJMHgxNAorI2RlZmluZSBBU1BfRURQ S1RfQlVSU1RfQlVGX1JFQURfVE9VVAkJMHgxOAorI2RlZmluZSBBU1BfRURQS1RfUlhfVFNfQ09V TlRFUgkJCTB4MzgKKyNkZWZpbmUgIEFTUF9FRFBLVF9FTkRJCQkJCTB4NDgKKyNkZWZpbmUgICBB U1BfRURQS1RfRU5ESV9ERVNDX1NISUZUCQk4CisjZGVmaW5lICAgQVNQX0VEUEtUX0VORElfTk9f QlRfU1dQCQkwCisjZGVmaW5lICAgQVNQX0VEUEtUX0VORElfQlRfU1dQX1dECQkxCisjZGVmaW5l IEFTUF9FRFBLVF9SWF9QS1RfQ05UCQkJMHgxMzgKKyNkZWZpbmUgQVNQX0VEUEtUX0hEUl9FWFRS X0NOVAkJCTB4MTNjCisjZGVmaW5lIEFTUF9FRFBLVF9IRFJfT1VUX0NOVAkJCTB4MTQwCisKKyNk ZWZpbmUgQVNQX0NUUkwJCQkJMHgxMDEwMDAKKyNkZWZpbmUgIEFTUF9DVFJMX0FTUF9TV19JTklU CQkJMHgwNAorI2RlZmluZSAgIEFTUF9DVFJMX0FTUF9TV19JTklUX0FDUFVTU19DT1JFCUJJVCgw KQorI2RlZmluZSAgIEFTUF9DVFJMX0FTUF9TV19JTklUX0FTUF9UWAkJQklUKDEpCisjZGVmaW5l ICAgQVNQX0NUUkxfQVNQX1NXX0lOSVRfQVNfUlgJCUJJVCgyKQorI2RlZmluZSAgIEFTUF9DVFJM X0FTUF9TV19JTklUX0FTUF9SR01JSV9VTUFDMAlCSVQoMykKKyNkZWZpbmUgICBBU1BfQ1RSTF9B U1BfU1dfSU5JVF9BU1BfUkdNSUlfVU1BQzEJQklUKDQpCisjZGVmaW5lICAgQVNQX0NUUkxfQVNQ X1NXX0lOSVRfQVNQX1hNRU1JRglCSVQoNSkKKyNkZWZpbmUgIEFTUF9DVFJMX0NMT0NLX0NUUkwJ CQkweDA0CisjZGVmaW5lICAgQVNQX0NUUkxfQ0xPQ0tfQ1RSTF9BU1BfVFhfRElTQUJMRQlCSVQo MCkKKyNkZWZpbmUgICBBU1BfQ1RSTF9DTE9DS19DVFJMX0FTUF9SWF9ESVNBQkxFCUJJVCgxKQor I2RlZmluZSAgIEFTUF9DVFJMX0NMT0NLX0NUUkxfQVNQX1JHTUlJX1NISUZUCTIKKyNkZWZpbmUg ICBBU1BfQ1RSTF9DTE9DS19DVFJMX0FTUF9SR01JSV9NQVNLCSgweDcgPDwgQVNQX0NUUkxfQ0xP Q0tfQ1RSTF9BPQpTUF9SR01JSV9TSElGVCkKKyNkZWZpbmUgICBBU1BfQ1RSTF9DTE9DS19DVFJM X0FTUF9SR01JSV9ESVMoeCkJQklUKEFTUF9DVFJMX0NMT0NLX0NUUkxfQVNQPQpfUkdNSUlfU0hJ RlQgKyAoeCkpCisjZGVmaW5lICAgQVNQX0NUUkxfQ0xPQ0tfQ1RSTF9BU1BfQUxMX0RJU0FCTEUJ R0VOTUFTSyg0LCAwKQorI2RlZmluZSAgQVNQX0NUUkxfQ09SRV9DTE9DS19TRUxFQ1QJCTB4MDgK KyNkZWZpbmUgICBBU1BfQ1RSTF9DT1JFX0NMT0NLX1NFTEVDVF9NQUlOCUJJVCgwKQorI2RlZmlu ZSAgQVNQX0NUUkxfU0NSQVRDSF8wCQkJMHgwYworCitzdHJ1Y3QgYmNtYXNwX3R4X2NiIHsKKwlz dHJ1Y3Qgc2tfYnVmZgkJKnNrYjsKKwl1bnNpZ25lZCBpbnQJCWJ5dGVzX3NlbnQ7CisJYm9vbAkJ CWxhc3Q7CisKKwlERUZJTkVfRE1BX1VOTUFQX0FERFIoZG1hX2FkZHIpOworCURFRklORV9ETUFf VU5NQVBfTEVOKGRtYV9sZW4pOworfTsKKworc3RydWN0IGJjbWFzcF9yZXMgeworCS8qIFBlciBp bnRlcmZhY2UgcmVzb3VyY2VzICovCisJLyogUG9ydCAqLworCXZvaWQgX19pb21lbQkJKnVtYWM7 CisJdm9pZCBfX2lvbWVtCQkqdW1hYzJmYjsKKwl2b2lkIF9faW9tZW0JCSpyZ21paTsKKworCS8q IFRYIHNsb3dwYXRoL2NvbmZpZ3VyYXRpb24gKi8KKwl2b2lkIF9faW9tZW0JCSp0eF9zcGJfY3Ry bDsKKwl2b2lkIF9faW9tZW0JCSp0eF9zcGJfdG9wOworCXZvaWQgX19pb21lbQkJKnR4X2Vwa3Rf Y29yZTsKKwl2b2lkIF9faW9tZW0JCSp0eF9wYXVzZV9jdHJsOworfTsKKworI2RlZmluZSBERVND X0FERFIoeCkJCSgoeCkgJiBHRU5NQVNLX1VMTCgzOSwgMCkpCisjZGVmaW5lIERFU0NfRkxBR1Mo eCkJCSgoeCkgJiBHRU5NQVNLX1VMTCg2MywgNDApKQorCitzdHJ1Y3QgYmNtYXNwX2Rlc2Mgewor CXU2NAkJYnVmOworCSNkZWZpbmUgREVTQ19DSEtTVU0JQklUX1VMTCg0MCkKKwkjZGVmaW5lIERF U0NfQ1JDX0VSUglCSVRfVUxMKDQxKQorCSNkZWZpbmUgREVTQ19SWF9TWU1fRVJSCUJJVF9VTEwo NDIpCisJI2RlZmluZSBERVNDX05PX09DVF9BTE4gQklUX1VMTCg0MykKKwkjZGVmaW5lIERFU0Nf UEtUX1RSVUMJQklUX1VMTCg0NCkKKwkvKiAgMzk6MCAoVFgvUlgpIGJpdHMgMC0zOSBvZiBidWYg YWRkcgorCSAqICAgIDQwIChSWCkgY2hlY2tzdW0KKwkgKiAgICA0MSAoUlgpIGNyY19lcnJvcgor CSAqICAgIDQyIChSWCkgcnhfc3ltYm9sX2Vycm9yCisJICogICAgNDMgKFJYKSBub25fb2N0ZXRf YWxpZ25lZAorCSAqICAgIDQ0IChSWCkgcGt0X3RydW5jYXRlZAorCSAqICAgIDQ1IFJlc2VydmVk CisJICogNTY6NDYgKFJYKSBtYWNfZmlsdGVyX2lkCisJICogNjA6NTcgKFJYKSByeF9wb3J0X251 bSAoMC11bmljbWFjMCwgMS11bmltYWMxKQorCSAqICAgIDYxIFJlc2VydmVkCisJICogNjM6NjIg KFRYKSBmb3J3YXJkIENSQywgb3ZlcndyaXRlIENSQworCSAqLworCXUzMgkJc2l6ZTsKKwl1MzIJ CWZsYWdzOworCSNkZWZpbmUgREVTQ19JTlRfRU4gICAgIEJJVCgwKQorCSNkZWZpbmUgREVTQ19T T0YJQklUKDEpCisJI2RlZmluZSBERVNDX0VPRglCSVQoMikKKwkjZGVmaW5lIERFU0NfRVBLVF9D TUQgICBCSVQoMykKKwkjZGVmaW5lIERFU0NfU0NSQU1fU1QgICBCSVQoOCkKKwkjZGVmaW5lIERF U0NfU0NSQU1fRU5EICBCSVQoOSkKKwkjZGVmaW5lIERFU0NfUENQUCAgICAgICBCSVQoMTApCisJ I2RlZmluZSBERVNDX1BQUFAgICAgICAgQklUKDExKQorCS8qICAgICAwIChUWCkgdHhfaW50X2Vu CisJICogICAgIDEgKFRYL1JYKSBTT0YKKwkgKiAgICAgMiAoVFgvUlgpIEVPRgorCSAqICAgICAz IChUWCkgZXBrdF9jb21tYW5kCisJICogICA2OjQgKFRYKSBQQQorCSAqICAgICA3IChUWCkgcGF1 c2UgYXQgZGVzYyBlbmQKKwkgKiAgICAgOCAoVFgpIHNjcmFtX3N0YXJ0CisJICogICAgIDkgKFRY KSBzY3JhbV9lbmQKKwkgKiAgICAxMCAoVFgpIFBDUFAKKwkgKiAgICAxMSAoVFgpIFBQUFAKKwkg KiAxNDoxMiBSZXNlcnZlZAorCSAqICAgIDE1IChUWCkgcGlkIGNoIFZhbGlkCisJICogMTk6MTYg KFRYKSBkYXRhX3BrdF90eXBlCisJICogMzI6MjAgKFRYKSBwaWRfY2hhbm5lbCAoUlgpIG53X2Zp bHRlcl9pZAorCSAqLworfTsKKworLyogUngvVHggY29tbW9uIGNvdW50ZXIgZ3JvdXAgKi8KK3N0 cnVjdCBiY21hc3BfcGt0X2NvdW50ZXJzIHsKKwl1MzIJY250XzY0OwkJLyogUk8gUmVjZWl2ZWQv VHJhbnNtaXR0ZWQgNjQgYnl0ZXMgcGFja2V0ICovCisJdTMyCWNudF8xMjc7CS8qIFJPIFJ4L1R4 IDEyNyBieXRlcyBwYWNrZXQgKi8KKwl1MzIJY250XzI1NTsJLyogUk8gUngvVHggNjUtMjU1IGJ5 dGVzIHBhY2tldCAqLworCXUzMgljbnRfNTExOwkvKiBSTyBSeC9UeCAyNTYtNTExIGJ5dGVzIHBh Y2tldCAqLworCXUzMgljbnRfMTAyMzsJLyogUk8gUngvVHggNTEyLTEwMjMgYnl0ZXMgcGFja2V0 ICovCisJdTMyCWNudF8xNTE4OwkvKiBSTyBSeC9UeCAxMDI0LTE1MTggYnl0ZXMgcGFja2V0ICov CisJdTMyCWNudF9tZ3Y7CS8qIFJPIFJ4L1R4IDE1MTktMTUyMiBnb29kIFZMQU4gcGFja2V0ICov CisJdTMyCWNudF8yMDQ3OwkvKiBSTyBSeC9UeCAxNTIyLTIwNDcgYnl0ZXMgcGFja2V0Ki8KKwl1 MzIJY250XzQwOTU7CS8qIFJPIFJ4L1R4IDIwNDgtNDA5NSBieXRlcyBwYWNrZXQqLworCXUzMglj bnRfOTIxNjsJLyogUk8gUngvVHggNDA5Ni05MjE2IGJ5dGVzIHBhY2tldCovCit9OworCisvKiBS U1YsIFJlY2VpdmUgU3RhdHVzIFZlY3RvciAqLworc3RydWN0IGJjbWFzcF9yeF9jb3VudGVycyB7 CisJc3RydWN0ICBiY21hc3BfcGt0X2NvdW50ZXJzIHBrdF9jbnQ7CisJdTMyCXBrdDsJCS8qIFJP ICgweDQyOCkgUmVjZWl2ZWQgcGt0IGNvdW50Ki8KKwl1MzIJYnl0ZXM7CQkvKiBSTyBSZWNlaXZl ZCBieXRlIGNvdW50ICovCisJdTMyCW1jYTsJCS8qIFJPICMgb2YgUmVjZWl2ZWQgbXVsdGljYXN0 IHBrdCAqLworCXUzMgliY2E7CQkvKiBSTyAjIG9mIFJlY2VpdmUgYnJvYWRjYXN0IHBrdCAqLwor CXUzMglmY3M7CQkvKiBSTyAjIG9mIFJlY2VpdmVkIEZDUyBlcnJvciAgKi8KKwl1MzIJY2Y7CQkv KiBSTyAjIG9mIFJlY2VpdmVkIGNvbnRyb2wgZnJhbWUgcGt0Ki8KKwl1MzIJcGY7CQkvKiBSTyAj IG9mIFJlY2VpdmVkIHBhdXNlIGZyYW1lIHBrdCAqLworCXUzMgl1bzsJCS8qIFJPICMgb2YgdW5r bm93biBvcCBjb2RlIHBrdCAqLworCXUzMglhbG47CQkvKiBSTyAjIG9mIGFsaWdubWVudCBlcnJv ciBjb3VudCAqLworCXUzMglmbHI7CQkvKiBSTyAjIG9mIGZyYW1lIGxlbmd0aCBvdXQgb2YgcmFu Z2UgY291bnQgKi8KKwl1MzIJY2RlOwkJLyogUk8gIyBvZiBjb2RlIGVycm9yIHBrdCAqLworCXUz MglmY3I7CQkvKiBSTyAjIG9mIGNhcnJpZXIgc2Vuc2UgZXJyb3IgcGt0ICovCisJdTMyCW92cjsJ CS8qIFJPICMgb2Ygb3ZlcnNpemUgcGt0Ki8KKwl1MzIJamJyOwkJLyogUk8gIyBvZiBqYWJiZXIg Y291bnQgKi8KKwl1MzIJbXR1ZTsJCS8qIFJPICMgb2YgTVRVIGVycm9yIHBrdCovCisJdTMyCXBv azsJCS8qIFJPICMgb2YgUmVjZWl2ZWQgZ29vZCBwa3QgKi8KKwl1MzIJdWM7CQkvKiBSTyAjIG9m IHVuaWNhc3QgcGt0ICovCisJdTMyCXBwcDsJCS8qIFJPICMgb2YgUFBQIHBrdCAqLworCXUzMgly Y3JjOwkJLyogUk8gKDB4NDcwKSwjIG9mIENSQyBtYXRjaCBwa3QgKi8KK307CisKKy8qIFRTViwg VHJhbnNtaXQgU3RhdHVzIFZlY3RvciAqLworc3RydWN0IGJjbWFzcF90eF9jb3VudGVycyB7CisJ c3RydWN0IGJjbWFzcF9wa3RfY291bnRlcnMgcGt0X2NudDsKKwl1MzIJcGt0czsJCS8qIFJPICgw eDRhOCkgVHJhbnNtaXR0ZWQgcGt0ICovCisJdTMyCW1jYTsJCS8qIFJPICMgb2YgeG1pdGVkIG11 bHRpY2FzdCBwa3QgKi8KKwl1MzIJYmNhOwkJLyogUk8gIyBvZiB4bWl0ZWQgYnJvYWRjYXN0IHBr dCAqLworCXUzMglwZjsJCS8qIFJPICMgb2YgeG1pdGVkIHBhdXNlIGZyYW1lIGNvdW50ICovCisJ dTMyCWNmOwkJLyogUk8gIyBvZiB4bWl0ZWQgY29udHJvbCBmcmFtZSBjb3VudCAqLworCXUzMglm Y3M7CQkvKiBSTyAjIG9mIHhtaXRlZCBGQ1MgZXJyb3IgY291bnQgKi8KKwl1MzIJb3ZyOwkJLyog Uk8gIyBvZiB4bWl0ZWQgb3ZlcnNpemUgcGt0ICovCisJdTMyCWRyZjsJCS8qIFJPICMgb2YgeG1p dGVkIGRlZmVycmFsIHBrdCAqLworCXUzMgllZGY7CQkvKiBSTyAjIG9mIHhtaXRlZCBFeGNlc3Np dmUgZGVmZXJyYWwgcGt0Ki8KKwl1MzIJc2NsOwkJLyogUk8gIyBvZiB4bWl0ZWQgc2luZ2xlIGNv bGxpc2lvbiBwa3QgKi8KKwl1MzIJbWNsOwkJLyogUk8gIyBvZiB4bWl0ZWQgbXVsdGlwbGUgY29s bGlzaW9uIHBrdCovCisJdTMyCWxjbDsJCS8qIFJPICMgb2YgeG1pdGVkIGxhdGUgY29sbGlzaW9u IHBrdCAqLworCXUzMgllY2w7CQkvKiBSTyAjIG9mIHhtaXRlZCBleGNlc3NpdmUgY29sbGlzaW9u IHBrdCovCisJdTMyCWZyZzsJCS8qIFJPICMgb2YgeG1pdGVkIGZyYWdtZW50cyBwa3QqLworCXUz MgluY2w7CQkvKiBSTyAjIG9mIHhtaXRlZCB0b3RhbCBjb2xsaXNpb24gY291bnQgKi8KKwl1MzIJ amJyOwkJLyogUk8gIyBvZiB4bWl0ZWQgamFiYmVyIGNvdW50Ki8KKwl1MzIJYnl0ZXM7CQkvKiBS TyAjIG9mIHhtaXRlZCBieXRlIGNvdW50ICovCisJdTMyCXBvazsJCS8qIFJPICMgb2YgeG1pdGVk IGdvb2QgcGt0ICovCisJdTMyCXVjOwkJLyogUk8gKDB4MHg0ZjApIyBvZiB4bWl0ZWQgdW5pdGNh c3QgcGt0ICovCit9OworCitzdHJ1Y3QgYmNtYXNwX21pYl9jb3VudGVycyB7CisJc3RydWN0IGJj bWFzcF9yeF9jb3VudGVycyByeDsKKwlzdHJ1Y3QgYmNtYXNwX3R4X2NvdW50ZXJzIHR4OworCXUz MglyeF9ydW50X2NudDsKKwl1MzIJcnhfcnVudF9mY3M7CisJdTMyCXJ4X3J1bnRfZmNzX2FsaWdu OworCXUzMglyeF9ydW50X2J5dGVzOworCXUzMgllZHBrdF90czsKKwl1MzIJZWRwa3RfcnhfcGt0 X2NudDsKKwl1MzIJZWRwa3RfaGRyX2V4dF9jbnQ7CisJdTMyCWVkcGt0X2hkcl9vdXRfY250Owor CXUzMgl1bWFjX2ZybV9jbnQ7CisJdTMyCWZiX2ZybV9jbnQ7CisJdTMyCWZiX291dF9mcm1fY250 OworCXUzMglmYl9maWx0X291dF9mcm1fY250OworCXUzMglmYl9yeF9maWZvX2RlcHRoOworCXUz MglhbGxvY19yeF9idWZmX2ZhaWxlZDsKKwl1MzIJYWxsb2Nfcnhfc2tiX2ZhaWxlZDsKKwl1MzIJ cnhfZG1hX2ZhaWxlZDsKKwl1MzIJdHhfZG1hX2ZhaWxlZDsKKwl1MzIJbWNfZmlsdGVyc19mdWxs X2NudDsKKwl1MzIJdWNfZmlsdGVyc19mdWxsX2NudDsKKwl1MzIJZmlsdGVyc19jb21iaW5lX2Nu dDsKKwl1MzIJcHJvbWlzY19maWx0ZXJzX2NudDsKKwl1MzIJdHhfcmVhbGxvY19vZmZsb2FkX2Zh aWxlZDsKKwl1MzIJdHhfcmVhbGxvY19vZmZsb2FkOworfTsKKworc3RydWN0IGJjbWFzcF9pbnRm OworCitzdHJ1Y3QgYmNtYXNwX2ludGZfb3BzIHsKKwl1bnNpZ25lZCBsb25nICgqcnhfZGVzY19y ZWFkKShzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYpOworCXZvaWQgKCpyeF9idWZmZXJfd3JpdGUp KHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZiwgZG1hX2FkZHJfdCBhZGRyKTsKKwl2b2lkICgqcnhf ZGVzY193cml0ZSkoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmLCBkbWFfYWRkcl90IGFkZHIpOwor CXVuc2lnbmVkIGxvbmcgKCp0eF9yZWFkKShzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYpOworCXZv aWQgKCp0eF93cml0ZSkoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmLCBkbWFfYWRkcl90IGFkZHIp OworfTsKKworc3RydWN0IGJjbWFzcF9pbnRmIHsKKwlzdHJ1Y3QgbmV0X2RldmljZQkqbmRldjsK KwlzdHJ1Y3QgYmNtYXNwX3ByaXYJKnBhcmVudDsKKworCS8qIEFTUCBDaCAqLworCWludAkJCWNo YW5uZWw7CisJaW50CQkJcG9ydDsKKwljb25zdCBzdHJ1Y3QgYmNtYXNwX2ludGZfb3BzCSpvcHM7 CisKKwlzdHJ1Y3QgbmFwaV9zdHJ1Y3QJdHhfbmFwaTsKKwkvKiBUWCByaW5nLCBzdGFydHMgb24g YSBuZXcgY2FjaGVsaW5lIGJvdW5kYXJ5ICovCisJdm9pZCBfX2lvbWVtCQkqdHhfc3BiX2RtYTsK KwlpbnQJCQl0eF9zcGJfaW5kZXg7CisJaW50CQkJdHhfc3BiX2NsZWFuX2luZGV4OworCXN0cnVj dCBiY21hc3BfZGVzYwkqdHhfc3BiX2NwdTsKKwlkbWFfYWRkcl90CQl0eF9zcGJfZG1hX2FkZHI7 CisJZG1hX2FkZHJfdAkJdHhfc3BiX2RtYV92YWxpZDsKKwlkbWFfYWRkcl90CQl0eF9zcGJfZG1h X3JlYWQ7CisJc3RydWN0IGJjbWFzcF90eF9jYgkqdHhfY2JzOworCS8qIFR4IHJpbmcgbG9jayAq LworCXNwaW5sb2NrX3QJCXR4X2xvY2s7CisKKwkvKiBSWCByaW5nLCBzdGFydHMgb24gYSBuZXcg Y2FjaGVsaW5lIGJvdW5kYXJ5ICovCisJdm9pZCBfX2lvbWVtCQkqcnhfZWRwa3RfY2ZnOworCXZv aWQgX19pb21lbQkJKnJ4X2VkcGt0X2RtYTsKKwlpbnQJCQlyeF9lZHBrdF9pbmRleDsKKwlpbnQJ CQlyeF9idWZfb3JkZXI7CisJc3RydWN0IGJjbWFzcF9kZXNjCSpyeF9lZHBrdF9jcHU7CisJZG1h X2FkZHJfdAkJcnhfZWRwa3RfZG1hX2FkZHI7CisJZG1hX2FkZHJfdAkJcnhfZWRwa3RfZG1hX3Jl YWQ7CisKKwkvKiBSWCBidWZmZXIgcHJlZmV0Y2hlciByaW5nKi8KKwl2b2lkCQkJKnJ4X3Jpbmdf Y3B1OworCWRtYV9hZGRyX3QJCXJ4X3JpbmdfZG1hOworCWRtYV9hZGRyX3QJCXJ4X3JpbmdfZG1h X3ZhbGlkOworCXN0cnVjdCBuYXBpX3N0cnVjdAlyeF9uYXBpOworCisJc3RydWN0IGJjbWFzcF9y ZXMJcmVzOworCXVuc2lnbmVkIGludAkJY3JjX2Z3ZDsKKworCS8qIFBIWSBkZXZpY2UgKi8KKwlz dHJ1Y3QgZGV2aWNlX25vZGUJKnBoeV9kbjsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUJKm5kZXZfZG47 CisJcGh5X2ludGVyZmFjZV90CQlwaHlfaW50ZXJmYWNlOworCWJvb2wJCQlpbnRlcm5hbF9waHk7 CisJaW50CQkJb2xkX3BhdXNlOworCWludAkJCW9sZF9saW5rOworCWludAkJCW9sZF9kdXBsZXg7 CisKKwl1MzIJCQltc2dfZW5hYmxlOworCS8qIE1JQiBjb3VudGVycyAqLworCXN0cnVjdCBiY21h c3BfbWliX2NvdW50ZXJzIG1pYjsKKworCS8qIFdha2Utb24tTEFOICovCisJdTMyCQkJd29sb3B0 czsKKwl1OAkJCXNvcGFzc1tTT1BBU1NfTUFYXTsKKwlpbnQJCQl3b2xfaXJxOworCXVuc2lnbmVk IGludAkJd29sX2lycV9lbmFibGVkOjE7CisKKwlzdHJ1Y3QgZXRodG9vbF9lZWUJZWVlOworfTsK KworI2RlZmluZSBOVU1fTkVUX0ZJTFRFUlMJCQkJMzIKK3N0cnVjdCBiY21hc3BfbmV0X2ZpbHRl ciB7CisJc3RydWN0IGV0aHRvb2xfcnhfZmxvd19zcGVjCWZzOworCisJYm9vbAkJCQljbGFpbWVk OworCWJvb2wJCQkJd2FrZV9maWx0ZXI7CisKKwlpbnQJCQkJcG9ydDsKKwl1bnNpZ25lZCBpbnQJ CQlod19pbmRleDsKK307CisKKyNkZWZpbmUgTlVNX01EQV9GSUxURVJTCQkJCTMyCitzdHJ1Y3Qg YmNtYXNwX21kYV9maWx0ZXIgeworCS8qIEN1cnJlbnQgb3duZXIgb2YgdGhpcyBmaWx0ZXIgKi8K KwlpbnQJCXBvcnQ7CisJYm9vbAkJZW47CisJdTgJCWFkZHJbRVRIX0FMRU5dOworCXU4CQltYXNr W0VUSF9BTEVOXTsKK307CisKK3N0cnVjdCBiY21hc3BfcHJpdjsKKworc3RydWN0IGJjbWFzcF9o d19pbmZvIHsKKwl1MzIJCXJ4X2N0cmxfZmx1c2g7CisJdTMyCQl1bWFjMmZiOworCXUzMgkJcnhf Y3RybF9mYl9vdXRfZnJhbWVfY291bnQ7CisJdTMyCQlyeF9jdHJsX2ZiX2ZpbHRfb3V0X2ZyYW1l X2NvdW50OworCXUzMgkJcnhfY3RybF9mYl9yeF9maWZvX2RlcHRoOworfTsKKworc3RydWN0IGJj bWFzcF9wbGF0X2RhdGEgeworCXZvaWQgKCppbml0X3dvbCkoc3RydWN0IGJjbWFzcF9wcml2ICpw cml2KTsKKwl2b2lkICgqZW5hYmxlX3dvbCkoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmLCBib29s IGVuKTsKKwl2b2lkICgqZGVzdHJveV93b2wpKHN0cnVjdCBiY21hc3BfcHJpdiAqcHJpdik7CisJ c3RydWN0IGJjbWFzcF9od19pbmZvCQkqaHdfaW5mbzsKK307CisKK3N0cnVjdCBiY21hc3BfcHJp diB7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZQkJKnBkZXY7CisJc3RydWN0IGNsawkJCSpjbGs7 CisKKwlpbnQJCQkJaXJxOworCXUzMgkJCQlpcnFfbWFzazsKKworCWludAkJCQl3b2xfaXJxOwor CXVuc2lnbmVkIGxvbmcJCQl3b2xfaXJxX2VuYWJsZWRfbWFzazsKKwkvKiBXb2wgbG9jayAqLwor CXN0cnVjdCBtdXRleAkJCXdvbF9sb2NrOworCXZvaWQgKCppbml0X3dvbCkoc3RydWN0IGJjbWFz cF9wcml2ICpwcml2KTsKKwl2b2lkICgqZW5hYmxlX3dvbCkoc3RydWN0IGJjbWFzcF9pbnRmICpp bnRmLCBib29sIGVuKTsKKwl2b2lkICgqZGVzdHJveV93b2wpKHN0cnVjdCBiY21hc3BfcHJpdiAq cHJpdik7CisKKwl2b2lkIF9faW9tZW0JCQkqYmFzZTsKKwlzdHJ1Y3QJYmNtYXNwX2h3X2luZm8J CSpod19pbmZvOworCisJdW5zaWduZWQgaW50CQkJaW50Zl9jb3VudDsKKwlzdHJ1Y3QgYmNtYXNw X2ludGYJCSoqaW50ZnM7CisKKwlzdHJ1Y3QgYmNtYXNwX21kYV9maWx0ZXIJbWRhX2ZpbHRlcnNb TlVNX01EQV9GSUxURVJTXTsKKwl1bnNpZ25lZCBpbnQJCQlmaWx0ZXJzX2NvdW50OworCS8qIE1B QyBkZXN0aW5hdGlvbiBhZGRyZXNzIGZpbHRlcnMgbG9jayAqLworCXNwaW5sb2NrX3QJCQltZGFf bG9jazsKKworCS8qIFByb3RlY3RzIGFjY2Vzc2VzIHRvIEFTUF9DVFJMX0NMT0NLX0NUUkwgKi8K KwlzcGlubG9ja190CQkJY2xrX2xvY2s7CisKKwlzdHJ1Y3QgYmNtYXNwX25ldF9maWx0ZXIJbmV0 X2ZpbHRlcnNbTlVNX05FVF9GSUxURVJTXTsKKwkvKiBNYXggYW1vdW50IG9mIGZpbHRlcnMgbWlu dXMgcmVzZXJ2ZWQgZmlsdGVycyAqLworCXVuc2lnbmVkIGludAkJCW5ldF9maWx0ZXJzX2NvdW50 X21heDsKKwkvKiBOZXR3b3JrIGZpbHRlciBsb2NrICovCisJc3RydWN0IG11dGV4CQkJbmV0X2xv Y2s7Cit9OworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgYmNtYXNwX2ludGZfcnhfZGVz Y19yZWFkKHN0cnVjdCBiY21hc3BfaW50ZiAqaT0KbnRmKQoreworCXJldHVybiBpbnRmLT5vcHMt PnJ4X2Rlc2NfcmVhZChpbnRmKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGJjbWFzcF9pbnRm X3J4X2J1ZmZlcl93cml0ZShzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsCisJCQkJCSAgICAgICBk bWFfYWRkcl90IGFkZHIpCit7CisJaW50Zi0+b3BzLT5yeF9idWZmZXJfd3JpdGUoaW50ZiwgYWRk cik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBiY21hc3BfaW50Zl9yeF9kZXNjX3dyaXRlKHN0 cnVjdCBiY21hc3BfaW50ZiAqaW50ZiwKKwkJCQkJICAgICBkbWFfYWRkcl90IGFkZHIpCit7CisJ aW50Zi0+b3BzLT5yeF9kZXNjX3dyaXRlKGludGYsIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5l IHVuc2lnbmVkIGxvbmcgYmNtYXNwX2ludGZfdHhfcmVhZChzdHJ1Y3QgYmNtYXNwX2ludGYgKmlu dGYpCit7CisJcmV0dXJuIGludGYtPm9wcy0+dHhfcmVhZChpbnRmKTsKK30KKworc3RhdGljIGlu bGluZSB2b2lkIGJjbWFzcF9pbnRmX3R4X3dyaXRlKHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZiwK KwkJCQkJZG1hX2FkZHJfdCBhZGRyKQoreworCWludGYtPm9wcy0+dHhfd3JpdGUoaW50ZiwgYWRk cik7Cit9CisKKyNkZWZpbmUgX19CQ01BU1BfSU9fTUFDUk8obmFtZSwgbSkJCQkJCVwKK3N0YXRp YyBpbmxpbmUgdTMyIG5hbWUjI19ybChzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsIHUzMiBvZmYp CQlcCit7CQkJCQkJCQkJXAorCXUzMiByZWcgPTNEIHJlYWRsX3JlbGF4ZWQoaW50Zi0+bSArIG9m Zik7CQkJCVwKKwlyZXR1cm4gcmVnOwkJCQkJCQlcCit9CQkJCQkJCQkJXAorc3RhdGljIGlubGlu ZSB2b2lkIG5hbWUjI193bChzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsIHUzMiB2YWwsIHUzMiBv ZmYpXAorewkJCQkJCQkJCVwKKwl3cml0ZWxfcmVsYXhlZCh2YWwsIGludGYtPm0gKyBvZmYpOwkJ CQlcCit9CisKKyNkZWZpbmUgQkNNQVNQX0lPX01BQ1JPKG5hbWUpCQlfX0JDTUFTUF9JT19NQUNS TyhuYW1lLCByZXMubmFtZSkKKyNkZWZpbmUgQkNNQVNQX0ZQX0lPX01BQ1JPKG5hbWUpCV9fQkNN QVNQX0lPX01BQ1JPKG5hbWUsIG5hbWUpCisKK0JDTUFTUF9JT19NQUNSTyh1bWFjKTsKK0JDTUFT UF9JT19NQUNSTyh1bWFjMmZiKTsKK0JDTUFTUF9JT19NQUNSTyhyZ21paSk7CitCQ01BU1BfRlBf SU9fTUFDUk8odHhfc3BiX2RtYSk7CitCQ01BU1BfSU9fTUFDUk8odHhfc3BiX2N0cmwpOworQkNN QVNQX0lPX01BQ1JPKHR4X3NwYl90b3ApOworQkNNQVNQX0lPX01BQ1JPKHR4X2Vwa3RfY29yZSk7 CitCQ01BU1BfSU9fTUFDUk8odHhfcGF1c2VfY3RybCk7CitCQ01BU1BfRlBfSU9fTUFDUk8ocnhf ZWRwa3RfZG1hKTsKK0JDTUFTUF9GUF9JT19NQUNSTyhyeF9lZHBrdF9jZmcpOworCisjZGVmaW5l IF9fQkNNQVNQX0ZQX0lPX01BQ1JPX1EobmFtZSwgbSkJCQkJCVwKK3N0YXRpYyBpbmxpbmUgdTY0 IG5hbWUjI19ycShzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsIHUzMiBvZmYpCQlcCit7CQkJCQkJ CQkJXAorCXU2NCByZWcgPTNEIHJlYWRxX3JlbGF4ZWQoaW50Zi0+bSArIG9mZik7CQkJCVwKKwly ZXR1cm4gcmVnOwkJCQkJCQlcCit9CQkJCQkJCQkJXAorc3RhdGljIGlubGluZSB2b2lkIG5hbWUj I193cShzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsIHU2NCB2YWwsIHUzMiBvZmYpXAorewkJCQkJ CQkJCVwKKwl3cml0ZXFfcmVsYXhlZCh2YWwsIGludGYtPm0gKyBvZmYpOwkJCQlcCit9CisKKyNk ZWZpbmUgQkNNQVNQX0ZQX0lPX01BQ1JPX1EobmFtZSkJX19CQ01BU1BfRlBfSU9fTUFDUk9fUShu YW1lLCBuYW1lKQorCitCQ01BU1BfRlBfSU9fTUFDUk9fUSh0eF9zcGJfZG1hKTsKK0JDTUFTUF9G UF9JT19NQUNST19RKHJ4X2VkcGt0X2RtYSk7CitCQ01BU1BfRlBfSU9fTUFDUk9fUShyeF9lZHBr dF9jZmcpOworCisjZGVmaW5lIFBLVF9PRkZMT0FEX05PUAkJCSgwIDw8IDI4KQorI2RlZmluZSBQ S1RfT0ZGTE9BRF9IRFJfT1AJCSgxIDw8IDI4KQorI2RlZmluZSAgUEtUX09GRkxPQURfSERSX1dS QkFDSwkJQklUKDE5KQorI2RlZmluZSAgUEtUX09GRkxPQURfSERSX0NPVU5UKHgpCSgoeCkgPDwg MTYpCisjZGVmaW5lICBQS1RfT0ZGTE9BRF9IRFJfU0laRV8xKHgpCSgoeCkgPDwgNCkKKyNkZWZp bmUgIFBLVF9PRkZMT0FEX0hEUl9TSVpFXzIoeCkJKHgpCisjZGVmaW5lICBQS1RfT0ZGTE9BRF9I RFIyX1NJWkVfMih4KQkoKHgpIDw8IDI0KQorI2RlZmluZSAgUEtUX09GRkxPQURfSERSMl9TSVpF XzMoeCkJKCh4KSA8PCAxMikKKyNkZWZpbmUgIFBLVF9PRkZMT0FEX0hEUjJfU0laRV80KHgpCSh4 KQorI2RlZmluZSBQS1RfT0ZGTE9BRF9FUEtUX09QCQkoMiA8PCAyOCkKKyNkZWZpbmUgIFBLVF9P RkZMT0FEX0VQS1RfV1JCQUNLCUJJVCgyMykKKyNkZWZpbmUgIFBLVF9PRkZMT0FEX0VQS1RfSVAo eCkJCSgoeCkgPDwgMjEpCisjZGVmaW5lICBQS1RfT0ZGTE9BRF9FUEtUX1RQKHgpCQkoKHgpIDw8 IDE5KQorI2RlZmluZSAgUEtUX09GRkxPQURfRVBLVF9MRU4oeCkJKCh4KSA8PCAxNikKKyNkZWZp bmUgIFBLVF9PRkZMT0FEX0VQS1RfQ1NVTV9MMwlCSVQoMTUpCisjZGVmaW5lICBQS1RfT0ZGTE9B RF9FUEtUX0NTVU1fTDIJQklUKDE0KQorI2RlZmluZSAgUEtUX09GRkxPQURfRVBLVF9JRCh4KQkJ KCh4KSA8PCAxMikKKyNkZWZpbmUgIFBLVF9PRkZMT0FEX0VQS1RfU0VRKHgpCSgoeCkgPDwgMTAp CisjZGVmaW5lICBQS1RfT0ZGTE9BRF9FUEtUX1RTKHgpCQkoKHgpIDw8IDgpCisjZGVmaW5lICBQ S1RfT0ZGTE9BRF9FUEtUX0JMT0MoeCkJKHgpCisjZGVmaW5lIFBLVF9PRkZMT0FEX0VORF9PUAkJ KDcgPDwgMjgpCisKK3N0cnVjdCBiY21hc3BfcGt0X29mZmxvYWQgeworCV9fYmUzMgkJbm9wOwor CV9fYmUzMgkJaGVhZGVyOworCV9fYmUzMgkJaGVhZGVyMjsKKwlfX2JlMzIJCWVwa3Q7CisJX19i ZTMyCQllbmQ7Cit9OworCisjZGVmaW5lIEJDTUFTUF9DT1JFX0lPX01BQ1JPKG5hbWUsIG9mZnNl dCkJCQkJXAorc3RhdGljIGlubGluZSB1MzIgbmFtZSMjX2NvcmVfcmwoc3RydWN0IGJjbWFzcF9w cml2ICpwcml2LAkJXAorCQkJCSB1MzIgb2ZmKQkJCQlcCit7CQkJCQkJCQkJXAorCXUzMiByZWcg PTNEIHJlYWRsX3JlbGF4ZWQocHJpdi0+YmFzZSArIChvZmZzZXQpICsgb2ZmKTsJCVwKKwlyZXR1 cm4gcmVnOwkJCQkJCQlcCit9CQkJCQkJCQkJXAorc3RhdGljIGlubGluZSB2b2lkIG5hbWUjI19j b3JlX3dsKHN0cnVjdCBiY21hc3BfcHJpdiAqcHJpdiwJCVwKKwkJCQkgIHUzMiB2YWwsIHUzMiBv ZmYpCQkJXAorewkJCQkJCQkJCVwKKwl3cml0ZWxfcmVsYXhlZCh2YWwsIHByaXYtPmJhc2UgKyAo b2Zmc2V0KSArIG9mZik7CQlcCit9CisKK0JDTUFTUF9DT1JFX0lPX01BQ1JPKGludHIyLCBBU1Bf SU5UUjJfT0ZGU0VUKTsKK0JDTUFTUF9DT1JFX0lPX01BQ1JPKHdha2V1cF9pbnRyMiwgQVNQX1dB S0VVUF9JTlRSMl9PRkZTRVQpOworQkNNQVNQX0NPUkVfSU9fTUFDUk8odHhfYW5hbHl0aWNzLCBB U1BfVFhfQU5BTFlUSUNTX09GRlNFVCk7CitCQ01BU1BfQ09SRV9JT19NQUNSTyhyeF9hbmFseXRp Y3MsIEFTUF9SWF9BTkFMWVRJQ1NfT0ZGU0VUKTsKK0JDTUFTUF9DT1JFX0lPX01BQ1JPKHJ4X2N0 cmwsIEFTUF9SWF9DVFJMX09GRlNFVCk7CitCQ01BU1BfQ09SRV9JT19NQUNSTyhyeF9maWx0ZXIs IEFTUF9SWF9GSUxURVJfT0ZGU0VUKTsKK0JDTUFTUF9DT1JFX0lPX01BQ1JPKHJ4X2VkcGt0LCBB U1BfRURQS1RfT0ZGU0VUKTsKK0JDTUFTUF9DT1JFX0lPX01BQ1JPKGN0cmwsIEFTUF9DVFJMKTsK Kworc3RydWN0IGJjbWFzcF9pbnRmICpiY21hc3BfaW50ZXJmYWNlX2NyZWF0ZShzdHJ1Y3QgYmNt YXNwX3ByaXYgKnByaXYsCisJCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5kZXZfZG4pOwor Cit2b2lkIGJjbWFzcF9pbnRlcmZhY2VfZGVzdHJveShzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYs IGJvb2wgdW5yZWdpc3Rlcik7CisKK3ZvaWQgYmNtYXNwX2VuYWJsZV90eF9pcnEoc3RydWN0IGJj bWFzcF9pbnRmICppbnRmLCBpbnQgZW4pOworCit2b2lkIGJjbWFzcF9lbmFibGVfcnhfaXJxKHN0 cnVjdCBiY21hc3BfaW50ZiAqaW50ZiwgaW50IGVuKTsKKwordm9pZCBiY21hc3BfZmx1c2hfcnhf cG9ydChzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYpOworCitleHRlcm4gY29uc3Qgc3RydWN0IGV0 aHRvb2xfb3BzIGJjbWFzcF9ldGh0b29sX29wczsKKworaW50IGJjbWFzcF9pbnRlcmZhY2Vfc3Vz cGVuZChzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYpOworCitpbnQgYmNtYXNwX2ludGVyZmFjZV9y ZXN1bWUoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmKTsKKwordm9pZCBiY21hc3Bfc2V0X3Byb21p c2Moc3RydWN0IGJjbWFzcF9pbnRmICppbnRmLCBib29sIGVuKTsKKwordm9pZCBiY21hc3Bfc2V0 X2FsbG11bHRpKHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZiwgYm9vbCBlbik7CisKK3ZvaWQgYmNt YXNwX3NldF9icm9hZChzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsIGJvb2wgZW4pOworCit2b2lk IGJjbWFzcF9zZXRfb2FkZHIoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmLCBjb25zdCB1bnNpZ25l ZCBjaGFyICphZGRyLAorCQkgICAgICBib29sIGVuKTsKKworaW50IGJjbWFzcF9zZXRfZW5fbWRh X2ZpbHRlcihzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsIHVuc2lnbmVkIGNoYXIgKmFkZHIsCisJ CQkgICAgIHVuc2lnbmVkIGNoYXIgKm1hc2spOworCit2b2lkIGJjbWFzcF9kaXNhYmxlX2FsbF9m aWx0ZXJzKHN0cnVjdCBiY21hc3BfaW50ZiAqaW50Zik7CisKK3ZvaWQgYmNtYXNwX2NvcmVfY2xv Y2tfc2V0X2ludGYoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmLCBib29sIGVuKTsKKworc3RydWN0 IGJjbWFzcF9uZXRfZmlsdGVyICpiY21hc3BfbmV0ZmlsdF9nZXRfaW5pdChzdHJ1Y3QgYmNtYXNw X2ludGYgKmludGYsCisJCQkJCQkgIGludCBsb2MsIGJvb2wgd2FrZV9maWx0ZXIsCisJCQkJCQkg IGJvb2wgaW5pdCk7CisKK2Jvb2wgYmNtYXNwX25ldGZpbHRfY2hlY2tfZHVwKHN0cnVjdCBiY21h c3BfaW50ZiAqaW50ZiwKKwkJCSAgICAgIHN0cnVjdCBldGh0b29sX3J4X2Zsb3dfc3BlYyAqZnMp OworCit2b2lkIGJjbWFzcF9uZXRmaWx0X3JlbGVhc2Uoc3RydWN0IGJjbWFzcF9pbnRmICppbnRm LAorCQkJICAgIHN0cnVjdCBiY21hc3BfbmV0X2ZpbHRlciAqbmZpbHQpOworCitpbnQgYmNtYXNw X25ldGZpbHRfZ2V0X2FjdGl2ZShzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYpOworCit2b2lkIGJj bWFzcF9uZXRmaWx0X2dldF9hbGxfYWN0aXZlKHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZiwgdTMy ICpydWxlX2xvYz0KcywKKwkJCQkgICB1MzIgKnJ1bGVfY250KTsKKwordm9pZCBiY21hc3BfbmV0 ZmlsdF9zdXNwZW5kKHN0cnVjdCBiY21hc3BfaW50ZiAqaW50Zik7CisKK3ZvaWQgYmNtYXNwX2Vl ZV9lbmFibGVfc2V0KHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZiwgYm9vbCBlbmFibGUpOworI2Vu ZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFz cF9ldGh0b29sLmMgYi9kcml2ZXJzLz0KbmV0L2V0aGVybmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNw X2V0aHRvb2wuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmNlMDRh YjIxNjYxNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29t L2FzcDIvYmNtYXNwX2V0aHRvb2wuYwpAQCAtMCwwICsxLDU2OCBAQAorLy8gU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEdQTC0yLjAKKyNkZWZpbmUgcHJfZm10KGZtdCkJCQkJImJjbWFzcF9ldGh0 b29sOiAiIGZtdAorCisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorI2luY2x1ZGUgPGxpbnV4 L2V0aHRvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51 eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgImJjbWFzcC5oIgorI2luY2x1ZGUgImJj bWFzcF9pbnRmX2RlZnMuaCIKKworLyogc3RhbmRhcmQgZXRodG9vbCBzdXBwb3J0IGZ1bmN0aW9u cy4gKi8KK2VudW0gYmNtYXNwX3N0YXRfdHlwZSB7CisJQkNNQVNQX1NUQVRfTkVUREVWID0zRCAt MSwKKwlCQ01BU1BfU1RBVF9NSUJfUlgsCisJQkNNQVNQX1NUQVRfTUlCX1RYLAorCUJDTUFTUF9T VEFUX1JVTlQsCisJQkNNQVNQX1NUQVRfUlhfRURQS1QsCisJQkNNQVNQX1NUQVRfUlhfQ1RSTCwK KwlCQ01BU1BfU1RBVF9TT0ZULAorfTsKKworc3RydWN0IGJjbWFzcF9zdGF0cyB7CisJY2hhciBz dGF0X3N0cmluZ1tFVEhfR1NUUklOR19MRU5dOworCWludCBzdGF0X3NpemVvZjsKKwlpbnQgc3Rh dF9vZmZzZXQ7CisJZW51bSBiY21hc3Bfc3RhdF90eXBlIHR5cGU7CisJLyogcmVnaXN0ZXIgb2Zm c2V0IGZyb20gYmFzZSBmb3IgbWlzYyBjb3VudGVycyAqLworCXUxNiByZWdfb2Zmc2V0OworfTsK KworI2RlZmluZSBTVEFUX05FVERFVihtKSB7IFwKKwkuc3RhdF9zdHJpbmcgPTNEIF9fc3RyaW5n aWZ5KG0pLCBcCisJLnN0YXRfc2l6ZW9mID0zRCBzaXplb2YoKChzdHJ1Y3QgbmV0X2RldmljZV9z dGF0cyAqKTApLT5tKSwgXAorCS5zdGF0X29mZnNldCA9M0Qgb2Zmc2V0b2Yoc3RydWN0IG5ldF9k ZXZpY2Vfc3RhdHMsIG0pLCBcCisJLnR5cGUgPTNEIEJDTUFTUF9TVEFUX05FVERFViwgXAorfQor CisjZGVmaW5lIFNUQVRfQkNNQVNQX01JQihzdHIsIG0sIF90eXBlKSB7IFwKKwkuc3RhdF9zdHJp bmcgPTNEIHN0ciwgXAorCS5zdGF0X3NpemVvZiA9M0Qgc2l6ZW9mKCgoc3RydWN0IGJjbWFzcF9p bnRmICopMCktPm0pLCBcCisJLnN0YXRfb2Zmc2V0ID0zRCBvZmZzZXRvZihzdHJ1Y3QgYmNtYXNw X2ludGYsIG0pLCBcCisJLnR5cGUgPTNEIF90eXBlLCBcCit9CisKKyNkZWZpbmUgU1RBVF9CQ01B U1BfT0ZGU0VUKHN0ciwgbSwgX3R5cGUsIG9mZnNldCkgeyBcCisJLnN0YXRfc3RyaW5nID0zRCBz dHIsIFwKKwkuc3RhdF9zaXplb2YgPTNEIHNpemVvZigoKHN0cnVjdCBiY21hc3BfaW50ZiAqKTAp LT5tKSwgXAorCS5zdGF0X29mZnNldCA9M0Qgb2Zmc2V0b2Yoc3RydWN0IGJjbWFzcF9pbnRmLCBt KSwgXAorCS50eXBlID0zRCBfdHlwZSwgXAorCS5yZWdfb2Zmc2V0ID0zRCBvZmZzZXQsIFwKK30K KworI2RlZmluZSBTVEFUX0JDTUFTUF9NSUJfUlgoc3RyLCBtKSBcCisJU1RBVF9CQ01BU1BfTUlC KHN0ciwgbSwgQkNNQVNQX1NUQVRfTUlCX1JYKQorI2RlZmluZSBTVEFUX0JDTUFTUF9NSUJfVFgo c3RyLCBtKSBcCisJU1RBVF9CQ01BU1BfTUlCKHN0ciwgbSwgQkNNQVNQX1NUQVRfTUlCX1RYKQor I2RlZmluZSBTVEFUX0JDTUFTUF9SVU5UKHN0ciwgbSkgXAorCVNUQVRfQkNNQVNQX01JQihzdHIs IG0sIEJDTUFTUF9TVEFUX1JVTlQpCisjZGVmaW5lIFNUQVRfQkNNQVNQX1JYX0VEUEtUKHN0ciwg bSwgb2Zmc2V0KSBcCisJU1RBVF9CQ01BU1BfT0ZGU0VUKHN0ciwgbSwgQkNNQVNQX1NUQVRfUlhf RURQS1QsIG9mZnNldCkKKyNkZWZpbmUgU1RBVF9CQ01BU1BfUlhfQ1RSTChzdHIsIG0sIG9mZnNl dCkgXAorCVNUQVRfQkNNQVNQX09GRlNFVChzdHIsIG0sIEJDTUFTUF9TVEFUX1JYX0NUUkwsIG9m ZnNldCkKKyNkZWZpbmUgU1RBVF9CQ01BU1BfU09GVF9NSUIobSkgXAorCVNUQVRfQkNNQVNQX01J QihfX3N0cmluZ2lmeShtKSwgbWliLm0sIEJDTUFTUF9TVEFUX1NPRlQpCisKKy8qIFRoZXJlIGlz IGEgMHgxMCBnYXAgaW4gaGFyZHdhcmUgYmV0d2VlbiB0aGUgZW5kIG9mIFJYIGFuZCBiZWdpbm5p bmcgb2YgPQpUWAorICogc3RhdHMgYW5kIHRoZW4gYmV0d2VlbiB0aGUgZW5kIG9mIFRYIHN0YXRz IGFuZCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBSWCA9ClJVTlQuCisgKiBUaGUgc29mdHdhcmUgc3Ry dWN0dXJlIGFscmVhZHkgYWNjb3VudHMgZm9yIHNpemVvZih1MzIpIGJldHdlZW4gbWVtYmVycz0K IHNvCisgKiBuZWVkIHRvIGFkZCAweGMgdG8gb2Zmc2V0IGNvcnJlY3RseSBpbnRvIHRoZSBoYXJk d2FyZSByZWdpc3Rlci4KKyAqLworI2RlZmluZSBCQ01BU1BfU1RBVF9PRkZTRVQJMHhjCisKKy8q IEhhcmR3YXJlIGNvdW50ZXJzIG11c3QgYmUga2VwdCBpbiBzeW5jIGJlY2F1c2UgdGhlIG9yZGVy L29mZnNldAorICogaXMgaW1wb3J0YW50IGhlcmUgKG9yZGVyIGluIHN0cnVjdHVyZSBkZWNsYXJh dGlvbiA9M0Qgb3JkZXIgaW4gaGFyZHdhcmUpCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmNt YXNwX3N0YXRzIGJjbWFzcF9nc3RyaW5nc19zdGF0c1tdID0zRCB7CisJLyogZ2VuZXJhbCBzdGF0 cyAqLworCVNUQVRfTkVUREVWKHJ4X3BhY2tldHMpLAorCVNUQVRfTkVUREVWKHR4X3BhY2tldHMp LAorCVNUQVRfTkVUREVWKHJ4X2J5dGVzKSwKKwlTVEFUX05FVERFVih0eF9ieXRlcyksCisJU1RB VF9ORVRERVYocnhfZXJyb3JzKSwKKwlTVEFUX05FVERFVih0eF9lcnJvcnMpLAorCVNUQVRfTkVU REVWKHJ4X2Ryb3BwZWQpLAorCVNUQVRfTkVUREVWKHR4X2Ryb3BwZWQpLAorCVNUQVRfTkVUREVW KG11bHRpY2FzdCksCisJLyogVW5pTUFDIFJTViBjb3VudGVycyAqLworCVNUQVRfQkNNQVNQX01J Ql9SWCgicnhfNjRfb2N0ZXRzIiwgbWliLnJ4LnBrdF9jbnQuY250XzY0KSwKKwlTVEFUX0JDTUFT UF9NSUJfUlgoInJ4XzY1XzEyN19vY3QiLCBtaWIucngucGt0X2NudC5jbnRfMTI3KSwKKwlTVEFU X0JDTUFTUF9NSUJfUlgoInJ4XzEyOF8yNTVfb2N0IiwgbWliLnJ4LnBrdF9jbnQuY250XzI1NSks CisJU1RBVF9CQ01BU1BfTUlCX1JYKCJyeF8yNTZfNTExX29jdCIsIG1pYi5yeC5wa3RfY250LmNu dF81MTEpLAorCVNUQVRfQkNNQVNQX01JQl9SWCgicnhfNTEyXzEwMjNfb2N0IiwgbWliLnJ4LnBr dF9jbnQuY250XzEwMjMpLAorCVNUQVRfQkNNQVNQX01JQl9SWCgicnhfMTAyNF8xNTE4X29jdCIs IG1pYi5yeC5wa3RfY250LmNudF8xNTE4KSwKKwlTVEFUX0JDTUFTUF9NSUJfUlgoInJ4X3ZsYW5f MTUxOV8xNTIyX29jdCIsIG1pYi5yeC5wa3RfY250LmNudF9tZ3YpLAorCVNUQVRfQkNNQVNQX01J Ql9SWCgicnhfMTUyMl8yMDQ3X29jdCIsIG1pYi5yeC5wa3RfY250LmNudF8yMDQ3KSwKKwlTVEFU X0JDTUFTUF9NSUJfUlgoInJ4XzIwNDhfNDA5NV9vY3QiLCBtaWIucngucGt0X2NudC5jbnRfNDA5 NSksCisJU1RBVF9CQ01BU1BfTUlCX1JYKCJyeF80MDk2XzkyMTZfb2N0IiwgbWliLnJ4LnBrdF9j bnQuY250XzkyMTYpLAorCVNUQVRfQkNNQVNQX01JQl9SWCgicnhfcGt0cyIsIG1pYi5yeC5wa3Qp LAorCVNUQVRfQkNNQVNQX01JQl9SWCgicnhfYnl0ZXMiLCBtaWIucnguYnl0ZXMpLAorCVNUQVRf QkNNQVNQX01JQl9SWCgicnhfbXVsdGljYXN0IiwgbWliLnJ4Lm1jYSksCisJU1RBVF9CQ01BU1Bf TUlCX1JYKCJyeF9icm9hZGNhc3QiLCBtaWIucnguYmNhKSwKKwlTVEFUX0JDTUFTUF9NSUJfUlgo InJ4X2ZjcyIsIG1pYi5yeC5mY3MpLAorCVNUQVRfQkNNQVNQX01JQl9SWCgicnhfY29udHJvbCIs IG1pYi5yeC5jZiksCisJU1RBVF9CQ01BU1BfTUlCX1JYKCJyeF9wYXVzZSIsIG1pYi5yeC5wZiks CisJU1RBVF9CQ01BU1BfTUlCX1JYKCJyeF91bmtub3duIiwgbWliLnJ4LnVvKSwKKwlTVEFUX0JD TUFTUF9NSUJfUlgoInJ4X2FsaWduIiwgbWliLnJ4LmFsbiksCisJU1RBVF9CQ01BU1BfTUlCX1JY KCJyeF9vdXRyYW5nZSIsIG1pYi5yeC5mbHIpLAorCVNUQVRfQkNNQVNQX01JQl9SWCgicnhfY29k ZSIsIG1pYi5yeC5jZGUpLAorCVNUQVRfQkNNQVNQX01JQl9SWCgicnhfY2FycmllciIsIG1pYi5y eC5mY3IpLAorCVNUQVRfQkNNQVNQX01JQl9SWCgicnhfb3ZlcnNpemUiLCBtaWIucngub3ZyKSwK KwlTVEFUX0JDTUFTUF9NSUJfUlgoInJ4X2phYmJlciIsIG1pYi5yeC5qYnIpLAorCVNUQVRfQkNN QVNQX01JQl9SWCgicnhfbXR1X2VyciIsIG1pYi5yeC5tdHVlKSwKKwlTVEFUX0JDTUFTUF9NSUJf UlgoInJ4X2dvb2RfcGt0cyIsIG1pYi5yeC5wb2spLAorCVNUQVRfQkNNQVNQX01JQl9SWCgicnhf dW5pY2FzdCIsIG1pYi5yeC51YyksCisJU1RBVF9CQ01BU1BfTUlCX1JYKCJyeF9wcHAiLCBtaWIu cngucHBwKSwKKwlTVEFUX0JDTUFTUF9NSUJfUlgoInJ4X2NyYyIsIG1pYi5yeC5yY3JjKSwKKwkv KiBVbmlNQUMgVFNWIGNvdW50ZXJzICovCisJU1RBVF9CQ01BU1BfTUlCX1RYKCJ0eF82NF9vY3Rl dHMiLCBtaWIudHgucGt0X2NudC5jbnRfNjQpLAorCVNUQVRfQkNNQVNQX01JQl9UWCgidHhfNjVf MTI3X29jdCIsIG1pYi50eC5wa3RfY250LmNudF8xMjcpLAorCVNUQVRfQkNNQVNQX01JQl9UWCgi dHhfMTI4XzI1NV9vY3QiLCBtaWIudHgucGt0X2NudC5jbnRfMjU1KSwKKwlTVEFUX0JDTUFTUF9N SUJfVFgoInR4XzI1Nl81MTFfb2N0IiwgbWliLnR4LnBrdF9jbnQuY250XzUxMSksCisJU1RBVF9C Q01BU1BfTUlCX1RYKCJ0eF81MTJfMTAyM19vY3QiLCBtaWIudHgucGt0X2NudC5jbnRfMTAyMyks CisJU1RBVF9CQ01BU1BfTUlCX1RYKCJ0eF8xMDI0XzE1MThfb2N0IiwgbWliLnR4LnBrdF9jbnQu Y250XzE1MTgpLAorCVNUQVRfQkNNQVNQX01JQl9UWCgidHhfdmxhbl8xNTE5XzE1MjJfb2N0Iiwg bWliLnR4LnBrdF9jbnQuY250X21ndiksCisJU1RBVF9CQ01BU1BfTUlCX1RYKCJ0eF8xNTIyXzIw NDdfb2N0IiwgbWliLnR4LnBrdF9jbnQuY250XzIwNDcpLAorCVNUQVRfQkNNQVNQX01JQl9UWCgi dHhfMjA0OF80MDk1X29jdCIsIG1pYi50eC5wa3RfY250LmNudF80MDk1KSwKKwlTVEFUX0JDTUFT UF9NSUJfVFgoInR4XzQwOTZfOTIxNl9vY3QiLCBtaWIudHgucGt0X2NudC5jbnRfOTIxNiksCisJ U1RBVF9CQ01BU1BfTUlCX1RYKCJ0eF9wa3RzIiwgbWliLnR4LnBrdHMpLAorCVNUQVRfQkNNQVNQ X01JQl9UWCgidHhfbXVsdGljYXN0IiwgbWliLnR4Lm1jYSksCisJU1RBVF9CQ01BU1BfTUlCX1RY KCJ0eF9icm9hZGNhc3QiLCBtaWIudHguYmNhKSwKKwlTVEFUX0JDTUFTUF9NSUJfVFgoInR4X3Bh dXNlIiwgbWliLnR4LnBmKSwKKwlTVEFUX0JDTUFTUF9NSUJfVFgoInR4X2NvbnRyb2wiLCBtaWIu dHguY2YpLAorCVNUQVRfQkNNQVNQX01JQl9UWCgidHhfZmNzX2VyciIsIG1pYi50eC5mY3MpLAor CVNUQVRfQkNNQVNQX01JQl9UWCgidHhfb3ZlcnNpemUiLCBtaWIudHgub3ZyKSwKKwlTVEFUX0JD TUFTUF9NSUJfVFgoInR4X2RlZmVyIiwgbWliLnR4LmRyZiksCisJU1RBVF9CQ01BU1BfTUlCX1RY KCJ0eF9leGNlc3NfZGVmZXIiLCBtaWIudHguZWRmKSwKKwlTVEFUX0JDTUFTUF9NSUJfVFgoInR4 X3NpbmdsZV9jb2wiLCBtaWIudHguc2NsKSwKKwlTVEFUX0JDTUFTUF9NSUJfVFgoInR4X211bHRp X2NvbCIsIG1pYi50eC5tY2wpLAorCVNUQVRfQkNNQVNQX01JQl9UWCgidHhfbGF0ZV9jb2wiLCBt aWIudHgubGNsKSwKKwlTVEFUX0JDTUFTUF9NSUJfVFgoInR4X2V4Y2Vzc19jb2wiLCBtaWIudHgu ZWNsKSwKKwlTVEFUX0JDTUFTUF9NSUJfVFgoInR4X2ZyYWdzIiwgbWliLnR4LmZyZyksCisJU1RB VF9CQ01BU1BfTUlCX1RYKCJ0eF90b3RhbF9jb2wiLCBtaWIudHgubmNsKSwKKwlTVEFUX0JDTUFT UF9NSUJfVFgoInR4X2phYmJlciIsIG1pYi50eC5qYnIpLAorCVNUQVRfQkNNQVNQX01JQl9UWCgi dHhfYnl0ZXMiLCBtaWIudHguYnl0ZXMpLAorCVNUQVRfQkNNQVNQX01JQl9UWCgidHhfZ29vZF9w a3RzIiwgbWliLnR4LnBvayksCisJU1RBVF9CQ01BU1BfTUlCX1RYKCJ0eF91bmljYXN0IiwgbWli LnR4LnVjKSwKKwkvKiBVbmlNQUMgUlVOVCBjb3VudGVycyAqLworCVNUQVRfQkNNQVNQX1JVTlQo InJ4X3J1bnRfcGt0cyIsIG1pYi5yeF9ydW50X2NudCksCisJU1RBVF9CQ01BU1BfUlVOVCgicnhf cnVudF92YWxpZF9mY3MiLCBtaWIucnhfcnVudF9mY3MpLAorCVNUQVRfQkNNQVNQX1JVTlQoInJ4 X3J1bnRfaW52YWxfZmNzX2FsaWduIiwgbWliLnJ4X3J1bnRfZmNzX2FsaWduKSwKKwlTVEFUX0JD TUFTUF9SVU5UKCJyeF9ydW50X2J5dGVzIiwgbWliLnJ4X3J1bnRfYnl0ZXMpLAorCS8qIEVEUEtU IGNvdW50ZXJzICovCisJU1RBVF9CQ01BU1BfUlhfRURQS1QoImVkcGt0X3RzIiwgbWliLmVkcGt0 X3RzLAorCQkJICAgICBBU1BfRURQS1RfUlhfVFNfQ09VTlRFUiksCisJU1RBVF9CQ01BU1BfUlhf RURQS1QoImVkcGt0X3J4X3BrdF9jbnQiLCBtaWIuZWRwa3RfcnhfcGt0X2NudCwKKwkJCSAgICAg QVNQX0VEUEtUX1JYX1BLVF9DTlQpLAorCVNUQVRfQkNNQVNQX1JYX0VEUEtUKCJlZHBrdF9oZHJf ZXh0X2NudCIsIG1pYi5lZHBrdF9oZHJfZXh0X2NudCwKKwkJCSAgICAgQVNQX0VEUEtUX0hEUl9F WFRSX0NOVCksCisJU1RBVF9CQ01BU1BfUlhfRURQS1QoImVkcGt0X2hkcl9vdXRfY250IiwgbWli LmVkcGt0X2hkcl9vdXRfY250LAorCQkJICAgICBBU1BfRURQS1RfSERSX09VVF9DTlQpLAorCS8q IEFTUCBSWCBjb250cm9sICovCisJU1RBVF9CQ01BU1BfUlhfQ1RSTCgidW1hY19mcm1fY250Iiwg bWliLnVtYWNfZnJtX2NudCwKKwkJCSAgICBBU1BfUlhfQ1RSTF9VTUFDXzBfRlJBTUVfQ09VTlQp LAorCVNUQVRfQkNNQVNQX1JYX0NUUkwoImZiX2ZybV9jbnQiLCBtaWIuZmJfZnJtX2NudCwKKwkJ CSAgICBBU1BfUlhfQ1RSTF9GQl8wX0ZSQU1FX0NPVU5UKSwKKwlTVEFUX0JDTUFTUF9SWF9DVFJM KCJmYl9vdXRfZnJtX2NudCIsIG1pYi5mYl9vdXRfZnJtX2NudCwKKwkJCSAgICBBU1BfUlhfQ1RS TF9GQl9PVVRfRlJBTUVfQ09VTlQpLAorCVNUQVRfQkNNQVNQX1JYX0NUUkwoImZiX2ZpbHRfb3V0 X2ZybV9jbnQiLCBtaWIuZmJfZmlsdF9vdXRfZnJtX2NudCwKKwkJCSAgICBBU1BfUlhfQ1RSTF9G Ql9GSUxUX09VVF9GUkFNRV9DT1VOVCksCisJU1RBVF9CQ01BU1BfUlhfQ1RSTCgiZmJfcnhfZmlm b19kZXB0aCIsIG1pYi5mYl9yeF9maWZvX2RlcHRoLAorCQkJICAgIEFTUF9SWF9DVFJMX0ZCX1JY X0ZJRk9fREVQVEgpLAorCS8qIFNvZnR3YXJlIG1haW50YWluZWQgc3RhdGlzdGljcyAqLworCVNU QVRfQkNNQVNQX1NPRlRfTUlCKGFsbG9jX3J4X2J1ZmZfZmFpbGVkKSwKKwlTVEFUX0JDTUFTUF9T T0ZUX01JQihhbGxvY19yeF9za2JfZmFpbGVkKSwKKwlTVEFUX0JDTUFTUF9TT0ZUX01JQihyeF9k bWFfZmFpbGVkKSwKKwlTVEFUX0JDTUFTUF9TT0ZUX01JQih0eF9kbWFfZmFpbGVkKSwKKwlTVEFU X0JDTUFTUF9TT0ZUX01JQihtY19maWx0ZXJzX2Z1bGxfY250KSwKKwlTVEFUX0JDTUFTUF9TT0ZU X01JQih1Y19maWx0ZXJzX2Z1bGxfY250KSwKKwlTVEFUX0JDTUFTUF9TT0ZUX01JQihmaWx0ZXJz X2NvbWJpbmVfY250KSwKKwlTVEFUX0JDTUFTUF9TT0ZUX01JQihwcm9taXNjX2ZpbHRlcnNfY250 KSwKKwlTVEFUX0JDTUFTUF9TT0ZUX01JQih0eF9yZWFsbG9jX29mZmxvYWRfZmFpbGVkKSwKKwlT VEFUX0JDTUFTUF9TT0ZUX01JQih0eF9yZWFsbG9jX29mZmxvYWQpLAorCit9OworCisjZGVmaW5l IEJDTUFTUF9TVEFUU19MRU4JQVJSQVlfU0laRShiY21hc3BfZ3N0cmluZ3Nfc3RhdHMpCisKK3N0 YXRpYyB1MTYgYmNtYXNwX3N0YXRfZml4dXBfb2Zmc2V0KHN0cnVjdCBiY21hc3BfaW50ZiAqaW50 ZiwKKwkJCQkgICAgY29uc3Qgc3RydWN0IGJjbWFzcF9zdGF0cyAqcykKK3sKKwlzdHJ1Y3QgYmNt YXNwX3ByaXYgKnByaXYgPTNEIGludGYtPnBhcmVudDsKKworCWlmICghc3RyY21wKCJmYl9vdXRf ZnJtX2NudCIsIHMtPnN0YXRfc3RyaW5nKSkKKwkJcmV0dXJuIHByaXYtPmh3X2luZm8tPnJ4X2N0 cmxfZmJfb3V0X2ZyYW1lX2NvdW50OworCisJaWYgKCFzdHJjbXAoImZiX2ZpbHRfb3V0X2ZybV9j bnQiLCBzLT5zdGF0X3N0cmluZykpCisJCXJldHVybiBwcml2LT5od19pbmZvLT5yeF9jdHJsX2Zi X2ZpbHRfb3V0X2ZyYW1lX2NvdW50OworCisJaWYgKCFzdHJjbXAoImZiX3J4X2ZpZm9fZGVwdGgi LCBzLT5zdGF0X3N0cmluZykpCisJCXJldHVybiBwcml2LT5od19pbmZvLT5yeF9jdHJsX2ZiX3J4 X2ZpZm9fZGVwdGg7CisKKwlyZXR1cm4gcy0+cmVnX29mZnNldDsKK30KKworc3RhdGljIGludCBi Y21hc3BfZ2V0X3NzZXRfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHN0cmluZ19z ZXQpCit7CisJc3dpdGNoIChzdHJpbmdfc2V0KSB7CisJY2FzZSBFVEhfU1NfU1RBVFM6CisJCXJl dHVybiBCQ01BU1BfU1RBVFNfTEVOOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU9QTk9UU1VQUDsK Kwl9Cit9CisKK3N0YXRpYyB2b2lkIGJjbWFzcF9nZXRfc3RyaW5ncyhzdHJ1Y3QgbmV0X2Rldmlj ZSAqZGV2LCB1MzIgc3RyaW5nc2V0LAorCQkJICAgICAgIHU4ICpkYXRhKQoreworCWludCBpOwor CisJc3dpdGNoIChzdHJpbmdzZXQpIHsKKwljYXNlIEVUSF9TU19TVEFUUzoKKwkJZm9yIChpID0z RCAwOyBpIDwgQkNNQVNQX1NUQVRTX0xFTjsgaSsrKSB7CisJCQltZW1jcHkoZGF0YSArIGkgKiBF VEhfR1NUUklOR19MRU4sCisJCQkgICAgICAgYmNtYXNwX2dzdHJpbmdzX3N0YXRzW2ldLnN0YXRf c3RyaW5nLAorCQkJICAgICAgIEVUSF9HU1RSSU5HX0xFTik7CisJCX0KKwkJYnJlYWs7CisJZGVm YXVsdDoKKwkJcmV0dXJuOworCX0KK30KKworc3RhdGljIHZvaWQgYmNtYXNwX3VwZGF0ZV9taWJf Y291bnRlcnMoc3RydWN0IGJjbWFzcF9pbnRmICpwcml2KQoreworCWludCBpLCBqID0zRCAwOwor CisJZm9yIChpID0zRCAwOyBpIDwgQkNNQVNQX1NUQVRTX0xFTjsgaSsrKSB7CisJCWNvbnN0IHN0 cnVjdCBiY21hc3Bfc3RhdHMgKnM7CisJCXUxNiBvZmZzZXQgPTNEIDA7CisJCXUzMiB2YWwgPTNE IDA7CisJCWNoYXIgKnA7CisKKwkJcyA9M0QgJmJjbWFzcF9nc3RyaW5nc19zdGF0c1tpXTsKKwkJ c3dpdGNoIChzLT50eXBlKSB7CisJCWNhc2UgQkNNQVNQX1NUQVRfTkVUREVWOgorCQljYXNlIEJD TUFTUF9TVEFUX1NPRlQ6CisJCQljb250aW51ZTsKKwkJY2FzZSBCQ01BU1BfU1RBVF9SVU5UOgor CQkJb2Zmc2V0ICs9M0QgQkNNQVNQX1NUQVRfT0ZGU0VUOworCQkJZmFsbHRocm91Z2g7CisJCWNh c2UgQkNNQVNQX1NUQVRfTUlCX1RYOgorCQkJb2Zmc2V0ICs9M0QgQkNNQVNQX1NUQVRfT0ZGU0VU OworCQkJZmFsbHRocm91Z2g7CisJCWNhc2UgQkNNQVNQX1NUQVRfTUlCX1JYOgorCQkJdmFsID0z RCB1bWFjX3JsKHByaXYsIFVNQ19NSUJfU1RBUlQgKyBqICsgb2Zmc2V0KTsKKwkJCW9mZnNldCA9 M0QgMDsJLyogUmVzZXQgT2Zmc2V0ICovCisJCQlicmVhazsKKwkJY2FzZSBCQ01BU1BfU1RBVF9S WF9FRFBLVDoKKwkJCXZhbCA9M0QgcnhfZWRwa3RfY29yZV9ybChwcml2LT5wYXJlbnQsIHMtPnJl Z19vZmZzZXQpOworCQkJYnJlYWs7CisJCWNhc2UgQkNNQVNQX1NUQVRfUlhfQ1RSTDoKKwkJCW9m ZnNldCA9M0QgYmNtYXNwX3N0YXRfZml4dXBfb2Zmc2V0KHByaXYsIHMpOworCQkJaWYgKG9mZnNl dCAhPTNEIEFTUF9SWF9DVFJMX0ZCX0ZJTFRfT1VUX0ZSQU1FX0NPVU5UKQorCQkJCW9mZnNldCAr PTNEIHNpemVvZih1MzIpICogcHJpdi0+cG9ydDsKKwkJCXZhbCA9M0QgcnhfY3RybF9jb3JlX3Js KHByaXYtPnBhcmVudCwgb2Zmc2V0KTsKKwkJCWJyZWFrOworCQl9CisKKwkJaiArPTNEIHMtPnN0 YXRfc2l6ZW9mOworCQlwID0zRCAoY2hhciAqKXByaXYgKyBzLT5zdGF0X29mZnNldDsKKwkJcHV0 X3VuYWxpZ25lZCh2YWwsICh1MzIgKilwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGJjbWFzcF9n ZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0 IGV0aHRvb2xfc3RhdHMgKnN0YXRzLAorCQkJCSAgICAgdTY0ICpkYXRhKQoreworCXN0cnVjdCBi Y21hc3BfaW50ZiAqcHJpdiA9M0QgbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgaTsKKworCWlmIChu ZXRpZl9ydW5uaW5nKGRldikpCisJCWJjbWFzcF91cGRhdGVfbWliX2NvdW50ZXJzKHByaXYpOwor CisJZGV2LT5uZXRkZXZfb3BzLT5uZG9fZ2V0X3N0YXRzKGRldik7CisKKwlmb3IgKGkgPTNEIDA7 IGkgPCBCQ01BU1BfU1RBVFNfTEVOOyBpKyspIHsKKwkJY29uc3Qgc3RydWN0IGJjbWFzcF9zdGF0 cyAqczsKKwkJY2hhciAqcDsKKworCQlzID0zRCAmYmNtYXNwX2dzdHJpbmdzX3N0YXRzW2ldOwor CQlpZiAocy0+dHlwZSA9M0Q9M0QgQkNNQVNQX1NUQVRfTkVUREVWKQorCQkJcCA9M0QgKGNoYXIg KikmZGV2LT5zdGF0czsKKwkJZWxzZQorCQkJcCA9M0QgKGNoYXIgKilwcml2OworCQlwICs9M0Qg cy0+c3RhdF9vZmZzZXQ7CisJCWlmIChzaXplb2YodW5zaWduZWQgbG9uZykgIT0zRCBzaXplb2Yo dTMyKSAmJgorCQkgICAgcy0+c3RhdF9zaXplb2YgPTNEPTNEIHNpemVvZih1bnNpZ25lZCBsb25n KSkKKwkJCWRhdGFbaV0gPTNEICoodW5zaWduZWQgbG9uZyAqKXA7CisJCWVsc2UKKwkJCWRhdGFb aV0gPTNEICoodTMyICopcDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGJjbWFzcF9nZXRfZHJ2aW5m byhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBldGh0b29sX2Rydmlu Zm8gKmluZm8pCit7CisJc3Ryc2NweShpbmZvLT5kcml2ZXIsICJiY21hc3AiLCBzaXplb2YoaW5m by0+ZHJpdmVyKSk7CisJc3Ryc2NweShpbmZvLT5idXNfaW5mbywgZGV2X25hbWUoZGV2LT5kZXYu cGFyZW50KSwKKwkJc2l6ZW9mKGluZm8tPmJ1c19pbmZvKSk7Cit9CisKK3N0YXRpYyB1MzIgYmNt YXNwX2dldF9tc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBiY21h c3BfaW50ZiAqaW50ZiA9M0QgbmV0ZGV2X3ByaXYoZGV2KTsKKworCXJldHVybiBpbnRmLT5tc2df ZW5hYmxlOworfQorCitzdGF0aWMgdm9pZCBiY21hc3Bfc2V0X21zZ2xldmVsKHN0cnVjdCBuZXRf ZGV2aWNlICpkZXYsIHUzMiBsZXZlbCkKK3sKKwlzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYgPTNE IG5ldGRldl9wcml2KGRldik7CisKKwlpbnRmLT5tc2dfZW5hYmxlID0zRCBsZXZlbDsKK30KKwor I2RlZmluZSBCQ01BU1BfU1VQUE9SVEVEX1dBS0UgICAoV0FLRV9NQUdJQyB8IFdBS0VfTUFHSUNT RUNVUkUgfCBXQUtFX0ZJTFQ9CkVSKQorc3RhdGljIHZvaWQgYmNtYXNwX2dldF93b2woc3RydWN0 IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyA9Cip3b2wpCit7CisJc3Ry dWN0IGJjbWFzcF9pbnRmICppbnRmID0zRCBuZXRkZXZfcHJpdihkZXYpOworCisJd29sLT5zdXBw b3J0ZWQgPTNEIEJDTUFTUF9TVVBQT1JURURfV0FLRTsKKwl3b2wtPndvbG9wdHMgPTNEIGludGYt PndvbG9wdHM7CisJbWVtc2V0KHdvbC0+c29wYXNzLCAwLCBzaXplb2Yod29sLT5zb3Bhc3MpKTsK KworCWlmICh3b2wtPndvbG9wdHMgJiBXQUtFX01BR0lDU0VDVVJFKQorCQltZW1jcHkod29sLT5z b3Bhc3MsIGludGYtPnNvcGFzcywgc2l6ZW9mKGludGYtPnNvcGFzcykpOworfQorCitzdGF0aWMg aW50IGJjbWFzcF9zZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29s X3dvbGluZm8gKj0Kd29sKQoreworCXN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZiA9M0QgbmV0ZGV2 X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgYmNtYXNwX3ByaXYgKnByaXYgPTNEIGludGYtPnBhcmVudDsK KwlzdHJ1Y3QgZGV2aWNlICprZGV2ID0zRCAmcHJpdi0+cGRldi0+ZGV2OworCisJaWYgKCFkZXZp Y2VfY2FuX3dha2V1cChrZGV2KSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJaWYgKHdvbC0+ d29sb3B0cyAmIH5CQ01BU1BfU1VQUE9SVEVEX1dBS0UpCisJCXJldHVybiAtRU9QTk9UU1VQUDsK KworCS8qIEludGVyZmFjZSBTcGVjaWZpYyAqLworCWludGYtPndvbG9wdHMgPTNEIHdvbC0+d29s b3B0czsKKwlpZiAoaW50Zi0+d29sb3B0cyAmIFdBS0VfTUFHSUNTRUNVUkUpCisJCW1lbWNweShp bnRmLT5zb3Bhc3MsIHdvbC0+c29wYXNzLCBzaXplb2Yod29sLT5zb3Bhc3MpKTsKKworCW11dGV4 X2xvY2soJnByaXYtPndvbF9sb2NrKTsKKwlwcml2LT5lbmFibGVfd29sKGludGYsICEhaW50Zi0+ d29sb3B0cyk7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT53b2xfbG9jayk7CisKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGludCBiY21hc3BfZmxvd19pbnNlcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRl diwgc3RydWN0IGV0aHRvb2xfcnhuZmM9CiAqY21kKQoreworCXN0cnVjdCBiY21hc3BfaW50ZiAq aW50ZiA9M0QgbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgYmNtYXNwX25ldF9maWx0ZXIgKm5m aWx0ZXI7CisJdTMyIGxvYyA9M0QgY21kLT5mcy5sb2NhdGlvbjsKKwlib29sIHdha2UgPTNEIGZh bHNlOworCisJaWYgKGNtZC0+ZnMucmluZ19jb29raWUgPTNEPTNEIFJYX0NMU19GTE9XX1dBS0Up CisJCXdha2UgPTNEIHRydWU7CisKKwkvKiBDdXJyZW50bHkgb25seSBzdXBwb3J0cyBXQUtFIGZp bHRlcnMgKi8KKwlpZiAoIXdha2UpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXN3aXRjaCAo Y21kLT5mcy5mbG93X3R5cGUgJiB+KEZMT1dfRVhUIHwgRkxPV19NQUNfRVhUKSkgeworCWNhc2Ug RVRIRVJfRkxPVzoKKwljYXNlIElQX1VTRVJfRkxPVzoKKwljYXNlIFRDUF9WNF9GTE9XOgorCWNh c2UgVURQX1Y0X0ZMT1c6CisJY2FzZSBUQ1BfVjZfRkxPVzoKKwljYXNlIFVEUF9WNl9GTE9XOgor CQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCisJLyogQ2hl Y2sgaWYgZmlsdGVyIGFscmVhZHkgZXhpc3RzICovCisJaWYgKGJjbWFzcF9uZXRmaWx0X2NoZWNr X2R1cChpbnRmLCAmY21kLT5mcykpCisJCXJldHVybiAtRUlOVkFMOworCisJbmZpbHRlciA9M0Qg YmNtYXNwX25ldGZpbHRfZ2V0X2luaXQoaW50ZiwgbG9jLCB3YWtlLCB0cnVlKTsKKwlpZiAoSVNf RVJSKG5maWx0ZXIpKQorCQlyZXR1cm4gUFRSX0VSUihuZmlsdGVyKTsKKworCS8qIFJldHVybiB0 aGUgbG9jYXRpb24gd2hlcmUgd2UgZGlkIGluc2VydCB0aGUgZmlsdGVyICovCisJY21kLT5mcy5s b2NhdGlvbiA9M0QgbmZpbHRlci0+aHdfaW5kZXg7CisJbWVtY3B5KCZuZmlsdGVyLT5mcywgJmNt ZC0+ZnMsIHNpemVvZihzdHJ1Y3QgZXRodG9vbF9yeF9mbG93X3NwZWMpKTsKKworCS8qIFNpbmNl IHdlIG9ubHkgc3VwcG9ydCB3YWtlIGZpbHRlcnMsIGRlZmVyIHJlZ2lzdGVyIHByb2dyYW1taW5n IHRpbGwKKwkgKiBzdXNwZW5kIHRpbWUuCisJICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBp bnQgYmNtYXNwX2Zsb3dfZGVsZXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0 b29sX3J4bmZjPQogKmNtZCkKK3sKKwlzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYgPTNEIG5ldGRl dl9wcml2KGRldik7CisJc3RydWN0IGJjbWFzcF9uZXRfZmlsdGVyICpuZmlsdGVyOworCisJbmZp bHRlciA9M0QgYmNtYXNwX25ldGZpbHRfZ2V0X2luaXQoaW50ZiwgY21kLT5mcy5sb2NhdGlvbiwg ZmFsc2UsIGZhbHNlKTsKKwlpZiAoSVNfRVJSKG5maWx0ZXIpKQorCQlyZXR1cm4gUFRSX0VSUihu ZmlsdGVyKTsKKworCWJjbWFzcF9uZXRmaWx0X3JlbGVhc2UoaW50ZiwgbmZpbHRlcik7CisKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiY21hc3BfZmxvd19nZXQoc3RydWN0IGJjbWFzcF9p bnRmICppbnRmLCBzdHJ1Y3QgZXRodG9vbF9yeG5mYyA9CipjbWQpCit7CisJc3RydWN0IGJjbWFz cF9uZXRfZmlsdGVyICpuZmlsdGVyOworCisJbmZpbHRlciA9M0QgYmNtYXNwX25ldGZpbHRfZ2V0 X2luaXQoaW50ZiwgY21kLT5mcy5sb2NhdGlvbiwgZmFsc2UsIGZhbHNlKTsKKwlpZiAoSVNfRVJS KG5maWx0ZXIpKQorCQlyZXR1cm4gUFRSX0VSUihuZmlsdGVyKTsKKworCW1lbWNweSgmY21kLT5m cywgJm5maWx0ZXItPmZzLCBzaXplb2YobmZpbHRlci0+ZnMpKTsKKworCWNtZC0+ZGF0YSA9M0Qg TlVNX05FVF9GSUxURVJTOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYmNtYXNwX3Nl dF9yeG5mYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9yeG5mYyAqPQpj bWQpCit7CisJc3RydWN0IGJjbWFzcF9pbnRmICppbnRmID0zRCBuZXRkZXZfcHJpdihkZXYpOwor CWludCByZXQgPTNEIC1FT1BOT1RTVVBQOworCisJbXV0ZXhfbG9jaygmaW50Zi0+cGFyZW50LT5u ZXRfbG9jayk7CisKKwlzd2l0Y2ggKGNtZC0+Y21kKSB7CisJY2FzZSBFVEhUT09MX1NSWENMU1JM SU5TOgorCQlyZXQgPTNEIGJjbWFzcF9mbG93X2luc2VydChkZXYsIGNtZCk7CisJCWJyZWFrOwor CWNhc2UgRVRIVE9PTF9TUlhDTFNSTERFTDoKKwkJcmV0ID0zRCBiY21hc3BfZmxvd19kZWxldGUo ZGV2LCBjbWQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwltdXRleF91 bmxvY2soJmludGYtPnBhcmVudC0+bmV0X2xvY2spOworCisJcmV0dXJuIHJldDsKK30KKworc3Rh dGljIGludCBiY21hc3BfZ2V0X3J4bmZjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBl dGh0b29sX3J4bmZjICo9CmNtZCwKKwkJCSAgICB1MzIgKnJ1bGVfbG9jcykKK3sKKwlzdHJ1Y3Qg YmNtYXNwX2ludGYgKmludGYgPTNEIG5ldGRldl9wcml2KGRldik7CisJaW50IGVyciA9M0QgMDsK KworCW11dGV4X2xvY2soJmludGYtPnBhcmVudC0+bmV0X2xvY2spOworCisJc3dpdGNoIChjbWQt PmNtZCkgeworCWNhc2UgRVRIVE9PTF9HUlhDTFNSTENOVDoKKwkJY21kLT5ydWxlX2NudCA9M0Qg YmNtYXNwX25ldGZpbHRfZ2V0X2FjdGl2ZShpbnRmKTsKKwkJLyogV2Ugc3VwcG9ydCBzcGVjaWZ5 aW5nIHJ1bGUgbG9jYXRpb25zICovCisJCWNtZC0+ZGF0YSB8PTNEIFJYX0NMU19MT0NfU1BFQ0lB TDsKKwkJYnJlYWs7CisJY2FzZSBFVEhUT09MX0dSWENMU1JVTEU6CisJCWVyciA9M0QgYmNtYXNw X2Zsb3dfZ2V0KGludGYsIGNtZCk7CisJCWJyZWFrOworCWNhc2UgRVRIVE9PTF9HUlhDTFNSTEFM TDoKKwkJYmNtYXNwX25ldGZpbHRfZ2V0X2FsbF9hY3RpdmUoaW50ZiwgcnVsZV9sb2NzLCAmY21k LT5ydWxlX2NudCk7CisJCWNtZC0+ZGF0YSA9M0QgTlVNX05FVF9GSUxURVJTOworCQlicmVhazsK KwlkZWZhdWx0OgorCQllcnIgPTNEIC1FT1BOT1RTVVBQOworCQlicmVhazsKKwl9CisKKwltdXRl eF91bmxvY2soJmludGYtPnBhcmVudC0+bmV0X2xvY2spOworCisJcmV0dXJuIGVycjsKK30KKwor dm9pZCBiY21hc3BfZWVlX2VuYWJsZV9zZXQoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmLCBib29s IGVuYWJsZSkKK3sKKwl1MzIgcmVnOworCisJcmVnID0zRCB1bWFjX3JsKGludGYsIFVNQ19FRUVf Q1RSTCk7CisJaWYgKGVuYWJsZSkKKwkJcmVnIHw9M0QgRUVFX0VOOworCWVsc2UKKwkJcmVnICY9 M0QgfkVFRV9FTjsKKwl1bWFjX3dsKGludGYsIHJlZywgVU1DX0VFRV9DVFJMKTsKKworCWludGYt PmVlZS5lZWVfZW5hYmxlZCA9M0QgZW5hYmxlOworCWludGYtPmVlZS5lZWVfYWN0aXZlID0zRCBl bmFibGU7Cit9CisKK3N0YXRpYyBpbnQgYmNtYXNwX2dldF9lZWUoc3RydWN0IG5ldF9kZXZpY2Ug KmRldiwgc3RydWN0IGV0aHRvb2xfZWVlICplKQoreworCXN0cnVjdCBiY21hc3BfaW50ZiAqaW50 ZiA9M0QgbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZXRodG9vbF9lZWUgKnAgPTNEICZpbnRm LT5lZWU7CisKKwlpZiAoIWRldi0+cGh5ZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWUtPmVl ZV9lbmFibGVkID0zRCBwLT5lZWVfZW5hYmxlZDsKKwllLT5lZWVfYWN0aXZlID0zRCBwLT5lZWVf YWN0aXZlOworCWUtPnR4X2xwaV9lbmFibGVkID0zRCBwLT50eF9scGlfZW5hYmxlZDsKKwllLT50 eF9scGlfdGltZXIgPTNEIHVtYWNfcmwoaW50ZiwgVU1DX0VFRV9MUElfVElNRVIpOworCisJcmV0 dXJuIHBoeV9ldGh0b29sX2dldF9lZWUoZGV2LT5waHlkZXYsIGUpOworfQorCitzdGF0aWMgaW50 IGJjbWFzcF9zZXRfZWVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2Vl ZSAqZSkKK3sKKwlzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYgPTNEIG5ldGRldl9wcml2KGRldik7 CisJc3RydWN0IGV0aHRvb2xfZWVlICpwID0zRCAmaW50Zi0+ZWVlOworCWludCByZXQ7CisKKwlp ZiAoIWRldi0+cGh5ZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmICghcC0+ZWVlX2VuYWJs ZWQpIHsKKwkJYmNtYXNwX2VlZV9lbmFibGVfc2V0KGludGYsIGZhbHNlKTsKKwl9IGVsc2Ugewor CQlyZXQgPTNEIHBoeV9pbml0X2VlZShkZXYtPnBoeWRldiwgMCk7CisJCWlmIChyZXQpIHsKKwkJ CW5ldGlmX2VycihpbnRmLCBodywgZGV2LAorCQkJCSAgIkVFRSBpbml0aWFsaXphdGlvbiBmYWls ZWQ6ICVkXG4iLCByZXQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCXVtYWNfd2woaW50Ziwg ZS0+dHhfbHBpX3RpbWVyLCBVTUNfRUVFX0xQSV9USU1FUik7CisJCWludGYtPmVlZS5lZWVfYWN0 aXZlID0zRCByZXQgPj0zRCAwOworCQlpbnRmLT5lZWUudHhfbHBpX2VuYWJsZWQgPTNEIGUtPnR4 X2xwaV9lbmFibGVkOworCQliY21hc3BfZWVlX2VuYWJsZV9zZXQoaW50ZiwgdHJ1ZSk7CisJfQor CisJcmV0dXJuIHBoeV9ldGh0b29sX3NldF9lZWUoZGV2LT5waHlkZXYsIGUpOworfQorCitjb25z dCBzdHJ1Y3QgZXRodG9vbF9vcHMgYmNtYXNwX2V0aHRvb2xfb3BzID0zRCB7CisJLmdldF9kcnZp bmZvCQk9M0QgYmNtYXNwX2dldF9kcnZpbmZvLAorCS5nZXRfd29sCQk9M0QgYmNtYXNwX2dldF93 b2wsCisJLnNldF93b2wJCT0zRCBiY21hc3Bfc2V0X3dvbCwKKwkuZ2V0X2xpbmsJCT0zRCBldGh0 b29sX29wX2dldF9saW5rLAorCS5nZXRfc3RyaW5ncwkJPTNEIGJjbWFzcF9nZXRfc3RyaW5ncywK KwkuZ2V0X2V0aHRvb2xfc3RhdHMJPTNEIGJjbWFzcF9nZXRfZXRodG9vbF9zdGF0cywKKwkuZ2V0 X3NzZXRfY291bnQJCT0zRCBiY21hc3BfZ2V0X3NzZXRfY291bnQsCisJLmdldF9saW5rX2tzZXR0 aW5ncwk9M0QgcGh5X2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzLAorCS5zZXRfbGlua19rc2V0 dGluZ3MJPTNEIHBoeV9ldGh0b29sX3NldF9saW5rX2tzZXR0aW5ncywKKwkuZ2V0X21zZ2xldmVs CQk9M0QgYmNtYXNwX2dldF9tc2dsZXZlbCwKKwkuc2V0X21zZ2xldmVsCQk9M0QgYmNtYXNwX3Nl dF9tc2dsZXZlbCwKKwkubndheV9yZXNldAkJPTNEIHBoeV9ldGh0b29sX253YXlfcmVzZXQsCisJ LmdldF9yeG5mYwkJPTNEIGJjbWFzcF9nZXRfcnhuZmMsCisJLnNldF9yeG5mYwkJPTNEIGJjbWFz cF9zZXRfcnhuZmMsCisJLnNldF9lZWUJCT0zRCBiY21hc3Bfc2V0X2VlZSwKKwkuZ2V0X2VlZQkJ PTNEIGJjbWFzcF9nZXRfZWVlLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0 L2Jyb2FkY29tL2FzcDIvYmNtYXNwX2ludGYuYyBiL2RyaXZlcnMvbmV0PQovZXRoZXJuZXQvYnJv YWRjb20vYXNwMi9iY21hc3BfaW50Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwMC4uMDQxZWUxMjE1ZjRmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvZXRo ZXJuZXQvYnJvYWRjb20vYXNwMi9iY21hc3BfaW50Zi5jCkBAIC0wLDAgKzEsMTQyNSBAQAorLy8g U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKyNkZWZpbmUgcHJfZm10KGZtdCkJCQki YmNtYXNwX2ludGY6ICIgZm10CisKKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisjaW5jbHVk ZSA8bGludXgvYnJjbXBoeS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxp bnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxs aW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9uZXQuaD4KKyNpbmNsdWRlIDxs aW51eC9vZl9tZGlvLmg+CisjaW5jbHVkZSA8bGludXgvcGh5Lmg+CisjaW5jbHVkZSA8bGludXgv cGh5X2ZpeGVkLmg+CisjaW5jbHVkZSA8bGludXgvcHRwX2NsYXNzaWZ5Lmg+CisjaW5jbHVkZSA8 bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bmV0L2lwLmg+CisjaW5jbHVkZSA8 bmV0L2lwdjYuaD4KKworI2luY2x1ZGUgImJjbWFzcC5oIgorI2luY2x1ZGUgImJjbWFzcF9pbnRm X2RlZnMuaCIKKworc3RhdGljIGludCBpbmNyX3JpbmcoaW50IGluZGV4LCBpbnQgcmluZ19jb3Vu dCkKK3sKKwlpbmRleCsrOworCWlmIChpbmRleCA9M0Q9M0QgcmluZ19jb3VudCkKKwkJcmV0dXJu IDA7CisKKwlyZXR1cm4gaW5kZXg7Cit9CisKKy8qIFBvaW50cyB0byBsYXN0IGJ5dGUgb2YgZGVz Y3JpcHRvciAqLworc3RhdGljIGRtYV9hZGRyX3QgaW5jcl9sYXN0X2J5dGUoZG1hX2FkZHJfdCBh ZGRyLCBkbWFfYWRkcl90IGJlZywKKwkJCQkgaW50IHJpbmdfY291bnQpCit7CisJZG1hX2FkZHJf dCBlbmQgPTNEIGJlZyArIChyaW5nX2NvdW50ICogREVTQ19TSVpFKTsKKworCWFkZHIgKz0zRCBE RVNDX1NJWkU7CisJaWYgKGFkZHIgPiBlbmQpCisJCXJldHVybiBiZWcgKyBERVNDX1NJWkUgLSAx OworCisJcmV0dXJuIGFkZHI7Cit9CisKKy8qIFBvaW50cyB0byBmaXJzdCBieXRlIG9mIGRlc2Ny aXB0b3IgKi8KK3N0YXRpYyBkbWFfYWRkcl90IGluY3JfZmlyc3RfYnl0ZShkbWFfYWRkcl90IGFk ZHIsIGRtYV9hZGRyX3QgYmVnLAorCQkJCSAgaW50IHJpbmdfY291bnQpCit7CisJZG1hX2FkZHJf dCBlbmQgPTNEIGJlZyArIChyaW5nX2NvdW50ICogREVTQ19TSVpFKTsKKworCWFkZHIgKz0zRCBE RVNDX1NJWkU7CisJaWYgKGFkZHIgPj0zRCBlbmQpCisJCXJldHVybiBiZWc7CisKKwlyZXR1cm4g YWRkcjsKK30KKworc3RhdGljIHZvaWQgYmNtYXNwX2VuYWJsZV90eChzdHJ1Y3QgYmNtYXNwX2lu dGYgKmludGYsIGludCBlbikKK3sKKwlpZiAoZW4pIHsKKwkJdHhfc3BiX2N0cmxfd2woaW50Ziwg VFhfU1BCX0NUUkxfRU5BQkxFX0VOLCBUWF9TUEJfQ1RSTF9FTkFCTEUpOworCQl0eF9lcGt0X2Nv cmVfd2woaW50ZiwgKFRYX0VQS1RfQ19DRkdfTUlTQ19FTiB8CisJCQkJVFhfRVBLVF9DX0NGR19N SVNDX1BUIHwKKwkJCQkoaW50Zi0+cG9ydCA8PCBUWF9FUEtUX0NfQ0ZHX01JU0NfUFNfU0hJRlQp KSwKKwkJCQlUWF9FUEtUX0NfQ0ZHX01JU0MpOworCX0gZWxzZSB7CisJCXR4X3NwYl9jdHJsX3ds KGludGYsIDB4MCwgVFhfU1BCX0NUUkxfRU5BQkxFKTsKKwkJdHhfZXBrdF9jb3JlX3dsKGludGYs IDB4MCwgVFhfRVBLVF9DX0NGR19NSVNDKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGJjbWFzcF9l bmFibGVfcngoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmLCBpbnQgZW4pCit7CisJaWYgKGVuKQor CQlyeF9lZHBrdF9jZmdfd2woaW50ZiwgUlhfRURQS1RfQ0ZHX0VOQUJMRV9FTiwKKwkJCQlSWF9F RFBLVF9DRkdfRU5BQkxFKTsKKwllbHNlCisJCXJ4X2VkcGt0X2NmZ193bChpbnRmLCAweDAsIFJY X0VEUEtUX0NGR19FTkFCTEUpOworfQorCitzdGF0aWMgdm9pZCBiY21hc3Bfc2V0X3J4X21vZGUo c3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwl1bnNpZ25lZCBjaGFyIG1hc2tbXSA9M0QgezB4 ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmZ9OworCXN0cnVjdCBiY21hc3BfaW50ZiAq aW50ZiA9M0QgbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhOwor CWludCByZXQ7CisKKwlzcGluX2xvY2tfYmgoJmludGYtPnBhcmVudC0+bWRhX2xvY2spOworCisJ YmNtYXNwX2Rpc2FibGVfYWxsX2ZpbHRlcnMoaW50Zik7CisKKwlpZiAoZGV2LT5mbGFncyAmIElG Rl9QUk9NSVNDKQorCQlnb3RvIHNldF9wcm9taXNjOworCisJYmNtYXNwX3NldF9wcm9taXNjKGlu dGYsIDApOworCisJYmNtYXNwX3NldF9icm9hZChpbnRmLCAxKTsKKworCWJjbWFzcF9zZXRfb2Fk ZHIoaW50ZiwgZGV2LT5kZXZfYWRkciwgMSk7CisKKwlpZiAoZGV2LT5mbGFncyAmIElGRl9BTExN VUxUSSkgeworCQliY21hc3Bfc2V0X2FsbG11bHRpKGludGYsIDEpOworCX0gZWxzZSB7CisJCWJj bWFzcF9zZXRfYWxsbXVsdGkoaW50ZiwgMCk7CisKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIo aGEsIGRldikgeworCQkJcmV0ID0zRCBiY21hc3Bfc2V0X2VuX21kYV9maWx0ZXIoaW50ZiwgaGEt PmFkZHIsIG1hc2spOworCQkJaWYgKHJldCkgeworCQkJCWludGYtPm1pYi5tY19maWx0ZXJzX2Z1 bGxfY250Kys7CisJCQkJZ290byBzZXRfcHJvbWlzYzsKKwkJCX0KKwkJfQorCX0KKworCW5ldGRl dl9mb3JfZWFjaF91Y19hZGRyKGhhLCBkZXYpIHsKKwkJcmV0ID0zRCBiY21hc3Bfc2V0X2VuX21k YV9maWx0ZXIoaW50ZiwgaGEtPmFkZHIsIG1hc2spOworCQlpZiAocmV0KSB7CisJCQlpbnRmLT5t aWIudWNfZmlsdGVyc19mdWxsX2NudCsrOworCQkJZ290byBzZXRfcHJvbWlzYzsKKwkJfQorCX0K KworCXNwaW5fdW5sb2NrX2JoKCZpbnRmLT5wYXJlbnQtPm1kYV9sb2NrKTsKKwlyZXR1cm47CisK K3NldF9wcm9taXNjOgorCWJjbWFzcF9zZXRfcHJvbWlzYyhpbnRmLCAxKTsKKwlpbnRmLT5taWIu cHJvbWlzY19maWx0ZXJzX2NudCsrOworCisJLyogZGlzYWJsZSBhbGwgZmlsdGVycyB1c2VkIGJ5 IHRoaXMgcG9ydCAqLworCWJjbWFzcF9kaXNhYmxlX2FsbF9maWx0ZXJzKGludGYpOworCisJc3Bp bl91bmxvY2tfYmgoJmludGYtPnBhcmVudC0+bWRhX2xvY2spOworfQorCitzdGF0aWMgdm9pZCBi Y21hc3BfY2xlYW5fdHhjYihzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsIGludCBpbmRleCkKK3sK KwlzdHJ1Y3QgYmNtYXNwX3R4X2NiICp0eGNiID0zRCAmaW50Zi0+dHhfY2JzW2luZGV4XTsKKwor CXR4Y2ItPnNrYiA9M0QgTlVMTDsKKwlkbWFfdW5tYXBfYWRkcl9zZXQodHhjYiwgZG1hX2FkZHIs IDApOworCWRtYV91bm1hcF9sZW5fc2V0KHR4Y2IsIGRtYV9sZW4sIDApOworCXR4Y2ItPmxhc3Qg PTNEIGZhbHNlOworfQorCitzdGF0aWMgaW50IHR4X3NwYl9yaW5nX2Z1bGwoc3RydWN0IGJjbWFz cF9pbnRmICppbnRmLCBpbnQgY250KQoreworCWludCBuZXh0X2luZGV4LCBpOworCisJLyogQ2hl Y2sgaWYgd2UgaGF2ZSBlbm91Z2ggcm9vbSBmb3IgY250IGRlc2NyaXB0b3JzICovCisJZm9yIChp ID0zRCAwOyBpIDwgY250OyBpKyspIHsKKwkJbmV4dF9pbmRleCA9M0QgaW5jcl9yaW5nKGludGYt PnR4X3NwYl9pbmRleCwgREVTQ19SSU5HX0NPVU5UKTsKKwkJaWYgKG5leHRfaW5kZXggPTNEPTNE IGludGYtPnR4X3NwYl9jbGVhbl9pbmRleCkKKwkJCXJldHVybiAxOworCX0KKworCXJldHVybiAw OworfQorCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmJjbWFzcF9jc3VtX29mZmxvYWQoc3RydWN0 IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAg Ym9vbCAqY3N1bV9odykKK3sKKwlzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYgPTNEIG5ldGRldl9w cml2KGRldik7CisJdTMyIGhlYWRlciA9M0QgMCwgaGVhZGVyMiA9M0QgMCwgZXBrdCA9M0QgMDsK KwlzdHJ1Y3QgYmNtYXNwX3BrdF9vZmZsb2FkICpvZmZsb2FkOworCXVuc2lnbmVkIGludCBoZWFk ZXJfY250ID0zRCAwOworCXN0cnVjdCBza19idWZmICpuZXdfc2tiOworCXU4IGlwX3Byb3RvOwor CisJaWYgKHNrYi0+aXBfc3VtbWVkICE9M0QgQ0hFQ0tTVU1fUEFSVElBTCkKKwkJcmV0dXJuIHNr YjsKKworCWlmICh1bmxpa2VseShza2JfaGVhZHJvb20oc2tiKSA8IHNpemVvZigqb2ZmbG9hZCkp KSB7CisJCW5ld19za2IgPTNEIHNrYl9yZWFsbG9jX2hlYWRyb29tKHNrYiwgc2l6ZW9mKCpvZmZs b2FkKSk7CisJCWlmICghbmV3X3NrYikgeworCQkJaW50Zi0+bWliLnR4X3JlYWxsb2Nfb2ZmbG9h ZF9mYWlsZWQrKzsKKwkJCWdvdG8gaGVscDsKKwkJfQorCisJCWRldl9jb25zdW1lX3NrYl9hbnko c2tiKTsKKwkJc2tiID0zRCBuZXdfc2tiOworCQlpbnRmLT5taWIudHhfcmVhbGxvY19vZmZsb2Fk Kys7CisJfQorCisJc3dpdGNoIChza2ItPnByb3RvY29sKSB7CisJY2FzZSBodG9ucyhFVEhfUF9J UCk6CisJCWhlYWRlciB8PTNEIFBLVF9PRkZMT0FEX0hEUl9TSVpFXzIoKGlwX2hkcmxlbihza2Ip ID4+IDgpICYgMHhmKTsKKwkJaGVhZGVyMiB8PTNEIFBLVF9PRkZMT0FEX0hEUjJfU0laRV8yKGlw X2hkcmxlbihza2IpICYgMHhmZik7CisJCWVwa3QgfD0zRCBQS1RfT0ZGTE9BRF9FUEtUX0lQKDAp IHwgUEtUX09GRkxPQURfRVBLVF9DU1VNX0wyOworCQlpcF9wcm90byA9M0QgaXBfaGRyKHNrYikt PnByb3RvY29sOworCQloZWFkZXJfY250ICs9M0QgMjsKKwkJYnJlYWs7CisJY2FzZSBodG9ucyhF VEhfUF9JUFY2KToKKwkJaGVhZGVyIHw9M0QgUEtUX09GRkxPQURfSERSX1NJWkVfMigoSVA2X0hM RU4gPj4gOCkgJiAweGYpOworCQloZWFkZXIyIHw9M0QgUEtUX09GRkxPQURfSERSMl9TSVpFXzIo SVA2X0hMRU4gJiAweGZmKTsKKwkJZXBrdCB8PTNEIFBLVF9PRkZMT0FEX0VQS1RfSVAoMSkgfCBQ S1RfT0ZGTE9BRF9FUEtUX0NTVU1fTDI7CisJCWlwX3Byb3RvID0zRCBpcHY2X2hkcihza2IpLT5u ZXh0aGRyOworCQloZWFkZXJfY250ICs9M0QgMjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZ290 byBoZWxwOworCX0KKworCXN3aXRjaCAoaXBfcHJvdG8pIHsKKwljYXNlIElQUFJPVE9fVENQOgor CQloZWFkZXIyIHw9M0QgUEtUX09GRkxPQURfSERSMl9TSVpFXzModGNwX2hkcmxlbihza2IpKTsK KwkJZXBrdCB8PTNEIFBLVF9PRkZMT0FEX0VQS1RfVFAoMCkgfCBQS1RfT0ZGTE9BRF9FUEtUX0NT VU1fTDM7CisJCWhlYWRlcl9jbnQrKzsKKwkJYnJlYWs7CisJY2FzZSBJUFBST1RPX1VEUDoKKwkJ aGVhZGVyMiB8PTNEIFBLVF9PRkZMT0FEX0hEUjJfU0laRV8zKFVEUF9ITEVOKTsKKwkJZXBrdCB8 PTNEIFBLVF9PRkZMT0FEX0VQS1RfVFAoMSkgfCBQS1RfT0ZGTE9BRF9FUEtUX0NTVU1fTDM7CisJ CWhlYWRlcl9jbnQrKzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZ290byBoZWxwOworCX0KKwor CW9mZmxvYWQgPTNEIChzdHJ1Y3QgYmNtYXNwX3BrdF9vZmZsb2FkICopc2tiX3B1c2goc2tiLCBz aXplb2YoKm9mZmxvYWQpKTsKKworCWhlYWRlciB8PTNEIFBLVF9PRkZMT0FEX0hEUl9PUCB8IFBL VF9PRkZMT0FEX0hEUl9DT1VOVChoZWFkZXJfY250KSB8CisJCSAgUEtUX09GRkxPQURfSERSX1NJ WkVfMShFVEhfSExFTik7CisJZXBrdCB8PTNEIFBLVF9PRkZMT0FEX0VQS1RfT1A7CisKKwlvZmZs b2FkLT5ub3AgPTNEIGh0b25sKFBLVF9PRkZMT0FEX05PUCk7CisJb2ZmbG9hZC0+aGVhZGVyID0z RCBodG9ubChoZWFkZXIpOworCW9mZmxvYWQtPmhlYWRlcjIgPTNEIGh0b25sKGhlYWRlcjIpOwor CW9mZmxvYWQtPmVwa3QgPTNEIGh0b25sKGVwa3QpOworCW9mZmxvYWQtPmVuZCA9M0QgaHRvbmwo UEtUX09GRkxPQURfRU5EX09QKTsKKwkqY3N1bV9odyA9M0QgdHJ1ZTsKKworCXJldHVybiBza2I7 CisKK2hlbHA6CisJc2tiX2NoZWNrc3VtX2hlbHAoc2tiKTsKKworCXJldHVybiBza2I7Cit9CisK K3N0YXRpYyB1bnNpZ25lZCBsb25nIGJjbWFzcF9yeF9lZHBrdF9kbWFfcnEoc3RydWN0IGJjbWFz cF9pbnRmICppbnRmKQoreworCXJldHVybiByeF9lZHBrdF9kbWFfcnEoaW50ZiwgUlhfRURQS1Rf RE1BX1ZBTElEKTsKK30KKworc3RhdGljIHZvaWQgYmNtYXNwX3J4X2VkcGt0X2NmZ193cShzdHJ1 Y3QgYmNtYXNwX2ludGYgKmludGYsIGRtYV9hZGRyX3QgYWQ9CmRyKQoreworCXJ4X2VkcGt0X2Nm Z193cShpbnRmLCBhZGRyLCBSWF9FRFBLVF9SSU5HX0JVRkZFUl9SRUFEKTsKK30KKworc3RhdGlj IHZvaWQgYmNtYXNwX3J4X2VkcGt0X2RtYV93cShzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsIGRt YV9hZGRyX3QgYWQ9CmRyKQoreworCXJ4X2VkcGt0X2RtYV93cShpbnRmLCBhZGRyLCBSWF9FRFBL VF9ETUFfUkVBRCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGJjbWFzcF90eF9zcGJfZG1h X3JxKHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZikKK3sKKwlyZXR1cm4gdHhfc3BiX2RtYV9ycShp bnRmLCBUWF9TUEJfRE1BX1JFQUQpOworfQorCitzdGF0aWMgdm9pZCBiY21hc3BfdHhfc3BiX2Rt YV93cShzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsIGRtYV9hZGRyX3QgYWRkcikKK3sKKwl0eF9z cGJfZG1hX3dxKGludGYsIGFkZHIsIFRYX1NQQl9ETUFfVkFMSUQpOworfQorCitzdGF0aWMgY29u c3Qgc3RydWN0IGJjbWFzcF9pbnRmX29wcyBiY21hc3BfaW50Zl9vcHMgPTNEIHsKKwkucnhfZGVz Y19yZWFkID0zRCBiY21hc3BfcnhfZWRwa3RfZG1hX3JxLAorCS5yeF9idWZmZXJfd3JpdGUgPTNE IGJjbWFzcF9yeF9lZHBrdF9jZmdfd3EsCisJLnJ4X2Rlc2Nfd3JpdGUgPTNEIGJjbWFzcF9yeF9l ZHBrdF9kbWFfd3EsCisJLnR4X3JlYWQgPTNEIGJjbWFzcF90eF9zcGJfZG1hX3JxLAorCS50eF93 cml0ZSA9M0QgYmNtYXNwX3R4X3NwYl9kbWFfd3EsCit9OworCitzdGF0aWMgbmV0ZGV2X3R4X3Qg YmNtYXNwX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikK K3sKKwlzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYgPTNEIG5ldGRldl9wcml2KGRldik7CisJaW50 IHNwYl9pbmRleCwgbnJfZnJhZ3MsIHJldCwgaSwgajsKKwl1bnNpZ25lZCBpbnQgdG90YWxfYnl0 ZXMsIHNpemU7CisJc3RydWN0IGJjbWFzcF90eF9jYiAqdHhjYjsKKwlkbWFfYWRkcl90IG1hcHBp bmcsIHZhbGlkOworCXN0cnVjdCBiY21hc3BfZGVzYyAqZGVzYzsKKwlib29sIGNzdW1faHcgPTNE IGZhbHNlOworCXN0cnVjdCBkZXZpY2UgKmtkZXY7CisJc2tiX2ZyYWdfdCAqZnJhZzsKKworCWtk ZXYgPTNEICZpbnRmLT5wYXJlbnQtPnBkZXYtPmRldjsKKworCXNwaW5fbG9jaygmaW50Zi0+dHhf bG9jayk7CisKKwlucl9mcmFncyA9M0Qgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKKworCWlm ICh0eF9zcGJfcmluZ19mdWxsKGludGYsIG5yX2ZyYWdzICsgMSkpIHsKKwkJbmV0aWZfc3RvcF9x dWV1ZShkZXYpOworCQluZXRkZXZfZXJyKGRldiwgIlR4IFJpbmcgRnVsbCFcbiIpOworCQlyZXQg PTNEIE5FVERFVl9UWF9CVVNZOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBTYXZlIHNrYiBsZW4g YmVmb3JlIGFkZGluZyBjc3VtIG9mZmxvYWQgaGVhZGVyICovCisJdG90YWxfYnl0ZXMgPTNEIHNr Yi0+bGVuOworCXNrYiA9M0QgYmNtYXNwX2NzdW1fb2ZmbG9hZChkZXYsIHNrYiwgJmNzdW1faHcp OworCWlmICghc2tiKSB7CisJCXJldCA9M0QgTkVUREVWX1RYX09LOworCQlnb3RvIG91dDsKKwl9 CisKKwlzcGJfaW5kZXggPTNEIGludGYtPnR4X3NwYl9pbmRleDsKKwl2YWxpZCA9M0QgaW50Zi0+ dHhfc3BiX2RtYV92YWxpZDsKKwlmb3IgKGkgPTNEIDA7IGkgPD0zRCBucl9mcmFnczsgaSsrKSB7 CisJCWlmICghaSkgeworCQkJc2l6ZSA9M0Qgc2tiX2hlYWRsZW4oc2tiKTsKKwkJCWlmICghbnJf ZnJhZ3MgJiYgc2l6ZSA8IChFVEhfWkxFTiArIEVUSF9GQ1NfTEVOKSkgeworCQkJCWlmIChza2Jf cHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4gKyBFVEhfRkNTX0xFTikpIHsKKwkJCQkJcmV0ID0zRCBO RVRERVZfVFhfT0s7CisJCQkJCWdvdG8gb3V0OworCQkJCX0KKwkJCQlzaXplID0zRCBza2ItPmxl bjsKKwkJCX0KKwkJCW1hcHBpbmcgPTNEIGRtYV9tYXBfc2luZ2xlKGtkZXYsIHNrYi0+ZGF0YSwg c2l6ZSwKKwkJCQkJCSBETUFfVE9fREVWSUNFKTsKKwkJfSBlbHNlIHsKKwkJCWZyYWcgPTNEICZz a2Jfc2hpbmZvKHNrYiktPmZyYWdzW2kgLSAxXTsKKwkJCXNpemUgPTNEIHNrYl9mcmFnX3NpemUo ZnJhZyk7CisJCQltYXBwaW5nID0zRCBza2JfZnJhZ19kbWFfbWFwKGtkZXYsIGZyYWcsIDAsIHNp emUsCisJCQkJCQkgICBETUFfVE9fREVWSUNFKTsKKwkJfQorCisJCWlmIChkbWFfbWFwcGluZ19l cnJvcihrZGV2LCBtYXBwaW5nKSkgeworCQkJcmV0ID0zRCBORVRERVZfVFhfT0s7CisJCQlpbnRm LT5taWIudHhfZG1hX2ZhaWxlZCsrOworCQkJZ290byBvdXRfdW5tYXBfZnJhZ3M7CisJCX0KKwor CQl0eGNiID0zRCAmaW50Zi0+dHhfY2JzW3NwYl9pbmRleF07CisJCWRlc2MgPTNEICZpbnRmLT50 eF9zcGJfY3B1W3NwYl9pbmRleF07CisJCW1lbXNldChkZXNjLCAwLCBzaXplb2YoKmRlc2MpKTsK KwkJdHhjYi0+c2tiID0zRCBza2I7CisJCXR4Y2ItPmJ5dGVzX3NlbnQgPTNEIHRvdGFsX2J5dGVz OworCQlkbWFfdW5tYXBfYWRkcl9zZXQodHhjYiwgZG1hX2FkZHIsIG1hcHBpbmcpOworCQlkbWFf dW5tYXBfbGVuX3NldCh0eGNiLCBkbWFfbGVuLCBzaXplKTsKKwkJaWYgKCFpKSB7CisJCQlkZXNj LT5mbGFncyB8PTNEIERFU0NfU09GOworCQkJaWYgKGNzdW1faHcpCisJCQkJZGVzYy0+ZmxhZ3Mg fD0zRCBERVNDX0VQS1RfQ01EOworCQl9CisKKwkJaWYgKGkgPTNEPTNEIG5yX2ZyYWdzKSB7CisJ CQlkZXNjLT5mbGFncyB8PTNEIERFU0NfRU9GOworCQkJdHhjYi0+bGFzdCA9M0QgdHJ1ZTsKKwkJ fQorCisJCWRlc2MtPmJ1ZiA9M0QgbWFwcGluZzsKKwkJZGVzYy0+c2l6ZSA9M0Qgc2l6ZTsKKwkJ ZGVzYy0+ZmxhZ3MgfD0zRCBERVNDX0lOVF9FTjsKKworCQluZXRpZl9kYmcoaW50ZiwgdHhfcXVl dWVkLCBkZXYsCisJCQkgICIlcyBkbWFfYnVmPTNEJXBhZCBkbWFfbGVuPTNEMHgleCBmbGFncz0z RDB4JXggaW5kZXg9M0QweCV4XG4iLAorCQkJICBfX2Z1bmNfXywgJm1hcHBpbmcsIGRlc2MtPnNp emUsIGRlc2MtPmZsYWdzLAorCQkJICBzcGJfaW5kZXgpOworCisJCXNwYl9pbmRleCA9M0QgaW5j cl9yaW5nKHNwYl9pbmRleCwgREVTQ19SSU5HX0NPVU5UKTsKKwkJdmFsaWQgPTNEIGluY3JfbGFz dF9ieXRlKHZhbGlkLCBpbnRmLT50eF9zcGJfZG1hX2FkZHIsCisJCQkJICAgICAgIERFU0NfUklO R19DT1VOVCk7CisJfQorCisJLyogRW5zdXJlIGFsbCBkZXNjcmlwdG9ycyBoYXZlIGJlZW4gd3Jp dHRlbiB0byBEUkFNIGZvciB0aGUKKwkgKiBoYXJkd2FyZSB0byBzZWUgdXAtdG8tZGF0ZSBjb250 ZW50cy4KKwkgKi8KKwl3bWIoKTsKKworCWludGYtPnR4X3NwYl9pbmRleCA9M0Qgc3BiX2luZGV4 OworCWludGYtPnR4X3NwYl9kbWFfdmFsaWQgPTNEIHZhbGlkOworCWJjbWFzcF9pbnRmX3R4X3dy aXRlKGludGYsIGludGYtPnR4X3NwYl9kbWFfdmFsaWQpOworCisJaWYgKHR4X3NwYl9yaW5nX2Z1 bGwoaW50ZiwgTUFYX1NLQl9GUkFHUyArIDEpKQorCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisK KwlzcGluX3VubG9jaygmaW50Zi0+dHhfbG9jayk7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKKwor b3V0X3VubWFwX2ZyYWdzOgorCXNwYl9pbmRleCA9M0QgaW50Zi0+dHhfc3BiX2luZGV4OworCWZv ciAoaiA9M0QgMDsgaiA8IGk7IGorKykgeworCQliY21hc3BfY2xlYW5fdHhjYihpbnRmLCBzcGJf aW5kZXgpOworCQlzcGJfaW5kZXggPTNEIGluY3JfcmluZyhzcGJfaW5kZXgsIERFU0NfUklOR19D T1VOVCk7CisJfQorb3V0OgorCXNwaW5fdW5sb2NrKCZpbnRmLT50eF9sb2NrKTsKKwlyZXR1cm4g cmV0OworfQorCitzdGF0aWMgdm9pZCBiY21hc3BfbmV0aWZfc3RhcnQoc3RydWN0IG5ldF9kZXZp Y2UgKmRldikKK3sKKwlzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYgPTNEIG5ldGRldl9wcml2KGRl dik7CisKKwliY21hc3Bfc2V0X3J4X21vZGUoZGV2KTsKKwluYXBpX2VuYWJsZSgmaW50Zi0+dHhf bmFwaSk7CisJbmFwaV9lbmFibGUoJmludGYtPnJ4X25hcGkpOworCisJYmNtYXNwX2VuYWJsZV9y eF9pcnEoaW50ZiwgMSk7CisJYmNtYXNwX2VuYWJsZV90eF9pcnEoaW50ZiwgMSk7CisKKwlwaHlf c3RhcnQoZGV2LT5waHlkZXYpOworfQorCitzdGF0aWMgdm9pZCB1bWFjX3Jlc2V0KHN0cnVjdCBi Y21hc3BfaW50ZiAqaW50ZikKK3sKKwl1bWFjX3dsKGludGYsIDB4MCwgVU1DX0NNRCk7CisJdW1h Y193bChpbnRmLCBVTUNfQ01EX1NXX1JFU0VULCBVTUNfQ01EKTsKKwl1c2xlZXBfcmFuZ2UoMTAs IDEwMCk7CisJdW1hY193bChpbnRmLCAweDAsIFVNQ19DTUQpOworfQorCitzdGF0aWMgdm9pZCB1 bWFjX3NldF9od19hZGRyKHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZiwKKwkJCSAgICAgY29uc3Qg dW5zaWduZWQgY2hhciAqYWRkcikKK3sKKwl1MzIgbWFjMCA9M0QgKGFkZHJbMF0gPDwgMjQpIHwg KGFkZHJbMV0gPDwgMTYpIHwgKGFkZHJbMl0gPDwgOCkgfAorCQkgICAgYWRkclszXTsKKwl1MzIg bWFjMSA9M0QgKGFkZHJbNF0gPDwgOCkgfCBhZGRyWzVdOworCisJdW1hY193bChpbnRmLCBtYWMw LCBVTUNfTUFDMCk7CisJdW1hY193bChpbnRmLCBtYWMxLCBVTUNfTUFDMSk7Cit9CisKK3N0YXRp YyB2b2lkIHVtYWNfZW5hYmxlX3NldChzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsIHUzMiBtYXNr LAorCQkJICAgIHVuc2lnbmVkIGludCBlbmFibGUpCit7CisJdTMyIHJlZzsKKworCXJlZyA9M0Qg dW1hY19ybChpbnRmLCBVTUNfQ01EKTsKKwlpZiAoZW5hYmxlKQorCQlyZWcgfD0zRCBtYXNrOwor CWVsc2UKKwkJcmVnICY9M0Qgfm1hc2s7CisJdW1hY193bChpbnRmLCByZWcsIFVNQ19DTUQpOwor CisJLyogVW5pTUFDIHN0b3BzIG9uIGEgcGFja2V0IGJvdW5kYXJ5LCB3YWl0IGZvciBhIGZ1bGwt c2l6ZWQgcGFja2V0CisJICogdG8gYmUgcHJvY2Vzc2VkICgxIG1zZWMpLgorCSAqLworCWlmIChl bmFibGUgPTNEPTNEIDApCisJCXVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTsKK30KKworc3RhdGlj IHZvaWQgdW1hY19pbml0KHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZikKK3sKKwl1bWFjX3dsKGlu dGYsIDB4ODAwLCBVTUNfRlJNX0xFTik7CisJdW1hY193bChpbnRmLCAweGZmZmYsIFVNQ19QQVVT RV9DTlRSTCk7CisJdW1hY193bChpbnRmLCAweDgwMCwgVU1DX1JYX01BWF9QS1RfU1opOworCXVt YWNfZW5hYmxlX3NldChpbnRmLCBVTUNfQ01EX1BST01JU0MsIDEpOworfQorCitzdGF0aWMgaW50 IGJjbWFzcF90eF9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKK3sK KwlzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYgPTNECisJCWNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1 Y3QgYmNtYXNwX2ludGYsIHR4X25hcGkpOworCXN0cnVjdCBkZXZpY2UgKmtkZXYgPTNEICZpbnRm LT5wYXJlbnQtPnBkZXYtPmRldjsKKwl1bnNpZ25lZCBsb25nIHJlYWQsIHJlbGVhc2VkID0zRCAw OworCXN0cnVjdCBiY21hc3BfdHhfY2IgKnR4Y2I7CisJc3RydWN0IGJjbWFzcF9kZXNjICpkZXNj OworCWRtYV9hZGRyX3QgbWFwcGluZzsKKworCXJlYWQgPTNEIGJjbWFzcF9pbnRmX3R4X3JlYWQo aW50Zik7CisJd2hpbGUgKGludGYtPnR4X3NwYl9kbWFfcmVhZCAhPTNEIHJlYWQpIHsKKwkJdHhj YiA9M0QgJmludGYtPnR4X2Nic1tpbnRmLT50eF9zcGJfY2xlYW5faW5kZXhdOworCQltYXBwaW5n ID0zRCBkbWFfdW5tYXBfYWRkcih0eGNiLCBkbWFfYWRkcik7CisKKwkJZG1hX3VubWFwX3Npbmds ZShrZGV2LCBtYXBwaW5nLAorCQkJCSBkbWFfdW5tYXBfbGVuKHR4Y2IsIGRtYV9sZW4pLAorCQkJ CSBETUFfVE9fREVWSUNFKTsKKworCQlpZiAodHhjYi0+bGFzdCkgeworCQkJZGV2X2NvbnN1bWVf c2tiX2FueSh0eGNiLT5za2IpOworCQkJaW50Zi0+bmRldi0+c3RhdHMudHhfcGFja2V0cysrOwor CQkJaW50Zi0+bmRldi0+c3RhdHMudHhfYnl0ZXMgKz0zRCB0eGNiLT5ieXRlc19zZW50OworCQl9 CisKKwkJZGVzYyA9M0QgJmludGYtPnR4X3NwYl9jcHVbaW50Zi0+dHhfc3BiX2NsZWFuX2luZGV4 XTsKKworCQluZXRpZl9kYmcoaW50ZiwgdHhfZG9uZSwgaW50Zi0+bmRldiwKKwkJCSAgIiVzIGRt YV9idWY9M0QlcGFkIGRtYV9sZW49M0QweCV4IGZsYWdzPTNEMHgleCBjX2luZGV4PTNEMHgleFxu IiwKKwkJCSAgX19mdW5jX18sICZtYXBwaW5nLCBkZXNjLT5zaXplLCBkZXNjLT5mbGFncywKKwkJ CSAgaW50Zi0+dHhfc3BiX2NsZWFuX2luZGV4KTsKKworCQliY21hc3BfY2xlYW5fdHhjYihpbnRm LCBpbnRmLT50eF9zcGJfY2xlYW5faW5kZXgpOworCQlyZWxlYXNlZCsrOworCisJCWludGYtPnR4 X3NwYl9jbGVhbl9pbmRleCA9M0QgaW5jcl9yaW5nKGludGYtPnR4X3NwYl9jbGVhbl9pbmRleCwK KwkJCQkJCSAgICAgREVTQ19SSU5HX0NPVU5UKTsKKwkJaW50Zi0+dHhfc3BiX2RtYV9yZWFkID0z RCBpbmNyX2ZpcnN0X2J5dGUoaW50Zi0+dHhfc3BiX2RtYV9yZWFkLAorCQkJCQkJCWludGYtPnR4 X3NwYl9kbWFfYWRkciwKKwkJCQkJCQlERVNDX1JJTkdfQ09VTlQpOworCX0KKworCS8qIEVuc3Vy ZSBhbGwgZGVzY3JpcHRvcnMgaGF2ZSBiZWVuIHdyaXR0ZW4gdG8gRFJBTSBmb3IgdGhlIGhhcmR3 YXJlCisJICogdG8gc2VlIHVwZGF0ZWQgY29udGVudHMuCisJICovCisJd21iKCk7CisKKwluYXBp X2NvbXBsZXRlKCZpbnRmLT50eF9uYXBpKTsKKworCWJjbWFzcF9lbmFibGVfdHhfaXJxKGludGYs IDEpOworCisJaWYgKHJlbGVhc2VkKQorCQluZXRpZl93YWtlX3F1ZXVlKGludGYtPm5kZXYpOwor CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYmNtYXNwX3J4X3BvbGwoc3RydWN0IG5hcGlf c3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQoreworCXN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZiA9 M0QKKwkJY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBiY21hc3BfaW50ZiwgcnhfbmFwaSk7CisJ c3RydWN0IGRldmljZSAqa2RldiA9M0QgJmludGYtPnBhcmVudC0+cGRldi0+ZGV2OworCXVuc2ln bmVkIGxvbmcgcHJvY2Vzc2VkID0zRCAwOworCXN0cnVjdCBiY21hc3BfZGVzYyAqZGVzYzsKKwlz dHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWRtYV9hZGRyX3QgdmFsaWQ7CisJdm9pZCAqZGF0YTsKKwl1 NjQgZmxhZ3M7CisJdTMyIGxlbjsKKworCXZhbGlkID0zRCBiY21hc3BfaW50Zl9yeF9kZXNjX3Jl YWQoaW50ZikgKyAxOworCWlmICh2YWxpZCA9M0Q9M0QgaW50Zi0+cnhfZWRwa3RfZG1hX2FkZHIg KyBERVNDX1JJTkdfU0laRSkKKwkJdmFsaWQgPTNEIGludGYtPnJ4X2VkcGt0X2RtYV9hZGRyOwor CisJd2hpbGUgKChwcm9jZXNzZWQgPCBidWRnZXQpICYmICh2YWxpZCAhPTNEIGludGYtPnJ4X2Vk cGt0X2RtYV9yZWFkKSkgeworCQlkZXNjID0zRCAmaW50Zi0+cnhfZWRwa3RfY3B1W2ludGYtPnJ4 X2VkcGt0X2luZGV4XTsKKworCQkvKiBFbnN1cmUgdGhhdCBkZXNjcmlwdG9yIGhhcyBiZWVuIGZ1 bGx5IHdyaXR0ZW4gdG8gRFJBTSBieQorCQkgKiBoYXJkd2FyZSBiZWZvcmUgcmVhZGluZyBieSB0 aGUgQ1BVCisJCSAqLworCQlybWIoKTsKKworCQkvKiBDYWxjdWxhdGUgdmlydCBhZGRyIGJ5IG9m ZnNldHRpbmcgZnJvbSBwaHlzaWNhbCBhZGRyICovCisJCWRhdGEgPTNEIGludGYtPnJ4X3Jpbmdf Y3B1ICsKKwkJCShERVNDX0FERFIoZGVzYy0+YnVmKSAtIGludGYtPnJ4X3JpbmdfZG1hKTsKKwor CQlmbGFncyA9M0QgREVTQ19GTEFHUyhkZXNjLT5idWYpOworCQlpZiAodW5saWtlbHkoZmxhZ3Mg JiAoREVTQ19DUkNfRVJSIHwgREVTQ19SWF9TWU1fRVJSKSkpIHsKKwkJCW5ldGlmX2VycihpbnRm LCByeF9zdGF0dXMsIGludGYtPm5kZXYsICJmbGFncz0zRDB4JWxseFxuIiwKKwkJCQkgIGZsYWdz KTsKKworCQkJaW50Zi0+bmRldi0+c3RhdHMucnhfZXJyb3JzKys7CisJCQlpbnRmLT5uZGV2LT5z dGF0cy5yeF9kcm9wcGVkKys7CisJCQlnb3RvIG5leHQ7CisJCX0KKworCQlkbWFfc3luY19zaW5n bGVfZm9yX2NwdShrZGV2LCBERVNDX0FERFIoZGVzYy0+YnVmKSwgZGVzYy0+c2l6ZSwKKwkJCQkJ RE1BX0ZST01fREVWSUNFKTsKKworCQlsZW4gPTNEIGRlc2MtPnNpemU7CisKKwkJc2tiID0zRCBf X25ldGRldl9hbGxvY19za2IoaW50Zi0+bmRldiwgbGVuLAorCQkJCQkgR0ZQX0FUT01JQyB8IF9f R0ZQX05PV0FSTik7CisJCWlmICghc2tiKSB7CisJCQlpbnRmLT5uZGV2LT5zdGF0cy5yeF9lcnJv cnMrKzsKKwkJCWludGYtPm1pYi5hbGxvY19yeF9za2JfZmFpbGVkKys7CisJCQluZXRpZl93YXJu KGludGYsIHJ4X2VyciwgaW50Zi0+bmRldiwKKwkJCQkgICAiU0tCIGFsbG9jIGZhaWxlZFxuIik7 CisJCQlnb3RvIG5leHQ7CisJCX0KKworCQlza2JfcHV0KHNrYiwgbGVuKTsKKwkJbWVtY3B5KHNr Yi0+ZGF0YSwgZGF0YSwgbGVuKTsKKworCQlza2JfcHVsbChza2IsIDIpOworCQlsZW4gLT0zRCAy OworCQlpZiAobGlrZWx5KGludGYtPmNyY19md2QpKSB7CisJCQlza2JfdHJpbShza2IsIGxlbiAt IEVUSF9GQ1NfTEVOKTsKKwkJCWxlbiAtPTNEIEVUSF9GQ1NfTEVOOworCQl9CisKKwkJaWYgKChp bnRmLT5uZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfUlhDU1VNKSAmJgorCQkgICAgKGRlc2MtPmJ1 ZiAmIERFU0NfQ0hLU1VNKSkKKwkJCXNrYi0+aXBfc3VtbWVkID0zRCBDSEVDS1NVTV9VTk5FQ0VT U0FSWTsKKworCQlza2ItPnByb3RvY29sID0zRCBldGhfdHlwZV90cmFucyhza2IsIGludGYtPm5k ZXYpOworCisJCW5hcGlfZ3JvX3JlY2VpdmUobmFwaSwgc2tiKTsKKworCQlpbnRmLT5uZGV2LT5z dGF0cy5yeF9wYWNrZXRzKys7CisJCWludGYtPm5kZXYtPnN0YXRzLnJ4X2J5dGVzICs9M0QgbGVu OworCituZXh0OgorCQliY21hc3BfaW50Zl9yeF9idWZmZXJfd3JpdGUoaW50ZiwgKERFU0NfQURE UihkZXNjLT5idWYpICsKKwkJCQkJICAgIGRlc2MtPnNpemUpKTsKKworCQlwcm9jZXNzZWQrKzsK KwkJaW50Zi0+cnhfZWRwa3RfZG1hX3JlYWQgPTNECisJCQlpbmNyX2ZpcnN0X2J5dGUoaW50Zi0+ cnhfZWRwa3RfZG1hX3JlYWQsCisJCQkJCWludGYtPnJ4X2VkcGt0X2RtYV9hZGRyLAorCQkJCQlE RVNDX1JJTkdfQ09VTlQpOworCQlpbnRmLT5yeF9lZHBrdF9pbmRleCA9M0QgaW5jcl9yaW5nKGlu dGYtPnJ4X2VkcGt0X2luZGV4LAorCQkJCQkJIERFU0NfUklOR19DT1VOVCk7CisJfQorCisJYmNt YXNwX2ludGZfcnhfZGVzY193cml0ZShpbnRmLCBpbnRmLT5yeF9lZHBrdF9kbWFfcmVhZCk7CisK KwlpZiAocHJvY2Vzc2VkIDwgYnVkZ2V0KSB7CisJCW5hcGlfY29tcGxldGVfZG9uZSgmaW50Zi0+ cnhfbmFwaSwgcHJvY2Vzc2VkKTsKKwkJYmNtYXNwX2VuYWJsZV9yeF9pcnEoaW50ZiwgMSk7CisJ fQorCisJcmV0dXJuIHByb2Nlc3NlZDsKK30KKworc3RhdGljIHZvaWQgYmNtYXNwX2Fkal9saW5r KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGJjbWFzcF9pbnRmICppbnRmID0z RCBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPTNEIGRldi0+ cGh5ZGV2OworCXUzMiBjbWRfYml0cyA9M0QgMCwgcmVnOworCWludCBjaGFuZ2VkID0zRCAwOwor CisJaWYgKGludGYtPm9sZF9saW5rICE9M0QgcGh5ZGV2LT5saW5rKSB7CisJCWNoYW5nZWQgPTNE IDE7CisJCWludGYtPm9sZF9saW5rID0zRCBwaHlkZXYtPmxpbms7CisJfQorCisJaWYgKGludGYt Pm9sZF9kdXBsZXggIT0zRCBwaHlkZXYtPmR1cGxleCkgeworCQljaGFuZ2VkID0zRCAxOworCQlp bnRmLT5vbGRfZHVwbGV4ID0zRCBwaHlkZXYtPmR1cGxleDsKKwl9CisKKwlzd2l0Y2ggKHBoeWRl di0+c3BlZWQpIHsKKwljYXNlIFNQRUVEXzI1MDA6CisJCWNtZF9iaXRzID0zRCBVTUNfQ01EX1NQ RUVEXzI1MDA7CisJCWJyZWFrOworCWNhc2UgU1BFRURfMTAwMDoKKwkJY21kX2JpdHMgPTNEIFVN Q19DTURfU1BFRURfMTAwMDsKKwkJYnJlYWs7CisJY2FzZSBTUEVFRF8xMDA6CisJCWNtZF9iaXRz ID0zRCBVTUNfQ01EX1NQRUVEXzEwMDsKKwkJYnJlYWs7CisJY2FzZSBTUEVFRF8xMDoKKwkJY21k X2JpdHMgPTNEIFVNQ19DTURfU1BFRURfMTA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFr OworCX0KKwljbWRfYml0cyA8PD0zRCBVTUNfQ01EX1NQRUVEX1NISUZUOworCisJaWYgKHBoeWRl di0+ZHVwbGV4ID0zRD0zRCBEVVBMRVhfSEFMRikKKwkJY21kX2JpdHMgfD0zRCBVTUNfQ01EX0hE X0VOOworCisJaWYgKGludGYtPm9sZF9wYXVzZSAhPTNEIHBoeWRldi0+cGF1c2UpIHsKKwkJY2hh bmdlZCA9M0QgMTsKKwkJaW50Zi0+b2xkX3BhdXNlID0zRCBwaHlkZXYtPnBhdXNlOworCX0KKwor CWlmICghcGh5ZGV2LT5wYXVzZSkKKwkJY21kX2JpdHMgfD0zRCBVTUNfQ01EX1JYX1BBVVNFX0lH Tk9SRSB8IFVNQ19DTURfVFhfUEFVU0VfSUdOT1JFOworCisJaWYgKCFjaGFuZ2VkKQorCQlyZXR1 cm47CisKKwlpZiAocGh5ZGV2LT5saW5rKSB7CisJCXJlZyA9M0QgdW1hY19ybChpbnRmLCBVTUNf Q01EKTsKKwkJcmVnICY9M0QgfigoVU1DX0NNRF9TUEVFRF9NQVNLIDw8IFVNQ19DTURfU1BFRURf U0hJRlQpIHwKKwkJCVVNQ19DTURfSERfRU4gfCBVTUNfQ01EX1JYX1BBVVNFX0lHTk9SRSB8CisJ CQlVTUNfQ01EX1RYX1BBVVNFX0lHTk9SRSk7CisJCXJlZyB8PTNEIGNtZF9iaXRzOworCQl1bWFj X3dsKGludGYsIHJlZywgVU1DX0NNRCk7CisKKwkJaW50Zi0+ZWVlLmVlZV9hY3RpdmUgPTNEIHBo eV9pbml0X2VlZShwaHlkZXYsIDApID49M0QgMDsKKwkJYmNtYXNwX2VlZV9lbmFibGVfc2V0KGlu dGYsIGludGYtPmVlZS5lZWVfYWN0aXZlKTsKKwl9CisKKwlyZWcgPTNEIHJnbWlpX3JsKGludGYs IFJHTUlJX09PQl9DTlRSTCk7CisJaWYgKHBoeWRldi0+bGluaykKKwkJcmVnIHw9M0QgUkdNSUlf TElOSzsKKwllbHNlCisJCXJlZyAmPTNEIH5SR01JSV9MSU5LOworCXJnbWlpX3dsKGludGYsIHJl ZywgUkdNSUlfT09CX0NOVFJMKTsKKworCWlmIChjaGFuZ2VkKQorCQlwaHlfcHJpbnRfc3RhdHVz KHBoeWRldik7Cit9CisKK3N0YXRpYyBpbnQgYmNtYXNwX2luaXRfcngoc3RydWN0IGJjbWFzcF9p bnRmICppbnRmKQoreworCXN0cnVjdCBkZXZpY2UgKmtkZXYgPTNEICZpbnRmLT5wYXJlbnQtPnBk ZXYtPmRldjsKKwlzdHJ1Y3QgcGFnZSAqYnVmZmVyX3BnOworCWRtYV9hZGRyX3QgZG1hOworCXZv aWQgKnA7CisJdTMyIHJlZzsKKwlpbnQgcmV0OworCisJaW50Zi0+cnhfYnVmX29yZGVyID0zRCBn ZXRfb3JkZXIoUklOR19CVUZGRVJfU0laRSk7CisJYnVmZmVyX3BnID0zRCBhbGxvY19wYWdlcyhH RlBfS0VSTkVMLCBpbnRmLT5yeF9idWZfb3JkZXIpOworCisJZG1hID0zRCBkbWFfbWFwX3BhZ2Uo a2RldiwgYnVmZmVyX3BnLCAwLCBSSU5HX0JVRkZFUl9TSVpFLAorCQkJICAgRE1BX0ZST01fREVW SUNFKTsKKwlpZiAoZG1hX21hcHBpbmdfZXJyb3Ioa2RldiwgZG1hKSkgeworCQlfX2ZyZWVfcGFn ZXMoYnVmZmVyX3BnLCBpbnRmLT5yeF9idWZfb3JkZXIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9 CisJaW50Zi0+cnhfcmluZ19jcHUgPTNEIHBhZ2VfdG9fdmlydChidWZmZXJfcGcpOworCWludGYt PnJ4X3JpbmdfZG1hID0zRCBkbWE7CisJaW50Zi0+cnhfcmluZ19kbWFfdmFsaWQgPTNEIGludGYt PnJ4X3JpbmdfZG1hICsgUklOR19CVUZGRVJfU0laRSAtIDE7CisKKwlwID0zRCBkbWFfYWxsb2Nf Y29oZXJlbnQoa2RldiwgREVTQ19SSU5HX1NJWkUsICZpbnRmLT5yeF9lZHBrdF9kbWFfYWRkciwK KwkJCSAgICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIXApIHsKKwkJcmV0ID0zRCAtRU5PTUVNOwor CQlnb3RvIGZyZWVfcnhfcmluZzsKKwl9CisJaW50Zi0+cnhfZWRwa3RfY3B1ID0zRCBwOworCisJ bmV0aWZfbmFwaV9hZGQoaW50Zi0+bmRldiwgJmludGYtPnJ4X25hcGksIGJjbWFzcF9yeF9wb2xs KTsKKworCWludGYtPnJ4X2VkcGt0X2RtYV9yZWFkID0zRCBpbnRmLT5yeF9lZHBrdF9kbWFfYWRk cjsKKwlpbnRmLT5yeF9lZHBrdF9pbmRleCA9M0QgMDsKKworCS8qIE1ha2Ugc3VyZSBjaGFubmVs cyBhcmUgZGlzYWJsZWQgKi8KKwlyeF9lZHBrdF9jZmdfd2woaW50ZiwgMHgwLCBSWF9FRFBLVF9D RkdfRU5BQkxFKTsKKworCS8qIFJ4IFNQQiAqLworCXJ4X2VkcGt0X2NmZ193cShpbnRmLCBpbnRm LT5yeF9yaW5nX2RtYSwgUlhfRURQS1RfUklOR19CVUZGRVJfUkVBRCk7CisJcnhfZWRwa3RfY2Zn X3dxKGludGYsIGludGYtPnJ4X3JpbmdfZG1hLCBSWF9FRFBLVF9SSU5HX0JVRkZFUl9XUklURSk7 CisJcnhfZWRwa3RfY2ZnX3dxKGludGYsIGludGYtPnJ4X3JpbmdfZG1hLCBSWF9FRFBLVF9SSU5H X0JVRkZFUl9CQVNFKTsKKwlyeF9lZHBrdF9jZmdfd3EoaW50ZiwgaW50Zi0+cnhfcmluZ19kbWFf dmFsaWQsCisJCQlSWF9FRFBLVF9SSU5HX0JVRkZFUl9FTkQpOworCXJ4X2VkcGt0X2NmZ193cShp bnRmLCBpbnRmLT5yeF9yaW5nX2RtYV92YWxpZCwKKwkJCVJYX0VEUEtUX1JJTkdfQlVGRkVSX1ZB TElEKTsKKworCS8qIEVEUEtUICovCisJcnhfZWRwa3RfY2ZnX3dsKGludGYsIChSWF9FRFBLVF9D RkdfQ0ZHMF9SQlVGXzRLIDw8CisJCQlSWF9FRFBLVF9DRkdfQ0ZHMF9EQlVGX1NISUZUKSB8CisJ CSAgICAgICAoUlhfRURQS1RfQ0ZHX0NGRzBfNjRfQUxOIDw8CisJCQlSWF9FRFBLVF9DRkdfQ0ZH MF9CQUxOX1NISUZUKSB8CisJCSAgICAgICAoUlhfRURQS1RfQ0ZHX0NGRzBfRUZSTV9TVFVGKSwK KwkJCVJYX0VEUEtUX0NGR19DRkcwKTsKKwlyeF9lZHBrdF9kbWFfd3EoaW50ZiwgaW50Zi0+cnhf ZWRwa3RfZG1hX2FkZHIsIFJYX0VEUEtUX0RNQV9XUklURSk7CisJcnhfZWRwa3RfZG1hX3dxKGlu dGYsIGludGYtPnJ4X2VkcGt0X2RtYV9hZGRyLCBSWF9FRFBLVF9ETUFfUkVBRCk7CisJcnhfZWRw a3RfZG1hX3dxKGludGYsIGludGYtPnJ4X2VkcGt0X2RtYV9hZGRyLCBSWF9FRFBLVF9ETUFfQkFT RSk7CisJcnhfZWRwa3RfZG1hX3dxKGludGYsIGludGYtPnJ4X2VkcGt0X2RtYV9hZGRyICsgKERF U0NfUklOR19TSVpFIC0gMSksCisJCQlSWF9FRFBLVF9ETUFfRU5EKTsKKwlyeF9lZHBrdF9kbWFf d3EoaW50ZiwgaW50Zi0+cnhfZWRwa3RfZG1hX2FkZHIgKyAoREVTQ19SSU5HX1NJWkUgLSAxKSwK KwkJCVJYX0VEUEtUX0RNQV9WQUxJRCk7CisKKwlyZWcgPTNEIFVNQUMyRkJfQ0ZHX0RFRkFVTFRf RU4gfAorCSAgICAgICgoaW50Zi0+Y2hhbm5lbCArIDExKSA8PCBVTUFDMkZCX0NGR19DSElEX1NI SUZUKTsKKwlyZWcgfD0zRCAoMHhkIDw8IFVNQUMyRkJfQ0ZHX09LX1NFTkRfU0hJRlQpOworCXVt YWMyZmJfd2woaW50ZiwgcmVnLCBVTUFDMkZCX0NGRyk7CisKKwlyZXR1cm4gMDsKKworZnJlZV9y eF9yaW5nOgorCWRtYV91bm1hcF9wYWdlKGtkZXYsIGludGYtPnJ4X3JpbmdfZG1hLCBSSU5HX0JV RkZFUl9TSVpFLAorCQkgICAgICAgRE1BX0ZST01fREVWSUNFKTsKKwlfX2ZyZWVfcGFnZXModmly dF90b19wYWdlKGludGYtPnJ4X3JpbmdfY3B1KSwgaW50Zi0+cnhfYnVmX29yZGVyKTsKKworCXJl dHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGJjbWFzcF9yZWNsYWltX2ZyZWVfYWxsX3J4KHN0 cnVjdCBiY21hc3BfaW50ZiAqaW50ZikKK3sKKwlzdHJ1Y3QgZGV2aWNlICprZGV2ID0zRCAmaW50 Zi0+cGFyZW50LT5wZGV2LT5kZXY7CisKKwlkbWFfZnJlZV9jb2hlcmVudChrZGV2LCBERVNDX1JJ TkdfU0laRSwgaW50Zi0+cnhfZWRwa3RfY3B1LAorCQkJICBpbnRmLT5yeF9lZHBrdF9kbWFfYWRk cik7CisJZG1hX3VubWFwX3BhZ2Uoa2RldiwgaW50Zi0+cnhfcmluZ19kbWEsIFJJTkdfQlVGRkVS X1NJWkUsCisJCSAgICAgICBETUFfRlJPTV9ERVZJQ0UpOworCV9fZnJlZV9wYWdlcyh2aXJ0X3Rv X3BhZ2UoaW50Zi0+cnhfcmluZ19jcHUpLCBpbnRmLT5yeF9idWZfb3JkZXIpOworfQorCitzdGF0 aWMgaW50IGJjbWFzcF9pbml0X3R4KHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZikKK3sKKwlzdHJ1 Y3QgZGV2aWNlICprZGV2ID0zRCAmaW50Zi0+cGFyZW50LT5wZGV2LT5kZXY7CisJdm9pZCAqcDsK KwlpbnQgcmV0OworCisJcCA9M0QgZG1hX2FsbG9jX2NvaGVyZW50KGtkZXYsIERFU0NfUklOR19T SVpFLCAmaW50Zi0+dHhfc3BiX2RtYV9hZGRyLAorCQkJICAgICAgIEdGUF9LRVJORUwpOworCWlm ICghcCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpbnRmLT50eF9zcGJfY3B1ID0zRCBwOworCWlu dGYtPnR4X3NwYl9kbWFfdmFsaWQgPTNEIGludGYtPnR4X3NwYl9kbWFfYWRkciArIERFU0NfUklO R19TSVpFIC0gMTsKKwlpbnRmLT50eF9zcGJfZG1hX3JlYWQgPTNEIGludGYtPnR4X3NwYl9kbWFf YWRkcjsKKworCWludGYtPnR4X2NicyA9M0Qga2NhbGxvYyhERVNDX1JJTkdfQ09VTlQsIHNpemVv ZihzdHJ1Y3QgYmNtYXNwX3R4X2NiKSwKKwkJCSAgICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIWlu dGYtPnR4X2NicykgeworCQlyZXQgPTNEIC1FTk9NRU07CisJCWdvdG8gZnJlZV90eF9zcGI7CisJ fQorCisJc3Bpbl9sb2NrX2luaXQoJmludGYtPnR4X2xvY2spOworCWludGYtPnR4X3NwYl9pbmRl eCA9M0QgMDsKKwlpbnRmLT50eF9zcGJfY2xlYW5faW5kZXggPTNEIDA7CisKKwluZXRpZl9uYXBp X2FkZF90eChpbnRmLT5uZGV2LCAmaW50Zi0+dHhfbmFwaSwgYmNtYXNwX3R4X3BvbGwpOworCisJ LyogTWFrZSBzdXJlIGNoYW5uZWxzIGFyZSBkaXNhYmxlZCAqLworCXR4X3NwYl9jdHJsX3dsKGlu dGYsIDB4MCwgVFhfU1BCX0NUUkxfRU5BQkxFKTsKKwl0eF9lcGt0X2NvcmVfd2woaW50ZiwgMHgw LCBUWF9FUEtUX0NfQ0ZHX01JU0MpOworCisJLyogVHggU1BCICovCisJdHhfc3BiX2N0cmxfd2wo aW50ZiwgKChpbnRmLT5jaGFubmVsICsgOCkgPDwgVFhfU1BCX0NUUkxfWEZfQklEX1NISUZUKSwK KwkJICAgICAgIFRYX1NQQl9DVFJMX1hGX0NUUkwyKTsKKwl0eF9wYXVzZV9jdHJsX3dsKGludGYs ICgxIDw8IChpbnRmLT5jaGFubmVsICsgOCkpLCBUWF9QQVVTRV9NQVBfVkVDVE9SKTsKKwl0eF9z cGJfdG9wX3dsKGludGYsIDB4MWUsIFRYX1NQQl9UT1BfQkxLT1VUKTsKKwl0eF9zcGJfdG9wX3ds KGludGYsIDB4MCwgVFhfU1BCX1RPUF9TUFJFX0JXX0NUUkwpOworCisJdHhfc3BiX2RtYV93cShp bnRmLCBpbnRmLT50eF9zcGJfZG1hX2FkZHIsIFRYX1NQQl9ETUFfUkVBRCk7CisJdHhfc3BiX2Rt YV93cShpbnRmLCBpbnRmLT50eF9zcGJfZG1hX2FkZHIsIFRYX1NQQl9ETUFfQkFTRSk7CisJdHhf c3BiX2RtYV93cShpbnRmLCBpbnRmLT50eF9zcGJfZG1hX3ZhbGlkLCBUWF9TUEJfRE1BX0VORCk7 CisJdHhfc3BiX2RtYV93cShpbnRmLCBpbnRmLT50eF9zcGJfZG1hX3ZhbGlkLCBUWF9TUEJfRE1B X1ZBTElEKTsKKworCXJldHVybiAwOworCitmcmVlX3R4X3NwYjoKKwlkbWFfZnJlZV9jb2hlcmVu dChrZGV2LCBERVNDX1JJTkdfU0laRSwgaW50Zi0+dHhfc3BiX2NwdSwKKwkJCSAgaW50Zi0+dHhf c3BiX2RtYV9hZGRyKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGJjbWFzcF9y ZWNsYWltX2ZyZWVfYWxsX3R4KHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZikKK3sKKwlzdHJ1Y3Qg ZGV2aWNlICprZGV2ID0zRCAmaW50Zi0+cGFyZW50LT5wZGV2LT5kZXY7CisKKwkvKiBGcmVlIGRl c2NyaXB0b3JzICovCisJZG1hX2ZyZWVfY29oZXJlbnQoa2RldiwgREVTQ19SSU5HX1NJWkUsIGlu dGYtPnR4X3NwYl9jcHUsCisJCQkgIGludGYtPnR4X3NwYl9kbWFfYWRkcik7CisKKwkvKiBGcmVl IGNicyAqLworCWtmcmVlKGludGYtPnR4X2Nicyk7Cit9CisKK3N0YXRpYyB2b2lkIGJjbWFzcF9l cGh5X2VuYWJsZV9zZXQoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmLCBib29sIGVuYWJsZSkKK3sK Kwl1MzIgbWFzayA9M0QgUkdNSUlfRVBIWV9DRkdfSUREUV9CSUFTIHwgUkdNSUlfRVBIWV9DRkdf RVhUX1BXUkRPV04gfAorCQkgICBSR01JSV9FUEhZX0NGR19JRERRX0dMT0JBTDsKKwl1MzIgcmVn OworCisJcmVnID0zRCByZ21paV9ybChpbnRmLCBSR01JSV9FUEhZX0NOVFJMKTsKKwlpZiAoZW5h YmxlKSB7CisJCXJlZyAmPTNEIH5SR01JSV9FUEhZX0NLMjVfRElTOworCQlyZ21paV93bChpbnRm LCByZWcsIFJHTUlJX0VQSFlfQ05UUkwpOworCQltZGVsYXkoMSk7CisKKwkJcmVnICY9M0Qgfm1h c2s7CisJCXJlZyB8PTNEIFJHTUlJX0VQSFlfUkVTRVQ7CisJCXJnbWlpX3dsKGludGYsIHJlZywg UkdNSUlfRVBIWV9DTlRSTCk7CisJCW1kZWxheSgxKTsKKworCQlyZWcgJj0zRCB+UkdNSUlfRVBI WV9SRVNFVDsKKwl9IGVsc2UgeworCQlyZWcgfD0zRCBtYXNrIHwgUkdNSUlfRVBIWV9SRVNFVDsK KwkJcmdtaWlfd2woaW50ZiwgcmVnLCBSR01JSV9FUEhZX0NOVFJMKTsKKwkJbWRlbGF5KDEpOwor CQlyZWcgfD0zRCBSR01JSV9FUEhZX0NLMjVfRElTOworCX0KKwlyZ21paV93bChpbnRmLCByZWcs IFJHTUlJX0VQSFlfQ05UUkwpOworCW1kZWxheSgxKTsKKworCS8qIFNldCBvciBjbGVhciB0aGUg TEVEIGNvbnRyb2wgb3ZlcnJpZGUgdG8gYXZvaWQgbGlnaHRpbmcgdXAgTEVEcworCSAqIHdoaWxl IHRoZSBFUEhZIGlzIHBvd2VyZWQgb2ZmIGFuZCBkcmF3aW5nIHVubmVjZXNzYXJ5IGN1cnJlbnQu CisJICovCisJcmVnID0zRCByZ21paV9ybChpbnRmLCBSR01JSV9TWVNfTEVEX0NOVFJMKTsKKwlp ZiAoZW5hYmxlKQorCQlyZWcgJj0zRCB+UkdNSUlfU1lTX0xFRF9DTlRSTF9MSU5LX09WUkQ7CisJ ZWxzZQorCQlyZWcgfD0zRCBSR01JSV9TWVNfTEVEX0NOVFJMX0xJTktfT1ZSRDsKKwlyZ21paV93 bChpbnRmLCByZWcsIFJHTUlJX1NZU19MRURfQ05UUkwpOworfQorCitzdGF0aWMgdm9pZCBiY21h c3BfcmdtaWlfbW9kZV9lbl9zZXQoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmLCBib29sIGVuYWJs ZSkKK3sKKwl1MzIgcmVnOworCisJcmVnID0zRCByZ21paV9ybChpbnRmLCBSR01JSV9PT0JfQ05U UkwpOworCXJlZyAmPTNEIH5SR01JSV9PT0JfRElTOworCWlmIChlbmFibGUpCisJCXJlZyB8PTNE IFJHTUlJX01PREVfRU47CisJZWxzZQorCQlyZWcgJj0zRCB+UkdNSUlfTU9ERV9FTjsKKwlyZ21p aV93bChpbnRmLCByZWcsIFJHTUlJX09PQl9DTlRSTCk7Cit9CisKK3N0YXRpYyB2b2lkIGJjbWFz cF9uZXRpZl9kZWluaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYmNtYXNw X2ludGYgKmludGYgPTNEIG5ldGRldl9wcml2KGRldik7CisJdTMyIHJlZywgdGltZW91dCA9M0Qg MTAwMDsKKworCW5hcGlfZGlzYWJsZSgmaW50Zi0+dHhfbmFwaSk7CisKKwliY21hc3BfZW5hYmxl X3R4KGludGYsIDApOworCisJLyogRmx1c2ggYW55IFRYIHBhY2tldHMgaW4gdGhlIHBpcGUgKi8K Kwl0eF9zcGJfZG1hX3dsKGludGYsIFRYX1NQQl9ETUFfRklGT19GTFVTSCwgVFhfU1BCX0RNQV9G SUZPX0NUUkwpOworCWRvIHsKKwkJcmVnID0zRCB0eF9zcGJfZG1hX3JsKGludGYsIFRYX1NQQl9E TUFfRklGT19TVEFUVVMpOworCQlpZiAoIShyZWcgJiBUWF9TUEJfRE1BX0ZJRk9fRkxVU0gpKQor CQkJYnJlYWs7CisJCXVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTsKKwl9IHdoaWxlICh0aW1lb3V0 LS0gPiAwKTsKKwl0eF9zcGJfZG1hX3dsKGludGYsIDB4MCwgVFhfU1BCX0RNQV9GSUZPX0NUUkwp OworCisJdW1hY19lbmFibGVfc2V0KGludGYsIFVNQ19DTURfVFhfRU4sIDApOworCisJcGh5X3N0 b3AoZGV2LT5waHlkZXYpOworCisJdW1hY19lbmFibGVfc2V0KGludGYsIFVNQ19DTURfUlhfRU4s IDApOworCisJYmNtYXNwX2ZsdXNoX3J4X3BvcnQoaW50Zik7CisJdXNsZWVwX3JhbmdlKDEwMDAs IDIwMDApOworCWJjbWFzcF9lbmFibGVfcngoaW50ZiwgMCk7CisKKwluYXBpX2Rpc2FibGUoJmlu dGYtPnJ4X25hcGkpOworCisJLyogRGlzYWJsZSBpbnRlcnJ1cHRzICovCisJYmNtYXNwX2VuYWJs ZV90eF9pcnEoaW50ZiwgMCk7CisJYmNtYXNwX2VuYWJsZV9yeF9pcnEoaW50ZiwgMCk7CisKKwlu ZXRpZl9uYXBpX2RlbCgmaW50Zi0+dHhfbmFwaSk7CisJYmNtYXNwX3JlY2xhaW1fZnJlZV9hbGxf dHgoaW50Zik7CisKKwluZXRpZl9uYXBpX2RlbCgmaW50Zi0+cnhfbmFwaSk7CisJYmNtYXNwX3Jl Y2xhaW1fZnJlZV9hbGxfcngoaW50Zik7Cit9CisKK3N0YXRpYyBpbnQgYmNtYXNwX3N0b3Aoc3Ry dWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYgPTNEIG5l dGRldl9wcml2KGRldik7CisKKwluZXRpZl9kYmcoaW50ZiwgaWZkb3duLCBkZXYsICJiY21hc3Ag c3RvcFxuIik7CisKKwkvKiBTdG9wIHR4IGZyb20gdXBkYXRpbmcgSFcgKi8KKwluZXRpZl90eF9k aXNhYmxlKGRldik7CisKKwliY21hc3BfbmV0aWZfZGVpbml0KGRldik7CisKKwlwaHlfZGlzY29u bmVjdChkZXYtPnBoeWRldik7CisKKwkvKiBEaXNhYmxlIGludGVybmFsIEVQSFkgb3IgZXh0ZXJu YWwgUEhZICovCisJaWYgKGludGYtPmludGVybmFsX3BoeSkKKwkJYmNtYXNwX2VwaHlfZW5hYmxl X3NldChpbnRmLCBmYWxzZSk7CisJZWxzZQorCQliY21hc3BfcmdtaWlfbW9kZV9lbl9zZXQoaW50 ZiwgZmFsc2UpOworCisJLyogRGlzYWJsZSB0aGUgaW50ZXJmYWNlIGNsb2NrcyAqLworCWJjbWFz cF9jb3JlX2Nsb2NrX3NldF9pbnRmKGludGYsIGZhbHNlKTsKKworCWNsa19kaXNhYmxlX3VucHJl cGFyZShpbnRmLT5wYXJlbnQtPmNsayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQg YmNtYXNwX2NvbmZpZ3VyZV9wb3J0KHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZikKK3sKKwl1MzIg cmVnLCBpZF9tb2RlX2RpcyA9M0QgMDsKKworCXJlZyA9M0QgcmdtaWlfcmwoaW50ZiwgUkdNSUlf UE9SVF9DTlRSTCk7CisJcmVnICY9M0QgflJHTUlJX1BPUlRfTU9ERV9NQVNLOworCisJc3dpdGNo IChpbnRmLT5waHlfaW50ZXJmYWNlKSB7CisJY2FzZSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUk6 CisJCS8qIFJHTUlJX05PX0lEOiBUWEMgdHJhbnNpdGlvbnMgYXQgdGhlIHNhbWUgdGltZSBhcyBU WEQKKwkJICoJCShyZXF1aXJlcyBQQ0Igb3IgcmVjZWl2ZXItc2lkZSBkZWxheSkKKwkJICogUkdN SUk6CUFkZCAybnMgZGVsYXkgb24gVFhDICg5MCBkZWdyZWUgc2hpZnQpCisJCSAqCisJCSAqIElE IGlzIGltcGxpY2l0bHkgZGlzYWJsZWQgZm9yIDEwME1icHMgKFJHKU1JSSBvcGVyYXRpb24uCisJ CSAqLworCQlpZF9tb2RlX2RpcyA9M0QgUkdNSUlfSURfTU9ERV9ESVM7CisJCWZhbGx0aHJvdWdo OworCWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX1RYSUQ6CisJCXJlZyB8PTNEIFJHTUlJ X1BPUlRfTU9ERV9FWFRfR1BIWTsKKwkJYnJlYWs7CisJY2FzZSBQSFlfSU5URVJGQUNFX01PREVf TUlJOgorCQlyZWcgfD0zRCBSR01JSV9QT1JUX01PREVfRVhUX0VQSFk7CisJCWJyZWFrOworCWRl ZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWlmIChpbnRmLT5pbnRlcm5hbF9waHkpCisJCXJlZyB8 PTNEIFJHTUlJX1BPUlRfTU9ERV9FUEhZOworCisJcmdtaWlfd2woaW50ZiwgcmVnLCBSR01JSV9Q T1JUX0NOVFJMKTsKKworCXJlZyA9M0QgcmdtaWlfcmwoaW50ZiwgUkdNSUlfT09CX0NOVFJMKTsK KwlyZWcgJj0zRCB+UkdNSUlfSURfTU9ERV9ESVM7CisJcmVnIHw9M0QgaWRfbW9kZV9kaXM7CisJ cmdtaWlfd2woaW50ZiwgcmVnLCBSR01JSV9PT0JfQ05UUkwpOworfQorCitzdGF0aWMgaW50IGJj bWFzcF9uZXRpZl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgcGh5X2Nvbm5lY3Qp Cit7CisJc3RydWN0IGJjbWFzcF9pbnRmICppbnRmID0zRCBuZXRkZXZfcHJpdihkZXYpOworCXBo eV9pbnRlcmZhY2VfdCBwaHlfaWZhY2UgPTNEIGludGYtPnBoeV9pbnRlcmZhY2U7CisJdTMyIHBo eV9mbGFncyA9M0QgUEhZX0JSQ01fQVVUT19QV1JEV05fRU5BQkxFIHwKKwkJCVBIWV9CUkNNX0RJ U19UWENSWENfTk9FTlJHWSB8CisJCQlQSFlfQlJDTV9JRERRX1NVU1BFTkQ7CisJc3RydWN0IHBo eV9kZXZpY2UgKnBoeWRldiA9M0QgTlVMTDsKKwlpbnQgcmV0OworCisJLyogQWx3YXlzIGVuYWJs ZSBpbnRlcmZhY2UgY2xvY2tzICovCisJYmNtYXNwX2NvcmVfY2xvY2tfc2V0X2ludGYoaW50Ziwg dHJ1ZSk7CisKKwkvKiBFbmFibGUgaW50ZXJuYWwgUEhZIG9yIGV4dGVybmFsIFBIWSBiZWZvcmUg YW55IE1BQyBhY3Rpdml0eSAqLworCWlmIChpbnRmLT5pbnRlcm5hbF9waHkpCisJCWJjbWFzcF9l cGh5X2VuYWJsZV9zZXQoaW50ZiwgdHJ1ZSk7CisJZWxzZQorCQliY21hc3BfcmdtaWlfbW9kZV9l bl9zZXQoaW50ZiwgdHJ1ZSk7CisJYmNtYXNwX2NvbmZpZ3VyZV9wb3J0KGludGYpOworCisJLyog VGhpcyBpcyBhbiB1Z2x5IHF1aXJrIGJ1dCB3ZSBoYXZlIG5vdCBiZWVuIGNvcnJlY3RseQorCSAq IGludGVycHJldGluZyB0aGUgcGh5X2ludGVyZmFjZSB2YWx1ZXMgYW5kIHdlIGhhdmUgZG9uZSB0 aGF0CisJICogYWNyb3NzIGRpZmZlcmVudCBkcml2ZXJzLCBzbyBhdCBsZWFzdCB3ZSBhcmUgY29u c2lzdGVudCBpbgorCSAqIG91ciBtaXN0YWtlcy4KKwkgKgorCSAqIFdoZW4gdGhlIEdlbmVyaWMg UEhZIGRyaXZlciBpcyBpbiB1c2UgZWl0aGVyIHRoZSBQSFkgaGFzCisJICogYmVlbiBzdHJhcHBl ZCBvciBwcm9ncmFtbWVkIGNvcnJlY3RseSBieSB0aGUgYm9vdCBsb2FkZXIgc28KKwkgKiB3ZSBz aG91bGQgc3RpY2sgdG8gb3VyIGluY29ycmVjdCBpbnRlcnByZXRhdGlvbiBzaW5jZSB3ZQorCSAq IGhhdmUgdmFsaWRhdGVkIGl0LgorCSAqCisJICogTm93IHdoZW4gYSBkZWRpY2F0ZWQgUEhZIGRy aXZlciBpcyBpbiB1c2UsIHdlIG5lZWQgdG8KKwkgKiByZXZlcnNlIHRoZSBtZWFuaW5nIG9mIHRo ZSBwaHlfaW50ZXJmYWNlX21vZGUgdmFsdWVzIHRvCisJICogc29tZXRoaW5nIHRoYXQgdGhlIFBI WSBkcml2ZXIgd2lsbCBpbnRlcnByZXQgYW5kIGFjdCBvbiBzdWNoCisJICogdGhhdCB3ZSBoYXZl IHR3byBtaXN0YWtlcyBjYW5jZWxpbmcgdGhlbXNlbHZlcyBzbyB0byBzcGVhay4KKwkgKiBXZSBv bmx5IGRvIHRoaXMgZm9yIHRoZSB0d28gbW9kZXMgdGhhdCBHRU5FVCBkcml2ZXIKKwkgKiBvZmZp Y2lhbGx5IHN1cHBvcnRzIG9uIEJyb2FkY29tIFNUQiBjaGlwczoKKwkgKiBQSFlfSU5URVJGQUNF X01PREVfUkdNSUkgYW5kIFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSV9UWElELgorCSAqIE90aGVy IG1vZGVzIGFyZSBub3QgKm9mZmljaWFsbHkqIHN1cHBvcnRlZCB3aXRoIHRoZSBib290CisJICog bG9hZGVyIGFuZCB0aGUgc2NyaXB0ZWQgZW52aXJvbm1lbnQgZ2VuZXJhdGluZyBEZXZpY2UgVHJl ZQorCSAqIGJsb2JzIGZvciB0aG9zZSBwbGF0Zm9ybXMuCisJICoKKwkgKiBOb3RlIHRoYXQgaW50 ZXJuYWwgUEhZIGFuZCBmaXhlZC1saW5rIGNvbmZpZ3VyYXRpb25zIGFyZSBub3QKKwkgKiBhZmZl Y3RlZCBiZWNhdXNlIHRoZXkgdXNlIGRpZmZlcmVudCBwaHlfaW50ZXJmYWNlX3QgdmFsdWVzCisJ ICogb3IgdGhlIEdlbmVyaWMgUEhZIGRyaXZlci4KKwkgKi8KKwlzd2l0Y2ggKHBoeV9pZmFjZSkg eworCWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJOgorCQlwaHlfaWZhY2UgPTNEIFBIWV9J TlRFUkZBQ0VfTU9ERV9SR01JSV9JRDsKKwkJYnJlYWs7CisJY2FzZSBQSFlfSU5URVJGQUNFX01P REVfUkdNSUlfVFhJRDoKKwkJcGh5X2lmYWNlID0zRCBQSFlfSU5URVJGQUNFX01PREVfUkdNSUlf UlhJRDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJaWYgKHBoeV9jb25u ZWN0KSB7CisJCXBoeWRldiA9M0Qgb2ZfcGh5X2Nvbm5lY3QoZGV2LCBpbnRmLT5waHlfZG4sCisJ CQkJCWJjbWFzcF9hZGpfbGluaywgcGh5X2ZsYWdzLAorCQkJCQlwaHlfaWZhY2UpOworCQlpZiAo IXBoeWRldikgeworCQkJcmV0ID0zRCAtRU5PREVWOworCQkJbmV0ZGV2X2VycihkZXYsICJjb3Vs ZCBub3QgYXR0YWNoIHRvIFBIWVxuIik7CisJCQlnb3RvIGVycl9waHlfZGlzYWJsZTsKKwkJfQor CX0gZWxzZSBpZiAoIWludGYtPndvbG9wdHMpIHsKKwkJcmV0ID0zRCBwaHlfcmVzdW1lKGRldi0+ cGh5ZGV2KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyX3BoeV9kaXNhYmxlOworCX0KKworCXVt YWNfcmVzZXQoaW50Zik7CisKKwl1bWFjX2luaXQoaW50Zik7CisKKwkvKiBEaXNhYmxlIHRoZSBV bmlNQUMgUlgvVFggKi8KKwl1bWFjX2VuYWJsZV9zZXQoaW50ZiwgKFVNQ19DTURfUlhfRU4gfCBV TUNfQ01EX1RYX0VOKSwgMCk7CisKKwl1bWFjX3NldF9od19hZGRyKGludGYsIGRldi0+ZGV2X2Fk ZHIpOworCisJaW50Zi0+b2xkX2R1cGxleCA9M0QgLTE7CisJaW50Zi0+b2xkX2xpbmsgPTNEIC0x OworCWludGYtPm9sZF9wYXVzZSA9M0QgLTE7CisKKwlyZXQgPTNEIGJjbWFzcF9pbml0X3R4KGlu dGYpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX3BoeV9kaXNjb25uZWN0OworCisJLyogVHVybiBv biBhc3AgKi8KKwliY21hc3BfZW5hYmxlX3R4KGludGYsIDEpOworCisJcmV0ID0zRCBiY21hc3Bf aW5pdF9yeChpbnRmKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9yZWNsYWltX3R4OworCisJYmNt YXNwX2VuYWJsZV9yeChpbnRmLCAxKTsKKworCS8qIFR1cm4gb24gVW5pTUFDIFRYL1JYICovCisJ dW1hY19lbmFibGVfc2V0KGludGYsIChVTUNfQ01EX1JYX0VOIHwgVU1DX0NNRF9UWF9FTiksIDEp OworCisJaW50Zi0+Y3JjX2Z3ZCA9M0QgISEodW1hY19ybChpbnRmLCBVTUNfQ01EKSAmIFVNQ19D TURfQ1JDX0ZXRCk7CisKKwliY21hc3BfbmV0aWZfc3RhcnQoZGV2KTsKKworCW5ldGlmX3N0YXJ0 X3F1ZXVlKGRldik7CisKKwlyZXR1cm4gMDsKKworZXJyX3JlY2xhaW1fdHg6CisJYmNtYXNwX3Jl Y2xhaW1fZnJlZV9hbGxfdHgoaW50Zik7CitlcnJfcGh5X2Rpc2Nvbm5lY3Q6CisJaWYgKHBoeWRl dikKKwkJcGh5X2Rpc2Nvbm5lY3QocGh5ZGV2KTsKK2Vycl9waHlfZGlzYWJsZToKKwlpZiAoaW50 Zi0+aW50ZXJuYWxfcGh5KQorCQliY21hc3BfZXBoeV9lbmFibGVfc2V0KGludGYsIGZhbHNlKTsK KwllbHNlCisJCWJjbWFzcF9yZ21paV9tb2RlX2VuX3NldChpbnRmLCBmYWxzZSk7CisJcmV0dXJu IHJldDsKK30KKworc3RhdGljIGludCBiY21hc3Bfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2 KQoreworCXN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZiA9M0QgbmV0ZGV2X3ByaXYoZGV2KTsKKwlp bnQgcmV0OworCisJbmV0aWZfZGJnKGludGYsIGlmdXAsIGRldiwgImJjbWFzcCBvcGVuXG4iKTsK KworCXJldCA9M0QgY2xrX3ByZXBhcmVfZW5hYmxlKGludGYtPnBhcmVudC0+Y2xrKTsKKwlpZiAo cmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0zRCBiY21hc3BfbmV0aWZfaW5pdChkZXYsIHRy dWUpOworCWlmIChyZXQpCisJCWNsa19kaXNhYmxlX3VucHJlcGFyZShpbnRmLT5wYXJlbnQtPmNs ayk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBiY21hc3BfcmVzZXRfbWliKHN0 cnVjdCBiY21hc3BfaW50ZiAqaW50ZikKK3sKKwl1bWFjX3dsKGludGYsIFVNQ19NSUJfQ05UUkxf UlhfQ05UX1JTVCB8CisJCVVNQ19NSUJfQ05UUkxfUlVOVF9DTlRfUlNUIHwKKwkJVU1DX01JQl9D TlRSTF9UWF9DTlRfUlNULCBVTUNfTUlCX0NOVFJMKTsKKwl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAw MCk7CisJdW1hY193bChpbnRmLCAwLCBVTUNfTUlCX0NOVFJMKTsKK30KKworc3RhdGljIHZvaWQg YmNtYXNwX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHR4 cXVldWUpCit7CisJc3RydWN0IGJjbWFzcF9pbnRmICppbnRmID0zRCBuZXRkZXZfcHJpdihkZXYp OworCisJbmV0aWZfZGJnKGludGYsIHR4X2VyciwgZGV2LCAidHJhbnNtaXQgdGltZW91dCFcbiIp OworCisJbmV0aWZfdHJhbnNfdXBkYXRlKGRldik7CisJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsK KworCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKK30KKworc3RhdGljIGludCBiY21hc3BfZ2V0X3Bo eXNfcG9ydF9uYW1lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgICBjaGFyICpuYW1l LCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZiA9M0QgbmV0ZGV2X3By aXYoZGV2KTsKKworCWlmIChzbnByaW50ZihuYW1lLCBsZW4sICJwJWQiLCBpbnRmLT5wb3J0KSA+ PTNEIGxlbikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0 cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpiY21hc3BfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNl ICpkZXYpCit7CisJcmV0dXJuICZkZXYtPnN0YXRzOworfQorCitzdGF0aWMgaW50IGJjbWFzcF9p b2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKQor eworCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICgh ZGV2LT5waHlkZXYpCisJCXJldHVybiAtRU5PREVWOworCisJcmV0dXJuIHBoeV9taWlfaW9jdGwo ZGV2LT5waHlkZXYsIHJxLCBjbWQpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZp Y2Vfb3BzIGJjbWFzcF9uZXRkZXZfb3BzID0zRCB7CisJLm5kb19vcGVuCQk9M0QgYmNtYXNwX29w ZW4sCisJLm5kb19zdG9wCQk9M0QgYmNtYXNwX3N0b3AsCisJLm5kb19zdGFydF94bWl0CQk9M0Qg YmNtYXNwX3htaXQsCisJLm5kb190eF90aW1lb3V0CQk9M0QgYmNtYXNwX3R4X3RpbWVvdXQsCisJ Lm5kb19zZXRfcnhfbW9kZQk9M0QgYmNtYXNwX3NldF9yeF9tb2RlLAorCS5uZG9fZ2V0X3BoeXNf cG9ydF9uYW1lCT0zRCBiY21hc3BfZ2V0X3BoeXNfcG9ydF9uYW1lLAorCS5uZG9fZ2V0X3N0YXRz CQk9M0QgYmNtYXNwX2dldF9zdGF0cywKKwkubmRvX2RvX2lvY3RsCQk9M0QgYmNtYXNwX2lvY3Rs LAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0zRCBldGhfbWFjX2FkZHIsCit9OworCitzdGF0aWMg dm9pZCBiY21hc3BfbWFwX3JlcyhzdHJ1Y3QgYmNtYXNwX3ByaXYgKnByaXYsIHN0cnVjdCBiY21h c3BfaW50ZiAqaT0KbnRmKQoreworCS8qIFBlciBwb3J0ICovCisJaW50Zi0+cmVzLnVtYWMgPTNE IHByaXYtPmJhc2UgKyBVTUNfT0ZGU0VUKGludGYpOworCWludGYtPnJlcy51bWFjMmZiID0zRCBw cml2LT5iYXNlICsgKHByaXYtPmh3X2luZm8tPnVtYWMyZmIgKworCQkJCQkgIChpbnRmLT5wb3J0 ICogMHg0KSk7CisJaW50Zi0+cmVzLnJnbWlpID0zRCBwcml2LT5iYXNlICsgUkdNSUlfT0ZGU0VU KGludGYpOworCisJLyogUGVyIGNoICovCisJaW50Zi0+dHhfc3BiX2RtYSA9M0QgcHJpdi0+YmFz ZSArIFRYX1NQQl9ETUFfT0ZGU0VUKGludGYpOworCWludGYtPnJlcy50eF9zcGJfY3RybCA9M0Qg cHJpdi0+YmFzZSArIFRYX1NQQl9DVFJMX09GRlNFVChpbnRmKTsKKwlpbnRmLT5yZXMudHhfc3Bi X3RvcCA9M0QgcHJpdi0+YmFzZSArIFRYX1NQQl9UT1BfT0ZGU0VUKGludGYpOworCWludGYtPnJl cy50eF9lcGt0X2NvcmUgPTNEIHByaXYtPmJhc2UgKyBUWF9FUEtUX0NfT0ZGU0VUKGludGYpOwor CWludGYtPnJlcy50eF9wYXVzZV9jdHJsID0zRCBwcml2LT5iYXNlICsgVFhfUEFVU0VfQ1RSTF9P RkZTRVQoaW50Zik7CisKKwlpbnRmLT5yeF9lZHBrdF9kbWEgPTNEIHByaXYtPmJhc2UgKyBSWF9F RFBLVF9ETUFfT0ZGU0VUKGludGYpOworCWludGYtPnJ4X2VkcGt0X2NmZyA9M0QgcHJpdi0+YmFz ZSArIFJYX0VEUEtUX0NGR19PRkZTRVQoaW50Zik7Cit9CisKKyNkZWZpbmUgTUFYX0lSUV9TVFJf TEVOCQk2NAorc3RydWN0IGJjbWFzcF9pbnRmICpiY21hc3BfaW50ZXJmYWNlX2NyZWF0ZShzdHJ1 Y3QgYmNtYXNwX3ByaXYgKnByaXYsCisJCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5kZXZf ZG4pCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0zRCAmcHJpdi0+cGRldi0+ZGV2OworCXN0cnVj dCBiY21hc3BfaW50ZiAqaW50ZjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjsKKwlpbnQgY2gs IHBvcnQsIHJldDsKKworCWlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihuZGV2X2RuLCAicmVnIiwg JnBvcnQpKSB7CisJCWRldl93YXJuKGRldiwgIiVzOiBpbnZhbGlkIGNoIG51bWJlclxuIiwgbmRl dl9kbi0+bmFtZSk7CisJCWdvdG8gZXJyOworCX0KKworCWlmIChvZl9wcm9wZXJ0eV9yZWFkX3Uz MihuZGV2X2RuLCAiYnJjbSxjaGFubmVsIiwgJmNoKSkgeworCQlkZXZfd2FybihkZXYsICIlczog aW52YWxpZCBjaCBudW1iZXJcbiIsIG5kZXZfZG4tPm5hbWUpOworCQlnb3RvIGVycjsKKwl9CisK KwluZGV2ID0zRCBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IGJjbWFzcF9pbnRmKSk7CisJ aWYgKCFkZXYpIHsKKwkJZGV2X3dhcm4oZGV2LCAiJXM6IHVuYWJsZSB0byBhbGxvYyBuZGV2XG4i LCBuZGV2X2RuLT5uYW1lKTsKKwkJZ290byBlcnI7CisJfQorCWludGYgPTNEIG5ldGRldl9wcml2 KG5kZXYpOworCisJaW50Zi0+cGFyZW50ID0zRCBwcml2OworCWludGYtPm5kZXYgPTNEIG5kZXY7 CisJaW50Zi0+Y2hhbm5lbCA9M0QgY2g7CisJaW50Zi0+cG9ydCA9M0QgcG9ydDsKKwlpbnRmLT5u ZGV2X2RuID0zRCBuZGV2X2RuOworCisJcmV0ID0zRCBvZl9nZXRfcGh5X21vZGUobmRldl9kbiwg JmludGYtPnBoeV9pbnRlcmZhY2UpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAi aW52YWxpZCBQSFkgbW9kZSBwcm9wZXJ0eVxuIik7CisJCWdvdG8gZXJyX2ZyZWVfbmV0ZGV2Owor CX0KKworCWlmIChpbnRmLT5waHlfaW50ZXJmYWNlID0zRD0zRCBQSFlfSU5URVJGQUNFX01PREVf SU5URVJOQUwpCisJCWludGYtPmludGVybmFsX3BoeSA9M0QgdHJ1ZTsKKworCWludGYtPnBoeV9k biA9M0Qgb2ZfcGFyc2VfcGhhbmRsZShuZGV2X2RuLCAicGh5LWhhbmRsZSIsIDApOworCWlmICgh aW50Zi0+cGh5X2RuICYmIG9mX3BoeV9pc19maXhlZF9saW5rKG5kZXZfZG4pKSB7CisJCXJldCA9 M0Qgb2ZfcGh5X3JlZ2lzdGVyX2ZpeGVkX2xpbmsobmRldl9kbik7CisJCWlmIChyZXQpIHsKKwkJ CWRldl93YXJuKGRldiwgIiVzOiBmYWlsZWQgdG8gcmVnaXN0ZXIgZml4ZWQgUEhZXG4iLAorCQkJ CSBuZGV2X2RuLT5uYW1lKTsKKwkJCWdvdG8gZXJyX2ZyZWVfbmV0ZGV2OworCQl9CisJCWludGYt PnBoeV9kbiA9M0QgbmRldl9kbjsKKwl9CisKKwkvKiBNYXAgcmVzb3VyY2UgKi8KKwliY21hc3Bf bWFwX3Jlcyhwcml2LCBpbnRmKTsKKworCWlmICgoIXBoeV9pbnRlcmZhY2VfbW9kZV9pc19yZ21p aShpbnRmLT5waHlfaW50ZXJmYWNlKSAmJgorCSAgICAgaW50Zi0+cGh5X2ludGVyZmFjZSAhPTNE IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUkgJiYKKwkgICAgIGludGYtPnBoeV9pbnRlcmZhY2UgIT0z RCBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHx8CisJICAgIChpbnRmLT5wb3J0ICE9M0Qg MSAmJiBpbnRmLT5pbnRlcm5hbF9waHkpKSB7CisJCW5ldGRldl9lcnIoaW50Zi0+bmRldiwgImlu dmFsaWQgUEhZIG1vZGU6ICVzIGZvciBwb3J0ICVkXG4iLAorCQkJICAgcGh5X21vZGVzKGludGYt PnBoeV9pbnRlcmZhY2UpLCBpbnRmLT5wb3J0KTsKKwkJcmV0ID0zRCAtRUlOVkFMOworCQlnb3Rv IGVycl9mcmVlX25ldGRldjsKKwl9CisKKwliY21hc3BfcmVzZXRfbWliKGludGYpOworCisJcmV0 ID0zRCBvZl9nZXRfZXRoZGV2X2FkZHJlc3MobmRldl9kbiwgbmRldik7CisJaWYgKHJldCkgewor CQluZXRkZXZfd2FybihuZGV2LCAidXNpbmcgcmFuZG9tIEV0aGVybmV0IE1BQ1xuIik7CisJCWV0 aF9od19hZGRyX3JhbmRvbShuZGV2KTsKKwl9CisKKwlTRVRfTkVUREVWX0RFVihuZGV2LCBkZXYp OworCWludGYtPm9wcyA9M0QgJmJjbWFzcF9pbnRmX29wczsKKwluZGV2LT5uZXRkZXZfb3BzID0z RCAmYmNtYXNwX25ldGRldl9vcHM7CisJbmRldi0+ZXRodG9vbF9vcHMgPTNEICZiY21hc3BfZXRo dG9vbF9vcHM7CisJaW50Zi0+bXNnX2VuYWJsZSA9M0QgbmV0aWZfbXNnX2luaXQoLTEsIE5FVElG X01TR19EUlYgfAorCQkJCQkgIE5FVElGX01TR19QUk9CRSB8CisJCQkJCSAgTkVUSUZfTVNHX0xJ TkspOworCW5kZXYtPmZlYXR1cmVzIHw9M0QgTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9JUFY2 X0NTVU0gfCBORVRJRl9GX1NHIHwKKwkJCSAgTkVUSUZfRl9SWENTVU07CisJbmRldi0+aHdfZmVh dHVyZXMgfD0zRCBuZGV2LT5mZWF0dXJlczsKKwluZGV2LT5uZWVkZWRfaGVhZHJvb20gKz0zRCBz aXplb2Yoc3RydWN0IGJjbWFzcF9wa3Rfb2ZmbG9hZCk7CisKKwlyZXR1cm4gaW50ZjsKKworZXJy X2ZyZWVfbmV0ZGV2OgorCWZyZWVfbmV0ZGV2KG5kZXYpOworZXJyOgorCXJldHVybiBOVUxMOwor fQorCit2b2lkIGJjbWFzcF9pbnRlcmZhY2VfZGVzdHJveShzdHJ1Y3QgYmNtYXNwX2ludGYgKmlu dGYsIGJvb2wgdW5yZWdpc3RlcikKK3sKKwlpZiAodW5yZWdpc3RlcikKKwkJdW5yZWdpc3Rlcl9u ZXRkZXYoaW50Zi0+bmRldik7CisJaWYgKG9mX3BoeV9pc19maXhlZF9saW5rKGludGYtPm5kZXZf ZG4pKQorCQlvZl9waHlfZGVyZWdpc3Rlcl9maXhlZF9saW5rKGludGYtPm5kZXZfZG4pOworCWZy ZWVfbmV0ZGV2KGludGYtPm5kZXYpOworfQorCitzdGF0aWMgdm9pZCBiY21hc3Bfc3VzcGVuZF90 b193b2woc3RydWN0IGJjbWFzcF9pbnRmICppbnRmKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpu ZGV2ID0zRCBpbnRmLT5uZGV2OworCXUzMiByZWc7CisKKwlyZWcgPTNEIHVtYWNfcmwoaW50Ziwg VU1DX01QRF9DVFJMKTsKKwlpZiAoaW50Zi0+d29sb3B0cyAmIChXQUtFX01BR0lDIHwgV0FLRV9N QUdJQ1NFQ1VSRSkpCisJCXJlZyB8PTNEIFVNQ19NUERfQ1RSTF9NUERfRU47CisJcmVnICY9M0Qg flVNQ19NUERfQ1RSTF9QU1dfRU47CisJaWYgKGludGYtPndvbG9wdHMgJiBXQUtFX01BR0lDU0VD VVJFKSB7CisJCS8qIFByb2dyYW0gdGhlIFNlY3VyZU9uIHBhc3N3b3JkICovCisJCXVtYWNfd2wo aW50ZiwgZ2V0X3VuYWxpZ25lZF9iZTE2KCZpbnRmLT5zb3Bhc3NbMF0pLAorCQkJVU1DX1BTV19N Uyk7CisJCXVtYWNfd2woaW50ZiwgZ2V0X3VuYWxpZ25lZF9iZTMyKCZpbnRmLT5zb3Bhc3NbMl0p LAorCQkJVU1DX1BTV19MUyk7CisJCXJlZyB8PTNEIFVNQ19NUERfQ1RSTF9QU1dfRU47CisJfQor CXVtYWNfd2woaW50ZiwgcmVnLCBVTUNfTVBEX0NUUkwpOworCisJaWYgKGludGYtPndvbG9wdHMg JiBXQUtFX0ZJTFRFUikKKwkJYmNtYXNwX25ldGZpbHRfc3VzcGVuZChpbnRmKTsKKworCS8qIFVu aU1BQyByZWNlaXZlIG5lZWRzIHRvIGJlIHR1cm5lZCBvbiAqLworCXVtYWNfZW5hYmxlX3NldChp bnRmLCBVTUNfQ01EX1JYX0VOLCAxKTsKKworCWlmIChpbnRmLT5wYXJlbnQtPndvbF9pcnEgPiAw KSB7CisJCXdha2V1cF9pbnRyMl9jb3JlX3dsKGludGYtPnBhcmVudCwgMHhmZmZmZmZmZiwKKwkJ CQkgICAgIEFTUF9XQUtFVVBfSU5UUjJfTUFTS19DTEVBUik7CisJfQorCisJbmV0aWZfZGJnKGlu dGYsIHdvbCwgbmRldiwgImVudGVyZWQgV09MIG1vZGVcbiIpOworfQorCitpbnQgYmNtYXNwX2lu dGVyZmFjZV9zdXNwZW5kKHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZikKK3sKKwlzdHJ1Y3QgZGV2 aWNlICprZGV2ID0zRCAmaW50Zi0+cGFyZW50LT5wZGV2LT5kZXY7CisJc3RydWN0IG5ldF9kZXZp Y2UgKmRldiA9M0QgaW50Zi0+bmRldjsKKwlpbnQgcmV0ID0zRCAwOworCisJaWYgKCFuZXRpZl9y dW5uaW5nKGRldikpCisJCXJldHVybiAwOworCisJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOwor CisJYmNtYXNwX25ldGlmX2RlaW5pdChkZXYpOworCisJaWYgKCFpbnRmLT53b2xvcHRzKSB7CisJ CXJldCA9M0QgcGh5X3N1c3BlbmQoZGV2LT5waHlkZXYpOworCQlpZiAocmV0KQorCQkJZ290byBv dXQ7CisKKwkJaWYgKGludGYtPmludGVybmFsX3BoeSkKKwkJCWJjbWFzcF9lcGh5X2VuYWJsZV9z ZXQoaW50ZiwgZmFsc2UpOworCQllbHNlCisJCQliY21hc3BfcmdtaWlfbW9kZV9lbl9zZXQoaW50 ZiwgZmFsc2UpOworCisJCS8qIElmIFdha2Utb24tTEFOIGlzIGRpc2FibGVkLCB3ZSBjYW4gc2Fm ZWx5CisJCSAqIGRpc2FibGUgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGNsb2Nrcy4KKwkJICovCisJ CWJjbWFzcF9jb3JlX2Nsb2NrX3NldF9pbnRmKGludGYsIGZhbHNlKTsKKwl9CisKKwlpZiAoZGV2 aWNlX21heV93YWtldXAoa2RldikgJiYgaW50Zi0+d29sb3B0cykKKwkJYmNtYXNwX3N1c3BlbmRf dG9fd29sKGludGYpOworCisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGludGYtPnBhcmVudC0+Y2xr KTsKKworCXJldHVybiByZXQ7CisKK291dDoKKwliY21hc3BfbmV0aWZfaW5pdChkZXYsIGZhbHNl KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBiY21hc3BfcmVzdW1lX2Zyb21fd29s KHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZikKK3sKKwl1MzIgcmVnOworCisJcmVnID0zRCB1bWFj X3JsKGludGYsIFVNQ19NUERfQ1RSTCk7CisJcmVnICY9M0QgflVNQ19NUERfQ1RSTF9NUERfRU47 CisJdW1hY193bChpbnRmLCByZWcsIFVNQ19NUERfQ1RSTCk7CisKKwlpZiAoaW50Zi0+cGFyZW50 LT53b2xfaXJxID4gMCkgeworCQl3YWtldXBfaW50cjJfY29yZV93bChpbnRmLT5wYXJlbnQsIDB4 ZmZmZmZmZmYsCisJCQkJICAgICBBU1BfV0FLRVVQX0lOVFIyX01BU0tfU0VUKTsKKwl9Cit9CisK K2ludCBiY21hc3BfaW50ZXJmYWNlX3Jlc3VtZShzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYpCit7 CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9M0QgaW50Zi0+bmRldjsKKwlpbnQgcmV0OworCisJ aWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCisJCXJldHVybiAwOworCisJcmV0ID0zRCBjbGtfcHJl cGFyZV9lbmFibGUoaW50Zi0+cGFyZW50LT5jbGspOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7 CisKKwlyZXQgPTNEIGJjbWFzcF9uZXRpZl9pbml0KGRldiwgZmFsc2UpOworCWlmIChyZXQpCisJ CWdvdG8gb3V0OworCisJYmNtYXNwX3Jlc3VtZV9mcm9tX3dvbChpbnRmKTsKKworCWlmIChpbnRm LT5lZWUuZWVlX2VuYWJsZWQpCisJCWJjbWFzcF9lZWVfZW5hYmxlX3NldChpbnRmLCB0cnVlKTsK KworCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKKworCXJldHVybiAwOworCitvdXQ6CisJY2xr X2Rpc2FibGVfdW5wcmVwYXJlKGludGYtPnBhcmVudC0+Y2xrKTsKKwlyZXR1cm4gcmV0OworfQpk aWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9iY21hc3BfaW50 Zl9kZWZzLmggYi9kcml2ZXI9CnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwX2lu dGZfZGVmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYWIxZTY1 MDAyMjYwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20v YXNwMi9iY21hc3BfaW50Zl9kZWZzLmgKQEAgLTAsMCArMSwyMzggQEAKKy8qIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCisjaWZuZGVmIF9fQkNNQVNQX0lOVEZfREVGU19ICisj ZGVmaW5lIF9fQkNNQVNQX0lOVEZfREVGU19ICisKKyNkZWZpbmUgVU1DX09GRlNFVChpbnRmKQkJ XAorCSgoKChpbnRmKS0+cG9ydCkgKiAweDgwMCkgKyAweGMwMDApCisjZGVmaW5lICBVTUNfQ01E CQkJMHgwMDgKKyNkZWZpbmUgICBVTUNfQ01EX1RYX0VOCQkJQklUKDApCisjZGVmaW5lICAgVU1D X0NNRF9SWF9FTgkJCUJJVCgxKQorI2RlZmluZSAgIFVNQ19DTURfU1BFRURfU0hJRlQJCTB4Mgor I2RlZmluZSAgICBVTUNfQ01EX1NQRUVEX01BU0sJCTB4MworI2RlZmluZSAgICBVTUNfQ01EX1NQ RUVEXzEwCQkweDAKKyNkZWZpbmUgICAgVU1DX0NNRF9TUEVFRF8xMDAJCTB4MQorI2RlZmluZSAg ICBVTUNfQ01EX1NQRUVEXzEwMDAJCTB4MgorI2RlZmluZSAgICBVTUNfQ01EX1NQRUVEXzI1MDAJ CTB4MworI2RlZmluZSAgIFVNQ19DTURfUFJPTUlTQwkJQklUKDQpCisjZGVmaW5lICAgVU1DX0NN RF9QQURfRU4JCUJJVCg1KQorI2RlZmluZSAgIFVNQ19DTURfQ1JDX0ZXRAkJQklUKDYpCisjZGVm aW5lICAgVU1DX0NNRF9QQVVTRV9GV0QJCUJJVCg3KQorI2RlZmluZSAgIFVNQ19DTURfUlhfUEFV U0VfSUdOT1JFCUJJVCg4KQorI2RlZmluZSAgIFVNQ19DTURfVFhfQUREUl9JTlMJCUJJVCg5KQor I2RlZmluZSAgIFVNQ19DTURfSERfRU4JCQlCSVQoMTApCisjZGVmaW5lICAgVU1DX0NNRF9TV19S RVNFVAkJQklUKDEzKQorI2RlZmluZSAgIFVNQ19DTURfTENMX0xPT1BfRU4JCUJJVCgxNSkKKyNk ZWZpbmUgICBVTUNfQ01EX0FVVE9fQ09ORklHCQlCSVQoMjIpCisjZGVmaW5lICAgVU1DX0NNRF9D TlRMX0ZSTV9FTgkJQklUKDIzKQorI2RlZmluZSAgIFVNQ19DTURfTk9fTEVOX0NISwkJQklUKDI0 KQorI2RlZmluZSAgIFVNQ19DTURfUk1UX0xPT1BfRU4JCUJJVCgyNSkKKyNkZWZpbmUgICBVTUNf Q01EX1BSQkxfRU4JCUJJVCgyNykKKyNkZWZpbmUgICBVTUNfQ01EX1RYX1BBVVNFX0lHTk9SRQlC SVQoMjgpCisjZGVmaW5lICAgVU1DX0NNRF9UWF9SWF9FTgkJQklUKDI5KQorI2RlZmluZSAgIFVN Q19DTURfUlVOVF9GSUxURVJfRElTCUJJVCgzMCkKKyNkZWZpbmUgIFVNQ19NQUMwCQkJMHgwYwor I2RlZmluZSAgVU1DX01BQzEJCQkweDEwCisjZGVmaW5lICBVTUNfRlJNX0xFTgkJCTB4MTQKKyNk ZWZpbmUgIFVNQ19FRUVfQ1RSTAkJCTB4NjQKKyNkZWZpbmUgICBFTl9MUElfUlhfUEFVU0UJCUJJ VCgwKQorI2RlZmluZSAgIEVOX0xQSV9UWF9QRkMJCQlCSVQoMSkKKyNkZWZpbmUgICBFTl9MUElf VFhfUEFVU0UJCUJJVCgyKQorI2RlZmluZSAgIEVFRV9FTgkJCUJJVCgzKQorI2RlZmluZSAgIFJY X0ZJRk9fQ0hFQ0sJCQlCSVQoNCkKKyNkZWZpbmUgICBFRUVfVFhfQ0xLX0RJUwkJQklUKDUpCisj ZGVmaW5lICAgRElTX0VFRV8xME0JCQlCSVQoNikKKyNkZWZpbmUgICBMUF9JRExFX1BSRURJQ1RJ T05fTU9ERQlCSVQoNykKKyNkZWZpbmUgIFVNQ19FRUVfTFBJX1RJTUVSCQkweDY4CisjZGVmaW5l ICBVTUNfUEFVU0VfQ05UUkwJCTB4MzMwCisjZGVmaW5lICBVTUNfVFhfRkxVU0gJCQkweDMzNAor I2RlZmluZSAgVU1DX01JQl9TVEFSVAkJCTB4NDAwCisjZGVmaW5lICBVTUNfTUlCX0NOVFJMCQkJ MHg1ODAKKyNkZWZpbmUgICBVTUNfTUlCX0NOVFJMX1JYX0NOVF9SU1QJQklUKDApCisjZGVmaW5l ICAgVU1DX01JQl9DTlRSTF9SVU5UX0NOVF9SU1QJQklUKDEpCisjZGVmaW5lICAgVU1DX01JQl9D TlRSTF9UWF9DTlRfUlNUCUJJVCgyKQorI2RlZmluZSAgVU1DX1JYX01BWF9QS1RfU1oJCTB4NjA4 CisjZGVmaW5lICBVTUNfTVBEX0NUUkwJCQkweDYyMAorI2RlZmluZSAgIFVNQ19NUERfQ1RSTF9N UERfRU4JCUJJVCgwKQorI2RlZmluZSAgIFVNQ19NUERfQ1RSTF9QU1dfRU4JCUJJVCgyNykKKyNk ZWZpbmUgIFVNQ19QU1dfTVMJCQkweDYyNAorI2RlZmluZSAgVU1DX1BTV19MUwkJCTB4NjI4CisK KyNkZWZpbmUgVU1BQzJGQl9PRkZTRVRfMl8xCQkweDlmMDQ0CisjZGVmaW5lIFVNQUMyRkJfT0ZG U0VUCQkJMHg5ZjAzYworI2RlZmluZSAgVU1BQzJGQl9DRkcJCQkweDAKKyNkZWZpbmUgICBVTUFD MkZCX0NGR19PUFVUX0VOCQlCSVQoMCkKKyNkZWZpbmUgICBVTUFDMkZCX0NGR19WTEFOX0VOCQlC SVQoMSkKKyNkZWZpbmUgICBVTUFDMkZCX0NGR19TTkFQX0VOCQlCSVQoMikKKyNkZWZpbmUgICBV TUFDMkZCX0NGR19CQ01fVEdfRU4JCUJJVCgzKQorI2RlZmluZSAgIFVNQUMyRkJfQ0ZHX0lQVVRf RU4JCUJJVCg0KQorI2RlZmluZSAgIFVNQUMyRkJfQ0ZHX0NISURfU0hJRlQJOAorI2RlZmluZSAg IFVNQUMyRkJfQ0ZHX09LX1NFTkRfU0hJRlQJMjQKKyNkZWZpbmUgICBVTUFDMkZCX0NGR19ERUZB VUxUX0VOCVwKKwkJKFVNQUMyRkJfQ0ZHX09QVVRfRU4gfCBVTUFDMkZCX0NGR19WTEFOX0VOIFwK KwkJfCBVTUFDMkZCX0NGR19TTkFQX0VOIHwgVU1BQzJGQl9DRkdfSVBVVF9FTikKKworI2RlZmlu ZSBSR01JSV9PRkZTRVQoaW50ZikJXAorCSgoKChpbnRmKS0+cG9ydCkgKiAweDEwMCkgKyAweGQw MDApCisjZGVmaW5lICBSR01JSV9FUEhZX0NOVFJMCQkweDAwCisjZGVmaW5lICAgIFJHTUlJX0VQ SFlfQ0ZHX0lERFFfQklBUwlCSVQoMCkKKyNkZWZpbmUgICAgUkdNSUlfRVBIWV9DRkdfRVhUX1BX UkRPV04JQklUKDEpCisjZGVmaW5lICAgIFJHTUlJX0VQSFlfQ0ZHX0ZPUkNFX0RMTF9FTglCSVQo MikKKyNkZWZpbmUgICAgUkdNSUlfRVBIWV9DRkdfSUREUV9HTE9CQUwJQklUKDMpCisjZGVmaW5l ICAgIFJHTUlJX0VQSFlfQ0syNV9ESVMJCUJJVCg0KQorI2RlZmluZSAgICBSR01JSV9FUEhZX1JF U0VUCQlCSVQoNykKKyNkZWZpbmUgIFJHTUlJX09PQl9DTlRSTAkJMHgwYworI2RlZmluZSAgIFJH TUlJX0xJTksJCQlCSVQoNCkKKyNkZWZpbmUgICBSR01JSV9PT0JfRElTCQkJQklUKDUpCisjZGVm aW5lICAgUkdNSUlfTU9ERV9FTgkJCUJJVCg2KQorI2RlZmluZSAgIFJHTUlJX0lEX01PREVfRElT CQlCSVQoMTYpCisKKyNkZWZpbmUgUkdNSUlfUE9SVF9DTlRSTAkJMHg2MAorI2RlZmluZSAgIFJH TUlJX1BPUlRfTU9ERV9FUEhZCQkwCisjZGVmaW5lICAgUkdNSUlfUE9SVF9NT0RFX0dQSFkJCTEK KyNkZWZpbmUgICBSR01JSV9QT1JUX01PREVfRVhUX0VQSFkJMgorI2RlZmluZSAgIFJHTUlJX1BP UlRfTU9ERV9FWFRfR1BIWQkzCisjZGVmaW5lICAgUkdNSUlfUE9SVF9NT0RFX0VYVF9SVk1JSQk0 CisjZGVmaW5lICAgUkdNSUlfUE9SVF9NT0RFX01BU0sJCUdFTk1BU0soMiwgMCkKKworI2RlZmlu ZSBSR01JSV9TWVNfTEVEX0NOVFJMCQkweDc0CisjZGVmaW5lICBSR01JSV9TWVNfTEVEX0NOVFJM X0xJTktfT1ZSRAlCSVQoMTUpCisKKyNkZWZpbmUgT1VURE1BX09GRlNFVChpbnRmKQlcCisJKCgo aW50Zi0+Y2hhbm5lbCAtIDYpICogMHhiMCkgKyAweDQ3MDAwKQorI2RlZmluZSAgT1VURE1BX0VO QUJMRQkJCTB4MDAKKyNkZWZpbmUgICBPVVRETUFfRU5BQkxFX0VOCQlCSVQoMCkKKyNkZWZpbmUg IE9VVERNQV9IV19TVEFUVVMJCTB4MDQKKyNkZWZpbmUgICBPVVRETUFfSFdfU1RBVFVTX0lETEUJ CUJJVCgwKQorI2RlZmluZSAgT1VURE1BX0RBVEFfRE1BX1dSSVRFCQkweDA4CisjZGVmaW5lICBP VVRETUFfREFUQV9ETUFfUkVBRAkJMHgxMAorI2RlZmluZSAgT1VURE1BX0RBVEFfRE1BX0JBU0UJ CTB4MTgKKyNkZWZpbmUgIE9VVERNQV9EQVRBX0RNQV9FTkQJCTB4MjAKKyNkZWZpbmUgIE9VVERN QV9EQVRBX0RNQV9WQUxJRAkJMHgyOAorI2RlZmluZSAgT1VURE1BX0RBVEFfQ1RSTDEJCTB4MzAK KyNkZWZpbmUgICBPVVRETUFfREFUQV9DVFJMMV9FX0JBTE5fTUFTSwlHRU5NQVNLKDIsIDApCisj ZGVmaW5lICAgT1VURE1BX0RBVEFfQ1RSTDFfRV9OT19BTE4JMHgwMAorI2RlZmluZSAgIE9VVERN QV9EQVRBX0NUUkwxX0VfNF9BTE4JMHgwMgorI2RlZmluZSAgIE9VVERNQV9EQVRBX0NUUkwxX0Vf NjRfQUxOCTB4MDYKKyNkZWZpbmUgICBPVVRETUFfREFUQV9DVFJMMV9FX1NUVUZGCUJJVCgzKQor I2RlZmluZSAgIE9VVERNQV9EQVRBX0NUUkwxX1BTSF9UTVJfRU4JQklUKDQpCisjZGVmaW5lICBP VVRETUFfREFUQV9QVVNIX1RJTUVSCQkweDM0CisjZGVmaW5lICBPVVRETUFfREFUQV9QVVNIX0VW RU5UX0NUUkwJMHgzOAorI2RlZmluZSAgIE9VVERNQV9EQVRBX1BVU0hfQ1RSTF9QVVNICUJJVCgw KQorI2RlZmluZSAgT1VURE1BX0RBVEFfUFVTSF9FVkVOVF9TVEFUVVMJMHgzYworI2RlZmluZSAg IE9VVERNQV9EQVRBX1BVU0hfRVZUX1NUQVRVUwlCSVQoMCkKKyNkZWZpbmUgIE9VVERNQV9ERVND X0RNQV9XUklURQkJMHg1MAorI2RlZmluZSAgT1VURE1BX0RFU0NfRE1BX1JFQUQJCTB4NTgKKyNk ZWZpbmUgIE9VVERNQV9ERVNDX0RNQV9CQVNFCQkweDYwCisjZGVmaW5lICBPVVRETUFfREVTQ19E TUFfRU5ECQkweDY4CisjZGVmaW5lICBPVVRETUFfREVTQ19ETUFfVkFMSUQJCTB4NzAKKyNkZWZp bmUgIE9VVERNQV9ERVNDX0RNQV9DVFJMMQkJMHg3OAorI2RlZmluZSAgIE9VVERNQV9ERVNDX0NU UkwxX1BTSF9USU1SX0VOCUJJVCgwKQorI2RlZmluZSAgT1VURE1BX0RFU0NfUFVTSF9USU1FUgkJ MHg3YworI2RlZmluZSAgT1VURE1BX0RFU0NfUFVTSF9FVlRfQ1RMCTB4ODAKKyNkZWZpbmUgICBP VVRETUFfREVTQ19QVVNIX0VWVF9DVExfUFNICUJJVCgwKQorI2RlZmluZSAgT1VURE1BX0RFU0Nf UFNIX0VWVF9TVAkJMHg4NAorI2RlZmluZSAgT1VURE1BX0RFU0NfRklGT19DVFJMCQkweDg4Cisj ZGVmaW5lICAgT1VURE1BX0RFU0NfRklGT19DVExfRkxVU0gJQklUKDApCisjZGVmaW5lICBPVVRE TUFfREVTQ19GSUZPX0ZMVVNIX1NUQVRVUwkweDhjCisjZGVmaW5lICAgT1VURE1BX0RFU0NfRklG T19GTEhfU1QJQklUKDApCisjZGVmaW5lICBPVVRETUFfREVTQ19ETUFfQ1RSTDIJCTB4OTQKKyNk ZWZpbmUgICBPVVRNREFfREVTQ19ETUFfQ1RSTDJfV0RfRU4JQklUKDEpCisjZGVmaW5lICAgT1VU RE1BX0RFU0NfRE1BX0NUUkwyX1JYX1BPUlQJOAorCisjZGVmaW5lIFRYX1NQQl9ETUFfT0ZGU0VU KGludGYpIFwKKwkoKCgoaW50ZiktPmNoYW5uZWwpICogMHgzMCkgKyAweDQ4MTgwKQorI2RlZmlu ZSAgVFhfU1BCX0RNQV9SRUFECQkweDAwCisjZGVmaW5lICBUWF9TUEJfRE1BX0JBU0UJCTB4MDgK KyNkZWZpbmUgIFRYX1NQQl9ETUFfRU5ECQkJMHgxMAorI2RlZmluZSAgVFhfU1BCX0RNQV9WQUxJ RAkJMHgxOAorI2RlZmluZSAgVFhfU1BCX0RNQV9GSUZPX0NUUkwJCTB4MjAKKyNkZWZpbmUgICBU WF9TUEJfRE1BX0ZJRk9fRkxVU0gJCUJJVCgwKQorI2RlZmluZSAgVFhfU1BCX0RNQV9GSUZPX1NU QVRVUwkJMHgyNAorCisjZGVmaW5lIFRYX1NQQl9DVFJMX09GRlNFVChpbnRmKSBcCisJKCgoKGlu dGYpLT5jaGFubmVsKSAqIDB4NjgpICsgMHg0OTM0MCkKKyNkZWZpbmUgIFRYX1NQQl9DVFJMX0VO QUJMRQkJMHgwCisjZGVmaW5lICAgVFhfU1BCX0NUUkxfRU5BQkxFX0VOCQlCSVQoMCkKKyNkZWZp bmUgIFRYX1NQQl9DVFJMX1hGX0NUUkwyCQkweDIwCisjZGVmaW5lICAgVFhfU1BCX0NUUkxfWEZf QklEX1NISUZUCTE2CisKKyNkZWZpbmUgVFhfU1BCX1RPUF9PRkZTRVQoaW50ZikgXAorCSgoKChp bnRmKS0+Y2hhbm5lbCkgKiAweDFjKSArIDB4NGEwZTApCisjZGVmaW5lIFRYX1NQQl9UT1BfQkxL T1VUCQkweDAKKyNkZWZpbmUgVFhfU1BCX1RPUF9TUFJFX0JXX0NUUkwJCTB4NAorCisjZGVmaW5l IFRYX0VQS1RfQ19PRkZTRVQoaW50ZikgXAorCSgoKChpbnRmKS0+Y2hhbm5lbCkgKiAweDEyMCkg KyAweDQwOTAwKQorI2RlZmluZSAgVFhfRVBLVF9DX0NGR19NSVNDCQkweDAKKyNkZWZpbmUgICBU WF9FUEtUX0NfQ0ZHX01JU0NfRU4JCUJJVCgwKQorI2RlZmluZSAgIFRYX0VQS1RfQ19DRkdfTUlT Q19QVAkJQklUKDEpCisjZGVmaW5lICAgVFhfRVBLVF9DX0NGR19NSVNDX1BTX1NISUZUCTE0Cisj ZGVmaW5lICAgVFhfRVBLVF9DX0NGR19NSVNDX0ZEX1NISUZUCTIwCisKKyNkZWZpbmUgVFhfUEFV U0VfQ1RSTF9PRkZTRVQoaW50ZikgXAorCSgoKChpbnRmKS0+Y2hhbm5lbCAqIDB4YykgKyAweDQ5 YTIwKSkKKyNkZWZpbmUgIFRYX1BBVVNFX01BUF9WRUNUT1IJCTB4OAorCisjZGVmaW5lIFJYX0VE UEtUX0RNQV9PRkZTRVQoaW50ZikgXAorCSgoKChpbnRmKS0+Y2hhbm5lbCkgKiAweDM4KSArIDB4 OWNhMDApCisjZGVmaW5lICBSWF9FRFBLVF9ETUFfV1JJVEUJCTB4MDAKKyNkZWZpbmUgIFJYX0VE UEtUX0RNQV9SRUFECQkweDA4CisjZGVmaW5lICBSWF9FRFBLVF9ETUFfQkFTRQkJMHgxMAorI2Rl ZmluZSAgUlhfRURQS1RfRE1BX0VORAkJMHgxOAorI2RlZmluZSAgUlhfRURQS1RfRE1BX1ZBTElE CQkweDIwCisjZGVmaW5lICBSWF9FRFBLVF9ETUFfRlVMTE5FU1MJCTB4MjgKKyNkZWZpbmUgIFJY X0VEUEtUX0RNQV9NSU5fVEhSRVMJCTB4MmMKKyNkZWZpbmUgIFJYX0VEUEtUX0RNQV9DSF9YT05P RkYJCTB4MzAKKworI2RlZmluZSBSWF9FRFBLVF9DRkdfT0ZGU0VUKGludGYpIFwKKwkoKCgoaW50 ZiktPmNoYW5uZWwpICogMHg3MCkgKyAweDljNjAwKQorI2RlZmluZSAgUlhfRURQS1RfQ0ZHX0NG RzAJCTB4MAorI2RlZmluZSAgIFJYX0VEUEtUX0NGR19DRkcwX0RCVUZfU0hJRlQJOQorI2RlZmlu ZSAgICBSWF9FRFBLVF9DRkdfQ0ZHMF9SQlVGCTB4MAorI2RlZmluZSAgICBSWF9FRFBLVF9DRkdf Q0ZHMF9SQlVGXzRLCTB4MQorI2RlZmluZSAgICBSWF9FRFBLVF9DRkdfQ0ZHMF9CVUZfNEsJMHgy CisvKiBFRlJNIFNUVUZGLCAwID0zRCBubyBieXRlIHN0dWZmLCAxID0zRCB0d28gYnl0ZSBzdHVm ZiAqLworI2RlZmluZSAgIFJYX0VEUEtUX0NGR19DRkcwX0VGUk1fU1RVRglCSVQoMTEpCisjZGVm aW5lICAgUlhfRURQS1RfQ0ZHX0NGRzBfQkFMTl9TSElGVAkxMgorI2RlZmluZSAgICBSWF9FRFBL VF9DRkdfQ0ZHMF9OT19BTE4JMAorI2RlZmluZSAgICBSWF9FRFBLVF9DRkdfQ0ZHMF80X0FMTgky CisjZGVmaW5lICAgIFJYX0VEUEtUX0NGR19DRkcwXzY0X0FMTgk2CisjZGVmaW5lICBSWF9FRFBL VF9SSU5HX0JVRkZFUl9XUklURQkweDM4CisjZGVmaW5lICBSWF9FRFBLVF9SSU5HX0JVRkZFUl9S RUFECTB4NDAKKyNkZWZpbmUgIFJYX0VEUEtUX1JJTkdfQlVGRkVSX0JBU0UJMHg0OAorI2RlZmlu ZSAgUlhfRURQS1RfUklOR19CVUZGRVJfRU5ECTB4NTAKKyNkZWZpbmUgIFJYX0VEUEtUX1JJTkdf QlVGRkVSX1ZBTElECTB4NTgKKyNkZWZpbmUgIFJYX0VEUEtUX0NGR19FTkFCTEUJCTB4NmMKKyNk ZWZpbmUgICBSWF9FRFBLVF9DRkdfRU5BQkxFX0VOCUJJVCgwKQorCisjZGVmaW5lIFJYX1NQQl9E TUFfT0ZGU0VUKGludGYpIFwKKwkoKCgoaW50ZiktPmNoYW5uZWwpICogMHgzMCkgKyAweGEwMDAw KQorI2RlZmluZSAgUlhfU1BCX0RNQV9SRUFECQkweDAwCisjZGVmaW5lICBSWF9TUEJfRE1BX0JB U0UJCTB4MDgKKyNkZWZpbmUgIFJYX1NQQl9ETUFfRU5ECQkJMHgxMAorI2RlZmluZSAgUlhfU1BC X0RNQV9WQUxJRAkJMHgxOAorI2RlZmluZSAgUlhfU1BCX0RNQV9GSUZPX0NUUkwJCTB4MjAKKyNk ZWZpbmUgICBSWF9TUEJfRE1BX0ZJRk9fRkxVU0gJCUJJVCgwKQorI2RlZmluZSAgUlhfU1BCX0RN QV9GSUZPX1NUQVRVUwkJMHgyNAorCisjZGVmaW5lIFJYX1NQQl9DVFJMX09GRlNFVChpbnRmKSBc CisJKCgoKGludGYpLT5jaGFubmVsIC0gNikgKiAweDY4KSArIDB4YTEwMDApCisjZGVmaW5lICBS WF9TUEJfQ1RSTF9FTkFCTEUJCTB4MDAKKyNkZWZpbmUgICBSWF9TUEJfQ1RSTF9FTkFCTEVfRU4J CUJJVCgwKQorCisjZGVmaW5lIFJYX1BBVVNFX0NUUkxfT0ZGU0VUKGludGYpIFwKKwkoKCgoaW50 ZiktPmNoYW5uZWwgLSA2KSAqIDB4NCkgKyAweGExMTM4KQorI2RlZmluZSAgUlhfUEFVU0VfTUFQ X1ZFQ1RPUgkJMHgwMAorCisjZGVmaW5lIFJYX1NQQl9UT1BfQ1RSTF9PRkZTRVQoaW50ZikgXAor CSgoKChpbnRmKS0+Y2hhbm5lbCAtIDYpICogMHgxNCkgKyAweGEyMDAwKQorI2RlZmluZSAgUlhf U1BCX1RPUF9CTEtPVVQJCTB4MDAKKworI2RlZmluZSBOVU1fNEtfQlVGRkVSUwkJCTMyCisjZGVm aW5lIFJJTkdfQlVGRkVSX1NJWkUJCShQQUdFX1NJWkUgKiBOVU1fNEtfQlVGRkVSUykKKworI2Rl ZmluZSBERVNDX1JJTkdfQ09VTlQJCQkoNjQgKiBOVU1fNEtfQlVGRkVSUykKKyNkZWZpbmUgREVT Q19TSVpFCQkJMTYKKyNkZWZpbmUgREVTQ19SSU5HX1NJWkUJCQkoREVTQ19SSU5HX0NPVU5UICog REVTQ19TSVpFKQorCisjZW5kaWYKLS09MjAKMi43LjQK --00000000000064485705fc787e5b 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 YIZIAWUDBAIBBQCggdQwLwYJKoZIhvcNAQkEMSIEIMnk3jV9z8d91tOMLt5YEzSuhoazMHgNU6QM wvrsGny5MBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTIzMDUyNDIz MDIxMFowaQYJKoZIhvcNAQkPMVwwWjALBglghkgBZQMEASowCwYJYIZIAWUDBAEWMAsGCWCGSAFl AwQBAjAKBggqhkiG9w0DBzALBgkqhkiG9w0BAQowCwYJKoZIhvcNAQEHMAsGCWCGSAFlAwQCATAN BgkqhkiG9w0BAQEFAASCAQCbopgNe8vUsUveJAYyVZdXwchgUuhS3kA3xiH0bIFrkptbfwCDQelW KU3gBAjE1QKwyd72gbpHwaognjuWRHMe9pj2n0Z0kUkJzeQbFp2Fz2zWeBhTPPQ5qurSsT8RwTOF 7dztKUlNVcsYYXyAGSxXCjDsJG8AyISFR6gFgExcnSsKdyao33yRAgPEc/+GrMyW9uTzMLJC+Ftq dfF8wPA1QdOqC9GuXzr91u5K7ngw7XAXrpS4dXnH2Tk/G2LSRSo0U/ySFFR29UeQyykc+IvfwHOd k8LCfYRx0TmI4Okxc3t/I1wE5t9OvcFRhcoZ+DWmUw7L7QoPUsjbs7epc+Zh --00000000000064485705fc787e5b--