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 4E806C433F5 for ; Wed, 2 Mar 2022 22:12:41 +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=KXJiNslF8sglDL11toNjVLZlYEW5vtdPvXP1vGA3Hyk=; b=Wx6Xd0OgvIcU/O 1ibrOE4E9uzEVgZXfQUIzR4T9XLlpzVINYEZMKq55U7+FMbuAvpDXsauzz0SebM7gb3BVhHGQs05j DleIJh23Lz5nirxqdxWdD6qv/ESUbfLe8UJiMcgASbIbK/ju8l95wHMC3Mx7OACtkPfpiSlDwzBRo 4rPUffwLLf5pMmnyAGtCqjBghEKxqxB6Hn48U3ioaYF42RR6qsjrjJ525COBYKU+Ae6+Jgn6vpy0p IkqN1j5m8i6mmkLKi5Ef6kyPVl+Jpnm+pwwgj35ko4ei+uVDRBjaycJQum2F8+2+dfse9MjayQ7An ip4K6nf+bN55x7Bv2+WQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nPXBU-004TiU-PZ; Wed, 02 Mar 2022 22:11:02 +0000 Received: from relay4-d.mail.gandi.net ([217.70.183.196]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nPX8j-004S8Z-J9; Wed, 02 Mar 2022 22:08:19 +0000 Received: (Authenticated sender: paul.kocialkowski@bootlin.com) by mail.gandi.net (Postfix) with ESMTPSA id 8A9F1E000D; Wed, 2 Mar 2022 22:08:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1646258888; 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=SdcL0mFvCKoJputia1RYoasYlEVwHtGSiUvmh9D3v1U=; b=GLlegKe3M82P52hB4AlOuDTdlchQIE7G92QeNuD4+xLxusGH7UT0EbVjUIteGbPuPwLs6n s79e66ngDhPhWj85JxO3YOYlX5X0vMyz0UPTdmArxjILwkpVR4nF9NqiBYZdJgl518ON4u a+BJPwMtnraaiufWAnhk0bHNU/v+Utwguns5wYPcP0u7mlXS83R3yGpM6pnFb0wcra9ghJ jO9CQNRJifCrM3I6IXPij4TanQ+CkMrqUnAKsfZwiYUO1uvO1YQi0bOzdjRCFcoUDBmagZ oZ6QXoo8D8JqfCFyLT7ICWhP4UtVRbJ+W8M2YJXqZq7TZTHvGsJTTmG41bYCvg== 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 Cc: Yong Deng , Mauro Carvalho Chehab , Rob Herring , Chen-Yu Tsai , Jernej Skrabec , Samuel Holland , Sakari Ailus , Hans Verkuil , Laurent Pinchart , Paul Kocialkowski , Kishon Vijay Abraham I , Vinod Koul , Maxime Ripard , Thomas Petazzoni Subject: [PATCH v3 8/9] media: sunxi: Add support for the A83T MIPI CSI-2 controller Date: Wed, 2 Mar 2022 23:07:38 +0100 Message-Id: <20220302220739.144303-9-paul.kocialkowski@bootlin.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220302220739.144303-1-paul.kocialkowski@bootlin.com> References: <20220302220739.144303-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-20220302_140810_127259_324ACCFF X-CRM114-Status: GOOD ( 31.92 ) 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 aTIuYyAgICAgICAgICAgICAgICAgICAgfCA4MzMgKysrKysrKysrKysrKysrKysrCiAuLi4vc3Vu OGlfYTgzdF9taXBpX2NzaTIuaCAgICAgICAgICAgICAgICAgICAgfCAgNTYgKysKIC4uLi9zdW44 aV9hODN0X21pcGlfY3NpMl9yZWcuaCAgICAgICAgICAgICAgICB8IDE1MSArKysrCiA5IGZpbGVz IGNoYW5nZWQsIDExNjggaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv 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 MDAwMDAwMC4uNGE2Y2FiODZmNTIyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9w bGF0Zm9ybS9zdW54aS9zdW44aS1hODN0LW1pcGktY3NpMi9zdW44aV9hODN0X21pcGlfY3NpMi5j CkBAIC0wLDAgKzEsODMzIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsK Ky8qCisgKiBDb3B5cmlnaHQgMjAyMCBLw6l2aW4gTCdow7RwaXRhbCA8a2V2aW4ubGhvcGl0YWxA Ym9vdGxpbi5jb20+CisgKiBDb3B5cmlnaHQgMjAyMC0yMDIxIEJvb3RsaW4KKyAqIEF1dGhvcjog UGF1bCBLb2NpYWxrb3dza2kgPHBhdWwua29jaWFsa293c2tpQGJvb3RsaW4uY29tPgorICovCisK KyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNs dWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorI2luY2x1ZGUg PGxpbnV4L3BoeS9waHkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNp bmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+Cisj aW5jbHVkZSA8bGludXgvcmVzZXQuaD4KKyNpbmNsdWRlIDxtZWRpYS9taXBpLWNzaTIuaD4KKyNp bmNsdWRlIDxtZWRpYS92NGwyLWN0cmxzLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2Uu aD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWZ3bm9kZS5oPgorCisjaW5jbHVkZSAic3VuOGlfYTgz dF9kcGh5LmgiCisjaW5jbHVkZSAic3VuOGlfYTgzdF9taXBpX2NzaTIuaCIKKyNpbmNsdWRlICJz dW44aV9hODN0X21pcGlfY3NpMl9yZWcuaCIKKworLyogRm9ybWF0ICovCisKK3N0YXRpYyBjb25z dCBzdHJ1Y3Qgc3VuOGlfYTgzdF9taXBpX2NzaTJfZm9ybWF0CitzdW44aV9hODN0X21pcGlfY3Np Ml9mb3JtYXRzW10gPSB7CisJeworCQkubWJ1c19jb2RlCT0gTUVESUFfQlVTX0ZNVF9TQkdHUjhf MVg4LAorCQkuZGF0YV90eXBlCT0gTUlQSV9DU0kyX0RUX1JBVzgsCisJCS5icHAJCT0gOCwKKwl9 LAorCXsKKwkJLm1idXNfY29kZQk9IE1FRElBX0JVU19GTVRfU0dCUkc4XzFYOCwKKwkJLmRhdGFf dHlwZQk9IE1JUElfQ1NJMl9EVF9SQVc4LAorCQkuYnBwCQk9IDgsCisJfSwKKwl7CisJCS5tYnVz X2NvZGUJPSBNRURJQV9CVVNfRk1UX1NHUkJHOF8xWDgsCisJCS5kYXRhX3R5cGUJPSBNSVBJX0NT STJfRFRfUkFXOCwKKwkJLmJwcAkJPSA4LAorCX0sCisJeworCQkubWJ1c19jb2RlCT0gTUVESUFf QlVTX0ZNVF9TUkdHQjhfMVg4LAorCQkuZGF0YV90eXBlCT0gTUlQSV9DU0kyX0RUX1JBVzgsCisJ CS5icHAJCT0gOCwKKwl9LAorCXsKKwkJLm1idXNfY29kZQk9IE1FRElBX0JVU19GTVRfU0JHR1Ix MF8xWDEwLAorCQkuZGF0YV90eXBlCT0gTUlQSV9DU0kyX0RUX1JBVzEwLAorCQkuYnBwCQk9IDEw LAorCX0sCisJeworCQkubWJ1c19jb2RlCT0gTUVESUFfQlVTX0ZNVF9TR0JSRzEwXzFYMTAsCisJ CS5kYXRhX3R5cGUJPSBNSVBJX0NTSTJfRFRfUkFXMTAsCisJCS5icHAJCT0gMTAsCisJfSwKKwl7 CisJCS5tYnVzX2NvZGUJPSBNRURJQV9CVVNfRk1UX1NHUkJHMTBfMVgxMCwKKwkJLmRhdGFfdHlw ZQk9IE1JUElfQ1NJMl9EVF9SQVcxMCwKKwkJLmJwcAkJPSAxMCwKKwl9LAorCXsKKwkJLm1idXNf Y29kZQk9IE1FRElBX0JVU19GTVRfU1JHR0IxMF8xWDEwLAorCQkuZGF0YV90eXBlCT0gTUlQSV9D U0kyX0RUX1JBVzEwLAorCQkuYnBwCQk9IDEwLAorCX0sCit9OworCitzdGF0aWMgY29uc3Qgc3Ry dWN0IHN1bjhpX2E4M3RfbWlwaV9jc2kyX2Zvcm1hdCAqCitzdW44aV9hODN0X21pcGlfY3NpMl9m b3JtYXRfZmluZCh1MzIgbWJ1c19jb2RlKQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChp ID0gMDsgaSA8IEFSUkFZX1NJWkUoc3VuOGlfYTgzdF9taXBpX2NzaTJfZm9ybWF0cyk7IGkrKykK KwkJaWYgKHN1bjhpX2E4M3RfbWlwaV9jc2kyX2Zvcm1hdHNbaV0ubWJ1c19jb2RlID09IG1idXNf Y29kZSkKKwkJCXJldHVybiAmc3VuOGlfYTgzdF9taXBpX2NzaTJfZm9ybWF0c1tpXTsKKworCXJl dHVybiBOVUxMOworfQorCisvKiBDb250cm9sbGVyICovCisKK3N0YXRpYyB2b2lkCitzdW44aV9h ODN0X21pcGlfY3NpMl9pbml0KHN0cnVjdCBzdW44aV9hODN0X21pcGlfY3NpMl9kZXZpY2UgKmNz aTJfZGV2KQoreworCXN0cnVjdCByZWdtYXAgKnJlZ21hcCA9IGNzaTJfZGV2LT5yZWdtYXA7CisK KwkvKgorCSAqIFRoZSBBbGx3aW5uZXIgQlNQIHNldHMgdmFyaW91cyBtYWdpYyB2YWx1ZXMgb24g YSBidW5jaCBvZiByZWdpc3RlcnMuCisJICogVGhpcyBpcyBhcHBhcmVudGx5IGEgbmVjZXNzYXJ5 IGluaXRpYWxpemF0aW9uIHByb2Nlc3MgdGhhdCB3aWxsIGNhdXNlCisJICogdGhlIGNhcHR1cmUg dG8gZmFpbCB3aXRoIHVuc29saWNpdGVkIGludGVycnVwdHMgaGl0dGluZyBpZiBza2lwcGVkLgor CSAqCisJICogTW9zdCBvZiB0aGUgcmVnaXN0ZXJzIGFyZSBzZXQgdG8gcHJvcGVyIHZhbHVlcyBs YXRlciwgZXhjZXB0IGZvciB0aGUKKwkgKiB0d28gcmVzZXJ2ZWQgcmVnaXN0ZXJzLiBUaGV5IGFy ZSBzYWlkIHRvIGhvbGQgYSAiaGFyZHdhcmUgbG9jayIKKwkgKiB2YWx1ZSwgd2l0aG91dCBtb3Jl IGluZm9ybWF0aW9uIGF2YWlsYWJsZS4KKwkgKi8KKworCXJlZ21hcF93cml0ZShyZWdtYXAsIFNV TjhJX0E4M1RfTUlQSV9DU0kyX0NUUkxfUkVHLCAwKTsKKwlyZWdtYXBfd3JpdGUocmVnbWFwLCBT VU44SV9BODNUX01JUElfQ1NJMl9DVFJMX1JFRywKKwkJICAgICBTVU44SV9BODNUX01JUElfQ1NJ Ml9DVFJMX0lOSVRfVkFMVUUpOworCisJcmVnbWFwX3dyaXRlKHJlZ21hcCwgU1VOOElfQTgzVF9N SVBJX0NTSTJfUlhfUEtUX05VTV9SRUcsIDApOworCXJlZ21hcF93cml0ZShyZWdtYXAsIFNVTjhJ X0E4M1RfTUlQSV9DU0kyX1JYX1BLVF9OVU1fUkVHLAorCQkgICAgIFNVTjhJX0E4M1RfTUlQSV9D U0kyX1JYX1BLVF9OVU1fSU5JVF9WQUxVRSk7CisKKwlyZWdtYXBfd3JpdGUocmVnbWFwLCBTVU44 SV9BODNUX0RQSFlfQ1RSTF9SRUcsIDApOworCXJlZ21hcF93cml0ZShyZWdtYXAsIFNVTjhJX0E4 M1RfRFBIWV9DVFJMX1JFRywKKwkJICAgICBTVU44SV9BODNUX0RQSFlfQ1RSTF9JTklUX1ZBTFVF KTsKKworCXJlZ21hcF93cml0ZShyZWdtYXAsIFNVTjhJX0E4M1RfTUlQSV9DU0kyX1JTVkQxX1JF RywgMCk7CisJcmVnbWFwX3dyaXRlKHJlZ21hcCwgU1VOOElfQTgzVF9NSVBJX0NTSTJfUlNWRDFf UkVHLAorCQkgICAgIFNVTjhJX0E4M1RfTUlQSV9DU0kyX1JTVkQxX0hXX0xPQ0tfVkFMVUUpOwor CisJcmVnbWFwX3dyaXRlKHJlZ21hcCwgU1VOOElfQTgzVF9NSVBJX0NTSTJfUlNWRDJfUkVHLCAw KTsKKwlyZWdtYXBfd3JpdGUocmVnbWFwLCBTVU44SV9BODNUX01JUElfQ1NJMl9SU1ZEMl9SRUcs CisJCSAgICAgU1VOOElfQTgzVF9NSVBJX0NTSTJfUlNWRDJfSFdfTE9DS19WQUxVRSk7CisKKwly ZWdtYXBfd3JpdGUocmVnbWFwLCBTVU44SV9BODNUX01JUElfQ1NJMl9DRkdfUkVHLCAwKTsKKwly ZWdtYXBfd3JpdGUocmVnbWFwLCBTVU44SV9BODNUX01JUElfQ1NJMl9DRkdfUkVHLAorCQkgICAg IFNVTjhJX0E4M1RfTUlQSV9DU0kyX0NGR19JTklUX1ZBTFVFKTsKK30KKworc3RhdGljIHZvaWQK K3N1bjhpX2E4M3RfbWlwaV9jc2kyX2VuYWJsZShzdHJ1Y3Qgc3VuOGlfYTgzdF9taXBpX2NzaTJf ZGV2aWNlICpjc2kyX2RldikKK3sKKwlzdHJ1Y3QgcmVnbWFwICpyZWdtYXAgPSBjc2kyX2Rldi0+ cmVnbWFwOworCisJcmVnbWFwX3VwZGF0ZV9iaXRzKHJlZ21hcCwgU1VOOElfQTgzVF9NSVBJX0NT STJfQ0ZHX1JFRywKKwkJCSAgIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0NGR19TWU5DX0VOLAorCQkJ ICAgU1VOOElfQTgzVF9NSVBJX0NTSTJfQ0ZHX1NZTkNfRU4pOworfQorCitzdGF0aWMgdm9pZAor c3VuOGlfYTgzdF9taXBpX2NzaTJfZGlzYWJsZShzdHJ1Y3Qgc3VuOGlfYTgzdF9taXBpX2NzaTJf ZGV2aWNlICpjc2kyX2RldikKK3sKKwlzdHJ1Y3QgcmVnbWFwICpyZWdtYXAgPSBjc2kyX2Rldi0+ cmVnbWFwOworCisJcmVnbWFwX3VwZGF0ZV9iaXRzKHJlZ21hcCwgU1VOOElfQTgzVF9NSVBJX0NT STJfQ0ZHX1JFRywKKwkJCSAgIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0NGR19TWU5DX0VOLCAwKTsK KworCXJlZ21hcF93cml0ZShyZWdtYXAsIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0NUUkxfUkVHLCAw KTsKK30KKworc3RhdGljIHZvaWQKK3N1bjhpX2E4M3RfbWlwaV9jc2kyX2NvbmZpZ3VyZShzdHJ1 Y3Qgc3VuOGlfYTgzdF9taXBpX2NzaTJfZGV2aWNlICpjc2kyX2RldikKK3sKKwlzdHJ1Y3QgcmVn bWFwICpyZWdtYXAgPSBjc2kyX2Rldi0+cmVnbWFwOworCXVuc2lnbmVkIGludCBsYW5lc19jb3Vu dCA9CisJCWNzaTJfZGV2LT5icmlkZ2UuZW5kcG9pbnQuYnVzLm1pcGlfY3NpMi5udW1fZGF0YV9s YW5lczsKKwlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICptYnVzX2Zvcm1hdCA9ICZjc2kyX2Rl di0+YnJpZGdlLm1idXNfZm9ybWF0OworCWNvbnN0IHN0cnVjdCBzdW44aV9hODN0X21pcGlfY3Np Ml9mb3JtYXQgKmZvcm1hdDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjc2kyX2Rldi0+ZGV2Owor CXUzMiB2ZXJzaW9uID0gMDsKKworCWZvcm1hdCA9IHN1bjhpX2E4M3RfbWlwaV9jc2kyX2Zvcm1h dF9maW5kKG1idXNfZm9ybWF0LT5jb2RlKTsKKwlpZiAoV0FSTl9PTighZm9ybWF0KSkKKwkJcmV0 dXJuOworCisJcmVnbWFwX3dyaXRlKHJlZ21hcCwgU1VOOElfQTgzVF9NSVBJX0NTSTJfQ1RSTF9S RUcsCisJCSAgICAgU1VOOElfQTgzVF9NSVBJX0NTSTJfQ1RSTF9SRVNFVF9OKTsKKworCXJlZ21h cF9yZWFkKHJlZ21hcCwgU1VOOElfQTgzVF9NSVBJX0NTSTJfVkVSU0lPTl9SRUcsICZ2ZXJzaW9u KTsKKworCWRldl9kYmcoZGV2LCAiQTgzVCBNSVBJIENTSS0yIHZlcnNpb246ICUwNHhcbiIsIHZl cnNpb24pOworCisJcmVnbWFwX3dyaXRlKHJlZ21hcCwgU1VOOElfQTgzVF9NSVBJX0NTSTJfQ0ZH X1JFRywKKwkJICAgICBTVU44SV9BODNUX01JUElfQ1NJMl9DRkdfVU5QS1RfRU4gfAorCQkgICAg IFNVTjhJX0E4M1RfTUlQSV9DU0kyX0NGR19TWU5DX0RMWV9DWUNMRSg4KSB8CisJCSAgICAgU1VO OElfQTgzVF9NSVBJX0NTSTJfQ0ZHX05fQ0hBTk5FTCgxKSB8CisJCSAgICAgU1VOOElfQTgzVF9N SVBJX0NTSTJfQ0ZHX05fTEFORShsYW5lc19jb3VudCkpOworCisJLyoKKwkgKiBPbmx5IGEgc2lu Z2xlIHZpcnR1YWwgY2hhbm5lbCAoaW5kZXggMCkgaXMgY3VycmVudGx5IHN1cHBvcnRlZC4KKwkg KiBXaGlsZSB0aGUgcmVnaXN0ZXJzIGRvIG1lbnRpb24gbXVsdGlwbGUgcGh5c2ljYWwgY2hhbm5l bHMgYmVpbmcKKwkgKiBhdmFpbGFibGUgKHdoaWNoIGNhbiBiZSBjb25maWd1cmVkIHRvIG1hdGNo IGEgc3BlY2lmaWMgdmlydHVhbAorCSAqIGNoYW5uZWwgb3IgZGF0YSB0eXBlKSwgaXQncyB1bmNs ZWFyIHdoZXRoZXIgY2hhbm5lbHMgPiAwIGFyZSBhY3R1YWxseQorCSAqIGNvbm5lY3RlZCBhbmQg YXZhaWxhYmxlIGFuZCB0aGUgcmVmZXJlbmNlIHNvdXJjZSBjb2RlIG9ubHkgbWFrZXMgdXNlCisJ ICogb2YgY2hhbm5lbCAwLgorCSAqCisJICogVXNpbmcgZXh0cmEgY2hhbm5lbHMgd291bGQgYWxz byByZXF1aXJlIG1hdGNoaW5nIGNoYW5uZWxzIHRvIGJlCisJICogYXZhaWxhYmxlIG9uIHRoZSBD U0kgKGFuZCBJU1ApIHNpZGUsIHdoaWNoIGlzIGFsc28gdW5zdXJlIGFsdGhvdWdoCisJICogc29t ZSBDU0kgaW1wbGVtZW50YXRpb25zIGFyZSBzYWlkIHRvIHN1cHBvcnQgbXVsdGlwbGUgY2hhbm5l bHMgZm9yCisJICogQlQ2NTYgdGltZS1zaGFyaW5nLgorCSAqCisJICogV2Ugc3RpbGwgY29uZmln dXJlIHZpcnR1YWwgY2hhbm5lbCBudW1iZXJzIHRvIGVuc3VyZSB0aGF0IHZpcnR1YWwKKwkgKiBj aGFubmVsIDAgb25seSBnb2VzIHRvIGNoYW5uZWwgMC4KKwkgKi8KKworCXJlZ21hcF93cml0ZShy ZWdtYXAsIFNVTjhJX0E4M1RfTUlQSV9DU0kyX1ZDRFQwX1JFRywKKwkJICAgICBTVU44SV9BODNU X01JUElfQ1NJMl9WQ0RUMF9DSF9WQygzLCAzKSB8CisJCSAgICAgU1VOOElfQTgzVF9NSVBJX0NT STJfVkNEVDBfQ0hfVkMoMiwgMikgfAorCQkgICAgIFNVTjhJX0E4M1RfTUlQSV9DU0kyX1ZDRFQw X0NIX1ZDKDEsIDEpIHwKKwkJICAgICBTVU44SV9BODNUX01JUElfQ1NJMl9WQ0RUMF9DSF9WQygw LCAwKSB8CisJCSAgICAgU1VOOElfQTgzVF9NSVBJX0NTSTJfVkNEVDBfQ0hfRFQoMCwgZm9ybWF0 LT5kYXRhX3R5cGUpKTsKK30KKworLyogVjRMMiBTdWJkZXYgKi8KKworc3RhdGljIGludCBzdW44 aV9hODN0X21pcGlfY3NpMl9zX3N0cmVhbShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnN1YmRldiwgaW50 IG9uKQoreworCXN0cnVjdCBzdW44aV9hODN0X21pcGlfY3NpMl9kZXZpY2UgKmNzaTJfZGV2ID0K KwkJdjRsMl9nZXRfc3ViZGV2ZGF0YShzdWJkZXYpOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc291 cmNlX3N1YmRldiA9IGNzaTJfZGV2LT5icmlkZ2Uuc291cmNlX3N1YmRldjsKKwl1bmlvbiBwaHlf Y29uZmlndXJlX29wdHMgZHBoeV9vcHRzID0geyAwIH07CisJc3RydWN0IHBoeV9jb25maWd1cmVf b3B0c19taXBpX2RwaHkgKmRwaHlfY2ZnID0gJmRwaHlfb3B0cy5taXBpX2RwaHk7CisJc3RydWN0 IHY0bDJfbWJ1c19mcmFtZWZtdCAqbWJ1c19mb3JtYXQgPSAmY3NpMl9kZXYtPmJyaWRnZS5tYnVz X2Zvcm1hdDsKKwljb25zdCBzdHJ1Y3Qgc3VuOGlfYTgzdF9taXBpX2NzaTJfZm9ybWF0ICpmb3Jt YXQ7CisJc3RydWN0IHBoeSAqZHBoeSA9IGNzaTJfZGV2LT5kcGh5OworCXN0cnVjdCBkZXZpY2Ug KmRldiA9IGNzaTJfZGV2LT5kZXY7CisJc3RydWN0IHY0bDJfY3RybCAqY3RybDsKKwl1bnNpZ25l ZCBpbnQgbGFuZXNfY291bnQgPQorCQljc2kyX2Rldi0+YnJpZGdlLmVuZHBvaW50LmJ1cy5taXBp X2NzaTIubnVtX2RhdGFfbGFuZXM7CisJdW5zaWduZWQgbG9uZyBwaXhlbF9yYXRlOworCS8qIElu aXRpYWxpemUgdG8gMCB0byB1c2UgYm90aCBpbiBkaXNhYmxlIGxhYmVsIChyZXQgIT0gMCkgYW5k IG9mZi4gKi8KKwlpbnQgcmV0ID0gMDsKKworCWlmICghc291cmNlX3N1YmRldikKKwkJcmV0dXJu IC1FTk9ERVY7CisKKwlpZiAoIW9uKSB7CisJCXY0bDJfc3ViZGV2X2NhbGwoc291cmNlX3N1YmRl diwgdmlkZW8sIHNfc3RyZWFtLCAwKTsKKwkJZ290byBkaXNhYmxlOworCX0KKworCS8qIFJ1bnRp bWUgUE0gKi8KKworCXJldCA9IHBtX3J1bnRpbWVfcmVzdW1lX2FuZF9nZXQoZGV2KTsKKwlpZiAo cmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFNlbnNvciBwaXhlbCByYXRlICovCisKKwlj dHJsID0gdjRsMl9jdHJsX2ZpbmQoc291cmNlX3N1YmRldi0+Y3RybF9oYW5kbGVyLCBWNEwyX0NJ RF9QSVhFTF9SQVRFKTsKKwlpZiAoIWN0cmwpIHsKKwkJZGV2X2VycihkZXYsICJtaXNzaW5nIHNl bnNvciBwaXhlbCByYXRlXG4iKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBlcnJvcl9wbTsK Kwl9CisKKwlwaXhlbF9yYXRlID0gKHVuc2lnbmVkIGxvbmcpdjRsMl9jdHJsX2dfY3RybF9pbnQ2 NChjdHJsKTsKKwlpZiAoIXBpeGVsX3JhdGUpIHsKKwkJZGV2X2VycihkZXYsICJtaXNzaW5nICh6 ZXJvKSBzZW5zb3IgcGl4ZWwgcmF0ZVxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJy b3JfcG07CisJfQorCisJLyogRC1QSFkgKi8KKworCWlmICghbGFuZXNfY291bnQpIHsKKwkJZGV2 X2VycihkZXYsICJtaXNzaW5nICh6ZXJvKSBNSVBJIENTSS0yIGxhbmVzIGNvdW50XG4iKTsKKwkJ cmV0ID0gLUVOT0RFVjsKKwkJZ290byBlcnJvcl9wbTsKKwl9CisKKwlmb3JtYXQgPSBzdW44aV9h ODN0X21pcGlfY3NpMl9mb3JtYXRfZmluZChtYnVzX2Zvcm1hdC0+Y29kZSk7CisJaWYgKFdBUk5f T04oIWZvcm1hdCkpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBlcnJvcl9wbTsKKwl9CisK KwlwaHlfbWlwaV9kcGh5X2dldF9kZWZhdWx0X2NvbmZpZyhwaXhlbF9yYXRlLCBmb3JtYXQtPmJw cCwgbGFuZXNfY291bnQsCisJCQkJCSBkcGh5X2NmZyk7CisKKwkvKgorCSAqIE5vdGUgdGhhdCBv dXIgaGFyZHdhcmUgaXMgdXNpbmcgRERSLCB3aGljaCBpcyBub3QgdGFrZW4gaW4gYWNjb3VudCBi eQorCSAqIHBoeV9taXBpX2RwaHlfZ2V0X2RlZmF1bHRfY29uZmlnIHdoZW4gY2FsY3VsYXRpbmcg aHNfY2xrX3JhdGUgZnJvbQorCSAqIHRoZSBwaXhlbCByYXRlLCBsYW5lcyBjb3VudCBhbmQgYnBw LgorCSAqCisJICogVGhlIHJlc3VsdGluZyBjbG9jayByYXRlIGlzIGJhc2ljYWxseSB0aGUgc3lt Ym9sIHJhdGUgb3ZlciB0aGUgd2hvbGUKKwkgKiBsaW5rLiBUaGUgYWN0dWFsIGNsb2NrIHJhdGUg aXMgY2FsY3VsYXRlZCB3aXRoIGRpdmlzaW9uIGJ5IHR3byBzaW5jZQorCSAqIEREUiBzYW1wbGVz IGJvdGggb24gcmlzaW5nIGFuZCBmYWxsaW5nIGVkZ2VzLgorCSAqLworCisJZGV2X2RiZyhkZXYs ICJBODNUIE1JUEkgQ1NJLTIgY29uZmlnOlxuIik7CisJZGV2X2RiZyhkZXYsICIlbGQgcGl4ZWxz L3MsICV1IGJpdHMvcGl4ZWwsICV1IGxhbmVzLCAlbHUgSHogY2xvY2tcbiIsCisJCXBpeGVsX3Jh dGUsIGZvcm1hdC0+YnBwLCBsYW5lc19jb3VudCwKKwkJZHBoeV9jZmctPmhzX2Nsa19yYXRlIC8g Mik7CisKKwlyZXQgPSBwaHlfcmVzZXQoZHBoeSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRl diwgImZhaWxlZCB0byByZXNldCBNSVBJIEQtUEhZXG4iKTsKKwkJZ290byBlcnJvcl9wbTsKKwl9 CisKKwlyZXQgPSBwaHlfY29uZmlndXJlKGRwaHksICZkcGh5X29wdHMpOworCWlmIChyZXQpIHsK KwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gY29uZmlndXJlIE1JUEkgRC1QSFlcbiIpOworCQln b3RvIGVycm9yX3BtOworCX0KKworCS8qIENvbnRyb2xsZXIgKi8KKworCXN1bjhpX2E4M3RfbWlw aV9jc2kyX2NvbmZpZ3VyZShjc2kyX2Rldik7CisJc3VuOGlfYTgzdF9taXBpX2NzaTJfZW5hYmxl KGNzaTJfZGV2KTsKKworCS8qIEQtUEhZICovCisKKwlyZXQgPSBwaHlfcG93ZXJfb24oZHBoeSk7 CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBwb3dlciBvbiBNSVBJIEQt UEhZXG4iKTsKKwkJZ290byBlcnJvcl9wbTsKKwl9CisKKwkvKiBTb3VyY2UgKi8KKworCXJldCA9 IHY0bDJfc3ViZGV2X2NhbGwoc291cmNlX3N1YmRldiwgdmlkZW8sIHNfc3RyZWFtLCAxKTsKKwlp ZiAocmV0ICYmIHJldCAhPSAtRU5PSU9DVExDTUQpCisJCWdvdG8gZGlzYWJsZTsKKworCXJldHVy biAwOworCitkaXNhYmxlOgorCXBoeV9wb3dlcl9vZmYoZHBoeSk7CisJc3VuOGlfYTgzdF9taXBp X2NzaTJfZGlzYWJsZShjc2kyX2Rldik7CisKK2Vycm9yX3BtOgorCXBtX3J1bnRpbWVfcHV0KGRl dik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2 X3ZpZGVvX29wcworc3VuOGlfYTgzdF9taXBpX2NzaTJfdmlkZW9fb3BzID0geworCS5zX3N0cmVh bQk9IHN1bjhpX2E4M3RfbWlwaV9jc2kyX3Nfc3RyZWFtLAorfTsKKworc3RhdGljIHZvaWQKK3N1 bjhpX2E4M3RfbWlwaV9jc2kyX21idXNfZm9ybWF0X3ByZXBhcmUoc3RydWN0IHY0bDJfbWJ1c19m cmFtZWZtdCAqbWJ1c19mb3JtYXQpCit7CisJaWYgKCFzdW44aV9hODN0X21pcGlfY3NpMl9mb3Jt YXRfZmluZChtYnVzX2Zvcm1hdC0+Y29kZSkpCisJCW1idXNfZm9ybWF0LT5jb2RlID0gc3VuOGlf YTgzdF9taXBpX2NzaTJfZm9ybWF0c1swXS5tYnVzX2NvZGU7CisKKwltYnVzX2Zvcm1hdC0+Zmll bGQgPSBWNEwyX0ZJRUxEX05PTkU7CisJbWJ1c19mb3JtYXQtPmNvbG9yc3BhY2UgPSBWNEwyX0NP TE9SU1BBQ0VfUkFXOworCW1idXNfZm9ybWF0LT5xdWFudGl6YXRpb24gPSBWNEwyX1FVQU5USVpB VElPTl9ERUZBVUxUOworCW1idXNfZm9ybWF0LT54ZmVyX2Z1bmMgPSBWNEwyX1hGRVJfRlVOQ19E RUZBVUxUOworfQorCitzdGF0aWMgaW50IHN1bjhpX2E4M3RfbWlwaV9jc2kyX2luaXRfY2ZnKHN0 cnVjdCB2NGwyX3N1YmRldiAqc3ViZGV2LAorCQkJCQkgc3RydWN0IHY0bDJfc3ViZGV2X3N0YXRl ICpzdGF0ZSkKK3sKKwlzdHJ1Y3Qgc3VuOGlfYTgzdF9taXBpX2NzaTJfZGV2aWNlICpjc2kyX2Rl diA9CisJCXY0bDJfZ2V0X3N1YmRldmRhdGEoc3ViZGV2KTsKKwl1bnNpZ25lZCBpbnQgcGFkID0g U1VOOElfQTgzVF9NSVBJX0NTSTJfUEFEX1NJTks7CisJc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZt dCAqbWJ1c19mb3JtYXQgPQorCQl2NGwyX3N1YmRldl9nZXRfdHJ5X2Zvcm1hdChzdWJkZXYsIHN0 YXRlLCBwYWQpOworCXN0cnVjdCBtdXRleCAqbG9jayA9ICZjc2kyX2Rldi0+YnJpZGdlLmxvY2s7 CisKKwltdXRleF9sb2NrKGxvY2spOworCisJbWJ1c19mb3JtYXQtPmNvZGUgPSBzdW44aV9hODN0 X21pcGlfY3NpMl9mb3JtYXRzWzBdLm1idXNfY29kZTsKKwltYnVzX2Zvcm1hdC0+d2lkdGggPSA2 NDA7CisJbWJ1c19mb3JtYXQtPmhlaWdodCA9IDQ4MDsKKworCXN1bjhpX2E4M3RfbWlwaV9jc2ky X21idXNfZm9ybWF0X3ByZXBhcmUobWJ1c19mb3JtYXQpOworCisJbXV0ZXhfdW5sb2NrKGxvY2sp OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3N1bjhpX2E4M3RfbWlwaV9jc2kyX2Vu dW1fbWJ1c19jb2RlKHN0cnVjdCB2NGwyX3N1YmRldiAqc3ViZGV2LAorCQkJCSAgICBzdHJ1Y3Qg djRsMl9zdWJkZXZfc3RhdGUgKnN0YXRlLAorCQkJCSAgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfbWJ1 c19jb2RlX2VudW0gKmNvZGVfZW51bSkKK3sKKwlpZiAoY29kZV9lbnVtLT5pbmRleCA+PSBBUlJB WV9TSVpFKHN1bjhpX2E4M3RfbWlwaV9jc2kyX2Zvcm1hdHMpKQorCQlyZXR1cm4gLUVJTlZBTDsK KworCWNvZGVfZW51bS0+Y29kZSA9CisJCXN1bjhpX2E4M3RfbWlwaV9jc2kyX2Zvcm1hdHNbY29k ZV9lbnVtLT5pbmRleF0ubWJ1c19jb2RlOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQg c3VuOGlfYTgzdF9taXBpX2NzaTJfZ2V0X2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnN1YmRldiwK KwkJCQkJc3RydWN0IHY0bDJfc3ViZGV2X3N0YXRlICpzdGF0ZSwKKwkJCQkJc3RydWN0IHY0bDJf c3ViZGV2X2Zvcm1hdCAqZm9ybWF0KQoreworCXN0cnVjdCBzdW44aV9hODN0X21pcGlfY3NpMl9k ZXZpY2UgKmNzaTJfZGV2ID0KKwkJdjRsMl9nZXRfc3ViZGV2ZGF0YShzdWJkZXYpOworCXN0cnVj dCB2NGwyX21idXNfZnJhbWVmbXQgKm1idXNfZm9ybWF0ID0gJmZvcm1hdC0+Zm9ybWF0OworCXN0 cnVjdCBtdXRleCAqbG9jayA9ICZjc2kyX2Rldi0+YnJpZGdlLmxvY2s7CisKKwltdXRleF9sb2Nr KGxvY2spOworCisJaWYgKGZvcm1hdC0+d2hpY2ggPT0gVjRMMl9TVUJERVZfRk9STUFUX1RSWSkK KwkJKm1idXNfZm9ybWF0ID0gKnY0bDJfc3ViZGV2X2dldF90cnlfZm9ybWF0KHN1YmRldiwgc3Rh dGUsCisJCQkJCQkJICAgZm9ybWF0LT5wYWQpOworCWVsc2UKKwkJKm1idXNfZm9ybWF0ID0gY3Np Ml9kZXYtPmJyaWRnZS5tYnVzX2Zvcm1hdDsKKworCW11dGV4X3VubG9jayhsb2NrKTsKKworCXJl dHVybiAwOworfQorCitzdGF0aWMgaW50IHN1bjhpX2E4M3RfbWlwaV9jc2kyX3NldF9mbXQoc3Ry dWN0IHY0bDJfc3ViZGV2ICpzdWJkZXYsCisJCQkJCXN0cnVjdCB2NGwyX3N1YmRldl9zdGF0ZSAq c3RhdGUsCisJCQkJCXN0cnVjdCB2NGwyX3N1YmRldl9mb3JtYXQgKmZvcm1hdCkKK3sKKwlzdHJ1 Y3Qgc3VuOGlfYTgzdF9taXBpX2NzaTJfZGV2aWNlICpjc2kyX2RldiA9CisJCXY0bDJfZ2V0X3N1 YmRldmRhdGEoc3ViZGV2KTsKKwlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICptYnVzX2Zvcm1h dCA9ICZmb3JtYXQtPmZvcm1hdDsKKwlzdHJ1Y3QgbXV0ZXggKmxvY2sgPSAmY3NpMl9kZXYtPmJy aWRnZS5sb2NrOworCisJbXV0ZXhfbG9jayhsb2NrKTsKKworCXN1bjhpX2E4M3RfbWlwaV9jc2ky X21idXNfZm9ybWF0X3ByZXBhcmUobWJ1c19mb3JtYXQpOworCisJaWYgKGZvcm1hdC0+d2hpY2gg PT0gVjRMMl9TVUJERVZfRk9STUFUX1RSWSkKKwkJKnY0bDJfc3ViZGV2X2dldF90cnlfZm9ybWF0 KHN1YmRldiwgc3RhdGUsIGZvcm1hdC0+cGFkKSA9CisJCQkqbWJ1c19mb3JtYXQ7CisJZWxzZQor CQljc2kyX2Rldi0+YnJpZGdlLm1idXNfZm9ybWF0ID0gKm1idXNfZm9ybWF0OworCisJbXV0ZXhf dW5sb2NrKGxvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRs Ml9zdWJkZXZfcGFkX29wcyBzdW44aV9hODN0X21pcGlfY3NpMl9wYWRfb3BzID0geworCS5pbml0 X2NmZwk9IHN1bjhpX2E4M3RfbWlwaV9jc2kyX2luaXRfY2ZnLAorCS5lbnVtX21idXNfY29kZQk9 IHN1bjhpX2E4M3RfbWlwaV9jc2kyX2VudW1fbWJ1c19jb2RlLAorCS5nZXRfZm10CT0gc3VuOGlf YTgzdF9taXBpX2NzaTJfZ2V0X2ZtdCwKKwkuc2V0X2ZtdAk9IHN1bjhpX2E4M3RfbWlwaV9jc2ky X3NldF9mbXQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X29wcyBzdW44 aV9hODN0X21pcGlfY3NpMl9zdWJkZXZfb3BzID0geworCS52aWRlbwk9ICZzdW44aV9hODN0X21p cGlfY3NpMl92aWRlb19vcHMsCisJLnBhZAk9ICZzdW44aV9hODN0X21pcGlfY3NpMl9wYWRfb3Bz LAorfTsKKworLyogTWVkaWEgRW50aXR5ICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWVkaWFf ZW50aXR5X29wZXJhdGlvbnMgc3VuOGlfYTgzdF9taXBpX2NzaTJfZW50aXR5X29wcyA9IHsKKwku bGlua192YWxpZGF0ZQk9IHY0bDJfc3ViZGV2X2xpbmtfdmFsaWRhdGUsCit9OworCisvKiBWNEwy IEFzeW5jICovCisKK3N0YXRpYyBpbnQKK3N1bjhpX2E4M3RfbWlwaV9jc2kyX25vdGlmaWVyX2Jv dW5kKHN0cnVjdCB2NGwyX2FzeW5jX25vdGlmaWVyICpub3RpZmllciwKKwkJCQkgICAgc3RydWN0 IHY0bDJfc3ViZGV2ICpyZW1vdGVfc3ViZGV2LAorCQkJCSAgICBzdHJ1Y3QgdjRsMl9hc3luY19z dWJkZXYgKmFzeW5jX3N1YmRldikKK3sKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnN1YmRldiA9IG5v dGlmaWVyLT5zZDsKKwlzdHJ1Y3Qgc3VuOGlfYTgzdF9taXBpX2NzaTJfZGV2aWNlICpjc2kyX2Rl diA9CisJCWNvbnRhaW5lcl9vZihub3RpZmllciwgc3RydWN0IHN1bjhpX2E4M3RfbWlwaV9jc2ky X2RldmljZSwKKwkJCSAgICAgYnJpZGdlLm5vdGlmaWVyKTsKKwlzdHJ1Y3QgbWVkaWFfZW50aXR5 ICpzaW5rX2VudGl0eSA9ICZzdWJkZXYtPmVudGl0eTsKKwlzdHJ1Y3QgbWVkaWFfZW50aXR5ICpz b3VyY2VfZW50aXR5ID0gJnJlbW90ZV9zdWJkZXYtPmVudGl0eTsKKwlzdHJ1Y3QgZGV2aWNlICpk ZXYgPSBjc2kyX2Rldi0+ZGV2OworCWludCBzaW5rX3BhZF9pbmRleCA9IDA7CisJaW50IHNvdXJj ZV9wYWRfaW5kZXg7CisJaW50IHJldDsKKworCXJldCA9IG1lZGlhX2VudGl0eV9nZXRfZndub2Rl X3BhZChzb3VyY2VfZW50aXR5LCByZW1vdGVfc3ViZGV2LT5md25vZGUsCisJCQkJCSAgTUVESUFf UEFEX0ZMX1NPVVJDRSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJtaXNzaW5n IHNvdXJjZSBwYWQgaW4gZXh0ZXJuYWwgZW50aXR5ICVzXG4iLAorCQkJc291cmNlX2VudGl0eS0+ bmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXNvdXJjZV9wYWRfaW5kZXggPSByZXQ7 CisKKwlkZXZfZGJnKGRldiwgImNyZWF0aW5nICVzOiV1IC0+ICVzOiV1IGxpbmtcbiIsIHNvdXJj ZV9lbnRpdHktPm5hbWUsCisJCXNvdXJjZV9wYWRfaW5kZXgsIHNpbmtfZW50aXR5LT5uYW1lLCBz aW5rX3BhZF9pbmRleCk7CisKKwlyZXQgPSBtZWRpYV9jcmVhdGVfcGFkX2xpbmsoc291cmNlX2Vu dGl0eSwgc291cmNlX3BhZF9pbmRleCwKKwkJCQkgICAgc2lua19lbnRpdHksIHNpbmtfcGFkX2lu ZGV4LAorCQkJCSAgICBNRURJQV9MTktfRkxfRU5BQkxFRCB8CisJCQkJICAgIE1FRElBX0xOS19G TF9JTU1VVEFCTEUpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gY3Jl YXRlICVzOiV1IC0+ICVzOiV1IGxpbmtcbiIsCisJCQlzb3VyY2VfZW50aXR5LT5uYW1lLCBzb3Vy Y2VfcGFkX2luZGV4LAorCQkJc2lua19lbnRpdHktPm5hbWUsIHNpbmtfcGFkX2luZGV4KTsKKwkJ cmV0dXJuIHJldDsKKwl9CisKKwljc2kyX2Rldi0+YnJpZGdlLnNvdXJjZV9zdWJkZXYgPSByZW1v dGVfc3ViZGV2OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9h c3luY19ub3RpZmllcl9vcGVyYXRpb25zCitzdW44aV9hODN0X21pcGlfY3NpMl9ub3RpZmllcl9v cHMgPSB7CisJLmJvdW5kCT0gc3VuOGlfYTgzdF9taXBpX2NzaTJfbm90aWZpZXJfYm91bmQsCit9 OworCisvKiBCcmlkZ2UgKi8KKworc3RhdGljIGludAorc3VuOGlfYTgzdF9taXBpX2NzaTJfYnJp ZGdlX3NvdXJjZV9zZXR1cChzdHJ1Y3Qgc3VuOGlfYTgzdF9taXBpX2NzaTJfZGV2aWNlICpjc2ky X2RldikKK3sKKwlzdHJ1Y3QgdjRsMl9hc3luY19ub3RpZmllciAqbm90aWZpZXIgPSAmY3NpMl9k ZXYtPmJyaWRnZS5ub3RpZmllcjsKKwlzdHJ1Y3QgdjRsMl9md25vZGVfZW5kcG9pbnQgKmVuZHBv aW50ID0gJmNzaTJfZGV2LT5icmlkZ2UuZW5kcG9pbnQ7CisJc3RydWN0IHY0bDJfYXN5bmNfc3Vi ZGV2ICpzdWJkZXZfYXN5bmM7CisJc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmhhbmRsZTsKKwlzdHJ1 Y3QgZGV2aWNlICpkZXYgPSBjc2kyX2Rldi0+ZGV2OworCWludCByZXQ7CisKKwloYW5kbGUgPSBm d25vZGVfZ3JhcGhfZ2V0X2VuZHBvaW50X2J5X2lkKGRldl9md25vZGUoZGV2KSwgMCwgMCwKKwkJ CQkJCSBGV05PREVfR1JBUEhfRU5EUE9JTlRfTkVYVCk7CisJaWYgKCFoYW5kbGUpCisJCXJldHVy biAtRU5PREVWOworCisJZW5kcG9pbnQtPmJ1c190eXBlID0gVjRMMl9NQlVTX0NTSTJfRFBIWTsK KworCXJldCA9IHY0bDJfZndub2RlX2VuZHBvaW50X3BhcnNlKGhhbmRsZSwgZW5kcG9pbnQpOwor CWlmIChyZXQpCisJCWdvdG8gY29tcGxldGU7CisKKwlzdWJkZXZfYXN5bmMgPSB2NGwyX2FzeW5j X25mX2FkZF9md25vZGVfcmVtb3RlKG5vdGlmaWVyLCBoYW5kbGUsCisJCXN0cnVjdCB2NGwyX2Fz eW5jX3N1YmRldik7CisJaWYgKElTX0VSUihzdWJkZXZfYXN5bmMpKQorCQlyZXQgPSBQVFJfRVJS KHN1YmRldl9hc3luYyk7CisKK2NvbXBsZXRlOgorCWZ3bm9kZV9oYW5kbGVfcHV0KGhhbmRsZSk7 CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CitzdW44aV9hODN0X21pcGlfY3NpMl9i cmlkZ2Vfc2V0dXAoc3RydWN0IHN1bjhpX2E4M3RfbWlwaV9jc2kyX2RldmljZSAqY3NpMl9kZXYp Cit7CisJc3RydWN0IHN1bjhpX2E4M3RfbWlwaV9jc2kyX2JyaWRnZSAqYnJpZGdlID0gJmNzaTJf ZGV2LT5icmlkZ2U7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzdWJkZXYgPSAmYnJpZGdlLT5zdWJk ZXY7CisJc3RydWN0IHY0bDJfYXN5bmNfbm90aWZpZXIgKm5vdGlmaWVyID0gJmJyaWRnZS0+bm90 aWZpZXI7CisJc3RydWN0IG1lZGlhX3BhZCAqcGFkcyA9IGJyaWRnZS0+cGFkczsKKwlzdHJ1Y3Qg ZGV2aWNlICpkZXYgPSBjc2kyX2Rldi0+ZGV2OworCWludCByZXQ7CisKKwltdXRleF9pbml0KCZi cmlkZ2UtPmxvY2spOworCisJLyogVjRMMiBTdWJkZXYgKi8KKworCXY0bDJfc3ViZGV2X2luaXQo c3ViZGV2LCAmc3VuOGlfYTgzdF9taXBpX2NzaTJfc3ViZGV2X29wcyk7CisJc3Ryc2NweShzdWJk ZXYtPm5hbWUsIFNVTjhJX0E4M1RfTUlQSV9DU0kyX05BTUUsIHNpemVvZihzdWJkZXYtPm5hbWUp KTsKKwlzdWJkZXYtPmZsYWdzIHw9IFY0TDJfU1VCREVWX0ZMX0hBU19ERVZOT0RFOworCXN1YmRl di0+b3duZXIgPSBUSElTX01PRFVMRTsKKwlzdWJkZXYtPmRldiA9IGRldjsKKworCXY0bDJfc2V0 X3N1YmRldmRhdGEoc3ViZGV2LCBjc2kyX2Rldik7CisKKwkvKiBNZWRpYSBFbnRpdHkgKi8KKwor CXN1YmRldi0+ZW50aXR5LmZ1bmN0aW9uID0gTUVESUFfRU5UX0ZfVklEX0lGX0JSSURHRTsKKwlz dWJkZXYtPmVudGl0eS5vcHMgPSAmc3VuOGlfYTgzdF9taXBpX2NzaTJfZW50aXR5X29wczsKKwor CS8qIE1lZGlhIFBhZHMgKi8KKworCXBhZHNbU1VOOElfQTgzVF9NSVBJX0NTSTJfUEFEX1NJTktd LmZsYWdzID0gTUVESUFfUEFEX0ZMX1NJTks7CisJcGFkc1tTVU44SV9BODNUX01JUElfQ1NJMl9Q QURfU09VUkNFXS5mbGFncyA9IE1FRElBX1BBRF9GTF9TT1VSQ0U7CisKKwlyZXQgPSBtZWRpYV9l bnRpdHlfcGFkc19pbml0KCZzdWJkZXYtPmVudGl0eSwKKwkJCQkgICAgIFNVTjhJX0E4M1RfTUlQ SV9DU0kyX1BBRF9DT1VOVCwgcGFkcyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8q IFY0TDIgQXN5bmMgKi8KKworCXY0bDJfYXN5bmNfbmZfaW5pdChub3RpZmllcik7CisJbm90aWZp ZXItPm9wcyA9ICZzdW44aV9hODN0X21pcGlfY3NpMl9ub3RpZmllcl9vcHM7CisKKwlyZXQgPSBz dW44aV9hODN0X21pcGlfY3NpMl9icmlkZ2Vfc291cmNlX3NldHVwKGNzaTJfZGV2KTsKKwlpZiAo cmV0KQorCQlnb3RvIGVycm9yX3Y0bDJfbm90aWZpZXJfY2xlYW51cDsKKworCXJldCA9IHY0bDJf YXN5bmNfc3ViZGV2X25mX3JlZ2lzdGVyKHN1YmRldiwgbm90aWZpZXIpOworCWlmIChyZXQgPCAw KQorCQlnb3RvIGVycm9yX3Y0bDJfbm90aWZpZXJfY2xlYW51cDsKKworCS8qIFY0TDIgU3ViZGV2 ICovCisKKwlyZXQgPSB2NGwyX2FzeW5jX3JlZ2lzdGVyX3N1YmRldihzdWJkZXYpOworCWlmIChy ZXQgPCAwKQorCQlnb3RvIGVycm9yX3Y0bDJfbm90aWZpZXJfdW5yZWdpc3RlcjsKKworCXJldHVy biAwOworCitlcnJvcl92NGwyX25vdGlmaWVyX3VucmVnaXN0ZXI6CisJdjRsMl9hc3luY19uZl91 bnJlZ2lzdGVyKG5vdGlmaWVyKTsKKworZXJyb3JfdjRsMl9ub3RpZmllcl9jbGVhbnVwOgorCXY0 bDJfYXN5bmNfbmZfY2xlYW51cChub3RpZmllcik7CisKKwltZWRpYV9lbnRpdHlfY2xlYW51cCgm c3ViZGV2LT5lbnRpdHkpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQKK3N1bjhp X2E4M3RfbWlwaV9jc2kyX2JyaWRnZV9jbGVhbnVwKHN0cnVjdCBzdW44aV9hODN0X21pcGlfY3Np Ml9kZXZpY2UgKmNzaTJfZGV2KQoreworCXN0cnVjdCB2NGwyX3N1YmRldiAqc3ViZGV2ID0gJmNz aTJfZGV2LT5icmlkZ2Uuc3ViZGV2OworCXN0cnVjdCB2NGwyX2FzeW5jX25vdGlmaWVyICpub3Rp ZmllciA9ICZjc2kyX2Rldi0+YnJpZGdlLm5vdGlmaWVyOworCisJdjRsMl9hc3luY191bnJlZ2lz dGVyX3N1YmRldihzdWJkZXYpOworCXY0bDJfYXN5bmNfbmZfdW5yZWdpc3Rlcihub3RpZmllcik7 CisJdjRsMl9hc3luY19uZl9jbGVhbnVwKG5vdGlmaWVyKTsKKwltZWRpYV9lbnRpdHlfY2xlYW51 cCgmc3ViZGV2LT5lbnRpdHkpOworfQorCisvKiBQbGF0Zm9ybSAqLworCitzdGF0aWMgaW50IHN1 bjhpX2E4M3RfbWlwaV9jc2kyX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVj dCBzdW44aV9hODN0X21pcGlfY3NpMl9kZXZpY2UgKmNzaTJfZGV2ID0gZGV2X2dldF9kcnZkYXRh KGRldik7CisKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoY3NpMl9kZXYtPmNsa19taXNjKTsKKwlj bGtfZGlzYWJsZV91bnByZXBhcmUoY3NpMl9kZXYtPmNsa19taXBpKTsKKwljbGtfZGlzYWJsZV91 bnByZXBhcmUoY3NpMl9kZXYtPmNsa19tb2QpOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShjc2ky X2Rldi0+Y2xrX2J1cyk7CisJcmVzZXRfY29udHJvbF9hc3NlcnQoY3NpMl9kZXYtPnJlc2V0KTsK KworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN1bjhpX2E4M3RfbWlwaV9jc2kyX3Jlc3Vt ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHN1bjhpX2E4M3RfbWlwaV9jc2kyX2Rl dmljZSAqY3NpMl9kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgcmV0OworCisJcmV0 ID0gcmVzZXRfY29udHJvbF9kZWFzc2VydChjc2kyX2Rldi0+cmVzZXQpOworCWlmIChyZXQpIHsK KwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZGVhc3NlcnQgcmVzZXRcbiIpOworCQlyZXR1cm4g cmV0OworCX0KKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShjc2kyX2Rldi0+Y2xrX2J1cyk7 CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBlbmFibGUgYnVzIGNsb2Nr XG4iKTsKKwkJZ290byBlcnJvcl9yZXNldDsKKwl9CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFi bGUoY3NpMl9kZXYtPmNsa19tb2QpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJmYWls ZWQgdG8gZW5hYmxlIG1vZHVsZSBjbG9ja1xuIik7CisJCWdvdG8gZXJyb3JfY2xrX2J1czsKKwl9 CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoY3NpMl9kZXYtPmNsa19taXBpKTsKKwlpZiAo cmV0KSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGVuYWJsZSBNSVBJIGNsb2NrXG4iKTsK KwkJZ290byBlcnJvcl9jbGtfbW9kOworCX0KKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShj c2kyX2Rldi0+Y2xrX21pc2MpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQg dG8gZW5hYmxlIENTSSBtaXNjIGNsb2NrXG4iKTsKKwkJZ290byBlcnJvcl9jbGtfbWlwaTsKKwl9 CisKKwlzdW44aV9hODN0X21pcGlfY3NpMl9pbml0KGNzaTJfZGV2KTsKKworCXJldHVybiAwOwor CitlcnJvcl9jbGtfbWlwaToKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoY3NpMl9kZXYtPmNsa19t aXBpKTsKKworZXJyb3JfY2xrX21vZDoKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoY3NpMl9kZXYt PmNsa19tb2QpOworCitlcnJvcl9jbGtfYnVzOgorCWNsa19kaXNhYmxlX3VucHJlcGFyZShjc2ky X2Rldi0+Y2xrX2J1cyk7CisKK2Vycm9yX3Jlc2V0OgorCXJlc2V0X2NvbnRyb2xfYXNzZXJ0KGNz aTJfZGV2LT5yZXNldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0 IGRldl9wbV9vcHMgc3VuOGlfYTgzdF9taXBpX2NzaTJfcG1fb3BzID0geworCVNFVF9SVU5USU1F X1BNX09QUyhzdW44aV9hODN0X21pcGlfY3NpMl9zdXNwZW5kLAorCQkJICAgc3VuOGlfYTgzdF9t aXBpX2NzaTJfcmVzdW1lLCBOVUxMKQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBf Y29uZmlnIHN1bjhpX2E4M3RfbWlwaV9jc2kyX3JlZ21hcF9jb25maWcgPSB7CisJLnJlZ19iaXRz ICAgICAgID0gMzIsCisJLnJlZ19zdHJpZGUgICAgID0gNCwKKwkudmFsX2JpdHMgICAgICAgPSAz MiwKKwkubWF4X3JlZ2lzdGVyCT0gMHgxMjAsCit9OworCitzdGF0aWMgaW50CitzdW44aV9hODN0 X21pcGlfY3NpMl9yZXNvdXJjZXNfc2V0dXAoc3RydWN0IHN1bjhpX2E4M3RfbWlwaV9jc2kyX2Rl dmljZSAqY3NpMl9kZXYsCisJCQkJICAgICBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0Zm9y bV9kZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gY3NpMl9kZXYtPmRldjsKKwlzdHJ1Y3Qg cmVzb3VyY2UgKnJlczsKKwl2b2lkIF9faW9tZW0gKmlvX2Jhc2U7CisJaW50IHJldDsKKworCS8q IFJlZ2lzdGVycyAqLworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBsYXRmb3JtX2Rl diwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlvX2Jhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2Uo ZGV2LCByZXMpOworCWlmIChJU19FUlIoaW9fYmFzZSkpCisJCXJldHVybiBQVFJfRVJSKGlvX2Jh c2UpOworCisJY3NpMl9kZXYtPnJlZ21hcCA9CisJCWRldm1fcmVnbWFwX2luaXRfbW1pbyhkZXYs IGlvX2Jhc2UsCisJCQkJICAgICAgJnN1bjhpX2E4M3RfbWlwaV9jc2kyX3JlZ21hcF9jb25maWcp OworCWlmIChJU19FUlIoY3NpMl9kZXYtPnJlZ21hcCkpIHsKKwkJZGV2X2VycihkZXYsICJmYWls ZWQgdG8gaW5pdCByZWdpc3RlciBtYXBcbiIpOworCQlyZXR1cm4gUFRSX0VSUihjc2kyX2Rldi0+ cmVnbWFwKTsKKwl9CisKKwkvKiBDbG9ja3MgKi8KKworCWNzaTJfZGV2LT5jbGtfYnVzID0gZGV2 bV9jbGtfZ2V0KGRldiwgImJ1cyIpOworCWlmIChJU19FUlIoY3NpMl9kZXYtPmNsa19idXMpKSB7 CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGFjcXVpcmUgYnVzIGNsb2NrXG4iKTsKKwkJcmV0 dXJuIFBUUl9FUlIoY3NpMl9kZXYtPmNsa19idXMpOworCX0KKworCWNzaTJfZGV2LT5jbGtfbW9k ID0gZGV2bV9jbGtfZ2V0KGRldiwgIm1vZCIpOworCWlmIChJU19FUlIoY3NpMl9kZXYtPmNsa19t b2QpKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGFjcXVpcmUgbW9kIGNsb2NrXG4iKTsK KwkJcmV0dXJuIFBUUl9FUlIoY3NpMl9kZXYtPmNsa19tb2QpOworCX0KKworCXJldCA9IGNsa19z ZXRfcmF0ZV9leGNsdXNpdmUoY3NpMl9kZXYtPmNsa19tb2QsIDI5NzAwMDAwMCk7CisJaWYgKHJl dCkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBzZXQgbW9kIGNsb2NrIHJhdGVcbiIpOwor CQlyZXR1cm4gcmV0OworCX0KKworCWNzaTJfZGV2LT5jbGtfbWlwaSA9IGRldm1fY2xrX2dldChk ZXYsICJtaXBpIik7CisJaWYgKElTX0VSUihjc2kyX2Rldi0+Y2xrX21pcGkpKSB7CisJCWRldl9l cnIoZGV2LCAiZmFpbGVkIHRvIGFjcXVpcmUgbWlwaSBjbG9ja1xuIik7CisJCXJldHVybiBQVFJf RVJSKGNzaTJfZGV2LT5jbGtfbWlwaSk7CisJfQorCisJY3NpMl9kZXYtPmNsa19taXNjID0gZGV2 bV9jbGtfZ2V0KGRldiwgIm1pc2MiKTsKKwlpZiAoSVNfRVJSKGNzaTJfZGV2LT5jbGtfbWlzYykp IHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gYWNxdWlyZSBtaXNjIGNsb2NrXG4iKTsKKwkJ cmV0dXJuIFBUUl9FUlIoY3NpMl9kZXYtPmNsa19taXNjKTsKKwl9CisKKwkvKiBSZXNldCAqLwor CisJY3NpMl9kZXYtPnJlc2V0ID0gZGV2bV9yZXNldF9jb250cm9sX2dldF9zaGFyZWQoZGV2LCBO VUxMKTsKKwlpZiAoSVNfRVJSKGNzaTJfZGV2LT5yZXNldCkpIHsKKwkJZGV2X2VycihkZXYsICJm YWlsZWQgdG8gZ2V0IHJlc2V0IGNvbnRyb2xsZXJcbiIpOworCQlyZXR1cm4gUFRSX0VSUihjc2ky X2Rldi0+cmVzZXQpOworCX0KKworCS8qIEQtUEhZICovCisKKwlyZXQgPSBzdW44aV9hODN0X2Rw aHlfcmVnaXN0ZXIoY3NpMl9kZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJmYWls ZWQgdG8gaW5pdGlhbGl6ZSBNSVBJIEQtUEhZXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkv KiBSdW50aW1lIFBNICovCisKKwlwbV9ydW50aW1lX2VuYWJsZShkZXYpOworCXBtX3J1bnRpbWVf c2V0X3N1c3BlbmRlZChkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitzdW44 aV9hODN0X21pcGlfY3NpMl9yZXNvdXJjZXNfY2xlYW51cChzdHJ1Y3Qgc3VuOGlfYTgzdF9taXBp X2NzaTJfZGV2aWNlICpjc2kyX2RldikKK3sKKwlwbV9ydW50aW1lX2Rpc2FibGUoY3NpMl9kZXYt PmRldik7CisJcGh5X2V4aXQoY3NpMl9kZXYtPmRwaHkpOworCWNsa19yYXRlX2V4Y2x1c2l2ZV9w dXQoY3NpMl9kZXYtPmNsa19tb2QpOworfQorCitzdGF0aWMgaW50IHN1bjhpX2E4M3RfbWlwaV9j c2kyX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRmb3JtX2RldikKK3sKKwlzdHJ1 Y3Qgc3VuOGlfYTgzdF9taXBpX2NzaTJfZGV2aWNlICpjc2kyX2RldjsKKwlzdHJ1Y3QgZGV2aWNl ICpkZXYgPSAmcGxhdGZvcm1fZGV2LT5kZXY7CisJaW50IHJldDsKKworCWNzaTJfZGV2ID0gZGV2 bV9remFsbG9jKGRldiwgc2l6ZW9mKCpjc2kyX2RldiksIEdGUF9LRVJORUwpOworCWlmICghY3Np Ml9kZXYpCisJCXJldHVybiAtRU5PTUVNOworCisJY3NpMl9kZXYtPmRldiA9IGRldjsKKwlwbGF0 Zm9ybV9zZXRfZHJ2ZGF0YShwbGF0Zm9ybV9kZXYsIGNzaTJfZGV2KTsKKworCXJldCA9IHN1bjhp X2E4M3RfbWlwaV9jc2kyX3Jlc291cmNlc19zZXR1cChjc2kyX2RldiwgcGxhdGZvcm1fZGV2KTsK KwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gc3VuOGlfYTgzdF9taXBpX2NzaTJf YnJpZGdlX3NldHVwKGNzaTJfZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3VuOGlfYTgzdF9taXBpX2NzaTJfcmVtb3ZlKHN0cnVj dCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRmb3JtX2RldikKK3sKKwlzdHJ1Y3Qgc3VuOGlfYTgzdF9t aXBpX2NzaTJfZGV2aWNlICpjc2kyX2RldiA9CisJCXBsYXRmb3JtX2dldF9kcnZkYXRhKHBsYXRm b3JtX2Rldik7CisKKwlzdW44aV9hODN0X21pcGlfY3NpMl9icmlkZ2VfY2xlYW51cChjc2kyX2Rl dik7CisJc3VuOGlfYTgzdF9taXBpX2NzaTJfcmVzb3VyY2VzX2NsZWFudXAoY3NpMl9kZXYpOwor CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHN1bjhp X2E4M3RfbWlwaV9jc2kyX29mX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJhbGx3aW5u ZXIsc3VuOGktYTgzdC1taXBpLWNzaTIiIH0sCisJe30sCit9OworTU9EVUxFX0RFVklDRV9UQUJM RShvZiwgc3VuOGlfYTgzdF9taXBpX2NzaTJfb2ZfbWF0Y2gpOworCitzdGF0aWMgc3RydWN0IHBs YXRmb3JtX2RyaXZlciBzdW44aV9hODN0X21pcGlfY3NpMl9wbGF0Zm9ybV9kcml2ZXIgPSB7CisJ LnByb2JlID0gc3VuOGlfYTgzdF9taXBpX2NzaTJfcHJvYmUsCisJLnJlbW92ZSA9IHN1bjhpX2E4 M3RfbWlwaV9jc2kyX3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9IFNVTjhJX0E4M1Rf TUlQSV9DU0kyX05BTUUsCisJCS5vZl9tYXRjaF90YWJsZSA9IG9mX21hdGNoX3B0cihzdW44aV9h ODN0X21pcGlfY3NpMl9vZl9tYXRjaCksCisJCS5wbSA9ICZzdW44aV9hODN0X21pcGlfY3NpMl9w bV9vcHMsCisJfSwKK307Cittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKHN1bjhpX2E4M3RfbWlwaV9j c2kyX3BsYXRmb3JtX2RyaXZlcik7CisKK01PRFVMRV9ERVNDUklQVElPTigiQWxsd2lubmVyIEE4 M1QgTUlQSSBDU0ktMiBhbmQgRC1QSFkgQ29udHJvbGxlciBEcml2ZXIiKTsKK01PRFVMRV9BVVRI T1IoIlBhdWwgS29jaWFsa293c2tpIDxwYXVsLmtvY2lhbGtvd3NraUBib290bGluLmNvbT4iKTsK K01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZv cm0vc3VueGkvc3VuOGktYTgzdC1taXBpLWNzaTIvc3VuOGlfYTgzdF9taXBpX2NzaTIuaCBiL2Ry aXZlcnMvbWVkaWEvcGxhdGZvcm0vc3VueGkvc3VuOGktYTgzdC1taXBpLWNzaTIvc3VuOGlfYTgz dF9taXBpX2NzaTIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmZj ODE3OTgxYWI4MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc3Vu eGkvc3VuOGktYTgzdC1taXBpLWNzaTIvc3VuOGlfYTgzdF9taXBpX2NzaTIuaApAQCAtMCwwICsx LDU2IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsgKi8KKy8qCisgKiBD b3B5cmlnaHQgMjAyMCBLw6l2aW4gTCdow7RwaXRhbCA8a2V2aW4ubGhvcGl0YWxAYm9vdGxpbi5j b20+CisgKiBDb3B5cmlnaHQgMjAyMCBCb290bGluCisgKiBBdXRob3I6IFBhdWwgS29jaWFsa293 c2tpIDxwYXVsLmtvY2lhbGtvd3NraUBib290bGluLmNvbT4KKyAqLworCisjaWZuZGVmIF9TVU44 SV9BODNUX01JUElfQ1NJMl9IXworI2RlZmluZSBfU1VOOElfQTgzVF9NSVBJX0NTSTJfSF8KKwor I2luY2x1ZGUgPGxpbnV4L3BoeS9waHkuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKyNp bmNsdWRlIDxsaW51eC9yZXNldC5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+Cisj aW5jbHVkZSA8bWVkaWEvdjRsMi1md25vZGUuaD4KKworI2RlZmluZSBTVU44SV9BODNUX01JUElf Q1NJMl9OQU1FCSJzdW44aS1hODN0LW1pcGktY3NpMiIKKworZW51bSBzdW44aV9hODN0X21pcGlf Y3NpMl9wYWQgeworCVNVTjhJX0E4M1RfTUlQSV9DU0kyX1BBRF9TSU5LCT0gMCwKKwlTVU44SV9B ODNUX01JUElfQ1NJMl9QQURfU09VUkNFCT0gMSwKKwlTVU44SV9BODNUX01JUElfQ1NJMl9QQURf Q09VTlQJPSAyLAorfTsKKworc3RydWN0IHN1bjhpX2E4M3RfbWlwaV9jc2kyX2Zvcm1hdCB7CisJ dTMyCW1idXNfY29kZTsKKwl1OAlkYXRhX3R5cGU7CisJdTMyCWJwcDsKK307CisKK3N0cnVjdCBz dW44aV9hODN0X21pcGlfY3NpMl9icmlkZ2UgeworCXN0cnVjdCB2NGwyX3N1YmRldgkJc3ViZGV2 OworCXN0cnVjdCBtZWRpYV9wYWQJCXBhZHNbU1VOOElfQTgzVF9NSVBJX0NTSTJfUEFEX0NPVU5U XTsKKwlzdHJ1Y3QgdjRsMl9md25vZGVfZW5kcG9pbnQJZW5kcG9pbnQ7CisJc3RydWN0IHY0bDJf YXN5bmNfbm90aWZpZXIJbm90aWZpZXI7CisJc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdAltYnVz X2Zvcm1hdDsKKwlzdHJ1Y3QgbXV0ZXgJCQlsb2NrOyAvKiBNYnVzIGZvcm1hdCBsb2NrLiAqLwor CisJc3RydWN0IHY0bDJfc3ViZGV2CQkqc291cmNlX3N1YmRldjsKK307CisKK3N0cnVjdCBzdW44 aV9hODN0X21pcGlfY3NpMl9kZXZpY2UgeworCXN0cnVjdCBkZXZpY2UJCQkJKmRldjsKKworCXN0 cnVjdCByZWdtYXAJCQkJKnJlZ21hcDsKKwlzdHJ1Y3QgY2xrCQkJCSpjbGtfYnVzOworCXN0cnVj dCBjbGsJCQkJKmNsa19tb2Q7CisJc3RydWN0IGNsawkJCQkqY2xrX21pcGk7CisJc3RydWN0IGNs awkJCQkqY2xrX21pc2M7CisJc3RydWN0IHJlc2V0X2NvbnRyb2wJCQkqcmVzZXQ7CisJc3RydWN0 IHBoeQkJCQkqZHBoeTsKKworCXN0cnVjdCBzdW44aV9hODN0X21pcGlfY3NpMl9icmlkZ2UJYnJp ZGdlOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3N1 bnhpL3N1bjhpLWE4M3QtbWlwaS1jc2kyL3N1bjhpX2E4M3RfbWlwaV9jc2kyX3JlZy5oIGIvZHJp dmVycy9tZWRpYS9wbGF0Zm9ybS9zdW54aS9zdW44aS1hODN0LW1pcGktY3NpMi9zdW44aV9hODN0 X21pcGlfY3NpMl9yZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAu LmM4MjhhZDE5ZTNkNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0v c3VueGkvc3VuOGktYTgzdC1taXBpLWNzaTIvc3VuOGlfYTgzdF9taXBpX2NzaTJfcmVnLmgKQEAg LTAsMCArMSwxNTEgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKyAqLwor LyoKKyAqIENvcHlyaWdodCAyMDIwIEvDqXZpbiBMJ2jDtHBpdGFsIDxrZXZpbi5saG9waXRhbEBi b290bGluLmNvbT4KKyAqIENvcHlyaWdodCAyMDIwLTIwMjEgQm9vdGxpbgorICogQXV0aG9yOiBQ YXVsIEtvY2lhbGtvd3NraSA8cGF1bC5rb2NpYWxrb3dza2lAYm9vdGxpbi5jb20+CisgKi8KKwor I2lmbmRlZiBfU1VOOElfQTgzVF9NSVBJX0NTSTJfUkVHX0hfCisjZGVmaW5lIF9TVU44SV9BODNU X01JUElfQ1NJMl9SRUdfSF8KKworI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9WRVJTSU9O X1JFRwkJCTB4MAorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9DVFJMX1JFRwkJCQkweDQK KyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfQ1RSTF9JTklUX1ZBTFVFCQkJMHhiOGMzOWJl YworI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9DVFJMX1JFU0VUX04JCQlCSVQoMzEpCisj ZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX1JYX1BLVF9OVU1fUkVHCQkJMHg4CisjZGVmaW5l IFNVTjhJX0E4M1RfTUlQSV9DU0kyX1JYX1BLVF9OVU1fSU5JVF9WQUxVRQkJMHhiOGQyNTdmOAor I2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9SU1ZEMF9SRUcJCQkJMHhjCisKKyNkZWZpbmUg U1VOOElfQTgzVF9NSVBJX0NTSTJfUlNWRDFfUkVHCQkJCTB4MTgKKyNkZWZpbmUgU1VOOElfQTgz VF9NSVBJX0NTSTJfUlNWRDFfSFdfTE9DS19WQUxVRQkJMHhiOGM4YTMwYworI2RlZmluZSBTVU44 SV9BODNUX01JUElfQ1NJMl9SU1ZEMl9SRUcJCQkJMHgxYworI2RlZmluZSBTVU44SV9BODNUX01J UElfQ1NJMl9SU1ZEMl9IV19MT0NLX1ZBTFVFCQkweGI4ZGY4YWQ3CisjZGVmaW5lIFNVTjhJX0E4 M1RfTUlQSV9DU0kyX0lOVF9TVEEwX1JFRwkJCTB4MjAKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJ X0NTSTJfSU5UX1NUQTBfRUNDX0VSUl9EQkwJCUJJVCgyOCkKKyNkZWZpbmUgU1VOOElfQTgzVF9N SVBJX0NTSTJfSU5UX1NUQTBfTElORV9DS1NNX0VSUl9WQzMJCUJJVCgyNykKKyNkZWZpbmUgU1VO OElfQTgzVF9NSVBJX0NTSTJfSU5UX1NUQTBfTElORV9DS1NNX0VSUl9WQzIJCUJJVCgyNikKKyNk ZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX1NUQTBfTElORV9DS1NNX0VSUl9WQzEJCUJJ VCgyNSkKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX1NUQTBfTElORV9DS1NNX0VS Ul9WQzAJCUJJVCgyNCkKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX1NUQTBfTElO RV9TRVFfRVJSX0RUMwkJQklUKDIzKQorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9JTlRf U1RBMF9MSU5FX1NFUV9FUlJfRFQyCQlCSVQoMjIpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9D U0kyX0lOVF9TVEEwX0xJTkVfU0VRX0VSUl9EVDEJCUJJVCgyMSkKKyNkZWZpbmUgU1VOOElfQTgz VF9NSVBJX0NTSTJfSU5UX1NUQTBfTElORV9TRVFfRVJSX0RUMAkJQklUKDIwKQorI2RlZmluZSBT VU44SV9BODNUX01JUElfQ1NJMl9JTlRfU1RBMF9MU19MRV9FUlJfRFQzCQlCSVQoMTkpCisjZGVm aW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9TVEEwX0xTX0xFX0VSUl9EVDIJCUJJVCgxOCkK KyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX1NUQTBfTFNfTEVfRVJSX0RUMQkJQklU KDE3KQorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9JTlRfU1RBMF9MU19MRV9FUlJfRFQw CQlCSVQoMTYpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9TVEEwX0NSQ19FUlJf VkMzCQlCSVQoMTUpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9TVEEwX0NSQ19F UlJfVkMyCQlCSVQoMTQpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9TVEEwX0NS Q19FUlJfVkMxCQlCSVQoMTMpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9TVEEw X0NSQ19FUlJfVkMwCQlCSVQoMTIpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9T VEEwX0ZSTV9TRVFfRVJSX1ZDMwkJQklUKDExKQorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJ Ml9JTlRfU1RBMF9GUk1fU0VRX0VSUl9WQzIJCUJJVCgxMCkKKyNkZWZpbmUgU1VOOElfQTgzVF9N SVBJX0NTSTJfSU5UX1NUQTBfRlJNX1NFUV9FUlJfVkMxCQlCSVQoOSkKKyNkZWZpbmUgU1VOOElf QTgzVF9NSVBJX0NTSTJfSU5UX1NUQTBfRlJNX1NFUV9FUlJfVkMwCQlCSVQoOCkKKyNkZWZpbmUg U1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX1NUQTBfRlNfRkVfRVJSX1ZDMwkJQklUKDcpCisjZGVm aW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9TVEEwX0ZTX0ZFX0VSUl9WQzIJCUJJVCg2KQor I2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9JTlRfU1RBMF9GU19GRV9FUlJfVkMxCQlCSVQo NSkKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX1NUQTBfRlNfRkVfRVJSX1ZDMAkJ QklUKDQpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9TVEEwX1NPVF9TWU5DX0VS Ul8zCQlCSVQoMykKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX1NUQTBfU09UX1NZ TkNfRVJSXzIJCUJJVCgyKQorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9JTlRfU1RBMF9T T1RfU1lOQ19FUlJfMQkJQklUKDEpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9T VEEwX1NPVF9TWU5DX0VSUl8wCQlCSVQoMCkKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJf SU5UX1NUQTFfUkVHCQkJMHgyNAorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9JTlRfU1RB MV9MSU5FX1NFUV9FUlJfRFQ3CQlCSVQoMjMpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0ky X0lOVF9TVEExX0xJTkVfU0VRX0VSUl9EVDYJCUJJVCgyMikKKyNkZWZpbmUgU1VOOElfQTgzVF9N SVBJX0NTSTJfSU5UX1NUQTFfTElORV9TRVFfRVJSX0RUNQkJQklUKDIxKQorI2RlZmluZSBTVU44 SV9BODNUX01JUElfQ1NJMl9JTlRfU1RBMV9MSU5FX1NFUV9FUlJfRFQ0CQlCSVQoMjApCisjZGVm aW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9TVEExX0xTX0xFX0VSUl9EVDcJCUJJVCgxOSkK KyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX1NUQTFfTFNfTEVfRVJSX0RUNgkJQklU KDE4KQorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9JTlRfU1RBMV9MU19MRV9FUlJfRFQ1 CQlCSVQoMTcpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9TVEExX0xTX0xFX0VS Ul9EVDQJCUJJVCgxNikKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX1NUQTFfRFRf RVJSX1ZDMwkJQklUKDE1KQorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9JTlRfU1RBMV9E VF9FUlJfVkMyCQlCSVQoMTQpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9TVEEx X0RUX0VSUl9WQzEJCUJJVCgxMykKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX1NU QTFfRFRfRVJSX1ZDMAkJQklUKDEyKQorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9JTlRf U1RBMV9FQ0NfRVJSMV9WQzMJCUJJVCgxMSkKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJf SU5UX1NUQTFfRUNDX0VSUjFfVkMyCQlCSVQoMTApCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9D U0kyX0lOVF9TVEExX0VDQ19FUlIxX1ZDMQkJQklUKDkpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQ SV9DU0kyX0lOVF9TVEExX0VDQ19FUlIxX1ZDMAkJQklUKDgpCisjZGVmaW5lIFNVTjhJX0E4M1Rf TUlQSV9DU0kyX0lOVF9TVEExX1NPVF9FUlJfMwkJCUJJVCg3KQorI2RlZmluZSBTVU44SV9BODNU X01JUElfQ1NJMl9JTlRfU1RBMV9TT1RfRVJSXzIJCQlCSVQoNikKKyNkZWZpbmUgU1VOOElfQTgz VF9NSVBJX0NTSTJfSU5UX1NUQTFfU09UX0VSUl8xCQkJQklUKDUpCisjZGVmaW5lIFNVTjhJX0E4 M1RfTUlQSV9DU0kyX0lOVF9TVEExX1NPVF9FUlJfMAkJCUJJVCg0KQorI2RlZmluZSBTVU44SV9B ODNUX01JUElfQ1NJMl9JTlRfU1RBMV9FU0NfRU5UUllfRVJSXzMJCUJJVCgzKQorI2RlZmluZSBT VU44SV9BODNUX01JUElfQ1NJMl9JTlRfU1RBMV9FU0NfRU5UUllfRVJSXzIJCUJJVCgyKQorI2Rl ZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9JTlRfU1RBMV9FU0NfRU5UUllfRVJSXzEJCUJJVCgx KQorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9JTlRfU1RBMV9FU0NfRU5UUllfRVJSXzAJ CUJJVCgwKQorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9JTlRfTVNLMF9SRUcJCQkweDI4 CisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9NU0swX0VDQ19FUlJfREJMCQlCSVQo MjgpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9NU0swX0NLU01fRVJSX1ZDMwkJ QklUKDI3KQorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9JTlRfTVNLMF9DS1NNX0VSUl9W QzIJCUJJVCgyNikKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX01TSzBfQ0tTTV9F UlJfVkMxCQlCSVQoMjUpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9NU0swX0NL U01fRVJSX1ZDMAkJQklUKDI0KQorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9JTlRfTVNL MF9MSU5FX1NFUV9FUlJfRFQzCQlCSVQoMjMpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0ky X0lOVF9NU0swX0xJTkVfU0VRX0VSUl9EVDIJCUJJVCgyMikKKyNkZWZpbmUgU1VOOElfQTgzVF9N SVBJX0NTSTJfSU5UX01TSzBfTElORV9TRVFfRVJSX0RUMQkJQklUKDIxKQorI2RlZmluZSBTVU44 SV9BODNUX01JUElfQ1NJMl9JTlRfTVNLMF9MSU5FX1NFUV9FUlJfRFQwCQlCSVQoMjApCisjZGVm aW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9NU0swX0xTX0xFX0VSUl9EVDMJCUJJVCgxOSkK KyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX01TSzBfTFNfTEVfRVJSX0RUMgkJQklU KDE4KQorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9JTlRfTVNLMF9MU19MRV9FUlJfRFQx CQlCSVQoMTcpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9NU0swX0xTX0xFX0VS Ul9EVDAJCUJJVCgxNikKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX01TSzBfQ1JD X0VSUl9WQzMJCUJJVCgxNSkKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX01TSzBf Q1JDX0VSUl9WQzIJCUJJVCgxNCkKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX01T SzBfQ1JDX0VSUl9WQzEJCUJJVCgxMykKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5U X01TSzBfQ1JDX0VSUl9WQzAJCUJJVCgxMikKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJf SU5UX01TSzBfRlJNX1NFUV9FUlJfVkMzCQlCSVQoMTEpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQ SV9DU0kyX0lOVF9NU0swX0ZSTV9TRVFfRVJSX1ZDMgkJQklUKDEwKQorI2RlZmluZSBTVU44SV9B ODNUX01JUElfQ1NJMl9JTlRfTVNLMF9GUk1fU0VRX0VSUl9WQzEJCUJJVCg5KQorI2RlZmluZSBT VU44SV9BODNUX01JUElfQ1NJMl9JTlRfTVNLMF9GUk1fU0VRX0VSUl9WQzAJCUJJVCg4KQorI2Rl ZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9JTlRfTVNLMF9GU19GRV9FUlJfVkMzCQlCSVQoNykK KyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX01TSzBfRlNfRkVfRVJSX1ZDMgkJQklU KDYpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9NU0swX0ZTX0ZFX0VSUl9WQzEJ CUJJVCg1KQorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9JTlRfTVNLMF9GU19GRV9FUlJf VkMwCQlCSVQoNCkKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX01TSzBfU09UX1NZ TkNfRVJSXzMJCUJJVCgzKQorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9JTlRfTVNLMF9T T1RfU1lOQ19FUlJfMgkJQklUKDIpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9N U0swX1NPVF9TWU5DX0VSUl8xCQlCSVQoMSkKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJf SU5UX01TSzBfU09UX1NZTkNfRVJSXzAJCUJJVCgwKQorI2RlZmluZSBTVU44SV9BODNUX01JUElf Q1NJMl9JTlRfTVNLMV9SRUcJCQkweDJjCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lO VF9NU0sxX0RUX0VSUl9WQzMJCUJJVCgxNSkKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJf SU5UX01TSzFfRFRfRVJSX1ZDMgkJQklUKDE0KQorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJ Ml9JTlRfTVNLMV9EVF9FUlJfVkMxCQlCSVQoMTMpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9D U0kyX0lOVF9NU0sxX0RUX0VSUl9WQzAJCUJJVCgxMikKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJ X0NTSTJfSU5UX01TSzFfRUNDX0VSUjFfVkMzCQlCSVQoMTEpCisjZGVmaW5lIFNVTjhJX0E4M1Rf TUlQSV9DU0kyX0lOVF9NU0sxX0VDQ19FUlIxX1ZDMgkJQklUKDEwKQorI2RlZmluZSBTVU44SV9B ODNUX01JUElfQ1NJMl9JTlRfTVNLMV9FQ0NfRVJSMV9WQzEJCUJJVCg5KQorI2RlZmluZSBTVU44 SV9BODNUX01JUElfQ1NJMl9JTlRfTVNLMV9FQ0NfRVJSMV9WQzAJCUJJVCg4KQorI2RlZmluZSBT VU44SV9BODNUX01JUElfQ1NJMl9JTlRfTVNLMV9TT1RfRVJSXzMJCQlCSVQoNykKKyNkZWZpbmUg U1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX01TSzFfU09UX0VSUl8yCQkJQklUKDYpCisjZGVmaW5l IFNVTjhJX0E4M1RfTUlQSV9DU0kyX0lOVF9NU0sxX1NPVF9FUlJfMQkJCUJJVCg1KQorI2RlZmlu ZSBTVU44SV9BODNUX01JUElfQ1NJMl9JTlRfTVNLMV9TT1RfRVJSXzAJCQlCSVQoNCkKKyNkZWZp bmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX01TSzFfRVNDX0VOVFJZX0VSUl8zCQlCSVQoMykK KyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX01TSzFfRVNDX0VOVFJZX0VSUl8yCQlC SVQoMikKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX01TSzFfRVNDX0VOVFJZX0VS Ul8xCQlCSVQoMSkKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfSU5UX01TSzFfRVNDX0VO VFJZX0VSUl8wCQlCSVQoMCkKKworI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9DRkdfUkVH CQkJCTB4MTAwCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0NGR19JTklUX1ZBTFVFCQkJ MHhiOGM2NGYyNAorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9DRkdfU1lOQ19FTgkJCUJJ VCgzMSkKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfQ0ZHX0JZUEFTU19FQ0NfRU4JCQlC SVQoMjkpCisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0NGR19VTlBLVF9FTgkJCUJJVCgy OCkKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfQ0ZHX05PTkVfVU5QS1RfUlhfTU9ERQkJ QklUKDI3KQorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9DRkdfWUNfU1dBQgkJCUJJVCgy NikKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfQ0ZHX05fQllURQkJCQlCSVQoMjQpCisj ZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX0NGR19TWU5DX0RMWV9DWUNMRSh2KQkJKCgodikg PDwgMTgpICYgXAorCQkJCQkJCQkgR0VOTUFTSygyMiwgMTgpKQorI2RlZmluZSBTVU44SV9BODNU X01JUElfQ1NJMl9DRkdfTl9DSEFOTkVMKHYpCQkJKCgoKHYpIC0gMSkgPDwgMTYpICYgXAorCQkJ CQkJCQkgR0VOTUFTSygxNywgMTYpKQorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9DRkdf Tl9MQU5FKHYpCQkJKCgoKHYpIC0gMSkgPDwgNCkgJiBcCisJCQkJCQkJCSBHRU5NQVNLKDUsIDQp KQorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9WQ0RUMF9SRUcJCQkJMHgxMDQKKyNkZWZp bmUgU1VOOElfQTgzVF9NSVBJX0NTSTJfVkNEVDBfQ0hfVkMoY2gsIHZjKQkJKCgodmMpICYgR0VO TUFTSygxLCAwKSkgPDwgXAorCQkJCQkJCQkgKChjaCkgKiA4ICsgNikpCisjZGVmaW5lIFNVTjhJ X0E4M1RfTUlQSV9DU0kyX1ZDRFQwX0NIX0RUKGNoLCB0KQkJCSgoKHQpICYgR0VOTUFTSyg1LCAw KSkgPDwgXAorCQkJCQkJCQkgKChjaCkgKiA4KSkKKyNkZWZpbmUgU1VOOElfQTgzVF9NSVBJX0NT STJfVkNEVDFfUkVHCQkJCTB4MTA4CisjZGVmaW5lIFNVTjhJX0E4M1RfTUlQSV9DU0kyX1ZDRFQx X0NIX1ZDKGNoLCB2YykJCSgoKHZjKSAmIEdFTk1BU0soMSwgMCkpIDw8IFwKKwkJCQkJCQkJICgo KGNoKSAtIDQpICogOCArIDYpKQorI2RlZmluZSBTVU44SV9BODNUX01JUElfQ1NJMl9WQ0RUMV9D SF9EVChjaCwgdCkJCQkoKCh0KSAmIEdFTk1BU0soNSwgMCkpIDw8IFwKKwkJCQkJCQkJICgoKGNo KSAtIDQpICogOCkpCisKKyNlbmRpZgotLSAKMi4zNS4xCgoKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QK bGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRl YWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=