From nobody Sun Feb 8 23:25:19 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 C941DC7EE2E for ; Fri, 19 May 2023 21:20:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231513AbjESVUP (ORCPT ); Fri, 19 May 2023 17:20:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49696 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231500AbjESVUJ (ORCPT ); Fri, 19 May 2023 17:20:09 -0400 Received: from mail-qt1-x829.google.com (mail-qt1-x829.google.com [IPv6:2607:f8b0:4864:20::829]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 87DA31B4 for ; Fri, 19 May 2023 14:20:02 -0700 (PDT) Received: by mail-qt1-x829.google.com with SMTP id d75a77b69052e-3f42b4da6e5so18391591cf.2 for ; Fri, 19 May 2023 14:20:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; t=1684531201; x=1687123201; h=references:in-reply-to:message-id:date:subject:cc:to:from:from:to :cc:subject:date:message-id:reply-to; bh=ePJ14KKaXNEsjC0UIoQbcciAK1dmvs2RTMi7o1Umop4=; b=JcAR4bg9DG3Qyjo/d4yottS8zezedo+pTuGaYbomU9UcQ6I4RSdHdSPyTBFy+yVwBX J0eeO1pBiiJ+D0Bj/TZRM+3Ks3lgIG1C02vyCmghyJQ3gSuIbY4iWPMXmnOUNyjxfHlT ybpHhxTxFekdaYvs2FGiSlFP23EPzx4Fkh1MI= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1684531201; x=1687123201; 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=ePJ14KKaXNEsjC0UIoQbcciAK1dmvs2RTMi7o1Umop4=; b=g2HwLmcSDo9e60BpJPZIIs2isr88lPEySjHNp5DQOMSPRKfjWErdyX5wDIF5jWEhNV GiIxj2ZXca8nPqiGWQuIE3u+5bKn6dB/S6ztVZpF8gcNoQHMC+Ah+gqmOIXMh8q5ehXF d/dzCv+zsdP40+APs5GDzXy0NU0Qv9EbcdNsMkE+Im86x8asSkbIoTf8lCXgtRZFq/CP IQbMtLnLA8QxnO5pnYg5TlqrgDkiM5kb9/Aj70y34c8b0XTFzgmINFknubI/oSqULQ5h 5m5pLYecbnv4sFeXwXxzPy7ho07qMxxwUpK+54PxUPyDlQJR9gnHfhhIM6LgoB2eWFmx W7Gg== X-Gm-Message-State: AC+VfDzISzMBV4jw/oiMjtWeZiWNFwFaS7tUY+sQ0grXO5NF/E+OklF+ kXGwAA6sAK7Vff6v1GLeYe967g== X-Google-Smtp-Source: ACHHUZ6cvwHvGKMzhxZoSnZqJARvtLeWyKqGf1XXtjH6Io9xd0mn9WrjYEW7ForhRAYSNn3SNlS9Ug== X-Received: by 2002:ac8:7f06:0:b0:3f4:cfed:96a8 with SMTP id f6-20020ac87f06000000b003f4cfed96a8mr6144265qtk.12.1684531200411; Fri, 19 May 2023 14:20:00 -0700 (PDT) Received: from stbirv-lnx-2.igp.broadcom.net ([192.19.223.252]) by smtp.gmail.com with ESMTPSA id p11-20020ae9f30b000000b0074df8eefe2dsm1364585qkg.98.2023.05.19.14.19.57 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 19 May 2023 14:20:00 -0700 (PDT) From: Justin Chen To: netdev@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-media@vger.kernel.org, dri-devel@lists.freedesktop.org, bcm-kernel-feedback-list@broadcom.com Cc: justinpopo6@gmail.com, justin.chen@broadcom.com, f.fainelli@gmail.com, davem@davemloft.net, florian.fainelli@broadcom.com, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, robh+dt@kernel.org, krzysztof.kozlowski+dt@linaro.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 Subject: [PATCH net-next v3 3/6] net: bcmasp: Add support for ASP2.0 Ethernet controller Date: Fri, 19 May 2023 14:19:41 -0700 Message-Id: <1684531184-14009-4-git-send-email-justin.chen@broadcom.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1684531184-14009-1-git-send-email-justin.chen@broadcom.com> References: <1684531184-14009-1-git-send-email-justin.chen@broadcom.com> Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-256; boundary="000000000000dfb6ef05fc127be4" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable --000000000000dfb6ef05fc127be4 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 QWRkIHN1cHBvcnQgZm9yIHRoZSBCcm9hZGNvbSBBU1AgMi4wIEV0aGVybmV0IGNvbnRyb2xsZXIg d2hpY2ggaXMgZmlyc3QKaW50cm9kdWNlZCB3aXRoIDcyMTY1LiBUaGlzIGNvbnRyb2xsZXIgZmVh dHVyZXMgdHdvIGRpc3RpbmN0IEV0aGVybmV0CnBvcnRzIHRoYXQgY2FuIGJlIGluZGVwZW5kZW50 bHkgb3BlcmF0ZWQuCgpUaGlzIHBhdGNoIHN1cHBvcnRzOgoKLSBXYWtlLW9uLUxBTiB1c2luZyBt YWdpYyBwYWNrZXRzCi0gYmFzaWMgZXRodG9vbCBvcGVyYXRpb25zIChsaW5rLCBjb3VudGVycywg bWVzc2FnZSBsZXZlbCkKLSBNQUMgZGVzdGluYXRpb24gYWRkcmVzcyBmaWx0ZXJpbmcgKHByb21p c2N1b3VzLCBBTExfTVVMVEksIGV0Yy4pCgpTaWduZWQtb2ZmLWJ5OiBGbG9yaWFuIEZhaW5lbGxp IDxmbG9yaWFuLmZhaW5lbGxpQGJyb2FkY29tLmNvbT4KU2lnbmVkLW9mZi1ieTogSnVzdGluIENo ZW4gPGp1c3Rpbi5jaGVuQGJyb2FkY29tLmNvbT4KLS0tCnYzCiAgICAgICAgLSBGaXggbG9naWMg ZXJyb3Igd2l0aCBuZXQgc3RhdHMgd2hlcmUgc29tZSBzdGF0cyB3ZXJlIG1pc3NpbmcKICAgICAg ICAtIEdlbmVyYWwgY2xlYW4gdXAgYWRkcmVzc2luZyBmb3JtYXR0aW5nL3NwZWxsaW5nL2NvbnNp c3RlbmN5CiAgICAgICAgLSBVc2UgZGV2X2Vycl9wcm9iZSB0byBzYXZlIGEgZmV3IExvQ3MKICAg ICAgICAtIFVzZSBwdXRfdW5hbGlnbmVkIHdoZW4gdXBkYXRpbmcgbmV0IHN0YXRzCgp2MgogICAg ICAgIC0gUmVwbGFjZSBhIGNvdXBsZSBmdW5jdGlvbnMgd2l0aCBoZWxwZXIgZnVuY3Rpb25zCiAg ICAgICAgLSBGaXggYSBmZXcgV29MIGlzc3VlcwoKIGRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2Fk Y29tL0tjb25maWcgICAgICAgICAgICAgIHwgICAxMSArCiBkcml2ZXJzL25ldC9ldGhlcm5ldC9i cm9hZGNvbS9NYWtlZmlsZSAgICAgICAgICAgICB8ICAgIDEgKwogZHJpdmVycy9uZXQvZXRoZXJu ZXQvYnJvYWRjb20vYXNwMi9NYWtlZmlsZSAgICAgICAgfCAgICAyICsKIGRyaXZlcnMvbmV0L2V0 aGVybmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwLmMgICAgICAgIHwgMTQ2MCArKysrKysrKysrKysr KysrPQorKysrCiBkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcC5oICAg ICAgICB8ICA2MzYgKysrKysrKysrCiAuLi4vbmV0L2V0aGVybmV0L2Jyb2FkY29tL2FzcDIvYmNt YXNwX2V0aHRvb2wuYyAgICB8ICA1NjggKysrKysrKysKIGRyaXZlcnMvbmV0L2V0aGVybmV0L2Jy b2FkY29tL2FzcDIvYmNtYXNwX2ludGYuYyAgIHwgMTQyOSArKysrKysrKysrKysrKysrPQorKysK IC4uLi9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9iY21hc3BfaW50Zl9kZWZzLmggIHwgIDIz OCArKysrCiA4IGZpbGVzIGNoYW5nZWQsIDQzNDUgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2FzcDIvTWFrZWZpbGUKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcC5j CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9i Y21hc3AuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29t L2FzcDIvYmNtYXNwX2V0aHRvb2wuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L2V0 aGVybmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwX2ludGYuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwX2ludGZfZGVmcy5oCgpkaWZm IC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZyBiL2RyaXZlcnMv bmV0L2V0aGVybmV0L2I9CnJvYWRjb20vS2NvbmZpZwppbmRleCA5NDg1ODZiZjFiNWIuLmQ0MTY2 MTQxMTQ1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZp ZworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnCkBAIC0yNTUsNCAr MjU1LDE1IEBAIGNvbmZpZyBCTlhUX0hXTU9OCiAJICBTYXkgWSBpZiB5b3Ugd2FudCB0byBleHBv c2UgdGhlIHRoZXJtYWwgc2Vuc29yIGRhdGEgb24gTmV0WHRyZW1lLUMvRQogCSAgZGV2aWNlcywg dmlhIHRoZSBod21vbiBzeXNmcyBpbnRlcmZhY2UuCj0yMAorY29uZmlnIEJDTUFTUAorCXRyaXN0 YXRlICJCcm9hZGNvbSBBU1AgMi4wIEV0aGVybmV0IHN1cHBvcnQiCisJZGVmYXVsdCBBUkNIX0JS Q01TVEIKKwlkZXBlbmRzIG9uIE9GCisJc2VsZWN0IE1JSQorCXNlbGVjdCBQSFlMSUIKKwlzZWxl Y3QgTURJT19CQ01fVU5JTUFDCisJaGVscAorCSAgVGhpcyBjb25maWd1cmF0aW9uIGVuYWJsZXMg dGhlIEJyb2FkY29tIEFTUCAyLjAgRXRoZXJuZXQgY29udHJvbGxlcgorCSAgZHJpdmVyIHdoaWNo IGlzIHByZXNlbnQgaW4gQnJvYWRjb20gU1RCIFNvQ3Mgc3VjaCBhcyA3MjE2NS4KKwogZW5kaWYg IyBORVRfVkVORE9SX0JST0FEQ09NCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9i cm9hZGNvbS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0Lz0KYnJvYWRjb20vTWFrZWZp bGUKaW5kZXggMGRkZmI1YjVkNTNjLi5iYWM1Y2I2YWQwY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv bmV0L2V0aGVybmV0L2Jyb2FkY29tL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0 L2Jyb2FkY29tL01ha2VmaWxlCkBAIC0xNywzICsxNyw0IEBAIG9iai0kKENPTkZJR19CR01BQ19C Q01BKSArPTNEIGJnbWFjLWJjbWEubyBiZ21hYy1iY21hLW1kaT0Kby5vCiBvYmotJChDT05GSUdf QkdNQUNfUExBVEZPUk0pICs9M0QgYmdtYWMtcGxhdGZvcm0ubwogb2JqLSQoQ09ORklHX1NZU1RF TVBPUlQpICs9M0QgYmNtc3lzcG9ydC5vCiBvYmotJChDT05GSUdfQk5YVCkgKz0zRCBibnh0Lwor b2JqLSQoQ09ORklHX0JDTUFTUCkgKz0zRCBhc3AyLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQv ZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGU9CnJuZXQv YnJvYWRjb20vYXNwMi9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMDAuLmUwNzU1MDMxNWY4MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVy bmV0L2Jyb2FkY29tL2FzcDIvTWFrZWZpbGUKQEAgLTAsMCArMSwyIEBACitvYmotJChDT05GSUdf QkNNQVNQKSArPTNEIGJjbS1hc3AubworYmNtLWFzcC1vYmpzIDo9M0QgYmNtYXNwLm8gYmNtYXNw X2ludGYubyBiY21hc3BfZXRodG9vbC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5l dC9icm9hZGNvbS9hc3AyL2JjbWFzcC5jIGIvZHJpdmVycy9uZXQvZXRoZT0Kcm5ldC9icm9hZGNv bS9hc3AyL2JjbWFzcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4u NmUwYzdkZjYyYzFlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJv YWRjb20vYXNwMi9iY21hc3AuYwpAQCAtMCwwICsxLDE0NjAgQEAKKy8vIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBHUEwtMi4wCisvKgorICogQnJvYWRjb20gU1RCIEFTUCAyLjAgRHJpdmVyCisg KgorICogQ29weXJpZ2h0IChjKSAyMDIwIEJyb2FkY29tCisgKi8KKyNpbmNsdWRlIDxsaW51eC9l dGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KKyNpbmNsdWRlIDxsaW51 eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgv bW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGxh dGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9v Zl9hZGRyZXNzLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxs aW51eC9jbGsuaD4KKworI2luY2x1ZGUgImJjbWFzcC5oIgorI2luY2x1ZGUgImJjbWFzcF9pbnRm X2RlZnMuaCIKKworc3RhdGljIHZvaWQgX2ludHIyX21hc2tfY2xlYXIoc3RydWN0IGJjbWFzcF9w cml2ICpwcml2LCB1MzIgbWFzaykKK3sKKwlpbnRyMl9jb3JlX3dsKHByaXYsIG1hc2ssIEFTUF9J TlRSMl9NQVNLX0NMRUFSKTsKKwlwcml2LT5pcnFfbWFzayAmPTNEIH5tYXNrOworfQorCitzdGF0 aWMgdm9pZCBfaW50cjJfbWFza19zZXQoc3RydWN0IGJjbWFzcF9wcml2ICpwcml2LCB1MzIgbWFz aykKK3sKKwlpbnRyMl9jb3JlX3dsKHByaXYsIG1hc2ssIEFTUF9JTlRSMl9NQVNLX1NFVCk7CisJ cHJpdi0+aXJxX21hc2sgfD0zRCBtYXNrOworfQorCit2b2lkIGJjbWFzcF9lbmFibGVfdHhfaXJx KHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZiwgaW50IGVuKQoreworCXN0cnVjdCBiY21hc3BfcHJp diAqcHJpdiA9M0QgaW50Zi0+cGFyZW50OworCisJaWYgKGVuKQorCQlfaW50cjJfbWFza19jbGVh cihwcml2LCBBU1BfSU5UUjJfVFhfREVTQyhpbnRmLT5jaGFubmVsKSk7CisJZWxzZQorCQlfaW50 cjJfbWFza19zZXQocHJpdiwgQVNQX0lOVFIyX1RYX0RFU0MoaW50Zi0+Y2hhbm5lbCkpOworfQor RVhQT1JUX1NZTUJPTF9HUEwoYmNtYXNwX2VuYWJsZV90eF9pcnEpOworCit2b2lkIGJjbWFzcF9l bmFibGVfcnhfaXJxKHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZiwgaW50IGVuKQoreworCXN0cnVj dCBiY21hc3BfcHJpdiAqcHJpdiA9M0QgaW50Zi0+cGFyZW50OworCisJaWYgKGVuKQorCQlfaW50 cjJfbWFza19jbGVhcihwcml2LCBBU1BfSU5UUjJfUlhfRUNIKGludGYtPmNoYW5uZWwpKTsKKwll bHNlCisJCV9pbnRyMl9tYXNrX3NldChwcml2LCBBU1BfSU5UUjJfUlhfRUNIKGludGYtPmNoYW5u ZWwpKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGJjbWFzcF9lbmFibGVfcnhfaXJxKTsKKworc3Rh dGljIHZvaWQgYmNtYXNwX2ludHIyX21hc2tfc2V0X2FsbChzdHJ1Y3QgYmNtYXNwX3ByaXYgKnBy aXYpCit7CisJX2ludHIyX21hc2tfc2V0KHByaXYsIDB4ZmZmZmZmZmYpOworCXByaXYtPmlycV9t YXNrID0zRCAweGZmZmZmZmZmOworfQorCitzdGF0aWMgdm9pZCBiY21hc3BfaW50cjJfY2xlYXJf YWxsKHN0cnVjdCBiY21hc3BfcHJpdiAqcHJpdikKK3sKKwlpbnRyMl9jb3JlX3dsKHByaXYsIDB4 ZmZmZmZmZmYsIEFTUF9JTlRSMl9DTEVBUik7Cit9CisKK3N0YXRpYyB2b2lkIGJjbWFzcF9pbnRy Ml9oYW5kbGluZyhzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsIHUzMiBzdGF0dXMpCit7CisJaWYg KHN0YXR1cyAmIEFTUF9JTlRSMl9SWF9FQ0goaW50Zi0+Y2hhbm5lbCkpIHsKKwkJaWYgKGxpa2Vs eShuYXBpX3NjaGVkdWxlX3ByZXAoJmludGYtPnJ4X25hcGkpKSkgeworCQkJYmNtYXNwX2VuYWJs ZV9yeF9pcnEoaW50ZiwgMCk7CisJCQlfX25hcGlfc2NoZWR1bGVfaXJxb2ZmKCZpbnRmLT5yeF9u YXBpKTsKKwkJfQorCX0KKworCWlmIChzdGF0dXMgJiBBU1BfSU5UUjJfVFhfREVTQyhpbnRmLT5j aGFubmVsKSkgeworCQlpZiAobGlrZWx5KG5hcGlfc2NoZWR1bGVfcHJlcCgmaW50Zi0+dHhfbmFw aSkpKSB7CisJCQliY21hc3BfZW5hYmxlX3R4X2lycShpbnRmLCAwKTsKKwkJCV9fbmFwaV9zY2hl ZHVsZV9pcnFvZmYoJmludGYtPnR4X25hcGkpOworCQl9CisJfQorfQorCitzdGF0aWMgaXJxcmV0 dXJuX3QgYmNtYXNwX2lzcihpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBiY21hc3Bf cHJpdiAqcHJpdiA9M0QgZGF0YTsKKwlzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGY7CisJdTMyIHN0 YXR1czsKKwlpbnQgaTsKKworCXN0YXR1cyA9M0QgaW50cjJfY29yZV9ybChwcml2LCBBU1BfSU5U UjJfU1RBVFVTKSAmCisJCX5pbnRyMl9jb3JlX3JsKHByaXYsIEFTUF9JTlRSMl9NQVNLX1NUQVRV Uyk7CisKKwlpbnRyMl9jb3JlX3dsKHByaXYsIHN0YXR1cywgQVNQX0lOVFIyX0NMRUFSKTsKKwor CWlmICh1bmxpa2VseShzdGF0dXMgPTNEPTNEIDApKSB7CisJCWRldl93YXJuKCZwcml2LT5wZGV2 LT5kZXYsICJsMiBzcHVyaW91cyBpbnRlcnJ1cHRcbiIpOworCQlyZXR1cm4gSVJRX05PTkU7CisJ fQorCisJLyogSGFuZGxlIGludGZlcmZhY2VzICovCisJZm9yIChpID0zRCAwOyBpIDwgcHJpdi0+ aW50Zl9jb3VudDsgaSsrKSB7CisJCWludGYgPTNEIHByaXYtPmludGZzW2ldOworCQliY21hc3Bf aW50cjJfaGFuZGxpbmcoaW50Ziwgc3RhdHVzKTsKKwl9CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7 Cit9CisKK3ZvaWQgYmNtYXNwX2ZsdXNoX3J4X3BvcnQoc3RydWN0IGJjbWFzcF9pbnRmICppbnRm KQoreworCXN0cnVjdCBiY21hc3BfcHJpdiAqcHJpdiA9M0QgaW50Zi0+cGFyZW50OworCXUzMiBt YXNrOworCisJc3dpdGNoIChpbnRmLT5wb3J0KSB7CisJY2FzZSAwOgorCQltYXNrID0zRCBBU1Bf Q1RSTF9VTUFDMF9GTFVTSF9NQVNLOworCQlicmVhazsKKwljYXNlIDE6CisJCW1hc2sgPTNEIEFT UF9DVFJMX1VNQUMxX0ZMVVNIX01BU0s7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJbWFzayA9M0Qg QVNQX0NUUkxfU1BCX0ZMVVNIX01BU0s7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIE5vdCB2 YWxpZCBwb3J0ICovCisJCXJldHVybjsKKwl9CisKKwlyeF9jdHJsX2NvcmVfd2wocHJpdiwgbWFz aywgcHJpdi0+aHdfaW5mby0+cnhfY3RybF9mbHVzaCk7Cit9CisKK3N0YXRpYyB2b2lkIGJjbWFz cF9uZXRmaWx0X2h3X2VuX3dha2Uoc3RydWN0IGJjbWFzcF9wcml2ICpwcml2LAorCQkJCSAgICAg IHN0cnVjdCBiY21hc3BfbmV0X2ZpbHRlciAqbmZpbHQpCit7CisJcnhfZmlsdGVyX2NvcmVfd2wo cHJpdiwgQVNQX1JYX0ZJTFRFUl9ORVRfT0ZGU0VUX0wzXzEoNjQpLAorCQkJICBBU1BfUlhfRklM VEVSX05FVF9PRkZTRVQobmZpbHQtPmh3X2luZGV4KSk7CisKKwlyeF9maWx0ZXJfY29yZV93bChw cml2LCBBU1BfUlhfRklMVEVSX05FVF9PRkZTRVRfTDIoMzIpIHwKKwkJCSAgQVNQX1JYX0ZJTFRF Ul9ORVRfT0ZGU0VUX0wzXzAoMzIpIHwKKwkJCSAgQVNQX1JYX0ZJTFRFUl9ORVRfT0ZGU0VUX0wz XzEoOTYpIHwKKwkJCSAgQVNQX1JYX0ZJTFRFUl9ORVRfT0ZGU0VUX0w0KDMyKSwKKwkJCSAgQVNQ X1JYX0ZJTFRFUl9ORVRfT0ZGU0VUKG5maWx0LT5od19pbmRleCArIDEpKTsKKworCXJ4X2ZpbHRl cl9jb3JlX3dsKHByaXYsIEFTUF9SWF9GSUxURVJfTkVUX0NGR19DSChuZmlsdC0+cG9ydCArIDgp IHwKKwkJCSAgQVNQX1JYX0ZJTFRFUl9ORVRfQ0ZHX0VOIHwKKwkJCSAgQVNQX1JYX0ZJTFRFUl9O RVRfQ0ZHX0wyX0VOIHwKKwkJCSAgQVNQX1JYX0ZJTFRFUl9ORVRfQ0ZHX0wzX0VOIHwKKwkJCSAg QVNQX1JYX0ZJTFRFUl9ORVRfQ0ZHX0w0X0VOIHwKKwkJCSAgQVNQX1JYX0ZJTFRFUl9ORVRfQ0ZH X0wzX0ZSTSgyKSB8CisJCQkgIEFTUF9SWF9GSUxURVJfTkVUX0NGR19MNF9GUk0oMikgfAorCQkJ ICBBU1BfUlhfRklMVEVSX05FVF9DRkdfVU1DKG5maWx0LT5wb3J0KSwKKwkJCSAgQVNQX1JYX0ZJ TFRFUl9ORVRfQ0ZHKG5maWx0LT5od19pbmRleCkpOworCisJcnhfZmlsdGVyX2NvcmVfd2wocHJp diwgQVNQX1JYX0ZJTFRFUl9ORVRfQ0ZHX0NIKG5maWx0LT5wb3J0ICsgOCkgfAorCQkJICBBU1Bf UlhfRklMVEVSX05FVF9DRkdfRU4gfAorCQkJICBBU1BfUlhfRklMVEVSX05FVF9DRkdfTDJfRU4g fAorCQkJICBBU1BfUlhfRklMVEVSX05FVF9DRkdfTDNfRU4gfAorCQkJICBBU1BfUlhfRklMVEVS X05FVF9DRkdfTDRfRU4gfAorCQkJICBBU1BfUlhfRklMVEVSX05FVF9DRkdfTDNfRlJNKDIpIHwK KwkJCSAgQVNQX1JYX0ZJTFRFUl9ORVRfQ0ZHX0w0X0ZSTSgyKSB8CisJCQkgIEFTUF9SWF9GSUxU RVJfTkVUX0NGR19VTUMobmZpbHQtPnBvcnQpLAorCQkJICBBU1BfUlhfRklMVEVSX05FVF9DRkco bmZpbHQtPmh3X2luZGV4ICsgMSkpOworfQorCisjZGVmaW5lIE1BWF9XQUtFX0ZJTFRFUl9TSVpF CQkyNTYKK2VudW0gYXNwX25ldGZpbHRfcmVnX3R5cGUgeworCUFTUF9ORVRGSUxUX01BVENIID0z RCAwLAorCUFTUF9ORVRGSUxUX01BU0ssCisJQVNQX05FVEZJTFRfTUFYCit9OworCitzdGF0aWMg aW50IGJjbWFzcF9uZXRmaWx0X2dldF9yZWdfb2Zmc2V0KHN0cnVjdCBiY21hc3BfcHJpdiAqcHJp diwKKwkJCQkJIHN0cnVjdCBiY21hc3BfbmV0X2ZpbHRlciAqbmZpbHQsCisJCQkJCSBlbnVtIGFz cF9uZXRmaWx0X3JlZ190eXBlIHJlZ190eXBlLAorCQkJCQkgdTMyIG9mZnNldCkKK3sKKwl1MzIg YmxvY2tfaW5kZXgsIGZpbHRlcl9zZWw7CisKKwlpZiAob2Zmc2V0IDwgMzIpIHsKKwkJYmxvY2tf aW5kZXggPTNEIEFTUF9SWF9GSUxURVJfTkVUX0wyOworCQlmaWx0ZXJfc2VsID0zRCBuZmlsdC0+ aHdfaW5kZXg7CisJfSBlbHNlIGlmIChvZmZzZXQgPCA2NCkgeworCQlibG9ja19pbmRleCA9M0Qg QVNQX1JYX0ZJTFRFUl9ORVRfTDI7CisJCWZpbHRlcl9zZWwgPTNEIG5maWx0LT5od19pbmRleCAr IDE7CisJfSBlbHNlIGlmIChvZmZzZXQgPCA5NikgeworCQlibG9ja19pbmRleCA9M0QgQVNQX1JY X0ZJTFRFUl9ORVRfTDNfMDsKKwkJZmlsdGVyX3NlbCA9M0QgbmZpbHQtPmh3X2luZGV4OworCX0g ZWxzZSBpZiAob2Zmc2V0IDwgMTI4KSB7CisJCWJsb2NrX2luZGV4ID0zRCBBU1BfUlhfRklMVEVS X05FVF9MM18wOworCQlmaWx0ZXJfc2VsID0zRCBuZmlsdC0+aHdfaW5kZXggKyAxOworCX0gZWxz ZSBpZiAob2Zmc2V0IDwgMTYwKSB7CisJCWJsb2NrX2luZGV4ID0zRCBBU1BfUlhfRklMVEVSX05F VF9MM18xOworCQlmaWx0ZXJfc2VsID0zRCBuZmlsdC0+aHdfaW5kZXg7CisJfSBlbHNlIGlmIChv ZmZzZXQgPCAxOTIpIHsKKwkJYmxvY2tfaW5kZXggPTNEIEFTUF9SWF9GSUxURVJfTkVUX0wzXzE7 CisJCWZpbHRlcl9zZWwgPTNEIG5maWx0LT5od19pbmRleCArIDE7CisJfSBlbHNlIGlmIChvZmZz ZXQgPCAyMjQpIHsKKwkJYmxvY2tfaW5kZXggPTNEIEFTUF9SWF9GSUxURVJfTkVUX0w0OworCQlm aWx0ZXJfc2VsID0zRCBuZmlsdC0+aHdfaW5kZXg7CisJfSBlbHNlIGlmIChvZmZzZXQgPCAyNTYp IHsKKwkJYmxvY2tfaW5kZXggPTNEIEFTUF9SWF9GSUxURVJfTkVUX0w0OworCQlmaWx0ZXJfc2Vs ID0zRCBuZmlsdC0+aHdfaW5kZXggKyAxOworCX0KKworCXN3aXRjaCAocmVnX3R5cGUpIHsKKwlj YXNlIEFTUF9ORVRGSUxUX01BVENIOgorCQlyZXR1cm4gQVNQX1JYX0ZJTFRFUl9ORVRfUEFUKGZp bHRlcl9zZWwsIGJsb2NrX2luZGV4LAorCQkJCQkgICAgIChvZmZzZXQgJSAzMikpOworCWNhc2Ug QVNQX05FVEZJTFRfTUFTSzoKKwkJcmV0dXJuIEFTUF9SWF9GSUxURVJfTkVUX01BU0soZmlsdGVy X3NlbCwgYmxvY2tfaW5kZXgsCisJCQkJCSAgICAgIChvZmZzZXQgJSAzMikpOworCWRlZmF1bHQ6 CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKworc3RhdGljIHZvaWQgYmNtYXNwX25ldGZpbHRf d3Ioc3RydWN0IGJjbWFzcF9wcml2ICpwcml2LAorCQkJICAgICAgc3RydWN0IGJjbWFzcF9uZXRf ZmlsdGVyICpuZmlsdCwKKwkJCSAgICAgIGVudW0gYXNwX25ldGZpbHRfcmVnX3R5cGUgcmVnX3R5 cGUsCisJCQkgICAgICB1MzIgdmFsLCB1MzIgb2Zmc2V0KQoreworCWludCByZWdfb2Zmc2V0Owor CisJLyogSFcgb25seSBhY2NlcHRzIDQgYnl0ZSBhbGlnbmVkIHdyaXRlcyAqLworCWlmICghSVNf QUxJR05FRChvZmZzZXQsIDQpIHx8IG9mZnNldCA+IE1BWF9XQUtFX0ZJTFRFUl9TSVpFKQorCQly ZXR1cm47CisKKwlyZWdfb2Zmc2V0ID0zRCBiY21hc3BfbmV0ZmlsdF9nZXRfcmVnX29mZnNldChw cml2LCBuZmlsdCwgcmVnX3R5cGUsCisJCQkJCQkgICBvZmZzZXQpOworCisJcnhfZmlsdGVyX2Nv cmVfd2wocHJpdiwgdmFsLCByZWdfb2Zmc2V0KTsKK30KKworc3RhdGljIHUzMiBiY21hc3BfbmV0 ZmlsdF9yZChzdHJ1Y3QgYmNtYXNwX3ByaXYgKnByaXYsCisJCQkgICAgIHN0cnVjdCBiY21hc3Bf bmV0X2ZpbHRlciAqbmZpbHQsCisJCQkgICAgIGVudW0gYXNwX25ldGZpbHRfcmVnX3R5cGUgcmVn X3R5cGUsCisJCQkgICAgIHUzMiBvZmZzZXQpCit7CisJaW50IHJlZ19vZmZzZXQ7CisKKwkvKiBI VyBvbmx5IGFjY2VwdHMgNCBieXRlIGFsaWduZWQgd3JpdGVzICovCisJaWYgKCFJU19BTElHTkVE KG9mZnNldCwgNCkgfHwgb2Zmc2V0ID4gTUFYX1dBS0VfRklMVEVSX1NJWkUpCisJCXJldHVybiAw OworCisJcmVnX29mZnNldCA9M0QgYmNtYXNwX25ldGZpbHRfZ2V0X3JlZ19vZmZzZXQocHJpdiwg bmZpbHQsIHJlZ190eXBlLAorCQkJCQkJICAgb2Zmc2V0KTsKKworCXJldHVybiByeF9maWx0ZXJf Y29yZV9ybChwcml2LCByZWdfb2Zmc2V0KTsKK30KKworc3RhdGljIGludCBiY21hc3BfbmV0Zmls dF93cl9tX3dha2Uoc3RydWN0IGJjbWFzcF9wcml2ICpwcml2LAorCQkJCSAgICBzdHJ1Y3QgYmNt YXNwX25ldF9maWx0ZXIgKm5maWx0LAorCQkJCSAgICB1MzIgb2Zmc2V0LCB2b2lkICptYXRjaCwg dm9pZCAqbWFzaywKKwkJCQkgICAgc2l6ZV90IHNpemUpCit7CisJdTMyIHNoaWZ0LCBtYXNrX3Zh bCA9M0QgMCwgbWF0Y2hfdmFsID0zRCAwOworCWJvb2wgZmlyc3RfYnl0ZSA9M0QgdHJ1ZTsKKwor CWlmICgob2Zmc2V0ICsgc2l6ZSkgPiBNQVhfV0FLRV9GSUxURVJfU0laRSkKKwkJcmV0dXJuIC1F SU5WQUw7CisKKwl3aGlsZSAoc2l6ZS0tKSB7CisJCS8qIFRoZSBIVyBvbmx5IGFjY2VwdHMgNCBi eXRlIGFsaWduZWQgd3JpdGVzLCBzbyBpZiB3ZQorCQkgKiBiZWdpbiB1bmFsaWduZWQgb3IgaWYg cmVtYWluaW5nIGJ5dGVzIGxlc3MgdGhhbiA0LAorCQkgKiB3ZSBuZWVkIHRvIHJlYWQgdGhlbiB3 cml0ZSB0byBhdm9pZCBsb3NpbmcgY3VycmVudAorCQkgKiByZWdpc3RlciBzdGF0ZQorCQkgKi8K KwkJaWYgKGZpcnN0X2J5dGUgJiYgKCFJU19BTElHTkVEKG9mZnNldCwgNCkgfHwgc2l6ZSA8IDMp KSB7CisJCQltYXRjaF92YWwgPTNEIGJjbWFzcF9uZXRmaWx0X3JkKHByaXYsIG5maWx0LAorCQkJ CQkJICAgICAgQVNQX05FVEZJTFRfTUFUQ0gsCisJCQkJCQkgICAgICBBTElHTl9ET1dOKG9mZnNl dCwgNCkpOworCQkJbWFza192YWwgPTNEIGJjbWFzcF9uZXRmaWx0X3JkKHByaXYsIG5maWx0LAor CQkJCQkJICAgICBBU1BfTkVURklMVF9NQVNLLAorCQkJCQkJICAgICBBTElHTl9ET1dOKG9mZnNl dCwgNCkpOworCQl9CisKKwkJc2hpZnQgPTNEICgzIC0gKG9mZnNldCAlIDQpKSAqIDg7CisJCW1h dGNoX3ZhbCAmPTNEIH5HRU5NQVNLKHNoaWZ0ICsgNywgc2hpZnQpOworCQltYXNrX3ZhbCAmPTNE IH5HRU5NQVNLKHNoaWZ0ICsgNywgc2hpZnQpOworCQltYXRjaF92YWwgfD0zRCAodTMyKSgqKCh1 OCAqKW1hdGNoKSA8PCBzaGlmdCk7CisJCW1hc2tfdmFsIHw9M0QgKHUzMikoKigodTggKiltYXNr KSA8PCBzaGlmdCk7CisKKwkJLyogSWYgbGFzdCBieXRlIG9yIGxhc3QgYnl0ZSBvZiB3b3JkLCB3 cml0ZSB0byByZWcgKi8KKwkJaWYgKCFzaXplIHx8ICgob2Zmc2V0ICUgNCkgPTNEPTNEIDMpKSB7 CisJCQliY21hc3BfbmV0ZmlsdF93cihwcml2LCBuZmlsdCwgQVNQX05FVEZJTFRfTUFUQ0gsCisJ CQkJCSAgbWF0Y2hfdmFsLCBBTElHTl9ET1dOKG9mZnNldCwgNCkpOworCQkJYmNtYXNwX25ldGZp bHRfd3IocHJpdiwgbmZpbHQsIEFTUF9ORVRGSUxUX01BU0ssCisJCQkJCSAgbWFza192YWwsIEFM SUdOX0RPV04ob2Zmc2V0LCA0KSk7CisJCQlmaXJzdF9ieXRlID0zRCB0cnVlOworCQl9IGVsc2Ug eworCQkJZmlyc3RfYnl0ZSA9M0QgZmFsc2U7CisJCX0KKworCQlvZmZzZXQrKzsKKwkJbWF0Y2gr KzsKKwkJbWFzaysrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBiY21hc3Bf bmV0ZmlsdF9yZXNldF9odyhzdHJ1Y3QgYmNtYXNwX3ByaXYgKnByaXYsCisJCQkJICAgIHN0cnVj dCBiY21hc3BfbmV0X2ZpbHRlciAqbmZpbHQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPTNEIDA7 IGkgPCBNQVhfV0FLRV9GSUxURVJfU0laRTsgaSArPTNEIDQpIHsKKwkJYmNtYXNwX25ldGZpbHRf d3IocHJpdiwgbmZpbHQsIEFTUF9ORVRGSUxUX01BVENILCAwLCBpKTsKKwkJYmNtYXNwX25ldGZp bHRfd3IocHJpdiwgbmZpbHQsIEFTUF9ORVRGSUxUX01BU0ssIDAsIGkpOworCX0KK30KKworc3Rh dGljIHZvaWQgYmNtYXNwX25ldGZpbHRfdGNwaXA0X3dyKHN0cnVjdCBiY21hc3BfcHJpdiAqcHJp diwKKwkJCQkgICAgIHN0cnVjdCBiY21hc3BfbmV0X2ZpbHRlciAqbmZpbHQsCisJCQkJICAgICBz dHJ1Y3QgZXRodG9vbF90Y3BpcDRfc3BlYyAqbWF0Y2gsCisJCQkJICAgICBzdHJ1Y3QgZXRodG9v bF90Y3BpcDRfc3BlYyAqbWFzaywKKwkJCQkgICAgIHUzMiBvZmZzZXQpCit7CisJX19iZTE2IHZh bF8xNiwgbWFza18xNjsKKworCXZhbF8xNiA9M0QgaHRvbnMoRVRIX1BfSVApOworCW1hc2tfMTYg PTNEIGh0b25zKDB4RkZGRik7CisJYmNtYXNwX25ldGZpbHRfd3JfbV93YWtlKHByaXYsIG5maWx0 LCAoRVRIX0FMRU4gKiAyKSArIG9mZnNldCwKKwkJCQkgJnZhbF8xNiwgJm1hc2tfMTYsIHNpemVv Zih2YWxfMTYpKTsKKwliY21hc3BfbmV0ZmlsdF93cl9tX3dha2UocHJpdiwgbmZpbHQsIEVUSF9I TEVOICsgb2Zmc2V0ICsgMSwKKwkJCQkgJm1hdGNoLT50b3MsICZtYXNrLT50b3MsCisJCQkJIHNp emVvZihtYXRjaC0+dG9zKSk7CisJYmNtYXNwX25ldGZpbHRfd3JfbV93YWtlKHByaXYsIG5maWx0 LCBFVEhfSExFTiArIG9mZnNldCArIDEyLAorCQkJCSAmbWF0Y2gtPmlwNHNyYywgJm1hc2stPmlw NHNyYywKKwkJCQkgc2l6ZW9mKG1hdGNoLT5pcDRzcmMpKTsKKwliY21hc3BfbmV0ZmlsdF93cl9t X3dha2UocHJpdiwgbmZpbHQsIEVUSF9ITEVOICsgb2Zmc2V0ICsgMTYsCisJCQkJICZtYXRjaC0+ aXA0ZHN0LCAmbWFzay0+aXA0ZHN0LAorCQkJCSBzaXplb2YobWF0Y2gtPmlwNGRzdCkpOworCWJj bWFzcF9uZXRmaWx0X3dyX21fd2FrZShwcml2LCBuZmlsdCwgRVRIX0hMRU4gKyBvZmZzZXQgKyAy MCwKKwkJCQkgJm1hdGNoLT5wc3JjLCAmbWFzay0+cHNyYywKKwkJCQkgc2l6ZW9mKG1hdGNoLT5w c3JjKSk7CisJYmNtYXNwX25ldGZpbHRfd3JfbV93YWtlKHByaXYsIG5maWx0LCBFVEhfSExFTiAr IG9mZnNldCArIDIyLAorCQkJCSAmbWF0Y2gtPnBkc3QsICZtYXNrLT5wZHN0LAorCQkJCSBzaXpl b2YobWF0Y2gtPnBkc3QpKTsKK30KKworc3RhdGljIHZvaWQgYmNtYXNwX25ldGZpbHRfdGNwaXA2 X3dyKHN0cnVjdCBiY21hc3BfcHJpdiAqcHJpdiwKKwkJCQkgICAgIHN0cnVjdCBiY21hc3BfbmV0 X2ZpbHRlciAqbmZpbHQsCisJCQkJICAgICBzdHJ1Y3QgZXRodG9vbF90Y3BpcDZfc3BlYyAqbWF0 Y2gsCisJCQkJICAgICBzdHJ1Y3QgZXRodG9vbF90Y3BpcDZfc3BlYyAqbWFzaywKKwkJCQkgICAg IHUzMiBvZmZzZXQpCit7CisJX19iZTE2IHZhbF8xNiwgbWFza18xNjsKKworCXZhbF8xNiA9M0Qg aHRvbnMoRVRIX1BfSVBWNik7CisJbWFza18xNiA9M0QgaHRvbnMoMHhGRkZGKTsKKwliY21hc3Bf bmV0ZmlsdF93cl9tX3dha2UocHJpdiwgbmZpbHQsIChFVEhfQUxFTiAqIDIpICsgb2Zmc2V0LAor CQkJCSAmdmFsXzE2LCAmbWFza18xNiwgc2l6ZW9mKHZhbF8xNikpOworCXZhbF8xNiA9M0QgbWF0 Y2gtPnRjbGFzcyA8PCA0OworCW1hc2tfMTYgPTNEIG1hc2stPnRjbGFzcyA8PCA0OworCWJjbWFz cF9uZXRmaWx0X3dyX21fd2FrZShwcml2LCBuZmlsdCwgRVRIX0hMRU4gKyBvZmZzZXQsCisJCQkJ ICZ2YWxfMTYsICZtYXNrXzE2LCBzaXplb2YodmFsXzE2KSk7CisJYmNtYXNwX25ldGZpbHRfd3Jf bV93YWtlKHByaXYsIG5maWx0LCBFVEhfSExFTiArIG9mZnNldCArIDgsCisJCQkJICZtYXRjaC0+ aXA2c3JjLCAmbWFzay0+aXA2c3JjLAorCQkJCSBzaXplb2YobWF0Y2gtPmlwNnNyYykpOworCWJj bWFzcF9uZXRmaWx0X3dyX21fd2FrZShwcml2LCBuZmlsdCwgRVRIX0hMRU4gKyBvZmZzZXQgKyAy NCwKKwkJCQkgJm1hdGNoLT5pcDZkc3QsICZtYXNrLT5pcDZkc3QsCisJCQkJIHNpemVvZihtYXRj aC0+aXA2ZHN0KSk7CisJYmNtYXNwX25ldGZpbHRfd3JfbV93YWtlKHByaXYsIG5maWx0LCBFVEhf SExFTiArIG9mZnNldCArIDQwLAorCQkJCSAmbWF0Y2gtPnBzcmMsICZtYXNrLT5wc3JjLAorCQkJ CSBzaXplb2YobWF0Y2gtPnBzcmMpKTsKKwliY21hc3BfbmV0ZmlsdF93cl9tX3dha2UocHJpdiwg bmZpbHQsIEVUSF9ITEVOICsgb2Zmc2V0ICsgNDIsCisJCQkJICZtYXRjaC0+cGRzdCwgJm1hc2st PnBkc3QsCisJCQkJIHNpemVvZihtYXRjaC0+cGRzdCkpOworfQorCitzdGF0aWMgaW50IGJjbWFz cF9uZXRmaWx0X3dyX3RvX2h3KHN0cnVjdCBiY21hc3BfcHJpdiAqcHJpdiwKKwkJCQkgICBzdHJ1 Y3QgYmNtYXNwX25ldF9maWx0ZXIgKm5maWx0KQoreworCXN0cnVjdCBldGh0b29sX3J4X2Zsb3df c3BlYyAqZnMgPTNEICZuZmlsdC0+ZnM7CisJdW5zaWduZWQgaW50IG9mZnNldCA9M0QgMDsKKwlf X2JlMTYgdmFsXzE2LCBtYXNrXzE2OworCXU4IHZhbF84LCBtYXNrXzg7CisKKwkvKiBDdXJyZW50 bHkgb25seSBzdXBwb3J0cyB3YWtlIGZpbHRlcnMgKi8KKwlpZiAoIW5maWx0LT53YWtlX2ZpbHRl cikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwliY21hc3BfbmV0ZmlsdF9yZXNldF9odyhwcml2LCBu ZmlsdCk7CisKKwlpZiAoZnMtPmZsb3dfdHlwZSAmIEZMT1dfTUFDX0VYVCkgeworCQliY21hc3Bf bmV0ZmlsdF93cl9tX3dha2UocHJpdiwgbmZpbHQsIDAsICZmcy0+aF9leHQuaF9kZXN0LAorCQkJ CQkgJmZzLT5tX2V4dC5oX2Rlc3QsCisJCQkJCSBzaXplb2YoZnMtPmhfZXh0LmhfZGVzdCkpOwor CX0KKworCWlmICgoZnMtPmZsb3dfdHlwZSAmIEZMT1dfRVhUKSAmJgorCSAgICAoZnMtPm1fZXh0 LnZsYW5fZXR5cGUgfHwgZnMtPm1fZXh0LnZsYW5fdGNpKSkgeworCQliY21hc3BfbmV0ZmlsdF93 cl9tX3dha2UocHJpdiwgbmZpbHQsIChFVEhfQUxFTiAqIDIpLAorCQkJCQkgJmZzLT5oX2V4dC52 bGFuX2V0eXBlLAorCQkJCQkgJmZzLT5tX2V4dC52bGFuX2V0eXBlLAorCQkJCQkgc2l6ZW9mKGZz LT5oX2V4dC52bGFuX2V0eXBlKSk7CisJCWJjbWFzcF9uZXRmaWx0X3dyX21fd2FrZShwcml2LCBu ZmlsdCwgKChFVEhfQUxFTiAqIDIpICsgMiksCisJCQkJCSAmZnMtPmhfZXh0LnZsYW5fdGNpLAor CQkJCQkgJmZzLT5tX2V4dC52bGFuX3RjaSwKKwkJCQkJIHNpemVvZihmcy0+aF9leHQudmxhbl90 Y2kpKTsKKwkJb2Zmc2V0ICs9M0QgVkxBTl9ITEVOOworCX0KKworCXN3aXRjaCAoZnMtPmZsb3df dHlwZSAmIH4oRkxPV19FWFQgfCBGTE9XX01BQ19FWFQpKSB7CisJY2FzZSBFVEhFUl9GTE9XOgor CQliY21hc3BfbmV0ZmlsdF93cl9tX3dha2UocHJpdiwgbmZpbHQsIDAsCisJCQkJCSAmZnMtPmhf dS5ldGhlcl9zcGVjLmhfZGVzdCwKKwkJCQkJICZmcy0+bV91LmV0aGVyX3NwZWMuaF9kZXN0LAor CQkJCQkgc2l6ZW9mKGZzLT5oX3UuZXRoZXJfc3BlYy5oX2Rlc3QpKTsKKwkJYmNtYXNwX25ldGZp bHRfd3JfbV93YWtlKHByaXYsIG5maWx0LCBFVEhfQUxFTiwKKwkJCQkJICZmcy0+aF91LmV0aGVy X3NwZWMuaF9zb3VyY2UsCisJCQkJCSAmZnMtPm1fdS5ldGhlcl9zcGVjLmhfc291cmNlLAorCQkJ CQkgc2l6ZW9mKGZzLT5oX3UuZXRoZXJfc3BlYy5oX3NvdXJjZSkpOworCQliY21hc3BfbmV0Zmls dF93cl9tX3dha2UocHJpdiwgbmZpbHQsIChFVEhfQUxFTiAqIDIpICsgb2Zmc2V0LAorCQkJCQkg JmZzLT5oX3UuZXRoZXJfc3BlYy5oX3Byb3RvLAorCQkJCQkgJmZzLT5tX3UuZXRoZXJfc3BlYy5o X3Byb3RvLAorCQkJCQkgc2l6ZW9mKGZzLT5oX3UuZXRoZXJfc3BlYy5oX3Byb3RvKSk7CisKKwkJ YnJlYWs7CisJY2FzZSBJUF9VU0VSX0ZMT1c6CisJCXZhbF8xNiA9M0QgaHRvbnMoRVRIX1BfSVAp OworCQltYXNrXzE2ID0zRCBodG9ucygweEZGRkYpOworCQliY21hc3BfbmV0ZmlsdF93cl9tX3dh a2UocHJpdiwgbmZpbHQsIChFVEhfQUxFTiAqIDIpICsgb2Zmc2V0LAorCQkJCQkgJnZhbF8xNiwg Jm1hc2tfMTYsIHNpemVvZih2YWxfMTYpKTsKKwkJYmNtYXNwX25ldGZpbHRfd3JfbV93YWtlKHBy aXYsIG5maWx0LCBFVEhfSExFTiArIG9mZnNldCArIDEsCisJCQkJCSAmZnMtPmhfdS51c3JfaXA0 X3NwZWMudG9zLAorCQkJCQkgJmZzLT5tX3UudXNyX2lwNF9zcGVjLnRvcywKKwkJCQkJIHNpemVv Zihmcy0+aF91LnVzcl9pcDRfc3BlYy50b3MpKTsKKwkJYmNtYXNwX25ldGZpbHRfd3JfbV93YWtl KHByaXYsIG5maWx0LCBFVEhfSExFTiArIG9mZnNldCArIDksCisJCQkJCSAmZnMtPmhfdS51c3Jf aXA0X3NwZWMucHJvdG8sCisJCQkJCSAmZnMtPm1fdS51c3JfaXA0X3NwZWMucHJvdG8sCisJCQkJ CSBzaXplb2YoZnMtPmhfdS51c3JfaXA0X3NwZWMucHJvdG8pKTsKKwkJYmNtYXNwX25ldGZpbHRf d3JfbV93YWtlKHByaXYsIG5maWx0LCBFVEhfSExFTiArIG9mZnNldCArIDEyLAorCQkJCQkgJmZz LT5oX3UudXNyX2lwNF9zcGVjLmlwNHNyYywKKwkJCQkJICZmcy0+bV91LnVzcl9pcDRfc3BlYy5p cDRzcmMsCisJCQkJCSBzaXplb2YoZnMtPmhfdS51c3JfaXA0X3NwZWMuaXA0c3JjKSk7CisJCWJj bWFzcF9uZXRmaWx0X3dyX21fd2FrZShwcml2LCBuZmlsdCwgRVRIX0hMRU4gKyBvZmZzZXQgKyAx NiwKKwkJCQkJICZmcy0+aF91LnVzcl9pcDRfc3BlYy5pcDRkc3QsCisJCQkJCSAmZnMtPm1fdS51 c3JfaXA0X3NwZWMuaXA0ZHN0LAorCQkJCQkgc2l6ZW9mKGZzLT5oX3UudXNyX2lwNF9zcGVjLmlw NGRzdCkpOworCQlpZiAoIWZzLT5tX3UudXNyX2lwNF9zcGVjLmw0XzRfYnl0ZXMpCisJCQlicmVh azsKKworCQkvKiBPbmx5IHN1cHBvcnRzIDIwIGJ5dGUgSVB2NCBoZWFkZXIgKi8KKwkJdmFsXzgg PTNEIDB4NDU7CisJCW1hc2tfOCA9M0QgMHhGRjsKKwkJYmNtYXNwX25ldGZpbHRfd3JfbV93YWtl KHByaXYsIG5maWx0LCBFVEhfSExFTiArIG9mZnNldCwKKwkJCQkJICZ2YWxfOCwgJm1hc2tfOCwg c2l6ZW9mKHZhbF84KSk7CisJCWJjbWFzcF9uZXRmaWx0X3dyX21fd2FrZShwcml2LCBuZmlsdCwK KwkJCQkJIEVUSF9ITEVOICsgMjAgKyBvZmZzZXQsCisJCQkJCSAmZnMtPmhfdS51c3JfaXA0X3Nw ZWMubDRfNF9ieXRlcywKKwkJCQkJICZmcy0+bV91LnVzcl9pcDRfc3BlYy5sNF80X2J5dGVzLAor CQkJCQkgc2l6ZW9mKGZzLT5oX3UudXNyX2lwNF9zcGVjLmw0XzRfYnl0ZXMpCisJCQkJCSApOwor CQlicmVhazsKKwljYXNlIFRDUF9WNF9GTE9XOgorCQl2YWxfOCA9M0QgSVBQUk9UT19UQ1A7CisJ CW1hc2tfOCA9M0QgMHhGRjsKKwkJYmNtYXNwX25ldGZpbHRfdGNwaXA0X3dyKHByaXYsIG5maWx0 LCAmZnMtPmhfdS50Y3BfaXA0X3NwZWMsCisJCQkJCSAmZnMtPm1fdS50Y3BfaXA0X3NwZWMsIG9m ZnNldCk7CisJCWJjbWFzcF9uZXRmaWx0X3dyX21fd2FrZShwcml2LCBuZmlsdCwgRVRIX0hMRU4g KyBvZmZzZXQgKyA5LAorCQkJCQkgJnZhbF84LCAmbWFza184LCBzaXplb2YodmFsXzgpKTsKKwkJ YnJlYWs7CisJY2FzZSBVRFBfVjRfRkxPVzoKKwkJdmFsXzggPTNEIElQUFJPVE9fVURQOworCQlt YXNrXzggPTNEIDB4RkY7CisJCWJjbWFzcF9uZXRmaWx0X3RjcGlwNF93cihwcml2LCBuZmlsdCwg JmZzLT5oX3UudWRwX2lwNF9zcGVjLAorCQkJCQkgJmZzLT5tX3UudWRwX2lwNF9zcGVjLCBvZmZz ZXQpOworCisJCWJjbWFzcF9uZXRmaWx0X3dyX21fd2FrZShwcml2LCBuZmlsdCwgRVRIX0hMRU4g KyBvZmZzZXQgKyA5LAorCQkJCQkgJnZhbF84LCAmbWFza184LCBzaXplb2YodmFsXzgpKTsKKwkJ YnJlYWs7CisJY2FzZSBUQ1BfVjZfRkxPVzoKKwkJdmFsXzggPTNEIElQUFJPVE9fVENQOworCQlt YXNrXzggPTNEIDB4RkY7CisJCWJjbWFzcF9uZXRmaWx0X3RjcGlwNl93cihwcml2LCBuZmlsdCwg JmZzLT5oX3UudGNwX2lwNl9zcGVjLAorCQkJCQkgJmZzLT5tX3UudGNwX2lwNl9zcGVjLCBvZmZz ZXQpOworCQliY21hc3BfbmV0ZmlsdF93cl9tX3dha2UocHJpdiwgbmZpbHQsIEVUSF9ITEVOICsg b2Zmc2V0ICsgNiwKKwkJCQkJICZ2YWxfOCwgJm1hc2tfOCwgc2l6ZW9mKHZhbF84KSk7CisJCWJy ZWFrOworCWNhc2UgVURQX1Y2X0ZMT1c6CisJCXZhbF84ID0zRCBJUFBST1RPX1VEUDsKKwkJbWFz a184ID0zRCAweEZGOworCQliY21hc3BfbmV0ZmlsdF90Y3BpcDZfd3IocHJpdiwgbmZpbHQsICZm cy0+aF91LnVkcF9pcDZfc3BlYywKKwkJCQkJICZmcy0+bV91LnVkcF9pcDZfc3BlYywgb2Zmc2V0 KTsKKwkJYmNtYXNwX25ldGZpbHRfd3JfbV93YWtlKHByaXYsIG5maWx0LCBFVEhfSExFTiArIG9m ZnNldCArIDYsCisJCQkJCSAmdmFsXzgsICZtYXNrXzgsIHNpemVvZih2YWxfOCkpOworCQlicmVh azsKKwl9CisKKwliY21hc3BfbmV0ZmlsdF9od19lbl93YWtlKHByaXYsIG5maWx0KTsKKworCXJl dHVybiAwOworfQorCit2b2lkIGJjbWFzcF9uZXRmaWx0X3N1c3BlbmQoc3RydWN0IGJjbWFzcF9p bnRmICppbnRmKQoreworCXN0cnVjdCBiY21hc3BfcHJpdiAqcHJpdiA9M0QgaW50Zi0+cGFyZW50 OworCWJvb2wgd3JpdGUgPTNEIGZhbHNlOworCWludCByZXQsIGk7CisKKwkvKiBXcml0ZSBhbGwg ZmlsdGVycyB0byBIVyAqLworCWZvciAoaSA9M0QgMDsgaSA8IE5VTV9ORVRfRklMVEVSUzsgaSsr KSB7CisJCS8qIElmIHRoZSBmaWx0ZXIgZG9lcyBub3QgbWF0Y2ggdGhlIHBvcnQsIHNraXAgcHJv Z3JhbW1pbmcuICovCisJCWlmICghcHJpdi0+bmV0X2ZpbHRlcnNbaV0uY2xhaW1lZCB8fAorCQkg ICAgcHJpdi0+bmV0X2ZpbHRlcnNbaV0ucG9ydCAhPTNEIGludGYtPnBvcnQpCisJCQljb250aW51 ZTsKKworCQlpZiAoaSA+IDAgJiYgKGkgJSAyKSAmJgorCQkgICAgcHJpdi0+bmV0X2ZpbHRlcnNb aV0ud2FrZV9maWx0ZXIgJiYKKwkJICAgIHByaXYtPm5ldF9maWx0ZXJzW2kgLSAxXS53YWtlX2Zp bHRlcikKKwkJCWNvbnRpbnVlOworCisJCXJldCA9M0QgYmNtYXNwX25ldGZpbHRfd3JfdG9faHco cHJpdiwgJnByaXYtPm5ldF9maWx0ZXJzW2ldKTsKKwkJaWYgKCFyZXQpCisJCQl3cml0ZSA9M0Qg dHJ1ZTsKKwl9CisKKwkvKiBTdWNjZXNzZnVsbHkgcHJvZ3JhbW1lZCBhdCBsZWFzdCBvbmUgd2Fr ZSBmaWx0ZXIKKwkgKiBzbyBlbmFibGUgdG9wIGxldmVsIHdha2UgY29uZmlnCisJICovCisJaWYg KHdyaXRlKQorCQlyeF9maWx0ZXJfY29yZV93bChwcml2LCAoQVNQX1JYX0ZJTFRFUl9PUFVUX0VO IHwKKwkJCQkgIEFTUF9SWF9GSUxURVJfTE5SX01EIHwKKwkJCQkgIEFTUF9SWF9GSUxURVJfR0VO X1dLX0VOIHwKKwkJCQkgIEFTUF9SWF9GSUxURVJfTlRfRkxUX0VOKSwKKwkJCQkgIEFTUF9SWF9G SUxURVJfQkxLX0NUUkwpOworfQorCit2b2lkIGJjbWFzcF9uZXRmaWx0X2dldF9hbGxfYWN0aXZl KHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZiwgdTMyICpydWxlX2xvYz0KcywKKwkJCQkgICB1MzIg KnJ1bGVfY250KQoreworCXN0cnVjdCBiY21hc3BfcHJpdiAqcHJpdiA9M0QgaW50Zi0+cGFyZW50 OworCWludCBqID0zRCAwLCBpOworCisJZm9yIChpID0zRCAwOyBpIDwgTlVNX05FVF9GSUxURVJT OyBpKyspIHsKKwkJaWYgKCFwcml2LT5uZXRfZmlsdGVyc1tpXS5jbGFpbWVkIHx8CisJCSAgICBw cml2LT5uZXRfZmlsdGVyc1tpXS5wb3J0ICE9M0QgaW50Zi0+cG9ydCkKKwkJCWNvbnRpbnVlOwor CisJCWlmIChpID4gMCAmJiAoaSAlIDIpICYmCisJCSAgICBwcml2LT5uZXRfZmlsdGVyc1tpXS53 YWtlX2ZpbHRlciAmJgorCQkgICAgcHJpdi0+bmV0X2ZpbHRlcnNbaSAtIDFdLndha2VfZmlsdGVy KQorCQkJY29udGludWU7CisKKwkJcnVsZV9sb2NzW2orK10gPTNEIHByaXYtPm5ldF9maWx0ZXJz W2ldLmZzLmxvY2F0aW9uOworCX0KKworCSpydWxlX2NudCA9M0QgajsKK30KKworaW50IGJjbWFz cF9uZXRmaWx0X2dldF9hY3RpdmUoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmKQoreworCXN0cnVj dCBiY21hc3BfcHJpdiAqcHJpdiA9M0QgaW50Zi0+cGFyZW50OworCWludCBjbnQgPTNEIDAsIGk7 CisKKwlmb3IgKGkgPTNEIDA7IGkgPCBOVU1fTkVUX0ZJTFRFUlM7IGkrKykgeworCQlpZiAoIXBy aXYtPm5ldF9maWx0ZXJzW2ldLmNsYWltZWQgfHwKKwkJICAgIHByaXYtPm5ldF9maWx0ZXJzW2ld LnBvcnQgIT0zRCBpbnRmLT5wb3J0KQorCQkJY29udGludWU7CisKKwkJLyogU2tpcCBvdmVyIGEg d2FrZSBmaWx0ZXIgcGFpciAqLworCQlpZiAoaSA+IDAgJiYgKGkgJSAyKSAmJgorCQkgICAgcHJp di0+bmV0X2ZpbHRlcnNbaV0ud2FrZV9maWx0ZXIgJiYKKwkJICAgIHByaXYtPm5ldF9maWx0ZXJz W2kgLSAxXS53YWtlX2ZpbHRlcikKKwkJCWNvbnRpbnVlOworCisJCWNudCsrOworCX0KKworCXJl dHVybiBjbnQ7Cit9CisKK2ludCBiY21hc3BfbmV0ZmlsdF9jaGVja19kdXAoc3RydWN0IGJjbWFz cF9pbnRmICppbnRmLAorCQkJICAgICBzdHJ1Y3QgZXRodG9vbF9yeF9mbG93X3NwZWMgKmZzKQor eworCXN0cnVjdCBiY21hc3BfcHJpdiAqcHJpdiA9M0QgaW50Zi0+cGFyZW50OworCXN0cnVjdCBl dGh0b29sX3J4X2Zsb3dfc3BlYyAqY3VyOworCXNpemVfdCBmc19zaXplID0zRCAwOworCWludCBp OworCisJZm9yIChpID0zRCAwOyBpIDwgTlVNX05FVF9GSUxURVJTOyBpKyspIHsKKwkJaWYgKCFw cml2LT5uZXRfZmlsdGVyc1tpXS5jbGFpbWVkIHx8CisJCSAgICBwcml2LT5uZXRfZmlsdGVyc1tp XS5wb3J0ICE9M0QgaW50Zi0+cG9ydCkKKwkJCWNvbnRpbnVlOworCisJCWN1ciA9M0QgJnByaXYt Pm5ldF9maWx0ZXJzW2ldLmZzOworCisJCWlmIChjdXItPmZsb3dfdHlwZSAhPTNEIGZzLT5mbG93 X3R5cGUgfHwKKwkJICAgIGN1ci0+cmluZ19jb29raWUgIT0zRCBmcy0+cmluZ19jb29raWUpCisJ CQljb250aW51ZTsKKworCQlzd2l0Y2ggKGZzLT5mbG93X3R5cGUgJiB+KEZMT1dfRVhUIHwgRkxP V19NQUNfRVhUKSkgeworCQljYXNlIEVUSEVSX0ZMT1c6CisJCQlmc19zaXplID0zRCBzaXplb2Yo c3RydWN0IGV0aGhkcik7CisJCQlicmVhazsKKwkJY2FzZSBJUF9VU0VSX0ZMT1c6CisJCQlmc19z aXplID0zRCBzaXplb2Yoc3RydWN0IGV0aHRvb2xfdXNyaXA0X3NwZWMpOworCQkJYnJlYWs7CisJ CWNhc2UgVENQX1Y2X0ZMT1c6CisJCWNhc2UgVURQX1Y2X0ZMT1c6CisJCQlmc19zaXplID0zRCBz aXplb2Yoc3RydWN0IGV0aHRvb2xfdGNwaXA2X3NwZWMpOworCQkJYnJlYWs7CisJCWNhc2UgVENQ X1Y0X0ZMT1c6CisJCWNhc2UgVURQX1Y0X0ZMT1c6CisJCQlmc19zaXplID0zRCBzaXplb2Yoc3Ry dWN0IGV0aHRvb2xfdGNwaXA0X3NwZWMpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQljb250 aW51ZTsKKwkJfQorCisJCWlmIChtZW1jbXAoJmN1ci0+aF91LCAmZnMtPmhfdSwgZnNfc2l6ZSkg fHwKKwkJICAgIG1lbWNtcCgmY3VyLT5tX3UsICZmcy0+bV91LCBmc19zaXplKSkKKwkJCWNvbnRp bnVlOworCisJCWlmIChjdXItPmZsb3dfdHlwZSAmIEZMT1dfRVhUKSB7CisJCQlpZiAoY3VyLT5o X2V4dC52bGFuX2V0eXBlICE9M0QgZnMtPmhfZXh0LnZsYW5fZXR5cGUgfHwKKwkJCSAgICBjdXIt Pm1fZXh0LnZsYW5fZXR5cGUgIT0zRCBmcy0+bV9leHQudmxhbl9ldHlwZSB8fAorCQkJICAgIGN1 ci0+aF9leHQudmxhbl90Y2kgIT0zRCBmcy0+aF9leHQudmxhbl90Y2kgfHwKKwkJCSAgICBjdXIt Pm1fZXh0LnZsYW5fdGNpICE9M0QgZnMtPm1fZXh0LnZsYW5fdGNpIHx8CisJCQkgICAgY3VyLT5o X2V4dC5kYXRhWzBdICE9M0QgZnMtPmhfZXh0LmRhdGFbMF0pCisJCQkJY29udGludWU7CisJCX0K KwkJaWYgKGN1ci0+Zmxvd190eXBlICYgRkxPV19NQUNfRVhUKSB7CisJCQlpZiAobWVtY21wKCZj dXItPmhfZXh0LmhfZGVzdCwKKwkJCQkgICAmZnMtPmhfZXh0LmhfZGVzdCwgRVRIX0FMRU4pIHx8 CisJCQkgICAgbWVtY21wKCZjdXItPm1fZXh0LmhfZGVzdCwKKwkJCQkgICAmZnMtPm1fZXh0Lmhf ZGVzdCwgRVRIX0FMRU4pKQorCQkJCWNvbnRpbnVlOworCQl9CisKKwkJcmV0dXJuIDE7CisJfQor CisJcmV0dXJuIDA7Cit9CisKKy8qIElmIG5vIG5ldHdvcmsgZmlsdGVyIGZvdW5kLCByZXR1cm4g b3BlbiBmaWx0ZXIuCisgKiBJZiBubyBtb3JlIG9wZW4gZmlsdGVycyByZXR1cm4gTlVMTAorICov CitzdHJ1Y3QgYmNtYXNwX25ldF9maWx0ZXIgKmJjbWFzcF9uZXRmaWx0X2dldF9pbml0KHN0cnVj dCBiY21hc3BfaW50ZiAqaW50ZiwKKwkJCQkJCSAgaW50IGxvYywgYm9vbCB3YWtlX2ZpbHRlciwK KwkJCQkJCSAgYm9vbCBpbml0KQoreworCXN0cnVjdCBiY21hc3BfbmV0X2ZpbHRlciAqbmZpbHRl ciA9M0QgTlVMTDsKKwlzdHJ1Y3QgYmNtYXNwX3ByaXYgKnByaXYgPTNEIGludGYtPnBhcmVudDsK KwlpbnQgaSwgb3Blbl9pbmRleCA9M0QgLTE7CisKKwkvKiBDaGVjayB3aGV0aGVyIHdlIGV4Y2Vl ZCB0aGUgZmlsdGVyIHRhYmxlIGNhcGFjaXR5ICovCisJaWYgKGxvYyAhPTNEIFJYX0NMU19MT0Nf QU5ZICYmIGxvYyA+PTNEIE5VTV9ORVRfRklMVEVSUykKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZB TCk7CisKKwkvKiBJZiB0aGUgZmlsdGVyIGxvY2F0aW9uIGlzIGJ1c3kgKGFscmVhZHkgY2xhaW1l ZCkgYW5kIHdlIGFyZSBpbml0aWFsaXppPQpuZworCSAqIHRoZSBmaWx0ZXIgKGluc2VydGlvbiks IHJldHVybiBhIGJ1c3kgZXJyb3IgY29kZS4KKwkgKi8KKwlpZiAobG9jICE9M0QgUlhfQ0xTX0xP Q19BTlkgJiYgaW5pdCAmJiBwcml2LT5uZXRfZmlsdGVyc1tsb2NdLmNsYWltZWQpCisJCXJldHVy biBFUlJfUFRSKC1FQlVTWSk7CisKKwkvKiBXZSBuZWVkIHR3byBmaWx0ZXJzIGZvciB3YWtlLXVw LCBzbyB3ZSBjYW5ub3QgdXNlIGFuIG9kZCBmaWx0ZXIgKi8KKwlpZiAod2FrZV9maWx0ZXIgJiYg bG9jICE9M0QgUlhfQ0xTX0xPQ19BTlkgJiYgKGxvYyAlIDIpKQorCQlyZXR1cm4gRVJSX1BUUigt RUlOVkFMKTsKKworCS8qIEluaXRpYWxpemUgdGhlIGxvb3AgaW5kZXggYmFzZWQgb24gdGhlIGRl c2lyZWQgbG9jYXRpb24gb3IgZnJvbSAwICovCisJaSA9M0QgbG9jID0zRD0zRCBSWF9DTFNfTE9D X0FOWSA/IDAgOiBsb2M7CisKKwlmb3IgKCA7IGkgPCBOVU1fTkVUX0ZJTFRFUlM7IGkrKykgewor CQkvKiBGb3VuZCBtYXRjaGluZyBuZXR3b3JrIGZpbHRlciAqLworCQlpZiAoIWluaXQgJiYKKwkJ ICAgIHByaXYtPm5ldF9maWx0ZXJzW2ldLmNsYWltZWQgJiYKKwkJICAgIHByaXYtPm5ldF9maWx0 ZXJzW2ldLmh3X2luZGV4ID0zRD0zRCBpICYmCisJCSAgICBwcml2LT5uZXRfZmlsdGVyc1tpXS5w b3J0ID0zRD0zRCBpbnRmLT5wb3J0KQorCQkJcmV0dXJuICZwcml2LT5uZXRfZmlsdGVyc1tpXTsK KworCQkvKiBJZiB3ZSBkb24ndCBuZWVkIGEgbmV3IGZpbHRlciBvciBuZXcgZmlsdGVyIGFscmVh ZHkgZm91bmQgKi8KKwkJaWYgKCFpbml0IHx8IG9wZW5faW5kZXggPj0zRCAwKQorCQkJY29udGlu dWU7CisKKwkJLyogV2FrZSBmaWx0ZXIgY29uc2xpZGF0ZXMgdHdvIGZpbHRlcnMgdG8gY292ZXIg bW9yZSBieXRlcworCQkgKiBXYWtlIGZpbHRlciBpcyBvcGVuIGlmLi4uCisJCSAqIDEuIEl0IGlz IGFuIGV2ZW4gZmlsdGVyCisJCSAqIDIuIFRoZSBjdXJyZW50IGFuZCBuZXh0IGZpbHRlciBpcyBu b3QgY2xhaW1lZAorCQkgKi8KKwkJaWYgKHdha2VfZmlsdGVyICYmICEoaSAlIDIpICYmICFwcml2 LT5uZXRfZmlsdGVyc1tpXS5jbGFpbWVkICYmCisJCSAgICAhcHJpdi0+bmV0X2ZpbHRlcnNbaSAr IDFdLmNsYWltZWQpCisJCQlvcGVuX2luZGV4ID0zRCBpOworCQllbHNlIGlmICghcHJpdi0+bmV0 X2ZpbHRlcnNbaV0uY2xhaW1lZCkKKwkJCW9wZW5faW5kZXggPTNEIGk7CisJfQorCisJaWYgKG9w ZW5faW5kZXggPj0zRCAwKSB7CisJCW5maWx0ZXIgPTNEICZwcml2LT5uZXRfZmlsdGVyc1tvcGVu X2luZGV4XTsKKwkJbmZpbHRlci0+Y2xhaW1lZCA9M0QgdHJ1ZTsKKwkJbmZpbHRlci0+cG9ydCA9 M0QgaW50Zi0+cG9ydDsKKwkJbmZpbHRlci0+aHdfaW5kZXggPTNEIG9wZW5faW5kZXg7CisJfQor CisJaWYgKHdha2VfZmlsdGVyICYmIG9wZW5faW5kZXggPj0zRCAwKSB7CisJCS8qIENsYWltIG5l eHQgZmlsdGVyICovCisJCXByaXYtPm5ldF9maWx0ZXJzW29wZW5faW5kZXggKyAxXS5jbGFpbWVk ID0zRCB0cnVlOworCQlwcml2LT5uZXRfZmlsdGVyc1tvcGVuX2luZGV4ICsgMV0ud2FrZV9maWx0 ZXIgPTNEIHRydWU7CisJCW5maWx0ZXItPndha2VfZmlsdGVyID0zRCB0cnVlOworCX0KKworCXJl dHVybiBuZmlsdGVyID8gbmZpbHRlciA6IEVSUl9QVFIoLUVJTlZBTCk7Cit9CisKK3ZvaWQgYmNt YXNwX25ldGZpbHRfcmVsZWFzZShzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsCisJCQkgICAgc3Ry dWN0IGJjbWFzcF9uZXRfZmlsdGVyICpuZmlsdCkKK3sKKwlzdHJ1Y3QgYmNtYXNwX3ByaXYgKnBy aXYgPTNEIGludGYtPnBhcmVudDsKKworCWlmIChuZmlsdC0+d2FrZV9maWx0ZXIpIHsKKwkJbWVt c2V0KCZwcml2LT5uZXRfZmlsdGVyc1tuZmlsdC0+aHdfaW5kZXggKyAxXSwgMCwKKwkJICAgICAg IHNpemVvZihzdHJ1Y3QgYmNtYXNwX25ldF9maWx0ZXIpKTsKKwl9CisKKwltZW1zZXQobmZpbHQs IDAsIHNpemVvZihzdHJ1Y3QgYmNtYXNwX25ldF9maWx0ZXIpKTsKK30KKworc3RhdGljIGlubGlu ZSB2b2lkIGJjbWFzcF9hZGRyX3RvX3VpbnQodW5zaWduZWQgY2hhciAqYWRkciwgdTMyICpoaWdo LCB1MzI9CiAqbG93KQoreworCSpoaWdoID0zRCAodTMyKShhZGRyWzBdIDw8IDggfCBhZGRyWzFd KTsKKwkqbG93ID0zRCAodTMyKShhZGRyWzJdIDw8IDI0IHwgYWRkclszXSA8PCAxNiB8IGFkZHJb NF0gPDwgOCB8CisJCSAgICAgYWRkcls1XSk7Cit9CisKK3N0YXRpYyB2b2lkIGJjbWFzcF9zZXRf bWRhX2ZpbHRlcihzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsCisJCQkJICBjb25zdCB1bnNpZ25l ZCBjaGFyICphZGRyLAorCQkJCSAgdW5zaWduZWQgY2hhciAqbWFzaywKKwkJCQkgIHVuc2lnbmVk IGludCBpKQoreworCXN0cnVjdCBiY21hc3BfcHJpdiAqcHJpdiA9M0QgaW50Zi0+cGFyZW50Owor CXUzMiBhZGRyX2gsIGFkZHJfbCwgbWFza19oLCBtYXNrX2w7CisKKwkvKiBTZXQgbG9jYWwgY29w eSAqLworCWV0aGVyX2FkZHJfY29weShwcml2LT5tZGFfZmlsdGVyc1tpXS5tYXNrLCBtYXNrKTsK KwlldGhlcl9hZGRyX2NvcHkocHJpdi0+bWRhX2ZpbHRlcnNbaV0uYWRkciwgYWRkcik7CisKKwkv KiBXcml0ZSB0byBIVyAqLworCWJjbWFzcF9hZGRyX3RvX3VpbnQocHJpdi0+bWRhX2ZpbHRlcnNb aV0ubWFzaywgJm1hc2tfaCwgJm1hc2tfbCk7CisJYmNtYXNwX2FkZHJfdG9fdWludChwcml2LT5t ZGFfZmlsdGVyc1tpXS5hZGRyLCAmYWRkcl9oLCAmYWRkcl9sKTsKKwlyeF9maWx0ZXJfY29yZV93 bChwcml2LCBhZGRyX2gsIEFTUF9SWF9GSUxURVJfTURBX1BBVF9IKGkpKTsKKwlyeF9maWx0ZXJf Y29yZV93bChwcml2LCBhZGRyX2wsIEFTUF9SWF9GSUxURVJfTURBX1BBVF9MKGkpKTsKKwlyeF9m aWx0ZXJfY29yZV93bChwcml2LCBtYXNrX2gsIEFTUF9SWF9GSUxURVJfTURBX01TS19IKGkpKTsK KwlyeF9maWx0ZXJfY29yZV93bChwcml2LCBtYXNrX2wsIEFTUF9SWF9GSUxURVJfTURBX01TS19M KGkpKTsKK30KKworc3RhdGljIHZvaWQgYmNtYXNwX2VuX21kYV9maWx0ZXIoc3RydWN0IGJjbWFz cF9pbnRmICppbnRmLCBib29sIGVuLAorCQkJCSB1bnNpZ25lZCBpbnQgaSkKK3sKKwlzdHJ1Y3Qg YmNtYXNwX3ByaXYgKnByaXYgPTNEIGludGYtPnBhcmVudDsKKworCWlmIChwcml2LT5tZGFfZmls dGVyc1tpXS5lbiA9M0Q9M0QgZW4pCisJCXJldHVybjsKKworCXByaXYtPm1kYV9maWx0ZXJzW2ld LmVuID0zRCBlbjsKKwlwcml2LT5tZGFfZmlsdGVyc1tpXS5wb3J0ID0zRCBpbnRmLT5wb3J0Owor CisJcnhfZmlsdGVyX2NvcmVfd2wocHJpdiwgKChpbnRmLT5jaGFubmVsICsgOCkgfAorCQkJICAo ZW4gPDwgQVNQX1JYX0ZJTFRFUl9NREFfQ0ZHX0VOX1NISUZUKSB8CisJCQkgIEFTUF9SWF9GSUxU RVJfTURBX0NGR19VTUNfU0VMKGludGYtPnBvcnQpKSwKKwkJCSAgQVNQX1JYX0ZJTFRFUl9NREFf Q0ZHKGkpKTsKK30KKworLyogVGhlcmUgYXJlIDMyIE1EQSBmaWx0ZXJzIHNoYXJlZCBiZXR3ZWVu IGFsbCBwb3J0cywgd2UgcmVzZXJ2ZSA0IGZpbHRlcnM9CiBwZXIKKyAqIHBvcnQgZm9yIHRoZSBm b2xsb3dpbmcuCisgKiAtIFByb21pc2M6IEZpbHRlciB0byBhbGxvdyBhbGwgcGFja2V0cyB3aGVu IHByb21pc2MgaXMgZW5hYmxlZAorICogLSBBbGwgTXVsdGljYXN0CisgKiAtIEJyb2FkY2FzdAor ICogLSBPd24gYWRkcmVzcworICoKKyAqIFRoZSByZXNlcnZlZCBmaWx0ZXJzIGFyZSBpZGVudGlm aWVkIGFzIHNvLgorICogLSBQcm9taXNjOiAoUG9ydCAqIDQpICsgMAorICogLSBBbGwgTXVsdGlj YXN0OiAoUG9ydCAqIDQpICsgMQorICogLSBCcm9hZGNhc3Q6IChQb3J0ICogNCkgKyAyCisgKiAt IE93biBhZGRyZXNzOiAoUG9ydCAqIDQpICsgMworICovCitlbnVtIGFzcF9yeF9maWx0ZXJfaWQg eworCUFTUF9SWF9GSUxURVJfTURBX1BST01JU0MgPTNEIDAsCisJQVNQX1JYX0ZJTFRFUl9NREFf QUxMTVVMVEksCisJQVNQX1JYX0ZJTFRFUl9NREFfQlJPQURDQVNULAorCUFTUF9SWF9GSUxURVJf TURBX09XTl9BRERSLAorCUFTUF9SWF9GSUxURVJfTURBX1JFU19DT1VOVCwKK307CisKKyNkZWZp bmUgQVNQX1JYX0ZJTFRfTURBX1JFU19DT1VOVChpbnRmKQkoKGludGYpLT5wYXJlbnQtPmludGZf Y291bnQgXAorCQkJCQkgKiBBU1BfUlhfRklMVEVSX01EQV9SRVNfQ09VTlQpCisKKyNkZWZpbmUg QVNQX1JYX0ZJTFRfTURBKGludGYsIG5hbWUpCSgoKGludGYpLT5wb3J0ICogXAorCQkJCQkgIEFT UF9SWF9GSUxURVJfTURBX1JFU19DT1VOVCkgXAorCQkJCQkgKyBBU1BfUlhfRklMVEVSX01EQV8j I25hbWUpCisKK3ZvaWQgYmNtYXNwX3NldF9wcm9taXNjKHN0cnVjdCBiY21hc3BfaW50ZiAqaW50 ZiwgYm9vbCBlbikKK3sKKwl1bnNpZ25lZCBpbnQgaSA9M0QgQVNQX1JYX0ZJTFRfTURBKGludGYs IFBST01JU0MpOworCXVuc2lnbmVkIGNoYXIgcHJvbWlzY1tFVEhfQUxFTl07CisKKwlldGhfemVy b19hZGRyKHByb21pc2MpOworCS8qIFNldCBtYXNrIHRvIDAwOjAwOjAwOjAwOjAwOjAwIHRvIG1h dGNoIGFsbCBwYWNrZXRzICovCisJYmNtYXNwX3NldF9tZGFfZmlsdGVyKGludGYsIHByb21pc2Ms IHByb21pc2MsIGkpOworCWJjbWFzcF9lbl9tZGFfZmlsdGVyKGludGYsIGVuLCBpKTsKK30KKwor dm9pZCBiY21hc3Bfc2V0X2FsbG11bHRpKHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZiwgYm9vbCBl bikKK3sKKwl1bnNpZ25lZCBjaGFyIGFsbG11bHRpW10gPTNEIHsweDAxLCAweDAwLCAweDAwLCAw eDAwLCAweDAwLCAweDAwfTsKKwl1bnNpZ25lZCBpbnQgaSA9M0QgQVNQX1JYX0ZJTFRfTURBKGlu dGYsIEFMTE1VTFRJKTsKKworCS8qIFNldCBtYXNrIHRvIDAxOjAwOjAwOjAwOjAwOjAwIHRvIG1h dGNoIGFsbCBtdWx0aWNhc3QgKi8KKwliY21hc3Bfc2V0X21kYV9maWx0ZXIoaW50ZiwgYWxsbXVs dGksIGFsbG11bHRpLCBpKTsKKwliY21hc3BfZW5fbWRhX2ZpbHRlcihpbnRmLCBlbiwgaSk7Cit9 CisKK3ZvaWQgYmNtYXNwX3NldF9icm9hZChzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsIGJvb2wg ZW4pCit7CisJdW5zaWduZWQgaW50IGkgPTNEIEFTUF9SWF9GSUxUX01EQShpbnRmLCBCUk9BRENB U1QpOworCXVuc2lnbmVkIGNoYXIgYWRkcltFVEhfQUxFTl07CisKKwlldGhfYnJvYWRjYXN0X2Fk ZHIoYWRkcik7CisJYmNtYXNwX3NldF9tZGFfZmlsdGVyKGludGYsIGFkZHIsIGFkZHIsIGkpOwor CWJjbWFzcF9lbl9tZGFfZmlsdGVyKGludGYsIGVuLCBpKTsKK30KKwordm9pZCBiY21hc3Bfc2V0 X29hZGRyKHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZiwgY29uc3QgdW5zaWduZWQgY2hhciAqYWRk ciwKKwkJICAgICAgYm9vbCBlbikKK3sKKwl1bnNpZ25lZCBjaGFyIG1hc2tbXSA9M0QgezB4ZmYs IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmZ9OworCXVuc2lnbmVkIGludCBpID0zRCBBU1Bf UlhfRklMVF9NREEoaW50ZiwgT1dOX0FERFIpOworCisJYmNtYXNwX3NldF9tZGFfZmlsdGVyKGlu dGYsIGFkZHIsIG1hc2ssIGkpOworCWJjbWFzcF9lbl9tZGFfZmlsdGVyKGludGYsIGVuLCBpKTsK K30KKwordm9pZCBiY21hc3BfZGlzYWJsZV9hbGxfZmlsdGVycyhzdHJ1Y3QgYmNtYXNwX2ludGYg KmludGYpCit7CisJc3RydWN0IGJjbWFzcF9wcml2ICpwcml2ID0zRCBpbnRmLT5wYXJlbnQ7CisJ dW5zaWduZWQgaW50IGk7CisKKwkvKiBEaXNhYmxlIGFsbCBmaWx0ZXJzIGhlbGQgYnkgdGhpcyBw b3J0ICovCisJZm9yIChpID0zRCBBU1BfUlhfRklMVF9NREFfUkVTX0NPVU5UKGludGYpOyBpIDwg TlVNX01EQV9GSUxURVJTOyBpKyspIHsKKwkJaWYgKHByaXYtPm1kYV9maWx0ZXJzW2ldLmVuICYm CisJCSAgICBwcml2LT5tZGFfZmlsdGVyc1tpXS5wb3J0ID0zRD0zRCBpbnRmLT5wb3J0KQorCQkJ YmNtYXNwX2VuX21kYV9maWx0ZXIoaW50ZiwgMCwgaSk7CisJfQorfQorCitzdGF0aWMgaW50IGJj bWFzcF9jb21iaW5lX3NldF9maWx0ZXIoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmLAorCQkJCSAg ICAgdW5zaWduZWQgY2hhciAqYWRkciwgdW5zaWduZWQgY2hhciAqbWFzaywKKwkJCQkgICAgIGlu dCBpKQoreworCXN0cnVjdCBiY21hc3BfcHJpdiAqcHJpdiA9M0QgaW50Zi0+cGFyZW50OworCXU2 NCBhZGRyMSwgYWRkcjIsIG1hc2sxLCBtYXNrMiwgbWFzazM7CisKKwkvKiBTd2l0Y2ggdG8gdTY0 IHRvIGhlbHAgd2l0aCB0aGUgY2FsY3VsYXRpb25zICovCisJYWRkcjEgPTNEIGV0aGVyX2FkZHJf dG9fdTY0KHByaXYtPm1kYV9maWx0ZXJzW2ldLmFkZHIpOworCW1hc2sxID0zRCBldGhlcl9hZGRy X3RvX3U2NChwcml2LT5tZGFfZmlsdGVyc1tpXS5tYXNrKTsKKwlhZGRyMiA9M0QgZXRoZXJfYWRk cl90b191NjQoYWRkcik7CisJbWFzazIgPTNEIGV0aGVyX2FkZHJfdG9fdTY0KG1hc2spOworCisJ LyogQ2hlY2sgaWYgb25lIGZpbHRlciByZXNpZGVzIHdpdGhpbiB0aGUgb3RoZXIgKi8KKwltYXNr MyA9M0QgbWFzazEgJiBtYXNrMjsKKwlpZiAobWFzazMgPTNEPTNEIG1hc2sxICYmICgoYWRkcjEg JiBtYXNrMSkgPTNEPTNEIChhZGRyMiAmIG1hc2sxKSkpIHsKKwkJLyogRmlsdGVyIDIgcmVzaWRl cyB3aXRoaW4gZmlsdGVyIDEsIHNvIGV2ZXJ5dGhpbmcgaXMgZ29vZCAqLworCQlyZXR1cm4gMDsK Kwl9IGVsc2UgaWYgKG1hc2szID0zRD0zRCBtYXNrMiAmJiAoKGFkZHIxICYgbWFzazIpID0zRD0z RCAoYWRkcjIgJiBtYXNrMikpPQopIHsKKwkJLyogRmlsdGVyIDEgcmVzaWRlcyB3aXRoaW4gZmls dGVyIDIsIHNvIHN3YXAgZmlsdGVycyAqLworCQliY21hc3Bfc2V0X21kYV9maWx0ZXIoaW50Ziwg YWRkciwgbWFzaywgaSk7CisJCXJldHVybiAwOworCX0KKworCS8qIFVuYWJsZSB0byBjb21iaW5l ICovCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK2ludCBiY21hc3Bfc2V0X2VuX21kYV9maWx0ZXIo c3RydWN0IGJjbWFzcF9pbnRmICppbnRmLCB1bnNpZ25lZCBjaGFyICphZGRyLAorCQkJICAgICB1 bnNpZ25lZCBjaGFyICptYXNrKQoreworCXN0cnVjdCBiY21hc3BfcHJpdiAqcHJpdiA9M0QgaW50 Zi0+cGFyZW50OworCWludCBpLCByZXQ7CisKKwlmb3IgKGkgPTNEIEFTUF9SWF9GSUxUX01EQV9S RVNfQ09VTlQoaW50Zik7IGkgPCBOVU1fTURBX0ZJTFRFUlM7IGkrKykgeworCQkvKiBJZiBmaWx0 ZXIgbm90IGVuYWJsZWQgb3IgYmVsb25ncyB0byBhbm90aGVyIHBvcnQgc2tpcCAqLworCQlpZiAo IXByaXYtPm1kYV9maWx0ZXJzW2ldLmVuIHx8CisJCSAgICBwcml2LT5tZGFfZmlsdGVyc1tpXS5w b3J0ICE9M0QgaW50Zi0+cG9ydCkKKwkJCWNvbnRpbnVlOworCisJCS8qIEF0dGVtcHQgdG8gY29t YmluZSBmaWx0ZXJzICovCisJCXJldCA9M0QgYmNtYXNwX2NvbWJpbmVfc2V0X2ZpbHRlcihpbnRm LCBhZGRyLCBtYXNrLCBpKTsKKwkJaWYgKCFyZXQpIHsKKwkJCWludGYtPm1pYi5maWx0ZXJzX2Nv bWJpbmVfY250Kys7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCS8qIENyZWF0ZSBuZXcgZmls dGVyIGlmIHBvc3NpYmxlICovCisJZm9yIChpID0zRCBBU1BfUlhfRklMVF9NREFfUkVTX0NPVU5U KGludGYpOyBpIDwgTlVNX01EQV9GSUxURVJTOyBpKyspIHsKKwkJaWYgKHByaXYtPm1kYV9maWx0 ZXJzW2ldLmVuKQorCQkJY29udGludWU7CisKKwkJYmNtYXNwX3NldF9tZGFfZmlsdGVyKGludGYs IGFkZHIsIG1hc2ssIGkpOworCQliY21hc3BfZW5fbWRhX2ZpbHRlcihpbnRmLCAxLCBpKTsKKwkJ cmV0dXJuIDA7CisJfQorCisJLyogTm8gcm9vbSBmb3IgbmV3IGZpbHRlciAqLworCXJldHVybiAt RUlOVkFMOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYmNtYXNwX2NvcmVfaW5pdF9maWx0ZXJz KHN0cnVjdCBiY21hc3BfcHJpdiAqcHJpdikKK3sKKwlpbnQgaTsKKworCS8qIERpc2FibGUgYWxs IGZpbHRlcnMgYW5kIHJlc2V0IHNvZnR3YXJlIHZpZXcgc2luY2UgdGhlIEhXCisJICogY2FuIGxv c2UgY29udGV4dCB3aGlsZSBpbiBkZWVwIHNsZWVwIHN1c3BlbmQgc3RhdGVzCisJICovCisJZm9y IChpID0zRCAwOyBpIDwgTlVNX01EQV9GSUxURVJTOyBpKyspIHsKKwkJcnhfZmlsdGVyX2NvcmVf d2wocHJpdiwgMHgwLCBBU1BfUlhfRklMVEVSX01EQV9DRkcoaSkpOworCQlwcml2LT5tZGFfZmls dGVyc1tpXS5lbiA9M0QgMDsKKwl9CisKKwlmb3IgKGkgPTNEIDA7IGkgPCBOVU1fTkVUX0ZJTFRF UlM7IGkrKykKKwkJcnhfZmlsdGVyX2NvcmVfd2wocHJpdiwgMHgwLCBBU1BfUlhfRklMVEVSX05F VF9DRkcoaSkpOworCisJLyogVG9wIGxldmVsIGZpbHRlciBlbmFibGUgYml0IHNob3VsZCBiZSBl bmFibGVkIGF0IGFsbCB0aW1lcywgc2V0CisJICogR0VOX1dBS0VfQ0xFQVIgdG8gY2xlYXIgdGhl IG5ldHdvcmsgZmlsdGVyIHdha2UtdXAgd2hpY2ggd291bGQKKwkgKiBvdGhlcndpc2UgYmUgc3Rp Y2t5CisJICovCisJcnhfZmlsdGVyX2NvcmVfd2wocHJpdiwgKEFTUF9SWF9GSUxURVJfT1BVVF9F TiB8CisJCQkgIEFTUF9SWF9GSUxURVJfTURBX0VOIHwKKwkJCSAgQVNQX1JYX0ZJTFRFUl9HRU5f V0tfQ0xSIHwKKwkJCSAgQVNQX1JYX0ZJTFRFUl9OVF9GTFRfRU4pLAorCQkJICBBU1BfUlhfRklM VEVSX0JMS19DVFJMKTsKK30KKworLyogQVNQIGNvcmUgaW5pdGlhbGl6YXRpb24gKi8KK3N0YXRp YyBpbmxpbmUgdm9pZCBiY21hc3BfY29yZV9pbml0KHN0cnVjdCBiY21hc3BfcHJpdiAqcHJpdikK K3sKKwl0eF9hbmFseXRpY3NfY29yZV93bChwcml2LCAweDAsIEFTUF9UWF9BTkFMWVRJQ1NfQ1RS TCk7CisJcnhfYW5hbHl0aWNzX2NvcmVfd2wocHJpdiwgMHg0LCBBU1BfUlhfQU5BTFlUSUNTX0NU UkwpOworCisJcnhfZWRwa3RfY29yZV93bChwcml2LCAoQVNQX0VEUEtUX0hEUl9TWl8xMjggPDwg QVNQX0VEUEtUX0hEUl9TWl9TSElGVCksCisJCQkgQVNQX0VEUEtUX0hEUl9DRkcpOworCXJ4X2Vk cGt0X2NvcmVfd2wocHJpdiwKKwkJCSAoQVNQX0VEUEtUX0VORElfQlRfU1dQX1dEIDw8IEFTUF9F RFBLVF9FTkRJX0RFU0NfU0hJRlQpLAorCQkJIEFTUF9FRFBLVF9FTkRJKTsKKworCXJ4X2VkcGt0 X2NvcmVfd2wocHJpdiwgMHgxYiwgQVNQX0VEUEtUX0JVUlNUX0JVRl9QU0NBTF9UT1VUKTsKKwly eF9lZHBrdF9jb3JlX3dsKHByaXYsIDB4M2U4LCBBU1BfRURQS1RfQlVSU1RfQlVGX1dSSVRFX1RP VVQpOworCXJ4X2VkcGt0X2NvcmVfd2wocHJpdiwgMHgzZTgsIEFTUF9FRFBLVF9CVVJTVF9CVUZf UkVBRF9UT1VUKTsKKworCXJ4X2VkcGt0X2NvcmVfd2wocHJpdiwgQVNQX0VEUEtUX0VOQUJMRV9F TiwgQVNQX0VEUEtUX0VOQUJMRSk7CisKKwkvKiBEaXNhYmxlIGFuZCBjbGVhciBib3RoIFVuaU1B QydzIHdha2UtdXAgaW50ZXJydXB0cyB0byBhdm9pZAorCSAqIHN0aWNreSBpbnRlcnJ1cHRzLgor CSAqLworCV9pbnRyMl9tYXNrX3NldChwcml2LCBBU1BfSU5UUjJfVU1DMF9XQUtFIHwgQVNQX0lO VFIyX1VNQzFfV0FLRSk7CisJaW50cjJfY29yZV93bChwcml2LCBBU1BfSU5UUjJfVU1DMF9XQUtF IHwgQVNQX0lOVFIyX1VNQzFfV0FLRSwKKwkJICAgICAgQVNQX0lOVFIyX0NMRUFSKTsKK30KKwor c3RhdGljIHZvaWQgYmNtYXNwX2NvcmVfY2xvY2tfc2VsZWN0KHN0cnVjdCBiY21hc3BfcHJpdiAq cHJpdiwgYm9vbCBzbG93KQoreworCXUzMiByZWc7CisKKwlyZWcgPTNEIGN0cmxfY29yZV9ybChw cml2LCBBU1BfQ1RSTF9DT1JFX0NMT0NLX1NFTEVDVCk7CisJaWYgKHNsb3cpCisJCXJlZyAmPTNE IH5BU1BfQ1RSTF9DT1JFX0NMT0NLX1NFTEVDVF9NQUlOOworCWVsc2UKKwkJcmVnIHw9M0QgQVNQ X0NUUkxfQ09SRV9DTE9DS19TRUxFQ1RfTUFJTjsKKwljdHJsX2NvcmVfd2wocHJpdiwgcmVnLCBB U1BfQ1RSTF9DT1JFX0NMT0NLX1NFTEVDVCk7Cit9CisKK3N0YXRpYyB2b2lkIGJjbWFzcF9jb3Jl X2Nsb2NrX3NldF9sbChzdHJ1Y3QgYmNtYXNwX3ByaXYgKnByaXYsIHUzMiBjbHIsIHUzPQoyIHNl dCkKK3sKKwl1MzIgcmVnOworCisJcmVnID0zRCBjdHJsX2NvcmVfcmwocHJpdiwgQVNQX0NUUkxf Q0xPQ0tfQ1RSTCk7CisJcmVnICY9M0QgfmNscjsKKwlyZWcgfD0zRCBzZXQ7CisJY3RybF9jb3Jl X3dsKHByaXYsIHJlZywgQVNQX0NUUkxfQ0xPQ0tfQ1RSTCk7CisKKwlyZWcgPTNEIGN0cmxfY29y ZV9ybChwcml2LCBBU1BfQ1RSTF9TQ1JBVENIXzApOworCXJlZyAmPTNEIH5jbHI7CisJcmVnIHw9 M0Qgc2V0OworCWN0cmxfY29yZV93bChwcml2LCByZWcsIEFTUF9DVFJMX1NDUkFUQ0hfMCk7Cit9 CisKK3N0YXRpYyB2b2lkIGJjbWFzcF9jb3JlX2Nsb2NrX3NldChzdHJ1Y3QgYmNtYXNwX3ByaXYg KnByaXYsIHUzMiBjbHIsIHUzMiBzPQpldCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJ c3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmNsa19sb2NrLCBmbGFncyk7CisJYmNtYXNwX2NvcmVf Y2xvY2tfc2V0X2xsKHByaXYsIGNsciwgc2V0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZw cml2LT5jbGtfbG9jaywgZmxhZ3MpOworfQorCit2b2lkIGJjbWFzcF9jb3JlX2Nsb2NrX3NldF9p bnRmKHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZiwgYm9vbCBlbikKK3sKKwl1MzIgaW50Zl9tYXNr ID0zRCBBU1BfQ1RSTF9DTE9DS19DVFJMX0FTUF9SR01JSV9ESVMoaW50Zi0+cG9ydCk7CisJc3Ry dWN0IGJjbWFzcF9wcml2ICpwcml2ID0zRCBpbnRmLT5wYXJlbnQ7CisJdW5zaWduZWQgbG9uZyBm bGFnczsKKwl1MzIgcmVnOworCisJLyogV2hlbiBlbmFibGluZyBhbiBpbnRlcmZhY2UsIGlmIHRo ZSBSWCBvciBUWCBjbG9ja3Mgd2VyZSBub3QgZW5hYmxlZCwKKwkgKiBlbmFibGUgdGhlbS4gQ29u dmVyc2VseSwgd2hpbGUgZGlzYWJsaW5nIGFuIGludGVyZmFjZSwgaWYgdGhpcyBpcworCSAqIHRo ZSBsYXN0IG9uZSBlbmFibGVkLCB3ZSBjYW4gdHVybiBvZmYgdGhlIHNoYXJlZCBSWCBhbmQgVFgg Y2xvY2tzIGFzCisJICogd2VsbC4gV2UgY29udHJvbCBlbmFibGUgYml0cyB3aGljaCBpcyB3aHkg d2UgdGVzdCBmb3IgZXF1YWxpdHkgb24KKwkgKiB0aGUgUkdNSUkgY2xvY2sgYml0IG1hc2suCisJ ICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmNsa19sb2NrLCBmbGFncyk7CisJaWYgKGVu KSB7CisJCWludGZfbWFzayB8PTNEIEFTUF9DVFJMX0NMT0NLX0NUUkxfQVNQX1RYX0RJU0FCTEUg fAorCQkJICAgICBBU1BfQ1RSTF9DTE9DS19DVFJMX0FTUF9SWF9ESVNBQkxFOworCQliY21hc3Bf Y29yZV9jbG9ja19zZXRfbGwocHJpdiwgaW50Zl9tYXNrLCAwKTsKKwl9IGVsc2UgeworCQlyZWcg PTNEIGN0cmxfY29yZV9ybChwcml2LCBBU1BfQ1RSTF9TQ1JBVENIXzApIHwgaW50Zl9tYXNrOwor CQlpZiAoKHJlZyAmIEFTUF9DVFJMX0NMT0NLX0NUUkxfQVNQX1JHTUlJX01BU0spID0zRD0zRAor CQkgICAgQVNQX0NUUkxfQ0xPQ0tfQ1RSTF9BU1BfUkdNSUlfTUFTSykKKwkJCWludGZfbWFzayB8 PTNEIEFTUF9DVFJMX0NMT0NLX0NUUkxfQVNQX1RYX0RJU0FCTEUgfAorCQkJCSAgICAgQVNQX0NU UkxfQ0xPQ0tfQ1RSTF9BU1BfUlhfRElTQUJMRTsKKwkJYmNtYXNwX2NvcmVfY2xvY2tfc2V0X2xs KHByaXYsIDAsIGludGZfbWFzayk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYt PmNsa19sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGJjbWFzcF9pc19wb3J0 X3ZhbGlkKHN0cnVjdCBiY21hc3BfcHJpdiAqcHJpdiwgaW50IHBvcnQpCit7CisJLyogUXVpY2sg c2FuaXR5IGNoZWNrCisJICogICBQb3J0cyAwLzEgcmVzZXJ2ZWQgZm9yIHVuaW1hYworCSAqICAg TWF4IHN1cHBvcnRlZCBwb3J0cyBpcyAyCisJICovCisJcmV0dXJuIChwb3J0ID0zRD0zRCAwIHx8 IHBvcnQgPTNEPTNEIDEpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgYmNtYXNwX2lzcl93b2wo aW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgYmNtYXNwX3ByaXYgKnByaXYgPTNEIGRh dGE7CisJdTMyIHN0YXR1czsKKworCS8qIE5vIEwzIElSUSwgc28gd2UgZ29vZCAqLworCWlmIChw cml2LT53b2xfaXJxIDw9M0QgMCkKKwkJZ290byBpcnFfaGFuZGxlZDsKKworCXN0YXR1cyA9M0Qg d2FrZXVwX2ludHIyX2NvcmVfcmwocHJpdiwgQVNQX1dBS0VVUF9JTlRSMl9TVEFUVVMpICYKKwkJ fndha2V1cF9pbnRyMl9jb3JlX3JsKHByaXYsIEFTUF9XQUtFVVBfSU5UUjJfTUFTS19TVEFUVVMp OworCXdha2V1cF9pbnRyMl9jb3JlX3dsKHByaXYsIHN0YXR1cywgQVNQX1dBS0VVUF9JTlRSMl9D TEVBUik7CisKK2lycV9oYW5kbGVkOgorCXBtX3dha2V1cF9ldmVudCgmcHJpdi0+cGRldi0+ZGV2 LCAwKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgYmNtYXNwX2dldF9h bmRfcmVxdWVzdF9pcnEoc3RydWN0IGJjbWFzcF9wcml2ICpwcml2LCBpbnQgaSkKK3sKKwlzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0zRCBwcml2LT5wZGV2OworCWludCBpcnEsIHJldDsK KworCWlycSA9M0QgcGxhdGZvcm1fZ2V0X2lycV9vcHRpb25hbChwZGV2LCBpKTsKKwlpZiAoaXJx IDwgMCkKKwkJcmV0dXJuIGlycTsKKworCXJldCA9M0QgZGV2bV9yZXF1ZXN0X2lycSgmcGRldi0+ ZGV2LCBpcnEsIGJjbWFzcF9pc3Jfd29sLCAwLAorCQkJICAgICAgIHBkZXYtPm5hbWUsIHByaXYp OworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gaXJxOworfQorCitzdGF0aWMg dm9pZCBiY21hc3BfaW5pdF93b2xfc2hhcmVkKHN0cnVjdCBiY21hc3BfcHJpdiAqcHJpdikKK3sK KwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0zRCBwcml2LT5wZGV2OworCXN0cnVjdCBk ZXZpY2UgKmRldiA9M0QgJnBkZXYtPmRldjsKKwlpbnQgaXJxOworCisJaXJxID0zRCBiY21hc3Bf Z2V0X2FuZF9yZXF1ZXN0X2lycShwcml2LCAxKTsKKwlpZiAoaXJxIDwgMCkgeworCQlkZXZfd2Fy bihkZXYsICJGYWlsZWQgdG8gaW5pdCBXb0wgaXJxOiAlZFxuIiwgaXJxKTsKKwkJcmV0dXJuOwor CX0KKworCXByaXYtPndvbF9pcnEgPTNEIGlycTsKKwlwcml2LT53b2xfaXJxX2VuYWJsZWRfbWFz ayA9M0QgMDsKKwlkZXZpY2Vfc2V0X3dha2V1cF9jYXBhYmxlKCZwZGV2LT5kZXYsIDEpOworfQor CitzdGF0aWMgdm9pZCBiY21hc3BfZW5hYmxlX3dvbF9zaGFyZWQoc3RydWN0IGJjbWFzcF9pbnRm ICppbnRmLCBib29sIGVuKQoreworCXN0cnVjdCBiY21hc3BfcHJpdiAqcHJpdiA9M0QgaW50Zi0+ cGFyZW50OworCXN0cnVjdCBkZXZpY2UgKmRldiA9M0QgJnByaXYtPnBkZXYtPmRldjsKKworCWlm IChlbikgeworCQlpZiAocHJpdi0+d29sX2lycV9lbmFibGVkX21hc2spIHsKKwkJCXNldF9iaXQo aW50Zi0+cG9ydCwgJnByaXYtPndvbF9pcnFfZW5hYmxlZF9tYXNrKTsKKwkJCXJldHVybjsKKwkJ fQorCisJCS8qIEZpcnN0IGVuYWJsZSAqLworCQlzZXRfYml0KGludGYtPnBvcnQsICZwcml2LT53 b2xfaXJxX2VuYWJsZWRfbWFzayk7CisJCWVuYWJsZV9pcnFfd2FrZShwcml2LT53b2xfaXJxKTsK KwkJZGV2aWNlX3NldF93YWtldXBfZW5hYmxlKGRldiwgMSk7CisJfSBlbHNlIHsKKwkJY2xlYXJf Yml0KGludGYtPnBvcnQsICZwcml2LT53b2xfaXJxX2VuYWJsZWRfbWFzayk7CisJCWlmIChwcml2 LT53b2xfaXJxX2VuYWJsZWRfbWFzaykKKwkJCXJldHVybjsKKworCQkvKiBMYXN0IGRpc2FibGUg Ki8KKwkJZGlzYWJsZV9pcnFfd2FrZShwcml2LT53b2xfaXJxKTsKKwkJZGV2aWNlX3NldF93YWtl dXBfZW5hYmxlKGRldiwgMCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBiY21hc3Bfd29sX2lycV9k ZXN0cm95X3NoYXJlZChzdHJ1Y3QgYmNtYXNwX3ByaXYgKnByaXYpCit7CisJaWYgKHByaXYtPndv bF9pcnEgPiAwKQorCQlmcmVlX2lycShwcml2LT53b2xfaXJxLCBwcml2KTsKK30KKworc3RhdGlj IHZvaWQgYmNtYXNwX2luaXRfd29sX3Blcl9pbnRmKHN0cnVjdCBiY21hc3BfcHJpdiAqcHJpdikK K3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0zRCBwcml2LT5wZGV2OworCXN0cnVj dCBkZXZpY2UgKmRldiA9M0QgJnBkZXYtPmRldjsKKwlzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGY7 CisJaW50IGlycSwgaTsKKworCWZvciAoaSA9M0QgMDsgaSA8IHByaXYtPmludGZfY291bnQ7IGkr KykgeworCQlpbnRmID0zRCBwcml2LT5pbnRmc1tpXTsKKwkJaXJxID0zRCBiY21hc3BfZ2V0X2Fu ZF9yZXF1ZXN0X2lycShwcml2LCBpbnRmLT5wb3J0ICsgMSk7CisJCWlmIChpcnEgPCAwKSB7CisJ CQlkZXZfd2FybihkZXYsICJGYWlsZWQgdG8gaW5pdCBXb0wgaXJxKHBvcnQgJWQpOiAlZFxuIiwK KwkJCQkgaW50Zi0+cG9ydCwgaXJxKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaW50Zi0+d29s X2lycSA9M0QgaXJxOworCQlpbnRmLT53b2xfaXJxX2VuYWJsZWQgPTNEIGZhbHNlOworCQlkZXZp Y2Vfc2V0X3dha2V1cF9jYXBhYmxlKCZwZGV2LT5kZXYsIDEpOworCX0KK30KKworc3RhdGljIHZv aWQgYmNtYXNwX2VuYWJsZV93b2xfcGVyX2ludGYoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmLCBi b29sIGVuKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9M0QgJmludGYtPnBhcmVudC0+cGRldi0+ ZGV2OworCisJaWYgKGVuIF4gaW50Zi0+d29sX2lycV9lbmFibGVkKQorCQlpcnFfc2V0X2lycV93 YWtlKGludGYtPndvbF9pcnEsIGVuKTsKKworCWludGYtPndvbF9pcnFfZW5hYmxlZCA9M0QgZW47 CisJZGV2aWNlX3NldF93YWtldXBfZW5hYmxlKGRldiwgZW4pOworfQorCitzdGF0aWMgdm9pZCBi Y21hc3Bfd29sX2lycV9kZXN0cm95X3Blcl9pbnRmKHN0cnVjdCBiY21hc3BfcHJpdiAqcHJpdikK K3sKKwlzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGY7CisJaW50IGk7CisKKwlmb3IgKGkgPTNEIDA7 IGkgPCBwcml2LT5pbnRmX2NvdW50OyBpKyspIHsKKwkJaW50ZiA9M0QgcHJpdi0+aW50ZnNbaV07 CisKKwkJaWYgKGludGYtPndvbF9pcnEgPiAwKQorCQkJZnJlZV9pcnEoaW50Zi0+d29sX2lycSwg cHJpdik7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGJjbWFzcF9od19pbmZvIHYyMF9od19pbmZv ID0zRCB7CisJLnJ4X2N0cmxfZmx1c2ggPTNEIEFTUF9SWF9DVFJMX0ZMVVNILAorCS51bWFjMmZi ID0zRCBVTUFDMkZCX09GRlNFVCwKKwkucnhfY3RybF9mYl9vdXRfZnJhbWVfY291bnQgPTNEIEFT UF9SWF9DVFJMX0ZCX09VVF9GUkFNRV9DT1VOVCwKKwkucnhfY3RybF9mYl9maWx0X291dF9mcmFt ZV9jb3VudCA9M0QgQVNQX1JYX0NUUkxfRkJfRklMVF9PVVRfRlJBTUVfQ09VTlQsCisJLnJ4X2N0 cmxfZmJfcnhfZmlmb19kZXB0aCA9M0QgQVNQX1JYX0NUUkxfRkJfUlhfRklGT19ERVBUSCwKK307 CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmNtYXNwX3BsYXRfZGF0YSB2MjBfcGxhdF9kYXRhID0z RCB7CisJLmluaXRfd29sID0zRCBiY21hc3BfaW5pdF93b2xfcGVyX2ludGYsCisJLmVuYWJsZV93 b2wgPTNEIGJjbWFzcF9lbmFibGVfd29sX3Blcl9pbnRmLAorCS5kZXN0cm95X3dvbCA9M0QgYmNt YXNwX3dvbF9pcnFfZGVzdHJveV9wZXJfaW50ZiwKKwkuaHdfaW5mbyA9M0QgJnYyMF9od19pbmZv LAorfTsKKworc3RhdGljIHN0cnVjdCBiY21hc3BfaHdfaW5mbyB2MjFfaHdfaW5mbyA9M0Qgewor CS5yeF9jdHJsX2ZsdXNoID0zRCBBU1BfUlhfQ1RSTF9GTFVTSF8yXzEsCisJLnVtYWMyZmIgPTNE IFVNQUMyRkJfT0ZGU0VUXzJfMSwKKwkucnhfY3RybF9mYl9vdXRfZnJhbWVfY291bnQgPTNEIEFT UF9SWF9DVFJMX0ZCX09VVF9GUkFNRV9DT1VOVF8yXzEsCisJLnJ4X2N0cmxfZmJfZmlsdF9vdXRf ZnJhbWVfY291bnQgPTNECisJCUFTUF9SWF9DVFJMX0ZCX0ZJTFRfT1VUX0ZSQU1FX0NPVU5UXzJf MSwKKwkucnhfY3RybF9mYl9yeF9maWZvX2RlcHRoID0zRCBBU1BfUlhfQ1RSTF9GQl9SWF9GSUZP X0RFUFRIXzJfMSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmNtYXNwX3BsYXRfZGF0YSB2 MjFfcGxhdF9kYXRhID0zRCB7CisJLmluaXRfd29sID0zRCBiY21hc3BfaW5pdF93b2xfc2hhcmVk LAorCS5lbmFibGVfd29sID0zRCBiY21hc3BfZW5hYmxlX3dvbF9zaGFyZWQsCisJLmRlc3Ryb3lf d29sID0zRCBiY21hc3Bfd29sX2lycV9kZXN0cm95X3NoYXJlZCwKKwkuaHdfaW5mbyA9M0QgJnYy MV9od19pbmZvLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYmNtYXNw X29mX21hdGNoW10gPTNEIHsKKwl7IC5jb21wYXRpYmxlID0zRCAiYnJjbSxhc3AtdjIuMCIsIC5k YXRhID0zRCAmdjIwX3BsYXRfZGF0YSB9LAorCXsgLmNvbXBhdGlibGUgPTNEICJicmNtLGFzcC12 Mi4xIiwgLmRhdGEgPTNEICZ2MjFfcGxhdF9kYXRhIH0sCisJeyAvKiBzZW50aW5lbCAqLyB9LAor fTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGJjbWFzcF9vZl9tYXRjaCk7CisKK3N0YXRpYyBj b25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGJjbWFzcF9tZGlvX29mX21hdGNoW10gPTNEIHsKKwl7 IC5jb21wYXRpYmxlID0zRCAiYnJjbSxhc3AtdjIuMS1tZGlvIiwgfSwKKwl7IC5jb21wYXRpYmxl ID0zRCAiYnJjbSxhc3AtdjIuMC1tZGlvIiwgfSwKKwl7IC8qIHNlbnRpbmVsICovIH0sCit9Owor TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgYmNtYXNwX21kaW9fb2ZfbWF0Y2gpOworCitzdGF0aWMg aW50IGJjbWFzcF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVj dCBkZXZpY2Vfbm9kZSAqcG9ydHNfbm9kZSwgKmludGZfbm9kZTsKKwljb25zdCBzdHJ1Y3QgYmNt YXNwX3BsYXRfZGF0YSAqcGRhdGE7CisJc3RydWN0IGRldmljZSAqZGV2ID0zRCAmcGRldi0+ZGV2 OworCWludCByZXQsIGksIGNvdW50ID0zRCAwLCBwb3J0OworCXN0cnVjdCBiY21hc3BfcHJpdiAq cHJpdjsKKwlzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGY7CisKKwlwcml2ID0zRCBkZXZtX2t6YWxs b2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYpCisJCXJldHVy biAtRU5PTUVNOworCisJcHJpdi0+aXJxID0zRCBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwor CWlmIChwcml2LT5pcnEgPD0zRCAwKQorCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5W QUwsICJpbnZhbGlkIGludGVycnVwdFxuIik7CisKKwlwcml2LT5jbGsgPTNEIGRldm1fY2xrX2dl dF9vcHRpb25hbF9lbmFibGVkKGRldiwgInN3X2FzcCIpOworCWlmIChJU19FUlIocHJpdi0+Y2xr KSkKKwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHByaXYtPmNsayksCisJCQkJ CQkJICJmYWlsZWQgdG8gcmVxdWVzdCBjbG9ja1xuIik7CisKKwkvKiBCYXNlIGZyb20gcGFyZW50 IG5vZGUgKi8KKwlwcml2LT5iYXNlID0zRCBkZXZtX3BsYXRmb3JtX2lvcmVtYXBfcmVzb3VyY2Uo cGRldiwgMCk7CisJaWYgKElTX0VSUihwcml2LT5iYXNlKSkKKwkJcmV0dXJuIGRldl9lcnJfcHJv YmUoZGV2LCBQVFJfRVJSKHByaXYtPmJhc2UpLCAiZmFpbGVkIHRvIGlvbWFwXG4iKTsKKworCXJl dCA9M0QgZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudCgmcGRldi0+ZGV2LCBETUFfQklUX01BU0so NDApKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwgInVuYWJs ZSB0byBzZXQgRE1BIG1hc2s6ICVkXG4iLCByZXQpOworCisJZGV2X3NldF9kcnZkYXRhKCZwZGV2 LT5kZXYsIHByaXYpOworCXByaXYtPnBkZXYgPTNEIHBkZXY7CisJc3Bpbl9sb2NrX2luaXQoJnBy aXYtPm1kYV9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+Y2xrX2xvY2spOworCW11dGV4 X2luaXQoJnByaXYtPm5ldF9sb2NrKTsKKwltdXRleF9pbml0KCZwcml2LT53b2xfbG9jayk7CisK KwlwZGF0YSA9M0QgZGV2aWNlX2dldF9tYXRjaF9kYXRhKCZwZGV2LT5kZXYpOworCWlmICghcGRh dGEpCisJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwgInVuYWJsZSB0byBmaW5k IHBsYXRmb3JtIGRhdGFcbiIpOworCisJcHJpdi0+aW5pdF93b2wgPTNEIHBkYXRhLT5pbml0X3dv bDsKKwlwcml2LT5lbmFibGVfd29sID0zRCBwZGF0YS0+ZW5hYmxlX3dvbDsKKwlwcml2LT5kZXN0 cm95X3dvbCA9M0QgcGRhdGEtPmRlc3Ryb3lfd29sOworCXByaXYtPmh3X2luZm8gPTNEIHBkYXRh LT5od19pbmZvOworCisJLyogRW5hYmxlIGFsbCBjbG9ja3MgdG8gZW5zdXJlIHN1Y2Nlc3NmdWwg cHJvYmluZyAqLworCWJjbWFzcF9jb3JlX2Nsb2NrX3NldChwcml2LCBBU1BfQ1RSTF9DTE9DS19D VFJMX0FTUF9BTExfRElTQUJMRSwgMCk7CisKKwkvKiBTd2l0Y2ggdG8gdGhlIG1haW4gY2xvY2sg Ki8KKwliY21hc3BfY29yZV9jbG9ja19zZWxlY3QocHJpdiwgZmFsc2UpOworCisJYmNtYXNwX2lu dHIyX21hc2tfc2V0X2FsbChwcml2KTsKKwliY21hc3BfaW50cjJfY2xlYXJfYWxsKHByaXYpOwor CisJcmV0ID0zRCBkZXZtX3JlcXVlc3RfaXJxKCZwZGV2LT5kZXYsIHByaXYtPmlycSwgYmNtYXNw X2lzciwgMCwKKwkJCSAgICAgICBwZGV2LT5uYW1lLCBwcml2KTsKKwlpZiAocmV0KQorCQlyZXR1 cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwgImZhaWxlZCB0byByZXF1ZXN0IEFTUCBpbnRlcnJ1 cHQ6ICVkIiwgcmU9CnQpOworCisJLyogUmVnaXN0ZXIgbWRpbyBjaGlsZCBub2RlcyAqLworCW9m X3BsYXRmb3JtX3BvcHVsYXRlKGRldi0+b2Zfbm9kZSwgYmNtYXNwX21kaW9fb2ZfbWF0Y2gsIE5V TEwsIGRldik7CisKKwkvKiBBU1Agc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24sIE5lZWRzIHRvIGJl IGRvbmUgcmVnYXJkbGVzcyBvZgorCSAqIGhvdyBtYW55IGludGVyZmFjZXMgY29tZSB1cC4KKwkg Ki8KKwliY21hc3BfY29yZV9pbml0KHByaXYpOworCWJjbWFzcF9jb3JlX2luaXRfZmlsdGVycyhw cml2KTsKKworCXBvcnRzX25vZGUgPTNEIG9mX2ZpbmRfbm9kZV9ieV9uYW1lKGRldi0+b2Zfbm9k ZSwgImV0aGVybmV0LXBvcnRzIik7CisJaWYgKCFwb3J0c19ub2RlKSB7CisJCWRldl93YXJuKGRl diwgIk5vIHBvcnRzIGZvdW5kXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJZm9yX2VhY2hfYXZh aWxhYmxlX2NoaWxkX29mX25vZGUocG9ydHNfbm9kZSwgaW50Zl9ub2RlKSB7CisJCW9mX3Byb3Bl cnR5X3JlYWRfdTMyKGludGZfbm9kZSwgInJlZyIsICZwb3J0KTsKKwkJaWYgKCFiY21hc3BfaXNf cG9ydF92YWxpZChwcml2LCBwb3J0KSkgeworCQkJZGV2X3dhcm4oZGV2LCAiJXBPRjogJWQgaXMg YW4gaW52YWxpZCBwb3J0XG4iLAorCQkJCSBpbnRmX25vZGUsIHBvcnQpOworCQkJY29udGludWU7 CisJCX0KKworCQlwcml2LT5pbnRmX2NvdW50Kys7CisJfQorCisJcHJpdi0+aW50ZnMgPTNEIGRl dm1fa2NhbGxvYyhkZXYsIHByaXYtPmludGZfY291bnQsCisJCQkJICAgc2l6ZW9mKHN0cnVjdCBi Y21hc3BfaW50ZiAqKSwKKwkJCQkgICBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYtPmludGZzKQor CQlyZXR1cm4gLUVOT01FTTsKKworCS8qIFByb2JlIGVhY2ggaW50ZXJmYWNlIChJbml0aWFsaXph dGlvbiBzaG91bGQgY29udGludWUgZXZlbiBpZgorCSAqIGludGVyZmFjZXMgYXJlIHVuYWJsZSB0 byBjb21lIHVwKQorCSAqLworCWkgPTNEIDA7CisJZm9yX2VhY2hfYXZhaWxhYmxlX2NoaWxkX29m X25vZGUocG9ydHNfbm9kZSwgaW50Zl9ub2RlKQorCQlwcml2LT5pbnRmc1tpKytdID0zRCBiY21h c3BfaW50ZXJmYWNlX2NyZWF0ZShwcml2LCBpbnRmX25vZGUpOworCisJLyogQ2hlY2sgYW5kIGVu YWJsZSBXb0wgKi8KKwlwcml2LT5pbml0X3dvbChwcml2KTsKKworCS8qIERyb3AgdGhlIGNsb2Nr IHJlZmVyZW5jZSBjb3VudCBub3cgYW5kIGxldCBuZG9fb3BlbigpL25kb19jbG9zZSgpCisJICog bWFuYWdlIGl0IGZvciB1cyBmcm9tIG5vdyBvbi4KKwkgKi8KKwliY21hc3BfY29yZV9jbG9ja19z ZXQocHJpdiwgMCwgQVNQX0NUUkxfQ0xPQ0tfQ1RSTF9BU1BfQUxMX0RJU0FCTEUpOworCisJY2xr X2Rpc2FibGVfdW5wcmVwYXJlKHByaXYtPmNsayk7CisKKwkvKiBOb3cgZG8gdGhlIHJlZ2lzdHJh dGlvbiBvZiB0aGUgbmV0d29yayBwb3J0cyB3aGljaCB3aWxsIHRha2UgY2FyZQorCSAqIG9mIG1h bmFnaW5nIHRoZSBjbG9jayBwcm9wZXJseS4KKwkgKi8KKwlmb3IgKGkgPTNEIDA7IGkgPCBwcml2 LT5pbnRmX2NvdW50OyBpKyspIHsKKwkJaW50ZiA9M0QgcHJpdi0+aW50ZnNbaV07CisJCWlmICgh aW50ZikKKwkJCWNvbnRpbnVlOworCisJCXJldCA9M0QgcmVnaXN0ZXJfbmV0ZGV2KGludGYtPm5k ZXYpOworCQlpZiAocmV0KSB7CisJCQluZXRkZXZfZXJyKGludGYtPm5kZXYsCisJCQkJICAgImZh aWxlZCB0byByZWdpc3RlciBuZXRfZGV2aWNlOiAlZFxuIiwgcmV0KTsKKwkJCWJjbWFzcF9pbnRl cmZhY2VfZGVzdHJveShpbnRmLCBmYWxzZSk7CisJCQljb250aW51ZTsKKwkJfQorCQljb3VudCsr OworCX0KKworCWRldl9pbmZvKGRldiwgIkluaXRpYWxpemVkICVkIHBvcnQocylcbiIsIGNvdW50 KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJjbWFzcF9yZW1vdmUoc3RydWN0IHBs YXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgYmNtYXNwX3ByaXYgKnByaXYgPTNEIGRl dl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKKwlzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGY7CisJ aW50IGk7CisKKwlwcml2LT5kZXN0cm95X3dvbChwcml2KTsKKworCWZvciAoaSA9M0QgMDsgaSA8 IHByaXYtPmludGZfY291bnQ7IGkrKykgeworCQlpbnRmID0zRCBwcml2LT5pbnRmc1tpXTsKKwkJ aWYgKCFpbnRmKQorCQkJY29udGludWU7CisKKwkJYmNtYXNwX2ludGVyZmFjZV9kZXN0cm95KGlu dGYsIHRydWUpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBiY21hc3Bfc2h1 dGRvd24oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpbnQgcmV0OworCisJcmV0 ID0zRCBiY21hc3BfcmVtb3ZlKHBkZXYpOworCWlmIChyZXQpCisJCWRldl9lcnIoJnBkZXYtPmRl diwgImZhaWxlZCB0byByZW1vdmU6ICVkXG4iLCByZXQpOworfQorCitzdGF0aWMgaW50IF9fbWF5 YmVfdW51c2VkIGJjbWFzcF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmQpCit7CisJc3RydWN0IGJj bWFzcF9wcml2ICpwcml2ID0zRCBkZXZfZ2V0X2RydmRhdGEoZCk7CisJc3RydWN0IGJjbWFzcF9p bnRmICppbnRmOworCWludCBpLCByZXQ7CisKKwlmb3IgKGkgPTNEIDA7IGkgPCBwcml2LT5pbnRm X2NvdW50OyBpKyspIHsKKwkJaW50ZiA9M0QgcHJpdi0+aW50ZnNbaV07CisJCWlmICghaW50ZikK KwkJCWNvbnRpbnVlOworCisJCXJldCA9M0QgYmNtYXNwX2ludGVyZmFjZV9zdXNwZW5kKGludGYp OworCQlpZiAocmV0KQorCQkJYnJlYWs7CisJfQorCisJcmV0ID0zRCBjbGtfcHJlcGFyZV9lbmFi bGUocHJpdi0+Y2xrKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogV2hldGhlciBX YWtlLW9uLUxBTiBpcyBlbmFibGVkIG9yIG5vdCwgd2UgY2FuIGFsd2F5cyBkaXNhYmxlCisJICog dGhlIHNoYXJlZCBUWCBjbG9jaworCSAqLworCWJjbWFzcF9jb3JlX2Nsb2NrX3NldChwcml2LCAw LCBBU1BfQ1RSTF9DTE9DS19DVFJMX0FTUF9UWF9ESVNBQkxFKTsKKworCWJjbWFzcF9jb3JlX2Ns b2NrX3NlbGVjdChwcml2LCB0cnVlKTsKKworCWNsa19kaXNhYmxlX3VucHJlcGFyZShwcml2LT5j bGspOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX21heWJlX3VudXNlZCBiY21h c3BfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmQpCit7CisJc3RydWN0IGJjbWFzcF9wcml2ICpwcml2 ID0zRCBkZXZfZ2V0X2RydmRhdGEoZCk7CisJc3RydWN0IGJjbWFzcF9pbnRmICppbnRmOworCWlu dCBpLCByZXQ7CisKKwlyZXQgPTNEIGNsa19wcmVwYXJlX2VuYWJsZShwcml2LT5jbGspOworCWlm IChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBTd2l0Y2ggdG8gdGhlIG1haW4gY2xvY2sgZG9t YWluICovCisJYmNtYXNwX2NvcmVfY2xvY2tfc2VsZWN0KHByaXYsIGZhbHNlKTsKKworCS8qIFJl LWVuYWJsZSBhbGwgY2xvY2tzIGZvciByZS1pbml0aWFsaXphdGlvbiAqLworCWJjbWFzcF9jb3Jl X2Nsb2NrX3NldChwcml2LCBBU1BfQ1RSTF9DTE9DS19DVFJMX0FTUF9BTExfRElTQUJMRSwgMCk7 CisKKwliY21hc3BfY29yZV9pbml0KHByaXYpOworCWJjbWFzcF9jb3JlX2luaXRfZmlsdGVycyhw cml2KTsKKworCS8qIEFuZCBkaXNhYmxlIHRoZW0gdG8gbGV0IHRoZSBuZXR3b3JrIGRldmljZXMg dGFrZSBjYXJlIG9mIHRoZW0gKi8KKwliY21hc3BfY29yZV9jbG9ja19zZXQocHJpdiwgMCwgQVNQ X0NUUkxfQ0xPQ0tfQ1RSTF9BU1BfQUxMX0RJU0FCTEUpOworCisJY2xrX2Rpc2FibGVfdW5wcmVw YXJlKHByaXYtPmNsayk7CisKKwlmb3IgKGkgPTNEIDA7IGkgPCBwcml2LT5pbnRmX2NvdW50OyBp KyspIHsKKwkJaW50ZiA9M0QgcHJpdi0+aW50ZnNbaV07CisJCWlmICghaW50ZikKKwkJCWNvbnRp bnVlOworCisJCXJldCA9M0QgYmNtYXNwX2ludGVyZmFjZV9yZXN1bWUoaW50Zik7CisJCWlmIChy ZXQpCisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgU0lNUExFX0RF Vl9QTV9PUFMoYmNtYXNwX3BtX29wcywKKwkJCSBiY21hc3Bfc3VzcGVuZCwgYmNtYXNwX3Jlc3Vt ZSk7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGJjbWFzcF9kcml2ZXIgPTNEIHsK KwkucHJvYmUgPTNEIGJjbWFzcF9wcm9iZSwKKwkucmVtb3ZlID0zRCBiY21hc3BfcmVtb3ZlLAor CS5zaHV0ZG93biA9M0QgYmNtYXNwX3NodXRkb3duLAorCS5kcml2ZXIgPTNEIHsKKwkJLm5hbWUg PTNEICJicmNtLGFzcC12MiIsCisJCS5vZl9tYXRjaF90YWJsZSA9M0QgYmNtYXNwX29mX21hdGNo LAorCQkucG0gPTNEICZiY21hc3BfcG1fb3BzLAorCX0sCit9OworbW9kdWxlX3BsYXRmb3JtX2Ry aXZlcihiY21hc3BfZHJpdmVyKTsKKworTU9EVUxFX0FVVEhPUigiQnJvYWRjb20iKTsKK01PRFVM RV9ERVNDUklQVElPTigiQnJvYWRjb20gQVNQIDIuMCBFdGhlcm5ldCBjb250cm9sbGVyIGRyaXZl ciIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpicmNtLGFzcC12MiIpOworTU9EVUxFX0xJQ0VO U0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNw Mi9iY21hc3AuaCBiL2RyaXZlcnMvbmV0L2V0aGU9CnJuZXQvYnJvYWRjb20vYXNwMi9iY21hc3Au aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjhhOTlkZjQ4Y2MzOQot LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2FzcDIvYmNt YXNwLmgKQEAgLTAsMCArMSw2MzYgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwt Mi4wICovCisjaWZuZGVmIF9fQkNNQVNQX0gKKyNkZWZpbmUgX19CQ01BU1BfSAorCisjaW5jbHVk ZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGh5Lmg+CisjaW5jbHVkZSA8 bGludXgvaW8tNjQtbm9uYXRvbWljLWhpLWxvLmg+CisjaW5jbHVkZSA8dWFwaS9saW51eC9ldGh0 b29sLmg+CisKKyNkZWZpbmUgQVNQX0lOVFIyX09GRlNFVAkJCTB4MTAwMAorI2RlZmluZSAgQVNQ X0lOVFIyX1NUQVRVUwkJCTB4MAorI2RlZmluZSAgQVNQX0lOVFIyX1NFVAkJCQkweDQKKyNkZWZp bmUgIEFTUF9JTlRSMl9DTEVBUgkJCTB4OAorI2RlZmluZSAgQVNQX0lOVFIyX01BU0tfU1RBVFVT CQkJMHhjCisjZGVmaW5lICBBU1BfSU5UUjJfTUFTS19TRVQJCQkweDEwCisjZGVmaW5lICBBU1Bf SU5UUjJfTUFTS19DTEVBUgkJCTB4MTQKKworI2RlZmluZSBBU1BfSU5UUjJfUlhfRUNIKGludHIp CQkJQklUKGludHIpCisjZGVmaW5lIEFTUF9JTlRSMl9UWF9ERVNDKGludHIpCQkJQklUKChpbnRy KSArIDE0KQorI2RlZmluZSBBU1BfSU5UUjJfVU1DMF9XQUtFCQkJQklUKDIyKQorI2RlZmluZSBB U1BfSU5UUjJfVU1DMV9XQUtFCQkJQklUKDI4KQorCisjZGVmaW5lIEFTUF9XQUtFVVBfSU5UUjJf T0ZGU0VUCQkJMHgxMjAwCisjZGVmaW5lICBBU1BfV0FLRVVQX0lOVFIyX1NUQVRVUwkJMHgwCisj ZGVmaW5lICBBU1BfV0FLRVVQX0lOVFIyX1NFVAkJCTB4NAorI2RlZmluZSAgQVNQX1dBS0VVUF9J TlRSMl9DTEVBUgkJCTB4OAorI2RlZmluZSAgQVNQX1dBS0VVUF9JTlRSMl9NQVNLX1NUQVRVUwkJ MHhjCisjZGVmaW5lICBBU1BfV0FLRVVQX0lOVFIyX01BU0tfU0VUCQkweDEwCisjZGVmaW5lICBB U1BfV0FLRVVQX0lOVFIyX01BU0tfQ0xFQVIJCTB4MTQKKyNkZWZpbmUgQVNQX1dBS0VVUF9JTlRS Ml9NUERfMAkJCUJJVCgwKQorI2RlZmluZSBBU1BfV0FLRVVQX0lOVFIyX01QRF8xCQkJQklUKDEp CisjZGVmaW5lIEFTUF9XQUtFVVBfSU5UUjJfRklMVF8wCQkJQklUKDIpCisjZGVmaW5lIEFTUF9X QUtFVVBfSU5UUjJfRklMVF8xCQkJQklUKDMpCisjZGVmaW5lIEFTUF9XQUtFVVBfSU5UUjJfRlcJ CQlCSVQoNCkKKworI2RlZmluZSBBU1BfVFhfQU5BTFlUSUNTX09GRlNFVAkJCTB4NGMwMDAKKyNk ZWZpbmUgIEFTUF9UWF9BTkFMWVRJQ1NfQ1RSTAkJCTB4MAorCisjZGVmaW5lIEFTUF9SWF9BTkFM WVRJQ1NfT0ZGU0VUCQkJMHg5ODAwMAorI2RlZmluZSAgQVNQX1JYX0FOQUxZVElDU19DVFJMCQkJ MHgwCisKKyNkZWZpbmUgQVNQX1JYX0NUUkxfT0ZGU0VUCQkJMHg5ZjAwMAorI2RlZmluZSBBU1Bf UlhfQ1RSTF9VTUFDXzBfRlJBTUVfQ09VTlQJCTB4OAorI2RlZmluZSBBU1BfUlhfQ1RSTF9VTUFD XzFfRlJBTUVfQ09VTlQJCTB4YworI2RlZmluZSBBU1BfUlhfQ1RSTF9GQl8wX0ZSQU1FX0NPVU5U CQkweDE0CisjZGVmaW5lIEFTUF9SWF9DVFJMX0ZCXzFfRlJBTUVfQ09VTlQJCTB4MTgKKyNkZWZp bmUgQVNQX1JYX0NUUkxfRkJfOF9GUkFNRV9DT1VOVAkJMHgxYworLyogYXNwMi4xIGRpdmVyZ2Vz IG9mZnNldHMgaGVyZSAqLworLyogQVNQMi4wICovCisjZGVmaW5lIEFTUF9SWF9DVFJMX0ZCX09V VF9GUkFNRV9DT1VOVAkJMHgyMAorI2RlZmluZSBBU1BfUlhfQ1RSTF9GQl9GSUxUX09VVF9GUkFN RV9DT1VOVAkweDI0CisjZGVmaW5lIEFTUF9SWF9DVFJMX0ZMVVNICQkJMHgyOAorI2RlZmluZSAg QVNQX0NUUkxfVU1BQzBfRkxVU0hfTUFTSwkJKEJJVCgwKSB8IEJJVCgxMikpCisjZGVmaW5lICBB U1BfQ1RSTF9VTUFDMV9GTFVTSF9NQVNLCQkoQklUKDEpIHwgQklUKDEzKSkKKyNkZWZpbmUgIEFT UF9DVFJMX1NQQl9GTFVTSF9NQVNLCQkoQklUKDgpIHwgQklUKDIwKSkKKyNkZWZpbmUgQVNQX1JY X0NUUkxfRkJfUlhfRklGT19ERVBUSAkJMHgzMAorLyogQVNQMi4xICovCisjZGVmaW5lIEFTUF9S WF9DVFJMX0ZCXzlfRlJBTUVfQ09VTlRfMl8xCTB4MjAKKyNkZWZpbmUgQVNQX1JYX0NUUkxfRkJf MTBfRlJBTUVfQ09VTlRfMl8xCTB4MjQKKyNkZWZpbmUgQVNQX1JYX0NUUkxfRkJfT1VUX0ZSQU1F X0NPVU5UXzJfMQkweDI4CisjZGVmaW5lIEFTUF9SWF9DVFJMX0ZCX0ZJTFRfT1VUX0ZSQU1FX0NP VU5UXzJfMQkweDJjCisjZGVmaW5lIEFTUF9SWF9DVFJMX0ZMVVNIXzJfMQkJCTB4MzAKKyNkZWZp bmUgQVNQX1JYX0NUUkxfRkJfUlhfRklGT19ERVBUSF8yXzEJMHgzOAorCisjZGVmaW5lIEFTUF9S WF9GSUxURVJfT0ZGU0VUCQkJMHg4MDAwMAorI2RlZmluZSAgQVNQX1JYX0ZJTFRFUl9CTEtfQ1RS TAkJCTB4MAorI2RlZmluZSAgIEFTUF9SWF9GSUxURVJfT1BVVF9FTgkJCUJJVCgwKQorI2RlZmlu ZSAgIEFTUF9SWF9GSUxURVJfTURBX0VOCQkJQklUKDEpCisjZGVmaW5lICAgQVNQX1JYX0ZJTFRF Ul9MTlJfTUQJCQlCSVQoMikKKyNkZWZpbmUgICBBU1BfUlhfRklMVEVSX0dFTl9XS19FTgkJQklU KDMpCisjZGVmaW5lICAgQVNQX1JYX0ZJTFRFUl9HRU5fV0tfQ0xSCQlCSVQoNCkKKyNkZWZpbmUg ICBBU1BfUlhfRklMVEVSX05UX0ZMVF9FTgkJQklUKDUpCisjZGVmaW5lICBBU1BfUlhfRklMVEVS X01EQV9DRkcoc2VsKQkJKCgoc2VsKSAqIDB4MTQpICsgMHgxMDApCisjZGVmaW5lICAgQVNQX1JY X0ZJTFRFUl9NREFfQ0ZHX0VOX1NISUZUCTgKKyNkZWZpbmUgICBBU1BfUlhfRklMVEVSX01EQV9D RkdfVU1DX1NFTChzZWwpCSgoc2VsKSA+IDEgPyBCSVQoMTcpIDogXAorCQkJCQkJIEJJVCgoc2Vs KSArIDkpKQorI2RlZmluZSAgQVNQX1JYX0ZJTFRFUl9NREFfUEFUX0goc2VsKQkJKCgoc2VsKSAq IDB4MTQpICsgMHgxMDQpCisjZGVmaW5lICBBU1BfUlhfRklMVEVSX01EQV9QQVRfTChzZWwpCQko KChzZWwpICogMHgxNCkgKyAweDEwOCkKKyNkZWZpbmUgIEFTUF9SWF9GSUxURVJfTURBX01TS19I KHNlbCkJCSgoKHNlbCkgKiAweDE0KSArIDB4MTBjKQorI2RlZmluZSAgQVNQX1JYX0ZJTFRFUl9N REFfTVNLX0woc2VsKQkJKCgoc2VsKSAqIDB4MTQpICsgMHgxMTApCisjZGVmaW5lICBBU1BfUlhf RklMVEVSX01EQV9DRkcoc2VsKQkJKCgoc2VsKSAqIDB4MTQpICsgMHgxMDApCisjZGVmaW5lICBB U1BfUlhfRklMVEVSX01EQV9QQVRfSChzZWwpCQkoKChzZWwpICogMHgxNCkgKyAweDEwNCkKKyNk ZWZpbmUgIEFTUF9SWF9GSUxURVJfTURBX1BBVF9MKHNlbCkJCSgoKHNlbCkgKiAweDE0KSArIDB4 MTA4KQorI2RlZmluZSAgQVNQX1JYX0ZJTFRFUl9NREFfTVNLX0goc2VsKQkJKCgoc2VsKSAqIDB4 MTQpICsgMHgxMGMpCisjZGVmaW5lICBBU1BfUlhfRklMVEVSX01EQV9NU0tfTChzZWwpCQkoKChz ZWwpICogMHgxNCkgKyAweDExMCkKKyNkZWZpbmUgIEFTUF9SWF9GSUxURVJfTkVUX0NGRyhzZWwp CQkoKChzZWwpICogMHhhMDQpICsgMHg0MDApCisjZGVmaW5lICAgQVNQX1JYX0ZJTFRFUl9ORVRf Q0ZHX0NIKHNlbCkJCSgoc2VsKSA8PCAwKQorI2RlZmluZSAgIEFTUF9SWF9GSUxURVJfTkVUX0NG R19FTgkJQklUKDkpCisjZGVmaW5lICAgQVNQX1JYX0ZJTFRFUl9ORVRfQ0ZHX0wyX0VOCQlCSVQo MTApCisjZGVmaW5lICAgQVNQX1JYX0ZJTFRFUl9ORVRfQ0ZHX0wzX0VOCQlCSVQoMTEpCisjZGVm aW5lICAgQVNQX1JYX0ZJTFRFUl9ORVRfQ0ZHX0w0X0VOCQlCSVQoMTIpCisjZGVmaW5lICAgQVNQ X1JYX0ZJTFRFUl9ORVRfQ0ZHX0wzX0ZSTShzZWwpCSgoc2VsKSA8PCAxMykKKyNkZWZpbmUgICBB U1BfUlhfRklMVEVSX05FVF9DRkdfTDRfRlJNKHNlbCkJKChzZWwpIDw8IDE1KQorI2RlZmluZSAg IEFTUF9SWF9GSUxURVJfTkVUX0NGR19VTUMoc2VsKQlCSVQoKHNlbCkgKyAxOSkKKyNkZWZpbmUg ICBBU1BfUlhfRklMVEVSX05FVF9DRkdfRE1BX0VOCQlCSVQoMjcpCisKK2VudW0gYXNwX3J4X25l dF9maWx0ZXJfYmxvY2sgeworCUFTUF9SWF9GSUxURVJfTkVUX0wyID0zRCAwLAorCUFTUF9SWF9G SUxURVJfTkVUX0wzXzAsCisJQVNQX1JYX0ZJTFRFUl9ORVRfTDNfMSwKKwlBU1BfUlhfRklMVEVS X05FVF9MNCwKKwlBU1BfUlhfRklMVEVSX05FVF9CTE9DS19NQVgKK307CisKKyNkZWZpbmUgIEFT UF9SWF9GSUxURVJfTkVUX09GRlNFVF9NQVgJCTMyCisjZGVmaW5lICBBU1BfUlhfRklMVEVSX05F VF9QQVQoc2VsLCBibG9jaywgb2ZmKSBcCisJCSgoKHNlbCkgKiAweGEwNCkgKyAoKGJsb2NrKSAq IDB4MjAwKSArIChvZmYpICsgMHg2MDApCisjZGVmaW5lICBBU1BfUlhfRklMVEVSX05FVF9NQVNL KHNlbCwgYmxvY2ssIG9mZikgXAorCQkoKChzZWwpICogMHhhMDQpICsgKChibG9jaykgKiAweDIw MCkgKyAob2ZmKSArIDB4NzAwKQorCisjZGVmaW5lICBBU1BfUlhfRklMVEVSX05FVF9PRkZTRVQo c2VsKQkJKCgoc2VsKSAqIDB4YTA0KSArIDB4ZTAwKQorI2RlZmluZSAgIEFTUF9SWF9GSUxURVJf TkVUX09GRlNFVF9MMih2YWwpCSgodmFsKSA8PCAwKQorI2RlZmluZSAgIEFTUF9SWF9GSUxURVJf TkVUX09GRlNFVF9MM18wKHZhbCkJKCh2YWwpIDw8IDgpCisjZGVmaW5lICAgQVNQX1JYX0ZJTFRF Ul9ORVRfT0ZGU0VUX0wzXzEodmFsKQkoKHZhbCkgPDwgMTYpCisjZGVmaW5lICAgQVNQX1JYX0ZJ TFRFUl9ORVRfT0ZGU0VUX0w0KHZhbCkJKCh2YWwpIDw8IDI0KQorCisjZGVmaW5lIEFTUF9FRFBL VF9PRkZTRVQJCQkweDljMDAwCisjZGVmaW5lICBBU1BfRURQS1RfRU5BQkxFCQkJMHg0CisjZGVm aW5lICAgQVNQX0VEUEtUX0VOQUJMRV9FTgkJCUJJVCgwKQorI2RlZmluZSAgQVNQX0VEUEtUX0hE Ul9DRkcJCQkweGMKKyNkZWZpbmUgICBBU1BfRURQS1RfSERSX1NaX1NISUZUCQkyCisjZGVmaW5l ICAgQVNQX0VEUEtUX0hEUl9TWl8zMgkJCTAKKyNkZWZpbmUgICBBU1BfRURQS1RfSERSX1NaXzY0 CQkJMQorI2RlZmluZSAgIEFTUF9FRFBLVF9IRFJfU1pfOTYJCQkyCisjZGVmaW5lICAgQVNQX0VE UEtUX0hEUl9TWl8xMjgJCQkzCisjZGVmaW5lIEFTUF9FRFBLVF9CVVJTVF9CVUZfUFNDQUxfVE9V VAkJMHgxMAorI2RlZmluZSBBU1BfRURQS1RfQlVSU1RfQlVGX1dSSVRFX1RPVVQJCTB4MTQKKyNk ZWZpbmUgQVNQX0VEUEtUX0JVUlNUX0JVRl9SRUFEX1RPVVQJCTB4MTgKKyNkZWZpbmUgQVNQX0VE UEtUX1JYX1RTX0NPVU5URVIJCQkweDM4CisjZGVmaW5lICBBU1BfRURQS1RfRU5ESQkJCQkweDQ4 CisjZGVmaW5lICAgQVNQX0VEUEtUX0VORElfREVTQ19TSElGVAkJOAorI2RlZmluZSAgIEFTUF9F RFBLVF9FTkRJX05PX0JUX1NXUAkJMAorI2RlZmluZSAgIEFTUF9FRFBLVF9FTkRJX0JUX1NXUF9X RAkJMQorI2RlZmluZSBBU1BfRURQS1RfUlhfUEtUX0NOVAkJCTB4MTM4CisjZGVmaW5lIEFTUF9F RFBLVF9IRFJfRVhUUl9DTlQJCQkweDEzYworI2RlZmluZSBBU1BfRURQS1RfSERSX09VVF9DTlQJ CQkweDE0MAorCisjZGVmaW5lIEFTUF9DVFJMCQkJCTB4MTAxMDAwCisjZGVmaW5lICBBU1BfQ1RS TF9BU1BfU1dfSU5JVAkJCTB4MDQKKyNkZWZpbmUgICBBU1BfQ1RSTF9BU1BfU1dfSU5JVF9BQ1BV U1NfQ09SRQlCSVQoMCkKKyNkZWZpbmUgICBBU1BfQ1RSTF9BU1BfU1dfSU5JVF9BU1BfVFgJCUJJ VCgxKQorI2RlZmluZSAgIEFTUF9DVFJMX0FTUF9TV19JTklUX0FTX1JYCQlCSVQoMikKKyNkZWZp bmUgICBBU1BfQ1RSTF9BU1BfU1dfSU5JVF9BU1BfUkdNSUlfVU1BQzAJQklUKDMpCisjZGVmaW5l ICAgQVNQX0NUUkxfQVNQX1NXX0lOSVRfQVNQX1JHTUlJX1VNQUMxCUJJVCg0KQorI2RlZmluZSAg IEFTUF9DVFJMX0FTUF9TV19JTklUX0FTUF9YTUVNSUYJQklUKDUpCisjZGVmaW5lICBBU1BfQ1RS TF9DTE9DS19DVFJMCQkJMHgwNAorI2RlZmluZSAgIEFTUF9DVFJMX0NMT0NLX0NUUkxfQVNQX1RY X0RJU0FCTEUJQklUKDApCisjZGVmaW5lICAgQVNQX0NUUkxfQ0xPQ0tfQ1RSTF9BU1BfUlhfRElT QUJMRQlCSVQoMSkKKyNkZWZpbmUgICBBU1BfQ1RSTF9DTE9DS19DVFJMX0FTUF9SR01JSV9TSElG VAkyCisjZGVmaW5lICAgQVNQX0NUUkxfQ0xPQ0tfQ1RSTF9BU1BfUkdNSUlfTUFTSwkoMHg3IDw8 IEFTUF9DVFJMX0NMT0NLX0NUUkxfQT0KU1BfUkdNSUlfU0hJRlQpCisjZGVmaW5lICAgQVNQX0NU UkxfQ0xPQ0tfQ1RSTF9BU1BfUkdNSUlfRElTKHgpCUJJVChBU1BfQ1RSTF9DTE9DS19DVFJMX0FT UD0KX1JHTUlJX1NISUZUICsgKHgpKQorI2RlZmluZSAgIEFTUF9DVFJMX0NMT0NLX0NUUkxfQVNQ X0FMTF9ESVNBQkxFCUdFTk1BU0soNCwgMCkKKyNkZWZpbmUgIEFTUF9DVFJMX0NPUkVfQ0xPQ0tf U0VMRUNUCQkweDA4CisjZGVmaW5lICAgQVNQX0NUUkxfQ09SRV9DTE9DS19TRUxFQ1RfTUFJTglC SVQoMCkKKyNkZWZpbmUgIEFTUF9DVFJMX1NDUkFUQ0hfMAkJCTB4MGMKKworc3RydWN0IGJjbWFz cF90eF9jYiB7CisJc3RydWN0IHNrX2J1ZmYJCSpza2I7CisJdW5zaWduZWQgaW50CQlieXRlc19z ZW50OworCWJvb2wJCQlsYXN0OworCisJREVGSU5FX0RNQV9VTk1BUF9BRERSKGRtYV9hZGRyKTsK KwlERUZJTkVfRE1BX1VOTUFQX0xFTihkbWFfbGVuKTsKK307CisKK3N0cnVjdCBiY21hc3BfcmVz IHsKKwkvKiBQZXIgaW50ZXJmYWNlIHJlc291cmNlcyAqLworCS8qIFBvcnQgKi8KKwl2b2lkIF9f aW9tZW0JCSp1bWFjOworCXZvaWQgX19pb21lbQkJKnVtYWMyZmI7CisJdm9pZCBfX2lvbWVtCQkq cmdtaWk7CisKKwkvKiBUWCBzbG93cGF0aC9jb25maWd1cmF0aW9uICovCisJdm9pZCBfX2lvbWVt CQkqdHhfc3BiX2N0cmw7CisJdm9pZCBfX2lvbWVtCQkqdHhfc3BiX3RvcDsKKwl2b2lkIF9faW9t ZW0JCSp0eF9lcGt0X2NvcmU7CisJdm9pZCBfX2lvbWVtCQkqdHhfcGF1c2VfY3RybDsKK307CisK KyNkZWZpbmUgREVTQ19BRERSKHgpCQkoKHgpICYgR0VOTUFTS19VTEwoMzksIDApKQorI2RlZmlu ZSBERVNDX0ZMQUdTKHgpCQkoKHgpICYgR0VOTUFTS19VTEwoNjMsIDQwKSkKKworc3RydWN0IGJj bWFzcF9kZXNjIHsKKwl1NjQJCWJ1ZjsKKwkjZGVmaW5lIERFU0NfQ0hLU1VNCUJJVF9VTEwoNDAp CisJI2RlZmluZSBERVNDX0NSQ19FUlIJQklUX1VMTCg0MSkKKwkjZGVmaW5lIERFU0NfUlhfU1lN X0VSUglCSVRfVUxMKDQyKQorCSNkZWZpbmUgREVTQ19OT19PQ1RfQUxOIEJJVF9VTEwoNDMpCisJ I2RlZmluZSBERVNDX1BLVF9UUlVDCUJJVF9VTEwoNDQpCisJLyogIDM5OjAgKFRYL1JYKSBiaXRz IDAtMzkgb2YgYnVmIGFkZHIKKwkgKiAgICA0MCAoUlgpIGNoZWNrc3VtCisJICogICAgNDEgKFJY KSBjcmNfZXJyb3IKKwkgKiAgICA0MiAoUlgpIHJ4X3N5bWJvbF9lcnJvcgorCSAqICAgIDQzIChS WCkgbm9uX29jdGV0X2FsaWduZWQKKwkgKiAgICA0NCAoUlgpIHBrdF90cnVuY2F0ZWQKKwkgKiAg ICA0NSBSZXNlcnZlZAorCSAqIDU2OjQ2IChSWCkgbWFjX2ZpbHRlcl9pZAorCSAqIDYwOjU3IChS WCkgcnhfcG9ydF9udW0gKDAtdW5pY21hYzAsIDEtdW5pbWFjMSkKKwkgKiAgICA2MSBSZXNlcnZl ZAorCSAqIDYzOjYyIChUWCkgZm9yd2FyZCBDUkMsIG92ZXJ3cml0ZSBDUkMKKwkgKi8KKwl1MzIJ CXNpemU7CisJdTMyCQlmbGFnczsKKwkjZGVmaW5lIERFU0NfSU5UX0VOICAgICBCSVQoMCkKKwkj ZGVmaW5lIERFU0NfU09GCUJJVCgxKQorCSNkZWZpbmUgREVTQ19FT0YJQklUKDIpCisJI2RlZmlu ZSBERVNDX0VQS1RfQ01EICAgQklUKDMpCisJI2RlZmluZSBERVNDX1NDUkFNX1NUICAgQklUKDgp CisJI2RlZmluZSBERVNDX1NDUkFNX0VORCAgQklUKDkpCisJI2RlZmluZSBERVNDX1BDUFAgICAg ICAgQklUKDEwKQorCSNkZWZpbmUgREVTQ19QUFBQICAgICAgIEJJVCgxMSkKKwkvKiAgICAgMCAo VFgpIHR4X2ludF9lbgorCSAqICAgICAxIChUWC9SWCkgU09GCisJICogICAgIDIgKFRYL1JYKSBF T0YKKwkgKiAgICAgMyAoVFgpIGVwa3RfY29tbWFuZAorCSAqICAgNjo0IChUWCkgUEEKKwkgKiAg ICAgNyAoVFgpIHBhdXNlIGF0IGRlc2MgZW5kCisJICogICAgIDggKFRYKSBzY3JhbV9zdGFydAor CSAqICAgICA5IChUWCkgc2NyYW1fZW5kCisJICogICAgMTAgKFRYKSBQQ1BQCisJICogICAgMTEg KFRYKSBQUFBQCisJICogMTQ6MTIgUmVzZXJ2ZWQKKwkgKiAgICAxNSAoVFgpIHBpZCBjaCBWYWxp ZAorCSAqIDE5OjE2IChUWCkgZGF0YV9wa3RfdHlwZQorCSAqIDMyOjIwIChUWCkgcGlkX2NoYW5u ZWwgKFJYKSBud19maWx0ZXJfaWQKKwkgKi8KK307CisKKy8qIFJ4L1R4IGNvbW1vbiBjb3VudGVy IGdyb3VwICovCitzdHJ1Y3QgYmNtYXNwX3BrdF9jb3VudGVycyB7CisJdTMyCWNudF82NDsJCS8q IFJPIFJlY2VpdmVkL1RyYW5zbWl0dGVkIDY0IGJ5dGVzIHBhY2tldCAqLworCXUzMgljbnRfMTI3 OwkvKiBSTyBSeC9UeCAxMjcgYnl0ZXMgcGFja2V0ICovCisJdTMyCWNudF8yNTU7CS8qIFJPIFJ4 L1R4IDY1LTI1NSBieXRlcyBwYWNrZXQgKi8KKwl1MzIJY250XzUxMTsJLyogUk8gUngvVHggMjU2 LTUxMSBieXRlcyBwYWNrZXQgKi8KKwl1MzIJY250XzEwMjM7CS8qIFJPIFJ4L1R4IDUxMi0xMDIz IGJ5dGVzIHBhY2tldCAqLworCXUzMgljbnRfMTUxODsJLyogUk8gUngvVHggMTAyNC0xNTE4IGJ5 dGVzIHBhY2tldCAqLworCXUzMgljbnRfbWd2OwkvKiBSTyBSeC9UeCAxNTE5LTE1MjIgZ29vZCBW TEFOIHBhY2tldCAqLworCXUzMgljbnRfMjA0NzsJLyogUk8gUngvVHggMTUyMi0yMDQ3IGJ5dGVz IHBhY2tldCovCisJdTMyCWNudF80MDk1OwkvKiBSTyBSeC9UeCAyMDQ4LTQwOTUgYnl0ZXMgcGFj a2V0Ki8KKwl1MzIJY250XzkyMTY7CS8qIFJPIFJ4L1R4IDQwOTYtOTIxNiBieXRlcyBwYWNrZXQq LworfTsKKworLyogUlNWLCBSZWNlaXZlIFN0YXR1cyBWZWN0b3IgKi8KK3N0cnVjdCBiY21hc3Bf cnhfY291bnRlcnMgeworCXN0cnVjdCAgYmNtYXNwX3BrdF9jb3VudGVycyBwa3RfY250OworCXUz Mglwa3Q7CQkvKiBSTyAoMHg0MjgpIFJlY2VpdmVkIHBrdCBjb3VudCovCisJdTMyCWJ5dGVzOwkJ LyogUk8gUmVjZWl2ZWQgYnl0ZSBjb3VudCAqLworCXUzMgltY2E7CQkvKiBSTyAjIG9mIFJlY2Vp dmVkIG11bHRpY2FzdCBwa3QgKi8KKwl1MzIJYmNhOwkJLyogUk8gIyBvZiBSZWNlaXZlIGJyb2Fk Y2FzdCBwa3QgKi8KKwl1MzIJZmNzOwkJLyogUk8gIyBvZiBSZWNlaXZlZCBGQ1MgZXJyb3IgICov CisJdTMyCWNmOwkJLyogUk8gIyBvZiBSZWNlaXZlZCBjb250cm9sIGZyYW1lIHBrdCovCisJdTMy CXBmOwkJLyogUk8gIyBvZiBSZWNlaXZlZCBwYXVzZSBmcmFtZSBwa3QgKi8KKwl1MzIJdW87CQkv KiBSTyAjIG9mIHVua25vd24gb3AgY29kZSBwa3QgKi8KKwl1MzIJYWxuOwkJLyogUk8gIyBvZiBh bGlnbm1lbnQgZXJyb3IgY291bnQgKi8KKwl1MzIJZmxyOwkJLyogUk8gIyBvZiBmcmFtZSBsZW5n dGggb3V0IG9mIHJhbmdlIGNvdW50ICovCisJdTMyCWNkZTsJCS8qIFJPICMgb2YgY29kZSBlcnJv ciBwa3QgKi8KKwl1MzIJZmNyOwkJLyogUk8gIyBvZiBjYXJyaWVyIHNlbnNlIGVycm9yIHBrdCAq LworCXUzMglvdnI7CQkvKiBSTyAjIG9mIG92ZXJzaXplIHBrdCovCisJdTMyCWpicjsJCS8qIFJP ICMgb2YgamFiYmVyIGNvdW50ICovCisJdTMyCW10dWU7CQkvKiBSTyAjIG9mIE1UVSBlcnJvciBw a3QqLworCXUzMglwb2s7CQkvKiBSTyAjIG9mIFJlY2VpdmVkIGdvb2QgcGt0ICovCisJdTMyCXVj OwkJLyogUk8gIyBvZiB1bmljYXN0IHBrdCAqLworCXUzMglwcHA7CQkvKiBSTyAjIG9mIFBQUCBw a3QgKi8KKwl1MzIJcmNyYzsJCS8qIFJPICgweDQ3MCksIyBvZiBDUkMgbWF0Y2ggcGt0ICovCit9 OworCisvKiBUU1YsIFRyYW5zbWl0IFN0YXR1cyBWZWN0b3IgKi8KK3N0cnVjdCBiY21hc3BfdHhf Y291bnRlcnMgeworCXN0cnVjdCBiY21hc3BfcGt0X2NvdW50ZXJzIHBrdF9jbnQ7CisJdTMyCXBr dHM7CQkvKiBSTyAoMHg0YTgpIFRyYW5zbWl0dGVkIHBrdCAqLworCXUzMgltY2E7CQkvKiBSTyAj IG9mIHhtaXRlZCBtdWx0aWNhc3QgcGt0ICovCisJdTMyCWJjYTsJCS8qIFJPICMgb2YgeG1pdGVk IGJyb2FkY2FzdCBwa3QgKi8KKwl1MzIJcGY7CQkvKiBSTyAjIG9mIHhtaXRlZCBwYXVzZSBmcmFt ZSBjb3VudCAqLworCXUzMgljZjsJCS8qIFJPICMgb2YgeG1pdGVkIGNvbnRyb2wgZnJhbWUgY291 bnQgKi8KKwl1MzIJZmNzOwkJLyogUk8gIyBvZiB4bWl0ZWQgRkNTIGVycm9yIGNvdW50ICovCisJ dTMyCW92cjsJCS8qIFJPICMgb2YgeG1pdGVkIG92ZXJzaXplIHBrdCAqLworCXUzMglkcmY7CQkv KiBSTyAjIG9mIHhtaXRlZCBkZWZlcnJhbCBwa3QgKi8KKwl1MzIJZWRmOwkJLyogUk8gIyBvZiB4 bWl0ZWQgRXhjZXNzaXZlIGRlZmVycmFsIHBrdCovCisJdTMyCXNjbDsJCS8qIFJPICMgb2YgeG1p dGVkIHNpbmdsZSBjb2xsaXNpb24gcGt0ICovCisJdTMyCW1jbDsJCS8qIFJPICMgb2YgeG1pdGVk IG11bHRpcGxlIGNvbGxpc2lvbiBwa3QqLworCXUzMglsY2w7CQkvKiBSTyAjIG9mIHhtaXRlZCBs YXRlIGNvbGxpc2lvbiBwa3QgKi8KKwl1MzIJZWNsOwkJLyogUk8gIyBvZiB4bWl0ZWQgZXhjZXNz aXZlIGNvbGxpc2lvbiBwa3QqLworCXUzMglmcmc7CQkvKiBSTyAjIG9mIHhtaXRlZCBmcmFnbWVu dHMgcGt0Ki8KKwl1MzIJbmNsOwkJLyogUk8gIyBvZiB4bWl0ZWQgdG90YWwgY29sbGlzaW9uIGNv dW50ICovCisJdTMyCWpicjsJCS8qIFJPICMgb2YgeG1pdGVkIGphYmJlciBjb3VudCovCisJdTMy CWJ5dGVzOwkJLyogUk8gIyBvZiB4bWl0ZWQgYnl0ZSBjb3VudCAqLworCXUzMglwb2s7CQkvKiBS TyAjIG9mIHhtaXRlZCBnb29kIHBrdCAqLworCXUzMgl1YzsJCS8qIFJPICgweDB4NGYwKSMgb2Yg eG1pdGVkIHVuaXRjYXN0IHBrdCAqLworfTsKKworc3RydWN0IGJjbWFzcF9taWJfY291bnRlcnMg eworCXN0cnVjdCBiY21hc3BfcnhfY291bnRlcnMgcng7CisJc3RydWN0IGJjbWFzcF90eF9jb3Vu dGVycyB0eDsKKwl1MzIJcnhfcnVudF9jbnQ7CisJdTMyCXJ4X3J1bnRfZmNzOworCXUzMglyeF9y dW50X2Zjc19hbGlnbjsKKwl1MzIJcnhfcnVudF9ieXRlczsKKwl1MzIJZWRwa3RfdHM7CisJdTMy CWVkcGt0X3J4X3BrdF9jbnQ7CisJdTMyCWVkcGt0X2hkcl9leHRfY250OworCXUzMgllZHBrdF9o ZHJfb3V0X2NudDsKKwl1MzIJdW1hY19mcm1fY250OworCXUzMglmYl9mcm1fY250OworCXUzMglm Yl9vdXRfZnJtX2NudDsKKwl1MzIJZmJfZmlsdF9vdXRfZnJtX2NudDsKKwl1MzIJZmJfcnhfZmlm b19kZXB0aDsKKwl1MzIJYWxsb2NfcnhfYnVmZl9mYWlsZWQ7CisJdTMyCWFsbG9jX3J4X3NrYl9m YWlsZWQ7CisJdTMyCXJ4X2RtYV9mYWlsZWQ7CisJdTMyCXR4X2RtYV9mYWlsZWQ7CisJdTMyCW1j X2ZpbHRlcnNfZnVsbF9jbnQ7CisJdTMyCXVjX2ZpbHRlcnNfZnVsbF9jbnQ7CisJdTMyCWZpbHRl cnNfY29tYmluZV9jbnQ7CisJdTMyCXByb21pc2NfZmlsdGVyc19jbnQ7CisJdTMyCXR4X3JlYWxs b2Nfb2ZmbG9hZF9mYWlsZWQ7CisJdTMyCXR4X3JlYWxsb2Nfb2ZmbG9hZDsKK307CisKK3N0cnVj dCBiY21hc3BfaW50ZjsKKworc3RydWN0IGJjbWFzcF9pbnRmX29wcyB7CisJdW5zaWduZWQgbG9u ZyAoKnJ4X2Rlc2NfcmVhZCkoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmKTsKKwl2b2lkICgqcnhf YnVmZmVyX3dyaXRlKShzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsIGRtYV9hZGRyX3QgYWRkcik7 CisJdm9pZCAoKnJ4X2Rlc2Nfd3JpdGUpKHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZiwgZG1hX2Fk ZHJfdCBhZGRyKTsKKwl1bnNpZ25lZCBsb25nICgqdHhfcmVhZCkoc3RydWN0IGJjbWFzcF9pbnRm ICppbnRmKTsKKwl2b2lkICgqdHhfd3JpdGUpKHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZiwgZG1h X2FkZHJfdCBhZGRyKTsKK307CisKK3N0cnVjdCBiY21hc3BfaW50ZiB7CisJc3RydWN0IG5ldF9k ZXZpY2UJKm5kZXY7CisJc3RydWN0IGJjbWFzcF9wcml2CSpwYXJlbnQ7CisKKwkvKiBBU1AgQ2gg Ki8KKwlpbnQJCQljaGFubmVsOworCWludAkJCXBvcnQ7CisJY29uc3Qgc3RydWN0IGJjbWFzcF9p bnRmX29wcwkqb3BzOworCisJc3RydWN0IG5hcGlfc3RydWN0CXR4X25hcGk7CisJLyogVFggcmlu Zywgc3RhcnRzIG9uIGEgbmV3IGNhY2hlbGluZSBib3VuZGFyeSAqLworCXZvaWQgX19pb21lbQkJ KnR4X3NwYl9kbWE7CisJaW50CQkJdHhfc3BiX2luZGV4OworCWludAkJCXR4X3NwYl9jbGVhbl9p bmRleDsKKwlzdHJ1Y3QgYmNtYXNwX2Rlc2MJKnR4X3NwYl9jcHU7CisJZG1hX2FkZHJfdAkJdHhf c3BiX2RtYV9hZGRyOworCWRtYV9hZGRyX3QJCXR4X3NwYl9kbWFfdmFsaWQ7CisJZG1hX2FkZHJf dAkJdHhfc3BiX2RtYV9yZWFkOworCXN0cnVjdCBiY21hc3BfdHhfY2IJKnR4X2NiczsKKwkvKiBU eCByaW5nIGxvY2sgKi8KKwlzcGlubG9ja190CQl0eF9sb2NrOworCisJLyogUlggcmluZywgc3Rh cnRzIG9uIGEgbmV3IGNhY2hlbGluZSBib3VuZGFyeSAqLworCXZvaWQgX19pb21lbQkJKnJ4X2Vk cGt0X2NmZzsKKwl2b2lkIF9faW9tZW0JCSpyeF9lZHBrdF9kbWE7CisJaW50CQkJcnhfZWRwa3Rf aW5kZXg7CisJaW50CQkJcnhfYnVmX29yZGVyOworCXN0cnVjdCBiY21hc3BfZGVzYwkqcnhfZWRw a3RfY3B1OworCWRtYV9hZGRyX3QJCXJ4X2VkcGt0X2RtYV9hZGRyOworCWRtYV9hZGRyX3QJCXJ4 X2VkcGt0X2RtYV9yZWFkOworCisJLyogUlggYnVmZmVyIHByZWZldGNoZXIgcmluZyovCisJdm9p ZAkJCSpyeF9yaW5nX2NwdTsKKwlkbWFfYWRkcl90CQlyeF9yaW5nX2RtYTsKKwlkbWFfYWRkcl90 CQlyeF9yaW5nX2RtYV92YWxpZDsKKwlzdHJ1Y3QgbmFwaV9zdHJ1Y3QJcnhfbmFwaTsKKworCXN0 cnVjdCBiY21hc3BfcmVzCXJlczsKKwl1bnNpZ25lZCBpbnQJCWNyY19md2Q7CisKKwkvKiBQSFkg ZGV2aWNlICovCisJc3RydWN0IGRldmljZV9ub2RlCSpwaHlfZG47CisJc3RydWN0IGRldmljZV9u b2RlCSpuZGV2X2RuOworCXBoeV9pbnRlcmZhY2VfdAkJcGh5X2ludGVyZmFjZTsKKwlib29sCQkJ aW50ZXJuYWxfcGh5OworCWludAkJCW9sZF9wYXVzZTsKKwlpbnQJCQlvbGRfbGluazsKKwlpbnQJ CQlvbGRfZHVwbGV4OworCisJdTMyCQkJbXNnX2VuYWJsZTsKKwkvKiBNSUIgY291bnRlcnMgKi8K KwlzdHJ1Y3QgYmNtYXNwX21pYl9jb3VudGVycyBtaWI7CisKKwkvKiBXYWtlLW9uLUxBTiAqLwor CXUzMgkJCXdvbG9wdHM7CisJdTgJCQlzb3Bhc3NbU09QQVNTX01BWF07CisJaW50CQkJd29sX2ly cTsKKwl1bnNpZ25lZCBpbnQJCXdvbF9pcnFfZW5hYmxlZDoxOworCisJc3RydWN0IGV0aHRvb2xf ZWVlCWVlZTsKK307CisKKyNkZWZpbmUgTlVNX05FVF9GSUxURVJTCQkJCTMyCitzdHJ1Y3QgYmNt YXNwX25ldF9maWx0ZXIgeworCXN0cnVjdCBldGh0b29sX3J4X2Zsb3dfc3BlYwlmczsKKworCWJv b2wJCQkJY2xhaW1lZDsKKwlib29sCQkJCXdha2VfZmlsdGVyOworCisJaW50CQkJCXBvcnQ7CisJ dW5zaWduZWQgaW50CQkJaHdfaW5kZXg7Cit9OworCisjZGVmaW5lIE5VTV9NREFfRklMVEVSUwkJ CQkzMgorc3RydWN0IGJjbWFzcF9tZGFfZmlsdGVyIHsKKwkvKiBDdXJyZW50IG93bmVyIG9mIHRo aXMgZmlsdGVyICovCisJaW50CQlwb3J0OworCWJvb2wJCWVuOworCXU4CQlhZGRyW0VUSF9BTEVO XTsKKwl1OAkJbWFza1tFVEhfQUxFTl07Cit9OworCitzdHJ1Y3QgYmNtYXNwX3ByaXY7CisKK3N0 cnVjdCBiY21hc3BfaHdfaW5mbyB7CisJdTMyCQlyeF9jdHJsX2ZsdXNoOworCXUzMgkJdW1hYzJm YjsKKwl1MzIJCXJ4X2N0cmxfZmJfb3V0X2ZyYW1lX2NvdW50OworCXUzMgkJcnhfY3RybF9mYl9m aWx0X291dF9mcmFtZV9jb3VudDsKKwl1MzIJCXJ4X2N0cmxfZmJfcnhfZmlmb19kZXB0aDsKK307 CisKK3N0cnVjdCBiY21hc3BfcGxhdF9kYXRhIHsKKwl2b2lkICgqaW5pdF93b2wpKHN0cnVjdCBi Y21hc3BfcHJpdiAqcHJpdik7CisJdm9pZCAoKmVuYWJsZV93b2wpKHN0cnVjdCBiY21hc3BfaW50 ZiAqaW50ZiwgYm9vbCBlbik7CisJdm9pZCAoKmRlc3Ryb3lfd29sKShzdHJ1Y3QgYmNtYXNwX3By aXYgKnByaXYpOworCXN0cnVjdCBiY21hc3BfaHdfaW5mbwkJKmh3X2luZm87Cit9OworCitzdHJ1 Y3QgYmNtYXNwX3ByaXYgeworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJCSpwZGV2OworCXN0cnVj dCBjbGsJCQkqY2xrOworCisJaW50CQkJCWlycTsKKwl1MzIJCQkJaXJxX21hc2s7CisKKwlpbnQJ CQkJd29sX2lycTsKKwl1bnNpZ25lZCBsb25nCQkJd29sX2lycV9lbmFibGVkX21hc2s7CisJLyog V29sIGxvY2sgKi8KKwlzdHJ1Y3QgbXV0ZXgJCQl3b2xfbG9jazsKKwl2b2lkICgqaW5pdF93b2wp KHN0cnVjdCBiY21hc3BfcHJpdiAqcHJpdik7CisJdm9pZCAoKmVuYWJsZV93b2wpKHN0cnVjdCBi Y21hc3BfaW50ZiAqaW50ZiwgYm9vbCBlbik7CisJdm9pZCAoKmRlc3Ryb3lfd29sKShzdHJ1Y3Qg YmNtYXNwX3ByaXYgKnByaXYpOworCisJdm9pZCBfX2lvbWVtCQkJKmJhc2U7CisJc3RydWN0CWJj bWFzcF9od19pbmZvCQkqaHdfaW5mbzsKKworCXVuc2lnbmVkIGludAkJCWludGZfY291bnQ7CisJ c3RydWN0IGJjbWFzcF9pbnRmCQkqKmludGZzOworCisJc3RydWN0IGJjbWFzcF9tZGFfZmlsdGVy CW1kYV9maWx0ZXJzW05VTV9NREFfRklMVEVSU107CisJdW5zaWduZWQgaW50CQkJZmlsdGVyc19j b3VudDsKKwkvKiBNQUMgZGVzdGluYXRpb24gYWRkcmVzcyBmaWx0ZXJzIGxvY2sgKi8KKwlzcGlu bG9ja190CQkJbWRhX2xvY2s7CisKKwkvKiBQcm90ZWN0cyBhY2Nlc3NlcyB0byBBU1BfQ1RSTF9D TE9DS19DVFJMICovCisJc3BpbmxvY2tfdAkJCWNsa19sb2NrOworCisJc3RydWN0IGJjbWFzcF9u ZXRfZmlsdGVyCW5ldF9maWx0ZXJzW05VTV9ORVRfRklMVEVSU107CisJLyogTWF4IGFtb3VudCBv ZiBmaWx0ZXJzIG1pbnVzIHJlc2VydmVkIGZpbHRlcnMgKi8KKwl1bnNpZ25lZCBpbnQJCQluZXRf ZmlsdGVyc19jb3VudF9tYXg7CisJLyogTmV0d29yayBmaWx0ZXIgbG9jayAqLworCXN0cnVjdCBt dXRleAkJCW5ldF9sb2NrOworfTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGJjbWFz cF9pbnRmX3J4X2Rlc2NfcmVhZChzdHJ1Y3QgYmNtYXNwX2ludGYgKmk9Cm50ZikKK3sKKwlyZXR1 cm4gaW50Zi0+b3BzLT5yeF9kZXNjX3JlYWQoaW50Zik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9p ZCBiY21hc3BfaW50Zl9yeF9idWZmZXJfd3JpdGUoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmLAor CQkJCQkgICAgICAgZG1hX2FkZHJfdCBhZGRyKQoreworCWludGYtPm9wcy0+cnhfYnVmZmVyX3dy aXRlKGludGYsIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYmNtYXNwX2ludGZfcnhf ZGVzY193cml0ZShzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsCisJCQkJCSAgICAgZG1hX2FkZHJf dCBhZGRyKQoreworCWludGYtPm9wcy0+cnhfZGVzY193cml0ZShpbnRmLCBhZGRyKTsKK30KKwor c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGJjbWFzcF9pbnRmX3R4X3JlYWQoc3RydWN0IGJj bWFzcF9pbnRmICppbnRmKQoreworCXJldHVybiBpbnRmLT5vcHMtPnR4X3JlYWQoaW50Zik7Cit9 CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBiY21hc3BfaW50Zl90eF93cml0ZShzdHJ1Y3QgYmNtYXNw X2ludGYgKmludGYsIGRtYV9hZGRyPQpfdCBhZGRyKQoreworCWludGYtPm9wcy0+dHhfd3JpdGUo aW50ZiwgYWRkcik7Cit9CisKKyNkZWZpbmUgX19CQ01BU1BfSU9fTUFDUk8obmFtZSwgbSkJCQkJ CVwKK3N0YXRpYyBpbmxpbmUgdTMyIG5hbWUjI19ybChzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYs IHUzMiBvZmYpCQlcCit7CQkJCQkJCQkJXAorCXUzMiByZWcgPTNEIHJlYWRsX3JlbGF4ZWQoaW50 Zi0+bSArIG9mZik7CQkJCVwKKwlyZXR1cm4gcmVnOwkJCQkJCQlcCit9CQkJCQkJCQkJXAorc3Rh dGljIGlubGluZSB2b2lkIG5hbWUjI193bChzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsIHUzMiB2 YWwsIHUzMiBvZmYpXAorewkJCQkJCQkJCVwKKwl3cml0ZWxfcmVsYXhlZCh2YWwsIGludGYtPm0g KyBvZmYpOwkJCQlcCit9CisKKyNkZWZpbmUgQkNNQVNQX0lPX01BQ1JPKG5hbWUpCQlfX0JDTUFT UF9JT19NQUNSTyhuYW1lLCByZXMubmFtZSkKKyNkZWZpbmUgQkNNQVNQX0ZQX0lPX01BQ1JPKG5h bWUpCV9fQkNNQVNQX0lPX01BQ1JPKG5hbWUsIG5hbWUpCisKK0JDTUFTUF9JT19NQUNSTyh1bWFj KTsKK0JDTUFTUF9JT19NQUNSTyh1bWFjMmZiKTsKK0JDTUFTUF9JT19NQUNSTyhyZ21paSk7CitC Q01BU1BfRlBfSU9fTUFDUk8odHhfc3BiX2RtYSk7CitCQ01BU1BfSU9fTUFDUk8odHhfc3BiX2N0 cmwpOworQkNNQVNQX0lPX01BQ1JPKHR4X3NwYl90b3ApOworQkNNQVNQX0lPX01BQ1JPKHR4X2Vw a3RfY29yZSk7CitCQ01BU1BfSU9fTUFDUk8odHhfcGF1c2VfY3RybCk7CitCQ01BU1BfRlBfSU9f TUFDUk8ocnhfZWRwa3RfZG1hKTsKK0JDTUFTUF9GUF9JT19NQUNSTyhyeF9lZHBrdF9jZmcpOwor CisjZGVmaW5lIF9fQkNNQVNQX0ZQX0lPX01BQ1JPX1EobmFtZSwgbSkJCQkJCVwKK3N0YXRpYyBp bmxpbmUgdTY0IG5hbWUjI19ycShzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsIHUzMiBvZmYpCQlc Cit7CQkJCQkJCQkJXAorCXU2NCByZWcgPTNEIHJlYWRxX3JlbGF4ZWQoaW50Zi0+bSArIG9mZik7 CQkJCVwKKwlyZXR1cm4gcmVnOwkJCQkJCQlcCit9CQkJCQkJCQkJXAorc3RhdGljIGlubGluZSB2 b2lkIG5hbWUjI193cShzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsIHU2NCB2YWwsIHUzMiBvZmYp XAorewkJCQkJCQkJCVwKKwl3cml0ZXFfcmVsYXhlZCh2YWwsIGludGYtPm0gKyBvZmYpOwkJCQlc Cit9CisKKyNkZWZpbmUgQkNNQVNQX0ZQX0lPX01BQ1JPX1EobmFtZSkJX19CQ01BU1BfRlBfSU9f TUFDUk9fUShuYW1lLCBuYW1lKQorCitCQ01BU1BfRlBfSU9fTUFDUk9fUSh0eF9zcGJfZG1hKTsK K0JDTUFTUF9GUF9JT19NQUNST19RKHJ4X2VkcGt0X2RtYSk7CitCQ01BU1BfRlBfSU9fTUFDUk9f UShyeF9lZHBrdF9jZmcpOworCisjZGVmaW5lIFBLVF9PRkZMT0FEX05PUAkJCSgwIDw8IDI4KQor I2RlZmluZSBQS1RfT0ZGTE9BRF9IRFJfT1AJCSgxIDw8IDI4KQorI2RlZmluZSAgUEtUX09GRkxP QURfSERSX1dSQkFDSwkJQklUKDE5KQorI2RlZmluZSAgUEtUX09GRkxPQURfSERSX0NPVU5UKHgp CSgoeCkgPDwgMTYpCisjZGVmaW5lICBQS1RfT0ZGTE9BRF9IRFJfU0laRV8xKHgpCSgoeCkgPDwg NCkKKyNkZWZpbmUgIFBLVF9PRkZMT0FEX0hEUl9TSVpFXzIoeCkJKHgpCisjZGVmaW5lICBQS1Rf T0ZGTE9BRF9IRFIyX1NJWkVfMih4KQkoKHgpIDw8IDI0KQorI2RlZmluZSAgUEtUX09GRkxPQURf SERSMl9TSVpFXzMoeCkJKCh4KSA8PCAxMikKKyNkZWZpbmUgIFBLVF9PRkZMT0FEX0hEUjJfU0la RV80KHgpCSh4KQorI2RlZmluZSBQS1RfT0ZGTE9BRF9FUEtUX09QCQkoMiA8PCAyOCkKKyNkZWZp bmUgIFBLVF9PRkZMT0FEX0VQS1RfV1JCQUNLCUJJVCgyMykKKyNkZWZpbmUgIFBLVF9PRkZMT0FE X0VQS1RfSVAoeCkJCSgoeCkgPDwgMjEpCisjZGVmaW5lICBQS1RfT0ZGTE9BRF9FUEtUX1RQKHgp CQkoKHgpIDw8IDE5KQorI2RlZmluZSAgUEtUX09GRkxPQURfRVBLVF9MRU4oeCkJKCh4KSA8PCAx NikKKyNkZWZpbmUgIFBLVF9PRkZMT0FEX0VQS1RfQ1NVTV9MMwlCSVQoMTUpCisjZGVmaW5lICBQ S1RfT0ZGTE9BRF9FUEtUX0NTVU1fTDIJQklUKDE0KQorI2RlZmluZSAgUEtUX09GRkxPQURfRVBL VF9JRCh4KQkJKCh4KSA8PCAxMikKKyNkZWZpbmUgIFBLVF9PRkZMT0FEX0VQS1RfU0VRKHgpCSgo eCkgPDwgMTApCisjZGVmaW5lICBQS1RfT0ZGTE9BRF9FUEtUX1RTKHgpCQkoKHgpIDw8IDgpCisj ZGVmaW5lICBQS1RfT0ZGTE9BRF9FUEtUX0JMT0MoeCkJKHgpCisjZGVmaW5lIFBLVF9PRkZMT0FE X0VORF9PUAkJKDcgPDwgMjgpCisKK3N0cnVjdCBiY21hc3BfcGt0X29mZmxvYWQgeworCXUzMgkJ bm9wOworCXUzMgkJaGVhZGVyOworCXUzMgkJaGVhZGVyMjsKKwl1MzIJCWVwa3Q7CisJdTMyCQll bmQ7Cit9OworCisjZGVmaW5lIEJDTUFTUF9DT1JFX0lPX01BQ1JPKG5hbWUsIG9mZnNldCkJCQkJ XAorc3RhdGljIGlubGluZSB1MzIgbmFtZSMjX2NvcmVfcmwoc3RydWN0IGJjbWFzcF9wcml2ICpw cml2LAkJXAorCQkJCSB1MzIgb2ZmKQkJCQlcCit7CQkJCQkJCQkJXAorCXUzMiByZWcgPTNEIHJl YWRsX3JlbGF4ZWQocHJpdi0+YmFzZSArIChvZmZzZXQpICsgb2ZmKTsJCVwKKwlyZXR1cm4gcmVn OwkJCQkJCQlcCit9CQkJCQkJCQkJXAorc3RhdGljIGlubGluZSB2b2lkIG5hbWUjI19jb3JlX3ds KHN0cnVjdCBiY21hc3BfcHJpdiAqcHJpdiwJCVwKKwkJCQkgIHUzMiB2YWwsIHUzMiBvZmYpCQkJ XAorewkJCQkJCQkJCVwKKwl3cml0ZWxfcmVsYXhlZCh2YWwsIHByaXYtPmJhc2UgKyAob2Zmc2V0 KSArIG9mZik7CQlcCit9CisKK0JDTUFTUF9DT1JFX0lPX01BQ1JPKGludHIyLCBBU1BfSU5UUjJf T0ZGU0VUKTsKK0JDTUFTUF9DT1JFX0lPX01BQ1JPKHdha2V1cF9pbnRyMiwgQVNQX1dBS0VVUF9J TlRSMl9PRkZTRVQpOworQkNNQVNQX0NPUkVfSU9fTUFDUk8odHhfYW5hbHl0aWNzLCBBU1BfVFhf QU5BTFlUSUNTX09GRlNFVCk7CitCQ01BU1BfQ09SRV9JT19NQUNSTyhyeF9hbmFseXRpY3MsIEFT UF9SWF9BTkFMWVRJQ1NfT0ZGU0VUKTsKK0JDTUFTUF9DT1JFX0lPX01BQ1JPKHJ4X2N0cmwsIEFT UF9SWF9DVFJMX09GRlNFVCk7CitCQ01BU1BfQ09SRV9JT19NQUNSTyhyeF9maWx0ZXIsIEFTUF9S WF9GSUxURVJfT0ZGU0VUKTsKK0JDTUFTUF9DT1JFX0lPX01BQ1JPKHJ4X2VkcGt0LCBBU1BfRURQ S1RfT0ZGU0VUKTsKK0JDTUFTUF9DT1JFX0lPX01BQ1JPKGN0cmwsIEFTUF9DVFJMKTsKKworc3Ry dWN0IGJjbWFzcF9pbnRmICpiY21hc3BfaW50ZXJmYWNlX2NyZWF0ZShzdHJ1Y3QgYmNtYXNwX3By aXYgKnByaXYsCisJCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5kZXZfZG4pOworCit2b2lk IGJjbWFzcF9pbnRlcmZhY2VfZGVzdHJveShzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsIGJvb2wg dW5yZWdpc3Rlcik7CisKK3ZvaWQgYmNtYXNwX2VuYWJsZV90eF9pcnEoc3RydWN0IGJjbWFzcF9p bnRmICppbnRmLCBpbnQgZW4pOworCit2b2lkIGJjbWFzcF9lbmFibGVfcnhfaXJxKHN0cnVjdCBi Y21hc3BfaW50ZiAqaW50ZiwgaW50IGVuKTsKKwordm9pZCBiY21hc3BfZmx1c2hfcnhfcG9ydChz dHJ1Y3QgYmNtYXNwX2ludGYgKmludGYpOworCitleHRlcm4gY29uc3Qgc3RydWN0IGV0aHRvb2xf b3BzIGJjbWFzcF9ldGh0b29sX29wczsKKworaW50IGJjbWFzcF9pbnRlcmZhY2Vfc3VzcGVuZChz dHJ1Y3QgYmNtYXNwX2ludGYgKmludGYpOworCitpbnQgYmNtYXNwX2ludGVyZmFjZV9yZXN1bWUo c3RydWN0IGJjbWFzcF9pbnRmICppbnRmKTsKKwordm9pZCBiY21hc3Bfc2V0X3Byb21pc2Moc3Ry dWN0IGJjbWFzcF9pbnRmICppbnRmLCBib29sIGVuKTsKKwordm9pZCBiY21hc3Bfc2V0X2FsbG11 bHRpKHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZiwgYm9vbCBlbik7CisKK3ZvaWQgYmNtYXNwX3Nl dF9icm9hZChzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsIGJvb2wgZW4pOworCit2b2lkIGJjbWFz cF9zZXRfb2FkZHIoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmLCBjb25zdCB1bnNpZ25lZCBjaGFy ICphZGRyLAorCQkgICAgICBib29sIGVuKTsKKworaW50IGJjbWFzcF9zZXRfZW5fbWRhX2ZpbHRl cihzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsIHVuc2lnbmVkIGNoYXIgKmFkZHIsCisJCQkgICAg IHVuc2lnbmVkIGNoYXIgKm1hc2spOworCit2b2lkIGJjbWFzcF9kaXNhYmxlX2FsbF9maWx0ZXJz KHN0cnVjdCBiY21hc3BfaW50ZiAqaW50Zik7CisKK3ZvaWQgYmNtYXNwX2NvcmVfY2xvY2tfc2V0 X2ludGYoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmLCBib29sIGVuKTsKKworc3RydWN0IGJjbWFz cF9uZXRfZmlsdGVyICpiY21hc3BfbmV0ZmlsdF9nZXRfaW5pdChzdHJ1Y3QgYmNtYXNwX2ludGYg KmludGYsCisJCQkJCQkgIGludCBsb2MsIGJvb2wgd2FrZV9maWx0ZXIsCisJCQkJCQkgIGJvb2wg aW5pdCk7CisKK2ludCBiY21hc3BfbmV0ZmlsdF9jaGVja19kdXAoc3RydWN0IGJjbWFzcF9pbnRm ICppbnRmLAorCQkJICAgICBzdHJ1Y3QgZXRodG9vbF9yeF9mbG93X3NwZWMgKmZzKTsKKwordm9p ZCBiY21hc3BfbmV0ZmlsdF9yZWxlYXNlKHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZiwKKwkJCSAg ICBzdHJ1Y3QgYmNtYXNwX25ldF9maWx0ZXIgKm5maWx0KTsKKworaW50IGJjbWFzcF9uZXRmaWx0 X2dldF9hY3RpdmUoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmKTsKKwordm9pZCBiY21hc3BfbmV0 ZmlsdF9nZXRfYWxsX2FjdGl2ZShzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsIHUzMiAqcnVsZV9s b2M9CnMsCisJCQkJICAgdTMyICpydWxlX2NudCk7CisKK3ZvaWQgYmNtYXNwX25ldGZpbHRfc3Vz cGVuZChzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYpOworCit2b2lkIGJjbWFzcF9lZWVfZW5hYmxl X3NldChzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsIGJvb2wgZW5hYmxlKTsKKyNlbmRpZgpkaWZm IC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9iY21hc3BfZXRodG9v bC5jIGIvZHJpdmVycy89Cm5ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcF9ldGh0b29s LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4wYWYzZDQzYWUyMGUK LS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2Jj bWFzcF9ldGh0b29sLmMKQEAgLTAsMCArMSw1NjggQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBHUEwtMi4wCisjZGVmaW5lIHByX2ZtdChmbXQpCQkJCSJiY21hc3BfZXRodG9vbDogIiBm bXQKKworI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGh0b29s Lmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZv cm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlICJiY21hc3AuaCIKKyNpbmNsdWRlICJiY21hc3BfaW50 Zl9kZWZzLmgiCisKKy8qIHN0YW5kYXJkIGV0aHRvb2wgc3VwcG9ydCBmdW5jdGlvbnMuICovCitl bnVtIGJjbWFzcF9zdGF0X3R5cGUgeworCUJDTUFTUF9TVEFUX05FVERFViA9M0QgLTEsCisJQkNN QVNQX1NUQVRfTUlCX1JYLAorCUJDTUFTUF9TVEFUX01JQl9UWCwKKwlCQ01BU1BfU1RBVF9SVU5U LAorCUJDTUFTUF9TVEFUX1JYX0VEUEtULAorCUJDTUFTUF9TVEFUX1JYX0NUUkwsCisJQkNNQVNQ X1NUQVRfU09GVCwKK307CisKK3N0cnVjdCBiY21hc3Bfc3RhdHMgeworCWNoYXIgc3RhdF9zdHJp bmdbRVRIX0dTVFJJTkdfTEVOXTsKKwlpbnQgc3RhdF9zaXplb2Y7CisJaW50IHN0YXRfb2Zmc2V0 OworCWVudW0gYmNtYXNwX3N0YXRfdHlwZSB0eXBlOworCS8qIHJlZ2lzdGVyIG9mZnNldCBmcm9t IGJhc2UgZm9yIG1pc2MgY291bnRlcnMgKi8KKwl1MTYgcmVnX29mZnNldDsKK307CisKKyNkZWZp bmUgU1RBVF9ORVRERVYobSkgeyBcCisJLnN0YXRfc3RyaW5nID0zRCBfX3N0cmluZ2lmeShtKSwg XAorCS5zdGF0X3NpemVvZiA9M0Qgc2l6ZW9mKCgoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKikw KS0+bSksIFwKKwkuc3RhdF9vZmZzZXQgPTNEIG9mZnNldG9mKHN0cnVjdCBuZXRfZGV2aWNlX3N0 YXRzLCBtKSwgXAorCS50eXBlID0zRCBCQ01BU1BfU1RBVF9ORVRERVYsIFwKK30KKworI2RlZmlu ZSBTVEFUX0JDTUFTUF9NSUIoc3RyLCBtLCBfdHlwZSkgeyBcCisJLnN0YXRfc3RyaW5nID0zRCBz dHIsIFwKKwkuc3RhdF9zaXplb2YgPTNEIHNpemVvZigoKHN0cnVjdCBiY21hc3BfaW50ZiAqKTAp LT5tKSwgXAorCS5zdGF0X29mZnNldCA9M0Qgb2Zmc2V0b2Yoc3RydWN0IGJjbWFzcF9pbnRmLCBt KSwgXAorCS50eXBlID0zRCBfdHlwZSwgXAorfQorCisjZGVmaW5lIFNUQVRfQkNNQVNQX09GRlNF VChzdHIsIG0sIF90eXBlLCBvZmZzZXQpIHsgXAorCS5zdGF0X3N0cmluZyA9M0Qgc3RyLCBcCisJ LnN0YXRfc2l6ZW9mID0zRCBzaXplb2YoKChzdHJ1Y3QgYmNtYXNwX2ludGYgKikwKS0+bSksIFwK Kwkuc3RhdF9vZmZzZXQgPTNEIG9mZnNldG9mKHN0cnVjdCBiY21hc3BfaW50ZiwgbSksIFwKKwku dHlwZSA9M0QgX3R5cGUsIFwKKwkucmVnX29mZnNldCA9M0Qgb2Zmc2V0LCBcCit9CisKKyNkZWZp bmUgU1RBVF9CQ01BU1BfTUlCX1JYKHN0ciwgbSkgXAorCVNUQVRfQkNNQVNQX01JQihzdHIsIG0s IEJDTUFTUF9TVEFUX01JQl9SWCkKKyNkZWZpbmUgU1RBVF9CQ01BU1BfTUlCX1RYKHN0ciwgbSkg XAorCVNUQVRfQkNNQVNQX01JQihzdHIsIG0sIEJDTUFTUF9TVEFUX01JQl9UWCkKKyNkZWZpbmUg U1RBVF9CQ01BU1BfUlVOVChzdHIsIG0pIFwKKwlTVEFUX0JDTUFTUF9NSUIoc3RyLCBtLCBCQ01B U1BfU1RBVF9SVU5UKQorI2RlZmluZSBTVEFUX0JDTUFTUF9SWF9FRFBLVChzdHIsIG0sIG9mZnNl dCkgXAorCVNUQVRfQkNNQVNQX09GRlNFVChzdHIsIG0sIEJDTUFTUF9TVEFUX1JYX0VEUEtULCBv ZmZzZXQpCisjZGVmaW5lIFNUQVRfQkNNQVNQX1JYX0NUUkwoc3RyLCBtLCBvZmZzZXQpIFwKKwlT VEFUX0JDTUFTUF9PRkZTRVQoc3RyLCBtLCBCQ01BU1BfU1RBVF9SWF9DVFJMLCBvZmZzZXQpCisj ZGVmaW5lIFNUQVRfQkNNQVNQX1NPRlRfTUlCKG0pIFwKKwlTVEFUX0JDTUFTUF9NSUIoX19zdHJp bmdpZnkobSksIG1pYi5tLCBCQ01BU1BfU1RBVF9TT0ZUKQorCisvKiBUaGVyZSBpcyBhIDB4MTAg Z2FwIGluIGhhcmR3YXJlIGJldHdlZW4gdGhlIGVuZCBvZiBSWCBhbmQgYmVnaW5uaW5nIG9mID0K VFgKKyAqIHN0YXRzIGFuZCB0aGVuIGJldHdlZW4gdGhlIGVuZCBvZiBUWCBzdGF0cyBhbmQgdGhl IGJlZ2lubmluZyBvZiB0aGUgUlggPQpSVU5ULgorICogVGhlIHNvZnR3YXJlIHN0cnVjdHVyZSBh bHJlYWR5IGFjY291bnRzIGZvciBzaXplb2YodTMyKSBiZXR3ZWVuIG1lbWJlcnM9CiBzbworICog bmVlZCB0byBhZGQgMHhjIHRvIG9mZnNldCBjb3JyZWN0bHkgaW50byB0aGUgaGFyZHdhcmUgcmVn aXN0ZXIuCisgKi8KKyNkZWZpbmUgQkNNQVNQX1NUQVRfT0ZGU0VUCTB4YworCisvKiBIYXJkd2Fy ZSBjb3VudGVycyBtdXN0IGJlIGtlcHQgaW4gc3luYyBiZWNhdXNlIHRoZSBvcmRlci9vZmZzZXQK KyAqIGlzIGltcG9ydGFudCBoZXJlIChvcmRlciBpbiBzdHJ1Y3R1cmUgZGVjbGFyYXRpb24gPTNE IG9yZGVyIGluIGhhcmR3YXJlKQorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGJjbWFzcF9zdGF0 cyBiY21hc3BfZ3N0cmluZ3Nfc3RhdHNbXSA9M0QgeworCS8qIGdlbmVyYWwgc3RhdHMgKi8KKwlT VEFUX05FVERFVihyeF9wYWNrZXRzKSwKKwlTVEFUX05FVERFVih0eF9wYWNrZXRzKSwKKwlTVEFU X05FVERFVihyeF9ieXRlcyksCisJU1RBVF9ORVRERVYodHhfYnl0ZXMpLAorCVNUQVRfTkVUREVW KHJ4X2Vycm9ycyksCisJU1RBVF9ORVRERVYodHhfZXJyb3JzKSwKKwlTVEFUX05FVERFVihyeF9k cm9wcGVkKSwKKwlTVEFUX05FVERFVih0eF9kcm9wcGVkKSwKKwlTVEFUX05FVERFVihtdWx0aWNh c3QpLAorCS8qIFVuaU1BQyBSU1YgY291bnRlcnMgKi8KKwlTVEFUX0JDTUFTUF9NSUJfUlgoInJ4 XzY0X29jdGV0cyIsIG1pYi5yeC5wa3RfY250LmNudF82NCksCisJU1RBVF9CQ01BU1BfTUlCX1JY KCJyeF82NV8xMjdfb2N0IiwgbWliLnJ4LnBrdF9jbnQuY250XzEyNyksCisJU1RBVF9CQ01BU1Bf TUlCX1JYKCJyeF8xMjhfMjU1X29jdCIsIG1pYi5yeC5wa3RfY250LmNudF8yNTUpLAorCVNUQVRf QkNNQVNQX01JQl9SWCgicnhfMjU2XzUxMV9vY3QiLCBtaWIucngucGt0X2NudC5jbnRfNTExKSwK KwlTVEFUX0JDTUFTUF9NSUJfUlgoInJ4XzUxMl8xMDIzX29jdCIsIG1pYi5yeC5wa3RfY250LmNu dF8xMDIzKSwKKwlTVEFUX0JDTUFTUF9NSUJfUlgoInJ4XzEwMjRfMTUxOF9vY3QiLCBtaWIucngu cGt0X2NudC5jbnRfMTUxOCksCisJU1RBVF9CQ01BU1BfTUlCX1JYKCJyeF92bGFuXzE1MTlfMTUy Ml9vY3QiLCBtaWIucngucGt0X2NudC5jbnRfbWd2KSwKKwlTVEFUX0JDTUFTUF9NSUJfUlgoInJ4 XzE1MjJfMjA0N19vY3QiLCBtaWIucngucGt0X2NudC5jbnRfMjA0NyksCisJU1RBVF9CQ01BU1Bf TUlCX1JYKCJyeF8yMDQ4XzQwOTVfb2N0IiwgbWliLnJ4LnBrdF9jbnQuY250XzQwOTUpLAorCVNU QVRfQkNNQVNQX01JQl9SWCgicnhfNDA5Nl85MjE2X29jdCIsIG1pYi5yeC5wa3RfY250LmNudF85 MjE2KSwKKwlTVEFUX0JDTUFTUF9NSUJfUlgoInJ4X3BrdHMiLCBtaWIucngucGt0KSwKKwlTVEFU X0JDTUFTUF9NSUJfUlgoInJ4X2J5dGVzIiwgbWliLnJ4LmJ5dGVzKSwKKwlTVEFUX0JDTUFTUF9N SUJfUlgoInJ4X211bHRpY2FzdCIsIG1pYi5yeC5tY2EpLAorCVNUQVRfQkNNQVNQX01JQl9SWCgi cnhfYnJvYWRjYXN0IiwgbWliLnJ4LmJjYSksCisJU1RBVF9CQ01BU1BfTUlCX1JYKCJyeF9mY3Mi LCBtaWIucnguZmNzKSwKKwlTVEFUX0JDTUFTUF9NSUJfUlgoInJ4X2NvbnRyb2wiLCBtaWIucngu Y2YpLAorCVNUQVRfQkNNQVNQX01JQl9SWCgicnhfcGF1c2UiLCBtaWIucngucGYpLAorCVNUQVRf QkNNQVNQX01JQl9SWCgicnhfdW5rbm93biIsIG1pYi5yeC51byksCisJU1RBVF9CQ01BU1BfTUlC X1JYKCJyeF9hbGlnbiIsIG1pYi5yeC5hbG4pLAorCVNUQVRfQkNNQVNQX01JQl9SWCgicnhfb3V0 cmFuZ2UiLCBtaWIucnguZmxyKSwKKwlTVEFUX0JDTUFTUF9NSUJfUlgoInJ4X2NvZGUiLCBtaWIu cnguY2RlKSwKKwlTVEFUX0JDTUFTUF9NSUJfUlgoInJ4X2NhcnJpZXIiLCBtaWIucnguZmNyKSwK KwlTVEFUX0JDTUFTUF9NSUJfUlgoInJ4X292ZXJzaXplIiwgbWliLnJ4Lm92ciksCisJU1RBVF9C Q01BU1BfTUlCX1JYKCJyeF9qYWJiZXIiLCBtaWIucnguamJyKSwKKwlTVEFUX0JDTUFTUF9NSUJf UlgoInJ4X210dV9lcnIiLCBtaWIucngubXR1ZSksCisJU1RBVF9CQ01BU1BfTUlCX1JYKCJyeF9n b29kX3BrdHMiLCBtaWIucngucG9rKSwKKwlTVEFUX0JDTUFTUF9NSUJfUlgoInJ4X3VuaWNhc3Qi LCBtaWIucngudWMpLAorCVNUQVRfQkNNQVNQX01JQl9SWCgicnhfcHBwIiwgbWliLnJ4LnBwcCks CisJU1RBVF9CQ01BU1BfTUlCX1JYKCJyeF9jcmMiLCBtaWIucngucmNyYyksCisJLyogVW5pTUFD IFRTViBjb3VudGVycyAqLworCVNUQVRfQkNNQVNQX01JQl9UWCgidHhfNjRfb2N0ZXRzIiwgbWli LnR4LnBrdF9jbnQuY250XzY0KSwKKwlTVEFUX0JDTUFTUF9NSUJfVFgoInR4XzY1XzEyN19vY3Qi LCBtaWIudHgucGt0X2NudC5jbnRfMTI3KSwKKwlTVEFUX0JDTUFTUF9NSUJfVFgoInR4XzEyOF8y NTVfb2N0IiwgbWliLnR4LnBrdF9jbnQuY250XzI1NSksCisJU1RBVF9CQ01BU1BfTUlCX1RYKCJ0 eF8yNTZfNTExX29jdCIsIG1pYi50eC5wa3RfY250LmNudF81MTEpLAorCVNUQVRfQkNNQVNQX01J Ql9UWCgidHhfNTEyXzEwMjNfb2N0IiwgbWliLnR4LnBrdF9jbnQuY250XzEwMjMpLAorCVNUQVRf QkNNQVNQX01JQl9UWCgidHhfMTAyNF8xNTE4X29jdCIsIG1pYi50eC5wa3RfY250LmNudF8xNTE4 KSwKKwlTVEFUX0JDTUFTUF9NSUJfVFgoInR4X3ZsYW5fMTUxOV8xNTIyX29jdCIsIG1pYi50eC5w a3RfY250LmNudF9tZ3YpLAorCVNUQVRfQkNNQVNQX01JQl9UWCgidHhfMTUyMl8yMDQ3X29jdCIs IG1pYi50eC5wa3RfY250LmNudF8yMDQ3KSwKKwlTVEFUX0JDTUFTUF9NSUJfVFgoInR4XzIwNDhf NDA5NV9vY3QiLCBtaWIudHgucGt0X2NudC5jbnRfNDA5NSksCisJU1RBVF9CQ01BU1BfTUlCX1RY KCJ0eF80MDk2XzkyMTZfb2N0IiwgbWliLnR4LnBrdF9jbnQuY250XzkyMTYpLAorCVNUQVRfQkNN QVNQX01JQl9UWCgidHhfcGt0cyIsIG1pYi50eC5wa3RzKSwKKwlTVEFUX0JDTUFTUF9NSUJfVFgo InR4X211bHRpY2FzdCIsIG1pYi50eC5tY2EpLAorCVNUQVRfQkNNQVNQX01JQl9UWCgidHhfYnJv YWRjYXN0IiwgbWliLnR4LmJjYSksCisJU1RBVF9CQ01BU1BfTUlCX1RYKCJ0eF9wYXVzZSIsIG1p Yi50eC5wZiksCisJU1RBVF9CQ01BU1BfTUlCX1RYKCJ0eF9jb250cm9sIiwgbWliLnR4LmNmKSwK KwlTVEFUX0JDTUFTUF9NSUJfVFgoInR4X2Zjc19lcnIiLCBtaWIudHguZmNzKSwKKwlTVEFUX0JD TUFTUF9NSUJfVFgoInR4X292ZXJzaXplIiwgbWliLnR4Lm92ciksCisJU1RBVF9CQ01BU1BfTUlC X1RYKCJ0eF9kZWZlciIsIG1pYi50eC5kcmYpLAorCVNUQVRfQkNNQVNQX01JQl9UWCgidHhfZXhj ZXNzX2RlZmVyIiwgbWliLnR4LmVkZiksCisJU1RBVF9CQ01BU1BfTUlCX1RYKCJ0eF9zaW5nbGVf Y29sIiwgbWliLnR4LnNjbCksCisJU1RBVF9CQ01BU1BfTUlCX1RYKCJ0eF9tdWx0aV9jb2wiLCBt aWIudHgubWNsKSwKKwlTVEFUX0JDTUFTUF9NSUJfVFgoInR4X2xhdGVfY29sIiwgbWliLnR4Lmxj bCksCisJU1RBVF9CQ01BU1BfTUlCX1RYKCJ0eF9leGNlc3NfY29sIiwgbWliLnR4LmVjbCksCisJ U1RBVF9CQ01BU1BfTUlCX1RYKCJ0eF9mcmFncyIsIG1pYi50eC5mcmcpLAorCVNUQVRfQkNNQVNQ X01JQl9UWCgidHhfdG90YWxfY29sIiwgbWliLnR4Lm5jbCksCisJU1RBVF9CQ01BU1BfTUlCX1RY KCJ0eF9qYWJiZXIiLCBtaWIudHguamJyKSwKKwlTVEFUX0JDTUFTUF9NSUJfVFgoInR4X2J5dGVz IiwgbWliLnR4LmJ5dGVzKSwKKwlTVEFUX0JDTUFTUF9NSUJfVFgoInR4X2dvb2RfcGt0cyIsIG1p Yi50eC5wb2spLAorCVNUQVRfQkNNQVNQX01JQl9UWCgidHhfdW5pY2FzdCIsIG1pYi50eC51Yyks CisJLyogVW5pTUFDIFJVTlQgY291bnRlcnMgKi8KKwlTVEFUX0JDTUFTUF9SVU5UKCJyeF9ydW50 X3BrdHMiLCBtaWIucnhfcnVudF9jbnQpLAorCVNUQVRfQkNNQVNQX1JVTlQoInJ4X3J1bnRfdmFs aWRfZmNzIiwgbWliLnJ4X3J1bnRfZmNzKSwKKwlTVEFUX0JDTUFTUF9SVU5UKCJyeF9ydW50X2lu dmFsX2Zjc19hbGlnbiIsIG1pYi5yeF9ydW50X2Zjc19hbGlnbiksCisJU1RBVF9CQ01BU1BfUlVO VCgicnhfcnVudF9ieXRlcyIsIG1pYi5yeF9ydW50X2J5dGVzKSwKKwkvKiBFRFBLVCBjb3VudGVy cyAqLworCVNUQVRfQkNNQVNQX1JYX0VEUEtUKCJlZHBrdF90cyIsIG1pYi5lZHBrdF90cywKKwkJ CSAgICAgQVNQX0VEUEtUX1JYX1RTX0NPVU5URVIpLAorCVNUQVRfQkNNQVNQX1JYX0VEUEtUKCJl ZHBrdF9yeF9wa3RfY250IiwgbWliLmVkcGt0X3J4X3BrdF9jbnQsCisJCQkgICAgIEFTUF9FRFBL VF9SWF9QS1RfQ05UKSwKKwlTVEFUX0JDTUFTUF9SWF9FRFBLVCgiZWRwa3RfaGRyX2V4dF9jbnQi LCBtaWIuZWRwa3RfaGRyX2V4dF9jbnQsCisJCQkgICAgIEFTUF9FRFBLVF9IRFJfRVhUUl9DTlQp LAorCVNUQVRfQkNNQVNQX1JYX0VEUEtUKCJlZHBrdF9oZHJfb3V0X2NudCIsIG1pYi5lZHBrdF9o ZHJfb3V0X2NudCwKKwkJCSAgICAgQVNQX0VEUEtUX0hEUl9PVVRfQ05UKSwKKwkvKiBBU1AgUlgg Y29udHJvbCAqLworCVNUQVRfQkNNQVNQX1JYX0NUUkwoInVtYWNfZnJtX2NudCIsIG1pYi51bWFj X2ZybV9jbnQsCisJCQkgICAgQVNQX1JYX0NUUkxfVU1BQ18wX0ZSQU1FX0NPVU5UKSwKKwlTVEFU X0JDTUFTUF9SWF9DVFJMKCJmYl9mcm1fY250IiwgbWliLmZiX2ZybV9jbnQsCisJCQkgICAgQVNQ X1JYX0NUUkxfRkJfMF9GUkFNRV9DT1VOVCksCisJU1RBVF9CQ01BU1BfUlhfQ1RSTCgiZmJfb3V0 X2ZybV9jbnQiLCBtaWIuZmJfb3V0X2ZybV9jbnQsCisJCQkgICAgQVNQX1JYX0NUUkxfRkJfT1VU X0ZSQU1FX0NPVU5UKSwKKwlTVEFUX0JDTUFTUF9SWF9DVFJMKCJmYl9maWx0X291dF9mcm1fY250 IiwgbWliLmZiX2ZpbHRfb3V0X2ZybV9jbnQsCisJCQkgICAgQVNQX1JYX0NUUkxfRkJfRklMVF9P VVRfRlJBTUVfQ09VTlQpLAorCVNUQVRfQkNNQVNQX1JYX0NUUkwoImZiX3J4X2ZpZm9fZGVwdGgi LCBtaWIuZmJfcnhfZmlmb19kZXB0aCwKKwkJCSAgICBBU1BfUlhfQ1RSTF9GQl9SWF9GSUZPX0RF UFRIKSwKKwkvKiBTb2Z0d2FyZSBtYWludGFpbmVkIHN0YXRpc3RpY3MgKi8KKwlTVEFUX0JDTUFT UF9TT0ZUX01JQihhbGxvY19yeF9idWZmX2ZhaWxlZCksCisJU1RBVF9CQ01BU1BfU09GVF9NSUIo YWxsb2Nfcnhfc2tiX2ZhaWxlZCksCisJU1RBVF9CQ01BU1BfU09GVF9NSUIocnhfZG1hX2ZhaWxl ZCksCisJU1RBVF9CQ01BU1BfU09GVF9NSUIodHhfZG1hX2ZhaWxlZCksCisJU1RBVF9CQ01BU1Bf U09GVF9NSUIobWNfZmlsdGVyc19mdWxsX2NudCksCisJU1RBVF9CQ01BU1BfU09GVF9NSUIodWNf ZmlsdGVyc19mdWxsX2NudCksCisJU1RBVF9CQ01BU1BfU09GVF9NSUIoZmlsdGVyc19jb21iaW5l X2NudCksCisJU1RBVF9CQ01BU1BfU09GVF9NSUIocHJvbWlzY19maWx0ZXJzX2NudCksCisJU1RB VF9CQ01BU1BfU09GVF9NSUIodHhfcmVhbGxvY19vZmZsb2FkX2ZhaWxlZCksCisJU1RBVF9CQ01B U1BfU09GVF9NSUIodHhfcmVhbGxvY19vZmZsb2FkKSwKKworfTsKKworI2RlZmluZSBCQ01BU1Bf U1RBVFNfTEVOCUFSUkFZX1NJWkUoYmNtYXNwX2dzdHJpbmdzX3N0YXRzKQorCitzdGF0aWMgdTE2 IGJjbWFzcF9zdGF0X2ZpeHVwX29mZnNldChzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsCisJCQkJ ICAgIGNvbnN0IHN0cnVjdCBiY21hc3Bfc3RhdHMgKnMpCit7CisJc3RydWN0IGJjbWFzcF9wcml2 ICpwcml2ID0zRCBpbnRmLT5wYXJlbnQ7CisKKwlpZiAoIXN0cmNtcCgiZmJfb3V0X2ZybV9jbnQi LCBzLT5zdGF0X3N0cmluZykpCisJCXJldHVybiBwcml2LT5od19pbmZvLT5yeF9jdHJsX2ZiX291 dF9mcmFtZV9jb3VudDsKKworCWlmICghc3RyY21wKCJmYl9maWx0X291dF9mcm1fY250Iiwgcy0+ c3RhdF9zdHJpbmcpKQorCQlyZXR1cm4gcHJpdi0+aHdfaW5mby0+cnhfY3RybF9mYl9maWx0X291 dF9mcmFtZV9jb3VudDsKKworCWlmICghc3RyY21wKCJmYl9yeF9maWZvX2RlcHRoIiwgcy0+c3Rh dF9zdHJpbmcpKQorCQlyZXR1cm4gcHJpdi0+aHdfaW5mby0+cnhfY3RybF9mYl9yeF9maWZvX2Rl cHRoOworCisJcmV0dXJuIHMtPnJlZ19vZmZzZXQ7Cit9CisKK3N0YXRpYyBpbnQgYmNtYXNwX2dl dF9zc2V0X2NvdW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBzdHJpbmdfc2V0KQorewor CXN3aXRjaCAoc3RyaW5nX3NldCkgeworCWNhc2UgRVRIX1NTX1NUQVRTOgorCQlyZXR1cm4gQkNN QVNQX1NUQVRTX0xFTjsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorfQor CitzdGF0aWMgdm9pZCBiY21hc3BfZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwg dTMyIHN0cmluZ3NldCwKKwkJCSAgICAgICB1OCAqZGF0YSkKK3sKKwlpbnQgaTsKKworCXN3aXRj aCAoc3RyaW5nc2V0KSB7CisJY2FzZSBFVEhfU1NfU1RBVFM6CisJCWZvciAoaSA9M0QgMDsgaSA8 IEJDTUFTUF9TVEFUU19MRU47IGkrKykgeworCQkJbWVtY3B5KGRhdGEgKyBpICogRVRIX0dTVFJJ TkdfTEVOLAorCQkJCSAgIGJjbWFzcF9nc3RyaW5nc19zdGF0c1tpXS5zdGF0X3N0cmluZywKKwkJ CQkgICBFVEhfR1NUUklOR19MRU4pOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVy bjsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGJjbWFzcF91cGRhdGVfbWliX2NvdW50ZXJzKHN0cnVj dCBiY21hc3BfaW50ZiAqcHJpdikKK3sKKwlpbnQgaSwgaiA9M0QgMDsKKworCWZvciAoaSA9M0Qg MDsgaSA8IEJDTUFTUF9TVEFUU19MRU47IGkrKykgeworCQljb25zdCBzdHJ1Y3QgYmNtYXNwX3N0 YXRzICpzOworCQl1MTYgb2Zmc2V0ID0zRCAwOworCQl1MzIgdmFsID0zRCAwOworCQljaGFyICpw OworCisJCXMgPTNEICZiY21hc3BfZ3N0cmluZ3Nfc3RhdHNbaV07CisJCXN3aXRjaCAocy0+dHlw ZSkgeworCQljYXNlIEJDTUFTUF9TVEFUX05FVERFVjoKKwkJY2FzZSBCQ01BU1BfU1RBVF9TT0ZU OgorCQkJY29udGludWU7CisJCWNhc2UgQkNNQVNQX1NUQVRfUlVOVDoKKwkJCW9mZnNldCArPTNE IEJDTUFTUF9TVEFUX09GRlNFVDsKKwkJCWZhbGx0aHJvdWdoOworCQljYXNlIEJDTUFTUF9TVEFU X01JQl9UWDoKKwkJCW9mZnNldCArPTNEIEJDTUFTUF9TVEFUX09GRlNFVDsKKwkJCWZhbGx0aHJv dWdoOworCQljYXNlIEJDTUFTUF9TVEFUX01JQl9SWDoKKwkJCXZhbCA9M0QgdW1hY19ybChwcml2 LCBVTUNfTUlCX1NUQVJUICsgaiArIG9mZnNldCk7CisJCQlvZmZzZXQgPTNEIDA7CS8qIFJlc2V0 IE9mZnNldCAqLworCQkJYnJlYWs7CisJCWNhc2UgQkNNQVNQX1NUQVRfUlhfRURQS1Q6CisJCQl2 YWwgPTNEIHJ4X2VkcGt0X2NvcmVfcmwocHJpdi0+cGFyZW50LCBzLT5yZWdfb2Zmc2V0KTsKKwkJ CWJyZWFrOworCQljYXNlIEJDTUFTUF9TVEFUX1JYX0NUUkw6CisJCQlvZmZzZXQgPTNEIGJjbWFz cF9zdGF0X2ZpeHVwX29mZnNldChwcml2LCBzKTsKKwkJCWlmIChvZmZzZXQgIT0zRCBBU1BfUlhf Q1RSTF9GQl9GSUxUX09VVF9GUkFNRV9DT1VOVCkKKwkJCQlvZmZzZXQgKz0zRCBzaXplb2YodTMy KSAqIHByaXYtPnBvcnQ7CisJCQl2YWwgPTNEIHJ4X2N0cmxfY29yZV9ybChwcml2LT5wYXJlbnQs IG9mZnNldCk7CisJCQlicmVhazsKKwkJfQorCisJCWogKz0zRCBzLT5zdGF0X3NpemVvZjsKKwkJ cCA9M0QgKGNoYXIgKilwcml2ICsgcy0+c3RhdF9vZmZzZXQ7CisJCXB1dF91bmFsaWduZWQodmFs LCAodTMyICopcCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBiY21hc3BfZ2V0X2V0aHRvb2xfc3Rh dHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBldGh0b29sX3N0YXRz ICpzdGF0cywKKwkJCQkgICAgIHU2NCAqZGF0YSkKK3sKKwlzdHJ1Y3QgYmNtYXNwX2ludGYgKnBy aXYgPTNEIG5ldGRldl9wcml2KGRldik7CisJaW50IGk7CisKKwlpZiAobmV0aWZfcnVubmluZyhk ZXYpKQorCQliY21hc3BfdXBkYXRlX21pYl9jb3VudGVycyhwcml2KTsKKworCWRldi0+bmV0ZGV2 X29wcy0+bmRvX2dldF9zdGF0cyhkZXYpOworCisJZm9yIChpID0zRCAwOyBpIDwgQkNNQVNQX1NU QVRTX0xFTjsgaSsrKSB7CisJCWNvbnN0IHN0cnVjdCBiY21hc3Bfc3RhdHMgKnM7CisJCWNoYXIg KnA7CisKKwkJcyA9M0QgJmJjbWFzcF9nc3RyaW5nc19zdGF0c1tpXTsKKwkJaWYgKHMtPnR5cGUg PTNEPTNEIEJDTUFTUF9TVEFUX05FVERFVikKKwkJCXAgPTNEIChjaGFyICopJmRldi0+c3RhdHM7 CisJCWVsc2UKKwkJCXAgPTNEIChjaGFyICopcHJpdjsKKwkJcCArPTNEIHMtPnN0YXRfb2Zmc2V0 OworCQlpZiAoc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICE9M0Qgc2l6ZW9mKHUzMikgJiYKKwkJICAg IHMtPnN0YXRfc2l6ZW9mID0zRD0zRCBzaXplb2YodW5zaWduZWQgbG9uZykpCisJCQlkYXRhW2ld ID0zRCAqKHVuc2lnbmVkIGxvbmcgKilwOworCQllbHNlCisJCQlkYXRhW2ldID0zRCAqKHUzMiAq KXA7CisJfQorfQorCitzdGF0aWMgdm9pZCBiY21hc3BfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9k ZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKQorewor CXN0cnNjcHkoaW5mby0+ZHJpdmVyLCAiYmNtYXNwIiwgc2l6ZW9mKGluZm8tPmRyaXZlcikpOwor CXN0cnNjcHkoaW5mby0+YnVzX2luZm8sIGRldl9uYW1lKGRldi0+ZGV2LnBhcmVudCksCisJCXNp emVvZihpbmZvLT5idXNfaW5mbykpOworfQorCitzdGF0aWMgdTMyIGJjbWFzcF9nZXRfbXNnbGV2 ZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYg PTNEIG5ldGRldl9wcml2KGRldik7CisKKwlyZXR1cm4gaW50Zi0+bXNnX2VuYWJsZTsKK30KKwor c3RhdGljIHZvaWQgYmNtYXNwX3NldF9tc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1 MzIgbGV2ZWwpCit7CisJc3RydWN0IGJjbWFzcF9pbnRmICppbnRmID0zRCBuZXRkZXZfcHJpdihk ZXYpOworCisJaW50Zi0+bXNnX2VuYWJsZSA9M0QgbGV2ZWw7Cit9CisKKyNkZWZpbmUgQkNNQVNQ X1NVUFBPUlRFRF9XQUtFICAgKFdBS0VfTUFHSUMgfCBXQUtFX01BR0lDU0VDVVJFIHwgV0FLRV9G SUxUPQpFUikKK3N0YXRpYyB2b2lkIGJjbWFzcF9nZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpk ZXYsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gPQoqd29sKQoreworCXN0cnVjdCBiY21hc3BfaW50 ZiAqaW50ZiA9M0QgbmV0ZGV2X3ByaXYoZGV2KTsKKworCXdvbC0+c3VwcG9ydGVkID0zRCBCQ01B U1BfU1VQUE9SVEVEX1dBS0U7CisJd29sLT53b2xvcHRzID0zRCBpbnRmLT53b2xvcHRzOworCW1l bXNldCh3b2wtPnNvcGFzcywgMCwgc2l6ZW9mKHdvbC0+c29wYXNzKSk7CisKKwlpZiAod29sLT53 b2xvcHRzICYgV0FLRV9NQUdJQ1NFQ1VSRSkKKwkJbWVtY3B5KHdvbC0+c29wYXNzLCBpbnRmLT5z b3Bhc3MsIHNpemVvZihpbnRmLT5zb3Bhc3MpKTsKK30KKworc3RhdGljIGludCBiY21hc3Bfc2V0 X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICo9Cndv bCkKK3sKKwlzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYgPTNEIG5ldGRldl9wcml2KGRldik7CisJ c3RydWN0IGJjbWFzcF9wcml2ICpwcml2ID0zRCBpbnRmLT5wYXJlbnQ7CisJc3RydWN0IGRldmlj ZSAqa2RldiA9M0QgJnByaXYtPnBkZXYtPmRldjsKKworCWlmICghZGV2aWNlX2Nhbl93YWtldXAo a2RldikpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWlmICh3b2wtPndvbG9wdHMgJiB+QkNN QVNQX1NVUFBPUlRFRF9XQUtFKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwkvKiBJbnRlcmZh Y2UgU3BlY2lmaWMgKi8KKwlpbnRmLT53b2xvcHRzID0zRCB3b2wtPndvbG9wdHM7CisJaWYgKGlu dGYtPndvbG9wdHMgJiBXQUtFX01BR0lDU0VDVVJFKQorCQltZW1jcHkoaW50Zi0+c29wYXNzLCB3 b2wtPnNvcGFzcywgc2l6ZW9mKHdvbC0+c29wYXNzKSk7CisKKwltdXRleF9sb2NrKCZwcml2LT53 b2xfbG9jayk7CisJcHJpdi0+ZW5hYmxlX3dvbChpbnRmLCAhIWludGYtPndvbG9wdHMpOworCW11 dGV4X3VubG9jaygmcHJpdi0+d29sX2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBp bnQgYmNtYXNwX2Zsb3dfaW5zZXJ0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0 b29sX3J4bmZjPQogKmNtZCkKK3sKKwlzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYgPTNEIG5ldGRl dl9wcml2KGRldik7CisJc3RydWN0IGJjbWFzcF9uZXRfZmlsdGVyICpuZmlsdGVyOworCXUzMiBs b2MgPTNEIGNtZC0+ZnMubG9jYXRpb247CisJYm9vbCB3YWtlID0zRCBmYWxzZTsKKworCWlmIChj bWQtPmZzLnJpbmdfY29va2llID0zRD0zRCBSWF9DTFNfRkxPV19XQUtFKQorCQl3YWtlID0zRCB0 cnVlOworCisJLyogQ3VycmVudGx5IG9ubHkgc3VwcG9ydHMgV0FLRSBmaWx0ZXJzICovCisJaWYg KCF3YWtlKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlzd2l0Y2ggKGNtZC0+ZnMuZmxvd190 eXBlICYgfihGTE9XX0VYVCB8IEZMT1dfTUFDX0VYVCkpIHsKKwljYXNlIEVUSEVSX0ZMT1c6CisJ Y2FzZSBJUF9VU0VSX0ZMT1c6CisJY2FzZSBUQ1BfVjRfRkxPVzoKKwljYXNlIFVEUF9WNF9GTE9X OgorCWNhc2UgVENQX1Y2X0ZMT1c6CisJY2FzZSBVRFBfVjZfRkxPVzoKKwkJYnJlYWs7CisJZGVm YXVsdDoKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKworCS8qIENoZWNrIGlmIGZpbHRlciBh bHJlYWR5IGV4aXN0cyAqLworCWlmIChiY21hc3BfbmV0ZmlsdF9jaGVja19kdXAoaW50ZiwgJmNt ZC0+ZnMpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW5maWx0ZXIgPTNEIGJjbWFzcF9uZXRmaWx0 X2dldF9pbml0KGludGYsIGxvYywgd2FrZSwgdHJ1ZSk7CisJaWYgKElTX0VSUihuZmlsdGVyKSkK KwkJcmV0dXJuIFBUUl9FUlIobmZpbHRlcik7CisKKwkvKiBSZXR1cm4gdGhlIGxvY2F0aW9uIHdo ZXJlIHdlIGRpZCBpbnNlcnQgdGhlIGZpbHRlciAqLworCWNtZC0+ZnMubG9jYXRpb24gPTNEIG5m aWx0ZXItPmh3X2luZGV4OworCW1lbWNweSgmbmZpbHRlci0+ZnMsICZjbWQtPmZzLCBzaXplb2Yo c3RydWN0IGV0aHRvb2xfcnhfZmxvd19zcGVjKSk7CisKKwkvKiBTaW5jZSB3ZSBvbmx5IHN1cHBv cnQgd2FrZSBmaWx0ZXJzLCBkZWZlciByZWdpc3RlciBwcm9ncmFtbWluZyB0aWxsCisJICogc3Vz cGVuZCB0aW1lLgorCSAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJjbWFzcF9mbG93 X2RlbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9yeG5mYz0KICpj bWQpCit7CisJc3RydWN0IGJjbWFzcF9pbnRmICppbnRmID0zRCBuZXRkZXZfcHJpdihkZXYpOwor CXN0cnVjdCBiY21hc3BfbmV0X2ZpbHRlciAqbmZpbHRlcjsKKworCW5maWx0ZXIgPTNEIGJjbWFz cF9uZXRmaWx0X2dldF9pbml0KGludGYsIGNtZC0+ZnMubG9jYXRpb24sIGZhbHNlLCBmYWxzZSk7 CisJaWYgKElTX0VSUihuZmlsdGVyKSkKKwkJcmV0dXJuIFBUUl9FUlIobmZpbHRlcik7CisKKwli Y21hc3BfbmV0ZmlsdF9yZWxlYXNlKGludGYsIG5maWx0ZXIpOworCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQgYmNtYXNwX2Zsb3dfZ2V0KHN0cnVjdCBiY21hc3BfaW50ZiAqaW50Ziwgc3Ry dWN0IGV0aHRvb2xfcnhuZmMgPQoqY21kKQoreworCXN0cnVjdCBiY21hc3BfbmV0X2ZpbHRlciAq bmZpbHRlcjsKKworCW5maWx0ZXIgPTNEIGJjbWFzcF9uZXRmaWx0X2dldF9pbml0KGludGYsIGNt ZC0+ZnMubG9jYXRpb24sIGZhbHNlLCBmYWxzZSk7CisJaWYgKElTX0VSUihuZmlsdGVyKSkKKwkJ cmV0dXJuIFBUUl9FUlIobmZpbHRlcik7CisKKwltZW1jcHkoJmNtZC0+ZnMsICZuZmlsdGVyLT5m cywgc2l6ZW9mKG5maWx0ZXItPmZzKSk7CisKKwljbWQtPmRhdGEgPTNEIE5VTV9ORVRfRklMVEVS UzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJjbWFzcF9zZXRfcnhuZmMoc3RydWN0 IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfcnhuZmMgKj0KY21kKQoreworCXN0cnVj dCBiY21hc3BfaW50ZiAqaW50ZiA9M0QgbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgcmV0ID0zRCAt RU9QTk9UU1VQUDsKKworCW11dGV4X2xvY2soJmludGYtPnBhcmVudC0+bmV0X2xvY2spOworCisJ c3dpdGNoIChjbWQtPmNtZCkgeworCWNhc2UgRVRIVE9PTF9TUlhDTFNSTElOUzoKKwkJcmV0ID0z RCBiY21hc3BfZmxvd19pbnNlcnQoZGV2LCBjbWQpOworCQlicmVhazsKKwljYXNlIEVUSFRPT0xf U1JYQ0xTUkxERUw6CisJCXJldCA9M0QgYmNtYXNwX2Zsb3dfZGVsZXRlKGRldiwgY21kKTsKKwkJ YnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZpbnRmLT5w YXJlbnQtPm5ldF9sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYmNtYXNw X2dldF9yeG5mYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9yeG5mYyAq PQpjbWQsCisJCQkgICAgdTMyICpydWxlX2xvY3MpCit7CisJc3RydWN0IGJjbWFzcF9pbnRmICpp bnRmID0zRCBuZXRkZXZfcHJpdihkZXYpOworCWludCBlcnIgPTNEIDA7CisKKwltdXRleF9sb2Nr KCZpbnRmLT5wYXJlbnQtPm5ldF9sb2NrKTsKKworCXN3aXRjaCAoY21kLT5jbWQpIHsKKwljYXNl IEVUSFRPT0xfR1JYQ0xTUkxDTlQ6CisJCWNtZC0+cnVsZV9jbnQgPTNEIGJjbWFzcF9uZXRmaWx0 X2dldF9hY3RpdmUoaW50Zik7CisJCS8qIFdlIHN1cHBvcnQgc3BlY2lmeWluZyBydWxlIGxvY2F0 aW9ucyAqLworCQljbWQtPmRhdGEgfD0zRCBSWF9DTFNfTE9DX1NQRUNJQUw7CisJCWJyZWFrOwor CWNhc2UgRVRIVE9PTF9HUlhDTFNSVUxFOgorCQllcnIgPTNEIGJjbWFzcF9mbG93X2dldChpbnRm LCBjbWQpOworCQlicmVhazsKKwljYXNlIEVUSFRPT0xfR1JYQ0xTUkxBTEw6CisJCWJjbWFzcF9u ZXRmaWx0X2dldF9hbGxfYWN0aXZlKGludGYsIHJ1bGVfbG9jcywgJmNtZC0+cnVsZV9jbnQpOwor CQljbWQtPmRhdGEgPTNEIE5VTV9ORVRfRklMVEVSUzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJ ZXJyID0zRCAtRU9QTk9UU1VQUDsKKwkJYnJlYWs7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZpbnRm LT5wYXJlbnQtPm5ldF9sb2NrKTsKKworCXJldHVybiBlcnI7Cit9CisKK3ZvaWQgYmNtYXNwX2Vl ZV9lbmFibGVfc2V0KHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZiwgYm9vbCBlbmFibGUpCit7CisJ dTMyIHJlZzsKKworCXJlZyA9M0QgdW1hY19ybChpbnRmLCBVTUNfRUVFX0NUUkwpOworCWlmIChl bmFibGUpCisJCXJlZyB8PTNEIEVFRV9FTjsKKwllbHNlCisJCXJlZyAmPTNEIH5FRUVfRU47CisJ dW1hY193bChpbnRmLCByZWcsIFVNQ19FRUVfQ1RSTCk7CisKKwlpbnRmLT5lZWUuZWVlX2VuYWJs ZWQgPTNEIGVuYWJsZTsKKwlpbnRmLT5lZWUuZWVlX2FjdGl2ZSA9M0QgZW5hYmxlOworfQorCitz dGF0aWMgaW50IGJjbWFzcF9nZXRfZWVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBl dGh0b29sX2VlZSAqZSkKK3sKKwlzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYgPTNEIG5ldGRldl9w cml2KGRldik7CisJc3RydWN0IGV0aHRvb2xfZWVlICpwID0zRCAmaW50Zi0+ZWVlOworCisJaWYg KCFkZXYtPnBoeWRldikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwllLT5lZWVfZW5hYmxlZCA9M0Qg cC0+ZWVlX2VuYWJsZWQ7CisJZS0+ZWVlX2FjdGl2ZSA9M0QgcC0+ZWVlX2FjdGl2ZTsKKwllLT50 eF9scGlfZW5hYmxlZCA9M0QgcC0+dHhfbHBpX2VuYWJsZWQ7CisJZS0+dHhfbHBpX3RpbWVyID0z RCB1bWFjX3JsKGludGYsIFVNQ19FRUVfTFBJX1RJTUVSKTsKKworCXJldHVybiBwaHlfZXRodG9v bF9nZXRfZWVlKGRldi0+cGh5ZGV2LCBlKTsKK30KKworc3RhdGljIGludCBiY21hc3Bfc2V0X2Vl ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9lZWUgKmUpCit7CisJc3Ry dWN0IGJjbWFzcF9pbnRmICppbnRmID0zRCBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBldGh0 b29sX2VlZSAqcCA9M0QgJmludGYtPmVlZTsKKwlpbnQgcmV0OworCisJaWYgKCFkZXYtPnBoeWRl dikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoIXAtPmVlZV9lbmFibGVkKSB7CisJCWJjbWFz cF9lZWVfZW5hYmxlX3NldChpbnRmLCBmYWxzZSk7CisJfSBlbHNlIHsKKwkJcmV0ID0zRCBwaHlf aW5pdF9lZWUoZGV2LT5waHlkZXYsIDApOworCQlpZiAocmV0KSB7CisJCQluZXRpZl9lcnIoaW50 ZiwgaHcsIGRldiwKKwkJCQkgICJFRUUgaW5pdGlhbGl6YXRpb24gZmFpbGVkOiAlZFxuIiwgcmV0 KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQl1bWFjX3dsKGludGYsIGUtPnR4X2xwaV90aW1l ciwgVU1DX0VFRV9MUElfVElNRVIpOworCQlpbnRmLT5lZWUuZWVlX2FjdGl2ZSA9M0QgcmV0ID49 M0QgMDsKKwkJaW50Zi0+ZWVlLnR4X2xwaV9lbmFibGVkID0zRCBlLT50eF9scGlfZW5hYmxlZDsK KwkJYmNtYXNwX2VlZV9lbmFibGVfc2V0KGludGYsIHRydWUpOworCX0KKworCXJldHVybiBwaHlf ZXRodG9vbF9zZXRfZWVlKGRldi0+cGh5ZGV2LCBlKTsKK30KKworY29uc3Qgc3RydWN0IGV0aHRv b2xfb3BzIGJjbWFzcF9ldGh0b29sX29wcyA9M0QgeworCS5nZXRfZHJ2aW5mbwkJPTNEIGJjbWFz cF9nZXRfZHJ2aW5mbywKKwkuZ2V0X3dvbAkJPTNEIGJjbWFzcF9nZXRfd29sLAorCS5zZXRfd29s CQk9M0QgYmNtYXNwX3NldF93b2wsCisJLmdldF9saW5rCQk9M0QgZXRodG9vbF9vcF9nZXRfbGlu aywKKwkuZ2V0X3N0cmluZ3MJCT0zRCBiY21hc3BfZ2V0X3N0cmluZ3MsCisJLmdldF9ldGh0b29s X3N0YXRzCT0zRCBiY21hc3BfZ2V0X2V0aHRvb2xfc3RhdHMsCisJLmdldF9zc2V0X2NvdW50CQk9 M0QgYmNtYXNwX2dldF9zc2V0X2NvdW50LAorCS5nZXRfbGlua19rc2V0dGluZ3MJPTNEIHBoeV9l dGh0b29sX2dldF9saW5rX2tzZXR0aW5ncywKKwkuc2V0X2xpbmtfa3NldHRpbmdzCT0zRCBwaHlf ZXRodG9vbF9zZXRfbGlua19rc2V0dGluZ3MsCisJLmdldF9tc2dsZXZlbAkJPTNEIGJjbWFzcF9n ZXRfbXNnbGV2ZWwsCisJLnNldF9tc2dsZXZlbAkJPTNEIGJjbWFzcF9zZXRfbXNnbGV2ZWwsCisJ Lm53YXlfcmVzZXQJCT0zRCBwaHlfZXRodG9vbF9ud2F5X3Jlc2V0LAorCS5nZXRfcnhuZmMJCT0z RCBiY21hc3BfZ2V0X3J4bmZjLAorCS5zZXRfcnhuZmMJCT0zRCBiY21hc3Bfc2V0X3J4bmZjLAor CS5zZXRfZWVlCQk9M0QgYmNtYXNwX3NldF9lZWUsCisJLmdldF9lZWUJCT0zRCBiY21hc3BfZ2V0 X2VlZSwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3Ay L2JjbWFzcF9pbnRmLmMgYi9kcml2ZXJzL25ldD0KL2V0aGVybmV0L2Jyb2FkY29tL2FzcDIvYmNt YXNwX2ludGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmJkMTYz NzhhZDllOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29t L2FzcDIvYmNtYXNwX2ludGYuYwpAQCAtMCwwICsxLDE0MjkgQEAKKy8vIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBHUEwtMi4wCisjZGVmaW5lIHByX2ZtdChmbXQpCQkJImJjbWFzcF9pbnRmOiAi IGZtdAorCisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGxpbnV4L2JyY21w aHkuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgor I2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNl Lmg+CisjaW5jbHVkZSA8bGludXgvb2ZfbmV0Lmg+CisjaW5jbHVkZSA8bGludXgvb2ZfbWRpby5o PgorI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeV9maXhlZC5oPgor I2luY2x1ZGUgPGxpbnV4L3B0cF9jbGFzc2lmeS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3Jt X2RldmljZS5oPgorI2luY2x1ZGUgPG5ldC9pcC5oPgorI2luY2x1ZGUgPG5ldC9pcHY2Lmg+CisK KyNpbmNsdWRlICJiY21hc3AuaCIKKyNpbmNsdWRlICJiY21hc3BfaW50Zl9kZWZzLmgiCisKK3N0 YXRpYyBpbmxpbmUgaW50IGluY3JfcmluZyhpbnQgaW5kZXgsIGludCByaW5nX2NvdW50KQorewor CWluZGV4Kys7CisJaWYgKGluZGV4ID0zRD0zRCByaW5nX2NvdW50KQorCQlyZXR1cm4gMDsKKwor CXJldHVybiBpbmRleDsKK30KKworLyogUG9pbnRzIHRvIGxhc3QgYnl0ZSBvZiBkZXNjcmlwdG9y ICovCitzdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QgaW5jcl9sYXN0X2J5dGUoZG1hX2FkZHJfdCBh ZGRyLCBkbWFfYWRkcl90IGJlZywKKwkJCQkJaW50IHJpbmdfY291bnQpCit7CisJZG1hX2FkZHJf dCBlbmQgPTNEIGJlZyArIChyaW5nX2NvdW50ICogREVTQ19TSVpFKTsKKworCWFkZHIgKz0zRCBE RVNDX1NJWkU7CisJaWYgKGFkZHIgPiBlbmQpCisJCXJldHVybiBiZWcgKyBERVNDX1NJWkUgLSAx OworCisJcmV0dXJuIGFkZHI7Cit9CisKKy8qIFBvaW50cyB0byBmaXJzdCBieXRlIG9mIGRlc2Ny aXB0b3IgKi8KK3N0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdCBpbmNyX2ZpcnN0X2J5dGUoZG1hX2Fk ZHJfdCBhZGRyLCBkbWFfYWRkcl90IGJlZywKKwkJCQkJIGludCByaW5nX2NvdW50KQoreworCWRt YV9hZGRyX3QgZW5kID0zRCBiZWcgKyAocmluZ19jb3VudCAqIERFU0NfU0laRSk7CisKKwlhZGRy ICs9M0QgREVTQ19TSVpFOworCWlmIChhZGRyID49M0QgZW5kKQorCQlyZXR1cm4gYmVnOworCisJ cmV0dXJuIGFkZHI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBiY21hc3BfZW5hYmxlX3R4KHN0 cnVjdCBiY21hc3BfaW50ZiAqaW50ZiwgaW50IGVuKQoreworCWlmIChlbikgeworCQl0eF9zcGJf Y3RybF93bChpbnRmLCBUWF9TUEJfQ1RSTF9FTkFCTEVfRU4sIFRYX1NQQl9DVFJMX0VOQUJMRSk7 CisJCXR4X2Vwa3RfY29yZV93bChpbnRmLCAoVFhfRVBLVF9DX0NGR19NSVNDX0VOIHwKKwkJCQlU WF9FUEtUX0NfQ0ZHX01JU0NfUFQgfAorCQkJCShpbnRmLT5wb3J0IDw8IFRYX0VQS1RfQ19DRkdf TUlTQ19QU19TSElGVCkpLAorCQkJCVRYX0VQS1RfQ19DRkdfTUlTQyk7CisJfSBlbHNlIHsKKwkJ dHhfc3BiX2N0cmxfd2woaW50ZiwgMHgwLCBUWF9TUEJfQ1RSTF9FTkFCTEUpOworCQl0eF9lcGt0 X2NvcmVfd2woaW50ZiwgMHgwLCBUWF9FUEtUX0NfQ0ZHX01JU0MpOworCX0KK30KKworc3RhdGlj IGlubGluZSB2b2lkIGJjbWFzcF9lbmFibGVfcngoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmLCBp bnQgZW4pCit7CisJaWYgKGVuKQorCQlyeF9lZHBrdF9jZmdfd2woaW50ZiwgUlhfRURQS1RfQ0ZH X0VOQUJMRV9FTiwKKwkJCQlSWF9FRFBLVF9DRkdfRU5BQkxFKTsKKwllbHNlCisJCXJ4X2VkcGt0 X2NmZ193bChpbnRmLCAweDAsIFJYX0VEUEtUX0NGR19FTkFCTEUpOworfQorCitzdGF0aWMgdm9p ZCBiY21hc3Bfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwl1bnNpZ25l ZCBjaGFyIG1hc2tbXSA9M0QgezB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmZ9Owor CXN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZiA9M0QgbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qg bmV0ZGV2X2h3X2FkZHIgKmhhOworCWludCByZXQ7CisKKwlzcGluX2xvY2tfYmgoJmludGYtPnBh cmVudC0+bWRhX2xvY2spOworCisJYmNtYXNwX2Rpc2FibGVfYWxsX2ZpbHRlcnMoaW50Zik7CisK KwlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKQorCQlnb3RvIHNldF9wcm9taXNjOworCisJ YmNtYXNwX3NldF9wcm9taXNjKGludGYsIDApOworCisJYmNtYXNwX3NldF9icm9hZChpbnRmLCAx KTsKKworCWJjbWFzcF9zZXRfb2FkZHIoaW50ZiwgZGV2LT5kZXZfYWRkciwgMSk7CisKKwlpZiAo ZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgeworCQliY21hc3Bfc2V0X2FsbG11bHRpKGludGYs IDEpOworCX0gZWxzZSB7CisJCWJjbWFzcF9zZXRfYWxsbXVsdGkoaW50ZiwgMCk7CisKKwkJbmV0 ZGV2X2Zvcl9lYWNoX21jX2FkZHIoaGEsIGRldikgeworCQkJcmV0ID0zRCBiY21hc3Bfc2V0X2Vu X21kYV9maWx0ZXIoaW50ZiwgaGEtPmFkZHIsIG1hc2spOworCQkJaWYgKHJldCkgeworCQkJCWlu dGYtPm1pYi5tY19maWx0ZXJzX2Z1bGxfY250Kys7CisJCQkJZ290byBzZXRfcHJvbWlzYzsKKwkJ CX0KKwkJfQorCX0KKworCW5ldGRldl9mb3JfZWFjaF91Y19hZGRyKGhhLCBkZXYpIHsKKwkJcmV0 ID0zRCBiY21hc3Bfc2V0X2VuX21kYV9maWx0ZXIoaW50ZiwgaGEtPmFkZHIsIG1hc2spOworCQlp ZiAocmV0KSB7CisJCQlpbnRmLT5taWIudWNfZmlsdGVyc19mdWxsX2NudCsrOworCQkJZ290byBz ZXRfcHJvbWlzYzsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrX2JoKCZpbnRmLT5wYXJlbnQtPm1k YV9sb2NrKTsKKwlyZXR1cm47CisKK3NldF9wcm9taXNjOgorCWJjbWFzcF9zZXRfcHJvbWlzYyhp bnRmLCAxKTsKKwlpbnRmLT5taWIucHJvbWlzY19maWx0ZXJzX2NudCsrOworCisJLyogZGlzYWJs ZSBhbGwgZmlsdGVycyB1c2VkIGJ5IHRoaXMgcG9ydCAqLworCWJjbWFzcF9kaXNhYmxlX2FsbF9m aWx0ZXJzKGludGYpOworCisJc3Bpbl91bmxvY2tfYmgoJmludGYtPnBhcmVudC0+bWRhX2xvY2sp OworfQorCitzdGF0aWMgdm9pZCBiY21hc3BfY2xlYW5fdHhjYihzdHJ1Y3QgYmNtYXNwX2ludGYg KmludGYsIGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgYmNtYXNwX3R4X2NiICp0eGNiID0zRCAmaW50 Zi0+dHhfY2JzW2luZGV4XTsKKworCXR4Y2ItPnNrYiA9M0QgTlVMTDsKKwlkbWFfdW5tYXBfYWRk cl9zZXQodHhjYiwgZG1hX2FkZHIsIDApOworCWRtYV91bm1hcF9sZW5fc2V0KHR4Y2IsIGRtYV9s ZW4sIDApOworCXR4Y2ItPmxhc3QgPTNEIGZhbHNlOworfQorCitzdGF0aWMgaW50IHR4X3NwYl9y aW5nX2Z1bGwoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmLCBpbnQgY250KQoreworCWludCBuZXh0 X2luZGV4LCBpOworCisJLyogQ2hlY2sgaWYgd2UgaGF2ZSBlbm91Z2ggcm9vbSBmb3IgY250IGRl c2NyaXB0b3JzICovCisJZm9yIChpID0zRCAwOyBpIDwgY250OyBpKyspIHsKKwkJbmV4dF9pbmRl eCA9M0QgaW5jcl9yaW5nKGludGYtPnR4X3NwYl9pbmRleCwgREVTQ19SSU5HX0NPVU5UKTsKKwkJ aWYgKG5leHRfaW5kZXggPTNEPTNEIGludGYtPnR4X3NwYl9jbGVhbl9pbmRleCkKKwkJCXJldHVy biAxOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmJjbWFz cF9jc3VtX29mZmxvYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJICAgc3RydWN0IHNr X2J1ZmYgKnNrYiwKKwkJCQkJICAgYm9vbCAqY3N1bV9odykKK3sKKwlzdHJ1Y3QgYmNtYXNwX2lu dGYgKmludGYgPTNEIG5ldGRldl9wcml2KGRldik7CisJdTMyIGhlYWRlciA9M0QgMCwgaGVhZGVy MiA9M0QgMCwgZXBrdCA9M0QgMDsKKwlzdHJ1Y3QgYmNtYXNwX3BrdF9vZmZsb2FkICpvZmZsb2Fk OworCXVuc2lnbmVkIGludCBoZWFkZXJfY250ID0zRCAwOworCXN0cnVjdCBza19idWZmICpuZXdf c2tiOworCXU4IGlwX3Byb3RvOworCXUxNiBpcF92ZXI7CisKKwlpZiAoc2tiLT5pcF9zdW1tZWQg IT0zRCBDSEVDS1NVTV9QQVJUSUFMKQorCQlyZXR1cm4gc2tiOworCisJaWYgKHVubGlrZWx5KHNr Yl9oZWFkcm9vbShza2IpIDwgc2l6ZW9mKCpvZmZsb2FkKSkpIHsKKwkJbmV3X3NrYiA9M0Qgc2ti X3JlYWxsb2NfaGVhZHJvb20oc2tiLCBzaXplb2YoKm9mZmxvYWQpKTsKKwkJaWYgKCFuZXdfc2ti KSB7CisJCQlpbnRmLT5taWIudHhfcmVhbGxvY19vZmZsb2FkX2ZhaWxlZCsrOworCQkJZ290byBo ZWxwOworCQl9CisKKwkJZGV2X2NvbnN1bWVfc2tiX2FueShza2IpOworCQlza2IgPTNEIG5ld19z a2I7CisJCWludGYtPm1pYi50eF9yZWFsbG9jX29mZmxvYWQrKzsKKwl9CisKKwlpcF92ZXIgPTNE IGh0b25zKHNrYi0+cHJvdG9jb2wpOworCXN3aXRjaCAoaXBfdmVyKSB7CisJY2FzZSBFVEhfUF9J UDoKKwkJaGVhZGVyIHw9M0QgUEtUX09GRkxPQURfSERSX1NJWkVfMigoaXBfaGRybGVuKHNrYikg Pj4gOCkgJiAweGYpOworCQloZWFkZXIyIHw9M0QgUEtUX09GRkxPQURfSERSMl9TSVpFXzIoaXBf aGRybGVuKHNrYikgJiAweGZmKTsKKwkJZXBrdCB8PTNEIFBLVF9PRkZMT0FEX0VQS1RfSVAoMCkg fCBQS1RfT0ZGTE9BRF9FUEtUX0NTVU1fTDI7CisJCWlwX3Byb3RvID0zRCBpcF9oZHIoc2tiKS0+ cHJvdG9jb2w7CisJCWhlYWRlcl9jbnQgKz0zRCAyOworCQlicmVhazsKKwljYXNlIEVUSF9QX0lQ VjY6CisJCWhlYWRlciB8PTNEIFBLVF9PRkZMT0FEX0hEUl9TSVpFXzIoKElQNl9ITEVOID4+IDgp ICYgMHhmKTsKKwkJaGVhZGVyMiB8PTNEIFBLVF9PRkZMT0FEX0hEUjJfU0laRV8yKElQNl9ITEVO ICYgMHhmZik7CisJCWVwa3QgfD0zRCBQS1RfT0ZGTE9BRF9FUEtUX0lQKDEpIHwgUEtUX09GRkxP QURfRVBLVF9DU1VNX0wyOworCQlpcF9wcm90byA9M0QgaXB2Nl9oZHIoc2tiKS0+bmV4dGhkcjsK KwkJaGVhZGVyX2NudCArPTNEIDI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWdvdG8gaGVscDsK Kwl9CisKKwlzd2l0Y2ggKGlwX3Byb3RvKSB7CisJY2FzZSBJUFBST1RPX1RDUDoKKwkJaGVhZGVy MiB8PTNEIFBLVF9PRkZMT0FEX0hEUjJfU0laRV8zKHRjcF9oZHJsZW4oc2tiKSk7CisJCWVwa3Qg fD0zRCBQS1RfT0ZGTE9BRF9FUEtUX1RQKDApIHwgUEtUX09GRkxPQURfRVBLVF9DU1VNX0wzOwor CQloZWFkZXJfY250Kys7CisJCWJyZWFrOworCWNhc2UgSVBQUk9UT19VRFA6CisJCWhlYWRlcjIg fD0zRCBQS1RfT0ZGTE9BRF9IRFIyX1NJWkVfMyhVRFBfSExFTik7CisJCWVwa3QgfD0zRCBQS1Rf T0ZGTE9BRF9FUEtUX1RQKDEpIHwgUEtUX09GRkxPQURfRVBLVF9DU1VNX0wzOworCQloZWFkZXJf Y250Kys7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWdvdG8gaGVscDsKKwl9CisKKwlvZmZsb2Fk ID0zRCAoc3RydWN0IGJjbWFzcF9wa3Rfb2ZmbG9hZCAqKXNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpv ZmZsb2FkKSk7CisKKwloZWFkZXIgfD0zRCBQS1RfT0ZGTE9BRF9IRFJfT1AgfCBQS1RfT0ZGTE9B RF9IRFJfQ09VTlQoaGVhZGVyX2NudCkgfAorCQkJICBQS1RfT0ZGTE9BRF9IRFJfU0laRV8xKEVU SF9ITEVOKTsKKwllcGt0IHw9M0QgUEtUX09GRkxPQURfRVBLVF9PUDsKKworCW9mZmxvYWQtPm5v cCA9M0QgaHRvbmwoUEtUX09GRkxPQURfTk9QKTsKKwlvZmZsb2FkLT5oZWFkZXIgPTNEIGh0b25s KGhlYWRlcik7CisJb2ZmbG9hZC0+aGVhZGVyMiA9M0QgaHRvbmwoaGVhZGVyMik7CisJb2ZmbG9h ZC0+ZXBrdCA9M0QgaHRvbmwoZXBrdCk7CisJb2ZmbG9hZC0+ZW5kID0zRCBodG9ubChQS1RfT0ZG TE9BRF9FTkRfT1ApOworCSpjc3VtX2h3ID0zRCB0cnVlOworCisJcmV0dXJuIHNrYjsKKworaGVs cDoKKwlza2JfY2hlY2tzdW1faGVscChza2IpOworCisJcmV0dXJuIHNrYjsKK30KKworc3RhdGlj IGlubGluZSB1bnNpZ25lZCBsb25nIGJjbWFzcF9yeF9lZHBrdF9kbWFfcnEoc3RydWN0IGJjbWFz cF9pbnRmICppbnQ9CmYpCit7CisJcmV0dXJuIHJ4X2VkcGt0X2RtYV9ycShpbnRmLCBSWF9FRFBL VF9ETUFfVkFMSUQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYmNtYXNwX3J4X2VkcGt0X2Nm Z193cShzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsCisJCQkJCSAgZG1hX2FkZHJfdCBhZGRyKQor eworCXJ4X2VkcGt0X2NmZ193cShpbnRmLCBhZGRyLCBSWF9FRFBLVF9SSU5HX0JVRkZFUl9SRUFE KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGJjbWFzcF9yeF9lZHBrdF9kbWFfd3Eoc3RydWN0 IGJjbWFzcF9pbnRmICppbnRmLAorCQkJCQkgIGRtYV9hZGRyX3QgYWRkcikKK3sKKwlyeF9lZHBr dF9kbWFfd3EoaW50ZiwgYWRkciwgUlhfRURQS1RfRE1BX1JFQUQpOworfQorCitzdGF0aWMgaW5s aW5lIHVuc2lnbmVkIGxvbmcgYmNtYXNwX3R4X3NwYl9kbWFfcnEoc3RydWN0IGJjbWFzcF9pbnRm ICppbnRmKQoreworCXJldHVybiB0eF9zcGJfZG1hX3JxKGludGYsIFRYX1NQQl9ETUFfUkVBRCk7 Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBiY21hc3BfdHhfc3BiX2RtYV93cShzdHJ1Y3QgYmNt YXNwX2ludGYgKmludGYsCisJCQkJCWRtYV9hZGRyX3QgYWRkcikKK3sKKwl0eF9zcGJfZG1hX3dx KGludGYsIGFkZHIsIFRYX1NQQl9ETUFfVkFMSUQpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0 IGJjbWFzcF9pbnRmX29wcyBiY21hc3BfaW50Zl9vcHMgPTNEIHsKKwkucnhfZGVzY19yZWFkID0z RCBiY21hc3BfcnhfZWRwa3RfZG1hX3JxLAorCS5yeF9idWZmZXJfd3JpdGUgPTNEIGJjbWFzcF9y eF9lZHBrdF9jZmdfd3EsCisJLnJ4X2Rlc2Nfd3JpdGUgPTNEIGJjbWFzcF9yeF9lZHBrdF9kbWFf d3EsCisJLnR4X3JlYWQgPTNEIGJjbWFzcF90eF9zcGJfZG1hX3JxLAorCS50eF93cml0ZSA9M0Qg YmNtYXNwX3R4X3NwYl9kbWFfd3EsCit9OworCitzdGF0aWMgbmV0ZGV2X3R4X3QgYmNtYXNwX3ht aXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1 Y3QgYmNtYXNwX2ludGYgKmludGYgPTNEIG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGRldmlj ZSAqa2RldiA9M0QgJmludGYtPnBhcmVudC0+cGRldi0+ZGV2OworCWludCBzcGJfaW5kZXgsIG5y X2ZyYWdzLCByZXQsIGksIGo7CisJdW5zaWduZWQgaW50IHRvdGFsX2J5dGVzLCBzaXplOworCXN0 cnVjdCBiY21hc3BfdHhfY2IgKnR4Y2I7CisJZG1hX2FkZHJfdCBtYXBwaW5nLCB2YWxpZDsKKwlz dHJ1Y3QgYmNtYXNwX2Rlc2MgKmRlc2M7CisJYm9vbCBjc3VtX2h3ID0zRCBmYWxzZTsKKwlza2Jf ZnJhZ190ICpmcmFnOworCisJc3Bpbl9sb2NrKCZpbnRmLT50eF9sb2NrKTsKKworCW5yX2ZyYWdz ID0zRCBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOworCisJaWYgKHR4X3NwYl9yaW5nX2Z1bGwo aW50ZiwgbnJfZnJhZ3MgKyAxKSkgeworCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJCW5ldGRl dl9lcnIoZGV2LCAiVHggUmluZyBGdWxsIVxuIik7CisJCXJldCA9M0QgTkVUREVWX1RYX0JVU1k7 CisJCWdvdG8gb3V0OworCX0KKworCS8qIFNhdmUgc2tiIGxlbiBiZWZvcmUgYWRkaW5nIGNzdW0g b2ZmbG9hZCBoZWFkZXIgKi8KKwl0b3RhbF9ieXRlcyA9M0Qgc2tiLT5sZW47CisJc2tiID0zRCBi Y21hc3BfY3N1bV9vZmZsb2FkKGRldiwgc2tiLCAmY3N1bV9odyk7CisJaWYgKCFza2IpIHsKKwkJ cmV0ID0zRCBORVRERVZfVFhfT0s7CisJCWdvdG8gb3V0OworCX0KKworCXNwYl9pbmRleCA9M0Qg aW50Zi0+dHhfc3BiX2luZGV4OworCXZhbGlkID0zRCBpbnRmLT50eF9zcGJfZG1hX3ZhbGlkOwor CWZvciAoaSA9M0QgMDsgaSA8PTNEIG5yX2ZyYWdzOyBpKyspIHsKKwkJaWYgKCFpKSB7CisJCQlz aXplID0zRCBza2JfaGVhZGxlbihza2IpOworCQkJaWYgKCFucl9mcmFncyAmJiBzaXplIDwgKEVU SF9aTEVOICsgRVRIX0ZDU19MRU4pKSB7CisJCQkJaWYgKHNrYl9wdXRfcGFkdG8oc2tiLCBFVEhf WkxFTiArIEVUSF9GQ1NfTEVOKSkgeworCQkJCQlyZXQgPTNEIE5FVERFVl9UWF9PSzsKKwkJCQkJ Z290byBvdXQ7CisJCQkJfQorCQkJCXNpemUgPTNEIHNrYi0+bGVuOworCQkJfQorCQkJbWFwcGlu ZyA9M0QgZG1hX21hcF9zaW5nbGUoa2Rldiwgc2tiLT5kYXRhLCBzaXplLAorCQkJCQkJIERNQV9U T19ERVZJQ0UpOworCQl9IGVsc2UgeworCQkJZnJhZyA9M0QgJnNrYl9zaGluZm8oc2tiKS0+ZnJh Z3NbaSAtIDFdOworCQkJc2l6ZSA9M0Qgc2tiX2ZyYWdfc2l6ZShmcmFnKTsKKwkJCW1hcHBpbmcg PTNEIHNrYl9mcmFnX2RtYV9tYXAoa2RldiwgZnJhZywgMCwgc2l6ZSwKKwkJCQkJCSAgIERNQV9U T19ERVZJQ0UpOworCQl9CisKKwkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKGtkZXYsIG1hcHBpbmcp KSB7CisJCQlyZXQgPTNEIE5FVERFVl9UWF9PSzsKKwkJCWludGYtPm1pYi50eF9kbWFfZmFpbGVk Kys7CisJCQlnb3RvIG91dF91bm1hcF9mcmFnczsKKwkJfQorCisJCXR4Y2IgPTNEICZpbnRmLT50 eF9jYnNbc3BiX2luZGV4XTsKKwkJZGVzYyA9M0QgJmludGYtPnR4X3NwYl9jcHVbc3BiX2luZGV4 XTsKKwkJbWVtc2V0KGRlc2MsIDAsIHNpemVvZigqZGVzYykpOworCQl0eGNiLT5za2IgPTNEIHNr YjsKKwkJdHhjYi0+Ynl0ZXNfc2VudCA9M0QgdG90YWxfYnl0ZXM7CisJCWRtYV91bm1hcF9hZGRy X3NldCh0eGNiLCBkbWFfYWRkciwgbWFwcGluZyk7CisJCWRtYV91bm1hcF9sZW5fc2V0KHR4Y2Is IGRtYV9sZW4sIHNpemUpOworCQlpZiAoIWkpIHsKKwkJCWRlc2MtPmZsYWdzIHw9M0QgREVTQ19T T0Y7CisJCQlpZiAoY3N1bV9odykKKwkJCQlkZXNjLT5mbGFncyB8PTNEIERFU0NfRVBLVF9DTUQ7 CisJCX0KKworCQlpZiAoaSA9M0Q9M0QgbnJfZnJhZ3MpIHsKKwkJCWRlc2MtPmZsYWdzIHw9M0Qg REVTQ19FT0Y7CisJCQl0eGNiLT5sYXN0ID0zRCB0cnVlOworCQl9CisKKwkJZGVzYy0+YnVmID0z RCBtYXBwaW5nOworCQlkZXNjLT5zaXplID0zRCBzaXplOworCQlkZXNjLT5mbGFncyB8PTNEIERF U0NfSU5UX0VOOworCisJCW5ldGlmX2RiZyhpbnRmLCB0eF9xdWV1ZWQsIGRldiwKKwkJCSAgIiVz IGRtYV9idWY9M0QlcGFkIGRtYV9sZW49M0QweCV4IGZsYWdzPTNEMHgleCBpbmRleD0zRDB4JXhc biIsCisJCQkgIF9fZnVuY19fLCAmbWFwcGluZywgZGVzYy0+c2l6ZSwgZGVzYy0+ZmxhZ3MsCisJ CQkgIHNwYl9pbmRleCk7CisKKwkJc3BiX2luZGV4ID0zRCBpbmNyX3Jpbmcoc3BiX2luZGV4LCBE RVNDX1JJTkdfQ09VTlQpOworCQl2YWxpZCA9M0QgaW5jcl9sYXN0X2J5dGUodmFsaWQsIGludGYt PnR4X3NwYl9kbWFfYWRkciwKKwkJCQkgICAgICAgREVTQ19SSU5HX0NPVU5UKTsKKwl9CisKKwkv KiBFbnN1cmUgYWxsIGRlc2NyaXB0b3JzIGhhdmUgYmVlbiB3cml0dGVuIHRvIERSQU0gZm9yIHRo ZQorCSAqIGhhcmR3YXJlIHRvIHNlZSB1cC10by1kYXRlIGNvbnRlbnRzLgorCSAqLworCXdtYigp OworCisJaW50Zi0+dHhfc3BiX2luZGV4ID0zRCBzcGJfaW5kZXg7CisJaW50Zi0+dHhfc3BiX2Rt YV92YWxpZCA9M0QgdmFsaWQ7CisJYmNtYXNwX2ludGZfdHhfd3JpdGUoaW50ZiwgaW50Zi0+dHhf c3BiX2RtYV92YWxpZCk7CisKKwlpZiAodHhfc3BiX3JpbmdfZnVsbChpbnRmLCBNQVhfU0tCX0ZS QUdTICsgMSkpCisJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKworCXNwaW5fdW5sb2NrKCZpbnRm LT50eF9sb2NrKTsKKwlyZXR1cm4gTkVUREVWX1RYX09LOworCitvdXRfdW5tYXBfZnJhZ3M6CisJ c3BiX2luZGV4ID0zRCBpbnRmLT50eF9zcGJfaW5kZXg7CisJZm9yIChqID0zRCAwOyBqIDwgaTsg aisrKSB7CisJCWJjbWFzcF9jbGVhbl90eGNiKGludGYsIHNwYl9pbmRleCk7CisJCXNwYl9pbmRl eCA9M0QgaW5jcl9yaW5nKHNwYl9pbmRleCwgREVTQ19SSU5HX0NPVU5UKTsKKwl9CitvdXQ6CisJ c3Bpbl91bmxvY2soJmludGYtPnR4X2xvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2 b2lkIGJjbWFzcF9uZXRpZl9zdGFydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVj dCBiY21hc3BfaW50ZiAqaW50ZiA9M0QgbmV0ZGV2X3ByaXYoZGV2KTsKKworCWJjbWFzcF9zZXRf cnhfbW9kZShkZXYpOworCW5hcGlfZW5hYmxlKCZpbnRmLT50eF9uYXBpKTsKKwluYXBpX2VuYWJs ZSgmaW50Zi0+cnhfbmFwaSk7CisKKwliY21hc3BfZW5hYmxlX3J4X2lycShpbnRmLCAxKTsKKwli Y21hc3BfZW5hYmxlX3R4X2lycShpbnRmLCAxKTsKKworCXBoeV9zdGFydChkZXYtPnBoeWRldik7 Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1bWFjX3Jlc2V0KHN0cnVjdCBiY21hc3BfaW50ZiAq aW50ZikKK3sKKwl1bWFjX3dsKGludGYsIDB4MCwgVU1DX0NNRCk7CisJdW1hY193bChpbnRmLCBV TUNfQ01EX1NXX1JFU0VULCBVTUNfQ01EKTsKKwl1c2xlZXBfcmFuZ2UoMTAsIDEwMCk7CisJdW1h Y193bChpbnRmLCAweDAsIFVNQ19DTUQpOworfQorCitzdGF0aWMgdm9pZCB1bWFjX3NldF9od19h ZGRyKHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZiwKKwkJCSAgICAgY29uc3QgdW5zaWduZWQgY2hh ciAqYWRkcikKK3sKKwl1MzIgbWFjMCA9M0QgKGFkZHJbMF0gPDwgMjQpIHwgKGFkZHJbMV0gPDwg MTYpIHwgKGFkZHJbMl0gPDwgOCkgfAorCQkgICAgYWRkclszXTsKKwl1MzIgbWFjMSA9M0QgKGFk ZHJbNF0gPDwgOCkgfCBhZGRyWzVdOworCisJdW1hY193bChpbnRmLCBtYWMwLCBVTUNfTUFDMCk7 CisJdW1hY193bChpbnRmLCBtYWMxLCBVTUNfTUFDMSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9p ZCB1bWFjX2VuYWJsZV9zZXQoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmLAorCQkJCSAgIHUzMiBt YXNrLCB1bnNpZ25lZCBpbnQgZW5hYmxlKQoreworCXUzMiByZWc7CisKKwlyZWcgPTNEIHVtYWNf cmwoaW50ZiwgVU1DX0NNRCk7CisJaWYgKGVuYWJsZSkKKwkJcmVnIHw9M0QgbWFzazsKKwllbHNl CisJCXJlZyAmPTNEIH5tYXNrOworCXVtYWNfd2woaW50ZiwgcmVnLCBVTUNfQ01EKTsKKworCS8q IFVuaU1BQyBzdG9wcyBvbiBhIHBhY2tldCBib3VuZGFyeSwgd2FpdCBmb3IgYSBmdWxsLXNpemVk IHBhY2tldAorCSAqIHRvIGJlIHByb2Nlc3NlZCAoMSBtc2VjKS4KKwkgKi8KKwlpZiAoZW5hYmxl ID0zRD0zRCAwKQorCQl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7Cit9CisKK3N0YXRpYyBpbmxp bmUgdm9pZCB1bWFjX2luaXQoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmKQoreworCXVtYWNfd2wo aW50ZiwgMHg4MDAsIFVNQ19GUk1fTEVOKTsKKwl1bWFjX3dsKGludGYsIDB4ZmZmZiwgVU1DX1BB VVNFX0NOVFJMKTsKKwl1bWFjX3dsKGludGYsIDB4ODAwLCBVTUNfUlhfTUFYX1BLVF9TWik7CisJ dW1hY19lbmFibGVfc2V0KGludGYsIFVNQ19DTURfUFJPTUlTQywgMSk7Cit9CisKK3N0YXRpYyBp bnQgYmNtYXNwX3R4X3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQor eworCXN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZiA9M0QKKwkJY29udGFpbmVyX29mKG5hcGksIHN0 cnVjdCBiY21hc3BfaW50ZiwgdHhfbmFwaSk7CisJc3RydWN0IGRldmljZSAqa2RldiA9M0QgJmlu dGYtPnBhcmVudC0+cGRldi0+ZGV2OworCXVuc2lnbmVkIGxvbmcgcmVhZCwgcmVsZWFzZWQgPTNE IDA7CisJc3RydWN0IGJjbWFzcF90eF9jYiAqdHhjYjsKKwlzdHJ1Y3QgYmNtYXNwX2Rlc2MgKmRl c2M7CisJZG1hX2FkZHJfdCBtYXBwaW5nOworCisJcmVhZCA9M0QgYmNtYXNwX2ludGZfdHhfcmVh ZChpbnRmKTsKKwl3aGlsZSAoaW50Zi0+dHhfc3BiX2RtYV9yZWFkICE9M0QgcmVhZCkgeworCQl0 eGNiID0zRCAmaW50Zi0+dHhfY2JzW2ludGYtPnR4X3NwYl9jbGVhbl9pbmRleF07CisJCW1hcHBp bmcgPTNEIGRtYV91bm1hcF9hZGRyKHR4Y2IsIGRtYV9hZGRyKTsKKworCQlkbWFfdW5tYXBfc2lu Z2xlKGtkZXYsIG1hcHBpbmcsCisJCQkJIGRtYV91bm1hcF9sZW4odHhjYiwgZG1hX2xlbiksCisJ CQkJIERNQV9UT19ERVZJQ0UpOworCisJCWlmICh0eGNiLT5sYXN0KSB7CisJCQlkZXZfY29uc3Vt ZV9za2JfYW55KHR4Y2ItPnNrYik7CisJCQlpbnRmLT5uZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7 CisJCQlpbnRmLT5uZGV2LT5zdGF0cy50eF9ieXRlcyArPTNEIHR4Y2ItPmJ5dGVzX3NlbnQ7CisJ CX0KKworCQlkZXNjID0zRCAmaW50Zi0+dHhfc3BiX2NwdVtpbnRmLT50eF9zcGJfY2xlYW5faW5k ZXhdOworCisJCW5ldGlmX2RiZyhpbnRmLCB0eF9kb25lLCBpbnRmLT5uZGV2LAorCQkJICAiJXMg ZG1hX2J1Zj0zRCVwYWQgZG1hX2xlbj0zRDB4JXggZmxhZ3M9M0QweCV4IGNfaW5kZXg9M0QweCV4 XG4iLAorCQkJICBfX2Z1bmNfXywgJm1hcHBpbmcsIGRlc2MtPnNpemUsIGRlc2MtPmZsYWdzLAor CQkJICBpbnRmLT50eF9zcGJfY2xlYW5faW5kZXgpOworCisJCWJjbWFzcF9jbGVhbl90eGNiKGlu dGYsIGludGYtPnR4X3NwYl9jbGVhbl9pbmRleCk7CisJCXJlbGVhc2VkKys7CisKKwkJaW50Zi0+ dHhfc3BiX2NsZWFuX2luZGV4ID0zRCBpbmNyX3JpbmcoaW50Zi0+dHhfc3BiX2NsZWFuX2luZGV4 LAorCQkJCQkJICAgICBERVNDX1JJTkdfQ09VTlQpOworCQlpbnRmLT50eF9zcGJfZG1hX3JlYWQg PTNEIGluY3JfZmlyc3RfYnl0ZShpbnRmLT50eF9zcGJfZG1hX3JlYWQsCisJCQkJCQkJaW50Zi0+ dHhfc3BiX2RtYV9hZGRyLAorCQkJCQkJCURFU0NfUklOR19DT1VOVCk7CisJfQorCisJLyogRW5z dXJlIGFsbCBkZXNjcmlwdG9ycyBoYXZlIGJlZW4gd3JpdHRlbiB0byBEUkFNIGZvciB0aGUgaGFy ZHdhcmUKKwkgKiB0byBzZWUgdXBkYXRlZCBjb250ZW50cy4KKwkgKi8KKwl3bWIoKTsKKworCW5h cGlfY29tcGxldGUoJmludGYtPnR4X25hcGkpOworCisJYmNtYXNwX2VuYWJsZV90eF9pcnEoaW50 ZiwgMSk7CisKKwlpZiAocmVsZWFzZWQpCisJCW5ldGlmX3dha2VfcXVldWUoaW50Zi0+bmRldik7 CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiY21hc3BfcnhfcG9sbChzdHJ1Y3QgbmFw aV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCit7CisJc3RydWN0IGJjbWFzcF9pbnRmICppbnRm ID0zRAorCQljb250YWluZXJfb2YobmFwaSwgc3RydWN0IGJjbWFzcF9pbnRmLCByeF9uYXBpKTsK KwlzdHJ1Y3QgZGV2aWNlICprZGV2ID0zRCAmaW50Zi0+cGFyZW50LT5wZGV2LT5kZXY7CisJdW5z aWduZWQgbG9uZyBwcm9jZXNzZWQgPTNEIDA7CisJc3RydWN0IGJjbWFzcF9kZXNjICpkZXNjOwor CXN0cnVjdCBza19idWZmICpza2I7CisJZG1hX2FkZHJfdCB2YWxpZDsKKwl2b2lkICpkYXRhOwor CXU2NCBmbGFnczsKKwl1MzIgbGVuOworCisJdmFsaWQgPTNEIGJjbWFzcF9pbnRmX3J4X2Rlc2Nf cmVhZChpbnRmKSArIDE7CisJaWYgKHZhbGlkID0zRD0zRCBpbnRmLT5yeF9lZHBrdF9kbWFfYWRk ciArIERFU0NfUklOR19TSVpFKQorCQl2YWxpZCA9M0QgaW50Zi0+cnhfZWRwa3RfZG1hX2FkZHI7 CisKKwl3aGlsZSAoKHByb2Nlc3NlZCA8IGJ1ZGdldCkgJiYgKHZhbGlkICE9M0QgaW50Zi0+cnhf ZWRwa3RfZG1hX3JlYWQpKSB7CisJCWRlc2MgPTNEICZpbnRmLT5yeF9lZHBrdF9jcHVbaW50Zi0+ cnhfZWRwa3RfaW5kZXhdOworCisJCS8qIEVuc3VyZSB0aGF0IGRlc2NyaXB0b3IgaGFzIGJlZW4g ZnVsbHkgd3JpdHRlbiB0byBEUkFNIGJ5CisJCSAqIGhhcmR3YXJlIGJlZm9yZSByZWFkaW5nIGJ5 IHRoZSBDUFUKKwkJICovCisJCXJtYigpOworCisJCS8qIENhbGN1bGF0ZSB2aXJ0IGFkZHIgYnkg b2Zmc2V0dGluZyBmcm9tIHBoeXNpY2FsIGFkZHIgKi8KKwkJZGF0YSA9M0QgaW50Zi0+cnhfcmlu Z19jcHUgKworCQkJKERFU0NfQUREUihkZXNjLT5idWYpIC0gaW50Zi0+cnhfcmluZ19kbWEpOwor CisJCWZsYWdzID0zRCBERVNDX0ZMQUdTKGRlc2MtPmJ1Zik7CisJCWlmICh1bmxpa2VseShmbGFn cyAmIChERVNDX0NSQ19FUlIgfCBERVNDX1JYX1NZTV9FUlIpKSkgeworCQkJbmV0aWZfZXJyKGlu dGYsIHJ4X3N0YXR1cywgaW50Zi0+bmRldiwgImZsYWdzPTNEMHglbGx4XG4iLAorCQkJCSAgZmxh Z3MpOworCisJCQlpbnRmLT5uZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCWludGYtPm5kZXYt PnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJCWdvdG8gbmV4dDsKKwkJfQorCisJCWRtYV9zeW5jX3Np bmdsZV9mb3JfY3B1KGtkZXYsIERFU0NfQUREUihkZXNjLT5idWYpLCBkZXNjLT5zaXplLAorCQkJ CQlETUFfRlJPTV9ERVZJQ0UpOworCisJCWxlbiA9M0QgZGVzYy0+c2l6ZTsKKworCQlza2IgPTNE IF9fbmV0ZGV2X2FsbG9jX3NrYihpbnRmLT5uZGV2LCBsZW4sCisJCQkJCSBHRlBfQVRPTUlDIHwg X19HRlBfTk9XQVJOKTsKKwkJaWYgKCFza2IpIHsKKwkJCWludGYtPm5kZXYtPnN0YXRzLnJ4X2Vy cm9ycysrOworCQkJaW50Zi0+bWliLmFsbG9jX3J4X3NrYl9mYWlsZWQrKzsKKwkJCW5ldGlmX3dh cm4oaW50ZiwgcnhfZXJyLCBpbnRmLT5uZGV2LAorCQkJCSAgICJTS0IgYWxsb2MgZmFpbGVkXG4i KTsKKwkJCWdvdG8gbmV4dDsKKwkJfQorCisJCXNrYl9wdXQoc2tiLCBsZW4pOworCQltZW1jcHko c2tiLT5kYXRhLCBkYXRhLCBsZW4pOworCisJCXNrYl9wdWxsKHNrYiwgMik7CisJCWxlbiAtPTNE IDI7CisJCWlmIChsaWtlbHkoaW50Zi0+Y3JjX2Z3ZCkpIHsKKwkJCXNrYl90cmltKHNrYiwgbGVu IC0gRVRIX0ZDU19MRU4pOworCQkJbGVuIC09M0QgRVRIX0ZDU19MRU47CisJCX0KKworCQlpZiAo KGludGYtPm5kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9SWENTVU0pICYmCisJCSAgICAoZGVzYy0+ YnVmICYgREVTQ19DSEtTVU0pKQorCQkJc2tiLT5pcF9zdW1tZWQgPTNEIENIRUNLU1VNX1VOTkVD RVNTQVJZOworCisJCXNrYi0+cHJvdG9jb2wgPTNEIGV0aF90eXBlX3RyYW5zKHNrYiwgaW50Zi0+ bmRldik7CisKKwkJbmFwaV9ncm9fcmVjZWl2ZShuYXBpLCBza2IpOworCisJCWludGYtPm5kZXYt PnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJaW50Zi0+bmRldi0+c3RhdHMucnhfYnl0ZXMgKz0zRCBs ZW47CisKK25leHQ6CisJCWJjbWFzcF9pbnRmX3J4X2J1ZmZlcl93cml0ZShpbnRmLCAoREVTQ19B RERSKGRlc2MtPmJ1ZikgKworCQkJCQkgICAgZGVzYy0+c2l6ZSkpOworCisJCXByb2Nlc3NlZCsr OworCQlpbnRmLT5yeF9lZHBrdF9kbWFfcmVhZCA9M0QKKwkJCWluY3JfZmlyc3RfYnl0ZShpbnRm LT5yeF9lZHBrdF9kbWFfcmVhZCwKKwkJCQkJaW50Zi0+cnhfZWRwa3RfZG1hX2FkZHIsCisJCQkJ CURFU0NfUklOR19DT1VOVCk7CisJCWludGYtPnJ4X2VkcGt0X2luZGV4ID0zRCBpbmNyX3Jpbmco aW50Zi0+cnhfZWRwa3RfaW5kZXgsCisJCQkJCQkgREVTQ19SSU5HX0NPVU5UKTsKKwl9CisKKwli Y21hc3BfaW50Zl9yeF9kZXNjX3dyaXRlKGludGYsIGludGYtPnJ4X2VkcGt0X2RtYV9yZWFkKTsK KworCWlmIChwcm9jZXNzZWQgPCBidWRnZXQpIHsKKwkJbmFwaV9jb21wbGV0ZV9kb25lKCZpbnRm LT5yeF9uYXBpLCBwcm9jZXNzZWQpOworCQliY21hc3BfZW5hYmxlX3J4X2lycShpbnRmLCAxKTsK Kwl9CisKKwlyZXR1cm4gcHJvY2Vzc2VkOworfQorCitzdGF0aWMgdm9pZCBiY21hc3BfYWRqX2xp bmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYg PTNEIG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9M0QgZGV2 LT5waHlkZXY7CisJdTMyIGNtZF9iaXRzID0zRCAwLCByZWc7CisJaW50IGNoYW5nZWQgPTNEIDA7 CisKKwlpZiAoaW50Zi0+b2xkX2xpbmsgIT0zRCBwaHlkZXYtPmxpbmspIHsKKwkJY2hhbmdlZCA9 M0QgMTsKKwkJaW50Zi0+b2xkX2xpbmsgPTNEIHBoeWRldi0+bGluazsKKwl9CisKKwlpZiAoaW50 Zi0+b2xkX2R1cGxleCAhPTNEIHBoeWRldi0+ZHVwbGV4KSB7CisJCWNoYW5nZWQgPTNEIDE7CisJ CWludGYtPm9sZF9kdXBsZXggPTNEIHBoeWRldi0+ZHVwbGV4OworCX0KKworCXN3aXRjaCAocGh5 ZGV2LT5zcGVlZCkgeworCWNhc2UgU1BFRURfMjUwMDoKKwkJY21kX2JpdHMgPTNEIFVNQ19DTURf U1BFRURfMjUwMDsKKwkJYnJlYWs7CisJY2FzZSBTUEVFRF8xMDAwOgorCQljbWRfYml0cyA9M0Qg VU1DX0NNRF9TUEVFRF8xMDAwOworCQlicmVhazsKKwljYXNlIFNQRUVEXzEwMDoKKwkJY21kX2Jp dHMgPTNEIFVNQ19DTURfU1BFRURfMTAwOworCQlicmVhazsKKwljYXNlIFNQRUVEXzEwOgorCQlj bWRfYml0cyA9M0QgVU1DX0NNRF9TUEVFRF8xMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJl YWs7CisJfQorCWNtZF9iaXRzIDw8PTNEIFVNQ19DTURfU1BFRURfU0hJRlQ7CisKKwlpZiAocGh5 ZGV2LT5kdXBsZXggPTNEPTNEIERVUExFWF9IQUxGKQorCQljbWRfYml0cyB8PTNEIFVNQ19DTURf SERfRU47CisKKwlpZiAoaW50Zi0+b2xkX3BhdXNlICE9M0QgcGh5ZGV2LT5wYXVzZSkgeworCQlj aGFuZ2VkID0zRCAxOworCQlpbnRmLT5vbGRfcGF1c2UgPTNEIHBoeWRldi0+cGF1c2U7CisJfQor CisJaWYgKCFwaHlkZXYtPnBhdXNlKQorCQljbWRfYml0cyB8PTNEIFVNQ19DTURfUlhfUEFVU0Vf SUdOT1JFIHwgVU1DX0NNRF9UWF9QQVVTRV9JR05PUkU7CisKKwlpZiAoIWNoYW5nZWQpCisJCXJl dHVybjsKKworCWlmIChwaHlkZXYtPmxpbmspIHsKKwkJcmVnID0zRCB1bWFjX3JsKGludGYsIFVN Q19DTUQpOworCQlyZWcgJj0zRCB+KChVTUNfQ01EX1NQRUVEX01BU0sgPDwgVU1DX0NNRF9TUEVF RF9TSElGVCkgfAorCQkJVU1DX0NNRF9IRF9FTiB8IFVNQ19DTURfUlhfUEFVU0VfSUdOT1JFIHwK KwkJCVVNQ19DTURfVFhfUEFVU0VfSUdOT1JFKTsKKwkJcmVnIHw9M0QgY21kX2JpdHM7CisJCXVt YWNfd2woaW50ZiwgcmVnLCBVTUNfQ01EKTsKKworCQlpbnRmLT5lZWUuZWVlX2FjdGl2ZSA9M0Qg cGh5X2luaXRfZWVlKHBoeWRldiwgMCkgPj0zRCAwOworCQliY21hc3BfZWVlX2VuYWJsZV9zZXQo aW50ZiwgaW50Zi0+ZWVlLmVlZV9hY3RpdmUpOworCX0KKworCXJlZyA9M0QgcmdtaWlfcmwoaW50 ZiwgUkdNSUlfT09CX0NOVFJMKTsKKwlpZiAocGh5ZGV2LT5saW5rKQorCQlyZWcgfD0zRCBSR01J SV9MSU5LOworCWVsc2UKKwkJcmVnICY9M0QgflJHTUlJX0xJTks7CisJcmdtaWlfd2woaW50Ziwg cmVnLCBSR01JSV9PT0JfQ05UUkwpOworCisJaWYgKGNoYW5nZWQpCisJCXBoeV9wcmludF9zdGF0 dXMocGh5ZGV2KTsKK30KKworc3RhdGljIGludCBiY21hc3BfaW5pdF9yeChzdHJ1Y3QgYmNtYXNw X2ludGYgKmludGYpCit7CisJc3RydWN0IGRldmljZSAqa2RldiA9M0QgJmludGYtPnBhcmVudC0+ cGRldi0+ZGV2OworCXN0cnVjdCBwYWdlICpidWZmZXJfcGc7CisJZG1hX2FkZHJfdCBkbWE7CisJ dm9pZCAqcDsKKwl1MzIgcmVnOworCWludCByZXQ7CisKKwlpbnRmLT5yeF9idWZfb3JkZXIgPTNE IGdldF9vcmRlcihSSU5HX0JVRkZFUl9TSVpFKTsKKwlidWZmZXJfcGcgPTNEIGFsbG9jX3BhZ2Vz KEdGUF9LRVJORUwsIGludGYtPnJ4X2J1Zl9vcmRlcik7CisKKwlkbWEgPTNEIGRtYV9tYXBfcGFn ZShrZGV2LCBidWZmZXJfcGcsIDAsIFJJTkdfQlVGRkVSX1NJWkUsCisJCQkgICBETUFfRlJPTV9E RVZJQ0UpOworCWlmIChkbWFfbWFwcGluZ19lcnJvcihrZGV2LCBkbWEpKSB7CisJCV9fZnJlZV9w YWdlcyhidWZmZXJfcGcsIGludGYtPnJ4X2J1Zl9vcmRlcik7CisJCXJldHVybiAtRU5PTUVNOwor CX0KKwlpbnRmLT5yeF9yaW5nX2NwdSA9M0QgcGFnZV90b192aXJ0KGJ1ZmZlcl9wZyk7CisJaW50 Zi0+cnhfcmluZ19kbWEgPTNEIGRtYTsKKwlpbnRmLT5yeF9yaW5nX2RtYV92YWxpZCA9M0QgaW50 Zi0+cnhfcmluZ19kbWEgKyBSSU5HX0JVRkZFUl9TSVpFIC0gMTsKKworCXAgPTNEIGRtYV9hbGxv Y19jb2hlcmVudChrZGV2LCBERVNDX1JJTkdfU0laRSwgJmludGYtPnJ4X2VkcGt0X2RtYV9hZGRy LAorCQkJICAgICAgIEdGUF9LRVJORUwpOworCWlmICghcCkgeworCQlyZXQgPTNEIC1FTk9NRU07 CisJCWdvdG8gZnJlZV9yeF9yaW5nOworCX0KKwlpbnRmLT5yeF9lZHBrdF9jcHUgPTNEIHA7CisK KwluZXRpZl9uYXBpX2FkZChpbnRmLT5uZGV2LCAmaW50Zi0+cnhfbmFwaSwgYmNtYXNwX3J4X3Bv bGwpOworCisJaW50Zi0+cnhfZWRwa3RfZG1hX3JlYWQgPTNEIGludGYtPnJ4X2VkcGt0X2RtYV9h ZGRyOworCWludGYtPnJ4X2VkcGt0X2luZGV4ID0zRCAwOworCisJLyogTWFrZSBzdXJlIGNoYW5u ZWxzIGFyZSBkaXNhYmxlZCAqLworCXJ4X2VkcGt0X2NmZ193bChpbnRmLCAweDAsIFJYX0VEUEtU X0NGR19FTkFCTEUpOworCisJLyogUnggU1BCICovCisJcnhfZWRwa3RfY2ZnX3dxKGludGYsIGlu dGYtPnJ4X3JpbmdfZG1hLCBSWF9FRFBLVF9SSU5HX0JVRkZFUl9SRUFEKTsKKwlyeF9lZHBrdF9j Zmdfd3EoaW50ZiwgaW50Zi0+cnhfcmluZ19kbWEsIFJYX0VEUEtUX1JJTkdfQlVGRkVSX1dSSVRF KTsKKwlyeF9lZHBrdF9jZmdfd3EoaW50ZiwgaW50Zi0+cnhfcmluZ19kbWEsIFJYX0VEUEtUX1JJ TkdfQlVGRkVSX0JBU0UpOworCXJ4X2VkcGt0X2NmZ193cShpbnRmLCBpbnRmLT5yeF9yaW5nX2Rt YV92YWxpZCwKKwkJCVJYX0VEUEtUX1JJTkdfQlVGRkVSX0VORCk7CisJcnhfZWRwa3RfY2ZnX3dx KGludGYsIGludGYtPnJ4X3JpbmdfZG1hX3ZhbGlkLAorCQkJUlhfRURQS1RfUklOR19CVUZGRVJf VkFMSUQpOworCisJLyogRURQS1QgKi8KKwlyeF9lZHBrdF9jZmdfd2woaW50ZiwgKFJYX0VEUEtU X0NGR19DRkcwX1JCVUZfNEsgPDwKKwkJCVJYX0VEUEtUX0NGR19DRkcwX0RCVUZfU0hJRlQpIHwK KwkJICAgICAgIChSWF9FRFBLVF9DRkdfQ0ZHMF82NF9BTE4gPDwKKwkJCVJYX0VEUEtUX0NGR19D RkcwX0JBTE5fU0hJRlQpIHwKKwkJICAgICAgIChSWF9FRFBLVF9DRkdfQ0ZHMF9FRlJNX1NUVUYp LAorCQkJUlhfRURQS1RfQ0ZHX0NGRzApOworCXJ4X2VkcGt0X2RtYV93cShpbnRmLCBpbnRmLT5y eF9lZHBrdF9kbWFfYWRkciwgUlhfRURQS1RfRE1BX1dSSVRFKTsKKwlyeF9lZHBrdF9kbWFfd3Eo aW50ZiwgaW50Zi0+cnhfZWRwa3RfZG1hX2FkZHIsIFJYX0VEUEtUX0RNQV9SRUFEKTsKKwlyeF9l ZHBrdF9kbWFfd3EoaW50ZiwgaW50Zi0+cnhfZWRwa3RfZG1hX2FkZHIsIFJYX0VEUEtUX0RNQV9C QVNFKTsKKwlyeF9lZHBrdF9kbWFfd3EoaW50ZiwgaW50Zi0+cnhfZWRwa3RfZG1hX2FkZHIgKyAo REVTQ19SSU5HX1NJWkUgLSAxKSwKKwkJCVJYX0VEUEtUX0RNQV9FTkQpOworCXJ4X2VkcGt0X2Rt YV93cShpbnRmLCBpbnRmLT5yeF9lZHBrdF9kbWFfYWRkciArIChERVNDX1JJTkdfU0laRSAtIDEp LAorCQkJUlhfRURQS1RfRE1BX1ZBTElEKTsKKworCXJlZyA9M0QgVU1BQzJGQl9DRkdfREVGQVVM VF9FTiB8CisJICAgICAgKChpbnRmLT5jaGFubmVsICsgMTEpIDw8IFVNQUMyRkJfQ0ZHX0NISURf U0hJRlQpOworCXJlZyB8PTNEICgweGQgPDwgVU1BQzJGQl9DRkdfT0tfU0VORF9TSElGVCk7CisJ dW1hYzJmYl93bChpbnRmLCByZWcsIFVNQUMyRkJfQ0ZHKTsKKworCXJldHVybiAwOworCitmcmVl X3J4X3Jpbmc6CisJZG1hX3VubWFwX3BhZ2Uoa2RldiwgaW50Zi0+cnhfcmluZ19kbWEsIFJJTkdf QlVGRkVSX1NJWkUsCisJCSAgICAgICBETUFfRlJPTV9ERVZJQ0UpOworCV9fZnJlZV9wYWdlcyh2 aXJ0X3RvX3BhZ2UoaW50Zi0+cnhfcmluZ19jcHUpLCBpbnRmLT5yeF9idWZfb3JkZXIpOworCisJ cmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgYmNtYXNwX3JlY2xhaW1fZnJlZV9hbGxfcngo c3RydWN0IGJjbWFzcF9pbnRmICppbnRmKQoreworCXN0cnVjdCBkZXZpY2UgKmtkZXYgPTNEICZp bnRmLT5wYXJlbnQtPnBkZXYtPmRldjsKKworCWRtYV9mcmVlX2NvaGVyZW50KGtkZXYsIERFU0Nf UklOR19TSVpFLCBpbnRmLT5yeF9lZHBrdF9jcHUsCisJCQkgIGludGYtPnJ4X2VkcGt0X2RtYV9h ZGRyKTsKKwlkbWFfdW5tYXBfcGFnZShrZGV2LCBpbnRmLT5yeF9yaW5nX2RtYSwgUklOR19CVUZG RVJfU0laRSwKKwkJICAgICAgIERNQV9GUk9NX0RFVklDRSk7CisJX19mcmVlX3BhZ2VzKHZpcnRf dG9fcGFnZShpbnRmLT5yeF9yaW5nX2NwdSksIGludGYtPnJ4X2J1Zl9vcmRlcik7Cit9CisKK3N0 YXRpYyBpbnQgYmNtYXNwX2luaXRfdHgoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmKQoreworCXN0 cnVjdCBkZXZpY2UgKmtkZXYgPTNEICZpbnRmLT5wYXJlbnQtPnBkZXYtPmRldjsKKwl2b2lkICpw OworCWludCByZXQ7CisKKwlwID0zRCBkbWFfYWxsb2NfY29oZXJlbnQoa2RldiwgREVTQ19SSU5H X1NJWkUsICZpbnRmLT50eF9zcGJfZG1hX2FkZHIsCisJCQkgICAgICAgR0ZQX0tFUk5FTCk7CisJ aWYgKCFwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWludGYtPnR4X3NwYl9jcHUgPTNEIHA7CisJ aW50Zi0+dHhfc3BiX2RtYV92YWxpZCA9M0QgaW50Zi0+dHhfc3BiX2RtYV9hZGRyICsgREVTQ19S SU5HX1NJWkUgLSAxOworCWludGYtPnR4X3NwYl9kbWFfcmVhZCA9M0QgaW50Zi0+dHhfc3BiX2Rt YV9hZGRyOworCisJaW50Zi0+dHhfY2JzID0zRCBrY2FsbG9jKERFU0NfUklOR19DT1VOVCwgc2l6 ZW9mKHN0cnVjdCBiY21hc3BfdHhfY2IpLAorCQkJICAgICAgIEdGUF9LRVJORUwpOworCWlmICgh aW50Zi0+dHhfY2JzKSB7CisJCXJldCA9M0QgLUVOT01FTTsKKwkJZ290byBmcmVlX3R4X3NwYjsK Kwl9CisKKwlzcGluX2xvY2tfaW5pdCgmaW50Zi0+dHhfbG9jayk7CisJaW50Zi0+dHhfc3BiX2lu ZGV4ID0zRCAwOworCWludGYtPnR4X3NwYl9jbGVhbl9pbmRleCA9M0QgMDsKKworCW5ldGlmX25h cGlfYWRkX3R4KGludGYtPm5kZXYsICZpbnRmLT50eF9uYXBpLCBiY21hc3BfdHhfcG9sbCk7CisK KwkvKiBNYWtlIHN1cmUgY2hhbm5lbHMgYXJlIGRpc2FibGVkICovCisJdHhfc3BiX2N0cmxfd2wo aW50ZiwgMHgwLCBUWF9TUEJfQ1RSTF9FTkFCTEUpOworCXR4X2Vwa3RfY29yZV93bChpbnRmLCAw eDAsIFRYX0VQS1RfQ19DRkdfTUlTQyk7CisKKwkvKiBUeCBTUEIgKi8KKwl0eF9zcGJfY3RybF93 bChpbnRmLCAoKGludGYtPmNoYW5uZWwgKyA4KSA8PCBUWF9TUEJfQ1RSTF9YRl9CSURfU0hJRlQp LAorCQkgICAgICAgVFhfU1BCX0NUUkxfWEZfQ1RSTDIpOworCXR4X3BhdXNlX2N0cmxfd2woaW50 ZiwgKDEgPDwgKGludGYtPmNoYW5uZWwgKyA4KSksIFRYX1BBVVNFX01BUF9WRUNUT1IpOworCXR4 X3NwYl90b3Bfd2woaW50ZiwgMHgxZSwgVFhfU1BCX1RPUF9CTEtPVVQpOworCXR4X3NwYl90b3Bf d2woaW50ZiwgMHgwLCBUWF9TUEJfVE9QX1NQUkVfQldfQ1RSTCk7CisKKwl0eF9zcGJfZG1hX3dx KGludGYsIGludGYtPnR4X3NwYl9kbWFfYWRkciwgVFhfU1BCX0RNQV9SRUFEKTsKKwl0eF9zcGJf ZG1hX3dxKGludGYsIGludGYtPnR4X3NwYl9kbWFfYWRkciwgVFhfU1BCX0RNQV9CQVNFKTsKKwl0 eF9zcGJfZG1hX3dxKGludGYsIGludGYtPnR4X3NwYl9kbWFfdmFsaWQsIFRYX1NQQl9ETUFfRU5E KTsKKwl0eF9zcGJfZG1hX3dxKGludGYsIGludGYtPnR4X3NwYl9kbWFfdmFsaWQsIFRYX1NQQl9E TUFfVkFMSUQpOworCisJcmV0dXJuIDA7CisKK2ZyZWVfdHhfc3BiOgorCWRtYV9mcmVlX2NvaGVy ZW50KGtkZXYsIERFU0NfUklOR19TSVpFLCBpbnRmLT50eF9zcGJfY3B1LAorCQkJICBpbnRmLT50 eF9zcGJfZG1hX2FkZHIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgYmNtYXNw X3JlY2xhaW1fZnJlZV9hbGxfdHgoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmKQoreworCXN0cnVj dCBkZXZpY2UgKmtkZXYgPTNEICZpbnRmLT5wYXJlbnQtPnBkZXYtPmRldjsKKworCS8qIEZyZWUg ZGVzY3JpcHRvcnMgKi8KKwlkbWFfZnJlZV9jb2hlcmVudChrZGV2LCBERVNDX1JJTkdfU0laRSwg aW50Zi0+dHhfc3BiX2NwdSwKKwkJCSAgaW50Zi0+dHhfc3BiX2RtYV9hZGRyKTsKKworCS8qIEZy ZWUgY2JzICovCisJa2ZyZWUoaW50Zi0+dHhfY2JzKTsKK30KKworc3RhdGljIHZvaWQgYmNtYXNw X2VwaHlfZW5hYmxlX3NldChzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsIGJvb2wgZW5hYmxlKQor eworCXUzMiBtYXNrID0zRCBSR01JSV9FUEhZX0NGR19JRERRX0JJQVMgfCBSR01JSV9FUEhZX0NG R19FWFRfUFdSRE9XTiB8CisJCSAgIFJHTUlJX0VQSFlfQ0ZHX0lERFFfR0xPQkFMOworCXUzMiBy ZWc7CisKKwlyZWcgPTNEIHJnbWlpX3JsKGludGYsIFJHTUlJX0VQSFlfQ05UUkwpOworCWlmIChl bmFibGUpIHsKKwkJcmVnICY9M0QgflJHTUlJX0VQSFlfQ0syNV9ESVM7CisJCXJnbWlpX3dsKGlu dGYsIHJlZywgUkdNSUlfRVBIWV9DTlRSTCk7CisJCW1kZWxheSgxKTsKKworCQlyZWcgJj0zRCB+ bWFzazsKKwkJcmVnIHw9M0QgUkdNSUlfRVBIWV9SRVNFVDsKKwkJcmdtaWlfd2woaW50ZiwgcmVn LCBSR01JSV9FUEhZX0NOVFJMKTsKKwkJbWRlbGF5KDEpOworCisJCXJlZyAmPTNEIH5SR01JSV9F UEhZX1JFU0VUOworCX0gZWxzZSB7CisJCXJlZyB8PTNEIG1hc2sgfCBSR01JSV9FUEhZX1JFU0VU OworCQlyZ21paV93bChpbnRmLCByZWcsIFJHTUlJX0VQSFlfQ05UUkwpOworCQltZGVsYXkoMSk7 CisJCXJlZyB8PTNEIFJHTUlJX0VQSFlfQ0syNV9ESVM7CisJfQorCXJnbWlpX3dsKGludGYsIHJl ZywgUkdNSUlfRVBIWV9DTlRSTCk7CisJbWRlbGF5KDEpOworCisJLyogU2V0IG9yIGNsZWFyIHRo ZSBMRUQgY29udHJvbCBvdmVycmlkZSB0byBhdm9pZCBsaWdodGluZyB1cCBMRURzCisJICogd2hp bGUgdGhlIEVQSFkgaXMgcG93ZXJlZCBvZmYgYW5kIGRyYXdpbmcgdW5uZWNlc3NhcnkgY3VycmVu dC4KKwkgKi8KKwlyZWcgPTNEIHJnbWlpX3JsKGludGYsIFJHTUlJX1NZU19MRURfQ05UUkwpOwor CWlmIChlbmFibGUpCisJCXJlZyAmPTNEIH5SR01JSV9TWVNfTEVEX0NOVFJMX0xJTktfT1ZSRDsK KwllbHNlCisJCXJlZyB8PTNEIFJHTUlJX1NZU19MRURfQ05UUkxfTElOS19PVlJEOworCXJnbWlp X3dsKGludGYsIHJlZywgUkdNSUlfU1lTX0xFRF9DTlRSTCk7Cit9CisKK3N0YXRpYyB2b2lkIGJj bWFzcF9yZ21paV9tb2RlX2VuX3NldChzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsIGJvb2wgZW5h YmxlKQoreworCXUzMiByZWc7CisKKwlyZWcgPTNEIHJnbWlpX3JsKGludGYsIFJHTUlJX09PQl9D TlRSTCk7CisJcmVnICY9M0QgflJHTUlJX09PQl9ESVM7CisJaWYgKGVuYWJsZSkKKwkJcmVnIHw9 M0QgUkdNSUlfTU9ERV9FTjsKKwllbHNlCisJCXJlZyAmPTNEIH5SR01JSV9NT0RFX0VOOworCXJn bWlpX3dsKGludGYsIHJlZywgUkdNSUlfT09CX0NOVFJMKTsKK30KKworc3RhdGljIHZvaWQgYmNt YXNwX25ldGlmX2RlaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBiY21h c3BfaW50ZiAqaW50ZiA9M0QgbmV0ZGV2X3ByaXYoZGV2KTsKKwl1MzIgcmVnLCB0aW1lb3V0ID0z RCAxMDAwOworCisJbmFwaV9kaXNhYmxlKCZpbnRmLT50eF9uYXBpKTsKKworCWJjbWFzcF9lbmFi bGVfdHgoaW50ZiwgMCk7CisKKwkvKiBGbHVzaCBhbnkgVFggcGFja2V0cyBpbiB0aGUgcGlwZSAq LworCXR4X3NwYl9kbWFfd2woaW50ZiwgVFhfU1BCX0RNQV9GSUZPX0ZMVVNILCBUWF9TUEJfRE1B X0ZJRk9fQ1RSTCk7CisJZG8geworCQlyZWcgPTNEIHR4X3NwYl9kbWFfcmwoaW50ZiwgVFhfU1BC X0RNQV9GSUZPX1NUQVRVUyk7CisJCWlmICghKHJlZyAmIFRYX1NQQl9ETUFfRklGT19GTFVTSCkp CisJCQlicmVhazsKKwkJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOworCX0gd2hpbGUgKHRpbWVv dXQtLSA+IDApOworCXR4X3NwYl9kbWFfd2woaW50ZiwgMHgwLCBUWF9TUEJfRE1BX0ZJRk9fQ1RS TCk7CisKKwl1bWFjX2VuYWJsZV9zZXQoaW50ZiwgVU1DX0NNRF9UWF9FTiwgMCk7CisKKwlwaHlf c3RvcChkZXYtPnBoeWRldik7CisKKwl1bWFjX2VuYWJsZV9zZXQoaW50ZiwgVU1DX0NNRF9SWF9F TiwgMCk7CisKKwliY21hc3BfZmx1c2hfcnhfcG9ydChpbnRmKTsKKwl1c2xlZXBfcmFuZ2UoMTAw MCwgMjAwMCk7CisJYmNtYXNwX2VuYWJsZV9yeChpbnRmLCAwKTsKKworCW5hcGlfZGlzYWJsZSgm aW50Zi0+cnhfbmFwaSk7CisKKwkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KKwliY21hc3BfZW5h YmxlX3R4X2lycShpbnRmLCAwKTsKKwliY21hc3BfZW5hYmxlX3J4X2lycShpbnRmLCAwKTsKKwor CW5ldGlmX25hcGlfZGVsKCZpbnRmLT50eF9uYXBpKTsKKwliY21hc3BfcmVjbGFpbV9mcmVlX2Fs bF90eChpbnRmKTsKKworCW5ldGlmX25hcGlfZGVsKCZpbnRmLT5yeF9uYXBpKTsKKwliY21hc3Bf cmVjbGFpbV9mcmVlX2FsbF9yeChpbnRmKTsKK30KKworc3RhdGljIGludCBiY21hc3Bfc3RvcChz dHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZiA9M0Qg bmV0ZGV2X3ByaXYoZGV2KTsKKworCW5ldGlmX2RiZyhpbnRmLCBpZmRvd24sIGRldiwgImJjbWFz cCBzdG9wXG4iKTsKKworCS8qIFN0b3AgdHggZnJvbSB1cGRhdGluZyBIVyAqLworCW5ldGlmX3R4 X2Rpc2FibGUoZGV2KTsKKworCWJjbWFzcF9uZXRpZl9kZWluaXQoZGV2KTsKKworCXBoeV9kaXNj b25uZWN0KGRldi0+cGh5ZGV2KTsKKworCS8qIERpc2FibGUgaW50ZXJuYWwgRVBIWSBvciBleHRl cm5hbCBQSFkgKi8KKwlpZiAoaW50Zi0+aW50ZXJuYWxfcGh5KQorCQliY21hc3BfZXBoeV9lbmFi bGVfc2V0KGludGYsIGZhbHNlKTsKKwllbHNlCisJCWJjbWFzcF9yZ21paV9tb2RlX2VuX3NldChp bnRmLCBmYWxzZSk7CisKKwkvKiBEaXNhYmxlIHRoZSBpbnRlcmZhY2UgY2xvY2tzICovCisJYmNt YXNwX2NvcmVfY2xvY2tfc2V0X2ludGYoaW50ZiwgZmFsc2UpOworCisJY2xrX2Rpc2FibGVfdW5w cmVwYXJlKGludGYtPnBhcmVudC0+Y2xrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9p ZCBiY21hc3BfY29uZmlndXJlX3BvcnQoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmKQoreworCXUz MiByZWcsIGlkX21vZGVfZGlzID0zRCAwOworCisJcmVnID0zRCByZ21paV9ybChpbnRmLCBSR01J SV9QT1JUX0NOVFJMKTsKKwlyZWcgJj0zRCB+UkdNSUlfUE9SVF9NT0RFX01BU0s7CisKKwlzd2l0 Y2ggKGludGYtPnBoeV9pbnRlcmZhY2UpIHsKKwljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01J SToKKwkJLyogUkdNSUlfTk9fSUQ6IFRYQyB0cmFuc2l0aW9ucyBhdCB0aGUgc2FtZSB0aW1lIGFz IFRYRAorCQkgKgkJKHJlcXVpcmVzIFBDQiBvciByZWNlaXZlci1zaWRlIGRlbGF5KQorCQkgKiBS R01JSToJQWRkIDJucyBkZWxheSBvbiBUWEMgKDkwIGRlZ3JlZSBzaGlmdCkKKwkJICoKKwkJICog SUQgaXMgaW1wbGljaXRseSBkaXNhYmxlZCBmb3IgMTAwTWJwcyAoUkcpTUlJIG9wZXJhdGlvbi4K KwkJICovCisJCWlkX21vZGVfZGlzID0zRCBSR01JSV9JRF9NT0RFX0RJUzsKKwkJZmFsbHRocm91 Z2g7CisJY2FzZSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUlfVFhJRDoKKwkJcmVnIHw9M0QgUkdN SUlfUE9SVF9NT0RFX0VYVF9HUEhZOworCQlicmVhazsKKwljYXNlIFBIWV9JTlRFUkZBQ0VfTU9E RV9NSUk6CisJCXJlZyB8PTNEIFJHTUlJX1BPUlRfTU9ERV9FWFRfRVBIWTsKKwkJYnJlYWs7CisJ ZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJaWYgKGludGYtPmludGVybmFsX3BoeSkKKwkJcmVn IHw9M0QgUkdNSUlfUE9SVF9NT0RFX0VQSFk7CisKKwlyZ21paV93bChpbnRmLCByZWcsIFJHTUlJ X1BPUlRfQ05UUkwpOworCisJcmVnID0zRCByZ21paV9ybChpbnRmLCBSR01JSV9PT0JfQ05UUkwp OworCXJlZyAmPTNEIH5SR01JSV9JRF9NT0RFX0RJUzsKKwlyZWcgfD0zRCBpZF9tb2RlX2RpczsK KwlyZ21paV93bChpbnRmLCByZWcsIFJHTUlJX09PQl9DTlRSTCk7Cit9CisKK3N0YXRpYyBpbnQg YmNtYXNwX25ldGlmX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBwaHlfY29ubmVj dCkKK3sKKwlzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYgPTNEIG5ldGRldl9wcml2KGRldik7CisJ cGh5X2ludGVyZmFjZV90IHBoeV9pZmFjZSA9M0QgaW50Zi0+cGh5X2ludGVyZmFjZTsKKwl1MzIg cGh5X2ZsYWdzID0zRCBQSFlfQlJDTV9BVVRPX1BXUkRXTl9FTkFCTEUgfAorCQkJUEhZX0JSQ01f RElTX1RYQ1JYQ19OT0VOUkdZIHwKKwkJCVBIWV9CUkNNX0lERFFfU1VTUEVORDsKKwlzdHJ1Y3Qg cGh5X2RldmljZSAqcGh5ZGV2ID0zRCBOVUxMOworCWludCByZXQ7CisKKwkvKiBBbHdheXMgZW5h YmxlIGludGVyZmFjZSBjbG9ja3MgKi8KKwliY21hc3BfY29yZV9jbG9ja19zZXRfaW50ZihpbnRm LCB0cnVlKTsKKworCS8qIEVuYWJsZSBpbnRlcm5hbCBQSFkgb3IgZXh0ZXJuYWwgUEhZIGJlZm9y ZSBhbnkgTUFDIGFjdGl2aXR5ICovCisJaWYgKGludGYtPmludGVybmFsX3BoeSkKKwkJYmNtYXNw X2VwaHlfZW5hYmxlX3NldChpbnRmLCB0cnVlKTsKKwllbHNlCisJCWJjbWFzcF9yZ21paV9tb2Rl X2VuX3NldChpbnRmLCB0cnVlKTsKKwliY21hc3BfY29uZmlndXJlX3BvcnQoaW50Zik7CisKKwkv KiBUaGlzIGlzIGFuIHVnbHkgcXVpcmsgYnV0IHdlIGhhdmUgbm90IGJlZW4gY29ycmVjdGx5CisJ ICogaW50ZXJwcmV0aW5nIHRoZSBwaHlfaW50ZXJmYWNlIHZhbHVlcyBhbmQgd2UgaGF2ZSBkb25l IHRoYXQKKwkgKiBhY3Jvc3MgZGlmZmVyZW50IGRyaXZlcnMsIHNvIGF0IGxlYXN0IHdlIGFyZSBj b25zaXN0ZW50IGluCisJICogb3VyIG1pc3Rha2VzLgorCSAqCisJICogV2hlbiB0aGUgR2VuZXJp YyBQSFkgZHJpdmVyIGlzIGluIHVzZSBlaXRoZXIgdGhlIFBIWSBoYXMKKwkgKiBiZWVuIHN0cmFw cGVkIG9yIHByb2dyYW1tZWQgY29ycmVjdGx5IGJ5IHRoZSBib290IGxvYWRlciBzbworCSAqIHdl IHNob3VsZCBzdGljayB0byBvdXIgaW5jb3JyZWN0IGludGVycHJldGF0aW9uIHNpbmNlIHdlCisJ ICogaGF2ZSB2YWxpZGF0ZWQgaXQuCisJICoKKwkgKiBOb3cgd2hlbiBhIGRlZGljYXRlZCBQSFkg ZHJpdmVyIGlzIGluIHVzZSwgd2UgbmVlZCB0bworCSAqIHJldmVyc2UgdGhlIG1lYW5pbmcgb2Yg dGhlIHBoeV9pbnRlcmZhY2VfbW9kZSB2YWx1ZXMgdG8KKwkgKiBzb21ldGhpbmcgdGhhdCB0aGUg UEhZIGRyaXZlciB3aWxsIGludGVycHJldCBhbmQgYWN0IG9uIHN1Y2gKKwkgKiB0aGF0IHdlIGhh dmUgdHdvIG1pc3Rha2VzIGNhbmNlbGluZyB0aGVtc2VsdmVzIHNvIHRvIHNwZWFrLgorCSAqIFdl IG9ubHkgZG8gdGhpcyBmb3IgdGhlIHR3byBtb2RlcyB0aGF0IEdFTkVUIGRyaXZlcgorCSAqIG9m ZmljaWFsbHkgc3VwcG9ydHMgb24gQnJvYWRjb20gU1RCIGNoaXBzOgorCSAqIFBIWV9JTlRFUkZB Q0VfTU9ERV9SR01JSSBhbmQgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX1RYSUQuCisJICogT3Ro ZXIgbW9kZXMgYXJlIG5vdCAqb2ZmaWNpYWxseSogc3VwcG9ydGVkIHdpdGggdGhlIGJvb3QKKwkg KiBsb2FkZXIgYW5kIHRoZSBzY3JpcHRlZCBlbnZpcm9ubWVudCBnZW5lcmF0aW5nIERldmljZSBU cmVlCisJICogYmxvYnMgZm9yIHRob3NlIHBsYXRmb3Jtcy4KKwkgKgorCSAqIE5vdGUgdGhhdCBp bnRlcm5hbCBQSFkgYW5kIGZpeGVkLWxpbmsgY29uZmlndXJhdGlvbnMgYXJlIG5vdAorCSAqIGFm ZmVjdGVkIGJlY2F1c2UgdGhleSB1c2UgZGlmZmVyZW50IHBoeV9pbnRlcmZhY2VfdCB2YWx1ZXMK KwkgKiBvciB0aGUgR2VuZXJpYyBQSFkgZHJpdmVyLgorCSAqLworCXN3aXRjaCAocGh5X2lmYWNl KSB7CisJY2FzZSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUk6CisJCXBoeV9pZmFjZSA9M0QgUEhZ X0lOVEVSRkFDRV9NT0RFX1JHTUlJX0lEOworCQlicmVhazsKKwljYXNlIFBIWV9JTlRFUkZBQ0Vf TU9ERV9SR01JSV9UWElEOgorCQlwaHlfaWZhY2UgPTNEIFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01J SV9SWElEOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlpZiAocGh5X2Nv bm5lY3QpIHsKKwkJcGh5ZGV2ID0zRCBvZl9waHlfY29ubmVjdChkZXYsIGludGYtPnBoeV9kbiwK KwkJCQkJYmNtYXNwX2Fkal9saW5rLCBwaHlfZmxhZ3MsCisJCQkJCXBoeV9pZmFjZSk7CisJCWlm ICghcGh5ZGV2KSB7CisJCQlyZXQgPTNEIC1FTk9ERVY7CisJCQluZXRkZXZfZXJyKGRldiwgImNv dWxkIG5vdCBhdHRhY2ggdG8gUEhZXG4iKTsKKwkJCWdvdG8gZXJyX3BoeV9kaXNhYmxlOworCQl9 CisJfSBlbHNlIGlmICghaW50Zi0+d29sb3B0cykgeworCQlyZXQgPTNEIHBoeV9yZXN1bWUoZGV2 LT5waHlkZXYpOworCQlpZiAocmV0KQorCQkJZ290byBlcnJfcGh5X2Rpc2FibGU7CisJfQorCisJ dW1hY19yZXNldChpbnRmKTsKKworCXVtYWNfaW5pdChpbnRmKTsKKworCS8qIERpc2FibGUgdGhl IFVuaU1BQyBSWC9UWCAqLworCXVtYWNfZW5hYmxlX3NldChpbnRmLCAoVU1DX0NNRF9SWF9FTiB8 IFVNQ19DTURfVFhfRU4pLCAwKTsKKworCXVtYWNfc2V0X2h3X2FkZHIoaW50ZiwgZGV2LT5kZXZf YWRkcik7CisKKwlpbnRmLT5vbGRfZHVwbGV4ID0zRCAtMTsKKwlpbnRmLT5vbGRfbGluayA9M0Qg LTE7CisJaW50Zi0+b2xkX3BhdXNlID0zRCAtMTsKKworCXJldCA9M0QgYmNtYXNwX2luaXRfdHgo aW50Zik7CisJaWYgKHJldCkKKwkJZ290byBlcnJfcGh5X2Rpc2Nvbm5lY3Q7CisKKwkvKiBUdXJu IG9uIGFzcCAqLworCWJjbWFzcF9lbmFibGVfdHgoaW50ZiwgMSk7CisKKwlyZXQgPTNEIGJjbWFz cF9pbml0X3J4KGludGYpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX3JlY2xhaW1fdHg7CisKKwli Y21hc3BfZW5hYmxlX3J4KGludGYsIDEpOworCisJLyogVHVybiBvbiBVbmlNQUMgVFgvUlggKi8K Kwl1bWFjX2VuYWJsZV9zZXQoaW50ZiwgKFVNQ19DTURfUlhfRU4gfCBVTUNfQ01EX1RYX0VOKSwg MSk7CisKKwlpbnRmLT5jcmNfZndkID0zRCAhISh1bWFjX3JsKGludGYsIFVNQ19DTUQpICYgVU1D X0NNRF9DUkNfRldEKTsKKworCWJjbWFzcF9uZXRpZl9zdGFydChkZXYpOworCisJbmV0aWZfc3Rh cnRfcXVldWUoZGV2KTsKKworCXJldHVybiAwOworCitlcnJfcmVjbGFpbV90eDoKKwliY21hc3Bf cmVjbGFpbV9mcmVlX2FsbF90eChpbnRmKTsKK2Vycl9waHlfZGlzY29ubmVjdDoKKwlpZiAocGh5 ZGV2KQorCQlwaHlfZGlzY29ubmVjdChwaHlkZXYpOworZXJyX3BoeV9kaXNhYmxlOgorCWlmIChp bnRmLT5pbnRlcm5hbF9waHkpCisJCWJjbWFzcF9lcGh5X2VuYWJsZV9zZXQoaW50ZiwgZmFsc2Up OworCWVsc2UKKwkJYmNtYXNwX3JnbWlpX21vZGVfZW5fc2V0KGludGYsIGZhbHNlKTsKKwlyZXR1 cm4gcmV0OworfQorCitzdGF0aWMgaW50IGJjbWFzcF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpk ZXYpCit7CisJc3RydWN0IGJjbWFzcF9pbnRmICppbnRmID0zRCBuZXRkZXZfcHJpdihkZXYpOwor CWludCByZXQ7CisKKwluZXRpZl9kYmcoaW50ZiwgaWZ1cCwgZGV2LCAiYmNtYXNwIG9wZW5cbiIp OworCisJcmV0ID0zRCBjbGtfcHJlcGFyZV9lbmFibGUoaW50Zi0+cGFyZW50LT5jbGspOworCWlm IChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPTNEIGJjbWFzcF9uZXRpZl9pbml0KGRldiwg dHJ1ZSk7CisJaWYgKHJldCkKKwkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGludGYtPnBhcmVudC0+ Y2xrKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGJjbWFzcF9yZXNldF9taWIo c3RydWN0IGJjbWFzcF9pbnRmICppbnRmKQoreworCXVtYWNfd2woaW50ZiwgVU1DX01JQl9DTlRS TF9SWF9DTlRfUlNUIHwKKwkJVU1DX01JQl9DTlRSTF9SVU5UX0NOVF9SU1QgfAorCQlVTUNfTUlC X0NOVFJMX1RYX0NOVF9SU1QsIFVNQ19NSUJfQ05UUkwpOworCXVzbGVlcF9yYW5nZSgxMDAwLCAy MDAwKTsKKwl1bWFjX3dsKGludGYsIDAsIFVNQ19NSUJfQ05UUkwpOworfQorCitzdGF0aWMgdm9p ZCBiY21hc3BfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQg dHhxdWV1ZSkKK3sKKwlzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYgPTNEIG5ldGRldl9wcml2KGRl dik7CisKKwluZXRpZl9kYmcoaW50ZiwgdHhfZXJyLCBkZXYsICJ0cmFuc21pdCB0aW1lb3V0IVxu Iik7CisKKwluZXRpZl90cmFuc191cGRhdGUoZGV2KTsKKwlkZXYtPnN0YXRzLnR4X2Vycm9ycysr OworCisJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOworfQorCitzdGF0aWMgaW50IGJjbWFzcF9nZXRf cGh5c19wb3J0X25hbWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICAgIGNoYXIgKm5h bWUsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IGJjbWFzcF9pbnRmICppbnRmID0zRCBuZXRkZXZf cHJpdihkZXYpOworCisJaWYgKHNucHJpbnRmKG5hbWUsIGxlbiwgInAlZCIsIGludGYtPnBvcnQp ID49M0QgbGVuKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMg c3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmJjbWFzcF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZp Y2UgKmRldikKK3sKKwlyZXR1cm4gJmRldi0+c3RhdHM7Cit9CisKK3N0YXRpYyBpbnQgYmNtYXNw X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQp Cit7CisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYg KCFkZXYtPnBoeWRldikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXR1cm4gcGh5X21paV9pb2N0 bChkZXYtPnBoeWRldiwgcnEsIGNtZCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2Rl dmljZV9vcHMgYmNtYXNwX25ldGRldl9vcHMgPTNEIHsKKwkubmRvX29wZW4JCT0zRCBiY21hc3Bf b3BlbiwKKwkubmRvX3N0b3AJCT0zRCBiY21hc3Bfc3RvcCwKKwkubmRvX3N0YXJ0X3htaXQJCT0z RCBiY21hc3BfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0zRCBiY21hc3BfdHhfdGltZW91dCwK KwkubmRvX3NldF9yeF9tb2RlCT0zRCBiY21hc3Bfc2V0X3J4X21vZGUsCisJLm5kb19nZXRfcGh5 c19wb3J0X25hbWUJPTNEIGJjbWFzcF9nZXRfcGh5c19wb3J0X25hbWUsCisJLm5kb19nZXRfc3Rh dHMJCT0zRCBiY21hc3BfZ2V0X3N0YXRzLAorCS5uZG9fZG9faW9jdGwJCT0zRCBiY21hc3BfaW9j dGwsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJPTNEIGV0aF9tYWNfYWRkciwKK307CisKK3N0YXRp YyBpbmxpbmUgdm9pZCBiY21hc3BfbWFwX3JlcyhzdHJ1Y3QgYmNtYXNwX3ByaXYgKnByaXYsCisJ CQkJICBzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYpCit7CisJLyogUGVyIHBvcnQgKi8KKwlpbnRm LT5yZXMudW1hYyA9M0QgcHJpdi0+YmFzZSArIFVNQ19PRkZTRVQoaW50Zik7CisJaW50Zi0+cmVz LnVtYWMyZmIgPTNEIHByaXYtPmJhc2UgKyAocHJpdi0+aHdfaW5mby0+dW1hYzJmYiArCisJCQkJ CSAgKGludGYtPnBvcnQgKiAweDQpKTsKKwlpbnRmLT5yZXMucmdtaWkgPTNEIHByaXYtPmJhc2Ug KyBSR01JSV9PRkZTRVQoaW50Zik7CisKKwkvKiBQZXIgY2ggKi8KKwlpbnRmLT50eF9zcGJfZG1h ID0zRCBwcml2LT5iYXNlICsgVFhfU1BCX0RNQV9PRkZTRVQoaW50Zik7CisJaW50Zi0+cmVzLnR4 X3NwYl9jdHJsID0zRCBwcml2LT5iYXNlICsgVFhfU1BCX0NUUkxfT0ZGU0VUKGludGYpOworCWlu dGYtPnJlcy50eF9zcGJfdG9wID0zRCBwcml2LT5iYXNlICsgVFhfU1BCX1RPUF9PRkZTRVQoaW50 Zik7CisJaW50Zi0+cmVzLnR4X2Vwa3RfY29yZSA9M0QgcHJpdi0+YmFzZSArIFRYX0VQS1RfQ19P RkZTRVQoaW50Zik7CisJaW50Zi0+cmVzLnR4X3BhdXNlX2N0cmwgPTNEIHByaXYtPmJhc2UgKyBU WF9QQVVTRV9DVFJMX09GRlNFVChpbnRmKTsKKworCWludGYtPnJ4X2VkcGt0X2RtYSA9M0QgcHJp di0+YmFzZSArIFJYX0VEUEtUX0RNQV9PRkZTRVQoaW50Zik7CisJaW50Zi0+cnhfZWRwa3RfY2Zn ID0zRCBwcml2LT5iYXNlICsgUlhfRURQS1RfQ0ZHX09GRlNFVChpbnRmKTsKK30KKworI2RlZmlu ZSBNQVhfSVJRX1NUUl9MRU4JCTY0CitzdHJ1Y3QgYmNtYXNwX2ludGYgKmJjbWFzcF9pbnRlcmZh Y2VfY3JlYXRlKHN0cnVjdCBiY21hc3BfcHJpdiAqcHJpdiwKKwkJCQkJICAgIHN0cnVjdCBkZXZp Y2Vfbm9kZSAqbmRldl9kbikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPTNEICZwcml2LT5wZGV2 LT5kZXY7CisJc3RydWN0IGJjbWFzcF9pbnRmICppbnRmOworCXN0cnVjdCBuZXRfZGV2aWNlICpu ZGV2OworCWludCBjaCwgcG9ydCwgcmV0OworCisJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5k ZXZfZG4sICJyZWciLCAmcG9ydCkpIHsKKwkJZGV2X3dhcm4oZGV2LCAiJXM6IGludmFsaWQgY2gg bnVtYmVyXG4iLCBuZGV2X2RuLT5uYW1lKTsKKwkJZ290byBlcnI7CisJfQorCisJaWYgKG9mX3By b3BlcnR5X3JlYWRfdTMyKG5kZXZfZG4sICJicmNtLGNoYW5uZWwiLCAmY2gpKSB7CisJCWRldl93 YXJuKGRldiwgIiVzOiBpbnZhbGlkIGNoIG51bWJlclxuIiwgbmRldl9kbi0+bmFtZSk7CisJCWdv dG8gZXJyOworCX0KKworCW5kZXYgPTNEIGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3QgYmNt YXNwX2ludGYpKTsKKwlpZiAoIWRldikgeworCQlkZXZfd2FybihkZXYsICIlczogdW5hYmxlIHRv IGFsbG9jIG5kZXZcbiIsIG5kZXZfZG4tPm5hbWUpOworCQlnb3RvIGVycjsKKwl9CisJaW50ZiA9 M0QgbmV0ZGV2X3ByaXYobmRldik7CisKKwlpbnRmLT5wYXJlbnQgPTNEIHByaXY7CisJaW50Zi0+ bmRldiA9M0QgbmRldjsKKwlpbnRmLT5jaGFubmVsID0zRCBjaDsKKwlpbnRmLT5wb3J0ID0zRCBw b3J0OworCWludGYtPm5kZXZfZG4gPTNEIG5kZXZfZG47CisKKwlyZXQgPTNEIG9mX2dldF9waHlf bW9kZShuZGV2X2RuLCAmaW50Zi0+cGh5X2ludGVyZmFjZSk7CisJaWYgKHJldCA8IDApIHsKKwkJ ZGV2X2VycihkZXYsICJpbnZhbGlkIFBIWSBtb2RlIHByb3BlcnR5XG4iKTsKKwkJZ290byBlcnJf ZnJlZV9uZXRkZXY7CisJfQorCisJaWYgKGludGYtPnBoeV9pbnRlcmZhY2UgPTNEPTNEIFBIWV9J TlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkKKwkJaW50Zi0+aW50ZXJuYWxfcGh5ID0zRCB0cnVlOwor CisJaW50Zi0+cGh5X2RuID0zRCBvZl9wYXJzZV9waGFuZGxlKG5kZXZfZG4sICJwaHktaGFuZGxl IiwgMCk7CisJaWYgKCFpbnRmLT5waHlfZG4gJiYgb2ZfcGh5X2lzX2ZpeGVkX2xpbmsobmRldl9k bikpIHsKKwkJcmV0ID0zRCBvZl9waHlfcmVnaXN0ZXJfZml4ZWRfbGluayhuZGV2X2RuKTsKKwkJ aWYgKHJldCkgeworCQkJZGV2X3dhcm4oZGV2LCAiJXM6IGZhaWxlZCB0byByZWdpc3RlciBmaXhl ZCBQSFlcbiIsCisJCQkJIG5kZXZfZG4tPm5hbWUpOworCQkJZ290byBlcnJfZnJlZV9uZXRkZXY7 CisJCX0KKwkJaW50Zi0+cGh5X2RuID0zRCBuZGV2X2RuOworCX0KKworCS8qIE1hcCByZXNvdXJj ZSAqLworCWJjbWFzcF9tYXBfcmVzKHByaXYsIGludGYpOworCisJaWYgKCghcGh5X2ludGVyZmFj ZV9tb2RlX2lzX3JnbWlpKGludGYtPnBoeV9pbnRlcmZhY2UpICYmCisJICAgICBpbnRmLT5waHlf aW50ZXJmYWNlICE9M0QgUEhZX0lOVEVSRkFDRV9NT0RFX01JSSAmJgorCSAgICAgaW50Zi0+cGh5 X2ludGVyZmFjZSAhPTNEIFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkgfHwKKwkgICAgKGlu dGYtPnBvcnQgIT0zRCAxICYmIGludGYtPmludGVybmFsX3BoeSkpIHsKKwkJbmV0ZGV2X2Vycihp bnRmLT5uZGV2LCAiaW52YWxpZCBQSFkgbW9kZTogJXMgZm9yIHBvcnQgJWRcbiIsCisJCQkgICBw aHlfbW9kZXMoaW50Zi0+cGh5X2ludGVyZmFjZSksIGludGYtPnBvcnQpOworCQlyZXQgPTNEIC1F SU5WQUw7CisJCWdvdG8gZXJyX2ZyZWVfbmV0ZGV2OworCX0KKworCWJjbWFzcF9yZXNldF9taWIo aW50Zik7CisKKwlyZXQgPTNEIG9mX2dldF9ldGhkZXZfYWRkcmVzcyhuZGV2X2RuLCBuZGV2KTsK KwlpZiAocmV0KSB7CisJCW5ldGRldl93YXJuKG5kZXYsICJ1c2luZyByYW5kb20gRXRoZXJuZXQg TUFDXG4iKTsKKwkJZXRoX2h3X2FkZHJfcmFuZG9tKG5kZXYpOworCX0KKworCVNFVF9ORVRERVZf REVWKG5kZXYsIGRldik7CisJaW50Zi0+b3BzID0zRCAmYmNtYXNwX2ludGZfb3BzOworCW5kZXYt Pm5ldGRldl9vcHMgPTNEICZiY21hc3BfbmV0ZGV2X29wczsKKwluZGV2LT5ldGh0b29sX29wcyA9 M0QgJmJjbWFzcF9ldGh0b29sX29wczsKKwlpbnRmLT5tc2dfZW5hYmxlID0zRCBuZXRpZl9tc2df aW5pdCgtMSwgTkVUSUZfTVNHX0RSViB8CisJCQkJCSAgTkVUSUZfTVNHX1BST0JFIHwKKwkJCQkJ ICBORVRJRl9NU0dfTElOSyk7CisJbmRldi0+ZmVhdHVyZXMgfD0zRCBORVRJRl9GX0lQX0NTVU0g fCBORVRJRl9GX0lQVjZfQ1NVTSB8IE5FVElGX0ZfU0cgfAorCQkJICBORVRJRl9GX1JYQ1NVTTsK KwluZGV2LT5od19mZWF0dXJlcyB8PTNEIG5kZXYtPmZlYXR1cmVzOworCW5kZXYtPm5lZWRlZF9o ZWFkcm9vbSArPTNEIHNpemVvZihzdHJ1Y3QgYmNtYXNwX3BrdF9vZmZsb2FkKTsKKworCXJldHVy biBpbnRmOworCitlcnJfZnJlZV9uZXRkZXY6CisJZnJlZV9uZXRkZXYobmRldik7CitlcnI6CisJ cmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgYmNtYXNwX2ludGVyZmFjZV9kZXN0cm95KHN0cnVjdCBi Y21hc3BfaW50ZiAqaW50ZiwgYm9vbCB1bnJlZ2lzdGVyKQoreworCWlmICh1bnJlZ2lzdGVyKQor CQl1bnJlZ2lzdGVyX25ldGRldihpbnRmLT5uZGV2KTsKKwlpZiAob2ZfcGh5X2lzX2ZpeGVkX2xp bmsoaW50Zi0+bmRldl9kbikpCisJCW9mX3BoeV9kZXJlZ2lzdGVyX2ZpeGVkX2xpbmsoaW50Zi0+ bmRldl9kbik7CisJZnJlZV9uZXRkZXYoaW50Zi0+bmRldik7Cit9CisKK3N0YXRpYyB2b2lkIGJj bWFzcF9zdXNwZW5kX3RvX3dvbChzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYpCit7CisJc3RydWN0 IG5ldF9kZXZpY2UgKm5kZXYgPTNEIGludGYtPm5kZXY7CisJdTMyIHJlZzsKKworCXJlZyA9M0Qg dW1hY19ybChpbnRmLCBVTUNfTVBEX0NUUkwpOworCWlmIChpbnRmLT53b2xvcHRzICYgKFdBS0Vf TUFHSUMgfCBXQUtFX01BR0lDU0VDVVJFKSkKKwkJcmVnIHw9M0QgVU1DX01QRF9DVFJMX01QRF9F TjsKKwlyZWcgJj0zRCB+VU1DX01QRF9DVFJMX1BTV19FTjsKKwlpZiAoaW50Zi0+d29sb3B0cyAm IFdBS0VfTUFHSUNTRUNVUkUpIHsKKwkJLyogUHJvZ3JhbSB0aGUgU2VjdXJlT24gcGFzc3dvcmQg Ki8KKwkJdW1hY193bChpbnRmLCBnZXRfdW5hbGlnbmVkX2JlMTYoJmludGYtPnNvcGFzc1swXSks CisJCQlVTUNfUFNXX01TKTsKKwkJdW1hY193bChpbnRmLCBnZXRfdW5hbGlnbmVkX2JlMzIoJmlu dGYtPnNvcGFzc1syXSksCisJCQlVTUNfUFNXX0xTKTsKKwkJcmVnIHw9M0QgVU1DX01QRF9DVFJM X1BTV19FTjsKKwl9CisJdW1hY193bChpbnRmLCByZWcsIFVNQ19NUERfQ1RSTCk7CisKKwlpZiAo aW50Zi0+d29sb3B0cyAmIFdBS0VfRklMVEVSKQorCQliY21hc3BfbmV0ZmlsdF9zdXNwZW5kKGlu dGYpOworCisJLyogVW5pTUFDIHJlY2VpdmUgbmVlZHMgdG8gYmUgdHVybmVkIG9uICovCisJdW1h Y19lbmFibGVfc2V0KGludGYsIFVNQ19DTURfUlhfRU4sIDEpOworCisJaWYgKGludGYtPnBhcmVu dC0+d29sX2lycSA+IDApIHsKKwkJd2FrZXVwX2ludHIyX2NvcmVfd2woaW50Zi0+cGFyZW50LCAw eGZmZmZmZmZmLAorCQkJCSAgICAgQVNQX1dBS0VVUF9JTlRSMl9NQVNLX0NMRUFSKTsKKwl9CisK KwluZXRpZl9kYmcoaW50Ziwgd29sLCBuZGV2LCAiZW50ZXJlZCBXT0wgbW9kZVxuIik7Cit9CisK K2ludCBiY21hc3BfaW50ZXJmYWNlX3N1c3BlbmQoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmKQor eworCXN0cnVjdCBkZXZpY2UgKmtkZXYgPTNEICZpbnRmLT5wYXJlbnQtPnBkZXYtPmRldjsKKwlz dHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0zRCBpbnRmLT5uZGV2OworCWludCByZXQgPTNEIDA7CisK KwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJcmV0dXJuIDA7CisKKwluZXRpZl9kZXZpY2Vf ZGV0YWNoKGRldik7CisKKwliY21hc3BfbmV0aWZfZGVpbml0KGRldik7CisKKwlpZiAoIWludGYt PndvbG9wdHMpIHsKKwkJcmV0ID0zRCBwaHlfc3VzcGVuZChkZXYtPnBoeWRldik7CisJCWlmIChy ZXQpCisJCQlnb3RvIG91dDsKKworCQlpZiAoaW50Zi0+aW50ZXJuYWxfcGh5KQorCQkJYmNtYXNw X2VwaHlfZW5hYmxlX3NldChpbnRmLCBmYWxzZSk7CisJCWVsc2UKKwkJCWJjbWFzcF9yZ21paV9t b2RlX2VuX3NldChpbnRmLCBmYWxzZSk7CisKKwkJLyogSWYgV2FrZS1vbi1MQU4gaXMgZGlzYWJs ZWQsIHdlIGNhbiBzYWZlbHkKKwkJICogZGlzYWJsZSB0aGUgbmV0d29yayBpbnRlcmZhY2UgY2xv Y2tzLgorCQkgKi8KKwkJYmNtYXNwX2NvcmVfY2xvY2tfc2V0X2ludGYoaW50ZiwgZmFsc2UpOwor CX0KKworCWlmIChkZXZpY2VfbWF5X3dha2V1cChrZGV2KSAmJiBpbnRmLT53b2xvcHRzKQorCQli Y21hc3Bfc3VzcGVuZF90b193b2woaW50Zik7CisKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaW50 Zi0+cGFyZW50LT5jbGspOworCisJcmV0dXJuIHJldDsKKworb3V0OgorCWJjbWFzcF9uZXRpZl9p bml0KGRldiwgZmFsc2UpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGJjbWFzcF9y ZXN1bWVfZnJvbV93b2woc3RydWN0IGJjbWFzcF9pbnRmICppbnRmKQoreworCXUzMiByZWc7CisK KwlyZWcgPTNEIHVtYWNfcmwoaW50ZiwgVU1DX01QRF9DVFJMKTsKKwlyZWcgJj0zRCB+VU1DX01Q RF9DVFJMX01QRF9FTjsKKwl1bWFjX3dsKGludGYsIHJlZywgVU1DX01QRF9DVFJMKTsKKworCWlm IChpbnRmLT5wYXJlbnQtPndvbF9pcnEgPiAwKSB7CisJCXdha2V1cF9pbnRyMl9jb3JlX3dsKGlu dGYtPnBhcmVudCwgMHhmZmZmZmZmZiwKKwkJCQkgICAgIEFTUF9XQUtFVVBfSU5UUjJfTUFTS19T RVQpOworCX0KK30KKworaW50IGJjbWFzcF9pbnRlcmZhY2VfcmVzdW1lKHN0cnVjdCBiY21hc3Bf aW50ZiAqaW50ZikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0zRCBpbnRmLT5uZGV2Owor CWludCByZXQ7CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJcmV0dXJuIDA7CisKKwly ZXQgPTNEIGNsa19wcmVwYXJlX2VuYWJsZShpbnRmLT5wYXJlbnQtPmNsayk7CisJaWYgKHJldCkK KwkJcmV0dXJuIHJldDsKKworCXJldCA9M0QgYmNtYXNwX25ldGlmX2luaXQoZGV2LCBmYWxzZSk7 CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwliY21hc3BfcmVzdW1lX2Zyb21fd29sKGludGYp OworCisJaWYgKGludGYtPmVlZS5lZWVfZW5hYmxlZCkKKwkJYmNtYXNwX2VlZV9lbmFibGVfc2V0 KGludGYsIHRydWUpOworCisJbmV0aWZfZGV2aWNlX2F0dGFjaChkZXYpOworCisJcmV0dXJuIDA7 CisKK291dDoKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaW50Zi0+cGFyZW50LT5jbGspOworCXJl dHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9h c3AyL2JjbWFzcF9pbnRmX2RlZnMuaCBiL2RyaXZlcj0Kcy9uZXQvZXRoZXJuZXQvYnJvYWRjb20v YXNwMi9iY21hc3BfaW50Zl9kZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAwLi5hYjFlNjUwMDIyNjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9ldGhl cm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcF9pbnRmX2RlZnMuaApAQCAtMCwwICsxLDIzOCBAQAor LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KKyNpZm5kZWYgX19CQ01BU1Bf SU5URl9ERUZTX0gKKyNkZWZpbmUgX19CQ01BU1BfSU5URl9ERUZTX0gKKworI2RlZmluZSBVTUNf T0ZGU0VUKGludGYpCQlcCisJKCgoKGludGYpLT5wb3J0KSAqIDB4ODAwKSArIDB4YzAwMCkKKyNk ZWZpbmUgIFVNQ19DTUQJCQkweDAwOAorI2RlZmluZSAgIFVNQ19DTURfVFhfRU4JCQlCSVQoMCkK KyNkZWZpbmUgICBVTUNfQ01EX1JYX0VOCQkJQklUKDEpCisjZGVmaW5lICAgVU1DX0NNRF9TUEVF RF9TSElGVAkJMHgyCisjZGVmaW5lICAgIFVNQ19DTURfU1BFRURfTUFTSwkJMHgzCisjZGVmaW5l ICAgIFVNQ19DTURfU1BFRURfMTAJCTB4MAorI2RlZmluZSAgICBVTUNfQ01EX1NQRUVEXzEwMAkJ MHgxCisjZGVmaW5lICAgIFVNQ19DTURfU1BFRURfMTAwMAkJMHgyCisjZGVmaW5lICAgIFVNQ19D TURfU1BFRURfMjUwMAkJMHgzCisjZGVmaW5lICAgVU1DX0NNRF9QUk9NSVNDCQlCSVQoNCkKKyNk ZWZpbmUgICBVTUNfQ01EX1BBRF9FTgkJQklUKDUpCisjZGVmaW5lICAgVU1DX0NNRF9DUkNfRldE CQlCSVQoNikKKyNkZWZpbmUgICBVTUNfQ01EX1BBVVNFX0ZXRAkJQklUKDcpCisjZGVmaW5lICAg VU1DX0NNRF9SWF9QQVVTRV9JR05PUkUJQklUKDgpCisjZGVmaW5lICAgVU1DX0NNRF9UWF9BRERS X0lOUwkJQklUKDkpCisjZGVmaW5lICAgVU1DX0NNRF9IRF9FTgkJCUJJVCgxMCkKKyNkZWZpbmUg ICBVTUNfQ01EX1NXX1JFU0VUCQlCSVQoMTMpCisjZGVmaW5lICAgVU1DX0NNRF9MQ0xfTE9PUF9F TgkJQklUKDE1KQorI2RlZmluZSAgIFVNQ19DTURfQVVUT19DT05GSUcJCUJJVCgyMikKKyNkZWZp bmUgICBVTUNfQ01EX0NOVExfRlJNX0VOCQlCSVQoMjMpCisjZGVmaW5lICAgVU1DX0NNRF9OT19M RU5fQ0hLCQlCSVQoMjQpCisjZGVmaW5lICAgVU1DX0NNRF9STVRfTE9PUF9FTgkJQklUKDI1KQor I2RlZmluZSAgIFVNQ19DTURfUFJCTF9FTgkJQklUKDI3KQorI2RlZmluZSAgIFVNQ19DTURfVFhf UEFVU0VfSUdOT1JFCUJJVCgyOCkKKyNkZWZpbmUgICBVTUNfQ01EX1RYX1JYX0VOCQlCSVQoMjkp CisjZGVmaW5lICAgVU1DX0NNRF9SVU5UX0ZJTFRFUl9ESVMJQklUKDMwKQorI2RlZmluZSAgVU1D X01BQzAJCQkweDBjCisjZGVmaW5lICBVTUNfTUFDMQkJCTB4MTAKKyNkZWZpbmUgIFVNQ19GUk1f TEVOCQkJMHgxNAorI2RlZmluZSAgVU1DX0VFRV9DVFJMCQkJMHg2NAorI2RlZmluZSAgIEVOX0xQ SV9SWF9QQVVTRQkJQklUKDApCisjZGVmaW5lICAgRU5fTFBJX1RYX1BGQwkJCUJJVCgxKQorI2Rl ZmluZSAgIEVOX0xQSV9UWF9QQVVTRQkJQklUKDIpCisjZGVmaW5lICAgRUVFX0VOCQkJQklUKDMp CisjZGVmaW5lICAgUlhfRklGT19DSEVDSwkJCUJJVCg0KQorI2RlZmluZSAgIEVFRV9UWF9DTEtf RElTCQlCSVQoNSkKKyNkZWZpbmUgICBESVNfRUVFXzEwTQkJCUJJVCg2KQorI2RlZmluZSAgIExQ X0lETEVfUFJFRElDVElPTl9NT0RFCUJJVCg3KQorI2RlZmluZSAgVU1DX0VFRV9MUElfVElNRVIJ CTB4NjgKKyNkZWZpbmUgIFVNQ19QQVVTRV9DTlRSTAkJMHgzMzAKKyNkZWZpbmUgIFVNQ19UWF9G TFVTSAkJCTB4MzM0CisjZGVmaW5lICBVTUNfTUlCX1NUQVJUCQkJMHg0MDAKKyNkZWZpbmUgIFVN Q19NSUJfQ05UUkwJCQkweDU4MAorI2RlZmluZSAgIFVNQ19NSUJfQ05UUkxfUlhfQ05UX1JTVAlC SVQoMCkKKyNkZWZpbmUgICBVTUNfTUlCX0NOVFJMX1JVTlRfQ05UX1JTVAlCSVQoMSkKKyNkZWZp bmUgICBVTUNfTUlCX0NOVFJMX1RYX0NOVF9SU1QJQklUKDIpCisjZGVmaW5lICBVTUNfUlhfTUFY X1BLVF9TWgkJMHg2MDgKKyNkZWZpbmUgIFVNQ19NUERfQ1RSTAkJCTB4NjIwCisjZGVmaW5lICAg VU1DX01QRF9DVFJMX01QRF9FTgkJQklUKDApCisjZGVmaW5lICAgVU1DX01QRF9DVFJMX1BTV19F TgkJQklUKDI3KQorI2RlZmluZSAgVU1DX1BTV19NUwkJCTB4NjI0CisjZGVmaW5lICBVTUNfUFNX X0xTCQkJMHg2MjgKKworI2RlZmluZSBVTUFDMkZCX09GRlNFVF8yXzEJCTB4OWYwNDQKKyNkZWZp bmUgVU1BQzJGQl9PRkZTRVQJCQkweDlmMDNjCisjZGVmaW5lICBVTUFDMkZCX0NGRwkJCTB4MAor I2RlZmluZSAgIFVNQUMyRkJfQ0ZHX09QVVRfRU4JCUJJVCgwKQorI2RlZmluZSAgIFVNQUMyRkJf Q0ZHX1ZMQU5fRU4JCUJJVCgxKQorI2RlZmluZSAgIFVNQUMyRkJfQ0ZHX1NOQVBfRU4JCUJJVCgy KQorI2RlZmluZSAgIFVNQUMyRkJfQ0ZHX0JDTV9UR19FTgkJQklUKDMpCisjZGVmaW5lICAgVU1B QzJGQl9DRkdfSVBVVF9FTgkJQklUKDQpCisjZGVmaW5lICAgVU1BQzJGQl9DRkdfQ0hJRF9TSElG VAk4CisjZGVmaW5lICAgVU1BQzJGQl9DRkdfT0tfU0VORF9TSElGVAkyNAorI2RlZmluZSAgIFVN QUMyRkJfQ0ZHX0RFRkFVTFRfRU4JXAorCQkoVU1BQzJGQl9DRkdfT1BVVF9FTiB8IFVNQUMyRkJf Q0ZHX1ZMQU5fRU4gXAorCQl8IFVNQUMyRkJfQ0ZHX1NOQVBfRU4gfCBVTUFDMkZCX0NGR19JUFVU X0VOKQorCisjZGVmaW5lIFJHTUlJX09GRlNFVChpbnRmKQlcCisJKCgoKGludGYpLT5wb3J0KSAq IDB4MTAwKSArIDB4ZDAwMCkKKyNkZWZpbmUgIFJHTUlJX0VQSFlfQ05UUkwJCTB4MDAKKyNkZWZp bmUgICAgUkdNSUlfRVBIWV9DRkdfSUREUV9CSUFTCUJJVCgwKQorI2RlZmluZSAgICBSR01JSV9F UEhZX0NGR19FWFRfUFdSRE9XTglCSVQoMSkKKyNkZWZpbmUgICAgUkdNSUlfRVBIWV9DRkdfRk9S Q0VfRExMX0VOCUJJVCgyKQorI2RlZmluZSAgICBSR01JSV9FUEhZX0NGR19JRERRX0dMT0JBTAlC SVQoMykKKyNkZWZpbmUgICAgUkdNSUlfRVBIWV9DSzI1X0RJUwkJQklUKDQpCisjZGVmaW5lICAg IFJHTUlJX0VQSFlfUkVTRVQJCUJJVCg3KQorI2RlZmluZSAgUkdNSUlfT09CX0NOVFJMCQkweDBj CisjZGVmaW5lICAgUkdNSUlfTElOSwkJCUJJVCg0KQorI2RlZmluZSAgIFJHTUlJX09PQl9ESVMJ CQlCSVQoNSkKKyNkZWZpbmUgICBSR01JSV9NT0RFX0VOCQkJQklUKDYpCisjZGVmaW5lICAgUkdN SUlfSURfTU9ERV9ESVMJCUJJVCgxNikKKworI2RlZmluZSBSR01JSV9QT1JUX0NOVFJMCQkweDYw CisjZGVmaW5lICAgUkdNSUlfUE9SVF9NT0RFX0VQSFkJCTAKKyNkZWZpbmUgICBSR01JSV9QT1JU X01PREVfR1BIWQkJMQorI2RlZmluZSAgIFJHTUlJX1BPUlRfTU9ERV9FWFRfRVBIWQkyCisjZGVm aW5lICAgUkdNSUlfUE9SVF9NT0RFX0VYVF9HUEhZCTMKKyNkZWZpbmUgICBSR01JSV9QT1JUX01P REVfRVhUX1JWTUlJCTQKKyNkZWZpbmUgICBSR01JSV9QT1JUX01PREVfTUFTSwkJR0VOTUFTSygy LCAwKQorCisjZGVmaW5lIFJHTUlJX1NZU19MRURfQ05UUkwJCTB4NzQKKyNkZWZpbmUgIFJHTUlJ X1NZU19MRURfQ05UUkxfTElOS19PVlJECUJJVCgxNSkKKworI2RlZmluZSBPVVRETUFfT0ZGU0VU KGludGYpCVwKKwkoKChpbnRmLT5jaGFubmVsIC0gNikgKiAweGIwKSArIDB4NDcwMDApCisjZGVm aW5lICBPVVRETUFfRU5BQkxFCQkJMHgwMAorI2RlZmluZSAgIE9VVERNQV9FTkFCTEVfRU4JCUJJ VCgwKQorI2RlZmluZSAgT1VURE1BX0hXX1NUQVRVUwkJMHgwNAorI2RlZmluZSAgIE9VVERNQV9I V19TVEFUVVNfSURMRQkJQklUKDApCisjZGVmaW5lICBPVVRETUFfREFUQV9ETUFfV1JJVEUJCTB4 MDgKKyNkZWZpbmUgIE9VVERNQV9EQVRBX0RNQV9SRUFECQkweDEwCisjZGVmaW5lICBPVVRETUFf REFUQV9ETUFfQkFTRQkJMHgxOAorI2RlZmluZSAgT1VURE1BX0RBVEFfRE1BX0VORAkJMHgyMAor I2RlZmluZSAgT1VURE1BX0RBVEFfRE1BX1ZBTElECQkweDI4CisjZGVmaW5lICBPVVRETUFfREFU QV9DVFJMMQkJMHgzMAorI2RlZmluZSAgIE9VVERNQV9EQVRBX0NUUkwxX0VfQkFMTl9NQVNLCUdF Tk1BU0soMiwgMCkKKyNkZWZpbmUgICBPVVRETUFfREFUQV9DVFJMMV9FX05PX0FMTgkweDAwCisj ZGVmaW5lICAgT1VURE1BX0RBVEFfQ1RSTDFfRV80X0FMTgkweDAyCisjZGVmaW5lICAgT1VURE1B X0RBVEFfQ1RSTDFfRV82NF9BTE4JMHgwNgorI2RlZmluZSAgIE9VVERNQV9EQVRBX0NUUkwxX0Vf U1RVRkYJQklUKDMpCisjZGVmaW5lICAgT1VURE1BX0RBVEFfQ1RSTDFfUFNIX1RNUl9FTglCSVQo NCkKKyNkZWZpbmUgIE9VVERNQV9EQVRBX1BVU0hfVElNRVIJCTB4MzQKKyNkZWZpbmUgIE9VVERN QV9EQVRBX1BVU0hfRVZFTlRfQ1RSTAkweDM4CisjZGVmaW5lICAgT1VURE1BX0RBVEFfUFVTSF9D VFJMX1BVU0gJQklUKDApCisjZGVmaW5lICBPVVRETUFfREFUQV9QVVNIX0VWRU5UX1NUQVRVUwkw eDNjCisjZGVmaW5lICAgT1VURE1BX0RBVEFfUFVTSF9FVlRfU1RBVFVTCUJJVCgwKQorI2RlZmlu ZSAgT1VURE1BX0RFU0NfRE1BX1dSSVRFCQkweDUwCisjZGVmaW5lICBPVVRETUFfREVTQ19ETUFf UkVBRAkJMHg1OAorI2RlZmluZSAgT1VURE1BX0RFU0NfRE1BX0JBU0UJCTB4NjAKKyNkZWZpbmUg IE9VVERNQV9ERVNDX0RNQV9FTkQJCTB4NjgKKyNkZWZpbmUgIE9VVERNQV9ERVNDX0RNQV9WQUxJ RAkJMHg3MAorI2RlZmluZSAgT1VURE1BX0RFU0NfRE1BX0NUUkwxCQkweDc4CisjZGVmaW5lICAg T1VURE1BX0RFU0NfQ1RSTDFfUFNIX1RJTVJfRU4JQklUKDApCisjZGVmaW5lICBPVVRETUFfREVT Q19QVVNIX1RJTUVSCQkweDdjCisjZGVmaW5lICBPVVRETUFfREVTQ19QVVNIX0VWVF9DVEwJMHg4 MAorI2RlZmluZSAgIE9VVERNQV9ERVNDX1BVU0hfRVZUX0NUTF9QU0gJQklUKDApCisjZGVmaW5l ICBPVVRETUFfREVTQ19QU0hfRVZUX1NUCQkweDg0CisjZGVmaW5lICBPVVRETUFfREVTQ19GSUZP X0NUUkwJCTB4ODgKKyNkZWZpbmUgICBPVVRETUFfREVTQ19GSUZPX0NUTF9GTFVTSAlCSVQoMCkK KyNkZWZpbmUgIE9VVERNQV9ERVNDX0ZJRk9fRkxVU0hfU1RBVFVTCTB4OGMKKyNkZWZpbmUgICBP VVRETUFfREVTQ19GSUZPX0ZMSF9TVAlCSVQoMCkKKyNkZWZpbmUgIE9VVERNQV9ERVNDX0RNQV9D VFJMMgkJMHg5NAorI2RlZmluZSAgIE9VVE1EQV9ERVNDX0RNQV9DVFJMMl9XRF9FTglCSVQoMSkK KyNkZWZpbmUgICBPVVRETUFfREVTQ19ETUFfQ1RSTDJfUlhfUE9SVAk4CisKKyNkZWZpbmUgVFhf U1BCX0RNQV9PRkZTRVQoaW50ZikgXAorCSgoKChpbnRmKS0+Y2hhbm5lbCkgKiAweDMwKSArIDB4 NDgxODApCisjZGVmaW5lICBUWF9TUEJfRE1BX1JFQUQJCTB4MDAKKyNkZWZpbmUgIFRYX1NQQl9E TUFfQkFTRQkJMHgwOAorI2RlZmluZSAgVFhfU1BCX0RNQV9FTkQJCQkweDEwCisjZGVmaW5lICBU WF9TUEJfRE1BX1ZBTElECQkweDE4CisjZGVmaW5lICBUWF9TUEJfRE1BX0ZJRk9fQ1RSTAkJMHgy MAorI2RlZmluZSAgIFRYX1NQQl9ETUFfRklGT19GTFVTSAkJQklUKDApCisjZGVmaW5lICBUWF9T UEJfRE1BX0ZJRk9fU1RBVFVTCQkweDI0CisKKyNkZWZpbmUgVFhfU1BCX0NUUkxfT0ZGU0VUKGlu dGYpIFwKKwkoKCgoaW50ZiktPmNoYW5uZWwpICogMHg2OCkgKyAweDQ5MzQwKQorI2RlZmluZSAg VFhfU1BCX0NUUkxfRU5BQkxFCQkweDAKKyNkZWZpbmUgICBUWF9TUEJfQ1RSTF9FTkFCTEVfRU4J CUJJVCgwKQorI2RlZmluZSAgVFhfU1BCX0NUUkxfWEZfQ1RSTDIJCTB4MjAKKyNkZWZpbmUgICBU WF9TUEJfQ1RSTF9YRl9CSURfU0hJRlQJMTYKKworI2RlZmluZSBUWF9TUEJfVE9QX09GRlNFVChp bnRmKSBcCisJKCgoKGludGYpLT5jaGFubmVsKSAqIDB4MWMpICsgMHg0YTBlMCkKKyNkZWZpbmUg VFhfU1BCX1RPUF9CTEtPVVQJCTB4MAorI2RlZmluZSBUWF9TUEJfVE9QX1NQUkVfQldfQ1RSTAkJ MHg0CisKKyNkZWZpbmUgVFhfRVBLVF9DX09GRlNFVChpbnRmKSBcCisJKCgoKGludGYpLT5jaGFu bmVsKSAqIDB4MTIwKSArIDB4NDA5MDApCisjZGVmaW5lICBUWF9FUEtUX0NfQ0ZHX01JU0MJCTB4 MAorI2RlZmluZSAgIFRYX0VQS1RfQ19DRkdfTUlTQ19FTgkJQklUKDApCisjZGVmaW5lICAgVFhf RVBLVF9DX0NGR19NSVNDX1BUCQlCSVQoMSkKKyNkZWZpbmUgICBUWF9FUEtUX0NfQ0ZHX01JU0Nf UFNfU0hJRlQJMTQKKyNkZWZpbmUgICBUWF9FUEtUX0NfQ0ZHX01JU0NfRkRfU0hJRlQJMjAKKwor I2RlZmluZSBUWF9QQVVTRV9DVFJMX09GRlNFVChpbnRmKSBcCisJKCgoKGludGYpLT5jaGFubmVs ICogMHhjKSArIDB4NDlhMjApKQorI2RlZmluZSAgVFhfUEFVU0VfTUFQX1ZFQ1RPUgkJMHg4CisK KyNkZWZpbmUgUlhfRURQS1RfRE1BX09GRlNFVChpbnRmKSBcCisJKCgoKGludGYpLT5jaGFubmVs KSAqIDB4MzgpICsgMHg5Y2EwMCkKKyNkZWZpbmUgIFJYX0VEUEtUX0RNQV9XUklURQkJMHgwMAor I2RlZmluZSAgUlhfRURQS1RfRE1BX1JFQUQJCTB4MDgKKyNkZWZpbmUgIFJYX0VEUEtUX0RNQV9C QVNFCQkweDEwCisjZGVmaW5lICBSWF9FRFBLVF9ETUFfRU5ECQkweDE4CisjZGVmaW5lICBSWF9F RFBLVF9ETUFfVkFMSUQJCTB4MjAKKyNkZWZpbmUgIFJYX0VEUEtUX0RNQV9GVUxMTkVTUwkJMHgy OAorI2RlZmluZSAgUlhfRURQS1RfRE1BX01JTl9USFJFUwkJMHgyYworI2RlZmluZSAgUlhfRURQ S1RfRE1BX0NIX1hPTk9GRgkJMHgzMAorCisjZGVmaW5lIFJYX0VEUEtUX0NGR19PRkZTRVQoaW50 ZikgXAorCSgoKChpbnRmKS0+Y2hhbm5lbCkgKiAweDcwKSArIDB4OWM2MDApCisjZGVmaW5lICBS WF9FRFBLVF9DRkdfQ0ZHMAkJMHgwCisjZGVmaW5lICAgUlhfRURQS1RfQ0ZHX0NGRzBfREJVRl9T SElGVAk5CisjZGVmaW5lICAgIFJYX0VEUEtUX0NGR19DRkcwX1JCVUYJMHgwCisjZGVmaW5lICAg IFJYX0VEUEtUX0NGR19DRkcwX1JCVUZfNEsJMHgxCisjZGVmaW5lICAgIFJYX0VEUEtUX0NGR19D RkcwX0JVRl80SwkweDIKKy8qIEVGUk0gU1RVRkYsIDAgPTNEIG5vIGJ5dGUgc3R1ZmYsIDEgPTNE IHR3byBieXRlIHN0dWZmICovCisjZGVmaW5lICAgUlhfRURQS1RfQ0ZHX0NGRzBfRUZSTV9TVFVG CUJJVCgxMSkKKyNkZWZpbmUgICBSWF9FRFBLVF9DRkdfQ0ZHMF9CQUxOX1NISUZUCTEyCisjZGVm aW5lICAgIFJYX0VEUEtUX0NGR19DRkcwX05PX0FMTgkwCisjZGVmaW5lICAgIFJYX0VEUEtUX0NG R19DRkcwXzRfQUxOCTIKKyNkZWZpbmUgICAgUlhfRURQS1RfQ0ZHX0NGRzBfNjRfQUxOCTYKKyNk ZWZpbmUgIFJYX0VEUEtUX1JJTkdfQlVGRkVSX1dSSVRFCTB4MzgKKyNkZWZpbmUgIFJYX0VEUEtU X1JJTkdfQlVGRkVSX1JFQUQJMHg0MAorI2RlZmluZSAgUlhfRURQS1RfUklOR19CVUZGRVJfQkFT RQkweDQ4CisjZGVmaW5lICBSWF9FRFBLVF9SSU5HX0JVRkZFUl9FTkQJMHg1MAorI2RlZmluZSAg UlhfRURQS1RfUklOR19CVUZGRVJfVkFMSUQJMHg1OAorI2RlZmluZSAgUlhfRURQS1RfQ0ZHX0VO QUJMRQkJMHg2YworI2RlZmluZSAgIFJYX0VEUEtUX0NGR19FTkFCTEVfRU4JQklUKDApCisKKyNk ZWZpbmUgUlhfU1BCX0RNQV9PRkZTRVQoaW50ZikgXAorCSgoKChpbnRmKS0+Y2hhbm5lbCkgKiAw eDMwKSArIDB4YTAwMDApCisjZGVmaW5lICBSWF9TUEJfRE1BX1JFQUQJCTB4MDAKKyNkZWZpbmUg IFJYX1NQQl9ETUFfQkFTRQkJMHgwOAorI2RlZmluZSAgUlhfU1BCX0RNQV9FTkQJCQkweDEwCisj ZGVmaW5lICBSWF9TUEJfRE1BX1ZBTElECQkweDE4CisjZGVmaW5lICBSWF9TUEJfRE1BX0ZJRk9f Q1RSTAkJMHgyMAorI2RlZmluZSAgIFJYX1NQQl9ETUFfRklGT19GTFVTSAkJQklUKDApCisjZGVm aW5lICBSWF9TUEJfRE1BX0ZJRk9fU1RBVFVTCQkweDI0CisKKyNkZWZpbmUgUlhfU1BCX0NUUkxf T0ZGU0VUKGludGYpIFwKKwkoKCgoaW50ZiktPmNoYW5uZWwgLSA2KSAqIDB4NjgpICsgMHhhMTAw MCkKKyNkZWZpbmUgIFJYX1NQQl9DVFJMX0VOQUJMRQkJMHgwMAorI2RlZmluZSAgIFJYX1NQQl9D VFJMX0VOQUJMRV9FTgkJQklUKDApCisKKyNkZWZpbmUgUlhfUEFVU0VfQ1RSTF9PRkZTRVQoaW50 ZikgXAorCSgoKChpbnRmKS0+Y2hhbm5lbCAtIDYpICogMHg0KSArIDB4YTExMzgpCisjZGVmaW5l ICBSWF9QQVVTRV9NQVBfVkVDVE9SCQkweDAwCisKKyNkZWZpbmUgUlhfU1BCX1RPUF9DVFJMX09G RlNFVChpbnRmKSBcCisJKCgoKGludGYpLT5jaGFubmVsIC0gNikgKiAweDE0KSArIDB4YTIwMDAp CisjZGVmaW5lICBSWF9TUEJfVE9QX0JMS09VVAkJMHgwMAorCisjZGVmaW5lIE5VTV80S19CVUZG RVJTCQkJMzIKKyNkZWZpbmUgUklOR19CVUZGRVJfU0laRQkJKFBBR0VfU0laRSAqIE5VTV80S19C VUZGRVJTKQorCisjZGVmaW5lIERFU0NfUklOR19DT1VOVAkJCSg2NCAqIE5VTV80S19CVUZGRVJT KQorI2RlZmluZSBERVNDX1NJWkUJCQkxNgorI2RlZmluZSBERVNDX1JJTkdfU0laRQkJCShERVND X1JJTkdfQ09VTlQgKiBERVNDX1NJWkUpCisKKyNlbmRpZgotLT0yMAoyLjcuNAo= --000000000000dfb6ef05fc127be4 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 YIZIAWUDBAIBBQCggdQwLwYJKoZIhvcNAQkEMSIEIJq+wZWjrB4sNyY2uFXOmEakpJsUCzTdLRd0 7y2vfOPYMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTIzMDUxOTIx MjAwMVowaQYJKoZIhvcNAQkPMVwwWjALBglghkgBZQMEASowCwYJYIZIAWUDBAEWMAsGCWCGSAFl AwQBAjAKBggqhkiG9w0DBzALBgkqhkiG9w0BAQowCwYJKoZIhvcNAQEHMAsGCWCGSAFlAwQCATAN BgkqhkiG9w0BAQEFAASCAQASLFCbFyji7A8bT+NgoFvpYVHL93+OgPuLPNmF3bPkZ2pJsKwqazfP aFVsPVzpM59m2GJMb2Z4ZR3/pOHt8Rwort/Q9ADzDl5QlWSb3MegjKCVMgJCVKOPoqszBJmaN7ii NWnythPH5w6u1ZnTojaZxsMMYPrj565IhjlXeqY3u79Se0/lXD2xnZ54CTDLgkFT6OaQZnpvB4UD 9jc0Tb5kKmacPwb1KzCXREQNgH8sxjne7NVnXBodItmXtmrOj9wgWrDx1DgwoJ6j0rU5LzkGt2pN SfX6Zfa5BUQlEFpL3gdQKa+Ce2Oqeflaoj70kg77W50gsx1Ia5dtK6E+3Byg --000000000000dfb6ef05fc127be4--