From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.5 required=3.0 tests=DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED,DKIM_VALID,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6AE60C433E0 for ; Mon, 25 May 2020 03:43:29 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 187642075F for ; Mon, 25 May 2020 03:43:29 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="oBxAR+KD"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="BIEyKjWH" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 187642075F Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=IZXNO3kpAkBzNcVmIzSPwj3WUhpY0vtiNE94UqmzUlk=; b=oBxAR+KDr/0NMi POg9nXk1TklBlaN8w0Ev3jXIO6lX/LSjCTUyMOuWFDMvqc5cyWkBZC8yn4b2aoEYFYTF4lih5FLkK 3DTmQFqZqZ/CSOB4sUBpb9T6z8j/WhR4328ckYQkw4kpmBUf8KGWRU6N0MPgRVO0N+GG6a4bj/+pd UnAVzASHuQ0AmBDhyxDuMeno2/gLyigSl1NDKnlGBwTADXr5cHyi9sECVQ6jExHWnI6rf3MnrBoV5 kevLwUH/gsT6I2XmxwNuU5BeDZtmt49KUTp9rCmaJaXlGpBKiCVJa6qASfaNwT0x8KLiANYcn2hD6 Rk0kG0HvBbJHuDwnlZyA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jd41Q-00045Z-2M; Mon, 25 May 2020 03:43:28 +0000 Received: from mail-pg1-x544.google.com ([2607:f8b0:4864:20::544]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jd3zg-0002jo-QK for linux-arm-kernel@lists.infradead.org; Mon, 25 May 2020 03:41:49 +0000 Received: by mail-pg1-x544.google.com with SMTP id 124so1914181pgi.9 for ; Sun, 24 May 2020 20:41:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=d2cxt2kqb1W5J5kJLhnDTjJMqUvbdIEMwYeiFnB2DoA=; b=BIEyKjWHzQniTNbd42OXY3rikPPRO6h5YdB3alSf0USG6v3qg8kP4dcSwDDzaL4wg+ mgUfH96rHHWmqYTYLkfu9frPKbS8UgzksndOlY75iRvMxKNbzjGqdCnL52JdqUJGSQek sU96TDzB713CK6qOLHxBMapMJNSEV1zKMRznbew3W3FiJ4nBAQvMzOvjMgKYQC1OgFVm EtrhycoFAo1OlWBTivbFhIOJymZ8OtKOAP6rV73yLiJCE50G2FF0GtOhgSkDJLY06C0t a/WsYiFMfg1AORk/L+zOLk7sAHx7fN29H2/PEesEfeOjYx3C9rkMz8Yw99yIFNemn5E6 E/6w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=d2cxt2kqb1W5J5kJLhnDTjJMqUvbdIEMwYeiFnB2DoA=; b=m1CTv2p50iht9OxszYWKpwcRYcco3aDbgP1Vx98OXHqWiTK619U4IZ0ueZdRPa4Pqq IL6pM+8sBwgV/liDh+TPOMMDDkRUfv444NSzOgrxNCTmI0W/EWRRe1BjcK/pFn8ww6OC zs4z3IBJ7HHUqq+2XN7nwkWMlxZAmJWs2Z1XczA4w/BXMpRn608Ldt60/uti2Lfa6y4C zvuZDtrH675I7MQqadh7t2r0d5Jlp8rNsM/VSojju5V2y9NdX0JY+hIOcVZYb3kMFRlg QKinxg0itVo8+gVdTdRlhZuVL4TArEBF35yna2BDhngHwBlvuPwqpCdQ2NKUGhbsoOh7 1GMg== X-Gm-Message-State: AOAM5324mBfQleOk28Y7tV2GaU0DpJdHIrRq9Bkri9354tlthmf8335J D9xojuZ4ehVjRoBKM2Ea0UM= X-Google-Smtp-Source: ABdhPJywpd5loB7B69KVqrvmJl1Eoh7bjR5mW88onFlGFqRP1FOknN7i2bP+i/gUraqlAsF5MXKDaQ== X-Received: by 2002:a65:40c3:: with SMTP id u3mr25578364pgp.305.1590378099312; Sun, 24 May 2020 20:41:39 -0700 (PDT) Received: from fmin-OptiPlex-7060.nreal.work ([103.206.191.44]) by smtp.gmail.com with ESMTPSA id 7sm11981695pfc.203.2020.05.24.20.41.34 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sun, 24 May 2020 20:41:38 -0700 (PDT) From: dillon.minfei@gmail.com To: robh+dt@kernel.org, p.zabel@pengutronix.de, mcoquelin.stm32@gmail.com, alexandre.torgue@st.com, thierry.reding@gmail.com, sam@ravnborg.org, airlied@linux.ie, daniel@ffwll.ch, mturquette@baylibre.com, sboyd@kernel.org Subject: [PATCH v5 6/8] drm/panel: Add ilitek ili9341 panel driver Date: Mon, 25 May 2020 11:41:00 +0800 Message-Id: <1590378062-7965-7-git-send-email-dillon.minfei@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1590378062-7965-1-git-send-email-dillon.minfei@gmail.com> References: <1590378062-7965-1-git-send-email-dillon.minfei@gmail.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200524_204141_145253_D819000C X-CRM114-Status: GOOD ( 18.23 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: devicetree@vger.kernel.org, linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-spi@vger.kernel.org, dillon min , linux-stm32@st-md-mailman.stormreply.com, linux-arm-kernel@lists.infradead.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org RnJvbTogZGlsbG9uIG1pbiA8ZGlsbG9uLm1pbmZlaUBnbWFpbC5jb20+CgogICAgVGhpcyBkcml2 ZXIgY29tYmluZSB0aW55L2lsaTkzNDEuYyBtaXBpX2RiaV9pbnRlcmZhY2UgZHJpdmVyCiAgICB3 aXRoIG1pcGlfZHBpX2ludGVyZmFjZSBkcml2ZXIsIGNhbiBzdXBwb3J0IGlsaTkzNDEgd2l0aCBz ZXJpYWwKICAgIG1vZGUgb3IgcGFyYWxsZWwgcmdiIGludGVyZmFjZSBtb2RlIGJ5IHJlZ2lzdGVy IGNvbmZpZ3VyYXRpb24uCgpDaGFuZ2VzIHNpbmNlIFYzOgoKICAgIGFjY29kaW5nIHRvIExpbnVz IFdhbGxlaWoncyBzdWdnZXN0aW9uLgogICAgMSBhZGQgbW9yZSBjb21tZW50cyB0byBkcml2ZXIu CiAgICAyIHJlZHVjZSBtYWdpYyBudW1iZXIgdXNhZ2UgaW4gdGhlIGRyaXZlci4KICAgIDMgbW92 ZSBwYW5lbCBjb25maWd1cmF0aW9uIGZyb20gY29tbW9uIHBsYWNlIHRvIHN5c3RlbSBjb25maWd1 cmF0aW9uLgogICAgNCByZXVzZSBNSVBJX0RDU18qIGFzIG1vcmUgYXMgcG9zc2libGUuCgpTaWdu ZWQtb2ZmLWJ5OiBkaWxsb24gbWluIDxkaWxsb24ubWluZmVpQGdtYWlsLmNvbT4KLS0tCiBkcml2 ZXJzL2dwdS9kcm0vcGFuZWwvS2NvbmZpZyAgICAgICAgICAgICAgICB8ICAgMTIgKwogZHJpdmVy cy9ncHUvZHJtL3BhbmVsL01ha2VmaWxlICAgICAgICAgICAgICAgfCAgICAxICsKIGRyaXZlcnMv Z3B1L2RybS9wYW5lbC9wYW5lbC1pbGl0ZWstaWxpOTM0MS5jIHwgMTMwMSArKysrKysrKysrKysr KysrKysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCAxMzE0IGluc2VydGlvbnMoKykKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwtaWxpdGVrLWlsaTkzNDEu YwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9LY29uZmlnIGIvZHJpdmVycy9n cHUvZHJtL3BhbmVsL0tjb25maWcKaW5kZXggYTE3MjNjMS4uYzkzOGJlZSAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVs L0tjb25maWcKQEAgLTk1LDYgKzk1LDE4IEBAIGNvbmZpZyBEUk1fUEFORUxfSUxJVEVLX0lMOTMy MgogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc3VwcG9ydCBmb3IgSWxpdGVr IElMOTMyMgogCSAgUVZHQSAoMzIweDI0MCkgUkdCLCBZVVYgYW5kIElUVS1UIEJULjY1NiBwYW5l bHMuCiAKK2NvbmZpZyBEUk1fUEFORUxfSUxJVEVLX0lMSTkzNDEKKwl0cmlzdGF0ZSAiSWxpdGVr IElMSTkzNDEgMjQweDMyMCBRVkdBIHBhbmVscyIKKwlkZXBlbmRzIG9uIE9GICYmIFNQSQorCWRl cGVuZHMgb24gRFJNX0tNU19IRUxQRVIKKwlkZXBlbmRzIG9uIERSTV9LTVNfQ01BX0hFTFBFUgor CWRlcGVuZHMgb24gQkFDS0xJR0hUX0NMQVNTX0RFVklDRQorCXNlbGVjdCBEUk1fTUlQSV9EQkkK KwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBzdXBwb3J0IGZvciBJ bGl0ZWsgSUw5MzQxCisJICBRVkdBICgyNDB4MzIwKSBSR0IgcGFuZWxzLiBzdXBwb3J0IHNlcmlh bCAmIHBhcmFsbGVsIHJnYgorCSAgaW50ZXJmYWNlLgorCiBjb25maWcgRFJNX1BBTkVMX0lMSVRF S19JTEk5ODgxQwogCXRyaXN0YXRlICJJbGl0ZWsgSUxJOTg4MUMtYmFzZWQgcGFuZWxzIgogCWRl cGVuZHMgb24gT0YKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9NYWtlZmlsZSBi L2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9NYWtlZmlsZQppbmRleCA5NmE4ODNjLi4xNjk0N2Q3IDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9n cHUvZHJtL3BhbmVsL01ha2VmaWxlCkBAIC04LDYgKzgsNyBAQCBvYmotJChDT05GSUdfRFJNX1BB TkVMX0VMSURBX0tEMzVUMTMzKSArPSBwYW5lbC1lbGlkYS1rZDM1dDEzMy5vCiBvYmotJChDT05G SUdfRFJNX1BBTkVMX0ZFSVhJTl9LMTAxX0lNMkJBMDIpICs9IHBhbmVsLWZlaXhpbi1rMTAxLWlt MmJhMDIubwogb2JqLSQoQ09ORklHX0RSTV9QQU5FTF9GRUlZQU5HX0ZZMDcwMjRESTI2QTMwRCkg Kz0gcGFuZWwtZmVpeWFuZy1meTA3MDI0ZGkyNmEzMGQubwogb2JqLSQoQ09ORklHX0RSTV9QQU5F TF9JTElURUtfSUw5MzIyKSArPSBwYW5lbC1pbGl0ZWstaWxpOTMyMi5vCitvYmotJChDT05GSUdf RFJNX1BBTkVMX0lMSVRFS19JTEk5MzQxKSArPSBwYW5lbC1pbGl0ZWstaWxpOTM0MS5vCiBvYmot JChDT05GSUdfRFJNX1BBTkVMX0lMSVRFS19JTEk5ODgxQykgKz0gcGFuZWwtaWxpdGVrLWlsaTk4 ODFjLm8KIG9iai0kKENPTkZJR19EUk1fUEFORUxfSU5OT0xVWF9QMDc5WkNBKSArPSBwYW5lbC1p bm5vbHV4LXAwNzl6Y2Eubwogb2JqLSQoQ09ORklHX0RSTV9QQU5FTF9KRElfTFQwNzBNRTA1MDAw KSArPSBwYW5lbC1qZGktbHQwNzBtZTA1MDAwLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9wYW5lbC9wYW5lbC1pbGl0ZWstaWxpOTM0MS5jIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL3Bh bmVsLWlsaXRlay1pbGk5MzQxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u ZGQ2Zjg2MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC1p bGl0ZWstaWxpOTM0MS5jCkBAIC0wLDAgKzEsMTMwMSBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjAtb25seQorLyoKKyAqIElsaXRlayBJTEk5MzQxIFRGVCBMQ0QgZHJtX3Bh bmVsIGRyaXZlci4KKyAqCisgKiBUaGlzIHBhbmVsIGNhbiBiZSBjb25maWd1cmVkIHRvIHN1cHBv cnQ6CisgKiAtIDE2LWJpdCBwYXJhbGxlbCBSR0IgaW50ZXJmYWNlCisgKiAtIDE4LWJpdCBwYXJh bGxlbCBSR0IgaW50ZXJmYWNlCisgKiAtIDQtbGluZSBzZXJpYWwgc3BpIGludGVyZmFjZQorICoK KyAqIENvcHlyaWdodCAoQykgMjAyMCBEaWxsb24gTWluIDxkaWxsb24ubWluZmVpQGdtYWlsLmNv bT4KKyAqIERlcml2ZWQgZnJvbSBkcml2ZXJzL2RybS9ncHUvcGFuZWwvcGFuZWwtaWxpdGVrLWls aTkzMjIuYworICovCisKKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51 eC9ncGlvL2NvbnN1bWVyLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8 bGludXgvb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+ CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Cisj aW5jbHVkZSA8dmlkZW8vbWlwaV9kaXNwbGF5Lmg+CisjaW5jbHVkZSA8ZHJtL2RybV9taXBpX2Ri aS5oPgorI2luY2x1ZGUgPGRybS9kcm1fZ2VtX2ZyYW1lYnVmZmVyX2hlbHBlci5oPgorI2luY2x1 ZGUgPGRybS9kcm1fZ2VtX2NtYV9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2ZiX2hlbHBl ci5oPgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgorCisjaW5jbHVkZSA8ZHJt L2RybV9kcnYuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX21vZGVzLmg+CisjaW5jbHVkZSA8ZHJtL2Ry bV9wYW5lbC5oPgorI2luY2x1ZGUgPGRybS9kcm1fcHJpbnQuaD4KKworI2RlZmluZSBJTEk5MzQx X1JHQl9JTlRFUkZBQ0UgIDB4YjAgICAvKiBSR0IgSW50ZXJmYWNlIFNpZ25hbCBDb250cm9sICov CisjZGVmaW5lIElMSTkzNDFfRlJDICAgICAgICAgICAgMHhiMSAgIC8qIEZyYW1lIFJhdGUgQ29u dHJvbCByZWdpc3RlciAqLworI2RlZmluZSBJTEk5MzQxX0RGQyAgICAgICAgICAgIDB4YjYgICAv KiBEaXNwbGF5IEZ1bmN0aW9uIENvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgSUxJOTM0MV9Q T1dFUjEgICAgICAgICAweGMwICAgLyogUG93ZXIgQ29udHJvbCAxIHJlZ2lzdGVyICovCisjZGVm aW5lIElMSTkzNDFfUE9XRVIyICAgICAgICAgMHhjMSAgIC8qIFBvd2VyIENvbnRyb2wgMiByZWdp c3RlciAqLworI2RlZmluZSBJTEk5MzQxX1ZDT00xICAgICAgICAgIDB4YzUgICAvKiBWQ09NIENv bnRyb2wgMSByZWdpc3RlciAqLworI2RlZmluZSBJTEk5MzQxX1ZDT00yICAgICAgICAgIDB4Yzcg ICAvKiBWQ09NIENvbnRyb2wgMiByZWdpc3RlciAqLworI2RlZmluZSBJTEk5MzQxX1BPV0VSQSAg ICAgICAgIDB4Y2IgICAvKiBQb3dlciBjb250cm9sIEEgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgSUxJ OTM0MV9QT1dFUkIgICAgICAgICAweGNmICAgLyogUG93ZXIgY29udHJvbCBCIHJlZ2lzdGVyICov CisjZGVmaW5lIElMSTkzNDFfUEdBTU1BICAgICAgICAgMHhlMCAgIC8qIFBvc2l0aXZlIEdhbW1h IENvcnJlY3Rpb24gcmVnaXN0ZXIgKi8KKyNkZWZpbmUgSUxJOTM0MV9OR0FNTUEgICAgICAgICAw eGUxICAgLyogTmVnYXRpdmUgR2FtbWEgQ29ycmVjdGlvbiByZWdpc3RlciAqLworI2RlZmluZSBJ TEk5MzQxX0RUQ0EgICAgICAgICAgIDB4ZTggICAvKiBEcml2ZXIgdGltaW5nIGNvbnRyb2wgQSAq LworI2RlZmluZSBJTEk5MzQxX0RUQ0IgICAgICAgICAgIDB4ZWEgICAvKiBEcml2ZXIgdGltaW5n IGNvbnRyb2wgQiAqLworI2RlZmluZSBJTEk5MzQxX1BPV0VSX1NFUSAgICAgIDB4ZWQgICAvKiBQ b3dlciBvbiBzZXF1ZW5jZSByZWdpc3RlciAqLworI2RlZmluZSBJTEk5MzQxXzNHQU1NQV9FTiAg ICAgIDB4ZjIgICAvKiAzIEdhbW1hIGVuYWJsZSByZWdpc3RlciAqLworI2RlZmluZSBJTEk5MzQx X0lOVEVSRkFDRSAgICAgIDB4ZjYgICAvKiBJbnRlcmZhY2UgY29udHJvbCByZWdpc3RlciAqLwor I2RlZmluZSBJTEk5MzQxX1BSQyAgICAgICAgICAgIDB4ZjcgICAvKiBQdW1wIHJhdGlvIGNvbnRy b2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgSUxJOTM0MV9FVE1PRAkgICAgICAgMHhiNyAgIC8qIEVu dHJ5IG1vZGUgc2V0ICovCisKKyNkZWZpbmUgSUxJOTM0MV9NQURDVExfQkdSCUJJVCgzKQorI2Rl ZmluZSBJTEk5MzQxX01BRENUTF9NVglCSVQoNSkKKyNkZWZpbmUgSUxJOTM0MV9NQURDVExfTVgJ QklUKDYpCisjZGVmaW5lIElMSTkzNDFfTUFEQ1RMX01ZCUJJVCg3KQorCisKKyNkZWZpbmUgSUxJ OTM0MV9QT1dFUl9CX0xFTgkzCisjZGVmaW5lIElMSTkzNDFfUE9XRVJfU0VRX0xFTgk0CisjZGVm aW5lIElMSTkzNDFfRFRDQV9MRU4JMworI2RlZmluZSBJTEk5MzQxX0RUQ0JfTEVOCTIKKyNkZWZp bmUgSUxJOTM0MV9QT1dFUl9BX0xFTgk1CisjZGVmaW5lIElMSTkzNDFfREZDXzFfTEVOCTIKKyNk ZWZpbmUgSUxJOTM0MV9GUkNfTEVOCQkyCisjZGVmaW5lIElMSTkzNDFfVkNPTV8xX0xFTgkyCisj ZGVmaW5lIElMSTkzNDFfREZDXzJfTEVOCTQKKyNkZWZpbmUgSUxJOTM0MV9DT0xVTU5fQUREUl9M RU4JNAorI2RlZmluZSBJTEk5MzQxX1BBR0VfQUREUl9MRU4JNAorI2RlZmluZSBJTEk5MzQxX0lO VEVSRkFDRV9MRU4JMworI2RlZmluZSBJTEk5MzQxX1BHQU1NQV9MRU4JMTUKKyNkZWZpbmUgSUxJ OTM0MV9OR0FNTUFfTEVOCTE1CisjZGVmaW5lIElMSTkzNDFfQ0FfTEVOCQkzCisKKyNkZWZpbmUg SUxJOTM0MV9QSVhFTF9EUElfMTZfQklUUwkoQklUKDYpfEJJVCg0KSkKKyNkZWZpbmUgSUxJOTM0 MV9QSVhFTF9EUElfMThfQklUUwkoQklUKDYpfEJJVCg1KSkKKyNkZWZpbmUgSUxJOTM0MV9HQU1N QV9DVVJWRV8xCQlCSVQoMCkKKyNkZWZpbmUgSUxJOTM0MV9JRl9XRV9NT0RFCQlCSVQoMCkKKyNk ZWZpbmUgSUxJOTM0MV9JRl9CSUdfRU5ESUFOCQkweDAwCisjZGVmaW5lIElMSTkzNDFfSUZfRE1f UkdCCQlCSVQoMikKKyNkZWZpbmUgSUxJOTM0MV9JRl9ETV9JTlRFUk5BTAkJMHgwMAorI2RlZmlu ZSBJTEk5MzQxX0lGX0RNX1ZTWU5DCQlCSVQoMykKKyNkZWZpbmUgSUxJOTM0MV9JRl9STV9SR0IJ CUJJVCgxKQorI2RlZmluZSBJTEk5MzQxX0lGX1JJTV9SR0IJCTB4MDAKKworI2RlZmluZSBJTEk5 MzQxX0NPTFVNTl9BRERSCQkweDAwZWYKKyNkZWZpbmUgSUxJOTM0MV9QQUdFX0FERFIJCTB4MDEz ZgorCisjZGVmaW5lIElMSTkzNDFfUkdCX0VQTAkJCUJJVCgwKQorI2RlZmluZSBJTEk5MzQxX1JH Ql9EUEwJCQlCSVQoMSkKKyNkZWZpbmUgSUxJOTM0MV9SR0JfSFNQTAkJQklUKDIpCisjZGVmaW5l IElMSTkzNDFfUkdCX1ZTUEwJCUJJVCgzKQorI2RlZmluZSBJTEk5MzQxX1JHQl9ERV9NT0RFCQlC SVQoNikKKyNkZWZpbmUgSUxJOTM0MV9SR0JfRElTUF9QQVRIX01FTQlCSVQoNykKKworI2RlZmlu ZSBJTEk5MzQxX0RCSV9WQ09NSF80UDZWCQkweDIzCisjZGVmaW5lIElMSTkzNDFfREJJX1BXUl8y X0RFRkFVTFQJMHgxMAorI2RlZmluZSBJTEk5MzQxX0RCSV9QUkNfTk9STUFMCQkweDIwCisjZGVm aW5lIElMSTkzNDFfREJJX1ZDT01fMV9WTUhfNFAyNVYJMHgzZQorI2RlZmluZSBJTEk5MzQxX0RC SV9WQ09NXzFfVk1MXzFQNVYJMHgyOAorI2RlZmluZSBJTEk5MzQxX0RCSV9WQ09NXzJfREVDXzU4 CTB4ODYKKyNkZWZpbmUgSUxJOTM0MV9EQklfRlJDX0RJVkEJCTB4MDAKKyNkZWZpbmUgSUxJOTM0 MV9EQklfRlJDX1JUTkEJCTB4MWIKKyNkZWZpbmUgSUxJOTM0MV9EQklfRU1TX0dBUwkJQklUKDAp CisjZGVmaW5lIElMSTkzNDFfREJJX0VNU19EVFMJCUJJVCgxKQorI2RlZmluZSBJTEk5MzQxX0RC SV9FTVNfR09OCQlCSVQoMikKKy8qKgorICogaWxpOTM0MV9jb21tYW5kIC0gaWxpOTM0MSBjb21t YW5kIHdpdGggb3B0aW9uYWwgcGFyYW1ldGVyKHMpCisgKiBAaWxpOiBzdHJ1Y3QgaWxpOTM0MQor ICogQGNtZDogQ29tbWFuZAorICogQHNlcS4uLjogT3B0aW9uYWwgcGFyYW1ldGVyKHMpCisgKgor ICogU2VuZCBjb21tYW5kIHRvIHRoZSBjb250cm9sbGVyLgorICoKKyAqIFJldHVybnM6CisgKiBa ZXJvIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KKyAqLworI2Rl ZmluZSBpbGk5MzQxX2NvbW1hbmQoaWxpLCBjbWQsIHNlcS4uLikgXAorKHsgXAorCXU4IGRbXSA9 IHsgc2VxIH07IFwKKwlfaWxpOTM0MV9jb21tYW5kKGlsaSwgY21kLCBkLCBBUlJBWV9TSVpFKGQp KTsgXAorfSkKKworLyoqCisgKiBzdHJ1Y3QgaWxpOTM0MV9jb25maWcgLSB0aGUgc3lzdGVtIHNw ZWNpZmljIElMSTkzNDEgY29uZmlndXJhdGlvbgorICogQG1heF9zcGlfc3BlZWQ6IDEwMDAwMDAw CisgKi8KK3N0cnVjdCBpbGk5MzQxX2NvbmZpZyB7CisJdTMyIG1heF9zcGlfc3BlZWQ7CisKKwlj b25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSBtb2RlOworCS8qIFRPRE86IG5lZWQgY29tbWVu dHMgZm9yIHRoaXMgcmVnaXN0ZXIgKi8KKwl1OCBjYVtJTEk5MzQxX0NBX0xFTl07CisJLyogVE9E TzogbmVlZCBjb21tZW50cyBmb3IgdGhpcyByZWdpc3RlciAqLworCXU4IHBvd2VyX2JbSUxJOTM0 MV9QT1dFUl9CX0xFTl07CisJLyogVE9ETzogbmVlZCBjb21tZW50cyBmb3IgdGhpcyByZWdpc3Rl ciAqLworCXU4IHBvd2VyX3NlcVtJTEk5MzQxX1BPV0VSX1NFUV9MRU5dOworCS8qIFRPRE86IG5l ZWQgY29tbWVudHMgZm9yIHRoaXMgcmVnaXN0ZXIgKi8KKwl1OCBkdGNhW0lMSTkzNDFfRFRDQV9M RU5dOworCS8qIFRPRE86IG5lZWQgY29tbWVudHMgZm9yIHRoaXMgcmVnaXN0ZXIgKi8KKwl1OCBk dGNiW0lMSTkzNDFfRFRDQl9MRU5dOworCS8qIFRPRE86IG5lZWQgY29tbWVudHMgZm9yIHRoaXMg cmVnaXN0ZXIgKi8KKwl1OCBwb3dlcl9hW0lMSTkzNDFfUE9XRVJfQV9MRU5dOworCS8qCisJICog RnJhbWUgUmF0ZSBDb250cm9sIChJbiBOb3JtYWwgTW9kZS9GdWxsIENvbG9ycykgKEIxaCkKKwkg KgorCSAqIEZvcm11bGEgdG8gY2FsY3VsYXRlIGZyYW1lIGZyZXF1ZW5jeToKKwkgKiBGcmFtZSBS YXRlPWZvc2MvKENsb2NrcyBwZXIgbGluZSB4IERpdmlzaW9uIHJhdGlvIHgKKwkgKiAoTGluZXMr VkJQK1ZGUCkpCisJICoKKwkgKiBTZXRzIHRoZSBkaXZpc2lvbiByYXRpbyBmb3IgaW50ZXJuYWwg Y2xvY2tzIG9mIE5vcm1hbCBtb2RlIGF0IE1DVQorCSAqIGludGVyZmFjZS4KKwkgKgorCSAqIGZv c2MgOiBpbnRlcm5hbCBvc2NpbGxhdG9yIGZyZXF1ZW5jeQorCSAqIENsb2NrcyBwZXIgbGluZSA6 IFJUTkEgc2V0dGluZworCSAqIERpdmlzaW9uIHJhdGlvIDogRElWQSBzZXR0aW5nCisJICogTGlu ZXMgOiB0b3RhbCBkcml2aW5nIGxpbmUgbnVtYmVyCisJICogVkJQIDogYmFjayBwb3JjaCBsaW5l IG51bWJlcgorCSAqIFZGUCA6IGZyb250IHBvcmNoIGxpbmUgbnVtYmVyCisJICoKKwkgKiBSVE5B IFs0OjBdIEZyYW1lIFJhdGUgKEh6KSAgIFJUTkEgWzQ6MF0gRnJhbWUgUmF0ZSAoSHopCisJICog MSAwIDAgMCAwICAxMTkJCTEgMSAwIDAgMCAgNzkKKwkgKiAxIDAgMCAwIDEgIDExMgkJMSAxIDAg MCAxICA3NgorCSAqIDEgMCAwIDEgMCAgMTA2CQkxIDEgMCAxIDAgIDczCisJICogMSAwIDAgMSAx ICAxMDAJCTEgMSAwIDEgMSAgNzAoZGVmYXVsdCkKKwkgKiAxIDAgMSAwIDAgIDk1CQkxIDEgMSAw IDAgIDY4CisJICogMSAwIDEgMCAxICA5MAkJMSAxIDEgMCAxICA2NQorCSAqIDEgMCAxIDEgMCAg ODYJCTEgMSAxIDAgMSAgNjMKKwkgKiAxIDAgMSAxIDEgIDgzCQkxIDEgMSAxIDEgIDYxCisJICoK KwkgKiBESVZBIFsxOjBdIDogZGl2aXNpb24gcmF0aW8gZm9yIGludGVybmFsIGNsb2NrcyB3aGVu IE5vcm1hbCBtb2RlLgorCSAqCisJICogRElWQSBbMTowXSBEaXZpc2lvbiBSYXRpbworCSAqIDAg MCBmb3NjCisJICogMCAxIGZvc2MgLyAyCisJICogMSAwIGZvc2MgLyA0CisJICogMSAxIGZvc2Mg LyA4CisJICoKKwkgKi8KKwl1OCBmcmNbSUxJOTM0MV9GUkNfTEVOXTsKKwkvKiBUT0RPOiBuZWVk IGNvbW1lbnRzIGZvciB0aGlzIHJlZ2lzdGVyICovCisJdTggcHJjOworCS8qCisJICogQjZoIERJ U0NUUkwgKERpc3BsYXkgRnVuY3Rpb24gQ29udHJvbCkKKwkgKiAgICAgICAgICAgICAgIEQvQ1gg UkRYIFdSWCBEMTctOCBENyAgRDYgRDUgRDQgRDMgICBEMiAgRDEgIEQwICBIRVgKKwkgKiBDb21t YW5kICAgICAgIDAgICAgMSAgIE0gICBYWCAgICAxICAgMCAgMSAgMSAgMCAgICAxICAgMSAgIDAg ICBCNmgKKwkgKiAxc3QgUGFyYW1ldGVyIDEgICAgMSAgIE0gICBYWCAgICAwICAgMCAgMCAgMCAg UFRHWzE6MF0gUFRbMTowXSAwQQorCSAqIDJuZCBQYXJhbWV0ZXIgMSAgICAxICAgTSAgIFhYICAg IFJFViBHUyBTUyBTTSBJU0NbMzowXSAgICAgICAgIDgyCisJICogM3JkIFBhcmFtZXRlciAxICAg IDEgICBNICAgWFggICAgMCAgIDAgIE5MWzU6MF0gICAgICAgICAgICAgICAgMjcKKwkgKiA0dGgg UGFyYW1ldGVyIDEgICAgMSAgIE0gICBYWCAgICAwICAgMCAgUENESVZbNTowXSAgICAgICAgICAg ICBYWAorCSAqCisJICogUFRHIFsxOjBdOiBTZXQgdGhlIHNjYW4gbW9kZSBpbiBub24tZGlzcGxh eSBhcmVhLgorCSAqIFBURzEgfCBQVEcwIHwgR2F0ZSBvdXRwdXRzIGluICAgfCBTb3VyY2Ugb3V0 cHV0cyBpbiAgfCBWQ09NIG91dHB1dAorCSAqICAgICAgICAgICAgICAgbm9uLWRpc3BsYXkgYXJl YSAgfCBub24tZGlzcGxheSBhcmVhICAgfAorCSAqIDEgICAgICAwICAgICAgSW50ZXJ2YWwgc2Nh biAgICAgICBTZXQgd2l0aCB0aGUgUFRbMjowXSBiaXRzCisJICoKKwkgKiBQVCBbMTowXTogRGV0 ZXJtaW5lIHNvdXJjZS9WQ09NIG91dHB1dCBpbiBhIG5vbi1kaXNwbGF5IGFyZWEgaW4gdGhlCisJ ICogcGFydGlhbCBkaXNwbGF5IG1vZGUuCisJICogMSAgICAwICAgIEFHTkQgICAgICAgQUdORCAg ICAgICBBR05EICAgICAgICAgQUdORAorCSAqCisJICogUkVWOiBTZWxlY3Qgd2hldGhlciB0aGUg bGlxdWlkIGNyeXN0YWwgdHlwZSBpcyBub3JtYWxseSB3aGl0ZSB0eXBlCisJICogb3Igbm9ybWFs bHkgYmxhY2sgdHlwZS4KKwkgKiBSRVYgICBMaXF1aWQgY3J5c3RhbCB0eXBlCisJICogMCAgICAg Tm9ybWFsbHkgYmxhY2sKKwkgKiAxICAgICBOb3JtYWxseSB3aGl0ZQorCSAqCisJICogU1M6IFNl bGVjdCB0aGUgc2hpZnQgZGlyZWN0aW9uIG9mIG91dHB1dHMgZnJvbSB0aGUgc291cmNlIGRyaXZl ci4KKwkgKiBTUyAgICBTb3VyY2UgT3V0cHV0IFNjYW4gRGlyZWN0aW9uCisJICogMCAgICAgUzEg LT4gUzcyMAorCSAqIDEgICAgIFM3MjAgLT4gUzEKKwkgKgorCSAqIEdTOiBTZXRzIHRoZSBkaXJl Y3Rpb24gb2Ygc2NhbiBieSB0aGUgZ2F0ZSBkcml2ZXIgaW4gdGhlIHJhbmdlCisJICogZGV0ZXJt aW5lZCBieSBTQ04gWzQ6MF0gYW5kIE5MIFs0OjBdLiBUaGUgc2NhbiBkaXJlY3Rpb24KKwkgKiBk ZXRlcm1pbmVkIGJ5IEdTID0gMCBjYW4gYmUgcmV2ZXJzZWQgYnkgc2V0dGluZyBHUyA9IDEuCisJ ICoKKwkgKiBHUyAgICAgR2F0ZSBPdXRwdXQgU2NhbiBEaXJlY3Rpb24KKwkgKiAwICAgICAgRzEg LT4gRzMyMAorCSAqIDEgICAgICBHMzIwIC0+IEcxCisJICovCisJdTggZGZjXzFbSUxJOTM0MV9E RkNfMV9MRU5dOworCS8qCisJICogUG93ZXIgQ29udHJvbCAxIChDMGgpCisJICogVlJIIFs1OjBd OiBTZXQgdGhlIEdWREQgbGV2ZWwsIHdoaWNoIGlzIGEgcmVmZXJlbmNlIGxldmVsIGZvciB0aGUK KwkgKiBWQ09NIGxldmVsIGFuZCB0aGUgZ3JheXNjYWxlIHZvbHRhZ2UgbGV2ZWwuCisJICoKKwkg KiBWUkhbNTowXSAgICBHVkRECQkJVlJIWzU6MF0JR1ZERAorCSAqIDAgMCAwIDAgMCAwIFNldHRp bmcgcHJvaGliaXRlZAkxIDAgMCAwIDAgMAk0LjQ1IFYKKwkgKiAwIDAgMCAwIDAgMSBTZXR0aW5n IHByb2hpYml0ZWQJMSAwIDAgMCAwIDEJNC41MCBWCisJICogMCAwIDAgMCAxIDAgU2V0dGluZyBw cm9oaWJpdGVkCTEgMCAwIDAgMSAwCTQuNTUgVgorCSAqIDAgMCAwIDAgMSAxIDMuMDAgVgkJCTEg MCAwIDAgMSAxCTQuNjAgVgorCSAqIDAgMCAwIDEgMCAwIDMuMDUgVgkJCTEgMCAwIDEgMCAwCTQu NjUgVgorCSAqIDAgMCAwIDEgMCAxIDMuMTAgVgkJCTEgMCAwIDEgMCAxCTQuNzAgVgorCSAqIDAg MCAwIDEgMSAwIDMuMTUgVgkJCTEgMCAwIDEgMSAwCTQuNzUgVgorCSAqIDAgMCAwIDEgMSAxIDMu MjAgVgkJCTEgMCAwIDEgMSAxCTQuODAgVgorCSAqIDAgMCAxIDAgMCAwIDMuMjUgVgkJCTEgMCAx IDAgMCAwCTQuODUgVgorCSAqIDAgMCAxIDAgMCAxIDMuMzAgVgkJCTEgMCAxIDAgMCAxCTQuOTAg VgorCSAqIDAgMCAxIDAgMSAwIDMuMzUgVgkJCTEgMCAxIDAgMSAwCTQuOTUgVgorCSAqIDAgMCAx IDAgMSAxIDMuNDAgVgkJCTEgMCAxIDAgMSAxCTUuMDAgVgorCSAqIDAgMCAxIDEgMCAwIDMuNDUg VgkJCTEgMCAxIDEgMCAwCTUuMDUgVgorCSAqIDAgMCAxIDEgMCAxIDMuNTAgVgkJCTEgMCAxIDEg MCAxCTUuMTAgVgorCSAqIDAgMCAxIDEgMSAwIDMuNTUgVgkJCTEgMCAxIDEgMSAwCTUuMTUgVgor CSAqIDAgMCAxIDEgMSAxIDMuNjAgVgkJCTEgMCAxIDEgMSAxCTUuMjAgVgorCSAqIDAgMSAwIDAg MCAwIDMuNjUgVgkJCTEgMSAwIDAgMCAwCTUuMjUgVgorCSAqIDAgMSAwIDAgMCAxIDMuNzAgVgkJ CTEgMSAwIDAgMCAxCTUuMzAgVgorCSAqIDAgMSAwIDAgMSAwIDMuNzUgVgkJCTEgMSAwIDAgMSAw CTUuMzUgVgorCSAqIDAgMSAwIDAgMSAxIDMuODAgVgkJCTEgMSAwIDAgMSAxCTUuNDAgVgorCSAq IDAgMSAwIDEgMCAwIDMuODUgVgkJCTEgMSAwIDEgMCAwCTUuNDUgVgorCSAqIDAgMSAwIDEgMCAx IDMuOTAgVgkJCTEgMSAwIDEgMCAxCTUuNTAgVgorCSAqIDAgMSAwIDEgMSAwIDMuOTUgVgkJCTEg MSAwIDEgMSAwCTUuNTUgVgorCSAqIDAgMSAwIDEgMSAxIDQuMDAgVgkJCTEgMSAwIDEgMSAxCTUu NjAgVgorCSAqIDAgMSAxIDAgMCAwIDQuMDUgVgkJCTEgMSAxIDAgMCAwCTUuNjUgVgorCSAqIDAg MSAxIDAgMCAxIDQuMTAgVgkJCTEgMSAxIDAgMCAxCTUuNzAgVgorCSAqIDAgMSAxIDAgMSAwIDQu MTUgVgkJCTEgMSAxIDAgMSAwCTUuNzUgVgorCSAqIDAgMSAxIDAgMSAxIDQuMjAgVgkJCTEgMSAx IDAgMSAxCTUuODAgVgorCSAqIDAgMSAxIDEgMCAwIDQuMjUgVgkJCTEgMSAxIDEgMCAwCTUuODUg VgorCSAqIDAgMSAxIDEgMCAxIDQuMzAgVgkJCTEgMSAxIDEgMCAxCTUuOTAgVgorCSAqIDAgMSAx IDEgMSAwIDQuMzUgVgkJCTEgMSAxIDEgMSAwCTUuOTUgVgorCSAqIDAgMSAxIDEgMSAxIDQuNDAg VgkJCTEgMSAxIDEgMSAxCTYuMDAgVgorCSAqLworCXU4IHBvd2VyXzE7CisJLyoKKwkgKiBQb3dl ciBDb250cm9sIDIgKEMxaCkKKwkgKgorCSAqIEJUIFsyOjBdOiBTZXRzIHRoZSBmYWN0b3IgdXNl ZCBpbiB0aGUgc3RlcC11cCBjaXJjdWl0cy4KKwkgKiBTZWxlY3QgdGhlIG9wdGltYWwgc3RlcC11 cCBmYWN0b3IgZm9yIHRoZSBvcGVyYXRpbmcgdm9sdGFnZS4gVG8KKwkgKiByZWR1Y2UgcG93ZXIg Y29uc3VtcHRpb24sIHNldCBhIHNtYWxsZXIgZmFjdG9yLgorCSAqCisJICogQlRbMjowXSAgIEFW REQgICAgIFZHSCAgICAgIFZHTAorCSAqIDAgMCAwICAgICBWQ0kgeCAyICBWQ0kgeCA3ICBWQ0kg eCA0CisJICogMCAwIDEgICAgICAgICAgICAgICAgICAgICAgIFZDSSB4IDMKKwkgKiAwIDEgMCAg ICAgICAgICAgICAgVkNJIHggNiAgVkNJIHggNAorCSAqIDAgMSAxCQkgICAgICAgVkNJIHggMwor CSAqCisJICovCisJdTggcG93ZXJfMjsKKwkvKgorCSAqIFZDT00gQ29udHJvbCAxKEM1aCkKKwkg KgorCSAqIFZNSCBbNjowXSA6IFNldCB0aGUgVkNPTUggdm9sdGFnZQorCSAqCisJICogVk1IWzY6 MF0gVkNPTUgoVikgVk1IWzY6MF0gVkNPTUgoVikgVk1IWzY6MF0gVkNPTUgoVikgVk1IWzY6MF0g VkNPTUgKKwkgKiAwMDAwMDAwICAyLjcwMCAgICAwMTAwMDAwICAzLjUwMCAgICAxMDAwMDAwICA0 LjMwMCAgICAxMTAwMDAwICA1LjEwMAorCSAqIDAwMDAwMDEgIDIuNzI1ICAgIDAxMDAwMDEgIDMu NTI1ICAgIDEwMDAwMDEgIDQuMzI1ICAgIDExMDAwMDEgIDUuMTI1CisJICogMDAwMDAxMCAgMi43 NTAgICAgMDEwMDAxMCAgMy41NTAgICAgMTAwMDAxMCAgNC4zNTAgICAgMTEwMDAxMCAgNS4xNTAK KwkgKiAwMDAwMDExICAyLjc3NSAgICAwMTAwMDExICAzLjU3NSAgICAxMDAwMDExICA0LjM3NSAg ICAxMTAwMDExICA1LjE3NQorCSAqIDAwMDAxMDAgIDIuODAwICAgIDAxMDAxMDAgIDMuNjAwICAg IDEwMDAxMDAgIDQuNDAwICAgIDExMDAxMDAgIDUuMjAwCisJICogMDAwMDEwMSAgMi44MjUgICAg MDEwMDEwMSAgMy42MjUgICAgMTAwMDEwMSAgNC40MjUgICAgMTEwMDEwMSAgNS4yMjUKKwkgKiAw MDAwMTEwICAyLjg1MCAgICAwMTAwMTEwICAzLjY1MCAgICAxMDAwMTEwICA0LjQ1MCAgICAxMTAw MTEwICA1LjI1MAorCSAqIDAwMDAxMTEgIDIuODc1ICAgIDAxMDAxMTEgIDMuNjc1ICAgIDEwMDAx MTEgIDQuNDc1IAkgMTEwMDExMSAgNS4yNzUKKwkgKiAwMDAxMDAwICAyLjkwMCAgICAwMTAxMDAw ICAzLjcwMCAgICAxMDAxMDAwICA0LjUwMCAJIDExMDEwMDAgIDUuMzAwCisJICogMDAwMTAwMSAg Mi45MjUgICAgMDEwMTAwMSAgMy43MjUgICAgMTAwMTAwMSAgNC41MjUgCSAxMTAxMDAxICA1LjMy NQorCSAqIDAwMDEwMTAgIDIuOTUwICAgIDAxMDEwMTAgIDMuNzUwICAgIDEwMDEwMTAgIDQuNTUw IAkgMTEwMTAxMCAgNS4zNTAKKwkgKiAwMDAxMDExICAyLjk3NSAgICAwMTAxMDExICAzLjc3NSAg ICAxMDAxMDExICA0LjU3NSAJIDExMDEwMTEgIDUuMzc1CisJICogMDAwMTEwMCAgMy4wMDAgICAg MDEwMTEwMCAgMy44MDAgICAgMTAwMTEwMCAgNC42MDAgCSAxMTAxMTAwICA1LjQwMAorCSAqIDAw MDExMDEgIDMuMDI1ICAgIDAxMDExMDEgIDMuODI1ICAgIDEwMDExMDEgIDQuNjI1IAkgMTEwMTEw MSAgNS40MjUKKwkgKiAwMDAxMTEwICAzLjA1MCAgICAwMTAxMTEwICAzLjg1MCAgICAxMDAxMTEw ICA0LjY1MCAJIDExMDExMTAgIDUuNDUwCisJICogMDAwMTExMSAgMy4wNzUgICAgMDEwMTExMSAg My44NzUgICAgMTAwMTExMSAgNC42NzUgCSAxMTAxMTExICA1LjQ3NQorCSAqIDAwMTAwMDAgIDMu MTAwICAgIDAxMTAwMDAgIDMuOTAwICAgIDEwMTAwMDAgIDQuNzAwIAkgMTExMDAwMCAgNS41MDAK KwkgKiAwMDEwMDAxICAzLjEyNSAgICAwMTEwMDAxICAzLjkyNSAgICAxMDEwMDAxICA0LjcyNSAJ IDExMTAwMDEgIDUuNTI1CisJICogMDAxMDAxMCAgMy4xNTAgICAgMDExMDAxMCAgMy45NTAgICAg MTAxMDAxMCAgNC43NTAgCSAxMTEwMDEwICA1LjU1MAorCSAqIDAwMTAwMTEgIDMuMTc1ICAgIDAx MTAwMTEgIDMuOTc1ICAgIDEwMTAwMTEgIDQuNzc1IAkgMTExMDAxMSAgNS41NzUKKwkgKiAwMDEw MTAwICAzLjIwMCAgICAwMTEwMTAwICA0LjAwMCAgICAxMDEwMTAwICA0LjgwMCAJIDExMTAxMDAg IDUuNjAwCisJICogMDAxMDEwMSAgMy4yMjUgICAgMDExMDEwMSAgNC4wMjUgICAgMTAxMDEwMSAg NC44MjUgCSAxMTEwMTAxICA1LjYyNQorCSAqIDAwMTAxMTAgIDMuMjUwICAgIDAxMTAxMTAgIDQu MDUwICAgIDEwMTAxMTAgIDQuODUwIAkgMTExMDExMCAgNS42NTAKKwkgKiAwMDEwMTExICAzLjI3 NSAgICAwMTEwMTExICA0LjA3NSAgICAxMDEwMTExICA0Ljg3NSAJIDExMTAxMTEgIDUuNjc1CisJ ICogMDAxMTAwMCAgMy4zMDAgICAgMDExMTAwMCAgNC4xMDAgICAgMTAxMTAwMCAgNC45MDAgCSAx MTExMDAwICA1LjcwMAorCSAqIDAwMTEwMDEgIDMuMzI1ICAgIDAxMTEwMDEgIDQuMTI1ICAgIDEw MTEwMDEgIDQuOTI1IAkgMTExMTAwMSAgNS43MjUKKwkgKiAwMDExMDEwICAzLjM1MCAgICAwMTEx MDEwICA0LjE1MCAgICAxMDExMDEwICA0Ljk1MCAJIDExMTEwMTAgIDUuNzUwCisJICogMDAxMTAx MSAgMy4zNzUgICAgMDExMTAxMSAgNC4xNzUgICAgMTAxMTAxMSAgNC45NzUgCSAxMTExMDExICA1 Ljc3NQorCSAqIDAwMTExMDAgIDMuNDAwICAgIDAxMTExMDAgIDQuMjAwICAgIDEwMTExMDAgIDUu MDAwIAkgMTExMTEwMCAgNS44MDAKKwkgKiAwMDExMTAxICAzLjQyNSAgICAwMTExMTAxICA0LjIy NSAgICAxMDExMTAxICA1LjAyNSAJIDExMTExMDEgIDUuODI1CisJICogMDAxMTExMCAgMy40NTAg ICAgMDExMTExMCAgNC4yNTAgICAgMTAxMTExMCAgNS4wNTAgCSAxMTExMTEwICA1Ljg1MAorCSAq IDAwMTExMTEgIDMuNDc1ICAgIDAxMTExMTEgIDQuMjc1ICAgIDEwMTExMTEgIDUuMDc1ICAgIDEx MTExMTEgIDUuODc1CisJICoKKwkgKiBWTUxbNjowXSA6IFNldCB0aGUgVkNPTUwgdm9sdGFnZQor CSAqCisJICogVk1MWzY6MF0gVkNPTUwoVikgVk1MWzY6MF0gVkNPTUwoVikgVk1MWzY6MF0gVkNP TUwoVikgVk1MWzY6MF0gVkNPTUwKKwkgKiAwMDAwMDAwIC0yLjUwMCAwMTAwMDAwIC0xLjcwMCAx MDAwMDAwIC0wLjkwMCAxMTAwMDAwIC0wLjEwMAorCSAqIDAwMDAwMDEgLTIuNDc1IDAxMDAwMDEg LTEuNjc1IDEwMDAwMDEgLTAuODc1IDExMDAwMDEgLTAuMDc1CisJICogMDAwMDAxMCAtMi40NTAg MDEwMDAxMCAtMS42NTAgMTAwMDAxMCAtMC44NTAgMTEwMDAxMCAtMC4wNTAKKwkgKiAwMDAwMDEx IC0yLjQyNSAwMTAwMDExIC0xLjYyNSAxMDAwMDExIC0wLjgyNSAxMTAwMDExIC0wLjAyNQorCSAq IDAwMDAxMDAgLTIuNDAwIDAxMDAxMDAgLTEuNjAwIDEwMDAxMDAgLTAuODAwIDExMDAxMDAgMAor CSAqIDAwMDAxMDEgLTIuMzc1IDAxMDAxMDEgLTEuNTc1IDEwMDAxMDEgLTAuNzc1IDExMDAxMDEg UmVzZXJ2ZWQKKwkgKiAwMDAwMTEwIC0yLjM1MCAwMTAwMTEwIC0xLjU1MCAxMDAwMTEwIC0wLjc1 MCAxMTAwMTEwIFJlc2VydmVkCisJICogMDAwMDExMSAtMi4zMjUgMDEwMDExMSAtMS41MjUgMTAw MDExMSAtMC43MjUgMTEwMDExMSBSZXNlcnZlZAorCSAqIDAwMDEwMDAgLTIuMzAwIDAxMDEwMDAg LTEuNTAwIDEwMDEwMDAgLTAuNzAwIDExMDEwMDAgUmVzZXJ2ZWQKKwkgKiAwMDAxMDAxIC0yLjI3 NSAwMTAxMDAxIC0xLjQ3NSAxMDAxMDAxIC0wLjY3NSAxMTAxMDAxIFJlc2VydmVkCisJICogMDAw MTAxMCAtMi4yNTAgMDEwMTAxMCAtMS40NTAgMTAwMTAxMCAtMC42NTAgMTEwMTAxMCBSZXNlcnZl ZAorCSAqIDAwMDEwMTEgLTIuMjI1IDAxMDEwMTEgLTEuNDI1IDEwMDEwMTEgLTAuNjI1IDExMDEw MTEgUmVzZXJ2ZWQKKwkgKiAwMDAxMTAwIC0yLjIwMCAwMTAxMTAwIC0xLjQwMCAxMDAxMTAwIC0w LjYwMCAxMTAxMTAwIFJlc2VydmVkCisJICogMDAwMTEwMSAtMi4xNzUgMDEwMTEwMSAtMS4zNzUg MTAwMTEwMSAtMC41NzUgMTEwMTEwMSBSZXNlcnZlZAorCSAqIDAwMDExMTAgLTIuMTUwIDAxMDEx MTAgLTEuMzUwIDEwMDExMTAgLTAuNTUwIDExMDExMTAgUmVzZXJ2ZWQKKwkgKiAwMDAxMTExIC0y LjEyNSAwMTAxMTExIC0xLjMyNSAxMDAxMTExIC0wLjUyNSAxMTAxMTExIFJlc2VydmVkCisJICog MDAxMDAwMCAtMi4xMDAgMDExMDAwMCAtMS4zMDAgMTAxMDAwMCAtMC41MDAgMTExMDAwMCBSZXNl cnZlZAorCSAqIDAwMTAwMDEgLTIuMDc1IDAxMTAwMDEgLTEuMjc1IDEwMTAwMDEgLTAuNDc1IDEx MTAwMDEgUmVzZXJ2ZWQKKwkgKiAwMDEwMDEwIC0yLjA1MCAwMTEwMDEwIC0xLjI1MCAxMDEwMDEw IC0wLjQ1MCAxMTEwMDEwIFJlc2VydmVkCisJICogMDAxMDAxMSAtMi4wMjUgMDExMDAxMSAtMS4y MjUgMTAxMDAxMSAtMC40MjUgMTExMDAxMSBSZXNlcnZlZAorCSAqIDAwMTAxMDAgLTIuMDAwIDAx MTAxMDAgLTEuMjAwIDEwMTAxMDAgLTAuNDAwIDExMTAxMDAgUmVzZXJ2ZWQKKwkgKiAwMDEwMTAx IC0xLjk3NSAwMTEwMTAxIC0xLjE3NSAxMDEwMTAxIC0wLjM3NSAxMTEwMTAxIFJlc2VydmVkCisJ ICogMDAxMDExMCAtMS45NTAgMDExMDExMCAtMS4xNTAgMTAxMDExMCAtMC4zNTAgMTExMDExMCBS ZXNlcnZlZAorCSAqIDAwMTAxMTEgLTEuOTI1IDAxMTAxMTEgLTEuMTI1IDEwMTAxMTEgLTAuMzI1 IDExMTAxMTEgUmVzZXJ2ZWQKKwkgKiAwMDExMDAwIC0xLjkwMCAwMTExMDAwIC0xLjEwMCAxMDEx MDAwIC0wLjMwMCAxMTExMDAwIFJlc2VydmVkCisJICogMDAxMTAwMSAtMS44NzUgMDExMTAwMSAt MS4wNzUgMTAxMTAwMSAtMC4yNzUgMTExMTAwMSBSZXNlcnZlZAorCSAqIDAwMTEwMTAgLTEuODUw IDAxMTEwMTAgLTEuMDUwIDEwMTEwMTAgLTAuMjUwIDExMTEwMTAgUmVzZXJ2ZWQKKwkgKiAwMDEx MDExIC0xLjgyNSAwMTExMDExIC0xLjAyNSAxMDExMDExIC0wLjIyNSAxMTExMDExIFJlc2VydmVk CisJICogMDAxMTEwMCAtMS44MDAgMDExMTEwMCAtMS4wMDAgMTAxMTEwMCAtMC4yMDAgMTExMTEw MCBSZXNlcnZlZAorCSAqIDAwMTExMDEgLTEuNzc1IDAxMTExMDEgLTAuOTc1IDEwMTExMDEgLTAu MTc1IDExMTExMDEgUmVzZXJ2ZWQKKwkgKiAwMDExMTEwIC0xLjc1MCAwMTExMTEwIC0wLjk1MCAx MDExMTEwIC0wLjE1MCAxMTExMTEwIFJlc2VydmVkCisJICogMDAxMTExMSAtMS43MjUgMDExMTEx MSAtMC45MjUgMTAxMTExMSAtMC4xMjUgMTExMTExMSBSZXNlcnZlZAorCSAqLworCXU4IHZjb21f MVtJTEk5MzQxX1ZDT01fMV9MRU5dOworCS8qCisJICogVkNPTSBDb250cm9sIDIoQzdoKQorCSAq CisJICogQzdoCQlWTUNUUkwxIChWQ09NIENvbnRyb2wgMSkKKwkgKgkJRC9DWCBSRFggV1JYIEQx Ny04IEQ3ICBENiAgRDUgRDQgRDMgRDIgRDEgRDAgSEVYCisJICogQ29tbWFuZCAJMCAgICAxICAg TSAgIFhYICAgIDEgICAxICAgMCAgMCAgMCAgMSAgMSAgMSAgQzdoCisJICogUGFyYW1ldGVyIAkx ICAgIDEgICBNICAgWFggICAgblZNIFZNRls2OjBdICAgICAgICAgICAgICBDMAorCSAqCisJICog blZNOiBuVk0gZXF1YWxzIHRvIOKAnDDigJ0gYWZ0ZXIgcG93ZXIgb24gcmVzZXQgYW5kIFZDT00g b2Zmc2V0CisJICogZXF1YWxzIHRvIHByb2dyYW0gTVRQIHZhbHVlLiBXaGVuIG5WTSBzZXQgdG8g 4oCcMeKAnSwgc2V0dGluZworCSAqIG9mIFZNRiBbNjowXSBiZWNvbWVzIHZhbGlkIGFuZCBWQ09N SC9WQ09NTCBjYW4gYmUgYWRqdXN0ZWQuCisJICoKKwkgKiBWTUYgWzY6MF06IFNldCB0aGUgVkNP TSBvZmZzZXQgdm9sdGFnZS4KKwkgKi8KKwl1OCB2Y29tXzI7CisJLyoKKwkgKiBNZW1vcnkgQWNj ZXNzIENvbnRyb2wgKDM2aCkKKwkgKgorCSAqIDM2aCAJCU1BRENUTCAoTWVtb3J5IEFjY2VzcyBD b250cm9sKQorCSAqIAkJRC9DWCBSRFggV1JYIEQxNy04IEQ3IEQ2IEQ1IEQ0IEQzICBEMiBEMSBE MCBIRVgKKwkgKiBDb21tYW5kIAkwICAgIDEgICBNICAgWFggICAgMCAgMCAgMSAgMSAgMCAgIDEg IDEgIDAgIDM2aAorCSAqIFBhcmFtZXRlciAJMSAgICAxICAgTSAgIFhYICAgIE1ZIE1YIE1WIE1M IEJHUiBNSCAwICAwICAwMAorCSAqCisJICogVGhpcyBjb21tYW5kIGRlZmluZXMgcmVhZC93cml0 ZSBzY2FubmluZyBkaXJlY3Rpb24gb2YgZnJhbWUgbWVtb3J5LgorCSAqIFRoaXMgY29tbWFuZCBt YWtlcyBubyBjaGFuZ2Ugb24gdGhlIG90aGVyIGRyaXZlciBzdGF0dXMuCisJICoKKwkgKiBCaXQg IE5hbWUgCQkJIERlc2NyaXB0aW9uCisJICogTVkgICBSb3cgQWRkcmVzcyBPcmRlcgorCSAqIE1Y ICAgQ29sdW1uIEFkZHJlc3MgT3JkZXIKKwkgKiBNViAJUm93IC8gQ29sdW1uIEV4Y2hhbmdlIAkg VGhlc2UgMyBiaXRzIGNvbnRyb2wgTUNVIHRvIG1lbW9yeQorCSAqIAkJCQkgd3JpdGUvcmVhZCBk aXJlY3Rpb24uCisJICogTUwgCVZlcnRpY2FsIFJlZnJlc2ggT3JkZXIgCSBMQ0QgdmVydGljYWwg cmVmcmVzaCBkaXJlY3Rpb24gY29udHJvbC4KKwkgKiBCR1IgCVJHQi1CR1IgT3JkZXIJCSBDb2xv ciBzZWxlY3RvciBzd2l0Y2ggY29udHJvbAorCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICgwPVJHQiBjb2xvciBmaWx0ZXIgcGFuZWwsIDE9QkdSCisJICogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29sb3IgZmlsdGVyIHBhbmVsKQorCSAqIE1IIAlIb3Jpem9udGFsIFJl ZnJlc2ggT1JERVIgTENEIGhvcml6b250YWwgcmVmcmVzaGluZworCSAqIGRpcmVjdGlvbiBjb250 cm9sLgorCSAqCisJICogTm90ZTogV2hlbiBCR1IgYml0IGlzIGNoYW5nZWQsIHRoZSBuZXcgc2V0 dGluZyBpcyBhY3RpdmUKKwkgKiBpbW1lZGlhdGVseSB3aXRob3V0IHVwZGF0ZSB0aGUgY29udGVu dCBpbiBGcmFtZSBNZW1vcnkgYWdhaW4uCisJICoKKwkgKi8KKwl1OCBhZGRyZXNzX21vZGU7CisJ LyogVE9ETzogbmVlZCBjb21tZW50cyBmb3IgdGhpcyByZWdpc3RlciAqLworCXU4IGczYW1tYV9l bjsKKwkvKiBSR0IgSW50ZXJmYWNlIFNpZ25hbCBDb250cm9sIChCMGgpCisJICoKKwkgKiBCMGgg CQlJRk1PREUgKEludGVyZmFjZSBNb2RlIENvbnRyb2wpCisJICogCQlEL0NYIFJEWCBXUlggRDE3 LTggRDcgCSAgICAgICBENiAgICAgRDUgICAgIEQ0IEQzICAgRDIgICBEMSAgRDAgIEhFWAorCSAq IENvbW1hbmQgCTAgICAgMSAgIE0gICBYWCAgICAxIAkgICAgICAgMCAgICAgIDEgICAgICAxICAw ICAgIDAgICAgMCAgIDAgICBCMGgKKwkgKiBQYXJhbWV0ZXIgCTEgICAgMSAgIE0gICBYWCAgICBC eVBhc3NfTU9ERSBSQ01bMV0gUkNNWzBdIDAgIFZTUEwgSFNQTCBEUEwgRVBMIDQwCisJICoKKwkg KiBTZXRzIHRoZSBvcGVyYXRpb24gc3RhdHVzIG9mIHRoZSBkaXNwbGF5IGludGVyZmFjZS4gVGhl IHNldHRpbmcKKwkgKiBiZWNvbWVzIGVmZmVjdGl2ZSBhcyBzb29uIGFzIHRoZSBjb21tYW5kIGlz IHJlY2VpdmVkLgorCSAqIEVQTDogREUgcG9sYXJpdHkgKOKAnDDigJ09IEhpZ2ggZW5hYmxlIGZv ciBSR0IgaW50ZXJmYWNlLCDigJwx4oCdPSBMb3cKKwkgKiBlbmFibGUgZm9yIFJHQiBpbnRlcmZh Y2UpCisJICoKKwkgKiBEUEw6IERPVENMSyBwb2xhcml0eSBzZXQgKOKAnDDigJ09IGRhdGEgZmV0 Y2hlZCBhdCB0aGUgcmlzaW5nIHRpbWUsCisJICog4oCcMeKAnT0gZGF0YSBmZXRjaGVkIGF0IHRo ZSBmYWxsaW5nIHRpbWUpCisJICoKKwkgKiBIU1BMOiBIU1lOQyBwb2xhcml0eSAo4oCcMOKAnT0g TG93IGxldmVsIHN5bmMgY2xvY2ssIOKAnDHigJ09IEhpZ2gKKwkgKiBsZXZlbCBzeW5jIGNsb2Nr KQorCSAqCisJICogVlNQTDogVlNZTkMgcG9sYXJpdHkgKOKAnDDigJ09IExvdyBsZXZlbCBzeW5j IGNsb2NrLCDigJwx4oCdPSBIaWdoCisJICogbGV2ZWwgc3luYyBjbG9jaykKKwkgKgorCSAqIFJD TSBbMTowXTogUkdCIGludGVyZmFjZSBzZWxlY3Rpb24gKHJlZmVyIHRvIHRoZSBSR0IgaW50ZXJm YWNlCisJICogc2VjdGlvbikuCisJICoKKwkgKiBCeVBhc3NfTU9ERTogU2VsZWN0IGRpc3BsYXkg ZGF0YSBwYXRoIHdoZXRoZXIgTWVtb3J5IG9yIERpcmVjdCB0bworCSAqIFNoaWZ0IHJlZ2lzdGVy IHdoZW4gUkdCIEludGVyZmFjZSBpcyB1c2VkLgorCSAqCisJICogQnlQYXNzX01PREUgCURpc3Bs YXkgRGF0YSBQYXRoCisJICogMCAJCURpcmVjdCB0byBTaGlmdCBSZWdpc3RlciAoZGVmYXVsdCkK KwkgKiAxIAkJTWVtb3J5CisJICovCisJdTggcmdiX2ludGVyZmFjZTsKKwkvKiByZWZlciB0byBk ZmNfMSAqLworCXU4IGRmY18yW0lMSTkzNDFfREZDXzJfTEVOXTsKKwkvKgorCSAqIENvbHVtbiBB ZGRyZXNzIFNldCAoMkFoKQorCSAqIFRoaXMgY29tbWFuZCBpcyB1c2VkIHRvIGRlZmluZSBhcmVh IG9mIGZyYW1lIG1lbW9yeSB3aGVyZSBNQ1UgY2FuCisJICogYWNjZXNzLiBUaGlzIGNvbW1hbmQg bWFrZXMgbm8gY2hhbmdlIG9uIHRoZQorCSAqIG90aGVyIGRyaXZlciBzdGF0dXMuIFRoZSB2YWx1 ZXMgb2YgU0MgWzE1OjBdIGFuZCBFQyBbMTU6MF0gYXJlCisJICogcmVmZXJyZWQgd2hlbiBSQU1X UiBjb21tYW5kIGNvbWVzLiBFYWNoIHZhbHVlCisJICogcmVwcmVzZW50cyBvbmUgY29sdW1uIGxp bmUgaW4gdGhlIEZyYW1lIE1lbW9yeS4KKwkgKi8KKwl1OCBjb2x1bW5fYWRkcltJTEk5MzQxX0NP TFVNTl9BRERSX0xFTl07CisJLyoKKwkgKiBQYWdlIEFkZHJlc3MgU2V0ICgyQmgpCisJICogVGhp cyBjb21tYW5kIGlzIHVzZWQgdG8gZGVmaW5lIGFyZWEgb2YgZnJhbWUgbWVtb3J5IHdoZXJlIE1D VSBjYW4KKwkgKiBhY2Nlc3MuIFRoaXMgY29tbWFuZCBtYWtlcyBubyBjaGFuZ2Ugb24gdGhlCisJ ICogb3RoZXIgZHJpdmVyIHN0YXR1cy4gVGhlIHZhbHVlcyBvZiBTUCBbMTU6MF0gYW5kIEVQIFsx NTowXSBhcmUKKwkgKiByZWZlcnJlZCB3aGVuIFJBTVdSIGNvbW1hbmQgY29tZXMuIEVhY2ggdmFs dWUKKwkgKiByZXByZXNlbnRzIG9uZSBQYWdlIGxpbmUgaW4gdGhlIEZyYW1lIE1lbW9yeS4KKwkg Ki8KKwl1OCBwYWdlX2FkZHJbSUxJOTM0MV9QQUdFX0FERFJfTEVOXTsKKwkvKgorCSAqIEludGVy ZmFjZSBDb250cm9sIChGNmgpCisJICoKKwkgKiBGNmggCQlJRkNUTCAoMTZiaXRzIERhdGEgRm9y bWF0IFNlbGVjdGlvbikKKwkgKiAJICAgICAgICBEL0NYIFJEWCBXUlggRDE3LTggRDcgICBENiAg IEQ1ICAgICBENCAgICAgRDMgICAgICBEMiAgICAgRDEgICAgIEQwICAgICAgSEVYCisJICogQ29t bWFuZCAgICAgIDAgICAgMSAgIE0gICBYWCAgICAxICAgIDEgICAgMSAgICAgIDEgICAgICAwICAg ICAgIDEgICAgICAxICAgICAgMCAgICAgICBGNmgKKwkgKiAxc3RQYXJhbWV0ZXIgMSAgICAxICAg TSAgIFhYICAgIE1ZICAgTVggICBNVgorCSAqIAkJCQkgICBfRU9SIF9FT1IgX0VPUiAgIDAgICAg ICBCR1JfRU9SIDAgICAgICAwICAgICAgV0UgTU9ERSAwMQorCSAqIDJuZFBhcmFtZXRlciAxICAg IDEgICBNICAgWFggICAgMCAgICAwICAgIEVQRlsxXSBFUEZbMF0gMCAgICAgICAwICAgICAgTURU WzFdIE1EVFswXSAgMDAKKwkgKiAzcmRQYXJhbWV0ZXIgMSAgICAxICAgTSAgIFhYICAgIDAgICAg MCAgICBFTkRJQU4gMCAgICAgIERNWzFdICAgRE1bMF0gIFJNICAgICBSSU0gICAgIDAwCisJICoK KwkgKi8KKwl1OCBpbnRlcmZhY2VbSUxJOTM0MV9JTlRFUkZBQ0VfTEVOXTsKKwkvKgorCSAqIFRo aXMgY29tbWFuZCBzZXRzIHRoZSBwaXhlbCBmb3JtYXQgZm9yIHRoZSBSR0IgaW1hZ2UgZGF0YSB1 c2VkIGJ5CisJICogdGhlIGludGVyZmFjZS4gRFBJIFsyOjBdIGlzIHRoZSBwaXhlbCBmb3JtYXQg c2VsZWN0IG9mIFJHQgorCSAqIGludGVyZmFjZSBhbmQgREJJIFsyOjBdIGlzIHRoZSBwaXhlbCBm b3JtYXQgb2YgTUNVIGludGVyZmFjZS4gSWYgYQorCSAqIHBhcnRpY3VsYXIgaW50ZXJmYWNlLCBl aXRoZXIgUkdCIGludGVyZmFjZSBvciBNQ1UgaW50ZXJmYWNlLCBpcworCSAqIG5vdCB1c2VkIHRo ZW4gdGhlIGNvcnJlc3BvbmRpbmcgYml0cyBpbiB0aGUgcGFyYW1ldGVyIGFyZSBpZ25vcmVkLgor CSAqIFRoZSBwaXhlbCBmb3JtYXQgaXMgc2hvd24gaW4gdGhlIHRhYmxlIGJlbG93LgorCSAqCisJ ICogRFBJWzI6MF0gCVJHQiBJbnRlcmZhY2UgRm9ybWF0IAlEQklbMjowXSBNQ1UgSW50ZXJmYWNl IEZvcm1hdAorCSAqIDAgMCAwIAlSZXNlcnZlZCAJCTAgMCAwIAkgUmVzZXJ2ZWQKKwkgKiAwIDAg MSAJUmVzZXJ2ZWQgCQkwIDAgMSAJIFJlc2VydmVkCisJICogMCAxIDAgCVJlc2VydmVkIAkJMCAx IDAgCSBSZXNlcnZlZAorCSAqIDAgMSAxIAlSZXNlcnZlZCAJCTAgMSAxIAkgUmVzZXJ2ZWQKKwkg KiAxIDAgMCAJUmVzZXJ2ZWQgCQkxIDAgMCAgCSBSZXNlcnZlZAorCSAqIDEgMCAxIAkxNiBiaXRz IC8gcGl4ZWwgCTEgMCAxICAgIDE2IGJpdHMgLyBwaXhlbAorCSAqIDEgMSAwIAkxOCBiaXRzIC8g cGl4ZWwgCTEgMSAwIAkgMTggYml0cyAvIHBpeGVsCisJICogMSAxIDEgCVJlc2VydmVkIAkJMSAx IDEgCSBSZXNlcnZlZAorCSAqCisJICovCisJdTggcGl4ZWxfZm9ybWF0OworCS8qCisJICogVGhp cyBjb21tYW5kIGlzIHVzZWQgdG8gc2VsZWN0IHRoZSBkZXNpcmVkIEdhbW1hIGN1cnZlIGZvciB0 aGUKKwkgKiBjdXJyZW50IGRpc3BsYXkuIEEgbWF4aW11bSBvZiA0IGZpeGVkIGdhbW1hIGN1cnZl cyBjYW4KKwkgKiBiZSBzZWxlY3RlZC4gVGhlIGN1cnZlIGlzIHNlbGVjdGVkIGJ5IHNldHRpbmcg dGhlIGFwcHJvcHJpYXRlIGJpdAorCSAqIGluIHRoZSBwYXJhbWV0ZXIgYXMgZGVzY3JpYmVkIGlu IHRoZSBUYWJsZToKKwkgKgorCSAqIEdDIFs3OjBdIAlDdXJ2ZSBTZWxlY3RlZAorCSAqIDAxaCAJ CUdhbW1hIGN1cnZlIDEgKEcyLjIpCisJICogMDJoIAkJLS0tCisJICogMDRoIAkJLS0tCisJICog MDhoIAkJLS0tCisJICovCisJdTggZ2FtbWFfY3VydmU7CisJLyoKKwkgKiBQb3NpdGl2ZSBHYW1t YSBDb3JyZWN0aW9uIChFMGgpCisJICoKKwkgKiBTZXQgdGhlIGdyYXkgc2NhbGUgdm9sdGFnZSB0 byBhZGp1c3QgdGhlIGdhbW1hIGNoYXJhY3RlcmlzdGljcyBvZgorCSAqIHRoZSBURlQgcGFuZWwu CisJICovCisJdTggcGdhbW1hW0lMSTkzNDFfUEdBTU1BX0xFTl07CisJLyoKKwkgKiBOZWdhdGl2 ZSBHYW1tYSBDb3JyZWN0aW9uIChFMWgpCisJICoKKwkgKiBTZXQgdGhlIGdyYXkgc2NhbGUgdm9s dGFnZSB0byBhZGp1c3QgdGhlIGdhbW1hIGNoYXJhY3RlcmlzdGljcyBvZgorCSAqIHRoZSBURlQg cGFuZWwuCisJICovCisJdTggbmdhbW1hW0lMSTkzNDFfTkdBTU1BX0xFTl07Cit9OworCitzdHJ1 Y3QgaWxpOTM0MSB7CisJc3RydWN0IGRldmljZSAqZGV2OworCWNvbnN0IHN0cnVjdCBpbGk5MzQx X2NvbmZpZyAqY29uZjsKKwlzdHJ1Y3QgZHJtX3BhbmVsIHBhbmVsOworCXN0cnVjdCBncGlvX2Rl c2MgKnJlc2V0X2dwaW87CisJc3RydWN0IGdwaW9fZGVzYyAqZGNfZ3BpbzsKKwl1MzIgbWF4X3Nw aV9zcGVlZDsKKwlzdHJ1Y3QgcmVndWxhdG9yICp2Y2M7Cit9OworCisvKgorICogVGhlIFN0bTMy ZjQyOS1kaXNjbyBib2FyZCBoYXMgYSBwYW5lbCBpbGk5MzQxIGNvbm5lY3RlZCB0byBsdGRjIGNv bnRyb2xsZXIKKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBpbGk5MzQxX2NvbmZpZyBpbGk5MzQx X3N0bTMyZjQyOV9kaXNjb19kYXRhID0geworCS5tYXhfc3BpX3NwZWVkID0gMTAwMDAwMDAsCisJ Lm1vZGUgPSB7CisJCS5jbG9jayA9IDYxMDAsCisJCS5oZGlzcGxheSA9IDI0MCwKKwkJLmhzeW5j X3N0YXJ0ID0gMjQwICsgMTAsLyogaGZwIDEwICovCisJCS5oc3luY19lbmQgPSAyNDAgKyAxMCAr IDEwLC8qIGhzeW5jIDEwICovCisJCS5odG90YWwgPSAyNDAgKyAxMCArIDEwICsgMjAsLyogaGJw IDIwICovCisJCS52ZGlzcGxheSA9IDMyMCwKKwkJLnZzeW5jX3N0YXJ0ID0gMzIwICsgNCwvKiB2 ZnAgNCAqLworCQkudnN5bmNfZW5kID0gMzIwICsgNCArIDIsLyogdnN5bmMgMiAqLworCQkudnRv dGFsID0gMzIwICsgNCArIDIgKyAyLC8qIHZicCAyICovCisJCS52cmVmcmVzaCA9IDYwLAorCQku ZmxhZ3MgPSAwLAorCQkud2lkdGhfbW0gPSA2NSwKKwkJLmhlaWdodF9tbSA9IDUwLAorCQkudHlw ZSA9IERSTV9NT0RFX1RZUEVfRFJJVkVSIHwgRFJNX01PREVfVFlQRV9QUkVGRVJSRUQsCisJfSwK KwkvKiBUT0RPOiBuZWVkIGNvbW1lbnRzIGZvciB0aGlzIHJlZ2lzdGVyICovCisJLmNhID0gezB4 YzMsIDB4MDgsIDB4NTB9LAorCS8qIFRPRE86IG5lZWQgY29tbWVudHMgZm9yIHRoaXMgcmVnaXN0 ZXIgKi8KKwkucG93ZXJfYiA9IHsweDAwLCAweGMxLCAweDMwfSwKKwkvKiBUT0RPOiBuZWVkIGNv bW1lbnRzIGZvciB0aGlzIHJlZ2lzdGVyICovCisJLnBvd2VyX3NlcSA9IHsweDY0LCAweDAzLCAw eDEyLCAweDgxfSwKKwkvKiBUT0RPOiBuZWVkIGNvbW1lbnRzIGZvciB0aGlzIHJlZ2lzdGVyICov CisJLmR0Y2EgPSB7MHg4NSwgMHgwMCwgMHg3OH0sCisJLyogVE9ETzogbmVlZCBjb21tZW50cyBm b3IgdGhpcyByZWdpc3RlciAqLworCS5wb3dlcl9hID0gezB4MzksIDB4MmMsIDB4MDAsIDB4MzQs IDB4MDJ9LAorCS8qIFRPRE86IG5lZWQgY29tbWVudHMgZm9yIHRoaXMgcmVnaXN0ZXIgKi8KKwku cHJjID0gMHgyMCwKKwkvKiBUT0RPOiBuZWVkIGNvbW1lbnRzIGZvciB0aGlzIHJlZ2lzdGVyICov CisJLmR0Y2IgPSB7MHgwMCwgMHgwMH0sCisJLyogMHgwMCBmb3NjLCAweDFiIDcwaHogKi8KKwku ZnJjID0gezB4MDAsIDB4MWJ9LAorCS8qIDB4MGEgSW50ZXJ2YWwgc2NhbiwgQUdORCBBR05EIEFH TkQgQUdORAorCSAqIDB4YTIgTm9ybWFsbHkgd2hpdGUsIEcxIC0+IEczMjAsIFM3MjAgLT4gUzEs CisJICoJU2NhbiBDeWNsZSA1IGZyYW1lcyw4NW1zCisJICovCisJLmRmY18xID0gezB4MGEsIDB4 YTJ9LAorCS8qIDB4MTAgMy42NXYgKi8KKwkucG93ZXJfMSA9IDB4MTAsCisJLyogMHgxMCBBVkRE PXZjaSoyLCBWR0g9dmNpKjcsIFZHTD0tdmNpKjQgKi8KKwkucG93ZXJfMiA9IDB4MTAsCisJLyog MHg0NSBWQ09NSCA0LjQyNXYsIDB4MTUgVkNPTUwgLTEuOTc1Ki8KKwkudmNvbV8xID0gezB4NDUs IDB4MTV9LAorCS8qIDB4OTAgb2Zmc2V0IHZvbHRhZ2UsIFZNSC00OCwgVk1MLTQ4ICovCisJLnZj b21fMiA9IDB4OTAsCisJLyogMHhjOCBSb3cgQWRkcmVzcyBPcmRlciwgQ29sdW1uIEFkZHJlc3Mg T3JkZXIKKwkgKiAJQkdSIDEKKwkgKi8KKwkuYWRkcmVzc19tb2RlID0gMHhjOCwKKwkuZzNhbW1h X2VuID0gMHgwMCwKKwkvKiAweGMyCisJICogRGlzcGxheSBEYXRhIFBhdGg6IE1lbW9yeQorCSAq IFJHQjogREUgbW9kZQorCSAqIERPVENMSyBwb2xhcml0eSBzZXQgKGRhdGEgZmV0Y2hlZCBhdCB0 aGUgZmFsbGluZyB0aW1lKQorCSAqLworCS5yZ2JfaW50ZXJmYWNlID0gSUxJOTM0MV9SR0JfRElT UF9QQVRIX01FTSB8CisJCQlJTEk5MzQxX1JHQl9ERV9NT0RFIHwKKwkJCUlMSTkzNDFfUkdCX0RQ TCwKKwkvKgorCSAqIDB4MGEKKwkgKiBHYXRlIG91dHB1dHMgaW4gbm9uLWRpc3BsYXkgYXJlYTog SW50ZXJ2YWwgc2NhbgorCSAqIERldGVybWluZSBzb3VyY2UvVkNPTSBvdXRwdXQgaW4gYSBub24t ZGlzcGxheSBhcmVhIGluIHRoZSBwYXJ0aWFsCisJICogZGlzcGxheSBtb2RlOiBBR05EIEFHTkQg QUdORCBBR05ECisJICoKKwkgKiAweGE3CisJICogU2NhbiBDeWNsZTogMTUgZnJhbWVzCisJICog ZkZMTSA9IDYwSHo6IDI1NW1zCisJICogTGlxdWlkIGNyeXN0YWwgdHlwZTogTm9ybWFsbHkgd2hp dGUKKwkgKiBHYXRlIE91dHB1dCBTY2FuIERpcmVjdGlvbjogRzEgLT4gRzMyMAorCSAqIFNvdXJj ZSBPdXRwdXQgU2NhbiBEaXJlY3Rpb246IFM3MjAgLT4gUzEKKwkgKgorCSAqIDB4MjcKKwkgKiBM Q0QgRHJpdmVyIExpbmU6IDMyMCBsaW5lcworCSAqCisJICogMHgwNAorCSAqIFBDRElWOiA0CisJ ICovCisJLmRmY18yID0gezB4MGEsIDB4YTcsIDB4MjcsIDB4MDR9LAorCS8qIGNvbHVtbiBhZGRy ZXNzOiAyNDAgKi8KKwkuY29sdW1uX2FkZHIgPSB7MHgwMCwgMHgwMCwgKElMSTkzNDFfQ09MVU1O X0FERFIgPj4gNCkgJiAweGZmLAorCQkJCUlMSTkzNDFfQ09MVU1OX0FERFIgJiAweGZmfSwKKwkv KiBwYWdlIGFkZHJlc3M6IDMyMCAqLworCS5wYWdlX2FkZHIgPSB7MHgwMCwgMHgwMCwgKElMSTkz NDFfUEFHRV9BRERSID4+IDQpICYgMHhmZiwKKwkJCQlJTEk5MzQxX1BBR0VfQUREUiAmIDB4ZmZ9 LAorCS8qIE1lbW9yeSB3cml0ZSBjb250cm9sOiBXaGVuIHRoZSB0cmFuc2ZlciBudW1iZXIgb2Yg ZGF0YSBleGNlZWRzCisJICogKEVDLVNDKzEpKihFUC1TUCsxKSwgdGhlIGNvbHVtbiBhbmQgcGFn ZSBudW1iZXIgd2lsbCBiZQorCSAqIHJlc2V0LCBhbmQgdGhlIGV4Y2VlZGluZyBkYXRhIHdpbGwg YmUgd3JpdHRlbiBpbnRvIHRoZSBmb2xsb3dpbmcKKwkgKiBjb2x1bW4gYW5kIHBhZ2UuCisJICog RGlzcGxheSBPcGVyYXRpb24gTW9kZTogUkdCIEludGVyZmFjZSBNb2RlCisJICogSW50ZXJmYWNl IGZvciBSQU0gQWNjZXNzOiBSR0IgaW50ZXJmYWNlCisJICogMTYtIGJpdCBSR0IgaW50ZXJmYWNl ICgxIHRyYW5zZmVyL3BpeGVsKQorCSAqLworCS5pbnRlcmZhY2UgPSB7SUxJOTM0MV9JRl9XRV9N T0RFLCAweDAwLAorCQkJSUxJOTM0MV9JRl9ETV9SR0IgfCBJTEk5MzQxX0lGX1JNX1JHQn0sCisJ LyogRFBJOiAxNiBiaXRzIC8gcGl4ZWwgKi8KKwkucGl4ZWxfZm9ybWF0ID0gSUxJOTM0MV9QSVhF TF9EUElfMTZfQklUUywKKwkvKiBDdXJ2ZSBTZWxlY3RlZDogR2FtbWEgY3VydmUgMSAoRzIuMikg Ki8KKwkuZ2FtbWFfY3VydmUgPSBJTEk5MzQxX0dBTU1BX0NVUlZFXzEsCisJLnBnYW1tYSA9IHsw eDBmLCAweDI5LCAweDI0LCAweDBjLCAweDBlLAorCQkJMHgwOSwgMHg0ZSwgMHg3OCwgMHgzYywg MHgwOSwKKwkJCTB4MTMsIDB4MDUsIDB4MTcsIDB4MTEsIDB4MDB9LAorCS5uZ2FtbWEgPSB7MHgw MCwgMHgxNiwgMHgxYiwgMHgwNCwgMHgxMSwKKwkJCTB4MDcsIDB4MzEsIDB4MzMsIDB4NDIsIDB4 MDUsCisJCQkweDBjLCAweDBhLCAweDI4LCAweDJmLCAweDBmfSwKK307CitzdGF0aWMgaW5saW5l IHN0cnVjdCBpbGk5MzQxICpwYW5lbF90b19pbGk5MzQxKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVs KQoreworCXJldHVybiBjb250YWluZXJfb2YocGFuZWwsIHN0cnVjdCBpbGk5MzQxLCBwYW5lbCk7 Cit9CisKK2ludCBpbGk5MzQxX3NwaV90cmFuc2ZlcihzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCB1 MzIgc3BlZWRfaHosCisJCQkgIHU4IGJwdywgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQor eworCXNpemVfdCBtYXhfY2h1bmsgPSBzcGlfbWF4X3RyYW5zZmVyX3NpemUoc3BpKTsKKwlzdHJ1 Y3Qgc3BpX3RyYW5zZmVyIHRyID0geworCQkuYml0c19wZXJfd29yZCA9IGJwdywKKwkJLnNwZWVk X2h6ID0gc3BlZWRfaHosCisJCS5sZW4gPSBsZW4sCisJfTsKKwlzdHJ1Y3Qgc3BpX21lc3NhZ2Ug bTsKKwlzaXplX3QgY2h1bms7CisJaW50IHJldDsKKworCXNwaV9tZXNzYWdlX2luaXRfd2l0aF90 cmFuc2ZlcnMoJm0sICZ0ciwgMSk7CisKKwl3aGlsZSAobGVuKSB7CisJCWNodW5rID0gbWluKGxl biwgbWF4X2NodW5rKTsKKworCQl0ci50eF9idWYgPSBidWY7CisJCXRyLmxlbiA9IGNodW5rOwor CQlidWYgKz0gY2h1bms7CisJCWxlbiAtPSBjaHVuazsKKworCQlyZXQgPSBzcGlfc3luYyhzcGks ICZtKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2Vycigmc3BpLT5kZXYsICJzcGlfc3luYyBlcnJv cjogJWRcbiIsIHJldCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCXJldHVybiAwOworfQor CitzdGF0aWMgaW50IF9pbGk5MzQxX2NvbW1hbmQoc3RydWN0IGlsaTkzNDEgKmlsaSwgdTggY21k LCBjb25zdCB2b2lkICpkYXRhLAorCQkJCSAgICBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHNw aV9kZXZpY2UgKnNwaSA9IHRvX3NwaV9kZXZpY2UoaWxpLT5kZXYpOworCWludCByZXQgPSAwOwor CisJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKGlsaS0+ZGNfZ3BpbywgMCk7CisKKwlyZXQgPSBp bGk5MzQxX3NwaV90cmFuc2ZlcihzcGksIGlsaS0+bWF4X3NwaV9zcGVlZCwgOCwKKwkJCQkJKGNv bnN0IHZvaWQgKikmY21kLCAxKTsKKwlpZiAocmV0IHx8IGRhdGEgPT0gTlVMTCB8fCBjb3VudCA9 PSAwKQorCQlyZXR1cm4gcmV0OworCisJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKGlsaS0+ZGNf Z3BpbywgMSk7CisKKwlyZXR1cm4gaWxpOTM0MV9zcGlfdHJhbnNmZXIoc3BpLCBpbGktPm1heF9z cGlfc3BlZWQsIDgsCisJCWRhdGEsIGNvdW50KTsKK30KKworc3RhdGljIGludCBpbGk5MzQxX2Rw aV9pbml0KHN0cnVjdCBpbGk5MzQxICppbGkpCit7CisJaW50IHJldDsKKwlyZXQgPSBfaWxpOTM0 MV9jb21tYW5kKGlsaSwgMHhjYSwKKwkJCWlsaS0+Y29uZi0+Y2EsCisJCQlJTEk5MzQxX0NBX0xF Tik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IF9pbGk5MzQxX2NvbW1hbmQo aWxpLCBJTEk5MzQxX1BPV0VSQiwKKwkJCWlsaS0+Y29uZi0+cG93ZXJfYiwKKwkJCUlMSTkzNDFf UE9XRVJfQl9MRU4pOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBfaWxpOTM0 MV9jb21tYW5kKGlsaSwgSUxJOTM0MV9QT1dFUl9TRVEsCisJCQlpbGktPmNvbmYtPnBvd2VyX3Nl cSwKKwkJCUlMSTkzNDFfUE9XRVJfU0VRX0xFTik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsK KworCXJldCA9IF9pbGk5MzQxX2NvbW1hbmQoaWxpLCBJTEk5MzQxX0RUQ0EsCisJCQlpbGktPmNv bmYtPmR0Y2EsCisJCQlJTEk5MzQxX0RUQ0FfTEVOKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0 OworCisJcmV0ID0gX2lsaTkzNDFfY29tbWFuZChpbGksIElMSTkzNDFfUE9XRVJBLAorCQkJaWxp LT5jb25mLT5wb3dlcl9hLAorCQkJSUxJOTM0MV9QT1dFUl9BX0xFTik7CisJaWYgKHJldCkKKwkJ cmV0dXJuIHJldDsKKworCXJldCA9IF9pbGk5MzQxX2NvbW1hbmQoaWxpLCBJTEk5MzQxX1BSQywK KwkJCSZpbGktPmNvbmYtPnByYywKKwkJCTEpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisK KwlyZXQgPSBfaWxpOTM0MV9jb21tYW5kKGlsaSwgSUxJOTM0MV9EVENCLAorCQkJaWxpLT5jb25m LT5kdGNiLAorCQkJSUxJOTM0MV9EVENCX0xFTik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsK KworCXJldCA9IF9pbGk5MzQxX2NvbW1hbmQoaWxpLCBJTEk5MzQxX0ZSQywKKwkJCWlsaS0+Y29u Zi0+ZnJjLAorCQkJSUxJOTM0MV9GUkNfTEVOKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0Owor CisJcmV0ID0gX2lsaTkzNDFfY29tbWFuZChpbGksIElMSTkzNDFfREZDLAorCQkJaWxpLT5jb25m LT5kZmNfMSwKKwkJCUlMSTkzNDFfREZDXzFfTEVOKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0 OworCisJcmV0ID0gX2lsaTkzNDFfY29tbWFuZChpbGksIElMSTkzNDFfUE9XRVIxLAorCQkJJmls aS0+Y29uZi0+cG93ZXJfMSwKKwkJCTEpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwly ZXQgPSBfaWxpOTM0MV9jb21tYW5kKGlsaSwgSUxJOTM0MV9QT1dFUjIsCisJCQkmaWxpLT5jb25m LT5wb3dlcl8yLAorCQkJMSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IF9p bGk5MzQxX2NvbW1hbmQoaWxpLCBJTEk5MzQxX1ZDT00xLAorCQkJaWxpLT5jb25mLT52Y29tXzEs CisJCQlJTEk5MzQxX1ZDT01fMV9MRU4pOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwly ZXQgPSBfaWxpOTM0MV9jb21tYW5kKGlsaSwgSUxJOTM0MV9WQ09NMiwKKwkJCSZpbGktPmNvbmYt PnZjb21fMiwKKwkJCTEpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBfaWxp OTM0MV9jb21tYW5kKGlsaSwgTUlQSV9EQ1NfU0VUX0FERFJFU1NfTU9ERSwKKwkJCSZpbGktPmNv bmYtPmFkZHJlc3NfbW9kZSwKKwkJCTEpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwly ZXQgPSBfaWxpOTM0MV9jb21tYW5kKGlsaSwgSUxJOTM0MV8zR0FNTUFfRU4sCisJCQkmaWxpLT5j b25mLT5nM2FtbWFfZW4sCisJCQkxKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0 ID0gX2lsaTkzNDFfY29tbWFuZChpbGksIElMSTkzNDFfUkdCX0lOVEVSRkFDRSwKKwkJCSZpbGkt PmNvbmYtPnJnYl9pbnRlcmZhY2UsCisJCQkxKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0Owor CisJcmV0ID0gX2lsaTkzNDFfY29tbWFuZChpbGksIElMSTkzNDFfREZDLAorCQkJaWxpLT5jb25m LT5kZmNfMiwKKwkJCUlMSTkzNDFfREZDXzJfTEVOKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0 OworCisJcmV0ID0gX2lsaTkzNDFfY29tbWFuZChpbGksIE1JUElfRENTX1NFVF9DT0xVTU5fQURE UkVTUywKKwkJCWlsaS0+Y29uZi0+Y29sdW1uX2FkZHIsCisJCQlJTEk5MzQxX0NPTFVNTl9BRERS X0xFTik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IF9pbGk5MzQxX2NvbW1h bmQoaWxpLCBNSVBJX0RDU19TRVRfUEFHRV9BRERSRVNTLAorCQkJaWxpLT5jb25mLT5wYWdlX2Fk ZHIsCisJCQlJTEk5MzQxX1BBR0VfQUREUl9MRU4pOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7 CisKKwlyZXQgPSBfaWxpOTM0MV9jb21tYW5kKGlsaSwgSUxJOTM0MV9JTlRFUkZBQ0UsCisJCQlp bGktPmNvbmYtPmludGVyZmFjZSwKKwkJCUlMSTkzNDFfSU5URVJGQUNFX0xFTik7CisJaWYgKHJl dCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IF9pbGk5MzQxX2NvbW1hbmQoaWxpLCBNSVBJX0RD U19TRVRfUElYRUxfRk9STUFULAorCQkJJmlsaS0+Y29uZi0+cGl4ZWxfZm9ybWF0LAorCQkJMSk7 CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGlsaTkzNDFfY29tbWFuZChpbGks IE1JUElfRENTX1dSSVRFX01FTU9SWV9TVEFSVCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsK KworCW1zbGVlcCgyMDApOworCXJldCA9IF9pbGk5MzQxX2NvbW1hbmQoaWxpLCBNSVBJX0RDU19T RVRfR0FNTUFfQ1VSVkUsCisJCQkmaWxpLT5jb25mLT5nYW1tYV9jdXJ2ZSwKKwkJCTEpOworCWlm IChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBfaWxpOTM0MV9jb21tYW5kKGlsaSwgSUxJ OTM0MV9QR0FNTUEsCisJCQlpbGktPmNvbmYtPnBnYW1tYSwKKwkJCUlMSTkzNDFfUEdBTU1BX0xF Tik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IF9pbGk5MzQxX2NvbW1hbmQo aWxpLCBJTEk5MzQxX05HQU1NQSwKKwkJCWlsaS0+Y29uZi0+bmdhbW1hLAorCQkJSUxJOTM0MV9O R0FNTUFfTEVOKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gaWxpOTM0MV9j b21tYW5kKGlsaSwgTUlQSV9EQ1NfRVhJVF9TTEVFUF9NT0RFKTsKKwlpZiAocmV0KQorCQlyZXR1 cm4gcmV0OworCisJbXNsZWVwKDIwMCk7CisJcmV0ID0gaWxpOTM0MV9jb21tYW5kKGlsaSwgTUlQ SV9EQ1NfU0VUX0RJU1BMQVlfT04pOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQg PSBpbGk5MzQxX2NvbW1hbmQoaWxpLCBNSVBJX0RDU19XUklURV9NRU1PUllfU1RBUlQpOworCWlm IChyZXQpCisJCXJldHVybiByZXQ7CisKKworCWRldl9pbmZvKGlsaS0+ZGV2LCAiaW5pdGlhbGl6 ZWQgZGlzcGxheSByZ2IgaW50ZXJmYWNlXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMg aW50IGlsaTkzNDFfZHBpX3Bvd2VyX29uKHN0cnVjdCBpbGk5MzQxICppbGkpCit7CisJaW50IHJl dCA9IDA7CisKKwkvKiBBc3NlcnQgUkVTRVQgKi8KKwlncGlvZF9zZXRfdmFsdWUoaWxpLT5yZXNl dF9ncGlvLCAxKTsKKworCS8qIEVuYWJsZSBwb3dlciAqLworCWlmICghSVNfRVJSKGlsaS0+dmNj KSkgeworCQlyZXQgPSByZWd1bGF0b3JfZW5hYmxlKGlsaS0+dmNjKTsKKwkJaWYgKHJldCA8IDAp IHsKKwkJCWRldl9lcnIoaWxpLT5kZXYsICJ1bmFibGUgdG8gZW5hYmxlIHZjY1xuIik7CisJCQly ZXR1cm4gcmV0OworCQl9CisJfQorCW1zbGVlcCgyMCk7CisKKwkvKiBEZS1hc3NlcnQgUkVTRVQg Ki8KKwlncGlvZF9zZXRfdmFsdWUoaWxpLT5yZXNldF9ncGlvLCAwKTsKKwltc2xlZXAoMTApOwor CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaWxpOTM0MV9kcGlfcG93ZXJfb2ZmKHN0cnVj dCBpbGk5MzQxICppbGkpCit7CisJLyogQXNzZXJ0IFJFU0VUICovCisJZ3Bpb2Rfc2V0X3ZhbHVl KGlsaS0+cmVzZXRfZ3BpbywgMSk7CisKKwkvKiBEaXNhYmxlIHBvd2VyICovCisJaWYgKCFJU19F UlIoaWxpLT52Y2MpKQorCQlyZXR1cm4gcmVndWxhdG9yX2Rpc2FibGUoaWxpLT52Y2MpOworCisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaWxpOTM0MV9kcGlfZGlzYWJsZShzdHJ1Y3QgZHJt X3BhbmVsICpwYW5lbCkKK3sKKwlzdHJ1Y3QgaWxpOTM0MSAqaWxpID0gcGFuZWxfdG9faWxpOTM0 MShwYW5lbCk7CisKKwlpbGk5MzQxX2NvbW1hbmQoaWxpLCBNSVBJX0RDU19TRVRfRElTUExBWV9P RkYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaWxpOTM0MV9kcGlfdW5wcmVwYXJl KHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQoreworCXN0cnVjdCBpbGk5MzQxICppbGkgPSBwYW5l bF90b19pbGk5MzQxKHBhbmVsKTsKKworCXJldHVybiBpbGk5MzQxX2RwaV9wb3dlcl9vZmYoaWxp KTsKK30KKworc3RhdGljIGludCBpbGk5MzQxX2RwaV9wcmVwYXJlKHN0cnVjdCBkcm1fcGFuZWwg KnBhbmVsKQoreworCXN0cnVjdCBpbGk5MzQxICppbGkgPSBwYW5lbF90b19pbGk5MzQxKHBhbmVs KTsKKwlpbnQgcmV0OworCisJcmV0ID0gaWxpOTM0MV9kcGlfcG93ZXJfb24oaWxpKTsKKwlpZiAo cmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGlsaTkzNDFfZHBpX2luaXQoaWxpKTsK KwlpZiAocmV0IDwgMCkKKwkJaWxpOTM0MV9kcGlfdW5wcmVwYXJlKHBhbmVsKTsKKworCXJldHVy biByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaWxpOTM0MV9kcGlfZW5hYmxlKHN0cnVjdCBkcm1fcGFu ZWwgKnBhbmVsKQoreworCXN0cnVjdCBpbGk5MzQxICppbGkgPSBwYW5lbF90b19pbGk5MzQxKHBh bmVsKTsKKworCWlsaTkzNDFfY29tbWFuZChpbGksIE1JUElfRENTX1NFVF9ESVNQTEFZX09OKTsK KworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlsaTkzNDFfZHBpX2dldF9tb2RlcyhzdHJ1 Y3QgZHJtX3BhbmVsICpwYW5lbCwKKwkJCQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9y KQoreworCXN0cnVjdCBpbGk5MzQxICppbGkgPSBwYW5lbF90b19pbGk5MzQxKHBhbmVsKTsKKwlz dHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gY29ubmVjdG9yLT5kZXY7CisJc3RydWN0IGRybV9kaXNw bGF5X21vZGUgKm1vZGU7CisJc3RydWN0IGRybV9kaXNwbGF5X2luZm8gKmluZm87CisKKwlpbmZv ID0gJmNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvOworCWluZm8tPndpZHRoX21tID0gaWxpLT5jb25m LT5tb2RlLndpZHRoX21tOworCWluZm8tPmhlaWdodF9tbSA9IGlsaS0+Y29uZi0+bW9kZS5oZWln aHRfbW07CisKKwlpZiAoaWxpLT5jb25mLT5yZ2JfaW50ZXJmYWNlICYgSUxJOTM0MV9SR0JfRFBM KQorCQlpbmZvLT5idXNfZmxhZ3MgfD0gRFJNX0JVU19GTEFHX1BJWERBVEFfRFJJVkVfUE9TRURH RTsKKwllbHNlCisJCWluZm8tPmJ1c19mbGFncyB8PSBEUk1fQlVTX0ZMQUdfUElYREFUQV9EUklW RV9ORUdFREdFOworCisJaWYgKGlsaS0+Y29uZi0+cmdiX2ludGVyZmFjZSAmIElMSTkzNDFfUkdC X0VQTCkKKwkJaW5mby0+YnVzX2ZsYWdzIHw9IERSTV9CVVNfRkxBR19ERV9ISUdIOworCWVsc2UK KwkJaW5mby0+YnVzX2ZsYWdzIHw9IERSTV9CVVNfRkxBR19ERV9MT1c7CisKKwltb2RlID0gZHJt X21vZGVfZHVwbGljYXRlKGRybSwgJmlsaS0+Y29uZi0+bW9kZSk7CisJaWYgKCFtb2RlKSB7CisJ CURSTV9FUlJPUigiYmFkIG1vZGUgb3IgZmFpbGVkIHRvIGFkZCBtb2RlXG4iKTsKKwkJcmV0dXJu IC1FSU5WQUw7CisJfQorCWRybV9tb2RlX3NldF9uYW1lKG1vZGUpOworCisJLyogU2V0IHVwIHRo ZSBwb2xhcml0eSAqLworCWlmIChpbGktPmNvbmYtPnJnYl9pbnRlcmZhY2UgJiBJTEk5MzQxX1JH Ql9IU1BMKQorCQltb2RlLT5mbGFncyB8PSBEUk1fTU9ERV9GTEFHX1BIU1lOQzsKKwllbHNlCisJ CW1vZGUtPmZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfTkhTWU5DOworCisJaWYgKGlsaS0+Y29uZi0+ cmdiX2ludGVyZmFjZSAmIElMSTkzNDFfUkdCX1ZTUEwpCisJCW1vZGUtPmZsYWdzIHw9IERSTV9N T0RFX0ZMQUdfUFZTWU5DOworCWVsc2UKKwkJbW9kZS0+ZmxhZ3MgfD0gRFJNX01PREVfRkxBR19O VlNZTkM7CisKKwlkcm1fbW9kZV9wcm9iZWRfYWRkKGNvbm5lY3RvciwgbW9kZSk7CisKKwlyZXR1 cm4gMTsgLyogTnVtYmVyIG9mIG1vZGVzICovCit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJt X3BhbmVsX2Z1bmNzIGlsaTkzNDFfZHBpX2Z1bmNzID0geworCS5kaXNhYmxlID0gaWxpOTM0MV9k cGlfZGlzYWJsZSwKKwkudW5wcmVwYXJlID0gaWxpOTM0MV9kcGlfdW5wcmVwYXJlLAorCS5wcmVw YXJlID0gaWxpOTM0MV9kcGlfcHJlcGFyZSwKKwkuZW5hYmxlID0gaWxpOTM0MV9kcGlfZW5hYmxl LAorCS5nZXRfbW9kZXMgPSBpbGk5MzQxX2RwaV9nZXRfbW9kZXMsCit9OworCitzdGF0aWMgaW50 IGlsaTkzNDFfZHBpX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJaW50IHJldDsK KwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmc3BpLT5kZXY7CisJc3RydWN0IGlsaTkzNDEgKmlsaTsK KworCWlsaSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZihzdHJ1Y3QgaWxpOTM0MSksIEdGUF9L RVJORUwpOworCWlmICghaWxpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNwaV9zZXRfZHJ2ZGF0 YShzcGksIGlsaSk7CisKKwlpbGktPmRldiA9IGRldjsKKwkvKgorCSAqIEV2ZXJ5IG5ldyBpbmNh cm5hdGlvbiBvZiB0aGlzIGRpc3BsYXkgbXVzdCBoYXZlIGEgdW5pcXVlCisJICogZGF0YSBlbnRy eSBmb3IgdGhlIHN5c3RlbSBpbiB0aGlzIGRyaXZlci4KKwkgKi8KKwlpbGktPmNvbmYgPSBvZl9k ZXZpY2VfZ2V0X21hdGNoX2RhdGEoZGV2KTsKKwlpZiAoIWlsaS0+Y29uZikgeworCQlkZXZfZXJy KGRldiwgIm1pc3NpbmcgZGV2aWNlIGNvbmZpZ3VyYXRpb25cbiIpOworCQlyZXR1cm4gLUVOT0RF VjsKKwl9CisKKwlpbGktPnZjYyA9IGRldm1fcmVndWxhdG9yX2dldF9vcHRpb25hbChkZXYsICJ2 Y2MiKTsKKwlpZiAoSVNfRVJSKGlsaS0+dmNjKSkKKwkJZGV2X2VycihkZXYsICJnZXQgb3B0aW9u YWwgdmNjIGZhaWxlZFxuIik7CisKKwlpbGktPnJlc2V0X2dwaW8gPSBkZXZtX2dwaW9kX2dldF9v cHRpb25hbChkZXYsICJyZXNldCIsCisJCUdQSU9EX09VVF9ISUdIKTsKKwlpZiAoSVNfRVJSKGls aS0+cmVzZXRfZ3BpbykpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IFJFU0VUIEdQ SU9cbiIpOworCQlyZXR1cm4gUFRSX0VSUihpbGktPnJlc2V0X2dwaW8pOworCX0KKworCWlsaS0+ ZGNfZ3BpbyA9IGRldm1fZ3Bpb2RfZ2V0KGRldiwgImRjIiwgR1BJT0RfT1VUX0xPVyk7CisJaWYg KElTX0VSUihpbGktPmRjX2dwaW8pKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBE QyBHUElPXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoaWxpLT5kY19ncGlvKTsKKwl9CisKKwlzcGkt PmJpdHNfcGVyX3dvcmQgPSA4OworCXJldCA9IHNwaV9zZXR1cChzcGkpOworCWlmIChyZXQgPCAw KSB7CisJCWRldl9lcnIoZGV2LCAic3BpIHNldHVwIGZhaWxlZC5cbiIpOworCQlyZXR1cm4gcmV0 OworCX0KKworCWlsaS0+bWF4X3NwaV9zcGVlZCA9IGlsaS0+Y29uZi0+bWF4X3NwaV9zcGVlZDsK KworCWRybV9wYW5lbF9pbml0KCZpbGktPnBhbmVsLCBkZXYsICZpbGk5MzQxX2RwaV9mdW5jcywK KwkJICAgICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9EUEkpOworCisJcmV0dXJuIGRybV9wYW5lbF9h ZGQoJmlsaS0+cGFuZWwpOworfQorCisKKworc3RhdGljIHZvaWQgaWxpOTM0MV9kYmlfZW5hYmxl KHN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZSAqcGlwZSwKKwkJCSAgICAgc3RydWN0IGRy bV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAorCQkJICAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRl ICpwbGFuZV9zdGF0ZSkKK3sKKwlzdHJ1Y3QgbWlwaV9kYmlfZGV2ICpkYmlkZXYgPSBkcm1fdG9f bWlwaV9kYmlfZGV2KHBpcGUtPmNydGMuZGV2KTsKKwlzdHJ1Y3QgbWlwaV9kYmkgKmRiaSA9ICZk YmlkZXYtPmRiaTsKKwl1OCBhZGRyX21vZGU7CisJaW50IHJldCwgaWR4OworCisJaWYgKCFkcm1f ZGV2X2VudGVyKHBpcGUtPmNydGMuZGV2LCAmaWR4KSkKKwkJcmV0dXJuOworCisJRFJNX0RFQlVH X0tNUygiXG4iKTsKKworCXJldCA9IG1pcGlfZGJpX3Bvd2Vyb25fY29uZGl0aW9uYWxfcmVzZXQo ZGJpZGV2KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXRfZXhpdDsKKwlpZiAocmV0ID09IDEp CisJCWdvdG8gb3V0X2VuYWJsZTsKKworCW1pcGlfZGJpX2NvbW1hbmQoZGJpLCBNSVBJX0RDU19T RVRfRElTUExBWV9PRkYpOworCisJbWlwaV9kYmlfY29tbWFuZChkYmksIElMSTkzNDFfUE9XRVJC LCAweDAwLCAweGMxLCAweDMwKTsKKwltaXBpX2RiaV9jb21tYW5kKGRiaSwgSUxJOTM0MV9QT1dF Ul9TRVEsIDB4NjQsIDB4MDMsIDB4MTIsIDB4ODEpOworCW1pcGlfZGJpX2NvbW1hbmQoZGJpLCBJ TEk5MzQxX0RUQ0EsIDB4ODUsIDB4MDAsIDB4NzgpOworCW1pcGlfZGJpX2NvbW1hbmQoZGJpLCBJ TEk5MzQxX1BPV0VSQSwgMHgzOSwgMHgyYywgMHgwMCwgMHgzNCwgMHgwMik7CisJbWlwaV9kYmlf Y29tbWFuZChkYmksIElMSTkzNDFfUFJDLCBJTEk5MzQxX0RCSV9QUkNfTk9STUFMKTsKKwltaXBp X2RiaV9jb21tYW5kKGRiaSwgSUxJOTM0MV9EVENCLCAweDAwLCAweDAwKTsKKworCS8qIFBvd2Vy IENvbnRyb2wgKi8KKwltaXBpX2RiaV9jb21tYW5kKGRiaSwgSUxJOTM0MV9QT1dFUjEsIElMSTkz NDFfREJJX1ZDT01IXzRQNlYpOworCW1pcGlfZGJpX2NvbW1hbmQoZGJpLCBJTEk5MzQxX1BPV0VS MiwgSUxJOTM0MV9EQklfUFdSXzJfREVGQVVMVCk7CisJLyogVkNPTSAqLworCW1pcGlfZGJpX2Nv bW1hbmQoZGJpLCBJTEk5MzQxX1ZDT00xLCBJTEk5MzQxX0RCSV9WQ09NXzFfVk1IXzRQMjVWLAor CQkJCQkJSUxJOTM0MV9EQklfVkNPTV8xX1ZNTF8xUDVWKTsKKwltaXBpX2RiaV9jb21tYW5kKGRi aSwgSUxJOTM0MV9WQ09NMiwgSUxJOTM0MV9EQklfVkNPTV8yX0RFQ181OCk7CisKKwkvKiBNZW1v cnkgQWNjZXNzIENvbnRyb2wgKi8KKwltaXBpX2RiaV9jb21tYW5kKGRiaSwgTUlQSV9EQ1NfU0VU X1BJWEVMX0ZPUk1BVCwKKwkJCQlNSVBJX0RDU19QSVhFTF9GTVRfMTZCSVQpOworCisJLyogRnJh bWUgUmF0ZSAqLworCW1pcGlfZGJpX2NvbW1hbmQoZGJpLCBJTEk5MzQxX0ZSQywgSUxJOTM0MV9E QklfRlJDX0RJVkEgJiAweDAzLAorCQkJCQkJSUxJOTM0MV9EQklfRlJDX1JUTkEgJiAweDFmKTsK KworCS8qIEdhbW1hICovCisJbWlwaV9kYmlfY29tbWFuZChkYmksIElMSTkzNDFfM0dBTU1BX0VO LCAweDAwKTsKKwltaXBpX2RiaV9jb21tYW5kKGRiaSwgTUlQSV9EQ1NfU0VUX0dBTU1BX0NVUlZF LCBJTEk5MzQxX0dBTU1BX0NVUlZFXzEpOworCW1pcGlfZGJpX2NvbW1hbmQoZGJpLCBJTEk5MzQx X1BHQU1NQSwKKwkJCSAweDBmLCAweDMxLCAweDJiLCAweDBjLCAweDBlLCAweDA4LCAweDRlLCAw eGYxLAorCQkJIDB4MzcsIDB4MDcsIDB4MTAsIDB4MDMsIDB4MGUsIDB4MDksIDB4MDApOworCW1p cGlfZGJpX2NvbW1hbmQoZGJpLCBJTEk5MzQxX05HQU1NQSwKKwkJCSAweDAwLCAweDBlLCAweDE0 LCAweDAzLCAweDExLCAweDA3LCAweDMxLCAweGMxLAorCQkJIDB4NDgsIDB4MDgsIDB4MGYsIDB4 MGMsIDB4MzEsIDB4MzYsIDB4MGYpOworCisJLyogRERSQU0gKi8KKwltaXBpX2RiaV9jb21tYW5k KGRiaSwgSUxJOTM0MV9FVE1PRCwgSUxJOTM0MV9EQklfRU1TX0dBUyB8CisJCQkJCQlJTEk5MzQx X0RCSV9FTVNfRFRTIHwKKwkJCQkJCUlMSTkzNDFfREJJX0VNU19HT04pOworCisJLyogRGlzcGxh eSAqLworCW1pcGlfZGJpX2NvbW1hbmQoZGJpLCBJTEk5MzQxX0RGQywgMHgwOCwgMHg4MiwgMHgy NywgMHgwMCk7CisJbWlwaV9kYmlfY29tbWFuZChkYmksIE1JUElfRENTX0VYSVRfU0xFRVBfTU9E RSk7CisJbXNsZWVwKDEwMCk7CisKKwltaXBpX2RiaV9jb21tYW5kKGRiaSwgTUlQSV9EQ1NfU0VU X0RJU1BMQVlfT04pOworCW1zbGVlcCgxMDApOworCitvdXRfZW5hYmxlOgorCXN3aXRjaCAoZGJp ZGV2LT5yb3RhdGlvbikgeworCWRlZmF1bHQ6CisJCWFkZHJfbW9kZSA9IElMSTkzNDFfTUFEQ1RM X01YOworCQlicmVhazsKKwljYXNlIDkwOgorCQlhZGRyX21vZGUgPSBJTEk5MzQxX01BRENUTF9N VjsKKwkJYnJlYWs7CisJY2FzZSAxODA6CisJCWFkZHJfbW9kZSA9IElMSTkzNDFfTUFEQ1RMX01Z OworCQlicmVhazsKKwljYXNlIDI3MDoKKwkJYWRkcl9tb2RlID0gSUxJOTM0MV9NQURDVExfTVYg fCBJTEk5MzQxX01BRENUTF9NWSB8CisJCQkgICAgSUxJOTM0MV9NQURDVExfTVg7CisJCWJyZWFr OworCX0KKwlhZGRyX21vZGUgfD0gSUxJOTM0MV9NQURDVExfQkdSOworCW1pcGlfZGJpX2NvbW1h bmQoZGJpLCBNSVBJX0RDU19TRVRfQUREUkVTU19NT0RFLCBhZGRyX21vZGUpOworCW1pcGlfZGJp X2VuYWJsZV9mbHVzaChkYmlkZXYsIGNydGNfc3RhdGUsIHBsYW5lX3N0YXRlKTsKKwlEUk1fREVC VUdfS01TKCJpbml0aWFsaXplZCBkaXNwbGF5IHNlcmlhbCBpbnRlcmZhY2VcbiIpOworb3V0X2V4 aXQ6CisJZHJtX2Rldl9leGl0KGlkeCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3Np bXBsZV9kaXNwbGF5X3BpcGVfZnVuY3MgaWxpOTM0MV9kYmlfZnVuY3MgPSB7CisJLmVuYWJsZSA9 IGlsaTkzNDFfZGJpX2VuYWJsZSwKKwkuZGlzYWJsZSA9IG1pcGlfZGJpX3BpcGVfZGlzYWJsZSwK KwkudXBkYXRlID0gbWlwaV9kYmlfcGlwZV91cGRhdGUsCisJLnByZXBhcmVfZmIgPSBkcm1fZ2Vt X2ZiX3NpbXBsZV9kaXNwbGF5X3BpcGVfcHJlcGFyZV9mYiwKK307CisKK3N0YXRpYyBjb25zdCBz dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSBpbGk5MzQxX2RiaV9tb2RlID0geworCURSTV9TSU1QTEVf TU9ERSgyNDAsIDMyMCwgMzcsIDQ5KSwKK307CisKK0RFRklORV9EUk1fR0VNX0NNQV9GT1BTKGls aTkzNDFfZGJpX2ZvcHMpOworCitzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIgaWxpOTM0MV9kYmlf ZHJpdmVyID0geworCS5kcml2ZXJfZmVhdHVyZXMJPSBEUklWRVJfR0VNIHwgRFJJVkVSX01PREVT RVQgfCBEUklWRVJfQVRPTUlDLAorCS5mb3BzCQkJPSAmaWxpOTM0MV9kYmlfZm9wcywKKwkucmVs ZWFzZQkJPSBtaXBpX2RiaV9yZWxlYXNlLAorCURSTV9HRU1fQ01BX1ZNQVBfRFJJVkVSX09QUywK KwkuZGVidWdmc19pbml0CQk9IG1pcGlfZGJpX2RlYnVnZnNfaW5pdCwKKwkubmFtZQkJCT0gImls aTkzNDEiLAorCS5kZXNjCQkJPSAiSWxpdGVrIElMSTkzNDEiLAorCS5kYXRlCQkJPSAiMjAxODA1 MTQiLAorCS5tYWpvcgkJCT0gMSwKKwkubWlub3IJCQk9IDAsCit9Oworc3RhdGljIGludCBpbGk5 MzQxX2RiaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBtaXBpX2Ri aV9kZXYgKmRiaWRldjsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtOworCXN0cnVjdCBtaXBpX2Ri aSAqZGJpOworCXN0cnVjdCBncGlvX2Rlc2MgKmRjOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZz cGktPmRldjsKKwl1MzIgcm90YXRpb24gPSAwOworCWludCByZXQ7CisKKwlkYmlkZXYgPSBremFs bG9jKHNpemVvZigqZGJpZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkYmlkZXYpCisJCXJldHVy biAtRU5PTUVNOworCisJZGJpID0gJmRiaWRldi0+ZGJpOworCWRybSA9ICZkYmlkZXYtPmRybTsK KwlyZXQgPSBkZXZtX2RybV9kZXZfaW5pdChkZXYsIGRybSwgJmlsaTkzNDFfZGJpX2RyaXZlcik7 CisJaWYgKHJldCkgeworCQlrZnJlZShkYmlkZXYpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRy bV9tb2RlX2NvbmZpZ19pbml0KGRybSk7CisKKwlkYmktPnJlc2V0ID0gZGV2bV9ncGlvZF9nZXRf b3B0aW9uYWwoZGV2LCAicmVzZXQiLAorCQkJCQlHUElPRF9PVVRfSElHSCk7CisJaWYgKElTX0VS UihkYmktPnJlc2V0KSkgeworCQlEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byBnZXQgZ3Bp byAncmVzZXQnXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoZGJpLT5yZXNldCk7CisJfQorCisJZGMg PSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbChkZXYsICJkYyIsIEdQSU9EX09VVF9MT1cpOworCWlm IChJU19FUlIoZGMpKSB7CisJCURSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIGdldCBncGlv ICdkYydcbiIpOworCQlyZXR1cm4gUFRSX0VSUihkYyk7CisJfQorCisJZGJpZGV2LT5yZWd1bGF0 b3IgPSBkZXZtX3JlZ3VsYXRvcl9nZXRfb3B0aW9uYWwoZGV2LCAidmNjIik7CisJaWYgKElTX0VS UihkYmlkZXYtPnJlZ3VsYXRvcikpCisJCWRldl9lcnIoZGV2LCAiZ2V0IG9wdGlvbmFsIHZjYyBm YWlsZWRcbiIpOworCisJZGJpZGV2LT5iYWNrbGlnaHQgPSBkZXZtX29mX2ZpbmRfYmFja2xpZ2h0 KGRldik7CisJaWYgKElTX0VSUihkYmlkZXYtPmJhY2tsaWdodCkpCisJCXJldHVybiBQVFJfRVJS KGRiaWRldi0+YmFja2xpZ2h0KTsKKworCWRldmljZV9wcm9wZXJ0eV9yZWFkX3UzMihkZXYsICJy b3RhdGlvbiIsICZyb3RhdGlvbik7CisKKwlyZXQgPSBtaXBpX2RiaV9zcGlfaW5pdChzcGksIGRi aSwgZGMpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBtaXBpX2RiaV9kZXZf aW5pdChkYmlkZXYsICZpbGk5MzQxX2RiaV9mdW5jcywKKwkJCQkJJmlsaTkzNDFfZGJpX21vZGUs IHJvdGF0aW9uKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZHJtX21vZGVfY29uZmln X3Jlc2V0KGRybSk7CisKKwlyZXQgPSBkcm1fZGV2X3JlZ2lzdGVyKGRybSwgMCk7CisJaWYgKHJl dCkKKwkJcmV0dXJuIHJldDsKKworCXNwaV9zZXRfZHJ2ZGF0YShzcGksIGRybSk7CisKKwlkcm1f ZmJkZXZfZ2VuZXJpY19zZXR1cChkcm0sIDApOworCisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW50 IGlsaTkzNDFfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwljb25zdCBzdHJ1Y3Qg c3BpX2RldmljZV9pZCAqaWQgPSBzcGlfZ2V0X2RldmljZV9pZChzcGkpOworCisJaWYgKCFzdHJj bXAoaWQtPm5hbWUsICJzZi10YzI0MHQtOTM3MC10IikpCisJCXJldHVybiBpbGk5MzQxX2RwaV9w cm9iZShzcGkpOworCWVsc2UgaWYgKCFzdHJjbXAoaWQtPm5hbWUsICJ5eDI0MHF2MjkiKSkKKwkJ cmV0dXJuIGlsaTkzNDFfZGJpX3Byb2JlKHNwaSk7CisKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRp YyBpbnQgaWxpOTM0MV9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwljb25zdCBz dHJ1Y3Qgc3BpX2RldmljZV9pZCAqaWQgPSBzcGlfZ2V0X2RldmljZV9pZChzcGkpOworCXN0cnVj dCBpbGk5MzQxICppbGkgPSBzcGlfZ2V0X2RydmRhdGEoc3BpKTsKKwlzdHJ1Y3QgZHJtX2Rldmlj ZSAqZHJtID0gc3BpX2dldF9kcnZkYXRhKHNwaSk7CisKKwlpZiAoIXN0cmNtcChpZC0+bmFtZSwg InNmLXRjMjQwdC05MzcwLXQiKSkgeworCQlpbGk5MzQxX2RwaV9wb3dlcl9vZmYoaWxpKTsKKwkJ ZHJtX3BhbmVsX3JlbW92ZSgmaWxpLT5wYW5lbCk7CisJfSBlbHNlIGlmICghc3RyY21wKGlkLT5u YW1lLCAieXgyNDBxdjI5IikpIHsKKwkJZHJtX2Rldl91bnBsdWcoZHJtKTsKKwkJZHJtX2F0b21p Y19oZWxwZXJfc2h1dGRvd24oZHJtKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lk IGlsaTkzNDFfc2h1dGRvd24oc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwljb25zdCBzdHJ1 Y3Qgc3BpX2RldmljZV9pZCAqaWQgPSBzcGlfZ2V0X2RldmljZV9pZChzcGkpOworCisJaWYgKCFz dHJjbXAoaWQtPm5hbWUsICJ5eDI0MHF2MjkiKSkKKwkJZHJtX2F0b21pY19oZWxwZXJfc2h1dGRv d24oc3BpX2dldF9kcnZkYXRhKHNwaSkpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2Rl dmljZV9pZCBpbGk5MzQxX29mX21hdGNoW10gPSB7CisJeworCQkuY29tcGF0aWJsZSA9ICJzdCxz Zi10YzI0MHQtOTM3MC10IiwKKwkJLmRhdGEgPSAmaWxpOTM0MV9zdG0zMmY0MjlfZGlzY29fZGF0 YSwKKwl9LAorCXsKKwkJLyogcG9ydGluZyBmcm9tIHRpbnkvaWxpOTM0MS5jCisJCSAqIGZvciBv cmlnaW5hbCBtaXBpIGRiaSBjb21waXRhYmxlCisJCSAqLworCQkuY29tcGF0aWJsZSA9ICJhZGFm cnVpdCx5eDI0MHF2MjkiLAorCQkuZGF0YSA9IE5VTEwsCisJfSwKK307CitNT0RVTEVfREVWSUNF X1RBQkxFKG9mLCBpbGk5MzQxX29mX21hdGNoKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzcGlf ZGV2aWNlX2lkIGlsaTkzNDFfaWRbXSA9IHsKKwl7ICJ5eDI0MHF2MjkiLCAwIH0sCisJeyAic2Yt dGMyNDB0LTkzNzAtdCIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHNwaSwg aWxpOTM0MV9pZCk7CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciBpbGk5MzQxX2RyaXZlciA9 IHsKKwkucHJvYmUgPSBpbGk5MzQxX3Byb2JlLAorCS5yZW1vdmUgPSBpbGk5MzQxX3JlbW92ZSwK Kwkuc2h1dGRvd24gPSBpbGk5MzQxX3NodXRkb3duLAorCS5pZF90YWJsZSA9IGlsaTkzNDFfaWQs CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAicGFuZWwtaWxpdGVrLWlsaTkzNDEiLAorCQkub2Zf bWF0Y2hfdGFibGUgPSBpbGk5MzQxX29mX21hdGNoLAorCX0sCit9OworbW9kdWxlX3NwaV9kcml2 ZXIoaWxpOTM0MV9kcml2ZXIpOworCitNT0RVTEVfQVVUSE9SKCJEaWxsb24gTWluIDxkaWxsb24u bWluZmVpQGdtYWlsLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiSUxJOTM0MSBMQ0QgcGFu ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7Ci0tIAoyLjcuNAoKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJu ZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRw Oi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK