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=-20.3 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING,NICE_REPLY_A, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,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 5D4BAC4361B for ; Sat, 12 Dec 2020 02:29:05 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (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 BC70220769 for ; Sat, 12 Dec 2020 02:29:04 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org BC70220769 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=xilinx.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date:Message-ID:References: To:Subject:From:Reply-To:Cc:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=g991Om8E8ycgPm9pSIbecUcAQZQjIJn8ywHY62sJHSI=; b=t1TBhnc7UirY1hQ7PNPNmWjVb Ew04/ZvGRbZ5SZmZkzyxDc69uE9XquWHv9xq8YYJwNlH2CWhfpzpoeS28h7wlKOFJaT9G/yqDao+W xqhyGhJ6nIE8prIb53HXWudkh0PoG3V79hoH53oEcu0uh4HQXguHAcKrVJiLzC6WJbCp7Fr7Xm6gy JVOQEj9v9KeV9e1qQzE4/dQBkgnUSD8k1v6aVkUQqInGIWu+shQFcDBoTqAQjvkbC+ncAK0qn3vsX 5auLEran6EYus2z3jv/QyUQZCe4Iex3vCAz478+V+BWubiuveJY++kGMfDfAQzvow6capqzqATW+m BoZL6nHIw==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1knud2-0005kp-4Q; Sat, 12 Dec 2020 02:27:24 +0000 Received: from mail-eopbgr760057.outbound.protection.outlook.com ([40.107.76.57] helo=NAM02-CY1-obe.outbound.protection.outlook.com) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1knucx-0005k6-54 for linux-arm-kernel@lists.infradead.org; Sat, 12 Dec 2020 02:27:21 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=XEj7519hwl0JVsp9+cUb/LgRIxE4/6Hmmc59dZbaNzNK8VwvdMDLqZM9XzV+11o324c+Z12pU4cuG/f+3L6dCOVr/wNP2l42nzJfYM4NFiwEhl3pqDtDRg3Vk3txA8TUnjS1eqbXsZZG2qpUmXAaiHbTTK8PFjA1wJsHGa1Oa78bmKmP3bPrK+97aYUyMf/gzhFV8njkz+YdnM4aLNG4dP2P3y58hQZjuEFEH5N9wpfVJzFe7sQmIRpU7E932upof0STDjXbYHrLJcdq7FLHGO8fHTw79Id98S+wXq7TJJ8Y0GVAD5tOU7LTqce87HT4QrgkV7r3P2Gfa8jwOqUPSQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=PQ7sURMWzI7FcTuHcLZoj6AkUmkqrnwkHX40HmndKHI=; b=S0Ap5aYoG68jMWeXBlp7QqfVJfbHOOAJ9nQJtaffrNbg2DsjCYRW+P2lX0VN0LG5pkDHpmSBo+BFRcYqPq3RX5veqar6Mlt7uupm2ksqSAVaLZHABWheAdpfsccoqgsyGtCsQRqNuAjqq4E1qBiKhxflK1QykUtLjERSb/39OUjd3QplM841DBzUHheGog+DDJjGNu5/qJ/DDMlmv1QBgt8nzrR5aY6xV8KOBN0shpcVUfRzj7J0VduECOeMZuZKJHgY/YGVYVqYQcF4nLLZwTG8o1cRMifHMHpiarhZQyPUM43nROjd9TaUeJSrph3CxHb2daR0uz+vXk2Zckxw9A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 149.199.62.198) smtp.rcpttodomain=vger.kernel.org smtp.mailfrom=xilinx.com; dmarc=bestguesspass action=none header.from=xilinx.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xilinx.onmicrosoft.com; s=selector2-xilinx-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=PQ7sURMWzI7FcTuHcLZoj6AkUmkqrnwkHX40HmndKHI=; b=eoluRugQd8u7JJ2UokxbH9E7CaJ6V2J8JeBQWd49hhYmTOfpHiUQqqwT1WfyKTyCtUBakC1Ejdat9qFCO8zbRlKQixwH9S263NfRGPj/lnmMV7BA3bsfBycJEVk5BgCvSx6/VI7/lhl9sfs12yAEWxbohGVHXytEO83zw3N1A7Q= Received: from DM5PR16CA0031.namprd16.prod.outlook.com (2603:10b6:4:15::17) by SN6PR02MB5549.namprd02.prod.outlook.com (2603:10b6:805:e4::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3632.18; Sat, 12 Dec 2020 02:27:07 +0000 Received: from CY1NAM02FT053.eop-nam02.prod.protection.outlook.com (2603:10b6:4:15:cafe::d3) by DM5PR16CA0031.outlook.office365.com (2603:10b6:4:15::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3654.12 via Frontend Transport; Sat, 12 Dec 2020 02:27:07 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 149.199.62.198) smtp.mailfrom=xilinx.com; vger.kernel.org; dkim=none (message not signed) header.d=none;vger.kernel.org; dmarc=bestguesspass action=none header.from=xilinx.com; Received-SPF: Pass (protection.outlook.com: domain of xilinx.com designates 149.199.62.198 as permitted sender) receiver=protection.outlook.com; client-ip=149.199.62.198; helo=xsj-pvapexch01.xlnx.xilinx.com; Received: from xsj-pvapexch01.xlnx.xilinx.com (149.199.62.198) by CY1NAM02FT053.mail.protection.outlook.com (10.152.74.165) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.3654.12 via Frontend Transport; Sat, 12 Dec 2020 02:27:06 +0000 Received: from xsj-pvapexch01.xlnx.xilinx.com (172.19.86.40) by xsj-pvapexch01.xlnx.xilinx.com (172.19.86.40) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1913.5; Fri, 11 Dec 2020 18:27:06 -0800 Received: from smtp.xilinx.com (172.19.127.96) by xsj-pvapexch01.xlnx.xilinx.com (172.19.86.40) with Microsoft SMTP Server id 15.1.1913.5 via Frontend Transport; Fri, 11 Dec 2020 18:27:06 -0800 Received: from [10.23.123.84] (port=55356) by smtp.xilinx.com with esmtp (Exim 4.90) (envelope-from ) id 1knuck-0006Vt-0D; Fri, 11 Dec 2020 18:27:06 -0800 From: Jiaying Liang Subject: Re: [PATCH 2/9] misc: Add Xilinx AI engine device driver To: Jiaying Liang , Dave Airlie , Nicolas Dufresne , , , , , , , , , , , , , , Hyun Kwon , , , , , References: <1605686780-17886-1-git-send-email-wendy.liang@xilinx.com> <1605686780-17886-3-git-send-email-wendy.liang@xilinx.com> <5c310d188d2a75480452f5b5a9310e8e049f20f6.camel@ndufresne.ca> <20201209124712.GQ401619@phenom.ffwll.local> Message-ID: Date: Fri, 11 Dec 2020 18:27:05 -0800 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Thunderbird/78.5.1 MIME-Version: 1.0 In-Reply-To: <20201209124712.GQ401619@phenom.ffwll.local> Content-Language: en-US X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: c7b5a527-5cea-4433-10bd-08d89e456bad X-MS-TrafficTypeDiagnostic: SN6PR02MB5549: X-Microsoft-Antispam-PRVS: X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-MS-Oob-TLC-OOBClassifiers: OLM:9508; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: RSp5dqFYDwgZEG6qtXdeI6h9IfcKcdtYGHKyvg2nDOc5zZXcvO4wc+1n3eoVAH63NmC//hnDnToEC2MGWTpnW9RSVju6V/l4stOTFvgUAI+joOKq8eSdNqIBJghiYFhUHaIhykl7uclAlFkuZv3errFE7mS2MwZcSwCYXKhnhO734U8Onpf1szSTtv2OR3VUt95I6oI8QM5QxXwKKRY8rThbnjqWc0pSuwb4JK2DVVFIpuVyn9WIjyDdkC/55WsU3cpxm+48enM6ihtDfPthAKbBq0Ty8By1UPDfpu2R8L/QO9j/CWmXukcEzWbGTXhXPL5QjJCRf6+vaymVJK6S6p3IXk7ocn6ODR6D3mksr55TgsjXzH/CkvBP0LCJEBUVBR0RsclSgLzsjpv4o2NWJex66N//meC3K5qLeFuqX1ApFWM61mEY2PPB/DNsmZhuiLunVhm84MFTp5SSU5LpLPlAIfKL3zqLl7/yRB5WiOBVBKH7w8qN5CQzLG/1yPuV+d88d96ocCWQ+7KzPs6EemplmTOrR0UYgnXC/tfuVFaFfOAodRCAv9wjLhbAwVt/+n4+rHAKOhBXVSG9QA+QjQ== X-Forefront-Antispam-Report: CIP:149.199.62.198; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:xsj-pvapexch01.xlnx.xilinx.com; PTR:unknown-62-198.xilinx.com; CAT:NONE; SFS:(4636009)(376002)(346002)(136003)(46966005)(83380400001)(26005)(8676002)(8936002)(7636003)(66574015)(31696002)(5660300002)(336012)(30864003)(7416002)(2616005)(921005)(70586007)(508600001)(9786002)(36906005)(82310400003)(47076004)(53546011)(966005)(426003)(110136005)(2906002)(31686004)(36756003)(70206006)(186003)(356005)(50156003)(2101003)(43740500002)(83996005)(559001)(579004); DIR:OUT; SFP:1101; X-OriginatorOrg: xilinx.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Dec 2020 02:27:06.8721 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: c7b5a527-5cea-4433-10bd-08d89e456bad X-MS-Exchange-CrossTenant-Id: 657af505-d5df-48d0-8300-c31994686c5c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=657af505-d5df-48d0-8300-c31994686c5c; Ip=[149.199.62.198]; Helo=[xsj-pvapexch01.xlnx.xilinx.com] X-MS-Exchange-CrossTenant-AuthSource: CY1NAM02FT053.eop-nam02.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR02MB5549 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20201211_212719_433634_C6E5E61A X-CRM114-Status: GOOD ( 36.13 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Ck9uIDEyLzkvMjAgNDo0NyBBTSwgRGFuaWVsIFZldHRlciB3cm90ZToKPiBPbiBUdWUsIERlYyAw OCwgMjAyMCBhdCAxMTo1NDo1N0FNIC0wODAwLCBKaWF5aW5nIExpYW5nIHdyb3RlOgo+PiBPbiAx Mi84LzIwIDk6MTIgQU0sIE5pY29sYXMgRHVmcmVzbmUgd3JvdGU6Cj4+PiBMZSBtZXJjcmVkaSAx OCBub3ZlbWJyZSAyMDIwIMOgIDAwOjA2IC0wODAwLCBXZW5keSBMaWFuZyBhIMOpY3JpdMKgOgo+ Pj4+IENyZWF0ZSBBSSBlbmdpbmUgZGV2aWNlL3BhcnRpdGlvbiBoaWVyYXJjaGljYWwgc3RydWN0 dXJlLgo+Pj4+Cj4+Pj4gRWFjaCBBSSBlbmdpbmUgZGV2aWNlIGNhbiBoYXZlIG11bHRpcGxlIGxv Z2ljYWwgcGFydGl0aW9ucyhncm91cHMgb2YgQUkKPj4+PiBlbmdpbmUgdGlsZXMpLiBFYWNoIHBh cnRpdGlvbiBpcyBjb2x1bW4gYmFzZWQgYW5kIGhhcyBpdHMgb3duIG5vZGUgSUQKPj4+PiBpbiB0 aGUgc3lzdGVtLiBBSSBlbmdpbmUgZGV2aWNlIGRyaXZlciBtYW5hZ2VzIGl0cyBwYXJ0aXRpb25z Lgo+Pj4+Cj4+Pj4gQXBwbGljYXRpb25zIGNhbiBhY2Nlc3MgQUkgZW5naW5lIHBhcnRpdGlvbiB0 aHJvdWdoIHRoZSBBSSBlbmdpbmUKPj4+PiBwYXJ0aXRpb24gZHJpdmVyIGluc3RhbmNlLiBBSSBl bmdpbmUgcmVnaXN0ZXJzIHdyaXRlIGlzIG1vdmVkIHRvIGtlcm5lbAo+Pj4+IGFzIHRoZXJlIGFy ZSByZWdpc3RlcnMgaW4gdGhlIEFJIGVuZ2luZSBhcnJheSBuZWVkcyBwcml2aWxlZ2UKPj4+PiBw ZXJtaXNzaW9uLgo+Pj4gSGkgdGhlcmUsIGl0J3MgbmljZSB0byBzZWUgYW4gZWZmb3J0IHRvIHVw c3RyZWFtIGFuIEFJIGRyaXZlci4gSSdtIGEgbGl0dGxlCj4+PiB3b3JyaWVkIHRoaXMgZHJpdmVy IGlzIG5vdCBvYnZpb3VzIHRvIHVzZSBmcm9tIGl0J3Mgc291cmNlIGNvZGUgaXRzZWxmLiBTbyB5 b3UKPj4+IGhhdmUgcmVmZXJlbmNlIHRvIHNvbWUgT3BlbiBTb3VyY2UgY29kZSB0aGF0IGRlbW9u c3RyYXRlIGl0J3MgdXNhZ2UgPwo+PiBXZSBoYXZlIEFJIGVuZ2luZSBsaWJyYXJ5IHdoaWNoIHBy b3ZpZGVzIGEgY3Jvc3MgcGxhdGZvcm1zIEFQSXMgZm9yIG90aGVyCj4+Cj4+IGxpYnJhcmllcy9h cHBsaWNhdGlvbiB0byB1c2UgdGhlIGhhcmR3YXJlLiBIZXJlIGlzIHRoZSBzb3VyY2UgY29kZToK Pj4KPj4gaHR0cHM6Ly9naXRodWIuY29tL1hpbGlueC9lbWJlZGRlZHN3L3RyZWUvbWFzdGVyL1hp bGlueFByb2Nlc3NvcklQTGliL2RyaXZlcnMvYWllbmdpbmV2Mi9zcmMKPj4KPj4gVGhlIGNyb3Nz IHBsYXRmb3JtcyBBSSBlbmdpbmUgbGlicmFyeSBydW5zIGluIExJbnV4IHVzZXJzcGFjZSBpdCBk ZWZpbmVzIGhvdwo+PiB0bwo+Pgo+PiBjb25maWd1cmUsIGFuZCB0aGUga2VybmVsIGRyaXZlciBj b250cm9scyBpZiB3aGF0IGNhbiBiZSBhY2Nlc3MgYW5kIG1hbmFnZQo+PiBlcnJvcnMgZnJvbSBk ZXZpY2UuCj4gU28gSSBraW5kYSBpZ25vcmVkIHRoaXMgZHJpdmVyIHN1Ym1pc3Npb24gYmVjYXVz ZSBpbiB0aGUgcGFzdCBhbGwgdGhlc2UgQUkKPiBkcml2ZXJzIGhhZCBhdCBiZXN0IGluY29tcGxl dGUgb3BlbiBzb3VyY2UgKHVzdWFsbHkgdGhlIGNvbXBpbGVyIGlzCj4gY2xvc2VkLCBvZnRlbiBh bHNvIGxhcmdlIHBhcnRzIG9mIHRoZSBydW50aW1lKS4gSSB0aGluayB5b3VycyB3b3VsZCBiZSB0 aGUKPiBmaXJzdCB0aGF0IGJyZWFrcyB0aGlzIHRyZW5kLCBpcyB0aGF0IHJlYWxseSB0aGUgY2Fz ZT8gSS5lLiBJIGNvdWxkIG1ha2UKPiBmdWxsIHVzZSBvZiB0aGlzIGh3IHdpdGhvdXQgYW55IGNs b3NlZCBzb3VyY2UgYml0cyB0byBydW4gRE5OIHdvcmtsb2Fkcwo+IGFuZCB0aGluZ3MgbGlrZSB0 aGF0PwpBSSBlbmdpbmUgY2FuIGJlIHVzZWQgZm9yIHNpZ25hbGluZyBwcm9jZXNzaW5nIG9yIGhp Z2ggcGVyZm9ybWFuY2UgCmNvbXB1dGluZwoKdGhlIGtlcm5lbCBkcml2ZXIgd29ya3Mgb24gdGhl IEFJIGVuZ2luZSBzb2Z0d2FyZSBsaWJyYXJ5IHdoaWNoIEkgCm1lbnRpb25lZCBhYm92ZSwKCndo aWNoIHdpbGwgYmUgdXNlZCBieSBYaWxpbnggcnVudGltZTogCmh0dHBzOi8veGlsaW54LmdpdGh1 Yi5pby9YUlQvMjAyMC4yL2h0bWwvaW5kZXguaHRtbAoKWGlsaW54IHJ1bnRpbWUgaXMgYSBsYXll ciBmb3IgYWNjZWxlcmF0aW9uIGxpYnJhcmllcyBvciBhcHBsaWNhdGlvbnMgdG8gCnVzZSBYaWxp bnggYWNjZWxlcmF0b3JzLgoKZS5nLiBpdCBoYXMgT3BlbkNMIGltcGxlbWVudGF0aW9uCj4gSWYg dGhhdCdzIHRoZSBjYXNlIHRoZW4gSSB0aGluayB0aGVyZSdzIG5vdGhpbmcgc3RvcHBpbmcgdXMg ZnJvbSBkb2luZyB0aGUKPiByaWdodCB0aGluZyBhbmQgbWVyZ2luZyB0aGlzIGRyaXZlciBpbnRv IHRoZSByaWdodCBzdWJzeXN0ZW06IFRoZQo+IHN1YnN5c3RlbSBmb3IgYWNjZWxlcmF0b3JzIHdo aWNoIHRoZWlyIG93biBtZW1vcnkgYW5kIHdobyB3YW50IGRtYS1idWYKPiBpbnRlZ3JhdGlvbiBp cyBkcml2ZXJzL2dwdSwgbm90IGRyaXZlcnMvbWlzYy4KClRoZSBBSSBlbmdpbmUga2VybmVsIGRy aXZlciBpcyB1c2VkIGZvciBkZXZpY2UgcnVudGltZSBjb25maWd1cmF0aW9uIHVwZGF0ZSwKCmFu ZCBydW50aW1lIG1vbml0b3JpbmcsIHN1Y2ggYXMgYXN5bmMgZXJyb3JzIGRldGVjdGlvbi4gVGhl IGJ1ZmZlciAKbWFuYWdlbWVudAoKaXMgb3V0IG9mIHRoZSBBSSBlbmdpbmUgZHJpdmVyLCBidXQg aXQgaXMgY292ZXJlZCBieSBYaWxpbnggcnVudGltZToKCmh0dHBzOi8vZ2l0aHViLmNvbS9YaWxp bngvWFJUL3RyZWUvbWFzdGVyL3NyYy9ydW50aW1lX3NyYy9jb3JlL2VkZ2UvZHJtL3pvY2wKCkFJ IGVuZ2luZSBkcml2ZXIgaW1wb3J0cyB0aGUgRE1BIGJ1Zi4KCgpUaGUgQUkgZW5naW5lIGRldmlj ZSBpcyBxdWl0ZSBkaWZmZXJlbnQgdG8gdGhlIEdQVSBkZXZpY2VzLiBUaGUgQUkgZW5naW5lCgpv cGVyYXRpb25zIGFyZSBzdGlsbCBuZWVkcyBkcml2ZXIgc3BlY2lmaWMgaW9jdGxzLgoKV2UgaGF2 ZSBtb3JlIHRoYW4gMTAwIGNvcmVzIHRpbGVzLCBlYWNoIHRpbGVzIGZ1bmN0aW9ucyBjYW4gYmUg ZGVmaW5lZCAKYXQgY29tcGlsYXRpb24KCnRpbWUsIGF0IHJ1bnRpbWUsIHdlIGxvYWQgdGhlIGNv bmZpZ3VyYXRpb24gKGFwcGxpY2F0aW9uIGRlZmluZWQgSS9PIApjb21tYW5kcykgdG8KCmNvbmZp Z3VyZSBlYWNoIHRpbGVzIHJlZ2lzdGVycyB0byBzZXQgdXAgcm91dGluZywgc2V0IHVwIERNQXMs IGNvbmZpZ3VyZSAKbG9jYWwgbWVtb3JpZXMsCgphbmQgZW5hYmxlIHRoZSB0aWxlcy4KCgpBcyB0 aGUgQUkgZW5naW5lIGRldmljZSBoYXJkd2FyZSBpcyBkaWZmZXJlbnQgdG8gdGhlIEdQVXMsCgp3 ZSBhcmUgbm90IGFibGUgdG8gbWFrZSB1c2Ugb2YgZnVuY3Rpb25zIGFic3RyYWN0ZWQgZm9yIEdQ VXMsIGFuZCB3ZSAKZG9uJ3QgbWFuYWdlIHRoZQoKYnVmZmVycyBpbiB0aGlzIGRyaXZlci4gSSBh bSBub3Qgc3VyZSBpZiBpdCBpcyBvayB0byBhZGQgdGhlIGRyaXZlciB0byAKZHJpdmVycy9ncHUg YnV0IG5vdAoKdXNpbmcgYWJzdHJhY3Rpb25zIGZyb20gdGhlIEdQVSBhYnN0cmFjdGlvbi4KCgpU aGVyZSBpcyBhbm90aGVyIHJlcGx5IHRvIHRoZSBwYXRjaCBzZXJpZXMgdG8gYXNrIGZvciBjbGFy aWZpY2F0aW9uIG9uIAp0aGUgb3ZlcnZpZXcgb2YgdGhlCgpkcml2ZXIsIGFuZCBJIGhhZCBzb21l IGRpc2N1c3Npb25zIHdpdGggb3RoZXIgdGVhbSBtZW1iZXJzLiBJIHdpbGwgcmVwbHkgCnRvIHRo YXQgZW1haWwKCnRvIHByb3ZpZGUgbW9yZSBkZXRhaWxzIG9uIG92ZXJhbGwgaG93IHRoaXMgZHJp dmVyIGlzIHVzZWQuCgpBbnkgc3VnZ2VzdGlvbnMgb24gaG93IHRvIGZpdCB0aGUgZHJpdmVyIGlu IHRoZSBkcml2ZXJzL2dwdSBvciBvdGhlciAKZHJpdmVycyBmcmFtZXdvcmsKCndpbGwgYmUgbXVj aCBhcHByZWNpYXRlZC4KCgpUaGFua3MsCgpXZW5keQoKPiBBcG9sb2dpZXMgdGhhdCBJJ20ganVt cGluZyB3aXRoIHRoZSByZWFsbHkgYmlnIGFyY2ggcmV2aWV3IHdoZW4gdjMgaXMKPiBhbHJlYWR5 IG9uIHRoZSBsaXN0LiBCdXQgbGFzdCBmZXcgdGltZXMgbWVyZ2luZyBBSSBkcml2ZXJzIHRvIGRy aXZlcnMvbWlzYwo+IHdhcyByZWFsbHkganVzdCBhIHdheSB0byBhdm9pZCB0aGUgbWVyZ2UgY3Jp dGVyaWEgZm9yIGRyaXZlcnMvZ3B1Cj4gYWNjZWxlcmF0aW9uIGRyaXZlcnMuIEknZCBsb3ZlIHRv IGxhbmQgdGhlIGZpcnN0IHJlYWwgb3BlbiBBSSBkcml2ZXIgaW4KPiB1cHN0cmVhbSwgcHJvcGVy bHkuCj4KPiBDaGVlcnMsIERhbmllbAo+Cj4KPgo+PiBCZXN0IFJlZ2FyZHMsCj4+Cj4+IFdlbmR5 Cj4+Cj4+Cj4+Pj4gU2lnbmVkLW9mZi1ieTogV2VuZHkgTGlhbmc8d2VuZHkubGlhbmdAeGlsaW54 LmNvbT4KPj4+PiBTaWduZWQtb2ZmLWJ5OiBIeXVuIEt3b248aHl1bi5rd29uQHhpbGlueC5jb20+ Cj4+Pj4gLS0tCj4+Pj4gICDCoE1BSU5UQUlORVJTwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKg IDggKwo+Pj4+ICAgwqBkcml2ZXJzL21pc2MvS2NvbmZpZ8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqAgMTIgKwo+Pj4+ICAgwqBk cml2ZXJzL21pc2MvTWFrZWZpbGXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgIDEgKwo+Pj4+ICAgwqBkcml2ZXJzL21pc2MveGls aW54LWFpLWVuZ2luZS9NYWtlZmlsZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqAgMTEgKwo+ Pj4+ICAgwqBkcml2ZXJzL21pc2MveGlsaW54LWFpLWVuZ2luZS9haS1lbmdpbmUtYWllLmPCoMKg wqDCoMKgIHwgMTE1ICsrKysrCj4+Pj4gICDCoGRyaXZlcnMvbWlzYy94aWxpbngtYWktZW5naW5l L2FpLWVuZ2luZS1kZXYuY8KgwqDCoMKgwqAgfCA0NDggKysrKysrKysrKysrKysrKysrCj4+Pj4g ICDCoGRyaXZlcnMvbWlzYy94aWxpbngtYWktZW5naW5lL2FpLWVuZ2luZS1pbnRlcm5hbC5oIHwg MjI2ICsrKysrKysrKysKPj4+PiAgIMKgZHJpdmVycy9taXNjL3hpbGlueC1haS1lbmdpbmUvYWkt ZW5naW5lLXBhcnQuY8KgwqDCoMKgIHwgNDk4Cj4+Pj4gKysrKysrKysrKysrKysrKysrKysrCj4+ Pj4gICDCoGRyaXZlcnMvbWlzYy94aWxpbngtYWktZW5naW5lL2FpLWVuZ2luZS1yZXMuY8KgwqDC oMKgwqAgfCAxMTQgKysrKysKPj4+PiAgIMKgaW5jbHVkZS91YXBpL2xpbnV4L3hsbngtYWktZW5n aW5lLmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfCAxMDcgKysrKysKPj4+PiAgIMKg MTAgZmlsZXMgY2hhbmdlZCwgMTU0MCBpbnNlcnRpb25zKCspCj4+Pj4gICDCoGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL21pc2MveGlsaW54LWFpLWVuZ2luZS9NYWtlZmlsZQo+Pj4+ICAgwqBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9taXNjL3hpbGlueC1haS1lbmdpbmUvYWktZW5naW5l LWFpZS5jCj4+Pj4gICDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL21pc2MveGlsaW54LWFp LWVuZ2luZS9haS1lbmdpbmUtZGV2LmMKPj4+PiAgIMKgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvbWlzYy94aWxpbngtYWktZW5naW5lL2FpLWVuZ2luZS1pbnRlcm5hbC5oCj4+Pj4gICDCoGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL21pc2MveGlsaW54LWFpLWVuZ2luZS9haS1lbmdpbmUt cGFydC5jCj4+Pj4gICDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL21pc2MveGlsaW54LWFp LWVuZ2luZS9haS1lbmdpbmUtcmVzLmMKPj4+PiAgIMKgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1 ZGUvdWFwaS9saW51eC94bG54LWFpLWVuZ2luZS5oCj4+Pj4KPj4+PiBkaWZmIC0tZ2l0IGEvTUFJ TlRBSU5FUlMgYi9NQUlOVEFJTkVSUwo+Pj4+IGluZGV4IDVjYzU5NWEuLjQwZTMzNTEgMTAwNjQ0 Cj4+Pj4gLS0tIGEvTUFJTlRBSU5FUlMKPj4+PiArKysgYi9NQUlOVEFJTkVSUwo+Pj4+IEBAIC0x OTI4Myw2ICsxOTI4MywxNCBAQCBUOsKgwqDCoMKgwqBnaXRodHRwczovL2dpdGh1Yi5jb20vWGls aW54L2xpbnV4LXhsbnguZ2l0Cj4+Pj4gICDCoEY6wqDCoMKgwqDCoERvY3VtZW50YXRpb24vZGV2 aWNldHJlZS9iaW5kaW5ncy9waHkveGxueCx6eW5xbXAtcHNndHIueWFtbAo+Pj4+ICAgwqBGOsKg wqDCoMKgwqBkcml2ZXJzL3BoeS94aWxpbngvcGh5LXp5bnFtcC5jCj4+Pj4gK1hJTElOWCBBSSBF TkdJTkUgRFJJVkVSCj4+Pj4gK006wqDCoMKgwqDCoFdlbmR5IExpYW5nPHdlbmR5LmxpYW5nQHhp bGlueC5jb20+Cj4+Pj4gK1M6wqDCoMKgwqDCoFN1cHBvcnRlZAo+Pj4+ICtGOsKgwqDCoMKgwqBE b2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc29jL3hpbGlueC94bG54LGFpLWVuZ2lu ZS55YW1sCj4+Pj4gK0Y6wqDCoMKgwqDCoGRyaXZlcnMvbWlzYy94aWxpbngtYWktZW5naW5lLwo+ Pj4+ICtGOsKgwqDCoMKgwqBpbmNsdWRlL2xpbnV4L3hsbngtYWktZW5naW5lLmgKPj4+PiArRjrC oMKgwqDCoMKgaW5jbHVkZS91YXBpL2xpbnV4L3hsbngtYWktZW5naW5lLmgKPj4+PiArCj4+Pj4g ICDCoFhJTExZQlVTIERSSVZFUgo+Pj4+ICAgwqBNOsKgwqDCoMKgwqBFbGkgQmlsbGF1ZXI8ZWxp LmJpbGxhdWVyQGdtYWlsLmNvbT4KPj4+PiAgIMKgTDpsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwu b3JnCj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9LY29uZmlnIGIvZHJpdmVycy9taXNj L0tjb25maWcKPj4+PiBpbmRleCBmYWZhOGIwLi4wYjhjZTRkIDEwMDY0NAo+Pj4+IC0tLSBhL2Ry aXZlcnMvbWlzYy9LY29uZmlnCj4+Pj4gKysrIGIvZHJpdmVycy9taXNjL0tjb25maWcKPj4+PiBA QCAtNDQ0LDYgKzQ0NCwxOCBAQCBjb25maWcgWElMSU5YX1NERkVDCj4+Pj4gICDCoMKgwqDCoMKg wqDCoMKgwqAgSWYgdW5zdXJlLCBzYXkgTi4KPj4+PiArY29uZmlnIFhJTElOWF9BSUUKPj4+PiAr wqDCoMKgwqDCoMKgwqB0cmlzdGF0ZSAiWGlsaW54IEFJIGVuZ2luZSIKPj4+PiArwqDCoMKgwqDC oMKgwqBkZXBlbmRzIG9uIEFSTTY0IHx8IENPTVBJTEVfVEVTVAo+Pj4+ICvCoMKgwqDCoMKgwqDC oGhlbHAKPj4+PiArwqDCoMKgwqDCoMKgwqDCoCBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQg Zm9yIHRoZSBYaWxpbnggQUkgZW5naW5lIGRyaXZlci4KPj4+PiArwqDCoMKgwqDCoMKgwqDCoCBP bmUgWGlsaW54IEFJIGVuZ2luZSBkZXZpY2UgY2FuIGhhdmUgbXVsdGlwbGUgcGFydGl0aW9ucyAo Z3JvdXBzIG9mCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqAgQUkgZW5naW5lIHRpbGVzKS4gWGlsaW54 IEFJIGVuZ2luZSBkZXZpY2UgZHJpdmVyIGluc3RhbmNlIG1hbmFnZXMKPj4+PiArwqDCoMKgwqDC oMKgwqDCoCBBSSBlbmdpbmUgcGFydGl0aW9ucy4gVXNlciBhcHBsaWNhdGlvbiBhY2Nlc3MgaXRz IHBhcnRpdGlvbnMgdGhyb3VnaAo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgIEFJIGVuZ2luZSBwYXJ0 aXRpb24gaW5zdGFuY2UgZmlsZSBvcGVyYXRpb25zLgo+Pj4+ICsKPj4+PiArwqDCoMKgwqDCoMKg wqDCoCBJZiB1bnN1cmUsIHNheSBOCj4+Pj4gKwo+Pj4+ICAgwqBjb25maWcgTUlTQ19SVFNYCj4+ Pj4gICDCoMKgwqDCoMKgwqDCoMKgdHJpc3RhdGUKPj4+PiAgIMKgwqDCoMKgwqDCoMKgwqBkZWZh dWx0IE1JU0NfUlRTWF9QQ0kgfHwgTUlTQ19SVFNYX1VTQgo+Pj4+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL21pc2MvTWFrZWZpbGUgYi9kcml2ZXJzL21pc2MvTWFrZWZpbGUKPj4+PiBpbmRleCBkMjMy MzFlLi4yMTc2YjE4IDEwMDY0NAo+Pj4+IC0tLSBhL2RyaXZlcnMvbWlzYy9NYWtlZmlsZQo+Pj4+ ICsrKyBiL2RyaXZlcnMvbWlzYy9NYWtlZmlsZQo+Pj4+IEBAIC01NywzICs1Nyw0IEBAIG9iai0k KENPTkZJR19IQUJBTkFfQUkpwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKz0gaGFiYW5h bGFicy8KPj4+PiAgIMKgb2JqLSQoQ09ORklHX1VBQ0NFKcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCs9IHVhY2NlLwo+Pj4+ICAgwqBvYmotJChDT05GSUdfWElMSU5YX1NERkVDKcKgwqDCoMKgwqAr PSB4aWxpbnhfc2RmZWMubwo+Pj4+ICAgwqBvYmotJChDT05GSUdfSElTSV9ISUtFWV9VU0IpwqDC oMKgKz0gaGlzaV9oaWtleV91c2Iubwo+Pj4+ICtvYmotJChDT05GSUdfWElMSU5YX0FJRSnCoMKg wqDCoMKgwqDCoCs9IHhpbGlueC1haS1lbmdpbmUvCj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv bWlzYy94aWxpbngtYWktZW5naW5lL01ha2VmaWxlIGIvZHJpdmVycy9taXNjL3hpbGlueC1haS0K Pj4+PiBlbmdpbmUvTWFrZWZpbGUKPj4+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+Pj4+IGluZGV4 IDAwMDAwMDAuLjc4MjdhMGEKPj4+PiAtLS0gL2Rldi9udWxsCj4+Pj4gKysrIGIvZHJpdmVycy9t aXNjL3hpbGlueC1haS1lbmdpbmUvTWFrZWZpbGUKPj4+PiBAQCAtMCwwICsxLDExIEBACj4+Pj4g KyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQo+Pj4+ICsjCj4+Pj4gKyMg TWFrZWZpbGUgZm9yIFhpbGlueCBBSSBlbmdpbmUgZGV2aWNlIGRyaXZlcgo+Pj4+ICsjCj4+Pj4g Kwo+Pj4+ICtvYmotJChDT05GSUdfWElMSU5YX0FJRSnCoMKgwqDCoMKgwqDCoCs9IHhpbGlueC1h aWUubwo+Pj4+ICsKPj4+PiAreGlsaW54LWFpZS0kKENPTkZJR19YSUxJTlhfQUlFKSA6PSBhaS1l bmdpbmUtYWllLm8gXAo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYWktZW5naW5lLWRldi5vIFwKPj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGFpLWVuZ2luZS1wYXJ0Lm8gXAo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYWktZW5naW5lLXJlcy5v Cj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy94aWxpbngtYWktZW5naW5lL2FpLWVuZ2lu ZS1haWUuYwo+Pj4+IGIvZHJpdmVycy9taXNjL3hpbGlueC1haS1lbmdpbmUvYWktZW5naW5lLWFp ZS5jCj4+Pj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4+PiBpbmRleCAwMDAwMDAwLi4zMTkyNjBm Cj4+Pj4gLS0tIC9kZXYvbnVsbAo+Pj4+ICsrKyBiL2RyaXZlcnMvbWlzYy94aWxpbngtYWktZW5n aW5lL2FpLWVuZ2luZS1haWUuYwo+Pj4+IEBAIC0wLDAgKzEsMTE1IEBACj4+Pj4gKy8vIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4+Pj4gKy8qCj4+Pj4gKyAqIFhpbGlueCBBSSBF bmdpbmUgZHJpdmVyIEFJRSBkZXZpY2Ugc3BlY2lmaWMgaW1wbGVtZW50YXRpb24KPj4+PiArICoK Pj4+PiArICogQ29weXJpZ2h0IChDKSAyMDIwIFhpbGlueCwgSW5jLgo+Pj4+ICsgKi8KPj4+PiAr Cj4+Pj4gKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Cj4+Pj4gKwo+Pj4+ICsjaW5jbHVkZSAiYWkt ZW5naW5lLWludGVybmFsLmgiCj4+Pj4gKwo+Pj4+ICsjZGVmaW5lIEFJRV9BUlJBWV9TSElGVMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMzBVCj4+Pj4gKyNkZWZpbmUgQUlFX0NPTF9T SElGVMKgwqDCoMKgwqDCoMKgwqDCoMKgMjNVCj4+Pj4gKyNkZWZpbmUgQUlFX1JPV19TSElGVMKg wqDCoMKgwqDCoMKgwqDCoMKgMThVCj4+Pj4gKwo+Pj4+ICsvKgo+Pj4+ICsgKiBSZWdpc3RlcnMg b2Zmc2V0cwo+Pj4+ICsgKi8KPj4+PiArI2RlZmluZSBBSUVfU0hJTU5PQ19MMklOVFJfTUFTS19S RUdPRkbCoMKgwqDCoMKgwqDCoMKgwqAweDAwMDE1MDAwVQo+Pj4+ICsjZGVmaW5lIEFJRV9TSElN Tk9DX0wySU5UUl9JTlRSX1JFR09GRsKgwqDCoMKgwqDCoMKgwqDCoDB4MDAwMTUwMTBVCj4+Pj4g KyNkZWZpbmUgQUlFX1NISU1OT0NfRE1BX0JEMF9BRERSTE9XX1JFR09GRsKgwqDCoMKgwqAweDAw MDFkMDAwVQo+Pj4+ICsjZGVmaW5lIEFJRV9TSElNTk9DX0RNQV9CRDE1X1BBQ0tFVF9SRUdPRkbC oMKgwqDCoMKgMHgwMDAxZDEzY1UKPj4+PiArI2RlZmluZSBBSUVfU0hJTU5PQ19BWElNTV9SRUdP RkbCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDAwMDFlMDIwVQo+Pj4+ICsjZGVmaW5l IEFJRV9TSElNUExfTDFJTlRSX01BU0tfQV9SRUdPRkbCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoDB4MDAwMzUwMDBVCj4+Pj4gKyNkZWZpbmUgQUlFX1NISU1QTF9MMUlOVFJfQkxPQ0tf Tk9SVEhfQl9SRUdPRkbCoDB4MDAwMzUwNTBVCj4+Pj4gKyNkZWZpbmUgQUlFX1NISU1QTF9DTEtD TlRSX1JFR09GRsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDAwMDM2MDQwVQo+Pj4+ICsj ZGVmaW5lIEFJRV9TSElNUExfUkVTRVRfUkVHT0ZGwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgwMDAzNjA0Y1UKPj4+PiArI2RlZmluZSBBSUVfVElMRV9D T1JFX0NMS0NOVFJfUkVHT0ZGwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MDAwMzYwNDBVCj4+Pj4g Kwo+Pj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGFpZV90aWxlX3JlZ3MgYWllX2tlcm5lbF9yZWdz W10gPSB7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgLyogU0hJTSBBWEkgTU0gQ29uZmlnICovCj4+Pj4g K8KgwqDCoMKgwqDCoMKgey5hdHRyaWJ1dGUgPSBBSUVfVElMRV9UWVBFX1NISU1OT0MgPDwgQUlF X1JFR1NfQVRUUl9USUxFX1RZUEVfU0hJRlQsCj4+Pj4gK8KgwqDCoMKgwqDCoMKgIC5zb2ZmID0g QUlFX1NISU1OT0NfQVhJTU1fUkVHT0ZGLAo+Pj4+ICvCoMKgwqDCoMKgwqDCoCAuZW9mZiA9IEFJ RV9TSElNTk9DX0FYSU1NX1JFR09GRiwKPj4+PiArwqDCoMKgwqDCoMKgwqB9LAo+Pj4+ICvCoMKg wqDCoMKgwqDCoC8qIFNISU0gRE1BIEFERFJFU1MgcmFuZ2UgKi8KPj4+PiArwqDCoMKgwqDCoMKg wqB7LmF0dHJpYnV0ZSA9IEFJRV9USUxFX1RZUEVfU0hJTU5PQyA8PCBBSUVfUkVHU19BVFRSX1RJ TEVfVFlQRV9TSElGVCwKPj4+PiArwqDCoMKgwqDCoMKgwqAgLnNvZmYgPSBBSUVfU0hJTU5PQ19E TUFfQkQwX0FERFJMT1dfUkVHT0ZGLAo+Pj4+ICvCoMKgwqDCoMKgwqDCoCAuZW9mZiA9IEFJRV9T SElNTk9DX0RNQV9CRDE1X1BBQ0tFVF9SRUdPRkYsCj4+Pj4gK8KgwqDCoMKgwqDCoMKgfSwKPj4+ PiArwqDCoMKgwqDCoMKgwqAvKiBTSElNIDJuZCBsZXZlbCBpbnRlcnJ1cHQgY29udHJvbGxlciAq Lwo+Pj4+ICvCoMKgwqDCoMKgwqDCoHsuYXR0cmlidXRlID0gQUlFX1RJTEVfVFlQRV9TSElNTk9D IDw8IEFJRV9SRUdTX0FUVFJfVElMRV9UWVBFX1NISUZULAo+Pj4+ICvCoMKgwqDCoMKgwqDCoCAu c29mZiA9IEFJRV9TSElNTk9DX0wySU5UUl9NQVNLX1JFR09GRiwKPj4+PiArwqDCoMKgwqDCoMKg wqAgLmVvZmYgPSBBSUVfU0hJTU5PQ19MMklOVFJfSU5UUl9SRUdPRkYsCj4+Pj4gK8KgwqDCoMKg wqDCoMKgfSwKPj4+PiArwqDCoMKgwqDCoMKgwqAvKiBTSElNIDFzdCBsZXZlbCBpbnRlcnJ1cHQg Y29udHJvbGxlciAqLwo+Pj4+ICvCoMKgwqDCoMKgwqDCoHsuYXR0cmlidXRlID0gKEFJRV9USUxF X1RZUEVfU0hJTVBMIHwgQUlFX1RJTEVfVFlQRV9TSElNTk9DKSA8PAo+Pj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEFJRV9SRUdTX0FUVFJfVElMRV9UWVBFX1NI SUZULAo+Pj4+ICvCoMKgwqDCoMKgwqDCoCAuc29mZiA9IEFJRV9TSElNUExfTDFJTlRSX01BU0tf QV9SRUdPRkYsCj4+Pj4gK8KgwqDCoMKgwqDCoMKgIC5lb2ZmID0gQUlFX1NISU1QTF9MMUlOVFJf QkxPQ0tfTk9SVEhfQl9SRUdPRkYsCj4+Pj4gK8KgwqDCoMKgwqDCoMKgfSwKPj4+PiArwqDCoMKg wqDCoMKgwqAvKiBTSElNIHJlc2V0IEVuYWJsZSAqLwo+Pj4+ICvCoMKgwqDCoMKgwqDCoHsuYXR0 cmlidXRlID0gKEFJRV9USUxFX1RZUEVfU0hJTVBMIHwgQUlFX1RJTEVfVFlQRV9TSElNTk9DKSA8 PAo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEFJRV9SRUdT X0FUVFJfVElMRV9UWVBFX1NISUZULAo+Pj4+ICvCoMKgwqDCoMKgwqDCoCAuc29mZiA9IEFJRV9T SElNUExfUkVTRVRfUkVHT0ZGLAo+Pj4+ICvCoMKgwqDCoMKgwqDCoCAuZW9mZiA9IEFJRV9TSElN UExfUkVTRVRfUkVHT0ZGLAo+Pj4+ICvCoMKgwqDCoMKgwqDCoH0sCj4+Pj4gK8KgwqDCoMKgwqDC oMKgLyogU0hJTSBjbG9jayBjb250cm9sICovCj4+Pj4gK8KgwqDCoMKgwqDCoMKgey5hdHRyaWJ1 dGUgPSAoQUlFX1RJTEVfVFlQRV9TSElNUEwgfCBBSUVfVElMRV9UWVBFX1NISU1OT0MpIDw8Cj4+ Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQUlFX1JFR1NfQVRU Ul9USUxFX1RZUEVfU0hJRlQsCj4+Pj4gK8KgwqDCoMKgwqDCoMKgIC5zb2ZmID0gQUlFX1NISU1Q TF9DTEtDTlRSX1JFR09GRiwKPj4+PiArwqDCoMKgwqDCoMKgwqAgLmVvZmYgPSBBSUVfU0hJTVBM X0NMS0NOVFJfUkVHT0ZGLAo+Pj4+ICvCoMKgwqDCoMKgwqDCoH0sCj4+Pj4gK8KgwqDCoMKgwqDC oMKgLyogVGlsZSBjbG9jayBjb250cm9sICovCj4+Pj4gK8KgwqDCoMKgwqDCoMKgey5hdHRyaWJ1 dGUgPSBBSUVfVElMRV9UWVBFX1RJTEUgPDwgQUlFX1JFR1NfQVRUUl9USUxFX1RZUEVfU0hJRlQs Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgIC5zb2ZmID0gQUlFX1RJTEVfQ09SRV9DTEtDTlRSX1JFR09G RiwKPj4+PiArwqDCoMKgwqDCoMKgwqAgLmVvZmYgPSBBSUVfVElMRV9DT1JFX0NMS0NOVFJfUkVH T0ZGLAo+Pj4+ICvCoMKgwqDCoMKgwqDCoH0sCj4+Pj4gK307Cj4+Pj4gKwo+Pj4+ICtzdGF0aWMg dTMyIGFpZV9nZXRfdGlsZV90eXBlKHN0cnVjdCBhaWVfbG9jYXRpb24gKmxvYykKPj4+PiArewo+ Pj4+ICvCoMKgwqDCoMKgwqDCoGlmIChsb2MtPnJvdykKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcmV0dXJuIEFJRV9USUxFX1RZUEVfVElMRTsKPj4+PiArwqDCoMKgwqDCoMKg wqAvKiBTSElNIHJvdyAqLwo+Pj4+ICvCoMKgwqDCoMKgwqDCoGlmICgobG9jLT5jb2wgJSA0KSA8 IDIpCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBBSUVfVElMRV9U WVBFX1NISU1QTDsKPj4+PiArCj4+Pj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIEFJRV9USUxFX1RZ UEVfU0hJTU5PQzsKPj4+PiArfQo+Pj4+ICsKPj4+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBhaWVf dGlsZV9vcGVyYXRpb25zIGFpZV9vcHMgPSB7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgLmdldF90aWxl X3R5cGUgPSBhaWVfZ2V0X3RpbGVfdHlwZSwKPj4+PiArfTsKPj4+PiArCj4+Pj4gKy8qKgo+Pj4+ ICsgKiBhaWVfZGV2aWNlX2luaXQoKSAtIEluaXRpYWxpemUgQUkgZW5naW5lIGRldmljZSBzdHJ1 Y3QgQUlFIHNwZWNpZmljCj4+Pj4gKyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgcHJvcGVydGllcwo+Pj4+ICsgKiBAYWRldjogQUkgZW5naW5lIGRldmljZQo+Pj4+ICsg KiBAcmV0dXJuOiAwIGZvciBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBmb3IgZmFpbHVyZS4KPj4+ PiArICoKPj4+PiArICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplIHRoZSBBSSBlbmdpbmUgZGV2 aWNlIHN0cnVjdHVyZSBkZXZpY2UgdmVyc2lvbgo+Pj4+ICsgKiBzcGVjaWZpYyBlbGVtZW50cyBz dWNoIGFzIHJlZ2lzdGVyIGFkZHJlc3NpbmcgcmVsYXRlZCBhcnJheSBzaGlmdCwKPj4+PiArICog Y29sdW1uIHNoaWZ0LCBhbmQgcm93IHNoaWZ0OyBBSUUgc3BlY2lmaWMgZGV2aWNlIG9wZXJhdGlv bnMsIGRldmljZQo+Pj4+ICsgKiBjb2x1bW5zIHJlc291cmNlLgo+Pj4+ICsgKi8KPj4+PiAraW50 IGFpZV9kZXZpY2VfaW5pdChzdHJ1Y3QgYWllX2RldmljZSAqYWRldikKPj4+PiArewo+Pj4+ICvC oMKgwqDCoMKgwqDCoGludCByZXQ7Cj4+Pj4gKwo+Pj4+ICvCoMKgwqDCoMKgwqDCoGFkZXYtPmFy cmF5X3NoaWZ0ID0gQUlFX0FSUkFZX1NISUZUOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoGFkZXYtPmNv bF9zaGlmdCA9IEFJRV9DT0xfU0hJRlQ7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgYWRldi0+cm93X3No aWZ0ID0gQUlFX1JPV19TSElGVDsKPj4+PiArwqDCoMKgwqDCoMKgwqBhZGV2LT5vcHMgPSAmYWll X29wczsKPj4+PiArwqDCoMKgwqDCoMKgwqBhZGV2LT5udW1fa2VybmVsX3JlZ3MgPSBBUlJBWV9T SVpFKGFpZV9rZXJuZWxfcmVncyk7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgYWRldi0+a2VybmVsX3Jl Z3MgPSBhaWVfa2VybmVsX3JlZ3M7Cj4+Pj4gKwo+Pj4+ICvCoMKgwqDCoMKgwqDCoC8qIEdldCB0 aGUgY29sdW1ucyByZXNvdXJjZSAqLwo+Pj4+ICvCoMKgwqDCoMKgwqDCoC8qIEdldCBudW1iZXIg b2YgY29sdW1ucyBmcm9tIEFJIGVuZ2luZSBtZW1vcnkgcmVzb3VyY2UgKi8KPj4+PiArwqDCoMKg wqDCoMKgwqByZXQgPSBhaWVfcmVzb3VyY2VfaW5pdGlhbGl6ZSgmYWRldi0+Y29sc19yZXMsIDUw KTsKPj4+PiArwqDCoMKgwqDCoMKgwqBpZiAocmV0KQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBkZXZfZXJyKCZhZGV2LT5kZXYsICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBjb2x1 bW5zCj4+Pj4gcmVzb3VyY2UuXG4iKTsKPj4+PiArCj4+Pj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJu IHJldDsKPj4+PiArfQo+Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MveGlsaW54LWFpLWVu Z2luZS9haS1lbmdpbmUtZGV2LmMKPj4+PiBiL2RyaXZlcnMvbWlzYy94aWxpbngtYWktZW5naW5l L2FpLWVuZ2luZS1kZXYuYwo+Pj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+Pj4gaW5kZXggMDAw MDAwMC4uMmFiMmRjOAo+Pj4+IC0tLSAvZGV2L251bGwKPj4+PiArKysgYi9kcml2ZXJzL21pc2Mv eGlsaW54LWFpLWVuZ2luZS9haS1lbmdpbmUtZGV2LmMKPj4+PiBAQCAtMCwwICsxLDQ0OCBAQAo+ Pj4+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+Pj4+ICsvKgo+Pj4+ICsg KiBYaWxpbnggQUkgRW5naW5lIGRldmljZSBkcml2ZXIKPj4+PiArICoKPj4+PiArICogQ29weXJp Z2h0IChDKSAyMDIwIFhpbGlueCwgSW5jLgo+Pj4+ICsgKi8KPj4+PiArCj4+Pj4gKyNpbmNsdWRl IDxsaW51eC9hbm9uX2lub2Rlcy5oPgo+Pj4+ICsjaW5jbHVkZSA8bGludXgvY2Rldi5oPgo+Pj4+ ICsjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KPj4+PiArI2luY2x1ZGUgPGxpbnV4L2RldmljZS5o Pgo+Pj4+ICsjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KPj4+PiArI2luY2x1ZGUgPGxp bnV4L2ZpbGUuaD4KPj4+PiArI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Cj4+Pj4gKyNpbmNsdWRlIDxs aW51eC9pZHIuaD4KPj4+PiArI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KPj4+PiArI2luY2x1ZGUg PGxpbnV4L21vZHVsZS5oPgo+Pj4+ICsjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KPj4+PiArI2lu Y2x1ZGUgPGxpbnV4L29mLmg+Cj4+Pj4gKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KPj4+ PiArI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgo+Pj4+ICsjaW5jbHVkZSA8bGlu dXgvc2xhYi5oPgo+Pj4+ICsjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgo+Pj4+ICsjaW5jbHVk ZSA8dWFwaS9saW51eC94bG54LWFpLWVuZ2luZS5oPgo+Pj4+ICsKPj4+PiArI2luY2x1ZGUgImFp LWVuZ2luZS1pbnRlcm5hbC5oIgo+Pj4+ICsKPj4+PiArI2RlZmluZSBBSUVfREVWX01BWMKgwqDC oMKgKE1JTk9STUFTSyArIDEpCj4+Pj4gKwo+Pj4+ICtzdGF0aWMgZGV2X3QgYWllX21ham9yOwo+ Pj4+ICtzdHJ1Y3QgY2xhc3MgKmFpZV9jbGFzczsKPj4+PiArCj4+Pj4gK3N0YXRpYyBERUZJTkVf SURBKGFpZV9kZXZpY2VfaWRhKTsKPj4+PiArc3RhdGljIERFRklORV9JREEoYWllX21pbm9yX2lk YSk7Cj4+Pj4gKwo+Pj4+ICsvKioKPj4+PiArICogYWllX2dldF9wYXJ0aXRpb25fZmQoKSAtIEdl dCBBSSBlbmdpbmUgcGFydGl0aW9uIGZpbGUgZGVzY3JpcHRvcgo+Pj4+ICsgKiBAYXBhcnQ6IEFJ IGVuZ2luZSBwYXJ0aXRpb24KPj4+PiArICogQHJldHVybjogZmlsZSBkZXNjcmlwdG9yIGZvciBB SSBlbmdpbmUgcGFydGl0aW9uIGZvciBzdWNjZXNzLCBvciBuZWdhdGl2ZQo+Pj4+ICsgKsKgwqDC oMKgwqDCoMKgwqAgdmFsdWUgZm9yIGZhaWx1cmUuCj4+Pj4gKyAqCj4+Pj4gKyAqIFRoaXMgZnVu Y3Rpb24gZ2V0cyBhIGZpbGUgZGVzY3JpcHRvciBmb3IgdGhlIEFJIGVuZ2luZSBwYXJ0aXRpb24u Cj4+Pj4gKyAqLwo+Pj4+ICtzdGF0aWMgaW50IGFpZV9nZXRfcGFydGl0aW9uX2ZkKHN0cnVjdCBh aWVfcGFydGl0aW9uICphcGFydCkKPj4+PiArewo+Pj4+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBm aWxlICpmaWxlcDsKPj4+PiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0Owo+Pj4+ICsKPj4+PiArwqDC oMKgwqDCoMKgwqAvKgo+Pj4+ICvCoMKgwqDCoMKgwqDCoCAqIFdlIGNhbid0IHVzZSBhbm9uX2lu b2RlX2dldGZkKCkgYmVjYXVzZSB3ZSBuZWVkIHRvIG1vZGlmeQo+Pj4+ICvCoMKgwqDCoMKgwqDC oCAqIHRoZSBmX21vZGUgZmxhZ3MgZGlyZWN0bHkgdG8gYWxsb3cgbW9yZSB0aGFuIGp1c3QgaW9j dGxzCj4+Pj4gK8KgwqDCoMKgwqDCoMKgICovCj4+Pj4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gZ2V0 X3VudXNlZF9mZF9mbGFncyhPX0NMT0VYRUMpOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQg PCAwKQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Owo+Pj4+ ICsKPj4+PiArwqDCoMKgwqDCoMKgwqBmaWxlcCA9IGFub25faW5vZGVfZ2V0ZmlsZShkZXZfbmFt ZSgmYXBhcnQtPmRldiksICZhaWVfcGFydF9mb3BzLAo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXBhcnQsIE9f UkRXUik7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgaWYgKElTX0VSUihmaWxlcCkpIHsKPj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcHV0X3VudXNlZF9mZChyZXQpOwo+Pj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSBQVFJfRVJSKGZpbGVwKTsKPj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPj4+PiArwqDCoMKgwqDCoMKg wqB9Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgZmlsZXAtPmZfbW9kZSB8PSAoRk1PREVfTFNFRUsgfCBG TU9ERV9QUkVBRCB8IEZNT0RFX1BXUklURSk7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgZmRfaW5zdGFs bChyZXQsIGZpbGVwKTsKPj4+PiArCj4+Pj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPj4+ PiArfQo+Pj4+ICsKPj4+PiArLyoqCj4+Pj4gKyAqIGFpZV9lbnF1aXJlX3BhcnRpdGlvbnMoKSAt IGdldCBBSSBlbmdpbmUgcGFydGl0aW9ucyBpbmZvcm1hdGlvbgo+Pj4+ICsgKiBAYWRldjogQUkg ZW5naW5lIGRldmljZQo+Pj4+ICsgKiBAcXVlcnk6IGRhdGEgc3RydWN0IHRvIHN0b3JlIHRoZSBw YXJ0aXRpb24gaW5mb3JtYXRpb24KPj4+PiArICogQHJldHVybjogMCBmb3Igc3VjY2VzcywgYW5k IG5lZ2F0aXZlIHZhbHVlIGZvciBmYWlsdXJlLgo+Pj4+ICsgKi8KPj4+PiArc3RhdGljIGludCBh aWVfZW5xdWlyZV9wYXJ0aXRpb25zKHN0cnVjdCBhaWVfZGV2aWNlICphZGV2LAo+Pj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHN0cnVjdCBhaWVfcGFydGl0aW9uX3F1ZXJ5ICpxdWVyeSkKPj4+PiArewo+Pj4+ICvCoMKg wqDCoMKgwqDCoHN0cnVjdCBhaWVfcGFydGl0aW9uICphcGFydDsKPj4+PiArwqDCoMKgwqDCoMKg wqB1MzIgcGFydGl0aW9uX2NudCwgaSA9IDA7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgaW50IHJldDsK Pj4+PiArCj4+Pj4gK8KgwqDCoMKgwqDCoMKgaWYgKCFxdWVyeS0+cGFydGl0aW9ucykgewo+Pj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKgo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgKiBJZiBwYXJ0aXRpb25zIGluZm9ybWF0aW9uIGJ1ZmZlciBpcyBOVUxM Lgo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBJdCBpcyB0byBnZXQgdGhl IG51bWJlciBvZiBwYXJ0aXRpb25zLgo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgKi8KPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcXVlcnktPnBhcnRpdGlv bl9jbnQgPSAwOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBsaXN0X2Zvcl9l YWNoX2VudHJ5KGFwYXJ0LCAmYWRldi0+cGFydGl0aW9ucywgbm9kZSkKPj4+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHF1ZXJ5LT5wYXJ0aXRpb25fY250 Kys7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAwOwo+Pj4+ICvC oMKgwqDCoMKgwqDCoH0KPj4+PiArCj4+Pj4gK8KgwqDCoMKgwqDCoMKgcGFydGl0aW9uX2NudCA9 IHF1ZXJ5LT5wYXJ0aXRpb25fY250Owo+Pj4+ICvCoMKgwqDCoMKgwqDCoGlmICghcGFydGl0aW9u X2NudCkKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4+Pj4g Kwo+Pj4+ICvCoMKgwqDCoMKgwqDCoHJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmYWRl di0+bWxvY2spOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQpCj4+Pj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7Cj4+Pj4gKwo+Pj4+ICvCoMKgwqDCoMKgwqDC oGxpc3RfZm9yX2VhY2hfZW50cnkoYXBhcnQsICZhZGV2LT5wYXJ0aXRpb25zLCBub2RlKSB7Cj4+ Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBhaWVfcmFuZ2VfYXJncyBw YXJ0Owo+Pj4+ICsKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGkgPj0g cGFydGl0aW9uX2NudCkKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGJyZWFrOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwYXJ0 LnBhcnRpdGlvbl9pZCA9IGFwYXJ0LT5wYXJ0aXRpb25faWQ7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoC8qCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAq IFRCRDogY2hlY2sgd2l0aCBQTE0gdGhhdCBpZiB0aGUgcGFydGl0aW9uIGlzIHByb2dyYW1tZWQK Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogYW5kIGdldCB0aGUgVUlEIG9m IHRoZSBpbWFnZSB3aGljaCBpcyBsb2FkZWQgb24gdGhlIEFJCj4+Pj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCAqIGVuZ2luZSBwYXJ0aXRpb24uCj4+Pj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCAqLwo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBw YXJ0LnVpZCA9IDA7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBhcnQucmFu Z2Uuc3RhcnQuY29sID0gYXBhcnQtPnJhbmdlLnN0YXJ0LmNvbDsKPj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgcGFydC5yYW5nZS5zdGFydC5yb3cgPSBhcGFydC0+cmFuZ2Uuc3Rh cnQucm93Owo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwYXJ0LnJhbmdlLnNp emUuY29sID0gYXBhcnQtPnJhbmdlLnNpemUuY29sOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBwYXJ0LnJhbmdlLnNpemUucm93ID0gYXBhcnQtPnJhbmdlLnNpemUucm93Owo+ Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBDaGVjayBpZiBwYXJ0aXRpb24g aXMgaW4gdXNlICovCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBhcnQuc3Rh dHVzID0gYXBhcnQtPnN0YXR1czsKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg aWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKikmcXVlcnktPnBhcnRpdGlvbnNbaV0sICZw YXJ0LAo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBzaXplb2YocGFydCkpKSB7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBtdXRleF91bmxvY2soJmFkZXYtPm1sb2NrKTsK Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVy biAtRUZBVUxUOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGkrKzsKPj4+PiArwqDCoMKgwqDCoMKgwqB9Cj4+ Pj4gK8KgwqDCoMKgwqDCoMKgbXV0ZXhfdW5sb2NrKCZhZGV2LT5tbG9jayk7Cj4+Pj4gK8KgwqDC oMKgwqDCoMKgcXVlcnktPnBhcnRpdGlvbl9jbnQgPSBpOwo+Pj4+ICsKPj4+PiArwqDCoMKgwqDC oMKgwqByZXR1cm4gMDsKPj4+PiArfQo+Pj4+ICsKPj4+PiArLyoqCj4+Pj4gKyAqIGFpZV9nZXRf cGFydGl0aW9uX2Zyb21faWQoKSAtIGdldCBBSSBlbmdpbmUgcGFydGl0aW9uIGZyb20gaWQKPj4+ PiArICogQGFkZXY6IEFJIGVuZ2luZSBkZXZpY2UKPj4+PiArICogQHBhcnRpdGlvbl9pZDogcGFy dGl0aW9uIGlkIHRvIGNoZWNrCj4+Pj4gKyAqIEByZXR1cm46IHBhcnRpdGlvbiBwb2ludGVyIGlm IHBhcnRpdGlvbiBleGlzdHMsIG90aGVyd2lzZSwgTlVMTC4KPj4+PiArICoKPj4+PiArICogVGhp cyBmdW5jdGlvbiBjaGVja3MgZGVmaW5lZCBwYXJ0aXRpb25zIHdpdGggcGFydGl0aW9uIGlkLgo+ Pj4+ICsgKiBUaGlzIGZ1bmN0aW9uIGV4cGVjdCB0aGUgY2FsbGVyIHRvIGxvY2sgbWxvY2sgb2Yg QGFkZXYuCj4+Pj4gKyAqLwo+Pj4+ICtzdHJ1Y3QgYWllX3BhcnRpdGlvbiAqYWllX2dldF9wYXJ0 aXRpb25fZnJvbV9pZChzdHJ1Y3QgYWllX2RldmljZSAqYWRldiwKPj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHUzMiBwYXJ0aXRpb25faWQpCj4+Pj4gK3sKPj4+PiAr wqDCoMKgwqDCoMKgwqBzdHJ1Y3QgYWllX3BhcnRpdGlvbiAqYXBhcnQ7Cj4+Pj4gKwo+Pj4+ICvC oMKgwqDCoMKgwqDCoGxpc3RfZm9yX2VhY2hfZW50cnkoYXBhcnQsICZhZGV2LT5wYXJ0aXRpb25z LCBub2RlKSB7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChhcGFydC0+ cGFydGl0aW9uX2lkID09IHBhcnRpdGlvbl9pZCkKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBhcGFydDsKPj4+PiArwqDCoMKgwqDCoMKg wqB9Cj4+Pj4gKwo+Pj4+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBOVUxMOwo+Pj4+ICt9Cj4+Pj4g Kwo+Pj4+ICsvKioKPj4+PiArICogYWllX3JlcXVlc3RfcGFydGl0aW9uKCkgLSByZXF1ZXN0IEFJ IGVuZ2luZSBwYXJ0aXRpb24KPj4+PiArICogQGFkZXY6IEFJIGVuZ2luZSBkZXZpY2UKPj4+PiAr ICogQHJlcTogcGFydGl0aW9uIHJlcXVlc3QsIGluY2x1ZGVzIHRoZSByZXF1ZXN0ZWQgQUkgZW5n aW5lIGluZm9ybWF0aW9uCj4+Pj4gKyAqwqDCoMKgwqDCoCBzdWNoIGFzIHBhcnRpdGlvbiBub2Rl IElEIGFuZCB0aGUgVUlEIG9mIHRoZSBpbWFnZSB3aGljaCBpcwo+Pj4+ICsgKsKgwqDCoMKgwqAg bG9hZGVkIG9uIHRoZSBwYXJ0aXRpb24uCj4+Pj4gKyAqIEByZXR1cm46IHBhcnRpdGlvbiBwb2lu dGVyIGlmIHBhcnRpdGlvbiBleGlzdHMsIG90aGVyd2lzZSwgTlVMTC4KPj4+PiArICoKPj4+PiAr ICogVGhpcyBmdW5jdGlvbiBmaW5kcyBhIGRlZmluZWQgcGFydGl0aW9uIHdoaWNoIG1hdGNoZXMg dGhlIHNwZWNpZmllZAo+Pj4+ICsgKiBwYXJ0aXRpb24gaWQsIHJlcXVlc3QgaXQgaWYgaXQgaGFz bid0IGJlZW4gcmVxdWVzdGVkLCBhbmQgcmV0dXJucyBpdC4KPj4+PiArICovCj4+Pj4gK3N0cnVj dCBhaWVfcGFydGl0aW9uICphaWVfcmVxdWVzdF9wYXJ0aXRpb24oc3RydWN0IGFpZV9kZXZpY2Ug KmFkZXYsCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgYWllX3BhcnRp dGlvbl9yZXEgKnJlcSkKPj4+PiArewo+Pj4+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBhaWVfcGFy dGl0aW9uICphcGFydDsKPj4+PiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0Owo+Pj4+ICsKPj4+PiAr wqDCoMKgwqDCoMKgwqByZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmFkZXYtPm1sb2Nr KTsKPj4+PiArwqDCoMKgwqDCoMKgwqBpZiAocmV0KQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqByZXR1cm4gRVJSX1BUUihyZXQpOwo+Pj4+ICsKPj4+PiArwqDCoMKgwqDCoMKg wqBhcGFydCA9IGFpZV9nZXRfcGFydGl0aW9uX2Zyb21faWQoYWRldiwgcmVxLT5wYXJ0aXRpb25f aWQpOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoGlmICghYXBhcnQpIHsKPj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgZGV2X2VycigmYWRldi0+ZGV2LAo+Pj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgInJlcXVlc3QgcGFydGl0aW9uICV1IGZh aWxlZCwgbm90IGV4aXN0LlxuIiwKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHJlcS0+cGFydGl0aW9uX2lkKTsKPj4+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgbXV0ZXhfdW5sb2NrKCZhZGV2LT5tbG9jayk7Cj4+Pj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwo+Pj4+ICvCoMKg wqDCoMKgwqDCoH0KPj4+PiArwqDCoMKgwqDCoMKgwqAvKgo+Pj4+ICvCoMKgwqDCoMKgwqDCoCAq IFRCRDogSXQgd2lsbCBjaGVjayBpbWFnZSBVSUQgdG9vIHRvIHNlZSBpZiB0aGUgdXNlciBtYXRj aGVzCj4+Pj4gK8KgwqDCoMKgwqDCoMKgICogd2hhdCdzIGxvYWRlZCBpbiB0aGUgQUkgZW5naW5l IHBhcnRpdGlvbi4gQW5kIGNoZWNrIHRoZSBtZXRhCj4+Pj4gK8KgwqDCoMKgwqDCoMKgICogZGF0 YSB0byBzZWUgd2hpY2ggcmVzb3VyY2VzIHVzZWQgYnkgYXBwbGljYXRpb24uCj4+Pj4gK8KgwqDC oMKgwqDCoMKgICovCj4+Pj4gKwo+Pj4+ICvCoMKgwqDCoMKgwqDCoHJldCA9IG11dGV4X2xvY2tf aW50ZXJydXB0aWJsZSgmYXBhcnQtPm1sb2NrKTsKPj4+PiArwqDCoMKgwqDCoMKgwqBpZiAocmV0 KQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gRVJSX1BUUihyZXQp Owo+Pj4+ICsKPj4+PiArwqDCoMKgwqDCoMKgwqBpZiAoYXBhcnQtPnN0YXR1cyAmIFhBSUVfUEFS VF9TVEFUVVNfSU5VU0UpIHsKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbXV0 ZXhfdW5sb2NrKCZhcGFydC0+bWxvY2spOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBkZXZfZXJyKCZhZGV2LT5kZXYsCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAicmVxdWVzdCBwYXJ0aXRpb24gJXUgZmFpbGVkLCBwYXJ0aXRp b24gaW4gdXNlLlxuIiwKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHJlcS0+cGFydGl0aW9uX2lkKTsKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgYXBhcnQgPSBFUlJfUFRSKC1FQlVTWSk7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgfSBl bHNlIHsKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyoKPj4+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogVEJEOgo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgKiAxLiBzZXR1cCBOT0MgQVhJIE1NIGNvbmZpZyB0byBvbmx5IGdlbmVyYXRl IGVycm9yIGV2ZW50cwo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKsKgwqDC oCBmb3Igc2xhdmUgZXJyb3IgYW5kIGRlY29kZSBlcnJvci4KPj4+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgICogMi4gc2NhbiB0byBzZWUgd2hpY2ggdGlsZXMgaGF2ZSBiZWVuIGNs b2NrIGdhdGVkLgo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKgo+Pj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBUaGlzIG5lZWRzIHRvIGJlIGRvbmUgYmVm b3JlIHRoZSBBSSBlbmdpbmUgcGFydGl0aW9uIGlzCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAqIGV4cG9ydGVkIGZvciB1c2VyIHRvIGFjY2Vzcy4KPj4+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgICovCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGFwYXJ0LT5zdGF0dXMgPSBYQUlFX1BBUlRfU1RBVFVTX0lOVVNFOwo+Pj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBtdXRleF91bmxvY2soJmFwYXJ0LT5tbG9jayk7Cj4+Pj4g K8KgwqDCoMKgwqDCoMKgfQo+Pj4+ICvCoMKgwqDCoMKgwqDCoG11dGV4X3VubG9jaygmYWRldi0+ bWxvY2spOwo+Pj4+ICsKPj4+PiArwqDCoMKgwqDCoMKgwqByZXR1cm4gYXBhcnQ7Cj4+Pj4gK30K Pj4+PiArCj4+Pj4gK3N0YXRpYyBsb25nIHhpbGlueF9haV9lbmdpbmVfaW9jdGwoc3RydWN0IGZp bGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1bnNpZ25lZCBsb25n IGFyZykKPj4+PiArewo+Pj4+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBm aWxlX2lub2RlKGZpbHApOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBhaWVfZGV2aWNlICph ZGV2ID0gY2Rldl90b19haWVkZXYoaW5vZGUtPmlfY2Rldik7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKg dm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7Cj4+Pj4gK8KgwqDCoMKgwqDC oMKgaW50IHJldDsKPj4+PiArCj4+Pj4gK8KgwqDCoMKgwqDCoMKgc3dpdGNoIChjbWQpIHsKPj4+ PiArwqDCoMKgwqDCoMKgwqBjYXNlIEFJRV9FTlFVSVJFX1BBUlRfSU9DVEw6Cj4+Pj4gK8KgwqDC oMKgwqDCoMKgewo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgYWll X3BhcnRpdGlvbl9xdWVyeSBxdWVyeTsKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgc3RydWN0IGFpZV9wYXJ0aXRpb25fcXVlcnnCoCBfX3VzZXIgKnVxdWVyeV9wdHIgPSBhcmdw Owo+Pj4+ICsKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGNvcHlfZnJv bV91c2VyKCZxdWVyeSwgdXF1ZXJ5X3B0ciwgc2l6ZW9mKHF1ZXJ5KSkpCj4+Pj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVGQVVMVDsKPj4+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0ID0gYWllX2VucXVpcmVfcGFydGl0 aW9ucyhhZGV2LCAmcXVlcnkpOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBp ZiAocmV0IDwgMCkKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHJldHVybiByZXQ7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlm IChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopJnVxdWVyeV9wdHItPnBhcnRpdGlvbl9jbnQs Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgICZxdWVyeS5wYXJ0aXRpb25fY250LAo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzaXplb2YocXVl cnkucGFydGl0aW9uX2NudCkpKQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FRkFVTFQ7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGJyZWFrOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoH0KPj4+PiArwqDCoMKgwqDCoMKg wqBjYXNlIEFJRV9SRVFVRVNUX1BBUlRfSU9DVEw6Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgewo+Pj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgYWllX3BhcnRpdGlvbl9yZXEg cmVxOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgYWllX3BhcnRp dGlvbiAqYXBhcnQ7Cj4+Pj4gKwo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBp ZiAoY29weV9mcm9tX3VzZXIoJnJlcSwgYXJncCwgc2l6ZW9mKHJlcSkpKQo+Pj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FRkFVTFQ7Cj4+ Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGFwYXJ0ID0gYWllX3JlcXVlc3RfcGFy dGl0aW9uKGFkZXYsICZyZXEpOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBp ZiAoSVNfRVJSKGFwYXJ0KSkKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHJldHVybiBQVFJfRVJSKGFwYXJ0KTsKPj4+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcmV0ID0gYWllX2dldF9wYXJ0aXRpb25fZmQoYXBhcnQpOwo+Pj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAocmV0IDwgMCkgewo+Pj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2VycigmYXBhcnQtPmRl diwgImZhaWxlZCB0byBnZXQgZmQuXG4iKTsKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFrOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqB9Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFrOwo+Pj4+ ICvCoMKgwqDCoMKgwqDCoH0KPj4+PiArwqDCoMKgwqDCoMKgwqBkZWZhdWx0Ogo+Pj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZXJyKCZhZGV2LT5kZXYsICJJbnZhbGlkIGlv Y3RsIGNvbW1hbmQgJXUuXG4iLCBjbWQpOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqByZXQgPSAtRUlOVkFMOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBi cmVhazsKPj4+PiArwqDCoMKgwqDCoMKgwqB9Cj4+Pj4gKwo+Pj4+ICvCoMKgwqDCoMKgwqDCoHJl dHVybiByZXQ7Cj4+Pj4gK30KPj4+PiArCj4+Pj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9v cGVyYXRpb25zIGFpZV9kZXZpY2VfZm9wcyA9IHsKPj4+PiArwqDCoMKgwqDCoMKgwqAub3duZXLC oMKgwqDCoMKgwqDCoMKgwqDCoD0gVEhJU19NT0RVTEUsCj4+Pj4gK8KgwqDCoMKgwqDCoMKgLnVu bG9ja2VkX2lvY3RswqA9IHhpbGlueF9haV9lbmdpbmVfaW9jdGwsCj4+Pj4gK307Cj4+Pj4gKwo+ Pj4+ICtzdGF0aWMgdm9pZCB4aWxpbnhfYWlfZW5naW5lX3JlbGVhc2VfZGV2aWNlKHN0cnVjdCBk ZXZpY2UgKmRldikKPj4+PiArewo+Pj4+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBhaWVfZGV2aWNl ICphZGV2ID0gZGV2X3RvX2FpZWRldihkZXYpOwo+Pj4+ICsKPj4+PiArwqDCoMKgwqDCoMKgwqBp ZGFfc2ltcGxlX3JlbW92ZSgmYWllX2RldmljZV9pZGEsIGRldi0+aWQpOwo+Pj4+ICvCoMKgwqDC oMKgwqDCoGlkYV9zaW1wbGVfcmVtb3ZlKCZhaWVfbWlub3JfaWRhLCBNSU5PUihkZXYtPmRldnQp KTsKPj4+PiArwqDCoMKgwqDCoMKgwqBjZGV2X2RlbCgmYWRldi0+Y2Rldik7Cj4+Pj4gK8KgwqDC oMKgwqDCoMKgYWllX3Jlc291cmNlX3VuaW5pdGlhbGl6ZSgmYWRldi0+Y29sc19yZXMpOwo+Pj4+ ICt9Cj4+Pj4gKwo+Pj4+ICsvKioKPj4+PiArICogb2ZfeGlsaW54X2FpX2VuZ2luZV9wYXJ0X3By b2JlKCkgLSBwcm9iZXMgZm9yIEFJIGVuZ2luZSBwYXJ0aXRpb24gbm9kZXMKPj4+PiArICogQGFk ZXY6IEFJIGVuZ2luZSBkZXZpY2UKPj4+PiArICoKPj4+PiArICogVGhpcyBmdW5jdGlvbiB3aWxs IHByb2JlIGZvciBjaGlsZHJlbiBBSSBlbmdpbmUgcGFydGl0aW9uIG5vZGVzIGFuZCBjcmVhdGUK Pj4+PiArICogYW4gQUkgZW5naW5lIHBhcnRpdGlvbiBpbnN0YW5jZSBmb3IgZWFjaCBub2RlLgo+ Pj4+ICsgKi8KPj4+PiArc3RhdGljIHZvaWQgb2ZfeGlsaW54X2FpX2VuZ2luZV9wYXJ0X3Byb2Jl KHN0cnVjdCBhaWVfZGV2aWNlICphZGV2KQo+Pj4+ICt7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgc3Ry dWN0IGRldmljZV9ub2RlICpuYzsKPj4+PiArCj4+Pj4gK8KgwqDCoMKgwqDCoMKgZm9yX2VhY2hf YXZhaWxhYmxlX2NoaWxkX29mX25vZGUoYWRldi0+ZGV2Lm9mX25vZGUsIG5jKSB7Cj4+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBhaWVfcGFydGl0aW9uICphcGFydDsK Pj4+PiArCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChvZl9ub2RlX3Rl c3RfYW5kX3NldF9mbGFnKG5jLCBPRl9QT1BVTEFURUQpKQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29udGludWU7Cj4+Pj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGFwYXJ0ID0gb2ZfYWllX3BhcnRfcHJvYmUoYWRldiwgbmMpOwo+ Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoSVNfRVJSKGFwYXJ0KSkgewo+ Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2Vy cigmYWRldi0+ZGV2LAo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCJGYWlsZWQgdG8gcHJvYmUgQUkgZW5naW5lIHBhcnQg Zm9yICVwT0ZcbiIsCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbmMpOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgb2Zfbm9kZV9jbGVhcl9mbGFnKG5jLCBPRl9QT1BVTEFU RUQpOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4+Pj4gK8KgwqDCoMKg wqDCoMKgfQo+Pj4+ICt9Cj4+Pj4gKwo+Pj4+ICtzdGF0aWMgaW50IHhpbGlueF9haV9lbmdpbmVf cHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPj4+PiArewo+Pj4+ICvCoMKgwqDC oMKgwqDCoHN0cnVjdCBhaWVfZGV2aWNlICphZGV2Owo+Pj4+ICvCoMKgwqDCoMKgwqDCoHN0cnVj dCBkZXZpY2UgKmRldjsKPj4+PiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0Owo+Pj4+ICsKPj4+PiAr wqDCoMKgwqDCoMKgwqBhZGV2ID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqYWRl diksIEdGUF9LRVJORUwpOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoGlmICghYWRldikKPj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FTk9NRU07Cj4+Pj4gK8KgwqDCoMKg wqDCoMKgcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgYWRldik7Cj4+Pj4gK8KgwqDCoMKgwqDC oMKgSU5JVF9MSVNUX0hFQUQoJmFkZXYtPnBhcnRpdGlvbnMpOwo+Pj4+ICvCoMKgwqDCoMKgwqDC oG11dGV4X2luaXQoJmFkZXYtPm1sb2NrKTsKPj4+PiArCj4+Pj4gK8KgwqDCoMKgwqDCoMKgYWRl di0+cmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsK Pj4+PiArwqDCoMKgwqDCoMKgwqBpZiAoIWFkZXYtPnJlcykgewo+Pj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBkZXZfZXJyKCZwZGV2LT5kZXYsICJObyBtZW1vcnkgcmVzb3VyY2Uu XG4iKTsKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FSU5WQUw7 Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgfQo+Pj4+ICvCoMKgwqDCoMKgwqDCoGFkZXYtPmJhc2UgPSBk ZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgYWRldi0+cmVzKTsKPj4+PiArwqDCoMKg wqDCoMKgwqBpZiAoSVNfRVJSKGFkZXYtPmJhc2UpKSB7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGRldl9lcnIoJnBkZXYtPmRldiwgIm5vIGlvIG1lbW9yeSByZXNvdXJjZS5c biIpOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gUFRSX0VSUihh ZGV2LT5iYXNlKTsKPj4+PiArwqDCoMKgwqDCoMKgwqB9Cj4+Pj4gKwo+Pj4+ICvCoMKgwqDCoMKg wqDCoC8qIEluaXRpYWxpemUgQUlFIGRldmljZSBzcGVjaWZpYyBpbnN0YW5jZS4gKi8KPj4+PiAr wqDCoMKgwqDCoMKgwqByZXQgPSBhaWVfZGV2aWNlX2luaXQoYWRldik7Cj4+Pj4gK8KgwqDCoMKg wqDCoMKgaWYgKHJldCA8IDApIHsKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGluaXRpYWxpemUgZGV2aWNlCj4+Pj4gaW5z dGFuY2UuXG4iKTsKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJl dDsKPj4+PiArwqDCoMKgwqDCoMKgwqB9Cj4+Pj4gKwo+Pj4+ICvCoMKgwqDCoMKgwqDCoGRldiA9 ICZhZGV2LT5kZXY7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgZGV2aWNlX2luaXRpYWxpemUoZGV2KTsK Pj4+PiArwqDCoMKgwqDCoMKgwqBkZXYtPmNsYXNzID0gYWllX2NsYXNzOwo+Pj4+ICvCoMKgwqDC oMKgwqDCoGRldi0+cGFyZW50ID0gJnBkZXYtPmRldjsKPj4+PiArwqDCoMKgwqDCoMKgwqBkZXYt Pm9mX25vZGUgPSBwZGV2LT5kZXYub2Zfbm9kZTsKPj4+PiArCj4+Pj4gK8KgwqDCoMKgwqDCoMKg cmV0ID0gaWRhX3NpbXBsZV9nZXQoJmFpZV9taW5vcl9pZGEsIDAsIEFJRV9ERVZfTUFYLCBHRlBf S0VSTkVMKTsKPj4+PiArwqDCoMKgwqDCoMKgwqBpZiAocmV0IDwgMCkKPj4+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBmcmVlX2RldjsKPj4+PiArwqDCoMKgwqDCoMKgwqBk ZXYtPmRldnQgPSBNS0RFVihNQUpPUihhaWVfbWFqb3IpLCByZXQpOwo+Pj4+ICvCoMKgwqDCoMKg wqDCoHJldCA9IGlkYV9zaW1wbGVfZ2V0KCZhaWVfZGV2aWNlX2lkYSwgMCwgMCwgR0ZQX0tFUk5F TCk7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCA8IDApCj4+Pj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGdvdG8gZnJlZV9taW5vcl9pZGE7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKg ZGV2LT5pZCA9IHJldDsKPj4+PiArwqDCoMKgwqDCoMKgwqBkZXZfc2V0X25hbWUoJmFkZXYtPmRl diwgImFpZSVkIiwgZGV2LT5pZCk7Cj4+Pj4gKwo+Pj4+ICvCoMKgwqDCoMKgwqDCoGNkZXZfaW5p dCgmYWRldi0+Y2RldiwgJmFpZV9kZXZpY2VfZm9wcyk7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgYWRl di0+Y2Rldi5vd25lciA9IFRISVNfTU9EVUxFOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoHJldCA9IGNk ZXZfYWRkKCZhZGV2LT5jZGV2LCBkZXYtPmRldnQsIDEpOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoGlm IChyZXQpCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gZnJlZV9pZGE7 Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgLyogV2UgY2FuIG5vdyByZWx5IG9uIHRoZSByZWxlYXNlIGZ1 bmN0aW9uIGZvciBjbGVhbnVwICovCj4+Pj4gK8KgwqDCoMKgwqDCoMKgZGV2LT5yZWxlYXNlID0g eGlsaW54X2FpX2VuZ2luZV9yZWxlYXNlX2RldmljZTsKPj4+PiArCj4+Pj4gK8KgwqDCoMKgwqDC oMKgcmV0ID0gZGV2aWNlX2FkZChkZXYpOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQpIHsK Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2VycigmcGRldi0+ZGV2LCAi ZGV2aWNlX2FkZCBmYWlsZWQ6ICVkXG4iLCByZXQpOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBwdXRfZGV2aWNlKGRldik7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHJldHVybiByZXQ7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgfQo+Pj4+ICsKPj4+PiArwqDC oMKgwqDCoMKgwqBvZl94aWxpbnhfYWlfZW5naW5lX3BhcnRfcHJvYmUoYWRldik7Cj4+Pj4gK8Kg wqDCoMKgwqDCoMKgZGV2X2luZm8oJnBkZXYtPmRldiwgIlhpbGlueCBBSSBFbmdpbmUgZGV2aWNl KGNvbHM9JXUpIHByb2JlZFxuIiwKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGFkZXYtPmNvbHNfcmVzLnRvdGFsKTsKPj4+PiArwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsKPj4+ PiArCj4+Pj4gK2ZyZWVfaWRhOgo+Pj4+ICvCoMKgwqDCoMKgwqDCoGlkYV9zaW1wbGVfcmVtb3Zl KCZhaWVfZGV2aWNlX2lkYSwgZGV2LT5pZCk7Cj4+Pj4gK2ZyZWVfbWlub3JfaWRhOgo+Pj4+ICvC oMKgwqDCoMKgwqDCoGlkYV9zaW1wbGVfcmVtb3ZlKCZhaWVfbWlub3JfaWRhLCBNSU5PUihkZXYt PmRldnQpKTsKPj4+PiArZnJlZV9kZXY6Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgcHV0X2RldmljZShk ZXYpOwo+Pj4+ICsKPj4+PiArwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Owo+Pj4+ICt9Cj4+Pj4g Kwo+Pj4+ICtzdGF0aWMgaW50IHhpbGlueF9haV9lbmdpbmVfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9y bV9kZXZpY2UgKnBkZXYpCj4+Pj4gK3sKPj4+PiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgYWllX2Rl dmljZSAqYWRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwo+Pj4+ICvCoMKgwqDCoMKg wqDCoHN0cnVjdCBhaWVfcGFydGl0aW9uICphcGFydDsKPj4+PiArCj4+Pj4gK8KgwqDCoMKgwqDC oMKgbGlzdF9mb3JfZWFjaF9lbnRyeShhcGFydCwgJmFkZXYtPnBhcnRpdGlvbnMsIG5vZGUpCj4+ Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGFpZV9wYXJ0X3JlbW92ZShhcGFydCk7 Cj4+Pj4gKwo+Pj4+ICvCoMKgwqDCoMKgwqDCoGRldmljZV9kZWwoJmFkZXYtPmRldik7Cj4+Pj4g K8KgwqDCoMKgwqDCoMKgcHV0X2RldmljZSgmYWRldi0+ZGV2KTsKPj4+PiArCj4+Pj4gK8KgwqDC oMKgwqDCoMKgcmV0dXJuIDA7Cj4+Pj4gK30KPj4+PiArCj4+Pj4gK3N0YXRpYyBjb25zdCBzdHJ1 Y3Qgb2ZfZGV2aWNlX2lkIHhpbGlueF9haV9lbmdpbmVfb2ZfbWF0Y2hbXSA9IHsKPj4+PiArwqDC oMKgwqDCoMKgwqB7IC5jb21wYXRpYmxlID0gInhsbngsYWktZW5naW5lLXYxLjAiLCB9LAo+Pj4+ ICvCoMKgwqDCoMKgwqDCoHsgLyogZW5kIG9mIHRhYmxlICovIH0sCj4+Pj4gK307Cj4+Pj4gK01P RFVMRV9ERVZJQ0VfVEFCTEUob2YsIHhpbGlueF9haV9lbmdpbmVfb2ZfbWF0Y2gpOwo+Pj4+ICsK Pj4+PiArc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgeGlsaW54X2FpX2VuZ2luZV9kcml2 ZXIgPSB7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgLnByb2JlwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgPSB4aWxpbnhfYWlfZW5naW5lX3Byb2JlLAo+Pj4+ICvCoMKgwqDCoMKgwqDC oC5yZW1vdmXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgPSB4aWxpbnhfYWlfZW5n aW5lX3JlbW92ZSwKPj4+PiArwqDCoMKgwqDCoMKgwqAuZHJpdmVywqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoD0gewo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAu bmFtZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqA9ICJ4aWxpbngtYWktZW5naW5lIiwKPj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLm9mX21hdGNoX3RhYmxlwqA9IHhpbGlueF9haV9l bmdpbmVfb2ZfbWF0Y2gsCj4+Pj4gK8KgwqDCoMKgwqDCoMKgfSwKPj4+PiArfTsKPj4+PiArCj4+ Pj4gK3N0YXRpYyBpbnQgX19pbml0IHhpbGlueF9haV9lbmdpbmVfaW5pdCh2b2lkKQo+Pj4+ICt7 Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgaW50IHJldDsKPj4+PiArCj4+Pj4gK8KgwqDCoMKgwqDCoMKg cmV0ID0gYWxsb2NfY2hyZGV2X3JlZ2lvbigmYWllX21ham9yLCAwLCBBSUVfREVWX01BWCwgImFp ZSIpOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQgPCAwKSB7Cj4+Pj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHByX2VycigiYWllOiBmYWlsZWQgdG8gYWxsb2NhdGUgYWllIHJl Z2lvblxuIik7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7 Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgfQo+Pj4+ICsKPj4+PiArwqDCoMKgwqDCoMKgwqBhaWVfY2xh c3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsICJhaWUiKTsKPj4+PiArwqDCoMKgwqDCoMKg wqBpZiAoSVNfRVJSKGFpZV9jbGFzcykpIHsKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcHJfZXJyKCJmYWlsZWQgdG8gY3JlYXRlIGFpZSBjbGFzc1xuIik7Cj4+Pj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHVucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihhaWVfbWFq b3IsIEFJRV9ERVZfTUFYKTsKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0 dXJuIFBUUl9FUlIoYWllX2NsYXNzKTsKPj4+PiArwqDCoMKgwqDCoMKgwqB9Cj4+Pj4gKwo+Pj4+ ICvCoMKgwqDCoMKgwqDCoHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmeGlsaW54X2FpX2VuZ2lu ZV9kcml2ZXIpOwo+Pj4+ICsKPj4+PiArwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsKPj4+PiArfQo+ Pj4+ICtwb3N0Y29yZV9pbml0Y2FsbCh4aWxpbnhfYWlfZW5naW5lX2luaXQpOwo+Pj4+ICsKPj4+ PiArc3RhdGljIHZvaWQgX19leGl0IHhpbGlueF9haV9lbmdpbmVfZXhpdCh2b2lkKQo+Pj4+ICt7 Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnhpbGlueF9h aV9lbmdpbmVfZHJpdmVyKTsKPj4+PiArwqDCoMKgwqDCoMKgwqBjbGFzc19kZXN0cm95KGFpZV9j bGFzcyk7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKGFpZV9t YWpvciwgQUlFX0RFVl9NQVgpOwo+Pj4+ICt9Cj4+Pj4gK21vZHVsZV9leGl0KHhpbGlueF9haV9l bmdpbmVfZXhpdCk7Cj4+Pj4gKwo+Pj4+ICtNT0RVTEVfQVVUSE9SKCJYaWxpbngsIEluYy4iKTsK Pj4+PiArTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwo+Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJz L21pc2MveGlsaW54LWFpLWVuZ2luZS9haS1lbmdpbmUtaW50ZXJuYWwuaAo+Pj4+IGIvZHJpdmVy cy9taXNjL3hpbGlueC1haS1lbmdpbmUvYWktZW5naW5lLWludGVybmFsLmgKPj4+PiBuZXcgZmls ZSBtb2RlIDEwMDY0NAo+Pj4+IGluZGV4IDAwMDAwMDAuLjZhNjk5NDYKPj4+PiAtLS0gL2Rldi9u dWxsCj4+Pj4gKysrIGIvZHJpdmVycy9taXNjL3hpbGlueC1haS1lbmdpbmUvYWktZW5naW5lLWlu dGVybmFsLmgKPj4+PiBAQCAtMCwwICsxLDIyNiBAQAo+Pj4+ICsvKiBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogR1BMLTIuMC1vbmx5ICovCj4+Pj4gKy8qCj4+Pj4gKyAqIFhpbGlueCBBSSBFbmdp bmUgZHJpdmVyIGludGVybmFsIGhlYWRlcgo+Pj4+ICsgKgo+Pj4+ICsgKiBDb3B5cmlnaHQgKEMp IDIwMjAgWGlsaW54LCBJbmMuCj4+Pj4gKyAqLwo+Pj4+ICsKPj4+PiArI2lmbmRlZiBBSUVfSU5U RVJOQUxfSAo+Pj4+ICsjZGVmaW5lIEFJRV9JTlRFUk5BTF9ICj4+Pj4gKwo+Pj4+ICsjaW5jbHVk ZSA8bGludXgvYml0ZmllbGQuaD4KPj4+PiArI2luY2x1ZGUgPGxpbnV4L2JpdHMuaD4KPj4+PiAr I2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KPj4+PiArI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgo+ Pj4+ICsjaW5jbHVkZSA8bGludXgvaW8uaD4KPj4+PiArI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4K Pj4+PiArI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Cj4+Pj4gKyNpbmNsdWRlIDxsaW51eC9vZi5o Pgo+Pj4+ICsjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+Cj4+Pj4gKyNpbmNsdWRlIDx1YXBp L2xpbnV4L3hsbngtYWktZW5naW5lLmg+Cj4+Pj4gKwo+Pj4+ICsvKgo+Pj4+ICsgKiBNYWNyb3Mg Zm9yIEFJIGVuZ2luZSB0aWxlIHR5cGUgYml0bWFza3MKPj4+PiArICovCj4+Pj4gKyNkZWZpbmUg QUlFX1RJTEVfVFlQRV9USUxFwqDCoMKgwqDCoEJJVCgwKQo+Pj4+ICsjZGVmaW5lIEFJRV9USUxF X1RZUEVfU0hJTVBMwqDCoMKgQklUKDEpCj4+Pj4gKy8qIFNISU0gTk9DIHRpbGUgaW5jbHVkZXMg U0hJTSBQTCBhbmQgU0hJTSBOT0MgbW9kdWxlcyAqLwo+Pj4+ICsjZGVmaW5lIEFJRV9USUxFX1RZ UEVfU0hJTU5PQ8KgwqBCSVQoMikKPj4+PiArCj4+Pj4gKy8qCj4+Pj4gKyAqIE1hY3JvcyBmb3Ig YXR0cmlidXRlIHByb3BlcnR5IG9mIEFJIGVuZ2luZSByZWdpc3RlcnMgYWNjZXNzZWQgYnkga2Vy bmVsCj4+Pj4gKyAqIDAgLSA3IGJpdHM6IHRpbGUgdHlwZSBiaXRzCj4+Pj4gKyAqIDggLSAxNSBi aXRzOiBwZXJtaXNzaW9uIGJpdHMuIElmIGl0IGlzIDEsIGl0IGFsbG93cyB3cml0ZSBmcm9tIHVz ZXJzcGFjZQo+Pj4+ICsgKi8KPj4+PiArI2RlZmluZSBBSUVfUkVHU19BVFRSX1RJTEVfVFlQRV9T SElGVMKgwqAwVQo+Pj4+ICsjZGVmaW5lIEFJRV9SRUdTX0FUVFJfUEVSTV9TSElGVMKgwqDCoMKg wqDCoMKgOFUKPj4+PiArI2RlZmluZSBBSUVfUkVHU19BVFRSX1RJTEVfVFlQRV9NQVNLwqDCoMKg R0VOTUFTSyhBSUVfUkVHU19BVFRSX1BFUk1fU0hJRlQgLSAxLAo+Pj4+IFwKPj4+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEFJRV9SRUdTX0FUVFJfVElMRV9UWVBFX1NI SUZUKQo+Pj4+ICsjZGVmaW5lIEFJRV9SRUdTX0FUVFJfUEVSTV9NQVNLwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBHRU5NQVNLKDE1LCBcCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg77+977+9wqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgQUlFX1JFR1NfQVRUUl9QRVJNX1NISUZUKQo+Pj4+ICsKPj4+ PiArLyoqCj4+Pj4gKyAqIHN0cnVjdCBhaWVfdGlsZV9yZWdzIC0gY29udGlndW91cyByYW5nZSBv ZiBBSSBlbmdpbmUgcmVnaXN0ZXIKPj4+PiArICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCB3aXRoaW4gYW4gQUkgZW5naW5lIHRpbGUKPj4+PiArICogQHNvZmY6 IHN0YXJ0IG9mZnNldCBvZiB0aGUgcmFuZ2UKPj4+PiArICogQGVvZmY6IGVuZCBvZmZzZXQgb2Yg dGhlIHJhbmdlCj4+Pj4gKyAqIEBhdHRyaWJ1dGU6IHJlZ2lzdGVycyBhdHRyaWJ1dGUuIEl0IHVz ZXMgQUlFX1JFR1NfQVRUUl8qIG1hY3JvcyBkZWZpbmVkCj4+Pj4gKyAqwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBhYm92ZS4KPj4+PiArICovCj4+Pj4gK3N0cnVjdCBhaWVfdGlsZV9yZWdzIHsKPj4+ PiArwqDCoMKgwqDCoMKgwqBzaXplX3Qgc29mZjsKPj4+PiArwqDCoMKgwqDCoMKgwqBzaXplX3Qg ZW9mZjsKPj4+PiArwqDCoMKgwqDCoMKgwqB1MzIgYXR0cmlidXRlOwo+Pj4+ICt9Owo+Pj4+ICsK Pj4+PiArc3RydWN0IGFpZV9kZXZpY2U7Cj4+Pj4gK3N0cnVjdCBhaWVfcGFydGl0aW9uOwo+Pj4+ ICsKPj4+PiArLyoqCj4+Pj4gKyAqIHN0cnVjdCBhaWVfdGlsZV9vcGVyYXRpb25zIC0gQUkgZW5n aW5lIGRldmljZSBvcGVyYXRpb25zCj4+Pj4gKyAqIEBnZXRfdGlsZV90eXBlOiBnZXQgdHlwZSBv ZiB0aWxlIGJhc2VkIG9uIHRpbGUgb3BlcmF0aW9uCj4+Pj4gKyAqCj4+Pj4gKyAqIERpZmZlcmVu dCBBSSBlbmdpbmUgZGV2aWNlIHZlcnNpb24gaGFzIGl0cyBvd24gZGV2aWNlCj4+Pj4gKyAqIG9w ZXJhdGlvbi4KPj4+PiArICovCj4+Pj4gK3N0cnVjdCBhaWVfdGlsZV9vcGVyYXRpb25zIHsKPj4+ PiArwqDCoMKgwqDCoMKgwqB1MzIgKCpnZXRfdGlsZV90eXBlKShzdHJ1Y3QgYWllX2xvY2F0aW9u ICpsb2MpOwo+Pj4+ICt9Owo+Pj4+ICsKPj4+PiArLyoqCj4+Pj4gKyAqIHN0cnVjdCBhaWVfcmVz b3VyY2UgLSBBSSBlbmdpbmUgcmVzb3VyY2Ugc3RydWN0dXJlCj4+Pj4gKyAqIEBiaXRtYXA6IHJl c291cmNlIGJpdG1hcAo+Pj4+ICsgKiBAdG90YWw6IHRvdGFsIG51bWJlciBvZiByZXNvdXJjZQo+ Pj4+ICsgKi8KPj4+PiArc3RydWN0IGFpZV9yZXNvdXJjZSB7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKg dW5zaWduZWQgbG9uZyAqYml0bWFwOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoHUzMiB0b3RhbDsKPj4+ PiArfTsKPj4+PiArCj4+Pj4gKy8qKgo+Pj4+ICsgKiBzdHJ1Y3QgYWllX2RldmljZSAtIEFJIGVu Z2luZSBkZXZpY2Ugc3RydWN0dXJlCj4+Pj4gKyAqIEBwYXJ0aXRpb25zOiBsaXN0IG9mIHBhcnRp dGlvbnMgcmVxdWVzdGVkCj4+Pj4gKyAqIEBjZGV2OiBjZGV2IGZvciB0aGUgQUkgZW5naW5lCj4+ Pj4gKyAqIEBkZXY6IGRldmljZSBmb3IgdGhlIEFJIGVuZ2luZSBkZXZpY2UKPj4+PiArICogQG1s b2NrOiBwcm90ZWN0aW9uIGZvciBBSSBlbmdpbmUgZGV2aWNlIG9wZXJhdGlvbnMKPj4+PiArICog QGJhc2U6IEFJIGVuZ2luZSBkZXZpY2UgYmFzZSB2aXJ0dWFsIGFkZHJlc3MKPj4+PiArICogQHJl czogbWVtb3J5IHJlc291cmNlIG9mIEFJIGVuZ2luZSBkZXZpY2UKPj4+PiArICogQGtlcm5lbF9y ZWdzOiBhcnJheSBvZiBrZXJuZWwgb25seSByZWdpc3RlcnMKPj4+PiArICogQG9wczogdGlsZSBv cGVyYXRpb25zCj4+Pj4gKyAqIEBzaXplOiBzaXplIG9mIHRoZSBBSSBlbmdpbmUgYWRkcmVzcyBz cGFjZQo+Pj4+ICsgKiBAYXJyYXlfc2hpZnQ6IGFycmF5IGFkZHJlc3Mgc2hpZnQKPj4+PiArICog QGNvbF9zaGlmdDogY29sdW1uIGFkZHJlc3Mgc2hpZnQKPj4+PiArICogQHJvd19zaGlmdDogcm93 IGFkZHJlc3Mgc2hpZnQKPj4+PiArICogQGNvbHNfcmVzOiBBSSBlbmdpbmUgY29sdW1ucyByZXNv dXJjZXMgdG8gaW5kaWNhdGUKPj4+PiArICrCoMKgwqDCoMKgwqDCoMKgwqDCoCB3aGlsZSBjb2x1 bW5zIGFyZSBvY2N1cGllZCBieSBwYXJ0aXRpb25zLgo+Pj4+ICsgKiBAbnVtX2tlcm5lbF9yZWdz OiBudW1iZXIgb2Yga2VybmVsIG9ubHkgcmVnaXN0ZXJzIHJhbmdlCj4+Pj4gKyAqIEB2ZXJzaW9u OiBBSSBlbmdpbmUgZGV2aWNlIHZlcnNpb24KPj4+PiArICovCj4+Pj4gK3N0cnVjdCBhaWVfZGV2 aWNlIHsKPj4+PiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbGlzdF9oZWFkIHBhcnRpdGlvbnM7Cj4+ Pj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGNkZXYgY2RldjsKPj4+PiArwqDCoMKgwqDCoMKgwqBz dHJ1Y3QgZGV2aWNlIGRldjsKPj4+PiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbXV0ZXggbWxvY2s7 IC8qIHByb3RlY3Rpb24gZm9yIEFJIGVuZ2luZSBwYXJ0aXRpb25zICovCj4+Pj4gK8KgwqDCoMKg wqDCoMKgdm9pZCBfX2lvbWVtICpiYXNlOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCByZXNv dXJjZSAqcmVzOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoGNvbnN0IHN0cnVjdCBhaWVfdGlsZV9yZWdz ICprZXJuZWxfcmVnczsKPj4+PiArwqDCoMKgwqDCoMKgwqBjb25zdCBzdHJ1Y3QgYWllX3RpbGVf b3BlcmF0aW9ucyAqb3BzOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoHNpemVfdCBzaXplOwo+Pj4+ICvC oMKgwqDCoMKgwqDCoHN0cnVjdCBhaWVfcmVzb3VyY2UgY29sc19yZXM7Cj4+Pj4gK8KgwqDCoMKg wqDCoMKgdTMyIGFycmF5X3NoaWZ0Owo+Pj4+ICvCoMKgwqDCoMKgwqDCoHUzMiBjb2xfc2hpZnQ7 Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgdTMyIHJvd19zaGlmdDsKPj4+PiArwqDCoMKgwqDCoMKgwqB1 MzIgbnVtX2tlcm5lbF9yZWdzOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoGludCB2ZXJzaW9uOwo+Pj4+ ICt9Owo+Pj4+ICsKPj4+PiArLyoqCj4+Pj4gKyAqIHN0cnVjdCBhaWVfcGFydGl0aW9uIC0gQUkg ZW5naW5lIHBhcnRpdGlvbiBzdHJ1Y3R1cmUKPj4+PiArICogQG5vZGU6IGxpc3Qgbm9kZQo+Pj4+ ICsgKiBAYWRldjogcG9pbnRlciB0byBBSSBkZXZpY2UgaW5zdGFuY2UKPj4+PiArICogQHJhbmdl OiByYW5nZSBvZiBwYXJ0aXRpb24KPj4+PiArICogQG1sb2NrOiBwcm90ZWN0aW9uIGZvciBBSSBl bmdpbmUgcGFydGl0aW9uIG9wZXJhdGlvbnMKPj4+PiArICogQGRldjogZGV2aWNlIGZvciB0aGUg QUkgZW5naW5lIHBhcnRpdGlvbgo+Pj4+ICsgKiBAcGFydGl0aW9uX2lkOiBwYXJ0aXRpb24gaWQu IFBhcnRpdGlvbiBJRCBpcyB0aGUgaWRlbnRpZmllcgo+Pj4+ICsgKsKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgb2YgdGhlIEFJIGVuZ2luZSBwYXJ0aXRpb24gaW4gdGhlIHN5c3RlbS4KPj4+ PiArICogQHN0YXR1czogaW5kaWNhdGUgaWYgdGhlIHBhcnRpdGlvbiBpcyBpbiB1c2UKPj4+PiAr ICovCj4+Pj4gK3N0cnVjdCBhaWVfcGFydGl0aW9uIHsKPj4+PiArwqDCoMKgwqDCoMKgwqBzdHJ1 Y3QgbGlzdF9oZWFkIG5vZGU7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGFpZV9kZXZpY2Ug KmFkZXY7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGFpZV9yYW5nZSByYW5nZTsKPj4+PiAr wqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbXV0ZXggbWxvY2s7IC8qIHByb3RlY3Rpb24gZm9yIEFJIGVu Z2luZSBwYXJ0aXRpb24gb3BlcmF0aW9ucwo+Pj4+ICovCj4+Pj4gK8KgwqDCoMKgwqDCoMKgc3Ry dWN0IGRldmljZSBkZXY7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgdTMyIHBhcnRpdGlvbl9pZDsKPj4+ PiArwqDCoMKgwqDCoMKgwqB1MzIgc3RhdHVzOwo+Pj4+ICt9Owo+Pj4+ICsKPj4+PiArZXh0ZXJu IHN0cnVjdCBjbGFzcyAqYWllX2NsYXNzOwo+Pj4+ICtleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVf b3BlcmF0aW9ucyBhaWVfcGFydF9mb3BzOwo+Pj4+ICsKPj4+PiArI2RlZmluZSBjZGV2X3RvX2Fp ZWRldihpX2NkZXYpIGNvbnRhaW5lcl9vZigoaV9jZGV2KSwgc3RydWN0IGFpZV9kZXZpY2UsCj4+ Pj4gY2RldikKPj4+PiArI2RlZmluZSBkZXZfdG9fYWllZGV2KF9kZXYpIGNvbnRhaW5lcl9vZigo X2RldiksIHN0cnVjdCBhaWVfZGV2aWNlLCBkZXYpCj4+Pj4gKyNkZWZpbmUgZGV2X3RvX2FpZXBh cnQoX2RldikgY29udGFpbmVyX29mKChfZGV2KSwgc3RydWN0IGFpZV9wYXJ0aXRpb24sIGRldikK Pj4+PiArCj4+Pj4gKyNkZWZpbmUgYWllX2NvbF9tYXNrKGFkZXYpICh7IFwKPj4+PiArwqDCoMKg wqDCoMKgwqBzdHJ1Y3QgYWllX2RldmljZSAqX2FkZXYgPSAoYWRldik7IFwKPj4+PiArwqDCoMKg wqDCoMKgwqBHRU5NQVNLX1VMTChfYWRldi0+YXJyYXlfc2hpZnQgLSAxLCBfYWRldi0+Y29sX3No aWZ0KTvCoCBcCj4+Pj4gK8KgwqDCoMKgwqDCoMKgfSkKPj4+PiArCj4+Pj4gKyNkZWZpbmUgYWll X3Jvd19tYXNrKGFkZXYpICh7IFwKPj4+PiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgYWllX2Rldmlj ZSAqX2FkZXYgPSAoYWRldik7IFwKPj4+PiArwqDCoMKgwqDCoMKgwqBHRU5NQVNLX1VMTChfYWRl di0+Y29sX3NoaWZ0IC0gMSwgX2FkZXYtPnJvd19zaGlmdCk7wqAgXAo+Pj4+ICvCoMKgwqDCoMKg wqDCoH0pCj4+Pj4gKwo+Pj4+ICsjZGVmaW5lIGFpZV90aWxlX3JlZ19tYXNrKGFkZXYpICh7IFwK Pj4+PiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgYWllX2RldmljZSAqX2FkZXYgPSAoYWRldik7IFwK Pj4+PiArwqDCoMKgwqDCoMKgwqBHRU5NQVNLX1VMTChfYWRldi0+cm93X3NoaWZ0IC0gMSwgMCk7 wqAgXAo+Pj4+ICvCoMKgwqDCoMKgwqDCoH0pCj4+Pj4gKwo+Pj4+ICsvKgo+Pj4+ICsgKiBOZWVk IHRvIGRlZmluZSBmaWVsZCBnZXQsIGFzIEFJIGVuZ2luZSBzaGlmdCBtYXNrIGlzIG5vdCBjb25z dGFudC4KPj4+PiArICogQ2Fubm90IHVzZSBGSUVMRF9HRVQoKQo+Pj4+ICsgKi8KPj4+PiArI2Rl ZmluZSBhaWVfdGlsZV9yZWdfZmllbGRfZ2V0KG1hc2ssIHNoaWZ0LCByZWdvZmYpICggXAo+Pj4+ ICvCoMKgwqDCoMKgwqDCoCgocmVnb2ZmKSAmIChtYXNrKSkgPj4gKHNoaWZ0KSkKPj4+PiArCj4+ Pj4gKyNkZWZpbmUgYWllX2NhbF90aWxlX3JlZyhhZGV2LCByZWdvZmYpICggXAo+Pj4+ICvCoMKg wqDCoMKgwqDCoGFpZV90aWxlX3JlZ19maWVsZF9nZXQoYWllX3RpbGVfcmVnX21hc2soYWRldiks IDAsIHJlZ29mZikpCj4+Pj4gKwo+Pj4+ICsvKioKPj4+PiArICogYWllX2NhbF9yZWdvZmYoKSAt IGNhbGN1bGF0ZSByZWdpc3RlciBvZmZzZXQgdG8gdGhlIHdob2xlIEFJIGVuZ2luZQo+Pj4+ICsg KsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkZXZpY2Ugc3RhcnQgYWRkcmVz cwo+Pj4+ICsgKiBAYWRldjogQUkgZW5naW5lIGRldmljZQo+Pj4+ICsgKiBAbG9jOiBBSSBlbmdp bmUgdGlsZSBsb2NhdGlvbgo+Pj4+ICsgKiBAcmVnb2ZmX2ludGlsZTogcmVnaXN0ZXIgb2Zmc2V0 IHdpdGhpbiBhIHRpbGUKPj4+PiArICogQHJldHVybjogcmVnaXN0ZXIgb2Zmc2V0IHRvIHRoZSB3 aG9sZSBBSSBlbmdpbmUgZGV2aWNlIHN0YXJ0IGFkZHJlc3MKPj4+PiArICovCj4+Pj4gK3N0YXRp YyBpbmxpbmUgdTMyIGFpZV9jYWxfcmVnb2ZmKHN0cnVjdCBhaWVfZGV2aWNlICphZGV2LAo+Pj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBzdHJ1Y3QgYWllX2xvY2F0aW9uIGxvYywgdTMyIHJlZ29mZl9pbnRpbGUpCj4+Pj4g K3sKPj4+PiArwqDCoMKgwqDCoMKgwqByZXR1cm4gcmVnb2ZmX2ludGlsZSArIChsb2MuY29sIDw8 IGFkZXYtPmNvbF9zaGlmdCkgKwo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAobG9j LnJvdyA8PCBhZGV2LT5yb3dfc2hpZnQpOwo+Pj4+ICt9Cj4+Pj4gKwo+Pj4+ICsvKioKPj4+PiAr ICogYWllX3ZhbGlkYXRlX2xvY2F0aW9uKCkgLSB2YWxpZGF0ZSB0aWxlIGxvY2F0aW9uIHdpdGhp biBhbiBBSSBlbmdpbmUKPj4+PiArICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBwYXJ0aXRpb24KPj4+PiArICogQGFwYXJ0OiBBSSBlbmdpbmUgcGFy dGl0aW9uCj4+Pj4gKyAqIEBsb2M6IEFJIGVuZ2luZSB0aWxlIGxvY2F0aW9uCj4+Pj4gKyAqIEBy ZXR1cm46IHJldHVybiAwIGlmIGl0IGlzIHZhbGlkLCBuZWdhdGl2ZSB2YWx1ZSBmb3IgZXJyb3Jz Lgo+Pj4+ICsgKgo+Pj4+ICsgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiB0aGUgQUkgZW5naW5l IGxvY2F0aW9uIGlzIHdpdGhpbiB0aGUgQUkgZW5naW5lCj4+Pj4gKyAqIHBhcnRpdGlvbi4KPj4+ PiArICovCj4+Pj4gK3N0YXRpYyBpbmxpbmUgaW50IGFpZV92YWxpZGF0ZV9sb2NhdGlvbihzdHJ1 Y3QgYWllX3BhcnRpdGlvbiAqYXBhcnQsCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVj dCBhaWVfbG9jYXRpb24gbG9jKQo+Pj4+ICt7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgaWYgKGxvYy5j b2wgPCBhcGFydC0+cmFuZ2Uuc3RhcnQuY29sIHx8Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg IGxvYy5jb2wgPj0gYXBhcnQtPnJhbmdlLnN0YXJ0LmNvbCArIGFwYXJ0LT5yYW5nZS5zaXplLmNv bCB8fAo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBsb2Mucm93IDwgYXBhcnQtPnJhbmdlLnN0 YXJ0LnJvdyB8fAo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBsb2Mucm93ID49IGFwYXJ0LT5y YW5nZS5zdGFydC5yb3cgKyBhcGFydC0+cmFuZ2Uuc2l6ZS5yb3cpCj4+Pj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRUlOVkFMOwo+Pj4+ICsKPj4+PiArwqDCoMKgwqDC oMKgwqByZXR1cm4gMDsKPj4+PiArfQo+Pj4+ICsKPj4+PiAraW50IGFpZV9yZXNvdXJjZV9pbml0 aWFsaXplKHN0cnVjdCBhaWVfcmVzb3VyY2UgKnJlcywgaW50IGNvdW50KTsKPj4+PiArdm9pZCBh aWVfcmVzb3VyY2VfdW5pbml0aWFsaXplKHN0cnVjdCBhaWVfcmVzb3VyY2UgKnJlcyk7Cj4+Pj4g K2ludCBhaWVfcmVzb3VyY2VfY2hlY2tfcmVnaW9uKHN0cnVjdCBhaWVfcmVzb3VyY2UgKnJlcywg dTMyIHN0YXJ0LAo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCB1MzIgY291bnQpOwo+Pj4+ICtpbnQgYWllX3Jlc291cmNlX2dldF9y ZWdpb24oc3RydWN0IGFpZV9yZXNvdXJjZSAqcmVzLCB1MzIgc3RhcnQsCj4+Pj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdTMyIGNvdW50KTsK Pj4+PiArdm9pZCBhaWVfcmVzb3VyY2VfcHV0X3JlZ2lvbihzdHJ1Y3QgYWllX3Jlc291cmNlICpy ZXMsIGludCBzdGFydCwgdTMyIGNvdW50KTsKPj4+PiArCj4+Pj4gK2NvbnN0IHN0cnVjdCBmaWxl X29wZXJhdGlvbnMgKmFpZV9wYXJ0X2dldF9mb3BzKHZvaWQpOwo+Pj4+ICt1OCBhaWVfcGFydF9p bl91c2Uoc3RydWN0IGFpZV9wYXJ0aXRpb24gKmFwYXJ0KTsKPj4+PiArc3RydWN0IGFpZV9wYXJ0 aXRpb24gKmFpZV9nZXRfcGFydGl0aW9uX2Zyb21faWQoc3RydWN0IGFpZV9kZXZpY2UgKmFkZXYs Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1MzIgcGFydGl0aW9u X2lkKTsKPj4+PiArc3RydWN0IGFpZV9wYXJ0aXRpb24gKmFpZV9yZXF1ZXN0X3BhcnRpdGlvbihz dHJ1Y3QgYWllX2RldmljZSAqYWRldiwKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHN0cnVjdCBhaWVfcGFydGl0aW9uX3JlcSAqcmVxKTsKPj4+PiArc3RydWN0IGFpZV9wYXJ0aXRp b24gKm9mX2FpZV9wYXJ0X3Byb2JlKHN0cnVjdCBhaWVfZGV2aWNlICphZGV2LAo+Pj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5jKTsKPj4+PiArdm9pZCBhaWVf cGFydF9yZW1vdmUoc3RydWN0IGFpZV9wYXJ0aXRpb24gKmFwYXJ0KTsKPj4+PiArCj4+Pj4gK2lu dCBhaWVfZGV2aWNlX2luaXQoc3RydWN0IGFpZV9kZXZpY2UgKmFkZXYpOwo+Pj4+ICsjZW5kaWYg LyogQUlFX0lOVEVSTkFMX0ggKi8KPj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3hpbGlu eC1haS1lbmdpbmUvYWktZW5naW5lLXBhcnQuYwo+Pj4+IGIvZHJpdmVycy9taXNjL3hpbGlueC1h aS1lbmdpbmUvYWktZW5naW5lLXBhcnQuYwo+Pj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+Pj4g aW5kZXggMDAwMDAwMC4uZmM4ZjlmNQo+Pj4+IC0tLSAvZGV2L251bGwKPj4+PiArKysgYi9kcml2 ZXJzL21pc2MveGlsaW54LWFpLWVuZ2luZS9haS1lbmdpbmUtcGFydC5jCj4+Pj4gQEAgLTAsMCAr MSw0OTggQEAKPj4+PiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKPj4+PiAr LyoKPj4+PiArICogWGlsaW54IEFJIEVuZ2luZSBwYXJ0aXRpb24gZHJpdmVyCj4+Pj4gKyAqCj4+ Pj4gKyAqIENvcHlyaWdodCAoQykgMjAyMCBYaWxpbngsIEluYy4KPj4+PiArICovCj4+Pj4gKwo+ Pj4+ICsjaW5jbHVkZSA8bGludXgvY2Rldi5oPgo+Pj4+ICsjaW5jbHVkZSA8bGludXgvZGVsYXku aD4KPj4+PiArI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgo+Pj4+ICsjaW5jbHVkZSA8bGludXgv ZnMuaD4KPj4+PiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgo+Pj4+ICsjaW5jbHVkZSA8bGlu dXgvbGlzdC5oPgo+Pj4+ICsjaW5jbHVkZSA8bGludXgvbW0uaD4KPj4+PiArI2luY2x1ZGUgPGxp bnV4L21tYW4uaD4KPj4+PiArI2luY2x1ZGUgPGxpbnV4L21tdV9jb250ZXh0Lmg+Cj4+Pj4gKyNp bmNsdWRlIDxsaW51eC9tdXRleC5oPgo+Pj4+ICsjaW5jbHVkZSA8bGludXgvb2YuaD4KPj4+PiAr I2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgo+Pj4+ICsjaW5jbHVkZSA8bGludXgvc2xhYi5o Pgo+Pj4+ICsjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgo+Pj4+ICsjaW5jbHVkZSA8bGludXgv dWlvLmg+Cj4+Pj4gKyNpbmNsdWRlIDx1YXBpL2xpbnV4L3hsbngtYWktZW5naW5lLmg+Cj4+Pj4g Kwo+Pj4+ICsjaW5jbHVkZSAiYWktZW5naW5lLWludGVybmFsLmgiCj4+Pj4gKwo+Pj4+ICsvKioK Pj4+PiArICogYWllX2NhbF9sb2MoKSAtIGNhbGN1bGF0ZSB0aWxlIGxvY2F0aW9uIGZyb20gcmVn aXN0ZXIgb2Zmc2V0IHRvIHRoZSBBSQo+Pj4+ICsgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBlbmdpbmUgZGV2aWNlCj4+Pj4gKyAqIEBhZGV2OiBBSSBlbmdpbmUgZGV2aWNlCj4+Pj4g KyAqIEBsb2M6IG1lbW9yeSBwb2ludGVyIHRvIHJlc3RvcmUgcmV0dXJuaW5nIGxvY2F0aW9uIGlu Zm9ybWF0aW9uCj4+Pj4gKyAqIEByZWdvZmY6IHRpbGUgaW50ZXJuYWwgcmVnaXN0ZXIgb2Zmc2V0 Cj4+Pj4gKyAqCj4+Pj4gKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdGlsZSBsb2NhdGlv bi4KPj4+PiArICovCj4+Pj4gK3N0YXRpYyB2b2lkIGFpZV9jYWxfbG9jKHN0cnVjdCBhaWVfZGV2 aWNlICphZGV2LAo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgc3RydWN0IGFpZV9sb2NhdGlvbiAqbG9jLCB1NjQgcmVnb2ZmKQo+Pj4+ICt7Cj4+Pj4g K8KgwqDCoMKgwqDCoMKgbG9jLT5jb2wgPSAodTMyKWFpZV90aWxlX3JlZ19maWVsZF9nZXQoYWll X2NvbF9tYXNrKGFkZXYpLAo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg YWRldi0+Y29sX3NoaWZ0LCByZWdvZmYpOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoGxvYy0+cm93ID0g KHUzMilhaWVfdGlsZV9yZWdfZmllbGRfZ2V0KGFpZV9yb3dfbWFzayhhZGV2KSwKPj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFkZXYtPnJvd19zaGlmdCwgcmVnb2ZmKTsK Pj4+PiArfQo+Pj4+ICsKPj4+PiArLyoqCj4+Pj4gKyAqIGFpZV9wYXJ0X3JlZ192YWxpZGF0aW9u KCkgLSB2YWxpZGF0ZSBBSSBlbmdpbmUgcGFydGl0aW9uIHJlZ2lzdGVyIGFjY2Vzcwo+Pj4+ICsg KiBAYXBhcnQ6IEFJIGVuZ2luZSBwYXJ0aXRpb24KPj4+PiArICogQG9mZnNldDogQUkgZW5naW5l IHJlZ2lzdGVyIG9mZnNldAo+Pj4+ICsgKiBAbGVuOiBsZW4gb2YgZGF0YSB0byB3cml0ZS9yZWFk Cj4+Pj4gKyAqIEBpc193cml0ZTogaXMgdGhlIGFjY2VzcyB0byB3cml0ZSB0byByZWdpc3Rlcgo+ Pj4+ICsgKiBAcmV0dXJuOiAwIGZvciBzdWNjZXNzLCBvciBuZWdhdGl2ZSB2YWx1ZSBmb3IgZmFp bHVyZS4KPj4+PiArICoKPj4+PiArICogVGhpcyBmdW5jdGlvbiB2YWxpZGF0ZSBpZiB0aGUgcmVn aXN0ZXIgdG8gYWNjZXNzIGlzIHdpdGhpbiB0aGUgQUkgZW5naW5lCj4+Pj4gKyAqIHBhcnRpdGlv bi4gSWYgaXQgaXMgd3JpdGUgYWNjZXNzLCBpZiB0aGUgcmVnaXN0ZXIgaXMgd3JpdGFibGUgYnkg dXNlci4KPj4+PiArICovCj4+Pj4gK3N0YXRpYyBpbnQgYWllX3BhcnRfcmVnX3ZhbGlkYXRpb24o c3RydWN0IGFpZV9wYXJ0aXRpb24gKmFwYXJ0LCBzaXplX3QKPj4+PiBvZmZzZXQsCj4+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBzaXplX3QgbGVuLCB1OCBpc193cml0ZSkKPj4+PiArewo+Pj4+ICvCoMKgwqDCoMKg wqDCoHN0cnVjdCBhaWVfZGV2aWNlICphZGV2Owo+Pj4+ICvCoMKgwqDCoMKgwqDCoHUzMiByZWdl bmQzMiwgdHR5cGU7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgdTY0IHJlZ29mZiwgcmVnZW5kNjQ7Cj4+ Pj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGFpZV9sb2NhdGlvbiBsb2M7Cj4+Pj4gK8KgwqDCoMKg wqDCoMKgdW5zaWduZWQgaW50IGk7Cj4+Pj4gKwo+Pj4+ICvCoMKgwqDCoMKgwqDCoGFkZXYgPSBh cGFydC0+YWRldjsKPj4+PiArwqDCoMKgwqDCoMKgwqBpZiAob2Zmc2V0ICUgc2l6ZW9mKHUzMikp IHsKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2VycigmYXBhcnQtPmRl diwKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCJJ bnZhbGlkIHJlZyBvZmYoMHglengpLCBub3QgMzJiaXQgYWxpZ25lZC5cbiIsCj4+Pj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBvZmZzZXQpOwo+Pj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVJTlZBTDsKPj4+PiArwqDCoMKg wqDCoMKgwqB9Cj4+Pj4gKwo+Pj4+ICvCoMKgwqDCoMKgwqDCoGlmIChsZW4gJSBzaXplb2YodTMy KSkgewo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZXJyKCZhcGFydC0+ ZGV2LCAiSW52YWxpZCByZWcgb3BlcmF0aW9uIGxlbiAlenUuXG4iLCBsZW4pOwo+Pj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVJTlZBTDsKPj4+PiArwqDCoMKgwqDC oMKgwqB9Cj4+Pj4gKwo+Pj4+ICvCoMKgwqDCoMKgwqDCoHJlZ29mZiA9IGFpZV9jYWxfdGlsZV9y ZWcoYWRldiwgb2Zmc2V0KTsKPj4+PiArwqDCoMKgwqDCoMKgwqByZWdlbmQ2NCA9IHJlZ29mZiAr IGxlbjsKPj4+PiArwqDCoMKgwqDCoMKgwqBpZiAocmVnZW5kNjQgPj0gQklUX1VMTChhZGV2LT5y b3dfc2hpZnQpKSB7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9lcnIo JmFwYXJ0LT5kZXYsCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAiSW52YWxpZCByZWcgb3BlcmF0aW9uIGxlbiAlenUuXG4iLCBsZW4pOwo+Pj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVJTlZBTDsKPj4+PiArwqDCoMKg wqDCoMKgwqB9Cj4+Pj4gKwo+Pj4+ICvCoMKgwqDCoMKgwqDCoGFpZV9jYWxfbG9jKGFkZXYsICZs b2MsIG9mZnNldCk7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgaWYgKGFpZV92YWxpZGF0ZV9sb2NhdGlv bihhcGFydCwgbG9jKSkgewo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZf ZXJyKCZhcGFydC0+ZGV2LAo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIkludmFsaWQgKCVkLCVkKSBvdXQgb2YgcGFydCglZCwlZCksKCVkLCVkKVxu IiwKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGxv Yy5jb2wsIGxvYy5yb3csCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBhcGFydC0+cmFuZ2Uuc3RhcnQuY29sLCBhcGFydC0+cmFuZ2Uuc3RhcnQucm93 LAo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYXBh cnQtPnJhbmdlLnNpemUuY29sLCBhcGFydC0+cmFuZ2Uuc2l6ZS5yb3cpOwo+Pj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVJTlZBTDsKPj4+PiArwqDCoMKgwqDCoMKg wqB9Cj4+Pj4gKwo+Pj4+ICvCoMKgwqDCoMKgwqDCoGlmICghaXNfd3JpdGUpCj4+Pj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAwOwo+Pj4+ICsKPj4+PiArwqDCoMKgwqDC oMKgwqByZWdlbmQzMiA9IGxvd2VyXzMyX2JpdHMocmVnZW5kNjQpOwo+Pj4+ICvCoMKgwqDCoMKg wqDCoHR0eXBlID0gYWRldi0+b3BzLT5nZXRfdGlsZV90eXBlKCZsb2MpOwo+Pj4+ICvCoMKgwqDC oMKgwqDCoGZvciAoaSA9IDA7IGkgPCBhZGV2LT5udW1fa2VybmVsX3JlZ3M7IGkrKykgewo+Pj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb25zdCBzdHJ1Y3QgYWllX3RpbGVfcmVn cyAqcmVnczsKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdTMyIHJ0dHlwZSwg d3JpdGFibGU7Cj4+Pj4gKwo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZWdz ID0gJmFkZXYtPmtlcm5lbF9yZWdzW2ldOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBydHR5cGUgPSAocmVncy0+YXR0cmlidXRlICYgQUlFX1JFR1NfQVRUUl9USUxFX1RZUEVf TUFTSykgPj4KPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBBSUVfUkVHU19BVFRSX1RJTEVfVFlQRV9TSElGVDsKPj4+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgd3JpdGFibGUgPSAocmVncy0+YXR0cmlidXRlICYgQUlFX1JFR1NfQVRU Ul9QRVJNX01BU0spID4+Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIEFJRV9SRUdTX0FUVFJfUEVSTV9TSElGVDsKPj4+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCEodHR5cGUgJiBydHR5cGUpKQo+Pj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29udGludWU7Cj4+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICgocmVnb2ZmID49IHJlZ3MtPnNvZmYgJiYg cmVnb2ZmIDw9IHJlZ3MtPmVvZmYpIHx8Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAocmVnZW5kMzIgPj0gcmVncy0+c29mZiAmJiByZWdlbmQzMiA8PSByZWdzLT5l b2ZmKSkgewo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgaWYgKCF3cml0YWJsZSkgewo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9lcnIoJmFwYXJ0LT5kZXYsCj4+Pj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCJyZWcgMHglengsMHglenggbm90IHdyaXRhYmxlLlxuIiwK Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgb2Zmc2V0LCBsZW4pOwo+Pj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVy biAtRUlOVkFMOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgfQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4+Pj4gK8KgwqDC oMKgwqDCoMKgfQo+Pj4+ICsKPj4+PiArwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsKPj4+PiArfQo+ Pj4+ICsKPj4+PiArLyoqCj4+Pj4gKyAqIGFpZV9wYXJ0X3dyaXRlX3JlZ2lzdGVyKCkgLSBBSSBl bmdpbmUgcGFydGl0aW9uIHdyaXRlIHJlZ2lzdGVyCj4+Pj4gKyAqIEBhcGFydDogQUkgZW5naW5l IHBhcnRpdGlvbgo+Pj4+ICsgKiBAb2Zmc2V0OiBBSSBlbmdpbmUgcmVnaXN0ZXIgb2Zmc2V0Cj4+ Pj4gKyAqIEBsZW46IGxlbiBvZiBkYXRhIHRvIHdyaXRlCj4+Pj4gKyAqIEBkYXRhOiBkYXRhIHRv IHdyaXRlCj4+Pj4gKyAqIEBtYXNrOiBtYXNrLCBpZiBpdCBpcyBub24gMCwgaXQgaXMgbWFzayB3 cml0ZS4KPj4+PiArICogQHJldHVybjogbnVtYmVyIG9mIGJ5dGVzIHdyaXRlIGZvciBzdWNjZXNz LCBvciBuZWdhdGl2ZSB2YWx1ZSBmb3IgZmFpbHVyZS4KPj4+PiArICoKPj4+PiArICogVGhpcyBm dW5jdGlvbiB3cml0ZXMgZGF0YSB0byB0aGUgc3BlY2lmaWVkIHJlZ2lzdGVycy4KPj4+PiArICog SWYgdGhlIG1hc2sgaXMgbm9uIDAsIGl0IGlzIG1hc2sgd3JpdGUuCj4+Pj4gKyAqLwo+Pj4+ICtz dGF0aWMgaW50IGFpZV9wYXJ0X3dyaXRlX3JlZ2lzdGVyKHN0cnVjdCBhaWVfcGFydGl0aW9uICph cGFydCwgc2l6ZV90Cj4+Pj4gb2Zmc2V0LAo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZV90IGxlbiwgdm9p ZCAqZGF0YSwgdTMyIG1hc2spCj4+Pj4gK3sKPj4+PiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0Owo+ Pj4+ICvCoMKgwqDCoMKgwqDCoHZvaWQgX19pb21lbSAqdmE7Cj4+Pj4gKwo+Pj4+ICvCoMKgwqDC oMKgwqDCoGlmIChtYXNrICYmIGxlbiA+IHNpemVvZih1MzIpKSB7Cj4+Pj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoC8qIEZvciBtYXNrIHdyaXRlLCBvbmx5IGFsbG93IDMyYml0LiAq Lwo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZXJyKCZhcGFydC0+ZGV2 LAo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgImZh aWxlZCBtYXNrIHdyaXRlLCBsZW4gaXMgbW9yZSB0aGF0IDMyYml0LlxuIik7Cj4+Pj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRUlOVkFMOwo+Pj4+ICvCoMKgwqDCoMKg wqDCoH0KPj4+PiArCj4+Pj4gK8KgwqDCoMKgwqDCoMKgLyogb2Zmc2V0IGlzIGV4cGVjdGVkIHRv IGJlIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUgcGFydGl0aW9uICovCj4+Pj4gK8KgwqDC oMKgwqDCoMKgb2Zmc2V0ICs9IGFpZV9jYWxfcmVnb2ZmKGFwYXJ0LT5hZGV2LCBhcGFydC0+cmFu Z2Uuc3RhcnQsIDApOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoHJldCA9IGFpZV9wYXJ0X3JlZ192YWxp ZGF0aW9uKGFwYXJ0LCBvZmZzZXQsIGxlbiwgMSk7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgaWYgKHJl dCA8IDApIHsKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2VycigmYXBh cnQtPmRldiwgImZhaWxlZCB0byB3cml0ZSB0byAweCV6eCwweCV6eC5cbiIsCj4+Pj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBvZmZzZXQsIGxlbik7Cj4+ Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7Cj4+Pj4gK8KgwqDC oMKgwqDCoMKgfQo+Pj4+ICsKPj4+PiArwqDCoMKgwqDCoMKgwqB2YSA9IGFwYXJ0LT5hZGV2LT5i YXNlICsgb2Zmc2V0Owo+Pj4+ICvCoMKgwqDCoMKgwqDCoGlmICghbWFzaykgewo+Pj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAobGVuID09IHNpemVvZih1MzIpKQo+Pj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaW93cml0ZTMyKCoo KHUzMiAqKWRhdGEpLMKgIHZhKTsKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ZWxzZQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg bWVtY3B5X3RvaW8odmEsIGRhdGEsIGxlbik7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgfSBlbHNlIHsK Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdTMyIHZhbCA9IGlvcmVhZDMyKHZh KTsKPj4+PiArCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHZhbCAmPSB+bWFz azsKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdmFsIHw9ICooKHUzMiAqKWRh dGEpICYgbWFzazsKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaW93cml0ZTMy KHZhbCwgdmEpOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoH0KPj4+PiArCj4+Pj4gK8KgwqDCoMKgwqDC oMKgcmV0dXJuIChpbnQpbGVuOwo+Pj4+ICt9Cj4+Pj4gKwo+Pj4+ICsvKioKPj4+PiArICogYWll X3BhcnRfYWNjZXNzX3JlZ3MoKSAtIEFJIGVuZ2luZSBwYXJ0aXRpb24gcmVnaXN0ZXJzIGFjY2Vz cwo+Pj4+ICsgKiBAYXBhcnQ6IEFJIGVuZ2luZSBwYXJ0aXRpb24KPj4+PiArICogQG51bV9yZXFz OiBudW1iZXIgb2YgYWNjZXNzIHJlcXVlc3RzCj4+Pj4gKyAqIEByZXFzOiBhcnJheSBvZiByZWdp c3RlcnMgYWNjZXNzCj4+Pj4gKyAqIEByZXR1cm46IDAgZm9yIHN1Y2Nlc3MsIGFuZCBuZWdhdGl2 ZSB2YWx1ZSBmb3IgZmFpbHVyZS4KPj4+PiArICoKPj4+PiArICogVGhpcyBmdW5jdGlvbiBleGVj dXRlcyBBSSBlbmdpbmUgcGFydGl0aW9uIHJlZ2lzdGVyIGFjY2VzcyByZXF1ZXN0cy4KPj4+PiAr ICovCj4+Pj4gK3N0YXRpYyBpbnQgYWllX3BhcnRfYWNjZXNzX3JlZ3Moc3RydWN0IGFpZV9wYXJ0 aXRpb24gKmFwYXJ0LCB1MzIgbnVtX3JlcXMsCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGFpZV9yZWdfYXJn cyAqcmVxcykKPj4+PiArewo+Pj4+ICvCoMKgwqDCoMKgwqDCoHUzMiBpOwo+Pj4+ICsKPj4+PiAr wqDCoMKgwqDCoMKgwqBmb3IgKGkgPSAwOyBpIDwgbnVtX3JlcXM7IGkrKykgewo+Pj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgYWllX3JlZ19hcmdzICphcmdzID0gJnJl cXNbaV07Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGludCByZXQ7Cj4+Pj4g Kwo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoYXJncy0+b3AgIT0gQUlF X1JFR19XUklURSkgewo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgZGV2X2VycigmYXBhcnQtPmRldiwKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAiSW52YWxpZCByZWdpc3Rl ciBjb21tYW5kIHR5cGU6ICV1LlxuIiwKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBhcmdzLT5vcCk7Cj4+Pj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVJTlZBTDsK Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+Pj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqByZXQgPSBhaWVfcGFydF93cml0ZV9yZWdpc3RlcihhcGFydCwKPj4+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoc2l6ZV90KWFyZ3MtPm9mZnNldCwK Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzaXplb2YoYXJncy0+dmFsKSwK Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmYXJncy0+dmFsLCBhcmdzLT5t YXNrKTsKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHJldCA8IDApIHsK Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9l cnIoJmFwYXJ0LT5kZXYsICJyZWcgb3AgJXUgZmFpbGVkOiAweCVsbHguXG4iLAo+Pj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGFyZ3MtPm9wLCBhcmdzLT5vZmZzZXQpOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgfQo+Pj4+ICvCoMKgwqDCoMKgwqDCoH0KPj4+PiArCj4+Pj4gK8KgwqDCoMKg wqDCoMKgcmV0dXJuIDA7Cj4+Pj4gK30KPj4+PiArCj4+Pj4gK3N0YXRpYyBpbnQgYWllX3BhcnRf cmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKPj4+PiArewo+ Pj4+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBhaWVfcGFydGl0aW9uICphcGFydCA9IGZpbHAtPnBy aXZhdGVfZGF0YTsKPj4+PiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0Owo+Pj4+ICsKPj4+PiArwqDC oMKgwqDCoMKgwqAvKgo+Pj4+ICvCoMKgwqDCoMKgwqDCoCAqIFRPRE86IEl0IHdpbGwgbmVlZCB0 byByZXNldCB0aGUgU0hJTSBjb2x1bW5zIGFuZCBnYXRlIHRoZQo+Pj4+ICvCoMKgwqDCoMKgwqDC oCAqIHRpbGVzIG9mIHRoZSBwYXJ0aXRpb24uCj4+Pj4gK8KgwqDCoMKgwqDCoMKgICovCj4+Pj4g K8KgwqDCoMKgwqDCoMKgcmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZhcGFydC0+bWxv Y2spOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQpCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHJldHVybiByZXQ7Cj4+Pj4gKwo+Pj4+ICvCoMKgwqDCoMKgwqDCoGFwYXJ0 LT5zdGF0dXMgPSAwOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoG11dGV4X3VubG9jaygmYXBhcnQtPm1s b2NrKTsKPj4+PiArCj4+Pj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4+Pj4gK30KPj4+PiAr Cj4+Pj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgYWllX3BhcnRf cGh5c2ljYWxfdm1fb3BzID0gewo+Pj4+ICsjaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9U Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgLmFjY2VzcyA9IGdlbmVyaWNfYWNjZXNzX3BoeXMsCj4+Pj4g KyNlbmRpZgo+Pj4+ICt9Owo+Pj4+ICsKPj4+PiArc3RhdGljIGludCBhaWVfcGFydF9tbWFwKHN0 cnVjdCBmaWxlICpmcCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCj4+Pj4gK3sKPj4+PiAr wqDCoMKgwqDCoMKgwqBzdHJ1Y3QgYWllX3BhcnRpdGlvbiAqYXBhcnQgPSBmcC0+cHJpdmF0ZV9k YXRhOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBhaWVfZGV2aWNlICphZGV2ID0gYXBhcnQt PmFkZXY7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgdW5zaWduZWQgbG9uZyBvZmZzZXQgPSB2bWEtPnZt X3Bnb2ZmICogUEFHRV9TSVpFOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoHBoeXNfYWRkcl90IGFkZHI7 Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgc2l6ZV90IHNpemU7Cj4+Pj4gKwo+Pj4+ICvCoMKgwqDCoMKg wqDCoGlmICh2bWEtPnZtX2VuZCA8IHZtYS0+dm1fc3RhcnQpCj4+Pj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRUlOVkFMOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoC8qIE9u bHkgYWxsb3cgdXNlcnNwYWNlIGRpcmVjdGx5IHJlYWQgcmVnaXN0ZXJzICovCj4+Pj4gK8KgwqDC oMKgwqDCoMKgaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9XUklURSkgewo+Pj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZXJyKCZhcGFydC0+ZGV2LCAiJXM6IGRvIG5vdCBzdXBw b3J0IHdyaXRhYmxlIG1tYXAuXG4iLAo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgX19mdW5jX18pOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqByZXR1cm4gLUVJTlZBTDsKPj4+PiArwqDCoMKgwqDCoMKgwqB9Cj4+Pj4gK8KgwqDC oMKgwqDCoMKgdm1hLT52bV9wcml2YXRlX2RhdGEgPSBhcGFydDsKPj4+PiArwqDCoMKgwqDCoMKg wqB2bWEtPnZtX29wcyA9ICZhaWVfcGFydF9waHlzaWNhbF92bV9vcHM7Cj4+Pj4gK8KgwqDCoMKg wqDCoMKgc2l6ZSA9IGFwYXJ0LT5yYW5nZS5zaXplLmNvbCA8PCBhZGV2LT5jb2xfc2hpZnQ7Cj4+ Pj4gK8KgwqDCoMKgwqDCoMKgaWYgKCh2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQpID4gKHNp emUgLSBvZmZzZXQpKSB7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9l cnIoJmFwYXJ0LT5kZXYsCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAiJXM6IHNpemUgZXhjZWVkLlxuIiwgX19mdW5jX18pOwo+Pj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVJTlZBTDsKPj4+PiArwqDCoMKgwqDCoMKg wqB9Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgdm1hLT52bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfbm9uY2Fj aGVkKHZtYS0+dm1fcGFnZV9wcm90KTsKPj4+PiArwqDCoMKgwqDCoMKgwqAvKiBDYWxjdWxhdGUg dGhlIHBhcnRpdGlvbiBhZGRyZXNzICovCj4+Pj4gK8KgwqDCoMKgwqDCoMKgYWRkciA9IGFkZXYt PnJlcy0+c3RhcnQ7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgYWRkciArPSBhcGFydC0+cmFuZ2Uuc3Rh cnQuY29sIDw8IGFkZXYtPmNvbF9zaGlmdDsKPj4+PiArwqDCoMKgwqDCoMKgwqBhZGRyICs9IGFw YXJ0LT5yYW5nZS5zdGFydC5yb3cgPDwgYWRldi0+cm93X3NoaWZ0Owo+Pj4+ICvCoMKgwqDCoMKg wqDCoGFkZHIgKz0gb2Zmc2V0Owo+Pj4+ICvCoMKgwqDCoMKgwqDCoHJldHVybiByZW1hcF9wZm5f cmFuZ2Uodm1hLAo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHZtYS0+dm1fc3RhcnQsCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYWRkciA+PiBQQUdFX1NI SUZULAo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCwKPj4+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB2bWEtPnZt X3BhZ2VfcHJvdCk7Cj4+Pj4gK30KPj4+PiArCj4+Pj4gK3N0YXRpYyBsb25nIGFpZV9wYXJ0X2lv Y3RsKHN0cnVjdCBmaWxlICpmcCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZwo+Pj4+ IGFyZykKPj4+PiArewo+Pj4+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBhaWVfcGFydGl0aW9uICph cGFydCA9IGZwLT5wcml2YXRlX2RhdGE7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgdm9pZCBfX3VzZXIg KmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgbG9uZyByZXQ7 Cj4+Pj4gKwo+Pj4+ICvCoMKgwqDCoMKgwqDCoHN3aXRjaCAoY21kKSB7Cj4+Pj4gK8KgwqDCoMKg wqDCoMKgY2FzZSBBSUVfUkVHX0lPQ1RMOgo+Pj4+ICvCoMKgwqDCoMKgwqDCoHsKPj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGFpZV9yZWdfYXJncyByYWNjZXNzOwo+ Pj4+ICsKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGNvcHlfZnJvbV91 c2VyKCZyYWNjZXNzLCBhcmdwLCBzaXplb2YocmFjY2VzcykpKQo+Pj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FRkFVTFQ7Cj4+Pj4gKwo+ Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSBtdXRleF9sb2NrX2ludGVy cnVwdGlibGUoJmFwYXJ0LT5tbG9jayk7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGlmIChyZXQpCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqByZXR1cm4gcmV0Owo+Pj4+ICsKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcmV0ID0gYWllX3BhcnRfYWNjZXNzX3JlZ3MoYXBhcnQsIDEsICZyYWNjZXNzKTsKPj4+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbXV0ZXhfdW5sb2NrKCZhcGFydC0+bWxv Y2spOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPj4+PiArwqDC oMKgwqDCoMKgwqB9Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgZGVmYXVsdDoKPj4+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2VycigmYXBhcnQtPmRldiwgIkludmFsaWQgaW9jdGwg Y29tbWFuZCAldS5cbiIsIGNtZCk7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHJldCA9IC1FSU5WQUw7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFr Owo+Pj4+ICvCoMKgwqDCoMKgwqDCoH0KPj4+PiArCj4+Pj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJu IHJldDsKPj4+PiArfQo+Pj4+ICsKPj4+PiArY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBh aWVfcGFydF9mb3BzID0gewo+Pj4+ICvCoMKgwqDCoMKgwqDCoC5vd25lcsKgwqDCoMKgwqDCoMKg wqDCoMKgPSBUSElTX01PRFVMRSwKPj4+PiArwqDCoMKgwqDCoMKgwqAucmVsZWFzZcKgwqDCoMKg wqDCoMKgwqA9IGFpZV9wYXJ0X3JlbGVhc2UsCj4+Pj4gK8KgwqDCoMKgwqDCoMKgLm1tYXDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgPSBhaWVfcGFydF9tbWFwLAo+Pj4+ICvCoMKgwqDCoMKgwqDCoC51 bmxvY2tlZF9pb2N0bMKgPSBhaWVfcGFydF9pb2N0bCwKPj4+PiArfTsKPj4+PiArCj4+Pj4gKy8q Kgo+Pj4+ICsgKiBhaWVfcGFydF9yZWxlYXNlX2RldmljZSgpIC0gcmVsZWFzZSBhbiBBSSBlbmdp bmUgcGFydGl0aW9uIGluc3RhbmNlCj4+Pj4gKyAqIEBkZXY6IEFJIGVuZ2luZSBwYXJ0aXRpb24g ZGV2aWNlCj4+Pj4gKyAqCj4+Pj4gKyAqIEl0IHdpbGwgYmUgY2FsbGVkIGJ5IGRldmljZSBkcml2 ZXIgY29yZSB3aGVuIG5vIG9uZSBob2xkcyBhIHZhbGlkCj4+Pj4gKyAqIHBvaW50ZXIgdG8gQGRl diBhbnltb3JlLgo+Pj4+ICsgKi8KPj4+PiArc3RhdGljIHZvaWQgYWllX3BhcnRfcmVsZWFzZV9k ZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQo+Pj4+ICt7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgc3Ry dWN0IGFpZV9wYXJ0aXRpb24gKmFwYXJ0ID0gZGV2X3RvX2FpZXBhcnQoZGV2KTsKPj4+PiArwqDC oMKgwqDCoMKgwqBzdHJ1Y3QgYWllX2RldmljZSAqYWRldiA9IGFwYXJ0LT5hZGV2Owo+Pj4+ICvC oMKgwqDCoMKgwqDCoGludCByZXQ7Cj4+Pj4gKwo+Pj4+ICvCoMKgwqDCoMKgwqDCoHJldCA9IG11 dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmYWRldi0+bWxvY2spOwo+Pj4+ICvCoMKgwqDCoMKgwqDC oGlmIChyZXQpIHsKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X3dhcm4o JmFwYXJ0LT5kZXYsCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgImdldHRpbmcgYWRldi0+bWxvY2sgaXMgaW50ZXJydXB0ZWQgYnkgc2lnbmFsXG4i KTsKPj4+PiArwqDCoMKgwqDCoMKgwqB9Cj4+Pj4gKwo+Pj4+ICvCoMKgwqDCoMKgwqDCoGFpZV9y ZXNvdXJjZV9wdXRfcmVnaW9uKCZhZGV2LT5jb2xzX3JlcywgYXBhcnQtPnJhbmdlLnN0YXJ0LmNv bCwKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBhcGFydC0+cmFuZ2Uuc2l6ZS5jb2wpOwo+Pj4+ICvCoMKgwqDCoMKgwqDC oGxpc3RfZGVsKCZhcGFydC0+bm9kZSk7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgbXV0ZXhfdW5sb2Nr KCZhZGV2LT5tbG9jayk7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgcHV0X2RldmljZShhcGFydC0+ZGV2 LnBhcmVudCk7Cj4+Pj4gK30KPj4+PiArCj4+Pj4gKy8qKgo+Pj4+ICsgKiBhaWVfY3JlYXRlX3Bh cnRpdGlvbigpIC0gY3JlYXRlIEFJIGVuZ2luZSBwYXJ0aXRpb24gaW5zdGFuY2UKPj4+PiArICog QGFkZXY6IEFJIGVuZ2luZSBkZXZpY2UKPj4+PiArICogQHJhbmdlOiBBSSBlbmdpbmUgcGFydGl0 aW9uIHJhbmdlIHRvIGNoZWNrLiBBIHJhbmdlIGRlc2NyaWJlcyBhIGdyb3VwCj4+Pj4gKyAqwqDC oMKgwqDCoMKgwqAgb2YgQUkgZW5naW5lIHRpbGVzLgo+Pj4+ICsgKiBAcmV0dXJuOiBjcmVhdGVk IEFJIGVuZ2luZSBwYXJ0aXRpb24gcG9pbnRlciBmb3Igc3VjY2VzcywgYW5kIFBUUl9FUlIKPj4+ PiArICrCoMKgwqDCoMKgwqDCoMKgIGZvciBmYWlsdXJlLgo+Pj4+ICsgKgo+Pj4+ICsgKiBUaGlz IGZ1bmN0aW9uIGNyZWF0ZXMgYW4gQUkgZW5naW5lIHBhcnRpdGlvbiBpbnN0YW5jZS4KPj4+PiAr ICogSXQgY3JlYXRlcyBBSSBlbmdpbmUgcGFydGl0aW9uLCB0aGUgQUkgZW5naW5lIHBhcnRpdGlv biBkZXZpY2UgYW5kCj4+Pj4gKyAqIHRoZSBBSSBlbmdpbmUgcGFydGl0aW9uIGNoYXJhY3RlciBk ZXZpY2UuCj4+Pj4gKyAqLwo+Pj4+ICtzdGF0aWMgc3RydWN0IGFpZV9wYXJ0aXRpb24gKmFpZV9j cmVhdGVfcGFydGl0aW9uKHN0cnVjdCBhaWVfZGV2aWNlICphZGV2LAo+Pj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGFpZV9yYW5nZSAqcmFuZ2UpCj4+ Pj4gK3sKPj4+PiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgYWllX3BhcnRpdGlvbiAqYXBhcnQ7Cj4+ Pj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRldmljZSAqZGV2Owo+Pj4+ICvCoMKgwqDCoMKgwqDC oGNoYXIgZGV2bmFtZVszMl07Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgaW50IHJldDsKPj4+PiArCj4+ Pj4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZhZGV2LT5t bG9jayk7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCkKPj4+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcmV0dXJuIEVSUl9QVFIocmV0KTsKPj4+PiArCj4+Pj4gK8KgwqDCoMKg wqDCoMKgcmV0ID0gYWllX3Jlc291cmNlX2NoZWNrX3JlZ2lvbigmYWRldi0+Y29sc19yZXMsIHJh bmdlLT5zdGFydC5jb2wsCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJhbmdlLT5zaXplLmNv bCk7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCAhPSByYW5nZS0+c3RhcnQuY29sKSB7Cj4+ Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9lcnIoJmFkZXYtPmRldiwgImlu dmFsaWQgcGFydGl0aW9uICgldSwldSkoJXUsJXUpLlxuIiwKPj4+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJhbmdlLT5zdGFydC5jb2wsIHJhbmdlLT5z dGFydC5yb3csCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqByYW5nZS0+c2l6ZS5jb2wsIHJhbmdlLT5zaXplLnJvdyk7Cj4+Pj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoG11dGV4X3VubG9jaygmYWRldi0+bWxvY2spOwo+Pj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKPj4+PiAr wqDCoMKgwqDCoMKgwqB9Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gYWllX3Jlc291cmNlX2dl dF9yZWdpb24oJmFkZXYtPmNvbHNfcmVzLCByYW5nZS0+c3RhcnQuY29sLAo+Pj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgcmFuZ2UtPnNpemUuY29sKTsKPj4+PiArwqDCoMKgwqDCoMKgwqBpZiAocmV0ICE9 IHJhbmdlLT5zdGFydC5jb2wpIHsKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ZGV2X2VycigmYWRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBwYXJ0aXRpb24KPj4+PiAoJXUsJXUp KCV1LCV1KS5cbiIsCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqByYW5nZS0+c3RhcnQuY29sLCByYW5nZS0+c3RhcnQucm93LAo+Pj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmFuZ2UtPnNpemUuY29sLCBy YW5nZS0+c2l6ZS5yb3cpOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBtdXRl eF91bmxvY2soJmFkZXYtPm1sb2NrKTsKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgcmV0dXJuIEVSUl9QVFIoLUVGQVVMVCk7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgfQo+Pj4+ICvC oMKgwqDCoMKgwqDCoG11dGV4X3VubG9jaygmYWRldi0+bWxvY2spOwo+Pj4+ICsKPj4+PiArwqDC oMKgwqDCoMKgwqBhcGFydCA9IGRldm1fa3phbGxvYygmYWRldi0+ZGV2LCBzaXplb2YoKmFwYXJ0 KSwgR0ZQX0tFUk5FTCk7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgaWYgKCFhcGFydCkKPj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4+Pj4g Kwo+Pj4+ICvCoMKgwqDCoMKgwqDCoGFwYXJ0LT5hZGV2ID0gYWRldjsKPj4+PiArwqDCoMKgwqDC oMKgwqBtZW1jcHkoJmFwYXJ0LT5yYW5nZSwgcmFuZ2UsIHNpemVvZigqcmFuZ2UpKTsKPj4+PiAr wqDCoMKgwqDCoMKgwqBtdXRleF9pbml0KCZhcGFydC0+bWxvY2spOwo+Pj4+ICsKPj4+PiArwqDC oMKgwqDCoMKgwqAvKiBDcmVhdGUgQUkgZW5naW5lIHBhcnRpdGlvbiBkZXZpY2UgKi8KPj4+PiAr wqDCoMKgwqDCoMKgwqBkZXYgPSAmYXBhcnQtPmRldjsKPj4+PiArwqDCoMKgwqDCoMKgwqBkZXZp Y2VfaW5pdGlhbGl6ZShkZXYpOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoGRldi0+cGFyZW50ID0gJmFk ZXYtPmRldjsKPj4+PiArwqDCoMKgwqDCoMKgwqBkZXYtPmNsYXNzID0gYWllX2NsYXNzOwo+Pj4+ ICvCoMKgwqDCoMKgwqDCoGRldl9zZXRfZHJ2ZGF0YShkZXYsIGFwYXJ0KTsKPj4+PiArwqDCoMKg wqDCoMKgwqBzbnByaW50ZihkZXZuYW1lLCBzaXplb2YoZGV2bmFtZSkgLSAxLCAiYWllcGFydF8l ZF8lZCIsCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhcGFydC0+cmFuZ2Uu c3RhcnQuY29sLCBhcGFydC0+cmFuZ2Uuc2l6ZS5jb2wpOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoGRl dl9zZXRfbmFtZShkZXYsIGRldm5hbWUpOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoC8qIFdlIGNhbiBu b3cgcmVseSBvbiB0aGUgcmVsZWFzZSBmdW5jdGlvbiBmb3IgY2xlYW51cCAqLwo+Pj4+ICvCoMKg wqDCoMKgwqDCoGRldi0+cmVsZWFzZSA9IGFpZV9wYXJ0X3JlbGVhc2VfZGV2aWNlOwo+Pj4+ICvC oMKgwqDCoMKgwqDCoHJldCA9IGRldmljZV9hZGQoZGV2KTsKPj4+PiArwqDCoMKgwqDCoMKgwqBp ZiAocmV0KSB7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9lcnIoZGV2 LCAiZGV2aWNlX2FkZCBmYWlsZWQ6ICVkXG4iLCByZXQpOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBwdXRfZGV2aWNlKGRldik7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHJldHVybiBFUlJfUFRSKHJldCk7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgfQo+Pj4+ ICsKPj4+PiArwqDCoMKgwqDCoMKgwqByZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmFk ZXYtPm1sb2NrKTsKPj4+PiArwqDCoMKgwqDCoMKgwqBpZiAocmV0KSB7Cj4+Pj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHB1dF9kZXZpY2UoZGV2KTsKPj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIEVSUl9QVFIocmV0KTsKPj4+PiArwqDCoMKgwqDCoMKg wqB9Cj4+Pj4gKwo+Pj4+ICvCoMKgwqDCoMKgwqDCoGxpc3RfYWRkX3RhaWwoJmFwYXJ0LT5ub2Rl LCAmYWRldi0+cGFydGl0aW9ucyk7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgbXV0ZXhfdW5sb2NrKCZh ZGV2LT5tbG9jayk7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgZ2V0X2RldmljZSgmYWRldi0+ZGV2KTsK Pj4+PiArwqDCoMKgwqDCoMKgwqBkZXZfZGJnKGRldiwgImNyZWF0ZWQgQUlFIHBhcnRpdGlvbiBk ZXZpY2UuXG4iKTsKPj4+PiArCj4+Pj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIGFwYXJ0Owo+Pj4+ ICt9Cj4+Pj4gKwo+Pj4+ICtzdHJ1Y3QgYWllX3BhcnRpdGlvbiAqCj4+Pj4gK29mX2FpZV9wYXJ0 X3Byb2JlKHN0cnVjdCBhaWVfZGV2aWNlICphZGV2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5jKQo+ Pj4+ICt7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGFpZV9wYXJ0aXRpb24gKmFwYXJ0Owo+ Pj4+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBhaWVfcmFuZ2UgcmFuZ2U7Cj4+Pj4gK8KgwqDCoMKg wqDCoMKgdTMyIHBhcnRpdGlvbl9pZCwgcmVnc1s0XTsKPj4+PiArwqDCoMKgwqDCoMKgwqBpbnQg cmV0Owo+Pj4+ICsKPj4+PiArwqDCoMKgwqDCoMKgwqAvKiBTZWxlY3QgZGV2aWNlIGRyaXZlciAq Lwo+Pj4+ICvCoMKgwqDCoMKgwqDCoHJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyX2FycmF5KG5j LCAicmVnIiwgcmVncywgQVJSQVlfU0laRShyZWdzKSk7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgaWYg KHJldCA8IDApIHsKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2Vycigm YWRldi0+ZGV2LAo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgInByb2JlICVwT0YgZmFpbGVkLCBubyB0aWxlcyByYW5nZSBpbmZvcm1hdGlvbi5cbiIs Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBuYyk7 Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBFUlJfUFRSKHJldCk7 Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgfQo+Pj4+ICvCoMKgwqDCoMKgwqDCoHJhbmdlLnN0YXJ0LmNv bCA9IHJlZ3NbMF07Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgcmFuZ2Uuc3RhcnQucm93ID0gcmVnc1sx XTsKPj4+PiArwqDCoMKgwqDCoMKgwqByYW5nZS5zaXplLmNvbCA9IHJlZ3NbMl07Cj4+Pj4gK8Kg wqDCoMKgwqDCoMKgcmFuZ2Uuc2l6ZS5yb3cgPSByZWdzWzNdOwo+Pj4+ICsKPj4+PiArwqDCoMKg wqDCoMKgwqByZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMl9pbmRleChuYywgInhsbngscGFydGl0 aW9uLWlkIiwgMCwKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZwYXJ0aXRpb25faWQpOwo+ Pj4+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQgPCAwKSB7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGRldl9lcnIoJmFkZXYtPmRldiwKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCJwcm9iZSAlcE9GIGZhaWxlZCwgbm8gcGFydGl0 aW9uIGlkLlxuIiwgbmMpOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1 cm4gRVJSX1BUUihyZXQpOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoH0KPj4+PiArCj4+Pj4gK8KgwqDC oMKgwqDCoMKgcmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZhZGV2LT5tbG9jayk7Cj4+ Pj4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCkKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcmV0dXJuIEVSUl9QVFIocmV0KTsKPj4+PiArCj4+Pj4gK8KgwqDCoMKgwqDCoMKgYXBh cnQgPSBhaWVfZ2V0X3BhcnRpdGlvbl9mcm9tX2lkKGFkZXYsIHBhcnRpdGlvbl9pZCk7Cj4+Pj4g K8KgwqDCoMKgwqDCoMKgbXV0ZXhfdW5sb2NrKCZhZGV2LT5tbG9jayk7Cj4+Pj4gK8KgwqDCoMKg wqDCoMKgaWYgKGFwYXJ0KSB7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRl dl9lcnIoJmFkZXYtPmRldiwKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCJwcm9iZSBmYWlsZWQ6IHBhcnRpdGlvbiAldSBleGlzdHMuXG4iLAo+Pj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcGFydGl0aW9u X2lkKTsKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIEVSUl9QVFIo cmV0KTsKPj4+PiArwqDCoMKgwqDCoMKgwqB9Cj4+Pj4gKwo+Pj4+ICvCoMKgwqDCoMKgwqDCoGFw YXJ0ID0gYWllX2NyZWF0ZV9wYXJ0aXRpb24oYWRldiwgJnJhbmdlKTsKPj4+PiArwqDCoMKgwqDC oMKgwqBpZiAoSVNfRVJSKGFwYXJ0KSkgewo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBkZXZfZXJyKCZhZGV2LT5kZXYsCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAiJXM6IGZhaWxlZCB0byBjcmVhdGUgcGFydCgldSwldSksKCV1 LCV1KS5cbiIsCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBfX2Z1bmNfXywgcmFuZ2Uuc3RhcnQuY29sLCByYW5nZS5zdGFydC5yb3csCj4+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByYW5nZS5zaXplLmNv bCwgcmFuZ2Uuc2l6ZS5yb3cpOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBy ZXR1cm4gYXBhcnQ7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgfQo+Pj4+ICsKPj4+PiArwqDCoMKgwqDC oMKgwqBvZl9ub2RlX2dldChuYyk7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgYXBhcnQtPmRldi5vZl9u b2RlID0gbmM7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgYXBhcnQtPnBhcnRpdGlvbl9pZCA9IHBhcnRp dGlvbl9pZDsKPj4+PiArCj4+Pj4gK8KgwqDCoMKgwqDCoMKgZGV2X2luZm8oJmFkZXYtPmRldiwK Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICJBSSBlbmdpbmUgcGFydCgldSwl dSksKCV1LCV1KSwgaWQgJXUgaXMgcHJvYmVkCj4+Pj4gc3VjY2Vzc2Z1bGx5LlxuIiwKPj4+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJhbmdlLnN0YXJ0LmNvbCwgcmFuZ2Uuc3Rh cnQucm93LAo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmFuZ2Uuc2l6ZS5j b2wsIHJhbmdlLnNpemUucm93LCBhcGFydC0+cGFydGl0aW9uX2lkKTsKPj4+PiArCj4+Pj4gK8Kg wqDCoMKgwqDCoMKgcmV0dXJuIGFwYXJ0Owo+Pj4+ICt9Cj4+Pj4gKwo+Pj4+ICsvKioKPj4+PiAr ICogYWllX2Rlc3Ryb3lfcGFydCgpIC0gZGVzdHJveSBBSSBlbmdpbmUgcGFydGl0aW9uCj4+Pj4g KyAqIEBhcGFydDogQUkgZW5naW5lIHBhcnRpdGlvbgo+Pj4+ICsgKgo+Pj4+ICsgKiBUaGlzIGZ1 bmN0aW9uIHdpbGwgcmVtb3ZlIEFJIGVuZ2luZSBwYXJ0aXRpb24uCj4+Pj4gKyAqLwo+Pj4+ICt2 b2lkIGFpZV9wYXJ0X3JlbW92ZShzdHJ1Y3QgYWllX3BhcnRpdGlvbiAqYXBhcnQpCj4+Pj4gK3sK Pj4+PiArwqDCoMKgwqDCoMKgwqBkZXZpY2VfZGVsKCZhcGFydC0+ZGV2KTsKPj4+PiArwqDCoMKg wqDCoMKgwqBwdXRfZGV2aWNlKCZhcGFydC0+ZGV2KTsKPj4+PiArfQo+Pj4+IGRpZmYgLS1naXQg YS9kcml2ZXJzL21pc2MveGlsaW54LWFpLWVuZ2luZS9haS1lbmdpbmUtcmVzLmMKPj4+PiBiL2Ry aXZlcnMvbWlzYy94aWxpbngtYWktZW5naW5lL2FpLWVuZ2luZS1yZXMuYwo+Pj4+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0Cj4+Pj4gaW5kZXggMDAwMDAwMC4uMzZmMDhiZgo+Pj4+IC0tLSAvZGV2L251 bGwKPj4+PiArKysgYi9kcml2ZXJzL21pc2MveGlsaW54LWFpLWVuZ2luZS9haS1lbmdpbmUtcmVz LmMKPj4+PiBAQCAtMCwwICsxLDExNCBAQAo+Pj4+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogR1BMLTIuMAo+Pj4+ICsvKgo+Pj4+ICsgKiBYaWxpbnggQUkgRW5naW5lIGRldmljZSBkcml2 ZXIKPj4+PiArICoKPj4+PiArICogQ29weXJpZ2h0IChDKSAyMDIwIFhpbGlueCwgSW5jLgo+Pj4+ ICsgKi8KPj4+PiArCj4+Pj4gKyNpbmNsdWRlIDxsaW51eC9iaXRtYXAuaD4KPj4+PiArCj4+Pj4g KyNpbmNsdWRlICJhaS1lbmdpbmUtaW50ZXJuYWwuaCIKPj4+PiArCj4+Pj4gKy8qKgo+Pj4+ICsg KiBhaWVfcmVzb3VyY2VfaW5pdGlhbGl6ZSgpIC0gaW5pdGlhbGl6ZSBBSSBlbmdpbmUgcmVzb3Vy Y2UKPj4+PiArICogQHJlczogcG9pbnRlciB0byBBSSBlbmdpbmUgcmVzb3VyY2UKPj4+PiArICog QGNvdW50OiB0b3RhbCBudW1iZXIgb2YgZWxlbWVudCBvZiB0aGlzIHJlc291cmNlCj4+Pj4gKyAq IEByZXR1cm46IDAgZm9yIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIGZvciBmYWlsdXJlLgo+Pj4+ ICsgKgo+Pj4+ICsgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgaW5pdGlhbGl6ZSB0aGUgZGF0YSBzdHJ1 Y3R1cmUgZm9yIHRoZQo+Pj4+ICsgKiByZXNvdXJjZS4KPj4+PiArICovCj4+Pj4gK2ludCBhaWVf cmVzb3VyY2VfaW5pdGlhbGl6ZShzdHJ1Y3QgYWllX3Jlc291cmNlICpyZXMsIGludCBjb3VudCkK Pj4+PiArewo+Pj4+ICvCoMKgwqDCoMKgwqDCoGlmICghcmVzIHx8ICFjb3VudCkKPj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FSU5WQUw7Cj4+Pj4gK8KgwqDCoMKg wqDCoMKgcmVzLT5iaXRtYXAgPSBiaXRtYXBfemFsbG9jKGNvdW50LCBHRlBfS0VSTkVMKTsKPj4+ PiArwqDCoMKgwqDCoMKgwqBpZiAoIXJlcy0+Yml0bWFwKQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqByZXR1cm4gLUVOT01FTTsKPj4+PiArwqDCoMKgwqDCoMKgwqByZXMtPnRv dGFsID0gY291bnQ7Cj4+Pj4gKwo+Pj4+ICvCoMKgwqDCoMKgwqDCoHJldHVybiAwOwo+Pj4+ICt9 Cj4+Pj4gKwo+Pj4+ICsvKioKPj4+PiArICogYWllX3Jlc291cmNlX3VuaW5pdGlhbGl6ZSgpIC0g dW5pbml0aWFsaXplIEFJIGVuZ2luZSByZXNvdXJjZQo+Pj4+ICsgKiBAcmVzOiBwb2ludGVyIHRv IEFJIGVuZ2luZSByZXNvdXJjZQo+Pj4+ICsgKgo+Pj4+ICsgKiBUaGlzIGZ1bmN0aW9uIHdpbGwg cmVsZWFzZSB0aGUgQUkgZW5naW5lIHJlc291cmNlIGRhdGEgbWVtYmVycy4KPj4+PiArICovCj4+ Pj4gK3ZvaWQgYWllX3Jlc291cmNlX3VuaW5pdGlhbGl6ZShzdHJ1Y3QgYWllX3Jlc291cmNlICpy ZXMpCj4+Pj4gK3sKPj4+PiArwqDCoMKgwqDCoMKgwqByZXMtPnRvdGFsID0gMDsKPj4+PiArwqDC oMKgwqDCoMKgwqBpZiAocmVzLT5iaXRtYXApCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGJpdG1hcF9mcmVlKHJlcy0+Yml0bWFwKTsKPj4+PiArfQo+Pj4+ICsKPj4+PiArLyoq Cj4+Pj4gKyAqIGFpZV9yZXNvdXJjZV9jaGVjaygpIC0gY2hlY2sgYXZhaWxhYmlsaXR5IG9mIHJl cXVlc3RlZCByZXNvdXJjZQo+Pj4+ICsgKiBAcmVzOiBwb2ludGVyIHRvIEFJIGVuZ2luZSByZXNv dXJjZSB0byBjaGVjawo+Pj4+ICsgKiBAc3RhcnQ6IHN0YXJ0IGluZGV4IG9mIHRoZSByZXF1aXJl ZCByZXNvdXJjZSwgaXQgd2lsbCBvbmx5IGJlIHVzZWQgaWYKPj4+PiArICrCoMKgwqDCoMKgwqDC oCBAY29udGludW91cyBpcyAxLiBJdCB3aWxsIGNoZWNrIHRoZSBhdmFpbGFibGUgcmVzb3VyY2Ug c3RhcnRpbmcKPj4+PiBmcm9tCj4+Pj4gKyAqwqDCoMKgwqDCoMKgwqAgQHN0YXJ0Cj4+Pj4gKyAq IEBjb3VudDogbnVtYmVyIG9mIHJlcXVlc3RlZCBlbGVtZW50Cj4+Pj4gKyAqIEByZXR1cm46IHN0 YXJ0IHJlc291cmNlIGlkIGlmIHRoZSByZXF1ZXN0ZWQgbnVtYmVyIG9mIHJlc291cmNlcyBhcmUK Pj4+PiBhdmFpbGFibGUKPj4+PiArICrCoMKgwqDCoMKgwqDCoMKgIEl0IHdpbGwgcmV0dXJuIG5l Z2F0aXZlIHZhbHVlIG9mIGVycm9ycy4KPj4+PiArICoKPj4+PiArICogVGhpcyBmdW5jdGlvbiB3 aWxsIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkuIEl0IHdpbGwgcmV0dXJuIHN0YXJ0IHJlc291cmNl Cj4+Pj4gaWQKPj4+PiArICogaWYgdGhlIHJlcXVlc3RlZCBudW1iZXIgb2YgcmVzb3VyY2VzIGFy ZSBhdmFpbGFibGUuCj4+Pj4gKyAqLwo+Pj4+ICtpbnQgYWllX3Jlc291cmNlX2NoZWNrX3JlZ2lv bihzdHJ1Y3QgYWllX3Jlc291cmNlICpyZXMsCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHUzMiBzdGFydCwgdTMyIGNvdW50KQo+ Pj4+ICt7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgdW5zaWduZWQgbG9uZyBpZDsKPj4+PiArCj4+Pj4g K8KgwqDCoMKgwqDCoMKgaWYgKCFyZXMgfHwgIXJlcy0+Yml0bWFwIHx8ICFjb3VudCkKPj4+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FSU5WQUw7Cj4+Pj4gK8KgwqDC oMKgwqDCoMKgaWQgPSBiaXRtYXBfZmluZF9uZXh0X3plcm9fYXJlYShyZXMtPmJpdG1hcCwgcmVz LT50b3RhbCwgc3RhcnQsCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvdW50LCAwKTsKPj4+ PiArwqDCoMKgwqDCoMKgwqBpZiAoaWQgPj0gcmVzLT50b3RhbCkKPj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FUkFOR0U7Cj4+Pj4gKwo+Pj4+ICvCoMKgwqDCoMKg wqDCoHJldHVybiAoaW50KWlkOwo+Pj4+ICt9Cj4+Pj4gKwo+Pj4+ICsvKioKPj4+PiArICogYWll X3Jlc291cmNlX2dldF9yZWdpb24oKSAtIGdldCByZXF1ZXN0ZWQgQUkgZW5naW5lIHJlc291cmNl Cj4+Pj4gKyAqIEByZXM6IHBvaW50ZXIgdG8gQUkgZW5naW5lIHJlc291cmNlIHRvIGNoZWNrCj4+ Pj4gKyAqIEBjb3VudDogbnVtYmVyIG9mIHJlcXVlc3RlZCBlbGVtZW50Cj4+Pj4gKyAqIEBzdGFy dDogc3RhcnQgaW5kZXggb2YgdGhlIHJlcXVpcmVkIHJlc291cmNlCj4+Pj4gKyAqIEByZXR1cm46 IHN0YXJ0IHJlc291cmNlIGlkIGZvciBzdWNjZXNzLCBhbmQgbmVnYXRpdmUgdmFsdWUgZm9yIGZh aWx1cmUuCj4+Pj4gKyAqCj4+Pj4gKyAqIFRoaXMgZnVuY3Rpb24gY2hlY2sgaWYgdGhlIHJlcXVl c3RlZCBBSSBlbmdpbmUgcmVzb3VyY2UgaXMgYXZhaWxhYmxlLgo+Pj4+ICsgKiBJZiBpdCBpcyBh dmFpbGFibGUsIG1hcmsgaXQgdXNlZCBhbmQgcmV0dXJuIHRoZSBzdGFydCByZXNvdXJjZSBpZC4K Pj4+PiArICovCj4+Pj4gK2ludCBhaWVfcmVzb3VyY2VfZ2V0X3JlZ2lvbihzdHJ1Y3QgYWllX3Jl c291cmNlICpyZXMsIHUzMiBzdGFydCwgdTMyIGNvdW50KQo+Pj4+ICt7Cj4+Pj4gK8KgwqDCoMKg wqDCoMKgdW5zaWduZWQgbG9uZyBvZmY7Cj4+Pj4gKwo+Pj4+ICvCoMKgwqDCoMKgwqDCoGlmICgh cmVzIHx8ICFyZXMtPmJpdG1hcCB8fCAhY291bnQpCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHJldHVybiAtRUlOVkFMOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoG9mZiA9IGJpdG1h cF9maW5kX25leHRfemVyb19hcmVhKHJlcy0+Yml0bWFwLCByZXMtPnRvdGFsLCBzdGFydCwKPj4+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvdW50LCAwKTsKPj4+PiArwqDCoMKgwqDCoMKgwqBp ZiAob2ZmID49IHJlcy0+dG90YWwpIHsKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgcHJfZXJyKCJGYWlsZWQgdG8gZ2V0IGF2YWlsYWJsZSBBSSBlbmdpbmUgcmVzb3VyY2UuXG4i KTsKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FUkFOR0U7Cj4+ Pj4gK8KgwqDCoMKgwqDCoMKgfQo+Pj4+ICvCoMKgwqDCoMKgwqDCoGJpdG1hcF9zZXQocmVzLT5i aXRtYXAsIG9mZiwgY291bnQpOwo+Pj4+ICsKPj4+PiArwqDCoMKgwqDCoMKgwqByZXR1cm4gKGlu dClvZmY7Cj4+Pj4gK30KPj4+PiArCj4+Pj4gKy8qKgo+Pj4+ICsgKiBhaWVfcmVzb3VyY2VfcHV0 X3JlZ2lvbigpIC0gcmVsZWFzZSByZXF1ZXN0ZWQgQUkgZW5naW5lIHJlc291cmNlCj4+Pj4gKyAq IEByZXM6IHBvaW50ZXIgdG8gQUkgZW5naW5lIHJlc291cmNlIHRvIGNoZWNrCj4+Pj4gKyAqIEBz dGFydDogc3RhcnQgaW5kZXggb2YgdGhlIHJlc291cmNlIHRvIHJlbGVhc2UKPj4+PiArICogQGNv dW50OiBudW1iZXIgb2YgZWxlbWVudHMgdG8gcmVsZWFzZQo+Pj4+ICsgKgo+Pj4+ICsgKiBUaGlz IGZ1bmN0aW9uIHJlbGVhc2UgdGhlIHJlcXVlc3RlZCBBSSBlbmdpbmUgcmVzb3VyY2UuCj4+Pj4g KyAqLwo+Pj4+ICt2b2lkIGFpZV9yZXNvdXJjZV9wdXRfcmVnaW9uKHN0cnVjdCBhaWVfcmVzb3Vy Y2UgKnJlcywgaW50IHN0YXJ0LCB1MzIgY291bnQpCj4+Pj4gK3sKPj4+PiArwqDCoMKgwqDCoMKg wqBpZiAoIXJlcyB8fCAhY291bnQpCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHJldHVybjsKPj4+PiArwqDCoMKgwqDCoMKgwqBiaXRtYXBfY2xlYXIocmVzLT5iaXRtYXAsIHN0 YXJ0LCBjb3VudCk7Cj4+Pj4gK30KPj4+PiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4 L3hsbngtYWktZW5naW5lLmggYi9pbmNsdWRlL3VhcGkvbGludXgveGxueC1haS0KPj4+PiBlbmdp bmUuaAo+Pj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+Pj4gaW5kZXggMDAwMDAwMC4uYWNiYzc4 MQo+Pj4+IC0tLSAvZGV2L251bGwKPj4+PiArKysgYi9pbmNsdWRlL3VhcGkvbGludXgveGxueC1h aS1lbmdpbmUuaAo+Pj4+IEBAIC0wLDAgKzEsMTA3IEBACj4+Pj4gKy8qIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBHUEwtMi4wIFdJVEggTGludXgtc3lzY2FsbC1ub3RlICovCj4+Pj4gKy8qCj4+ Pj4gKyAqIENvcHlyaWdodCAoYykgMjAyMCwgWGlsaW54IEluYy4KPj4+PiArICovCj4+Pj4gKwo+ Pj4+ICsjaWZuZGVmIF9VQVBJX0FJX0VOR0lORV9IXwo+Pj4+ICsjZGVmaW5lIF9VQVBJX0FJX0VO R0lORV9IXwo+Pj4+ICsKPj4+PiArI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+Cj4+Pj4gKyNpbmNs dWRlIDxsaW51eC90eXBlcy5oPgo+Pj4+ICsKPj4+PiArZW51bSBhaWVfcmVnX29wIHsKPj4+PiAr wqDCoMKgwqDCoMKgwqBBSUVfUkVHX1dSSVRFLAo+Pj4+ICt9Owo+Pj4+ICsKPj4+PiArLyogQUkg ZW5naW5lIHBhcnRpdGlvbiBpcyBpbiB1c2UgKi8KPj4+PiArI2RlZmluZSBYQUlFX1BBUlRfU1RB VFVTX0lOVVNFwqDCoMKgwqDCoMKgwqDCoMKgKDFVIDw8IDApCj4+Pj4gKwo+Pj4+ICsvKioKPj4+ PiArICogc3RydWN0IGFpZV9sb2NhdGlvbiAtIEFJRSBsb2NhdGlvbiBpbmZvcm1hdGlvbgo+Pj4+ ICsgKiBAY29sOiBjb2x1bW4gaWQKPj4+PiArICogQHJvdzogcm93IGlkCj4+Pj4gKyAqLwo+Pj4+ ICtzdHJ1Y3QgYWllX2xvY2F0aW9uIHsKPj4+PiArwqDCoMKgwqDCoMKgwqBfX3UzMiBjb2w7Cj4+ Pj4gK8KgwqDCoMKgwqDCoMKgX191MzIgcm93Owo+Pj4+ICt9Owo+Pj4+ICsKPj4+PiArLyoqCj4+ Pj4gKyAqIHN0cnVjdCBhaWVfcmFuZ2UgLSBBSUUgcmFuZ2UgaW5mb3JtYXRpb24KPj4+PiArICog QHN0YXJ0OiBzdGFydCB0aWxlIGxvY2F0aW9uCj4+Pj4gKyAqIEBzaXplOiBzaXplIG9mIHRoZSBy YW5nZSwgbnVtYmVyIG9mIGNvbHVtbnMgYW5kIHJvd3MKPj4+PiArICovCj4+Pj4gK3N0cnVjdCBh aWVfcmFuZ2Ugewo+Pj4+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBhaWVfbG9jYXRpb24gc3RhcnQ7 Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGFpZV9sb2NhdGlvbiBzaXplOwo+Pj4+ICt9Owo+ Pj4+ICsKPj4+PiArLyoqCj4+Pj4gKyAqIHN0cnVjdCBhaWVfcmVnX2FyZ3MgLSBBSUUgYWNjZXNz IHJlZ2lzdGVyIGFyZ3VtZW50cwo+Pj4+ICsgKiBAb3A6IGlmIHRoaXMgcmVxdWVzdCBpcyB0byBy ZWFkLCB3cml0ZSBvciBwb2xsIHJlZ2lzdGVyCj4+Pj4gKyAqIEBtYXNrOiBtYXNrIGZvciBtYXNr IHdyaXRlLCAwIGZvciBub3QgbWFzayB3cml0ZQo+Pj4+ICsgKiBAb2Zmc2V0OiBvZmZzZXQgb2Yg cmVnaXN0ZXIgdG8gdGhlIHN0YXJ0IG9mIGFuIEFJIGVuZ2luZSBwYXJ0aXRpb24KPj4+PiArICog QHZhbDogdmFsdWUgdG8gd3JpdGUgb3IgZ2V0Cj4+Pj4gKyAqLwo+Pj4+ICtzdHJ1Y3QgYWllX3Jl Z19hcmdzIHsKPj4+PiArwqDCoMKgwqDCoMKgwqBlbnVtIGFpZV9yZWdfb3Agb3A7Cj4+Pj4gK8Kg wqDCoMKgwqDCoMKgX191MzIgbWFzazsKPj4+PiArwqDCoMKgwqDCoMKgwqBfX3U2NCBvZmZzZXQ7 Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgX191MzIgdmFsOwo+Pj4+ICt9Owo+Pj4+ICsKPj4+PiArLyoq Cj4+Pj4gKyAqIHN0cnVjdCBhaWVfcmFuZ2VfYXJncyAtIEFJRSByYW5nZSByZXF1ZXN0IGFyZ3Vt ZW50cwo+Pj4+ICsgKiBAcGFydGl0aW9uX2lkOiBwYXJ0aXRpb24gaWQuIEl0IGlzIHVzZWQgdG8g aWRlbnRpZnkgdGhlCj4+Pj4gKyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBBSSBlbmdp bmUgcGFydGl0aW9uIGluIHRoZSBzeXN0ZW0uCj4+Pj4gKyAqIEB1aWQ6IGltYWdlIGlkZW50aWZp ZXIgbG9hZGVkIG9uIHRoZSBBSSBlbmdpbmUgcGFydGl0aW9uCj4+Pj4gKyAqIEByYW5nZTogcmFu Z2Ugb2YgQUlFIHRpbGVzCj4+Pj4gKyAqIEBzdGF0dXM6IGluZGljYXRlIGlmIHRoZSBBSSBlbmdp bmUgaXMgaW4gdXNlLgo+Pj4+ICsgKsKgwqDCoMKgwqDCoMKgwqAgMCBtZWFucyBub3QgaW4gdXNl ZCwgb3RoZXJ3aXNlLCBpbiB1c2UuCj4+Pj4gKyAqLwo+Pj4+ICtzdHJ1Y3QgYWllX3JhbmdlX2Fy Z3Mgewo+Pj4+ICvCoMKgwqDCoMKgwqDCoF9fdTMyIHBhcnRpdGlvbl9pZDsKPj4+PiArwqDCoMKg wqDCoMKgwqBfX3UzMiB1aWQ7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGFpZV9yYW5nZSBy YW5nZTsKPj4+PiArwqDCoMKgwqDCoMKgwqBfX3UzMiBzdGF0dXM7Cj4+Pj4gK307Cj4+Pj4gKwo+ Pj4+ICsvKioKPj4+PiArICogc3RydWN0IGFpZV9wYXJ0aXRpb25fcXVlcnkgLSBBSUUgcGFydGl0 aW9uIHF1ZXJ5IGFyZ3VtZW50cwo+Pj4+ICsgKiBAcGFydGl0aW9uX2NudDogbnVtYmVyIG9mIGRl ZmluZWQgcGFydGl0aW9ucyBpbiB0aGUgc3lzdGVtCj4+Pj4gKyAqIEBwYXJ0aXRpb25zOiBidWZm ZXIgdG8gc3RvcmUgZGVmaW5lZCBwYXJ0aXRpb25zIGluZm9ybWF0aW9uLgo+Pj4+ICsgKi8KPj4+ PiArc3RydWN0IGFpZV9wYXJ0aXRpb25fcXVlcnkgewo+Pj4+ICvCoMKgwqDCoMKgwqDCoHN0cnVj dCBhaWVfcmFuZ2VfYXJncyAqcGFydGl0aW9uczsKPj4+PiArwqDCoMKgwqDCoMKgwqBfX3UzMiBw YXJ0aXRpb25fY250Owo+Pj4+ICt9Owo+Pj4+ICsKPj4+PiArLyoqCj4+Pj4gKyAqIHN0cnVjdCBh aWVfcGFydGl0aW9uX3JlcSAtIEFJRSByZXF1ZXN0IHBhcnRpdGlvbiBhcmd1bWVudHMKPj4+PiAr ICogQHBhcnRpdGlvbl9pZDogcGFydGl0aW9uIG5vZGUgaWQuIEl0IGlzIHVzZWQgdG8gaWRlbnRp ZnkgdGhlIEFJIGVuZ2luZQo+Pj4+ICsgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGFy dGl0aW9uIGluIHRoZSBzeXN0ZW0uCj4+Pj4gKyAqIEB1aWQ6IGltYWdlIGlkZW50aWZpZXIgbG9h ZGVkIG9uIHRoZSBBSSBlbmdpbmUgcGFydGl0aW9uCj4+Pj4gKyAqIEBtZXRhX2RhdGE6IG1ldGEg ZGF0YSB0byBpbmRpY2F0ZSB3aGljaCByZXNvdXJjZXMgdXNlZCBieSBhcHBsaWNhdGlvbi4KPj4+ PiArICogQGZsYWc6IHVzZWQgZm9yIGFwcGxpY2F0aW9uIHRvIGluZGljYXRlIHBhcnRpY3VsYXIg ZHJpdmVyIHJlcXVpcmVtZW50cwo+Pj4+ICsgKsKgwqDCoMKgwqDCoCBhcHBsaWNhdGlvbiB3YW50 cyB0byBoYXZlIGZvciB0aGUgcGFydGl0aW9uLiBlLmcuIGRvIG5vdCBjbGVhbgo+Pj4+ICsgKsKg wqDCoMKgwqDCoCByZXNvdXJjZSB3aGVuIGNsb3NpbmcgdGhlIHBhcnRpdGlvbi4KPj4+PiArICov Cj4+Pj4gK3N0cnVjdCBhaWVfcGFydGl0aW9uX3JlcSB7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgX191 MzIgcGFydGl0aW9uX2lkOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoF9fdTMyIHVpZDsKPj4+PiArwqDC oMKgwqDCoMKgwqBfX3U2NCBtZXRhX2RhdGE7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgX191MzIgZmxh ZzsKPj4+PiArfTsKPj4+PiArCj4+Pj4gKyNkZWZpbmUgQUlFX0lPQ1RMX0JBU0UgJ0EnCj4+Pj4g Kwo+Pj4+ICsvKiBBSSBlbmdpbmUgZGV2aWNlIElPQ1RMIG9wZXJhdGlvbnMgKi8KPj4+PiArI2Rl ZmluZSBBSUVfRU5RVUlSRV9QQVJUX0lPQ1RMwqDCoMKgwqDCoMKgwqDCoMKgX0lPV1IoQUlFX0lP Q1RMX0JBU0UsIDB4MSwgXAo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0 cnVjdCBhaWVfcGFydGl0aW9uX3F1ZXJ5KQo+Pj4+ICsjZGVmaW5lIEFJRV9SRVFVRVNUX1BBUlRf SU9DVEzCoMKgwqDCoMKgwqDCoMKgwqBfSU9SKEFJRV9JT0NUTF9CQVNFLCAweDIsIFwKPj4+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGFpZV9wYXJ0aXRpb25fcmVxKQo+ Pj4+ICsKPj4+PiArLyogQUkgZW5naW5lIHBhcnRpdGlvbiBJT0NUTCBvcGVyYXRpb25zICovCj4+ Pj4gKyNkZWZpbmUgQUlFX1JFR19JT0NUTMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoF9JT1dSKEFJRV9JT0NUTF9CQVNFLCAweDgsIFwKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBzdHJ1Y3QgYWllX3JlZ19hcmdzKQo+Pj4+ICsjZW5kaWYKPj4gX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPj4gZHJpLWRldmVsIG1h aWxpbmcgbGlzdAo+PiBkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4+IGh0dHBzOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVs IG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDov L2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==