From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.0 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 25F28C4332B for ; Thu, 19 Mar 2020 02:28:02 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id DBC3520724 for ; Thu, 19 Mar 2020 02:28:01 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="LL/NF5Q+" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org DBC3520724 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ideasonboard.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 0B2BA6E0AF; Thu, 19 Mar 2020 02:28:01 +0000 (UTC) Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by gabe.freedesktop.org (Postfix) with ESMTPS id A596E6E0AF for ; Thu, 19 Mar 2020 02:27:59 +0000 (UTC) Received: from pendragon.ideasonboard.com (81-175-216-236.bb.dnainternet.fi [81.175.216.236]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 8DA025F; Thu, 19 Mar 2020 03:27:57 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1584584878; bh=5vrMKehg6eGxdK0iz0e5K7PRlbv4f7iQyorGcr2j14M=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=LL/NF5Q+HeioMBeKbeRjfgYi3WclZlNf1uB6QwAVo9cbjc6ANCAHbDjeLPyJ1Ohgr iqTkBHKzwbf/LrNP0m6JQbTgsifSiiY3AAgT7nRAs+mhOAUWYu4a8KEfEQP6hNBHcr QbeSXqdM13bcUMIVdxiICionbBuPLq5adShBWQBI= Date: Thu, 19 Mar 2020 04:27:52 +0200 From: Laurent Pinchart To: Sam Ravnborg Subject: Re: [PATCH v11 2/5] drm: xlnx: DRM/KMS driver for Xilinx ZynqMP DisplayPort Subsystem Message-ID: <20200319022752.GB27375@pendragon.ideasonboard.com> References: <20200318153728.25843-1-laurent.pinchart@ideasonboard.com> <20200318153728.25843-3-laurent.pinchart@ideasonboard.com> <20200318203036.GB28612@ravnborg.org> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20200318203036.GB28612@ravnborg.org> User-Agent: Mutt/1.10.1 (2018-07-13) X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Hyun Kwon , Michal Simek , dri-devel@lists.freedesktop.org, Satish Kumar Nagireddy Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" SGkgU2FtLAoKT24gV2VkLCBNYXIgMTgsIDIwMjAgYXQgMDk6MzA6MzZQTSArMDEwMCwgU2FtIFJh dm5ib3JnIHdyb3RlOgo+IEhpIExhdXJlbnQuCj4gCj4gU29tZSBkcml2ZSBieSBjb21tZW50cywg SSB0aXJlZCB0byBkbyBhIGZ1bGwgcmV2aWV3IGJ1dCBsb3N0IHRoZSBmdWxsCj4gcGljdHVyZS4K ClRoYW5rcyBhIGxvdCBmb3IgdGhlIHJldmlldyAhCgo+IEdlbmVyYWwgY29tbWVudHM6Cj4gLSBU aGUgbmV3bHkgaW50cm9kdWNlZCBkcm1fZXJyKCkgYW5kIGZyaWVuZHMgY291bGQgcmVwYWxjZSB1 c2VzIG9mCj4gICBkZXZfZXJyKCkgJiBjby4gaW4gc29tZS9tb3N0IHBsYWNlcwoKV2hhdCdzIHRo ZSBhZGRlZCB2YWx1ZSA/IFRoZXJlJ3MgYW4gYWRkaXRpb25hbCBbZHJtXSBwcmVmaXggYW5kIGEK KkVSUk9SKiBmb3IgZGV2X2VycigpLCBpcyB0aGVyZSBhIHJlYWwgYmVuZWZpdCA/Cgo+IC0gVGhl IGRpcnZlciB1c2VzIHRoZSB4aWxpbnggc3BlY2lmaWMgdGVybSAibGF5ZXIiIHdoZXJlIERSTSB1 c2VzIHBsYW5lLgo+ICAgSXQgbWFrZXMgdGhlIGNvZGUgbGVzcyByZWFkYWJsZSBmb3IgdGhlIGF2 ZXJhZ2UgRFJNIHJlYWRlciwgYnV0IEkKPiAgIGd1ZXNzIGVhc2llciBmb3IgdGhlIGF2ZXJhZ2Ug WGlsaW54IHJlYWRlci4gVHJhZGVvZmYuLgoKWWVzLCB0cmFkZW9mZiA6LS8gSSB3ZW50IHdpdGgg dGhlIGxheWVyIG9wdGlvbiB0byBrZWVwIHRoZSBkcml2ZXIKdm9jYWJ1bGFyeSBjbG9zZXIgdG8g dGhlIGhhcmR3YXJlLgoKPiAtIFRoZSBjb2RlIHVzZXMga2VybmVsLWRvYyBmb3JtYXR0aW5nIGFs bCBvdmVyLiBCdXQgdGhlCj4gICBjb2RlIGlzIG5vdCB3aXJlZCBpbnRvIERvY3VtZW50YXRpb24v IHNlIHdlIGRvIG5vdCBzZWUKPiAgIGl0IGluIHRoZSBnZW5lcmF0ZWQgZG9jLgoKSSBkb24ndCB0 aGluayB0aGVyZSdzIG11Y2ggcG9pbnQgaW4gd2lyaW5nIGl0IGludG8gRG9jdW1lbnRhdGlvbi8s IGlzCnRoZXJlID8gSSBjYW4gcmVwbGFjZSB0aGUgLyoqIG1hcmtlciB3aXRoIC8qLiBJJ3ZlIGFj dHVhbGx5IHJlbW92ZWQKcXVpdGUgYSBmZXcga2VybmVsZG9jIGNvbW1lbnRzIGZyb20gdGhlIG9y aWdpbmFsIGRyaXZlciwgd2hlbiB0aGV5IHdlcmUKZG9jdW1lbnRpbmcgaW50ZXJuYWwgKHN0YXRp YykgZnVuY3Rpb25zIHRoYXQgZWl0aGVyIHdlcmUgdHJpdmlhbCwgb3IKd2VyZSBoYW5kbGVycyBm b3IgRFJNL0tNUyBvcGVyYXRpb25zLgoKPiAtIENvcHlyaWdodCA9PiAyMDIwCgpGaXhlZC4KCj4g LSBJdCBtYXkganVzdCBiZSBtZSAtIGJ1dCBJIGFtIGNvbmZ1c2VkIHRoYXQgdGhlIGRyaXZlciBp cyBuYW1lZAo+ICAgenlucW1wX2Rwc3ViLgo+ICAgSSByZWFkcyBsaWtlIHNvbWV0aGluZyBlbHNl Lgo+ICAgQW5kIHRoZW4gd2UgaGF2ZSB6eW5xbXBfZHAgd2hpY2ggaXMgYSBtb2R1bGUgaW5zaWRl IHp5bnFtcF9kcHN1Yi4uLgoKRFBTVUIgc3RhbmRzIGZvciBEaXNwbGF5UG9ydCBTdWJzeXN0ZW0g YW5kIGNvbWVzIHN0cmFpZ2h0IGZyb20gdGhlCmRhdGFzaGVldC4genlucW1wX2RwIGlzIGp1c3Qg dGhlIERpc3BsYXlQb3J0IGVuY29kZXIuIEkgYWdyZWUgdGhhdCAnc3ViJwpjb3VsZCBiZSBpbnRl cnByZXRlZCBhcyBiZWluZyBhIHN1Yi1wYXJ0LCBidXQgSSdtIG5vdCBzdXJlIHdoYXQgb3RoZXIK bmFtaW5nIHNjaGVtZSB3b3VsZCBiZSBiZXR0ZXIgd2hpbGUgc3RheWluZyBjbG9zZSB0byB0aGUg aGFyZHdhcmUuCgo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94bG54L01ha2VmaWxl IGIvZHJpdmVycy9ncHUvZHJtL3hsbngvTWFrZWZpbGUKPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 Cj4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLjJiODQ0YzYwYTgwYQo+ID4gLS0tIC9kZXYvbnVsbAo+ ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3hsbngvTWFrZWZpbGUKPiA+IEBAIC0wLDAgKzEsMiBA QAo+ID4gK3p5bnFtcC1kcHN1Yi1vYmpzICs9IHp5bnFtcF9kaXNwLm8genlucW1wX2Rwc3ViLm8g enlucW1wX2RwLm8KPiAKPiBUaGUgbW9kZXJuIHN5bnRheCBpcyB0byB1c2U6Cj4genlucW1wLWRw c3ViLXkgOj0genlucW1wX2Rpc3AubyB6eW5xbXBfZHBzdWIubyB6eW5xbXBfZHAubwo+IAo+IC0g Tm8gIis9IiBhcyB0aGUgY29kZSBkbyBub3QgYXBwZW5kIHRvIGFuIGV4aXN0aW5nIHZhcmlhYmxl Lgo+IC0gVXNlICIteSIsIHNvIGNvbmRpdGlvbmFscyBhcmUgYmV0dGVyIHN1cHBvcnRlZC4KPiAK PiBNYW55IGRyaXZlcnMgdXNlIGEgbmFtZSBzaW1pbGFyIHRvIHp5bnFtcF9kcnYgLSBmb3IgdGhl IGRyaXZlciBwYXJ0cy4KCkdvb2QgcG9pbnQsIEknbGwgZml4IHRoYXQuCgo+ID4gK29iai0kKENP TkZJR19EUk1fWllOUU1QX0RQU1VCKSArPSB6eW5xbXAtZHBzdWIubwo+ID4KPiA+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0veGxueC96eW5xbXBfZGlzcC5jIGIvZHJpdmVycy9ncHUvZHJt L3hsbngvenlucW1wX2Rpc3AuYwo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+IGluZGV4IDAw MDAwMDAwMDAwMC4uNDFjOTU0ODIyNWU3Cj4gPiAtLS0gL2Rldi9udWxsCj4gPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0veGxueC96eW5xbXBfZGlzcC5jCj4gPiBAQCAtMCwwICsxLDE3MDggQEAKPiA+ ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+ID4gKy8qCj4gPiArICogWnlu cU1QIERpc3BsYXkgQ29udHJvbGxlciBEcml2ZXIKPiA+ICsgKgo+ID4gKyAqIENvcHlyaWdodCAo QykgMjAxNyAtIDIwMTkgWGlsaW54LCBJbmMuCj4gPiArICoKPiA+ICsgKiBBdXRob3JzOgo+ID4g KyAqIC0gSHl1biBXb28gS3dvbiA8aHl1bi5rd29uQHhpbGlueC5jb20+Cj4gPiArICogLSBMYXVy ZW50IFBpbmNoYXJ0IDxsYXVyZW50LnBpbmNoYXJ0QGlkZWFzb25ib2FyZC5jb20+Cj4gPiArICov Cj4gPiArCj4gPiArI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljLmg+Cj4gPiArI2luY2x1ZGUgPGRy bS9kcm1fYXRvbWljX2hlbHBlci5oPgo+ID4gKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY191YXBp Lmg+Cj4gPiArI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgo+ID4gKyNpbmNsdWRlIDxkcm0vZHJt X2RldmljZS5oPgo+ID4gKyNpbmNsdWRlIDxkcm0vZHJtX2ZiX2NtYV9oZWxwZXIuaD4KPiA+ICsj aW5jbHVkZSA8ZHJtL2RybV9mb3VyY2MuaD4KPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9mcmFtZWJ1 ZmZlci5oPgo+ID4gKyNpbmNsdWRlIDxkcm0vZHJtX3BsYW5lLmg+Cj4gPiArI2luY2x1ZGUgPGRy bS9kcm1fcGxhbmVfaGVscGVyLmg+Cj4gPiArI2luY2x1ZGUgPGRybS9kcm1fdmJsYW5rLmg+Cj4g PiArCj4gPiArI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9kZWxh eS5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgo+ID4gKyNpbmNsdWRlIDxs aW51eC9kbWFlbmdpbmUuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gPiArI2lu Y2x1ZGUgPGxpbnV4L29mLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L29mX2RtYS5oPgo+ID4gKyNp bmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvcG1f cnVudGltZS5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgo+ID4gKwo+ID4gKyNp bmNsdWRlICJ6eW5xbXBfZGlzcC5oIgo+ID4gKyNpbmNsdWRlICJ6eW5xbXBfZGlzcF9yZWdzLmgi Cj4gPiArI2luY2x1ZGUgInp5bnFtcF9kcC5oIgo+ID4gKyNpbmNsdWRlICJ6eW5xbXBfZHBzdWIu aCIKPiA+ICsKPiA+ICsvKgo+ID4gKyAqIE92ZXJ2aWV3Cj4gPiArICogLS0tLS0tLS0KPiA+ICsg Kgo+ID4gKyAqIFRoZSBkaXNwbGF5IGNvbnRyb2xsZXIgcGFydCBvZiBaeW5xTVAgRFAgc3Vic3lz dGVtLCBtYWRlIG9mIHRoZSBBdWRpby9WaWRlbwo+ID4gKyAqIEJ1ZmZlciBNYW5hZ2VyLCB0aGUg VmlkZW8gUmVuZGVyaW5nIFBpcGVsaW5lIChibGVuZGVyKSBhbmQgdGhlIEF1ZGlvIE1peGVyLgo+ ID4gKyAqCj4gPiArICogICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCj4gPiArICogKy0tLS0tLS0tKyAgIHwg Ky0tLS0tLS0tLS0tLS0tLS0rICAgICArLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAg ICB8Cj4gPiArICogfCBEUERNQSAgfCAtLS0+fCAgICAgICAgICAgICAgICB8IC0tPiB8ICAgVmlk ZW8gICB8IFZpZGVvICstLS0tLS0tLS0tLS0tKyB8Cj4gPiArICogfCA0eCB2aWQgfCAgIHwgfCAg ICAgICAgICAgICAgICB8ICAgICB8IFJlbmRlcmluZyB8IC0rLS0+IHwgICAgICAgICAgICAgfCB8 ICAgKy0tLS0tLSsKPiA+ICsgKiB8IDJ4IGF1ZCB8ICAgfCB8ICBBdWRpby9WaWRlbyAgIHwgLS0+ IHwgUGlwZWxpbmUgIHwgIHwgICAgfCBEaXNwbGF5UG9ydCB8LS0tPiB8IFBIWTAgfAo+ID4gKyAq ICstLS0tLS0tLSsgICB8IHwgQnVmZmVyIE1hbmFnZXIgfCAgICAgKy0tLS0tLS0tLS0tKyAgfCAg ICB8ICAgU291cmNlICAgIHwgfCAgICstLS0tLS0rCj4gPiArICogICAgICAgICAgICAgIHwgfCAg ICBhbmQgU1RDICAgICB8ICAgICArLS0tLS0tLS0tLS0rICB8ICAgIHwgQ29udHJvbGxlciAgfCB8 ICAgKy0tLS0tLSsKPiA+ICsgKiBMaXZlIFZpZGVvIC0tLT58ICAgICAgICAgICAgICAgIHwgLS0+ IHwgICBBdWRpbyAgIHwgQXVkaW8gfCAgICAgICAgICAgICB8LS0tPiB8IFBIWTEgfAo+ID4gKyAq ICAgICAgICAgICAgICB8IHwgICAgICAgICAgICAgICAgfCAgICAgfCAgIE1peGVyICAgfCAtLSst PiB8ICAgICAgICAgICAgIHwgfCAgICstLS0tLS0rCj4gPiArICogTGl2ZSBBdWRpbyAtLS0+fCAg ICAgICAgICAgICAgICB8IC0tPiB8ICAgICAgICAgICB8ICB8fCAgICstLS0tLS0tLS0tLS0tKyB8 Cj4gPiArICogICAgICAgICAgICAgIHwgKy0tLS0tLS0tLS0tLS0tLS0rICAgICArLS0tLS0tLS0t LS0rICB8fCAgICAgICAgICAgICAgICAgICB8Cj4gPiArICogICAgICAgICAgICAgICstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18fC0tLS0tLS0tLS0tLS0tLS0tLS0rCj4g PiArICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB2dgo+ID4gKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgQmxlbmRlZCBWaWRlbyBhbmQKPiA+ICsgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIE1peGVkIEF1ZGlvIHRvIFBMCj4gPiArICoKPiA+ICsgKiBPbmx5 IG5vbi1saXZlIGlucHV0IGZyb20gdGhlIERQRE1BIGFuZCBvdXRwdXQgdG8gdGhlIERpc3BsYXlQ b3J0IFNvdXJjZQo+ID4gKyAqIENvbnRyb2xsZXIgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQuIElu dGVyZmFjZSB3aXRoIHRoZSBwcm9ncmFtbWFibGUgbG9naWMKPiA+ICsgKiBmb3IgbGl2ZSBzdHJl YW1zIGlzIG5vdCBpbXBsZW1lbnRlZC4KPiA+ICsgKgo+ID4gKyAqIFRoZSBkaXNwbGF5IGNvbnRy b2xsZXIgY29kZSBjcmVhdGVzIHBsYW5lcyBmb3IgdGhlIERQRE1BIHZpZGVvIGFuZCBncmFwaGlj cwo+ID4gKyAqIGxheWVycywgYW5kIGEgQ1JUQyBmb3IgdGhlIFZpZGVvIFJlbmRlcmluZyBQaXBl bGluZS4KPiA+ICsgKgo+ID4gKyAqIGludGVyZmFjZSBpbnRvIHRob3NlIDMgYmxvY2tzLiBJbiBo aWdoIGxldmVsLCB0aGUgZHJpdmVyIGlzIGxheWVyZWQKPiA+ICsgKiBpbiB0aGUgZm9sbG93aW5n IHdheToKPgo+IElzIHNvbWV0aGluZyBtaXNzaW5nIGJlZm9yZSAiaW50ZXJmYWNlIj8gU2VudGVu Y2Ugc2VlbXMgaW5jb21wbGV0ZS4KClllcywgaXQncyBhIGxlZnRvdmVyLiBJJ2xsIHJlbW92ZSB0 aGF0IHBhcnQuCgo+IE5pY2Ugb3ZlcnZpZXchCgpUaGFua3MuIEkgbGlrZSBhc2NpaSBhcnQgOi0p Cgo+ID4gKyAqCj4gPiArICogenlucW1wX2Rpc3BfY3J0YyAmIHp5bnFtcF9kaXNwX3BsYW5lCj4g PiArICogfC0+enlucW1wX2Rpc3AKPiA+ICsgKgl8LT56eW5xbXBfZGlzcF9hdWQKPiA+ICsgKgl8 LT56eW5xbXBfZGlzcF9ibGVuZAo+ID4gKyAqCXwtPnp5bnFtcF9kaXNwX2F2YnVmCj4gPiArICov Cj4gPiArCj4gPiArI2RlZmluZSBaWU5RTVBfRElTUF9BVl9CVUZfTlVNX1ZJRF9HRlhfQlVGRkVS UwkJNAo+ID4gKyNkZWZpbmUgWllOUU1QX0RJU1BfQVZfQlVGX05VTV9CVUZGRVJTCQkJNgo+ID4g Kwo+ID4gKyNkZWZpbmUgWllOUU1QX0RJU1BfTlVNX0xBWUVSUwkJCQkyCj4gPiArI2RlZmluZSBa WU5RTVBfRElTUF9NQVhfTlVNX1NVQl9QTEFORVMJCQkzCj4gPiArCj4gPiArLyoqCj4gPiArICog c3RydWN0IHp5bnFtcF9kaXNwX2Zvcm1hdCAtIERpc3BsYXkgc3Vic3lzdGVtIGZvcm1hdCBpbmZv cm1hdGlvbgo+ID4gKyAqIEBkcm1fZm10OiBEUk0gZm9ybWF0ICg0Q0MpCj4gPiArICogQGJ1Zl9m bXQ6IEFWIGJ1ZmZlciBmb3JtYXQKPiA+ICsgKiBAYnVzX2ZtdDogTWVkaWEgYnVzIGZvcm1hdHMg KGxpdmUgZm9ybWF0cykKPiA+ICsgKiBAc3dhcDogRmxhZyB0byBzd2FwIFIgJiBCIGZvciBSR0Ig Zm9ybWF0cywgYW5kIFUgJiBWIGZvciBZVVYgZm9ybWF0cwo+ID4gKyAqIEBzZjogU2NhbGluZyBm YWN0b3JzIGZvciBjb2xvciBjb21wb25lbnRzCj4gPiArICovCj4gPiArc3RydWN0IHp5bnFtcF9k aXNwX2Zvcm1hdCB7Cj4gPiArCXUzMiBkcm1fZm10Owo+ID4gKwl1MzIgYnVmX2ZtdDsKPiA+ICsJ dTMyIGJ1c19mbXQ7Cj4gPiArCWJvb2wgc3dhcDsKPiA+ICsJY29uc3QgdTMyICpzZjsKPiA+ICt9 Owo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIGVudW0genlucW1wX2Rpc3BfaWQgLSBMYXllciBpZGVu dGlmaWVyCj4gPiArICogQFpZTlFNUF9ESVNQX0xBWUVSX1ZJRDogVmlkZW8gbGF5ZXIKPiA+ICsg KiBAWllOUU1QX0RJU1BfTEFZRVJfR0ZYOiBHcmFwaGljcyBsYXllcgo+ID4gKyAqLwo+ID4gK2Vu dW0genlucW1wX2Rpc3BfbGF5ZXJfaWQgewo+ID4gKwlaWU5RTVBfRElTUF9MQVlFUl9WSUQsCj4g PiArCVpZTlFNUF9ESVNQX0xBWUVSX0dGWAo+ID4gK307Cj4gPiArCj4gPiArLyoqCj4gPiArICog ZW51bSB6eW5xbXBfZGlzcF9sYXllcl9tb2RlIC0gTGF5ZXIgbW9kZQo+ID4gKyAqIEBaWU5RTVBf RElTUF9MQVlFUl9OT05MSVZFOiBub24tbGl2ZSAobWVtb3J5KSBtb2RlCj4gPiArICogQFpZTlFN UF9ESVNQX0xBWUVSX0xJVkU6IGxpdmUgKHN0cmVhbSkgbW9kZQo+ID4gKyAqLwo+ID4gK2VudW0g enlucW1wX2Rpc3BfbGF5ZXJfbW9kZSB7Cj4gPiArCVpZTlFNUF9ESVNQX0xBWUVSX05PTkxJVkUs Cj4gPiArCVpZTlFNUF9ESVNQX0xBWUVSX0xJVkUKPiA+ICt9Owo+ID4gKwo+ID4gKy8qKgo+ID4g KyAqIHN0cnVjdCB6eW5xbXBfZGlzcF9sYXllcl9kbWEgLSBETUEgY2hhbm5lbCBmb3Igb25lIGRh dGEgcGxhbmUgb2YgYSBsYXllcgo+ID4gKyAqIEBjaGFuOiBETUEgY2hhbm5lbAo+ID4gKyAqIEB4 dDogSW50ZXJsZWF2ZWQgRE1BIGRlc2NyaXB0b3IgdGVtcGxhdGUKPiA+ICsgKiBAc2dsOiBEYXRh IGNodW5rIGZvciBkbWFfaW50ZXJsZWF2ZWRfdGVtcGxhdGUKPiA+ICsgKi8KPiA+ICtzdHJ1Y3Qg enlucW1wX2Rpc3BfbGF5ZXJfZG1hIHsKPiA+ICsJc3RydWN0IGRtYV9jaGFuICpjaGFuOwo+ID4g KwlzdHJ1Y3QgZG1hX2ludGVybGVhdmVkX3RlbXBsYXRlIHh0Owo+ID4gKwlzdHJ1Y3QgZGF0YV9j aHVuayBzZ2w7Cj4gPiArfTsKPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBzdHJ1Y3QgenlucW1wX2Rp c3BfbGF5ZXJfaW5mbyAtIFN0YXRpYyBsYXllciBpbmZvcm1hdGlvbgo+ID4gKyAqIEBmb3JtYXRz OiBBcnJheSBvZiBzdXBwb3J0ZWQgZm9ybWF0cwo+ID4gKyAqIEBudW1fZm9ybWF0czogTnVtYmVy IG9mIGZvcm1hdHMgaW4gQGZvcm1hdHMgYXJyYXkKPiA+ICsgKiBAbnVtX2NoYW5uZWxzOiBOdW1i ZXIgb2YgRE1BIGNoYW5uZWxzCj4gPiArICovCj4gPiArc3RydWN0IHp5bnFtcF9kaXNwX2xheWVy X2luZm8gewo+ID4gKwljb25zdCBzdHJ1Y3QgenlucW1wX2Rpc3BfZm9ybWF0ICpmb3JtYXRzOwo+ ID4gKwl1bnNpZ25lZCBpbnQgbnVtX2Zvcm1hdHM7Cj4gPiArCXVuc2lnbmVkIGludCBudW1fY2hh bm5lbHM7Cj4gPiArfTsKPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBzdHJ1Y3QgenlucW1wX2Rpc3Bf bGF5ZXIgLSBEaXNwbGF5IGxheWVyIChEUk0gcGxhbmUpCj4gPiArICogQHBsYW5lOiBEUk0gcGxh bmUKPiA+ICsgKiBAaWQ6IExheWVyIElECj4gPiArICogQGRpc3A6IEJhY2sgcG9pbnRlciB0byBz dHJ1Y3QgenlucW1wX2Rpc3AKPiA+ICsgKiBAaW5mbzogU3RhdGljIGxheWVyIGluZm9ybWF0aW9u Cj4gPiArICogQGRtYXM6IERNQSBjaGFubmVscwo+ID4gKyAqIEBkaXNwX2ZtdDogQ3VycmVudCBm b3JtYXQgaW5mb3JtYXRpb24KPiA+ICsgKiBAZHJtX2ZtdDogQ3VycmVudCBEUk0gZm9ybWF0IGlu Zm9ybWF0aW9uCj4gPiArICogQG1vZGU6IEN1cnJlbnQgb3BlcmF0aW9uIG1vZGUKPiA+ICsgKi8K PiA+ICtzdHJ1Y3QgenlucW1wX2Rpc3BfbGF5ZXIgewo+ID4gKwlzdHJ1Y3QgZHJtX3BsYW5lIHBs YW5lOwo+ID4gKwllbnVtIHp5bnFtcF9kaXNwX2xheWVyX2lkIGlkOwo+ID4gKwlzdHJ1Y3Qgenlu cW1wX2Rpc3AgKmRpc3A7Cj4gPiArCWNvbnN0IHN0cnVjdCB6eW5xbXBfZGlzcF9sYXllcl9pbmZv ICppbmZvOwo+ID4gKwo+ID4gKwlzdHJ1Y3QgenlucW1wX2Rpc3BfbGF5ZXJfZG1hIGRtYXNbWllO UU1QX0RJU1BfTUFYX05VTV9TVUJfUExBTkVTXTsKPiA+ICsKPiA+ICsJY29uc3Qgc3RydWN0IHp5 bnFtcF9kaXNwX2Zvcm1hdCAqZGlzcF9mbXQ7Cj4gPiArCWNvbnN0IHN0cnVjdCBkcm1fZm9ybWF0 X2luZm8gKmRybV9mbXQ7Cj4gPiArCWVudW0genlucW1wX2Rpc3BfbGF5ZXJfbW9kZSBtb2RlOwo+ ID4gK307Cj4gPiArCj4gPiArLyoqCj4gPiArICogc3RydWN0IHp5bnFtcF9kaXNwX2JsZW5kIC0g QmxlbmRlcgo+ID4gKyAqIEBiYXNlOiBSZWdpc3RlcnMgSS9PIGJhc2UgYWRkcmVzcwo+ID4gKyAq Lwo+ID4gK3N0cnVjdCB6eW5xbXBfZGlzcF9ibGVuZCB7Cj4gPiArCXZvaWQgX19pb21lbSAqYmFz ZTsKPiA+ICt9Owo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIHN0cnVjdCB6eW5xbXBfZGlzcF9hdmJ1 ZiAtIEF1ZGlvL3ZpZGVvIGJ1ZmZlciBtYW5hZ2VyCj4gPiArICogQGJhc2U6IFJlZ2lzdGVycyBJ L08gYmFzZSBhZGRyZXNzCj4gPiArICovCj4gPiArc3RydWN0IHp5bnFtcF9kaXNwX2F2YnVmIHsK PiA+ICsJdm9pZCBfX2lvbWVtICpiYXNlOwo+ID4gK307Cj4gPiArCj4gPiArLyoqCj4gPiArICog c3RydWN0IHp5bnFtcF9kaXNwX2F1ZGlvIC0gQXVkaW8gbWl4ZXIKPiA+ICsgKiBAYmFzZTogUmVn aXN0ZXJzIEkvTyBiYXNlIGFkZHJlc3MKPiA+ICsgKiBAX3BzX2NsazogQXVkaW8gY2xvY2sgZnJv bSBQUwo+ID4gKyAqIEBfcGxfY2xrOiBBdWRpbyBjbG9jayBmcm9tIFBMCj4gPiArICogQGNsazog QXVkaW8gY2xvY2sKPiA+ICsgKi8KPiA+ICtzdHJ1Y3QgenlucW1wX2Rpc3BfYXVkaW8gewo+ID4g Kwl2b2lkIF9faW9tZW0gKmJhc2U7Cj4gPiArCXN0cnVjdCBjbGsgKl9wc19jbGs7Cj4gPiArCXN0 cnVjdCBjbGsgKl9wbF9jbGs7Cj4gPiArCXN0cnVjdCBjbGsgKmNsazsKPiA+ICt9Owo+Cj4gTml0 cGljayAtIHdoeSBzdGFydCBuYW1lcyB3aXRoICdfJz8KPiAKPiAgICAgZHBfYXVkX2Nsawo+ICAg ICBkcF9saXZlX2F1ZGlvX2FjbGsKPiAKPiBoYWQgYmVlbiBtdWNoIG1vcmUgZGVzY3JpcHRpdmUg LSB0aGlzIGlzIHRoZSBuYW1lIGluIHRoZSBiaW5kaW5nIGFueXdheS4KCkl0IGNvbWVzIGZyb20g dGhlIG9yaWdpbmFsIHN1Ym1pc3Npb24gaWYgSSByZWNhbGwgY29ycmVjdGx5LiBJJ2xsIGNoYW5n ZQp0aG9zZSB0byBwc19jbGsgYW5kIHBsX2NsaywgdG8ga2VlcCB0aGUgbmFtZXMgc2hvcnQgYW5k IHN5bW1ldHJpY2FsIChQUwpzdGFuZHMgZm9yIFByb2Nlc3NpbmcgU3lzdGVtLCB0aGUgbm9uLUZQ R0EgcGFydCBvZiB0aGUgU29DLCB3aGlsZSBQTApzdGFuZHMgZm9yIFByb2dyYW1tYWJsZSBMb2dp YykuCgo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIHN0cnVjdCB6eW5xbXBfZGlzcCAtIERpc3BsYXkg Y29udHJvbGxlcgo+ID4gKyAqIEBkZXY6IERldmljZSBzdHJ1Y3R1cmUKPiA+ICsgKiBAZHJtOiBE Uk0gY29yZQo+ID4gKyAqIEBkcHN1YjogRGlzcGxheSBzdWJzeXN0ZW0KPiA+ICsgKiBAY3J0Yzog RFJNIENSVEMKPiA+ICsgKiBAYmxlbmQ6IEJsZW5kZXIgKHZpZGVvIHJlbmRlcmluZyBwaXBlbGlu ZSkKPiA+ICsgKiBAYXZidWY6IEF1ZGlvL3ZpZGVvIGJ1ZmZlciBtYW5hZ2VyCj4gPiArICogQGF1 ZGlvOiBBdWRpbyBtaXhlcgo+ID4gKyAqIEBsYXllcnM6IExheWVycyAocGxhbmVzKQo+ID4gKyAq IEBldmVudDogUGVuZGluZyB2YmxhbmsgZXZlbnQgcmVxdWVzdAo+ID4gKyAqIEBfcHNfcGNsazog UGl4ZWwgY2xvY2sgZnJvbSBQUwo+ID4gKyAqIEBfcGxfcGNsazogUGl4ZWwgY2xvY2sgZnJvbSBQ TAo+ID4gKyAqIEBwY2xrOiBQaXhlbCBjbG9jawo+ID4gKyAqLwo+ID4gK3N0cnVjdCB6eW5xbXBf ZGlzcCB7Cj4gPiArCXN0cnVjdCBkZXZpY2UgKmRldjsKPiA+ICsJc3RydWN0IGRybV9kZXZpY2Ug KmRybTsKPgo+IE1vZGVybiBkcm0gZHJpdmVycyBlbWJlZCBkcm1fZGV2aWNlLgo+IEJ1dCB0aGF0 IGNvbW1lbnQgSSB0aGluayBiZWxvbmdzIHRvIHp5bnFtcF9kcHN1Yi4KClllcy4gSSdsbCBmaXgg aXQuCgo+ID4gKwlzdHJ1Y3QgenlucW1wX2Rwc3ViICpkcHN1YjsKPiA+ICsKPiA+ICsJc3RydWN0 IGRybV9jcnRjIGNydGM7Cj4gPiArCj4gPiArCXN0cnVjdCB6eW5xbXBfZGlzcF9ibGVuZCBibGVu ZDsKPiA+ICsJc3RydWN0IHp5bnFtcF9kaXNwX2F2YnVmIGF2YnVmOwo+ID4gKwlzdHJ1Y3Qgenlu cW1wX2Rpc3BfYXVkaW8gYXVkaW87Cj4gPiArCj4gPiArCXN0cnVjdCB6eW5xbXBfZGlzcF9sYXll ciBsYXllcnNbWllOUU1QX0RJU1BfTlVNX0xBWUVSU107Cj4gPiArCj4gPiArCXN0cnVjdCBkcm1f cGVuZGluZ192YmxhbmtfZXZlbnQgKmV2ZW50Owo+ID4gKwo+ID4gKwkvKiBEb24ndCBvcGVyYXRl IGRpcmVjdGx5IG9uIF9wc18gKi8KPiA+ICsJc3RydWN0IGNsayAqX3BzX3BjbGs7Cj4gPiArCXN0 cnVjdCBjbGsgKl9wbF9wY2xrOwo+ID4gKwlzdHJ1Y3QgY2xrICpwY2xrOwo+ID4gK307Cj4KPiBT YW1lIHJhbnQgb24gbmFtZXMgb2YgY2xrIGhlcmUuCj4gCj4genlucW1wX2Rpc3AuX3BzX3BjbGsg YW5kIHp5bnFtcF9kaXNwX2F1ZGlvLl9wc19jbGsgYXJlIG9ubHkgdXNlZCBhcwo+IGZsYWdzIGlu IHRoZSBjb2RlLgo+IE1ha2UgdGhpcyBleHBsaWNpdCB3aXRoIHR3byBmbGFsZ3MgbGlrZSB0aGlz Ogo+ICAgICB6eW5xbXBfZGlzcF9hdWRpby5fcHNfY2xrID0+IGJvb2wgdmlkZW9fZnJvbV9wczsK PiAgICAgenlucW1wX2Rpc3AuX3BzX3BjbGsgPT4gYm9vbCBhdWRpb19mcm9tX3BzOwo+IAo+IEp1 c3QgYW4gaWRlYS4KCkdvb2QgaWRlYS4gSSdsbCBkbyB0aGF0LgoKPiA+ICsKPiA+ICsvKiAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQo+ID4gKyAqIEF1ZGlvL1ZpZGVvIEJ1ZmZlciBNYW5hZ2VyCj4gPiAr ICovCj4gPiArCj4gPiArc3RhdGljIGNvbnN0IHUzMiBzY2FsaW5nX2ZhY3RvcnNfNDQ0W10gPSB7 Cj4gPiArCVpZTlFNUF9ESVNQX0FWX0JVRl80QklUX1NGLAo+ID4gKwlaWU5RTVBfRElTUF9BVl9C VUZfNEJJVF9TRiwKPiA+ICsJWllOUU1QX0RJU1BfQVZfQlVGXzRCSVRfU0YsCj4gPiArfTsKPiA+ ICsKPiAuLi4KPiA+ICsKPiA+ICsvKiBMaXN0IG9mIHZpZGVvIGxheWVyIGZvcm1hdHMgKi8KPiA+ ICtzdGF0aWMgY29uc3Qgc3RydWN0IHp5bnFtcF9kaXNwX2Zvcm1hdCBhdmJ1Zl92aWRfZm10c1td ID0gewo+ID4gKwl7Cj4gPiArCQkuZHJtX2ZtdAk9IERSTV9GT1JNQVRfVllVWSwKPiA+ICsJCS5i dWZfZm10CT0gWllOUU1QX0RJU1BfQVZfQlVGX0ZNVF9OTF9WSURfVllVWSwKPiA+ICsJCS5zd2Fw CQk9IHRydWUsCj4gPiArCQkuc2YJCT0gc2NhbGluZ19mYWN0b3JzXzg4OCwKPiAuLi4KPiA+ICt9 Owo+ID4gKwo+ID4gKy8qIExpc3Qgb2YgZ3JhcGhpY3MgbGF5ZXIgZm9ybWF0cyAqLwo+ID4gK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgenlucW1wX2Rpc3BfZm9ybWF0IGF2YnVmX2dmeF9mbXRzW10gPSB7 Cj4gPiArCXsKPiA+ICsJCS5kcm1fZm10CT0gRFJNX0ZPUk1BVF9BQkdSODg4OCwKPiA+ICsJCS5i dWZfZm10CT0gWllOUU1QX0RJU1BfQVZfQlVGX0ZNVF9OTF9HRlhfUkdCQTg4ODgsCj4gPiArCQku c3dhcAkJPSBmYWxzZSwKPiA+ICsJCS5zZgkJPSBzY2FsaW5nX2ZhY3RvcnNfODg4LAo+IC4uLgo+ ID4gK307Cj4gPiArCj4gPiArc3RhdGljIHUzMiB6eW5xbXBfZGlzcF9hdmJ1Zl9yZWFkKHN0cnVj dCB6eW5xbXBfZGlzcF9hdmJ1ZiAqYXZidWYsIGludCByZWcpCj4gPiArewo+ID4gKwlyZXR1cm4g cmVhZGwoYXZidWYtPmJhc2UgKyByZWcpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCB6 eW5xbXBfZGlzcF9hdmJ1Zl93cml0ZShzdHJ1Y3QgenlucW1wX2Rpc3BfYXZidWYgKmF2YnVmLAo+ ID4gKwkJCQkgICAgaW50IHJlZywgdTMyIHZhbCkKPiA+ICt7Cj4gPiArCXdyaXRlbCh2YWwsIGF2 YnVmLT5iYXNlICsgcmVnKTsKPiA+ICt9Cj4gPiArCj4gPiArLyoqCj4gPiArICogenlucW1wX2Rp c3BfYXZidWZfc2V0X2Zvcm1hdCAtIFNldCB0aGUgaW5wdXQgZm9ybWF0IGZvciBhIGxheWVyCj4g PiArICogQGF2YnVmOiBBdWRpby92aWRlbyBidWZmZXIgbWFuYWdlcgo+ID4gKyAqIEBsYXllcjog VGhlIGxheWVyIElECj4gPiArICogQGZtdDogVGhlIGZvcm1hdCBpbmZvcm1hdGlvbgo+ID4gKyAq Cj4gPiArICogU2V0IHRoZSB2aWRlbyBidWZmZXIgbWFuYWdlciBmb3JtYXQgZm9yIEBsYXllciB0 byBAZm10Lgo+ID4gKyAqLwo+ID4gK3N0YXRpYyB2b2lkIHp5bnFtcF9kaXNwX2F2YnVmX3NldF9m b3JtYXQoc3RydWN0IHp5bnFtcF9kaXNwX2F2YnVmICphdmJ1ZiwKPiA+ICsJCQkJCSBlbnVtIHp5 bnFtcF9kaXNwX2xheWVyX2lkIGxheWVyLAo+ID4gKwkJCQkJIGNvbnN0IHN0cnVjdCB6eW5xbXBf ZGlzcF9mb3JtYXQgKmZtdCkKPiA+ICt7Cj4gPiArCXVuc2lnbmVkIGludCBpOwo+ID4gKwl1MzIg dmFsOwo+ID4gKwo+ID4gKwl2YWwgPSB6eW5xbXBfZGlzcF9hdmJ1Zl9yZWFkKGF2YnVmLCBaWU5R TVBfRElTUF9BVl9CVUZfRk1UKTsKPiA+ICsJdmFsICY9IGxheWVyID09IFpZTlFNUF9ESVNQX0xB WUVSX1ZJRAo+ID4gKwkgICAgPyB+WllOUU1QX0RJU1BfQVZfQlVGX0ZNVF9OTF9WSURfTUFTSwo+ ID4gKwkgICAgOiB+WllOUU1QX0RJU1BfQVZfQlVGX0ZNVF9OTF9HRlhfTUFTSzsKPiA+ICsJdmFs IHw9IGZtdC0+YnVmX2ZtdDsKPiA+ICsJenlucW1wX2Rpc3BfYXZidWZfd3JpdGUoYXZidWYsIFpZ TlFNUF9ESVNQX0FWX0JVRl9GTVQsIHZhbCk7Cj4gPiArCj4gPiArCWZvciAoaSA9IDA7IGkgPCBa WU5RTVBfRElTUF9BVl9CVUZfTlVNX1NGOyBpKyspIHsKPiA+ICsJCXVuc2lnbmVkIGludCByZWcg PSBsYXllciA9PSBaWU5RTVBfRElTUF9MQVlFUl9WSUQKPiA+ICsJCQkJID8gWllOUU1QX0RJU1Bf QVZfQlVGX1ZJRF9DT01QX1NGKGkpCj4gPiArCQkJCSA6IFpZTlFNUF9ESVNQX0FWX0JVRl9HRlhf Q09NUF9TRihpKTsKPiA+ICsKPiA+ICsJCXp5bnFtcF9kaXNwX2F2YnVmX3dyaXRlKGF2YnVmLCBy ZWcsIGZtdC0+c2ZbaV0pOwo+ID4gKwl9Cj4gPiArfQo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIHp5 bnFtcF9kaXNwX2F2YnVmX3NldF9jbG9ja3Nfc291cmNlcyAtIFNldCB0aGUgY2xvY2tzIHNvdXJj ZXMKPiA+ICsgKiBAYXZidWY6IEF1ZGlvL3ZpZGVvIGJ1ZmZlciBtYW5hZ2VyCj4gPiArICogQHZp ZGVvX2Zyb21fcHM6IFRydWUgaWYgdGhlIHZpZGVvIGNsb2NrIG9yaWdpbmF0ZXMgZnJvbSB0aGUg UFMKPiA+ICsgKiBAYXVkaW9fZnJvbV9wczogVHJ1ZSBpZiB0aGUgYXVkaW8gY2xvY2sgb3JpZ2lu YXRlcyBmcm9tIHRoZSBQUwo+ID4gKyAqIEB0aW1pbmdzX2ludGVybmFsOiBUcnVlIGlmIHZpZGVv IHRpbWluZ3MgYXJlIGdlbmVyYXRlZCBpbnRlcm5hbGx5Cj4gPiArICoKPiA+ICsgKiBTZXQgdGhl IHNvdXJjZSBmb3IgdGhlIHZpZGVvIGFuZCBhdWRpbyBjbG9ja3MsIGFzIHdlbGwgYXMgZm9yIHRo ZSB2aWRlbwo+ID4gKyAqIHRpbWluZ3MuIENsb2NrcyBjYW4gb3JpZ2luYXRlIGZyb20gdGhlIFBT IG9yIFBMLCBhbmQgdGltaW5ncyBjYW4gYmUKPiA+ICsgKiBnZW5lcmF0ZWQgaW50ZXJuYWxseSBv ciBleHRlcm5hbGx5Lgo+ID4gKyAqLwo+ID4gK3N0YXRpYyB2b2lkCj4gPiArenlucW1wX2Rpc3Bf YXZidWZfc2V0X2Nsb2Nrc19zb3VyY2VzKHN0cnVjdCB6eW5xbXBfZGlzcF9hdmJ1ZiAqYXZidWYs Cj4gPiArCQkJCSAgICAgYm9vbCB2aWRlb19mcm9tX3BzLCBib29sIGF1ZGlvX2Zyb21fcHMsCj4g PiArCQkJCSAgICAgYm9vbCB0aW1pbmdzX2ludGVybmFsKQo+ID4gK3sKPiA+ICsJdTMyIHZhbCA9 IDA7Cj4gPiArCj4gPiArCWlmICh2aWRlb19mcm9tX3BzKQo+ID4gKwkJdmFsIHw9IFpZTlFNUF9E SVNQX0FWX0JVRl9DTEtfU1JDX1ZJRF9GUk9NX1BTOwo+ID4gKwlpZiAoYXVkaW9fZnJvbV9wcykK PiA+ICsJCXZhbCB8PSBaWU5RTVBfRElTUF9BVl9CVUZfQ0xLX1NSQ19BVURfRlJPTV9QUzsKPiA+ ICsJaWYgKHRpbWluZ3NfaW50ZXJuYWwpCj4gPiArCQl2YWwgfD0gWllOUU1QX0RJU1BfQVZfQlVG X0NMS19TUkNfVklEX0lOVEVSTkFMX1RJTUlORzsKPiA+ICsKPiA+ICsJenlucW1wX2Rpc3BfYXZi dWZfd3JpdGUoYXZidWYsIFpZTlFNUF9ESVNQX0FWX0JVRl9DTEtfU1JDLCB2YWwpOwo+ID4gK30K PiA+ICsKPiA+ICsvKioKPiA+ICsgKiB6eW5xbXBfZGlzcF9hdmJ1Zl9lbmFibGVfY2hhbm5lbHMg LSBFbmFibGUgYnVmZmVyIGNoYW5uZWxzCj4gPiArICogQGF2YnVmOiBBdWRpby92aWRlbyBidWZm ZXIgbWFuYWdlcgo+ID4gKyAqCj4gPiArICogRW5hYmxlIGFsbCAodmlkZW8gYW5kIGF1ZGlvKSBi dWZmZXIgY2hhbm5lbHMuCj4gPiArICovCj4gPiArc3RhdGljIHZvaWQgenlucW1wX2Rpc3BfYXZi dWZfZW5hYmxlX2NoYW5uZWxzKHN0cnVjdCB6eW5xbXBfZGlzcF9hdmJ1ZiAqYXZidWYpCj4gPiAr ewo+ID4gKwl1bnNpZ25lZCBpbnQgaTsKPiA+ICsJdTMyIHZhbDsKPiA+ICsKPiA+ICsJdmFsID0g WllOUU1QX0RJU1BfQVZfQlVGX0NIQlVGX0VOIHwKPiA+ICsJICAgICAgKFpZTlFNUF9ESVNQX0FW X0JVRl9DSEJVRl9CVVJTVF9MRU5fTUFYIDw8Cj4gPiArCSAgICAgICBaWU5RTVBfRElTUF9BVl9C VUZfQ0hCVUZfQlVSU1RfTEVOX1NISUZUKTsKPiA+ICsKPiA+ICsJZm9yIChpID0gMDsgaSA8IFpZ TlFNUF9ESVNQX0FWX0JVRl9OVU1fVklEX0dGWF9CVUZGRVJTOyBpKyspCj4gPiArCQl6eW5xbXBf ZGlzcF9hdmJ1Zl93cml0ZShhdmJ1ZiwgWllOUU1QX0RJU1BfQVZfQlVGX0NIQlVGKGkpLAo+ID4g KwkJCQkJdmFsKTsKPiA+ICsKPiA+ICsJdmFsID0gWllOUU1QX0RJU1BfQVZfQlVGX0NIQlVGX0VO IHwKPiA+ICsJICAgICAgKFpZTlFNUF9ESVNQX0FWX0JVRl9DSEJVRl9CVVJTVF9MRU5fQVVEX01B WCA8PAo+ID4gKwkgICAgICAgWllOUU1QX0RJU1BfQVZfQlVGX0NIQlVGX0JVUlNUX0xFTl9TSElG VCk7Cj4gPiArCj4gPiArCWZvciAoOyBpIDwgWllOUU1QX0RJU1BfQVZfQlVGX05VTV9CVUZGRVJT OyBpKyspCj4gPiArCQl6eW5xbXBfZGlzcF9hdmJ1Zl93cml0ZShhdmJ1ZiwgWllOUU1QX0RJU1Bf QVZfQlVGX0NIQlVGKGkpLAo+ID4gKwkJCQkJdmFsKTsKPiA+ICt9Cj4gPiArCj4gPiArLyoqCj4g PiArICogenlucW1wX2Rpc3BfYXZidWZfZGlzYWJsZV9jaGFubmVscyAtIERpc2FibGUgYnVmZmVy IGNoYW5uZWxzCj4gPiArICogQGF2YnVmOiBBdWRpby92aWRlbyBidWZmZXIgbWFuYWdlcgo+ID4g KyAqCj4gPiArICogRGlzYWJsZSBhbGwgKHZpZGVvIGFuZCBhdWRpbykgYnVmZmVyIGNoYW5uZWxz Lgo+ID4gKyAqLwo+ID4gK3N0YXRpYyB2b2lkIHp5bnFtcF9kaXNwX2F2YnVmX2Rpc2FibGVfY2hh bm5lbHMoc3RydWN0IHp5bnFtcF9kaXNwX2F2YnVmICphdmJ1ZikKPiA+ICt7Cj4gPiArCXVuc2ln bmVkIGludCBpOwo+ID4gKwo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgWllOUU1QX0RJU1BfQVZfQlVG X05VTV9CVUZGRVJTOyBpKyspCj4gPiArCQl6eW5xbXBfZGlzcF9hdmJ1Zl93cml0ZShhdmJ1Ziwg WllOUU1QX0RJU1BfQVZfQlVGX0NIQlVGKGkpLAo+ID4gKwkJCQkJWllOUU1QX0RJU1BfQVZfQlVG X0NIQlVGX0ZMVVNIKTsKPiA+ICt9Cj4gPiArCj4gPiArLyoqCj4gPiArICogenlucW1wX2Rpc3Bf YXZidWZfZW5hYmxlX2F1ZGlvIC0gRW5hYmxlIGF1ZGlvCj4gPiArICogQGF2YnVmOiBBdWRpby92 aWRlbyBidWZmZXIgbWFuYWdlcgo+ID4gKyAqCj4gPiArICogRW5hYmxlIGFsbCBhdWRpbyBidWZm ZXJzIHdpdGggYSBub24tbGl2ZSAobWVtb3J5KSBzb3VyY2UuCj4gPiArICovCj4gPiArc3RhdGlj IHZvaWQgenlucW1wX2Rpc3BfYXZidWZfZW5hYmxlX2F1ZGlvKHN0cnVjdCB6eW5xbXBfZGlzcF9h dmJ1ZiAqYXZidWYpCj4gPiArewo+ID4gKwl1MzIgdmFsOwo+ID4gKwo+ID4gKwl2YWwgPSB6eW5x bXBfZGlzcF9hdmJ1Zl9yZWFkKGF2YnVmLCBaWU5RTVBfRElTUF9BVl9CVUZfT1VUUFVUKTsKPiA+ ICsJdmFsICY9IH5aWU5RTVBfRElTUF9BVl9CVUZfT1VUUFVUX0FVRDFfTUFTSzsKPiA+ICsJdmFs IHw9IFpZTlFNUF9ESVNQX0FWX0JVRl9PVVRQVVRfQVVEMV9NRU07Cj4gPiArCXZhbCB8PSBaWU5R TVBfRElTUF9BVl9CVUZfT1VUUFVUX0FVRDJfRU47Cj4gPiArCXp5bnFtcF9kaXNwX2F2YnVmX3dy aXRlKGF2YnVmLCBaWU5RTVBfRElTUF9BVl9CVUZfT1VUUFVULCB2YWwpOwo+ID4gK30KPiA+ICsK PiA+ICsvKioKPiA+ICsgKiB6eW5xbXBfZGlzcF9hdmJ1Zl9kaXNhYmxlX2F1ZGlvIC0gRGlzYWJs ZSBhdWRpbwo+ID4gKyAqIEBhdmJ1ZjogQXVkaW8vdmlkZW8gYnVmZmVyIG1hbmFnZXIKPiA+ICsg Kgo+ID4gKyAqIERpc2FibGUgYWxsIGF1ZGlvIGJ1ZmZlcnMuCj4gPiArICovCj4gPiArc3RhdGlj IHZvaWQgenlucW1wX2Rpc3BfYXZidWZfZGlzYWJsZV9hdWRpbyhzdHJ1Y3QgenlucW1wX2Rpc3Bf YXZidWYgKmF2YnVmKQo+ID4gK3sKPiA+ICsJdTMyIHZhbDsKPiA+ICsKPiA+ICsJdmFsID0genlu cW1wX2Rpc3BfYXZidWZfcmVhZChhdmJ1ZiwgWllOUU1QX0RJU1BfQVZfQlVGX09VVFBVVCk7Cj4g PiArCXZhbCAmPSB+WllOUU1QX0RJU1BfQVZfQlVGX09VVFBVVF9BVUQxX01BU0s7Cj4gPiArCXZh bCB8PSBaWU5RTVBfRElTUF9BVl9CVUZfT1VUUFVUX0FVRDFfRElTQUJMRTsKPiA+ICsJdmFsICY9 IH5aWU5RTVBfRElTUF9BVl9CVUZfT1VUUFVUX0FVRDJfRU47Cj4gPiArCXp5bnFtcF9kaXNwX2F2 YnVmX3dyaXRlKGF2YnVmLCBaWU5RTVBfRElTUF9BVl9CVUZfT1VUUFVULCB2YWwpOwo+ID4gK30K PiA+ICsKPiA+ICsvKioKPiA+ICsgKiB6eW5xbXBfZGlzcF9hdmJ1Zl9lbmFibGVfdmlkZW8gLSBF bmFibGUgYSB2aWRlbyBsYXllcgo+ID4gKyAqIEBhdmJ1ZjogQXVkaW8vdmlkZW8gYnVmZmVyIG1h bmFnZXIKPiA+ICsgKiBAbGF5ZXI6IFRoZSBsYXllciBJRAo+ID4gKyAqIEBtb2RlOiBPcGVyYXRp bmcgbW9kZSBvZiBsYXllcgo+ID4gKyAqCj4gPiArICogRW5hYmxlIHRoZSB2aWRlby9ncmFwaGlj cyBidWZmZXIgZm9yIEBsYXllci4KPiA+ICsgKi8KPiA+ICtzdGF0aWMgdm9pZCB6eW5xbXBfZGlz cF9hdmJ1Zl9lbmFibGVfdmlkZW8oc3RydWN0IHp5bnFtcF9kaXNwX2F2YnVmICphdmJ1ZiwKPiA+ ICsJCQkJCSAgIGVudW0genlucW1wX2Rpc3BfbGF5ZXJfaWQgbGF5ZXIsCj4gPiArCQkJCQkgICBl bnVtIHp5bnFtcF9kaXNwX2xheWVyX21vZGUgbW9kZSkKPiA+ICt7Cj4gPiArCXUzMiB2YWw7Cj4g PiArCj4gPiArCXZhbCA9IHp5bnFtcF9kaXNwX2F2YnVmX3JlYWQoYXZidWYsIFpZTlFNUF9ESVNQ X0FWX0JVRl9PVVRQVVQpOwo+ID4gKwlpZiAobGF5ZXIgPT0gWllOUU1QX0RJU1BfTEFZRVJfVklE KSB7Cj4gPiArCQl2YWwgJj0gflpZTlFNUF9ESVNQX0FWX0JVRl9PVVRQVVRfVklEMV9NQVNLOwo+ ID4gKwkJaWYgKG1vZGUgPT0gWllOUU1QX0RJU1BfTEFZRVJfTk9OTElWRSkKPiA+ICsJCQl2YWwg fD0gWllOUU1QX0RJU1BfQVZfQlVGX09VVFBVVF9WSUQxX01FTTsKPiA+ICsJCWVsc2UKPiA+ICsJ CQl2YWwgfD0gWllOUU1QX0RJU1BfQVZfQlVGX09VVFBVVF9WSUQxX0xJVkU7Cj4gPiArCX0gZWxz ZSB7Cj4gPiArCQl2YWwgJj0gflpZTlFNUF9ESVNQX0FWX0JVRl9PVVRQVVRfVklEMl9NQVNLOwo+ ID4gKwkJdmFsIHw9IFpZTlFNUF9ESVNQX0FWX0JVRl9PVVRQVVRfVklEMl9NRU07Cj4gPiArCQlp ZiAobW9kZSA9PSBaWU5RTVBfRElTUF9MQVlFUl9OT05MSVZFKQo+ID4gKwkJCXZhbCB8PSBaWU5R TVBfRElTUF9BVl9CVUZfT1VUUFVUX1ZJRDJfTUVNOwo+ID4gKwkJZWxzZQo+ID4gKwkJCXZhbCB8 PSBaWU5RTVBfRElTUF9BVl9CVUZfT1VUUFVUX1ZJRDJfTElWRTsKPiA+ICsJfQo+ID4gKwl6eW5x bXBfZGlzcF9hdmJ1Zl93cml0ZShhdmJ1ZiwgWllOUU1QX0RJU1BfQVZfQlVGX09VVFBVVCwgdmFs KTsKPiA+ICt9Cj4gPiArCj4gPiArLyoqCj4gPiArICogenlucW1wX2Rpc3BfYXZidWZfZGlzYWJs ZV92aWRlbyAtIERpc2FibGUgYSB2aWRlbyBsYXllcgo+ID4gKyAqIEBhdmJ1ZjogQXVkaW8vdmlk ZW8gYnVmZmVyIG1hbmFnZXIKPiA+ICsgKiBAbGF5ZXI6IFRoZSBsYXllciBJRAo+ID4gKyAqCj4g PiArICogRGlzYWJsZSB0aGUgdmlkZW8vZ3JhcGhpY3MgYnVmZmVyIGZvciBAbGF5ZXIuCj4gPiAr ICovCj4gPiArc3RhdGljIHZvaWQgenlucW1wX2Rpc3BfYXZidWZfZGlzYWJsZV92aWRlbyhzdHJ1 Y3QgenlucW1wX2Rpc3BfYXZidWYgKmF2YnVmLAo+ID4gKwkJCQkJICAgIGVudW0genlucW1wX2Rp c3BfbGF5ZXJfaWQgbGF5ZXIpCj4gPiArewo+ID4gKwl1MzIgdmFsOwo+ID4gKwo+ID4gKwl2YWwg PSB6eW5xbXBfZGlzcF9hdmJ1Zl9yZWFkKGF2YnVmLCBaWU5RTVBfRElTUF9BVl9CVUZfT1VUUFVU KTsKPiA+ICsJaWYgKGxheWVyID09IFpZTlFNUF9ESVNQX0xBWUVSX1ZJRCkgewo+ID4gKwkJdmFs ICY9IH5aWU5RTVBfRElTUF9BVl9CVUZfT1VUUFVUX1ZJRDFfTUFTSzsKPiA+ICsJCXZhbCB8PSBa WU5RTVBfRElTUF9BVl9CVUZfT1VUUFVUX1ZJRDFfTk9ORTsKPiA+ICsJfSBlbHNlIHsKPiA+ICsJ CXZhbCAmPSB+WllOUU1QX0RJU1BfQVZfQlVGX09VVFBVVF9WSUQyX01BU0s7Cj4gPiArCQl2YWwg fD0gWllOUU1QX0RJU1BfQVZfQlVGX09VVFBVVF9WSUQyX0RJU0FCTEU7Cj4gPiArCX0KPiA+ICsJ enlucW1wX2Rpc3BfYXZidWZfd3JpdGUoYXZidWYsIFpZTlFNUF9ESVNQX0FWX0JVRl9PVVRQVVQs IHZhbCk7Cj4gPiArfQo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIHp5bnFtcF9kaXNwX2F2YnVmX2Vu YWJsZSAtIEVuYWJsZSB0aGUgdmlkZW8gcGlwZQo+ID4gKyAqIEBhdmJ1ZjogQXVkaW8vdmlkZW8g YnVmZmVyIG1hbmFnZXIKPiA+ICsgKgo+ID4gKyAqIERlLWFzc2VydCB0aGUgdmlkZW8gcGlwZSBy ZXNldC4KPiA+ICsgKi8KPiA+ICtzdGF0aWMgdm9pZCB6eW5xbXBfZGlzcF9hdmJ1Zl9lbmFibGUo c3RydWN0IHp5bnFtcF9kaXNwX2F2YnVmICphdmJ1ZikKPiA+ICt7Cj4gPiArCXp5bnFtcF9kaXNw X2F2YnVmX3dyaXRlKGF2YnVmLCBaWU5RTVBfRElTUF9BVl9CVUZfU1JTVF9SRUcsIDApOwo+ID4g K30KPiA+ICsKPiA+ICsvKioKPiA+ICsgKiB6eW5xbXBfZGlzcF9hdmJ1Zl9kaXNhYmxlIC0gRGlz YWJsZSB0aGUgdmlkZW8gcGlwZQo+ID4gKyAqIEBhdmJ1ZjogQXVkaW8vdmlkZW8gYnVmZmVyIG1h bmFnZXIKPiA+ICsgKgo+ID4gKyAqIEFzc2VydCB0aGUgdmlkZW8gcGlwZSByZXNldC4KPiA+ICsg Ki8KPiA+ICtzdGF0aWMgdm9pZCB6eW5xbXBfZGlzcF9hdmJ1Zl9kaXNhYmxlKHN0cnVjdCB6eW5x bXBfZGlzcF9hdmJ1ZiAqYXZidWYpCj4gPiArewo+ID4gKwl6eW5xbXBfZGlzcF9hdmJ1Zl93cml0 ZShhdmJ1ZiwgWllOUU1QX0RJU1BfQVZfQlVGX1NSU1RfUkVHLAo+ID4gKwkJCQlaWU5RTVBfRElT UF9BVl9CVUZfU1JTVF9SRUdfVklEX1JTVCk7Cj4gPiArfQo+ID4gKwo+ID4gKy8qIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCj4gPiArICogQmxlbmRlciAoVmlkZW8gUGlwZWxpbmUpCj4gPiArICovCj4g PiArCj4gPiArc3RhdGljIHZvaWQgenlucW1wX2Rpc3BfYmxlbmRfd3JpdGUoc3RydWN0IHp5bnFt cF9kaXNwX2JsZW5kICpibGVuZCwKPiA+ICsJCQkJICAgIGludCByZWcsIHUzMiB2YWwpCj4gPiAr ewo+ID4gKwl3cml0ZWwodmFsLCBibGVuZC0+YmFzZSArIHJlZyk7Cj4gPiArfQo+ID4gKwo+ID4g Ky8qCj4gPiArICogQ29sb3JzcGFjZSBjb252ZXJzaW9uIG1hdHJpY2VzLgo+ID4gKyAqCj4gPiAr ICogSGFyZGNvZGUgUkdCIDwtPiBZVVYgY29udmVyc2lvbiB0byBmdWxsLXJhbmdlIFNEVFYgZm9y IG5vdy4KPiA+ICsgKi8KPiA+ICtzdGF0aWMgY29uc3QgdTE2IGNzY196ZXJvX21hdHJpeFtdID0g ewo+ID4gKwkweDAsICAgIDB4MCwgICAgMHgwLAo+ID4gKwkweDAsICAgIDB4MCwgICAgMHgwLAo+ ID4gKwkweDAsICAgIDB4MCwgICAgMHgwCj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgY29uc3Qg dTE2IGNzY19pZGVudGl0eV9tYXRyaXhbXSA9IHsKPiA+ICsJMHgxMDAwLCAweDAsICAgIDB4MCwK PiA+ICsJMHgwLCAgICAweDEwMDAsIDB4MCwKPiA+ICsJMHgwLCAgICAweDAsICAgIDB4MTAwMAo+ ID4gK307Cj4gPiArCj4gPiArc3RhdGljIGNvbnN0IHUzMiBjc2NfemVyb19vZmZzZXRzW10gPSB7 Cj4gPiArCTAsIDAsIDAKPiA+ICt9Owo+ID4gKwo+ID4gK3N0YXRpYyBjb25zdCB1MTYgY3NjX3Jn Yl90b19zZHR2X21hdHJpeFtdID0gewo+ID4gKwkweDRjOSwgIDB4ODY0LCAgMHgxZDMsCj4gPiAr CTB4N2Q0ZCwgMHg3YWIzLCAweDgwMCwKPiA+ICsJMHg4MDAsICAweDc5NGQsIDB4N2ViMwo+ID4g K307Cj4gPiArCj4gPiArc3RhdGljIGNvbnN0IHUzMiBjc2NfcmdiX3RvX3NkdHZfb2Zmc2V0c1td ID0gewo+ID4gKwkweDAsIDB4ODAwMDAwMCwgMHg4MDAwMDAwCj4gPiArfTsKPiA+ICsKPiA+ICtz dGF0aWMgY29uc3QgdTE2IGNzY19zZHR2X3RvX3JnYl9tYXRyaXhbXSA9IHsKPiA+ICsJMHgxMDAw LCAweDE2NmYsIDB4MCwKPiA+ICsJMHgxMDAwLCAweDc0ODMsIDB4N2E3ZiwKPiA+ICsJMHgxMDAw LCAweDAsICAgIDB4MWM1YQo+ID4gK307Cj4gPiArCj4gPiArc3RhdGljIGNvbnN0IHUzMiBjc2Nf c2R0dl90b19yZ2Jfb2Zmc2V0c1tdID0gewo+ID4gKwkweDAsIDB4MTgwMCwgMHgxODAwCj4gPiAr fTsKPiA+ICsKPiA+ICsvKioKPiA+ICsgKiB6eW5xbXBfZGlzcF9ibGVuZF9zZXRfb3V0cHV0X2Zv cm1hdCAtIFNldCB0aGUgb3V0cHV0IGZvcm1hdCBvZiB0aGUgYmxlbmRlcgo+ID4gKyAqIEBibGVu ZDogQmxlbmRlciBvYmplY3QKPiA+ICsgKiBAZm9ybWF0OiBPdXRwdXQgZm9ybWF0Cj4gPiArICoK PiA+ICsgKiBTZXQgdGhlIG91dHB1dCBmb3JtYXQgb2YgdGhlIGJsZW5kZXIgdG8gQGZvcm1hdC4K PiA+ICsgKi8KPiA+ICtzdGF0aWMgdm9pZCB6eW5xbXBfZGlzcF9ibGVuZF9zZXRfb3V0cHV0X2Zv cm1hdChzdHJ1Y3QgenlucW1wX2Rpc3BfYmxlbmQgKmJsZW5kLAo+ID4gKwkJCQkJCWVudW0genlu cW1wX2Rwc3ViX2Zvcm1hdCBmb3JtYXQpCj4gPiArewo+ID4gKwlzdGF0aWMgY29uc3QgdW5zaWdu ZWQgaW50IGJsZW5kX291dHB1dF9mbXRzW10gPSB7Cj4gPiArCQlbWllOUU1QX0RQU1VCX0ZPUk1B VF9SR0JdID0gWllOUU1QX0RJU1BfVl9CTEVORF9PVVRQVVRfVklEX0ZNVF9SR0IsCj4gPiArCQlb WllOUU1QX0RQU1VCX0ZPUk1BVF9ZQ1JDQjQ0NF0gPSBaWU5RTVBfRElTUF9WX0JMRU5EX09VVFBV VF9WSURfRk1UX1lDQkNSNDQ0LAo+ID4gKwkJW1pZTlFNUF9EUFNVQl9GT1JNQVRfWUNSQ0I0MjJd ID0gWllOUU1QX0RJU1BfVl9CTEVORF9PVVRQVVRfVklEX0ZNVF9ZQ0JDUjQyMgo+ID4gKwkJCQkJ ICAgICAgIHwgWllOUU1QX0RJU1BfVl9CTEVORF9PVVRQVVRfVklEX0ZNVF9FTl9ET1dOU0FNUExF LAo+ID4gKwkJW1pZTlFNUF9EUFNVQl9GT1JNQVRfWU9OTFldID0gWllOUU1QX0RJU1BfVl9CTEVO RF9PVVRQVVRfVklEX0ZNVF9ZT05MWSwKPiA+ICsJfTsKPiA+ICsKPiA+ICsJdTMyIGZtdCA9IGJs ZW5kX291dHB1dF9mbXRzW2Zvcm1hdF07Cj4gPiArCWNvbnN0IHUxNiAqY29lZmZzOwo+ID4gKwlj b25zdCB1MzIgKm9mZnNldHM7Cj4gPiArCXVuc2lnbmVkIGludCBpOwo+ID4gKwo+ID4gKwl6eW5x bXBfZGlzcF9ibGVuZF93cml0ZShibGVuZCwgWllOUU1QX0RJU1BfVl9CTEVORF9PVVRQVVRfVklE X0ZNVCwgZm10KTsKPiA+ICsJaWYgKGZtdCA9PSBaWU5RTVBfRElTUF9WX0JMRU5EX09VVFBVVF9W SURfRk1UX1JHQikgewo+ID4gKwkJY29lZmZzID0gY3NjX2lkZW50aXR5X21hdHJpeDsKPiA+ICsJ CW9mZnNldHMgPSBjc2NfemVyb19vZmZzZXRzOwo+ID4gKwl9IGVsc2Ugewo+ID4gKwkJY29lZmZz ID0gY3NjX3JnYl90b19zZHR2X21hdHJpeDsKPiA+ICsJCW9mZnNldHMgPSBjc2NfcmdiX3RvX3Nk dHZfb2Zmc2V0czsKPiA+ICsJfQo+ID4gKwo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgWllOUU1QX0RJ U1BfVl9CTEVORF9OVU1fQ09FRkY7IGkrKykKPiA+ICsJCXp5bnFtcF9kaXNwX2JsZW5kX3dyaXRl KGJsZW5kLAo+ID4gKwkJCQkJWllOUU1QX0RJU1BfVl9CTEVORF9SR0IyWUNCQ1JfQ09FRkYoaSks Cj4gPiArCQkJCQljb2VmZnNbaV0pOwo+ID4gKwo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgWllOUU1Q X0RJU1BfVl9CTEVORF9OVU1fT0ZGU0VUOyBpKyspCj4gPiArCQl6eW5xbXBfZGlzcF9ibGVuZF93 cml0ZShibGVuZCwKPiA+ICsJCQkJCVpZTlFNUF9ESVNQX1ZfQkxFTkRfT1VUQ1NDX09GRlNFVChp KSwKPiA+ICsJCQkJCW9mZnNldHNbaV0pOwo+ID4gK30KPiA+ICsKPiA+ICsvKioKPiA+ICsgKiB6 eW5xbXBfZGlzcF9ibGVuZF9zZXRfYmdfY29sb3IgLSBTZXQgdGhlIGJhY2tncm91bmQgY29sb3IK PiA+ICsgKiBAYmxlbmQ6IEJsZW5kZXIgb2JqZWN0Cj4gPiArICogQHJjcjogUmVkL0NyIGNvbG9y IGNvbXBvbmVudAo+ID4gKyAqIEBneTogR3JlZW4vWSBjb2xvciBjb21wb25lbnQKPiA+ICsgKiBA YmNiOiBCbHVlL0NiIGNvbG9yIGNvbXBvbmVudAo+ID4gKyAqCj4gPiArICogU2V0IHRoZSBiYWNr Z3JvdW5kIGNvbG9yIHRvIChAcmNyLCBAZ3ksIEBiY2IpLCBjb3JyZXNwb25kaW5nIHRvIHRoZSBS LCBHIGFuZAo+ID4gKyAqIEIgb3IgQ3IsIFkgYW5kIENiIGNvbXBvbmVudHMgcmVzcGVjdGl2ZWx5 IGRlcGVuZGluZyBvbiB0aGUgc2VsZWN0ZWQgb3V0cHV0Cj4gPiArICogZm9ybWF0Lgo+ID4gKyAq Lwo+ID4gK3N0YXRpYyB2b2lkIHp5bnFtcF9kaXNwX2JsZW5kX3NldF9iZ19jb2xvcihzdHJ1Y3Qg enlucW1wX2Rpc3BfYmxlbmQgKmJsZW5kLAo+ID4gKwkJCQkJICAgdTMyIHJjciwgdTMyIGd5LCB1 MzIgYmNiKQo+ID4gK3sKPiA+ICsJenlucW1wX2Rpc3BfYmxlbmRfd3JpdGUoYmxlbmQsIFpZTlFN UF9ESVNQX1ZfQkxFTkRfQkdfQ0xSXzAsIHJjcik7Cj4gPiArCXp5bnFtcF9kaXNwX2JsZW5kX3dy aXRlKGJsZW5kLCBaWU5RTVBfRElTUF9WX0JMRU5EX0JHX0NMUl8xLCBneSk7Cj4gPiArCXp5bnFt cF9kaXNwX2JsZW5kX3dyaXRlKGJsZW5kLCBaWU5RTVBfRElTUF9WX0JMRU5EX0JHX0NMUl8yLCBi Y2IpOwo+ID4gK30KPiA+ICsKPiA+ICsvKioKPiA+ICsgKiB6eW5xbXBfZGlzcF9ibGVuZF9zZXRf Z2xvYmFsX2FscGhhIC0gQ29uZmlndXJlIGdsb2JhbCBhbHBoYSBibGVuZGluZwo+ID4gKyAqIEBi bGVuZDogQmxlbmRlciBvYmplY3QKPiA+ICsgKiBAZW5hYmxlOiBUcnVlIHRvIGVuYWJsZSBnbG9i YWwgYWxwaGEgYmxlbmRpbmcKPiA+ICsgKiBAYWxwaGE6IEdsb2JhbCBhbHBoYSB2YWx1ZSAoaWdu b3JlZCBpZiBAZW5hYmxlZCBpcyBmYWxzZSkKPiA+ICsgKi8KPiA+ICtzdGF0aWMgdm9pZCB6eW5x bXBfZGlzcF9ibGVuZF9zZXRfZ2xvYmFsX2FscGhhKHN0cnVjdCB6eW5xbXBfZGlzcF9ibGVuZCAq YmxlbmQsCj4gPiArCQkJCQkgICAgICAgYm9vbCBlbmFibGUsIHUzMiBhbHBoYSkKPiA+ICt7Cj4g PiArCXp5bnFtcF9kaXNwX2JsZW5kX3dyaXRlKGJsZW5kLCBaWU5RTVBfRElTUF9WX0JMRU5EX1NF VF9HTE9CQUxfQUxQSEEsCj4gPiArCQkJCVpZTlFNUF9ESVNQX1ZfQkxFTkRfU0VUX0dMT0JBTF9B TFBIQV9WQUxVRShhbHBoYSkgfAo+ID4gKwkJCQkoZW5hYmxlID8gWllOUU1QX0RJU1BfVl9CTEVO RF9TRVRfR0xPQkFMX0FMUEhBX0VOIDogMCkpOwo+ID4gK30KPiA+ICsKPiA+ICsvKioKPiA+ICsg KiB6eW5xbXBfZGlzcF9ibGVuZF9sYXllcl9zZXRfY3NjIC0gQ29uZmlndXJlIGNvbG9yc3BhY2Ug Y29udmVyc2lvbiBmb3IgbGF5ZXIKPiA+ICsgKiBAYmxlbmQ6IEJsZW5kZXIgb2JqZWN0Cj4gPiAr ICogQGxheWVyOiBUaGUgbGF5ZXIKPiA+ICsgKiBAY29lZmZzOiBDb2xvcnNwYWNlIGNvbnZlcnNp b24gbWF0cml4Cj4gPiArICogQG9mZnNldHM6IENvbG9yc3BhY2UgY29udmVyc2lvbiBvZmZzZXRz Cj4gPiArICoKPiA+ICsgKiBDb25maWd1cmUgdGhlIGlucHV0IGNvbG9yc3BhY2UgY29udmVyc2lv biBtYXRyaXggYW5kIG9mZnNldHMgZm9yIHRoZSBAbGF5ZXIuCj4gPiArICogQ29sdW1ucyBvZiB0 aGUgbWF0cml4IGFyZSBhdXRvbWF0aWNhbGx5IHN3YXBwZWQgYmFzZWQgb24gdGhlIGlucHV0IGZv cm1hdCB0bwo+ID4gKyAqIGhhbmRsZSBSR0IgYW5kIFlDckNiIGNvbXBvbmVudHMgcGVybXV0YXRp b25zLgo+ID4gKyAqLwo+ID4gK3N0YXRpYyB2b2lkIHp5bnFtcF9kaXNwX2JsZW5kX2xheWVyX3Nl dF9jc2Moc3RydWN0IHp5bnFtcF9kaXNwX2JsZW5kICpibGVuZCwKPiA+ICsJCQkJCSAgICBzdHJ1 Y3QgenlucW1wX2Rpc3BfbGF5ZXIgKmxheWVyLAo+ID4gKwkJCQkJICAgIGNvbnN0IHUxNiAqY29l ZmZzLAo+ID4gKwkJCQkJICAgIGNvbnN0IHUzMiAqb2Zmc2V0cykKPiA+ICt7Cj4gPiArCXVuc2ln bmVkIGludCBzd2FwWzNdID0geyAwLCAxLCAyIH07Cj4gPiArCXVuc2lnbmVkIGludCByZWc7Cj4g PiArCXVuc2lnbmVkIGludCBpOwo+ID4gKwo+ID4gKwlpZiAobGF5ZXItPmRpc3BfZm10LT5zd2Fw KSB7Cj4gPiArCQlpZiAobGF5ZXItPmRybV9mbXQtPmlzX3l1dikgewo+ID4gKwkJCS8qIFN3YXAg VSBhbmQgVi4gKi8KPiA+ICsJCQlzd2FwWzFdID0gMjsKPiA+ICsJCQlzd2FwWzJdID0gMTsKPiA+ ICsJCX0gZWxzZSB7Cj4gPiArCQkJLyogU3dhcCBSIGFuZCBCLiAqLwo+ID4gKwkJCXN3YXBbMF0g PSAyOwo+ID4gKwkJCXN3YXBbMl0gPSAwOwo+ID4gKwkJfQo+ID4gKwl9Cj4gPiArCj4gPiArCWlm IChsYXllci0+aWQgPT0gWllOUU1QX0RJU1BfTEFZRVJfVklEKQo+ID4gKwkJcmVnID0gWllOUU1Q X0RJU1BfVl9CTEVORF9JTjFDU0NfQ09FRkYoMCk7Cj4gPiArCWVsc2UKPiA+ICsJCXJlZyA9IFpZ TlFNUF9ESVNQX1ZfQkxFTkRfSU4yQ1NDX0NPRUZGKDApOwo+ID4gKwo+ID4gKwlmb3IgKGkgPSAw OyBpIDwgWllOUU1QX0RJU1BfVl9CTEVORF9OVU1fQ09FRkY7IGkgKz0gMywgcmVnICs9IDEyKSB7 Cj4gPiArCQl6eW5xbXBfZGlzcF9ibGVuZF93cml0ZShibGVuZCwgcmVnICsgMCwgY29lZmZzW2kg KyBzd2FwWzBdXSk7Cj4gPiArCQl6eW5xbXBfZGlzcF9ibGVuZF93cml0ZShibGVuZCwgcmVnICsg NCwgY29lZmZzW2kgKyBzd2FwWzFdXSk7Cj4gPiArCQl6eW5xbXBfZGlzcF9ibGVuZF93cml0ZShi bGVuZCwgcmVnICsgOCwgY29lZmZzW2kgKyBzd2FwWzJdXSk7Cj4gPiArCX0KPiA+ICsKPiA+ICsJ aWYgKGxheWVyLT5pZCA9PSBaWU5RTVBfRElTUF9MQVlFUl9WSUQpCj4gPiArCQlyZWcgPSBaWU5R TVBfRElTUF9WX0JMRU5EX0lOMUNTQ19PRkZTRVQoMCk7Cj4gPiArCWVsc2UKPiA+ICsJCXJlZyA9 IFpZTlFNUF9ESVNQX1ZfQkxFTkRfSU4yQ1NDX09GRlNFVCgwKTsKPiA+ICsKPiA+ICsJZm9yIChp ID0gMDsgaSA8IFpZTlFNUF9ESVNQX1ZfQkxFTkRfTlVNX09GRlNFVDsgaSsrKQo+ID4gKwkJenlu cW1wX2Rpc3BfYmxlbmRfd3JpdGUoYmxlbmQsIHJlZyArIGkgKiA0LCBvZmZzZXRzW2ldKTsKPiA+ ICt9Cj4gPiArCj4gPiArLyoqCj4gPiArICogenlucW1wX2Rpc3BfYmxlbmRfbGF5ZXJfZW5hYmxl IC0gRW5hYmxlIGEgbGF5ZXIKPiA+ICsgKiBAYmxlbmQ6IEJsZW5kZXIgb2JqZWN0Cj4gPiArICog QGxheWVyOiBUaGUgbGF5ZXIKPiA+ICsgKi8KPiA+ICtzdGF0aWMgdm9pZCB6eW5xbXBfZGlzcF9i bGVuZF9sYXllcl9lbmFibGUoc3RydWN0IHp5bnFtcF9kaXNwX2JsZW5kICpibGVuZCwKPiA+ICsJ CQkJCSAgIHN0cnVjdCB6eW5xbXBfZGlzcF9sYXllciAqbGF5ZXIpCj4gPiArewo+ID4gKwljb25z dCB1MTYgKmNvZWZmczsKPiA+ICsJY29uc3QgdTMyICpvZmZzZXRzOwo+ID4gKwl1MzIgdmFsOwo+ ID4gKwo+ID4gKwl2YWwgPSAobGF5ZXItPmRybV9mbXQtPmlzX3l1diA/Cj4gPiArCSAgICAgICAw IDogWllOUU1QX0RJU1BfVl9CTEVORF9MQVlFUl9DT05UUk9MX1JHQikgfAo+ID4gKwkgICAgICAo bGF5ZXItPmRybV9mbXQtPmhzdWIgPiAxID8KPiA+ICsJICAgICAgIFpZTlFNUF9ESVNQX1ZfQkxF TkRfTEFZRVJfQ09OVFJPTF9FTl9VUyA6IDApOwo+ID4gKwo+ID4gKwl6eW5xbXBfZGlzcF9ibGVu ZF93cml0ZShibGVuZCwKPiA+ICsJCQkJWllOUU1QX0RJU1BfVl9CTEVORF9MQVlFUl9DT05UUk9M KGxheWVyLT5pZCksCj4gPiArCQkJCXZhbCk7Cj4gPiArCj4gPiArCWlmIChsYXllci0+ZHJtX2Zt dC0+aXNfeXV2KSB7Cj4gPiArCQljb2VmZnMgPSBjc2Nfc2R0dl90b19yZ2JfbWF0cml4Owo+ID4g KwkJb2Zmc2V0cyA9IGNzY19zZHR2X3RvX3JnYl9vZmZzZXRzOwo+ID4gKwl9IGVsc2Ugewo+ID4g KwkJY29lZmZzID0gY3NjX2lkZW50aXR5X21hdHJpeDsKPiA+ICsJCW9mZnNldHMgPSBjc2NfemVy b19vZmZzZXRzOwo+ID4gKwl9Cj4gPiArCj4gPiArCXp5bnFtcF9kaXNwX2JsZW5kX2xheWVyX3Nl dF9jc2MoYmxlbmQsIGxheWVyLCBjb2VmZnMsIG9mZnNldHMpOwo+ID4gK30KPiA+ICsKPiA+ICsv KioKPiA+ICsgKiB6eW5xbXBfZGlzcF9ibGVuZF9sYXllcl9kaXNhYmxlIC0gRGlzYWJsZSBhIGxh eWVyCj4gPiArICogQGJsZW5kOiBCbGVuZGVyIG9iamVjdAo+ID4gKyAqIEBsYXllcjogVGhlIGxh eWVyCj4gPiArICovCj4gPiArc3RhdGljIHZvaWQgenlucW1wX2Rpc3BfYmxlbmRfbGF5ZXJfZGlz YWJsZShzdHJ1Y3QgenlucW1wX2Rpc3BfYmxlbmQgKmJsZW5kLAo+ID4gKwkJCQkJICAgIHN0cnVj dCB6eW5xbXBfZGlzcF9sYXllciAqbGF5ZXIpCj4gPiArewo+ID4gKwl6eW5xbXBfZGlzcF9ibGVu ZF93cml0ZShibGVuZCwKPiA+ICsJCQkJWllOUU1QX0RJU1BfVl9CTEVORF9MQVlFUl9DT05UUk9M KGxheWVyLT5pZCksCj4gPiArCQkJCTApOwo+ID4gKwo+ID4gKwl6eW5xbXBfZGlzcF9ibGVuZF9s YXllcl9zZXRfY3NjKGJsZW5kLCBsYXllciwgY3NjX3plcm9fbWF0cml4LAo+ID4gKwkJCQkJY3Nj X3plcm9fb2Zmc2V0cyk7Cj4gPiArfQo+ID4gKwo+ID4gKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Cj4gPiArICogQXVkaW8gTWl4ZXIKPiA+ICsgKi8KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCB6eW5x bXBfZGlzcF9hdWRpb193cml0ZShzdHJ1Y3QgenlucW1wX2Rpc3BfYXVkaW8gKmF1ZGlvLAo+ID4g KwkJCQkgIGludCByZWcsIHUzMiB2YWwpCj4gPiArewo+ID4gKwl3cml0ZWwodmFsLCBhdWRpby0+ YmFzZSArIHJlZyk7Cj4gPiArfQo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIHp5bnFtcF9kaXNwX2F1 ZGlvX2VuYWJsZSAtIEVuYWJsZSB0aGUgYXVkaW8gbWl4ZXIKPiA+ICsgKiBAYXVkaW86IEF1ZGlv IG1peGVyCj4gPiArICoKPiA+ICsgKiBFbmFibGUgdGhlIGF1ZGlvIG1peGVyIGJ5IGRlLWFzc2Vy dGluZyB0aGUgc29mdCByZXNldC4gVGhlIGF1ZGlvIHN0YXRlIGlzIHNldCB0bwo+ID4gKyAqIGRl ZmF1bHQgdmFsdWVzIGJ5IHRoZSByZXNldCwgc2V0IHRoZSBkZWZhdWx0IG1peGVyIHZvbHVtZSBl eHBsaWNpdGx5Lgo+ID4gKyAqLwo+ID4gK3N0YXRpYyB2b2lkIHp5bnFtcF9kaXNwX2F1ZGlvX2Vu YWJsZShzdHJ1Y3QgenlucW1wX2Rpc3BfYXVkaW8gKmF1ZGlvKQo+ID4gK3sKPiA+ICsJLyogQ2xl YXIgdGhlIGF1ZGlvIHNvZnQgcmVzZXQgcmVnaXN0ZXIgYXMgaXQncyBhbiBub24tcmVzZXQgZmxv cC4gKi8KPiA+ICsJenlucW1wX2Rpc3BfYXVkaW9fd3JpdGUoYXVkaW8sIFpZTlFNUF9ESVNQX0FV RF9TT0ZUX1JFU0VULCAwKTsKPiA+ICsJenlucW1wX2Rpc3BfYXVkaW9fd3JpdGUoYXVkaW8sIFpZ TlFNUF9ESVNQX0FVRF9NSVhFUl9WT0xVTUUsCj4gPiArCQkJCVpZTlFNUF9ESVNQX0FVRF9NSVhF Ul9WT0xVTUVfTk9fU0NBTEUpOwo+ID4gK30KPiA+ICsKPiA+ICsvKioKPiA+ICsgKiB6eW5xbXBf ZGlzcF9hdWRpb19kaXNhYmxlIC0gRGlzYWJsZSB0aGUgYXVkaW8gbWl4ZXIKPiA+ICsgKiBAYXVk aW86IEF1ZGlvIG1peGVyCj4gPiArICoKPiA+ICsgKiBEaXNhYmxlIHRoZSBhdWRpbyBtaXhlciBi eSBhc3NlcnRpbmcgaXRzIHNvZnQgcmVzZXQuCj4gPiArICovCj4gPiArc3RhdGljIHZvaWQgenlu cW1wX2Rpc3BfYXVkaW9fZGlzYWJsZShzdHJ1Y3QgenlucW1wX2Rpc3BfYXVkaW8gKmF1ZGlvKQo+ ID4gK3sKPiA+ICsJenlucW1wX2Rpc3BfYXVkaW9fd3JpdGUoYXVkaW8sIFpZTlFNUF9ESVNQX0FV RF9TT0ZUX1JFU0VULAo+ID4gKwkJCQlaWU5RTVBfRElTUF9BVURfU09GVF9SRVNFVF9BVURfU1JT VCk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIHp5bnFtcF9kaXNwX2F1ZGlvX2luaXQo c3RydWN0IGRldmljZSAqZGV2LAo+ID4gKwkJCQkgc3RydWN0IHp5bnFtcF9kaXNwX2F1ZGlvICph dWRpbykKPiA+ICt7Cj4gPiArCS8qIFRyeSB0aGUgbGl2ZSBQTCBhdWRpbyBjbG9jay4gKi8KPiA+ ICsJYXVkaW8tPl9wbF9jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAiZHBfbGl2ZV9hdWRpb19hY2xr Iik7Cj4gPiArCWlmICghSVNfRVJSKGF1ZGlvLT5fcGxfY2xrKSkgewo+ID4gKwkJYXVkaW8tPmNs ayA9IGF1ZGlvLT5fcGxfY2xrOwo+ID4gKwkJcmV0dXJuOwo+ID4gKwl9Cj4gPiArCj4gPiArCS8q IElmIHRoZSBsaXZlIFBMIGF1ZGlvIGNsb2NrIGlzIG5vdCB2YWxpZCwgZmFsbCBiYWNrIHRvIFBT IGNsb2NrLiAqLwo+ID4gKwlhdWRpby0+X3BzX2NsayA9IGRldm1fY2xrX2dldChkZXYsICJkcF9h dWRfY2xrIik7Cj4gPiArCWlmICghSVNfRVJSKGF1ZGlvLT5fcHNfY2xrKSkgewo+ID4gKwkJYXVk aW8tPmNsayA9IGF1ZGlvLT5fcHNfY2xrOwo+ID4gKwkJcmV0dXJuOwo+ID4gKwl9Cj4gPiArCj4g PiArCWRldl9lcnIoZGV2LCAiYXVkaW8gZGlzYWJsZWQgZHVlIHRvIG1pc3NpbmcgY2xvY2tcbiIp Owo+ID4gK30KPiA+ICsKPiA+ICsvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ID4gKyAqIFp5bnFN UCBEaXNwbGF5IGV4dGVybmFsIGZ1bmN0aW9ucyBmb3IgenlucW1wX2RwCj4gPiArICovCj4gPiAr Cj4gPiArLyoqCj4gPiArICogenlucW1wX2Rpc3BfaGFuZGxlX3ZibGFuayAtIEhhbmRsZSB0aGUg dmJsYW5rIGV2ZW50Cj4gPiArICogQGRpc3A6IERpc3BsYXkgY29udHJvbGxlcgo+ID4gKyAqCj4g PiArICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSB2YmxhbmsgaW50ZXJydXB0LCBhbmQgc2Vu ZHMgYW4gZXZlbnQgdG8KPiA+ICsgKiBDUlRDIG9iamVjdC4gVGhpcyB3aWxsIGJlIGNhbGxlZCBi eSB0aGUgRFAgdmJsYW5rIGludGVycnVwdCBoYW5kbGVyLgo+ID4gKyAqLwo+ID4gK3ZvaWQgenlu cW1wX2Rpc3BfaGFuZGxlX3ZibGFuayhzdHJ1Y3QgenlucW1wX2Rpc3AgKmRpc3ApCj4gPiArewo+ ID4gKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSAmZGlzcC0+Y3J0YzsKPiA+ICsKPiA+ICsJZHJt X2NydGNfaGFuZGxlX3ZibGFuayhjcnRjKTsKPiA+ICt9Cj4gPiArCj4gPiArLyoqCj4gPiArICog enlucW1wX2Rpc3BfYXVkaW9fZW5hYmxlZCAtIElmIHRoZSBhdWRpbyBpcyBlbmFibGVkCj4gPiAr ICogQGRpc3A6IERpc3BsYXkgY29udHJvbGxlcgo+ID4gKyAqCj4gPiArICogUmV0dXJuIGlmIHRo ZSBhdWRpbyBpcyBlbmFibGVkIGRlcGVuZGluZyBvbiB0aGUgYXVkaW8gY2xvY2suCj4gPiArICoK PiA+ICsgKiBSZXR1cm46IHRydWUgaWYgYXVkaW8gaXMgZW5hYmxlZCwgb3IgZmFsc2UuCj4gPiAr ICovCj4gPiArYm9vbCB6eW5xbXBfZGlzcF9hdWRpb19lbmFibGVkKHN0cnVjdCB6eW5xbXBfZGlz cCAqZGlzcCkKPiA+ICt7Cj4gPiArCXJldHVybiAhIWRpc3AtPmF1ZGlvLmNsazsKPiA+ICt9Cj4g PiArCj4gPiArLyoqCj4gPiArICogenlucW1wX2Rpc3BfZ2V0X2F1ZGlvX2Nsa19yYXRlIC0gR2V0 IHRoZSBjdXJyZW50IGF1ZGlvIGNsb2NrIHJhdGUKPiA+ICsgKiBAZGlzcDogRGlzcGxheSBjb250 cm9sbGVyCj4gPiArICoKPiA+ICsgKiBSZXR1cm46IHRoZSBjdXJyZW50IGF1ZGlvIGNsb2NrIHJh dGUuCj4gPiArICovCj4gPiArdW5zaWduZWQgaW50IHp5bnFtcF9kaXNwX2dldF9hdWRpb19jbGtf cmF0ZShzdHJ1Y3QgenlucW1wX2Rpc3AgKmRpc3ApCj4gPiArewo+ID4gKwlpZiAoenlucW1wX2Rp c3BfYXVkaW9fZW5hYmxlZChkaXNwKSkKPiA+ICsJCXJldHVybiAwOwo+ID4gKwlyZXR1cm4gY2xr X2dldF9yYXRlKGRpc3AtPmF1ZGlvLmNsayk7Cj4gPiArfQo+ID4gKwo+ID4gKy8qKgo+ID4gKyAq IHp5bnFtcF9kaXNwX2dldF9jcnRjX21hc2sgLSBSZXR1cm4gdGhlIENSVEMgYml0IG1hc2sKPiA+ ICsgKiBAZGlzcDogRGlzcGxheSBjb250cm9sbGVyCj4gPiArICoKPiA+ICsgKiBSZXR1cm46IHRo ZSBjcnRjIG1hc2sgb2YgdGhlIHp5cW5tcF9kaXNwIENSVEMuCj4gPiArICovCj4gPiArdWludDMy X3QgenlucW1wX2Rpc3BfZ2V0X2NydGNfbWFzayhzdHJ1Y3QgenlucW1wX2Rpc3AgKmRpc3ApCj4g PiArewo+ID4gKwlyZXR1cm4gZHJtX2NydGNfbWFzaygmZGlzcC0+Y3J0Yyk7Cj4gPiArfQo+ID4g Kwo+ID4gKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gPiArICogWnlucU1QIERpc3BsYXkgTGF5 ZXIgJiBEUk0gUGxhbmUKPiA+ICsgKi8KPiA+ICsKPiA+ICsvKioKPiA+ICsgKiB6eW5xbXBfZGlz cF9sYXllcl9maW5kX2Zvcm1hdCAtIEZpbmQgZm9ybWF0IGluZm9ybWF0aW9uIGZvciBhIERSTSBm b3JtYXQKPiA+ICsgKiBAbGF5ZXI6IFRoZSBsYXllcgo+ID4gKyAqIEBkcm1fZm10OiBEUk0gZm9y bWF0IHRvIHNlYXJjaAo+ID4gKyAqCj4gPiArICogU2VhcmNoIGRpc3BsYXkgc3Vic3lzdGVtIGZv cm1hdCBpbmZvcm1hdGlvbiBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBEUk0KPiA+ICsgKiBm b3JtYXQgQGRybV9mbXQgZm9yIHRoZSBAbGF5ZXIsIGFuZCByZXR1cm4gYSBwb2ludGVyIHRvIHRo ZSBmb3JtYXQKPiA+ICsgKiBkZXNjcmlwdG9yLgo+ID4gKyAqCj4gPiArICogUmV0dXJuOiBBIHBv aW50ZXIgdG8gdGhlIGZvcm1hdCBkZXNjcmlwdG9yIGlmIGZvdW5kLCBOVUxMIG90aGVyd2lzZQo+ ID4gKyAqLwo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgenlucW1wX2Rpc3BfZm9ybWF0ICoKPiA+ ICt6eW5xbXBfZGlzcF9sYXllcl9maW5kX2Zvcm1hdChzdHJ1Y3QgenlucW1wX2Rpc3BfbGF5ZXIg KmxheWVyLAo+ID4gKwkJCSAgICAgIHUzMiBkcm1fZm10KQo+ID4gK3sKPiA+ICsJdW5zaWduZWQg aW50IGk7Cj4gPiArCj4gPiArCWZvciAoaSA9IDA7IGkgPCBsYXllci0+aW5mby0+bnVtX2Zvcm1h dHM7IGkrKykgewo+ID4gKwkJaWYgKGxheWVyLT5pbmZvLT5mb3JtYXRzW2ldLmRybV9mbXQgPT0g ZHJtX2ZtdCkKPiA+ICsJCQlyZXR1cm4gJmxheWVyLT5pbmZvLT5mb3JtYXRzW2ldOwo+ID4gKwl9 Cj4gPiArCj4gPiArCXJldHVybiBOVUxMOwo+ID4gK30KPiA+ICsKPiA+ICsvKioKPiA+ICsgKiB6 eW5xbXBfZGlzcF9sYXllcl9lbmFibGUgLSBFbmFibGUgYSBsYXllcgo+ID4gKyAqIEBsYXllcjog VGhlIGxheWVyCj4gPiArICoKPiA+ICsgKiBFbmFibGUgdGhlIEBsYXllciBpbiB0aGUgYXVkaW8v dmlkZW8gYnVmZmVyIG1hbmFnZXIgYW5kIHRoZSBibGVuZGVyLiBETUEKPiA+ICsgKiBjaGFubmVs cyBhcmUgc3RhcnRlZCBzZXBhcmF0ZWx5IGJ5IHp5bnFtcF9kaXNwX2xheWVyX3VwZGF0ZSgpLgo+ ID4gKyAqLwo+ID4gK3N0YXRpYyB2b2lkIHp5bnFtcF9kaXNwX2xheWVyX2VuYWJsZShzdHJ1Y3Qg enlucW1wX2Rpc3BfbGF5ZXIgKmxheWVyKQo+ID4gK3sKPiA+ICsJenlucW1wX2Rpc3BfYXZidWZf ZW5hYmxlX3ZpZGVvKCZsYXllci0+ZGlzcC0+YXZidWYsIGxheWVyLT5pZCwKPiA+ICsJCQkJICAg ICAgIFpZTlFNUF9ESVNQX0xBWUVSX05PTkxJVkUpOwo+ID4gKwl6eW5xbXBfZGlzcF9ibGVuZF9s YXllcl9lbmFibGUoJmxheWVyLT5kaXNwLT5ibGVuZCwgbGF5ZXIpOwo+ID4gKwo+ID4gKwlsYXll ci0+bW9kZSA9IFpZTlFNUF9ESVNQX0xBWUVSX05PTkxJVkU7Cj4gPiArfQo+ID4gKwo+ID4gKy8q Kgo+ID4gKyAqIHp5bnFtcF9kaXNwX2xheWVyX2Rpc2FibGUgLSBEaXNhYmxlIHRoZSBsYXllcgo+ ID4gKyAqIEBsYXllcjogVGhlIGxheWVyCj4gPiArICoKPiA+ICsgKiBEaXNhYmxlIHRoZSBsYXll ciBieSBzdG9wcGluZyBpdHMgRE1BIGNoYW5uZWxzIGFuZCBkaXNhYmxpbmcgaXQgaW4gdGhlCj4g PiArICogYXVkaW8vdmlkZW8gYnVmZmVyIG1hbmFnZXIgYW5kIHRoZSBibGVuZGVyLgo+ID4gKyAq Lwo+ID4gK3N0YXRpYyB2b2lkIHp5bnFtcF9kaXNwX2xheWVyX2Rpc2FibGUoc3RydWN0IHp5bnFt cF9kaXNwX2xheWVyICpsYXllcikKPiA+ICt7Cj4gPiArCXVuc2lnbmVkIGludCBpOwo+ID4gKwo+ ID4gKwlmb3IgKGkgPSAwOyBpIDwgbGF5ZXItPmRybV9mbXQtPm51bV9wbGFuZXM7IGkrKykKPiA+ ICsJCWRtYWVuZ2luZV90ZXJtaW5hdGVfc3luYyhsYXllci0+ZG1hc1tpXS5jaGFuKTsKPiA+ICsK PiA+ICsJenlucW1wX2Rpc3BfYXZidWZfZGlzYWJsZV92aWRlbygmbGF5ZXItPmRpc3AtPmF2YnVm LCBsYXllci0+aWQpOwo+ID4gKwl6eW5xbXBfZGlzcF9ibGVuZF9sYXllcl9kaXNhYmxlKCZsYXll ci0+ZGlzcC0+YmxlbmQsIGxheWVyKTsKPiA+ICt9Cj4gPiArCj4gPiArLyoqCj4gPiArICogenlu cW1wX2Rpc3BfbGF5ZXJfc2V0X2Zvcm1hdCAtIFNldCB0aGUgbGF5ZXIgZm9ybWF0Cj4gPiArICog QGxheWVyOiBUaGUgbGF5ZXIKPiA+ICsgKiBAc3RhdGU6IFRoZSBwbGFuZSBzdGF0ZQo+ID4gKyAq Cj4gPiArICogU2V0IHRoZSBmb3JtYXQgZm9yIEBsYXllciBiYXNlZCBvbiBAc3RhdGUtPmZiLT5m b3JtYXQuIFRoZSBsYXllciBtdXN0IGJlCj4gPiArICogZGlzYWJsZWQuCj4gPiArICovCj4gPiAr c3RhdGljIHZvaWQgenlucW1wX2Rpc3BfbGF5ZXJfc2V0X2Zvcm1hdChzdHJ1Y3QgenlucW1wX2Rp c3BfbGF5ZXIgKmxheWVyLAo+ID4gKwkJCQkJIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRl KQo+ID4gK3sKPiA+ICsJY29uc3Qgc3RydWN0IGRybV9mb3JtYXRfaW5mbyAqaW5mbyA9IHN0YXRl LT5mYi0+Zm9ybWF0Owo+ID4gKwl1bnNpZ25lZCBpbnQgaTsKPiA+ICsKPiA+ICsJbGF5ZXItPmRp c3BfZm10ID0genlucW1wX2Rpc3BfbGF5ZXJfZmluZF9mb3JtYXQobGF5ZXIsIGluZm8tPmZvcm1h dCk7Cj4gPiArCWxheWVyLT5kcm1fZm10ID0gaW5mbzsKPiA+ICsKPiA+ICsJenlucW1wX2Rpc3Bf YXZidWZfc2V0X2Zvcm1hdCgmbGF5ZXItPmRpc3AtPmF2YnVmLCBsYXllci0+aWQsCj4gPiArCQkJ CSAgICAgbGF5ZXItPmRpc3BfZm10KTsKPiA+ICsKPiA+ICsJLyoKPiA+ICsJICogU2V0IHNsYXZl X2lkIGZvciBlYWNoIERNQSBjaGFubmVsIHRvIGluZGljYXRlIHRoZXkncmUgcGFydCBvZiBhCj4g PiArCSAqIHZpZGVvIGdyb3VwLgo+ID4gKwkgKi8KPiA+ICsJZm9yIChpID0gMDsgaSA8IGluZm8t Pm51bV9wbGFuZXM7IGkrKykgewo+ID4gKwkJc3RydWN0IHp5bnFtcF9kaXNwX2xheWVyX2RtYSAq ZG1hID0gJmxheWVyLT5kbWFzW2ldOwo+ID4gKwkJc3RydWN0IGRtYV9zbGF2ZV9jb25maWcgY29u ZmlnID0gewo+ID4gKwkJCS5kaXJlY3Rpb24gPSBETUFfTUVNX1RPX0RFViwKPiA+ICsJCQkuc2xh dmVfaWQgPSAxLAo+ID4gKwkJfTsKPiA+ICsKPiA+ICsJCWRtYWVuZ2luZV9zbGF2ZV9jb25maWco ZG1hLT5jaGFuLCAmY29uZmlnKTsKPiA+ICsJfQo+ID4gK30KPiA+ICsKPiA+ICsvKioKPiA+ICsg KiB6eW5xbXBfZGlzcF9sYXllcl91cGRhdGUgLSBVcGRhdGUgdGhlIGxheWVyIGZyYW1lYnVmZmVy Cj4gPiArICogQGxheWVyOiBUaGUgbGF5ZXIKPiA+ICsgKiBAc3RhdGU6IFRoZSBwbGFuZSBzdGF0 ZQo+ID4gKyAqCj4gPiArICogVXBkYXRlIHRoZSBmcmFtZWJ1ZmZlciBmb3IgdGhlIGxheWVyIGJ5 IGlzc3VpbmcgYSBuZXcgRE1BIGVuZ2luZSB0cmFuc2FjdGlvbgo+ID4gKyAqIGZvciB0aGUgbmV3 IGZyYW1lYnVmZmVyLgo+ID4gKyAqCj4gPiArICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIHRo ZSBETUEgZGVzY3JpcHRvciBmYWlsdXJlIGVycm9yIG90aGVyd2lzZQo+ID4gKyAqLwo+ID4gK3N0 YXRpYyBpbnQgenlucW1wX2Rpc3BfbGF5ZXJfdXBkYXRlKHN0cnVjdCB6eW5xbXBfZGlzcF9sYXll ciAqbGF5ZXIsCj4gPiArCQkJCSAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSkKPiA+ ICt7Cj4gPiArCWNvbnN0IHN0cnVjdCBkcm1fZm9ybWF0X2luZm8gKmluZm8gPSBsYXllci0+ZHJt X2ZtdDsKPiA+ICsJdW5zaWduZWQgaW50IGk7Cj4gPiArCj4gPiArCWZvciAoaSA9IDA7IGkgPCBs YXllci0+ZHJtX2ZtdC0+bnVtX3BsYW5lczsgaSsrKSB7Cj4gPiArCQl1bnNpZ25lZCBpbnQgd2lk dGggPSBzdGF0ZS0+Y3J0Y193IC8gKGkgPyBpbmZvLT5oc3ViIDogMSk7Cj4gPiArCQl1bnNpZ25l ZCBpbnQgaGVpZ2h0ID0gc3RhdGUtPmNydGNfaCAvIChpID8gaW5mby0+dnN1YiA6IDEpOwo+ID4g KwkJc3RydWN0IHp5bnFtcF9kaXNwX2xheWVyX2RtYSAqZG1hID0gJmxheWVyLT5kbWFzW2ldOwo+ ID4gKwkJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpkZXNjOwo+ID4gKwkJZG1hX2Fk ZHJfdCBwYWRkcjsKPiA+ICsKPiA+ICsJCXBhZGRyID0gZHJtX2ZiX2NtYV9nZXRfZ2VtX2FkZHIo c3RhdGUtPmZiLCBzdGF0ZSwgaSk7Cj4gPiArCj4gPiArCQlkbWEtPnh0Lm51bWYgPSBoZWlnaHQ7 Cj4gPiArCQlkbWEtPnNnbC5zaXplID0gd2lkdGggKiBpbmZvLT5jcHBbaV07Cj4gPiArCQlkbWEt PnNnbC5pY2cgPSBzdGF0ZS0+ZmItPnBpdGNoZXNbaV0gLSBkbWEtPnNnbC5zaXplOwo+ID4gKwkJ ZG1hLT54dC5zcmNfc3RhcnQgPSBwYWRkcjsKPiA+ICsJCWRtYS0+eHQuZnJhbWVfc2l6ZSA9IDE7 Cj4gPiArCQlkbWEtPnh0LmRpciA9IERNQV9NRU1fVE9fREVWOwo+ID4gKwkJZG1hLT54dC5zcmNf c2dsID0gdHJ1ZTsKPiA+ICsJCWRtYS0+eHQuZHN0X3NnbCA9IGZhbHNlOwo+ID4gKwo+ID4gKwkJ ZGVzYyA9IGRtYWVuZ2luZV9wcmVwX2ludGVybGVhdmVkX2N5Y2xpYyhkbWEtPmNoYW4sICZkbWEt Pnh0LAo+ID4gKwkJCQkJCQkgRE1BX0NUUkxfQUNLKTsKPiA+ICsJCWlmICghZGVzYykgewo+ID4g KwkJCWRldl9lcnIobGF5ZXItPmRpc3AtPmRldiwKPiA+ICsJCQkJImZhaWxlZCB0byBwcmVwYXJl IERNQSBkZXNjcmlwdG9yXG4iKTsKPiA+ICsJCQlyZXR1cm4gLUVOT01FTTsKPiA+ICsJCX0KPiA+ ICsKPiA+ICsJCWRtYWVuZ2luZV9zdWJtaXQoZGVzYyk7Cj4gPiArCQlkbWFfYXN5bmNfaXNzdWVf cGVuZGluZyhkbWEtPmNoYW4pOwo+ID4gKwl9Cj4gPiArCj4gPiArCXJldHVybiAwOwo+ID4gK30K PiA+ICsKPiA+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCB6eW5xbXBfZGlzcF9sYXllciAqcGxhbmVf dG9fbGF5ZXIoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCj4gPiArewo+ID4gKwlyZXR1cm4gY29u dGFpbmVyX29mKHBsYW5lLCBzdHJ1Y3QgenlucW1wX2Rpc3BfbGF5ZXIsIHBsYW5lKTsKPiA+ICt9 Cj4gPiArCj4gPiArc3RhdGljIGludAo+ID4gK3p5bnFtcF9kaXNwX3BsYW5lX2F0b21pY19jaGVj ayhzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiA+ICsJCQkgICAgICAgc3RydWN0IGRybV9wbGFu ZV9zdGF0ZSAqc3RhdGUpCj4gPiArewo+ID4gKwlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNf c3RhdGU7Cj4gPiArCj4gPiArCWlmICghc3RhdGUtPmNydGMpCj4gPiArCQlyZXR1cm4gMDsKPiA+ ICsKPiA+ICsJY3J0Y19zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X2NydGNfc3RhdGUoc3RhdGUtPnN0 YXRlLCBzdGF0ZS0+Y3J0Yyk7Cj4gPiArCWlmIChJU19FUlIoY3J0Y19zdGF0ZSkpCj4gPiArCQly ZXR1cm4gUFRSX0VSUihjcnRjX3N0YXRlKTsKPiA+ICsKPiA+ICsJcmV0dXJuIGRybV9hdG9taWNf aGVscGVyX2NoZWNrX3BsYW5lX3N0YXRlKHN0YXRlLCBjcnRjX3N0YXRlLAo+ID4gKwkJCQkJCSAg IERSTV9QTEFORV9IRUxQRVJfTk9fU0NBTElORywKPiA+ICsJCQkJCQkgICBEUk1fUExBTkVfSEVM UEVSX05PX1NDQUxJTkcsCj4gPiArCQkJCQkJICAgZmFsc2UsIGZhbHNlKTsKPiA+ICt9Cj4gPiAr Cj4gPiArc3RhdGljIHZvaWQKPiA+ICt6eW5xbXBfZGlzcF9wbGFuZV9hdG9taWNfZGlzYWJsZShz dHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiA+ICsJCQkJIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUg Km9sZF9zdGF0ZSkKPiA+ICt7Cj4gPiArCXN0cnVjdCB6eW5xbXBfZGlzcF9sYXllciAqbGF5ZXIg PSBwbGFuZV90b19sYXllcihwbGFuZSk7Cj4gPiArCj4gPiArCWlmICghb2xkX3N0YXRlLT5mYikK PiA+ICsJCXJldHVybjsKPiA+ICsKPiA+ICsJenlucW1wX2Rpc3BfbGF5ZXJfZGlzYWJsZShsYXll cik7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkCj4gPiArenlucW1wX2Rpc3BfcGxhbmVf YXRvbWljX3VwZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiA+ICsJCQkJc3RydWN0IGRy bV9wbGFuZV9zdGF0ZSAqb2xkX3N0YXRlKQo+ID4gK3sKPiA+ICsJc3RydWN0IHp5bnFtcF9kaXNw X2xheWVyICpsYXllciA9IHBsYW5lX3RvX2xheWVyKHBsYW5lKTsKPiA+ICsJYm9vbCBmb3JtYXRf Y2hhbmdlZCA9IGZhbHNlOwo+ID4gKwo+ID4gKwlpZiAoIW9sZF9zdGF0ZS0+ZmIgfHwKPiA+ICsJ ICAgIG9sZF9zdGF0ZS0+ZmItPmZvcm1hdC0+Zm9ybWF0ICE9IHBsYW5lLT5zdGF0ZS0+ZmItPmZv cm1hdC0+Zm9ybWF0KQo+ID4gKwkJZm9ybWF0X2NoYW5nZWQgPSB0cnVlOwo+ID4gKwo+ID4gKwkv Kgo+ID4gKwkgKiBJZiB0aGUgZm9ybWF0IGhhcyBjaGFuZ2VkIChpbmNsdWRpbmcgZ29pbmcgZnJv bSBhIHByZXZpb3VzbHkKPiA+ICsJICogZGlzYWJsZWQgc3RhdGUgdG8gYW55IGZvcm1hdCksIHJl Y29uZmlndXJlIHRoZSBmb3JtYXQuIERpc2FibGUgdGhlCj4gPiArCSAqIHBsYW5lIGZpcnN0IGlm IG5lZWRlZC4KPiA+ICsJICovCj4gPiArCWlmIChmb3JtYXRfY2hhbmdlZCkgewo+ID4gKwkJaWYg KG9sZF9zdGF0ZS0+ZmIpCj4gPiArCQkJenlucW1wX2Rpc3BfbGF5ZXJfZGlzYWJsZShsYXllcik7 Cj4gPiArCj4gPiArCQl6eW5xbXBfZGlzcF9sYXllcl9zZXRfZm9ybWF0KGxheWVyLCBwbGFuZS0+ c3RhdGUpOwo+ID4gKwl9Cj4gPiArCj4gPiArCXp5bnFtcF9kaXNwX2xheWVyX3VwZGF0ZShsYXll ciwgcGxhbmUtPnN0YXRlKTsKPiA+ICsKPiA+ICsJLyogRW5hYmxlIG9yIHJlLWVuYWJsZSB0aGUg cGxhbmUgaXMgdGhlIGZvcm1hdCBoYXMgY2hhbmdlZC4gKi8KPiA+ICsJaWYgKGZvcm1hdF9jaGFu Z2VkKQo+ID4gKwkJenlucW1wX2Rpc3BfbGF5ZXJfZW5hYmxlKGxheWVyKTsKPiA+ICt9Cj4gPiAr Cj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfaGVscGVyX2Z1bmNzIHp5bnFtcF9k aXNwX3BsYW5lX2hlbHBlcl9mdW5jcyA9IHsKPiA+ICsJLmF0b21pY19jaGVjawkJPSB6eW5xbXBf ZGlzcF9wbGFuZV9hdG9taWNfY2hlY2ssCj4gPiArCS5hdG9taWNfdXBkYXRlCQk9IHp5bnFtcF9k aXNwX3BsYW5lX2F0b21pY191cGRhdGUsCj4gPiArCS5hdG9taWNfZGlzYWJsZQkJPSB6eW5xbXBf ZGlzcF9wbGFuZV9hdG9taWNfZGlzYWJsZSwKPiA+ICt9Owo+ID4gKwo+ID4gK3N0YXRpYyBjb25z dCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNzIHp5bnFtcF9kaXNwX3BsYW5lX2Z1bmNzID0gewo+ID4g KwkudXBkYXRlX3BsYW5lCQk9IGRybV9hdG9taWNfaGVscGVyX3VwZGF0ZV9wbGFuZSwKPiA+ICsJ LmRpc2FibGVfcGxhbmUJCT0gZHJtX2F0b21pY19oZWxwZXJfZGlzYWJsZV9wbGFuZSwKPiA+ICsJ LmRlc3Ryb3kJCT0gZHJtX3BsYW5lX2NsZWFudXAsCj4gPiArCS5yZXNldAkJCT0gZHJtX2F0b21p Y19oZWxwZXJfcGxhbmVfcmVzZXQsCj4gPiArCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlCT0gZHJt X2F0b21pY19oZWxwZXJfcGxhbmVfZHVwbGljYXRlX3N0YXRlLAo+ID4gKwkuYXRvbWljX2Rlc3Ry b3lfc3RhdGUJPSBkcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kZXN0cm95X3N0YXRlLAo+ID4gK307 Cj4gPiArCj4gPiArc3RhdGljIGludCB6eW5xbXBfZGlzcF9jcmVhdGVfcGxhbmVzKHN0cnVjdCB6 eW5xbXBfZGlzcCAqZGlzcCkKPiA+ICt7Cj4gPiArCXVuc2lnbmVkIGludCBpLCBqOwo+ID4gKwlp bnQgcmV0Owo+ID4gKwo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgWllOUU1QX0RJU1BfTlVNX0xBWUVS UzsgaSsrKSB7Cj4gPiArCQlzdHJ1Y3QgenlucW1wX2Rpc3BfbGF5ZXIgKmxheWVyID0gJmRpc3At PmxheWVyc1tpXTsKPiA+ICsJCWVudW0gZHJtX3BsYW5lX3R5cGUgdHlwZTsKPiA+ICsJCXUzMiAq ZHJtX2Zvcm1hdHM7Cj4gPiArCj4gPiArCQlkcm1fZm9ybWF0cyA9IGRldm1fa2NhbGxvYyhkaXNw LT5kZXYsIHNpemVvZigqZHJtX2Zvcm1hdHMpLAo+ID4gKwkJCQkJICAgbGF5ZXItPmluZm8tPm51 bV9mb3JtYXRzLAo+ID4gKwkJCQkJICAgR0ZQX0tFUk5FTCk7Cj4KPiBJICp0aGluayogdGhlcmUg aXMgYSBsaWZlLXRpbWUgaXNzdWUgd2l0aCBkcm1fZm9ybWF0cy4KPiBCdXQgdGhhdCBpcyBmaXhh YmxlIHdpdGggZHJtbV9rY2FsbG9jKCkKCk9uY2UgaXQgbGFuZHMgOi0pIEknbGwgZml4IGl0IGFu eXdheS4KCj4gPiArCQlpZiAoIWRybV9mb3JtYXRzKQo+ID4gKwkJCXJldHVybiAtRU5PTUVNOwo+ ID4gKwo+ID4gKwkJZm9yIChqID0gMDsgaiA8IGxheWVyLT5pbmZvLT5udW1fZm9ybWF0czsgKytq KQo+ID4gKwkJCWRybV9mb3JtYXRzW2pdID0gbGF5ZXItPmluZm8tPmZvcm1hdHNbal0uZHJtX2Zt dDsKPiA+ICsKPiA+ICsJCS8qIEdyYXBoaWNzIGxheWVyIGlzIHByaW1hcnksIGFuZCB2aWRlbyBs YXllciBpcyBvdmVybGF5LiAqLwo+ID4gKwkJdHlwZSA9IGkgPT0gWllOUU1QX0RJU1BfTEFZRVJf R0ZYCj4gPiArCQkgICAgID8gRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSA6IERSTV9QTEFORV9UWVBF X09WRVJMQVk7Cj4gPiArCQlyZXQgPSBkcm1fdW5pdmVyc2FsX3BsYW5lX2luaXQoZGlzcC0+ZHJt LCAmbGF5ZXItPnBsYW5lLCAwLAo+ID4gKwkJCQkJICAgICAgICZ6eW5xbXBfZGlzcF9wbGFuZV9m dW5jcywKPiA+ICsJCQkJCSAgICAgICBkcm1fZm9ybWF0cywKPiA+ICsJCQkJCSAgICAgICBsYXll ci0+aW5mby0+bnVtX2Zvcm1hdHMsCj4gPiArCQkJCQkgICAgICAgTlVMTCwgdHlwZSwgTlVMTCk7 Cj4gPiArCQlpZiAocmV0KQo+ID4gKwkJCXJldHVybiByZXQ7Cj4gPiArCj4gPiArCQlkcm1fcGxh bmVfaGVscGVyX2FkZCgmbGF5ZXItPnBsYW5lLAo+ID4gKwkJCQkgICAgICZ6eW5xbXBfZGlzcF9w bGFuZV9oZWxwZXJfZnVuY3MpOwo+ID4gKwl9Cj4gPiArCj4gPiArCXJldHVybiAwOwo+ID4gK30K PiA+ICsKPiA+ICsvKioKPiA+ICsgKiB6eW5xbXBfZGlzcF9sYXllcl9yZWxlYXNlX2RtYSAtIFJl bGVhc2UgRE1BIGNoYW5uZWxzIGZvciBhIGxheWVyCj4gPiArICogQGRpc3A6IERpc3BsYXkgY29u dHJvbGxlcgo+ID4gKyAqIEBsYXllcjogVGhlIGxheWVyCj4gPiArICoKPiA+ICsgKiBSZWxlYXNl IHRoZSBETUEgY2hhbm5lbHMgYXNzb2NpYXRlZCB3aXRoIEBsYXllci4KPiA+ICsgKi8KPiA+ICtz dGF0aWMgdm9pZCB6eW5xbXBfZGlzcF9sYXllcl9yZWxlYXNlX2RtYShzdHJ1Y3QgenlucW1wX2Rp c3AgKmRpc3AsCj4gPiArCQkJCQkgIHN0cnVjdCB6eW5xbXBfZGlzcF9sYXllciAqbGF5ZXIpCj4g PiArewo+ID4gKwl1bnNpZ25lZCBpbnQgaTsKPiA+ICsKPiA+ICsJaWYgKCFsYXllci0+aW5mbykK PiA+ICsJCXJldHVybjsKPiA+ICsKPiA+ICsJZm9yIChpID0gMDsgaSA8IGxheWVyLT5pbmZvLT5u dW1fY2hhbm5lbHM7IGkrKykgewo+ID4gKwkJc3RydWN0IHp5bnFtcF9kaXNwX2xheWVyX2RtYSAq ZG1hID0gJmxheWVyLT5kbWFzW2ldOwo+ID4gKwo+ID4gKwkJaWYgKCFkbWEtPmNoYW4pCj4gPiAr CQkJY29udGludWU7Cj4gPiArCj4gPiArCQkvKiBNYWtlIHN1cmUgdGhlIGNoYW5uZWwgaXMgdGVy bWluYXRlZCBiZWZvcmUgcmVsZWFzZS4gKi8KPiA+ICsJCWRtYWVuZ2luZV90ZXJtaW5hdGVfc3lu YyhkbWEtPmNoYW4pOwo+ID4gKwkJZG1hX3JlbGVhc2VfY2hhbm5lbChkbWEtPmNoYW4pOwo+ID4g Kwl9Cj4gPiArfQo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIHp5bnFtcF9kaXNwX2Rlc3Ryb3lfbGF5 ZXJzIC0gRGVzdHJveSBhbGwgbGF5ZXJzCj4gPiArICogQGRpc3A6IERpc3BsYXkgY29udHJvbGxl cgo+ID4gKyAqLwo+ID4gK3N0YXRpYyB2b2lkIHp5bnFtcF9kaXNwX2Rlc3Ryb3lfbGF5ZXJzKHN0 cnVjdCB6eW5xbXBfZGlzcCAqZGlzcCkKPiA+ICt7Cj4gPiArCXVuc2lnbmVkIGludCBpOwo+ID4g Kwo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgWllOUU1QX0RJU1BfTlVNX0xBWUVSUzsgaSsrKQo+ID4g KwkJenlucW1wX2Rpc3BfbGF5ZXJfcmVsZWFzZV9kbWEoZGlzcCwgJmRpc3AtPmxheWVyc1tpXSk7 Cj4gPiArfQo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIHp5bnFtcF9kaXNwX2xheWVyX3JlcXVlc3Rf ZG1hIC0gUmVxdWVzdCBETUEgY2hhbm5lbHMgZm9yIGEgbGF5ZXIKPiA+ICsgKiBAZGlzcDogRGlz cGxheSBjb250cm9sbGVyCj4gPiArICogQGxheWVyOiBUaGUgbGF5ZXIKPiA+ICsgKgo+ID4gKyAq IFJlcXVlc3QgYWxsIERNQSBlbmdpbmUgY2hhbm5lbHMgbmVlZGVkIGJ5IEBsYXllci4KPiA+ICsg Kgo+ID4gKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciB0aGUgRE1BIGNoYW5uZWwgcmVxdWVz dCBlcnJvciBvdGhlcndpc2UKPiA+ICsgKi8KPiA+ICtzdGF0aWMgaW50IHp5bnFtcF9kaXNwX2xh eWVyX3JlcXVlc3RfZG1hKHN0cnVjdCB6eW5xbXBfZGlzcCAqZGlzcCwKPiA+ICsJCQkJCSBzdHJ1 Y3QgenlucW1wX2Rpc3BfbGF5ZXIgKmxheWVyKQo+ID4gK3sKPiA+ICsJc3RhdGljIGNvbnN0IGNo YXIgKiBjb25zdCBkbWFfbmFtZXNbXSA9IHsgInZpZCIsICJnZngiIH07Cj4gPiArCXVuc2lnbmVk IGludCBpOwo+ID4gKwlpbnQgcmV0Owo+ID4gKwo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgbGF5ZXIt PmluZm8tPm51bV9jaGFubmVsczsgaSsrKSB7Cj4gPiArCQlzdHJ1Y3QgenlucW1wX2Rpc3BfbGF5 ZXJfZG1hICpkbWEgPSAmbGF5ZXItPmRtYXNbaV07Cj4gPiArCQljaGFyIGRtYV9jaGFubmVsX25h bWVbMTZdOwo+ID4gKwo+ID4gKwkJc25wcmludGYoZG1hX2NoYW5uZWxfbmFtZSwgc2l6ZW9mKGRt YV9jaGFubmVsX25hbWUpLAo+ID4gKwkJCSAiJXMldSIsIGRtYV9uYW1lc1tsYXllci0+aWRdLCBp KTsKPiA+ICsJCWRtYS0+Y2hhbiA9IG9mX2RtYV9yZXF1ZXN0X3NsYXZlX2NoYW5uZWwoZGlzcC0+ ZGV2LT5vZl9ub2RlLAo+ID4gKwkJCQkJCQkgZG1hX2NoYW5uZWxfbmFtZSk7Cj4gPiArCQlpZiAo SVNfRVJSKGRtYS0+Y2hhbikpIHsKPiA+ICsJCQlkZXZfZXJyKGRpc3AtPmRldiwgImZhaWxlZCB0 byByZXF1ZXN0IGRtYSBjaGFubmVsXG4iKTsKPiA+ICsJCQlyZXQgPSBQVFJfRVJSKGRtYS0+Y2hh bik7Cj4gPiArCQkJZG1hLT5jaGFuID0gTlVMTDsKPiA+ICsJCQlyZXR1cm4gcmV0Owo+ID4gKwkJ fQo+ID4gKwl9Cj4gPiArCj4gPiArCXJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICsvKioKPiA+ ICsgKiB6eW5xbXBfZGlzcF9jcmVhdGVfbGF5ZXJzIC0gQ3JlYXRlIGFsbCBsYXllcnMKPiA+ICsg KiBAZGlzcDogRGlzcGxheSBjb250cm9sbGVyCj4gPiArICoKPiA+ICsgKiBSZXR1cm46IDAgb24g c3VjY2Vzcywgb3IgdGhlIERNQSBjaGFubmVsIHJlcXVlc3QgZXJyb3Igb3RoZXJ3aXNlCj4gPiAr ICovCj4gPiArc3RhdGljIGludCB6eW5xbXBfZGlzcF9jcmVhdGVfbGF5ZXJzKHN0cnVjdCB6eW5x bXBfZGlzcCAqZGlzcCkKPiA+ICt7Cj4gPiArCXN0YXRpYyBjb25zdCBzdHJ1Y3QgenlucW1wX2Rp c3BfbGF5ZXJfaW5mbyBsYXllcl9pbmZvW10gPSB7Cj4gPiArCQlbWllOUU1QX0RJU1BfTEFZRVJf VklEXSA9IHsKPiA+ICsJCQkuZm9ybWF0cyA9IGF2YnVmX3ZpZF9mbXRzLAo+ID4gKwkJCS5udW1f Zm9ybWF0cyA9IEFSUkFZX1NJWkUoYXZidWZfdmlkX2ZtdHMpLAo+ID4gKwkJCS5udW1fY2hhbm5l bHMgPSAzLAo+ID4gKwkJfSwKPiA+ICsJCVtaWU5RTVBfRElTUF9MQVlFUl9HRlhdID0gewo+ID4g KwkJCS5mb3JtYXRzID0gYXZidWZfZ2Z4X2ZtdHMsCj4gPiArCQkJLm51bV9mb3JtYXRzID0gQVJS QVlfU0laRShhdmJ1Zl9nZnhfZm10cyksCj4gPiArCQkJLm51bV9jaGFubmVscyA9IDEsCj4gPiAr CQl9LAo+ID4gKwl9Owo+ID4gKwo+ID4gKwl1bnNpZ25lZCBpbnQgaTsKPiA+ICsJaW50IHJldDsK PiA+ICsKPiA+ICsJZm9yIChpID0gMDsgaSA8IFpZTlFNUF9ESVNQX05VTV9MQVlFUlM7IGkrKykg ewo+ID4gKwkJc3RydWN0IHp5bnFtcF9kaXNwX2xheWVyICpsYXllciA9ICZkaXNwLT5sYXllcnNb aV07Cj4gPiArCj4gPiArCQlsYXllci0+aWQgPSBpOwo+ID4gKwkJbGF5ZXItPmRpc3AgPSBkaXNw Owo+ID4gKwkJbGF5ZXItPmluZm8gPSAmbGF5ZXJfaW5mb1tpXTsKPiA+ICsKPiA+ICsJCXJldCA9 IHp5bnFtcF9kaXNwX2xheWVyX3JlcXVlc3RfZG1hKGRpc3AsIGxheWVyKTsKPiA+ICsJCWlmIChy ZXQpCj4gPiArCQkJZ290byBlcnI7Cj4gPiArCX0KPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiAr Cj4gPiArZXJyOgo+ID4gKwl6eW5xbXBfZGlzcF9kZXN0cm95X2xheWVycyhkaXNwKTsKPiA+ICsJ cmV0dXJuIHJldDsKPiA+ICt9Cj4gPiArCj4gPiArLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiA+ ICsgKiBaeW5xTVAgRGlzcGxheSAmIERSTSBDUlRDCj4gPiArICovCj4gPiArCj4gPiArLyoqCj4g PiArICogenlucW1wX2Rpc3BfZW5hYmxlIC0gRW5hYmxlIHRoZSBkaXNwbGF5IGNvbnRyb2xsZXIK PiA+ICsgKiBAZGlzcDogRGlzcGxheSBjb250cm9sbGVyCj4gPiArICovCj4gPiArc3RhdGljIHZv aWQgenlucW1wX2Rpc3BfZW5hYmxlKHN0cnVjdCB6eW5xbXBfZGlzcCAqZGlzcCkKPiA+ICt7Cj4g PiArCXp5bnFtcF9kaXNwX2F2YnVmX2VuYWJsZSgmZGlzcC0+YXZidWYpOwo+ID4gKwkvKiBDaG9v c2UgY2xvY2sgc291cmNlIGJhc2VkIG9uIHRoZSBEVCBjbG9jayBoYW5kbGUuICovCj4gPiArCXp5 bnFtcF9kaXNwX2F2YnVmX3NldF9jbG9ja3Nfc291cmNlcygmZGlzcC0+YXZidWYsICEhZGlzcC0+ X3BzX3BjbGssCj4gPiArCQkJCQkgICAgICEhZGlzcC0+YXVkaW8uX3BzX2NsaywgdHJ1ZSk7Cj4g PiArCXp5bnFtcF9kaXNwX2F2YnVmX2VuYWJsZV9jaGFubmVscygmZGlzcC0+YXZidWYpOwo+ID4g Kwl6eW5xbXBfZGlzcF9hdmJ1Zl9lbmFibGVfYXVkaW8oJmRpc3AtPmF2YnVmKTsKPiA+ICsKPiA+ ICsJenlucW1wX2Rpc3BfYXVkaW9fZW5hYmxlKCZkaXNwLT5hdWRpbyk7Cj4gPiArfQo+ID4gKwo+ ID4gKy8qKgo+ID4gKyAqIHp5bnFtcF9kaXNwX2Rpc2FibGUgLSBEaXNhYmxlIHRoZSBkaXNwbGF5 IGNvbnRyb2xsZXIKPiA+ICsgKiBAZGlzcDogRGlzcGxheSBjb250cm9sbGVyCj4gPiArICovCj4g PiArc3RhdGljIHZvaWQgenlucW1wX2Rpc3BfZGlzYWJsZShzdHJ1Y3QgenlucW1wX2Rpc3AgKmRp c3ApCj4gPiArewo+ID4gKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSAmZGlzcC0+Y3J0YzsKPiA+ ICsKPiA+ICsJenlucW1wX2Rpc3BfYXVkaW9fZGlzYWJsZSgmZGlzcC0+YXVkaW8pOwo+ID4gKwo+ ID4gKwl6eW5xbXBfZGlzcF9hdmJ1Zl9kaXNhYmxlX2F1ZGlvKCZkaXNwLT5hdmJ1Zik7Cj4gPiAr CXp5bnFtcF9kaXNwX2F2YnVmX2Rpc2FibGVfY2hhbm5lbHMoJmRpc3AtPmF2YnVmKTsKPiA+ICsJ enlucW1wX2Rpc3BfYXZidWZfZGlzYWJsZSgmZGlzcC0+YXZidWYpOwo+ID4gKwo+ID4gKwkvKiBN YXJrIHRoZSBmbGlwIGlzIGRvbmUgYXMgY3J0YyBpcyBkaXNhYmxlZCBhbnl3YXkgKi8KPiA+ICsJ aWYgKGNydGMtPnN0YXRlLT5ldmVudCkgewo+ID4gKwkJY29tcGxldGVfYWxsKGNydGMtPnN0YXRl LT5ldmVudC0+YmFzZS5jb21wbGV0aW9uKTsKPiA+ICsJCWNydGMtPnN0YXRlLT5ldmVudCA9IE5V TEw7Cj4gPiArCX0KPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGlubGluZSBzdHJ1Y3QgenlucW1w X2Rpc3AgKmNydGNfdG9fZGlzcChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gPiArewo+ID4gKwly ZXR1cm4gY29udGFpbmVyX29mKGNydGMsIHN0cnVjdCB6eW5xbXBfZGlzcCwgY3J0Yyk7Cj4gPiAr fQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgenlucW1wX2Rpc3BfY3J0Y19zZXR1cF9jbG9jayhzdHJ1 Y3QgZHJtX2NydGMgKmNydGMsCj4gPiArCQkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRq dXN0ZWRfbW9kZSkKPiA+ICt7Cj4gPiArCXN0cnVjdCB6eW5xbXBfZGlzcCAqZGlzcCA9IGNydGNf dG9fZGlzcChjcnRjKTsKPiA+ICsJdW5zaWduZWQgbG9uZyBtb2RlX2Nsb2NrID0gYWRqdXN0ZWRf bW9kZS0+Y2xvY2sgKiAxMDAwOwo+ID4gKwl1bnNpZ25lZCBsb25nIHJhdGU7Cj4gPiArCWxvbmcg ZGlmZjsKPiA+ICsJaW50IHJldDsKPiA+ICsKPiA+ICsJcmV0ID0gY2xrX3NldF9yYXRlKGRpc3At PnBjbGssIG1vZGVfY2xvY2spOwo+ID4gKwlpZiAocmV0KSB7Cj4gPiArCQlkZXZfZXJyKGRpc3At PmRldiwgImZhaWxlZCB0byBzZXQgYSBwaXhlbCBjbG9ja1xuIik7Cj4gPiArCQlyZXR1cm4gcmV0 Owo+ID4gKwl9Cj4gPiArCj4gPiArCXJhdGUgPSBjbGtfZ2V0X3JhdGUoZGlzcC0+cGNsayk7Cj4g PiArCWRpZmYgPSByYXRlIC0gbW9kZV9jbG9jazsKPiA+ICsJaWYgKGFicyhkaWZmKSA+IG1vZGVf Y2xvY2sgLyAyMCkKPiA+ICsJCWRldl9pbmZvKGRpc3AtPmRldiwKPiA+ICsJCQkgInJlcXVlc3Rl ZCBwaXhlbCByYXRlOiAlbHUgYWN0dWFsIHJhdGU6ICVsdVxuIiwKPiA+ICsJCQkgbW9kZV9jbG9j aywgcmF0ZSk7Cj4gPiArCWVsc2UKPiA+ICsJCWRldl9kYmcoZGlzcC0+ZGV2LAo+ID4gKwkJCSJy ZXF1ZXN0ZWQgcGl4ZWwgcmF0ZTogJWx1IGFjdHVhbCByYXRlOiAlbHVcbiIsCj4gPiArCQkJbW9k ZV9jbG9jaywgcmF0ZSk7Cj4gPiArCj4gPiArCXJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtz dGF0aWMgdm9pZAo+ID4gK3p5bnFtcF9kaXNwX2NydGNfYXRvbWljX2VuYWJsZShzdHJ1Y3QgZHJt X2NydGMgKmNydGMsCj4gPiArCQkJICAgICAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqb2xkX2Ny dGNfc3RhdGUpCj4gPiArewo+ID4gKwlzdHJ1Y3QgenlucW1wX2Rpc3AgKmRpc3AgPSBjcnRjX3Rv X2Rpc3AoY3J0Yyk7Cj4gPiArCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2Rl ID0gJmNydGMtPnN0YXRlLT5hZGp1c3RlZF9tb2RlOwo+ID4gKwlpbnQgcmV0LCB2cmVmcmVzaDsK PiA+ICsKPiA+ICsJenlucW1wX2Rpc3BfY3J0Y19zZXR1cF9jbG9jayhjcnRjLCBhZGp1c3RlZF9t b2RlKTsKPiA+ICsKPiA+ICsJcG1fcnVudGltZV9nZXRfc3luYyhkaXNwLT5kZXYpOwo+ID4gKwly ZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoZGlzcC0+cGNsayk7Cj4gPiArCWlmIChyZXQpIHsKPiA+ ICsJCWRldl9lcnIoZGlzcC0+ZGV2LCAiZmFpbGVkIHRvIGVuYWJsZSBhIHBpeGVsIGNsb2NrXG4i KTsKPiA+ICsJCXBtX3J1bnRpbWVfcHV0X3N5bmMoZGlzcC0+ZGV2KTsKPiA+ICsJCXJldHVybjsK PiA+ICsJfQo+ID4gKwo+ID4gKwl6eW5xbXBfZGlzcF9ibGVuZF9zZXRfb3V0cHV0X2Zvcm1hdCgm ZGlzcC0+YmxlbmQsCj4gPiArCQkJCQkgICAgWllOUU1QX0RQU1VCX0ZPUk1BVF9SR0IpOwo+ID4g Kwl6eW5xbXBfZGlzcF9ibGVuZF9zZXRfYmdfY29sb3IoJmRpc3AtPmJsZW5kLCAwLCAwLCAwKTsK PiA+ICsJenlucW1wX2Rpc3BfYmxlbmRfc2V0X2dsb2JhbF9hbHBoYSgmZGlzcC0+YmxlbmQsIGZh bHNlLCAwKTsKPiA+ICsKPiA+ICsJenlucW1wX2Rpc3BfZW5hYmxlKGRpc3ApOwo+ID4gKwo+ID4g KwkvKiBEZWxheSBvZiAzIHZibGFuayBpbnRlcnZhbHMgZm9yIHRpbWluZyBnZW4gdG8gYmUgc3Rh YmxlICovCj4gPiArCXZyZWZyZXNoID0gKGFkanVzdGVkX21vZGUtPmNsb2NrICogMTAwMCkgLwo+ ID4gKwkJICAgKGFkanVzdGVkX21vZGUtPnZ0b3RhbCAqIGFkanVzdGVkX21vZGUtPmh0b3RhbCk7 Cj4gPiArCW1zbGVlcCgzICogMTAwMCAvIHZyZWZyZXNoKTsKPiA+ICt9Cj4gPiArCj4gPiArc3Rh dGljIHZvaWQKPiA+ICt6eW5xbXBfZGlzcF9jcnRjX2F0b21pY19kaXNhYmxlKHN0cnVjdCBkcm1f Y3J0YyAqY3J0YywKPiA+ICsJCQkJc3RydWN0IGRybV9jcnRjX3N0YXRlICpvbGRfY3J0Y19zdGF0 ZSkKPiA+ICt7Cj4gPiArCXN0cnVjdCB6eW5xbXBfZGlzcCAqZGlzcCA9IGNydGNfdG9fZGlzcChj cnRjKTsKPiA+ICsJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqb2xkX3BsYW5lX3N0YXRlOwo+ID4g Kwo+ID4gKwkvKgo+ID4gKwkgKiBEaXNhYmxlIHRoZSBwbGFuZSBpZiBhY3RpdmUuIFRoZSBvbGQg cGxhbmUgc3RhdGUgY2FuIGJlIE5VTEwgaW4gdGhlCj4gPiArCSAqIC5zaHV0ZG93bigpIHBhdGgg aWYgdGhlIHBsYW5lIGlzIGFscmVhZHkgZGlzYWJsZWQsIHNraXAKPiA+ICsJICogenlucW1wX2Rp c3BfcGxhbmVfYXRvbWljX2Rpc2FibGUoKSBpbiB0aGF0IGNhc2UuCj4gPiArCSAqLwo+ID4gKwlv bGRfcGxhbmVfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9vbGRfcGxhbmVfc3RhdGUob2xkX2NydGNf c3RhdGUtPnN0YXRlLAo+ID4gKwkJCQkJCQkgY3J0Yy0+cHJpbWFyeSk7Cj4gPiArCWlmIChvbGRf cGxhbmVfc3RhdGUpCj4gPiArCQl6eW5xbXBfZGlzcF9wbGFuZV9hdG9taWNfZGlzYWJsZShjcnRj LT5wcmltYXJ5LCBvbGRfcGxhbmVfc3RhdGUpOwo+ID4gKwo+ID4gKwl6eW5xbXBfZGlzcF9kaXNh YmxlKGRpc3ApOwo+ID4gKwo+ID4gKwlkcm1fY3J0Y192Ymxhbmtfb2ZmKCZkaXNwLT5jcnRjKTsK PiA+ICsKPiA+ICsJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRpc3AtPnBjbGspOwo+ID4gKwlwbV9y dW50aW1lX3B1dF9zeW5jKGRpc3AtPmRldik7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQg enlucW1wX2Rpc3BfY3J0Y19hdG9taWNfY2hlY2soc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ID4g KwkJCQkJIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUpCj4gPiArewo+ID4gKwlyZXR1cm4g ZHJtX2F0b21pY19hZGRfYWZmZWN0ZWRfcGxhbmVzKHN0YXRlLT5zdGF0ZSwgY3J0Yyk7Cj4gPiAr fQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkCj4gPiArenlucW1wX2Rpc3BfY3J0Y19hdG9taWNfYmVn aW4oc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ID4gKwkJCSAgICAgIHN0cnVjdCBkcm1fY3J0Y19z dGF0ZSAqb2xkX2NydGNfc3RhdGUpCj4gPiArewo+ID4gKwlkcm1fY3J0Y192Ymxhbmtfb24oY3J0 Yyk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkCj4gPiArenlucW1wX2Rpc3BfY3J0Y19h dG9taWNfZmx1c2goc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ID4gKwkJCSAgICAgIHN0cnVjdCBk cm1fY3J0Y19zdGF0ZSAqb2xkX2NydGNfc3RhdGUpCj4gPiArewo+ID4gKwlpZiAoY3J0Yy0+c3Rh dGUtPmV2ZW50KSB7Cj4gPiArCQlzdHJ1Y3QgZHJtX3BlbmRpbmdfdmJsYW5rX2V2ZW50ICpldmVu dDsKPiA+ICsKPiA+ICsJCS8qIENvbnN1bWUgdGhlIGZsaXBfZG9uZSBldmVudCBmcm9tIGF0b21p YyBoZWxwZXIuICovCj4gPiArCQlldmVudCA9IGNydGMtPnN0YXRlLT5ldmVudDsKPiA+ICsJCWNy dGMtPnN0YXRlLT5ldmVudCA9IE5VTEw7Cj4gPiArCj4gPiArCQlldmVudC0+cGlwZSA9IGRybV9j cnRjX2luZGV4KGNydGMpOwo+ID4gKwo+ID4gKwkJV0FSTl9PTihkcm1fY3J0Y192YmxhbmtfZ2V0 KGNydGMpICE9IDApOwo+ID4gKwo+ID4gKwkJc3Bpbl9sb2NrX2lycSgmY3J0Yy0+ZGV2LT5ldmVu dF9sb2NrKTsKPiA+ICsJCWRybV9jcnRjX2FybV92YmxhbmtfZXZlbnQoY3J0YywgZXZlbnQpOwo+ ID4gKwkJc3Bpbl91bmxvY2tfaXJxKCZjcnRjLT5kZXYtPmV2ZW50X2xvY2spOwo+ID4gKwl9Cj4g PiArfQo+ID4gKwo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNz IHp5bnFtcF9kaXNwX2NydGNfaGVscGVyX2Z1bmNzID0gewo+ID4gKwkuYXRvbWljX2VuYWJsZQk9 IHp5bnFtcF9kaXNwX2NydGNfYXRvbWljX2VuYWJsZSwKPiA+ICsJLmF0b21pY19kaXNhYmxlCT0g enlucW1wX2Rpc3BfY3J0Y19hdG9taWNfZGlzYWJsZSwKPiA+ICsJLmF0b21pY19jaGVjawk9IHp5 bnFtcF9kaXNwX2NydGNfYXRvbWljX2NoZWNrLAo+ID4gKwkuYXRvbWljX2JlZ2luCT0genlucW1w X2Rpc3BfY3J0Y19hdG9taWNfYmVnaW4sCj4gPiArCS5hdG9taWNfZmx1c2gJPSB6eW5xbXBfZGlz cF9jcnRjX2F0b21pY19mbHVzaCwKPiA+ICt9Owo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgenlucW1w X2Rpc3BfY3J0Y19lbmFibGVfdmJsYW5rKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiA+ICt7Cj4g PiArCXN0cnVjdCB6eW5xbXBfZGlzcCAqZGlzcCA9IGNydGNfdG9fZGlzcChjcnRjKTsKPiA+ICsK PiA+ICsJenlucW1wX2RwX2VuYWJsZV92YmxhbmsoZGlzcC0+ZHBzdWItPmRwKTsKPiA+ICsKPiA+ ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIHp5bnFtcF9kaXNwX2Ny dGNfZGlzYWJsZV92Ymxhbmsoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ID4gK3sKPiA+ICsJc3Ry dWN0IHp5bnFtcF9kaXNwICpkaXNwID0gY3J0Y190b19kaXNwKGNydGMpOwo+ID4gKwo+ID4gKwl6 eW5xbXBfZHBfZGlzYWJsZV92YmxhbmsoZGlzcC0+ZHBzdWItPmRwKTsKPiA+ICt9Cj4gPiArCj4g PiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19mdW5jcyB6eW5xbXBfZGlzcF9jcnRjX2Z1 bmNzID0gewo+ID4gKwkuZGVzdHJveQkJPSBkcm1fY3J0Y19jbGVhbnVwLAo+ID4gKwkuc2V0X2Nv bmZpZwkJPSBkcm1fYXRvbWljX2hlbHBlcl9zZXRfY29uZmlnLAo+ID4gKwkucGFnZV9mbGlwCQk9 IGRybV9hdG9taWNfaGVscGVyX3BhZ2VfZmxpcCwKPiA+ICsJLnJlc2V0CQkJPSBkcm1fYXRvbWlj X2hlbHBlcl9jcnRjX3Jlc2V0LAo+ID4gKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZQk9IGRybV9h dG9taWNfaGVscGVyX2NydGNfZHVwbGljYXRlX3N0YXRlLAo+ID4gKwkuYXRvbWljX2Rlc3Ryb3lf c3RhdGUJPSBkcm1fYXRvbWljX2hlbHBlcl9jcnRjX2Rlc3Ryb3lfc3RhdGUsCj4gPiArCS5lbmFi bGVfdmJsYW5rCQk9IHp5bnFtcF9kaXNwX2NydGNfZW5hYmxlX3ZibGFuaywKPiA+ICsJLmRpc2Fi bGVfdmJsYW5rCQk9IHp5bnFtcF9kaXNwX2NydGNfZGlzYWJsZV92YmxhbmssCj4gPiArfTsKPiA+ ICsKPiA+ICtzdGF0aWMgaW50IHp5bnFtcF9kaXNwX2NyZWF0ZV9jcnRjKHN0cnVjdCB6eW5xbXBf ZGlzcCAqZGlzcCkKPiA+ICt7Cj4gPiArCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lID0gJmRpc3At PmxheWVyc1taWU5RTVBfRElTUF9MQVlFUl9HRlhdLnBsYW5lOwo+ID4gKwlpbnQgcmV0Owo+ID4g Kwo+ID4gKwlyZXQgPSBkcm1fY3J0Y19pbml0X3dpdGhfcGxhbmVzKGRpc3AtPmRybSwgJmRpc3At PmNydGMsIHBsYW5lLAo+ID4gKwkJCQkJTlVMTCwgJnp5bnFtcF9kaXNwX2NydGNfZnVuY3MsIE5V TEwpOwo+ID4gKwlpZiAocmV0IDwgMCkKPiA+ICsJCXJldHVybiByZXQ7Cj4gPiArCj4gPiArCWRy bV9jcnRjX2hlbHBlcl9hZGQoJmRpc3AtPmNydGMsICZ6eW5xbXBfZGlzcF9jcnRjX2hlbHBlcl9m dW5jcyk7Cj4gPiArCj4gPiArCS8qIFN0YXJ0IHdpdGggdmVydGljYWwgYmxhbmtpbmcgaW50ZXJy dXB0IHJlcG9ydGluZyBkaXNhYmxlZC4gKi8KPiA+ICsJZHJtX2NydGNfdmJsYW5rX29mZigmZGlz cC0+Y3J0Yyk7Cj4gPiArCj4gPiArCXJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMg dm9pZCB6eW5xbXBfZGlzcF9tYXBfY3J0Y190b19wbGFuZShzdHJ1Y3QgenlucW1wX2Rpc3AgKmRp c3ApCj4gPiArewo+ID4gKwl1MzIgcG9zc2libGVfY3J0Y3MgPSBkcm1fY3J0Y19tYXNrKCZkaXNw LT5jcnRjKTsKPiA+ICsJdW5zaWduZWQgaW50IGk7Cj4gPiArCj4gPiArCWZvciAoaSA9IDA7IGkg PCBaWU5RTVBfRElTUF9OVU1fTEFZRVJTOyBpKyspCj4gPiArCQlkaXNwLT5sYXllcnNbaV0ucGxh bmUucG9zc2libGVfY3J0Y3MgPSBwb3NzaWJsZV9jcnRjczsKPiA+ICt9Cj4gPiArCj4gPiArLyog LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KPiA+ICsgKiBJbml0aWFsaXphdGlvbiAmIENsZWFudXAKPiA+ ICsgKi8KPiA+ICsKPiA+ICtpbnQgenlucW1wX2Rpc3BfaW5pdChzdHJ1Y3QgenlucW1wX2Rwc3Vi ICpkcHN1Yiwgc3RydWN0IGRybV9kZXZpY2UgKmRybSkKPiA+ICt7Cj4gPiArCXN0cnVjdCB6eW5x bXBfZGlzcCAqZGlzcCA9IGRwc3ViLT5kaXNwOwo+ID4gKwlpbnQgcmV0Owo+ID4gKwo+ID4gKwlk aXNwLT5kcm0gPSBkcm07Cj4gPiArCj4gPiArCXJldCA9IHp5bnFtcF9kaXNwX2NyZWF0ZV9wbGFu ZXMoZGlzcCk7Cj4gPiArCWlmIChyZXQpCj4gPiArCQlyZXR1cm4gcmV0Owo+ID4gKwo+ID4gKwly ZXQgPSB6eW5xbXBfZGlzcF9jcmVhdGVfY3J0YyhkaXNwKTsKPiA+ICsJaWYgKHJldCA8IDApCj4g PiArCQlyZXR1cm4gcmV0Owo+ID4gKwo+ID4gKwl6eW5xbXBfZGlzcF9tYXBfY3J0Y190b19wbGFu ZShkaXNwKTsKPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK2ludCB6eW5x bXBfZGlzcF9wcm9iZShzdHJ1Y3QgenlucW1wX2Rwc3ViICpkcHN1Yiwgc3RydWN0IHBsYXRmb3Jt X2RldmljZSAqcGRldikKPiA+ICt7Cj4gPiArCXN0cnVjdCB6eW5xbXBfZGlzcCAqZGlzcDsKPiA+ ICsJc3RydWN0IHp5bnFtcF9kaXNwX2xheWVyICpsYXllcjsKPiA+ICsJc3RydWN0IHJlc291cmNl ICpyZXM7Cj4gPiArCWludCByZXQ7Cj4gPiArCj4gPiArCWRpc3AgPSBkZXZtX2t6YWxsb2MoJnBk ZXYtPmRldiwgc2l6ZW9mKCpkaXNwKSwgR0ZQX0tFUk5FTCk7Cj4gPiArCWlmICghZGlzcCkKPiA+ ICsJCXJldHVybiAtRU5PTUVNOwo+ID4gKwlkaXNwLT5kZXYgPSAmcGRldi0+ZGV2Owo+ID4gKwo+ ID4gKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0Vf TUVNLCAiYmxlbmQiKTsKPiA+ICsJZGlzcC0+YmxlbmQuYmFzZSA9IGRldm1faW9yZW1hcF9yZXNv dXJjZSgmcGRldi0+ZGV2LCByZXMpOwo+ID4gKwlpZiAoSVNfRVJSKGRpc3AtPmJsZW5kLmJhc2Up KQo+ID4gKwkJcmV0dXJuIFBUUl9FUlIoZGlzcC0+YmxlbmQuYmFzZSk7Cj4gPiArCj4gPiArCXJl cyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sICJh dl9idWYiKTsKPiA+ICsJZGlzcC0+YXZidWYuYmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgm cGRldi0+ZGV2LCByZXMpOwo+ID4gKwlpZiAoSVNfRVJSKGRpc3AtPmF2YnVmLmJhc2UpKQo+ID4g KwkJcmV0dXJuIFBUUl9FUlIoZGlzcC0+YXZidWYuYmFzZSk7Cj4gPiArCj4gPiArCXJlcyA9IHBs YXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sICJhdWQiKTsK PiA+ICsJZGlzcC0+YXVkaW8uYmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2 LCByZXMpOwo+ID4gKwlpZiAoSVNfRVJSKGRpc3AtPmF1ZGlvLmJhc2UpKQo+ID4gKwkJcmV0dXJu IFBUUl9FUlIoZGlzcC0+YXVkaW8uYmFzZSk7Cj4gPiArCj4gPiArCWRwc3ViLT5kaXNwID0gZGlz cDsKPiA+ICsJZGlzcC0+ZHBzdWIgPSBkcHN1YjsKPiA+ICsKPiA+ICsJLyogVHJ5IHRoZSBsaXZl IFBMIHZpZGVvIGNsb2NrICovCj4gPiArCWRpc3AtPl9wbF9wY2xrID0gZGV2bV9jbGtfZ2V0KGRp c3AtPmRldiwgImRwX2xpdmVfdmlkZW9faW5fY2xrIik7Cj4gPiArCWlmICghSVNfRVJSKGRpc3At Pl9wbF9wY2xrKSkKPiA+ICsJCWRpc3AtPnBjbGsgPSBkaXNwLT5fcGxfcGNsazsKPiA+ICsJZWxz ZSBpZiAoUFRSX0VSUihkaXNwLT5fcGxfcGNsaykgPT0gLUVQUk9CRV9ERUZFUikKPiA+ICsJCXJl dHVybiBQVFJfRVJSKGRpc3AtPl9wbF9wY2xrKTsKPiA+ICsKPiA+ICsJLyogSWYgdGhlIGxpdmUg UEwgdmlkZW8gY2xvY2sgaXMgbm90IHZhbGlkLCBmYWxsIGJhY2sgdG8gUFMgY2xvY2sgKi8KPiA+ ICsJaWYgKCFkaXNwLT5wY2xrKSB7Cj4gPiArCQlkaXNwLT5fcHNfcGNsayA9IGRldm1fY2xrX2dl dChkaXNwLT5kZXYsICJkcF92dGNfcGl4ZWxfY2xrX2luIik7Cj4gPiArCQlpZiAoSVNfRVJSKGRp c3AtPl9wc19wY2xrKSkgewo+ID4gKwkJCWRldl9lcnIoZGlzcC0+ZGV2LCAiZmFpbGVkIHRvIGlu aXQgYW55IHZpZGVvIGNsb2NrXG4iKTsKPiA+ICsJCQlyZXR1cm4gUFRSX0VSUihkaXNwLT5fcHNf cGNsayk7Cj4gPiArCQl9Cj4gPiArCQlkaXNwLT5wY2xrID0gZGlzcC0+X3BzX3BjbGs7Cj4gPiAr CX0KPiA+ICsKPiA+ICsJenlucW1wX2Rpc3BfYXVkaW9faW5pdChkaXNwLT5kZXYsICZkaXNwLT5h dWRpbyk7Cj4gPiArCj4gPiArCXJldCA9IHp5bnFtcF9kaXNwX2NyZWF0ZV9sYXllcnMoZGlzcCk7 Cj4gPiArCWlmIChyZXQpCj4gPiArCQlyZXR1cm4gcmV0Owo+ID4gKwo+ID4gKwlsYXllciA9ICZk aXNwLT5sYXllcnNbWllOUU1QX0RJU1BfTEFZRVJfVklEXTsKPiA+ICsJZHBzdWItPmRtYV9hbGln biA9IDEgPDwgbGF5ZXItPmRtYXNbMF0uY2hhbi0+ZGV2aWNlLT5jb3B5X2FsaWduOwo+ID4gKwo+ ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArdm9pZCB6eW5xbXBfZGlzcF9yZW1vdmUo c3RydWN0IHp5bnFtcF9kcHN1YiAqZHBzdWIpCj4gPiArewo+ID4gKwlzdHJ1Y3QgenlucW1wX2Rp c3AgKmRpc3AgPSBkcHN1Yi0+ZGlzcDsKPiA+ICsKPiA+ICsJenlucW1wX2Rpc3BfZGVzdHJveV9s YXllcnMoZGlzcCk7Cj4gPiArCWRwc3ViLT5kaXNwID0gTlVMTDsKPiA+ICt9Cj4gPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL3hsbngvenlucW1wX2Rpc3AuaCBiL2RyaXZlcnMvZ3B1L2Ry bS94bG54L3p5bnFtcF9kaXNwLmgKPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAw MDAwMDAwMDAwMDAuLjkzYWQzNmFkN2VmMwo+ID4gLS0tIC9kZXYvbnVsbAo+ID4gKysrIGIvZHJp dmVycy9ncHUvZHJtL3hsbngvenlucW1wX2Rpc3AuaAo+ID4gQEAgLTAsMCArMSw0MyBAQAo+ID4g Ky8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCj4gPiArLyoKPiA+ICsgKiBa eW5xTVAgRGlzcGxheSBEcml2ZXIKPiA+ICsgKgo+ID4gKyAqIENvcHlyaWdodCAoQykgMjAxNyAt IDIwMTkgWGlsaW54LCBJbmMuCj4gPiArICoKPiA+ICsgKiBBdXRob3JzOgo+ID4gKyAqIC0gSHl1 biBXb28gS3dvbiA8aHl1bi5rd29uQHhpbGlueC5jb20+Cj4gPiArICogLSBMYXVyZW50IFBpbmNo YXJ0IDxsYXVyZW50LnBpbmNoYXJ0QGlkZWFzb25ib2FyZC5jb20+Cj4gPiArICovCj4gPiArCj4g PiArI2lmbmRlZiBfWllOUU1QX0RJU1BfSF8KPiA+ICsjZGVmaW5lIF9aWU5RTVBfRElTUF9IXwo+ ID4gKwo+ID4gKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgo+ID4gKwo+ID4gKy8qCj4gPiArICog Mzg0MHgyMTYwIGlzIGFkdmVydGlzZWQgYXMgdGhlIG1heGltdW0gcmVzb2x1dGlvbiwgYnV0IGFs bW9zdCBhbnkKPiA+ICsgKiByZXNvbHV0aW9ucyB1bmRlciBhIDMwME1oeiBwaXhlbCByYXRlIHdv dWxkIHdvcmsuIFBpY2sgNDA5Nng0MDk2Lgo+ID4gKyAqLwo+ID4gKyNkZWZpbmUgWllOUU1QX0RJ U1BfTUFYX1dJRFRICQkJCTQwOTYKPiA+ICsjZGVmaW5lIFpZTlFNUF9ESVNQX01BWF9IRUlHSFQJ CQkJNDA5Ngo+ID4gKwo+ID4gKy8qIFRoZSBEUERNQSBpcyBsaW1pdGVkIHRvIDQ0IGJpdCBhZGRy ZXNzaW5nLiAqLwo+ID4gKyNkZWZpbmUgWllOUU1QX0RJU1BfTUFYX0RNQV9CSVQJCQkJNDQKPiA+ ICsKPiA+ICtzdHJ1Y3QgZGV2aWNlOwo+ID4gK3N0cnVjdCBkcm1fZGV2aWNlOwo+ID4gK3N0cnVj dCBwbGF0Zm9ybV9kZXZpY2U7Cj4gPiArc3RydWN0IHp5bnFtcF9kaXNwOwo+ID4gK3N0cnVjdCB6 eW5xbXBfZHBzdWI7Cj4gPiArCj4gPiArdm9pZCB6eW5xbXBfZGlzcF9oYW5kbGVfdmJsYW5rKHN0 cnVjdCB6eW5xbXBfZGlzcCAqZGlzcCk7Cj4gPiArYm9vbCB6eW5xbXBfZGlzcF9hdWRpb19lbmFi bGVkKHN0cnVjdCB6eW5xbXBfZGlzcCAqZGlzcCk7Cj4gPiArdW5zaWduZWQgaW50IHp5bnFtcF9k aXNwX2dldF9hdWRpb19jbGtfcmF0ZShzdHJ1Y3QgenlucW1wX2Rpc3AgKmRpc3ApOwo+ID4gK3Vp bnQzMl90IHp5bnFtcF9kaXNwX2dldF9jcnRjX21hc2soc3RydWN0IHp5bnFtcF9kaXNwICpkaXNw KTsKPiA+ICsKPiA+ICtpbnQgenlucW1wX2Rpc3BfaW5pdChzdHJ1Y3QgenlucW1wX2Rwc3ViICpk cHN1Yiwgc3RydWN0IGRybV9kZXZpY2UgKmRybSk7Cj4gPiArCj4gPiAraW50IHp5bnFtcF9kaXNw X3Byb2JlKHN0cnVjdCB6eW5xbXBfZHBzdWIgKmRwc3ViLCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl ICpwZGV2KTsKPiA+ICt2b2lkIHp5bnFtcF9kaXNwX3JlbW92ZShzdHJ1Y3QgenlucW1wX2Rwc3Vi ICpkcHN1Yik7Cj4gPiArCj4gPiArI2VuZGlmIC8qIF9aWU5RTVBfRElTUF9IXyAqLwo+ID4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94bG54L3p5bnFtcF9kaXNwX3JlZ3MuaCBiL2RyaXZl cnMvZ3B1L2RybS94bG54L3p5bnFtcF9kaXNwX3JlZ3MuaAo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQKPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uYzkyZTJjMmJkMjJlCj4gPiAtLS0gL2Rldi9udWxs Cj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0veGxueC96eW5xbXBfZGlzcF9yZWdzLmgKPiA+IEBA IC0wLDAgKzEsMjAxIEBACj4gPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAg Ki8KPiA+ICsvKgo+ID4gKyAqIFp5bnFNUCBEaXNwbGF5IENvbnRyb2xsZXIgRHJpdmVyIC0gUmVn aXN0ZXIgRGVmaW5pdGlvbnMKPiA+ICsgKgo+ID4gKyAqIENvcHlyaWdodCAoQykgMjAxNyAtIDIw MTkgWGlsaW54LCBJbmMuCj4gPiArICoKPiA+ICsgKiBBdXRob3JzOgo+ID4gKyAqIC0gSHl1biBX b28gS3dvbiA8aHl1bi5rd29uQHhpbGlueC5jb20+Cj4gPiArICogLSBMYXVyZW50IFBpbmNoYXJ0 IDxsYXVyZW50LnBpbmNoYXJ0QGlkZWFzb25ib2FyZC5jb20+Cj4gPiArICovCj4gPiArCj4gPiAr I2lmbmRlZiBfWllOUU1QX0RJU1BfUkVHU19IXwo+ID4gKyNkZWZpbmUgX1pZTlFNUF9ESVNQX1JF R1NfSF8KPiA+ICsKPiA+ICsjaW5jbHVkZSA8bGludXgvYml0cy5oPgo+ID4gKwo+ID4gKy8qIEJs ZW5kZXIgcmVnaXN0ZXJzICovCj4gPiArI2RlZmluZSBaWU5RTVBfRElTUF9WX0JMRU5EX0JHX0NM Ul8wCQkJMHgwCj4gPiArI2RlZmluZSBaWU5RTVBfRElTUF9WX0JMRU5EX0JHX0NMUl8xCQkJMHg0 Cj4gPiArI2RlZmluZSBaWU5RTVBfRElTUF9WX0JMRU5EX0JHX0NMUl8yCQkJMHg4Cj4gPiArI2Rl ZmluZSBaWU5RTVBfRElTUF9WX0JMRU5EX0JHX01BWAkJCTB4ZmZmCj4gPiArI2RlZmluZSBaWU5R TVBfRElTUF9WX0JMRU5EX1NFVF9HTE9CQUxfQUxQSEEJCTB4Ywo+ID4gKyNkZWZpbmUgWllOUU1Q X0RJU1BfVl9CTEVORF9TRVRfR0xPQkFMX0FMUEhBX1ZBTFVFKG4pCSgobikgPDwgMSkKPiA+ICsj ZGVmaW5lIFpZTlFNUF9ESVNQX1ZfQkxFTkRfU0VUX0dMT0JBTF9BTFBIQV9FTgkJQklUKDApCj4g PiArI2RlZmluZSBaWU5RTVBfRElTUF9WX0JMRU5EX09VVFBVVF9WSURfRk1UCQkweDE0Cj4gPiAr I2RlZmluZSBaWU5RTVBfRElTUF9WX0JMRU5EX09VVFBVVF9WSURfRk1UX1JHQgkJMHgwCj4gPiAr I2RlZmluZSBaWU5RTVBfRElTUF9WX0JMRU5EX09VVFBVVF9WSURfRk1UX1lDQkNSNDQ0CTB4MQo+ ID4gKyNkZWZpbmUgWllOUU1QX0RJU1BfVl9CTEVORF9PVVRQVVRfVklEX0ZNVF9ZQ0JDUjQyMgkw eDIKPiA+ICsjZGVmaW5lIFpZTlFNUF9ESVNQX1ZfQkxFTkRfT1VUUFVUX1ZJRF9GTVRfWU9OTFkJ MHgzCj4gPiArI2RlZmluZSBaWU5RTVBfRElTUF9WX0JMRU5EX09VVFBVVF9WSURfRk1UX1hWWUND CTB4NAo+ID4gKyNkZWZpbmUgWllOUU1QX0RJU1BfVl9CTEVORF9PVVRQVVRfVklEX0ZNVF9FTl9E T1dOU0FNUExFCUJJVCg0KQo+ID4gKyNkZWZpbmUgWllOUU1QX0RJU1BfVl9CTEVORF9MQVlFUl9D T05UUk9MKG4pCQkoMHgxOCArICgobikgKiA0KSkKPiA+ICsjZGVmaW5lIFpZTlFNUF9ESVNQX1Zf QkxFTkRfTEFZRVJfQ09OVFJPTF9FTl9VUwkJQklUKDApCj4gPiArI2RlZmluZSBaWU5RTVBfRElT UF9WX0JMRU5EX0xBWUVSX0NPTlRST0xfUkdCCQlCSVQoMSkKPiA+ICsjZGVmaW5lIFpZTlFNUF9E SVNQX1ZfQkxFTkRfTEFZRVJfQ09OVFJPTF9CWVBBU1MJQklUKDgpCj4gPiArI2RlZmluZSBaWU5R TVBfRElTUF9WX0JMRU5EX05VTV9DT0VGRgkJCTkKPiA+ICsjZGVmaW5lIFpZTlFNUF9ESVNQX1Zf QkxFTkRfTlVNX09GRlNFVAkJCTMKPiA+ICsjZGVmaW5lIFpZTlFNUF9ESVNQX1ZfQkxFTkRfUkdC MllDQkNSX0NPRUZGKG4pCQkoMHgyMCArICgobikgKiA0KSkKPiA+ICsjZGVmaW5lIFpZTlFNUF9E SVNQX1ZfQkxFTkRfSU4xQ1NDX0NPRUZGKG4pCQkoMHg0NCArICgobikgKiA0KSkKPiA+ICsjZGVm aW5lIFpZTlFNUF9ESVNQX1ZfQkxFTkRfSU4xQ1NDX09GRlNFVChuKQkJKDB4NjggKyAoKG4pICog NCkpCj4gPiArI2RlZmluZSBaWU5RTVBfRElTUF9WX0JMRU5EX09VVENTQ19PRkZTRVQobikJCSgw eDc0ICsgKChuKSAqIDQpKQo+ID4gKyNkZWZpbmUgWllOUU1QX0RJU1BfVl9CTEVORF9JTjJDU0Nf Q09FRkYobikJCSgweDgwICsgKChuKSAqIDQpKQo+ID4gKyNkZWZpbmUgWllOUU1QX0RJU1BfVl9C TEVORF9JTjJDU0NfT0ZGU0VUKG4pCQkoMHhhNCArICgobikgKiA0KSkKPiA+ICsjZGVmaW5lIFpZ TlFNUF9ESVNQX1ZfQkxFTkRfQ0hST01BX0tFWV9FTkFCTEUJCTB4MWQwCj4gPiArI2RlZmluZSBa WU5RTVBfRElTUF9WX0JMRU5EX0NIUk9NQV9LRVlfQ09NUDEJCTB4MWQ0Cj4gPiArI2RlZmluZSBa WU5RTVBfRElTUF9WX0JMRU5EX0NIUk9NQV9LRVlfQ09NUDIJCTB4MWQ4Cj4gPiArI2RlZmluZSBa WU5RTVBfRElTUF9WX0JMRU5EX0NIUk9NQV9LRVlfQ09NUDMJCTB4MWRjCj4gPiArCj4gPiArLyog QVYgYnVmZmVyIG1hbmFnZXIgcmVnaXN0ZXJzICovCj4gPiArI2RlZmluZSBaWU5RTVBfRElTUF9B Vl9CVUZfRk1UCQkJCTB4MAo+ID4gKyNkZWZpbmUgWllOUU1QX0RJU1BfQVZfQlVGX0ZNVF9OTF9W SURfU0hJRlQJCTAKPiA+ICsjZGVmaW5lIFpZTlFNUF9ESVNQX0FWX0JVRl9GTVRfTkxfVklEX01B U0sJCSgweDFmIDw8IDApCj4gPiArI2RlZmluZSBaWU5RTVBfRElTUF9BVl9CVUZfRk1UX05MX1ZJ RF9VWVZZCQkoMCA8PCAwKQo+ID4gKyNkZWZpbmUgWllOUU1QX0RJU1BfQVZfQlVGX0ZNVF9OTF9W SURfVllVWQkJKDEgPDwgMCkKPiA+ICsjZGVmaW5lIFpZTlFNUF9ESVNQX0FWX0JVRl9GTVRfTkxf VklEX1lWWVUJCSgyIDw8IDApCj4gPiArI2RlZmluZSBaWU5RTVBfRElTUF9BVl9CVUZfRk1UX05M X1ZJRF9ZVVlWCQkoMyA8PCAwKQo+ID4gKyNkZWZpbmUgWllOUU1QX0RJU1BfQVZfQlVGX0ZNVF9O TF9WSURfWVYxNgkJKDQgPDwgMCkKPiA+ICsjZGVmaW5lIFpZTlFNUF9ESVNQX0FWX0JVRl9GTVRf TkxfVklEX1lWMjQJCSg1IDw8IDApCj4gPiArI2RlZmluZSBaWU5RTVBfRElTUF9BVl9CVUZfRk1U X05MX1ZJRF9ZVjE2Q0kJCSg2IDw8IDApCj4gPiArI2RlZmluZSBaWU5RTVBfRElTUF9BVl9CVUZf Rk1UX05MX1ZJRF9NT05PCQkoNyA8PCAwKQo+ID4gKyNkZWZpbmUgWllOUU1QX0RJU1BfQVZfQlVG X0ZNVF9OTF9WSURfWVYxNkNJMgkJKDggPDwgMCkKPiA+ICsjZGVmaW5lIFpZTlFNUF9ESVNQX0FW X0JVRl9GTVRfTkxfVklEX1lVVjQ0NAkJKDkgPDwgMCkKPiA+ICsjZGVmaW5lIFpZTlFNUF9ESVNQ X0FWX0JVRl9GTVRfTkxfVklEX1JHQjg4OAkJKDEwIDw8IDApCj4gPiArI2RlZmluZSBaWU5RTVBf RElTUF9BVl9CVUZfRk1UX05MX1ZJRF9SR0JBODg4MAkJKDExIDw8IDApCj4gPiArI2RlZmluZSBa WU5RTVBfRElTUF9BVl9CVUZfRk1UX05MX1ZJRF9SR0I4ODhfMTAJCSgxMiA8PCAwKQo+ID4gKyNk ZWZpbmUgWllOUU1QX0RJU1BfQVZfQlVGX0ZNVF9OTF9WSURfWVVWNDQ0XzEwCQkoMTMgPDwgMCkK PiA+ICsjZGVmaW5lIFpZTlFNUF9ESVNQX0FWX0JVRl9GTVRfTkxfVklEX1lWMTZDSTJfMTAJKDE0 IDw8IDApCj4gPiArI2RlZmluZSBaWU5RTVBfRElTUF9BVl9CVUZfRk1UX05MX1ZJRF9ZVjE2Q0lf MTAJCSgxNSA8PCAwKQo+ID4gKyNkZWZpbmUgWllOUU1QX0RJU1BfQVZfQlVGX0ZNVF9OTF9WSURf WVYxNl8xMAkJKDE2IDw8IDApCj4gPiArI2RlZmluZSBaWU5RTVBfRElTUF9BVl9CVUZfRk1UX05M X1ZJRF9ZVjI0XzEwCQkoMTcgPDwgMCkKPiA+ICsjZGVmaW5lIFpZTlFNUF9ESVNQX0FWX0JVRl9G TVRfTkxfVklEX1lPTkxZXzEwCQkoMTggPDwgMCkKPiA+ICsjZGVmaW5lIFpZTlFNUF9ESVNQX0FW X0JVRl9GTVRfTkxfVklEX1lWMTZfNDIwCQkoMTkgPDwgMCkKPiA+ICsjZGVmaW5lIFpZTlFNUF9E SVNQX0FWX0JVRl9GTVRfTkxfVklEX1lWMTZDSV80MjAJKDIwIDw8IDApCj4gPiArI2RlZmluZSBa WU5RTVBfRElTUF9BVl9CVUZfRk1UX05MX1ZJRF9ZVjE2Q0kyXzQyMAkoMjEgPDwgMCkKPiA+ICsj ZGVmaW5lIFpZTlFNUF9ESVNQX0FWX0JVRl9GTVRfTkxfVklEX1lWMTZfNDIwXzEwCSgyMiA8PCAw KQo+ID4gKyNkZWZpbmUgWllOUU1QX0RJU1BfQVZfQlVGX0ZNVF9OTF9WSURfWVYxNkNJXzQyMF8x MAkoMjMgPDwgMCkKPiA+ICsjZGVmaW5lIFpZTlFNUF9ESVNQX0FWX0JVRl9GTVRfTkxfVklEX1lW MTZDSTJfNDIwXzEwCSgyNCA8PCAwKQo+ID4gKyNkZWZpbmUgWllOUU1QX0RJU1BfQVZfQlVGX0ZN VF9OTF9HRlhfU0hJRlQJCTgKPiA+ICsjZGVmaW5lIFpZTlFNUF9ESVNQX0FWX0JVRl9GTVRfTkxf R0ZYX01BU0sJCSgweGYgPDwgOCkKPiA+ICsjZGVmaW5lIFpZTlFNUF9ESVNQX0FWX0JVRl9GTVRf TkxfR0ZYX1JHQkE4ODg4CQkoMCA8PCA4KQo+ID4gKyNkZWZpbmUgWllOUU1QX0RJU1BfQVZfQlVG X0ZNVF9OTF9HRlhfQUJHUjg4ODgJCSgxIDw8IDgpCj4gPiArI2RlZmluZSBaWU5RTVBfRElTUF9B Vl9CVUZfRk1UX05MX0dGWF9SR0I4ODgJCSgyIDw8IDgpCj4gPiArI2RlZmluZSBaWU5RTVBfRElT UF9BVl9CVUZfRk1UX05MX0dGWF9CR1I4ODgJCSgzIDw8IDgpCj4gPiArI2RlZmluZSBaWU5RTVBf RElTUF9BVl9CVUZfRk1UX05MX0dGWF9SR0JBNTU1MQkJKDQgPDwgOCkKPiA+ICsjZGVmaW5lIFpZ TlFNUF9ESVNQX0FWX0JVRl9GTVRfTkxfR0ZYX1JHQkE0NDQ0CQkoNSA8PCA4KQo+ID4gKyNkZWZp bmUgWllOUU1QX0RJU1BfQVZfQlVGX0ZNVF9OTF9HRlhfUkdCNTY1CQkoNiA8PCA4KQo+ID4gKyNk ZWZpbmUgWllOUU1QX0RJU1BfQVZfQlVGX0ZNVF9OTF9HRlhfOEJQUAkJKDcgPDwgOCkKPiA+ICsj ZGVmaW5lIFpZTlFNUF9ESVNQX0FWX0JVRl9GTVRfTkxfR0ZYXzRCUFAJCSg4IDw8IDgpCj4gPiAr I2RlZmluZSBaWU5RTVBfRElTUF9BVl9CVUZfRk1UX05MX0dGWF8yQlBQCQkoOSA8PCA4KQo+ID4g KyNkZWZpbmUgWllOUU1QX0RJU1BfQVZfQlVGX0ZNVF9OTF9HRlhfMUJQUAkJKDEwIDw8IDgpCj4g PiArI2RlZmluZSBaWU5RTVBfRElTUF9BVl9CVUZfTk9OX0xJVkVfTEFURU5DWQkJMHg4Cj4gPiAr I2RlZmluZSBaWU5RTVBfRElTUF9BVl9CVUZfQ0hCVUYobikJCQkoMHgxMCArICgobikgKiA0KSkK PiA+ICsjZGVmaW5lIFpZTlFNUF9ESVNQX0FWX0JVRl9DSEJVRl9FTgkJCUJJVCgwKQo+ID4gKyNk ZWZpbmUgWllOUU1QX0RJU1BfQVZfQlVGX0NIQlVGX0ZMVVNICQkJQklUKDEpCj4gPiArI2RlZmlu ZSBaWU5RTVBfRElTUF9BVl9CVUZfQ0hCVUZfQlVSU1RfTEVOX1NISUZUCTIKPiA+ICsjZGVmaW5l IFpZTlFNUF9ESVNQX0FWX0JVRl9DSEJVRl9CVVJTVF9MRU5fTUFTSwkJKDB4ZiA8PCAyKQo+ID4g KyNkZWZpbmUgWllOUU1QX0RJU1BfQVZfQlVGX0NIQlVGX0JVUlNUX0xFTl9NQVgJCTB4Zgo+ID4g KyNkZWZpbmUgWllOUU1QX0RJU1BfQVZfQlVGX0NIQlVGX0JVUlNUX0xFTl9BVURfTUFYCTB4Mwo+ ID4gKyNkZWZpbmUgWllOUU1QX0RJU1BfQVZfQlVGX1NUQVRVUwkJCTB4MjgKPiA+ICsjZGVmaW5l IFpZTlFNUF9ESVNQX0FWX0JVRl9TVENfQ1RSTAkJCTB4MmMKPiA+ICsjZGVmaW5lIFpZTlFNUF9E SVNQX0FWX0JVRl9TVENfQ1RSTF9FTgkJCUJJVCgwKQo+ID4gKyNkZWZpbmUgWllOUU1QX0RJU1Bf QVZfQlVGX1NUQ19DVFJMX0VWRU5UX1NISUZUCQkxCj4gPiArI2RlZmluZSBaWU5RTVBfRElTUF9B Vl9CVUZfU1RDX0NUUkxfRVZFTlRfRVhfVlNZTkMJMAo+ID4gKyNkZWZpbmUgWllOUU1QX0RJU1Bf QVZfQlVGX1NUQ19DVFJMX0VWRU5UX0VYX1ZJRAkxCj4gPiArI2RlZmluZSBaWU5RTVBfRElTUF9B Vl9CVUZfU1RDX0NUUkxfRVZFTlRfRVhfQVVECTIKPiA+ICsjZGVmaW5lIFpZTlFNUF9ESVNQX0FW X0JVRl9TVENfQ1RSTF9FVkVOVF9JTlRfVlNZTkMJMwo+ID4gKyNkZWZpbmUgWllOUU1QX0RJU1Bf QVZfQlVGX1NUQ19JTklUX1ZBTFVFMAkJMHgzMAo+ID4gKyNkZWZpbmUgWllOUU1QX0RJU1BfQVZf QlVGX1NUQ19JTklUX1ZBTFVFMQkJMHgzNAo+ID4gKyNkZWZpbmUgWllOUU1QX0RJU1BfQVZfQlVG X1NUQ19BREoJCQkweDM4Cj4gPiArI2RlZmluZSBaWU5RTVBfRElTUF9BVl9CVUZfU1RDX1ZJRF9W U1lOQ19UUzAJCTB4M2MKPiA+ICsjZGVmaW5lIFpZTlFNUF9ESVNQX0FWX0JVRl9TVENfVklEX1ZT WU5DX1RTMQkJMHg0MAo+ID4gKyNkZWZpbmUgWllOUU1QX0RJU1BfQVZfQlVGX1NUQ19FWFRfVlNZ TkNfVFMwCQkweDQ0Cj4gPiArI2RlZmluZSBaWU5RTVBfRElTUF9BVl9CVUZfU1RDX0VYVF9WU1lO Q19UUzEJCTB4NDgKPiA+ICsjZGVmaW5lIFpZTlFNUF9ESVNQX0FWX0JVRl9TVENfQ1VTVE9NX0VW RU5UX1RTMAkJMHg0Ywo+ID4gKyNkZWZpbmUgWllOUU1QX0RJU1BfQVZfQlVGX1NUQ19DVVNUT01f RVZFTlRfVFMxCQkweDUwCj4gPiArI2RlZmluZSBaWU5RTVBfRElTUF9BVl9CVUZfU1RDX0NVU1RP TV9FVkVOVDJfVFMwCTB4NTQKPiA+ICsjZGVmaW5lIFpZTlFNUF9ESVNQX0FWX0JVRl9TVENfQ1VT VE9NX0VWRU5UMl9UUzEJMHg1OAo+ID4gKyNkZWZpbmUgWllOUU1QX0RJU1BfQVZfQlVGX1NUQ19T TkFQU0hPVDAJCTB4NjAKPiA+ICsjZGVmaW5lIFpZTlFNUF9ESVNQX0FWX0JVRl9TVENfU05BUFNI T1QxCQkweDY0Cj4gPiArI2RlZmluZSBaWU5RTVBfRElTUF9BVl9CVUZfT1VUUFVUCQkJMHg3MAo+ ID4gKyNkZWZpbmUgWllOUU1QX0RJU1BfQVZfQlVGX09VVFBVVF9WSUQxX1NISUZUCQkwCj4gPiAr I2RlZmluZSBaWU5RTVBfRElTUF9BVl9CVUZfT1VUUFVUX1ZJRDFfTUFTSwkJKDB4MyA8PCAwKQo+ ID4gKyNkZWZpbmUgWllOUU1QX0RJU1BfQVZfQlVGX09VVFBVVF9WSUQxX0xJVkUJCSgwIDw8IDAp Cj4gPiArI2RlZmluZSBaWU5RTVBfRElTUF9BVl9CVUZfT1VUUFVUX1ZJRDFfTUVNCQkoMSA8PCAw KQo+ID4gKyNkZWZpbmUgWllOUU1QX0RJU1BfQVZfQlVGX09VVFBVVF9WSUQxX1BBVFRFUk4JCSgy IDw8IDApCj4gPiArI2RlZmluZSBaWU5RTVBfRElTUF9BVl9CVUZfT1VUUFVUX1ZJRDFfTk9ORQkJ KDMgPDwgMCkKPiA+ICsjZGVmaW5lIFpZTlFNUF9ESVNQX0FWX0JVRl9PVVRQVVRfVklEMl9TSElG VAkJMgo+ID4gKyNkZWZpbmUgWllOUU1QX0RJU1BfQVZfQlVGX09VVFBVVF9WSUQyX01BU0sJCSgw eDMgPDwgMikKPiA+ICsjZGVmaW5lIFpZTlFNUF9ESVNQX0FWX0JVRl9PVVRQVVRfVklEMl9ESVNB QkxFCQkoMCA8PCAyKQo+ID4gKyNkZWZpbmUgWllOUU1QX0RJU1BfQVZfQlVGX09VVFBVVF9WSUQy X01FTQkJKDEgPDwgMikKPiA+ICsjZGVmaW5lIFpZTlFNUF9ESVNQX0FWX0JVRl9PVVRQVVRfVklE Ml9MSVZFCQkoMiA8PCAyKQo+ID4gKyNkZWZpbmUgWllOUU1QX0RJU1BfQVZfQlVGX09VVFBVVF9W SUQyX05PTkUJCSgzIDw8IDIpCj4gPiArI2RlZmluZSBaWU5RTVBfRElTUF9BVl9CVUZfT1VUUFVU X0FVRDFfU0hJRlQJCTQKPiA+ICsjZGVmaW5lIFpZTlFNUF9ESVNQX0FWX0JVRl9PVVRQVVRfQVVE MV9NQVNLCQkoMHgzIDw8IDQpCj4gPiArI2RlZmluZSBaWU5RTVBfRElTUF9BVl9CVUZfT1VUUFVU X0FVRDFfUEwJCSgwIDw8IDQpCj4gPiArI2RlZmluZSBaWU5RTVBfRElTUF9BVl9CVUZfT1VUUFVU X0FVRDFfTUVNCQkoMSA8PCA0KQo+ID4gKyNkZWZpbmUgWllOUU1QX0RJU1BfQVZfQlVGX09VVFBV VF9BVUQxX1BBVFRFUk4JCSgyIDw8IDQpCj4gPiArI2RlZmluZSBaWU5RTVBfRElTUF9BVl9CVUZf T1VUUFVUX0FVRDFfRElTQUJMRQkJKDMgPDwgNCkKPiA+ICsjZGVmaW5lIFpZTlFNUF9ESVNQX0FW X0JVRl9PVVRQVVRfQVVEMl9FTgkJQklUKDYpCj4gPiArI2RlZmluZSBaWU5RTVBfRElTUF9BVl9C VUZfSENPVU5UX1ZDT1VOVF9JTlQwCQkweDc0Cj4gPiArI2RlZmluZSBaWU5RTVBfRElTUF9BVl9C VUZfSENPVU5UX1ZDT1VOVF9JTlQxCQkweDc4Cj4gPiArI2RlZmluZSBaWU5RTVBfRElTUF9BVl9C VUZfUEFUVEVSTl9HRU5fU0VMRUNUCQkweDEwMAo+ID4gKyNkZWZpbmUgWllOUU1QX0RJU1BfQVZf QlVGX0NMS19TUkMJCQkweDEyMAo+ID4gKyNkZWZpbmUgWllOUU1QX0RJU1BfQVZfQlVGX0NMS19T UkNfVklEX0ZST01fUFMJCUJJVCgwKQo+ID4gKyNkZWZpbmUgWllOUU1QX0RJU1BfQVZfQlVGX0NM S19TUkNfQVVEX0ZST01fUFMJCUJJVCgxKQo+ID4gKyNkZWZpbmUgWllOUU1QX0RJU1BfQVZfQlVG X0NMS19TUkNfVklEX0lOVEVSTkFMX1RJTUlORwlCSVQoMikKPiA+ICsjZGVmaW5lIFpZTlFNUF9E SVNQX0FWX0JVRl9TUlNUX1JFRwkJCTB4MTI0Cj4gPiArI2RlZmluZSBaWU5RTVBfRElTUF9BVl9C VUZfU1JTVF9SRUdfVklEX1JTVAkJQklUKDEpCj4gPiArI2RlZmluZSBaWU5RTVBfRElTUF9BVl9C VUZfQVVESU9fQ0hfQ09ORklHCQkweDEyYwo+ID4gKyNkZWZpbmUgWllOUU1QX0RJU1BfQVZfQlVG X0dGWF9DT01QX1NGKG4pCQkoMHgyMDAgKyAoKG4pICogNCkpCj4gPiArI2RlZmluZSBaWU5RTVBf RElTUF9BVl9CVUZfVklEX0NPTVBfU0YobikJCSgweDIwYyArICgobikgKiA0KSkKPiA+ICsjZGVm aW5lIFpZTlFNUF9ESVNQX0FWX0JVRl9MSVZEX1ZJRF9DT01QX1NGKG4pCQkoMHgyMTggKyAoKG4p ICogNCkpCj4gPiArI2RlZmluZSBaWU5RTVBfRElTUF9BVl9CVUZfTElWRV9WSURfQ09ORklHCQkw eDIyNAo+ID4gKyNkZWZpbmUgWllOUU1QX0RJU1BfQVZfQlVGX0xJVkRfR0ZYX0NPTVBfU0YobikJ CSgweDIyOCArICgobikgKiA0KSkKPiA+ICsjZGVmaW5lIFpZTlFNUF9ESVNQX0FWX0JVRl9MSVZF X0dGWF9DT05GSUcJCTB4MjM0Cj4gPiArI2RlZmluZSBaWU5RTVBfRElTUF9BVl9CVUZfNEJJVF9T RgkJCTB4MTExMTEKPiA+ICsjZGVmaW5lIFpZTlFNUF9ESVNQX0FWX0JVRl81QklUX1NGCQkJMHgx MDg0Mgo+ID4gKyNkZWZpbmUgWllOUU1QX0RJU1BfQVZfQlVGXzZCSVRfU0YJCQkweDEwNDEwCj4g PiArI2RlZmluZSBaWU5RTVBfRElTUF9BVl9CVUZfOEJJVF9TRgkJCTB4MTAxMDEKPiA+ICsjZGVm aW5lIFpZTlFNUF9ESVNQX0FWX0JVRl8xMEJJVF9TRgkJCTB4MTAwNDAKPiA+ICsjZGVmaW5lIFpZ TlFNUF9ESVNQX0FWX0JVRl9OVUxMX1NGCQkJMAo+ID4gKyNkZWZpbmUgWllOUU1QX0RJU1BfQVZf QlVGX05VTV9TRgkJCTMKPiA+ICsjZGVmaW5lIFpZTlFNUF9ESVNQX0FWX0JVRl9MSVZFX0NPTkZJ R19CUENfNgkJMHgwCj4gPiArI2RlZmluZSBaWU5RTVBfRElTUF9BVl9CVUZfTElWRV9DT05GSUdf QlBDXzgJCTB4MQo+ID4gKyNkZWZpbmUgWllOUU1QX0RJU1BfQVZfQlVGX0xJVkVfQ09ORklHX0JQ Q18xMAkJMHgyCj4gPiArI2RlZmluZSBaWU5RTVBfRElTUF9BVl9CVUZfTElWRV9DT05GSUdfQlBD XzEyCQkweDMKPiA+ICsjZGVmaW5lIFpZTlFNUF9ESVNQX0FWX0JVRl9MSVZFX0NPTkZJR19CUENf TUFTSwkJR0VOTUFTSygyLCAwKQo+ID4gKyNkZWZpbmUgWllOUU1QX0RJU1BfQVZfQlVGX0xJVkVf Q09ORklHX0ZNVF9SR0IJCTB4MAo+ID4gKyNkZWZpbmUgWllOUU1QX0RJU1BfQVZfQlVGX0xJVkVf Q09ORklHX0ZNVF9ZVVY0NDQJMHgxCj4gPiArI2RlZmluZSBaWU5RTVBfRElTUF9BVl9CVUZfTElW RV9DT05GSUdfRk1UX1lVVjQyMgkweDIKPiA+ICsjZGVmaW5lIFpZTlFNUF9ESVNQX0FWX0JVRl9M SVZFX0NPTkZJR19GTVRfWU9OTFkJMHgzCj4gPiArI2RlZmluZSBaWU5RTVBfRElTUF9BVl9CVUZf TElWRV9DT05GSUdfRk1UX01BU0sJCUdFTk1BU0soNSwgNCkKPiA+ICsjZGVmaW5lIFpZTlFNUF9E SVNQX0FWX0JVRl9MSVZFX0NPTkZJR19DQl9GSVJTVAkJQklUKDgpCj4gPiArI2RlZmluZSBaWU5R TVBfRElTUF9BVl9CVUZfUEFMRVRURV9NRU1PUlkJCTB4NDAwCj4gPiArCj4gPiArLyogQXVkaW8g cmVnaXN0ZXJzICovCj4gPiArI2RlZmluZSBaWU5RTVBfRElTUF9BVURfTUlYRVJfVk9MVU1FCQkJ MHgwCj4gPiArI2RlZmluZSBaWU5RTVBfRElTUF9BVURfTUlYRVJfVk9MVU1FX05PX1NDQUxFCQkw eDIwMDAyMDAwCj4gPiArI2RlZmluZSBaWU5RTVBfRElTUF9BVURfTUlYRVJfTUVUQV9EQVRBCQkJ MHg0Cj4gPiArI2RlZmluZSBaWU5RTVBfRElTUF9BVURfQ0hfU1RBVFVTMAkJCTB4OAo+ID4gKyNk ZWZpbmUgWllOUU1QX0RJU1BfQVVEX0NIX1NUQVRVUzEJCQkweGMKPiA+ICsjZGVmaW5lIFpZTlFN UF9ESVNQX0FVRF9DSF9TVEFUVVMyCQkJMHgxMAo+ID4gKyNkZWZpbmUgWllOUU1QX0RJU1BfQVVE X0NIX1NUQVRVUzMJCQkweDE0Cj4gPiArI2RlZmluZSBaWU5RTVBfRElTUF9BVURfQ0hfU1RBVFVT NAkJCTB4MTgKPiA+ICsjZGVmaW5lIFpZTlFNUF9ESVNQX0FVRF9DSF9TVEFUVVM1CQkJMHgxYwo+ ID4gKyNkZWZpbmUgWllOUU1QX0RJU1BfQVVEX0NIX0FfREFUQTAJCQkweDIwCj4gPiArI2RlZmlu ZSBaWU5RTVBfRElTUF9BVURfQ0hfQV9EQVRBMQkJCTB4MjQKPiA+ICsjZGVmaW5lIFpZTlFNUF9E SVNQX0FVRF9DSF9BX0RBVEEyCQkJMHgyOAo+ID4gKyNkZWZpbmUgWllOUU1QX0RJU1BfQVVEX0NI X0FfREFUQTMJCQkweDJjCj4gPiArI2RlZmluZSBaWU5RTVBfRElTUF9BVURfQ0hfQV9EQVRBNAkJ CTB4MzAKPiA+ICsjZGVmaW5lIFpZTlFNUF9ESVNQX0FVRF9DSF9BX0RBVEE1CQkJMHgzNAo+ID4g KyNkZWZpbmUgWllOUU1QX0RJU1BfQVVEX0NIX0JfREFUQTAJCQkweDM4Cj4gPiArI2RlZmluZSBa WU5RTVBfRElTUF9BVURfQ0hfQl9EQVRBMQkJCTB4M2MKPiA+ICsjZGVmaW5lIFpZTlFNUF9ESVNQ X0FVRF9DSF9CX0RBVEEyCQkJMHg0MAo+ID4gKyNkZWZpbmUgWllOUU1QX0RJU1BfQVVEX0NIX0Jf REFUQTMJCQkweDQ0Cj4gPiArI2RlZmluZSBaWU5RTVBfRElTUF9BVURfQ0hfQl9EQVRBNAkJCTB4 NDgKPiA+ICsjZGVmaW5lIFpZTlFNUF9ESVNQX0FVRF9DSF9CX0RBVEE1CQkJMHg0Ywo+ID4gKyNk ZWZpbmUgWllOUU1QX0RJU1BfQVVEX1NPRlRfUkVTRVQJCQkweGMwMAo+ID4gKyNkZWZpbmUgWllO UU1QX0RJU1BfQVVEX1NPRlRfUkVTRVRfQVVEX1NSU1QJCUJJVCgwKQo+ID4gKwo+ID4gKyNlbmRp ZiAvKiBfWllOUU1QX0RJU1BfUkVHU19IXyAqLwo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS94bG54L3p5bnFtcF9kcC5jIGIvZHJpdmVycy9ncHUvZHJtL3hsbngvenlucW1wX2RwLmMK PiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLjQwOWQ0YTM1 Y2JmOQo+ID4gLS0tIC9kZXYvbnVsbAo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3hsbngvenlu cW1wX2RwLmMKPiA+IEBAIC0wLDAgKzEsMTc0MiBAQAo+ID4gKy8vIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBHUEwtMi4wCj4gPiArLyoKPiA+ICsgKiBaeW5xTVAgRGlzcGxheVBvcnQgRHJpdmVy Cj4gPiArICoKPiA+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTcgLSAyMDE5IFhpbGlueCwgSW5jLgo+ ID4gKyAqCj4gPiArICogQXV0aG9yczoKPiA+ICsgKiAtIEh5dW4gV29vIEt3b24gPGh5dW4ua3dv bkB4aWxpbnguY29tPgo+ID4gKyAqIC0gTGF1cmVudCBQaW5jaGFydCA8bGF1cmVudC5waW5jaGFy dEBpZGVhc29uYm9hcmQuY29tPgo+ID4gKyAqLwo+ID4gKwo+ID4gKyNpbmNsdWRlIDxkcm0vZHJt X2F0b21pY19oZWxwZXIuaD4KPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9jb25uZWN0b3IuaD4KPiA+ ICsjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+Cj4gPiArI2luY2x1ZGUgPGRybS9kcm1fZGV2aWNl Lmg+Cj4gPiArI2luY2x1ZGUgPGRybS9kcm1fZHBfaGVscGVyLmg+Cj4gPiArI2luY2x1ZGUgPGRy bS9kcm1fZWRpZC5oPgo+ID4gKyNpbmNsdWRlIDxkcm0vZHJtX2VuY29kZXIuaD4KPiA+ICsjaW5j bHVkZSA8ZHJtL2RybV9tb2Rlcy5oPgo+ID4gKyNpbmNsdWRlIDxkcm0vZHJtX29mLmg+Cj4gPiAr I2luY2x1ZGUgPGRybS9kcm1fcHJvYmVfaGVscGVyLmg+Cj4gPiArCj4gPiArI2luY2x1ZGUgPGxp bnV4L2Nsay5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgo+ID4gKyNpbmNsdWRlIDxs aW51eC9kZXZpY2UuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gPiArI2luY2x1 ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50 aW1lLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L3BoeS9waHkuaD4KPiA+ICsjaW5jbHVkZSA8bGlu dXgvcmVzZXQuaD4KPiA+ICsKPiA+ICsjaW5jbHVkZSAienlucW1wX2Rpc3AuaCIKPiA+ICsjaW5j bHVkZSAienlucW1wX2RwLmgiCj4gPiArI2luY2x1ZGUgInp5bnFtcF9kcHN1Yi5oIgo+ID4gKwo+ ID4gK3N0YXRpYyB1aW50IHp5bnFtcF9kcF9hdXhfdGltZW91dF9tcyA9IDUwOwo+ID4gK21vZHVs ZV9wYXJhbV9uYW1lZChhdXhfdGltZW91dF9tcywgenlucW1wX2RwX2F1eF90aW1lb3V0X21zLCB1 aW50LCAwNDQ0KTsKPiA+ICtNT0RVTEVfUEFSTV9ERVNDKGF1eF90aW1lb3V0X21zLCAiRFAgYXV4 IHRpbWVvdXQgdmFsdWUgaW4gbXNlYyAoZGVmYXVsdDogNTApIik7Cj4gPiArCj4gPiArLyoKPiA+ ICsgKiBTb21lIHNpbmsgcmVxdWlyZXMgYSBkZWxheSBhZnRlciBwb3dlciBvbiByZXF1ZXN0Cj4g PiArICovCj4gPiArc3RhdGljIHVpbnQgenlucW1wX2RwX3Bvd2VyX29uX2RlbGF5X21zID0gNDsK PiA+ICttb2R1bGVfcGFyYW1fbmFtZWQocG93ZXJfb25fZGVsYXlfbXMsIHp5bnFtcF9kcF9wb3dl cl9vbl9kZWxheV9tcywgdWludCwgMDQ0NCk7Cj4gPiArTU9EVUxFX1BBUk1fREVTQyhhdXhfdGlt ZW91dF9tcywgIkRQIHBvd2VyIG9uIGRlbGF5IGluIG1zZWMgKGRlZmF1bHQ6IDQpIik7Cj4gPiAr Cj4gPiArLyogTGluayBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyAqLwo+ID4gKyNkZWZpbmUgWllO UU1QX0RQX0xJTktfQldfU0VUCQkJCTB4MAo+ID4gKyNkZWZpbmUgWllOUU1QX0RQX0xBTkVfQ09V TlRfU0VUCQkJMHg0Cj4gPiArI2RlZmluZSBaWU5RTVBfRFBfRU5IQU5DRURfRlJBTUVfRU4JCQkw eDgKPiA+ICsjZGVmaW5lIFpZTlFNUF9EUF9UUkFJTklOR19QQVRURVJOX1NFVAkJCTB4Ywo+ID4g KyNkZWZpbmUgWllOUU1QX0RQX1NDUkFNQkxJTkdfRElTQUJMRQkJCTB4MTQKPiA+ICsjZGVmaW5l IFpZTlFNUF9EUF9ET1dOU1BSRUFEX0NUTAkJCTB4MTgKPiA+ICsjZGVmaW5lIFpZTlFNUF9EUF9T T0ZUV0FSRV9SRVNFVAkJCTB4MWMKPiA+ICsjZGVmaW5lIFpZTlFNUF9EUF9TT0ZUV0FSRV9SRVNF VF9TVFJFQU0xCQlCSVQoMCkKPiA+ICsjZGVmaW5lIFpZTlFNUF9EUF9TT0ZUV0FSRV9SRVNFVF9T VFJFQU0yCQlCSVQoMSkKPiA+ICsjZGVmaW5lIFpZTlFNUF9EUF9TT0ZUV0FSRV9SRVNFVF9TVFJF QU0zCQlCSVQoMikKPiA+ICsjZGVmaW5lIFpZTlFNUF9EUF9TT0ZUV0FSRV9SRVNFVF9TVFJFQU00 CQlCSVQoMykKPiA+ICsjZGVmaW5lIFpZTlFNUF9EUF9TT0ZUV0FSRV9SRVNFVF9BVVgJCQlCSVQo NykKPiA+ICsjZGVmaW5lIFpZTlFNUF9EUF9TT0ZUV0FSRV9SRVNFVF9BTEwJCQkoWllOUU1QX0RQ X1NPRlRXQVJFX1JFU0VUX1NUUkVBTTEgfCBcCj4gPiArCQkJCQkJCSBaWU5RTVBfRFBfU09GVFdB UkVfUkVTRVRfU1RSRUFNMiB8IFwKPiA+ICsJCQkJCQkJIFpZTlFNUF9EUF9TT0ZUV0FSRV9SRVNF VF9TVFJFQU0zIHwgXAo+ID4gKwkJCQkJCQkgWllOUU1QX0RQX1NPRlRXQVJFX1JFU0VUX1NUUkVB TTQgfCBcCj4gPiArCQkJCQkJCSBaWU5RTVBfRFBfU09GVFdBUkVfUkVTRVRfQVVYKQo+ID4gKwo+ ID4gKy8qIENvcmUgZW5hYmxlIHJlZ2lzdGVycyAqLwo+ID4gKyNkZWZpbmUgWllOUU1QX0RQX1RS QU5TTUlUVEVSX0VOQUJMRQkJCTB4ODAKPiA+ICsjZGVmaW5lIFpZTlFNUF9EUF9NQUlOX1NUUkVB TV9FTkFCTEUJCQkweDg0Cj4gPiArI2RlZmluZSBaWU5RTVBfRFBfRk9SQ0VfU0NSQU1CTEVSX1JF U0VUCQkJMHhjMAo+ID4gKyNkZWZpbmUgWllOUU1QX0RQX1ZFUlNJT04JCQkJMHhmOAo+ID4gKyNk ZWZpbmUgWllOUU1QX0RQX1ZFUlNJT05fTUFKT1JfTUFTSwkJCUdFTk1BU0soMzEsIDI0KQo+ID4g KyNkZWZpbmUgWllOUU1QX0RQX1ZFUlNJT05fTUFKT1JfU0hJRlQJCQkyNAo+ID4gKyNkZWZpbmUg WllOUU1QX0RQX1ZFUlNJT05fTUlOT1JfTUFTSwkJCUdFTk1BU0soMjMsIDE2KQo+ID4gKyNkZWZp bmUgWllOUU1QX0RQX1ZFUlNJT05fTUlOT1JfU0hJRlQJCQkxNgo+ID4gKyNkZWZpbmUgWllOUU1Q X0RQX1ZFUlNJT05fUkVWSVNJT05fTUFTSwkJCUdFTk1BU0soMTUsIDEyKQo+ID4gKyNkZWZpbmUg WllOUU1QX0RQX1ZFUlNJT05fUkVWSVNJT05fU0hJRlQJCTEyCj4gPiArI2RlZmluZSBaWU5RTVBf RFBfVkVSU0lPTl9QQVRDSF9NQVNLCQkJR0VOTUFTSygxMSwgOCkKPiA+ICsjZGVmaW5lIFpZTlFN UF9EUF9WRVJTSU9OX1BBVENIX1NISUZUCQkJOAo+ID4gKyNkZWZpbmUgWllOUU1QX0RQX1ZFUlNJ T05fSU5URVJOQUxfTUFTSwkJCUdFTk1BU0soNywgMCkKPiA+ICsjZGVmaW5lIFpZTlFNUF9EUF9W RVJTSU9OX0lOVEVSTkFMX1NISUZUCQkwCj4gPiArCj4gPiArLyogQ29yZSBJRCByZWdpc3RlcnMg Ki8KPiA+ICsjZGVmaW5lIFpZTlFNUF9EUF9DT1JFX0lECQkJCTB4ZmMKPiA+ICsjZGVmaW5lIFpZ TlFNUF9EUF9DT1JFX0lEX01BSk9SX01BU0sJCQlHRU5NQVNLKDMxLCAyNCkKPiA+ICsjZGVmaW5l IFpZTlFNUF9EUF9DT1JFX0lEX01BSk9SX1NISUZUCQkJMjQKPiA+ICsjZGVmaW5lIFpZTlFNUF9E UF9DT1JFX0lEX01JTk9SX01BU0sJCQlHRU5NQVNLKDIzLCAxNikKPiA+ICsjZGVmaW5lIFpZTlFN UF9EUF9DT1JFX0lEX01JTk9SX1NISUZUCQkJMTYKPiA+ICsjZGVmaW5lIFpZTlFNUF9EUF9DT1JF X0lEX1JFVklTSU9OX01BU0sJCQlHRU5NQVNLKDE1LCA4KQo+ID4gKyNkZWZpbmUgWllOUU1QX0RQ X0NPUkVfSURfUkVWSVNJT05fU0hJRlQJCTgKPiA+ICsjZGVmaW5lIFpZTlFNUF9EUF9DT1JFX0lE X0RJUkVDVElPTgkJCUdFTk1BU0soMSkKPiA+ICsKPiA+ICsvKiBBVVggY2hhbm5lbCBpbnRlcmZh Y2UgcmVnaXN0ZXJzICovCj4gPiArI2RlZmluZSBaWU5RTVBfRFBfQVVYX0NPTU1BTkQJCQkJMHgx MDAKPiA+ICsjZGVmaW5lIFpZTlFNUF9EUF9BVVhfQ09NTUFORF9DTURfU0hJRlQJCQk4Cj4gPiAr I2RlZmluZSBaWU5RTVBfRFBfQVVYX0NPTU1BTkRfQUREUkVTU19PTkxZCQlCSVQoMTIpCj4gPiAr I2RlZmluZSBaWU5RTVBfRFBfQVVYX0NPTU1BTkRfQllURVNfU0hJRlQJCTAKPiA+ICsjZGVmaW5l IFpZTlFNUF9EUF9BVVhfV1JJVEVfRklGTwkJCTB4MTA0Cj4gPiArI2RlZmluZSBaWU5RTVBfRFBf QVVYX0FERFJFU1MJCQkJMHgxMDgKPiA+ICsjZGVmaW5lIFpZTlFNUF9EUF9BVVhfQ0xLX0RJVklE RVIJCQkweDEwYwo+ID4gKyNkZWZpbmUgWllOUU1QX0RQX0FVWF9DTEtfRElWSURFUl9BVVhfRklM VEVSX1NISUZUCTgKPiA+ICsjZGVmaW5lIFpZTlFNUF9EUF9JTlRFUlJVUFRfU0lHTkFMX1NUQVRF CQkweDEzMAo+ID4gKyNkZWZpbmUgWllOUU1QX0RQX0lOVEVSUlVQVF9TSUdOQUxfU1RBVEVfSFBE CQlCSVQoMCkKPiA+ICsjZGVmaW5lIFpZTlFNUF9EUF9JTlRFUlJVUFRfU0lHTkFMX1NUQVRFX1JF UVVFU1QJQklUKDEpCj4gPiArI2RlZmluZSBaWU5RTVBfRFBfSU5URVJSVVBUX1NJR05BTF9TVEFU RV9SRVBMWQkJQklUKDIpCj4gPiArI2RlZmluZSBaWU5RTVBfRFBfSU5URVJSVVBUX1NJR05BTF9T VEFURV9SRVBMWV9USU1FT1VUCUJJVCgzKQo+ID4gKyNkZWZpbmUgWllOUU1QX0RQX0FVWF9SRVBM WV9EQVRBCQkJMHgxMzQKPiA+ICsjZGVmaW5lIFpZTlFNUF9EUF9BVVhfUkVQTFlfQ09ERQkJCTB4 MTM4Cj4gPiArI2RlZmluZSBaWU5RTVBfRFBfQVVYX1JFUExZX0NPREVfQVVYX0FDSwkJKDApCj4g PiArI2RlZmluZSBaWU5RTVBfRFBfQVVYX1JFUExZX0NPREVfQVVYX05BQ0sJCUJJVCgwKQo+ID4g KyNkZWZpbmUgWllOUU1QX0RQX0FVWF9SRVBMWV9DT0RFX0FVWF9ERUZFUgkJQklUKDEpCj4gPiAr I2RlZmluZSBaWU5RTVBfRFBfQVVYX1JFUExZX0NPREVfSTJDX0FDSwkJKDApCj4gPiArI2RlZmlu ZSBaWU5RTVBfRFBfQVVYX1JFUExZX0NPREVfSTJDX05BQ0sJCUJJVCgyKQo+ID4gKyNkZWZpbmUg WllOUU1QX0RQX0FVWF9SRVBMWV9DT0RFX0kyQ19ERUZFUgkJQklUKDMpCj4gPiArI2RlZmluZSBa WU5RTVBfRFBfQVVYX1JFUExZX0NPVU5UCQkJMHgxM2MKPiA+ICsjZGVmaW5lIFpZTlFNUF9EUF9S RVBMWV9EQVRBX0NPVU5UCQkJMHgxNDgKPiA+ICsjZGVmaW5lIFpZTlFNUF9EUF9SRVBMWV9EQVRB X0NPVU5UX01BU0sJCQkweGZmCj4gPiArI2RlZmluZSBaWU5RTVBfRFBfSU5UX1NUQVRVUwkJCQkw eDNhMAo+ID4gKyNkZWZpbmUgWllOUU1QX0RQX0lOVF9NQVNLCQkJCTB4M2E0Cj4gPiArI2RlZmlu ZSBaWU5RTVBfRFBfSU5UX0VOCQkJCTB4M2E4Cj4gPiArI2RlZmluZSBaWU5RTVBfRFBfSU5UX0RT CQkJCTB4M2FjCj4gPiArI2RlZmluZSBaWU5RTVBfRFBfSU5UX0hQRF9JUlEJCQkJQklUKDApCj4g PiArI2RlZmluZSBaWU5RTVBfRFBfSU5UX0hQRF9FVkVOVAkJCQlCSVQoMSkKPiA+ICsjZGVmaW5l IFpZTlFNUF9EUF9JTlRfUkVQTFlfUkVDRUlWRUQJCQlCSVQoMikKPiA+ICsjZGVmaW5lIFpZTlFN UF9EUF9JTlRfUkVQTFlfVElNRU9VVAkJCUJJVCgzKQo+ID4gKyNkZWZpbmUgWllOUU1QX0RQX0lO VF9IUERfUFVMU0VfREVUCQkJQklUKDQpCj4gPiArI2RlZmluZSBaWU5RTVBfRFBfSU5UX0VYVF9Q S1RfVFhECQkJQklUKDUpCj4gPiArI2RlZmluZSBaWU5RTVBfRFBfSU5UX0xJVl9BQlVGX1VORFJG TFcJCQlCSVQoMTIpCj4gPiArI2RlZmluZSBaWU5RTVBfRFBfSU5UX1ZCTEFOS19TVEFSVAkJCUJJ VCgxMykKPiA+ICsjZGVmaW5lIFpZTlFNUF9EUF9JTlRfUElYRUwxX01BVENICQkJQklUKDE0KQo+ ID4gKyNkZWZpbmUgWllOUU1QX0RQX0lOVF9QSVhFTDBfTUFUQ0gJCQlCSVQoMTUpCj4gPiArI2Rl ZmluZSBaWU5RTVBfRFBfSU5UX0NIQlVGX1VOREVSRkxXX01BU0sJCTB4M2YwMDAwCj4gPiArI2Rl ZmluZSBaWU5RTVBfRFBfSU5UX0NIQlVGX09WRVJGTFdfTUFTSwkJMHhmYzAwMDAwCj4gPiArI2Rl ZmluZSBaWU5RTVBfRFBfSU5UX0NVU1RfVFNfMgkJCQlCSVQoMjgpCj4gPiArI2RlZmluZSBaWU5R TVBfRFBfSU5UX0NVU1RfVFMJCQkJQklUKDI5KQo+ID4gKyNkZWZpbmUgWllOUU1QX0RQX0lOVF9F WFRfVlNZTkNfVFMJCQlCSVQoMzApCj4gPiArI2RlZmluZSBaWU5RTVBfRFBfSU5UX1ZTWU5DX1RT CQkJCUJJVCgzMSkKPiA+ICsjZGVmaW5lIFpZTlFNUF9EUF9JTlRfQUxMCQkJCShaWU5RTVBfRFBf SU5UX0hQRF9JUlEgfCBcCj4gPiArCQkJCQkJCSBaWU5RTVBfRFBfSU5UX0hQRF9FVkVOVCB8IFwK PiA+ICsJCQkJCQkJIFpZTlFNUF9EUF9JTlRfQ0hCVUZfVU5ERVJGTFdfTUFTSyB8IFwKPiA+ICsJ CQkJCQkJIFpZTlFNUF9EUF9JTlRfQ0hCVUZfT1ZFUkZMV19NQVNLKQo+ID4gKwo+ID4gKy8qIE1h aW4gc3RyZWFtIGF0dHJpYnV0ZSByZWdpc3RlcnMgKi8KPiA+ICsjZGVmaW5lIFpZTlFNUF9EUF9N QUlOX1NUUkVBTV9IVE9UQUwJCQkweDE4MAo+ID4gKyNkZWZpbmUgWllOUU1QX0RQX01BSU5fU1RS RUFNX1ZUT1RBTAkJCTB4MTg0Cj4gPiArI2RlZmluZSBaWU5RTVBfRFBfTUFJTl9TVFJFQU1fUE9M QVJJVFkJCQkweDE4OAo+ID4gKyNkZWZpbmUgWllOUU1QX0RQX01BSU5fU1RSRUFNX1BPTEFSSVRZ X0hTWU5DX1NISUZUCTAKPiA+ICsjZGVmaW5lIFpZTlFNUF9EUF9NQUlOX1NUUkVBTV9QT0xBUklU WV9WU1lOQ19TSElGVAkxCj4gPiArI2RlZmluZSBaWU5RTVBfRFBfTUFJTl9TVFJFQU1fSFNXSURU SAkJCTB4MThjCj4gPiArI2RlZmluZSBaWU5RTVBfRFBfTUFJTl9TVFJFQU1fVlNXSURUSAkJCTB4 MTkwCj4gPiArI2RlZmluZSBaWU5RTVBfRFBfTUFJTl9TVFJFQU1fSFJFUwkJCTB4MTk0Cj4gPiAr I2RlZmluZSBaWU5RTVBfRFBfTUFJTl9TVFJFQU1fVlJFUwkJCTB4MTk4Cj4gPiArI2RlZmluZSBa WU5RTVBfRFBfTUFJTl9TVFJFQU1fSFNUQVJUCQkJMHgxOWMKPiA+ICsjZGVmaW5lIFpZTlFNUF9E UF9NQUlOX1NUUkVBTV9WU1RBUlQJCQkweDFhMAo+ID4gKyNkZWZpbmUgWllOUU1QX0RQX01BSU5f U1RSRUFNX01JU0MwCQkJMHgxYTQKPiA+ICsjZGVmaW5lIFpZTlFNUF9EUF9NQUlOX1NUUkVBTV9N SVNDMF9TWU5DX0xPQ0sJCUJJVCgwKQo+ID4gKyNkZWZpbmUgWllOUU1QX0RQX01BSU5fU1RSRUFN X01JU0MwX0NPTVBfRk9STUFUX1JHQgkoMCA8PCAxKQo+ID4gKyNkZWZpbmUgWllOUU1QX0RQX01B SU5fU1RSRUFNX01JU0MwX0NPTVBfRk9STUFUX1lDUkNCXzQyMgkoNSA8PCAxKQo+ID4gKyNkZWZp bmUgWllOUU1QX0RQX01BSU5fU1RSRUFNX01JU0MwX0NPTVBfRk9STUFUX1lDUkNCXzQ0NAkoNiA8 PCAxKQo+ID4gKyNkZWZpbmUgWllOUU1QX0RQX01BSU5fU1RSRUFNX01JU0MwX0NPTVBfRk9STUFU X01BU0sJKDcgPDwgMSkKPiA+ICsjZGVmaW5lIFpZTlFNUF9EUF9NQUlOX1NUUkVBTV9NSVNDMF9E WU5BTUlDX1JBTkdFCUJJVCgzKQo+ID4gKyNkZWZpbmUgWllOUU1QX0RQX01BSU5fU1RSRUFNX01J U0MwX1lDQkNSX0NPTFIJCUJJVCg0KQo+ID4gKyNkZWZpbmUgWllOUU1QX0RQX01BSU5fU1RSRUFN X01JU0MwX0JQQ182CQkoMCA8PCA1KQo+ID4gKyNkZWZpbmUgWllOUU1QX0RQX01BSU5fU1RSRUFN X01JU0MwX0JQQ184CQkoMSA8PCA1KQo+ID4gKyNkZWZpbmUgWllOUU1QX0RQX01BSU5fU1RSRUFN X01JU0MwX0JQQ18xMAkJKDIgPDwgNSkKPiA+ICsjZGVmaW5lIFpZTlFNUF9EUF9NQUlOX1NUUkVB TV9NSVNDMF9CUENfMTIJCSgzIDw8IDUpCj4gPiArI2RlZmluZSBaWU5RTVBfRFBfTUFJTl9TVFJF QU1fTUlTQzBfQlBDXzE2CQkoNCA8PCA1KQo+ID4gKyNkZWZpbmUgWllOUU1QX0RQX01BSU5fU1RS RUFNX01JU0MwX0JQQ19NQVNLCQkoNyA8PCA1KQo+ID4gKyNkZWZpbmUgWllOUU1QX0RQX01BSU5f U1RSRUFNX01JU0MxCQkJMHgxYTgKPiA+ICsjZGVmaW5lIFpZTlFNUF9EUF9NQUlOX1NUUkVBTV9N SVNDMV9ZX09OTFlfRU4JCUJJVCg3KQo+ID4gKyNkZWZpbmUgWllOUU1QX0RQX01BSU5fU1RSRUFN X01fVklECQkJMHgxYWMKPiA+ICsjZGVmaW5lIFpZTlFNUF9EUF9NU0FfVFJBTlNGRVJfVU5JVF9T SVpFCQkweDFiMAo+ID4gKyNkZWZpbmUgWllOUU1QX0RQX01TQV9UUkFOU0ZFUl9VTklUX1NJWkVf VFVfU0laRV9ERUYJNjQKPiA+ICsjZGVmaW5lIFpZTlFNUF9EUF9NQUlOX1NUUkVBTV9OX1ZJRAkJ CTB4MWI0Cj4gPiArI2RlZmluZSBaWU5RTVBfRFBfVVNFUl9QSVhfV0lEVEgJCQkweDFiOAo+ID4g KyNkZWZpbmUgWllOUU1QX0RQX1VTRVJfREFUQV9DT1VOVF9QRVJfTEFORQkJMHgxYmMKPiA+ICsj ZGVmaW5lIFpZTlFNUF9EUF9NSU5fQllURVNfUEVSX1RVCQkJMHgxYzQKPiA+ICsjZGVmaW5lIFpZ TlFNUF9EUF9GUkFDX0JZVEVTX1BFUl9UVQkJCTB4MWM4Cj4gPiArI2RlZmluZSBaWU5RTVBfRFBf SU5JVF9XQUlUCQkJCTB4MWNjCj4gPiArCj4gPiArLyogUEhZIGNvbmZpZ3VyYXRpb24gYW5kIHN0 YXR1cyByZWdpc3RlcnMgKi8KPiA+ICsjZGVmaW5lIFpZTlFNUF9EUF9QSFlfUkVTRVQJCQkJMHgy MDAKPiA+ICsjZGVmaW5lIFpZTlFNUF9EUF9QSFlfUkVTRVRfUEhZX1JFU0VUCQkJQklUKDApCj4g PiArI2RlZmluZSBaWU5RTVBfRFBfUEhZX1JFU0VUX0dUVFhfUkVTRVQJCQlCSVQoMSkKPiA+ICsj ZGVmaW5lIFpZTlFNUF9EUF9QSFlfUkVTRVRfUEhZX1BNQV9SRVNFVAkJQklUKDgpCj4gPiArI2Rl ZmluZSBaWU5RTVBfRFBfUEhZX1JFU0VUX1BIWV9QQ1NfUkVTRVQJCUJJVCg5KQo+ID4gKyNkZWZp bmUgWllOUU1QX0RQX1BIWV9SRVNFVF9BTExfUkVTRVQJCQkoWllOUU1QX0RQX1BIWV9SRVNFVF9Q SFlfUkVTRVQgfCBcCj4gPiArCQkJCQkJCSBaWU5RTVBfRFBfUEhZX1JFU0VUX0dUVFhfUkVTRVQg fCBcCj4gPiArCQkJCQkJCSBaWU5RTVBfRFBfUEhZX1JFU0VUX1BIWV9QTUFfUkVTRVQgfCBcCj4g PiArCQkJCQkJCSBaWU5RTVBfRFBfUEhZX1JFU0VUX1BIWV9QQ1NfUkVTRVQpCj4gPiArI2RlZmlu ZSBaWU5RTVBfRFBfUEhZX1BSRUVNUEhBU0lTX0xBTkVfMAkJMHgyMTAKPiA+ICsjZGVmaW5lIFpZ TlFNUF9EUF9QSFlfUFJFRU1QSEFTSVNfTEFORV8xCQkweDIxNAo+ID4gKyNkZWZpbmUgWllOUU1Q X0RQX1BIWV9QUkVFTVBIQVNJU19MQU5FXzIJCTB4MjE4Cj4gPiArI2RlZmluZSBaWU5RTVBfRFBf UEhZX1BSRUVNUEhBU0lTX0xBTkVfMwkJMHgyMWMKPiA+ICsjZGVmaW5lIFpZTlFNUF9EUF9QSFlf Vk9MVEFHRV9ESUZGX0xBTkVfMAkJMHgyMjAKPiA+ICsjZGVmaW5lIFpZTlFNUF9EUF9QSFlfVk9M VEFHRV9ESUZGX0xBTkVfMQkJMHgyMjQKPiA+ICsjZGVmaW5lIFpZTlFNUF9EUF9QSFlfVk9MVEFH RV9ESUZGX0xBTkVfMgkJMHgyMjgKPiA+ICsjZGVmaW5lIFpZTlFNUF9EUF9QSFlfVk9MVEFHRV9E SUZGX0xBTkVfMwkJMHgyMmMKPiA+ICsjZGVmaW5lIFpZTlFNUF9EUF9QSFlfQ0xPQ0tfU0VMRUNU CQkJMHgyMzQKPiA+ICsjZGVmaW5lIFpZTlFNUF9EUF9QSFlfQ0xPQ0tfU0VMRUNUXzFfNjJHCQkw eDEKPiA+ICsjZGVmaW5lIFpZTlFNUF9EUF9QSFlfQ0xPQ0tfU0VMRUNUXzJfNzBHCQkweDMKPiA+ ICsjZGVmaW5lIFpZTlFNUF9EUF9QSFlfQ0xPQ0tfU0VMRUNUXzVfNDBHCQkweDUKPiA+ICsjZGVm aW5lIFpZTlFNUF9EUF9UWF9QSFlfUE9XRVJfRE9XTgkJCTB4MjM4Cj4gPiArI2RlZmluZSBaWU5R TVBfRFBfVFhfUEhZX1BPV0VSX0RPV05fTEFORV8wCQlCSVQoMCkKPiA+ICsjZGVmaW5lIFpZTlFN UF9EUF9UWF9QSFlfUE9XRVJfRE9XTl9MQU5FXzEJCUJJVCgxKQo+ID4gKyNkZWZpbmUgWllOUU1Q X0RQX1RYX1BIWV9QT1dFUl9ET1dOX0xBTkVfMgkJQklUKDIpCj4gPiArI2RlZmluZSBaWU5RTVBf RFBfVFhfUEhZX1BPV0VSX0RPV05fTEFORV8zCQlCSVQoMykKPiA+ICsjZGVmaW5lIFpZTlFNUF9E UF9UWF9QSFlfUE9XRVJfRE9XTl9BTEwJCQkweGYKPiA+ICsjZGVmaW5lIFpZTlFNUF9EUF9QSFlf UFJFQ1VSU09SX0xBTkVfMAkJCTB4MjNjCj4gPiArI2RlZmluZSBaWU5RTVBfRFBfUEhZX1BSRUNV UlNPUl9MQU5FXzEJCQkweDI0MAo+ID4gKyNkZWZpbmUgWllOUU1QX0RQX1BIWV9QUkVDVVJTT1Jf TEFORV8yCQkJMHgyNDQKPiA+ICsjZGVmaW5lIFpZTlFNUF9EUF9QSFlfUFJFQ1VSU09SX0xBTkVf MwkJCTB4MjQ4Cj4gPiArI2RlZmluZSBaWU5RTVBfRFBfUEhZX1BPU1RDVVJTT1JfTEFORV8wCQkJ MHgyNGMKPiA+ICsjZGVmaW5lIFpZTlFNUF9EUF9QSFlfUE9TVENVUlNPUl9MQU5FXzEJCQkweDI1 MAo+ID4gKyNkZWZpbmUgWllOUU1QX0RQX1BIWV9QT1NUQ1VSU09SX0xBTkVfMgkJCTB4MjU0Cj4g PiArI2RlZmluZSBaWU5RTVBfRFBfUEhZX1BPU1RDVVJTT1JfTEFORV8zCQkJMHgyNTgKPiA+ICsj ZGVmaW5lIFpZTlFNUF9EUF9TVUJfVFhfUEhZX1BSRUNVUlNPUl9MQU5FXzAJCTB4MjRjCj4gPiAr I2RlZmluZSBaWU5RTVBfRFBfU1VCX1RYX1BIWV9QUkVDVVJTT1JfTEFORV8xCQkweDI1MAo+ID4g KyNkZWZpbmUgWllOUU1QX0RQX1BIWV9TVEFUVVMJCQkJMHgyODAKPiA+ICsjZGVmaW5lIFpZTlFN UF9EUF9QSFlfU1RBVFVTX1BMTF9MT0NLRURfU0hJRlQJCTQKPiA+ICsjZGVmaW5lIFpZTlFNUF9E UF9QSFlfU1RBVFVTX0ZQR0FfUExMX0xPQ0tFRAkJQklUKDYpCj4gPiArCj4gPiArLyogQXVkaW8g cmVnaXN0ZXJzICovCj4gPiArI2RlZmluZSBaWU5RTVBfRFBfVFhfQVVESU9fQ09OVFJPTAkJCTB4 MzAwCj4gPiArI2RlZmluZSBaWU5RTVBfRFBfVFhfQVVESU9fQ0hBTk5FTFMJCQkweDMwNAo+ID4g KyNkZWZpbmUgWllOUU1QX0RQX1RYX0FVRElPX0lORk9fREFUQQkJCTB4MzA4Cj4gPiArI2RlZmlu ZSBaWU5RTVBfRFBfVFhfTV9BVUQJCQkJMHgzMjgKPiA+ICsjZGVmaW5lIFpZTlFNUF9EUF9UWF9O X0FVRAkJCQkweDMyYwo+ID4gKyNkZWZpbmUgWllOUU1QX0RQX1RYX0FVRElPX0VYVF9EQVRBCQkJ MHgzMzAKPiA+ICsKPiA+ICsjZGVmaW5lIFpZTlFNUF9EUF9NQVhfTEFORVMJCQkJMgo+ID4gKyNk ZWZpbmUgWllOUU1QX01BWF9GUkVRCQkJCQkzMDAwMDAwCj4gPiArCj4gPiArI2RlZmluZSBEUF9S RURVQ0VEX0JJVF9SQVRFCQkJCTE2MjAwMAo+ID4gKyNkZWZpbmUgRFBfSElHSF9CSVRfUkFURQkJ CQkyNzAwMDAKPiA+ICsjZGVmaW5lIERQX0hJR0hfQklUX1JBVEUyCQkJCTU0MDAwMAo+ID4gKyNk ZWZpbmUgRFBfTUFYX1RSQUlOSU5HX1RSSUVTCQkJCTUKPiA+ICsjZGVmaW5lIERQX1YxXzIJCQkJ CQkweDEyCj4gPiArCj4gPiArLyoqCj4gPiArICogc3RydWN0IHp5bnFtcF9kcF9saW5rX2NvbmZp ZyAtIENvbW1vbiBsaW5rIGNvbmZpZyBiZXR3ZWVuIHNvdXJjZSBhbmQgc2luawo+ID4gKyAqIEBt YXhfcmF0ZTogbWF4aW11bSBsaW5rIHJhdGUKPiA+ICsgKiBAbWF4X2xhbmVzOiBtYXhpbXVtIG51 bWJlciBvZiBsYW5lcwo+ID4gKyAqLwo+ID4gK3N0cnVjdCB6eW5xbXBfZHBfbGlua19jb25maWcg ewo+ID4gKwlpbnQgbWF4X3JhdGU7Cj4gPiArCXU4IG1heF9sYW5lczsKPiA+ICt9Owo+ID4gKwo+ ID4gKy8qKgo+ID4gKyAqIHN0cnVjdCB6eW5xbXBfZHBfbW9kZSAtIENvbmZpZ3VyZWQgbW9kZSBv ZiBEaXNwbGF5UG9ydAo+ID4gKyAqIEBid19jb2RlOiBjb2RlIGZvciBiYW5kd2lkdGgobGluayBy YXRlKQo+ID4gKyAqIEBsYW5lX2NudDogbnVtYmVyIG9mIGxhbmVzCj4gPiArICogQHBjbG9jazog cGl4ZWwgY2xvY2sgZnJlcXVlbmN5IG9mIGN1cnJlbnQgbW9kZQo+ID4gKyAqIEBmbXQ6IGZvcm1h dCBpZGVudGlmaWVyIHN0cmluZwo+ID4gKyAqLwo+ID4gK3N0cnVjdCB6eW5xbXBfZHBfbW9kZSB7 Cj4gPiArCXU4IGJ3X2NvZGU7Cj4gPiArCXU4IGxhbmVfY250Owo+ID4gKwlpbnQgcGNsb2NrOwo+ ID4gKwljb25zdCBjaGFyICpmbXQ7Cj4gPiArfTsKPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBzdHJ1 Y3QgenlucW1wX2RwX2NvbmZpZyAtIENvbmZpZ3VyYXRpb24gb2YgRGlzcGxheVBvcnQgZnJvbSBE VFMKPiA+ICsgKiBAbWlzYzA6IG1pc2MwIGNvbmZpZ3VyYXRpb24gKHBlciBEUCB2MS4yIHNwZWMp Cj4gPiArICogQG1pc2MxOiBtaXNjMSBjb25maWd1cmF0aW9uIChwZXIgRFAgdjEuMiBzcGVjKQo+ ID4gKyAqIEBicHA6IGJpdHMgcGVyIHBpeGVsCj4gPiArICovCj4gPiArc3RydWN0IHp5bnFtcF9k cF9jb25maWcgewo+ID4gKwl1OCBtaXNjMDsKPiA+ICsJdTggbWlzYzE7Cj4gPiArCXU4IGJwcDsK PiA+ICt9Owo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIHN0cnVjdCB6eW5xbXBfZHAgLSBYaWxpbngg RGlzcGxheVBvcnQgY29yZQo+ID4gKyAqIEBlbmNvZGVyOiB0aGUgZHJtIGVuY29kZXIgc3RydWN0 dXJlCj4gPiArICogQGNvbm5lY3RvcjogdGhlIGRybSBjb25uZWN0b3Igc3RydWN0dXJlCj4gPiAr ICogQGRldjogZGV2aWNlIHN0cnVjdHVyZQo+ID4gKyAqIEBkcHN1YjogRGlzcGxheSBzdWJzeXN0 ZW0KPiA+ICsgKiBAZHJtOiBEUk0gY29yZQo+ID4gKyAqIEBpb21lbTogZGV2aWNlIEkvTyBtZW1v cnkgZm9yIHJlZ2lzdGVyIGFjY2Vzcwo+ID4gKyAqIEByZXNldDogcmVzZXQgY29udHJvbGxlcgo+ ID4gKyAqIEBpcnE6IGlycQo+ID4gKyAqIEBjb25maWc6IElQIGNvcmUgY29uZmlndXJhdGlvbiBm cm9tIERUUwo+ID4gKyAqIEBhdXg6IGF1eCBjaGFubmVsCj4gPiArICogQHBoeTogUEhZIGhhbmRs ZXMgZm9yIERQIGxhbmVzCj4gPiArICogQG51bV9sYW5lczogbnVtYmVyIG9mIGVuYWJsZWQgcGh5 IGxhbmVzCj4gPiArICogQGhwZF93b3JrOiBob3QgcGx1ZyBkZXRlY3Rpb24gd29ya2VyCj4gPiAr ICogQHN0YXR1czogY29ubmVjdGlvbiBzdGF0dXMKPiA+ICsgKiBAZW5hYmxlZDogZmxhZyB0byBp bmRpY2F0ZSBpZiB0aGUgZGV2aWNlIGlzIGVuYWJsZWQKPiA+ICsgKiBAZHBjZDogRFAgY29uZmln dXJhdGlvbiBkYXRhIGZyb20gY3VycmVudGx5IGNvbm5lY3RlZCBzaW5rIGRldmljZQo+ID4gKyAq IEBsaW5rX2NvbmZpZzogY29tbW9uIGxpbmsgY29uZmlndXJhdGlvbiBiZXR3ZWVuIElQIGNvcmUg YW5kIHNpbmsgZGV2aWNlCj4gPiArICogQG1vZGU6IGN1cnJlbnQgbW9kZSBiZXR3ZWVuIElQIGNv cmUgYW5kIHNpbmsgZGV2aWNlCj4gPiArICogQHRyYWluX3NldDogc2V0IG9mIHRyYWluaW5nIGRh dGEKPiA+ICsgKi8KPiA+ICtzdHJ1Y3QgenlucW1wX2RwIHsKPiA+ICsJc3RydWN0IGRybV9lbmNv ZGVyIGVuY29kZXI7Cj4gPiArCXN0cnVjdCBkcm1fY29ubmVjdG9yIGNvbm5lY3RvcjsKPiA+ICsJ c3RydWN0IGRldmljZSAqZGV2Owo+ID4gKwlzdHJ1Y3QgenlucW1wX2Rwc3ViICpkcHN1YjsKPiA+ ICsJc3RydWN0IGRybV9kZXZpY2UgKmRybTsKPiA+ICsJdm9pZCBfX2lvbWVtICppb21lbTsKPiA+ ICsJc3RydWN0IHJlc2V0X2NvbnRyb2wgKnJlc2V0Owo+ID4gKwlpbnQgaXJxOwo+ID4gKwo+ID4g KwlzdHJ1Y3QgenlucW1wX2RwX2NvbmZpZyBjb25maWc7Cj4gPiArCXN0cnVjdCBkcm1fZHBfYXV4 IGF1eDsKPiA+ICsJc3RydWN0IHBoeSAqcGh5W1pZTlFNUF9EUF9NQVhfTEFORVNdOwo+ID4gKwl1 OCBudW1fbGFuZXM7Cj4gPiArCXN0cnVjdCBkZWxheWVkX3dvcmsgaHBkX3dvcms7Cj4gPiArCWVu dW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgc3RhdHVzOwo+ID4gKwlib29sIGVuYWJsZWQ7Cj4gPiAr Cj4gPiArCXU4IGRwY2RbRFBfUkVDRUlWRVJfQ0FQX1NJWkVdOwo+ID4gKwlzdHJ1Y3QgenlucW1w X2RwX2xpbmtfY29uZmlnIGxpbmtfY29uZmlnOwo+ID4gKwlzdHJ1Y3QgenlucW1wX2RwX21vZGUg bW9kZTsKPiA+ICsJdTggdHJhaW5fc2V0W1pZTlFNUF9EUF9NQVhfTEFORVNdOwo+ID4gK307Cj4g PiArCj4gPiArc3RhdGljIGlubGluZSBzdHJ1Y3QgenlucW1wX2RwICplbmNvZGVyX3RvX2RwKHN0 cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKPiA+ICt7Cj4gPiArCXJldHVybiBjb250YWluZXJf b2YoZW5jb2Rlciwgc3RydWN0IHp5bnFtcF9kcCwgZW5jb2Rlcik7Cj4gPiArfQo+ID4gKwo+ID4g K3N0YXRpYyBpbmxpbmUgc3RydWN0IHp5bnFtcF9kcCAqY29ubmVjdG9yX3RvX2RwKHN0cnVjdCBk cm1fY29ubmVjdG9yICpjb25uZWN0b3IpCj4gPiArewo+ID4gKwlyZXR1cm4gY29udGFpbmVyX29m KGNvbm5lY3Rvciwgc3RydWN0IHp5bnFtcF9kcCwgY29ubmVjdG9yKTsKPiA+ICt9Cj4gPiArCj4g PiArc3RhdGljIHZvaWQgenlucW1wX2RwX3dyaXRlKHN0cnVjdCB6eW5xbXBfZHAgKmRwLCBpbnQg b2Zmc2V0LCB1MzIgdmFsKQo+ID4gK3sKPiA+ICsJd3JpdGVsKHZhbCwgZHAtPmlvbWVtICsgb2Zm c2V0KTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHUzMiB6eW5xbXBfZHBfcmVhZChzdHJ1Y3Qg enlucW1wX2RwICpkcCwgaW50IG9mZnNldCkKPiA+ICt7Cj4gPiArCXJldHVybiByZWFkbChkcC0+ aW9tZW0gKyBvZmZzZXQpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCB6eW5xbXBfZHBf Y2xyKHN0cnVjdCB6eW5xbXBfZHAgKmRwLCBpbnQgb2Zmc2V0LCB1MzIgY2xyKQo+ID4gK3sKPiA+ ICsJenlucW1wX2RwX3dyaXRlKGRwLCBvZmZzZXQsIHp5bnFtcF9kcF9yZWFkKGRwLCBvZmZzZXQp ICYgfmNscik7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIHp5bnFtcF9kcF9zZXQoc3Ry dWN0IHp5bnFtcF9kcCAqZHAsIGludCBvZmZzZXQsIHUzMiBzZXQpCj4gPiArewo+ID4gKwl6eW5x bXBfZHBfd3JpdGUoZHAsIG9mZnNldCwgenlucW1wX2RwX3JlYWQoZHAsIG9mZnNldCkgfCBzZXQp Owo+ID4gK30KPiA+ICsKPiA+ICsvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ID4gKyAqIFBIWSBI YW5kbGluZwo+ID4gKyAqLwo+ID4gKwo+ID4gKyNkZWZpbmUgUlNUX1RJTUVPVVRfTVMJCQkxMDAw Cj4gPiArCj4gPiArc3RhdGljIGludCB6eW5xbXBfZHBfcmVzZXQoc3RydWN0IHp5bnFtcF9kcCAq ZHAsIGJvb2wgYXNzZXJ0KQo+ID4gK3sKPiA+ICsJdW5zaWduZWQgbG9uZyB0aW1lb3V0Owo+ID4g Kwo+ID4gKwlpZiAoYXNzZXJ0KQo+ID4gKwkJcmVzZXRfY29udHJvbF9hc3NlcnQoZHAtPnJlc2V0 KTsKPiA+ICsJZWxzZQo+ID4gKwkJcmVzZXRfY29udHJvbF9kZWFzc2VydChkcC0+cmVzZXQpOwo+ ID4gKwo+ID4gKwkvKiBXYWl0IGZvciB0aGUgKGRlKWFzc2VydCB0byBjb21wbGV0ZS4gKi8KPiA+ ICsJdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKFJTVF9USU1FT1VUX01TKTsK PiA+ICsJd2hpbGUgKCF0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHRpbWVvdXQpKSB7Cj4gPiArCQli b29sIHN0YXR1cyA9ICEhcmVzZXRfY29udHJvbF9zdGF0dXMoZHAtPnJlc2V0KTsKPiA+ICsKPiA+ ICsJCWlmIChhc3NlcnQgPT0gc3RhdHVzKQo+ID4gKwkJCXJldHVybiAwOwo+ID4gKwo+ID4gKwkJ Y3B1X3JlbGF4KCk7Cj4gPiArCX0KPiA+ICsKPiA+ICsJZGV2X2VycihkcC0+ZGV2LCAicmVzZXQg JXMgdGltZW91dFxuIiwgYXNzZXJ0ID8gImFzc2VydCIgOiAiZGVhc3NlcnQiKTsKPiA+ICsJcmV0 dXJuIC1FVElNRURPVVQ7Cj4gPiArfQo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIHp5bnFtcF9kcF9w aHlfaW5pdCAtIEluaXRpYWxpemUgdGhlIHBoeQo+ID4gKyAqIEBkcDogRGlzcGxheVBvcnQgSVAg Y29yZSBzdHJ1Y3R1cmUKPiA+ICsgKgo+ID4gKyAqIEluaXRpYWxpemUgdGhlIHBoeS4KPiA+ICsg Kgo+ID4gKyAqIFJldHVybjogMCBpZiB0aGUgcGh5IGluc3RhbmNlcyBhcmUgaW5pdGlhbGl6ZWQg Y29ycmVjdGx5LCBvciB0aGUgZXJyb3IgY29kZQo+ID4gKyAqIHJldHVybmVkIGZyb20gdGhlIGNh bGxlZSBmdW5jdGlvbnMuCj4gPiArICovCj4gPiArc3RhdGljIGludCB6eW5xbXBfZHBfcGh5X2lu aXQoc3RydWN0IHp5bnFtcF9kcCAqZHApCj4gPiArewo+ID4gKwlpbnQgcmV0Owo+ID4gKwlpbnQg aTsKPiA+ICsKPiA+ICsJZm9yIChpID0gMDsgaSA8IGRwLT5udW1fbGFuZXM7IGkrKykgewo+ID4g KwkJcmV0ID0gcGh5X2luaXQoZHAtPnBoeVtpXSk7Cj4gPiArCQlpZiAocmV0KSB7Cj4gPiArCQkJ ZGV2X2VycihkcC0+ZGV2LCAiZmFpbGVkIHRvIGluaXQgcGh5IGxhbmUgJWRcbiIsIGkpOwo+ID4g KwkJCXJldHVybiByZXQ7Cj4gPiArCQl9Cj4gPiArCX0KPiA+ICsKPiA+ICsJcmV0ID0genlucW1w X2RwX3Jlc2V0KGRwLCBmYWxzZSk7Cj4gPiArCWlmIChyZXQgPCAwKQo+ID4gKwkJcmV0dXJuIHJl dDsKPiA+ICsKPiA+ICsJenlucW1wX2RwX2NscihkcCwgWllOUU1QX0RQX1BIWV9SRVNFVCwgWllO UU1QX0RQX1BIWV9SRVNFVF9BTExfUkVTRVQpOwo+ID4gKwo+ID4gKwkvKgo+ID4gKwkgKiBQb3dl ciBvbiBsYW5lcyBpbiByZXZlcnNlIG9yZGVyIGFzIG9ubHkgbGFuZSAwIHdhaXRzIGZvciB0aGUg UExMIHRvCj4gPiArCSAqIGxvY2suCj4gPiArCSAqLwo+ID4gKwlmb3IgKGkgPSBkcC0+bnVtX2xh bmVzIC0gMTsgaSA+PSAwOyBpLS0pIHsKPiA+ICsJCXJldCA9IHBoeV9wb3dlcl9vbihkcC0+cGh5 W2ldKTsKPiA+ICsJCWlmIChyZXQpIHsKPiA+ICsJCQlkZXZfZXJyKGRwLT5kZXYsICJmYWlsZWQg dG8gcG93ZXIgb24gcGh5IGxhbmUgJWRcbiIsIGkpOwo+ID4gKwkJCXJldHVybiByZXQ7Cj4gPiAr CQl9Cj4gPiArCX0KPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gKy8qKgo+ ID4gKyAqIHp5bnFtcF9kcF9waHlfZXhpdCAtIEV4aXQgdGhlIHBoeQo+ID4gKyAqIEBkcDogRGlz cGxheVBvcnQgSVAgY29yZSBzdHJ1Y3R1cmUKPiA+ICsgKgo+ID4gKyAqIEV4aXQgdGhlIHBoeS4K PiA+ICsgKi8KPiA+ICtzdGF0aWMgdm9pZCB6eW5xbXBfZHBfcGh5X2V4aXQoc3RydWN0IHp5bnFt cF9kcCAqZHApCj4gPiArewo+ID4gKwl1bnNpZ25lZCBpbnQgaTsKPiA+ICsJaW50IHJldDsKPiA+ ICsKPiA+ICsJZm9yIChpID0gMDsgaSA8IGRwLT5udW1fbGFuZXM7IGkrKykgewo+ID4gKwkJcmV0 ID0gcGh5X3Bvd2VyX29mZihkcC0+cGh5W2ldKTsKPiA+ICsJCWlmIChyZXQpCj4gPiArCQkJZGV2 X2VycihkcC0+ZGV2LCAiZmFpbGVkIHRvIHBvd2VyIG9mZiBwaHkoJWQpICVkXG4iLCBpLAo+ID4g KwkJCQlyZXQpOwo+ID4gKwl9Cj4gPiArCj4gPiArCXp5bnFtcF9kcF9yZXNldChkcCwgdHJ1ZSk7 Cj4gPiArCj4gPiArCWZvciAoaSA9IDA7IGkgPCBkcC0+bnVtX2xhbmVzOyBpKyspIHsKPiA+ICsJ CXJldCA9IHBoeV9leGl0KGRwLT5waHlbaV0pOwo+ID4gKwkJaWYgKHJldCkKPiA+ICsJCQlkZXZf ZXJyKGRwLT5kZXYsICJmYWlsZWQgdG8gZXhpdCBwaHkoJWQpICVkXG4iLCBpLCByZXQpOwo+ID4g Kwl9Cj4gPiArfQo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIHp5bnFtcF9kcF9waHlfcHJvYmUgLSBQ cm9iZSB0aGUgUEhZcwo+ID4gKyAqIEBkcDogRGlzcGxheVBvcnQgSVAgY29yZSBzdHJ1Y3R1cmUK PiA+ICsgKgo+ID4gKyAqIFByb2JlIFBIWXMgZm9yIGFsbCBsYW5lcy4gTGVzcyBQSFlzIG1heSBi ZSBhdmFpbGFibGUgdGhhbiB0aGUgbnVtYmVyIG9mCj4gPiArICogbGFuZXMsIHdoaWNoIGlzIG5v dCBjb25zaWRlcmVkIGFuIGVycm9yIGFzIGxvbmcgYXMgYXQgbGVhc3Qgb25lIFBIWSBpcwo+ID4g KyAqIGZvdW5kLiBUaGUgY2FsbGVyIGNhbiBjaGVjayBkcC0+bnVtX2xhbmVzIHRvIGNoZWNrIGhv dyBtYW55IFBIWXMgd2VyZSBmb3VuZC4KPiA+ICsgKgo+ID4gKyAqIFJldHVybjoKPiA+ICsgKiAq IDAJCQkJLSBTdWNjZXNzCj4gPiArICogKiAtRU5YSU8JCQktIE5vIFBIWSBmb3VuZAo+ID4gKyAq ICogLUVQUk9CRV9ERUZFUgkJLSBQcm9iZSBkZWZlcnJhbCByZXF1ZXN0ZWQKPiA+ICsgKiAqIE90 aGVyIG5lZ2F0aXZlIHZhbHVlCS0gUEhZIHJldHJpZXZhbCBmYWlsdXJlCj4gPiArICovCj4gPiAr c3RhdGljIGludCB6eW5xbXBfZHBfcGh5X3Byb2JlKHN0cnVjdCB6eW5xbXBfZHAgKmRwKQo+ID4g K3sKPiA+ICsJdW5zaWduZWQgaW50IGk7Cj4gPiArCj4gPiArCWZvciAoaSA9IDA7IGkgPCBaWU5R TVBfRFBfTUFYX0xBTkVTOyBpKyspIHsKPiA+ICsJCWNoYXIgcGh5X25hbWVbMTZdOwo+ID4gKwkJ c3RydWN0IHBoeSAqcGh5Owo+ID4gKwo+ID4gKwkJc25wcmludGYocGh5X25hbWUsIHNpemVvZihw aHlfbmFtZSksICJkcC1waHklZCIsIGkpOwo+ID4gKwkJcGh5ID0gZGV2bV9waHlfZ2V0KGRwLT5k ZXYsIHBoeV9uYW1lKTsKPiA+ICsKPiA+ICsJCWlmIChJU19FUlIocGh5KSkgewo+ID4gKwkJCXN3 aXRjaCAoUFRSX0VSUihwaHkpKSB7Cj4gPiArCQkJY2FzZSAtRU5PREVWOgo+ID4gKwkJCQlpZiAo ZHAtPm51bV9sYW5lcykKPiA+ICsJCQkJCXJldHVybiAwOwo+ID4gKwo+ID4gKwkJCQlkZXZfZXJy KGRwLT5kZXYsICJubyBQSFkgZm91bmRcbiIpOwo+ID4gKwkJCQlyZXR1cm4gLUVOWElPOwo+ID4g Kwo+ID4gKwkJCWNhc2UgLUVQUk9CRV9ERUZFUjoKPiA+ICsJCQkJcmV0dXJuIC1FUFJPQkVfREVG RVI7Cj4gPiArCj4gPiArCQkJZGVmYXVsdDoKPiA+ICsJCQkJZGV2X2VycihkcC0+ZGV2LCAiZmFp bGVkIHRvIGdldCBQSFkgbGFuZSAldVxuIiwKPiA+ICsJCQkJCWkpOwo+ID4gKwkJCQlyZXR1cm4g UFRSX0VSUihwaHkpOwo+ID4gKwkJCX0KPiA+ICsJCX0KPiA+ICsKPiA+ICsJCWRwLT5waHlbaV0g PSBwaHk7Cj4gPiArCQlkcC0+bnVtX2xhbmVzKys7Cj4gPiArCX0KPiA+ICsKPiA+ICsJcmV0dXJu IDA7Cj4gPiArfQo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIHp5bnFtcF9kcF9waHlfcmVhZHkgLSBD aGVjayBpZiBQSFkgaXMgcmVhZHkKPiA+ICsgKiBAZHA6IERpc3BsYXlQb3J0IElQIGNvcmUgc3Ry dWN0dXJlCj4gPiArICoKPiA+ICsgKiBDaGVjayBpZiBQSFkgaXMgcmVhZHkuIElmIFBIWSBpcyBu b3QgcmVhZHksIHdhaXQgMW1zIHRvIGNoZWNrIGZvciAxMDAgdGltZXMuCj4gPiArICogVGhpcyBh bW91bnQgb2YgZGVsYXkgd2FzIHN1Z2dlc3RlZCBieSBJUCBkZXNpZ25lci4KPiA+ICsgKgo+ID4g KyAqIFJldHVybjogMCBpZiBQSFkgaXMgcmVhZHksIG9yIC1FTk9ERVYgaWYgUEhZIGlzIG5vdCBy ZWFkeS4KPiA+ICsgKi8KPiA+ICtzdGF0aWMgaW50IHp5bnFtcF9kcF9waHlfcmVhZHkoc3RydWN0 IHp5bnFtcF9kcCAqZHApCj4gPiArewo+ID4gKwl1MzIgaSwgcmVnLCByZWFkeTsKPiA+ICsKPiA+ ICsJcmVhZHkgPSAoMSA8PCBkcC0+bnVtX2xhbmVzKSAtIDE7Cj4gPiArCj4gPiArCS8qIFdhaXQg Zm9yIDEwMCAqIDFtcy4gVGhpcyBzaG91bGQgYmUgZW5vdWdoIHRpbWUgZm9yIFBIWSB0byBiZSBy ZWFkeSAqLwo+ID4gKwlmb3IgKGkgPSAwOyA7IGkrKykgewo+ID4gKwkJcmVnID0genlucW1wX2Rw X3JlYWQoZHAsIFpZTlFNUF9EUF9QSFlfU1RBVFVTKTsKPiA+ICsJCWlmICgocmVnICYgcmVhZHkp ID09IHJlYWR5KQo+ID4gKwkJCXJldHVybiAwOwo+ID4gKwo+ID4gKwkJaWYgKGkgPT0gMTAwKSB7 Cj4gPiArCQkJZGV2X2VycihkcC0+ZGV2LCAiUEhZIGlzbid0IHJlYWR5XG4iKTsKPiA+ICsJCQly ZXR1cm4gLUVOT0RFVjsKPiA+ICsJCX0KPiA+ICsKPiA+ICsJCXVzbGVlcF9yYW5nZSgxMDAwLCAx MTAwKTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArLyog LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KPiA+ICsgKiBEaXNwbGF5UG9ydCBMaW5rIFRyYWluaW5nCj4g PiArICovCj4gPiArCj4gPiArLyoqCj4gPiArICogenlucW1wX2RwX21heF9yYXRlIC0gQ2FsY3Vs YXRlIGFuZCByZXR1cm4gYXZhaWxhYmxlIG1heCBwaXhlbCBjbG9jawo+ID4gKyAqIEBsaW5rX3Jh dGU6IGxpbmsgcmF0ZSAoS2lsby1ieXRlcyAvIHNlYykKPiA+ICsgKiBAbGFuZV9udW06IG51bWJl ciBvZiBsYW5lcwo+ID4gKyAqIEBicHA6IGJpdHMgcGVyIHBpeGVsCj4gPiArICoKPiA+ICsgKiBS ZXR1cm46IG1heCBwaXhlbCBjbG9jayAoS0h6KSBzdXBwb3J0ZWQgYnkgY3VycmVudCBsaW5rIGNv bmZpZy4KPiA+ICsgKi8KPiA+ICtzdGF0aWMgaW5saW5lIGludCB6eW5xbXBfZHBfbWF4X3JhdGUo aW50IGxpbmtfcmF0ZSwgdTggbGFuZV9udW0sIHU4IGJwcCkKPiA+ICt7Cj4gPiArCXJldHVybiBs aW5rX3JhdGUgKiBsYW5lX251bSAqIDggLyBicHA7Cj4gPiArfQo+ID4gKwo+ID4gKy8qKgo+ID4g KyAqIHp5bnFtcF9kcF9tb2RlX2NvbmZpZ3VyZSAtIENvbmZpZ3VyZSB0aGUgbGluayB2YWx1ZXMK PiA+ICsgKiBAZHA6IERpc3BsYXlQb3J0IElQIGNvcmUgc3RydWN0dXJlCj4gPiArICogQHBjbG9j azogcGl4ZWwgY2xvY2sgZm9yIHJlcXVlc3RlZCBkaXNwbGF5IG1vZGUKPiA+ICsgKiBAY3VycmVu dF9idzogY3VycmVudCBsaW5rIHJhdGUKPiA+ICsgKgo+ID4gKyAqIEZpbmQgdGhlIGxpbmsgY29u ZmlndXJhdGlvbiB2YWx1ZXMsIHJhdGUgYW5kIGxhbmUgY291bnQgZm9yIHJlcXVlc3RlZCBwaXhl bAo+ID4gKyAqIGNsb2NrIEBwY2xvY2suIFRoZSBAcGNsb2NrIGlzIHN0b3JlZCBpbiB0aGUgbW9k ZSB0byBiZSB1c2VkIGluIG90aGVyCj4gPiArICogZnVuY3Rpb25zIGxhdGVyLiBUaGUgcmV0dXJu ZWQgcmF0ZSBpcyBkb3duc2hpZnRlZCBmcm9tIHRoZSBjdXJyZW50IHJhdGUKPiA+ICsgKiBAY3Vy cmVudF9idy4KPiA+ICsgKgo+ID4gKyAqIFJldHVybjogQ3VycmVudCBsaW5rIHJhdGUgY29kZSwg b3IgLUVJTlZBTC4KPiA+ICsgKi8KPiA+ICtzdGF0aWMgaW50IHp5bnFtcF9kcF9tb2RlX2NvbmZp Z3VyZShzdHJ1Y3QgenlucW1wX2RwICpkcCwgaW50IHBjbG9jaywKPiA+ICsJCQkJICAgIHU4IGN1 cnJlbnRfYncpCj4gPiArewo+ID4gKwlpbnQgbWF4X3JhdGUgPSBkcC0+bGlua19jb25maWcubWF4 X3JhdGU7Cj4gPiArCXU4IGJ3c1szXSA9IHsgRFBfTElOS19CV18xXzYyLCBEUF9MSU5LX0JXXzJf NywgRFBfTElOS19CV181XzQgfTsKPiA+ICsJdTggbWF4X2xhbmVzID0gZHAtPmxpbmtfY29uZmln Lm1heF9sYW5lczsKPiA+ICsJdTggbWF4X2xpbmtfcmF0ZV9jb2RlID0gZHJtX2RwX2xpbmtfcmF0 ZV90b19id19jb2RlKG1heF9yYXRlKTsKPiA+ICsJdTggYnBwID0gZHAtPmNvbmZpZy5icHA7Cj4g PiArCXU4IGxhbmVfY250Owo+ID4gKwlzOCBpOwo+ID4gKwo+ID4gKwlpZiAoY3VycmVudF9idyA9 PSBEUF9MSU5LX0JXXzFfNjIpIHsKPiA+ICsJCWRldl9lcnIoZHAtPmRldiwgImNhbid0IGRvd25z aGlmdC4gYWxyZWFkeSBsb3dlc3QgbGluayByYXRlXG4iKTsKPiA+ICsJCXJldHVybiAtRUlOVkFM Owo+ID4gKwl9Cj4gPiArCj4gPiArCWZvciAoaSA9IEFSUkFZX1NJWkUoYndzKSAtIDE7IGkgPj0g MDsgaS0tKSB7Cj4gPiArCQlpZiAoY3VycmVudF9idyAmJiBid3NbaV0gPj0gY3VycmVudF9idykK PiA+ICsJCQljb250aW51ZTsKPiA+ICsKPiA+ICsJCWlmIChid3NbaV0gPD0gbWF4X2xpbmtfcmF0 ZV9jb2RlKQo+ID4gKwkJCWJyZWFrOwo+ID4gKwl9Cj4gPiArCj4gPiArCWZvciAobGFuZV9jbnQg PSAxOyBsYW5lX2NudCA8PSBtYXhfbGFuZXM7IGxhbmVfY250IDw8PSAxKSB7Cj4gPiArCQlpbnQg Ync7Cj4gPiArCQl1MzIgcmF0ZTsKPiA+ICsKPiA+ICsJCWJ3ID0gZHJtX2RwX2J3X2NvZGVfdG9f bGlua19yYXRlKGJ3c1tpXSk7Cj4gPiArCQlyYXRlID0genlucW1wX2RwX21heF9yYXRlKGJ3LCBs YW5lX2NudCwgYnBwKTsKPiA+ICsJCWlmIChwY2xvY2sgPD0gcmF0ZSkgewo+ID4gKwkJCWRwLT5t b2RlLmJ3X2NvZGUgPSBid3NbaV07Cj4gPiArCQkJZHAtPm1vZGUubGFuZV9jbnQgPSBsYW5lX2Nu dDsKPiA+ICsJCQlkcC0+bW9kZS5wY2xvY2sgPSBwY2xvY2s7Cj4gPiArCQkJcmV0dXJuIGRwLT5t b2RlLmJ3X2NvZGU7Cj4gPiArCQl9Cj4gPiArCX0KPiA+ICsKPiA+ICsJZGV2X2VycihkcC0+ZGV2 LCAiZmFpbGVkIHRvIGNvbmZpZ3VyZSBsaW5rIHZhbHVlc1xuIik7Cj4gPiArCj4gPiArCXJldHVy biAtRUlOVkFMOwo+ID4gK30KPiA+ICsKPiA+ICsvKioKPiA+ICsgKiB6eW5xbXBfZHBfYWRqdXN0 X3RyYWluIC0gQWRqdXN0IHRyYWluIHZhbHVlcwo+ID4gKyAqIEBkcDogRGlzcGxheVBvcnQgSVAg Y29yZSBzdHJ1Y3R1cmUKPiA+ICsgKiBAbGlua19zdGF0dXM6IGxpbmsgc3RhdHVzIGZyb20gc2lu ayB3aGljaCBjb250YWlucyByZXF1ZXN0ZWQgdHJhaW5pbmcgdmFsdWVzCj4gPiArICovCj4gPiAr c3RhdGljIHZvaWQgenlucW1wX2RwX2FkanVzdF90cmFpbihzdHJ1Y3QgenlucW1wX2RwICpkcCwK PiA+ICsJCQkJICAgdTggbGlua19zdGF0dXNbRFBfTElOS19TVEFUVVNfU0laRV0pCj4gPiArewo+ ID4gKwl1OCAqdHJhaW5fc2V0ID0gZHAtPnRyYWluX3NldDsKPiA+ICsJdTggdm9sdGFnZSA9IDAs IHByZWVtcGhhc2lzID0gMDsKPiA+ICsJdTggaTsKPiA+ICsKPiA+ICsJZm9yIChpID0gMDsgaSA8 IGRwLT5tb2RlLmxhbmVfY250OyBpKyspIHsKPiA+ICsJCXU4IHYgPSBkcm1fZHBfZ2V0X2FkanVz dF9yZXF1ZXN0X3ZvbHRhZ2UobGlua19zdGF0dXMsIGkpOwo+ID4gKwkJdTggcCA9IGRybV9kcF9n ZXRfYWRqdXN0X3JlcXVlc3RfcHJlX2VtcGhhc2lzKGxpbmtfc3RhdHVzLCBpKTsKPiA+ICsKPiA+ ICsJCWlmICh2ID4gdm9sdGFnZSkKPiA+ICsJCQl2b2x0YWdlID0gdjsKPiA+ICsKPiA+ICsJCWlm IChwID4gcHJlZW1waGFzaXMpCj4gPiArCQkJcHJlZW1waGFzaXMgPSBwOwo+ID4gKwl9Cj4gPiAr Cj4gPiArCWlmICh2b2x0YWdlID49IERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMykKPiA+ ICsJCXZvbHRhZ2UgfD0gRFBfVFJBSU5fTUFYX1NXSU5HX1JFQUNIRUQ7Cj4gPiArCj4gPiArCWlm IChwcmVlbXBoYXNpcyA+PSBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8yKQo+ID4gKwkJcHJlZW1w aGFzaXMgfD0gRFBfVFJBSU5fTUFYX1BSRV9FTVBIQVNJU19SRUFDSEVEOwo+ID4gKwo+ID4gKwlm b3IgKGkgPSAwOyBpIDwgZHAtPm1vZGUubGFuZV9jbnQ7IGkrKykKPiA+ICsJCXRyYWluX3NldFtp XSA9IHZvbHRhZ2UgfCBwcmVlbXBoYXNpczsKPiA+ICt9Cj4gPiArCj4gPiArLyoqCj4gPiArICog enlucW1wX2RwX3VwZGF0ZV92c19lbXBoIC0gVXBkYXRlIHRoZSB0cmFpbmluZyB2YWx1ZXMKPiA+ ICsgKiBAZHA6IERpc3BsYXlQb3J0IElQIGNvcmUgc3RydWN0dXJlCj4gPiArICoKPiA+ICsgKiBV cGRhdGUgdGhlIHRyYWluaW5nIHZhbHVlcyBiYXNlZCBvbiB0aGUgcmVxdWVzdCBmcm9tIHNpbmsu IFRoZSBtYXBwZWQgdmFsdWVzCj4gPiArICogYXJlIHByZWRlZmluZWQsIGFuZCB2YWx1ZXModnMs IHBlLCBwYykgYXJlIGZyb20gdGhlIGRldmljZSBtYW51YWwuCj4gPiArICoKPiA+ICsgKiBSZXR1 cm46IDAgaWYgdnMgYW5kIGVtcGggYXJlIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5LCBvciB0aGUgZXJy b3IgY29kZSByZXR1cm5lZAo+ID4gKyAqIGJ5IGRybV9kcF9kcGNkX3dyaXRlKCkuCj4gPiArICov Cj4gPiArc3RhdGljIGludCB6eW5xbXBfZHBfdXBkYXRlX3ZzX2VtcGgoc3RydWN0IHp5bnFtcF9k cCAqZHApCj4gPiArewo+ID4gKwl1bnNpZ25lZCBpbnQgaTsKPiA+ICsJaW50IHJldDsKPiA+ICsK PiA+ICsJcmV0ID0gZHJtX2RwX2RwY2Rfd3JpdGUoJmRwLT5hdXgsIERQX1RSQUlOSU5HX0xBTkUw X1NFVCwgZHAtPnRyYWluX3NldCwKPiA+ICsJCQkJZHAtPm1vZGUubGFuZV9jbnQpOwo+ID4gKwlp ZiAocmV0IDwgMCkKPiA+ICsJCXJldHVybiByZXQ7Cj4gPiArCj4gPiArCWZvciAoaSA9IDA7IGkg PCBkcC0+bW9kZS5sYW5lX2NudDsgaSsrKSB7Cj4gPiArCQl1MzIgcmVnID0gWllOUU1QX0RQX1NV Ql9UWF9QSFlfUFJFQ1VSU09SX0xBTkVfMCArIGkgKiA0Owo+ID4gKwkJdW5pb24gcGh5X2NvbmZp Z3VyZV9vcHRzIG9wdHMgPSB7IDAgfTsKPiA+ICsJCXU4IHRyYWluID0gZHAtPnRyYWluX3NldFtp XTsKPiA+ICsKPiA+ICsJCW9wdHMuZHAudm9sdGFnZVswXSA9ICh0cmFpbiAmIERQX1RSQUlOX1ZP TFRBR0VfU1dJTkdfTUFTSykKPiA+ICsJCQkJICAgPj4gRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19T SElGVDsKPiA+ICsJCW9wdHMuZHAucHJlWzBdID0gKHRyYWluICYgRFBfVFJBSU5fUFJFX0VNUEhB U0lTX01BU0spCj4gPiArCQkJICAgICAgID4+IERQX1RSQUlOX1BSRV9FTVBIQVNJU19TSElGVDsK PiA+ICsKPiA+ICsJCXBoeV9jb25maWd1cmUoZHAtPnBoeVtpXSwgJm9wdHMpOwo+ID4gKwo+ID4g KwkJenlucW1wX2RwX3dyaXRlKGRwLCByZWcsIDB4Mik7Cj4gPiArCX0KPiA+ICsKPiA+ICsJcmV0 dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIHp5bnFtcF9kcF9saW5rX3RyYWlu X2NyIC0gVHJhaW4gY2xvY2sgcmVjb3ZlcnkKPiA+ICsgKiBAZHA6IERpc3BsYXlQb3J0IElQIGNv cmUgc3RydWN0dXJlCj4gPiArICoKPiA+ICsgKiBSZXR1cm46IDAgaWYgY2xvY2sgcmVjb3Zlcnkg dHJhaW4gaXMgZG9uZSBzdWNjZXNzZnVsbHksIG9yIGNvcnJlc3BvbmRpbmcKPiA+ICsgKiBlcnJv ciBjb2RlLgo+ID4gKyAqLwo+ID4gK3N0YXRpYyBpbnQgenlucW1wX2RwX2xpbmtfdHJhaW5fY3Io c3RydWN0IHp5bnFtcF9kcCAqZHApCj4gPiArewo+ID4gKwl1OCBsaW5rX3N0YXR1c1tEUF9MSU5L X1NUQVRVU19TSVpFXTsKPiA+ICsJdTggbGFuZV9jbnQgPSBkcC0+bW9kZS5sYW5lX2NudDsKPiA+ ICsJdTggdnMgPSAwLCB0cmllcyA9IDA7Cj4gPiArCXUxNiBtYXhfdHJpZXMsIGk7Cj4gPiArCWJv b2wgY3JfZG9uZTsKPiA+ICsJaW50IHJldDsKPiA+ICsKPiA+ICsJenlucW1wX2RwX3dyaXRlKGRw LCBaWU5RTVBfRFBfVFJBSU5JTkdfUEFUVEVSTl9TRVQsCj4gPiArCQkJRFBfVFJBSU5JTkdfUEFU VEVSTl8xKTsKPiA+ICsJcmV0ID0gZHJtX2RwX2RwY2Rfd3JpdGViKCZkcC0+YXV4LCBEUF9UUkFJ TklOR19QQVRURVJOX1NFVCwKPiA+ICsJCQkJIERQX1RSQUlOSU5HX1BBVFRFUk5fMSB8Cj4gPiAr CQkJCSBEUF9MSU5LX1NDUkFNQkxJTkdfRElTQUJMRSk7Cj4gPiArCWlmIChyZXQgPCAwKQo+ID4g KwkJcmV0dXJuIHJldDsKPiA+ICsKPiA+ICsJLyoKPiA+ICsJICogMjU2IGxvb3BzIHNob3VsZCBi ZSBtYXhpbXVtIGl0ZXJhdGlvbnMgZm9yIDQgbGFuZXMgYW5kIDQgdmFsdWVzLgo+ID4gKwkgKiBT bywgVGhpcyBsb29wIHNob3VsZCBleGl0IGJlZm9yZSA1MTIgaXRlcmF0aW9ucwo+ID4gKwkgKi8K PiA+ICsJZm9yIChtYXhfdHJpZXMgPSAwOyBtYXhfdHJpZXMgPCA1MTI7IG1heF90cmllcysrKSB7 Cj4gPiArCQlyZXQgPSB6eW5xbXBfZHBfdXBkYXRlX3ZzX2VtcGgoZHApOwo+ID4gKwkJaWYgKHJl dCkKPiA+ICsJCQlyZXR1cm4gcmV0Owo+ID4gKwo+ID4gKwkJZHJtX2RwX2xpbmtfdHJhaW5fY2xv Y2tfcmVjb3ZlcnlfZGVsYXkoZHAtPmRwY2QpOwo+ID4gKwkJcmV0ID0gZHJtX2RwX2RwY2RfcmVh ZF9saW5rX3N0YXR1cygmZHAtPmF1eCwgbGlua19zdGF0dXMpOwo+ID4gKwkJaWYgKHJldCA8IDAp Cj4gPiArCQkJcmV0dXJuIHJldDsKPiA+ICsKPiA+ICsJCWNyX2RvbmUgPSBkcm1fZHBfY2xvY2tf cmVjb3Zlcnlfb2sobGlua19zdGF0dXMsIGxhbmVfY250KTsKPiA+ICsJCWlmIChjcl9kb25lKQo+ ID4gKwkJCWJyZWFrOwo+ID4gKwo+ID4gKwkJZm9yIChpID0gMDsgaSA8IGxhbmVfY250OyBpKysp Cj4gPiArCQkJaWYgKCEoZHAtPnRyYWluX3NldFtpXSAmIERQX1RSQUlOX01BWF9TV0lOR19SRUFD SEVEKSkKPiA+ICsJCQkJYnJlYWs7Cj4gPiArCQlpZiAoaSA9PSBsYW5lX2NudCkKPiA+ICsJCQli cmVhazsKPiA+ICsKPiA+ICsJCWlmICgoZHAtPnRyYWluX3NldFswXSAmIERQX1RSQUlOX1ZPTFRB R0VfU1dJTkdfTUFTSykgPT0gdnMpCj4gPiArCQkJdHJpZXMrKzsKPiA+ICsJCWVsc2UKPiA+ICsJ CQl0cmllcyA9IDA7Cj4gPiArCj4gPiArCQlpZiAodHJpZXMgPT0gRFBfTUFYX1RSQUlOSU5HX1RS SUVTKQo+ID4gKwkJCWJyZWFrOwo+ID4gKwo+ID4gKwkJdnMgPSBkcC0+dHJhaW5fc2V0WzBdICYg RFBfVFJBSU5fVk9MVEFHRV9TV0lOR19NQVNLOwo+ID4gKwkJenlucW1wX2RwX2FkanVzdF90cmFp bihkcCwgbGlua19zdGF0dXMpOwo+ID4gKwl9Cj4gPiArCj4gPiArCWlmICghY3JfZG9uZSkKPiA+ ICsJCXJldHVybiAtRUlPOwo+ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiAr LyoqCj4gPiArICogenlucW1wX2RwX2xpbmtfdHJhaW5fY2UgLSBUcmFpbiBjaGFubmVsIGVxdWFs aXphdGlvbgo+ID4gKyAqIEBkcDogRGlzcGxheVBvcnQgSVAgY29yZSBzdHJ1Y3R1cmUKPiA+ICsg Kgo+ID4gKyAqIFJldHVybjogMCBpZiBjaGFubmVsIGVxdWFsaXphdGlvbiB0cmFpbiBpcyBkb25l IHN1Y2Nlc3NmdWxseSwgb3IKPiA+ICsgKiBjb3JyZXNwb25kaW5nIGVycm9yIGNvZGUuCj4gPiAr ICovCj4gPiArc3RhdGljIGludCB6eW5xbXBfZHBfbGlua190cmFpbl9jZShzdHJ1Y3QgenlucW1w X2RwICpkcCkKPiA+ICt7Cj4gPiArCXU4IGxpbmtfc3RhdHVzW0RQX0xJTktfU1RBVFVTX1NJWkVd Owo+ID4gKwl1OCBsYW5lX2NudCA9IGRwLT5tb2RlLmxhbmVfY250Owo+ID4gKwl1MzIgcGF0LCB0 cmllczsKPiA+ICsJaW50IHJldDsKPiA+ICsJYm9vbCBjZV9kb25lOwo+ID4gKwo+ID4gKwlpZiAo ZHAtPmRwY2RbRFBfRFBDRF9SRVZdID49IERQX1YxXzIgJiYKPiA+ICsJICAgIGRwLT5kcGNkW0RQ X01BWF9MQU5FX0NPVU5UXSAmIERQX1RQUzNfU1VQUE9SVEVEKQo+ID4gKwkJcGF0ID0gRFBfVFJB SU5JTkdfUEFUVEVSTl8zOwo+ID4gKwllbHNlCj4gPiArCQlwYXQgPSBEUF9UUkFJTklOR19QQVRU RVJOXzI7Cj4gPiArCj4gPiArCXp5bnFtcF9kcF93cml0ZShkcCwgWllOUU1QX0RQX1RSQUlOSU5H X1BBVFRFUk5fU0VULCBwYXQpOwo+ID4gKwlyZXQgPSBkcm1fZHBfZHBjZF93cml0ZWIoJmRwLT5h dXgsIERQX1RSQUlOSU5HX1BBVFRFUk5fU0VULAo+ID4gKwkJCQkgcGF0IHwgRFBfTElOS19TQ1JB TUJMSU5HX0RJU0FCTEUpOwo+ID4gKwlpZiAocmV0IDwgMCkKPiA+ICsJCXJldHVybiByZXQ7Cj4g PiArCj4gPiArCWZvciAodHJpZXMgPSAwOyB0cmllcyA8IERQX01BWF9UUkFJTklOR19UUklFUzsg dHJpZXMrKykgewo+ID4gKwkJcmV0ID0genlucW1wX2RwX3VwZGF0ZV92c19lbXBoKGRwKTsKPiA+ ICsJCWlmIChyZXQpCj4gPiArCQkJcmV0dXJuIHJldDsKPiA+ICsKPiA+ICsJCWRybV9kcF9saW5r X3RyYWluX2NoYW5uZWxfZXFfZGVsYXkoZHAtPmRwY2QpOwo+ID4gKwkJcmV0ID0gZHJtX2RwX2Rw Y2RfcmVhZF9saW5rX3N0YXR1cygmZHAtPmF1eCwgbGlua19zdGF0dXMpOwo+ID4gKwkJaWYgKHJl dCA8IDApCj4gPiArCQkJcmV0dXJuIHJldDsKPiA+ICsKPiA+ICsJCWNlX2RvbmUgPSBkcm1fZHBf Y2hhbm5lbF9lcV9vayhsaW5rX3N0YXR1cywgbGFuZV9jbnQpOwo+ID4gKwkJaWYgKGNlX2RvbmUp Cj4gPiArCQkJYnJlYWs7Cj4gPiArCj4gPiArCQl6eW5xbXBfZHBfYWRqdXN0X3RyYWluKGRwLCBs aW5rX3N0YXR1cyk7Cj4gPiArCX0KPiA+ICsKPiA+ICsJaWYgKCFjZV9kb25lKQo+ID4gKwkJcmV0 dXJuIC1FSU87Cj4gPiArCj4gPiArCXJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICsvKioKPiA+ ICsgKiB6eW5xbXBfZHBfbGlua190cmFpbiAtIFRyYWluIHRoZSBsaW5rCj4gPiArICogQGRwOiBE aXNwbGF5UG9ydCBJUCBjb3JlIHN0cnVjdHVyZQo+ID4gKyAqCj4gPiArICogUmV0dXJuOiAwIGlm IGFsbCB0cmFpbnMgYXJlIGRvbmUgc3VjY2Vzc2Z1bGx5LCBvciBjb3JyZXNwb25kaW5nIGVycm9y IGNvZGUuCj4gPiArICovCj4gPiArc3RhdGljIGludCB6eW5xbXBfZHBfdHJhaW4oc3RydWN0IHp5 bnFtcF9kcCAqZHApCj4gPiArewo+ID4gKwl1MzIgcmVnOwo+ID4gKwl1OCBid19jb2RlID0gZHAt Pm1vZGUuYndfY29kZTsKPiA+ICsJdTggbGFuZV9jbnQgPSBkcC0+bW9kZS5sYW5lX2NudDsKPiA+ ICsJdTggYXV4X2xhbmVfY250ID0gbGFuZV9jbnQ7Cj4gPiArCWJvb2wgZW5oYW5jZWQ7Cj4gPiAr CWludCByZXQ7Cj4gPiArCj4gPiArCXp5bnFtcF9kcF93cml0ZShkcCwgWllOUU1QX0RQX0xBTkVf Q09VTlRfU0VULCBsYW5lX2NudCk7Cj4gPiArCWVuaGFuY2VkID0gZHJtX2RwX2VuaGFuY2VkX2Zy YW1lX2NhcChkcC0+ZHBjZCk7Cj4gPiArCWlmIChlbmhhbmNlZCkgewo+ID4gKwkJenlucW1wX2Rw X3dyaXRlKGRwLCBaWU5RTVBfRFBfRU5IQU5DRURfRlJBTUVfRU4sIDEpOwo+ID4gKwkJYXV4X2xh bmVfY250IHw9IERQX0xBTkVfQ09VTlRfRU5IQU5DRURfRlJBTUVfRU47Cj4gPiArCX0KPiA+ICsK PiA+ICsJaWYgKGRwLT5kcGNkWzNdICYgMHgxKSB7Cj4gPiArCQl6eW5xbXBfZHBfd3JpdGUoZHAs IFpZTlFNUF9EUF9ET1dOU1BSRUFEX0NUTCwgMSk7Cj4gPiArCQlkcm1fZHBfZHBjZF93cml0ZWIo JmRwLT5hdXgsIERQX0RPV05TUFJFQURfQ1RSTCwKPiA+ICsJCQkJICAgRFBfU1BSRUFEX0FNUF8w XzUpOwo+ID4gKwl9IGVsc2Ugewo+ID4gKwkJenlucW1wX2RwX3dyaXRlKGRwLCBaWU5RTVBfRFBf RE9XTlNQUkVBRF9DVEwsIDApOwo+ID4gKwkJZHJtX2RwX2RwY2Rfd3JpdGViKCZkcC0+YXV4LCBE UF9ET1dOU1BSRUFEX0NUUkwsIDApOwo+ID4gKwl9Cj4gPiArCj4gPiArCXJldCA9IGRybV9kcF9k cGNkX3dyaXRlYigmZHAtPmF1eCwgRFBfTEFORV9DT1VOVF9TRVQsIGF1eF9sYW5lX2NudCk7Cj4g PiArCWlmIChyZXQgPCAwKSB7Cj4gPiArCQlkZXZfZXJyKGRwLT5kZXYsICJmYWlsZWQgdG8gc2V0 IGxhbmUgY291bnRcbiIpOwo+ID4gKwkJcmV0dXJuIHJldDsKPiA+ICsJfQo+ID4gKwo+ID4gKwly ZXQgPSBkcm1fZHBfZHBjZF93cml0ZWIoJmRwLT5hdXgsIERQX01BSU5fTElOS19DSEFOTkVMX0NP RElOR19TRVQsCj4gPiArCQkJCSBEUF9TRVRfQU5TSV84QjEwQik7Cj4gPiArCWlmIChyZXQgPCAw KSB7Cj4gPiArCQlkZXZfZXJyKGRwLT5kZXYsICJmYWlsZWQgdG8gc2V0IEFOU0kgOEIvMTBCIGVu Y29kaW5nXG4iKTsKPiA+ICsJCXJldHVybiByZXQ7Cj4gPiArCX0KPiA+ICsKPiA+ICsJcmV0ID0g ZHJtX2RwX2RwY2Rfd3JpdGViKCZkcC0+YXV4LCBEUF9MSU5LX0JXX1NFVCwgYndfY29kZSk7Cj4g PiArCWlmIChyZXQgPCAwKSB7Cj4gPiArCQlkZXZfZXJyKGRwLT5kZXYsICJmYWlsZWQgdG8gc2V0 IERQIGJhbmR3aWR0aFxuIik7Cj4gPiArCQlyZXR1cm4gcmV0Owo+ID4gKwl9Cj4gPiArCj4gPiAr CXp5bnFtcF9kcF93cml0ZShkcCwgWllOUU1QX0RQX0xJTktfQldfU0VULCBid19jb2RlKTsKPiA+ ICsJc3dpdGNoIChid19jb2RlKSB7Cj4gPiArCWNhc2UgRFBfTElOS19CV18xXzYyOgo+ID4gKwkJ cmVnID0gWllOUU1QX0RQX1BIWV9DTE9DS19TRUxFQ1RfMV82Mkc7Cj4gPiArCQlicmVhazsKPiA+ ICsJY2FzZSBEUF9MSU5LX0JXXzJfNzoKPiA+ICsJCXJlZyA9IFpZTlFNUF9EUF9QSFlfQ0xPQ0tf U0VMRUNUXzJfNzBHOwo+ID4gKwkJYnJlYWs7Cj4gPiArCWNhc2UgRFBfTElOS19CV181XzQ6Cj4g PiArCWRlZmF1bHQ6Cj4gPiArCQlyZWcgPSBaWU5RTVBfRFBfUEhZX0NMT0NLX1NFTEVDVF81XzQw RzsKPiA+ICsJCWJyZWFrOwo+ID4gKwl9Cj4gPiArCj4gPiArCXp5bnFtcF9kcF93cml0ZShkcCwg WllOUU1QX0RQX1BIWV9DTE9DS19TRUxFQ1QsIHJlZyk7Cj4gPiArCXJldCA9IHp5bnFtcF9kcF9w aHlfcmVhZHkoZHApOwo+ID4gKwlpZiAocmV0IDwgMCkKPiA+ICsJCXJldHVybiByZXQ7Cj4gPiAr Cj4gPiArCXp5bnFtcF9kcF93cml0ZShkcCwgWllOUU1QX0RQX1NDUkFNQkxJTkdfRElTQUJMRSwg MSk7Cj4gPiArCW1lbXNldChkcC0+dHJhaW5fc2V0LCAwLCA0KTsKPiA+ICsJcmV0ID0genlucW1w X2RwX2xpbmtfdHJhaW5fY3IoZHApOwo+ID4gKwlpZiAocmV0KQo+ID4gKwkJcmV0dXJuIHJldDsK PiA+ICsKPiA+ICsJcmV0ID0genlucW1wX2RwX2xpbmtfdHJhaW5fY2UoZHApOwo+ID4gKwlpZiAo cmV0KQo+ID4gKwkJcmV0dXJuIHJldDsKPiA+ICsKPiA+ICsJcmV0ID0gZHJtX2RwX2RwY2Rfd3Jp dGViKCZkcC0+YXV4LCBEUF9UUkFJTklOR19QQVRURVJOX1NFVCwKPiA+ICsJCQkJIERQX1RSQUlO SU5HX1BBVFRFUk5fRElTQUJMRSk7Cj4gPiArCWlmIChyZXQgPCAwKSB7Cj4gPiArCQlkZXZfZXJy KGRwLT5kZXYsICJmYWlsZWQgdG8gZGlzYWJsZSB0cmFpbmluZyBwYXR0ZXJuXG4iKTsKPiA+ICsJ CXJldHVybiByZXQ7Cj4gPiArCX0KPiA+ICsJenlucW1wX2RwX3dyaXRlKGRwLCBaWU5RTVBfRFBf VFJBSU5JTkdfUEFUVEVSTl9TRVQsCj4gPiArCQkJRFBfVFJBSU5JTkdfUEFUVEVSTl9ESVNBQkxF KTsKPiA+ICsKPiA+ICsJenlucW1wX2RwX3dyaXRlKGRwLCBaWU5RTVBfRFBfU0NSQU1CTElOR19E SVNBQkxFLCAwKTsKPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gKy8qKgo+ ID4gKyAqIHp5bnFtcF9kcF90cmFpbl9sb29wIC0gRG93bnNoaWZ0IHRoZSBsaW5rIHJhdGUgZHVy aW5nIHRyYWluaW5nCj4gPiArICogQGRwOiBEaXNwbGF5UG9ydCBJUCBjb3JlIHN0cnVjdHVyZQo+ ID4gKyAqCj4gPiArICogVHJhaW4gdGhlIGxpbmsgYnkgZG93bnNoaWZ0aW5nIHRoZSBsaW5rIHJh dGUgaWYgdHJhaW5pbmcgaXMgbm90IHN1Y2Nlc3NmdWwuCj4gPiArICovCj4gPiArc3RhdGljIHZv aWQgenlucW1wX2RwX3RyYWluX2xvb3Aoc3RydWN0IHp5bnFtcF9kcCAqZHApCj4gPiArewo+ID4g KwlzdHJ1Y3QgenlucW1wX2RwX21vZGUgKm1vZGUgPSAmZHAtPm1vZGU7Cj4gPiArCXU4IGJ3ID0g bW9kZS0+YndfY29kZTsKPiA+ICsJaW50IHJldDsKPiA+ICsKPiA+ICsJZG8gewo+ID4gKwkJaWYg KGRwLT5zdGF0dXMgPT0gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQgfHwKPiA+ICsJCSAg ICAhZHAtPmVuYWJsZWQpCj4gPiArCQkJcmV0dXJuOwo+ID4gKwo+ID4gKwkJcmV0ID0genlucW1w X2RwX3RyYWluKGRwKTsKPiA+ICsJCWlmICghcmV0KQo+ID4gKwkJCXJldHVybjsKPiA+ICsKPiA+ ICsJCXJldCA9IHp5bnFtcF9kcF9tb2RlX2NvbmZpZ3VyZShkcCwgbW9kZS0+cGNsb2NrLCBidyk7 Cj4gPiArCQlpZiAocmV0IDwgMCkKPiA+ICsJCQlnb3RvIGVycl9vdXQ7Cj4gPiArCj4gPiArCQli dyA9IHJldDsKPiA+ICsJfSB3aGlsZSAoYncgPj0gRFBfTElOS19CV18xXzYyKTsKPiA+ICsKPiA+ ICtlcnJfb3V0Ogo+ID4gKwlkZXZfZXJyKGRwLT5kZXYsICJmYWlsZWQgdG8gdHJhaW4gdGhlIERQ IGxpbmtcbiIpOwo+ID4gK30KPiA+ICsKPiA+ICsvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ID4g KyAqIERpc3BsYXlQb3J0IEFVWAo+ID4gKyAqLwo+ID4gKwo+ID4gKyNkZWZpbmUgQVVYX1JFQURf QklUCTB4MQo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIHp5bnFtcF9kcF9hdXhfY21kX3N1Ym1pdCAt IFN1Ym1pdCBhdXggY29tbWFuZAo+ID4gKyAqIEBkcDogRGlzcGxheVBvcnQgSVAgY29yZSBzdHJ1 Y3R1cmUKPiA+ICsgKiBAY21kOiBhdXggY29tbWFuZAo+ID4gKyAqIEBhZGRyOiBhdXggYWRkcmVz cwo+ID4gKyAqIEBidWY6IGJ1ZmZlciBmb3IgY29tbWFuZCBkYXRhCj4gPiArICogQGJ5dGVzOiBu dW1iZXIgb2YgYnl0ZXMgZm9yIEBidWYKPiA+ICsgKiBAcmVwbHk6IHJlcGx5IGNvZGUgdG8gYmUg cmV0dXJuZWQKPiA+ICsgKgo+ID4gKyAqIFN1Ym1pdCBhbiBhdXggY29tbWFuZC4gQWxsIGF1eCBy ZWxhdGVkIGNvbW1hbmRzLCBuYXRpdmUgb3IgaTJjIGF1eAo+ID4gKyAqIHJlYWQvd3JpdGUsIGFy ZSBzdWJtaXR0ZWQgdGhyb3VnaCB0aGlzIGZ1bmN0aW9uLiBUaGUgZnVuY3Rpb24gaXMgbWFwcGVk IHRvCj4gPiArICogdGhlIHRyYW5zZmVyIGZ1bmN0aW9uIG9mIHN0cnVjdCBkcm1fZHBfYXV4LiBU aGlzIGZ1bmN0aW9uIGludm9sdmVzIGluCj4gPiArICogbXVsdGlwbGUgcmVnaXN0ZXIgcmVhZHMv d3JpdGVzLCB0aHVzIHN5bmNocm9uaXphdGlvbiBpcyBuZWVkZWQsIGFuZCBpdCBpcwo+ID4gKyAq IGRvbmUgYnkgZHJtX2RwX2hlbHBlciB1c2luZyBAaHdfbXV0ZXguIFRoZSBjYWxsaW5nIHRocmVh ZCBnb2VzIGludG8gc2xlZXAKPiA+ICsgKiBpZiB0aGVyZSdzIG5vIGltbWVkaWF0ZSByZXBseSB0 byB0aGUgY29tbWFuZCBzdWJtaXNzaW9uLiBUaGUgcmVwbHkgY29kZSBpcwo+ID4gKyAqIHJldHVy bmVkIGF0IEByZXBseSBpZiBAcmVwbHkgIT0gTlVMTC4KPiA+ICsgKgo+ID4gKyAqIFJldHVybjog MCBpZiB0aGUgY29tbWFuZCBpcyBzdWJtaXR0ZWQgcHJvcGVybHksIG9yIGNvcnJlc3BvbmRpbmcg ZXJyb3IgY29kZToKPiA+ICsgKiAtRUJVU1kgd2hlbiB0aGVyZSBpcyBhbnkgcmVxdWVzdCBhbHJl YWR5IGJlaW5nIHByb2Nlc3NlZAo+ID4gKyAqIC1FVElNRURPVVQgd2hlbiByZWNlaXZpbmcgcmVw bHkgaXMgdGltZWQgb3V0Cj4gPiArICogLUVJTyB3aGVuIHJlY2VpdmVkIGJ5dGVzIGFyZSBsZXNz IHRoYW4gcmVxdWVzdGVkCj4gPiArICovCj4gPiArc3RhdGljIGludCB6eW5xbXBfZHBfYXV4X2Nt ZF9zdWJtaXQoc3RydWN0IHp5bnFtcF9kcCAqZHAsIHUzMiBjbWQsIHUxNiBhZGRyLAo+ID4gKwkJ CQkgICAgdTggKmJ1ZiwgdTggYnl0ZXMsIHU4ICpyZXBseSkKPiA+ICt7Cj4gPiArCWJvb2wgaXNf cmVhZCA9IChjbWQgJiBBVVhfUkVBRF9CSVQpID8gdHJ1ZSA6IGZhbHNlOwo+ID4gKwl1MzIgcmVn LCBpOwo+ID4gKwo+ID4gKwlyZWcgPSB6eW5xbXBfZHBfcmVhZChkcCwgWllOUU1QX0RQX0lOVEVS UlVQVF9TSUdOQUxfU1RBVEUpOwo+ID4gKwlpZiAocmVnICYgWllOUU1QX0RQX0lOVEVSUlVQVF9T SUdOQUxfU1RBVEVfUkVRVUVTVCkKPiA+ICsJCXJldHVybiAtRUJVU1k7Cj4gPiArCj4gPiArCXp5 bnFtcF9kcF93cml0ZShkcCwgWllOUU1QX0RQX0FVWF9BRERSRVNTLCBhZGRyKTsKPiA+ICsJaWYg KCFpc19yZWFkKQo+ID4gKwkJZm9yIChpID0gMDsgaSA8IGJ5dGVzOyBpKyspCj4gPiArCQkJenlu cW1wX2RwX3dyaXRlKGRwLCBaWU5RTVBfRFBfQVVYX1dSSVRFX0ZJRk8sCj4gPiArCQkJCQlidWZb aV0pOwo+ID4gKwo+ID4gKwlyZWcgPSBjbWQgPDwgWllOUU1QX0RQX0FVWF9DT01NQU5EX0NNRF9T SElGVDsKPiA+ICsJaWYgKCFidWYgfHwgIWJ5dGVzKQo+ID4gKwkJcmVnIHw9IFpZTlFNUF9EUF9B VVhfQ09NTUFORF9BRERSRVNTX09OTFk7Cj4gPiArCWVsc2UKPiA+ICsJCXJlZyB8PSAoYnl0ZXMg LSAxKSA8PCBaWU5RTVBfRFBfQVVYX0NPTU1BTkRfQllURVNfU0hJRlQ7Cj4gPiArCXp5bnFtcF9k cF93cml0ZShkcCwgWllOUU1QX0RQX0FVWF9DT01NQU5ELCByZWcpOwo+ID4gKwo+ID4gKwkvKiBX YWl0IGZvciByZXBseSB0byBiZSBkZWxpdmVyZWQgdXB0byAybXMgKi8KPiA+ICsJZm9yIChpID0g MDsgOyBpKyspIHsKPiA+ICsJCXJlZyA9IHp5bnFtcF9kcF9yZWFkKGRwLCBaWU5RTVBfRFBfSU5U RVJSVVBUX1NJR05BTF9TVEFURSk7Cj4gPiArCQlpZiAocmVnICYgWllOUU1QX0RQX0lOVEVSUlVQ VF9TSUdOQUxfU1RBVEVfUkVQTFkpCj4gPiArCQkJYnJlYWs7Cj4gPiArCj4gPiArCQlpZiAocmVn ICYgWllOUU1QX0RQX0lOVEVSUlVQVF9TSUdOQUxfU1RBVEVfUkVQTFlfVElNRU9VVCB8fAo+ID4g KwkJICAgIGkgPT0gMikKPiA+ICsJCQlyZXR1cm4gLUVUSU1FRE9VVDsKPiA+ICsKPiA+ICsJCXVz bGVlcF9yYW5nZSgxMDAwLCAxMTAwKTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlyZWcgPSB6eW5xbXBf ZHBfcmVhZChkcCwgWllOUU1QX0RQX0FVWF9SRVBMWV9DT0RFKTsKPiA+ICsJaWYgKHJlcGx5KQo+ ID4gKwkJKnJlcGx5ID0gcmVnOwo+ID4gKwo+ID4gKwlpZiAoaXNfcmVhZCAmJgo+ID4gKwkgICAg KHJlZyA9PSBaWU5RTVBfRFBfQVVYX1JFUExZX0NPREVfQVVYX0FDSyB8fAo+ID4gKwkgICAgIHJl ZyA9PSBaWU5RTVBfRFBfQVVYX1JFUExZX0NPREVfSTJDX0FDSykpIHsKPiA+ICsJCXJlZyA9IHp5 bnFtcF9kcF9yZWFkKGRwLCBaWU5RTVBfRFBfUkVQTFlfREFUQV9DT1VOVCk7Cj4gPiArCQlpZiAo KHJlZyAmIFpZTlFNUF9EUF9SRVBMWV9EQVRBX0NPVU5UX01BU0spICE9IGJ5dGVzKQo+ID4gKwkJ CXJldHVybiAtRUlPOwo+ID4gKwo+ID4gKwkJZm9yIChpID0gMDsgaSA8IGJ5dGVzOyBpKyspCj4g PiArCQkJYnVmW2ldID0genlucW1wX2RwX3JlYWQoZHAsIFpZTlFNUF9EUF9BVVhfUkVQTFlfREFU QSk7Cj4gPiArCX0KPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRp YyBzc2l6ZV90Cj4gPiArenlucW1wX2RwX2F1eF90cmFuc2ZlcihzdHJ1Y3QgZHJtX2RwX2F1eCAq YXV4LCBzdHJ1Y3QgZHJtX2RwX2F1eF9tc2cgKm1zZykKPiA+ICt7Cj4gPiArCXN0cnVjdCB6eW5x bXBfZHAgKmRwID0gY29udGFpbmVyX29mKGF1eCwgc3RydWN0IHp5bnFtcF9kcCwgYXV4KTsKPiA+ ICsJaW50IHJldDsKPiA+ICsJdW5zaWduZWQgaW50IGksIGl0ZXI7Cj4gPiArCj4gPiArCS8qIE51 bWJlciBvZiBsb29wcyA9IHRpbWVvdXQgaW4gbXNlYyAvIGF1eCBkZWxheSAoNDAwIHVzZWMpICov Cj4gPiArCWl0ZXIgPSB6eW5xbXBfZHBfYXV4X3RpbWVvdXRfbXMgKiAxMDAwIC8gNDAwOwo+ID4g KwlpdGVyID0gaXRlciA/IGl0ZXIgOiAxOwo+ID4gKwo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgaXRl cjsgaSsrKSB7Cj4gPiArCQlyZXQgPSB6eW5xbXBfZHBfYXV4X2NtZF9zdWJtaXQoZHAsIG1zZy0+ cmVxdWVzdCwgbXNnLT5hZGRyZXNzLAo+ID4gKwkJCQkJICAgICAgIG1zZy0+YnVmZmVyLCBtc2ct PnNpemUsCj4gPiArCQkJCQkgICAgICAgJm1zZy0+cmVwbHkpOwo+ID4gKwkJaWYgKCFyZXQpIHsK PiA+ICsJCQlkZXZfZGJnKGRwLT5kZXYsICJhdXggJWQgcmV0cmllc1xuIiwgaSk7Cj4gPiArCQkJ cmV0dXJuIG1zZy0+c2l6ZTsKPiA+ICsJCX0KPiA+ICsKPiA+ICsJCWlmIChkcC0+c3RhdHVzID09 IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkKSB7Cj4gPiArCQkJZGV2X2RiZyhkcC0+ZGV2 LCAibm8gY29ubmVjdGVkIGF1eCBkZXZpY2VcbiIpOwo+ID4gKwkJCXJldHVybiAtRU5PREVWOwo+ ID4gKwkJfQo+ID4gKwo+ID4gKwkJdXNsZWVwX3JhbmdlKDQwMCwgNTAwKTsKPiA+ICsJfQo+ID4g Kwo+ID4gKwlkZXZfZGJnKGRwLT5kZXYsICJmYWlsZWQgdG8gZG8gYXV4IHRyYW5zZmVyICglZClc biIsIHJldCk7Cj4gPiArCj4gPiArCXJldHVybiByZXQ7Cj4gPiArfQo+ID4gKwo+ID4gKy8qKgo+ ID4gKyAqIHp5bnFtcF9kcF9hdXhfaW5pdCAtIEluaXRpYWxpemUgYW5kIHJlZ2lzdGVyIHRoZSBE UCBBVVgKPiA+ICsgKiBAZHA6IERpc3BsYXlQb3J0IElQIGNvcmUgc3RydWN0dXJlCj4gPiArICoK PiA+ICsgKiBQcm9ncmFtIHRoZSBBVVggY2xvY2sgZGl2aWRlciBhbmQgZmlsdGVyIGFuZCByZWdp c3RlciB0aGUgRFAgQVVYIGFkYXB0ZXIuCj4gPiArICoKPiA+ICsgKiBSZXR1cm46IDAgb24gc3Vj Y2VzcywgZXJyb3IgdmFsdWUgb3RoZXJ3aXNlCj4gPiArICovCj4gPiArc3RhdGljIGludCB6eW5x bXBfZHBfYXV4X2luaXQoc3RydWN0IHp5bnFtcF9kcCAqZHApCj4gPiArewo+ID4gKwl1bnNpZ25l ZCBsb25nIHJhdGU7Cj4gPiArCXVuc2lnbmVkIGludCB3Owo+ID4gKwo+ID4gKwkvKgo+ID4gKwkg KiBUaGUgQVVYX1NJR05BTF9XSURUSF9GSUxURVIgaXMgdGhlIG51bWJlciBvZiBBUEIgY2xvY2sg Y3ljbGVzCj4gPiArCSAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIEFVWCBwdWxzZS4gQWxsb3dhYmxl IHZhbHVlcyBhcmUgOCwgMTYsIDI0LCAzMiwKPiA+ICsJICogNDAgYW5kIDQ4LiBUaGUgQVVYIHB1 bHNlIHdpZHRoIG11c3QgYmUgYmV0d2VlbiAwLjTCtXMgYW5kIDAuNsK1cywKPiA+ICsJICogY29t cHV0ZSB0aGUgdyAvIDggdmFsdWUgY29ycmVzcG9uZGluZyB0byAwLjTCtXMgcm91bmRlZCB1cCwg YW5kIG1ha2UKPiA+ICsJICogc3VyZSBpdCBzdGF5cyBiZWxvdyAwLjbCtXMgYW5kIHdpdGhpbiB0 aGUgYWxsb3dhYmxlIHZhbHVlcy4KPiA+ICsJICovCj4gPiArCXJhdGUgPSBjbGtfZ2V0X3JhdGUo ZHAtPmRwc3ViLT5hcGJfY2xrKTsKPiA+ICsJdyA9IERJVl9ST1VORF9VUCg0ICogcmF0ZSwgMTAw MCAqIDEwMDAgKiAxMCAqIDgpICogODsKPiA+ICsJaWYgKHcgPiA2ICogcmF0ZSAvICgxMDAwICog MTAwMCAqIDEwKSB8fCB3ID4gNDgpIHsKPiA+ICsJCWRldl9lcnIoZHAtPmRldiwgImFjbGsgZnJl cXVlbmN5IHRvbyBoaWdoXG4iKTsKPiA+ICsJCXJldHVybiAtRUlOVkFMOwo+ID4gKwl9Cj4gPiAr Cj4gPiArCXp5bnFtcF9kcF93cml0ZShkcCwgWllOUU1QX0RQX0FVWF9DTEtfRElWSURFUiwKPiA+ ICsJCQkodyA8PCBaWU5RTVBfRFBfQVVYX0NMS19ESVZJREVSX0FVWF9GSUxURVJfU0hJRlQpIHwK PiA+ICsJCQkocmF0ZSAvICgxMDAwICogMTAwMCkpKTsKPiA+ICsKPiA+ICsJZHAtPmF1eC5uYW1l ID0gIlp5bnFNUCBEUCBBVVgiOwo+ID4gKwlkcC0+YXV4LmRldiA9IGRwLT5kZXY7Cj4gPiArCWRw LT5hdXgudHJhbnNmZXIgPSB6eW5xbXBfZHBfYXV4X3RyYW5zZmVyOwo+ID4gKwo+ID4gKwlyZXR1 cm4gZHJtX2RwX2F1eF9yZWdpc3RlcigmZHAtPmF1eCk7Cj4gPiArfQo+ID4gKwo+ID4gKy8qKgo+ ID4gKyAqIHp5bnFtcF9kcF9hdXhfY2xlYW51cCAtIENsZWFudXAgdGhlIERQIEFVWAo+ID4gKyAq IEBkcDogRGlzcGxheVBvcnQgSVAgY29yZSBzdHJ1Y3R1cmUKPiA+ICsgKgo+ID4gKyAqIFVucmVn aXN0ZXIgdGhlIERQIEFVWCBhZGFwdGVyLgo+ID4gKyAqLwo+ID4gK3N0YXRpYyB2b2lkIHp5bnFt cF9kcF9hdXhfY2xlYW51cChzdHJ1Y3QgenlucW1wX2RwICpkcCkKPiA+ICt7Cj4gPiArCWRybV9k cF9hdXhfdW5yZWdpc3RlcigmZHAtPmF1eCk7Cj4gPiArfQo+ID4gKwo+ID4gKy8qIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCj4gPiArICogRGlzcGxheVBvcnQgR2VuZXJpYyBTdXBwb3J0Cj4gPiArICov Cj4gPiArCj4gPiArLyoqCj4gPiArICogenlucW1wX2RwX3VwZGF0ZV9taXNjIC0gV3JpdGUgdGhl IG1pc2MgcmVnaXN0ZXJzCj4gPiArICogQGRwOiBEaXNwbGF5UG9ydCBJUCBjb3JlIHN0cnVjdHVy ZQo+ID4gKyAqCj4gPiArICogVGhlIG1pc2MgcmVnaXN0ZXIgdmFsdWVzIGFyZSBzdG9yZWQgaW4g dGhlIHN0cnVjdHVyZSwgYW5kIHRoaXMKPiA+ICsgKiBmdW5jdGlvbiBhcHBsaWVzIHRoZSB2YWx1 ZXMgaW50byB0aGUgcmVnaXN0ZXJzLgo+ID4gKyAqLwo+ID4gK3N0YXRpYyB2b2lkIHp5bnFtcF9k cF91cGRhdGVfbWlzYyhzdHJ1Y3QgenlucW1wX2RwICpkcCkKPiA+ICt7Cj4gPiArCXp5bnFtcF9k cF93cml0ZShkcCwgWllOUU1QX0RQX01BSU5fU1RSRUFNX01JU0MwLCBkcC0+Y29uZmlnLm1pc2Mw KTsKPiA+ICsJenlucW1wX2RwX3dyaXRlKGRwLCBaWU5RTVBfRFBfTUFJTl9TVFJFQU1fTUlTQzEs IGRwLT5jb25maWcubWlzYzEpOwo+ID4gK30KPiA+ICsKPiA+ICsvKioKPiA+ICsgKiB6eW5xbXBf ZHBfc2V0X2Zvcm1hdCAtIFNldCB0aGUgaW5wdXQgZm9ybWF0Cj4gPiArICogQGRwOiBEaXNwbGF5 UG9ydCBJUCBjb3JlIHN0cnVjdHVyZQo+ID4gKyAqIEBmb3JtYXQ6IGlucHV0IGZvcm1hdAo+ID4g KyAqIEBicGM6IGJpdHMgcGVyIGNvbXBvbmVudAo+ID4gKyAqCj4gPiArICogVXBkYXRlIG1pc2Mg cmVnaXN0ZXIgdmFsdWVzIGJhc2VkIG9uIGlucHV0IEBmb3JtYXQgYW5kIEBicGMuCj4gPiArICoK PiA+ICsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgLUVJTlZBTC4KPiA+ICsgKi8KPiA+ICtz dGF0aWMgaW50IHp5bnFtcF9kcF9zZXRfZm9ybWF0KHN0cnVjdCB6eW5xbXBfZHAgKmRwLAo+ID4g KwkJCQllbnVtIHp5bnFtcF9kcHN1Yl9mb3JtYXQgZm9ybWF0LAo+ID4gKwkJCQl1bnNpZ25lZCBp bnQgYnBjKQo+ID4gK3sKPiA+ICsJc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9pbmZv ICpkaXNwbGF5Owo+ID4gKwlzdHJ1Y3QgenlucW1wX2RwX2NvbmZpZyAqY29uZmlnID0gJmRwLT5j b25maWc7Cj4gPiArCXVuc2lnbmVkIGludCBudW1fY29sb3JzOwo+ID4gKwo+ID4gKwljb25maWct Pm1pc2MwICY9IH5aWU5RTVBfRFBfTUFJTl9TVFJFQU1fTUlTQzBfQ09NUF9GT1JNQVRfTUFTSzsK PiA+ICsJY29uZmlnLT5taXNjMSAmPSB+WllOUU1QX0RQX01BSU5fU1RSRUFNX01JU0MxX1lfT05M WV9FTjsKPiA+ICsKPiA+ICsJc3dpdGNoIChmb3JtYXQpIHsKPiA+ICsJY2FzZSBaWU5RTVBfRFBT VUJfRk9STUFUX1JHQjoKPiA+ICsJCWNvbmZpZy0+bWlzYzAgfD0gWllOUU1QX0RQX01BSU5fU1RS RUFNX01JU0MwX0NPTVBfRk9STUFUX1JHQjsKPiA+ICsJCW51bV9jb2xvcnMgPSAzOwo+ID4gKwkJ YnJlYWs7Cj4gPiArCj4gPiArCWNhc2UgWllOUU1QX0RQU1VCX0ZPUk1BVF9ZQ1JDQjQ0NDoKPiA+ ICsJCWNvbmZpZy0+bWlzYzAgfD0gWllOUU1QX0RQX01BSU5fU1RSRUFNX01JU0MwX0NPTVBfRk9S TUFUX1lDUkNCXzQ0NDsKPiA+ICsJCW51bV9jb2xvcnMgPSAzOwo+ID4gKwkJYnJlYWs7Cj4gPiAr Cj4gPiArCWNhc2UgWllOUU1QX0RQU1VCX0ZPUk1BVF9ZQ1JDQjQyMjoKPiA+ICsJCWNvbmZpZy0+ bWlzYzAgfD0gWllOUU1QX0RQX01BSU5fU1RSRUFNX01JU0MwX0NPTVBfRk9STUFUX1lDUkNCXzQy MjsKPiA+ICsJCW51bV9jb2xvcnMgPSAyOwo+ID4gKwkJYnJlYWs7Cj4gPiArCj4gPiArCWNhc2Ug WllOUU1QX0RQU1VCX0ZPUk1BVF9ZT05MWToKPiA+ICsJCWNvbmZpZy0+bWlzYzEgfD0gWllOUU1Q X0RQX01BSU5fU1RSRUFNX01JU0MxX1lfT05MWV9FTjsKPiA+ICsJCW51bV9jb2xvcnMgPSAxOwo+ ID4gKwkJYnJlYWs7Cj4gPiArCj4gPiArCWRlZmF1bHQ6Cj4gPiArCQlkZXZfZXJyKGRwLT5kZXYs ICJJbnZhbGlkIGNvbG9ybWV0cnkgaW4gRFRcbiIpOwo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4g PiArCX0KPiA+ICsKPiA+ICsJZGlzcGxheSA9ICZkcC0+Y29ubmVjdG9yLmRpc3BsYXlfaW5mbzsK PiA+ICsJaWYgKGRpc3BsYXktPmJwYyAmJiBicGMgPiBkaXNwbGF5LT5icGMpIHsKPiA+ICsJCWRl dl93YXJuKGRwLT5kZXYsCj4gPiArCQkJICJkb3duZ3JhZGluZyByZXF1ZXN0ZWQgJXVicGMgdG8g ZGlzcGxheSBsaW1pdCAldWJwY1xuIiwKPiA+ICsJCQkgYnBjLCBkaXNwbGF5LT5icGMpOwo+ID4g KwkJYnBjID0gZGlzcGxheS0+YnBjOwo+ID4gKwl9Cj4gPiArCj4gPiArCWNvbmZpZy0+bWlzYzAg Jj0gflpZTlFNUF9EUF9NQUlOX1NUUkVBTV9NSVNDMF9CUENfTUFTSzsKPiA+ICsKPiA+ICsJc3dp dGNoIChicGMpIHsKPiA+ICsJY2FzZSA2Ogo+ID4gKwkJY29uZmlnLT5taXNjMCB8PSBaWU5RTVBf RFBfTUFJTl9TVFJFQU1fTUlTQzBfQlBDXzY7Cj4gPiArCQlicmVhazsKPiA+ICsJY2FzZSA4Ogo+ ID4gKwkJY29uZmlnLT5taXNjMCB8PSBaWU5RTVBfRFBfTUFJTl9TVFJFQU1fTUlTQzBfQlBDXzg7 Cj4gPiArCQlicmVhazsKPiA+ICsJY2FzZSAxMDoKPiA+ICsJCWNvbmZpZy0+bWlzYzAgfD0gWllO UU1QX0RQX01BSU5fU1RSRUFNX01JU0MwX0JQQ18xMDsKPiA+ICsJCWJyZWFrOwo+ID4gKwljYXNl IDEyOgo+ID4gKwkJY29uZmlnLT5taXNjMCB8PSBaWU5RTVBfRFBfTUFJTl9TVFJFQU1fTUlTQzBf QlBDXzEyOwo+ID4gKwkJYnJlYWs7Cj4gPiArCWNhc2UgMTY6Cj4gPiArCQljb25maWctPm1pc2Mw IHw9IFpZTlFNUF9EUF9NQUlOX1NUUkVBTV9NSVNDMF9CUENfMTY7Cj4gPiArCQlicmVhazsKPiA+ ICsJZGVmYXVsdDoKPiA+ICsJCWRldl93YXJuKGRwLT5kZXYsICJOb3Qgc3VwcG9ydGVkIGJwYyAo JXUpLiBmYWxsIGJhY2sgdG8gOGJwY1xuIiwKPiA+ICsJCQkgYnBjKTsKPiA+ICsJCWNvbmZpZy0+ bWlzYzAgfD0gWllOUU1QX0RQX01BSU5fU1RSRUFNX01JU0MwX0JQQ184Owo+ID4gKwkJYnBjID0g ODsKPiA+ICsJCWJyZWFrOwo+ID4gKwl9Cj4gPiArCj4gPiArCS8qIFVwZGF0ZSB0aGUgY3VycmVu dCBicHAgYmFzZWQgb24gdGhlIGZvcm1hdC4gKi8KPiA+ICsJY29uZmlnLT5icHAgPSBicGMgKiBu dW1fY29sb3JzOwo+ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArLyoqCj4g PiArICogenlucW1wX2RwX2VuY29kZXJfbW9kZV9zZXRfdHJhbnNmZXJfdW5pdCAtIFNldCB0aGUg dHJhbnNmZXIgdW5pdCB2YWx1ZXMKPiA+ICsgKiBAZHA6IERpc3BsYXlQb3J0IElQIGNvcmUgc3Ry dWN0dXJlCj4gPiArICogQG1vZGU6IHJlcXVlc3RlZCBkaXNwbGF5IG1vZGUKPiA+ICsgKgo+ID4g KyAqIFNldCB0aGUgdHJhbnNmZXIgdW5pdCwgYW5kIGNhbGN1bGF0ZSBhbGwgdHJhbnNmZXIgdW5p dCBzaXplIHJlbGF0ZWQgdmFsdWVzLgo+ID4gKyAqIENhbGN1bGF0aW9uIGlzIGJhc2VkIG9uIERQ IGFuZCBJUCBjb3JlIHNwZWNpZmljYXRpb24uCj4gPiArICovCj4gPiArc3RhdGljIHZvaWQKPiA+ ICt6eW5xbXBfZHBfZW5jb2Rlcl9tb2RlX3NldF90cmFuc2Zlcl91bml0KHN0cnVjdCB6eW5xbXBf ZHAgKmRwLAo+ID4gKwkJCQkJIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQo+ID4gK3sK PiA+ICsJdTMyIHR1ID0gWllOUU1QX0RQX01TQV9UUkFOU0ZFUl9VTklUX1NJWkVfVFVfU0laRV9E RUY7Cj4gPiArCXUzMiBidywgdmlkX2tieXRlcywgYXZnX2J5dGVzX3Blcl90dSwgaW5pdF93YWl0 Owo+ID4gKwo+ID4gKwkvKiBVc2UgdGhlIG1heCB0cmFuc2ZlciB1bml0IHNpemUgKGRlZmF1bHQp ICovCj4gPiArCXp5bnFtcF9kcF93cml0ZShkcCwgWllOUU1QX0RQX01TQV9UUkFOU0ZFUl9VTklU X1NJWkUsIHR1KTsKPiA+ICsKPiA+ICsJdmlkX2tieXRlcyA9IG1vZGUtPmNsb2NrICogKGRwLT5j b25maWcuYnBwIC8gOCk7Cj4gPiArCWJ3ID0gZHJtX2RwX2J3X2NvZGVfdG9fbGlua19yYXRlKGRw LT5tb2RlLmJ3X2NvZGUpOwo+ID4gKwlhdmdfYnl0ZXNfcGVyX3R1ID0gdmlkX2tieXRlcyAqIHR1 IC8gKGRwLT5tb2RlLmxhbmVfY250ICogYncgLyAxMDAwKTsKPiA+ICsJenlucW1wX2RwX3dyaXRl KGRwLCBaWU5RTVBfRFBfTUlOX0JZVEVTX1BFUl9UVSwKPiA+ICsJCQlhdmdfYnl0ZXNfcGVyX3R1 IC8gMTAwMCk7Cj4gPiArCXp5bnFtcF9kcF93cml0ZShkcCwgWllOUU1QX0RQX0ZSQUNfQllURVNf UEVSX1RVLAo+ID4gKwkJCWF2Z19ieXRlc19wZXJfdHUgJSAxMDAwKTsKPiA+ICsKPiA+ICsJLyog Q29uZmlndXJlIHRoZSBpbml0aWFsIHdhaXQgY3ljbGUgYmFzZWQgb24gdHJhbnNmZXIgdW5pdCBz aXplICovCj4gPiArCWlmICh0dSA8IChhdmdfYnl0ZXNfcGVyX3R1IC8gMTAwMCkpCj4gPiArCQlp bml0X3dhaXQgPSAwOwo+ID4gKwllbHNlIGlmICgoYXZnX2J5dGVzX3Blcl90dSAvIDEwMDApIDw9 IDQpCj4gPiArCQlpbml0X3dhaXQgPSB0dTsKPiA+ICsJZWxzZQo+ID4gKwkJaW5pdF93YWl0ID0g dHUgLSBhdmdfYnl0ZXNfcGVyX3R1IC8gMTAwMDsKPiA+ICsKPiA+ICsJenlucW1wX2RwX3dyaXRl KGRwLCBaWU5RTVBfRFBfSU5JVF9XQUlULCBpbml0X3dhaXQpOwo+ID4gK30KPiA+ICsKPiA+ICsv KioKPiA+ICsgKiB6eW5xbXBfZHBfZW5jb2Rlcl9tb2RlX3NldF9zdHJlYW0gLSBDb25maWd1cmUg dGhlIG1haW4gc3RyZWFtCj4gPiArICogQGRwOiBEaXNwbGF5UG9ydCBJUCBjb3JlIHN0cnVjdHVy ZQo+ID4gKyAqIEBtb2RlOiByZXF1ZXN0ZWQgZGlzcGxheSBtb2RlCj4gPiArICoKPiA+ICsgKiBD b25maWd1cmUgdGhlIG1haW4gc3RyZWFtIGJhc2VkIG9uIHRoZSByZXF1ZXN0ZWQgbW9kZSBAbW9k ZS4gQ2FsY3VsYXRpb24gaXMKPiA+ICsgKiBiYXNlZCBvbiBJUCBjb3JlIHNwZWNpZmljYXRpb24u Cj4gPiArICovCj4gPiArc3RhdGljIHZvaWQgenlucW1wX2RwX2VuY29kZXJfbW9kZV9zZXRfc3Ry ZWFtKHN0cnVjdCB6eW5xbXBfZHAgKmRwLAo+ID4gKwkJCQkJICAgICAgY29uc3Qgc3RydWN0IGRy bV9kaXNwbGF5X21vZGUgKm1vZGUpCj4gPiArewo+ID4gKwl1OCBsYW5lX2NudCA9IGRwLT5tb2Rl LmxhbmVfY250Owo+ID4gKwl1MzIgcmVnLCB3cGw7Cj4gPiArCXVuc2lnbmVkIGludCByYXRlOwo+ ID4gKwo+ID4gKwl6eW5xbXBfZHBfd3JpdGUoZHAsIFpZTlFNUF9EUF9NQUlOX1NUUkVBTV9IVE9U QUwsIG1vZGUtPmh0b3RhbCk7Cj4gPiArCXp5bnFtcF9kcF93cml0ZShkcCwgWllOUU1QX0RQX01B SU5fU1RSRUFNX1ZUT1RBTCwgbW9kZS0+dnRvdGFsKTsKPiA+ICsJenlucW1wX2RwX3dyaXRlKGRw LCBaWU5RTVBfRFBfTUFJTl9TVFJFQU1fUE9MQVJJVFksCj4gPiArCQkJKCEhKG1vZGUtPmZsYWdz ICYgRFJNX01PREVfRkxBR19QVlNZTkMpIDw8Cj4gPiArCQkJIFpZTlFNUF9EUF9NQUlOX1NUUkVB TV9QT0xBUklUWV9WU1lOQ19TSElGVCkgfAo+ID4gKwkJCSghIShtb2RlLT5mbGFncyAmIERSTV9N T0RFX0ZMQUdfUEhTWU5DKSA8PAo+ID4gKwkJCSBaWU5RTVBfRFBfTUFJTl9TVFJFQU1fUE9MQVJJ VFlfSFNZTkNfU0hJRlQpKTsKPiA+ICsJenlucW1wX2RwX3dyaXRlKGRwLCBaWU5RTVBfRFBfTUFJ Tl9TVFJFQU1fSFNXSURUSCwKPiA+ICsJCQltb2RlLT5oc3luY19lbmQgLSBtb2RlLT5oc3luY19z dGFydCk7Cj4gPiArCXp5bnFtcF9kcF93cml0ZShkcCwgWllOUU1QX0RQX01BSU5fU1RSRUFNX1ZT V0lEVEgsCj4gPiArCQkJbW9kZS0+dnN5bmNfZW5kIC0gbW9kZS0+dnN5bmNfc3RhcnQpOwo+ID4g Kwl6eW5xbXBfZHBfd3JpdGUoZHAsIFpZTlFNUF9EUF9NQUlOX1NUUkVBTV9IUkVTLCBtb2RlLT5o ZGlzcGxheSk7Cj4gPiArCXp5bnFtcF9kcF93cml0ZShkcCwgWllOUU1QX0RQX01BSU5fU1RSRUFN X1ZSRVMsIG1vZGUtPnZkaXNwbGF5KTsKPiA+ICsJenlucW1wX2RwX3dyaXRlKGRwLCBaWU5RTVBf RFBfTUFJTl9TVFJFQU1fSFNUQVJULAo+ID4gKwkJCW1vZGUtPmh0b3RhbCAtIG1vZGUtPmhzeW5j X3N0YXJ0KTsKPiA+ICsJenlucW1wX2RwX3dyaXRlKGRwLCBaWU5RTVBfRFBfTUFJTl9TVFJFQU1f VlNUQVJULAo+ID4gKwkJCW1vZGUtPnZ0b3RhbCAtIG1vZGUtPnZzeW5jX3N0YXJ0KTsKPiA+ICsK PiA+ICsJLyogSW4gc3luY2hyb25vdXMgbW9kZSwgc2V0IHRoZSBkaXZpZXJzICovCj4gPiArCWlm IChkcC0+Y29uZmlnLm1pc2MwICYgWllOUU1QX0RQX01BSU5fU1RSRUFNX01JU0MwX1NZTkNfTE9D Sykgewo+ID4gKwkJcmVnID0gZHJtX2RwX2J3X2NvZGVfdG9fbGlua19yYXRlKGRwLT5tb2RlLmJ3 X2NvZGUpOwo+ID4gKwkJenlucW1wX2RwX3dyaXRlKGRwLCBaWU5RTVBfRFBfTUFJTl9TVFJFQU1f Tl9WSUQsIHJlZyk7Cj4gPiArCQl6eW5xbXBfZHBfd3JpdGUoZHAsIFpZTlFNUF9EUF9NQUlOX1NU UkVBTV9NX1ZJRCwgbW9kZS0+Y2xvY2spOwo+ID4gKwkJcmF0ZSA9IHp5bnFtcF9kaXNwX2dldF9h dWRpb19jbGtfcmF0ZShkcC0+ZHBzdWItPmRpc3ApOwo+ID4gKwkJaWYgKHJhdGUpIHsKPiA+ICsJ CQlkZXZfZGJnKGRwLT5kZXYsICJBdWRpbyByYXRlOiAlZFxuIiwgcmF0ZSAvIDUxMik7Cj4gPiAr CQkJenlucW1wX2RwX3dyaXRlKGRwLCBaWU5RTVBfRFBfVFhfTl9BVUQsIHJlZyk7Cj4gPiArCQkJ enlucW1wX2RwX3dyaXRlKGRwLCBaWU5RTVBfRFBfVFhfTV9BVUQsIHJhdGUgLyAxMDAwKTsKPiA+ ICsJCX0KPiA+ICsJfQo+ID4gKwo+ID4gKwkvKiBPbmx5IDIgY2hhbm5lbCBhdWRpbyBpcyBzdXBw b3J0ZWQgbm93ICovCj4gPiArCWlmICh6eW5xbXBfZGlzcF9hdWRpb19lbmFibGVkKGRwLT5kcHN1 Yi0+ZGlzcCkpCj4gPiArCQl6eW5xbXBfZHBfd3JpdGUoZHAsIFpZTlFNUF9EUF9UWF9BVURJT19D SEFOTkVMUywgMSk7Cj4gPiArCj4gPiArCXp5bnFtcF9kcF93cml0ZShkcCwgWllOUU1QX0RQX1VT RVJfUElYX1dJRFRILCAxKTsKPiA+ICsKPiA+ICsJLyogVHJhbnNsYXRlIHRvIHRoZSBuYXRpdmUg MTYgYml0IGRhdGFwYXRoIGJhc2VkIG9uIElQIGNvcmUgc3BlYyAqLwo+ID4gKwl3cGwgPSAobW9k ZS0+aGRpc3BsYXkgKiBkcC0+Y29uZmlnLmJwcCArIDE1KSAvIDE2Owo+ID4gKwlyZWcgPSB3cGwg KyB3cGwgJSBsYW5lX2NudCAtIGxhbmVfY250Owo+ID4gKwl6eW5xbXBfZHBfd3JpdGUoZHAsIFpZ TlFNUF9EUF9VU0VSX0RBVEFfQ09VTlRfUEVSX0xBTkUsIHJlZyk7Cj4gPiArfQo+ID4gKwo+ID4g Ky8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gPiArICogRFJNIENvbm5lY3Rvcgo+ID4gKyAqLwo+ ID4gKwo+ID4gK3N0YXRpYyBlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzCj4gPiArenlucW1wX2Rw X2Nvbm5lY3Rvcl9kZXRlY3Qoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwgYm9vbCBm b3JjZSkKPiA+ICt7Cj4gPiArCXN0cnVjdCB6eW5xbXBfZHAgKmRwID0gY29ubmVjdG9yX3RvX2Rw KGNvbm5lY3Rvcik7Cj4gPiArCXN0cnVjdCB6eW5xbXBfZHBfbGlua19jb25maWcgKmxpbmtfY29u ZmlnID0gJmRwLT5saW5rX2NvbmZpZzsKPiA+ICsJdTMyIHN0YXRlLCBpOwo+ID4gKwlpbnQgcmV0 Owo+ID4gKwo+ID4gKwkvKgo+ID4gKwkgKiBUaGlzIGlzIGZyb20gaGV1cmlzdGljLiBJdCB0YWtl cyBzb21lIGRlbGF5IChleCwgMTAwIH4gNTAwIG1zZWMpIHRvCj4gPiArCSAqIGdldCB0aGUgSFBE IHNpZ25hbCB3aXRoIHNvbWUgbW9uaXRvcnMuCj4gPiArCSAqLwo+ID4gKwlmb3IgKGkgPSAwOyBp IDwgMTA7IGkrKykgewo+ID4gKwkJc3RhdGUgPSB6eW5xbXBfZHBfcmVhZChkcCwgWllOUU1QX0RQ X0lOVEVSUlVQVF9TSUdOQUxfU1RBVEUpOwo+ID4gKwkJaWYgKHN0YXRlICYgWllOUU1QX0RQX0lO VEVSUlVQVF9TSUdOQUxfU1RBVEVfSFBEKQo+ID4gKwkJCWJyZWFrOwo+ID4gKwkJbXNsZWVwKDEw MCk7Cj4gPiArCX0KPiA+ICsKPiA+ICsJaWYgKHN0YXRlICYgWllOUU1QX0RQX0lOVEVSUlVQVF9T SUdOQUxfU1RBVEVfSFBEKSB7Cj4gPiArCQlyZXQgPSBkcm1fZHBfZHBjZF9yZWFkKCZkcC0+YXV4 LCAweDAsIGRwLT5kcGNkLAo+ID4gKwkJCQkgICAgICAgc2l6ZW9mKGRwLT5kcGNkKSk7Cj4gPiAr CQlpZiAocmV0IDwgMCkgewo+ID4gKwkJCWRldl9kYmcoZHAtPmRldiwgIkRQQ0QgcmVhZCBmYWls ZXMiKTsKPiA+ICsJCQlnb3RvIGRpc2Nvbm5lY3RlZDsKPiA+ICsJCX0KPiA+ICsKPiA+ICsJCWxp bmtfY29uZmlnLT5tYXhfcmF0ZSA9IG1pbl90KGludCwKPiA+ICsJCQkJCSAgICAgIGRybV9kcF9t YXhfbGlua19yYXRlKGRwLT5kcGNkKSwKPiA+ICsJCQkJCSAgICAgIERQX0hJR0hfQklUX1JBVEUy KTsKPiA+ICsJCWxpbmtfY29uZmlnLT5tYXhfbGFuZXMgPSBtaW5fdCh1OCwKPiA+ICsJCQkJCSAg ICAgICBkcm1fZHBfbWF4X2xhbmVfY291bnQoZHAtPmRwY2QpLAo+ID4gKwkJCQkJICAgICAgIGRw LT5udW1fbGFuZXMpOwo+ID4gKwo+ID4gKwkJZHAtPnN0YXR1cyA9IGNvbm5lY3Rvcl9zdGF0dXNf Y29ubmVjdGVkOwo+ID4gKwkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOwo+ID4g Kwl9Cj4gPiArCj4gPiArZGlzY29ubmVjdGVkOgo+ID4gKwlkcC0+c3RhdHVzID0gY29ubmVjdG9y X3N0YXR1c19kaXNjb25uZWN0ZWQ7Cj4gPiArCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nv bm5lY3RlZDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCB6eW5xbXBfZHBfY29ubmVjdG9y X2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+ID4gK3sKPiA+ICsJ c3RydWN0IHp5bnFtcF9kcCAqZHAgPSBjb25uZWN0b3JfdG9fZHAoY29ubmVjdG9yKTsKPiA+ICsJ c3RydWN0IGVkaWQgKmVkaWQ7Cj4gPiArCWludCByZXQ7Cj4gPiArCj4gPiArCWVkaWQgPSBkcm1f Z2V0X2VkaWQoY29ubmVjdG9yLCAmZHAtPmF1eC5kZGMpOwo+ID4gKwlpZiAoIWVkaWQpCj4gPiAr CQlyZXR1cm4gMDsKPiA+ICsKPiA+ICsJZHJtX2Nvbm5lY3Rvcl91cGRhdGVfZWRpZF9wcm9wZXJ0 eShjb25uZWN0b3IsIGVkaWQpOwo+ID4gKwlyZXQgPSBkcm1fYWRkX2VkaWRfbW9kZXMoY29ubmVj dG9yLCBlZGlkKTsKPiA+ICsJa2ZyZWUoZWRpZCk7Cj4gPiArCj4gPiArCXJldHVybiByZXQ7Cj4g PiArfQo+ID4gKwo+ID4gK3N0YXRpYyBzdHJ1Y3QgZHJtX2VuY29kZXIgKgo+ID4gK3p5bnFtcF9k cF9jb25uZWN0b3JfYmVzdF9lbmNvZGVyKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3Ip Cj4gPiArewo+ID4gKwlzdHJ1Y3QgenlucW1wX2RwICpkcCA9IGNvbm5lY3Rvcl90b19kcChjb25u ZWN0b3IpOwo+ID4gKwo+ID4gKwlyZXR1cm4gJmRwLT5lbmNvZGVyOwo+ID4gK30KPiA+ICsKPiA+ ICtzdGF0aWMgaW50IHp5bnFtcF9kcF9jb25uZWN0b3JfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2Nv bm5lY3RvciAqY29ubmVjdG9yLAo+ID4gKwkJCQkJICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAq bW9kZSkKPiA+ICt7Cj4gPiArCXN0cnVjdCB6eW5xbXBfZHAgKmRwID0gY29ubmVjdG9yX3RvX2Rw KGNvbm5lY3Rvcik7Cj4gPiArCXU4IG1heF9sYW5lcyA9IGRwLT5saW5rX2NvbmZpZy5tYXhfbGFu ZXM7Cj4gPiArCXU4IGJwcCA9IGRwLT5jb25maWcuYnBwOwo+ID4gKwlpbnQgbWF4X3JhdGUgPSBk cC0+bGlua19jb25maWcubWF4X3JhdGU7Cj4gPiArCWludCByYXRlOwo+ID4gKwo+ID4gKwlpZiAo bW9kZS0+Y2xvY2sgPiBaWU5RTVBfTUFYX0ZSRVEpIHsKPiA+ICsJCWRldl9kYmcoZHAtPmRldiwg ImZpbHRlcmVkIHRoZSBtb2RlLCAlcyxmb3IgaGlnaCBwaXhlbCByYXRlXG4iLAo+ID4gKwkJCW1v ZGUtPm5hbWUpOwo+ID4gKwkJZHJtX21vZGVfZGVidWdfcHJpbnRtb2RlbGluZShtb2RlKTsKPiA+ ICsJCXJldHVybiBNT0RFX0NMT0NLX0hJR0g7Cj4gPiArCX0KPiA+ICsKPiA+ICsJLyogQ2hlY2sg d2l0aCBsaW5rIHJhdGUgYW5kIGxhbmUgY291bnQgKi8KPiA+ICsJcmF0ZSA9IHp5bnFtcF9kcF9t YXhfcmF0ZShtYXhfcmF0ZSwgbWF4X2xhbmVzLCBicHApOwo+ID4gKwlpZiAobW9kZS0+Y2xvY2sg PiByYXRlKSB7Cj4gPiArCQlkZXZfZGJnKGRwLT5kZXYsICJmaWx0ZXJlZCB0aGUgbW9kZSwgJXMs Zm9yIGhpZ2ggcGl4ZWwgcmF0ZVxuIiwKPiA+ICsJCQltb2RlLT5uYW1lKTsKPiA+ICsJCWRybV9t b2RlX2RlYnVnX3ByaW50bW9kZWxpbmUobW9kZSk7Cj4gPiArCQlyZXR1cm4gTU9ERV9DTE9DS19I SUdIOwo+ID4gKwl9Cj4gPiArCj4gPiArCXJldHVybiBNT0RFX09LOwo+ID4gK30KPiA+ICsKPiA+ ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfZnVuY3MgenlucW1wX2RwX2Nvbm5l Y3Rvcl9mdW5jcyA9IHsKPiA+ICsJLmRldGVjdAkJCT0genlucW1wX2RwX2Nvbm5lY3Rvcl9kZXRl Y3QsCj4gPiArCS5maWxsX21vZGVzCQk9IGRybV9oZWxwZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rv cl9tb2RlcywKPiA+ICsJLmRlc3Ryb3kJCT0gZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwLAo+ID4gKwku YXRvbWljX2R1cGxpY2F0ZV9zdGF0ZQk9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBs aWNhdGVfc3RhdGUsCj4gPiArCS5hdG9taWNfZGVzdHJveV9zdGF0ZQk9IGRybV9hdG9taWNfaGVs cGVyX2Nvbm5lY3Rvcl9kZXN0cm95X3N0YXRlLAo+ID4gKwkucmVzZXQJCQk9IGRybV9hdG9taWNf aGVscGVyX2Nvbm5lY3Rvcl9yZXNldCwKPiA+ICt9Owo+ID4gKwo+ID4gK3N0YXRpYyBjb25zdCBz dHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MKPiA+ICt6eW5xbXBfZHBfY29ubmVjdG9y X2hlbHBlcl9mdW5jcyA9IHsKPiA+ICsJLmdldF9tb2Rlcwk9IHp5bnFtcF9kcF9jb25uZWN0b3Jf Z2V0X21vZGVzLAo+ID4gKwkuYmVzdF9lbmNvZGVyCT0genlucW1wX2RwX2Nvbm5lY3Rvcl9iZXN0 X2VuY29kZXIsCj4gPiArCS5tb2RlX3ZhbGlkCT0genlucW1wX2RwX2Nvbm5lY3Rvcl9tb2RlX3Zh bGlkLAo+ID4gK307Cj4gPiArCj4gPiArLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiA+ICsgKiBE Uk0gRW5jb2Rlcgo+ID4gKyAqLwo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIHp5bnFtcF9kcF9lbmNv ZGVyX2VuYWJsZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCj4gPiArewo+ID4gKwlzdHJ1 Y3QgenlucW1wX2RwICpkcCA9IGVuY29kZXJfdG9fZHAoZW5jb2Rlcik7Cj4gPiArCXVuc2lnbmVk IGludCBpOwo+ID4gKwlpbnQgcmV0ID0gMDsKPiA+ICsKPiA+ICsJcG1fcnVudGltZV9nZXRfc3lu YyhkcC0+ZGV2KTsKPiA+ICsJZHAtPmVuYWJsZWQgPSB0cnVlOwo+ID4gKwl6eW5xbXBfZHBfdXBk YXRlX21pc2MoZHApOwo+ID4gKwlpZiAoenlucW1wX2Rpc3BfYXVkaW9fZW5hYmxlZChkcC0+ZHBz dWItPmRpc3ApKQo+ID4gKwkJenlucW1wX2RwX3dyaXRlKGRwLCBaWU5RTVBfRFBfVFhfQVVESU9f Q09OVFJPTCwgMSk7Cj4gPiArCXp5bnFtcF9kcF93cml0ZShkcCwgWllOUU1QX0RQX1RYX1BIWV9Q T1dFUl9ET1dOLCAwKTsKPiA+ICsJaWYgKGRwLT5zdGF0dXMgPT0gY29ubmVjdG9yX3N0YXR1c19j b25uZWN0ZWQpIHsKPiA+ICsJCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKPiA+ICsJCQlyZXQg PSBkcm1fZHBfZHBjZF93cml0ZWIoJmRwLT5hdXgsIERQX1NFVF9QT1dFUiwKPiA+ICsJCQkJCQkg RFBfU0VUX1BPV0VSX0QwKTsKPiA+ICsJCQlpZiAocmV0ID09IDEpCj4gPiArCQkJCWJyZWFrOwo+ ID4gKwkJCXVzbGVlcF9yYW5nZSgzMDAsIDUwMCk7Cj4gPiArCQl9Cj4gPiArCQkvKiBTb21lIG1v bml0b3JzIHRha2UgdGltZSB0byB3YWtlIHVwIHByb3Blcmx5ICovCj4gPiArCQltc2xlZXAoenlu cW1wX2RwX3Bvd2VyX29uX2RlbGF5X21zKTsKPiA+ICsJfQo+ID4gKwlpZiAocmV0ICE9IDEpCj4g PiArCQlkZXZfZGJnKGRwLT5kZXYsICJEUCBhdXggZmFpbGVkXG4iKTsKPiA+ICsJZWxzZQo+ID4g KwkJenlucW1wX2RwX3RyYWluX2xvb3AoZHApOwo+ID4gKwl6eW5xbXBfZHBfd3JpdGUoZHAsIFpZ TlFNUF9EUF9TT0ZUV0FSRV9SRVNFVCwKPiA+ICsJCQlaWU5RTVBfRFBfU09GVFdBUkVfUkVTRVRf QUxMKTsKPiA+ICsJenlucW1wX2RwX3dyaXRlKGRwLCBaWU5RTVBfRFBfTUFJTl9TVFJFQU1fRU5B QkxFLCAxKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgenlucW1wX2RwX2VuY29kZXJf ZGlzYWJsZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCj4gPiArewo+ID4gKwlzdHJ1Y3Qg enlucW1wX2RwICpkcCA9IGVuY29kZXJfdG9fZHAoZW5jb2Rlcik7Cj4gPiArCj4gPiArCWRwLT5l bmFibGVkID0gZmFsc2U7Cj4gPiArCWNhbmNlbF9kZWxheWVkX3dvcmsoJmRwLT5ocGRfd29yayk7 Cj4gPiArCXp5bnFtcF9kcF93cml0ZShkcCwgWllOUU1QX0RQX01BSU5fU1RSRUFNX0VOQUJMRSwg MCk7Cj4gPiArCWRybV9kcF9kcGNkX3dyaXRlYigmZHAtPmF1eCwgRFBfU0VUX1BPV0VSLCBEUF9T RVRfUE9XRVJfRDMpOwo+ID4gKwl6eW5xbXBfZHBfd3JpdGUoZHAsIFpZTlFNUF9EUF9UWF9QSFlf UE9XRVJfRE9XTiwKPiA+ICsJCQlaWU5RTVBfRFBfVFhfUEhZX1BPV0VSX0RPV05fQUxMKTsKPiA+ ICsJaWYgKHp5bnFtcF9kaXNwX2F1ZGlvX2VuYWJsZWQoZHAtPmRwc3ViLT5kaXNwKSkKPiA+ICsJ CXp5bnFtcF9kcF93cml0ZShkcCwgWllOUU1QX0RQX1RYX0FVRElPX0NPTlRST0wsIDApOwo+ID4g KwlwbV9ydW50aW1lX3B1dF9zeW5jKGRwLT5kZXYpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMg dm9pZAo+ID4gK3p5bnFtcF9kcF9lbmNvZGVyX2F0b21pY19tb2RlX3NldChzdHJ1Y3QgZHJtX2Vu Y29kZXIgKmVuY29kZXIsCj4gPiArCQkJCSAgc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0 YXRlLAo+ID4gKwkJCQkgIHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uZWN0b3Jfc3Rh dGUpCj4gPiArewo+ID4gKwlzdHJ1Y3QgenlucW1wX2RwICpkcCA9IGVuY29kZXJfdG9fZHAoZW5j b2Rlcik7Cj4gPiArCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlID0gJmNydGNfc3RhdGUt Pm1vZGU7Cj4gPiArCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlID0gJmNy dGNfc3RhdGUtPmFkanVzdGVkX21vZGU7Cj4gPiArCXU4IG1heF9sYW5lcyA9IGRwLT5saW5rX2Nv bmZpZy5tYXhfbGFuZXM7Cj4gPiArCXU4IGJwcCA9IGRwLT5jb25maWcuYnBwOwo+ID4gKwlpbnQg cmF0ZSwgbWF4X3JhdGUgPSBkcC0+bGlua19jb25maWcubWF4X3JhdGU7Cj4gPiArCWludCByZXQ7 Cj4gPiArCj4gPiArCXp5bnFtcF9kcF9zZXRfZm9ybWF0KGRwLCBaWU5RTVBfRFBTVUJfRk9STUFU X1JHQiwgOCk7Cj4gPiArCj4gPiArCS8qIENoZWNrIGFnYWluIGFzIGJwcCBvciBmb3JtYXQgbWln aHQgaGF2ZSBiZWVuIGNoYWduZWQgKi8KPiA+ICsJcmF0ZSA9IHp5bnFtcF9kcF9tYXhfcmF0ZSht YXhfcmF0ZSwgbWF4X2xhbmVzLCBicHApOwo+ID4gKwlpZiAobW9kZS0+Y2xvY2sgPiByYXRlKSB7 Cj4gPiArCQlkZXZfZXJyKGRwLT5kZXYsICJ0aGUgbW9kZSwgJXMsaGFzIHRvbyBoaWdoIHBpeGVs IHJhdGVcbiIsCj4gPiArCQkJbW9kZS0+bmFtZSk7Cj4gPiArCQlkcm1fbW9kZV9kZWJ1Z19wcmlu dG1vZGVsaW5lKG1vZGUpOwo+ID4gKwl9Cj4gPiArCj4gPiArCXJldCA9IHp5bnFtcF9kcF9tb2Rl X2NvbmZpZ3VyZShkcCwgYWRqdXN0ZWRfbW9kZS0+Y2xvY2ssIDApOwo+ID4gKwlpZiAocmV0IDwg MCkKPiA+ICsJCXJldHVybjsKPiA+ICsKPiA+ICsJenlucW1wX2RwX2VuY29kZXJfbW9kZV9zZXRf dHJhbnNmZXJfdW5pdChkcCwgYWRqdXN0ZWRfbW9kZSk7Cj4gPiArCXp5bnFtcF9kcF9lbmNvZGVy X21vZGVfc2V0X3N0cmVhbShkcCwgYWRqdXN0ZWRfbW9kZSk7Cj4gPiArfQo+ID4gKwo+ID4gKyNk ZWZpbmUgWllOUU1QX0RQX01JTl9IX0JBQ0tQT1JDSAkyMAo+ID4gKwo+ID4gK3N0YXRpYyBpbnQK PiA+ICt6eW5xbXBfZHBfZW5jb2Rlcl9hdG9taWNfY2hlY2soc3RydWN0IGRybV9lbmNvZGVyICpl bmNvZGVyLAo+ID4gKwkJCSAgICAgICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGUs Cj4gPiArCQkJICAgICAgIHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRlKQo+ ID4gK3sKPiA+ICsJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPSAmY3J0Y19zdGF0ZS0+ bW9kZTsKPiA+ICsJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUgPSAmY3J0 Y19zdGF0ZS0+YWRqdXN0ZWRfbW9kZTsKPiA+ICsJaW50IGRpZmYgPSBtb2RlLT5odG90YWwgLSBt b2RlLT5oc3luY19lbmQ7Cj4gPiArCj4gPiArCS8qCj4gPiArCSAqIFp5bnFNUCBEUCByZXF1aXJl cyBob3Jpem9udGFsIGJhY2twb3JjaCB0byBiZSBncmVhdGVyIHRoYW4gMTIuCj4gPiArCSAqIFRo aXMgbGltaXRhdGlvbiBtYXkgbm90IGJlIGNvbXBhdGlibGUgd2l0aCB0aGUgc2luayBkZXZpY2Uu Cj4gPiArCSAqLwo+ID4gKwlpZiAoZGlmZiA8IFpZTlFNUF9EUF9NSU5fSF9CQUNLUE9SQ0gpIHsK PiA+ICsJCWludCB2cmVmcmVzaCA9IChhZGp1c3RlZF9tb2RlLT5jbG9jayAqIDEwMDApIC8KPiA+ ICsJCQkgICAgICAgKGFkanVzdGVkX21vZGUtPnZ0b3RhbCAqIGFkanVzdGVkX21vZGUtPmh0b3Rh bCk7Cj4gPiArCj4gPiArCQlkZXZfZGJnKGVuY29kZXItPmRldi0+ZGV2LCAiaGJhY2twb3JjaCBh ZGp1c3RlZDogJWQgdG8gJWQiLAo+ID4gKwkJCWRpZmYsIFpZTlFNUF9EUF9NSU5fSF9CQUNLUE9S Q0ggLSBkaWZmKTsKPiA+ICsJCWRpZmYgPSBaWU5RTVBfRFBfTUlOX0hfQkFDS1BPUkNIIC0gZGlm ZjsKPiA+ICsJCWFkanVzdGVkX21vZGUtPmh0b3RhbCArPSBkaWZmOwo+ID4gKwkJYWRqdXN0ZWRf bW9kZS0+Y2xvY2sgPSBhZGp1c3RlZF9tb2RlLT52dG90YWwgKgo+ID4gKwkJCQkgICAgICAgYWRq dXN0ZWRfbW9kZS0+aHRvdGFsICogdnJlZnJlc2ggLyAxMDAwOwo+ID4gKwl9Cj4gPiArCj4gPiAr CXJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9lbmNv ZGVyX2Z1bmNzIHp5bnFtcF9kcF9lbmNvZGVyX2Z1bmNzID0gewo+ID4gKwkuZGVzdHJveQkJPSBk cm1fZW5jb2Rlcl9jbGVhbnVwLAo+ID4gK307Cj4gPiArCj4gPiArc3RhdGljIGNvbnN0IHN0cnVj dCBkcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3MgenlucW1wX2RwX2VuY29kZXJfaGVscGVyX2Z1bmNz ID0gewo+ID4gKwkuZW5hYmxlCQkJPSB6eW5xbXBfZHBfZW5jb2Rlcl9lbmFibGUsCj4gPiArCS5k aXNhYmxlCQk9IHp5bnFtcF9kcF9lbmNvZGVyX2Rpc2FibGUsCj4gPiArCS5hdG9taWNfbW9kZV9z ZXQJPSB6eW5xbXBfZHBfZW5jb2Rlcl9hdG9taWNfbW9kZV9zZXQsCj4gPiArCS5hdG9taWNfY2hl Y2sJCT0genlucW1wX2RwX2VuY29kZXJfYXRvbWljX2NoZWNrLAo+ID4gK307Cj4gPiArCj4gPiAr LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiA+ICsgKiBJbnRlcnJ1cHQgSGFuZGxpbmcKPiA+ICsg Ki8KPiA+ICsKPiA+ICsvKioKPiA+ICsgKiB6eW5xbXBfZHBfZW5hYmxlX3ZibGFuayAtIEVuYWJs ZSB2YmxhbmsKPiA+ICsgKiBAZHA6IERpc3BsYXlQb3J0IElQIGNvcmUgc3RydWN0dXJlCj4gPiAr ICoKPiA+ICsgKiBFbmFibGUgdmJsYW5rIGludGVycnVwdAo+ID4gKyAqLwo+ID4gK3ZvaWQgenlu cW1wX2RwX2VuYWJsZV92Ymxhbmsoc3RydWN0IHp5bnFtcF9kcCAqZHApCj4gPiArewo+ID4gKwl6 eW5xbXBfZHBfd3JpdGUoZHAsIFpZTlFNUF9EUF9JTlRfRU4sIFpZTlFNUF9EUF9JTlRfVkJMQU5L X1NUQVJUKTsKPiA+ICt9Cj4gPiArCj4gPiArLyoqCj4gPiArICogenlucW1wX2RwX2Rpc2FibGVf dmJsYW5rIC0gRGlzYWJsZSB2YmxhbmsKPiA+ICsgKiBAZHA6IERpc3BsYXlQb3J0IElQIGNvcmUg c3RydWN0dXJlCj4gPiArICoKPiA+ICsgKiBEaXNhYmxlIHZibGFuayBpbnRlcnJ1cHQKPiA+ICsg Ki8KPiA+ICt2b2lkIHp5bnFtcF9kcF9kaXNhYmxlX3ZibGFuayhzdHJ1Y3QgenlucW1wX2RwICpk cCkKPiA+ICt7Cj4gPiArCXp5bnFtcF9kcF93cml0ZShkcCwgWllOUU1QX0RQX0lOVF9EUywgWllO UU1QX0RQX0lOVF9WQkxBTktfU1RBUlQpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCB6 eW5xbXBfZHBfaHBkX3dvcmtfZnVuYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCj4gPiArewo+ ID4gKwlzdHJ1Y3QgenlucW1wX2RwICpkcDsKPiA+ICsKPiA+ICsJZHAgPSBjb250YWluZXJfb2Yo d29yaywgc3RydWN0IHp5bnFtcF9kcCwgaHBkX3dvcmsud29yayk7Cj4gPiArCj4gPiArCWlmIChk cC0+ZHJtKQo+ID4gKwkJZHJtX2hlbHBlcl9ocGRfaXJxX2V2ZW50KGRwLT5kcm0pOwo+ID4gK30K PiA+ICsKPiA+ICtzdGF0aWMgaXJxcmV0dXJuX3QgenlucW1wX2RwX2lycV9oYW5kbGVyKGludCBp cnEsIHZvaWQgKmRhdGEpCj4gPiArewo+ID4gKwlzdHJ1Y3QgenlucW1wX2RwICpkcCA9IChzdHJ1 Y3QgenlucW1wX2RwICopZGF0YTsKPiA+ICsJdTMyIHN0YXR1cywgbWFzazsKPiA+ICsKPiA+ICsJ c3RhdHVzID0genlucW1wX2RwX3JlYWQoZHAsIFpZTlFNUF9EUF9JTlRfU1RBVFVTKTsKPiA+ICsJ bWFzayA9IHp5bnFtcF9kcF9yZWFkKGRwLCBaWU5RTVBfRFBfSU5UX01BU0spOwo+ID4gKwlpZiAo IShzdGF0dXMgJiB+bWFzaykpCj4gPiArCQlyZXR1cm4gSVJRX05PTkU7Cj4gPiArCj4gPiArCS8q IGRiZyBmb3IgZGlhZ25vc3RpYywgYnV0IG5vdCBtdWNoIHRoYXQgdGhlIGRyaXZlciBjYW4gZG8g Ki8KPiA+ICsJaWYgKHN0YXR1cyAmIFpZTlFNUF9EUF9JTlRfQ0hCVUZfVU5ERVJGTFdfTUFTSykK PiA+ICsJCWRldl9kYmdfcmF0ZWxpbWl0ZWQoZHAtPmRldiwgInVuZGVyZmxvdyBpbnRlcnJ1cHRc biIpOwo+ID4gKwlpZiAoc3RhdHVzICYgWllOUU1QX0RQX0lOVF9DSEJVRl9PVkVSRkxXX01BU0sp Cj4gPiArCQlkZXZfZGJnX3JhdGVsaW1pdGVkKGRwLT5kZXYsICJvdmVyZmxvdyBpbnRlcnJ1cHRc biIpOwo+ID4gKwo+ID4gKwl6eW5xbXBfZHBfd3JpdGUoZHAsIFpZTlFNUF9EUF9JTlRfU1RBVFVT LCBzdGF0dXMpOwo+ID4gKwo+ID4gKwlpZiAoc3RhdHVzICYgWllOUU1QX0RQX0lOVF9WQkxBTktf U1RBUlQpCj4gPiArCQl6eW5xbXBfZGlzcF9oYW5kbGVfdmJsYW5rKGRwLT5kcHN1Yi0+ZGlzcCk7 Cj4gPiArCj4gPiArCWlmIChzdGF0dXMgJiBaWU5RTVBfRFBfSU5UX0hQRF9FVkVOVCkKPiA+ICsJ CXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmZHAtPmhwZF93b3JrLCAwKTsKPiA+ICsKPiA+ICsJaWYg KHN0YXR1cyAmIFpZTlFNUF9EUF9JTlRfSFBEX0lSUSkgewo+ID4gKwkJaW50IHJldDsKPiA+ICsJ CXU4IHN0YXR1c1tEUF9MSU5LX1NUQVRVU19TSVpFICsgMl07Cj4gPiArCj4gPiArCQlyZXQgPSBk cm1fZHBfZHBjZF9yZWFkKCZkcC0+YXV4LCBEUF9TSU5LX0NPVU5ULCBzdGF0dXMsCj4gPiArCQkJ CSAgICAgICBEUF9MSU5LX1NUQVRVU19TSVpFICsgMik7Cj4gPiArCQlpZiAocmV0IDwgMCkKPiA+ ICsJCQlnb3RvIGhhbmRsZWQ7Cj4gPiArCj4gPiArCQlpZiAoc3RhdHVzWzRdICYgRFBfTElOS19T VEFUVVNfVVBEQVRFRCB8fAo+ID4gKwkJICAgICFkcm1fZHBfY2xvY2tfcmVjb3Zlcnlfb2soJnN0 YXR1c1syXSwgZHAtPm1vZGUubGFuZV9jbnQpIHx8Cj4gPiArCQkgICAgIWRybV9kcF9jaGFubmVs X2VxX29rKCZzdGF0dXNbMl0sIGRwLT5tb2RlLmxhbmVfY250KSkgewo+ID4gKwkJCXp5bnFtcF9k cF90cmFpbl9sb29wKGRwKTsKPiA+ICsJCX0KPiA+ICsJfQo+ID4gKwo+ID4gK2hhbmRsZWQ6Cj4g PiArCXJldHVybiBJUlFfSEFORExFRDsKPiA+ICt9Cj4gPiArCj4gPiArLyogLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KPiA+ICsgKiBJbml0aWFsaXphdGlvbiAmIENsZWFudXAKPiA+ICsgKi8KPiA+ICsK PiA+ICtpbnQgenlucW1wX2RwX2luaXQoc3RydWN0IHp5bnFtcF9kcHN1YiAqZHBzdWIsIHN0cnVj dCBkcm1fZGV2aWNlICpkcm0pCj4gPiArewo+ID4gKwlzdHJ1Y3QgenlucW1wX2RwICpkcCA9IGRw c3ViLT5kcDsKPiA+ICsJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyID0gJmRwLT5lbmNvZGVy Owo+ID4gKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yID0gJmRwLT5jb25uZWN0b3I7 Cj4gPiArCWludCByZXQ7Cj4gPiArCj4gPiArCWRwLT5kcm0gPSBkcm07Cj4gPiArCWRwLT5jb25m aWcubWlzYzAgJj0gflpZTlFNUF9EUF9NQUlOX1NUUkVBTV9NSVNDMF9TWU5DX0xPQ0s7Cj4gPiAr CXp5bnFtcF9kcF9zZXRfZm9ybWF0KGRwLCBaWU5RTVBfRFBTVUJfRk9STUFUX1JHQiwgOCk7Cj4g PiArCj4gPiArCS8qIENyZWF0ZSB0aGUgRFJNIGVuY29kZXIgYW5kIGNvbm5lY3Rvci4gKi8KPiA+ ICsJZW5jb2Rlci0+cG9zc2libGVfY3J0Y3MgfD0genlucW1wX2Rpc3BfZ2V0X2NydGNfbWFzayhk cHN1Yi0+ZGlzcCk7Cj4gPiArCWRybV9lbmNvZGVyX2luaXQoZHJtLCBlbmNvZGVyLCAmenlucW1w X2RwX2VuY29kZXJfZnVuY3MsCj4gPiArCQkJIERSTV9NT0RFX0VOQ09ERVJfVE1EUywgTlVMTCk7 Cj4KPiBIZXJlIHRoZSBuZXcgZHJtX3NpbXBsZV9lbmNvZGVyX2luaXQoKSB3b3VsZCBtYWtlIHRo ZSBjb2RlIGEgbGl0dGxlCj4gc2ltcGxlci4KPiAKPiA+ICsJZHJtX2VuY29kZXJfaGVscGVyX2Fk ZChlbmNvZGVyLCAmenlucW1wX2RwX2VuY29kZXJfaGVscGVyX2Z1bmNzKTsKPiA+ICsKPiA+ICsJ Y29ubmVjdG9yLT5wb2xsZWQgPSBEUk1fQ09OTkVDVE9SX1BPTExfSFBEOwo+ID4gKwlyZXQgPSBk cm1fY29ubmVjdG9yX2luaXQoZW5jb2Rlci0+ZGV2LCBjb25uZWN0b3IsCj4gPiArCQkJCSAmenlu cW1wX2RwX2Nvbm5lY3Rvcl9mdW5jcywKPiA+ICsJCQkJIERSTV9NT0RFX0NPTk5FQ1RPUl9EaXNw bGF5UG9ydCk7Cj4gPiArCWlmIChyZXQpIHsKPiA+ICsJCWRldl9lcnIoZHAtPmRldiwgImZhaWxl ZCB0byBjcmVhdGUgdGhlIERSTSBjb25uZWN0b3JcbiIpOwo+ID4gKwkJcmV0dXJuIHJldDsKPiA+ ICsJfQo+ID4gKwo+ID4gKwlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoY29ubmVjdG9yLCAmenlu cW1wX2RwX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOwo+ID4gKwlkcm1fY29ubmVjdG9yX3JlZ2lz dGVyKGNvbm5lY3Rvcik7Cj4gPiArCWRybV9jb25uZWN0b3JfYXR0YWNoX2VuY29kZXIoY29ubmVj dG9yLCBlbmNvZGVyKTsKPiA+ICsKPiA+ICsJLyogSW5pdGlhbGl6ZSBhbmQgcmVnaXN0ZXIgdGhl IEFVWCBhZGFwdGVyLiAqLwo+ID4gKwlyZXQgPSB6eW5xbXBfZHBfYXV4X2luaXQoZHApOwo+ID4g KwlpZiAocmV0KSB7Cj4gPiArCQlkZXZfZXJyKGRwLT5kZXYsICJmYWlsZWQgdG8gaW5pdGlhbGl6 ZSBEUCBhdXhcbiIpOwo+ID4gKwkJcmV0dXJuIHJldDsKPiA+ICsJfQo+ID4gKwo+ID4gKwkvKiBO b3cgdGhhdCBpbml0aWFsaXNhdGlvbiBpcyBjb21wbGV0ZSwgZW5hYmxlIGludGVycnVwdHMuICov Cj4gPiArCXp5bnFtcF9kcF93cml0ZShkcCwgWllOUU1QX0RQX0lOVF9FTiwgWllOUU1QX0RQX0lO VF9BTEwpOwo+ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArdm9pZCB6eW5x bXBfZHBfY2xlYW51cChzdHJ1Y3QgenlucW1wX2Rwc3ViICpkcHN1YikKPiA+ICt7Cj4gPiArCXN0 cnVjdCB6eW5xbXBfZHAgKmRwID0gZHBzdWItPmRwOwo+ID4gKwo+ID4gKwl6eW5xbXBfZHBfd3Jp dGUoZHAsIFpZTlFNUF9EUF9JTlRfRFMsIFpZTlFNUF9EUF9JTlRfQUxMKTsKPiA+ICsJZGlzYWJs ZV9pcnEoZHAtPmlycSk7Cj4gPiArCj4gPiArCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmZHAt PmhwZF93b3JrKTsKPiA+ICsJenlucW1wX2RwX2F1eF9jbGVhbnVwKGRwKTsKPiA+ICt9Cj4gPiAr Cj4gPiAraW50IHp5bnFtcF9kcF9wcm9iZShzdHJ1Y3QgenlucW1wX2Rwc3ViICpkcHN1Yiwgc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiA+ICt7Cj4gPiArCXN0cnVjdCB6eW5xbXBfZHAg KmRwOwo+ID4gKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKPiA+ICsJaW50IHJldDsKPiA+ICsKPiA+ ICsJZHAgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpkcCksIEdGUF9LRVJORUwp Owo+ID4gKwlpZiAoIWRwKQo+ID4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gPiArCj4gPiArCWRwLT5k ZXYgPSAmcGRldi0+ZGV2Owo+ID4gKwlkcC0+ZHBzdWIgPSBkcHN1YjsKPiA+ICsJZHAtPnN0YXR1 cyA9IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOwo+ID4gKwo+ID4gKwlJTklUX0RFTEFZ RURfV09SSygmZHAtPmhwZF93b3JrLCB6eW5xbXBfZHBfaHBkX3dvcmtfZnVuYyk7Cj4gPiArCj4g PiArCS8qIEFjcXVpcmUgYWxsIHJlc291cmNlcyAoSU9NRU0sIElSUSBhbmQgUEhZcykuICovCj4g PiArCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9N RU0sICJkcCIpOwo+ID4gKwlkcC0+aW9tZW0gPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZHAtPmRl diwgcmVzKTsKPiA+ICsJaWYgKElTX0VSUihkcC0+aW9tZW0pKQo+ID4gKwkJcmV0dXJuIFBUUl9F UlIoZHAtPmlvbWVtKTsKPiA+ICsKPiA+ICsJZHAtPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRl diwgMCk7Cj4gPiArCWlmIChkcC0+aXJxIDwgMCkKPiA+ICsJCXJldHVybiBkcC0+aXJxOwo+ID4g Kwo+ID4gKwlkcC0+cmVzZXQgPSBkZXZtX3Jlc2V0X2NvbnRyb2xfZ2V0KCZwZGV2LT5kZXYsIE5V TEwpOwo+ID4gKwlpZiAoSVNfRVJSKGRwLT5yZXNldCkpIHsKPiA+ICsJCWlmIChQVFJfRVJSKGRw LT5yZXNldCkgIT0gLUVQUk9CRV9ERUZFUikKPiA+ICsJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJm YWlsZWQgdG8gZ2V0IHJlc2V0OiAlbGRcbiIsCj4gPiArCQkJCVBUUl9FUlIoZHAtPnJlc2V0KSk7 Cj4gPiArCQlyZXR1cm4gUFRSX0VSUihkcC0+cmVzZXQpOwo+ID4gKwl9Cj4gPiArCj4gPiArCXJl dCA9IHp5bnFtcF9kcF9waHlfcHJvYmUoZHApOwo+ID4gKwlpZiAocmV0KQo+ID4gKwkJcmV0dXJu IHJldDsKPiA+ICsKPiA+ICsJLyogSW5pdGlhbGl6ZSB0aGUgaGFyZHdhcmUuICovCj4gPiArCXp5 bnFtcF9kcF93cml0ZShkcCwgWllOUU1QX0RQX1RYX1BIWV9QT1dFUl9ET1dOLAo+ID4gKwkJCVpZ TlFNUF9EUF9UWF9QSFlfUE9XRVJfRE9XTl9BTEwpOwo+ID4gKwl6eW5xbXBfZHBfc2V0KGRwLCBa WU5RTVBfRFBfUEhZX1JFU0VULCBaWU5RTVBfRFBfUEhZX1JFU0VUX0FMTF9SRVNFVCk7Cj4gPiAr CXp5bnFtcF9kcF93cml0ZShkcCwgWllOUU1QX0RQX0ZPUkNFX1NDUkFNQkxFUl9SRVNFVCwgMSk7 Cj4gPiArCXp5bnFtcF9kcF93cml0ZShkcCwgWllOUU1QX0RQX1RSQU5TTUlUVEVSX0VOQUJMRSwg MCk7Cj4gPiArCXp5bnFtcF9kcF93cml0ZShkcCwgWllOUU1QX0RQX0lOVF9EUywgMHhmZmZmZmZm Zik7Cj4gPiArCj4gPiArCXJldCA9IHp5bnFtcF9kcF9waHlfaW5pdChkcCk7Cj4gPiArCWlmIChy ZXQpCj4gPiArCQlyZXR1cm4gcmV0Owo+ID4gKwo+ID4gKwl6eW5xbXBfZHBfd3JpdGUoZHAsIFpZ TlFNUF9EUF9UUkFOU01JVFRFUl9FTkFCTEUsIDEpOwo+ID4gKwo+ID4gKwkvKgo+ID4gKwkgKiBO b3cgdGhhdCB0aGUgaGFyZHdhcmUgaXMgaW5pdGlhbGl6ZWQgYW5kIHdvbid0IGdlbmVyYXRlIHNw dXJpb3VzCj4gPiArCSAqIGludGVycnVwdHMsIHJlcXVlc3QgdGhlIElSUS4KPiA+ICsJICovCj4g PiArCXJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoZHAtPmRldiwgZHAtPmlycSwgTlVM TCwKPiA+ICsJCQkJCXp5bnFtcF9kcF9pcnFfaGFuZGxlciwgSVJRRl9PTkVTSE9ULAo+ID4gKwkJ CQkJZGV2X25hbWUoZHAtPmRldiksIGRwKTsKPiA+ICsJaWYgKHJldCA8IDApCj4gPiArCQlnb3Rv IGVycm9yX3BoeTsKPiA+ICsKPiA+ICsJZHBzdWItPmRwID0gZHA7Cj4gPiArCj4gPiArCWRldl9k YmcoZHAtPmRldiwgIlp5bnFNUCBEaXNwbGF5UG9ydCBUeCBwcm9iZWQgd2l0aCAldSBsYW5lc1xu IiwKPiA+ICsJCWRwLT5udW1fbGFuZXMpOwo+ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ICsKPiA+ ICtlcnJvcl9waHk6Cj4gPiArCXp5bnFtcF9kcF9waHlfZXhpdChkcCk7Cj4gPiArCXJldHVybiBy ZXQ7Cj4gPiArfQo+ID4gKwo+ID4gK3ZvaWQgenlucW1wX2RwX3JlbW92ZShzdHJ1Y3QgenlucW1w X2Rwc3ViICpkcHN1YikKPiA+ICt7Cj4gPiArCXN0cnVjdCB6eW5xbXBfZHAgKmRwID0gZHBzdWIt PmRwOwo+ID4gKwo+ID4gKwl6eW5xbXBfZHBfd3JpdGUoZHAsIFpZTlFNUF9EUF9UUkFOU01JVFRF Ul9FTkFCTEUsIDApOwo+ID4gKwl6eW5xbXBfZHBfd3JpdGUoZHAsIFpZTlFNUF9EUF9JTlRfRFMs IDB4ZmZmZmZmZmYpOwo+ID4gKwo+ID4gKwl6eW5xbXBfZHBfcGh5X2V4aXQoZHApOwo+ID4gKwlk cHN1Yi0+ZHAgPSBOVUxMOwo+ID4gK30KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v eGxueC96eW5xbXBfZHAuaCBiL2RyaXZlcnMvZ3B1L2RybS94bG54L3p5bnFtcF9kcC5oCj4gPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi41ZTc1OGQyYjc2YjAK PiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS94bG54L3p5bnFtcF9k cC5oCj4gPiBAQCAtMCwwICsxLDI5IEBACj4gPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEdQTC0yLjAgKi8KPiA+ICsvKgo+ID4gKyAqIFp5bnFNUCBEaXNwbGF5UG9ydCBEcml2ZXIKPiA+ ICsgKgo+ID4gKyAqIENvcHlyaWdodCAoQykgMjAxNyAtIDIwMTkgWGlsaW54LCBJbmMuCj4gPiAr ICoKPiA+ICsgKiBBdXRob3JzOgo+ID4gKyAqIC0gSHl1biBXb28gS3dvbiA8aHl1bi5rd29uQHhp bGlueC5jb20+Cj4gPiArICogLSBMYXVyZW50IFBpbmNoYXJ0IDxsYXVyZW50LnBpbmNoYXJ0QGlk ZWFzb25ib2FyZC5jb20+Cj4gPiArICovCj4gPiArCj4gPiArI2lmbmRlZiBfWllOUU1QX0RQX0hf Cj4gPiArI2RlZmluZSBfWllOUU1QX0RQX0hfCj4gPiArCj4gPiArc3RydWN0IGRybV9kZXZpY2U7 Cj4gPiArc3RydWN0IHBsYXRmb3JtX2RldmljZTsKPiA+ICtzdHJ1Y3QgenlucW1wX2RwOwo+ID4g K3N0cnVjdCB6eW5xbXBfZHBzdWI7Cj4gPiArCj4gPiArdm9pZCB6eW5xbXBfZHBfZW5hYmxlX3Zi bGFuayhzdHJ1Y3QgenlucW1wX2RwICpkcCk7Cj4gPiArdm9pZCB6eW5xbXBfZHBfZGlzYWJsZV92 Ymxhbmsoc3RydWN0IHp5bnFtcF9kcCAqZHApOwo+ID4gKwo+ID4gK2ludCB6eW5xbXBfZHBfaW5p dChzdHJ1Y3QgenlucW1wX2Rwc3ViICpkcHN1Yiwgc3RydWN0IGRybV9kZXZpY2UgKmRybSk7Cj4g PiArdm9pZCB6eW5xbXBfZHBfY2xlYW51cChzdHJ1Y3QgenlucW1wX2Rwc3ViICpkcHN1Yik7Cj4g PiArCj4gPiAraW50IHp5bnFtcF9kcF9wcm9iZShzdHJ1Y3QgenlucW1wX2Rwc3ViICpkcHN1Yiwg c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7Cj4gPiArdm9pZCB6eW5xbXBfZHBfcmVtb3Zl KHN0cnVjdCB6eW5xbXBfZHBzdWIgKmRwc3ViKTsKPiA+ICsKPiA+ICsjZW5kaWYgLyogX1pZTlFN UF9EUF9IXyAqLwo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94bG54L3p5bnFtcF9k cHN1Yi5jIGIvZHJpdmVycy9ncHUvZHJtL3hsbngvenlucW1wX2Rwc3ViLmMKPiA+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLjIyMzU3NjFjNGVkMQo+ID4gLS0t IC9kZXYvbnVsbAo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3hsbngvenlucW1wX2Rwc3ViLmMK PiA+IEBAIC0wLDAgKzEsMzMwIEBACj4gPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQ TC0yLjAKPiA+ICsvKgo+ID4gKyAqIFp5bnFNUCBEaXNwbGF5UG9ydCBTdWJzeXN0ZW0gRHJpdmVy Cj4gPiArICoKPiA+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTcgLSAyMDE5IFhpbGlueCwgSW5jLgo+ ID4gKyAqCj4gPiArICogQXV0aG9yczoKPiA+ICsgKiAtIEh5dW4gV29vIEt3b24gPGh5dW4ua3dv bkB4aWxpbnguY29tPgo+ID4gKyAqIC0gTGF1cmVudCBQaW5jaGFydCA8bGF1cmVudC5waW5jaGFy dEBpZGVhc29uYm9hcmQuY29tPgo+ID4gKyAqLwo+ID4gKwo+ID4gKyNpbmNsdWRlIDxsaW51eC9j bGsuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KPiA+ICsjaW5jbHVkZSA8 bGludXgvbW9kdWxlLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L29mX3Jlc2VydmVkX21lbS5oPgo+ ID4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KPiA+ICsjaW5jbHVkZSA8bGlu dXgvcG1fcnVudGltZS5oPgo+ID4gKwo+ID4gKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxw ZXIuaD4KPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9kZXZpY2UuaD4KPiA+ICsjaW5jbHVkZSA8ZHJt L2RybV9kcnYuaD4KPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9mYl9oZWxwZXIuaD4KPiA+ICsjaW5j bHVkZSA8ZHJtL2RybV9mb3VyY2MuaD4KPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9nZW1fY21hX2hl bHBlci5oPgo+ID4gKyNpbmNsdWRlIDxkcm0vZHJtX2dlbV9mcmFtZWJ1ZmZlcl9oZWxwZXIuaD4K PiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9tb2RlX2NvbmZpZy5oPgo+ID4gKyNpbmNsdWRlIDxkcm0v ZHJtX3Byb2JlX2hlbHBlci5oPgo+ID4gKyNpbmNsdWRlIDxkcm0vZHJtX3ZibGFuay5oPgo+ID4g Kwo+ID4gKyNpbmNsdWRlICJ6eW5xbXBfZGlzcC5oIgo+ID4gKyNpbmNsdWRlICJ6eW5xbXBfZHAu aCIKPiA+ICsjaW5jbHVkZSAienlucW1wX2Rwc3ViLmgiCj4gPiArCj4gPiArLyogLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KPiA+ICsgKiBEdW1iIEJ1ZmZlciAmIEZyYW1lYnVmZmVyIEFsbG9jYXRpb24K PiA+ICsgKi8KPiA+ICsKPiA+ICtzdGF0aWMgaW50IHp5bnFtcF9kcHN1Yl9kdW1iX2NyZWF0ZShz dHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKPiA+ICsJCQkJICAgIHN0cnVjdCBkcm1fZGV2aWNl ICpkcm0sCj4gPiArCQkJCSAgICBzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2R1bWIgKmFyZ3MpCj4g PiArewo+ID4gKwlzdHJ1Y3QgenlucW1wX2Rwc3ViICpkcHN1YiA9IGRybS0+ZGV2X3ByaXZhdGU7 Cj4gPiArCXVuc2lnbmVkIGludCBwaXRjaCA9IERJVl9ST1VORF9VUChhcmdzLT53aWR0aCAqIGFy Z3MtPmJwcCwgOCk7Cj4gPiArCj4gPiArCS8qIEVuZm9yY2UgdGhlIGFsaWdubWVudCBjb25zdHJh aW50cyBvZiB0aGUgRE1BIGVuZ2luZS4gKi8KPiA+ICsJYXJncy0+cGl0Y2ggPSBBTElHTihwaXRj aCwgZHBzdWItPmRtYV9hbGlnbik7Cj4gPiArCj4gPiArCXJldHVybiBkcm1fZ2VtX2NtYV9kdW1i X2NyZWF0ZV9pbnRlcm5hbChmaWxlX3ByaXYsIGRybSwgYXJncyk7Cj4gPiArfQo+ID4gKwo+ID4g K3N0YXRpYyBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICoKPiA+ICt6eW5xbXBfZHBzdWJfZmJfY3Jl YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAo+ ID4gKwkJICAgICAgIGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQyICptb2RlX2NtZCkKPiA+ ICt7Cj4gPiArCXN0cnVjdCB6eW5xbXBfZHBzdWIgKmRwc3ViID0gZHJtLT5kZXZfcHJpdmF0ZTsK PiA+ICsJc3RydWN0IGRybV9tb2RlX2ZiX2NtZDIgY21kID0gKm1vZGVfY21kOwo+ID4gKwl1bnNp Z25lZCBpbnQgaTsKPiA+ICsKPiA+ICsJLyogRW5mb3JjZSB0aGUgYWxpZ25tZW50IGNvbnN0cmFp bnRzIG9mIHRoZSBETUEgZW5naW5lLiAqLwo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0la RShjbWQucGl0Y2hlcyk7ICsraSkKPiA+ICsJCWNtZC5waXRjaGVzW2ldID0gQUxJR04oY21kLnBp dGNoZXNbaV0sIGRwc3ViLT5kbWFfYWxpZ24pOwo+ID4gKwo+ID4gKwlyZXR1cm4gZHJtX2dlbV9m Yl9jcmVhdGUoZHJtLCBmaWxlX3ByaXYsICZjbWQpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMg Y29uc3Qgc3RydWN0IGRybV9tb2RlX2NvbmZpZ19mdW5jcyB6eW5xbXBfZHBzdWJfbW9kZV9jb25m aWdfZnVuY3MgPSB7Cj4gPiArCS5mYl9jcmVhdGUJCT0genlucW1wX2Rwc3ViX2ZiX2NyZWF0ZSwK PiA+ICsJLmF0b21pY19jaGVjawkJPSBkcm1fYXRvbWljX2hlbHBlcl9jaGVjaywKPiA+ICsJLmF0 b21pY19jb21taXQJCT0gZHJtX2F0b21pY19oZWxwZXJfY29tbWl0LAo+ID4gK307Cj4gPiArCj4g PiArLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiA+ICsgKiBEUk0vS01TIERyaXZlcgo+ID4gKyAq Lwo+ID4gKwo+ID4gK0RFRklORV9EUk1fR0VNX0NNQV9GT1BTKHp5bnFtcF9kcHN1Yl9kcm1fZm9w cyk7Cj4gPiArCj4gPiArc3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyIHp5bnFtcF9kcHN1Yl9kcm1f ZHJpdmVyID0gewo+ID4gKwkuZHJpdmVyX2ZlYXR1cmVzCQk9IERSSVZFUl9NT0RFU0VUIHwgRFJJ VkVSX0dFTSB8Cj4gPiArCQkJCQkgIERSSVZFUl9BVE9NSUMsCj4gPiArCj4gPiArCS5wcmltZV9o YW5kbGVfdG9fZmQJCT0gZHJtX2dlbV9wcmltZV9oYW5kbGVfdG9fZmQsCj4gPiArCS5wcmltZV9m ZF90b19oYW5kbGUJCT0gZHJtX2dlbV9wcmltZV9mZF90b19oYW5kbGUsCj4gPiArCS5nZW1fcHJp bWVfZXhwb3J0CQk9IGRybV9nZW1fcHJpbWVfZXhwb3J0LAo+ID4gKwkuZ2VtX3ByaW1lX2ltcG9y dAkJPSBkcm1fZ2VtX3ByaW1lX2ltcG9ydCwKPiA+ICsJLmdlbV9wcmltZV9nZXRfc2dfdGFibGUJ CT0gZHJtX2dlbV9jbWFfcHJpbWVfZ2V0X3NnX3RhYmxlLAo+ID4gKwkuZ2VtX3ByaW1lX2ltcG9y dF9zZ190YWJsZQk9IGRybV9nZW1fY21hX3ByaW1lX2ltcG9ydF9zZ190YWJsZSwKPiA+ICsJLmdl bV9wcmltZV92bWFwCQkJPSBkcm1fZ2VtX2NtYV9wcmltZV92bWFwLAo+ID4gKwkuZ2VtX3ByaW1l X3Z1bm1hcAkJPSBkcm1fZ2VtX2NtYV9wcmltZV92dW5tYXAsCj4gPiArCS5nZW1fcHJpbWVfbW1h cAkJCT0gZHJtX2dlbV9jbWFfcHJpbWVfbW1hcCwKPiA+ICsJLmdlbV9mcmVlX29iamVjdF91bmxv Y2tlZAk9IGRybV9nZW1fY21hX2ZyZWVfb2JqZWN0LAo+ID4gKwkuZ2VtX3ZtX29wcwkJCT0gJmRy bV9nZW1fY21hX3ZtX29wcywKPiA+ICsJLmR1bWJfY3JlYXRlCQkJPSB6eW5xbXBfZHBzdWJfZHVt Yl9jcmVhdGUsCj4gPiArCS5kdW1iX2Rlc3Ryb3kJCQk9IGRybV9nZW1fZHVtYl9kZXN0cm95LAo+ ID4gKwo+ID4gKwkuZm9wcwkJCQk9ICZ6eW5xbXBfZHBzdWJfZHJtX2ZvcHMsCj4gPiArCj4gPiAr CS5uYW1lCQkJCT0gInp5bnFtcC1kcHN1YiIsCj4gPiArCS5kZXNjCQkJCT0gIlhpbGlueCBEaXNw bGF5UG9ydCBTdWJzeXN0ZW0gRHJpdmVyIiwKPiA+ICsJLmRhdGUJCQkJPSAiMjAxMzA1MDkiLAo+ Cj4gSG1tLCB0aGlzIGlzIG5vdCB2ZXJ5IGN1cnJlbnQuLgoKSW5kZWVkLCBidXQgYXQgdGhlIHNh bWUgdGltZSBpdCdzIG1lYW5pbmdsZXNzLCBpc24ndCBpdCA/IDotKQoKPiA+ICsJLm1ham9yCQkJ CT0gMSwKPiA+ICsJLm1pbm9yCQkJCT0gMCwKPiA+ICt9Owo+ID4gKwo+ID4gK3N0YXRpYyB2b2lk IHp5bnFtcF9kcHN1Yl9kcm1fY2xlYW51cChzdHJ1Y3QgenlucW1wX2Rwc3ViICpkcHN1YikKPiA+ ICt7Cj4gPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBkcHN1Yi0+ZHJtOwo+ID4gKwo+ID4g Kwlkcm1fZGV2X3VucmVnaXN0ZXIoZHJtKTsKPiA+ICsKPiA+ICsJenlucW1wX2RwX2NsZWFudXAo ZHBzdWIpOwo+ID4gKwo+ID4gKwlkcm1fa21zX2hlbHBlcl9wb2xsX2ZpbmkoZHJtKTsKPiA+ICsJ ZHJtX21vZGVfY29uZmlnX2NsZWFudXAoZHJtKTsKPiA+ICsKPiA+ICsJZHJtX2Rldl9wdXQoZHJt KTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCB6eW5xbXBfZHBzdWJfZHJtX2luaXQoc3Ry dWN0IHp5bnFtcF9kcHN1YiAqZHBzdWIpCj4gPiArewo+ID4gKwlzdHJ1Y3QgZHJtX2RldmljZSAq ZHJtOwo+ID4gKwlpbnQgcmV0Owo+ID4gKwo+ID4gKwlkcm0gPSBkcm1fZGV2X2FsbG9jKCZ6eW5x bXBfZHBzdWJfZHJtX2RyaXZlciwgZHBzdWItPmRldik7Cj4gPiArCWlmIChJU19FUlIoZHJtKSkK PiA+ICsJCXJldHVybiBQVFJfRVJSKGRybSk7Cj4gPiArCj4gPiArCWRwc3ViLT5kcm0gPSBkcm07 Cj4gPiArCWRybS0+ZGV2X3ByaXZhdGUgPSBkcHN1YjsKPiA+ICsKPiA+ICsJLyogSW5pdGlhbGl6 ZSBtb2RlIGNvbmZpZywgdmJsYW5rIGFuZCB0aGUgS01TIHBvbGwgaGVscGVyLiAqLwo+ID4gKwlk cm1fbW9kZV9jb25maWdfaW5pdChkcm0pOwo+ID4gKwo+ID4gKwlkcm0tPm1vZGVfY29uZmlnLmZ1 bmNzID0gJnp5bnFtcF9kcHN1Yl9tb2RlX2NvbmZpZ19mdW5jczsKPiA+ICsJZHJtLT5tb2RlX2Nv bmZpZy5taW5fd2lkdGggPSAwOwo+ID4gKwlkcm0tPm1vZGVfY29uZmlnLm1pbl9oZWlnaHQgPSAw Owo+ID4gKwlkcm0tPm1vZGVfY29uZmlnLm1heF93aWR0aCA9IFpZTlFNUF9ESVNQX01BWF9XSURU SDsKPiA+ICsJZHJtLT5tb2RlX2NvbmZpZy5tYXhfaGVpZ2h0ID0gWllOUU1QX0RJU1BfTUFYX0hF SUdIVDsKPiA+ICsKPiA+ICsJcmV0ID0gZHJtX3ZibGFua19pbml0KGRybSwgMSk7Cj4gPiArCWlm IChyZXQpCj4gPiArCQlnb3RvIGVycl9tb2RlX2NvbmZpZ19jbGVhbnVwOwo+ID4gKwo+ID4gKwlk cm0tPmlycV9lbmFibGVkID0gMTsKPiA+ICsKPiA+ICsJZHJtX2ttc19oZWxwZXJfcG9sbF9pbml0 KGRybSk7Cj4gPiArCj4gPiArCS8qCj4gPiArCSAqIEluaXRpYWxpemUgdGhlIERJU1AgYW5kIERQ IGNvbXBvbmVudHMuIFRoaXMgd2lsbCBjcmVhdGVzIHBsYW5lcywKPiA+ICsJICogQ1JUQywgZW5j b2RlciBhbmQgY29ubmVjdG9yLiBUaGUgRElTUCBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgZmlyc3Qg YXMKPiA+ICsJICogdGhlIERQIGVuY29kZXIgbmVlZHMgdGhlIENSVEMuCj4gPiArCSAqLwo+ID4g KwlyZXQgPSB6eW5xbXBfZGlzcF9pbml0KGRwc3ViLCBkcm0pOwo+ID4gKwlpZiAocmV0KQo+ID4g KwkJZ290byBlcnJfcG9sbF9maW5pOwo+ID4gKwo+ID4gKwlyZXQgPSB6eW5xbXBfZHBfaW5pdChk cHN1YiwgZHJtKTsKPiA+ICsJaWYgKHJldCkKPiA+ICsJCWdvdG8gZXJyX3BvbGxfZmluaTsKPiA+ ICsKPiA+ICsJZG1hX3NldF9tYXNrKGRwc3ViLT5kZXYsIERNQV9CSVRfTUFTSyhaWU5RTVBfRElT UF9NQVhfRE1BX0JJVCkpOwo+ID4gKwo+ID4gKwkvKiBSZXNldCBhbGwgY29tcG9uZW50cyBhbmQg cmVnaXN0ZXIgdGhlIERSTSBkZXZpY2UuICovCj4gPiArCWRybV9tb2RlX2NvbmZpZ19yZXNldChk cm0pOwo+ID4gKwo+ID4gKwlyZXQgPSBkcm1fZGV2X3JlZ2lzdGVyKGRybSwgMCk7Cj4gPiArCWlm IChyZXQgPCAwKQo+ID4gKwkJZ290byBlcnJfZHBfY2xlYW51cDsKPiA+ICsKPiA+ICsJLyoKPiA+ ICsJICogSW5pdGlhbGl6ZSBmYmRldiBnZW5lcmljIGVtdWxhdGlvbi4gRmFpbHVyZXMgYXJlIG5v dCBmYXRhbCBhcyB0aGUKPiA+ICsJICogRFJNL0tNUyBkZXZpY2UgaXMgc3RpbGwgdXNhYmxlIHdp dGhvdXQgZW11bGF0aW9uIHN1cHBvcnQuCj4gPiArCSAqLwo+ID4gKwlyZXQgPSBkcm1fZmJkZXZf Z2VuZXJpY19zZXR1cChkcm0sIDI0KTsKPiA+ICsJaWYgKHJldCA8IDApCj4gPiArCQlkZXZfZXJy KGRwc3ViLT5kZXYsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBmYmRldiBlbXVsYXRpb25cbiIpOwo+ ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ICsKPiA+ICtlcnJfZHBfY2xlYW51cDoKPiA+ICsJenlu cW1wX2RwX2NsZWFudXAoZHBzdWIpOwo+ID4gK2Vycl9wb2xsX2Zpbmk6Cj4gPiArCWRybV9rbXNf aGVscGVyX3BvbGxfZmluaShkcm0pOwo+ID4gK2Vycl9tb2RlX2NvbmZpZ19jbGVhbnVwOgo+ID4g Kwlkcm1fbW9kZV9jb25maWdfY2xlYW51cChkcm0pOwo+ID4gKwlkcm1fZGV2X3B1dChkcm0pOwo+ ID4gKwlyZXR1cm4gcmV0Owo+ID4gK30KPiA+ICsKPiA+ICsvKiAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQo+ID4gKyAqIFBvd2VyIE1hbmFnZW1lbnQKPiA+ICsgKi8KPiA+ICsKPiA+ICtzdGF0aWMgaW50 IF9fbWF5YmVfdW51c2VkIHp5bnFtcF9kcHN1Yl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikK PiA+ICt7Cj4gPiArCXN0cnVjdCB6eW5xbXBfZHBzdWIgKmRwc3ViID0gZGV2X2dldF9kcnZkYXRh KGRldik7Cj4gPiArCj4gPiArCXJldHVybiBkcm1fbW9kZV9jb25maWdfaGVscGVyX3N1c3BlbmQo ZHBzdWItPmRybSk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQg enlucW1wX2Rwc3ViX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gPiArewo+ID4gKwlzdHJ1 Y3QgenlucW1wX2Rwc3ViICpkcHN1YiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+ID4gKwo+ID4g KwlyZXR1cm4gZHJtX21vZGVfY29uZmlnX2hlbHBlcl9yZXN1bWUoZHBzdWItPmRybSk7Cj4gPiAr fQo+ID4gKwo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyB6eW5xbXBfZHBzdWJf cG1fb3BzID0gewo+ID4gKwlTRVRfU1lTVEVNX1NMRUVQX1BNX09QUyh6eW5xbXBfZHBzdWJfc3Vz cGVuZCwgenlucW1wX2Rwc3ViX3Jlc3VtZSkKPiA+ICt9Owo+ID4gKwo+ID4gKy8qIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCj4gPiArICogUHJvYmUgJiBSZW1vdmUKPiA+ICsgKi8KPiA+ICsKPiA+ICtz dGF0aWMgaW50IHp5bnFtcF9kcHN1Yl9pbml0X2Nsb2NrcyhzdHJ1Y3QgenlucW1wX2Rwc3ViICpk cHN1YikKPiA+ICt7Cj4gPiArCWludCByZXQ7Cj4gPiArCj4gPiArCWRwc3ViLT5hcGJfY2xrID0g ZGV2bV9jbGtfZ2V0KGRwc3ViLT5kZXYsICJkcF9hcGJfY2xrIik7Cj4gPiArCWlmIChJU19FUlIo ZHBzdWItPmFwYl9jbGspKQo+ID4gKwkJcmV0dXJuIFBUUl9FUlIoZHBzdWItPmFwYl9jbGspOwo+ ID4gKwo+ID4gKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoZHBzdWItPmFwYl9jbGspOwo+ID4g KwlpZiAocmV0KSB7Cj4gPiArCQlkZXZfZXJyKGRwc3ViLT5kZXYsICJmYWlsZWQgdG8gZW5hYmxl IHRoZSBBUEIgY2xvY2tcbiIpOwo+ID4gKwkJcmV0dXJuIHJldDsKPiA+ICsJfQo+ID4gKwo+ID4g KwlyZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCB6eW5xbXBfZHBzdWJfcHJv YmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiA+ICt7Cj4gPiArCXN0cnVjdCB6eW5x bXBfZHBzdWIgKmRwc3ViOwo+ID4gKwlpbnQgcmV0Owo+ID4gKwo+ID4gKwlkcHN1YiA9IGRldm1f a3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKmRwc3ViKSwgR0ZQX0tFUk5FTCk7Cj4gPiArCWlm ICghZHBzdWIpCj4gPiArCQlyZXR1cm4gLUVOT01FTTsKPiA+ICsKPiA+ICsJZHBzdWItPmRldiA9 ICZwZGV2LT5kZXY7Cj4gPiArCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRwc3ViKTsKPiA+ ICsKPiA+ICsJLyogVHJ5IHRoZSByZXNlcnZlZCBtZW1vcnkuIFByb2NlZWQgaWYgdGhlcmUncyBu b25lLiAqLwo+ID4gKwlvZl9yZXNlcnZlZF9tZW1fZGV2aWNlX2luaXQoJnBkZXYtPmRldik7Cj4g PiArCj4gPiArCXJldCA9IHp5bnFtcF9kcHN1Yl9pbml0X2Nsb2NrcyhkcHN1Yik7Cj4gPiArCWlm IChyZXQgPCAwKQo+ID4gKwkJZ290byBlcnJfbWVtOwo+ID4gKwo+ID4gKwlwbV9ydW50aW1lX2Vu YWJsZSgmcGRldi0+ZGV2KTsKPiA+ICsKPiA+ICsJLyoKPiA+ICsJICogRFAgc2hvdWxkIGJlIHBy b2JlZCBmaXJzdCBzbyB0aGF0IHRoZSB6eW5xbXBfZGlzcCBjYW4gc2V0IHRoZSBvdXRwdXQKPiA+ ICsJICogZm9ybWF0IGFjY29yZGluZ2x5Lgo+ID4gKwkgKi8KPiA+ICsJcmV0ID0genlucW1wX2Rw X3Byb2JlKGRwc3ViLCBwZGV2KTsKPiA+ICsJaWYgKHJldCkKPiA+ICsJCWdvdG8gZXJyX3BtOwo+ ID4gKwo+ID4gKwlyZXQgPSB6eW5xbXBfZGlzcF9wcm9iZShkcHN1YiwgcGRldik7Cj4gPiArCWlm IChyZXQpCj4gPiArCQlnb3RvIGVycl9kcDsKPiA+ICsKPiA+ICsJcmV0ID0genlucW1wX2Rwc3Vi X2RybV9pbml0KGRwc3ViKTsKPiA+ICsJaWYgKHJldCkKPiA+ICsJCWdvdG8gZXJyX2Rpc3A7Cj4g PiArCj4gPiArCWRldl9pbmZvKCZwZGV2LT5kZXYsICJaeW5xTVAgRGlzcGxheVBvcnQgU3Vic3lz dGVtIGRyaXZlciBwcm9iZWQiKTsKPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArCj4gPiArZXJy X2Rpc3A6Cj4gPiArCXp5bnFtcF9kaXNwX3JlbW92ZShkcHN1Yik7Cj4gPiArZXJyX2RwOgo+ID4g Kwl6eW5xbXBfZHBfcmVtb3ZlKGRwc3ViKTsKPiA+ICtlcnJfcG06Cj4gPiArCXBtX3J1bnRpbWVf ZGlzYWJsZSgmcGRldi0+ZGV2KTsKPiA+ICsJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRwc3ViLT5h cGJfY2xrKTsKPiA+ICtlcnJfbWVtOgo+ID4gKwlvZl9yZXNlcnZlZF9tZW1fZGV2aWNlX3JlbGVh c2UoJnBkZXYtPmRldik7Cj4gPiArCXJldHVybiByZXQ7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRp YyBpbnQgenlucW1wX2Rwc3ViX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ ID4gK3sKPiA+ICsJc3RydWN0IHp5bnFtcF9kcHN1YiAqZHBzdWIgPSBwbGF0Zm9ybV9nZXRfZHJ2 ZGF0YShwZGV2KTsKPiA+ICsKPiA+ICsJenlucW1wX2Rwc3ViX2RybV9jbGVhbnVwKGRwc3ViKTsK PiA+ICsKPiA+ICsJenlucW1wX2Rpc3BfcmVtb3ZlKGRwc3ViKTsKPiA+ICsJenlucW1wX2RwX3Jl bW92ZShkcHN1Yik7Cj4gPiArCj4gPiArCXBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsK PiA+ICsJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRwc3ViLT5hcGJfY2xrKTsKPiA+ICsJb2ZfcmVz ZXJ2ZWRfbWVtX2RldmljZV9yZWxlYXNlKCZwZGV2LT5kZXYpOwo+ID4gKwo+ID4gKwlyZXR1cm4g MDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgenlucW1wX2Rwc3ViX3NodXRkb3duKHN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gPiArewo+ID4gKwlzdHJ1Y3QgenlucW1wX2Rw c3ViICpkcHN1YiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwo+ID4gKwo+ID4gKwlkcm1f YXRvbWljX2hlbHBlcl9zaHV0ZG93bihkcHN1Yi0+ZHJtKTsKPiA+ICt9Cj4gPiArCj4gPiArc3Rh dGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgenlucW1wX2Rwc3ViX29mX21hdGNoW10gPSB7 Cj4gPiArCXsgLmNvbXBhdGlibGUgPSAieGxueCx6eW5xbXAtZHBzdWItMS43IiwgfSwKPiA+ICsJ eyAvKiBlbmQgb2YgdGFibGUgKi8gfSwKPiA+ICt9Owo+ID4gK01PRFVMRV9ERVZJQ0VfVEFCTEUo b2YsIHp5bnFtcF9kcHN1Yl9vZl9tYXRjaCk7Cj4gPiArCj4gPiArc3RhdGljIHN0cnVjdCBwbGF0 Zm9ybV9kcml2ZXIgenlucW1wX2Rwc3ViX2RyaXZlciA9IHsKPiA+ICsJLnByb2JlCQkJPSB6eW5x bXBfZHBzdWJfcHJvYmUsCj4gPiArCS5yZW1vdmUJCQk9IHp5bnFtcF9kcHN1Yl9yZW1vdmUsCj4g PiArCS5zaHV0ZG93bgkJPSB6eW5xbXBfZHBzdWJfc2h1dGRvd24sCj4gPiArCS5kcml2ZXIJCQk9 IHsKPiA+ICsJCS5uYW1lCQk9ICJ6eW5xbXAtZHBzdWIiLAo+ID4gKwkJLnBtCQk9ICZ6eW5xbXBf ZHBzdWJfcG1fb3BzLAo+ID4gKwkJLm9mX21hdGNoX3RhYmxlCT0genlucW1wX2Rwc3ViX29mX21h dGNoLAo+ID4gKwl9LAo+ID4gK307Cj4gPiArCj4gPiArbW9kdWxlX3BsYXRmb3JtX2RyaXZlcih6 eW5xbXBfZHBzdWJfZHJpdmVyKTsKPiA+ICsKPiA+ICtNT0RVTEVfQVVUSE9SKCJYaWxpbngsIElu Yy4iKTsKPiA+ICtNT0RVTEVfREVTQ1JJUFRJT04oIlp5bnFNUCBEUCBTdWJzeXN0ZW0gRHJpdmVy Iik7Cj4gPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwo+ID4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS94bG54L3p5bnFtcF9kcHN1Yi5oIGIvZHJpdmVycy9ncHUvZHJtL3hsbngvenlu cW1wX2Rwc3ViLmgKPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwMDAw MDAuLjczMmYyOWJkYThkNAo+ID4gLS0tIC9kZXYvbnVsbAo+ID4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL3hsbngvenlucW1wX2Rwc3ViLmgKPiA+IEBAIC0wLDAgKzEsNDkgQEAKPiA+ICsvKiBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwo+ID4gKy8qCj4gPiArICogWnlucU1QIERQ U1VCIFN1YnN5c3RlbSBEcml2ZXIKPiA+ICsgKgo+ID4gKyAqIENvcHlyaWdodCAoQykgMjAxNyAt IDIwMTkgWGlsaW54LCBJbmMuCj4gPiArICoKPiA+ICsgKiBBdXRob3JzOgo+ID4gKyAqIC0gSHl1 biBXb28gS3dvbiA8aHl1bi5rd29uQHhpbGlueC5jb20+Cj4gPiArICogLSBMYXVyZW50IFBpbmNo YXJ0IDxsYXVyZW50LnBpbmNoYXJ0QGlkZWFzb25ib2FyZC5jb20+Cj4gPiArICovCj4gPiArCj4g PiArI2lmbmRlZiBfWllOUU1QX0RQU1VCX0hfCj4gPiArI2RlZmluZSBfWllOUU1QX0RQU1VCX0hf Cj4gPiArCj4gPiArc3RydWN0IGNsazsKPiA+ICtzdHJ1Y3QgZGV2aWNlOwo+ID4gK3N0cnVjdCBk cm1fZGV2aWNlOwo+ID4gK3N0cnVjdCB6eW5xbXBfZGlzcDsKPiA+ICtzdHJ1Y3QgenlucW1wX2Rw Owo+ID4gKwo+ID4gK2VudW0genlucW1wX2Rwc3ViX2Zvcm1hdCB7Cj4gPiArCVpZTlFNUF9EUFNV Ql9GT1JNQVRfUkdCLAo+ID4gKwlaWU5RTVBfRFBTVUJfRk9STUFUX1lDUkNCNDQ0LAo+ID4gKwla WU5RTVBfRFBTVUJfRk9STUFUX1lDUkNCNDIyLAo+ID4gKwlaWU5RTVBfRFBTVUJfRk9STUFUX1lP TkxZLAo+ID4gK307Cj4gPiArCj4gPiArLyoqCj4gPiArICogc3RydWN0IHp5bnFtcF9kcHN1YiAt IFp5bnFNUCBEaXNwbGF5UG9ydCBTdWJzeXN0ZW0KPiA+ICsgKiBAZHJtOiBUaGUgRFJNL0tNUyBk ZXZpY2UKPiA+ICsgKiBAZGV2OiBUaGUgcGh5c2ljYWwgZGV2aWNlCj4gPiArICogQGFwYl9jbGs6 IFRoZSBBUEIgY2xvY2sKPiA+ICsgKiBAZGlzcDogVGhlIGRpc3BsYXkgY29udHJvbGxlcgo+ID4g KyAqIEBkcDogVGhlIERpc3BsYXlQb3J0IGNvbnRyb2xsZXIKPiA+ICsgKiBAZG1hX2FsaWduOiBE TUEgYWxpZ25tZW50IGNvbnN0cmFpbnQgKG11c3QgYmUgYSBwb3dlciBvZiAyKQo+ID4gKyAqLwo+ ID4gK3N0cnVjdCB6eW5xbXBfZHBzdWIgewo+ID4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtOwo+ ID4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4gPiArCj4gPiArCXN0cnVjdCBjbGsgKmFwYl9jbGs7 Cj4gPiArCj4gPiArCXN0cnVjdCB6eW5xbXBfZGlzcCAqZGlzcDsKPiA+ICsJc3RydWN0IHp5bnFt cF9kcCAqZHA7Cj4gPiArCj4gPiArCXVuc2lnbmVkIGludCBkbWFfYWxpZ247Cj4gPiArfTsKPiA+ ICsKPiA+ICsjZW5kaWYgLyogX1pZTlFNUF9EUFNVQl9IXyAqLwoKLS0gClJlZ2FyZHMsCgpMYXVy ZW50IFBpbmNoYXJ0Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9y ZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZl bAo=