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=-15.7 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=unavailable 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 EF134C433DB for ; Fri, 22 Jan 2021 11:02:15 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (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 7E9E5239EE for ; Fri, 22 Jan 2021 11:02:15 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7E9E5239EE 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-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:References:In-Reply-To:MIME-Version:Date:Message-ID: From:To:Subject:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=f+QwZ2ycY4N7yacdiBTPosaK1bvTFFWzgi12urxfEpg=; b=gc2JPQeAf0VLgS4utf0X4B/B5 4NZZ6PDsqGZfYF4H8jh0MN1Hk9/zXU8wbdveD1XiJRmUH4Of48mUwOwIMoMf6HPvSrL3BncPHD3zd m80qAnrfw1cHpPs1UVgftABycIrKe18UlhYqc/XoJ5UNgDy19AvQJZk5bVVaO1Sfc846la7KL9JpX 9z00jSYZduXJgQE2ycYvhU7bBZPqT6etGOhEPLouFqMvdXdAMzWmIB7cbsP4RO7ZTRnDG2tE+zLFq 6f7F6EDK6fNu0FgBmfu7hvltpXKrZmHQFTErvGc8McmFDpDfxwo41eprd2LYM1ThhcSkNEtRk0wDc rgKKTNZrA==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1l2uCS-0003GT-Bx; Fri, 22 Jan 2021 11:01:56 +0000 Received: from mailout2.w1.samsung.com ([210.118.77.12]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1l2uCM-0003F4-45 for linux-mediatek@lists.infradead.org; Fri, 22 Jan 2021 11:01:54 +0000 Received: from eucas1p2.samsung.com (unknown [182.198.249.207]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20210122110147euoutp02b86d79722a8a12dde2fee5ed9bd19970~ciOqXZ0__1432414324euoutp02L for ; Fri, 22 Jan 2021 11:01:47 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20210122110147euoutp02b86d79722a8a12dde2fee5ed9bd19970~ciOqXZ0__1432414324euoutp02L DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1611313307; bh=/t78OkKdWuLKjccR2WFSlhKCdLLm09Cqu1+wLzTNLTw=; h=Subject:To:Cc:From:Date:In-Reply-To:References:From; b=IzLkrXF+z6gndeCvkhMZz+3E3ScaWqWlBMU2n8h3uQwuZ39Ks0jLazkxYGuQ3xoBt eFRGfoG+SdoKbJ92ag7xaE/qFOd5m3GC2fXR1KPJZVGFxE8M/xSYT9ATGWSl1+dtg6 SgGDB2WVBZ2L8XeErtQDTFA5rXpTswkjsM0nqTEw= Received: from eusmges1new.samsung.com (unknown [203.254.199.242]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20210122110147eucas1p28e7c9ef0c6c1a75e1f290b9b5bdf705f~ciOp5HWL43175631756eucas1p2F; Fri, 22 Jan 2021 11:01:47 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges1new.samsung.com (EUCPMTA) with SMTP id 94.99.27958.B90BA006; Fri, 22 Jan 2021 11:01:47 +0000 (GMT) Received: from eusmtrp1.samsung.com (unknown [182.198.249.138]) by eucas1p1.samsung.com (KnoxPortal) with ESMTPA id 20210122110146eucas1p11670dfbbe0236f8cfbcf934822658311~ciOpShJQW1941519415eucas1p1Y; Fri, 22 Jan 2021 11:01:46 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eusmtrp1.samsung.com (KnoxPortal) with ESMTP id 20210122110146eusmtrp14eeb2a2098da4bbcc2d7e51ed2284472~ciOpRnSXw0327603276eusmtrp1k; Fri, 22 Jan 2021 11:01:46 +0000 (GMT) X-AuditID: cbfec7f2-f15ff70000006d36-75-600ab09b4d17 Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id 89.1E.21957.A90BA006; Fri, 22 Jan 2021 11:01:46 +0000 (GMT) Received: from [106.210.131.79] (unknown [106.210.131.79]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20210122110145eusmtip29ab61a463cdde14547803144a77b1931~ciOoF8NB-1650516505eusmtip2j; Fri, 22 Jan 2021 11:01:45 +0000 (GMT) Subject: Re: [PATCH v6] drm/bridge: add it6505 driver To: allen From: Andrzej Hajda Message-ID: Date: Fri, 22 Jan 2021 12:01:44 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:85.0) Gecko/20100101 Thunderbird/85.0 MIME-Version: 1.0 In-Reply-To: <20201208105808.78029-1-allen.chen@ite.com.tw> Content-Language: en-GB X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrMKsWRmVeSWpSXmKPExsWy7djP87qzN3AlGCzfw2PRe+4kk8XsE/oW V76+Z7NoffqH2eLdid0sFle/v2S2aD53ldXi5JurLBYd348zW3ROXMJusenxNVaLy7vmsFlc br7IaNHUYmxxqC/aom/hWkaLGbM5HAQ93t9oZfeY3XCRxWPnrLvsHgs2lXrM7pjJ6jFn3x42 jxMTLjF5bP/2gNXjfvdxJo/NS+o9Wk7uZ/E40DuZxePzJrkA3igum5TUnMyy1CJ9uwSujIv3 vjAXvNzAVvF2bkgD46M+1i5GTg4JAROJ63N2ANlcHEICKxglbv1czQThfGGUmNlzjhnC+cwo 8f7yAriWe7sWs0MkljNKtLx9D9XynlHiwcJGJpAqYQFTiX8bjzCC2CICihJL3m8F62AW+MAq 8a9xETNIgk1AU+Lv5ptsIDavgJ3E2TX3WEBsFgFViee/3oPViAokSOx9d44FokZQ4uTMJ2A2 p4C1xOy9z8FqmAXkJZq3zoayxSWavqwE+0hC4BqnxMbjl4A2cwA5LhKbD/BDvCAs8er4FnYI W0bi9OQeFgi7XuL+ihZmiN4ORomtG3YyQySsJe6c+8UGMocZ6Oj1u/Qhwo4S+8+fgxrPJ3Hj rSDECXwSk7ZNZ4YI80p0tAlBVCtK3D+7FWqguMTSC1/ZJjAqzULy2Cwkz8xC8swshL0LGFlW MYqnlhbnpqcWG+allusVJ+YWl+al6yXn525iBKbL0/+Of9rBOPfVR71DjEwcjIcYJTiYlUR4 H1lyJAjxpiRWVqUW5ccXleakFh9ilOZgURLnXTV7TbyQQHpiSWp2ampBahFMlomDU6qByUia dabUt8puuQNC5x23X8ssKeVUUgnaKBsj0RJ2RpfDLvy4/ukDt5cKJD8IORj501lp8rmlBV+f 3k5oDDr4JlNK1EjhKcOEM4cMti1qFfnx0b3Vv1VnWVwTX6K857ZH1r0P9UpttKw9jyU1Bt11 F/PZnRKfedLp4PqXgpfOdBo/430bafC573ZwGpdLCq+4w7kD9lMEopnZpRQPLnhufHBl/r/X 3mwqIeHKJbmvecOXXw8JPa1f0Jd84ZqpYsbsrLRXPy3/9isHnJnW5ebxKtDr4ZMra6tWbPOz zdvzJml9ycP9wUfu5l3qFFwXYPCjz+5uKUNz8M3myy3nCvc9Cu/Xuuj/fS2zwrEFB1iUWIoz Eg21mIuKEwFSTyfmBgQAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmplleLIzCtJLcpLzFFi42I5/e/4Pd1ZG7gSDDa9V7ToPXeSyWL2CX2L K1/fs1m0Pv3DbPHuxG4Wi6vfXzJbNJ+7ympx8s1VFouO78eZLTonLmG32PT4GqvF5V1z2Cwu N19ktGhqMbY41Bdt0bdwLaPFjNkcDoIe72+0snvMbrjI4rFz1l12jwWbSj1md8xk9Zizbw+b x4kJl5g8tn97wOpxv/s4k8fmJfUeLSf3s3gc6J3M4vF5k1wAb5SeTVF+aUmqQkZ+cYmtUrSh hZGeoaWFnpGJpZ6hsXmslZGpkr6dTUpqTmZZapG+XYJexsV7X5gLXm5gq3g7N6SB8VEfaxcj J4eEgInEvV2L2bsYuTiEBJYySvR0P2OBSIhL7J7/lhnCFpb4c62LDaLoLaPEjLMn2EASwgKm Ev82HmEEsUUEFCWWvN/KDmIzC3xjldh0OBvEFhLoY5Q49SwFxGYT0JT4u/kmWC+vgJ3E2TX3 wJaxCKhKPP/1HmyZqECCxPb9K5kgagQlTs58AlbDKWAtMXvvc2aI+WYSXVu7GCFseYnmrbOh 4uISTV9Wsk5gFJqFpH0WkpZZSFpmIWlZwMiyilEktbQ4Nz232FCvODG3uDQvXS85P3cTIzA9 bDv2c/MOxnmvPuodYmTiYDzEKMHBrCTC+8iSI0GINyWxsiq1KD++qDQntfgQoynQPxOZpUST 84EJKq8k3tDMwNTQxMzSwNTSzFhJnHfr3DXxQgLpiSWp2ampBalFMH1MHJxSDUzpF7OM25xW hEsc6OLdN8E2KDhK9HXGjEdT/q/cvL9OUrxllu2BlmzfXuOccJ8rjNMkdysZygdxBdy59d3Q NEpo/Z2Zf19xCywJ3m/qLle7ourN8x0fp8c8M+Fty+doO7JaNqlRRkokb+lU1kPJ6x9ktwtc VWdacDg4S+NJQIL8wZip6w4/q+KN4XPveiRzyf61teQb6/+tChNjH2XrnC2fFfYhv/Duhq3d TaVmDx+y6z2Ny9sZfcb65+PUdT7feJYs/lvCHm24qPyRL6vRwTClU63J7HXf01NbZzx6PGP/ jTVB8esU46PP8/+aFFq5t+uZM1fL7dKt/46aG9j16e15PWevcsHJZX2+DIVPopVYijMSDbWY i4oTAWzdWryYAwAA X-CMS-MailID: 20210122110146eucas1p11670dfbbe0236f8cfbcf934822658311 X-Msg-Generator: CA X-RootMTR: 20201209083228eucas1p26fdedb4f2450048b46b071409f6c44a1 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20201209083228eucas1p26fdedb4f2450048b46b071409f6c44a1 References: <20201208105808.78029-1-allen.chen@ite.com.tw> X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kenneth Hung , Jitao Shi , Neil Armstrong , Yilun Lin , Jau-Chih Tseng , Jernej Skrabec , "open list:DRM DRIVERS" , open list , David Airlie , Hermes Wu , "moderated list:ARM/Mediatek SoC support" , Laurent Pinchart , Pi-Hsun Shih , Matthias Brugger , "moderated list:ARM/Mediatek SoC support" , Jonas Karlman Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org SGkgQWxsZW4sCgpTb3JyeSBmb3IgbG9uZyBkZWxheS4KClcgZG5pdSAwOC4xMi4yMDIwIG/CoDEx OjU4LCBhbGxlbiBwaXN6ZToKPiBUaGlzIGFkZHMgc3VwcG9ydCBmb3IgdGhlIGlURSBJVDY1MDUu Cj4gVGhpcyBkZXZpY2UgY2FuIGNvbnZlcnQgRFBJIHNpZ25hbCB0byBEUCBvdXRwdXQuCj4KPiBG cm9tOiBBbGxlbiBDaGVuIDxhbGxlbi5jaGVuQGl0ZS5jb20udHc+Cj4gU2lnbmVkLW9mZi1ieTog Sml0YW8gU2hpIDxqaXRhby5zaGlAbWVkaWF0ZWsuY29tPgo+IFNpZ25lZC1vZmYtYnk6IFBpLUhz dW4gU2hpaCA8cGloc3VuQGNocm9taXVtLm9yZz4KPiBTaWduZWQtb2ZmLWJ5OiBZaWx1biBMaW4g PHlsbGluQGdvb2dsZS5jb20+Cj4gU2lnbmVkLW9mZi1ieTogSGVybWVzIFd1IDxoZXJtZXMud3VA aXRlLmNvbS50dz4KPiBTaWduZWQtb2ZmLWJ5OiBBbGxlbiBDaGVuIDxhbGxlbi5jaGVuQGl0ZS5j b20udHc+Cj4gLS0tCj4gICBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWcgICAgICB8ICAg IDcgKwo+ICAgZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmlsZSAgICAgfCAgICAxICsKPiAg IGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvaXRlLWl0NjUwNS5jIHwgMzM0MyArKysrKysrKysrKysr KysrKysrKysrKysrKysKPiAgIDMgZmlsZXMgY2hhbmdlZCwgMzM1MSBpbnNlcnRpb25zKCspCj4g ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9pdGUtaXQ2NTA1LmMK Pgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWcgYi9kcml2ZXJz L2dwdS9kcm0vYnJpZGdlL0tjb25maWcKPiBpbmRleCBlNDExMGQ2Y2E3YjNjLi4yNWQzNGQ3MTk2 MDA0IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZwo+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZwo+IEBAIC03NCw2ICs3NCwxMyBAQCBjb25m aWcgRFJNX0xPTlRJVU1fTFQ5NjExVVhDCj4gICAJICBIRE1JIHNpZ25hbHMKPiAgIAkgIFBsZWFz ZSBzYXkgWSBpZiB5b3UgaGF2ZSBzdWNoIGhhcmR3YXJlLgo+ICAgCj4gK2NvbmZpZyBEUk1fSVRF X0lUNjUwNQo+ICsJdHJpc3RhdGUgIklURSBJVDY1MDUgRGlzcGxheVBvcnQgYnJpZGdlIgo+ICsJ ZGVwZW5kcyBvbiBPRgo+ICsJc2VsZWN0IERSTV9LTVNfSEVMUEVSCj4gKwloZWxwCj4gKwkgIElU RSBJVDY1MDUgRGlzcGxheVBvcnQgYnJpZGdlIGNoaXAgZHJpdmVyLgo+ICsKPiAgIGNvbmZpZyBE Uk1fTFZEU19DT0RFQwo+ICAgCXRyaXN0YXRlICJUcmFuc3BhcmVudCBMVkRTIGVuY29kZXJzIGFu ZCBkZWNvZGVycyBzdXBwb3J0Igo+ICAgCWRlcGVuZHMgb24gT0YKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFr ZWZpbGUKPiBpbmRleCA4NmU3YWNjNzZmOGQ2Li4yYjJmOGYwYjViMGZhIDEwMDY0NAo+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v YnJpZGdlL01ha2VmaWxlCj4gQEAgLTQsNiArNCw3IEBAIG9iai0kKENPTkZJR19EUk1fQ0hST05U RUxfQ0g3MDMzKSArPSBjaHJvbnRlbC1jaDcwMzMubwo+ICAgb2JqLSQoQ09ORklHX0RSTV9ESVNQ TEFZX0NPTk5FQ1RPUikgKz0gZGlzcGxheS1jb25uZWN0b3Iubwo+ICAgb2JqLSQoQ09ORklHX0RS TV9MT05USVVNX0xUOTYxMSkgKz0gbG9udGl1bS1sdDk2MTEubwo+ICAgb2JqLSQoQ09ORklHX0RS TV9MT05USVVNX0xUOTYxMVVYQykgKz0gbG9udGl1bS1sdDk2MTF1eGMubwo+ICtvYmotJChDT05G SUdfRFJNX0lURV9JVDY1MDUpICs9IGl0ZS1pdDY1MDUubwoKClBsZWFzZSBrZWVwIGFscGhhYmV0 aWMgb3JkZXIuCgoKPiAgIG9iai0kKENPTkZJR19EUk1fTFZEU19DT0RFQykgKz0gbHZkcy1jb2Rl Yy5vCj4gICBvYmotJChDT05GSUdfRFJNX01FR0FDSElQU19TVERQWFhYWF9HRV9CODUwVjNfRlcp ICs9IG1lZ2FjaGlwcy1zdGRweHh4eC1nZS1iODUwdjMtZncubwo+ICAgb2JqLSQoQ09ORklHX0RS TV9OWFBfUFROMzQ2MCkgKz0gbnhwLXB0bjM0NjAubwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vYnJpZGdlL2l0ZS1pdDY1MDUuYyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvaXRlLWl0 NjUwNS5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAwLi41ZTc2 NzE5YTUxYTRhCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2Uv aXRlLWl0NjUwNS5jCj4gQEAgLTAsMCArMSwzMzQzIEBACj4gKy8vIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSkKPiArLyoKPiArICogQ29weXJp Z2h0IChjKSAyMDIwLCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K PiArICovCj4gKyNpbmNsdWRlIDxsaW51eC9iaXRzLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9kZWxh eS5oPgo+ICsjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9lcnIu aD4KPiArI2luY2x1ZGUgPGxpbnV4L2V4dGNvbi5oPgo+ICsjaW5jbHVkZSA8bGludXgvZnMuaD4K PiArI2luY2x1ZGUgPGxpbnV4L2dwaW8vY29uc3VtZXIuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2ky Yy5oPgo+ICsjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9r ZXJuZWwuaD4KPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+ICsjaW5jbHVkZSA8bGludXgv cG1fcnVudGltZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+Cj4gKyNpbmNsdWRlIDxs aW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Cj4g KyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+Cj4gKwo+ICsjaW5jbHVkZSA8Y3J5cHRvL2hhc2guaD4K PiArCj4gKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRy bS9kcm1fYnJpZGdlLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KPiArI2luY2x1ZGUg PGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fZHBfaGVscGVyLmg+ Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2VkaWQuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1faGRjcC5o Pgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9wcmludC5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9wcm9i ZV9oZWxwZXIuaD4KPiArCj4gKyNpbmNsdWRlIDxzb3VuZC9oZG1pLWNvZGVjLmg+Cj4gKwo+ICsj ZGVmaW5lIFJFR19JQ19WRVIgMHgwNAo+ICsKPiArI2RlZmluZSBSRUdfUkVTRVRfQ1RSTCAweDA1 Cj4gKyNkZWZpbmUgVklERU9fUkVTRVQgQklUKDApCj4gKyNkZWZpbmUgQVVESU9fUkVTRVQgQklU KDEpCj4gKyNkZWZpbmUgQUxMX0xPR0lDX1JFU0VUIEJJVCgyKQo+ICsjZGVmaW5lIEFVWF9SRVNF VCBCSVQoMykKPiArI2RlZmluZSBIRENQX1JFU0VUIEJJVCg0KQo+ICsKPiArI2RlZmluZSBJTlRf U1RBVFVTXzAxIDB4MDYKPiArI2RlZmluZSBJTlRfTUFTS18wMSAweDA5Cj4gKyNkZWZpbmUgSU5U X0hQRF9DSEFOR0UgQklUKDApCj4gKyNkZWZpbmUgSU5UX1JFQ0VJVkVfSFBEX0lSUSBCSVQoMSkK PiArI2RlZmluZSBJTlRfU0NEVF9DSEFOR0UgQklUKDIpCj4gKyNkZWZpbmUgSU5UX0hEQ1BfRkFJ TCBCSVQoMykKPiArI2RlZmluZSBJTlRfSERDUF9ET05FIEJJVCg0KQo+ICsKPiArI2RlZmluZSBJ TlRfU1RBVFVTXzAyIDB4MDcKPiArI2RlZmluZSBJTlRfTUFTS18wMiAweDBBCj4gKyNkZWZpbmUg SU5UX0FVWF9DTURfRkFJTCBCSVQoMCkKPiArI2RlZmluZSBJTlRfSERDUF9LU1ZfQ0hFQ0sgQklU KDEpCj4gKyNkZWZpbmUgSU5UX0FVRElPX0ZJRk9fRVJST1IgQklUKDIpCj4gKwo+ICsjZGVmaW5l IElOVF9TVEFUVVNfMDMgMHgwOAo+ICsjZGVmaW5lIElOVF9NQVNLXzAzIDB4MEIKPiArI2RlZmlu ZSBJTlRfTElOS19UUkFJTl9GQUlMIEJJVCg0KQo+ICsjZGVmaW5lIElOVF9WSURfRklGT19FUlJP UiBCSVQoNSkKPiArI2RlZmluZSBJTlRfSU9fTEFUQ0hfRklGT19PVkVSRkxPVyBCSVQoNykKPiAr Cj4gKyNkZWZpbmUgUkVHX1NZU1RFTV9TVFMgMHgwRAo+ICsjZGVmaW5lIElOVF9TVFMgQklUKDAp Cj4gKyNkZWZpbmUgSFBEX1NUUyBCSVQoMSkKPiArI2RlZmluZSBWSURFT19TVEIgQklUKDIpCj4g Kwo+ICsjZGVmaW5lIFJFR19MSU5LX1RSQUlOX1NUUyAweDBFCj4gKyNkZWZpbmUgTElOS19TVEFU RV9DUiBCSVQoMikKPiArI2RlZmluZSBMSU5LX1NUQVRFX0VRIEJJVCgzKQo+ICsjZGVmaW5lIExJ TktfU1RBVEVfTk9SUCBCSVQoNCkKPiArCj4gKyNkZWZpbmUgUkVHX0JBTktfU0VMIDB4MEYKPiAr I2RlZmluZSBSRUdfQ0xLX0NUUkwwIDB4MTAKPiArI2RlZmluZSBNX1BDTEtfREVMQVkgMHgwMwo+ ICsKPiArI2RlZmluZSBSRUdfQVVYX09QVCAweDExCj4gKyNkZWZpbmUgQVVYX0FVVE9fUlNUIEJJ VCgwKQo+ICsjZGVmaW5lIEFVWF9GSVhfRlJFUSBCSVQoMykKPiArCj4gKyNkZWZpbmUgUkVHX0RB VEFfQ1RSTDAgMHgxMgo+ICsjZGVmaW5lIFZJREVPX0xBVENIX0VER0UgQklUKDQpCj4gKyNkZWZp bmUgRU5BQkxFX1BDTEtfQ09VTlRFUiBCSVQoNykKPiArCj4gKyNkZWZpbmUgUkVHX1BDTEtfQ09V TlRFUl9WQUxVRSAweDEzCj4gKwo+ICsjZGVmaW5lIFJFR181MDFfRklGT19DVFJMIDB4MTUKPiAr I2RlZmluZSBSU1RfNTAxX0ZJRk8gQklUKDEpCj4gKwo+ICsjZGVmaW5lIFJFR19UUkFJTl9DVFJM MCAweDE2Cj4gKyNkZWZpbmUgRk9SQ0VfTEJSIEJJVCgwKQo+ICsjZGVmaW5lIExBTkVfQ09VTlRf TUFTSyAweDA2Cj4gKyNkZWZpbmUgTEFORV9TV0FQIEJJVCgzKQo+ICsjZGVmaW5lIFNQUkVBRF9B TVBfNSBCSVQoNCkKPiArI2RlZmluZSBGT1JDRV9DUl9ET05FIEJJVCg1KQo+ICsjZGVmaW5lIEZP UkNFX0VRX0RPTkUgQklUKDYpCj4gKwo+ICsjZGVmaW5lIFJFR19UUkFJTl9DVFJMMSAweDE3Cj4g KyNkZWZpbmUgQVVUT19UUkFJTiBCSVQoMCkKPiArI2RlZmluZSBNQU5VQUxfVFJBSU4gQklUKDEp Cj4gKyNkZWZpbmUgRk9SQ0VfUkVUUkFJTiBCSVQoMikKPiArCj4gKyNkZWZpbmUgUkVHX0FVWF9D VFJMIDB4MjMKPiArI2RlZmluZSBDTFJfRURJRF9GSUZPIEJJVCgwKQo+ICsjZGVmaW5lIEFVWF9V U0VSX01PREUgQklUKDEpCj4gKyNkZWZpbmUgQVVYX05PX1NFR01FTlRfV1IgQklUKDYpCj4gKyNk ZWZpbmUgQVVYX0VOX0ZJRk9fUkVBRCBCSVQoNykKPiArCj4gKyNkZWZpbmUgUkVHX0FVWF9BRFJf MF83IDB4MjQKPiArI2RlZmluZSBSRUdfQVVYX0FEUl84XzE1IDB4MjUKPiArI2RlZmluZSBSRUdf QVVYX0FEUl8xNl8xOSAweDI2Cj4gKyNkZWZpbmUgUkVHX0FVWF9PVVRfREFUQTAgMHgyNwo+ICsK PiArI2RlZmluZSBSRUdfQVVYX0NNRF9SRVEgMHgyQgo+ICsjZGVmaW5lIEFVWF9CVVNZIEJJVCg1 KQo+ICsKPiArI2RlZmluZSBSRUdfQVVYX0RBVEFfMF83IDB4MkMKPiArI2RlZmluZSBSRUdfQVVY X0RBVEFfOF8xNSAweDJECj4gKyNkZWZpbmUgUkVHX0FVWF9EQVRBXzE2XzIzIDB4MkUKPiArI2Rl ZmluZSBSRUdfQVVYX0RBVEFfMjRfMzEgMHgyRgo+ICsKPiArI2RlZmluZSBSRUdfQVVYX0RBVEFf RklGTyAweDJGCj4gKwo+ICsjZGVmaW5lIFJFR19BVVhfRVJST1JfU1RTIDB4OUYKPiArI2RlZmlu ZSBNX0FVWF9SRVFfRkFJTCAweDAzCj4gKwo+ICsjZGVmaW5lIFJFR19IRENQX0NUUkwxIDB4MzgK PiArI2RlZmluZSBIRENQX0NQX0VOQUJMRSBCSVQoMCkKPiArCj4gKyNkZWZpbmUgUkVHX0hEQ1Bf VFJJR0dFUiAweDM5Cj4gKyNkZWZpbmUgSERDUF9UUklHR0VSX1NUQVJUICBCSVQoMCkKPiArI2Rl ZmluZSBIRENQX1RSSUdHRVJfQ1BJUlEgIEJJVCgxKQo+ICsjZGVmaW5lIEhEQ1BfVFJJR0dFUl9L U1ZfRE9ORSAgQklUKDQpCj4gKyNkZWZpbmUgSERDUF9UUklHR0VSX0tTVl9GQUlMIEJJVCg1KQo+ ICsKPiArI2RlZmluZSBSRUdfSERDUF9DVFJMMiAweDNBCj4gKyNkZWZpbmUgSERDUF9BTl9TRUwg QklUKDApCj4gKyNkZWZpbmUgSERDUF9BTl9HRU4gQklUKDEpCj4gKyNkZWZpbmUgSERDUF9IV19I UERJUlFfQUNUIEJJVCgyKQo+ICsjZGVmaW5lIEhEQ1BfRU5fTTBfUkVBRCBCSVQoNSkKPiArCj4g KyNkZWZpbmUgUkVHX00wXzBfNyAweDRDCj4gKyNkZWZpbmUgUkVHX0FOXzBfNyAweDRDCj4gKyNk ZWZpbmUgUkVHX1NQX0NUUkwwIDB4NTgKPiArI2RlZmluZSBSRUdfSVBfQ1RSTDEgMHg1OQo+ICsj ZGVmaW5lIFJFR19JUF9DVFJMMiAweDVBCj4gKwo+ICsjZGVmaW5lIFJFR19MSU5LX0RSViAweDVD Cj4gKyNkZWZpbmUgRFJWX0hTIEJJVCgxKQo+ICsKPiArI2RlZmluZSBSRUdfRFJWX0xOX0RBVEFf U0VMIDB4NUQKPiArCj4gKyNkZWZpbmUgUkVHX0FVWCAweDVFCj4gKwo+ICsjZGVmaW5lIFJFR19W SURfQlVTX0NUUkwwIDB4NjAKPiArI2RlZmluZSBJTl9ERFIgQklUKDIpCj4gKyNkZWZpbmUgRERS X0NEICgweDAxIDw8IDYpCj4gKwo+ICsjZGVmaW5lIFJFR19WSURfQlVTX0NUUkwxIDB4NjEKPiAr I2RlZmluZSBUWF9GSUZPX1JFU0VUIEJJVCgxKQo+ICsKPiArI2RlZmluZSBSRUdfSU5QVVRfQ1RS TCAweEEwCj4gKyNkZWZpbmUgSU5QVVRfSFNZTkNfUE9MIEJJVCgwKQo+ICsjZGVmaW5lIElOUFVU X1ZTWU5DX1BPTCBCSVQoMikKPiArI2RlZmluZSBJTlBVVF9JTlRFUkxBQ0VEIEJJVCg0KQo+ICsK PiArI2RlZmluZSBSRUdfSU5QVVRfSFRPVEFMIDB4QTEKPiArI2RlZmluZSBSRUdfSU5QVVRfSEFD VElWRV9TVEFSVCAweEEzCj4gKyNkZWZpbmUgUkVHX0lOUFVUX0hBQ1RJVkVfV0lEVEggMHhBNQo+ ICsjZGVmaW5lIFJFR19JTlBVVF9IRlJPTlRfUE9SQ0ggMHhBNwo+ICsjZGVmaW5lIFJFR19JTlBV VF9IU1lOQ19XSURUSCAweEE5Cj4gKyNkZWZpbmUgUkVHX0lOUFVUX1ZUT1RBTCAweEFCCj4gKyNk ZWZpbmUgUkVHX0lOUFVUX1ZBQ1RJVkVfU1RBUlQgMHhBRAo+ICsjZGVmaW5lIFJFR19JTlBVVF9W QUNUSVZFX1dJRFRIIDB4QUYKPiArI2RlZmluZSBSRUdfSU5QVVRfVkZST05UX1BPUkNIIDB4QjEK PiArI2RlZmluZSBSRUdfSU5QVVRfVlNZTkNfV0lEVEggMHhCMwo+ICsKPiArI2RlZmluZSBSRUdf QVVESU9fU1JDX0NUUkwgMHhCOAo+ICsjZGVmaW5lIE1fQVVESU9fSTJTX0VOIDB4MEYKPiArI2Rl ZmluZSBFTl9JMlMwIEJJVCgwKQo+ICsjZGVmaW5lIEVOX0kyUzEgQklUKDEpCj4gKyNkZWZpbmUg RU5fSTJTMiBCSVQoMikKPiArI2RlZmluZSBFTl9JMlMzIEJJVCgzKQo+ICsjZGVmaW5lIEFVRElP X0ZJRk9fUkVTRVQgQklUKDcpCj4gKwo+ICsjZGVmaW5lIFJFR19BVURJT19GTVQgMHhCOQo+ICsj ZGVmaW5lIFJFR19BVURJT19GSUZPX1NFTCAweEJBCj4gKwo+ICsjZGVmaW5lIFJFR19BVURJT19D VFJMMCAweEJCCj4gKyNkZWZpbmUgQVVESU9fRlVMTF9QS1QgQklUKDQpCj4gKyNkZWZpbmUgQVVE SU9fMTZCX0JPVU5EIEJJVCg1KQo+ICsKPiArI2RlZmluZSBSRUdfQVVESU9fQ1RSTDEgMHhCQwo+ ICsjZGVmaW5lIFJFR19BVURJT19JTlBVVF9GUkVRIDB4QkUKPiArCj4gKyNkZWZpbmUgUkVHX0lF Qzk1OF9TVFMwIDB4QkYKPiArI2RlZmluZSBSRUdfSUVDOTU4X1NUUzEgMHhDMAo+ICsjZGVmaW5l IFJFR19JRUM5NThfU1RTMiAweEMxCj4gKyNkZWZpbmUgUkVHX0lFQzk1OF9TVFMzIDB4QzIKPiAr I2RlZmluZSBSRUdfSUVDOTU4X1NUUzQgMHhDMwo+ICsKPiArI2RlZmluZSBSRUdfSFBEX0lSUV9U SU1FIDB4QzkKPiArI2RlZmluZSBSRUdfQVVYX0RFQlVHX01PREUgMHhDQQo+ICsjZGVmaW5lIFJF R19BVVhfT1BUMiAweENCCj4gKyNkZWZpbmUgUkVHX0hEQ1BfT1BUIDB4Q0UKPiArI2RlZmluZSBS RUdfVVNFUl9EUlZfUFJFIDB4Q0YKPiArCj4gKyNkZWZpbmUgUkVHX0RBVEFfTVVURV9DVFJMIDB4 RDMKPiArI2RlZmluZSBFTkFCTEVfRU5IQU5DRURfRlJBTUUgQklUKDApCj4gKyNkZWZpbmUgRU5B QkxFX0FVVE9fVklERU9fRklGT19SRVNFVCBCSVQoMSkKPiArI2RlZmluZSBFTl9WSURfTVVURSBC SVQoNCkKPiArI2RlZmluZSBFTl9BVURfTVVURSBCSVQoNSkKPiArCj4gKyNkZWZpbmUgUkVHX1RJ TUVfU1RNUF9DVFJMIDB4RDQKPiArI2RlZmluZSBFTl9FTkhBTkNFX1ZJRF9TVE1QIEJJVCgwKQo+ ICsjZGVmaW5lIEVOX0VOSEFOQ0VfQVVEX1NUTVAgQklUKDIpCj4gKyNkZWZpbmUgTV9TVEFNUF9T VEVQIDB4MzAKPiArI2RlZmluZSBFTl9TU0NfR0FUIEJJVCg2KQo+ICsKPiArI2RlZmluZSBSRUdf SU5GT0ZSQU1FX0NUUkwgMHhFOAo+ICsjZGVmaW5lIEVOX0FWSV9QS1QgQklUKDApCj4gKyNkZWZp bmUgRU5fQVVEX1BLVCBCSVQoMSkKPiArI2RlZmluZSBFTl9NUEdfUEtUIEJJVCgyKQo+ICsjZGVm aW5lIEVOX0dFTl9QS1QgQklUKDMpCj4gKyNkZWZpbmUgRU5fVklEX1RJTUVfU1RNUCBCSVQoNCkK PiArI2RlZmluZSBFTl9BVURfVElNRV9TVE1QIEJJVCg1KQo+ICsjZGVmaW5lIEVOX1ZJRF9DVFJM X1BLVCAoRU5fQVZJX1BLVCB8IEVOX1ZJRF9USU1FX1NUTVApCj4gKyNkZWZpbmUgRU5fQVVEX0NU UkxfUEtUIChFTl9BVURfUEtUIHwgRU5fQVVEX1RJTUVfU1RNUCkKPiArCj4gKyNkZWZpbmUgUkVH X0FVRElPX05fMF83IDB4REUKPiArI2RlZmluZSBSRUdfQVVESU9fTl84XzE1IDB4REYKPiArI2Rl ZmluZSBSRUdfQVVESU9fTl8xNl8yMyAweEUwCj4gKwo+ICsjZGVmaW5lIFJFR19BVklfSU5GT19E QjEgMHhFOQo+ICsjZGVmaW5lIFJFR19BVklfSU5GT19EQjIgMHhFQQo+ICsjZGVmaW5lIFJFR19B VklfSU5GT19EQjMgMHhFQgo+ICsjZGVmaW5lIFJFR19BVklfSU5GT19EQjQgMHhFQwo+ICsjZGVm aW5lIFJFR19BVklfSU5GT19EQjUgMHhFRAo+ICsjZGVmaW5lIFJFR19BVklfSU5GT19TVU0gMHhG Ngo+ICsKPiArI2RlZmluZSBSRUdfQVVEX0lORk9GUkFNX0RCMSAweEY3Cj4gKyNkZWZpbmUgUkVH X0FVRF9JTkZPRlJBTV9EQjIgMHhGOAo+ICsjZGVmaW5lIFJFR19BVURfSU5GT0ZSQU1fREIzIDB4 RjkKPiArI2RlZmluZSBSRUdfQVVEX0lORk9GUkFNX0RCNCAweEZBCj4gKyNkZWZpbmUgUkVHX0FV RF9JTkZPRlJBTV9TVU0gMHhGQgo+ICsKPiArLyogdGhlIGZvbGxvd2luZyBzaXggcmVnaXN0ZXJz IGFyZSBpbiBiYW5rMSAqLwo+ICsjZGVmaW5lIFJFR19EUlZfMF9EQl84MDBfTVYgMHg3RQo+ICsj ZGVmaW5lIFJFR19QUkVfMF9EQl84MDBfTVYgMHg3Rgo+ICsjZGVmaW5lIFJFR19QUkVfM1A1X0RC XzgwMF9NViAweDgxCj4gKyNkZWZpbmUgUkVHX1NTQ19DVFJMMCAweDg4Cj4gKyNkZWZpbmUgUkVH X1NTQ19DVFJMMSAweDg5Cj4gKyNkZWZpbmUgUkVHX1NTQ19DVFJMMiAweDhBCj4gKwo+ICsjZGVm aW5lIFJCUiBEUF9MSU5LX0JXXzFfNjIKPiArI2RlZmluZSBIQlIgRFBfTElOS19CV18yXzcKPiAr I2RlZmluZSBIQlIyIERQX0xJTktfQldfNV80Cj4gKyNkZWZpbmUgSEJSMyBEUF9MSU5LX0JXXzhf MQo+ICsKPiArLyogVmVuZG9yIG9wdGlvbiAqLwo+ICsjZGVmaW5lIEhEQ1BfREVTSVJFRCAxCj4g KyNkZWZpbmUgTUFYX0xBTkVfQ09VTlQgNAo+ICsjZGVmaW5lIE1BWF9MSU5LX1JBVEUgSEJSCj4g KyNkZWZpbmUgQVVUT19UUkFJTl9SRVRSWSAzCj4gKyNkZWZpbmUgTUFYX0hEQ1BfRE9XTl9TVFJF QU1fQ09VTlQgMTAKPiArI2RlZmluZSBNQVhfQ1JfTEVWRUwgMHgwMwo+ICsjZGVmaW5lIE1BWF9F UV9MRVZFTCAweDAzCj4gKyNkZWZpbmUgQVVYX1dBSVRfVElNRU9VVF9NUyAxNQo+ICsjZGVmaW5l IEFVWF9GSUZPX01BWF9TSVpFIDMyCj4gKyNkZWZpbmUgUElYRUxfQ0xLX0RFTEFZIDEKPiArI2Rl ZmluZSBQSVhFTF9DTEtfSU5WRVJTRSAwCj4gKyNkZWZpbmUgQURKVVNUX1BIQVNFX1RIUkVTSE9M RCA4MDAwMAo+ICsjZGVmaW5lIERQSV9QSVhFTF9DTEtfTUFYIDk1MDAwCj4gKyNkZWZpbmUgSERD UF9TSEExX0ZJRk9fTEVOIChNQVhfSERDUF9ET1dOX1NUUkVBTV9DT1VOVCAqIDUgKyAxMCkKPiAr I2RlZmluZSBERUZBVUxUX1BXUl9PTiAwCj4gKyNkZWZpbmUgREVGQVVMVF9EUlZfSE9MRCAwCj4g Kwo+ICsjZGVmaW5lIEFVRElPX1NFTEVDVCBJMlMKPiArI2RlZmluZSBBVURJT19UWVBFIExQQ00K PiArI2RlZmluZSBBVURJT19TQU1QTEVfUkFURSBTQU1QTEVfUkFURV80OEsKQmV0dGVyIGRyb3Ag dGhpcyBkZWZpbmUgYW5kIHVzZSBTQU1QTEVfUkFURV80OEsgZGlyZWN0bHkuCj4gKyNkZWZpbmUg QVVESU9fQ0hBTk5FTF9DT1VOVCAyCj4gKwo+ICsvKgo+ICsgKiAwOiBTdGFuZGFyZCBJMlMKPiAr ICogMTogMzJiaXQgSTJTCj4gKyAqLwo+ICsjZGVmaW5lIEkyU19JTlBVVF9GT1JNQVQgMQoKCk1h eWJlIGl0IHdvdWxkIGJlIG1vcmUgdXNhYmxlIHRvIHVzZSBkZWZpbmVzIGFzIGZvbGxvd3M6Cgor I2RlZmluZSBJMlNfSU5QVVRfRk9STUFUX1NUQU5EQVJEIDAKCisjZGVmaW5lIEkyU19JTlBVVF9G T1JNQVRfMzJCSVQgMQoKKyNkZWZpbmUgSTJTX0lOUFVUX0ZPUk1BVF9ERUZBVUxUIEkyU19JTlBV VF9GT1JNQVRfMzJCSVQKCkxlc3MgbGluZXMsIG5vIGNvbW1lbnRzLCBzZWxmLWRvY3VtZW50aW5n IGNvZGUuIEV2ZW4gbW9yZSBJIGd1ZXNzIHlvdSBjYW4gZHJvcCBJMlNfSU5QVVRfRk9STUFUX0RF RkFVTFQgYW5kIHVzZSBJMlNfSU5QVVRfRk9STUFUXzMyQklUIGluc3RlYWQuCgo+ICsKPiArLyoK PiArICogMDogTGVmdC1qdXN0aWZpZWQKPiArICogMTogUmlnaHQtanVzdGlmaWVkCj4gKyAqLwo+ ICsjZGVmaW5lIEkyU19KVVNUSUZJRUQgMAo+ICsKPiArLyoKPiArICogMDogRGF0YSBkZWxheSAx VCBjb3JyZXNwb25kIHRvIFdTCj4gKyAqIDE6IE5vIGRhdGEgZGVsYXkgY29ycmVzcG9uZCB0byBX Uwo+ICsgKi8KPiArI2RlZmluZSBJMlNfREFUQV9ERUxBWSAwCj4gKwo+ICsvKgo+ICsgKiAwOiBM ZWZ0IGNoYW5uZWwKPiArICogMTogUmlnaHQgY2hhbm5lbAo+ICsgKi8KPiArI2RlZmluZSBJMlNf V1NfQ0hBTk5FTCAwCj4gKwo+ICsvKgo+ICsgKiAwOiBNU0Igc2hpZnQgZmlyc3QKPiArICogMTog TFNCIHNoaWZ0IGZpcnN0Cj4gKyAqLwo+ICsjZGVmaW5lIEkyU19EQVRBX1NFUVVFTkNFIDAKCmRp dHRvIGZvciBhYm92ZSA0IGRlZmluZXMKCgo+ICsKPiArLyoKPiArICogQXVkaW8gU2FtcGxlIFdv cmQgTGVuZ3RoCj4gKyAqIFdPUkRfTEVOR1RIXzE2QklUCj4gKyAqIFdPUkRfTEVOR1RIXzE4QklU Cj4gKyAqIFdPUkRfTEVOR1RIXzIwQklUCj4gKyAqIFdPUkRfTEVOR1RIXzI0QklUCj4gKyAqLwo+ ICsjZGVmaW5lIEFVRElPX1dPUkRfTEVOR1RIIFdPUkRfTEVOR1RIXzI0QklUCgpkaXR0bywgbW9y ZW92ZXIgdXNpbmcgc3ltYm9scyBub3QgeWV0IGRlZmluZWQgaXMgY29uZnVzaW5nL3VnbHksIGV2 ZW4gaWYgCnRoZSAocHJlKWNvbXBpbGVyIGFsbG93cyBpdC4KCj4gKwo+ICtlbnVtIGF1eF9jbWRf dHlwZSB7Cj4gKwlDTURfQVVYX05BVElWRV9SRUFEID0gMHgwLAo+ICsJQ01EX0FVWF9OQVRJVkVf V1JJVEUgPSAweDUsCj4gKwlDTURfQVVYX0kyQ19FRElEX1JFQUQgPSAweEIsCj4gK307Cj4gKwo+ ICtlbnVtIGF1eF9jbWRfcmVwbHkgewo+ICsJUkVQTFlfQUNLLAo+ICsJUkVQTFlfTkFDSywKPiAr CVJFUExZX0RFRkVSLAo+ICt9Owo+ICsKPiArZW51bSBsaW5rX3RyYWluX3N0YXR1cyB7Cj4gKwlM SU5LX0lETEUsCj4gKwlMSU5LX0JVU1ksCj4gKwlMSU5LX09LLAo+ICt9Owo+ICsKPiArZW51bSBo ZGNwX3N0YXRlIHsKPiArCUhEQ1BfQVVUSF9JRExFLAo+ICsJSERDUF9BVVRIX0dPSU5HLAo+ICsJ SERDUF9BVVRIX0RPTkUsCj4gK307Cj4gKwo+ICtzdHJ1Y3QgaXQ2NTA1X3BsYXRmb3JtX2RhdGEg ewo+ICsJc3RydWN0IHJlZ3VsYXRvciAqcHdyMTg7Cj4gKwlzdHJ1Y3QgcmVndWxhdG9yICpvdmRk Owo+ICsJc3RydWN0IGdwaW9fZGVzYyAqZ3Bpb2RfcmVzZXQ7Cj4gK307Cj4gKwo+ICtlbnVtIGl0 NjUwNV9hdWRpb19zZWxlY3Qgewo+ICsJSTJTID0gMCwKPiArCVNQRElGLAo+ICt9Owo+ICsKPiAr ZW51bSBpdDY1MDVfYXVkaW9fc2FtcGxlX3JhdGUgewo+ICsJU0FNUExFX1JBVEVfMjRLID0gMHg2 LAo+ICsJU0FNUExFX1JBVEVfMzJLID0gMHgzLAo+ICsJU0FNUExFX1JBVEVfNDhLID0gMHgyLAo+ ICsJU0FNUExFX1JBVEVfOTZLID0gMHhBLAo+ICsJU0FNUExFX1JBVEVfMTkySyA9IDB4RSwKPiAr CVNBTVBMRV9SQVRFXzQ0XzFLID0gMHgwLAo+ICsJU0FNUExFX1JBVEVfODhfMksgPSAweDgsCj4g KwlTQU1QTEVfUkFURV8xNzZfNEsgPSAweEMsCj4gK307Cj4gKwo+ICtlbnVtIGl0NjUwNV9hdWRp b190eXBlIHsKPiArCUxQQ00gPSAwLAo+ICsJTkxQQ00sCj4gKwlEU1MsCj4gK307Cj4gKwo+ICtl bnVtIGl0NjUwNV9hdWRpb193b3JkX2xlbmd0aCB7Cj4gKwlXT1JEX0xFTkdUSF8xNkJJVCA9IDAs Cj4gKwlXT1JEX0xFTkdUSF8xOEJJVCwKPiArCVdPUkRfTEVOR1RIXzIwQklULAo+ICsJV09SRF9M RU5HVEhfMjRCSVQsCj4gK307Cj4gKwo+ICtzdHJ1Y3QgaXQ2NTA1X2F1ZGlvX2RhdGEgewo+ICsJ ZW51bSBpdDY1MDVfYXVkaW9fc2VsZWN0IHNlbGVjdDsKPiArCWVudW0gaXQ2NTA1X2F1ZGlvX3Nh bXBsZV9yYXRlIHNhbXBsZV9yYXRlOwo+ICsJZW51bSBpdDY1MDVfYXVkaW9fdHlwZSB0eXBlOwo+ ICsJZW51bSBpdDY1MDVfYXVkaW9fd29yZF9sZW5ndGggd29yZF9sZW5ndGg7Cj4gKwl1OCBjaGFu bmVsX2NvdW50Owo+ICsJdTggaTJzX2lucHV0X2Zvcm1hdDsKPiArCXU4IGkyc19qdXN0aWZpZWQ7 Cj4gKwl1OCBpMnNfZGF0YV9kZWxheTsKPiArCXU4IGkyc193c19jaGFubmVsOwo+ICsJdTggaTJz X2RhdGFfc2VxdWVuY2U7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgaXQ2NTA1X2F1ZGlvX3NhbXBsZV9y YXRlX21hcCB7Cj4gKwllbnVtIGl0NjUwNV9hdWRpb19zYW1wbGVfcmF0ZSByYXRlOwo+ICsJaW50 IHNhbXBsZV9yYXRlX3ZhbHVlOwo+ICt9Owo+ICsKPiArc3RydWN0IGl0NjUwNV9kcm1fZHBfbGlu ayB7Cj4gKwl1bnNpZ25lZCBjaGFyIHJldmlzaW9uOwo+ICsJdW5zaWduZWQgaW50IHJhdGU7Cj4g Kwl1bnNpZ25lZCBpbnQgbnVtX2xhbmVzOwo+ICsJdW5zaWduZWQgbG9uZyBjYXBhYmlsaXRpZXM7 Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgaXQ2NTA1IHsKPiArCXN0cnVjdCBkcm1fZHBfYXV4IGF1eDsK PiArCXN0cnVjdCBkcm1fYnJpZGdlIGJyaWRnZTsKPiArCXN0cnVjdCBpMmNfY2xpZW50ICpjbGll bnQ7Cj4gKwlzdHJ1Y3QgZWRpZCAqZWRpZDsKPiArCXN0cnVjdCBkcm1fY29ubmVjdG9yIGNvbm5l Y3RvcjsKPiArCXN0cnVjdCBpdDY1MDVfZHJtX2RwX2xpbmsgbGluazsKPiArCXN0cnVjdCBpdDY1 MDVfcGxhdGZvcm1fZGF0YSBwZGF0YTsKPiArCXN0cnVjdCBtdXRleCBleHRjb25fbG9jazsKPiAr CXN0cnVjdCBtdXRleCBtb2RlX2xvY2s7Cj4gKwlzdHJ1Y3QgbXV0ZXggYXV4X2xvY2s7Cj4gKwlz dHJ1Y3QgcmVnbWFwICpyZWdtYXA7Cj4gKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSB2aWRlb19p bmZvOwo+ICsJc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGV2ZW50X25iOwo+ICsJc3RydWN0IGV4dGNv bl9kZXYgKmV4dGNvbjsKPiArCXN0cnVjdCB3b3JrX3N0cnVjdCBleHRjb25fd3E7Cj4gKwllbnVt IGRybV9jb25uZWN0b3Jfc3RhdHVzIGNvbm5lY3Rvcl9zdGF0dXM7Cj4gKwllbnVtIGxpbmtfdHJh aW5fc3RhdHVzIGxpbmtfc3RhdGU7Cj4gKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgbGlua193b3JrczsK PiArCXU4IGRwY2RbRFBfUkVDRUlWRVJfQ0FQX1NJWkVdOwo+ICsJdTggbGFuZV9jb3VudDsKPiAr CXU4IGxpbmtfcmF0ZV9id19jb2RlOwo+ICsJdTggc2lua19jb3VudDsKPiArCWJvb2wgc3RlcF90 cmFpbjsKPiArCWJvb2wgYnJhbmNoX2RldmljZTsKPiArCWJvb2wgZW5hYmxlX3NzYzsKPiArCWJv b2wgbGFuZV9zd2FwX2Rpc2FibGVkOwo+ICsJYm9vbCBsYW5lX3N3YXA7Cj4gKwlib29sIHBvd2Vy ZWQ7Cj4gKwl1MzIgYWZlX3NldHRpbmc7Cj4gKwllbnVtIGhkY3Bfc3RhdGUgaGRjcF9zdGF0dXM7 Cj4gKwlzdHJ1Y3QgZGVsYXllZF93b3JrIGhkY3Bfd29yazsKPiArCXN0cnVjdCB3b3JrX3N0cnVj dCBoZGNwX3dhaXRfa3N2X2xpc3Q7Cj4gKwlzdHJ1Y3QgY29tcGxldGlvbiB3YWl0X2VkaWRfY29t cGxldGU7Cj4gKwl1OCBhdXRvX3RyYWluX3JldHJ5Owo+ICsJYm9vbCBoZGNwX2Rlc2lyZWQ7Cj4g Kwlib29sIGlzX3JlcGVhdGVyOwo+ICsJdTggaGRjcF9kb3duX3N0cmVhbV9jb3VudDsKPiArCXU4 IGJrc3ZzW0RSTV9IRENQX0tTVl9MRU5dOwo+ICsJdTggc2hhMV9pbnB1dFtIRENQX1NIQTFfRklG T19MRU5dOwo+ICsJYm9vbCBlbmFibGVfZW5oYW5jZWRfZnJhbWU7Cj4gKwloZG1pX2NvZGVjX3Bs dWdnZWRfY2IgcGx1Z2dlZF9jYjsKPiArCXN0cnVjdCBkZXZpY2UgKmNvZGVjX2RldjsKPiArCXN0 cnVjdCBkZWxheWVkX3dvcmsgZGVsYXllZF9hdWRpbzsKPiArCXN0cnVjdCBpdDY1MDVfYXVkaW9f ZGF0YSBhdWRpbzsKPiArCj4gKwkvKiBpdDY1MDUgZHJpdmVyIGhvbGQgb3B0aW9uICovCj4gKwli b29sIGVuYWJsZV9kcnZfaG9sZDsKPiArfTsKPiArCj4gK3N0cnVjdCBpdDY1MDVfc3RlcF90cmFp bl9wYXJhIHsKPiArCXU4IHZvbHRhZ2Vfc3dpbmdbTUFYX0xBTkVfQ09VTlRdOwo+ICsJdTggcHJl X2VtcGhhc2lzW01BWF9MQU5FX0NPVU5UXTsKPiArfTsKPiArCj4gKy8qCj4gKyAqIFZlbmRvciBv cHRpb24gYWZlIHNldHRpbmdzIGZvciBkaWZmZXJlbnQgcGxhdGZvcm1zCj4gKyAqIDA6IHdpdGhv dXQgRlBDIGNhYmxlCj4gKyAqIDE6IHdpdGggRlBDIGNhYmxlCj4gKyAqLwo+ICsKPiArc3RhdGlj IHU4IGNvbnN0IGFmZV9zZXR0aW5nX3RhYmxlW11bM10gPSB7Cj4gKwl7MHg4MiwgMHgwMCwgMHg0 NX0sCj4gKwl7MHg5MywgMHgyQSwgMHg4NX0KPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgaXQ2NTA1X2F1ZGlvX3NhbXBsZV9yYXRlX21hcCBhdWRpb19zYW1wbGVfcmF0ZV9tYXBbXSA9 IHsKPiArCXtTQU1QTEVfUkFURV8yNEssIDI0MDAwfSwKPiArCXtTQU1QTEVfUkFURV8zMkssIDMy MDAwfSwKPiArCXtTQU1QTEVfUkFURV80OEssIDQ4MDAwfSwKPiArCXtTQU1QTEVfUkFURV85Nkss IDk2MDAwfSwKPiArCXtTQU1QTEVfUkFURV8xOTJLLCAxOTIwMDB9LAo+ICsJe1NBTVBMRV9SQVRF XzQ0XzFLLCA0NDEwMH0sCj4gKwl7U0FNUExFX1JBVEVfODhfMkssIDg4MjAwfSwKPiArCXtTQU1Q TEVfUkFURV8xNzZfNEssIDE3NjQwMH0sCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0 IHJlZ21hcF9yYW5nZSBpdDY1MDVfYnJpZGdlX3ZvbGF0aWxlX3Jhbmdlc1tdID0gewo+ICsJeyAu cmFuZ2VfbWluID0gMCwgLnJhbmdlX21heCA9IDB4RkYgfSwKPiArfTsKPiArCj4gK3N0YXRpYyBj b25zdCBzdHJ1Y3QgcmVnbWFwX2FjY2Vzc190YWJsZSBpdDY1MDVfYnJpZGdlX3ZvbGF0aWxlX3Rh YmxlID0gewo+ICsJLnllc19yYW5nZXMgPSBpdDY1MDVfYnJpZGdlX3ZvbGF0aWxlX3JhbmdlcywK PiArCS5uX3llc19yYW5nZXMgPSBBUlJBWV9TSVpFKGl0NjUwNV9icmlkZ2Vfdm9sYXRpbGVfcmFu Z2VzKSwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBpdDY1 MDVfcmVnbWFwX2NvbmZpZyA9IHsKPiArCS5yZWdfYml0cyA9IDgsCj4gKwkudmFsX2JpdHMgPSA4 LAo+ICsJLnZvbGF0aWxlX3RhYmxlID0gJml0NjUwNV9icmlkZ2Vfdm9sYXRpbGVfdGFibGUsCj4g KwkuY2FjaGVfdHlwZSA9IFJFR0NBQ0hFX05PTkUsCj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IGl0 NjUwNV9yZWFkKHN0cnVjdCBpdDY1MDUgKml0NjUwNSwgdW5zaWduZWQgaW50IHJlZ19hZGRyKQo+ ICt7Cj4gKwl1bnNpZ25lZCBpbnQgdmFsdWU7Cj4gKwlpbnQgZXJyOwo+ICsJc3RydWN0IGRldmlj ZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7Cj4gKwo+ICsJZXJyID0gcmVnbWFwX3JlYWQo aXQ2NTA1LT5yZWdtYXAsIHJlZ19hZGRyLCAmdmFsdWUpOwo+ICsJaWYgKGVyciA8IDApIHsKPiAr CQlEUk1fREVWX0VSUk9SKGRldiwgInJlYWQgZmFpbGVkIHJlZ1sweCV4XSBlcnI6ICVkIiwgcmVn X2FkZHIsCj4gKwkJCSAgICAgIGVycik7Cj4gKwkJcmV0dXJuIGVycjsKPiArCX0KPiArCj4gKwly ZXR1cm4gdmFsdWU7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaXQ2NTA1X3dyaXRlKHN0cnVjdCBp dDY1MDUgKml0NjUwNSwgdW5zaWduZWQgaW50IHJlZ19hZGRyLAo+ICsJCSAgICAgIHVuc2lnbmVk IGludCByZWdfdmFsKQo+ICt7Cj4gKwlpbnQgZXJyOwo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0g Jml0NjUwNS0+Y2xpZW50LT5kZXY7Cj4gKwo+ICsJZXJyID0gcmVnbWFwX3dyaXRlKGl0NjUwNS0+ cmVnbWFwLCByZWdfYWRkciwgcmVnX3ZhbCk7Cj4gKwo+ICsJaWYgKGVyciA8IDApIHsKPiArCQlE Uk1fREVWX0VSUk9SKGRldiwgIndyaXRlIGZhaWxlZCByZWdbMHgleF0gPSAweCV4IGVyciA9ICVk IiwKPiArCQkJICAgICAgcmVnX2FkZHIsIHJlZ192YWwsIGVycik7Cj4gKwkJcmV0dXJuIGVycjsK PiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBpdDY1MDVfc2V0 X2JpdHMoc3RydWN0IGl0NjUwNSAqaXQ2NTA1LCB1bnNpZ25lZCBpbnQgcmVnLAo+ICsJCQkgdW5z aWduZWQgaW50IG1hc2ssIHVuc2lnbmVkIGludCB2YWx1ZSkKPiArewo+ICsJaW50IGVycjsKPiAr CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Owo+ICsKPiArCWVyciA9 IHJlZ21hcF91cGRhdGVfYml0cyhpdDY1MDUtPnJlZ21hcCwgcmVnLCBtYXNrLCB2YWx1ZSk7Cj4g KwlpZiAoZXJyIDwgMCkgewo+ICsJCURSTV9ERVZfRVJST1IoCj4gKwkJCWRldiwgIndyaXRlIHJl Z1sweCV4XSA9IDB4JXggbWFzayA9IDB4JXggZmFpbGVkIGVyciAlZCIsCj4gKwkJCXJlZywgdmFs dWUsIG1hc2ssIGVycik7Cj4gKwkJcmV0dXJuIGVycjsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsK PiArfQo+ICsKPiArc3RhdGljIHZvaWQgaXQ2NTA1X2RlYnVnX3ByaW50KHN0cnVjdCBpdDY1MDUg Kml0NjUwNSwgdW5zaWduZWQgaW50IHJlZywKPiArCQkJICAgICBjb25zdCBjaGFyICpwcmVmaXgp Cj4gK3sKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Owo+ICsJ aW50IHZhbDsKPiArCj4gKwlpZiAobGlrZWx5KCEoX19kcm1fZGVidWcgJiBEUk1fVVRfRFJJVkVS KSkpCj4gKwkJcmV0dXJuOwo+ICsKPiArCXZhbCA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgcmVnKTsK PiArCWlmICh2YWwgPCAwKQo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIiVzIHJlZ1sl MDJ4XSByZWFkIGVycm9yICglZCkiLAo+ICsJCQkJICAgICBwcmVmaXgsIHJlZywgdmFsKTsKPiAr CWVsc2UKPiArCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICIlcyByZWdbJTAyeF0gPSAweCUw MngiLCBwcmVmaXgsIHJlZywKPiArCQkJCSAgICAgdmFsKTsKPiArfQo+ICsKPiArc3RhdGljIGlu dCBpdDY1MDVfZHBjZF9yZWFkKHN0cnVjdCBpdDY1MDUgKml0NjUwNSwgdW5zaWduZWQgbG9uZyBv ZmZzZXQpCj4gK3sKPiArCXU4IHZhbHVlOwo+ICsJaW50IHJldDsKPiArCXN0cnVjdCBkZXZpY2Ug KmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Owo+ICsKPiArCXJldCA9IGRybV9kcF9kcGNkX3Jl YWRiKCZpdDY1MDUtPmF1eCwgb2Zmc2V0LCAmdmFsdWUpOwo+ICsJaWYgKHJldCA8IDApIHsKPiAr CQlEUk1fREVWX0VSUk9SKGRldiwgIkRQQ0QgcmVhZCBmYWlsZWQgWzB4JWx4XSByZXQ6ICVkIiwg b2Zmc2V0LAo+ICsJCQkgICAgICByZXQpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwlyZXR1 cm4gdmFsdWU7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaXQ2NTA1X2RwY2Rfd3JpdGUoc3RydWN0 IGl0NjUwNSAqaXQ2NTA1LCB1bnNpZ25lZCBsb25nIG9mZnNldCwKPiArCQkJICAgICB1bnNpZ25l ZCBsb25nIGRhdGFpbikKPiArewo+ICsJaW50IHJldDsKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9 ICZpdDY1MDUtPmNsaWVudC0+ZGV2Owo+ICsKPiArCXJldCA9IGRybV9kcF9kcGNkX3dyaXRlYigm aXQ2NTA1LT5hdXgsIG9mZnNldCwgZGF0YWluKTsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJRFJN X0RFVl9FUlJPUihkZXYsICJEUENEIHdyaXRlIGZhaWxlZCBbMHglbHhdIHJldDogJWQiLCBvZmZz ZXQsCj4gKwkJCSAgICAgIHJldCk7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCXJldHVybiAw Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGl0NjUwNV9nZXRfZHBjZChzdHJ1Y3QgaXQ2NTA1ICpp dDY1MDUsIGludCBvZmZzZXQsIHU4ICpkcGNkLCBpbnQgbnVtKQo+ICt7Cj4gKwlpbnQgcmV0Owo+ ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7Cj4gKwo+ICsJcmV0 ID0gZHJtX2RwX2RwY2RfcmVhZCgmaXQ2NTA1LT5hdXgsIG9mZnNldCwgZHBjZCwgbnVtKTsKPiAr Cj4gKwlpZiAocmV0IDwgMCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCURSTV9ERVZfREVCVUdf RFJJVkVSKGRldiwgInJldCA9ICVkIERQQ0RbMHgleF0gPSAweCUqcGgiLCByZXQsIG9mZnNldCwK PiArCQkJICAgICBudW0sIGRwY2QpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCBpdDY1MDVfZHVtcChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpCj4gK3sKPiArCXVuc2ln bmVkIGludCBpLCBqOwo+ICsJdTggcmVnc1sxNl07Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAm aXQ2NTA1LT5jbGllbnQtPmRldjsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDw9IDB4ZmY7IGkgKz0g MTYpIHsKPiArCQlmb3IgKGogPSAwOyBqIDwgMTY7IGorKykKPiArCQkJcmVnc1tqXSA9IGl0NjUw NV9yZWFkKGl0NjUwNSwgaSArIGopOwo+ICsKPiArCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYs ICJbMHglMDJ4XSA9ICUxNnBoIiwgaSwgcmVncyk7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyBi b29sIGl0NjUwNV9nZXRfc2lua19ocGRfc3RhdHVzKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkKPiAr ewo+ICsJaW50IHJlZ18wZDsKPiArCj4gKwlyZWdfMGQgPSBpdDY1MDVfcmVhZChpdDY1MDUsIFJF R19TWVNURU1fU1RTKTsKPiArCj4gKwlpZiAocmVnXzBkIDwgMCkKPiArCQlyZXR1cm4gZmFsc2U7 Cj4gKwo+ICsJcmV0dXJuICEhKHJlZ18wZCAmIEhQRF9TVFMpOwoKCkRyb3AgISEsIGNvbXBpbGVy IHdpbGwgcGVyZm9ybSBjb3JyZWN0IGNvbnZlcnNpb24uCgoKPiArfQo+ICsKPiArc3RhdGljIGlu dCBpdDY1MDVfcmVhZF93b3JkKHN0cnVjdCBpdDY1MDUgKml0NjUwNSwgdW5zaWduZWQgaW50IHJl ZykKPiArewo+ICsJaW50IHZhbDAsIHZhbDE7Cj4gKwo+ICsJdmFsMCA9IGl0NjUwNV9yZWFkKGl0 NjUwNSwgcmVnKTsKPiArCWlmICh2YWwwIDwgMCkKPiArCQlyZXR1cm4gdmFsMDsKPiArCj4gKwl2 YWwxID0gaXQ2NTA1X3JlYWQoaXQ2NTA1LCByZWcgKyAxKTsKPiArCWlmICh2YWwxIDwgMCkKPiAr CQlyZXR1cm4gdmFsMTsKPiArCj4gKwlyZXR1cm4gKHZhbDEgPDwgOCkgfCB2YWwwOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfY2FsY192aWRlb19pbmZvKHN0cnVjdCBpdDY1MDUgKml0 NjUwNSkKPiArewo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7 Cj4gKwlpbnQgaHN5bmNfcG9sLCB2c3luY19wb2wsIGludGVybGFjZWQ7Cj4gKwlpbnQgaHRvdGFs LCBoZGVzLCBoZGV3LCBoZnBoLCBoc3luY3c7Cj4gKwlpbnQgdnRvdGFsLCB2ZGVzLCB2ZGV3LCB2 ZnBoLCB2c3luY3c7Cj4gKwlpbnQgcmRkYXRhLCBpLCBwY2xrLCBzdW0gPSAwOwo+ICsKPiArCXVz bGVlcF9yYW5nZSgxMDAwMCwgMTUwMDApOwo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0JB TktfU0VMLCAweDAwKTsKPiArCXJkZGF0YSA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgUkVHX0lOUFVU X0NUUkwpOwo+ICsJaHN5bmNfcG9sID0gcmRkYXRhICYgSU5QVVRfSFNZTkNfUE9MOwo+ICsJdnN5 bmNfcG9sID0gKHJkZGF0YSAmIElOUFVUX1ZTWU5DX1BPTCkgPj4gMjsKPiArCWludGVybGFjZWQg PSAocmRkYXRhICYgSU5QVVRfSU5URVJMQUNFRCkgPj4gNDsKPiArCj4gKwlodG90YWwgPSBpdDY1 MDVfcmVhZF93b3JkKGl0NjUwNSwgUkVHX0lOUFVUX0hUT1RBTCkgJiAweDFGRkY7Cj4gKwloZGVz ID0gaXQ2NTA1X3JlYWRfd29yZChpdDY1MDUsIFJFR19JTlBVVF9IQUNUSVZFX1NUQVJUKSAmIDB4 MUZGRjsKPiArCWhkZXcgPSBpdDY1MDVfcmVhZF93b3JkKGl0NjUwNSwgUkVHX0lOUFVUX0hBQ1RJ VkVfV0lEVEgpICYgMHgxRkZGOwo+ICsJaGZwaCA9IGl0NjUwNV9yZWFkX3dvcmQoaXQ2NTA1LCBS RUdfSU5QVVRfSEZST05UX1BPUkNIKSAmIDB4MUZGRjsKPiArCWhzeW5jdyA9IGl0NjUwNV9yZWFk X3dvcmQoaXQ2NTA1LCBSRUdfSU5QVVRfSFNZTkNfV0lEVEgpICYgMHgxRkZGOwo+ICsKPiArCXZ0 b3RhbCA9IGl0NjUwNV9yZWFkX3dvcmQoaXQ2NTA1LCBSRUdfSU5QVVRfVlRPVEFMKSAmIDB4RkZG Owo+ICsJdmRlcyA9IGl0NjUwNV9yZWFkX3dvcmQoaXQ2NTA1LCBSRUdfSU5QVVRfVkFDVElWRV9T VEFSVCkgJiAweEZGRjsKPiArCXZkZXcgPSBpdDY1MDVfcmVhZF93b3JkKGl0NjUwNSwgUkVHX0lO UFVUX1ZBQ1RJVkVfV0lEVEgpICYgMHhGRkY7Cj4gKwl2ZnBoID0gaXQ2NTA1X3JlYWRfd29yZChp dDY1MDUsIFJFR19JTlBVVF9WRlJPTlRfUE9SQ0gpICYgMHhGRkY7Cj4gKwl2c3luY3cgPSBpdDY1 MDVfcmVhZF93b3JkKGl0NjUwNSwgUkVHX0lOUFVUX1ZTWU5DX1dJRFRIKSAmIDB4RkZGOwo+ICsK PiArCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImhzeW5jX3BvbDolZCwgdnN5bmNfcG9sOiVk LCBpbnRlcmxhY2VkOiVkIiwKPiArCQkJICAgICBoc3luY19wb2wsIHZzeW5jX3BvbCwgaW50ZXJs YWNlZCk7Cj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJoYWN0aXZlX3N0YXJ0OiVkLCB2 YWN0aXZlX3N0YXJ0OiVkIiwKPiArCQkJICAgICBoZGVzLCB2ZGVzKTsKPiArCj4gKwlmb3IgKGkg PSAwOyBpIDwgMTA7IGkrKykgewo+ICsJCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19EQVRB X0NUUkwwLCBFTkFCTEVfUENMS19DT1VOVEVSLAo+ICsJCQkJRU5BQkxFX1BDTEtfQ09VTlRFUik7 Cj4gKwkJdXNsZWVwX3JhbmdlKDEwMDAwLCAxNTAwMCk7Cj4gKwkJaXQ2NTA1X3NldF9iaXRzKGl0 NjUwNSwgUkVHX0RBVEFfQ1RSTDAsIEVOQUJMRV9QQ0xLX0NPVU5URVIsCj4gKwkJCQkweDAwKTsK PiArCQlyZGRhdGEgPSBpdDY1MDVfcmVhZF93b3JkKGl0NjUwNSwgUkVHX1BDTEtfQ09VTlRFUl9W QUxVRSkgJgo+ICsJCQkgMHhGRkY7Cj4gKwo+ICsJCXN1bSArPSByZGRhdGE7Cj4gKwl9Cj4gKwo+ ICsJaWYgKHN1bSA9PSAwKSB7Cj4gKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiY2FsYyB2 aWRlbyB0aW1pbmcgZXJyb3IiKTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJc3VtIC89IDEw Owo+ICsJcGNsayA9IDEzNTAwICogMjA0OCAvIHN1bTsKPiArCWl0NjUwNS0+dmlkZW9faW5mby5j bG9jayA9IHBjbGs7Cj4gKwlpdDY1MDUtPnZpZGVvX2luZm8uaGRpc3BsYXkgPSBoZGV3Owo+ICsJ aXQ2NTA1LT52aWRlb19pbmZvLmhzeW5jX3N0YXJ0ID0gaGRldyArIGhmcGg7Cj4gKwlpdDY1MDUt PnZpZGVvX2luZm8uaHN5bmNfZW5kID0gaGRldyArIGhmcGggKyBoc3luY3c7Cj4gKwlpdDY1MDUt PnZpZGVvX2luZm8uaHRvdGFsID0gaHRvdGFsOwo+ICsJaXQ2NTA1LT52aWRlb19pbmZvLnZkaXNw bGF5ID0gdmRldzsKPiArCWl0NjUwNS0+dmlkZW9faW5mby52c3luY19zdGFydCA9IHZkZXcgKyB2 ZnBoOwo+ICsJaXQ2NTA1LT52aWRlb19pbmZvLnZzeW5jX2VuZCA9IHZkZXcgKyB2ZnBoICsgdnN5 bmN3Owo+ICsJaXQ2NTA1LT52aWRlb19pbmZvLnZ0b3RhbCA9IHZ0b3RhbDsKPiArCj4gKwlEUk1f REVWX0RFQlVHX0RSSVZFUihkZXYsIERSTV9NT0RFX0ZNVCwKPiArCQkJICAgICBEUk1fTU9ERV9B UkcoJml0NjUwNS0+dmlkZW9faW5mbykpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGl0NjUwNV9k cm1fZHBfbGlua19wcm9iZShzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4LAo+ICsJCQkJICAgIHN0cnVj dCBpdDY1MDVfZHJtX2RwX2xpbmsgKmxpbmspCj4gK3sKPiArCXU4IHZhbHVlc1szXTsKPiArCWlu dCBlcnI7Cj4gKwo+ICsJbWVtc2V0KGxpbmssIDAsIHNpemVvZigqbGluaykpOwo+ICsKPiArCWVy ciA9IGRybV9kcF9kcGNkX3JlYWQoYXV4LCBEUF9EUENEX1JFViwgdmFsdWVzLCBzaXplb2YodmFs dWVzKSk7Cj4gKwlpZiAoZXJyIDwgMCkKPiArCQlyZXR1cm4gZXJyOwo+ICsKPiArCWxpbmstPnJl dmlzaW9uID0gdmFsdWVzWzBdOwo+ICsJbGluay0+cmF0ZSA9IGRybV9kcF9id19jb2RlX3RvX2xp bmtfcmF0ZSh2YWx1ZXNbMV0pOwo+ICsJbGluay0+bnVtX2xhbmVzID0gdmFsdWVzWzJdICYgRFBf TUFYX0xBTkVfQ09VTlRfTUFTSzsKPiArCj4gKwlpZiAodmFsdWVzWzJdICYgRFBfRU5IQU5DRURf RlJBTUVfQ0FQKQo+ICsJCWxpbmstPmNhcGFiaWxpdGllcyA9IDE7Cj4gKwo+ICsJcmV0dXJuIDA7 Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaXQ2NTA1X2RybV9kcF9saW5rX3Bvd2VyX3VwKHN0cnVj dCBkcm1fZHBfYXV4ICphdXgsCj4gKwkJCQkgICAgICAgc3RydWN0IGl0NjUwNV9kcm1fZHBfbGlu ayAqbGluaykKPiArewo+ICsJdTggdmFsdWU7Cj4gKwlpbnQgZXJyOwo+ICsKPiArCS8qIERQX1NF VF9QT1dFUiByZWdpc3RlciBpcyBvbmx5IGF2YWlsYWJsZSBvbiBEUENEIHYxLjEgYW5kIGxhdGVy ICovCj4gKwlpZiAobGluay0+cmV2aXNpb24gPCAweDExKQo+ICsJCXJldHVybiAwOwo+ICsKPiAr CWVyciA9IGRybV9kcF9kcGNkX3JlYWRiKGF1eCwgRFBfU0VUX1BPV0VSLCAmdmFsdWUpOwo+ICsJ aWYgKGVyciA8IDApCj4gKwkJcmV0dXJuIGVycjsKPiArCj4gKwl2YWx1ZSAmPSB+RFBfU0VUX1BP V0VSX01BU0s7Cj4gKwl2YWx1ZSB8PSBEUF9TRVRfUE9XRVJfRDA7Cj4gKwo+ICsJZXJyID0gZHJt X2RwX2RwY2Rfd3JpdGViKGF1eCwgRFBfU0VUX1BPV0VSLCB2YWx1ZSk7Cj4gKwlpZiAoZXJyIDwg MCkKPiArCQlyZXR1cm4gZXJyOwo+ICsKPiArCS8qCj4gKwkgKiBBY2NvcmRpbmcgdG8gdGhlIERQ IDEuMSBzcGVjaWZpY2F0aW9uLCBhICJTaW5rIERldmljZSBtdXN0IGV4aXQgdGhlCj4gKwkgKiBw b3dlciBzYXZpbmcgc3RhdGUgd2l0aGluIDEgbXMiIChTZWN0aW9uIDIuNS4zLjEsIFRhYmxlIDUt NTIsICJTaW5rCj4gKwkgKiBDb250cm9sIEZpZWxkIiAocmVnaXN0ZXIgMHg2MDApLgo+ICsJICov Cj4gKwl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiAr Cj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9jbGVhcl9pbnQoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQo+ ICt7Cj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQkFOS19TRUwsIDB4MDApOwo+ICsJaXQ2 NTA1X3dyaXRlKGl0NjUwNSwgSU5UX1NUQVRVU18wMSwgMHhGRik7Cj4gKwlpdDY1MDVfd3JpdGUo aXQ2NTA1LCBJTlRfU1RBVFVTXzAyLCAweEZGKTsKPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIElO VF9TVEFUVVNfMDMsIDB4RkYpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfaW50X21h c2tfZW5hYmxlKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkKPiArewo+ICsJaXQ2NTA1X3dyaXRlKGl0 NjUwNSwgUkVHX0JBTktfU0VMLCAweDAwKTsKPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIElOVF9N QVNLXzAxLCAweDFGKTsKPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIElOVF9NQVNLXzAyLCAweDA3 KTsKPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIElOVF9NQVNLXzAzLCAweEIwKTsKPiArfQo+ICsK PiArc3RhdGljIHZvaWQgaXQ2NTA1X2ludF9tYXNrX2Rpc2FibGUoc3RydWN0IGl0NjUwNSAqaXQ2 NTA1KQo+ICt7Cj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQkFOS19TRUwsIDB4MDApOwo+ ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgSU5UX01BU0tfMDEsIDB4MDApOwo+ICsJaXQ2NTA1X3dy aXRlKGl0NjUwNSwgSU5UX01BU0tfMDIsIDB4MDApOwo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwg SU5UX01BU0tfMDMsIDB4MDApOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfbGFuZV90 ZXJtaW5hdGlvbl9vbihzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpCj4gK3sKPiArCWludCByZWdjZjsK PiArCj4gKwlyZWdjZiA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgUkVHX1VTRVJfRFJWX1BSRSk7Cj4g Kwo+ICsJaWYgKHJlZ2NmID09IDB4RjApCj4gKwkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVH X0RSVl9MTl9EQVRBX1NFTCwgMHg4MCwgMHgwMCk7Cj4gKwo+ICsJaWYgKHJlZ2NmID09IDB4NzAp IHsKPiArCQlpZiAoaXQ2NTA1LT5sYW5lX3N3YXApIHsKPiArCQkJc3dpdGNoIChpdDY1MDUtPmxh bmVfY291bnQpIHsKPiArCQkJY2FzZSAxOgo+ICsJCQljYXNlIDI6Cj4gKwkJCQlpdDY1MDVfc2V0 X2JpdHMoaXQ2NTA1LCBSRUdfRFJWX0xOX0RBVEFfU0VMLAo+ICsJCQkJCQkweDBDLCAweDA4KTsK PiArCQkJCWJyZWFrOwo+ICsJCQlkZWZhdWx0Ogo+ICsJCQkJaXQ2NTA1X3NldF9iaXRzKGl0NjUw NSwgUkVHX0RSVl9MTl9EQVRBX1NFTCwKPiArCQkJCQkJMHgwQywgMHgwQyk7Cj4gKwkJCQlicmVh azsKPiArCQkJfQo+ICsJCX0gZWxzZSB7Cj4gKwkJCXN3aXRjaCAoaXQ2NTA1LT5sYW5lX2NvdW50 KSB7Cj4gKwkJCWNhc2UgMToKPiArCQkJY2FzZSAyOgo+ICsJCQkJaXQ2NTA1X3NldF9iaXRzKGl0 NjUwNSwgUkVHX0RSVl9MTl9EQVRBX1NFTCwKPiArCQkJCQkJMHgwQywgMHgwNCk7Cj4gKwkJCQli cmVhazsKPiArCQkJZGVmYXVsdDoKPiArCQkJCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19E UlZfTE5fREFUQV9TRUwsCj4gKwkJCQkJCTB4MEMsIDB4MEMpOwo+ICsJCQkJYnJlYWs7Cj4gKwkJ CX0KPiArCQl9Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9sYW5lX3Rlcm1p bmF0aW9uX29mZihzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpCj4gK3sKPiArCWludCByZWdjZjsKPiAr Cj4gKwlyZWdjZiA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgUkVHX1VTRVJfRFJWX1BSRSk7Cj4gKwo+ ICsJaWYgKHJlZ2NmID09IDB4RjApCj4gKwkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0RS Vl9MTl9EQVRBX1NFTCwgMHg4MCwgMHg4MCk7Cj4gKwo+ICsJaWYgKHJlZ2NmID09IDB4NzApCj4g KwkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0RSVl9MTl9EQVRBX1NFTCwgMHgwQywgMHgw MCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9sYW5lX3Bvd2VyX29uKHN0cnVjdCBp dDY1MDUgKml0NjUwNSkKPiArewo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0xJTktf RFJWLCAweEYxLAo+ICsJCQkoaXQ2NTA1LT5sYW5lX3N3YXAgPwo+ICsJCQkJIEdFTk1BU0soNywg OCAtIGl0NjUwNS0+bGFuZV9jb3VudCkgOgo+ICsJCQkJIEdFTk1BU0soMyArIGl0NjUwNS0+bGFu ZV9jb3VudCwgNCkpIHwKPiArCQkJCTB4MDEpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBpdDY1 MDVfbGFuZV9wb3dlcl9vZmYoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQo+ICt7Cj4gKwlpdDY1MDVf c2V0X2JpdHMoaXQ2NTA1LCBSRUdfTElOS19EUlYsIDB4RjAsIDB4MDApOwo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCBpdDY1MDVfbGFuZV9vZmYoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQo+ICt7Cj4g KwlpdDY1MDVfbGFuZV9wb3dlcl9vZmYoaXQ2NTA1KTsKPiArCWl0NjUwNV9sYW5lX3Rlcm1pbmF0 aW9uX29mZihpdDY1MDUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfYXV4X3Rlcm1p bmF0aW9uX29uKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkKPiArewo+ICsJaW50IHJlZ2NmOwo+ICsK PiArCXJlZ2NmID0gaXQ2NTA1X3JlYWQoaXQ2NTA1LCBSRUdfVVNFUl9EUlZfUFJFKTsKPiArCj4g KwlpZiAocmVnY2YgPT0gMHhGMCkKPiArCQlpdDY1MDVfbGFuZV90ZXJtaW5hdGlvbl9vbihpdDY1 MDUpOwo+ICsKPiArCWlmIChyZWdjZiA9PSAweDcwKQo+ICsJCWl0NjUwNV9zZXRfYml0cyhpdDY1 MDUsIFJFR19EUlZfTE5fREFUQV9TRUwsIDB4ODAsIDB4ODApOwo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZCBpdDY1MDVfYXV4X3Bvd2VyX29uKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkKPiArewo+ICsJ aXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0FVWCwgMHgwMiwgMHgwMik7Cj4gK30KPiArCj4g K3N0YXRpYyB2b2lkIGl0NjUwNV9hdXhfb24oc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQo+ICt7Cj4g KwlpdDY1MDVfYXV4X3Bvd2VyX29uKGl0NjUwNSk7Cj4gKwlpdDY1MDVfYXV4X3Rlcm1pbmF0aW9u X29uKGl0NjUwNSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9hdXhfcmVzZXQoc3Ry dWN0IGl0NjUwNSAqaXQ2NTA1KQo+ICt7Cj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdf UkVTRVRfQ1RSTCwgQVVYX1JFU0VULCBBVVhfUkVTRVQpOwo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0 NjUwNSwgUkVHX1JFU0VUX0NUUkwsIEFVWF9SRVNFVCwgMHgwMCk7Cj4gK30KPiArCj4gK3N0YXRp YyB2b2lkIGl0NjUwNV9yZXNldF9sb2dpYyhzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpCj4gK3sKPiAr CXJlZ21hcF93cml0ZShpdDY1MDUtPnJlZ21hcCwgUkVHX1JFU0VUX0NUUkwsIEFMTF9MT0dJQ19S RVNFVCk7Cj4gKwl1c2xlZXBfcmFuZ2UoMTAwMCwgMTUwMCk7Cj4gK30KPiArCj4gK3N0YXRpYyBi b29sIGl0NjUwNV9hdXhfb3BfZmluaXNoZWQoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQo+ICt7Cj4g KwlpbnQgcmVnMmIgPSBpdDY1MDVfcmVhZChpdDY1MDUsIFJFR19BVVhfQ01EX1JFUSk7Cj4gKwo+ ICsJaWYgKHJlZzJiIDwgMCkKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwo+ICsJcmV0dXJuIChyZWcy YiAmIEFVWF9CVVNZKSA9PSAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGl0NjUwNV9hdXhfd2Fp dChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpCj4gK3sKPiArCWludCBzdGF0dXM7Cj4gKwl1bnNpZ25l ZCBsb25nIHRpbWVvdXQ7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQt PmRldjsKPiArCj4gKwl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoQVVYX1dB SVRfVElNRU9VVF9NUykgKyAxOwo+ICsKPiArCXdoaWxlICghaXQ2NTA1X2F1eF9vcF9maW5pc2hl ZChpdDY1MDUpKSB7Cj4gKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHsKPiAr CQkJRFJNX0RFVl9FUlJPUihkZXYsICJUaW1lZCBvdXQgd2FpdGluZyBBVVggdG8gZmluaXNoIik7 Cj4gKwkJCXJldHVybiAtRVRJTUVET1VUOwo+ICsJCX0KPiArCQl1c2xlZXBfcmFuZ2UoMTAwMCwg MjAwMCk7Cj4gKwl9Cj4gKwo+ICsJc3RhdHVzID0gaXQ2NTA1X3JlYWQoaXQ2NTA1LCBSRUdfQVVY X0VSUk9SX1NUUyk7Cj4gKwlpZiAoc3RhdHVzIDwgMCkgewo+ICsJCURSTV9ERVZfRVJST1IoZGV2 LCAiRmFpbGVkIHRvIHJlYWQgQVVYIGNoYW5uZWw6ICVkIiwgc3RhdHVzKTsKPiArCQlyZXR1cm4g c3RhdHVzOwo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3NpemVf dCBpdDY1MDVfYXV4X29wZXJhdGlvbihzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUsCj4gKwkJCQkgICAg ZW51bSBhdXhfY21kX3R5cGUgY21kLAo+ICsJCQkJICAgIHVuc2lnbmVkIGludCBhZGRyZXNzLCB1 OCAqYnVmZmVyLAo+ICsJCQkJICAgIHNpemVfdCBzaXplLCBlbnVtIGF1eF9jbWRfcmVwbHkgKnJl cGx5KQo+ICt7Cj4gKwlpbnQgaSwgcmV0Owo+ICsJYm9vbCBhdXhfd3JpdGVfY2hlY2sgPSBmYWxz ZTsKPiArCj4gKwlpZiAoIWl0NjUwNV9nZXRfc2lua19ocGRfc3RhdHVzKGl0NjUwNSkpCj4gKwkJ cmV0dXJuIC1FSU87Cj4gKwo+ICsJLyogc2V0IEFVWCB1c2VyIG1vZGUgKi8KPiArCWl0NjUwNV9z ZXRfYml0cyhpdDY1MDUsIFJFR19BVVhfQ1RSTCwgQVVYX1VTRVJfTU9ERSwgQVVYX1VTRVJfTU9E RSk7Cj4gKwo+ICthdXhfb3Bfc3RhcnQ6Cj4gKwlpZiAoY21kID09IENNRF9BVVhfSTJDX0VESURf UkVBRCkgewo+ICsJCS8qIEFVWCBFRElEIEZJRk8gaGFzIG1heCBsZW5ndGggb2YgQVVYX0ZJRk9f TUFYX1NJWkUgYnl0ZXMuICovCj4gKwkJc2l6ZSA9IG1pbl90KHNpemVfdCwgc2l6ZSwgQVVYX0ZJ Rk9fTUFYX1NJWkUpOwo+ICsJCS8qIEVuYWJsZSBBVVggRklGTyByZWFkIGJhY2sgYW5kIGNsZWFy IEZJRk8gKi8KPiArCQlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfQVVYX0NUUkwsCj4gKwkJ CQlBVVhfRU5fRklGT19SRUFEIHwgQ0xSX0VESURfRklGTywKPiArCQkJCUFVWF9FTl9GSUZPX1JF QUQgfCBDTFJfRURJRF9GSUZPKTsKPiArCj4gKwkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVH X0FVWF9DVFJMLAo+ICsJCQkJQVVYX0VOX0ZJRk9fUkVBRCB8IENMUl9FRElEX0ZJRk8sCj4gKwkJ CQlBVVhfRU5fRklGT19SRUFEKTsKPiArCX0gZWxzZSB7Cj4gKwkJLyogVGhlIERQIEFVWCB0cmFu c21pdCBidWZmZXIgaGFzIDQgYnl0ZXMuICovCj4gKwkJc2l6ZSA9IG1pbl90KHNpemVfdCwgc2l6 ZSwgNCk7Cj4gKwkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0FVWF9DVFJMLCBBVVhfTk9f U0VHTUVOVF9XUiwKPiArCQkJCUFVWF9OT19TRUdNRU5UX1dSKTsKPiArCX0KPiArCj4gKwkvKiBT dGFydCBBZGRyZXNzWzc6MF0gKi8KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19BVVhfQURS XzBfNywgKGFkZHJlc3MgPj4gMCkgJiAweEZGKTsKPiArCS8qIFN0YXJ0IEFkZHJlc3NbMTU6OF0g Ki8KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19BVVhfQURSXzhfMTUsIChhZGRyZXNzID4+ IDgpICYgMHhGRik7Cj4gKwkvKiBXcml0ZU51bVszOjBdK1N0YXJ0QWRyWzE5OjE2XSAqLwo+ICsJ aXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FVWF9BRFJfMTZfMTksCj4gKwkJICAgICAoKGFkZHJl c3MgPj4gMTYpICYgMHgwRikgfCAoKHNpemUgLSAxKSA8PCA0KSk7Cj4gKwo+ICsJaWYgKGNtZCA9 PSBDTURfQVVYX05BVElWRV9XUklURSkKPiArCQlyZWdtYXBfYnVsa193cml0ZShpdDY1MDUtPnJl Z21hcCwgUkVHX0FVWF9PVVRfREFUQTAsIGJ1ZmZlciwKPiArCQkJCSAgc2l6ZSk7Cj4gKwo+ICsJ LyogQXV4IEZpcmUgKi8KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19BVVhfQ01EX1JFUSwg Y21kKTsKPiArCj4gKwlyZXQgPSBpdDY1MDVfYXV4X3dhaXQoaXQ2NTA1KTsKPiArCWlmIChyZXQg PCAwKQo+ICsJCWdvdG8gYXV4X29wX2VycjsKPiArCj4gKwlyZXQgPSBpdDY1MDVfcmVhZChpdDY1 MDUsIFJFR19BVVhfRVJST1JfU1RTKTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCWdvdG8gYXV4X29w X2VycjsKPiArCj4gKwlzd2l0Y2ggKChyZXQgPj4gNikgJiAweDMpIHsKPiArCWNhc2UgMDoKPiAr CQkqcmVwbHkgPSBSRVBMWV9BQ0s7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIDE6Cj4gKwkJKnJlcGx5 ID0gUkVQTFlfREVGRVI7Cj4gKwkJcmV0ID0gLUVBR0FJTjsKPiArCQlnb3RvIGF1eF9vcF9lcnI7 Cj4gKwljYXNlIDI6Cj4gKwkJKnJlcGx5ID0gUkVQTFlfTkFDSzsKPiArCQlyZXQgPSAtRUlPOwo+ ICsJCWdvdG8gYXV4X29wX2VycjsKPiArCWNhc2UgMzoKPiArCQlyZXQgPSAtRVRJTUVET1VUOwo+ ICsJCWdvdG8gYXV4X29wX2VycjsKPiArCX0KPiArCj4gKwkvKiBSZWFkIGJhY2sgTmF0aXZlIFdy aXRlIGRhdGEgKi8KPiArCWlmIChjbWQgPT0gQ01EX0FVWF9OQVRJVkVfV1JJVEUpIHsKPiArCQlh dXhfd3JpdGVfY2hlY2sgPSB0cnVlOwo+ICsJCWNtZCA9IENNRF9BVVhfTkFUSVZFX1JFQUQ7Cj4g KwkJZ290byBhdXhfb3Bfc3RhcnQ7Cj4gKwl9Cj4gKwo+ICsJaWYgKGNtZCA9PSBDTURfQVVYX0ky Q19FRElEX1JFQUQpIHsKPiArCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Cj4gKwkJCXJl dCA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgUkVHX0FVWF9EQVRBX0ZJRk8pOwo+ICsJCQlpZiAocmV0 IDwgMCkKPiArCQkJCWdvdG8gYXV4X29wX2VycjsKPiArCQkJYnVmZmVyW2ldID0gcmV0Owo+ICsJ CX0KPiArCX0gZWxzZSB7Cj4gKwkJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgewo+ICsJCQly ZXQgPSBpdDY1MDVfcmVhZChpdDY1MDUsIFJFR19BVVhfREFUQV8wXzcgKyBpKTsKPiArCQkJaWYg KHJldCA8IDApCj4gKwkJCQlnb3RvIGF1eF9vcF9lcnI7Cj4gKwo+ICsJCQlpZiAoYXV4X3dyaXRl X2NoZWNrICYmIGJ1ZmZlcltzaXplIC0gMSAtIGldICE9IHJldCkgewo+ICsJCQkJcmV0ID0gLUVJ TlZBTDsKPiArCQkJCWdvdG8gYXV4X29wX2VycjsKPiArCQkJfQo+ICsKPiArCQkJYnVmZmVyW3Np emUgLSAxIC0gaV0gPSByZXQ7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCXJldCA9IGk7Cj4gKwo+ICth dXhfb3BfZXJyOgo+ICsJaWYgKGNtZCA9PSBDTURfQVVYX0kyQ19FRElEX1JFQUQpIHsKPiArCQkv KiBjbGVhciBBVVggRklGTyAqLwo+ICsJCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19BVVhf Q1RSTCwKPiArCQkJCUFVWF9FTl9GSUZPX1JFQUQgfCBDTFJfRURJRF9GSUZPLAo+ICsJCQkJQVVY X0VOX0ZJRk9fUkVBRCB8IENMUl9FRElEX0ZJRk8pOwo+ICsJCWl0NjUwNV9zZXRfYml0cyhpdDY1 MDUsIFJFR19BVVhfQ1RSTCwKPiArCQkJCUFVWF9FTl9GSUZPX1JFQUQgfCBDTFJfRURJRF9GSUZP LCAweDAwKTsKPiArCX0KPiArCj4gKwkvKiBMZWF2ZSBBVVggdXNlciBtb2RlICovCj4gKwlpdDY1 MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfQVVYX0NUUkwsIEFVWF9VU0VSX01PREUsIDApOwo+ICsK PiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBzc2l6ZV90IGl0NjUwNV9hdXhfZG9f dHJhbnNmZXIoc3RydWN0IGl0NjUwNSAqaXQ2NTA1LAo+ICsJCQkJICAgICAgZW51bSBhdXhfY21k X3R5cGUgY21kLAo+ICsJCQkJICAgICAgdW5zaWduZWQgaW50IGFkZHJlc3MsIHU4ICpidWZmZXIs Cj4gKwkJCQkgICAgICBzaXplX3Qgc2l6ZSwgZW51bSBhdXhfY21kX3JlcGx5ICpyZXBseSkKPiAr ewo+ICsJaW50IGksIHJldF9zaXplLCByZXQgPSAwLCByZXF1ZXN0X3NpemU7Cj4gKwo+ICsJbXV0 ZXhfbG9jaygmaXQ2NTA1LT5hdXhfbG9jayk7Cj4gKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSAr PSA0KSB7Cj4gKwkJcmVxdWVzdF9zaXplID0gbWluKChpbnQpc2l6ZSAtIGksIDQpOwo+ICsJCXJl dF9zaXplID0gaXQ2NTA1X2F1eF9vcGVyYXRpb24oaXQ2NTA1LCBjbWQsIGFkZHJlc3MgKyBpLAo+ ICsJCQkJCQlidWZmZXIgKyBpLCByZXF1ZXN0X3NpemUsCj4gKwkJCQkJCXJlcGx5KTsKPiArCQlp ZiAocmV0X3NpemUgPCAwKSB7Cj4gKwkJCXJldCA9IHJldF9zaXplOwo+ICsJCQlnb3RvIGF1eF9v cF9lcnI7Cj4gKwkJfQo+ICsKPiArCQlyZXQgKz0gcmV0X3NpemU7Cj4gKwl9Cj4gKwo+ICthdXhf b3BfZXJyOgo+ICsJbXV0ZXhfdW5sb2NrKCZpdDY1MDUtPmF1eF9sb2NrKTsKPiArCXJldHVybiBy ZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBzc2l6ZV90IGl0NjUwNV9hdXhfdHJhbnNmZXIoc3RydWN0 IGRybV9kcF9hdXggKmF1eCwKPiArCQkJCSAgIHN0cnVjdCBkcm1fZHBfYXV4X21zZyAqbXNnKQo+ ICt7Cj4gKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBjb250YWluZXJfb2YoYXV4LCBzdHJ1Y3Qg aXQ2NTA1LCBhdXgpOwo+ICsJdTggY21kOwo+ICsJYm9vbCBpc19pMmMgPSAhKG1zZy0+cmVxdWVz dCAmIERQX0FVWF9OQVRJVkVfV1JJVEUpOwo+ICsJaW50IHJldDsKPiArCWVudW0gYXV4X2NtZF9y ZXBseSByZXBseTsKPiArCj4gKwkvKiBJVDY1MDUgZG9lc24ndCBzdXBwb3J0IGFyYml0cmFyeSBJ MkMgcmVhZCAvIHdyaXRlLiAqLwo+ICsJaWYgKGlzX2kyYykKPiArCQlyZXR1cm4gLUVJTlZBTDsK PiArCj4gKwlzd2l0Y2ggKG1zZy0+cmVxdWVzdCkgewo+ICsJY2FzZSBEUF9BVVhfTkFUSVZFX1JF QUQ6Cj4gKwkJY21kID0gQ01EX0FVWF9OQVRJVkVfUkVBRDsKPiArCQlicmVhazsKPiArCWNhc2Ug RFBfQVVYX05BVElWRV9XUklURToKPiArCQljbWQgPSBDTURfQVVYX05BVElWRV9XUklURTsKPiAr CQlicmVhazsKPiArCWRlZmF1bHQ6Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJ cmV0ID0gaXQ2NTA1X2F1eF9kb190cmFuc2ZlcihpdDY1MDUsIGNtZCwgbXNnLT5hZGRyZXNzLCBt c2ctPmJ1ZmZlciwKPiArCQkJCSAgICAgbXNnLT5zaXplLCAmcmVwbHkpOwo+ICsJaWYgKHJldCA8 IDApCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlzd2l0Y2ggKHJlcGx5KSB7Cj4gKwljYXNlIFJF UExZX0FDSzoKPiArCQltc2ctPnJlcGx5ID0gRFBfQVVYX05BVElWRV9SRVBMWV9BQ0s7Cj4gKwkJ YnJlYWs7Cj4gKwljYXNlIFJFUExZX05BQ0s6Cj4gKwkJbXNnLT5yZXBseSA9IERQX0FVWF9OQVRJ VkVfUkVQTFlfTkFDSzsKPiArCQlicmVhazsKPiArCWNhc2UgUkVQTFlfREVGRVI6Cj4gKwkJbXNn LT5yZXBseSA9IERQX0FVWF9OQVRJVkVfUkVQTFlfREVGRVI7Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4g Kwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGludCBpdDY1MDVfZ2V0X2VkaWRf YmxvY2sodm9pZCAqZGF0YSwgdTggKmJ1ZiwgdW5zaWduZWQgaW50IGJsb2NrLAo+ICsJCQkJIHNp emVfdCBsZW4pCj4gK3sKPiArCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGRhdGE7Cj4gKwlzdHJ1 Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsKPiArCWVudW0gYXV4X2NtZF9y ZXBseSByZXBseTsKPiArCWludCBvZmZzZXQsIHJldCwgYXV4X3JldHJ5ID0gMTAwOwo+ICsKPiAr CWl0NjUwNV9hdXhfcmVzZXQoaXQ2NTA1KTsKPiArCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwg ImJsb2NrIG51bWJlciA9ICVkIiwgYmxvY2spOwo+ICsKPiArCWZvciAob2Zmc2V0ID0gMDsgb2Zm c2V0IDwgRURJRF9MRU5HVEg7KSB7Cj4gKwkJcmV0ID0gaXQ2NTA1X2F1eF9kb190cmFuc2Zlcihp dDY1MDUsIENNRF9BVVhfSTJDX0VESURfUkVBRCwKPiArCQkJCQkgICAgIGJsb2NrICogRURJRF9M RU5HVEggKyBvZmZzZXQsCj4gKwkJCQkJICAgICBidWYgKyBvZmZzZXQsIDgsICZyZXBseSk7Cj4g Kwo+ICsJCWlmIChyZXQgPCAwICYmIHJldCAhPSAtRUFHQUlOKQo+ICsJCQlyZXR1cm4gcmV0Owo+ ICsKPiArCQlzd2l0Y2ggKHJlcGx5KSB7Cj4gKwkJY2FzZSBSRVBMWV9BQ0s6Cj4gKwkJCURSTV9E RVZfREVCVUdfRFJJVkVSKGRldiwgIlsweCUwMnhdOiAlOHBoIiwgb2Zmc2V0LAo+ICsJCQkJCSAg ICAgYnVmICsgb2Zmc2V0KTsKPiArCQkJb2Zmc2V0ICs9IDg7Cj4gKwkJCWF1eF9yZXRyeSA9IDEw MDsKPiArCQkJYnJlYWs7Cj4gKwkJY2FzZSBSRVBMWV9OQUNLOgo+ICsJCQlyZXR1cm4gLUVJTzsK PiArCQljYXNlIFJFUExZX0RFRkVSOgo+ICsJCQltc2xlZXAoMjApOwo+ICsJCQlpZiAoISgtLWF1 eF9yZXRyeSkpCj4gKwkJCQlyZXR1cm4gLUVJTzsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJcmV0dXJu IDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV92YXJpYWJsZV9jb25maWcoc3RydWN0 IGl0NjUwNSAqaXQ2NTA1KQo+ICt7Cj4gKwlpdDY1MDUtPmxpbmtfcmF0ZV9id19jb2RlID0gSEJS Owo+ICsJaXQ2NTA1LT5sYW5lX2NvdW50ID0gTUFYX0xBTkVfQ09VTlQ7Cj4gKwlpdDY1MDUtPmxp bmtfc3RhdGUgPSBMSU5LX0lETEU7Cj4gKwlpdDY1MDUtPmhkY3BfZGVzaXJlZCA9IEhEQ1BfREVT SVJFRDsKPiArCWl0NjUwNS0+YXV0b190cmFpbl9yZXRyeSA9IEFVVE9fVFJBSU5fUkVUUlk7Cj4g KwlpdDY1MDUtPmF1ZGlvLnNlbGVjdCA9IEFVRElPX1NFTEVDVDsKPiArCWl0NjUwNS0+YXVkaW8u c2FtcGxlX3JhdGUgPSBBVURJT19TQU1QTEVfUkFURTsKPiArCWl0NjUwNS0+YXVkaW8uY2hhbm5l bF9jb3VudCA9IEFVRElPX0NIQU5ORUxfQ09VTlQ7Cj4gKwlpdDY1MDUtPmF1ZGlvLnR5cGUgPSBB VURJT19UWVBFOwo+ICsJaXQ2NTA1LT5hdWRpby5pMnNfaW5wdXRfZm9ybWF0ID0gSTJTX0lOUFVU X0ZPUk1BVDsKPiArCWl0NjUwNS0+YXVkaW8uaTJzX2p1c3RpZmllZCA9IEkyU19KVVNUSUZJRUQ7 Cj4gKwlpdDY1MDUtPmF1ZGlvLmkyc19kYXRhX2RlbGF5ID0gSTJTX0RBVEFfREVMQVk7Cj4gKwlp dDY1MDUtPmF1ZGlvLmkyc193c19jaGFubmVsID0gSTJTX1dTX0NIQU5ORUw7Cj4gKwlpdDY1MDUt PmF1ZGlvLmkyc19kYXRhX3NlcXVlbmNlID0gSTJTX0RBVEFfU0VRVUVOQ0U7Cj4gKwlpdDY1MDUt PmF1ZGlvLndvcmRfbGVuZ3RoID0gQVVESU9fV09SRF9MRU5HVEg7Cj4gKwltZW1zZXQoaXQ2NTA1 LT5zaGExX2lucHV0LCAwLCBzaXplb2YoaXQ2NTA1LT5zaGExX2lucHV0KSk7Cj4gKwltZW1zZXQo aXQ2NTA1LT5ia3N2cywgMCwgc2l6ZW9mKGl0NjUwNS0+YmtzdnMpKTsKPiArfQo+ICsKPiArc3Rh dGljIGludCBpdDY1MDVfc2VuZF92aWRlb19pbmZvZnJhbWUoc3RydWN0IGl0NjUwNSAqaXQ2NTA1 LAo+ICsJCQkJICAgICAgIHN0cnVjdCBoZG1pX2F2aV9pbmZvZnJhbWUgKmZyYW1lKQo+ICt7Cj4g Kwl1OCBidWZmZXJbSERNSV9JTkZPRlJBTUVfSEVBREVSX1NJWkUgKyBIRE1JX0FWSV9JTkZPRlJB TUVfU0laRV07Cj4gKwlpbnQgZXJyOwo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+ Y2xpZW50LT5kZXY7Cj4gKwo+ICsJZXJyID0gaGRtaV9hdmlfaW5mb2ZyYW1lX3BhY2soZnJhbWUs IGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOwo+ICsJaWYgKGVyciA8IDApIHsKPiArCQlEUk1fREVW X0VSUk9SKGRldiwgIkZhaWxlZCB0byBwYWNrIEFWSSBpbmZvZnJhbWU6ICVkIiwgZXJyKTsKPiAr CQlyZXR1cm4gZXJyOwo+ICsJfQo+ICsKPiArCWVyciA9IGl0NjUwNV9zZXRfYml0cyhpdDY1MDUs IFJFR19JTkZPRlJBTUVfQ1RSTCwgRU5fQVZJX1BLVCwgMHgwMCk7Cj4gKwlpZiAoZXJyKQo+ICsJ CXJldHVybiBlcnI7Cj4gKwo+ICsJZXJyID0gcmVnbWFwX2J1bGtfd3JpdGUoaXQ2NTA1LT5yZWdt YXAsIFJFR19BVklfSU5GT19EQjEsCj4gKwkJCQlidWZmZXIgKyBIRE1JX0lORk9GUkFNRV9IRUFE RVJfU0laRSwKPiArCQkJCWZyYW1lLT5sZW5ndGgpOwo+ICsJaWYgKGVycikKPiArCQlyZXR1cm4g ZXJyOwo+ICsKPiArCWVyciA9IGl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19JTkZPRlJBTUVf Q1RSTCwgRU5fQVZJX1BLVCwKPiArCQkJICAgICAgRU5fQVZJX1BLVCk7Cj4gKwlpZiAoZXJyKQo+ ICsJCXJldHVybiBlcnI7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk IGl0NjUwNV9nZXRfZXh0Y29uX3Byb3BlcnR5KHN0cnVjdCBpdDY1MDUgKml0NjUwNSkKPiArewo+ ICsJaW50IGVycjsKPiArCXVuaW9uIGV4dGNvbl9wcm9wZXJ0eV92YWx1ZSBwcm9wZXJ0eTsKPiAr CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Owo+ICsKPiArCWlmIChp dDY1MDUtPmV4dGNvbiAmJiAhaXQ2NTA1LT5sYW5lX3N3YXBfZGlzYWJsZWQpIHsKPiArCQllcnIg PSBleHRjb25fZ2V0X3Byb3BlcnR5KGl0NjUwNS0+ZXh0Y29uLCBFWFRDT05fRElTUF9EUCwKPiAr CQkJCQkgIEVYVENPTl9QUk9QX1VTQl9UWVBFQ19QT0xBUklUWSwKPiArCQkJCQkgICZwcm9wZXJ0 eSk7Cj4gKwkJaWYgKGVycikgewo+ICsJCQlEUk1fREVWX0VSUk9SKGRldiwgImdldCBwcm9wZXJ0 eSBmYWlsISIpOwo+ICsJCQlyZXR1cm47Cj4gKwkJfQo+ICsJCWl0NjUwNS0+bGFuZV9zd2FwID0g cHJvcGVydHkuaW50dmFsOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfY2xr X3BoYXNlX2FkanVzdG1lbnQoc3RydWN0IGl0NjUwNSAqaXQ2NTA1LAo+ICsJCQkJCWNvbnN0IHN0 cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQo+ICt7Cj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2 NTA1LCBSRUdfQ0xLX0NUUkwwLCBNX1BDTEtfREVMQVksCj4gKwkJbW9kZS0+Y2xvY2sgPCBBREpV U1RfUEhBU0VfVEhSRVNIT0xEID8gUElYRUxfQ0xLX0RFTEFZIDogMCk7Cj4gKwlpdDY1MDVfc2V0 X2JpdHMoaXQ2NTA1LCBSRUdfREFUQV9DVFJMMCwgVklERU9fTEFUQ0hfRURHRSwKPiArCQkJUElY RUxfQ0xLX0lOVkVSU0UgPDwgNCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9pbml0 KHN0cnVjdCBpdDY1MDUgKml0NjUwNSkKPiArewo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVH X0JBTktfU0VMLCAweDAwKTsKPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19BVVhfT1BULCBB VVhfQVVUT19SU1QgfCBBVVhfRklYX0ZSRVEpOwo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVH X0FVWF9DVFJMLCBBVVhfTk9fU0VHTUVOVF9XUik7Cj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBS RUdfSERDUF9DVFJMMiwgSERDUF9BTl9TRUwgfCBIRENQX0hXX0hQRElSUV9BQ1QpOwo+ICsJaXQ2 NTA1X3dyaXRlKGl0NjUwNSwgUkVHX1ZJRF9CVVNfQ1RSTDAsIElOX0REUiB8IEREUl9DRCk7Cj4g KwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfVklEX0JVU19DVFJMMSwgMHgwMSk7Cj4gKwlpdDY1 MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQVVESU9fQ1RSTDAsIEFVRElPXzE2Ql9CT1VORCk7Cj4gKwo+ ICsJLyogY2hpcCBpbnRlcm5hbCBzZXR0aW5nLCBkb24ndCBtb2RpZnkgKi8KPiArCWl0NjUwNV93 cml0ZShpdDY1MDUsIFJFR19IUERfSVJRX1RJTUUsIDB4RjUpOwo+ICsJaXQ2NTA1X3dyaXRlKGl0 NjUwNSwgUkVHX0FVWF9ERUJVR19NT0RFLCAweDREKTsKPiArCWl0NjUwNV93cml0ZShpdDY1MDUs IFJFR19BVVhfT1BUMiwgMHgxNyk7Cj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfSERDUF9P UFQsIDB4NjApOwo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0RBVEFfTVVURV9DVFJMLAo+ ICsJCSAgICAgRU5fVklEX01VVEUgfCBFTl9BVURfTVVURSB8IEVOQUJMRV9BVVRPX1ZJREVPX0ZJ Rk9fUkVTRVQpOwo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX1RJTUVfU1RNUF9DVFJMLAo+ ICsJCSAgICAgRU5fU1NDX0dBVCB8IEVOX0VOSEFOQ0VfVklEX1NUTVAgfCBFTl9FTkhBTkNFX0FV RF9TVE1QKTsKPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19JTkZPRlJBTUVfQ1RSTCwgMHgw MCk7Cj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQkFOS19TRUwsIDB4MDEpOwo+ICsJaXQ2 NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0RSVl8wX0RCXzgwMF9NViwKPiArCQkgICAgIGFmZV9zZXR0 aW5nX3RhYmxlW2l0NjUwNS0+YWZlX3NldHRpbmddWzBdKTsKPiArCWl0NjUwNV93cml0ZShpdDY1 MDUsIFJFR19QUkVfMF9EQl84MDBfTVYsCj4gKwkJICAgICBhZmVfc2V0dGluZ190YWJsZVtpdDY1 MDUtPmFmZV9zZXR0aW5nXVsxXSk7Cj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfUFJFXzNQ NV9EQl84MDBfTVYsCj4gKwkJICAgICBhZmVfc2V0dGluZ190YWJsZVtpdDY1MDUtPmFmZV9zZXR0 aW5nXVsyXSk7Cj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfU1NDX0NUUkwwLCAweDlFKTsK PiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19TU0NfQ1RSTDEsIDB4MUMpOwo+ICsJaXQ2NTA1 X3dyaXRlKGl0NjUwNSwgUkVHX1NTQ19DVFJMMiwgMHg0Mik7Cj4gKwlpdDY1MDVfd3JpdGUoaXQ2 NTA1LCBSRUdfQkFOS19TRUwsIDB4MDApOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBpdDY1MDVf dmlkZW9fZGlzYWJsZShzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpCj4gK3sKPiArCWl0NjUwNV9zZXRf Yml0cyhpdDY1MDUsIFJFR19EQVRBX01VVEVfQ1RSTCwgRU5fVklEX01VVEUsIEVOX1ZJRF9NVVRF KTsKPiArCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19JTkZPRlJBTUVfQ1RSTCwgRU5fVklE X0NUUkxfUEtULCAweDAwKTsKPiArCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19SRVNFVF9D VFJMLCBWSURFT19SRVNFVCwgVklERU9fUkVTRVQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBp dDY1MDVfdmlkZW9fcmVzZXQoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQo+ICt7Cj4gKwlpdDY1MDVf c2V0X2JpdHMoaXQ2NTA1LCBSRUdfREFUQV9NVVRFX0NUUkwsIEVOX1ZJRF9NVVRFLCBFTl9WSURf TVVURSk7Cj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfSU5GT0ZSQU1FX0NUUkwsIEVO X1ZJRF9DVFJMX1BLVCwgMHgwMCk7Cj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfUkVT RVRfQ1RSTCwgVklERU9fUkVTRVQsIFZJREVPX1JFU0VUKTsKPiArCWl0NjUwNV9zZXRfYml0cyhp dDY1MDUsIFJFR181MDFfRklGT19DVFJMLCBSU1RfNTAxX0ZJRk8sIFJTVF81MDFfRklGTyk7Cj4g KwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfNTAxX0ZJRk9fQ1RSTCwgUlNUXzUwMV9GSUZP LCAweDAwKTsKPiArCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19SRVNFVF9DVFJMLCBWSURF T19SRVNFVCwgMHgwMCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV91cGRhdGVfdmlk ZW9fcGFyYW1ldGVyKHN0cnVjdCBpdDY1MDUgKml0NjUwNSwKPiArCQkJCQkgIGNvbnN0IHN0cnVj dCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQo+ICt7Cj4gKwlpdDY1MDVfY2xrX3BoYXNlX2FkanVz dG1lbnQoaXQ2NTA1LCBtb2RlKTsKPiArCWl0NjUwNV92aWRlb19kaXNhYmxlKGl0NjUwNSk7Cj4g K30KPiArCj4gK3N0YXRpYyBib29sIGl0NjUwNV9hdWRpb19pbnB1dChzdHJ1Y3QgaXQ2NTA1ICpp dDY1MDUpCj4gK3sKPiArCWludCByZWcwNSwgcmVnYmU7Cj4gKwo+ICsJcmVnMDUgPSBpdDY1MDVf cmVhZChpdDY1MDUsIFJFR19SRVNFVF9DVFJMKTsKPiArCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUs IFJFR19SRVNFVF9DVFJMLCBBVURJT19SRVNFVCwgMHgwMCk7Cj4gKwl1c2xlZXBfcmFuZ2UoMzAw MCwgNDAwMCk7Cj4gKwlyZWdiZSA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgUkVHX0FVRElPX0lOUFVU X0ZSRVEpOwo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX1JFU0VUX0NUUkwsIHJlZzA1KTsK PiArCj4gKwlyZXR1cm4gcmVnYmUgIT0gMHhGRjsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaXQ2 NTA1X3NldHVwX2F1ZGlvX2NoYW5uZWxfc3RhdHVzKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkKPiAr ewo+ICsJZW51bSBpdDY1MDVfYXVkaW9fc2FtcGxlX3JhdGUgc2FtcGxlX3JhdGUgPSBpdDY1MDUt PmF1ZGlvLnNhbXBsZV9yYXRlOwo+ICsJdTggYXVkaW9fd29yZF9sZW5ndGhfbWFwW10gPSB7IDB4 MDIsIDB4MDQsIDB4MDMsIDB4MEIgfTsKPiArCj4gKwkvKiBDaGFubmVsIFN0YXR1cyAqLwo+ICsJ aXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0lFQzk1OF9TVFMwLCBpdDY1MDUtPmF1ZGlvLnR5cGUg PDwgMSk7Cj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfSUVDOTU4X1NUUzEsIDB4MDApOwo+ ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0lFQzk1OF9TVFMyLCAweDAwKTsKPiArCWl0NjUw NV93cml0ZShpdDY1MDUsIFJFR19JRUM5NThfU1RTMywgc2FtcGxlX3JhdGUpOwo+ICsJaXQ2NTA1 X3dyaXRlKGl0NjUwNSwgUkVHX0lFQzk1OF9TVFM0LCAofnNhbXBsZV9yYXRlIDw8IDQpIHwKPiAr CQkgICAgIGF1ZGlvX3dvcmRfbGVuZ3RoX21hcFtpdDY1MDUtPmF1ZGlvLndvcmRfbGVuZ3RoXSk7 Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9zZXR1cF9hdWRpb19mb3JtYXQoc3RydWN0 IGl0NjUwNSAqaXQ2NTA1KQo+ICt7Cj4gKwkvKiBJMlMgTU9ERSAqLwo+ICsJaXQ2NTA1X3dyaXRl KGl0NjUwNSwgUkVHX0FVRElPX0ZNVCwKPiArCQkgICAgIChpdDY1MDUtPmF1ZGlvLndvcmRfbGVu Z3RoIDw8IDUpIHwKPiArCQkgICAgIChpdDY1MDUtPmF1ZGlvLmkyc19kYXRhX3NlcXVlbmNlIDw8 IDQpIHwKPiArCQkgICAgIChpdDY1MDUtPmF1ZGlvLmkyc193c19jaGFubmVsIDw8IDMpIHwKPiAr CQkgICAgIChpdDY1MDUtPmF1ZGlvLmkyc19kYXRhX2RlbGF5IDw8IDIpIHwKPiArCQkgICAgIChp dDY1MDUtPmF1ZGlvLmkyc19qdXN0aWZpZWQgPDwgMSkgfAo+ICsJCSAgICAgaXQ2NTA1LT5hdWRp by5pMnNfaW5wdXRfZm9ybWF0KTsKPiArCWlmIChpdDY1MDUtPmF1ZGlvLnNlbGVjdCA9PSBTUERJ Rikgewo+ICsJCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19BVURJT19GSUZPX1NFTCwgMHgwMCk7 Cj4gKwkJLyogMHgzMCA9IDEyOCpGUyAqLwo+ICsJCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJF R19BVVhfT1BULCAweEYwLCAweDMwKTsKPiArCX0gZWxzZSB7Cj4gKwkJaXQ2NTA1X3dyaXRlKGl0 NjUwNSwgUkVHX0FVRElPX0ZJRk9fU0VMLCAweEU0KTsKPiArCX0KPiArCj4gKwlpdDY1MDVfd3Jp dGUoaXQ2NTA1LCBSRUdfQVVESU9fQ1RSTDAsIDB4MjApOwo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUw NSwgUkVHX0FVRElPX0NUUkwxLCAweDAwKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaXQ2NTA1 X2VuYWJsZV9hdWRpb19zb3VyY2Uoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQo+ICt7Cj4gKwl1bnNp Z25lZCBpbnQgYXVkaW9fc291cmNlX2NvdW50Owo+ICsKPiArCWF1ZGlvX3NvdXJjZV9jb3VudCA9 IEJJVChESVZfUk9VTkRfVVAoaXQ2NTA1LT5hdWRpby5jaGFubmVsX2NvdW50LCAyKSkKPiArCQkJ CSAtIDE7Cj4gKwo+ICsJYXVkaW9fc291cmNlX2NvdW50IHw9IGl0NjUwNS0+YXVkaW8uc2VsZWN0 IDw8IDQ7Cj4gKwo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FVRElPX1NSQ19DVFJMLCBh dWRpb19zb3VyY2VfY291bnQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfZW5hYmxl X2F1ZGlvX2luZm9mcmFtZShzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpCj4gK3sKPiArCXN0cnVjdCBk ZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Owo+ICsJdTggYXVkaW9faW5mb19jYVtd ID0geyAweDAwLCAweDAwLCAweDAxLCAweDAzLCAweDA3LCAweDBCLCAweDBGLCAweDFGIH07Cj4g Kwo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiaW5mb2ZyYW1lIGNoYW5uZWxfYWxsb2Nh dGlvbjoweCUwMngiLAo+ICsJCQkgICAgIGF1ZGlvX2luZm9fY2FbaXQ2NTA1LT5hdWRpby5jaGFu bmVsX2NvdW50IC0gMV0pOwo+ICsKPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19BVURfSU5G T0ZSQU1fREIxLCBpdDY1MDUtPmF1ZGlvLmNoYW5uZWxfY291bnQKPiArCQkgICAgIC0gMSk7Cj4g KwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQVVEX0lORk9GUkFNX0RCMiwgMHgwMCk7Cj4gKwlp dDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQVVEX0lORk9GUkFNX0RCMywKPiArCQkgICAgIGF1ZGlv X2luZm9fY2FbaXQ2NTA1LT5hdWRpby5jaGFubmVsX2NvdW50IC0gMV0pOwo+ICsJaXQ2NTA1X3dy aXRlKGl0NjUwNSwgUkVHX0FVRF9JTkZPRlJBTV9EQjQsIDB4MDApOwo+ICsJaXQ2NTA1X3dyaXRl KGl0NjUwNSwgUkVHX0FVRF9JTkZPRlJBTV9TVU0sIDB4MDApOwo+ICsKPiArCS8qIEVuYWJsZSBB dWRpbyBJbmZvRnJhbWUgKi8KPiArCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19JTkZPRlJB TUVfQ1RSTCwgRU5fQVVEX0NUUkxfUEtULAo+ICsJCQlFTl9BVURfQ1RSTF9QS1QpOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfZGlzYWJsZV9hdWRpbyhzdHJ1Y3QgaXQ2NTA1ICppdDY1 MDUpCj4gK3sKPiArCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19EQVRBX01VVEVfQ1RSTCwg RU5fQVVEX01VVEUsIEVOX0FVRF9NVVRFKTsKPiArCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJF R19BVURJT19TUkNfQ1RSTCwgTV9BVURJT19JMlNfRU4sIDB4MDApOwo+ICsJaXQ2NTA1X3NldF9i aXRzKGl0NjUwNSwgUkVHX0lORk9GUkFNRV9DVFJMLCBFTl9BVURfQ1RSTF9QS1QsIDB4MDApOwo+ ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX1JFU0VUX0NUUkwsIEFVRElPX1JFU0VULCBB VURJT19SRVNFVCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9lbmFibGVfYXVkaW8o c3RydWN0IGl0NjUwNSAqaXQ2NTA1KQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2 NTA1LT5jbGllbnQtPmRldjsKPiArCWludCByZWdiZTsKPiArCj4gKwlEUk1fREVWX0RFQlVHX0RS SVZFUihkZXYsICJzdGFydCIpOwo+ICsJaXQ2NTA1X2Rpc2FibGVfYXVkaW8oaXQ2NTA1KTsKPiAr Cj4gKwlpdDY1MDVfc2V0dXBfYXVkaW9fY2hhbm5lbF9zdGF0dXMoaXQ2NTA1KTsKPiArCWl0NjUw NV9zZXR1cF9hdWRpb19mb3JtYXQoaXQ2NTA1KTsKPiArCWl0NjUwNV9lbmFibGVfYXVkaW9fc291 cmNlKGl0NjUwNSk7Cj4gKwlpdDY1MDVfZW5hYmxlX2F1ZGlvX2luZm9mcmFtZShpdDY1MDUpOwo+ ICsKPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19BVURJT19OXzBfNywgMHgwMCk7Cj4gKwlp dDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQVVESU9fTl84XzE1LCAweDgwKTsKPiArCWl0NjUwNV93 cml0ZShpdDY1MDUsIFJFR19BVURJT19OXzE2XzIzLCAweDAwKTsKPiArCj4gKwlpdDY1MDVfc2V0 X2JpdHMoaXQ2NTA1LCBSRUdfQVVESU9fU1JDX0NUUkwsIEFVRElPX0ZJRk9fUkVTRVQsCj4gKwkJ CUFVRElPX0ZJRk9fUkVTRVQpOwo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0FVRElP X1NSQ19DVFJMLCBBVURJT19GSUZPX1JFU0VULCAweDAwKTsKPiArCWl0NjUwNV9zZXRfYml0cyhp dDY1MDUsIFJFR19SRVNFVF9DVFJMLCBBVURJT19SRVNFVCwgMHgwMCk7Cj4gKwlyZWdiZSA9IGl0 NjUwNV9yZWFkKGl0NjUwNSwgUkVHX0FVRElPX0lOUFVUX0ZSRVEpOwo+ICsJRFJNX0RFVl9ERUJV R19EUklWRVIoZGV2LCAicmVnYmU6MHglMDJ4IGF1ZGlvIGlucHV0IGZzOiAlZC4lZCBrSHoiLAo+ ICsJCQkgICAgIHJlZ2JlLCA2NzUwIC8gcmVnYmUsICg2NzUwICUgcmVnYmUpICogMTAgLyByZWdi ZSk7Cj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfREFUQV9NVVRFX0NUUkwsIEVOX0FV RF9NVVRFLCAweDAwKTsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgaXQ2NTA1X3VzZV9zdGVwX3Ry YWluX2NoZWNrKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkKPiArewo+ICsJaWYgKGl0NjUwNS0+bGlu ay5yZXZpc2lvbiA+PSAweDEyKQo+ICsJCXJldHVybiBpdDY1MDUtPmRwY2RbRFBfVFJBSU5JTkdf QVVYX1JEX0lOVEVSVkFMXSA+PSAweDAxOwo+ICsKPiArCXJldHVybiB0cnVlOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgdm9pZCBpdDY1MDVfcGFyc2VfbGlua19jYXBhYmlsaXRpZXMoc3RydWN0IGl0NjUw NSAqaXQ2NTA1KQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQt PmRldjsKPiArCXN0cnVjdCBpdDY1MDVfZHJtX2RwX2xpbmsgKmxpbmsgPSAmaXQ2NTA1LT5saW5r Owo+ICsJaW50IGJjYXBzOwo+ICsKPiArCWlmIChpdDY1MDUtPmRwY2RbMF0gPT0gMCkgewo+ICsJ CWl0NjUwNV9hdXhfb24oaXQ2NTA1KTsKPiArCQlpdDY1MDVfZ2V0X2RwY2QoaXQ2NTA1LCBEUF9E UENEX1JFViwgaXQ2NTA1LT5kcGNkLAo+ICsJCQkJQVJSQVlfU0laRShpdDY1MDUtPmRwY2QpKTsK PiArCX0KPiArCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJEUENEIFJldi46ICVkLiVk IiwKPiArCQkJICAgICBsaW5rLT5yZXZpc2lvbiA+PiA0LCBsaW5rLT5yZXZpc2lvbiAmIDB4MEYp Owo+ICsKPiArCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIlNpbmsgbWF4IGxpbmsgcmF0ZTog JWQuJTAyZCBHYnBzIHBlciBsYW5lIiwKPiArCQkJICAgICBsaW5rLT5yYXRlIC8gMTAwMDAwLCBs aW5rLT5yYXRlIC8gMTAwMCAlIDEwMCk7Cj4gKwo+ICsJaXQ2NTA1LT5saW5rX3JhdGVfYndfY29k ZSA9IGRybV9kcF9saW5rX3JhdGVfdG9fYndfY29kZShsaW5rLT5yYXRlKTsKPiArCURSTV9ERVZf REVCVUdfRFJJVkVSKGRldiwgImxpbmsgcmF0ZSBidyBjb2RlOjB4JTAyeCIsCj4gKwkJCSAgICAg aXQ2NTA1LT5saW5rX3JhdGVfYndfY29kZSk7Cj4gKwlpdDY1MDUtPmxpbmtfcmF0ZV9id19jb2Rl ID0gbWluKChpbnQpaXQ2NTA1LT5saW5rX3JhdGVfYndfY29kZSwKPiArCQkJCQlNQVhfTElOS19S QVRFKTsKPiArCj4gKwlpdDY1MDUtPmxhbmVfY291bnQgPSBsaW5rLT5udW1fbGFuZXM7Cj4gKwlE Uk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJTaW5rIHN1cHBvcnQgJWQgbGFuZXMgdHJhaW5pbmci LAo+ICsJCQkgICAgIGl0NjUwNS0+bGFuZV9jb3VudCk7Cj4gKwlpdDY1MDUtPmxhbmVfY291bnQg PSBtaW4oKGludClpdDY1MDUtPmxhbmVfY291bnQsIE1BWF9MQU5FX0NPVU5UKTsKPiArCj4gKwlp dDY1MDUtPmJyYW5jaF9kZXZpY2UgPSBkcm1fZHBfaXNfYnJhbmNoKGl0NjUwNS0+ZHBjZCk7Cj4g KwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJTaW5rICVzYnJhbmNoIGRldmljZSIsCj4gKwkJ CSAgICAgaXQ2NTA1LT5icmFuY2hfZGV2aWNlID8gIiIgOiAiTm90ICIpOwo+ICsKPiArCWl0NjUw NS0+ZW5hYmxlX2VuaGFuY2VkX2ZyYW1lID0gISFsaW5rLT5jYXBhYmlsaXRpZXM7Cj4gKwlEUk1f REVWX0RFQlVHX0RSSVZFUihkZXYsICJTaW5rICVzU3VwcG9ydCBFbmhhbmNlZCBGcmFtaW5nIiwK PiArCQkJICAgICBpdDY1MDUtPmVuYWJsZV9lbmhhbmNlZF9mcmFtZSA/ICIiIDogIk5vdCAiKTsK PiArCj4gKwlpdDY1MDUtPmVuYWJsZV9zc2MgPSAhIShpdDY1MDUtPmRwY2RbRFBfTUFYX0RPV05T UFJFQURdICYKPiArCQkJCURQX01BWF9ET1dOU1BSRUFEXzBfNSk7Cj4gKwlEUk1fREVWX0RFQlVH X0RSSVZFUihkZXYsICJNYXhpbXVtIERvd24tU3ByZWFkOiAlcywgJXNzdXBwb3J0IFNTQyEiLAo+ ICsJCQkgICAgIGl0NjUwNS0+ZW5hYmxlX3NzYyA/ICIwLjUiIDogIjAiLAo+ICsJCQkgICAgIGl0 NjUwNS0+ZW5hYmxlX3NzYyA/ICIiIDogIk5vdCAiKTsKPiArCj4gKwlpdDY1MDUtPnN0ZXBfdHJh aW4gPSBpdDY1MDVfdXNlX3N0ZXBfdHJhaW5fY2hlY2soaXQ2NTA1KTsKPiArCWlmIChpdDY1MDUt PnN0ZXBfdHJhaW4pCj4gKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiYXV0byB0cmFpbiBm YWlsLCB3aWxsIHN0ZXAgdHJhaW4iKTsKPiArCj4gKwliY2FwcyA9IGl0NjUwNV9kcGNkX3JlYWQo aXQ2NTA1LCBEUF9BVVhfSERDUF9CQ0FQUyk7Cj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYs ICJiY2FwczoweCUwMngiLCBiY2Fwcyk7Cj4gKwlpZiAoYmNhcHMgJiBEUF9CQ0FQU19IRENQX0NB UEFCTEUpIHsKPiArCQlpdDY1MDUtPmlzX3JlcGVhdGVyID0gISEoYmNhcHMgJiBEUF9CQ0FQU19S RVBFQVRFUl9QUkVTRU5UKTsKPiArCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJTdXBwb3J0 IEhEQ1AhIERvd25zdHJlYW0gaXMgJXMhIiwKPiArCQkJCSAgICAgaXQ2NTA1LT5pc19yZXBlYXRl ciA/ICJyZXBlYXRlciIgOgo+ICsJCQkJICAgICAicmVjZWl2ZXIiKTsKPiArCX0gZWxzZSB7Cj4g KwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiU2luayBub3Qgc3VwcG9ydCBIRENQISIpOwo+ ICsJCWl0NjUwNS0+aGRjcF9kZXNpcmVkID0gZmFsc2U7Cj4gKwl9Cj4gKwlEUk1fREVWX0RFQlVH X0RSSVZFUihkZXYsICJIRENQICVzIiwKPiArCQkJICAgICBpdDY1MDUtPmhkY3BfZGVzaXJlZCA/ ICJkZXNpcmVkIiA6ICJ1bmRlc2lyZWQiKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaXQ2NTA1 X3NldHVwX3NzYyhzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpCj4gK3sKPiArCWl0NjUwNV9zZXRfYml0 cyhpdDY1MDUsIFJFR19UUkFJTl9DVFJMMCwgU1BSRUFEX0FNUF81LAo+ICsJCQlpdDY1MDUtPmVu YWJsZV9zc2MgPyBTUFJFQURfQU1QXzUgOiAweDAwKTsKPiArCWlmIChpdDY1MDUtPmVuYWJsZV9z c2MpIHsKPiArCQlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQkFOS19TRUwsIDB4MDEpOwo+ICsJ CWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19TU0NfQ1RSTDAsIDB4OUUpOwo+ICsJCWl0NjUwNV93 cml0ZShpdDY1MDUsIFJFR19TU0NfQ1RSTDEsIDB4MUMpOwo+ICsJCWl0NjUwNV93cml0ZShpdDY1 MDUsIFJFR19TU0NfQ1RSTDIsIDB4NDIpOwo+ICsJCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19C QU5LX1NFTCwgMHgwMCk7Cj4gKwkJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX1NQX0NUUkwwLCAw eDA3KTsKPiArCQlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfSVBfQ1RSTDEsIDB4MjkpOwo+ICsJ CWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19JUF9DVFJMMiwgMHgwMyk7Cj4gKwkJLyogU3RhbXAg SW50ZXJydXB0IFN0ZXAgKi8KPiArCQlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfVElNRV9T VE1QX0NUUkwsIE1fU1RBTVBfU1RFUCwKPiArCQkJCTB4MTApOwo+ICsJCWl0NjUwNV9kcGNkX3dy aXRlKGl0NjUwNSwgRFBfRE9XTlNQUkVBRF9DVFJMLAo+ICsJCQkJICBEUF9TUFJFQURfQU1QXzBf NSk7Cj4gKwl9IGVsc2Ugewo+ICsJCWl0NjUwNV9kcGNkX3dyaXRlKGl0NjUwNSwgRFBfRE9XTlNQ UkVBRF9DVFJMLCAweDAwKTsKPiArCQlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfVElNRV9T VE1QX0NUUkwsIE1fU1RBTVBfU1RFUCwKPiArCQkJCTB4MDApOwo+ICsJfQo+ICt9Cj4gKwo+ICtz dGF0aWMgaW5saW5lIHZvaWQgaXQ2NTA1X2xpbmtfcmF0ZV9zZXR1cChzdHJ1Y3QgaXQ2NTA1ICpp dDY1MDUpCj4gK3sKPiArCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19UUkFJTl9DVFJMMCwg Rk9SQ0VfTEJSLAo+ICsJCQkoaXQ2NTA1LT5saW5rX3JhdGVfYndfY29kZSA9PSBSQlIpID8gRk9S Q0VfTEJSIDogMHgwMCk7Cj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfTElOS19EUlYs IERSVl9IUywKPiArCQkJKGl0NjUwNS0+bGlua19yYXRlX2J3X2NvZGUgPT0gUkJSKSA/IDB4MDAg OiBEUlZfSFMpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfbGFuZV9jb3VudF9zZXR1 cChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpCj4gK3sKPiArCWl0NjUwNV9nZXRfZXh0Y29uX3Byb3Bl cnR5KGl0NjUwNSk7Cj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfVFJBSU5fQ1RSTDAs IExBTkVfU1dBUCwKPiArCQkJaXQ2NTA1LT5sYW5lX3N3YXAgPyBMQU5FX1NXQVAgOiAweDAwKTsK PiArCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19UUkFJTl9DVFJMMCwgTEFORV9DT1VOVF9N QVNLLAo+ICsJCQkoaXQ2NTA1LT5sYW5lX2NvdW50IC0gMSkgPDwgMSk7Cj4gK30KPiArCj4gK3N0 YXRpYyB2b2lkIGl0NjUwNV9saW5rX3RyYWluaW5nX3NldHVwKHN0cnVjdCBpdDY1MDUgKml0NjUw NSkKPiArewo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7Cj4g Kwo+ICsJaWYgKGl0NjUwNS0+ZW5hYmxlX2VuaGFuY2VkX2ZyYW1lKQo+ICsJCWl0NjUwNV9zZXRf Yml0cyhpdDY1MDUsIFJFR19EQVRBX01VVEVfQ1RSTCwKPiArCQkJCUVOQUJMRV9FTkhBTkNFRF9G UkFNRSwgRU5BQkxFX0VOSEFOQ0VEX0ZSQU1FKTsKPiArCj4gKwlpdDY1MDVfbGlua19yYXRlX3Nl dHVwKGl0NjUwNSk7Cj4gKwlpdDY1MDVfbGFuZV9jb3VudF9zZXR1cChpdDY1MDUpOwo+ICsJaXQ2 NTA1X3NldHVwX3NzYyhpdDY1MDUpOwo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LAo+ICsJ CQkgICAgICIlcywgJWQgbGFuZXMsICVzYWJsZSBzc2MsICVzYWJsZSBlbmhhbmNlZCBmcmFtZSIs Cj4gKwkJCSAgICAgaXQ2NTA1LT5saW5rX3JhdGVfYndfY29kZSAhPSBSQlIgPyAiSEJSIiA6ICJS QlIiLAo+ICsJCQkgICAgIGl0NjUwNS0+bGFuZV9jb3VudCwKPiArCQkJICAgICBpdDY1MDUtPmVu YWJsZV9zc2MgPyAiZW4iIDogImRpcyIsCj4gKwkJCSAgICAgaXQ2NTA1LT5lbmFibGVfZW5oYW5j ZWRfZnJhbWUgPyAiZW4iIDogImRpcyIpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBpdDY1MDVf bGlua19zdGFydF9hdXRvX3RyYWluKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkKPiArewo+ICsJaW50 IHRpbWVvdXQgPSA1MDAsIGxpbmtfdHJhaW5pbmdfc3RhdGU7Cj4gKwlib29sIHN0YXRlID0gZmFs c2U7Cj4gKwo+ICsJbXV0ZXhfbG9jaygmaXQ2NTA1LT5hdXhfbG9jayk7Cj4gKwlpdDY1MDVfc2V0 X2JpdHMoaXQ2NTA1LCBSRUdfVFJBSU5fQ1RSTDAsCj4gKwkJCQlGT1JDRV9DUl9ET05FIHwgRk9S Q0VfRVFfRE9ORSwgMHgwMCk7Cj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfVFJBSU5fQ1RS TDEsIEZPUkNFX1JFVFJBSU4pOwo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX1RSQUlOX0NU UkwxLCBBVVRPX1RSQUlOKTsKPiArCj4gKwl3aGlsZSAodGltZW91dCA+IDApIHsKPiArCQl1c2xl ZXBfcmFuZ2UoMTAwMCwgMjAwMCk7Cj4gKwkJbGlua190cmFpbmluZ19zdGF0ZSA9IGl0NjUwNV9y ZWFkKGl0NjUwNSwgUkVHX0xJTktfVFJBSU5fU1RTKTsKPiArCj4gKwkJaWYgKChsaW5rX3RyYWlu aW5nX3N0YXRlID4gMCkgJiYKPiArCQkgICAgKGxpbmtfdHJhaW5pbmdfc3RhdGUgJiBMSU5LX1NU QVRFX05PUlApKSB7Cj4gKwkJCXN0YXRlID0gdHJ1ZTsKPiArCQkJZ290byB1bmxvY2s7Cj4gKwkJ fQo+ICsKPiArCQl0aW1lb3V0LS07Cj4gKwl9Cj4gK3VubG9jazoKPiArCW11dGV4X3VubG9jaygm aXQ2NTA1LT5hdXhfbG9jayk7Cj4gKwo+ICsJcmV0dXJuIHN0YXRlOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgaW50IGl0NjUwNV9kcm1fZHBfbGlua19jb25maWd1cmUoc3RydWN0IGl0NjUwNSAqaXQ2NTA1 KQo+ICt7Cj4gKwl1OCB2YWx1ZXNbMl07Cj4gKwlpbnQgZXJyOwo+ICsJc3RydWN0IGRybV9kcF9h dXggKmF1eCA9ICZpdDY1MDUtPmF1eDsKPiArCj4gKwl2YWx1ZXNbMF0gPSBpdDY1MDUtPmxpbmtf cmF0ZV9id19jb2RlOwo+ICsJdmFsdWVzWzFdID0gaXQ2NTA1LT5sYW5lX2NvdW50Owo+ICsKPiAr CWlmIChpdDY1MDUtPmVuYWJsZV9lbmhhbmNlZF9mcmFtZSkKPiArCQl2YWx1ZXNbMV0gfD0gRFBf TEFORV9DT1VOVF9FTkhBTkNFRF9GUkFNRV9FTjsKPiArCj4gKwllcnIgPSBkcm1fZHBfZHBjZF93 cml0ZShhdXgsIERQX0xJTktfQldfU0VULCB2YWx1ZXMsIHNpemVvZih2YWx1ZXMpKTsKPiArCWlm IChlcnIgPCAwKQo+ICsJCXJldHVybiBlcnI7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4g K3N0YXRpYyBib29sIGl0NjUwNV9jaGVja192b2x0YWdlX3N3aW5nX21heCh1OCBsYW5lX3ZvbHRh Z2Vfc3dpbmdfcHJlX2VtcGhhc2lzKQo+ICt7Cj4gKwlyZXR1cm4gKChsYW5lX3ZvbHRhZ2Vfc3dp bmdfcHJlX2VtcGhhc2lzICYgMHgwMykgPT0gTUFYX0NSX0xFVkVMKTsKPiArfQo+ICsKPiArc3Rh dGljIGJvb2wgaXQ2NTA1X2NoZWNrX3ByZV9lbXBoYXNpc19tYXgodTggbGFuZV92b2x0YWdlX3N3 aW5nX3ByZV9lbXBoYXNpcykKPiArewo+ICsJcmV0dXJuICgobGFuZV92b2x0YWdlX3N3aW5nX3By ZV9lbXBoYXNpcyAmIDB4MDMpID09IE1BWF9FUV9MRVZFTCk7Cj4gK30KPiArCj4gK3N0YXRpYyBi b29sIGl0NjUwNV9jaGVja19tYXhfdm9sdGFnZV9zd2luZ19yZWFjaGVkKHU4ICpsYW5lX3ZvbHRh Z2Vfc3dpbmcsCj4gKwkJCQkJCSAgIHU4IGxhbmVfY291bnQpCj4gK3sKPiArCXU4IGk7Cj4gKwo+ ICsJZm9yIChpID0gMDsgaSA8IGxhbmVfY291bnQ7IGkrKykgewo+ICsJCWlmIChsYW5lX3ZvbHRh Z2Vfc3dpbmdbaV0gJiBEUF9UUkFJTl9NQVhfU1dJTkdfUkVBQ0hFRCkKPiArCQkJcmV0dXJuIHRy dWU7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIGZhbHNlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBp dDY1MDVfc3RlcF90cmFpbl9sYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzX3NldCgKPiArCXN0cnVj dCBpdDY1MDUgKml0NjUwNSwKPiArCXN0cnVjdCBpdDY1MDVfc3RlcF90cmFpbl9wYXJhICpsYW5l X3ZvbHRhZ2VfcHJlX2VtcGhhc2lzLAo+ICsJdTggKmxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXNf c2V0KQo+ICt7Cj4gKwl1OCBpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBpdDY1MDUtPmxhbmVf Y291bnQ7IGkrKykgewo+ICsJCWxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMtPnZvbHRhZ2Vfc3dp bmdbaV0gJj0gMHgwMzsKPiArCQlsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzX3NldFtpXSA9Cj4g KwkJCWxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMtPnZvbHRhZ2Vfc3dpbmdbaV07Cj4gKwkJaWYg KGl0NjUwNV9jaGVja192b2x0YWdlX3N3aW5nX21heCgKPiArCQkJICAgIGxhbmVfdm9sdGFnZV9w cmVfZW1waGFzaXMtPnZvbHRhZ2Vfc3dpbmdbaV0pKQo+ICsJCQlsYW5lX3ZvbHRhZ2VfcHJlX2Vt cGhhc2lzX3NldFtpXSB8PQo+ICsJCQkJRFBfVFJBSU5fTUFYX1NXSU5HX1JFQUNIRUQ7Cj4gKwo+ ICsJCWxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMtPnByZV9lbXBoYXNpc1tpXSAmPSAweDAzOwo+ ICsJCWxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXNfc2V0W2ldIHw9Cj4gKwkJCWxhbmVfdm9sdGFn ZV9wcmVfZW1waGFzaXMtPnByZV9lbXBoYXNpc1tpXQo+ICsJCQk8PCBEUF9UUkFJTl9QUkVfRU1Q SEFTSVNfU0hJRlQ7Cj4gKwkJaWYgKGl0NjUwNV9jaGVja19wcmVfZW1waGFzaXNfbWF4KAo+ICsJ CQkgICAgbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpcy0+cHJlX2VtcGhhc2lzW2ldKSkKPiArCQkJ bGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpc19zZXRbaV0gfD0KPiArCQkJCURQX1RSQUlOX01BWF9Q UkVfRU1QSEFTSVNfUkVBQ0hFRDsKPiArCQlpdDY1MDVfZHBjZF93cml0ZShpdDY1MDUsIERQX1RS QUlOSU5HX0xBTkUwX1NFVCArIGksCj4gKwkJCQkgIGxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXNf c2V0W2ldKTsKPiArCj4gKwkJaWYgKGxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXNfc2V0W2ldICE9 Cj4gKwkJICAgIGl0NjUwNV9kcGNkX3JlYWQoaXQ2NTA1LCBEUF9UUkFJTklOR19MQU5FMF9TRVQg KyBpKSkKPiArCQkJcmV0dXJuIGZhbHNlOwo+ICsJfQo+ICsKPiArCXJldHVybiB0cnVlOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgYm9vbAo+ICtpdDY1MDVfc3RlcF9jcl90cmFpbihzdHJ1Y3QgaXQ2NTA1 ICppdDY1MDUsCj4gKwkJICAgICBzdHJ1Y3QgaXQ2NTA1X3N0ZXBfdHJhaW5fcGFyYSAqbGFuZV92 b2x0YWdlX3ByZV9lbXBoYXNpcykKPiArewo+ICsJdTggbG9vcF9jb3VudCA9IDAsIGkgPSAwLCBq Owo+ICsJdTggbGlua19zdGF0dXNbRFBfTElOS19TVEFUVVNfU0laRV0gPSB7IDAgfTsKPiArCXU4 IGxhbmVfbGV2ZWxfY29uZmlnW01BWF9MQU5FX0NPVU5UXSA9IHsgMCB9Owo+ICsJaW50IHByZV9l bXBoYXNpc19hZGp1c3QgPSAtMSwgdm9sdGFnZV9zd2luZ19hZGp1c3QgPSAtMTsKPiArCj4gKwlp dDY1MDVfZHBjZF93cml0ZShpdDY1MDUsIERQX0RPV05TUFJFQURfQ1RSTCwKPiArCQkJICBpdDY1 MDUtPmVuYWJsZV9zc2MgPyBEUF9TUFJFQURfQU1QXzBfNSA6IDB4MDApOwo+ICsJaXQ2NTA1X2Rw Y2Rfd3JpdGUoaXQ2NTA1LCBEUF9UUkFJTklOR19QQVRURVJOX1NFVCwKPiArCQkJICBEUF9UUkFJ TklOR19QQVRURVJOXzEpOwo+ICsKPiArCXdoaWxlIChsb29wX2NvdW50IDwgNSAmJiBpIDwgMTAp IHsKPiArCQlpKys7Cj4gKwkJaWYgKCFpdDY1MDVfc3RlcF90cmFpbl9sYW5lX3ZvbHRhZ2VfcHJl X2VtcGhhc2lzX3NldCgKPiArCQkJICAgIGl0NjUwNSwgbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNp cywKPiArCQkJICAgIGxhbmVfbGV2ZWxfY29uZmlnKSkKPiArCQkJY29udGludWU7Cj4gKwkJZHJt X2RwX2xpbmtfdHJhaW5fY2xvY2tfcmVjb3ZlcnlfZGVsYXkoaXQ2NTA1LT5kcGNkKTsKPiArCQlk cm1fZHBfZHBjZF9yZWFkX2xpbmtfc3RhdHVzKCZpdDY1MDUtPmF1eCwgbGlua19zdGF0dXMpOwo+ ICsKPiArCQlpZiAoZHJtX2RwX2Nsb2NrX3JlY292ZXJ5X29rKGxpbmtfc3RhdHVzLCBpdDY1MDUt PmxhbmVfY291bnQpKSB7Cj4gKwkJCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19UUkFJTl9D VFJMMCwgRk9SQ0VfQ1JfRE9ORSwKPiArCQkJCQlGT1JDRV9DUl9ET05FKTsKPiArCQkJcmV0dXJu IHRydWU7Cj4gKwkJfQo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVSKCZpdDY1MDUtPmNsaWVudC0+ ZGV2LCAiY3Igbm90IGRvbmUiKTsKPiArCj4gKwkJaWYgKGl0NjUwNV9jaGVja19tYXhfdm9sdGFn ZV9zd2luZ19yZWFjaGVkKGxhbmVfbGV2ZWxfY29uZmlnLAo+ICsJCQkJCQkJICAgaXQ2NTA1LT5s YW5lX2NvdW50KSkKPiArCQkJZ290byBjcl90cmFpbl9mYWlsOwo+ICsKPiArCQlmb3IgKGogPSAw OyBqIDwgaXQ2NTA1LT5sYW5lX2NvdW50OyBqKyspIHsKPiArCQkJbGFuZV92b2x0YWdlX3ByZV9l bXBoYXNpcy0+dm9sdGFnZV9zd2luZ1tqXSA9Cj4gKwkJCQlkcm1fZHBfZ2V0X2FkanVzdF9yZXF1 ZXN0X3ZvbHRhZ2UobGlua19zdGF0dXMsCj4gKwkJCQkJCQkJICBqKSA+Pgo+ICsJCQkJRFBfVFJB SU5fVk9MVEFHRV9TV0lOR19TSElGVDsKPiArCQkJbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpcy0+ cHJlX2VtcGhhc2lzW2pdID0KPiArCQkJCWRybV9kcF9nZXRfYWRqdXN0X3JlcXVlc3RfcHJlX2Vt cGhhc2lzKAo+ICsJCQkJCWxpbmtfc3RhdHVzLCBqKSA+Pgo+ICsJCQkJRFBfVFJBSU5fUFJFX0VN UEhBU0lTX1NISUZUOwo+ICsJCQlpZiAoKHZvbHRhZ2Vfc3dpbmdfYWRqdXN0ID09Cj4gKwkJCSAg ICAgbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpcy0+dm9sdGFnZV9zd2luZ1tqXSkgJiYKPiArCQkJ ICAgIChwcmVfZW1waGFzaXNfYWRqdXN0ID09Cj4gKwkJCSAgICAgbGFuZV92b2x0YWdlX3ByZV9l bXBoYXNpcy0+cHJlX2VtcGhhc2lzW2pdKSkgewo+ICsJCQkJbG9vcF9jb3VudCsrOwo+ICsJCQkJ Y29udGludWU7Cj4gKwkJCX0KPiArCj4gKwkJCXZvbHRhZ2Vfc3dpbmdfYWRqdXN0ID0KPiArCQkJ CWxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMtPnZvbHRhZ2Vfc3dpbmdbal07Cj4gKwkJCXByZV9l bXBoYXNpc19hZGp1c3QgPQo+ICsJCQkJbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpcy0+cHJlX2Vt cGhhc2lzW2pdOwo+ICsJCQlsb29wX2NvdW50ID0gMDsKPiArCj4gKwkJCWlmICh2b2x0YWdlX3N3 aW5nX2FkanVzdCArIHByZV9lbXBoYXNpc19hZGp1c3QgPgo+ICsJCQkgICAgTUFYX0VRX0xFVkVM KQo+ICsJCQkJbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpcy0+dm9sdGFnZV9zd2luZ1tqXSA9Cj4g KwkJCQkJTUFYX0VRX0xFVkVMIC0KPiArCQkJCQlsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzCj4g KwkJCQkJCS0+cHJlX2VtcGhhc2lzW2pdOwo+ICsJCX0KPiArCX0KPiArCj4gK2NyX3RyYWluX2Zh aWw6Cj4gKwlpdDY1MDVfZHBjZF93cml0ZShpdDY1MDUsIERQX1RSQUlOSU5HX1BBVFRFUk5fU0VU LAo+ICsJCQkgIERQX1RSQUlOSU5HX1BBVFRFUk5fRElTQUJMRSk7Cj4gKwo+ICsJcmV0dXJuIGZh bHNlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbAo+ICtpdDY1MDVfc3RlcF9lcV90cmFpbihzdHJ1 Y3QgaXQ2NTA1ICppdDY1MDUsCj4gKwkJICAgICBzdHJ1Y3QgaXQ2NTA1X3N0ZXBfdHJhaW5fcGFy YSAqbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpcykKPiArewo+ICsJdTggbG9vcF9jb3VudCA9IDAs IGksIGxpbmtfc3RhdHVzW0RQX0xJTktfU1RBVFVTX1NJWkVdID0geyAwIH07Cj4gKwl1OCBsYW5l X2xldmVsX2NvbmZpZ1tNQVhfTEFORV9DT1VOVF0gPSB7IDAgfTsKPiArCj4gKwlpdDY1MDVfZHBj ZF93cml0ZShpdDY1MDUsIERQX1RSQUlOSU5HX1BBVFRFUk5fU0VULAo+ICsJCQkgIERQX1RSQUlO SU5HX1BBVFRFUk5fMik7Cj4gKwo+ICsJd2hpbGUgKGxvb3BfY291bnQgPCA2KSB7Cj4gKwkJbG9v cF9jb3VudCsrOwo+ICsKPiArCQlpZiAoIWl0NjUwNV9zdGVwX3RyYWluX2xhbmVfdm9sdGFnZV9w cmVfZW1waGFzaXNfc2V0KAo+ICsJCQkgICAgaXQ2NTA1LCBsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhh c2lzLAo+ICsJCQkgICAgbGFuZV9sZXZlbF9jb25maWcpKQo+ICsJCQljb250aW51ZTsKPiArCj4g KwkJZHJtX2RwX2xpbmtfdHJhaW5fY2hhbm5lbF9lcV9kZWxheShpdDY1MDUtPmRwY2QpOwo+ICsJ CWRybV9kcF9kcGNkX3JlYWRfbGlua19zdGF0dXMoJml0NjUwNS0+YXV4LCBsaW5rX3N0YXR1cyk7 Cj4gKwo+ICsJCWlmICghZHJtX2RwX2Nsb2NrX3JlY292ZXJ5X29rKGxpbmtfc3RhdHVzLCBpdDY1 MDUtPmxhbmVfY291bnQpKQo+ICsJCQlnb3RvIGVxX3RyYWluX2ZhaWw7Cj4gKwo+ICsJCWlmIChk cm1fZHBfY2hhbm5lbF9lcV9vayhsaW5rX3N0YXR1cywgaXQ2NTA1LT5sYW5lX2NvdW50KSkgewo+ ICsJCQlpdDY1MDVfZHBjZF93cml0ZShpdDY1MDUsIERQX1RSQUlOSU5HX1BBVFRFUk5fU0VULAo+ ICsJCQkJCSAgRFBfVFJBSU5JTkdfUEFUVEVSTl9ESVNBQkxFKTsKPiArCQkJaXQ2NTA1X3NldF9i aXRzKGl0NjUwNSwgUkVHX1RSQUlOX0NUUkwwLCBGT1JDRV9FUV9ET05FLAo+ICsJCQkJCUZPUkNF X0VRX0RPTkUpOwo+ICsJCQlyZXR1cm4gdHJ1ZTsKPiArCQl9Cj4gKwkJRFJNX0RFVl9ERUJVR19E UklWRVIoJml0NjUwNS0+Y2xpZW50LT5kZXYsICJlcSBub3QgZG9uZSIpOwo+ICsKPiArCQlmb3Ig KGkgPSAwOyBpIDwgaXQ2NTA1LT5sYW5lX2NvdW50OyBpKyspIHsKPiArCQkJbGFuZV92b2x0YWdl X3ByZV9lbXBoYXNpcy0+dm9sdGFnZV9zd2luZ1tpXSA9Cj4gKwkJCQlkcm1fZHBfZ2V0X2FkanVz dF9yZXF1ZXN0X3ZvbHRhZ2UobGlua19zdGF0dXMsCj4gKwkJCQkJCQkJICBpKSA+Pgo+ICsJCQkJ RFBfVFJBSU5fVk9MVEFHRV9TV0lOR19TSElGVDsKPiArCQkJbGFuZV92b2x0YWdlX3ByZV9lbXBo YXNpcy0+cHJlX2VtcGhhc2lzW2ldID0KPiArCQkJCWRybV9kcF9nZXRfYWRqdXN0X3JlcXVlc3Rf cHJlX2VtcGhhc2lzKAo+ICsJCQkJCWxpbmtfc3RhdHVzLCBpKSA+Pgo+ICsJCQkJRFBfVFJBSU5f UFJFX0VNUEhBU0lTX1NISUZUOwo+ICsKPiArCQkJaWYgKGxhbmVfdm9sdGFnZV9wcmVfZW1waGFz aXMtPnZvbHRhZ2Vfc3dpbmdbaV0gKwo+ICsJCQkJICAgIGxhbmVfdm9sdGFnZV9wcmVfZW1waGFz aXMtPnByZV9lbXBoYXNpc1tpXSA+Cj4gKwkJCSAgICBNQVhfRVFfTEVWRUwpCj4gKwkJCQlsYW5l X3ZvbHRhZ2VfcHJlX2VtcGhhc2lzLT52b2x0YWdlX3N3aW5nW2ldID0KPiArCQkJCQkweDAzIC0g bGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpcwo+ICsJCQkJCQkgICAgICAgLT5wcmVfZW1waGFzaXNb aV07Cj4gKwkJfQo+ICsJfQo+ICsKPiArZXFfdHJhaW5fZmFpbDoKPiArCWl0NjUwNV9kcGNkX3dy aXRlKGl0NjUwNSwgRFBfVFJBSU5JTkdfUEFUVEVSTl9TRVQsCj4gKwkJCSAgRFBfVFJBSU5JTkdf UEFUVEVSTl9ESVNBQkxFKTsKPiArCXJldHVybiBmYWxzZTsKPiArfQo+ICsKPiArc3RhdGljIGJv b2wgaXQ2NTA1X2xpbmtfc3RhcnRfc3RlcF90cmFpbihzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpCj4g K3sKPiArCWludCBlcnI7Cj4gKwlzdHJ1Y3QgaXQ2NTA1X3N0ZXBfdHJhaW5fcGFyYSBsYW5lX3Zv bHRhZ2VfcHJlX2VtcGhhc2lzID0gewo+ICsJCS52b2x0YWdlX3N3aW5nID0geyAwIH0sCj4gKwkJ LnByZV9lbXBoYXNpcyA9IHsgMCB9LAo+ICsJfTsKPiArCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZF UigmaXQ2NTA1LT5jbGllbnQtPmRldiwgInN0YXJ0Iik7Cj4gKwllcnIgPSBpdDY1MDVfZHJtX2Rw X2xpbmtfY29uZmlndXJlKGl0NjUwNSk7Cj4gKwo+ICsJaWYgKGVyciA8IDApCj4gKwkJcmV0dXJu IGZhbHNlOwo+ICsJaWYgKCFpdDY1MDVfc3RlcF9jcl90cmFpbihpdDY1MDUsICZsYW5lX3ZvbHRh Z2VfcHJlX2VtcGhhc2lzKSkKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwlpZiAoIWl0NjUwNV9zdGVw X2VxX3RyYWluKGl0NjUwNSwgJmxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMpKQo+ICsJCXJldHVy biBmYWxzZTsKPiArCXJldHVybiB0cnVlOwo+ICt9Cj4gKwoKClRoZSB3aG9sZSBsaW5rIHRyYWlu aW5nIGlzIHBlcmZvcm1lZCBpbiBkaWZmZXJlbnQgZHJpdmVycyBpbiBzaW1pbGFyIAp3YXksIG1h eWJlIHNvbWUgZGF5IHNvbWVvbmUgd2lsbCBiZSBhYmxlIHRvIGFic3RyYWN0IG91dCBjb21tb24g cGFydHMgCmFuZCBjcmVhdGUgbmljZSBoZWxwZXJzIGZvciBpdC4KCgo+ICtzdGF0aWMgYm9vbCBp dDY1MDVfZ2V0X3ZpZGVvX3N0YXR1cyhzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpCj4gK3sKPiArCWlu dCByZWdfMGQ7Cj4gKwo+ICsJcmVnXzBkID0gaXQ2NTA1X3JlYWQoaXQ2NTA1LCBSRUdfU1lTVEVN X1NUUyk7Cj4gKwo+ICsJaWYgKHJlZ18wZCA8IDApCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsKPiAr CXJldHVybiAhIShyZWdfMGQgJiBWSURFT19TVEIpOwoKCkFnYWluICEhCgoKPiArfQo+ICsKPiAr c3RhdGljIHZvaWQgaXQ2NTA1X3Jlc2V0X2hkY3Aoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQo+ICt7 Cj4gKwlpdDY1MDUtPmhkY3Bfc3RhdHVzID0gSERDUF9BVVRIX0lETEU7Cj4gKwkvKiBEaXNhYmxl IENQX0Rlc2lyZWQgKi8KPiArCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19IRENQX0NUUkwx LCBIRENQX0NQX0VOQUJMRSwgMHgwMCk7Cj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdf UkVTRVRfQ1RSTCwgSERDUF9SRVNFVCwgSERDUF9SRVNFVCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2 b2lkIGl0NjUwNV9zdGFydF9oZGNwKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkKPiArewo+ICsJc3Ry dWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7Cj4gKwo+ICsJRFJNX0RFVl9E RUJVR19EUklWRVIoZGV2LCAic3RhcnQiKTsKPiArCWl0NjUwNV9yZXNldF9oZGNwKGl0NjUwNSk7 Cj4gKwlxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX3dxLCAmaXQ2NTA1LT5oZGNwX3dvcmssCj4g KwkJCSAgIG1zZWNzX3RvX2ppZmZpZXMoMjQwMCkpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBp dDY1MDVfc3RvcF9oZGNwKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkKPiArewo+ICsJaXQ2NTA1X3Jl c2V0X2hkY3AoaXQ2NTA1KTsKPiArCWNhbmNlbF9kZWxheWVkX3dvcmsoJml0NjUwNS0+aGRjcF93 b3JrKTsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgaXQ2NTA1X2hkY3BfaXNfa3N2X3ZhbGlkKHU4 ICprc3YpCj4gK3sKPiArCWludCBpLCBvbmVzID0gMDsKPiArCj4gKwkvKiBLU1YgaGFzIDIwIDEn cyBhbmQgMjAgMCdzICovCj4gKwlmb3IgKGkgPSAwOyBpIDwgRFJNX0hEQ1BfS1NWX0xFTjsgaSsr KQo+ICsJCW9uZXMgKz0gaHdlaWdodDgoa3N2W2ldKTsKPiArCWlmIChvbmVzICE9IDIwKQo+ICsJ CXJldHVybiBmYWxzZTsKPiArCXJldHVybiB0cnVlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBp dDY1MDVfaGRjcF9wYXJ0MV9hdXRoKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkKPiArewo+ICsJc3Ry dWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7Cj4gKwl1OCBoZGNwX2JjYXBz Owo+ICsKPiArCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19SRVNFVF9DVFJMLCBIRENQX1JF U0VULCAweDAwKTsKPiArCS8qIERpc2FibGUgQ1BfRGVzaXJlZCAqLwo+ICsJaXQ2NTA1X3NldF9i aXRzKGl0NjUwNSwgUkVHX0hEQ1BfQ1RSTDEsIEhEQ1BfQ1BfRU5BQkxFLCAweDAwKTsKPiArCj4g Kwl1c2xlZXBfcmFuZ2UoMTAwMCwgMTUwMCk7Cj4gKwloZGNwX2JjYXBzID0gaXQ2NTA1X2RwY2Rf cmVhZChpdDY1MDUsIERQX0FVWF9IRENQX0JDQVBTKTsKPiArCURSTV9ERVZfREVCVUdfRFJJVkVS KGRldiwgIkRQQ0RbMHg2ODAyOF06IDB4JTAyeCIsCj4gKwkJCSAgICAgaGRjcF9iY2Fwcyk7Cj4g Kwo+ICsJaWYgKCFoZGNwX2JjYXBzKQo+ICsJCXJldHVybjsKPiArCj4gKwkvKiBjbGVhciB0aGUg cmVwZWF0ZXIgTGlzdCBDaGsgRG9uZSBhbmQgZmFpbCBiaXQgKi8KPiArCWl0NjUwNV9zZXRfYml0 cyhpdDY1MDUsIFJFR19IRENQX1RSSUdHRVIsCj4gKwkJCUhEQ1BfVFJJR0dFUl9LU1ZfRE9ORSB8 IEhEQ1BfVFJJR0dFUl9LU1ZfRkFJTCwKPiArCQkJMHgwMCk7Cj4gKwo+ICsJLyogRW5hYmxlIEFu IEdlbmVyYXRvciAqLwo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0hEQ1BfQ1RSTDIs IEhEQ1BfQU5fR0VOLCBIRENQX0FOX0dFTik7Cj4gKwkvKiBkZWxheTFtcygxMCk7Ki8KZHJvcCB0 aGUgY29tbWVudCAtIGl0IGRvZXMgbm90IGFkZCB2YWx1YWJsZSBpbmZvCj4gKwl1c2xlZXBfcmFu Z2UoMTAwMDAsIDE1MDAwKTsKPiArCS8qIFN0b3AgQW4gR2VuZXJhdG9yICovCj4gKwlpdDY1MDVf c2V0X2JpdHMoaXQ2NTA1LCBSRUdfSERDUF9DVFJMMiwgSERDUF9BTl9HRU4sIDB4MDApOwo+ICsK PiArCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19IRENQX0NUUkwxLCBIRENQX0NQX0VOQUJM RSwgSERDUF9DUF9FTkFCTEUpOwo+ICsKPiArCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19I RENQX1RSSUdHRVIsIEhEQ1BfVFJJR0dFUl9TVEFSVCwKPiArCQkJSERDUF9UUklHR0VSX1NUQVJU KTsKPiArCj4gKwlpdDY1MDUtPmhkY3Bfc3RhdHVzID0gSERDUF9BVVRIX0dPSU5HOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW50IGl0NjUwNV9zaGExX2RpZ2VzdChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUs IHU4ICpzaGExX2lucHV0LAo+ICsJCQkgICAgICB1bnNpZ25lZCBpbnQgc2l6ZSwgdTggKm91dHB1 dF9hdikKPiArewo+ICsJc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2M7Cj4gKwlzdHJ1Y3QgY3J5cHRv X3NoYXNoICp0Zm07Cj4gKwlpbnQgZXJyOwo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUw NS0+Y2xpZW50LT5kZXY7Cj4gKwo+ICsJdGZtID0gY3J5cHRvX2FsbG9jX3NoYXNoKCJzaGExIiwg MCwgMCk7Cj4gKwlpZiAoSVNfRVJSKHRmbSkpIHsKPiArCQlEUk1fREVWX0VSUk9SKGRldiwgImNy eXB0b19hbGxvY19zaGFzaCBzaGExIGZhaWxlZCIpOwo+ICsJCXJldHVybiBQVFJfRVJSKHRmbSk7 Cj4gKwl9Cj4gKwlkZXNjID0ga3phbGxvYyhzaXplb2YoKmRlc2MpICsgY3J5cHRvX3NoYXNoX2Rl c2NzaXplKHRmbSksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFkZXNjKSB7Cj4gKwkJY3J5cHRvX2Zy ZWVfc2hhc2godGZtKTsKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCX0KPiArCj4gKwlkZXNjLT50 Zm0gPSB0Zm07Cj4gKwllcnIgPSBjcnlwdG9fc2hhc2hfZGlnZXN0KGRlc2MsIHNoYTFfaW5wdXQs IHNpemUsIG91dHB1dF9hdik7Cj4gKwlpZiAoZXJyKQo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAi Y3J5cHRvX3NoYXNoX2RpZ2VzdCBzaGExIGZhaWxlZCIpOwo+ICsKPiArCWNyeXB0b19mcmVlX3No YXNoKHRmbSk7Cj4gKwlrZnJlZShkZXNjKTsKPiArCXJldHVybiBlcnI7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbnQgaXQ2NTA1X3NldHVwX3NoYTFfaW5wdXQoc3RydWN0IGl0NjUwNSAqaXQ2NTA1LCB1 OCAqc2hhMV9pbnB1dCkKPiArewo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xp ZW50LT5kZXY7Cj4gKwl1OCBiaW5mb1syXTsKPiArCWludCBkb3duX3N0cmVhbV9jb3VudCwgaSwg ZXJyLCBtc2dfY291bnQgPSAwOwo+ICsKPiArCWVyciA9IGl0NjUwNV9nZXRfZHBjZChpdDY1MDUs IERQX0FVWF9IRENQX0JJTkZPLCBiaW5mbywKPiArCQkJICAgICAgQVJSQVlfU0laRShiaW5mbykp Owo+ICsKPiArCWlmIChlcnIgPCAwKSB7Cj4gKwkJRFJNX0RFVl9FUlJPUihkZXYsICJSZWFkIGJp bmZvIHZhbHVlIEZhaWwiKTsKPiArCQlyZXR1cm4gZXJyOwo+ICsJfQo+ICsKPiArCWRvd25fc3Ry ZWFtX2NvdW50ID0gYmluZm9bMF0gJiAweDdGOwo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2 LCAiYmluZm86MHglKnBoIiwgKGludClBUlJBWV9TSVpFKGJpbmZvKSwKPiArCQkJICAgICBiaW5m byk7Cj4gKwo+ICsJaWYgKChiaW5mb1swXSAmIEJJVCg3KSkgfHwgKGJpbmZvWzFdICYgQklUKDMp KSkgewo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAiSERDUCBtYXggY2FzY2FkZSBkZXZpY2UgZXhj ZWVkIik7Cj4gKwkJcmV0dXJuIDA7Cj4gKwl9Cj4gKwo+ICsJaWYgKCFkb3duX3N0cmVhbV9jb3Vu dCB8fAo+ICsJICAgIChkb3duX3N0cmVhbV9jb3VudCA+IE1BWF9IRENQX0RPV05fU1RSRUFNX0NP VU5UKSkgewo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAiSERDUCBkb3duIHN0cmVhbSBjb3VudCBF cnJvciAlZCIsCj4gKwkJCSAgICAgIGRvd25fc3RyZWFtX2NvdW50KTsKPiArCQlyZXR1cm4gMDsK PiArCX0KPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgZG93bl9zdHJlYW1fY291bnQ7IGkrKykgewo+ ICsJCWVyciA9IGl0NjUwNV9nZXRfZHBjZChpdDY1MDUsIERQX0FVWF9IRENQX0tTVl9GSUZPICsK PiArCQkJCSAgICAgIChpICUgMykgKiBEUk1fSERDUF9LU1ZfTEVOLAo+ICsJCQkJICAgICAgc2hh MV9pbnB1dCArIG1zZ19jb3VudCwKPiArCQkJCSAgICAgIERSTV9IRENQX0tTVl9MRU4pOwo+ICsK PiArCQlpZiAoZXJyIDwgMCkKPiArCQkJcmV0dXJuIGVycjsKPiArCj4gKwkJbXNnX2NvdW50ICs9 IDU7Cj4gKwl9Cj4gKwo+ICsJaXQ2NTA1LT5oZGNwX2Rvd25fc3RyZWFtX2NvdW50ID0gZG93bl9z dHJlYW1fY291bnQ7Cj4gKwlzaGExX2lucHV0W21zZ19jb3VudCsrXSA9IGJpbmZvWzBdOwo+ICsJ c2hhMV9pbnB1dFttc2dfY291bnQrK10gPSBiaW5mb1sxXTsKPiArCj4gKwlpdDY1MDVfc2V0X2Jp dHMoaXQ2NTA1LCBSRUdfSERDUF9DVFJMMiwgSERDUF9FTl9NMF9SRUFELAo+ICsJCQlIRENQX0VO X00wX1JFQUQpOwo+ICsKPiArCWVyciA9IHJlZ21hcF9idWxrX3JlYWQoaXQ2NTA1LT5yZWdtYXAs IFJFR19NMF8wXzcsCj4gKwkJCSAgICAgICBzaGExX2lucHV0ICsgbXNnX2NvdW50LCA4KTsKPiAr Cj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfSERDUF9DVFJMMiwgSERDUF9FTl9NMF9S RUFELCAweDAwKTsKPiArCj4gKwlpZiAoZXJyIDwgMCkgewo+ICsJCURSTV9ERVZfRVJST1IoZGV2 LCAiIFdhcm5pbmcsIFJlYWQgTSB2YWx1ZSBGYWlsIik7Cj4gKwkJcmV0dXJuIGVycjsKPiArCX0K PiArCj4gKwltc2dfY291bnQgKz0gODsKPiArCj4gKwlyZXR1cm4gbXNnX2NvdW50Owo+ICt9Cj4g Kwo+ICtzdGF0aWMgYm9vbCBpdDY1MDVfaGRjcF9wYXJ0Ml9rc3ZsaXN0X2NoZWNrKHN0cnVjdCBp dDY1MDUgKml0NjUwNSkKPiArewo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xp ZW50LT5kZXY7Cj4gKwl1OCBhdls1XVs0XSwgYnZbNV1bNF07Cj4gKwlpbnQgaSwgZXJyOwo+ICsK PiArCWkgPSBpdDY1MDVfc2V0dXBfc2hhMV9pbnB1dChpdDY1MDUsIGl0NjUwNS0+c2hhMV9pbnB1 dCk7Cj4gKwlpZiAoaSA8PSAwKSB7Cj4gKwkJRFJNX0RFVl9FUlJPUihkZXYsICJTSEEtMSBJbnB1 dCBsZW5ndGggZXJyb3IgJWQiLCBpKTsKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwl9Cj4gKwo+ICsJ aXQ2NTA1X3NoYTFfZGlnZXN0KGl0NjUwNSwgaXQ2NTA1LT5zaGExX2lucHV0LCBpLCAodTggKilh dik7Cj4gKwo+ICsJZXJyID0gaXQ2NTA1X2dldF9kcGNkKGl0NjUwNSwgRFBfQVVYX0hEQ1BfVl9Q UklNRSgwKSwgKHU4ICopYnYsCj4gKwkJCSAgICAgIHNpemVvZihidikpOwo+ICsKPiArCWlmIChl cnIgPCAwKSB7Cj4gKwkJRFJNX0RFVl9FUlJPUihkZXYsICJSZWFkIFYnIHZhbHVlIEZhaWwiKTsK PiArCQlyZXR1cm4gZmFsc2U7Cj4gKwl9Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IDU7IGkrKykK PiArCQlpZiAoKGJ2W2ldWzNdICE9IGF2W2ldWzBdKSB8fCAoYnZbaV1bMl0gIT0gYXZbaV1bMV0p IHx8Cj4gKwkJICAgIChidltpXVsxXSAhPSBhdltpXVsyXSkgfHwgKGJ2W2ldWzBdICE9IGF2W2ld WzNdKSkKPiArCQkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCURSTV9ERVZfREVCVUdfRFJJVkVSKGRl diwgIlYnIGFsbCBtYXRjaCEhIik7Cj4gKwlyZXR1cm4gdHJ1ZTsKPiArfQo+ICsKPiArc3RhdGlj IHZvaWQgaXQ2NTA1X2hkY3Bfd2FpdF9rc3ZfbGlzdChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmsp Cj4gK3sKPiArCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1 Y3QgaXQ2NTA1LAo+ICsJCQkJCSAgICAgaGRjcF93YWl0X2tzdl9saXN0KTsKPiArCXN0cnVjdCBk ZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Owo+ICsJdW5zaWduZWQgaW50IHRpbWVv dXQgPSA1MDAwOwo+ICsJdTggYnN0YXR1cyA9IDA7Cj4gKwlib29sIGtzdl9saXN0X2NoZWNrOwo+ ICsKPiArCXRpbWVvdXQgLz0gMjA7Cj4gKwl3aGlsZSAodGltZW91dCA+IDApIHsKPiArCQlpZiAo IWl0NjUwNV9nZXRfc2lua19ocGRfc3RhdHVzKGl0NjUwNSkpCj4gKwkJCXJldHVybjsKPiArCj4g KwkJYnN0YXR1cyA9IGl0NjUwNV9kcGNkX3JlYWQoaXQ2NTA1LCBEUF9BVVhfSERDUF9CU1RBVFVT KTsKPiArCj4gKwkJaWYgKGJzdGF0dXMgJiBEUF9CU1RBVFVTX1JFQURZKQo+ICsJCQlicmVhazsK PiArCj4gKwkJbXNsZWVwKDIwKTsKPiArCQl0aW1lb3V0LS07Cj4gKwl9Cj4gKwo+ICsJaWYgKHRp bWVvdXQgPT0gMCkgewo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInRpbWVvdXQgYW5k IGtzdiBsaXN0IHdhaXQgZmFpbGVkIik7Cj4gKwkJZ290byB0aW1lb3V0Owo+ICsJfQo+ICsKPiAr CWtzdl9saXN0X2NoZWNrID0gaXQ2NTA1X2hkY3BfcGFydDJfa3N2bGlzdF9jaGVjayhpdDY1MDUp Owo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAia3N2IGxpc3QgcmVhZHksIGtzdiBsaXN0 IGNoZWNrICVzIiwKPiArCQkJICAgICBrc3ZfbGlzdF9jaGVjayA/ICJwYXNzIiA6ICJmYWlsIik7 Cj4gKwlpZiAoa3N2X2xpc3RfY2hlY2spIHsKPiArCQlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBS RUdfSERDUF9UUklHR0VSLAo+ICsJCQkJSERDUF9UUklHR0VSX0tTVl9ET05FLCBIRENQX1RSSUdH RVJfS1NWX0RPTkUpOwo+ICsJCXJldHVybjsKPiArCX0KPiArdGltZW91dDoKPiArCWl0NjUwNV9z ZXRfYml0cyhpdDY1MDUsIFJFR19IRENQX1RSSUdHRVIsCj4gKwkJCUhEQ1BfVFJJR0dFUl9LU1Zf RE9ORSB8IEhEQ1BfVFJJR0dFUl9LU1ZfRkFJTCwKPiArCQkJSERDUF9UUklHR0VSX0tTVl9ET05F IHwgSERDUF9UUklHR0VSX0tTVl9GQUlMKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaXQ2NTA1 X2hkY3Bfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCj4gK3sKPiArCXN0cnVjdCBpdDY1 MDUgKml0NjUwNSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXQ2NTA1LAo+ICsJCQkJCSAg ICAgaGRjcF93b3JrLndvcmspOwo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xp ZW50LT5kZXY7Cj4gKwlpbnQgcmV0Owo+ICsJdTggbGlua19zdGF0dXNbRFBfTElOS19TVEFUVVNf U0laRV0gPSB7IDAgfTsKPiArCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJzdGFydCIp Owo+ICsKPiArCWlmICghaXQ2NTA1X2dldF9zaW5rX2hwZF9zdGF0dXMoaXQ2NTA1KSkKPiArCQly ZXR1cm47Cj4gKwo+ICsJcmV0ID0gZHJtX2RwX2RwY2RfcmVhZF9saW5rX3N0YXR1cygmaXQ2NTA1 LT5hdXgsIGxpbmtfc3RhdHVzKTsKPiArCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInJldDog JWQgbGlua19zdGF0dXM6ICUqcGgiLCByZXQsCj4gKwkJCSAgICAgKGludClzaXplb2YobGlua19z dGF0dXMpLCBsaW5rX3N0YXR1cyk7Cj4gKwo+ICsJaWYgKChyZXQgPCAwKSB8fCAhZHJtX2RwX2No YW5uZWxfZXFfb2sobGlua19zdGF0dXMsIGl0NjUwNS0+bGFuZV9jb3VudCkKPiArCSAgICB8fCAh aXQ2NTA1X2dldF92aWRlb19zdGF0dXMoaXQ2NTA1KSkgewo+ICsJCURSTV9ERVZfREVCVUdfRFJJ VkVSKGRldiwgImxpbmsgdHJhaW4gbm90IGRvbmUgb3Igbm8gdmlkZW8iKTsKPiArCQlyZXR1cm47 Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gaXQ2NTA1X2dldF9kcGNkKGl0NjUwNSwgRFBfQVVYX0hEQ1Bf QktTViwgaXQ2NTA1LT5ia3N2cywKPiArCQkJICAgICAgQVJSQVlfU0laRShpdDY1MDUtPmJrc3Zz KSk7Cj4gKwlpZiAocmV0IDwgMCkgewo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAiZmFpbCB0byBn ZXQgYmtzdiAgcmV0OiAlZCIsIHJldCk7Cj4gKwkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVH X0hEQ1BfVFJJR0dFUiwKPiArCQkJCUhEQ1BfVFJJR0dFUl9LU1ZfRkFJTCwgSERDUF9UUklHR0VS X0tTVl9GQUlMKTsKPiArCX0KPiArCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJia3N2 ID0gMHglKnBoIiwKPiArCQkJICAgICAoaW50KUFSUkFZX1NJWkUoaXQ2NTA1LT5ia3N2cyksIGl0 NjUwNS0+YmtzdnMpOwo+ICsKPiArCWlmICghaXQ2NTA1X2hkY3BfaXNfa3N2X3ZhbGlkKGl0NjUw NS0+YmtzdnMpKSB7Cj4gKwkJRFJNX0RFVl9FUlJPUihkZXYsICJEaXNwbGF5IFBvcnQgYmtzdiBu b3QgdmFsaWQiKTsKPiArCQlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfSERDUF9UUklHR0VS LAo+ICsJCQkJSERDUF9UUklHR0VSX0tTVl9GQUlMLCBIRENQX1RSSUdHRVJfS1NWX0ZBSUwpOwo+ ICsJfQo+ICsKPiArCWl0NjUwNV9oZGNwX3BhcnQxX2F1dGgoaXQ2NTA1KTsKPiArfQo+ICsKPiAr c3RhdGljIHZvaWQgaXQ2NTA1X3Nob3dfaGRjcF9pbmZvKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkK PiArewo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7Cj4gKwlp bnQgaTsKPiArCXU4ICpzaGExID0gaXQ2NTA1LT5zaGExX2lucHV0Owo+ICsKPiArCURSTV9ERVZf REVCVUdfRFJJVkVSKGRldiwgImhkY3Bfc3RhdHVzOiAlZCBpc19yZXBlYXRlcjogJWQiLAo+ICsJ CQkgICAgIGl0NjUwNS0+aGRjcF9zdGF0dXMsIGl0NjUwNS0+aXNfcmVwZWF0ZXIpOwo+ICsJRFJN X0RFVl9ERUJVR19EUklWRVIoZGV2LCAiYmtzdiA9IDB4JSpwaCIsCj4gKwkJCSAgICAgKGludClB UlJBWV9TSVpFKGl0NjUwNS0+YmtzdnMpLCBpdDY1MDUtPmJrc3ZzKTsKPiArCj4gKwlpZiAoaXQ2 NTA1LT5pc19yZXBlYXRlcikgewo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImhkY3Bf ZG93bl9zdHJlYW1fY291bnQ6ICVkIiwKPiArCQkJCSAgICAgaXQ2NTA1LT5oZGNwX2Rvd25fc3Ry ZWFtX2NvdW50KTsKPiArCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJzaGExX2lucHV0OiAw eCUqcGgiLAo+ICsJCQkJICAgICAoaW50KUFSUkFZX1NJWkUoaXQ2NTA1LT5zaGExX2lucHV0KSwK PiArCQkJCSAgICAgaXQ2NTA1LT5zaGExX2lucHV0KTsKPiArCQlmb3IgKGkgPSAwOyBpIDwgaXQ2 NTA1LT5oZGNwX2Rvd25fc3RyZWFtX2NvdW50OyBpKyspIHsKPiArCQkJRFJNX0RFVl9ERUJVR19E UklWRVIoZGV2LCAiS1NWXyVkID0gMHglKnBoIiwgaSwKPiArCQkJCQkgICAgIERSTV9IRENQX0tT Vl9MRU4sIHNoYTEpOwo+ICsJCQlzaGExICs9IERSTV9IRENQX0tTVl9MRU47Cj4gKwkJfQo+ICsJ CURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImJpbmZvOiAweCUycGggTTA6IDB4JThwaCIsCj4g KwkJCQkgICAgIHNoYTEsIHNoYTEgKyAyKTsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQg aXQ2NTA1X3N0b3BfbGlua190cmFpbihzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpCj4gK3sKPiArCWl0 NjUwNS0+bGlua19zdGF0ZSA9IExJTktfSURMRTsKPiArCWNhbmNlbF93b3JrX3N5bmMoJml0NjUw NS0+bGlua193b3Jrcyk7Cj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfVFJBSU5fQ1RSTDEs IEZPUkNFX1JFVFJBSU4pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfbGlua190cmFp bl9vayhzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpCj4gK3sKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9 ICZpdDY1MDUtPmNsaWVudC0+ZGV2Owo+ICsKPiArCWl0NjUwNS0+bGlua19zdGF0ZSA9IExJTktf T0s7Cj4gKwkvKiBkaXNhbGJlIG11dGUgZW5hYmxlIGF2aSBpbmZvIGZyYW1lICovCj4gKwlpdDY1 MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfREFUQV9NVVRFX0NUUkwsIEVOX1ZJRF9NVVRFLCAweDAw KTsKPiArCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19JTkZPRlJBTUVfQ1RSTCwKPiArCQkJ RU5fVklEX0NUUkxfUEtULCBFTl9WSURfQ1RSTF9QS1QpOwo+ICsKPiArCWlmIChpdDY1MDVfYXVk aW9faW5wdXQoaXQ2NTA1KSkgewo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIkVuYWJs ZSBhdWRpbyEiKTsKPiArCQlpdDY1MDVfZW5hYmxlX2F1ZGlvKGl0NjUwNSk7Cj4gKwl9Cj4gKwo+ ICsJaWYgKGl0NjUwNS0+aGRjcF9kZXNpcmVkKQo+ICsJCWl0NjUwNV9zdGFydF9oZGNwKGl0NjUw NSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9saW5rX3N0ZXBfdHJhaW5fcHJvY2Vz cyhzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpCj4gK3sKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZp dDY1MDUtPmNsaWVudC0+ZGV2Owo+ICsJaW50IHJldCwgaSwgc3RlcF9yZXRyeSA9IDM7Cj4gKwo+ ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiU3RhcnQgc3RlcCB0cmFpbiIpOwo+ICsKPiAr CWlmIChpdDY1MDUtPnNpbmtfY291bnQgPT0gMCkgewo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVS KGRldiwgIml0NjUwNS0+c2lua19jb3VudDolZCwgZm9yY2UgZXEiLAo+ICsJCQkJICAgICBpdDY1 MDUtPnNpbmtfY291bnQpOwo+ICsJCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsCVJFR19UUkFJTl9D VFJMMCwgRk9SQ0VfRVFfRE9ORSwKPiArCQkJCUZPUkNFX0VRX0RPTkUpOwo+ICsJCXJldHVybjsK PiArCX0KPiArCj4gKwlpZiAoIWl0NjUwNS0+c3RlcF90cmFpbikgewo+ICsJCURSTV9ERVZfREVC VUdfRFJJVkVSKGRldiwgIm5vdCBzdXBwb3J0IHN0ZXAgdHJhaW4iKTsKPiArCQlyZXR1cm47Cj4g Kwl9Cj4gKwo+ICsJLyogc2V0cCB0cmFpbmluZyBzdGFydCBoZXJlICovCj4gKwlmb3IgKGkgPSAw OyBpIDwgc3RlcF9yZXRyeTsgaSsrKSB7Cj4gKwkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVH X1RSQUlOX0NUUkwwLAo+ICsJCQkJRk9SQ0VfQ1JfRE9ORSB8IEZPUkNFX0VRX0RPTkUsIDB4MDAp Owo+ICsJCWl0NjUwNV9kcGNkX3dyaXRlKGl0NjUwNSwgRFBfVFJBSU5JTkdfUEFUVEVSTl9TRVQs Cj4gKwkJCQkgIERQX1RSQUlOSU5HX1BBVFRFUk5fRElTQUJMRSk7Cj4gKwkJcmV0ID0gaXQ2NTA1 X2xpbmtfc3RhcnRfc3RlcF90cmFpbihpdDY1MDUpOwo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVS KGRldiwgInN0ZXAgdHJhaW4gJXMsIHJldHJ5OiVkIHRpbWVzIiwKPiArCQkJCSAgICAgcmV0ID8g InBhc3MiIDogImZhaWxlZCIsIGkgKyAxKTsKPiArCQlpZiAocmV0KSB7Cj4gKwkJCWl0NjUwNV9s aW5rX3RyYWluX29rKGl0NjUwNSk7Cj4gKwkJCXJldHVybjsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJ RFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAidHJhaW5pbmcgZmFpbCIpOwo+ICsJaXQ2NTA1LT5s aW5rX3N0YXRlID0gTElOS19JRExFOwo+ICsJaXQ2NTA1X3ZpZGVvX3Jlc2V0KGl0NjUwNSk7Cj4g K30KPiArCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9saW5rX3RyYWluaW5nX3dvcmsoc3RydWN0IHdv cmtfc3RydWN0ICp3b3JrKQo+ICt7Cj4gKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBjb250YWlu ZXJfb2Yod29yaywgc3RydWN0IGl0NjUwNSwgbGlua193b3Jrcyk7Cj4gKwlzdHJ1Y3QgZGV2aWNl ICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsKPiArCWludCByZXQ7Cj4gKwo+ICsJRFJNX0RF Vl9ERUJVR19EUklWRVIoZGV2LCAiaXQ2NTA1LT5zaW5rX2NvdW50OiAlZCIsCj4gKwkJCSAgICAg aXQ2NTA1LT5zaW5rX2NvdW50KTsKPiArCj4gKwlpZiAoIWl0NjUwNV9nZXRfc2lua19ocGRfc3Rh dHVzKGl0NjUwNSkpCj4gKwkJcmV0dXJuOwo+ICsKPiArCWl0NjUwNV9saW5rX3RyYWluaW5nX3Nl dHVwKGl0NjUwNSk7Cj4gKwlpdDY1MDVfcmVzZXRfaGRjcChpdDY1MDUpOwo+ICsJaXQ2NTA1X2F1 eF9yZXNldChpdDY1MDUpOwo+ICsKPiArCWlmIChpdDY1MDUtPmF1dG9fdHJhaW5fcmV0cnkgPCAx KSB7Cj4gKwkJaXQ2NTA1X2xpbmtfc3RlcF90cmFpbl9wcm9jZXNzKGl0NjUwNSk7Cj4gKwkJcmV0 dXJuOwo+ICsJfQo+ICsKPiArCXJldCA9IGl0NjUwNV9saW5rX3N0YXJ0X2F1dG9fdHJhaW4oaXQ2 NTA1KTsKPiArCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImF1dG8gdHJhaW4gJXMsIGF1dG9f dHJhaW5fcmV0cnk6ICVkIiwKPiArCQkJICAgICByZXQgPyAicGFzcyIgOiAiZmFpbGVkIiwgaXQ2 NTA1LT5hdXRvX3RyYWluX3JldHJ5KTsKPiArCWl0NjUwNS0+YXV0b190cmFpbl9yZXRyeS0tOwo+ ICsKPiArCWlmIChyZXQpIHsKPiArCQlpdDY1MDVfbGlua190cmFpbl9vayhpdDY1MDUpOwo+ICsJ CXJldHVybjsKPiArCX0KPiArCj4gKwlpdDY1MDVfZHVtcChpdDY1MDUpOwo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCBpdDY1MDVfcGx1Z2dlZF9zdGF0dXNfdG9fY29kZWMoc3RydWN0IGl0NjUwNSAq aXQ2NTA1KQo+ICt7Cj4gKwllbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIHN0YXR1cyA9IGl0NjUw NS0+Y29ubmVjdG9yX3N0YXR1czsKPiArCj4gKwlpZiAoaXQ2NTA1LT5wbHVnZ2VkX2NiICYmIGl0 NjUwNS0+Y29kZWNfZGV2KQo+ICsJCWl0NjUwNS0+cGx1Z2dlZF9jYihpdDY1MDUtPmNvZGVjX2Rl diwKPiArCQkJCSAgIHN0YXR1cyA9PSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZCk7Cj4gK30K PiArCj4gK3N0YXRpYyBpbnQgaXQ2NTA1X3Byb2Nlc3NfaHBkX2lycShzdHJ1Y3QgaXQ2NTA1ICpp dDY1MDUpCj4gK3sKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2 Owo+ICsJaW50IHJldCwgZHBjZF9zaW5rX2NvdW50LCBkcF9pcnFfdmVjdG9yLCBic3RhdHVzOwo+ ICsJdTggbGlua19zdGF0dXNbRFBfTElOS19TVEFUVVNfU0laRV07Cj4gKwo+ICsJaWYgKCFpdDY1 MDVfZ2V0X3NpbmtfaHBkX3N0YXR1cyhpdDY1MDUpKSB7Cj4gKwkJRFJNX0RFVl9ERUJVR19EUklW RVIoZGV2LCAiSFBEX0lSUSBIUEQgbG93Iik7Cj4gKwkJaXQ2NTA1LT5zaW5rX2NvdW50ID0gMDsK PiArCQlyZXR1cm4gMDsKPiArCX0KPiArCj4gKwlyZXQgPSBpdDY1MDVfZHBjZF9yZWFkKGl0NjUw NSwgRFBfU0lOS19DT1VOVCk7Cj4gKwlpZiAocmV0IDwgMCkKPiArCQlyZXR1cm4gcmV0Owo+ICsK PiArCWRwY2Rfc2lua19jb3VudCA9IERQX0dFVF9TSU5LX0NPVU5UKHJldCk7Cj4gKwlEUk1fREVW X0RFQlVHX0RSSVZFUihkZXYsICJkcGNkX3NpbmtfY291bnQ6ICVkIGl0NjUwNS0+c2lua19jb3Vu dDolZCIsCj4gKwkJCSAgICAgZHBjZF9zaW5rX2NvdW50LCBpdDY1MDUtPnNpbmtfY291bnQpOwo+ ICsKPiArCWlmIChpdDY1MDUtPmJyYW5jaF9kZXZpY2UgJiYgZHBjZF9zaW5rX2NvdW50ICE9IGl0 NjUwNS0+c2lua19jb3VudCkgewo+ICsJCW1lbXNldChpdDY1MDUtPmRwY2QsIDAsIHNpemVvZihp dDY1MDUtPmRwY2QpKTsKPiArCQlpdDY1MDUtPnNpbmtfY291bnQgPSBkcGNkX3NpbmtfY291bnQ7 Cj4gKwkJa2ZyZWUoaXQ2NTA1LT5lZGlkKTsKPiArCQlpdDY1MDUtPmVkaWQgPSBOVUxMOwo+ICsJ CWl0NjUwNV9yZXNldF9sb2dpYyhpdDY1MDUpOwo+ICsJCWl0NjUwNV9pbnRfbWFza19lbmFibGUo aXQ2NTA1KTsKPiArCQlpdDY1MDVfaW5pdChpdDY1MDUpOwo+ICsJCXJldHVybiAwOwo+ICsJfQo+ ICsKPiArCWRwX2lycV92ZWN0b3IgPSBpdDY1MDVfZHBjZF9yZWFkKGl0NjUwNSwgRFBfREVWSUNF X1NFUlZJQ0VfSVJRX1ZFQ1RPUik7Cj4gKwlpZiAoZHBfaXJxX3ZlY3RvciA8IDApCj4gKwkJcmV0 dXJuIGRwX2lycV92ZWN0b3I7Cj4gKwo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiZHBf aXJxX3ZlY3RvciA9IDB4JTAyeCIsIGRwX2lycV92ZWN0b3IpOwo+ICsKPiArCWlmIChkcF9pcnFf dmVjdG9yICYgRFBfQ1BfSVJRKSB7Cj4gKwkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0hE Q1BfVFJJR0dFUiwgSERDUF9UUklHR0VSX0NQSVJRLAo+ICsJCQkJSERDUF9UUklHR0VSX0NQSVJR KTsKPiArCj4gKwkJYnN0YXR1cyA9IGl0NjUwNV9kcGNkX3JlYWQoaXQ2NTA1LCBEUF9BVVhfSERD UF9CU1RBVFVTKTsKPiArCQlpZiAoYnN0YXR1cyA8IDApCj4gKwkJCXJldHVybiBic3RhdHVzOwo+ ICsKPiArCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJCc3RhdHVzID0gMHglMDJ4IiwgYnN0 YXR1cyk7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gZHJtX2RwX2RwY2RfcmVhZF9saW5rX3N0YXR1cygm aXQ2NTA1LT5hdXgsIGxpbmtfc3RhdHVzKTsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJRFJNX0RF Vl9FUlJPUihkZXYsICJGYWlsIHRvIHJlYWQgbGluayBzdGF0dXMgcmV0OiAlZCIsCj4gKwkJCSAg ICAgIHJldCk7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlEUk1fREVWX0RFQlVHX0RS SVZFUihkZXYsICJsaW5rIHN0YXR1cyA9IDB4JSpwaCIsCj4gKwkJCSAgICAgKGludClBUlJBWV9T SVpFKGxpbmtfc3RhdHVzKSwgbGlua19zdGF0dXMpOwo+ICsKPiArCWlmICghZHJtX2RwX2NoYW5u ZWxfZXFfb2sobGlua19zdGF0dXMsIGl0NjUwNS0+bGFuZV9jb3VudCkpIHsKPiArCQlpdDY1MDUt PmF1dG9fdHJhaW5fcmV0cnkgPSBBVVRPX1RSQUlOX1JFVFJZOwo+ICsJCWl0NjUwNV92aWRlb19y ZXNldChpdDY1MDUpOwo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZCBpdDY1MDVfY2hlY2tfcmVnMDYoc3RydWN0IGl0NjUwNSAqaXQ2NTA1LCB1bnNpZ25lZCBp bnQgcmVnMDYpCj4gK3sKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ ZGV2Owo+ICsJYm9vbCBkYXRhOwo+ICsKPiArCWlmIChyZWcwNiAmIElOVF9IUERfQ0hBTkdFKSB7 Cj4gKwkJZGF0YSA9IGl0NjUwNV9nZXRfc2lua19ocGRfc3RhdHVzKGl0NjUwNSk7Cj4gKwkJRFJN X0RFVl9ERUJVR19EUklWRVIoZGV2LCAiaHBkIGNoYW5nZSBpbnRlcnJ1cHQsIGNoYW5nZSB0byAl cyIsCj4gKwkJCQkgICAgIGRhdGEgPyAiaGlnaCIgOiAibG93Iik7Cj4gKwkJaWYgKGl0NjUwNS0+ Y29ubmVjdG9yLmRldikKPiArCQkJZHJtX2hlbHBlcl9ocGRfaXJxX2V2ZW50KGl0NjUwNS0+Y29u bmVjdG9yLmRldik7Cj4gKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiaXQ2NTA1LT5zaW5r X2NvdW50OiAlZCIsCj4gKwkJCQkgICAgIGl0NjUwNS0+c2lua19jb3VudCk7Cj4gKwo+ICsJCWlm IChkYXRhKSB7Cj4gKwkJCXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmaXQ2NTA1LT53YWl0 X2VkaWRfY29tcGxldGUsCj4gKwkJCQkJCSAgICBtc2Vjc190b19qaWZmaWVzKDYwMDApKTsKPiAr CQkJaXQ2NTA1X2xhbmVfdGVybWluYXRpb25fb24oaXQ2NTA1KTsKPiArCQkJaXQ2NTA1X2xhbmVf cG93ZXJfb24oaXQ2NTA1KTsKPiArCj4gKwkJCS8qCj4gKwkJCSAqIGZvciBzb21lIGRvbmdsZSB3 aGljaCBpc3N1ZSBIUERfaXJxCj4gKwkJCSAqIHdoZW4gc2luayBjb3VudCBjaGFuZ2UgZnJvbSAg MC0+MQo+ICsJCQkgKiBpdDY1MDUgbm90IGFibGUgdG8gcmVjZWl2ZSBIUERfSVJRCj4gKwkJCSAq IGlmIEhXIG5ldmVyIGdvIGludG8gdHJhaW5pZyBkb25lCj4gKwkJCSAqLwo+ICsKPiArCQkJaWYg KGl0NjUwNS0+YnJhbmNoX2RldmljZSAmJiBpdDY1MDUtPnNpbmtfY291bnQgPT0gMCkKPiArCQkJ CXNjaGVkdWxlX3dvcmsoJml0NjUwNS0+bGlua193b3Jrcyk7Cj4gKwo+ICsJCQlpZiAoIWl0NjUw NV9nZXRfdmlkZW9fc3RhdHVzKGl0NjUwNSkpCj4gKwkJCQlpdDY1MDVfdmlkZW9fcmVzZXQoaXQ2 NTA1KTsKPiArCj4gKwkJCWl0NjUwNV9jYWxjX3ZpZGVvX2luZm8oaXQ2NTA1KTsKPiArCQl9IGVs c2Ugewo+ICsJCQlrZnJlZShpdDY1MDUtPmVkaWQpOwo+ICsJCQlpdDY1MDUtPmVkaWQgPSBOVUxM Owo+ICsJCQltZW1zZXQoaXQ2NTA1LT5kcGNkLCAwLCBzaXplb2YoaXQ2NTA1LT5kcGNkKSk7Cj4g Kwo+ICsJCQlpZiAoaXQ2NTA1LT5oZGNwX2Rlc2lyZWQpCj4gKwkJCQlpdDY1MDVfc3RvcF9oZGNw KGl0NjUwNSk7Cj4gKwo+ICsJCQlpdDY1MDVfdmlkZW9fZGlzYWJsZShpdDY1MDUpOwo+ICsJCQlp dDY1MDVfZGlzYWJsZV9hdWRpbyhpdDY1MDUpOwo+ICsJCQlpdDY1MDVfc3RvcF9saW5rX3RyYWlu KGl0NjUwNSk7Cj4gKwkJCWl0NjUwNV9sYW5lX29mZihpdDY1MDUpOwo+ICsJCQlyZXR1cm47Cj4g KwkJfQo+ICsJfQo+ICsKPiArCWlmIChyZWcwNiAmIElOVF9SRUNFSVZFX0hQRF9JUlEpIHsKPiAr CQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJocGRfaXJxIGludGVycnVwdCIpOwo+ICsKPiAr CQlpZiAoaXQ2NTA1X3Byb2Nlc3NfaHBkX2lycShpdDY1MDUpIDwgMCkKPiArCQkJRFJNX0RFVl9E RUJVR19EUklWRVIoZGV2LCAicHJvY2VzcyBocGRfaXJxIGZhaWwhIik7Cj4gKwl9Cj4gKwo+ICsJ aWYgKHJlZzA2ICYgSU5UX1NDRFRfQ0hBTkdFKSB7Cj4gKwkJZGF0YSA9IGl0NjUwNV9nZXRfdmlk ZW9fc3RhdHVzKGl0NjUwNSk7Cj4gKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAidmlkZW8g c3RhYmxlIGNoYW5nZSBpbnRlcnJ1cHQsICVzIiwKPiArCQkJCSAgICAgZGF0YSA/ICJzdGFibGUi IDogInVuc3RhYmxlIik7Cj4gKwkJaXQ2NTA1X2NhbGNfdmlkZW9faW5mbyhpdDY1MDUpOwo+ICsK PiArCQlpZiAoZGF0YSkKPiArCQkJc2NoZWR1bGVfd29yaygmaXQ2NTA1LT5saW5rX3dvcmtzKTsK PiArCX0KPiArCj4gKwlpZiAocmVnMDYgJiBJTlRfSERDUF9ET05FKSB7Cj4gKwkJRFJNX0RFVl9E RUJVR19EUklWRVIoZGV2LCAiaGRjcCBkb25lIGludGVycnVwdCIpOwo+ICsJCWl0NjUwNS0+aGRj cF9zdGF0dXMgPSBIRENQX0FVVEhfRE9ORTsKPiArCQlpdDY1MDVfc2hvd19oZGNwX2luZm8oaXQ2 NTA1KTsKPiArCX0KPiArCj4gKwlpZiAocmVnMDYgJiBJTlRfSERDUF9GQUlMKSB7Cj4gKwkJRFJN X0RFVl9ERUJVR19EUklWRVIoZGV2LCAiaGRjcCBmYWlsIGludGVycnVwdCIpOwo+ICsJCWl0NjUw NS0+aGRjcF9zdGF0dXMgPSBIRENQX0FVVEhfSURMRTsKPiArCQlpdDY1MDVfc2hvd19oZGNwX2lu Zm8oaXQ2NTA1KTsKPiArCQlpdDY1MDVfc3RhcnRfaGRjcChpdDY1MDUpOwo+ICsJfQo+ICt9Cj4g Kwo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfY2hlY2tfcmVnMDcoc3RydWN0IGl0NjUwNSAqaXQ2NTA1 LCB1bnNpZ25lZCBpbnQgcmVnMDcpCj4gK3sKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1 MDUtPmNsaWVudC0+ZGV2Owo+ICsKPiArCWlmIChyZWcwNyAmIElOVF9BVVhfQ01EX0ZBSUwpCj4g KwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiQVVYIFBDIFJlcXVlc3QgRmFpbCBJbnRlcnJ1 cHQiKTsKPiArCj4gKwlpZiAocmVnMDcgJiBJTlRfSERDUF9LU1ZfQ0hFQ0spIHsKPiArCQlEUk1f REVWX0RFQlVHX0RSSVZFUihkZXYsICJIRENQIGV2ZW50IEludGVycnVwdCIpOwo+ICsJCXNjaGVk dWxlX3dvcmsoJml0NjUwNS0+aGRjcF93YWl0X2tzdl9saXN0KTsKPiArCX0KPiArCj4gKwlpZiAo cmVnMDcgJiBJTlRfQVVESU9fRklGT19FUlJPUikgewo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVS KGRldiwgImF1ZGlvIGZpZm8gZXJyb3IgSW50ZXJydXB0Iik7Cj4gKwo+ICsJCWlmIChpdDY1MDVf YXVkaW9faW5wdXQoaXQ2NTA1KSkKPiArCQkJaXQ2NTA1X2VuYWJsZV9hdWRpbyhpdDY1MDUpOwo+ ICsJfQo+ICsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaXQ2NTA1X2NoZWNrX3JlZzA4KHN0cnVj dCBpdDY1MDUgKml0NjUwNSwgdW5zaWduZWQgaW50IHJlZzA4KQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2 aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsKPiArCj4gKwlpZiAocmVnMDggJiBJTlRf TElOS19UUkFJTl9GQUlMKSB7Cj4gKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAibGluayB0 cmFpbmluZyBmYWlsIGludGVycnVwdCIpOwo+ICsJCXNjaGVkdWxlX3dvcmsoJml0NjUwNS0+bGlu a193b3Jrcyk7Cj4gKwl9Cj4gKwo+ICsJaWYgKHJlZzA4ICYgSU5UX1ZJRF9GSUZPX0VSUk9SKSB7 Cj4gKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAidmlkZW8gZmlmbyBvdmVyZmxvdyBpbnRl cnJ1cHQiKTsKPiArCQlpdDY1MDUtPmF1dG9fdHJhaW5fcmV0cnkgPSBBVVRPX1RSQUlOX1JFVFJZ Owo+ICsJCWZsdXNoX3dvcmsoJml0NjUwNS0+bGlua193b3Jrcyk7Cj4gKwkJaXQ2NTA1X3N0b3Bf aGRjcChpdDY1MDUpOwo+ICsJCWl0NjUwNV92aWRlb19yZXNldChpdDY1MDUpOwo+ICsJfQo+ICsK PiArCWlmIChyZWcwOCAmIElOVF9JT19MQVRDSF9GSUZPX09WRVJGTE9XKSB7Cj4gKwkJRFJNX0RF Vl9ERUJVR19EUklWRVIoZGV2LCAiSU8gbGF0Y2ggZmlmbyBvdmVyZmxvdyBpbnRlcnJ1cHQiKTsK PiArCQlpdDY1MDUtPmF1dG9fdHJhaW5fcmV0cnkgPSBBVVRPX1RSQUlOX1JFVFJZOwo+ICsJCWZs dXNoX3dvcmsoJml0NjUwNS0+bGlua193b3Jrcyk7Cj4gKwkJaXQ2NTA1X3N0b3BfaGRjcChpdDY1 MDUpOwo+ICsJCWl0NjUwNV92aWRlb19yZXNldChpdDY1MDUpOwo+ICsJfQo+ICt9Cj4gKwo+ICtz dGF0aWMgaXJxcmV0dXJuX3QgaXQ2NTA1X2ludF90aHJlYWRlZF9oYW5kbGVyKGludCB1bnVzZWQs IHZvaWQgKmRhdGEpCj4gK3sKPiArCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGRhdGE7Cj4gKwlz dHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsKPiArCWludCByZWcwNiwg cmVnMDcsIHJlZzA4Owo+ICsKPiArCW1zbGVlcCgxMDApOwo+ICsJbXV0ZXhfbG9jaygmaXQ2NTA1 LT5leHRjb25fbG9jayk7Cj4gKwo+ICsJaWYgKGl0NjUwNS0+ZW5hYmxlX2Rydl9ob2xkIHx8ICFp dDY1MDUtPnBvd2VyZWQpCj4gKwkJZ290byB1bmxvY2s7Cj4gKwo+ICsJcmVnMDYgPSBpdDY1MDVf cmVhZChpdDY1MDUsIElOVF9TVEFUVVNfMDEpOwo+ICsJcmVnMDcgPSBpdDY1MDVfcmVhZChpdDY1 MDUsIElOVF9TVEFUVVNfMDIpOwo+ICsJcmVnMDggPSBpdDY1MDVfcmVhZChpdDY1MDUsIElOVF9T VEFUVVNfMDMpOwo+ICsKPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIElOVF9TVEFUVVNfMDEsIHJl ZzA2KTsKPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIElOVF9TVEFUVVNfMDIsIHJlZzA3KTsKPiAr CWl0NjUwNV93cml0ZShpdDY1MDUsIElOVF9TVEFUVVNfMDMsIHJlZzA4KTsKPiArCj4gKwlEUk1f REVWX0RFQlVHX0RSSVZFUihkZXYsICJyZWcwNiA9IDB4JTAyeCIsIHJlZzA2KTsKPiArCURSTV9E RVZfREVCVUdfRFJJVkVSKGRldiwgInJlZzA3ID0gMHglMDJ4IiwgcmVnMDcpOwo+ICsJRFJNX0RF Vl9ERUJVR19EUklWRVIoZGV2LCAicmVnMDggPSAweCUwMngiLCByZWcwOCk7Cj4gKwlpdDY1MDVf ZGVidWdfcHJpbnQoaXQ2NTA1LCBSRUdfU1lTVEVNX1NUUywgIiIpOwo+ICsKPiArCWlmIChyZWcw NiAhPSAwKQo+ICsJCWl0NjUwNV9jaGVja19yZWcwNihpdDY1MDUsIHJlZzA2KTsKPiArCj4gKwlp ZiAocmVnMDcgIT0gMCkKPiArCQlpdDY1MDVfY2hlY2tfcmVnMDcoaXQ2NTA1LCByZWcwNyk7Cj4g Kwo+ICsJaWYgKHJlZzA4ICE9IDApCj4gKwkJaXQ2NTA1X2NoZWNrX3JlZzA4KGl0NjUwNSwgcmVn MDgpOwoKClRoZSB3aG9sZSBpcnEgaGFuZGxlciBsb29rcyB1Z2x5LCB5b3UgY2FuIGNvbGxhdGUg YWxsIHRocmVlIElOVF9TVEFUVVNfKiAKcmVncyBpbnRvIG9uZSB2YWx1ZSBhbmQgdGhlbiBjaGVj ayB3aGljaCBiaXRzIGFyZSBvbiBhbmQgdGhlbiBjYWxsIAphcHJvcHJpYXRlIGlycSBoYW5kbGVy LgoKU2VlIFsxXSBmb3IgZXhhbXBsZS4KClsxXTogCmh0dHBzOi8vZWxpeGlyLmJvb3RsaW4uY29t L2xpbnV4L3Y0LjE1L3NvdXJjZS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3NpbC1zaWk4NjIwLmMj TDIwNTUKCgoKPiArCj4gK3VubG9jazoKPiArCW11dGV4X3VubG9jaygmaXQ2NTA1LT5leHRjb25f bG9jayk7Cj4gKwo+ICsJcmV0dXJuIElSUV9IQU5ETEVEOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50 IGl0NjUwNV9wb3dlcm9uKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkKPiArewo+ICsJc3RydWN0IGRl dmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7Cj4gKwlzdHJ1Y3QgaXQ2NTA1X3BsYXRm b3JtX2RhdGEgKnBkYXRhID0gJml0NjUwNS0+cGRhdGE7Cj4gKwlpbnQgZXJyOwo+ICsKPiArCWlm IChpdDY1MDUtPnBvd2VyZWQpIHsKPiArCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJpdDY1 MDUgYWxyZWFkeSBwb3dlcmVkIG9uIik7Cj4gKwkJcmV0dXJuIDA7Cj4gKwl9Cj4gKwo+ICsJaWYg KHBkYXRhLT5wd3IxOCkgewo+ICsJCWVyciA9IHJlZ3VsYXRvcl9lbmFibGUocGRhdGEtPnB3cjE4 KTsKPiArCQlpZiAoZXJyKSB7Cj4gKwkJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIkZhaWxl ZCB0byBlbmFibGUgVkREMTg6ICVkIiwKPiArCQkJCQkgICAgIGVycik7Cj4gKwkJCXJldHVybiBl cnI7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCWlmIChwZGF0YS0+b3ZkZCkgewo+ICsJCS8qIHRpbWUg aW50ZXJ2YWwgYmV0d2VlbiBJVkREIGFuZCBPVkREIGF0IGxlYXN0IGJlIDFtcyAqLwo+ICsJCXVz bGVlcF9yYW5nZSgxMDAwLCAyMDAwKTsKPiArCQllcnIgPSByZWd1bGF0b3JfZW5hYmxlKHBkYXRh LT5vdmRkKTsKPiArCQlpZiAoZXJyKSB7Cj4gKwkJCXJlZ3VsYXRvcl9kaXNhYmxlKHBkYXRhLT5w d3IxOCk7Cj4gKwkJCXJldHVybiBlcnI7Cj4gKwkJfQo+ICsJfQo+ICsJLyogdGltZSBpbnRlcnZh bCBiZXR3ZWVuIE9WREQgYW5kIFNZU1JTVE4gYXQgbGVhc3QgYmUgMTBtcyAqLwo+ICsJaWYgKHBk YXRhLT5ncGlvZF9yZXNldCkgewo+ICsJCXVzbGVlcF9yYW5nZSgxMDAwMCwgMjAwMDApOwo+ICsJ CWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChwZGF0YS0+Z3Bpb2RfcmVzZXQsIDApOwo+ICsJCXVz bGVlcF9yYW5nZSgxMDAwLCAyMDAwKTsKPiArCQlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAocGRh dGEtPmdwaW9kX3Jlc2V0LCAxKTsKPiArCQl1c2xlZXBfcmFuZ2UoMTAwMDAsIDIwMDAwKTsKPiAr CX0KPiArCj4gKwlpdDY1MDVfcmVzZXRfbG9naWMoaXQ2NTA1KTsKPiArCWl0NjUwNV9pbnRfbWFz a19lbmFibGUoaXQ2NTA1KTsKPiArCWl0NjUwNV9pbml0KGl0NjUwNSk7Cj4gKwlpdDY1MDVfbGFu ZV9vZmYoaXQ2NTA1KTsKPiArCj4gKwlpdDY1MDUtPnBvd2VyZWQgPSB0cnVlOwo+ICsKPiArCXJl dHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGl0NjUwNV9wb3dlcm9mZihzdHJ1Y3QgaXQ2 NTA1ICppdDY1MDUpCj4gK3sKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVu dC0+ZGV2Owo+ICsJc3RydWN0IGl0NjUwNV9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9ICZpdDY1MDUt PnBkYXRhOwo+ICsJaW50IGVycjsKPiArCj4gKwlpZiAoIWl0NjUwNS0+cG93ZXJlZCkgewo+ICsJ CURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInBvd2VyIGhhZCBiZWVuIGFscmVhZHkgb2ZmIik7 Cj4gKwkJcmV0dXJuIDA7Cj4gKwl9Cj4gKwo+ICsJaWYgKHBkYXRhLT5ncGlvZF9yZXNldCkKPiAr CQlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAocGRhdGEtPmdwaW9kX3Jlc2V0LCAwKTsKPiArCj4g KwlpZiAocGRhdGEtPnB3cjE4KSB7Cj4gKwkJZXJyID0gcmVndWxhdG9yX2Rpc2FibGUocGRhdGEt PnB3cjE4KTsKPiArCQlpZiAoZXJyKQo+ICsJCQlyZXR1cm4gZXJyOwo+ICsJfQo+ICsKPiArCWlm IChwZGF0YS0+b3ZkZCkgewo+ICsJCWVyciA9IHJlZ3VsYXRvcl9kaXNhYmxlKHBkYXRhLT5vdmRk KTsKPiArCQlpZiAoZXJyKQo+ICsJCQlyZXR1cm4gZXJyOwo+ICsJfQo+ICsKPiArCWl0NjUwNS0+ cG93ZXJlZCA9IGZhbHNlOwo+ICsJa2ZyZWUoaXQ2NTA1LT5lZGlkKTsKPiArCWl0NjUwNS0+ZWRp ZCA9IE5VTEw7Cj4gKwlpdDY1MDUtPnNpbmtfY291bnQgPSAwOwo+ICsKPiArCXJldHVybiAwOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBpdDY1MDUgKmNvbm5lY3Rvcl90b19pdDY1 MDUoc3RydWN0IGRybV9jb25uZWN0b3IgKmMpCj4gK3sKPiArCXJldHVybiBjb250YWluZXJfb2Yo Yywgc3RydWN0IGl0NjUwNSwgY29ubmVjdG9yKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBpdDY1 MDVfZ2V0X21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCj4gK3sKPiArCXN0 cnVjdCBpdDY1MDUgKml0NjUwNSA9IGNvbm5lY3Rvcl90b19pdDY1MDUoY29ubmVjdG9yKTsKPiAr CWludCBlcnIsIG51bV9tb2RlcyA9IDAsIGk7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2 NTA1LT5jbGllbnQtPmRldjsKPiArCj4gKwlpZiAoaXQ2NTA1LT5lZGlkKQo+ICsJCXJldHVybiBk cm1fYWRkX2VkaWRfbW9kZXMoY29ubmVjdG9yLCBpdDY1MDUtPmVkaWQpOwo+ICsKPiArCW11dGV4 X2xvY2soJml0NjUwNS0+bW9kZV9sb2NrKTsKPiArCXJlaW5pdF9jb21wbGV0aW9uKCZpdDY1MDUt PndhaXRfZWRpZF9jb21wbGV0ZSk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgewo+ ICsJCWlmICghaXQ2NTA1X2dldF9zaW5rX2hwZF9zdGF0dXMoaXQ2NTA1KSkKPiArCQkJZ290byB1 bmxvY2s7Cj4gKwo+ICsJCWl0NjUwNS0+ZWRpZCA9IGRybV9kb19nZXRfZWRpZCgmaXQ2NTA1LT5j b25uZWN0b3IsCj4gKwkJCQkJICAgICAgIGl0NjUwNV9nZXRfZWRpZF9ibG9jaywgaXQ2NTA1KTsK PiArCj4gKwkJaWYgKGl0NjUwNS0+ZWRpZCkKPiArCQkJYnJlYWs7Cj4gKwl9Cj4gKwlpZiAoIWl0 NjUwNS0+ZWRpZCkgewo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIHJlYWQgRURJ RCIpOwo+ICsJCW51bV9tb2RlcyA9IC1FSU87Cj4gKwkJZ290byB1bmxvY2s7Cj4gKwl9Cj4gKwo+ ICsJZXJyID0gZHJtX2Nvbm5lY3Rvcl91cGRhdGVfZWRpZF9wcm9wZXJ0eShjb25uZWN0b3IsIGl0 NjUwNS0+ZWRpZCk7Cj4gKwlpZiAoZXJyKSB7Cj4gKwkJRFJNX0RFVl9FUlJPUihkZXYsICJGYWls ZWQgdG8gdXBkYXRlIEVESUQgcHJvcGVydHk6ICVkIiwgZXJyKTsKPiArCQludW1fbW9kZXMgPSBl cnI7Cj4gKwkJZ290byB1bmxvY2s7Cj4gKwl9Cj4gKwo+ICsJbnVtX21vZGVzID0gZHJtX2FkZF9l ZGlkX21vZGVzKGNvbm5lY3RvciwgaXQ2NTA1LT5lZGlkKTsKPiArCj4gK3VubG9jazoKPiArCWNv bXBsZXRlKCZpdDY1MDUtPndhaXRfZWRpZF9jb21wbGV0ZSk7Cj4gKwltdXRleF91bmxvY2soJml0 NjUwNS0+bW9kZV9sb2NrKTsKPiArCj4gKwlyZXR1cm4gbnVtX21vZGVzOwo+ICt9Cj4gKwo+ICtz dGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzIGl0NjUwNV9jb25u ZWN0b3JfaGVscGVyX2Z1bmNzID0gewo+ICsJLmdldF9tb2RlcyA9IGl0NjUwNV9nZXRfbW9kZXMs Cj4gK307Cj4gKwo+ICtzdGF0aWMgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBpdDY1MDVfZGV0 ZWN0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCj4gKwkJCQkJICAgICAgIGJvb2wg Zm9yY2UpCj4gK3sKPiArCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGNvbm5lY3Rvcl90b19pdDY1 MDUoY29ubmVjdG9yKTsKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ ZGV2Owo+ICsJZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBzdGF0dXMgPSBjb25uZWN0b3Jfc3Rh dHVzX2Rpc2Nvbm5lY3RlZDsKPiArCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJpdDY1 MDUtPnNpbmtfY291bnQ6JWQgcG93ZXJlZDolZCIsCj4gKwkJCSAgICAgaXQ2NTA1LT5zaW5rX2Nv dW50LCBpdDY1MDUtPnBvd2VyZWQpOwo+ICsKPiArCW11dGV4X2xvY2soJml0NjUwNS0+bW9kZV9s b2NrKTsKPiArCj4gKwlpZiAoIWl0NjUwNS0+cG93ZXJlZCkKPiArCQlnb3RvIHVubG9jazsKPiAr Cj4gKwlpZiAoaXQ2NTA1LT5lbmFibGVfZHJ2X2hvbGQpIHsKPiArCQlzdGF0dXMgPSBpdDY1MDVf Z2V0X3NpbmtfaHBkX3N0YXR1cyhpdDY1MDUpID8KPiArCQkJCQljb25uZWN0b3Jfc3RhdHVzX2Nv bm5lY3RlZCA6Cj4gKwkJCQkJY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7Cj4gKwkJZ290 byB1bmxvY2s7Cj4gKwl9Cj4gKwo+ICsJaWYgKGl0NjUwNV9nZXRfc2lua19ocGRfc3RhdHVzKGl0 NjUwNSkpIHsKPiArCQlpdDY1MDVfYXV4X29uKGl0NjUwNSk7Cj4gKwkJaXQ2NTA1X2RybV9kcF9s aW5rX3Byb2JlKCZpdDY1MDUtPmF1eCwgJml0NjUwNS0+bGluayk7Cj4gKwkJaXQ2NTA1X2RybV9k cF9saW5rX3Bvd2VyX3VwKCZpdDY1MDUtPmF1eCwgJml0NjUwNS0+bGluayk7Cj4gKwkJaXQ2NTA1 LT5hdXRvX3RyYWluX3JldHJ5ID0gQVVUT19UUkFJTl9SRVRSWTsKPiArCj4gKwkJaWYgKGl0NjUw NS0+ZHBjZFswXSA9PSAwKSB7Cj4gKwkJCWl0NjUwNV9nZXRfZHBjZChpdDY1MDUsIERQX0RQQ0Rf UkVWLCBpdDY1MDUtPmRwY2QsCj4gKwkJCQkJQVJSQVlfU0laRShpdDY1MDUtPmRwY2QpKTsKPiAr CQkJaXQ2NTA1X3ZhcmlhYmxlX2NvbmZpZyhpdDY1MDUpOwo+ICsJCQlpdDY1MDVfcGFyc2VfbGlu a19jYXBhYmlsaXRpZXMoaXQ2NTA1KTsKPiArCQl9Cj4gKwo+ICsJCWl0NjUwNS0+c2lua19jb3Vu dCA9IERQX0dFVF9TSU5LX0NPVU5UKGl0NjUwNV9kcGNkX3JlYWQoaXQ2NTA1LAo+ICsJCQkJCQkg ICAgICAgRFBfU0lOS19DT1VOVCkpOwo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIml0 NjUwNS0+c2lua19jb3VudDolZCBicmFuY2g6JWQiLAo+ICsJCQkJICAgICBpdDY1MDUtPnNpbmtf Y291bnQsIGl0NjUwNS0+YnJhbmNoX2RldmljZSk7Cj4gKwo+ICsJCWlmIChpdDY1MDUtPmJyYW5j aF9kZXZpY2UpIHsKPiArCQkJc3RhdHVzID0gKGl0NjUwNS0+c2lua19jb3VudCAhPSAwKSA/Cj4g KwkJCQkgY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQgOgo+ICsJCQkJIGNvbm5lY3Rvcl9zdGF0 dXNfZGlzY29ubmVjdGVkOwo+ICsJCX0gZWxzZSB7Cj4gKwkJCXN0YXR1cyA9IGNvbm5lY3Rvcl9z dGF0dXNfY29ubmVjdGVkOwo+ICsJCX0KPiArCX0gZWxzZSB7Cj4gKwkJaXQ2NTA1LT5zaW5rX2Nv dW50ID0gMDsKPiArCQltZW1zZXQoaXQ2NTA1LT5kcGNkLCAwLCBzaXplb2YoaXQ2NTA1LT5kcGNk KSk7Cj4gKwl9Cj4gKwo+ICt1bmxvY2s6Cj4gKwlpZiAoaXQ2NTA1LT5jb25uZWN0b3Jfc3RhdHVz ICE9IHN0YXR1cykgewo+ICsJCWl0NjUwNS0+Y29ubmVjdG9yX3N0YXR1cyA9IHN0YXR1czsKPiAr CQlpdDY1MDVfcGx1Z2dlZF9zdGF0dXNfdG9fY29kZWMoaXQ2NTA1KTsKPiArCX0KPiArCj4gKwlt dXRleF91bmxvY2soJml0NjUwNS0+bW9kZV9sb2NrKTsKPiArCj4gKwlyZXR1cm4gc3RhdHVzOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfZnVuY3MgaXQ2NTA1 X2Nvbm5lY3Rvcl9mdW5jcyA9IHsKPiArCS5maWxsX21vZGVzID0gZHJtX2hlbHBlcl9wcm9iZV9z aW5nbGVfY29ubmVjdG9yX21vZGVzLAo+ICsJLmRldGVjdCA9IGl0NjUwNV9kZXRlY3QsCj4gKwku ZGVzdHJveSA9IGRybV9jb25uZWN0b3JfY2xlYW51cCwKPiArCS5yZXNldCA9IGRybV9hdG9taWNf aGVscGVyX2Nvbm5lY3Rvcl9yZXNldCwKPiArCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gZHJt X2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2R1cGxpY2F0ZV9zdGF0ZSwKPiArCS5hdG9taWNfZGVz dHJveV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kZXN0cm95X3N0YXRlLAo+ ICt9Owo+ICsKPiArc3RhdGljIGludCBpdDY1MDVfZXh0Y29uX25vdGlmaWVyKHN0cnVjdCBub3Rp Zmllcl9ibG9jayAqc2VsZiwKPiArCQkJCSAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRy KQo+ICt7Cj4gKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBjb250YWluZXJfb2Yoc2VsZiwgc3Ry dWN0IGl0NjUwNSwgZXZlbnRfbmIpOwo+ICsKPiArCXNjaGVkdWxlX3dvcmsoJml0NjUwNS0+ZXh0 Y29uX3dxKTsKPiArCXJldHVybiBOT1RJRllfRE9ORTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQg aXQ2NTA1X2V4dGNvbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKPiArewo+ICsJc3Ry dWN0IGl0NjUwNSAqaXQ2NTA1ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpdDY1MDUsIGV4 dGNvbl93cSk7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsK PiArCWludCBzdGF0ZSA9IGV4dGNvbl9nZXRfc3RhdGUoaXQ2NTA1LT5leHRjb24sIEVYVENPTl9E SVNQX0RQKTsKPiArCXVuc2lnbmVkIGludCBwd3JvZmZyZXRyeSA9IDA7Cj4gKwo+ICsJaWYgKGl0 NjUwNS0+ZW5hYmxlX2Rydl9ob2xkKQo+ICsJCXJldHVybjsKPiArCj4gKwltdXRleF9sb2NrKCZp dDY1MDUtPmV4dGNvbl9sb2NrKTsKPiArCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJF WFRDT05fRElTUF9EUCA9IDB4JTAyeCIsIHN0YXRlKTsKPiArCWlmIChzdGF0ZSA+IDApIHsKPiAr CQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJzdGFydCB0byBwb3dlciBvbiIpOwo+ICsJCW1z bGVlcCgxMDApOwo+ICsJCWl0NjUwNV9wb3dlcm9uKGl0NjUwNSk7Cj4gKwl9IGVsc2Ugewo+ICsJ CURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInN0YXJ0IHRvIHBvd2VyIG9mZiIpOwo+ICsJCXdo aWxlIChpdDY1MDVfcG93ZXJvZmYoaXQ2NTA1KSAmJiBwd3JvZmZyZXRyeSsrIDwgNSkgewo+ICsJ CQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJwb3dlciBvZmYgZmFpbCAlZCB0aW1lcyIsCj4g KwkJCQkJICAgICBwd3JvZmZyZXRyeSk7Cj4gKwkJfQo+ICsKPiArCQlkcm1faGVscGVyX2hwZF9p cnFfZXZlbnQoaXQ2NTA1LT5jb25uZWN0b3IuZGV2KTsKPiArCQltZW1zZXQoaXQ2NTA1LT5kcGNk LCAwLCBzaXplb2YoaXQ2NTA1LT5kcGNkKSk7Cj4gKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2 LCAicG93ZXIgb2ZmIGl0NjUwNSBzdWNjZXNzISIpOwo+ICsJfQo+ICsKPiArCW11dGV4X3VubG9j aygmaXQ2NTA1LT5leHRjb25fbG9jayk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaXQ2NTA1X3Vz ZV9ub3RpZmllcl9tb2R1bGUoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQo+ICt7Cj4gKwlpbnQgcmV0 Owo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7Cj4gKwo+ICsJ aXQ2NTA1LT5ldmVudF9uYi5ub3RpZmllcl9jYWxsID0gaXQ2NTA1X2V4dGNvbl9ub3RpZmllcjsK PiArCUlOSVRfV09SSygmaXQ2NTA1LT5leHRjb25fd3EsIGl0NjUwNV9leHRjb25fd29yayk7Cj4g KwlyZXQgPSBkZXZtX2V4dGNvbl9yZWdpc3Rlcl9ub3RpZmllcigmaXQ2NTA1LT5jbGllbnQtPmRl diwKPiArCQkJCQkgICAgaXQ2NTA1LT5leHRjb24sIEVYVENPTl9ESVNQX0RQLAo+ICsJCQkJCSAg ICAmaXQ2NTA1LT5ldmVudF9uYik7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJRFJNX0RFVl9FUlJPUihk ZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgbm90aWZpZXIgZm9yIERQIik7Cj4gKwkJcmV0dXJuIHJl dDsKPiArCX0KPiArCj4gKwlzY2hlZHVsZV93b3JrKCZpdDY1MDUtPmV4dGNvbl93cSk7Cj4gKwo+ ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9yZW1vdmVfbm90aWZp ZXJfbW9kdWxlKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkKPiArewo+ICsJaWYgKGl0NjUwNS0+ZXh0 Y29uKSB7Cj4gKwkJZGV2bV9leHRjb25fdW5yZWdpc3Rlcl9ub3RpZmllcigmaXQ2NTA1LT5jbGll bnQtPmRldiwKPiArCQkJCQkJaXQ2NTA1LT5leHRjb24sCUVYVENPTl9ESVNQX0RQLAo+ICsJCQkJ CQkmaXQ2NTA1LT5ldmVudF9uYik7Cj4gKwo+ICsJCWZsdXNoX3dvcmsoJml0NjUwNS0+ZXh0Y29u X3dxKTsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQgX19tYXliZV91bnVzZWQgaXQ2NTA1 X2RlbGF5ZWRfYXVkaW8oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQo+ICt7Cj4gKwlzdHJ1Y3Qg aXQ2NTA1ICppdDY1MDUgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGl0NjUwNSwKPiArCQkJ CQkgICAgIGRlbGF5ZWRfYXVkaW8ud29yayk7Cj4gKwo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIo Jml0NjUwNS0+Y2xpZW50LT5kZXYsICJzdGFydCIpOwo+ICsKPiArCWlmICghaXQ2NTA1LT5wb3dl cmVkKQo+ICsJCXJldHVybjsKPiArCj4gKwlpZiAoIWl0NjUwNS0+ZW5hYmxlX2Rydl9ob2xkKQo+ ICsJCWl0NjUwNV9lbmFibGVfYXVkaW8oaXQ2NTA1KTsKPiArfQo+ICsKPiArc3RhdGljIGludCBf X21heWJlX3VudXNlZCBpdDY1MDVfYXVkaW9fc2V0dXBfaHdfcGFyYW1zKHN0cnVjdCBpdDY1MDUg Kml0NjUwNSwKPiArCQkJCQlzdHJ1Y3QgaGRtaV9jb2RlY19wYXJhbXMgKnBhcmFtcykKPiArewo+ ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7Cj4gKwlpbnQgaSA9 IDA7Cj4gKwo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiJXMgJWQgSHosICVkIGJpdCwg JWQgY2hhbm5lbHNcbiIsIF9fZnVuY19fLAo+ICsJCQkgICAgIHBhcmFtcy0+c2FtcGxlX3JhdGUs IHBhcmFtcy0+c2FtcGxlX3dpZHRoLAo+ICsJCQkgICAgIHBhcmFtcy0+Y2VhLmNoYW5uZWxzKTsK PiArCj4gKwlpZiAoIWl0NjUwNS0+YnJpZGdlLmVuY29kZXIpCj4gKwkJcmV0dXJuIC1FTk9ERVY7 Cj4gKwo+ICsJaWYgKHBhcmFtcy0+Y2VhLmNoYW5uZWxzIDw9IDEgfHwgcGFyYW1zLT5jZWEuY2hh bm5lbHMgPiA4KSB7Cj4gKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiY2hhbm5lbCBudW1i ZXI6ICVkIG5vdCBzdXBwb3J0IiwKPiArCQkJCSAgICAgaXQ2NTA1LT5hdWRpby5jaGFubmVsX2Nv dW50KTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwlpdDY1MDUtPmF1ZGlvLmNo YW5uZWxfY291bnQgPSBwYXJhbXMtPmNlYS5jaGFubmVsczsKPiArCj4gKwl3aGlsZSAoaSA8IEFS UkFZX1NJWkUoYXVkaW9fc2FtcGxlX3JhdGVfbWFwKSAmJgo+ICsJICAgICAgIHBhcmFtcy0+c2Ft cGxlX3JhdGUgIT0KPiArCQkgICAgICAgYXVkaW9fc2FtcGxlX3JhdGVfbWFwW2ldLnNhbXBsZV9y YXRlX3ZhbHVlKSB7Cj4gKwkJaSsrOwo+ICsJfQo+ICsJaWYgKGkgPT0gQVJSQVlfU0laRShhdWRp b19zYW1wbGVfcmF0ZV9tYXApKSB7Cj4gKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAic2Ft cGxlIHJhdGU6ICVkIEh6IG5vdCBzdXBwb3J0IiwKPiArCQkJCSAgICAgcGFyYW1zLT5zYW1wbGVf cmF0ZSk7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwlpdDY1MDUtPmF1ZGlvLnNhbXBs ZV9yYXRlID0gYXVkaW9fc2FtcGxlX3JhdGVfbWFwW2ldLnJhdGU7Cj4gKwo+ICsJc3dpdGNoIChw YXJhbXMtPnNhbXBsZV93aWR0aCkgewo+ICsJY2FzZSAxNjoKPiArCQlpdDY1MDUtPmF1ZGlvLndv cmRfbGVuZ3RoID0gV09SRF9MRU5HVEhfMTZCSVQ7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIDE4Ogo+ ICsJCWl0NjUwNS0+YXVkaW8ud29yZF9sZW5ndGggPSBXT1JEX0xFTkdUSF8xOEJJVDsKPiArCQli cmVhazsKPiArCWNhc2UgMjA6Cj4gKwkJaXQ2NTA1LT5hdWRpby53b3JkX2xlbmd0aCA9IFdPUkRf TEVOR1RIXzIwQklUOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSAyNDoKPiArCWNhc2UgMzI6Cj4gKwkJ aXQ2NTA1LT5hdWRpby53b3JkX2xlbmd0aCA9IFdPUkRfTEVOR1RIXzI0QklUOwo+ICsJCWJyZWFr Owo+ICsJZGVmYXVsdDoKPiArCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJ3b3JkbGVuZ3Ro OiAlZCBiaXQgbm90IHN1cHBvcnQiLAo+ICsJCQkJICAgICBwYXJhbXMtPnNhbXBsZV93aWR0aCk7 Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4g K3N0YXRpYyB2b2lkIF9fbWF5YmVfdW51c2VkIGl0NjUwNV9hdWRpb19zaHV0ZG93bihzdHJ1Y3Qg ZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCj4gK3sKPiArCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9 IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+ICsKPiArCWlmIChpdDY1MDUtPnBvd2VyZWQpCj4gKwkJ aXQ2NTA1X2Rpc2FibGVfYXVkaW8oaXQ2NTA1KTsKPiArfQo+ICsKPiArc3RhdGljIGludCBfX21h eWJlX3VudXNlZCBpdDY1MDVfYXVkaW9faG9va19wbHVnZ2VkX2NiKHN0cnVjdCBkZXZpY2UgKmRl diwKPiArCQkJCQkJICAgICAgIHZvaWQgKmRhdGEsCj4gKwkJCQkJCSAgICAgICBoZG1pX2NvZGVj X3BsdWdnZWRfY2IgZm4sCj4gKwkJCQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlICpjb2RlY19kZXYp Cj4gK3sKPiArCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGRhdGE7Cj4gKwo+ICsJaXQ2NTA1LT5w bHVnZ2VkX2NiID0gZm47Cj4gKwlpdDY1MDUtPmNvZGVjX2RldiA9IGNvZGVjX2RldjsKPiArCWl0 NjUwNV9wbHVnZ2VkX3N0YXR1c190b19jb2RlYyhpdDY1MDUpOwo+ICsKPiArCXJldHVybiAwOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBpdDY1MDUgKmJyaWRnZV90b19pdDY1MDUo c3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKPiArewo+ICsJcmV0dXJuIGNvbnRhaW5lcl9vZihi cmlkZ2UsIHN0cnVjdCBpdDY1MDUsIGJyaWRnZSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGl0 NjUwNV9icmlkZ2VfbW9kZV9zZXQoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKPiArCQkJCSAg IGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAo+ICsJCQkJICAgY29uc3Qgc3Ry dWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUpCj4gK3sKPiArCXN0cnVjdCBpdDY1 MDUgKml0NjUwNSA9IGJyaWRnZV90b19pdDY1MDUoYnJpZGdlKTsKPiArCXN0cnVjdCBoZG1pX2F2 aV9pbmZvZnJhbWUgZnJhbWU7Cj4gKwlpbnQgZXJyOwo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0g Jml0NjUwNS0+Y2xpZW50LT5kZXY7Cj4gKwo+ICsJaWYgKFdBUk5fT04oIWl0NjUwNS0+cG93ZXJl ZCkpCj4gKwkJcmV0dXJuOwo+ICsKPiArCW11dGV4X2xvY2soJml0NjUwNS0+bW9kZV9sb2NrKTsK PiArCj4gKwllcnIgPSBkcm1faGRtaV9hdmlfaW5mb2ZyYW1lX2Zyb21fZGlzcGxheV9tb2RlKCZm cmFtZSwKPiArCQkJCQkJICAgICAgICZpdDY1MDUtPmNvbm5lY3RvciwKPiArCQkJCQkJICAgICAg IGFkanVzdGVkX21vZGUpOwo+ICsJaWYgKGVycikgewo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAi RmFpbGVkIHRvIHNldHVwIEFWSSBpbmZvZnJhbWU6ICVkIiwgZXJyKTsKPiArCQlnb3RvIHVubG9j azsKPiArCX0KPiArCj4gKwlpdDY1MDVfdXBkYXRlX3ZpZGVvX3BhcmFtZXRlcihpdDY1MDUsIGFk anVzdGVkX21vZGUpOwo+ICsKPiArCWVyciA9IGl0NjUwNV9zZW5kX3ZpZGVvX2luZm9mcmFtZShp dDY1MDUsICZmcmFtZSk7Cj4gKwlpZiAoZXJyKQo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAiRmFp bGVkIHRvIHNlbmQgQVZJIGluZm9mcmFtZTogJWQiLCBlcnIpOwo+ICsKPiArdW5sb2NrOgo+ICsJ bXV0ZXhfdW5sb2NrKCZpdDY1MDUtPm1vZGVfbG9jayk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg aXQ2NTA1X2JyaWRnZV9hdHRhY2goc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKPiArCQkJCWVu dW0gZHJtX2JyaWRnZV9hdHRhY2hfZmxhZ3MgZmxhZ3MpCj4gK3sKPiArCXN0cnVjdCBpdDY1MDUg Kml0NjUwNSA9IGJyaWRnZV90b19pdDY1MDUoYnJpZGdlKTsKPiArCXN0cnVjdCBkZXZpY2UgKmRl diA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Owo+ICsJaW50IGVycjsKPiArCj4gKwlpZiAoZmxhZ3Mg JiBEUk1fQlJJREdFX0FUVEFDSF9OT19DT05ORUNUT1IpIHsKPiArCQlEUk1fRVJST1IoIkZpeCBi cmlkZ2UgZHJpdmVyIHRvIG1ha2UgY29ubmVjdG9yIG9wdGlvbmFsISIpOwo+ICsJCXJldHVybiAw OwpFcnJvciBzaG91bGQgYmUgcmV0dXJuZWQgaGVyZQo+ICsJfQo+ICsKPiArCWlmICghYnJpZGdl LT5lbmNvZGVyKSB7Cj4gKwkJRFJNX0RFVl9FUlJPUihkZXYsICJQYXJlbnQgZW5jb2RlciBvYmpl Y3Qgbm90IGZvdW5kIik7Cj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gKwl9Cj4gKwo+ICsJZXJyID0g ZHJtX2Nvbm5lY3Rvcl9pbml0KGJyaWRnZS0+ZGV2LCAmaXQ2NTA1LT5jb25uZWN0b3IsCj4gKwkJ CQkgJml0NjUwNV9jb25uZWN0b3JfZnVuY3MsCj4gKwkJCQkgRFJNX01PREVfQ09OTkVDVE9SX0Rp c3BsYXlQb3J0KTsKPiArCWlmIChlcnIgPCAwKSB7Cj4gKwkJRFJNX0RFVl9FUlJPUihkZXYsICJG YWlsZWQgdG8gaW5pdGlhbGl6ZSBjb25uZWN0b3I6ICVkIiwgZXJyKTsKPiArCQlyZXR1cm4gZXJy Owo+ICsJfQo+ICsKPiArCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZCgmaXQ2NTA1LT5jb25uZWN0 b3IsCj4gKwkJCQkgJml0NjUwNV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKPiArCj4gKwlpdDY1 MDUtPmNvbm5lY3Rvci5wb2xsZWQgPSBEUk1fQ09OTkVDVE9SX1BPTExfSFBEOwo+ICsKPiArCWVy ciA9IGRybV9jb25uZWN0b3JfYXR0YWNoX2VuY29kZXIoJml0NjUwNS0+Y29ubmVjdG9yLCBicmlk Z2UtPmVuY29kZXIpOwo+ICsJaWYgKGVyciA8IDApIHsKPiArCQlEUk1fREVWX0VSUk9SKGRldiwg IkZhaWxlZCB0byBsaW5rIHVwIGNvbm5lY3RvciB0byBlbmNvZGVyOiAlZCIsCj4gKwkJCSAgICAg IGVycik7Cj4gKwkJZ290byBjbGVhbnVwX2Nvbm5lY3RvcjsKPiArCX0KPiArCj4gKwllcnIgPSBk cm1fY29ubmVjdG9yX3JlZ2lzdGVyKCZpdDY1MDUtPmNvbm5lY3Rvcik7Cj4gKwlpZiAoZXJyIDwg MCkgewo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNvbm5lY3Rv cjogJWQiLCBlcnIpOwo+ICsJCWdvdG8gY2xlYW51cF9jb25uZWN0b3I7Cj4gKwl9Cj4gKwo+ICsJ aWYgKGl0NjUwNS0+ZXh0Y29uKSB7Cj4gKwkJZXJyID0gaXQ2NTA1X3VzZV9ub3RpZmllcl9tb2R1 bGUoaXQ2NTA1KTsKPiArCQlpZiAoZXJyIDwgMCkgewo+ICsJCQlkcm1fY29ubmVjdG9yX3VucmVn aXN0ZXIoJml0NjUwNS0+Y29ubmVjdG9yKTsKPiArCQkJZ290byBjbGVhbnVwX2Nvbm5lY3RvcjsK PiArCQl9Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gKwo+ICtjbGVhbnVwX2Nvbm5lY3RvcjoK PiArCWRybV9jb25uZWN0b3JfY2xlYW51cCgmaXQ2NTA1LT5jb25uZWN0b3IpOwo+ICsJcmV0dXJu IGVycjsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaXQ2NTA1X2JyaWRnZV9kZXRhY2goc3RydWN0 IGRybV9icmlkZ2UgKmJyaWRnZSkKPiArewo+ICsJc3RydWN0IGl0NjUwNSAqaXQ2NTA1ID0gYnJp ZGdlX3RvX2l0NjUwNShicmlkZ2UpOwo+ICsKPiArCWZsdXNoX3dvcmsoJml0NjUwNS0+bGlua193 b3Jrcyk7Cj4gKwlpdDY1MDVfcmVtb3ZlX25vdGlmaWVyX21vZHVsZShpdDY1MDUpOwo+ICsJZHJt X2Nvbm5lY3Rvcl91bnJlZ2lzdGVyKCZpdDY1MDUtPmNvbm5lY3Rvcik7Cj4gKwlkcm1fY29ubmVj dG9yX2NsZWFudXAoJml0NjUwNS0+Y29ubmVjdG9yKTsKPiArfQo+ICsKPiArc3RhdGljIGVudW0g ZHJtX21vZGVfc3RhdHVzCj4gK2l0NjUwNV9icmlkZ2VfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2Jy aWRnZSAqYnJpZGdlLAo+ICsJCQkgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X2luZm8gKmluZm8s Cj4gKwkJCSBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKPiArewo+ICsJc3Ry dWN0IGl0NjUwNSAqaXQ2NTA1ID0gYnJpZGdlX3RvX2l0NjUwNShicmlkZ2UpOwo+ICsKPiArCWlm IChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFKQo+ICsJCXJldHVybiBNT0RF X05PX0lOVEVSTEFDRTsKPiArCj4gKwlpZiAobW9kZS0+Y2xvY2sgPiBEUElfUElYRUxfQ0xLX01B WCkKPiArCQlyZXR1cm4gTU9ERV9DTE9DS19ISUdIOwo+ICsKPiArCWl0NjUwNS0+dmlkZW9faW5m by5jbG9jayA9IG1vZGUtPmNsb2NrOwo+ICsKPiArCXJldHVybiBNT0RFX09LOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgdm9pZCBpdDY1MDVfYnJpZGdlX2VuYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJp ZGdlKQo+ICt7Cj4gKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBicmlkZ2VfdG9faXQ2NTA1KGJy aWRnZSk7Cj4gKwo+ICsJaXQ2NTA1X2ludF9tYXNrX2VuYWJsZShpdDY1MDUpOwo+ICsJaXQ2NTA1 X3ZpZGVvX3Jlc2V0KGl0NjUwNSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9icmlk Z2VfZGlzYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQo+ICt7Cj4gKwlzdHJ1Y3QgaXQ2 NTA1ICppdDY1MDUgPSBicmlkZ2VfdG9faXQ2NTA1KGJyaWRnZSk7Cj4gKwo+ICsJaWYgKGl0NjUw NS0+cG93ZXJlZCkKPiArCQlpdDY1MDVfdmlkZW9fZGlzYWJsZShpdDY1MDUpOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cwo+ICtpdDY1MDVfYnJpZGdlX2RldGVj dChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQo+ICt7Cj4gKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1 MDUgPSBicmlkZ2VfdG9faXQ2NTA1KGJyaWRnZSk7Cj4gKwo+ICsJcmV0dXJuIGl0NjUwNV9kZXRl Y3QoJml0NjUwNS0+Y29ubmVjdG9yLCAwKTsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCBlZGlk ICppdDY1MDVfYnJpZGdlX2dldF9lZGlkKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCj4gKwkJ CQkJICAgc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKPiArewo+ICsJc3RydWN0IGl0 NjUwNSAqaXQ2NTA1ID0gYnJpZGdlX3RvX2l0NjUwNShicmlkZ2UpOwo+ICsJc3RydWN0IGRldmlj ZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7Cj4gKwlzdHJ1Y3QgZWRpZCAqZWRpZDsKPiAr Cj4gKwllZGlkID0gZHJtX2RvX2dldF9lZGlkKCZpdDY1MDUtPmNvbm5lY3RvciwgaXQ2NTA1X2dl dF9lZGlkX2Jsb2NrLAo+ICsJCQkgICAgICAgaXQ2NTA1KTsKPiArCj4gKwlpZiAoIWVkaWQpIHsK PiArCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJmYWlsZWQgdG8gZ2V0IGVkaWQhIik7Cj4g KwkJcmV0dXJuIE5VTEw7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIGVkaWQ7Cj4gK30KPiArCj4gK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2JyaWRnZV9mdW5jcyBpdDY1MDVfYnJpZGdlX2Z1bmNzID0g ewo+ICsJLmF0dGFjaCA9IGl0NjUwNV9icmlkZ2VfYXR0YWNoLAo+ICsJLmRldGFjaCA9IGl0NjUw NV9icmlkZ2VfZGV0YWNoLAo+ICsJLm1vZGVfdmFsaWQgPSBpdDY1MDVfYnJpZGdlX21vZGVfdmFs aWQsCj4gKwkubW9kZV9zZXQgPSBpdDY1MDVfYnJpZGdlX21vZGVfc2V0LAo+ICsJLmVuYWJsZSA9 IGl0NjUwNV9icmlkZ2VfZW5hYmxlLAo+ICsJLmRpc2FibGUgPSBpdDY1MDVfYnJpZGdlX2Rpc2Fi bGUsCj4gKwkuZGV0ZWN0ID0gaXQ2NTA1X2JyaWRnZV9kZXRlY3QsCj4gKwkuZ2V0X2VkaWQgPSBp dDY1MDVfYnJpZGdlX2dldF9lZGlkLAo+ICt9Owo+ICsKPiArI2lmZGVmIENPTkZJR19QTV9TTEVF UAo+ICsKPiArc3RhdGljIGludCBpdDY1MDVfYnJpZGdlX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpk ZXYpCj4gK3sKPiArCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYp Owo+ICsKPiArCXJldHVybiBpdDY1MDVfcG93ZXJvbihpdDY1MDUpOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgaW50IGl0NjUwNV9icmlkZ2Vfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gK3sKPiAr CXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+ICsKPiArCXJl dHVybiBpdDY1MDVfcG93ZXJvZmYoaXQ2NTA1KTsKPiArfQo+ICsKPiArc3RhdGljIFNJTVBMRV9E RVZfUE1fT1BTKGl0NjUwNV9icmlkZ2VfcG1fb3BzLCBpdDY1MDVfYnJpZGdlX3N1c3BlbmQsCj4g KwkJCSBpdDY1MDVfYnJpZGdlX3Jlc3VtZSk7Cj4gKwo+ICsjZW5kaWYKPiArCj4gK3N0YXRpYyBp bnQgaXQ2NTA1X2luaXRfcGRhdGEoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQo+ICt7Cj4gKwlzdHJ1 Y3QgaXQ2NTA1X3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gJml0NjUwNS0+cGRhdGE7Cj4gKwlzdHJ1 Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsKPiArCj4gKwkvKiAxLjBWIGRp Z2l0YWwgY29yZSBwb3dlciByZWd1bGF0b3IgICovCj4gKwlwZGF0YS0+cHdyMTggPSBkZXZtX3Jl Z3VsYXRvcl9nZXQoZGV2LCAicHdyMTgiKTsKPiArCWlmIChJU19FUlIocGRhdGEtPnB3cjE4KSkg ewo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAicHdyMTggcmVndWxhdG9yIG5vdCBmb3VuZCIpOwo+ ICsJCXJldHVybiBQVFJfRVJSKHBkYXRhLT5wd3IxOCk7Cj4gKwl9Cj4gKwo+ICsJcGRhdGEtPm92 ZGQgPSBkZXZtX3JlZ3VsYXRvcl9nZXQoZGV2LCAib3ZkZCIpOwo+ICsJaWYgKElTX0VSUihwZGF0 YS0+b3ZkZCkpIHsKPiArCQlEUk1fREVWX0VSUk9SKGRldiwgIm92ZGQgcmVndWxhdG9yIG5vdCBm b3VuZCIpOwo+ICsJCXJldHVybiBQVFJfRVJSKHBkYXRhLT5vdmRkKTsKPiArCX0KPiArCj4gKwlw ZGF0YS0+Z3Bpb2RfcmVzZXQgPSBkZXZtX2dwaW9kX2dldChkZXYsICJyZXNldCIsIEdQSU9EX09V VF9ISUdIKTsKPiArCWlmIChJU19FUlIocGRhdGEtPmdwaW9kX3Jlc2V0KSkgewo+ICsJCURSTV9E RVZfRVJST1IoZGV2LCAiZ3Bpb2RfcmVzZXQgZ3BpbyBub3QgZm91bmQiKTsKPiArCQlyZXR1cm4g UFRSX0VSUihwZGF0YS0+Z3Bpb2RfcmVzZXQpOwo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfcGFyc2VfZHQoc3RydWN0IGl0NjUwNSAqaXQ2NTA1 KQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsKPiAr CXUzMiAqYWZlX3NldHRpbmcgPSAmaXQ2NTA1LT5hZmVfc2V0dGluZzsKPiArCj4gKwlpdDY1MDUt PmxhbmVfc3dhcF9kaXNhYmxlZCA9Cj4gKwkJZGV2aWNlX3Byb3BlcnR5X3JlYWRfYm9vbChkZXYs ICJuby1sYW5lc3dhcCIpOwo+ICsKPiArCWlmIChpdDY1MDUtPmxhbmVfc3dhcF9kaXNhYmxlZCkK PiArCQlpdDY1MDUtPmxhbmVfc3dhcCA9IGZhbHNlOwo+ICsKPiArCWlmIChkZXZpY2VfcHJvcGVy dHlfcmVhZF91MzIoZGV2LCAiYWZlLXNldHRpbmciLCBhZmVfc2V0dGluZykgPT0gMCkgewo+ICsJ CWlmICgqYWZlX3NldHRpbmcgPj0gQVJSQVlfU0laRShhZmVfc2V0dGluZ190YWJsZSkpIHsKPiAr CQkJRFJNX0RFVl9FUlJPUihkZXYsICJhZmUgc2V0dGluZyBlcnJvciwgdXNlIGRlZmF1bHQiKTsK PiArCQkJKmFmZV9zZXR0aW5nID0gMDsKPiArCQl9Cj4gKwl9IGVsc2Ugewo+ICsJCSphZmVfc2V0 dGluZyA9IDA7Cj4gKwl9Cj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJ1c2luZyBhZmVf c2V0dGluZzogJWQiLCAqYWZlX3NldHRpbmcpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3NpemVfdCBw cmludF90aW1pbmdfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCj4gKwkJCQkgc3RydWN0IGRldmlj ZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKPiArewo+ICsJc3RydWN0IGl0NjUwNSAqaXQ2 NTA1ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4gKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAq dmlkID0gJml0NjUwNS0+dmlkZW9faW5mbzsKPiArCWNoYXIgKnN0ciA9IGJ1ZiwgKmVuZCA9IGJ1 ZiArIFBBR0VfU0laRTsKPiArCj4gKwlpdDY1MDVfY2FsY192aWRlb19pbmZvKGl0NjUwNSk7Cj4g KwlzdHIgKz0gc2NucHJpbnRmKHN0ciwgZW5kIC0gc3RyLCAiLS0tdmlkZW8gdGltaW5nLS0tXG4i KTsKPiArCXN0ciArPSBzY25wcmludGYoc3RyLCBlbmQgLSBzdHIsICJQQ0xLOiVkLiUwM2RNSHpc biIsCj4gKwkJCSB2aWQtPmNsb2NrIC8gMTAwMCwgdmlkLT5jbG9jayAlIDEwMDApOwo+ICsJc3Ry ICs9IHNjbnByaW50ZihzdHIsIGVuZCAtIHN0ciwgIkhUb3RhbDolZFxuIiwgdmlkLT5odG90YWwp Owo+ICsJc3RyICs9IHNjbnByaW50ZihzdHIsIGVuZCAtIHN0ciwgIkhBY3RpdmU6JWRcbiIsIHZp ZC0+aGRpc3BsYXkpOwo+ICsJc3RyICs9IHNjbnByaW50ZihzdHIsIGVuZCAtIHN0ciwgIkhGcm9u dFBvcmNoOiVkXG4iLAo+ICsJCQkgdmlkLT5oc3luY19zdGFydCAtIHZpZC0+aGRpc3BsYXkpOwo+ ICsJc3RyICs9IHNjbnByaW50ZihzdHIsIGVuZCAtIHN0ciwgIkhTeW5jV2lkdGg6JWRcbiIsCj4g KwkJCSB2aWQtPmhzeW5jX2VuZCAtIHZpZC0+aHN5bmNfc3RhcnQpOwo+ICsJc3RyICs9IHNjbnBy aW50ZihzdHIsIGVuZCAtIHN0ciwgIkhCYWNrUG9yY2g6JWRcbiIsCj4gKwkJCSB2aWQtPmh0b3Rh bCAtIHZpZC0+aHN5bmNfZW5kKTsKPiArCXN0ciArPSBzY25wcmludGYoc3RyLCBlbmQgLSBzdHIs ICJWVG90YWw6JWRcbiIsIHZpZC0+dnRvdGFsKTsKPiArCXN0ciArPSBzY25wcmludGYoc3RyLCBl bmQgLSBzdHIsICJWQWN0aXZlOiVkXG4iLCB2aWQtPnZkaXNwbGF5KTsKPiArCXN0ciArPSBzY25w cmludGYoc3RyLCBlbmQgLSBzdHIsICJWRnJvbnRQb3JjaDolZFxuIiwKPiArCQkJIHZpZC0+dnN5 bmNfc3RhcnQgLSB2aWQtPnZkaXNwbGF5KTsKPiArCXN0ciArPSBzY25wcmludGYoc3RyLCBlbmQg LSBzdHIsICJWU3luY1dpZHRoOiVkXG4iLAo+ICsJCQkgdmlkLT52c3luY19lbmQgLSB2aWQtPnZz eW5jX3N0YXJ0KTsKPiArCXN0ciArPSBzY25wcmludGYoc3RyLCBlbmQgLSBzdHIsICJWQmFja1Bv cmNoOiVkXG4iLAo+ICsJCQkgdmlkLT52dG90YWwgLSB2aWQtPnZzeW5jX2VuZCk7Cj4gKwo+ICsJ cmV0dXJuIHN0ciAtIGJ1ZjsKPiArfQo+ICsKPiArc3RhdGljIHNzaXplX3QgZm9yY2VfcHdyb25v ZmZfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAo+ICsJCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0 cmlidXRlICphdHRyLAo+ICsJCQkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQo+ ICt7Cj4gKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiAr CWludCBwd3I7Cj4gKwo+ICsJaWYgKGtzdHJ0b2ludChidWYsIDEwLCAmcHdyKSA8IDApCj4gKwkJ cmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJaWYgKHB3cikKPiArCQlpdDY1MDVfcG93ZXJvbihpdDY1 MDUpOwo+ICsJZWxzZQo+ICsJCWl0NjUwNV9wb3dlcm9mZihpdDY1MDUpOwo+ICsKPiArCXJldHVy biBjb3VudDsKPiArfQo+ICsKPiArc3RhdGljIHNzaXplX3QgZW5hYmxlX2Rydl9ob2xkX3Nob3co c3RydWN0IGRldmljZSAqZGV2LAo+ICsJCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICph dHRyLCBjaGFyICpidWYpCj4gK3sKPiArCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGRldl9nZXRf ZHJ2ZGF0YShkZXYpOwo+ICsKPiArCXJldHVybiBzY25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIl ZFxuIiwgaXQ2NTA1LT5lbmFibGVfZHJ2X2hvbGQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3NpemVf dCBlbmFibGVfZHJ2X2hvbGRfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAo+ICsJCQkJICAgICBz dHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKPiArCQkJCSAgICAgY29uc3QgY2hhciAqYnVm LCBzaXplX3QgY291bnQpCj4gK3sKPiArCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGRldl9nZXRf ZHJ2ZGF0YShkZXYpOwo+ICsJdW5zaWduZWQgaW50IGRydl9ob2xkOwo+ICsKPiArCWlmIChrc3Ry dG9pbnQoYnVmLCAxMCwgJmRydl9ob2xkKSA8IDApCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ ICsJaXQ2NTA1LT5lbmFibGVfZHJ2X2hvbGQgPSAhIWRydl9ob2xkOwoKCkFnYWluICEhLCBwbGVh c2UganVzdCBmaW5kIGFsbCBvY2N1cnJlbmNlcyBvZiBpdCBhbiByZW1vdmUgdGhlbSBpZiBpdCBp cyAKYXNzaWduZWQgdG8gYm9vbCB0eXBlLgoKCj4gKwo+ICsJaWYgKGl0NjUwNS0+ZW5hYmxlX2Ry dl9ob2xkKSB7Cj4gKwkJaXQ2NTA1X2ludF9tYXNrX2Rpc2FibGUoaXQ2NTA1KTsKPiArCX0gZWxz ZSB7Cj4gKwkJaXQ2NTA1X2NsZWFyX2ludChpdDY1MDUpOwo+ICsJCWl0NjUwNV9pbnRfbWFza19l bmFibGUoaXQ2NTA1KTsKPiArCj4gKwkJaWYgKGl0NjUwNS0+cG93ZXJlZCkgewo+ICsJCQlpdDY1 MDUtPmNvbm5lY3Rvcl9zdGF0dXMgPQo+ICsJCQkJCWl0NjUwNV9nZXRfc2lua19ocGRfc3RhdHVz KGl0NjUwNSkgPwo+ICsJCQkJCWNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkIDoKPiArCQkJCQlj b25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKPiArCQl9IGVsc2Ugewo+ICsJCQlpdDY1MDUt PmNvbm5lY3Rvcl9zdGF0dXMgPQo+ICsJCQkJCWNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVk Owo+ICsJCX0KPiArCX0KPiArCXJldHVybiBjb3VudDsKPiArfQo+ICsKPiArc3RhdGljIERFVklD RV9BVFRSX1JPKHByaW50X3RpbWluZyk7Cj4gK3N0YXRpYyBERVZJQ0VfQVRUUl9XTyhmb3JjZV9w d3Jvbm9mZik7Cj4gK3N0YXRpYyBERVZJQ0VfQVRUUl9SVyhlbmFibGVfZHJ2X2hvbGQpOwo+ICsK PiArc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGUgKml0NjUwNV9hdHRyc1tdID0gewo+ICsJ JmRldl9hdHRyX3ByaW50X3RpbWluZy5hdHRyLAo+ICsJJmRldl9hdHRyX2ZvcmNlX3B3cm9ub2Zm LmF0dHIsCj4gKwkmZGV2X2F0dHJfZW5hYmxlX2Rydl9ob2xkLmF0dHIsCj4gKwlOVUxMLAo+ICt9 Owo+ICsKPiArc3RhdGljIHZvaWQgaXQ2NTA1X3NodXRkb3duKHN0cnVjdCBpMmNfY2xpZW50ICpj bGllbnQpCj4gK3sKPiArCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGRldl9nZXRfZHJ2ZGF0YSgm Y2xpZW50LT5kZXYpOwo+ICsKPiArCWtmcmVlKGl0NjUwNS0+ZWRpZCk7Cj4gKwlpdDY1MDUtPmVk aWQgPSBOVUxMOwo+ICsKPiArCWlmIChpdDY1MDUtPnBvd2VyZWQpCj4gKwkJaXQ2NTA1X2xhbmVf b2ZmKGl0NjUwNSk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaXQ2NTA1X2kyY19wcm9iZShzdHJ1 Y3QgaTJjX2NsaWVudCAqY2xpZW50LAo+ICsJCQkgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2Vf aWQgKmlkKQo+ICt7Cj4gKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDU7Cj4gKwlzdHJ1Y3QgZGV2aWNl ICpkZXYgPSAmY2xpZW50LT5kZXY7Cj4gKwlzdHJ1Y3QgZXh0Y29uX2RldiAqZXh0Y29uOwo+ICsJ aW50IGVyciwgaW50cF9pcnE7Cj4gKwo+ICsJaXQ2NTA1ID0gZGV2bV9remFsbG9jKCZjbGllbnQt PmRldiwgc2l6ZW9mKCppdDY1MDUpLCBHRlBfS0VSTkVMKTsKPiArCWlmICghaXQ2NTA1KQo+ICsJ CXJldHVybiAtRU5PTUVNOwo+ICsKPiArCW11dGV4X2luaXQoJml0NjUwNS0+ZXh0Y29uX2xvY2sp Owo+ICsJbXV0ZXhfaW5pdCgmaXQ2NTA1LT5tb2RlX2xvY2spOwo+ICsJbXV0ZXhfaW5pdCgmaXQ2 NTA1LT5hdXhfbG9jayk7Cj4gKwo+ICsJaXQ2NTA1LT5icmlkZ2Uub2Zfbm9kZSA9IGNsaWVudC0+ ZGV2Lm9mX25vZGU7Cj4gKwlpdDY1MDUtPmNvbm5lY3Rvcl9zdGF0dXMgPSBjb25uZWN0b3Jfc3Rh dHVzX2Rpc2Nvbm5lY3RlZDsKPiArCWl0NjUwNS0+Y2xpZW50ID0gY2xpZW50Owo+ICsJaTJjX3Nl dF9jbGllbnRkYXRhKGNsaWVudCwgaXQ2NTA1KTsKPiArCj4gKwkvKiBnZXQgZXh0Y29uIGRldmlj ZSBmcm9tIERUUyAqLwo+ICsJZXh0Y29uID0gZXh0Y29uX2dldF9lZGV2X2J5X3BoYW5kbGUoZGV2 LCAwKTsKPiArCWlmIChQVFJfRVJSKGV4dGNvbikgPT0gLUVQUk9CRV9ERUZFUikKPiArCQlyZXR1 cm4gLUVQUk9CRV9ERUZFUjsKPiArCWlmIChJU19FUlIoZXh0Y29uKSkgewo+ICsJCURSTV9ERVZf RVJST1IoZGV2LCAiY2FuIG5vdCBnZXQgZXh0Y29uIGRldmljZSEiKTsKPiArCQlyZXR1cm4gUFRS X0VSUihleHRjb24pOwo+ICsJfQo+ICsKPiArCWl0NjUwNS0+ZXh0Y29uID0gZXh0Y29uOwo+ICsK PiArCWl0NjUwNS0+cmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF9pMmMoY2xpZW50LCAmaXQ2NTA1 X3JlZ21hcF9jb25maWcpOwo+ICsJaWYgKElTX0VSUihpdDY1MDUtPnJlZ21hcCkpIHsKPiArCQlE Uk1fREVWX0VSUk9SKGRldiwgInJlZ21hcCBpMmMgaW5pdCBmYWlsZWQiKTsKPiArCQllcnIgPSBQ VFJfRVJSKGl0NjUwNS0+cmVnbWFwKTsKPiArCQlyZXR1cm4gZXJyOwo+ICsJfQo+ICsKPiArCWVy ciA9IGl0NjUwNV9pbml0X3BkYXRhKGl0NjUwNSk7Cj4gKwlpZiAoZXJyKSB7Cj4gKwkJRFJNX0RF Vl9FUlJPUihkZXYsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBwZGF0YTogJWQiLCBlcnIpOwo+ICsJ CXJldHVybiBlcnI7Cj4gKwl9Cj4gKwo+ICsJaXQ2NTA1X3BhcnNlX2R0KGl0NjUwNSk7Cj4gKwo+ ICsJaW50cF9pcnEgPSBjbGllbnQtPmlycTsKPiArCj4gKwlpZiAoIWludHBfaXJxKSB7Cj4gKwkJ RFJNX0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gZ2V0IElOVFAgSVJRIik7Cj4gKwkJZXJyID0g LUVOT0RFVjsKPiArCQlyZXR1cm4gZXJyOwo+ICsJfQo+ICsKPiArCWVyciA9IGRldm1fcmVxdWVz dF90aHJlYWRlZF9pcnEoJmNsaWVudC0+ZGV2LCBpbnRwX2lycSwgTlVMTCwKPiArCQkJCQlpdDY1 MDVfaW50X3RocmVhZGVkX2hhbmRsZXIsCj4gKwkJCQkJSVJRRl9UUklHR0VSX0xPVyB8IElSUUZf T05FU0hPVCwKPiArCQkJCQkiaXQ2NTA1LWludHAiLCBpdDY1MDUpOwo+ICsJaWYgKGVycikgewo+ ICsJCURSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgSU5UUCB0aHJlYWRlZCBJ UlE6ICVkIiwKPiArCQkJICAgICAgZXJyKTsKPiArCQlyZXR1cm4gZXJyOwo+ICsJfQo+ICsKPiAr CS8qIFJlZ2lzdGVyIGF1eCBjaGFubmVsICovCj4gKwlpdDY1MDUtPmF1eC5uYW1lID0gIkRQLUFV WCI7Cj4gKwlpdDY1MDUtPmF1eC5kZXYgPSBkZXY7Cj4gKwlpdDY1MDUtPmF1eC50cmFuc2ZlciA9 IGl0NjUwNV9hdXhfdHJhbnNmZXI7Cj4gKwo+ICsJZXJyID0gZHJtX2RwX2F1eF9yZWdpc3Rlcigm aXQ2NTA1LT5hdXgpOwo+ICsJaWYgKGVyciA8IDApIHsKPiArCQlEUk1fREVWX0VSUk9SKGRldiwg IkZhaWxlZCB0byByZWdpc3RlciBhdXg6ICVkIiwgZXJyKTsKPiArCQlyZXR1cm4gZXJyOwo+ICsJ fQo+ICsKPiArCUlOSVRfV09SSygmaXQ2NTA1LT5saW5rX3dvcmtzLCBpdDY1MDVfbGlua190cmFp bmluZ193b3JrKTsKPiArCUlOSVRfV09SSygmaXQ2NTA1LT5oZGNwX3dhaXRfa3N2X2xpc3QsIGl0 NjUwNV9oZGNwX3dhaXRfa3N2X2xpc3QpOwo+ICsJSU5JVF9ERUxBWUVEX1dPUksoJml0NjUwNS0+ aGRjcF93b3JrLCBpdDY1MDVfaGRjcF93b3JrKTsKPiArCWluaXRfY29tcGxldGlvbigmaXQ2NTA1 LT53YWl0X2VkaWRfY29tcGxldGUpOwo+ICsJbWVtc2V0KGl0NjUwNS0+ZHBjZCwgMCwgc2l6ZW9m KGl0NjUwNS0+ZHBjZCkpOwo+ICsJaXQ2NTA1LT5wb3dlcmVkID0gZmFsc2U7Cj4gKwlpdDY1MDUt PmVuYWJsZV9kcnZfaG9sZCA9IERFRkFVTFRfRFJWX0hPTEQ7Cj4gKwo+ICsJaWYgKERFRkFVTFRf UFdSX09OKQo+ICsJCWl0NjUwNV9wb3dlcm9uKGl0NjUwNSk7Cj4gKwo+ICsJZXJyID0gc3lzZnNf Y3JlYXRlX2ZpbGVzKCZjbGllbnQtPmRldi5rb2JqLCBpdDY1MDVfYXR0cnMpOwo+ICsJaWYgKGVy cikgewo+ICsJCWRybV9kcF9hdXhfdW5yZWdpc3RlcigmaXQ2NTA1LT5hdXgpOwo+ICsJCXJldHVy biBlcnI7Cj4gKwl9Cj4gKwo+ICsJaXQ2NTA1LT5icmlkZ2UuZnVuY3MgPSAmaXQ2NTA1X2JyaWRn ZV9mdW5jczsKPiArCWRybV9icmlkZ2VfYWRkKCZpdDY1MDUtPmJyaWRnZSk7Cj4gKwo+ICsJcmV0 dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaXQ2NTA1X2kyY19yZW1vdmUoc3RydWN0IGky Y19jbGllbnQgKmNsaWVudCkKPiArewo+ICsJc3RydWN0IGl0NjUwNSAqaXQ2NTA1ID0gaTJjX2dl dF9jbGllbnRkYXRhKGNsaWVudCk7Cj4gKwo+ICsJZHJtX2Nvbm5lY3Rvcl91bnJlZ2lzdGVyKCZp dDY1MDUtPmNvbm5lY3Rvcik7Cj4gKwlkcm1fY29ubmVjdG9yX2NsZWFudXAoJml0NjUwNS0+Y29u bmVjdG9yKTsKPiArCWRybV9icmlkZ2VfcmVtb3ZlKCZpdDY1MDUtPmJyaWRnZSk7Cj4gKwlkcm1f ZHBfYXV4X3VucmVnaXN0ZXIoJml0NjUwNS0+YXV4KTsKPiArCXN5c2ZzX3JlbW92ZV9maWxlcygm Y2xpZW50LT5kZXYua29iaiwgaXQ2NTA1X2F0dHJzKTsKPiArCWl0NjUwNV9wb3dlcm9mZihpdDY1 MDUpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGky Y19kZXZpY2VfaWQgaXQ2NTA1X2lkW10gPSB7Cj4gKwl7ICJpdDY1MDUiLCAwIH0sCj4gKwl7IH0K PiArfTsKPiArCj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBpdDY1MDVfaWQpOwo+ICsKPiAr c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgaXQ2NTA1X29mX21hdGNoW10gPSB7Cj4g Kwl7IC5jb21wYXRpYmxlID0gIml0ZSxpdDY1MDUiIH0sCj4gKwl7IH0KPiArfTsKPiArCj4gK3N0 YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpdDY1MDVfaTJjX2RyaXZlciA9IHsKPiArCS5kcml2ZXIg PSB7Cj4gKwkJLm5hbWUgPSAiaXQ2NTA1IiwKPiArCQkub2ZfbWF0Y2hfdGFibGUgPSBpdDY1MDVf b2ZfbWF0Y2gsCj4gKyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKPiArCQkucG0gPSAmaXQ2NTA1X2Jy aWRnZV9wbV9vcHMsCj4gKyNlbmRpZgo+ICsJfSwKPiArCS5wcm9iZSA9IGl0NjUwNV9pMmNfcHJv YmUsCj4gKwkucmVtb3ZlID0gaXQ2NTA1X2kyY19yZW1vdmUsCj4gKwkuc2h1dGRvd24gPSBpdDY1 MDVfc2h1dGRvd24sCj4gKwkuaWRfdGFibGUgPSBpdDY1MDVfaWQsCj4gK307Cj4gKwo+ICttb2R1 bGVfaTJjX2RyaXZlcihpdDY1MDVfaTJjX2RyaXZlcik7Cj4gKwo+ICtNT0RVTEVfQVVUSE9SKCJB bGxlbiBDaGVuIDxhbGxlbi5jaGVuQGl0ZS5jb20udHc+Iik7Cj4gK01PRFVMRV9ERVNDUklQVElP TigiSVQ2NTA1IERpc3BsYXlQb3J0IFRyYW5zbWl0dGVyIGRyaXZlciIpOwo+ICtNT0RVTEVfTElD RU5TRSgiR1BMIHYyIik7CgoKVGhlIHNoYXBlIG9mIHRoZSBkcml2ZXIgbG9va3MgT0sgdG8gbWUs IGJ1dCBpdCBpcyBxdWl0ZSBiaWcgYW5kIAppbnRlcmFjdHMgd2l0aCBtYW55IHN1YnN5c3RlbSwg c28gZm9yIHN1cmUgbXkgcmV2aWV3IHdhcyBub3QgcHJvZm91bmQgOikKCkZldyBtb3JlIHRoaW5n czoKCi0gaXQgd291bGQgYmUgZ29vZCB0byByZXBsYWNlIHNvbWUgbWFnaWMgbnVtYmVycyBpbnNp ZGUgdGhlIGNvZGUgd2l0aCAKcHJvcGVyIG1hY3JvcywgYWxsIHRoZXNlIDB4RjAsIDB4NzAsIEJJ VCh4KSBhcmUgcXVpdGUgY3J5cHRpYy4KCi0gUkVHX0JBTktfU0VMIGlzIHVzdWFsbHkgYXQgMCwg b25seSBzb21ldGltZXMgaXMgc3dpdGNoZWQgdG8gMSwgc28gCm1heWJlIGl0IHNob3VsZCBiZSBl bm91Z2ggdG8gc2V0IGl0IHRvIDEgaWYgbmVjZXNzYXJ5IGFuZCB0aGVuIAppbW1lZGlhdGVseSBz ZXQgYmFjayB0byAwLCBhcyBkZWZhdWx0IHZhbHVlLCBpbnN0ZWFkIG9mIHNldHRpbmcgaXQgCm11 bHRpcGxlIHRpbWVzLAoKLSBzb21ldGltZXMgeW91IGFyZSBhY2Nlc3NpbmcgYXJyYXlzIChpbnQg c3RhdHVzLCBtYXNrLCBpdDY1MDVfZHVtcCkgCm1heWJlIGl0IHdvdWxkIGJlIGdvb2QgdG8gY3Jl YXRlIGhlbHBlcnMgdG8gcmVhZC93cml0ZSBhcnJheXMgdG8gCnNpbXBsaWZ5IHRoZSBjb2RlIGxp dHRsZSBiaXQuCgoKQXMgSSBzYWlkIGl0IHdvdWxkIGJlIGdvb2QgdG8gZ2V0IHNvbWVvbmUncyBl bHNlIHJldmlldywgYXMgdGhlIGRyaXZlciAKaXMgYmlnLgoKClJlZ2FyZHMKCkFuZHJ6ZWoKCgoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTGludXgtbWVk aWF0ZWsgbWFpbGluZyBsaXN0CkxpbnV4LW1lZGlhdGVrQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0 cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1tZWRpYXRlawo=