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.8 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,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 85DEAC38A2A for ; Mon, 11 May 2020 02:16:43 +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 1BA3C208E4 for ; Mon, 11 May 2020 02:16:43 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="EhDOQ2c2"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=samsung.com header.i=@samsung.com header.b="oG9/xisu" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 1BA3C208E4 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=samsung.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:References:MIME-Version: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=lakl5D6Uzzpok5Tt37xqzoDVCxLlKeSx/dHC30lbpvQ=; b=EhDOQ2c2YNmwBq 1J0Wk2enf69RKmHMQF2YsJVJlnKd56a9fLOxqxill7GGM68Ee1MVUHZnSoelDz/J4/Uxouq7mxoQw W2Or+G4/V6VVSS2IqgzloYlQ4+ZBTDcJFrC7A7PpjmKXxSEoDDR0sBCungWKCPEKwOmAsAbgaZOi4 wkFo7u4DfvYZouAyhfCWO0NBICDLxbO3BitrqH1sNogo44vznoCgT4HKo/shzGfBhkXoGb+JEq6D0 PYX+8TpE9xrJLXQD6X97E8lB8BWwAnuHA5+ZlVcIaagSnFKfqsHY/3qQlmuXNPZRg0Be82PUw0Tdv MJ0olNrP9RkxbZkRxPlA==; 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 1jXxzh-0007zj-BQ; Mon, 11 May 2020 02:16:37 +0000 Received: from mailout1.samsung.com ([203.254.224.24]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jXxxM-00035O-L2 for linux-arm-kernel@lists.infradead.org; Mon, 11 May 2020 02:14:18 +0000 Received: from epcas5p1.samsung.com (unknown [182.195.41.39]) by mailout1.samsung.com (KnoxPortal) with ESMTP id 20200511021410epoutp01d336b972dde910d97f5dd65d3e92c324~N146IlZVZ2309523095epoutp01X for ; Mon, 11 May 2020 02:14:10 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.samsung.com 20200511021410epoutp01d336b972dde910d97f5dd65d3e92c324~N146IlZVZ2309523095epoutp01X DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1589163250; bh=ArElBjUiROLPXdpPQRWMsrovb+3XfW41quw3VIbNfZY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=oG9/xisu4xVNb9Mng6Cn/GgVh0XUeEwRt4Qml8UcLZk6BUOQpEZwQOGN9nHSQFTi5 bo6wNsdIbHHoHsGiDZyyt9q1eEjVdXSYcuXGP888kguO+t07oZrY0JRd7jKHfGNUMJ sX/vw1qJxoGudf+3Dyfj0TIUj6j9F7D7KnYiykh8= Received: from epsmges5p3new.samsung.com (unknown [182.195.42.75]) by epcas5p3.samsung.com (KnoxPortal) with ESMTP id 20200511021410epcas5p38acfc883541ddf3b26b081df23581a53~N145wDpf51506415064epcas5p3o; Mon, 11 May 2020 02:14:10 +0000 (GMT) Received: from epcas5p3.samsung.com ( [182.195.41.41]) by epsmges5p3new.samsung.com (Symantec Messaging Gateway) with SMTP id 87.1A.23389.2F4B8BE5; Mon, 11 May 2020 11:14:10 +0900 (KST) Received: from epsmtrp2.samsung.com (unknown [182.195.40.14]) by epcas5p3.samsung.com (KnoxPortal) with ESMTPA id 20200511021409epcas5p3b78fe59669f13ffae481b57a944da675~N144_pL362929029290epcas5p3d; Mon, 11 May 2020 02:14:09 +0000 (GMT) Received: from epsmgms1p1new.samsung.com (unknown [182.195.42.41]) by epsmtrp2.samsung.com (KnoxPortal) with ESMTP id 20200511021409epsmtrp249eb0022f74331b3a5b7dca688779d2a~N1449n5yU1467414674epsmtrp2h; Mon, 11 May 2020 02:14:09 +0000 (GMT) X-AuditID: b6c32a4b-7adff70000005b5d-54-5eb8b4f286e8 Received: from epsmtip2.samsung.com ( [182.195.34.31]) by epsmgms1p1new.samsung.com (Symantec Messaging Gateway) with SMTP id E2.F6.18461.1F4B8BE5; Mon, 11 May 2020 11:14:09 +0900 (KST) Received: from Jaguar.sa.corp.samsungelectronics.net (unknown [107.108.73.139]) by epsmtip2.samsung.com (KnoxPortal) with ESMTPA id 20200511021406epsmtip2af951e98cd97b97e9b3bf052192b9917~N142pgL6v0183901839epsmtip28; Mon, 11 May 2020 02:14:06 +0000 (GMT) From: Alim Akhtar To: robh@kernel.org Subject: [PATCH v8 09/10] scsi: ufs-exynos: add UFS host support for Exynos SoCs Date: Mon, 11 May 2020 07:30:30 +0530 Message-Id: <20200511020031.25730-10-alim.akhtar@samsung.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200511020031.25730-1-alim.akhtar@samsung.com> MIME-Version: 1.0 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrCKsWRmVeSWpSXmKPExsWy7bCmpu6nLTviDKaf4rF4MG8bm8XLn1fZ LD6tX8ZqMf/IOVaL8+c3sFvc3HKUxWLT42usFpd3zWGzmHF+H5NF9/UdbBbLj/9jsvi/Zwe7 xdKtNxkdeD0u9/UyeWxa1cnmsXlJvUfLyf0sHh+f3mLx6NuyitHj8yY5j/YD3UwBHFFcNimp OZllqUX6dglcGf2r5rIUdE5irni1cDF7A+Pp80xdjJwcEgImErNuHAGyuTiEBHYzSnRcugzl fGKUuN9xgw3C+cYo8XzfbkaYlg2POthBbCGBvYwS547ZQRS1MEksvtPIBpJgE9CWuDt9C9gO EQFhiSPf2sCamQVuMEk8WOkCYgsLBEnsbt0AFOfgYBFQlZh7lRUkzCtgK/Hn2UYWiF3yEqs3 HGAGsTmB4tMatrNA1AhKnJz5hAVipLxE89bZzCA3SAjs4JB4/bWfHaLZRWJr3xwoW1ji1fEt ULaUxOd3e9lA9koIZEv07DKGCNdILJ13DGqvvcSBK3NYQEqYBTQl1u/Sh1jFJ9H7+wkTRCev REebEES1qkTzu6tQndISE7u7WSFsD4n2r5+g4TmBUaL57j3GCYzys5B8MAvJB7MQti1gZF7F KJlaUJybnlpsWmCcl1quV5yYW1yal66XnJ+7iRGcsLS8dzA+evBB7xAjEwfjIUYJDmYlEd7l uTvihHhTEiurUovy44tKc1KLDzFKc7AoifM+btwSJySQnliSmp2aWpBaBJNl4uCUamBS/chq O9n+bdbnWS5TU3bu+bR27+f6ftmER0JBh15U7g1OsMkVldY2Wmj24KVW06JLsZwb9XNTUiM5 0mOfPZHNM/DKU0ytWOPykzc1s9bK/ub206buLNGKV4PsUteqtxWlq8hm+uUXKsn/lOG4nmhc uevEsbvGHxdtj/myc+60s0Hrf3+t87x48B27TH3tp5t+u47YftCKfuGTqa/bPkNfJnwW02fz u/ExVkoTC9sftEuWyvYuOnPmQs6DkyvesM53FghZ3rv2mpqS+Lq3DI/3lbpk775kvbztney/ pEbG0g9h7JlR//0+vN8tU5Xh6rpouZHy8ih/9/8Xny9bu+tj/dHGrS4eze/3Kqi4H1NiKc5I NNRiLipOBAAeUxhYxwMAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFupikeLIzCtJLcpLzFFi42LZdlhJXvfjlh1xBv3nBC0ezNvGZvHy51U2 i0/rl7FazD9yjtXi/PkN7BY3txxlsdj0+BqrxeVdc9gsZpzfx2TRfX0Hm8Xy4/+YLP7v2cFu sXTrTUYHXo/Lfb1MHptWdbJ5bF5S79Fycj+Lx8ent1g8+rasYvT4vEnOo/1AN1MARxSXTUpq TmZZapG+XQJXRv+quSwFnZOYK14tXMzewHj6PFMXIyeHhICJxIZHHexdjFwcQgK7GSXObvnH CpGQlri+cQI7hC0ssfLfc6iiJiaJb0+2sIAk2AS0Je5O3wI2SQSo6Mi3NkYQm1ngGZPEqYel ILawQIDEl85lQHEODhYBVYm5V8Hm8wrYSvx5tpEFYr68xOoNB5hBbE6g+LSG7WBxIQEbiRmb NkPVC0qcnPmEBWQMs4C6xPp5QhCb5CWat85mnsAoOAtJ1SyEqllIqhYwMq9ilEwtKM5Nzy02 LDDMSy3XK07MLS7NS9dLzs/dxAiOLi3NHYzbV33QO8TIxMF4iFGCg1lJhHd57o44Id6UxMqq 1KL8+KLSnNTiQ4zSHCxK4rw3ChfGCQmkJ5akZqemFqQWwWSZODilGphWsb8vmjltnytbtPSH D1XJxu3V563fbjq+W/djoXSWorGGtI/tonuzy/6U7Db4OGXNblvPZIFem5JHap41O3mvF905 YjJ9h7XjPrfpJlXq0ULqv9mmfP003XCCcGCaPguPysZXscniywp+87pyBPh+9BCytfvSnaPH WJbAqz/HM9mto/6oSnN/enW8C8ONvcZHTicZdLm3LHomuyPt9ZLVtvNnXblULdvnqivAv/5U d3/49xfzpu3dMXnr3EClCVY3Zd9/MuacqTs9f+rVIzkyJ3fEcJ+1nW51oDyf9/71ogaxuxum 67sHnXSq9SlxmmBhvLVAeKO+1LPODT9WRNQuE+Ji2uW+s1WypSy9RomlOCPRUIu5qDgRAFL5 CmAdAwAA X-CMS-MailID: 20200511021409epcas5p3b78fe59669f13ffae481b57a944da675 X-Msg-Generator: CA CMS-TYPE: 105P X-CMS-RootMailID: 20200511021409epcas5p3b78fe59669f13ffae481b57a944da675 References: <20200511020031.25730-1-alim.akhtar@samsung.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200510_191413_509739_1D7B05F6 X-CRM114-Status: GOOD ( 23.72 ) 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-samsung-soc@vger.kernel.org, linux-scsi@vger.kernel.org, martin.petersen@oracle.com, linux-kernel@vger.kernel.org, krzk@kernel.org, kwmad.kim@samsung.com, avri.altman@wdc.com, cang@codeaurora.org, Alim Akhtar , stanley.chu@mediatek.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 VGhpcyBwYXRjaCBpbnRyb2R1Y2VzIEV4eW5vcyBVRlMgaG9zdCBjb250cm9sbGVyIGRyaXZlciwK d2hpY2ggbWFpbmx5IGhhbmRsZXMgdmVuZG9yLXNwZWNpZmljIG9wZXJhdGlvbnMgaW5jbHVkaW5n Cmxpbmsgc3RhcnR1cCwgcG93ZXIgbW9kZSBjaGFuZ2UgYW5kIGhpYmVybmF0aW9uL3VuaGliZXJu YXRpb24uCgpSZXBvcnRlZC1ieToga2J1aWxkIHRlc3Qgcm9ib3QgPGxrcEBpbnRlbC5jb20+ClJl cG9ydGVkLWJ5OiBKdWxpYSBMYXdhbGwgPGp1bGlhLmxhd2FsbEBsaXA2LmZyPgpbcm9ib3Q6IGRy aXZlcnMvc2NzaS91ZnMvdWZzLWV4eW5vcy5jOjkzMTo4LTEwOgogV0FSTklORzogcG9zc2libGUg Y29uZGl0aW9uIHdpdGggbm8gZWZmZWN0IChpZiA9PSBlbHNlKQpdClJldmlld2VkLWJ5OiBLaXdv b25nIEtpbSA8a3dtYWQua2ltQHNhbXN1bmcuY29tPgpSZXZpZXdlZC1ieTogQXZyaSBBbHRtYW4g PGF2cmkuYWx0bWFuQHdkYy5jb20+ClNpZ25lZC1vZmYtYnk6IFNldW5nd29uIEplb24gPGVzc3V1 akBnbWFpbC5jb20+ClNpZ25lZC1vZmYtYnk6IEFsaW0gQWtodGFyIDxhbGltLmFraHRhckBzYW1z dW5nLmNvbT4KVGVzdGVkLWJ5OiBQYXdlxYIgQ2htaWVsIDxwYXdlbC5taWtvbGFqLmNobWllbEBn bWFpbC5jb20+Ci0tLQogZHJpdmVycy9zY3NpL3Vmcy9LY29uZmlnICAgICAgfCAgIDEyICsKIGRy aXZlcnMvc2NzaS91ZnMvTWFrZWZpbGUgICAgIHwgICAgMSArCiBkcml2ZXJzL3Njc2kvdWZzL3Vm cy1leHlub3MuYyB8IDEzMDAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2 ZXJzL3Njc2kvdWZzL3Vmcy1leHlub3MuaCB8ICAyODQgKysrKysrKwogZHJpdmVycy9zY3NpL3Vm cy91bmlwcm8uaCAgICAgfCAgIDMzICsKIDUgZmlsZXMgY2hhbmdlZCwgMTYzMCBpbnNlcnRpb25z KCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zY3NpL3Vmcy91ZnMtZXh5bm9zLmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3Njc2kvdWZzL3Vmcy1leHlub3MuaAoKZGlmZiAtLWdp dCBhL2RyaXZlcnMvc2NzaS91ZnMvS2NvbmZpZyBiL2RyaXZlcnMvc2NzaS91ZnMvS2NvbmZpZwpp bmRleCBlMjAwNWFlZGRjMmQuLmNjN2UyOWM4YzI0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3Np L3Vmcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvc2NzaS91ZnMvS2NvbmZpZwpAQCAtMTYwLDMgKzE2 MCwxNSBAQCBjb25maWcgU0NTSV9VRlNfQlNHCiAKIAkgIFNlbGVjdCB0aGlzIGlmIHlvdSBuZWVk IGEgYnNnIGRldmljZSBub2RlIGZvciB5b3VyIFVGUyBjb250cm9sbGVyLgogCSAgSWYgdW5zdXJl LCBzYXkgTi4KKworY29uZmlnIFNDU0lfVUZTX0VYWU5PUworCWJvb2wgIkVYWU5PUyBzcGVjaWZp YyBob29rcyB0byBVRlMgY29udHJvbGxlciBwbGF0Zm9ybSBkcml2ZXIiCisJZGVwZW5kcyBvbiBT Q1NJX1VGU0hDRF9QTEFURk9STSAmJiBBUkNIX0VYWU5PUyB8fCBDT01QSUxFX1RFU1QKKwlzZWxl Y3QgUEhZX1NBTVNVTkdfVUZTCisJaGVscAorCSAgVGhpcyBzZWxlY3RzIHRoZSBFWFlOT1Mgc3Bl Y2lmaWMgYWRkaXRpb25zIHRvIFVGU0hDRCBwbGF0Zm9ybSBkcml2ZXIuCisJICBVRlMgaG9zdCBv biBFWFlOT1MgaW5jbHVkZXMgSENJIGFuZCBVTklQUk8gbGF5ZXIsIGFuZCBhc3NvY2lhdGVzIHdp dGgKKwkgIFVGUy1QSFkgZHJpdmVyLgorCisJICBTZWxlY3QgdGhpcyBpZiB5b3UgaGF2ZSBVRlMg aG9zdCBjb250cm9sbGVyIG9uIEVYWU5PUyBjaGlwc2V0LgorCSAgSWYgdW5zdXJlLCBzYXkgTi4K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS91ZnMvTWFrZWZpbGUgYi9kcml2ZXJzL3Njc2kvdWZz L01ha2VmaWxlCmluZGV4IDk0YzZjNWQ3MzM0Yi4uZjBjNWI5NWVjOWNjIDEwMDY0NAotLS0gYS9k cml2ZXJzL3Njc2kvdWZzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc2NzaS91ZnMvTWFrZWZpbGUK QEAgLTQsNiArNCw3IEBAIG9iai0kKENPTkZJR19TQ1NJX1VGU19EV0NfVENfUENJKSArPSB0Yy1k d2MtZzIxMC1wY2kubyB1ZnNoY2QtZHdjLm8gdGMtZHdjLWcyMTAuCiBvYmotJChDT05GSUdfU0NT SV9VRlNfRFdDX1RDX1BMQVRGT1JNKSArPSB0Yy1kd2MtZzIxMC1wbHRmcm0ubyB1ZnNoY2QtZHdj Lm8gdGMtZHdjLWcyMTAubwogb2JqLSQoQ09ORklHX1NDU0lfVUZTX0NETlNfUExBVEZPUk0pICs9 IGNkbnMtcGx0ZnJtLm8KIG9iai0kKENPTkZJR19TQ1NJX1VGU19RQ09NKSArPSB1ZnMtcWNvbS5v CitvYmotJChDT05GSUdfU0NTSV9VRlNfRVhZTk9TKSArPSB1ZnMtZXh5bm9zLm8KIG9iai0kKENP TkZJR19TQ1NJX1VGU0hDRCkgKz0gdWZzaGNkLWNvcmUubwogdWZzaGNkLWNvcmUteQkJCQkrPSB1 ZnNoY2QubyB1ZnMtc3lzZnMubwogdWZzaGNkLWNvcmUtJChDT05GSUdfU0NTSV9VRlNfQlNHKQkr PSB1ZnNfYnNnLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS91ZnMvdWZzLWV4eW5vcy5jIGIv ZHJpdmVycy9zY3NpL3Vmcy91ZnMtZXh5bm9zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAwLi5lZGZkZTcwMzhjZmQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Nj c2kvdWZzL3Vmcy1leHlub3MuYwpAQCAtMCwwICsxLDEzMDAgQEAKKy8vIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKKy8qCisgKiBVRlMgSG9zdCBDb250cm9sbGVyIGRyaXZl ciBmb3IgRXh5bm9zIHNwZWNpZmljIGV4dGVuc2lvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIw MTQtMjAxNSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICogQXV0aG9yOiBTZXVuZ3dv biBKZW9uICA8ZXNzdXVqQGdtYWlsLmNvbT4KKyAqIEF1dGhvcjogQWxpbSBBa2h0YXIgPGFsaW0u YWtodGFyQHNhbXN1bmcuY29tPgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+Cisj aW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRl IDxsaW51eC9vZl9hZGRyZXNzLmg+CisjaW5jbHVkZSA8bGludXgvcGh5L3BoeS5oPgorI2luY2x1 ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSAidWZzaGNkLmgiCisjaW5j bHVkZSAidWZzaGNkLXBsdGZybS5oIgorI2luY2x1ZGUgInVmc2hjaS5oIgorI2luY2x1ZGUgInVu aXByby5oIgorCisjaW5jbHVkZSAidWZzLWV4eW5vcy5oIgorCisvKgorICogRXh5bm9zJ3MgVmVu ZG9yIHNwZWNpZmljIHJlZ2lzdGVycyBmb3IgVUZTSENJCisgKi8KKyNkZWZpbmUgSENJX1RYUFJE VF9FTlRSWV9TSVpFCTB4MDAKKyNkZWZpbmUgUFJEVF9QUkVGRUNUX0VOCQlCSVQoMzEpCisjZGVm aW5lIFBSRFRfU0VUX1NJWkUoeCkJKCh4KSAmIDB4MUYpCisjZGVmaW5lIEhDSV9SWFBSRFRfRU5U UllfU0laRQkweDA0CisjZGVmaW5lIEhDSV8xVVNfVE9fQ05UX1ZBTAkweDBDCisjZGVmaW5lIENO VF9WQUxfMVVTX01BU0sJMHgzRkYKKyNkZWZpbmUgSENJX1VUUkxfTkVYVVNfVFlQRQkweDQwCisj ZGVmaW5lIEhDSV9VVE1STF9ORVhVU19UWVBFCTB4NDQKKyNkZWZpbmUgSENJX1NXX1JTVAkJMHg1 MAorI2RlZmluZSBVRlNfTElOS19TV19SU1QJCUJJVCgwKQorI2RlZmluZSBVRlNfVU5JUFJPX1NX X1JTVAlCSVQoMSkKKyNkZWZpbmUgVUZTX1NXX1JTVF9NQVNLCQkoVUZTX1VOSVBST19TV19SU1Qg fCBVRlNfTElOS19TV19SU1QpCisjZGVmaW5lIEhDSV9EQVRBX1JFT1JERVIJMHg2MAorI2RlZmlu ZSBIQ0lfVU5JUFJPX0FQQl9DTEtfQ1RSTAkweDY4CisjZGVmaW5lIFVOSVBST19BUEJfQ0xLKHYs IHgpCSgoKHYpICYgfjB4RikgfCAoKHgpICYgMHhGKSkKKyNkZWZpbmUgSENJX0FYSURNQV9SV0RB VEFfQlVSU1RfTEVOCTB4NkMKKyNkZWZpbmUgSENJX0dQSU9fT1VUCQkweDcwCisjZGVmaW5lIEhD SV9FUlJfRU5fUEFfTEFZRVIJMHg3OAorI2RlZmluZSBIQ0lfRVJSX0VOX0RMX0xBWUVSCTB4N0MK KyNkZWZpbmUgSENJX0VSUl9FTl9OX0xBWUVSCTB4ODAKKyNkZWZpbmUgSENJX0VSUl9FTl9UX0xB WUVSCTB4ODQKKyNkZWZpbmUgSENJX0VSUl9FTl9ETUVfTEFZRVIJMHg4OAorI2RlZmluZSBIQ0lf Q0xLU1RPUF9DVFJMCTB4QjAKKyNkZWZpbmUgUkVGQ0xLX1NUT1AJCUJJVCgyKQorI2RlZmluZSBV TklQUk9fTUNMS19TVE9QCUJJVCgxKQorI2RlZmluZSBVTklQUk9fUENMS19TVE9QCUJJVCgwKQor I2RlZmluZSBDTEtfU1RPUF9NQVNLCQkoUkVGQ0xLX1NUT1AgfFwKKwkJCQkgVU5JUFJPX01DTEtf U1RPUCB8XAorCQkJCSBVTklQUk9fUENMS19TVE9QKQorI2RlZmluZSBIQ0lfTUlTQwkJMHhCNAor I2RlZmluZSBSRUZDTEtfQ1RSTF9FTgkJQklUKDcpCisjZGVmaW5lIFVOSVBST19QQ0xLX0NUUkxf RU4JQklUKDYpCisjZGVmaW5lIFVOSVBST19NQ0xLX0NUUkxfRU4JQklUKDUpCisjZGVmaW5lIEhD SV9DT1JFQ0xLX0NUUkxfRU4JQklUKDQpCisjZGVmaW5lIENMS19DVFJMX0VOX01BU0sJKFJFRkNM S19DVFJMX0VOIHxcCisJCQkJIFVOSVBST19QQ0xLX0NUUkxfRU4gfFwKKwkJCQkgVU5JUFJPX01D TEtfQ1RSTF9FTikKKy8qIERldmljZSBmYXRhbCBlcnJvciAqLworI2RlZmluZSBERkVTX0VSUl9F TgkJQklUKDMxKQorI2RlZmluZSBERkVTX0RFRl9MMl9FUlJTCShVSUNfREFUQV9MSU5LX0xBWUVS X0VSUk9SX1JYX0JVRl9PRiB8XAorCQkJCSBVSUNfREFUQV9MSU5LX0xBWUVSX0VSUk9SX1BBX0lO SVQpCisjZGVmaW5lIERGRVNfREVGX0wzX0VSUlMJKFVJQ19ORVRXT1JLX1VOU1VQUE9SVEVEX0hF QURFUl9UWVBFIHxcCisJCQkJIFVJQ19ORVRXT1JLX0JBRF9ERVZJQ0VJRF9FTkMgfFwKKwkJCQkg VUlDX05FVFdPUktfTEhEUl9UUkFQX1BBQ0tFVF9EUk9QUElORykKKyNkZWZpbmUgREZFU19ERUZf TDRfRVJSUwkoVUlDX1RSQU5TUE9SVF9VTlNVUFBPUlRFRF9IRUFERVJfVFlQRSB8XAorCQkJCSBV SUNfVFJBTlNQT1JUX1VOS05PV05fQ1BPUlRJRCB8XAorCQkJCSBVSUNfVFJBTlNQT1JUX05PX0NP Tk5FQ1RJT05fUlggfFwKKwkJCQkgVUlDX1RSQU5TUE9SVF9CQURfVEMpCisKK2VudW0geworCVVO SVBST19MMV81ID0gMCwvKiBQSFkgQWRhcHRlciAqLworCVVOSVBST19MMiwJLyogRGF0YSBMaW5r ICovCisJVU5JUFJPX0wzLAkvKiBOZXR3b3JrICovCisJVU5JUFJPX0w0LAkvKiBUcmFuc3BvcnQg Ki8KKwlVTklQUk9fRE1FLAkvKiBETUUgKi8KK307CisKKy8qCisgKiBVTklQUk8gcmVnaXN0ZXJz CisgKi8KKyNkZWZpbmUgVU5JUFJPX0NPTVBfVkVSU0lPTgkJCTB4MDAwCisjZGVmaW5lIFVOSVBS T19ETUVfUFdSX1JFUQkJCTB4MDkwCisjZGVmaW5lIFVOSVBST19ETUVfUFdSX1JFUV9QT1dFUk1P REUJCTB4MDk0CisjZGVmaW5lIFVOSVBST19ETUVfUFdSX1JFUV9MT0NBTEwyVElNRVIwCTB4MDk4 CisjZGVmaW5lIFVOSVBST19ETUVfUFdSX1JFUV9MT0NBTEwyVElNRVIxCTB4MDlDCisjZGVmaW5l IFVOSVBST19ETUVfUFdSX1JFUV9MT0NBTEwyVElNRVIyCTB4MEEwCisjZGVmaW5lIFVOSVBST19E TUVfUFdSX1JFUV9SRU1PVEVMMlRJTUVSMAkweDBBNAorI2RlZmluZSBVTklQUk9fRE1FX1BXUl9S RVFfUkVNT1RFTDJUSU1FUjEJMHgwQTgKKyNkZWZpbmUgVU5JUFJPX0RNRV9QV1JfUkVRX1JFTU9U RUwyVElNRVIyCTB4MEFDCisKKy8qCisgKiBVRlMgUHJvdGVjdG9yIHJlZ2lzdGVycworICovCisj ZGVmaW5lIFVGU1BSU0VDVVJJVFkJMHgwMTAKKyNkZWZpbmUgTlNTTVUJCUJJVCgxNCkKKyNkZWZp bmUgVUZTUFNCRUdJTjAJMHgyMDAKKyNkZWZpbmUgVUZTUFNFTkQwCTB4MjA0CisjZGVmaW5lIFVG U1BTTFVOMAkweDIwOAorI2RlZmluZSBVRlNQU0NUUkwwCTB4MjBDCisKKyNkZWZpbmUgQ05UUl9E SVZfVkFMIDQwCisKK3N0YXRpYyB2b2lkIGV4eW5vc191ZnNfYXV0b19jdHJsX2hjYyhzdHJ1Y3Qg ZXh5bm9zX3VmcyAqdWZzLCBib29sIGVuKTsKK3N0YXRpYyB2b2lkIGV4eW5vc191ZnNfY3RybF9j bGtzdG9wKHN0cnVjdCBleHlub3NfdWZzICp1ZnMsIGJvb2wgZW4pOworCitzdGF0aWMgaW5saW5l IHZvaWQgZXh5bm9zX3Vmc19lbmFibGVfYXV0b19jdHJsX2hjYyhzdHJ1Y3QgZXh5bm9zX3VmcyAq dWZzKQoreworCWV4eW5vc191ZnNfYXV0b19jdHJsX2hjYyh1ZnMsIHRydWUpOworfQorCitzdGF0 aWMgaW5saW5lIHZvaWQgZXh5bm9zX3Vmc19kaXNhYmxlX2F1dG9fY3RybF9oY2Moc3RydWN0IGV4 eW5vc191ZnMgKnVmcykKK3sKKwlleHlub3NfdWZzX2F1dG9fY3RybF9oY2ModWZzLCBmYWxzZSk7 Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBleHlub3NfdWZzX2Rpc2FibGVfYXV0b19jdHJsX2hj Y19zYXZlKAorCQkJCQlzdHJ1Y3QgZXh5bm9zX3VmcyAqdWZzLCB1MzIgKnZhbCkKK3sKKwkqdmFs ID0gaGNpX3JlYWRsKHVmcywgSENJX01JU0MpOworCWV4eW5vc191ZnNfYXV0b19jdHJsX2hjYyh1 ZnMsIGZhbHNlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGV4eW5vc191ZnNfYXV0b19jdHJs X2hjY19yZXN0b3JlKAorCQkJCQlzdHJ1Y3QgZXh5bm9zX3VmcyAqdWZzLCB1MzIgKnZhbCkKK3sK KwloY2lfd3JpdGVsKHVmcywgKnZhbCwgSENJX01JU0MpOworfQorCitzdGF0aWMgaW5saW5lIHZv aWQgZXh5bm9zX3Vmc19nYXRlX2Nsa3Moc3RydWN0IGV4eW5vc191ZnMgKnVmcykKK3sKKwlleHlu b3NfdWZzX2N0cmxfY2xrc3RvcCh1ZnMsIHRydWUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQg ZXh5bm9zX3Vmc191bmdhdGVfY2xrcyhzdHJ1Y3QgZXh5bm9zX3VmcyAqdWZzKQoreworCWV4eW5v c191ZnNfY3RybF9jbGtzdG9wKHVmcywgZmFsc2UpOworfQorCitzdGF0aWMgaW50IGV4eW5vczdf dWZzX2Rydl9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGV4eW5vc191ZnMgKnVmcykK K3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBleHlub3M3X3Vmc19wcmVfbGluayhzdHJ1 Y3QgZXh5bm9zX3VmcyAqdWZzKQoreworCXN0cnVjdCB1ZnNfaGJhICpoYmEgPSB1ZnMtPmhiYTsK Kwl1MzIgdmFsID0gdWZzLT5kcnZfZGF0YS0+dWljX2F0dHItPnBhX2RiZ19vcHRpb25fc3VpdGU7 CisJaW50IGk7CisKKwlleHlub3NfdWZzX2VuYWJsZV9vdl90bShoYmEpOworCWZvcl9lYWNoX3Vm c190eF9sYW5lKHVmcywgaSkKKwkJdWZzaGNkX2RtZV9zZXQoaGJhLCBVSUNfQVJHX01JQl9TRUwo MHgyOTcsIGkpLCAweDE3KTsKKwlmb3JfZWFjaF91ZnNfcnhfbGFuZSh1ZnMsIGkpIHsKKwkJdWZz aGNkX2RtZV9zZXQoaGJhLCBVSUNfQVJHX01JQl9TRUwoMHgzNjIsIGkpLCAweGZmKTsKKwkJdWZz aGNkX2RtZV9zZXQoaGJhLCBVSUNfQVJHX01JQl9TRUwoMHgzNjMsIGkpLCAweDAwKTsKKwl9CisJ ZXh5bm9zX3Vmc19kaXNhYmxlX292X3RtKGhiYSk7CisKKwlmb3JfZWFjaF91ZnNfdHhfbGFuZSh1 ZnMsIGkpCisJCXVmc2hjZF9kbWVfc2V0KGhiYSwKKwkJCVVJQ19BUkdfTUlCX1NFTChUWF9ISUJF Uk44X0NPTlRST0wsIGkpLCAweDApOworCXVmc2hjZF9kbWVfc2V0KGhiYSwgVUlDX0FSR19NSUIo UEFfREJHX1RYUEhZX0NGR1VQRFQpLCAweDEpOworCXVkZWxheSgxKTsKKwl1ZnNoY2RfZG1lX3Nl dChoYmEsIFVJQ19BUkdfTUlCKFBBX0RCR19PUFRJT05fU1VJVEUpLCB2YWwgfCAoMSA8PCAxMikp OworCXVmc2hjZF9kbWVfc2V0KGhiYSwgVUlDX0FSR19NSUIoUEFfREJHX1NLSVBfUkVTRVRfUEhZ KSwgMHgxKTsKKwl1ZnNoY2RfZG1lX3NldChoYmEsIFVJQ19BUkdfTUlCKFBBX0RCR19TS0lQX0xJ TkVfUkVTRVQpLCAweDEpOworCXVmc2hjZF9kbWVfc2V0KGhiYSwgVUlDX0FSR19NSUIoUEFfREJH X0xJTkVfUkVTRVRfUkVRKSwgMHgxKTsKKwl1ZGVsYXkoMTYwMCk7CisJdWZzaGNkX2RtZV9zZXQo aGJhLCBVSUNfQVJHX01JQihQQV9EQkdfT1BUSU9OX1NVSVRFKSwgdmFsKTsKKworCXJldHVybiAw OworfQorCitzdGF0aWMgaW50IGV4eW5vczdfdWZzX3Bvc3RfbGluayhzdHJ1Y3QgZXh5bm9zX3Vm cyAqdWZzKQoreworCXN0cnVjdCB1ZnNfaGJhICpoYmEgPSB1ZnMtPmhiYTsKKwlpbnQgaTsKKwor CWV4eW5vc191ZnNfZW5hYmxlX292X3RtKGhiYSk7CisJZm9yX2VhY2hfdWZzX3R4X2xhbmUodWZz LCBpKSB7CisJCXVmc2hjZF9kbWVfc2V0KGhiYSwgVUlDX0FSR19NSUJfU0VMKDB4MjhiLCBpKSwg MHg4Myk7CisJCXVmc2hjZF9kbWVfc2V0KGhiYSwgVUlDX0FSR19NSUJfU0VMKDB4MjlhLCBpKSwg MHgwNyk7CisJCXVmc2hjZF9kbWVfc2V0KGhiYSwgVUlDX0FSR19NSUJfU0VMKDB4Mjc3LCBpKSwK KwkJCVRYX0xJTkVSRVNFVF9OKGV4eW5vc191ZnNfY2FsY190aW1lX2NudHIodWZzLCAyMDAwMDAp KSk7CisJfQorCWV4eW5vc191ZnNfZGlzYWJsZV9vdl90bShoYmEpOworCisJZXh5bm9zX3Vmc19l bmFibGVfZGJnX21vZGUoaGJhKTsKKwl1ZnNoY2RfZG1lX3NldChoYmEsIFVJQ19BUkdfTUlCKFBB X1NBVkVDT05GSUdUSU1FKSwgMHhiYjgpOworCWV4eW5vc191ZnNfZGlzYWJsZV9kYmdfbW9kZSho YmEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZXh5bm9zN191ZnNfcHJlX3B3cl9j aGFuZ2Uoc3RydWN0IGV4eW5vc191ZnMgKnVmcywKKwkJCQkJCXN0cnVjdCB1ZnNfcGFfbGF5ZXJf YXR0ciAqcHdyKQoreworCXVuaXByb193cml0ZWwodWZzLCAweDIyLCBVTklQUk9fREJHX0ZPUkNF X0RNRV9DVFJMX1NUQVRFKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGV4eW5vczdf dWZzX3Bvc3RfcHdyX2NoYW5nZShzdHJ1Y3QgZXh5bm9zX3VmcyAqdWZzLAorCQkJCQkJc3RydWN0 IHVmc19wYV9sYXllcl9hdHRyICpwd3IpCit7CisJc3RydWN0IHVmc19oYmEgKmhiYSA9IHVmcy0+ aGJhOworCWludCBsYW5lcyA9IG1heF90KHUzMiwgcHdyLT5sYW5lX3J4LCBwd3ItPmxhbmVfdHgp OworCisJdWZzaGNkX2RtZV9zZXQoaGJhLCBVSUNfQVJHX01JQihQQV9EQkdfUlhQSFlfQ0ZHVVBE VCksIDB4MSk7CisKKwlpZiAobGFuZXMgPT0gMSkgeworCQlleHlub3NfdWZzX2VuYWJsZV9kYmdf bW9kZShoYmEpOworCQl1ZnNoY2RfZG1lX3NldChoYmEsIFVJQ19BUkdfTUlCKFBBX0NPTk5FQ1RF RFRYREFUQUxBTkVTKSwgMHgxKTsKKwkJZXh5bm9zX3Vmc19kaXNhYmxlX2RiZ19tb2RlKGhiYSk7 CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogZXh5bm9zX3Vmc19hdXRvX2N0cmxfaGNj IC0gSENJIGNvcmUgY2xvY2sgY29udHJvbCBieSBoL3cKKyAqIENvbnRyb2wgc2hvdWxkIGJlIGRp c2FibGVkIGluIHRoZSBiZWxvdyBjYXNlcworICogLSBCZWZvcmUgaG9zdCBjb250cm9sbGVyIFMv VyByZXNldAorICogLSBBY2Nlc3MgdG8gVUZTIHByb3RlY3RvcidzIHJlZ2lzdGVyCisgKi8KK3N0 YXRpYyB2b2lkIGV4eW5vc191ZnNfYXV0b19jdHJsX2hjYyhzdHJ1Y3QgZXh5bm9zX3VmcyAqdWZz LCBib29sIGVuKQoreworCXUzMiBtaXNjID0gaGNpX3JlYWRsKHVmcywgSENJX01JU0MpOworCisJ aWYgKGVuKQorCQloY2lfd3JpdGVsKHVmcywgbWlzYyB8IEhDSV9DT1JFQ0xLX0NUUkxfRU4sIEhD SV9NSVNDKTsKKwllbHNlCisJCWhjaV93cml0ZWwodWZzLCBtaXNjICYgfkhDSV9DT1JFQ0xLX0NU UkxfRU4sIEhDSV9NSVNDKTsKK30KKworc3RhdGljIHZvaWQgZXh5bm9zX3Vmc19jdHJsX2Nsa3N0 b3Aoc3RydWN0IGV4eW5vc191ZnMgKnVmcywgYm9vbCBlbikKK3sKKwl1MzIgY3RybCA9IGhjaV9y ZWFkbCh1ZnMsIEhDSV9DTEtTVE9QX0NUUkwpOworCXUzMiBtaXNjID0gaGNpX3JlYWRsKHVmcywg SENJX01JU0MpOworCisJaWYgKGVuKSB7CisJCWhjaV93cml0ZWwodWZzLCBtaXNjIHwgQ0xLX0NU UkxfRU5fTUFTSywgSENJX01JU0MpOworCQloY2lfd3JpdGVsKHVmcywgY3RybCB8IENMS19TVE9Q X01BU0ssIEhDSV9DTEtTVE9QX0NUUkwpOworCX0gZWxzZSB7CisJCWhjaV93cml0ZWwodWZzLCBj dHJsICYgfkNMS19TVE9QX01BU0ssIEhDSV9DTEtTVE9QX0NUUkwpOworCQloY2lfd3JpdGVsKHVm cywgbWlzYyAmIH5DTEtfQ1RSTF9FTl9NQVNLLCBIQ0lfTUlTQyk7CisJfQorfQorCitzdGF0aWMg aW50IGV4eW5vc191ZnNfZ2V0X2Nsa19pbmZvKHN0cnVjdCBleHlub3NfdWZzICp1ZnMpCit7CisJ c3RydWN0IHVmc19oYmEgKmhiYSA9IHVmcy0+aGJhOworCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQg PSAmaGJhLT5jbGtfbGlzdF9oZWFkOworCXN0cnVjdCB1ZnNfY2xrX2luZm8gKmNsa2k7CisJdTMy IHBjbGtfcmF0ZTsKKwl1MzIgZl9taW4sIGZfbWF4OworCXU4IGRpdiA9IDA7CisJaW50IHJldCA9 IDA7CisKKwlpZiAoIWhlYWQgfHwgbGlzdF9lbXB0eShoZWFkKSkKKwkJZ290byBvdXQ7CisKKwls aXN0X2Zvcl9lYWNoX2VudHJ5KGNsa2ksIGhlYWQsIGxpc3QpIHsKKwkJaWYgKCFJU19FUlIoY2xr aS0+Y2xrKSkgeworCQkJaWYgKCFzdHJjbXAoY2xraS0+bmFtZSwgImNvcmVfY2xrIikpCisJCQkJ dWZzLT5jbGtfaGNpX2NvcmUgPSBjbGtpLT5jbGs7CisJCQllbHNlIGlmICghc3RyY21wKGNsa2kt Pm5hbWUsICJzY2xrX3VuaXByb19tYWluIikpCisJCQkJdWZzLT5jbGtfdW5pcHJvX21haW4gPSBj bGtpLT5jbGs7CisJCX0KKwl9CisKKwlpZiAoIXVmcy0+Y2xrX2hjaV9jb3JlIHx8ICF1ZnMtPmNs a191bmlwcm9fbWFpbikgeworCQlkZXZfZXJyKGhiYS0+ZGV2LCAiZmFpbGVkIHRvIGdldCBjbGsg aW5mb1xuIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCXVmcy0+bWNs a19yYXRlID0gY2xrX2dldF9yYXRlKHVmcy0+Y2xrX3VuaXByb19tYWluKTsKKwlwY2xrX3JhdGUg PSBjbGtfZ2V0X3JhdGUodWZzLT5jbGtfaGNpX2NvcmUpOworCWZfbWluID0gdWZzLT5wY2xrX2F2 YWlsX21pbjsKKwlmX21heCA9IHVmcy0+cGNsa19hdmFpbF9tYXg7CisKKwlpZiAodWZzLT5vcHRz ICYgRVhZTk9TX1VGU19PUFRfSEFTX0FQQl9DTEtfQ1RSTCkgeworCQlkbyB7CisJCQlwY2xrX3Jh dGUgLz0gKGRpdiArIDEpOworCisJCQlpZiAocGNsa19yYXRlIDw9IGZfbWF4KQorCQkJCWJyZWFr OworCQkJZGl2Kys7CisJCX0gd2hpbGUgKHBjbGtfcmF0ZSA+PSBmX21pbik7CisJfQorCisJaWYg KHVubGlrZWx5KHBjbGtfcmF0ZSA8IGZfbWluIHx8IHBjbGtfcmF0ZSA+IGZfbWF4KSkgeworCQlk ZXZfZXJyKGhiYS0+ZGV2LCAibm90IGF2YWlsYWJsZSBwY2xrIHJhbmdlICVkXG4iLCBwY2xrX3Jh dGUpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwl1ZnMtPnBjbGtfcmF0 ZSA9IHBjbGtfcmF0ZTsKKwl1ZnMtPnBjbGtfZGl2ID0gZGl2OworCitvdXQ6CisJcmV0dXJuIHJl dDsKK30KKworc3RhdGljIHZvaWQgZXh5bm9zX3Vmc19zZXRfdW5pcHJvX3BjbGtfZGl2KHN0cnVj dCBleHlub3NfdWZzICp1ZnMpCit7CisJaWYgKHVmcy0+b3B0cyAmIEVYWU5PU19VRlNfT1BUX0hB U19BUEJfQ0xLX0NUUkwpIHsKKwkJdTMyIHZhbDsKKworCQl2YWwgPSBoY2lfcmVhZGwodWZzLCBI Q0lfVU5JUFJPX0FQQl9DTEtfQ1RSTCk7CisJCWhjaV93cml0ZWwodWZzLCBVTklQUk9fQVBCX0NM Syh2YWwsIHVmcy0+cGNsa19kaXYpLAorCQkJICAgSENJX1VOSVBST19BUEJfQ0xLX0NUUkwpOwor CX0KK30KKworc3RhdGljIHZvaWQgZXh5bm9zX3Vmc19zZXRfcHdtX2Nsa19kaXYoc3RydWN0IGV4 eW5vc191ZnMgKnVmcykKK3sKKwlzdHJ1Y3QgdWZzX2hiYSAqaGJhID0gdWZzLT5oYmE7CisJc3Ry dWN0IGV4eW5vc191ZnNfdWljX2F0dHIgKmF0dHIgPSB1ZnMtPmRydl9kYXRhLT51aWNfYXR0cjsK KworCXVmc2hjZF9kbWVfc2V0KGhiYSwKKwkJVUlDX0FSR19NSUIoQ01OX1BXTV9DTEtfQ1RSTCks IGF0dHItPmNtbl9wd21fY2xrX2N0cmwpOworfQorCitzdGF0aWMgdm9pZCBleHlub3NfdWZzX2Nh bGNfcHdtX2Nsa19kaXYoc3RydWN0IGV4eW5vc191ZnMgKnVmcykKK3sKKwlzdHJ1Y3QgdWZzX2hi YSAqaGJhID0gdWZzLT5oYmE7CisJc3RydWN0IGV4eW5vc191ZnNfdWljX2F0dHIgKmF0dHIgPSB1 ZnMtPmRydl9kYXRhLT51aWNfYXR0cjsKKwljb25zdCB1bnNpZ25lZCBpbnQgZGl2ID0gMzAsIG11 bHQgPSAyMDsKKwljb25zdCB1bnNpZ25lZCBsb25nIHB3bV9taW4gPSAzICogMTAwMCAqIDEwMDA7 CisJY29uc3QgdW5zaWduZWQgbG9uZyBwd21fbWF4ID0gOSAqIDEwMDAgKiAxMDAwOworCWNvbnN0 IGludCBkaXZzW10gPSB7MzIsIDE2LCA4LCA0fTsKKwl1bnNpZ25lZCBsb25nIGNsayA9IDAsIF9j bGssIGNsa19wZXJpb2Q7CisJaW50IGkgPSAwLCBjbGtfaWR4ID0gLTE7CisKKwljbGtfcGVyaW9k ID0gVU5JUFJPX1BDTEtfUEVSSU9EKHVmcyk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUo ZGl2cyk7IGkrKykgeworCQlfY2xrID0gTlNFQ19QRVJfU0VDICogbXVsdCAvIChjbGtfcGVyaW9k ICogZGl2c1tpXSAqIGRpdik7CisJCWlmIChfY2xrID49IHB3bV9taW4gJiYgX2NsayA8PSBwd21f bWF4KSB7CisJCQlpZiAoX2NsayA+IGNsaykgeworCQkJCWNsa19pZHggPSBpOworCQkJCWNsayA9 IF9jbGs7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoY2xrX2lkeCA9PSAtMSkgeworCQl1ZnNoY2Rf ZG1lX2dldChoYmEsIFVJQ19BUkdfTUlCKENNTl9QV01fQ0xLX0NUUkwpLCAmY2xrX2lkeCk7CisJ CWRldl9lcnIoaGJhLT5kZXYsCisJCQkiZmFpbGVkIHRvIGRlY2lkZSBwd20gY2xvY2sgZGl2aWRl ciwgd2lsbCBub3QgY2hhbmdlXG4iKTsKKwl9CisKKwlhdHRyLT5jbW5fcHdtX2Nsa19jdHJsID0g Y2xrX2lkeCAmIFBXTV9DTEtfQ1RSTF9NQVNLOworfQorCitsb25nIGV4eW5vc191ZnNfY2FsY190 aW1lX2NudHIoc3RydWN0IGV4eW5vc191ZnMgKnVmcywgbG9uZyBwZXJpb2QpCit7CisJY29uc3Qg aW50IHByZWNpc2UgPSAxMDsKKwlsb25nIHBjbGtfcmF0ZSA9IHVmcy0+cGNsa19yYXRlOworCWxv bmcgY2xrX3BlcmlvZCwgZnJhY3Rpb247CisKKwljbGtfcGVyaW9kID0gVU5JUFJPX1BDTEtfUEVS SU9EKHVmcyk7CisJZnJhY3Rpb24gPSAoKE5TRUNfUEVSX1NFQyAlIHBjbGtfcmF0ZSkgKiBwcmVj aXNlKSAvIHBjbGtfcmF0ZTsKKworCXJldHVybiAocGVyaW9kICogcHJlY2lzZSkgLyAoKGNsa19w ZXJpb2QgKiBwcmVjaXNlKSArIGZyYWN0aW9uKTsKK30KKworc3RhdGljIHZvaWQgZXh5bm9zX3Vm c19zcGVjaWZ5X3BoeV90aW1lX2F0dHIoc3RydWN0IGV4eW5vc191ZnMgKnVmcykKK3sKKwlzdHJ1 Y3QgZXh5bm9zX3Vmc191aWNfYXR0ciAqYXR0ciA9IHVmcy0+ZHJ2X2RhdGEtPnVpY19hdHRyOwor CXN0cnVjdCB1ZnNfcGh5X3RpbWVfY2ZnICp0X2NmZyA9ICZ1ZnMtPnRfY2ZnOworCisJdF9jZmct PnR4X2xpbmVyZXNldF9wID0KKwkJZXh5bm9zX3Vmc19jYWxjX3RpbWVfY250cih1ZnMsIGF0dHIt PnR4X2RpZl9wX25zZWMpOworCXRfY2ZnLT50eF9saW5lcmVzZXRfbiA9CisJCWV4eW5vc191ZnNf Y2FsY190aW1lX2NudHIodWZzLCBhdHRyLT50eF9kaWZfbl9uc2VjKTsKKwl0X2NmZy0+dHhfaGln aF96X2NudCA9CisJCWV4eW5vc191ZnNfY2FsY190aW1lX2NudHIodWZzLCBhdHRyLT50eF9oaWdo X3pfY250X25zZWMpOworCXRfY2ZnLT50eF9iYXNlX25fdmFsID0KKwkJZXh5bm9zX3Vmc19jYWxj X3RpbWVfY250cih1ZnMsIGF0dHItPnR4X2Jhc2VfdW5pdF9uc2VjKTsKKwl0X2NmZy0+dHhfZ3Jh bl9uX3ZhbCA9CisJCWV4eW5vc191ZnNfY2FsY190aW1lX2NudHIodWZzLCBhdHRyLT50eF9ncmFu X3VuaXRfbnNlYyk7CisJdF9jZmctPnR4X3NsZWVwX2NudCA9CisJCWV4eW5vc191ZnNfY2FsY190 aW1lX2NudHIodWZzLCBhdHRyLT50eF9zbGVlcF9jbnQpOworCisJdF9jZmctPnJ4X2xpbmVyZXNl dCA9CisJCWV4eW5vc191ZnNfY2FsY190aW1lX2NudHIodWZzLCBhdHRyLT5yeF9kaWZfcF9uc2Vj KTsKKwl0X2NmZy0+cnhfaGliZXJuOF93YWl0ID0KKwkJZXh5bm9zX3Vmc19jYWxjX3RpbWVfY250 cih1ZnMsIGF0dHItPnJ4X2hpYmVybjhfd2FpdF9uc2VjKTsKKwl0X2NmZy0+cnhfYmFzZV9uX3Zh bCA9CisJCWV4eW5vc191ZnNfY2FsY190aW1lX2NudHIodWZzLCBhdHRyLT5yeF9iYXNlX3VuaXRf bnNlYyk7CisJdF9jZmctPnJ4X2dyYW5fbl92YWwgPQorCQlleHlub3NfdWZzX2NhbGNfdGltZV9j bnRyKHVmcywgYXR0ci0+cnhfZ3Jhbl91bml0X25zZWMpOworCXRfY2ZnLT5yeF9zbGVlcF9jbnQg PQorCQlleHlub3NfdWZzX2NhbGNfdGltZV9jbnRyKHVmcywgYXR0ci0+cnhfc2xlZXBfY250KTsK Kwl0X2NmZy0+cnhfc3RhbGxfY250ID0KKwkJZXh5bm9zX3Vmc19jYWxjX3RpbWVfY250cih1ZnMs IGF0dHItPnJ4X3N0YWxsX2NudCk7Cit9CisKK3N0YXRpYyB2b2lkIGV4eW5vc191ZnNfY29uZmln X3BoeV90aW1lX2F0dHIoc3RydWN0IGV4eW5vc191ZnMgKnVmcykKK3sKKwlzdHJ1Y3QgdWZzX2hi YSAqaGJhID0gdWZzLT5oYmE7CisJc3RydWN0IHVmc19waHlfdGltZV9jZmcgKnRfY2ZnID0gJnVm cy0+dF9jZmc7CisJaW50IGk7CisKKwlleHlub3NfdWZzX3NldF9wd21fY2xrX2Rpdih1ZnMpOwor CisJZXh5bm9zX3Vmc19lbmFibGVfb3ZfdG0oaGJhKTsKKworCWZvcl9lYWNoX3Vmc19yeF9sYW5l KHVmcywgaSkgeworCQl1ZnNoY2RfZG1lX3NldChoYmEsIFVJQ19BUkdfTUlCX1NFTChSWF9GSUxM RVJfRU5BQkxFLCBpKSwKKwkJCQl1ZnMtPmRydl9kYXRhLT51aWNfYXR0ci0+cnhfZmlsbGVyX2Vu YWJsZSk7CisJCXVmc2hjZF9kbWVfc2V0KGhiYSwgVUlDX0FSR19NSUJfU0VMKFJYX0xJTkVSRVNF VF9WQUwsIGkpLAorCQkJCVJYX0xJTkVSRVNFVCh0X2NmZy0+cnhfbGluZXJlc2V0KSk7CisJCXVm c2hjZF9kbWVfc2V0KGhiYSwgVUlDX0FSR19NSUJfU0VMKFJYX0JBU0VfTlZBTF8wN18wMCwgaSks CisJCQkJUlhfQkFTRV9OVkFMX0wodF9jZmctPnJ4X2Jhc2Vfbl92YWwpKTsKKwkJdWZzaGNkX2Rt ZV9zZXQoaGJhLCBVSUNfQVJHX01JQl9TRUwoUlhfQkFTRV9OVkFMXzE1XzA4LCBpKSwKKwkJCQlS WF9CQVNFX05WQUxfSCh0X2NmZy0+cnhfYmFzZV9uX3ZhbCkpOworCQl1ZnNoY2RfZG1lX3NldCho YmEsIFVJQ19BUkdfTUlCX1NFTChSWF9HUkFOX05WQUxfMDdfMDAsIGkpLAorCQkJCVJYX0dSQU5f TlZBTF9MKHRfY2ZnLT5yeF9ncmFuX25fdmFsKSk7CisJCXVmc2hjZF9kbWVfc2V0KGhiYSwgVUlD X0FSR19NSUJfU0VMKFJYX0dSQU5fTlZBTF8xMF8wOCwgaSksCisJCQkJUlhfR1JBTl9OVkFMX0go dF9jZmctPnJ4X2dyYW5fbl92YWwpKTsKKwkJdWZzaGNkX2RtZV9zZXQoaGJhLCBVSUNfQVJHX01J Ql9TRUwoUlhfT1ZfU0xFRVBfQ05UX1RJTUVSLCBpKSwKKwkJCQlSWF9PVl9TTEVFUF9DTlQodF9j ZmctPnJ4X3NsZWVwX2NudCkpOworCQl1ZnNoY2RfZG1lX3NldChoYmEsIFVJQ19BUkdfTUlCX1NF TChSWF9PVl9TVEFMTF9DTlRfVElNRVIsIGkpLAorCQkJCVJYX09WX1NUQUxMX0NOVCh0X2NmZy0+ cnhfc3RhbGxfY250KSk7CisJfQorCisJZm9yX2VhY2hfdWZzX3R4X2xhbmUodWZzLCBpKSB7CisJ CXVmc2hjZF9kbWVfc2V0KGhiYSwgVUlDX0FSR19NSUJfU0VMKFRYX0xJTkVSRVNFVF9QX1ZBTCwg aSksCisJCQkJVFhfTElORVJFU0VUX1AodF9jZmctPnR4X2xpbmVyZXNldF9wKSk7CisJCXVmc2hj ZF9kbWVfc2V0KGhiYSwgVUlDX0FSR19NSUJfU0VMKFRYX0hJR0hfWl9DTlRfMDdfMDAsIGkpLAor CQkJCVRYX0hJR0hfWl9DTlRfTCh0X2NmZy0+dHhfaGlnaF96X2NudCkpOworCQl1ZnNoY2RfZG1l X3NldChoYmEsIFVJQ19BUkdfTUlCX1NFTChUWF9ISUdIX1pfQ05UXzExXzA4LCBpKSwKKwkJCQlU WF9ISUdIX1pfQ05UX0godF9jZmctPnR4X2hpZ2hfel9jbnQpKTsKKwkJdWZzaGNkX2RtZV9zZXQo aGJhLCBVSUNfQVJHX01JQl9TRUwoVFhfQkFTRV9OVkFMXzA3XzAwLCBpKSwKKwkJCQlUWF9CQVNF X05WQUxfTCh0X2NmZy0+dHhfYmFzZV9uX3ZhbCkpOworCQl1ZnNoY2RfZG1lX3NldChoYmEsIFVJ Q19BUkdfTUlCX1NFTChUWF9CQVNFX05WQUxfMTVfMDgsIGkpLAorCQkJCVRYX0JBU0VfTlZBTF9I KHRfY2ZnLT50eF9iYXNlX25fdmFsKSk7CisJCXVmc2hjZF9kbWVfc2V0KGhiYSwgVUlDX0FSR19N SUJfU0VMKFRYX0dSQU5fTlZBTF8wN18wMCwgaSksCisJCQkJVFhfR1JBTl9OVkFMX0wodF9jZmct PnR4X2dyYW5fbl92YWwpKTsKKwkJdWZzaGNkX2RtZV9zZXQoaGJhLCBVSUNfQVJHX01JQl9TRUwo VFhfR1JBTl9OVkFMXzEwXzA4LCBpKSwKKwkJCQlUWF9HUkFOX05WQUxfSCh0X2NmZy0+dHhfZ3Jh bl9uX3ZhbCkpOworCQl1ZnNoY2RfZG1lX3NldChoYmEsIFVJQ19BUkdfTUlCX1NFTChUWF9PVl9T TEVFUF9DTlRfVElNRVIsIGkpLAorCQkJCVRYX09WX0g4X0VOVEVSX0VOIHwKKwkJCQlUWF9PVl9T TEVFUF9DTlQodF9jZmctPnR4X3NsZWVwX2NudCkpOworCQl1ZnNoY2RfZG1lX3NldChoYmEsIFVJ Q19BUkdfTUlCX1NFTChUWF9NSU5fQUNUSVZBVEVUSU1FLCBpKSwKKwkJCQl1ZnMtPmRydl9kYXRh LT51aWNfYXR0ci0+dHhfbWluX2FjdGl2YXRldGltZSk7CisJfQorCisJZXh5bm9zX3Vmc19kaXNh YmxlX292X3RtKGhiYSk7Cit9CisKK3N0YXRpYyB2b2lkIGV4eW5vc191ZnNfY29uZmlnX3BoeV9j YXBfYXR0cihzdHJ1Y3QgZXh5bm9zX3VmcyAqdWZzKQoreworCXN0cnVjdCB1ZnNfaGJhICpoYmEg PSB1ZnMtPmhiYTsKKwlzdHJ1Y3QgZXh5bm9zX3Vmc191aWNfYXR0ciAqYXR0ciA9IHVmcy0+ZHJ2 X2RhdGEtPnVpY19hdHRyOworCWludCBpOworCisJZXh5bm9zX3Vmc19lbmFibGVfb3ZfdG0oaGJh KTsKKworCWZvcl9lYWNoX3Vmc19yeF9sYW5lKHVmcywgaSkgeworCQl1ZnNoY2RfZG1lX3NldCho YmEsCisJCQkJVUlDX0FSR19NSUJfU0VMKFJYX0hTX0cxX1NZTkNfTEVOR1RIX0NBUCwgaSksCisJ CQkJYXR0ci0+cnhfaHNfZzFfc3luY19sZW5fY2FwKTsKKwkJdWZzaGNkX2RtZV9zZXQoaGJhLAor CQkJCVVJQ19BUkdfTUlCX1NFTChSWF9IU19HMl9TWU5DX0xFTkdUSF9DQVAsIGkpLAorCQkJCWF0 dHItPnJ4X2hzX2cyX3N5bmNfbGVuX2NhcCk7CisJCXVmc2hjZF9kbWVfc2V0KGhiYSwKKwkJCQlV SUNfQVJHX01JQl9TRUwoUlhfSFNfRzNfU1lOQ19MRU5HVEhfQ0FQLCBpKSwKKwkJCQlhdHRyLT5y eF9oc19nM19zeW5jX2xlbl9jYXApOworCQl1ZnNoY2RfZG1lX3NldChoYmEsCisJCQkJVUlDX0FS R19NSUJfU0VMKFJYX0hTX0cxX1BSRVBfTEVOR1RIX0NBUCwgaSksCisJCQkJYXR0ci0+cnhfaHNf ZzFfcHJlcF9zeW5jX2xlbl9jYXApOworCQl1ZnNoY2RfZG1lX3NldChoYmEsCisJCQkJVUlDX0FS R19NSUJfU0VMKFJYX0hTX0cyX1BSRVBfTEVOR1RIX0NBUCwgaSksCisJCQkJYXR0ci0+cnhfaHNf ZzJfcHJlcF9zeW5jX2xlbl9jYXApOworCQl1ZnNoY2RfZG1lX3NldChoYmEsCisJCQkJVUlDX0FS R19NSUJfU0VMKFJYX0hTX0czX1BSRVBfTEVOR1RIX0NBUCwgaSksCisJCQkJYXR0ci0+cnhfaHNf ZzNfcHJlcF9zeW5jX2xlbl9jYXApOworCX0KKworCWlmIChhdHRyLT5yeF9hZHZfZmluZV9ncmFu X3N1cF9lbiA9PSAwKSB7CisJCWZvcl9lYWNoX3Vmc19yeF9sYW5lKHVmcywgaSkgeworCQkJdWZz aGNkX2RtZV9zZXQoaGJhLAorCQkJCVVJQ19BUkdfTUlCX1NFTChSWF9BRFZfR1JBTlVMQVJJVFlf Q0FQLCBpKSwgMCk7CisKKwkJCWlmIChhdHRyLT5yeF9taW5fYWN0dl90aW1lX2NhcCkKKwkJCQl1 ZnNoY2RfZG1lX3NldChoYmEsCisJCQkJCVVJQ19BUkdfTUlCX1NFTChSWF9NSU5fQUNUSVZBVEVU SU1FX0NBUCwKKwkJCQkJCWkpLCBhdHRyLT5yeF9taW5fYWN0dl90aW1lX2NhcCk7CisKKwkJCWlm IChhdHRyLT5yeF9oaWJlcm44X3RpbWVfY2FwKQorCQkJCXVmc2hjZF9kbWVfc2V0KGhiYSwKKwkJ CQkJVUlDX0FSR19NSUJfU0VMKFJYX0hJQkVSTjhUSU1FX0NBUCwgaSksCisJCQkJCQlhdHRyLT5y eF9oaWJlcm44X3RpbWVfY2FwKTsKKwkJfQorCX0gZWxzZSBpZiAoYXR0ci0+cnhfYWR2X2ZpbmVf Z3Jhbl9zdXBfZW4gPT0gMSkgeworCQlmb3JfZWFjaF91ZnNfcnhfbGFuZSh1ZnMsIGkpIHsKKwkJ CWlmIChhdHRyLT5yeF9hZHZfZmluZV9ncmFuX3N0ZXApCisJCQkJdWZzaGNkX2RtZV9zZXQoaGJh LAorCQkJCQlVSUNfQVJHX01JQl9TRUwoUlhfQURWX0dSQU5VTEFSSVRZX0NBUCwKKwkJCQkJCWkp LCBSWF9BRFZfRklORV9HUkFOX1NURVAoCisJCQkJCQlhdHRyLT5yeF9hZHZfZmluZV9ncmFuX3N0 ZXApKTsKKworCQkJaWYgKGF0dHItPnJ4X2Fkdl9taW5fYWN0dl90aW1lX2NhcCkKKwkJCQl1ZnNo Y2RfZG1lX3NldChoYmEsCisJCQkJCVVJQ19BUkdfTUlCX1NFTCgKKwkJCQkJCVJYX0FEVl9NSU5f QUNUSVZBVEVUSU1FX0NBUCwgaSksCisJCQkJCQlhdHRyLT5yeF9hZHZfbWluX2FjdHZfdGltZV9j YXApOworCisJCQlpZiAoYXR0ci0+cnhfYWR2X2hpYmVybjhfdGltZV9jYXApCisJCQkJdWZzaGNk X2RtZV9zZXQoaGJhLAorCQkJCQlVSUNfQVJHX01JQl9TRUwoUlhfQURWX0hJQkVSTjhUSU1FX0NB UCwKKwkJCQkJCWkpLAorCQkJCQkJYXR0ci0+cnhfYWR2X2hpYmVybjhfdGltZV9jYXApOworCQl9 CisJfQorCisJZXh5bm9zX3Vmc19kaXNhYmxlX292X3RtKGhiYSk7Cit9CisKK3N0YXRpYyB2b2lk IGV4eW5vc191ZnNfZXN0YWJsaXNoX2Nvbm50KHN0cnVjdCBleHlub3NfdWZzICp1ZnMpCit7CisJ c3RydWN0IHVmc19oYmEgKmhiYSA9IHVmcy0+aGJhOworCWVudW0geworCQlERVZfSUQJCT0gMHgw MCwKKwkJUEVFUl9ERVZfSUQJPSAweDAxLAorCQlQRUVSX0NQT1JUX0lECT0gMHgwMCwKKwkJVFJB RkZJQ19DTEFTUwk9IDB4MDAsCisJfTsKKworCS8qIGFsbG93IGNwb3J0IGF0dHJpYnV0ZXMgdG8g YmUgc2V0ICovCisJdWZzaGNkX2RtZV9zZXQoaGJhLCBVSUNfQVJHX01JQihUX0NPTk5FQ1RJT05T VEFURSksIENQT1JUX0lETEUpOworCisJLyogbG9jYWwgdW5pcHJvIGF0dHJpYnV0ZXMgKi8KKwl1 ZnNoY2RfZG1lX3NldChoYmEsIFVJQ19BUkdfTUlCKE5fREVWSUNFSUQpLCBERVZfSUQpOworCXVm c2hjZF9kbWVfc2V0KGhiYSwgVUlDX0FSR19NSUIoTl9ERVZJQ0VJRF9WQUxJRCksIFRSVUUpOwor CXVmc2hjZF9kbWVfc2V0KGhiYSwgVUlDX0FSR19NSUIoVF9QRUVSREVWSUNFSUQpLCBQRUVSX0RF Vl9JRCk7CisJdWZzaGNkX2RtZV9zZXQoaGJhLCBVSUNfQVJHX01JQihUX1BFRVJDUE9SVElEKSwg UEVFUl9DUE9SVF9JRCk7CisJdWZzaGNkX2RtZV9zZXQoaGJhLCBVSUNfQVJHX01JQihUX0NQT1JU RkxBR1MpLCBDUE9SVF9ERUZfRkxBR1MpOworCXVmc2hjZF9kbWVfc2V0KGhiYSwgVUlDX0FSR19N SUIoVF9UUkFGRklDQ0xBU1MpLCBUUkFGRklDX0NMQVNTKTsKKwl1ZnNoY2RfZG1lX3NldChoYmEs IFVJQ19BUkdfTUlCKFRfQ09OTkVDVElPTlNUQVRFKSwgQ1BPUlRfQ09OTkVDVEVEKTsKK30KKwor c3RhdGljIHZvaWQgZXh5bm9zX3Vmc19jb25maWdfc211KHN0cnVjdCBleHlub3NfdWZzICp1ZnMp Cit7CisJdTMyIHJlZywgdmFsOworCisJZXh5bm9zX3Vmc19kaXNhYmxlX2F1dG9fY3RybF9oY2Nf c2F2ZSh1ZnMsICZ2YWwpOworCisJLyogbWFrZSBlbmNyeXB0aW9uIGRpc2FibGVkIGJ5IGRlZmF1 bHQgKi8KKwlyZWcgPSB1ZnNwX3JlYWRsKHVmcywgVUZTUFJTRUNVUklUWSk7CisJdWZzcF93cml0 ZWwodWZzLCByZWcgfCBOU1NNVSwgVUZTUFJTRUNVUklUWSk7CisJdWZzcF93cml0ZWwodWZzLCAw eDAsIFVGU1BTQkVHSU4wKTsKKwl1ZnNwX3dyaXRlbCh1ZnMsIDB4ZmZmZmZmZmYsIFVGU1BTRU5E MCk7CisJdWZzcF93cml0ZWwodWZzLCAweGZmLCBVRlNQU0xVTjApOworCXVmc3Bfd3JpdGVsKHVm cywgMHhmMSwgVUZTUFNDVFJMMCk7CisKKwlleHlub3NfdWZzX2F1dG9fY3RybF9oY2NfcmVzdG9y ZSh1ZnMsICZ2YWwpOworfQorCitzdGF0aWMgdm9pZCBleHlub3NfdWZzX2NvbmZpZ19zeW5jX3Bh dHRlcm5fbWFzayhzdHJ1Y3QgZXh5bm9zX3VmcyAqdWZzLAorCQkJCQlzdHJ1Y3QgdWZzX3BhX2xh eWVyX2F0dHIgKnB3cikKK3sKKwlzdHJ1Y3QgdWZzX2hiYSAqaGJhID0gdWZzLT5oYmE7CisJdTgg ZyA9IG1heF90KHUzMiwgcHdyLT5nZWFyX3J4LCBwd3ItPmdlYXJfdHgpOworCXUzMiBtYXNrLCBz eW5jX2xlbjsKKwllbnVtIHsKKwkJU1lOQ19MRU5fRzEgPSA4MCAqIDEwMDAsIC8qIDgwdXMgKi8K KwkJU1lOQ19MRU5fRzIgPSA0MCAqIDEwMDAsIC8qIDQ0dXMgKi8KKwkJU1lOQ19MRU5fRzMgPSAy MCAqIDEwMDAsIC8qIDIwdXMgKi8KKwl9OworCWludCBpOworCisJaWYgKGcgPT0gMSkKKwkJc3lu Y19sZW4gPSBTWU5DX0xFTl9HMTsKKwllbHNlIGlmIChnID09IDIpCisJCXN5bmNfbGVuID0gU1lO Q19MRU5fRzI7CisJZWxzZSBpZiAoZyA9PSAzKQorCQlzeW5jX2xlbiA9IFNZTkNfTEVOX0czOwor CWVsc2UKKwkJcmV0dXJuOworCisJbWFzayA9IGV4eW5vc191ZnNfY2FsY190aW1lX2NudHIodWZz LCBzeW5jX2xlbik7CisJbWFzayA9IChtYXNrID4+IDgpICYgMHhmZjsKKworCWV4eW5vc191ZnNf ZW5hYmxlX292X3RtKGhiYSk7CisKKwlmb3JfZWFjaF91ZnNfcnhfbGFuZSh1ZnMsIGkpCisJCXVm c2hjZF9kbWVfc2V0KGhiYSwKKwkJCVVJQ19BUkdfTUlCX1NFTChSWF9TWU5DX01BU0tfTEVOR1RI LCBpKSwgbWFzayk7CisKKwlleHlub3NfdWZzX2Rpc2FibGVfb3ZfdG0oaGJhKTsKK30KKworc3Rh dGljIGludCBleHlub3NfdWZzX3ByZV9wd3JfbW9kZShzdHJ1Y3QgdWZzX2hiYSAqaGJhLAorCQkJ CXN0cnVjdCB1ZnNfcGFfbGF5ZXJfYXR0ciAqZGV2X21heF9wYXJhbXMsCisJCQkJc3RydWN0IHVm c19wYV9sYXllcl9hdHRyICpkZXZfcmVxX3BhcmFtcykKK3sKKwlzdHJ1Y3QgZXh5bm9zX3VmcyAq dWZzID0gdWZzaGNkX2dldF92YXJpYW50KGhiYSk7CisJc3RydWN0IHBoeSAqZ2VuZXJpY19waHkg PSB1ZnMtPnBoeTsKKwlzdHJ1Y3QgdWZzX2Rldl9wYXJhbXMgdWZzX2V4eW5vc19jYXA7CisJaW50 IHJldDsKKworCWlmICghZGV2X3JlcV9wYXJhbXMpIHsKKwkJcHJfZXJyKCIlczogaW5jb21pbmcg ZGV2X3JlcV9wYXJhbXMgaXMgTlVMTFxuIiwgX19mdW5jX18pOworCQlyZXQgPSAtRUlOVkFMOwor CQlnb3RvIG91dDsKKwl9CisKKworCXVmc19leHlub3NfY2FwLnR4X2xhbmVzID0gVUZTX0VYWU5P U19MSU1JVF9OVU1fTEFORVNfVFg7CisJdWZzX2V4eW5vc19jYXAucnhfbGFuZXMgPSBVRlNfRVhZ Tk9TX0xJTUlUX05VTV9MQU5FU19SWDsKKwl1ZnNfZXh5bm9zX2NhcC5oc19yeF9nZWFyID0gVUZT X0VYWU5PU19MSU1JVF9IU0dFQVJfUlg7CisJdWZzX2V4eW5vc19jYXAuaHNfdHhfZ2VhciA9IFVG U19FWFlOT1NfTElNSVRfSFNHRUFSX1RYOworCXVmc19leHlub3NfY2FwLnB3bV9yeF9nZWFyID0g VUZTX0VYWU5PU19MSU1JVF9QV01HRUFSX1JYOworCXVmc19leHlub3NfY2FwLnB3bV90eF9nZWFy ID0gVUZTX0VYWU5PU19MSU1JVF9QV01HRUFSX1RYOworCXVmc19leHlub3NfY2FwLnJ4X3B3cl9w d20gPSBVRlNfRVhZTk9TX0xJTUlUX1JYX1BXUl9QV007CisJdWZzX2V4eW5vc19jYXAudHhfcHdy X3B3bSA9IFVGU19FWFlOT1NfTElNSVRfVFhfUFdSX1BXTTsKKwl1ZnNfZXh5bm9zX2NhcC5yeF9w d3JfaHMgPSBVRlNfRVhZTk9TX0xJTUlUX1JYX1BXUl9IUzsKKwl1ZnNfZXh5bm9zX2NhcC50eF9w d3JfaHMgPSBVRlNfRVhZTk9TX0xJTUlUX1RYX1BXUl9IUzsKKwl1ZnNfZXh5bm9zX2NhcC5oc19y YXRlID0gVUZTX0VYWU5PU19MSU1JVF9IU19SQVRFOworCXVmc19leHlub3NfY2FwLmRlc2lyZWRf d29ya2luZ19tb2RlID0KKwkJCQlVRlNfRVhZTk9TX0xJTUlUX0RFU0lSRURfTU9ERTsKKworCXJl dCA9IHVmc2hjZF9nZXRfcHdyX2Rldl9wYXJhbSgmdWZzX2V4eW5vc19jYXAsCisJCQkJICAgICAg IGRldl9tYXhfcGFyYW1zLCBkZXZfcmVxX3BhcmFtcyk7CisJaWYgKHJldCkgeworCQlwcl9lcnIo IiVzOiBmYWlsZWQgdG8gZGV0ZXJtaW5lIGNhcGFiaWxpdGllc1xuIiwgX19mdW5jX18pOworCQln b3RvIG91dDsKKwl9CisKKwlpZiAodWZzLT5kcnZfZGF0YS0+cHJlX3B3cl9jaGFuZ2UpCisJCXVm cy0+ZHJ2X2RhdGEtPnByZV9wd3JfY2hhbmdlKHVmcywgZGV2X3JlcV9wYXJhbXMpOworCisJaWYg KHVmc2hjZF9pc19oc19tb2RlKGRldl9yZXFfcGFyYW1zKSkgeworCQlleHlub3NfdWZzX2NvbmZp Z19zeW5jX3BhdHRlcm5fbWFzayh1ZnMsIGRldl9yZXFfcGFyYW1zKTsKKworCQlzd2l0Y2ggKGRl dl9yZXFfcGFyYW1zLT5oc19yYXRlKSB7CisJCWNhc2UgUEFfSFNfTU9ERV9BOgorCQljYXNlIFBB X0hTX01PREVfQjoKKwkJCXBoeV9jYWxpYnJhdGUoZ2VuZXJpY19waHkpOworCQkJYnJlYWs7CisJ CX0KKwl9CisKKwlyZXR1cm4gMDsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCisjZGVmaW5lIFBX Ul9NT0RFX1NUUl9MRU4JNjQKK3N0YXRpYyBpbnQgZXh5bm9zX3Vmc19wb3N0X3B3cl9tb2RlKHN0 cnVjdCB1ZnNfaGJhICpoYmEsCisJCQkJc3RydWN0IHVmc19wYV9sYXllcl9hdHRyICpwd3JfbWF4 LAorCQkJCXN0cnVjdCB1ZnNfcGFfbGF5ZXJfYXR0ciAqcHdyX3JlcSkKK3sKKwlzdHJ1Y3QgZXh5 bm9zX3VmcyAqdWZzID0gdWZzaGNkX2dldF92YXJpYW50KGhiYSk7CisJc3RydWN0IHBoeSAqZ2Vu ZXJpY19waHkgPSB1ZnMtPnBoeTsKKwlpbnQgZ2VhciA9IG1heF90KHUzMiwgcHdyX3JlcS0+Z2Vh cl9yeCwgcHdyX3JlcS0+Z2Vhcl90eCk7CisJaW50IGxhbmVzID0gbWF4X3QodTMyLCBwd3JfcmVx LT5sYW5lX3J4LCBwd3JfcmVxLT5sYW5lX3R4KTsKKwljaGFyIHB3cl9zdHJbUFdSX01PREVfU1RS X0xFTl0gPSAiIjsKKworCS8qIGxldCBkZWZhdWx0IGJlIFBXTSBHZWFyIDEsIExhbmUgMSAqLwor CWlmICghZ2VhcikKKwkJZ2VhciA9IDE7CisKKwlpZiAoIWxhbmVzKQorCQlsYW5lcyA9IDE7CisK KwlpZiAodWZzLT5kcnZfZGF0YS0+cG9zdF9wd3JfY2hhbmdlKQorCQl1ZnMtPmRydl9kYXRhLT5w b3N0X3B3cl9jaGFuZ2UodWZzLCBwd3JfcmVxKTsKKworCWlmICgodWZzaGNkX2lzX2hzX21vZGUo cHdyX3JlcSkpKSB7CisJCXN3aXRjaCAocHdyX3JlcS0+aHNfcmF0ZSkgeworCQljYXNlIFBBX0hT X01PREVfQToKKwkJY2FzZSBQQV9IU19NT0RFX0I6CisJCQlwaHlfY2FsaWJyYXRlKGdlbmVyaWNf cGh5KTsKKwkJCWJyZWFrOworCQl9CisKKwkJc25wcmludGYocHdyX3N0ciwgUFdSX01PREVfU1RS X0xFTiwgIiVzIHNlcmllc18lcyBHXyVkIExfJWQiLAorCQkJIkZBU1QiLAlwd3JfcmVxLT5oc19y YXRlID09IFBBX0hTX01PREVfQSA/ICJBIiA6ICJCIiwKKwkJCWdlYXIsIGxhbmVzKTsKKwl9IGVs c2UgeworCQlzbnByaW50Zihwd3Jfc3RyLCBQV1JfTU9ERV9TVFJfTEVOLCAiJXMgR18lZCBMXyVk IiwKKwkJCSJTTE9XIiwgZ2VhciwgbGFuZXMpOworCX0KKworCWRldl9pbmZvKGhiYS0+ZGV2LCAi UG93ZXIgbW9kZSBjaGFuZ2VkIHRvIDogJXNcbiIsIHB3cl9zdHIpOworCisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyB2b2lkIGV4eW5vc191ZnNfc3BlY2lmeV9uZXh1c190X3hmZXJfcmVxKHN0cnVj dCB1ZnNfaGJhICpoYmEsCisJCQkJCQlpbnQgdGFnLCBib29sIG9wKQoreworCXN0cnVjdCBleHlu b3NfdWZzICp1ZnMgPSB1ZnNoY2RfZ2V0X3ZhcmlhbnQoaGJhKTsKKwl1MzIgdHlwZTsKKworCXR5 cGUgPSAgaGNpX3JlYWRsKHVmcywgSENJX1VUUkxfTkVYVVNfVFlQRSk7CisKKwlpZiAob3ApCisJ CWhjaV93cml0ZWwodWZzLCB0eXBlIHwgKDEgPDwgdGFnKSwgSENJX1VUUkxfTkVYVVNfVFlQRSk7 CisJZWxzZQorCQloY2lfd3JpdGVsKHVmcywgdHlwZSAmIH4oMSA8PCB0YWcpLCBIQ0lfVVRSTF9O RVhVU19UWVBFKTsKK30KKworc3RhdGljIHZvaWQgZXh5bm9zX3Vmc19zcGVjaWZ5X25leHVzX3Rf dG1fcmVxKHN0cnVjdCB1ZnNfaGJhICpoYmEsCisJCQkJCQlpbnQgdGFnLCB1OCBmdW5jKQorewor CXN0cnVjdCBleHlub3NfdWZzICp1ZnMgPSB1ZnNoY2RfZ2V0X3ZhcmlhbnQoaGJhKTsKKwl1MzIg dHlwZTsKKworCXR5cGUgPSAgaGNpX3JlYWRsKHVmcywgSENJX1VUTVJMX05FWFVTX1RZUEUpOwor CisJc3dpdGNoIChmdW5jKSB7CisJY2FzZSBVRlNfQUJPUlRfVEFTSzoKKwljYXNlIFVGU19RVUVS WV9UQVNLOgorCQloY2lfd3JpdGVsKHVmcywgdHlwZSB8ICgxIDw8IHRhZyksIEhDSV9VVE1STF9O RVhVU19UWVBFKTsKKwkJYnJlYWs7CisJY2FzZSBVRlNfQUJPUlRfVEFTS19TRVQ6CisJY2FzZSBV RlNfQ0xFQVJfVEFTS19TRVQ6CisJY2FzZSBVRlNfTE9HSUNBTF9SRVNFVDoKKwljYXNlIFVGU19R VUVSWV9UQVNLX1NFVDoKKwkJaGNpX3dyaXRlbCh1ZnMsIHR5cGUgJiB+KDEgPDwgdGFnKSwgSENJ X1VUTVJMX05FWFVTX1RZUEUpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZXh5bm9z X3Vmc19waHlfaW5pdChzdHJ1Y3QgZXh5bm9zX3VmcyAqdWZzKQoreworCXN0cnVjdCB1ZnNfaGJh ICpoYmEgPSB1ZnMtPmhiYTsKKwlzdHJ1Y3QgcGh5ICpnZW5lcmljX3BoeSA9IHVmcy0+cGh5Owor CWludCByZXQgPSAwOworCisJaWYgKHVmcy0+YXZhaWxfbG5fcnggPT0gMCB8fCB1ZnMtPmF2YWls X2xuX3R4ID09IDApIHsKKwkJdWZzaGNkX2RtZV9nZXQoaGJhLCBVSUNfQVJHX01JQihQQV9BVkFJ TFJYREFUQUxBTkVTKSwKKwkJCSZ1ZnMtPmF2YWlsX2xuX3J4KTsKKwkJdWZzaGNkX2RtZV9nZXQo aGJhLCBVSUNfQVJHX01JQihQQV9BVkFJTFRYREFUQUxBTkVTKSwKKwkJCSZ1ZnMtPmF2YWlsX2xu X3R4KTsKKwkJV0FSTih1ZnMtPmF2YWlsX2xuX3J4ICE9IHVmcy0+YXZhaWxfbG5fdHgsCisJCQki YXZhaWxhYmxlIGRhdGEgbGFuZSBpcyBub3QgZXF1YWwocng6JWQsIHR4OiVkKVxuIiwKKwkJCXVm cy0+YXZhaWxfbG5fcngsIHVmcy0+YXZhaWxfbG5fdHgpOworCX0KKworCXBoeV9zZXRfYnVzX3dp ZHRoKGdlbmVyaWNfcGh5LCB1ZnMtPmF2YWlsX2xuX3J4KTsKKwlyZXQgPSBwaHlfaW5pdChnZW5l cmljX3BoeSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGhiYS0+ZGV2LCAiJXM6IHBoeSBpbml0 IGZhaWxlZCwgcmV0ID0gJWRcbiIsCisJCQlfX2Z1bmNfXywgcmV0KTsKKwkJZ290byBvdXRfZXhp dF9waHk7CisJfQorCisJcmV0dXJuIDA7CisKK291dF9leGl0X3BoeToKKwlwaHlfZXhpdChnZW5l cmljX3BoeSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBleHlub3NfdWZzX2Nv bmZpZ191bmlwcm8oc3RydWN0IGV4eW5vc191ZnMgKnVmcykKK3sKKwlzdHJ1Y3QgdWZzX2hiYSAq aGJhID0gdWZzLT5oYmE7CisKKwl1ZnNoY2RfZG1lX3NldChoYmEsIFVJQ19BUkdfTUlCKFBBX0RC R19DTEtfUEVSSU9EKSwKKwkJRElWX1JPVU5EX1VQKE5TRUNfUEVSX1NFQywgdWZzLT5tY2xrX3Jh dGUpKTsKKwl1ZnNoY2RfZG1lX3NldChoYmEsIFVJQ19BUkdfTUlCKFBBX1RYVFJBSUxJTkdDTE9D S1MpLAorCQkJdWZzLT5kcnZfZGF0YS0+dWljX2F0dHItPnR4X3RyYWlsaW5nY2xrcyk7CisJdWZz aGNkX2RtZV9zZXQoaGJhLCBVSUNfQVJHX01JQihQQV9EQkdfT1BUSU9OX1NVSVRFKSwKKwkJCXVm cy0+ZHJ2X2RhdGEtPnVpY19hdHRyLT5wYV9kYmdfb3B0aW9uX3N1aXRlKTsKK30KKworc3RhdGlj IHZvaWQgZXh5bm9zX3Vmc19jb25maWdfaW50cihzdHJ1Y3QgZXh5bm9zX3VmcyAqdWZzLCB1MzIg ZXJycywgdTggaW5kZXgpCit7CisJc3dpdGNoIChpbmRleCkgeworCWNhc2UgVU5JUFJPX0wxXzU6 CisJCWhjaV93cml0ZWwodWZzLCBERkVTX0VSUl9FTiB8IGVycnMsIEhDSV9FUlJfRU5fUEFfTEFZ RVIpOworCQlicmVhazsKKwljYXNlIFVOSVBST19MMjoKKwkJaGNpX3dyaXRlbCh1ZnMsIERGRVNf RVJSX0VOIHwgZXJycywgSENJX0VSUl9FTl9ETF9MQVlFUik7CisJCWJyZWFrOworCWNhc2UgVU5J UFJPX0wzOgorCQloY2lfd3JpdGVsKHVmcywgREZFU19FUlJfRU4gfCBlcnJzLCBIQ0lfRVJSX0VO X05fTEFZRVIpOworCQlicmVhazsKKwljYXNlIFVOSVBST19MNDoKKwkJaGNpX3dyaXRlbCh1ZnMs IERGRVNfRVJSX0VOIHwgZXJycywgSENJX0VSUl9FTl9UX0xBWUVSKTsKKwkJYnJlYWs7CisJY2Fz ZSBVTklQUk9fRE1FOgorCQloY2lfd3JpdGVsKHVmcywgREZFU19FUlJfRU4gfCBlcnJzLCBIQ0lf RVJSX0VOX0RNRV9MQVlFUik7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGludCBleHlub3Nf dWZzX3ByZV9saW5rKHN0cnVjdCB1ZnNfaGJhICpoYmEpCit7CisJc3RydWN0IGV4eW5vc191ZnMg KnVmcyA9IHVmc2hjZF9nZXRfdmFyaWFudChoYmEpOworCisJLyogaGNpICovCisJZXh5bm9zX3Vm c19jb25maWdfaW50cih1ZnMsIERGRVNfREVGX0wyX0VSUlMsIFVOSVBST19MMik7CisJZXh5bm9z X3Vmc19jb25maWdfaW50cih1ZnMsIERGRVNfREVGX0wzX0VSUlMsIFVOSVBST19MMyk7CisJZXh5 bm9zX3Vmc19jb25maWdfaW50cih1ZnMsIERGRVNfREVGX0w0X0VSUlMsIFVOSVBST19MNCk7CisJ ZXh5bm9zX3Vmc19zZXRfdW5pcHJvX3BjbGtfZGl2KHVmcyk7CisKKwkvKiB1bmlwcm8gKi8KKwll eHlub3NfdWZzX2NvbmZpZ191bmlwcm8odWZzKTsKKworCS8qIG0tcGh5ICovCisJZXh5bm9zX3Vm c19waHlfaW5pdCh1ZnMpOworCWV4eW5vc191ZnNfY29uZmlnX3BoeV90aW1lX2F0dHIodWZzKTsK KwlleHlub3NfdWZzX2NvbmZpZ19waHlfY2FwX2F0dHIodWZzKTsKKworCWlmICh1ZnMtPmRydl9k YXRhLT5wcmVfbGluaykKKwkJdWZzLT5kcnZfZGF0YS0+cHJlX2xpbmsodWZzKTsKKworCXJldHVy biAwOworfQorCitzdGF0aWMgdm9pZCBleHlub3NfdWZzX2ZpdF9hZ2dyX3RpbWVvdXQoc3RydWN0 IGV4eW5vc191ZnMgKnVmcykKK3sKKwl1MzIgdmFsOworCisJdmFsID0gZXh5bm9zX3Vmc19jYWxj X3RpbWVfY250cih1ZnMsIElBVE9WQUxfTlNFQyAvIENOVFJfRElWX1ZBTCk7CisJaGNpX3dyaXRl bCh1ZnMsIHZhbCAmIENOVF9WQUxfMVVTX01BU0ssIEhDSV8xVVNfVE9fQ05UX1ZBTCk7Cit9CisK K3N0YXRpYyBpbnQgZXh5bm9zX3Vmc19wb3N0X2xpbmsoc3RydWN0IHVmc19oYmEgKmhiYSkKK3sK KwlzdHJ1Y3QgZXh5bm9zX3VmcyAqdWZzID0gdWZzaGNkX2dldF92YXJpYW50KGhiYSk7CisJc3Ry dWN0IHBoeSAqZ2VuZXJpY19waHkgPSB1ZnMtPnBoeTsKKwlzdHJ1Y3QgZXh5bm9zX3Vmc191aWNf YXR0ciAqYXR0ciA9IHVmcy0+ZHJ2X2RhdGEtPnVpY19hdHRyOworCisJZXh5bm9zX3Vmc19lc3Rh Ymxpc2hfY29ubnQodWZzKTsKKwlleHlub3NfdWZzX2ZpdF9hZ2dyX3RpbWVvdXQodWZzKTsKKwor CWhjaV93cml0ZWwodWZzLCAweGEsIEhDSV9EQVRBX1JFT1JERVIpOworCWhjaV93cml0ZWwodWZz LCBQUkRUX1NFVF9TSVpFKDEyKSwgSENJX1RYUFJEVF9FTlRSWV9TSVpFKTsKKwloY2lfd3JpdGVs KHVmcywgUFJEVF9TRVRfU0laRSgxMiksIEhDSV9SWFBSRFRfRU5UUllfU0laRSk7CisJaGNpX3dy aXRlbCh1ZnMsICgxIDw8IGhiYS0+bnV0cnMpIC0gMSwgSENJX1VUUkxfTkVYVVNfVFlQRSk7CisJ aGNpX3dyaXRlbCh1ZnMsICgxIDw8IGhiYS0+bnV0bXJzKSAtIDEsIEhDSV9VVE1STF9ORVhVU19U WVBFKTsKKwloY2lfd3JpdGVsKHVmcywgMHhmLCBIQ0lfQVhJRE1BX1JXREFUQV9CVVJTVF9MRU4p OworCisJaWYgKHVmcy0+b3B0cyAmIEVYWU5PU19VRlNfT1BUX1NLSVBfQ09OTkVDVElPTl9FU1RB QikKKwkJdWZzaGNkX2RtZV9zZXQoaGJhLAorCQkJVUlDX0FSR19NSUIoVF9EQkdfU0tJUF9JTklU X0hJQkVSTjhfRVhJVCksIFRSVUUpOworCisJaWYgKGF0dHItPnBhX2dyYW51bGFyaXR5KSB7CisJ CWV4eW5vc191ZnNfZW5hYmxlX2RiZ19tb2RlKGhiYSk7CisJCXVmc2hjZF9kbWVfc2V0KGhiYSwg VUlDX0FSR19NSUIoUEFfR1JBTlVMQVJJVFkpLAorCQkJCWF0dHItPnBhX2dyYW51bGFyaXR5KTsK KwkJZXh5bm9zX3Vmc19kaXNhYmxlX2RiZ19tb2RlKGhiYSk7CisKKwkJaWYgKGF0dHItPnBhX3Rh Y3RpdmF0ZSkKKwkJCXVmc2hjZF9kbWVfc2V0KGhiYSwgVUlDX0FSR19NSUIoUEFfVEFDVElWQVRF KSwKKwkJCQkJYXR0ci0+cGFfdGFjdGl2YXRlKTsKKwkJaWYgKGF0dHItPnBhX2hpYmVybjh0aW1l ICYmCisJCSAgICAhKHVmcy0+b3B0cyAmIEVYWU5PU19VRlNfT1BUX1VTRV9TV19ISUJFUk44X1RJ TUVSKSkKKwkJCXVmc2hjZF9kbWVfc2V0KGhiYSwgVUlDX0FSR19NSUIoUEFfSElCRVJOOFRJTUUp LAorCQkJCQlhdHRyLT5wYV9oaWJlcm44dGltZSk7CisJfQorCisJaWYgKHVmcy0+b3B0cyAmIEVY WU5PU19VRlNfT1BUX1VTRV9TV19ISUJFUk44X1RJTUVSKSB7CisJCWlmICghYXR0ci0+cGFfZ3Jh bnVsYXJpdHkpCisJCQl1ZnNoY2RfZG1lX2dldChoYmEsIFVJQ19BUkdfTUlCKFBBX0dSQU5VTEFS SVRZKSwKKwkJCQkJJmF0dHItPnBhX2dyYW51bGFyaXR5KTsKKwkJaWYgKCFhdHRyLT5wYV9oaWJl cm44dGltZSkKKwkJCXVmc2hjZF9kbWVfZ2V0KGhiYSwgVUlDX0FSR19NSUIoUEFfSElCRVJOOFRJ TUUpLAorCQkJCQkmYXR0ci0+cGFfaGliZXJuOHRpbWUpOworCQkvKgorCQkgKiBub3Qgd2FpdCBm b3IgSElCRVJOOCB0aW1lIHRvIGV4aXQgaGliZXJuYXRpb24KKwkJICovCisJCXVmc2hjZF9kbWVf c2V0KGhiYSwgVUlDX0FSR19NSUIoUEFfSElCRVJOOFRJTUUpLCAwKTsKKworCQlpZiAoYXR0ci0+ cGFfZ3JhbnVsYXJpdHkgPCAxIHx8IGF0dHItPnBhX2dyYW51bGFyaXR5ID4gNikgeworCQkJLyog VmFsaWQgcmFuZ2UgZm9yIGdyYW51bGFyaXR5OiAxIH4gNiAqLworCQkJZGV2X3dhcm4oaGJhLT5k ZXYsCisJCQkJIiVzOiBwYV9ncmFudWxhcnR5ICVkIGlzIGludmFsaWQsIGFzc3VtaW5nIGJhY2t3 YXJkcyBjb21wYXRpYmlsaXR5XG4iLAorCQkJCV9fZnVuY19fLAorCQkJCWF0dHItPnBhX2dyYW51 bGFyaXR5KTsKKwkJCWF0dHItPnBhX2dyYW51bGFyaXR5ID0gNjsKKwkJfQorCX0KKworCXBoeV9j YWxpYnJhdGUoZ2VuZXJpY19waHkpOworCisJaWYgKHVmcy0+ZHJ2X2RhdGEtPnBvc3RfbGluaykK KwkJdWZzLT5kcnZfZGF0YS0+cG9zdF9saW5rKHVmcyk7CisKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIGludCBleHlub3NfdWZzX3BhcnNlX2R0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGV4 eW5vc191ZnMgKnVmcykKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LT5vZl9ub2Rl OworCXN0cnVjdCBleHlub3NfdWZzX2Rydl9kYXRhICpkcnZfZGF0YSA9ICZleHlub3NfdWZzX2Ry dnM7CisJc3RydWN0IGV4eW5vc191ZnNfdWljX2F0dHIgKmF0dHI7CisJdTMyIGZyZXFbMl07CisJ aW50IHJldDsKKworCXdoaWxlIChkcnZfZGF0YS0+Y29tcGF0aWJsZSkgeworCQlpZiAob2ZfZGV2 aWNlX2lzX2NvbXBhdGlibGUobnAsIGRydl9kYXRhLT5jb21wYXRpYmxlKSkgeworCQkJdWZzLT5k cnZfZGF0YSA9IGRydl9kYXRhOworCQkJYnJlYWs7CisJCX0KKwkJZHJ2X2RhdGErKzsKKwl9CisK KwlpZiAodWZzLT5kcnZfZGF0YSAmJiB1ZnMtPmRydl9kYXRhLT51aWNfYXR0cikgeworCQlhdHRy ID0gdWZzLT5kcnZfZGF0YS0+dWljX2F0dHI7CisJfSBlbHNlIHsKKwkJZGV2X2VycihkZXYsICJm YWlsZWQgdG8gZ2V0IHVpYyBhdHRyaWJ1dGVzXG4iKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290 byBvdXQ7CisJfQorCisJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzJfYXJyYXkobnAsCisJCQki cGNsay1mcmVxLWF2YWlsLXJhbmdlIiwgZnJlcSwgQVJSQVlfU0laRShmcmVxKSk7CisJaWYgKCFy ZXQpIHsKKwkJdWZzLT5wY2xrX2F2YWlsX21pbiA9IGZyZXFbMF07CisJCXVmcy0+cGNsa19hdmFp bF9tYXggPSBmcmVxWzFdOworCX0gZWxzZSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdl dCBhdmFpbGFibGUgcGNsayByYW5nZVxuIik7CisJCWdvdG8gb3V0OworCX0KKworCWF0dHItPnJ4 X2Fkdl9maW5lX2dyYW5fc3VwX2VuID0gUlhfQURWX0ZJTkVfR1JBTl9TVVBfRU47CisJYXR0ci0+ cnhfYWR2X2ZpbmVfZ3Jhbl9zdGVwID0gUlhfQURWX0ZJTkVfR1JBTl9TVEVQX1ZBTDsKKwlhdHRy LT5yeF9hZHZfbWluX2FjdHZfdGltZV9jYXAgPSBSWF9BRFZfTUlOX0FDVFZfVElNRV9DQVA7CisJ YXR0ci0+cGFfZ3JhbnVsYXJpdHkgPSBQQV9HUkFOVUxBUklUWV9WQUw7CisJYXR0ci0+cGFfdGFj dGl2YXRlID0gUEFfVEFDVElWQVRFX1ZBTDsKKwlhdHRyLT5wYV9oaWJlcm44dGltZSA9IFBBX0hJ QkVSTjhUSU1FX1ZBTDsKKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZXh5 bm9zX3Vmc19pbml0KHN0cnVjdCB1ZnNfaGJhICpoYmEpCit7CisJc3RydWN0IGRldmljZSAqZGV2 ID0gaGJhLT5kZXY7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3Jt X2RldmljZShkZXYpOworCXN0cnVjdCBleHlub3NfdWZzICp1ZnM7CisJc3RydWN0IHJlc291cmNl ICpyZXM7CisJaW50IHJldDsKKworCXVmcyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqdWZz KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF1ZnMpCisJCXJldHVybiAtRU5PTUVNOworCisJLyogZXh5 bm9zLXNwZWNpZmljIGhjaSAqLworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUo cGRldiwgSU9SRVNPVVJDRV9NRU0sICJ2c19oY2kiKTsKKwl1ZnMtPnJlZ19oY2kgPSBkZXZtX2lv cmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpOworCWlmICghdWZzLT5yZWdfaGNpKSB7CisJCWRldl9l cnIoZGV2LCAiY2Fubm90IGlvcmVtYXAgZm9yIGhjaSB2ZW5kb3IgcmVnaXN0ZXJcbiIpOworCQly ZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiB1bmlwcm8gKi8KKwlyZXMgPSBwbGF0Zm9ybV9nZXRf cmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAidW5pcHJvIik7CisJdWZzLT5y ZWdfdW5pcHJvID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVzKTsKKwlpZiAoIXVmcy0+ cmVnX3VuaXBybykgeworCQlkZXZfZXJyKGRldiwgImNhbm5vdCBpb3JlbWFwIGZvciB1bmlwcm8g cmVnaXN0ZXJcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiB1ZnMgcHJvdGVjdG9y ICovCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNF X01FTSwgInVmc3AiKTsKKwl1ZnMtPnJlZ191ZnNwID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRl diwgcmVzKTsKKwlpZiAoIXVmcy0+cmVnX3Vmc3ApIHsKKwkJZGV2X2VycihkZXYsICJjYW5ub3Qg aW9yZW1hcCBmb3IgdWZzIHByb3RlY3RvciByZWdpc3RlclxuIik7CisJCXJldHVybiAtRU5PTUVN OworCX0KKworCXJldCA9IGV4eW5vc191ZnNfcGFyc2VfZHQoZGV2LCB1ZnMpOworCWlmIChyZXQp IHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IGR0IGluZm8uXG4iKTsKKwkJZ290byBv dXQ7CisJfQorCisJdWZzLT5waHkgPSBkZXZtX3BoeV9nZXQoZGV2LCAidWZzLXBoeSIpOworCWlm IChJU19FUlIodWZzLT5waHkpKSB7CisJCXJldCA9IFBUUl9FUlIodWZzLT5waHkpOworCQlkZXZf ZXJyKGRldiwgImZhaWxlZCB0byBnZXQgdWZzLXBoeVxuIik7CisJCWdvdG8gb3V0OworCX0KKwor CXJldCA9IHBoeV9wb3dlcl9vbih1ZnMtPnBoeSk7CisJaWYgKHJldCkKKwkJZ290byBwaHlfb2Zm OworCisJdWZzLT5oYmEgPSBoYmE7CisJdWZzLT5vcHRzID0gdWZzLT5kcnZfZGF0YS0+b3B0czsK Kwl1ZnMtPnJ4X3NlbF9pZHggPSBQQV9NQVhEQVRBTEFORVM7CisJaWYgKHVmcy0+b3B0cyAmIEVY WU5PU19VRlNfT1BUX0JST0tFTl9SWF9TRUxfSURYKQorCQl1ZnMtPnJ4X3NlbF9pZHggPSAwOwor CWhiYS0+cHJpdiA9ICh2b2lkICopdWZzOworCWhiYS0+cXVpcmtzID0gdWZzLT5kcnZfZGF0YS0+ cXVpcmtzOworCWlmICh1ZnMtPmRydl9kYXRhLT5kcnZfaW5pdCkgeworCQlyZXQgPSB1ZnMtPmRy dl9kYXRhLT5kcnZfaW5pdChkZXYsIHVmcyk7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoZGV2 LCAiZmFpbGVkIHRvIGluaXQgZHJ2LWRhdGFcbiIpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisK KwlyZXQgPSBleHlub3NfdWZzX2dldF9jbGtfaW5mbyh1ZnMpOworCWlmIChyZXQpCisJCWdvdG8g b3V0OworCWV4eW5vc191ZnNfc3BlY2lmeV9waHlfdGltZV9hdHRyKHVmcyk7CisJZXh5bm9zX3Vm c19jb25maWdfc211KHVmcyk7CisJcmV0dXJuIDA7CisKK3BoeV9vZmY6CisJcGh5X3Bvd2VyX29m Zih1ZnMtPnBoeSk7CitvdXQ6CisJaGJhLT5wcml2ID0gTlVMTDsKKwlyZXR1cm4gcmV0OworfQor CitzdGF0aWMgaW50IGV4eW5vc191ZnNfaG9zdF9yZXNldChzdHJ1Y3QgdWZzX2hiYSAqaGJhKQor eworCXN0cnVjdCBleHlub3NfdWZzICp1ZnMgPSB1ZnNoY2RfZ2V0X3ZhcmlhbnQoaGJhKTsKKwl1 bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygxKTsKKwl1 MzIgdmFsOworCWludCByZXQgPSAwOworCisJZXh5bm9zX3Vmc19kaXNhYmxlX2F1dG9fY3RybF9o Y2Nfc2F2ZSh1ZnMsICZ2YWwpOworCisJaGNpX3dyaXRlbCh1ZnMsIFVGU19TV19SU1RfTUFTSywg SENJX1NXX1JTVCk7CisKKwlkbyB7CisJCWlmICghKGhjaV9yZWFkbCh1ZnMsIEhDSV9TV19SU1Qp ICYgVUZTX1NXX1JTVF9NQVNLKSkKKwkJCWdvdG8gb3V0OworCX0gd2hpbGUgKHRpbWVfYmVmb3Jl KGppZmZpZXMsIHRpbWVvdXQpKTsKKworCWRldl9lcnIoaGJhLT5kZXYsICJ0aW1lb3V0IGhvc3Qg c3ctcmVzZXRcbiIpOworCXJldCA9IC1FVElNRURPVVQ7CisKK291dDoKKwlleHlub3NfdWZzX2F1 dG9fY3RybF9oY2NfcmVzdG9yZSh1ZnMsICZ2YWwpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRp YyB2b2lkIGV4eW5vc191ZnNfZGV2X2h3X3Jlc2V0KHN0cnVjdCB1ZnNfaGJhICpoYmEpCit7CisJ c3RydWN0IGV4eW5vc191ZnMgKnVmcyA9IHVmc2hjZF9nZXRfdmFyaWFudChoYmEpOworCisJaGNp X3dyaXRlbCh1ZnMsIDAgPDwgMCwgSENJX0dQSU9fT1VUKTsKKwl1ZGVsYXkoNSk7CisJaGNpX3dy aXRlbCh1ZnMsIDEgPDwgMCwgSENJX0dQSU9fT1VUKTsKK30KKworc3RhdGljIHZvaWQgZXh5bm9z X3Vmc19wcmVfaGliZXJuOChzdHJ1Y3QgdWZzX2hiYSAqaGJhLCB1OCBlbnRlcikKK3sKKwlzdHJ1 Y3QgZXh5bm9zX3VmcyAqdWZzID0gdWZzaGNkX2dldF92YXJpYW50KGhiYSk7CisJc3RydWN0IGV4 eW5vc191ZnNfdWljX2F0dHIgKmF0dHIgPSB1ZnMtPmRydl9kYXRhLT51aWNfYXR0cjsKKworCWlm ICghZW50ZXIpIHsKKwkJaWYgKHVmcy0+b3B0cyAmIEVYWU5PU19VRlNfT1BUX0JST0tFTl9BVVRP X0NMS19DVFJMKQorCQkJZXh5bm9zX3Vmc19kaXNhYmxlX2F1dG9fY3RybF9oY2ModWZzKTsKKwkJ ZXh5bm9zX3Vmc191bmdhdGVfY2xrcyh1ZnMpOworCisJCWlmICh1ZnMtPm9wdHMgJiBFWFlOT1Nf VUZTX09QVF9VU0VfU1dfSElCRVJOOF9USU1FUikgeworCQkJY29uc3QgdW5zaWduZWQgaW50IGdy YW51bGFyaXR5X3RibFtdID0geworCQkJCTEsIDQsIDgsIDE2LCAzMiwgMTAwCisJCQl9OworCQkJ aW50IGg4X3RpbWUgPSBhdHRyLT5wYV9oaWJlcm44dGltZSAqCisJCQkJZ3JhbnVsYXJpdHlfdGJs W2F0dHItPnBhX2dyYW51bGFyaXR5IC0gMV07CisJCQl1bnNpZ25lZCBsb25nIHVzOworCQkJczY0 IGRlbHRhOworCisJCQlkbyB7CisJCQkJZGVsdGEgPSBoOF90aW1lIC0ga3RpbWVfdXNfZGVsdGEo a3RpbWVfZ2V0KCksCisJCQkJCQkJdWZzLT5lbnRyeV9oaWJlcm44X3QpOworCQkJCWlmIChkZWx0 YSA8PSAwKQorCQkJCQlicmVhazsKKworCQkJCXVzID0gbWluX3QoczY0LCBkZWx0YSwgVVNFQ19Q RVJfTVNFQyk7CisJCQkJaWYgKHVzID49IDEwKQorCQkJCQl1c2xlZXBfcmFuZ2UodXMsIHVzICsg MTApOworCQkJfSB3aGlsZSAoMSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGV4eW5vc191 ZnNfcG9zdF9oaWJlcm44KHN0cnVjdCB1ZnNfaGJhICpoYmEsIHU4IGVudGVyKQoreworCXN0cnVj dCBleHlub3NfdWZzICp1ZnMgPSB1ZnNoY2RfZ2V0X3ZhcmlhbnQoaGJhKTsKKworCWlmICghZW50 ZXIpIHsKKwkJdTMyIGN1cl9tb2RlID0gMDsKKwkJdTMyIHB3cm1vZGU7CisKKwkJaWYgKHVmc2hj ZF9pc19oc19tb2RlKCZ1ZnMtPmRldl9yZXFfcGFyYW1zKSkKKwkJCXB3cm1vZGUgPSBGQVNUX01P REU7CisJCWVsc2UKKwkJCXB3cm1vZGUgPSBTTE9XX01PREU7CisKKwkJdWZzaGNkX2RtZV9nZXQo aGJhLCBVSUNfQVJHX01JQihQQV9QV1JNT0RFKSwgJmN1cl9tb2RlKTsKKwkJaWYgKGN1cl9tb2Rl ICE9IChwd3Jtb2RlIDw8IDQgfCBwd3Jtb2RlKSkgeworCQkJZGV2X3dhcm4oaGJhLT5kZXYsICIl czogcG93ZXIgbW9kZSBjaGFuZ2VcbiIsIF9fZnVuY19fKTsKKwkJCWhiYS0+cHdyX2luZm8ucHdy X3J4ID0gKGN1cl9tb2RlID4+IDQpICYgMHhmOworCQkJaGJhLT5wd3JfaW5mby5wd3JfdHggPSBj dXJfbW9kZSAmIDB4ZjsKKwkJCXVmc2hjZF9jb25maWdfcHdyX21vZGUoaGJhLCAmaGJhLT5tYXhf cHdyX2luZm8uaW5mbyk7CisJCX0KKworCQlpZiAoISh1ZnMtPm9wdHMgJiBFWFlOT1NfVUZTX09Q VF9TS0lQX0NPTk5FQ1RJT05fRVNUQUIpKQorCQkJZXh5bm9zX3Vmc19lc3RhYmxpc2hfY29ubnQo dWZzKTsKKwl9IGVsc2UgeworCQl1ZnMtPmVudHJ5X2hpYmVybjhfdCA9IGt0aW1lX2dldCgpOwor CQlleHlub3NfdWZzX2dhdGVfY2xrcyh1ZnMpOworCQlpZiAodWZzLT5vcHRzICYgRVhZTk9TX1VG U19PUFRfQlJPS0VOX0FVVE9fQ0xLX0NUUkwpCisJCQlleHlub3NfdWZzX2VuYWJsZV9hdXRvX2N0 cmxfaGNjKHVmcyk7CisJfQorfQorCitzdGF0aWMgaW50IGV4eW5vc191ZnNfaGNlX2VuYWJsZV9u b3RpZnkoc3RydWN0IHVmc19oYmEgKmhiYSwKKwkJCQkJZW51bSB1ZnNfbm90aWZ5X2NoYW5nZV9z dGF0dXMgc3RhdHVzKQoreworCXN0cnVjdCBleHlub3NfdWZzICp1ZnMgPSB1ZnNoY2RfZ2V0X3Zh cmlhbnQoaGJhKTsKKwlpbnQgcmV0ID0gMDsKKworCXN3aXRjaCAoc3RhdHVzKSB7CisJY2FzZSBQ UkVfQ0hBTkdFOgorCQlyZXQgPSBleHlub3NfdWZzX2hvc3RfcmVzZXQoaGJhKTsKKwkJaWYgKHJl dCkKKwkJCXJldHVybiByZXQ7CisJCWV4eW5vc191ZnNfZGV2X2h3X3Jlc2V0KGhiYSk7CisJCWJy ZWFrOworCWNhc2UgUE9TVF9DSEFOR0U6CisJCWV4eW5vc191ZnNfY2FsY19wd21fY2xrX2Rpdih1 ZnMpOworCQlpZiAoISh1ZnMtPm9wdHMgJiBFWFlOT1NfVUZTX09QVF9CUk9LRU5fQVVUT19DTEtf Q1RSTCkpCisJCQlleHlub3NfdWZzX2VuYWJsZV9hdXRvX2N0cmxfaGNjKHVmcyk7CisJCWJyZWFr OworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZXh5bm9zX3Vmc19saW5rX3N0 YXJ0dXBfbm90aWZ5KHN0cnVjdCB1ZnNfaGJhICpoYmEsCisJCQkJCSAgZW51bSB1ZnNfbm90aWZ5 X2NoYW5nZV9zdGF0dXMgc3RhdHVzKQoreworCWludCByZXQgPSAwOworCisJc3dpdGNoIChzdGF0 dXMpIHsKKwljYXNlIFBSRV9DSEFOR0U6CisJCXJldCA9IGV4eW5vc191ZnNfcHJlX2xpbmsoaGJh KTsKKwkJYnJlYWs7CisJY2FzZSBQT1NUX0NIQU5HRToKKwkJcmV0ID0gZXh5bm9zX3Vmc19wb3N0 X2xpbmsoaGJhKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlu dCBleHlub3NfdWZzX3B3cl9jaGFuZ2Vfbm90aWZ5KHN0cnVjdCB1ZnNfaGJhICpoYmEsCisJCQkJ ZW51bSB1ZnNfbm90aWZ5X2NoYW5nZV9zdGF0dXMgc3RhdHVzLAorCQkJCXN0cnVjdCB1ZnNfcGFf bGF5ZXJfYXR0ciAqZGV2X21heF9wYXJhbXMsCisJCQkJc3RydWN0IHVmc19wYV9sYXllcl9hdHRy ICpkZXZfcmVxX3BhcmFtcykKK3sKKwlpbnQgcmV0ID0gMDsKKworCXN3aXRjaCAoc3RhdHVzKSB7 CisJY2FzZSBQUkVfQ0hBTkdFOgorCQlyZXQgPSBleHlub3NfdWZzX3ByZV9wd3JfbW9kZShoYmEs IGRldl9tYXhfcGFyYW1zLAorCQkJCQkgICAgICBkZXZfcmVxX3BhcmFtcyk7CisJCWJyZWFrOwor CWNhc2UgUE9TVF9DSEFOR0U6CisJCXJldCA9IGV4eW5vc191ZnNfcG9zdF9wd3JfbW9kZShoYmEs IE5VTEwsIGRldl9yZXFfcGFyYW1zKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKK30K Kworc3RhdGljIHZvaWQgZXh5bm9zX3Vmc19oaWJlcm44X25vdGlmeShzdHJ1Y3QgdWZzX2hiYSAq aGJhLAorCQkJCSAgICAgZW51bSB1aWNfY21kX2RtZSBlbnRlciwKKwkJCQkgICAgIGVudW0gdWZz X25vdGlmeV9jaGFuZ2Vfc3RhdHVzIG5vdGlmeSkKK3sKKwlzd2l0Y2ggKCh1OClub3RpZnkpIHsK KwljYXNlIFBSRV9DSEFOR0U6CisJCWV4eW5vc191ZnNfcHJlX2hpYmVybjgoaGJhLCBlbnRlcik7 CisJCWJyZWFrOworCWNhc2UgUE9TVF9DSEFOR0U6CisJCWV4eW5vc191ZnNfcG9zdF9oaWJlcm44 KGhiYSwgZW50ZXIpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZXh5bm9zX3Vmc19z dXNwZW5kKHN0cnVjdCB1ZnNfaGJhICpoYmEsIGVudW0gdWZzX3BtX29wIHBtX29wKQoreworCXN0 cnVjdCBleHlub3NfdWZzICp1ZnMgPSB1ZnNoY2RfZ2V0X3ZhcmlhbnQoaGJhKTsKKworCWlmICgh dWZzaGNkX2lzX2xpbmtfYWN0aXZlKGhiYSkpCisJCXBoeV9wb3dlcl9vZmYodWZzLT5waHkpOwor CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZXh5bm9zX3Vmc19yZXN1bWUoc3RydWN0IHVm c19oYmEgKmhiYSwgZW51bSB1ZnNfcG1fb3AgcG1fb3ApCit7CisJc3RydWN0IGV4eW5vc191ZnMg KnVmcyA9IHVmc2hjZF9nZXRfdmFyaWFudChoYmEpOworCisJaWYgKCF1ZnNoY2RfaXNfbGlua19h Y3RpdmUoaGJhKSkKKwkJcGh5X3Bvd2VyX29uKHVmcy0+cGh5KTsKKworCWV4eW5vc191ZnNfY29u ZmlnX3NtdSh1ZnMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdWZzX2hiYV92 YXJpYW50X29wcyB1ZnNfaGJhX2V4eW5vc19vcHMgPSB7CisJLm5hbWUJCQkJPSAiZXh5bm9zX3Vm cyIsCisJLmluaXQJCQkJPSBleHlub3NfdWZzX2luaXQsCisJLmhjZV9lbmFibGVfbm90aWZ5CQk9 IGV4eW5vc191ZnNfaGNlX2VuYWJsZV9ub3RpZnksCisJLmxpbmtfc3RhcnR1cF9ub3RpZnkJCT0g ZXh5bm9zX3Vmc19saW5rX3N0YXJ0dXBfbm90aWZ5LAorCS5wd3JfY2hhbmdlX25vdGlmeQkJPSBl eHlub3NfdWZzX3B3cl9jaGFuZ2Vfbm90aWZ5LAorCS5zZXR1cF94ZmVyX3JlcQkJCT0gZXh5bm9z X3Vmc19zcGVjaWZ5X25leHVzX3RfeGZlcl9yZXEsCisJLnNldHVwX3Rhc2tfbWdtdAkJPSBleHlu b3NfdWZzX3NwZWNpZnlfbmV4dXNfdF90bV9yZXEsCisJLmhpYmVybjhfbm90aWZ5CQkJPSBleHlu b3NfdWZzX2hpYmVybjhfbm90aWZ5LAorCS5zdXNwZW5kCQkJPSBleHlub3NfdWZzX3N1c3BlbmQs CisJLnJlc3VtZQkJCQk9IGV4eW5vc191ZnNfcmVzdW1lLAorfTsKKworc3RhdGljIGludCBleHlu b3NfdWZzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IGVycjsK KwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCisJZXJyID0gdWZzaGNkX3BsdGZy bV9pbml0KHBkZXYsICZ1ZnNfaGJhX2V4eW5vc19vcHMpOworCWlmIChlcnIpCisJCWRldl9lcnIo ZGV2LCAidWZzaGNkX3BsdGZybV9pbml0KCkgZmFpbGVkICVkXG4iLCBlcnIpOworCisJcmV0dXJu IGVycjsKK30KKworc3RhdGljIGludCBleHlub3NfdWZzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1f ZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB1ZnNfaGJhICpoYmEgPSAgcGxhdGZvcm1fZ2V0X2Ry dmRhdGEocGRldik7CisKKwlwbV9ydW50aW1lX2dldF9zeW5jKCYocGRldiktPmRldik7CisJdWZz aGNkX3JlbW92ZShoYmEpOworCXJldHVybiAwOworfQorCitzdHJ1Y3QgZXh5bm9zX3Vmc19kcnZf ZGF0YSBleHlub3NfdWZzX2RydnMgPSB7CisKKwkuY29tcGF0aWJsZQkJPSAic2Ftc3VuZyxleHlu b3M3LXVmcyIsCisJLnVpY19hdHRyCQk9ICZleHlub3M3X3VpY19hdHRyLAorCS5xdWlya3MJCQk9 IFVGU0hDRF9RVUlSS19QUkRUX0JZVEVfR1JBTiB8CisJCQkJICBVRlNIQ0lfUVVJUktfQlJPS0VO X1JFUV9MSVNUX0NMUiB8CisJCQkJICBVRlNIQ0lfUVVJUktfQlJPS0VOX0hDRSB8CisJCQkJICBV RlNIQ0lfUVVJUktfU0tJUF9SRVNFVF9JTlRSX0FHR1IgfAorCQkJCSAgVUZTSENEX1FVSVJLX0JS T0tFTl9PQ1NfRkFUQUxfRVJST1IsCisJLm9wdHMJCQk9IEVYWU5PU19VRlNfT1BUX0hBU19BUEJf Q0xLX0NUUkwgfAorCQkJCSAgRVhZTk9TX1VGU19PUFRfQlJPS0VOX0FVVE9fQ0xLX0NUUkwgfAor CQkJCSAgRVhZTk9TX1VGU19PUFRfQlJPS0VOX1JYX1NFTF9JRFggfAorCQkJCSAgRVhZTk9TX1VG U19PUFRfU0tJUF9DT05ORUNUSU9OX0VTVEFCIHwKKwkJCQkgIEVYWU5PU19VRlNfT1BUX1VTRV9T V19ISUJFUk44X1RJTUVSLAorCS5kcnZfaW5pdAkJPSBleHlub3M3X3Vmc19kcnZfaW5pdCwKKwku cHJlX2xpbmsJCT0gZXh5bm9zN191ZnNfcHJlX2xpbmssCisJLnBvc3RfbGluawkJPSBleHlub3M3 X3Vmc19wb3N0X2xpbmssCisJLnByZV9wd3JfY2hhbmdlCQk9IGV4eW5vczdfdWZzX3ByZV9wd3Jf Y2hhbmdlLAorCS5wb3N0X3B3cl9jaGFuZ2UJPSBleHlub3M3X3Vmc19wb3N0X3B3cl9jaGFuZ2Us Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBleHlub3NfdWZzX29mX21h dGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczctdWZzIiwKKwkgIC5k YXRhCSAgICAgID0gJmV4eW5vc191ZnNfZHJ2cyB9LAorCXt9LAorfTsKKworc3RhdGljIGNvbnN0 IHN0cnVjdCBkZXZfcG1fb3BzIGV4eW5vc191ZnNfcG1fb3BzID0geworCS5zdXNwZW5kCT0gdWZz aGNkX3BsdGZybV9zdXNwZW5kLAorCS5yZXN1bWUJCT0gdWZzaGNkX3BsdGZybV9yZXN1bWUsCisJ LnJ1bnRpbWVfc3VzcGVuZCA9IHVmc2hjZF9wbHRmcm1fcnVudGltZV9zdXNwZW5kLAorCS5ydW50 aW1lX3Jlc3VtZSAgPSB1ZnNoY2RfcGx0ZnJtX3J1bnRpbWVfcmVzdW1lLAorCS5ydW50aW1lX2lk bGUgICAgPSB1ZnNoY2RfcGx0ZnJtX3J1bnRpbWVfaWRsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qg cGxhdGZvcm1fZHJpdmVyIGV4eW5vc191ZnNfcGx0Zm9ybSA9IHsKKwkucHJvYmUJPSBleHlub3Nf dWZzX3Byb2JlLAorCS5yZW1vdmUJPSBleHlub3NfdWZzX3JlbW92ZSwKKwkuc2h1dGRvd24gPSB1 ZnNoY2RfcGx0ZnJtX3NodXRkb3duLAorCS5kcml2ZXIJPSB7CisJCS5uYW1lCT0gImV4eW5vcy11 ZnNoYyIsCisJCS5wbQk9ICZleHlub3NfdWZzX3BtX29wcywKKwkJLm9mX21hdGNoX3RhYmxlID0g b2ZfbWF0Y2hfcHRyKGV4eW5vc191ZnNfb2ZfbWF0Y2gpLAorCX0sCit9OworbW9kdWxlX3BsYXRm b3JtX2RyaXZlcihleHlub3NfdWZzX3BsdGZvcm0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3Np L3Vmcy91ZnMtZXh5bm9zLmggYi9kcml2ZXJzL3Njc2kvdWZzL3Vmcy1leHlub3MuaApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjgxM2IyODZhZmQ5ZAotLS0gL2Rldi9u dWxsCisrKyBiL2RyaXZlcnMvc2NzaS91ZnMvdWZzLWV4eW5vcy5oCkBAIC0wLDAgKzEsMjg0IEBA CisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCisvKgorICogVUZT IEhvc3QgQ29udHJvbGxlciBkcml2ZXIgZm9yIEV4eW5vcyBzcGVjaWZpYyBleHRlbnNpb25zCisg KgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0 ZC4KKyAqCisgKi8KKworI2lmbmRlZiBfVUZTX0VYWU5PU19IXworI2RlZmluZSBfVUZTX0VYWU5P U19IXworCisvKgorICogVU5JUFJPIHJlZ2lzdGVycworICovCisjZGVmaW5lIFVOSVBST19EQkdf Rk9SQ0VfRE1FX0NUUkxfU1RBVEUJCTB4MTUwCisKKy8qCisgKiBNSUJzIGZvciBQQSBkZWJ1ZyBy ZWdpc3RlcnMKKyAqLworI2RlZmluZSBQQV9EQkdfQ0xLX1BFUklPRAkweDk1MTQKKyNkZWZpbmUg UEFfREJHX1RYUEhZX0NGR1VQRFQJMHg5NTE4CisjZGVmaW5lIFBBX0RCR19SWFBIWV9DRkdVUERU CTB4OTUxOQorI2RlZmluZSBQQV9EQkdfTU9ERQkJMHg5NTI5CisjZGVmaW5lIFBBX0RCR19TS0lQ X1JFU0VUX1BIWQkweDk1MzkKKyNkZWZpbmUgUEFfREJHX09WX1RNCQkweDk1NDAKKyNkZWZpbmUg UEFfREJHX1NLSVBfTElORV9SRVNFVAkweDk1NDEKKyNkZWZpbmUgUEFfREJHX0xJTkVfUkVTRVRf UkVRCTB4OTU0MworI2RlZmluZSBQQV9EQkdfT1BUSU9OX1NVSVRFCTB4OTU2NAorI2RlZmluZSBQ QV9EQkdfT1BUSU9OX1NVSVRFX0RZTgkweDk1NjUKKworLyoKKyAqIE1JQnMgZm9yIFRyYW5zcG9y dCBMYXllciBkZWJ1ZyByZWdpc3RlcnMKKyAqLworI2RlZmluZSBUX0RCR19TS0lQX0lOSVRfSElC RVJOOF9FWElUCTB4YzAwMQorCisvKgorICogRXh5bm9zIE1QSFkgYXR0cmlidXRlcworICovCisj ZGVmaW5lIFRYX0xJTkVSRVNFVF9OX1ZBTAkweDAyNzcKKyNkZWZpbmUgVFhfTElORVJFU0VUX04o dikJKCgodikgPj4gMTApICYgMHhGRikKKyNkZWZpbmUgVFhfTElORVJFU0VUX1BfVkFMCTB4MDI3 RAorI2RlZmluZSBUWF9MSU5FUkVTRVRfUCh2KQkoKCh2KSA+PiAxMikgJiAweEZGKQorI2RlZmlu ZSBUWF9PVl9TTEVFUF9DTlRfVElNRVIJMHgwMjhFCisjZGVmaW5lIFRYX09WX0g4X0VOVEVSX0VO CSgxIDw8IDcpCisjZGVmaW5lIFRYX09WX1NMRUVQX0NOVCh2KQkoKCh2KSA+PiA1KSAmIDB4N0Yp CisjZGVmaW5lIFRYX0hJR0hfWl9DTlRfMTFfMDgJMHgwMjhDCisjZGVmaW5lIFRYX0hJR0hfWl9D TlRfSCh2KQkoKCh2KSA+PiA4KSAmIDB4RikKKyNkZWZpbmUgVFhfSElHSF9aX0NOVF8wN18wMAkw eDAyOEQKKyNkZWZpbmUgVFhfSElHSF9aX0NOVF9MKHYpCSgodikgJiAweEZGKQorI2RlZmluZSBU WF9CQVNFX05WQUxfMDdfMDAJMHgwMjkzCisjZGVmaW5lIFRYX0JBU0VfTlZBTF9MKHYpCSgodikg JiAweEZGKQorI2RlZmluZSBUWF9CQVNFX05WQUxfMTVfMDgJMHgwMjk0CisjZGVmaW5lIFRYX0JB U0VfTlZBTF9IKHYpCSgoKHYpID4+IDgpICYgMHhGRikKKyNkZWZpbmUgVFhfR1JBTl9OVkFMXzA3 XzAwCTB4MDI5NQorI2RlZmluZSBUWF9HUkFOX05WQUxfTCh2KQkoKHYpICYgMHhGRikKKyNkZWZp bmUgVFhfR1JBTl9OVkFMXzEwXzA4CTB4MDI5NgorI2RlZmluZSBUWF9HUkFOX05WQUxfSCh2KQko KCh2KSA+PiA4KSAmIDB4MykKKworI2RlZmluZSBSWF9GSUxMRVJfRU5BQkxFCTB4MDMxNgorI2Rl ZmluZSBSWF9GSUxMRVJfRU4JCSgxIDw8IDEpCisjZGVmaW5lIFJYX0xJTkVSRVNFVF9WQUwJMHgw MzE3CisjZGVmaW5lIFJYX0xJTkVSRVNFVCh2KQkoKCh2KSA+PiAxMikgJiAweEZGKQorI2RlZmlu ZSBSWF9MQ0NfSUdOT1JFCQkweDAzMTgKKyNkZWZpbmUgUlhfU1lOQ19NQVNLX0xFTkdUSAkweDAz MjEKKyNkZWZpbmUgUlhfSElCRVJOOF9XQUlUX1ZBTF9CSVRfMjBfMTYJMHgwMzMxCisjZGVmaW5l IFJYX0hJQkVSTjhfV0FJVF9WQUxfQklUXzE1XzA4CTB4MDMzMgorI2RlZmluZSBSWF9ISUJFUk44 X1dBSVRfVkFMX0JJVF8wN18wMAkweDAzMzMKKyNkZWZpbmUgUlhfT1ZfU0xFRVBfQ05UX1RJTUVS CTB4MDM0MAorI2RlZmluZSBSWF9PVl9TTEVFUF9DTlQodikJKCgodikgPj4gNikgJiAweDFGKQor I2RlZmluZSBSWF9PVl9TVEFMTF9DTlRfVElNRVIJMHgwMzQxCisjZGVmaW5lIFJYX09WX1NUQUxM X0NOVCh2KQkoKCh2KSA+PiA0KSAmIDB4RkYpCisjZGVmaW5lIFJYX0JBU0VfTlZBTF8wN18wMAkw eDAzNTUKKyNkZWZpbmUgUlhfQkFTRV9OVkFMX0wodikJKCh2KSAmIDB4RkYpCisjZGVmaW5lIFJY X0JBU0VfTlZBTF8xNV8wOAkweDAzNTQKKyNkZWZpbmUgUlhfQkFTRV9OVkFMX0godikJKCgodikg Pj4gOCkgJiAweEZGKQorI2RlZmluZSBSWF9HUkFOX05WQUxfMDdfMDAJMHgwMzUzCisjZGVmaW5l IFJYX0dSQU5fTlZBTF9MKHYpCSgodikgJiAweEZGKQorI2RlZmluZSBSWF9HUkFOX05WQUxfMTBf MDgJMHgwMzUyCisjZGVmaW5lIFJYX0dSQU5fTlZBTF9IKHYpCSgoKHYpID4+IDgpICYgMHgzKQor CisjZGVmaW5lIENNTl9QV01fQ0xLX0NUUkwJMHgwNDAyCisjZGVmaW5lIFBXTV9DTEtfQ1RSTF9N QVNLCTB4MworCisjZGVmaW5lIElBVE9WQUxfTlNFQwkJMjAwMDAJLyogdW5pdDogbnMgKi8KKyNk ZWZpbmUgVU5JUFJPX1BDTEtfUEVSSU9EKHVmcykgKE5TRUNfUEVSX1NFQyAvIHVmcy0+cGNsa19y YXRlKQorCitzdHJ1Y3QgZXh5bm9zX3VmczsKKworLyogdmVuZG9yIHNwZWNpZmljIHByZS1kZWZp bmVkIHBhcmFtZXRlcnMgKi8KKyNkZWZpbmUgU0xPVyAxCisjZGVmaW5lIEZBU1QgMgorCisjZGVm aW5lIFVGU19FWFlOT1NfTElNSVRfTlVNX0xBTkVTX1JYCTIKKyNkZWZpbmUgVUZTX0VYWU5PU19M SU1JVF9OVU1fTEFORVNfVFgJMgorI2RlZmluZSBVRlNfRVhZTk9TX0xJTUlUX0hTR0VBUl9SWAlV RlNfSFNfRzMKKyNkZWZpbmUgVUZTX0VYWU5PU19MSU1JVF9IU0dFQVJfVFgJVUZTX0hTX0czCisj ZGVmaW5lIFVGU19FWFlOT1NfTElNSVRfUFdNR0VBUl9SWAlVRlNfUFdNX0c0CisjZGVmaW5lIFVG U19FWFlOT1NfTElNSVRfUFdNR0VBUl9UWAlVRlNfUFdNX0c0CisjZGVmaW5lIFVGU19FWFlOT1Nf TElNSVRfUlhfUFdSX1BXTQlTTE9XX01PREUKKyNkZWZpbmUgVUZTX0VYWU5PU19MSU1JVF9UWF9Q V1JfUFdNCVNMT1dfTU9ERQorI2RlZmluZSBVRlNfRVhZTk9TX0xJTUlUX1JYX1BXUl9IUwlGQVNU X01PREUKKyNkZWZpbmUgVUZTX0VYWU5PU19MSU1JVF9UWF9QV1JfSFMJRkFTVF9NT0RFCisjZGVm aW5lIFVGU19FWFlOT1NfTElNSVRfSFNfUkFURQkJUEFfSFNfTU9ERV9CCisjZGVmaW5lIFVGU19F WFlOT1NfTElNSVRfREVTSVJFRF9NT0RFCUZBU1QKKworI2RlZmluZSBSWF9BRFZfRklORV9HUkFO X1NVUF9FTgkweDEKKyNkZWZpbmUgUlhfQURWX0ZJTkVfR1JBTl9TVEVQX1ZBTAkweDMKKyNkZWZp bmUgUlhfQURWX01JTl9BQ1RWX1RJTUVfQ0FQCTB4OQorCisjZGVmaW5lIFBBX0dSQU5VTEFSSVRZ X1ZBTAkweDYKKyNkZWZpbmUgUEFfVEFDVElWQVRFX1ZBTAkweDMKKyNkZWZpbmUgUEFfSElCRVJO OFRJTUVfVkFMCTB4MjAKKworc3RydWN0IGV4eW5vc191ZnNfdWljX2F0dHIgeworCS8qIFRYIEF0 dHJpYnV0ZXMgKi8KKwl1bnNpZ25lZCBpbnQgdHhfdHJhaWxpbmdjbGtzOworCXVuc2lnbmVkIGlu dCB0eF9kaWZfcF9uc2VjOworCXVuc2lnbmVkIGludCB0eF9kaWZfbl9uc2VjOworCXVuc2lnbmVk IGludCB0eF9oaWdoX3pfY250X25zZWM7CisJdW5zaWduZWQgaW50IHR4X2Jhc2VfdW5pdF9uc2Vj OworCXVuc2lnbmVkIGludCB0eF9ncmFuX3VuaXRfbnNlYzsKKwl1bnNpZ25lZCBpbnQgdHhfc2xl ZXBfY250OworCXVuc2lnbmVkIGludCB0eF9taW5fYWN0aXZhdGV0aW1lOworCS8qIFJYIEF0dHJp YnV0ZXMgKi8KKwl1bnNpZ25lZCBpbnQgcnhfZmlsbGVyX2VuYWJsZTsKKwl1bnNpZ25lZCBpbnQg cnhfZGlmX3BfbnNlYzsKKwl1bnNpZ25lZCBpbnQgcnhfaGliZXJuOF93YWl0X25zZWM7CisJdW5z aWduZWQgaW50IHJ4X2Jhc2VfdW5pdF9uc2VjOworCXVuc2lnbmVkIGludCByeF9ncmFuX3VuaXRf bnNlYzsKKwl1bnNpZ25lZCBpbnQgcnhfc2xlZXBfY250OworCXVuc2lnbmVkIGludCByeF9zdGFs bF9jbnQ7CisJdW5zaWduZWQgaW50IHJ4X2hzX2cxX3N5bmNfbGVuX2NhcDsKKwl1bnNpZ25lZCBp bnQgcnhfaHNfZzJfc3luY19sZW5fY2FwOworCXVuc2lnbmVkIGludCByeF9oc19nM19zeW5jX2xl bl9jYXA7CisJdW5zaWduZWQgaW50IHJ4X2hzX2cxX3ByZXBfc3luY19sZW5fY2FwOworCXVuc2ln bmVkIGludCByeF9oc19nMl9wcmVwX3N5bmNfbGVuX2NhcDsKKwl1bnNpZ25lZCBpbnQgcnhfaHNf ZzNfcHJlcF9zeW5jX2xlbl9jYXA7CisJLyogQ29tbW9uIEF0dHJpYnV0ZXMgKi8KKwl1bnNpZ25l ZCBpbnQgY21uX3B3bV9jbGtfY3RybDsKKwkvKiBJbnRlcm5hbCBBdHRyaWJ1dGVzICovCisJdW5z aWduZWQgaW50IHBhX2RiZ19vcHRpb25fc3VpdGU7CisJLyogQ2hhbmdlYWJsZSBBdHRyaWJ1dGVz ICovCisJdW5zaWduZWQgaW50IHJ4X2Fkdl9maW5lX2dyYW5fc3VwX2VuOworCXVuc2lnbmVkIGlu dCByeF9hZHZfZmluZV9ncmFuX3N0ZXA7CisJdW5zaWduZWQgaW50IHJ4X21pbl9hY3R2X3RpbWVf Y2FwOworCXVuc2lnbmVkIGludCByeF9oaWJlcm44X3RpbWVfY2FwOworCXVuc2lnbmVkIGludCBy eF9hZHZfbWluX2FjdHZfdGltZV9jYXA7CisJdW5zaWduZWQgaW50IHJ4X2Fkdl9oaWJlcm44X3Rp bWVfY2FwOworCXVuc2lnbmVkIGludCBwYV9ncmFudWxhcml0eTsKKwl1bnNpZ25lZCBpbnQgcGFf dGFjdGl2YXRlOworCXVuc2lnbmVkIGludCBwYV9oaWJlcm44dGltZTsKK307CisKK3N0cnVjdCBl eHlub3NfdWZzX2Rydl9kYXRhIHsKKwljaGFyICpjb21wYXRpYmxlOworCXN0cnVjdCBleHlub3Nf dWZzX3VpY19hdHRyICp1aWNfYXR0cjsKKwl1bnNpZ25lZCBpbnQgcXVpcmtzOworCXVuc2lnbmVk IGludCBvcHRzOworCS8qIFNvQydzIHNwZWNpZmljIG9wZXJhdGlvbnMgKi8KKwlpbnQgKCpkcnZf aW5pdCkoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZXh5bm9zX3VmcyAqdWZzKTsKKwlpbnQg KCpwcmVfbGluaykoc3RydWN0IGV4eW5vc191ZnMgKnVmcyk7CisJaW50ICgqcG9zdF9saW5rKShz dHJ1Y3QgZXh5bm9zX3VmcyAqdWZzKTsKKwlpbnQgKCpwcmVfcHdyX2NoYW5nZSkoc3RydWN0IGV4 eW5vc191ZnMgKnVmcywKKwkJCQlzdHJ1Y3QgdWZzX3BhX2xheWVyX2F0dHIgKnB3cik7CisJaW50 ICgqcG9zdF9wd3JfY2hhbmdlKShzdHJ1Y3QgZXh5bm9zX3VmcyAqdWZzLAorCQkJCXN0cnVjdCB1 ZnNfcGFfbGF5ZXJfYXR0ciAqcHdyKTsKK307CisKK3N0cnVjdCB1ZnNfcGh5X3RpbWVfY2ZnIHsK Kwl1MzIgdHhfbGluZXJlc2V0X3A7CisJdTMyIHR4X2xpbmVyZXNldF9uOworCXUzMiB0eF9oaWdo X3pfY250OworCXUzMiB0eF9iYXNlX25fdmFsOworCXUzMiB0eF9ncmFuX25fdmFsOworCXUzMiB0 eF9zbGVlcF9jbnQ7CisJdTMyIHJ4X2xpbmVyZXNldDsKKwl1MzIgcnhfaGliZXJuOF93YWl0Owor CXUzMiByeF9iYXNlX25fdmFsOworCXUzMiByeF9ncmFuX25fdmFsOworCXUzMiByeF9zbGVlcF9j bnQ7CisJdTMyIHJ4X3N0YWxsX2NudDsKK307CisKK3N0cnVjdCBleHlub3NfdWZzIHsKKwlzdHJ1 Y3QgdWZzX2hiYSAqaGJhOworCXN0cnVjdCBwaHkgKnBoeTsKKwl2b2lkIF9faW9tZW0gKnJlZ19o Y2k7CisJdm9pZCBfX2lvbWVtICpyZWdfdW5pcHJvOworCXZvaWQgX19pb21lbSAqcmVnX3Vmc3A7 CisJc3RydWN0IGNsayAqY2xrX2hjaV9jb3JlOworCXN0cnVjdCBjbGsgKmNsa191bmlwcm9fbWFp bjsKKwlzdHJ1Y3QgY2xrICpjbGtfYXBiOworCXUzMiBwY2xrX3JhdGU7CisJdTMyIHBjbGtfZGl2 OworCXUzMiBwY2xrX2F2YWlsX21pbjsKKwl1MzIgcGNsa19hdmFpbF9tYXg7CisJdTMyIG1jbGtf cmF0ZTsKKwlpbnQgYXZhaWxfbG5fcng7CisJaW50IGF2YWlsX2xuX3R4OworCWludCByeF9zZWxf aWR4OworCXN0cnVjdCB1ZnNfcGFfbGF5ZXJfYXR0ciBkZXZfcmVxX3BhcmFtczsKKwlzdHJ1Y3Qg dWZzX3BoeV90aW1lX2NmZyB0X2NmZzsKKwlrdGltZV90IGVudHJ5X2hpYmVybjhfdDsKKwlzdHJ1 Y3QgZXh5bm9zX3Vmc19kcnZfZGF0YSAqZHJ2X2RhdGE7CisKKwl1MzIgb3B0czsKKyNkZWZpbmUg RVhZTk9TX1VGU19PUFRfSEFTX0FQQl9DTEtfQ1RSTAkJQklUKDApCisjZGVmaW5lIEVYWU5PU19V RlNfT1BUX1NLSVBfQ09OTkVDVElPTl9FU1RBQglCSVQoMSkKKyNkZWZpbmUgRVhZTk9TX1VGU19P UFRfQlJPS0VOX0FVVE9fQ0xLX0NUUkwJQklUKDIpCisjZGVmaW5lIEVYWU5PU19VRlNfT1BUX0JS T0tFTl9SWF9TRUxfSURYCUJJVCgzKQorI2RlZmluZSBFWFlOT1NfVUZTX09QVF9VU0VfU1dfSElC RVJOOF9USU1FUglCSVQoNCkKK307CisKKyNkZWZpbmUgZm9yX2VhY2hfdWZzX3J4X2xhbmUodWZz LCBpKSBcCisJZm9yIChpID0gKHVmcyktPnJ4X3NlbF9pZHg7IFwKKwkJaSA8ICh1ZnMpLT5yeF9z ZWxfaWR4ICsgKHVmcyktPmF2YWlsX2xuX3J4OyBpKyspCisjZGVmaW5lIGZvcl9lYWNoX3Vmc190 eF9sYW5lKHVmcywgaSkgXAorCWZvciAoaSA9IDA7IGkgPCAodWZzKS0+YXZhaWxfbG5fdHg7IGkr KykKKworI2RlZmluZSBFWFlOT1NfVUZTX01NSU9fRlVOQyhuYW1lKQkJCQkJICBcCitzdGF0aWMg aW5saW5lIHZvaWQgbmFtZSMjX3dyaXRlbChzdHJ1Y3QgZXh5bm9zX3VmcyAqdWZzLCB1MzIgdmFs LCB1MzIgcmVnKVwKK3sJCQkJCQkJCQkgIFwKKwl3cml0ZWwodmFsLCB1ZnMtPnJlZ18jI25hbWUg KyByZWcpOwkJCQkgIFwKK30JCQkJCQkJCQkgIFwKKwkJCQkJCQkJCSAgXAorc3RhdGljIGlubGlu ZSB1MzIgbmFtZSMjX3JlYWRsKHN0cnVjdCBleHlub3NfdWZzICp1ZnMsIHUzMiByZWcpCQkgIFwK K3sJCQkJCQkJCQkgIFwKKwlyZXR1cm4gcmVhZGwodWZzLT5yZWdfIyNuYW1lICsgcmVnKTsJCQkJ ICBcCit9CisKK0VYWU5PU19VRlNfTU1JT19GVU5DKGhjaSk7CitFWFlOT1NfVUZTX01NSU9fRlVO Qyh1bmlwcm8pOworRVhZTk9TX1VGU19NTUlPX0ZVTkModWZzcCk7CisjdW5kZWYgRVhZTk9TX1VG U19NTUlPX0ZVTkMKKworbG9uZyBleHlub3NfdWZzX2NhbGNfdGltZV9jbnRyKHN0cnVjdCBleHlu b3NfdWZzICosIGxvbmcpOworCitzdGF0aWMgaW5saW5lIHZvaWQgZXh5bm9zX3Vmc19lbmFibGVf b3ZfdG0oc3RydWN0IHVmc19oYmEgKmhiYSkKK3sKKwl1ZnNoY2RfZG1lX3NldChoYmEsIFVJQ19B UkdfTUlCKFBBX0RCR19PVl9UTSksIFRSVUUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZXh5 bm9zX3Vmc19kaXNhYmxlX292X3RtKHN0cnVjdCB1ZnNfaGJhICpoYmEpCit7CisJdWZzaGNkX2Rt ZV9zZXQoaGJhLCBVSUNfQVJHX01JQihQQV9EQkdfT1ZfVE0pLCBGQUxTRSk7Cit9CisKK3N0YXRp YyBpbmxpbmUgdm9pZCBleHlub3NfdWZzX2VuYWJsZV9kYmdfbW9kZShzdHJ1Y3QgdWZzX2hiYSAq aGJhKQoreworCXVmc2hjZF9kbWVfc2V0KGhiYSwgVUlDX0FSR19NSUIoUEFfREJHX01PREUpLCBU UlVFKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGV4eW5vc191ZnNfZGlzYWJsZV9kYmdfbW9k ZShzdHJ1Y3QgdWZzX2hiYSAqaGJhKQoreworCXVmc2hjZF9kbWVfc2V0KGhiYSwgVUlDX0FSR19N SUIoUEFfREJHX01PREUpLCBGQUxTRSk7Cit9CisKK3N0cnVjdCBleHlub3NfdWZzX2Rydl9kYXRh IGV4eW5vc191ZnNfZHJ2czsKKworc3RydWN0IGV4eW5vc191ZnNfdWljX2F0dHIgZXh5bm9zN191 aWNfYXR0ciA9IHsKKwkudHhfdHJhaWxpbmdjbGtzCQk9IDB4MTAsCisJLnR4X2RpZl9wX25zZWMJ CQk9IDMwMDAwMDAsCS8qIHVuaXQ6IG5zICovCisJLnR4X2RpZl9uX25zZWMJCQk9IDEwMDAwMDAs CS8qIHVuaXQ6IG5zICovCisJLnR4X2hpZ2hfel9jbnRfbnNlYwkJPSAyMDAwMCwJLyogdW5pdDog bnMgKi8KKwkudHhfYmFzZV91bml0X25zZWMJCT0gMTAwMDAwLAkvKiB1bml0OiBucyAqLworCS50 eF9ncmFuX3VuaXRfbnNlYwkJPSA0MDAwLAkJLyogdW5pdDogbnMgKi8KKwkudHhfc2xlZXBfY250 CQkJPSAxMDAwLAkJLyogdW5pdDogbnMgKi8KKwkudHhfbWluX2FjdGl2YXRldGltZQkJPSAweGEs CisJLnJ4X2ZpbGxlcl9lbmFibGUJCT0gMHgyLAorCS5yeF9kaWZfcF9uc2VjCQkJPSAxMDAwMDAw LAkvKiB1bml0OiBucyAqLworCS5yeF9oaWJlcm44X3dhaXRfbnNlYwkJPSA0MDAwMDAwLAkvKiB1 bml0OiBucyAqLworCS5yeF9iYXNlX3VuaXRfbnNlYwkJPSAxMDAwMDAsCS8qIHVuaXQ6IG5zICov CisJLnJ4X2dyYW5fdW5pdF9uc2VjCQk9IDQwMDAsCQkvKiB1bml0OiBucyAqLworCS5yeF9zbGVl cF9jbnQJCQk9IDEyODAsCQkvKiB1bml0OiBucyAqLworCS5yeF9zdGFsbF9jbnQJCQk9IDMyMCwJ CS8qIHVuaXQ6IG5zICovCisJLnJ4X2hzX2cxX3N5bmNfbGVuX2NhcAkJPSBTWU5DX0xFTl9DT0FS U0UoMHhmKSwKKwkucnhfaHNfZzJfc3luY19sZW5fY2FwCQk9IFNZTkNfTEVOX0NPQVJTRSgweGYp LAorCS5yeF9oc19nM19zeW5jX2xlbl9jYXAJCT0gU1lOQ19MRU5fQ09BUlNFKDB4ZiksCisJLnJ4 X2hzX2cxX3ByZXBfc3luY19sZW5fY2FwCT0gUFJFUF9MRU4oMHhmKSwKKwkucnhfaHNfZzJfcHJl cF9zeW5jX2xlbl9jYXAJPSBQUkVQX0xFTigweGYpLAorCS5yeF9oc19nM19wcmVwX3N5bmNfbGVu X2NhcAk9IFBSRVBfTEVOKDB4ZiksCisJLnBhX2RiZ19vcHRpb25fc3VpdGUJCT0gMHgzMDEwMywK K307CisjZW5kaWYgLyogX1VGU19FWFlOT1NfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2Nz aS91ZnMvdW5pcHJvLmggYi9kcml2ZXJzL3Njc2kvdWZzL3VuaXByby5oCmluZGV4IDc2NmQ1NTFk ZjNmYy4uNGVlNjQ3ODJmZDQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvdWZzL3VuaXByby5o CisrKyBiL2RyaXZlcnMvc2NzaS91ZnMvdW5pcHJvLmgKQEAgLTY0LDggKzY0LDI1IEBACiAjZGVm aW5lIENGR1JYT1ZSNAkJCQkweDAwRTkKICNkZWZpbmUgUlhTUUNUUkwJCQkJMHgwMEI1CiAjZGVm aW5lIENGR1JYT1ZSNgkJCQkweDAwQkYKKyNkZWZpbmUgUlhfSFNfRzFfU1lOQ19MRU5HVEhfQ0FQ CQkweDAwOEIKKyNkZWZpbmUgUlhfSFNfRzFfUFJFUF9MRU5HVEhfQ0FQCQkweDAwOEMKKyNkZWZp bmUgUlhfSFNfRzJfU1lOQ19MRU5HVEhfQ0FQCQkweDAwOTQKKyNkZWZpbmUgUlhfSFNfRzNfU1lO Q19MRU5HVEhfQ0FQCQkweDAwOTUKKyNkZWZpbmUgUlhfSFNfRzJfUFJFUF9MRU5HVEhfQ0FQCQkw eDAwOTYKKyNkZWZpbmUgUlhfSFNfRzNfUFJFUF9MRU5HVEhfQ0FQCQkweDAwOTcKKyNkZWZpbmUg UlhfQURWX0dSQU5VTEFSSVRZX0NBUAkJCTB4MDA5OAorI2RlZmluZSBSWF9NSU5fQUNUSVZBVEVU SU1FX0NBUAkJCTB4MDA4RgorI2RlZmluZSBSWF9ISUJFUk44VElNRV9DQVAJCQkweDAwOTIKKyNk ZWZpbmUgUlhfQURWX0hJQkVSTjhUSU1FX0NBUAkJCTB4MDA5OQorI2RlZmluZSBSWF9BRFZfTUlO X0FDVElWQVRFVElNRV9DQVAJCTB4MDA5QQorCiAKICNkZWZpbmUgaXNfbXBoeV90eF9hdHRyKGF0 dHIpCQkJKGF0dHIgPCBSWF9NT0RFKQorI2RlZmluZSBSWF9BRFZfRklORV9HUkFOX1NURVAoeCkJ CSgoKCh4KSAmIDB4MykgPDwgMSkgfCAweDEpCisjZGVmaW5lIFNZTkNfTEVOX0ZJTkUoeCkJCQko KHgpICYgMHgzRikKKyNkZWZpbmUgU1lOQ19MRU5fQ09BUlNFKHgpCQkJKCgxIDw8IDYpIHwgKCh4 KSAmIDB4M0YpKQorI2RlZmluZSBQUkVQX0xFTih4KQkJCQkoKHgpICYgMHhGKQorCiAjZGVmaW5l IFJYX01JTl9BQ1RJVkFURVRJTUVfVU5JVF9VUwkJMTAwCiAjZGVmaW5lIEhJQkVSTjhUSU1FX1VO SVRfVVMJCQkxMDAKIApAQCAtMTI0LDYgKzE0MSw3IEBACiAjZGVmaW5lIFBBX1BBQ1BSRVFFT0JU SU1FT1VUCTB4MTU5MQogI2RlZmluZSBQQV9ISUJFUk44VElNRQkJMHgxNUE3CiAjZGVmaW5lIFBB X0xPQ0FMVkVSSU5GTwkJMHgxNUE5CisjZGVmaW5lIFBBX0dSQU5VTEFSSVRZCQkweDE1QUEKICNk ZWZpbmUgUEFfVEFDVElWQVRFCQkweDE1QTgKICNkZWZpbmUgUEFfUEFDUEZSQU1FQ09VTlQJMHgx NUMwCiAjZGVmaW5lIFBBX1BBQ1BFUlJPUkNPVU5UCTB4MTVDMQpAQCAtMjkxLDQgKzMwOSwxOSBA QCBlbnVtIHsKIAlUUlVFLAogfTsKIAorLyogQ1BvcnQgc2V0dGluZyAqLworI2RlZmluZSBFMkVG Q19PTgkoMSA8PCAwKQorI2RlZmluZSBFMkVGQ19PRkYJKDAgPDwgMCkKKyNkZWZpbmUgQ1NEX05f T04JKDAgPDwgMSkKKyNkZWZpbmUgQ1NEX05fT0ZGCSgxIDw8IDEpCisjZGVmaW5lIENTVl9OX09O CSgwIDw8IDIpCisjZGVmaW5lIENTVl9OX09GRgkoMSA8PCAyKQorI2RlZmluZSBDUE9SVF9ERUZf RkxBR1MJKENTVl9OX09GRiB8IENTRF9OX09GRiB8IEUyRUZDX09GRikKKworLyogQ1BvcnQgY29u bmVjdGlvbiBzdGF0ZSAqLworZW51bSB7CisJQ1BPUlRfSURMRSA9IDAsCisJQ1BPUlRfQ09OTkVD VEVELAorfTsKKwogI2VuZGlmIC8qIF9VTklQUk9fSF8gKi8KLS0gCjIuMTcuMQoKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwg bWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8v bGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK