From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.8 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0FF74C433FF for ; Fri, 9 Aug 2019 16:25:35 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id ADC1520C01 for ; Fri, 9 Aug 2019 16:25:34 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="Gi1YmMyu" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org ADC1520C01 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=sigxcpu.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Cc:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=k/YzcOug5WXC6q1PZTFzypUGKfT4GEpM+Pt3sWETSz4=; b=Gi1YmMyuxqE4np 95JwgsX5t+epG2CY66uaG7TlRlGV+213Yv0elb20iTXZAQ6bTCZbbSpJV3gWCtIl/nU+AuxBlEJVJ d+38sLvk3PTbJMuCAZgzg+07eG9WBHQm7uwf5jziYCeQxJSY13pIjFkQaJ2zp13zX21pZOWcD0mmt lXOXBOhjGmyws6prBPYkRW5FJfWj2FdvLzmw9vzn9Cf59PHXzN4DhQfw4ybVDramDjQweZnXaPzQY a12cOcDOx+3KxKYTNOnAUdPlGxl+/BZi3AmpBEagun9y99QDQCUIOkZ1b5Foo8nWyXyRAsE1MZ3GP kkFGFA4kMzD0GzLN8rvw==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92 #3 (Red Hat Linux)) id 1hw7hl-0008Li-VG; Fri, 09 Aug 2019 16:25:26 +0000 Received: from honk.sigxcpu.org ([24.134.29.49]) by bombadil.infradead.org with esmtps (Exim 4.92 #3 (Red Hat Linux)) id 1hw7gx-0006Qu-1d for linux-arm-kernel@lists.infradead.org; Fri, 09 Aug 2019 16:24:39 +0000 Received: from localhost (localhost [127.0.0.1]) by honk.sigxcpu.org (Postfix) with ESMTP id 45ABBFB07; Fri, 9 Aug 2019 18:24:33 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at honk.sigxcpu.org Received: from honk.sigxcpu.org ([127.0.0.1]) by localhost (honk.sigxcpu.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id vQSvo3y51yAa; Fri, 9 Aug 2019 18:24:27 +0200 (CEST) Received: by bogon.sigxcpu.org (Postfix, from userid 1000) id C686C41E06; Fri, 9 Aug 2019 18:24:23 +0200 (CEST) From: =?UTF-8?q?Guido=20G=C3=BCnther?= To: David Airlie , Daniel Vetter , Rob Herring , Mark Rutland , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , NXP Linux Team , Andrzej Hajda , Neil Armstrong , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Lee Jones , =?UTF-8?q?Guido=20G=C3=BCnther?= , dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Robert Chiras , Sam Ravnborg Subject: [PATCH v2 3/3] drm/bridge: Add NWL MIPI DSI host controller support Date: Fri, 9 Aug 2019 18:24:23 +0200 Message-Id: <42b0f14d3b58fa2f116a34d052828d1befa25de9.1565367567.git.agx@sigxcpu.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: References: MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190809_092435_683273_5DB91F1B X-CRM114-Status: GOOD ( 22.70 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org VGhpcyBhZGRzIGluaXRpYWwgc3VwcG9ydCBmb3IgdGhlIE5XTCBNSVBJIERTSSBIb3N0IGNvbnRy b2xsZXIgZm91bmQgb24KaS5NWDggU29Dcy4KCkl0IGFkZHMgc3VwcG9ydCBmb3IgdGhlIGkuTVg4 TVEgYnV0IHRoZSBzYW1lIElQIGNhbiBiZSBmb3VuZCBvbgplLmcuIHRoZSBpLk1YOFFYUC4KCkl0 IGhhcyBiZWVuIHRlc3RlZCBvbiB0aGUgTGlicmVtIDUgZGV2a2l0IHVzaW5nIG14c2ZiLgoKU2ln bmVkLW9mZi1ieTogR3VpZG8gR8O8bnRoZXIgPGFneEBzaWd4Y3B1Lm9yZz4KQ28tZGV2ZWxvcGVk LWJ5OiBSb2JlcnQgQ2hpcmFzIDxyb2JlcnQuY2hpcmFzQG54cC5jb20+Ci0tLQogZHJpdmVycy9n cHUvZHJtL2JyaWRnZS9LY29uZmlnICAgICAgICAgICB8ICAgMiArCiBkcml2ZXJzL2dwdS9kcm0v YnJpZGdlL01ha2VmaWxlICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2Uv bndsLWRzaS9LY29uZmlnICAgfCAgMTUgKwogZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9ud2wtZHNp L01ha2VmaWxlICB8ICAgNCArCiBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL253bC1kc2kvbndsLWRy di5jIHwgNDg0ICsrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbndsLWRz aS9ud2wtZHJ2LmggfCAgNjYgKysrCiBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL253bC1kc2kvbnds LWRzaS5jIHwgNzAwICsrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vYnJp ZGdlL253bC1kc2kvbndsLWRzaS5oIHwgMTEyICsrKysKIDggZmlsZXMgY2hhbmdlZCwgMTM4NCBp bnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9u d2wtZHNpL0tjb25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYnJpZGdl L253bC1kc2kvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYnJp ZGdlL253bC1kc2kvbndsLWRydi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt L2JyaWRnZS9ud2wtZHNpL253bC1kcnYuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS9icmlkZ2UvbndsLWRzaS9ud2wtZHNpLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0vYnJpZGdlL253bC1kc2kvbndsLWRzaS5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2JyaWRnZS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9LY29uZmlnCmlu ZGV4IDFjYzlmNTAyYzFmMi4uNzk4MGI1YzIxNTZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vYnJpZGdlL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9LY29uZmlnCkBA IC0xNTQsNiArMTU0LDggQEAgc291cmNlICJkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2FuYWxvZ2l4 L0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hZHY3NTExL0tjb25m aWciCiAKK3NvdXJjZSAiZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9ud2wtZHNpL0tjb25maWciCisK IHNvdXJjZSAiZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9zeW5vcHN5cy9LY29uZmlnIgogCiBlbmRt ZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlIGIvZHJpdmVy cy9ncHUvZHJtL2JyaWRnZS9NYWtlZmlsZQppbmRleCA0OTM0ZmNmNWE2ZjguLmQ5ZjZjMGY3NzU5 MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmlsZQorKysgYi9kcml2 ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlCkBAIC0xNiw0ICsxNiw1IEBAIG9iai0kKENPTkZJ R19EUk1fQU5BTE9HSVhfRFApICs9IGFuYWxvZ2l4Lwogb2JqLSQoQ09ORklHX0RSTV9JMkNfQURW NzUxMSkgKz0gYWR2NzUxMS8KIG9iai0kKENPTkZJR19EUk1fVElfU042NURTSTg2KSArPSB0aS1z bjY1ZHNpODYubwogb2JqLSQoQ09ORklHX0RSTV9USV9URlA0MTApICs9IHRpLXRmcDQxMC5vCitv YmotJChDT05GSUdfRFJNX05XTF9NSVBJX0RTSSkgKz0gbndsLWRzaS8KIG9iai15ICs9IHN5bm9w c3lzLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9ud2wtZHNpL0tjb25maWcg Yi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL253bC1kc2kvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjI3ZWM4NmMwNTQwMQotLS0gL2Rldi9udWxsCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbndsLWRzaS9LY29uZmlnCkBAIC0wLDAgKzEsMTUgQEAK K2NvbmZpZyBEUk1fTldMX01JUElfRFNJCisJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIE5vcnRod2Vz dCBMb2dpYyBNSVBJIERTSSBIb3N0IGNvbnRyb2xsZXIiCisJZGVwZW5kcyBvbiBEUk0KKwlkZXBl bmRzIG9uIENPTU1PTl9DTEsKKwlkZXBlbmRzIG9uIE9GICYmIEhBU19JT01FTQorCXNlbGVjdCBE Uk1fS01TX0hFTFBFUgorCXNlbGVjdCBEUk1fTUlQSV9EU0kKKwlzZWxlY3QgRFJNX1BBTkVMX0JS SURHRQorCXNlbGVjdCBHRU5FUklDX1BIWV9NSVBJX0RQSFkKKwlzZWxlY3QgTUZEX1NZU0NPTgor CXNlbGVjdCBSRUdNQVBfTU1JTworCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyB0aGUgTm9ydGh3ZXN0 IExvZ2ljIE1JUEkgRFNJIEhvc3QgY29udHJvbGxlciBhcworCSAgZm9yIGV4YW1wbGUgZm91bmQg b24gTlhQJ3MgaS5NWDggUHJvY2Vzc29ycy4KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2JyaWRnZS9ud2wtZHNpL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9ud2wtZHNp L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uODA0YmFm MmYxOTE2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9ud2wtZHNp L01ha2VmaWxlCkBAIC0wLDAgKzEsNCBAQAorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMAorbndsLW1pcGktZHNpLXkgOj0gbndsLWRydi5vIG53bC1kc2kubworb2JqLSQoQ09ORklH X0RSTV9OV0xfTUlQSV9EU0kpICs9IG53bC1taXBpLWRzaS5vCitoZWFkZXItdGVzdC15ICs9IG53 bC1kcnYuaCBud2wtZHNpLmgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvbnds LWRzaS9ud2wtZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL253bC1kc2kvbndsLWRydi5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMGJkM2E0MTg0ODg1Ci0t LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9ud2wtZHNpL253bC1kcnYu YwpAQCAtMCwwICsxLDQ4NCBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAr CisvKgorICogaS5NWDggTldMIE1JUEkgRFNJIGhvc3QgZHJpdmVyCisgKgorICogQ29weXJpZ2h0 IChDKSAyMDE3IE5YUAorICogQ29weXJpZ2h0IChDKSAyMDE5IFB1cmlzbSBTUEMKKyAqLworCisj aW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8 bGludXgvbWZkL3N5c2Nvbi5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9zeXNjb24vaW14OG1xLWlv bXV4Yy1ncHIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9v Zi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvcGh5 L3BoeS5oPgorI2luY2x1ZGUgPGxpbnV4L3Jlc2V0Lmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFw Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzX3NvYy5oPgorCisjaW5jbHVkZSA8ZHJtL2RybV9hdG9t aWNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9vZi5oPgorI2luY2x1ZGUgPGRybS9kcm1f cHJpbnQuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3Byb2JlX2hlbHBlci5oPgorCisjaW5jbHVkZSAi bndsLWRydi5oIgorI2luY2x1ZGUgIm53bC1kc2kuaCIKKworI2RlZmluZSBEUlZfTkFNRSAibnds LWRzaSIKKworLyogUG9zc2libGUgcGxhdGZvcm0gc3BlY2lmaWMgY2xvY2tzICovCisjZGVmaW5l IE5XTF9EU0lfQ0xLX0NPUkUJImNvcmUiCisKK2VudW0gbndsX2RzaV9leHRfcmVncyB7CisJTldM X0RTSV9JTVhfUkVHX0dQUiA9IEJJVCgxKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVn bWFwX2NvbmZpZyBud2xfZHNpX3JlZ21hcF9jb25maWcgPSB7CisJLnJlZ19iaXRzID0gMTYsCisJ LnZhbF9iaXRzID0gMzIsCisJLnJlZ19zdHJpZGUgPSA0LAorCS5tYXhfcmVnaXN0ZXIgPSBOV0xf RFNJX0lSUV9NQVNLMiwKKwkubmFtZSA9IERSVl9OQU1FLAorfTsKKworc3RydWN0IG53bF9kc2lf cGxhdGZvcm1fZGF0YSB7CisJaW50ICgqcG93ZXJvbikoc3RydWN0IG53bF9kc2kgKmRzaSk7CisJ aW50ICgqcG93ZXJvZmYpKHN0cnVjdCBud2xfZHNpICpkc2kpOworCXZvaWQgKCpwcm9iZSkoc3Ry dWN0IG53bF9kc2kgKmRzaSk7CisJdm9pZCAoKnNlbGVjdF9pbnB1dCkoc3RydWN0IG53bF9kc2kg KmRzaSk7CisJdTMyIGV4dF9yZWdzOyAvKiByZXF1aXJlZCBleHRlcm5hbCByZWdpc3RlcnMgKi8K KwlzdHJ1Y3QgbndsX2RzaV9wbGF0X2Nsa19jb25maWcgY2xrX2NvbmZpZ1tOV0xfRFNJX01BWF9Q TEFURk9STV9DTE9DS1NdOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbndsX2RzaSAqYnJp ZGdlX3RvX2RzaShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQoreworCXJldHVybiBjb250YWlu ZXJfb2YoYnJpZGdlLCBzdHJ1Y3QgbndsX2RzaSwgYnJpZGdlKTsKK30KKworc3RhdGljIGludCBu d2xfZHNpX3NldF9wbGF0Zm9ybV9jbG9ja3Moc3RydWN0IG53bF9kc2kgKmRzaSwgYm9vbCBlbmFi bGUpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gZHNpLT5kZXY7CisJY29uc3QgY2hhciAqaWQ7 CisJc3RydWN0IGNsayAqY2xrOworCXNpemVfdCBpOworCXVuc2lnbmVkIGxvbmcgcmF0ZTsKKwlp bnQgcmV0LCByZXN1bHQgPSAwOworCisJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiJXMgcGxh dGZvcm0gY2xvY2tzXG4iLAorCQkJICAgICBlbmFibGUgPyAiZW5hYmxpbmciIDogImRpc2FibGlu ZyIpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRzaS0+cGRhdGEtPmNsa19jb25maWcp OyBpKyspIHsKKwkJaWYgKCFkc2ktPmNsa19jb25maWdbaV0ucHJlc2VudCkKKwkJCWNvbnRpbnVl OworCQlpZCA9IGRzaS0+Y2xrX2NvbmZpZ1tpXS5pZDsKKwkJY2xrID0gZHNpLT5jbGtfY29uZmln W2ldLmNsazsKKworCQlpZiAoZW5hYmxlKSB7CisJCQlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUo Y2xrKTsKKwkJCWlmIChyZXQgPCAwKSB7CisJCQkJRFJNX0RFVl9FUlJPUihkZXYsCisJCQkJCSAg ICAgICJGYWlsZWQgdG8gZW5hYmxlICVzIGNsazogJWRcbiIsCisJCQkJCSAgICAgIGlkLCByZXQp OworCQkJCXJlc3VsdCA9IHJlc3VsdCA/OiByZXQ7CisJCQl9CisJCQlyYXRlID0gY2xrX2dldF9y YXRlKGNsayk7CisJCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJFbmFibGVkICVzIGNsayBA JWx1IEh6XG4iLAorCQkJCQkgICAgIGlkLCByYXRlKTsKKwkJfSBlbHNlIHsKKwkJCWNsa19kaXNh YmxlX3VucHJlcGFyZShjbGspOworCQkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiRGlzYWJs ZWQgJXMgY2xrXG4iLCBpZCk7CisJCX0KKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0 aWMgaW50IG53bF9kc2lfcGxhdF9lbmFibGUoc3RydWN0IG53bF9kc2kgKmRzaSkKK3sKKwlzdHJ1 Y3QgZGV2aWNlICpkZXYgPSBkc2ktPmRldjsKKwlpbnQgcmV0OworCisJcmV0ID0gbndsX2RzaV9z ZXRfcGxhdGZvcm1fY2xvY2tzKGRzaSwgdHJ1ZSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiBy ZXQ7CisKKwlyZXQgPSBkc2ktPnBkYXRhLT5wb3dlcm9uKGRzaSk7CisJaWYgKHJldCA8IDApCisJ CURSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIHBvd2VyIG9uIERTSTogJWRcbiIsIHJldCk7 CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbndsX2RzaV9wbGF0X2Rpc2FibGUoc3Ry dWN0IG53bF9kc2kgKmRzaSkKK3sKKwlkc2ktPnBkYXRhLT5wb3dlcm9mZihkc2kpOworCW53bF9k c2lfc2V0X3BsYXRmb3JtX2Nsb2Nrcyhkc2ksIGZhbHNlKTsKK30KKworc3RhdGljIHZvaWQgbnds X2RzaV9icmlkZ2VfZGlzYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQoreworCXN0cnVj dCBud2xfZHNpICpkc2kgPSBicmlkZ2VfdG9fZHNpKGJyaWRnZSk7CisKKwlud2xfZHNpX2Rpc2Fi bGUoZHNpKTsKKwlud2xfZHNpX3BsYXRfZGlzYWJsZShkc2kpOworCXBtX3J1bnRpbWVfcHV0KGRz aS0+ZGV2KTsKK30KKworc3RhdGljIGludCBud2xfZHNpX2dldF9kcGh5X3BhcmFtcyhzdHJ1Y3Qg bndsX2RzaSAqZHNpLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2Rl LAorCQkJCSAgIHVuaW9uIHBoeV9jb25maWd1cmVfb3B0cyAqcGh5X29wdHMpCit7CisJdW5zaWdu ZWQgbG9uZyByYXRlOworCWludCByZXQ7CisKKwlpZiAoZHNpLT5sYW5lcyA8IDEgfHwgZHNpLT5s YW5lcyA+IDQpCisJCXJldHVybiAtRUlOVkFMOworCisJLyoKKwkgKiBTbyBmYXIgdGhlIERQSFkg c3BlYyBtaW5pbWFsIHRpbWluZ3Mgd29yayBmb3IgYm90aCBtaXhlbAorCSAqIGRwaHkgYW5kIG53 bCBkc2kgaG9zdAorCSAqLworCXJldCA9IHBoeV9taXBpX2RwaHlfZ2V0X2RlZmF1bHRfY29uZmln KAorCQltb2RlLT5jcnRjX2Nsb2NrICogMTAwMCwKKwkJbWlwaV9kc2lfcGl4ZWxfZm9ybWF0X3Rv X2JwcChkc2ktPmZvcm1hdCksIGRzaS0+bGFuZXMsCisJCSZwaHlfb3B0cy0+bWlwaV9kcGh5KTsK KwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJhdGUgPSBjbGtfZ2V0X3JhdGUoZHNp LT50eF9lc2NfY2xrKTsKKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkc2ktPmRldiwgIkxQIGNsayBp cyBAJWx1IEh6XG4iLCByYXRlKTsKKwlwaHlfb3B0cy0+bWlwaV9kcGh5LmxwX2Nsa19yYXRlID0g cmF0ZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgYm9vbCBud2xfZHNpX2JyaWRnZV9tb2Rl X2ZpeHVwKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCisJCQkJICAgICAgY29uc3Qgc3RydWN0 IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkJICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21v ZGUgKmFkanVzdGVkX21vZGUpCit7CisJLyogQXQgbGVhc3QgTENESUYgKyBOV0wgbmVlZHMgYWN0 aXZlIGhpZ2ggc3luYyAqLworCWFkanVzdGVkX21vZGUtPmZsYWdzIHw9IChEUk1fTU9ERV9GTEFH X1BIU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKTsKKwlhZGp1c3RlZF9tb2RlLT5mbGFncyAm PSB+KERSTV9NT0RFX0ZMQUdfTkhTWU5DIHwgRFJNX01PREVfRkxBR19OVlNZTkMpOworCisJcmV0 dXJuIHRydWU7Cit9CisKK3N0YXRpYyBlbnVtIGRybV9tb2RlX3N0YXR1cworbndsX2RzaV9icmlk Z2VfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAorCQkJICBjb25zdCBzdHJ1 Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwlzdHJ1Y3QgbndsX2RzaSAqZHNpID0gYnJp ZGdlX3RvX2RzaShicmlkZ2UpOworCWludCBicHAgPSBtaXBpX2RzaV9waXhlbF9mb3JtYXRfdG9f YnBwKGRzaS0+Zm9ybWF0KTsKKworCWlmIChtb2RlLT5jbG9jayAqIGJwcCA+IDE1MDAwMDAwKQor CQlyZXR1cm4gTU9ERV9DTE9DS19ISUdIOworCisJaWYgKG1vZGUtPmNsb2NrICogYnBwIDwgODAw MDApCisJCXJldHVybiBNT0RFX0NMT0NLX0xPVzsKKworCXJldHVybiBNT0RFX09LOworfQorCitz dGF0aWMgdm9pZAorbndsX2RzaV9icmlkZ2VfbW9kZV9zZXQoc3RydWN0IGRybV9icmlkZ2UgKmJy aWRnZSwKKwkJCWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJY29uc3Qg c3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUpCit7CisJc3RydWN0IG53bF9k c2kgKmRzaSA9IGJyaWRnZV90b19kc2koYnJpZGdlKTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBk c2ktPmRldjsKKwl1bmlvbiBwaHlfY29uZmlndXJlX29wdHMgbmV3X2NmZzsKKwl1bnNpZ25lZCBs b25nIHBoeV9yZWZfcmF0ZTsKKwlpbnQgcmV0OworCisJcmV0ID0gbndsX2RzaV9nZXRfZHBoeV9w YXJhbXMoZHNpLCBhZGp1c3RlZF9tb2RlLCAmbmV3X2NmZyk7CisJaWYgKHJldCA8IDApCisJCXJl dHVybjsKKworCS8qCisJICogSWYgaHMgY2xvY2sgaXMgdW5jaGFuZ2VkLCB3ZSdyZSBhbGwgZ29v ZCAtIGFsbCBwYXJhbWV0ZXJzIGFyZQorCSAqIGRlcml2ZWQgZnJvbSBpdCBhdG0uCisJICovCisJ aWYgKG5ld19jZmcubWlwaV9kcGh5LmhzX2Nsa19yYXRlID09IGRzaS0+cGh5X2NmZy5taXBpX2Rw aHkuaHNfY2xrX3JhdGUpCisJCXJldHVybjsKKworCXBoeV9yZWZfcmF0ZSA9IGNsa19nZXRfcmF0 ZShkc2ktPnBoeV9yZWZfY2xrKTsKKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJQSFkgYXQg cmVmIHJhdGU6ICVsdVxuIiwgcGh5X3JlZl9yYXRlKTsKKwkvKiBTYXZlIHRoZSBuZXcgZGVzaXJl ZCBwaHkgY29uZmlnICovCisJbWVtY3B5KCZkc2ktPnBoeV9jZmcsICZuZXdfY2ZnLCBzaXplb2Yo bmV3X2NmZykpOworCisJbWVtY3B5KCZkc2ktPm1vZGUsIGFkanVzdGVkX21vZGUsIHNpemVvZihk c2ktPm1vZGUpKTsKKwlkcm1fbW9kZV9kZWJ1Z19wcmludG1vZGVsaW5lKGFkanVzdGVkX21vZGUp OworfQorCitzdGF0aWMgdm9pZCBud2xfZHNpX2JyaWRnZV9wcmVfZW5hYmxlKHN0cnVjdCBkcm1f YnJpZGdlICpicmlkZ2UpCit7CisJc3RydWN0IG53bF9kc2kgKmRzaSA9IGJyaWRnZV90b19kc2ko YnJpZGdlKTsKKworCWRzaS0+cGRhdGEtPnNlbGVjdF9pbnB1dChkc2kpOworCXBtX3J1bnRpbWVf Z2V0X3N5bmMoZHNpLT5kZXYpOworCW53bF9kc2lfcGxhdF9lbmFibGUoZHNpKTsKKwlud2xfZHNp X2VuYWJsZShkc2kpOworfQorCitzdGF0aWMgaW50IG53bF9kc2lfYnJpZGdlX2F0dGFjaChzdHJ1 Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQoreworCXN0cnVjdCBud2xfZHNpICpkc2kgPSBicmlkZ2Ut PmRyaXZlcl9wcml2YXRlOworCisJcmV0dXJuIGRybV9icmlkZ2VfYXR0YWNoKGJyaWRnZS0+ZW5j b2RlciwgZHNpLT5wYW5lbF9icmlkZ2UsIGJyaWRnZSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgZHJtX2JyaWRnZV9mdW5jcyBud2xfZHNpX2JyaWRnZV9mdW5jcyA9IHsKKwkucHJlX2VuYWJs ZSA9IG53bF9kc2lfYnJpZGdlX3ByZV9lbmFibGUsCisJLmRpc2FibGUgICAgPSBud2xfZHNpX2Jy aWRnZV9kaXNhYmxlLAorCS5tb2RlX2ZpeHVwID0gbndsX2RzaV9icmlkZ2VfbW9kZV9maXh1cCwK KwkubW9kZV9zZXQgICA9IG53bF9kc2lfYnJpZGdlX21vZGVfc2V0LAorCS5tb2RlX3ZhbGlkID0g bndsX2RzaV9icmlkZ2VfbW9kZV92YWxpZCwKKwkuYXR0YWNoCSAgICA9IG53bF9kc2lfYnJpZGdl X2F0dGFjaCwKK307CisKK3N0YXRpYyBpbnQgbndsX2RzaV9wYXJzZV9kdChzdHJ1Y3QgbndsX2Rz aSAqZHNpKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBkc2ktPmRldi0+b2Zfbm9kZTsK KwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRzaS0+ ZGV2KTsKKwlzdHJ1Y3QgY2xrICpjbGs7CisJY29uc3QgY2hhciAqY2xrX2lkOworCXZvaWQgX19p b21lbSAqYmFzZTsKKwlpbnQgaSwgcmV0OworCisJZHNpLT5waHkgPSBkZXZtX3BoeV9nZXQoZHNp LT5kZXYsICJkcGh5Iik7CisJaWYgKElTX0VSUihkc2ktPnBoeSkpIHsKKwkJcmV0ID0gUFRSX0VS Uihkc2ktPnBoeSk7CisJCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJDb3VsZCBub3QgZ2V0IFBI WTogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogUGxhdGZvcm0gZGVwZW5k ZW50IGNsb2NrcyAqLworCW1lbWNweShkc2ktPmNsa19jb25maWcsIGRzaS0+cGRhdGEtPmNsa19j b25maWcsCisJICAgICAgIHNpemVvZihkc2ktPnBkYXRhLT5jbGtfY29uZmlnKSk7CisKKwlmb3Ig KGkgPSAwOyBpIDwgQVJSQVlfU0laRShkc2ktPnBkYXRhLT5jbGtfY29uZmlnKTsgaSsrKSB7CisJ CWlmICghZHNpLT5jbGtfY29uZmlnW2ldLnByZXNlbnQpCisJCQljb250aW51ZTsKKworCQljbGtf aWQgPSBkc2ktPmNsa19jb25maWdbaV0uaWQ7CisJCWNsayA9IGRldm1fY2xrX2dldChkc2ktPmRl diwgY2xrX2lkKTsKKwkJaWYgKElTX0VSUihjbGspKSB7CisJCQlyZXQgPSBQVFJfRVJSKGNsayk7 CisJCQlEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LCAiRmFpbGVkIHRvIGdldCAlcyBjbG9jazogJWRc biIsCisJCQkJICAgICAgY2xrX2lkLCByZXQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQlEUk1f REVWX0RFQlVHX0RSSVZFUihkc2ktPmRldiwgIlNldHVwIGNsayAlcyAocmF0ZTogJWx1KVxuIiwK KwkJCQkgICAgIGNsa19pZCwgY2xrX2dldF9yYXRlKGNsaykpOworCQlkc2ktPmNsa19jb25maWdb aV0uY2xrID0gY2xrOworCX0KKworCS8qIERTSSBjbG9ja3MgKi8KKwljbGsgPSBkZXZtX2Nsa19n ZXQoZHNpLT5kZXYsICJwaHlfcmVmIik7CisJaWYgKElTX0VSUihjbGspKSB7CisJCXJldCA9IFBU Ul9FUlIoY2xrKTsKKwkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwgIkZhaWxlZCB0byBnZXQgcGh5 X3JlZiBjbG9jazogJWRcbiIsCisJCQkgICAgICByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwlk c2ktPnBoeV9yZWZfY2xrID0gY2xrOworCisJY2xrID0gZGV2bV9jbGtfZ2V0KGRzaS0+ZGV2LCAi cnhfZXNjIik7CisJaWYgKElTX0VSUihjbGspKSB7CisJCXJldCA9IFBUUl9FUlIoY2xrKTsKKwkJ RFJNX0RFVl9FUlJPUihkc2ktPmRldiwgIkZhaWxlZCB0byBnZXQgcnhfZXNjIGNsb2NrOiAlZFxu IiwKKwkJCSAgICAgIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCWRzaS0+cnhfZXNjX2NsayA9 IGNsazsKKworCWNsayA9IGRldm1fY2xrX2dldChkc2ktPmRldiwgInR4X2VzYyIpOworCWlmIChJ U19FUlIoY2xrKSkgeworCQlyZXQgPSBQVFJfRVJSKGNsayk7CisJCURSTV9ERVZfRVJST1IoZHNp LT5kZXYsICJGYWlsZWQgdG8gZ2V0IHR4X2VzYyBjbG9jazogJWRcbiIsCisJCQkgICAgICByZXQp OworCQlyZXR1cm4gcmV0OworCX0KKwlkc2ktPnR4X2VzY19jbGsgPSBjbGs7CisKKwlkc2ktPm11 eF9zZWwgPSBzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxlKG5wLCAibXV4LXNlbCIpOwor CWlmIChJU19FUlIoZHNpLT5tdXhfc2VsKSAmJgorCSAgICAoZHNpLT5wZGF0YS0+ZXh0X3JlZ3Mg JiBOV0xfRFNJX0lNWF9SRUdfR1BSKSkgeworCQlyZXQgPSBQVFJfRVJSKGRzaS0+bXV4X3NlbCk7 CisJCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJGYWlsZWQgdG8gZ2V0IEdQUiByZWdtYXA6ICVk XG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWJhc2UgPSBkZXZtX3BsYXRmb3JtX2lv cmVtYXBfcmVzb3VyY2UocGRldiwgMCk7CisJaWYgKElTX0VSUihiYXNlKSkKKwkJcmV0dXJuIFBU Ul9FUlIoYmFzZSk7CisKKwlkc2ktPnJlZ21hcCA9CisJCWRldm1fcmVnbWFwX2luaXRfbW1pbyhk c2ktPmRldiwgYmFzZSwgJm53bF9kc2lfcmVnbWFwX2NvbmZpZyk7CisJaWYgKElTX0VSUihkc2kt PnJlZ21hcCkpIHsKKwkJcmV0ID0gUFRSX0VSUihkc2ktPnJlZ21hcCk7CisJCURSTV9ERVZfRVJS T1IoZHNpLT5kZXYsICJGYWlsZWQgdG8gY3JlYXRlIE5XTCBEU0kgcmVnbWFwOiAlZFxuIiwKKwkJ CSAgICAgIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJZHNpLT5pcnEgPSBwbGF0Zm9ybV9n ZXRfaXJxKHBkZXYsIDApOworCWlmIChkc2ktPmlycSA8IDApIHsKKwkJRFJNX0RFVl9FUlJPUihk c2ktPmRldiwgIkZhaWxlZCB0byBnZXQgZGV2aWNlIElSUTogJWRcbiIsCisJCQkgICAgICBkc2kt PmlycSk7CisJCXJldHVybiBkc2ktPmlycTsKKwl9CisKKwlkc2ktPnJzdGMgPSBkZXZtX3Jlc2V0 X2NvbnRyb2xfYXJyYXlfZ2V0KGRzaS0+ZGV2LCBmYWxzZSwgdHJ1ZSk7CisJaWYgKElTX0VSUihk c2ktPnJzdGMpKSB7CisJCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJGYWlsZWQgdG8gZ2V0IHJl c2V0czogJWxkXG4iLAorCQkJICAgICAgUFRSX0VSUihkc2ktPnJzdGMpKTsKKwkJcmV0dXJuIFBU Ul9FUlIoZHNpLT5yc3RjKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaW14 OG1xX2RzaV9zZWxlY3RfaW5wdXQoc3RydWN0IG53bF9kc2kgKmRzaSkKK3sKKwlzdHJ1Y3QgZGV2 aWNlX25vZGUgKnJlbW90ZTsKKwl1MzIgbXV4X3ZhbCA9IElNWDhNUV9HUFIxM19NSVBJX01VWF9T RUw7CisKKwlyZW1vdGUgPSBvZl9ncmFwaF9nZXRfcmVtb3RlX25vZGUoZHNpLT5kZXYtPm9mX25v ZGUsIDAsIDApOworCWlmIChzdHJjbXAocmVtb3RlLT5uYW1lLCAibGNkaWYiKSA9PSAwKQorCQlt dXhfdmFsID0gMDsKKworCURSTV9ERVZfSU5GTyhkc2ktPmRldiwgIlVzaW5nICVzIGFzIGlucHV0 IHNvdXJjZVxuIiwKKwkJICAgICAobXV4X3ZhbCkgPyAiRENTUyIgOiAiTENESUYiKTsKKwlyZWdt YXBfdXBkYXRlX2JpdHMoZHNpLT5tdXhfc2VsLCBJT01VWENfR1BSMTMsCisJCQkgICBJTVg4TVFf R1BSMTNfTUlQSV9NVVhfU0VMLCBtdXhfdmFsKTsKKwlvZl9ub2RlX3B1dChyZW1vdGUpOworfQor CitzdGF0aWMgaW50IGlteDhtcV9kc2lfcG93ZXJvbihzdHJ1Y3QgbndsX2RzaSAqZHNpKQorewor CWludCByZXQgPSAwOworCisJLyogb3RoZXJ3aXNlIHRoZSBkaXNwbGF5IHN0YXlzIGJsYW5rICov CisJdXNsZWVwX3JhbmdlKDIwMCwgMzAwKTsKKworCWlmIChkc2ktPnJzdGMpCisJCXJldCA9IHJl c2V0X2NvbnRyb2xfZGVhc3NlcnQoZHNpLT5yc3RjKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0 YXRpYyBpbnQgaW14OG1xX2RzaV9wb3dlcm9mZihzdHJ1Y3QgbndsX2RzaSAqZHNpKQoreworCWlu dCByZXQgPSAwOworCisJaWYgKGRzaS0+cXVpcmtzICYgU1JDX1JFU0VUX1FVSVJLKQorCQlyZXR1 cm4gMDsKKworCWlmIChkc2ktPnJzdGMpCisJCXJldCA9IHJlc2V0X2NvbnRyb2xfYXNzZXJ0KGRz aS0+cnN0Yyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fYnJp ZGdlX3RpbWluZ3MgbndsX2RzaV90aW1pbmdzID0geworCS5pbnB1dF9idXNfZmxhZ3MgPSBEUk1f QlVTX0ZMQUdfREVfTE9XLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBud2xfZHNpX3BsYXRm b3JtX2RhdGEgaW14OG1xX2RldiA9IHsKKwkucG93ZXJvbiA9ICZpbXg4bXFfZHNpX3Bvd2Vyb24s CisJLnBvd2Vyb2ZmID0gJmlteDhtcV9kc2lfcG93ZXJvZmYsCisJLnNlbGVjdF9pbnB1dCA9ICZp bXg4bXFfZHNpX3NlbGVjdF9pbnB1dCwKKwkuY2xrX2NvbmZpZyA9IHsKKwkJeyAuaWQgPSBOV0xf RFNJX0NMS19DT1JFLCAucHJlc2VudCA9IHRydWUgfSwKKwl9LAorCS5leHRfcmVncyA9IE5XTF9E U0lfSU1YX1JFR19HUFIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBu d2xfZHNpX2R0X2lkc1tdID0geworCXsgLmNvbXBhdGlibGUgPSAiZnNsLGlteDhtcS1ud2wtZHNp IiwgLmRhdGEgPSAmaW14OG1xX2RldiwgfSwKKwl7IC8qIHNlbnRpbmVsICovIH0KK307CitNT0RV TEVfREVWSUNFX1RBQkxFKG9mLCBud2xfZHNpX2R0X2lkcyk7CisKK3N0YXRpYyBjb25zdCBzdHJ1 Y3Qgc29jX2RldmljZV9hdHRyaWJ1dGUgbndsX2RzaV9xdWlya3NfbWF0Y2hbXSA9IHsKKwl7IC5z b2NfaWQgPSAiaS5NWDhNUSIsIC5yZXZpc2lvbiA9ICIyLjAiLAorCSAgLmRhdGEgPSAodm9pZCAq KShFMTE0MThfSFNfTU9ERV9RVUlSSyB8IFNSQ19SRVNFVF9RVUlSSykgfSwKKwl7IC8qIHNlbnRp bmVsLiAqLyB9LAorfTsKKworc3RhdGljIGludCBud2xfZHNpX3Byb2JlKHN0cnVjdCBwbGF0Zm9y bV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlj b25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICpvZl9pZCA9IG9mX21hdGNoX2RldmljZShud2xfZHNp X2R0X2lkcywgZGV2KTsKKwljb25zdCBzdHJ1Y3QgbndsX2RzaV9wbGF0Zm9ybV9kYXRhICpwZGF0 YSA9IG9mX2lkLT5kYXRhOworCWNvbnN0IHN0cnVjdCBzb2NfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0 cjsKKwlzdHJ1Y3QgbndsX2RzaSAqZHNpOworCWludCByZXQ7CisKKwlkc2kgPSBkZXZtX2t6YWxs b2MoZGV2LCBzaXplb2YoKmRzaSksIEdGUF9LRVJORUwpOworCWlmICghZHNpKQorCQlyZXR1cm4g LUVOT01FTTsKKworCWRzaS0+ZGV2ID0gZGV2OworCWRzaS0+cGRhdGEgPSBwZGF0YTsKKworCXJl dCA9IG53bF9kc2lfcGFyc2VfZHQoZHNpKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJ cmV0ID0gZGV2bV9yZXF1ZXN0X2lycShkZXYsIGRzaS0+aXJxLCBud2xfZHNpX2lycV9oYW5kbGVy LCAwLAorCQkJICAgICAgIGRldl9uYW1lKGRldiksIGRzaSk7CisJaWYgKHJldCA8IDApIHsKKwkJ RFJNX0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBJUlEgJWQ6ICVkXG4iLCBkc2kt PmlycSwKKwkJCSAgICAgIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJZHNpLT5kc2lfaG9z dC5vcHMgPSAmbndsX2RzaV9ob3N0X29wczsKKwlkc2ktPmRzaV9ob3N0LmRldiA9IGRldjsKKwly ZXQgPSBtaXBpX2RzaV9ob3N0X3JlZ2lzdGVyKCZkc2ktPmRzaV9ob3N0KTsKKwlpZiAocmV0KSB7 CisJCURSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIE1JUEkgaG9zdDogJWRc biIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJYXR0ciA9IHNvY19kZXZpY2VfbWF0Y2go bndsX2RzaV9xdWlya3NfbWF0Y2gpOworCWlmIChhdHRyKQorCQlkc2ktPnF1aXJrcyA9ICh1aW50 cHRyX3QpYXR0ci0+ZGF0YTsKKworCWRzaS0+YnJpZGdlLmRyaXZlcl9wcml2YXRlID0gZHNpOwor CWRzaS0+YnJpZGdlLmZ1bmNzID0gJm53bF9kc2lfYnJpZGdlX2Z1bmNzOworCWRzaS0+YnJpZGdl Lm9mX25vZGUgPSBkZXYtPm9mX25vZGU7CisJZHNpLT5icmlkZ2UudGltaW5ncyA9ICZud2xfZHNp X3RpbWluZ3M7CisKKwlkcm1fYnJpZGdlX2FkZCgmZHNpLT5icmlkZ2UpOworCisJZGV2X3NldF9k cnZkYXRhKGRldiwgZHNpKTsKKwlwbV9ydW50aW1lX2VuYWJsZShkZXYpOworCXJldHVybiAwOwor fQorCitzdGF0aWMgaW50IG53bF9kc2lfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXYpCit7CisJc3RydWN0IG53bF9kc2kgKmRzaSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYp OworCisJbWlwaV9kc2lfaG9zdF91bnJlZ2lzdGVyKCZkc2ktPmRzaV9ob3N0KTsKKwlwbV9ydW50 aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qg cGxhdGZvcm1fZHJpdmVyIG53bF9kc2lfZHJpdmVyID0geworCS5wcm9iZQkJPSBud2xfZHNpX3By b2JlLAorCS5yZW1vdmUJCT0gbndsX2RzaV9yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5vZl9t YXRjaF90YWJsZSA9IG53bF9kc2lfZHRfaWRzLAorCQkubmFtZQk9IERSVl9OQU1FLAorCX0sCit9 OworCittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKG53bF9kc2lfZHJpdmVyKTsKKworTU9EVUxFX0FV VEhPUigiTlhQIFNlbWljb25kdWN0b3IiKTsKK01PRFVMRV9BVVRIT1IoIlB1cmlzbSBTUEMiKTsK K01PRFVMRV9ERVNDUklQVElPTigiTm9ydGh3ZXN0IExvZ2ljIE1JUEktRFNJIGRyaXZlciIpOwor TU9EVUxFX0xJQ0VOU0UoIkdQTCIpOyAvKiBHUEx2MiBvciBsYXRlciAqLwpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9ud2wtZHNpL253bC1kcnYuaCBiL2RyaXZlcnMvZ3B1L2Ry bS9icmlkZ2UvbndsLWRzaS9ud2wtZHJ2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAwLi42NWZlZDI1ZmM5YjkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9k cm0vYnJpZGdlL253bC1kc2kvbndsLWRydi5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKyAqLworLyoKKyAqIE5XTCBNSVBJIERTSSBob3N0IGRy aXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBOWFAKKyAqIENvcHlyaWdodCAoQykgMjAx OSBQdXJpc20gU1BDCisgKi8KKworI2lmbmRlZiBfX05XTF9EUlZfSF9fCisjZGVmaW5lIF9fTldM X0RSVl9IX18KKworI2luY2x1ZGUgPGxpbnV4L3BoeS9waHkuaD4KKworI2luY2x1ZGUgPGRybS9k cm1fYnJpZGdlLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9taXBpX2RzaS5oPgorCitzdHJ1Y3Qgbnds X2RzaV9wbGF0Zm9ybV9kYXRhOworCisvKiBpLk1YOCBOV0wgcXVpcmtzICovCisvKiBpLk1YOE1R IGVycmF0YSBFMTE0MTggKi8KKyNkZWZpbmUgRTExNDE4X0hTX01PREVfUVVJUksJICAgIEJJVCgw KQorLyogU2tpcCBEU0kgYml0cyBpbiBTUkMgb24gZGlzYWJsZSB0byBhdm9pZCBibGFuayBkaXNw bGF5IG9uIGVuYWJsZSAqLworI2RlZmluZSBTUkNfUkVTRVRfUVVJUksJCSAgICBCSVQoMSkKKwor I2RlZmluZSBOV0xfRFNJX01BWF9QTEFURk9STV9DTE9DS1MgMQorc3RydWN0IG53bF9kc2lfcGxh dF9jbGtfY29uZmlnIHsKKwljb25zdCBjaGFyICppZDsKKwlzdHJ1Y3QgY2xrICpjbGs7CisJYm9v bCBwcmVzZW50OworfTsKKworc3RydWN0IG53bF9kc2kgeworCXN0cnVjdCBkcm1fYnJpZGdlIGJy aWRnZTsKKwlzdHJ1Y3QgbWlwaV9kc2lfaG9zdCBkc2lfaG9zdDsKKwlzdHJ1Y3QgZHJtX2JyaWRn ZSAqcGFuZWxfYnJpZGdlOworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgcGh5ICpwaHk7 CisJdW5pb24gcGh5X2NvbmZpZ3VyZV9vcHRzIHBoeV9jZmc7CisJdW5zaWduZWQgaW50IHF1aXJr czsKKworCXN0cnVjdCByZWdtYXAgKnJlZ21hcDsKKwlpbnQgaXJxOworCXN0cnVjdCByZXNldF9j b250cm9sICpyc3RjOworCisJLyogRXh0ZXJuYWwgcmVnaXN0ZXJzICovCisJc3RydWN0IHJlZ21h cCAqbXV4X3NlbDsKKworCS8qIERTSSBjbG9ja3MgKi8KKwlzdHJ1Y3QgY2xrICpwaHlfcmVmX2Ns azsKKwlzdHJ1Y3QgY2xrICpyeF9lc2NfY2xrOworCXN0cnVjdCBjbGsgKnR4X2VzY19jbGs7CisJ LyogUGxhdGZvcm0gZGVwZW5kZW50IGNsb2NrcyAqLworCXN0cnVjdCBud2xfZHNpX3BsYXRfY2xr X2NvbmZpZyBjbGtfY29uZmlnW05XTF9EU0lfTUFYX1BMQVRGT1JNX0NMT0NLU107CisKKwkvKiBk c2kgbGFuZXMgKi8KKwl1MzIgbGFuZXM7CisJZW51bSBtaXBpX2RzaV9waXhlbF9mb3JtYXQgZm9y bWF0OworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlIG1vZGU7CisJdW5zaWduZWQgbG9uZyBkc2lf bW9kZV9mbGFnczsKKworCXN0cnVjdCBud2xfZHNpX3RyYW5zZmVyICp4ZmVyOworCisJY29uc3Qg c3RydWN0IG53bF9kc2lfcGxhdGZvcm1fZGF0YSAqcGRhdGE7Cit9OworCisjZW5kaWYgLyogX19O V0xfRFJWX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9ud2wtZHNp L253bC1kc2kuYyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbndsLWRzaS9ud2wtZHNpLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5mZDAzMGFmNTViYjQKLS0tIC9k ZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL253bC1kc2kvbndsLWRzaS5jCkBA IC0wLDAgKzEsNzAwIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsKKy8q CisgKiBOV0wgTUlQSSBEU0kgaG9zdCBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg TlhQCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgUHVyaXNtIFNQQworICovCisKKyNpbmNsdWRlIDxs aW51eC9iaXRmaWVsZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4 L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWU2 NC5oPgorCisjaW5jbHVkZSA8dmlkZW8vbWlwaV9kaXNwbGF5Lmg+CisjaW5jbHVkZSA8dmlkZW8v dmlkZW9tb2RlLmg+CisKKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KKyNpbmNs dWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9vZi5oPgorI2lu Y2x1ZGUgPGRybS9kcm1fcGFuZWwuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3ByaW50Lmg+CisKKyNp bmNsdWRlICJud2wtZHJ2LmgiCisjaW5jbHVkZSAibndsLWRzaS5oIgorCisjZGVmaW5lIE5XTF9E U0lfTUlQSV9GSUZPX1RJTUVPVVQgbXNlY3NfdG9famlmZmllcyg1MDApCisKKy8qCisgKiBQS1Rf Q09OVFJPTCBmb3JtYXQ6CisgKiBbMTU6IDBdIC0gd29yZCBjb3VudAorICogWzE3OjE2XSAtIHZp cnR1YWwgY2hhbm5lbAorICogWzIzOjE4XSAtIGRhdGEgdHlwZQorICogWzI0XQkgICAtIExQIG9y IEhTIHNlbGVjdCAoMCAtIExQLCAxIC0gSFMpCisgKiBbMjVdCSAgIC0gcGVyZm9ybSBCVEEgYWZ0 ZXIgcGFja2V0IGlzIHNlbnQKKyAqIFsyNl0JICAgLSBwZXJmb3JtIEJUQSBvbmx5LCBubyBwYWNr ZXQgdHgKKyAqLworI2RlZmluZSBOV0xfRFNJX1dDKHgpCQlGSUVMRF9QUkVQKEdFTk1BU0soMTUs IDApLCAoeCkpCisjZGVmaW5lIE5XTF9EU0lfVFhfVkMoeCkJRklFTERfUFJFUChHRU5NQVNLKDE3 LCAxNiksICh4KSkKKyNkZWZpbmUgTldMX0RTSV9UWF9EVCh4KQlGSUVMRF9QUkVQKEdFTk1BU0so MjMsIDE4KSwgKHgpKQorI2RlZmluZSBOV0xfRFNJX0hTX1NFTCh4KQlGSUVMRF9QUkVQKEdFTk1B U0soMjQsIDI0KSwgKHgpKQorI2RlZmluZSBOV0xfRFNJX0JUQV9UWCh4KQlGSUVMRF9QUkVQKEdF Tk1BU0soMjUsIDI1KSwgKHgpKQorI2RlZmluZSBOV0xfRFNJX0JUQV9OT19UWCh4KQlGSUVMRF9Q UkVQKEdFTk1BU0soMjYsIDI2KSwgKHgpKQorCisvKgorICogUlhfUEtUX0hFQURFUiBmb3JtYXQ6 CisgKiBbMTU6IDBdIC0gd29yZCBjb3VudAorICogWzIxOjE2XSAtIGRhdGEgdHlwZQorICogWzIz OjIyXSAtIHZpcnR1YWwgY2hhbm5lbAorICovCisjZGVmaW5lIE5XTF9EU0lfUlhfRFQoeCkJRklF TERfR0VUKEdFTk1BU0soMjEsIDE2KSwgKHgpKQorI2RlZmluZSBOV0xfRFNJX1JYX1ZDKHgpCUZJ RUxEX0dFVChHRU5NQVNLKDIzLCAyMiksICh4KSkKKworLyogRFNJIFZpZGVvIG1vZGUgKi8KKyNk ZWZpbmUgTldMX0RTSV9WTV9CVVJTVF9NT0RFX1dJVEhfU1lOQ19QVUxTRVMJCTAKKyNkZWZpbmUg TldMX0RTSV9WTV9OT05fQlVSU1RfTU9ERV9XSVRIX1NZTkNfRVZFTlRTCUJJVCgwKQorI2RlZmlu ZSBOV0xfRFNJX1ZNX0JVUlNUX01PREUJCQkJQklUKDEpCisKKy8qICogRFBJIGNvbG9yIGNvZGlu ZyAqLworI2RlZmluZSBOV0xfRFNJX0RQSV8xNl9CSVRfNTY1X1BBQ0tFRAkwCisjZGVmaW5lIE5X TF9EU0lfRFBJXzE2X0JJVF81NjVfQUxJR05FRAkxCisjZGVmaW5lIE5XTF9EU0lfRFBJXzE2X0JJ VF81NjVfU0hJRlRFRAkyCisjZGVmaW5lIE5XTF9EU0lfRFBJXzE4X0JJVF9QQUNLRUQJMworI2Rl ZmluZSBOV0xfRFNJX0RQSV8xOF9CSVRfQUxJR05FRAk0CisjZGVmaW5lIE5XTF9EU0lfRFBJXzI0 X0JJVAkJNQorCisvKiAqIERQSSBQaXhlbCBmb3JtYXQgKi8KKyNkZWZpbmUgTldMX0RTSV9QSVhF TF9GT1JNQVRfMTYgIDAKKyNkZWZpbmUgTldMX0RTSV9QSVhFTF9GT1JNQVRfMTggIEJJVCgwKQor I2RlZmluZSBOV0xfRFNJX1BJWEVMX0ZPUk1BVF8xOEwgQklUKDEpCisjZGVmaW5lIE5XTF9EU0lf UElYRUxfRk9STUFUXzI0ICAoQklUKDApIHwgQklUKDEpKQorCitlbnVtIHRyYW5zZmVyX2RpcmVj dGlvbiB7CisJRFNJX1BBQ0tFVF9TRU5ELAorCURTSV9QQUNLRVRfUkVDRUlWRSwKK307CisKK3N0 cnVjdCBud2xfZHNpX3RyYW5zZmVyIHsKKwljb25zdCBzdHJ1Y3QgbWlwaV9kc2lfbXNnICptc2c7 CisJc3RydWN0IG1pcGlfZHNpX3BhY2tldCBwYWNrZXQ7CisJc3RydWN0IGNvbXBsZXRpb24gY29t cGxldGVkOworCisJaW50IHN0YXR1czsgLyogc3RhdHVzIG9mIHRyYW5zbWlzc2lvbiAqLworCWVu dW0gdHJhbnNmZXJfZGlyZWN0aW9uIGRpcmVjdGlvbjsKKwlib29sIG5lZWRfYnRhOworCXU4IGNt ZDsKKwl1MTYgcnhfd29yZF9jb3VudDsKKwlzaXplX3QgdHhfbGVuOyAvKiBpbiBieXRlcyAqLwor CXNpemVfdCByeF9sZW47IC8qIGluIGJ5dGVzICovCit9OworCitzdGF0aWMgaW50IG53bF9kc2lf d3JpdGUoc3RydWN0IG53bF9kc2kgKmRzaSwgdW5zaWduZWQgaW50IHJlZywgdTMyIHZhbCkKK3sK KwlpbnQgcmV0OworCisJcmV0ID0gcmVnbWFwX3dyaXRlKGRzaS0+cmVnbWFwLCByZWcsIHZhbCk7 CisJaWYgKHJldCA8IDApCisJCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsCisJCQkgICAgICAiRmFp bGVkIHRvIHdyaXRlIE5XTCBEU0kgcmVnIDB4JXg6ICVkXG4iLCByZWcsCisJCQkgICAgICByZXQp OworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB1MzIgbndsX2RzaV9yZWFkKHN0cnVjdCBud2xf ZHNpICpkc2ksIHUzMiByZWcpCit7CisJdW5zaWduZWQgaW50IHZhbDsKKwlpbnQgcmV0OworCisJ cmV0ID0gcmVnbWFwX3JlYWQoZHNpLT5yZWdtYXAsIHJlZywgJnZhbCk7CisJaWYgKHJldCA8IDAp CisJCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJGYWlsZWQgdG8gcmVhZCBOV0wgRFNJIHJlZyAw eCV4OiAlZFxuIiwKKwkJCSAgICAgIHJlZywgcmV0KTsKKworCXJldHVybiB2YWw7Cit9CisKK3N0 YXRpYyB1MzIgbndsX2RzaV9nZXRfZHBpX3BpeGVsX2Zvcm1hdChlbnVtIG1pcGlfZHNpX3BpeGVs X2Zvcm1hdCBmb3JtYXQpCit7CisJc3dpdGNoIChmb3JtYXQpIHsKKwljYXNlIE1JUElfRFNJX0ZN VF9SR0I1NjU6CisJCXJldHVybiBOV0xfRFNJX1BJWEVMX0ZPUk1BVF8xNjsKKwljYXNlIE1JUElf RFNJX0ZNVF9SR0I2NjY6CisJCXJldHVybiBOV0xfRFNJX1BJWEVMX0ZPUk1BVF8xOEw7CisJY2Fz ZSBNSVBJX0RTSV9GTVRfUkdCNjY2X1BBQ0tFRDoKKwkJcmV0dXJuIE5XTF9EU0lfUElYRUxfRk9S TUFUXzE4OworCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjg4ODoKKwkJcmV0dXJuIE5XTF9EU0lfUElY RUxfRk9STUFUXzI0OworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKworI2Rl ZmluZSBQU0VDX1BFUl9TRUMgMTAwMDAwMDAwMDAwMExMCisvKgorICogcHMyYmMgLSBQaWNvc2Vj b25kcyB0byBieXRlIGNsb2NrIGN5Y2xlcworICovCitzdGF0aWMgdTMyIHBzMmJjKHN0cnVjdCBu d2xfZHNpICpkc2ksIHVuc2lnbmVkIGxvbmcgbG9uZyBwcykKK3sKKwlpbnQgYnBwID0gbWlwaV9k c2lfcGl4ZWxfZm9ybWF0X3RvX2JwcChkc2ktPmZvcm1hdCk7CisKKwlyZXR1cm4gRElWX1JPVU5E X1VQKHBzICogZHNpLT5tb2RlLmNsb2NrICogMTAwMCAqIGJwcCwKKwkJCSAgICBkc2ktPmxhbmVz ICogOCAqIFBTRUNfUEVSX1NFQyk7Cit9CisKKy8qCisgKiB1aTJiYyAtIFVJIHRpbWUgcGVyaW9k cyB0byBieXRlIGNsb2NrIGN5Y2xlcworICovCitzdGF0aWMgdTMyIHVpMmJjKHN0cnVjdCBud2xf ZHNpICpkc2ksIHVuc2lnbmVkIGxvbmcgbG9uZyB1aSkKK3sKKwlpbnQgYnBwID0gbWlwaV9kc2lf cGl4ZWxfZm9ybWF0X3RvX2JwcChkc2ktPmZvcm1hdCk7CisKKwlyZXR1cm4gRElWX1JPVU5EX1VQ KHVpICogZHNpLT5sYW5lcywgZHNpLT5tb2RlLmNsb2NrICogMTAwMCAqIGJwcCk7Cit9CisKKy8q CisgKiB1czJiYyAtIG1pY3JvIHNlY29uZHMgdG8gbHAgY2xvY2sgY3ljbGVzCisgKi8KK3N0YXRp YyB1MzIgdXMybHAodTMyIGxwX2Nsa19yYXRlLCB1bnNpZ25lZCBsb25nIHVzKQoreworCXJldHVy biBESVZfUk9VTkRfVVAodXMgKiBscF9jbGtfcmF0ZSwgVVNFQ19QRVJfU0VDKTsKK30KKworc3Rh dGljIGludCBud2xfZHNpX2NvbmZpZ19ob3N0KHN0cnVjdCBud2xfZHNpICpkc2kpCit7CisJdTMy IGN5Y2xlczsKKwlzdHJ1Y3QgcGh5X2NvbmZpZ3VyZV9vcHRzX21pcGlfZHBoeSAqY2ZnID0gJmRz aS0+cGh5X2NmZy5taXBpX2RwaHk7CisKKwlpZiAoZHNpLT5sYW5lcyA8IDEgfHwgZHNpLT5sYW5l cyA+IDQpCisJCXJldHVybiAtRUlOVkFMOworCisJRFJNX0RFVl9ERUJVR19EUklWRVIoZHNpLT5k ZXYsICJEU0kgTGFuZXMgJWRcbiIsIGRzaS0+bGFuZXMpOworCW53bF9kc2lfd3JpdGUoZHNpLCBO V0xfRFNJX0NGR19OVU1fTEFORVMsIGRzaS0+bGFuZXMgLSAxKTsKKworCWlmIChkc2ktPmRzaV9t b2RlX2ZsYWdzICYgTUlQSV9EU0lfQ0xPQ0tfTk9OX0NPTlRJTlVPVVMpIHsKKwkJbndsX2RzaV93 cml0ZShkc2ksIE5XTF9EU0lfQ0ZHX05PTkNPTlRJTlVPVVNfQ0xLLCAweDAxKTsKKwkJbndsX2Rz aV93cml0ZShkc2ksIE5XTF9EU0lfQ0ZHX0FVVE9JTlNFUlRfRU9UUCwgMHgwMSk7CisJfSBlbHNl IHsKKwkJbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfQ0ZHX05PTkNPTlRJTlVPVVNfQ0xLLCAw eDAwKTsKKwkJbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfQ0ZHX0FVVE9JTlNFUlRfRU9UUCwg MHgwMCk7CisJfQorCisJLyogdmFsdWVzIGluIGJ5dGUgY2xvY2sgY3ljbGVzICovCisJY3ljbGVz ID0gdWkyYmMoZHNpLCBjZmctPmNsa19wcmUpOworCURSTV9ERVZfREVCVUdfRFJJVkVSKGRzaS0+ ZGV2LCAiY2ZnX3RfcHJlOiAweCV4XG4iLCBjeWNsZXMpOworCW53bF9kc2lfd3JpdGUoZHNpLCBO V0xfRFNJX0NGR19UX1BSRSwgY3ljbGVzKTsKKwljeWNsZXMgPSBwczJiYyhkc2ksIGNmZy0+bHB4 ICsgY2ZnLT5jbGtfcHJlcGFyZSArIGNmZy0+Y2xrX3plcm8pOworCURSTV9ERVZfREVCVUdfRFJJ VkVSKGRzaS0+ZGV2LCAiY2ZnX3R4X2dhcCAocHJlKTogMHgleFxuIiwgY3ljbGVzKTsKKwljeWNs ZXMgKz0gdWkyYmMoZHNpLCBjZmctPmNsa19wcmUpOworCURSTV9ERVZfREVCVUdfRFJJVkVSKGRz aS0+ZGV2LCAiY2ZnX3R4X2dhcDogMHgleFxuIiwgY3ljbGVzKTsKKwlud2xfZHNpX3dyaXRlKGRz aSwgTldMX0RTSV9DRkdfVF9QT1NULCBjeWNsZXMpOworCWN5Y2xlcyA9IHBzMmJjKGRzaSwgY2Zn LT5oc19leGl0KTsKKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkc2ktPmRldiwgImNmZ190eF9nYXA6 IDB4JXhcbiIsIGN5Y2xlcyk7CisJbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfQ0ZHX1RYX0dB UCwgY3ljbGVzKTsKKworCW53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX0NGR19FWFRSQV9DTURT X0FGVEVSX0VPVFAsIDB4MDEpOworCW53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX0NGR19IVFhf VE9fQ09VTlQsIDB4MDApOworCW53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX0NGR19MUlhfSF9U T19DT1VOVCwgMHgwMCk7CisJbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfQ0ZHX0JUQV9IX1RP X0NPVU5ULCAweDAwKTsKKwkvKiBJbiBMUCBjbG9jayBjeWNsZXMgKi8KKwljeWNsZXMgPSB1czJs cChjZmctPmxwX2Nsa19yYXRlLCBjZmctPndha2V1cCk7CisJRFJNX0RFVl9ERUJVR19EUklWRVIo ZHNpLT5kZXYsICJjZmdfdHdha2V1cDogMHgleFxuIiwgY3ljbGVzKTsKKwlud2xfZHNpX3dyaXRl KGRzaSwgTldMX0RTSV9DRkdfVFdBS0VVUCwgY3ljbGVzKTsKKworCXJldHVybiAwOworfQorCitz dGF0aWMgaW50IG53bF9kc2lfY29uZmlnX2RwaShzdHJ1Y3QgbndsX2RzaSAqZHNpKQoreworCXUz MiBjb2xvcl9mb3JtYXQsIG1vZGU7CisJYm9vbCBidXJzdF9tb2RlOworCWludCBoZnJvbnRfcG9y Y2gsIGhiYWNrX3BvcmNoLCB2ZnJvbnRfcG9yY2gsIHZiYWNrX3BvcmNoOworCWludCBoc3luY19s ZW4sIHZzeW5jX2xlbjsKKworCWhmcm9udF9wb3JjaCA9IGRzaS0+bW9kZS5oc3luY19zdGFydCAt IGRzaS0+bW9kZS5oZGlzcGxheTsKKwloc3luY19sZW4gPSBkc2ktPm1vZGUuaHN5bmNfZW5kIC0g ZHNpLT5tb2RlLmhzeW5jX3N0YXJ0OworCWhiYWNrX3BvcmNoID0gZHNpLT5tb2RlLmh0b3RhbCAt IGRzaS0+bW9kZS5oc3luY19lbmQ7CisKKwl2ZnJvbnRfcG9yY2ggPSBkc2ktPm1vZGUudnN5bmNf c3RhcnQgLSBkc2ktPm1vZGUudmRpc3BsYXk7CisJdnN5bmNfbGVuID0gZHNpLT5tb2RlLnZzeW5j X2VuZCAtIGRzaS0+bW9kZS52c3luY19zdGFydDsKKwl2YmFja19wb3JjaCA9IGRzaS0+bW9kZS52 dG90YWwgLSBkc2ktPm1vZGUudnN5bmNfZW5kOworCisJRFJNX0RFVl9ERUJVR19EUklWRVIoZHNp LT5kZXYsICJoZnJvbnRfcG9yY2ggPSAlZFxuIiwgaGZyb250X3BvcmNoKTsKKwlEUk1fREVWX0RF QlVHX0RSSVZFUihkc2ktPmRldiwgImhiYWNrX3BvcmNoID0gJWRcbiIsIGhiYWNrX3BvcmNoKTsK KwlEUk1fREVWX0RFQlVHX0RSSVZFUihkc2ktPmRldiwgImhzeW5jX2xlbiA9ICVkXG4iLCBoc3lu Y19sZW4pOworCURSTV9ERVZfREVCVUdfRFJJVkVSKGRzaS0+ZGV2LCAiaGRpc3BsYXkgPSAlZFxu IiwgZHNpLT5tb2RlLmhkaXNwbGF5KTsKKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkc2ktPmRldiwg InZmcm9udF9wb3JjaCA9ICVkXG4iLCB2ZnJvbnRfcG9yY2gpOworCURSTV9ERVZfREVCVUdfRFJJ VkVSKGRzaS0+ZGV2LCAidmJhY2tfcG9yY2ggPSAlZFxuIiwgdmJhY2tfcG9yY2gpOworCURSTV9E RVZfREVCVUdfRFJJVkVSKGRzaS0+ZGV2LCAidnN5bmNfbGVuID0gJWRcbiIsIHZzeW5jX2xlbik7 CisJRFJNX0RFVl9ERUJVR19EUklWRVIoZHNpLT5kZXYsICJ2YWN0aXZlID0gJWRcbiIsIGRzaS0+ bW9kZS52ZGlzcGxheSk7CisJRFJNX0RFVl9ERUJVR19EUklWRVIoZHNpLT5kZXYsICJjbG9jayA9 ICVkIGtIelxuIiwgZHNpLT5tb2RlLmNsb2NrKTsKKworCWNvbG9yX2Zvcm1hdCA9IG53bF9kc2lf Z2V0X2RwaV9waXhlbF9mb3JtYXQoZHNpLT5mb3JtYXQpOworCWlmIChjb2xvcl9mb3JtYXQgPCAw KSB7CisJCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJJbnZhbGlkIGNvbG9yIGZvcm1hdCAweCV4 XG4iLAorCQkJICAgICAgZHNpLT5mb3JtYXQpOworCQlyZXR1cm4gY29sb3JfZm9ybWF0OworCX0K KwlEUk1fREVWX0RFQlVHX0RSSVZFUihkc2ktPmRldiwgInBpeGVsIGZtdCA9ICVkXG4iLCBkc2kt PmZvcm1hdCk7CisKKwlud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9JTlRFUkZBQ0VfQ09MT1Jf Q09ESU5HLCBOV0xfRFNJX0RQSV8yNF9CSVQpOworCW53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJ X1BJWEVMX0ZPUk1BVCwgY29sb3JfZm9ybWF0KTsKKwkvKgorCSAqIEFkanVzdGluZyBpbnB1dCBw b2xhcml0eSBiYXNlZCBvbiB0aGUgdmlkZW8gbW9kZSByZXN1bHRzIGluCisJICogYSBibGFjayBz Y3JlZW4gc28gYWx3YXlzIHBpY2sgYWN0aXZlIGxvdzoKKwkgKi8KKwlud2xfZHNpX3dyaXRlKGRz aSwgTldMX0RTSV9WU1lOQ19QT0xBUklUWSwKKwkJICAgICAgTldMX0RTSV9WU1lOQ19QT0xBUklU WV9BQ1RJVkVfTE9XKTsKKwlud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9IU1lOQ19QT0xBUklU WSwKKwkJICAgICAgTldMX0RTSV9IU1lOQ19QT0xBUklUWV9BQ1RJVkVfTE9XKTsKKworCWJ1cnN0 X21vZGUgPSAoZHNpLT5kc2lfbW9kZV9mbGFncyAmIE1JUElfRFNJX01PREVfVklERU9fQlVSU1Qp ICYmCisJCSAgICAgIShkc2ktPmRzaV9tb2RlX2ZsYWdzICYgTUlQSV9EU0lfTU9ERV9WSURFT19T WU5DX1BVTFNFKTsKKworCWlmIChidXJzdF9tb2RlKSB7CisJCW53bF9kc2lfd3JpdGUoZHNpLCBO V0xfRFNJX1ZJREVPX01PREUsIE5XTF9EU0lfVk1fQlVSU1RfTU9ERSk7CisJCW53bF9kc2lfd3Jp dGUoZHNpLCBOV0xfRFNJX1BJWEVMX0ZJRk9fU0VORF9MRVZFTCwgMjU2KTsKKwl9IGVsc2Ugewor CQltb2RlID0gKChkc2ktPmRzaV9tb2RlX2ZsYWdzICYgTUlQSV9EU0lfTU9ERV9WSURFT19TWU5D X1BVTFNFKSA/CisJCQkJTldMX0RTSV9WTV9CVVJTVF9NT0RFX1dJVEhfU1lOQ19QVUxTRVMgOgor CQkJCU5XTF9EU0lfVk1fTk9OX0JVUlNUX01PREVfV0lUSF9TWU5DX0VWRU5UUyk7CisJCW53bF9k c2lfd3JpdGUoZHNpLCBOV0xfRFNJX1ZJREVPX01PREUsIG1vZGUpOworCQlud2xfZHNpX3dyaXRl KGRzaSwgTldMX0RTSV9QSVhFTF9GSUZPX1NFTkRfTEVWRUwsCisJCQkgICAgICBkc2ktPm1vZGUu aGRpc3BsYXkpOworCX0KKworCW53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX0hGUCwgaGZyb250 X3BvcmNoKTsKKwlud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9IQlAsIGhiYWNrX3BvcmNoKTsK Kwlud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9IU0EsIGhzeW5jX2xlbik7CisKKwlud2xfZHNp X3dyaXRlKGRzaSwgTldMX0RTSV9FTkFCTEVfTVVMVF9QS1RTLCAweDApOworCW53bF9kc2lfd3Jp dGUoZHNpLCBOV0xfRFNJX0JMTFBfTU9ERSwgMHgxKTsKKwlud2xfZHNpX3dyaXRlKGRzaSwgTldM X0RTSV9FTkFCTEVfTVVMVF9QS1RTLCAweDApOworCW53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJ X1VTRV9OVUxMX1BLVF9CTExQLCAweDApOworCW53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX1ZD LCAweDApOworCisJbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfUElYRUxfUEFZTE9BRF9TSVpF LCBkc2ktPm1vZGUuaGRpc3BsYXkpOworCW53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX1ZBQ1RJ VkUsIGRzaS0+bW9kZS52ZGlzcGxheSAtIDEpOworCW53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJ X1ZCUCwgdmJhY2tfcG9yY2gpOworCW53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX1ZGUCwgdmZy b250X3BvcmNoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBud2xfZHNpX2luaXRf aW50ZXJydXB0cyhzdHJ1Y3QgbndsX2RzaSAqZHNpKQoreworCXUzMiBpcnFfZW5hYmxlOworCisJ bndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfSVJRX01BU0ssIDB4ZmZmZmZmZmYpOworCW53bF9k c2lfd3JpdGUoZHNpLCBOV0xfRFNJX0lSUV9NQVNLMiwgMHg3KTsKKworCWlycV9lbmFibGUgPSB+ KHUzMikoTldMX0RTSV9UWF9QS1RfRE9ORV9NQVNLIHwKKwkJCSAgICBOV0xfRFNJX1JYX1BLVF9I RFJfUkNWRF9NQVNLIHwKKwkJCSAgICBOV0xfRFNJX1RYX0ZJRk9fT1ZGTFdfTUFTSyB8CisJCQkg ICAgTldMX0RTSV9IU19UWF9USU1FT1VUX01BU0spOworCisJbndsX2RzaV93cml0ZShkc2ksIE5X TF9EU0lfSVJRX01BU0ssIGlycV9lbmFibGUpOworfQorCitzdGF0aWMgaW50IG53bF9kc2lfaG9z dF9hdHRhY2goc3RydWN0IG1pcGlfZHNpX2hvc3QgKmRzaV9ob3N0LAorCQkJICAgICAgIHN0cnVj dCBtaXBpX2RzaV9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgbndsX2RzaSAqZHNpID0gY29u dGFpbmVyX29mKGRzaV9ob3N0LCBzdHJ1Y3QgbndsX2RzaSwgZHNpX2hvc3QpOworCXN0cnVjdCBk ZXZpY2UgKmRldiA9IGRzaS0+ZGV2OworCXN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2U7CisJc3Ry dWN0IGRybV9wYW5lbCAqcGFuZWw7CisJaW50IHJldDsKKworCURSTV9ERVZfSU5GTyhkZXYsICJs YW5lcz0ldSwgZm9ybWF0PTB4JXggZmxhZ3M9MHglbHhcbiIsIGRldmljZS0+bGFuZXMsCisJCSAg ICAgZGV2aWNlLT5mb3JtYXQsIGRldmljZS0+bW9kZV9mbGFncyk7CisKKwlpZiAoZGV2aWNlLT5s YW5lcyA8IDEgfHwgZGV2aWNlLT5sYW5lcyA+IDQpCisJCXJldHVybiAtRUlOVkFMOworCisJZHNp LT5sYW5lcyA9IGRldmljZS0+bGFuZXM7CisJZHNpLT5mb3JtYXQgPSBkZXZpY2UtPmZvcm1hdDsK Kwlkc2ktPmRzaV9tb2RlX2ZsYWdzID0gZGV2aWNlLT5tb2RlX2ZsYWdzOworCisJcmV0ID0gZHJt X29mX2ZpbmRfcGFuZWxfb3JfYnJpZGdlKGRzaS0+ZGV2LT5vZl9ub2RlLCAxLCAwLCAmcGFuZWws CisJCQkJCSAgJmJyaWRnZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChwYW5l bCkgeworCQlicmlkZ2UgPSBkcm1fcGFuZWxfYnJpZGdlX2FkZChwYW5lbCwgRFJNX01PREVfQ09O TkVDVE9SX0RTSSk7CisJCWlmIChJU19FUlIoYnJpZGdlKSkKKwkJCXJldHVybiBQVFJfRVJSKGJy aWRnZSk7CisJfQorCisJZHNpLT5wYW5lbF9icmlkZ2UgPSBicmlkZ2U7CisJZHJtX2JyaWRnZV9h ZGQoJmRzaS0+YnJpZGdlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG53bF9kc2lf aG9zdF9kZXRhY2goc3RydWN0IG1pcGlfZHNpX2hvc3QgKmRzaV9ob3N0LAorCQkJICAgICAgIHN0 cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgbndsX2RzaSAqZHNpID0g Y29udGFpbmVyX29mKGRzaV9ob3N0LCBzdHJ1Y3QgbndsX2RzaSwgZHNpX2hvc3QpOworCisJZHJt X29mX3BhbmVsX2JyaWRnZV9yZW1vdmUoZHNpLT5kZXYtPm9mX25vZGUsIDEsIDApOworCWRybV9i cmlkZ2VfcmVtb3ZlKCZkc2ktPmJyaWRnZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGJv b2wgbndsX2RzaV9yZWFkX3BhY2tldChzdHJ1Y3QgbndsX2RzaSAqZHNpLCB1MzIgc3RhdHVzKQor eworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRzaS0+ZGV2OworCXN0cnVjdCBud2xfZHNpX3RyYW5z ZmVyICp4ZmVyID0gZHNpLT54ZmVyOworCXU4ICpwYXlsb2FkID0geGZlci0+bXNnLT5yeF9idWY7 CisJdTMyIHZhbDsKKwl1MTYgd29yZF9jb3VudDsKKwl1OCBjaGFubmVsOworCXU4IGRhdGFfdHlw ZTsKKworCXhmZXItPnN0YXR1cyA9IDA7CisKKwlpZiAoeGZlci0+cnhfd29yZF9jb3VudCA9PSAw KSB7CisJCWlmICghKHN0YXR1cyAmIE5XTF9EU0lfUlhfUEtUX0hEUl9SQ1ZEKSkKKwkJCXJldHVy biBmYWxzZTsKKwkJLyogR2V0IHRoZSBSWCBoZWFkZXIgYW5kIHBhcnNlIGl0ICovCisJCXZhbCA9 IG53bF9kc2lfcmVhZChkc2ksIE5XTF9EU0lfUlhfUEtUX0hFQURFUik7CisJCXdvcmRfY291bnQg PSBOV0xfRFNJX1dDKHZhbCk7CisJCWNoYW5uZWwgPSBOV0xfRFNJX1JYX1ZDKHZhbCk7CisJCWRh dGFfdHlwZSA9IE5XTF9EU0lfUlhfRFQodmFsKTsKKworCQlpZiAoY2hhbm5lbCAhPSB4ZmVyLT5t c2ctPmNoYW5uZWwpIHsKKwkJCURSTV9ERVZfRVJST1IoZGV2LAorCQkJCSAgICAgICJbJTAyWF0g Q2hhbm5lbCBtaXNtYXRjaCAoJXUgIT0gJXUpXG4iLAorCQkJCSAgICAgIHhmZXItPmNtZCwgY2hh bm5lbCwgeGZlci0+bXNnLT5jaGFubmVsKTsKKwkJCXJldHVybiB0cnVlOworCQl9CisKKwkJc3dp dGNoIChkYXRhX3R5cGUpIHsKKwkJY2FzZSBNSVBJX0RTSV9SWF9HRU5FUklDX1NIT1JUX1JFQURf UkVTUE9OU0VfMkJZVEU6CisJCQkvKiBGYWxsIHRocm91Z2ggKi8KKwkJY2FzZSBNSVBJX0RTSV9S WF9EQ1NfU0hPUlRfUkVBRF9SRVNQT05TRV8yQllURToKKwkJCWlmICh4ZmVyLT5tc2ctPnJ4X2xl biA+IDEpIHsKKwkJCQkvKiByZWFkIHNlY29uZCBieXRlICovCisJCQkJcGF5bG9hZFsxXSA9IHdv cmRfY291bnQgPj4gODsKKwkJCQkrK3hmZXItPnJ4X2xlbjsKKwkJCX0KKwkJCS8qIEZhbGwgdGhy b3VnaCAqLworCQljYXNlIE1JUElfRFNJX1JYX0dFTkVSSUNfU0hPUlRfUkVBRF9SRVNQT05TRV8x QllURToKKwkJCS8qIEZhbGwgdGhyb3VnaCAqLworCQljYXNlIE1JUElfRFNJX1JYX0RDU19TSE9S VF9SRUFEX1JFU1BPTlNFXzFCWVRFOgorCQkJaWYgKHhmZXItPm1zZy0+cnhfbGVuID4gMCkgewor CQkJCS8qIHJlYWQgZmlyc3QgYnl0ZSAqLworCQkJCXBheWxvYWRbMF0gPSB3b3JkX2NvdW50ICYg MHhmZjsKKwkJCQkrK3hmZXItPnJ4X2xlbjsKKwkJCX0KKwkJCXhmZXItPnN0YXR1cyA9IHhmZXIt PnJ4X2xlbjsKKwkJCXJldHVybiB0cnVlOworCQljYXNlIE1JUElfRFNJX1JYX0FDS05PV0xFREdF X0FORF9FUlJPUl9SRVBPUlQ6CisJCQl3b3JkX2NvdW50ICY9IDB4ZmY7CisJCQlEUk1fREVWX0VS Uk9SKGRldiwgIlslMDJYXSBEU0kgZXJyb3IgcmVwb3J0OiAweCUwMnhcbiIsCisJCQkJICAgICAg eGZlci0+Y21kLCB3b3JkX2NvdW50KTsKKwkJCXhmZXItPnN0YXR1cyA9IC1FUFJPVE87CisJCQly ZXR1cm4gdHJ1ZTsKKwkJfQorCisJCWlmICh3b3JkX2NvdW50ID4geGZlci0+bXNnLT5yeF9sZW4p IHsKKwkJCURSTV9ERVZfRVJST1IoCisJCQkJZGV2LAorCQkJCSJbJTAyWF0gUmVjZWl2ZSBidWZm ZXIgdG9vIHNtYWxsOiAlbHUgKDwgJXUpXG4iLAorCQkJCXhmZXItPmNtZCwgeGZlci0+bXNnLT5y eF9sZW4sIHdvcmRfY291bnQpOworCQkJcmV0dXJuIHRydWU7CisJCX0KKworCQl4ZmVyLT5yeF93 b3JkX2NvdW50ID0gd29yZF9jb3VudDsKKwl9IGVsc2UgeworCQkvKiBTZXQgd29yZF9jb3VudCBm cm9tIHByZXZpb3VzIGhlYWRlciByZWFkICovCisJCXdvcmRfY291bnQgPSB4ZmVyLT5yeF93b3Jk X2NvdW50OworCX0KKworCS8qIElmIFJYIHBheWxvYWQgaXMgbm90IHlldCByZWNlaXZlZCwgd2Fp dCBmb3IgaXQgKi8KKwlpZiAoIShzdGF0dXMgJiBOV0xfRFNJX1JYX1BLVF9QQVlMT0FEX0RBVEFf UkNWRCkpCisJCXJldHVybiBmYWxzZTsKKworCS8qIFJlYWQgdGhlIFJYIHBheWxvYWQgKi8KKwl3 aGlsZSAod29yZF9jb3VudCA+PSA0KSB7CisJCXZhbCA9IG53bF9kc2lfcmVhZChkc2ksIE5XTF9E U0lfUlhfUEFZTE9BRCk7CisJCXBheWxvYWRbMF0gPSAodmFsID4+IDApICYgMHhmZjsKKwkJcGF5 bG9hZFsxXSA9ICh2YWwgPj4gOCkgJiAweGZmOworCQlwYXlsb2FkWzJdID0gKHZhbCA+PiAxNikg JiAweGZmOworCQlwYXlsb2FkWzNdID0gKHZhbCA+PiAyNCkgJiAweGZmOworCQlwYXlsb2FkICs9 IDQ7CisJCXhmZXItPnJ4X2xlbiArPSA0OworCQl3b3JkX2NvdW50IC09IDQ7CisJfQorCisJaWYg KHdvcmRfY291bnQgPiAwKSB7CisJCXZhbCA9IG53bF9kc2lfcmVhZChkc2ksIE5XTF9EU0lfUlhf UEFZTE9BRCk7CisJCXN3aXRjaCAod29yZF9jb3VudCkgeworCQljYXNlIDM6CisJCQlwYXlsb2Fk WzJdID0gKHZhbCA+PiAxNikgJiAweGZmOworCQkJKyt4ZmVyLT5yeF9sZW47CisJCQkvKiBGYWxs IHRocm91Z2ggKi8KKwkJY2FzZSAyOgorCQkJcGF5bG9hZFsxXSA9ICh2YWwgPj4gOCkgJiAweGZm OworCQkJKyt4ZmVyLT5yeF9sZW47CisJCQkvKiBGYWxsIHRocm91Z2ggKi8KKwkJY2FzZSAxOgor CQkJcGF5bG9hZFswXSA9ICh2YWwgPj4gMCkgJiAweGZmOworCQkJKyt4ZmVyLT5yeF9sZW47CisJ CQlicmVhazsKKwkJfQorCX0KKworCXhmZXItPnN0YXR1cyA9IHhmZXItPnJ4X2xlbjsKKworCXJl dHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBud2xfZHNpX2ZpbmlzaF90cmFuc21pc3Npb24o c3RydWN0IG53bF9kc2kgKmRzaSwgdTMyIHN0YXR1cykKK3sKKwlzdHJ1Y3QgbndsX2RzaV90cmFu c2ZlciAqeGZlciA9IGRzaS0+eGZlcjsKKwlib29sIGVuZF9wYWNrZXQgPSBmYWxzZTsKKworCWlm ICgheGZlcikKKwkJcmV0dXJuOworCisJaWYgKHN0YXR1cyAmIE5XTF9EU0lfVFhfRklGT19PVkZM VykgeworCQlEUk1fREVWX0VSUk9SX1JBVEVMSU1JVEVEKGRzaS0+ZGV2LCAidHggZmlmbyBvdmVy Zmxvd1xuIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoc3RhdHVzICYgTldMX0RTSV9IU19UWF9U SU1FT1VUKSB7CisJCURSTV9ERVZfRVJST1JfUkFURUxJTUlURUQoZHNpLT5kZXYsICJIUyB0eCB0 aW1lb3V0XG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlmICh4ZmVyLT5kaXJlY3Rpb24gPT0gRFNJ X1BBQ0tFVF9TRU5EICYmCisJICAgIHN0YXR1cyAmIE5XTF9EU0lfVFhfUEtUX0RPTkUpIHsKKwkJ eGZlci0+c3RhdHVzID0geGZlci0+dHhfbGVuOworCQllbmRfcGFja2V0ID0gdHJ1ZTsKKwl9IGVs c2UgaWYgKHN0YXR1cyAmIE5XTF9EU0lfRFBIWV9ESVJFQ1RJT04gJiYKKwkJICAgKChzdGF0dXMg JiAoTldMX0RTSV9SWF9QS1RfSERSX1JDVkQgfAorCQkJICAgICAgIE5XTF9EU0lfUlhfUEtUX1BB WUxPQURfREFUQV9SQ1ZEKSkpKSB7CisJCWVuZF9wYWNrZXQgPSBud2xfZHNpX3JlYWRfcGFja2V0 KGRzaSwgc3RhdHVzKTsKKwl9CisKKwlpZiAoZW5kX3BhY2tldCkKKwkJY29tcGxldGUoJnhmZXIt PmNvbXBsZXRlZCk7Cit9CisKK3N0YXRpYyB2b2lkIG53bF9kc2lfYmVnaW5fdHJhbnNtaXNzaW9u KHN0cnVjdCBud2xfZHNpICpkc2kpCit7CisJc3RydWN0IG53bF9kc2lfdHJhbnNmZXIgKnhmZXIg PSBkc2ktPnhmZXI7CisJc3RydWN0IG1pcGlfZHNpX3BhY2tldCAqcGt0ID0gJnhmZXItPnBhY2tl dDsKKwljb25zdCB1OCAqcGF5bG9hZDsKKwlzaXplX3QgbGVuZ3RoOworCXUxNiB3b3JkX2NvdW50 OworCXU4IGhzX21vZGU7CisJdTMyIHZhbDsKKwl1MzIgaHNfd29ya2Fyb3VuZCA9IDA7CisKKwkv KiBTZW5kIHRoZSBwYXlsb2FkLCBpZiBhbnkgKi8KKwlsZW5ndGggPSBwa3QtPnBheWxvYWRfbGVu Z3RoOworCXBheWxvYWQgPSBwa3QtPnBheWxvYWQ7CisKKwl3aGlsZSAobGVuZ3RoID49IDQpIHsK KwkJdmFsID0gKih1MzIgKilwYXlsb2FkOworCQloc193b3JrYXJvdW5kIHw9ICEodmFsICYgMHhG RkZGMDApOworCQlud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9UWF9QQVlMT0FELCB2YWwpOwor CQlwYXlsb2FkICs9IDQ7CisJCWxlbmd0aCAtPSA0OworCX0KKwkvKiBTZW5kIHRoZSByZXN0IG9m IHRoZSBwYXlsb2FkICovCisJdmFsID0gMDsKKwlzd2l0Y2ggKGxlbmd0aCkgeworCWNhc2UgMzoK KwkJdmFsIHw9IHBheWxvYWRbMl0gPDwgMTY7CisJCS8qIEZhbGwgdGhyb3VnaCAqLworCWNhc2Ug MjoKKwkJdmFsIHw9IHBheWxvYWRbMV0gPDwgODsKKwkJaHNfd29ya2Fyb3VuZCB8PSAhKHZhbCAm IDB4RkZGRjAwKTsKKwkJLyogRmFsbCB0aHJvdWdoICovCisJY2FzZSAxOgorCQl2YWwgfD0gcGF5 bG9hZFswXTsKKwkJbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfVFhfUEFZTE9BRCwgdmFsKTsK KwkJYnJlYWs7CisJfQorCXhmZXItPnR4X2xlbiA9IHBrdC0+cGF5bG9hZF9sZW5ndGg7CisKKwkv KgorCSAqIFNlbmQgdGhlIGhlYWRlcgorCSAqIGhlYWRlclswXSA9IFZpcnR1YWwgQ2hhbm5lbCAr IERhdGEgVHlwZQorCSAqIGhlYWRlclsxXSA9IFdvcmQgQ291bnQgTFNCIChMUCkgb3IgZmlyc3Qg cGFyYW0gKFNQKQorCSAqIGhlYWRlclsyXSA9IFdvcmQgQ291bnQgTVNCIChMUCkgb3Igc2Vjb25k IHBhcmFtIChTUCkKKwkgKi8KKwl3b3JkX2NvdW50ID0gcGt0LT5oZWFkZXJbMV0gfCAocGt0LT5o ZWFkZXJbMl0gPDwgOCk7CisJaWYgKGhzX3dvcmthcm91bmQgJiYgKGRzaS0+cXVpcmtzICYgRTEx NDE4X0hTX01PREVfUVVJUkspKSB7CisJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRzaS0+ZGV2LAor CQkJCSAgICAgIlVzaW5nIGhzIG1vZGUgd29ya2Fyb3VuZCBmb3IgY21kIDB4JXhcbiIsCisJCQkJ ICAgICB4ZmVyLT5jbWQpOworCQloc19tb2RlID0gMTsKKwl9IGVsc2UgeworCQloc19tb2RlID0g KHhmZXItPm1zZy0+ZmxhZ3MgJiBNSVBJX0RTSV9NU0dfVVNFX0xQTSkgPyAwIDogMTsKKwl9CisJ dmFsID0gTldMX0RTSV9XQyh3b3JkX2NvdW50KSB8IE5XTF9EU0lfVFhfVkMoeGZlci0+bXNnLT5j aGFubmVsKSB8CisJICAgICAgTldMX0RTSV9UWF9EVCh4ZmVyLT5tc2ctPnR5cGUpIHwgTldMX0RT SV9IU19TRUwoaHNfbW9kZSkgfAorCSAgICAgIE5XTF9EU0lfQlRBX1RYKHhmZXItPm5lZWRfYnRh KTsKKwlud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9QS1RfQ09OVFJPTCwgdmFsKTsKKworCS8q IFNlbmQgcGFja2V0IGNvbW1hbmQgKi8KKwlud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9TRU5E X1BBQ0tFVCwgMHgxKTsKK30KKworc3RhdGljIHNzaXplX3QgbndsX2RzaV9ob3N0X3RyYW5zZmVy KHN0cnVjdCBtaXBpX2RzaV9ob3N0ICpkc2lfaG9zdCwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBt aXBpX2RzaV9tc2cgKm1zZykKK3sKKwlzdHJ1Y3QgbndsX2RzaSAqZHNpID0gY29udGFpbmVyX29m KGRzaV9ob3N0LCBzdHJ1Y3QgbndsX2RzaSwgZHNpX2hvc3QpOworCXN0cnVjdCBud2xfZHNpX3Ry YW5zZmVyIHhmZXI7CisJc3NpemVfdCByZXQgPSAwOworCisJLyogQ3JlYXRlIHBhY2tldCB0byBi ZSBzZW50ICovCisJZHNpLT54ZmVyID0gJnhmZXI7CisJcmV0ID0gbWlwaV9kc2lfY3JlYXRlX3Bh Y2tldCgmeGZlci5wYWNrZXQsIG1zZyk7CisJaWYgKHJldCA8IDApIHsKKwkJZHNpLT54ZmVyID0g TlVMTDsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAoKG1zZy0+dHlwZSAmIE1JUElfRFNJX0dF TkVSSUNfUkVBRF9SRVFVRVNUXzBfUEFSQU0gfHwKKwkgICAgIG1zZy0+dHlwZSAmIE1JUElfRFNJ X0dFTkVSSUNfUkVBRF9SRVFVRVNUXzFfUEFSQU0gfHwKKwkgICAgIG1zZy0+dHlwZSAmIE1JUElf RFNJX0dFTkVSSUNfUkVBRF9SRVFVRVNUXzJfUEFSQU0gfHwKKwkgICAgIG1zZy0+dHlwZSAmIE1J UElfRFNJX0RDU19SRUFEKSAmJgorCSAgICBtc2ctPnJ4X2xlbiA+IDAgJiYgbXNnLT5yeF9idWYg IT0gTlVMTCkKKwkJeGZlci5kaXJlY3Rpb24gPSBEU0lfUEFDS0VUX1JFQ0VJVkU7CisJZWxzZQor CQl4ZmVyLmRpcmVjdGlvbiA9IERTSV9QQUNLRVRfU0VORDsKKworCXhmZXIubmVlZF9idGEgPSAo eGZlci5kaXJlY3Rpb24gPT0gRFNJX1BBQ0tFVF9SRUNFSVZFKTsKKwl4ZmVyLm5lZWRfYnRhIHw9 IChtc2ctPmZsYWdzICYgTUlQSV9EU0lfTVNHX1JFUV9BQ0spID8gMSA6IDA7CisJeGZlci5tc2cg PSBtc2c7CisJeGZlci5zdGF0dXMgPSAtRVRJTUVET1VUOworCXhmZXIucnhfd29yZF9jb3VudCA9 IDA7CisJeGZlci5yeF9sZW4gPSAwOworCXhmZXIuY21kID0gMHgwMDsKKwlpZiAobXNnLT50eF9s ZW4gPiAwKQorCQl4ZmVyLmNtZCA9ICgodTggKikobXNnLT50eF9idWYpKVswXTsKKwlpbml0X2Nv bXBsZXRpb24oJnhmZXIuY29tcGxldGVkKTsKKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShk c2ktPnJ4X2VzY19jbGspOworCWlmIChyZXQgPCAwKSB7CisJCURSTV9ERVZfRVJST1IoZHNpLT5k ZXYsICJGYWlsZWQgdG8gZW5hYmxlIHJ4X2VzYyBjbGs6ICV6ZFxuIiwKKwkJCSAgICAgIHJldCk7 CisJCXJldHVybiByZXQ7CisJfQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRzaS0+ZGV2LCAiRW5h YmxlZCByeF9lc2MgY2xrIEAlbHUgSHpcbiIsCisJCQkgICAgIGNsa19nZXRfcmF0ZShkc2ktPnJ4 X2VzY19jbGspKTsKKworCS8qIEluaXRpYXRlIHRoZSBEU0kgcGFja2V0IHRyYW5zbWlzaW9uICov CisJbndsX2RzaV9iZWdpbl90cmFuc21pc3Npb24oZHNpKTsKKworCWlmICghd2FpdF9mb3JfY29t cGxldGlvbl90aW1lb3V0KCZ4ZmVyLmNvbXBsZXRlZCwKKwkJCQkJIE5XTF9EU0lfTUlQSV9GSUZP X1RJTUVPVVQpKSB7CisJCURSTV9ERVZfRVJST1IoZHNpX2hvc3QtPmRldiwgIlslMDJYXSBEU0kg dHJhbnNmZXIgdGltZWQgb3V0XG4iLAorCQkJICAgICAgeGZlci5jbWQpOworCQlyZXQgPSAtRVRJ TUVET1VUOworCX0gZWxzZSB7CisJCXJldCA9IHhmZXIuc3RhdHVzOworCX0KKworCWNsa19kaXNh YmxlX3VucHJlcGFyZShkc2ktPnJ4X2VzY19jbGspOworCisJcmV0dXJuIHJldDsKK30KKworY29u c3Qgc3RydWN0IG1pcGlfZHNpX2hvc3Rfb3BzIG53bF9kc2lfaG9zdF9vcHMgPSB7CisJLmF0dGFj aCA9IG53bF9kc2lfaG9zdF9hdHRhY2gsCisJLmRldGFjaCA9IG53bF9kc2lfaG9zdF9kZXRhY2gs CisJLnRyYW5zZmVyID0gbndsX2RzaV9ob3N0X3RyYW5zZmVyLAorfTsKKworaXJxcmV0dXJuX3Qg bndsX2RzaV9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXUzMiBpcnFfc3Rh dHVzOworCXN0cnVjdCBud2xfZHNpICpkc2kgPSBkYXRhOworCisJaXJxX3N0YXR1cyA9IG53bF9k c2lfcmVhZChkc2ksIE5XTF9EU0lfSVJRX1NUQVRVUyk7CisKKwlpZiAoaXJxX3N0YXR1cyAmIE5X TF9EU0lfVFhfUEtUX0RPTkUgfHwKKwkgICAgaXJxX3N0YXR1cyAmIE5XTF9EU0lfUlhfUEtUX0hE Ul9SQ1ZEIHx8CisJICAgIGlycV9zdGF0dXMgJiBOV0xfRFNJX1JYX1BLVF9QQVlMT0FEX0RBVEFf UkNWRCkKKwkJbndsX2RzaV9maW5pc2hfdHJhbnNtaXNzaW9uKGRzaSwgaXJxX3N0YXR1cyk7CisK KwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK2ludCBud2xfZHNpX2VuYWJsZShzdHJ1Y3Qgbnds X2RzaSAqZHNpKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRzaS0+ZGV2OworCXVuaW9uIHBo eV9jb25maWd1cmVfb3B0cyAqcGh5X2NmZyA9ICZkc2ktPnBoeV9jZmc7CisJaW50IHJldDsKKwor CWlmICghZHNpLT5sYW5lcykgeworCQlEUk1fREVWX0VSUk9SKGRldiwgIk5lZWQgRFNJIGxhbmVz OiAlZFxuIiwgZHNpLT5sYW5lcyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldCA9IHBo eV9pbml0KGRzaS0+cGh5KTsKKwlpZiAocmV0IDwgMCkgeworCQlEUk1fREVWX0VSUk9SKGRldiwg IkZhaWxlZCB0byBpbml0IERTSSBwaHk6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0K KworCXJldCA9IHBoeV9jb25maWd1cmUoZHNpLT5waHksIHBoeV9jZmcpOworCWlmIChyZXQgPCAw KSB7CisJCURSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBEU0kgcGh5OiAl ZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFi bGUoZHNpLT50eF9lc2NfY2xrKTsKKwlpZiAocmV0IDwgMCkgeworCQlEUk1fREVWX0VSUk9SKGRz aS0+ZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSB0eF9lc2MgY2xrOiAlZFxuIiwKKwkJCSAgICAgIHJl dCk7CisJCXJldHVybiByZXQ7CisJfQorCURSTV9ERVZfREVCVUdfRFJJVkVSKGRzaS0+ZGV2LCAi RW5hYmxlZCB0eF9lc2MgY2xrIEAlbHUgSHpcbiIsCisJCQkgICAgIGNsa19nZXRfcmF0ZShkc2kt PnR4X2VzY19jbGspKTsKKworCXJldCA9IG53bF9kc2lfY29uZmlnX2hvc3QoZHNpKTsKKwlpZiAo cmV0IDwgMCkgeworCQlEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byBzZXQgdXAgRFNJOiAl ZCIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gbndsX2RzaV9jb25maWdfZHBp KGRzaSk7CisJaWYgKHJldCA8IDApIHsKKwkJRFJNX0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8g c2V0IHVwIERQSTogJWQiLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHBoeV9w b3dlcl9vbihkc2ktPnBoeSk7CisJaWYgKHJldCA8IDApIHsKKwkJRFJNX0RFVl9FUlJPUihkZXYs ICJGYWlsZWQgdG8gcG93ZXIgb24gRFBIWSAoJWQpXG4iLCByZXQpOworCQlyZXR1cm4gcmV0Owor CX0KKworCW53bF9kc2lfaW5pdF9pbnRlcnJ1cHRzKGRzaSk7CisKKwlyZXR1cm4gMDsKK30KKwor aW50IG53bF9kc2lfZGlzYWJsZShzdHJ1Y3QgbndsX2RzaSAqZHNpKQoreworCXN0cnVjdCBkZXZp Y2UgKmRldiA9IGRzaS0+ZGV2OworCisJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiRGlzYWJs aW5nIGNsb2NrcyBhbmQgcGh5XG4iKTsKKworCXBoeV9wb3dlcl9vZmYoZHNpLT5waHkpOworCXBo eV9leGl0KGRzaS0+cGh5KTsKKworCS8qIERpc2FibGluZyB0aGUgY2xvY2sgYmVmb3JlIHRoZSBw aHkgYnJlYWtzIGVuYWJsaW5nIGRzaSBhZ2FpbiAqLworCWNsa19kaXNhYmxlX3VucHJlcGFyZShk c2ktPnR4X2VzY19jbGspOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vYnJpZGdlL253bC1kc2kvbndsLWRzaS5oIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9u d2wtZHNpL253bC1kc2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAu LjU3OWIzNjZkZTY1MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2Uv bndsLWRzaS9ud2wtZHNpLmgKQEAgLTAsMCArMSwxMTIgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBHUEwtMi4wKyAqLworLyoKKyAqIE5XTCBNSVBJIERTSSBob3N0IGRyaXZlcgorICoK KyAqIENvcHlyaWdodCAoQykgMjAxNyBOWFAKKyAqIENvcHlyaWdodCAoQykgMjAxOSBQdXJpc20g U1BDCisgKi8KKyNpZm5kZWYgX19OV0xfRFNJX0hfXworI2RlZmluZSBfX05XTF9EU0lfSF9fCisK KyNpbmNsdWRlIDxsaW51eC9pcnFyZXR1cm4uaD4KKworI2luY2x1ZGUgPGRybS9kcm1fbWlwaV9k c2kuaD4KKworI2luY2x1ZGUgIm53bC1kcnYuaCIKKworLyogRFNJIEhPU1QgcmVnaXN0ZXJzICov CisjZGVmaW5lIE5XTF9EU0lfQ0ZHX05VTV9MQU5FUwkJCTB4MAorI2RlZmluZSBOV0xfRFNJX0NG R19OT05DT05USU5VT1VTX0NMSwkJMHg0CisjZGVmaW5lIE5XTF9EU0lfQ0ZHX1RfUFJFCQkJMHg4 CisjZGVmaW5lIE5XTF9EU0lfQ0ZHX1RfUE9TVAkJCTB4YworI2RlZmluZSBOV0xfRFNJX0NGR19U WF9HQVAJCQkweDEwCisjZGVmaW5lIE5XTF9EU0lfQ0ZHX0FVVE9JTlNFUlRfRU9UUAkJMHgxNAor I2RlZmluZSBOV0xfRFNJX0NGR19FWFRSQV9DTURTX0FGVEVSX0VPVFAJMHgxOAorI2RlZmluZSBO V0xfRFNJX0NGR19IVFhfVE9fQ09VTlQJCTB4MWMKKyNkZWZpbmUgTldMX0RTSV9DRkdfTFJYX0hf VE9fQ09VTlQJCTB4MjAKKyNkZWZpbmUgTldMX0RTSV9DRkdfQlRBX0hfVE9fQ09VTlQJCTB4MjQK KyNkZWZpbmUgTldMX0RTSV9DRkdfVFdBS0VVUAkJCTB4MjgKKyNkZWZpbmUgTldMX0RTSV9DRkdf U1RBVFVTX09VVAkJCTB4MmMKKyNkZWZpbmUgTldMX0RTSV9SWF9FUlJPUl9TVEFUVVMJCQkweDMw CisKKy8qIERTSSBEUEkgcmVnaXN0ZXJzICovCisjZGVmaW5lIE5XTF9EU0lfUElYRUxfUEFZTE9B RF9TSVpFCQkweDIwMAorI2RlZmluZSBOV0xfRFNJX1BJWEVMX0ZJRk9fU0VORF9MRVZFTAkJMHgy MDQKKyNkZWZpbmUgTldMX0RTSV9JTlRFUkZBQ0VfQ09MT1JfQ09ESU5HCQkweDIwOAorI2RlZmlu ZSBOV0xfRFNJX1BJWEVMX0ZPUk1BVAkJCTB4MjBjCisjZGVmaW5lIE5XTF9EU0lfVlNZTkNfUE9M QVJJVFkJCQkweDIxMAorI2RlZmluZSBOV0xfRFNJX1ZTWU5DX1BPTEFSSVRZX0FDVElWRV9MT1cJ MAorI2RlZmluZSBOV0xfRFNJX1ZTWU5DX1BPTEFSSVRZX0FDVElWRV9ISUdICUJJVCgxKQorCisj ZGVmaW5lIE5XTF9EU0lfSFNZTkNfUE9MQVJJVFkJCQkweDIxNAorI2RlZmluZSBOV0xfRFNJX0hT WU5DX1BPTEFSSVRZX0FDVElWRV9MT1cJMAorI2RlZmluZSBOV0xfRFNJX0hTWU5DX1BPTEFSSVRZ X0FDVElWRV9ISUdICUJJVCgxKQorCisjZGVmaW5lIE5XTF9EU0lfVklERU9fTU9ERQkJCTB4MjE4 CisjZGVmaW5lIE5XTF9EU0lfSEZQCQkJCTB4MjFjCisjZGVmaW5lIE5XTF9EU0lfSEJQCQkJCTB4 MjIwCisjZGVmaW5lIE5XTF9EU0lfSFNBCQkJCTB4MjI0CisjZGVmaW5lIE5XTF9EU0lfRU5BQkxF X01VTFRfUEtUUwkJMHgyMjgKKyNkZWZpbmUgTldMX0RTSV9WQlAJCQkJMHgyMmMKKyNkZWZpbmUg TldMX0RTSV9WRlAJCQkJMHgyMzAKKyNkZWZpbmUgTldMX0RTSV9CTExQX01PREUJCQkweDIzNAor I2RlZmluZSBOV0xfRFNJX1VTRV9OVUxMX1BLVF9CTExQCQkweDIzOAorI2RlZmluZSBOV0xfRFNJ X1ZBQ1RJVkUJCQkJMHgyM2MKKyNkZWZpbmUgTldMX0RTSV9WQwkJCQkweDI0MAorCisvKiBEU0kg QVBCIFBLVCBjb250cm9sICovCisjZGVmaW5lIE5XTF9EU0lfVFhfUEFZTE9BRAkJCTB4MjgwCisj ZGVmaW5lIE5XTF9EU0lfUEtUX0NPTlRST0wJCQkweDI4NAorI2RlZmluZSBOV0xfRFNJX1NFTkRf UEFDS0VUCQkJMHgyODgKKyNkZWZpbmUgTldMX0RTSV9QS1RfU1RBVFVTCQkJMHgyOGMKKyNkZWZp bmUgTldMX0RTSV9QS1RfRklGT19XUl9MRVZFTAkJMHgyOTAKKyNkZWZpbmUgTldMX0RTSV9QS1Rf RklGT19SRF9MRVZFTAkJMHgyOTQKKyNkZWZpbmUgTldMX0RTSV9SWF9QQVlMT0FECQkJMHgyOTgK KyNkZWZpbmUgTldMX0RTSV9SWF9QS1RfSEVBREVSCQkJMHgyOWMKKworLyogRFNJIElSUSBoYW5k bGluZyAqLworI2RlZmluZSBOV0xfRFNJX0lSUV9TVEFUVVMJCQkweDJhMAorI2RlZmluZSBOV0xf RFNJX1NNX05PVF9JRExFCQkJQklUKDApCisjZGVmaW5lIE5XTF9EU0lfVFhfUEtUX0RPTkUJCQlC SVQoMSkKKyNkZWZpbmUgTldMX0RTSV9EUEhZX0RJUkVDVElPTgkJCUJJVCgyKQorI2RlZmluZSBO V0xfRFNJX1RYX0ZJRk9fT1ZGTFcJCQlCSVQoMykKKyNkZWZpbmUgTldMX0RTSV9UWF9GSUZPX1VE RkxXCQkJQklUKDQpCisjZGVmaW5lIE5XTF9EU0lfUlhfRklGT19PVkZMVwkJCUJJVCg1KQorI2Rl ZmluZSBOV0xfRFNJX1JYX0ZJRk9fVURGTFcJCQlCSVQoNikKKyNkZWZpbmUgTldMX0RTSV9SWF9Q S1RfSERSX1JDVkQJCQlCSVQoNykKKyNkZWZpbmUgTldMX0RTSV9SWF9QS1RfUEFZTE9BRF9EQVRB X1JDVkQJQklUKDgpCisjZGVmaW5lIE5XTF9EU0lfQlRBX1RJTUVPVVQJCQlCSVQoMjkpCisjZGVm aW5lIE5XTF9EU0lfTFBfUlhfVElNRU9VVAkJCUJJVCgzMCkKKyNkZWZpbmUgTldMX0RTSV9IU19U WF9USU1FT1VUCQkJQklUKDMxKQorCisjZGVmaW5lIE5XTF9EU0lfSVJRX1NUQVRVUzIJCQkweDJh NAorI2RlZmluZSBOV0xfRFNJX1NJTkdMRV9CSVRfRUNDX0VSUgkJQklUKDApCisjZGVmaW5lIE5X TF9EU0lfTVVMVElfQklUX0VDQ19FUlIJCUJJVCgxKQorI2RlZmluZSBOV0xfRFNJX0NSQ19FUlIJ CQkJQklUKDIpCisKKyNkZWZpbmUgTldMX0RTSV9JUlFfTUFTSwkJCTB4MmE4CisjZGVmaW5lIE5X TF9EU0lfU01fTk9UX0lETEVfTUFTSwkJQklUKDApCisjZGVmaW5lIE5XTF9EU0lfVFhfUEtUX0RP TkVfTUFTSwkJQklUKDEpCisjZGVmaW5lIE5XTF9EU0lfRFBIWV9ESVJFQ1RJT05fTUFTSwkJQklU KDIpCisjZGVmaW5lIE5XTF9EU0lfVFhfRklGT19PVkZMV19NQVNLCQlCSVQoMykKKyNkZWZpbmUg TldMX0RTSV9UWF9GSUZPX1VERkxXX01BU0sJCUJJVCg0KQorI2RlZmluZSBOV0xfRFNJX1JYX0ZJ Rk9fT1ZGTFdfTUFTSwkJQklUKDUpCisjZGVmaW5lIE5XTF9EU0lfUlhfRklGT19VREZMV19NQVNL CQlCSVQoNikKKyNkZWZpbmUgTldMX0RTSV9SWF9QS1RfSERSX1JDVkRfTUFTSwkJQklUKDcpCisj ZGVmaW5lIE5XTF9EU0lfUlhfUEtUX1BBWUxPQURfREFUQV9SQ1ZEX01BU0sJQklUKDgpCisjZGVm aW5lIE5XTF9EU0lfQlRBX1RJTUVPVVRfTUFTSwkJQklUKDI5KQorI2RlZmluZSBOV0xfRFNJX0xQ X1JYX1RJTUVPVVRfTUFTSwkJQklUKDMwKQorI2RlZmluZSBOV0xfRFNJX0hTX1RYX1RJTUVPVVRf TUFTSwkJQklUKDMxKQorCisjZGVmaW5lIE5XTF9EU0lfSVJRX01BU0syCQkJMHgyYWMKKyNkZWZp bmUgTldMX0RTSV9TSU5HTEVfQklUX0VDQ19FUlJfTUFTSwkJQklUKDApCisjZGVmaW5lIE5XTF9E U0lfTVVMVElfQklUX0VDQ19FUlJfTUFTSwkJQklUKDEpCisjZGVmaW5lIE5XTF9EU0lfQ1JDX0VS Ul9NQVNLCQkJQklUKDIpCisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgbWlwaV9kc2lfaG9zdF9vcHMg bndsX2RzaV9ob3N0X29wczsKKworaXJxcmV0dXJuX3QgbndsX2RzaV9pcnFfaGFuZGxlcihpbnQg aXJxLCB2b2lkICpkYXRhKTsKK2ludCBud2xfZHNpX2VuYWJsZShzdHJ1Y3QgbndsX2RzaSAqZHNp KTsKK2ludCBud2xfZHNpX2Rpc2FibGUoc3RydWN0IG53bF9kc2kgKmRzaSk7CisKKyNlbmRpZiAv KiBfX05XTF9EU0lfSF9fICovCi0tIAoyLjIwLjEKCgoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGlu dXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQu b3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=