Received: by 2002:a05:6358:7583:b0:c2:e7cc:3b64 with SMTP id x3csp12736rwf; Fri, 30 Sep 2022 16:01:47 -0700 (PDT) X-Google-Smtp-Source: AMsMyM68Rj3f2nOAPUTj/Q7j75LuwWVnhO3AnZeSqQCdo3BxNnWyEJ76vIvO0/B7XpyOx9CZzZuy X-Received: by 2002:a05:6402:5162:b0:457:6ef2:df3 with SMTP id d2-20020a056402516200b004576ef20df3mr9424241ede.128.1664578907104; Fri, 30 Sep 2022 16:01:47 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1664578907; cv=pass; d=google.com; s=arc-20160816; b=NwjmDQn/p366B/1aRE4YsQIRS351DoHUHnXTshmve59EV7bzEb+xRdP/NhMgbStH6t UsJEjQ32fqc+p0ok31xELx3AS9/LW68NtC9xAIne/00IKnzuoP1posYUAV9GbJcxAYRN zYi829yAhd58qpGx6CoTXICTULLepLvaNdEHnBk0k2v8uydZO/TYDHR7wcM++ChLgfGi yY9qlvSELuK6iMxwCk9/Quinxsc4aC2sGDkEF5e9ixY3mVd4+U/c8mCEuwPwBNTfgLuI ueQGfB92Z+A1YhIOLVVMzDMLGi46RIzf4/aCkJBcMCa5Wt7XAh1W1hQIer/ExL/xquhv i0+Q== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:content-transfer-encoding :content-id:content-language:accept-language:in-reply-to:references :message-id:date:thread-index:thread-topic:subject:cc:to:from :dkim-signature; bh=hUsYlRip1j4Zjj2R7VK25CpXEY0tjJngIdCNgq8wJaw=; b=g2P3jnAJjaf5CfBbfZQMKlOZPZSsbFkDoyf968B6GXea+2WNIkxiipFDM3Yo78kHyq juITEYZTpxyPTn/sffWk6SpoDsysbkGNcg1lMomQTKVLmSo3FEYu4SFJSCLb3Wq8Ik5h gPOIeY/O+ARinrU3dErG7FElbDJl9MH9RUv5qzCSAgdU603UPh2UcpHuEUTaVk9E6QrV pGZHcrfOk4MdnYz/DwZklNMcMr2W++3/7MgC4x1cc7bY0jwzWi4v6Xq8mXyT70eWUFqf 0DMGhv3htUkdo1kqfgiQ+AlObxrVVtlbULTYW4Xz8rlw/sdRgd0Xdh1MsNRxg26oPXPg ojNQ== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@esdhannover.onmicrosoft.com header.s=selector1-esdhannover-onmicrosoft-com header.b=MNNnhb6T; arc=pass (i=1 spf=pass spfdomain=esd.eu dkim=pass dkdomain=esd.eu dmarc=pass fromdomain=esd.eu); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id lr11-20020a170906fb8b00b007803a315903si2250720ejb.197.2022.09.30.16.01.20; Fri, 30 Sep 2022 16:01:47 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@esdhannover.onmicrosoft.com header.s=selector1-esdhannover-onmicrosoft-com header.b=MNNnhb6T; arc=pass (i=1 spf=pass spfdomain=esd.eu dkim=pass dkdomain=esd.eu dmarc=pass fromdomain=esd.eu); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232686AbiI3WQN (ORCPT + 99 others); Fri, 30 Sep 2022 18:16:13 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56324 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232473AbiI3WQL (ORCPT ); Fri, 30 Sep 2022 18:16:11 -0400 Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05on2071b.outbound.protection.outlook.com [IPv6:2a01:111:f400:7e1a::71b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C49541323C9; Fri, 30 Sep 2022 15:16:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=l0qYI5oZYA4At8Ez5jNBB8TU8zZQoT1SwT77FMODR2A1RLybINlTny20WWJcUv6nyq+sybNqUkhPWGJvNad8mu7vxLPs1UhJbrqP1uWtJvv97Zux0gu0UkrwQMioFDcF4eQ4SFrcORiwwXi+pKJGHJxMJbluV9OIluV0wgKF4ZwhEEQTYXHXZVfhJmVFuBOwO82otoQlN194nrdAaqveJJqKIKfO0OpCc7HcTvOn/eu2txVuafcoFXjWU871i7vpMdpwGtqtCdz5wPJ6RGfKMmS3wp2prLMJ7VxU06bXGvs7fk+ILrTlx1jjCr0lbYJVqcLZ1vhotJ3oJZOQbpFuMg== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=hUsYlRip1j4Zjj2R7VK25CpXEY0tjJngIdCNgq8wJaw=; b=myI5q3IXLO3tVP90U7B0XMnPMp+EFvWnwNvhL2VJjpNs5/58ZDMnPePC0GTSx5n3fU4Z20VscDKPZf53icwgkLkqHVJNVUE85tE4cPDPYfaARVfTpSXS+s1z8rZKRkfURB5BWosU++i8iGsvfuQr3MbU4HIjx+cHvIB1YWgsqMNNzvN6zjpRQ8zfscRVRFSf6R7BsVgDARMEUvo6POy7oaJL2ip4mitq0joqzhjlbdU9jT9IvRwvJPU5TzCcluLar9VI3uqnIBhBflS++va+imzWrQwMOiSyOq/kxv5aKmC26Il1tCMirwl3kLCPZHGmKBAvh4fZgSQQE3rZhUfPTQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=esd.eu; dmarc=pass action=none header.from=esd.eu; dkim=pass header.d=esd.eu; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=esdhannover.onmicrosoft.com; s=selector1-esdhannover-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=hUsYlRip1j4Zjj2R7VK25CpXEY0tjJngIdCNgq8wJaw=; b=MNNnhb6T86kfCt1IUm8dGOsnlosiKb3YvfJgZoq6JEIIT7rUD1yrk183GFVPoCPNfC2X8sjtYINEU1Bjd9N/MfEyUWmYj7Yrpfw9ESjX6dheFUs+OLz9eOFQBJV4JHyfsCpcRofrIejw3udoA9LwZ8Fh8bkneVXvX85Ud1SIgzE= Received: from AM6PR03MB4296.eurprd03.prod.outlook.com (2603:10a6:20b:3::16) by VI1PR03MB6399.eurprd03.prod.outlook.com (2603:10a6:800:195::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5676.23; Fri, 30 Sep 2022 22:15:59 +0000 Received: from AM6PR03MB4296.eurprd03.prod.outlook.com ([fe80::5552:6972:8abe:a000]) by AM6PR03MB4296.eurprd03.prod.outlook.com ([fe80::5552:6972:8abe:a000%4]) with mapi id 15.20.5676.023; Fri, 30 Sep 2022 22:15:59 +0000 From: =?utf-8?B?U3RlZmFuIE3DpHRqZQ==?= To: "mkl@pengutronix.de" CC: "netdev@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "linux-can@vger.kernel.org" , "wg@grandegger.com" Subject: Re: [PATCH v6 2/4] can: esd: add support for esd GmbH PCIe/402 CAN interface family Thread-Topic: [PATCH v6 2/4] can: esd: add support for esd GmbH PCIe/402 CAN interface family Thread-Index: AQHYF5CuCsg1xcvDsk2Yt0n1pZe/f636BU0A Date: Fri, 30 Sep 2022 22:15:59 +0000 Message-ID: References: <20211201220328.3079270-1-stefan.maetje@esd.eu> <20211201220328.3079270-3-stefan.maetje@esd.eu> <20220201172508.vvftyw2vy4uq2jpu@pengutronix.de> In-Reply-To: <20220201172508.vvftyw2vy4uq2jpu@pengutronix.de> Accept-Language: de-DE, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: Evolution 3.28.5-0ubuntu0.18.04.2 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=esd.eu; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: AM6PR03MB4296:EE_|VI1PR03MB6399:EE_ x-ms-office365-filtering-correlation-id: 85e0dd42-4848-404a-bf21-08daa3315a8d x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: UzR3lt18PAqq0nkbYzxQGAGlObt5GIAyYSKMEjn+N1EKx8jfmEqToEXUsO3EsHbuJr1Sov5yse6Z4K+mjGFOdQ1PLPJGZtsZ6uW4G2kiQXvwNvvn4s4jPLeiEzuY3jykfZs0iO7wqhGogF0CYptgRdHqy4DdhoDLv2z5bXyfVL/JweQBKQTeEJUpeQsB+h9UzWk/M/tJT3nCKq8QBd2uO/yf3h+TWXmzd8yUcPdFYk9STLHNsWl0NaPj2tGtgLfGKP2+uCXKe3c2FV2C68bzx8iKC6mpmsisCMYp4C5vNXjBYsBk8+R0uBHX8GbaFxN63KPA6dCI5ivpRrZNPcwFsHBtARxfi2Iyl+Bfo/Lcd8e6ZJF/64oyi4Yqt6Csv7BIPxweOx2NMali/7BI5D/4yHL7aHLaMjL0HvIVLdbXw+hsHvXeeDetNLfkTt7ce0wtMXt85b/MLUnxnA2EmiJtksTrSEG1TVljV5uDv2eCouLrwqQMkHfCAXyx8PPxY7CO2Zyl4tIVxdmv11WvEe0rKrXwTD2B7o7YkL+w2cbJUg3g8ea9HQ2w0qtNr058rPW5OS/88VNNiw9kwAk8gRb8BoC3/KAWyxo0eeye0KZhNHKTTyGF6AM4DlrtwxPgi2OVDH44TMMaixXr8M0a5cdaKEckmD0Gq/bEVXGUVhlK3eOjmsT+6A3fOTi7YLzUaq2YE6WEeGYZ4u1w4n5/hvmNWtrb3sxoScrj3r3GVZp93O1Sskox7iqsqLu71FbTvmNgwGaK0ZoyA1oyesKaj0GktSTlhKZu4lq4lDWu1YrFUOozPefw5rFOB1l/+K8xm51g3ackesAEV6q5vJBZkwGWc+4ADpt8dbWHf/02wpj48kk= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM6PR03MB4296.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(366004)(39830400003)(376002)(346002)(136003)(396003)(451199015)(71200400001)(966005)(6486002)(66556008)(38070700005)(4326008)(76116006)(66476007)(66446008)(64756008)(66946007)(8936002)(85202003)(41300700001)(54906003)(6916009)(478600001)(316002)(8676002)(36756003)(85182001)(122000001)(38100700002)(2616005)(6512007)(26005)(66574015)(6506007)(53546011)(186003)(86362001)(83380400001)(30864003)(2906002)(5660300002)(99106002)(579004)(559001);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?Z1hMc2thQlNHeWZzTjBaL01idE1hZjZBeEJJc0d2aVZNejBpWm44MWQvWk42?= =?utf-8?B?cmp2MWV3eDVKSVYvdDkzZEd0Q21ERTBaYVhQV0tMbXlHTFFHK2QyOTdBMllt?= =?utf-8?B?cUw2RWtUUDlvNVFLWW55T2xJRGdYek01cE96ZkhQVkwyUWYzSC9nRFNZWEhw?= =?utf-8?B?b0dzbVJ6NkhZTlF3c3BVMzhHYno1LzR4bGJOMTZpZXBvWUpXc2EvbUJGSDI1?= =?utf-8?B?WkJYZmNscm1EeVQvQzczOXJEcW5tNTlYYzN3dmtGbm5OVkRtRVZJL0tDczhv?= =?utf-8?B?U0U4UWlYWEJLMmVBN0ZPUEhCaFF3UjY0Zi9LWmRvZTFMUmVIa1NEWXU2L3dy?= =?utf-8?B?aTFsbmQ3L3JCMHc5czhhLzVvZTNkUVNUUFpWNDdCdHJHbE5rRHQrdmorcUFE?= =?utf-8?B?ak9NOFdUNm9kUW1FbGo5a0xIWUJ2eFVaUFJnMjJFOE51cDFrYVRZQnh0aldN?= =?utf-8?B?UXNVUEZvYXB0SU9FQ0JKbVFhanhpcjZ1SGZpMnR6QzhOSDZiaENCbU8xTWI1?= =?utf-8?B?UFNIb2NNOHhFWEFLNnA3YVE0TDE0QjIrK2diRmVYMUtlT0tGODF5cTRkL1Fx?= =?utf-8?B?Snh5NDFMODBEWWNZbjhicGFCc1FndjVLQ1ZQRzk3SGZ2QXk4Ymt5U2FEZXZl?= =?utf-8?B?MnkvTS9sSzZBY1E2YUlreEtPemZXZ1dFaEZuZitSaFJhSzZCZStGRExVNlNz?= =?utf-8?B?RW9VWnNBd0dUR0F3OFlrNzRKKzJCcmlGMXRXc1Q2RFp1UkxHTG9PMEdHQzg0?= =?utf-8?B?cWdLbE9LV2Z4N2p4VUhhM3pYN0p5Um8wVVJscXhRUVNDeTUvK0dRak5URXpJ?= =?utf-8?B?RlFsdmRkSEdkNXpnYUc3K010aHdSSmxyaUZDYUgyTjl5eEZqeHcvREZ4eS9R?= =?utf-8?B?bUE2MW1BaWVCbkl4YXdjMzN4ak9kQTRnWEpDWWhEa0ZCdW16cjdkMzJqdFlJ?= =?utf-8?B?aFNFTVllVjc0KzZkTmdKODFqWU9uUjJQZmlraVpwaE5sUllxVFBUN081RENp?= =?utf-8?B?RVJibXBPeTdVdnllSHlEc1hrdThpOHVwejlvMk9LQytJRG9hd3FJbFM2aE9W?= =?utf-8?B?RTFHMWFqZU5mVW1lSE03bndoTm9acDlOdkFwek85UDZyY2hIbFZnQnJFcUlp?= =?utf-8?B?MTZjUHRjdk1NSVYvMEp4ODdsMzFwWFAzQzQ5eWNFZjlweG9tQXEvZlZXZ3V2?= =?utf-8?B?RURscGZncnphb3RxNEtFeU5uSXFGSTR4a3JpTHNLNjZpMzJnY3RjRzFhTlMr?= =?utf-8?B?b21HS0VRNXFnOWNydXVBbHg1MFdRcVRFck9LencyVVl5MTAzK3A2VkVVR3hV?= =?utf-8?B?VkprRVl1c1d4eGdjb3NMbWtBMXhURDJreW0yR1FJc3R1T3BKYzMzT2VnSWd6?= =?utf-8?B?eEkyMEFMVUNmQk14bUdoUU5zUG1vMVRjTVYxR0xVaDBLLzRoR1Z6OW85eGZW?= =?utf-8?B?eTB0RUUwU0Y5emE2b244eFNJamZhUCtRV1hlclBKUFVWQXN0R2RQTm5IU0NW?= =?utf-8?B?Z1JCLytHTHdBdFM1S3pHQzRJVXFiTHlWVGJuYkNFT1dLak5xemowTEhVM3Uz?= =?utf-8?B?UXEwOTVCb3NQZnpSazVNRHU5Nk1OVmg0OS9mOGJiMC9BckhsSE41NitEUlYy?= =?utf-8?B?THV1WERsOVc4SlFqREE3V3YwdHMzUFBHTzByVFZDa1M2cGxzZjNCRllHN1ZZ?= =?utf-8?B?cmtSTHdVcjZZa0dGUmlieG5lWWd0M0hRMVg0d292d0tISlc0cG51Z1BvTmlm?= =?utf-8?B?WW9hTUZYUTF5R1JVcW5jb0FyUjRhcU9RVXU1enZ2MmRUSGFtSUgyWGdVMGx0?= =?utf-8?B?MWpHSXNNeVRMZGdTa2N3OGJwWml1Ym0zditVOVdZblRLbldrcFF2dlVENStz?= =?utf-8?B?ZE1mQmRMMVhhZTRwUXB6cDEyYTFCUzJ4bzFXbFZpdE5SeXltSXZCaVNJckxh?= =?utf-8?B?VDVQcFB1bVRvSitQN2NWSDUxbm0zbjZGVkhBb0dKQyswQjcvYkU5bWtBMEdo?= =?utf-8?B?eitkRDk4eVR3S21ndElLL0dhWVBXSHhyUzFZS3RacUxHTW5FYTNyWWxpU0hJ?= =?utf-8?B?MTRKanlUK3RiUEc2TEpUNDNjMHFlVTE1bXJRZjVHWkUrd05xbW8yeWZFTDJ0?= =?utf-8?B?dW9aTWVOUG5wN3pzeXN6TkxhVHdicEFkOEpseUtZK3hRWndGMnA5M25QNzdj?= =?utf-8?B?Mnc9PQ==?= Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: esd.eu X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: AM6PR03MB4296.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 85e0dd42-4848-404a-bf21-08daa3315a8d X-MS-Exchange-CrossTenant-originalarrivaltime: 30 Sep 2022 22:15:59.4154 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 5a9c3a1d-52db-4235-b74c-9fd851db2e6b X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: z8FutrCBEk4P233vPA0lOFRwHhtS3aa+l7G8MlNU3gw9q/5MzpXX9G4EszT7qCsYK/Y57RwaNykoofM1ykmR6g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR03MB6399 X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_NONE,SPF_HELO_PASS,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkgTWFyYywNCg0KSSB3b3VsZCBsaWtlIHRvIHJlc3VtZSB0aGUgZWZmb3J0cyB0byBicmluZyB0 aGlzIGRyaXZlciBpbiB0aGUgTGludXgga2VybmVsIGFmdGVyIGJlaW5nDQpraWNrZWQgb2ZmIHRy YWNrIGluIEZlYnJ1YXJ5IGJ5IGFub3RoZXIgcHJvamVjdC4NCg0KSSBkaWQgYSBsb3Qgb2YgdGhl IGNoYW5nZXMgb24gdGhlIGRyaXZlciB5b3UgcmVjb21tZW5kZWQsIGJ1dCBzb21lIHN0dWZmIGlz IG5vdCB5ZXQgY2xlYXINCnRvIG1lLiBQbGVhc2Ugc2VlIG15IGNvbW1lbnRzIGluLWxpbmUgb2Yg dGhlIGVtYWlsIGJlbG93Lg0KDQpNeSBsb2NhbCBkZXZlbG9wZW1lbnQgaXMgYXQgdGhlIG1vbWVu dCByZWJhc2VkIHRvIGxpbnV4LWNhbi1uZXh0Om1hc3RlciBvbiANCjdiNTg0ZmJiMzYzNjIzNDBh MmQ5Y2ZlNDU5ZTQ0NzYxOWVlY2ViZWEuIFNob3VsZCBJIHNlbmQgYSBWNyBvZiB0aGUgcGF0Y2gg KHJlYmFzZWQgdG8gYW5vdGhlcg0KY29tbWl0KT8gSG93IHNob3VsZCBJIHByb2NlZWQ/DQoNCllv dSBoYXZlIGNvbW1lbnRlZCBvbiBtYW55IHR5cGUgY2FzdHMgdGhhdCB0aGV5IHdvdWxkIG5vdCBi ZSBuZWVkZWQuIEJ1dCBhbGwgb2YgdGhlbSBoYWQNCmJlZW4gaW50cm9kdWNlZCBieSBtZSBkdWUg dG8gd2FybmluZ3Mgb2YgdGhlIGNvbXBpbGVyIGluIHRoZSBzdHlsZSBvZiAid2FybmluZzogY29u dmVyc2lvbiBmcm9tIA0K4oCYdTMy4oCZIHtha2Eg4oCYdW5zaWduZWQgaW504oCZfSB0byDigJh1 OOKAmSB7YWthIOKAmHVuc2lnbmVkIGNoYXLigJl9IG1heSBjaGFuZ2UgdmFsdWUgWy1XY29udmVy c2lvbl0iLiBUaGVzZQ0KYXJlIHRyaWdnZXJlZCBieSBidWlsZGluZyB0aGUgZHJpdmVyIHdpdGgg Ilc9MyIgYXMgcmVjb21tZW5kZWQgaW4ga2VybmVsIGRvY3VtZW50YXRpb24uIFNob3VsZA0KdGhl c2Ugd2FybmluZ3MgZ2VuZXJhbGx5IGJlIGlnbm9yZWQgYW5kIHRoZSBjYXN0cyBiZSByZW1vdmVk IHRoZW4/DQoNCkJlc3QgcmVnYXJkcywNCiAgICBTdGVmYW4NCg0KDQpBbSBEaWVuc3RhZywgZGVu IDAxLjAyLjIwMjIsIDE4OjI1ICswMTAwIHNjaHJpZWIgTWFyYyBLbGVpbmUtQnVkZGU6DQo+IE9u IDAxLjEyLjIwMjEgMjM6MDM6MjYsIFN0ZWZhbiBNw6R0amUgd3JvdGU6DQo+ID4gVGhpcyBwYXRj aCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBQQ0kgYmFzZWQgUENJZS80MDIgQ0FOIGludGVyZmFjZSBm YW1pbHkNCj4gPiBmcm9tIGVzZCBHbWJIIHRoYXQgaXMgYXZhaWxhYmxlIHdpdGggdmFyaW91cyBm b3JtIGZhY3RvcnMNCj4gPiAoaHR0cHM6Ly9lc2QuZXUvdGVjaG5vbG9naWUvY2FuL2Nhbi11bmQt Y2FuLWZkLWludGVyZmFjZXMpLg0KPiA+IA0KPiA+IEFsbCBib2FyZHMgdXRpbGl6ZSBhIEZQR0Eg YmFzZWQgQ0FOIGNvbnRyb2xsZXIgc29sdXRpb24gZGV2ZWxvcGVkDQo+ID4gYnkgZXNkIChlc2RB Q0MpLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgZXNkQUNDIHNlZQ0KPiA+IGh0dHBzOi8v ZXNkLmV1L3RlY2hub2xvZ2llL2Nhbi9lc2QtYWR2YW5jZWQtY2FuLWNvbnRyb2xsZXItZXNkYWNj Lg0KPiA+IA0KPiA+IFRoaXMgZHJpdmVyIGRldGVjdHMgYWxsIGF2YWlsYWJsZSBDQU4gaW50ZXJm YWNlIGJvYXJkIHZhcmlhbnRzIG9mDQo+ID4gdGhlIGZhbWlseSBidXQgYXRtLiBvcGVyYXRlcyB0 aGUgQ0FOLUZEIGNhcGFibGUgZGV2aWNlcyBpbg0KPiA+IENsYXNzaWMtQ0FOIG1vZGUgb25seSEg QSBsYXRlciBwYXRjaCB3aWxsIGludHJvZHVjZSB0aGUgQ0FOLUZEDQo+ID4gZnVuY3Rpb25hbGl0 eSBpbiB0aGlzIGRyaXZlci4NCj4gPiANCj4gPiBDby1kZXZlbG9wZWQtYnk6IFRob21hcyBLw7Zy cGVyIDx0aG9tYXMua29lcnBlckBlc2QuZXU+DQo+ID4gU2lnbmVkLW9mZi1ieTogVGhvbWFzIEvD tnJwZXIgPHRob21hcy5rb2VycGVyQGVzZC5ldT4NCj4gPiBTaWduZWQtb2ZmLWJ5OiBTdGVmYW4g TcOkdGplIDxzdGVmYW4ubWFldGplQGVzZC5ldT4NCj4gPiAtLS0NCj4gPiAgZHJpdmVycy9uZXQv Y2FuL0tjb25maWcgICAgICAgICAgICAgICAgfCAgIDEgKw0KPiA+ICBkcml2ZXJzL25ldC9jYW4v TWFrZWZpbGUgICAgICAgICAgICAgICB8ICAgMSArDQo+ID4gIGRyaXZlcnMvbmV0L2Nhbi9lc2Qv S2NvbmZpZyAgICAgICAgICAgIHwgIDEyICsNCj4gPiAgZHJpdmVycy9uZXQvY2FuL2VzZC9NYWtl ZmlsZSAgICAgICAgICAgfCAgIDcgKw0KPiA+ICBkcml2ZXJzL25ldC9jYW4vZXNkL2VzZF80MDJf cGNpLWNvcmUuYyB8IDUwMiArKysrKysrKysrKysrKysrDQo+ID4gIGRyaXZlcnMvbmV0L2Nhbi9l c2QvZXNkYWNjLmMgICAgICAgICAgIHwgNzc3ICsrKysrKysrKysrKysrKysrKysrKysrKysNCj4g PiAgZHJpdmVycy9uZXQvY2FuL2VzZC9lc2RhY2MuaCAgICAgICAgICAgfCAzODAgKysrKysrKysr KysrDQo+ID4gIDcgZmlsZXMgY2hhbmdlZCwgMTY4MCBpbnNlcnRpb25zKCspDQo+ID4gIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC9jYW4vZXNkL0tjb25maWcNCj4gPiAgY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L2Nhbi9lc2QvTWFrZWZpbGUNCj4gPiAgY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvbmV0L2Nhbi9lc2QvZXNkXzQwMl9wY2ktY29yZS5jDQo+ID4gIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC9jYW4vZXNkL2VzZGFjYy5jDQo+ID4gIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL25ldC9jYW4vZXNkL2VzZGFjYy5oDQo+ID4gDQo+ID4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9LY29uZmlnIGIvZHJpdmVycy9uZXQvY2FuL0tjb25maWcN Cj4gPiBpbmRleCBmZmYyNTkyNDdkNTIuLjQ3Y2ZiNmFlMDc3MiAxMDA2NDQNCj4gPiAtLS0gYS9k cml2ZXJzL25ldC9jYW4vS2NvbmZpZw0KPiA+ICsrKyBiL2RyaXZlcnMvbmV0L2Nhbi9LY29uZmln DQo+ID4gQEAgLTE3MCw2ICsxNzAsNyBAQCBjb25maWcgUENIX0NBTg0KPiA+ICANCj4gPiAgc291 cmNlICJkcml2ZXJzL25ldC9jYW4vY19jYW4vS2NvbmZpZyINCj4gPiAgc291cmNlICJkcml2ZXJz L25ldC9jYW4vY2M3NzAvS2NvbmZpZyINCj4gPiArc291cmNlICJkcml2ZXJzL25ldC9jYW4vZXNk L0tjb25maWciDQo+ID4gIHNvdXJjZSAiZHJpdmVycy9uZXQvY2FuL2lmaV9jYW5mZC9LY29uZmln Ig0KPiA+ICBzb3VyY2UgImRyaXZlcnMvbmV0L2Nhbi9tX2Nhbi9LY29uZmlnIg0KPiA+ICBzb3Vy Y2UgImRyaXZlcnMvbmV0L2Nhbi9tc2Nhbi9LY29uZmlnIg0KPiA+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL25ldC9jYW4vTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9jYW4vTWFrZWZpbGUNCj4gPiBpbmRl eCBhMmI0NDYzZDg0ODAuLjAxNWI2ZmMxMTBkMSAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL25l dC9jYW4vTWFrZWZpbGUNCj4gPiArKysgYi9kcml2ZXJzL25ldC9jYW4vTWFrZWZpbGUNCj4gPiBA QCAtOCw2ICs4LDcgQEAgb2JqLSQoQ09ORklHX0NBTl9WWENBTikJCSs9IHZ4Y2FuLm8NCj4gPiAg b2JqLSQoQ09ORklHX0NBTl9TTENBTikJCSs9IHNsY2FuLm8NCj4gPiAgDQo+ID4gIG9iai15CQkJ CSs9IGRldi8NCj4gPiArb2JqLXkJCQkJKz0gZXNkLw0KPiA+ICBvYmoteQkJCQkrPSByY2FyLw0K PiA+ICBvYmoteQkJCQkrPSBzcGkvDQo+ID4gIG9iai15CQkJCSs9IHVzYi8NCj4gPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9uZXQvY2FuL2VzZC9LY29uZmlnIGIvZHJpdmVycy9uZXQvY2FuL2VzZC9L Y29uZmlnDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwMDAu LjU0YmZjMzY2NjM0Yw0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9kcml2ZXJzL25ldC9j YW4vZXNkL0tjb25maWcNCj4gPiBAQCAtMCwwICsxLDEyIEBADQo+ID4gKyMgU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQ0KPiA+ICtjb25maWcgQ0FOX0VTRF80MDJfUENJDQo+ ID4gKwl0cmlzdGF0ZSAiZXNkIGVsZWN0cm9uaWNzIGdtYmggQ0FOLVBDSShlKS80MDIgZmFtaWx5 Ig0KPiA+ICsJZGVwZW5kcyBvbiBQQ0kgJiYgSEFTX0RNQQ0KPiA+ICsJaGVscA0KPiA+ICsJICBT dXBwb3J0IGZvciBDNDAyIGNhcmQgZmFtaWx5IGZyb20gZXNkIGVsZWN0cm9uaWNzIGdtYmguDQo+ ID4gKwkgIFRoaXMgY2FyZCBmYW1pbHkgaXMgYmFzZWQgb24gdGhlIEVTREFDQyBDQU4gY29udHJv bGxlciBhbmQNCj4gPiArCSAgYXZhaWxhYmxlIGluIHNldmVyYWwgZm9ybSBmYWN0b3JzOiAgUENJ LCBQQ0llLCBQQ0llIE1pbmksDQo+ID4gKwkgIE0uMiBQQ0llLCBDUENJc2VyaWFsLCBQTUMsIFhN QyAgKHNlZSBodHRwczovL2VzZC5ldS9lbikNCj4gPiArDQo+ID4gKwkgIFRoaXMgZHJpdmVyIGNh biBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJbiB0aGlzIGNhc2UgdGhlDQo+ID4gKwkgIG1v ZHVsZSB3aWxsIGJlIGNhbGxlZCBlc2RfNDAyX3BjaS4NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9uZXQvY2FuL2VzZC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2Nhbi9lc2QvTWFrZWZpbGUNCj4g PiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uNWRkMmQ0NzBj Mjg2DQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMvbmV0L2Nhbi9lc2QvTWFr ZWZpbGUNCj4gPiBAQCAtMCwwICsxLDcgQEANCj4gPiArIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogR1BMLTIuMC1vbmx5DQo+ID4gKyMNCj4gPiArIyAgTWFrZWZpbGUgZm9yIGVzZCBnbWJoIEVT REFDQyBjb250cm9sbGVyIGRyaXZlcg0KPiA+ICsjDQo+ID4gK2VzZF80MDJfcGNpLW9ianMgOj0g ZXNkYWNjLm8gZXNkXzQwMl9wY2ktY29yZS5vDQo+ID4gKw0KPiA+ICtvYmotJChDT05GSUdfQ0FO X0VTRF80MDJfUENJKSArPSBlc2RfNDAyX3BjaS5vDQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv bmV0L2Nhbi9lc2QvZXNkXzQwMl9wY2ktY29yZS5jIGIvZHJpdmVycy9uZXQvY2FuL2VzZC9lc2Rf NDAyX3BjaS1jb3JlLmMNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAw MDAwMDAwMC4uODBkODE2YTc4ODU5DQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZl cnMvbmV0L2Nhbi9lc2QvZXNkXzQwMl9wY2ktY29yZS5jDQo+ID4gQEAgLTAsMCArMSw1MDIgQEAN Cj4gPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQ0KPiA+ICsvKiBD b3B5cmlnaHQgKEMpIDIwMTUgLSAyMDE2IFRob21hcyBLw7ZycGVyLCBlc2QgZWxlY3Ryb25pYyBz eXN0ZW0gZGVzaWduIGdtYmgNCj4gPiArICogQ29weXJpZ2h0IChDKSAyMDE3IC0gMjAyMSBTdGVm YW4gTcOkdGplLCBlc2QgZWxlY3Ryb25pY3MgZ21iaA0KPiA+ICsgKi8NCj4gPiArDQo+ID4gKyNp bmNsdWRlIDxsaW51eC9rZXJuZWwuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0K PiA+ICsjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9w Y2kuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2lvLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9k ZWxheS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+DQo+ID4gKyNpbmNsdWRl IDxsaW51eC9kbWEtbWFwcGluZy5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvY2FuLmg+DQo+ID4g KyNpbmNsdWRlIDxsaW51eC9jYW4vZGV2Lmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9jYW4vbmV0 bGluay5oPg0KPiANCj4gcGxlYXNlIHNvcnQgYWxwaGFiZXRpY2FsbHkNCg0KZG9uZQ0KDQo+IA0K PiA+ICsNCj4gPiArI2luY2x1ZGUgImVzZGFjYy5oIg0KPiA+ICsNCj4gPiArI2RlZmluZSBEUlZf TkFNRQkJCSJlc2RfNDAyX3BjaSINCg0KVGhlcmUgaGFzIGJlZW4gc29tZSBlZmZvcnQgb24gdGhl IG1haWxpbmcgbGlzdCB0byByZXBsYWNlIGhhcmRjb2RlZCBkcml2ZXIgbmFtZXMgd2l0aCBLQlVJ TERfTU9ETkFNRS4NCkJ1dCB0aGVuIHRoaXMgc2hvd2VkIHVwIGFzIGRlYmF0ZWFibGUNCihzZWUg aHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvbGludXgtY2FuL1l5TGtyajV2MkVpQklYaytAc3VyZmFj ZWJvb2svI3IpDQpIb3cgc2hvdWxkIEkgcHJvY2VlZCB3aXRoIHRoaXMgRFJWX05BTUUgKGkuZS4g a2VlcCBpdCB1c2UgS0JVSUxEX01PRE5BTUUpIHdoaWNoIGlzIG9ubHkgdXNlZCB0bw0Kc2V0IHN0 cnVjdCBwY2lfZHJpdmVyOjpuYW1lPw0KDQo+ID4gKw0KPiA+ICsjZGVmaW5lIEVTRF9QQ0lfREVW SUNFX0lEX1BDSUU0MDIJMHgwNDAyDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFBDSTQwMl9GUEdBX1ZF Ul9NSU4JCTB4MDAzZA0KPiA+ICsjZGVmaW5lIFBDSTQwMl9NQVhfQ09SRVMJCTYNCj4gPiArI2Rl ZmluZSBQQ0k0MDJfQkFSCQkJMA0KPiA+ICsjZGVmaW5lIFBDSTQwMl9JT19PVl9PRkZTCQkwDQo+ ID4gKyNkZWZpbmUgUENJNDAyX0lPX1BDSUVQX09GRlMJCTB4MTAwMDANCj4gPiArI2RlZmluZSBQ Q0k0MDJfSU9fTEVOX1RPVEFMCQkweDIwMDAwDQo+ID4gKyNkZWZpbmUgUENJNDAyX0lPX0xFTl9D T1JFCQkweDIwMDANCj4gPiArI2RlZmluZSBQQ0k0MDJfUENJQ0ZHX01TSUNBUF9DU1IJMHg1Mg0K PiA+ICsjZGVmaW5lIFBDSTQwMl9QQ0lDRkdfTVNJQ0FQX0FERFIJMHg1NA0KPiA+ICsjZGVmaW5l IFBDSTQwMl9QQ0lDRkdfTVNJQ0FQX0RBVEEJMHg1Yw0KPiA+ICsNCj4gPiArI2RlZmluZSBQQ0k0 MDJfRE1BX01BU0sJCQlETUFfQklUX01BU0soMzIpDQo+ID4gKyNkZWZpbmUgUENJNDAyX0RNQV9T SVpFCQkJQUxJR04oMHgxMDAwMCwgUEFHRV9TSVpFKQ0KPiA+ICsNCj4gPiArI2RlZmluZSBQQ0k0 MDJfUENJRVBfT0ZfSU5UX0VOQUJMRQkweDAwNTANCj4gPiArI2RlZmluZSBQQ0k0MDJfUENJRVBf T0ZfQk1fQUREUl9MTwkweDEwMDANCj4gPiArI2RlZmluZSBQQ0k0MDJfUENJRVBfT0ZfQk1fQURE Ul9ISQkweDEwMDQNCj4gPiArI2RlZmluZSBQQ0k0MDJfUENJRVBfT0ZfTVNJX0FERFJfTE8JMHgx MDA4DQo+ID4gKyNkZWZpbmUgUENJNDAyX1BDSUVQX09GX01TSV9BRERSX0hJCTB4MTAwYw0KPiAN Cj4gbml0cGljazogcGxlYXNlIHVzZSBzaW5nbGUgc3BhY2UgZm9yIGluZGVudGlvbi4gU29vbmVy IG9yIGxhdGVyIG5ldw0KPiBzdHVmZiBpcyBhZGRlZCBhbmQgdGhlIG9yaWdpbmFsIGFsaWdubWVu dCBkb2Vzbid0IGZpdCBhbnltb3JlLg0KDQpDaGFuZ2VkIHRvIHNpbmdsZSBzcGFjZSBpbmRlbnRh dGlvbi4NCg0KPiA+ICsNCj4gPiArLyogVGhlIEJUUiByZWdpc3RlciBjYXBhYmlsaXRpZXMgZGVz Y3JpYmVkIGJ5IHRoZSBjYW5fYml0dGltaW5nX2NvbnN0IHN0cnVjdHVyZXMNCj4gPiArICogYmVs b3cgYXJlIHZhbGlkIHNpbmNlIEVTREFDQyB2ZXJzaW9uIDB4MDAzMi4NCj4gPiArICovDQo+ID4g Kw0KPiA+ICsvKiBVc2VkIGlmIHRoZSBFU0RBQ0MgRlBHQSBpcyBidWlsdCBhcyBDQU4tQ2xhc3Np YyB2ZXJzaW9uLiAqLw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGNhbl9iaXR0aW1pbmdfY29u c3QgcGNpNDAyX2JpdHRpbWluZ19jb25zdCA9IHsNCj4gPiArCS5uYW1lID0gImVzZF80MDIiLA0K PiA+ICsJLnRzZWcxX21pbiA9IDEsDQo+ID4gKwkudHNlZzFfbWF4ID0gMTYsDQo+ID4gKwkudHNl ZzJfbWluID0gMSwNCj4gPiArCS50c2VnMl9tYXggPSA4LA0KPiA+ICsJLnNqd19tYXggPSA0LA0K PiA+ICsJLmJycF9taW4gPSAxLA0KPiA+ICsJLmJycF9tYXggPSA1MTIsDQo+ID4gKwkuYnJwX2lu YyA9IDEsDQo+ID4gK307DQo+ID4gKw0KPiA+ICsvKiBVc2VkIGlmIHRoZSBFU0RBQ0MgRlBHQSBp cyBidWlsdCBhcyBDQU4tRkQgdmVyc2lvbi4gKi8NCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBj YW5fYml0dGltaW5nX2NvbnN0IHBjaTQwMl9iaXR0aW1pbmdfY29uc3RfY2FuZmQgPSB7DQo+ID4g KwkubmFtZSA9ICJlc2RfNDAyZmQiLA0KPiA+ICsJLnRzZWcxX21pbiA9IDEsDQo+ID4gKwkudHNl ZzFfbWF4ID0gMjU2LA0KPiA+ICsJLnRzZWcyX21pbiA9IDEsDQo+ID4gKwkudHNlZzJfbWF4ID0g MTI4LA0KPiA+ICsJLnNqd19tYXggPSAxMjgsDQo+ID4gKwkuYnJwX21pbiA9IDEsDQo+ID4gKwku YnJwX21heCA9IDI1NiwNCj4gPiArCS5icnBfaW5jID0gMSwNCj4gPiArfTsNCj4gPiArDQo+ID4g K3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcGNpNDAyX2FjY19uZXRkZXZfb3Bz ID0gew0KPiA+ICsJLm5kb19vcGVuID0gYWNjX29wZW4sDQo+ID4gKwkubmRvX3N0b3AgPSBhY2Nf Y2xvc2UsDQo+ID4gKwkubmRvX3N0YXJ0X3htaXQgPSBhY2Nfc3RhcnRfeG1pdCwNCj4gPiArCS5u ZG9fY2hhbmdlX210dSA9IGNhbl9jaGFuZ2VfbXR1DQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdHJ1 Y3QgcGNpNDAyX2NhcmQgew0KPiA+ICsJLyogQWN0dWFsbHkgbWFwcGVkIGlvIHNwYWNlLCBhbGwg b3RoZXIgaW9tZW0gZGVyaXZlZCBmcm9tIHRoaXMgKi8NCj4gPiArCXZvaWQgX19pb21lbSAqYWRk cjsNCj4gPiArCXZvaWQgX19pb21lbSAqYWRkcl9wY2llcDsNCj4gPiArDQo+ID4gKwl2b2lkICpk bWFfYnVmOw0KPiA+ICsJZG1hX2FkZHJfdCBkbWFfaG5kOw0KPiA+ICsNCj4gPiArCXN0cnVjdCBh Y2Nfb3Ygb3Y7DQo+ID4gKwlzdHJ1Y3QgYWNjX2NvcmUgKmNvcmVzOw0KPiA+ICsNCj4gPiArCWJv b2wgbXNpX2VuYWJsZWQ7DQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgaXJxcmV0dXJuX3Qg cGNpNDAyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpDQo+ID4gK3sNCj4gPiArCXN0 cnVjdCBwY2lfZGV2ICpwZGV2ID0gZGV2X2lkOw0KPiA+ICsJc3RydWN0IHBjaTQwMl9jYXJkICpj YXJkID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOw0KPiA+ICsJaXJxcmV0dXJuX3QgaXJxX3N0YXR1 czsNCj4gPiArDQo+ID4gKwlpcnFfc3RhdHVzID0gYWNjX2NhcmRfaW50ZXJydXB0KCZjYXJkLT5v diwgY2FyZC0+Y29yZXMpOw0KPiA+ICsNCj4gPiArCXJldHVybiBpcnFfc3RhdHVzOw0KPiA+ICt9 DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHBjaTQwMl9zZXRfbXNpY29uZmlnKHN0cnVjdCBwY2lf ZGV2ICpwZGV2KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgcGNpNDAyX2NhcmQgKmNhcmQgPSBwY2lf Z2V0X2RydmRhdGEocGRldik7DQo+ID4gKwl1MzIgYWRkcl9sb19vZmZzID0gMDsNCj4gPiArCXUz MiBhZGRyX2xvID0gMDsNCj4gPiArCXUzMiBhZGRyX2hpID0gMDsNCj4gPiArCXUzMiBkYXRhID0g MDsNCj4gPiArCXUxNiBjc3IgPSAwOw0KPiA+ICsJaW50IGVycjsNCj4gPiArDQo+ID4gKwllcnIg PSBwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBQQ0k0MDJfUENJQ0ZHX01TSUNBUF9DU1IsICZj c3IpOw0KPiA+ICsJaWYgKGVycikNCj4gPiArCQlnb3RvIGZhaWxlZDsNCj4gPiArDQo+ID4gKwll cnIgPSBwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgUENJNDAyX1BDSUNGR19NU0lDQVBfQURE UiwgJmFkZHJfbG8pOw0KPiA+ICsJaWYgKGVycikNCj4gPiArCQlnb3RvIGZhaWxlZDsNCj4gPiAr CWVyciA9IHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBQQ0k0MDJfUENJQ0ZHX01TSUNBUF9B RERSICsgNCwNCj4gPiArCQkJCSAgICAmYWRkcl9oaSk7DQo+ID4gKwlpZiAoZXJyKQ0KPiA+ICsJ CWdvdG8gZmFpbGVkOw0KPiA+ICsNCj4gPiArCWVyciA9IHBjaV9yZWFkX2NvbmZpZ19kd29yZChw ZGV2LCBQQ0k0MDJfUENJQ0ZHX01TSUNBUF9EQVRBLCAmZGF0YSk7DQo+ID4gKwlpZiAoZXJyKQ0K PiA+ICsJCWdvdG8gZmFpbGVkOw0KPiA+ICsNCj4gPiArCWFkZHJfbG9fb2ZmcyA9IGFkZHJfbG8g JiAweDAwMDBmZmZmOw0KPiA+ICsJYWRkcl9sbyAmPSAweGZmZmYwMDAwOw0KPiA+ICsNCj4gPiAr CWlmIChhZGRyX2hpKQ0KPiA+ICsJCWFkZHJfbG8gfD0gMTsgLyogRW5hYmxlIDY0LUJpdCBhZGRy ZXNzaW5nIGluIGFkZHJlc3Mgc3BhY2UgKi8NCj4gPiArDQo+ID4gKwlpZiAoIShjc3IgJiAweDAw MDEpKSB7IC8qIEVuYWJsZSBiaXQgKi8NCj4gPiArCQllcnIgPSAtRUlOVkFMOw0KPiA+ICsJCWdv dG8gZmFpbGVkOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlvd3JpdGUzMihhZGRyX2xvLCBjYXJk LT5hZGRyX3BjaWVwICsgUENJNDAyX1BDSUVQX09GX01TSV9BRERSX0xPKTsNCj4gPiArCWlvd3Jp dGUzMihhZGRyX2hpLCBjYXJkLT5hZGRyX3BjaWVwICsgUENJNDAyX1BDSUVQX09GX01TSV9BRERS X0hJKTsNCj4gPiArCWFjY19vdl93cml0ZTMyKCZjYXJkLT5vdiwgQUNDX09WX09GX01TSV9BRERS RVNTT0ZGU0VULCBhZGRyX2xvX29mZnMpOw0KPiA+ICsJYWNjX292X3dyaXRlMzIoJmNhcmQtPm92 LCBBQ0NfT1ZfT0ZfTVNJX0RBVEEsIGRhdGEpOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ ICsNCj4gPiArZmFpbGVkOg0KPiA+ICsJcGNpX3dhcm4ocGRldiwgIkVycm9yIHdoaWxlIHNldHRp bmcgTVNJIGNvbmZpZ3VyYXRpb246XG4iDQo+ID4gKwkJICJDU1I6IDB4JS40eCwgYWRkcjogMHgl Ljh4JS44eCwgZGF0YTogMHglLjh4XG4iLA0KPiA+ICsJCSBjc3IsIGFkZHJfaGksIGFkZHJfbG8s IGRhdGEpOw0KPiA+ICsNCj4gPiArCXJldHVybiBlcnI7DQo+ID4gK30NCg0KUmV3b3JrZWQgcGNp NDAyX3NldF9tc2ljb25maWcoKSB0byB1c2UgZGVmaW5lcyBmcm9tIHBjaS5oIHRvIGFjY2VzcyAN Ck1TSSBjYXBhYmlsaXR5IHJlZ2lzdGVycy4NCg0KPiA+ICsNCj4gPiArc3RhdGljIGludCBwY2k0 MDJfaW5pdF9jYXJkKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3Qg cGNpNDAyX2NhcmQgKmNhcmQgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7DQo+ID4gKw0KPiA+ICsJ Y2FyZC0+b3YuYWRkciA9IGNhcmQtPmFkZHIgKyBQQ0k0MDJfSU9fT1ZfT0ZGUzsNCj4gPiArCWNh cmQtPmFkZHJfcGNpZXAgPSBjYXJkLT5hZGRyICsgUENJNDAyX0lPX1BDSUVQX09GRlM7DQo+ID4g Kw0KPiA+ICsJYWNjX3Jlc2V0X2ZwZ2EoJmNhcmQtPm92KTsNCj4gPiArCWFjY19pbml0X292KCZj YXJkLT5vdiwgJnBkZXYtPmRldik7DQo+ID4gKw0KPiA+ICsJaWYgKGNhcmQtPm92LnZlcnNpb24g PCBQQ0k0MDJfRlBHQV9WRVJfTUlOKSB7DQo+ID4gKwkJcGNpX2VycihwZGV2LA0KPiA+ICsJCQki RVNEQUNDIHZlcnNpb24gKDB4JS40eCkgb3V0ZGF0ZWQsIHBsZWFzZSB1cGRhdGVcbiIsDQo+ID4g KwkJCWNhcmQtPm92LnZlcnNpb24pOw0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsJfQ0K PiA+ICsNCj4gPiArCWlmIChjYXJkLT5vdi5hY3RpdmVfY29yZXMgPiBQQ0k0MDJfTUFYX0NPUkVT KSB7DQo+ID4gKwkJcGNpX3dhcm4ocGRldiwNCj4gPiArCQkJICJDYXJkIGhhcyBtb3JlIGFjdGl2 ZSBjb3JlcyB0aGFuIHN1cHBvcnRlZCBieSBkcml2ZXIsICV1IGNvcmUocykgd2lsbCBiZSBpZ25v cmVkXG4iLA0KPiA+ICsJCQkgY2FyZC0+b3YuYWN0aXZlX2NvcmVzIC0gUENJNDAyX01BWF9DT1JF Uyk7DQo+ID4gKwkJY2FyZC0+b3YuYWN0aXZlX2NvcmVzID0gUENJNDAyX01BWF9DT1JFUzsNCj4g DQo+IFdoZXJlIGlzIHRoYXQgbGltaXRhdGlvbiBpbiB0aGlzIGRyaXZlcj8gUENJNDAyX01BWF9D T1JFUyBpcyBvbmx5IHVzZWQgaGVyZS4NCg0KTW9zdCBvZiB0aGUgc3RydWN0dXJlcyBhcmUgYWxs b2NhdGVkIGR5bmFtaWNhbGx5IGV4Y2VwdCB0aGUgc2l6ZSBvZiB0aGUgRE1BIGFyZWEgd2hpY2gg aXMgZml4ZWQuDQpJIGRlY2lkZWQgbm93IHRvIGFib3J0IHRoZSBpbml0aWFsaXphdGlvbiBvZiB0 aGUgZHJpdmVyIHdpdGggb3YuYWN0aXZlX2NvcmVzID4gUENJNDAyX01BWF9DT1JFUw0KYmVjYXVz ZSBpdCBjYW4ndCB3b3JrIHByb3Blcmx5IHdpdGggc28gbWFueSBjb3JlcyBiZWNhdXNlIGl0IHdv dWxkIG92ZXJmbG93IHRoZSBhbGxvY2F0ZWQNCkRNQSBtZW1vcnkgYXJlYS4gUENJNDAyX01BWF9D T1JFUyBpcyBkZXJpdmVkIGZyb20gYSBoYXJkIEZQR0EgbGltaXQgb2YgdGhlIGN1cnJlbnQgaW1w bGVtZW50YXRpb24uDQoNCj4gPiArCX0NCj4gPiArCWNhcmQtPmNvcmVzID0gZGV2bV9rY2FsbG9j KCZwZGV2LT5kZXYsIGNhcmQtPm92LmFjdGl2ZV9jb3JlcywNCj4gPiArCQkJCSAgIHNpemVvZihz dHJ1Y3QgYWNjX2NvcmUpLCBHRlBfS0VSTkVMKTsNCj4gPiArCWlmICghY2FyZC0+Y29yZXMpDQo+ ID4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ID4gKw0KPiA+ICsJaWYgKGNhcmQtPm92LmZlYXR1cmVz ICYgQUNDX09WX1JFR19GRUFUX01BU0tfQ0FORkQpIHsNCj4gPiArCQlwY2lfd2FybihwZGV2LA0K PiA+ICsJCQkgIkVTREFDQyB3aXRoIENBTi1GRCBmZWF0dXJlIGRldGVjdGVkLiBUaGlzIGRyaXZl ciBkb2Vzbid0IHN1cHBvcnQgQ0FOLUZEIHlldC5cbiIpOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiAr I2lmZGVmIF9fTElUVExFX0VORElBTg0KPiA+ICsJLyogU28gY2FyZCBjb252ZXJ0cyBhbGwgYnVz bWFzdGVyZWQgZGF0YSB0byBMRSBmb3IgdXM6ICovDQo+ID4gKwlhY2Nfb3Zfc2V0X2JpdHMoJmNh cmQtPm92LCBBQ0NfT1ZfT0ZfTU9ERSwNCj4gPiArCQkJQUNDX09WX1JFR19NT0RFX01BU0tfRU5E SUFOX0xJVFRMRSk7DQo+ID4gKyNlbmRpZg0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9 DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHBjaTQwMl9pbml0X2ludGVycnVwdChzdHJ1Y3QgcGNp X2RldiAqcGRldikNCj4gPiArew0KPiA+ICsJc3RydWN0IHBjaTQwMl9jYXJkICpjYXJkID0gcGNp X2dldF9kcnZkYXRhKHBkZXYpOw0KPiA+ICsJaW50IGVycjsNCj4gPiArDQo+ID4gKwllcnIgPSBw Y2lfZW5hYmxlX21zaShwZGV2KTsNCj4gPiArCWlmICghZXJyKSB7DQo+ID4gKwkJZXJyID0gcGNp NDAyX3NldF9tc2ljb25maWcocGRldik7DQo+ID4gKwkJaWYgKCFlcnIpIHsNCj4gPiArCQkJY2Fy ZC0+bXNpX2VuYWJsZWQgPSB0cnVlOw0KPiA+ICsJCQlhY2Nfb3Zfc2V0X2JpdHMoJmNhcmQtPm92 LCBBQ0NfT1ZfT0ZfTU9ERSwNCj4gPiArCQkJCQlBQ0NfT1ZfUkVHX01PREVfTUFTS19NU0lfRU5B QkxFKTsNCj4gPiArCQkJcGNpX2luZm8ocGRldiwgIk1TSSBlbmFibGVkXG4iKTsNCj4gPiArCQl9 DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJZXJyID0gZGV2bV9yZXF1ZXN0X2lycSgmcGRldi0+ZGV2 LCBwZGV2LT5pcnEsIHBjaTQwMl9pbnRlcnJ1cHQsDQo+ID4gKwkJCSAgICAgICBJUlFGX1NIQVJF RCwgZGV2X25hbWUoJnBkZXYtPmRldiksIHBkZXYpOw0KPiA+ICsJaWYgKGVycikNCj4gPiArCQln b3RvIGZhaWx1cmVfbXNpZGlzOw0KPiA+ICsNCj4gPiArCWlvd3JpdGUzMigxLCBjYXJkLT5hZGRy X3BjaWVwICsgUENJNDAyX1BDSUVQX09GX0lOVF9FTkFCTEUpOw0KPiA+ICsNCj4gPiArCXJldHVy biAwOw0KPiA+ICsNCj4gPiArZmFpbHVyZV9tc2lkaXM6DQo+ID4gKwlpZiAoY2FyZC0+bXNpX2Vu YWJsZWQpIHsNCj4gPiArCQlhY2Nfb3ZfY2xlYXJfYml0cygmY2FyZC0+b3YsIEFDQ19PVl9PRl9N T0RFLA0KPiA+ICsJCQkJICBBQ0NfT1ZfUkVHX01PREVfTUFTS19NU0lfRU5BQkxFKTsNCj4gPiAr CQlwY2lfZGlzYWJsZV9tc2kocGRldik7DQo+ID4gKwkJY2FyZC0+bXNpX2VuYWJsZWQgPSBmYWxz ZTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gZXJyOw0KPiA+ICt9DQo+ID4gKw0KPiA+ ICtzdGF0aWMgdm9pZCBwY2k0MDJfZmluaXNoX2ludGVycnVwdChzdHJ1Y3QgcGNpX2RldiAqcGRl dikNCj4gPiArew0KPiA+ICsJc3RydWN0IHBjaTQwMl9jYXJkICpjYXJkID0gcGNpX2dldF9kcnZk YXRhKHBkZXYpOw0KPiA+ICsNCj4gPiArCWlvd3JpdGUzMigwLCBjYXJkLT5hZGRyX3BjaWVwICsg UENJNDAyX1BDSUVQX09GX0lOVF9FTkFCTEUpOw0KPiA+ICsJZGV2bV9mcmVlX2lycSgmcGRldi0+ ZGV2LCBwZGV2LT5pcnEsIHBkZXYpOw0KPiANCj4gQSBkZXZtIG1hbmdlZCBpbnRlcnJ1cHQgZ2V0 cyBhdXRvbWF0aWNhbGx5IGZyZWVkLCBpdCBtYWtlcyBubyBzZW5zZSBpZg0KPiB5b3UgZnJlZSBp dCBtYW51YWxseSBoZXJlLiBJIHRoaW5rIGl0J3MgYmVzdCB0byB1c2UgYSBub24gZGV2bSBJUlEN Cj4gaW5zdGVhZC4NCg0KV2hlbiBJIHN3aXRjaGVkIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiB0byBk ZXZtXyogYWxsb2NhdGlvbnMgSSBhbHNvIHN3aXRjaGVkDQp0aGUgSVJRIHJlcXVlc3QgdG8gYSBk ZXZtXyogcmVxdWVzdCB0byBub3QgdG8gbWl4IGRldm1fKiByZXNvdXJjZSBhbGxvY2F0aW9uDQp3 aXRoIG5vbi1kZXZtXyogcmVzb3VyY2UgYWxsb2NhdGlvbi4gDQoNClNob3VsZCBJIGFnYWluIHVz ZSByZXF1ZXN0X2lycSgpIC8gZnJlZV9pcnEoKSBwYWlyIGV2ZW4gaW4gdGhlIGZhY2Ugb2YgdGhp cw0KaW1iYWxhbmNlPw0KDQo+ID4gKw0KPiA+ICsJaWYgKGNhcmQtPm1zaV9lbmFibGVkKSB7DQo+ ID4gKwkJYWNjX292X2NsZWFyX2JpdHMoJmNhcmQtPm92LCBBQ0NfT1ZfT0ZfTU9ERSwNCj4gPiAr CQkJCSAgQUNDX09WX1JFR19NT0RFX01BU0tfTVNJX0VOQUJMRSk7DQo+ID4gKwkJcGNpX2Rpc2Fi bGVfbXNpKHBkZXYpOw0KPiA+ICsJCWNhcmQtPm1zaV9lbmFibGVkID0gZmFsc2U7DQo+ID4gKwl9 DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgcGNpNDAyX2luaXRfZG1hKHN0cnVjdCBw Y2lfZGV2ICpwZGV2KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgcGNpNDAyX2NhcmQgKmNhcmQgPSBw Y2lfZ2V0X2RydmRhdGEocGRldik7DQo+ID4gKwlpbnQgZXJyOw0KPiA+ICsNCj4gPiArCWVyciA9 IGRtYV9zZXRfY29oZXJlbnRfbWFzaygmcGRldi0+ZGV2LCBQQ0k0MDJfRE1BX01BU0spOw0KPiA+ ICsJaWYgKGVycikgew0KPiA+ICsJCXBjaV9lcnIocGRldiwgIkRNQSBzZXQgbWFzayBmYWlsZWQh XG4iKTsNCj4gPiArCQlyZXR1cm4gZXJyOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCS8qIFRoZSBF U0RBQ0MgRE1BIGVuZ2luZSBuZWVkcyB0aGUgRE1BIGJ1ZmZlciBhbGlnbmVkIHRvIGEgNjRrDQo+ ID4gKwkgKiBib3VuZGFyeS4gVGhlIERNQSBBUEkgZ3VhcmFudGVlcyB0byBhbGlnbiB0aGUgcmV0 dXJuZWQgYnVmZmVyIHRvIHRoZQ0KPiA+ICsJICogc21hbGxlc3QgUEFHRV9TSVpFIG9yZGVyIHdo aWNoIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUNCj4gPiArCSAqIHJlcXVlc3RlZCBz aXplLiBXaXRoIFBDSTQwMl9ETUFfU0laRSA9PSA2NGtCIHRoaXMgc3VmZmljZXMgaGVyZS4NCj4g PiArCSAqLw0KPiA+ICsJY2FyZC0+ZG1hX2J1ZiA9IGRtYV9hbGxvY19jb2hlcmVudCgmcGRldi0+ ZGV2LCBQQ0k0MDJfRE1BX1NJWkUsDQo+ID4gKwkJCQkJICAgJmNhcmQtPmRtYV9obmQsIEdGUF9B VE9NSUMpOw0KPiANCj4gV2h5IGRvIHlvdSB1c2UgQVRPTUlDIGhlcmU/DQoNCk9yaWdpbmFsbHkg YSBwY2lfYWxsb2NfY29uc2lzdGVudCgpIHdhcyB1c2VkLCB3aGljaCBpbiB0dXJuIHVzZXMgR0ZQ X0FUT01JQy4gV2hlbiANCnBjaV9hbGxvY19jb25zaXN0ZW50KCkgd2FzIHJlcGxhY2VkIEdGUF9B VE9NSUMgd2FzIGluaGVyaXRlZCB3aXRob3V0IGRlZXBlciB0aG91Z2h0Lg0KU2luY2UgSSBiZWxp ZXZlIHdlIGFyZSBhYmxlIHRvIHNsZWVwIGR1cmluZyB0aGUgUENJIHByb2JlIHJvdXRpbmUgd2hl biB0aGUgYWxsb2NhdGlvbg0KaGFwcGVucyBHRlBfS0VSTkVMIHNob3VsZCBiZSBvayB0b28uIENo YW5nZWQgaXQgdG8gR0ZQX0tFUk5FTC4NCg0KDQo+ID4gKwlpZiAoIWNhcmQtPmRtYV9idWYpIHsN Cj4gPiArCQlwY2lfZXJyKHBkZXYsICJETUEgYWxsb2MgZmFpbGVkIVxuIik7DQo+ID4gKwkJcmV0 dXJuIC1FTk9NRU07DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJYWNjX2luaXRfYm1fcHRyKCZjYXJk LT5vdiwgY2FyZC0+Y29yZXMsIGNhcmQtPmRtYV9idWYpOw0KPiA+ICsNCj4gPiArCWlvd3JpdGUz MigodTMyKWNhcmQtPmRtYV9obmQsDQo+ID4gKwkJICBjYXJkLT5hZGRyX3BjaWVwICsgUENJNDAy X1BDSUVQX09GX0JNX0FERFJfTE8pOw0KPiANCj4gY2FzdCBub3QgbmVlZGVkDQpTZWUgY29tbWVu dCBhdCB0b3Agb2YgZW1haWwuDQoNCj4gDQo+ID4gKwlpb3dyaXRlMzIoMCwgY2FyZC0+YWRkcl9w Y2llcCArIFBDSTQwMl9QQ0lFUF9PRl9CTV9BRERSX0hJKTsNCj4gPiArDQo+ID4gKwlwY2lfc2V0 X21hc3RlcihwZGV2KTsNCj4gPiArDQo+ID4gKwlhY2Nfb3Zfc2V0X2JpdHMoJmNhcmQtPm92LCBB Q0NfT1ZfT0ZfTU9ERSwNCj4gPiArCQkJQUNDX09WX1JFR19NT0RFX01BU0tfQk1fRU5BQkxFKTsN Cj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQg cGNpNDAyX2ZpbmlzaF9kbWEoc3RydWN0IHBjaV9kZXYgKnBkZXYpDQo+ID4gK3sNCj4gPiArCXN0 cnVjdCBwY2k0MDJfY2FyZCAqY2FyZCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsNCj4gPiArCWlu dCBpOw0KPiA+ICsNCj4gPiArCWFjY19vdl9jbGVhcl9iaXRzKCZjYXJkLT5vdiwgQUNDX09WX09G X01PREUsDQo+ID4gKwkJCSAgQUNDX09WX1JFR19NT0RFX01BU0tfQk1fRU5BQkxFKTsNCj4gPiAr DQo+ID4gKwlwY2lfY2xlYXJfbWFzdGVyKHBkZXYpOw0KPiA+ICsNCj4gPiArCWlvd3JpdGUzMigw LCBjYXJkLT5hZGRyX3BjaWVwICsgUENJNDAyX1BDSUVQX09GX0JNX0FERFJfTE8pOw0KPiA+ICsJ aW93cml0ZTMyKDAsIGNhcmQtPmFkZHJfcGNpZXAgKyBQQ0k0MDJfUENJRVBfT0ZfQk1fQUREUl9I SSk7DQo+ID4gKw0KPiA+ICsJY2FyZC0+b3YuYm1maWZvLm1lc3NhZ2VzID0gTlVMTDsNCj4gPiAr CWNhcmQtPm92LmJtZmlmby5pcnFfY250ID0gTlVMTDsNCj4gPiArCWZvciAoaSA9IDA7IGkgPCBj YXJkLT5vdi5hY3RpdmVfY29yZXM7IGkrKykgew0KPiA+ICsJCXN0cnVjdCBhY2NfY29yZSAqY29y ZSA9ICZjYXJkLT5jb3Jlc1tpXTsNCj4gPiArDQo+ID4gKwkJY29yZS0+Ym1maWZvLm1lc3NhZ2Vz ID0gTlVMTDsNCj4gPiArCQljb3JlLT5ibWZpZm8uaXJxX2NudCA9IE5VTEw7DQo+ID4gKwl9DQo+ ID4gKw0KPiA+ICsJZG1hX2ZyZWVfY29oZXJlbnQoJnBkZXYtPmRldiwgUENJNDAyX0RNQV9TSVpF LCBjYXJkLT5kbWFfYnVmLA0KPiA+ICsJCQkgIGNhcmQtPmRtYV9obmQpOw0KPiA+ICsJY2FyZC0+ ZG1hX2J1ZiA9IE5VTEw7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgcGNpNDAyX2lu aXRfY29yZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBwY2k0 MDJfY2FyZCAqY2FyZCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsNCj4gPiArCWludCBlcnI7DQo+ ID4gKwlpbnQgaTsNCj4gPiArDQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgY2FyZC0+b3YuYWN0aXZl X2NvcmVzOyBpKyspIHsNCj4gPiArCQlzdHJ1Y3QgYWNjX2NvcmUgKmNvcmUgPSAmY2FyZC0+Y29y ZXNbaV07DQo+ID4gKwkJc3RydWN0IGFjY19uZXRfcHJpdiAqcHJpdjsNCj4gPiArCQlzdHJ1Y3Qg bmV0X2RldmljZSAqbmV0ZGV2Ow0KPiA+ICsJCXUzMiBmaWZvX2NvbmZpZzsNCj4gPiArDQo+ID4g KwkJY29yZS0+YWRkciA9IGNhcmQtPm92LmFkZHIgKyAoaSArIDEpICogUENJNDAyX0lPX0xFTl9D T1JFOw0KPiA+ICsNCj4gPiArCQlmaWZvX2NvbmZpZyA9IGFjY19yZWFkMzIoY29yZSwgQUNDX0NP UkVfT0ZfVFhGSUZPX0NPTkZJRyk7DQo+ID4gKwkJY29yZS0+dHhfZmlmb19zaXplID0gKHU4KShm aWZvX2NvbmZpZyA+PiAyNCk7DQo+IA0KPiBjYXN0IG5vdCBuZWVkZWQuDQo+IA0KU2VlIGNvbW1l bnQgYXQgdG9wIG9mIGVtYWlsLg0KDQo+IA0KPiA+ICsJCWlmIChjb3JlLT50eF9maWZvX3NpemUg PD0gMSkgew0KPiA+ICsJCQlwY2lfZXJyKHBkZXYsICJJbnZhbGlkIHR4X2ZpZm9fc2l6ZSFcbiIp Ow0KPiA+ICsJCQllcnIgPSAtRUlOVkFMOw0KPiA+ICsJCQlnb3RvIGZhaWx1cmU7DQo+ID4gKwkJ fQ0KPiA+ICsNCj4gPiArCQluZXRkZXYgPSBhbGxvY19jYW5kZXYoc2l6ZW9mKCpwcml2KSwgY29y ZS0+dHhfZmlmb19zaXplKTsNCj4gPiArCQlpZiAoIW5ldGRldikgew0KPiA+ICsJCQllcnIgPSAt RU5PTUVNOw0KPiA+ICsJCQlnb3RvIGZhaWx1cmU7DQo+ID4gKwkJfQ0KPiA+ICsJCWNvcmUtPm5l dGRldiA9IG5ldGRldjsNCj4gPiArDQo+ID4gKwkJbmV0ZGV2LT5mbGFncyB8PSBJRkZfRUNITzsN Cj4gPiArCQluZXRkZXYtPmRldl9wb3J0ID0gaTsNCj4gPiArCQluZXRkZXYtPm5ldGRldl9vcHMg PSAmcGNpNDAyX2FjY19uZXRkZXZfb3BzOw0KPiA+ICsJCVNFVF9ORVRERVZfREVWKG5ldGRldiwg JnBkZXYtPmRldik7DQo+ID4gKw0KPiA+ICsJCXByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOw0K PiA+ICsJCXByaXYtPmNhbi5zdGF0ZSA9IENBTl9TVEFURV9TVE9QUEVEOw0KPiANCj4gVGhlIHN0 YXRlIGlzIGF1dG9tYXRpY2FsbHkgc2V0IGJ5IGFsbG9jX2NhbmRldigpLg0KDQpSZW1vdmVkIHRo aXMgYXNzaWdubWVudC4NCg0KPiA+ICsJCXByaXYtPmNhbi5jdHJsbW9kZV9zdXBwb3J0ZWQgPSBD QU5fQ1RSTE1PREVfTElTVEVOT05MWSB8DQo+ID4gKwkJCUNBTl9DVFJMTU9ERV9CRVJSX1JFUE9S VElORyB8DQo+ID4gKwkJCUNBTl9DVFJMTU9ERV9DQ19MRU44X0RMQyB8DQo+ID4gKwkJCUNBTl9D VFJMTU9ERV9MT09QQkFDSzsNCj4gDQo+IFBsZWFzZSBzb3J0IHRoZXNlIGJ5IG9jY3VycmVuY2Ug aW4gY2FuL25ldGxpbmsuaA0KDQpTb3J0ZWQuDQoNCj4gPiArCQlwcml2LT5jYW4uY2xvY2suZnJl cSA9IGNhcmQtPm92LmNvcmVfZnJlcXVlbmN5Ow0KPiA+ICsJCXByaXYtPmNhbi5iaXR0aW1pbmdf Y29uc3QgPQ0KPiA+ICsJCQkoY2FyZC0+b3YuZmVhdHVyZXMgJiBBQ0NfT1ZfUkVHX0ZFQVRfTUFT S19DQU5GRCkgPw0KPiA+ICsJCQkmcGNpNDAyX2JpdHRpbWluZ19jb25zdF9jYW5mZCA6DQo+ID4g KwkJCSZwY2k0MDJfYml0dGltaW5nX2NvbnN0Ow0KPiANCj4gbml0cGljazoNCj4gUGxlYXNlIHVz ZSBpZiAoY2FyZC0+b3YuZmVhdHVyZXMgJiBBQ0NfT1ZfUkVHX0ZFQVRfTUFTS19DQU5GRCkuLi5l bHNlIGhlcmUNCg0KUmVtb3ZlZCB0aGUgdGVybmFyeSBvcGVyYXRvciBhbmQgcmVwbGFjZWQgYnkg aWYgZWxzZSBjbGF1c2UuDQoNCj4gPiArCQlwcml2LT5jYW4uZG9fc2V0X2JpdHRpbWluZyA9IGFj Y19zZXRfYml0dGltaW5nOw0KPiANCj4gUGxlYXNlIGNhbGwgaXQgZGlyZWN0bHkgZnJvbSB0aGUg b3BlbigpIGNhbGxiYWNrLg0KDQpVbmNoYW5nZWQgdGlsbCBub3cuIE5lZWQgdG8gcmV2aXNpdCBs YXRlci4uLg0KDQo+ID4gKwkJcHJpdi0+Y2FuLmRvX3NldF9tb2RlID0gYWNjX3NldF9tb2RlOw0K PiA+ICsJCXByaXYtPmNhbi5kb19nZXRfYmVycl9jb3VudGVyID0gYWNjX2dldF9iZXJyX2NvdW50 ZXI7DQo+ID4gKw0KPiA+ICsJCXByaXYtPmNvcmUgPSBjb3JlOw0KPiA+ICsJCXByaXYtPm92ID0g JmNhcmQtPm92Ow0KPiA+ICsNCj4gPiArCQllcnIgPSByZWdpc3Rlcl9jYW5kZXYobmV0ZGV2KTsN Cj4gPiArCQlpZiAoZXJyKSB7DQo+ID4gKwkJCWZyZWVfY2FuZGV2KGNvcmUtPm5ldGRldik7DQo+ ID4gKwkJCWNvcmUtPm5ldGRldiA9IE5VTEw7DQo+ID4gKwkJCWdvdG8gZmFpbHVyZTsNCj4gPiAr CQl9DQo+ID4gKw0KPiA+ICsJCW5ldGRldl9pbmZvKG5ldGRldiwgInJlZ2lzdGVyZWRcbiIpOw0K PiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICsNCj4gPiArZmFpbHVyZToNCj4g PiArCWZvciAoaS0tOyBpID49IDA7IGktLSkgew0KPiA+ICsJCXN0cnVjdCBhY2NfY29yZSAqY29y ZSA9ICZjYXJkLT5jb3Jlc1tpXTsNCj4gPiArDQo+ID4gKwkJbmV0ZGV2X2luZm8oY29yZS0+bmV0 ZGV2LCAidW5yZWdpc3RlcmluZy4uLlxuIik7DQo+ID4gKwkJdW5yZWdpc3Rlcl9jYW5kZXYoY29y ZS0+bmV0ZGV2KTsNCj4gPiArDQo+ID4gKwkJZnJlZV9jYW5kZXYoY29yZS0+bmV0ZGV2KTsNCj4g PiArCQljb3JlLT5uZXRkZXYgPSBOVUxMOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldHVybiBl cnI7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHBjaTQwMl9maW5pc2hfY29yZXMo c3RydWN0IHBjaV9kZXYgKnBkZXYpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBwY2k0MDJfY2FyZCAq Y2FyZCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsNCj4gPiArCWludCBpOw0KPiA+ICsNCj4gPiAr CWZvciAoaSA9IDA7IGkgPCBjYXJkLT5vdi5hY3RpdmVfY29yZXM7IGkrKykgew0KPiA+ICsJCXN0 cnVjdCBhY2NfY29yZSAqY29yZSA9ICZjYXJkLT5jb3Jlc1tpXTsNCj4gPiArDQo+ID4gKwkJbmV0 ZGV2X2luZm8oY29yZS0+bmV0ZGV2LCAidW5yZWdpc3RlclxuIik7DQo+ID4gKwkJdW5yZWdpc3Rl cl9jYW5kZXYoY29yZS0+bmV0ZGV2KTsNCj4gPiArDQo+ID4gKwkJZnJlZV9jYW5kZXYoY29yZS0+ bmV0ZGV2KTsNCj4gPiArCQljb3JlLT5uZXRkZXYgPSBOVUxMOw0KPiA+ICsJfQ0KPiA+ICt9DQo+ ID4gKw0KPiA+ICtzdGF0aWMgaW50IHBjaTQwMl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwg Y29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkNCj4gPiArew0KPiA+ICsJc3RydWN0IHBj aTQwMl9jYXJkICpjYXJkID0gTlVMTDsNCj4gPiArCWludCBlcnI7DQo+ID4gKw0KPiA+ICsJZXJy ID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7DQo+ID4gKwlpZiAoZXJyKQ0KPiA+ICsJCXJldHVy biBlcnI7DQo+ID4gKw0KPiA+ICsJY2FyZCA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXpl b2YoKmNhcmQpLCBHRlBfS0VSTkVMKTsNCj4gPiArCWlmICghY2FyZCkNCj4gPiArCQlnb3RvIGZh aWx1cmVfZGlzYWJsZV9wY2k7DQo+ID4gKw0KPiA+ICsJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGNh cmQpOw0KPiA+ICsNCj4gPiArCWVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgcGNpX25h bWUocGRldikpOw0KPiA+ICsJaWYgKGVycikNCj4gPiArCQlnb3RvIGZhaWx1cmVfZGlzYWJsZV9w Y2k7DQo+ID4gKw0KPiA+ICsJY2FyZC0+YWRkciA9IHBjaV9pb21hcChwZGV2LCBQQ0k0MDJfQkFS LCBQQ0k0MDJfSU9fTEVOX1RPVEFMKTsNCj4gPiArCWlmICghY2FyZC0+YWRkcikgew0KPiA+ICsJ CWVyciA9IC1FTk9NRU07DQo+ID4gKwkJZ290byBmYWlsdXJlX3JlbGVhc2VfcmVnaW9uczsNCj4g PiArCX0NCj4gPiArDQo+ID4gKwllcnIgPSBwY2k0MDJfaW5pdF9jYXJkKHBkZXYpOw0KPiA+ICsJ aWYgKGVycikNCj4gPiArCQlnb3RvIGZhaWx1cmVfdW5tYXA7DQo+ID4gKw0KPiA+ICsJZXJyID0g cGNpNDAyX2luaXRfZG1hKHBkZXYpOw0KPiA+ICsJaWYgKGVycikNCj4gPiArCQlnb3RvIGZhaWx1 cmVfdW5tYXA7DQo+ID4gKw0KPiA+ICsJZXJyID0gcGNpNDAyX2luaXRfaW50ZXJydXB0KHBkZXYp Ow0KPiA+ICsJaWYgKGVycikNCj4gPiArCQlnb3RvIGZhaWx1cmVfZmluaXNoX2RtYTsNCj4gPiAr DQo+ID4gKwllcnIgPSBwY2k0MDJfaW5pdF9jb3JlcyhwZGV2KTsNCj4gPiArCWlmIChlcnIpDQo+ ID4gKwkJZ290byBmYWlsdXJlX2ZpbmlzaF9pbnRlcnJ1cHQ7DQo+ID4gKw0KPiA+ICsJcmV0dXJu IDA7DQo+ID4gKw0KPiA+ICtmYWlsdXJlX2ZpbmlzaF9pbnRlcnJ1cHQ6DQo+ID4gKwlwY2k0MDJf ZmluaXNoX2ludGVycnVwdChwZGV2KTsNCj4gPiArDQo+ID4gK2ZhaWx1cmVfZmluaXNoX2RtYToN Cj4gPiArCXBjaTQwMl9maW5pc2hfZG1hKHBkZXYpOw0KPiA+ICsNCj4gPiArZmFpbHVyZV91bm1h cDoNCj4gPiArCXBjaV9pb3VubWFwKHBkZXYsIGNhcmQtPmFkZHIpOw0KPiA+ICsNCj4gPiArZmFp bHVyZV9yZWxlYXNlX3JlZ2lvbnM6DQo+ID4gKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOw0K PiA+ICsNCj4gPiArZmFpbHVyZV9kaXNhYmxlX3BjaToNCj4gPiArCXBjaV9kaXNhYmxlX2Rldmlj ZShwZGV2KTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gZXJyOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtz dGF0aWMgdm9pZCBwY2k0MDJfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQ0KPiA+ICt7DQo+ ID4gKwlzdHJ1Y3QgcGNpNDAyX2NhcmQgKmNhcmQgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7DQo+ ID4gKw0KPiA+ICsJcGNpNDAyX2ZpbmlzaF9pbnRlcnJ1cHQocGRldik7DQo+ID4gKwlwY2k0MDJf ZmluaXNoX2NvcmVzKHBkZXYpOw0KPiA+ICsJcGNpNDAyX2ZpbmlzaF9kbWEocGRldik7DQo+ID4g KwlwY2lfaW91bm1hcChwZGV2LCBjYXJkLT5hZGRyKTsNCj4gPiArCXBjaV9yZWxlYXNlX3JlZ2lv bnMocGRldik7DQo+ID4gKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7DQo+ID4gK30NCj4gPiAr DQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwY2k0MDJfdGJsW10gPSB7 DQo+ID4gKwl7IFBDSV9WRU5ET1JfSURfRVNER01CSCwgRVNEX1BDSV9ERVZJQ0VfSURfUENJRTQw MiwNCj4gPiArCSAgUENJX1ZFTkRPUl9JRF9FU0RHTUJILCBQQ0lfQU5ZX0lELA0KPiA+ICsJICAw VSwgMFUsIDBVTCB9LA0KPiA+ICsJeyAwLCB9DQo+ID4gK307DQo+ID4gK01PRFVMRV9ERVZJQ0Vf VEFCTEUocGNpLCBwY2k0MDJfdGJsKTsNCj4gPiArDQo+ID4gK3N0YXRpYyBzdHJ1Y3QgcGNpX2Ry aXZlciBwY2k0MDJfZHJpdmVyID0gew0KPiA+ICsJLm5hbWUgPSBEUlZfTkFNRSwNCj4gPiArCS5p ZF90YWJsZSA9IHBjaTQwMl90YmwsDQo+ID4gKwkucHJvYmUgPSBwY2k0MDJfcHJvYmUsDQo+ID4g KwkucmVtb3ZlID0gcGNpNDAyX3JlbW92ZSwNCj4gPiArfTsNCj4gPiArDQo+ID4gK21vZHVsZV9w Y2lfZHJpdmVyKHBjaTQwMl9kcml2ZXIpOw0KPiA+ICsNCj4gPiArTU9EVUxFX0RFU0NSSVBUSU9O KCJTb2NrZXQtQ0FOIGRyaXZlciBmb3IgZXNkIENBTiA0MDIgY2FyZCBmYW1pbHkgd2l0aCBlc2RB Q0MgY29yZSBvbiBQQ0llIik7DQo+ID4gK01PRFVMRV9BVVRIT1IoIlRob21hcyBLw7ZycGVyIDxz b2NrZXRjYW5AZXNkLmV1PiIpOw0KPiA+ICtNT0RVTEVfQVVUSE9SKCJTdGVmYW4gTcOkdGplIDxz dGVmYW4ubWFldGplQGVzZC5ldT4iKTsNCj4gPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOw0KPiA+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vZXNkL2VzZGFjYy5jIGIvZHJpdmVycy9uZXQv Y2FuL2VzZC9lc2RhY2MuYw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAw MDAwMDAwMDAwLi4xM2Y3Mzk3ZGZjNGUNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZHJp dmVycy9uZXQvY2FuL2VzZC9lc2RhY2MuYw0KPiA+IEBAIC0wLDAgKzEsNzc3IEBADQo+ID4gKy8v IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkNCj4gPiArLyogQ29weXJpZ2h0 IChDKSAyMDE1IC0gMjAxNiBUaG9tYXMgS8O2cnBlciwgZXNkIGVsZWN0cm9uaWMgc3lzdGVtIGRl c2lnbiBnbWJoDQo+ID4gKyAqIENvcHlyaWdodCAoQykgMjAxNyAtIDIwMjEgU3RlZmFuIE3DpHRq ZSwgZXNkIGVsZWN0cm9uaWNzIGdtYmgNCj4gPiArICovDQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8 bGludXgva3RpbWUuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2djZC5oPg0KPiA+ICsjaW5jbHVk ZSA8bGludXgvaW8uaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+DQo+IA0KPiBwbGVh c2Ugc29ydCBhbHBoYWJldGljYWxseQ0KDQpEb25lDQoNCj4gPiArI2luY2x1ZGUgImVzZGFjYy5o Ig0KPiA+ICsNCj4gPiArLyogZWNjIHZhbHVlIG9mIGVzZEFDQyBlcXVhbHMgU0pBMTAwMCdzIEVD QyByZWdpc3RlciAqLw0KPiA+ICsjZGVmaW5lIEFDQ19FQ0NfU0VHCQkJMHgxZg0KPiA+ICsjZGVm aW5lIEFDQ19FQ0NfRElSCQkJMHgyMA0KPiA+ICsjZGVmaW5lIEFDQ19FQ0NfQklUCQkJMHgwMA0K PiA+ICsjZGVmaW5lIEFDQ19FQ0NfRk9STQkJCTB4NDANCj4gPiArI2RlZmluZSBBQ0NfRUNDX1NU VUZGCQkJMHg4MA0KPiA+ICsjZGVmaW5lIEFDQ19FQ0NfTUFTSwkJCTB4YzANCj4gPiArDQo+ID4g KyNkZWZpbmUgQUNDX0JNX0lSUV9VTk1BU0tfQUxMCQkweDU1NTU1NTU1VQ0KPiA+ICsjZGVmaW5l IEFDQ19CTV9JUlFfTUFTS19BTEwJCTB4YWFhYWFhYWFVDQo+ID4gKyNkZWZpbmUgQUNDX0JNX0lS UV9NQVNLCQkJMHgyVQ0KPiA+ICsjZGVmaW5lIEFDQ19CTV9JUlFfVU5NQVNLCQkweDFVDQo+ID4g KyNkZWZpbmUgQUNDX0JNX0xFTkZMQUdfVFgJCTB4MjANCj4gPiArDQo+ID4gKyNkZWZpbmUgQUND X1JFR19TVEFUVVNfSURYX1NUQVRVU19ET1MJMTYNCj4gPiArI2RlZmluZSBBQ0NfUkVHX1NUQVRV U19JRFhfU1RBVFVTX0VTCTE3DQo+ID4gKyNkZWZpbmUgQUNDX1JFR19TVEFUVVNfSURYX1NUQVRV U19FUAkxOA0KPiA+ICsjZGVmaW5lIEFDQ19SRUdfU1RBVFVTX0lEWF9TVEFUVVNfQlMJMTkNCj4g PiArI2RlZmluZSBBQ0NfUkVHX1NUQVRVU19JRFhfU1RBVFVTX1JCUwkyMA0KPiA+ICsjZGVmaW5l IEFDQ19SRUdfU1RBVFVTX0lEWF9TVEFUVVNfUlMJMjENCj4gPiArI2RlZmluZSBBQ0NfUkVHX1NU QVRVU19NQVNLX1NUQVRVU19ET1MJQklUKEFDQ19SRUdfU1RBVFVTX0lEWF9TVEFUVVNfRE9TKQ0K PiA+ICsjZGVmaW5lIEFDQ19SRUdfU1RBVFVTX01BU0tfU1RBVFVTX0VTCUJJVChBQ0NfUkVHX1NU QVRVU19JRFhfU1RBVFVTX0VTKQ0KPiA+ICsjZGVmaW5lIEFDQ19SRUdfU1RBVFVTX01BU0tfU1RB VFVTX0VQCUJJVChBQ0NfUkVHX1NUQVRVU19JRFhfU1RBVFVTX0VQKQ0KPiA+ICsjZGVmaW5lIEFD Q19SRUdfU1RBVFVTX01BU0tfU1RBVFVTX0JTCUJJVChBQ0NfUkVHX1NUQVRVU19JRFhfU1RBVFVT X0JTKQ0KPiA+ICsjZGVmaW5lIEFDQ19SRUdfU1RBVFVTX01BU0tfU1RBVFVTX1JCUwlCSVQoQUND X1JFR19TVEFUVVNfSURYX1NUQVRVU19SQlMpDQo+ID4gKyNkZWZpbmUgQUNDX1JFR19TVEFUVVNf TUFTS19TVEFUVVNfUlMJQklUKEFDQ19SRUdfU1RBVFVTX0lEWF9TVEFUVVNfUlMpDQoNClNob3Vs ZCB0aGVzZSBkZWZpbmVzIGFsc28gYmUgcmVpbmRlbnRlZCB1c2luZyBvbmx5IGEgc2luZ2xlIHNw YWNlPw0KDQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBhY2NfcmVzZXRtb2RlX2VudGVyKHN0cnVj dCBhY2NfY29yZSAqY29yZSkNCj4gPiArew0KPiA+ICsJaW50IGk7DQo+ID4gKw0KPiA+ICsJYWNj X3NldF9iaXRzKGNvcmUsIEFDQ19DT1JFX09GX0NUUkxfTU9ERSwNCj4gPiArCQkgICAgIEFDQ19S RUdfQ09OVFJPTF9NQVNLX01PREVfUkVTRVRNT0RFKTsNCj4gPiArDQo+ID4gKwlmb3IgKGkgPSAw OyBpIDwgMTA7IGkrKykgew0KPiA+ICsJCWlmIChhY2NfcmVzZXRtb2RlX2VudGVyZWQoY29yZSkp DQo+ID4gKwkJCXJldHVybjsNCj4gPiArDQo+ID4gKwkJdWRlbGF5KDUpOw0KPiA+ICsJfQ0KPiA+ ICsNCj4gPiArCW5ldGRldl93YXJuKGNvcmUtPm5ldGRldiwgIkVudGVyaW5nIHJlc2V0IG1vZGUg dGltZWQgb3V0XG4iKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgYWNjX3Jlc2V0 bW9kZV9sZWF2ZShzdHJ1Y3QgYWNjX2NvcmUgKmNvcmUpDQo+ID4gK3sNCj4gPiArCWludCBpOw0K PiA+ICsNCj4gPiArCWFjY19jbGVhcl9iaXRzKGNvcmUsIEFDQ19DT1JFX09GX0NUUkxfTU9ERSwN Cj4gPiArCQkgICAgICAgQUNDX1JFR19DT05UUk9MX01BU0tfTU9ERV9SRVNFVE1PREUpOw0KPiA+ ICsNCj4gPiArCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7DQo+ID4gKwkJaWYgKCFhY2NfcmVz ZXRtb2RlX2VudGVyZWQoY29yZSkpDQo+ID4gKwkJCXJldHVybjsNCj4gPiArDQo+ID4gKwkJdWRl bGF5KDUpOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCW5ldGRldl93YXJuKGNvcmUtPm5ldGRldiwg IkxlYXZpbmcgcmVzZXQgbW9kZSB0aW1lZCBvdXRcbiIpOw0KPiA+ICt9DQoNCkFmdGVyIGNvbnN1 bHRhdGlvbiB3aXRoIHRoZSBGUEdBIHBlb3BsZSB0aGUgYWNjX3Jlc2V0bW9kZV9lbnRlcigpIGFu ZA0KYWNjX3Jlc2V0bW9kZV9sZWF2ZSgpIHdpbGwgYmUgcmV3b3JrZWQuIA0KDQo+ID4gKw0KPiA+ ICtzdGF0aWMgdm9pZCBhY2NfdHhxX3B1dChzdHJ1Y3QgYWNjX2NvcmUgKmNvcmUsIHUzMiBhY2Nf aWQsIHU4IGFjY19kbGMsDQo+ID4gKwkJCWNvbnN0IHZvaWQgKmRhdGEpDQo+ID4gK3sNCj4gPiAr CWFjY193cml0ZTMyX25vc3dhcChjb3JlLCBBQ0NfQ09SRV9PRl9UWEZJRk9fREFUQV8xLA0KPiA+ ICsJCQkgICAqKChjb25zdCB1MzIgKikoZGF0YSArIDQpKSk7DQo+ID4gKwlhY2Nfd3JpdGUzMl9u b3N3YXAoY29yZSwgQUNDX0NPUkVfT0ZfVFhGSUZPX0RBVEFfMCwNCj4gPiArCQkJICAgKigoY29u c3QgdTMyICopZGF0YSkpOw0KPiA+ICsJYWNjX3dyaXRlMzIoY29yZSwgQUNDX0NPUkVfT0ZfVFhG SUZPX0RMQywgYWNjX2RsYyk7DQo+ID4gKwkvKiBDQU4gaWQgbXVzdCBiZSB3cml0dGVuIGF0IGxh c3QuIFRoaXMgd3JpdGUgc3RhcnRzIFRYLiAqLw0KPiA+ICsJYWNjX3dyaXRlMzIoY29yZSwgQUND X0NPUkVfT0ZfVFhGSUZPX0lELCBhY2NfaWQpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKiBQcmVw YXJlIGNvbnZlcnNpb24gZmFjdG9yIGZyb20gRVNEQUNDIHRpbWUgc3RhbXAgdGlja3MgdG8gbnMN Cj4gPiArICoNCj4gPiArICogVGhlIGNvbnZlcnNpb24gZmFjdG9yIHRzMm5zIGZyb20gdGltZSBz dGFtcCBjb3VudHMgdG8gbnMgaXMgYmFzaWNhbGx5DQo+ID4gKyAqCXRzMm5zID0gTlNFQ19QRVJf U0VDIC8gdGltZXN0YW1wX2ZyZXF1ZW5jeQ0KPiA+ICsgKg0KPiA+ICsgKiBUbyBhdm9pZCBhbiBv dmVyZmxvdywgdGhlIHRzMm5zIGZyYWN0aW9uIGlzIHRydW5jYXRlZCB3aXRoIGl0cyBnY2QgYW5k DQo+ID4gKyAqIG9ubHkgdGhlIHRydW5jYXRlZCBudW1lcmF0b3IgYW5kIGRlbm9taW5hdG9yIGFy ZSB1c2VkIGZ1cnRoZXIuDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgdm9pZCBhY2NfaW5pdF9vdl90 czJucyhzdHJ1Y3QgYWNjX292ICpvdikNCj4gPiArew0KPiA+ICsJdTMyIHRzMm5zX2djZCA9ICh1 MzIpZ2NkKE5TRUNfUEVSX1NFQywgb3YtPnRpbWVzdGFtcF9mcmVxdWVuY3kpOw0KPiA+ICsNCj4g PiArCW92LT50czJuc19udW1lcmF0b3IgPSAodTMyKU5TRUNfUEVSX1NFQyAvIHRzMm5zX2djZDsN Cj4gPiArCW92LT50czJuc19kZW5vbWluYXRvciA9IG92LT50aW1lc3RhbXBfZnJlcXVlbmN5IC8g dHMybnNfZ2NkOw0KPiA+ICt9DQo+IA0KPiBQbGVhc2UgZG9uJ3QgY3JhZnQgeW91ciBvd24gdGlt ZSBjb252ZXJzaW9uIGZ1bmN0aW9ucy4gcGxlYXNlIHVzZQ0KPiBjeWNsZWNvdW50ZXIvdGltZXJj b3VudGVyIGluc3RlYWQuDQo+IA0KPiBIYXZlIGEgbG9vayBhdDoNCj4gZHJpdmVycy9uZXQvY2Fu L3NwaS9tY3AyNTF4ZmQvbWNwMjUxeGZkLXRpbWVzdGFtcC5jDQo+IA0KPiA+ICsNCj4gPiArc3Rh dGljIGt0aW1lX3QgYWNjX3RzMmt0aW1lKHN0cnVjdCBhY2Nfb3YgKm92LCB1NjQgdHMpDQo+ID4g K3sNCj4gPiArCXU2NCBuczsNCj4gPiArDQo+ID4gKwl0cyA9IHRzICogb3YtPnRzMm5zX251bWVy YXRvcjsNCj4gPiArCW5zID0gZGl2X3U2NCh0cywgb3YtPnRzMm5zX2Rlbm9taW5hdG9yKTsNCj4g PiArDQo+ID4gKwlyZXR1cm4gbnNfdG9fa3RpbWUobnMpOw0KPiA+ICt9DQoNClRoZSB0aW1lIGNv bnZlcnNpb24gaXMgZG9uZSBoZXJlLiBUaGUgZXNkQUNDIHByb3ZpZGVzIGEgZnVsbCA2NC1iaXQg dGltZXN0YW1wDQp3aXRoIDgwTUh6IHJlc29sdXRpb24uIFRoaXMgdGltZXN0YW1wIHdpbGwgd3Jh cCBhZnRlcighKSB0aGUga2VybmVsIHRpbWUNCmt0aW1lX3QuIFRvIGNvbnZlcnQgZnJvbSA4ME1I eiBhIG11bHRpcGxpY2F0aW9uIHdpdGggMTIuNSBpcyBuZWVkZWQgd2hpY2ggDQppcyB3cml0dGVu IGhlcmUgb3Zlcmx5IGNvbXBsaWNhdGVkIHRvIGNvcGUgd2l0aCBvdGhlciBwb3NzaWJsZSB0aW1l c3RhbXAgDQpmcmVxdWVuY2llcy4gQWZ0ZXIgYWxsIG9ubHkgNDBNSHogYW5kIDgwTUh6IGFyZSBs aWtlbHkgYmVjYXVzZSB0aGVzZSBhcmUgdGhlDQpyZWNvbW1lbmRlZCBjbG9jayBmcmVxdWVuY2ll cyBmb3IgQ0FOLUZEIGNhcGFibGUgY29udHJvbGxlcnMuDQoNClNvIHRoaXMgY291bGQgYmUgc2lt cGxpZmllZCB0byB0aGUgY29kZSBiZWxvdy4NCg0KI2RlZmluZSBFU0RBQ0NfVFNfRkFDVE9SIDI1 DQojZGVmaW5lIEVTREFDQ19UU184ME1IWl9TSElGVCAxDQojZGVmaW5lIEVTREFDQ19UU180ME1I Wl9TSElGVCAwDQoNCnN0YXRpYyB2b2lkIGFjY19pbml0X292X3RzMm5zKHN0cnVjdCBhY2Nfb3Yg Km92LCB1MzIgdGltZXN0YW1wX2ZyZXF1ZW5jeSkNCnsNCglpZiAoODAgKiBNSFogPT0gdGltZXN0 YW1wX2ZyZXF1ZW5jeSkNCgkJb3YtPnRzMm5zX3NoaWZ0ID0gRVNEQUNDX1RTXzgwTUhaX1NISUZU Ow0KCWVsc2UgaWYgKDQwICogTUhaID09IHRpbWVzdGFtcF9mcmVxdWVuY3kpDQoJCW92LT50czJu c19zaGlmdCA9IEVTREFDQ19UU180ME1IWl9TSElGVDsNCn0NCg0Kc3RhdGljIGt0aW1lX3QgYWNj X3RzMmt0aW1lKHN0cnVjdCBhY2Nfb3YgKm92LCB1NjQgdHMpDQp7DQoJdTY0IG5zOw0KDQoJdHMg PSB0cyAqIEVTREFDQ19UU19GQUNUT1I7DQoJbnMgPSB0cyA+PiBvdi0+dHMybnNfc2hpZnQ7DQoN CglyZXR1cm4gbnNfdG9fa3RpbWUobnMpOw0KfQ0KDQoNCj4gPiArDQo+ID4gK3ZvaWQgYWNjX2lu aXRfb3Yoc3RydWN0IGFjY19vdiAqb3YsIHN0cnVjdCBkZXZpY2UgKmRldikNCj4gPiArew0KPiA+ ICsJdTMyIHRlbXA7DQo+ID4gKwkvKiBGb3IgdGhlIGp1c3RpZmljYXRpb24gb2YgdGhpcyBzZWUg Y29tbWVudCBvbiBzdHJ1Y3QgYWNjX2JtbXNnKg0KPiA+ICsJICogaW4gZXNkYWNjLmguDQo+ID4g KwkgKi8NCj4gPiArCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IGFjY19ibW1zZykgIT0gQUND X0NPUkVfRE1BTVNHX1NJWkUpOw0KPiA+ICsNCj4gPiArCXRlbXAgPSBhY2Nfb3ZfcmVhZDMyKG92 LCBBQ0NfT1ZfT0ZfVkVSU0lPTik7DQo+ID4gKwlvdi0+dmVyc2lvbiA9ICh1MTYpdGVtcDsNCj4g PiArCW92LT5mZWF0dXJlcyA9ICh1MTYpKHRlbXAgPj4gMTYpOw0KPiANCj4gY2FzdHMgbm90IG5l ZWRlZA0KU2VlIGNvbW1lbnQgYXQgdG9wIG9mIGVtYWlsLg0KDQo+ID4gKw0KPiA+ICsJdGVtcCA9 IGFjY19vdl9yZWFkMzIob3YsIEFDQ19PVl9PRl9JTkZPKTsNCj4gPiArCW92LT50b3RhbF9jb3Jl cyA9ICh1OCl0ZW1wOw0KPiA+ICsJb3YtPmFjdGl2ZV9jb3JlcyA9ICh1OCkodGVtcCA+PiA4KTsN Cj4gDQo+IGNhc3RzIG5vdCBuZWVkZWQNClNlZSBjb21tZW50IGF0IHRvcCBvZiBlbWFpbC4NCg0K PiA+ICsNCj4gPiArCW92LT5jb3JlX2ZyZXF1ZW5jeSA9IGFjY19vdl9yZWFkMzIob3YsIEFDQ19P Vl9PRl9DQU5DT1JFX0ZSRVEpOw0KPiA+ICsJb3YtPnRpbWVzdGFtcF9mcmVxdWVuY3kgPSBhY2Nf b3ZfcmVhZDMyKG92LCBBQ0NfT1ZfT0ZfVFNfRlJFUV9MTyk7DQo+ID4gKwlhY2NfaW5pdF9vdl90 czJucyhvdik7DQo+ID4gKw0KPiA+ICsJLyogRGVwZW5kaW5nIG9uIEVTREFDQyBmZWF0dXJlIE5F V19QU0MgZW5hYmxlIHRoZSBuZXcgcHJlc2NhbGVyDQo+ID4gKwkgKiBvciBhZGp1c3QgY29yZV9m cmVxdWVuY3kgYWNjb3JkaW5nIHRvIHRoZSBpbXBsaWNpdCBkaXZpc2lvbiBieSAyLg0KPiA+ICsJ ICovDQo+ID4gKwlpZiAob3YtPmZlYXR1cmVzICYgQUNDX09WX1JFR19GRUFUX01BU0tfTkVXX1BT Qykgew0KPiA+ICsJCWFjY19vdl9zZXRfYml0cyhvdiwgQUNDX09WX09GX01PREUsDQo+ID4gKwkJ CQlBQ0NfT1ZfUkVHX01PREVfTUFTS19ORVdfUFNDX0VOQUJMRSk7DQo+ID4gKwl9IGVsc2Ugew0K PiA+ICsJCW92LT5jb3JlX2ZyZXF1ZW5jeSAvPSAyOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWRl dl9pbmZvKGRldiwNCj4gPiArCQkgIkVTREFDQyB2JXUsIGZyZXE6ICV1LyV1LCBmZWF0L3N0cmFw OiAweCV4LzB4JXgsIGNvcmVzOiAldS8ldVxuIiwNCj4gPiArCQkgb3YtPnZlcnNpb24sIG92LT5j b3JlX2ZyZXF1ZW5jeSwgb3YtPnRpbWVzdGFtcF9mcmVxdWVuY3ksDQo+ID4gKwkJIG92LT5mZWF0 dXJlcywgYWNjX292X3JlYWQzMihvdiwgQUNDX09WX09GX0lORk8pID4+IDE2LA0KPiA+ICsJCSBv di0+YWN0aXZlX2NvcmVzLCBvdi0+dG90YWxfY29yZXMpOw0KPiA+ICsJZGV2X2RiZyhkZXYsICJF U0RBQ0MgdHMybnM6IG51bWVyYXRvciAldSwgZGVub21pbmF0b3IgJXVcbiIsDQo+ID4gKwkJb3Yt PnRzMm5zX251bWVyYXRvciwgb3YtPnRzMm5zX2Rlbm9taW5hdG9yKTsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArdm9pZCBhY2NfaW5pdF9ibV9wdHIoc3RydWN0IGFjY19vdiAqb3YsIHN0cnVjdCBhY2Nf Y29yZSAqY29yZXMsIGNvbnN0IHZvaWQgKm1lbSkNCj4gPiArew0KPiA+ICsJdW5zaWduZWQgaW50 IHU7DQo+ID4gKw0KPiA+ICsJLyogRE1BIGJ1ZmZlciBsYXlvdXQgYXMgZm9sbG93cyB3aGVyZSBO IGlzIHRoZSBudW1iZXIgb2YgQ0FOIGNvcmVzDQo+ID4gKwkgKiBpbXBsZW1lbnRlZCBpbiB0aGUg RlBHQSwgaS5lLiBOID0gb3YtPnRvdGFsX2NvcmVzDQo+ID4gKwkgKg0KPiA+ICsJICogICBMYXlv dXQgICAgICAgICAgICAgICAgICAgU2VjdGlvbiBzaXplDQo+ID4gKwkgKiArLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rDQo+ID4gKwkgKiB8IEZJRk8gQ2FyZC9PdmVydmlldwkgICB8ICBBQ0NfQ09S RV9ETUFCVUZfU0laRQ0KPiA+ICsJICogfAkJCSAgIHwNCj4gPiArCSAqICstLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSsNCj4gPiArCSAqIHwgRklGTyBDb3JlMAkJICAgfCAgQUNDX0NPUkVfRE1BQlVG X1NJWkUNCj4gPiArCSAqIHwJCQkgICB8DQo+ID4gKwkgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rDQo+ID4gKwkgKiB8IC4uLgkJICAgfCAgLi4uDQo+ID4gKwkgKiB8CQkJICAgfA0KPiA+ICsJ ICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KPiA+ICsJICogfCBGSUZPIENvcmVOCQkgICB8 ICBBQ0NfQ09SRV9ETUFCVUZfU0laRQ0KPiA+ICsJICogfAkJCSAgIHwNCj4gPiArCSAqICstLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSsNCj4gPiArCSAqIHwgaXJxX2NudCBDYXJkL092ZXJ2aWV3IHwg IHNpemVvZih1MzIpDQo+ID4gKwkgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQo+ID4gKwkg KiB8IGlycV9jbnQgQ29yZTAJICAgfCAgc2l6ZW9mKHUzMikNCj4gPiArCSAqICstLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSsNCj4gPiArCSAqIHwgLi4uCQkgICB8ICAuLi4NCj4gPiArCSAqICstLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSsNCj4gPiArCSAqIHwgaXJxX2NudCBDb3JlTgkgICB8ICBzaXpl b2YodTMyKQ0KPiA+ICsJICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KPiA+ICsJICovDQo+ ID4gKwlvdi0+Ym1maWZvLm1lc3NhZ2VzID0gbWVtOw0KPiA+ICsJb3YtPmJtZmlmby5pcnFfY250 ID0gbWVtICsgKG92LT50b3RhbF9jb3JlcyArIDFVKSAqIEFDQ19DT1JFX0RNQUJVRl9TSVpFOw0K PiA+ICsNCj4gPiArCWZvciAodSA9IDBVOyB1IDwgb3YtPmFjdGl2ZV9jb3JlczsgdSsrKSB7DQo+ ID4gKwkJc3RydWN0IGFjY19jb3JlICpjb3JlID0gJmNvcmVzW3VdOw0KPiA+ICsNCj4gPiArCQlj b3JlLT5ibWZpZm8ubWVzc2FnZXMgPSBtZW0gKyAodSArIDFVKSAqIEFDQ19DT1JFX0RNQUJVRl9T SVpFOw0KPiA+ICsJCWNvcmUtPmJtZmlmby5pcnFfY250ID0gb3YtPmJtZmlmby5pcnFfY250ICsg KHUgKyAxVSk7DQo+ID4gKwl9DQo+ID4gK30NCj4gPiArDQo+ID4gK2ludCBhY2Nfb3BlbihzdHJ1 Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgYWNjX25ldF9wcml2 ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsNCj4gPiArCXN0cnVjdCBhY2NfY29yZSAqY29y ZSA9IHByaXYtPmNvcmU7DQo+ID4gKwl1MzIgY3RybF9tb2RlOw0KPiA+ICsJaW50IGVycjsNCj4g PiArDQo+ID4gKwkvKiBSZXRyeSB0byBlbnRlciBSRVNFVCBtb2RlIGlmIG91dCBvZiBzeW5jLiAq Lw0KPiA+ICsJaWYgKHByaXYtPmNhbi5zdGF0ZSAhPSBDQU5fU1RBVEVfU1RPUFBFRCkgew0KPiA+ ICsJCW5ldGRldl93YXJuKG5ldGRldiwgIkVudGVyZWQgJXMoKSB3aXRoIGJhZCBjYW4uc3RhdGU6 ICVzXG4iLA0KPiA+ICsJCQkgICAgX19mdW5jX18sIGNhbl9nZXRfc3RhdGVfc3RyKHByaXYtPmNh bi5zdGF0ZSkpOw0KPiA+ICsJCWFjY19yZXNldG1vZGVfZW50ZXIoY29yZSk7DQo+ID4gKwkJaWYg KGFjY19yZXNldG1vZGVfZW50ZXJlZChjb3JlKSkNCj4gPiArCQkJcHJpdi0+Y2FuLnN0YXRlID0g Q0FOX1NUQVRFX1NUT1BQRUQ7DQo+ID4gKwl9DQo+IA0KPiBXaGF0IGFib3V0IGFsd2F5cyBkb2lu ZyBhIGZ1bGwgcmVzZXQgZHVyaW5nIG9wZW4oKS4NCg0KSXQncyBub3QgcXVpdGUgY2xlYXIgdG8g bWUgd2hhdCB5b3UgbWVhbiB3aXRoIGEgImZ1bGwgcmVzZXQiIGR1cmluZyBvcGVuLiBUaGUNCmFj Y19yZXNldG1vZGVfZW50ZXIoKSBzd2l0Y2hlcyB0aGUgRlBHQSBpbnRvIGEgc3RhdGUgdGhlIGlz IGVxdWl2YWxlbnQgdG8gdGhlDQoicmVzZXQgbW9kZSBvZiBhIFNKQTEwMDAiIGkuIGUuIHRoZSBD QU4gY29udHJvbGxlciBpcyBvZmYgYnVzIGFuZCBjb25maWd1cmFibGUuDQoNCkJ1dCBkdWUgdG8g dGhlIHJld29yayBvZiB0aGUgYWNjX3Jlc2V0bW9kZV9lbnRlcigpIGZ1bmN0aW9uIHRoaXMgY29k ZSB3aWxsDQpiZSBjaGFuZ2VkIGluZGVlZC4NCg0KPiANCj4gPiArDQo+ID4gKwllcnIgPSBvcGVu X2NhbmRldihuZXRkZXYpOw0KPiA+ICsJaWYgKGVycikNCj4gPiArCQlyZXR1cm4gZXJyOw0KPiA+ ICsNCj4gPiArCWN0cmxfbW9kZSA9IEFDQ19SRUdfQ09OVFJPTF9NQVNLX0lFX1JYVFggfA0KPiA+ ICsJCQlBQ0NfUkVHX0NPTlRST0xfTUFTS19JRV9UWEVSUk9SIHwNCj4gPiArCQkJQUNDX1JFR19D T05UUk9MX01BU0tfSUVfRVJSV0FSTiB8DQo+ID4gKwkJCUFDQ19SRUdfQ09OVFJPTF9NQVNLX0lF X09WRVJSVU4gfA0KPiA+ICsJCQlBQ0NfUkVHX0NPTlRST0xfTUFTS19JRV9FUlJQQVNTOw0KPiA+ ICsNCj4gPiArCWlmIChwcml2LT5jYW4uY3RybG1vZGUgJiBDQU5fQ1RSTE1PREVfQkVSUl9SRVBP UlRJTkcpDQo+ID4gKwkJY3RybF9tb2RlIHw9IEFDQ19SRUdfQ09OVFJPTF9NQVNLX0lFX0JVU0VS UjsNCj4gPiArDQo+ID4gKwlpZiAocHJpdi0+Y2FuLmN0cmxtb2RlICYgQ0FOX0NUUkxNT0RFX0xJ U1RFTk9OTFkpDQo+ID4gKwkJY3RybF9tb2RlIHw9IEFDQ19SRUdfQ09OVFJPTF9NQVNLX01PREVf TE9NOw0KPiA+ICsNCj4gPiArCWFjY19zZXRfYml0cyhjb3JlLCBBQ0NfQ09SRV9PRl9DVFJMX01P REUsIGN0cmxfbW9kZSk7DQo+ID4gKw0KPiA+ICsJYWNjX3Jlc2V0bW9kZV9sZWF2ZShjb3JlKTsN Cj4gPiArCWlmICghYWNjX3Jlc2V0bW9kZV9lbnRlcmVkKGNvcmUpKQ0KPiA+ICsJCXByaXYtPmNh bi5zdGF0ZSA9IENBTl9TVEFURV9FUlJPUl9BQ1RJVkU7DQo+IA0KPiBJZiB0aGUgZGV2aWNlIGRp ZG4ndCBsZWF2ZSByZXNldCBtb2RlLCB0aGVuIHJldHVybiB3aXRoIGFuIGVycm9yLg0KPiANCj4g PiArCS8qIFJlc3luYyBUWCBGSUZPIGluZGljZXMgdG8gSFcgc3RhdGUgYWZ0ZXIgKHJlLSlzdGFy dC4gKi8NCj4gPiArCXsNCj4gPiArCQl1MzIgdHhfZmlmb19zdGF0dXMgPSBhY2NfcmVhZDMyKGNv cmUsIEFDQ19DT1JFX09GX1RYRklGT19TVEFUVVMpOw0KPiA+ICsNCj4gPiArCQljb3JlLT50eF9m aWZvX2hlYWQgPSB0eF9maWZvX3N0YXR1cyAmIDB4ZmY7DQo+ID4gKwkJY29yZS0+dHhfZmlmb190 YWlsID0gKHR4X2ZpZm9fc3RhdHVzID4+IDgpICYgMHhmZjsNCj4gPiArCX0NCj4gDQo+IFdoeSB0 aGlzIGV4dHJhIGxldmVsIG9mIGluZGVudGlvbj8NCg0KVGhpcyB3YXMgb25seSBkb25lIHRvIGlu dHJvZHVjZSB0aGUgdmFyaWFibGUgdHhfZmlmb19zdGF0dXMgbGF0ZSBpbiB0aGUgZnVuY3Rpb24u DQpCdXQgdGhlIHZhcmlhYmxlIGRlY2xhcmF0aW9uIGlzIG5vdyBhdCB0aGUgdG9wIG9mIHRoZSBm dW5jdGlvbi4NCg0KDQo+ID4gKwluZXRpZl9zdGFydF9xdWV1ZShuZXRkZXYpOw0KPiA+ICsJcmV0 dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK2ludCBhY2NfY2xvc2Uoc3RydWN0IG5ldF9kZXZp Y2UgKm5ldGRldikNCj4gPiArew0KPiA+ICsJc3RydWN0IGFjY19uZXRfcHJpdiAqcHJpdiA9IG5l dGRldl9wcml2KG5ldGRldik7DQo+ID4gKwlzdHJ1Y3QgYWNjX2NvcmUgKmNvcmUgPSBwcml2LT5j b3JlOw0KPiA+ICsNCj4gPiArCWFjY19jbGVhcl9iaXRzKGNvcmUsIEFDQ19DT1JFX09GX0NUUkxf TU9ERSwNCj4gPiArCQkgICAgICAgQUNDX1JFR19DT05UUk9MX01BU0tfSUVfUlhUWCB8DQo+ID4g KwkJICAgICAgIEFDQ19SRUdfQ09OVFJPTF9NQVNLX0lFX1RYRVJST1IgfA0KPiA+ICsJCSAgICAg ICBBQ0NfUkVHX0NPTlRST0xfTUFTS19JRV9FUlJXQVJOIHwNCj4gPiArCQkgICAgICAgQUNDX1JF R19DT05UUk9MX01BU0tfSUVfT1ZFUlJVTiB8DQo+ID4gKwkJICAgICAgIEFDQ19SRUdfQ09OVFJP TF9NQVNLX0lFX0VSUlBBU1MgfA0KPiA+ICsJCSAgICAgICBBQ0NfUkVHX0NPTlRST0xfTUFTS19J RV9CVVNFUlIpOw0KPiA+ICsNCj4gPiArCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsNCj4gPiAr CWFjY19yZXNldG1vZGVfZW50ZXIoY29yZSk7DQo+ID4gKwlpZiAoYWNjX3Jlc2V0bW9kZV9lbnRl cmVkKGNvcmUpKQ0KPiA+ICsJCXByaXYtPmNhbi5zdGF0ZSA9IENBTl9TVEFURV9TVE9QUEVEOw0K PiANCj4gQmV0dGVyIG1hcmsgdGhlIGRldmljZSBhcyBzdG9wcGVkLCBhbmQgbWFrZSBmdWxsIHJl c2V0IGR1cmluZyBvcGVuKCkNCg0KV2hhdCBkbyB5b3UgbWVhbiB3aXRoIGZ1bGwgcmVzZXQ/DQoN Cj4gDQo+ID4gKw0KPiA+ICsJLyogTWFyayBwZW5kaW5nIFRYIHJlcXVlc3RzIHRvIGJlIGFib3J0 ZWQgYWZ0ZXIgY29udHJvbGxlciByZXN0YXJ0LiAqLw0KPiA+ICsJYWNjX3dyaXRlMzIoY29yZSwg QUNDX0NPUkVfT0ZfVFhfQUJPUlRfTUFTSywgMHhmZmZmKTsNCj4gPiArDQo+ID4gKwkvKiBBQ0Nf UkVHX0NPTlRST0xfTUFTS19NT0RFX0xPTSBpcyBvbmx5IGFjY2Vzc2libGUgaW4gUkVTRVQgbW9k ZSAqLw0KPiA+ICsJYWNjX2NsZWFyX2JpdHMoY29yZSwgQUNDX0NPUkVfT0ZfQ1RSTF9NT0RFLA0K PiA+ICsJCSAgICAgICBBQ0NfUkVHX0NPTlRST0xfTUFTS19NT0RFX0xPTSk7DQo+ID4gKw0KPiA+ ICsJY2xvc2VfY2FuZGV2KG5ldGRldik7DQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArbmV0ZGV2X3R4X3QgYWNjX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3Ry dWN0IG5ldF9kZXZpY2UgKm5ldGRldikNCj4gPiArew0KPiA+ICsJc3RydWN0IGFjY19uZXRfcHJp diAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7DQo+ID4gKwlzdHJ1Y3QgYWNjX2NvcmUgKmNv cmUgPSBwcml2LT5jb3JlOw0KPiA+ICsJc3RydWN0IGNhbl9mcmFtZSAqY2YgPSAoc3RydWN0IGNh bl9mcmFtZSAqKXNrYi0+ZGF0YTsNCj4gPiArCXU4IHR4X2ZpZm9faGVhZCA9IGNvcmUtPnR4X2Zp Zm9faGVhZDsNCj4gPiArCWludCBmaWZvX3VzYWdlOw0KPiA+ICsJdTMyIGFjY19pZDsNCj4gPiAr CXU4IGFjY19kbGM7DQo+IA0KPiBQbGVhc2UgYWRkIGEgY2hlY2sgZm9yIGNhbl9kcm9wcGVkX2lu dmFsaWRfc2tiKCkuDQoNCkFkZGVkIGxpa2UgaW4gb3RoZXIgZHJpdmVycy4NCg0KDQo+ID4gKw0K PiA+ICsJLyogQWNjZXNzIGNvcmUtPnR4X2ZpZm9fdGFpbCBvbmx5IG9uY2UgYmVjYXVzZSBpdCBt YXkgYmUgY2hhbmdlZA0KPiA+ICsJICogZnJvbSB0aGUgaW50ZXJydXB0IGxldmVsLg0KPiA+ICsJ ICovDQo+ID4gKwlmaWZvX3VzYWdlID0gdHhfZmlmb19oZWFkIC0gY29yZS0+dHhfZmlmb190YWls Ow0KPiA+ICsJaWYgKGZpZm9fdXNhZ2UgPCAwKQ0KPiA+ICsJCWZpZm9fdXNhZ2UgKz0gY29yZS0+ dHhfZmlmb19zaXplOw0KPiA+ICsNCj4gPiArCWlmIChmaWZvX3VzYWdlID49IGNvcmUtPnR4X2Zp Zm9fc2l6ZSAtIDEpIHsNCj4gPiArCQluZXRkZXZfZXJyKGNvcmUtPm5ldGRldiwNCj4gPiArCQkJ ICAgIkJVRzogVFggcmluZyBmdWxsIHdoZW4gcXVldWUgYXdha2UhXG4iKTsNCj4gPiArCQluZXRp Zl9zdG9wX3F1ZXVlKG5ldGRldik7DQo+ID4gKwkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOw0KPiA+ ICsJfQ0KPiA+ICsNCj4gPiArCWlmIChmaWZvX3VzYWdlID09IGNvcmUtPnR4X2ZpZm9fc2l6ZSAt IDIpDQo+ID4gKwkJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOw0KDQpJIG5lZWQgdG8gcmV2aXNp dCB0aGlzIGxhdGVyLg0KDQoNCj4gWW91IG5lZWQgcHJvcGVyIG1lbW9yeSBiYXJyaWVycyBhbmQg ZG91YmxlIGNoZWNraW5nOiBTZWUgdGhlIG1jcDI1MXhmZA0KPiBkcml2ZXI6DQo+IA0KPiA+IG5l dGRldl90eF90IG1jcDI1MXhmZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsDQo+ID4g CQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikNCj4gPiB7DQo+ID4gCXN0cnVjdCBtY3AyNTF4 ZmRfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOw0KPiA+IAlzdHJ1Y3QgbWNwMjUxeGZk X3R4X3JpbmcgKnR4X3JpbmcgPSBwcml2LT50eDsNCj4gPiAJc3RydWN0IG1jcDI1MXhmZF90eF9v YmogKnR4X29iajsNCj4gPiAJdW5zaWduZWQgaW50IGZyYW1lX2xlbjsNCj4gPiAJdTggdHhfaGVh ZDsNCj4gPiAJaW50IGVycjsNCj4gPiANCj4gPiAJaWYgKGNhbl9kcm9wcGVkX2ludmFsaWRfc2ti KG5kZXYsIHNrYikpDQo+ID4gCQlyZXR1cm4gTkVUREVWX1RYX09LOw0KPiA+IA0KPiA+IAlpZiAo bWNwMjUxeGZkX3R4X2J1c3kocHJpdiwgdHhfcmluZykpDQo+ID4gCQlyZXR1cm4gTkVUREVWX1RY X0JVU1k7DQo+IA0KPiBUaGUgbWFnaWMgaGFwcGVucyBpbiBtY3AyNTF4ZmRfdHhfYnVzeSgpOg0K PiANCj4gPiBzdGF0aWMgYm9vbCBtY3AyNTF4ZmRfdHhfYnVzeShjb25zdCBzdHJ1Y3QgbWNwMjUx eGZkX3ByaXYgKnByaXYsDQo+ID4gCQkJICAgICAgc3RydWN0IG1jcDI1MXhmZF90eF9yaW5nICp0 eF9yaW5nKQ0KPiA+IHsNCj4gPiAJaWYgKG1jcDI1MXhmZF9nZXRfdHhfZnJlZSh0eF9yaW5nKSA+ IDApDQo+ID4gCQlyZXR1cm4gZmFsc2U7DQo+ID4gDQo+ID4gCW5ldGlmX3N0b3BfcXVldWUocHJp di0+bmRldik7DQo+ID4gDQo+ID4gCS8qIE1lbW9yeSBiYXJyaWVyIGJlZm9yZSBjaGVja2luZyB0 eF9mcmVlIChoZWFkIGFuZCB0YWlsKSAqLw0KPiA+IAlzbXBfbWIoKTsNCj4gPiANCj4gPiAJaWYg KG1jcDI1MXhmZF9nZXRfdHhfZnJlZSh0eF9yaW5nKSA9PSAwKSB7DQo+IA0KPiBJZiB5b3UgbmVl ZCBhdCBsZWFzdCAyIGZyZWUgc2xvdHMsIGFkanVzdCB0aGlzIGNoZWNrLg0KPiANCj4gPiAJCW5l dGRldl9kYmcocHJpdi0+bmRldiwNCj4gPiAJCQkgICAiU3RvcHBpbmcgdHgtcXVldWUgKHR4X2hl YWQ9MHglMDh4LCB0eF90YWlsPTB4JTA4eCwgbGVuPSVkKS5cbiIsDQo+ID4gCQkJICAgdHhfcmlu Zy0+aGVhZCwgdHhfcmluZy0+dGFpbCwNCj4gPiAJCQkgICB0eF9yaW5nLT5oZWFkIC0gdHhfcmlu Zy0+dGFpbCk7DQo+ID4gDQo+ID4gCQlyZXR1cm4gdHJ1ZTsNCj4gPiAJfQ0KPiA+IA0KPiA+IAlu ZXRpZl9zdGFydF9xdWV1ZShwcml2LT5uZGV2KTsNCj4gPiANCj4gPiAJcmV0dXJuIGZhbHNlOw0K PiA+IH0NCj4gPiArDQo+ID4gKwlhY2NfZGxjID0gY2FuX2dldF9jY19kbGMoY2YsIHByaXYtPmNh bi5jdHJsbW9kZSk7DQo+ID4gKwlpZiAoY2YtPmNhbl9pZCAmIENBTl9SVFJfRkxBRykNCj4gPiAr CQlhY2NfZGxjIHw9IEFDQ19DQU5fUlRSX0ZMQUc7DQo+ID4gKw0KPiA+ICsJaWYgKGNmLT5jYW5f aWQgJiBDQU5fRUZGX0ZMQUcpIHsNCj4gPiArCQlhY2NfaWQgPSBjZi0+Y2FuX2lkICYgQ0FOX0VG Rl9NQVNLOw0KPiA+ICsJCWFjY19pZCB8PSBBQ0NfQ0FOX0VGRl9GTEFHOw0KPiA+ICsJfSBlbHNl IHsNCj4gPiArCQlhY2NfaWQgPSBjZi0+Y2FuX2lkICYgQ0FOX1NGRl9NQVNLOw0KPiA+ICsJfQ0K PiA+ICsNCj4gPiArCWNhbl9wdXRfZWNob19za2Ioc2tiLCBuZXRkZXYsIGNvcmUtPnR4X2ZpZm9f aGVhZCwgMCk7DQo+ID4gKw0KPiA+ICsJdHhfZmlmb19oZWFkKys7DQo+ID4gKwlpZiAodHhfZmlm b19oZWFkID49IGNvcmUtPnR4X2ZpZm9fc2l6ZSkNCj4gPiArCQl0eF9maWZvX2hlYWQgPSAwVTsN Cj4gPiArCWNvcmUtPnR4X2ZpZm9faGVhZCA9IHR4X2ZpZm9faGVhZDsNCj4gPiArDQo+ID4gKwlh Y2NfdHhxX3B1dChjb3JlLCBhY2NfaWQsIGFjY19kbGMsIGNmLT5kYXRhKTsNCj4gPiArDQo+ID4g KwlyZXR1cm4gTkVUREVWX1RYX09LOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtpbnQgYWNjX2dldF9i ZXJyX2NvdW50ZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwNCj4gPiArCQkJIHN0 cnVjdCBjYW5fYmVycl9jb3VudGVyICpiZWMpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBhY2NfbmV0 X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOw0KPiA+ICsJdTMyIGNvcmVfc3RhdHVz ID0gYWNjX3JlYWQzMihwcml2LT5jb3JlLCBBQ0NfQ09SRV9PRl9TVEFUVVMpOw0KPiA+ICsNCj4g PiArCWJlYy0+dHhlcnIgPSAoY29yZV9zdGF0dXMgPj4gOCkgJiAweGZmOw0KPiA+ICsJYmVjLT5y eGVyciA9IGNvcmVfc3RhdHVzICYgMHhmZjsNCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiAr fQ0KPiA+ICsNCj4gPiAraW50IGFjY19zZXRfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2 LCBlbnVtIGNhbl9tb2RlIG1vZGUpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBhY2NfbmV0X3ByaXYg KnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOw0KPiA+ICsNCj4gPiArCXN3aXRjaCAobW9kZSkg ew0KPiA+ICsJY2FzZSBDQU5fTU9ERV9TVEFSVDoNCj4gPiArCQkvKiBQYXJhbm9pZCBGSUZPIGlu ZGV4IGNoZWNrLiAqLw0KPiA+ICsJCXsNCj4gPiArCQkJY29uc3QgdTMyIHR4X2ZpZm9fc3RhdHVz ID0NCj4gPiArCQkJCWFjY19yZWFkMzIocHJpdi0+Y29yZSwgQUNDX0NPUkVfT0ZfVFhGSUZPX1NU QVRVUyk7DQo+ID4gKwkJCWNvbnN0IHU4IGh3X2ZpZm9faGVhZCA9ICh1OCl0eF9maWZvX3N0YXR1 czsNCj4gDQo+IGNhc3Qgbm90IG5lZWRlZA0KU2VlIGNvbW1lbnQgYXQgdG9wIG9mIGVtYWlsLg0K DQo+ID4gKw0KPiA+ICsJCQlpZiAoaHdfZmlmb19oZWFkICE9IHByaXYtPmNvcmUtPnR4X2ZpZm9f aGVhZCB8fA0KPiA+ICsJCQkgICAgaHdfZmlmb19oZWFkICE9IHByaXYtPmNvcmUtPnR4X2ZpZm9f dGFpbCkgew0KPiA+ICsJCQkJbmV0ZGV2X3dhcm4obmV0ZGV2LA0KPiA+ICsJCQkJCSAgICAiVFgg RklGTyBtaXNtYXRjaDogVCAlMnUgSCAlMnU7IFRGSFcgJSMwOHhcbiIsDQo+ID4gKwkJCQkJICAg IHByaXYtPmNvcmUtPnR4X2ZpZm9fdGFpbCwNCj4gPiArCQkJCQkgICAgcHJpdi0+Y29yZS0+dHhf Zmlmb19oZWFkLA0KPiA+ICsJCQkJCSAgICB0eF9maWZvX3N0YXR1cyk7DQo+ID4gKwkJCX0NCj4g PiArCQl9DQo+ID4gKwkJYWNjX3Jlc2V0bW9kZV9sZWF2ZShwcml2LT5jb3JlKTsNCj4gPiArCQkv KiBUbyBsZWF2ZSB0aGUgYnVzLW9mZiBzdGF0ZSB0aGUgZXNkQUNDIGNvbnRyb2xsZXIgYmVnaW5z DQo+ID4gKwkJICogaGVyZSBhIGdyYWNlIHBlcmlvZCB3aGVyZSBpdCBjb3VudHMgMTI4ICJpZGxl IGNvbmRpdGlvbnMiIChlYWNoDQo+ID4gKwkJICogb2YgMTEgY29uc2VjdXRpdmUgcmVjZXNzaXZl IGJpdHMpIG9uIHRoZSBidXMgYXMgcmVxdWlyZWQNCj4gPiArCQkgKiBieSB0aGUgQ0FOIHNwZWMu DQo+ID4gKwkJICoNCj4gPiArCQkgKiBEdXJpbmcgdGhpcyB0aW1lIHRoZSBUWCBGSUZPIG1heSBz dGlsbCBjb250YWluIGFscmVhZHkNCj4gPiArCQkgKiBhYm9ydGVkICJ6b21iaWUiIGZyYW1lcyB0 aGF0IGFyZSBvbmx5IGRyYWluZWQgZnJvbSB0aGUgRklGTw0KPiA+ICsJCSAqIGF0IHRoZSBlbmQg b2YgdGhlIGdyYWNlIHBlcmlvZC4NCj4gPiArCQkgKg0KPiA+ICsJCSAqIFRvIG5vdCB0byBpbnRl cmZlcmUgd2l0aCB0aGlzIGRyYWluIHByb2Nlc3Mgd2UgZG9uJ3QNCj4gPiArCQkgKiBjYWxsIG5l dGlmX3dha2VfcXVldWUoKSBoZXJlLiBXaGVuIHRoZSBjb250cm9sbGVyIHJlYWNoZXMNCj4gPiAr CQkgKiB0aGUgZXJyb3ItYWN0aXZlIHN0YXRlIGFnYWluLCBpdCBpbmZvcm1zIHVzIGFib3V0IHRo YXQNCj4gPiArCQkgKiB3aXRoIGFuIGFjY19ibW1zZ19lcnJzdGF0ZWNoYW5nZSBtZXNzYWdlLiBU aGVuDQo+ID4gKwkJICogbmV0aWZfd2FrZV9xdWV1ZSgpIGlzIGNhbGxlZCBmcm9tDQo+ID4gKwkJ ICogaGFuZGxlX2NvcmVfbXNnX2VycnN0YXRlY2hhbmdlKCkgaW5zdGVhZC4NCj4gPiArCQkgKi8N Cj4gPiArCQlicmVhazsNCj4gDQo+IER1ZSAxMjggaWRsZSBjb25kaXRpb24gYXV0byByZWNvdmVy eSBpdCdzIGJlc3QgdG8gc2h1dCBkb3duL3Jlc2V0IHRoZQ0KPiBjb250cm9sbGVyIG9uIEJVU19P RkYgYW5kIHJlLXN0YXJ0IGl0IGhlcmUuIEl0IHR1cm5lZCBvdXQgdG8gYmUgbGVzcw0KPiBjb21w bGV4IGZvcm0gdGhlIExpbnV4IGRyaXZlciBwb2ludCBvZiB2aWV3IGFuZCB0aGUgaW5kaXZpZHVh bCBDQU4gY29yZXMNCj4gZmVlbCBtdWNoIG1vcmUgY29uc2lzdGVudDogQnVzIG9mZiBtZWFucyBi dXMgb2ZmIGFuZCByZWNvdmVyeSBpcw0KPiBjb250cm9sbGVkIGJ5IHRoZSBrZXJuZWwuDQo+IA0K PiA+ICsNCj4gPiArCWRlZmF1bHQ6DQo+ID4gKwkJcmV0dXJuIC1FT1BOT1RTVVBQOw0KPiA+ICsJ fQ0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtpbnQgYWNjX3Nl dF9iaXR0aW1pbmcoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikNCj4gPiArew0KPiA+ICsJc3Ry dWN0IGFjY19uZXRfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7DQo+ID4gKwljb25z dCBzdHJ1Y3QgY2FuX2JpdHRpbWluZyAqYnQgPSAmcHJpdi0+Y2FuLmJpdHRpbWluZzsNCj4gPiAr CXUzMiBicnAgPSBidC0+YnJwIC0gMTsNCj4gPiArCXUzMiBidHI7DQo+ID4gKw0KPiA+ICsJaWYg KHByaXYtPm92LT5mZWF0dXJlcyAmIEFDQ19PVl9SRUdfRkVBVF9NQVNLX0NBTkZEKSB7DQo+ID4g KwkJdTMyIGZidHIgPSAwOw0KPiA+ICsNCj4gPiArCQluZXRkZXZfZGJnKHByaXYtPmNvcmUtPm5l dGRldiwNCj4gPiArCQkJICAgImJpdCB0aW1pbmc6IGJycCAldSwgcHJvcCAldSwgcGgxICV1IHBo MiAldSwgc2p3ICV1XG4iLA0KPiA+ICsJCQkgICBidC0+YnJwLCBidC0+cHJvcF9zZWcsDQo+ID4g KwkJCSAgIGJ0LT5waGFzZV9zZWcxLCBidC0+cGhhc2Vfc2VnMiwgYnQtPnNqdyk7DQo+ID4gKw0K PiA+ICsJCS8qIEJSUDogOCBiaXRzIEAgYml0cyA3Li4wICovDQo+ID4gKwkJYnJwICY9IDB4ZmY7 DQo+ID4gKw0KPiA+ICsJCS8qIFRTRUcxOiA4IGJpdHMgQCBiaXRzIDcuLjAgKi8NCj4gPiArCQli dHIgPSAoYnQtPnBoYXNlX3NlZzEgKyBidC0+cHJvcF9zZWcgLSAxKSAmIDB4ZmY7DQo+ID4gKwkJ LyogVFNFRzI6IDcgYml0cyBAIGJpdHMgMjIuLjE2ICovDQo+ID4gKwkJYnRyIHw9ICgoYnQtPnBo YXNlX3NlZzIgLSAxKSAmIDB4N2YpIDw8IDE2Ow0KPiA+ICsJCS8qIFNKVzogNyBiaXRzIEAgYml0 cyAzMC4uMjQgKi8NCj4gPiArCQlidHIgfD0gKChidC0+c2p3IC0gMSkgJiAweDdmKSA8PCAyNDsN Cj4gDQo+IFBsZWFzZSBtYWtlIHVzZSBvZiBGSUVMRF9QUkVQKCkgaGVyZS4NCg0KVXNlIG5vdyBG SUVMRF9QUkVQKCkNCg0KPiA+ICsNCj4gPiArCQkvKiBLZWVwIG9yZGVyIG9mIGFjY2Vzc2VzIHRv IEFDQ19DT1JFX09GX0JSUCBhbmQgQUNDX0NPUkVfT0ZfQlRSLiAqLw0KPiA+ICsJCWFjY193cml0 ZTMyKHByaXYtPmNvcmUsIEFDQ19DT1JFX09GX0JSUCwgYnJwKTsNCj4gPiArCQlhY2Nfd3JpdGUz Mihwcml2LT5jb3JlLCBBQ0NfQ09SRV9PRl9CVFIsIGJ0cik7DQo+ID4gKw0KPiA+ICsJCW5ldGRl dl9pbmZvKHByaXYtPmNvcmUtPm5ldGRldiwNCj4gPiArCQkJICAgICJFU0RBQ0M6IEJSUCAldSwg TkJUUiAweCUwOHgsIERCVFIgMHglMDh4IiwNCj4gPiArCQkJICAgIGJycCwgYnRyLCBmYnRyKTsN Cj4gDQo+IHBsZWFzZSBtYWtlIHRoaXMgYSBuZXRkZXZfZGJnKCkNCg0KQ2hhbmdlZCBpdC4NCg0K PiA+ICsJfSBlbHNlIHsNCj4gPiArCQluZXRkZXZfZGJnKHByaXYtPmNvcmUtPm5ldGRldiwNCj4g PiArCQkJICAgImJpdCB0aW1pbmc6IGJycCAldSwgcHJvcCAldSwgcGgxICV1IHBoMiAldSwgc2p3 ICV1XG4iLA0KPiA+ICsJCQkgICBidC0+YnJwLCBidC0+cHJvcF9zZWcsDQo+ID4gKwkJCSAgIGJ0 LT5waGFzZV9zZWcxLCBidC0+cGhhc2Vfc2VnMiwgYnQtPnNqdyk7DQo+ID4gKw0KPiA+ICsJCS8q IEJSUDogOSBiaXRzIEAgYml0cyA4Li4wICovDQo+ID4gKwkJYnJwICY9IDB4MWZmOw0KPiA+ICsN Cj4gPiArCQkvKiBUU0VHMTogNCBiaXRzIEAgYml0cyAzLi4wICovDQo+ID4gKwkJYnRyID0gKGJ0 LT5waGFzZV9zZWcxICsgYnQtPnByb3Bfc2VnIC0gMSkgJiAweGY7DQo+ID4gKwkJLyogVFNFRzI6 IDMgYml0cyBAIGJpdHMgMTguLjE2Ki8NCj4gPiArCQlidHIgfD0gKChidC0+cGhhc2Vfc2VnMiAt IDEpICYgMHg3KSA8PCAxNjsNCj4gPiArCQkvKiBTSlc6IDIgYml0cyBAIGJpdHMgMjUuLjI0ICov DQo+ID4gKwkJYnRyIHw9ICgoYnQtPnNqdyAtIDEpICYgMHgzKSA8PCAyNDsNCj4gPiArDQo+ID4g KwkJLyogS2VlcCBvcmRlciBvZiBhY2Nlc3NlcyB0byBBQ0NfQ09SRV9PRl9CUlAgYW5kIEFDQ19D T1JFX09GX0JUUi4gKi8NCj4gPiArCQlhY2Nfd3JpdGUzMihwcml2LT5jb3JlLCBBQ0NfQ09SRV9P Rl9CUlAsIGJycCk7DQo+ID4gKwkJYWNjX3dyaXRlMzIocHJpdi0+Y29yZSwgQUNDX0NPUkVfT0Zf QlRSLCBidHIpOw0KPiA+ICsNCj4gPiArCQluZXRkZXZfaW5mbyhwcml2LT5jb3JlLT5uZXRkZXYs ICJFU0RBQ0M6IEJSUCAldSwgQlRSIDB4JTA4eCIsDQo+ID4gKwkJCSAgICBicnAsIGJ0cik7DQo+ IA0KPiBzYW1lIGhlcmUNCg0KQ2hhbmdlZCBpdC4NCg0KPiANCj4gPiArCX0NCj4gPiArDQo+ID4g KwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgaGFuZGxlX2NvcmVf bXNnX3J4dHhkb25lKHN0cnVjdCBhY2NfY29yZSAqY29yZSwNCj4gPiArCQkJCSAgICAgY29uc3Qg c3RydWN0IGFjY19ibW1zZ19yeHR4ZG9uZSAqbXNnKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgYWNj X25ldF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoY29yZS0+bmV0ZGV2KTsNCj4gPiArCXN0cnVj dCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZjb3JlLT5uZXRkZXYtPnN0YXRzOw0KPiA+ICsJ c3RydWN0IHNrX2J1ZmYgKnNrYjsNCj4gPiArDQo+ID4gKwlpZiAobXNnLT5kbGMucnh0eC5sZW4g JiBBQ0NfQk1fTEVORkxBR19UWCkgew0KPiA+ICsJCXU4IHR4X2ZpZm9fdGFpbCA9IGNvcmUtPnR4 X2ZpZm9fdGFpbDsNCj4gPiArDQo+ID4gKwkJaWYgKGNvcmUtPnR4X2ZpZm9faGVhZCA9PSB0eF9m aWZvX3RhaWwpIHsNCj4gPiArCQkJbmV0ZGV2X3dhcm4oY29yZS0+bmV0ZGV2LA0KPiA+ICsJCQkJ ICAgICJUWCBpbnRlcnJ1cHQsIGJ1dCBxdWV1ZSBpcyBlbXB0eSE/XG4iKTsNCj4gPiArCQkJcmV0 dXJuOw0KPiA+ICsJCX0NCj4gPiArDQo+ID4gKwkJLyogRGlyZWN0IGFjY2VzcyBlY2hvIHNrYiB0 byBhdHRhY2ggSFcgdGltZSBzdGFtcC4gKi8NCj4gPiArCQlza2IgPSBwcml2LT5jYW4uZWNob19z a2JbdHhfZmlmb190YWlsXTsNCj4gPiArCQlpZiAoc2tiKSB7DQo+ID4gKwkJCXNrYl9od3RzdGFt cHMoc2tiKS0+aHd0c3RhbXAgPQ0KPiA+ICsJCQkJYWNjX3RzMmt0aW1lKHByaXYtPm92LCBtc2ct PnRzKTsNCj4gPiArCQl9DQo+ID4gKw0KPiA+ICsJCXN0YXRzLT50eF9wYWNrZXRzKys7DQo+ID4g KwkJc3RhdHMtPnR4X2J5dGVzICs9IGNhbl9nZXRfZWNob19za2IoY29yZS0+bmV0ZGV2LCB0eF9m aWZvX3RhaWwsDQo+ID4gKwkJCQkJCSAgICBOVUxMKTsNCj4gPiArDQo+ID4gKwkJdHhfZmlmb190 YWlsKys7DQo+ID4gKwkJaWYgKHR4X2ZpZm9fdGFpbCA+PSBjb3JlLT50eF9maWZvX3NpemUpDQo+ ID4gKwkJCXR4X2ZpZm9fdGFpbCA9IDBVOw0KPiA+ICsJCWNvcmUtPnR4X2ZpZm9fdGFpbCA9IHR4 X2ZpZm9fdGFpbDsNCj4gPiArDQo+ID4gKwkJbmV0aWZfd2FrZV9xdWV1ZShjb3JlLT5uZXRkZXYp Ow0KDQpJJ2xsIHJldmlzaXQgdGhpcyBsYXRlci4NCg0KPiBZb3Ugb25seSBuZWVkIHRvIHdha2Ug dGhlIHF1ZXVlIGlmIHRoZXJlIGlzIHNwYWNlIGF2YWlsYWJsZSwgYW5kIHlvdQ0KPiBuZWVkIGEg YmFycmllciBoZXJlLCBzZWUgbWNwMjUxeGZkX2hhbmRsZV90ZWZpZigpOg0KPiANCj4gPiBpbnQg bWNwMjUxeGZkX2hhbmRsZV90ZWZpZihzdHJ1Y3QgbWNwMjUxeGZkX3ByaXYgKnByaXYpDQo+ID4g ew0KPiANCj4gWy4uLl0NCj4gPiAJaWYgKG1jcDI1MXhmZF9nZXRfdHhfZnJlZShwcml2LT50eCkp IHsNCj4gPiAJCS8qIE1ha2Ugc3VyZSB0aGF0IGFueWJvZHkgc3RvcHBpbmcgdGhlIHF1ZXVlIGFm dGVyDQo+ID4gCQkgKiB0aGlzIHNlZXMgdGhlIG5ldyB0eF9yaW5nLT50YWlsLg0KPiA+IAkJICov DQo+ID4gCQlzbXBfbWIoKTsNCj4gPiAJCW5ldGlmX3dha2VfcXVldWUocHJpdi0+bmRldik7DQo+ ID4gCX0NCj4gPiANCj4gPiAJcmV0dXJuIDA7DQo+ID4gDQo+ID4gfQ0KPiA+ICsNCj4gPiArCX0g ZWxzZSB7DQo+ID4gKwkJc3RydWN0IGNhbl9mcmFtZSAqY2Y7DQo+ID4gKw0KPiA+ICsJCXNrYiA9 IGFsbG9jX2Nhbl9za2IoY29yZS0+bmV0ZGV2LCAmY2YpOw0KPiA+ICsJCWlmICghc2tiKSB7DQo+ ID4gKwkJCXN0YXRzLT5yeF9kcm9wcGVkKys7DQo+ID4gKwkJCXJldHVybjsNCj4gPiArCQl9DQo+ ID4gKw0KPiA+ICsJCWNmLT5jYW5faWQgPSBtc2ctPmlkICYgQ0FOX0VGRl9NQVNLOw0KPiA+ICsJ CWlmIChtc2ctPmlkICYgQUNDX0NBTl9FRkZfRkxBRykNCj4gPiArCQkJY2YtPmNhbl9pZCB8PSBD QU5fRUZGX0ZMQUc7DQo+ID4gKw0KPiA+ICsJCWNhbl9mcmFtZV9zZXRfY2NfbGVuKGNmLCBtc2ct PmRsYy5yeC5sZW4gJiBBQ0NfQ0FOX0RMQ19NQVNLLA0KPiA+ICsJCQkJICAgICBwcml2LT5jYW4u Y3RybG1vZGUpOw0KPiA+ICsNCj4gPiArCQlpZiAobXNnLT5kbGMucngubGVuICYgQUNDX0NBTl9S VFJfRkxBRykNCj4gPiArCQkJY2YtPmNhbl9pZCB8PSBDQU5fUlRSX0ZMQUc7DQo+ID4gKwkJZWxz ZQ0KPiA+ICsJCQltZW1jcHkoY2YtPmRhdGEsIG1zZy0+ZGF0YSwgY2YtPmxlbik7DQo+ID4gKw0K PiA+ICsJCXNrYl9od3RzdGFtcHMoc2tiKS0+aHd0c3RhbXAgPSBhY2NfdHMya3RpbWUocHJpdi0+ b3YsIG1zZy0+dHMpOw0KPiA+ICsNCj4gPiArCQlzdGF0cy0+cnhfcGFja2V0cysrOw0KPiA+ICsJ CXN0YXRzLT5yeF9ieXRlcyArPSBjZi0+bGVuOw0KPiA+ICsJCW5ldGlmX3J4KHNrYik7DQo+IA0K PiBDb25zaWRlciBtb3ZpbmcgdGhlIFRYIGNvbXBsZXRpb24gYW5kIFJYIGhhbmRsaW5nIGludG8g TkFQSSBvciBtYWtlIHVzZQ0KPiBvZiByeC1vZmZsb2FkLCB0byBhdm9pZCByZW9yZGVyaW5nIG9m IENBTiBmcmFtZXMgaW4gdGhlIFJYIHBhdGguDQo+IA0KPiA+ICsJfQ0KPiA+ICt9DQo+ID4gKw0K PiA+ICtzdGF0aWMgdm9pZCBoYW5kbGVfY29yZV9tc2dfdHhhYm9ydChzdHJ1Y3QgYWNjX2NvcmUg KmNvcmUsDQo+ID4gKwkJCQkgICAgY29uc3Qgc3RydWN0IGFjY19ibW1zZ190eGFib3J0ICptc2cp DQo+ID4gK3sNCj4gPiArCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZjb3JlLT5u ZXRkZXYtPnN0YXRzOw0KPiA+ICsJdTggdHhfZmlmb190YWlsID0gY29yZS0+dHhfZmlmb190YWls Ow0KPiA+ICsJdTMyIGFib3J0X21hc2sgPSBtc2ctPmFib3J0X21hc2s7ICAgLyogdTMyIGV4dGVu ZCB0byBhdm9pZCB3YXJuaW5ncyBsYXRlciAqLw0KPiA+ICsNCj4gPiArCS8qIFRoZSBhYm9ydF9t YXNrIHNob3dzIHdoaWNoIGZyYW1lcyB3ZXJlIGFib3J0ZWQgaW4gRVNEQUNDJ3MgRklGTy4gKi8N Cj4gDQo+IFlvdSBjYW4gZGlyZWN0bHkgaXRlcmF0ZSBvdmVyIGFsbCBzZXQgYml0cyB1c2luZyBm b3JfZWFjaF9zZXRfYml0KCkuDQoNCmZvcl9lYWNoX3NldF9iaXQoKSAvIGZvcl9lYWNoX3NldF9i aXRfZnJvbSgpIHN0YXJ0IGF0IGJpdCAxIG9yIGEgc3BlY2lmaWVkIGJpdCBidXQNCmRvbid0IHdy YXAgYXJvdW5kLiBUaGF0IHdvdWxkIG1ha2UgdHdvIGxvb3BzIG5lY2Vzc2FyeS4gSGVyZSBhIHNp bmdsZSBsb29wIHRoYXQNCndyYXBzIGFyb3VuZCB0aWxsIHRoZSBlbmQgb2YgdGhlIGZpZm8gaXMg Zm91bmQgb3IgYWxsIGFib3J0ZWQgZnJhbWVzIGhhdmUgYmVlbiBmb3VuZA0KaW4gdGhlIHJpZ2h0 IG9yZGVyIGxvb2tzIGJldHRlciB0byBtZS4NCg0KPiA+ICsJd2hpbGUgKHR4X2ZpZm9fdGFpbCAh PSBjb3JlLT50eF9maWZvX2hlYWQgJiYgKGFib3J0X21hc2spKSB7DQo+ID4gKwkJY29uc3QgdTMy IHRhaWxfbWFzayA9ICgxVSA8PCB0eF9maWZvX3RhaWwpOw0KPiA+ICsNCj4gPiArCQlpZiAoIShh Ym9ydF9tYXNrICYgdGFpbF9tYXNrKSkNCj4gPiArCQkJYnJlYWs7DQo+ID4gKwkJYWJvcnRfbWFz ayAmPSB+dGFpbF9tYXNrOw0KPiA+ICsNCj4gPiArCQljYW5fZnJlZV9lY2hvX3NrYihjb3JlLT5u ZXRkZXYsIHR4X2ZpZm9fdGFpbCwgTlVMTCk7DQo+ID4gKwkJc3RhdHMtPnR4X2Ryb3BwZWQrKzsN Cj4gPiArCQlzdGF0cy0+dHhfYWJvcnRlZF9lcnJvcnMrKzsNCj4gPiArDQo+ID4gKwkJdHhfZmlm b190YWlsKys7DQo+ID4gKwkJaWYgKHR4X2ZpZm9fdGFpbCA+PSBjb3JlLT50eF9maWZvX3NpemUp DQo+ID4gKwkJCXR4X2ZpZm9fdGFpbCA9IDA7DQo+ID4gKwl9DQo+ID4gKwljb3JlLT50eF9maWZv X3RhaWwgPSB0eF9maWZvX3RhaWw7DQo+ID4gKwlpZiAoYWJvcnRfbWFzaykNCj4gPiArCQluZXRk ZXZfd2Fybihjb3JlLT5uZXRkZXYsICJVbmhhbmRsZWQgYWJvcnRlZCBtZXNzYWdlc1xuIik7DQo+ ID4gKw0KPiA+ICsJaWYgKCFhY2NfcmVzZXRtb2RlX2VudGVyZWQoY29yZSkpDQo+ID4gKwkJbmV0 aWZfd2FrZV9xdWV1ZShjb3JlLT5uZXRkZXYpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMg dm9pZCBoYW5kbGVfY29yZV9tc2dfb3ZlcnJ1bihzdHJ1Y3QgYWNjX2NvcmUgKmNvcmUsDQo+ID4g KwkJCQkgICAgY29uc3Qgc3RydWN0IGFjY19ibW1zZ19vdmVycnVuICptc2cpDQo+ID4gK3sNCj4g PiArCXN0cnVjdCBhY2NfbmV0X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihjb3JlLT5uZXRkZXYp Ow0KPiA+ICsJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJmNvcmUtPm5ldGRldi0+ c3RhdHM7DQo+ID4gKwlzdHJ1Y3QgY2FuX2ZyYW1lICpjZjsNCj4gPiArCXN0cnVjdCBza19idWZm ICpza2I7DQo+ID4gKw0KPiA+ICsJc2tiID0gYWxsb2NfY2FuX2Vycl9za2IoY29yZS0+bmV0ZGV2 LCAmY2YpOw0KPiA+ICsJaWYgKCFza2IpIHsNCj4gPiArCQlzdGF0cy0+cnhfZHJvcHBlZCsrOw0K PiA+ICsJCXJldHVybjsNCj4gPiArCX0NCj4gDQo+IFBsZWFzZSBoYW5kbGUgdGhlIHN0YXRzLCBl dmVuIGlmIHRoZSBkcml2ZXIgZmFpbHMgdG8gYWxsb2NhdGUgYW5kIGVycm9yDQo+IHNrYi4NCg0K Q2hhbmdlZCBhcyBuZWVkZWQuDQoNCj4gPiArDQo+ID4gKwkvKiBsb3N0X2NudCBtYXkgYmUgMCBp ZiBub3Qgc3VwcG9ydGVkIGJ5IEVTREFDQyB2ZXJzaW9uICovDQo+ID4gKwlpZiAobXNnLT5sb3N0 X2NudCkgew0KPiA+ICsJCXN0YXRzLT5yeF9lcnJvcnMgKz0gbXNnLT5sb3N0X2NudDsNCj4gPiAr CQlzdGF0cy0+cnhfb3Zlcl9lcnJvcnMgKz0gbXNnLT5sb3N0X2NudDsNCj4gPiArCX0gZWxzZSB7 DQo+ID4gKwkJc3RhdHMtPnJ4X2Vycm9ycysrOw0KPiA+ICsJCXN0YXRzLT5yeF9vdmVyX2Vycm9y cysrOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWNmLT5jYW5faWQgfD0gQ0FOX0VSUl9DUlRMOw0K PiA+ICsJY2YtPmRhdGFbMV0gPSBDQU5fRVJSX0NSVExfUlhfT1ZFUkZMT1c7DQo+ID4gKw0KPiA+ ICsJc2tiX2h3dHN0YW1wcyhza2IpLT5od3RzdGFtcCA9IGFjY190czJrdGltZShwcml2LT5vdiwg bXNnLT50cyk7DQo+ID4gKw0KPiA+ICsJc3RhdHMtPnJ4X3BhY2tldHMrKzsNCj4gPiArCXN0YXRz LT5yeF9ieXRlcyArPSBjZi0+bGVuOw0KPiA+ICsJbmV0aWZfcngoc2tiKTsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArc3RhdGljIHZvaWQgaGFuZGxlX2NvcmVfbXNnX2J1c2VycihzdHJ1Y3QgYWNjX2Nv cmUgKmNvcmUsDQo+ID4gKwkJCQkgICBjb25zdCBzdHJ1Y3QgYWNjX2JtbXNnX2J1c2VyciAqbXNn KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgYWNjX25ldF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYo Y29yZS0+bmV0ZGV2KTsNCj4gPiArCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZj b3JlLT5uZXRkZXYtPnN0YXRzOw0KPiA+ICsJc3RydWN0IGNhbl9mcmFtZSAqY2Y7DQo+ID4gKwlz dHJ1Y3Qgc2tfYnVmZiAqc2tiOw0KPiA+ICsJY29uc3QgdTMyIHJlZ19zdGF0dXMgPSBtc2ctPnJl Z19zdGF0dXM7DQo+ID4gKwljb25zdCB1OCByeGVyciA9ICh1OClyZWdfc3RhdHVzOw0KPiA+ICsJ Y29uc3QgdTggdHhlcnIgPSAodTgpKHJlZ19zdGF0dXMgPj4gOCk7DQo+IA0KPiBjYXN0cyBub3Qg bmVlZGVkDQpTZWUgY29tbWVudCBhdCB0b3Agb2YgZW1haWwuDQoNCj4gPiArDQo+ID4gKwlwcml2 LT5jYW4uY2FuX3N0YXRzLmJ1c19lcnJvcisrOw0KPiA+ICsNCj4gPiArCXNrYiA9IGFsbG9jX2Nh bl9lcnJfc2tiKGNvcmUtPm5ldGRldiwgJmNmKTsNCj4gPiArCWlmICghc2tiKSB7DQo+ID4gKwkJ c3RhdHMtPnJ4X2Ryb3BwZWQrKzsNCj4gPiArCQlyZXR1cm47DQo+ID4gKwl9DQo+IA0KPiBQbGVh c2UgaGFuZGxlIHRoZSBzdGF0cywgZXZlbiBpZiB0aGUgZHJpdmVyIGZhaWxzIHRvIGFsbG9jYXRl IGFuZCBlcnJvcg0KPiBza2IuDQoNCkNoYW5nZWQgYXMgbmVlZGVkLg0KDQo+ID4gKw0KPiA+ICsJ Y2YtPmNhbl9pZCB8PSBDQU5fRVJSX1BST1QgfCBDQU5fRVJSX0JVU0VSUk9SOw0KPiA+ICsNCj4g PiArCS8qIG1zZy0+ZWNjIGFjdHMgbGlrZSBTSkExMDAwJ3MgRUNDIHJlZ2lzdGVyICovDQo+ID4g Kwlzd2l0Y2ggKG1zZy0+ZWNjICYgQUNDX0VDQ19NQVNLKSB7DQo+ID4gKwljYXNlIEFDQ19FQ0Nf QklUOg0KPiA+ICsJCWNmLT5kYXRhWzJdIHw9IENBTl9FUlJfUFJPVF9CSVQ7DQo+ID4gKwkJYnJl YWs7DQo+ID4gKwljYXNlIEFDQ19FQ0NfRk9STToNCj4gPiArCQljZi0+ZGF0YVsyXSB8PSBDQU5f RVJSX1BST1RfRk9STTsNCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2UgQUNDX0VDQ19TVFVGRjoN Cj4gPiArCQljZi0+ZGF0YVsyXSB8PSBDQU5fRVJSX1BST1RfU1RVRkY7DQo+ID4gKwkJYnJlYWs7 DQo+ID4gKwlkZWZhdWx0Og0KPiA+ICsJCWNmLT5kYXRhWzJdIHw9IENBTl9FUlJfUFJPVF9VTlNQ RUM7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJLyogU2V0IGVycm9yIGxv Y2F0aW9uICovDQo+ID4gKwljZi0+ZGF0YVszXSA9IG1zZy0+ZWNjICYgQUNDX0VDQ19TRUc7DQo+ ID4gKw0KPiA+ICsJLyogRXJyb3Igb2NjdXJyZWQgZHVyaW5nIHRyYW5zbWlzc2lvbj8gKi8NCj4g PiArCWlmICgobXNnLT5lY2MgJiBBQ0NfRUNDX0RJUikgPT0gMCkgew0KPiA+ICsJCWNmLT5kYXRh WzJdIHw9IENBTl9FUlJfUFJPVF9UWDsNCj4gPiArCQlzdGF0cy0+dHhfZXJyb3JzKys7DQo+ID4g Kwl9IGVsc2Ugew0KPiA+ICsJCXN0YXRzLT5yeF9lcnJvcnMrKzsNCj4gPiArCX0NCj4gPiArCS8q IEluc2VydCBDQU4gVFggYW5kIFJYIGVycm9yIGNvdW50ZXJzLiAqLw0KPiA+ICsJY2YtPmRhdGFb Nl0gPSB0eGVycjsNCj4gPiArCWNmLT5kYXRhWzddID0gcnhlcnI7DQo+ID4gKw0KPiA+ICsJc2ti X2h3dHN0YW1wcyhza2IpLT5od3RzdGFtcCA9IGFjY190czJrdGltZShwcml2LT5vdiwgbXNnLT50 cyk7DQo+ID4gKw0KPiA+ICsJc3RhdHMtPnJ4X3BhY2tldHMrKzsNCj4gPiArCXN0YXRzLT5yeF9i eXRlcyArPSBjZi0+bGVuOw0KPiA+ICsJbmV0aWZfcngoc2tiKTsNCj4gPiArfQ0KPiA+ICsNCj4g PiArc3RhdGljIHZvaWQNCj4gPiAraGFuZGxlX2NvcmVfbXNnX2VycnN0YXRlY2hhbmdlKHN0cnVj dCBhY2NfY29yZSAqY29yZSwNCj4gPiArCQkJICAgICAgIGNvbnN0IHN0cnVjdCBhY2NfYm1tc2df ZXJyc3RhdGVjaGFuZ2UgKm1zZykNCj4gPiArew0KPiA+ICsJc3RydWN0IGFjY19uZXRfcHJpdiAq cHJpdiA9IG5ldGRldl9wcml2KGNvcmUtPm5ldGRldik7DQo+ID4gKwlzdHJ1Y3QgbmV0X2Rldmlj ZV9zdGF0cyAqc3RhdHMgPSAmY29yZS0+bmV0ZGV2LT5zdGF0czsNCj4gPiArCXN0cnVjdCBjYW5f ZnJhbWUgKmNmID0gTlVMTDsNCj4gPiArCXN0cnVjdCBza19idWZmICpza2I7DQo+ID4gKwljb25z dCB1MzIgcmVnX3N0YXR1cyA9IG1zZy0+cmVnX3N0YXR1czsNCj4gPiArCWNvbnN0IHU4IHJ4ZXJy ID0gKHU4KXJlZ19zdGF0dXM7DQo+ID4gKwljb25zdCB1OCB0eGVyciA9ICh1OCkocmVnX3N0YXR1 cyA+PiA4KTsNCj4gDQo+IGNhc3Qgbm90IG5lZWRlZA0KU2VlIGNvbW1lbnQgYXQgdG9wIG9mIGVt YWlsLg0KDQoNCj4gPiArCWVudW0gY2FuX3N0YXRlIG5ld19zdGF0ZTsNCj4gPiArDQo+ID4gKwlp ZiAocmVnX3N0YXR1cyAmIEFDQ19SRUdfU1RBVFVTX01BU0tfU1RBVFVTX0JTKSB7DQo+ID4gKwkJ bmV3X3N0YXRlID0gQ0FOX1NUQVRFX0JVU19PRkY7DQo+ID4gKwl9IGVsc2UgaWYgKHJlZ19zdGF0 dXMgJiBBQ0NfUkVHX1NUQVRVU19NQVNLX1NUQVRVU19FUCkgew0KPiA+ICsJCW5ld19zdGF0ZSA9 IENBTl9TVEFURV9FUlJPUl9QQVNTSVZFOw0KPiA+ICsJfSBlbHNlIGlmIChyZWdfc3RhdHVzICYg QUNDX1JFR19TVEFUVVNfTUFTS19TVEFUVVNfRVMpIHsNCj4gPiArCQluZXdfc3RhdGUgPSBDQU5f U1RBVEVfRVJST1JfV0FSTklORzsNCj4gPiArCX0gZWxzZSB7DQo+ID4gKwkJbmV3X3N0YXRlID0g Q0FOX1NUQVRFX0VSUk9SX0FDVElWRTsNCj4gPiArCQlpZiAocHJpdi0+Y2FuLnN0YXRlID09IENB Tl9TVEFURV9CVVNfT0ZGKSB7DQo+ID4gKwkJCS8qIFNlZSBjb21tZW50IGluIGFjY19zZXRfbW9k ZSgpIGZvciBDQU5fTU9ERV9TVEFSVCAqLw0KPiA+ICsJCQluZXRpZl93YWtlX3F1ZXVlKGNvcmUt Pm5ldGRldik7DQo+IA0KPiBTZWUgbXkgb3RoZXIgY29tbWVudC4gU2h1dCBkb3duIHRoZSBjaGlw IGluIGNhc2Ugb2YgYnVzIG9mZi4NCg0KSSBkb24ndCBnZXQgaXQuIFRoZSBlc2RBQ0MgaXMgc2h1 dCBkb3duLCBpZiBpdCBpcyBpbiBidXMtb2ZmIHN0YXRlLg0KDQoNCj4gPiArCQl9DQo+ID4gKwl9 DQo+ID4gKw0KPiA+ICsJc2tiID0gYWxsb2NfY2FuX2Vycl9za2IoY29yZS0+bmV0ZGV2LCAmY2Yp Ow0KPiA+ICsNCj4gPiArCWlmIChuZXdfc3RhdGUgIT0gcHJpdi0+Y2FuLnN0YXRlKSB7DQo+ID4g KwkJZW51bSBjYW5fc3RhdGUgdHhfc3RhdGUsIHJ4X3N0YXRlOw0KPiA+ICsNCj4gPiArCQl0eF9z dGF0ZSA9ICh0eGVyciA+PSByeGVycikgPw0KPiA+ICsJCQluZXdfc3RhdGUgOiBDQU5fU1RBVEVf RVJST1JfQUNUSVZFOw0KPiA+ICsJCXJ4X3N0YXRlID0gKHJ4ZXJyID49IHR4ZXJyKSA/DQo+ID4g KwkJCW5ld19zdGF0ZSA6IENBTl9TVEFURV9FUlJPUl9BQ1RJVkU7DQo+ID4gKw0KPiA+ICsJCS8q IEFsd2F5cyBjYWxsIGNhbl9jaGFuZ2Vfc3RhdGUoKSB0byB1cGRhdGUgdGhlIHN0YXRlDQo+ID4g KwkJICogZXZlbiBpZiBhbGxvY19jYW5fZXJyX3NrYigpIG1heSBoYXZlIGZhaWxlZC4NCj4gPiAr CQkgKiBjYW5fY2hhbmdlX3N0YXRlKCkgY2FuIGNvcGUgd2l0aCBhIE5VTEwgY2YgcG9pbnRlci4N Cj4gPiArCQkgKi8NCj4gPiArCQljYW5fY2hhbmdlX3N0YXRlKGNvcmUtPm5ldGRldiwgY2YsIHR4 X3N0YXRlLCByeF9zdGF0ZSk7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWYgKHNrYikgew0KPiA+ ICsJCWNmLT5kYXRhWzZdID0gdHhlcnI7DQo+ID4gKwkJY2YtPmRhdGFbN10gPSByeGVycjsNCj4g PiArDQo+ID4gKwkJc2tiX2h3dHN0YW1wcyhza2IpLT5od3RzdGFtcCA9IGFjY190czJrdGltZShw cml2LT5vdiwgbXNnLT50cyk7DQo+ID4gKw0KPiA+ICsJCXN0YXRzLT5yeF9wYWNrZXRzKys7DQo+ ID4gKwkJc3RhdHMtPnJ4X2J5dGVzICs9IGNmLT5sZW47DQo+ID4gKwkJbmV0aWZfcngoc2tiKTsN Cj4gPiArCX0gZWxzZSB7DQo+ID4gKwkJc3RhdHMtPnJ4X2Ryb3BwZWQrKzsNCj4gPiArCX0NCj4g PiArDQo+ID4gKwlpZiAobmV3X3N0YXRlID09IENBTl9TVEFURV9CVVNfT0ZGKSB7DQo+ID4gKwkJ YWNjX3dyaXRlMzIoY29yZSwgQUNDX0NPUkVfT0ZfVFhfQUJPUlRfTUFTSywgMHhmZmZmKTsNCj4g PiArCQljYW5fYnVzX29mZihjb3JlLT5uZXRkZXYpOw0KPiA+ICsJfQ0KPiA+ICt9DQo+ID4gKw0K PiA+ICtzdGF0aWMgdm9pZCBoYW5kbGVfY29yZV9pbnRlcnJ1cHQoc3RydWN0IGFjY19jb3JlICpj b3JlKQ0KPiA+ICt7DQo+ID4gKwl1MzIgbXNnX2ZpZm9faGVhZCA9IGNvcmUtPmJtZmlmby5sb2Nh bF9pcnFfY250ICYgMHhmZjsNCj4gPiArDQo+ID4gKwl3aGlsZSAoY29yZS0+Ym1maWZvLm1zZ19m aWZvX3RhaWwgIT0gbXNnX2ZpZm9faGVhZCkgew0KPiA+ICsJCWNvbnN0IHN0cnVjdCBhY2NfYm1t c2cgKm1zZyA9DQo+ID4gKwkJCSZjb3JlLT5ibWZpZm8ubWVzc2FnZXNbY29yZS0+Ym1maWZvLm1z Z19maWZvX3RhaWxdOw0KPiA+ICsNCj4gPiArCQlzd2l0Y2ggKG1zZy0+dS5tc2dfaWQpIHsNCj4g PiArCQljYXNlIEJNX01TR19JRF9SWFRYRE9ORToNCj4gPiArCQkJaGFuZGxlX2NvcmVfbXNnX3J4 dHhkb25lKGNvcmUsICZtc2ctPnUucnh0eGRvbmUpOw0KPiA+ICsJCQlicmVhazsNCj4gPiArDQo+ ID4gKwkJY2FzZSBCTV9NU0dfSURfVFhBQk9SVDoNCj4gPiArCQkJaGFuZGxlX2NvcmVfbXNnX3R4 YWJvcnQoY29yZSwgJm1zZy0+dS50eGFib3J0KTsNCj4gPiArCQkJYnJlYWs7DQo+ID4gKw0KPiA+ ICsJCWNhc2UgQk1fTVNHX0lEX09WRVJSVU46DQo+ID4gKwkJCWhhbmRsZV9jb3JlX21zZ19vdmVy cnVuKGNvcmUsICZtc2ctPnUub3ZlcnJ1bik7DQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsNCj4gPiAr CQljYXNlIEJNX01TR19JRF9CVVNFUlI6DQo+ID4gKwkJCWhhbmRsZV9jb3JlX21zZ19idXNlcnIo Y29yZSwgJm1zZy0+dS5idXNlcnIpOw0KPiA+ICsJCQlicmVhazsNCj4gPiArDQo+ID4gKwkJY2Fz ZSBCTV9NU0dfSURfRVJSUEFTU0lWRToNCj4gPiArCQljYXNlIEJNX01TR19JRF9FUlJXQVJOOg0K PiA+ICsJCQloYW5kbGVfY29yZV9tc2dfZXJyc3RhdGVjaGFuZ2UoY29yZSwNCj4gPiArCQkJCQkJ ICAgICAgICZtc2ctPnUuZXJyc3RhdGVjaGFuZ2UpOw0KPiA+ICsJCQlicmVhazsNCj4gPiArDQo+ ID4gKwkJZGVmYXVsdDoNCj4gPiArCQkJLyogSWdub3JlIGFsbCBvdGhlciBCTSBtZXNzYWdlcyAo bGlrZSB0aGUgQ0FOLUZEIG1lc3NhZ2VzKSAqLw0KPiA+ICsJCQlicmVhazsNCj4gPiArCQl9DQo+ ID4gKw0KPiA+ICsJCWNvcmUtPmJtZmlmby5tc2dfZmlmb190YWlsID0NCj4gPiArCQkJCShjb3Jl LT5ibWZpZm8ubXNnX2ZpZm9fdGFpbCArIDEpICYgMHhmZjsNCj4gPiArCX0NCj4gPiArfQ0KPiA+ ICsNCg0KDQovKiogDQogKiBhY2NfY2FyZF9pbnRlcnJ1cHQoKSAtIGhhbmRsZSB0aGUgaW50ZXJy dXB0cyBvZiBhbiBlc2RBQ0MgRlBHQQ0KICoNCiAqIEBvdjogb3ZlcnZpZXcgbW9kdWxlIHN0cnVj dHVyZQ0KICogQGNvcmVzOiBhcnJheSBvZiBjb3JlIHN0cnVjdHVyZXMNCiAqDQogKiBUaGlzIGZ1 bmN0aW9uIGhhbmRsZXMgYWxsIGludGVycnVwdHMgcGVuZGluZyBmb3IgdGhlIG92ZXJ2aWV3IG1v ZHVsZSBhbmQgdGhlDQogKiBDQU4gY29yZXMgb2YgdGhlIGVzZEFDQyBGUEdBLg0KICoNCiAqIEl0 IGV4YW1pbmVzIGZvciBhbGwgY29yZXMgKHRoZSBvdmVydmlldyBtb2R1bGUgY29yZSBhbmQgdGhl IENBTiBjb3JlcykNCiAqIHRoZSBibWZpZm8uaXJxX2NudCBhbmQgY29tcGFyZXMgaXQgd2l0aCB0 aGUgcHJldmlvdXNseSBzYXZlZA0KICogYm1maWZvLmxvY2FsX2lycV9jbnQuIEFuIElSUSBpcyBw ZW5kaW5nIGlmIHRoZXkgZGlmZmVyLiBUaGUgZXNkQUNDIEZQR0ENCiAqIHVwZGF0ZXMgdGhlIGJt Zmlmby5pcnFfY250IHZhbHVlcyBieSBETUEuDQogKg0KICogVGhlIHBlbmRpbmcgaW50ZXJydXB0 cyBhcmUgbWFza2VkIGJ5IHdyaXRpbmcgdG8gdGhlIElSUSBtYXNrIHJlZ2lzdGVyIGF0DQogKiBB Q0NfT1ZfT0ZfQk1fSVJRX01BU0suIFRoaXMgcmVnaXN0ZXIgaGFzIGZvciBlYWNoIGNvcmUgYSB0 d28gYml0IGNvbW1hbmQNCiAqIGZpZWxkIGV2YWx1YXRlZCBhcyBmb2xsb3dzOg0KICogDQogKiBE ZWZpbmUsICAgYml0IHBhdHRlcm46IG1lYW5pbmcNCiAqICAgICAgICAgICAgICAgICAgICAwMDog bm8gYWN0aW9uDQogKiBBQ0NfQk1fSVJRX1VOTUFTSywgMDE6IHVubWFzayBpbnRlcnJ1cHQNCiAq IEFDQ19CTV9JUlFfTUFTSywgICAxMDogbWFzayBpbnRlcnJ1cHQNCiAqICAgICAgICAgICAgICAg ICAgICAxMTogbm8gYWN0aW9uDQogKg0KICogRm9yIGVhY2ggQ0FOIGNvcmUgd2l0aCBhIHBlbmRp bmcgSVJRIGhhbmRsZV9jb3JlX2ludGVycnVwdCgpIGhhbmRsZXMgYWxsDQogKiBidXNtYXN0ZXIg bWVzc2FnZXMgZnJvbSB0aGUgbWVzc2FnZSBGSUZPLiBUaGUgbGFzdCBoYW5kbGVkIG1lc3NhZ2Ug KEZJRk8NCiAqIGluZGV4KSBpcyB3cml0dGVuIHRvIHRoZSBDQU4gY29yZSB0byBhY2tub3dsZWRn ZSBpdHMgaGFuZGxpbmcuDQogKg0KICogTGFzdCBzdGVwIGlzIHRvIHVubWFzayBhbGwgaW50ZXJy dXB0cyBpbiB0aGUgRlBHQSB1c2luZw0KICogQUNDX0JNX0lSUV9VTk1BU0tfQUxMLg0KICovDQo+ ID4gK2lycXJldHVybl90IGFjY19jYXJkX2ludGVycnVwdChzdHJ1Y3QgYWNjX292ICpvdiwgc3Ry dWN0IGFjY19jb3JlICpjb3JlcykNCj4gPiArew0KPiA+ICsJdTMyCQlpcnFtYXNrOw0KPiA+ICsJ aW50CQlpOw0KPiANCj4gc2luZ2xlIHNwYWNlIGhlcmUNCg0KQ2hhbmdlZA0KDQo+ID4gKw0KPiA+ ICsJLyogRmlyc3Qgd2UgbG9vayBmb3Igd2hvbSBpbnRlcnJ1cHRzIGFyZSBwZW5kaW5nLCBjYXJk L292ZXJ2aWV3DQo+ID4gKwkgKiBvciBhbnkgb2YgdGhlIGNvcmVzLiBUd28gYml0cyBpbiBpcnFt YXNrIGFyZSB1c2VkIGZvciBlYWNoOw0KPiA+ICsJICogc2V0IHRvIEFDQ19CTV9JUlFfTUFTSyB0 aGVuOg0KPiA+ICsJICovDQo+IA0KPiBQbGVhc2UgZXhwbGFpbiBhIGJpdCBtb3JlIGRldGFpbGVk IGhvdyB0aGUgaW50ZXJydXB0IGhhbmRsaW5nIHdvcmtzLg0KDQpJIGFkZGVkIGEgZG94eWdlbiBs aWtlIGRvY3VtZW50YXRpb24gY29tbWVudCB0byB0aGlzIGZ1bmN0aW9uIChzZWUgYmVmb3JlKS4N Cg0KPiA+ICsJaXJxbWFzayA9IDA7DQo+ID4gKwlpZiAoKm92LT5ibWZpZm8uaXJxX2NudCAhPSBv di0+Ym1maWZvLmxvY2FsX2lycV9jbnQpIHsNCj4gPiArCQlpcnFtYXNrIHw9IEFDQ19CTV9JUlFf TUFTSzsNCj4gPiArCQlvdi0+Ym1maWZvLmxvY2FsX2lycV9jbnQgPSAqb3YtPmJtZmlmby5pcnFf Y250Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWZvciAoaSA9IDA7IGkgPCBvdi0+YWN0aXZlX2Nv cmVzOyBpKyspIHsNCj4gPiArCQlzdHJ1Y3QgYWNjX2NvcmUgKmNvcmUgPSAmY29yZXNbaV07DQo+ ID4gKw0KPiA+ICsJCWlmICgqY29yZS0+Ym1maWZvLmlycV9jbnQgIT0gY29yZS0+Ym1maWZvLmxv Y2FsX2lycV9jbnQpIHsNCj4gPiArCQkJaXJxbWFzayB8PSAoQUNDX0JNX0lSUV9NQVNLIDw8ICgy ICogKGkgKyAxKSkpOw0KPiA+ICsJCQljb3JlLT5ibWZpZm8ubG9jYWxfaXJxX2NudCA9ICpjb3Jl LT5ibWZpZm8uaXJxX2NudDsNCj4gPiArCQl9DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWYgKCFp cnFtYXNrKQ0KPiA+ICsJCXJldHVybiBJUlFfTk9ORTsNCj4gPiArDQo+ID4gKwkvKiBBdCBzZWNv bmQgd2UgdGVsbCB0aGUgY2FyZCB3ZSdyZSB3b3JraW5nIG9uIHRoZW0gYnkgd3JpdGluZyBpcnFt YXNrLA0KPiA+ICsJICogY2FsbCBoYW5kbGVfe292fGNvcmV9X2ludGVycnVwdCBhbmQgdGhlbiBh Y2tub3dsZWRnZSB0aGUNCj4gPiArCSAqIGludGVycnVwdHMgYnkgd3JpdGluZyBpcnFfY250Og0K PiA+ICsJICovDQo+ID4gKwlhY2Nfb3Zfd3JpdGUzMihvdiwgQUNDX09WX09GX0JNX0lSUV9NQVNL LCBpcnFtYXNrKTsNCj4gPiArDQo+ID4gKwlpZiAoaXJxbWFzayAmIEFDQ19CTV9JUlFfTUFTSykg ew0KPiA+ICsJCS8qIGhhbmRsZV9vdl9pbnRlcnJ1cHQoKTsgLSBubyB1c2UgeWV0LiAqLw0KPiA+ ICsJCWFjY19vdl93cml0ZTMyKG92LCBBQ0NfT1ZfT0ZfQk1fSVJRX0NPVU5URVIsDQo+ID4gKwkJ CSAgICAgICBvdi0+Ym1maWZvLmxvY2FsX2lycV9jbnQpOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiAr CWZvciAoaSA9IDA7IGkgPCBvdi0+YWN0aXZlX2NvcmVzOyBpKyspIHsNCj4gPiArCQlzdHJ1Y3Qg YWNjX2NvcmUgKmNvcmUgPSAmY29yZXNbaV07DQo+ID4gKw0KPiA+ICsJCWlmIChpcnFtYXNrICYg KEFDQ19CTV9JUlFfTUFTSyA8PCAoMiAqIChpICsgMSkpKSkgew0KPiA+ICsJCQloYW5kbGVfY29y ZV9pbnRlcnJ1cHQoY29yZSk7DQo+ID4gKwkJCWFjY193cml0ZTMyKGNvcmUsIEFDQ19PVl9PRl9C TV9JUlFfQ09VTlRFUiwNCj4gPiArCQkJCSAgICBjb3JlLT5ibWZpZm8ubG9jYWxfaXJxX2NudCk7 DQo+ID4gKwkJfQ0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWFjY19vdl93cml0ZTMyKG92LCBBQ0Nf T1ZfT0ZfQk1fSVJRX01BU0ssIEFDQ19CTV9JUlFfVU5NQVNLX0FMTCk7DQo+ID4gKw0KPiA+ICsJ cmV0dXJuIElSUV9IQU5ETEVEOw0KPiA+ICt9DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0 L2Nhbi9lc2QvZXNkYWNjLmggYi9kcml2ZXJzL25ldC9jYW4vZXNkL2VzZGFjYy5oDQo+ID4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLjNlODY1ZWNlY2IzZQ0K PiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9kcml2ZXJzL25ldC9jYW4vZXNkL2VzZGFjYy5o DQo+ID4gQEAgLTAsMCArMSwzODAgQEANCj4gPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEdQTC0yLjAtb25seSAqLw0KPiA+ICsvKiBDb3B5cmlnaHQgKEMpIDIwMTUgLSAyMDE2IFRob21h cyBLw7ZycGVyLCBlc2QgZWxlY3Ryb25pYyBzeXN0ZW0gZGVzaWduIGdtYmgNCj4gPiArICogQ29w eXJpZ2h0IChDKSAyMDE3IC0gMjAyMSBTdGVmYW4gTcOkdGplLCBlc2QgZWxlY3Ryb25pY3MgZ21i aA0KPiA+ICsgKi8NCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4NCj4gPiAr I2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvY2FuL2Rl di5oPg0KPiA+ICsNCj4gPiArI2RlZmluZSBBQ0NfQ0FOX0VGRl9GTEFHCQkJMHgyMDAwMDAwMA0K PiA+ICsjZGVmaW5lIEFDQ19DQU5fUlRSX0ZMQUcJCQkweDEwDQo+ID4gKyNkZWZpbmUgQUNDX0NB Tl9ETENfTUFTSwkJCTB4MGYNCj4gPiArDQo+ID4gKyNkZWZpbmUgQUNDX09WX09GX1BST0JFCQkJ CTB4MDAwMA0KPiA+ICsjZGVmaW5lIEFDQ19PVl9PRl9WRVJTSU9OCQkJMHgwMDA0DQo+ID4gKyNk ZWZpbmUgQUNDX09WX09GX0lORk8JCQkJMHgwMDA4DQo+ID4gKyNkZWZpbmUgQUNDX09WX09GX0NB TkNPUkVfRlJFUQkJCTB4MDAwYw0KPiA+ICsjZGVmaW5lIEFDQ19PVl9PRl9UU19GUkVRX0xPCQkJ MHgwMDEwDQo+ID4gKyNkZWZpbmUgQUNDX09WX09GX1RTX0ZSRVFfSEkJCQkweDAwMTQNCj4gPiAr I2RlZmluZSBBQ0NfT1ZfT0ZfSVJRX1NUQVRVU19DT1JFUwkJMHgwMDE4DQo+ID4gKyNkZWZpbmUg QUNDX09WX09GX1RTX0NVUlJfTE8JCQkweDAwMWMNCj4gPiArI2RlZmluZSBBQ0NfT1ZfT0ZfVFNf Q1VSUl9ISQkJCTB4MDAyMA0KPiA+ICsjZGVmaW5lIEFDQ19PVl9PRl9JUlFfU1RBVFVTCQkJMHgw MDI4DQo+ID4gKyNkZWZpbmUgQUNDX09WX09GX01PREUJCQkJMHgwMDJjDQo+ID4gKyNkZWZpbmUg QUNDX09WX09GX0JNX0lSUV9DT1VOVEVSCQkweDAwNzANCj4gPiArI2RlZmluZSBBQ0NfT1ZfT0Zf Qk1fSVJRX01BU0sJCQkweDAwNzQNCj4gPiArI2RlZmluZSBBQ0NfT1ZfT0ZfTVNJX0RBVEEJCQkw eDAwODANCj4gPiArI2RlZmluZSBBQ0NfT1ZfT0ZfTVNJX0FERFJFU1NPRkZTRVQJCTB4MDA4NA0K PiA+ICsNCj4gPiArLyogRmVhdHVyZSBmbGFncyBhcmUgY29udGFpbmVkIGluIHRoZSB1cHBlciAx NiBiaXQgb2YgdGhlIHZlcnNpb24NCj4gPiArICogcmVnaXN0ZXIgYXQgQUNDX09WX09GX1ZFUlNJ T04gYnV0IG9ubHkgdXNlZCB3aXRoIHRoZXNlIG1hc2tzIGFmdGVyDQo+ID4gKyAqIGV4dHJhY3Rp b24gaW50byBhbiBleHRyYSB2YXJpYWJsZSA9PiAoeHggLSAxNikuDQo+ID4gKyAqLw0KPiA+ICsj ZGVmaW5lIEFDQ19PVl9SRUdfRkVBVF9JRFhfQ0FORkQJCSgyNyAtIDE2KQ0KPiA+ICsjZGVmaW5l IEFDQ19PVl9SRUdfRkVBVF9JRFhfTkVXX1BTQwkJKDI4IC0gMTYpDQo+ID4gKyNkZWZpbmUgQUND X09WX1JFR19GRUFUX01BU0tfQ0FORkQJCUJJVChBQ0NfT1ZfUkVHX0ZFQVRfSURYX0NBTkZEKQ0K PiA+ICsjZGVmaW5lIEFDQ19PVl9SRUdfRkVBVF9NQVNLX05FV19QU0MJCUJJVChBQ0NfT1ZfUkVH X0ZFQVRfSURYX05FV19QU0MpDQo+ID4gKw0KPiA+ICsjZGVmaW5lIEFDQ19PVl9SRUdfTU9ERV9N QVNLX0VORElBTl9MSVRUTEUJMHgwMDAwMDAwMQ0KPiA+ICsjZGVmaW5lIEFDQ19PVl9SRUdfTU9E RV9NQVNLX0JNX0VOQUJMRQkJMHgwMDAwMDAwMg0KPiA+ICsjZGVmaW5lIEFDQ19PVl9SRUdfTU9E RV9NQVNLX01PREVfTEVECQkweDAwMDAwMDA0DQo+ID4gKyNkZWZpbmUgQUNDX09WX1JFR19NT0RF X01BU0tfVElNRVIJCTB4MDAwMDAwNzANCj4gPiArI2RlZmluZSBBQ0NfT1ZfUkVHX01PREVfTUFT S19USU1FUl9FTkFCTEUJMHgwMDAwMDAxMA0KPiA+ICsjZGVmaW5lIEFDQ19PVl9SRUdfTU9ERV9N QVNLX1RJTUVSX09ORV9TSE9UCTB4MDAwMDAwMjANCj4gPiArI2RlZmluZSBBQ0NfT1ZfUkVHX01P REVfTUFTS19USU1FUl9BQlNPTFVURQkweDAwMDAwMDQwDQo+ID4gKyNkZWZpbmUgQUNDX09WX1JF R19NT0RFX01BU0tfVFNfU1JDCQkweDAwMDAwMTgwDQo+ID4gKyNkZWZpbmUgQUNDX09WX1JFR19N T0RFX01BU0tfSTJDX0VOQUJMRQkJMHgwMDAwMDgwMA0KPiA+ICsjZGVmaW5lIEFDQ19PVl9SRUdf TU9ERV9NQVNLX01TSV9FTkFCTEUJCTB4MDAwMDQwMDANCj4gPiArI2RlZmluZSBBQ0NfT1ZfUkVH X01PREVfTUFTS19ORVdfUFNDX0VOQUJMRQkweDAwMDA4MDAwDQo+ID4gKyNkZWZpbmUgQUNDX09W X1JFR19NT0RFX01BU0tfRlBHQV9SRVNFVAkJMHg4MDAwMDAwMA0KPiA+ICsNCj4gPiArI2RlZmlu ZSBBQ0NfQ09SRV9PRl9DVFJMX01PREUJCQkweDAwMDANCj4gPiArI2RlZmluZSBBQ0NfQ09SRV9P Rl9TVEFUVVNfSVJRCQkJMHgwMDA4DQo+ID4gKyNkZWZpbmUgQUNDX0NPUkVfT0ZfQlJQCQkJCTB4 MDAwYw0KPiA+ICsjZGVmaW5lIEFDQ19DT1JFX09GX0JUUgkJCQkweDAwMTANCj4gPiArI2RlZmlu ZSBBQ0NfQ09SRV9PRl9GQlRSCQkJMHgwMDE0DQo+ID4gKyNkZWZpbmUgQUNDX0NPUkVfT0ZfU1RB VFVTCQkJMHgwMDMwDQo+ID4gKyNkZWZpbmUgQUNDX0NPUkVfT0ZfVFhGSUZPX0NPTkZJRwkJMHgw MDQ4DQo+ID4gKyNkZWZpbmUgQUNDX0NPUkVfT0ZfVFhGSUZPX1NUQVRVUwkJMHgwMDRjDQo+ID4g KyNkZWZpbmUgQUNDX0NPUkVfT0ZfVFhfU1RBVFVTX0lSUQkJMHgwMDUwDQo+ID4gKyNkZWZpbmUg QUNDX0NPUkVfT0ZfVFhfQUJPUlRfTUFTSwkJMHgwMDU0DQo+ID4gKyNkZWZpbmUgQUNDX0NPUkVf T0ZfQk1fSVJRX0NPVU5URVIJCTB4MDA3MA0KPiA+ICsjZGVmaW5lIEFDQ19DT1JFX09GX1RYRklG T19JRAkJCTB4MDBjMA0KPiA+ICsjZGVmaW5lIEFDQ19DT1JFX09GX1RYRklGT19ETEMJCQkweDAw YzQNCj4gPiArI2RlZmluZSBBQ0NfQ09SRV9PRl9UWEZJRk9fREFUQV8wCQkweDAwYzgNCj4gPiAr I2RlZmluZSBBQ0NfQ09SRV9PRl9UWEZJRk9fREFUQV8xCQkweDAwY2MNCj4gPiArDQo+ID4gKyNk ZWZpbmUgQUNDX1JFR19DT05UUk9MX0lEWF9NT0RFX1JFU0VUTU9ERQkwDQo+ID4gKyNkZWZpbmUg QUNDX1JFR19DT05UUk9MX0lEWF9NT0RFX0xPTQkJMQ0KPiA+ICsjZGVmaW5lIEFDQ19SRUdfQ09O VFJPTF9JRFhfTU9ERV9TVE0JCTINCj4gPiArI2RlZmluZSBBQ0NfUkVHX0NPTlRST0xfSURYX01P REVfVFJBTlNFTgk1DQo+ID4gKyNkZWZpbmUgQUNDX1JFR19DT05UUk9MX0lEWF9NT0RFX1RTCQk2 DQo+ID4gKyNkZWZpbmUgQUNDX1JFR19DT05UUk9MX0lEWF9NT0RFX1NDSEVEVUxFCTcNCj4gPiAr I2RlZmluZSBBQ0NfUkVHX0NPTlRST0xfTUFTS19NT0RFX1JFU0VUTU9ERQlcDQo+ID4gKwkJCQlC SVQoQUNDX1JFR19DT05UUk9MX0lEWF9NT0RFX1JFU0VUTU9ERSkNCj4gPiArI2RlZmluZSBBQ0Nf UkVHX0NPTlRST0xfTUFTS19NT0RFX0xPTQkJXA0KPiA+ICsJCQkJQklUKEFDQ19SRUdfQ09OVFJP TF9JRFhfTU9ERV9MT00pDQo+ID4gKyNkZWZpbmUgQUNDX1JFR19DT05UUk9MX01BU0tfTU9ERV9T VE0JCVwNCj4gPiArCQkJCUJJVChBQ0NfUkVHX0NPTlRST0xfSURYX01PREVfU1RNKQ0KPiA+ICsj ZGVmaW5lIEFDQ19SRUdfQ09OVFJPTF9NQVNLX01PREVfVFJBTlNFTglcDQo+ID4gKwkJCQlCSVQo QUNDX1JFR19DT05UUk9MX0lEWF9NT0RFX1RSQU5TRU4pDQo+ID4gKyNkZWZpbmUgQUNDX1JFR19D T05UUk9MX01BU0tfTU9ERV9UUwkJXA0KPiA+ICsJCQkJQklUKEFDQ19SRUdfQ09OVFJPTF9JRFhf TU9ERV9UUykNCj4gPiArI2RlZmluZSBBQ0NfUkVHX0NPTlRST0xfTUFTS19NT0RFX1NDSEVEVUxF CVwNCj4gPiArCQkJCUJJVChBQ0NfUkVHX0NPTlRST0xfSURYX01PREVfU0NIRURVTEUpDQo+ID4g Kw0KPiA+ICsjZGVmaW5lIEFDQ19SRUdfQ09OVFJPTF9JRFhfSUVfUlhUWAk4DQo+ID4gKyNkZWZp bmUgQUNDX1JFR19DT05UUk9MX0lEWF9JRV9UWEVSUk9SCTkNCj4gPiArI2RlZmluZSBBQ0NfUkVH X0NPTlRST0xfSURYX0lFX0VSUldBUk4JMTANCj4gPiArI2RlZmluZSBBQ0NfUkVHX0NPTlRST0xf SURYX0lFX09WRVJSVU4JMTENCj4gPiArI2RlZmluZSBBQ0NfUkVHX0NPTlRST0xfSURYX0lFX1RT SQkxMg0KPiA+ICsjZGVmaW5lIEFDQ19SRUdfQ09OVFJPTF9JRFhfSUVfRVJSUEFTUwkxMw0KPiA+ ICsjZGVmaW5lIEFDQ19SRUdfQ09OVFJPTF9JRFhfSUVfQlVTRVJSCTE1DQo+ID4gKyNkZWZpbmUg QUNDX1JFR19DT05UUk9MX01BU0tfSUVfUlhUWAlCSVQoQUNDX1JFR19DT05UUk9MX0lEWF9JRV9S WFRYKQ0KPiA+ICsjZGVmaW5lIEFDQ19SRUdfQ09OVFJPTF9NQVNLX0lFX1RYRVJST1IgQklUKEFD Q19SRUdfQ09OVFJPTF9JRFhfSUVfVFhFUlJPUikNCj4gPiArI2RlZmluZSBBQ0NfUkVHX0NPTlRS T0xfTUFTS19JRV9FUlJXQVJOIEJJVChBQ0NfUkVHX0NPTlRST0xfSURYX0lFX0VSUldBUk4pDQo+ ID4gKyNkZWZpbmUgQUNDX1JFR19DT05UUk9MX01BU0tfSUVfT1ZFUlJVTiBCSVQoQUNDX1JFR19D T05UUk9MX0lEWF9JRV9PVkVSUlVOKQ0KPiA+ICsjZGVmaW5lIEFDQ19SRUdfQ09OVFJPTF9NQVNL X0lFX1RTSQlCSVQoQUNDX1JFR19DT05UUk9MX0lEWF9JRV9UU0kpDQo+ID4gKyNkZWZpbmUgQUND X1JFR19DT05UUk9MX01BU0tfSUVfRVJSUEFTUyBCSVQoQUNDX1JFR19DT05UUk9MX0lEWF9JRV9F UlJQQVNTKQ0KPiA+ICsjZGVmaW5lIEFDQ19SRUdfQ09OVFJPTF9NQVNLX0lFX0JVU0VSUglCSVQo QUNDX1JFR19DT05UUk9MX0lEWF9JRV9CVVNFUlIpDQo+ID4gKw0KPiA+ICsvKiAyNTYgQk1fTVNH cyBvZiAzMiBieXRlIHNpemUgKi8NCj4gPiArI2RlZmluZSBBQ0NfQ09SRV9ETUFNU0dfU0laRQkJ MzJVDQo+ID4gKyNkZWZpbmUgQUNDX0NPUkVfRE1BQlVGX1NJWkUJCSgyNTZVICogQUNDX0NPUkVf RE1BTVNHX1NJWkUpDQo+ID4gKw0KPiA+ICtlbnVtIGFjY19ibW1zZ19pZCB7DQo+ID4gKwlCTV9N U0dfSURfUlhUWERPTkUgPSAweDAxLA0KPiA+ICsJQk1fTVNHX0lEX1RYQUJPUlQgPSAweDAyLA0K PiA+ICsJQk1fTVNHX0lEX09WRVJSVU4gPSAweDAzLA0KPiA+ICsJQk1fTVNHX0lEX0JVU0VSUiA9 IDB4MDQsDQo+ID4gKwlCTV9NU0dfSURfRVJSUEFTU0lWRSA9IDB4MDUsDQo+ID4gKwlCTV9NU0df SURfRVJSV0FSTiA9IDB4MDYsDQo+ID4gKwlCTV9NU0dfSURfVElNRVNMSUNFID0gMHgwNywNCj4g PiArCUJNX01TR19JRF9IV1RJTUVSID0gMHgwOCwNCj4gPiArCUJNX01TR19JRF9IT1RQTFVHID0g MHgwOSwNCj4gPiArfTsNCj4gPiArDQo+ID4gKy8qIFRoZSBzdHJ1Y3QgYWNjX2JtbXNnKiBzdHJ1 Y3R1cmUgZGVjbGFyYXRpb25zIHRoYXQgZm9sbG93IGhlcmUgcHJvdmlkZQ0KPiA+ICsgKiBhY2Nl c3MgdG8gdGhlIHJpbmcgYnVmZmVyIG9mIGJ1cyBtYXN0ZXIgbWVzc2FnZXMgbWFpbnRhaW5lZCBi eSB0aGUgRlBHQQ0KPiA+ICsgKiBidXMgbWFzdGVyIGVuZ2luZS4gQWxsIGJ1cyBtYXN0ZXIgbWVz c2FnZXMgaGF2ZSB0aGUgc2FtZSBzaXplIG9mDQo+ID4gKyAqIEFDQ19DT1JFX0RNQU1TR19TSVpF IGFuZCBhIG1pbmltdW0gYWxpZ25tZW50IG9mIEFDQ19DT1JFX0RNQU1TR19TSVpFIGluDQo+ID4g KyAqIG1lbW9yeS4NCj4gPiArICoNCj4gPiArICogQWxsIHN0cnVjdHVyZSBtZW1iZXJzIGFyZSBu YXR1cmFsIGFsaWduZWQuIFRoZXJlZm9yZSB3ZSBzaG91bGQgbm90IG5lZWQNCj4gPiArICogYSBf X3BhY2tlZCBhdHRyaWJ1dGUuIEFsbCBzdHJ1Y3QgYWNjX2JtbXNnKiBkZWNsYXJhdGlvbnMgaGF2 ZSBhdCBsZWFzdA0KPiA+ICsgKiByZXNlcnZlZCogbWVtYmVycyB0byBmaWxsIHRoZSBzdHJ1Y3R1 cmUgdG8gdGhlIGZ1bGwgQUNDX0NPUkVfRE1BTVNHX1NJWkUuDQo+ID4gKyAqDQo+ID4gKyAqIEEg ZmFpbHVyZSBvZiB0aGlzIHByb3BlcnR5IGR1ZSBwYWRkaW5nIHdpbGwgYmUgZGV0ZWN0ZWQgYXQg Y29tcGlsZSB0aW1lDQo+ID4gKyAqIGJ5IEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IGFjY19i bW1zZykgIT0gQUNDX0NPUkVfRE1BTVNHX1NJWkUpDQo+ID4gKyAqLw0KPiANCj4gWW91IGNhbiB1 c2Ugc3RhdGljX2Fzc2VydCgpIGRpcmVjdGx5IHVudGVyIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBz dHJ1Y3QuDQoNCkhhdmUgY2hhbmdlZCBpdCB0byB1c2Ugc3RhdGljX2Fzc2VydCgpLg0KDQo+ID4g Kw0KPiA+ICtzdHJ1Y3QgYWNjX2JtbXNnX3J4dHhkb25lIHsNCj4gPiArCXU4IG1zZ19pZDsNCj4g PiArCXU4IHR4Zmlmb19sZXZlbDsNCj4gPiArCXU4IHJlc2VydmVkMVsyXTsNCj4gPiArCXU4IHR4 dHNmaWZvX2xldmVsOw0KPiA+ICsJdTggcmVzZXJ2ZWQyWzNdOw0KPiA+ICsJdTMyIGlkOw0KPiA+ ICsJdW5pb24gew0KPiA+ICsJCXN0cnVjdCB7DQo+ID4gKwkJCXU4IGxlbjsNCj4gPiArCQkJdTgg cmVzZXJ2ZWQwOw0KPiA+ICsJCQl1OCBiaXRzOw0KPiA+ICsJCQl1OCBzdGF0ZTsNCj4gPiArCQl9 IHJ4dHg7DQo+ID4gKwkJc3RydWN0IHsNCj4gPiArCQkJdTggbGVuOw0KPiA+ICsJCQl1OCBtc2df bG9zdDsNCj4gPiArCQkJdTggYml0czsNCj4gPiArCQkJdTggc3RhdGU7DQo+ID4gKwkJfSByeDsN Cj4gPiArCQlzdHJ1Y3Qgew0KPiA+ICsJCQl1OCBsZW47DQo+ID4gKwkJCXU4IHR4Zmlmb19pZHg7 DQo+ID4gKwkJCXU4IGJpdHM7DQo+ID4gKwkJCXU4IHN0YXRlOw0KPiA+ICsJCX0gdHg7DQo+ID4g Kwl9IGRsYzsNCj4gPiArCXU4IGRhdGFbOF07DQo+ID4gKwkvKiBUaW1lIHN0YW1wcyBpbiBzdHJ1 Y3QgYWNjX292Ojp0aW1lc3RhbXBfZnJlcXVlbmN5IHRpY2tzLiAqLw0KPiA+ICsJdTY0IHRzOw0K PiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RydWN0IGFjY19ibW1zZ190eGFib3J0IHsNCj4gPiArCXU4 IG1zZ19pZDsNCj4gPiArCXU4IHR4Zmlmb19sZXZlbDsNCj4gPiArCXUxNiBhYm9ydF9tYXNrOw0K PiA+ICsJdTggdHh0c2ZpZm9fbGV2ZWw7DQo+ID4gKwl1OCByZXNlcnZlZDJbMV07DQo+ID4gKwl1 MTYgYWJvcnRfbWFza190eHRzOw0KPiA+ICsJdTY0IHRzOw0KPiA+ICsJdTMyIHJlc2VydmVkM1s0 XTsNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0cnVjdCBhY2NfYm1tc2dfb3ZlcnJ1biB7DQo+ID4g Kwl1OCBtc2dfaWQ7DQo+ID4gKwl1OCB0eGZpZm9fbGV2ZWw7DQo+ID4gKwl1OCBsb3N0X2NudDsN Cj4gPiArCXU4IHJlc2VydmVkMTsNCj4gPiArCXU4IHR4dHNmaWZvX2xldmVsOw0KPiA+ICsJdTgg cmVzZXJ2ZWQyWzNdOw0KPiA+ICsJdTY0IHRzOw0KPiA+ICsJdTMyIHJlc2VydmVkM1s0XTsNCj4g PiArfTsNCj4gPiArDQo+ID4gK3N0cnVjdCBhY2NfYm1tc2dfYnVzZXJyIHsNCj4gPiArCXU4IG1z Z19pZDsNCj4gPiArCXU4IHR4Zmlmb19sZXZlbDsNCj4gPiArCXU4IGVjYzsNCj4gPiArCXU4IHJl c2VydmVkMTsNCj4gPiArCXU4IHR4dHNmaWZvX2xldmVsOw0KPiA+ICsJdTggcmVzZXJ2ZWQyWzNd Ow0KPiA+ICsJdTY0IHRzOw0KPiA+ICsJdTMyIHJlZ19zdGF0dXM7DQo+ID4gKwl1MzIgcmVnX2J0 cjsNCj4gPiArCXUzMiByZXNlcnZlZDNbMl07DQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdHJ1Y3Qg YWNjX2JtbXNnX2VycnN0YXRlY2hhbmdlIHsNCj4gPiArCXU4IG1zZ19pZDsNCj4gPiArCXU4IHR4 Zmlmb19sZXZlbDsNCj4gPiArCXU4IHJlc2VydmVkMVsyXTsNCj4gPiArCXU4IHR4dHNmaWZvX2xl dmVsOw0KPiA+ICsJdTggcmVzZXJ2ZWQyWzNdOw0KPiA+ICsJdTY0IHRzOw0KPiA+ICsJdTMyIHJl Z19zdGF0dXM7DQo+ID4gKwl1MzIgcmVzZXJ2ZWQzWzNdOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiAr c3RydWN0IGFjY19ibW1zZ190aW1lc2xpY2Ugew0KPiA+ICsJdTggbXNnX2lkOw0KPiA+ICsJdTgg dHhmaWZvX2xldmVsOw0KPiA+ICsJdTggcmVzZXJ2ZWQxWzJdOw0KPiA+ICsJdTggdHh0c2ZpZm9f bGV2ZWw7DQo+ID4gKwl1OCByZXNlcnZlZDJbM107DQo+ID4gKwl1NjQgdHM7DQo+ID4gKwl1MzIg cmVzZXJ2ZWQzWzRdOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RydWN0IGFjY19ibW1zZ19od3Rp bWVyIHsNCj4gPiArCXU4IG1zZ19pZDsNCj4gPiArCXU4IHJlc2VydmVkMVszXTsNCj4gPiArCXUz MiByZXNlcnZlZDJbMV07DQo+ID4gKwl1NjQgdGltZXI7DQo+ID4gKwl1MzIgcmVzZXJ2ZWQzWzRd Ow0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RydWN0IGFjY19ibW1zZ19ob3RwbHVnIHsNCj4gPiAr CXU4IG1zZ19pZDsNCj4gPiArCXU4IHJlc2VydmVkMVszXTsNCj4gPiArCXUzMiByZXNlcnZlZDJb N107DQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgYWNjX2JtbXNnIHsNCj4gPiArCXVuaW9u IHsNCj4gPiArCQl1OCBtc2dfaWQ7DQo+ID4gKwkJc3RydWN0IGFjY19ibW1zZ19yeHR4ZG9uZSBy eHR4ZG9uZTsNCj4gPiArCQlzdHJ1Y3QgYWNjX2JtbXNnX3R4YWJvcnQgdHhhYm9ydDsNCj4gPiAr CQlzdHJ1Y3QgYWNjX2JtbXNnX292ZXJydW4gb3ZlcnJ1bjsNCj4gPiArCQlzdHJ1Y3QgYWNjX2Jt bXNnX2J1c2VyciBidXNlcnI7DQo+ID4gKwkJc3RydWN0IGFjY19ibW1zZ19lcnJzdGF0ZWNoYW5n ZSBlcnJzdGF0ZWNoYW5nZTsNCj4gPiArCQlzdHJ1Y3QgYWNjX2JtbXNnX3RpbWVzbGljZSB0aW1l c2xpY2U7DQo+ID4gKwkJc3RydWN0IGFjY19ibW1zZ19od3RpbWVyIGh3dGltZXI7DQo+ID4gKwl9 IHU7DQo+ID4gK307DQo+IA0KPiBXaHkgZG9uJ3QgeW91IHVzZSB0aGUgdW5pb24gZGlyZWN0bHkg aW5zdGVhZCBvZiBwdXR0aW5nIGl0IGludG8gYSBzdHJ1Y3Q/DQoNCkRpcmVjdGx5IHVzZSB0aGUg dW5pb24gaXMgYmV0dGVyIGFuZCBjaGFuZ2VkIG5vdy4NCg0KPiA+ICsNCj4gPiArLyogUmVnYXJk aW5nIERvY3VtZW50YXRpb24vcHJvY2Vzcy92b2xhdGlsZS1jb25zaWRlcmVkLWhhcm1mdWwucnN0 IHRoZQ0KPiA+ICsgKiBmb3J0aCBleGNlcHRpb24gYXBwbGllcyB0byB0aGUgImlycV9jbnQiIG1l bWJlciBvZiB0aGUgc3RydWN0dXJlDQo+ID4gKyAqIGJlbG93LiBUaGUgdTMyIHZhcmlhYmxlICJp cnFfY250IiBwb2ludHMgdG8gaXMgdXBkYXRlZCBieSB0aGUgRVNEQUNDDQo+ID4gKyAqIEZQR0Eg dmlhIERNQS4NCj4gPiArICovDQo+ID4gK3N0cnVjdCBhY2NfYm1maWZvIHsNCj4gPiArCWNvbnN0 IHN0cnVjdCBhY2NfYm1tc2cgKm1lc3NhZ2VzOw0KPiA+ICsJLyogQml0cyAwLi43OiBibV9maWZv IGhlYWQgaW5kZXggKi8NCj4gPiArCXZvbGF0aWxlIGNvbnN0IHUzMiAqaXJxX2NudDsNCj4gPiAr CXUzMiBsb2NhbF9pcnFfY250Ow0KPiA+ICsJdTMyIG1zZ19maWZvX3RhaWw7DQo+ID4gK307DQo+ ID4gKw0KPiA+ICtzdHJ1Y3QgYWNjX2NvcmUgew0KPiA+ICsJdm9pZCBfX2lvbWVtICphZGRyOw0K PiA+ICsJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsNCj4gPiArCXN0cnVjdCBhY2NfYm1maWZv IGJtZmlmbzsNCj4gPiArCXU4IHR4X2ZpZm9fc2l6ZTsNCj4gPiArCXU4IHR4X2ZpZm9faGVhZDsN Cj4gPiArCXU4IHR4X2ZpZm9fdGFpbDsNCj4gDQo+IElzIHRoZSB0eF9maWZvX3NpemUgYSBwb3dl ciBvZiB0d28/IElmIHNvIGl0J3MgdXN1YWxseSBlYXNpZXIgdG8gdXNlIGENCj4gdW5zaWduZWQg aW50IGZvciB0aGUgaGVhZCBhbmQgdGFpbCBwb2ludGVycyBhbmQgbWFzayB0aGVtIHRvIHRoZWly IHJlYWwNCj4gdmFsdWVzLiBoZWFkIGFuZCB0YWlsIHBvaW50ZXJzIG9ubHkgZXZlciBpbmNyZWFz ZSBhbmQgZXZlbnR1YWxseSByb2xsDQo+IG92ZXIuIEFzIGJvdGggYXJlIHVuc2lnbmVkIHRoZXJl J3Mgbm8gcHJvYmxlbSBpZiBoZWFkIGhhcyByb2xsZWQgb3ZlciwNCj4gYnV0IHRoZSB0YWlsIGRv ZXNuJ3QuDQo+IA0KPiBXaGVuIHlvdSByZWFkIHRhaWwgcG9pbnRlciBmcm9tIEhXIHlvdSByb3Vu ZF9kb3duKCkgdG8NCj4gY29yZS0+dHhfZmlmb19zaXplLCBhZGQgdGhlIHRhaWwgdmFsdWUgZnJv bSBIVyBhbmQgYWRkDQo+IGNvcmUtPnR4X2ZpZm9fc2l6ZSBpZiBpdCdzIGxvd2VyIHRoYW4gdGhl IG9sZCB2YWx1ZS4gVGhpcyBpcyB0aGUgb25seQ0KPiB0aW1lIHdoZXJlIHlvdSBoYXZlIHRvIHRh a2UgY2FyZSBvZiByb2xsb3Zlci4NCg0KSSdsbCBoYXZlIGEgbG9vayBhdCBpdC4NCg0KDQo+ID4g K307DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgYWNjX292IHsNCj4gPiArCXZvaWQgX19pb21lbSAqYWRk cjsNCj4gPiArCXN0cnVjdCBhY2NfYm1maWZvIGJtZmlmbzsNCj4gPiArCXUzMiB0aW1lc3RhbXBf ZnJlcXVlbmN5Ow0KPiA+ICsJdTMyIHRzMm5zX251bWVyYXRvcjsNCj4gPiArCXUzMiB0czJuc19k ZW5vbWluYXRvcjsNCj4gPiArCXUzMiBjb3JlX2ZyZXF1ZW5jeTsNCj4gPiArCXUxNiB2ZXJzaW9u Ow0KPiA+ICsJdTE2IGZlYXR1cmVzOw0KPiA+ICsJdTggdG90YWxfY29yZXM7DQo+ID4gKwl1OCBh Y3RpdmVfY29yZXM7DQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgYWNjX25ldF9wcml2IHsN Cj4gPiArCXN0cnVjdCBjYW5fcHJpdiBjYW47IC8qIG11c3QgYmUgdGhlIGZpcnN0IG1lbWJlciEg Ki8NCj4gPiArCXN0cnVjdCBhY2NfY29yZSAqY29yZTsNCj4gPiArCXN0cnVjdCBhY2Nfb3YgKm92 Ow0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGlubGluZSB1MzIgYWNjX3JlYWQzMihzdHJ1 Y3QgYWNjX2NvcmUgKmNvcmUsIHVuc2lnbmVkIHNob3J0IG9mZnMpDQo+ID4gK3sNCj4gPiArCXJl dHVybiBpb3JlYWQzMmJlKGNvcmUtPmFkZHIgKyBvZmZzKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiAr c3RhdGljIGlubGluZSB2b2lkIGFjY193cml0ZTMyKHN0cnVjdCBhY2NfY29yZSAqY29yZSwNCj4g PiArCQkJICAgICAgIHVuc2lnbmVkIHNob3J0IG9mZnMsIHUzMiB2KQ0KPiA+ICt7DQo+ID4gKwlp b3dyaXRlMzJiZSh2LCBjb3JlLT5hZGRyICsgb2Zmcyk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0 YXRpYyBpbmxpbmUgdm9pZCBhY2Nfd3JpdGUzMl9ub3N3YXAoc3RydWN0IGFjY19jb3JlICpjb3Jl LA0KPiA+ICsJCQkJICAgICAgdW5zaWduZWQgc2hvcnQgb2ZmcywgdTMyIHYpDQo+ID4gK3sNCj4g PiArCWlvd3JpdGUzMih2LCBjb3JlLT5hZGRyICsgb2Zmcyk7DQo+ID4gK30NCj4gPiArDQo+ID4g K3N0YXRpYyBpbmxpbmUgdm9pZCBhY2Nfc3NldF9iaXRzKHN0cnVjdCBhY2NfY29yZSAqY29yZSwN Cj4gPiArCQkJCXVuc2lnbmVkIHNob3J0IG9mZnMsIHUzMiBtYXNrKQ0KPiA+ICt7DQo+ID4gKwl1 MzIgdiA9IGFjY19yZWFkMzIoY29yZSwgb2Zmcyk7DQo+ID4gKw0KPiA+ICsJdiB8PSBtYXNrOw0K PiA+ICsJYWNjX3dyaXRlMzIoY29yZSwgb2Zmcywgdik7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0 YXRpYyBpbmxpbmUgdm9pZCBhY2NfY2xlYXJfYml0cyhzdHJ1Y3QgYWNjX2NvcmUgKmNvcmUsDQo+ ID4gKwkJCQkgIHVuc2lnbmVkIHNob3J0IG9mZnMsIHUzMiBtYXNrKQ0KPiA+ICt7DQo+ID4gKwl1 MzIgdiA9IGFjY19yZWFkMzIoY29yZSwgb2Zmcyk7DQo+ID4gKw0KPiA+ICsJdiAmPSB+bWFzazsN Cj4gPiArCWFjY193cml0ZTMyKGNvcmUsIG9mZnMsIHYpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtz dGF0aWMgaW5saW5lIGludCBhY2NfcmVzZXRtb2RlX2VudGVyZWQoc3RydWN0IGFjY19jb3JlICpj b3JlKQ0KPiA+ICt7DQo+ID4gKwl1MzIgY3RybCA9IGFjY19yZWFkMzIoY29yZSwgQUNDX0NPUkVf T0ZfQ1RSTF9NT0RFKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gKGN0cmwgJiBBQ0NfUkVHX0NPTlRS T0xfTUFTS19NT0RFX1JFU0VUTU9ERSkgIT0gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGlj IGlubGluZSB1MzIgYWNjX292X3JlYWQzMihzdHJ1Y3QgYWNjX292ICpvdiwgdW5zaWduZWQgc2hv cnQgb2ZmcykNCj4gPiArew0KPiA+ICsJcmV0dXJuIGlvcmVhZDMyYmUob3YtPmFkZHIgKyBvZmZz KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlubGluZSB2b2lkIGFjY19vdl93cml0ZTMy KHN0cnVjdCBhY2Nfb3YgKm92LA0KPiA+ICsJCQkJICB1bnNpZ25lZCBzaG9ydCBvZmZzLCB1MzIg dikNCj4gPiArew0KPiA+ICsJaW93cml0ZTMyYmUodiwgb3YtPmFkZHIgKyBvZmZzKTsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArc3RhdGljIGlubGluZSB2b2lkIGFjY19vdl9zZXRfYml0cyhzdHJ1Y3Qg YWNjX292ICpvdiwNCj4gPiArCQkJCSAgIHVuc2lnbmVkIHNob3J0IG9mZnMsIHUzMiBiKQ0KPiA+ ICt7DQo+ID4gKwl1MzIgdiA9IGFjY19vdl9yZWFkMzIob3YsIG9mZnMpOw0KPiA+ICsNCj4gPiAr CXYgfD0gYjsNCj4gPiArCWFjY19vdl93cml0ZTMyKG92LCBvZmZzLCB2KTsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArc3RhdGljIGlubGluZSB2b2lkIGFjY19vdl9jbGVhcl9iaXRzKHN0cnVjdCBhY2Nf b3YgKm92LA0KPiA+ICsJCQkJICAgICB1bnNpZ25lZCBzaG9ydCBvZmZzLCB1MzIgYikNCj4gPiAr ew0KPiA+ICsJdTMyIHYgPSBhY2Nfb3ZfcmVhZDMyKG92LCBvZmZzKTsNCj4gPiArDQo+ID4gKwl2 ICY9IH5iOw0KPiA+ICsJYWNjX292X3dyaXRlMzIob3YsIG9mZnMsIHYpOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICtzdGF0aWMgaW5saW5lIHZvaWQgYWNjX3Jlc2V0X2ZwZ2Eoc3RydWN0IGFjY19vdiAq b3YpDQo+ID4gK3sNCj4gPiArCWFjY19vdl93cml0ZTMyKG92LCBBQ0NfT1ZfT0ZfTU9ERSwgQUND X09WX1JFR19NT0RFX01BU0tfRlBHQV9SRVNFVCk7DQo+ID4gKw0KPiA+ICsJLyogQWxzbyByZXNl dCBJXjJDLCB0byByZS1kZXRlY3QgY2FyZCBhZGRvbnMgYXQgZXZlcnkgZHJpdmVyIHN0YXJ0OiAq Lw0KPiA+ICsJYWNjX292X2NsZWFyX2JpdHMob3YsIEFDQ19PVl9PRl9NT0RFLCBBQ0NfT1ZfUkVH X01PREVfTUFTS19JMkNfRU5BQkxFKTsNCj4gPiArCW1kZWxheSgyKTsNCj4gPiArCWFjY19vdl9z ZXRfYml0cyhvdiwgQUNDX09WX09GX01PREUsIEFDQ19PVl9SRUdfTU9ERV9NQVNLX0kyQ19FTkFC TEUpOw0KPiA+ICsJbWRlbGF5KDEwKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArdm9pZCBhY2NfaW5p dF9vdihzdHJ1Y3QgYWNjX292ICpvdiwgc3RydWN0IGRldmljZSAqZGV2KTsNCj4gPiArdm9pZCBh Y2NfaW5pdF9ibV9wdHIoc3RydWN0IGFjY19vdiAqb3YsIHN0cnVjdCBhY2NfY29yZSAqY29yZXMs DQo+ID4gKwkJICAgICBjb25zdCB2b2lkICptZW0pOw0KPiA+ICtpbnQgYWNjX29wZW4oc3RydWN0 IG5ldF9kZXZpY2UgKm5ldGRldik7DQo+ID4gK2ludCBhY2NfY2xvc2Uoc3RydWN0IG5ldF9kZXZp Y2UgKm5ldGRldik7DQo+ID4gK25ldGRldl90eF90IGFjY19zdGFydF94bWl0KHN0cnVjdCBza19i dWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOw0KPiA+ICtpbnQgYWNjX2dldF9i ZXJyX2NvdW50ZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwNCj4gPiArCQkJIHN0 cnVjdCBjYW5fYmVycl9jb3VudGVyICpiZWMpOw0KPiA+ICtpbnQgYWNjX3NldF9tb2RlKHN0cnVj dCBuZXRfZGV2aWNlICpuZXRkZXYsIGVudW0gY2FuX21vZGUgbW9kZSk7DQo+ID4gK2ludCBhY2Nf c2V0X2JpdHRpbWluZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsNCj4gPiAraXJxcmV0dXJu X3QgYWNjX2NhcmRfaW50ZXJydXB0KHN0cnVjdCBhY2Nfb3YgKm92LCBzdHJ1Y3QgYWNjX2NvcmUg KmNvcmVzKTsNCj4gPiAtLSANCj4gPiAyLjI1LjENCj4gPiANCj4gPiANCj4gDQo+IHJlZ2FyZHMs DQo+IE1hcmMNCj4gDQo=