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 5B18BCDB474 for ; Tue, 17 Oct 2023 12:56:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=wRtG+df1+5QVSrfxweoKG9VrY613RNTMS0tWGNwJYZM=; b=lUY/xKojrJAueC gdvFPMXpYiPq8IwKrs0gJ/hZ25gHQr3m2z4FVX+8illTu5pPb7JZFv2ceoM7q47SPbBjU4PAv5xoV fwfTsgA9w0iujIXhFoLD8eVsr3d7sYBfLbW1qy6ZCEi8/x3K+KVVfxj3oKNi0I7ZmKK4FiFnkkJbv lSocmBxT82oMnbk995laGEj7oEt7pRMxCPHn8hslE2izOwTC7Mtz+2WT6rUVJOpVZwel7PuJ4TRDU aHdczFKgwaqteLiOTq0tcKCXk65+0leotV1h6krAbkkYI/scYqMF2ndydbw1OF95VvS776G3HL3kL xYY662LXdjDC4QKwI5Dg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qsjcS-00CKqa-1j; Tue, 17 Oct 2023 12:56:20 +0000 Received: from mx1.tq-group.com ([93.104.207.81]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qsjcN-00CKng-0b; Tue, 17 Oct 2023 12:56:19 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tq-group.com; i=@tq-group.com; q=dns/txt; s=key1; t=1697547375; x=1729083375; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=lLcqEjandV7TrWsUfx/5TzzhZmbGiZMsw4Ouv3pAs1s=; b=qfJ66ybsHLWQnRQR1EuYU3yAnMafQX88LjyOd7gIau4VPbUK67l1tw0S Ai3g2rLrmRgaS9F2oKwzkWy7miWHrloE82osIwY0Bihn1JRWEq3BytlzD IHzKmjLFYN4DdzA/G8RYVig56NJEOGlmantO8/EqWNYqZANozvYLWypHf n0GXmPl+WmgM3JiaztJz+sr3tA61HkALhgse2y2bYNKV0tnVcY75KNGHu /0mBJbfqom8iQcmZXtkUNQf2D4ls0bVXLrbT0st5RCoTImcBuZgJDM7o+ 8310DlBYQgeTpcI3Fwss4Yq3jJR0HUbHWyMqiXMcqSsSC6adOSAxMIrPB w==; X-IronPort-AV: E=Sophos;i="6.03,232,1694728800"; d="scan'208";a="33507302" Received: from vtuxmail01.tq-net.de ([10.115.0.20]) by mx1.tq-group.com with ESMTP; 17 Oct 2023 14:56:11 +0200 Received: from steina-w.localnet (steina-w.tq-net.de [10.123.53.18]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by vtuxmail01.tq-net.de (Postfix) with ESMTPSA id 53A1F280082; Tue, 17 Oct 2023 14:56:11 +0200 (CEST) From: Alexander Stein To: dmitry.baryshkov@linaro.org, andrzej.hajda@intel.com, neil.armstrong@linaro.org, Laurent.pinchart@ideasonboard.com, jonas@kwiboo.se, jernej.skrabec@gmail.com, airlied@gmail.com, daniel@ffwll.ch, robh+dt@kernel.org, krzysztof.kozlowski+dt@linaro.org, shawnguo@kernel.org, s.hauer@pengutronix.de, festevam@gmail.com, vkoul@kernel.org, dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-phy@lists.infradead.org, Sandor Yu Cc: kernel@pengutronix.de, linux-imx@nxp.com, Sandor.yu@nxp.com, oliver.brown@nxp.com, sam@ravnborg.org Subject: Re: [PATCH v11 6/7] phy: freescale: Add DisplayPort PHY driver for i.MX8MQ Date: Tue, 17 Oct 2023 14:56:12 +0200 Message-ID: <2101977.bB369e8A3T@steina-w> Organization: TQ-Systems GmbH In-Reply-To: References: MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231017_055615_992416_DF14D751 X-CRM114-Status: GOOD ( 28.02 ) 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 SGkgU2FuZG9yLAoKdGhhbmtzIGZvciB0aGUgcGF0Y2guCgpBbSBEaWVuc3RhZywgMTcuIE9rdG9i ZXIgMjAyMywgMDk6MDQ6MDIgQ0VTVCBzY2hyaWViIFNhbmRvciBZdToKPiBBZGQgQ2FkZW5jZSBI RFAtVFggRGlzcGxheVBvcnQgUEhZIGRyaXZlciBmb3IgaS5NWDhNUQo+IAo+IENhZGVuY2UgSERQ LVRYIFBIWSBjb3VsZCBiZSBwdXQgaW4gZWl0aGVyIERQIG1vZGUgb3IKPiBIRE1JIG1vZGUgYmFz ZSBvbiB0aGUgY29uZmlndXJhdGlvbiBjaG9zZW4uCj4gRGlzcGxheVBvcnQgUEhZIG1vZGUgaXMg Y29uZmlndXJhdGVkIGluIHRoZSBkcml2ZXIuCj4gCj4gU2lnbmVkLW9mZi1ieTogU2FuZG9yIFl1 IDxTYW5kb3IueXVAbnhwLmNvbT4KPiAtLS0KPiB2OS0+djExOgo+ICAqTm8gY2hhbmdlLgo+IAo+ ICBkcml2ZXJzL3BoeS9mcmVlc2NhbGUvS2NvbmZpZyAgICAgICAgICAgICB8ICAxMCArCj4gIGRy aXZlcnMvcGh5L2ZyZWVzY2FsZS9NYWtlZmlsZSAgICAgICAgICAgIHwgICAxICsKPiAgZHJpdmVy cy9waHkvZnJlZXNjYWxlL3BoeS1mc2wtaW14OG1xLWRwLmMgfCA3MjAgKysrKysrKysrKysrKysr KysrKysrKwo+ICAzIGZpbGVzIGNoYW5nZWQsIDczMSBpbnNlcnRpb25zKCspCj4gIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL3BoeS9mcmVlc2NhbGUvcGh5LWZzbC1pbXg4bXEtZHAuYwo+IAo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BoeS9mcmVlc2NhbGUvS2NvbmZpZyBiL2RyaXZlcnMvcGh5 L2ZyZWVzY2FsZS9LY29uZmlnCj4gaW5kZXggODUzOTU4ZmIyYzA2My4uYzM5NzA5ZmQ3MDBhYyAx MDA2NDQKPiAtLS0gYS9kcml2ZXJzL3BoeS9mcmVlc2NhbGUvS2NvbmZpZwo+ICsrKyBiL2RyaXZl cnMvcGh5L2ZyZWVzY2FsZS9LY29uZmlnCj4gQEAgLTM1LDYgKzM1LDE2IEBAIGNvbmZpZyBQSFlf RlNMX0lNWDhNX1BDSUUKPiAgCSAgRW5hYmxlIHRoaXMgdG8gYWRkIHN1cHBvcnQgZm9yIHRoZSBQ Q0lFIFBIWSBhcyBmb3VuZCBvbgo+ICAJICBpLk1YOE0gZmFtaWx5IG9mIFNPQ3MuCj4gCj4gK2Nv bmZpZyBQSFlfRlNMX0lNWDhNUV9EUAo+ICsJdHJpc3RhdGUgIkZyZWVzY2FsZSBpLk1YOE1RIERQ IFBIWSBzdXBwb3J0Igo+ICsJZGVwZW5kcyBvbiBPRiAmJiBIQVNfSU9NRU0KPiArCWRlcGVuZHMg b24gQ09NTU9OX0NMSwo+ICsJc2VsZWN0IEdFTkVSSUNfUEhZCj4gKwlzZWxlY3QgQ0ROU19NSERQ X0hFTFBFUgo+ICsJaGVscAo+ICsJICBFbmFibGUgdGhpcyB0byBzdXBwb3J0IHRoZSBDYWRlbmNl IEhEUFRYIERQIFBIWSBkcml2ZXIKPiArCSAgb24gaS5NWDhNUSBTT0MuCj4gKwo+ICBlbmRpZgo+ IAo+ICBjb25maWcgUEhZX0ZTTF9MWU5YXzI4Rwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BoeS9m cmVlc2NhbGUvTWFrZWZpbGUgYi9kcml2ZXJzL3BoeS9mcmVlc2NhbGUvTWFrZWZpbGUKPiBpbmRl eCBjZWRiMzI4YmM0ZDI4Li40N2U1Mjg1MjA5ZmE4IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvcGh5 L2ZyZWVzY2FsZS9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvcGh5L2ZyZWVzY2FsZS9NYWtlZmls ZQo+IEBAIC0xLDQgKzEsNSBAQAo+ICAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w LW9ubHkKPiArb2JqLSQoQ09ORklHX1BIWV9GU0xfSU1YOE1RX0RQKQkJKz0gcGh5LWZzbC1pbXg4 bXEtZHAubwo+ICBvYmotJChDT05GSUdfUEhZX0ZTTF9JTVg4TVFfVVNCKQkrPSBwaHktZnNsLWlt eDhtcS11c2Iubwo+ICBvYmotJChDT05GSUdfUEhZX01JWEVMX0xWRFNfUEhZKQkrPSBwaHktZnNs LWlteDhxbS1sdmRzLXBoeS5vCj4gIG9iai0kKENPTkZJR19QSFlfTUlYRUxfTUlQSV9EUEhZKQkr PSBwaHktZnNsLWlteDgtbWlwaS1kcGh5Lm8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9waHkvZnJl ZXNjYWxlL3BoeS1mc2wtaW14OG1xLWRwLmMKPiBiL2RyaXZlcnMvcGh5L2ZyZWVzY2FsZS9waHkt ZnNsLWlteDhtcS1kcC5jIG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAw MC4uNWYwZDdkYTE2YjQyMgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL3BoeS9mcmVl c2NhbGUvcGh5LWZzbC1pbXg4bXEtZHAuYwo+IEBAIC0wLDAgKzEsNzIwIEBACj4gKy8vIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKPiArLyoKPiArICogQ2FkZW5jZSBIRFAt VFggRGlzcGxheSBQb3J0IEludGVyZmFjZSAoRFApIFBIWSBkcml2ZXIKPiArICoKPiArICogQ29w eXJpZ2h0IChDKSAyMDIyLCAyMDIzIE5YUCBTZW1pY29uZHVjdG9yLCBJbmMuCj4gKyAqLwo+ICsj aW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgo+ICsjaW5jbHVkZSA8ZHJtL2JyaWRnZS9jZG5zLW1o ZHAtaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KPiArI2luY2x1ZGUgPGxpbnV4 L2tlcm5lbC5oPgo+ICsjaW5jbHVkZSA8bGludXgvcGh5L3BoeS5oPgo+ICsjaW5jbHVkZSA8bGlu dXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9pby5oPgo+ICsjaW5jbHVk ZSA8bGludXgvaW9wb2xsLmg+Cj4gKwo+ICsjZGVmaW5lIEFERFJfUEhZX0FGRQkweDgwMDAwCj4g Kwo+ICsvKiBQSFkgcmVnaXN0ZXJzICovCj4gKyNkZWZpbmUgQ01OX1NTTV9CSUFTX1RNUgkJCTB4 MDAyMgo+ICsjZGVmaW5lIENNTl9QTExTTTBfUExMRU5fVE1SCQkJMHgwMDI5Cj4gKyNkZWZpbmUg Q01OX1BMTFNNMF9QTExQUkVfVE1SCQkJMHgwMDJhCj4gKyNkZWZpbmUgQ01OX1BMTFNNMF9QTExW UkVGX1RNUgkJCTB4MDAyYgo+ICsjZGVmaW5lIENNTl9QTExTTTBfUExMTE9DS19UTVIJCQkweDAw MmMKPiArI2RlZmluZSBDTU5fUExMU00wX1VTRVJfREVGX0NUUkwJCTB4MDAyZgo+ICsjZGVmaW5l IENNTl9QU01fQ0xLX0NUUkwJCQkweDAwNjEKPiArI2RlZmluZSBDTU5fUExMMF9WQ09DQUxfU1RB UlQJCQkweDAwODEKPiArI2RlZmluZSBDTU5fUExMMF9WQ09DQUxfSU5JVF9UTVIJCTB4MDA4NAo+ ICsjZGVmaW5lIENNTl9QTEwwX1ZDT0NBTF9JVEVSX1RNUgkJMHgwMDg1Cj4gKyNkZWZpbmUgQ01O X1BMTDBfSU5URElWCQkJCTB4MDA5NAo+ICsjZGVmaW5lIENNTl9QTEwwX0ZSQUNESVYJCQkweDAw OTUKPiArI2RlZmluZSBDTU5fUExMMF9ISUdIX1RIUgkJCTB4MDA5Ngo+ICsjZGVmaW5lIENNTl9Q TEwwX0RTTV9ESUFHCQkJMHgwMDk3Cj4gKyNkZWZpbmUgQ01OX1BMTDBfU1NfQ1RSTDIJCQkweDAw OTkKPiArI2RlZmluZSBDTU5fSUNBTF9JTklUX1RNUgkJCTB4MDBjNAo+ICsjZGVmaW5lIENNTl9J Q0FMX0lURVJfVE1SCQkJMHgwMGM1Cj4gKyNkZWZpbmUgQ01OX1JYQ0FMX0lOSVRfVE1SCQkJMHgw MGQ0Cj4gKyNkZWZpbmUgQ01OX1JYQ0FMX0lURVJfVE1SCQkJMHgwMGQ1Cj4gKyNkZWZpbmUgQ01O X1RYUFVDQUxfSU5JVF9UTVIJCQkweDAwZTQKPiArI2RlZmluZSBDTU5fVFhQVUNBTF9JVEVSX1RN UgkJCTB4MDBlNQo+ICsjZGVmaW5lIENNTl9UWFBEQ0FMX0lOSVRfVE1SCQkJMHgwMGY0Cj4gKyNk ZWZpbmUgQ01OX1RYUERDQUxfSVRFUl9UTVIJCQkweDAwZjUKPiArI2RlZmluZSBDTU5fSUNBTF9B REpfSU5JVF9UTVIJCQkweDAxMDIKPiArI2RlZmluZSBDTU5fSUNBTF9BREpfSVRFUl9UTVIJCQkw eDAxMDMKPiArI2RlZmluZSBDTU5fUlhfQURKX0lOSVRfVE1SCQkJMHgwMTA2Cj4gKyNkZWZpbmUg Q01OX1JYX0FESl9JVEVSX1RNUgkJCTB4MDEwNwo+ICsjZGVmaW5lIENNTl9UWFBVX0FESl9JTklU X1RNUgkJCTB4MDEwYQo+ICsjZGVmaW5lIENNTl9UWFBVX0FESl9JVEVSX1RNUgkJCTB4MDEwYgo+ ICsjZGVmaW5lIENNTl9UWFBEX0FESl9JTklUX1RNUgkJCTB4MDEwZQo+ICsjZGVmaW5lIENNTl9U WFBEX0FESl9JVEVSX1RNUgkJCTB4MDEwZgo+ICsjZGVmaW5lIENNTl9ESUFHX1BMTDBfRkJIX09W UkQJCQkweDAxYzAKPiArI2RlZmluZSBDTU5fRElBR19QTEwwX0ZCTF9PVlJECQkJMHgwMWMxCj4g KyNkZWZpbmUgQ01OX0RJQUdfUExMMF9PVlJECQkJMHgwMWMyCj4gKyNkZWZpbmUgQ01OX0RJQUdf UExMMF9URVNUX01PREUJCQkweDAxYzQKPiArI2RlZmluZSBDTU5fRElBR19QTEwwX1YySV9UVU5F CQkJMHgwMWM1Cj4gKyNkZWZpbmUgQ01OX0RJQUdfUExMMF9DUF9UVU5FCQkJMHgwMWM2Cj4gKyNk ZWZpbmUgQ01OX0RJQUdfUExMMF9MRl9QUk9HCQkJMHgwMWM3Cj4gKyNkZWZpbmUgQ01OX0RJQUdf UExMMF9QVEFUSVNfVFVORTEJCTB4MDFjOAo+ICsjZGVmaW5lIENNTl9ESUFHX1BMTDBfUFRBVElT X1RVTkUyCQkweDAxYzkKPiArI2RlZmluZSBDTU5fRElBR19IU0NMS19TRUwJCQkweDAxZTAKPiAr I2RlZmluZSBDTU5fRElBR19QRVJfQ0FMX0FESgkJCTB4MDFlYwo+ICsjZGVmaW5lIENNTl9ESUFH X0NBTF9DVFJMCQkJMHgwMWVkCj4gKyNkZWZpbmUgQ01OX0RJQUdfQUNZQQkJCQkweDAxZmYKPiAr I2RlZmluZSBYQ1ZSX1BTTV9SQ1RSTAkJCQkweDQwMDEKPiArI2RlZmluZSBYQ1ZSX1BTTV9DQUxf VE1SCQkJMHg0MDAyCj4gKyNkZWZpbmUgWENWUl9QU01fQTBJTl9UTVIJCQkweDQwMDMKPiArI2Rl ZmluZSBUWF9UWENDX0NBTF9TQ0xSX01VTFRfMAkJCTB4NDA0Nwo+ICsjZGVmaW5lIFRYX1RYQ0Nf Q1BPU1RfTVVMVF8wMF8wCQkJMHg0MDRjCj4gKyNkZWZpbmUgWENWUl9ESUFHX1BMTERSQ19DVFJM CQkJMHg0MGUwCj4gKyNkZWZpbmUgWENWUl9ESUFHX1BMTERSQ19DVFJMCQkJMHg0MGUwCj4gKyNk ZWZpbmUgWENWUl9ESUFHX0hTQ0xLX1NFTAkJCTB4NDBlMQo+ICsjZGVmaW5lIFhDVlJfRElBR19M QU5FX0ZDTV9FTl9NR05fVE1SCQkweDQwZjIKPiArI2RlZmluZSBUWF9QU0NfQTAJCQkJMHg0MTAw Cj4gKyNkZWZpbmUgVFhfUFNDX0ExCQkJCTB4NDEwMQo+ICsjZGVmaW5lIFRYX1BTQ19BMgkJCQkw eDQxMDIKPiArI2RlZmluZSBUWF9QU0NfQTMJCQkJMHg0MTAzCj4gKyNkZWZpbmUgVFhfUkNWREVU X0VOX1RNUgkJCTB4NDEyMgo+ICsjZGVmaW5lIFRYX1JDVkRFVF9TVF9UTVIJCQkweDQxMjMKPiAr I2RlZmluZSBUWF9ESUFHX0JHUkVGX1BSRURSVl9ERUxBWQkJMHg0MWU3Cj4gKyNkZWZpbmUgVFhf RElBR19CR1JFRl9QUkVEUlZfREVMQVkJCTB4NDFlNwo+ICsjZGVmaW5lIFRYX0RJQUdfQUNZQV8w CQkJCTB4NDFmZgo+ICsjZGVmaW5lIFRYX0RJQUdfQUNZQV8xCQkJCTB4NDNmZgo+ICsjZGVmaW5l IFRYX0RJQUdfQUNZQV8yCQkJCTB4NDVmZgo+ICsjZGVmaW5lIFRYX0RJQUdfQUNZQV8zCQkJCTB4 NDdmZgo+ICsjZGVmaW5lIFRYX0FOQV9DVFJMX1JFR18xCQkJMHg1MDIwCj4gKyNkZWZpbmUgVFhf QU5BX0NUUkxfUkVHXzIJCQkweDUwMjEKPiArI2RlZmluZSBUWF9ESUdfQ1RSTF9SRUdfMQkJCTB4 NTAyMwo+ICsjZGVmaW5lIFRYX0RJR19DVFJMX1JFR18yCQkJMHg1MDI0Cj4gKyNkZWZpbmUgVFhE QV9DWUFfQVVYREFfQ1lBCQkJMHg1MDI1Cj4gKyNkZWZpbmUgVFhfQU5BX0NUUkxfUkVHXzMJCQkw eDUwMjYKPiArI2RlZmluZSBUWF9BTkFfQ1RSTF9SRUdfNAkJCTB4NTAyNwo+ICsjZGVmaW5lIFRY X0FOQV9DVFJMX1JFR181CQkJMHg1MDI5Cj4gKyNkZWZpbmUgUlhfUFNDX0EwCQkJCTB4ODAwMAo+ ICsjZGVmaW5lIFJYX1BTQ19DQUwJCQkJMHg4MDA2Cj4gKyNkZWZpbmUgUEhZX0hEUF9NT0RFX0NU UkwJCQkweGMwMDgKPiArI2RlZmluZSBQSFlfSERQX0NMS19DVEwJCQkJMHhjMDA5Cj4gKyNkZWZp bmUgUEhZX1BNQV9DTU5fQ1RSTDEJCQkweGM4MDAKPiArCj4gKy8qIFBIWV9QTUFfQ01OX0NUUkwx ICovCj4gKyNkZWZpbmUgQ01BX1JFRl9DTEtfU0VMX01BU0sJCQlHRU5NQVNLKDYsIDQpCj4gKyNk ZWZpbmUgQ01BX1JFRl9DTEtfUkNWX0VOX01BU0sJCQlCSVQoMykKPiArI2RlZmluZSBDTUFfUkVG X0NMS19SQ1ZfRU4JCQkxCj4gKwo+ICsvKiBQSFlfSERQX0NMS19DVEwgKi8KPiArI2RlZmluZSBQ TExfREFUQV9SQVRFX0NMS19ESVZfTUFTSwkJR0VOTUFTSygxNSwgOCkKPiArI2RlZmluZSBQTExf REFUQV9SQVRFX0NMS19ESVZfSEJSCQkweDI0Cj4gKyNkZWZpbmUgUExMX0RBVEFfUkFURV9DTEtf RElWX0hCUjIJCTB4MTIKPiArI2RlZmluZSBQTExfQ0xLX0VOX0FDSwkJCQlCSVQoMykKPiArI2Rl ZmluZSBQTExfQ0xLX0VOCQkJCUJJVCgyKQo+ICsjZGVmaW5lIFBMTF9SRUFEWQkJCQlCSVQoMSkK PiArI2RlZmluZSBQTExfRU4JCQkJCUJJVCgwKQo+ICsKPiArLyogQ01OX0RJQUdfSFNDTEtfU0VM ICovCj4gKyNkZWZpbmUgSFNDTEsxX1NFTF9NQVNLCQkJCUdFTk1BU0soNSwgNCkKPiArI2RlZmlu ZSBIU0NMSzBfU0VMX01BU0sJCQkJR0VOTUFTSygxLCAwKQo+ICsjZGVmaW5lIEhTQ0xLX1BMTDBf RElWMgkJCQkxCj4gKwo+ICsvKiBYQ1ZSX0RJQUdfSFNDTEtfU0VMICovCj4gKyNkZWZpbmUgSFND TEtfU0VMX01PREUzX01BU0sJCQlHRU5NQVNLKDEzLCAxMikKPiArI2RlZmluZSBIU0NMS19TRUxf TU9ERTNfSFNDTEsxCQkJMQo+ICsKPiArLyogWENWUl9ESUFHX1BMTERSQ19DVFJMICovCj4gKyNk ZWZpbmUgRFBMTF9DTEtfU0VMX01PREUzCQkJQklUKDE0KQo+ICsjZGVmaW5lIERQTExfREFUQV9S QVRFX0RJVl9NT0RFM19NQVNLCQlHRU5NQVNLKDEzLCAxMikKPiArCj4gKy8qIFBIWV9IRFBfTU9E RV9DVFJMICovCj4gKyNkZWZpbmUgUE9XRVJfU1RBVEVfQTNfQUNLCQkJQklUKDcpCj4gKyNkZWZp bmUgUE9XRVJfU1RBVEVfQTJfQUNLCQkJQklUKDYpCj4gKyNkZWZpbmUgUE9XRVJfU1RBVEVfQTFf QUNLCQkJQklUKDUpCj4gKyNkZWZpbmUgUE9XRVJfU1RBVEVfQTBfQUNLCQkJQklUKDQpCj4gKyNk ZWZpbmUgUE9XRVJfU1RBVEVfQTMJCQkJQklUKDMpCj4gKyNkZWZpbmUgUE9XRVJfU1RBVEVfQTIJ CQkJQklUKDIpCj4gKyNkZWZpbmUgUE9XRVJfU1RBVEVfQTEJCQkJQklUKDEpCj4gKyNkZWZpbmUg UE9XRVJfU1RBVEVfQTAJCQkJQklUKDApCj4gKwo+ICsjZGVmaW5lIFJFRl9DTEtfMjdNSFoJCTI3 MDAwMDAwCj4gKwo+ICtlbnVtIGRwX2xpbmtfcmF0ZSB7Cj4gKwlSQVRFXzFfNiA9IDE2MjAwMCwK PiArCVJBVEVfMl8xID0gMjE2MDAwLAo+ICsJUkFURV8yXzQgPSAyNDMwMDAsCj4gKwlSQVRFXzJf NyA9IDI3MDAwMCwKPiArCVJBVEVfM18yID0gMzI0MDAwLAo+ICsJUkFURV80XzMgPSA0MzIwMDAs Cj4gKwlSQVRFXzVfNCA9IDU0MDAwMCwKPiArCVJBVEVfOF8xID0gODEwMDAwLAoKUkFURV84XzEg aXMgdW51c2VkLgoKPiArfTsKPiArCj4gKyNkZWZpbmUgTUFYX0xJTktfUkFURSBSQVRFXzVfNAo+ ICsKPiArc3RydWN0IHBoeV9wbGxfcmVnIHsKPiArCXUxNiB2YWxbN107Cj4gKwl1MzIgYWRkcjsK PiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5X3BsbF9yZWcgcGh5X3BsbF8yN21f Y2ZnW10gPSB7Cj4gKwkvKiAgMS42MiAgICAyLjE2ICAgIDIuNDMgICAgMi43ICAgICAzLjI0ICAg IDQuMzIgICAgNS40ICAgICAgCnJlZ2lzdGVyCj4gYWRkcmVzcyAqLyArCXt7IDB4MDEwZSwgMHgw MTBlLCAweDAxMGUsIDB4MDEwZSwgMHgwMTBlLCAweDAxMGUsIDB4MDEwZSAKfSwKPiBDTU5fUExM MF9WQ09DQUxfSU5JVF9UTVIgfSwgKwl7eyAweDAwMWIsIDB4MDAxYiwgMHgwMDFiLCAweDAwMWIs IAoweDAwMWIsCj4gMHgwMDFiLCAweDAwMWIgfSwgQ01OX1BMTDBfVkNPQ0FMX0lURVJfVE1SIH0s ICsJe3sgMHgzMGI5LCAweDMwODcsIDB4MzA5NiwKPiAweDMwYjQsIDB4MzBiOSwgMHgzMDg3LCAw eDMwYjQgfSwgQ01OX1BMTDBfVkNPQ0FMX1NUQVJUIH0sICsJe3sgCjB4MDA3NywKPiAweDAwOWYs IDB4MDBiMywgMHgwMGM3LCAweDAwNzcsIDB4MDA5ZiwgMHgwMGM3IH0sIENNTl9QTEwwX0lOVERJ ViB9LCArCQp7ewo+IDB4ZjlkYSwgMHhmN2NkLCAweGY2YzcsIDB4ZjVjMSwgMHhmOWRhLCAweGY3 Y2QsIDB4ZjVjMSB9LCBDTU5fUExMMF9GUkFDRElWCj4gfSwgKwl7eyAweDAwMWUsIDB4MDAyOCwg MHgwMDJkLCAweDAwMzIsIDB4MDAxZSwgMHgwMDI4LCAweDAwMzIgfSwKPiBDTU5fUExMMF9ISUdI X1RIUiB9LCArCXt7IDB4MDAyMCwgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAKMHgw MDIwLAo+IDB4MDAyMCB9LCBDTU5fUExMMF9EU01fRElBRyB9LCArCXt7IDB4MDAwMCwgMHgxMDAw LCAweDEwMDAsIDB4MTAwMCwgCjB4MDAwMCwKPiAweDEwMDAsIDB4MTAwMCB9LCBDTU5fUExMU00w X1VTRVJfREVGX0NUUkwgfSwgKwl7eyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAo+IDB4MDAwMCwg MHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCBDTU5fRElBR19QTEwwX09WUkQgfSwgKwl7eyAweDAw MDAsCj4gMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCBD TU5fRElBR19QTEwwX0ZCSF9PVlJEIH0sCj4gKwl7eyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAw eDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwKPiBDTU5fRElBR19QTEwwX0ZCTF9PVlJE IH0sICsJe3sgMHgwMDA2LCAweDAwMDcsIDB4MDAwNywgMHgwMDA3LCAweDAwMDYsCj4gMHgwMDA3 LCAweDAwMDcgfSwgQ01OX0RJQUdfUExMMF9WMklfVFVORSB9LCArCXt7IDB4MDA0MywgMHgwMDQz LCAweDAwNDMsCj4gMHgwMDQyLCAweDAwNDMsIDB4MDA0MywgMHgwMDQyIH0sIENNTl9ESUFHX1BM TDBfQ1BfVFVORSB9LCArCXt7IAoweDAwMDgsCj4gMHgwMDA4LCAweDAwMDgsIDB4MDAwOCwgMHgw MDA4LCAweDAwMDgsIDB4MDAwOCB9LCBDTU5fRElBR19QTEwwX0xGX1BST0cgfSwKPiArCXt7IDB4 MDEwMCwgMHgwMDAxLCAweDAwMDEsIDB4MDAwMSwgMHgwMTAwLCAweDAwMDEsIDB4MDAwMSB9LAo+ IENNTl9ESUFHX1BMTDBfUFRBVElTX1RVTkUxIH0sICsJe3sgMHgwMDA3LCAweDAwMDEsIDB4MDAw MSwgMHgwMDAxLCAKMHgwMDA3LAo+IDB4MDAwMSwgMHgwMDAxIH0sIENNTl9ESUFHX1BMTDBfUFRB VElTX1RVTkUyIH0sICsJe3sgMHgwMDIwLCAweDAwMjAsCj4gMHgwMDIwLCAweDAwMjAsIDB4MDAy MCwgMHgwMDIwLCAweDAwMjAgfSwgQ01OX0RJQUdfUExMMF9URVNUX01PREV9LCArCXt7Cj4gMHgw MDE2LCAweDAwMTYsIDB4MDAxNiwgMHgwMDE2LCAweDAwMTYsIDB4MDAxNiwgMHgwMDE2IH0sIENN Tl9QU01fQ0xLX0NUUkwKPiB9ICt9Owo+ICsKPiArc3RydWN0IGNkbnNfaGRwdHhfZHBfcGh5IHsK PiArCXN0cnVjdCBjZG5zX21oZHBfYmFzZSBiYXNlOwo+ICsKPiArCXZvaWQgX19pb21lbSAqcmVn czsJLyogRFBUWCByZWdpc3RlcnMgYmFzZSAqLwo+ICsJc3RydWN0IGRldmljZSAqZGV2Owo+ICsJ c3RydWN0IHBoeSAqcGh5Owo+ICsJc3RydWN0IG11dGV4IG1ib3hfbXV0ZXg7CS8qIG11dGV4IHRv IHByb3RlY3QgbWFpbGJveCAqLwo+ICsJc3RydWN0IGNsayAqcmVmX2NsaywgKmFwYl9jbGs7Cj4g Kwl1MzIgcmVmX2Nsa19yYXRlOwo+ICsJdTMyIG51bV9sYW5lczsKPiArCXUzMiBsaW5rX3JhdGU7 Cj4gKwlib29sIHBvd2VyX3VwOwo+ICt9Owo+ICsKPiArc3RhdGljIGludCBjZG5zX3BoeV9yZWdf d3JpdGUoc3RydWN0IGNkbnNfaGRwdHhfZHBfcGh5ICpjZG5zX3BoeSwgdTMyIGFkZHIsCj4gdTMy IHZhbCkgK3sKPiArCXJldHVybiBjZG5zX21oZHBfcmVnX3dyaXRlKCZjZG5zX3BoeS0+YmFzZSwg QUREUl9QSFlfQUZFICsgKGFkZHIgPDwgCjIpLAo+IHZhbCk7ICt9Cj4gKwo+ICtzdGF0aWMgdTMy IGNkbnNfcGh5X3JlZ19yZWFkKHN0cnVjdCBjZG5zX2hkcHR4X2RwX3BoeSAqY2Ruc19waHksIHUz MiBhZGRyKQo+ICt7Cj4gKwl1MzIgcmVnMzI7Cj4gKwo+ICsJY2Ruc19taGRwX3JlZ19yZWFkKCZj ZG5zX3BoeS0+YmFzZSwgQUREUl9QSFlfQUZFICsgKGFkZHIgPDwgMiksIAomcmVnMzIpOwo+ICsJ cmV0dXJuIHJlZzMyOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGxpbmtfcmF0ZV9pbmRleCh1MzIg cmF0ZSkKPiArewo+ICsJc3dpdGNoIChyYXRlKSB7Cj4gKwljYXNlIFJBVEVfMV82Ogo+ICsJCXJl dHVybiAwOwo+ICsJY2FzZSBSQVRFXzJfMToKPiArCQlyZXR1cm4gMTsKPiArCWNhc2UgUkFURV8y XzQ6Cj4gKwkJcmV0dXJuIDI7Cj4gKwljYXNlIFJBVEVfMl83Ogo+ICsJCXJldHVybiAzOwo+ICsJ Y2FzZSBSQVRFXzNfMjoKPiArCQlyZXR1cm4gNDsKPiArCWNhc2UgUkFURV80XzM6Cj4gKwkJcmV0 dXJuIDU7Cj4gKwljYXNlIFJBVEVfNV80Ogo+ICsJCXJldHVybiA2Owo+ICsJZGVmYXVsdDoKPiAr CQlyZXR1cm4gLTE7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaGRwdHhfZHBfY2xrX2Vu YWJsZShzdHJ1Y3QgY2Ruc19oZHB0eF9kcF9waHkgKmNkbnNfcGh5KQo+ICt7Cj4gKwlzdHJ1Y3Qg ZGV2aWNlICpkZXYgPSBjZG5zX3BoeS0+ZGV2Owo+ICsJdTMyIHJlZl9jbGtfcmF0ZTsKPiArCWlu dCByZXQ7Cj4gKwo+ICsJY2Ruc19waHktPnJlZl9jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAicmVm Iik7Cj4gKwlpZiAoSVNfRVJSKGNkbnNfcGh5LT5yZWZfY2xrKSkgewo+ICsJCWRldl9lcnIoZGV2 LCAicGh5IHJlZiBjbG9jayBub3QgZm91bmRcbiIpOwo+ICsJCXJldHVybiBQVFJfRVJSKGNkbnNf cGh5LT5yZWZfY2xrKTsKPiArCX0KPiArCj4gKwljZG5zX3BoeS0+YXBiX2NsayA9IGRldm1fY2xr X2dldChkZXYsICJhcGIiKTsKPiArCWlmIChJU19FUlIoY2Ruc19waHktPmFwYl9jbGspKSB7Cj4g KwkJZGV2X2VycihkZXYsICJwaHkgYXBiIGNsb2NrIG5vdCBmb3VuZFxuIik7Cj4gKwkJcmV0dXJu IFBUUl9FUlIoY2Ruc19waHktPmFwYl9jbGspOwo+ICsJfQo+ICsKPiArCXJldCA9IGNsa19wcmVw YXJlX2VuYWJsZShjZG5zX3BoeS0+cmVmX2Nsayk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJZGV2X2Vy cihjZG5zX3BoeS0+ZGV2LCAiRmFpbGVkIHRvIHByZXBhcmUgcmVmIGNsb2NrXG4iKTsKPiArCQly ZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCXJlZl9jbGtfcmF0ZSA9IGNsa19nZXRfcmF0ZShjZG5z X3BoeS0+cmVmX2Nsayk7Cj4gKwlpZiAoIXJlZl9jbGtfcmF0ZSkgewo+ICsJCWRldl9lcnIoY2Ru c19waHktPmRldiwgIkZhaWxlZCB0byBnZXQgcmVmIGNsb2NrIHJhdGVcbiIpOwo+ICsJCWdvdG8g ZXJyX3JlZl9jbGs7Cj4gKwl9Cj4gKwo+ICsJaWYgKHJlZl9jbGtfcmF0ZSA9PSBSRUZfQ0xLXzI3 TUhaKSB7Cj4gKwkJY2Ruc19waHktPnJlZl9jbGtfcmF0ZSA9IHJlZl9jbGtfcmF0ZTsKPiArCX0g ZWxzZSB7Cj4gKwkJZGV2X2VycihjZG5zX3BoeS0+ZGV2LCAiTm90IHN1cHBvcnQgUmVmIENsb2Nr IFJhdGUoJWRIeikKXG4iLAo+IHJlZl9jbGtfcmF0ZSk7ICsJCWdvdG8gZXJyX3JlZl9jbGs7Cj4g Kwl9Cj4gKwo+ICsJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGNkbnNfcGh5LT5hcGJfY2xrKTsK PiArCWlmIChyZXQpIHsKPiArCQlkZXZfZXJyKGNkbnNfcGh5LT5kZXYsICJGYWlsZWQgdG8gcHJl cGFyZSBhcGIgY2xvY2tcbiIpOwo+ICsJCWdvdG8gZXJyX3JlZl9jbGs7Cj4gKwl9Cj4gKwo+ICsJ cmV0dXJuIDA7Cj4gKwo+ICtlcnJfcmVmX2NsazoKPiArCWNsa19kaXNhYmxlX3VucHJlcGFyZShj ZG5zX3BoeS0+cmVmX2Nsayk7Cj4gKwlyZXR1cm4gLUVJTlZBTDsKPiArfQo+ICsKPiArc3RhdGlj IHZvaWQgaGRwdHhfZHBfY2xrX2Rpc2FibGUoc3RydWN0IGNkbnNfaGRwdHhfZHBfcGh5ICpjZG5z X3BoeSkKPiArewo+ICsJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGNkbnNfcGh5LT5yZWZfY2xrKTsK PiArCWNsa19kaXNhYmxlX3VucHJlcGFyZShjZG5zX3BoeS0+YXBiX2Nsayk7Cj4gK30KPiArCj4g K3N0YXRpYyB2b2lkIGhkcHR4X2RwX2F1eF9jZmcoc3RydWN0IGNkbnNfaGRwdHhfZHBfcGh5ICpj ZG5zX3BoeSkKPiArewo+ICsJLyogUG93ZXIgdXAgQXV4ICovCj4gKwljZG5zX3BoeV9yZWdfd3Jp dGUoY2Ruc19waHksIFRYREFfQ1lBX0FVWERBX0NZQSwgMSk7Cj4gKwo+ICsJY2Ruc19waHlfcmVn X3dyaXRlKGNkbnNfcGh5LCBUWF9ESUdfQ1RSTF9SRUdfMSwgMHgzKTsKPiArCW5kZWxheSgxNTAp Owo+ICsJY2Ruc19waHlfcmVnX3dyaXRlKGNkbnNfcGh5LCBUWF9ESUdfQ1RSTF9SRUdfMiwgMzYp Owo+ICsJbmRlbGF5KDE1MCk7Cj4gKwljZG5zX3BoeV9yZWdfd3JpdGUoY2Ruc19waHksIFRYX0FO QV9DVFJMX1JFR18yLCAweDAxMDApOwo+ICsJbmRlbGF5KDE1MCk7Cj4gKwljZG5zX3BoeV9yZWdf d3JpdGUoY2Ruc19waHksIFRYX0FOQV9DVFJMX1JFR18yLCAweDAzMDApOwo+ICsJbmRlbGF5KDE1 MCk7Cj4gKwljZG5zX3BoeV9yZWdfd3JpdGUoY2Ruc19waHksIFRYX0FOQV9DVFJMX1JFR18zLCAw eDAwMDApOwo+ICsJbmRlbGF5KDE1MCk7Cj4gKwljZG5zX3BoeV9yZWdfd3JpdGUoY2Ruc19waHks IFRYX0FOQV9DVFJMX1JFR18xLCAweDIwMDgpOwo+ICsJbmRlbGF5KDE1MCk7Cj4gKwljZG5zX3Bo eV9yZWdfd3JpdGUoY2Ruc19waHksIFRYX0FOQV9DVFJMX1JFR18xLCAweDIwMTgpOwo+ICsJbmRl bGF5KDE1MCk7Cj4gKwljZG5zX3BoeV9yZWdfd3JpdGUoY2Ruc19waHksIFRYX0FOQV9DVFJMX1JF R18xLCAweGEwMTgpOwo+ICsJbmRlbGF5KDE1MCk7Cj4gKwljZG5zX3BoeV9yZWdfd3JpdGUoY2Ru c19waHksIFRYX0FOQV9DVFJMX1JFR18yLCAweDAzMGMpOwo+ICsJbmRlbGF5KDE1MCk7Cj4gKwlj ZG5zX3BoeV9yZWdfd3JpdGUoY2Ruc19waHksIFRYX0FOQV9DVFJMX1JFR181LCAweDAwMDApOwo+ ICsJbmRlbGF5KDE1MCk7Cj4gKwljZG5zX3BoeV9yZWdfd3JpdGUoY2Ruc19waHksIFRYX0FOQV9D VFJMX1JFR180LCAweDEwMDEpOwo+ICsJbmRlbGF5KDE1MCk7Cj4gKwljZG5zX3BoeV9yZWdfd3Jp dGUoY2Ruc19waHksIFRYX0FOQV9DVFJMX1JFR18xLCAweGEwOTgpOwo+ICsJbmRlbGF5KDE1MCk7 Cj4gKwljZG5zX3BoeV9yZWdfd3JpdGUoY2Ruc19waHksIFRYX0FOQV9DVFJMX1JFR18xLCAweGEx OTgpOwo+ICsJbmRlbGF5KDE1MCk7Cj4gKwljZG5zX3BoeV9yZWdfd3JpdGUoY2Ruc19waHksIFRY X0FOQV9DVFJMX1JFR18yLCAweDAzMGQpOwo+ICsJbmRlbGF5KDE1MCk7Cj4gKwljZG5zX3BoeV9y ZWdfd3JpdGUoY2Ruc19waHksIFRYX0FOQV9DVFJMX1JFR18yLCAweDAzMGYpOwo+ICt9Cj4gKwo+ ICsvKiBQTUEgY29tbW9uIGNvbmZpZ3VyYXRpb24gZm9yIDI3TUh6ICovCj4gK3N0YXRpYyB2b2lk IGhkcHR4X2RwX3BoeV9wbWFfY21uX2NmZ18yN21oeihzdHJ1Y3QgY2Ruc19oZHB0eF9kcF9waHkK PiAqY2Ruc19waHkpICt7Cj4gKwl1MzIgbnVtX2xhbmVzID0gY2Ruc19waHktPm51bV9sYW5lczsK PiArCXUxNiB2YWw7Cj4gKwlpbnQgazsKPiArCj4gKwkvKiBFbmFibGUgUE1BIGlucHV0IHJlZiBj bGsoQ01OX1JFRl9DTEtfUkNWX0VOKSAqLwo+ICsJdmFsID0gY2Ruc19waHlfcmVnX3JlYWQoY2Ru c19waHksIFBIWV9QTUFfQ01OX0NUUkwxKTsKPiArCXZhbCAmPSB+Q01BX1JFRl9DTEtfUkNWX0VO X01BU0s7Cj4gKwl2YWwgfD0gRklFTERfUFJFUChDTUFfUkVGX0NMS19SQ1ZfRU5fTUFTSywgQ01B X1JFRl9DTEtfUkNWX0VOKTsKPiArCWNkbnNfcGh5X3JlZ193cml0ZShjZG5zX3BoeSwgUEhZX1BN QV9DTU5fQ1RSTDEsIHZhbCk7Cj4gKwo+ICsJLyogU3RhcnR1cCBzdGF0ZSBtYWNoaW5lIHJlZ2lz dGVycyAqLwo+ICsJY2Ruc19waHlfcmVnX3dyaXRlKGNkbnNfcGh5LCBDTU5fU1NNX0JJQVNfVE1S LCAweDAwODcpOwo+ICsJY2Ruc19waHlfcmVnX3dyaXRlKGNkbnNfcGh5LCBDTU5fUExMU00wX1BM TEVOX1RNUiwgMHgwMDFiKTsKPiArCWNkbnNfcGh5X3JlZ193cml0ZShjZG5zX3BoeSwgQ01OX1BM TFNNMF9QTExQUkVfVE1SLCAweDAwMzYpOwo+ICsJY2Ruc19waHlfcmVnX3dyaXRlKGNkbnNfcGh5 LCBDTU5fUExMU00wX1BMTFZSRUZfVE1SLCAweDAwMWIpOwo+ICsJY2Ruc19waHlfcmVnX3dyaXRl KGNkbnNfcGh5LCBDTU5fUExMU00wX1BMTExPQ0tfVE1SLCAweDAwNmMpOwo+ICsKPiArCS8qIEN1 cnJlbnQgY2FsaWJyYXRpb24gcmVnaXN0ZXJzICovCj4gKwljZG5zX3BoeV9yZWdfd3JpdGUoY2Ru c19waHksIENNTl9JQ0FMX0lOSVRfVE1SLCAweDAwNDQpOwo+ICsJY2Ruc19waHlfcmVnX3dyaXRl KGNkbnNfcGh5LCBDTU5fSUNBTF9JVEVSX1RNUiwgMHgwMDA2KTsKPiArCWNkbnNfcGh5X3JlZ193 cml0ZShjZG5zX3BoeSwgQ01OX0lDQUxfQURKX0lOSVRfVE1SLCAweDAwMjIpOwo+ICsJY2Ruc19w aHlfcmVnX3dyaXRlKGNkbnNfcGh5LCBDTU5fSUNBTF9BREpfSVRFUl9UTVIsIDB4MDAwNik7Cj4g Kwo+ICsJLyogUmVzaXN0b3IgY2FsaWJyYXRpb24gcmVnaXN0ZXJzICovCj4gKwljZG5zX3BoeV9y ZWdfd3JpdGUoY2Ruc19waHksIENNTl9UWFBVQ0FMX0lOSVRfVE1SLCAweDAwMjIpOwo+ICsJY2Ru c19waHlfcmVnX3dyaXRlKGNkbnNfcGh5LCBDTU5fVFhQVUNBTF9JVEVSX1RNUiwgMHgwMDA2KTsK PiArCWNkbnNfcGh5X3JlZ193cml0ZShjZG5zX3BoeSwgQ01OX1RYUFVfQURKX0lOSVRfVE1SLCAw eDAwMjIpOwo+ICsJY2Ruc19waHlfcmVnX3dyaXRlKGNkbnNfcGh5LCBDTU5fVFhQVV9BREpfSVRF Ul9UTVIsIDB4MDAwNik7Cj4gKwljZG5zX3BoeV9yZWdfd3JpdGUoY2Ruc19waHksIENNTl9UWFBE Q0FMX0lOSVRfVE1SLCAweDAwMjIpOwo+ICsJY2Ruc19waHlfcmVnX3dyaXRlKGNkbnNfcGh5LCBD TU5fVFhQRENBTF9JVEVSX1RNUiwgMHgwMDA2KTsKPiArCWNkbnNfcGh5X3JlZ193cml0ZShjZG5z X3BoeSwgQ01OX1RYUERfQURKX0lOSVRfVE1SLCAweDAwMjIpOwo+ICsJY2Ruc19waHlfcmVnX3dy aXRlKGNkbnNfcGh5LCBDTU5fVFhQRF9BREpfSVRFUl9UTVIsIDB4MDAwNik7Cj4gKwljZG5zX3Bo eV9yZWdfd3JpdGUoY2Ruc19waHksIENNTl9SWENBTF9JTklUX1RNUiwgMHgwMDIyKTsKPiArCWNk bnNfcGh5X3JlZ193cml0ZShjZG5zX3BoeSwgQ01OX1JYQ0FMX0lURVJfVE1SLCAweDAwMDYpOwo+ ICsJY2Ruc19waHlfcmVnX3dyaXRlKGNkbnNfcGh5LCBDTU5fUlhfQURKX0lOSVRfVE1SLCAweDAw MjIpOwo+ICsJY2Ruc19waHlfcmVnX3dyaXRlKGNkbnNfcGh5LCBDTU5fUlhfQURKX0lURVJfVE1S LCAweDAwMDYpOwo+ICsKPiArCWZvciAoayA9IDA7IGsgPCBudW1fbGFuZXM7IGsgPSBrICsgMSkg ewo+ICsJCS8qIFBvd2VyIHN0YXRlIG1hY2hpbmUgcmVnaXN0ZXJzICovCj4gKwkJY2Ruc19waHlf cmVnX3dyaXRlKGNkbnNfcGh5LCBYQ1ZSX1BTTV9DQUxfVE1SICB8IChrIDw8IDkpLCAKMHgwMTZk KTsKPiArCQljZG5zX3BoeV9yZWdfd3JpdGUoY2Ruc19waHksIFhDVlJfUFNNX0EwSU5fVE1SIHwg KGsgPDwgOSksIAoweDAxNmQpOwo+ICsJCS8qIFRyYW5zY2VpdmVyIGNvbnRyb2wgYW5kIGRpYWdu b3N0aWMgcmVnaXN0ZXJzICovCj4gKwkJY2Ruc19waHlfcmVnX3dyaXRlKGNkbnNfcGh5LCBYQ1ZS X0RJQUdfTEFORV9GQ01fRU5fTUdOX1RNUiAKfCAoayA8PCA5KSwKPiAweDAwYTIpOyArCQljZG5z X3BoeV9yZWdfd3JpdGUoY2Ruc19waHksIApUWF9ESUFHX0JHUkVGX1BSRURSVl9ERUxBWSB8IChr IDw8Cj4gOSksIDB4MDA5Nyk7ICsJCS8qIFRyYW5zbWl0dGVyIHJlY2VpdmVyIGRldGVjdCByZWdp c3RlcnMgKi8KPiArCQljZG5zX3BoeV9yZWdfd3JpdGUoY2Ruc19waHksIFRYX1JDVkRFVF9FTl9U TVIgfCAoayA8PCA5KSwgCjB4MGE4Yyk7Cj4gKwkJY2Ruc19waHlfcmVnX3dyaXRlKGNkbnNfcGh5 LCBUWF9SQ1ZERVRfU1RfVE1SIHwgKGsgPDwgOSksIAoweDAwMzYpOwo+ICsJfQo+ICsKPiArCWNk bnNfcGh5X3JlZ193cml0ZShjZG5zX3BoeSwgVFhfRElBR19BQ1lBXzAsIDEpOwo+ICsJY2Ruc19w aHlfcmVnX3dyaXRlKGNkbnNfcGh5LCBUWF9ESUFHX0FDWUFfMSwgMSk7Cj4gKwljZG5zX3BoeV9y ZWdfd3JpdGUoY2Ruc19waHksIFRYX0RJQUdfQUNZQV8yLCAxKTsKPiArCWNkbnNfcGh5X3JlZ193 cml0ZShjZG5zX3BoeSwgVFhfRElBR19BQ1lBXzMsIDEpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9p ZCBoZHB0eF9kcF9waHlfcG1hX2Ntbl9wbGwwXzI3bWh6KHN0cnVjdCBjZG5zX2hkcHR4X2RwX3Bo eQo+ICpjZG5zX3BoeSkgK3sKPiArCXUzMiBudW1fbGFuZXMgPSBjZG5zX3BoeS0+bnVtX2xhbmVz Owo+ICsJdTMyIGxpbmtfcmF0ZSA9IGNkbnNfcGh5LT5saW5rX3JhdGU7Cj4gKwl1MTYgdmFsOwo+ ICsJaW50IGluZGV4LCBpLCBrOwo+ICsKPiArCS8qIERQIFBMTCBkYXRhIHJhdGUgMC8xIGNsb2Nr IGRpdmlkZXIgdmFsdWUgKi8KPiArCXZhbCA9IGNkbnNfcGh5X3JlZ19yZWFkKGNkbnNfcGh5LCBQ SFlfSERQX0NMS19DVEwpOwo+ICsJdmFsICY9IH5QTExfREFUQV9SQVRFX0NMS19ESVZfTUFTSzsK PiArCWlmIChsaW5rX3JhdGUgPD0gUkFURV8yXzcpCj4gKwkJdmFsIHw9IEZJRUxEX1BSRVAoUExM X0RBVEFfUkFURV9DTEtfRElWX01BU0ssCj4gKwkJCQkgIFBMTF9EQVRBX1JBVEVfQ0xLX0RJVl9I QlIpOwo+ICsJZWxzZQo+ICsJCXZhbCB8PSBGSUVMRF9QUkVQKFBMTF9EQVRBX1JBVEVfQ0xLX0RJ Vl9NQVNLLAo+ICsJCQkJICBQTExfREFUQV9SQVRFX0NMS19ESVZfSEJSMik7Cj4gKwljZG5zX3Bo eV9yZWdfd3JpdGUoY2Ruc19waHksIFBIWV9IRFBfQ0xLX0NUTCwgdmFsKTsKPiArCj4gKwkvKiBI aWdoIHNwZWVkIGNsb2NrIDAvMSBkaXYgKi8KPiArCXZhbCA9IGNkbnNfcGh5X3JlZ19yZWFkKGNk bnNfcGh5LCBDTU5fRElBR19IU0NMS19TRUwpOwo+ICsJdmFsICY9IH4oSFNDTEsxX1NFTF9NQVNL IHwgSFNDTEswX1NFTF9NQVNLKTsKPiArCWlmIChsaW5rX3JhdGUgPD0gUkFURV8yXzcpIHsKPiAr CQl2YWwgfD0gRklFTERfUFJFUChIU0NMSzFfU0VMX01BU0ssIEhTQ0xLX1BMTDBfRElWMik7Cj4g KwkJdmFsIHw9IEZJRUxEX1BSRVAoSFNDTEswX1NFTF9NQVNLLCBIU0NMS19QTEwwX0RJVjIpOwo+ ICsJfQo+ICsJY2Ruc19waHlfcmVnX3dyaXRlKGNkbnNfcGh5LCBDTU5fRElBR19IU0NMS19TRUws IHZhbCk7Cj4gKwo+ICsJZm9yIChrID0gMDsgayA8IG51bV9sYW5lczsgaysrKSB7Cj4gKwkJdmFs ID0gY2Ruc19waHlfcmVnX3JlYWQoY2Ruc19waHksIChYQ1ZSX0RJQUdfSFNDTEtfU0VMIHwgCihr IDw8IDkpKSk7Cj4gKwkJdmFsICY9IH5IU0NMS19TRUxfTU9ERTNfTUFTSzsKPiArCQlpZiAobGlu a19yYXRlIDw9IFJBVEVfMl83KQo+ICsJCQl2YWwgfD0gRklFTERfUFJFUChIU0NMS19TRUxfTU9E RTNfTUFTSywgCkhTQ0xLX1NFTF9NT0RFM19IU0NMSzEpOwo+ICsJCWNkbnNfcGh5X3JlZ193cml0 ZShjZG5zX3BoeSwgKFhDVlJfRElBR19IU0NMS19TRUwgfCAoayA8PCAKOSkpLCB2YWwpOwo+ICsJ fQo+ICsKPiArCS8qIERQIFBIWSBQTEwgMjdNSHogY29uZmlndXJhdGlvbiAqLwo+ICsJaW5kZXgg PSBsaW5rX3JhdGVfaW5kZXgobGlua19yYXRlKTsKPiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9T SVpFKHBoeV9wbGxfMjdtX2NmZyk7IGkrKykKPiArCQljZG5zX3BoeV9yZWdfd3JpdGUoY2Ruc19w aHksIHBoeV9wbGxfMjdtX2NmZ1tpXS5hZGRyLAo+ICsJCQkJICAgcGh5X3BsbF8yN21fY2ZnW2ld LnZhbFtpbmRleF0pOwo+ICsKPiArCS8qIFRyYW5zY2VpdmVyIGNvbnRyb2wgYW5kIGRpYWdub3N0 aWMgcmVnaXN0ZXJzICovCj4gKwlmb3IgKGsgPSAwOyBrIDwgbnVtX2xhbmVzOyBrKyspIHsKPiAr CQl2YWwgPSBjZG5zX3BoeV9yZWdfcmVhZChjZG5zX3BoeSwgKFhDVlJfRElBR19QTExEUkNfQ1RS TCB8IAooayA8PCA5KSkpOwo+ICsJCXZhbCAmPSB+KERQTExfREFUQV9SQVRFX0RJVl9NT0RFM19N QVNLIHwgCkRQTExfQ0xLX1NFTF9NT0RFMyk7Cj4gKwkJaWYgKGxpbmtfcmF0ZSA8PSBSQVRFXzJf NykKPiArCQkJdmFsIHw9IEZJRUxEX1BSRVAoRFBMTF9EQVRBX1JBVEVfRElWX01PREUzX01BU0ss IAoyKTsKPiArCQllbHNlCj4gKwkJCXZhbCB8PSBGSUVMRF9QUkVQKERQTExfREFUQV9SQVRFX0RJ Vl9NT0RFM19NQVNLLCAKMSk7Cj4gKwkJY2Ruc19waHlfcmVnX3dyaXRlKGNkbnNfcGh5LCAoWENW Ul9ESUFHX1BMTERSQ19DVFJMIHwgKGsgCjw8IDkpKSwgdmFsKTsKPiArCX0KPiArCj4gKwlmb3Ig KGsgPSAwOyBrIDwgbnVtX2xhbmVzOyBrID0gayArIDEpIHsKPiArCQkvKiBQb3dlciBzdGF0ZSBt YWNoaW5lIHJlZ2lzdGVycyAqLwo+ICsJCWNkbnNfcGh5X3JlZ193cml0ZShjZG5zX3BoeSwgKFhD VlJfUFNNX1JDVFJMIHwgKGsgPDwgOSkpLCAKMHhiZWZjKTsKPiArCQljZG5zX3BoeV9yZWdfd3Jp dGUoY2Ruc19waHksIChUWF9QU0NfQTAgfCAoayA8PCA5KSksIAoweDY3OTkpOwo+ICsJCWNkbnNf cGh5X3JlZ193cml0ZShjZG5zX3BoeSwgKFRYX1BTQ19BMSB8IChrIDw8IDkpKSwgCjB4Njc5OCk7 Cj4gKwkJY2Ruc19waHlfcmVnX3dyaXRlKGNkbnNfcGh5LCAoVFhfUFNDX0EyIHwgKGsgPDwgOSkp LCAKMHgwMDk4KTsKPiArCQljZG5zX3BoeV9yZWdfd3JpdGUoY2Ruc19waHksIChUWF9QU0NfQTMg fCAoayA8PCA5KSksIAoweDAwOTgpOwo+ICsJCS8qIFJlY2VpdmVyIGNhbGlicmF0aW9uIHBvd2Vy IHN0YXRlIGRlZmluaXRpb24gcmVnaXN0ZXIgKi8KPiArCQl2YWwgPSBjZG5zX3BoeV9yZWdfcmVh ZChjZG5zX3BoeSwgUlhfUFNDX0NBTCB8IChrIDw8IDkpKTsKPiArCQl2YWwgJj0gMHhmZmJiOwo+ ICsJCWNkbnNfcGh5X3JlZ193cml0ZShjZG5zX3BoeSwgKFJYX1BTQ19DQUwgfCAoayA8PCA5KSks IAp2YWwpOwo+ICsJCXZhbCA9IGNkbnNfcGh5X3JlZ19yZWFkKGNkbnNfcGh5LCBSWF9QU0NfQTAg fCAoayA8PCA5KSk7Cj4gKwkJdmFsICY9IDB4ZmZiYjsKPiArCQljZG5zX3BoeV9yZWdfd3JpdGUo Y2Ruc19waHksIChSWF9QU0NfQTAgfCAoayA8PCA5KSksIHZhbCk7Cj4gKwl9Cj4gK30KPiArCj4g K3N0YXRpYyB2b2lkIGhkcHR4X2RwX3BoeV9yZWZfY2xvY2tfdHlwZShzdHJ1Y3QgY2Ruc19oZHB0 eF9kcF9waHkgKmNkbnNfcGh5KQo+ICt7Cj4gKwl1MzIgdmFsOwo+ICsKPiArCXZhbCA9IGNkbnNf cGh5X3JlZ19yZWFkKGNkbnNfcGh5LCBQSFlfUE1BX0NNTl9DVFJMMSk7Cj4gKwl2YWwgJj0gfkNN QV9SRUZfQ0xLX1NFTF9NQVNLOwo+ICsJLyoKPiArCSAqIHNpbmdsZSBlbmRlZCByZWZlcmVuY2Ug Y2xvY2sgKHZhbCB8PSAweDAwMzApOwo+ICsJICogZGlmZmVyZW50aWFsIGNsb2NrICAodmFsIHw9 IDB4MDAwMCk7Cj4gKwkgKgo+ICsJICogZm9yIGRpZmZlcmVudGlhbCBjbG9jayBvbiB0aGUgcmVm Y2xrX3AgYW5kCj4gKwkgKiByZWZjbGtfbSBvZmYgY2hpcCBwaW5zOiBDTU5fRElBR19BQ1lBWzhd PTEnYjEKPiArCSAqIGNkbnNfcGh5X3JlZ193cml0ZShjZG5zX3BoeSwgQ01OX0RJQUdfQUNZQSwg MHgwMTAwKTsKPiArCSAqLwo+ICsJdmFsIHw9IEZJRUxEX1BSRVAoQ01BX1JFRl9DTEtfU0VMX01B U0ssIDMpOwo+ICsJY2Ruc19waHlfcmVnX3dyaXRlKGNkbnNfcGh5LCBQSFlfUE1BX0NNTl9DVFJM MSwgdmFsKTsKPiArfQo+ICsKPiArc3RhdGljIGludCB3YWl0X2Zvcl9hY2soc3RydWN0IGNkbnNf aGRwdHhfZHBfcGh5ICpjZG5zX3BoeSwgdTMyIHJlZywgdTMyCj4gbWFzaywgKwkJCWNvbnN0IGNo YXIgKmVycl9tc2cpCj4gK3sKPiArCXUzMiB2YWwsIGk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8 IDEwOyBpKyspIHsKPiArCQl2YWwgPSBjZG5zX3BoeV9yZWdfcmVhZChjZG5zX3BoeSwgcmVnKTsK PiArCQlpZiAodmFsICYgbWFzaykKPiArCQkJcmV0dXJuIDA7Cj4gKwkJbXNsZWVwKDIwKTsKPiAr CX0KPiArCj4gKwlkZXZfZXJyKGNkbnNfcGh5LT5kZXYsICIlc1xuIiwgZXJyX21zZyk7Cj4gKwly ZXR1cm4gLTE7CgpyZXR1cm4gLUVUSU1FRE9VVD8KCj4gK30KPiArCj4gK3N0YXRpYyBpbnQgd2Fp dF9mb3JfYWNrX2NsZWFyKHN0cnVjdCBjZG5zX2hkcHR4X2RwX3BoeSAqY2Ruc19waHksIHUzMiBy ZWcsCj4gdTMyIG1hc2ssICsJCQkgICAgICBjb25zdCBjaGFyICplcnJfbXNnKQo+ICt7Cj4gKwl1 MzIgdmFsLCBpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7Cj4gKwkJdmFsID0g Y2Ruc19waHlfcmVnX3JlYWQoY2Ruc19waHksIHJlZyk7Cj4gKwkJaWYgKCEodmFsICYgbWFzaykp Cj4gKwkJCXJldHVybiAwOwo+ICsJCW1zbGVlcCgyMCk7Cj4gKwl9Cj4gKwo+ICsJZGV2X2Vycihj ZG5zX3BoeS0+ZGV2LCAiJXNcbiIsIGVycl9tc2cpOwo+ICsJcmV0dXJuIC0xOwoKcmV0dXJuIC1F VElNRURPVVQ/Cgo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGhkcHR4X2RwX3BoeV9wb3dlcl91cChz dHJ1Y3QgY2Ruc19oZHB0eF9kcF9waHkgKmNkbnNfcGh5KQo+ICt7Cj4gKwl1MzIgdmFsOwo+ICsK PiArCS8qIEVuYWJsZSBIRFAgUExM4oCZcyBmb3IgaGlnaCBzcGVlZCBjbG9ja3MgKi8KPiArCXZh bCA9IGNkbnNfcGh5X3JlZ19yZWFkKGNkbnNfcGh5LCBQSFlfSERQX0NMS19DVEwpOwo+ICsJdmFs IHw9IFBMTF9FTjsKPiArCWNkbnNfcGh5X3JlZ193cml0ZShjZG5zX3BoeSwgUEhZX0hEUF9DTEtf Q1RMLCB2YWwpOwo+ICsJaWYgKHdhaXRfZm9yX2FjayhjZG5zX3BoeSwgUEhZX0hEUF9DTEtfQ1RM LCBQTExfUkVBRFksCj4gKwkJCSAiV2FpdCBQTEwgQWNrIGZhaWxlZCIpKQo+ICsJCXJldHVybiAt MTsKPiArCj4gKwkvKiBFbmFibGUgSERQIFBMTOKAmXMgZGF0YSByYXRlIGFuZCBmdWxsIHJhdGUg Y2xvY2tzIG91dCBvZiBQTUEuICovCj4gKwl2YWwgPSBjZG5zX3BoeV9yZWdfcmVhZChjZG5zX3Bo eSwgUEhZX0hEUF9DTEtfQ1RMKTsKPiArCXZhbCB8PSBQTExfQ0xLX0VOOwo+ICsJY2Ruc19waHlf cmVnX3dyaXRlKGNkbnNfcGh5LCBQSFlfSERQX0NMS19DVEwsIHZhbCk7Cj4gKwlpZiAod2FpdF9m b3JfYWNrKGNkbnNfcGh5LCBQSFlfSERQX0NMS19DVEwsIFBMTF9DTEtfRU5fQUNLLAo+ICsJCQkg IldhaXQgUExMIGNsb2NrIGVuYWJsZSBBQ0sgZmFpbGVkIikpCj4gKwkJcmV0dXJuIC0xOwo+ICsK PiArCS8qIENvbmZpZ3VyZSBQSFkgaW4gQTIgTW9kZSAqLwo+ICsJY2Ruc19waHlfcmVnX3dyaXRl KGNkbnNfcGh5LCBQSFlfSERQX01PREVfQ1RSTCwgUE9XRVJfU1RBVEVfQTIpOwo+ICsJaWYgKHdh aXRfZm9yX2FjayhjZG5zX3BoeSwgUEhZX0hEUF9NT0RFX0NUUkwsIFBPV0VSX1NUQVRFX0EyX0FD SywKPiArCQkJICJXYWl0IEEyIEFjayBmYWlsZWQiKSkKPiArCQlyZXR1cm4gLTE7Cj4gKwo+ICsJ LyogQ29uZmlndXJlIFBIWSBpbiBBMCBtb2RlIChQSFkgbXVzdCBiZSBpbiB0aGUgQTAgcG93ZXIK PiArCSAqIHN0YXRlIGluIG9yZGVyIHRvIHRyYW5zbWl0IGRhdGEpCj4gKwkgKi8KPiArCWNkbnNf cGh5X3JlZ193cml0ZShjZG5zX3BoeSwgUEhZX0hEUF9NT0RFX0NUUkwsIFBPV0VSX1NUQVRFX0Ew KTsKPiArCWlmICh3YWl0X2Zvcl9hY2soY2Ruc19waHksIFBIWV9IRFBfTU9ERV9DVFJMLCBQT1dF Ul9TVEFURV9BMF9BQ0ssCj4gKwkJCSAiV2FpdCBBMCBBY2sgZmFpbGVkIikpCj4gKwkJcmV0dXJu IC0xOwoKTWF5YmUgeW91IHNob3VsZCBqdXN0IHJldHVybiB0aGUgcmV0dXJuIHZhbHVlIG9mIHdh aXRfZm9yX2FjaygpIGluIGVhY2ggZXJyb3IgCmNhc2UuCgo+ICsJY2Ruc19waHktPnBvd2VyX3Vw ID0gdHJ1ZTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaGRwdHhf ZHBfcGh5X3Bvd2VyX2Rvd24oc3RydWN0IGNkbnNfaGRwdHhfZHBfcGh5ICpjZG5zX3BoeSkKPiAr ewo+ICsJdTE2IHZhbDsKPiArCj4gKwlpZiAoIWNkbnNfcGh5LT5wb3dlcl91cCkKPiArCQlyZXR1 cm47Cj4gKwo+ICsJLyogUGxhY2UgdGhlIFBIWSBsYW5lcyBpbiB0aGUgQTMgcG93ZXIgc3RhdGUu ICovCj4gKwljZG5zX3BoeV9yZWdfd3JpdGUoY2Ruc19waHksIFBIWV9IRFBfTU9ERV9DVFJMLCBQ T1dFUl9TVEFURV9BMyk7Cj4gKwlpZiAod2FpdF9mb3JfYWNrKGNkbnNfcGh5LCBQSFlfSERQX01P REVfQ1RSTCwgUE9XRVJfU1RBVEVfQTNfQUNLLAo+ICsJCQkgIldhaXQgQTMgQWNrIGZhaWxlZCIp KQo+ICsJCXJldHVybjsKPiArCj4gKwkvKiBEaXNhYmxlIEhEUCBQTEzigJlzIGRhdGEgcmF0ZSBh bmQgZnVsbCByYXRlIGNsb2NrcyBvdXQgb2YgUE1BLiAqLwo+ICsJdmFsID0gY2Ruc19waHlfcmVn X3JlYWQoY2Ruc19waHksIFBIWV9IRFBfQ0xLX0NUTCk7Cj4gKwl2YWwgJj0gflBMTF9DTEtfRU47 Cj4gKwljZG5zX3BoeV9yZWdfd3JpdGUoY2Ruc19waHksIFBIWV9IRFBfQ0xLX0NUTCwgdmFsKTsK PiArCWlmICh3YWl0X2Zvcl9hY2tfY2xlYXIoY2Ruc19waHksIFBIWV9IRFBfQ0xLX0NUTCwgUExM X0NMS19FTl9BQ0ssCj4gKwkJCSAgICAgICAiV2FpdCBQTEwgY2xvY2sgQWNrIGNsZWFyIGZhaWxl ZCIpKQo+ICsJCXJldHVybjsKPiArCj4gKwkvKiBEaXNhYmxlIEhEUCBQTEzigJlzIGZvciBoaWdo IHNwZWVkIGNsb2NrcyAqLwo+ICsJdmFsID0gY2Ruc19waHlfcmVnX3JlYWQoY2Ruc19waHksIFBI WV9IRFBfQ0xLX0NUTCk7Cj4gKwl2YWwgJj0gflBMTF9FTjsKPiArCWNkbnNfcGh5X3JlZ193cml0 ZShjZG5zX3BoeSwgUEhZX0hEUF9DTEtfQ1RMLCB2YWwpOwo+ICsJaWYgKHdhaXRfZm9yX2Fja19j bGVhcihjZG5zX3BoeSwgUEhZX0hEUF9DTEtfQ1RMLCBQTExfUkVBRFksCj4gKwkJCSAgICAgICAi V2FpdCBQTEwgQWNrIGNsZWFyIGZhaWxlZCIpKQo+ICsJCXJldHVybjsKCkkgd291bGQgaGF2ZSBl eHBlY3RlZCBjZG5zX3BoeS0+cG93ZXJfdXAgPSBmYWxzZSBzb21ld2hlcmUgaW4gdGhpcyBmdW5j dGlvbi4KCj4gK30KPiArCj4gK3N0YXRpYyBpbnQgY2Ruc19oZHB0eF9kcF9waHlfb24oc3RydWN0 IHBoeSAqcGh5KQo+ICt7Cj4gKwlzdHJ1Y3QgY2Ruc19oZHB0eF9kcF9waHkgKmNkbnNfcGh5ID0g cGh5X2dldF9kcnZkYXRhKHBoeSk7Cj4gKwo+ICsJcmV0dXJuIGhkcHR4X2RwX3BoeV9wb3dlcl91 cChjZG5zX3BoeSk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgY2Ruc19oZHB0eF9kcF9waHlfb2Zm KHN0cnVjdCBwaHkgKnBoeSkKPiArewo+ICsJc3RydWN0IGNkbnNfaGRwdHhfZHBfcGh5ICpjZG5z X3BoeSA9IHBoeV9nZXRfZHJ2ZGF0YShwaHkpOwo+ICsKPiArCWhkcHR4X2RwX3BoeV9wb3dlcl9k b3duKGNkbnNfcGh5KTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBj ZG5zX2hkcHR4X2RwX3BoeV9pbml0KHN0cnVjdCBwaHkgKnBoeSkKPiArewo+ICsJc3RydWN0IGNk bnNfaGRwdHhfZHBfcGh5ICpjZG5zX3BoeSA9IHBoeV9nZXRfZHJ2ZGF0YShwaHkpOwo+ICsJaW50 IHJldDsKPiArCj4gKwloZHB0eF9kcF9waHlfcmVmX2Nsb2NrX3R5cGUoY2Ruc19waHkpOwo+ICsK PiArCS8qIFBIWSBwb3dlciB1cCAqLwo+ICsJcmV0ID0gaGRwdHhfZHBfcGh5X3Bvd2VyX3VwKGNk bnNfcGh5KTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJaGRwdHhf ZHBfYXV4X2NmZyhjZG5zX3BoeSk7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3Rh dGljIGludCBjZG5zX2hkcHR4X2RwX2NvbmZpZ3VyZShzdHJ1Y3QgcGh5ICpwaHksCj4gKwkJCQkg ICB1bmlvbiBwaHlfY29uZmlndXJlX29wdHMgKm9wdHMpCj4gK3sKPiArCXN0cnVjdCBjZG5zX2hk cHR4X2RwX3BoeSAqY2Ruc19waHkgPSBwaHlfZ2V0X2RydmRhdGEocGh5KTsKPiArCWludCByZXQ7 Cj4gKwo+ICsJY2Ruc19waHktPmxpbmtfcmF0ZSA9IG9wdHMtPmRwLmxpbmtfcmF0ZTsKPiArCWNk bnNfcGh5LT5udW1fbGFuZXMgPSBvcHRzLT5kcC5sYW5lczsKPiArCj4gKwlpZiAoY2Ruc19waHkt PmxpbmtfcmF0ZSA+IE1BWF9MSU5LX1JBVEUpIHsKPiArCQlkZXZfZXJyKGNkbnNfcGh5LT5kZXYs ICJMaW5rIFJhdGUoJWQpIE5vdCBzdXBwb3J0ZWRcbiIsCj4gY2Ruc19waHktPmxpbmtfcmF0ZSk7 ICsJCXJldHVybiBmYWxzZTsKPiArCX0KPiArCj4gKwkvKiBEaXNhYmxlIHBoeSBjbG9jayBpZiBQ SFkgaW4gcG93ZXIgdXAgc3RhdGUgKi8KPiArCWhkcHR4X2RwX3BoeV9wb3dlcl9kb3duKGNkbnNf cGh5KTsKPiArCj4gKwlpZiAoY2Ruc19waHktPnJlZl9jbGtfcmF0ZSA9PSBSRUZfQ0xLXzI3TUha KSB7Cj4gKwkJaGRwdHhfZHBfcGh5X3BtYV9jbW5fY2ZnXzI3bWh6KGNkbnNfcGh5KTsKPiArCQlo ZHB0eF9kcF9waHlfcG1hX2Ntbl9wbGwwXzI3bWh6KGNkbnNfcGh5KTsKPiArCX0gZWxzZSB7Cj4g KwkJZGV2X2VycihjZG5zX3BoeS0+ZGV2LCAiTm90IHN1cHBvcnQgcmVmIGNsb2NrIHJhdGVcbiIp Owo+ICsJfQo+ICsKPiArCS8qIFBIWSBwb3dlciB1cCAqLwo+ICsJcmV0ID0gaGRwdHhfZHBfcGh5 X3Bvd2VyX3VwKGNkbnNfcGh5KTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0 aWMgY29uc3Qgc3RydWN0IHBoeV9vcHMgY2Ruc19oZHB0eF9kcF9waHlfb3BzID0gewo+ICsJLmlu aXQgPSBjZG5zX2hkcHR4X2RwX3BoeV9pbml0LAo+ICsJLmNvbmZpZ3VyZSA9IGNkbnNfaGRwdHhf ZHBfY29uZmlndXJlLAo+ICsJLnBvd2VyX29uID0gY2Ruc19oZHB0eF9kcF9waHlfb24sCj4gKwku cG93ZXJfb2ZmID0gY2Ruc19oZHB0eF9kcF9waHlfb2ZmLAo+ICsJLm93bmVyID0gVEhJU19NT0RV TEUsCj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IGNkbnNfaGRwdHhfZHBfcGh5X3Byb2JlKHN0cnVj dCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gK3sKPiArCXN0cnVjdCBjZG5zX2hkcHR4X2RwX3Bo eSAqY2Ruc19waHk7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2Owo+ICsJc3Ry dWN0IGRldmljZV9ub2RlICpub2RlID0gZGV2LT5vZl9ub2RlOwo+ICsJc3RydWN0IHBoeV9wcm92 aWRlciAqcGh5X3Byb3ZpZGVyOwo+ICsJc3RydWN0IHJlc291cmNlICpyZXM7Cj4gKwlzdHJ1Y3Qg cGh5ICpwaHk7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWNkbnNfcGh5ID0gZGV2bV9remFsbG9jKGRl diwgc2l6ZW9mKCpjZG5zX3BoeSksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFjZG5zX3BoeSkKPiAr CQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBjZG5zX3BoeSk7 Cj4gKwljZG5zX3BoeS0+ZGV2ID0gZGV2Owo+ICsJbXV0ZXhfaW5pdCgmY2Ruc19waHktPm1ib3hf bXV0ZXgpOwo+ICsKPiArCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09V UkNFX01FTSwgMCk7Cj4gKwlpZiAoIXJlcykKPiArCQlyZXR1cm4gLUVOT0RFVjsKPiArCWNkbnNf cGh5LT5yZWdzID0gZGV2bV9pb3JlbWFwKGRldiwgcmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShy ZXMpKTsKPiArCWlmIChJU19FUlIoY2Ruc19waHktPnJlZ3MpKQo+ICsJCXJldHVybiBQVFJfRVJS KGNkbnNfcGh5LT5yZWdzKTsKPiArCj4gKwlwaHkgPSBkZXZtX3BoeV9jcmVhdGUoZGV2LCBub2Rl LCAmY2Ruc19oZHB0eF9kcF9waHlfb3BzKTsKPiArCWlmIChJU19FUlIocGh5KSkKPiArCQlyZXR1 cm4gUFRSX0VSUihwaHkpOwo+ICsKPiArCXBoeS0+YXR0cnMubW9kZSA9IFBIWV9NT0RFX0RQOwo+ ICsJY2Ruc19waHktPnBoeSA9IHBoeTsKPiArCXBoeV9zZXRfZHJ2ZGF0YShwaHksIGNkbnNfcGh5 KTsKPiArCj4gKwkvKiBpbml0IGJhc2Ugc3RydWN0IGZvciBhY2Nlc3MgbWhkcCBtYWlsYm94ICov Cj4gKwljZG5zX3BoeS0+YmFzZS5kZXYgPSBjZG5zX3BoeS0+ZGV2Owo+ICsJY2Ruc19waHktPmJh c2UucmVncyA9IGNkbnNfcGh5LT5yZWdzOwo+ICsJY2Ruc19waHktPmJhc2UubWJveF9tdXRleCA9 ICZjZG5zX3BoeS0+bWJveF9tdXRleDsKCkhvdyBpcyB0aGlzIG11dGV4IHN1cHBvc2VkIHRvIHdv cms/IEZyb20gdGhlIG5hbWUgY2Ruc19waHktPmJhc2UubWJveF9tdXRleCBpcyAKc3VwcG9zZWQg dG8gcHJvdGVjdCB0aGUgbWFpbGJveCBhY2Nlc3MgaW4gdGhlIGNkbnMtbWhkcCBiYXNlLCByaWdo dD8KQnV0IHRoaXMgbXV0ZXggaXMgZGlmZmVyZW50LCBpbml0aWFsaXplZCBzZXBhcmF0ZWx5IGFu ZCB0aHVzIGlzIGluZGVwZW5kZW50IApmcm9tIG1oZHAtPm1ib3hfbXV0ZXggaW4gY2Rucy1taGRw ODUwMS1jb3JlLmMuCgpCZXN0IHJlZ2FyZHMsCkFsZXhhbmRlcgoKPiArCj4gKwlyZXQgPSBoZHB0 eF9kcF9jbGtfZW5hYmxlKGNkbnNfcGh5KTsKPiArCWlmIChyZXQpIHsKPiArCQlkZXZfZXJyKGRl diwgIkluaXQgY2xrIGZhaWxcbiIpOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiAr CXBoeV9wcm92aWRlciA9IGRldm1fb2ZfcGh5X3Byb3ZpZGVyX3JlZ2lzdGVyKGRldiwgCm9mX3Bo eV9zaW1wbGVfeGxhdGUpOwo+ICsJaWYgKElTX0VSUihwaHlfcHJvdmlkZXIpKSB7Cj4gKwkJcmV0 ID0gUFRSX0VSUihwaHlfcHJvdmlkZXIpOwo+ICsJCWdvdG8gY2xrX2Rpc2FibGU7Cj4gKwl9Cj4g Kwo+ICsJcmV0dXJuIDA7Cj4gKwo+ICtjbGtfZGlzYWJsZToKPiArCWhkcHR4X2RwX2Nsa19kaXNh YmxlKGNkbnNfcGh5KTsKPiArCj4gKwlyZXR1cm4gLUVJTlZBTDsKPiArfQo+ICsKPiArc3RhdGlj IGludCBjZG5zX2hkcHR4X2RwX3BoeV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl dikKPiArewo+ICsJc3RydWN0IGNkbnNfaGRwdHhfZHBfcGh5ICpjZG5zX3BoeSA9IHBsYXRmb3Jt X2dldF9kcnZkYXRhKHBkZXYpOwo+ICsKPiArCWhkcHR4X2RwX2Nsa19kaXNhYmxlKGNkbnNfcGh5 KTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9k ZXZpY2VfaWQgY2Ruc19oZHB0eF9kcF9waHlfb2ZfbWF0Y2hbXSA9IHsKPiArCXsuY29tcGF0aWJs ZSA9ICJmc2wsaW14OG1xLWRwLXBoeSIgfSwKPiArCXsgLyogc2VudGluZWwgKi8gfQo+ICt9Owo+ ICtNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBjZG5zX2hkcHR4X2RwX3BoeV9vZl9tYXRjaCk7Cj4g Kwo+ICtzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBjZG5zX2hkcHR4X2RwX3BoeV9kcml2 ZXIgPSB7Cj4gKwkucHJvYmUgPSBjZG5zX2hkcHR4X2RwX3BoeV9wcm9iZSwKPiArCS5yZW1vdmUg PSBjZG5zX2hkcHR4X2RwX3BoeV9yZW1vdmUsCj4gKwkuZHJpdmVyID0gewo+ICsJCS5uYW1lCT0g ImNkbnMtaGRwdHgtZHAtcGh5IiwKPiArCQkub2ZfbWF0Y2hfdGFibGUJPSBjZG5zX2hkcHR4X2Rw X3BoeV9vZl9tYXRjaCwKPiArCX0KPiArfTsKPiArbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihjZG5z X2hkcHR4X2RwX3BoeV9kcml2ZXIpOwo+ICsKPiArTU9EVUxFX0FVVEhPUigiU2FuZG9yIFl1IDxz YW5kb3IueXVAbnhwLmNvbT4iKTsKPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJDYWRlbmNlIEhEUC1U WCBEaXNwbGF5UG9ydCBQSFkgZHJpdmVyIik7Cj4gK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKCgot LSAKVFEtU3lzdGVtcyBHbWJIIHwgTcO8aGxzdHJhw59lIDIsIEd1dCBEZWxsaW5nIHwgODIyMjkg U2VlZmVsZCwgR2VybWFueQpBbXRzZ2VyaWNodCBNw7xuY2hlbiwgSFJCIDEwNTAxOApHZXNjaMOk ZnRzZsO8aHJlcjogRGV0bGVmIFNjaG5laWRlciwgUsO8ZGlnZXIgU3RhaGwsIFN0ZWZhbiBTY2hu ZWlkZXIKaHR0cDovL3d3dy50cS1ncm91cC5jb20vCgoKCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0Cmxp bnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFk Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK