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 0C497C4828D for ; Tue, 6 Feb 2024 11:34:13 +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:CC:To:In-Reply-To:References:Message-ID :MIME-Version:Subject:Date:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=Yio/Gw/J3xU44jAIhFbVShYpTELU+oVhehVgPXIyNdM=; b=IdZl0A+txuTE15 gl1SPqSyRUssuS0+sc3AzGXtvdBONP+K2bvRVp8zucBU0XEF0UiyW6BoY0q5PWXyS17wnjh/mWVhf lTaj8XzZfQQhqMs2ThUFvRqucWId+pBHP9y5vvl4LY7lgY+PtlLumSM/U1vJIn3SLmM2nykYYb3rF gp97dvv5iDFn/ZpyRUj7vSqH+IPFLAv0rvfnBEY6IfXtt3oizWzZ8hN4evz03YQUdKBOvt34Lfweq bSEquzNeOjeeKbcLANQoqNr7zddkYB32+Jp1T1mWGn6UP65nlvQmiieIHbRymETtqdbZI4y7y8VJz SW0BRRxpS125wi0TgTjw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rXJiE-00000007LpA-2rYh; Tue, 06 Feb 2024 11:34:02 +0000 Received: from mx08-00178001.pphosted.com ([91.207.212.93]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1rXJi5-00000007Lh9-3gH6 for linux-arm-kernel@lists.infradead.org; Tue, 06 Feb 2024 11:33:58 +0000 Received: from pps.filterd (m0369457.ppops.net [127.0.0.1]) by mx07-00178001.pphosted.com (8.17.1.24/8.17.1.24) with ESMTP id 4167EEHm002836; Tue, 6 Feb 2024 12:33:21 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foss.st.com; h= from:date:subject:mime-version:content-type :content-transfer-encoding:message-id:references:in-reply-to:to :cc; s=selector1; bh=TgCeIQGoDWEGCEHoa6ChwG9F861Mm+824oXB/KtRdh0 =; b=7eCcGvQrCiToMaSbQGep+wggWKfAQYB1cnDYwyYNwCgQv1YmnNKcV/zQWWi d4j1unSCEt7KBnRScotVp17shSaNMNkHn6rLBGxT3B3SEXbEKp/wkYCjC0s6j7BT BJflry7b9i62j8vwT/gjX4etjUIphbYOFhJFCfwQ9vNb8pBu77ec4FuINuFQzk6G Z1DDHu+fZiAdUFTAnL4Uadsi3uZNTnNb1GKUEtYNYik9kd7MRkhYveU+8o/p0ebb qyRopGQxI9UMykaxKZaEuXHazD1hRuYou+n5LbU+hPbP3N2lVjHPKrwi9IpzlHUG l4JREMq1T0X3MHq4ee7UhUL4dgQ== Received: from beta.dmz-eu.st.com (beta.dmz-eu.st.com [164.129.1.35]) by mx07-00178001.pphosted.com (PPS) with ESMTPS id 3w21ap0pmm-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 06 Feb 2024 12:33:21 +0100 (CET) Received: from euls16034.sgp.st.com (euls16034.sgp.st.com [10.75.44.20]) by beta.dmz-eu.st.com (STMicroelectronics) with ESMTP id C1C3E100061; Tue, 6 Feb 2024 12:33:20 +0100 (CET) Received: from Webmail-eu.st.com (shfdag1node2.st.com [10.75.129.70]) by euls16034.sgp.st.com (STMicroelectronics) with ESMTP id B680A23C6B7; Tue, 6 Feb 2024 12:33:20 +0100 (CET) Received: from localhost (10.129.178.155) by SHFDAG1NODE2.st.com (10.75.129.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27; Tue, 6 Feb 2024 12:33:19 +0100 From: Raphael Gallais-Pou Date: Tue, 6 Feb 2024 12:33:17 +0100 Subject: [PATCH v4 2/3] drm/stm: lvds: add new STM32 LVDS Display Interface Transmitter driver MIME-Version: 1.0 Message-ID: <20240206-lvds-v4-2-98d5f9af399d@foss.st.com> References: <20240206-lvds-v4-0-98d5f9af399d@foss.st.com> In-Reply-To: <20240206-lvds-v4-0-98d5f9af399d@foss.st.com> To: David Airlie , Daniel Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Maxime Coquelin , Alexandre Torgue , Yannick Fertre , Philippe Cornu , Philipp Zabel CC: , , , , , Raphael Gallais-Pou X-Mailer: b4 0.12.4 X-Originating-IP: [10.129.178.155] X-ClientProxiedBy: EQNCAS1NODE4.st.com (10.75.129.82) To SHFDAG1NODE2.st.com (10.75.129.70) X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-02-06_04,2024-01-31_01,2023-05-22_02 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240206_033354_470009_980343DA X-CRM114-Status: GOOD ( 20.47 ) 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 VGhlIExvdy1Wb2x0YWdlIERpZmZlcmVudGlhbCBTaWduYWxpbmcgKExWRFMpIERpc3BsYXkgSW50 ZXJmYWNlClRyYW5zbWl0dGVyIGhhbmRsZXMgdGhlIExWRFMgcHJvdG9jb2w6IGl0IG1hcHMgdGhl IHBpeGVscyByZWNlaXZlZCBmcm9tCnRoZSB1cHN0cmVhbSBQaXhlbC1ETUEgTENELVRGVCBEaXNw bGF5IENvbnRyb2xsZXIgKExUREMpIG9udG8gdGhlIExWRFMKUEhZLgoKSXQgaXMgY29tcG9zZWQg b2YgdGhyZWUgc3ViIGJsb2NrczoKCSogTFZEUyBob3N0OiBoYW5kbGVzIHRoZSBMVkRTIHByb3Rv Y29sIChGUEQgLyBPcGVuTERJKSBhbmQgbWFwcwoJICBpdHMgaW5wdXQgcGl4ZWxzIG9udG8gdGhl IGRhdGEgbGFuZXMgb2YgdGhlIFBIWQoJKiBMVkRTIFBIWTogcGFyYWxsZWxpemUgdGhlIGRhdGEg YW5kIGRyaXZlcyB0aGUgTFZEUyBkYXRhIGxhbmVzCgkqIExWRFMgd3JhcHBlcjogaGFuZGxlcyB0 b3AtbGV2ZWwgc2V0dGluZ3MKClRoZSBMVkRTIGNvbnRyb2xsZXIgZHJpdmVyIHN1cHBvcnRzIHRo ZSBmb2xsb3dpbmcgaGlnaC1sZXZlbCBmZWF0dXJlczoKCSogRkRQLUxpbmstSSBhbmQgT3BlbkxE SSAodjAuOTUpIHByb3RvY29scwoJKiBTaW5nbGUtTGluayBvciBEdWFsLUxpbmsgb3BlcmF0aW9u CgkqIFNpbmdsZS1EaXNwbGF5IG9yIERvdWJsZS1EaXNwbGF5ICh3aXRoIHRoZSBzYW1lIGNvbnRl bnQKCSAgZHVwbGljYXRlZCBvbiBib3RoKQoJKiBGbGV4aWJsZSBCaXQtTWFwcGluZywgaW5jbHVk aW5nIEpFSURBIGFuZCBWRVNBCgkqIFJHQjg4OCBvciBSR0I2NjYgb3V0cHV0CgkqIFN5bmNocm9u b3VzIGRlc2lnbiwgd2l0aCBvbmUgaW5wdXQgcGl4ZWwgcGVyIGNsb2NrIGN5Y2xlCgpTaWduZWQt b2ZmLWJ5OiBSYXBoYWVsIEdhbGxhaXMtUG91IDxyYXBoYWVsLmdhbGxhaXMtcG91QGZvc3Muc3Qu Y29tPgotLS0KQ2hhbmdlcyBpbiB2NDoKCS0gRXhwbGljaXRseSBpbmNsdWRlIGxpbnV4L3BsYXRm b3JtX2RldmljZS5oLCBkZXBlbmRlbmN5IGludHJvZHVjZWQgYnkKCWVmMTc1YjI5YTI0MiBvZjog U3RvcCBjaXJjdWxhcmx5IGluY2x1ZGluZyBvZl9kZXZpY2UuaCBhbmQgb2ZfcGxhdGZvcm0uaAoK Q2hhbmdlcyBpbiB2MzoKCS0gcy9yZWdyb3Vwcy9pcyBjb21wb3NlZCBvZi8gaW4gY29tbWl0IGxv ZwoJLSBDaGFuZ2UgdGhlIGNvbXBhdGlibGUgdG8gc2hvdyBTb0Mgc3BlY2lmaWNpdHkKCkNoYW5n ZXMgaW4gdjI6CgktIEZpeGVkIENhbWVsIENhc2UgbWFjcm9zCgktIFJlbW92ZWQgZGVidWcgbG9n Ci0tLQogZHJpdmVycy9ncHUvZHJtL3N0bS9LY29uZmlnICB8ICAgMTEgKwogZHJpdmVycy9ncHUv ZHJtL3N0bS9NYWtlZmlsZSB8ICAgIDIgKwogZHJpdmVycy9ncHUvZHJtL3N0bS9sdmRzLmMgICB8 IDEyMjYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAzIGZpbGVz IGNoYW5nZWQsIDEyMzkgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9zdG0vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9zdG0vS2NvbmZpZwppbmRleCBmYTQ5Y2Rl NDNiYjIuLjk2Mjc4MTRkMDI3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3N0bS9LY29u ZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9zdG0vS2NvbmZpZwpAQCAtMjAsMyArMjAsMTQgQEAg Y29uZmlnIERSTV9TVE1fRFNJCiAJc2VsZWN0IERSTV9EV19NSVBJX0RTSQogCWhlbHAKIAkgIENo b29zZSB0aGlzIG9wdGlvbiBmb3IgTUlQSSBEU0kgc3VwcG9ydCBvbiBTVE1pY3JvZWxlY3Ryb25p Y3MgU29DLgorCitjb25maWcgRFJNX1NUTV9MVkRTCisJdHJpc3RhdGUgIlNUTWljcm9lbGVjdHJv bmljcyBMVkRTIERpc3BsYXkgSW50ZXJmYWNlIFRyYW5zbWl0dGVyIERSTSBkcml2ZXIiCisJZGVw ZW5kcyBvbiBEUk1fU1RNCisJaGVscAorCSAgRW5hYmxlIHN1cHBvcnQgZm9yIExWRFMgZW5jb2Rl cnMgb24gU1RNaWNyb2VsZWN0cm9uaWNzIFNvQy4KKwkgIFRoZSBTVE0gTFZEUyBpcyBhIGJyaWRn ZSB3aGljaCBzZXJpYWxpemUgcGl4ZWwgc3RyZWFtIG9udG8KKwkgIGEgTFZEUyBwcm90b2NvbC4K KworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTog dGhlIG1vZHVsZSB3aWxsIGJlCisJICBjYWxsZWQgbHZkcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9zdG0vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vc3RtL01ha2VmaWxlCmluZGV4 IDRkZjVjYWYwMWYzNS4uYWQ3NDBkNjE3NWE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v c3RtL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9zdG0vTWFrZWZpbGUKQEAgLTUsNCAr NSw2IEBAIHN0bS1kcm0teSA6PSBcCiAKIG9iai0kKENPTkZJR19EUk1fU1RNX0RTSSkgKz0gZHdf bWlwaV9kc2ktc3RtLm8KIAorb2JqLSQoQ09ORklHX0RSTV9TVE1fTFZEUykgKz0gbHZkcy5vCisK IG9iai0kKENPTkZJR19EUk1fU1RNKSArPSBzdG0tZHJtLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9zdG0vbHZkcy5jIGIvZHJpdmVycy9ncHUvZHJtL3N0bS9sdmRzLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5mZjg3Mjc4ODk0M2QKLS0tIC9kZXYvbnVs bAorKysgYi9kcml2ZXJzL2dwdS9kcm0vc3RtL2x2ZHMuYwpAQCAtMCwwICsxLDEyMjYgQEAKKy8v IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKKy8qCisgKiBDb3B5cmlnaHQg KEMpIDIwMjMsIFNUTWljcm9lbGVjdHJvbmljcyAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqIEF1 dGhvcihzKTogUmFwaGHDq2wgR0FMTEFJUy1QT1UgPHJhcGhhZWwuZ2FsbGFpcy1wb3VAZm9zcy5z dC5jb20+IGZvciBTVE1pY3JvZWxlY3Ryb25pY3MuCisgKi8KKworI2luY2x1ZGUgPGRybS9kcm1f YXRvbWljX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fYnJpZGdlLmg+CisjaW5jbHVkZSA8 ZHJtL2RybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX29mLmg+CisjaW5jbHVkZSA8ZHJt L2RybV9wYW5lbC5oPgorI2luY2x1ZGUgPGRybS9kcm1fcHJpbnQuaD4KKyNpbmNsdWRlIDxkcm0v ZHJtX3Byb2JlX2hlbHBlci5oPgorCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8 bGludXgvY2xrLXByb3ZpZGVyLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxs aW51eC9pb3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9tZWRpYS1idXMtZm9ybWF0Lmg+CisjaW5j bHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CisjaW5j bHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVzZXQuaD4K KworLyogTFZEUyBIb3N0IHJlZ2lzdGVycyAqLworI2RlZmluZSBMVkRTX0NSCQkweDAwMDAgIC8q IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTFZEU19ETUxDUjAJMHgwMDA0ICAv KiBkYXRhIG1hcHBpbmcgbHNiIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgMCAqLworI2RlZmluZSBM VkRTX0RNTUNSMAkweDAwMDggIC8qIGRhdGEgbWFwcGluZyBtc2IgY29uZmlndXJhdGlvbiByZWdp c3RlciAwICovCisjZGVmaW5lIExWRFNfRE1MQ1IxCTB4MDAwQyAgLyogZGF0YSBtYXBwaW5nIGxz YiBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgTFZEU19ETU1DUjEJMHgwMDEw ICAvKiBkYXRhIG1hcHBpbmcgbXNiIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgMSAqLworI2RlZmlu ZSBMVkRTX0RNTENSMgkweDAwMTQgIC8qIGRhdGEgbWFwcGluZyBsc2IgY29uZmlndXJhdGlvbiBy ZWdpc3RlciAyICovCisjZGVmaW5lIExWRFNfRE1NQ1IyCTB4MDAxOCAgLyogZGF0YSBtYXBwaW5n IG1zYiBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgTFZEU19ETUxDUjMJMHgw MDFDICAvKiBkYXRhIG1hcHBpbmcgbHNiIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgMyAqLworI2Rl ZmluZSBMVkRTX0RNTUNSMwkweDAwMjAgIC8qIGRhdGEgbWFwcGluZyBtc2IgY29uZmlndXJhdGlv biByZWdpc3RlciAzICovCisjZGVmaW5lIExWRFNfRE1MQ1I0CTB4MDAyNCAgLyogZGF0YSBtYXBw aW5nIGxzYiBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIDQgKi8KKyNkZWZpbmUgTFZEU19ETU1DUjQJ MHgwMDI4ICAvKiBkYXRhIG1hcHBpbmcgbXNiIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgNCAqLwor I2RlZmluZSBMVkRTX0NETDFDUgkweDAwMkMgIC8qIGNoYW5uZWwgZGlzdHJpYiBsaW5rIDEgY29u ZmlndXJhdGlvbiByZWdpc3RlciAqLworI2RlZmluZSBMVkRTX0NETDJDUgkweDAwMzAgIC8qIGNo YW5uZWwgZGlzdHJpYiBsaW5rIDIgY29uZmlndXJhdGlvbiByZWdpc3RlciAqLworCisjZGVmaW5l IENETDFDUl9ERUZBVUxUCTB4MDQzMjEgLyogRGVmYXVsdCB2YWx1ZSBmb3IgQ0RMMUNSICovCisj ZGVmaW5lIENETDJDUl9ERUZBVUxUCTB4NTk4NzYgLyogRGVmYXVsdCB2YWx1ZSBmb3IgQ0RMMkNS ICovCisKKyNkZWZpbmUgTFZEU19ETUxDUihiaXQpCShMVkRTX0RNTENSMCArIDB4OCAqIChiaXQp KQorI2RlZmluZSBMVkRTX0RNTUNSKGJpdCkJKExWRFNfRE1NQ1IwICsgMHg4ICogKGJpdCkpCisK Ky8qIExWRFMgV3JhcHBlciByZWdpc3RlcnMgKi8KKyNkZWZpbmUgTFZEU19XQ0xLQ1IJMHgxMUIw ICAvKiBXcmFwcGVyIGNsb2NrIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKworI2RlZmluZSBMVkRTX0hX Q0ZHUgkweDFGRjAgIC8qIEhXIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIJKi8KKyNkZWZpbmUgTFZE U19WRVJSCTB4MUZGNCAgLyogVmVyc2lvbiByZWdpc3RlcgkqLworI2RlZmluZSBMVkRTX0lQSURS CTB4MUZGOCAgLyogSWRlbnRpZmljYXRpb24gcmVnaXN0ZXIJKi8KKyNkZWZpbmUgTFZEU19TSURS CTB4MUZGQyAgLyogU2l6ZSBJZGVudGlmaWNhdGlvbiByZWdpc3RlcgkqLworCisvKiBCaXRmaWVs ZCBkZXNjcmlwdGlvbiAqLworI2RlZmluZSBDUl9MVkRTRU4JQklUKDApICAvKiBMVkRTIFBIWSBF bmFibGUgKi8KKyNkZWZpbmUgQ1JfSFNQT0wJQklUKDEpICAvKiBIb3Jpem9udGFsIFN5bmNocm9u aXphdGlvbiBQb2xhcml0eSAqLworI2RlZmluZSBDUl9WU1BPTAlCSVQoMikgIC8qIFZlcnRpY2Fs IFN5bmNocm9uaXphdGlvbiBQb2xhcml0eSAqLworI2RlZmluZSBDUl9ERVBPTAlCSVQoMykgIC8q IERhdGEgRW5hYmxlIFBvbGFyaXR5ICovCisjZGVmaW5lIENSX0NJCQlCSVQoNCkgIC8qIENvbnRy b2wgSW50ZXJuYWwgKHNvZnR3YXJlIGNvbnRyb2xsZWQgYml0KSAqLworI2RlZmluZSBDUl9MS01P RAlCSVQoNSkgIC8qIExpbmsgTW9kZSwgZm9yIGJvdGggTGlua3MgKi8KKyNkZWZpbmUgQ1JfTEtQ SEEJQklUKDYpICAvKiBMaW5rIFBoYXNlLCBmb3IgYm90aCBMaW5rcyAqLworI2RlZmluZSBDUl9M SzFQT0wJR0VOTUFTSygyMCwgMTYpICAvKiBMaW5rLTEgb3V0cHV0IFBvbGFyaXR5ICovCisjZGVm aW5lIENSX0xLMlBPTAlHRU5NQVNLKDI1LCAyMSkgIC8qIExpbmstMiBvdXRwdXQgUG9sYXJpdHkg Ki8KKworI2RlZmluZSBETU1DUl9NQVAwCUdFTk1BU0soNCwgMCkgLyogTWFwcGluZyBmb3IgYml0 IDAgb2YgZGF0YWxhbmUgeCAqLworI2RlZmluZSBETU1DUl9NQVAxCUdFTk1BU0soOSwgNSkgLyog TWFwcGluZyBmb3IgYml0IDEgb2YgZGF0YWxhbmUgeCAqLworI2RlZmluZSBETU1DUl9NQVAyCUdF Tk1BU0soMTQsIDEwKSAvKiBNYXBwaW5nIGZvciBiaXQgMiBvZiBkYXRhbGFuZSB4ICovCisjZGVm aW5lIERNTUNSX01BUDMJR0VOTUFTSygxOSwgMTUpIC8qIE1hcHBpbmcgZm9yIGJpdCAzIG9mIGRh dGFsYW5lIHggKi8KKyNkZWZpbmUgRE1MQ1JfTUFQNAlHRU5NQVNLKDQsIDApIC8qIE1hcHBpbmcg Zm9yIGJpdCA0IG9mIGRhdGFsYW5lIHggKi8KKyNkZWZpbmUgRE1MQ1JfTUFQNQlHRU5NQVNLKDks IDUpIC8qIE1hcHBpbmcgZm9yIGJpdCA1IG9mIGRhdGFsYW5lIHggKi8KKyNkZWZpbmUgRE1MQ1Jf TUFQNglHRU5NQVNLKDE0LCAxMCkgLyogTWFwcGluZyBmb3IgYml0IDYgb2YgZGF0YWxhbmUgeCAq LworCisjZGVmaW5lIENETENSX0RJU1RSMAlHRU5NQVNLKDMsIDApIC8qIENoYW5uZWwgZGlzdHJp YnV0aW9uIGZvciBsYW5lIDAgKi8KKyNkZWZpbmUgQ0RMQ1JfRElTVFIxCUdFTk1BU0soNywgNCkg LyogQ2hhbm5lbCBkaXN0cmlidXRpb24gZm9yIGxhbmUgMSAqLworI2RlZmluZSBDRExDUl9ESVNU UjIJR0VOTUFTSygxMSwgOCkgLyogQ2hhbm5lbCBkaXN0cmlidXRpb24gZm9yIGxhbmUgMiAqLwor I2RlZmluZSBDRExDUl9ESVNUUjMJR0VOTUFTSygxNSwgMTIpIC8qIENoYW5uZWwgZGlzdHJpYnV0 aW9uIGZvciBsYW5lIDMgKi8KKyNkZWZpbmUgQ0RMQ1JfRElTVFI0CUdFTk1BU0soMTksIDE2KSAv KiBDaGFubmVsIGRpc3RyaWJ1dGlvbiBmb3IgbGFuZSA0ICovCisKKyNkZWZpbmUgUEhZX0dDUl9C SVRfQ0xLX09VVAlCSVQoMCkgIC8qIEJJVCBjbG9jayBlbmFibGUgKi8KKyNkZWZpbmUgUEhZX0dD Ul9MU19DTEtfT1VUCUJJVCg0KSAgLyogTFMgY2xvY2sgZW5hYmxlICovCisjZGVmaW5lIFBIWV9H Q1JfRFBfQ0xLX09VVAlCSVQoOCkgIC8qIERQIGNsb2NrIGVuYWJsZSAqLworI2RlZmluZSBQSFlf R0NSX1JTVFoJCUJJVCgyNCkgLyogTFZEUyBQSFkgZGlnaXRhbCByZXNldCAqLworI2RlZmluZSBQ SFlfR0NSX0RJVl9SU1ROCUJJVCgyNSkgLyogT3V0cHV0IGRpdmlkZXIgcmVzZXQgKi8KKyNkZWZp bmUgUEhZX1NDUl9UWF9FTgkJQklUKDE2KSAvKiBUcmFuc21pc3Npb24gbW9kZSBlbmFibGUgKi8K Ky8qIEN1cnJlbnQgbW9kZSBkcml2ZXIgZW5hYmxlICovCisjZGVmaW5lIFBIWV9DTUNSX0NNX0VO X0RMCShCSVQoMjgpIHwgQklUKDIwKSB8IEJJVCgxMikgfCBCSVQoNCkpCisjZGVmaW5lIFBIWV9D TUNSX0NNX0VOX0RMNAlCSVQoNCkKKy8qIEJpYXMgZW5hYmxlICovCisjZGVmaW5lIFBIWV9CQ1Ix X0VOX0JJQVNfREwJKEJJVCgxNikgfCBCSVQoMTIpIHwgQklUKDgpIHwgQklUKDQpIHwgQklUKDAp KQorI2RlZmluZSBQSFlfQkNSMl9CSUFTX0VOCUJJVCgyOCkKKy8qIFZvbHRhZ2UgbW9kZSBkcml2 ZXIgZW5hYmxlICovCisjZGVmaW5lIFBIWV9CQ1IzX1ZNX0VOX0RMCShCSVQoMTYpIHwgQklUKDEy KSB8IEJJVCg4KSB8IEJJVCg0KSB8IEJJVCgwKSkKKyNkZWZpbmUgUEhZX0RDUl9QT1dFUl9PSwlC SVQoMTIpCisjZGVmaW5lIFBIWV9DRkdDUl9FTl9ESUdfREwJR0VOTUFTSyg0LCAwKSAvKiBMVkRT IFBIWSBkaWdpdGFsIGxhbmUgZW5hYmxlICovCisjZGVmaW5lIFBIWV9QTExDUjFfUExMX0VOCUJJ VCgwKSAvKiBMVkRTIFBIWSBQTEwgZW5hYmxlICovCisjZGVmaW5lIFBIWV9QTExDUjFfRU5fU0QJ QklUKDEpIC8qIExWRFMgUEhZIFBMTCBzaWdtYS1kZWx0YSBzaWduYWwgZW5hYmxlICovCisjZGVm aW5lIFBIWV9QTExDUjFfRU5fVFdHCUJJVCgyKSAvKiBMVkRTIFBIWSBQTEwgdHJpYW5ndWxhciB3 YXZlIGdlbmVyYXRvciBlbmFibGUgKi8KKyNkZWZpbmUgUEhZX1BMTENSMV9ESVZfRU4JQklUKDgp IC8qIExWRFMgUEhZIFBMTCBkaXZpZGVycyBlbmFibGUgKi8KKyNkZWZpbmUgUEhZX1BMTENSMl9O RElWCQlHRU5NQVNLKDI1LCAxNikgLyogTkRJViBtYXNrIHZhbHVlICovCisjZGVmaW5lIFBIWV9Q TExDUjJfQkRJVgkJR0VOTUFTSyg5LCAwKSAgIC8qIEJESVYgbWFzayB2YWx1ZSAqLworI2RlZmlu ZSBQSFlfUExMU1JfUExMX0xPQ0sJQklUKDApIC8qIExWRFMgUEhZIFBMTCBsb2NrIHN0YXR1cyAq LworI2RlZmluZSBQSFlfUExMU0RDUjFfTURJVglHRU5NQVNLKDksIDApICAgLyogTURJViBtYXNr IHZhbHVlICovCisjZGVmaW5lIFBIWV9QTExURVNUQ1JfVERJVglHRU5NQVNLKDI1LCAxNikgLyog VERJViBtYXNrIHZhbHVlICovCisjZGVmaW5lIFBIWV9QTExURVNUQ1JfQ0xLX0VOCUJJVCgwKSAv KiBUZXN0IGNsb2NrIGVuYWJsZSAqLworI2RlZmluZSBQSFlfUExMVEVTVENSX0VOCUJJVCg4KSAv KiBUZXN0IGRpdmlkZXIgb3V0cHV0IGVuYWJsZSAqLworCisjZGVmaW5lIFdDTEtDUl9TRUNORF9D TEtQSVhfU0VMCUJJVCgwKSAvKiBQaXhlbCBjbG9jayBzZWxlY3Rpb24gKi8KKyNkZWZpbmUgV0NM S0NSX1NSQ1NFTAkJQklUKDgpIC8qIFNvdXJjZSBzZWxlY3Rpb24gZm9yIHRoZSBwaXhlbCBjbG9j ayAqLworCisvKiBTbGVlcCAmIHRpbWVvdXQgZm9yIHBsbCBsb2NrL3VubG9jayAqLworI2RlZmlu ZSBTTEVFUF9VUwkxMDAwCisjZGVmaW5lIFRJTUVPVVRfVVMJMjAwMDAwCisKKy8qCisgKiBUaGUg bGluayBwaGFzZSBkZWZpbmVzIHdoZXRoZXIgYW4gT0REIHBpeGVsIGlzIGNhcnJpZWQgb3ZlciB0 b2dldGhlciB3aXRoCisgKiB0aGUgbmV4dCBFVkVOIHBpeGVsIG9yIHRvZ2V0aGVyIHdpdGggdGhl IHByZXZpb3VzIEVWRU4gcGl4ZWwuCisgKgorICogTFZEU19EVUFMX0xJTktfRVZFTl9PRERfUElY RUxTIChMS1BIQSA9IDApCisgKgorICogLC0tLS0tLS0tLiAgLC0tLS0tLS0tLiAgLC0tLS0tLS0t LiAgLC0tLS0tLS0tLiAgLC0tLS0tLS0tLS4KKyAqIHwgT0REICBMSyBcLyBQSVhFTCAgMyBcLyBQ SVhFTCAgMSBcLyBQSVhFTCcgMSBcLyBQSVhFTCcgMyB8CisgKiB8IEVWRU4gTEsgL1wgUElYRUwg IDIgL1wgUElYRUwnIDAgL1wgUElYRUwnIDIgL1wgUElYRUwnIDQgfAorICogYC0tLS0tLS0tJyAg YC0tLS0tLS0tJyAgYC0tLS0tLS0tJyAgYC0tLS0tLS0tJyAgYC0tLS0tLS0tLScKKyAqCisgKiBM VkRTX0RVQUxfTElOS19PRERfRVZFTl9QSVhFTFMgKExLUEhBID0gMSkKKyAqCisgKiAsLS0tLS0t LS0uICAsLS0tLS0tLS0uICAsLS0tLS0tLS0uICAsLS0tLS0tLS0uICAsLS0tLS0tLS0tLgorICog fCBPREQgIExLIFwvIFBJWEVMICAzIFwvIFBJWEVMICAxIFwvIFBJWEVMJyAxIFwvIFBJWEVMJyAz IHwKKyAqIHwgRVZFTiBMSyAvXCBQSVhFTCAgNCAvXCBQSVhFTCAgMiAvXCBQSVhFTCcgMCAvXCBQ SVhFTCcgMiB8CisgKiBgLS0tLS0tLS0nICBgLS0tLS0tLS0nICBgLS0tLS0tLS0nICBgLS0tLS0t LS0nICBgLS0tLS0tLS0tJworICoKKyAqLworZW51bSBsdmRzX2xpbmtfdHlwZSB7CisJTFZEU19T SU5HTEVfTElOS19QUklNQVJZID0gMCwKKwlMVkRTX1NJTkdMRV9MSU5LX1NFQ09OREFSWSwKKwlM VkRTX0RVQUxfTElOS19FVkVOX09ERF9QSVhFTFMsCisJTFZEU19EVUFMX0xJTktfT0REX0VWRU5f UElYRUxTLAorfTsKKworZW51bSBsdmRzX3BpeGVsIHsKKwlQSVhfUl8wID0gMCwKKwlQSVhfUl8x LAorCVBJWF9SXzIsCisJUElYX1JfMywKKwlQSVhfUl80LAorCVBJWF9SXzUsCisJUElYX1JfNiwK KwlQSVhfUl83LAorCVBJWF9HXzAsCisJUElYX0dfMSwKKwlQSVhfR18yLAorCVBJWF9HXzMsCisJ UElYX0dfNCwKKwlQSVhfR181LAorCVBJWF9HXzYsCisJUElYX0dfNywKKwlQSVhfQl8wLAorCVBJ WF9CXzEsCisJUElYX0JfMiwKKwlQSVhfQl8zLAorCVBJWF9CXzQsCisJUElYX0JfNSwKKwlQSVhf Ql82LAorCVBJWF9CXzcsCisJUElYX0hfUywKKwlQSVhfVl9TLAorCVBJWF9EX0UsCisJUElYX0Nf RSwKKwlQSVhfQ19JLAorCVBJWF9UT0csCisJUElYX09ORSwKKwlQSVhfWkVSLAorfTsKKworc3Ry dWN0IHBoeV9yZWdfb2Zmc2V0cyB7CisJdTMyIEdDUjsJLyogR2xvYmFsIENvbnRyb2wgUmVnaXN0 ZXIJKi8KKwl1MzIgQ01DUjE7ICAgIC8qIEN1cnJlbnQgTW9kZSBDb250cm9sIFJlZ2lzdGVyIDEg Ki8KKwl1MzIgQ01DUjI7ICAgIC8qIEN1cnJlbnQgTW9kZSBDb250cm9sIFJlZ2lzdGVyIDIgKi8K Kwl1MzIgU0NSOyAgICAgIC8qIFNlcmlhbCBDb250cm9sIFJlZ2lzdGVyCSovCisJdTMyIEJDUjE7 ICAgICAvKiBCaWFzIENvbnRyb2wgUmVnaXN0ZXIgMQkqLworCXUzMiBCQ1IyOyAgICAgLyogQmlh cyBDb250cm9sIFJlZ2lzdGVyIDIJKi8KKwl1MzIgQkNSMzsgICAgIC8qIEJpYXMgQ29udHJvbCBS ZWdpc3RlciAzCSovCisJdTMyIE1QTENSOyAgICAvKiBNb25pdG9yIFBMTCBMb2NrIENvbnRyb2wg UmVnaXN0ZXIgKi8KKwl1MzIgRENSOyAgICAgIC8qIERlYnVnIENvbnRyb2wgUmVnaXN0ZXIJKi8K Kwl1MzIgU1NSMTsgICAgIC8qIFNwYXJlIFN0YXR1cyBSZWdpc3RlciAxCSovCisJdTMyIENGR0NS OyAgICAvKiBDb25maWd1cmF0aW9uIENvbnRyb2wgUmVnaXN0ZXIgKi8KKwl1MzIgUExMQ1IxOyAg IC8qIFBMTF9NT0RFIDEgQ29udHJvbCBSZWdpc3RlcgkqLworCXUzMiBQTExDUjI7ICAgLyogUExM X01PREUgMiBDb250cm9sIFJlZ2lzdGVyCSovCisJdTMyIFBMTFNSOyAgICAvKiBQTEwgU3RhdHVz IFJlZ2lzdGVyCSovCisJdTMyIFBMTFNEQ1IxOyAvKiBQTExfU0RfMSBDb250cm9sIFJlZ2lzdGVy CSovCisJdTMyIFBMTFNEQ1IyOyAvKiBQTExfU0RfMiBDb250cm9sIFJlZ2lzdGVyCSovCisJdTMy IFBMTFRXR0NSMTsvKiBQTExfVFdHXzEgQ29udHJvbCBSZWdpc3RlcgkqLworCXUzMiBQTExUV0dD UjI7LyogUExMX1RXR18yIENvbnRyb2wgUmVnaXN0ZXIJKi8KKwl1MzIgUExMQ1BDUjsgIC8qIFBM TF9DUCBDb250cm9sIFJlZ2lzdGVyCSovCisJdTMyIFBMTFRFU1RDUjsvKiBQTExfVEVTVCBDb250 cm9sIFJlZ2lzdGVyCSovCit9OworCitzdHJ1Y3QgbHZkc19waHlfaW5mbyB7CisJdTMyIGJhc2U7 CisJc3RydWN0IHBoeV9yZWdfb2Zmc2V0cyBvZnM7Cit9OworCitzdGF0aWMgc3RydWN0IGx2ZHNf cGh5X2luZm8gbHZkc19waHlfMTZmZl9wcmltYXJ5ID0geworCS5iYXNlID0gMHgxMDAwLAorCS5v ZnMgPSB7CisJCS5HQ1IgPSAweDAsCisJCS5DTUNSMSA9IDB4QywKKwkJLkNNQ1IyID0gMHgxMCwK KwkJLlNDUiA9IDB4MjAsCisJCS5CQ1IxID0gMHgyQywKKwkJLkJDUjIgPSAweDMwLAorCQkuQkNS MyA9IDB4MzQsCisJCS5NUExDUiA9IDB4NjQsCisJCS5EQ1IgPSAweDg0LAorCQkuU1NSMSA9IDB4 ODgsCisJCS5DRkdDUiA9IDB4QTAsCisJCS5QTExDUjEgPSAweEMwLAorCQkuUExMQ1IyID0gMHhD NCwKKwkJLlBMTFNSID0gMHhDOCwKKwkJLlBMTFNEQ1IxID0gMHhDQywKKwkJLlBMTFNEQ1IyID0g MHhEMCwKKwkJLlBMTFRXR0NSMSA9IDB4RDQsCisJCS5QTExUV0dDUjIgPSAweEQ4LAorCQkuUExM Q1BDUiA9IDB4RTAsCisJCS5QTExURVNUQ1IgPSAweEU4LAorCX0KK307CisKK3N0YXRpYyBzdHJ1 Y3QgbHZkc19waHlfaW5mbyBsdmRzX3BoeV8xNmZmX3NlY29uZGFyeSA9IHsKKwkuYmFzZSA9IDB4 MTEwMCwKKwkub2ZzID0geworCQkuR0NSID0gMHgwLAorCQkuQ01DUjEgPSAweEMsCisJCS5DTUNS MiA9IDB4MTAsCisJCS5TQ1IgPSAweDIwLAorCQkuQkNSMSA9IDB4MkMsCisJCS5CQ1IyID0gMHgz MCwKKwkJLkJDUjMgPSAweDM0LAorCQkuTVBMQ1IgPSAweDY0LAorCQkuRENSID0gMHg4NCwKKwkJ LlNTUjEgPSAweDg4LAorCQkuQ0ZHQ1IgPSAweEEwLAorCQkuUExMQ1IxID0gMHhDMCwKKwkJLlBM TENSMiA9IDB4QzQsCisJCS5QTExTUiA9IDB4QzgsCisJCS5QTExTRENSMSA9IDB4Q0MsCisJCS5Q TExTRENSMiA9IDB4RDAsCisJCS5QTExUV0dDUjEgPSAweEQ0LAorCQkuUExMVFdHQ1IyID0gMHhE OCwKKwkJLlBMTENQQ1IgPSAweEUwLAorCQkuUExMVEVTVENSID0gMHhFOCwKKwl9Cit9OworCitz dHJ1Y3Qgc3RtX2x2ZHMgeworCXZvaWQgX19pb21lbSAqYmFzZTsKKwlzdHJ1Y3QgZGV2aWNlICpk ZXY7CisJc3RydWN0IGNsayAqcGNsazsJCS8qIEFQQiBwZXJpcGhlcmFsIGNsb2NrICovCisJc3Ry dWN0IGNsayAqcGxscmVmX2NsazsJCS8qIFJlZmVyZW5jZSBjbG9jayBmb3IgdGhlIGludGVybmFs IFBMTCAqLworCXN0cnVjdCBjbGtfaHcgbHZkc19ja19weDsJLyogUGl4ZWwgY2xvY2sgKi8KKwl1 MzIgcGl4ZWxfY2xvY2tfcmF0ZTsJCS8qIFBpeGVsIGNsb2NrIHJhdGUgKi8KKworCXN0cnVjdCBs dmRzX3BoeV9pbmZvICpwcmltYXJ5OworCXN0cnVjdCBsdmRzX3BoeV9pbmZvICpzZWNvbmRhcnk7 CisKKwlzdHJ1Y3QgZHJtX2JyaWRnZSBsdmRzX2JyaWRnZTsKKwlzdHJ1Y3QgZHJtX2JyaWRnZSAq bmV4dF9icmlkZ2U7CisJc3RydWN0IGRybV9jb25uZWN0b3IgY29ubmVjdG9yOworCXN0cnVjdCBk cm1fZW5jb2RlciAqZW5jb2RlcjsKKwlzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbDsKKworCXUzMiBo d192ZXJzaW9uOworCXUzMiBsaW5rX3R5cGU7Cit9OworCisjZGVmaW5lIGJyaWRnZV90b19zdG1f bHZkcyhiKSBcCisJY29udGFpbmVyX29mKGIsIHN0cnVjdCBzdG1fbHZkcywgbHZkc19icmlkZ2Up CisKKyNkZWZpbmUgY29ubmVjdG9yX3RvX3N0bV9sdmRzKGMpIFwKKwljb250YWluZXJfb2YoYywg c3RydWN0IHN0bV9sdmRzLCBjb25uZWN0b3IpCisKKyNkZWZpbmUgbHZkc19pc19kdWFsX2xpbmso bHZkcykgXAorCSh7CVwKKwl0eXBlb2YobHZkcykgX19sdmRzID0gKGx2ZHMpOwlcCisJX19sdmRz ID09IExWRFNfRFVBTF9MSU5LX0VWRU5fT0REX1BJWEVMUyB8fAlcCisJX19sdmRzID09IExWRFNf RFVBTF9MSU5LX09ERF9FVkVOX1BJWEVMUzsJXAorCX0pCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBs dmRzX3dyaXRlKHN0cnVjdCBzdG1fbHZkcyAqbHZkcywgdTMyIHJlZywgdTMyIHZhbCkKK3sKKwl3 cml0ZWwodmFsLCBsdmRzLT5iYXNlICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgbHZk c19yZWFkKHN0cnVjdCBzdG1fbHZkcyAqbHZkcywgdTMyIHJlZykKK3sKKwlyZXR1cm4gcmVhZGwo bHZkcy0+YmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsdmRzX3NldChzdHJ1 Y3Qgc3RtX2x2ZHMgKmx2ZHMsIHUzMiByZWcsIHUzMiBtYXNrKQoreworCWx2ZHNfd3JpdGUobHZk cywgcmVnLCBsdmRzX3JlYWQobHZkcywgcmVnKSB8IG1hc2spOworfQorCitzdGF0aWMgaW5saW5l IHZvaWQgbHZkc19jbGVhcihzdHJ1Y3Qgc3RtX2x2ZHMgKmx2ZHMsIHUzMiByZWcsIHUzMiBtYXNr KQoreworCWx2ZHNfd3JpdGUobHZkcywgcmVnLCBsdmRzX3JlYWQobHZkcywgcmVnKSAmIH5tYXNr KTsKK30KKworLyoKKyAqIEV4cGVjdGVkIEpFSURBLVJHQjg4OCBkYXRhIHRvIGJlIHNlbnQgaW4g TFNCIGZvcm1hdAorICoJICAgIGJpdDYgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLmJpdDAK KyAqIENIQU4wICAge09ORSwgT05FLCBaRVJPLCBaRVJPLCBaRVJPLCBPTkUsIE9ORX0KKyAqIENI QU4xICAge0cyLCAgUjcsICBSNiwgICBSNSwgICBSNCwgICBSMywgIFIyfQorICogQ0hBTjIgICB7 QjMsICBCMiwgIEc3LCAgIEc2LCAgIEc1LCAgIEc0LCAgRzN9CisgKiBDSEFOMyAgIHtERSwgIFZT LCAgSFMsICAgQjcsICAgQjYsICAgQjUsICBCNH0KKyAqIENIQU40ICAge0NFLCAgQjEsICBCMCwg ICBHMSwgICBHMCwgICBSMSwgIFIwfQorICovCitlbnVtIGx2ZHNfcGl4ZWwgbHZkc19iaXRtYXBf amVpZGFfcmdiODg4WzVdWzddID0geworCXsgUElYX09ORSwgUElYX09ORSwgUElYX1pFUiwgUElY X1pFUiwgUElYX1pFUiwgUElYX09ORSwgUElYX09ORSB9LAorCXsgUElYX0dfMiwgUElYX1JfNywg UElYX1JfNiwgUElYX1JfNSwgUElYX1JfNCwgUElYX1JfMywgUElYX1JfMiB9LAorCXsgUElYX0Jf MywgUElYX0JfMiwgUElYX0dfNywgUElYX0dfNiwgUElYX0dfNSwgUElYX0dfNCwgUElYX0dfMyB9 LAorCXsgUElYX0RfRSwgUElYX1ZfUywgUElYX0hfUywgUElYX0JfNywgUElYX0JfNiwgUElYX0Jf NSwgUElYX0JfNCB9LAorCXsgUElYX0NfRSwgUElYX0JfMSwgUElYX0JfMCwgUElYX0dfMSwgUElY X0dfMCwgUElYX1JfMSwgUElYX1JfMCB9Cit9OworCisvKgorICogRXhwZWN0ZWQgVkVTQS1SR0I4 ODggZGF0YSB0byBiZSBzZW50IGluIExTQiBmb3JtYXQKKyAqCSAgICBiaXQ2IC4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi5iaXQwCisgKiBDSEFOMCAgIHtPTkUsIE9ORSwgWkVSTywgWkVSTywg WkVSTywgT05FLCBPTkV9CisgKiBDSEFOMSAgIHtHMCwgIFI1LCAgUjQsICAgUjMsICAgUjIsICAg UjEsICBSMH0KKyAqIENIQU4yICAge0IxLCAgQjAsICBHNSwgICBHNCwgICBHMywgICBHMiwgIEcx fQorICogQ0hBTjMgICB7REUsICBWUywgIEhTLCAgIEI1LCAgIEI0LCAgIEIzLCAgQjJ9CisgKiBD SEFONCAgIHtDRSwgIEI3LCAgQjYsICAgRzcsICAgRzYsICAgUjcsICBSNn0KKyAqLworZW51bSBs dmRzX3BpeGVsIGx2ZHNfYml0bWFwX3Zlc2FfcmdiODg4WzVdWzddID0geworCXsgUElYX09ORSwg UElYX09ORSwgUElYX1pFUiwgUElYX1pFUiwgUElYX1pFUiwgUElYX09ORSwgUElYX09ORSB9LAor CXsgUElYX0dfMCwgUElYX1JfNSwgUElYX1JfNCwgUElYX1JfMywgUElYX1JfMiwgUElYX1JfMSwg UElYX1JfMCB9LAorCXsgUElYX0JfMSwgUElYX0JfMCwgUElYX0dfNSwgUElYX0dfNCwgUElYX0df MywgUElYX0dfMiwgUElYX0dfMSB9LAorCXsgUElYX0RfRSwgUElYX1ZfUywgUElYX0hfUywgUElY X0JfNSwgUElYX0JfNCwgUElYX0JfMywgUElYX0JfMiB9LAorCXsgUElYX0NfRSwgUElYX0JfNywg UElYX0JfNiwgUElYX0dfNywgUElYX0dfNiwgUElYX1JfNywgUElYX1JfNiB9Cit9OworCisvKgor ICogQ2xvY2tzIGFuZCBQSFkgcmVsYXRlZCBmdW5jdGlvbnMKKyAqLworc3RhdGljIGludCBsdmRz X3BsbF9lbmFibGUoc3RydWN0IHN0bV9sdmRzICpsdmRzLCBzdHJ1Y3QgbHZkc19waHlfaW5mbyAq cGh5KQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBsdmRzLT5sdmRzX2JyaWRnZS5kZXY7 CisJdTMyIGx2ZHNfZ2NyOworCWludCB2YWwsIHJldDsKKworCS8qCisJICogUExMIGxvY2sgdGlt aW5nIGNvbnRyb2wgZm9yIHRoZSBtb25pdG9yIHVubWFzayBhZnRlciBzdGFydHVwIChwbGxfZW4p CisJICogQWRqdXN0ZWQgdmFsdWUgc28gdGhhdCB0aGUgbWFza2luZyB3aW5kb3cgaXMgb3BlbmVk IGF0IHN0YXJ0LXVwCisJICovCisJbHZkc193cml0ZShsdmRzLCBwaHktPmJhc2UgKyBwaHktPm9m cy5NUExDUiwgKDB4MjAwIC0gMHgxNjApIDw8IDE2KTsKKworCS8qIEVuYWJsZSBiaWFzICovCisJ bHZkc193cml0ZShsdmRzLCBwaHktPmJhc2UgKyBwaHktPm9mcy5CQ1IyLCBQSFlfQkNSMl9CSUFT X0VOKTsKKworCS8qIEVuYWJsZSBEUCwgTFMsIEJJVCBjbG9jayBvdXRwdXQgKi8KKwlsdmRzX2dj ciA9IFBIWV9HQ1JfRFBfQ0xLX09VVCB8IFBIWV9HQ1JfTFNfQ0xLX09VVCB8IFBIWV9HQ1JfQklU X0NMS19PVVQ7CisJbHZkc19zZXQobHZkcywgcGh5LT5iYXNlICsgcGh5LT5vZnMuR0NSLCBsdmRz X2djcik7CisKKwkvKiBQb3dlciB1cCBhbGwgb3V0cHV0IGRpdmlkZXJzICovCisJbHZkc19zZXQo bHZkcywgcGh5LT5iYXNlICsgcGh5LT5vZnMuUExMVEVTVENSLCBQSFlfUExMVEVTVENSX0VOKTsK KwlsdmRzX3NldChsdmRzLCBwaHktPmJhc2UgKyBwaHktPm9mcy5QTExDUjEsIFBIWV9QTExDUjFf RElWX0VOKTsKKworCS8qIFNldCBQSFkgaW4gc2VyaWFsIHRyYW5zbWlzc2lvbiBtb2RlICovCisJ bHZkc19zZXQobHZkcywgcGh5LT5iYXNlICsgcGh5LT5vZnMuU0NSLCBQSFlfU0NSX1RYX0VOKTsK KworCS8qIEVuYWJsZSB0aGUgTFZEUyBQTEwgJiB3YWl0IGZvciBpdHMgbG9jayAqLworCWx2ZHNf c2V0KGx2ZHMsIHBoeS0+YmFzZSArIHBoeS0+b2ZzLlBMTENSMSwgUEhZX1BMTENSMV9QTExfRU4p OworCXJldCA9IHJlYWRsX3BvbGxfdGltZW91dF9hdG9taWMobHZkcy0+YmFzZSArIHBoeS0+YmFz ZSArIHBoeS0+b2ZzLlBMTFNSLAorCQkJCQl2YWwsIHZhbCAmIFBIWV9QTExTUl9QTExfTE9DSywK KwkJCQkJU0xFRVBfVVMsIFRJTUVPVVRfVVMpOworCWlmIChyZXQpCisJCWRybV9lcnIoZHJtLCAi IVRJTUVPVVQhIHdhaXRpbmcgUExMLCBsZXQncyBjb250aW51ZVxuIik7CisKKwkvKiBXQ0xLQ1Jf U0VDTkRfQ0xLUElYX1NFTCBpcyBmb3IgZHVhbCBsaW5rICovCisJbHZkc193cml0ZShsdmRzLCBM VkRTX1dDTEtDUiwgV0NMS0NSX1NFQ05EX0NMS1BJWF9TRUwpOworCisJbHZkc19zZXQobHZkcywg cGh5LT5vZnMuUExMVEVTVENSLCBQSFlfUExMVEVTVENSX0NMS19FTik7CisKKwlyZXR1cm4gcmV0 OworfQorCitzdGF0aWMgaW50IHBsbF9nZXRfY2xrb3V0X2toeihpbnQgY2xraW5fa2h6LCBpbnQg YmRpdiwgaW50IG1kaXYsIGludCBuZGl2KQoreworCWludCBkaXZpc29yID0gbmRpdiAqIGJkaXY7 CisKKwkvKiBQcmV2ZW50cyBmcm9tIGRpdmlzaW9uIGJ5IDAgKi8KKwlpZiAoIWRpdmlzb3IpCisJ CXJldHVybiAwOworCisJcmV0dXJuIGNsa2luX2toeiAqIG1kaXYgLyBkaXZpc29yOworfQorCisj ZGVmaW5lIFRESVYJNzAKKyNkZWZpbmUgTkRJVl9NSU4JMgorI2RlZmluZSBORElWX01BWAk2Cisj ZGVmaW5lIEJESVZfTUlOCTIKKyNkZWZpbmUgQkRJVl9NQVgJNgorI2RlZmluZSBNRElWX01JTgkx CisjZGVmaW5lIE1ESVZfTUFYCTEwMjMKKworc3RhdGljIGludCBsdmRzX3BsbF9nZXRfcGFyYW1z KHN0cnVjdCBzdG1fbHZkcyAqbHZkcywKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgY2xraW5fa2h6 LCB1bnNpZ25lZCBpbnQgY2xrb3V0X2toeiwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgKmJkaXYs IHVuc2lnbmVkIGludCAqbWRpdiwgdW5zaWduZWQgaW50ICpuZGl2KQoreworCWludCBkZWx0YSwg YmVzdF9kZWx0YTsgLyogYWxsIGluIGtoeiAqLworCWludCBpLCBvLCBuOworCisJLyogRWFybHkg Y2hlY2tzIHByZXZlbnRpbmcgZGl2aXNpb24gYnkgMCAmIG9kZCByZXN1bHRzICovCisJaWYgKGNs a2luX2toeiA8PSAwIHx8IGNsa291dF9raHogPD0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwli ZXN0X2RlbHRhID0gMTAwMDAwMDsgLyogYmlnIHN0YXJ0ZWQgdmFsdWUgKDEwMDAwMDBraHopICov CisKKwlmb3IgKGkgPSBORElWX01JTjsgaSA8PSBORElWX01BWDsgaSsrKSB7CisJCWZvciAobyA9 IEJESVZfTUlOOyBvIDw9IEJESVZfTUFYOyBvKyspIHsKKwkJCW4gPSBESVZfUk9VTkRfQ0xPU0VT VChpICogbyAqIGNsa291dF9raHosIGNsa2luX2toeik7CisJCQkvKiBDaGVjayBuZGl2IGFjY29y ZGluZyB0byB2Y28gcmFuZ2UgKi8KKwkJCWlmIChuIDwgTURJVl9NSU4gfHwgbiA+IE1ESVZfTUFY KQorCQkJCWNvbnRpbnVlOworCQkJLyogQ2hlY2sgaWYgbmV3IGRlbHRhIGlzIGJldHRlciAmIHNh dmVzIHBhcmFtZXRlcnMgKi8KKwkJCWRlbHRhID0gcGxsX2dldF9jbGtvdXRfa2h6KGNsa2luX2to eiwgaSwgbiwgbykgLSBjbGtvdXRfa2h6OworCQkJaWYgKGRlbHRhIDwgMCkKKwkJCQlkZWx0YSA9 IC1kZWx0YTsKKwkJCWlmIChkZWx0YSA8IGJlc3RfZGVsdGEpIHsKKwkJCQkqbmRpdiA9IGk7CisJ CQkJKm1kaXYgPSBuOworCQkJCSpiZGl2ID0gbzsKKwkJCQliZXN0X2RlbHRhID0gZGVsdGE7CisJ CQl9CisJCQkvKiBmYXN0IHJldHVybiBpbiBjYXNlIG9mICJwZXJmZWN0IHJlc3VsdCIgKi8KKwkJ CWlmICghZGVsdGEpCisJCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIHZvaWQgbHZkc19wbGxfY29uZmlnKHN0cnVjdCBzdG1fbHZkcyAqbHZkcywgc3RydWN0 IGx2ZHNfcGh5X2luZm8gKnBoeSkKK3sKKwl1bnNpZ25lZCBpbnQgcGxsX2luX2toeiwgYmRpdiA9 IDAsIG1kaXYgPSAwLCBuZGl2ID0gMDsKKwlzdHJ1Y3QgY2xrX2h3ICpod2NsazsKKwlpbnQgbXVs dGlwbGllcjsKKworCS8qCisJICogVGhlIExWRFMgUEhZIGluY2x1ZGVzIGEgbG93IHBvd2VyIGxv dyBqaXR0ZXIgaGlnaCBwZXJmb3JtYW5jZSBhbmQKKwkgKiBoaWdobHkgY29uZmlndXJhdGlvbiBQ aGFzZSBMb2NrZWQgTG9vcCBzdXBwb3J0aW5nIGludGVnZXIgYW5kCisJICogZnJhY3Rpb25hbCBt dWx0aXBsaWNhdGlvbiByYXRpb3MgYW5kIFNwcmVhZCBTcGVjdHJ1bSBDbG9ja2luZy4gIEluCisJ ICogaW50ZWdlciBtb2RlLCB0aGUgb25seSBzb2Z0d2FyZSBzdXBwb3J0ZWQgZmVhdHVyZSBmb3Ig bm93LCB0aGUgUExMIGlzCisJICogbWFkZSBvZiBhIHByZS1kaXZpZGVyIE5ESVYsIGEgZmVlZGJh Y2sgbXVsdGlwbGllciBNRElWLCBmb2xsb3dlZCBieQorCSAqIHNldmVyYWwgcG9zdC1kaXZpZGVy cywgZWFjaCBvbmUgd2l0aCBhIHNwZWNpZmljIGFwcGxpY2F0aW9uLgorCSAqCisJICogICAgICAg ICAgLC0tLS0tLS4gICAgICAgICAsLS0tLS0uICAgICAsLS0tLS0uCisJICogRnJlZiAtLT4gfCBO RElWIHwgLUZwZGYtPiB8IFBGRCB8IC0tPiB8IFZDTyB8IC0tLS0tLS0tPiBGdmNvCisJICogICAg ICAgICAgYC0tLS0tLScgICAgICwtPiB8ICAgICB8ICAgICBgLS0tLS0nICB8CisJICogICAgICAg ICAgICAgICAgICAgICAgIHwgICBgLS0tLS0nICAgICAgICAgICAgICB8CisJICogICAgICAgICAg ICAgICAgICAgICAgIHwgICAgICAgICAsLS0tLS0tLiAgICAgICB8CisJICogICAgICAgICAgICAg ICAgICAgICAgIGAtLS0tLS0tLSB8IE1ESVYgfCA8LS0tLS0nCisJICogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBgLS0tLS0tJworCSAqCisJICogRnJvbSB0aGUgb3V0cHV0IG9mIHRo ZSBWQ08sIHRoZSBjbG9jayBjYW4gYmUgb3B0aW9uYWxseSBleHRyYWN0ZWQgb24KKwkgKiB0aGUg UkNDIGNsb2NrIG9ic2VydmVyLCB3aXRoIGEgZGl2aWRlciBURElWLCBmb3IgdGVzdGluZyBwdXJw b3NlLCBvcgorCSAqIGlzIHBhc3NlZCB0aHJvdWdoIGEgcHJvZ3JhbW1hYmxlIHBvc3QtZGl2aWRl ciBCRElWLiAgRmluYWxseSwgdGhlCisJICogZnJlcXVlbmN5IGNhbiBiZSBkaXZpZGVkIGZ1cnRo ZXIgd2l0aCB0d28gZml4ZWQgZGl2aWRlcnMuCisJICoKKwkgKiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAsLS0tLS0tLS0uCisJICogICAgICAgICAgICAgICAgICAgICwtLS0tLT4gfCBEUCBk aXYgfCAtLS0tLS0tLS0tLS0tLS0tPiBGZHAKKwkgKiAgICAgICAgICAsLS0tLS0tLiAgfCAgICAg ICBgLS0tLS0tLS0nCisJICogRnZjbyAtLT4gfCBCRElWIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tPiBGYml0CisJICogICAgICB8ICAgYC0tLS0tLScgICAgLC0tLS0tLS4g ICB8CisJICogICAgICBgLS0tLS0tLS0tLS0tLT4gfCBURElWIHwgLS0uLS0tLS0tLS0tLS0tLS0t LS0tLS0tPiBDbGtPYnMKKwkgKiAgICAgICAgICAgICAgICAgICAgICAnLS0tLS0tJyAgIHwgICAg LC0tLS0tLS0tLgorCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYC0tPiB8IExT IGRpdiB8IC0tLS0tLT4gRmxzCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICctLS0tLS0tLScKKwkgKgorCSAqIFRoZSBMUyBhbmQgRFAgY2xvY2sgZGl2aWRlcnMgb3Bl cmF0ZSBhdCBhIGZpeGVkIHJhdGlvIG9mIDcgYW5kIDMuNQorCSAqIHJlc3BlY3RpdmVseSB3aXRo IHJlZ2FyZHMgdG8gZmJpdC4gTFMgZGl2aWRlciBjb252ZXJ0cyB0aGUgYml0IGNsb2NrCisJICog dG8gYSBwaXhlbCBjbG9jayBwZXIgbGFuZSBwZXIgY2xvY2sgc2FtcGxlIChGbHMpLiAgVGhpcyBp cyB1c2VmdWwKKwkgKiB3aGVuIHVzZWQgdG8gZ2VuZXJhdGUgYSBkb3QgY2xvY2sgZm9yIHRoZSBk aXNwbGF5IHVuaXQgUkdCIG91dHB1dCwKKwkgKiBhbmQgRFAgZGl2aWRlciBpcy4KKwkgKi8KKwor CWh3Y2xrID0gX19jbGtfZ2V0X2h3KGx2ZHMtPnBsbHJlZl9jbGspOworCWlmICghaHdjbGspCisJ CXJldHVybjsKKworCXBsbF9pbl9raHogPSBjbGtfaHdfZ2V0X3JhdGUoaHdjbGspIC8gMTAwMDsK KworCWlmIChsdmRzX2lzX2R1YWxfbGluayhsdmRzLT5saW5rX3R5cGUpKQorCQltdWx0aXBsaWVy ID0gMjsKKwllbHNlCisJCW11bHRpcGxpZXIgPSAxOworCisJbHZkc19wbGxfZ2V0X3BhcmFtcyhs dmRzLCBwbGxfaW5fa2h6LAorCQkJICAgIGx2ZHMtPnBpeGVsX2Nsb2NrX3JhdGUgKiA3IC8gMTAw MCAvIG11bHRpcGxpZXIsCisJCQkgICAgJmJkaXYsICZtZGl2LCAmbmRpdik7CisKKwkvKiBTZXQg QkRJViwgTURJViBhbmQgTkRJViAqLworCWx2ZHNfd3JpdGUobHZkcywgcGh5LT5iYXNlICsgcGh5 LT5vZnMuUExMQ1IyLCBuZGl2IDw8IDE2KTsKKwlsdmRzX3NldChsdmRzLCBwaHktPmJhc2UgKyBw aHktPm9mcy5QTExDUjIsIGJkaXYpOworCWx2ZHNfd3JpdGUobHZkcywgcGh5LT5iYXNlICsgcGh5 LT5vZnMuUExMU0RDUjEsIG1kaXYpOworCisJLyogSGFyZGNvZGUgVERJViBhcyBkeW5hbWljIHZh bHVlcyBhcmUgbm90IHlldCBpbXBsZW1lbnRlZCAqLworCWx2ZHNfd3JpdGUobHZkcywgcGh5LT5i YXNlICsgcGh5LT5vZnMuUExMVEVTVENSLCBURElWIDw8IDE2KTsKKworCS8qCisJICogRm9yIG5v dywgUExMIGp1c3QgbmVlZHMgdG8gYmUgaW4gaW50ZWdlciBtb2RlCisJICogRnJhY3Rpb25hbCBh bmQgc3ByZWFkIHNwZWN0cnVtIGNsb2NraW5nIGFyZSBub3QgeWV0IGltcGxlbWVudGVkCisJICoK KwkgKiBQTEwgaW50ZWdlciBtb2RlOgorCSAqCS0gUE1SWV9QTExfVFdHX1NURVAgPSBQTVJZX1BM TF9TRF9JTlRfUkFUSU8KKwkgKgktIEVOX1RXRyA9IDAKKwkgKgktIEVOX1NEID0gMAorCSAqCS0g RE9XTl9TUFJFQUQgPSAwCisJICoKKwkgKiBQTEwgZnJhY3Rpb25hbCBtb2RlOgorCSAqCS0gRU5f VFdHID0gMAorCSAqCS0gRU5fU0QgPSAxCisJICoJLSBET1dOX1NQUkVBRCA9IDAKKwkgKgorCSAq IFNwcmVhZCBTcGVjdHJ1bSBDbG9ja2luZworCSAqCS0gRU5fVFdHID0gMQorCSAqCS0gRU5fU0Qg PSAxCisJICovCisKKwkvKiBEaXNhYmxlIFRXRyBhbmQgU0QgKi8KKwlsdmRzX2NsZWFyKGx2ZHMs IHBoeS0+YmFzZSArIHBoeS0+b2ZzLlBMTENSMSwgUEhZX1BMTENSMV9FTl9UV0cgfCBQSFlfUExM Q1IxX0VOX1NEKTsKKworCS8qIFBvd2VyIHVwIGJpYXMgYW5kIFBMTCBkaXZpZGVycyAqLworCWx2 ZHNfc2V0KGx2ZHMsIHBoeS0+YmFzZSArIHBoeS0+b2ZzLkRDUiwgUEhZX0RDUl9QT1dFUl9PSyk7 CisJbHZkc19zZXQobHZkcywgcGh5LT5iYXNlICsgcGh5LT5vZnMuQ01DUjEsIFBIWV9DTUNSX0NN X0VOX0RMKTsKKwlsdmRzX3NldChsdmRzLCBwaHktPmJhc2UgKyBwaHktPm9mcy5DTUNSMiwgUEhZ X0NNQ1JfQ01fRU5fREw0KTsKKworCS8qIFNldCB1cCB2b2x0YWdlIG1vZGUgKi8KKwlsdmRzX3Nl dChsdmRzLCBwaHktPmJhc2UgKyBwaHktPm9mcy5QTExDUENSLCAweDEpOworCWx2ZHNfc2V0KGx2 ZHMsIHBoeS0+YmFzZSArIHBoeS0+b2ZzLkJDUjMsIFBIWV9CQ1IzX1ZNX0VOX0RMKTsKKwlsdmRz X3NldChsdmRzLCBwaHktPmJhc2UgKyBwaHktPm9mcy5CQ1IxLCBQSFlfQkNSMV9FTl9CSUFTX0RM KTsKKwkvKiBFbmFibGUgZGlnaXRhbCBkYXRhbGFuZXMgKi8KKwlsdmRzX3NldChsdmRzLCBwaHkt PmJhc2UgKyBwaHktPm9mcy5DRkdDUiwgUEhZX0NGR0NSX0VOX0RJR19ETCk7Cit9CisKK3N0YXRp YyBpbnQgbHZkc19waXhlbF9jbGtfZW5hYmxlKHN0cnVjdCBjbGtfaHcgKmh3KQoreworCXN0cnVj dCBzdG1fbHZkcyAqbHZkcyA9IGNvbnRhaW5lcl9vZihodywgc3RydWN0IHN0bV9sdmRzLCBsdmRz X2NrX3B4KTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gbHZkcy0+bHZkc19icmlkZ2UuZGV2 OworCXN0cnVjdCBsdmRzX3BoeV9pbmZvICpwaHk7CisJaW50IHJldDsKKworCXJldCA9IGNsa19w cmVwYXJlX2VuYWJsZShsdmRzLT5wY2xrKTsKKwlpZiAocmV0KSB7CisJCWRybV9lcnIoZHJtLCAi RmFpbGVkIHRvIGVuYWJsZSBsdmRzIHBlcmlwaGVyYWwgY2xrXG4iKTsKKwkJcmV0dXJuIHJldDsK Kwl9CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUobHZkcy0+cGxscmVmX2Nsayk7CisJaWYg KHJldCkgeworCQlkcm1fZXJyKGRybSwgIkZhaWxlZCB0byBlbmFibGUgbHZkcyByZWZlcmVuY2Ug Y2xrXG4iKTsKKwkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGx2ZHMtPnBjbGspOworCQlyZXR1cm4g cmV0OworCX0KKworCS8qIEluIGNhc2Ugd2UgYXJlIG9wZXJhdGluZyBpbiBkdWFsIGxpbmsgdGhl IHNlY29uZCBQSFkgaXMgc2V0IGJlZm9yZSB0aGUgcHJpbWFyeSBQSFkuICovCisJaWYgKGx2ZHMt PnNlY29uZGFyeSkgeworCQlwaHkgPSBsdmRzLT5zZWNvbmRhcnk7CisKKwkJLyogUmVsZWFzZSBM VkRTIFBIWSBmcm9tIHJlc2V0IG1vZGUgKi8KKwkJbHZkc19zZXQobHZkcywgcGh5LT5iYXNlICsg cGh5LT5vZnMuR0NSLCBQSFlfR0NSX0RJVl9SU1ROIHwgUEhZX0dDUl9SU1RaKTsKKwkJbHZkc19w bGxfY29uZmlnKGx2ZHMsIHBoeSk7CisKKwkJcmV0ID0gbHZkc19wbGxfZW5hYmxlKGx2ZHMsIHBo eSk7CisJCWlmIChyZXQpIHsKKwkJCWRybV9lcnIoZHJtLCAiRmFpbGVkIHRvIGVuYWJsZSBzZWNv bmRhcnkgUEhZIFBMTDogJWRcbiIsIHJldCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJ aWYgKGx2ZHMtPnByaW1hcnkpIHsKKwkJcGh5ID0gbHZkcy0+cHJpbWFyeTsKKworCQkvKiBSZWxl YXNlIExWRFMgUEhZIGZyb20gcmVzZXQgbW9kZSAqLworCQlsdmRzX3NldChsdmRzLCBwaHktPmJh c2UgKyBwaHktPm9mcy5HQ1IsIFBIWV9HQ1JfRElWX1JTVE4gfCBQSFlfR0NSX1JTVFopOworCQls dmRzX3BsbF9jb25maWcobHZkcywgcGh5KTsKKworCQlyZXQgPSBsdmRzX3BsbF9lbmFibGUobHZk cywgcGh5KTsKKwkJaWYgKHJldCkgeworCQkJZHJtX2Vycihkcm0sICJGYWlsZWQgdG8gZW5hYmxl IHByaW1hcnkgUEhZIFBMTDogJWRcbiIsIHJldCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQor CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGx2ZHNfcGl4ZWxfY2xrX2Rpc2FibGUoc3Ry dWN0IGNsa19odyAqaHcpCit7CisJc3RydWN0IHN0bV9sdmRzICpsdmRzID0gY29udGFpbmVyX29m KGh3LCBzdHJ1Y3Qgc3RtX2x2ZHMsIGx2ZHNfY2tfcHgpOworCisJLyoKKwkgKiBGb3IgZWFjaCBQ SFk6CisJICogRGlzYWJsZSBEUCwgTFMsIEJJVCBjbG9jayBvdXRwdXRzCisJICogU2h1dGRvd24g dGhlIFBMTAorCSAqIEFzc2VydCBMVkRTIFBIWSBpbiByZXNldCBtb2RlCisJICovCisKKwlpZiAo bHZkcy0+cHJpbWFyeSkgeworCQlsdmRzX2NsZWFyKGx2ZHMsIGx2ZHMtPnByaW1hcnktPmJhc2Ug KyBsdmRzLT5wcmltYXJ5LT5vZnMuR0NSLAorCQkJICAgKFBIWV9HQ1JfRFBfQ0xLX09VVCB8IFBI WV9HQ1JfTFNfQ0xLX09VVCB8IFBIWV9HQ1JfQklUX0NMS19PVVQpKTsKKwkJbHZkc19jbGVhcihs dmRzLCBsdmRzLT5wcmltYXJ5LT5iYXNlICsgbHZkcy0+cHJpbWFyeS0+b2ZzLlBMTENSMSwKKwkJ CSAgIFBIWV9QTExDUjFfUExMX0VOKTsKKwkJbHZkc19jbGVhcihsdmRzLCBsdmRzLT5wcmltYXJ5 LT5iYXNlICsgbHZkcy0+cHJpbWFyeS0+b2ZzLkdDUiwKKwkJCSAgIFBIWV9HQ1JfRElWX1JTVE4g fCBQSFlfR0NSX1JTVFopOworCX0KKworCWlmIChsdmRzLT5zZWNvbmRhcnkpIHsKKwkJbHZkc19j bGVhcihsdmRzLCBsdmRzLT5zZWNvbmRhcnktPmJhc2UgKyBsdmRzLT5zZWNvbmRhcnktPm9mcy5H Q1IsCisJCQkgICAoUEhZX0dDUl9EUF9DTEtfT1VUIHwgUEhZX0dDUl9MU19DTEtfT1VUIHwgUEhZ X0dDUl9CSVRfQ0xLX09VVCkpOworCQlsdmRzX2NsZWFyKGx2ZHMsIGx2ZHMtPnNlY29uZGFyeS0+ YmFzZSArIGx2ZHMtPnNlY29uZGFyeS0+b2ZzLlBMTENSMSwKKwkJCSAgIFBIWV9QTExDUjFfUExM X0VOKTsKKwkJbHZkc19jbGVhcihsdmRzLCBsdmRzLT5zZWNvbmRhcnktPmJhc2UgKyBsdmRzLT5z ZWNvbmRhcnktPm9mcy5HQ1IsCisJCQkgICBQSFlfR0NSX0RJVl9SU1ROIHwgUEhZX0dDUl9SU1Ra KTsKKwl9CisKKwljbGtfZGlzYWJsZV91bnByZXBhcmUobHZkcy0+cGxscmVmX2Nsayk7CisJY2xr X2Rpc2FibGVfdW5wcmVwYXJlKGx2ZHMtPnBjbGspOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9u ZyBsdmRzX3BpeGVsX2Nsa19yZWNhbGNfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywKKwkJCQkJCXVu c2lnbmVkIGxvbmcgcGFyZW50X3JhdGUpCit7CisJc3RydWN0IHN0bV9sdmRzICpsdmRzID0gY29u dGFpbmVyX29mKGh3LCBzdHJ1Y3Qgc3RtX2x2ZHMsIGx2ZHNfY2tfcHgpOworCXN0cnVjdCBkcm1f ZGV2aWNlICpkcm0gPSBsdmRzLT5sdmRzX2JyaWRnZS5kZXY7CisJdW5zaWduZWQgaW50IHBsbF9p bl9raHosIGJkaXYsIG1kaXYsIG5kaXY7CisJaW50IHJldCwgbXVsdGlwbGllciwgcGxsX291dF9r aHo7CisJdTMyIHZhbDsKKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShsdmRzLT5wY2xrKTsK KwlpZiAocmV0KSB7CisJCWRybV9lcnIoZHJtLCAiRmFpbGVkIHRvIGVuYWJsZSBsdmRzIHBlcmlw aGVyYWwgY2xrXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGx2ZHNfaXNfZHVhbF9saW5r KGx2ZHMtPmxpbmtfdHlwZSkpCisJCW11bHRpcGxpZXIgPSAyOworCWVsc2UKKwkJbXVsdGlwbGll ciA9IDE7CisKKwl2YWwgPSBsdmRzX3JlYWQobHZkcywgbHZkcy0+cHJpbWFyeS0+YmFzZSArIGx2 ZHMtPnByaW1hcnktPm9mcy5QTExDUjIpOworCisJbmRpdiA9ICh2YWwgJiBQSFlfUExMQ1IyX05E SVYpID4+IDE2OworCWJkaXYgPSAodmFsICYgUEhZX1BMTENSMl9CRElWKSA+PiAwOworCisJbWRp diA9ICh1bnNpZ25lZCBpbnQpbHZkc19yZWFkKGx2ZHMsCisJCQkJICAgICAgIGx2ZHMtPnByaW1h cnktPmJhc2UgKyBsdmRzLT5wcmltYXJ5LT5vZnMuUExMU0RDUjEpOworCisJcGxsX2luX2toeiA9 ICh1bnNpZ25lZCBpbnQpKHBhcmVudF9yYXRlIC8gMTAwMCk7CisKKwkvKiBDb21wdXRlIHZhbHVl cyBpZiBub3QgeWV0IGFjY2Vzc2libGUgKi8KKwlpZiAodmFsID09IDAgfHwgbWRpdiA9PSAwKSB7 CisJCWx2ZHNfcGxsX2dldF9wYXJhbXMobHZkcywgcGxsX2luX2toeiwKKwkJCQkgICAgbHZkcy0+ cGl4ZWxfY2xvY2tfcmF0ZSAqIDcgLyAxMDAwIC8gbXVsdGlwbGllciwKKwkJCQkgICAgJmJkaXYs ICZtZGl2LCAmbmRpdik7CisJfQorCisJcGxsX291dF9raHogPSBwbGxfZ2V0X2Nsa291dF9raHoo cGxsX2luX2toeiwgYmRpdiwgbWRpdiwgbmRpdik7CisJZHJtX2RiZyhkcm0sICJuZGl2ICVkICwg YmRpdiAlZCwgbWRpdiAlZCwgcGxsX291dF9raHogJWRcbiIsCisJCW5kaXYsIGJkaXYsIG1kaXYs IHBsbF9vdXRfa2h6KTsKKworCS8qCisJICogMS83IGJlY2F1c2UgZm9yIGVhY2ggcGl4ZWwgaW4g MSBsYW5lIHRoZXJlIGlzIDcgYml0cworCSAqIFdlIHdhbnQgcGl4Y2xrLCBub3QgYml0Y2xrCisJ ICovCisJbHZkcy0+cGl4ZWxfY2xvY2tfcmF0ZSA9IHBsbF9vdXRfa2h6ICogMTAwMCAqIG11bHRp cGxpZXIgLyA3OworCisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGx2ZHMtPnBjbGspOworCisJcmV0 dXJuICh1bnNpZ25lZCBsb25nKWx2ZHMtPnBpeGVsX2Nsb2NrX3JhdGU7Cit9CisKK3N0YXRpYyBs b25nIGx2ZHNfcGl4ZWxfY2xrX3JvdW5kX3JhdGUoc3RydWN0IGNsa19odyAqaHcsIHVuc2lnbmVk IGxvbmcgcmF0ZSwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nICpwYXJlbnRfcmF0ZSkKK3sKKwlz dHJ1Y3Qgc3RtX2x2ZHMgKmx2ZHMgPSBjb250YWluZXJfb2YoaHcsIHN0cnVjdCBzdG1fbHZkcywg bHZkc19ja19weCk7CisJdW5zaWduZWQgaW50IHBsbF9pbl9raHosIGJkaXYgPSAwLCBtZGl2ID0g MCwgbmRpdiA9IDA7CisJY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKKwlj b25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTsKKwlpbnQgbXVsdGlwbGllcjsKKwor CWNvbm5lY3RvciA9ICZsdmRzLT5jb25uZWN0b3I7CisJaWYgKCFjb25uZWN0b3IpCisJCXJldHVy biAtRUlOVkFMOworCisJaWYgKGxpc3RfZW1wdHkoJmNvbm5lY3Rvci0+bW9kZXMpKSB7CisJCWRy bV9kYmcoY29ubmVjdG9yLT5kZXYsICJjb25uZWN0b3I6IGVtcHR5IG1vZGVzIGxpc3RcbiIpOwor CQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwltb2RlID0gbGlzdF9maXJzdF9lbnRyeSgmY29ubmVj dG9yLT5tb2RlcywKKwkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSwgaGVhZCk7CisKKwlwbGxf aW5fa2h6ID0gKHVuc2lnbmVkIGludCkoKnBhcmVudF9yYXRlIC8gMTAwMCk7CisKKwlpZiAobHZk c19pc19kdWFsX2xpbmsobHZkcy0+bGlua190eXBlKSkKKwkJbXVsdGlwbGllciA9IDI7CisJZWxz ZQorCQltdWx0aXBsaWVyID0gMTsKKworCWx2ZHNfcGxsX2dldF9wYXJhbXMobHZkcywgcGxsX2lu X2toeiwgbW9kZS0+Y2xvY2sgKiA3IC8gbXVsdGlwbGllciwgJmJkaXYsICZtZGl2LCAmbmRpdik7 CisKKwkvKgorCSAqIDEvNyBiZWNhdXNlIGZvciBlYWNoIHBpeGVsIGluIDEgbGFuZSB0aGVyZSBp cyA3IGJpdHMKKwkgKiBXZSB3YW50IHBpeGNsaywgbm90IGJpdGNsaworCSAqLworCWx2ZHMtPnBp eGVsX2Nsb2NrX3JhdGUgPSAodW5zaWduZWQgbG9uZylwbGxfZ2V0X2Nsa291dF9raHoocGxsX2lu X2toeiwgYmRpdiwgbWRpdiwgbmRpdikKKwkJCQkJICogMTAwMCAqIG11bHRpcGxpZXIgLyA3Owor CisJcmV0dXJuIGx2ZHMtPnBpeGVsX2Nsb2NrX3JhdGU7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgY2xrX29wcyBsdmRzX3BpeGVsX2Nsa19vcHMgPSB7CisJLmVuYWJsZSA9IGx2ZHNfcGl4ZWxf Y2xrX2VuYWJsZSwKKwkuZGlzYWJsZSA9IGx2ZHNfcGl4ZWxfY2xrX2Rpc2FibGUsCisJLnJlY2Fs Y19yYXRlID0gbHZkc19waXhlbF9jbGtfcmVjYWxjX3JhdGUsCisJLnJvdW5kX3JhdGUgPSBsdmRz X3BpeGVsX2Nsa19yb3VuZF9yYXRlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtfaW5p dF9kYXRhIGNsa19kYXRhID0geworCS5uYW1lID0gImNsa19waXhfbHZkcyIsCisJLm9wcyA9ICZs dmRzX3BpeGVsX2Nsa19vcHMsCisJLnBhcmVudF9uYW1lcyA9IChjb25zdCBjaGFyICogW10pIHsi Y2tfa2VyX2x2ZHNwaHkifSwKKwkubnVtX3BhcmVudHMgPSAxLAorCS5mbGFncyA9IENMS19JR05P UkVfVU5VU0VELAorfTsKKworc3RhdGljIHZvaWQgbHZkc19waXhlbF9jbGtfdW5yZWdpc3Rlcih2 b2lkICpkYXRhKQoreworCXN0cnVjdCBzdG1fbHZkcyAqbHZkcyA9IGRhdGE7CisKKwlvZl9jbGtf ZGVsX3Byb3ZpZGVyKGx2ZHMtPmRldi0+b2Zfbm9kZSk7CisJY2xrX2h3X3VucmVnaXN0ZXIoJmx2 ZHMtPmx2ZHNfY2tfcHgpOworfQorCitzdGF0aWMgaW50IGx2ZHNfcGl4ZWxfY2xrX3JlZ2lzdGVy KHN0cnVjdCBzdG1fbHZkcyAqbHZkcykKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUgPSBs dmRzLT5kZXYtPm9mX25vZGU7CisJaW50IHJldDsKKworCWx2ZHMtPmx2ZHNfY2tfcHguaW5pdCA9 ICZjbGtfZGF0YTsKKworCS8qIHNldCB0aGUgcmF0ZSBieSBkZWZhdWx0IGF0IDE0ODUwMDAwMCAq LworCWx2ZHMtPnBpeGVsX2Nsb2NrX3JhdGUgPSAxNDg1MDAwMDA7CisKKwlyZXQgPSBjbGtfaHdf cmVnaXN0ZXIobHZkcy0+ZGV2LCAmbHZkcy0+bHZkc19ja19weCk7CisJaWYgKHJldCkKKwkJcmV0 dXJuIHJldDsKKworCXJldCA9IG9mX2Nsa19hZGRfaHdfcHJvdmlkZXIobm9kZSwgb2ZfY2xrX2h3 X3NpbXBsZV9nZXQsCisJCQkJICAgICAmbHZkcy0+bHZkc19ja19weCk7CisJaWYgKHJldCkKKwkJ Y2xrX2h3X3VucmVnaXN0ZXIoJmx2ZHMtPmx2ZHNfY2tfcHgpOworCisJcmV0dXJuIHJldDsKK30K KworLyoKKyAqIEhvc3QgY29uZmlndXJhdGlvbiByZWxhdGVkCisgKi8KK3N0YXRpYyB2b2lkIGx2 ZHNfY29uZmlnX2RhdGFfbWFwcGluZyhzdHJ1Y3Qgc3RtX2x2ZHMgKmx2ZHMpCit7CisJc3RydWN0 IGRybV9kZXZpY2UgKmRybSA9IGx2ZHMtPmx2ZHNfYnJpZGdlLmRldjsKKwljb25zdCBzdHJ1Y3Qg ZHJtX2Rpc3BsYXlfaW5mbyAqaW5mbzsKKwllbnVtIGx2ZHNfcGl4ZWwgKCpiaXRtYXApWzddOwor CXUzMiBsdmRzX2RtbGNyLCBsdmRzX2RtbWNyOworCWludCBpOworCisJaW5mbyA9ICYoJmx2ZHMt PmNvbm5lY3RvciktPmRpc3BsYXlfaW5mbzsKKwlpZiAoIWluZm8tPm51bV9idXNfZm9ybWF0cyB8 fCAhaW5mby0+YnVzX2Zvcm1hdHMpIHsKKwkJZHJtX3dhcm4oZHJtLCAiTm8gTFZEUyBidXMgZm9y bWF0IHJlcG9ydGVkXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXN3aXRjaCAoaW5mby0+YnVzX2Zv cm1hdHNbMF0pIHsKKwljYXNlIE1FRElBX0JVU19GTVRfUkdCNjY2XzFYN1gzX1NQV0c6IC8qIFZF U0EtUkdCNjY2ICovCisJCWRybV93YXJuKGRybSwgIlBpeGVsIGZvcm1hdCB3aXRoIGRhdGEgbWFw cGluZyBub3QgeWV0IHN1cHBvcnRlZC5cbiIpOworCQlyZXR1cm47CisJY2FzZSBNRURJQV9CVVNf Rk1UX1JHQjg4OF8xWDdYNF9TUFdHOiAvKiBWRVNBLVJHQjg4OCAqLworCQliaXRtYXAgPSBsdmRz X2JpdG1hcF92ZXNhX3JnYjg4ODsKKwkJYnJlYWs7CisJY2FzZSBNRURJQV9CVVNfRk1UX1JHQjg4 OF8xWDdYNF9KRUlEQTogLyogSkVJREEtUkdCODg4ICovCisJCWJpdG1hcCA9IGx2ZHNfYml0bWFw X2plaWRhX3JnYjg4ODsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZHJtX3dhcm4oZHJtLCAiVW5z dXBwb3J0ZWQgTFZEUyBidXMgZm9ybWF0IDB4JTA0eFxuIiwgaW5mby0+YnVzX2Zvcm1hdHNbMF0p OworCQlyZXR1cm47CisJfQorCisJLyogU2V0IGJpdG1hcCBmb3IgZWFjaCBsYW5lICovCisJZm9y IChpID0gMDsgaSA8IDU7IGkrKykgeworCQlsdmRzX2RtbGNyID0gKChiaXRtYXBbaV1bMF0pCisJ CQkgICAgICArIChiaXRtYXBbaV1bMV0gPDwgNSkKKwkJCSAgICAgICsgKGJpdG1hcFtpXVsyXSA8 PCAxMCkKKwkJCSAgICAgICsgKGJpdG1hcFtpXVszXSA8PCAxNSkpOworCQlsdmRzX2RtbWNyID0g KChiaXRtYXBbaV1bNF0pCisJCQkgICAgICArIChiaXRtYXBbaV1bNV0gPDwgNSkKKwkJCSAgICAg ICsgKGJpdG1hcFtpXVs2XSA8PCAxMCkpOworCisJCWx2ZHNfd3JpdGUobHZkcywgTFZEU19ETUxD UihpKSwgbHZkc19kbWxjcik7CisJCWx2ZHNfd3JpdGUobHZkcywgTFZEU19ETU1DUihpKSwgbHZk c19kbW1jcik7CisJfQorfQorCitzdGF0aWMgdm9pZCBsdmRzX2NvbmZpZ19tb2RlKHN0cnVjdCBz dG1fbHZkcyAqbHZkcykKK3sKKwl1MzIgYnVzX2ZsYWdzLCBsdmRzX2NyID0gMCwgbHZkc19jZGwx Y3IgPSAwLCBsdmRzX2NkbDJjciA9IDA7CisJY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUg Km1vZGU7CisJY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKKworCWNvbm5l Y3RvciA9ICZsdmRzLT5jb25uZWN0b3I7CisJaWYgKCFjb25uZWN0b3IpCisJCXJldHVybjsKKwor CWlmIChsaXN0X2VtcHR5KCZjb25uZWN0b3ItPm1vZGVzKSkgeworCQlkcm1fZGJnKGNvbm5lY3Rv ci0+ZGV2LCAiY29ubmVjdG9yOiBlbXB0eSBtb2RlcyBsaXN0XG4iKTsKKwkJcmV0dXJuOworCX0K KworCWJ1c19mbGFncyA9IGNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLmJ1c19mbGFnczsKKwltb2Rl ID0gbGlzdF9maXJzdF9lbnRyeSgmY29ubmVjdG9yLT5tb2RlcywKKwkJCQlzdHJ1Y3QgZHJtX2Rp c3BsYXlfbW9kZSwgaGVhZCk7CisKKwlsdmRzX2NsZWFyKGx2ZHMsIExWRFNfQ1IsIENSX0xLTU9E KTsKKwlsdmRzX2NsZWFyKGx2ZHMsIExWRFNfQ0RMMUNSLCBDRExDUl9ESVNUUjAgfCBDRExDUl9E SVNUUjEgfCBDRExDUl9ESVNUUjIgfAorCQkJCSAgICAgIENETENSX0RJU1RSMyB8IENETENSX0RJ U1RSNCk7CisJbHZkc19jbGVhcihsdmRzLCBMVkRTX0NETDJDUiwgQ0RMQ1JfRElTVFIwIHwgQ0RM Q1JfRElTVFIxIHwgQ0RMQ1JfRElTVFIyIHwKKwkJCQkgICAgICBDRExDUl9ESVNUUjMgfCBDRExD Ul9ESVNUUjQpOworCisJLyogU2V0IGNoYW5uZWwgZGlzdHJpYnV0aW9uICovCisJaWYgKGx2ZHMt PnByaW1hcnkpCisJCWx2ZHNfY2RsMWNyID0gQ0RMMUNSX0RFRkFVTFQ7CisKKwlpZiAobHZkcy0+ c2Vjb25kYXJ5KSB7CisJCWx2ZHNfY3IgfD0gQ1JfTEtNT0Q7CisJCWx2ZHNfY2RsMmNyID0gQ0RM MkNSX0RFRkFVTFQ7CisJfQorCisJLyogU2V0IHNpZ25hbCBwb2xhcml0eSAqLworCWlmIChidXNf ZmxhZ3MgJiBEUk1fQlVTX0ZMQUdfREVfTE9XKQorCQlsdmRzX2NyIHw9IENSX0RFUE9MOworCisJ aWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19OSFNZTkMpCisJCWx2ZHNfY3IgfD0gQ1Jf SFNQT0w7CisKKwlpZiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX05WU1lOQykKKwkJbHZk c19jciB8PSBDUl9WU1BPTDsKKworCXN3aXRjaCAobHZkcy0+bGlua190eXBlKSB7CisJY2FzZSBM VkRTX0RVQUxfTElOS19FVkVOX09ERF9QSVhFTFM6IC8qIExLUEhBID0gMCAqLworCQlsdmRzX2Ny ICY9IH5DUl9MS1BIQTsKKwkJYnJlYWs7CisJY2FzZSBMVkRTX0RVQUxfTElOS19PRERfRVZFTl9Q SVhFTFM6IC8qIExLUEhBID0gMSAqLworCQlsdmRzX2NyIHw9IENSX0xLUEhBOworCQlicmVhazsK KwlkZWZhdWx0OgorCQlkcm1fbm90aWNlKGx2ZHMtPmx2ZHNfYnJpZGdlLmRldiwgIk5vIHBoYXNl IHByZWNpc2VkLCBzZXR0aW5nIGRlZmF1bHRcbiIpOworCQlsdmRzX2NyICY9IH5DUl9MS1BIQTsK KwkJYnJlYWs7CisJfQorCisJLyogV3JpdGUgY29uZmlnIHRvIHJlZ2lzdGVycyAqLworCWx2ZHNf c2V0KGx2ZHMsIExWRFNfQ1IsIGx2ZHNfY3IpOworCWx2ZHNfd3JpdGUobHZkcywgTFZEU19DREwx Q1IsIGx2ZHNfY2RsMWNyKTsKKwlsdmRzX3dyaXRlKGx2ZHMsIExWRFNfQ0RMMkNSLCBsdmRzX2Nk bDJjcik7Cit9CisKK3N0YXRpYyBpbnQgbHZkc19jb25uZWN0b3JfZ2V0X21vZGVzKHN0cnVjdCBk cm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IHN0bV9sdmRzICpsdmRzID0gY29u bmVjdG9yX3RvX3N0bV9sdmRzKGNvbm5lY3Rvcik7CisKKwlyZXR1cm4gZHJtX3BhbmVsX2dldF9t b2RlcyhsdmRzLT5wYW5lbCwgY29ubmVjdG9yKTsKK30KKworc3RhdGljIGludCBsdmRzX2Nvbm5l Y3Rvcl9hdG9taWNfY2hlY2soc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJCQkg ICAgICAgc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQoreworCWNvbnN0IHN0cnVjdCBk cm1fZGlzcGxheV9tb2RlICpwYW5lbF9tb2RlOworCXN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRl ICpjb25uX3N0YXRlOworCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKKworCWNv bm5fc3RhdGUgPSBkcm1fYXRvbWljX2dldF9uZXdfY29ubmVjdG9yX3N0YXRlKHN0YXRlLCBjb25u ZWN0b3IpOworCWlmICghY29ubl9zdGF0ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAobGlz dF9lbXB0eSgmY29ubmVjdG9yLT5tb2RlcykpIHsKKwkJZHJtX2RiZyhjb25uZWN0b3ItPmRldiwg ImNvbm5lY3RvcjogZW1wdHkgbW9kZXMgbGlzdFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0K KworCWlmICghY29ubl9zdGF0ZS0+Y3J0YykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwYW5lbF9t b2RlID0gbGlzdF9maXJzdF9lbnRyeSgmY29ubmVjdG9yLT5tb2RlcywKKwkJCQkgICAgICBzdHJ1 Y3QgZHJtX2Rpc3BsYXlfbW9kZSwgaGVhZCk7CisKKwkvKiBXZSdyZSBub3QgYWxsb3dlZCB0byBt b2RpZnkgdGhlIHJlc29sdXRpb24uICovCisJY3J0Y19zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X2Ny dGNfc3RhdGUoc3RhdGUsIGNvbm5fc3RhdGUtPmNydGMpOworCWlmIChJU19FUlIoY3J0Y19zdGF0 ZSkpCisJCXJldHVybiBQVFJfRVJSKGNydGNfc3RhdGUpOworCisJaWYgKGNydGNfc3RhdGUtPm1v ZGUuaGRpc3BsYXkgIT0gcGFuZWxfbW9kZS0+aGRpc3BsYXkgfHwKKwkgICAgY3J0Y19zdGF0ZS0+ bW9kZS52ZGlzcGxheSAhPSBwYW5lbF9tb2RlLT52ZGlzcGxheSkKKwkJcmV0dXJuIC1FSU5WQUw7 CisKKwkvKiBUaGUgZmxhdCBwYW5lbCBtb2RlIGlzIGZpeGVkLCBqdXN0IGNvcHkgaXQgdG8gdGhl IGFkanVzdGVkIG1vZGUuICovCisJZHJtX21vZGVfY29weSgmY3J0Y19zdGF0ZS0+YWRqdXN0ZWRf bW9kZSwgcGFuZWxfbW9kZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVj dCBkcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcyBsdmRzX2Nvbm5faGVscGVyX2Z1bmNzID0gewor CS5nZXRfbW9kZXMgPSBsdmRzX2Nvbm5lY3Rvcl9nZXRfbW9kZXMsCisJLmF0b21pY19jaGVjayA9 IGx2ZHNfY29ubmVjdG9yX2F0b21pY19jaGVjaywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg ZHJtX2Nvbm5lY3Rvcl9mdW5jcyBsdmRzX2Nvbm5fZnVuY3MgPSB7CisJLnJlc2V0ID0gZHJtX2F0 b21pY19oZWxwZXJfY29ubmVjdG9yX3Jlc2V0LAorCS5maWxsX21vZGVzID0gZHJtX2hlbHBlcl9w cm9iZV9zaW5nbGVfY29ubmVjdG9yX21vZGVzLAorCS5kZXN0cm95ID0gZHJtX2Nvbm5lY3Rvcl9j bGVhbnVwLAorCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29u bmVjdG9yX2R1cGxpY2F0ZV9zdGF0ZSwKKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRv bWljX2hlbHBlcl9jb25uZWN0b3JfZGVzdHJveV9zdGF0ZSwKK307CisKK3N0YXRpYyBpbnQgbHZk c19hdHRhY2goc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKKwkJICAgICAgIGVudW0gZHJtX2Jy aWRnZV9hdHRhY2hfZmxhZ3MgZmxhZ3MpCit7CisJc3RydWN0IHN0bV9sdmRzICpsdmRzID0gYnJp ZGdlX3RvX3N0bV9sdmRzKGJyaWRnZSk7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rv ciA9ICZsdmRzLT5jb25uZWN0b3I7CisJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyID0gYnJp ZGdlLT5lbmNvZGVyOworCWludCByZXQ7CisKKwlpZiAoIWJyaWRnZS0+ZW5jb2RlcikgeworCQlk cm1fZXJyKGJyaWRnZS0+ZGV2LCAiUGFyZW50IGVuY29kZXIgb2JqZWN0IG5vdCBmb3VuZFxuIik7 CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIFNldCB0aGUgZW5jb2RlciB0eXBlIGFzIGNh bGxlciBkb2VzIG5vdCBrbm93IGl0ICovCisJYnJpZGdlLT5lbmNvZGVyLT5lbmNvZGVyX3R5cGUg PSBEUk1fTU9ERV9FTkNPREVSX0xWRFM7CisKKwkvKiBObyBjbG9uaW5nIHN1cHBvcnQgKi8KKwli cmlkZ2UtPmVuY29kZXItPnBvc3NpYmxlX2Nsb25lcyA9IDA7CisKKwkvKiBJZiB3ZSBoYXZlIGEg bmV4dCBicmlkZ2UganVzdCBhdHRhY2ggaXQuICovCisJaWYgKGx2ZHMtPm5leHRfYnJpZGdlKQor CQlyZXR1cm4gZHJtX2JyaWRnZV9hdHRhY2goYnJpZGdlLT5lbmNvZGVyLCBsdmRzLT5uZXh0X2Jy aWRnZSwKKwkJCQkJIGJyaWRnZSwgZmxhZ3MpOworCisJaWYgKGZsYWdzICYgRFJNX0JSSURHRV9B VFRBQ0hfTk9fQ09OTkVDVE9SKSB7CisJCWRybV9lcnIoYnJpZGdlLT5kZXYsICJGaXggYnJpZGdl IGRyaXZlciB0byBtYWtlIGNvbm5lY3RvciBvcHRpb25hbCEiKTsKKwkJcmV0dXJuIC1FSU5WQUw7 CisJfQorCisJLyogT3RoZXJ3aXNlIGlmIHdlIGhhdmUgYSBwYW5lbCwgY3JlYXRlIGEgY29ubmVj dG9yLiAqLworCWlmICghbHZkcy0+cGFuZWwpCisJCXJldHVybiAwOworCisJcmV0ID0gZHJtX2Nv bm5lY3Rvcl9pbml0KGJyaWRnZS0+ZGV2LCBjb25uZWN0b3IsCisJCQkJICZsdmRzX2Nvbm5fZnVu Y3MsIERSTV9NT0RFX0NPTk5FQ1RPUl9MVkRTKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJl dDsKKworCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZChjb25uZWN0b3IsICZsdmRzX2Nvbm5faGVs cGVyX2Z1bmNzKTsKKworCXJldCA9IGRybV9jb25uZWN0b3JfYXR0YWNoX2VuY29kZXIoY29ubmVj dG9yLCBlbmNvZGVyKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGx2ZHNfYXRv bWljX2VuYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAorCQkJICAgICAgIHN0cnVjdCBk cm1fYnJpZGdlX3N0YXRlICpvbGRfYnJpZGdlX3N0YXRlKQoreworCXN0cnVjdCBkcm1fYXRvbWlj X3N0YXRlICpzdGF0ZSA9IG9sZF9icmlkZ2Vfc3RhdGUtPmJhc2Uuc3RhdGU7CisJc3RydWN0IHN0 bV9sdmRzICpsdmRzID0gYnJpZGdlX3RvX3N0bV9sdmRzKGJyaWRnZSk7CisJc3RydWN0IGRybV9j b25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGU7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5l Y3RvcjsKKwlpbnQgcmV0OworCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGx2ZHMtPnBjbGsp OworCWlmIChyZXQpIHsKKwkJZHJtX2VycihicmlkZ2UtPmRldiwgIkZhaWxlZCB0byBlbmFibGUg bHZkcyBwZXJpcGhlcmFsIGNsa1xuIik7CisJCXJldHVybjsKKwl9CisKKwljb25uZWN0b3IgPSBk cm1fYXRvbWljX2dldF9uZXdfY29ubmVjdG9yX2Zvcl9lbmNvZGVyKHN0YXRlLCBicmlkZ2UtPmVu Y29kZXIpOworCWlmICghY29ubmVjdG9yKQorCQlyZXR1cm47CisKKwljb25uX3N0YXRlID0gZHJt X2F0b21pY19nZXRfbmV3X2Nvbm5lY3Rvcl9zdGF0ZShzdGF0ZSwgY29ubmVjdG9yKTsKKwlpZiAo IWNvbm5fc3RhdGUpCisJCXJldHVybjsKKworCWx2ZHNfY29uZmlnX21vZGUobHZkcyk7CisKKwkv KiBTZXQgRGF0YSBNYXBwaW5nICovCisJbHZkc19jb25maWdfZGF0YV9tYXBwaW5nKGx2ZHMpOwor CisJLyogVHVybiB0aGUgb3V0cHV0IG9uLiAqLworCWx2ZHNfc2V0KGx2ZHMsIExWRFNfQ1IsIENS X0xWRFNFTik7CisKKwlpZiAobHZkcy0+cGFuZWwpIHsKKwkJZHJtX3BhbmVsX3ByZXBhcmUobHZk cy0+cGFuZWwpOworCQlkcm1fcGFuZWxfZW5hYmxlKGx2ZHMtPnBhbmVsKTsKKwl9Cit9CisKK3N0 YXRpYyB2b2lkIGx2ZHNfYXRvbWljX2Rpc2FibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwK KwkJCQlzdHJ1Y3QgZHJtX2JyaWRnZV9zdGF0ZSAqb2xkX2JyaWRnZV9zdGF0ZSkKK3sKKwlzdHJ1 Y3Qgc3RtX2x2ZHMgKmx2ZHMgPSBicmlkZ2VfdG9fc3RtX2x2ZHMoYnJpZGdlKTsKKworCWlmIChs dmRzLT5wYW5lbCkgeworCQlkcm1fcGFuZWxfZGlzYWJsZShsdmRzLT5wYW5lbCk7CisJCWRybV9w YW5lbF91bnByZXBhcmUobHZkcy0+cGFuZWwpOworCX0KKworCS8qIERpc2FibGUgTFZEUyBtb2R1 bGUgKi8KKwlsdmRzX2NsZWFyKGx2ZHMsIExWRFNfQ1IsIENSX0xWRFNFTik7CisKKwljbGtfZGlz YWJsZV91bnByZXBhcmUobHZkcy0+cGNsayk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJt X2JyaWRnZV9mdW5jcyBsdmRzX2JyaWRnZV9mdW5jcyA9IHsKKwkuYXR0YWNoID0gbHZkc19hdHRh Y2gsCisJLmF0b21pY19lbmFibGUgPSBsdmRzX2F0b21pY19lbmFibGUsCisJLmF0b21pY19kaXNh YmxlID0gbHZkc19hdG9taWNfZGlzYWJsZSwKKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGRy bV9hdG9taWNfaGVscGVyX2JyaWRnZV9kdXBsaWNhdGVfc3RhdGUsCisJLmF0b21pY19kZXN0cm95 X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfYnJpZGdlX2Rlc3Ryb3lfc3RhdGUsCisJLmF0b21p Y19yZXNldCA9IGRybV9hdG9taWNfaGVscGVyX2JyaWRnZV9yZXNldCwKK307CisKK3N0YXRpYyBp bnQgbHZkc19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBk ZXZpY2Vfbm9kZSAqcG9ydDEsICpwb3J0MiwgKnJlbW90ZTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYg PSAmcGRldi0+ZGV2OworCXN0cnVjdCByZXNldF9jb250cm9sICpyc3RjOworCXN0cnVjdCBzdG1f bHZkcyAqbHZkczsKKwlpbnQgcmV0LCBkdWFsX2xpbms7CisKKwlkZXZfZGJnKGRldiwgIlByb2Jp bmcgTFZEUyBkcml2ZXIuLi5cbiIpOworCisJbHZkcyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVv ZigqbHZkcyksIEdGUF9LRVJORUwpOworCWlmICghbHZkcykKKwkJcmV0dXJuIC1FTk9NRU07CisK KwlsdmRzLT5kZXYgPSBkZXY7CisKKwlyZXQgPSBkcm1fb2ZfZmluZF9wYW5lbF9vcl9icmlkZ2Uo ZGV2LT5vZl9ub2RlLCAxLCAwLAorCQkJCQkgICZsdmRzLT5wYW5lbCwgJmx2ZHMtPm5leHRfYnJp ZGdlKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnJfcHJvYmUoZGV2LCByZXQsICJQYW5lbCBub3Qg Zm91bmRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWx2ZHMtPmJhc2UgPSBkZXZtX3BsYXRm b3JtX2lvcmVtYXBfcmVzb3VyY2UocGRldiwgMCk7CisJaWYgKElTX0VSUihsdmRzLT5iYXNlKSkg eworCQlyZXQgPSBQVFJfRVJSKGx2ZHMtPmJhc2UpOworCQlkZXZfZXJyKGRldiwgIlVuYWJsZSB0 byBnZXQgcmVncyAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlsdmRzLT5wY2xr ID0gZGV2bV9jbGtfZ2V0KGRldiwgInBjbGsiKTsKKwlpZiAoSVNfRVJSKGx2ZHMtPnBjbGspKSB7 CisJCXJldCA9IFBUUl9FUlIobHZkcy0+cGNsayk7CisJCWRldl9lcnIoZGV2LCAiVW5hYmxlIHRv IGdldCBwZXJpcGhlcmFsIGNsb2NrOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisK KwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUobHZkcy0+cGNsayk7CisJaWYgKHJldCkgeworCQlk ZXZfZXJyKGRldiwgIiVzOiBGYWlsZWQgdG8gZW5hYmxlIHBlcmlwaGVyYWwgY2xrXG4iLCBfX2Z1 bmNfXyk7CisJCXJldHVybiByZXQ7CisJfQorCisJcnN0YyA9IGRldm1fcmVzZXRfY29udHJvbF9n ZXRfZXhjbHVzaXZlKGRldiwgTlVMTCk7CisKKwlpZiAoSVNfRVJSKHJzdGMpKSB7CisJCXJldCA9 IFBUUl9FUlIocnN0Yyk7CisJCWdvdG8gZXJyX2x2ZHNfcHJvYmU7CisJfQorCisJcmVzZXRfY29u dHJvbF9hc3NlcnQocnN0Yyk7CisJdXNsZWVwX3JhbmdlKDEwLCAyMCk7CisJcmVzZXRfY29udHJv bF9kZWFzc2VydChyc3RjKTsKKworCXBvcnQxID0gb2ZfZ3JhcGhfZ2V0X3BvcnRfYnlfaWQoZGV2 LT5vZl9ub2RlLCAxKTsKKwlwb3J0MiA9IG9mX2dyYXBoX2dldF9wb3J0X2J5X2lkKGRldi0+b2Zf bm9kZSwgMik7CisJZHVhbF9saW5rID0gZHJtX29mX2x2ZHNfZ2V0X2R1YWxfbGlua19waXhlbF9v cmRlcihwb3J0MSwgcG9ydDIpOworCisJc3dpdGNoIChkdWFsX2xpbmspIHsKKwljYXNlIERSTV9M VkRTX0RVQUxfTElOS19PRERfRVZFTl9QSVhFTFM6CisJCWx2ZHMtPmxpbmtfdHlwZSA9IExWRFNf RFVBTF9MSU5LX09ERF9FVkVOX1BJWEVMUzsKKwkJbHZkcy0+cHJpbWFyeSA9ICZsdmRzX3BoeV8x NmZmX3ByaW1hcnk7CisJCWx2ZHMtPnNlY29uZGFyeSA9ICZsdmRzX3BoeV8xNmZmX3NlY29uZGFy eTsKKwkJYnJlYWs7CisJY2FzZSBEUk1fTFZEU19EVUFMX0xJTktfRVZFTl9PRERfUElYRUxTOgor CQlsdmRzLT5saW5rX3R5cGUgPSBMVkRTX0RVQUxfTElOS19FVkVOX09ERF9QSVhFTFM7CisJCWx2 ZHMtPnByaW1hcnkgPSAmbHZkc19waHlfMTZmZl9wcmltYXJ5OworCQlsdmRzLT5zZWNvbmRhcnkg PSAmbHZkc19waHlfMTZmZl9zZWNvbmRhcnk7CisJCWJyZWFrOworCWNhc2UgLUVJTlZBTDoKKwkJ LyoKKwkJICogZHJtX29mX2x2ZHNfZ2V0X2R1YWxfcGl4ZWxfb3JkZXIgcmV0dXJucyA0IHBvc3Np YmxlIHZhbHVlcy4KKwkJICogSW4gdGhlIGNhc2Ugd2hlcmUgdGhlIHJldHVybmVkIHZhbHVlIGlz IGFuIGVycm9yLCBpdCBjYW4gYmUKKwkJICogZWl0aGVyIEVOT0RFViBvciBFSU5WQUwuIFNlZWlu ZyB0aGUgc3RydWN0dXJlIG9mIHRoaXMKKwkJICogZnVuY3Rpb24sIEVJTlZBTCBtZWFucyB0aGF0 IGVpdGhlciBwb3J0MSBvciBwb3J0MiBpcyBub3QKKwkJICogcHJlc2VudCBpbiB0aGUgZGV2aWNl IHRyZWUuCisJCSAqIEluIHRoYXQgY2FzZSwgdGhlIGx2ZHMgcGFuZWwgY2FuIGJlIGEgc2luZ2xl IGxpbmsgcGFuZWwsIG9yCisJCSAqIHRoZXJlIGlzIGEgc2VtYW50aWNhbCBlcnJvciBpbiB0aGUg ZGV2aWNlIHRyZWUgY29kZS4KKwkJICovCisJCXJlbW90ZSA9IG9mX2dldF9uZXh0X2F2YWlsYWJs ZV9jaGlsZChwb3J0MSwgTlVMTCk7CisJCWlmIChyZW1vdGUpIHsKKwkJCWlmIChvZl9ncmFwaF9n ZXRfcmVtb3RlX2VuZHBvaW50KHJlbW90ZSkpIHsKKwkJCQlsdmRzLT5saW5rX3R5cGUgPSBMVkRT X1NJTkdMRV9MSU5LX1BSSU1BUlk7CisJCQkJbHZkcy0+cHJpbWFyeSA9ICZsdmRzX3BoeV8xNmZm X3ByaW1hcnk7CisJCQkJbHZkcy0+c2Vjb25kYXJ5ID0gTlVMTDsKKwkJCX0gZWxzZSB7CisJCQkJ cmV0ID0gLUVJTlZBTDsKKwkJCX0KKworCQkJb2Zfbm9kZV9wdXQocmVtb3RlKTsKKwkJfQorCisJ CXJlbW90ZSA9IG9mX2dldF9uZXh0X2F2YWlsYWJsZV9jaGlsZChwb3J0MiwgTlVMTCk7CisJCWlm IChyZW1vdGUpIHsKKwkJCWlmIChvZl9ncmFwaF9nZXRfcmVtb3RlX2VuZHBvaW50KHJlbW90ZSkp IHsKKwkJCQlsdmRzLT5saW5rX3R5cGUgPSBMVkRTX1NJTkdMRV9MSU5LX1NFQ09OREFSWTsKKwkJ CQlsdmRzLT5wcmltYXJ5ID0gTlVMTDsKKwkJCQlsdmRzLT5zZWNvbmRhcnkgPSAmbHZkc19waHlf MTZmZl9zZWNvbmRhcnk7CisJCQl9IGVsc2UgeworCQkJCXJldCA9IChyZXQgPT0gLUVJTlZBTCkg PyAtRUlOVkFMIDogMDsKKwkJCX0KKworCQkJb2Zfbm9kZV9wdXQocmVtb3RlKTsKKwkJfQorCQli cmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycl9sdmRzX3Byb2Jl OworCX0KKwlvZl9ub2RlX3B1dChwb3J0MSk7CisJb2Zfbm9kZV9wdXQocG9ydDIpOworCisJbHZk cy0+cGxscmVmX2NsayA9IGRldm1fY2xrX2dldChkZXYsICJyZWYiKTsKKwlpZiAoSVNfRVJSKGx2 ZHMtPnBsbHJlZl9jbGspKSB7CisJCXJldCA9IFBUUl9FUlIobHZkcy0+cGxscmVmX2Nsayk7CisJ CWRldl9lcnIoZGV2LCAiVW5hYmxlIHRvIGdldCByZWZlcmVuY2UgY2xvY2s6ICVkXG4iLCByZXQp OworCQlnb3RvIGVycl9sdmRzX3Byb2JlOworCX0KKworCXJldCA9IGx2ZHNfcGl4ZWxfY2xrX3Jl Z2lzdGVyKGx2ZHMpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVn aXN0ZXIgTFZEUyBwaXhlbCBjbG9jazogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2x2ZHNfcHJv YmU7CisJfQorCisJbHZkcy0+bHZkc19icmlkZ2UuZnVuY3MgPSAmbHZkc19icmlkZ2VfZnVuY3M7 CisJbHZkcy0+bHZkc19icmlkZ2Uub2Zfbm9kZSA9IGRldi0+b2Zfbm9kZTsKKwlsdmRzLT5od192 ZXJzaW9uID0gbHZkc19yZWFkKGx2ZHMsIExWRFNfVkVSUik7CisKKwlkZXZfaW5mbyhkZXYsICJ2 ZXJzaW9uIDB4JTAyeCBpbml0aWFsaXplZFxuIiwgbHZkcy0+aHdfdmVyc2lvbik7CisKKwlkcm1f YnJpZGdlX2FkZCgmbHZkcy0+bHZkc19icmlkZ2UpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEo cGRldiwgbHZkcyk7CisKKwljbGtfZGlzYWJsZV91bnByZXBhcmUobHZkcy0+cGNsayk7CisKKwly ZXR1cm4gMDsKKworZXJyX2x2ZHNfcHJvYmU6CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGx2ZHMt PnBjbGspOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBsdmRzX3JlbW92ZShzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzdG1fbHZkcyAqbHZkcyA9IHBs YXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJbHZkc19waXhlbF9jbGtfdW5yZWdpc3Rlcihs dmRzKTsKKworCWRybV9icmlkZ2VfcmVtb3ZlKCZsdmRzLT5sdmRzX2JyaWRnZSk7CisKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbHZkc19kdF9pZHNb XSA9IHsKKwl7CisJCS5jb21wYXRpYmxlID0gInN0LHN0bTMyLWx2ZHMiLAorCQkuZGF0YSA9IE5V TEwKKwl9LAorCXsgLyogc2VudGluZWwgKi8gfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShv ZiwgbHZkc19kdF9pZHMpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBsdmRzX3Bs YXRmb3JtX2RyaXZlciA9IHsKKwkucHJvYmUgPSBsdmRzX3Byb2JlLAorCS5yZW1vdmUgPSBsdmRz X3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJzdG0zMi1kaXNwbGF5LWx2ZHMiLAor CQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLm9mX21hdGNoX3RhYmxlID0gbHZkc19kdF9pZHMs CisJfSwKK307CisKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIobHZkc19wbGF0Zm9ybV9kcml2ZXIp OworCitNT0RVTEVfQVVUSE9SKCJSYXBoYcOrbCBHYWxsYWlzLVBvdSA8cmFwaGFlbC5nYWxsYWlz LXBvdUBmb3NzLnN0LmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIlBoaWxpcHBlIENvcm51IDxwaGls aXBwZS5jb3JudUBmb3NzLnN0LmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIllhbm5pY2sgRmVydHJl IDx5YW5uaWNrLmZlcnRyZUBmb3NzLnN0LmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiU1RN aWNyb2VsZWN0cm9uaWNzIExWRFMgRGlzcGxheSBJbnRlcmZhY2UgVHJhbnNtaXR0ZXIgRFJNIGRy aXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwoKLS0gCjIuMjUuMQoKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFp bGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlz dHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK