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 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 1B42EC433EF for ; Sat, 5 Feb 2022 19:08:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=yTs6xFNvHfbk6uLAOoiiE30uJ7Mi4Jr7QmUOgMxQP6I=; b=E4yhSLW6LqzHXQ vchvuFq6DIRT2xk3D42YJAbQn8xxE8KS9Bule+vWo6+Xytd6z2DiSFW2S/iDmweWYdGdkIsp/Gjvt SRdZCqOFAC+pCafORiTyF+CuGdtEqBeeJCNvJmYBOd6vkL47HD1rGA/4ZXsjITwdM6sSSeyAhFGxg 3da3Z5xsj7gLF7GbkchyXNYVfLtQDXfkpiIlRxWJjcQrNHswy6e+viGQMLKSljj0vQHaDJVHFZUi8 nOUWkxLa5pwunaZZy46tQdtiJC9p9xadcZxFH0DXEZFHjYtOUX7GrYMAi8Wdw3SM9uuwbcGZhh0mY WS5gH59ON8CDuJJPVwSg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nGQOL-0075ae-AW; Sat, 05 Feb 2022 19:06:38 +0000 Received: from relay10.mail.gandi.net ([217.70.178.230]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nGQDA-006zQs-7W; Sat, 05 Feb 2022 18:55:15 +0000 Received: (Authenticated sender: paul.kocialkowski@bootlin.com) by mail.gandi.net (Postfix) with ESMTPSA id D7C7324000C; Sat, 5 Feb 2022 18:55:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1644087302; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=JjW17vp1JMdVNvX19gYJy2NlMhvPcTz4xYGoaptt/tQ=; b=kUr05eGJpQDbkc7vBvl2F17vsr4Ach2ULkKibiL0iwXxfVjEv4GJ4nzbjgOAR9DVfNBb/B uD8OgSCl8b71gQXtAO43i+q404M5Kry92tcLC5Z4FLPBtbFlGri2XsxHK5XYyYD0yT6REi dddFMbfqJPm6+6eaMd/BQCAufxOCLFtztYx1kO0xcsb6Nob6KjoG9hKJK3/XtOVBaMI7tM hXw+GDni1UfbZeE0QaI/y0MBZizE/mX9cptQx/Vv4R03kNaBR9Vg+O/LMONCqSXAxJKBN8 PC2ht6YISM7EqWezneqsyHHgTTa94iuSA8iOvKqpl/D4i0DUnLGts6NkDEQvFA== From: Paul Kocialkowski To: linux-media@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-kernel@vger.kernel.org, linux-phy@lists.infradead.org, linux-clk@vger.kernel.org, linux-staging@lists.linux.dev Cc: Yong Deng , Mauro Carvalho Chehab , Rob Herring , Maxime Ripard , Sakari Ailus , Hans Verkuil , Chen-Yu Tsai , Jernej Skrabec , Paul Kocialkowski , Greg Kroah-Hartman , Helen Koike , Laurent Pinchart , Thomas Petazzoni Subject: [PATCH v2 13/66] media: sunxi: Add support for the A83T MIPI CSI-2 controller Date: Sat, 5 Feb 2022 19:53:36 +0100 Message-Id: <20220205185429.2278860-14-paul.kocialkowski@bootlin.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220205185429.2278860-1-paul.kocialkowski@bootlin.com> References: <20220205185429.2278860-1-paul.kocialkowski@bootlin.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220205_105504_854999_9104C317 X-CRM114-Status: GOOD ( 31.05 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org VGhlIEE4M1Qgc3VwcG9ydHMgTUlQSSBDU0ktMiB3aXRoIGEgY29tcG9zaXRlIGNvbnRyb2xsZXIs IGNvdmVyaW5nCmJvdGggdGhlIHByb3RvY29sIGxvZ2ljIGFuZCB0aGUgRC1QSFkgaW1wbGVtZW50 YXRpb24uIFRoaXMgY29udHJvbGxlcgpzZWVtcyB0byBiZSBmb3VuZCBvbiB0aGUgQTgzVCBvbmx5 IGFuZCBwcm9iYWJseSB3YXMgYWJhbmRvbmVkIHNpbmNlLgoKVGhpcyBpbXBsZW1lbnRhdGlvbiBz cGxpdHMgdGhlIHByb3RvY29sIGFuZCBELVBIWSByZWdpc3RlcnMgYW5kCnVzZXMgdGhlIFBIWSBm cmFtZXdvcmsgaW50ZXJuYWxseS4gVGhlIEQtUEhZIGlzIG5vdCByZWdpc3RlcmVkIGFzIGEKc3Rh bmRhbG9uZSBQSFkgZHJpdmVyIHNpbmNlIGl0IGNhbm5vdCBiZSB1c2VkIHdpdGggYW55IG90aGVy CmNvbnRyb2xsZXIuCgpUaGVyZSBhcmUgYSBmZXcgbm90YWJsZSBwb2ludHMgYWJvdXQgdGhlIGNv bnRyb2xsZXI6Ci0gVGhlIGluaXRpYWxpc2F0aW9uIHNlcXVlbmNlIGludm9sZXMgd3JpdGluZyBz cGVjaWZpYyBtYWdpYyBpbml0CiAgdmFsdWVzIHRoYXQgZG8gbm90IHNlZW0gdG8gbWFrZSBhbnkg cGFydGljdWxhciBzZW5zZSBnaXZlbiB0aGUKICBjb25jZXJuZWQgcmVnaXN0ZXIgZmllbGRzOwot IEludGVycnVwdHMgYXBwZWFyIHRvIGJlIGhpdHRpbmcgcmVnYXJkbGVzcyBvZiB0aGUgaW50ZXJy dXB0IG1hc2sKICByZWdpc3RlcnMsIHdoaWNoIGNhbiBjYXVzZSBhIHNlcmlvdXMgZmxvb2Qgd2hl biB0cmFuc21pc3Npb24gZXJyb3JzCiAgb2NjdXIuCgpPbmx5IDgtYml0IGFuZCAxMC1iaXQgQmF5 ZXIgZm9ybWF0cyBhcmUgY3VycmVudGx5IHN1cHBvcnRlZC4KV2hpbGUgdXAgdG8gNCBpbnRlcm5h bCBjaGFubmVscyB0byB0aGUgQ1NJIGNvbnRyb2xsZXIgZXhpc3QsIG9ubHkgb25lCmlzIGN1cnJl bnRseSBzdXBwb3J0ZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvbi4KClRoaXMgd29yayBpcyBiYXNl ZCBvbiB0aGUgZmlyc3QgdmVyc2lvbiBvZiB0aGUgZHJpdmVyIHN1Ym1pdHRlZCBieQpLw6l2aW4g TCdow7RwaXRhbCwgd2hpY2ggd2FzIGFkYXB0ZWQgdG8gbWFpbmxpbmUgZnJvbSB0aGUgQWxsd2lu bmVyIEJTUC4KVGhpcyB2ZXJzaW9uIGludGVncmF0ZXMgTUlQSSBDU0ktMiBzdXBwb3J0IGFzIGEg c3RhbmRhbG9uZSBWNEwyIHN1YmRldgppbnN0ZWFkIG9mIG1lcmdpbmcgaXQgaW4gdGhlIHN1bjZp LWNzaSBkcml2ZXIuCgpJdCB3YXMgdGVzdGVkIG9uIGEgQmFuYW5hIFBpIE0zIGJvYXJkIHdpdGgg YW4gT1Y4ODY1IHNlbnNvciBpbiBhIDQtbGFuZQpjb25maWd1cmF0aW9uLgoKU2lnbmVkLW9mZi1i eTogUGF1bCBLb2NpYWxrb3dza2kgPHBhdWwua29jaWFsa293c2tpQGJvb3RsaW4uY29tPgpBY2tl ZC1ieTogTWF4aW1lIFJpcGFyZCA8bXJpcGFyZEBrZXJuZWwub3JnPgotLS0KIGRyaXZlcnMvbWVk aWEvcGxhdGZvcm0vc3VueGkvS2NvbmZpZyAgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL21lZGlh L3BsYXRmb3JtL3N1bnhpL01ha2VmaWxlICAgICAgICAgfCAgIDEgKwogLi4uL3N1bnhpL3N1bjhp LWE4M3QtbWlwaS1jc2kyL0tjb25maWcgICAgICAgIHwgIDExICsKIC4uLi9zdW54aS9zdW44aS1h ODN0LW1pcGktY3NpMi9NYWtlZmlsZSAgICAgICB8ICAgNCArCiAuLi4vc3VuOGktYTgzdC1taXBp LWNzaTIvc3VuOGlfYTgzdF9kcGh5LmMgICAgfCAgNzIgKysKIC4uLi9zdW44aS1hODN0LW1pcGkt Y3NpMi9zdW44aV9hODN0X2RwaHkuaCAgICB8ICAzOSArCiAuLi4vc3VuOGlfYTgzdF9taXBpX2Nz aTIuYyAgICAgICAgICAgICAgICAgICAgfCA4MTIgKysrKysrKysrKysrKysrKysrCiAuLi4vc3Vu OGlfYTgzdF9taXBpX2NzaTIuaCAgICAgICAgICAgICAgICAgICAgfCAgNTUgKysKIC4uLi9zdW44 aV9hODN0X21pcGlfY3NpMl9yZWcuaCAgICAgICAgICAgICAgICB8IDE1NyArKysrCiA5IGZpbGVz IGNoYW5nZWQsIDExNTIgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv bWVkaWEvcGxhdGZvcm0vc3VueGkvc3VuOGktYTgzdC1taXBpLWNzaTIvS2NvbmZpZwogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc3VueGkvc3VuOGktYTgzdC1taXBp LWNzaTIvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL21lZGlhL3BsYXRmb3Jt L3N1bnhpL3N1bjhpLWE4M3QtbWlwaS1jc2kyL3N1bjhpX2E4M3RfZHBoeS5jCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zdW54aS9zdW44aS1hODN0LW1pcGktY3Np Mi9zdW44aV9hODN0X2RwaHkuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWVkaWEvcGxh dGZvcm0vc3VueGkvc3VuOGktYTgzdC1taXBpLWNzaTIvc3VuOGlfYTgzdF9taXBpX2NzaTIuYwog Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc3VueGkvc3VuOGktYTgz dC1taXBpLWNzaTIvc3VuOGlfYTgzdF9taXBpX2NzaTIuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvbWVkaWEvcGxhdGZvcm0vc3VueGkvc3VuOGktYTgzdC1taXBpLWNzaTIvc3VuOGlfYTgz dF9taXBpX2NzaTJfcmVnLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3N1 bnhpL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3N1bnhpL0tjb25maWcKaW5kZXgg OTY4NGUwNzQ1NGFkLi5kYjRjMDdiZTdlNGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcGxh dGZvcm0vc3VueGkvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3N1bnhpL0tj b25maWcKQEAgLTMsMyArMyw0IEBACiBzb3VyY2UgImRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc3Vu eGkvc3VuNGktY3NpL0tjb25maWciCiBzb3VyY2UgImRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc3Vu eGkvc3VuNmktY3NpL0tjb25maWciCiBzb3VyY2UgImRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc3Vu eGkvc3VuNmktbWlwaS1jc2kyL0tjb25maWciCitzb3VyY2UgImRyaXZlcnMvbWVkaWEvcGxhdGZv cm0vc3VueGkvc3VuOGktYTgzdC1taXBpLWNzaTIvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2RyaXZl cnMvbWVkaWEvcGxhdGZvcm0vc3VueGkvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3Jt L3N1bnhpL01ha2VmaWxlCmluZGV4IDg4N2E3Y2FlOGZjYS4uOWFhMDFjYjAxODgzIDEwMDY0NAot LS0gYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3N1bnhpL01ha2VmaWxlCisrKyBiL2RyaXZlcnMv bWVkaWEvcGxhdGZvcm0vc3VueGkvTWFrZWZpbGUKQEAgLTMsNSArMyw2IEBACiBvYmoteQkJKz0g c3VuNGktY3NpLwogb2JqLXkJCSs9IHN1bjZpLWNzaS8KIG9iai15CQkrPSBzdW42aS1taXBpLWNz aTIvCitvYmoteQkJKz0gc3VuOGktYTgzdC1taXBpLWNzaTIvCiBvYmoteQkJKz0gc3VuOGktZGkv CiBvYmoteQkJKz0gc3VuOGktcm90YXRlLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0 Zm9ybS9zdW54aS9zdW44aS1hODN0LW1pcGktY3NpMi9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9w bGF0Zm9ybS9zdW54aS9zdW44aS1hODN0LW1pcGktY3NpMi9LY29uZmlnCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNjBlN2E5YzQxMDY1Ci0tLSAvZGV2L251bGwKKysr IGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zdW54aS9zdW44aS1hODN0LW1pcGktY3NpMi9LY29u ZmlnCkBAIC0wLDAgKzEsMTEgQEAKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAt b25seQorY29uZmlnIFZJREVPX1NVTjhJX0E4M1RfTUlQSV9DU0kyCisJdHJpc3RhdGUgIkFsbHdp bm5lciBBODNUIE1JUEkgQ1NJLTIgQ29udHJvbGxlciBhbmQgRC1QSFkgRHJpdmVyIgorCWRlcGVu ZHMgb24gQVJDSF9TVU5YSSB8fCBDT01QSUxFX1RFU1QKKwlkZXBlbmRzIG9uIFBNICYmIENPTU1P Tl9DTEsgJiYgVklERU9fVjRMMgorCXNlbGVjdCBSRUdNQVBfTU1JTworCXNlbGVjdCBNRURJQV9D T05UUk9MTEVSCisJc2VsZWN0IFZJREVPX1Y0TDJfU1VCREVWX0FQSQorCXNlbGVjdCBWNEwyX0ZX Tk9ERQorCWhlbHAKKwkgICBTdXBwb3J0IGZvciB0aGUgQWxsd2lubmVyIEE4M1QgTUlQSSBDU0kt MiBDb250cm9sbGVyIGFuZCBELVBIWS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZv cm0vc3VueGkvc3VuOGktYTgzdC1taXBpLWNzaTIvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3Bs YXRmb3JtL3N1bnhpL3N1bjhpLWE4M3QtbWlwaS1jc2kyL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMTQyN2QxNWE4NzlhCi0tLSAvZGV2L251bGwKKysr IGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zdW54aS9zdW44aS1hODN0LW1pcGktY3NpMi9NYWtl ZmlsZQpAQCAtMCwwICsxLDQgQEAKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAt b25seQorc3VuOGktYTgzdC1taXBpLWNzaTIteSArPSBzdW44aV9hODN0X21pcGlfY3NpMi5vIHN1 bjhpX2E4M3RfZHBoeS5vCisKK29iai0kKENPTkZJR19WSURFT19TVU44SV9BODNUX01JUElfQ1NJ MikgKz0gc3VuOGktYTgzdC1taXBpLWNzaTIubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9w bGF0Zm9ybS9zdW54aS9zdW44aS1hODN0LW1pcGktY3NpMi9zdW44aV9hODN0X2RwaHkuYyBiL2Ry aXZlcnMvbWVkaWEvcGxhdGZvcm0vc3VueGkvc3VuOGktYTgzdC1taXBpLWNzaTIvc3VuOGlfYTgz dF9kcGh5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4xNWNlYzkx ZWUzOGMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3N1bnhpL3N1 bjhpLWE4M3QtbWlwaS1jc2kyL3N1bjhpX2E4M3RfZHBoeS5jCkBAIC0wLDAgKzEsNzIgQEAKKy8v IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKworLyoKKyAqIENvcHlyaWdodCAyMDIw IEJvb3RsaW4KKyAqIEF1dGhvcjogUGF1bCBLb2NpYWxrb3dza2kgPHBhdWwua29jaWFsa293c2tp QGJvb3RsaW4uY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9waHkvcGh5Lmg+CisjaW5jbHVk ZSA8bGludXgvcmVnbWFwLmg+CisKKyNpbmNsdWRlICJzdW44aV9hODN0X2RwaHkuaCIKKyNpbmNs dWRlICJzdW44aV9hODN0X21pcGlfY3NpMi5oIgorCitzdGF0aWMgaW50IHN1bjhpX2E4M3RfZHBo eV9jb25maWd1cmUoc3RydWN0IHBoeSAqZHBoeSwKKwkJCQkgICAgIHVuaW9uIHBoeV9jb25maWd1 cmVfb3B0cyAqb3B0cykKK3sKKwlyZXR1cm4gcGh5X21pcGlfZHBoeV9jb25maWdfdmFsaWRhdGUo Jm9wdHMtPm1pcGlfZHBoeSk7Cit9CisKK3N0YXRpYyBpbnQgc3VuOGlfYTgzdF9kcGh5X3Bvd2Vy X29uKHN0cnVjdCBwaHkgKmRwaHkpCit7CisJc3RydWN0IHN1bjhpX2E4M3RfbWlwaV9jc2kyX2Rl dmljZSAqY3NpMl9kZXYgPSBwaHlfZ2V0X2RydmRhdGEoZHBoeSk7CisJc3RydWN0IHJlZ21hcCAq cmVnbWFwID0gY3NpMl9kZXYtPnJlZ21hcDsKKworCXJlZ21hcF93cml0ZShyZWdtYXAsIFNVTjhJ X0E4M1RfRFBIWV9DVFJMX1JFRywKKwkJICAgICBTVU44SV9BODNUX0RQSFlfQ1RSTF9SRVNFVF9O IHwKKwkJICAgICBTVU44SV9BODNUX0RQSFlfQ1RSTF9TSFVURE9XTl9OKTsKKworCXJlZ21hcF93 cml0ZShyZWdtYXAsIFNVTjhJX0E4M1RfRFBIWV9BTkEwX1JFRywKKwkJICAgICBTVU44SV9BODNU X0RQSFlfQU5BMF9SRVhUX0VOIHwKKwkJICAgICBTVU44SV9BODNUX0RQSFlfQU5BMF9SSU5UKDIp IHwKKwkJICAgICBTVU44SV9BODNUX0RQSFlfQU5BMF9TTksoMikpOworCisJcmV0dXJuIDA7Cit9 OworCitzdGF0aWMgaW50IHN1bjhpX2E4M3RfZHBoeV9wb3dlcl9vZmYoc3RydWN0IHBoeSAqZHBo eSkKK3sKKwlzdHJ1Y3Qgc3VuOGlfYTgzdF9taXBpX2NzaTJfZGV2aWNlICpjc2kyX2RldiA9IHBo eV9nZXRfZHJ2ZGF0YShkcGh5KTsKKwlzdHJ1Y3QgcmVnbWFwICpyZWdtYXAgPSBjc2kyX2Rldi0+ cmVnbWFwOworCisJcmVnbWFwX3dyaXRlKHJlZ21hcCwgU1VOOElfQTgzVF9EUEhZX0NUUkxfUkVH LCAwKTsKKworCXJldHVybiAwOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwaHlfb3BzIHN1 bjhpX2E4M3RfZHBoeV9vcHMgPSB7CisJLmNvbmZpZ3VyZQk9IHN1bjhpX2E4M3RfZHBoeV9jb25m aWd1cmUsCisJLnBvd2VyX29uCT0gc3VuOGlfYTgzdF9kcGh5X3Bvd2VyX29uLAorCS5wb3dlcl9v ZmYJPSBzdW44aV9hODN0X2RwaHlfcG93ZXJfb2ZmLAorfTsKKworaW50IHN1bjhpX2E4M3RfZHBo eV9yZWdpc3RlcihzdHJ1Y3Qgc3VuOGlfYTgzdF9taXBpX2NzaTJfZGV2aWNlICpjc2kyX2RldikK K3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjc2kyX2Rldi0+ZGV2OworCXN0cnVjdCBwaHlfcHJv dmlkZXIgKnBoeV9wcm92aWRlcjsKKworCWNzaTJfZGV2LT5kcGh5ID0gZGV2bV9waHlfY3JlYXRl KGRldiwgTlVMTCwgJnN1bjhpX2E4M3RfZHBoeV9vcHMpOworCWlmIChJU19FUlIoY3NpMl9kZXYt PmRwaHkpKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBELVBIWVxuIik7CisJ CXJldHVybiBQVFJfRVJSKGNzaTJfZGV2LT5kcGh5KTsKKwl9CisKKwlwaHlfc2V0X2RydmRhdGEo Y3NpMl9kZXYtPmRwaHksIGNzaTJfZGV2KTsKKworCXBoeV9wcm92aWRlciA9IGRldm1fb2ZfcGh5 X3Byb3ZpZGVyX3JlZ2lzdGVyKGRldiwgb2ZfcGh5X3NpbXBsZV94bGF0ZSk7CisJaWYgKElTX0VS UihwaHlfcHJvdmlkZXIpKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIEQt UEhZIHByb3ZpZGVyXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIocGh5X3Byb3ZpZGVyKTsKKwl9CisK KwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc3VueGkv c3VuOGktYTgzdC1taXBpLWNzaTIvc3VuOGlfYTgzdF9kcGh5LmggYi9kcml2ZXJzL21lZGlhL3Bs YXRmb3JtL3N1bnhpL3N1bjhpLWE4M3QtbWlwaS1jc2kyL3N1bjhpX2E4M3RfZHBoeS5oCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMTg3NzkwNjBmZDMyCi0tLSAvZGV2 L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zdW54aS9zdW44aS1hODN0LW1pcGkt Y3NpMi9zdW44aV9hODN0X2RwaHkuaApAQCAtMCwwICsxLDM5IEBACisvKiBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogR1BMLTIuMCsgKi8KKy8qCisgKiBDb3B5cmlnaHQgMjAyMCBLw6l2aW4gTCdo w7RwaXRhbCA8a2V2aW4ubGhvcGl0YWxAYm9vdGxpbi5jb20+CisgKiBDb3B5cmlnaHQgMjAyMC0y MDIxIEJvb3RsaW4KKyAqIEF1dGhvcjogUGF1bCBLb2NpYWxrb3dza2kgPHBhdWwua29jaWFsa293 c2tpQGJvb3RsaW4uY29tPgorICovCisKKyNpZm5kZWYgX1NVTjhJX0E4M1RfRFBIWV9IXworI2Rl ZmluZSBfU1VOOElfQTgzVF9EUEhZX0hfCisKKyNpbmNsdWRlICJzdW44aV9hODN0X21pcGlfY3Np Mi5oIgorCisjZGVmaW5lIFNVTjhJX0E4M1RfRFBIWV9DVFJMX1JFRwkJMHgxMAorI2RlZmluZSBT VU44SV9BODNUX0RQSFlfQ1RSTF9JTklUX1ZBTFVFCQkweGI4ZGY2OThlCisjZGVmaW5lIFNVTjhJ X0E4M1RfRFBIWV9DVFJMX1JFU0VUX04JCUJJVCgzMSkKKyNkZWZpbmUgU1VOOElfQTgzVF9EUEhZ X0NUUkxfU0hVVERPV05fTgkJQklUKDE1KQorI2RlZmluZSBTVU44SV9BODNUX0RQSFlfQ1RSTF9E RUJVRwkJQklUKDgpCisjZGVmaW5lIFNVTjhJX0E4M1RfRFBIWV9TVEFUVVNfUkVHCQkweDE0Cisj ZGVmaW5lIFNVTjhJX0E4M1RfRFBIWV9TVEFUVVNfQ0xLX1NUT1AJCUJJVCgxMCkKKyNkZWZpbmUg U1VOOElfQTgzVF9EUEhZX1NUQVRVU19DTEtfVUxQUwkJQklUKDkpCisjZGVmaW5lIFNVTjhJX0E4 M1RfRFBIWV9TVEFUVVNfSFNDTEsJCUJJVCg4KQorI2RlZmluZSBTVU44SV9BODNUX0RQSFlfU1RB VFVTX0QzX1NUT1AJCUJJVCg3KQorI2RlZmluZSBTVU44SV9BODNUX0RQSFlfU1RBVFVTX0QyX1NU T1AJCUJJVCg2KQorI2RlZmluZSBTVU44SV9BODNUX0RQSFlfU1RBVFVTX0QxX1NUT1AJCUJJVCg1 KQorI2RlZmluZSBTVU44SV9BODNUX0RQSFlfU1RBVFVTX0QwX1NUT1AJCUJJVCg0KQorI2RlZmlu ZSBTVU44SV9BODNUX0RQSFlfU1RBVFVTX0QzX1VMUFMJCUJJVCgzKQorI2RlZmluZSBTVU44SV9B ODNUX0RQSFlfU1RBVFVTX0QyX1VMUFMJCUJJVCgyKQorI2RlZmluZSBTVU44SV9BODNUX0RQSFlf U1RBVFVTX0QxX1VMUFMJCUJJVCgxKQorI2RlZmluZSBTVU44SV9BODNUX0RQSFlfU1RBVFVTX0Qw X1VMUFMJCUJJVCgwKQorCisjZGVmaW5lIFNVTjhJX0E4M1RfRFBIWV9BTkEwX1JFRwkJMHgzMAor I2RlZmluZSBTVU44SV9BODNUX0RQSFlfQU5BMF9SRVhUX0VOCQlCSVQoMzEpCisjZGVmaW5lIFNV TjhJX0E4M1RfRFBIWV9BTkEwX1JFWFQJCUJJVCgzMCkKKyNkZWZpbmUgU1VOOElfQTgzVF9EUEhZ X0FOQTBfUklOVCh2KQkJKCgodikgPDwgMjgpICYgR0VOTUFTSygyOSwgMjgpKQorI2RlZmluZSBT VU44SV9BODNUX0RQSFlfQU5BMF9TTksodikJCSgoKHYpIDw8IDIwKSAmIEdFTk1BU0soMjIsIDIw KSkKKworaW50IHN1bjhpX2E4M3RfZHBoeV9yZWdpc3RlcihzdHJ1Y3Qgc3VuOGlfYTgzdF9taXBp X2NzaTJfZGV2aWNlICpjc2kyX2Rldik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9t ZWRpYS9wbGF0Zm9ybS9zdW54aS9zdW44aS1hODN0LW1pcGktY3NpMi9zdW44aV9hODN0X21pcGlf Y3NpMi5jIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zdW54aS9zdW44aS1hODN0LW1pcGktY3Np Mi9zdW44aV9hODN0X21pcGlfY3NpMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwMC4uYWUwNmFkNzc4N2FmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9w bGF0Zm9ybS9zdW54aS9zdW44aS1hODN0LW1pcGktY3NpMi9zdW44aV9hODN0X21pcGlfY3NpMi5j CkBAIC0wLDAgKzEsODEyIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsK Ky8qCisgKiBDb3B5cmlnaHQgMjAyMCBLw6l2aW4gTCdow7RwaXRhbCA8a2V2aW4ubGhvcGl0YWxA Ym9vdGxpbi5jb20+CisgKiBDb3B5cmlnaHQgMjAyMC0yMDIxIEJvb3RsaW4KKyAqIEF1dGhvcjog UGF1bCBLb2NpYWxrb3dza2kgPHBhdWwua29jaWFsa293c2tpQGJvb3RsaW4uY29tPgorICovCisK KyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNs dWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorI2luY2x1ZGUg PGxpbnV4L3BoeS9waHkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNp bmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+Cisj aW5jbHVkZSA8bGludXgvcmVzZXQuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWN0cmxzLmg+Cisj aW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWZ3bm9k ZS5oPgorCisjaW5jbHVkZSAic3VuOGlfYTgzdF9kcGh5LmgiCisjaW5jbHVkZSAic3VuOGlfYTgz dF9taXBpX2NzaTIuaCIKKyNpbmNsdWRlICJzdW44aV9hODN0X21pcGlfY3NpMl9yZWcuaCIKKwor LyogRm9ybWF0ICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VuOGlfYTgzdF9taXBpX2NzaTJf Zm9ybWF0CitzdW44aV9hODN0X21pcGlfY3NpMl9mb3JtYXRzW10gPSB7CisJeworCQkubWJ1c19j b2RlCT0gTUVESUFfQlVTX0ZNVF9TQkdHUjhfMVg4LAorCQkuZGF0YV90eXBlCT0gTUlQSV9DU0ky X0RBVEFfVFlQRV9SQVc4LAorCQkuYnBwCQk9IDgsCisJfSwKKwl7CisJCS5tYnVzX2NvZGUJPSBN RURJQV9CVVNfRk1UX1NHQlJHOF8xWDgsCisJCS5kYXRhX3R5cGUJPSBNSVBJX0NTSTJfREFUQV9U WVBFX1JBVzgsCisJCS5icHAJCT0gOCwKKwl9LAorCXsKKwkJLm1idXNfY29kZQk9IE1FRElBX0JV U19GTVRfU0dSQkc4XzFYOCwKKwkJLmRhdGFfdHlwZQk9IE1JUElfQ1NJMl9EQVRBX1RZUEVfUkFX OCwKKwkJLmJwcAkJPSA4LAorCX0sCisJeworCQkubWJ1c19jb2RlCT0gTUVESUFfQlVTX0ZNVF9T UkdHQjhfMVg4LAorCQkuZGF0YV90eXBlCT0gTUlQSV9DU0kyX0RBVEFfVFlQRV9SQVc4LAorCQku YnBwCQk9IDgsCisJfSwKKwl7CisJCS5tYnVzX2NvZGUJPSBNRURJQV9CVVNfRk1UX1NCR0dSMTBf MVgxMCwKKwkJLmRhdGFfdHlwZQk9IE1JUElfQ1NJMl9EQVRBX1RZUEVfUkFXMTAsCisJCS5icHAJ CT0gMTAsCisJfSwKKwl7CisJCS5tYnVzX2NvZGUJPSBNRURJQV9CVVNfRk1UX1NHQlJHMTBfMVgx MCwKKwkJLmRhdGFfdHlwZQk9IE1JUElfQ1NJMl9EQVRBX1RZUEVfUkFXMTAsCisJCS5icHAJCT0g MTAsCisJfSwKKwl7CisJCS5tYnVzX2NvZGUJPSBNRURJQV9CVVNfRk1UX1NHUkJHMTBfMVgxMCwK KwkJLmRhdGFfdHlwZQk9IE1JUElfQ1NJMl9EQVRBX1RZUEVfUkFXMTAsCisJCS5icHAJCT0gMTAs CisJfSwKKwl7CisJCS5tYnVzX2NvZGUJPSBNRURJQV9CVVNfRk1UX1NSR0dCMTBfMVgxMCwKKwkJ LmRhdGFfdHlwZQk9IE1JUElfQ1NJMl9EQVRBX1RZUEVfUkFXMTAsCisJCS5icHAJCT0gMTAsCisJ fSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VuOGlfYTgzdF9taXBpX2NzaTJfZm9ybWF0 ICoKK3N1bjhpX2E4M3RfbWlwaV9jc2kyX2Zvcm1hdF9maW5kKHUzMiBtYnVzX2NvZGUpCit7CisJ dW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzdW44aV9hODN0 X21pcGlfY3NpMl9mb3JtYXRzKTsgaSsrKQorCQlpZiAoc3VuOGlfYTgzdF9taXBpX2NzaTJfZm9y bWF0c1tpXS5tYnVzX2NvZGUgPT0gbWJ1c19jb2RlKQorCQkJcmV0dXJuICZzdW44aV9hODN0X21p cGlfY3NpMl9mb3JtYXRzW2ldOworCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qIENvbnRyb2xsZXIg Ki8KKworc3RhdGljIHZvaWQKK3N1bjhpX2E4M3RfbWlwaV9jc2kyX2luaXQoc3RydWN0IHN1bjhp X2E4M3RfbWlwaV9jc2kyX2RldmljZSAqY3NpMl9kZXYpCit7CisJc3RydWN0IHJlZ21hcCAqcmVn bWFwID0gY3NpMl9kZXYtPnJlZ21hcDsKKworCS8qCisJICogVGhlIEFsbHdpbm5lciBCU1Agc2V0 cyB2YXJpb3VzIG1hZ2ljIHZhbHVlcyBvbiBhIGJ1bmNoIG9mIHJlZ2lzdGVycy4KKwkgKiBUaGlz IGlzIGFwcGFyZW50bHkgYSBuZWNlc3NhcnkgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyB0aGF0IHdp bGwgY2F1c2UKKwkgKiB0aGUgY2FwdHVyZSB0byBmYWlsIHdpdGggdW5zb2xpY2l0ZWQgaW50ZXJy dXB0cyBoaXR0aW5nIGlmIHNraXBwZWQuCisJICoKKwkgKiBNb3N0IG9mIHRoZSByZWdpc3RlcnMg YXJlIHNldCB0byBwcm9wZXIgdmFsdWVzIGxhdGVyLCBleGNlcHQgZm9yIHRoZQorCSAqIHR3byBy ZXNlcnZlZCByZWdpc3RlcnMuIFRoZXkgYXJlIHNhaWQgdG8gaG9sZCBhICJoYXJkd2FyZSBsb2Nr IgorCSAqIHZhbHVlLCB3aXRob3V0IG1vcmUgaW5mb3JtYXRpb24gYXZhaWxhYmxlLgorCSAqLwor CisJcmVnbWFwX3dyaXRlKHJlZ21hcCwgU1VOOElfQTgzVF9NSVBJX0NTSTJfQ1RSTF9SRUcsIDAp OworCXJlZ21hcF93cml0ZShyZWdtYXAsIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0NUUkxfUkVHLAor CQkgICAgIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0NUUkxfSU5JVF9WQUxVRSk7CisKKwlyZWdtYXBf d3JpdGUocmVnbWFwLCBTVU44SV9BODNUX01JUElfQ1NJMl9SWF9QS1RfTlVNX1JFRywgMCk7CisJ cmVnbWFwX3dyaXRlKHJlZ21hcCwgU1VOOElfQTgzVF9NSVBJX0NTSTJfUlhfUEtUX05VTV9SRUcs CisJCSAgICAgU1VOOElfQTgzVF9NSVBJX0NTSTJfUlhfUEtUX05VTV9JTklUX1ZBTFVFKTsKKwor CXJlZ21hcF93cml0ZShyZWdtYXAsIFNVTjhJX0E4M1RfRFBIWV9DVFJMX1JFRywgMCk7CisJcmVn bWFwX3dyaXRlKHJlZ21hcCwgU1VOOElfQTgzVF9EUEhZX0NUUkxfUkVHLAorCQkgICAgIFNVTjhJ X0E4M1RfRFBIWV9DVFJMX0lOSVRfVkFMVUUpOworCisJcmVnbWFwX3dyaXRlKHJlZ21hcCwgU1VO OElfQTgzVF9NSVBJX0NTSTJfUlNWRDFfUkVHLCAwKTsKKwlyZWdtYXBfd3JpdGUocmVnbWFwLCBT VU44SV9BODNUX01JUElfQ1NJMl9SU1ZEMV9SRUcsCisJCSAgICAgU1VOOElfQTgzVF9NSVBJX0NT STJfUlNWRDFfSFdfTE9DS19WQUxVRSk7CisKKwlyZWdtYXBfd3JpdGUocmVnbWFwLCBTVU44SV9B ODNUX01JUElfQ1NJMl9SU1ZEMl9SRUcsIDApOworCXJlZ21hcF93cml0ZShyZWdtYXAsIFNVTjhJ X0E4M1RfTUlQSV9DU0kyX1JTVkQyX1JFRywKKwkJICAgICBTVU44SV9BODNUX01JUElfQ1NJMl9S U1ZEMl9IV19MT0NLX1ZBTFVFKTsKKworCXJlZ21hcF93cml0ZShyZWdtYXAsIFNVTjhJX0E4M1Rf TUlQSV9DU0kyX0NGR19SRUcsIDApOworCXJlZ21hcF93cml0ZShyZWdtYXAsIFNVTjhJX0E4M1Rf TUlQSV9DU0kyX0NGR19SRUcsCisJCSAgICAgU1VOOElfQTgzVF9NSVBJX0NTSTJfQ0ZHX0lOSVRf VkFMVUUpOworfQorCitzdGF0aWMgdm9pZAorc3VuOGlfYTgzdF9taXBpX2NzaTJfZW5hYmxlKHN0 cnVjdCBzdW44aV9hODN0X21pcGlfY3NpMl9kZXZpY2UgKmNzaTJfZGV2KQoreworCXN0cnVjdCBy ZWdtYXAgKnJlZ21hcCA9IGNzaTJfZGV2LT5yZWdtYXA7CisKKwlyZWdtYXBfdXBkYXRlX2JpdHMo cmVnbWFwLCBTVU44SV9BODNUX01JUElfQ1NJMl9DRkdfUkVHLAorCQkJICAgU1VOOElfQTgzVF9N SVBJX0NTSTJfQ0ZHX1NZTkNfRU4sCisJCQkgICBTVU44SV9BODNUX01JUElfQ1NJMl9DRkdfU1lO Q19FTik7Cit9CisKK3N0YXRpYyB2b2lkCitzdW44aV9hODN0X21pcGlfY3NpMl9kaXNhYmxlKHN0 cnVjdCBzdW44aV9hODN0X21pcGlfY3NpMl9kZXZpY2UgKmNzaTJfZGV2KQoreworCXN0cnVjdCBy ZWdtYXAgKnJlZ21hcCA9IGNzaTJfZGV2LT5yZWdtYXA7CisKKwlyZWdtYXBfdXBkYXRlX2JpdHMo cmVnbWFwLCBTVU44SV9BODNUX01JUElfQ1NJMl9DRkdfUkVHLAorCQkJICAgU1VOOElfQTgzVF9N SVBJX0NTSTJfQ0ZHX1NZTkNfRU4sIDApOworCisJcmVnbWFwX3dyaXRlKHJlZ21hcCwgU1VOOElf QTgzVF9NSVBJX0NTSTJfQ1RSTF9SRUcsIDApOworfQorCitzdGF0aWMgdm9pZAorc3VuOGlfYTgz dF9taXBpX2NzaTJfY29uZmlndXJlKHN0cnVjdCBzdW44aV9hODN0X21pcGlfY3NpMl9kZXZpY2Ug KmNzaTJfZGV2KQoreworCXN0cnVjdCByZWdtYXAgKnJlZ21hcCA9IGNzaTJfZGV2LT5yZWdtYXA7 CisJdW5zaWduZWQgaW50IGxhbmVzX2NvdW50ID0KKwkJY3NpMl9kZXYtPmJyaWRnZS5lbmRwb2lu dC5idXMubWlwaV9jc2kyLm51bV9kYXRhX2xhbmVzOworCXN0cnVjdCB2NGwyX21idXNfZnJhbWVm bXQgKm1idXNfZm9ybWF0ID0gJmNzaTJfZGV2LT5icmlkZ2UubWJ1c19mb3JtYXQ7CisJY29uc3Qg c3RydWN0IHN1bjhpX2E4M3RfbWlwaV9jc2kyX2Zvcm1hdCAqZm9ybWF0OworCXN0cnVjdCBkZXZp Y2UgKmRldiA9IGNzaTJfZGV2LT5kZXY7CisJdTMyIHZlcnNpb24gPSAwOworCisJZm9ybWF0ID0g c3VuOGlfYTgzdF9taXBpX2NzaTJfZm9ybWF0X2ZpbmQobWJ1c19mb3JtYXQtPmNvZGUpOworCWlm IChXQVJOX09OKCFmb3JtYXQpKQorCQlyZXR1cm47CisKKwlyZWdtYXBfd3JpdGUocmVnbWFwLCBT VU44SV9BODNUX01JUElfQ1NJMl9DVFJMX1JFRywKKwkJICAgICBTVU44SV9BODNUX01JUElfQ1NJ Ml9DVFJMX1JFU0VUX04pOworCisJcmVnbWFwX3JlYWQocmVnbWFwLCBTVU44SV9BODNUX01JUElf Q1NJMl9WRVJTSU9OX1JFRywgJnZlcnNpb24pOworCisJZGV2X2RiZyhkZXYsICJBODNUIE1JUEkg Q1NJLTIgdmVyc2lvbjogJTA0eFxuIiwgdmVyc2lvbik7CisKKwlyZWdtYXBfd3JpdGUocmVnbWFw LCBTVU44SV9BODNUX01JUElfQ1NJMl9DRkdfUkVHLAorCQkgICAgIFNVTjhJX0E4M1RfTUlQSV9D U0kyX0NGR19VTlBLVF9FTiB8CisJCSAgICAgU1VOOElfQTgzVF9NSVBJX0NTSTJfQ0ZHX1NZTkNf RExZX0NZQ0xFKDgpIHwKKwkJICAgICBTVU44SV9BODNUX01JUElfQ1NJMl9DRkdfTl9DSEFOTkVM KDEpIHwKKwkJICAgICBTVU44SV9BODNUX01JUElfQ1NJMl9DRkdfTl9MQU5FKGxhbmVzX2NvdW50 KSk7CisKKwkvKgorCSAqIE9ubHkgYSBzaW5nbGUgdmlydHVhbCBjaGFubmVsIChpbmRleCAwKSBp cyBjdXJyZW50bHkgc3VwcG9ydGVkLgorCSAqIFdoaWxlIHRoZSByZWdpc3RlcnMgZG8gbWVudGlv biBtdWx0aXBsZSBwaHlzaWNhbCBjaGFubmVscyBiZWluZworCSAqIGF2YWlsYWJsZSAod2hpY2gg Y2FuIGJlIGNvbmZpZ3VyZWQgdG8gbWF0Y2ggYSBzcGVjaWZpYyB2aXJ0dWFsCisJICogY2hhbm5l bCBvciBkYXRhIHR5cGUpLCBpdCdzIHVuY2xlYXIgd2hldGhlciBjaGFubmVscyA+IDAgYXJlIGFj dHVhbGx5CisJICogY29ubmVjdGVkIGFuZCBhdmFpbGFibGUgYW5kIHRoZSByZWZlcmVuY2Ugc291 cmNlIGNvZGUgb25seSBtYWtlcyB1c2UKKwkgKiBvZiBjaGFubmVsIDAuCisJICoKKwkgKiBVc2lu ZyBleHRyYSBjaGFubmVscyB3b3VsZCBhbHNvIHJlcXVpcmUgbWF0Y2hpbmcgY2hhbm5lbHMgdG8g YmUKKwkgKiBhdmFpbGFibGUgb24gdGhlIENTSSAoYW5kIElTUCkgc2lkZSwgd2hpY2ggaXMgYWxz byB1bnN1cmUgYWx0aG91Z2gKKwkgKiBzb21lIENTSSBpbXBsZW1lbnRhdGlvbnMgYXJlIHNhaWQg dG8gc3VwcG9ydCBtdWx0aXBsZSBjaGFubmVscyBmb3IKKwkgKiBCVDY1NiB0aW1lLXNoYXJpbmcu CisJICoKKwkgKiBXZSBzdGlsbCBjb25maWd1cmUgdmlydHVhbCBjaGFubmVsIG51bWJlcnMgdG8g ZW5zdXJlIHRoYXQgdmlydHVhbAorCSAqIGNoYW5uZWwgMCBvbmx5IGdvZXMgdG8gY2hhbm5lbCAw LgorCSAqLworCisJcmVnbWFwX3dyaXRlKHJlZ21hcCwgU1VOOElfQTgzVF9NSVBJX0NTSTJfVkNE VDBfUkVHLAorCQkgICAgIFNVTjhJX0E4M1RfTUlQSV9DU0kyX1ZDRFQwX0NIX1ZDKDMsIDMpIHwK KwkJICAgICBTVU44SV9BODNUX01JUElfQ1NJMl9WQ0RUMF9DSF9WQygyLCAyKSB8CisJCSAgICAg U1VOOElfQTgzVF9NSVBJX0NTSTJfVkNEVDBfQ0hfVkMoMSwgMSkgfAorCQkgICAgIFNVTjhJX0E4 M1RfTUlQSV9DU0kyX1ZDRFQwX0NIX1ZDKDAsIDApIHwKKwkJICAgICBTVU44SV9BODNUX01JUElf Q1NJMl9WQ0RUMF9DSF9EVCgwLCBmb3JtYXQtPmRhdGFfdHlwZSkpOworfQorCisvKiBWNEwyIFN1 YmRldiAqLworCitzdGF0aWMgaW50IHN1bjhpX2E4M3RfbWlwaV9jc2kyX3Nfc3RyZWFtKHN0cnVj dCB2NGwyX3N1YmRldiAqc3ViZGV2LCBpbnQgb24pCit7CisJc3RydWN0IHN1bjhpX2E4M3RfbWlw aV9jc2kyX2RldmljZSAqY3NpMl9kZXYgPQorCQl2NGwyX2dldF9zdWJkZXZkYXRhKHN1YmRldik7 CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzb3VyY2Vfc3ViZGV2ID0gY3NpMl9kZXYtPmJyaWRnZS5z b3VyY2Vfc3ViZGV2OworCXVuaW9uIHBoeV9jb25maWd1cmVfb3B0cyBkcGh5X29wdHMgPSB7IDAg fTsKKwlzdHJ1Y3QgcGh5X2NvbmZpZ3VyZV9vcHRzX21pcGlfZHBoeSAqZHBoeV9jZmcgPSAmZHBo eV9vcHRzLm1pcGlfZHBoeTsKKwlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICptYnVzX2Zvcm1h dCA9ICZjc2kyX2Rldi0+YnJpZGdlLm1idXNfZm9ybWF0OworCWNvbnN0IHN0cnVjdCBzdW44aV9h ODN0X21pcGlfY3NpMl9mb3JtYXQgKmZvcm1hdDsKKwlzdHJ1Y3QgcGh5ICpkcGh5ID0gY3NpMl9k ZXYtPmRwaHk7CisJc3RydWN0IGRldmljZSAqZGV2ID0gY3NpMl9kZXYtPmRldjsKKwlzdHJ1Y3Qg djRsMl9jdHJsICpjdHJsOworCXVuc2lnbmVkIGludCBsYW5lc19jb3VudCA9CisJCWNzaTJfZGV2 LT5icmlkZ2UuZW5kcG9pbnQuYnVzLm1pcGlfY3NpMi5udW1fZGF0YV9sYW5lczsKKwl1bnNpZ25l ZCBsb25nIHBpeGVsX3JhdGU7CisJLyogSW5pdGlhbGl6ZSB0byAwIHRvIHVzZSBib3RoIGluIGRp c2FibGUgbGFiZWwgKHJldCAhPSAwKSBhbmQgb2ZmLiAqLworCWludCByZXQgPSAwOworCisJaWYg KCFzb3VyY2Vfc3ViZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmICghb24pIHsKKwkJdjRs Ml9zdWJkZXZfY2FsbChzb3VyY2Vfc3ViZGV2LCB2aWRlbywgc19zdHJlYW0sIDApOworCQlnb3Rv IGRpc2FibGU7CisJfQorCisJLyogUnVudGltZSBQTSAqLworCisJcmV0ID0gcG1fcnVudGltZV9y ZXN1bWVfYW5kX2dldChkZXYpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyog U2Vuc29yIHBpeGVsIHJhdGUgKi8KKworCWN0cmwgPSB2NGwyX2N0cmxfZmluZChzb3VyY2Vfc3Vi ZGV2LT5jdHJsX2hhbmRsZXIsIFY0TDJfQ0lEX1BJWEVMX1JBVEUpOworCWlmICghY3RybCkgewor CQlkZXZfZXJyKGRldiwgIm1pc3Npbmcgc2Vuc29yIHBpeGVsIHJhdGVcbiIpOworCQlyZXQgPSAt RU5PREVWOworCQlnb3RvIGVycm9yX3BtOworCX0KKworCXBpeGVsX3JhdGUgPSAodW5zaWduZWQg bG9uZyl2NGwyX2N0cmxfZ19jdHJsX2ludDY0KGN0cmwpOworCWlmICghcGl4ZWxfcmF0ZSkgewor CQlkZXZfZXJyKGRldiwgIm1pc3NpbmcgKHplcm8pIHNlbnNvciBwaXhlbCByYXRlXG4iKTsKKwkJ cmV0ID0gLUVOT0RFVjsKKwkJZ290byBlcnJvcl9wbTsKKwl9CisKKwkvKiBELVBIWSAqLworCisJ aWYgKCFsYW5lc19jb3VudCkgeworCQlkZXZfZXJyKGRldiwgIm1pc3NpbmcgKHplcm8pIE1JUEkg Q1NJLTIgbGFuZXMgY291bnRcbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycm9yX3Bt OworCX0KKworCWZvcm1hdCA9IHN1bjhpX2E4M3RfbWlwaV9jc2kyX2Zvcm1hdF9maW5kKG1idXNf Zm9ybWF0LT5jb2RlKTsKKwlpZiAoV0FSTl9PTighZm9ybWF0KSkgeworCQlyZXQgPSAtRU5PREVW OworCQlnb3RvIGVycm9yX3BtOworCX0KKworCXBoeV9taXBpX2RwaHlfZ2V0X2RlZmF1bHRfY29u ZmlnKHBpeGVsX3JhdGUsIGZvcm1hdC0+YnBwLCBsYW5lc19jb3VudCwKKwkJCQkJIGRwaHlfY2Zn KTsKKworCS8qCisJICogTm90ZSB0aGF0IG91ciBoYXJkd2FyZSBpcyB1c2luZyBERFIsIHdoaWNo IGlzIG5vdCB0YWtlbiBpbiBhY2NvdW50IGJ5CisJICogcGh5X21pcGlfZHBoeV9nZXRfZGVmYXVs dF9jb25maWcgd2hlbiBjYWxjdWxhdGluZyBoc19jbGtfcmF0ZSBmcm9tCisJICogdGhlIHBpeGVs IHJhdGUsIGxhbmVzIGNvdW50IGFuZCBicHAuCisJICoKKwkgKiBUaGUgcmVzdWx0aW5nIGNsb2Nr IHJhdGUgaXMgYmFzaWNhbGx5IHRoZSBzeW1ib2wgcmF0ZSBvdmVyIHRoZSB3aG9sZQorCSAqIGxp bmsuIFRoZSBhY3R1YWwgY2xvY2sgcmF0ZSBpcyBjYWxjdWxhdGVkIHdpdGggZGl2aXNpb24gYnkg dHdvIHNpbmNlCisJICogRERSIHNhbXBsZXMgYm90aCBvbiByaXNpbmcgYW5kIGZhbGxpbmcgZWRn ZXMuCisJICovCisKKwlkZXZfZGJnKGRldiwgIkE4M1QgTUlQSSBDU0ktMiBjb25maWc6XG4iKTsK KwlkZXZfZGJnKGRldiwgIiVsZCBwaXhlbHMvcywgJXUgYml0cy9waXhlbCwgJXUgbGFuZXMsICVs dSBIeiBjbG9ja1xuIiwKKwkJcGl4ZWxfcmF0ZSwgZm9ybWF0LT5icHAsIGxhbmVzX2NvdW50LAor CQlkcGh5X2NmZy0+aHNfY2xrX3JhdGUgLyAyKTsKKworCXJldCA9IHBoeV9yZXNldChkcGh5KTsK KwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJlc2V0IE1JUEkgRC1QSFlc biIpOworCQlnb3RvIGVycm9yX3BtOworCX0KKworCXJldCA9IHBoeV9jb25maWd1cmUoZHBoeSwg JmRwaHlfb3B0cyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBjb25m aWd1cmUgTUlQSSBELVBIWVxuIik7CisJCWdvdG8gZXJyb3JfcG07CisJfQorCisJLyogQ29udHJv bGxlciAqLworCisJc3VuOGlfYTgzdF9taXBpX2NzaTJfY29uZmlndXJlKGNzaTJfZGV2KTsKKwlz dW44aV9hODN0X21pcGlfY3NpMl9lbmFibGUoY3NpMl9kZXYpOworCisJLyogRC1QSFkgKi8KKwor CXJldCA9IHBoeV9wb3dlcl9vbihkcGh5KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAi ZmFpbGVkIHRvIHBvd2VyIG9uIE1JUEkgRC1QSFlcbiIpOworCQlnb3RvIGVycm9yX3BtOworCX0K KworCS8qIFNvdXJjZSAqLworCisJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChzb3VyY2Vfc3ViZGV2 LCB2aWRlbywgc19zdHJlYW0sIDEpOworCWlmIChyZXQgJiYgcmV0ICE9IC1FTk9JT0NUTENNRCkK KwkJZ290byBkaXNhYmxlOworCisJcmV0dXJuIDA7CisKK2Rpc2FibGU6CisJcGh5X3Bvd2VyX29m ZihkcGh5KTsKKwlzdW44aV9hODN0X21pcGlfY3NpMl9kaXNhYmxlKGNzaTJfZGV2KTsKKworZXJy b3JfcG06CisJcG1fcnVudGltZV9wdXQoZGV2KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRp YyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdmlkZW9fb3BzCitzdW44aV9hODN0X21pcGlfY3Np Ml92aWRlb19vcHMgPSB7CisJLnNfc3RyZWFtCT0gc3VuOGlfYTgzdF9taXBpX2NzaTJfc19zdHJl YW0sCit9OworCitzdGF0aWMgdm9pZAorc3VuOGlfYTgzdF9taXBpX2NzaTJfbWJ1c19mb3JtYXRf cHJlcGFyZShzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICptYnVzX2Zvcm1hdCkKK3sKKwlpZiAo IXN1bjhpX2E4M3RfbWlwaV9jc2kyX2Zvcm1hdF9maW5kKG1idXNfZm9ybWF0LT5jb2RlKSkKKwkJ bWJ1c19mb3JtYXQtPmNvZGUgPSBzdW44aV9hODN0X21pcGlfY3NpMl9mb3JtYXRzWzBdLm1idXNf Y29kZTsKKworCW1idXNfZm9ybWF0LT5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsKKwltYnVzX2Zv cm1hdC0+Y29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9SQVc7CisJbWJ1c19mb3JtYXQtPnF1 YW50aXphdGlvbiA9IFY0TDJfUVVBTlRJWkFUSU9OX0RFRkFVTFQ7CisJbWJ1c19mb3JtYXQtPnhm ZXJfZnVuYyA9IFY0TDJfWEZFUl9GVU5DX0RFRkFVTFQ7Cit9CisKK3N0YXRpYyBpbnQgc3VuOGlf YTgzdF9taXBpX2NzaTJfaW5pdF9jZmcoc3RydWN0IHY0bDJfc3ViZGV2ICpzdWJkZXYsCisJCQkJ CSBzdHJ1Y3QgdjRsMl9zdWJkZXZfc3RhdGUgKnN0YXRlKQoreworCXVuc2lnbmVkIGludCBwYWQg PSBTVU44SV9BODNUX01JUElfQ1NJMl9QQURfU0lOSzsKKwlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1l Zm10ICptYnVzX2Zvcm1hdCA9CisJCXY0bDJfc3ViZGV2X2dldF90cnlfZm9ybWF0KHN1YmRldiwg c3RhdGUsIHBhZCk7CisKKwltYnVzX2Zvcm1hdC0+Y29kZSA9IHN1bjhpX2E4M3RfbWlwaV9jc2ky X2Zvcm1hdHNbMF0ubWJ1c19jb2RlOworCW1idXNfZm9ybWF0LT53aWR0aCA9IDY0MDsKKwltYnVz X2Zvcm1hdC0+aGVpZ2h0ID0gNDgwOworCisJc3VuOGlfYTgzdF9taXBpX2NzaTJfbWJ1c19mb3Jt YXRfcHJlcGFyZShtYnVzX2Zvcm1hdCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAor c3VuOGlfYTgzdF9taXBpX2NzaTJfZW51bV9tYnVzX2NvZGUoc3RydWN0IHY0bDJfc3ViZGV2ICpz dWJkZXYsCisJCQkJICAgIHN0cnVjdCB2NGwyX3N1YmRldl9zdGF0ZSAqc3RhdGUsCisJCQkJICAg IHN0cnVjdCB2NGwyX3N1YmRldl9tYnVzX2NvZGVfZW51bSAqY29kZV9lbnVtKQoreworCWlmIChj b2RlX2VudW0tPmluZGV4ID49IEFSUkFZX1NJWkUoc3VuOGlfYTgzdF9taXBpX2NzaTJfZm9ybWF0 cykpCisJCXJldHVybiAtRUlOVkFMOworCisJY29kZV9lbnVtLT5jb2RlID0KKwkJc3VuOGlfYTgz dF9taXBpX2NzaTJfZm9ybWF0c1tjb2RlX2VudW0tPmluZGV4XS5tYnVzX2NvZGU7CisKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIGludCBzdW44aV9hODN0X21pcGlfY3NpMl9nZXRfZm10KHN0cnVj dCB2NGwyX3N1YmRldiAqc3ViZGV2LAorCQkJCQlzdHJ1Y3QgdjRsMl9zdWJkZXZfc3RhdGUgKnN0 YXRlLAorCQkJCQlzdHJ1Y3QgdjRsMl9zdWJkZXZfZm9ybWF0ICpmb3JtYXQpCit7CisJc3RydWN0 IHN1bjhpX2E4M3RfbWlwaV9jc2kyX2RldmljZSAqY3NpMl9kZXYgPQorCQl2NGwyX2dldF9zdWJk ZXZkYXRhKHN1YmRldik7CisJc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCAqbWJ1c19mb3JtYXQg PSAmZm9ybWF0LT5mb3JtYXQ7CisKKwlpZiAoZm9ybWF0LT53aGljaCA9PSBWNEwyX1NVQkRFVl9G T1JNQVRfVFJZKQorCQkqbWJ1c19mb3JtYXQgPSAqdjRsMl9zdWJkZXZfZ2V0X3RyeV9mb3JtYXQo c3ViZGV2LCBzdGF0ZSwKKwkJCQkJCQkgICBmb3JtYXQtPnBhZCk7CisJZWxzZQorCQkqbWJ1c19m b3JtYXQgPSBjc2kyX2Rldi0+YnJpZGdlLm1idXNfZm9ybWF0OworCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQgc3VuOGlfYTgzdF9taXBpX2NzaTJfc2V0X2ZtdChzdHJ1Y3QgdjRsMl9zdWJk ZXYgKnN1YmRldiwKKwkJCQkJc3RydWN0IHY0bDJfc3ViZGV2X3N0YXRlICpzdGF0ZSwKKwkJCQkJ c3RydWN0IHY0bDJfc3ViZGV2X2Zvcm1hdCAqZm9ybWF0KQoreworCXN0cnVjdCBzdW44aV9hODN0 X21pcGlfY3NpMl9kZXZpY2UgKmNzaTJfZGV2ID0KKwkJdjRsMl9nZXRfc3ViZGV2ZGF0YShzdWJk ZXYpOworCXN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgKm1idXNfZm9ybWF0ID0gJmZvcm1hdC0+ Zm9ybWF0OworCisJc3VuOGlfYTgzdF9taXBpX2NzaTJfbWJ1c19mb3JtYXRfcHJlcGFyZShtYnVz X2Zvcm1hdCk7CisKKwlpZiAoZm9ybWF0LT53aGljaCA9PSBWNEwyX1NVQkRFVl9GT1JNQVRfVFJZ KQorCQkqdjRsMl9zdWJkZXZfZ2V0X3RyeV9mb3JtYXQoc3ViZGV2LCBzdGF0ZSwgZm9ybWF0LT5w YWQpID0KKwkJCSptYnVzX2Zvcm1hdDsKKwllbHNlCisJCWNzaTJfZGV2LT5icmlkZ2UubWJ1c19m b3JtYXQgPSAqbWJ1c19mb3JtYXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0 cnVjdCB2NGwyX3N1YmRldl9wYWRfb3BzIHN1bjhpX2E4M3RfbWlwaV9jc2kyX3BhZF9vcHMgPSB7 CisJLmluaXRfY2ZnCT0gc3VuOGlfYTgzdF9taXBpX2NzaTJfaW5pdF9jZmcsCisJLmVudW1fbWJ1 c19jb2RlCT0gc3VuOGlfYTgzdF9taXBpX2NzaTJfZW51bV9tYnVzX2NvZGUsCisJLmdldF9mbXQJ PSBzdW44aV9hODN0X21pcGlfY3NpMl9nZXRfZm10LAorCS5zZXRfZm10CT0gc3VuOGlfYTgzdF9t aXBpX2NzaTJfc2V0X2ZtdCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZf b3BzIHN1bjhpX2E4M3RfbWlwaV9jc2kyX3N1YmRldl9vcHMgPSB7CisJLnZpZGVvCT0gJnN1bjhp X2E4M3RfbWlwaV9jc2kyX3ZpZGVvX29wcywKKwkucGFkCT0gJnN1bjhpX2E4M3RfbWlwaV9jc2ky X3BhZF9vcHMsCit9OworCisvKiBNZWRpYSBFbnRpdHkgKi8KKworc3RhdGljIGNvbnN0IHN0cnVj dCBtZWRpYV9lbnRpdHlfb3BlcmF0aW9ucyBzdW44aV9hODN0X21pcGlfY3NpMl9lbnRpdHlfb3Bz ID0geworCS5saW5rX3ZhbGlkYXRlCT0gdjRsMl9zdWJkZXZfbGlua192YWxpZGF0ZSwKK307CisK Ky8qIFY0TDIgQXN5bmMgKi8KKworc3RhdGljIGludAorc3VuOGlfYTgzdF9taXBpX2NzaTJfbm90 aWZpZXJfYm91bmQoc3RydWN0IHY0bDJfYXN5bmNfbm90aWZpZXIgKm5vdGlmaWVyLAorCQkJCSAg ICBzdHJ1Y3QgdjRsMl9zdWJkZXYgKnJlbW90ZV9zdWJkZXYsCisJCQkJICAgIHN0cnVjdCB2NGwy X2FzeW5jX3N1YmRldiAqYXN5bmNfc3ViZGV2KQoreworCXN0cnVjdCB2NGwyX3N1YmRldiAqc3Vi ZGV2ID0gbm90aWZpZXItPnNkOworCXN0cnVjdCBzdW44aV9hODN0X21pcGlfY3NpMl9kZXZpY2Ug KmNzaTJfZGV2ID0KKwkJY29udGFpbmVyX29mKG5vdGlmaWVyLCBzdHJ1Y3Qgc3VuOGlfYTgzdF9t aXBpX2NzaTJfZGV2aWNlLAorCQkJICAgICBicmlkZ2Uubm90aWZpZXIpOworCXN0cnVjdCBtZWRp YV9lbnRpdHkgKnNpbmtfZW50aXR5ID0gJnN1YmRldi0+ZW50aXR5OworCXN0cnVjdCBtZWRpYV9l bnRpdHkgKnNvdXJjZV9lbnRpdHkgPSAmcmVtb3RlX3N1YmRldi0+ZW50aXR5OworCXN0cnVjdCBk ZXZpY2UgKmRldiA9IGNzaTJfZGV2LT5kZXY7CisJaW50IHNpbmtfcGFkX2luZGV4ID0gMDsKKwlp bnQgc291cmNlX3BhZF9pbmRleDsKKwlpbnQgcmV0OworCisJcmV0ID0gbWVkaWFfZW50aXR5X2dl dF9md25vZGVfcGFkKHNvdXJjZV9lbnRpdHksIHJlbW90ZV9zdWJkZXYtPmZ3bm9kZSwKKwkJCQkJ ICBNRURJQV9QQURfRkxfU09VUkNFKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwg Im1pc3Npbmcgc291cmNlIHBhZCBpbiBleHRlcm5hbCBlbnRpdHkgJXNcbiIsCisJCQlzb3VyY2Vf ZW50aXR5LT5uYW1lKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc291cmNlX3BhZF9pbmRl eCA9IHJldDsKKworCWRldl9kYmcoZGV2LCAiY3JlYXRpbmcgJXM6JXUgLT4gJXM6JXUgbGlua1xu Iiwgc291cmNlX2VudGl0eS0+bmFtZSwKKwkJc291cmNlX3BhZF9pbmRleCwgc2lua19lbnRpdHkt Pm5hbWUsIHNpbmtfcGFkX2luZGV4KTsKKworCXJldCA9IG1lZGlhX2NyZWF0ZV9wYWRfbGluayhz b3VyY2VfZW50aXR5LCBzb3VyY2VfcGFkX2luZGV4LAorCQkJCSAgICBzaW5rX2VudGl0eSwgc2lu a19wYWRfaW5kZXgsCisJCQkJICAgIE1FRElBX0xOS19GTF9FTkFCTEVEIHwKKwkJCQkgICAgTUVE SUFfTE5LX0ZMX0lNTVVUQUJMRSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgImZhaWxl ZCB0byBjcmVhdGUgJXM6JXUgLT4gJXM6JXUgbGlua1xuIiwKKwkJCXNvdXJjZV9lbnRpdHktPm5h bWUsIHNvdXJjZV9wYWRfaW5kZXgsCisJCQlzaW5rX2VudGl0eS0+bmFtZSwgc2lua19wYWRfaW5k ZXgpOworCQlyZXR1cm4gcmV0OworCX0KKworCWNzaTJfZGV2LT5icmlkZ2Uuc291cmNlX3N1YmRl diA9IHJlbW90ZV9zdWJkZXY7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVj dCB2NGwyX2FzeW5jX25vdGlmaWVyX29wZXJhdGlvbnMKK3N1bjhpX2E4M3RfbWlwaV9jc2kyX25v dGlmaWVyX29wcyA9IHsKKwkuYm91bmQJPSBzdW44aV9hODN0X21pcGlfY3NpMl9ub3RpZmllcl9i b3VuZCwKK307CisKKy8qIEJyaWRnZSAqLworCitzdGF0aWMgaW50CitzdW44aV9hODN0X21pcGlf Y3NpMl9icmlkZ2Vfc291cmNlX3NldHVwKHN0cnVjdCBzdW44aV9hODN0X21pcGlfY3NpMl9kZXZp Y2UgKmNzaTJfZGV2KQoreworCXN0cnVjdCB2NGwyX2FzeW5jX25vdGlmaWVyICpub3RpZmllciA9 ICZjc2kyX2Rldi0+YnJpZGdlLm5vdGlmaWVyOworCXN0cnVjdCB2NGwyX2Z3bm9kZV9lbmRwb2lu dCAqZW5kcG9pbnQgPSAmY3NpMl9kZXYtPmJyaWRnZS5lbmRwb2ludDsKKwlzdHJ1Y3QgdjRsMl9h c3luY19zdWJkZXYgKnN1YmRldl9hc3luYzsKKwlzdHJ1Y3QgZndub2RlX2hhbmRsZSAqaGFuZGxl OworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNzaTJfZGV2LT5kZXY7CisJaW50IHJldDsKKworCWhh bmRsZSA9IGZ3bm9kZV9ncmFwaF9nZXRfZW5kcG9pbnRfYnlfaWQoZGV2X2Z3bm9kZShkZXYpLCAw LCAwLAorCQkJCQkJIEZXTk9ERV9HUkFQSF9FTkRQT0lOVF9ORVhUKTsKKwlpZiAoIWhhbmRsZSkK KwkJcmV0dXJuIC1FTk9ERVY7CisKKwllbmRwb2ludC0+YnVzX3R5cGUgPSBWNEwyX01CVVNfQ1NJ Ml9EUEhZOworCisJcmV0ID0gdjRsMl9md25vZGVfZW5kcG9pbnRfcGFyc2UoaGFuZGxlLCBlbmRw b2ludCk7CisJaWYgKHJldCkKKwkJZ290byBjb21wbGV0ZTsKKworCXN1YmRldl9hc3luYyA9IHY0 bDJfYXN5bmNfbmZfYWRkX2Z3bm9kZV9yZW1vdGUobm90aWZpZXIsIGhhbmRsZSwKKwkJc3RydWN0 IHY0bDJfYXN5bmNfc3ViZGV2KTsKKwlpZiAoSVNfRVJSKHN1YmRldl9hc3luYykpCisJCXJldCA9 IFBUUl9FUlIoc3ViZGV2X2FzeW5jKTsKKworY29tcGxldGU6CisJZndub2RlX2hhbmRsZV9wdXQo aGFuZGxlKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK3N1bjhpX2E4M3RfbWlw aV9jc2kyX2JyaWRnZV9zZXR1cChzdHJ1Y3Qgc3VuOGlfYTgzdF9taXBpX2NzaTJfZGV2aWNlICpj c2kyX2RldikKK3sKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnN1YmRldiA9ICZjc2kyX2Rldi0+YnJp ZGdlLnN1YmRldjsKKwlzdHJ1Y3QgdjRsMl9hc3luY19ub3RpZmllciAqbm90aWZpZXIgPSAmY3Np Ml9kZXYtPmJyaWRnZS5ub3RpZmllcjsKKwlzdHJ1Y3QgbWVkaWFfcGFkICpwYWRzID0gY3NpMl9k ZXYtPmJyaWRnZS5wYWRzOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNzaTJfZGV2LT5kZXY7CisJ aW50IHJldDsKKworCS8qIFY0TDIgU3ViZGV2ICovCisKKwl2NGwyX3N1YmRldl9pbml0KHN1YmRl diwgJnN1bjhpX2E4M3RfbWlwaV9jc2kyX3N1YmRldl9vcHMpOworCXN0cnNjcHkoc3ViZGV2LT5u YW1lLCBTVU44SV9BODNUX01JUElfQ1NJMl9OQU1FLCBzaXplb2Yoc3ViZGV2LT5uYW1lKSk7CisJ c3ViZGV2LT5mbGFncyB8PSBWNEwyX1NVQkRFVl9GTF9IQVNfREVWTk9ERTsKKwlzdWJkZXYtPm93 bmVyID0gVEhJU19NT0RVTEU7CisJc3ViZGV2LT5kZXYgPSBkZXY7CisKKwl2NGwyX3NldF9zdWJk ZXZkYXRhKHN1YmRldiwgY3NpMl9kZXYpOworCisJLyogTWVkaWEgRW50aXR5ICovCisKKwlzdWJk ZXYtPmVudGl0eS5mdW5jdGlvbiA9IE1FRElBX0VOVF9GX1ZJRF9JRl9CUklER0U7CisJc3ViZGV2 LT5lbnRpdHkub3BzID0gJnN1bjhpX2E4M3RfbWlwaV9jc2kyX2VudGl0eV9vcHM7CisKKwkvKiBN ZWRpYSBQYWRzICovCisKKwlwYWRzW1NVTjhJX0E4M1RfTUlQSV9DU0kyX1BBRF9TSU5LXS5mbGFn cyA9IE1FRElBX1BBRF9GTF9TSU5LOworCXBhZHNbU1VOOElfQTgzVF9NSVBJX0NTSTJfUEFEX1NP VVJDRV0uZmxhZ3MgPSBNRURJQV9QQURfRkxfU09VUkNFOworCisJcmV0ID0gbWVkaWFfZW50aXR5 X3BhZHNfaW5pdCgmc3ViZGV2LT5lbnRpdHksCisJCQkJICAgICBTVU44SV9BODNUX01JUElfQ1NJ Ml9QQURfQ09VTlQsIHBhZHMpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBWNEwy IEFzeW5jICovCisKKwl2NGwyX2FzeW5jX25mX2luaXQobm90aWZpZXIpOworCW5vdGlmaWVyLT5v cHMgPSAmc3VuOGlfYTgzdF9taXBpX2NzaTJfbm90aWZpZXJfb3BzOworCisJcmV0ID0gc3VuOGlf YTgzdF9taXBpX2NzaTJfYnJpZGdlX3NvdXJjZV9zZXR1cChjc2kyX2Rldik7CisJaWYgKHJldCkK KwkJZ290byBlcnJvcl92NGwyX25vdGlmaWVyX2NsZWFudXA7CisKKwlyZXQgPSB2NGwyX2FzeW5j X3N1YmRldl9uZl9yZWdpc3RlcihzdWJkZXYsIG5vdGlmaWVyKTsKKwlpZiAocmV0IDwgMCkKKwkJ Z290byBlcnJvcl92NGwyX25vdGlmaWVyX2NsZWFudXA7CisKKwkvKiBWNEwyIFN1YmRldiAqLwor CisJcmV0ID0gdjRsMl9hc3luY19yZWdpc3Rlcl9zdWJkZXYoc3ViZGV2KTsKKwlpZiAocmV0IDwg MCkKKwkJZ290byBlcnJvcl92NGwyX25vdGlmaWVyX3VucmVnaXN0ZXI7CisKKwlyZXR1cm4gMDsK KworZXJyb3JfdjRsMl9ub3RpZmllcl91bnJlZ2lzdGVyOgorCXY0bDJfYXN5bmNfbmZfdW5yZWdp c3Rlcihub3RpZmllcik7CisKK2Vycm9yX3Y0bDJfbm90aWZpZXJfY2xlYW51cDoKKwl2NGwyX2Fz eW5jX25mX2NsZWFudXAobm90aWZpZXIpOworCisJbWVkaWFfZW50aXR5X2NsZWFudXAoJnN1YmRl di0+ZW50aXR5KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkCitzdW44aV9hODN0 X21pcGlfY3NpMl9icmlkZ2VfY2xlYW51cChzdHJ1Y3Qgc3VuOGlfYTgzdF9taXBpX2NzaTJfZGV2 aWNlICpjc2kyX2RldikKK3sKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnN1YmRldiA9ICZjc2kyX2Rl di0+YnJpZGdlLnN1YmRldjsKKwlzdHJ1Y3QgdjRsMl9hc3luY19ub3RpZmllciAqbm90aWZpZXIg PSAmY3NpMl9kZXYtPmJyaWRnZS5ub3RpZmllcjsKKworCXY0bDJfYXN5bmNfdW5yZWdpc3Rlcl9z dWJkZXYoc3ViZGV2KTsKKwl2NGwyX2FzeW5jX25mX3VucmVnaXN0ZXIobm90aWZpZXIpOworCXY0 bDJfYXN5bmNfbmZfY2xlYW51cChub3RpZmllcik7CisJbWVkaWFfZW50aXR5X2NsZWFudXAoJnN1 YmRldi0+ZW50aXR5KTsKK30KKworLyogUGxhdGZvcm0gKi8KKworc3RhdGljIGludCBzdW44aV9h ODN0X21pcGlfY3NpMl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc3Vu OGlfYTgzdF9taXBpX2NzaTJfZGV2aWNlICpjc2kyX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYp OworCisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGNzaTJfZGV2LT5jbGtfbWlzYyk7CisJY2xrX2Rp c2FibGVfdW5wcmVwYXJlKGNzaTJfZGV2LT5jbGtfbWlwaSk7CisJY2xrX2Rpc2FibGVfdW5wcmVw YXJlKGNzaTJfZGV2LT5jbGtfbW9kKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoY3NpMl9kZXYt PmNsa19idXMpOworCXJlc2V0X2NvbnRyb2xfYXNzZXJ0KGNzaTJfZGV2LT5yZXNldCk7CisKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdW44aV9hODN0X21pcGlfY3NpMl9yZXN1bWUoc3Ry dWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBzdW44aV9hODN0X21pcGlfY3NpMl9kZXZpY2Ug KmNzaTJfZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IHJldDsKKworCXJldCA9IHJl c2V0X2NvbnRyb2xfZGVhc3NlcnQoY3NpMl9kZXYtPnJlc2V0KTsKKwlpZiAocmV0KSB7CisJCWRl dl9lcnIoZGV2LCAiZmFpbGVkIHRvIGRlYXNzZXJ0IHJlc2V0XG4iKTsKKwkJcmV0dXJuIHJldDsK Kwl9CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoY3NpMl9kZXYtPmNsa19idXMpOworCWlm IChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZW5hYmxlIGJ1cyBjbG9ja1xuIik7 CisJCWdvdG8gZXJyb3JfcmVzZXQ7CisJfQorCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGNz aTJfZGV2LT5jbGtfbW9kKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRv IGVuYWJsZSBtb2R1bGUgY2xvY2tcbiIpOworCQlnb3RvIGVycm9yX2Nsa19idXM7CisJfQorCisJ cmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGNzaTJfZGV2LT5jbGtfbWlwaSk7CisJaWYgKHJldCkg eworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBlbmFibGUgTUlQSSBjbG9ja1xuIik7CisJCWdv dG8gZXJyb3JfY2xrX21vZDsKKwl9CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoY3NpMl9k ZXYtPmNsa19taXNjKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGVu YWJsZSBDU0kgbWlzYyBjbG9ja1xuIik7CisJCWdvdG8gZXJyb3JfY2xrX21pcGk7CisJfQorCisJ c3VuOGlfYTgzdF9taXBpX2NzaTJfaW5pdChjc2kyX2Rldik7CisKKwlyZXR1cm4gMDsKKworZXJy b3JfY2xrX21pcGk6CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGNzaTJfZGV2LT5jbGtfbWlwaSk7 CisKK2Vycm9yX2Nsa19tb2Q6CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGNzaTJfZGV2LT5jbGtf bW9kKTsKKworZXJyb3JfY2xrX2J1czoKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoY3NpMl9kZXYt PmNsa19idXMpOworCitlcnJvcl9yZXNldDoKKwlyZXNldF9jb250cm9sX2Fzc2VydChjc2kyX2Rl di0+cmVzZXQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZf cG1fb3BzIHN1bjhpX2E4M3RfbWlwaV9jc2kyX3BtX29wcyA9IHsKKwlTRVRfUlVOVElNRV9QTV9P UFMoc3VuOGlfYTgzdF9taXBpX2NzaTJfc3VzcGVuZCwKKwkJCSAgIHN1bjhpX2E4M3RfbWlwaV9j c2kyX3Jlc3VtZSwgTlVMTCkKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZp ZyBzdW44aV9hODN0X21pcGlfY3NpMl9yZWdtYXBfY29uZmlnID0geworCS5yZWdfYml0cyAgICAg ICA9IDMyLAorCS5yZWdfc3RyaWRlICAgICA9IDQsCisJLnZhbF9iaXRzICAgICAgID0gMzIsCisJ Lm1heF9yZWdpc3Rlcgk9IDB4MTIwLAorfTsKKworc3RhdGljIGludAorc3VuOGlfYTgzdF9taXBp X2NzaTJfcmVzb3VyY2VzX3NldHVwKHN0cnVjdCBzdW44aV9hODN0X21pcGlfY3NpMl9kZXZpY2Ug KmNzaTJfZGV2LAorCQkJCSAgICAgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGZvcm1fZGV2 KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNzaTJfZGV2LT5kZXY7CisJc3RydWN0IHJlc291 cmNlICpyZXM7CisJdm9pZCBfX2lvbWVtICppb19iYXNlOworCWludCByZXQ7CisKKwkvKiBSZWdp c3RlcnMgKi8KKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwbGF0Zm9ybV9kZXYsIElP UkVTT1VSQ0VfTUVNLCAwKTsKKwlpb19iYXNlID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwg cmVzKTsKKwlpZiAoSVNfRVJSKGlvX2Jhc2UpKQorCQlyZXR1cm4gUFRSX0VSUihpb19iYXNlKTsK KworCWNzaTJfZGV2LT5yZWdtYXAgPQorCQlkZXZtX3JlZ21hcF9pbml0X21taW8oZGV2LCBpb19i YXNlLAorCQkJCSAgICAgICZzdW44aV9hODN0X21pcGlfY3NpMl9yZWdtYXBfY29uZmlnKTsKKwlp ZiAoSVNfRVJSKGNzaTJfZGV2LT5yZWdtYXApKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRv IGluaXQgcmVnaXN0ZXIgbWFwXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoY3NpMl9kZXYtPnJlZ21h cCk7CisJfQorCisJLyogQ2xvY2tzICovCisKKwljc2kyX2Rldi0+Y2xrX2J1cyA9IGRldm1fY2xr X2dldChkZXYsICJidXMiKTsKKwlpZiAoSVNfRVJSKGNzaTJfZGV2LT5jbGtfYnVzKSkgeworCQlk ZXZfZXJyKGRldiwgImZhaWxlZCB0byBhY3F1aXJlIGJ1cyBjbG9ja1xuIik7CisJCXJldHVybiBQ VFJfRVJSKGNzaTJfZGV2LT5jbGtfYnVzKTsKKwl9CisKKwljc2kyX2Rldi0+Y2xrX21vZCA9IGRl dm1fY2xrX2dldChkZXYsICJtb2QiKTsKKwlpZiAoSVNfRVJSKGNzaTJfZGV2LT5jbGtfbW9kKSkg eworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBhY3F1aXJlIG1vZCBjbG9ja1xuIik7CisJCXJl dHVybiBQVFJfRVJSKGNzaTJfZGV2LT5jbGtfbW9kKTsKKwl9CisKKwlyZXQgPSBjbGtfc2V0X3Jh dGVfZXhjbHVzaXZlKGNzaTJfZGV2LT5jbGtfbW9kLCAyOTcwMDAwMDApOworCWlmIChyZXQpIHsK KwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gc2V0IG1vZCBjbG9jayByYXRlXG4iKTsKKwkJcmV0 dXJuIHJldDsKKwl9CisKKwljc2kyX2Rldi0+Y2xrX21pcGkgPSBkZXZtX2Nsa19nZXQoZGV2LCAi bWlwaSIpOworCWlmIChJU19FUlIoY3NpMl9kZXYtPmNsa19taXBpKSkgeworCQlkZXZfZXJyKGRl diwgImZhaWxlZCB0byBhY3F1aXJlIG1pcGkgY2xvY2tcbiIpOworCQlyZXR1cm4gUFRSX0VSUihj c2kyX2Rldi0+Y2xrX21pcGkpOworCX0KKworCWNzaTJfZGV2LT5jbGtfbWlzYyA9IGRldm1fY2xr X2dldChkZXYsICJtaXNjIik7CisJaWYgKElTX0VSUihjc2kyX2Rldi0+Y2xrX21pc2MpKSB7CisJ CWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGFjcXVpcmUgbWlzYyBjbG9ja1xuIik7CisJCXJldHVy biBQVFJfRVJSKGNzaTJfZGV2LT5jbGtfbWlzYyk7CisJfQorCisJLyogUmVzZXQgKi8KKworCWNz aTJfZGV2LT5yZXNldCA9IGRldm1fcmVzZXRfY29udHJvbF9nZXRfc2hhcmVkKGRldiwgTlVMTCk7 CisJaWYgKElTX0VSUihjc2kyX2Rldi0+cmVzZXQpKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVk IHRvIGdldCByZXNldCBjb250cm9sbGVyXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoY3NpMl9kZXYt PnJlc2V0KTsKKwl9CisKKwkvKiBELVBIWSAqLworCisJcmV0ID0gc3VuOGlfYTgzdF9kcGh5X3Jl Z2lzdGVyKGNzaTJfZGV2KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRv IGluaXRpYWxpemUgTUlQSSBELVBIWVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogUnVu dGltZSBQTSAqLworCisJcG1fcnVudGltZV9lbmFibGUoZGV2KTsKKwlwbV9ydW50aW1lX3NldF9z dXNwZW5kZWQoZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorc3VuOGlfYTgz dF9taXBpX2NzaTJfcmVzb3VyY2VzX2NsZWFudXAoc3RydWN0IHN1bjhpX2E4M3RfbWlwaV9jc2ky X2RldmljZSAqY3NpMl9kZXYpCit7CisJcG1fcnVudGltZV9kaXNhYmxlKGNzaTJfZGV2LT5kZXYp OworCXBoeV9leGl0KGNzaTJfZGV2LT5kcGh5KTsKKwljbGtfcmF0ZV9leGNsdXNpdmVfcHV0KGNz aTJfZGV2LT5jbGtfbW9kKTsKK30KKworc3RhdGljIGludCBzdW44aV9hODN0X21pcGlfY3NpMl9w cm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0Zm9ybV9kZXYpCit7CisJc3RydWN0IHN1 bjhpX2E4M3RfbWlwaV9jc2kyX2RldmljZSAqY3NpMl9kZXY7CisJc3RydWN0IGRldmljZSAqZGV2 ID0gJnBsYXRmb3JtX2Rldi0+ZGV2OworCWludCByZXQ7CisKKwljc2kyX2RldiA9IGRldm1fa3ph bGxvYyhkZXYsIHNpemVvZigqY3NpMl9kZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNzaTJfZGV2 KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNzaTJfZGV2LT5kZXYgPSBkZXY7CisJcGxhdGZvcm1f c2V0X2RydmRhdGEocGxhdGZvcm1fZGV2LCBjc2kyX2Rldik7CisKKwlyZXQgPSBzdW44aV9hODN0 X21pcGlfY3NpMl9yZXNvdXJjZXNfc2V0dXAoY3NpMl9kZXYsIHBsYXRmb3JtX2Rldik7CisJaWYg KHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHN1bjhpX2E4M3RfbWlwaV9jc2kyX2JyaWRn ZV9zZXR1cChjc2kyX2Rldik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAw OworfQorCitzdGF0aWMgaW50IHN1bjhpX2E4M3RfbWlwaV9jc2kyX3JlbW92ZShzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwbGF0Zm9ybV9kZXYpCit7CisJc3RydWN0IHN1bjhpX2E4M3RfbWlwaV9j c2kyX2RldmljZSAqY3NpMl9kZXYgPQorCQlwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwbGF0Zm9ybV9k ZXYpOworCisJc3VuOGlfYTgzdF9taXBpX2NzaTJfYnJpZGdlX2NsZWFudXAoY3NpMl9kZXYpOwor CXN1bjhpX2E4M3RfbWlwaV9jc2kyX3Jlc291cmNlc19jbGVhbnVwKGNzaTJfZGV2KTsKKworCXJl dHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBzdW44aV9hODN0 X21pcGlfY3NpMl9vZl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1 bjhpLWE4M3QtbWlwaS1jc2kyIiB9LAorCXt9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2Ys IHN1bjhpX2E4M3RfbWlwaV9jc2kyX29mX21hdGNoKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9y bV9kcml2ZXIgc3VuOGlfYTgzdF9taXBpX2NzaTJfcGxhdGZvcm1fZHJpdmVyID0geworCS5wcm9i ZSA9IHN1bjhpX2E4M3RfbWlwaV9jc2kyX3Byb2JlLAorCS5yZW1vdmUgPSBzdW44aV9hODN0X21p cGlfY3NpMl9yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSBTVU44SV9BODNUX01JUElf Q1NJMl9OQU1FLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBvZl9tYXRjaF9wdHIoc3VuOGlfYTgzdF9t aXBpX2NzaTJfb2ZfbWF0Y2gpLAorCQkucG0gPSAmc3VuOGlfYTgzdF9taXBpX2NzaTJfcG1fb3Bz LAorCX0sCit9OworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihzdW44aV9hODN0X21pcGlfY3NpMl9w bGF0Zm9ybV9kcml2ZXIpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkFsbHdpbm5lciBBODNUIE1J UEkgQ1NJLTIgYW5kIEQtUEhZIENvbnRyb2xsZXIgRHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJQ YXVsIEtvY2lhbGtvd3NraSA8cGF1bC5rb2NpYWxrb3dza2lAYm9vdGxpbi5jb20+Iik7CitNT0RV TEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3N1 bnhpL3N1bjhpLWE4M3QtbWlwaS1jc2kyL3N1bjhpX2E4M3RfbWlwaV9jc2kyLmggYi9kcml2ZXJz L21lZGlhL3BsYXRmb3JtL3N1bnhpL3N1bjhpLWE4M3QtbWlwaS1jc2kyL3N1bjhpX2E4M3RfbWlw aV9jc2kyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4xODNmNDIz MzljNTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3N1bnhpL3N1 bjhpLWE4M3QtbWlwaS1jc2kyL3N1bjhpX2E4M3RfbWlwaV9jc2kyLmgKQEAgLTAsMCArMSw1NSBA QAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArICovCisvKgorICogQ29weXJp Z2h0IDIwMjAgS8OpdmluIEwnaMO0cGl0YWwgPGtldmluLmxob3BpdGFsQGJvb3RsaW4uY29tPgor ICogQ29weXJpZ2h0IDIwMjAgQm9vdGxpbgorICogQXV0aG9yOiBQYXVsIEtvY2lhbGtvd3NraSA8 cGF1bC5rb2NpYWxrb3dza2lAYm9vdGxpbi5jb20+CisgKi8KKworI2lmbmRlZiBfU1VOOElfQTgz VF9NSVBJX0NTSTJfSF8KKyNkZWZpbmUgX1NVTjhJX0E4M1RfTUlQSV9DU0kyX0hfCisKKyNpbmNs dWRlIDxsaW51eC9waHkvcGh5Lmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisjaW5jbHVk ZSA8bGludXgvcmVzZXQuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorI2luY2x1 ZGUgPG1lZGlhL3Y0bDItZndub2RlLmg+CisKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJf TkFNRQkic3VuOGktYTgzdC1taXBpLWNzaTIiCisKK2VudW0gc3VuOGlfYTgzdF9taXBpX2NzaTJf cGFkIHsKKwlTVU44SV9BODNUX01JUElfQ1NJMl9QQURfU0lOSwk9IDAsCisJU1VOOElfQTgzVF9N SVBJX0NTSTJfUEFEX1NPVVJDRQk9IDEsCisJU1VOOElfQTgzVF9NSVBJX0NTSTJfUEFEX0NPVU5U CT0gMiwKK307CisKK3N0cnVjdCBzdW44aV9hODN0X21pcGlfY3NpMl9mb3JtYXQgeworCXUzMglt YnVzX2NvZGU7CisJdTgJZGF0YV90eXBlOworCXUzMglicHA7Cit9OworCitzdHJ1Y3Qgc3VuOGlf YTgzdF9taXBpX2NzaTJfYnJpZGdlIHsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYJCXN1YmRldjsKKwlz dHJ1Y3QgbWVkaWFfcGFkCQlwYWRzW1NVTjhJX0E4M1RfTUlQSV9DU0kyX1BBRF9DT1VOVF07CisJ c3RydWN0IHY0bDJfZndub2RlX2VuZHBvaW50CWVuZHBvaW50OworCXN0cnVjdCB2NGwyX2FzeW5j X25vdGlmaWVyCW5vdGlmaWVyOworCXN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQJbWJ1c19mb3Jt YXQ7CisKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYJCSpzb3VyY2Vfc3ViZGV2OworfTsKKworc3RydWN0 IHN1bjhpX2E4M3RfbWlwaV9jc2kyX2RldmljZSB7CisJc3RydWN0IGRldmljZQkJCQkqZGV2Owor CisJc3RydWN0IHJlZ21hcAkJCQkqcmVnbWFwOworCXN0cnVjdCBjbGsJCQkJKmNsa19idXM7CisJ c3RydWN0IGNsawkJCQkqY2xrX21vZDsKKwlzdHJ1Y3QgY2xrCQkJCSpjbGtfbWlwaTsKKwlzdHJ1 Y3QgY2xrCQkJCSpjbGtfbWlzYzsKKwlzdHJ1Y3QgcmVzZXRfY29udHJvbAkJCSpyZXNldDsKKwlz dHJ1Y3QgcGh5CQkJCSpkcGh5OworCisJc3RydWN0IHN1bjhpX2E4M3RfbWlwaV9jc2kyX2JyaWRn ZQlicmlkZ2U7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZv cm0vc3VueGkvc3VuOGktYTgzdC1taXBpLWNzaTIvc3VuOGlfYTgzdF9taXBpX2NzaTJfcmVnLmgg Yi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3N1bnhpL3N1bjhpLWE4M3QtbWlwaS1jc2kyL3N1bjhp X2E4M3RfbWlwaV9jc2kyX3JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwMC4uZjMzMTdiZDhhZDI0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9wbGF0 Zm9ybS9zdW54aS9zdW44aS1hODN0LW1pcGktY3NpMi9zdW44aV9hODN0X21pcGlfY3NpMl9yZWcu aApAQCAtMCwwICsxLDE1NyBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAr ICovCisvKgorICogQ29weXJpZ2h0IDIwMjAgS8OpdmluIEwnaMO0cGl0YWwgPGtldmluLmxob3Bp dGFsQGJvb3RsaW4uY29tPgorICogQ29weXJpZ2h0IDIwMjAtMjAyMSBCb290bGluCisgKiBBdXRo b3I6IFBhdWwgS29jaWFsa293c2tpIDxwYXVsLmtvY2lhbGtvd3NraUBib290bGluLmNvbT4KKyAq LworCisjaWZuZGVmIF9TVU44SV9BODNUX01JUElfQ1NJMl9SRUdfSF8KKyNkZWZpbmUgX1NVTjhJ X0E4M1RfTUlQSV9DU0kyX1JFR19IXworCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX1ZF UlNJT05fUkVHCQkJMHgwCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0NUUkxfUkVHCQkJ CTB4NAorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9DVFJMX0lOSVRfVkFMVUUJCQkweGI4 YzM5YmVjCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0NUUkxfUkVTRVRfTgkJCUJJVCgz MSkKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfUlhfUEtUX05VTV9SRUcJCQkweDgKKyNk ZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfUlhfUEtUX05VTV9JTklUX1ZBTFVFCQkweGI4ZDI1 N2Y4CisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX1JTVkQwX1JFRwkJCQkweGMKKworI2Rl ZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9SU1ZEMV9SRUcJCQkJMHgxOAorI2RlZmluZSBTVU44 SV9BODNUX01JUElfQ1NJMl9SU1ZEMV9IV19MT0NLX1ZBTFVFCQkweGI4YzhhMzBjCisjZGVmaW5l IFNVTjhJX0E4M1RfTUlQSV9DU0kyX1JTVkQyX1JFRwkJCQkweDFjCisjZGVmaW5lIFNVTjhJX0E4 M1RfTUlQSV9DU0kyX1JTVkQyX0hXX0xPQ0tfVkFMVUUJCTB4YjhkZjhhZDcKKyNkZWZpbmUgU1VO OElfQTgzVF9NSVBJX0NTSTJfSU5UX1NUQTBfUkVHCQkJMHgyMAorI2RlZmluZSBTVU44SV9BODNU X01JUElfQ1NJMl9JTlRfU1RBMF9FQ0NfRVJSX0RCTAkJQklUKDI4KQorI2RlZmluZSBTVU44SV9B ODNUX01JUElfQ1NJMl9JTlRfU1RBMF9MSU5FX0NLU01fRVJSX1ZDMwkJQklUKDI3KQorI2RlZmlu ZSBTVU44SV9BODNUX01JUElfQ1NJMl9JTlRfU1RBMF9MSU5FX0NLU01fRVJSX1ZDMgkJQklUKDI2 KQorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9JTlRfU1RBMF9MSU5FX0NLU01fRVJSX1ZD MQkJQklUKDI1KQorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9JTlRfU1RBMF9MSU5FX0NL U01fRVJSX1ZDMAkJQklUKDI0KQorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9JTlRfU1RB MF9MSU5FX1NFUV9FUlJfRFQzCQlCSVQoMjMpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0ky X0lOVF9TVEEwX0xJTkVfU0VRX0VSUl9EVDIJCUJJVCgyMikKKyNkZWZpbmUgU1VOOElfQTgzVF9N SVBJX0NTSTJfSU5UX1NUQTBfTElORV9TRVFfRVJSX0RUMQkJQklUKDIxKQorI2RlZmluZSBTVU44 SV9BODNUX01JUElfQ1NJMl9JTlRfU1RBMF9MSU5FX1NFUV9FUlJfRFQwCQlCSVQoMjApCisjZGVm aW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9TVEEwX0xTX0xFX0VSUl9EVDMJCUJJVCgxOSkK KyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX1NUQTBfTFNfTEVfRVJSX0RUMgkJQklU KDE4KQorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9JTlRfU1RBMF9MU19MRV9FUlJfRFQx CQlCSVQoMTcpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9TVEEwX0xTX0xFX0VS Ul9EVDAJCUJJVCgxNikKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX1NUQTBfQ1JD X0VSUl9WQzMJCUJJVCgxNSkKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX1NUQTBf Q1JDX0VSUl9WQzIJCUJJVCgxNCkKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX1NU QTBfQ1JDX0VSUl9WQzEJCUJJVCgxMykKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5U X1NUQTBfQ1JDX0VSUl9WQzAJCUJJVCgxMikKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJf SU5UX1NUQTBfRlJNX1NFUV9FUlJfVkMzCQlCSVQoMTEpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQ SV9DU0kyX0lOVF9TVEEwX0ZSTV9TRVFfRVJSX1ZDMgkJQklUKDEwKQorI2RlZmluZSBTVU44SV9B ODNUX01JUElfQ1NJMl9JTlRfU1RBMF9GUk1fU0VRX0VSUl9WQzEJCUJJVCg5KQorI2RlZmluZSBT VU44SV9BODNUX01JUElfQ1NJMl9JTlRfU1RBMF9GUk1fU0VRX0VSUl9WQzAJCUJJVCg4KQorI2Rl ZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9JTlRfU1RBMF9GU19GRV9FUlJfVkMzCQlCSVQoNykK KyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX1NUQTBfRlNfRkVfRVJSX1ZDMgkJQklU KDYpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9TVEEwX0ZTX0ZFX0VSUl9WQzEJ CUJJVCg1KQorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9JTlRfU1RBMF9GU19GRV9FUlJf VkMwCQlCSVQoNCkKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX1NUQTBfU09UX1NZ TkNfRVJSXzMJCUJJVCgzKQorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9JTlRfU1RBMF9T T1RfU1lOQ19FUlJfMgkJQklUKDIpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9T VEEwX1NPVF9TWU5DX0VSUl8xCQlCSVQoMSkKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJf SU5UX1NUQTBfU09UX1NZTkNfRVJSXzAJCUJJVCgwKQorI2RlZmluZSBTVU44SV9BODNUX01JUElf Q1NJMl9JTlRfU1RBMV9SRUcJCQkweDI0CisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lO VF9TVEExX0xJTkVfU0VRX0VSUl9EVDcJCUJJVCgyMykKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJ X0NTSTJfSU5UX1NUQTFfTElORV9TRVFfRVJSX0RUNgkJQklUKDIyKQorI2RlZmluZSBTVU44SV9B ODNUX01JUElfQ1NJMl9JTlRfU1RBMV9MSU5FX1NFUV9FUlJfRFQ1CQlCSVQoMjEpCisjZGVmaW5l IFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9TVEExX0xJTkVfU0VRX0VSUl9EVDQJCUJJVCgyMCkK KyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX1NUQTFfTFNfTEVfRVJSX0RUNwkJQklU KDE5KQorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9JTlRfU1RBMV9MU19MRV9FUlJfRFQ2 CQlCSVQoMTgpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9TVEExX0xTX0xFX0VS Ul9EVDUJCUJJVCgxNykKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX1NUQTFfTFNf TEVfRVJSX0RUNAkJQklUKDE2KQorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9JTlRfU1RB MV9EVF9FUlJfVkMzCQlCSVQoMTUpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9T VEExX0RUX0VSUl9WQzIJCUJJVCgxNCkKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5U X1NUQTFfRFRfRVJSX1ZDMQkJQklUKDEzKQorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9J TlRfU1RBMV9EVF9FUlJfVkMwCQlCSVQoMTIpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0ky X0lOVF9TVEExX0VDQ19FUlIxX1ZDMwkJQklUKDExKQorI2RlZmluZSBTVU44SV9BODNUX01JUElf Q1NJMl9JTlRfU1RBMV9FQ0NfRVJSMV9WQzIJCUJJVCgxMCkKKyNkZWZpbmUgU1VOOElfQTgzVF9N SVBJX0NTSTJfSU5UX1NUQTFfRUNDX0VSUjFfVkMxCQlCSVQoOSkKKyNkZWZpbmUgU1VOOElfQTgz VF9NSVBJX0NTSTJfSU5UX1NUQTFfRUNDX0VSUjFfVkMwCQlCSVQoOCkKKyNkZWZpbmUgU1VOOElf QTgzVF9NSVBJX0NTSTJfSU5UX1NUQTFfU09UX0VSUl8zCQkJQklUKDcpCisjZGVmaW5lIFNVTjhJ X0E4M1RfTUlQSV9DU0kyX0lOVF9TVEExX1NPVF9FUlJfMgkJCUJJVCg2KQorI2RlZmluZSBTVU44 SV9BODNUX01JUElfQ1NJMl9JTlRfU1RBMV9TT1RfRVJSXzEJCQlCSVQoNSkKKyNkZWZpbmUgU1VO OElfQTgzVF9NSVBJX0NTSTJfSU5UX1NUQTFfU09UX0VSUl8wCQkJQklUKDQpCisjZGVmaW5lIFNV TjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9TVEExX0VTQ19FTlRSWV9FUlJfMwkJQklUKDMpCisjZGVm aW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9TVEExX0VTQ19FTlRSWV9FUlJfMgkJQklUKDIp CisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9TVEExX0VTQ19FTlRSWV9FUlJfMQkJ QklUKDEpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9TVEExX0VTQ19FTlRSWV9F UlJfMAkJQklUKDApCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9NU0swX1JFRwkJ CTB4MjgKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX01TSzBfRUNDX0VSUl9EQkwJ CUJJVCgyOCkKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX01TSzBfQ0tTTV9FUlJf VkMzCQlCSVQoMjcpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9NU0swX0NLU01f RVJSX1ZDMgkJQklUKDI2KQorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9JTlRfTVNLMF9D S1NNX0VSUl9WQzEJCUJJVCgyNSkKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX01T SzBfQ0tTTV9FUlJfVkMwCQlCSVQoMjQpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lO VF9NU0swX0xJTkVfU0VRX0VSUl9EVDMJCUJJVCgyMykKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJ X0NTSTJfSU5UX01TSzBfTElORV9TRVFfRVJSX0RUMgkJQklUKDIyKQorI2RlZmluZSBTVU44SV9B ODNUX01JUElfQ1NJMl9JTlRfTVNLMF9MSU5FX1NFUV9FUlJfRFQxCQlCSVQoMjEpCisjZGVmaW5l IFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9NU0swX0xJTkVfU0VRX0VSUl9EVDAJCUJJVCgyMCkK KyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX01TSzBfTFNfTEVfRVJSX0RUMwkJQklU KDE5KQorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9JTlRfTVNLMF9MU19MRV9FUlJfRFQy CQlCSVQoMTgpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9NU0swX0xTX0xFX0VS Ul9EVDEJCUJJVCgxNykKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX01TSzBfTFNf TEVfRVJSX0RUMAkJQklUKDE2KQorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9JTlRfTVNL MF9DUkNfRVJSX1ZDMwkJQklUKDE1KQorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9JTlRf TVNLMF9DUkNfRVJSX1ZDMgkJQklUKDE0KQorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9J TlRfTVNLMF9DUkNfRVJSX1ZDMQkJQklUKDEzKQorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJ Ml9JTlRfTVNLMF9DUkNfRVJSX1ZDMAkJQklUKDEyKQorI2RlZmluZSBTVU44SV9BODNUX01JUElf Q1NJMl9JTlRfTVNLMF9GUk1fU0VRX0VSUl9WQzMJCUJJVCgxMSkKKyNkZWZpbmUgU1VOOElfQTgz VF9NSVBJX0NTSTJfSU5UX01TSzBfRlJNX1NFUV9FUlJfVkMyCQlCSVQoMTApCisjZGVmaW5lIFNV TjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9NU0swX0ZSTV9TRVFfRVJSX1ZDMQkJQklUKDkpCisjZGVm aW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9NU0swX0ZSTV9TRVFfRVJSX1ZDMAkJQklUKDgp CisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9NU0swX0ZTX0ZFX0VSUl9WQzMJCUJJ VCg3KQorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9JTlRfTVNLMF9GU19GRV9FUlJfVkMy CQlCSVQoNikKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX01TSzBfRlNfRkVfRVJS X1ZDMQkJQklUKDUpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9NU0swX0ZTX0ZF X0VSUl9WQzAJCUJJVCg0KQorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9JTlRfTVNLMF9T T1RfU1lOQ19FUlJfMwkJQklUKDMpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9N U0swX1NPVF9TWU5DX0VSUl8yCQlCSVQoMikKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJf SU5UX01TSzBfU09UX1NZTkNfRVJSXzEJCUJJVCgxKQorI2RlZmluZSBTVU44SV9BODNUX01JUElf Q1NJMl9JTlRfTVNLMF9TT1RfU1lOQ19FUlJfMAkJQklUKDApCisjZGVmaW5lIFNVTjhJX0E4M1Rf TUlQSV9DU0kyX0lOVF9NU0sxX1JFRwkJCTB4MmMKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NT STJfSU5UX01TSzFfRFRfRVJSX1ZDMwkJQklUKDE1KQorI2RlZmluZSBTVU44SV9BODNUX01JUElf Q1NJMl9JTlRfTVNLMV9EVF9FUlJfVkMyCQlCSVQoMTQpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQ SV9DU0kyX0lOVF9NU0sxX0RUX0VSUl9WQzEJCUJJVCgxMykKKyNkZWZpbmUgU1VOOElfQTgzVF9N SVBJX0NTSTJfSU5UX01TSzFfRFRfRVJSX1ZDMAkJQklUKDEyKQorI2RlZmluZSBTVU44SV9BODNU X01JUElfQ1NJMl9JTlRfTVNLMV9FQ0NfRVJSMV9WQzMJCUJJVCgxMSkKKyNkZWZpbmUgU1VOOElf QTgzVF9NSVBJX0NTSTJfSU5UX01TSzFfRUNDX0VSUjFfVkMyCQlCSVQoMTApCisjZGVmaW5lIFNV TjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9NU0sxX0VDQ19FUlIxX1ZDMQkJQklUKDkpCisjZGVmaW5l IFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9NU0sxX0VDQ19FUlIxX1ZDMAkJQklUKDgpCisjZGVm aW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9NU0sxX1NPVF9FUlJfMwkJCUJJVCg3KQorI2Rl ZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9JTlRfTVNLMV9TT1RfRVJSXzIJCQlCSVQoNikKKyNk ZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX01TSzFfU09UX0VSUl8xCQkJQklUKDUpCisj ZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9NU0sxX1NPVF9FUlJfMAkJCUJJVCg0KQor I2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9JTlRfTVNLMV9FU0NfRU5UUllfRVJSXzMJCUJJ VCgzKQorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9JTlRfTVNLMV9FU0NfRU5UUllfRVJS XzIJCUJJVCgyKQorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9JTlRfTVNLMV9FU0NfRU5U UllfRVJSXzEJCUJJVCgxKQorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9JTlRfTVNLMV9F U0NfRU5UUllfRVJSXzAJCUJJVCgwKQorCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0NG R19SRUcJCQkJMHgxMDAKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfQ0ZHX0lOSVRfVkFM VUUJCQkweGI4YzY0ZjI0CisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0NGR19TWU5DX0VO CQkJQklUKDMxKQorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9DRkdfQllQQVNTX0VDQ19F TgkJCUJJVCgyOSkKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfQ0ZHX1VOUEtUX0VOCQkJ QklUKDI4KQorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9DRkdfTk9ORV9VTlBLVF9SWF9N T0RFCQlCSVQoMjcpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0NGR19ZQ19TV0FCCQkJ QklUKDI2KQorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9DRkdfTl9CWVRFCQkJCUJJVCgy NCkKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfQ0ZHX1NZTkNfRExZX0NZQ0xFKHYpCQko KCh2KSA8PCAxOCkgJiBcCisJCQkJCQkJCSBHRU5NQVNLKDIyLCAxOCkpCisjZGVmaW5lIFNVTjhJ X0E4M1RfTUlQSV9DU0kyX0NGR19OX0NIQU5ORUwodikJCQkoKCgodikgLSAxKSA8PCAxNikgJiBc CisJCQkJCQkJCSBHRU5NQVNLKDE3LCAxNikpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0ky X0NGR19OX0xBTkUodikJCQkoKCgodikgLSAxKSA8PCA0KSAmIFwKKwkJCQkJCQkJIEdFTk1BU0so NSwgNCkpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX1ZDRFQwX1JFRwkJCQkweDEwNAor I2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9WQ0RUMF9DSF9WQyhjaCwgdmMpCQkoKCh2Yykg JiBHRU5NQVNLKDEsIDApKSA8PCBcCisJCQkJCQkJCSAoKGNoKSAqIDggKyA2KSkKKyNkZWZpbmUg U1VOOElfQTgzVF9NSVBJX0NTSTJfVkNEVDBfQ0hfRFQoY2gsIHQpCQkJKCgodCkgJiBHRU5NQVNL KDUsIDApKSA8PCBcCisJCQkJCQkJCSAoKGNoKSAqIDgpKQorI2RlZmluZSBTVU44SV9BODNUX01J UElfQ1NJMl9WQ0RUMV9SRUcJCQkJMHgxMDgKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJf VkNEVDFfQ0hfVkMoY2gsIHZjKQkJKCgodmMpICYgR0VOTUFTSygxLCAwKSkgPDwgXAorCQkJCQkJ CQkgKCgoY2gpIC0gNCkgKiA4ICsgNikpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX1ZD RFQxX0NIX0RUKGNoLCB0KQkJCSgoKHQpICYgR0VOTUFTSyg1LCAwKSkgPDwgXAorCQkJCQkJCQkg KCgoY2gpIC0gNCkgKiA4KSkKKworZW51bSBtaXBpX2NzaTJfZGF0YV90eXBlIHsKKwlNSVBJX0NT STJfREFUQV9UWVBFX1JBVzgJPSAweDJhLAorCU1JUElfQ1NJMl9EQVRBX1RZUEVfUkFXMTAJPSAw eDJiLAorCU1JUElfQ1NJMl9EQVRBX1RZUEVfUkFXMTIJPSAweDJjLAorfTsKKworI2VuZGlmCi0t IAoyLjM0LjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmlu ZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9s aW51eC1hcm0ta2VybmVsCg==