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 54932C48BF6 for ; Sun, 18 Feb 2024 12:40:36 +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:In-Reply-To:MIME-Version:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=hmdHiamcKncSvS/fxfmahG7weqGtKKWm8hrSX+x1bpo=; b=DuWOikCXiG8dOL G85RjVuRqKcTjWPT+rDMvjBJKm1b314/vdjj1FFUzII+l/4PwK3oMVnLjVuTI7ibQpful4wayp3g0 6iF6YZI5Eu0E5xTmEGDC4TN36/6JXYIRPxfwZxtWqUHGsO2Ek3tNwEQ4/3agAq3dUpTgMnq3qylF3 YmKEYzpI0rXkEt/PurpQwdIQ57sJ54IFw+Tb9Y7E4NDxWCKG6IhcnIrbkGMiRgSI0cFT3FNhsin4j R/igONnZ/czWwndfD/Au5KsYUKNAxB/oUCr+QXAkLew6zhAS115UvehpZ+pErPW6l0DiGQqONmCs4 8W8qb0qJlXW7xzL+O0Zw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rbgSy-00000007ibE-49bw; Sun, 18 Feb 2024 12:40:21 +0000 Received: from perceval.ideasonboard.com ([213.167.242.64]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1rbgSt-00000007iZy-0k5n for linux-arm-kernel@lists.infradead.org; Sun, 18 Feb 2024 12:40:19 +0000 Received: from pendragon.ideasonboard.com (89-27-53-110.bb.dnainternet.fi [89.27.53.110]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 6BEB851D; Sun, 18 Feb 2024 13:40:04 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1708260004; bh=INrMYBpjPmRXf3noSV2ELN91xZYE9iLkrFWXlwXKA6A=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=Rpm2koJbR2IOKCgE9rOBk2TBoseaySvSzIBIN5JUYqNWWzMKaU4v1RYxhSnJvHu+g GGqbIMS+0xAa4Zj1hEfdGKoizby6BQC4b2sGhj5Qd+qmCivI7zTiXaR4VPQROgrCvw ckctnC0rESKXXs/7kdslpo7ion6mydwVCPGTyzNU= Date: Sun, 18 Feb 2024 14:40:14 +0200 From: Laurent Pinchart To: Sakari Ailus Cc: Umang Jain , linux-media@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Rob Herring , Krzysztof Kozlowski , Conor Dooley , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , NXP Linux Team , Fabio Estevam , Kieran Bingham , willl will Subject: Re: [PATCH 2/2] media: i2c: Add imx283 camera sensor driver Message-ID: <20240218124014.GC20376@pendragon.ideasonboard.com> References: <20240215204436.9194-1-umang.jain@ideasonboard.com> <20240215204436.9194-3-umang.jain@ideasonboard.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240218_044015_726093_8AC38577 X-CRM114-Status: GOOD ( 40.23 ) 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 T24gRnJpLCBGZWIgMTYsIDIwMjQgYXQgMDk6MjE6MjdBTSArMDAwMCwgU2FrYXJpIEFpbHVzIHdy b3RlOgo+IEhpIFVtYW5nLAo+IAo+IE9uIEZyaSwgRmViIDE2LCAyMDI0IGF0IDAyOjE0OjM1QU0g KzA1MzAsIFVtYW5nIEphaW4gd3JvdGU6Cj4gPiBGcm9tOiBLaWVyYW4gQmluZ2hhbSA8a2llcmFu LmJpbmdoYW1AaWRlYXNvbmJvYXJkLmNvbT4KPiA+IAo+ID4gQWRkIGEgdjRsMiBzdWJkZXZpY2Ug ZHJpdmVyIGZvciB0aGUgU29ueSBJTVgyODMgaW1hZ2Ugc2Vuc29yLgo+ID4gCj4gPiBUaGUgSU1Y MjgzIGlzIGEgMjBNUCBEaWFnb25hbCAxNS44NiBtbSAoVHlwZSAxKSBDTU9TIEltYWdlIFNlbnNv ciB3aXRoCj4gPiBTcXVhcmUgUGl4ZWwgZm9yIENvbG9yIENhbWVyYXMuCj4gPiAKPiA+IFRoZSBm b2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKPiA+IC0gTWFudWFsIGV4cG9zdXJlIGFu IGdhaW4gY29udHJvbCBzdXBwb3J0Cj4gPiAtIHZibGFuay9oYmxhbmsvbGluayBmcmVxIGNvbnRy b2wgc3VwcG9ydAo+ID4gLSBUZXN0IHBhdHRlcm4gc3VwcG9ydCBjb250cm9sCj4gPiAtIEFyYml0 cmFyeSBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBjcm9wcGluZwo+ID4gLSBTdXBwb3J0ZWQgcmVz b2x1dGlvbjoKPiA+ICAgLSA1NDcyeDM2NDggQCAyMGZwcyAoU1JHR0IxMikKPiA+ICAgLSA1NDcy eDM2NDggQCAyNWZwcyAoU1JHR0IxMCkKPiA+ICAgLSAyNzM2eDE4MjQgQCA1MGZwcyAoU1JHR0Ix MikKPiA+IAo+ID4gU2lnbmVkLW9mZi1ieTogS2llcmFuIEJpbmdoYW0gPGtpZXJhbi5iaW5naGFt QGlkZWFzb25ib2FyZC5jb20+Cj4gPiBTaWduZWQtb2ZmLWJ5OiBVbWFuZyBKYWluIDx1bWFuZy5q YWluQGlkZWFzb25ib2FyZC5jb20+Cj4gPiAtLS0KPiA+ICBNQUlOVEFJTkVSUyAgICAgICAgICAg ICAgICB8ICAgIDEgKwo+ID4gIGRyaXZlcnMvbWVkaWEvaTJjL0tjb25maWcgIHwgICAxMyArCj4g PiAgZHJpdmVycy9tZWRpYS9pMmMvTWFrZWZpbGUgfCAgICAxICsKPiA+ICBkcml2ZXJzL21lZGlh L2kyYy9pbXgyODMuYyB8IDE2MDEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Cj4gPiAgNCBmaWxlcyBjaGFuZ2VkLCAxNjE2IGluc2VydGlvbnMoKykKPiA+ICBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9pMmMvaW14MjgzLmMKPiA+IAo+ID4gZGlmZiAtLWdpdCBh L01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKPiA+IGluZGV4IDUzZGY0YjZlMzI2MC4uMzgyNmU1 YzVkNzQ2IDEwMDY0NAo+ID4gLS0tIGEvTUFJTlRBSU5FUlMKPiA+ICsrKyBiL01BSU5UQUlORVJT Cj4gPiBAQCAtMjAzNzMsNiArMjAzNzMsNyBAQCBMOglsaW51eC1tZWRpYUB2Z2VyLmtlcm5lbC5v cmcKPiA+ICBTOglNYWludGFpbmVkCj4gPiAgVDoJZ2l0IGdpdDovL2xpbnV4dHYub3JnL21lZGlh X3RyZWUuZ2l0Cj4gPiAgRjoJRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21lZGlh L2kyYy9zb255LGlteDI4My55YW1sCj4gPiArRjoJZHJpdmVycy9tZWRpYS9pMmMvaW14MjgzLmMK PiA+ICAKPiA+ICBTT05ZIElNWDI5MCBTRU5TT1IgRFJJVkVSCj4gPiAgTToJTWFuaXZhbm5hbiBT YWRoYXNpdmFtIDxtYW5pdmFubmFuLnNhZGhhc2l2YW1AbGluYXJvLm9yZz4KPiA+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL21lZGlhL2kyYy9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9pMmMvS2NvbmZp Zwo+ID4gaW5kZXggNTZmMjc2YjkyMGFiLi5iNzk4YzU1YTJiZTUgMTAwNjQ0Cj4gPiAtLS0gYS9k cml2ZXJzL21lZGlhL2kyYy9LY29uZmlnCj4gPiArKysgYi9kcml2ZXJzL21lZGlhL2kyYy9LY29u ZmlnCj4gPiBAQCAtMTUzLDYgKzE1MywxOSBAQCBjb25maWcgVklERU9fSU1YMjc0Cj4gPiAgCSAg VGhpcyBpcyBhIFY0TDIgc2Vuc29yIGRyaXZlciBmb3IgdGhlIFNvbnkgSU1YMjc0Cj4gPiAgCSAg Q01PUyBpbWFnZSBzZW5zb3IuCj4gPiAgCj4gPiArY29uZmlnIFZJREVPX0lNWDI4Mwo+ID4gKwl0 cmlzdGF0ZSAiU29ueSBJTVgyODMgc2Vuc29yIHN1cHBvcnQiCj4gPiArCWRlcGVuZHMgb24gSTJD ICYmIFZJREVPX0RFVgo+IAo+IFRoaXMgaXMgYWxyZWFkeSBnaXZlbi4KPiAKPiA+ICsJc2VsZWN0 IE1FRElBX0NPTlRST0xMRVIKPiA+ICsJc2VsZWN0IFZJREVPX1Y0TDJfU1VCREVWX0FQSQo+IAo+ IEJvdGggYXJlIGFscmVhZHkgc2VsZWN0ZWQsIG5vIG5lZWQgdG8gZG8gdGhpcyBwZXIgZHJpdmVy Lgo+IAo+ID4gKwlzZWxlY3QgVjRMMl9DQ0lfSTJDCj4gPiArCWhlbHAKPiA+ICsJICBUaGlzIGlz IGEgVjRMMiBzZW5zb3IgZHJpdmVyIGZvciB0aGUgU29ueSBJTVgyODMKPiA+ICsJICBDTU9TIGlt YWdlIHNlbnNvci4KPiA+ICsKPiA+ICsJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9k dWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKPiA+ICsJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgaW14 MjgzLgo+ID4gKwo+ID4gIGNvbmZpZyBWSURFT19JTVgyOTAKPiA+ICAJdHJpc3RhdGUgIlNvbnkg SU1YMjkwIHNlbnNvciBzdXBwb3J0Igo+ID4gIAlzZWxlY3QgUkVHTUFQX0kyQwo+ID4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvbWVkaWEvaTJjL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS9pMmMvTWFr ZWZpbGUKPiA+IGluZGV4IGRmYmU2NDQ4YjU0OS4uMGZiZDgxZjlmNDIwIDEwMDY0NAo+ID4gLS0t IGEvZHJpdmVycy9tZWRpYS9pMmMvTWFrZWZpbGUKPiA+ICsrKyBiL2RyaXZlcnMvbWVkaWEvaTJj L01ha2VmaWxlCj4gPiBAQCAtNDgsNiArNDgsNyBAQCBvYmotJChDT05GSUdfVklERU9fSU1YMjE0 KSArPSBpbXgyMTQubwo+ID4gIG9iai0kKENPTkZJR19WSURFT19JTVgyMTkpICs9IGlteDIxOS5v Cj4gPiAgb2JqLSQoQ09ORklHX1ZJREVPX0lNWDI1OCkgKz0gaW14MjU4Lm8KPiA+ICBvYmotJChD T05GSUdfVklERU9fSU1YMjc0KSArPSBpbXgyNzQubwo+ID4gK29iai0kKENPTkZJR19WSURFT19J TVgyODMpICs9IGlteDI4My5vCj4gPiAgb2JqLSQoQ09ORklHX1ZJREVPX0lNWDI5MCkgKz0gaW14 MjkwLm8KPiA+ICBvYmotJChDT05GSUdfVklERU9fSU1YMjk2KSArPSBpbXgyOTYubwo+ID4gIG9i ai0kKENPTkZJR19WSURFT19JTVgzMTkpICs9IGlteDMxOS5vCj4gPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9tZWRpYS9pMmMvaW14MjgzLmMgYi9kcml2ZXJzL21lZGlhL2kyYy9pbXgyODMuYwo+ID4g bmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uNTJmYWZlYTE4ZTdh Cj4gPiAtLS0gL2Rldi9udWxsCj4gPiArKysgYi9kcml2ZXJzL21lZGlhL2kyYy9pbXgyODMuYwo+ ID4gQEAgLTAsMCArMSwxNjAxIEBACj4gPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQ TC0yLjAKPiA+ICsvKgo+ID4gKyAqIFY0TDIgU3VwcG9ydCBmb3IgdGhlIElNWDI4Mwo+ID4gKyAq Cj4gPiArICogRGlhZ29uYWwgMTUuODYgbW0gKFR5cGUgMSkgQ01PUyBJbWFnZSBTZW5zb3Igd2l0 aCBTcXVhcmUgUGl4ZWwgZm9yIENvbG9yCj4gPiArICogQ2FtZXJhcy4KPiA+ICsgKgo+ID4gKyAq IENvcHlyaWdodCAoQykgMjAyNCBJZGVhcyBvbiBCb2FyZCBPeS4KPiA+ICsgKgo+ID4gKyAqIEJh c2VkIG9uIFNvbnkgSU1YMjgzIGRyaXZlciBwcmVwYXJlZCBieSBXaWxsIFdoYW5nCj4gPiArICoK PiA+ICsgKiBCYXNlZCBvbiBTb255IGlteDQ3NyBjYW1lcmEgZHJpdmVyCj4gPiArICogQ29weXJp Z2h0IChDKSAyMDE5LTIwMjAgUmFzcGJlcnJ5IFBpIChUcmFkaW5nKSBMdGQKPiA+ICsgKi8KPiA+ ICsKPiA+ICsjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgo+IAo+IERvIHlvdSBzdGlsbCBuZWVk IHRoaXM/Cj4gCj4gPiArI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgo+ID4gKyNpbmNsdWRlIDxsaW51 eC9kZWxheS5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9ncGlvL2NvbnN1bWVyLmg+Cj4gPiArI2lu Y2x1ZGUgPGxpbnV4L2kyYy5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPiA+ICsj aW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRp bWUuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+Cj4gPiArI2lu Y2x1ZGUgPG1lZGlhL3Y0bDItY2NpLmg+Cj4gPiArI2luY2x1ZGUgPG1lZGlhL3Y0bDItY3RybHMu aD4KPiA+ICsjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KPiA+ICsjaW5jbHVkZSA8bWVk aWEvdjRsMi1ldmVudC5oPgo+ID4gKyNpbmNsdWRlIDxtZWRpYS92NGwyLWZ3bm9kZS5oPgo+ID4g KyNpbmNsdWRlIDxtZWRpYS92NGwyLW1lZGlhYnVzLmg+Cj4gPiArCj4gPiArLyogQ2hpcCBJRCAq Lwo+ID4gKyNkZWZpbmUgSU1YMjgzX1JFR19DSElQX0lECQlDQ0lfUkVHOCgweDMwMDApCj4gPiAr I2RlZmluZSBJTVgyODNfQ0hJUF9JRAkJCTB4MGIJLy8gRGVmYXVsdCBwb3dlciBvbiBzdGF0ZQo+ ID4gKwo+ID4gKyNkZWZpbmUgSU1YMjgzX1JFR19TVEFOREJZCQlDQ0lfUkVHOCgweDMwMDApCj4g PiArI2RlZmluZSAgIElNWDI4M19BQ1RJVkUJCQkwCj4gPiArI2RlZmluZSAgIElNWDI4M19TVEFO REJZCQlCSVQoMCkKPiA+ICsjZGVmaW5lICAgSU1YMjgzX1NUQkxPR0lDCQlCSVQoMSkKPiA+ICsj ZGVmaW5lICAgSU1YMjgzX1NUQk1JUEkJCUJJVCgyKQo+ID4gKyNkZWZpbmUgICBJTVgyODNfU1RC RFYJCQlCSVQoMykKPiA+ICsjZGVmaW5lICAgSU1YMjgzX1NMRUVQCQkJQklUKDQpCj4gPiArCj4g PiArI2RlZmluZSBJTVgyODNfUkVHX0NMQU1QCQlDQ0lfUkVHOCgweDMwMDEpCj4gPiArI2RlZmlu ZSAgIElNWDI4M19DTFBTUVJTVAkJQklUKDQpCj4gPiArCj4gPiArI2RlZmluZSBJTVgyODNfUkVH X1BMU1RNRzA4CQlDQ0lfUkVHOCgweDMwMDMpCj4gPiArI2RlZmluZSAgIElNWDI4M19QTFNUTUcw OF9WQUwJCTB4NzcKPiA+ICsKPiA+ICsjZGVmaW5lIElNWDI4M19SRUdfTURTRUwxCQlDQ0lfUkVH OCgweDMwMDQpCj4gPiArI2RlZmluZSBJTVgyODNfUkVHX01EU0VMMgkJQ0NJX1JFRzgoMHgzMDA1 KQo+ID4gKyNkZWZpbmUgSU1YMjgzX1JFR19NRFNFTDMJCUNDSV9SRUc4KDB4MzAwNikKPiA+ICsj ZGVmaW5lICAgSU1YMjgzX01EU0VMM19WQ1JPUF9FTglCSVQoNSkKPiA+ICsjZGVmaW5lIElNWDI4 M19SRUdfTURTRUw0CQlDQ0lfUkVHOCgweDMwMDcpCj4gPiArI2RlZmluZSAgIElNWDI4M19NRFNF TDRfVkNST1BfRU4JKEJJVCg0KSB8IEJJVCg2KSkKPiA+ICsKPiA+ICsjZGVmaW5lIElNWDI4M19S RUdfU1ZSCQkJQ0NJX1JFRzE2X0xFKDB4MzAwOSkKPiA+ICsKPiA+ICsjZGVmaW5lIElNWDI4M19S RUdfSFRSSU1NSU5HCQlDQ0lfUkVHOCgweDMwMGIpCj4gPiArI2RlZmluZSAgIElNWDI4M19NRFZS RVYJCQlCSVQoMCkgLyogVkZMSVAgKi8KPiA+ICsjZGVmaW5lICAgSU1YMjgzX0hUUklNTUlOR19F TgkJQklUKDQpCj4gPiArCj4gPiArI2RlZmluZSBJTVgyODNfUkVHX1ZXSU5QT1MJCUNDSV9SRUcx Nl9MRSgweDMwMGYpCj4gPiArI2RlZmluZSBJTVgyODNfUkVHX1ZXSURDVVQJCUNDSV9SRUcxNl9M RSgweDMwMTEpCj4gPiArCj4gPiArI2RlZmluZSBJTVgyODNfUkVHX01EU0VMNwkJQ0NJX1JFRzE2 X0xFKDB4MzAxMykKPiA+ICsKPiA+ICsvKiBDU0kgQ2xvY2sgQ29uZmlndXJhdGlvbiAqLwo+ID4g KyNkZWZpbmUgSU1YMjgzX1JFR19UQ0xLUE9TVAkJQ0NJX1JFRzgoMHgzMDE4KQo+ID4gKyNkZWZp bmUgSU1YMjgzX1JFR19USFNQUkVQQVJFCQlDQ0lfUkVHOCgweDMwMWEpCj4gPiArI2RlZmluZSBJ TVgyODNfUkVHX1RIU1pFUk8JCUNDSV9SRUc4KDB4MzAxYykKPiA+ICsjZGVmaW5lIElNWDI4M19S RUdfVEhTVFJBSUwJCUNDSV9SRUc4KDB4MzAyMCkKPiA+ICsjZGVmaW5lIElNWDI4M19SRUdfVENM S1BSRVBBUkUJCUNDSV9SRUc4KDB4MzAyMikKPiA+ICsjZGVmaW5lIElNWDI4M19SRUdfVENMS1pF Uk8JCUNDSV9SRUcxNl9MRSgweDMwMjQpCj4gPiArI2RlZmluZSBJTVgyODNfUkVHX1RMUFgJCQlD Q0lfUkVHOCgweDMwMjYpCj4gPiArI2RlZmluZSBJTVgyODNfUkVHX1RIU0VYSVQJCUNDSV9SRUc4 KDB4MzAyOCkKPiA+ICsjZGVmaW5lIElNWDI4M19SRUdfVENMS1BSRQkJQ0NJX1JFRzgoMHgzMDJh KQo+ID4gKwo+ID4gKyNkZWZpbmUgSU1YMjgzX1JFR19ZX09VVF9TSVpFCQlDQ0lfUkVHMTZfTEUo MHgzMDJmKQo+ID4gKyNkZWZpbmUgSU1YMjgzX1JFR19XUklURV9WU0laRQkJQ0NJX1JFRzE2X0xF KDB4MzAzMSkKPiA+ICsjZGVmaW5lIElNWDI4M19SRUdfT0JfU0laRV9WCQlDQ0lfUkVHOCgweDMw MzMpCj4gPiArCj4gPiArLyogSE1BWCBpbnRlcm5hbCBIQkxBTksgKi8KPiA+ICsjZGVmaW5lIElN WDI4M19SRUdfSE1BWAkJCUNDSV9SRUcxNl9MRSgweDMwMzYpCj4gPiArI2RlZmluZSBJTVgyODNf SE1BWF9NQVgJCQkweGZmZmYKPiA+ICsKPiA+ICsvKiBWTUFYIGludGVybmFsIFZCTEFOSyAqLwo+ ID4gKyNkZWZpbmUgSU1YMjgzX1JFR19WTUFYCQkJQ0NJX1JFRzI0X0xFKDB4MzAzOCkKPiA+ICsj ZGVmaW5lICAgSU1YMjgzX1ZNQVhfTUFYCQkweGZmZmZmCj4gPiArCj4gPiArLyogU0hSIGludGVy bmFsICovCj4gPiArI2RlZmluZSBJTVgyODNfUkVHX1NIUgkJCUNDSV9SRUcxNl9MRSgweDMwM2Ip Cj4gPiArI2RlZmluZSAgIElNWDI4M19TSFJfTUlOCQkxMQo+ID4gKwo+ID4gKy8qCj4gPiArICog QW5hbG9nIGdhaW4gY29udHJvbAo+ID4gKyAqICBHYWluIFtkQl0gPSAtMjBsb2d7KDIwNDggLSB2 YWx1ZSBbMTA6MF0pIC8yMDQ4fQo+ID4gKyAqICBSYW5nZTogMGRCIHRvIGFwcHJveGltYXRlbHkg KzI3ZEIKPiA+ICsgKi8KPiA+ICsjZGVmaW5lIElNWDI4M19SRUdfQU5BTE9HX0dBSU4JCUNDSV9S RUcxNl9MRSgweDMwNDIpCj4gPiArI2RlZmluZSAgIElNWDI4M19BTkFfR0FJTl9NSU4JCTAKPiA+ ICsjZGVmaW5lICAgSU1YMjgzX0FOQV9HQUlOX01BWAkJMTk1Nwo+ID4gKyNkZWZpbmUgICBJTVgy ODNfQU5BX0dBSU5fU1RFUAkJMQo+ID4gKyNkZWZpbmUgICBJTVgyODNfQU5BX0dBSU5fREVGQVVM VAkweDAKPiA+ICsKPiA+ICsvKgo+ID4gKyAqIERpZ2l0YWwgZ2FpbiBjb250cm9sCj4gPiArICog IEdhaW4gW2RCXSA9IHZhbHVlICogNgo+ID4gKyAqICBSYW5nZTogMGRCIHRvICsxOGRiCj4gPiAr ICovCj4gPiArI2RlZmluZSBJTVgyODNfUkVHX0RJR0lUQUxfR0FJTgkJQ0NJX1JFRzgoMHgzMDQ0 KQo+ID4gKyNkZWZpbmUgSU1YMjgzX0RHVExfR0FJTl9NSU4JCTAKPiA+ICsjZGVmaW5lIElNWDI4 M19ER1RMX0dBSU5fTUFYCQkzCj4gPiArI2RlZmluZSBJTVgyODNfREdUTF9HQUlOX0RFRkFVTFQJ MAo+ID4gKyNkZWZpbmUgSU1YMjgzX0RHVExfR0FJTl9TVEVQCQkxCj4gPiArCj4gPiArI2RlZmlu ZSBJTVgyODNfUkVHX0hUUklNTUlOR19TVEFSVAlDQ0lfUkVHMTZfTEUoMHgzMDU4KQo+ID4gKyNk ZWZpbmUgSU1YMjgzX1JFR19IVFJJTU1JTkdfRU5ECUNDSV9SRUcxNl9MRSgweDMwNWEpCj4gPiAr Cj4gPiArI2RlZmluZSBJTVgyODNfUkVHX01EU0VMMTgJCUNDSV9SRUcxNl9MRSgweDMwZjYpCj4g PiArCj4gPiArLyogTWFzdGVyIE1vZGUgT3BlcmF0aW9uIENvbnRyb2wgKi8KPiA+ICsjZGVmaW5l IElNWDI4M19SRUdfWE1TVEEJCUNDSV9SRUc4KDB4MzEwNSkKPiA+ICsjZGVmaW5lICAgSU1YMjgz X1hNU1RBCQkJQklUKDApCj4gPiArCj4gPiArI2RlZmluZSBJTVgyODNfUkVHX1NZTkNEUlYJCUND SV9SRUc4KDB4MzEwNykKPiA+ICsjZGVmaW5lICAgSU1YMjgzX1NZTkNEUlZfWEhTX1hWUwkoMHhh MCB8IDB4MDIpCj4gPiArI2RlZmluZSAgIElNWDI4M19TWU5DRFJWX0hJWgkJKDB4YTAgfCAweDAz KQo+ID4gKwo+ID4gKy8qIFBMTCBTdGFuZGJ5ICovCj4gPiArI2RlZmluZSBJTVgyODNfUkVHX1NU QlBMCQlDQ0lfUkVHOCgweDMyMGIpCj4gPiArI2RlZmluZSAgSU1YMjgzX1NUQlBMX05PUk1BTAkJ MHgwMAo+ID4gKyNkZWZpbmUgIElNWDI4M19TVEJQTF9TVEFOREJZCQkweDAzCj4gPiArCj4gPiAr LyogSW5wdXQgRnJlcXVlbmN5IFNldHRpbmcgKi8KPiA+ICsjZGVmaW5lIElNWDI4M19SRUdfUExS RDEJCUNDSV9SRUc4KDB4MzZjMSkKPiA+ICsjZGVmaW5lIElNWDI4M19SRUdfUExSRDIJCUNDSV9S RUcxNl9MRSgweDM2YzIpCj4gPiArI2RlZmluZSBJTVgyODNfUkVHX1BMUkQzCQlDQ0lfUkVHOCgw eDM2ZjcpCj4gPiArI2RlZmluZSBJTVgyODNfUkVHX1BMUkQ0CQlDQ0lfUkVHOCgweDM2ZjgpCj4g PiArCj4gPiArI2RlZmluZSBJTVgyODNfUkVHX1BMU1RNRzAyCQlDQ0lfUkVHOCgweDM2YWEpCj4g PiArI2RlZmluZSAgIElNWDI4M19QTFNUTUcwMl9WQUwJCTB4MDAKPiA+ICsKPiA+ICsjZGVmaW5l IElNWDI4M19SRUdfRUJEX1hfT1VUX1NJWkUJQ0NJX1JFRzE2X0xFKDB4M2E1NCkKPiA+ICsKPiA+ ICsvKiBUZXN0IHBhdHRlcm4gZ2VuZXJhdG9yICovCj4gPiArI2RlZmluZSBJTVgyODNfUkVHX1RQ R19DVFJMCQlDQ0lfUkVHOCgweDMxNTYpCj4gPiArI2RlZmluZSAgIElNWDI4M19UUEdfQ1RSTF9D TEtFTgkJQklUKDApCj4gPiArI2RlZmluZSAgIElNWDI4M19UUEdfQ1RSTF9QQVRFTgkJQklUKDQp Cj4gPiArCj4gPiArI2RlZmluZSBJTVgyODNfUkVHX1RQR19QQVQJCUNDSV9SRUc4KDB4MzE1NykK PiA+ICsjZGVmaW5lICAgSU1YMjgzX1RQR19QQVRfQUxMXzAwMAkweDAwCj4gPiArI2RlZmluZSAg IElNWDI4M19UUEdfUEFUX0FMTF9GRkYJMHgwMQo+ID4gKyNkZWZpbmUgICBJTVgyODNfVFBHX1BB VF9BTExfNTU1CTB4MDIKPiA+ICsjZGVmaW5lICAgSU1YMjgzX1RQR19QQVRfQUxMX0FBQQkweDAz Cj4gPiArI2RlZmluZSAgIElNWDI4M19UUEdfUEFUX0hfQ09MT1JfQkFSUwkweDBhCj4gPiArI2Rl ZmluZSAgIElNWDI4M19UUEdfUEFUX1ZfQ09MT1JfQkFSUwkweDBiCj4gPiArCj4gPiArLyogRXhw b3N1cmUgY29udHJvbCAqLwo+ID4gKyNkZWZpbmUgSU1YMjgzX0VYUE9TVVJFX01JTgkJNTIKPiA+ ICsjZGVmaW5lIElNWDI4M19FWFBPU1VSRV9TVEVQCQkxCj4gPiArI2RlZmluZSBJTVgyODNfRVhQ T1NVUkVfREVGQVVMVAkJMTAwMAo+ID4gKyNkZWZpbmUgSU1YMjgzX0VYUE9TVVJFX01BWAkJNDk4 NjUKPiA+ICsKPiA+ICsvKiBFbWJlZGRlZCBtZXRhZGF0YSBzdHJlYW0gc3RydWN0dXJlICovCj4g PiArI2RlZmluZSBJTVgyODNfRU1CRURERURfTElORV9XSURUSCAxNjM4NAo+ID4gKyNkZWZpbmUg SU1YMjgzX05VTV9FTUJFRERFRF9MSU5FUyAxCj4gPiArCj4gPiArI2RlZmluZSBNSFooeCkJCQkJ KCh4KSAqIDEwMDAgKiAxMDAwKQo+IAo+IFdlIGhhdmUgTUVHQSBpbiBsaW51eC91bml0cy5oLiBD b3VsZCB5b3UgdXNlIHRoYXQgaW5zdGVhZCBvZiBkZWZpbmluZyB5b3VyCj4gb3duPwo+IAo+ID4g KyNkZWZpbmUgSU1BR0VfUEFECQkJMAo+ID4gKwo+ID4gKyNkZWZpbmUgaW14MjgzX1hDTFJfTUlO X0RFTEFZX1VTCTEwMDAKPiA+ICsjZGVmaW5lIGlteDI4M19YQ0xSX0RFTEFZX1JBTkdFX1VTCTEw MDAKPiA+ICsKPiA+ICsvKiBJTVgyODMgbmF0aXZlIGFuZCBhY3RpdmUgcGl4ZWwgYXJyYXkgc2l6 ZS4gKi8KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfcmVjdCBpbXgyODNfbmF0aXZlX2Fy ZWEgPSB7Cj4gPiArCS50b3AgPSAwLAo+ID4gKwkubGVmdCA9IDAsCj4gPiArCS53aWR0aCA9IDU1 OTIsCj4gPiArCS5oZWlnaHQgPSAzNzEwLAo+ID4gK307Cj4gPiArCj4gPiArc3RhdGljIGNvbnN0 IHN0cnVjdCB2NGwyX3JlY3QgaW14MjgzX2FjdGl2ZV9hcmVhID0gewo+ID4gKwkudG9wID0gNDAs Cj4gPiArCS5sZWZ0ID0gMTA4LAo+ID4gKwkud2lkdGggPSA1NDcyLAo+ID4gKwkuaGVpZ2h0ID0g MzY0OCwKPiA+ICt9Owo+ID4gKwo+ID4gK3N0cnVjdCBJTVgyODNfcmVnX2xpc3Qgewo+ID4gKwl1 bnNpZ25lZCBpbnQgbnVtX29mX3JlZ3M7Cj4gPiArCWNvbnN0IHN0cnVjdCBjY2lfcmVnX3NlcXVl bmNlICpyZWdzOwo+ID4gK307Cj4gPiArCj4gPiArLyogTW9kZSA6IHJlc29sdXRpb24gYW5kIHJl bGF0ZWQgY29uZmlnIHZhbHVlcyAqLwo+ID4gK3N0cnVjdCBpbXgyODNfbW9kZSB7Cj4gPiArCXVu c2lnbmVkIGludCBtb2RlOwo+ID4gKwo+ID4gKwkvKiBCaXRzIHBlciBwaXhlbCAqLwo+ID4gKwl1 bnNpZ25lZCBpbnQgYnBwOwo+ID4gKwo+ID4gKwkvKiBGcmFtZSB3aWR0aCAqLwo+ID4gKwl1bnNp Z25lZCBpbnQgd2lkdGg7Cj4gPiArCj4gPiArCS8qIEZyYW1lIGhlaWdodCAqLwo+ID4gKwl1bnNp Z25lZCBpbnQgaGVpZ2h0Owo+ID4gKwo+ID4gKwkvKgo+ID4gKwkgKiBNaW5pbXVtIGhvcml6b250 YWwgdGltaW5nIGluIHBpeGVsLXVuaXRzCj4gPiArCSAqCj4gPiArCSAqIE5vdGUgdGhhdCBITUFY IGlzIHdyaXR0ZW4gaW4gNzJNSHogdW5pdHMsIGFuZCB0aGUgZGF0YXNoZWV0IGFzc3VtZXMgYQo+ ID4gKwkgKiA3MjBNSHogbGluayBmcmVxdWVuY3kuIENvbnZlcnQgZGF0YXNoZWV0IHZhbHVlcyB3 aXRoIHRoZSBmb2xsb3dpbmc6Cj4gPiArCSAqCj4gPiArCSAqIEZvciAxMiBicHAgbW9kZXMgKDQ4 ME1icHMpIGNvbnZlcnQgd2l0aDoKPiA+ICsJICogICBobWF4ID0gW2htYXggaW4gNzJNSHogdW5p dHNdICogNDgwIC8gNzIKPiA+ICsJICoKPiA+ICsJICogRm9yIDEwIGJwcCBtb2RlcyAoNTc2TWJw cykgY29udmVydCB3aXRoOgo+ID4gKwkgKiAgIGhtYXggPSBbaG1heCBpbiA3Mk1IeiB1bml0c10g KiA1NzYgLyA3Mgo+ID4gKwkgKi8KPiA+ICsJdTY0IG1pbl9obWF4Owo+ID4gKwo+ID4gKwkvKiBt aW5pbXVtIFYtdGltaW5nIGluIGxpbmVzICovCj4gPiArCXU2NCBtaW5fdm1heDsKPiA+ICsKPiA+ ICsJLyogZGVmYXVsdCBILXRpbWluZyAqLwo+ID4gKwl1NjQgZGVmYXVsdF9obWF4Owo+ID4gKwo+ ID4gKwkvKiBkZWZhdWx0IFYtdGltaW5nICovCj4gPiArCXU2NCBkZWZhdWx0X3ZtYXg7Cj4gPiAr Cj4gPiArCS8qIG1pbmltdW0gU0hSICovCj4gPiArCXU2NCBtaW5fc2hyOwo+ID4gKwo+IAo+IFdo eSBhcmUgYWxsIHRoZXNlIDY0LWJpdCBudW1iZXJzPwo+IAo+ID4gKwkvKiBBYnJpdHJhcnkgdmVy dGljYWwgY3JvcHBpbmcgKi8KPiA+ICsJdTMyIHZlZmY7Cj4gPiArCXUzMiB2c3Q7Cj4gPiArCXUz MiB2Y3Q7CgpTdG9yZSB0aGUgY3JvcCByZWN0YW5nbGUgaW4gYSB2NGwyX3JlY3QsIGl0IHdpbGwg bWFrZSBpdCBlYXNpZXIgdG8gbW92ZQp0byBhcmJpdHJhcnkgY3JvcHBpbmcuCgo+ID4gKwo+ID4g KwkvKiBIb3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBiaW5uaW5nIHJhdGlvICovCj4gPiArCXU4IGhi aW5fcmF0aW87Cj4gPiArCXU4IHZiaW5fcmF0aW87CgpTaW1pbGFybHksIHRoZSBiaW5uaW5nIHJh dGlvIHNob3VsZCBiZSBjb21wdXRlZCBiYXNlZCBvbiB0aGUgY3JvcCBzaXplCmFuZCB0aGUgb3V0 cHV0IHNpemUuCgpJbiBnZW5lcmFsLCBzdG9yZSBpbiB0aGlzIHN0cnVjdHVyZSBkYXRhIHRoYXQg bWFwcyB0byB0aGUgVjRMMiBzdWJkZXYKZm9ybWF0cyBhbmQgc2VsZWN0aW9uIHJlY3RhbmdsZXMs IGFuZCBjYWxjdWxhdGUgcmVnaXN0ZXJzIGJhc2VkIG9uCnRob3NlLiBFdmVuIGJldHRlciwgZG9u J3QgbWFrZSB0aGUgZHJpdmVyIG1vZGUtYmFzZWQuCgo+ID4gKwo+ID4gKwkvKiBPcHRpY2FsIEJs YW5raW5nICovCj4gPiArCXUzMiBob3Jpem9udGFsX29iOwo+ID4gKwl1MzIgdmVydGljYWxfb2I7 Cj4gPiArCj4gPiArCS8qIEFuYWxvZyBjcm9wIHJlY3RhbmdsZS4gKi8KPiA+ICsJc3RydWN0IHY0 bDJfcmVjdCBjcm9wOwoKV2hhdCdzIHRoZSAiQXJiaXRyYXJ5IHZlcnRpY2FsIGNyb3BwaW5nIiBh Ym92ZSA/IFlvdSBzaG91bGQgZGV0YWlsIHRoZQppbnRlcm5hbCBwcm9jZXNzaW5nIHBpcGVsaW5l IGluIGEgY29tbWVudCBzb21ld2hlcmUuCgo+ID4gK307Cj4gPiArCj4gPiArc3RydWN0IGlteDI4 M19pbnB1dF9mcmVxdWVuY3kgewo+ID4gKwl1bnNpZ25lZCBpbnQgbWh6Owo+ID4gKwl1bnNpZ25l ZCBpbnQgcmVnX2NvdW50Owo+ID4gKwlzdHJ1Y3QgY2NpX3JlZ19zZXF1ZW5jZSByZWdzWzRdOwo+ ID4gK307Cj4gPiArCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBpbXgyODNfaW5wdXRfZnJlcXVl bmN5IGlteDI4M19mcmVxdWVuY2llc1tdID0gewo+ID4gKwl7Cj4gPiArCQkubWh6ID0gTUhaKDYp LAo+ID4gKwkJLnJlZ19jb3VudCA9IDQsCj4gPiArCQkucmVncyA9IHsKPiA+ICsJCQl7IElNWDI4 M19SRUdfUExSRDEsIDB4MDAgfSwKPiA+ICsJCQl7IElNWDI4M19SRUdfUExSRDIsIDB4MDBmMCB9 LAo+ID4gKwkJCXsgSU1YMjgzX1JFR19QTFJEMywgMHgwMCB9LAo+ID4gKwkJCXsgSU1YMjgzX1JF R19QTFJENCwgMHhjMCB9LAo+ID4gKwkJfSwKPiA+ICsJfSwKPiA+ICsJewo+ID4gKwkJLm1oeiA9 IE1IWigxMiksCj4gPiArCQkucmVnX2NvdW50ID0gNCwKPiA+ICsJCS5yZWdzID0gewo+ID4gKwkJ CXsgSU1YMjgzX1JFR19QTFJEMSwgMHgwMSB9LAo+ID4gKwkJCXsgSU1YMjgzX1JFR19QTFJEMiwg MHgwMGYwIH0sCj4gPiArCQkJeyBJTVgyODNfUkVHX1BMUkQzLCAweDAxIH0sCj4gPiArCQkJeyBJ TVgyODNfUkVHX1BMUkQ0LCAweGMwIH0sCj4gPiArCQl9LAo+ID4gKwl9LAo+ID4gKwl7Cj4gPiAr CQkubWh6ID0gTUhaKDE4KSwKPiA+ICsJCS5yZWdfY291bnQgPSA0LAo+ID4gKwkJLnJlZ3MgPSB7 Cj4gPiArCQkJeyBJTVgyODNfUkVHX1BMUkQxLCAweDAxIH0sCj4gPiArCQkJeyBJTVgyODNfUkVH X1BMUkQyLCAweDAwYTAgfSwKPiA+ICsJCQl7IElNWDI4M19SRUdfUExSRDMsIDB4MDEgfSwKPiA+ ICsJCQl7IElNWDI4M19SRUdfUExSRDQsIDB4ODAgfSwKPiA+ICsJCX0sCj4gPiArCX0sCj4gPiAr CXsKPiA+ICsJCS5taHogPSBNSFooMjQpLAo+ID4gKwkJLnJlZ19jb3VudCA9IDQsCj4gPiArCQku cmVncyA9IHsKPiA+ICsJCQl7IElNWDI4M19SRUdfUExSRDEsIDB4MDIgfSwKPiA+ICsJCQl7IElN WDI4M19SRUdfUExSRDIsIDB4MDBmMCB9LAo+ID4gKwkJCXsgSU1YMjgzX1JFR19QTFJEMywgMHgw MiB9LAo+ID4gKwkJCXsgSU1YMjgzX1JFR19QTFJENCwgMHhjMCB9LAo+ID4gKwkJfSwKPiA+ICsJ fSwKPiA+ICt9Owo+ID4gKwo+ID4gK2VudW0gaW14MjgzX21vZGVzIHsKPiA+ICsJSU1YMjgzX01P REVfMCwKPiA+ICsJSU1YMjgzX01PREVfMSwKPiA+ICsJSU1YMjgzX01PREVfMUEsCj4gPiArCUlN WDI4M19NT0RFXzFTLAo+ID4gKwlJTVgyODNfTU9ERV8yLAo+ID4gKwlJTVgyODNfTU9ERV8yQSwK PiA+ICsJSU1YMjgzX01PREVfMywKPiA+ICsJSU1YMjgzX01PREVfNCwKPiA+ICsJSU1YMjgzX01P REVfNSwKPiA+ICsJSU1YMjgzX01PREVfNiwKPiA+ICt9Owo+ID4gKwo+ID4gK3N0cnVjdCBpbXgy ODNfcmVhZG91dF9tb2RlIHsKPiA+ICsJdTY0IG1kc2VsMTsKPiA+ICsJdTY0IG1kc2VsMjsKPiA+ ICsJdTY0IG1kc2VsMzsKPiA+ICsJdTY0IG1kc2VsNDsKPiA+ICt9Owo+ID4gKwo+ID4gK3N0YXRp YyBjb25zdCBzdHJ1Y3QgaW14MjgzX3JlYWRvdXRfbW9kZSBpbXgyODNfcmVhZG91dF9tb2Rlc1td ID0gewo+ID4gKwkvKiBBbGwgcGl4ZWwgc2NhbiBtb2RlcyAqLwo+ID4gKwlbSU1YMjgzX01PREVf MF0gPSB7IDB4MDQsIDB4MDMsIDB4MTAsIDB4MDAgfSwgLyogMTIgYml0ICovCj4gPiArCVtJTVgy ODNfTU9ERV8xXSA9IHsgMHgwNCwgMHgwMSwgMHgwMCwgMHgwMCB9LCAvKiAxMCBiaXQgKi8KPiA+ ICsJW0lNWDI4M19NT0RFXzFBXSA9IHsgMHgwNCwgMHgwMSwgMHgyMCwgMHg1MCB9LCAvKiAxMCBi aXQgKi8KPiA+ICsJW0lNWDI4M19NT0RFXzFTXSA9IHsgMHgwNCwgMHg0MSwgMHgyMCwgMHg1MCB9 LCAvKiAxMCBiaXQgKi8KPiA+ICsKPiA+ICsJLyogSG9yaXpvbnRhbCAvIFZlcnRpY2FsIDIvMi1s aW5lIGJpbm5pbmcgKi8KPiA+ICsJW0lNWDI4M19NT0RFXzJdID0geyAweDBkLCAweDExLCAweDUw LCAweDAwIH0sIC8qIDEyIGJpdCAqLwo+ID4gKwlbSU1YMjgzX01PREVfMkFdID0geyAweDBkLCAw eDExLCAweDcwLCAweDUwIH0sIC8qIDEyIGJpdCAqLwo+ID4gKwo+ID4gKwkvKiBIb3Jpem9udGFs IC8gVmVydGljYWwgMy8zLWxpbmUgYmlubmluZyAqLwo+ID4gKwlbSU1YMjgzX01PREVfM10gPSB7 IDB4MWUsIDB4MTgsIDB4MTAsIDB4MDAgfSwgLyogMTIgYml0ICovCj4gPiArCj4gPiArCS8qIFZl cml0Y2FsIDIvOSBzdWJzYW1wbGluZywgaG9yaXpvbnRhbCAzIGJpbm5pbmcgY3JvcHBpbmcgKi8K PiA+ICsJW0lNWDI4M19NT0RFXzRdID0geyAweDI5LCAweDE4LCAweDMwLCAweDUwIH0sIC8qIDEy IGJpdCAqLwo+ID4gKwo+ID4gKwkvKiBWZXJ0aWNhbCAyLzE5IHN1YnNhbXBsaW5nIGJpbm5pbmcs IGhvcml6b250YWwgMyBiaW5uaW5nICovCj4gPiArCVtJTVgyODNfTU9ERV81XSA9IHsgMHgyZCwg MHgxOCwgMHgxMCwgMHgwMCB9LCAvKiAxMiBiaXQgKi8KPiA+ICsKPiA+ICsJLyogVmVydGljYWwg MiBiaW5uaW5nIGhvcml6b250YWwgMi80LCBzdWJzYW1wbGluZyAxNjo5IGNyb3BwaW5nICovCj4g PiArCVtJTVgyODNfTU9ERV82XSA9IHsgMHgxOCwgMHgyMSwgMHgwMCwgMHgwOSB9LCAvKiAxMCBi aXQgKi8KPiA+ICt9Owo+ID4gKwo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2NpX3JlZ19zZXF1 ZW5jZSBtaXBpX2RhdGFfcmF0ZV8xNDQwTWJwc1tdID0gewo+ID4gKwkvKiBUaGUgZGVmYXVsdCBy ZWdpc3RlciBzZXR0aW5ncyBwcm92aWRlIHRoZSAxNDQwTWJwcyByYXRlICovCj4gPiArCXsgQ0NJ X1JFRzgoMHgzNmM1KSwgMHgwMCB9LCAvKiBVbmRvY3VtZW50ZWQgKi8KPiA+ICsJeyBDQ0lfUkVH OCgweDNhYzQpLCAweDAwIH0sIC8qIFVuZG9jdW1lbnRlZCAqLwo+ID4gKwo+ID4gKwl7IENDSV9S RUc4KDB4MzIwQiksIDB4MDAgfSwgLyogU1RCUEwgKi8KCkRlZmluZSBuYW1lZCBtYWNyb3MgZm9y IHRoZSByZWdpc3RlcnMgaW5zdGVhZCBvZiBhZGRpbmcgY29tbWVudHMgYXQgdGhlCmVuZCBvZiB0 aGUgbGluZXMgaGVyZS4KCj4gPiArCXsgQ0NJX1JFRzgoMHgzMDE4KSwgMHhhNyB9LCAvKiBUQ0xL UE9TVCAqLwo+ID4gKwl7IENDSV9SRUc4KDB4MzAxQSksIDB4NmYgfSwgLyogVEhTUFJFUEFSRSAq Lwo+ID4gKwl7IENDSV9SRUc4KDB4MzAxQyksIDB4OWYgfSwgLyogVEhTWkVSTyAqLwo+ID4gKwl7 IENDSV9SRUc4KDB4MzAxRSksIDB4NWYgfSwgLyogVEhTVFJBSUwgKi8KPiA+ICsJeyBDQ0lfUkVH OCgweDMwMjApLCAweDVmIH0sIC8qIFRDTEtUUkFJTCAqLwo+ID4gKwl7IENDSV9SRUc4KDB4MzAy MiksIDB4NmYgfSwgLyogVENMS1BSRVBBUkUgKi8KPiA+ICsJeyBDQ0lfUkVHOCgweDMwMjQpLCAw eDdmIH0sIC8qIFRDTEtaRVJPWzc6MF0gKi8KPiA+ICsJeyBDQ0lfUkVHOCgweDMwMjUpLCAweDAx IH0sIC8qIFRDTEtaRVJPWzhdICovCj4gPiArCXsgQ0NJX1JFRzgoMHgzMDI2KSwgMHg0ZiB9LCAv KiBUTFBYKi8KPiA+ICsJeyBDQ0lfUkVHOCgweDMwMjgpLCAweDQ3IH0sIC8qIFRIU0VYSVQgKi8K PiA+ICsJeyBDQ0lfUkVHOCgweDMwMkEpLCAweDA3IH0sIC8qIFRDS0xQUkUgKi8KPiA+ICsJeyBD Q0lfUkVHOCgweDMxMDQpLCAweDAyIH0sIC8qIFNZU01PREUgKi8KPiA+ICt9Owo+ID4gKwo+ID4g K3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2NpX3JlZ19zZXF1ZW5jZSBtaXBpX2RhdGFfcmF0ZV83MjBN YnBzW10gPSB7Cj4gPiArCS8qIFVuZG9jdW1lbnRlZCBBZGRpdGlvbnMgIkZvciA3MjBNQnBzIiBT ZXR0aW5nICovCj4gPiArCXsgQ0NJX1JFRzgoMHgzNmM1KSwgMHgwMSB9LCAvKiBVbmRvY3VtZW50 ZWQgKi8KPiA+ICsJeyBDQ0lfUkVHOCgweDNhYzQpLCAweDAxIH0sIC8qIFVuZG9jdW1lbnRlZCAq Lwo+ID4gKwo+ID4gKwl7IENDSV9SRUc4KDB4MzIwQiksIDB4MDAgfSwgLyogU1RCUEwgKi8KPiA+ ICsJeyBDQ0lfUkVHOCgweDMwMTgpLCAweDc3IH0sIC8qIFRDTEtQT1NUICovCj4gPiArCXsgQ0NJ X1JFRzgoMHgzMDFBKSwgMHgzNyB9LCAvKiBUSFNQUkVQQVJFICovCj4gPiArCXsgQ0NJX1JFRzgo MHgzMDFDKSwgMHg2NyB9LCAvKiBUSFNaRVJPICovCj4gPiArCXsgQ0NJX1JFRzgoMHgzMDFFKSwg MHgzNyB9LCAvKiBUSFNUUkFJTCAqLwo+ID4gKwl7IENDSV9SRUc4KDB4MzAyMCksIDB4MzcgfSwg LyogVENMS1RSQUlMICovCj4gPiArCXsgQ0NJX1JFRzgoMHgzMDIyKSwgMHgzNyB9LCAvKiBUQ0xL UFJFUEFSRSAqLwo+ID4gKwl7IENDSV9SRUc4KDB4MzAyNCksIDB4REYgfSwgLyogVENMS1pFUk9b NzowXSAqLwo+ID4gKwl7IENDSV9SRUc4KDB4MzAyNSksIDB4MDAgfSwgLyogVENMS1pFUk9bOF0g Ki8KPiA+ICsJeyBDQ0lfUkVHOCgweDMwMjYpLCAweDJGIH0sIC8qIFRMUFgqLwo+ID4gKwl7IEND SV9SRUc4KDB4MzAyOCksIDB4NDcgfSwgLyogVEhTRVhJVCAqLwo+ID4gKwl7IENDSV9SRUc4KDB4 MzAyQSksIDB4MEYgfSwgLyogVENLTFBSRSAqLwo+ID4gKwl7IENDSV9SRUc4KDB4MzEwNCksIDB4 MDIgfSwgLyogU1lTTU9ERSAqLwo+ID4gK307Cj4gPiArCj4gPiArc3RhdGljIGNvbnN0IHM2NCBs aW5rX2ZyZXF1ZW5jaWVzW10gPSB7Cj4gPiArCU1IWig3MjApLCAvKiAxNDQwIE1icHMgbGFuZSBk YXRhIHJhdGUgKi8KPiA+ICsJTUhaKDM2MCksIC8qIDcyMCBNYnBzIGRhdGEgbGFuZSByYXRlICov Cj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IElNWDI4M19yZWdfbGlzdCBs aW5rX2ZyZXFfcmVnbGlzdFtdID0gewo+ID4gKwl7IC8qIE1IWig3MjApKi8KPiAKPiBNaXNzaW5n IHNwYWNlIGJlZm9yZSAnKicuCj4gCj4gPiArCQkubnVtX29mX3JlZ3MgPSBBUlJBWV9TSVpFKG1p cGlfZGF0YV9yYXRlXzE0NDBNYnBzKSwKPiA+ICsJCS5yZWdzID0gbWlwaV9kYXRhX3JhdGVfMTQ0 ME1icHMsCj4gPiArCX0sCj4gPiArCXsgLyogTUhaKDM2MCkgKi8KPiA+ICsJCS5udW1fb2ZfcmVn cyA9IEFSUkFZX1NJWkUobWlwaV9kYXRhX3JhdGVfNzIwTWJwcyksCj4gPiArCQkucmVncyA9IG1p cGlfZGF0YV9yYXRlXzcyME1icHMsCj4gPiArCX0sCj4gPiArfTsKPiA+ICsKPiA+ICsjZGVmaW5l IENFTlRFUkVEX1JFQ1RBTkdMRShyZWN0LCBfd2lkdGgsIF9oZWlnaHQpIFwKPiA+ICsJeyBcCj4g PiArCQkubGVmdCA9IHJlY3QubGVmdCArICgocmVjdC53aWR0aCAtIChfd2lkdGgpKSAvIDIpLCBc Cj4gPiArCQkudG9wID0gcmVjdC50b3AgKyAoKHJlY3QuaGVpZ2h0IC0gKF9oZWlnaHQpKSAvIDIp LCBcCj4gPiArCQkud2lkdGggPSAoX3dpZHRoKSwgXAo+ID4gKwkJLmhlaWdodCA9IChfaGVpZ2h0 KSwgXAo+IAo+IFBsZWFzZSBhbGlnbiB0aGUgYmFja3NsYXNoZXMgdG8gdGhlIHNhbWUgY29sdW1u Lgo+IAo+ID4gKwl9Cj4gPiArCj4gPiArLyogTW9kZSBjb25maWdzICovCj4gPiArc3RhdGljIGNv bnN0IHN0cnVjdCBpbXgyODNfbW9kZSBzdXBwb3J0ZWRfbW9kZXNfMTJiaXRbXSA9IHsKPiA+ICsJ ewo+ID4gKwkJLyogMjBNUGl4IDIxLjQwIGZwcyByZWFkb3V0IG1vZGUgMCAqLwo+ID4gKwkJLm1v ZGUgPSBJTVgyODNfTU9ERV8wLAo+ID4gKwkJLmJwcCA9IDEyLAo+ID4gKwkJLndpZHRoID0gNTQ3 MiwKPiA+ICsJCS5oZWlnaHQgPSAzNjQ4LAo+ID4gKwkJLm1pbl9obWF4ID0gNTkxNCwgLyogODg3 IEAgNDgwTUh6LzcyTUh6ICovCj4gPiArCQkubWluX3ZtYXggPSAzNzkzLCAvKiBMaW5lcyAqLwo+ ID4gKwo+ID4gKwkJLnZlZmYgPSAzNjk0LAo+ID4gKwkJLnZzdCA9IDAsCj4gPiArCQkudmN0ID0g MCwKPiA+ICsKPiA+ICsJCS5oYmluX3JhdGlvID0gMSwKPiA+ICsJCS52YmluX3JhdGlvID0gMSwK PiA+ICsKPiA+ICsJCS8qIDIwLjAwIEZQUyAqLwo+ID4gKwkJLmRlZmF1bHRfaG1heCA9IDYwMDAs IC8qIDkwMCBAIDQ4ME1Iei83Mk1IeiAqLwo+ID4gKwkJLmRlZmF1bHRfdm1heCA9IDQwMDAsCj4g PiArCj4gPiArCQkubWluX3NociA9IDExLAo+ID4gKwkJLmhvcml6b250YWxfb2IgPSA5NiwKPiA+ ICsJCS52ZXJ0aWNhbF9vYiA9IDE2LAo+ID4gKwkJLmNyb3AgPSBDRU5URVJFRF9SRUNUQU5HTEUo aW14MjgzX2FjdGl2ZV9hcmVhLCA1NDcyLCAzNjQ4KSwKPiA+ICsJfSwKPiA+ICsJewo+ID4gKwkJ LyoKPiA+ICsJCSAqIFJlYWRvdXQgbW9kZSAyIDogMi8yIGJpbm5lZCBtb2RlICgyNzM2eDE4MjQp Cj4gPiArCQkgKi8KPiA+ICsJCS5tb2RlID0gSU1YMjgzX01PREVfMiwKPiA+ICsJCS5icHAgPSAx MiwKPiA+ICsJCS53aWR0aCA9IDI3MzYsCj4gPiArCQkuaGVpZ2h0ID0gMTgyNCwKPiA+ICsJCS5t aW5faG1heCA9IDE4NzAsIC8qIFBpeGVscyAoMzYyICogMzYwLzcyICsgcGFkZGluZykgKi8KPiA+ ICsJCS5taW5fdm1heCA9IDM4NDAsIC8qIExpbmVzICovCj4gPiArCj4gPiArCQkvKiA1MC4wMCBG UFMgKi8KPiA+ICsJCS5kZWZhdWx0X2htYXggPSAxODcwLCAvKiAzNjIgQCAzNjBNSHovNzJNSHog Ki8KPiA+ICsJCS5kZWZhdWx0X3ZtYXggPSAzOTYwLAo+ID4gKwo+ID4gKwkJLnZlZmYgPSAxODI0 LAo+ID4gKwkJLnZzdCA9IDAsCj4gPiArCQkudmN0ID0gMCwKPiA+ICsKPiA+ICsJCS5oYmluX3Jh dGlvID0gMiwKPiA+ICsJCS52YmluX3JhdGlvID0gMiwKPiA+ICsKPiA+ICsJCS5taW5fc2hyID0g MTIsCj4gPiArCQkuaG9yaXpvbnRhbF9vYiA9IDQ4LAo+ID4gKwkJLnZlcnRpY2FsX29iID0gNCwK PiA+ICsKPiA+ICsJCS5jcm9wID0gQ0VOVEVSRURfUkVDVEFOR0xFKGlteDI4M19hY3RpdmVfYXJl YSwgNTQ3MiwgMzY0OCksCj4gPiArCX0sCj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgY29uc3Qg c3RydWN0IGlteDI4M19tb2RlIHN1cHBvcnRlZF9tb2Rlc18xMGJpdFtdID0gewo+ID4gKwl7Cj4g PiArCQkvKiAyME1QaXggMjUuNDggZnBzIHJlYWRvdXQgbW9kZSAxICovCj4gPiArCQkubW9kZSA9 IElNWDI4M19NT0RFXzEsCj4gPiArCQkuYnBwID0gMTAsCj4gPiArCQkud2lkdGggPSA1NDcyLAo+ ID4gKwkJLmhlaWdodCA9IDM2NDgsCj4gPiArCQkubWluX2htYXggPSA1OTYwLCAvKiA3NDUgQCA1 NzZNSHogLyA3Mk1IeiAqLwo+ID4gKwkJLm1pbl92bWF4ID0gMzc5MywKPiA+ICsKPiA+ICsJCS8q IDI1LjAwIEZQUyAqLwo+ID4gKwkJLmRlZmF1bHRfaG1heCA9IDE1MDAsIC8qIDc1MCBAIDU3Nk1I eiAvIDcyTUh6ICovCj4gPiArCQkuZGVmYXVsdF92bWF4ID0gMzg0MCwKPiA+ICsKPiA+ICsJCS5t aW5fc2hyID0gMTAsCj4gPiArCQkuaG9yaXpvbnRhbF9vYiA9IDk2LAo+ID4gKwkJLnZlcnRpY2Fs X29iID0gMTYsCj4gPiArCQkuY3JvcCA9IENFTlRFUkVEX1JFQ1RBTkdMRShpbXgyODNfYWN0aXZl X2FyZWEsIDU0NzIsIDM2NDgpLAo+ID4gKwl9LAo+ID4gK307Cj4gPiArCj4gPiArLyoKPiA+ICsg KiBUaGUgc3VwcG9ydGVkIG1idXMgZm9ybWF0cy4KPiA+ICsgKi8KPiA+ICtzdGF0aWMgY29uc3Qg dTMyIGNvZGVzW10gPSB7Cj4gPiArCS8qIDEyLWJpdCBtb2Rlcy4gKi8KPiA+ICsJTUVESUFfQlVT X0ZNVF9TUkdHQjEyXzFYMTIsCj4gPiArCj4gPiArCS8qIDEwLWJpdCBtb2Rlcy4gKi8KPiAKPiBJ J2Qgc2F5IHRoZSB0aHJlZSBjb21tZW50cyBhcmUgcmVkdW5kYW50Lgo+IAo+ID4gKwlNRURJQV9C VVNfRk1UX1NSR0dCMTBfMVgxMCwKPiA+ICt9Owo+ID4gKwo+ID4gKy8qIHJlZ3VsYXRvciBzdXBw bGllcyAqLwo+ID4gK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBpbXgyODNfc3VwcGx5X25hbWVb XSA9IHsKPiA+ICsJInZhbmEiLCAvKiBBbmFsb2cgKDIuOVYpIHN1cHBseSAqLwo+ID4gKwkidmRp ZyIsIC8qIFN1cHBseSBWb2x0YWdlIDIgKDEuOFYpIHN1cHBseSAqLwo+ID4gKwkidmRkbCIsIC8q IFN1cHBseSBWb2x0YWdlIDMgKDEuMlYpIHN1cHBseSAqLwo+ID4gK307Cj4gPiArCj4gPiArCj4g PiArc3RydWN0IGlteDI4MyB7Cj4gPiArCXN0cnVjdCBkZXZpY2UgKmRldjsKPiA+ICsJc3RydWN0 IHJlZ21hcCAqY2NpOwo+ID4gKwo+ID4gKwljb25zdCBzdHJ1Y3QgaW14MjgzX2lucHV0X2ZyZXF1 ZW5jeSAqZnJlcTsKPiA+ICsKPiA+ICsJc3RydWN0IHY0bDJfc3ViZGV2IHNkOwo+ID4gKwlzdHJ1 Y3QgbWVkaWFfcGFkIHBhZDsKPiA+ICsKPiA+ICsJdW5zaWduZWQgaW50IGZtdF9jb2RlOwoKU2V0 IGJ1dCBuZXZlciB1c2VkLCBkcm9wIGl0LgoKPiA+ICsKPiA+ICsJc3RydWN0IGNsayAqeGNsazsK PiA+ICsKPiA+ICsJc3RydWN0IGdwaW9fZGVzYyAqcmVzZXRfZ3BpbzsKPiA+ICsJc3RydWN0IHJl Z3VsYXRvcl9idWxrX2RhdGEgc3VwcGxpZXNbQVJSQVlfU0laRShpbXgyODNfc3VwcGx5X25hbWUp XTsKPiA+ICsKPiA+ICsJLyogVjRMMiBDb250cm9scyAqLwo+ID4gKwlzdHJ1Y3QgdjRsMl9jdHJs X2hhbmRsZXIgY3RybF9oYW5kbGVyOwo+ID4gKwlzdHJ1Y3QgdjRsMl9jdHJsICpwaXhlbF9yYXRl Owo+ID4gKwlzdHJ1Y3QgdjRsMl9jdHJsICpsaW5rX2ZyZXE7Cj4gPiArCXN0cnVjdCB2NGwyX2N0 cmwgKmV4cG9zdXJlOwo+ID4gKwlzdHJ1Y3QgdjRsMl9jdHJsICp2Ymxhbms7Cj4gPiArCXN0cnVj dCB2NGwyX2N0cmwgKmhibGFuazsKPiA+ICsJc3RydWN0IHY0bDJfY3RybCAqdmZsaXA7Cj4gCj4g UGxlYXNlIHN0b3JlIHBvaW50ZXJzIG9ubHkgdG8gY29udHJvbHMgeW91IG5lZWQgdG8gYWNjZXNz IG91dHNpZGUgdGhlCj4gY29udHJvbCBoYW5kbGVyJ3MgY2FsbGJhY2tzLgo+IAo+ID4gKwo+ID4g KwlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CgpJdCBkb2Vzbid0IHNlZW0gbGlrZSB5b3UgbmVlZCBhIGN1 c3RvbSBsb2NrLiBZb3UgaG93ZXZlciBuZWVkIHRvIHVzZSB0aGUKc2FtZSBsb2NrIGZvciB0aGUg YWN0aXZlIHN0YXRlIGFuZCB0aGUgY29udHJvbHMsIGFuZCB0aGF0IGNhbiBiZSB0aGUKZGVmYXVs dCBjb250cm9sIGhhbmRsZXIgbG9jay4KCj4gPiArCj4gPiArCS8qIEN1cnJlbnQgbW9kZSAqLwo+ ID4gKwljb25zdCBzdHJ1Y3QgaW14MjgzX21vZGUgKm1vZGU7CgpEcm9wIHRoaXMgZmllbGQgYW5k IGZpbmQgdGhlIG1vZGUgaW4gdGhlIGlteDI4M19zdGFydF9zdHJlYW1pbmfCpykKZnVuY3Rpb24g YmFzZWQgb24gdGhlIGFjdGl2ZSBzdGF0ZSBpbnN0ZWFkLCBhbmQgcGFzcyBpdCBmcm9tIHRoZXJl IHRvCnRoZSBvdGhlciBmdW5jdGlvbnMgdGhhdCBuZWVkIGl0IHdoZW4gc3RhcnRpbmcgdGhlIHN0 cmVhbS4KCj4gPiArCj4gPiArCXVuc2lnbmVkIGxvbmcgbGlua19mcmVxX2JpdG1hcDsKPiA+ICsK PiA+ICsJdTE2IGhtYXg7Cj4gPiArCXUzMiB2bWF4Owo+ID4gK307Cj4gPiArCj4gPiArc3RhdGlj IGlubGluZSBzdHJ1Y3QgaW14MjgzICp0b19pbXgyODMoc3RydWN0IHY0bDJfc3ViZGV2ICpfc2Qp Cj4gPiArewo+ID4gKwlyZXR1cm4gY29udGFpbmVyX29mKF9zZCwgc3RydWN0IGlteDI4Mywgc2Qp Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X21vZGVfdGFibGUodW5z aWduZWQgaW50IGNvZGUsCj4gPiArCQkJCSAgY29uc3Qgc3RydWN0IGlteDI4M19tb2RlICoqbW9k ZV9saXN0LAo+ID4gKwkJCQkgIHVuc2lnbmVkIGludCAqbnVtX21vZGVzKQo+ID4gK3sKPiA+ICsJ c3dpdGNoIChjb2RlKSB7Cj4gPiArCS8qIDEyLWJpdCAqLwo+ID4gKwljYXNlIE1FRElBX0JVU19G TVRfU1JHR0IxMl8xWDEyOgo+ID4gKwljYXNlIE1FRElBX0JVU19GTVRfU0dSQkcxMl8xWDEyOgo+ ID4gKwljYXNlIE1FRElBX0JVU19GTVRfU0dCUkcxMl8xWDEyOgo+ID4gKwljYXNlIE1FRElBX0JV U19GTVRfU0JHR1IxMl8xWDEyOgo+ID4gKwkJKm1vZGVfbGlzdCA9IHN1cHBvcnRlZF9tb2Rlc18x MmJpdDsKPiA+ICsJCSpudW1fbW9kZXMgPSBBUlJBWV9TSVpFKHN1cHBvcnRlZF9tb2Rlc18xMmJp dCk7Cj4gPiArCQlicmVhazsKPiA+ICsJLyogMTAtYml0ICovCj4gCj4gVGhlc2UgdHdvIGNvbW1l bnRzIHNlZW0gcmVkdWRhbnQsIHRvby4KPiAKPiA+ICsJY2FzZSBNRURJQV9CVVNfRk1UX1NSR0dC MTBfMVgxMDoKPiA+ICsJY2FzZSBNRURJQV9CVVNfRk1UX1NHUkJHMTBfMVgxMDoKPiA+ICsJY2Fz ZSBNRURJQV9CVVNfRk1UX1NHQlJHMTBfMVgxMDoKPiA+ICsJY2FzZSBNRURJQV9CVVNfRk1UX1NC R0dSMTBfMVgxMDoKPiA+ICsJCSptb2RlX2xpc3QgPSBzdXBwb3J0ZWRfbW9kZXNfMTBiaXQ7Cj4g PiArCQkqbnVtX21vZGVzID0gQVJSQVlfU0laRShzdXBwb3J0ZWRfbW9kZXNfMTBiaXQpOwo+ID4g KwkJYnJlYWs7Cj4gPiArCWRlZmF1bHQ6Cj4gPiArCQkqbW9kZV9saXN0ID0gTlVMTDsKPiA+ICsJ CSpudW1fbW9kZXMgPSAwOwo+ID4gKwl9Cj4gPiArfQo+ID4gKwo+ID4gKy8qIENhbGN1bGF0ZSB0 aGUgUGl4ZWwgUmF0ZSBiYXNlZCBvbiB0aGUgY3VycmVudCBtb2RlICovCj4gPiArc3RhdGljIHU2 NCBpbXgyODNfcGl4ZWxfcmF0ZShzdHJ1Y3QgaW14MjgzICppbXgyODMpCj4gPiArewo+ID4gKwlj b25zdCBzdHJ1Y3QgaW14MjgzX21vZGUgKm1vZGUgPSBpbXgyODMtPm1vZGU7Cj4gPiArCXVuc2ln bmVkIGludCBicHAgPSBtb2RlLT5icHA7Cj4gPiArCj4gPiArCWNvbnN0IHVuc2lnbmVkIGludCBk ZHIgPSAyOyAvKiBEb3VibGUgRGF0YSBSYXRlICovCj4gPiArCWNvbnN0IHVuc2lnbmVkIGludCBs YW5lcyA9IDQ7IC8qIE9ubHkgNCBsYW5lIHN1cHBvcnQgKi8KPiA+ICsKPiAKPiBFeHRyYSBuZXds aW5lcy4KPiAKPiA+ICsJdTY0IGxpbmtfZnJlcXVlbmN5ID0gbGlua19mcmVxdWVuY2llc1tfX2Zm cyhpbXgyODMtPmxpbmtfZnJlcV9iaXRtYXApXTsKPiA+ICsJdTY0IHBpeGVsX3JhdGUgPSBsaW5r X2ZyZXF1ZW5jeSAqIGRkciAqIGxhbmVzIC8gYnBwOwo+IAo+IAlyZXR1cm4gLi4uOwo+IAo+ID4g Kwo+ID4gKwlyZXR1cm4gcGl4ZWxfcmF0ZTsKPiA+ICt9Cj4gPiArCj4gPiArLyogQ29udmVydCBm cm9tIGEgdmFyaWFibGUgcGl4ZWxfcmF0ZSB0byA3MiBNSHogY2xvY2sgY3ljbGVzICovCj4gPiAr c3RhdGljIHU2NCBpbXgyODNfaW50ZXJuYWxfY2xvY2sodW5zaWduZWQgaW50IHBpeGVsX3JhdGUs IHVuc2lnbmVkIGludCBwaXhlbHMpCj4gPiArewo+ID4gKwkvKgo+ID4gKwkgKiBEZXRlcm1pbmUg dGhlIGZvbGxvd2luZyBvcGVyYXRpb24gd2l0aG91dCBvdmVyZmxvdzoKPiA+ICsJICogICAgcGl4 ZWxzICogTUhaKDcyKSAvIHBpeGVsX3JhdGUKPiA+ICsJICoKPiA+ICsJICogVGhlIGludGVybmFs IGNsb2NrIGF0IDcyTUh6IGFuZCBQaXhlbCBSYXRlIChiZXR3ZWVuIDI0MCBhbmQgNTc2TUh6KQo+ ID4gKwkgKiBjYW4gZWFzaWx5IG92ZXJmbG93IHRoaXMgY2FsY3VsYXRpb24sIHNvIHByZS1kaXZp ZGUgdG8gc2ltcGxpZnkuCj4gPiArCSAqLwo+ID4gKwljb25zdCB1MzIgaWNsa19wcmUgPSBNSFoo NzIpIC8gMTAwMDAwMDsKPiA+ICsJY29uc3QgdTMyIHBjbGtfcHJlID0gcGl4ZWxfcmF0ZSAvIDEw MDAwMDA7Cj4gPiArCj4gPiArCXJldHVybiBwaXhlbHMgKiBpY2xrX3ByZSAvIHBjbGtfcHJlOwo+ ID4gK30KPiA+ICsKPiA+ICsvKiBJbnRlcm5hbCBjbG9jayAoNzJNSHopIHRvIFBpeGVsIFJhdGUg Y2xvY2sgKFZhcmlhYmxlKSAqLwo+ID4gK3N0YXRpYyB1NjQgaW14MjgzX2ljbGtfdG9fcGl4KHVu c2lnbmVkIGludCBwaXhlbF9yYXRlLCB1bnNpZ25lZCBpbnQgY3ljbGVzKQo+ID4gK3sKPiA+ICsJ LyoKPiA+ICsJICogRGV0ZXJtaW5lIHRoZSBmb2xsb3dpbmcgb3BlcmF0aW9uIHdpdGhvdXQgb3Zl cmZsb3c6Cj4gPiArCSAqICAgIGN5Y2xlcyAqIHBpeGVsX3JhdGUgLyBNSFooNzIpCj4gPiArCSAq Cj4gPiArCSAqIFRoZSBpbnRlcm5hbCBjbG9jayBhdCA3Mk1IeiBhbmQgUGl4ZWwgUmF0ZSAoYmV0 d2VlbiAyNDAgYW5kIDU3Nk1IeikKPiA+ICsJICogY2FuIGVhc2lseSBvdmVyZmxvdyB0aGlzIGNh bGN1bGF0aW9uLCBzbyBwcmUtZGl2aWRlIHRvIHNpbXBsaWZ5Lgo+ID4gKwkgKi8KPiA+ICsJY29u c3QgdTMyIGljbGtfcHJlID0gTUhaKDcyKSAvIDEwMDAwMDA7Cj4gPiArCWNvbnN0IHUzMiBwY2xr X3ByZSA9IHBpeGVsX3JhdGUgLyAxMDAwMDAwOwo+ID4gKwo+ID4gKwlyZXR1cm4gY3ljbGVzICog cGNsa19wcmUgLyBpY2xrX3ByZTsKPiA+ICt9Cj4gPiArCj4gPiArLyogRGV0ZXJtaW5lIHRoZSBl eHBvc3VyZSBiYXNlZCBvbiBjdXJyZW50IGhtYXgsIHZtYXggYW5kIGEgZ2l2ZW4gU0hSICovCj4g PiArc3RhdGljIHU2NCBpbXgyODNfZXhwb3N1cmUoc3RydWN0IGlteDI4MyAqaW14MjgzLCB1NjQg c2hyKQo+ID4gK3sKPiA+ICsJdTMyIHN2ciA9IDA7IC8qIFNWUiBmZWF0dXJlIGlzIG5vdCBjdXJy ZW50bHkgc3VwcG9ydGVkICovCj4gPiArCXUzMiBobWF4ID0gaW14MjgzLT5obWF4Owo+ID4gKwl1 NjQgdm1heCA9IGlteDI4My0+dm1heDsKPiA+ICsJdTMyIG9mZnNldDsKPiA+ICsJdTY0IG51bWVy YXRvcjsKPiA+ICsKPiA+ICsJLyogTnVtYmVyIG9mIGNsb2NrcyBwZXIgaW50ZXJuYWwgb2Zmc2V0 IHBlcmlvZCAqLwo+ID4gKwlvZmZzZXQgPSBpbXgyODMtPm1vZGUtPm1vZGUgPT0gSU1YMjgzX01P REVfMCA/IDIwOSA6IDE1NzsKPiA+ICsJbnVtZXJhdG9yID0gKHZtYXggKiAoc3ZyICsgMSkgLSBz aHIpICogaG1heCArIG9mZnNldDsKPiA+ICsKPiA+ICsJZG9fZGl2KG51bWVyYXRvciwgaG1heCk7 Cj4gPiArCW51bWVyYXRvciA9IGNsYW1wX3QodTMyLCBudW1lcmF0b3IsIDAsIDB4RkZGRkZGRkYp Owo+ID4gKwlyZXR1cm4gbnVtZXJhdG9yOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBp bXgyODNfZXhwb3N1cmVfbGltaXRzKHN0cnVjdCBpbXgyODMgKmlteDI4MywKPiA+ICsJCQkJICAg dTY0ICptaW5fZXhwb3N1cmUsIHU2NCAqbWF4X2V4cG9zdXJlKQo+ID4gK3sKPiA+ICsJdTY0IHZt YXggPSBpbXgyODMtPnZtYXg7Cj4gPiArCXUzMiBzdnIgPSAwOyAvKiBTVlIgZmVhdHVyZSBpcyBu b3QgY3VycmVudGx5IHN1cHBvcnRlZCAqLwo+ID4gKwl1NjQgbWluX3NociA9IGlteDI4My0+bW9k ZS0+bWluX3NocjsKPiA+ICsJdTY0IG1heF9zaHIgPSAoc3ZyICsgMSkgKiB2bWF4IC0gNDsgLyog R2xvYmFsIFNodXR0ZXIgaXMgbm90IHN1cHBvcnRlZCAqLwo+ID4gKwo+ID4gKwltYXhfc2hyID0g bWluX3QodTY0LCBtYXhfc2hyLCAweEZGRkYpOwo+ID4gKwo+ID4gKwkqbWluX2V4cG9zdXJlID0g aW14MjgzX2V4cG9zdXJlKGlteDI4MywgbWF4X3Nocik7Cj4gPiArCSptYXhfZXhwb3N1cmUgPSBp bXgyODNfZXhwb3N1cmUoaW14MjgzLCBtaW5fc2hyKTsKPiA+ICt9Cj4gPiArCj4gPiArLyoKPiA+ ICsgKiBJbnRlZ3JhdGlvbiBUaW1lIFtzXSA9IFt7Vk1BWCB4IChTVlIgKyAxKSDigJMgKFNIUil9 IHggSE1BWCArIG9mZnNldF0KPiA+ICsgKiAgICAgICAgICAgICAgICAgICAgICAvICg3MiB4IDEw XjYpCj4gPiArICovCj4gPiArc3RhdGljIHUzMiBpbXgyODNfc2hyKHN0cnVjdCBpbXgyODMgKmlt eDI4MywgdTMyIGV4cG9zdXJlKQo+ID4gK3sKPiA+ICsJdTMyIHN2ciA9IDA7IC8qIFNWUiBmZWF0 dXJlIGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkICovCj4gPiArCXUzMiBobWF4ID0gaW14Mjgz LT5obWF4Owo+ID4gKwl1NjQgdm1heCA9IGlteDI4My0+dm1heDsKPiA+ICsJdTMyIHNocjsKPiA+ ICsJdTY0IHRlbXA7Cj4gPiArCj4gPiArCS8qIE51bWJlciBvZiBjbG9ja3MgcGVyIGludGVybmFs IG9mZnNldCBwZXJpb2QgKi8KPiA+ICsJdTMyIG9mZnNldCA9IGlteDI4My0+bW9kZS0+bW9kZSA9 PSBJTVgyODNfTU9ERV8wID8gMjA5IDogMTU3Owo+ID4gKwo+ID4gKwl0ZW1wID0gKCh1NjQpZXhw b3N1cmUgKiBobWF4IC0gb2Zmc2V0KTsKPiA+ICsJZG9fZGl2KHRlbXAsIGhtYXgpOwo+ID4gKwlz aHIgPSAodTMyKSh2bWF4ICogKHN2ciArIDEpIC0gdGVtcCk7Cj4gPiArCj4gPiArCXJldHVybiBz aHI7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgaW14MjgzX3Rw Z19tZW51W10gPSB7Cj4gPiArCSJEaXNhYmxlZCIsCj4gPiArCSJBbGwgMDAwaCIsCj4gPiArCSJB bGwgRkZGaCIsCj4gPiArCSJBbGwgNTU1aCIsCj4gPiArCSJBbGwgQUFBaCIsCj4gPiArCSJIb3Jp em9udGFsIGNvbG9yIGJhcnMiLAo+ID4gKwkiVmVydGljYWwgY29sb3IgYmFycyIsCj4gPiArfTsK PiA+ICsKPiA+ICtzdGF0aWMgY29uc3QgaW50IGlteDI4M190cGdfdmFsW10gPSB7Cj4gPiArCUlN WDI4M19UUEdfUEFUX0FMTF8wMDAsCj4gPiArCUlNWDI4M19UUEdfUEFUX0FMTF8wMDAsCj4gPiAr CUlNWDI4M19UUEdfUEFUX0FMTF9GRkYsCj4gPiArCUlNWDI4M19UUEdfUEFUX0FMTF81NTUsCj4g PiArCUlNWDI4M19UUEdfUEFUX0FMTF9BQUEsCj4gPiArCUlNWDI4M19UUEdfUEFUX0hfQ09MT1Jf QkFSUywKPiA+ICsJSU1YMjgzX1RQR19QQVRfVl9DT0xPUl9CQVJTLAo+ID4gK307Cj4gPiArCj4g PiArc3RhdGljIGludCBpbXgyODNfdXBkYXRlX3Rlc3RfcGF0dGVybihzdHJ1Y3QgaW14MjgzICpp bXgyODMsIHUzMiBwYXR0ZXJuX2luZGV4KQo+ID4gK3sKPiA+ICsJaW50IHJldDsKPiA+ICsKPiA+ ICsJaWYgKHBhdHRlcm5faW5kZXggPj0gQVJSQVlfU0laRShpbXgyODNfdHBnX3ZhbCkpCj4gPiAr CQlyZXR1cm4gLUVJTlZBTDsKPiA+ICsKPiA+ICsJaWYgKHBhdHRlcm5faW5kZXgpIHsKPiA+ICsJ CXJldCA9IGNjaV93cml0ZShpbXgyODMtPmNjaSwgSU1YMjgzX1JFR19UUEdfUEFULAo+ID4gKwkJ CQlpbXgyODNfdHBnX3ZhbFtwYXR0ZXJuX2luZGV4XSwgTlVMTCk7Cj4gPiArCQlpZiAocmV0KQo+ ID4gKwkJCXJldHVybiByZXQ7Cj4gPiArCj4gPiArCQlyZXQgPSBjY2lfd3JpdGUoaW14MjgzLT5j Y2ksIElNWDI4M19SRUdfVFBHX0NUUkwsCj4gPiArCQkJCUlNWDI4M19UUEdfQ1RSTF9DTEtFTiB8 IElNWDI4M19UUEdfQ1RSTF9QQVRFTiwgTlVMTCk7Cj4gPiArCX0gZWxzZSB7Cj4gPiArCQlyZXQg PSBjY2lfd3JpdGUoaW14MjgzLT5jY2ksIElNWDI4M19SRUdfVFBHX0NUUkwsIDB4MDAsIE5VTEwp Owo+ID4gKwl9Cj4gPiArCj4gPiArCXJldHVybiByZXQ7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRp YyBpbnQgaW14MjgzX3NldF9jdHJsKHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwpCj4gPiArewo+ID4g KwlzdHJ1Y3QgaW14MjgzICppbXgyODMgPSBjb250YWluZXJfb2YoY3RybC0+aGFuZGxlciwgc3Ry dWN0IGlteDI4MywKPiA+ICsJCQkJCSAgICAgY3RybF9oYW5kbGVyKTsKPiA+ICsJY29uc3Qgc3Ry dWN0IGlteDI4M19tb2RlICptb2RlID0gaW14MjgzLT5tb2RlOwo+ID4gKwl1NjQgc2hyLCBwaXhl bF9yYXRlOwo+ID4gKwlpbnQgcmV0ID0gMDsKPiA+ICsKPiA+ICsJLyoKPiA+ICsJICogVGhlIFZC TEFOSyBjb250cm9sIG1heSBjaGFuZ2UgdGhlIGxpbWl0cyBvZiB1c2FibGUgZXhwb3N1cmUsIHNv IGNoZWNrCj4gPiArCSAqIGFuZCBhZGp1c3QgaWYgbmVjZXNzYXJ5Lgo+ID4gKwkgKi8KPiA+ICsJ aWYgKGN0cmwtPmlkID09IFY0TDJfQ0lEX1ZCTEFOSykgewo+ID4gKwkJLyogSG9ub3VyIHRoZSBW QkxBTksgbGltaXRzIHdoZW4gc2V0dGluZyBleHBvc3VyZS4gKi8KPiA+ICsJCXU2NCBjdXJyZW50 X2V4cG9zdXJlLCBtYXhfZXhwb3N1cmUsIG1pbl9leHBvc3VyZTsKPiA+ICsKPiA+ICsJCWlteDI4 My0+dm1heCA9IG1vZGUtPmhlaWdodCArIGN0cmwtPnZhbDsKPiA+ICsKPiA+ICsJCWlteDI4M19l eHBvc3VyZV9saW1pdHMoaW14MjgzLCAmbWluX2V4cG9zdXJlLCAmbWF4X2V4cG9zdXJlKTsKPiA+ ICsKPiA+ICsJCWN1cnJlbnRfZXhwb3N1cmUgPSBpbXgyODMtPmV4cG9zdXJlLT52YWw7Cj4gPiAr CQljdXJyZW50X2V4cG9zdXJlID0gY2xhbXBfdCh1MzIsIGN1cnJlbnRfZXhwb3N1cmUsIG1pbl9l eHBvc3VyZSwKPiA+ICsJCQkJCSAgIG1heF9leHBvc3VyZSk7Cj4gPiArCj4gPiArCQlfX3Y0bDJf Y3RybF9tb2RpZnlfcmFuZ2UoaW14MjgzLT5leHBvc3VyZSwgbWluX2V4cG9zdXJlLAo+ID4gKwkJ CQkJIG1heF9leHBvc3VyZSwgMSwgY3VycmVudF9leHBvc3VyZSk7Cj4gPiArCX0KPiA+ICsKPiA+ ICsJLyoKPiA+ICsJICogQXBwbHlpbmcgVjRMMiBjb250cm9sIHZhbHVlIG9ubHkgaGFwcGVucwo+ ID4gKwkgKiB3aGVuIHBvd2VyIGlzIHVwIGZvciBzdHJlYW1pbmcKPiA+ICsJICovCj4gPiArCWlm IChwbV9ydW50aW1lX2dldF9pZl9pbl91c2UoaW14MjgzLT5kZXYpID09IDApCj4gCj4gQXMgeW91 J3JlIHVzaW5nIGF1dG9zdXNwZW5kLCB5b3Ugc2hvdWxkIHVzZSB0aGUgaWZfYWN0aXZlIHZhcmlh bnQgaGVyZS4KPiAKPiA+ICsJCXJldHVybiAwOwo+ID4gKwo+ID4gKwlzd2l0Y2ggKGN0cmwtPmlk KSB7Cj4gPiArCWNhc2UgVjRMMl9DSURfRVhQT1NVUkU6Cj4gPiArCQlzaHIgPSBpbXgyODNfc2hy KGlteDI4MywgY3RybC0+dmFsKTsKPiA+ICsJCWRldl9kYmcoaW14MjgzLT5kZXYsICJWNEwyX0NJ RF9FWFBPU1VSRSA6ICVkIC0gU0hSOiAlbGxkXG4iLAo+ID4gKwkJCWN0cmwtPnZhbCwgc2hyKTsK PiA+ICsJCXJldCA9IGNjaV93cml0ZShpbXgyODMtPmNjaSwgSU1YMjgzX1JFR19TSFIsIHNociwg TlVMTCk7Cj4gPiArCQlicmVhazsKPiA+ICsKPiA+ICsJY2FzZSBWNEwyX0NJRF9IQkxBTks6Cj4g PiArCQlwaXhlbF9yYXRlID0gaW14MjgzX3BpeGVsX3JhdGUoaW14MjgzKTsKPiA+ICsJCWlteDI4 My0+aG1heCA9IGlteDI4M19pbnRlcm5hbF9jbG9jayhwaXhlbF9yYXRlLCBtb2RlLT53aWR0aCAr IGN0cmwtPnZhbCk7Cj4gPiArCQlkZXZfZGJnKGlteDI4My0+ZGV2LCAiVjRMMl9DSURfSEJMQU5L IDogJWQgIEhNQVggOiAlZFxuIiwKPiA+ICsJCQljdHJsLT52YWwsIGlteDI4My0+aG1heCk7Cj4g PiArCQlyZXQgPSBjY2lfd3JpdGUoaW14MjgzLT5jY2ksIElNWDI4M19SRUdfSE1BWCwgaW14Mjgz LT5obWF4LCBOVUxMKTsKPiA+ICsJCWJyZWFrOwo+ID4gKwo+ID4gKwljYXNlIFY0TDJfQ0lEX1ZC TEFOSzoKPiA+ICsJCWlteDI4My0+dm1heCA9IG1vZGUtPmhlaWdodCArIGN0cmwtPnZhbDsKPiA+ ICsJCWRldl9kYmcoaW14MjgzLT5kZXYsICJWNEwyX0NJRF9WQkxBTksgOiAlZCAgVk1BWCA6ICVk XG4iLAo+ID4gKwkJCWN0cmwtPnZhbCwgaW14MjgzLT52bWF4KTsKPiA+ICsJCXJldCA9IGNjaV93 cml0ZShpbXgyODMtPmNjaSwgSU1YMjgzX1JFR19WTUFYLCBpbXgyODMtPnZtYXgsIE5VTEwpOwo+ ID4gKwkJYnJlYWs7Cj4gPiArCj4gPiArCWNhc2UgVjRMMl9DSURfQU5BTE9HVUVfR0FJTjoKPiA+ ICsJCXJldCA9IGNjaV93cml0ZShpbXgyODMtPmNjaSwgSU1YMjgzX1JFR19BTkFMT0dfR0FJTiwg Y3RybC0+dmFsLCBOVUxMKTsKPiA+ICsJCWJyZWFrOwo+ID4gKwo+ID4gKwljYXNlIFY0TDJfQ0lE X0RJR0lUQUxfR0FJTjoKPiA+ICsJCXJldCA9IGNjaV93cml0ZShpbXgyODMtPmNjaSwgSU1YMjgz X1JFR19ESUdJVEFMX0dBSU4sIGN0cmwtPnZhbCwgTlVMTCk7Cj4gPiArCQlicmVhazsKPiA+ICsK PiA+ICsJY2FzZSBWNEwyX0NJRF9WRkxJUDoKPiA+ICsJCS8qCj4gPiArCQkgKiBWRkxJUCBpcyBt YW5hZ2VkIGJ5IEJJVCgwKSBvZiBJTVgyODNfUkVHX0hUUklNTUlORyBhZGRyZXNzLCBoZW5jZQo+ ID4gKwkJICogYm90aCBuZWVkZWQgdG8gYmUgc2V0IHNpbXVsYXRlbm91c2x5Lgo+ID4gKwkJICov Cj4gPiArCQlpZiAoY3RybC0+dmFsKSB7Cj4gPiArCQkJY2NpX3dyaXRlKGlteDI4My0+Y2NpLCBJ TVgyODNfUkVHX0hUUklNTUlORywKPiA+ICsJCQkJICBJTVgyODNfSFRSSU1NSU5HX0VOIHwgSU1Y MjgzX01EVlJFViwgJnJldCk7Cj4gPiArCQl9IGVsc2Ugewo+ID4gKwkJCWNjaV93cml0ZShpbXgy ODMtPmNjaSwgSU1YMjgzX1JFR19IVFJJTU1JTkcsCj4gPiArCQkJCSAgSU1YMjgzX0hUUklNTUlO R19FTiwgJnJldCk7Cj4gPiArCQl9Cj4gPiArCQlicmVhazsKPiA+ICsKPiA+ICsJY2FzZSBWNEwy X0NJRF9URVNUX1BBVFRFUk46Cj4gPiArCQlyZXQgPSBpbXgyODNfdXBkYXRlX3Rlc3RfcGF0dGVy bihpbXgyODMsIGN0cmwtPnZhbCk7Cj4gPiArCQlicmVhazsKPiA+ICsKPiA+ICsJZGVmYXVsdDoK PiA+ICsJCWRldl9lcnIoaW14MjgzLT5kZXYsICJjdHJsKGlkOjB4JXgsIHZhbDoweCV4KSBpcyBu b3QgaGFuZGxlZFxuIiwKPiA+ICsJCQljdHJsLT5pZCwgY3RybC0+dmFsKTsKPiA+ICsJCWJyZWFr Owo+ID4gKwl9Cj4gPiArCj4gPiArCXBtX3J1bnRpbWVfcHV0KGlteDI4My0+ZGV2KTsKPiA+ICsK PiA+ICsJcmV0dXJuIHJldDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCB2 NGwyX2N0cmxfb3BzIGlteDI4M19jdHJsX29wcyA9IHsKPiA+ICsJLnNfY3RybCA9IGlteDI4M19z ZXRfY3RybCwKPiA+ICt9Owo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgaW14MjgzX2VudW1fbWJ1c19j b2RlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCj4gPiArCQkJCSBzdHJ1Y3QgdjRsMl9zdWJkZXZf c3RhdGUgKnNkX3N0YXRlLAo+ID4gKwkJCQkgc3RydWN0IHY0bDJfc3ViZGV2X21idXNfY29kZV9l bnVtICpjb2RlKQo+ID4gK3sKPiA+ICsJaWYgKGNvZGUtPmluZGV4ID49IChBUlJBWV9TSVpFKGNv ZGVzKSkpCj4gCj4gRXh0cmEgcGFyZW50aGVzZXMuCj4gCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsK PiA+ICsKPiA+ICsJY29kZS0+Y29kZSA9IGNvZGVzW2NvZGUtPmluZGV4XTsKPiA+ICsKPiA+ICsJ cmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgaW14MjgzX2VudW1fZnJhbWVf c2l6ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAo+ID4gKwkJCQkgIHN0cnVjdCB2NGwyX3N1YmRl dl9zdGF0ZSAqc2Rfc3RhdGUsCj4gPiArCQkJCSAgc3RydWN0IHY0bDJfc3ViZGV2X2ZyYW1lX3Np emVfZW51bSAqZnNlKQo+ID4gK3sKPiA+ICsJY29uc3Qgc3RydWN0IGlteDI4M19tb2RlICptb2Rl X2xpc3Q7Cj4gPiArCXVuc2lnbmVkIGludCBudW1fbW9kZXM7Cj4gPiArCj4gPiArCWdldF9tb2Rl X3RhYmxlKGZzZS0+Y29kZSwgJm1vZGVfbGlzdCwgJm51bV9tb2Rlcyk7Cj4gPiArCj4gPiArCWlm IChmc2UtPmluZGV4ID49IG51bV9tb2RlcykKPiA+ICsJCXJldHVybiAtRUlOVkFMOwo+ID4gKwo+ ID4gKwlmc2UtPm1pbl93aWR0aCA9IG1vZGVfbGlzdFtmc2UtPmluZGV4XS53aWR0aDsKPiA+ICsJ ZnNlLT5tYXhfd2lkdGggPSBmc2UtPm1pbl93aWR0aDsKPiA+ICsJZnNlLT5taW5faGVpZ2h0ID0g bW9kZV9saXN0W2ZzZS0+aW5kZXhdLmhlaWdodDsKPiA+ICsJZnNlLT5tYXhfaGVpZ2h0ID0gZnNl LT5taW5faGVpZ2h0Owo+ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3Rh dGljIHZvaWQgaW14MjgzX3Jlc2V0X2NvbG9yc3BhY2Uoc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZt dCAqZm10KQoKSW5saW5lIHRoaXMgaW4gaXRzIG9ubHkgY2FsbGVyLgoKPiA+ICt7Cj4gPiArCWZt dC0+Y29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9SQVc7Cj4gPiArCWZtdC0+eWNiY3JfZW5j ID0gVjRMMl9NQVBfWUNCQ1JfRU5DX0RFRkFVTFQoZm10LT5jb2xvcnNwYWNlKTsKPiA+ICsJZm10 LT5xdWFudGl6YXRpb24gPSBWNEwyX01BUF9RVUFOVElaQVRJT05fREVGQVVMVCh0cnVlLCBmbXQt PmNvbG9yc3BhY2UsCj4gPiArCQkJCQkJCSAgZm10LT55Y2Jjcl9lbmMpOwo+ID4gKwlmbXQtPnhm ZXJfZnVuYyA9IFY0TDJfTUFQX1hGRVJfRlVOQ19ERUZBVUxUKGZtdC0+Y29sb3JzcGFjZSk7CgpU aGUgc2Vuc29yIG91dHB1dHMgcmF3IGZvcm1hdHMgb25seSwgaXQgd291bGQgYmUgY2xlYXJlciB0 byBzZXQgdGhlc2UKZm91ciB2YWx1ZXMgZXhwbGljaXRseS4KCj4gPiArfQo+ID4gKwo+ID4gK3N0 YXRpYyB2b2lkIGlteDI4M191cGRhdGVfaW1hZ2VfcGFkX2Zvcm1hdChzdHJ1Y3QgaW14MjgzICpp bXgyODMsCj4gPiArCQkJCQkgICBjb25zdCBzdHJ1Y3QgaW14MjgzX21vZGUgKm1vZGUsCj4gPiAr CQkJCQkgICBzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICpmb3JtYXQpCj4gPiArewo+ID4gKwlm b3JtYXQtPndpZHRoID0gbW9kZS0+d2lkdGg7Cj4gPiArCWZvcm1hdC0+aGVpZ2h0ID0gbW9kZS0+ aGVpZ2h0Owo+ID4gKwlmb3JtYXQtPmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOwo+ID4gKwlpbXgy ODNfcmVzZXRfY29sb3JzcGFjZShmb3JtYXQpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50 IGlteDI4M19pbml0X3N0YXRlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCj4gPiArCQkJICAgICBz dHJ1Y3QgdjRsMl9zdWJkZXZfc3RhdGUgKnN0YXRlKQo+ID4gK3sKPiA+ICsJc3RydWN0IGlteDI4 MyAqaW14MjgzID0gdG9faW14MjgzKHNkKTsKPiA+ICsJc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZt dCAqZm9ybWF0Owo+ID4gKwljb25zdCBzdHJ1Y3QgaW14MjgzX21vZGUgKm1vZGU7Cj4gPiArCXN0 cnVjdCB2NGwyX3JlY3QgKmNyb3A7Cj4gPiArCj4gPiArCS8qIEluaXRpYWxpemUgdHJ5X2ZtdCAq Lwo+ID4gKwlmb3JtYXQgPSB2NGwyX3N1YmRldl9zdGF0ZV9nZXRfZm9ybWF0KHN0YXRlLCBJTUFH RV9QQUQpOwo+ID4gKwo+ID4gKwltb2RlID0gJnN1cHBvcnRlZF9tb2Rlc18xMmJpdFswXTsKPiA+ ICsJaW14MjgzLT5tb2RlID0gbW9kZTsKPiA+ICsJZm9ybWF0LT5jb2RlID0gTUVESUFfQlVTX0ZN VF9TUkdHQjEyXzFYMTI7Cj4gPiArCWlteDI4M191cGRhdGVfaW1hZ2VfcGFkX2Zvcm1hdChpbXgy ODMsIG1vZGUsIGZvcm1hdCk7Cj4gPiArCj4gPiArCS8qIEluaXRpYWxpemUgY3JvcCByZWN0YW5n bGUgdG8gbW9kZSBkZWZhdWx0ICovCj4gPiArCWNyb3AgPSB2NGwyX3N1YmRldl9zdGF0ZV9nZXRf Y3JvcChzdGF0ZSwgSU1BR0VfUEFEKTsKPiA+ICsJKmNyb3AgPSBtb2RlLT5jcm9wOwo+ID4gKwo+ ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgaW14MjgzX3NldF9m cmFtaW5nX2xpbWl0cyhzdHJ1Y3QgaW14MjgzICppbXgyODMpCj4gPiArewo+ID4gKwljb25zdCBz dHJ1Y3QgaW14MjgzX21vZGUgKm1vZGUgPSBpbXgyODMtPm1vZGU7Cj4gPiArCXU2NCBwaXhlbF9y YXRlID0gaW14MjgzX3BpeGVsX3JhdGUoaW14MjgzKTsKPiA+ICsJdTY0IG1pbl9oYmxhbmssIG1h eF9oYmxhbmssIGRlZl9oYmxhbms7Cj4gPiArCj4gPiArCS8qCj4gPiArCSAqIEluaXRpYWxpc2Ug aG1heCBhbmQgdm1heCBmb3IgZXhwb3N1cmUgY2FsY3VsYXRpb25zCj4gPiArCSAqLwo+IAo+IAkv KiBTaW5nbGUtbGluZSBjb21tZW50ICovCj4gCj4gPiArCWlteDI4My0+aG1heCA9IGlteDI4M19p bnRlcm5hbF9jbG9jayhwaXhlbF9yYXRlLCBtb2RlLT5kZWZhdWx0X2htYXgpOwo+ID4gKwlpbXgy ODMtPnZtYXggPSBtb2RlLT5kZWZhdWx0X3ZtYXg7Cj4gPiArCj4gPiArCS8qCj4gPiArCSAqIEhv cml6b250YWwgQmxhbmtpbmcKPiA+ICsJICogQ29udmVydCB0aGUgSE1BWF9NQVggKDcyTUh6KSB0 byBQaXhlbCByYXRlIHZhbHVlcyBmb3IgSEJMQU5LX01BWAo+ID4gKwkgKi8KPiA+ICsJbWluX2hi bGFuayA9IG1vZGUtPm1pbl9obWF4IC0gbW9kZS0+d2lkdGg7Cj4gPiArCW1heF9oYmxhbmsgPSBp bXgyODNfaWNsa190b19waXgocGl4ZWxfcmF0ZSwgSU1YMjgzX0hNQVhfTUFYKSAtIG1vZGUtPndp ZHRoOwo+ID4gKwlkZWZfaGJsYW5rID0gbW9kZS0+ZGVmYXVsdF9obWF4IC0gbW9kZS0+d2lkdGg7 Cj4gPiArCV9fdjRsMl9jdHJsX21vZGlmeV9yYW5nZShpbXgyODMtPmhibGFuaywgbWluX2hibGFu aywgbWF4X2hibGFuaywgMSwKPiA+ICsJCQkJIGRlZl9oYmxhbmspOwo+ID4gKwlfX3Y0bDJfY3Ry bF9zX2N0cmwoaW14MjgzLT5oYmxhbmssIGRlZl9oYmxhbmspOwo+ID4gKwo+ID4gKwkvKiBWZXJ0 aWNhbCBCbGFua2luZyAqLwo+ID4gKwlfX3Y0bDJfY3RybF9tb2RpZnlfcmFuZ2UoaW14MjgzLT52 YmxhbmssIG1vZGUtPm1pbl92bWF4IC0gbW9kZS0+aGVpZ2h0LAo+ID4gKwkJCQkgSU1YMjgzX1ZN QVhfTUFYIC0gbW9kZS0+aGVpZ2h0LCAxLAo+ID4gKwkJCQkgbW9kZS0+ZGVmYXVsdF92bWF4IC0g bW9kZS0+aGVpZ2h0KTsKPiA+ICsJX192NGwyX2N0cmxfc19jdHJsKGlteDI4My0+dmJsYW5rLCBt b2RlLT5kZWZhdWx0X3ZtYXggLSBtb2RlLT5oZWlnaHQpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0 aWMgaW50IGlteDI4M19zZXRfcGFkX2Zvcm1hdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAo+ID4g KwkJCQkgc3RydWN0IHY0bDJfc3ViZGV2X3N0YXRlICpzZF9zdGF0ZSwKPiA+ICsJCQkJIHN0cnVj dCB2NGwyX3N1YmRldl9mb3JtYXQgKmZtdCkKPiA+ICt7Cj4gPiArCXN0cnVjdCB2NGwyX21idXNf ZnJhbWVmbXQgKmZvcm1hdDsKPiA+ICsJY29uc3Qgc3RydWN0IGlteDI4M19tb2RlICptb2RlOwo+ ID4gKwlzdHJ1Y3QgaW14MjgzICppbXgyODMgPSB0b19pbXgyODMoc2QpOwo+ID4gKwljb25zdCBz dHJ1Y3QgaW14MjgzX21vZGUgKm1vZGVfbGlzdDsKPiA+ICsJdW5zaWduZWQgaW50IG51bV9tb2Rl czsKPiA+ICsKPiA+ICsJZ2V0X21vZGVfdGFibGUoZm10LT5mb3JtYXQuY29kZSwgJm1vZGVfbGlz dCwgJm51bV9tb2Rlcyk7Cj4gPiArCj4gPiArCW1vZGUgPSB2NGwyX2ZpbmRfbmVhcmVzdF9zaXpl KG1vZGVfbGlzdCwgbnVtX21vZGVzLCB3aWR0aCwgaGVpZ2h0LAo+ID4gKwkJCQkgICAgICBmbXQt PmZvcm1hdC53aWR0aCwgZm10LT5mb3JtYXQuaGVpZ2h0KTsKPiA+ICsKPiA+ICsJaW14MjgzX3Vw ZGF0ZV9pbWFnZV9wYWRfZm9ybWF0KGlteDI4MywgbW9kZSwgJmZtdC0+Zm9ybWF0KTsKClRoZSBv bmx5IHRoaW5nIHlvdSBjYW4gc2V0IGhlcmUgaXMgdGhlIHdpZHRoIGFuZCBoZWlnaHQsIGl0IHdv dWxkIGJlCm1vcmUgZWZmaWNpZW50IHRvIGNvcHkgdGhlbSBleHBsaWNpdGx5IHRvIHRoZSBmb3Jt YXQsIGFuZCB0aGVuIHNldApmbXQtPmZvcm1hdCA9ICpmb3JtYXQuCgo+ID4gKwo+ID4gKwlmb3Jt YXQgPSB2NGwyX3N1YmRldl9zdGF0ZV9nZXRfZm9ybWF0KHNkX3N0YXRlLCAwKTsKPiA+ICsKPiA+ ICsJaWYgKGlteDI4My0+bW9kZSA9PSBtb2RlICYmIGZvcm1hdC0+Y29kZSA9PSBmbXQtPmZvcm1h dC5jb2RlKQo+ID4gKwkJcmV0dXJuIDA7CgpJJ2QgZHJvcCB0aGlzLgoKPiA+ICsKPiA+ICsJaWYg KGZtdC0+d2hpY2ggPT0gVjRMMl9TVUJERVZfRk9STUFUX0FDVElWRSkgewo+ID4gKwkJaW14Mjgz LT5tb2RlID0gbW9kZTsKPiA+ICsJCWlteDI4My0+Zm10X2NvZGUgPSBmbXQtPmZvcm1hdC5jb2Rl Owo+IAo+IFRoZSBjb2RlIGlzIGF2YWlsYWJsZSBpbiBzdWItZGV2aWNlIHN0YXRlLgo+IAo+ID4g KwkJaW14MjgzX3NldF9mcmFtaW5nX2xpbWl0cyhpbXgyODMpOwo+ID4gKwl9Cj4gPiArCj4gPiAr CSpmb3JtYXQgPSBmbXQtPmZvcm1hdDsKPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4g Kwo+ID4gK3N0YXRpYyBpbnQgaW14MjgzX3N0YW5kYnlfY2FuY2VsKHN0cnVjdCBpbXgyODMgKmlt eDI4MykKPiA+ICt7Cj4gPiArCWludCByZXQgPSAwOwo+ID4gKwl1bnNpZ25lZCBpbnQgbGlua19m cmVxX2lkeDsKPiAKPiBQbGVhc2UgZGVjbGFyZSByZXQgYXMgbGFzdC4KPiAKPiA+ICsKPiA+ICsJ Y2NpX3dyaXRlKGlteDI4My0+Y2NpLCBJTVgyODNfUkVHX1NUQU5EQlksCj4gPiArCQkgIElNWDI4 M19TVEJMT0dJQyB8IElNWDI4M19TVEJEViwgJnJldCk7Cj4gPiArCj4gPiArCS8qIENvbmZpZ3Vy ZSBQTEwgY2xvY2tzIGJhc2VkIG9uIHRoZSB4Y2xrICovCj4gPiArCWNjaV9tdWx0aV9yZWdfd3Jp dGUoaW14MjgzLT5jY2ksIGlteDI4My0+ZnJlcS0+cmVncywKPiA+ICsJCQkgICAgaW14MjgzLT5m cmVxLT5yZWdfY291bnQsICZyZXQpOwo+ID4gKwo+ID4gKwlkZXZfZGJnKGlteDI4My0+ZGV2LCAi VXNpbmcgY2xrIGZyZXEgJWQgTUh6IiwgaW14MjgzLT5mcmVxLT5taHogLyBNSFooMSkpOwo+ID4g Kwo+ID4gKwkvKiBJbml0aWFsaXNlIGNvbW11bmljYXRpb24gKi8KPiA+ICsJY2NpX3dyaXRlKGlt eDI4My0+Y2NpLCBJTVgyODNfUkVHX1BMU1RNRzA4LCBJTVgyODNfUExTVE1HMDhfVkFMLCAmcmV0 KTsKPiA+ICsJY2NpX3dyaXRlKGlteDI4My0+Y2NpLCBJTVgyODNfUkVHX1BMU1RNRzAyLCBJTVgy ODNfUExTVE1HMDJfVkFMLCAmcmV0KTsKPiA+ICsKPiA+ICsJLyogRW5hYmxlIFBMTCAqLwo+ID4g KwljY2lfd3JpdGUoaW14MjgzLT5jY2ksIElNWDI4M19SRUdfU1RCUEwsIElNWDI4M19TVEJQTF9O T1JNQUwsICZyZXQpOwo+ID4gKwo+ID4gKwkvKiBDb25maWd1cmUgdGhlIE1JUEkgbGluayBzcGVl ZCAqLwo+ID4gKwlsaW5rX2ZyZXFfaWR4ID0gX19mZnMoaW14MjgzLT5saW5rX2ZyZXFfYml0bWFw KTsKPiA+ICsJY2NpX211bHRpX3JlZ193cml0ZShpbXgyODMtPmNjaSwKPiA+ICsJCQkgICAgbGlu a19mcmVxX3JlZ2xpc3RbbGlua19mcmVxX2lkeF0ucmVncywKPiA+ICsJCQkgICAgbGlua19mcmVx X3JlZ2xpc3RbbGlua19mcmVxX2lkeF0ubnVtX29mX3JlZ3MsCj4gPiArCQkJICAgICZyZXQpOwo+ ID4gKwo+ID4gKwl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7IC8qIDFzdCBTdGFiaWxpc2F0aW9u IHBlcmlvZCBvZiAxIG1zIG9yIG1vcmUgKi8KPiA+ICsKPiA+ICsJLyogQWN0aXZhdGUgKi8KPiA+ ICsJY2NpX3dyaXRlKGlteDI4My0+Y2NpLCBJTVgyODNfUkVHX1NUQU5EQlksIElNWDI4M19BQ1RJ VkUsICZyZXQpOwo+ID4gKwl1c2xlZXBfcmFuZ2UoMTkwMDAsIDIwMDAwKTsgLyogMm5kIFN0YWJp bGlzYXRpb24gcGVyaW9kIG9mIDE5bXMgb3IgbW9yZSAqLwo+ID4gKwo+ID4gKwljY2lfd3JpdGUo aW14MjgzLT5jY2ksIElNWDI4M19SRUdfQ0xBTVAsIElNWDI4M19DTFBTUVJTVCwgJnJldCk7Cj4g PiArCWNjaV93cml0ZShpbXgyODMtPmNjaSwgSU1YMjgzX1JFR19YTVNUQSwgMCwgJnJldCk7Cj4g PiArCWNjaV93cml0ZShpbXgyODMtPmNjaSwgSU1YMjgzX1JFR19TWU5DRFJWLCBJTVgyODNfU1lO Q0RSVl9YSFNfWFZTLCAmcmV0KTsKPiA+ICsKPiA+ICsJcmV0dXJuIHJldDsKPiA+ICt9Cj4gPiAr Cj4gPiArLyogU3RhcnQgc3RyZWFtaW5nICovCj4gPiArc3RhdGljIGludCBpbXgyODNfc3RhcnRf c3RyZWFtaW5nKHN0cnVjdCBpbXgyODMgKmlteDI4MywKPiA+ICsJCQkJICBzdHJ1Y3QgdjRsMl9z dWJkZXZfc3RhdGUgKnN0YXRlKQo+ID4gK3sKPiA+ICsJY29uc3Qgc3RydWN0IGlteDI4M19yZWFk b3V0X21vZGUgKnJlYWRvdXQ7Cj4gPiArCWNvbnN0IHN0cnVjdCBpbXgyODNfbW9kZSAqbW9kZSA9 IGlteDI4My0+bW9kZTsKPiA+ICsJdTMyIHZfd2lkY3V0Owo+ID4gKwlzMzIgdl9wb3M7Cj4gPiAr CXUzMiB3cml0ZV92X3NpemU7Cj4gPiArCXUzMiB5X291dF9zaXplOwo+ID4gKwlpbnQgcmV0Owo+ ID4gKwo+ID4gKwlyZXQgPSBpbXgyODNfc3RhbmRieV9jYW5jZWwoaW14MjgzKTsKPiA+ICsJaWYg KHJldCkgewo+ID4gKwkJZGV2X2VycihpbXgyODMtPmRldiwgImZhaWxlZCB0byBjYW5jZWwgc3Rh bmRieVxuIik7Cj4gPiArCQlyZXR1cm4gcmV0Owo+ID4gKwl9Cj4gPiArCj4gPiArCS8qCj4gPiAr CSAqIFNldCB0aGUgcmVhZG91dCBtb2RlIHJlZ2lzdGVycy4KPiA+ICsJICogTURTRUwzIGFuZCBN RFNFTDQgYXJlIHVwZGF0ZWQgdG8gZW5hYmxlIEFyYml0cmFyeSBWZXJ0aWNhbCBDcm9wcGluZy4K PiA+ICsJICovCj4gPiArCXJlYWRvdXQgPSAmaW14MjgzX3JlYWRvdXRfbW9kZXNbaW14MjgzLT5t b2RlLT5tb2RlXTsKPiA+ICsJY2NpX3dyaXRlKGlteDI4My0+Y2NpLCBJTVgyODNfUkVHX01EU0VM MSwgcmVhZG91dC0+bWRzZWwxLCAmcmV0KTsKPiA+ICsJY2NpX3dyaXRlKGlteDI4My0+Y2NpLCBJ TVgyODNfUkVHX01EU0VMMiwgcmVhZG91dC0+bWRzZWwyLCAmcmV0KTsKPiA+ICsJY2NpX3dyaXRl KGlteDI4My0+Y2NpLCBJTVgyODNfUkVHX01EU0VMMywKPiA+ICsJCSAgcmVhZG91dC0+bWRzZWwz IHwgSU1YMjgzX01EU0VMM19WQ1JPUF9FTiwgJnJldCk7Cj4gPiArCWNjaV93cml0ZShpbXgyODMt PmNjaSwgSU1YMjgzX1JFR19NRFNFTDQsCj4gPiArCQkgIHJlYWRvdXQtPm1kc2VsNCB8IElNWDI4 M19NRFNFTDRfVkNST1BfRU4sICZyZXQpOwo+ID4gKwo+ID4gKwkvKiBNb2RlIDFTIHNwZWNpZmlj IGVudHJpZXMgZnJvbSB0aGUgUmVhZG91dCBEcml2ZSBNb2RlIFRhYmxlcyAqLwo+ID4gKwlpZiAo bW9kZS0+bW9kZSA9PSBJTVgyODNfTU9ERV8xUykgewo+ID4gKwkJY2NpX3dyaXRlKGlteDI4My0+ Y2NpLCBJTVgyODNfUkVHX01EU0VMNywgMHgwMSwgJnJldCk7Cj4gPiArCQljY2lfd3JpdGUoaW14 MjgzLT5jY2ksIElNWDI4M19SRUdfTURTRUwxOCwgMHgxMDk4LCAmcmV0KTsKPiA+ICsJfQo+ID4g Kwo+ID4gKwlpZiAocmV0KSB7Cj4gPiArCQlkZXZfZXJyKGlteDI4My0+ZGV2LCAiJXMgZmFpbGVk IHRvIHNldCByZWFkb3V0XG4iLCBfX2Z1bmNfXyk7Cj4gPiArCQlyZXR1cm4gcmV0Owo+ID4gKwl9 Cj4gPiArCj4gPiArCS8qIEluaXRpYWxpc2UgU1ZSLiBVbnN1cHBvcnRlZCBmb3Igbm93IC0gQWx3 YXlzIDAgKi8KPiA+ICsJY2NpX3dyaXRlKGlteDI4My0+Y2NpLCBJTVgyODNfUkVHX1NWUiwgMHgw MCwgJnJldCk7Cj4gPiArCj4gPiArCWRldl9kYmcoaW14MjgzLT5kZXYsICJNb2RlOiBTaXplICVk IHggJWRcbiIsIG1vZGUtPndpZHRoLCBtb2RlLT5oZWlnaHQpOwo+ID4gKwlkZXZfZGJnKGlteDI4 My0+ZGV2LCAiQW5hbG9ndWUgQ3JvcCAoaW4gdGhlIG1vZGUpICVkLCVkICVkeCVkXG4iLAo+ID4g KwkJbW9kZS0+Y3JvcC5sZWZ0LAo+ID4gKwkJbW9kZS0+Y3JvcC50b3AsCj4gPiArCQltb2RlLT5j cm9wLndpZHRoLAo+ID4gKwkJbW9kZS0+Y3JvcC5oZWlnaHQpOwo+ID4gKwo+ID4gKwl5X291dF9z aXplID0gbW9kZS0+Y3JvcC5oZWlnaHQgLyBtb2RlLT52YmluX3JhdGlvOwo+ID4gKwl3cml0ZV92 X3NpemUgPSB5X291dF9zaXplICsgbW9kZS0+dmVydGljYWxfb2I7Cj4gPiArCS8qCj4gPiArCSAq IGNyb3BwaW5nIHN0YXJ0IHBvc2l0aW9uID0gKFZXSU5QT1Mg4oCTIFZzdCkgw5cgMgo+ID4gKwkg KiBjcm9wcGluZyB3aWR0aCA9IFZlZmYg4oCTIChWV0lEQ1VUIOKAkyBWY3QpIMOXIDIKPiA+ICsJ ICovCj4gPiArCXZfcG9zID0gaW14MjgzLT52ZmxpcC0+dmFsID8KPiA+ICsJCSgoLW1vZGUtPmNy b3AudG9wIC8gbW9kZS0+dmJpbl9yYXRpbykgLyAyKSArIG1vZGUtPnZzdCA6Cj4gPiArCQkoKG1v ZGUtPmNyb3AudG9wIC8gbW9kZS0+dmJpbl9yYXRpbykgLyAyKSAgKyBtb2RlLT52c3Q7Cj4gPiAr CXZfd2lkY3V0ID0gKChtb2RlLT52ZWZmIC0geV9vdXRfc2l6ZSkgLyAyKSArIG1vZGUtPnZjdDsK PiA+ICsKPiA+ICsJY2NpX3dyaXRlKGlteDI4My0+Y2NpLCBJTVgyODNfUkVHX1lfT1VUX1NJWkUs IHlfb3V0X3NpemUsICZyZXQpOwo+ID4gKwljY2lfd3JpdGUoaW14MjgzLT5jY2ksIElNWDI4M19S RUdfV1JJVEVfVlNJWkUsIHdyaXRlX3Zfc2l6ZSwgJnJldCk7Cj4gPiArCWNjaV93cml0ZShpbXgy ODMtPmNjaSwgSU1YMjgzX1JFR19WV0lEQ1VULCB2X3dpZGN1dCwgJnJldCk7Cj4gPiArCWNjaV93 cml0ZShpbXgyODMtPmNjaSwgSU1YMjgzX1JFR19WV0lOUE9TLCB2X3BvcywgJnJldCk7Cj4gPiAr Cj4gPiArCWNjaV93cml0ZShpbXgyODMtPmNjaSwgSU1YMjgzX1JFR19PQl9TSVpFX1YsIG1vZGUt PnZlcnRpY2FsX29iLCAmcmV0KTsKPiA+ICsKPiA+ICsJLyogVE9ETzogVmFsaWRhdGUgbW9kZS0+ Y3JvcCBpcyBmdWxseSBjb250YWluZWQgd2l0aGluIGlteDI4M19uYXRpdmVfYXJlYSAqLwo+ID4g KwljY2lfd3JpdGUoaW14MjgzLT5jY2ksIElNWDI4M19SRUdfSFRSSU1NSU5HX1NUQVJULCBtb2Rl LT5jcm9wLmxlZnQsICZyZXQpOwo+ID4gKwljY2lfd3JpdGUoaW14MjgzLT5jY2ksIElNWDI4M19S RUdfSFRSSU1NSU5HX0VORCwKPiA+ICsJCSAgbW9kZS0+Y3JvcC5sZWZ0ICsgbW9kZS0+Y3JvcC53 aWR0aCwgJnJldCk7Cj4gPiArCj4gPiArCS8qIERpc2FibGUgZW1iZWRkZWQgZGF0YSAqLwo+ID4g KwljY2lfd3JpdGUoaW14MjgzLT5jY2ksIElNWDI4M19SRUdfRUJEX1hfT1VUX1NJWkUsIDAsICZy ZXQpOwo+ID4gKwo+ID4gKwkvKiBBcHBseSBjdXN0b21pemVkIHZhbHVlcyBmcm9tIGNvbnRyb2xz IChITUFYL1ZNQVgvU0hSKSAqLwo+ID4gKwlyZXQgPSAgX192NGwyX2N0cmxfaGFuZGxlcl9zZXR1 cChpbXgyODMtPnNkLmN0cmxfaGFuZGxlcik7Cj4gCj4gCXJldHVybiAuLi47Cj4gCj4gV2hhdCBk b2VzIGFjdHVhbGx5IHN0YXJ0IHN0cmVhbWluZyBvbiB0aGUgc2Vuc29yIGhlcmU/Cj4gCj4gU2hv dWxkbid0IHRoZSBjb250cm9sIGhhbmRsZXIncyBzZXR1cCBiZSBjYWxsZWQgYmVmb3JlIHRoYXQg KGFuZCBtdWNoIG9mCj4gd2hhdCBoYXBwZW5zIHByZXZpb3VzIHRvIHRoYXQpPwo+IAo+ID4gKwo+ ID4gKwlyZXR1cm4gcmV0Owo+ID4gK30KPiA+ICsKPiA+ICsvKiBTdG9wIHN0cmVhbWluZyAqLwo+ ID4gK3N0YXRpYyB2b2lkIGlteDI4M19zdG9wX3N0cmVhbWluZyhzdHJ1Y3QgaW14MjgzICppbXgy ODMpCj4gPiArewo+ID4gKwlpbnQgcmV0Owo+ID4gKwo+ID4gKwlyZXQgPSBjY2lfd3JpdGUoaW14 MjgzLT5jY2ksIElNWDI4M19SRUdfU1RBTkRCWSwgSU1YMjgzX1NUQkxPR0lDLCBOVUxMKTsKPiA+ ICsJaWYgKHJldCkKPiA+ICsJCWRldl9lcnIoaW14MjgzLT5kZXYsICIlcyBmYWlsZWQgdG8gc2V0 IHN0cmVhbVxuIiwgX19mdW5jX18pOwo+ID4gKwo+ID4gKwlwbV9ydW50aW1lX3B1dChpbXgyODMt PmRldik7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgaW14MjgzX3NldF9zdHJlYW0oc3Ry dWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IGVuYWJsZSkKPiA+ICt7Cj4gPiArCXN0cnVjdCBpbXgy ODMgKmlteDI4MyA9IHRvX2lteDI4MyhzZCk7Cj4gPiArCXN0cnVjdCB2NGwyX3N1YmRldl9zdGF0 ZSAqc3RhdGU7Cj4gPiArCWludCByZXQgPSAwOwo+ID4gKwo+ID4gKwlzdGF0ZSA9IHY0bDJfc3Vi ZGV2X2xvY2tfYW5kX2dldF9hY3RpdmVfc3RhdGUoc2QpOwo+ID4gKwo+ID4gKwlpZiAoZW5hYmxl KSB7Cj4gPiArCQlyZXQgPSBwbV9ydW50aW1lX2dldF9zeW5jKGlteDI4My0+ZGV2KTsKPiA+ICsJ CWlmIChyZXQgPCAwKSB7Cj4gPiArCQkJcG1fcnVudGltZV9wdXRfbm9pZGxlKGlteDI4My0+ZGV2 KTsKPiA+ICsJCQlnb3RvIHVubG9jazsKPiA+ICsJCX0KPiA+ICsKPiA+ICsJCS8qCj4gPiArCQkg KiBBcHBseSBkZWZhdWx0ICYgY3VzdG9taXplZCB2YWx1ZXMKPiA+ICsJCSAqIGFuZCB0aGVuIHN0 YXJ0IHN0cmVhbWluZy4KPiA+ICsJCSAqLwo+ID4gKwkJcmV0ID0gaW14MjgzX3N0YXJ0X3N0cmVh bWluZyhpbXgyODMsIHN0YXRlKTsKPiA+ICsJCWlmIChyZXQpCj4gPiArCQkJZ290byBlcnJfcnBt X3B1dDsKPiA+ICsJfSBlbHNlIHsKPiA+ICsJCWlteDI4M19zdG9wX3N0cmVhbWluZyhpbXgyODMp Owo+ID4gKwl9Cj4gPiArCj4gPiArCXY0bDJfc3ViZGV2X3VubG9ja19zdGF0ZShzdGF0ZSk7Cj4g PiArCj4gPiArCXJldHVybiByZXQ7Cj4gPiArCj4gPiArZXJyX3JwbV9wdXQ6Cj4gPiArCXBtX3J1 bnRpbWVfcHV0KGlteDI4My0+ZGV2KTsKPiA+ICt1bmxvY2s6Cj4gPiArCXY0bDJfc3ViZGV2X3Vu bG9ja19zdGF0ZShzdGF0ZSk7Cj4gPiArCj4gPiArCXJldHVybiByZXQ7Cj4gPiArfQo+ID4gKwo+ ID4gKy8qIFBvd2VyL2Nsb2NrIG1hbmFnZW1lbnQgZnVuY3Rpb25zICovCj4gPiArc3RhdGljIGlu dCBpbXgyODNfcG93ZXJfb24oc3RydWN0IGRldmljZSAqZGV2KQo+ID4gK3sKPiA+ICsJc3RydWN0 IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKPiA+ICsJc3RydWN0IHY0 bDJfc3ViZGV2ICpzZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwo+ID4gKwlzdHJ1Y3Qg aW14MjgzICppbXgyODMgPSB0b19pbXgyODMoc2QpOwo+ID4gKwlpbnQgcmV0Owo+ID4gKwo+ID4g KwlyZXQgPSByZWd1bGF0b3JfYnVsa19lbmFibGUoQVJSQVlfU0laRShpbXgyODNfc3VwcGx5X25h bWUpLAo+ID4gKwkJCQkgICAgaW14MjgzLT5zdXBwbGllcyk7Cj4gPiArCWlmIChyZXQpIHsKPiA+ ICsJCWRldl9lcnIoaW14MjgzLT5kZXYsICIlczogZmFpbGVkIHRvIGVuYWJsZSByZWd1bGF0b3Jz XG4iLAo+ID4gKwkJCV9fZnVuY19fKTsKPiA+ICsJCXJldHVybiByZXQ7Cj4gPiArCX0KPiA+ICsK PiA+ICsJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGlteDI4My0+eGNsayk7Cj4gPiArCWlmIChy ZXQpIHsKPiA+ICsJCWRldl9lcnIoaW14MjgzLT5kZXYsICIlczogZmFpbGVkIHRvIGVuYWJsZSBj bG9ja1xuIiwKPiA+ICsJCQlfX2Z1bmNfXyk7Cj4gPiArCQlnb3RvIHJlZ19vZmY7Cj4gPiArCX0K PiA+ICsKPiA+ICsJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKGlteDI4My0+cmVzZXRfZ3Bpbywg MSk7Cj4gPiArCj4gPiArCXVzbGVlcF9yYW5nZShpbXgyODNfWENMUl9NSU5fREVMQVlfVVMsCj4g PiArCQkgICAgIGlteDI4M19YQ0xSX01JTl9ERUxBWV9VUyArIGlteDI4M19YQ0xSX0RFTEFZX1JB TkdFX1VTKTsKPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArCj4gPiArcmVnX29mZjoKPiA+ICsJ cmVndWxhdG9yX2J1bGtfZGlzYWJsZShBUlJBWV9TSVpFKGlteDI4M19zdXBwbHlfbmFtZSksIGlt eDI4My0+c3VwcGxpZXMpOwo+ID4gKwlyZXR1cm4gcmV0Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0 aWMgaW50IGlteDI4M19wb3dlcl9vZmYoc3RydWN0IGRldmljZSAqZGV2KQo+ID4gK3sKPiA+ICsJ c3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKPiA+ICsJc3Ry dWN0IHY0bDJfc3ViZGV2ICpzZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwo+ID4gKwlz dHJ1Y3QgaW14MjgzICppbXgyODMgPSB0b19pbXgyODMoc2QpOwo+ID4gKwo+ID4gKwlncGlvZF9z ZXRfdmFsdWVfY2Fuc2xlZXAoaW14MjgzLT5yZXNldF9ncGlvLCAwKTsKPiA+ICsJcmVndWxhdG9y X2J1bGtfZGlzYWJsZShBUlJBWV9TSVpFKGlteDI4M19zdXBwbHlfbmFtZSksIGlteDI4My0+c3Vw cGxpZXMpOwo+ID4gKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaW14MjgzLT54Y2xrKTsKPiA+ICsK PiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgaW14MjgzX2dldF9y ZWd1bGF0b3JzKHN0cnVjdCBpbXgyODMgKmlteDI4MykKPiA+ICt7Cj4gPiArCXVuc2lnbmVkIGlu dCBpOwo+ID4gKwo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpbXgyODNfc3VwcGx5 X25hbWUpOyBpKyspCj4gPiArCQlpbXgyODMtPnN1cHBsaWVzW2ldLnN1cHBseSA9IGlteDI4M19z dXBwbHlfbmFtZVtpXTsKPiA+ICsKPiA+ICsJcmV0dXJuIGRldm1fcmVndWxhdG9yX2J1bGtfZ2V0 KGlteDI4My0+ZGV2LAo+ID4gKwkJCQkgICAgICAgQVJSQVlfU0laRShpbXgyODNfc3VwcGx5X25h bWUpLAo+ID4gKwkJCQkgICAgICAgaW14MjgzLT5zdXBwbGllcyk7Cj4gPiArfQo+ID4gKwo+ID4g Ky8qIFZlcmlmeSBjaGlwIElEICovCj4gPiArc3RhdGljIGludCBpbXgyODNfaWRlbnRpZnlfbW9k dWxlKHN0cnVjdCBpbXgyODMgKmlteDI4MykKPiA+ICt7Cj4gPiArCWludCByZXQ7Cj4gPiArCXU2 NCB2YWw7Cj4gPiArCj4gPiArCXJldCA9IGNjaV9yZWFkKGlteDI4My0+Y2NpLCBJTVgyODNfUkVH X0NISVBfSUQsICZ2YWwsIE5VTEwpOwo+ID4gKwlpZiAocmV0KSB7Cj4gPiArCQlkZXZfZXJyKGlt eDI4My0+ZGV2LCAiZmFpbGVkIHRvIHJlYWQgY2hpcCBpZCAleCwgd2l0aCBlcnJvciAlZFxuIiwK PiA+ICsJCQlJTVgyODNfQ0hJUF9JRCwgcmV0KTsKPiA+ICsJCXJldHVybiByZXQ7Cj4gPiArCX0K PiA+ICsKPiA+ICsJaWYgKHZhbCAhPSBJTVgyODNfQ0hJUF9JRCkgewo+ID4gKwkJZGV2X2Vycihp bXgyODMtPmRldiwgImNoaXAgaWQgbWlzbWF0Y2g6ICV4IT0lbGx4XG4iLAo+ID4gKwkJCUlNWDI4 M19DSElQX0lELCB2YWwpOwo+ID4gKwkJcmV0dXJuIC1FSU87Cj4gPiArCX0KPiA+ICsKPiA+ICsJ cmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgaW14MjgzX2dldF9zZWxlY3Rp b24oc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKPiA+ICsJCQkJc3RydWN0IHY0bDJfc3ViZGV2X3N0 YXRlICpzZF9zdGF0ZSwKPiA+ICsJCQkJc3RydWN0IHY0bDJfc3ViZGV2X3NlbGVjdGlvbiAqc2Vs KQo+ID4gK3sKPiA+ICsJc3dpdGNoIChzZWwtPnRhcmdldCkgewo+ID4gKwljYXNlIFY0TDJfU0VM X1RHVF9DUk9QOiB7Cj4gPiArCQlzZWwtPnIgPSAqdjRsMl9zdWJkZXZfc3RhdGVfZ2V0X2Nyb3Ao c2Rfc3RhdGUsIDApOwo+ID4gKwkJcmV0dXJuIDA7Cj4gPiArCX0KPiA+ICsKPiA+ICsJY2FzZSBW NEwyX1NFTF9UR1RfTkFUSVZFX1NJWkU6Cj4gPiArCQlzZWwtPnIgPSBpbXgyODNfbmF0aXZlX2Fy ZWE7Cj4gPiArCQlyZXR1cm4gMDsKPiA+ICsKPiA+ICsJY2FzZSBWNEwyX1NFTF9UR1RfQ1JPUF9E RUZBVUxUOgo+ID4gKwljYXNlIFY0TDJfU0VMX1RHVF9DUk9QX0JPVU5EUzoKPiA+ICsJCXNlbC0+ ciA9IGlteDI4M19hY3RpdmVfYXJlYTsKPiA+ICsJCXJldHVybiAwOwo+ID4gKwl9Cj4gPiArCj4g PiArCXJldHVybiAtRUlOVkFMOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0 IHY0bDJfc3ViZGV2X2NvcmVfb3BzIGlteDI4M19jb3JlX29wcyA9IHsKPiA+ICsJLnN1YnNjcmli ZV9ldmVudCA9IHY0bDJfY3RybF9zdWJkZXZfc3Vic2NyaWJlX2V2ZW50LAo+ID4gKwkudW5zdWJz Y3JpYmVfZXZlbnQgPSB2NGwyX2V2ZW50X3N1YmRldl91bnN1YnNjcmliZSwKPiA+ICt9Owo+ID4g Kwo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdmlkZW9fb3BzIGlteDI4M192 aWRlb19vcHMgPSB7Cj4gPiArCS5zX3N0cmVhbSA9IGlteDI4M19zZXRfc3RyZWFtLAo+ID4gK307 Cj4gPiArCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9wYWRfb3BzIGlteDI4 M19wYWRfb3BzID0gewo+ID4gKwkuZW51bV9tYnVzX2NvZGUgPSBpbXgyODNfZW51bV9tYnVzX2Nv ZGUsCj4gPiArCS5nZXRfZm10ID0gdjRsMl9zdWJkZXZfZ2V0X2ZtdCwKPiA+ICsJLnNldF9mbXQg PSBpbXgyODNfc2V0X3BhZF9mb3JtYXQsCj4gPiArCS5nZXRfc2VsZWN0aW9uID0gaW14MjgzX2dl dF9zZWxlY3Rpb24sCj4gPiArCS5lbnVtX2ZyYW1lX3NpemUgPSBpbXgyODNfZW51bV9mcmFtZV9z aXplLAo+ID4gK307Cj4gPiArCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9p bnRlcm5hbF9vcHMgaW14MjgzX2ludGVybmFsX29wcyA9IHsKPiA+ICsJLmluaXRfc3RhdGUgPSBp bXgyODNfaW5pdF9zdGF0ZSwKPiA+ICt9Owo+ID4gKwo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg djRsMl9zdWJkZXZfb3BzIGlteDI4M19zdWJkZXZfb3BzID0gewo+ID4gKwkuY29yZSA9ICZpbXgy ODNfY29yZV9vcHMsCj4gPiArCS52aWRlbyA9ICZpbXgyODNfdmlkZW9fb3BzLAo+ID4gKwkucGFk ID0gJmlteDI4M19wYWRfb3BzLAo+ID4gK307Cj4gPiArCj4gPiArLyogSW5pdGlhbGl6ZSBjb250 cm9sIGhhbmRsZXJzICovCj4gPiArc3RhdGljIGludCBpbXgyODNfaW5pdF9jb250cm9scyhzdHJ1 Y3QgaW14MjgzICppbXgyODMpCj4gPiArewo+ID4gKwlzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIg KmN0cmxfaGRscjsKPiA+ICsJc3RydWN0IHY0bDJfZndub2RlX2RldmljZV9wcm9wZXJ0aWVzIHBy b3BzOwo+ID4gKwljb25zdCBzdHJ1Y3QgaW14MjgzX21vZGUgKm1vZGUgPSBpbXgyODMtPm1vZGU7 Cj4gPiArCXU2NCBtaW5faGJsYW5rLCBtYXhfaGJsYW5rLCBkZWZfaGJsYW5rOwo+ID4gKwl1NjQg cGl4ZWxfcmF0ZTsKPiA+ICsJaW50IHJldDsKPiA+ICsKPiA+ICsJY3RybF9oZGxyID0gJmlteDI4 My0+Y3RybF9oYW5kbGVyOwo+ID4gKwlyZXQgPSB2NGwyX2N0cmxfaGFuZGxlcl9pbml0KGN0cmxf aGRsciwgMTYpOwo+ID4gKwlpZiAocmV0KQo+ID4gKwkJcmV0dXJuIHJldDsKPiA+ICsKPiA+ICsJ LyogU2VyaWFsaXplIGNvbnRyb2xzIHdpdGggc2Vuc29yIGRldmljZSAqLwo+ID4gKwljdHJsX2hk bHItPmxvY2sgPSAmaW14MjgzLT5tdXRleDsKPiA+ICsKPiA+ICsJLyoKPiA+ICsJICogQ3JlYXRl IHRoZSBjb250cm9scyBoZXJlLCBidXQgbW9kZSBzcGVjaWZpYyBsaW1pdHMgYXJlIHNldHVwCj4g PiArCSAqIGluIHRoZSBpbXgyODNfc2V0X2ZyYW1pbmdfbGltaXRzKCkgY2FsbCBiZWxvdy4KPiA+ ICsJICovCj4gPiArCj4gPiArCS8qIEJ5IGRlZmF1bHQsIFBJWEVMX1JBVEUgaXMgcmVhZCBvbmx5 ICovCj4gPiArCXBpeGVsX3JhdGUgPSBpbXgyODNfcGl4ZWxfcmF0ZShpbXgyODMpOwo+ID4gKwlp bXgyODMtPnBpeGVsX3JhdGUgPSB2NGwyX2N0cmxfbmV3X3N0ZChjdHJsX2hkbHIsICZpbXgyODNf Y3RybF9vcHMsCj4gPiArCQkJCQkgICAgICAgVjRMMl9DSURfUElYRUxfUkFURSwgcGl4ZWxfcmF0 ZSwKPiA+ICsJCQkJCSAgICAgICBwaXhlbF9yYXRlLCAxLCBwaXhlbF9yYXRlKTsKPiA+ICsKPiA+ ICsJaW14MjgzLT5saW5rX2ZyZXEgPSB2NGwyX2N0cmxfbmV3X2ludF9tZW51KGN0cmxfaGRsciwg JmlteDI4M19jdHJsX29wcywKPiA+ICsJCQkJCQkgICBWNEwyX0NJRF9MSU5LX0ZSRVEsCj4gPiAr CQkJCQkJICAgX19mbHMoaW14MjgzLT5saW5rX2ZyZXFfYml0bWFwKSwKPiA+ICsJCQkJCQkgICBf X2ZmcyhpbXgyODMtPmxpbmtfZnJlcV9iaXRtYXApLAo+ID4gKwkJCQkJCSAgIGxpbmtfZnJlcXVl bmNpZXMpOwo+ID4gKwlpZiAoaW14MjgzLT5saW5rX2ZyZXEpCj4gPiArCQlpbXgyODMtPmxpbmtf ZnJlcS0+ZmxhZ3MgfD0gVjRMMl9DVFJMX0ZMQUdfUkVBRF9PTkxZOwo+ID4gKwo+ID4gKwkvKiBJ bml0aWFsaXNlIHZibGFuay9oYmxhbmsvZXhwb3N1cmUgYmFzZWQgb24gdGhlIGN1cnJlbnQgbW9k ZS4gKi8KPiA+ICsJaW14MjgzLT52YmxhbmsgPSB2NGwyX2N0cmxfbmV3X3N0ZChjdHJsX2hkbHIs ICZpbXgyODNfY3RybF9vcHMsCj4gPiArCQkJCQkgICBWNEwyX0NJRF9WQkxBTkssCj4gPiArCQkJ CQkgICBtb2RlLT5taW5fdm1heCAtIG1vZGUtPmhlaWdodCwKPiA+ICsJCQkJCSAgIElNWDI4M19W TUFYX01BWCwgMSwKPiA+ICsJCQkJCSAgIG1vZGUtPmRlZmF1bHRfdm1heCAtIG1vZGUtPmhlaWdo dCk7Cj4gPiArCj4gPiArCW1pbl9oYmxhbmsgPSBtb2RlLT5taW5faG1heCAtIG1vZGUtPndpZHRo Owo+ID4gKwltYXhfaGJsYW5rID0gaW14MjgzX2ljbGtfdG9fcGl4KHBpeGVsX3JhdGUsIElNWDI4 M19ITUFYX01BWCkgLSBtb2RlLT53aWR0aDsKPiA+ICsJZGVmX2hibGFuayA9IG1vZGUtPmRlZmF1 bHRfaG1heCAtIG1vZGUtPndpZHRoOwo+ID4gKwlpbXgyODMtPmhibGFuayA9IHY0bDJfY3RybF9u ZXdfc3RkKGN0cmxfaGRsciwgJmlteDI4M19jdHJsX29wcywKPiA+ICsJCQkJCSAgIFY0TDJfQ0lE X0hCTEFOSywgbWluX2hibGFuaywgbWF4X2hibGFuaywKPiA+ICsJCQkJCSAgIDEsIGRlZl9oYmxh bmspOwo+ID4gKwo+ID4gKwlpbXgyODMtPmV4cG9zdXJlID0gdjRsMl9jdHJsX25ld19zdGQoY3Ry bF9oZGxyLCAmaW14MjgzX2N0cmxfb3BzLAo+ID4gKwkJCQkJICAgICBWNEwyX0NJRF9FWFBPU1VS RSwKPiA+ICsJCQkJCSAgICAgSU1YMjgzX0VYUE9TVVJFX01JTiwKPiA+ICsJCQkJCSAgICAgSU1Y MjgzX0VYUE9TVVJFX01BWCwKPiA+ICsJCQkJCSAgICAgSU1YMjgzX0VYUE9TVVJFX1NURVAsCj4g PiArCQkJCQkgICAgIElNWDI4M19FWFBPU1VSRV9ERUZBVUxUKTsKPiA+ICsKPiA+ICsJdjRsMl9j dHJsX25ld19zdGQoY3RybF9oZGxyLCAmaW14MjgzX2N0cmxfb3BzLCBWNEwyX0NJRF9BTkFMT0dV RV9HQUlOLAo+ID4gKwkJCSAgSU1YMjgzX0FOQV9HQUlOX01JTiwgSU1YMjgzX0FOQV9HQUlOX01B WCwKPiA+ICsJCQkgIElNWDI4M19BTkFfR0FJTl9TVEVQLCBJTVgyODNfQU5BX0dBSU5fREVGQVVM VCk7Cj4gPiArCj4gPiArCXY0bDJfY3RybF9uZXdfc3RkKGN0cmxfaGRsciwgJmlteDI4M19jdHJs X29wcywgVjRMMl9DSURfRElHSVRBTF9HQUlOLAo+ID4gKwkJCSAgSU1YMjgzX0RHVExfR0FJTl9N SU4sIElNWDI4M19ER1RMX0dBSU5fTUFYLAo+ID4gKwkJCSAgSU1YMjgzX0RHVExfR0FJTl9TVEVQ LCBJTVgyODNfREdUTF9HQUlOX0RFRkFVTFQpOwo+ID4gKwo+ID4gKwlpbXgyODMtPnZmbGlwID0g djRsMl9jdHJsX25ld19zdGQoY3RybF9oZGxyLCAmaW14MjgzX2N0cmxfb3BzLCBWNEwyX0NJRF9W RkxJUCwKPiA+ICsJCQkJCSAgMCwgMSwgMSwgMCk7Cj4gPiArCWlmIChpbXgyODMtPnZmbGlwKQo+ ID4gKwkJaW14MjgzLT52ZmxpcC0+ZmxhZ3MgfD0gVjRMMl9DVFJMX0ZMQUdfTU9ESUZZX0xBWU9V VDsKPiA+ICsKPiA+ICsJdjRsMl9jdHJsX25ld19zdGRfbWVudV9pdGVtcyhjdHJsX2hkbHIsICZp bXgyODNfY3RybF9vcHMsCj4gPiArCQkJCSAgICAgVjRMMl9DSURfVEVTVF9QQVRURVJOLAo+ID4g KwkJCQkgICAgIEFSUkFZX1NJWkUoaW14MjgzX3RwZ19tZW51KSAtIDEsCj4gPiArCQkJCSAgICAg MCwgMCwgaW14MjgzX3RwZ19tZW51KTsKPiA+ICsKPiA+ICsJaWYgKGN0cmxfaGRsci0+ZXJyb3Ip IHsKPiA+ICsJCXJldCA9IGN0cmxfaGRsci0+ZXJyb3I7Cj4gPiArCQlkZXZfZXJyKGlteDI4My0+ ZGV2LCAiJXMgY29udHJvbCBpbml0IGZhaWxlZCAoJWQpXG4iLAo+ID4gKwkJCV9fZnVuY19fLCBy ZXQpOwo+ID4gKwkJZ290byBlcnJvcjsKPiA+ICsJfQo+ID4gKwo+ID4gKwlyZXQgPSB2NGwyX2Z3 bm9kZV9kZXZpY2VfcGFyc2UoaW14MjgzLT5kZXYsICZwcm9wcyk7Cj4gPiArCWlmIChyZXQpCj4g PiArCQlnb3RvIGVycm9yOwo+ID4gKwo+ID4gKwlyZXQgPSB2NGwyX2N0cmxfbmV3X2Z3bm9kZV9w cm9wZXJ0aWVzKGN0cmxfaGRsciwgJmlteDI4M19jdHJsX29wcywKPiA+ICsJCQkJCSAgICAgICZw cm9wcyk7Cj4gPiArCWlmIChyZXQpCj4gPiArCQlnb3RvIGVycm9yOwo+ID4gKwo+ID4gKwlpbXgy ODMtPnNkLmN0cmxfaGFuZGxlciA9IGN0cmxfaGRscjsKPiA+ICsKPiA+ICsJbXV0ZXhfbG9jaygm aW14MjgzLT5tdXRleCk7Cj4gPiArCj4gPiArCXJldCA9IF9fdjRsMl9jdHJsX3NfY3RybChpbXgy ODMtPmxpbmtfZnJlcSwKPiA+ICsJCQkJIF9fZmZzKGlteDI4My0+bGlua19mcmVxX2JpdG1hcCkp Owo+IAo+IElzIHRoaXMgbmVlZGVkPyBUaGUgZGVmYXVsdCBpcyBhbHJlYWR5IHNldCB3aGVuIGNy ZWF0aW5nIHRoZSBjb250cm9sLgo+IAo+ID4gKwlpZiAocmV0KQo+ID4gKwkJZ290byBlcnJvcjsK PiA+ICsKPiA+ICsJLyogU2V0dXAgZXhwb3N1cmUgYW5kIGZyYW1lL2xpbmUgbGVuZ3RoIGxpbWl0 cy4gKi8KPiA+ICsJaW14MjgzX3NldF9mcmFtaW5nX2xpbWl0cyhpbXgyODMpOwo+ID4gKwo+ID4g KwltdXRleF91bmxvY2soJmlteDI4My0+bXV0ZXgpOwo+ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ ICsKPiA+ICtlcnJvcjoKPiA+ICsJdjRsMl9jdHJsX2hhbmRsZXJfZnJlZShjdHJsX2hkbHIpOwo+ ID4gKwo+ID4gKwlyZXR1cm4gcmV0Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBpbXgy ODNfZnJlZV9jb250cm9scyhzdHJ1Y3QgaW14MjgzICppbXgyODMpCj4gPiArewo+ID4gKwl2NGwy X2N0cmxfaGFuZGxlcl9mcmVlKGlteDI4My0+c2QuY3RybF9oYW5kbGVyKTsKPiAKPiBZb3UgY291 bGQgY2FsbCB2NGwyX2N0cmxfaGFuZGxlcl9mcmVlKCkgZGlyZWN0bHkuCj4gCj4gPiArfQo+ID4g Kwo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGlteDI4M19kdF9pZHNbXSA9 IHsKPiA+ICsJeyAuY29tcGF0aWJsZSA9ICJzb255LGlteDI4MyIsIH0sCj4gPiArCXsgLyogc2Vu dGluZWwgKi8gfQo+ID4gK307Cj4gPiArCj4gPiArc3RhdGljIGludCBpbXgyODNfcGFyc2VfZW5k cG9pbnQoc3RydWN0IGlteDI4MyAqaW14MjgzKQo+ID4gK3sKPiA+ICsJc3RydWN0IGZ3bm9kZV9o YW5kbGUgKmZ3bm9kZSA9IGRldl9md25vZGUoaW14MjgzLT5kZXYpOwo+ID4gKwlzdHJ1Y3QgdjRs Ml9md25vZGVfZW5kcG9pbnQgYnVzX2NmZyA9IHsKPiA+ICsJCS5idXNfdHlwZSA9IFY0TDJfTUJV U19DU0kyX0RQSFkKPiA+ICsJfTsKPiA+ICsJc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmVwOwo+ID4g KwlpbnQgcmV0Owo+ID4gKwo+ID4gKwlpZiAoIWZ3bm9kZSkKPiA+ICsJCXJldHVybiAtRU5YSU87 Cj4gPiArCj4gPiArCWVwID0gZndub2RlX2dyYXBoX2dldF9uZXh0X2VuZHBvaW50KGZ3bm9kZSwg TlVMTCk7Cj4gPiArCWlmICghZXApIHsKPiA+ICsJCWRldl9lcnIoaW14MjgzLT5kZXYsICJGYWls ZWQgdG8gZ2V0IG5leHQgZW5kcG9pbnRcbiIpOwo+ID4gKwkJcmV0dXJuIC1FTlhJTzsKPiA+ICsJ fQo+ID4gKwo+ID4gKwlyZXQgPSB2NGwyX2Z3bm9kZV9lbmRwb2ludF9hbGxvY19wYXJzZShlcCwg JmJ1c19jZmcpOwo+ID4gKwlmd25vZGVfaGFuZGxlX3B1dChlcCk7Cj4gPiArCWlmIChyZXQpCj4g PiArCQlyZXR1cm4gcmV0Owo+ID4gKwo+ID4gKwlpZiAoYnVzX2NmZy5idXMubWlwaV9jc2kyLm51 bV9kYXRhX2xhbmVzICE9IDQpIHsKPiA+ICsJCWRldl9lcnIoaW14MjgzLT5kZXYsCj4gPiArCQkJ Im51bWJlciBvZiBDU0kyIGRhdGEgbGFuZXMgJWQgaXMgbm90IHN1cHBvcnRlZFxuIiwKPiA+ICsJ CQlidXNfY2ZnLmJ1cy5taXBpX2NzaTIubnVtX2RhdGFfbGFuZXMpOwo+ID4gKwkJcmV0ID0gLUVJ TlZBTDsKPiA+ICsJCWdvdG8gZG9uZV9lbmRwb2ludF9mcmVlOwo+ID4gKwl9Cj4gPiArCj4gPiAr CXJldCA9IHY0bDJfbGlua19mcmVxX3RvX2JpdG1hcChpbXgyODMtPmRldiwgYnVzX2NmZy5saW5r X2ZyZXF1ZW5jaWVzLAo+ID4gKwkJCQkgICAgICAgYnVzX2NmZy5ucl9vZl9saW5rX2ZyZXF1ZW5j aWVzLAo+ID4gKwkJCQkgICAgICAgbGlua19mcmVxdWVuY2llcywgQVJSQVlfU0laRShsaW5rX2Zy ZXF1ZW5jaWVzKSwKPiA+ICsJCQkJICAgICAgICZpbXgyODMtPmxpbmtfZnJlcV9iaXRtYXApOwo+ ID4gKwo+ID4gK2RvbmVfZW5kcG9pbnRfZnJlZToKPiA+ICsJdjRsMl9md25vZGVfZW5kcG9pbnRf ZnJlZSgmYnVzX2NmZyk7Cj4gPiArCj4gPiArCXJldHVybiByZXQ7Cj4gPiArfTsKPiA+ICsKPiA+ ICtzdGF0aWMgaW50IGlteDI4M19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQo+ID4g K3sKPiA+ICsJc3RydWN0IGlteDI4MyAqaW14MjgzOwo+ID4gKwlpbnQgcmV0Owo+IAo+IFBsZWFz ZSBkZWNsYXJlIHJldCBhcyBsYXN0Lgo+IAo+ID4gKwl1bnNpZ25lZCBpbnQgaTsKPiA+ICsJdW5z aWduZWQgaW50IHhjbGtfZnJlcTsKPiA+ICsKPiA+ICsJaW14MjgzID0gZGV2bV9remFsbG9jKCZj bGllbnQtPmRldiwgc2l6ZW9mKCppbXgyODMpLCBHRlBfS0VSTkVMKTsKPiA+ICsJaWYgKCFpbXgy ODMpCj4gPiArCQlyZXR1cm4gLUVOT01FTTsKPiA+ICsKPiA+ICsJaW14MjgzLT5kZXYgPSAmY2xp ZW50LT5kZXY7Cj4gPiArCj4gPiArCXY0bDJfaTJjX3N1YmRldl9pbml0KCZpbXgyODMtPnNkLCBj bGllbnQsICZpbXgyODNfc3ViZGV2X29wcyk7Cj4gPiArCj4gPiArCWlteDI4My0+Y2NpID0gZGV2 bV9jY2lfcmVnbWFwX2luaXRfaTJjKGNsaWVudCwgMTYpOwo+ID4gKwlpZiAoSVNfRVJSKGlteDI4 My0+Y2NpKSkgewo+ID4gKwkJcmV0ID0gUFRSX0VSUihpbXgyODMtPmNjaSk7Cj4gPiArCQlkZXZf ZXJyKGlteDI4My0+ZGV2LCAiZmFpbGVkIHRvIGluaXRpYWxpemUgQ0NJOiAlZFxuIiwgcmV0KTsK PiA+ICsJCXJldHVybiByZXQ7Cj4gPiArCX0KPiA+ICsKPiA+ICsJLyogR2V0IHN5c3RlbSBjbG9j ayAoeGNsaykgKi8KPiA+ICsJaW14MjgzLT54Y2xrID0gZGV2bV9jbGtfZ2V0KGlteDI4My0+ZGV2 LCBOVUxMKTsKPiA+ICsJaWYgKElTX0VSUihpbXgyODMtPnhjbGspKSB7Cj4gPiArCQlkZXZfZXJy KGlteDI4My0+ZGV2LCAiZmFpbGVkIHRvIGdldCB4Y2xrXG4iKTsKCmRldl9lcnJfcHJvYmUoKSB3 b3VsZCBiZSB1c2VmdWwgaGVyZSBhbmQgaW4gb3RoZXIgbG9jYXRpb25zLgoKPiA+ICsJCXJldHVy biBQVFJfRVJSKGlteDI4My0+eGNsayk7Cj4gPiArCX0KPiA+ICsKPiA+ICsJeGNsa19mcmVxID0g Y2xrX2dldF9yYXRlKGlteDI4My0+eGNsayk7Cj4gPiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9T SVpFKGlteDI4M19mcmVxdWVuY2llcyk7IGkrKykgewo+ID4gKwkJaWYgKHhjbGtfZnJlcSA9PSBp bXgyODNfZnJlcXVlbmNpZXNbaV0ubWh6KSB7Cj4gPiArCQkJaW14MjgzLT5mcmVxID0gJmlteDI4 M19mcmVxdWVuY2llc1tpXTsKPiA+ICsJCQlicmVhazsKPiA+ICsJCX0KPiA+ICsJfQo+ID4gKwlp ZiAoIWlteDI4My0+ZnJlcSkgewo+ID4gKwkJZGV2X2VycihpbXgyODMtPmRldiwgInhjbGsgZnJl cXVlbmN5IHVuc3VwcG9ydGVkOiAlZCBIelxuIiwgeGNsa19mcmVxKTsKPiAKPiBZb3UgY291bGQg YWxzbyBwaWNrIHRoZSBjbG9zZXN0IHZhbHVlIGFuZCB3YXJuIGFib3V0IGl0LCB0aGVzZSBhcmVu J3QKPiBhbHdheXMgZXhhY3RseSB3aGF0J3MgZXhwZWN0ZWQuIFVwIHRvIHlvdS4KPiAKPiA+ICsJ CXJldHVybiAtRUlOVkFMOwo+ID4gKwl9Cj4gPiArCj4gPiArCXJldCA9IGlteDI4M19nZXRfcmVn dWxhdG9ycyhpbXgyODMpOwo+ID4gKwlpZiAocmV0KSB7Cj4gPiArCQlkZXZfZXJyKGlteDI4My0+ ZGV2LCAiZmFpbGVkIHRvIGdldCByZWd1bGF0b3JzXG4iKTsKPiA+ICsJCXJldHVybiByZXQ7Cj4g PiArCX0KPiA+ICsKPiA+ICsJcmV0ID0gaW14MjgzX3BhcnNlX2VuZHBvaW50KGlteDI4Myk7Cj4g PiArCWlmIChyZXQpIHsKPiA+ICsJCWRldl9lcnIoaW14MjgzLT5kZXYsICJmYWlsZWQgdG8gcGFy c2UgZW5kcG9pbnQgY29uZmlndXJhdGlvblxuIik7Cj4gPiArCQlyZXR1cm4gcmV0Owo+ID4gKwl9 Cj4gPiArCj4gPiArCS8qIFJlcXVlc3Qgb3B0aW9uYWwgZW5hYmxlIHBpbiAqLwo+ID4gKwlpbXgy ODMtPnJlc2V0X2dwaW8gPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbChpbXgyODMtPmRldiwgInJl c2V0IiwKPiA+ICsJCQkJCQkgICAgIEdQSU9EX09VVF9ISUdIKTsKPiA+ICsKPiA+ICsJbXV0ZXhf aW5pdCgmaW14MjgzLT5tdXRleCk7Cj4gPiArCj4gPiArCS8qCj4gPiArCSAqIFRoZSBzZW5zb3Ig bXVzdCBiZSBwb3dlcmVkIGZvciBpbXgyODNfaWRlbnRpZnlfbW9kdWxlKCkKPiA+ICsJICogdG8g YmUgYWJsZSB0byByZWFkIHRoZSBDSElQX0lEIHJlZ2lzdGVyCj4gPiArCSAqLwo+ID4gKwlyZXQg PSBpbXgyODNfcG93ZXJfb24oaW14MjgzLT5kZXYpOwo+ID4gKwlpZiAocmV0KQo+IAo+IG11dGV4 X2Rlc3Ryb3koKSBpcyBtaXNzaW5nIG9uIHRoaXMgY29kZSBwYXRoIChhbmQgZWxzZXdoZXJlLCB0 b28pLgo+IAo+ID4gKwkJcmV0dXJuIHJldDsKPiA+ICsKPiA+ICsJcmV0ID0gaW14MjgzX2lkZW50 aWZ5X21vZHVsZShpbXgyODMpOwo+ID4gKwlpZiAocmV0KQo+ID4gKwkJZ290byBlcnJvcl9wb3dl cl9vZmY7Cj4gPiArCj4gPiArCS8qIEluaXRpYWxpemUgZGVmYXVsdCBmb3JtYXQgYW5kIG1vZGUg dG8gbWF4IHJlc29sdXRpb24gKi8KPiA+ICsJaW14MjgzLT5tb2RlID0gJnN1cHBvcnRlZF9tb2Rl c18xMmJpdFswXTsKPiA+ICsJaW14MjgzLT5mbXRfY29kZSA9IE1FRElBX0JVU19GTVRfU1JHR0Ix Ml8xWDEyOwo+ID4gKwo+ID4gKwkvKgo+ID4gKwkgKiBFbmFibGUgcnVudGltZSBQTSB3aXRoIGF1 dG9zdXNwZW5kLiBBcyB0aGUgZGV2aWNlIGhhcyBiZWVuIHBvd2VyZWQKPiA+ICsJICogbWFudWFs bHksIG1hcmsgaXQgYXMgYWN0aXZlLCBhbmQgaW5jcmVhc2UgdGhlIHVzYWdlIGNvdW50IHdpdGhv dXQKPiA+ICsJICogcmVzdW1pbmcgdGhlIGRldmljZS4KPiA+ICsJICovCj4gPiArCXBtX3J1bnRp bWVfc2V0X2FjdGl2ZShpbXgyODMtPmRldik7Cj4gPiArCXBtX3J1bnRpbWVfZ2V0X25vcmVzdW1l KGlteDI4My0+ZGV2KTsKPiA+ICsJcG1fcnVudGltZV9lbmFibGUoaW14MjgzLT5kZXYpOwo+ID4g KwlwbV9ydW50aW1lX3NldF9hdXRvc3VzcGVuZF9kZWxheShpbXgyODMtPmRldiwgMTAwMCk7Cj4g PiArCXBtX3J1bnRpbWVfdXNlX2F1dG9zdXNwZW5kKGlteDI4My0+ZGV2KTsKPiA+ICsKPiA+ICsJ LyogVGhpcyBuZWVkcyB0aGUgcG0gcnVudGltZSB0byBiZSByZWdpc3RlcmVkLiAqLwo+ID4gKwly ZXQgPSBpbXgyODNfaW5pdF9jb250cm9scyhpbXgyODMpOwo+ID4gKwlpZiAocmV0KQo+ID4gKwkJ Z290byBlcnJvcl9wbTsKPiA+ICsKPiA+ICsJLyogSW5pdGlhbGl6ZSBzdWJkZXYgKi8KPiA+ICsJ aW14MjgzLT5zZC5mbGFncyB8PSBWNEwyX1NVQkRFVl9GTF9IQVNfREVWTk9ERSB8Cj4gPiArCQkJ ICAgIFY0TDJfU1VCREVWX0ZMX0hBU19FVkVOVFM7Cj4gPiArCWlteDI4My0+c2QuZW50aXR5LmZ1 bmN0aW9uID0gTUVESUFfRU5UX0ZfQ0FNX1NFTlNPUjsKPiA+ICsJaW14MjgzLT5zZC5pbnRlcm5h bF9vcHMgPSAmaW14MjgzX2ludGVybmFsX29wczsKPiA+ICsKPiA+ICsJLyogSW5pdGlhbGl6ZSBz b3VyY2UgcGFkcyAqLwo+ID4gKwlpbXgyODMtPnBhZC5mbGFncyA9IE1FRElBX1BBRF9GTF9TT1VS Q0U7Cj4gPiArCj4gPiArCXJldCA9IG1lZGlhX2VudGl0eV9wYWRzX2luaXQoJmlteDI4My0+c2Qu ZW50aXR5LCAxLCAmaW14MjgzLT5wYWQpOwo+ID4gKwlpZiAocmV0KSB7Cj4gPiArCQlkZXZfZXJy KGlteDI4My0+ZGV2LCAiZmFpbGVkIHRvIGluaXQgZW50aXR5IHBhZHM6ICVkXG4iLCByZXQpOwo+ ID4gKwkJZ290byBlcnJvcl9oYW5kbGVyX2ZyZWU7Cj4gPiArCX0KPiA+ICsKPiA+ICsJaW14Mjgz LT5zZC5zdGF0ZV9sb2NrID0gaW14MjgzLT5jdHJsX2hhbmRsZXIubG9jazsKPiA+ICsJcmV0ID0g djRsMl9zdWJkZXZfaW5pdF9maW5hbGl6ZSgmaW14MjgzLT5zZCk7Cj4gPiArCWlmIChyZXQgPCAw KSB7Cj4gPiArCQlkZXZfZXJyKGlteDI4My0+ZGV2LCAic3ViZGV2IGluaXQgZXJyb3I6ICVkXG4i LCByZXQpOwo+ID4gKwkJZ290byBlcnJvcl9tZWRpYV9lbnRpdHk7Cj4gPiArCX0KPiA+ICsKPiA+ ICsJcmV0ID0gdjRsMl9hc3luY19yZWdpc3Rlcl9zdWJkZXZfc2Vuc29yKCZpbXgyODMtPnNkKTsK PiA+ICsJaWYgKHJldCA8IDApIHsKPiA+ICsJCWRldl9lcnIoaW14MjgzLT5kZXYsICJmYWlsZWQg dG8gcmVnaXN0ZXIgc2Vuc29yIHN1Yi1kZXZpY2U6ICVkXG4iLCByZXQpOwo+ID4gKwkJZ290byBl cnJvcl9zdWJkZXZfY2xlYW51cDsKPiA+ICsJfQo+ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ICsK PiA+ICtlcnJvcl9zdWJkZXZfY2xlYW51cDoKPiA+ICsJdjRsMl9zdWJkZXZfY2xlYW51cCgmaW14 MjgzLT5zZCk7Cj4gPiArCj4gPiArZXJyb3JfbWVkaWFfZW50aXR5Ogo+ID4gKwltZWRpYV9lbnRp dHlfY2xlYW51cCgmaW14MjgzLT5zZC5lbnRpdHkpOwo+ID4gKwo+ID4gK2Vycm9yX2hhbmRsZXJf ZnJlZToKPiA+ICsJaW14MjgzX2ZyZWVfY29udHJvbHMoaW14MjgzKTsKPiA+ICsKPiA+ICtlcnJv cl9wbToKPiA+ICsJcG1fcnVudGltZV9kaXNhYmxlKGlteDI4My0+ZGV2KTsKPiA+ICsJcG1fcnVu dGltZV9zZXRfc3VzcGVuZGVkKGlteDI4My0+ZGV2KTsKPiA+ICtlcnJvcl9wb3dlcl9vZmY6Cj4g PiArCWlteDI4M19wb3dlcl9vZmYoaW14MjgzLT5kZXYpOwo+ID4gKwo+ID4gKwlyZXR1cm4gcmV0 Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBpbXgyODNfcmVtb3ZlKHN0cnVjdCBpMmNf Y2xpZW50ICpjbGllbnQpCj4gPiArewo+ID4gKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaTJj X2dldF9jbGllbnRkYXRhKGNsaWVudCk7Cj4gPiArCXN0cnVjdCBpbXgyODMgKmlteDI4MyA9IHRv X2lteDI4MyhzZCk7Cj4gPiArCj4gPiArCXY0bDJfYXN5bmNfdW5yZWdpc3Rlcl9zdWJkZXYoc2Qp Owo+ID4gKwl2NGwyX3N1YmRldl9jbGVhbnVwKCZpbXgyODMtPnNkKTsKPiA+ICsJbWVkaWFfZW50 aXR5X2NsZWFudXAoJnNkLT5lbnRpdHkpOwo+ID4gKwlpbXgyODNfZnJlZV9jb250cm9scyhpbXgy ODMpOwo+ID4gKwo+ID4gKwlwbV9ydW50aW1lX2Rpc2FibGUoaW14MjgzLT5kZXYpOwo+ID4gKwlp ZiAoIXBtX3J1bnRpbWVfc3RhdHVzX3N1c3BlbmRlZChpbXgyODMtPmRldikpCj4gPiArCQlpbXgy ODNfcG93ZXJfb2ZmKGlteDI4My0+ZGV2KTsKPiA+ICsJcG1fcnVudGltZV9zZXRfc3VzcGVuZGVk KGlteDI4My0+ZGV2KTsKPiA+ICt9Cj4gPiArCj4gPiArTU9EVUxFX0RFVklDRV9UQUJMRShvZiwg aW14MjgzX2R0X2lkcyk7Cj4gPiArCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3Bz IGlteDI4M19wbV9vcHMgPSB7Cj4gPiArCVNFVF9SVU5USU1FX1BNX09QUyhpbXgyODNfcG93ZXJf b2ZmLCBpbXgyODNfcG93ZXJfb24sIE5VTEwpCj4gPiArfTsKCllvdSdsbCBnZXQgY29tcGlsZXIg d2FybmluZ3Mgd2l0aCAhQ09ORklHX1BNLiBZb3UgY2FuIGVpdGhlciBtYXJrIHRoZQpoYW5kbGVy cyBhcyBfX21heWJlX3VudXNlZCwgb3IgdXNlIFJVTlRJTUVfUE1fT1BTKCkgKyBwbV9wdHIoKSBi ZWxvdyBhbmQKbWFyayB0aGlzIHN0cnVjdHVyZSBhcyBtYXliZSB1bnVzZWQuCgo+ID4gKwo+ID4g K3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpbXgyODNfaTJjX2RyaXZlciA9IHsKPiA+ICsJLmRy aXZlciA9IHsKPiA+ICsJCS5uYW1lID0gImlteDI4MyIsCj4gPiArCQkub2ZfbWF0Y2hfdGFibGUJ PSBpbXgyODNfZHRfaWRzLAo+ID4gKwkJLnBtID0gJmlteDI4M19wbV9vcHMsCj4gPiArCX0sCj4g PiArCS5wcm9iZSA9IGlteDI4M19wcm9iZSwKPiA+ICsJLnJlbW92ZSA9IGlteDI4M19yZW1vdmUs Cj4gPiArfTsKPiA+ICsKPiA+ICttb2R1bGVfaTJjX2RyaXZlcihpbXgyODNfaTJjX2RyaXZlcik7 Cj4gPiArCj4gPiArTU9EVUxFX0FVVEhPUigiV2lsbCBXaGFuZyA8d2lsbEB3aWxsd2hhbmcuY29t PiIpOwo+ID4gK01PRFVMRV9BVVRIT1IoIktpZXJhbiBCaW5naGFtIDxraWVyYW4uYmluZ2hhbUBp ZGVhc29uYm9hcmQuY29tPiIpOwo+ID4gK01PRFVMRV9BVVRIT1IoIlVtYW5nIEphaW4gPHVtYW5n LmphaW5AaWRlYXNvbmJvYXJkLmNvbT4iKTsKPiA+ICtNT0RVTEVfREVTQ1JJUFRJT04oIlNvbnkg SU1YMjgzIFNlbnNvciBEcml2ZXIiKTsKPiA+ICtNT0RVTEVfTElDRU5TRSgiR1BMIik7CgotLSAK UmVnYXJkcywKCkxhdXJlbnQgUGluY2hhcnQKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFy bS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK