From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.1 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B444EC43381 for ; Mon, 4 Mar 2019 12:48:31 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 28A8220815 for ; Mon, 4 Mar 2019 12:48:31 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=cadence.com header.i=@cadence.com header.b="BewqIXy9"; dkim=pass (1024-bit key) header.d=cadence.com header.i=@cadence.com header.b="pbvYFjuv" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726633AbfCDMsa (ORCPT ); Mon, 4 Mar 2019 07:48:30 -0500 Received: from mx0b-0014ca01.pphosted.com ([208.86.201.193]:52952 "EHLO mx0a-0014ca01.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726101AbfCDMs3 (ORCPT ); Mon, 4 Mar 2019 07:48:29 -0500 Received: from pps.filterd (m0042333.ppops.net [127.0.0.1]) by mx0b-0014ca01.pphosted.com (8.16.0.27/8.16.0.27) with SMTP id x24ChqcO018001; Mon, 4 Mar 2019 04:46:52 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cadence.com; h=from : to : cc : subject : date : message-id : references : in-reply-to : content-type : content-transfer-encoding : mime-version; s=proofpoint; bh=q//5Z2H1w9jBh3mfaaxgXaqGWiWo5RSkjKmbbn6enFs=; b=BewqIXy9RXAiVXTWOG+ryMH9f+hHfUnx8cZDSN+b4oaqw1VmTFscQY1QfuLCU8E+UnSP LEHjX3EzOYq0np9WPPHTFYRoqBaLotHEHgR/0aWzSol2TrLDRsf1swO0dBr+PPb9UPih IfAQs/HsUz0PFqtEuRcDK5TB0jqcCupvsTayQ8WU0JK4vR9JITk7/ghLDISejXDaeghs QsOQkaOoGFQpy9neS018omPxIB0Wd0nuDh29zeGUUMcONLLv2TcvhqdKSR8eo8kTsGWj HOFDth422IdzdWTxlb2BSSKotiLbf3+Y8DuCrp9yS3AckiUksE5kD0NqPAvBy6rorMZa 2Q== Authentication-Results: cadence.com; spf=pass smtp.mailfrom=pawell@cadence.com Received: from nam02-sn1-obe.outbound.protection.outlook.com (mail-sn1nam02lp2055.outbound.protection.outlook.com [104.47.36.55]) by mx0b-0014ca01.pphosted.com with ESMTP id 2qyp9yg62q-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Mon, 04 Mar 2019 04:46:51 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cadence.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=q//5Z2H1w9jBh3mfaaxgXaqGWiWo5RSkjKmbbn6enFs=; b=pbvYFjuvKYePlVNSu6vxpJB8iKZvBJjOgb4hxNTXjJxUkPoDByZBMHRftsoyH114Oo8X4xq9RDq2PmU8PbwJSkjOfgj6OZrNh4NZJ+5USp49AApQZF21dtQ15Zt9PO/wlIL8NDXt23NL4L4qPL7gPVR2PFRRfoe3HsNhVTQMa14= Received: from BYAPR07MB4709.namprd07.prod.outlook.com (52.135.204.159) by BYAPR07MB4806.namprd07.prod.outlook.com (20.176.248.157) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1665.19; Mon, 4 Mar 2019 12:46:47 +0000 Received: from BYAPR07MB4709.namprd07.prod.outlook.com ([fe80::2dae:f6be:5a31:3bc8]) by BYAPR07MB4709.namprd07.prod.outlook.com ([fe80::2dae:f6be:5a31:3bc8%4]) with mapi id 15.20.1665.020; Mon, 4 Mar 2019 12:46:47 +0000 From: Pawel Laszczak To: Chunfeng Yun CC: "devicetree@vger.kernel.org" , "gregkh@linuxfoundation.org" , "felipe.balbi@linux.intel.com" , "mark.rutland@arm.com" , "linux-usb@vger.kernel.org" , "hdegoede@redhat.com" , "heikki.krogerus@linux.intel.com" , "andy.shevchenko@gmail.com" , "robh+dt@kernel.org" , "rogerq@ti.com" , "linux-kernel@vger.kernel.org" , "jbergsagel@ti.com" , "nsekhar@ti.com" , "nm@ti.com" , Suresh Punnoose , "peter.chen@nxp.com" , Rahul Kumar Subject: RE: [PATCH v4 5/6] usb:cdns3 Add Cadence USB3 DRD Driver Thread-Topic: [PATCH v4 5/6] usb:cdns3 Add Cadence USB3 DRD Driver Thread-Index: AQHUxJ4VnRX9klsPV0GCGU5zGXPUXqXgoJKAgBq0xyCAADD5EA== Date: Mon, 4 Mar 2019 12:46:47 +0000 Message-ID: References: <1550173514-23573-1-git-send-email-pawell@cadence.com> <1550173514-23573-6-git-send-email-pawell@cadence.com> <1550224667.2210.22.camel@mhfsdcap03> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-dg-ref: PG1ldGE+PGF0IG5tPSJib2R5LnR4dCIgcD0iYzpcdXNlcnNccGF3ZWxsXGFwcGRhdGFccm9hbWluZ1wwOWQ4NDliNi0zMmQzLTRhNDAtODVlZS02Yjg0YmEyOWUzNWJcbXNnc1xtc2ctOTAwY2FiMmQtM2U3Yi0xMWU5LTg3MzAtMWM0ZDcwMWRmYmE0XGFtZS10ZXN0XDkwMGNhYjJmLTNlN2ItMTFlOS04NzMwLTFjNGQ3MDFkZmJhNGJvZHkudHh0IiBzej0iNDU1ODciIHQ9IjEzMTk2MTc3MjA0MDY1MjY5OSIgaD0iaVYxWE9tVDA2RWFJMkZHN09MamNrNDZVYXJnPSIgaWQ9IiIgYmw9IjAiIGJvPSIxIi8+PC9tZXRhPg== x-dg-rorf: x-originating-ip: [185.217.253.59] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: a3c6635e-4263-49f6-8f7c-08d6a09f7725 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600127)(711020)(4605104)(2017052603328)(7153060)(7193020);SRVR:BYAPR07MB4806; x-ms-traffictypediagnostic: BYAPR07MB4806: x-microsoft-exchange-diagnostics: 1;BYAPR07MB4806;20:5mx9F0t32gvvex40E8l/0xLSi1/b1tjse3hH/hap2lEQBvQrWiVZXQ4UyHmrr37ILXSGfAxpDxfL7JXlsJKJXvK7+ArhiKogpBYiUxFZY9I9IR9sZpKxeBdk6jNfUlhB5maoX5aOqNJ9fuNFx5WrNCW43PUGjmAc7t61FiPSphMILLrww2/PKGGtG8DDLBd1PXVTY9lI8/ckH/2ZEQlVrwvAupdSI442w5pjDWYn4cDfmwy3rEXieubDw3+qNgPQ x-microsoft-antispam-prvs: x-forefront-prvs: 09669DB681 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(136003)(376002)(396003)(366004)(39860400002)(346002)(199004)(189003)(36092001)(8676002)(14454004)(76176011)(7736002)(305945005)(6116002)(74316002)(8936002)(33656002)(25786009)(7416002)(486006)(93156006)(6506007)(97736004)(6916009)(52536013)(476003)(93886005)(99286004)(102836004)(86362001)(5660300002)(3846002)(81156014)(81166006)(26005)(66066001)(71200400001)(71190400001)(7696005)(53936002)(30864003)(316002)(6246003)(4326008)(446003)(14444005)(6436002)(2940100002)(229853002)(11346002)(186003)(107886003)(54906003)(68736007)(256004)(53946003)(478600001)(9686003)(55016002)(106356001)(105586002)(2906002)(559001)(579004)(569006);DIR:OUT;SFP:1101;SCL:1;SRVR:BYAPR07MB4806;H:BYAPR07MB4709.namprd07.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: cadence.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: t9dGqGNlcRLO5qei+t/T3HSsLD+ZD5cDlRdW+Zba5i8/IpntnKlw43nxsLZK58SUIUR3d7udYS4l/80tS1Q0lEThJk3lXWnSh50LeLp87EHKqE2Rlk0OlH6y8OWZCwlwvS30MqSMR0m9S7H2CKhRzLU61runwHeUpVRcXOmXkuT66vVklc4eOuPw5+/BArmZPhJX4mWcLHr+U4c7CqnaT3l8/6Klac2XNwy220gxBZAJ8pKOo3efy6EYwwEdJWMhAe3Q2zGKTLEL7zVqPt0/aADKz9UDIj4T6YG6ag9Sid/DF7Ayknj0lCGQsQg1zBMbmbeszyNdVaFVjE67O2xQ5rgygDv2xCvyelOT2Ui0utwarGegceG7JXNkfV+ZF+szHKgZAp/SStgQZpbiwfr4qI4zI3kf9E2wxhGjOv/q1Sg= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: cadence.com X-MS-Exchange-CrossTenant-Network-Message-Id: a3c6635e-4263-49f6-8f7c-08d6a09f7725 X-MS-Exchange-CrossTenant-originalarrivaltime: 04 Mar 2019 12:46:47.7197 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: d36035c5-6ce6-4662-a3dc-e762e61ae4c9 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR07MB4806 X-Proofpoint-SPF-Result: pass X-Proofpoint-SPF-Record: v=spf1 include:_spf.salesforce.com include:mktomail.com include:spf-0014ca01.pphosted.com include:spf.protection.outlook.com include:auth.msgapp.com include:spf.mandrillapp.com ~all X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:,, definitions=2019-03-04_05:,, signatures=0 X-Proofpoint-Spam-Details: rule=outbound_check_notspam policy=outbound_check score=0 priorityscore=1501 malwarescore=0 suspectscore=0 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 mlxscore=0 impostorscore=0 mlxlogscore=999 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1810050000 definitions=main-1903040094 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org PkZyb206IFBhd2VsIExhc3pjemFrDQo+U2VudDogTW9uZGF5LCBNYXJjaCA0LCAyMDE5IDEyOjAy IFBNDQo+VG86IENodW5mZW5nIFl1biA8Y2h1bmZlbmcueXVuQG1lZGlhdGVrLmNvbT4NCj5DYzog ZGV2aWNldHJlZUB2Z2VyLmtlcm5lbC5vcmc7IGdyZWdraEBsaW51eGZvdW5kYXRpb24ub3JnOyBm ZWxpcGUuYmFsYmlAbGludXguaW50ZWwuY29tOyBtYXJrLnJ1dGxhbmRAYXJtLmNvbTsgbGludXgt DQo+dXNiQHZnZXIua2VybmVsLm9yZzsgaGRlZ29lZGVAcmVkaGF0LmNvbTsgaGVpa2tpLmtyb2dl cnVzQGxpbnV4LmludGVsLmNvbTsgYW5keS5zaGV2Y2hlbmtvQGdtYWlsLmNvbTsgcm9iaCtkdEBr ZXJuZWwub3JnOw0KPnJvZ2VycUB0aS5jb207IGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc7 IGpiZXJnc2FnZWxAdGkuY29tOyBuc2VraGFyQHRpLmNvbTsgbm1AdGkuY29tOyBTdXJlc2ggUHVu bm9vc2UNCj48c3VyZXNocEBjYWRlbmNlLmNvbT47IHBldGVyLmNoZW5AbnhwLmNvbTsgUmFodWwg S3VtYXIgPGt1cmFodWxAY2FkZW5jZS5jb20+DQo+U3ViamVjdDogUkU6IFtQQVRDSCB2NCA1LzZd IHVzYjpjZG5zMyBBZGQgQ2FkZW5jZSBVU0IzIERSRCBEcml2ZXINCj4NCj5IaSwNCj4+DQo+Pmhp LA0KPj5PbiBUaHUsIDIwMTktMDItMTQgYXQgMTk6NDUgKzAwMDAsIFBhd2VsIExhc3pjemFrIHdy b3RlOg0KPj4+IFRoaXMgcGF0Y2ggaW50cm9kdWNlIG5ldyBDYWRlbmNlIFVTQlNTIERSRCBkcml2 ZXIgdG8gbGludXgga2VybmVsLg0KPj4+DQo+Pj4gVGhlIENhZGVuY2UgVVNCU1MgRFJEIERyaXZl ciBpcyBhIGhpZ2hseSBjb25maWd1cmFibGUgSVAgQ29yZSB3aGljaGkNCj4+PiBjYW4gYmUgaW5z dGFudGlhdGVkIGFzIER1YWwtUm9sZSBEZXZpY2UgKERSRCksIFBlcmlwaGVyYWwgT25seSBhbmQN Cj4+PiBIb3N0IE9ubHkgKFhIQ0kpY29uZmlndXJhdGlvbnMuDQo+Pj4NCj4+PiBUaGUgY3VycmVu dCBkcml2ZXIgaGFzIGJlZW4gdmFsaWRhdGVkIHdpdGggRlBHQSBidXJuZWQuIFdlIGhhdmUgc3Vw cG9ydA0KPj4+IGZvciBQQ0llIGJ1cywgd2hpY2ggaXMgdXNlZCBvbiBGUEdBIHByb3RvdHlwaW5n Lg0KPj4+DQo+Pj4gVGhlIGhvc3Qgc2lkZSBvZiBVU0JTUy1EUkQgY29udHJvbGxlciBpcyBjb21w bGlhbmNlIHdpdGggWEhDSQ0KPj4+IHNwZWNpZmljYXRpb24sIHNvIGl0IHdvcmtzIHdpdGggc3Rh bmRhcmQgWEhDSSBsaW51eCBkcml2ZXIuDQo+Pj4NCj4+PiBTaWduZWQtb2ZmLWJ5OiBQYXdlbCBM YXN6Y3phayA8cGF3ZWxsQGNhZGVuY2UuY29tPg0KPj4+IC0tLQ0KPj4+ICBkcml2ZXJzL3VzYi9L Y29uZmlnICAgICAgICAgICAgICAgIHwgICAgMiArDQo+Pj4gIGRyaXZlcnMvdXNiL01ha2VmaWxl ICAgICAgICAgICAgICAgfCAgICAyICsNCj4+PiAgZHJpdmVycy91c2IvY2RuczMvS2NvbmZpZyAg ICAgICAgICB8ICAgNDQgKw0KPj4+ICBkcml2ZXJzL3VzYi9jZG5zMy9NYWtlZmlsZSAgICAgICAg IHwgICAxNCArDQo+Pj4gIGRyaXZlcnMvdXNiL2NkbnMzL2NkbnMzLXBjaS13cmFwLmMgfCAgMTU1 ICsrKw0KPj4+ICBkcml2ZXJzL3VzYi9jZG5zMy9jb3JlLmMgICAgICAgICAgIHwgIDQwMyArKysr KysNCj4+PiAgZHJpdmVycy91c2IvY2RuczMvY29yZS5oICAgICAgICAgICB8ICAxMTYgKysNCj4+ PiAgZHJpdmVycy91c2IvY2RuczMvZGVidWcuaCAgICAgICAgICB8ICAxNjggKysrDQo+Pj4gIGRy aXZlcnMvdXNiL2NkbnMzL2RlYnVnZnMuYyAgICAgICAgfCAgMTY0ICsrKw0KPj4+ICBkcml2ZXJz L3VzYi9jZG5zMy9kcmQuYyAgICAgICAgICAgIHwgIDM2NSArKysrKw0KPj4+ICBkcml2ZXJzL3Vz Yi9jZG5zMy9kcmQuaCAgICAgICAgICAgIHwgIDE2MiArKysNCj4+PiAgZHJpdmVycy91c2IvY2Ru czMvZXAwLmMgICAgICAgICAgICB8ICA5MDcgKysrKysrKysrKysrKw0KPj4+ICBkcml2ZXJzL3Vz Yi9jZG5zMy9nYWRnZXQtZXhwb3J0LmggIHwgICAyOCArDQo+Pj4gIGRyaXZlcnMvdXNiL2NkbnMz L2dhZGdldC5jICAgICAgICAgfCAyMDAzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4+ PiAgZHJpdmVycy91c2IvY2RuczMvZ2FkZ2V0LmggICAgICAgICB8IDEyMDcgKysrKysrKysrKysr KysrKysNCj4+PiAgZHJpdmVycy91c2IvY2RuczMvaG9zdC1leHBvcnQuaCAgICB8ICAgMjggKw0K Pj4+ICBkcml2ZXJzL3VzYi9jZG5zMy9ob3N0LmMgICAgICAgICAgIHwgICA3MiArDQo+Pj4gIGRy aXZlcnMvdXNiL2NkbnMzL3RyYWNlLmMgICAgICAgICAgfCAgIDIzICsNCj4+PiAgZHJpdmVycy91 c2IvY2RuczMvdHJhY2UuaCAgICAgICAgICB8ICA0MDQgKysrKysrDQo+Pj4gIDE5IGZpbGVzIGNo YW5nZWQsIDYyNjcgaW5zZXJ0aW9ucygrKQ0KPj4+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy91c2IvY2RuczMvS2NvbmZpZw0KPj4+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy91c2Iv Y2RuczMvTWFrZWZpbGUNCj4+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdXNiL2NkbnMz L2NkbnMzLXBjaS13cmFwLmMNCj4+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdXNiL2Nk bnMzL2NvcmUuYw0KPj4+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy91c2IvY2RuczMvY29y ZS5oDQo+Pj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3VzYi9jZG5zMy9kZWJ1Zy5oDQo+ Pj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3VzYi9jZG5zMy9kZWJ1Z2ZzLmMNCj4+PiAg Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdXNiL2NkbnMzL2RyZC5jDQo+Pj4gIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL3VzYi9jZG5zMy9kcmQuaA0KPj4+ICBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy91c2IvY2RuczMvZXAwLmMNCj4+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvdXNiL2NkbnMzL2dhZGdldC1leHBvcnQuaA0KPj4+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy91c2IvY2RuczMvZ2FkZ2V0LmMNCj4+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv dXNiL2NkbnMzL2dhZGdldC5oDQo+Pj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3VzYi9j ZG5zMy9ob3N0LWV4cG9ydC5oDQo+Pj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3VzYi9j ZG5zMy9ob3N0LmMNCj4+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdXNiL2NkbnMzL3Ry YWNlLmMNCj4+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdXNiL2NkbnMzL3RyYWNlLmgN Cj4+Pg0KPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9LY29uZmlnIGIvZHJpdmVycy91c2Iv S2NvbmZpZw0KPj4+IGluZGV4IDk4N2ZjNWJhNjMyMS4uNWY5MzM0MDE5ZDA0IDEwMDY0NA0KPj4+ IC0tLSBhL2RyaXZlcnMvdXNiL0tjb25maWcNCj4+PiArKysgYi9kcml2ZXJzL3VzYi9LY29uZmln DQo+Pj4gQEAgLTExMiw2ICsxMTIsOCBAQCBzb3VyY2UgImRyaXZlcnMvdXNiL3VzYmlwL0tjb25m aWciDQo+Pj4NCj4+PiAgZW5kaWYNCj4+Pg0KPj4+ICtzb3VyY2UgImRyaXZlcnMvdXNiL2NkbnMz L0tjb25maWciDQo+Pj4gKw0KPj4+ICBzb3VyY2UgImRyaXZlcnMvdXNiL210dTMvS2NvbmZpZyIN Cj4+Pg0KPj4+ICBzb3VyY2UgImRyaXZlcnMvdXNiL211c2IvS2NvbmZpZyINCj4+PiBkaWZmIC0t Z2l0IGEvZHJpdmVycy91c2IvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9NYWtlZmlsZQ0KPj4+IGlu ZGV4IDdkMWI4YzgyYjIwOC4uYWIxMjViOTY2Y2FjIDEwMDY0NA0KPj4+IC0tLSBhL2RyaXZlcnMv dXNiL01ha2VmaWxlDQo+Pj4gKysrIGIvZHJpdmVycy91c2IvTWFrZWZpbGUNCj4+PiBAQCAtMTIs NiArMTIsOCBAQCBvYmotJChDT05GSUdfVVNCX0RXQzMpCQkrPSBkd2MzLw0KPj4+ICBvYmotJChD T05GSUdfVVNCX0RXQzIpCQkrPSBkd2MyLw0KPj4+ICBvYmotJChDT05GSUdfVVNCX0lTUDE3NjAp CSs9IGlzcDE3NjAvDQo+Pj4NCj4+PiArb2JqLSQoQ09ORklHX1VTQl9DRE5TMykJCSs9IGNkbnMz Lw0KPj4+ICsNCj4+PiAgb2JqLSQoQ09ORklHX1VTQl9NT04pCQkrPSBtb24vDQo+Pj4gIG9iai0k KENPTkZJR19VU0JfTVRVMykJCSs9IG10dTMvDQo+Pj4NCj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy91c2IvY2RuczMvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL2NkbnMzL0tjb25maWcNCj4+PiBuZXcg ZmlsZSBtb2RlIDEwMDY0NA0KPj4+IGluZGV4IDAwMDAwMDAwMDAwMC4uMjdjYjNkOGRiZTNkDQo+ Pj4gLS0tIC9kZXYvbnVsbA0KPj4+ICsrKyBiL2RyaXZlcnMvdXNiL2NkbnMzL0tjb25maWcNCj4+ PiBAQCAtMCwwICsxLDQ0IEBADQo+Pj4gK2NvbmZpZyBVU0JfQ0ROUzMNCj4+PiArCXRyaXN0YXRl ICJDYWRlbmNlIFVTQjMgRHVhbC1Sb2xlIENvbnRyb2xsZXIiDQo+Pj4gKwlkZXBlbmRzIG9uIFVT Ql9TVVBQT1JUICYmIChVU0IgfHwgVVNCX0dBREdFVCkgJiYgSEFTX0RNQQ0KPj4+ICsJaGVscA0K Pj4+ICsJICBTYXkgWSBoZXJlIGlmIHlvdXIgc3lzdGVtIGhhcyBhIGNhZGVuY2UgVVNCMyBkdWFs LXJvbGUgY29udHJvbGxlci4NCj4+PiArCSAgSXQgc3VwcG9ydHM6IGR1YWwtcm9sZSBzd2l0Y2gs IEhvc3Qtb25seSwgYW5kIFBlcmlwaGVyYWwtb25seS4NCj4+PiArDQo+Pj4gKwkgIElmIHlvdSBj aG9vc2UgdG8gYnVpbGQgdGhpcyBkcml2ZXIgaXMgYSBkeW5hbWljYWxseSBsaW5rZWQNCj4+PiAr CSAgYXMgbW9kdWxlLCB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNkbnMzLmtvLg0KPj4+ICsN Cj4+PiAraWYgVVNCX0NETlMzDQo+Pj4gKw0KPj4+ICtjb25maWcgVVNCX0NETlMzX0dBREdFVA0K Pj4+ICsgICAgICAgIGJvb2wgIkNhZGVuY2UgVVNCMyBkZXZpY2UgY29udHJvbGxlciINCj4+PiAr ICAgICAgICBkZXBlbmRzIG9uIFVTQl9HQURHRVQNCj4+PiArICAgICAgICBoZWxwDQo+Pj4gKyAg ICAgICAgICBTYXkgWSBoZXJlIHRvIGVuYWJsZSBkZXZpY2UgY29udHJvbGxlciBmdW5jdGlvbmFs aXR5IG9mIHRoZQ0KPj4+ICsgICAgICAgICAgY2FkZW5jZSBVU0JTUy1ERVYgZHJpdmVyLg0KPj4+ ICsNCj4+PiArICAgICAgICAgIFRoaXMgY29udHJvbGxlciBzdXBwb3J0cyBGRiwgSFMgYW5kIFNT IG1vZGUuIEl0IGRvZXNuJ3Qgc3VwcG9ydA0KPj4+ICsgICAgICAgICAgTFMgYW5kIFNTUCBtb2Rl Lg0KPj4+ICsNCj4+PiArY29uZmlnIFVTQl9DRE5TM19IT1NUDQo+Pj4gKyAgICAgICAgYm9vbCAi Q2FkZW5jZSBVU0IzIGhvc3QgY29udHJvbGxlciINCj4+PiArICAgICAgICBkZXBlbmRzIG9uIFVT Ql9YSENJX0hDRA0KPj4+ICsgICAgICAgIGhlbHANCj4+PiArICAgICAgICAgIFNheSBZIGhlcmUg dG8gZW5hYmxlIGhvc3QgY29udHJvbGxlciBmdW5jdGlvbmFsaXR5IG9mIHRoZQ0KPj4+ICsgICAg ICAgICAgY2FkZW5jZSBkcml2ZXIuDQo+Pj4gKw0KPj4+ICsgICAgICAgICAgSG9zdCBjb250cm9s bGVyIGlzIGNvbXBsaWFudCB3aXRoIFhIQ0kgc28gaXQgd2lsbCB1c2UNCj4+PiArICAgICAgICAg IHN0YW5kYXJkIFhIQ0kgZHJpdmVyLg0KPj4+ICsNCj4+PiArY29uZmlnIFVTQl9DRE5TM19QQ0lf V1JBUA0KPj4+ICsJdHJpc3RhdGUgIkNhZGVuY2UgVVNCMyBzdXBwb3J0IG9uIFBDSWUtYmFzZWQg cGxhdGZvcm1zIg0KPj4+ICsJZGVwZW5kcyBvbiBVU0JfUENJICYmIEFDUEkNCj4+PiArCWRlZmF1 bHQgVVNCX0NETlMzDQo+Pj4gKwloZWxwDQo+Pj4gKwkgIElmIHlvdSdyZSB1c2luZyB0aGUgVVNC U1MgQ29yZSBJUCB3aXRoIGEgUENJZSwgcGxlYXNlIHNheQ0KPj4+ICsJICAnWScgb3IgJ00nIGhl cmUuDQo+Pj4gKw0KPj4+ICsJICBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIHRoaXMgZHJpdmVyIGFz IG1vZHVsZSBpdCB3aWxsDQo+Pj4gKwkgIGJlIGR5bmFtaWNhbGx5IGxpbmtlZCBhbmQgbW9kdWxl IHdpbGwgYmUgY2FsbGVkIGNkbnMzLXBjaS5rbw0KPj4+ICsNCj4+PiArZW5kaWYNCj4+PiBkaWZm IC0tZ2l0IGEvZHJpdmVycy91c2IvY2RuczMvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9jZG5zMy9N YWtlZmlsZQ0KPj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+Pj4gaW5kZXggMDAwMDAwMDAwMDAw Li44Zjk0Mzg1OTMzNzUNCj4+PiAtLS0gL2Rldi9udWxsDQo+Pj4gKysrIGIvZHJpdmVycy91c2Iv Y2RuczMvTWFrZWZpbGUNCj4+PiBAQCAtMCwwICsxLDE0IEBADQo+Pj4gKyMgU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEdQTC0yLjANCj4+PiArIyBkZWZpbmVfdHJhY2UuaCBuZWVkcyB0byBrbm93 IGhvdyB0byBmaW5kIG91ciBoZWFkZXINCj4+PiArQ0ZMQUdTX3RyYWNlLm8JCQkJOj0gLUkkKHNy YykNCj4+PiArDQo+Pj4gK2NkbnMzLXkJCQkJCTo9IGNvcmUubyBkcmQubyB0cmFjZS5vDQo+Pj4g Kw0KPj4+ICtvYmotJChDT05GSUdfVVNCX0NETlMzKQkJCSs9IGNkbnMzLm8NCj4+PiAraWZuZXEg KCQoQ09ORklHX0RFQlVHX0ZTKSwpDQo+Pj4gKwljZG5zMy15CQkJCSs9IGRlYnVnZnMubw0KPj4+ ICtlbmRpZg0KPj4+ICsNCj4+PiArY2RuczMtJChDT05GSUdfVVNCX0NETlMzX0dBREdFVCkJKz0g Z2FkZ2V0Lm8gZXAwLm8NCj4+PiArY2RuczMtJChDT05GSUdfVVNCX0NETlMzX0hPU1QpCQkrPSBo b3N0Lm8NCj4+PiArb2JqLSQoQ09ORklHX1VTQl9DRE5TM19QQ0lfV1JBUCkJKz0gY2RuczMtcGNp LXdyYXAubw0KPj53aGVuIGJ1aWxkIGFzIG1vZHVsZToNCj4+Q09ORklHX1VTQl9DRE5TMz1tDQo+ PkNPTkZJR19VU0JfQ0ROUzNfR0FER0VUPW0NCj4+Q09ORklHX1VTQl9DRE5TM19IT1NUPW0NCj4N Cj5Ib3cgeW91IHNldCBzdWNoIGNvbmZpZ3VyYXRpb24gPyBGcm9tIG1ha2UgbWVudWNvbmZpZyBp dCdzIGltcG9zc2libGUuDQo+DQo+PnRoZXJlIGlzIGFuIGVycm9yOg0KPj5FUlJPUjogImNkbnMz X2hhbmRzaGFrZSIgW2RyaXZlcnMvdXNiL2NkbnMzL2NkbnMzLmtvXSB1bmRlZmluZWQhDQo+Pg0K Pj53aGVuIG9ubHkgc2V0Og0KPj5DT05GSUdfVVNCX0NETlMzPXkNCj4+YWxzbyBlbmNvdW50ZXIg ZXJyb3JzOg0KPj5kcml2ZXJzL3VzYi9jZG5zMy9kcmQubzogSW4gZnVuY3Rpb24gYGNkbnMzX2Ry ZF9zd2l0Y2hfZ2FkZ2V0JzoNCj4+L2RyaXZlcnMvdXNiL2NkbnMzL2RyZC5jOjE3MzogdW5kZWZp bmVkIHJlZmVyZW5jZSB0byBgY2RuczNfaGFuZHNoYWtlJw0KPj5kcml2ZXJzL3VzYi9jZG5zMy9k cmQubzogSW4gZnVuY3Rpb24gYGNkbnMzX2RyZF9zd2l0Y2hfaG9zdCc6DQo+PmRyaXZlcnMvdXNi L2NkbnMzL2RyZC5jOjEzOTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgY2RuczNfaGFuZHNoYWtl Jw0KPg0KPkkgd2lsbCBjaGVjayB0aGlzLg0KPlRoYW5rcy4NCg0KVG8gZml4IHRoaXMgaXNzdWUg SSB3aWxsIG1vdmUgY2RuczNfaGFuZHNoYWtlIGZ1bmN0aW9uIHRvIGNvcmUuYyBmaWxlLiANCkkg a25vdyB0aGF0IGl0J3Mgbm90IGEgcGVyZmVjdCBwbGFjZSBmb3IgdGhpcyBmdW5jdGlvbiwgYnV0 IEkgZG9uJ3QgDQp3YW50IHRvIGNyZWF0ZSBuZXh0IC5jIGZpbGUgd2l0aCB0aGlzIGZ1bmN0aW9u Lg0KDQo+DQo+Pg0KPj4NCj4+DQo+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NkbnMzL2Nk bnMzLXBjaS13cmFwLmMgYi9kcml2ZXJzL3VzYi9jZG5zMy9jZG5zMy1wY2ktd3JhcC5jDQo+Pj4g bmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4+PiBpbmRleCAwMDAwMDAwMDAwMDAuLmQwYjJkM2Q5Yjk4 Mw0KPj4+IC0tLSAvZGV2L251bGwNCj4+PiArKysgYi9kcml2ZXJzL3VzYi9jZG5zMy9jZG5zMy1w Y2ktd3JhcC5jDQo+Pj4gQEAgLTAsMCArMSwxNTUgQEANCj4+PiArLy8gU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEdQTC0yLjANCj4+PiArLyoNCj4+PiArICogQ2FkZW5jZSBVU0JTUyBQQ0kgR2x1 ZSBkcml2ZXINCj4+PiArICoNCj4+PiArICogQ29weXJpZ2h0IChDKSAyMDE4IENhZGVuY2UuDQo+ Pj4gKyAqDQo+Pj4gKyAqIEF1dGhvcjogUGF3ZWwgTGFzemN6YWsgPHBhd2VsbEBjYWRlbmNlLmNv bT4NCj4+PiArICovDQo+Pj4gKw0KPj4+ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+DQo+Pj4g KyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4NCj4+PiArI2luY2x1ZGUgPGxpbnV4L3BjaS5oPg0K Pj4+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+DQo+Pj4gKyNpbmNsdWRlIDxs aW51eC9kbWEtbWFwcGluZy5oPg0KPj4+ICsjaW5jbHVkZSA8bGludXgvc2xhYi5oPg0KPj4+ICsN Cj4+PiArc3RydWN0IGNkbnMzX3dyYXAgew0KPj4+ICsJc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGxhdF9kZXY7DQo+Pj4gKwlzdHJ1Y3QgcGNpX2RldiAqaGdfZGV2Ow0KPj4+ICsJc3RydWN0IHJl c291cmNlIGRldl9yZXNbNF07DQo+Pj4gK307DQo+Pj4gKw0KPj4+ICtzdHJ1Y3QgY2RuczNfd3Jh cCB3cmFwOw0KPj5ub3QgdXNlZCBpbiBmYWN0Pw0KPg0KPlllcywgSSBmb3Jnb3QgdG8gcmVtb3Zl IGl0Lg0KPj4NCj4+PiArDQo+Pj4gKyNkZWZpbmUgUkVTX0lSUV9JRAkJMA0KPj4+ICsjZGVmaW5l IFJFU19IT1NUX0lECQkxDQo+Pj4gKyNkZWZpbmUgUkVTX0RFVl9JRAkJMg0KPj4+ICsjZGVmaW5l IFJFU19EUkRfSUQJCTMNCj4+PiArDQo+Pj4gKyNkZWZpbmUgUENJX0JBUl9IT1NUCQkwDQo+Pj4g KyNkZWZpbmUgUENJX0JBUl9ERVYJCTINCj4+PiArI2RlZmluZSBQQ0lfQkFSX09URwkJNA0KPj4+ ICsNCj4+PiArI2RlZmluZSBQQ0lfREVWX0ZOX0hPU1RfREVWSUNFCTANCj4+PiArI2RlZmluZSBQ Q0lfREVWX0ZOX09URwkJMQ0KPj4+ICsNCj4+PiArI2RlZmluZSBQQ0lfRFJJVkVSX05BTUUJCSJj ZG5zMy1wY2ktdXNic3MiDQo+Pj4gKyNkZWZpbmUgUExBVF9EUklWRVJfTkFNRQkiY2Rucy11c2Iz Ig0KPj4+ICsNCj4+PiArI2RlZmluZSBDRE5TX1ZFTkRPUl9JRCAweDE3Y2QNCj4+PiArI2RlZmlu ZSBDRE5TX0RFVklDRV9JRCAweDAxMDANCj4+PiArDQo+Pj4gKy8qKg0KPj4+ICsgKiBjZG5zM19w Y2lfcHJvYmUgLSBQcm9iZSBmdW5jdGlvbiBmb3IgQ2FkZW5jZSBVU0Igd3JhcHBlciBkcml2ZXIN Cj4+PiArICogQHBkZXY6IHBsYXRmb3JtIGRldmljZSBvYmplY3QNCj4+PiArICogQGlkOiBwY2kg ZGV2aWNlIGlkDQo+Pj4gKyAqDQo+Pj4gKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG90aGVyd2lz ZSBuZWdhdGl2ZSBlcnJubw0KPj4+ICsgKi8NCj4+PiArc3RhdGljIGludCBjZG5zM19wY2lfcHJv YmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsDQo+Pj4gKwkJCSAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2 aWNlX2lkICppZCkNCj4+PiArew0KPj4+ICsJc3RydWN0IHBsYXRmb3JtX2RldmljZV9pbmZvIHBs YXRfaW5mbzsNCj4+PiArCXN0cnVjdCBjZG5zM193cmFwICp3cmFwOw0KPj4+ICsJc3RydWN0IHJl c291cmNlICpyZXM7DQo+Pj4gKwlpbnQgZXJyOw0KPj4+ICsNCj4+PiArCS8qDQo+Pj4gKwkgKiBm b3IgR0FER0VUL0hPU1QgUENJIChkZXZmbikgZnVuY3Rpb24gbnVtYmVyIGlzIDAsDQo+Pj4gKwkg KiBmb3IgT1RHIFBDSSAoZGV2Zm4pIGZ1bmN0aW9uIG51bWJlciBpcyAxDQo+Pj4gKwkgKi8NCj4+ PiArCWlmICghaWQgfHwgcGRldi0+ZGV2Zm4gIT0gUENJX0RFVl9GTl9IT1NUX0RFVklDRSkNCj4+ PiArCQlyZXR1cm4gLUVJTlZBTDsNCj4+PiArDQo+Pj4gKwllcnIgPSBwY2ltX2VuYWJsZV9kZXZp Y2UocGRldik7DQo+Pj4gKwlpZiAoZXJyKSB7DQo+Pj4gKwkJZGV2X2VycigmcGRldi0+ZGV2LCAi RW5hYmxpbmcgUENJIGRldmljZSBoYXMgZmFpbGVkICVkXG4iLCBlcnIpOw0KPj4+ICsJCXJldHVy biBlcnI7DQo+Pj4gKwl9DQo+Pj4gKw0KPj4+ICsJcGNpX3NldF9tYXN0ZXIocGRldik7DQo+Pj4g Kwl3cmFwID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqd3JhcCksIEdGUF9LRVJO RUwpOw0KPj4+ICsJaWYgKCF3cmFwKSB7DQo+Pj4gKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFp bGVkIHRvIGFsbG9jYXRlIG1lbW9yeVxuIik7DQo+Pj4gKwkJcmV0dXJuIC1FTk9NRU07DQo+Pj4g Kwl9DQo+Pj4gKw0KPj4+ICsJLyogZnVuY3Rpb24gMDogaG9zdChCQVJfMCkgKyBkZXZpY2UoQkFS XzEpICsgb3RnKEJBUl8yKSkuICovDQo+Pj4gKwltZW1zZXQod3JhcC0+ZGV2X3JlcywgMHgwMCwN Cj4+PiArCSAgICAgICBzaXplb2Yoc3RydWN0IHJlc291cmNlKSAqIEFSUkFZX1NJWkUod3JhcC0+ ZGV2X3JlcykpOw0KPj5NYWJ5ZSBub3QgbmVjZXNzYXJ5LCBkZXZtX2t6YWxsb2MoKSBhbHJlYWR5 IHNldCB0aGVtIGFzIDA7DQo+DQo+WWVzLCBpdCdzIG5vdCBuZWNlc3NhcnkuDQo+Pg0KPj4+ICsJ ZGV2X2RiZygmcGRldi0+ZGV2LCAiSW5pdGlhbGl6ZSBEZXZpY2UgcmVzb3VyY2VzXG4iKTsNCj4+ PiArCXJlcyA9IHdyYXAtPmRldl9yZXM7DQo+Pj4gKw0KPj4+ICsJcmVzW1JFU19ERVZfSURdLnN0 YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIFBDSV9CQVJfREVWKTsNCj4+PiArCXJlc1tS RVNfREVWX0lEXS5lbmQgPSAgIHBjaV9yZXNvdXJjZV9lbmQocGRldiwgUENJX0JBUl9ERVYpOw0K Pj4+ICsJcmVzW1JFU19ERVZfSURdLm5hbWUgPSAiZGV2IjsNCj4+PiArCXJlc1tSRVNfREVWX0lE XS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNOw0KPj4+ICsJZGV2X2RiZygmcGRldi0+ZGV2LCAiVVNC U1MtREVWIHBoeXNpY2FsIGJhc2UgYWRkcjogJXBhXG4iLA0KPj4+ICsJCSZyZXNbUkVTX0RFVl9J RF0uc3RhcnQpOw0KPj4+ICsNCj4+PiArCXJlc1tSRVNfSE9TVF9JRF0uc3RhcnQgPSBwY2lfcmVz b3VyY2Vfc3RhcnQocGRldiwgUENJX0JBUl9IT1NUKTsNCj4+PiArCXJlc1tSRVNfSE9TVF9JRF0u ZW5kID0gcGNpX3Jlc291cmNlX2VuZChwZGV2LCBQQ0lfQkFSX0hPU1QpOw0KPj4+ICsJcmVzW1JF U19IT1NUX0lEXS5uYW1lID0gInhoY2kiOw0KPj4+ICsJcmVzW1JFU19IT1NUX0lEXS5mbGFncyA9 IElPUkVTT1VSQ0VfTUVNOw0KPj4+ICsJZGV2X2RiZygmcGRldi0+ZGV2LCAiVVNCU1MtWEhDSSBw aHlzaWNhbCBiYXNlIGFkZHI6ICVwYVxuIiwNCj4+PiArCQkmcmVzW1JFU19IT1NUX0lEXS5zdGFy dCk7DQo+Pj4gKw0KPj4+ICsJcmVzW1JFU19EUkRfSURdLnN0YXJ0ID0gcGNpX3Jlc291cmNlX3N0 YXJ0KHBkZXYsIFBDSV9CQVJfT1RHKTsNCj4+PiArCXJlc1tSRVNfRFJEX0lEXS5lbmQgPSAgIHBj aV9yZXNvdXJjZV9lbmQocGRldiwgUENJX0JBUl9PVEcpOw0KPj4+ICsJcmVzW1JFU19EUkRfSURd Lm5hbWUgPSAib3RnIjsNCj4+PiArCXJlc1tSRVNfRFJEX0lEXS5mbGFncyA9IElPUkVTT1VSQ0Vf TUVNOw0KPj4+ICsJZGV2X2RiZygmcGRldi0+ZGV2LCAiVVNCU1MtRFJEIHBoeXNpY2FsIGJhc2Ug YWRkcjogJXBhXG4iLA0KPj4+ICsJCSZyZXNbUkVTX0RSRF9JRF0uc3RhcnQpOw0KPj4+ICsNCj4+ PiArCS8qIEludGVycnVwdCBjb21tb24gZm9yIGJvdGggZGV2aWNlIGFuZCBYSENJICovDQo+Pj4g Kwl3cmFwLT5kZXZfcmVzW1JFU19JUlFfSURdLnN0YXJ0ID0gcGRldi0+aXJxOw0KPj4+ICsJd3Jh cC0+ZGV2X3Jlc1tSRVNfSVJRX0lEXS5uYW1lID0gImNkbnMzLWlycSI7DQo+Pj4gKwl3cmFwLT5k ZXZfcmVzW1JFU19JUlFfSURdLmZsYWdzID0gSU9SRVNPVVJDRV9JUlE7DQo+Pj4gKw0KPj4+ICsJ Lyogc2V0IHVwIHBsYXRmb3JtIGRldmljZSBpbmZvICovDQo+Pj4gKwltZW1zZXQoJnBsYXRfaW5m bywgMCwgc2l6ZW9mKHBsYXRfaW5mbykpOw0KPj4+ICsJcGxhdF9pbmZvLnBhcmVudCA9ICZwZGV2 LT5kZXY7DQo+Pj4gKwlwbGF0X2luZm8uZndub2RlID0gcGRldi0+ZGV2LmZ3bm9kZTsNCj4+PiAr CXBsYXRfaW5mby5uYW1lID0gUExBVF9EUklWRVJfTkFNRTsNCj4+PiArCXBsYXRfaW5mby5pZCA9 IHBkZXYtPmRldmZuOw0KPj4+ICsJcGxhdF9pbmZvLnJlcyA9IHdyYXAtPmRldl9yZXM7DQo+Pj4g KwlwbGF0X2luZm8ubnVtX3JlcyA9IEFSUkFZX1NJWkUod3JhcC0+ZGV2X3Jlcyk7DQo+Pj4gKwlw bGF0X2luZm8uZG1hX21hc2sgPSBwZGV2LT5kbWFfbWFzazsNCj4+PiArDQo+Pj4gKwkvKiByZWdp c3RlciBwbGF0Zm9ybSBkZXZpY2UgKi8NCj4+PiArCXdyYXAtPnBsYXRfZGV2ID0gcGxhdGZvcm1f ZGV2aWNlX3JlZ2lzdGVyX2Z1bGwoJnBsYXRfaW5mbyk7DQo+Pj4gKwlpZiAoSVNfRVJSKHdyYXAt PnBsYXRfZGV2KSkNCj4+PiArCQlyZXR1cm4gUFRSX0VSUih3cmFwLT5wbGF0X2Rldik7DQo+Pj4g Kw0KPj4+ICsJcGNpX3NldF9kcnZkYXRhKHBkZXYsIHdyYXApOw0KPj4+ICsNCj4+PiArCXJldHVy biBlcnI7DQo+Pj4gK30NCj4+PiArDQo+Pj4gK3ZvaWQgY2RuczNfcGNpX3JlbW92ZShzdHJ1Y3Qg cGNpX2RldiAqcGRldikNCj4+PiArew0KPj4+ICsJc3RydWN0IGNkbnMzX3dyYXAgKndyYXAgPSAo c3RydWN0IGNkbnMzX3dyYXAgKilwY2lfZ2V0X2RydmRhdGEocGRldik7DQo+Pj4gKw0KPj4+ICsJ cGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIod3JhcC0+cGxhdF9kZXYpOw0KPj4+ICt9DQo+Pj4g Kw0KPj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgY2RuczNfcGNpX2lkc1td ID0gew0KPj4+ICsJeyBQQ0lfREVWSUNFKENETlNfVkVORE9SX0lELCBDRE5TX0RFVklDRV9JRCks IH0sDQo+Pj4gKwl7IDAsIH0NCj4+PiArfTsNCj4+PiArDQo+Pj4gK3N0YXRpYyBzdHJ1Y3QgcGNp X2RyaXZlciBjZG5zM19wY2lfZHJpdmVyID0gew0KPj4+ICsJLm5hbWUgPSBQQ0lfRFJJVkVSX05B TUUsDQo+Pj4gKwkuaWRfdGFibGUgPSBjZG5zM19wY2lfaWRzLA0KPj4+ICsJLnByb2JlID0gY2Ru czNfcGNpX3Byb2JlLA0KPj4+ICsJLnJlbW92ZSA9IGNkbnMzX3BjaV9yZW1vdmUsDQo+Pj4gK307 DQo+Pj4gKw0KPj4+ICttb2R1bGVfcGNpX2RyaXZlcihjZG5zM19wY2lfZHJpdmVyKTsNCj4+PiAr TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGNkbnMzX3BjaV9pZHMpOw0KPj4+ICsNCj4+PiArTU9E VUxFX0FVVEhPUigiUGF3ZWwgTGFzemN6YWsgPHBhd2VsbEBjYWRlbmNlLmNvbT4iKTsNCj4+PiAr TU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOw0KPj4+ICtNT0RVTEVfREVTQ1JJUFRJT04oIkNhZGVu Y2UgVVNCU1MgUENJIHdyYXBwZXJyIik7DQo+Pj4gKw0KPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJz L3VzYi9jZG5zMy9jb3JlLmMgYi9kcml2ZXJzL3VzYi9jZG5zMy9jb3JlLmMNCj4+PiBuZXcgZmls ZSBtb2RlIDEwMDY0NA0KPj4+IGluZGV4IDAwMDAwMDAwMDAwMC4uYWEyZjYzMjQxZGFiDQo+Pj4g LS0tIC9kZXYvbnVsbA0KPj4+ICsrKyBiL2RyaXZlcnMvdXNiL2NkbnMzL2NvcmUuYw0KPj4+IEBA IC0wLDAgKzEsNDAzIEBADQo+Pj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w DQo+Pj4gKy8qDQo+Pj4gKyAqIENhZGVuY2UgVVNCU1MgRFJEIERyaXZlci4NCj4+PiArICoNCj4+ PiArICogQ29weXJpZ2h0IChDKSAyMDE4IENhZGVuY2UuDQo+Pj4gKyAqIENvcHlyaWdodCAoQykg MjAxNy0yMDE4IE5YUA0KPj4+ICsgKg0KPj4+ICsgKiBBdXRob3I6IFBldGVyIENoZW4gPHBldGVy LmNoZW5AbnhwLmNvbT4NCj4+PiArICogICAgICAgICBQYXdlbCBMYXN6Y3phayA8cGF3ZWxsQGNh ZGVuY2UuY29tPg0KPj4+ICsgKi8NCj4+PiArDQo+Pj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUu aD4NCj4+PiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPg0KPj4+ICsjaW5jbHVkZSA8bGludXgv cGxhdGZvcm1fZGV2aWNlLmg+DQo+Pj4gKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4NCj4+ PiArI2luY2x1ZGUgPGxpbnV4L2lvLmg+DQo+Pj4gKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1l Lmg+DQo+Pj4gKw0KPj4+ICsjaW5jbHVkZSAiZ2FkZ2V0LmgiDQo+Pj4gKyNpbmNsdWRlICJjb3Jl LmgiDQo+Pj4gKyNpbmNsdWRlICJob3N0LWV4cG9ydC5oIg0KPj4+ICsjaW5jbHVkZSAiZ2FkZ2V0 LWV4cG9ydC5oIg0KPj4+ICsjaW5jbHVkZSAiZHJkLmgiDQo+Pj4gKyNpbmNsdWRlICJkZWJ1Zy5o Ig0KPj4+ICsNCj4+PiArc3RhdGljIGlubGluZQ0KPj4+ICtzdHJ1Y3QgY2RuczNfcm9sZV9kcml2 ZXIgKmNkbnMzX2dldF9jdXJyZW50X3JvbGVfZHJpdmVyKHN0cnVjdCBjZG5zMyAqY2RucykNCj4+ PiArew0KPj4+ICsJV0FSTl9PTihjZG5zLT5yb2xlID49IENETlMzX1JPTEVfRU5EIHx8ICFjZG5z LT5yb2xlc1tjZG5zLT5yb2xlXSk7DQo+Pj4gKwlyZXR1cm4gY2Rucy0+cm9sZXNbY2Rucy0+cm9s ZV07DQo+Pj4gK30NCj4+PiArDQo+Pj4gK3N0YXRpYyBpbnQgY2RuczNfcm9sZV9zdGFydChzdHJ1 Y3QgY2RuczMgKmNkbnMsIGVudW0gY2RuczNfcm9sZXMgcm9sZSkNCj4+PiArew0KPj4+ICsJaW50 IHJldDsNCj4+PiArDQo+Pj4gKwlpZiAoV0FSTl9PTihyb2xlID49IENETlMzX1JPTEVfRU5EKSkN Cj4+PiArCQlyZXR1cm4gMDsNCj4+PiArDQo+Pj4gKwlpZiAoIWNkbnMtPnJvbGVzW3JvbGVdKQ0K Pj4+ICsJCXJldHVybiAtRU5YSU87DQo+Pj4gKw0KPj4+ICsJaWYgKGNkbnMtPnJvbGVzW3JvbGVd LT5zdGF0ZSA9PSBDRE5TM19ST0xFX1NUQVRFX0FDVElWRSkNCj4+PiArCQlyZXR1cm4gMDsNCj4+ PiArDQo+Pj4gKwltdXRleF9sb2NrKCZjZG5zLT5tdXRleCk7DQo+Pj4gKwljZG5zLT5yb2xlID0g cm9sZTsNCj4+PiArCXJldCA9IGNkbnMtPnJvbGVzW3JvbGVdLT5zdGFydChjZG5zKTsNCj4+PiAr CWlmICghcmV0KQ0KPj4+ICsJCWNkbnMtPnJvbGVzW3JvbGVdLT5zdGF0ZSA9IENETlMzX1JPTEVf U1RBVEVfQUNUSVZFOw0KPj4+ICsJbXV0ZXhfdW5sb2NrKCZjZG5zLT5tdXRleCk7DQo+Pj4gKwly ZXR1cm4gcmV0Ow0KPj4+ICt9DQo+Pj4gKw0KPj4+ICt2b2lkIGNkbnMzX3JvbGVfc3RvcChzdHJ1 Y3QgY2RuczMgKmNkbnMpDQo+Pj4gK3sNCj4+PiArCWVudW0gY2RuczNfcm9sZXMgcm9sZSA9IGNk bnMtPnJvbGU7DQo+Pj4gKw0KPj4+ICsJaWYgKHJvbGUgPj0gQ0ROUzNfUk9MRV9FTkQpIHsNCj4+ PiArCQlXQVJOX09OKHJvbGUgPiBDRE5TM19ST0xFX0VORCk7DQo+Pj4gKwkJcmV0dXJuOw0KPj4+ ICsJfQ0KPj4+ICsNCj4+PiArCWlmIChjZG5zLT5yb2xlc1tyb2xlXS0+c3RhdGUgPT0gQ0ROUzNf Uk9MRV9TVEFURV9JTkFDVElWRSkNCj4+PiArCQlyZXR1cm47DQo+Pj4gKw0KPj4+ICsJbXV0ZXhf bG9jaygmY2Rucy0+bXV0ZXgpOw0KPj4+ICsJY2Rucy0+cm9sZXNbcm9sZV0tPnN0b3AoY2Rucyk7 DQo+Pj4gKwljZG5zLT5yb2xlc1tyb2xlXS0+c3RhdGUgPSBDRE5TM19ST0xFX1NUQVRFX0lOQUNU SVZFOw0KPj4+ICsJbXV0ZXhfdW5sb2NrKCZjZG5zLT5tdXRleCk7DQo+Pj4gK30NCj4+PiArDQo+ Pj4gKy8qDQo+Pj4gKyAqIGNkbnMtPnJvbGUgZ2V0cyBmcm9tIGNkbnMzX2dldF9pbml0aWFsX3Jv bGUsIGFuZCB0aGlzIEFQSSB0ZWxscyByb2xlIGF0IHRoZQ0KPj4+ICsgKiBydW50aW1lLg0KPj4+ ICsgKiBJZiBib3RoIHJvbGVzIGFyZSBzdXBwb3J0ZWQsIHRoZSByb2xlIGlzIHNlbGVjdGVkIGJh c2VkIG9uIHZidXMvaWQuDQo+Pj4gKyAqIEl0IGNvdWxkIGJlIHJlYWQgZnJvbSBPVEcgcmVnaXN0 ZXIgb3IgZXh0ZXJuYWwgY29ubmVjdG9yLg0KPj4+ICsgKiBJZiBvbmx5IHNpbmdsZSByb2xlIGlz IHN1cHBvcnRlZCwgb25seSBvbmUgcm9sZSBzdHJ1Y3R1cmUNCj4+PiArICogaXMgYWxsb2NhdGVk LCBjZG5zLT5yb2xlc1tDRE5TM19ST0xFX0hPU1RdIG9yIGNkbnMtPnJvbGVzW0NETlMzX1JPTEVf R0FER0VUXS4NCj4+PiArICovDQo+Pj4gK3N0YXRpYyBlbnVtIGNkbnMzX3JvbGVzIGNkbnMzX2dl dF9pbml0aWFsX3JvbGUoc3RydWN0IGNkbnMzICpjZG5zKQ0KPj4+ICt7DQo+Pj4gKwlpZiAoY2Ru cy0+cm9sZXNbQ0ROUzNfUk9MRV9IT1NUXSAmJiBjZG5zLT5yb2xlc1tDRE5TM19ST0xFX0dBREdF VF0pIHsNCj4+PiArCQlpZiAoY2RuczNfaXNfaG9zdChjZG5zKSkNCj4+PiArCQkJcmV0dXJuIENE TlMzX1JPTEVfSE9TVDsNCj4+PiArCQlpZiAoY2RuczNfaXNfZGV2aWNlKGNkbnMpKQ0KPj4+ICsJ CQlyZXR1cm4gQ0ROUzNfUk9MRV9HQURHRVQ7DQo+Pj4gKwl9DQo+Pj4gKwlyZXR1cm4gY2Rucy0+ cm9sZXNbQ0ROUzNfUk9MRV9IT1NUXQ0KPj4+ICsJCT8gQ0ROUzNfUk9MRV9IT1NUDQo+Pj4gKwkJ OiBDRE5TM19ST0xFX0dBREdFVDsNCj4+PiArfQ0KPj4+ICsNCj4+PiArc3RhdGljIHZvaWQgY2Ru czNfZXhpdF9yb2xlcyhzdHJ1Y3QgY2RuczMgKmNkbnMpDQo+Pj4gK3sNCj4+PiArCWNkbnMzX3Jv bGVfc3RvcChjZG5zKTsNCj4+PiArCWNkbnMzX2RyZF9leGl0KGNkbnMpOw0KPj4+ICt9DQo+Pj4g Kw0KPj4+ICsvKioNCj4+PiArICogY2RuczNfY29yZV9pbml0X3JvbGUgLSBpbml0aWFsaXplIHJv bGUgb2Ygb3BlcmF0aW9uDQo+Pj4gKyAqIEBjZG5zOiBQb2ludGVyIHRvIGNkbnMzIHN0cnVjdHVy ZQ0KPj4+ICsgKg0KPj4+ICsgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvdGhlcndpc2UgbmVnYXRp dmUgZXJybm8NCj4+PiArICovDQo+Pj4gK3N0YXRpYyBpbnQgY2RuczNfY29yZV9pbml0X3JvbGUo c3RydWN0IGNkbnMzICpjZG5zKQ0KPj4+ICt7DQo+Pj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBj ZG5zLT5kZXY7DQo+Pj4gKwllbnVtIHVzYl9kcl9tb2RlIGJlc3RfZHJfbW9kZTsNCj4+PiArCWVu dW0gdXNiX2RyX21vZGUgZHJfbW9kZTsNCj4+PiArCWludCByZXQgPSAwOw0KPj4+ICsNCj4+PiAr CWRyX21vZGUgPSB1c2JfZ2V0X2RyX21vZGUoZGV2KTsNCj4+PiArCWNkbnMtPnJvbGUgPSBDRE5T M19ST0xFX0VORDsNCj4+PiArDQo+Pj4gKwkvKg0KPj4+ICsJICogSWYgZHJpdmVyIGNhbid0IHJl YWQgbW9kZSBieSBtZWFucyBvZiB1c2JfZ2V0X2RyX21kb2UgZnVuY3Rpb24gdGhlbg0KPj4+ICsJ ICogY2hvb3NlcyBtb2RlIGFjY29yZGluZyB3aXRoIEtlcm5lbCBjb25maWd1cmF0aW9uLiBUaGlz IHNldHRpbmcNCj4+PiArCSAqIGNhbiBiZSByZXN0cmljdGVkIGxhdGVyIGRlcGVuZGluZyBvbiBz dHJhcCBwaW4gY29uZmlndXJhdGlvbi4NCj4+PiArCSAqLw0KPj4+ICsJaWYgKGRyX21vZGUgPT0g VVNCX0RSX01PREVfVU5LTk9XTikgew0KPj4+ICsJCWlmIChJU19FTkFCTEVEKENPTkZJR19VU0Jf Q0ROUzNfSE9TVCkgJiYNCj4+PiArCQkgICAgSVNfRU5BQkxFRChDT05GSUdfVVNCX0NETlMzX0dB REdFVCkpDQo+Pj4gKwkJCWRyX21vZGUgPSBVU0JfRFJfTU9ERV9PVEc7DQo+Pj4gKwkJZWxzZSBp ZiAoSVNfRU5BQkxFRChDT05GSUdfVVNCX0NETlMzX0hPU1QpKQ0KPj4+ICsJCQlkcl9tb2RlID0g VVNCX0RSX01PREVfSE9TVDsNCj4+PiArCQllbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19VU0Jf Q0ROUzNfR0FER0VUKSkNCj4+PiArCQkJZHJfbW9kZSA9IFVTQl9EUl9NT0RFX1BFUklQSEVSQUw7 DQo+Pj4gKwl9DQo+Pj4gKw0KPj4+ICsJYmVzdF9kcl9tb2RlID0gVVNCX0RSX01PREVfT1RHOw0K Pj4+ICsNCj4+PiArCWlmIChkcl9tb2RlID09IFVTQl9EUl9NT0RFX09URykgew0KPj4+ICsJCWJl c3RfZHJfbW9kZSA9IGNkbnMtPmRyX21vZGU7DQo+Pj4gKwl9IGVsc2UgaWYgKGNkbnMtPmRyX21v ZGUgPT0gVVNCX0RSX01PREVfT1RHKSB7DQo+Pj4gKwkJYmVzdF9kcl9tb2RlID0gZHJfbW9kZTsN Cj4+PiArCX0gZWxzZSBpZiAoY2Rucy0+ZHJfbW9kZSAhPSBkcl9tb2RlKSB7DQo+Pj4gKwkJZGV2 X2VycihkZXYsICJJbmNvcnJlY3QgRFJEIGNvbmZpZ3VyYXRpb25cbiIpOw0KPj4+ICsJCXJldHVy biAtRUlOVkFMOw0KPj4+ICsJfQ0KPj4+ICsNCj4+PiArCWRyX21vZGUgPSBiZXN0X2RyX21vZGU7 DQo+Pj4gKw0KPj4+ICsJaWYgKGRyX21vZGUgPT0gVVNCX0RSX01PREVfT1RHIHx8IGRyX21vZGUg PT0gVVNCX0RSX01PREVfSE9TVCkgew0KPj4+ICsJCXJldCA9IGNkbnMzX2hvc3RfaW5pdChjZG5z KTsNCj4+PiArCQlpZiAocmV0KSB7DQo+Pj4gKwkJCWRldl9lcnIoZGV2LCAiSG9zdCBpbml0aWFs aXphdGlvbiBmYWlsZWQgd2l0aCAlZFxuIiwNCj4+PiArCQkJCXJldCk7DQo+Pj4gKwkJCWdvdG8g ZXJyOw0KPj4+ICsJCX0NCj4+PiArCX0NCj4+PiArDQo+Pj4gKwlpZiAoZHJfbW9kZSA9PSBVU0Jf RFJfTU9ERV9PVEcgfHwgZHJfbW9kZSA9PSBVU0JfRFJfTU9ERV9QRVJJUEhFUkFMKSB7DQo+Pj4g KwkJcmV0ID0gY2RuczNfZ2FkZ2V0X2luaXQoY2Rucyk7DQo+Pj4gKwkJaWYgKHJldCkgew0KPj4+ ICsJCQlkZXZfZXJyKGRldiwgIkRldmljZSBpbml0aWFsaXphdGlvbiBmYWlsZWQgd2l0aCAlZFxu IiwNCj4+PiArCQkJCXJldCk7DQo+Pj4gKwkJCWdvdG8gZXJyOw0KPj4+ICsJCX0NCj4+PiArCX0N Cj4+PiArDQo+Pj4gKwljZG5zLT5kZXNpcmVkX2RyX21vZGUgPSBkcl9tb2RlOw0KPj4+ICsJY2Ru cy0+ZHJfbW9kZSA9IGRyX21vZGU7DQo+Pj4gKwkvKg0KPj4+ICsJICogZHJfbW9kZSBjb3VsZCBi ZSBjaGFuZ2Ugc28gRFJEIG11c3QgdXBkYXRlIGNvbnRyb2xsZXINCj4+PiArCSAqIGNvbmZpZ3Vy YXRpb24NCj4+PiArCSAqLw0KPj4+ICsJcmV0ID0gY2RuczNfZHJkX3VwZGF0ZV9tb2RlKGNkbnMp Ow0KPj4+ICsJaWYgKHJldCkNCj4+PiArCQlnb3RvIGVycjsNCj4+PiArDQo+Pj4gKwljZG5zLT5y b2xlID0gY2RuczNfZ2V0X2luaXRpYWxfcm9sZShjZG5zKTsNCj4+PiArDQo+Pj4gKwlyZXQgPSBj ZG5zM19yb2xlX3N0YXJ0KGNkbnMsIGNkbnMtPnJvbGUpOw0KPj4+ICsJaWYgKHJldCkgew0KPj4+ ICsJCWRldl9lcnIoZGV2LCAiY2FuJ3Qgc3RhcnQgJXMgcm9sZVxuIiwNCj4+PiArCQkJY2RuczNf Z2V0X2N1cnJlbnRfcm9sZV9kcml2ZXIoY2RucyktPm5hbWUpOw0KPj4+ICsJCWdvdG8gZXJyOw0K Pj4+ICsJfQ0KPj4+ICsNCj4+PiArCXJldHVybiByZXQ7DQo+Pj4gK2VycjoNCj4+PiArCWNkbnMz X2V4aXRfcm9sZXMoY2Rucyk7DQo+Pj4gKwlyZXR1cm4gcmV0Ow0KPj4+ICt9DQo+Pj4gKw0KPj4+ ICsvKioNCj4+PiArICogY2RzbjNfZ2V0X3JlYWxfcm9sZSAtIGdldCByZWFsIHJvbGUgb2YgY29u dHJvbGxlciBiYXNlZCBvbiBoYXJkd2FyZSBzZXR0aW5ncy4NCj4+PiArICogQGNkbnM6IFBvaW50 ZXIgdG8gY2RuczMgc3RydWN0dXJlDQo+Pj4gKyAqDQo+Pj4gKyAqIFJldHVybnMgcm9sZQ0KPj4+ ICsgKi8NCj4+PiArZW51bSBjZG5zM19yb2xlcyBjZHNuM19nZXRfcmVhbF9yb2xlKHN0cnVjdCBj ZG5zMyAqY2RucykNCj4+PiArew0KPj4+ICsJZW51bSBjZG5zM19yb2xlcyByb2xlID0gQ0ROUzNf Uk9MRV9FTkQ7DQo+Pj4gKw0KPj4+ICsJaWYgKGNkbnMtPmN1cnJlbnRfZHJfbW9kZSA9PSBVU0Jf RFJfTU9ERV9PVEcpIHsNCj4+PiArCQlpZiAoY2RuczNfZ2V0X2lkKGNkbnMpKQ0KPj4+ICsJCQly b2xlID0gQ0ROUzNfUk9MRV9HQURHRVQ7DQo+Pj4gKwkJZWxzZQ0KPj4+ICsJCQlyb2xlID0gQ0RO UzNfUk9MRV9IT1NUOw0KPj4+ICsJfSBlbHNlIHsNCj4+PiArCQlpZiAoY2RuczNfaXNfaG9zdChj ZG5zKSkNCj4+PiArCQkJcm9sZSA9IENETlMzX1JPTEVfSE9TVDsNCj4+PiArCQlpZiAoY2RuczNf aXNfZGV2aWNlKGNkbnMpKQ0KPj4+ICsJCQlyb2xlID0gQ0ROUzNfUk9MRV9HQURHRVQ7DQo+Pj4g Kwl9DQo+Pj4gKw0KPj4+ICsJcmV0dXJuIHJvbGU7DQo+Pj4gK30NCj4+PiArDQo+Pj4gKy8qKg0K Pj4+ICsgKiBjZG5zM19yb2xlX3N3aXRjaCAtIHdvcmsgcXVldWUgaGFuZGxlciBmb3Igcm9sZSBz d2l0Y2gNCj4+PiArICoNCj4+PiArICogQHdvcms6IHdvcmsgcXVldWUgaXRlbSBzdHJ1Y3R1cmUN Cj4+PiArICoNCj4+PiArICogSGFuZGxlcyBiZWxvdyBldmVudHM6DQo+Pj4gKyAqIC0gUm9sZSBz d2l0Y2ggZm9yIGR1YWwtcm9sZSBkZXZpY2VzDQo+Pj4gKyAqIC0gQ0ROUzNfUk9MRV9HQURHRVQg PC0tPiBDRE5TM19ST0xFX0VORCBmb3IgcGVyaXBoZXJhbC1vbmx5IGRldmljZXMNCj4+PiArICov DQo+Pj4gK3N0YXRpYyB2b2lkIGNkbnMzX3JvbGVfc3dpdGNoKHN0cnVjdCB3b3JrX3N0cnVjdCAq d29yaykNCj4+PiArew0KPj4+ICsJZW51bSBjZG5zM19yb2xlcyByb2xlID0gQ0ROUzNfUk9MRV9F TkQ7DQo+Pj4gKwlzdHJ1Y3QgY2RuczNfcm9sZV9kcml2ZXIgKnJvbGVfZHJ2Ow0KPj4+ICsJZW51 bSBjZG5zM19yb2xlcyBjdXJyZW50X3JvbGU7DQo+Pj4gKwlzdHJ1Y3QgY2RuczMgKmNkbnM7DQo+ Pj4gKwlpbnQgcmV0ID0gMDsNCj4+PiArDQo+Pj4gKwljZG5zID0gY29udGFpbmVyX29mKHdvcmss IHN0cnVjdCBjZG5zMywgcm9sZV9zd2l0Y2hfd3EpOw0KPj4+ICsNCj4+PiArCS8qIER1cmluZyBz d2l0Y2hpbmcgY2Rucy0+cm9sZSBjYW4gYmUgZGlmZmVyZW50IHRoZW4gcm9sZSAqLw0KPj4+ICsJ cm9sZSA9IGNkc24zX2dldF9yZWFsX3JvbGUoY2Rucyk7DQo+Pj4gKw0KPj4+ICsJcm9sZV9kcnYg PSBjZG5zM19nZXRfY3VycmVudF9yb2xlX2RyaXZlcihjZG5zKTsNCj4+PiArDQo+Pj4gKwlwbV9y dW50aW1lX2dldF9zeW5jKGNkbnMtPmRldik7DQo+Pj4gKw0KPj4+ICsJLyogRGlzYWJsZSBjdXJy ZW50IHJvbGUuIFRoaXMgc3RhdGUgY2FuIGJlIGZvcmNlZCBmcm9tIHVzZXIgc3BhY2UuICovDQo+ Pj4gKwlpZiAoY2Rucy0+ZGVidWdfZGlzYWJsZSAmJiByb2xlX2Rydi0+c3RhdGUgPT0gQ0ROUzNf Uk9MRV9TVEFURV9BQ1RJVkUpIHsNCj4+PiArCQljZG5zM19yb2xlX3N0b3AoY2Rucyk7DQo+Pj4g KwkJZ290byBleGl0Ow0KPj4+ICsJfQ0KPj4+ICsNCj4+PiArCS8qIERvIG5vdGhpbmcgaWYgbm90 aGluZyBjaGFuZ2VkICovDQo+Pj4gKwlpZiAoY2Rucy0+cm9sZSA9PSByb2xlICYmIHJvbGVfZHJ2 LT5zdGF0ZSA9PSBDRE5TM19ST0xFX1NUQVRFX0FDVElWRSkNCj4+PiArCQlnb3RvIGV4aXQ7DQo+ Pj4gKw0KPj4+ICsJY2RuczNfcm9sZV9zdG9wKGNkbnMpOw0KPj4+ICsNCj4+PiArCXJvbGUgPSBj ZHNuM19nZXRfcmVhbF9yb2xlKGNkbnMpOw0KPj4+ICsNCj4+PiArCWN1cnJlbnRfcm9sZSA9IGNk bnMtPnJvbGU7DQo+Pj4gKwlkZXZfZGJnKGNkbnMtPmRldiwgIlN3aXRjaGluZyByb2xlIik7DQo+ Pj4gKw0KPj4+ICsJcmV0ID0gY2RuczNfcm9sZV9zdGFydChjZG5zLCByb2xlKTsNCj4+PiArCWlm IChyZXQpIHsNCj4+PiArCQkvKiBCYWNrIHRvIGN1cnJlbnQgcm9sZSAqLw0KPj4+ICsJCWRldl9l cnIoY2Rucy0+ZGV2LCAic2V0ICVkIGhhcyBmYWlsZWQsIGJhY2sgdG8gJWRcbiIsDQo+Pj4gKwkJ CXJvbGUsIGN1cnJlbnRfcm9sZSk7DQo+Pj4gKwkJY2RuczNfcm9sZV9zdGFydChjZG5zLCBjdXJy ZW50X3JvbGUpOw0KPj4+ICsJfQ0KPj4+ICtleGl0Og0KPj4+ICsJcG1fcnVudGltZV9wdXRfc3lu YyhjZG5zLT5kZXYpOw0KPj4+ICt9DQo+Pj4gKw0KPj4+ICsvKioNCj4+PiArICogY2RuczNfcHJv YmUgLSBwcm9iZSBmb3IgY2RuczMgY29yZSBkZXZpY2UNCj4+PiArICogQHBkZXY6IFBvaW50ZXIg dG8gY2RuczMgY29yZSBwbGF0Zm9ybSBkZXZpY2UNCj4+PiArICoNCj4+PiArICogUmV0dXJucyAw IG9uIHN1Y2Nlc3Mgb3RoZXJ3aXNlIG5lZ2F0aXZlIGVycm5vDQo+Pj4gKyAqLw0KPj4+ICtzdGF0 aWMgaW50IGNkbnMzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+Pj4gK3sN Cj4+PiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7DQo+Pj4gKwlzdHJ1Y3QgcmVz b3VyY2UJKnJlczsNCj4+PiArCXN0cnVjdCBjZG5zMyAqY2RuczsNCj4+PiArCXZvaWQgX19pb21l bSAqcmVnczsNCj4+PiArCWludCByZXQ7DQo+Pj4gKw0KPj4+ICsJY2RucyA9IGRldm1fa3phbGxv YyhkZXYsIHNpemVvZigqY2RucyksIEdGUF9LRVJORUwpOw0KPj4+ICsJaWYgKCFjZG5zKQ0KPj4+ ICsJCXJldHVybiAtRU5PTUVNOw0KPj4+ICsNCj4+PiArCWNkbnMtPmRldiA9IGRldjsNCj4+PiAr DQo+Pj4gKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBjZG5zKTsNCj4+PiArDQo+Pj4gKwly ZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOw0KPj4+ ICsJaWYgKCFyZXMpIHsNCj4+PiArCQlkZXZfZXJyKGRldiwgIm1pc3NpbmcgSVJRXG4iKTsNCj4+ PiArCQlyZXR1cm4gLUVOT0RFVjsNCj4+PiArCX0NCj4+PiArCWNkbnMtPmlycSA9IHJlcy0+c3Rh cnQ7DQo+Pj4gKw0KPj4+ICsJY2Rucy0+eGhjaV9yZXNbMF0gPSAqcmVzOw0KPj4+ICsNCj4+PiAr CS8qDQo+Pj4gKwkgKiBSZXF1ZXN0IG1lbW9yeSByZWdpb24NCj4+PiArCSAqIHJlZ2lvbi0wOiB4 SENJDQo+Pj4gKwkgKiByZWdpb24tMTogUGVyaXBoZXJhbA0KPj4+ICsJICogcmVnaW9uLTI6IE9U RyByZWdpc3RlcnMNCj4+PiArCSAqLw0KPj50aGUgY29tbWVudCBzaG91bGQgYmUgbW9kaWZpZWQg b3IgcmVtb3ZlZCBpZiBub3QgbmVjZXNzYXJ5IHdoZW4gY29kZXMNCj4+Y2hhbmdlZC4NCj4NCj5Z ZXMsIG5vdyBpdCdzIG5vdCBuZWNlc3NhcnkuDQo+DQo+Pj4gKwlyZXMgPSBwbGF0Zm9ybV9nZXRf cmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAieGhjaSIpOw0KPj4+ICsJaWYg KCFyZXMpDQo+Pj4gKwkJcmV0dXJuIC1FTlhJTzsNCj4+PiArDQo+Pj4gKwljZG5zLT54aGNpX3Jl c1sxXSA9ICpyZXM7DQo+Pj4gKw0KPj4+ICsJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5 bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgImRldiIpOw0KPj4+ICsJcmVncyA9IGRldm1faW9y ZW1hcF9yZXNvdXJjZShkZXYsIHJlcyk7DQo+Pj4gKwlpZiAoSVNfRVJSKHJlZ3MpKQ0KPj4+ICsJ CXJldHVybiBQVFJfRVJSKHJlZ3MpOw0KPj4+ICsJY2Rucy0+ZGV2X3JlZ3MJPSByZWdzOw0KPj4+ ICsNCj4+PiArCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNP VVJDRV9NRU0sICJvdGciKTsNCj4+PiArCWlmICghcmVzKQ0KPj4+ICsJCXJldHVybiAtRU5YSU87 DQo+Pj4gKw0KPj4+ICsJY2Rucy0+b3RnX3JlcyA9ICpyZXM7DQo+Pj4gKw0KPj4+ICsJbXV0ZXhf aW5pdCgmY2Rucy0+bXV0ZXgpOw0KPj4+ICsNCj4+PiArCWNkbnMtPnBoeSA9IGRldm1fcGh5X29w dGlvbmFsX2dldChkZXYsICJjZG5zMyx1c2JwaHkiKTsNCj4+PiArCWlmIChJU19FUlIoY2Rucy0+ cGh5KSkNCj4+PiArCQlyZXR1cm4gUFRSX0VSUihjZG5zLT5waHkpOw0KPj4+ICsNCj4+PiArCXBo eV9pbml0KGNkbnMtPnBoeSk7DQo+PmNoZWNrIHRoZSByZXR1cm4gdmFsdWU/IGFuZA0KPj5JdCdz IGJldHRlciB0byBjYWxsIHBoeV9wb3dlcl9vbigpIGhlcmUgZXZlbiBpZiB0aGUgcGh5IGRyaXZl ciBkb2Vzbid0DQo+PnByb3ZpZGUgcG93ZXJfb24oKQ0KPg0KPkRyaXZlciBkb2Vzbid0IG5lZWQg dG8gY2hlY2sgcmV0dXJuIHZhbHVlIGluIHRoaXMgY2FzZS4gSXQgd2FzIGRpc2N1c3NlZCBzb21l IHRpbWUgYWdvLg0KPg0KPj4NCj4+PiArDQo+Pj4gKwlJTklUX1dPUksoJmNkbnMtPnJvbGVfc3dp dGNoX3dxLCBjZG5zM19yb2xlX3N3aXRjaCk7DQo+Pj4gKw0KPj4+ICsJcmV0ID0gY2RuczNfZHJk X2luaXQoY2Rucyk7DQo+Pj4gKwlpZiAocmV0KQ0KPj4+ICsJCWdvdG8gZXJyOw0KPj4+ICsNCj4+ PiArCXJldCA9IGNkbnMzX2NvcmVfaW5pdF9yb2xlKGNkbnMpOw0KPj4+ICsJaWYgKHJldCkNCj4+ PiArCQlnb3RvIGVycjsNCj4+PiArDQo+Pj4gKwljZG5zM19kZWJ1Z2ZzX2luaXQoY2Rucyk7DQo+ Pj4gKwlkZXZpY2Vfc2V0X3dha2V1cF9jYXBhYmxlKGRldiwgdHJ1ZSk7DQo+Pj4gKwlwbV9ydW50 aW1lX3NldF9hY3RpdmUoZGV2KTsNCj4+PiArCXBtX3J1bnRpbWVfZW5hYmxlKGRldik7DQo+Pj4g Kw0KPj4+ICsJLyoNCj4+PiArCSAqIFRoZSBjb250cm9sbGVyIG5lZWRzIGxlc3MgdGltZSBiZXR3 ZWVuIGJ1cyBhbmQgY29udHJvbGxlciBzdXNwZW5kLA0KPj4+ICsJICogYW5kIHdlIGFsc28gbmVl ZHMgYSBzbWFsbCBkZWxheSB0byBhdm9pZCBmcmVxdWVudGx5IGVudGVyaW5nIGxvdw0KPj4+ICsJ ICogcG93ZXIgbW9kZS4NCj4+PiArCSAqLw0KPj4+ICsJcG1fcnVudGltZV9zZXRfYXV0b3N1c3Bl bmRfZGVsYXkoZGV2LCAyMCk7DQo+Pj4gKwlwbV9ydW50aW1lX21hcmtfbGFzdF9idXN5KGRldik7 DQo+Pj4gKwlwbV9ydW50aW1lX3VzZV9hdXRvc3VzcGVuZChkZXYpOw0KPj4+ICsJZGV2X2RiZyhk ZXYsICJDYWRlbmNlIFVTQjMgY29yZTogcHJvYmUgc3VjY2VlZFxuIik7DQo+Pj4gKw0KPj4+ICsJ cmV0dXJuIDA7DQo+Pj4gKw0KPj4+ICtlcnI6DQo+Pj4gKwlwaHlfZXhpdChjZG5zLT5waHkpOw0K Pj4+ICsJcmV0dXJuIHJldDsNCj4+PiArfQ0KPj4+ICsNCj4+PiArLyoqDQo+Pj4gKyAqIGNkbnMz X3JlbW92ZSAtIHVuYmluZCBkcmQgZHJpdmVyIGFuZCBjbGVhbiB1cA0KPj4+ICsgKiBAcGRldjog UG9pbnRlciB0byBMaW51eCBwbGF0Zm9ybSBkZXZpY2UNCj4+PiArICoNCj4+PiArICogUmV0dXJu cyAwIG9uIHN1Y2Nlc3Mgb3RoZXJ3aXNlIG5lZ2F0aXZlIGVycm5vDQo+Pj4gKyAqLw0KPj4+ICtz dGF0aWMgaW50IGNkbnMzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KPj4+ ICt7DQo+Pj4gKwlzdHJ1Y3QgY2RuczMgKmNkbnMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2 KTsNCj4+PiArDQo+Pj4gKwlwbV9ydW50aW1lX2dldF9zeW5jKCZwZGV2LT5kZXYpOw0KPj4+ICsJ cG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOw0KPj4+ICsJcG1fcnVudGltZV9wdXRfbm9p ZGxlKCZwZGV2LT5kZXYpOw0KPj4+ICsJY2RuczNfZGVidWdmc19leGl0KGNkbnMpOw0KPj4+ICsJ Y2RuczNfZXhpdF9yb2xlcyhjZG5zKTsNCj4+PiArCXBoeV9leGl0KGNkbnMtPnBoeSk7DQo+Pj4g KwlyZXR1cm4gMDsNCj4+PiArfQ0KPj4+ICsNCj4+PiArI2lmZGVmIENPTkZJR19PRg0KPj4+ICtz dGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBvZl9jZG5zM19tYXRjaFtdID0gew0KPj4+ ICsJeyAuY29tcGF0aWJsZSA9ICJjZG5zLHVzYjMtMS4wLjAiIH0sDQo+Pj4gKwl7IC5jb21wYXRp YmxlID0gImNkbnMsdXNiMy0xLjAuMSIgfSwNCj4+PiArCXsgfSwNCj4+PiArfTsNCj4+PiArTU9E VUxFX0RFVklDRV9UQUJMRShvZiwgb2ZfY2RuczNfbWF0Y2gpOw0KPj4+ICsjZW5kaWYNCj4+PiAr DQo+Pj4gK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGNkbnMzX2RyaXZlciA9IHsNCj4+ PiArCS5wcm9iZQkJPSBjZG5zM19wcm9iZSwNCj4+PiArCS5yZW1vdmUJCT0gY2RuczNfcmVtb3Zl LA0KPj4+ICsJLmRyaXZlcgkJPSB7DQo+Pj4gKwkJLm5hbWUJPSAiY2Rucy11c2IzIiwNCj4+PiAr CQkub2ZfbWF0Y2hfdGFibGUJPSBvZl9tYXRjaF9wdHIob2ZfY2RuczNfbWF0Y2gpLA0KPj4+ICsJ fSwNCj4+PiArfTsNCj4+PiArDQo+Pj4gK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoY2RuczNfZHJp dmVyKTsNCj4+PiArDQo+Pj4gK01PRFVMRV9BTElBUygicGxhdGZvcm06Y2RuczMiKTsNCj4+PiAr TU9EVUxFX0FVVEhPUigiUGF3ZWwgTGFzemN6YWsgPHBhd2VsbEBjYWRlbmNlLmNvbT4iKTsNCj4+ PiArTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOw0KPj4+ICtNT0RVTEVfREVTQ1JJUFRJT04oIkNh ZGVuY2UgVVNCMyBEUkQgQ29udHJvbGxlciBEcml2ZXIiKTsNCj4+PiBkaWZmIC0tZ2l0IGEvZHJp dmVycy91c2IvY2RuczMvY29yZS5oIGIvZHJpdmVycy91c2IvY2RuczMvY29yZS5oDQo+Pj4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQNCj4+PiBpbmRleCAwMDAwMDAwMDAwMDAuLmZiNGIzOTIwNjE1OA0K Pj4+IC0tLSAvZGV2L251bGwNCj4+PiArKysgYi9kcml2ZXJzL3VzYi9jZG5zMy9jb3JlLmgNCj4+ PiBAQCAtMCwwICsxLDExNiBAQA0KPj4+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMCAqLw0KPj4+ICsvKg0KPj4+ICsgKiBDYWRlbmNlIFVTQlNTIERSRCBIZWFkZXIgRmlsZS4N Cj4+PiArICoNCj4+PiArICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggTlhQDQo+Pj4gKyAqIENv cHlyaWdodCAoQykgMjAxOCBDYWRlbmNlLg0KPj4+ICsgKg0KPj4+ICsgKiBBdXRob3JzOiBQZXRl ciBDaGVuIDxwZXRlci5jaGVuQG54cC5jb20+DQo+Pj4gKyAqICAgICAgICAgIFBhd2VsIExhc3pj emFrIDxwYXdlbGxAY2FkZW5jZS5jb20+DQo+Pj4gKyAqLw0KPj4+ICsjaW5jbHVkZSA8bGludXgv dXNiL290Zy5oPg0KPj4+ICsNCj4+PiArI2lmbmRlZiBfX0xJTlVYX0NETlMzX0NPUkVfSA0KPj4+ ICsjZGVmaW5lIF9fTElOVVhfQ0ROUzNfQ09SRV9IDQo+Pj4gKw0KPj4+ICtzdHJ1Y3QgY2RuczM7 DQo+Pj4gK2VudW0gY2RuczNfcm9sZXMgew0KPj4+ICsJQ0ROUzNfUk9MRV9IT1NUID0gMCwNCj4+ PiArCUNETlMzX1JPTEVfR0FER0VULA0KPj4+ICsJQ0ROUzNfUk9MRV9FTkQsDQo+Pj4gK307DQo+ Pj4gKw0KPj4+ICsvKioNCj4+PiArICogc3RydWN0IGNkbnMzX3JvbGVfZHJpdmVyIC0gaG9zdC9n YWRnZXQgcm9sZSBkcml2ZXINCj4+PiArICogQHN0YXJ0OiBzdGFydCB0aGlzIHJvbGUNCj4+PiAr ICogQHN0b3A6IHN0b3AgdGhpcyByb2xlDQo+Pj4gKyAqIEBzdXNwZW5kOiBzdXNwZW5kIGNhbGxi YWNrIGZvciB0aGlzIHJvbGUNCj4+PiArICogQHJlc3VtZTogcmVzdW1lIGNhbGxiYWNrIGZvciB0 aGlzIHJvbGUNCj4+PiArICogQGlycTogaXJxIGhhbmRsZXIgZm9yIHRoaXMgcm9sZQ0KPj5ubyBp cnEgbWVtYmVyLA0KPj4+ICsgKiBAbmFtZTogcm9sZSBuYW1lIHN0cmluZyAoaG9zdC9nYWRnZXQp DQo+Pj4gKyAqIEBzdGF0ZTogY3VycmVudCBzdGF0ZQ0KPj4+ICsgKi8NCj4+PiArc3RydWN0IGNk bnMzX3JvbGVfZHJpdmVyIHsNCj4+PiArCWludCAoKnN0YXJ0KShzdHJ1Y3QgY2RuczMgKmNkbnMp Ow0KPj4+ICsJdm9pZCAoKnN0b3ApKHN0cnVjdCBjZG5zMyAqY2Rucyk7DQo+Pj4gKwlpbnQgKCpz dXNwZW5kKShzdHJ1Y3QgY2RuczMgKmNkbnMsIGJvb2wgZG9fd2FrZXVwKTsNCj4+PiArCWludCAo KnJlc3VtZSkoc3RydWN0IGNkbnMzICpjZG5zLCBib29sIGhpYmVybmF0ZWQpOw0KPj4+ICsJY29u c3QgY2hhciAqbmFtZTsNCj4+PiArI2RlZmluZSBDRE5TM19ST0xFX1NUQVRFX0lOQUNUSVZFCTAN Cj4+PiArI2RlZmluZSBDRE5TM19ST0xFX1NUQVRFX0FDVElWRQkJMQ0KPj4+ICsJaW50IHN0YXRl Ow0KPj4+ICt9Ow0KPj4+ICsNCj4+PiArI2RlZmluZSBDRE5TM19YSENJX1JFU09VUkNFU19OVU0J Mg0KPj4+ICsvKioNCj4+PiArICogc3RydWN0IGNkbnMzIC0gUmVwcmVzZW50YXRpb24gb2YgQ2Fk ZW5jZSBVU0IzIERSRCBjb250cm9sbGVyLg0KPj4+ICsgKiBAZGV2OiBwb2ludGVyIHRvIENhZGVu Y2UgZGV2aWNlIHN0cnVjdA0KPj4+ICsgKiBAeGhjaV9yZWdzOiBwb2ludGVyIHRvIGJhc2Ugb2Yg eGhjaSByZWdpc3RlcnMNCj4+PiArICogQHhoY2lfcmVzOiB0aGUgcmVzb3VyY2UgZm9yIHhoY2kN Cj4+PiArICogQGRldl9yZWdzOiBwb2ludGVyIHRvIGJhc2Ugb2YgZGV2IHJlZ2lzdGVycw0KPj4+ ICsgKiBAb3RnX3JlZ3M6IHBvaW50ZXIgdG8gYmFzZSBvZiBvdGcgcmVnaXN0ZXJzDQo+Pm5vdCBw b2ludGVyDQo+DQo+V2h5ID8NCj5zdHJ1Y3QgY2RuczNfb3RnX2NvbW1vbl9yZWdzCSpvdGdfcmVn czsNCj4NCj5CdXQgSSBmb3Jnb3Q6DQo+ICogQG90Z19yZXM6IHRoZSByZXNvdXJjZSBmb3Igb3Rn DQo+ICogQG90Z192MF9yZWdzOiBwb2ludGVyIHRvIGJhc2Ugb2YgdjAgb3RnIHJlZ2lzdGVycw0K PiAqIEBvdGdfdjFfcmVnczogcG9pbnRlciB0byBiYXNlIG9mIHYxIG90ZyByZWdpc3RlcnMNCj4N Cj4+PiArICogQGlycTogaXJxIG51bWJlciBmb3IgY29udHJvbGxlcg0KPj4+ICsgKiBAcm9sZXM6 IGFycmF5IG9mIHN1cHBvcnRlZCByb2xlcyBmb3IgdGhpcyBjb250cm9sbGVyDQo+Pj4gKyAqIEBy b2xlOiBjdXJyZW50IHJvbGUNCj4+PiArICogQGhvc3RfZGV2OiB0aGUgY2hpbGQgaG9zdCBkZXZp Y2UgcG9pbnRlciBmb3IgY2RuczMgY29yZQ0KPj4+ICsgKiBAZ2FkZ2V0X2RldjogdGhlIGNoaWxk IGdhZGdldCBkZXZpY2UgcG9pbnRlciBmb3IgY2RuczMgY29yZQ0KPj4+ICsgKiBAdXNiOiBwaHkg Zm9yIHRoaXMgY29udHJvbGxlcg0KPj4+ICsgKiBAcm9sZV9zd2l0Y2hfd3E6IHdvcmsgcXVldWUg aXRlbSBmb3Igcm9sZSBzd2l0Y2gNCj4+PiArICogQGluX2xwbTogdGhlIGNvbnRyb2xsZXIgaW4g bG93IHBvd2VyIG1vZGUNCj4+PiArICogQHdha2V1cF9pbnQ6IHRoZSB3YWtldXAgaW50ZXJydXB0 DQo+Pj4gKyAqIEBtdXRleDogdGhlIG11dGV4IGZvciBjb25jdXJyZW50IGNvZGUgYXQgZHJpdmVy DQo+Pj4gKyAqIEBkcl9tb2RlOiBzdXBwb3J0ZWQgbW9kZSBvZiBvcGVyYXRpb24gaXQgY2FuIGJl IG9ubHkgSG9zdCwgb25seSBEZXZpY2UNCj4+PiArICogICAgICAgICAgIG9yIE9URyBtb2RlIHRo YXQgYWxsb3cgdG8gc3dpdGNoIGJldHdlZW4gRGV2aWNlIGFuZCBIb3N0IG1vZGUuDQo+Pj4gKyAq ICAgICAgICAgICBUaGlzIGZpZWxkIGJhc2VkIG9uIGZpcm13YXJlIHNldHRpbmcsIGtlcm5lbCBj b25maWd1cmF0aW9uDQo+Pj4gKyAqICAgICAgICAgICBhbmQgaGFyZHdhcmUgY29uZmlndXJhdGlv bi4NCj4+PiArICogQGN1cnJlbnRfZHJfbW9kZTogY3VycmVudCBtb2RlIG9mIG9wZXJhdGlvbiB3 aGVuIGluIGR1YWwtcm9sZSBtb2RlDQo+Pj4gKyAqIEBkZXNpcmVkX2RyX21vZGU6IGRlc2lyZWQg bW9kZSBvZiBvcGVyYXRpb24gd2hlbiBpbiBkdWFsLXJvbGUgbW9kZS4NCj4+PiArICogICAgICAg ICAgIFRoaXMgdmFsdWUgY2FuIGJlIGNoYW5nZWQgZHVyaW5nIHJ1bnRpbWUuDQo+Pj4gKyAqICAg ICAgICAgICBBdmFpbGFibGUgb3B0aW9ucyBkZXBlbmRzIG9uICBkcl9tb2RlOg0KPj4+ICsgKiAg ICAgICAgICAgZHJfbW9kZSAgICAgICAgICAgICAgICAgfCAgZGVzaXJlZF9kcl9tb2RlIGFuZCBj dXJyZW50X2RyX21vZGUNCj4+PiArICogICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4+PiArICogICAgICAg ICAgIFVTQl9EUl9NT0RFX0hPU1QgICAgICAgIHwgb25seSBVU0JfRFJfTU9ERV9IT1NUDQo+Pj4g KyAqICAgICAgICAgICBVU0JfRFJfTU9ERV9QRVJJUEhFUkFMICB8IG9ubHkgVVNCX0RSX01PREVf UEVSSVBIRVJBTA0KPj4+ICsgKiAgICAgICAgICAgVVNCX0RSX01PREVfT1RHICAgICAgICAgfCBv bmx5IFVTQl9EUl9NT0RFX0hPU1QNCj4+PiArICogICAgICAgICAgIFVTQl9EUl9NT0RFX09URyAg ICAgICAgIHwgb25seSBVU0JfRFJfTU9ERV9QRVJJUEhFUkFMDQo+Pj4gKyAqICAgICAgICAgICBV U0JfRFJfTU9ERV9PVEcgICAgICAgICB8IFVTQl9EUl9NT0RFX09URw0KPj4+ICsgKg0KPj4+ICsg KiAgICAgICAgICAgRGVzaXJlZF9kcl9yb2xlIGNhbiBiZSBjaGFuZ2VkIGJ5IG1lYW5zIG9mIGRl YnVnZnMuDQo+Pj4gKyAqIEByb290OiBkZWJ1Z2ZzIHJvb3QgZm9sZGVyIHBvaW50ZXINCj4+PiAr ICogQGRlYnVnX2Rpc2FibGU6DQo+Pj4gKyAqLw0KPj4+ICtzdHJ1Y3QgY2RuczMgew0KPj4+ICsJ c3RydWN0IGRldmljZQkJCSpkZXY7DQo+Pj4gKwl2b2lkIF9faW9tZW0JCQkqeGhjaV9yZWdzOw0K Pj4+ICsJc3RydWN0IHJlc291cmNlCQkJeGhjaV9yZXNbQ0ROUzNfWEhDSV9SRVNPVVJDRVNfTlVN XTsNCj4+PiArCXN0cnVjdCBjZG5zM191c2JfcmVncyBfX2lvbWVtCSpkZXZfcmVnczsNCj4+PiAr DQo+Pj4gKwlzdHJ1Y3QgcmVzb3VyY2UJCQlvdGdfcmVzOw0KPj4+ICsJc3RydWN0IGNkbnMzX290 Z19sZWdhY3lfcmVncwkqb3RnX3YwX3JlZ3M7DQo+Pj4gKwlzdHJ1Y3QgY2RuczNfb3RnX3JlZ3MJ CSpvdGdfdjFfcmVnczsNCj4+PiArCXN0cnVjdCBjZG5zM19vdGdfY29tbW9uX3JlZ3MJKm90Z19y ZWdzOw0KPj4+ICsjZGVmaW5lIENETlMzX0NPTlRST0xMRVJfVjAJMA0KPj4+ICsjZGVmaW5lIENE TlMzX0NPTlRST0xMRVJfVjEJMQ0KPj4+ICsJdTMyCQkJCXZlcnNpb247DQo+Pj4gKw0KPj4+ICsJ aW50CQkJCWlycTsNCj4+PiArCXN0cnVjdCBjZG5zM19yb2xlX2RyaXZlcgkqcm9sZXNbQ0ROUzNf Uk9MRV9FTkRdOw0KPj4+ICsJZW51bSBjZG5zM19yb2xlcwkJcm9sZTsNCj4+PiArCXN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UJCSpob3N0X2RldjsNCj4+PiArCXN0cnVjdCBjZG5zM19kZXZpY2UJCSpn YWRnZXRfZGV2Ow0KPj4+ICsJc3RydWN0IHBoeQkJCSpwaHk7DQo+PkRvZXMgdGhlIHNpbmdsZSBw aHkgc3VwcG9ydCBib3RoIEhTIGFuZCBTUz8NCj4+PiArCXN0cnVjdCB3b3JrX3N0cnVjdAkJcm9s ZV9zd2l0Y2hfd3E7DQo+Pj4gKwlpbnQJCQkJaW5fbHBtOjE7DQo+Pj4gKwlpbnQJCQkJd2FrZXVw X2ludDoxOw0KPj4+ICsJLyogbXV0ZXh0IHVzZWQgaW4gd29ya3F1ZXVlKi8NCj4+PiArCXN0cnVj dCBtdXRleAkJCW11dGV4Ow0KPj4+ICsJZW51bSB1c2JfZHJfbW9kZQkJZHJfbW9kZTsNCj4+PiAr CWVudW0gdXNiX2RyX21vZGUJCWN1cnJlbnRfZHJfbW9kZTsNCj4+PiArCWVudW0gdXNiX2RyX21v ZGUJCWRlc2lyZWRfZHJfbW9kZTsNCj4+PiArCXN0cnVjdCBkZW50cnkJCQkqcm9vdDsNCj4+PiAr CWludAkJCQlkZWJ1Z19kaXNhYmxlOjE7DQo+Pj4gK307DQo+Pj4gKw0KPj4+ICt2b2lkIGNkbnMz X3JvbGVfc3RvcChzdHJ1Y3QgY2RuczMgKmNkbnMpOw0KPj4+ICsNCj4+PiArI2VuZGlmIC8qIF9f TElOVVhfQ0ROUzNfQ09SRV9IICovDQo+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NkbnMz L2RlYnVnLmggYi9kcml2ZXJzL3VzYi9jZG5zMy9kZWJ1Zy5oDQo+Pj4gbmV3IGZpbGUgbW9kZSAx MDA2NDQNCj4+PiBpbmRleCAwMDAwMDAwMDAwMDAuLjE5MjllZGIzYTUyMQ0KPj4+IC0tLSAvZGV2 L251bGwNCj4+PiArKysgYi9kcml2ZXJzL3VzYi9jZG5zMy9kZWJ1Zy5oDQo+Pj4gQEAgLTAsMCAr MSwxNjggQEANCj4+PiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8NCj4+ PiArLyoNCj4+PiArICogQ2FkZW5jZSBVU0JTUyBEUkQgRHJpdmVyLg0KPj4+ICsgKiBEZWJ1ZyBo ZWFkZXIgZmlsZS4NCj4+PiArICoNCj4+PiArICogQ29weXJpZ2h0IChDKSAyMDE4IENhZGVuY2Uu DQo+Pj4gKyAqDQo+Pj4gKyAqIEF1dGhvcjogUGF3ZWwgTGFzemN6YWsgPHBhd2VsbEBjYWRlbmNl LmNvbT4NCj4+PiArICovDQo+Pj4gKyNpZm5kZWYgX19MSU5VWF9DRE5TM19ERUJVRw0KPj4+ICsj ZGVmaW5lIF9fTElOVVhfQ0ROUzNfREVCVUcNCj4+PiArDQo+Pj4gKyNpbmNsdWRlICJjb3JlLmgi DQo+Pj4gKw0KPj4+ICtzdGF0aWMgaW5saW5lIGNoYXIgKmNkbnMzX2RlY29kZV91c2JfaXJxKGNo YXIgKnN0ciwNCj4+PiArCQkJCQkgZW51bSB1c2JfZGV2aWNlX3NwZWVkIHNwZWVkLA0KPj4+ICsJ CQkJCSB1MzIgdXNiX2lzdHMpDQo+Pj4gK3sNCj4+PiArCWludCByZXQ7DQo+Pj4gKw0KPj4+ICsJ cmV0ID0gc3ByaW50ZihzdHIsICJJUlEgJTA4eCA9ICIsIHVzYl9pc3RzKTsNCj4+PiArDQo+Pj4g KwlpZiAodXNiX2lzdHMgJiAoVVNCX0lTVFNfQ09OMkkgfCBVU0JfSVNUU19DT05JKSkgew0KPj4+ ICsJCXJldCArPSBzcHJpbnRmKHN0ciArIHJldCwgIkNvbm5lY3Rpb24gJXNcbiIsDQo+Pj4gKwkJ CSAgICAgICB1c2Jfc3BlZWRfc3RyaW5nKHNwZWVkKSk7DQo+Pj4gKwl9DQo+Pj4gKwlpZiAodXNi X2lzdHMgJiBVU0JfSVNUU19DT04ySSB8fCB1c2JfaXN0cyAmIFVTQl9JU1RTX0NPTkkpDQo+Pj4g KwkJcmV0ICs9IHNwcmludGYoc3RyICsgcmV0LCAiRGlzY29ubmVjdGlvbiAiKTsNCj4+PiArCWlm ICh1c2JfaXN0cyAmIFVTQl9JU1RTX0wyRU5USSkNCj4+PiArCQlyZXQgKz0gc3ByaW50ZihzdHIg KyByZXQsICJzdXNwZW5kZWQgIik7DQo+Pj4gKw0KPj4+ICsJaWYgKHVzYl9pc3RzICYgVVNCX0lT VFNfTDJFWFRJKQ0KPj4+ICsJCXJldCArPSBzcHJpbnRmKHN0ciArIHJldCwgIkwyIGV4aXQgIik7 DQo+Pj4gKwlpZiAodXNiX2lzdHMgJiBVU0JfSVNUU19VM0VYVEkpDQo+Pj4gKwkJcmV0ICs9IHNw cmludGYoc3RyICsgcmV0LCAiVTMgZXhpdCAiKTsNCj4+PiArCWlmICh1c2JfaXN0cyAmIFVTQl9J U1RTX1VXUkVTSSkNCj4+PiArCQlyZXQgKz0gc3ByaW50ZihzdHIgKyByZXQsICJXYXJtIFJlc2V0 ICIpOw0KPj4+ICsJaWYgKHVzYl9pc3RzICYgVVNCX0lTVFNfVUhSRVNJKQ0KPj4+ICsJCXJldCAr PSBzcHJpbnRmKHN0ciArIHJldCwgIkhvdCBSZXNldCAiKTsNCj4+PiArCWlmICh1c2JfaXN0cyAm IFVTQl9JU1RTX1UyUkVTSSkNCj4+PiArCQlyZXQgKz0gc3ByaW50ZihzdHIgKyByZXQsICJSZXNl dCIpOw0KPj4+ICsNCj4+PiArCXJldHVybiBzdHI7DQo+Pj4gK30NCj4+PiArDQo+Pj4gK3N0YXRp YyBpbmxpbmUgIGNoYXIgKmNkbnMzX2RlY29kZV9lcF9pcnEoY2hhciAqc3RyLA0KPj4+ICsJCQkJ CSB1MzIgZXBfc3RzLA0KPj4+ICsJCQkJCSBjb25zdCBjaGFyICplcF9uYW1lKQ0KPj4+ICt7DQo+ Pj4gKwlpbnQgcmV0Ow0KPj4+ICsNCj4+PiArCXJldCA9IHNwcmludGYoc3RyLCAiSVJRIGZvciAl czogJTA4eCAiLCBlcF9uYW1lLCBlcF9zdHMpOw0KPj4+ICsNCj4+PiArCWlmIChlcF9zdHMgJiBF UF9TVFNfU0VUVVApDQo+Pj4gKwkJcmV0ICs9IHNwcmludGYoc3RyICsgcmV0LCAiU0VUVVAgIik7 DQo+Pj4gKwlpZiAoZXBfc3RzICYgRVBfU1RTX0lPQykNCj4+PiArCQlyZXQgKz0gc3ByaW50Zihz dHIgKyByZXQsICJJT0MgIik7DQo+Pj4gKwlpZiAoZXBfc3RzICYgRVBfU1RTX0lTUCkNCj4+PiAr CQlyZXQgKz0gc3ByaW50ZihzdHIgKyByZXQsICJJU1AgIik7DQo+Pj4gKwlpZiAoZXBfc3RzICYg RVBfU1RTX0RFU0NNSVMpDQo+Pj4gKwkJcmV0ICs9IHNwcmludGYoc3RyICsgcmV0LCAiREVTQ01J UyAiKTsNCj4+PiArCWlmIChlcF9zdHMgJiBFUF9TVFNfU1RSRUFNUikNCj4+PiArCQlyZXQgKz0g c3ByaW50ZihzdHIgKyByZXQsICJTVFJFQU1SICIpOw0KPj4+ICsJaWYgKGVwX3N0cyAmIEVQX1NU U19NRF9FWElUKQ0KPj4+ICsJCXJldCArPSBzcHJpbnRmKHN0ciArIHJldCwgIk1EX0VYSVQgIik7 DQo+Pj4gKwlpZiAoZXBfc3RzICYgRVBfU1RTX1RSQkVSUikNCj4+PiArCQlyZXQgKz0gc3ByaW50 ZihzdHIgKyByZXQsICJUUkJFUlIgIik7DQo+Pj4gKwlpZiAoZXBfc3RzICYgRVBfU1RTX05SRFkp DQo+Pj4gKwkJcmV0ICs9IHNwcmludGYoc3RyICsgcmV0LCAiTlJEWSAiKTsNCj4+PiArCWlmIChl cF9zdHMgJiBFUF9TVFNfUFJJTUUpDQo+Pj4gKwkJcmV0ICs9IHNwcmludGYoc3RyICsgcmV0LCAi UFJJTUUgIik7DQo+Pj4gKwlpZiAoZXBfc3RzICYgRVBfU1RTX1NJREVSUikNCj4+PiArCQlyZXQg Kz0gc3ByaW50ZihzdHIgKyByZXQsICJTSURFUlJUICIpOw0KPj4+ICsJaWYgKGVwX3N0cyAmIEVQ X1NUU19PVVRTTU0pDQo+Pj4gKwkJcmV0ICs9IHNwcmludGYoc3RyICsgcmV0LCAiT1VUU01NICIp Ow0KPj4+ICsJaWYgKGVwX3N0cyAmIEVQX1NUU19JU09FUlIpDQo+Pj4gKwkJcmV0ICs9IHNwcmlu dGYoc3RyICsgcmV0LCAiSVNPRVJSICIpOw0KPj4+ICsJaWYgKGVwX3N0cyAmIEVQX1NUU19JT1Qp DQo+Pj4gKwkJcmV0ICs9IHNwcmludGYoc3RyICsgcmV0LCAiSU9UICIpOw0KPj4+ICsNCj4+PiAr CXJldHVybiBzdHI7DQo+Pj4gK30NCj4+PiArDQo+Pj4gK3N0YXRpYyBpbmxpbmUgY2hhciAqY2Ru czNfZGVjb2RlX2VweF9pcnEoY2hhciAqc3RyLA0KPj4+ICsJCQkJCSBjaGFyICplcF9uYW1lLA0K Pj4+ICsJCQkJCSB1MzIgZXBfc3RzKQ0KPj4+ICt7DQo+Pj4gKwlyZXR1cm4gY2RuczNfZGVjb2Rl X2VwX2lycShzdHIsIGVwX3N0cywgZXBfbmFtZSk7DQo+Pj4gK30NCj4+PiArDQo+Pj4gK3N0YXRp YyBpbmxpbmUgY2hhciAqY2RuczNfZGVjb2RlX2VwMF9pcnEoY2hhciAqc3RyLA0KPj4+ICsJCQkJ CSBpbnQgZGlyLA0KPj4+ICsJCQkJCSB1MzIgZXBfc3RzKQ0KPj4+ICt7DQo+Pj4gKwlyZXR1cm4g Y2RuczNfZGVjb2RlX2VwX2lycShzdHIsIGVwX3N0cywNCj4+PiArCQkJCSAgIGRpciA/ICJlcDBJ TiIgOiAiZXAwT1VUIik7DQo+Pj4gK30NCj4+PiArDQo+Pj4gKy8qKg0KPj4+ICsgKiBEZWJ1ZyBh IHRyYW5zZmVyIHJpbmcuDQo+Pj4gKyAqDQo+Pj4gKyAqIFByaW50cyBvdXQgYWxsIFRSQnMgaW4g dGhlIGVuZHBvaW50IHJpbmcsIGV2ZW4gdGhvc2UgYWZ0ZXIgdGhlIExpbmsgVFJCLg0KPj4+ICsg Ki4NCj4+PiArICovDQo+Pj4gK3N0YXRpYyBpbmxpbmUgY2hhciAqY2RuczNfZGJnX3Jpbmcoc3Ry dWN0IGNkbnMzX2VuZHBvaW50ICpwcml2X2VwLA0KPj4+ICsJCQkJICAgc3RydWN0IGNkbnMzX3Ry YiAqcmluZywgY2hhciAqc3RyKQ0KPj4+ICt7DQo+Pj4gKwlkbWFfYWRkcl90IGFkZHIgPSBwcml2 X2VwLT50cmJfcG9vbF9kbWE7DQo+Pj4gKwlzdHJ1Y3QgY2RuczNfdHJiICp0cmI7DQo+Pj4gKwlp bnQgdHJiX3Blcl9zZWN0b3I7DQo+Pj4gKwlpbnQgcmV0ID0gMDsNCj4+PiArCWludCBpOw0KPj4+ ICsNCj4+PiArCXRyYl9wZXJfc2VjdG9yID0gR0VUX1RSQlNfUEVSX1NFR01FTlQocHJpdl9lcC0+ dHlwZSk7DQo+Pj4gKw0KPj4+ICsJdHJiID0gJnByaXZfZXAtPnRyYl9wb29sW3ByaXZfZXAtPmRl cXVldWVdOw0KPj4+ICsJcmV0ICs9IHNwcmludGYoc3RyICsgcmV0LCAiXG5cdFx0UmluZyBjb250 ZW50cyBmb3IgJXM6IiwgcHJpdl9lcC0+bmFtZSk7DQo+Pj4gKw0KPj4+ICsJcmV0ICs9IHNwcmlu dGYoc3RyICsgcmV0LA0KPj4+ICsJCSAgICAgICAiXG5cdFx0UmluZyBkZXEgaW5kZXg6ICVkLCB0 cmI6ICVwICh2aXJ0KSwgMHglbGx4IChkbWEpXG4iLA0KPj4+ICsJCSAgICAgICBwcml2X2VwLT5k ZXF1ZXVlLCB0cmIsDQo+Pj4gKwkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpY2RuczNfdHJi X3ZpcnRfdG9fZG1hKHByaXZfZXAsIHRyYikpOw0KPj4+ICsNCj4+PiArCXRyYiA9ICZwcml2X2Vw LT50cmJfcG9vbFtwcml2X2VwLT5lbnF1ZXVlXTsNCj4+PiArCXJldCArPSBzcHJpbnRmKHN0ciAr IHJldCwNCj4+PiArCQkgICAgICAgIlx0XHRSaW5nIGVucSBpbmRleDogJWQsIHRyYjogJXAgKHZp cnQpLCAweCVsbHggKGRtYSlcbiIsDQo+Pj4gKwkJICAgICAgIHByaXZfZXAtPmVucXVldWUsIHRy YiwNCj4+PiArCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyljZG5zM190cmJfdmlydF90b19k bWEocHJpdl9lcCwgdHJiKSk7DQo+Pj4gKw0KPj4+ICsJcmV0ICs9IHNwcmludGYoc3RyICsgcmV0 LA0KPj4+ICsJCSAgICAgICAiXHRcdGZyZWUgdHJiczogJWQsIENDUz0lZCwgUENTPSVkXG4iLA0K Pj4+ICsJCSAgICAgICBwcml2X2VwLT5mcmVlX3RyYnMsIHByaXZfZXAtPmNjcywgcHJpdl9lcC0+ cGNzKTsNCj4+PiArDQo+Pj4gKwlpZiAodHJiX3Blcl9zZWN0b3IgPiBUUkJTX1BFUl9TRUdNRU5U KQ0KPj4+ICsJCXRyYl9wZXJfc2VjdG9yID0gVFJCU19QRVJfU0VHTUVOVDsNCj4+PiArDQo+Pj4g KwlpZiAodHJiX3Blcl9zZWN0b3IgPiBUUkJTX1BFUl9TRUdNRU5UKSB7DQo+Pj4gKwkJc3ByaW50 ZihzdHIgKyByZXQsICJcdFx0VG8gYmlnIHRyYW5zZmVyIHJpbmcgJWRcbiIsDQo+Pj4gKwkJCXRy Yl9wZXJfc2VjdG9yKTsNCj4+PiArCQlyZXR1cm4gc3RyOw0KPj4+ICsJfQ0KPj4+ICsNCj4+PiAr CWZvciAoaSA9IDA7IGkgPCB0cmJfcGVyX3NlY3RvcjsgKytpKSB7DQo+Pj4gKwkJdHJiID0gJnJp bmdbaV07DQo+Pj4gKwkJcmV0ICs9IHNwcmludGYoc3RyICsgcmV0LA0KPj4+ICsJCQkiXHRcdEAl cGFkICUwOHggJTA4eCAlMDh4XG4iLCAmYWRkciwNCj4+PiArCQkJbGUzMl90b19jcHUodHJiLT5i dWZmZXIpLA0KPj4+ICsJCQlsZTMyX3RvX2NwdSh0cmItPmxlbmd0aCksDQo+Pj4gKwkJCWxlMzJf dG9fY3B1KHRyYi0+Y29udHJvbCkpOw0KPj4+ICsJCWFkZHIgKz0gc2l6ZW9mKCp0cmIpOw0KPj4+ ICsJfQ0KPj4+ICsNCj4+PiArCXJldHVybiBzdHI7DQo+Pj4gK30NCj4+PiArDQo+Pj4gK3ZvaWQg Y2RuczNfZGJnKHN0cnVjdCBjZG5zM19kZXZpY2UgKnByaXZfZGV2LCBjb25zdCBjaGFyICpmbXQs IC4uLik7DQo+Pj4gKw0KPj4+ICsjaWZkZWYgQ09ORklHX0RFQlVHX0ZTDQo+Pj4gK3ZvaWQgY2Ru czNfZGVidWdmc19pbml0KHN0cnVjdCBjZG5zMyAqY2Rucyk7DQo+Pj4gK3ZvaWQgY2RuczNfZGVi dWdmc19leGl0KHN0cnVjdCBjZG5zMyAqY2Rucyk7DQo+Pj4gKyNlbHNlDQo+Pj4gK3ZvaWQgY2Ru czNfZGVidWdmc19pbml0KHN0cnVjdCBjZG5zMyAqY2Rucyk7DQo+Pj4gK3sgIH0NCj4+PiArdm9p ZCBjZG5zM19kZWJ1Z2ZzX2V4aXQoc3RydWN0IGNkbnMzICpjZG5zKTsNCj4+PiAreyAgfQ0KPj4+ ICsjZW5kaWYNCj4+PiArDQo+Pj4gKyNlbmRpZiAvKl9fTElOVVhfQ0ROUzNfREVCVUcqLw0KPj4+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jZG5zMy9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL3VzYi9j ZG5zMy9kZWJ1Z2ZzLmMNCj4+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPj4+IGluZGV4IDAwMDAw MDAwMDAwMC4uZDhmY2Q5MGQwNWIzDQo+Pj4gLS0tIC9kZXYvbnVsbA0KPj4+ICsrKyBiL2RyaXZl cnMvdXNiL2NkbnMzL2RlYnVnZnMuYw0KPj4+IEBAIC0wLDAgKzEsMTY0IEBADQo+Pj4gKy8vIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQo+Pj4gKy8qDQo+Pj4gKyAqIENhZGVuY2Ug VVNCU1MgRFJEIENvbnRyb2xsZXIgRGVidWdGUyBmaWxlci4NCj4+PiArICoNCj4+PiArICogQ29w eXJpZ2h0IChDKSAyMDE4IENhZGVuY2UuDQo+Pj4gKyAqDQo+Pj4gKyAqIEF1dGhvcjogUGF3ZWwg TGFzemN6YWsgPHBhd2VsbEBjYWRlbmNlLmNvbT4NCj4+PiArICovDQo+Pj4gKw0KPj4+ICsjaW5j bHVkZSA8bGludXgvdHlwZXMuaD4NCj4+PiArI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4NCj4+ PiArI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+DQo+Pj4gKyNpbmNsdWRlIDxsaW51eC91YWNj ZXNzLmg+DQo+Pj4gKw0KPj4+ICsjaW5jbHVkZSAiY29yZS5oIg0KPj4+ICsjaW5jbHVkZSAiZ2Fk Z2V0LmgiDQo+Pj4gKyNpbmNsdWRlICJkcmQuaCINCj4+PiArDQo+Pj4gK3N0YXRpYyBpbnQgY2Ru czNfbW9kZV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdW51c2VkKQ0KPj4+ICt7DQo+ Pj4gKwlzdHJ1Y3QgY2RuczMgKmNkbnMgPSBzLT5wcml2YXRlOw0KPj4+ICsNCj4+PiArCXN3aXRj aCAoY2Rucy0+Y3VycmVudF9kcl9tb2RlKSB7DQo+Pj4gKwljYXNlIFVTQl9EUl9NT0RFX0hPU1Q6 DQo+Pj4gKwkJc2VxX3B1dHMocywgImhvc3RcbiIpOw0KPj4+ICsJCWJyZWFrOw0KPj4+ICsJY2Fz ZSBVU0JfRFJfTU9ERV9QRVJJUEhFUkFMOg0KPj4+ICsJCXNlcV9wdXRzKHMsICJkZXZpY2VcbiIp Ow0KPj4+ICsJCWJyZWFrOw0KPj4+ICsJY2FzZSBVU0JfRFJfTU9ERV9PVEc6DQo+Pj4gKwkJc2Vx X3B1dHMocywgIm90Z1xuIik7DQo+Pj4gKwkJYnJlYWs7DQo+Pj4gKwlkZWZhdWx0Og0KPj4+ICsJ CXNlcV9wdXRzKHMsICJVTktOT1dOIG1vZGVcbiIpOw0KPj4+ICsJfQ0KPj4+ICsNCj4+PiArCXJl dHVybiAwOw0KPj4+ICt9DQo+Pj4gKw0KPj4+ICtzdGF0aWMgaW50IGNkbnMzX21vZGVfb3Blbihz dHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkNCj4+PiArew0KPj4+ICsJcmV0 dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGNkbnMzX21vZGVfc2hvdywgaW5vZGUtPmlfcHJpdmF0ZSk7 DQo+Pj4gK30NCj4+PiArDQo+Pj4gK3N0YXRpYyBzc2l6ZV90IGNkbnMzX21vZGVfd3JpdGUoc3Ry dWN0IGZpbGUgKmZpbGUsDQo+Pj4gKwkJCQljb25zdCBjaGFyIF9fdXNlciAqdWJ1ZiwNCj4+PiAr CQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQ0KPj4+ICt7DQo+Pj4gKwlzdHJ1Y3Qgc2Vx X2ZpbGUJICpzID0gZmlsZS0+cHJpdmF0ZV9kYXRhOw0KPj4+ICsJc3RydWN0IGNkbnMzICpjZG5z ID0gcy0+cHJpdmF0ZTsNCj4+PiArCXUzMiBtb2RlID0gVVNCX0RSX01PREVfVU5LTk9XTjsNCj4+ PiArCWNoYXIgYnVmWzMyXTsNCj4+PiArDQo+Pj4gKwlpZiAoY29weV9mcm9tX3VzZXIoJmJ1Ziwg dWJ1ZiwgbWluX3Qoc2l6ZV90LCBzaXplb2YoYnVmKSAtIDEsIGNvdW50KSkpDQo+Pj4gKwkJcmV0 dXJuIC1FRkFVTFQ7DQo+Pj4gKw0KPj4+ICsJaWYgKCFzdHJuY21wKGJ1ZiwgImhvc3QiLCA0KSkg ew0KPj4+ICsJCWlmIChjZG5zLT5kcl9tb2RlID09IFVTQl9EUl9NT0RFX0hPU1QgfHwNCj4+PiAr CQkgICAgY2Rucy0+ZHJfbW9kZSA9PSBVU0JfRFJfTU9ERV9PVEcpIHsNCj4+PiArCQkJbW9kZSA9 IFVTQl9EUl9NT0RFX0hPU1Q7DQo+Pj4gKwkJfQ0KPj4+ICsJfQ0KPj4+ICsNCj4+PiArCWlmICgh c3RybmNtcChidWYsICJkZXZpY2UiLCA2KSkNCj4+PiArCQlpZiAoY2Rucy0+ZHJfbW9kZSA9PSBV U0JfRFJfTU9ERV9QRVJJUEhFUkFMIHx8DQo+Pj4gKwkJICAgIGNkbnMtPmRyX21vZGUgPT0gVVNC X0RSX01PREVfT1RHKQ0KPj4+ICsJCQltb2RlID0gVVNCX0RSX01PREVfUEVSSVBIRVJBTDsNCj4+ PiArDQo+Pj4gKwlpZiAoIXN0cm5jbXAoYnVmLCAib3RnIiwgMykgJiYgY2Rucy0+ZHJfbW9kZSA9 PSBVU0JfRFJfTU9ERV9PVEcpDQo+Pj4gKwkJbW9kZSA9IFVTQl9EUl9NT0RFX09URzsNCj4+PiAr DQo+Pj4gKwlpZiAobW9kZSA9PSBVU0JfRFJfTU9ERV9VTktOT1dOKSB7DQo+Pj4gKwkJZGV2X2Vy cihjZG5zLT5kZXYsICJGYWlsZWQ6IGluY29ycmVjdCBtb2RlIHNldHRpbmdcbiIpOw0KPj4+ICsJ CXJldHVybiAtRUZBVUxUOw0KPj4+ICsJfQ0KPj4+ICsNCj4+PiArCWlmIChjZG5zLT5jdXJyZW50 X2RyX21vZGUgIT0gbW9kZSkgew0KPj4+ICsJCWNkbnMtPmRlc2lyZWRfZHJfbW9kZSA9IG1vZGU7 DQo+Pj4gKwkJY2Rucy0+ZGVidWdfZGlzYWJsZSA9IDA7DQo+Pj4gKwkJY2RuczNfcm9sZV9zdG9w KGNkbnMpOw0KPj4+ICsJCWNkbnMzX2RyZF91cGRhdGVfbW9kZShjZG5zKTsNCj4+PiArCQlxdWV1 ZV93b3JrKHN5c3RlbV9mcmVlemFibGVfd3EsICZjZG5zLT5yb2xlX3N3aXRjaF93cSk7DQo+Pj4g Kwl9DQo+Pj4gKw0KPj4+ICsJcmV0dXJuIGNvdW50Ow0KPj4+ICt9DQo+Pj4gKw0KPj4+ICtzdGF0 aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjZG5zM19tb2RlX2ZvcHMgPSB7DQo+Pj4g Kwkub3BlbgkJCT0gY2RuczNfbW9kZV9vcGVuLA0KPj4+ICsJLndyaXRlCQkJPSBjZG5zM19tb2Rl X3dyaXRlLA0KPj4+ICsJLnJlYWQJCQk9IHNlcV9yZWFkLA0KPj4+ICsJLmxsc2VlawkJCT0gc2Vx X2xzZWVrLA0KPj4+ICsJLnJlbGVhc2UJCT0gc2luZ2xlX3JlbGVhc2UsDQo+Pj4gK307DQo+Pj4g Kw0KPj4+ICtzdGF0aWMgaW50IGNkbnMzX2Rpc2FibGVfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMs IHZvaWQgKnVudXNlZCkNCj4+PiArew0KPj4+ICsJc3RydWN0IGNkbnMzICpjZG5zID0gcy0+cHJp dmF0ZTsNCj4+PiArDQo+Pj4gKwlpZiAoIWNkbnMtPmRlYnVnX2Rpc2FibGUpDQo+Pj4gKwkJc2Vx X3B1dHMocywgIjBcbiIpOw0KPj4+ICsJZWxzZQ0KPj4+ICsJCXNlcV9wdXRzKHMsICIxXG4iKTsN Cj4+PiArDQo+Pj4gKwlyZXR1cm4gMDsNCj4+PiArfQ0KPj4+ICsNCj4+PiArc3RhdGljIHNzaXpl X3QgY2RuczNfZGlzYWJsZV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwNCj4+PiArCQkJCSAgIGNv bnN0IGNoYXIgX191c2VyICp1YnVmLA0KPj4+ICsJCQkJICAgc2l6ZV90IGNvdW50LCBsb2ZmX3Qg KnBwb3MpDQo+Pj4gK3sNCj4+PiArCXN0cnVjdCBzZXFfZmlsZQkgKnMgPSBmaWxlLT5wcml2YXRl X2RhdGE7DQo+Pj4gKwlzdHJ1Y3QgY2RuczMgKmNkbnMgPSBzLT5wcml2YXRlOw0KPj4+ICsJYm9v bCBkaXNhYmxlOw0KPj4+ICsJY2hhciBidWZbMTZdOw0KPj4+ICsNCj4+PiArCWlmIChjb3B5X2Zy b21fdXNlcigmYnVmLCB1YnVmLCBtaW5fdChzaXplX3QsIHNpemVvZihidWYpIC0gMSwgY291bnQp KSkNCj4+PiArCQlyZXR1cm4gLUVGQVVMVDsNCj4+PiArDQo+Pj4gKwlpZiAoa3N0cnRvYm9vbChi dWYsICZkaXNhYmxlKSkgew0KPj4+ICsJCWRldl9lcnIoY2Rucy0+ZGV2LCAid3Jvbmcgc2V0dGlu Z1xuIik7DQo+Pj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+Pj4gKwl9DQo+Pj4gKw0KPj4+ICsJaWYg KGRpc2FibGUgIT0gY2Rucy0+ZGVidWdfZGlzYWJsZSkgew0KPj4+ICsJCWNkbnMtPmRlYnVnX2Rp c2FibGUgPSBkaXNhYmxlOw0KPj4+ICsJCXF1ZXVlX3dvcmsoc3lzdGVtX2ZyZWV6YWJsZV93cSwg JmNkbnMtPnJvbGVfc3dpdGNoX3dxKTsNCj4+PiArCX0NCj4+PiArDQo+Pj4gKwlyZXR1cm4gY291 bnQ7DQo+Pj4gK30NCj4+PiArDQo+Pj4gK3N0YXRpYyBpbnQgY2RuczNfZGlzYWJsZV9vcGVuKHN0 cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQ0KPj4+ICt7DQo+Pj4gKwlyZXR1 cm4gc2luZ2xlX29wZW4oZmlsZSwgY2RuczNfZGlzYWJsZV9zaG93LCBpbm9kZS0+aV9wcml2YXRl KTsNCj4+PiArfQ0KPj4+ICsNCj4+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlv bnMgY2RuczNfZGlzYWJsZV9mb3BzID0gew0KPj4+ICsJLm9wZW4JCQk9IGNkbnMzX2Rpc2FibGVf b3BlbiwNCj4+PiArCS53cml0ZQkJCT0gY2RuczNfZGlzYWJsZV93cml0ZSwNCj4+PiArCS5yZWFk CQkJPSBzZXFfcmVhZCwNCj4+PiArCS5sbHNlZWsJCQk9IHNlcV9sc2VlaywNCj4+PiArCS5yZWxl YXNlCQk9IHNpbmdsZV9yZWxlYXNlLA0KPj4+ICt9Ow0KPj4+ICsNCj4+PiArdm9pZCBjZG5zM19k ZWJ1Z2ZzX2luaXQoc3RydWN0IGNkbnMzICpjZG5zKQ0KPj4+ICt7DQo+Pj4gKwlzdHJ1Y3QgZGVu dHJ5ICpyb290Ow0KPj4+ICsNCj4+PiArCXJvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoZGV2X25h bWUoY2Rucy0+ZGV2KSwgTlVMTCk7DQo+Pj4gKwljZG5zLT5yb290ID0gcm9vdDsNCj4+PiArCWlm IChJU19FTkFCTEVEKENPTkZJR19VU0JfQ0ROUzNfR0FER0VUKSAmJg0KPj4+ICsJICAgIElTX0VO QUJMRUQoQ09ORklHX1VTQl9DRE5TM19IT1NUKSkNCj4+PiArCQlkZWJ1Z2ZzX2NyZWF0ZV9maWxl KCJtb2RlIiwgMDY0NCwgcm9vdCwgY2RucywNCj4+PiArCQkJCSAgICAmY2RuczNfbW9kZV9mb3Bz KTsNCj4+PiArDQo+Pj4gKwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJkaXNhYmxlIiwgMDY0NCwgcm9v dCwgY2RucywNCj4+PiArCQkJICAgICZjZG5zM19kaXNhYmxlX2ZvcHMpOw0KPj4+ICt9DQo+Pj4g Kw0KPj4+ICt2b2lkIGNkbnMzX2RlYnVnZnNfZXhpdChzdHJ1Y3QgY2RuczMgKmNkbnMpDQo+Pj4g K3sNCj4+PiArCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShjZG5zLT5yb290KTsNCj4+PiArfQ0K Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jZG5zMy9kcmQuYyBiL2RyaXZlcnMvdXNiL2Nk bnMzL2RyZC5jDQo+Pj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4+PiBpbmRleCAwMDAwMDAwMDAw MDAuLjNlNTYzMzhjZDdiOQ0KPj4+IC0tLSAvZGV2L251bGwNCj4+PiArKysgYi9kcml2ZXJzL3Vz Yi9jZG5zMy9kcmQuYw0KPj4+IEBAIC0wLDAgKzEsMzY1IEBADQo+Pj4gKy8vIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBHUEwtMi4wDQo+Pj4gKy8qDQo+Pj4gKyAqIENhZGVuY2UgVVNCU1MgRFJE IERyaXZlci4NCj4+PiArICoNCj4+PiArICogQ29weXJpZ2h0IChDKSAyMDE4IENhZGVuY2UuDQo+ Pj4gKyAqDQo+Pj4gKyAqIEF1dGhvcjogUGF3ZWwgTGFzemN6YWsgPHBhd2VsbEBjYWRlbmNlLmNv bQ0KPj4+ICsgKg0KPj4+ICsgKi8NCj4+PiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPg0KPj4+ ICsjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+DQo+Pj4gKyNpbmNsdWRlIDxsaW51eC9kZWxh eS5oPg0KPj4+ICsjaW5jbHVkZSA8bGludXgvdXNiL290Zy5oPg0KPj4+ICsNCj4+PiArI2luY2x1 ZGUgImdhZGdldC5oIg0KPj4+ICsjaW5jbHVkZSAiZHJkLmgiDQo+Pj4gKyNpbmNsdWRlICJjb3Jl LmgiDQo+Pj4gKw0KPj4+ICtzdGF0aWMgaW50IGNkbnMzX2RyZF9zd2l0Y2hfZ2FkZ2V0KHN0cnVj dCBjZG5zMyAqY2RucywgaW50IG9uKTsNCj4+PiArc3RhdGljIGludCBjZG5zM19kcmRfc3dpdGNo X2hvc3Qoc3RydWN0IGNkbnMzICpjZG5zLCBpbnQgb24pOw0KPj4+ICsNCj4+PiArLyoqDQo+Pj4g KyAqIGNkbnMzX3NldF9tb2RlIC0gY2hhbmdlIG1vZGUgb2YgT1RHIENvcmUNCj4+PiArICogQGNk bnM6IHBvaW50ZXIgdG8gY29udGV4dCBzdHJ1Y3R1cmUNCj4+PiArICogQG1vZGU6IHNlbGVjdGVk IG1vZGUgZnJvbSBjZG5zX3JvbGUNCj4+PiArICoNCj4+PiArICogUmV0dXJucyAwIG9uIHN1Y2Nl c3Mgb3RoZXJ3aXNlIG5lZ2F0aXZlIGVycm5vDQo+Pj4gKyAqLw0KPj4+ICtpbnQgY2RuczNfc2V0 X21vZGUoc3RydWN0IGNkbnMzICpjZG5zLCBlbnVtIHVzYl9kcl9tb2RlIG1vZGUpDQo+Pj4gK3sN Cj4+PiArCWludCByZXQgPSAwOw0KPj4+ICsJdTMyIHJlZzsNCj4+PiArDQo+Pj4gKwljZG5zLT5j dXJyZW50X2RyX21vZGUgPSBtb2RlOw0KPj4+ICsNCj4+PiArCXN3aXRjaCAobW9kZSkgew0KPj4+ ICsJY2FzZSBVU0JfRFJfTU9ERV9QRVJJUEhFUkFMOg0KPj4+ICsJCWRldl9pbmZvKGNkbnMtPmRl diwgIlNldCBjb250cm9sbGVyIHRvIEdhZGdldCBtb2RlXG4iKTsNCj4+PiArCQlyZXQgPSBjZG5z M19kcmRfc3dpdGNoX2dhZGdldChjZG5zLCAxKTsNCj4+PiArCQlicmVhazsNCj4+PiArCWNhc2Ug VVNCX0RSX01PREVfSE9TVDoNCj4+PiArCQlkZXZfaW5mbyhjZG5zLT5kZXYsICJTZXQgY29udHJv bGxlciB0byBIb3N0IG1vZGVcbiIpOw0KPj4+ICsJCXJldCA9IGNkbnMzX2RyZF9zd2l0Y2hfaG9z dChjZG5zLCAxKTsNCj4+PiArCQlicmVhazsNCj4+PiArCWNhc2UgVVNCX0RSX01PREVfT1RHOg0K Pj4+ICsJCWRldl9pbmZvKGNkbnMtPmRldiwgIlNldCBjb250cm9sbGVyIHRvIE9URyBtb2RlXG4i KTsNCj4+PiArCQlpZiAoY2Rucy0+dmVyc2lvbiA9PSBDRE5TM19DT05UUk9MTEVSX1YxKSB7DQo+ Pj4gKwkJCXJlZyA9IHJlYWRsKCZjZG5zLT5vdGdfdjFfcmVncy0+b3ZlcnJpZGUpOw0KPj4+ICsJ CQlyZWcgfD0gT1ZFUlJJREVfSURQVUxMVVA7DQo+Pj4gKwkJCXdyaXRlbChyZWcsICZjZG5zLT5v dGdfdjFfcmVncy0+b3ZlcnJpZGUpOw0KPj4+ICsJCX0gZWxzZSB7DQo+Pj4gKwkJCXJlZyA9IHJl YWRsKCZjZG5zLT5vdGdfdjBfcmVncy0+Y3RybDEpOw0KPj4+ICsJCQlyZWcgfD0gT1ZFUlJJREVf SURQVUxMVVBfVjA7DQo+Pj4gKwkJCXdyaXRlbChyZWcsICZjZG5zLT5vdGdfdjBfcmVncy0+Y3Ry bDEpOw0KPj4+ICsJCX0NCj4+PiArDQo+Pj4gKwkJLyoNCj4+PiArCQkgKiBIYXJkd2FyZSBzcGVj aWZpY2F0aW9uIHNheXM6ICJJRF9WQUxVRSBtdXN0IGJlIHZhbGlkIHdpdGhpbg0KPj4+ICsJCSAq IDUwbXMgYWZ0ZXIgaWRwdWxsdXAgaXMgc2V0IHRvICcxIiBzbyBkcml2ZXIgbXVzdCB3YWl0DQo+ Pj4gKwkJICogNTBtcyBiZWZvcmUgcmVhZGluZyB0aGlzIHBpbi4NCj4+PiArCQkgKi8NCj4+PiAr CQl1c2xlZXBfcmFuZ2UoNTAwMDAsIDYwMDAwKTsNCj4+PiArCQlicmVhazsNCj4+PiArCWRlZmF1 bHQ6DQo+Pj4gKwkJY2Rucy0+Y3VycmVudF9kcl9tb2RlID0gVVNCX0RSX01PREVfVU5LTk9XTjsN Cj4+PiArCQlkZXZfZXJyKGNkbnMtPmRldiwgIlVuc3VwcG9ydGVkIG1vZGUgb2Ygb3BlcmF0aW9u ICVkXG4iLCBtb2RlKTsNCj4+PiArCQlyZXR1cm4gLUVJTlZBTDsNCj4+PiArCX0NCj4+PiArDQo+ Pj4gKwlyZXR1cm4gcmV0Ow0KPj4+ICt9DQo+Pj4gKw0KPj4+ICtpbnQgY2RuczNfZ2V0X2lkKHN0 cnVjdCBjZG5zMyAqY2RucykNCj4+PiArew0KPj4+ICsJaW50IGlkOw0KPj4+ICsNCj4+PiArCWlk ID0gcmVhZGwoJmNkbnMtPm90Z19yZWdzLT5zdHMpICYgT1RHU1RTX0lEX1ZBTFVFOw0KPj4+ICsJ ZGV2X2RiZyhjZG5zLT5kZXYsICJPVEcgSUQ6ICVkIiwgaWQpOw0KPj4+ICsJcmV0dXJuIGlkOw0K Pj4+ICt9DQo+Pj4gKw0KPj4+ICtpbnQgY2RuczNfaXNfaG9zdChzdHJ1Y3QgY2RuczMgKmNkbnMp DQo+Pm1heWJlIGl0J3MgYmV0dGVyIHRvIHVzZSBib29sIGluc3RlYWQgb2YgaW50DQo+Pj4gK3sN Cj4+PiArCWlmIChjZG5zLT5jdXJyZW50X2RyX21vZGUgPT0gVVNCX0RSX01PREVfSE9TVCkNCj4+ PiArCQlyZXR1cm4gMTsNCj4+PiArCWVsc2UgaWYgKCFjZG5zM19nZXRfaWQoY2RucykpDQo+Pj4g KwkJcmV0dXJuIDE7DQo+Pj4gKw0KPj4+ICsJcmV0dXJuIDA7DQo+Pj4gK30NCj4+PiArDQo+Pj4g K2ludCBjZG5zM19pc19kZXZpY2Uoc3RydWN0IGNkbnMzICpjZG5zKQ0KPj5kaXR0bw0KPj4+ICt7 DQo+Pj4gKwlpZiAoY2Rucy0+Y3VycmVudF9kcl9tb2RlID09IFVTQl9EUl9NT0RFX1BFUklQSEVS QUwpDQo+Pj4gKwkJcmV0dXJuIDE7DQo+Pj4gKwllbHNlIGlmIChjZG5zLT5jdXJyZW50X2RyX21v ZGUgPT0gVVNCX0RSX01PREVfT1RHKQ0KPj4+ICsJCWlmIChjZG5zM19nZXRfaWQoY2RucykpDQo+ Pj4gKwkJCXJldHVybiAxOw0KPj4+ICsNCj4+PiArCXJldHVybiAwOw0KPj4+ICt9DQo+Pj4gKw0K Pj4+ICsvKioNCj4+PiArICogY2RuczNfb3RnX2Rpc2FibGVfaXJxIC0gRGlzYWJsZSBhbGwgT1RH IGludGVycnVwdHMNCj4+PiArICogQGNkbnM6IFBvaW50ZXIgdG8gY29udHJvbGxlciBjb250ZXh0 IHN0cnVjdHVyZQ0KPj4+ICsgKi8NCj4+PiArc3RhdGljIHZvaWQgY2RuczNfb3RnX2Rpc2FibGVf aXJxKHN0cnVjdCBjZG5zMyAqY2RucykNCj4+PiArew0KPj4+ICsJd3JpdGVsKDAsICZjZG5zLT5v dGdfcmVncy0+aWVuKTsNCj4+PiArfQ0KPj4+ICsNCj4+PiArLyoqDQo+Pj4gKyAqIGNkbnMzX290 Z19lbmFibGVfaXJxIC0gZW5hYmxlIGlkIGFuZCBzZXNzX3ZhbGlkIGludGVycnVwdHMNCj4+PiAr ICogQGNkbnM6IFBvaW50ZXIgdG8gY29udHJvbGxlciBjb250ZXh0IHN0cnVjdHVyZQ0KPj4+ICsg Ki8NCj4+PiArc3RhdGljIHZvaWQgY2RuczNfb3RnX2VuYWJsZV9pcnEoc3RydWN0IGNkbnMzICpj ZG5zKQ0KPj4+ICt7DQo+Pj4gKwl3cml0ZWwoT1RHSUVOX0lEX0NIQU5HRV9JTlQgfCBPVEdJRU5f VkJVU1ZBTElEX1JJU0VfSU5UIHwNCj4+PiArCSAgICAgICBPVEdJRU5fVkJVU1ZBTElEX0ZBTExf SU5ULCAmY2Rucy0+b3RnX3JlZ3MtPmllbik7DQo+Pj4gK30NCj4+PiArDQo+Pj4gKy8qKg0KPj4+ ICsgKiBjZG5zM19kcmRfc3dpdGNoX2hvc3QgLSBzdGFydC9zdG9wIGhvc3QNCj4+PiArICogQGNk bnM6IFBvaW50ZXIgdG8gY29udHJvbGxlciBjb250ZXh0IHN0cnVjdHVyZQ0KPj4+ICsgKiBAb246 IDEgZm9yIHN0YXJ0LCAwIGZvciBzdG9wDQo+Pj4gKyAqDQo+Pj4gKyAqIFJldHVybnMgMCBvbiBz dWNjZXNzIG90aGVyd2lzZSBuZWdhdGl2ZSBlcnJubw0KPj4+ICsgKi8NCj4+Wy4uLl0NCj4+PiAr REVGSU5FX0VWRU5UKGNkbnMzX2xvZ19yZXF1ZXN0X2hhbmRsZWQsIGNkbnMzX3JlcXVlc3RfaGFu ZGxlZCwNCj4+PiArCVRQX1BST1RPKHN0cnVjdCBjZG5zM19yZXF1ZXN0ICpwcml2X3JlcSwgaW50 IGN1cnJlbnRfaW5kZXgsDQo+Pj4gKwkJIGludCBoYW5kbGVkKSwNCj4+PiArCVRQX0FSR1MocHJp dl9yZXEsIGN1cnJlbnRfaW5kZXgsIGhhbmRsZWQpDQo+Pj4gKyk7DQo+Pj4gKyNlbmRpZiAvKiBf X0xJTlVYX0NETlMzX1RSQUNFICovDQo+Pj4gKw0KPj4+ICsvKiB0aGlzIHBhcnQgbXVzdCBiZSBv dXRzaWRlIGhlYWRlciBndWFyZCAqLw0KPj4+ICsNCj4+PiArI3VuZGVmIFRSQUNFX0lOQ0xVREVf UEFUSA0KPj4+ICsjZGVmaW5lIFRSQUNFX0lOQ0xVREVfUEFUSCAuDQo+Pj4gKw0KPj4+ICsjdW5k ZWYgVFJBQ0VfSU5DTFVERV9GSUxFDQo+Pj4gKyNkZWZpbmUgVFJBQ0VfSU5DTFVERV9GSUxFIHRy YWNlDQo+Pj4gKw0KPj4+ICsjaW5jbHVkZSA8dHJhY2UvZGVmaW5lX3RyYWNlLmg+DQo+Pg0KPlRo YW5rcywNCj5QYXdlbA0K From mboxrd@z Thu Jan 1 00:00:00 1970 From: Pawel Laszczak Subject: RE: [PATCH v4 5/6] usb:cdns3 Add Cadence USB3 DRD Driver Date: Mon, 4 Mar 2019 12:46:47 +0000 Message-ID: References: <1550173514-23573-1-git-send-email-pawell@cadence.com> <1550173514-23573-6-git-send-email-pawell@cadence.com> <1550224667.2210.22.camel@mhfsdcap03> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: Content-Language: en-US Sender: linux-kernel-owner@vger.kernel.org To: Chunfeng Yun Cc: "devicetree@vger.kernel.org" , "gregkh@linuxfoundation.org" , "felipe.balbi@linux.intel.com" , "mark.rutland@arm.com" , "linux-usb@vger.kernel.org" , "hdegoede@redhat.com" , "heikki.krogerus@linux.intel.com" , "andy.shevchenko@gmail.com" , "robh+dt@kernel.org" , "rogerq@ti.com" , "linux-kernel@vger.kernel.org" , "jbergsagel@ti.com" , "nsekhar@ti.com" , "nm@ti.com" , Suresh Punnoose , "peter.chen@nxp.com" List-Id: devicetree@vger.kernel.org PkZyb206IFBhd2VsIExhc3pjemFrDQo+U2VudDogTW9uZGF5LCBNYXJjaCA0LCAyMDE5IDEyOjAy IFBNDQo+VG86IENodW5mZW5nIFl1biA8Y2h1bmZlbmcueXVuQG1lZGlhdGVrLmNvbT4NCj5DYzog ZGV2aWNldHJlZUB2Z2VyLmtlcm5lbC5vcmc7IGdyZWdraEBsaW51eGZvdW5kYXRpb24ub3JnOyBm ZWxpcGUuYmFsYmlAbGludXguaW50ZWwuY29tOyBtYXJrLnJ1dGxhbmRAYXJtLmNvbTsgbGludXgt DQo+dXNiQHZnZXIua2VybmVsLm9yZzsgaGRlZ29lZGVAcmVkaGF0LmNvbTsgaGVpa2tpLmtyb2dl cnVzQGxpbnV4LmludGVsLmNvbTsgYW5keS5zaGV2Y2hlbmtvQGdtYWlsLmNvbTsgcm9iaCtkdEBr ZXJuZWwub3JnOw0KPnJvZ2VycUB0aS5jb207IGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc7 IGpiZXJnc2FnZWxAdGkuY29tOyBuc2VraGFyQHRpLmNvbTsgbm1AdGkuY29tOyBTdXJlc2ggUHVu bm9vc2UNCj48c3VyZXNocEBjYWRlbmNlLmNvbT47IHBldGVyLmNoZW5AbnhwLmNvbTsgUmFodWwg S3VtYXIgPGt1cmFodWxAY2FkZW5jZS5jb20+DQo+U3ViamVjdDogUkU6IFtQQVRDSCB2NCA1LzZd IHVzYjpjZG5zMyBBZGQgQ2FkZW5jZSBVU0IzIERSRCBEcml2ZXINCj4NCj5IaSwNCj4+DQo+Pmhp LA0KPj5PbiBUaHUsIDIwMTktMDItMTQgYXQgMTk6NDUgKzAwMDAsIFBhd2VsIExhc3pjemFrIHdy b3RlOg0KPj4+IFRoaXMgcGF0Y2ggaW50cm9kdWNlIG5ldyBDYWRlbmNlIFVTQlNTIERSRCBkcml2 ZXIgdG8gbGludXgga2VybmVsLg0KPj4+DQo+Pj4gVGhlIENhZGVuY2UgVVNCU1MgRFJEIERyaXZl ciBpcyBhIGhpZ2hseSBjb25maWd1cmFibGUgSVAgQ29yZSB3aGljaGkNCj4+PiBjYW4gYmUgaW5z dGFudGlhdGVkIGFzIER1YWwtUm9sZSBEZXZpY2UgKERSRCksIFBlcmlwaGVyYWwgT25seSBhbmQN Cj4+PiBIb3N0IE9ubHkgKFhIQ0kpY29uZmlndXJhdGlvbnMuDQo+Pj4NCj4+PiBUaGUgY3VycmVu dCBkcml2ZXIgaGFzIGJlZW4gdmFsaWRhdGVkIHdpdGggRlBHQSBidXJuZWQuIFdlIGhhdmUgc3Vw cG9ydA0KPj4+IGZvciBQQ0llIGJ1cywgd2hpY2ggaXMgdXNlZCBvbiBGUEdBIHByb3RvdHlwaW5n Lg0KPj4+DQo+Pj4gVGhlIGhvc3Qgc2lkZSBvZiBVU0JTUy1EUkQgY29udHJvbGxlciBpcyBjb21w bGlhbmNlIHdpdGggWEhDSQ0KPj4+IHNwZWNpZmljYXRpb24sIHNvIGl0IHdvcmtzIHdpdGggc3Rh bmRhcmQgWEhDSSBsaW51eCBkcml2ZXIuDQo+Pj4NCj4+PiBTaWduZWQtb2ZmLWJ5OiBQYXdlbCBM YXN6Y3phayA8cGF3ZWxsQGNhZGVuY2UuY29tPg0KPj4+IC0tLQ0KPj4+ICBkcml2ZXJzL3VzYi9L Y29uZmlnICAgICAgICAgICAgICAgIHwgICAgMiArDQo+Pj4gIGRyaXZlcnMvdXNiL01ha2VmaWxl ICAgICAgICAgICAgICAgfCAgICAyICsNCj4+PiAgZHJpdmVycy91c2IvY2RuczMvS2NvbmZpZyAg ICAgICAgICB8ICAgNDQgKw0KPj4+ICBkcml2ZXJzL3VzYi9jZG5zMy9NYWtlZmlsZSAgICAgICAg IHwgICAxNCArDQo+Pj4gIGRyaXZlcnMvdXNiL2NkbnMzL2NkbnMzLXBjaS13cmFwLmMgfCAgMTU1 ICsrKw0KPj4+ICBkcml2ZXJzL3VzYi9jZG5zMy9jb3JlLmMgICAgICAgICAgIHwgIDQwMyArKysr KysNCj4+PiAgZHJpdmVycy91c2IvY2RuczMvY29yZS5oICAgICAgICAgICB8ICAxMTYgKysNCj4+ PiAgZHJpdmVycy91c2IvY2RuczMvZGVidWcuaCAgICAgICAgICB8ICAxNjggKysrDQo+Pj4gIGRy aXZlcnMvdXNiL2NkbnMzL2RlYnVnZnMuYyAgICAgICAgfCAgMTY0ICsrKw0KPj4+ICBkcml2ZXJz L3VzYi9jZG5zMy9kcmQuYyAgICAgICAgICAgIHwgIDM2NSArKysrKw0KPj4+ICBkcml2ZXJzL3Vz Yi9jZG5zMy9kcmQuaCAgICAgICAgICAgIHwgIDE2MiArKysNCj4+PiAgZHJpdmVycy91c2IvY2Ru czMvZXAwLmMgICAgICAgICAgICB8ICA5MDcgKysrKysrKysrKysrKw0KPj4+ICBkcml2ZXJzL3Vz Yi9jZG5zMy9nYWRnZXQtZXhwb3J0LmggIHwgICAyOCArDQo+Pj4gIGRyaXZlcnMvdXNiL2NkbnMz L2dhZGdldC5jICAgICAgICAgfCAyMDAzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4+ PiAgZHJpdmVycy91c2IvY2RuczMvZ2FkZ2V0LmggICAgICAgICB8IDEyMDcgKysrKysrKysrKysr KysrKysNCj4+PiAgZHJpdmVycy91c2IvY2RuczMvaG9zdC1leHBvcnQuaCAgICB8ICAgMjggKw0K Pj4+ICBkcml2ZXJzL3VzYi9jZG5zMy9ob3N0LmMgICAgICAgICAgIHwgICA3MiArDQo+Pj4gIGRy aXZlcnMvdXNiL2NkbnMzL3RyYWNlLmMgICAgICAgICAgfCAgIDIzICsNCj4+PiAgZHJpdmVycy91 c2IvY2RuczMvdHJhY2UuaCAgICAgICAgICB8ICA0MDQgKysrKysrDQo+Pj4gIDE5IGZpbGVzIGNo YW5nZWQsIDYyNjcgaW5zZXJ0aW9ucygrKQ0KPj4+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy91c2IvY2RuczMvS2NvbmZpZw0KPj4+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy91c2Iv Y2RuczMvTWFrZWZpbGUNCj4+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdXNiL2NkbnMz L2NkbnMzLXBjaS13cmFwLmMNCj4+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdXNiL2Nk bnMzL2NvcmUuYw0KPj4+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy91c2IvY2RuczMvY29y ZS5oDQo+Pj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3VzYi9jZG5zMy9kZWJ1Zy5oDQo+ Pj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3VzYi9jZG5zMy9kZWJ1Z2ZzLmMNCj4+PiAg Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdXNiL2NkbnMzL2RyZC5jDQo+Pj4gIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL3VzYi9jZG5zMy9kcmQuaA0KPj4+ICBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy91c2IvY2RuczMvZXAwLmMNCj4+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvdXNiL2NkbnMzL2dhZGdldC1leHBvcnQuaA0KPj4+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy91c2IvY2RuczMvZ2FkZ2V0LmMNCj4+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv dXNiL2NkbnMzL2dhZGdldC5oDQo+Pj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3VzYi9j ZG5zMy9ob3N0LWV4cG9ydC5oDQo+Pj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3VzYi9j ZG5zMy9ob3N0LmMNCj4+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdXNiL2NkbnMzL3Ry YWNlLmMNCj4+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdXNiL2NkbnMzL3RyYWNlLmgN Cj4+Pg0KPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9LY29uZmlnIGIvZHJpdmVycy91c2Iv S2NvbmZpZw0KPj4+IGluZGV4IDk4N2ZjNWJhNjMyMS4uNWY5MzM0MDE5ZDA0IDEwMDY0NA0KPj4+ IC0tLSBhL2RyaXZlcnMvdXNiL0tjb25maWcNCj4+PiArKysgYi9kcml2ZXJzL3VzYi9LY29uZmln DQo+Pj4gQEAgLTExMiw2ICsxMTIsOCBAQCBzb3VyY2UgImRyaXZlcnMvdXNiL3VzYmlwL0tjb25m aWciDQo+Pj4NCj4+PiAgZW5kaWYNCj4+Pg0KPj4+ICtzb3VyY2UgImRyaXZlcnMvdXNiL2NkbnMz L0tjb25maWciDQo+Pj4gKw0KPj4+ICBzb3VyY2UgImRyaXZlcnMvdXNiL210dTMvS2NvbmZpZyIN Cj4+Pg0KPj4+ICBzb3VyY2UgImRyaXZlcnMvdXNiL211c2IvS2NvbmZpZyINCj4+PiBkaWZmIC0t Z2l0IGEvZHJpdmVycy91c2IvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9NYWtlZmlsZQ0KPj4+IGlu ZGV4IDdkMWI4YzgyYjIwOC4uYWIxMjViOTY2Y2FjIDEwMDY0NA0KPj4+IC0tLSBhL2RyaXZlcnMv dXNiL01ha2VmaWxlDQo+Pj4gKysrIGIvZHJpdmVycy91c2IvTWFrZWZpbGUNCj4+PiBAQCAtMTIs NiArMTIsOCBAQCBvYmotJChDT05GSUdfVVNCX0RXQzMpCQkrPSBkd2MzLw0KPj4+ICBvYmotJChD T05GSUdfVVNCX0RXQzIpCQkrPSBkd2MyLw0KPj4+ICBvYmotJChDT05GSUdfVVNCX0lTUDE3NjAp CSs9IGlzcDE3NjAvDQo+Pj4NCj4+PiArb2JqLSQoQ09ORklHX1VTQl9DRE5TMykJCSs9IGNkbnMz Lw0KPj4+ICsNCj4+PiAgb2JqLSQoQ09ORklHX1VTQl9NT04pCQkrPSBtb24vDQo+Pj4gIG9iai0k KENPTkZJR19VU0JfTVRVMykJCSs9IG10dTMvDQo+Pj4NCj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy91c2IvY2RuczMvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL2NkbnMzL0tjb25maWcNCj4+PiBuZXcg ZmlsZSBtb2RlIDEwMDY0NA0KPj4+IGluZGV4IDAwMDAwMDAwMDAwMC4uMjdjYjNkOGRiZTNkDQo+ Pj4gLS0tIC9kZXYvbnVsbA0KPj4+ICsrKyBiL2RyaXZlcnMvdXNiL2NkbnMzL0tjb25maWcNCj4+ PiBAQCAtMCwwICsxLDQ0IEBADQo+Pj4gK2NvbmZpZyBVU0JfQ0ROUzMNCj4+PiArCXRyaXN0YXRl ICJDYWRlbmNlIFVTQjMgRHVhbC1Sb2xlIENvbnRyb2xsZXIiDQo+Pj4gKwlkZXBlbmRzIG9uIFVT Ql9TVVBQT1JUICYmIChVU0IgfHwgVVNCX0dBREdFVCkgJiYgSEFTX0RNQQ0KPj4+ICsJaGVscA0K Pj4+ICsJICBTYXkgWSBoZXJlIGlmIHlvdXIgc3lzdGVtIGhhcyBhIGNhZGVuY2UgVVNCMyBkdWFs LXJvbGUgY29udHJvbGxlci4NCj4+PiArCSAgSXQgc3VwcG9ydHM6IGR1YWwtcm9sZSBzd2l0Y2gs IEhvc3Qtb25seSwgYW5kIFBlcmlwaGVyYWwtb25seS4NCj4+PiArDQo+Pj4gKwkgIElmIHlvdSBj aG9vc2UgdG8gYnVpbGQgdGhpcyBkcml2ZXIgaXMgYSBkeW5hbWljYWxseSBsaW5rZWQNCj4+PiAr CSAgYXMgbW9kdWxlLCB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNkbnMzLmtvLg0KPj4+ICsN Cj4+PiAraWYgVVNCX0NETlMzDQo+Pj4gKw0KPj4+ICtjb25maWcgVVNCX0NETlMzX0dBREdFVA0K Pj4+ICsgICAgICAgIGJvb2wgIkNhZGVuY2UgVVNCMyBkZXZpY2UgY29udHJvbGxlciINCj4+PiAr ICAgICAgICBkZXBlbmRzIG9uIFVTQl9HQURHRVQNCj4+PiArICAgICAgICBoZWxwDQo+Pj4gKyAg ICAgICAgICBTYXkgWSBoZXJlIHRvIGVuYWJsZSBkZXZpY2UgY29udHJvbGxlciBmdW5jdGlvbmFs aXR5IG9mIHRoZQ0KPj4+ICsgICAgICAgICAgY2FkZW5jZSBVU0JTUy1ERVYgZHJpdmVyLg0KPj4+ ICsNCj4+PiArICAgICAgICAgIFRoaXMgY29udHJvbGxlciBzdXBwb3J0cyBGRiwgSFMgYW5kIFNT IG1vZGUuIEl0IGRvZXNuJ3Qgc3VwcG9ydA0KPj4+ICsgICAgICAgICAgTFMgYW5kIFNTUCBtb2Rl Lg0KPj4+ICsNCj4+PiArY29uZmlnIFVTQl9DRE5TM19IT1NUDQo+Pj4gKyAgICAgICAgYm9vbCAi Q2FkZW5jZSBVU0IzIGhvc3QgY29udHJvbGxlciINCj4+PiArICAgICAgICBkZXBlbmRzIG9uIFVT Ql9YSENJX0hDRA0KPj4+ICsgICAgICAgIGhlbHANCj4+PiArICAgICAgICAgIFNheSBZIGhlcmUg dG8gZW5hYmxlIGhvc3QgY29udHJvbGxlciBmdW5jdGlvbmFsaXR5IG9mIHRoZQ0KPj4+ICsgICAg ICAgICAgY2FkZW5jZSBkcml2ZXIuDQo+Pj4gKw0KPj4+ICsgICAgICAgICAgSG9zdCBjb250cm9s bGVyIGlzIGNvbXBsaWFudCB3aXRoIFhIQ0kgc28gaXQgd2lsbCB1c2UNCj4+PiArICAgICAgICAg IHN0YW5kYXJkIFhIQ0kgZHJpdmVyLg0KPj4+ICsNCj4+PiArY29uZmlnIFVTQl9DRE5TM19QQ0lf V1JBUA0KPj4+ICsJdHJpc3RhdGUgIkNhZGVuY2UgVVNCMyBzdXBwb3J0IG9uIFBDSWUtYmFzZWQg cGxhdGZvcm1zIg0KPj4+ICsJZGVwZW5kcyBvbiBVU0JfUENJICYmIEFDUEkNCj4+PiArCWRlZmF1 bHQgVVNCX0NETlMzDQo+Pj4gKwloZWxwDQo+Pj4gKwkgIElmIHlvdSdyZSB1c2luZyB0aGUgVVNC U1MgQ29yZSBJUCB3aXRoIGEgUENJZSwgcGxlYXNlIHNheQ0KPj4+ICsJICAnWScgb3IgJ00nIGhl cmUuDQo+Pj4gKw0KPj4+ICsJICBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIHRoaXMgZHJpdmVyIGFz IG1vZHVsZSBpdCB3aWxsDQo+Pj4gKwkgIGJlIGR5bmFtaWNhbGx5IGxpbmtlZCBhbmQgbW9kdWxl IHdpbGwgYmUgY2FsbGVkIGNkbnMzLXBjaS5rbw0KPj4+ICsNCj4+PiArZW5kaWYNCj4+PiBkaWZm IC0tZ2l0IGEvZHJpdmVycy91c2IvY2RuczMvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9jZG5zMy9N YWtlZmlsZQ0KPj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+Pj4gaW5kZXggMDAwMDAwMDAwMDAw Li44Zjk0Mzg1OTMzNzUNCj4+PiAtLS0gL2Rldi9udWxsDQo+Pj4gKysrIGIvZHJpdmVycy91c2Iv Y2RuczMvTWFrZWZpbGUNCj4+PiBAQCAtMCwwICsxLDE0IEBADQo+Pj4gKyMgU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEdQTC0yLjANCj4+PiArIyBkZWZpbmVfdHJhY2UuaCBuZWVkcyB0byBrbm93 IGhvdyB0byBmaW5kIG91ciBoZWFkZXINCj4+PiArQ0ZMQUdTX3RyYWNlLm8JCQkJOj0gLUkkKHNy YykNCj4+PiArDQo+Pj4gK2NkbnMzLXkJCQkJCTo9IGNvcmUubyBkcmQubyB0cmFjZS5vDQo+Pj4g Kw0KPj4+ICtvYmotJChDT05GSUdfVVNCX0NETlMzKQkJCSs9IGNkbnMzLm8NCj4+PiAraWZuZXEg KCQoQ09ORklHX0RFQlVHX0ZTKSwpDQo+Pj4gKwljZG5zMy15CQkJCSs9IGRlYnVnZnMubw0KPj4+ ICtlbmRpZg0KPj4+ICsNCj4+PiArY2RuczMtJChDT05GSUdfVVNCX0NETlMzX0dBREdFVCkJKz0g Z2FkZ2V0Lm8gZXAwLm8NCj4+PiArY2RuczMtJChDT05GSUdfVVNCX0NETlMzX0hPU1QpCQkrPSBo b3N0Lm8NCj4+PiArb2JqLSQoQ09ORklHX1VTQl9DRE5TM19QQ0lfV1JBUCkJKz0gY2RuczMtcGNp LXdyYXAubw0KPj53aGVuIGJ1aWxkIGFzIG1vZHVsZToNCj4+Q09ORklHX1VTQl9DRE5TMz1tDQo+ PkNPTkZJR19VU0JfQ0ROUzNfR0FER0VUPW0NCj4+Q09ORklHX1VTQl9DRE5TM19IT1NUPW0NCj4N Cj5Ib3cgeW91IHNldCBzdWNoIGNvbmZpZ3VyYXRpb24gPyBGcm9tIG1ha2UgbWVudWNvbmZpZyBp dCdzIGltcG9zc2libGUuDQo+DQo+PnRoZXJlIGlzIGFuIGVycm9yOg0KPj5FUlJPUjogImNkbnMz X2hhbmRzaGFrZSIgW2RyaXZlcnMvdXNiL2NkbnMzL2NkbnMzLmtvXSB1bmRlZmluZWQhDQo+Pg0K Pj53aGVuIG9ubHkgc2V0Og0KPj5DT05GSUdfVVNCX0NETlMzPXkNCj4+YWxzbyBlbmNvdW50ZXIg ZXJyb3JzOg0KPj5kcml2ZXJzL3VzYi9jZG5zMy9kcmQubzogSW4gZnVuY3Rpb24gYGNkbnMzX2Ry ZF9zd2l0Y2hfZ2FkZ2V0JzoNCj4+L2RyaXZlcnMvdXNiL2NkbnMzL2RyZC5jOjE3MzogdW5kZWZp bmVkIHJlZmVyZW5jZSB0byBgY2RuczNfaGFuZHNoYWtlJw0KPj5kcml2ZXJzL3VzYi9jZG5zMy9k cmQubzogSW4gZnVuY3Rpb24gYGNkbnMzX2RyZF9zd2l0Y2hfaG9zdCc6DQo+PmRyaXZlcnMvdXNi L2NkbnMzL2RyZC5jOjEzOTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgY2RuczNfaGFuZHNoYWtl Jw0KPg0KPkkgd2lsbCBjaGVjayB0aGlzLg0KPlRoYW5rcy4NCg0KVG8gZml4IHRoaXMgaXNzdWUg SSB3aWxsIG1vdmUgY2RuczNfaGFuZHNoYWtlIGZ1bmN0aW9uIHRvIGNvcmUuYyBmaWxlLiANCkkg a25vdyB0aGF0IGl0J3Mgbm90IGEgcGVyZmVjdCBwbGFjZSBmb3IgdGhpcyBmdW5jdGlvbiwgYnV0 IEkgZG9uJ3QgDQp3YW50IHRvIGNyZWF0ZSBuZXh0IC5jIGZpbGUgd2l0aCB0aGlzIGZ1bmN0aW9u Lg0KDQo+DQo+Pg0KPj4NCj4+DQo+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NkbnMzL2Nk bnMzLXBjaS13cmFwLmMgYi9kcml2ZXJzL3VzYi9jZG5zMy9jZG5zMy1wY2ktd3JhcC5jDQo+Pj4g bmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4+PiBpbmRleCAwMDAwMDAwMDAwMDAuLmQwYjJkM2Q5Yjk4 Mw0KPj4+IC0tLSAvZGV2L251bGwNCj4+PiArKysgYi9kcml2ZXJzL3VzYi9jZG5zMy9jZG5zMy1w Y2ktd3JhcC5jDQo+Pj4gQEAgLTAsMCArMSwxNTUgQEANCj4+PiArLy8gU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEdQTC0yLjANCj4+PiArLyoNCj4+PiArICogQ2FkZW5jZSBVU0JTUyBQQ0kgR2x1 ZSBkcml2ZXINCj4+PiArICoNCj4+PiArICogQ29weXJpZ2h0IChDKSAyMDE4IENhZGVuY2UuDQo+ Pj4gKyAqDQo+Pj4gKyAqIEF1dGhvcjogUGF3ZWwgTGFzemN6YWsgPHBhd2VsbEBjYWRlbmNlLmNv bT4NCj4+PiArICovDQo+Pj4gKw0KPj4+ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+DQo+Pj4g KyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4NCj4+PiArI2luY2x1ZGUgPGxpbnV4L3BjaS5oPg0K Pj4+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+DQo+Pj4gKyNpbmNsdWRlIDxs aW51eC9kbWEtbWFwcGluZy5oPg0KPj4+ICsjaW5jbHVkZSA8bGludXgvc2xhYi5oPg0KPj4+ICsN Cj4+PiArc3RydWN0IGNkbnMzX3dyYXAgew0KPj4+ICsJc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGxhdF9kZXY7DQo+Pj4gKwlzdHJ1Y3QgcGNpX2RldiAqaGdfZGV2Ow0KPj4+ICsJc3RydWN0IHJl c291cmNlIGRldl9yZXNbNF07DQo+Pj4gK307DQo+Pj4gKw0KPj4+ICtzdHJ1Y3QgY2RuczNfd3Jh cCB3cmFwOw0KPj5ub3QgdXNlZCBpbiBmYWN0Pw0KPg0KPlllcywgSSBmb3Jnb3QgdG8gcmVtb3Zl IGl0Lg0KPj4NCj4+PiArDQo+Pj4gKyNkZWZpbmUgUkVTX0lSUV9JRAkJMA0KPj4+ICsjZGVmaW5l IFJFU19IT1NUX0lECQkxDQo+Pj4gKyNkZWZpbmUgUkVTX0RFVl9JRAkJMg0KPj4+ICsjZGVmaW5l IFJFU19EUkRfSUQJCTMNCj4+PiArDQo+Pj4gKyNkZWZpbmUgUENJX0JBUl9IT1NUCQkwDQo+Pj4g KyNkZWZpbmUgUENJX0JBUl9ERVYJCTINCj4+PiArI2RlZmluZSBQQ0lfQkFSX09URwkJNA0KPj4+ ICsNCj4+PiArI2RlZmluZSBQQ0lfREVWX0ZOX0hPU1RfREVWSUNFCTANCj4+PiArI2RlZmluZSBQ Q0lfREVWX0ZOX09URwkJMQ0KPj4+ICsNCj4+PiArI2RlZmluZSBQQ0lfRFJJVkVSX05BTUUJCSJj ZG5zMy1wY2ktdXNic3MiDQo+Pj4gKyNkZWZpbmUgUExBVF9EUklWRVJfTkFNRQkiY2Rucy11c2Iz Ig0KPj4+ICsNCj4+PiArI2RlZmluZSBDRE5TX1ZFTkRPUl9JRCAweDE3Y2QNCj4+PiArI2RlZmlu ZSBDRE5TX0RFVklDRV9JRCAweDAxMDANCj4+PiArDQo+Pj4gKy8qKg0KPj4+ICsgKiBjZG5zM19w Y2lfcHJvYmUgLSBQcm9iZSBmdW5jdGlvbiBmb3IgQ2FkZW5jZSBVU0Igd3JhcHBlciBkcml2ZXIN Cj4+PiArICogQHBkZXY6IHBsYXRmb3JtIGRldmljZSBvYmplY3QNCj4+PiArICogQGlkOiBwY2kg ZGV2aWNlIGlkDQo+Pj4gKyAqDQo+Pj4gKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG90aGVyd2lz ZSBuZWdhdGl2ZSBlcnJubw0KPj4+ICsgKi8NCj4+PiArc3RhdGljIGludCBjZG5zM19wY2lfcHJv YmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsDQo+Pj4gKwkJCSAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2 aWNlX2lkICppZCkNCj4+PiArew0KPj4+ICsJc3RydWN0IHBsYXRmb3JtX2RldmljZV9pbmZvIHBs YXRfaW5mbzsNCj4+PiArCXN0cnVjdCBjZG5zM193cmFwICp3cmFwOw0KPj4+ICsJc3RydWN0IHJl c291cmNlICpyZXM7DQo+Pj4gKwlpbnQgZXJyOw0KPj4+ICsNCj4+PiArCS8qDQo+Pj4gKwkgKiBm b3IgR0FER0VUL0hPU1QgUENJIChkZXZmbikgZnVuY3Rpb24gbnVtYmVyIGlzIDAsDQo+Pj4gKwkg KiBmb3IgT1RHIFBDSSAoZGV2Zm4pIGZ1bmN0aW9uIG51bWJlciBpcyAxDQo+Pj4gKwkgKi8NCj4+ PiArCWlmICghaWQgfHwgcGRldi0+ZGV2Zm4gIT0gUENJX0RFVl9GTl9IT1NUX0RFVklDRSkNCj4+ PiArCQlyZXR1cm4gLUVJTlZBTDsNCj4+PiArDQo+Pj4gKwllcnIgPSBwY2ltX2VuYWJsZV9kZXZp Y2UocGRldik7DQo+Pj4gKwlpZiAoZXJyKSB7DQo+Pj4gKwkJZGV2X2VycigmcGRldi0+ZGV2LCAi RW5hYmxpbmcgUENJIGRldmljZSBoYXMgZmFpbGVkICVkXG4iLCBlcnIpOw0KPj4+ICsJCXJldHVy biBlcnI7DQo+Pj4gKwl9DQo+Pj4gKw0KPj4+ICsJcGNpX3NldF9tYXN0ZXIocGRldik7DQo+Pj4g Kwl3cmFwID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqd3JhcCksIEdGUF9LRVJO RUwpOw0KPj4+ICsJaWYgKCF3cmFwKSB7DQo+Pj4gKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFp bGVkIHRvIGFsbG9jYXRlIG1lbW9yeVxuIik7DQo+Pj4gKwkJcmV0dXJuIC1FTk9NRU07DQo+Pj4g Kwl9DQo+Pj4gKw0KPj4+ICsJLyogZnVuY3Rpb24gMDogaG9zdChCQVJfMCkgKyBkZXZpY2UoQkFS XzEpICsgb3RnKEJBUl8yKSkuICovDQo+Pj4gKwltZW1zZXQod3JhcC0+ZGV2X3JlcywgMHgwMCwN Cj4+PiArCSAgICAgICBzaXplb2Yoc3RydWN0IHJlc291cmNlKSAqIEFSUkFZX1NJWkUod3JhcC0+ ZGV2X3JlcykpOw0KPj5NYWJ5ZSBub3QgbmVjZXNzYXJ5LCBkZXZtX2t6YWxsb2MoKSBhbHJlYWR5 IHNldCB0aGVtIGFzIDA7DQo+DQo+WWVzLCBpdCdzIG5vdCBuZWNlc3NhcnkuDQo+Pg0KPj4+ICsJ ZGV2X2RiZygmcGRldi0+ZGV2LCAiSW5pdGlhbGl6ZSBEZXZpY2UgcmVzb3VyY2VzXG4iKTsNCj4+ PiArCXJlcyA9IHdyYXAtPmRldl9yZXM7DQo+Pj4gKw0KPj4+ICsJcmVzW1JFU19ERVZfSURdLnN0 YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIFBDSV9CQVJfREVWKTsNCj4+PiArCXJlc1tS RVNfREVWX0lEXS5lbmQgPSAgIHBjaV9yZXNvdXJjZV9lbmQocGRldiwgUENJX0JBUl9ERVYpOw0K Pj4+ICsJcmVzW1JFU19ERVZfSURdLm5hbWUgPSAiZGV2IjsNCj4+PiArCXJlc1tSRVNfREVWX0lE XS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNOw0KPj4+ICsJZGV2X2RiZygmcGRldi0+ZGV2LCAiVVNC U1MtREVWIHBoeXNpY2FsIGJhc2UgYWRkcjogJXBhXG4iLA0KPj4+ICsJCSZyZXNbUkVTX0RFVl9J RF0uc3RhcnQpOw0KPj4+ICsNCj4+PiArCXJlc1tSRVNfSE9TVF9JRF0uc3RhcnQgPSBwY2lfcmVz b3VyY2Vfc3RhcnQocGRldiwgUENJX0JBUl9IT1NUKTsNCj4+PiArCXJlc1tSRVNfSE9TVF9JRF0u ZW5kID0gcGNpX3Jlc291cmNlX2VuZChwZGV2LCBQQ0lfQkFSX0hPU1QpOw0KPj4+ICsJcmVzW1JF U19IT1NUX0lEXS5uYW1lID0gInhoY2kiOw0KPj4+ICsJcmVzW1JFU19IT1NUX0lEXS5mbGFncyA9 IElPUkVTT1VSQ0VfTUVNOw0KPj4+ICsJZGV2X2RiZygmcGRldi0+ZGV2LCAiVVNCU1MtWEhDSSBw aHlzaWNhbCBiYXNlIGFkZHI6ICVwYVxuIiwNCj4+PiArCQkmcmVzW1JFU19IT1NUX0lEXS5zdGFy dCk7DQo+Pj4gKw0KPj4+ICsJcmVzW1JFU19EUkRfSURdLnN0YXJ0ID0gcGNpX3Jlc291cmNlX3N0 YXJ0KHBkZXYsIFBDSV9CQVJfT1RHKTsNCj4+PiArCXJlc1tSRVNfRFJEX0lEXS5lbmQgPSAgIHBj aV9yZXNvdXJjZV9lbmQocGRldiwgUENJX0JBUl9PVEcpOw0KPj4+ICsJcmVzW1JFU19EUkRfSURd Lm5hbWUgPSAib3RnIjsNCj4+PiArCXJlc1tSRVNfRFJEX0lEXS5mbGFncyA9IElPUkVTT1VSQ0Vf TUVNOw0KPj4+ICsJZGV2X2RiZygmcGRldi0+ZGV2LCAiVVNCU1MtRFJEIHBoeXNpY2FsIGJhc2Ug YWRkcjogJXBhXG4iLA0KPj4+ICsJCSZyZXNbUkVTX0RSRF9JRF0uc3RhcnQpOw0KPj4+ICsNCj4+ PiArCS8qIEludGVycnVwdCBjb21tb24gZm9yIGJvdGggZGV2aWNlIGFuZCBYSENJICovDQo+Pj4g Kwl3cmFwLT5kZXZfcmVzW1JFU19JUlFfSURdLnN0YXJ0ID0gcGRldi0+aXJxOw0KPj4+ICsJd3Jh cC0+ZGV2X3Jlc1tSRVNfSVJRX0lEXS5uYW1lID0gImNkbnMzLWlycSI7DQo+Pj4gKwl3cmFwLT5k ZXZfcmVzW1JFU19JUlFfSURdLmZsYWdzID0gSU9SRVNPVVJDRV9JUlE7DQo+Pj4gKw0KPj4+ICsJ Lyogc2V0IHVwIHBsYXRmb3JtIGRldmljZSBpbmZvICovDQo+Pj4gKwltZW1zZXQoJnBsYXRfaW5m bywgMCwgc2l6ZW9mKHBsYXRfaW5mbykpOw0KPj4+ICsJcGxhdF9pbmZvLnBhcmVudCA9ICZwZGV2 LT5kZXY7DQo+Pj4gKwlwbGF0X2luZm8uZndub2RlID0gcGRldi0+ZGV2LmZ3bm9kZTsNCj4+PiAr CXBsYXRfaW5mby5uYW1lID0gUExBVF9EUklWRVJfTkFNRTsNCj4+PiArCXBsYXRfaW5mby5pZCA9 IHBkZXYtPmRldmZuOw0KPj4+ICsJcGxhdF9pbmZvLnJlcyA9IHdyYXAtPmRldl9yZXM7DQo+Pj4g KwlwbGF0X2luZm8ubnVtX3JlcyA9IEFSUkFZX1NJWkUod3JhcC0+ZGV2X3Jlcyk7DQo+Pj4gKwlw bGF0X2luZm8uZG1hX21hc2sgPSBwZGV2LT5kbWFfbWFzazsNCj4+PiArDQo+Pj4gKwkvKiByZWdp c3RlciBwbGF0Zm9ybSBkZXZpY2UgKi8NCj4+PiArCXdyYXAtPnBsYXRfZGV2ID0gcGxhdGZvcm1f ZGV2aWNlX3JlZ2lzdGVyX2Z1bGwoJnBsYXRfaW5mbyk7DQo+Pj4gKwlpZiAoSVNfRVJSKHdyYXAt PnBsYXRfZGV2KSkNCj4+PiArCQlyZXR1cm4gUFRSX0VSUih3cmFwLT5wbGF0X2Rldik7DQo+Pj4g Kw0KPj4+ICsJcGNpX3NldF9kcnZkYXRhKHBkZXYsIHdyYXApOw0KPj4+ICsNCj4+PiArCXJldHVy biBlcnI7DQo+Pj4gK30NCj4+PiArDQo+Pj4gK3ZvaWQgY2RuczNfcGNpX3JlbW92ZShzdHJ1Y3Qg cGNpX2RldiAqcGRldikNCj4+PiArew0KPj4+ICsJc3RydWN0IGNkbnMzX3dyYXAgKndyYXAgPSAo c3RydWN0IGNkbnMzX3dyYXAgKilwY2lfZ2V0X2RydmRhdGEocGRldik7DQo+Pj4gKw0KPj4+ICsJ cGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIod3JhcC0+cGxhdF9kZXYpOw0KPj4+ICt9DQo+Pj4g Kw0KPj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgY2RuczNfcGNpX2lkc1td ID0gew0KPj4+ICsJeyBQQ0lfREVWSUNFKENETlNfVkVORE9SX0lELCBDRE5TX0RFVklDRV9JRCks IH0sDQo+Pj4gKwl7IDAsIH0NCj4+PiArfTsNCj4+PiArDQo+Pj4gK3N0YXRpYyBzdHJ1Y3QgcGNp X2RyaXZlciBjZG5zM19wY2lfZHJpdmVyID0gew0KPj4+ICsJLm5hbWUgPSBQQ0lfRFJJVkVSX05B TUUsDQo+Pj4gKwkuaWRfdGFibGUgPSBjZG5zM19wY2lfaWRzLA0KPj4+ICsJLnByb2JlID0gY2Ru czNfcGNpX3Byb2JlLA0KPj4+ICsJLnJlbW92ZSA9IGNkbnMzX3BjaV9yZW1vdmUsDQo+Pj4gK307 DQo+Pj4gKw0KPj4+ICttb2R1bGVfcGNpX2RyaXZlcihjZG5zM19wY2lfZHJpdmVyKTsNCj4+PiAr TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGNkbnMzX3BjaV9pZHMpOw0KPj4+ICsNCj4+PiArTU9E VUxFX0FVVEhPUigiUGF3ZWwgTGFzemN6YWsgPHBhd2VsbEBjYWRlbmNlLmNvbT4iKTsNCj4+PiAr TU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOw0KPj4+ICtNT0RVTEVfREVTQ1JJUFRJT04oIkNhZGVu Y2UgVVNCU1MgUENJIHdyYXBwZXJyIik7DQo+Pj4gKw0KPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJz L3VzYi9jZG5zMy9jb3JlLmMgYi9kcml2ZXJzL3VzYi9jZG5zMy9jb3JlLmMNCj4+PiBuZXcgZmls ZSBtb2RlIDEwMDY0NA0KPj4+IGluZGV4IDAwMDAwMDAwMDAwMC4uYWEyZjYzMjQxZGFiDQo+Pj4g LS0tIC9kZXYvbnVsbA0KPj4+ICsrKyBiL2RyaXZlcnMvdXNiL2NkbnMzL2NvcmUuYw0KPj4+IEBA IC0wLDAgKzEsNDAzIEBADQo+Pj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w DQo+Pj4gKy8qDQo+Pj4gKyAqIENhZGVuY2UgVVNCU1MgRFJEIERyaXZlci4NCj4+PiArICoNCj4+ PiArICogQ29weXJpZ2h0IChDKSAyMDE4IENhZGVuY2UuDQo+Pj4gKyAqIENvcHlyaWdodCAoQykg MjAxNy0yMDE4IE5YUA0KPj4+ICsgKg0KPj4+ICsgKiBBdXRob3I6IFBldGVyIENoZW4gPHBldGVy LmNoZW5AbnhwLmNvbT4NCj4+PiArICogICAgICAgICBQYXdlbCBMYXN6Y3phayA8cGF3ZWxsQGNh ZGVuY2UuY29tPg0KPj4+ICsgKi8NCj4+PiArDQo+Pj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUu aD4NCj4+PiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPg0KPj4+ICsjaW5jbHVkZSA8bGludXgv cGxhdGZvcm1fZGV2aWNlLmg+DQo+Pj4gKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4NCj4+ PiArI2luY2x1ZGUgPGxpbnV4L2lvLmg+DQo+Pj4gKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1l Lmg+DQo+Pj4gKw0KPj4+ICsjaW5jbHVkZSAiZ2FkZ2V0LmgiDQo+Pj4gKyNpbmNsdWRlICJjb3Jl LmgiDQo+Pj4gKyNpbmNsdWRlICJob3N0LWV4cG9ydC5oIg0KPj4+ICsjaW5jbHVkZSAiZ2FkZ2V0 LWV4cG9ydC5oIg0KPj4+ICsjaW5jbHVkZSAiZHJkLmgiDQo+Pj4gKyNpbmNsdWRlICJkZWJ1Zy5o Ig0KPj4+ICsNCj4+PiArc3RhdGljIGlubGluZQ0KPj4+ICtzdHJ1Y3QgY2RuczNfcm9sZV9kcml2 ZXIgKmNkbnMzX2dldF9jdXJyZW50X3JvbGVfZHJpdmVyKHN0cnVjdCBjZG5zMyAqY2RucykNCj4+ PiArew0KPj4+ICsJV0FSTl9PTihjZG5zLT5yb2xlID49IENETlMzX1JPTEVfRU5EIHx8ICFjZG5z LT5yb2xlc1tjZG5zLT5yb2xlXSk7DQo+Pj4gKwlyZXR1cm4gY2Rucy0+cm9sZXNbY2Rucy0+cm9s ZV07DQo+Pj4gK30NCj4+PiArDQo+Pj4gK3N0YXRpYyBpbnQgY2RuczNfcm9sZV9zdGFydChzdHJ1 Y3QgY2RuczMgKmNkbnMsIGVudW0gY2RuczNfcm9sZXMgcm9sZSkNCj4+PiArew0KPj4+ICsJaW50 IHJldDsNCj4+PiArDQo+Pj4gKwlpZiAoV0FSTl9PTihyb2xlID49IENETlMzX1JPTEVfRU5EKSkN Cj4+PiArCQlyZXR1cm4gMDsNCj4+PiArDQo+Pj4gKwlpZiAoIWNkbnMtPnJvbGVzW3JvbGVdKQ0K Pj4+ICsJCXJldHVybiAtRU5YSU87DQo+Pj4gKw0KPj4+ICsJaWYgKGNkbnMtPnJvbGVzW3JvbGVd LT5zdGF0ZSA9PSBDRE5TM19ST0xFX1NUQVRFX0FDVElWRSkNCj4+PiArCQlyZXR1cm4gMDsNCj4+ PiArDQo+Pj4gKwltdXRleF9sb2NrKCZjZG5zLT5tdXRleCk7DQo+Pj4gKwljZG5zLT5yb2xlID0g cm9sZTsNCj4+PiArCXJldCA9IGNkbnMtPnJvbGVzW3JvbGVdLT5zdGFydChjZG5zKTsNCj4+PiAr CWlmICghcmV0KQ0KPj4+ICsJCWNkbnMtPnJvbGVzW3JvbGVdLT5zdGF0ZSA9IENETlMzX1JPTEVf U1RBVEVfQUNUSVZFOw0KPj4+ICsJbXV0ZXhfdW5sb2NrKCZjZG5zLT5tdXRleCk7DQo+Pj4gKwly ZXR1cm4gcmV0Ow0KPj4+ICt9DQo+Pj4gKw0KPj4+ICt2b2lkIGNkbnMzX3JvbGVfc3RvcChzdHJ1 Y3QgY2RuczMgKmNkbnMpDQo+Pj4gK3sNCj4+PiArCWVudW0gY2RuczNfcm9sZXMgcm9sZSA9IGNk bnMtPnJvbGU7DQo+Pj4gKw0KPj4+ICsJaWYgKHJvbGUgPj0gQ0ROUzNfUk9MRV9FTkQpIHsNCj4+ PiArCQlXQVJOX09OKHJvbGUgPiBDRE5TM19ST0xFX0VORCk7DQo+Pj4gKwkJcmV0dXJuOw0KPj4+ ICsJfQ0KPj4+ICsNCj4+PiArCWlmIChjZG5zLT5yb2xlc1tyb2xlXS0+c3RhdGUgPT0gQ0ROUzNf Uk9MRV9TVEFURV9JTkFDVElWRSkNCj4+PiArCQlyZXR1cm47DQo+Pj4gKw0KPj4+ICsJbXV0ZXhf bG9jaygmY2Rucy0+bXV0ZXgpOw0KPj4+ICsJY2Rucy0+cm9sZXNbcm9sZV0tPnN0b3AoY2Rucyk7 DQo+Pj4gKwljZG5zLT5yb2xlc1tyb2xlXS0+c3RhdGUgPSBDRE5TM19ST0xFX1NUQVRFX0lOQUNU SVZFOw0KPj4+ICsJbXV0ZXhfdW5sb2NrKCZjZG5zLT5tdXRleCk7DQo+Pj4gK30NCj4+PiArDQo+ Pj4gKy8qDQo+Pj4gKyAqIGNkbnMtPnJvbGUgZ2V0cyBmcm9tIGNkbnMzX2dldF9pbml0aWFsX3Jv bGUsIGFuZCB0aGlzIEFQSSB0ZWxscyByb2xlIGF0IHRoZQ0KPj4+ICsgKiBydW50aW1lLg0KPj4+ ICsgKiBJZiBib3RoIHJvbGVzIGFyZSBzdXBwb3J0ZWQsIHRoZSByb2xlIGlzIHNlbGVjdGVkIGJh c2VkIG9uIHZidXMvaWQuDQo+Pj4gKyAqIEl0IGNvdWxkIGJlIHJlYWQgZnJvbSBPVEcgcmVnaXN0 ZXIgb3IgZXh0ZXJuYWwgY29ubmVjdG9yLg0KPj4+ICsgKiBJZiBvbmx5IHNpbmdsZSByb2xlIGlz IHN1cHBvcnRlZCwgb25seSBvbmUgcm9sZSBzdHJ1Y3R1cmUNCj4+PiArICogaXMgYWxsb2NhdGVk LCBjZG5zLT5yb2xlc1tDRE5TM19ST0xFX0hPU1RdIG9yIGNkbnMtPnJvbGVzW0NETlMzX1JPTEVf R0FER0VUXS4NCj4+PiArICovDQo+Pj4gK3N0YXRpYyBlbnVtIGNkbnMzX3JvbGVzIGNkbnMzX2dl dF9pbml0aWFsX3JvbGUoc3RydWN0IGNkbnMzICpjZG5zKQ0KPj4+ICt7DQo+Pj4gKwlpZiAoY2Ru cy0+cm9sZXNbQ0ROUzNfUk9MRV9IT1NUXSAmJiBjZG5zLT5yb2xlc1tDRE5TM19ST0xFX0dBREdF VF0pIHsNCj4+PiArCQlpZiAoY2RuczNfaXNfaG9zdChjZG5zKSkNCj4+PiArCQkJcmV0dXJuIENE TlMzX1JPTEVfSE9TVDsNCj4+PiArCQlpZiAoY2RuczNfaXNfZGV2aWNlKGNkbnMpKQ0KPj4+ICsJ CQlyZXR1cm4gQ0ROUzNfUk9MRV9HQURHRVQ7DQo+Pj4gKwl9DQo+Pj4gKwlyZXR1cm4gY2Rucy0+ cm9sZXNbQ0ROUzNfUk9MRV9IT1NUXQ0KPj4+ICsJCT8gQ0ROUzNfUk9MRV9IT1NUDQo+Pj4gKwkJ OiBDRE5TM19ST0xFX0dBREdFVDsNCj4+PiArfQ0KPj4+ICsNCj4+PiArc3RhdGljIHZvaWQgY2Ru czNfZXhpdF9yb2xlcyhzdHJ1Y3QgY2RuczMgKmNkbnMpDQo+Pj4gK3sNCj4+PiArCWNkbnMzX3Jv bGVfc3RvcChjZG5zKTsNCj4+PiArCWNkbnMzX2RyZF9leGl0KGNkbnMpOw0KPj4+ICt9DQo+Pj4g Kw0KPj4+ICsvKioNCj4+PiArICogY2RuczNfY29yZV9pbml0X3JvbGUgLSBpbml0aWFsaXplIHJv bGUgb2Ygb3BlcmF0aW9uDQo+Pj4gKyAqIEBjZG5zOiBQb2ludGVyIHRvIGNkbnMzIHN0cnVjdHVy ZQ0KPj4+ICsgKg0KPj4+ICsgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvdGhlcndpc2UgbmVnYXRp dmUgZXJybm8NCj4+PiArICovDQo+Pj4gK3N0YXRpYyBpbnQgY2RuczNfY29yZV9pbml0X3JvbGUo c3RydWN0IGNkbnMzICpjZG5zKQ0KPj4+ICt7DQo+Pj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBj ZG5zLT5kZXY7DQo+Pj4gKwllbnVtIHVzYl9kcl9tb2RlIGJlc3RfZHJfbW9kZTsNCj4+PiArCWVu dW0gdXNiX2RyX21vZGUgZHJfbW9kZTsNCj4+PiArCWludCByZXQgPSAwOw0KPj4+ICsNCj4+PiAr CWRyX21vZGUgPSB1c2JfZ2V0X2RyX21vZGUoZGV2KTsNCj4+PiArCWNkbnMtPnJvbGUgPSBDRE5T M19ST0xFX0VORDsNCj4+PiArDQo+Pj4gKwkvKg0KPj4+ICsJICogSWYgZHJpdmVyIGNhbid0IHJl YWQgbW9kZSBieSBtZWFucyBvZiB1c2JfZ2V0X2RyX21kb2UgZnVuY3Rpb24gdGhlbg0KPj4+ICsJ ICogY2hvb3NlcyBtb2RlIGFjY29yZGluZyB3aXRoIEtlcm5lbCBjb25maWd1cmF0aW9uLiBUaGlz IHNldHRpbmcNCj4+PiArCSAqIGNhbiBiZSByZXN0cmljdGVkIGxhdGVyIGRlcGVuZGluZyBvbiBz dHJhcCBwaW4gY29uZmlndXJhdGlvbi4NCj4+PiArCSAqLw0KPj4+ICsJaWYgKGRyX21vZGUgPT0g VVNCX0RSX01PREVfVU5LTk9XTikgew0KPj4+ICsJCWlmIChJU19FTkFCTEVEKENPTkZJR19VU0Jf Q0ROUzNfSE9TVCkgJiYNCj4+PiArCQkgICAgSVNfRU5BQkxFRChDT05GSUdfVVNCX0NETlMzX0dB REdFVCkpDQo+Pj4gKwkJCWRyX21vZGUgPSBVU0JfRFJfTU9ERV9PVEc7DQo+Pj4gKwkJZWxzZSBp ZiAoSVNfRU5BQkxFRChDT05GSUdfVVNCX0NETlMzX0hPU1QpKQ0KPj4+ICsJCQlkcl9tb2RlID0g VVNCX0RSX01PREVfSE9TVDsNCj4+PiArCQllbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19VU0Jf Q0ROUzNfR0FER0VUKSkNCj4+PiArCQkJZHJfbW9kZSA9IFVTQl9EUl9NT0RFX1BFUklQSEVSQUw7 DQo+Pj4gKwl9DQo+Pj4gKw0KPj4+ICsJYmVzdF9kcl9tb2RlID0gVVNCX0RSX01PREVfT1RHOw0K Pj4+ICsNCj4+PiArCWlmIChkcl9tb2RlID09IFVTQl9EUl9NT0RFX09URykgew0KPj4+ICsJCWJl c3RfZHJfbW9kZSA9IGNkbnMtPmRyX21vZGU7DQo+Pj4gKwl9IGVsc2UgaWYgKGNkbnMtPmRyX21v ZGUgPT0gVVNCX0RSX01PREVfT1RHKSB7DQo+Pj4gKwkJYmVzdF9kcl9tb2RlID0gZHJfbW9kZTsN Cj4+PiArCX0gZWxzZSBpZiAoY2Rucy0+ZHJfbW9kZSAhPSBkcl9tb2RlKSB7DQo+Pj4gKwkJZGV2 X2VycihkZXYsICJJbmNvcnJlY3QgRFJEIGNvbmZpZ3VyYXRpb25cbiIpOw0KPj4+ICsJCXJldHVy biAtRUlOVkFMOw0KPj4+ICsJfQ0KPj4+ICsNCj4+PiArCWRyX21vZGUgPSBiZXN0X2RyX21vZGU7 DQo+Pj4gKw0KPj4+ICsJaWYgKGRyX21vZGUgPT0gVVNCX0RSX01PREVfT1RHIHx8IGRyX21vZGUg PT0gVVNCX0RSX01PREVfSE9TVCkgew0KPj4+ICsJCXJldCA9IGNkbnMzX2hvc3RfaW5pdChjZG5z KTsNCj4+PiArCQlpZiAocmV0KSB7DQo+Pj4gKwkJCWRldl9lcnIoZGV2LCAiSG9zdCBpbml0aWFs aXphdGlvbiBmYWlsZWQgd2l0aCAlZFxuIiwNCj4+PiArCQkJCXJldCk7DQo+Pj4gKwkJCWdvdG8g ZXJyOw0KPj4+ICsJCX0NCj4+PiArCX0NCj4+PiArDQo+Pj4gKwlpZiAoZHJfbW9kZSA9PSBVU0Jf RFJfTU9ERV9PVEcgfHwgZHJfbW9kZSA9PSBVU0JfRFJfTU9ERV9QRVJJUEhFUkFMKSB7DQo+Pj4g KwkJcmV0ID0gY2RuczNfZ2FkZ2V0X2luaXQoY2Rucyk7DQo+Pj4gKwkJaWYgKHJldCkgew0KPj4+ ICsJCQlkZXZfZXJyKGRldiwgIkRldmljZSBpbml0aWFsaXphdGlvbiBmYWlsZWQgd2l0aCAlZFxu IiwNCj4+PiArCQkJCXJldCk7DQo+Pj4gKwkJCWdvdG8gZXJyOw0KPj4+ICsJCX0NCj4+PiArCX0N Cj4+PiArDQo+Pj4gKwljZG5zLT5kZXNpcmVkX2RyX21vZGUgPSBkcl9tb2RlOw0KPj4+ICsJY2Ru cy0+ZHJfbW9kZSA9IGRyX21vZGU7DQo+Pj4gKwkvKg0KPj4+ICsJICogZHJfbW9kZSBjb3VsZCBi ZSBjaGFuZ2Ugc28gRFJEIG11c3QgdXBkYXRlIGNvbnRyb2xsZXINCj4+PiArCSAqIGNvbmZpZ3Vy YXRpb24NCj4+PiArCSAqLw0KPj4+ICsJcmV0ID0gY2RuczNfZHJkX3VwZGF0ZV9tb2RlKGNkbnMp Ow0KPj4+ICsJaWYgKHJldCkNCj4+PiArCQlnb3RvIGVycjsNCj4+PiArDQo+Pj4gKwljZG5zLT5y b2xlID0gY2RuczNfZ2V0X2luaXRpYWxfcm9sZShjZG5zKTsNCj4+PiArDQo+Pj4gKwlyZXQgPSBj ZG5zM19yb2xlX3N0YXJ0KGNkbnMsIGNkbnMtPnJvbGUpOw0KPj4+ICsJaWYgKHJldCkgew0KPj4+ ICsJCWRldl9lcnIoZGV2LCAiY2FuJ3Qgc3RhcnQgJXMgcm9sZVxuIiwNCj4+PiArCQkJY2RuczNf Z2V0X2N1cnJlbnRfcm9sZV9kcml2ZXIoY2RucyktPm5hbWUpOw0KPj4+ICsJCWdvdG8gZXJyOw0K Pj4+ICsJfQ0KPj4+ICsNCj4+PiArCXJldHVybiByZXQ7DQo+Pj4gK2VycjoNCj4+PiArCWNkbnMz X2V4aXRfcm9sZXMoY2Rucyk7DQo+Pj4gKwlyZXR1cm4gcmV0Ow0KPj4+ICt9DQo+Pj4gKw0KPj4+ ICsvKioNCj4+PiArICogY2RzbjNfZ2V0X3JlYWxfcm9sZSAtIGdldCByZWFsIHJvbGUgb2YgY29u dHJvbGxlciBiYXNlZCBvbiBoYXJkd2FyZSBzZXR0aW5ncy4NCj4+PiArICogQGNkbnM6IFBvaW50 ZXIgdG8gY2RuczMgc3RydWN0dXJlDQo+Pj4gKyAqDQo+Pj4gKyAqIFJldHVybnMgcm9sZQ0KPj4+ ICsgKi8NCj4+PiArZW51bSBjZG5zM19yb2xlcyBjZHNuM19nZXRfcmVhbF9yb2xlKHN0cnVjdCBj ZG5zMyAqY2RucykNCj4+PiArew0KPj4+ICsJZW51bSBjZG5zM19yb2xlcyByb2xlID0gQ0ROUzNf Uk9MRV9FTkQ7DQo+Pj4gKw0KPj4+ICsJaWYgKGNkbnMtPmN1cnJlbnRfZHJfbW9kZSA9PSBVU0Jf RFJfTU9ERV9PVEcpIHsNCj4+PiArCQlpZiAoY2RuczNfZ2V0X2lkKGNkbnMpKQ0KPj4+ICsJCQly b2xlID0gQ0ROUzNfUk9MRV9HQURHRVQ7DQo+Pj4gKwkJZWxzZQ0KPj4+ICsJCQlyb2xlID0gQ0RO UzNfUk9MRV9IT1NUOw0KPj4+ICsJfSBlbHNlIHsNCj4+PiArCQlpZiAoY2RuczNfaXNfaG9zdChj ZG5zKSkNCj4+PiArCQkJcm9sZSA9IENETlMzX1JPTEVfSE9TVDsNCj4+PiArCQlpZiAoY2RuczNf aXNfZGV2aWNlKGNkbnMpKQ0KPj4+ICsJCQlyb2xlID0gQ0ROUzNfUk9MRV9HQURHRVQ7DQo+Pj4g Kwl9DQo+Pj4gKw0KPj4+ICsJcmV0dXJuIHJvbGU7DQo+Pj4gK30NCj4+PiArDQo+Pj4gKy8qKg0K Pj4+ICsgKiBjZG5zM19yb2xlX3N3aXRjaCAtIHdvcmsgcXVldWUgaGFuZGxlciBmb3Igcm9sZSBz d2l0Y2gNCj4+PiArICoNCj4+PiArICogQHdvcms6IHdvcmsgcXVldWUgaXRlbSBzdHJ1Y3R1cmUN Cj4+PiArICoNCj4+PiArICogSGFuZGxlcyBiZWxvdyBldmVudHM6DQo+Pj4gKyAqIC0gUm9sZSBz d2l0Y2ggZm9yIGR1YWwtcm9sZSBkZXZpY2VzDQo+Pj4gKyAqIC0gQ0ROUzNfUk9MRV9HQURHRVQg PC0tPiBDRE5TM19ST0xFX0VORCBmb3IgcGVyaXBoZXJhbC1vbmx5IGRldmljZXMNCj4+PiArICov DQo+Pj4gK3N0YXRpYyB2b2lkIGNkbnMzX3JvbGVfc3dpdGNoKHN0cnVjdCB3b3JrX3N0cnVjdCAq d29yaykNCj4+PiArew0KPj4+ICsJZW51bSBjZG5zM19yb2xlcyByb2xlID0gQ0ROUzNfUk9MRV9F TkQ7DQo+Pj4gKwlzdHJ1Y3QgY2RuczNfcm9sZV9kcml2ZXIgKnJvbGVfZHJ2Ow0KPj4+ICsJZW51 bSBjZG5zM19yb2xlcyBjdXJyZW50X3JvbGU7DQo+Pj4gKwlzdHJ1Y3QgY2RuczMgKmNkbnM7DQo+ Pj4gKwlpbnQgcmV0ID0gMDsNCj4+PiArDQo+Pj4gKwljZG5zID0gY29udGFpbmVyX29mKHdvcmss IHN0cnVjdCBjZG5zMywgcm9sZV9zd2l0Y2hfd3EpOw0KPj4+ICsNCj4+PiArCS8qIER1cmluZyBz d2l0Y2hpbmcgY2Rucy0+cm9sZSBjYW4gYmUgZGlmZmVyZW50IHRoZW4gcm9sZSAqLw0KPj4+ICsJ cm9sZSA9IGNkc24zX2dldF9yZWFsX3JvbGUoY2Rucyk7DQo+Pj4gKw0KPj4+ICsJcm9sZV9kcnYg PSBjZG5zM19nZXRfY3VycmVudF9yb2xlX2RyaXZlcihjZG5zKTsNCj4+PiArDQo+Pj4gKwlwbV9y dW50aW1lX2dldF9zeW5jKGNkbnMtPmRldik7DQo+Pj4gKw0KPj4+ICsJLyogRGlzYWJsZSBjdXJy ZW50IHJvbGUuIFRoaXMgc3RhdGUgY2FuIGJlIGZvcmNlZCBmcm9tIHVzZXIgc3BhY2UuICovDQo+ Pj4gKwlpZiAoY2Rucy0+ZGVidWdfZGlzYWJsZSAmJiByb2xlX2Rydi0+c3RhdGUgPT0gQ0ROUzNf Uk9MRV9TVEFURV9BQ1RJVkUpIHsNCj4+PiArCQljZG5zM19yb2xlX3N0b3AoY2Rucyk7DQo+Pj4g KwkJZ290byBleGl0Ow0KPj4+ICsJfQ0KPj4+ICsNCj4+PiArCS8qIERvIG5vdGhpbmcgaWYgbm90 aGluZyBjaGFuZ2VkICovDQo+Pj4gKwlpZiAoY2Rucy0+cm9sZSA9PSByb2xlICYmIHJvbGVfZHJ2 LT5zdGF0ZSA9PSBDRE5TM19ST0xFX1NUQVRFX0FDVElWRSkNCj4+PiArCQlnb3RvIGV4aXQ7DQo+ Pj4gKw0KPj4+ICsJY2RuczNfcm9sZV9zdG9wKGNkbnMpOw0KPj4+ICsNCj4+PiArCXJvbGUgPSBj ZHNuM19nZXRfcmVhbF9yb2xlKGNkbnMpOw0KPj4+ICsNCj4+PiArCWN1cnJlbnRfcm9sZSA9IGNk bnMtPnJvbGU7DQo+Pj4gKwlkZXZfZGJnKGNkbnMtPmRldiwgIlN3aXRjaGluZyByb2xlIik7DQo+ Pj4gKw0KPj4+ICsJcmV0ID0gY2RuczNfcm9sZV9zdGFydChjZG5zLCByb2xlKTsNCj4+PiArCWlm IChyZXQpIHsNCj4+PiArCQkvKiBCYWNrIHRvIGN1cnJlbnQgcm9sZSAqLw0KPj4+ICsJCWRldl9l cnIoY2Rucy0+ZGV2LCAic2V0ICVkIGhhcyBmYWlsZWQsIGJhY2sgdG8gJWRcbiIsDQo+Pj4gKwkJ CXJvbGUsIGN1cnJlbnRfcm9sZSk7DQo+Pj4gKwkJY2RuczNfcm9sZV9zdGFydChjZG5zLCBjdXJy ZW50X3JvbGUpOw0KPj4+ICsJfQ0KPj4+ICtleGl0Og0KPj4+ICsJcG1fcnVudGltZV9wdXRfc3lu YyhjZG5zLT5kZXYpOw0KPj4+ICt9DQo+Pj4gKw0KPj4+ICsvKioNCj4+PiArICogY2RuczNfcHJv YmUgLSBwcm9iZSBmb3IgY2RuczMgY29yZSBkZXZpY2UNCj4+PiArICogQHBkZXY6IFBvaW50ZXIg dG8gY2RuczMgY29yZSBwbGF0Zm9ybSBkZXZpY2UNCj4+PiArICoNCj4+PiArICogUmV0dXJucyAw IG9uIHN1Y2Nlc3Mgb3RoZXJ3aXNlIG5lZ2F0aXZlIGVycm5vDQo+Pj4gKyAqLw0KPj4+ICtzdGF0 aWMgaW50IGNkbnMzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+Pj4gK3sN Cj4+PiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7DQo+Pj4gKwlzdHJ1Y3QgcmVz b3VyY2UJKnJlczsNCj4+PiArCXN0cnVjdCBjZG5zMyAqY2RuczsNCj4+PiArCXZvaWQgX19pb21l bSAqcmVnczsNCj4+PiArCWludCByZXQ7DQo+Pj4gKw0KPj4+ICsJY2RucyA9IGRldm1fa3phbGxv YyhkZXYsIHNpemVvZigqY2RucyksIEdGUF9LRVJORUwpOw0KPj4+ICsJaWYgKCFjZG5zKQ0KPj4+ ICsJCXJldHVybiAtRU5PTUVNOw0KPj4+ICsNCj4+PiArCWNkbnMtPmRldiA9IGRldjsNCj4+PiAr DQo+Pj4gKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBjZG5zKTsNCj4+PiArDQo+Pj4gKwly ZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOw0KPj4+ ICsJaWYgKCFyZXMpIHsNCj4+PiArCQlkZXZfZXJyKGRldiwgIm1pc3NpbmcgSVJRXG4iKTsNCj4+ PiArCQlyZXR1cm4gLUVOT0RFVjsNCj4+PiArCX0NCj4+PiArCWNkbnMtPmlycSA9IHJlcy0+c3Rh cnQ7DQo+Pj4gKw0KPj4+ICsJY2Rucy0+eGhjaV9yZXNbMF0gPSAqcmVzOw0KPj4+ICsNCj4+PiAr CS8qDQo+Pj4gKwkgKiBSZXF1ZXN0IG1lbW9yeSByZWdpb24NCj4+PiArCSAqIHJlZ2lvbi0wOiB4 SENJDQo+Pj4gKwkgKiByZWdpb24tMTogUGVyaXBoZXJhbA0KPj4+ICsJICogcmVnaW9uLTI6IE9U RyByZWdpc3RlcnMNCj4+PiArCSAqLw0KPj50aGUgY29tbWVudCBzaG91bGQgYmUgbW9kaWZpZWQg b3IgcmVtb3ZlZCBpZiBub3QgbmVjZXNzYXJ5IHdoZW4gY29kZXMNCj4+Y2hhbmdlZC4NCj4NCj5Z ZXMsIG5vdyBpdCdzIG5vdCBuZWNlc3NhcnkuDQo+DQo+Pj4gKwlyZXMgPSBwbGF0Zm9ybV9nZXRf cmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAieGhjaSIpOw0KPj4+ICsJaWYg KCFyZXMpDQo+Pj4gKwkJcmV0dXJuIC1FTlhJTzsNCj4+PiArDQo+Pj4gKwljZG5zLT54aGNpX3Jl c1sxXSA9ICpyZXM7DQo+Pj4gKw0KPj4+ICsJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5 bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgImRldiIpOw0KPj4+ICsJcmVncyA9IGRldm1faW9y ZW1hcF9yZXNvdXJjZShkZXYsIHJlcyk7DQo+Pj4gKwlpZiAoSVNfRVJSKHJlZ3MpKQ0KPj4+ICsJ CXJldHVybiBQVFJfRVJSKHJlZ3MpOw0KPj4+ICsJY2Rucy0+ZGV2X3JlZ3MJPSByZWdzOw0KPj4+ ICsNCj4+PiArCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNP VVJDRV9NRU0sICJvdGciKTsNCj4+PiArCWlmICghcmVzKQ0KPj4+ICsJCXJldHVybiAtRU5YSU87 DQo+Pj4gKw0KPj4+ICsJY2Rucy0+b3RnX3JlcyA9ICpyZXM7DQo+Pj4gKw0KPj4+ICsJbXV0ZXhf aW5pdCgmY2Rucy0+bXV0ZXgpOw0KPj4+ICsNCj4+PiArCWNkbnMtPnBoeSA9IGRldm1fcGh5X29w dGlvbmFsX2dldChkZXYsICJjZG5zMyx1c2JwaHkiKTsNCj4+PiArCWlmIChJU19FUlIoY2Rucy0+ cGh5KSkNCj4+PiArCQlyZXR1cm4gUFRSX0VSUihjZG5zLT5waHkpOw0KPj4+ICsNCj4+PiArCXBo eV9pbml0KGNkbnMtPnBoeSk7DQo+PmNoZWNrIHRoZSByZXR1cm4gdmFsdWU/IGFuZA0KPj5JdCdz IGJldHRlciB0byBjYWxsIHBoeV9wb3dlcl9vbigpIGhlcmUgZXZlbiBpZiB0aGUgcGh5IGRyaXZl ciBkb2Vzbid0DQo+PnByb3ZpZGUgcG93ZXJfb24oKQ0KPg0KPkRyaXZlciBkb2Vzbid0IG5lZWQg dG8gY2hlY2sgcmV0dXJuIHZhbHVlIGluIHRoaXMgY2FzZS4gSXQgd2FzIGRpc2N1c3NlZCBzb21l IHRpbWUgYWdvLg0KPg0KPj4NCj4+PiArDQo+Pj4gKwlJTklUX1dPUksoJmNkbnMtPnJvbGVfc3dp dGNoX3dxLCBjZG5zM19yb2xlX3N3aXRjaCk7DQo+Pj4gKw0KPj4+ICsJcmV0ID0gY2RuczNfZHJk X2luaXQoY2Rucyk7DQo+Pj4gKwlpZiAocmV0KQ0KPj4+ICsJCWdvdG8gZXJyOw0KPj4+ICsNCj4+ PiArCXJldCA9IGNkbnMzX2NvcmVfaW5pdF9yb2xlKGNkbnMpOw0KPj4+ICsJaWYgKHJldCkNCj4+ PiArCQlnb3RvIGVycjsNCj4+PiArDQo+Pj4gKwljZG5zM19kZWJ1Z2ZzX2luaXQoY2Rucyk7DQo+ Pj4gKwlkZXZpY2Vfc2V0X3dha2V1cF9jYXBhYmxlKGRldiwgdHJ1ZSk7DQo+Pj4gKwlwbV9ydW50 aW1lX3NldF9hY3RpdmUoZGV2KTsNCj4+PiArCXBtX3J1bnRpbWVfZW5hYmxlKGRldik7DQo+Pj4g Kw0KPj4+ICsJLyoNCj4+PiArCSAqIFRoZSBjb250cm9sbGVyIG5lZWRzIGxlc3MgdGltZSBiZXR3 ZWVuIGJ1cyBhbmQgY29udHJvbGxlciBzdXNwZW5kLA0KPj4+ICsJICogYW5kIHdlIGFsc28gbmVl ZHMgYSBzbWFsbCBkZWxheSB0byBhdm9pZCBmcmVxdWVudGx5IGVudGVyaW5nIGxvdw0KPj4+ICsJ ICogcG93ZXIgbW9kZS4NCj4+PiArCSAqLw0KPj4+ICsJcG1fcnVudGltZV9zZXRfYXV0b3N1c3Bl bmRfZGVsYXkoZGV2LCAyMCk7DQo+Pj4gKwlwbV9ydW50aW1lX21hcmtfbGFzdF9idXN5KGRldik7 DQo+Pj4gKwlwbV9ydW50aW1lX3VzZV9hdXRvc3VzcGVuZChkZXYpOw0KPj4+ICsJZGV2X2RiZyhk ZXYsICJDYWRlbmNlIFVTQjMgY29yZTogcHJvYmUgc3VjY2VlZFxuIik7DQo+Pj4gKw0KPj4+ICsJ cmV0dXJuIDA7DQo+Pj4gKw0KPj4+ICtlcnI6DQo+Pj4gKwlwaHlfZXhpdChjZG5zLT5waHkpOw0K Pj4+ICsJcmV0dXJuIHJldDsNCj4+PiArfQ0KPj4+ICsNCj4+PiArLyoqDQo+Pj4gKyAqIGNkbnMz X3JlbW92ZSAtIHVuYmluZCBkcmQgZHJpdmVyIGFuZCBjbGVhbiB1cA0KPj4+ICsgKiBAcGRldjog UG9pbnRlciB0byBMaW51eCBwbGF0Zm9ybSBkZXZpY2UNCj4+PiArICoNCj4+PiArICogUmV0dXJu cyAwIG9uIHN1Y2Nlc3Mgb3RoZXJ3aXNlIG5lZ2F0aXZlIGVycm5vDQo+Pj4gKyAqLw0KPj4+ICtz dGF0aWMgaW50IGNkbnMzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KPj4+ ICt7DQo+Pj4gKwlzdHJ1Y3QgY2RuczMgKmNkbnMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2 KTsNCj4+PiArDQo+Pj4gKwlwbV9ydW50aW1lX2dldF9zeW5jKCZwZGV2LT5kZXYpOw0KPj4+ICsJ cG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOw0KPj4+ICsJcG1fcnVudGltZV9wdXRfbm9p ZGxlKCZwZGV2LT5kZXYpOw0KPj4+ICsJY2RuczNfZGVidWdmc19leGl0KGNkbnMpOw0KPj4+ICsJ Y2RuczNfZXhpdF9yb2xlcyhjZG5zKTsNCj4+PiArCXBoeV9leGl0KGNkbnMtPnBoeSk7DQo+Pj4g KwlyZXR1cm4gMDsNCj4+PiArfQ0KPj4+ICsNCj4+PiArI2lmZGVmIENPTkZJR19PRg0KPj4+ICtz dGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBvZl9jZG5zM19tYXRjaFtdID0gew0KPj4+ ICsJeyAuY29tcGF0aWJsZSA9ICJjZG5zLHVzYjMtMS4wLjAiIH0sDQo+Pj4gKwl7IC5jb21wYXRp YmxlID0gImNkbnMsdXNiMy0xLjAuMSIgfSwNCj4+PiArCXsgfSwNCj4+PiArfTsNCj4+PiArTU9E VUxFX0RFVklDRV9UQUJMRShvZiwgb2ZfY2RuczNfbWF0Y2gpOw0KPj4+ICsjZW5kaWYNCj4+PiAr DQo+Pj4gK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGNkbnMzX2RyaXZlciA9IHsNCj4+ PiArCS5wcm9iZQkJPSBjZG5zM19wcm9iZSwNCj4+PiArCS5yZW1vdmUJCT0gY2RuczNfcmVtb3Zl LA0KPj4+ICsJLmRyaXZlcgkJPSB7DQo+Pj4gKwkJLm5hbWUJPSAiY2Rucy11c2IzIiwNCj4+PiAr CQkub2ZfbWF0Y2hfdGFibGUJPSBvZl9tYXRjaF9wdHIob2ZfY2RuczNfbWF0Y2gpLA0KPj4+ICsJ fSwNCj4+PiArfTsNCj4+PiArDQo+Pj4gK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoY2RuczNfZHJp dmVyKTsNCj4+PiArDQo+Pj4gK01PRFVMRV9BTElBUygicGxhdGZvcm06Y2RuczMiKTsNCj4+PiAr TU9EVUxFX0FVVEhPUigiUGF3ZWwgTGFzemN6YWsgPHBhd2VsbEBjYWRlbmNlLmNvbT4iKTsNCj4+ PiArTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOw0KPj4+ICtNT0RVTEVfREVTQ1JJUFRJT04oIkNh ZGVuY2UgVVNCMyBEUkQgQ29udHJvbGxlciBEcml2ZXIiKTsNCj4+PiBkaWZmIC0tZ2l0IGEvZHJp dmVycy91c2IvY2RuczMvY29yZS5oIGIvZHJpdmVycy91c2IvY2RuczMvY29yZS5oDQo+Pj4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQNCj4+PiBpbmRleCAwMDAwMDAwMDAwMDAuLmZiNGIzOTIwNjE1OA0K Pj4+IC0tLSAvZGV2L251bGwNCj4+PiArKysgYi9kcml2ZXJzL3VzYi9jZG5zMy9jb3JlLmgNCj4+ PiBAQCAtMCwwICsxLDExNiBAQA0KPj4+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMCAqLw0KPj4+ICsvKg0KPj4+ICsgKiBDYWRlbmNlIFVTQlNTIERSRCBIZWFkZXIgRmlsZS4N Cj4+PiArICoNCj4+PiArICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggTlhQDQo+Pj4gKyAqIENv cHlyaWdodCAoQykgMjAxOCBDYWRlbmNlLg0KPj4+ICsgKg0KPj4+ICsgKiBBdXRob3JzOiBQZXRl ciBDaGVuIDxwZXRlci5jaGVuQG54cC5jb20+DQo+Pj4gKyAqICAgICAgICAgIFBhd2VsIExhc3pj emFrIDxwYXdlbGxAY2FkZW5jZS5jb20+DQo+Pj4gKyAqLw0KPj4+ICsjaW5jbHVkZSA8bGludXgv dXNiL290Zy5oPg0KPj4+ICsNCj4+PiArI2lmbmRlZiBfX0xJTlVYX0NETlMzX0NPUkVfSA0KPj4+ ICsjZGVmaW5lIF9fTElOVVhfQ0ROUzNfQ09SRV9IDQo+Pj4gKw0KPj4+ICtzdHJ1Y3QgY2RuczM7 DQo+Pj4gK2VudW0gY2RuczNfcm9sZXMgew0KPj4+ICsJQ0ROUzNfUk9MRV9IT1NUID0gMCwNCj4+ PiArCUNETlMzX1JPTEVfR0FER0VULA0KPj4+ICsJQ0ROUzNfUk9MRV9FTkQsDQo+Pj4gK307DQo+ Pj4gKw0KPj4+ICsvKioNCj4+PiArICogc3RydWN0IGNkbnMzX3JvbGVfZHJpdmVyIC0gaG9zdC9n YWRnZXQgcm9sZSBkcml2ZXINCj4+PiArICogQHN0YXJ0OiBzdGFydCB0aGlzIHJvbGUNCj4+PiAr ICogQHN0b3A6IHN0b3AgdGhpcyByb2xlDQo+Pj4gKyAqIEBzdXNwZW5kOiBzdXNwZW5kIGNhbGxi YWNrIGZvciB0aGlzIHJvbGUNCj4+PiArICogQHJlc3VtZTogcmVzdW1lIGNhbGxiYWNrIGZvciB0 aGlzIHJvbGUNCj4+PiArICogQGlycTogaXJxIGhhbmRsZXIgZm9yIHRoaXMgcm9sZQ0KPj5ubyBp cnEgbWVtYmVyLA0KPj4+ICsgKiBAbmFtZTogcm9sZSBuYW1lIHN0cmluZyAoaG9zdC9nYWRnZXQp DQo+Pj4gKyAqIEBzdGF0ZTogY3VycmVudCBzdGF0ZQ0KPj4+ICsgKi8NCj4+PiArc3RydWN0IGNk bnMzX3JvbGVfZHJpdmVyIHsNCj4+PiArCWludCAoKnN0YXJ0KShzdHJ1Y3QgY2RuczMgKmNkbnMp Ow0KPj4+ICsJdm9pZCAoKnN0b3ApKHN0cnVjdCBjZG5zMyAqY2Rucyk7DQo+Pj4gKwlpbnQgKCpz dXNwZW5kKShzdHJ1Y3QgY2RuczMgKmNkbnMsIGJvb2wgZG9fd2FrZXVwKTsNCj4+PiArCWludCAo KnJlc3VtZSkoc3RydWN0IGNkbnMzICpjZG5zLCBib29sIGhpYmVybmF0ZWQpOw0KPj4+ICsJY29u c3QgY2hhciAqbmFtZTsNCj4+PiArI2RlZmluZSBDRE5TM19ST0xFX1NUQVRFX0lOQUNUSVZFCTAN Cj4+PiArI2RlZmluZSBDRE5TM19ST0xFX1NUQVRFX0FDVElWRQkJMQ0KPj4+ICsJaW50IHN0YXRl Ow0KPj4+ICt9Ow0KPj4+ICsNCj4+PiArI2RlZmluZSBDRE5TM19YSENJX1JFU09VUkNFU19OVU0J Mg0KPj4+ICsvKioNCj4+PiArICogc3RydWN0IGNkbnMzIC0gUmVwcmVzZW50YXRpb24gb2YgQ2Fk ZW5jZSBVU0IzIERSRCBjb250cm9sbGVyLg0KPj4+ICsgKiBAZGV2OiBwb2ludGVyIHRvIENhZGVu Y2UgZGV2aWNlIHN0cnVjdA0KPj4+ICsgKiBAeGhjaV9yZWdzOiBwb2ludGVyIHRvIGJhc2Ugb2Yg eGhjaSByZWdpc3RlcnMNCj4+PiArICogQHhoY2lfcmVzOiB0aGUgcmVzb3VyY2UgZm9yIHhoY2kN Cj4+PiArICogQGRldl9yZWdzOiBwb2ludGVyIHRvIGJhc2Ugb2YgZGV2IHJlZ2lzdGVycw0KPj4+ ICsgKiBAb3RnX3JlZ3M6IHBvaW50ZXIgdG8gYmFzZSBvZiBvdGcgcmVnaXN0ZXJzDQo+Pm5vdCBw b2ludGVyDQo+DQo+V2h5ID8NCj5zdHJ1Y3QgY2RuczNfb3RnX2NvbW1vbl9yZWdzCSpvdGdfcmVn czsNCj4NCj5CdXQgSSBmb3Jnb3Q6DQo+ICogQG90Z19yZXM6IHRoZSByZXNvdXJjZSBmb3Igb3Rn DQo+ICogQG90Z192MF9yZWdzOiBwb2ludGVyIHRvIGJhc2Ugb2YgdjAgb3RnIHJlZ2lzdGVycw0K PiAqIEBvdGdfdjFfcmVnczogcG9pbnRlciB0byBiYXNlIG9mIHYxIG90ZyByZWdpc3RlcnMNCj4N Cj4+PiArICogQGlycTogaXJxIG51bWJlciBmb3IgY29udHJvbGxlcg0KPj4+ICsgKiBAcm9sZXM6 IGFycmF5IG9mIHN1cHBvcnRlZCByb2xlcyBmb3IgdGhpcyBjb250cm9sbGVyDQo+Pj4gKyAqIEBy b2xlOiBjdXJyZW50IHJvbGUNCj4+PiArICogQGhvc3RfZGV2OiB0aGUgY2hpbGQgaG9zdCBkZXZp Y2UgcG9pbnRlciBmb3IgY2RuczMgY29yZQ0KPj4+ICsgKiBAZ2FkZ2V0X2RldjogdGhlIGNoaWxk IGdhZGdldCBkZXZpY2UgcG9pbnRlciBmb3IgY2RuczMgY29yZQ0KPj4+ICsgKiBAdXNiOiBwaHkg Zm9yIHRoaXMgY29udHJvbGxlcg0KPj4+ICsgKiBAcm9sZV9zd2l0Y2hfd3E6IHdvcmsgcXVldWUg aXRlbSBmb3Igcm9sZSBzd2l0Y2gNCj4+PiArICogQGluX2xwbTogdGhlIGNvbnRyb2xsZXIgaW4g bG93IHBvd2VyIG1vZGUNCj4+PiArICogQHdha2V1cF9pbnQ6IHRoZSB3YWtldXAgaW50ZXJydXB0 DQo+Pj4gKyAqIEBtdXRleDogdGhlIG11dGV4IGZvciBjb25jdXJyZW50IGNvZGUgYXQgZHJpdmVy DQo+Pj4gKyAqIEBkcl9tb2RlOiBzdXBwb3J0ZWQgbW9kZSBvZiBvcGVyYXRpb24gaXQgY2FuIGJl IG9ubHkgSG9zdCwgb25seSBEZXZpY2UNCj4+PiArICogICAgICAgICAgIG9yIE9URyBtb2RlIHRo YXQgYWxsb3cgdG8gc3dpdGNoIGJldHdlZW4gRGV2aWNlIGFuZCBIb3N0IG1vZGUuDQo+Pj4gKyAq ICAgICAgICAgICBUaGlzIGZpZWxkIGJhc2VkIG9uIGZpcm13YXJlIHNldHRpbmcsIGtlcm5lbCBj b25maWd1cmF0aW9uDQo+Pj4gKyAqICAgICAgICAgICBhbmQgaGFyZHdhcmUgY29uZmlndXJhdGlv bi4NCj4+PiArICogQGN1cnJlbnRfZHJfbW9kZTogY3VycmVudCBtb2RlIG9mIG9wZXJhdGlvbiB3 aGVuIGluIGR1YWwtcm9sZSBtb2RlDQo+Pj4gKyAqIEBkZXNpcmVkX2RyX21vZGU6IGRlc2lyZWQg bW9kZSBvZiBvcGVyYXRpb24gd2hlbiBpbiBkdWFsLXJvbGUgbW9kZS4NCj4+PiArICogICAgICAg ICAgIFRoaXMgdmFsdWUgY2FuIGJlIGNoYW5nZWQgZHVyaW5nIHJ1bnRpbWUuDQo+Pj4gKyAqICAg ICAgICAgICBBdmFpbGFibGUgb3B0aW9ucyBkZXBlbmRzIG9uICBkcl9tb2RlOg0KPj4+ICsgKiAg ICAgICAgICAgZHJfbW9kZSAgICAgICAgICAgICAgICAgfCAgZGVzaXJlZF9kcl9tb2RlIGFuZCBj dXJyZW50X2RyX21vZGUNCj4+PiArICogICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4+PiArICogICAgICAg ICAgIFVTQl9EUl9NT0RFX0hPU1QgICAgICAgIHwgb25seSBVU0JfRFJfTU9ERV9IT1NUDQo+Pj4g KyAqICAgICAgICAgICBVU0JfRFJfTU9ERV9QRVJJUEhFUkFMICB8IG9ubHkgVVNCX0RSX01PREVf UEVSSVBIRVJBTA0KPj4+ICsgKiAgICAgICAgICAgVVNCX0RSX01PREVfT1RHICAgICAgICAgfCBv bmx5IFVTQl9EUl9NT0RFX0hPU1QNCj4+PiArICogICAgICAgICAgIFVTQl9EUl9NT0RFX09URyAg ICAgICAgIHwgb25seSBVU0JfRFJfTU9ERV9QRVJJUEhFUkFMDQo+Pj4gKyAqICAgICAgICAgICBV U0JfRFJfTU9ERV9PVEcgICAgICAgICB8IFVTQl9EUl9NT0RFX09URw0KPj4+ICsgKg0KPj4+ICsg KiAgICAgICAgICAgRGVzaXJlZF9kcl9yb2xlIGNhbiBiZSBjaGFuZ2VkIGJ5IG1lYW5zIG9mIGRl YnVnZnMuDQo+Pj4gKyAqIEByb290OiBkZWJ1Z2ZzIHJvb3QgZm9sZGVyIHBvaW50ZXINCj4+PiAr ICogQGRlYnVnX2Rpc2FibGU6DQo+Pj4gKyAqLw0KPj4+ICtzdHJ1Y3QgY2RuczMgew0KPj4+ICsJ c3RydWN0IGRldmljZQkJCSpkZXY7DQo+Pj4gKwl2b2lkIF9faW9tZW0JCQkqeGhjaV9yZWdzOw0K Pj4+ICsJc3RydWN0IHJlc291cmNlCQkJeGhjaV9yZXNbQ0ROUzNfWEhDSV9SRVNPVVJDRVNfTlVN XTsNCj4+PiArCXN0cnVjdCBjZG5zM191c2JfcmVncyBfX2lvbWVtCSpkZXZfcmVnczsNCj4+PiAr DQo+Pj4gKwlzdHJ1Y3QgcmVzb3VyY2UJCQlvdGdfcmVzOw0KPj4+ICsJc3RydWN0IGNkbnMzX290 Z19sZWdhY3lfcmVncwkqb3RnX3YwX3JlZ3M7DQo+Pj4gKwlzdHJ1Y3QgY2RuczNfb3RnX3JlZ3MJ CSpvdGdfdjFfcmVnczsNCj4+PiArCXN0cnVjdCBjZG5zM19vdGdfY29tbW9uX3JlZ3MJKm90Z19y ZWdzOw0KPj4+ICsjZGVmaW5lIENETlMzX0NPTlRST0xMRVJfVjAJMA0KPj4+ICsjZGVmaW5lIENE TlMzX0NPTlRST0xMRVJfVjEJMQ0KPj4+ICsJdTMyCQkJCXZlcnNpb247DQo+Pj4gKw0KPj4+ICsJ aW50CQkJCWlycTsNCj4+PiArCXN0cnVjdCBjZG5zM19yb2xlX2RyaXZlcgkqcm9sZXNbQ0ROUzNf Uk9MRV9FTkRdOw0KPj4+ICsJZW51bSBjZG5zM19yb2xlcwkJcm9sZTsNCj4+PiArCXN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UJCSpob3N0X2RldjsNCj4+PiArCXN0cnVjdCBjZG5zM19kZXZpY2UJCSpn YWRnZXRfZGV2Ow0KPj4+ICsJc3RydWN0IHBoeQkJCSpwaHk7DQo+PkRvZXMgdGhlIHNpbmdsZSBw aHkgc3VwcG9ydCBib3RoIEhTIGFuZCBTUz8NCj4+PiArCXN0cnVjdCB3b3JrX3N0cnVjdAkJcm9s ZV9zd2l0Y2hfd3E7DQo+Pj4gKwlpbnQJCQkJaW5fbHBtOjE7DQo+Pj4gKwlpbnQJCQkJd2FrZXVw X2ludDoxOw0KPj4+ICsJLyogbXV0ZXh0IHVzZWQgaW4gd29ya3F1ZXVlKi8NCj4+PiArCXN0cnVj dCBtdXRleAkJCW11dGV4Ow0KPj4+ICsJZW51bSB1c2JfZHJfbW9kZQkJZHJfbW9kZTsNCj4+PiAr CWVudW0gdXNiX2RyX21vZGUJCWN1cnJlbnRfZHJfbW9kZTsNCj4+PiArCWVudW0gdXNiX2RyX21v ZGUJCWRlc2lyZWRfZHJfbW9kZTsNCj4+PiArCXN0cnVjdCBkZW50cnkJCQkqcm9vdDsNCj4+PiAr CWludAkJCQlkZWJ1Z19kaXNhYmxlOjE7DQo+Pj4gK307DQo+Pj4gKw0KPj4+ICt2b2lkIGNkbnMz X3JvbGVfc3RvcChzdHJ1Y3QgY2RuczMgKmNkbnMpOw0KPj4+ICsNCj4+PiArI2VuZGlmIC8qIF9f TElOVVhfQ0ROUzNfQ09SRV9IICovDQo+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NkbnMz L2RlYnVnLmggYi9kcml2ZXJzL3VzYi9jZG5zMy9kZWJ1Zy5oDQo+Pj4gbmV3IGZpbGUgbW9kZSAx MDA2NDQNCj4+PiBpbmRleCAwMDAwMDAwMDAwMDAuLjE5MjllZGIzYTUyMQ0KPj4+IC0tLSAvZGV2 L251bGwNCj4+PiArKysgYi9kcml2ZXJzL3VzYi9jZG5zMy9kZWJ1Zy5oDQo+Pj4gQEAgLTAsMCAr MSwxNjggQEANCj4+PiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8NCj4+ PiArLyoNCj4+PiArICogQ2FkZW5jZSBVU0JTUyBEUkQgRHJpdmVyLg0KPj4+ICsgKiBEZWJ1ZyBo ZWFkZXIgZmlsZS4NCj4+PiArICoNCj4+PiArICogQ29weXJpZ2h0IChDKSAyMDE4IENhZGVuY2Uu DQo+Pj4gKyAqDQo+Pj4gKyAqIEF1dGhvcjogUGF3ZWwgTGFzemN6YWsgPHBhd2VsbEBjYWRlbmNl LmNvbT4NCj4+PiArICovDQo+Pj4gKyNpZm5kZWYgX19MSU5VWF9DRE5TM19ERUJVRw0KPj4+ICsj ZGVmaW5lIF9fTElOVVhfQ0ROUzNfREVCVUcNCj4+PiArDQo+Pj4gKyNpbmNsdWRlICJjb3JlLmgi DQo+Pj4gKw0KPj4+ICtzdGF0aWMgaW5saW5lIGNoYXIgKmNkbnMzX2RlY29kZV91c2JfaXJxKGNo YXIgKnN0ciwNCj4+PiArCQkJCQkgZW51bSB1c2JfZGV2aWNlX3NwZWVkIHNwZWVkLA0KPj4+ICsJ CQkJCSB1MzIgdXNiX2lzdHMpDQo+Pj4gK3sNCj4+PiArCWludCByZXQ7DQo+Pj4gKw0KPj4+ICsJ cmV0ID0gc3ByaW50ZihzdHIsICJJUlEgJTA4eCA9ICIsIHVzYl9pc3RzKTsNCj4+PiArDQo+Pj4g KwlpZiAodXNiX2lzdHMgJiAoVVNCX0lTVFNfQ09OMkkgfCBVU0JfSVNUU19DT05JKSkgew0KPj4+ ICsJCXJldCArPSBzcHJpbnRmKHN0ciArIHJldCwgIkNvbm5lY3Rpb24gJXNcbiIsDQo+Pj4gKwkJ CSAgICAgICB1c2Jfc3BlZWRfc3RyaW5nKHNwZWVkKSk7DQo+Pj4gKwl9DQo+Pj4gKwlpZiAodXNi X2lzdHMgJiBVU0JfSVNUU19DT04ySSB8fCB1c2JfaXN0cyAmIFVTQl9JU1RTX0NPTkkpDQo+Pj4g KwkJcmV0ICs9IHNwcmludGYoc3RyICsgcmV0LCAiRGlzY29ubmVjdGlvbiAiKTsNCj4+PiArCWlm ICh1c2JfaXN0cyAmIFVTQl9JU1RTX0wyRU5USSkNCj4+PiArCQlyZXQgKz0gc3ByaW50ZihzdHIg KyByZXQsICJzdXNwZW5kZWQgIik7DQo+Pj4gKw0KPj4+ICsJaWYgKHVzYl9pc3RzICYgVVNCX0lT VFNfTDJFWFRJKQ0KPj4+ICsJCXJldCArPSBzcHJpbnRmKHN0ciArIHJldCwgIkwyIGV4aXQgIik7 DQo+Pj4gKwlpZiAodXNiX2lzdHMgJiBVU0JfSVNUU19VM0VYVEkpDQo+Pj4gKwkJcmV0ICs9IHNw cmludGYoc3RyICsgcmV0LCAiVTMgZXhpdCAiKTsNCj4+PiArCWlmICh1c2JfaXN0cyAmIFVTQl9J U1RTX1VXUkVTSSkNCj4+PiArCQlyZXQgKz0gc3ByaW50ZihzdHIgKyByZXQsICJXYXJtIFJlc2V0 ICIpOw0KPj4+ICsJaWYgKHVzYl9pc3RzICYgVVNCX0lTVFNfVUhSRVNJKQ0KPj4+ICsJCXJldCAr PSBzcHJpbnRmKHN0ciArIHJldCwgIkhvdCBSZXNldCAiKTsNCj4+PiArCWlmICh1c2JfaXN0cyAm IFVTQl9JU1RTX1UyUkVTSSkNCj4+PiArCQlyZXQgKz0gc3ByaW50ZihzdHIgKyByZXQsICJSZXNl dCIpOw0KPj4+ICsNCj4+PiArCXJldHVybiBzdHI7DQo+Pj4gK30NCj4+PiArDQo+Pj4gK3N0YXRp YyBpbmxpbmUgIGNoYXIgKmNkbnMzX2RlY29kZV9lcF9pcnEoY2hhciAqc3RyLA0KPj4+ICsJCQkJ CSB1MzIgZXBfc3RzLA0KPj4+ICsJCQkJCSBjb25zdCBjaGFyICplcF9uYW1lKQ0KPj4+ICt7DQo+ Pj4gKwlpbnQgcmV0Ow0KPj4+ICsNCj4+PiArCXJldCA9IHNwcmludGYoc3RyLCAiSVJRIGZvciAl czogJTA4eCAiLCBlcF9uYW1lLCBlcF9zdHMpOw0KPj4+ICsNCj4+PiArCWlmIChlcF9zdHMgJiBF UF9TVFNfU0VUVVApDQo+Pj4gKwkJcmV0ICs9IHNwcmludGYoc3RyICsgcmV0LCAiU0VUVVAgIik7 DQo+Pj4gKwlpZiAoZXBfc3RzICYgRVBfU1RTX0lPQykNCj4+PiArCQlyZXQgKz0gc3ByaW50Zihz dHIgKyByZXQsICJJT0MgIik7DQo+Pj4gKwlpZiAoZXBfc3RzICYgRVBfU1RTX0lTUCkNCj4+PiAr CQlyZXQgKz0gc3ByaW50ZihzdHIgKyByZXQsICJJU1AgIik7DQo+Pj4gKwlpZiAoZXBfc3RzICYg RVBfU1RTX0RFU0NNSVMpDQo+Pj4gKwkJcmV0ICs9IHNwcmludGYoc3RyICsgcmV0LCAiREVTQ01J UyAiKTsNCj4+PiArCWlmIChlcF9zdHMgJiBFUF9TVFNfU1RSRUFNUikNCj4+PiArCQlyZXQgKz0g c3ByaW50ZihzdHIgKyByZXQsICJTVFJFQU1SICIpOw0KPj4+ICsJaWYgKGVwX3N0cyAmIEVQX1NU U19NRF9FWElUKQ0KPj4+ICsJCXJldCArPSBzcHJpbnRmKHN0ciArIHJldCwgIk1EX0VYSVQgIik7 DQo+Pj4gKwlpZiAoZXBfc3RzICYgRVBfU1RTX1RSQkVSUikNCj4+PiArCQlyZXQgKz0gc3ByaW50 ZihzdHIgKyByZXQsICJUUkJFUlIgIik7DQo+Pj4gKwlpZiAoZXBfc3RzICYgRVBfU1RTX05SRFkp DQo+Pj4gKwkJcmV0ICs9IHNwcmludGYoc3RyICsgcmV0LCAiTlJEWSAiKTsNCj4+PiArCWlmIChl cF9zdHMgJiBFUF9TVFNfUFJJTUUpDQo+Pj4gKwkJcmV0ICs9IHNwcmludGYoc3RyICsgcmV0LCAi UFJJTUUgIik7DQo+Pj4gKwlpZiAoZXBfc3RzICYgRVBfU1RTX1NJREVSUikNCj4+PiArCQlyZXQg Kz0gc3ByaW50ZihzdHIgKyByZXQsICJTSURFUlJUICIpOw0KPj4+ICsJaWYgKGVwX3N0cyAmIEVQ X1NUU19PVVRTTU0pDQo+Pj4gKwkJcmV0ICs9IHNwcmludGYoc3RyICsgcmV0LCAiT1VUU01NICIp Ow0KPj4+ICsJaWYgKGVwX3N0cyAmIEVQX1NUU19JU09FUlIpDQo+Pj4gKwkJcmV0ICs9IHNwcmlu dGYoc3RyICsgcmV0LCAiSVNPRVJSICIpOw0KPj4+ICsJaWYgKGVwX3N0cyAmIEVQX1NUU19JT1Qp DQo+Pj4gKwkJcmV0ICs9IHNwcmludGYoc3RyICsgcmV0LCAiSU9UICIpOw0KPj4+ICsNCj4+PiAr CXJldHVybiBzdHI7DQo+Pj4gK30NCj4+PiArDQo+Pj4gK3N0YXRpYyBpbmxpbmUgY2hhciAqY2Ru czNfZGVjb2RlX2VweF9pcnEoY2hhciAqc3RyLA0KPj4+ICsJCQkJCSBjaGFyICplcF9uYW1lLA0K Pj4+ICsJCQkJCSB1MzIgZXBfc3RzKQ0KPj4+ICt7DQo+Pj4gKwlyZXR1cm4gY2RuczNfZGVjb2Rl X2VwX2lycShzdHIsIGVwX3N0cywgZXBfbmFtZSk7DQo+Pj4gK30NCj4+PiArDQo+Pj4gK3N0YXRp YyBpbmxpbmUgY2hhciAqY2RuczNfZGVjb2RlX2VwMF9pcnEoY2hhciAqc3RyLA0KPj4+ICsJCQkJ CSBpbnQgZGlyLA0KPj4+ICsJCQkJCSB1MzIgZXBfc3RzKQ0KPj4+ICt7DQo+Pj4gKwlyZXR1cm4g Y2RuczNfZGVjb2RlX2VwX2lycShzdHIsIGVwX3N0cywNCj4+PiArCQkJCSAgIGRpciA/ICJlcDBJ TiIgOiAiZXAwT1VUIik7DQo+Pj4gK30NCj4+PiArDQo+Pj4gKy8qKg0KPj4+ICsgKiBEZWJ1ZyBh IHRyYW5zZmVyIHJpbmcuDQo+Pj4gKyAqDQo+Pj4gKyAqIFByaW50cyBvdXQgYWxsIFRSQnMgaW4g dGhlIGVuZHBvaW50IHJpbmcsIGV2ZW4gdGhvc2UgYWZ0ZXIgdGhlIExpbmsgVFJCLg0KPj4+ICsg Ki4NCj4+PiArICovDQo+Pj4gK3N0YXRpYyBpbmxpbmUgY2hhciAqY2RuczNfZGJnX3Jpbmcoc3Ry dWN0IGNkbnMzX2VuZHBvaW50ICpwcml2X2VwLA0KPj4+ICsJCQkJICAgc3RydWN0IGNkbnMzX3Ry YiAqcmluZywgY2hhciAqc3RyKQ0KPj4+ICt7DQo+Pj4gKwlkbWFfYWRkcl90IGFkZHIgPSBwcml2 X2VwLT50cmJfcG9vbF9kbWE7DQo+Pj4gKwlzdHJ1Y3QgY2RuczNfdHJiICp0cmI7DQo+Pj4gKwlp bnQgdHJiX3Blcl9zZWN0b3I7DQo+Pj4gKwlpbnQgcmV0ID0gMDsNCj4+PiArCWludCBpOw0KPj4+ ICsNCj4+PiArCXRyYl9wZXJfc2VjdG9yID0gR0VUX1RSQlNfUEVSX1NFR01FTlQocHJpdl9lcC0+ dHlwZSk7DQo+Pj4gKw0KPj4+ICsJdHJiID0gJnByaXZfZXAtPnRyYl9wb29sW3ByaXZfZXAtPmRl cXVldWVdOw0KPj4+ICsJcmV0ICs9IHNwcmludGYoc3RyICsgcmV0LCAiXG5cdFx0UmluZyBjb250 ZW50cyBmb3IgJXM6IiwgcHJpdl9lcC0+bmFtZSk7DQo+Pj4gKw0KPj4+ICsJcmV0ICs9IHNwcmlu dGYoc3RyICsgcmV0LA0KPj4+ICsJCSAgICAgICAiXG5cdFx0UmluZyBkZXEgaW5kZXg6ICVkLCB0 cmI6ICVwICh2aXJ0KSwgMHglbGx4IChkbWEpXG4iLA0KPj4+ICsJCSAgICAgICBwcml2X2VwLT5k ZXF1ZXVlLCB0cmIsDQo+Pj4gKwkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpY2RuczNfdHJi X3ZpcnRfdG9fZG1hKHByaXZfZXAsIHRyYikpOw0KPj4+ICsNCj4+PiArCXRyYiA9ICZwcml2X2Vw LT50cmJfcG9vbFtwcml2X2VwLT5lbnF1ZXVlXTsNCj4+PiArCXJldCArPSBzcHJpbnRmKHN0ciAr IHJldCwNCj4+PiArCQkgICAgICAgIlx0XHRSaW5nIGVucSBpbmRleDogJWQsIHRyYjogJXAgKHZp cnQpLCAweCVsbHggKGRtYSlcbiIsDQo+Pj4gKwkJICAgICAgIHByaXZfZXAtPmVucXVldWUsIHRy YiwNCj4+PiArCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyljZG5zM190cmJfdmlydF90b19k bWEocHJpdl9lcCwgdHJiKSk7DQo+Pj4gKw0KPj4+ICsJcmV0ICs9IHNwcmludGYoc3RyICsgcmV0 LA0KPj4+ICsJCSAgICAgICAiXHRcdGZyZWUgdHJiczogJWQsIENDUz0lZCwgUENTPSVkXG4iLA0K Pj4+ICsJCSAgICAgICBwcml2X2VwLT5mcmVlX3RyYnMsIHByaXZfZXAtPmNjcywgcHJpdl9lcC0+ cGNzKTsNCj4+PiArDQo+Pj4gKwlpZiAodHJiX3Blcl9zZWN0b3IgPiBUUkJTX1BFUl9TRUdNRU5U KQ0KPj4+ICsJCXRyYl9wZXJfc2VjdG9yID0gVFJCU19QRVJfU0VHTUVOVDsNCj4+PiArDQo+Pj4g KwlpZiAodHJiX3Blcl9zZWN0b3IgPiBUUkJTX1BFUl9TRUdNRU5UKSB7DQo+Pj4gKwkJc3ByaW50 ZihzdHIgKyByZXQsICJcdFx0VG8gYmlnIHRyYW5zZmVyIHJpbmcgJWRcbiIsDQo+Pj4gKwkJCXRy Yl9wZXJfc2VjdG9yKTsNCj4+PiArCQlyZXR1cm4gc3RyOw0KPj4+ICsJfQ0KPj4+ICsNCj4+PiAr CWZvciAoaSA9IDA7IGkgPCB0cmJfcGVyX3NlY3RvcjsgKytpKSB7DQo+Pj4gKwkJdHJiID0gJnJp bmdbaV07DQo+Pj4gKwkJcmV0ICs9IHNwcmludGYoc3RyICsgcmV0LA0KPj4+ICsJCQkiXHRcdEAl cGFkICUwOHggJTA4eCAlMDh4XG4iLCAmYWRkciwNCj4+PiArCQkJbGUzMl90b19jcHUodHJiLT5i dWZmZXIpLA0KPj4+ICsJCQlsZTMyX3RvX2NwdSh0cmItPmxlbmd0aCksDQo+Pj4gKwkJCWxlMzJf dG9fY3B1KHRyYi0+Y29udHJvbCkpOw0KPj4+ICsJCWFkZHIgKz0gc2l6ZW9mKCp0cmIpOw0KPj4+ ICsJfQ0KPj4+ICsNCj4+PiArCXJldHVybiBzdHI7DQo+Pj4gK30NCj4+PiArDQo+Pj4gK3ZvaWQg Y2RuczNfZGJnKHN0cnVjdCBjZG5zM19kZXZpY2UgKnByaXZfZGV2LCBjb25zdCBjaGFyICpmbXQs IC4uLik7DQo+Pj4gKw0KPj4+ICsjaWZkZWYgQ09ORklHX0RFQlVHX0ZTDQo+Pj4gK3ZvaWQgY2Ru czNfZGVidWdmc19pbml0KHN0cnVjdCBjZG5zMyAqY2Rucyk7DQo+Pj4gK3ZvaWQgY2RuczNfZGVi dWdmc19leGl0KHN0cnVjdCBjZG5zMyAqY2Rucyk7DQo+Pj4gKyNlbHNlDQo+Pj4gK3ZvaWQgY2Ru czNfZGVidWdmc19pbml0KHN0cnVjdCBjZG5zMyAqY2Rucyk7DQo+Pj4gK3sgIH0NCj4+PiArdm9p ZCBjZG5zM19kZWJ1Z2ZzX2V4aXQoc3RydWN0IGNkbnMzICpjZG5zKTsNCj4+PiAreyAgfQ0KPj4+ ICsjZW5kaWYNCj4+PiArDQo+Pj4gKyNlbmRpZiAvKl9fTElOVVhfQ0ROUzNfREVCVUcqLw0KPj4+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jZG5zMy9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL3VzYi9j ZG5zMy9kZWJ1Z2ZzLmMNCj4+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPj4+IGluZGV4IDAwMDAw MDAwMDAwMC4uZDhmY2Q5MGQwNWIzDQo+Pj4gLS0tIC9kZXYvbnVsbA0KPj4+ICsrKyBiL2RyaXZl cnMvdXNiL2NkbnMzL2RlYnVnZnMuYw0KPj4+IEBAIC0wLDAgKzEsMTY0IEBADQo+Pj4gKy8vIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQo+Pj4gKy8qDQo+Pj4gKyAqIENhZGVuY2Ug VVNCU1MgRFJEIENvbnRyb2xsZXIgRGVidWdGUyBmaWxlci4NCj4+PiArICoNCj4+PiArICogQ29w eXJpZ2h0IChDKSAyMDE4IENhZGVuY2UuDQo+Pj4gKyAqDQo+Pj4gKyAqIEF1dGhvcjogUGF3ZWwg TGFzemN6YWsgPHBhd2VsbEBjYWRlbmNlLmNvbT4NCj4+PiArICovDQo+Pj4gKw0KPj4+ICsjaW5j bHVkZSA8bGludXgvdHlwZXMuaD4NCj4+PiArI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4NCj4+ PiArI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+DQo+Pj4gKyNpbmNsdWRlIDxsaW51eC91YWNj ZXNzLmg+DQo+Pj4gKw0KPj4+ICsjaW5jbHVkZSAiY29yZS5oIg0KPj4+ICsjaW5jbHVkZSAiZ2Fk Z2V0LmgiDQo+Pj4gKyNpbmNsdWRlICJkcmQuaCINCj4+PiArDQo+Pj4gK3N0YXRpYyBpbnQgY2Ru czNfbW9kZV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdW51c2VkKQ0KPj4+ICt7DQo+ Pj4gKwlzdHJ1Y3QgY2RuczMgKmNkbnMgPSBzLT5wcml2YXRlOw0KPj4+ICsNCj4+PiArCXN3aXRj aCAoY2Rucy0+Y3VycmVudF9kcl9tb2RlKSB7DQo+Pj4gKwljYXNlIFVTQl9EUl9NT0RFX0hPU1Q6 DQo+Pj4gKwkJc2VxX3B1dHMocywgImhvc3RcbiIpOw0KPj4+ICsJCWJyZWFrOw0KPj4+ICsJY2Fz ZSBVU0JfRFJfTU9ERV9QRVJJUEhFUkFMOg0KPj4+ICsJCXNlcV9wdXRzKHMsICJkZXZpY2VcbiIp Ow0KPj4+ICsJCWJyZWFrOw0KPj4+ICsJY2FzZSBVU0JfRFJfTU9ERV9PVEc6DQo+Pj4gKwkJc2Vx X3B1dHMocywgIm90Z1xuIik7DQo+Pj4gKwkJYnJlYWs7DQo+Pj4gKwlkZWZhdWx0Og0KPj4+ICsJ CXNlcV9wdXRzKHMsICJVTktOT1dOIG1vZGVcbiIpOw0KPj4+ICsJfQ0KPj4+ICsNCj4+PiArCXJl dHVybiAwOw0KPj4+ICt9DQo+Pj4gKw0KPj4+ICtzdGF0aWMgaW50IGNkbnMzX21vZGVfb3Blbihz dHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkNCj4+PiArew0KPj4+ICsJcmV0 dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGNkbnMzX21vZGVfc2hvdywgaW5vZGUtPmlfcHJpdmF0ZSk7 DQo+Pj4gK30NCj4+PiArDQo+Pj4gK3N0YXRpYyBzc2l6ZV90IGNkbnMzX21vZGVfd3JpdGUoc3Ry dWN0IGZpbGUgKmZpbGUsDQo+Pj4gKwkJCQljb25zdCBjaGFyIF9fdXNlciAqdWJ1ZiwNCj4+PiAr CQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQ0KPj4+ICt7DQo+Pj4gKwlzdHJ1Y3Qgc2Vx X2ZpbGUJICpzID0gZmlsZS0+cHJpdmF0ZV9kYXRhOw0KPj4+ICsJc3RydWN0IGNkbnMzICpjZG5z ID0gcy0+cHJpdmF0ZTsNCj4+PiArCXUzMiBtb2RlID0gVVNCX0RSX01PREVfVU5LTk9XTjsNCj4+ PiArCWNoYXIgYnVmWzMyXTsNCj4+PiArDQo+Pj4gKwlpZiAoY29weV9mcm9tX3VzZXIoJmJ1Ziwg dWJ1ZiwgbWluX3Qoc2l6ZV90LCBzaXplb2YoYnVmKSAtIDEsIGNvdW50KSkpDQo+Pj4gKwkJcmV0 dXJuIC1FRkFVTFQ7DQo+Pj4gKw0KPj4+ICsJaWYgKCFzdHJuY21wKGJ1ZiwgImhvc3QiLCA0KSkg ew0KPj4+ICsJCWlmIChjZG5zLT5kcl9tb2RlID09IFVTQl9EUl9NT0RFX0hPU1QgfHwNCj4+PiAr CQkgICAgY2Rucy0+ZHJfbW9kZSA9PSBVU0JfRFJfTU9ERV9PVEcpIHsNCj4+PiArCQkJbW9kZSA9 IFVTQl9EUl9NT0RFX0hPU1Q7DQo+Pj4gKwkJfQ0KPj4+ICsJfQ0KPj4+ICsNCj4+PiArCWlmICgh c3RybmNtcChidWYsICJkZXZpY2UiLCA2KSkNCj4+PiArCQlpZiAoY2Rucy0+ZHJfbW9kZSA9PSBV U0JfRFJfTU9ERV9QRVJJUEhFUkFMIHx8DQo+Pj4gKwkJICAgIGNkbnMtPmRyX21vZGUgPT0gVVNC X0RSX01PREVfT1RHKQ0KPj4+ICsJCQltb2RlID0gVVNCX0RSX01PREVfUEVSSVBIRVJBTDsNCj4+ PiArDQo+Pj4gKwlpZiAoIXN0cm5jbXAoYnVmLCAib3RnIiwgMykgJiYgY2Rucy0+ZHJfbW9kZSA9 PSBVU0JfRFJfTU9ERV9PVEcpDQo+Pj4gKwkJbW9kZSA9IFVTQl9EUl9NT0RFX09URzsNCj4+PiAr DQo+Pj4gKwlpZiAobW9kZSA9PSBVU0JfRFJfTU9ERV9VTktOT1dOKSB7DQo+Pj4gKwkJZGV2X2Vy cihjZG5zLT5kZXYsICJGYWlsZWQ6IGluY29ycmVjdCBtb2RlIHNldHRpbmdcbiIpOw0KPj4+ICsJ CXJldHVybiAtRUZBVUxUOw0KPj4+ICsJfQ0KPj4+ICsNCj4+PiArCWlmIChjZG5zLT5jdXJyZW50 X2RyX21vZGUgIT0gbW9kZSkgew0KPj4+ICsJCWNkbnMtPmRlc2lyZWRfZHJfbW9kZSA9IG1vZGU7 DQo+Pj4gKwkJY2Rucy0+ZGVidWdfZGlzYWJsZSA9IDA7DQo+Pj4gKwkJY2RuczNfcm9sZV9zdG9w KGNkbnMpOw0KPj4+ICsJCWNkbnMzX2RyZF91cGRhdGVfbW9kZShjZG5zKTsNCj4+PiArCQlxdWV1 ZV93b3JrKHN5c3RlbV9mcmVlemFibGVfd3EsICZjZG5zLT5yb2xlX3N3aXRjaF93cSk7DQo+Pj4g Kwl9DQo+Pj4gKw0KPj4+ICsJcmV0dXJuIGNvdW50Ow0KPj4+ICt9DQo+Pj4gKw0KPj4+ICtzdGF0 aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjZG5zM19tb2RlX2ZvcHMgPSB7DQo+Pj4g Kwkub3BlbgkJCT0gY2RuczNfbW9kZV9vcGVuLA0KPj4+ICsJLndyaXRlCQkJPSBjZG5zM19tb2Rl X3dyaXRlLA0KPj4+ICsJLnJlYWQJCQk9IHNlcV9yZWFkLA0KPj4+ICsJLmxsc2VlawkJCT0gc2Vx X2xzZWVrLA0KPj4+ICsJLnJlbGVhc2UJCT0gc2luZ2xlX3JlbGVhc2UsDQo+Pj4gK307DQo+Pj4g Kw0KPj4+ICtzdGF0aWMgaW50IGNkbnMzX2Rpc2FibGVfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMs IHZvaWQgKnVudXNlZCkNCj4+PiArew0KPj4+ICsJc3RydWN0IGNkbnMzICpjZG5zID0gcy0+cHJp dmF0ZTsNCj4+PiArDQo+Pj4gKwlpZiAoIWNkbnMtPmRlYnVnX2Rpc2FibGUpDQo+Pj4gKwkJc2Vx X3B1dHMocywgIjBcbiIpOw0KPj4+ICsJZWxzZQ0KPj4+ICsJCXNlcV9wdXRzKHMsICIxXG4iKTsN Cj4+PiArDQo+Pj4gKwlyZXR1cm4gMDsNCj4+PiArfQ0KPj4+ICsNCj4+PiArc3RhdGljIHNzaXpl X3QgY2RuczNfZGlzYWJsZV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwNCj4+PiArCQkJCSAgIGNv bnN0IGNoYXIgX191c2VyICp1YnVmLA0KPj4+ICsJCQkJICAgc2l6ZV90IGNvdW50LCBsb2ZmX3Qg KnBwb3MpDQo+Pj4gK3sNCj4+PiArCXN0cnVjdCBzZXFfZmlsZQkgKnMgPSBmaWxlLT5wcml2YXRl X2RhdGE7DQo+Pj4gKwlzdHJ1Y3QgY2RuczMgKmNkbnMgPSBzLT5wcml2YXRlOw0KPj4+ICsJYm9v bCBkaXNhYmxlOw0KPj4+ICsJY2hhciBidWZbMTZdOw0KPj4+ICsNCj4+PiArCWlmIChjb3B5X2Zy b21fdXNlcigmYnVmLCB1YnVmLCBtaW5fdChzaXplX3QsIHNpemVvZihidWYpIC0gMSwgY291bnQp KSkNCj4+PiArCQlyZXR1cm4gLUVGQVVMVDsNCj4+PiArDQo+Pj4gKwlpZiAoa3N0cnRvYm9vbChi dWYsICZkaXNhYmxlKSkgew0KPj4+ICsJCWRldl9lcnIoY2Rucy0+ZGV2LCAid3Jvbmcgc2V0dGlu Z1xuIik7DQo+Pj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+Pj4gKwl9DQo+Pj4gKw0KPj4+ICsJaWYg KGRpc2FibGUgIT0gY2Rucy0+ZGVidWdfZGlzYWJsZSkgew0KPj4+ICsJCWNkbnMtPmRlYnVnX2Rp c2FibGUgPSBkaXNhYmxlOw0KPj4+ICsJCXF1ZXVlX3dvcmsoc3lzdGVtX2ZyZWV6YWJsZV93cSwg JmNkbnMtPnJvbGVfc3dpdGNoX3dxKTsNCj4+PiArCX0NCj4+PiArDQo+Pj4gKwlyZXR1cm4gY291 bnQ7DQo+Pj4gK30NCj4+PiArDQo+Pj4gK3N0YXRpYyBpbnQgY2RuczNfZGlzYWJsZV9vcGVuKHN0 cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQ0KPj4+ICt7DQo+Pj4gKwlyZXR1 cm4gc2luZ2xlX29wZW4oZmlsZSwgY2RuczNfZGlzYWJsZV9zaG93LCBpbm9kZS0+aV9wcml2YXRl KTsNCj4+PiArfQ0KPj4+ICsNCj4+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlv bnMgY2RuczNfZGlzYWJsZV9mb3BzID0gew0KPj4+ICsJLm9wZW4JCQk9IGNkbnMzX2Rpc2FibGVf b3BlbiwNCj4+PiArCS53cml0ZQkJCT0gY2RuczNfZGlzYWJsZV93cml0ZSwNCj4+PiArCS5yZWFk CQkJPSBzZXFfcmVhZCwNCj4+PiArCS5sbHNlZWsJCQk9IHNlcV9sc2VlaywNCj4+PiArCS5yZWxl YXNlCQk9IHNpbmdsZV9yZWxlYXNlLA0KPj4+ICt9Ow0KPj4+ICsNCj4+PiArdm9pZCBjZG5zM19k ZWJ1Z2ZzX2luaXQoc3RydWN0IGNkbnMzICpjZG5zKQ0KPj4+ICt7DQo+Pj4gKwlzdHJ1Y3QgZGVu dHJ5ICpyb290Ow0KPj4+ICsNCj4+PiArCXJvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoZGV2X25h bWUoY2Rucy0+ZGV2KSwgTlVMTCk7DQo+Pj4gKwljZG5zLT5yb290ID0gcm9vdDsNCj4+PiArCWlm IChJU19FTkFCTEVEKENPTkZJR19VU0JfQ0ROUzNfR0FER0VUKSAmJg0KPj4+ICsJICAgIElTX0VO QUJMRUQoQ09ORklHX1VTQl9DRE5TM19IT1NUKSkNCj4+PiArCQlkZWJ1Z2ZzX2NyZWF0ZV9maWxl KCJtb2RlIiwgMDY0NCwgcm9vdCwgY2RucywNCj4+PiArCQkJCSAgICAmY2RuczNfbW9kZV9mb3Bz KTsNCj4+PiArDQo+Pj4gKwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJkaXNhYmxlIiwgMDY0NCwgcm9v dCwgY2RucywNCj4+PiArCQkJICAgICZjZG5zM19kaXNhYmxlX2ZvcHMpOw0KPj4+ICt9DQo+Pj4g Kw0KPj4+ICt2b2lkIGNkbnMzX2RlYnVnZnNfZXhpdChzdHJ1Y3QgY2RuczMgKmNkbnMpDQo+Pj4g K3sNCj4+PiArCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShjZG5zLT5yb290KTsNCj4+PiArfQ0K Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jZG5zMy9kcmQuYyBiL2RyaXZlcnMvdXNiL2Nk bnMzL2RyZC5jDQo+Pj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4+PiBpbmRleCAwMDAwMDAwMDAw MDAuLjNlNTYzMzhjZDdiOQ0KPj4+IC0tLSAvZGV2L251bGwNCj4+PiArKysgYi9kcml2ZXJzL3Vz Yi9jZG5zMy9kcmQuYw0KPj4+IEBAIC0wLDAgKzEsMzY1IEBADQo+Pj4gKy8vIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBHUEwtMi4wDQo+Pj4gKy8qDQo+Pj4gKyAqIENhZGVuY2UgVVNCU1MgRFJE IERyaXZlci4NCj4+PiArICoNCj4+PiArICogQ29weXJpZ2h0IChDKSAyMDE4IENhZGVuY2UuDQo+ Pj4gKyAqDQo+Pj4gKyAqIEF1dGhvcjogUGF3ZWwgTGFzemN6YWsgPHBhd2VsbEBjYWRlbmNlLmNv bQ0KPj4+ICsgKg0KPj4+ICsgKi8NCj4+PiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPg0KPj4+ ICsjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+DQo+Pj4gKyNpbmNsdWRlIDxsaW51eC9kZWxh eS5oPg0KPj4+ICsjaW5jbHVkZSA8bGludXgvdXNiL290Zy5oPg0KPj4+ICsNCj4+PiArI2luY2x1 ZGUgImdhZGdldC5oIg0KPj4+ICsjaW5jbHVkZSAiZHJkLmgiDQo+Pj4gKyNpbmNsdWRlICJjb3Jl LmgiDQo+Pj4gKw0KPj4+ICtzdGF0aWMgaW50IGNkbnMzX2RyZF9zd2l0Y2hfZ2FkZ2V0KHN0cnVj dCBjZG5zMyAqY2RucywgaW50IG9uKTsNCj4+PiArc3RhdGljIGludCBjZG5zM19kcmRfc3dpdGNo X2hvc3Qoc3RydWN0IGNkbnMzICpjZG5zLCBpbnQgb24pOw0KPj4+ICsNCj4+PiArLyoqDQo+Pj4g KyAqIGNkbnMzX3NldF9tb2RlIC0gY2hhbmdlIG1vZGUgb2YgT1RHIENvcmUNCj4+PiArICogQGNk bnM6IHBvaW50ZXIgdG8gY29udGV4dCBzdHJ1Y3R1cmUNCj4+PiArICogQG1vZGU6IHNlbGVjdGVk IG1vZGUgZnJvbSBjZG5zX3JvbGUNCj4+PiArICoNCj4+PiArICogUmV0dXJucyAwIG9uIHN1Y2Nl c3Mgb3RoZXJ3aXNlIG5lZ2F0aXZlIGVycm5vDQo+Pj4gKyAqLw0KPj4+ICtpbnQgY2RuczNfc2V0 X21vZGUoc3RydWN0IGNkbnMzICpjZG5zLCBlbnVtIHVzYl9kcl9tb2RlIG1vZGUpDQo+Pj4gK3sN Cj4+PiArCWludCByZXQgPSAwOw0KPj4+ICsJdTMyIHJlZzsNCj4+PiArDQo+Pj4gKwljZG5zLT5j dXJyZW50X2RyX21vZGUgPSBtb2RlOw0KPj4+ICsNCj4+PiArCXN3aXRjaCAobW9kZSkgew0KPj4+ ICsJY2FzZSBVU0JfRFJfTU9ERV9QRVJJUEhFUkFMOg0KPj4+ICsJCWRldl9pbmZvKGNkbnMtPmRl diwgIlNldCBjb250cm9sbGVyIHRvIEdhZGdldCBtb2RlXG4iKTsNCj4+PiArCQlyZXQgPSBjZG5z M19kcmRfc3dpdGNoX2dhZGdldChjZG5zLCAxKTsNCj4+PiArCQlicmVhazsNCj4+PiArCWNhc2Ug VVNCX0RSX01PREVfSE9TVDoNCj4+PiArCQlkZXZfaW5mbyhjZG5zLT5kZXYsICJTZXQgY29udHJv bGxlciB0byBIb3N0IG1vZGVcbiIpOw0KPj4+ICsJCXJldCA9IGNkbnMzX2RyZF9zd2l0Y2hfaG9z dChjZG5zLCAxKTsNCj4+PiArCQlicmVhazsNCj4+PiArCWNhc2UgVVNCX0RSX01PREVfT1RHOg0K Pj4+ICsJCWRldl9pbmZvKGNkbnMtPmRldiwgIlNldCBjb250cm9sbGVyIHRvIE9URyBtb2RlXG4i KTsNCj4+PiArCQlpZiAoY2Rucy0+dmVyc2lvbiA9PSBDRE5TM19DT05UUk9MTEVSX1YxKSB7DQo+ Pj4gKwkJCXJlZyA9IHJlYWRsKCZjZG5zLT5vdGdfdjFfcmVncy0+b3ZlcnJpZGUpOw0KPj4+ICsJ CQlyZWcgfD0gT1ZFUlJJREVfSURQVUxMVVA7DQo+Pj4gKwkJCXdyaXRlbChyZWcsICZjZG5zLT5v dGdfdjFfcmVncy0+b3ZlcnJpZGUpOw0KPj4+ICsJCX0gZWxzZSB7DQo+Pj4gKwkJCXJlZyA9IHJl YWRsKCZjZG5zLT5vdGdfdjBfcmVncy0+Y3RybDEpOw0KPj4+ICsJCQlyZWcgfD0gT1ZFUlJJREVf SURQVUxMVVBfVjA7DQo+Pj4gKwkJCXdyaXRlbChyZWcsICZjZG5zLT5vdGdfdjBfcmVncy0+Y3Ry bDEpOw0KPj4+ICsJCX0NCj4+PiArDQo+Pj4gKwkJLyoNCj4+PiArCQkgKiBIYXJkd2FyZSBzcGVj aWZpY2F0aW9uIHNheXM6ICJJRF9WQUxVRSBtdXN0IGJlIHZhbGlkIHdpdGhpbg0KPj4+ICsJCSAq IDUwbXMgYWZ0ZXIgaWRwdWxsdXAgaXMgc2V0IHRvICcxIiBzbyBkcml2ZXIgbXVzdCB3YWl0DQo+ Pj4gKwkJICogNTBtcyBiZWZvcmUgcmVhZGluZyB0aGlzIHBpbi4NCj4+PiArCQkgKi8NCj4+PiAr CQl1c2xlZXBfcmFuZ2UoNTAwMDAsIDYwMDAwKTsNCj4+PiArCQlicmVhazsNCj4+PiArCWRlZmF1 bHQ6DQo+Pj4gKwkJY2Rucy0+Y3VycmVudF9kcl9tb2RlID0gVVNCX0RSX01PREVfVU5LTk9XTjsN Cj4+PiArCQlkZXZfZXJyKGNkbnMtPmRldiwgIlVuc3VwcG9ydGVkIG1vZGUgb2Ygb3BlcmF0aW9u ICVkXG4iLCBtb2RlKTsNCj4+PiArCQlyZXR1cm4gLUVJTlZBTDsNCj4+PiArCX0NCj4+PiArDQo+ Pj4gKwlyZXR1cm4gcmV0Ow0KPj4+ICt9DQo+Pj4gKw0KPj4+ICtpbnQgY2RuczNfZ2V0X2lkKHN0 cnVjdCBjZG5zMyAqY2RucykNCj4+PiArew0KPj4+ICsJaW50IGlkOw0KPj4+ICsNCj4+PiArCWlk ID0gcmVhZGwoJmNkbnMtPm90Z19yZWdzLT5zdHMpICYgT1RHU1RTX0lEX1ZBTFVFOw0KPj4+ICsJ ZGV2X2RiZyhjZG5zLT5kZXYsICJPVEcgSUQ6ICVkIiwgaWQpOw0KPj4+ICsJcmV0dXJuIGlkOw0K Pj4+ICt9DQo+Pj4gKw0KPj4+ICtpbnQgY2RuczNfaXNfaG9zdChzdHJ1Y3QgY2RuczMgKmNkbnMp DQo+Pm1heWJlIGl0J3MgYmV0dGVyIHRvIHVzZSBib29sIGluc3RlYWQgb2YgaW50DQo+Pj4gK3sN Cj4+PiArCWlmIChjZG5zLT5jdXJyZW50X2RyX21vZGUgPT0gVVNCX0RSX01PREVfSE9TVCkNCj4+ PiArCQlyZXR1cm4gMTsNCj4+PiArCWVsc2UgaWYgKCFjZG5zM19nZXRfaWQoY2RucykpDQo+Pj4g KwkJcmV0dXJuIDE7DQo+Pj4gKw0KPj4+ICsJcmV0dXJuIDA7DQo+Pj4gK30NCj4+PiArDQo+Pj4g K2ludCBjZG5zM19pc19kZXZpY2Uoc3RydWN0IGNkbnMzICpjZG5zKQ0KPj5kaXR0bw0KPj4+ICt7 DQo+Pj4gKwlpZiAoY2Rucy0+Y3VycmVudF9kcl9tb2RlID09IFVTQl9EUl9NT0RFX1BFUklQSEVS QUwpDQo+Pj4gKwkJcmV0dXJuIDE7DQo+Pj4gKwllbHNlIGlmIChjZG5zLT5jdXJyZW50X2RyX21v ZGUgPT0gVVNCX0RSX01PREVfT1RHKQ0KPj4+ICsJCWlmIChjZG5zM19nZXRfaWQoY2RucykpDQo+ Pj4gKwkJCXJldHVybiAxOw0KPj4+ICsNCj4+PiArCXJldHVybiAwOw0KPj4+ICt9DQo+Pj4gKw0K Pj4+ICsvKioNCj4+PiArICogY2RuczNfb3RnX2Rpc2FibGVfaXJxIC0gRGlzYWJsZSBhbGwgT1RH IGludGVycnVwdHMNCj4+PiArICogQGNkbnM6IFBvaW50ZXIgdG8gY29udHJvbGxlciBjb250ZXh0 IHN0cnVjdHVyZQ0KPj4+ICsgKi8NCj4+PiArc3RhdGljIHZvaWQgY2RuczNfb3RnX2Rpc2FibGVf aXJxKHN0cnVjdCBjZG5zMyAqY2RucykNCj4+PiArew0KPj4+ICsJd3JpdGVsKDAsICZjZG5zLT5v dGdfcmVncy0+aWVuKTsNCj4+PiArfQ0KPj4+ICsNCj4+PiArLyoqDQo+Pj4gKyAqIGNkbnMzX290 Z19lbmFibGVfaXJxIC0gZW5hYmxlIGlkIGFuZCBzZXNzX3ZhbGlkIGludGVycnVwdHMNCj4+PiAr ICogQGNkbnM6IFBvaW50ZXIgdG8gY29udHJvbGxlciBjb250ZXh0IHN0cnVjdHVyZQ0KPj4+ICsg Ki8NCj4+PiArc3RhdGljIHZvaWQgY2RuczNfb3RnX2VuYWJsZV9pcnEoc3RydWN0IGNkbnMzICpj ZG5zKQ0KPj4+ICt7DQo+Pj4gKwl3cml0ZWwoT1RHSUVOX0lEX0NIQU5HRV9JTlQgfCBPVEdJRU5f VkJVU1ZBTElEX1JJU0VfSU5UIHwNCj4+PiArCSAgICAgICBPVEdJRU5fVkJVU1ZBTElEX0ZBTExf SU5ULCAmY2Rucy0+b3RnX3JlZ3MtPmllbik7DQo+Pj4gK30NCj4+PiArDQo+Pj4gKy8qKg0KPj4+ ICsgKiBjZG5zM19kcmRfc3dpdGNoX2hvc3QgLSBzdGFydC9zdG9wIGhvc3QNCj4+PiArICogQGNk bnM6IFBvaW50ZXIgdG8gY29udHJvbGxlciBjb250ZXh0IHN0cnVjdHVyZQ0KPj4+ICsgKiBAb246 IDEgZm9yIHN0YXJ0LCAwIGZvciBzdG9wDQo+Pj4gKyAqDQo+Pj4gKyAqIFJldHVybnMgMCBvbiBz dWNjZXNzIG90aGVyd2lzZSBuZWdhdGl2ZSBlcnJubw0KPj4+ICsgKi8NCj4+Wy4uLl0NCj4+PiAr REVGSU5FX0VWRU5UKGNkbnMzX2xvZ19yZXF1ZXN0X2hhbmRsZWQsIGNkbnMzX3JlcXVlc3RfaGFu ZGxlZCwNCj4+PiArCVRQX1BST1RPKHN0cnVjdCBjZG5zM19yZXF1ZXN0ICpwcml2X3JlcSwgaW50 IGN1cnJlbnRfaW5kZXgsDQo+Pj4gKwkJIGludCBoYW5kbGVkKSwNCj4+PiArCVRQX0FSR1MocHJp dl9yZXEsIGN1cnJlbnRfaW5kZXgsIGhhbmRsZWQpDQo+Pj4gKyk7DQo+Pj4gKyNlbmRpZiAvKiBf X0xJTlVYX0NETlMzX1RSQUNFICovDQo+Pj4gKw0KPj4+ICsvKiB0aGlzIHBhcnQgbXVzdCBiZSBv dXRzaWRlIGhlYWRlciBndWFyZCAqLw0KPj4+ICsNCj4+PiArI3VuZGVmIFRSQUNFX0lOQ0xVREVf UEFUSA0KPj4+ICsjZGVmaW5lIFRSQUNFX0lOQ0xVREVfUEFUSCAuDQo+Pj4gKw0KPj4+ICsjdW5k ZWYgVFJBQ0VfSU5DTFVERV9GSUxFDQo+Pj4gKyNkZWZpbmUgVFJBQ0VfSU5DTFVERV9GSUxFIHRy YWNlDQo+Pj4gKw0KPj4+ICsjaW5jbHVkZSA8dHJhY2UvZGVmaW5lX3RyYWNlLmg+DQo+Pg0KPlRo YW5rcywNCj5QYXdlbA0K From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [v4,5/6] usb:cdns3 Add Cadence USB3 DRD Driver From: Pawel Laszczak Message-Id: Date: Mon, 4 Mar 2019 12:46:47 +0000 To: Chunfeng Yun Cc: "devicetree@vger.kernel.org" , "gregkh@linuxfoundation.org" , "felipe.balbi@linux.intel.com" , "mark.rutland@arm.com" , "linux-usb@vger.kernel.org" , "hdegoede@redhat.com" , "heikki.krogerus@linux.intel.com" , "andy.shevchenko@gmail.com" , "robh+dt@kernel.org" , "rogerq@ti.com" , "linux-kernel@vger.kernel.org" , "jbergsagel@ti.com" , "nsekhar@ti.com" , "nm@ti.com" , Suresh Punnoose , "peter.chen@nxp.com" , Rahul Kumar List-ID: PkZyb206IFBhd2VsIExhc3pjemFrDQo+U2VudDogTW9uZGF5LCBNYXJjaCA0LCAyMDE5IDEyOjAy IFBNDQo+VG86IENodW5mZW5nIFl1biA8Y2h1bmZlbmcueXVuQG1lZGlhdGVrLmNvbT4NCj5DYzog ZGV2aWNldHJlZUB2Z2VyLmtlcm5lbC5vcmc7IGdyZWdraEBsaW51eGZvdW5kYXRpb24ub3JnOyBm ZWxpcGUuYmFsYmlAbGludXguaW50ZWwuY29tOyBtYXJrLnJ1dGxhbmRAYXJtLmNvbTsgbGludXgt DQo+dXNiQHZnZXIua2VybmVsLm9yZzsgaGRlZ29lZGVAcmVkaGF0LmNvbTsgaGVpa2tpLmtyb2dl cnVzQGxpbnV4LmludGVsLmNvbTsgYW5keS5zaGV2Y2hlbmtvQGdtYWlsLmNvbTsgcm9iaCtkdEBr ZXJuZWwub3JnOw0KPnJvZ2VycUB0aS5jb207IGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc7 IGpiZXJnc2FnZWxAdGkuY29tOyBuc2VraGFyQHRpLmNvbTsgbm1AdGkuY29tOyBTdXJlc2ggUHVu bm9vc2UNCj48c3VyZXNocEBjYWRlbmNlLmNvbT47IHBldGVyLmNoZW5AbnhwLmNvbTsgUmFodWwg S3VtYXIgPGt1cmFodWxAY2FkZW5jZS5jb20+DQo+U3ViamVjdDogUkU6IFtQQVRDSCB2NCA1LzZd IHVzYjpjZG5zMyBBZGQgQ2FkZW5jZSBVU0IzIERSRCBEcml2ZXINCj4NCj5IaSwNCj4+DQo+Pmhp LA0KPj5PbiBUaHUsIDIwMTktMDItMTQgYXQgMTk6NDUgKzAwMDAsIFBhd2VsIExhc3pjemFrIHdy b3RlOg0KPj4+IFRoaXMgcGF0Y2ggaW50cm9kdWNlIG5ldyBDYWRlbmNlIFVTQlNTIERSRCBkcml2 ZXIgdG8gbGludXgga2VybmVsLg0KPj4+DQo+Pj4gVGhlIENhZGVuY2UgVVNCU1MgRFJEIERyaXZl ciBpcyBhIGhpZ2hseSBjb25maWd1cmFibGUgSVAgQ29yZSB3aGljaGkNCj4+PiBjYW4gYmUgaW5z dGFudGlhdGVkIGFzIER1YWwtUm9sZSBEZXZpY2UgKERSRCksIFBlcmlwaGVyYWwgT25seSBhbmQN Cj4+PiBIb3N0IE9ubHkgKFhIQ0kpY29uZmlndXJhdGlvbnMuDQo+Pj4NCj4+PiBUaGUgY3VycmVu dCBkcml2ZXIgaGFzIGJlZW4gdmFsaWRhdGVkIHdpdGggRlBHQSBidXJuZWQuIFdlIGhhdmUgc3Vw cG9ydA0KPj4+IGZvciBQQ0llIGJ1cywgd2hpY2ggaXMgdXNlZCBvbiBGUEdBIHByb3RvdHlwaW5n Lg0KPj4+DQo+Pj4gVGhlIGhvc3Qgc2lkZSBvZiBVU0JTUy1EUkQgY29udHJvbGxlciBpcyBjb21w bGlhbmNlIHdpdGggWEhDSQ0KPj4+IHNwZWNpZmljYXRpb24sIHNvIGl0IHdvcmtzIHdpdGggc3Rh bmRhcmQgWEhDSSBsaW51eCBkcml2ZXIuDQo+Pj4NCj4+PiBTaWduZWQtb2ZmLWJ5OiBQYXdlbCBM YXN6Y3phayA8cGF3ZWxsQGNhZGVuY2UuY29tPg0KPj4+IC0tLQ0KPj4+ICBkcml2ZXJzL3VzYi9L Y29uZmlnICAgICAgICAgICAgICAgIHwgICAgMiArDQo+Pj4gIGRyaXZlcnMvdXNiL01ha2VmaWxl ICAgICAgICAgICAgICAgfCAgICAyICsNCj4+PiAgZHJpdmVycy91c2IvY2RuczMvS2NvbmZpZyAg ICAgICAgICB8ICAgNDQgKw0KPj4+ICBkcml2ZXJzL3VzYi9jZG5zMy9NYWtlZmlsZSAgICAgICAg IHwgICAxNCArDQo+Pj4gIGRyaXZlcnMvdXNiL2NkbnMzL2NkbnMzLXBjaS13cmFwLmMgfCAgMTU1 ICsrKw0KPj4+ICBkcml2ZXJzL3VzYi9jZG5zMy9jb3JlLmMgICAgICAgICAgIHwgIDQwMyArKysr KysNCj4+PiAgZHJpdmVycy91c2IvY2RuczMvY29yZS5oICAgICAgICAgICB8ICAxMTYgKysNCj4+ PiAgZHJpdmVycy91c2IvY2RuczMvZGVidWcuaCAgICAgICAgICB8ICAxNjggKysrDQo+Pj4gIGRy aXZlcnMvdXNiL2NkbnMzL2RlYnVnZnMuYyAgICAgICAgfCAgMTY0ICsrKw0KPj4+ICBkcml2ZXJz L3VzYi9jZG5zMy9kcmQuYyAgICAgICAgICAgIHwgIDM2NSArKysrKw0KPj4+ICBkcml2ZXJzL3Vz Yi9jZG5zMy9kcmQuaCAgICAgICAgICAgIHwgIDE2MiArKysNCj4+PiAgZHJpdmVycy91c2IvY2Ru czMvZXAwLmMgICAgICAgICAgICB8ICA5MDcgKysrKysrKysrKysrKw0KPj4+ICBkcml2ZXJzL3Vz Yi9jZG5zMy9nYWRnZXQtZXhwb3J0LmggIHwgICAyOCArDQo+Pj4gIGRyaXZlcnMvdXNiL2NkbnMz L2dhZGdldC5jICAgICAgICAgfCAyMDAzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4+ PiAgZHJpdmVycy91c2IvY2RuczMvZ2FkZ2V0LmggICAgICAgICB8IDEyMDcgKysrKysrKysrKysr KysrKysNCj4+PiAgZHJpdmVycy91c2IvY2RuczMvaG9zdC1leHBvcnQuaCAgICB8ICAgMjggKw0K Pj4+ICBkcml2ZXJzL3VzYi9jZG5zMy9ob3N0LmMgICAgICAgICAgIHwgICA3MiArDQo+Pj4gIGRy aXZlcnMvdXNiL2NkbnMzL3RyYWNlLmMgICAgICAgICAgfCAgIDIzICsNCj4+PiAgZHJpdmVycy91 c2IvY2RuczMvdHJhY2UuaCAgICAgICAgICB8ICA0MDQgKysrKysrDQo+Pj4gIDE5IGZpbGVzIGNo YW5nZWQsIDYyNjcgaW5zZXJ0aW9ucygrKQ0KPj4+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy91c2IvY2RuczMvS2NvbmZpZw0KPj4+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy91c2Iv Y2RuczMvTWFrZWZpbGUNCj4+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdXNiL2NkbnMz L2NkbnMzLXBjaS13cmFwLmMNCj4+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdXNiL2Nk bnMzL2NvcmUuYw0KPj4+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy91c2IvY2RuczMvY29y ZS5oDQo+Pj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3VzYi9jZG5zMy9kZWJ1Zy5oDQo+ Pj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3VzYi9jZG5zMy9kZWJ1Z2ZzLmMNCj4+PiAg Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdXNiL2NkbnMzL2RyZC5jDQo+Pj4gIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL3VzYi9jZG5zMy9kcmQuaA0KPj4+ICBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy91c2IvY2RuczMvZXAwLmMNCj4+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvdXNiL2NkbnMzL2dhZGdldC1leHBvcnQuaA0KPj4+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy91c2IvY2RuczMvZ2FkZ2V0LmMNCj4+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv dXNiL2NkbnMzL2dhZGdldC5oDQo+Pj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3VzYi9j ZG5zMy9ob3N0LWV4cG9ydC5oDQo+Pj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3VzYi9j ZG5zMy9ob3N0LmMNCj4+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdXNiL2NkbnMzL3Ry YWNlLmMNCj4+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdXNiL2NkbnMzL3RyYWNlLmgN Cj4+Pg0KPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9LY29uZmlnIGIvZHJpdmVycy91c2Iv S2NvbmZpZw0KPj4+IGluZGV4IDk4N2ZjNWJhNjMyMS4uNWY5MzM0MDE5ZDA0IDEwMDY0NA0KPj4+ IC0tLSBhL2RyaXZlcnMvdXNiL0tjb25maWcNCj4+PiArKysgYi9kcml2ZXJzL3VzYi9LY29uZmln DQo+Pj4gQEAgLTExMiw2ICsxMTIsOCBAQCBzb3VyY2UgImRyaXZlcnMvdXNiL3VzYmlwL0tjb25m aWciDQo+Pj4NCj4+PiAgZW5kaWYNCj4+Pg0KPj4+ICtzb3VyY2UgImRyaXZlcnMvdXNiL2NkbnMz L0tjb25maWciDQo+Pj4gKw0KPj4+ICBzb3VyY2UgImRyaXZlcnMvdXNiL210dTMvS2NvbmZpZyIN Cj4+Pg0KPj4+ICBzb3VyY2UgImRyaXZlcnMvdXNiL211c2IvS2NvbmZpZyINCj4+PiBkaWZmIC0t Z2l0IGEvZHJpdmVycy91c2IvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9NYWtlZmlsZQ0KPj4+IGlu ZGV4IDdkMWI4YzgyYjIwOC4uYWIxMjViOTY2Y2FjIDEwMDY0NA0KPj4+IC0tLSBhL2RyaXZlcnMv dXNiL01ha2VmaWxlDQo+Pj4gKysrIGIvZHJpdmVycy91c2IvTWFrZWZpbGUNCj4+PiBAQCAtMTIs NiArMTIsOCBAQCBvYmotJChDT05GSUdfVVNCX0RXQzMpCQkrPSBkd2MzLw0KPj4+ICBvYmotJChD T05GSUdfVVNCX0RXQzIpCQkrPSBkd2MyLw0KPj4+ICBvYmotJChDT05GSUdfVVNCX0lTUDE3NjAp CSs9IGlzcDE3NjAvDQo+Pj4NCj4+PiArb2JqLSQoQ09ORklHX1VTQl9DRE5TMykJCSs9IGNkbnMz Lw0KPj4+ICsNCj4+PiAgb2JqLSQoQ09ORklHX1VTQl9NT04pCQkrPSBtb24vDQo+Pj4gIG9iai0k KENPTkZJR19VU0JfTVRVMykJCSs9IG10dTMvDQo+Pj4NCj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy91c2IvY2RuczMvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL2NkbnMzL0tjb25maWcNCj4+PiBuZXcg ZmlsZSBtb2RlIDEwMDY0NA0KPj4+IGluZGV4IDAwMDAwMDAwMDAwMC4uMjdjYjNkOGRiZTNkDQo+ Pj4gLS0tIC9kZXYvbnVsbA0KPj4+ICsrKyBiL2RyaXZlcnMvdXNiL2NkbnMzL0tjb25maWcNCj4+ PiBAQCAtMCwwICsxLDQ0IEBADQo+Pj4gK2NvbmZpZyBVU0JfQ0ROUzMNCj4+PiArCXRyaXN0YXRl ICJDYWRlbmNlIFVTQjMgRHVhbC1Sb2xlIENvbnRyb2xsZXIiDQo+Pj4gKwlkZXBlbmRzIG9uIFVT Ql9TVVBQT1JUICYmIChVU0IgfHwgVVNCX0dBREdFVCkgJiYgSEFTX0RNQQ0KPj4+ICsJaGVscA0K Pj4+ICsJICBTYXkgWSBoZXJlIGlmIHlvdXIgc3lzdGVtIGhhcyBhIGNhZGVuY2UgVVNCMyBkdWFs LXJvbGUgY29udHJvbGxlci4NCj4+PiArCSAgSXQgc3VwcG9ydHM6IGR1YWwtcm9sZSBzd2l0Y2gs IEhvc3Qtb25seSwgYW5kIFBlcmlwaGVyYWwtb25seS4NCj4+PiArDQo+Pj4gKwkgIElmIHlvdSBj aG9vc2UgdG8gYnVpbGQgdGhpcyBkcml2ZXIgaXMgYSBkeW5hbWljYWxseSBsaW5rZWQNCj4+PiAr CSAgYXMgbW9kdWxlLCB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNkbnMzLmtvLg0KPj4+ICsN Cj4+PiAraWYgVVNCX0NETlMzDQo+Pj4gKw0KPj4+ICtjb25maWcgVVNCX0NETlMzX0dBREdFVA0K Pj4+ICsgICAgICAgIGJvb2wgIkNhZGVuY2UgVVNCMyBkZXZpY2UgY29udHJvbGxlciINCj4+PiAr ICAgICAgICBkZXBlbmRzIG9uIFVTQl9HQURHRVQNCj4+PiArICAgICAgICBoZWxwDQo+Pj4gKyAg ICAgICAgICBTYXkgWSBoZXJlIHRvIGVuYWJsZSBkZXZpY2UgY29udHJvbGxlciBmdW5jdGlvbmFs aXR5IG9mIHRoZQ0KPj4+ICsgICAgICAgICAgY2FkZW5jZSBVU0JTUy1ERVYgZHJpdmVyLg0KPj4+ ICsNCj4+PiArICAgICAgICAgIFRoaXMgY29udHJvbGxlciBzdXBwb3J0cyBGRiwgSFMgYW5kIFNT IG1vZGUuIEl0IGRvZXNuJ3Qgc3VwcG9ydA0KPj4+ICsgICAgICAgICAgTFMgYW5kIFNTUCBtb2Rl Lg0KPj4+ICsNCj4+PiArY29uZmlnIFVTQl9DRE5TM19IT1NUDQo+Pj4gKyAgICAgICAgYm9vbCAi Q2FkZW5jZSBVU0IzIGhvc3QgY29udHJvbGxlciINCj4+PiArICAgICAgICBkZXBlbmRzIG9uIFVT Ql9YSENJX0hDRA0KPj4+ICsgICAgICAgIGhlbHANCj4+PiArICAgICAgICAgIFNheSBZIGhlcmUg dG8gZW5hYmxlIGhvc3QgY29udHJvbGxlciBmdW5jdGlvbmFsaXR5IG9mIHRoZQ0KPj4+ICsgICAg ICAgICAgY2FkZW5jZSBkcml2ZXIuDQo+Pj4gKw0KPj4+ICsgICAgICAgICAgSG9zdCBjb250cm9s bGVyIGlzIGNvbXBsaWFudCB3aXRoIFhIQ0kgc28gaXQgd2lsbCB1c2UNCj4+PiArICAgICAgICAg IHN0YW5kYXJkIFhIQ0kgZHJpdmVyLg0KPj4+ICsNCj4+PiArY29uZmlnIFVTQl9DRE5TM19QQ0lf V1JBUA0KPj4+ICsJdHJpc3RhdGUgIkNhZGVuY2UgVVNCMyBzdXBwb3J0IG9uIFBDSWUtYmFzZWQg cGxhdGZvcm1zIg0KPj4+ICsJZGVwZW5kcyBvbiBVU0JfUENJICYmIEFDUEkNCj4+PiArCWRlZmF1 bHQgVVNCX0NETlMzDQo+Pj4gKwloZWxwDQo+Pj4gKwkgIElmIHlvdSdyZSB1c2luZyB0aGUgVVNC U1MgQ29yZSBJUCB3aXRoIGEgUENJZSwgcGxlYXNlIHNheQ0KPj4+ICsJICAnWScgb3IgJ00nIGhl cmUuDQo+Pj4gKw0KPj4+ICsJICBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIHRoaXMgZHJpdmVyIGFz IG1vZHVsZSBpdCB3aWxsDQo+Pj4gKwkgIGJlIGR5bmFtaWNhbGx5IGxpbmtlZCBhbmQgbW9kdWxl IHdpbGwgYmUgY2FsbGVkIGNkbnMzLXBjaS5rbw0KPj4+ICsNCj4+PiArZW5kaWYNCj4+PiBkaWZm IC0tZ2l0IGEvZHJpdmVycy91c2IvY2RuczMvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9jZG5zMy9N YWtlZmlsZQ0KPj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+Pj4gaW5kZXggMDAwMDAwMDAwMDAw Li44Zjk0Mzg1OTMzNzUNCj4+PiAtLS0gL2Rldi9udWxsDQo+Pj4gKysrIGIvZHJpdmVycy91c2Iv Y2RuczMvTWFrZWZpbGUNCj4+PiBAQCAtMCwwICsxLDE0IEBADQo+Pj4gKyMgU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEdQTC0yLjANCj4+PiArIyBkZWZpbmVfdHJhY2UuaCBuZWVkcyB0byBrbm93 IGhvdyB0byBmaW5kIG91ciBoZWFkZXINCj4+PiArQ0ZMQUdTX3RyYWNlLm8JCQkJOj0gLUkkKHNy YykNCj4+PiArDQo+Pj4gK2NkbnMzLXkJCQkJCTo9IGNvcmUubyBkcmQubyB0cmFjZS5vDQo+Pj4g Kw0KPj4+ICtvYmotJChDT05GSUdfVVNCX0NETlMzKQkJCSs9IGNkbnMzLm8NCj4+PiAraWZuZXEg KCQoQ09ORklHX0RFQlVHX0ZTKSwpDQo+Pj4gKwljZG5zMy15CQkJCSs9IGRlYnVnZnMubw0KPj4+ ICtlbmRpZg0KPj4+ICsNCj4+PiArY2RuczMtJChDT05GSUdfVVNCX0NETlMzX0dBREdFVCkJKz0g Z2FkZ2V0Lm8gZXAwLm8NCj4+PiArY2RuczMtJChDT05GSUdfVVNCX0NETlMzX0hPU1QpCQkrPSBo b3N0Lm8NCj4+PiArb2JqLSQoQ09ORklHX1VTQl9DRE5TM19QQ0lfV1JBUCkJKz0gY2RuczMtcGNp LXdyYXAubw0KPj53aGVuIGJ1aWxkIGFzIG1vZHVsZToNCj4+Q09ORklHX1VTQl9DRE5TMz1tDQo+ PkNPTkZJR19VU0JfQ0ROUzNfR0FER0VUPW0NCj4+Q09ORklHX1VTQl9DRE5TM19IT1NUPW0NCj4N Cj5Ib3cgeW91IHNldCBzdWNoIGNvbmZpZ3VyYXRpb24gPyBGcm9tIG1ha2UgbWVudWNvbmZpZyBp dCdzIGltcG9zc2libGUuDQo+DQo+PnRoZXJlIGlzIGFuIGVycm9yOg0KPj5FUlJPUjogImNkbnMz X2hhbmRzaGFrZSIgW2RyaXZlcnMvdXNiL2NkbnMzL2NkbnMzLmtvXSB1bmRlZmluZWQhDQo+Pg0K Pj53aGVuIG9ubHkgc2V0Og0KPj5DT05GSUdfVVNCX0NETlMzPXkNCj4+YWxzbyBlbmNvdW50ZXIg ZXJyb3JzOg0KPj5kcml2ZXJzL3VzYi9jZG5zMy9kcmQubzogSW4gZnVuY3Rpb24gYGNkbnMzX2Ry ZF9zd2l0Y2hfZ2FkZ2V0JzoNCj4+L2RyaXZlcnMvdXNiL2NkbnMzL2RyZC5jOjE3MzogdW5kZWZp bmVkIHJlZmVyZW5jZSB0byBgY2RuczNfaGFuZHNoYWtlJw0KPj5kcml2ZXJzL3VzYi9jZG5zMy9k cmQubzogSW4gZnVuY3Rpb24gYGNkbnMzX2RyZF9zd2l0Y2hfaG9zdCc6DQo+PmRyaXZlcnMvdXNi L2NkbnMzL2RyZC5jOjEzOTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgY2RuczNfaGFuZHNoYWtl Jw0KPg0KPkkgd2lsbCBjaGVjayB0aGlzLg0KPlRoYW5rcy4NCg0KVG8gZml4IHRoaXMgaXNzdWUg SSB3aWxsIG1vdmUgY2RuczNfaGFuZHNoYWtlIGZ1bmN0aW9uIHRvIGNvcmUuYyBmaWxlLiANCkkg a25vdyB0aGF0IGl0J3Mgbm90IGEgcGVyZmVjdCBwbGFjZSBmb3IgdGhpcyBmdW5jdGlvbiwgYnV0 IEkgZG9uJ3QgDQp3YW50IHRvIGNyZWF0ZSBuZXh0IC5jIGZpbGUgd2l0aCB0aGlzIGZ1bmN0aW9u Lg0KDQo+DQo+Pg0KPj4NCj4+DQo+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NkbnMzL2Nk bnMzLXBjaS13cmFwLmMgYi9kcml2ZXJzL3VzYi9jZG5zMy9jZG5zMy1wY2ktd3JhcC5jDQo+Pj4g bmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4+PiBpbmRleCAwMDAwMDAwMDAwMDAuLmQwYjJkM2Q5Yjk4 Mw0KPj4+IC0tLSAvZGV2L251bGwNCj4+PiArKysgYi9kcml2ZXJzL3VzYi9jZG5zMy9jZG5zMy1w Y2ktd3JhcC5jDQo+Pj4gQEAgLTAsMCArMSwxNTUgQEANCj4+PiArLy8gU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEdQTC0yLjANCj4+PiArLyoNCj4+PiArICogQ2FkZW5jZSBVU0JTUyBQQ0kgR2x1 ZSBkcml2ZXINCj4+PiArICoNCj4+PiArICogQ29weXJpZ2h0IChDKSAyMDE4IENhZGVuY2UuDQo+ Pj4gKyAqDQo+Pj4gKyAqIEF1dGhvcjogUGF3ZWwgTGFzemN6YWsgPHBhd2VsbEBjYWRlbmNlLmNv bT4NCj4+PiArICovDQo+Pj4gKw0KPj4+ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+DQo+Pj4g KyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4NCj4+PiArI2luY2x1ZGUgPGxpbnV4L3BjaS5oPg0K Pj4+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+DQo+Pj4gKyNpbmNsdWRlIDxs aW51eC9kbWEtbWFwcGluZy5oPg0KPj4+ICsjaW5jbHVkZSA8bGludXgvc2xhYi5oPg0KPj4+ICsN Cj4+PiArc3RydWN0IGNkbnMzX3dyYXAgew0KPj4+ICsJc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGxhdF9kZXY7DQo+Pj4gKwlzdHJ1Y3QgcGNpX2RldiAqaGdfZGV2Ow0KPj4+ICsJc3RydWN0IHJl c291cmNlIGRldl9yZXNbNF07DQo+Pj4gK307DQo+Pj4gKw0KPj4+ICtzdHJ1Y3QgY2RuczNfd3Jh cCB3cmFwOw0KPj5ub3QgdXNlZCBpbiBmYWN0Pw0KPg0KPlllcywgSSBmb3Jnb3QgdG8gcmVtb3Zl IGl0Lg0KPj4NCj4+PiArDQo+Pj4gKyNkZWZpbmUgUkVTX0lSUV9JRAkJMA0KPj4+ICsjZGVmaW5l IFJFU19IT1NUX0lECQkxDQo+Pj4gKyNkZWZpbmUgUkVTX0RFVl9JRAkJMg0KPj4+ICsjZGVmaW5l IFJFU19EUkRfSUQJCTMNCj4+PiArDQo+Pj4gKyNkZWZpbmUgUENJX0JBUl9IT1NUCQkwDQo+Pj4g KyNkZWZpbmUgUENJX0JBUl9ERVYJCTINCj4+PiArI2RlZmluZSBQQ0lfQkFSX09URwkJNA0KPj4+ ICsNCj4+PiArI2RlZmluZSBQQ0lfREVWX0ZOX0hPU1RfREVWSUNFCTANCj4+PiArI2RlZmluZSBQ Q0lfREVWX0ZOX09URwkJMQ0KPj4+ICsNCj4+PiArI2RlZmluZSBQQ0lfRFJJVkVSX05BTUUJCSJj ZG5zMy1wY2ktdXNic3MiDQo+Pj4gKyNkZWZpbmUgUExBVF9EUklWRVJfTkFNRQkiY2Rucy11c2Iz Ig0KPj4+ICsNCj4+PiArI2RlZmluZSBDRE5TX1ZFTkRPUl9JRCAweDE3Y2QNCj4+PiArI2RlZmlu ZSBDRE5TX0RFVklDRV9JRCAweDAxMDANCj4+PiArDQo+Pj4gKy8qKg0KPj4+ICsgKiBjZG5zM19w Y2lfcHJvYmUgLSBQcm9iZSBmdW5jdGlvbiBmb3IgQ2FkZW5jZSBVU0Igd3JhcHBlciBkcml2ZXIN Cj4+PiArICogQHBkZXY6IHBsYXRmb3JtIGRldmljZSBvYmplY3QNCj4+PiArICogQGlkOiBwY2kg ZGV2aWNlIGlkDQo+Pj4gKyAqDQo+Pj4gKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG90aGVyd2lz ZSBuZWdhdGl2ZSBlcnJubw0KPj4+ICsgKi8NCj4+PiArc3RhdGljIGludCBjZG5zM19wY2lfcHJv YmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsDQo+Pj4gKwkJCSAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2 aWNlX2lkICppZCkNCj4+PiArew0KPj4+ICsJc3RydWN0IHBsYXRmb3JtX2RldmljZV9pbmZvIHBs YXRfaW5mbzsNCj4+PiArCXN0cnVjdCBjZG5zM193cmFwICp3cmFwOw0KPj4+ICsJc3RydWN0IHJl c291cmNlICpyZXM7DQo+Pj4gKwlpbnQgZXJyOw0KPj4+ICsNCj4+PiArCS8qDQo+Pj4gKwkgKiBm b3IgR0FER0VUL0hPU1QgUENJIChkZXZmbikgZnVuY3Rpb24gbnVtYmVyIGlzIDAsDQo+Pj4gKwkg KiBmb3IgT1RHIFBDSSAoZGV2Zm4pIGZ1bmN0aW9uIG51bWJlciBpcyAxDQo+Pj4gKwkgKi8NCj4+ PiArCWlmICghaWQgfHwgcGRldi0+ZGV2Zm4gIT0gUENJX0RFVl9GTl9IT1NUX0RFVklDRSkNCj4+ PiArCQlyZXR1cm4gLUVJTlZBTDsNCj4+PiArDQo+Pj4gKwllcnIgPSBwY2ltX2VuYWJsZV9kZXZp Y2UocGRldik7DQo+Pj4gKwlpZiAoZXJyKSB7DQo+Pj4gKwkJZGV2X2VycigmcGRldi0+ZGV2LCAi RW5hYmxpbmcgUENJIGRldmljZSBoYXMgZmFpbGVkICVkXG4iLCBlcnIpOw0KPj4+ICsJCXJldHVy biBlcnI7DQo+Pj4gKwl9DQo+Pj4gKw0KPj4+ICsJcGNpX3NldF9tYXN0ZXIocGRldik7DQo+Pj4g Kwl3cmFwID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqd3JhcCksIEdGUF9LRVJO RUwpOw0KPj4+ICsJaWYgKCF3cmFwKSB7DQo+Pj4gKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFp bGVkIHRvIGFsbG9jYXRlIG1lbW9yeVxuIik7DQo+Pj4gKwkJcmV0dXJuIC1FTk9NRU07DQo+Pj4g Kwl9DQo+Pj4gKw0KPj4+ICsJLyogZnVuY3Rpb24gMDogaG9zdChCQVJfMCkgKyBkZXZpY2UoQkFS XzEpICsgb3RnKEJBUl8yKSkuICovDQo+Pj4gKwltZW1zZXQod3JhcC0+ZGV2X3JlcywgMHgwMCwN Cj4+PiArCSAgICAgICBzaXplb2Yoc3RydWN0IHJlc291cmNlKSAqIEFSUkFZX1NJWkUod3JhcC0+ ZGV2X3JlcykpOw0KPj5NYWJ5ZSBub3QgbmVjZXNzYXJ5LCBkZXZtX2t6YWxsb2MoKSBhbHJlYWR5 IHNldCB0aGVtIGFzIDA7DQo+DQo+WWVzLCBpdCdzIG5vdCBuZWNlc3NhcnkuDQo+Pg0KPj4+ICsJ ZGV2X2RiZygmcGRldi0+ZGV2LCAiSW5pdGlhbGl6ZSBEZXZpY2UgcmVzb3VyY2VzXG4iKTsNCj4+ PiArCXJlcyA9IHdyYXAtPmRldl9yZXM7DQo+Pj4gKw0KPj4+ICsJcmVzW1JFU19ERVZfSURdLnN0 YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIFBDSV9CQVJfREVWKTsNCj4+PiArCXJlc1tS RVNfREVWX0lEXS5lbmQgPSAgIHBjaV9yZXNvdXJjZV9lbmQocGRldiwgUENJX0JBUl9ERVYpOw0K Pj4+ICsJcmVzW1JFU19ERVZfSURdLm5hbWUgPSAiZGV2IjsNCj4+PiArCXJlc1tSRVNfREVWX0lE XS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNOw0KPj4+ICsJZGV2X2RiZygmcGRldi0+ZGV2LCAiVVNC U1MtREVWIHBoeXNpY2FsIGJhc2UgYWRkcjogJXBhXG4iLA0KPj4+ICsJCSZyZXNbUkVTX0RFVl9J RF0uc3RhcnQpOw0KPj4+ICsNCj4+PiArCXJlc1tSRVNfSE9TVF9JRF0uc3RhcnQgPSBwY2lfcmVz b3VyY2Vfc3RhcnQocGRldiwgUENJX0JBUl9IT1NUKTsNCj4+PiArCXJlc1tSRVNfSE9TVF9JRF0u ZW5kID0gcGNpX3Jlc291cmNlX2VuZChwZGV2LCBQQ0lfQkFSX0hPU1QpOw0KPj4+ICsJcmVzW1JF U19IT1NUX0lEXS5uYW1lID0gInhoY2kiOw0KPj4+ICsJcmVzW1JFU19IT1NUX0lEXS5mbGFncyA9 IElPUkVTT1VSQ0VfTUVNOw0KPj4+ICsJZGV2X2RiZygmcGRldi0+ZGV2LCAiVVNCU1MtWEhDSSBw aHlzaWNhbCBiYXNlIGFkZHI6ICVwYVxuIiwNCj4+PiArCQkmcmVzW1JFU19IT1NUX0lEXS5zdGFy dCk7DQo+Pj4gKw0KPj4+ICsJcmVzW1JFU19EUkRfSURdLnN0YXJ0ID0gcGNpX3Jlc291cmNlX3N0 YXJ0KHBkZXYsIFBDSV9CQVJfT1RHKTsNCj4+PiArCXJlc1tSRVNfRFJEX0lEXS5lbmQgPSAgIHBj aV9yZXNvdXJjZV9lbmQocGRldiwgUENJX0JBUl9PVEcpOw0KPj4+ICsJcmVzW1JFU19EUkRfSURd Lm5hbWUgPSAib3RnIjsNCj4+PiArCXJlc1tSRVNfRFJEX0lEXS5mbGFncyA9IElPUkVTT1VSQ0Vf TUVNOw0KPj4+ICsJZGV2X2RiZygmcGRldi0+ZGV2LCAiVVNCU1MtRFJEIHBoeXNpY2FsIGJhc2Ug YWRkcjogJXBhXG4iLA0KPj4+ICsJCSZyZXNbUkVTX0RSRF9JRF0uc3RhcnQpOw0KPj4+ICsNCj4+ PiArCS8qIEludGVycnVwdCBjb21tb24gZm9yIGJvdGggZGV2aWNlIGFuZCBYSENJICovDQo+Pj4g Kwl3cmFwLT5kZXZfcmVzW1JFU19JUlFfSURdLnN0YXJ0ID0gcGRldi0+aXJxOw0KPj4+ICsJd3Jh cC0+ZGV2X3Jlc1tSRVNfSVJRX0lEXS5uYW1lID0gImNkbnMzLWlycSI7DQo+Pj4gKwl3cmFwLT5k ZXZfcmVzW1JFU19JUlFfSURdLmZsYWdzID0gSU9SRVNPVVJDRV9JUlE7DQo+Pj4gKw0KPj4+ICsJ Lyogc2V0IHVwIHBsYXRmb3JtIGRldmljZSBpbmZvICovDQo+Pj4gKwltZW1zZXQoJnBsYXRfaW5m bywgMCwgc2l6ZW9mKHBsYXRfaW5mbykpOw0KPj4+ICsJcGxhdF9pbmZvLnBhcmVudCA9ICZwZGV2 LT5kZXY7DQo+Pj4gKwlwbGF0X2luZm8uZndub2RlID0gcGRldi0+ZGV2LmZ3bm9kZTsNCj4+PiAr CXBsYXRfaW5mby5uYW1lID0gUExBVF9EUklWRVJfTkFNRTsNCj4+PiArCXBsYXRfaW5mby5pZCA9 IHBkZXYtPmRldmZuOw0KPj4+ICsJcGxhdF9pbmZvLnJlcyA9IHdyYXAtPmRldl9yZXM7DQo+Pj4g KwlwbGF0X2luZm8ubnVtX3JlcyA9IEFSUkFZX1NJWkUod3JhcC0+ZGV2X3Jlcyk7DQo+Pj4gKwlw bGF0X2luZm8uZG1hX21hc2sgPSBwZGV2LT5kbWFfbWFzazsNCj4+PiArDQo+Pj4gKwkvKiByZWdp c3RlciBwbGF0Zm9ybSBkZXZpY2UgKi8NCj4+PiArCXdyYXAtPnBsYXRfZGV2ID0gcGxhdGZvcm1f ZGV2aWNlX3JlZ2lzdGVyX2Z1bGwoJnBsYXRfaW5mbyk7DQo+Pj4gKwlpZiAoSVNfRVJSKHdyYXAt PnBsYXRfZGV2KSkNCj4+PiArCQlyZXR1cm4gUFRSX0VSUih3cmFwLT5wbGF0X2Rldik7DQo+Pj4g Kw0KPj4+ICsJcGNpX3NldF9kcnZkYXRhKHBkZXYsIHdyYXApOw0KPj4+ICsNCj4+PiArCXJldHVy biBlcnI7DQo+Pj4gK30NCj4+PiArDQo+Pj4gK3ZvaWQgY2RuczNfcGNpX3JlbW92ZShzdHJ1Y3Qg cGNpX2RldiAqcGRldikNCj4+PiArew0KPj4+ICsJc3RydWN0IGNkbnMzX3dyYXAgKndyYXAgPSAo c3RydWN0IGNkbnMzX3dyYXAgKilwY2lfZ2V0X2RydmRhdGEocGRldik7DQo+Pj4gKw0KPj4+ICsJ cGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIod3JhcC0+cGxhdF9kZXYpOw0KPj4+ICt9DQo+Pj4g Kw0KPj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgY2RuczNfcGNpX2lkc1td ID0gew0KPj4+ICsJeyBQQ0lfREVWSUNFKENETlNfVkVORE9SX0lELCBDRE5TX0RFVklDRV9JRCks IH0sDQo+Pj4gKwl7IDAsIH0NCj4+PiArfTsNCj4+PiArDQo+Pj4gK3N0YXRpYyBzdHJ1Y3QgcGNp X2RyaXZlciBjZG5zM19wY2lfZHJpdmVyID0gew0KPj4+ICsJLm5hbWUgPSBQQ0lfRFJJVkVSX05B TUUsDQo+Pj4gKwkuaWRfdGFibGUgPSBjZG5zM19wY2lfaWRzLA0KPj4+ICsJLnByb2JlID0gY2Ru czNfcGNpX3Byb2JlLA0KPj4+ICsJLnJlbW92ZSA9IGNkbnMzX3BjaV9yZW1vdmUsDQo+Pj4gK307 DQo+Pj4gKw0KPj4+ICttb2R1bGVfcGNpX2RyaXZlcihjZG5zM19wY2lfZHJpdmVyKTsNCj4+PiAr TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGNkbnMzX3BjaV9pZHMpOw0KPj4+ICsNCj4+PiArTU9E VUxFX0FVVEhPUigiUGF3ZWwgTGFzemN6YWsgPHBhd2VsbEBjYWRlbmNlLmNvbT4iKTsNCj4+PiAr TU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOw0KPj4+ICtNT0RVTEVfREVTQ1JJUFRJT04oIkNhZGVu Y2UgVVNCU1MgUENJIHdyYXBwZXJyIik7DQo+Pj4gKw0KPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJz L3VzYi9jZG5zMy9jb3JlLmMgYi9kcml2ZXJzL3VzYi9jZG5zMy9jb3JlLmMNCj4+PiBuZXcgZmls ZSBtb2RlIDEwMDY0NA0KPj4+IGluZGV4IDAwMDAwMDAwMDAwMC4uYWEyZjYzMjQxZGFiDQo+Pj4g LS0tIC9kZXYvbnVsbA0KPj4+ICsrKyBiL2RyaXZlcnMvdXNiL2NkbnMzL2NvcmUuYw0KPj4+IEBA IC0wLDAgKzEsNDAzIEBADQo+Pj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w DQo+Pj4gKy8qDQo+Pj4gKyAqIENhZGVuY2UgVVNCU1MgRFJEIERyaXZlci4NCj4+PiArICoNCj4+ PiArICogQ29weXJpZ2h0IChDKSAyMDE4IENhZGVuY2UuDQo+Pj4gKyAqIENvcHlyaWdodCAoQykg MjAxNy0yMDE4IE5YUA0KPj4+ICsgKg0KPj4+ICsgKiBBdXRob3I6IFBldGVyIENoZW4gPHBldGVy LmNoZW5AbnhwLmNvbT4NCj4+PiArICogICAgICAgICBQYXdlbCBMYXN6Y3phayA8cGF3ZWxsQGNh ZGVuY2UuY29tPg0KPj4+ICsgKi8NCj4+PiArDQo+Pj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUu aD4NCj4+PiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPg0KPj4+ICsjaW5jbHVkZSA8bGludXgv cGxhdGZvcm1fZGV2aWNlLmg+DQo+Pj4gKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4NCj4+ PiArI2luY2x1ZGUgPGxpbnV4L2lvLmg+DQo+Pj4gKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1l Lmg+DQo+Pj4gKw0KPj4+ICsjaW5jbHVkZSAiZ2FkZ2V0LmgiDQo+Pj4gKyNpbmNsdWRlICJjb3Jl LmgiDQo+Pj4gKyNpbmNsdWRlICJob3N0LWV4cG9ydC5oIg0KPj4+ICsjaW5jbHVkZSAiZ2FkZ2V0 LWV4cG9ydC5oIg0KPj4+ICsjaW5jbHVkZSAiZHJkLmgiDQo+Pj4gKyNpbmNsdWRlICJkZWJ1Zy5o Ig0KPj4+ICsNCj4+PiArc3RhdGljIGlubGluZQ0KPj4+ICtzdHJ1Y3QgY2RuczNfcm9sZV9kcml2 ZXIgKmNkbnMzX2dldF9jdXJyZW50X3JvbGVfZHJpdmVyKHN0cnVjdCBjZG5zMyAqY2RucykNCj4+ PiArew0KPj4+ICsJV0FSTl9PTihjZG5zLT5yb2xlID49IENETlMzX1JPTEVfRU5EIHx8ICFjZG5z LT5yb2xlc1tjZG5zLT5yb2xlXSk7DQo+Pj4gKwlyZXR1cm4gY2Rucy0+cm9sZXNbY2Rucy0+cm9s ZV07DQo+Pj4gK30NCj4+PiArDQo+Pj4gK3N0YXRpYyBpbnQgY2RuczNfcm9sZV9zdGFydChzdHJ1 Y3QgY2RuczMgKmNkbnMsIGVudW0gY2RuczNfcm9sZXMgcm9sZSkNCj4+PiArew0KPj4+ICsJaW50 IHJldDsNCj4+PiArDQo+Pj4gKwlpZiAoV0FSTl9PTihyb2xlID49IENETlMzX1JPTEVfRU5EKSkN Cj4+PiArCQlyZXR1cm4gMDsNCj4+PiArDQo+Pj4gKwlpZiAoIWNkbnMtPnJvbGVzW3JvbGVdKQ0K Pj4+ICsJCXJldHVybiAtRU5YSU87DQo+Pj4gKw0KPj4+ICsJaWYgKGNkbnMtPnJvbGVzW3JvbGVd LT5zdGF0ZSA9PSBDRE5TM19ST0xFX1NUQVRFX0FDVElWRSkNCj4+PiArCQlyZXR1cm4gMDsNCj4+ PiArDQo+Pj4gKwltdXRleF9sb2NrKCZjZG5zLT5tdXRleCk7DQo+Pj4gKwljZG5zLT5yb2xlID0g cm9sZTsNCj4+PiArCXJldCA9IGNkbnMtPnJvbGVzW3JvbGVdLT5zdGFydChjZG5zKTsNCj4+PiAr CWlmICghcmV0KQ0KPj4+ICsJCWNkbnMtPnJvbGVzW3JvbGVdLT5zdGF0ZSA9IENETlMzX1JPTEVf U1RBVEVfQUNUSVZFOw0KPj4+ICsJbXV0ZXhfdW5sb2NrKCZjZG5zLT5tdXRleCk7DQo+Pj4gKwly ZXR1cm4gcmV0Ow0KPj4+ICt9DQo+Pj4gKw0KPj4+ICt2b2lkIGNkbnMzX3JvbGVfc3RvcChzdHJ1 Y3QgY2RuczMgKmNkbnMpDQo+Pj4gK3sNCj4+PiArCWVudW0gY2RuczNfcm9sZXMgcm9sZSA9IGNk bnMtPnJvbGU7DQo+Pj4gKw0KPj4+ICsJaWYgKHJvbGUgPj0gQ0ROUzNfUk9MRV9FTkQpIHsNCj4+ PiArCQlXQVJOX09OKHJvbGUgPiBDRE5TM19ST0xFX0VORCk7DQo+Pj4gKwkJcmV0dXJuOw0KPj4+ ICsJfQ0KPj4+ICsNCj4+PiArCWlmIChjZG5zLT5yb2xlc1tyb2xlXS0+c3RhdGUgPT0gQ0ROUzNf Uk9MRV9TVEFURV9JTkFDVElWRSkNCj4+PiArCQlyZXR1cm47DQo+Pj4gKw0KPj4+ICsJbXV0ZXhf bG9jaygmY2Rucy0+bXV0ZXgpOw0KPj4+ICsJY2Rucy0+cm9sZXNbcm9sZV0tPnN0b3AoY2Rucyk7 DQo+Pj4gKwljZG5zLT5yb2xlc1tyb2xlXS0+c3RhdGUgPSBDRE5TM19ST0xFX1NUQVRFX0lOQUNU SVZFOw0KPj4+ICsJbXV0ZXhfdW5sb2NrKCZjZG5zLT5tdXRleCk7DQo+Pj4gK30NCj4+PiArDQo+ Pj4gKy8qDQo+Pj4gKyAqIGNkbnMtPnJvbGUgZ2V0cyBmcm9tIGNkbnMzX2dldF9pbml0aWFsX3Jv bGUsIGFuZCB0aGlzIEFQSSB0ZWxscyByb2xlIGF0IHRoZQ0KPj4+ICsgKiBydW50aW1lLg0KPj4+ ICsgKiBJZiBib3RoIHJvbGVzIGFyZSBzdXBwb3J0ZWQsIHRoZSByb2xlIGlzIHNlbGVjdGVkIGJh c2VkIG9uIHZidXMvaWQuDQo+Pj4gKyAqIEl0IGNvdWxkIGJlIHJlYWQgZnJvbSBPVEcgcmVnaXN0 ZXIgb3IgZXh0ZXJuYWwgY29ubmVjdG9yLg0KPj4+ICsgKiBJZiBvbmx5IHNpbmdsZSByb2xlIGlz IHN1cHBvcnRlZCwgb25seSBvbmUgcm9sZSBzdHJ1Y3R1cmUNCj4+PiArICogaXMgYWxsb2NhdGVk LCBjZG5zLT5yb2xlc1tDRE5TM19ST0xFX0hPU1RdIG9yIGNkbnMtPnJvbGVzW0NETlMzX1JPTEVf R0FER0VUXS4NCj4+PiArICovDQo+Pj4gK3N0YXRpYyBlbnVtIGNkbnMzX3JvbGVzIGNkbnMzX2dl dF9pbml0aWFsX3JvbGUoc3RydWN0IGNkbnMzICpjZG5zKQ0KPj4+ICt7DQo+Pj4gKwlpZiAoY2Ru cy0+cm9sZXNbQ0ROUzNfUk9MRV9IT1NUXSAmJiBjZG5zLT5yb2xlc1tDRE5TM19ST0xFX0dBREdF VF0pIHsNCj4+PiArCQlpZiAoY2RuczNfaXNfaG9zdChjZG5zKSkNCj4+PiArCQkJcmV0dXJuIENE TlMzX1JPTEVfSE9TVDsNCj4+PiArCQlpZiAoY2RuczNfaXNfZGV2aWNlKGNkbnMpKQ0KPj4+ICsJ CQlyZXR1cm4gQ0ROUzNfUk9MRV9HQURHRVQ7DQo+Pj4gKwl9DQo+Pj4gKwlyZXR1cm4gY2Rucy0+ cm9sZXNbQ0ROUzNfUk9MRV9IT1NUXQ0KPj4+ICsJCT8gQ0ROUzNfUk9MRV9IT1NUDQo+Pj4gKwkJ OiBDRE5TM19ST0xFX0dBREdFVDsNCj4+PiArfQ0KPj4+ICsNCj4+PiArc3RhdGljIHZvaWQgY2Ru czNfZXhpdF9yb2xlcyhzdHJ1Y3QgY2RuczMgKmNkbnMpDQo+Pj4gK3sNCj4+PiArCWNkbnMzX3Jv bGVfc3RvcChjZG5zKTsNCj4+PiArCWNkbnMzX2RyZF9leGl0KGNkbnMpOw0KPj4+ICt9DQo+Pj4g Kw0KPj4+ICsvKioNCj4+PiArICogY2RuczNfY29yZV9pbml0X3JvbGUgLSBpbml0aWFsaXplIHJv bGUgb2Ygb3BlcmF0aW9uDQo+Pj4gKyAqIEBjZG5zOiBQb2ludGVyIHRvIGNkbnMzIHN0cnVjdHVy ZQ0KPj4+ICsgKg0KPj4+ICsgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvdGhlcndpc2UgbmVnYXRp dmUgZXJybm8NCj4+PiArICovDQo+Pj4gK3N0YXRpYyBpbnQgY2RuczNfY29yZV9pbml0X3JvbGUo c3RydWN0IGNkbnMzICpjZG5zKQ0KPj4+ICt7DQo+Pj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBj ZG5zLT5kZXY7DQo+Pj4gKwllbnVtIHVzYl9kcl9tb2RlIGJlc3RfZHJfbW9kZTsNCj4+PiArCWVu dW0gdXNiX2RyX21vZGUgZHJfbW9kZTsNCj4+PiArCWludCByZXQgPSAwOw0KPj4+ICsNCj4+PiAr CWRyX21vZGUgPSB1c2JfZ2V0X2RyX21vZGUoZGV2KTsNCj4+PiArCWNkbnMtPnJvbGUgPSBDRE5T M19ST0xFX0VORDsNCj4+PiArDQo+Pj4gKwkvKg0KPj4+ICsJICogSWYgZHJpdmVyIGNhbid0IHJl YWQgbW9kZSBieSBtZWFucyBvZiB1c2JfZ2V0X2RyX21kb2UgZnVuY3Rpb24gdGhlbg0KPj4+ICsJ ICogY2hvb3NlcyBtb2RlIGFjY29yZGluZyB3aXRoIEtlcm5lbCBjb25maWd1cmF0aW9uLiBUaGlz IHNldHRpbmcNCj4+PiArCSAqIGNhbiBiZSByZXN0cmljdGVkIGxhdGVyIGRlcGVuZGluZyBvbiBz dHJhcCBwaW4gY29uZmlndXJhdGlvbi4NCj4+PiArCSAqLw0KPj4+ICsJaWYgKGRyX21vZGUgPT0g VVNCX0RSX01PREVfVU5LTk9XTikgew0KPj4+ICsJCWlmIChJU19FTkFCTEVEKENPTkZJR19VU0Jf Q0ROUzNfSE9TVCkgJiYNCj4+PiArCQkgICAgSVNfRU5BQkxFRChDT05GSUdfVVNCX0NETlMzX0dB REdFVCkpDQo+Pj4gKwkJCWRyX21vZGUgPSBVU0JfRFJfTU9ERV9PVEc7DQo+Pj4gKwkJZWxzZSBp ZiAoSVNfRU5BQkxFRChDT05GSUdfVVNCX0NETlMzX0hPU1QpKQ0KPj4+ICsJCQlkcl9tb2RlID0g VVNCX0RSX01PREVfSE9TVDsNCj4+PiArCQllbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19VU0Jf Q0ROUzNfR0FER0VUKSkNCj4+PiArCQkJZHJfbW9kZSA9IFVTQl9EUl9NT0RFX1BFUklQSEVSQUw7 DQo+Pj4gKwl9DQo+Pj4gKw0KPj4+ICsJYmVzdF9kcl9tb2RlID0gVVNCX0RSX01PREVfT1RHOw0K Pj4+ICsNCj4+PiArCWlmIChkcl9tb2RlID09IFVTQl9EUl9NT0RFX09URykgew0KPj4+ICsJCWJl c3RfZHJfbW9kZSA9IGNkbnMtPmRyX21vZGU7DQo+Pj4gKwl9IGVsc2UgaWYgKGNkbnMtPmRyX21v ZGUgPT0gVVNCX0RSX01PREVfT1RHKSB7DQo+Pj4gKwkJYmVzdF9kcl9tb2RlID0gZHJfbW9kZTsN Cj4+PiArCX0gZWxzZSBpZiAoY2Rucy0+ZHJfbW9kZSAhPSBkcl9tb2RlKSB7DQo+Pj4gKwkJZGV2 X2VycihkZXYsICJJbmNvcnJlY3QgRFJEIGNvbmZpZ3VyYXRpb25cbiIpOw0KPj4+ICsJCXJldHVy biAtRUlOVkFMOw0KPj4+ICsJfQ0KPj4+ICsNCj4+PiArCWRyX21vZGUgPSBiZXN0X2RyX21vZGU7 DQo+Pj4gKw0KPj4+ICsJaWYgKGRyX21vZGUgPT0gVVNCX0RSX01PREVfT1RHIHx8IGRyX21vZGUg PT0gVVNCX0RSX01PREVfSE9TVCkgew0KPj4+ICsJCXJldCA9IGNkbnMzX2hvc3RfaW5pdChjZG5z KTsNCj4+PiArCQlpZiAocmV0KSB7DQo+Pj4gKwkJCWRldl9lcnIoZGV2LCAiSG9zdCBpbml0aWFs aXphdGlvbiBmYWlsZWQgd2l0aCAlZFxuIiwNCj4+PiArCQkJCXJldCk7DQo+Pj4gKwkJCWdvdG8g ZXJyOw0KPj4+ICsJCX0NCj4+PiArCX0NCj4+PiArDQo+Pj4gKwlpZiAoZHJfbW9kZSA9PSBVU0Jf RFJfTU9ERV9PVEcgfHwgZHJfbW9kZSA9PSBVU0JfRFJfTU9ERV9QRVJJUEhFUkFMKSB7DQo+Pj4g KwkJcmV0ID0gY2RuczNfZ2FkZ2V0X2luaXQoY2Rucyk7DQo+Pj4gKwkJaWYgKHJldCkgew0KPj4+ ICsJCQlkZXZfZXJyKGRldiwgIkRldmljZSBpbml0aWFsaXphdGlvbiBmYWlsZWQgd2l0aCAlZFxu IiwNCj4+PiArCQkJCXJldCk7DQo+Pj4gKwkJCWdvdG8gZXJyOw0KPj4+ICsJCX0NCj4+PiArCX0N Cj4+PiArDQo+Pj4gKwljZG5zLT5kZXNpcmVkX2RyX21vZGUgPSBkcl9tb2RlOw0KPj4+ICsJY2Ru cy0+ZHJfbW9kZSA9IGRyX21vZGU7DQo+Pj4gKwkvKg0KPj4+ICsJICogZHJfbW9kZSBjb3VsZCBi ZSBjaGFuZ2Ugc28gRFJEIG11c3QgdXBkYXRlIGNvbnRyb2xsZXINCj4+PiArCSAqIGNvbmZpZ3Vy YXRpb24NCj4+PiArCSAqLw0KPj4+ICsJcmV0ID0gY2RuczNfZHJkX3VwZGF0ZV9tb2RlKGNkbnMp Ow0KPj4+ICsJaWYgKHJldCkNCj4+PiArCQlnb3RvIGVycjsNCj4+PiArDQo+Pj4gKwljZG5zLT5y b2xlID0gY2RuczNfZ2V0X2luaXRpYWxfcm9sZShjZG5zKTsNCj4+PiArDQo+Pj4gKwlyZXQgPSBj ZG5zM19yb2xlX3N0YXJ0KGNkbnMsIGNkbnMtPnJvbGUpOw0KPj4+ICsJaWYgKHJldCkgew0KPj4+ ICsJCWRldl9lcnIoZGV2LCAiY2FuJ3Qgc3RhcnQgJXMgcm9sZVxuIiwNCj4+PiArCQkJY2RuczNf Z2V0X2N1cnJlbnRfcm9sZV9kcml2ZXIoY2RucyktPm5hbWUpOw0KPj4+ICsJCWdvdG8gZXJyOw0K Pj4+ICsJfQ0KPj4+ICsNCj4+PiArCXJldHVybiByZXQ7DQo+Pj4gK2VycjoNCj4+PiArCWNkbnMz X2V4aXRfcm9sZXMoY2Rucyk7DQo+Pj4gKwlyZXR1cm4gcmV0Ow0KPj4+ICt9DQo+Pj4gKw0KPj4+ ICsvKioNCj4+PiArICogY2RzbjNfZ2V0X3JlYWxfcm9sZSAtIGdldCByZWFsIHJvbGUgb2YgY29u dHJvbGxlciBiYXNlZCBvbiBoYXJkd2FyZSBzZXR0aW5ncy4NCj4+PiArICogQGNkbnM6IFBvaW50 ZXIgdG8gY2RuczMgc3RydWN0dXJlDQo+Pj4gKyAqDQo+Pj4gKyAqIFJldHVybnMgcm9sZQ0KPj4+ ICsgKi8NCj4+PiArZW51bSBjZG5zM19yb2xlcyBjZHNuM19nZXRfcmVhbF9yb2xlKHN0cnVjdCBj ZG5zMyAqY2RucykNCj4+PiArew0KPj4+ICsJZW51bSBjZG5zM19yb2xlcyByb2xlID0gQ0ROUzNf Uk9MRV9FTkQ7DQo+Pj4gKw0KPj4+ICsJaWYgKGNkbnMtPmN1cnJlbnRfZHJfbW9kZSA9PSBVU0Jf RFJfTU9ERV9PVEcpIHsNCj4+PiArCQlpZiAoY2RuczNfZ2V0X2lkKGNkbnMpKQ0KPj4+ICsJCQly b2xlID0gQ0ROUzNfUk9MRV9HQURHRVQ7DQo+Pj4gKwkJZWxzZQ0KPj4+ICsJCQlyb2xlID0gQ0RO UzNfUk9MRV9IT1NUOw0KPj4+ICsJfSBlbHNlIHsNCj4+PiArCQlpZiAoY2RuczNfaXNfaG9zdChj ZG5zKSkNCj4+PiArCQkJcm9sZSA9IENETlMzX1JPTEVfSE9TVDsNCj4+PiArCQlpZiAoY2RuczNf aXNfZGV2aWNlKGNkbnMpKQ0KPj4+ICsJCQlyb2xlID0gQ0ROUzNfUk9MRV9HQURHRVQ7DQo+Pj4g Kwl9DQo+Pj4gKw0KPj4+ICsJcmV0dXJuIHJvbGU7DQo+Pj4gK30NCj4+PiArDQo+Pj4gKy8qKg0K Pj4+ICsgKiBjZG5zM19yb2xlX3N3aXRjaCAtIHdvcmsgcXVldWUgaGFuZGxlciBmb3Igcm9sZSBz d2l0Y2gNCj4+PiArICoNCj4+PiArICogQHdvcms6IHdvcmsgcXVldWUgaXRlbSBzdHJ1Y3R1cmUN Cj4+PiArICoNCj4+PiArICogSGFuZGxlcyBiZWxvdyBldmVudHM6DQo+Pj4gKyAqIC0gUm9sZSBz d2l0Y2ggZm9yIGR1YWwtcm9sZSBkZXZpY2VzDQo+Pj4gKyAqIC0gQ0ROUzNfUk9MRV9HQURHRVQg PC0tPiBDRE5TM19ST0xFX0VORCBmb3IgcGVyaXBoZXJhbC1vbmx5IGRldmljZXMNCj4+PiArICov DQo+Pj4gK3N0YXRpYyB2b2lkIGNkbnMzX3JvbGVfc3dpdGNoKHN0cnVjdCB3b3JrX3N0cnVjdCAq d29yaykNCj4+PiArew0KPj4+ICsJZW51bSBjZG5zM19yb2xlcyByb2xlID0gQ0ROUzNfUk9MRV9F TkQ7DQo+Pj4gKwlzdHJ1Y3QgY2RuczNfcm9sZV9kcml2ZXIgKnJvbGVfZHJ2Ow0KPj4+ICsJZW51 bSBjZG5zM19yb2xlcyBjdXJyZW50X3JvbGU7DQo+Pj4gKwlzdHJ1Y3QgY2RuczMgKmNkbnM7DQo+ Pj4gKwlpbnQgcmV0ID0gMDsNCj4+PiArDQo+Pj4gKwljZG5zID0gY29udGFpbmVyX29mKHdvcmss IHN0cnVjdCBjZG5zMywgcm9sZV9zd2l0Y2hfd3EpOw0KPj4+ICsNCj4+PiArCS8qIER1cmluZyBz d2l0Y2hpbmcgY2Rucy0+cm9sZSBjYW4gYmUgZGlmZmVyZW50IHRoZW4gcm9sZSAqLw0KPj4+ICsJ cm9sZSA9IGNkc24zX2dldF9yZWFsX3JvbGUoY2Rucyk7DQo+Pj4gKw0KPj4+ICsJcm9sZV9kcnYg PSBjZG5zM19nZXRfY3VycmVudF9yb2xlX2RyaXZlcihjZG5zKTsNCj4+PiArDQo+Pj4gKwlwbV9y dW50aW1lX2dldF9zeW5jKGNkbnMtPmRldik7DQo+Pj4gKw0KPj4+ICsJLyogRGlzYWJsZSBjdXJy ZW50IHJvbGUuIFRoaXMgc3RhdGUgY2FuIGJlIGZvcmNlZCBmcm9tIHVzZXIgc3BhY2UuICovDQo+ Pj4gKwlpZiAoY2Rucy0+ZGVidWdfZGlzYWJsZSAmJiByb2xlX2Rydi0+c3RhdGUgPT0gQ0ROUzNf Uk9MRV9TVEFURV9BQ1RJVkUpIHsNCj4+PiArCQljZG5zM19yb2xlX3N0b3AoY2Rucyk7DQo+Pj4g KwkJZ290byBleGl0Ow0KPj4+ICsJfQ0KPj4+ICsNCj4+PiArCS8qIERvIG5vdGhpbmcgaWYgbm90 aGluZyBjaGFuZ2VkICovDQo+Pj4gKwlpZiAoY2Rucy0+cm9sZSA9PSByb2xlICYmIHJvbGVfZHJ2 LT5zdGF0ZSA9PSBDRE5TM19ST0xFX1NUQVRFX0FDVElWRSkNCj4+PiArCQlnb3RvIGV4aXQ7DQo+ Pj4gKw0KPj4+ICsJY2RuczNfcm9sZV9zdG9wKGNkbnMpOw0KPj4+ICsNCj4+PiArCXJvbGUgPSBj ZHNuM19nZXRfcmVhbF9yb2xlKGNkbnMpOw0KPj4+ICsNCj4+PiArCWN1cnJlbnRfcm9sZSA9IGNk bnMtPnJvbGU7DQo+Pj4gKwlkZXZfZGJnKGNkbnMtPmRldiwgIlN3aXRjaGluZyByb2xlIik7DQo+ Pj4gKw0KPj4+ICsJcmV0ID0gY2RuczNfcm9sZV9zdGFydChjZG5zLCByb2xlKTsNCj4+PiArCWlm IChyZXQpIHsNCj4+PiArCQkvKiBCYWNrIHRvIGN1cnJlbnQgcm9sZSAqLw0KPj4+ICsJCWRldl9l cnIoY2Rucy0+ZGV2LCAic2V0ICVkIGhhcyBmYWlsZWQsIGJhY2sgdG8gJWRcbiIsDQo+Pj4gKwkJ CXJvbGUsIGN1cnJlbnRfcm9sZSk7DQo+Pj4gKwkJY2RuczNfcm9sZV9zdGFydChjZG5zLCBjdXJy ZW50X3JvbGUpOw0KPj4+ICsJfQ0KPj4+ICtleGl0Og0KPj4+ICsJcG1fcnVudGltZV9wdXRfc3lu YyhjZG5zLT5kZXYpOw0KPj4+ICt9DQo+Pj4gKw0KPj4+ICsvKioNCj4+PiArICogY2RuczNfcHJv YmUgLSBwcm9iZSBmb3IgY2RuczMgY29yZSBkZXZpY2UNCj4+PiArICogQHBkZXY6IFBvaW50ZXIg dG8gY2RuczMgY29yZSBwbGF0Zm9ybSBkZXZpY2UNCj4+PiArICoNCj4+PiArICogUmV0dXJucyAw IG9uIHN1Y2Nlc3Mgb3RoZXJ3aXNlIG5lZ2F0aXZlIGVycm5vDQo+Pj4gKyAqLw0KPj4+ICtzdGF0 aWMgaW50IGNkbnMzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+Pj4gK3sN Cj4+PiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7DQo+Pj4gKwlzdHJ1Y3QgcmVz b3VyY2UJKnJlczsNCj4+PiArCXN0cnVjdCBjZG5zMyAqY2RuczsNCj4+PiArCXZvaWQgX19pb21l bSAqcmVnczsNCj4+PiArCWludCByZXQ7DQo+Pj4gKw0KPj4+ICsJY2RucyA9IGRldm1fa3phbGxv YyhkZXYsIHNpemVvZigqY2RucyksIEdGUF9LRVJORUwpOw0KPj4+ICsJaWYgKCFjZG5zKQ0KPj4+ ICsJCXJldHVybiAtRU5PTUVNOw0KPj4+ICsNCj4+PiArCWNkbnMtPmRldiA9IGRldjsNCj4+PiAr DQo+Pj4gKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBjZG5zKTsNCj4+PiArDQo+Pj4gKwly ZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOw0KPj4+ ICsJaWYgKCFyZXMpIHsNCj4+PiArCQlkZXZfZXJyKGRldiwgIm1pc3NpbmcgSVJRXG4iKTsNCj4+ PiArCQlyZXR1cm4gLUVOT0RFVjsNCj4+PiArCX0NCj4+PiArCWNkbnMtPmlycSA9IHJlcy0+c3Rh cnQ7DQo+Pj4gKw0KPj4+ICsJY2Rucy0+eGhjaV9yZXNbMF0gPSAqcmVzOw0KPj4+ICsNCj4+PiAr CS8qDQo+Pj4gKwkgKiBSZXF1ZXN0IG1lbW9yeSByZWdpb24NCj4+PiArCSAqIHJlZ2lvbi0wOiB4 SENJDQo+Pj4gKwkgKiByZWdpb24tMTogUGVyaXBoZXJhbA0KPj4+ICsJICogcmVnaW9uLTI6IE9U RyByZWdpc3RlcnMNCj4+PiArCSAqLw0KPj50aGUgY29tbWVudCBzaG91bGQgYmUgbW9kaWZpZWQg b3IgcmVtb3ZlZCBpZiBub3QgbmVjZXNzYXJ5IHdoZW4gY29kZXMNCj4+Y2hhbmdlZC4NCj4NCj5Z ZXMsIG5vdyBpdCdzIG5vdCBuZWNlc3NhcnkuDQo+DQo+Pj4gKwlyZXMgPSBwbGF0Zm9ybV9nZXRf cmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAieGhjaSIpOw0KPj4+ICsJaWYg KCFyZXMpDQo+Pj4gKwkJcmV0dXJuIC1FTlhJTzsNCj4+PiArDQo+Pj4gKwljZG5zLT54aGNpX3Jl c1sxXSA9ICpyZXM7DQo+Pj4gKw0KPj4+ICsJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5 bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgImRldiIpOw0KPj4+ICsJcmVncyA9IGRldm1faW9y ZW1hcF9yZXNvdXJjZShkZXYsIHJlcyk7DQo+Pj4gKwlpZiAoSVNfRVJSKHJlZ3MpKQ0KPj4+ICsJ CXJldHVybiBQVFJfRVJSKHJlZ3MpOw0KPj4+ICsJY2Rucy0+ZGV2X3JlZ3MJPSByZWdzOw0KPj4+ ICsNCj4+PiArCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNP VVJDRV9NRU0sICJvdGciKTsNCj4+PiArCWlmICghcmVzKQ0KPj4+ICsJCXJldHVybiAtRU5YSU87 DQo+Pj4gKw0KPj4+ICsJY2Rucy0+b3RnX3JlcyA9ICpyZXM7DQo+Pj4gKw0KPj4+ICsJbXV0ZXhf aW5pdCgmY2Rucy0+bXV0ZXgpOw0KPj4+ICsNCj4+PiArCWNkbnMtPnBoeSA9IGRldm1fcGh5X29w dGlvbmFsX2dldChkZXYsICJjZG5zMyx1c2JwaHkiKTsNCj4+PiArCWlmIChJU19FUlIoY2Rucy0+ cGh5KSkNCj4+PiArCQlyZXR1cm4gUFRSX0VSUihjZG5zLT5waHkpOw0KPj4+ICsNCj4+PiArCXBo eV9pbml0KGNkbnMtPnBoeSk7DQo+PmNoZWNrIHRoZSByZXR1cm4gdmFsdWU/IGFuZA0KPj5JdCdz IGJldHRlciB0byBjYWxsIHBoeV9wb3dlcl9vbigpIGhlcmUgZXZlbiBpZiB0aGUgcGh5IGRyaXZl ciBkb2Vzbid0DQo+PnByb3ZpZGUgcG93ZXJfb24oKQ0KPg0KPkRyaXZlciBkb2Vzbid0IG5lZWQg dG8gY2hlY2sgcmV0dXJuIHZhbHVlIGluIHRoaXMgY2FzZS4gSXQgd2FzIGRpc2N1c3NlZCBzb21l IHRpbWUgYWdvLg0KPg0KPj4NCj4+PiArDQo+Pj4gKwlJTklUX1dPUksoJmNkbnMtPnJvbGVfc3dp dGNoX3dxLCBjZG5zM19yb2xlX3N3aXRjaCk7DQo+Pj4gKw0KPj4+ICsJcmV0ID0gY2RuczNfZHJk X2luaXQoY2Rucyk7DQo+Pj4gKwlpZiAocmV0KQ0KPj4+ICsJCWdvdG8gZXJyOw0KPj4+ICsNCj4+ PiArCXJldCA9IGNkbnMzX2NvcmVfaW5pdF9yb2xlKGNkbnMpOw0KPj4+ICsJaWYgKHJldCkNCj4+ PiArCQlnb3RvIGVycjsNCj4+PiArDQo+Pj4gKwljZG5zM19kZWJ1Z2ZzX2luaXQoY2Rucyk7DQo+ Pj4gKwlkZXZpY2Vfc2V0X3dha2V1cF9jYXBhYmxlKGRldiwgdHJ1ZSk7DQo+Pj4gKwlwbV9ydW50 aW1lX3NldF9hY3RpdmUoZGV2KTsNCj4+PiArCXBtX3J1bnRpbWVfZW5hYmxlKGRldik7DQo+Pj4g Kw0KPj4+ICsJLyoNCj4+PiArCSAqIFRoZSBjb250cm9sbGVyIG5lZWRzIGxlc3MgdGltZSBiZXR3 ZWVuIGJ1cyBhbmQgY29udHJvbGxlciBzdXNwZW5kLA0KPj4+ICsJICogYW5kIHdlIGFsc28gbmVl ZHMgYSBzbWFsbCBkZWxheSB0byBhdm9pZCBmcmVxdWVudGx5IGVudGVyaW5nIGxvdw0KPj4+ICsJ ICogcG93ZXIgbW9kZS4NCj4+PiArCSAqLw0KPj4+ICsJcG1fcnVudGltZV9zZXRfYXV0b3N1c3Bl bmRfZGVsYXkoZGV2LCAyMCk7DQo+Pj4gKwlwbV9ydW50aW1lX21hcmtfbGFzdF9idXN5KGRldik7 DQo+Pj4gKwlwbV9ydW50aW1lX3VzZV9hdXRvc3VzcGVuZChkZXYpOw0KPj4+ICsJZGV2X2RiZyhk ZXYsICJDYWRlbmNlIFVTQjMgY29yZTogcHJvYmUgc3VjY2VlZFxuIik7DQo+Pj4gKw0KPj4+ICsJ cmV0dXJuIDA7DQo+Pj4gKw0KPj4+ICtlcnI6DQo+Pj4gKwlwaHlfZXhpdChjZG5zLT5waHkpOw0K Pj4+ICsJcmV0dXJuIHJldDsNCj4+PiArfQ0KPj4+ICsNCj4+PiArLyoqDQo+Pj4gKyAqIGNkbnMz X3JlbW92ZSAtIHVuYmluZCBkcmQgZHJpdmVyIGFuZCBjbGVhbiB1cA0KPj4+ICsgKiBAcGRldjog UG9pbnRlciB0byBMaW51eCBwbGF0Zm9ybSBkZXZpY2UNCj4+PiArICoNCj4+PiArICogUmV0dXJu cyAwIG9uIHN1Y2Nlc3Mgb3RoZXJ3aXNlIG5lZ2F0aXZlIGVycm5vDQo+Pj4gKyAqLw0KPj4+ICtz dGF0aWMgaW50IGNkbnMzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KPj4+ ICt7DQo+Pj4gKwlzdHJ1Y3QgY2RuczMgKmNkbnMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2 KTsNCj4+PiArDQo+Pj4gKwlwbV9ydW50aW1lX2dldF9zeW5jKCZwZGV2LT5kZXYpOw0KPj4+ICsJ cG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOw0KPj4+ICsJcG1fcnVudGltZV9wdXRfbm9p ZGxlKCZwZGV2LT5kZXYpOw0KPj4+ICsJY2RuczNfZGVidWdmc19leGl0KGNkbnMpOw0KPj4+ICsJ Y2RuczNfZXhpdF9yb2xlcyhjZG5zKTsNCj4+PiArCXBoeV9leGl0KGNkbnMtPnBoeSk7DQo+Pj4g KwlyZXR1cm4gMDsNCj4+PiArfQ0KPj4+ICsNCj4+PiArI2lmZGVmIENPTkZJR19PRg0KPj4+ICtz dGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBvZl9jZG5zM19tYXRjaFtdID0gew0KPj4+ ICsJeyAuY29tcGF0aWJsZSA9ICJjZG5zLHVzYjMtMS4wLjAiIH0sDQo+Pj4gKwl7IC5jb21wYXRp YmxlID0gImNkbnMsdXNiMy0xLjAuMSIgfSwNCj4+PiArCXsgfSwNCj4+PiArfTsNCj4+PiArTU9E VUxFX0RFVklDRV9UQUJMRShvZiwgb2ZfY2RuczNfbWF0Y2gpOw0KPj4+ICsjZW5kaWYNCj4+PiAr DQo+Pj4gK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGNkbnMzX2RyaXZlciA9IHsNCj4+ PiArCS5wcm9iZQkJPSBjZG5zM19wcm9iZSwNCj4+PiArCS5yZW1vdmUJCT0gY2RuczNfcmVtb3Zl LA0KPj4+ICsJLmRyaXZlcgkJPSB7DQo+Pj4gKwkJLm5hbWUJPSAiY2Rucy11c2IzIiwNCj4+PiAr CQkub2ZfbWF0Y2hfdGFibGUJPSBvZl9tYXRjaF9wdHIob2ZfY2RuczNfbWF0Y2gpLA0KPj4+ICsJ fSwNCj4+PiArfTsNCj4+PiArDQo+Pj4gK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoY2RuczNfZHJp dmVyKTsNCj4+PiArDQo+Pj4gK01PRFVMRV9BTElBUygicGxhdGZvcm06Y2RuczMiKTsNCj4+PiAr TU9EVUxFX0FVVEhPUigiUGF3ZWwgTGFzemN6YWsgPHBhd2VsbEBjYWRlbmNlLmNvbT4iKTsNCj4+ PiArTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOw0KPj4+ICtNT0RVTEVfREVTQ1JJUFRJT04oIkNh ZGVuY2UgVVNCMyBEUkQgQ29udHJvbGxlciBEcml2ZXIiKTsNCj4+PiBkaWZmIC0tZ2l0IGEvZHJp dmVycy91c2IvY2RuczMvY29yZS5oIGIvZHJpdmVycy91c2IvY2RuczMvY29yZS5oDQo+Pj4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQNCj4+PiBpbmRleCAwMDAwMDAwMDAwMDAuLmZiNGIzOTIwNjE1OA0K Pj4+IC0tLSAvZGV2L251bGwNCj4+PiArKysgYi9kcml2ZXJzL3VzYi9jZG5zMy9jb3JlLmgNCj4+ PiBAQCAtMCwwICsxLDExNiBAQA0KPj4+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMCAqLw0KPj4+ICsvKg0KPj4+ICsgKiBDYWRlbmNlIFVTQlNTIERSRCBIZWFkZXIgRmlsZS4N Cj4+PiArICoNCj4+PiArICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggTlhQDQo+Pj4gKyAqIENv cHlyaWdodCAoQykgMjAxOCBDYWRlbmNlLg0KPj4+ICsgKg0KPj4+ICsgKiBBdXRob3JzOiBQZXRl ciBDaGVuIDxwZXRlci5jaGVuQG54cC5jb20+DQo+Pj4gKyAqICAgICAgICAgIFBhd2VsIExhc3pj emFrIDxwYXdlbGxAY2FkZW5jZS5jb20+DQo+Pj4gKyAqLw0KPj4+ICsjaW5jbHVkZSA8bGludXgv dXNiL290Zy5oPg0KPj4+ICsNCj4+PiArI2lmbmRlZiBfX0xJTlVYX0NETlMzX0NPUkVfSA0KPj4+ ICsjZGVmaW5lIF9fTElOVVhfQ0ROUzNfQ09SRV9IDQo+Pj4gKw0KPj4+ICtzdHJ1Y3QgY2RuczM7 DQo+Pj4gK2VudW0gY2RuczNfcm9sZXMgew0KPj4+ICsJQ0ROUzNfUk9MRV9IT1NUID0gMCwNCj4+ PiArCUNETlMzX1JPTEVfR0FER0VULA0KPj4+ICsJQ0ROUzNfUk9MRV9FTkQsDQo+Pj4gK307DQo+ Pj4gKw0KPj4+ICsvKioNCj4+PiArICogc3RydWN0IGNkbnMzX3JvbGVfZHJpdmVyIC0gaG9zdC9n YWRnZXQgcm9sZSBkcml2ZXINCj4+PiArICogQHN0YXJ0OiBzdGFydCB0aGlzIHJvbGUNCj4+PiAr ICogQHN0b3A6IHN0b3AgdGhpcyByb2xlDQo+Pj4gKyAqIEBzdXNwZW5kOiBzdXNwZW5kIGNhbGxi YWNrIGZvciB0aGlzIHJvbGUNCj4+PiArICogQHJlc3VtZTogcmVzdW1lIGNhbGxiYWNrIGZvciB0 aGlzIHJvbGUNCj4+PiArICogQGlycTogaXJxIGhhbmRsZXIgZm9yIHRoaXMgcm9sZQ0KPj5ubyBp cnEgbWVtYmVyLA0KPj4+ICsgKiBAbmFtZTogcm9sZSBuYW1lIHN0cmluZyAoaG9zdC9nYWRnZXQp DQo+Pj4gKyAqIEBzdGF0ZTogY3VycmVudCBzdGF0ZQ0KPj4+ICsgKi8NCj4+PiArc3RydWN0IGNk bnMzX3JvbGVfZHJpdmVyIHsNCj4+PiArCWludCAoKnN0YXJ0KShzdHJ1Y3QgY2RuczMgKmNkbnMp Ow0KPj4+ICsJdm9pZCAoKnN0b3ApKHN0cnVjdCBjZG5zMyAqY2Rucyk7DQo+Pj4gKwlpbnQgKCpz dXNwZW5kKShzdHJ1Y3QgY2RuczMgKmNkbnMsIGJvb2wgZG9fd2FrZXVwKTsNCj4+PiArCWludCAo KnJlc3VtZSkoc3RydWN0IGNkbnMzICpjZG5zLCBib29sIGhpYmVybmF0ZWQpOw0KPj4+ICsJY29u c3QgY2hhciAqbmFtZTsNCj4+PiArI2RlZmluZSBDRE5TM19ST0xFX1NUQVRFX0lOQUNUSVZFCTAN Cj4+PiArI2RlZmluZSBDRE5TM19ST0xFX1NUQVRFX0FDVElWRQkJMQ0KPj4+ICsJaW50IHN0YXRl Ow0KPj4+ICt9Ow0KPj4+ICsNCj4+PiArI2RlZmluZSBDRE5TM19YSENJX1JFU09VUkNFU19OVU0J Mg0KPj4+ICsvKioNCj4+PiArICogc3RydWN0IGNkbnMzIC0gUmVwcmVzZW50YXRpb24gb2YgQ2Fk ZW5jZSBVU0IzIERSRCBjb250cm9sbGVyLg0KPj4+ICsgKiBAZGV2OiBwb2ludGVyIHRvIENhZGVu Y2UgZGV2aWNlIHN0cnVjdA0KPj4+ICsgKiBAeGhjaV9yZWdzOiBwb2ludGVyIHRvIGJhc2Ugb2Yg eGhjaSByZWdpc3RlcnMNCj4+PiArICogQHhoY2lfcmVzOiB0aGUgcmVzb3VyY2UgZm9yIHhoY2kN Cj4+PiArICogQGRldl9yZWdzOiBwb2ludGVyIHRvIGJhc2Ugb2YgZGV2IHJlZ2lzdGVycw0KPj4+ ICsgKiBAb3RnX3JlZ3M6IHBvaW50ZXIgdG8gYmFzZSBvZiBvdGcgcmVnaXN0ZXJzDQo+Pm5vdCBw b2ludGVyDQo+DQo+V2h5ID8NCj5zdHJ1Y3QgY2RuczNfb3RnX2NvbW1vbl9yZWdzCSpvdGdfcmVn czsNCj4NCj5CdXQgSSBmb3Jnb3Q6DQo+ICogQG90Z19yZXM6IHRoZSByZXNvdXJjZSBmb3Igb3Rn DQo+ICogQG90Z192MF9yZWdzOiBwb2ludGVyIHRvIGJhc2Ugb2YgdjAgb3RnIHJlZ2lzdGVycw0K PiAqIEBvdGdfdjFfcmVnczogcG9pbnRlciB0byBiYXNlIG9mIHYxIG90ZyByZWdpc3RlcnMNCj4N Cj4+PiArICogQGlycTogaXJxIG51bWJlciBmb3IgY29udHJvbGxlcg0KPj4+ICsgKiBAcm9sZXM6 IGFycmF5IG9mIHN1cHBvcnRlZCByb2xlcyBmb3IgdGhpcyBjb250cm9sbGVyDQo+Pj4gKyAqIEBy b2xlOiBjdXJyZW50IHJvbGUNCj4+PiArICogQGhvc3RfZGV2OiB0aGUgY2hpbGQgaG9zdCBkZXZp Y2UgcG9pbnRlciBmb3IgY2RuczMgY29yZQ0KPj4+ICsgKiBAZ2FkZ2V0X2RldjogdGhlIGNoaWxk IGdhZGdldCBkZXZpY2UgcG9pbnRlciBmb3IgY2RuczMgY29yZQ0KPj4+ICsgKiBAdXNiOiBwaHkg Zm9yIHRoaXMgY29udHJvbGxlcg0KPj4+ICsgKiBAcm9sZV9zd2l0Y2hfd3E6IHdvcmsgcXVldWUg aXRlbSBmb3Igcm9sZSBzd2l0Y2gNCj4+PiArICogQGluX2xwbTogdGhlIGNvbnRyb2xsZXIgaW4g bG93IHBvd2VyIG1vZGUNCj4+PiArICogQHdha2V1cF9pbnQ6IHRoZSB3YWtldXAgaW50ZXJydXB0 DQo+Pj4gKyAqIEBtdXRleDogdGhlIG11dGV4IGZvciBjb25jdXJyZW50IGNvZGUgYXQgZHJpdmVy DQo+Pj4gKyAqIEBkcl9tb2RlOiBzdXBwb3J0ZWQgbW9kZSBvZiBvcGVyYXRpb24gaXQgY2FuIGJl IG9ubHkgSG9zdCwgb25seSBEZXZpY2UNCj4+PiArICogICAgICAgICAgIG9yIE9URyBtb2RlIHRo YXQgYWxsb3cgdG8gc3dpdGNoIGJldHdlZW4gRGV2aWNlIGFuZCBIb3N0IG1vZGUuDQo+Pj4gKyAq ICAgICAgICAgICBUaGlzIGZpZWxkIGJhc2VkIG9uIGZpcm13YXJlIHNldHRpbmcsIGtlcm5lbCBj b25maWd1cmF0aW9uDQo+Pj4gKyAqICAgICAgICAgICBhbmQgaGFyZHdhcmUgY29uZmlndXJhdGlv bi4NCj4+PiArICogQGN1cnJlbnRfZHJfbW9kZTogY3VycmVudCBtb2RlIG9mIG9wZXJhdGlvbiB3 aGVuIGluIGR1YWwtcm9sZSBtb2RlDQo+Pj4gKyAqIEBkZXNpcmVkX2RyX21vZGU6IGRlc2lyZWQg bW9kZSBvZiBvcGVyYXRpb24gd2hlbiBpbiBkdWFsLXJvbGUgbW9kZS4NCj4+PiArICogICAgICAg ICAgIFRoaXMgdmFsdWUgY2FuIGJlIGNoYW5nZWQgZHVyaW5nIHJ1bnRpbWUuDQo+Pj4gKyAqICAg ICAgICAgICBBdmFpbGFibGUgb3B0aW9ucyBkZXBlbmRzIG9uICBkcl9tb2RlOg0KPj4+ICsgKiAg ICAgICAgICAgZHJfbW9kZSAgICAgICAgICAgICAgICAgfCAgZGVzaXJlZF9kcl9tb2RlIGFuZCBj dXJyZW50X2RyX21vZGUNCj4+PiArICogICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4+PiArICogICAgICAg ICAgIFVTQl9EUl9NT0RFX0hPU1QgICAgICAgIHwgb25seSBVU0JfRFJfTU9ERV9IT1NUDQo+Pj4g KyAqICAgICAgICAgICBVU0JfRFJfTU9ERV9QRVJJUEhFUkFMICB8IG9ubHkgVVNCX0RSX01PREVf UEVSSVBIRVJBTA0KPj4+ICsgKiAgICAgICAgICAgVVNCX0RSX01PREVfT1RHICAgICAgICAgfCBv bmx5IFVTQl9EUl9NT0RFX0hPU1QNCj4+PiArICogICAgICAgICAgIFVTQl9EUl9NT0RFX09URyAg ICAgICAgIHwgb25seSBVU0JfRFJfTU9ERV9QRVJJUEhFUkFMDQo+Pj4gKyAqICAgICAgICAgICBV U0JfRFJfTU9ERV9PVEcgICAgICAgICB8IFVTQl9EUl9NT0RFX09URw0KPj4+ICsgKg0KPj4+ICsg KiAgICAgICAgICAgRGVzaXJlZF9kcl9yb2xlIGNhbiBiZSBjaGFuZ2VkIGJ5IG1lYW5zIG9mIGRl YnVnZnMuDQo+Pj4gKyAqIEByb290OiBkZWJ1Z2ZzIHJvb3QgZm9sZGVyIHBvaW50ZXINCj4+PiAr ICogQGRlYnVnX2Rpc2FibGU6DQo+Pj4gKyAqLw0KPj4+ICtzdHJ1Y3QgY2RuczMgew0KPj4+ICsJ c3RydWN0IGRldmljZQkJCSpkZXY7DQo+Pj4gKwl2b2lkIF9faW9tZW0JCQkqeGhjaV9yZWdzOw0K Pj4+ICsJc3RydWN0IHJlc291cmNlCQkJeGhjaV9yZXNbQ0ROUzNfWEhDSV9SRVNPVVJDRVNfTlVN XTsNCj4+PiArCXN0cnVjdCBjZG5zM191c2JfcmVncyBfX2lvbWVtCSpkZXZfcmVnczsNCj4+PiAr DQo+Pj4gKwlzdHJ1Y3QgcmVzb3VyY2UJCQlvdGdfcmVzOw0KPj4+ICsJc3RydWN0IGNkbnMzX290 Z19sZWdhY3lfcmVncwkqb3RnX3YwX3JlZ3M7DQo+Pj4gKwlzdHJ1Y3QgY2RuczNfb3RnX3JlZ3MJ CSpvdGdfdjFfcmVnczsNCj4+PiArCXN0cnVjdCBjZG5zM19vdGdfY29tbW9uX3JlZ3MJKm90Z19y ZWdzOw0KPj4+ICsjZGVmaW5lIENETlMzX0NPTlRST0xMRVJfVjAJMA0KPj4+ICsjZGVmaW5lIENE TlMzX0NPTlRST0xMRVJfVjEJMQ0KPj4+ICsJdTMyCQkJCXZlcnNpb247DQo+Pj4gKw0KPj4+ICsJ aW50CQkJCWlycTsNCj4+PiArCXN0cnVjdCBjZG5zM19yb2xlX2RyaXZlcgkqcm9sZXNbQ0ROUzNf Uk9MRV9FTkRdOw0KPj4+ICsJZW51bSBjZG5zM19yb2xlcwkJcm9sZTsNCj4+PiArCXN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UJCSpob3N0X2RldjsNCj4+PiArCXN0cnVjdCBjZG5zM19kZXZpY2UJCSpn YWRnZXRfZGV2Ow0KPj4+ICsJc3RydWN0IHBoeQkJCSpwaHk7DQo+PkRvZXMgdGhlIHNpbmdsZSBw aHkgc3VwcG9ydCBib3RoIEhTIGFuZCBTUz8NCj4+PiArCXN0cnVjdCB3b3JrX3N0cnVjdAkJcm9s ZV9zd2l0Y2hfd3E7DQo+Pj4gKwlpbnQJCQkJaW5fbHBtOjE7DQo+Pj4gKwlpbnQJCQkJd2FrZXVw X2ludDoxOw0KPj4+ICsJLyogbXV0ZXh0IHVzZWQgaW4gd29ya3F1ZXVlKi8NCj4+PiArCXN0cnVj dCBtdXRleAkJCW11dGV4Ow0KPj4+ICsJZW51bSB1c2JfZHJfbW9kZQkJZHJfbW9kZTsNCj4+PiAr CWVudW0gdXNiX2RyX21vZGUJCWN1cnJlbnRfZHJfbW9kZTsNCj4+PiArCWVudW0gdXNiX2RyX21v ZGUJCWRlc2lyZWRfZHJfbW9kZTsNCj4+PiArCXN0cnVjdCBkZW50cnkJCQkqcm9vdDsNCj4+PiAr CWludAkJCQlkZWJ1Z19kaXNhYmxlOjE7DQo+Pj4gK307DQo+Pj4gKw0KPj4+ICt2b2lkIGNkbnMz X3JvbGVfc3RvcChzdHJ1Y3QgY2RuczMgKmNkbnMpOw0KPj4+ICsNCj4+PiArI2VuZGlmIC8qIF9f TElOVVhfQ0ROUzNfQ09SRV9IICovDQo+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NkbnMz L2RlYnVnLmggYi9kcml2ZXJzL3VzYi9jZG5zMy9kZWJ1Zy5oDQo+Pj4gbmV3IGZpbGUgbW9kZSAx MDA2NDQNCj4+PiBpbmRleCAwMDAwMDAwMDAwMDAuLjE5MjllZGIzYTUyMQ0KPj4+IC0tLSAvZGV2 L251bGwNCj4+PiArKysgYi9kcml2ZXJzL3VzYi9jZG5zMy9kZWJ1Zy5oDQo+Pj4gQEAgLTAsMCAr MSwxNjggQEANCj4+PiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8NCj4+ PiArLyoNCj4+PiArICogQ2FkZW5jZSBVU0JTUyBEUkQgRHJpdmVyLg0KPj4+ICsgKiBEZWJ1ZyBo ZWFkZXIgZmlsZS4NCj4+PiArICoNCj4+PiArICogQ29weXJpZ2h0IChDKSAyMDE4IENhZGVuY2Uu DQo+Pj4gKyAqDQo+Pj4gKyAqIEF1dGhvcjogUGF3ZWwgTGFzemN6YWsgPHBhd2VsbEBjYWRlbmNl LmNvbT4NCj4+PiArICovDQo+Pj4gKyNpZm5kZWYgX19MSU5VWF9DRE5TM19ERUJVRw0KPj4+ICsj ZGVmaW5lIF9fTElOVVhfQ0ROUzNfREVCVUcNCj4+PiArDQo+Pj4gKyNpbmNsdWRlICJjb3JlLmgi DQo+Pj4gKw0KPj4+ICtzdGF0aWMgaW5saW5lIGNoYXIgKmNkbnMzX2RlY29kZV91c2JfaXJxKGNo YXIgKnN0ciwNCj4+PiArCQkJCQkgZW51bSB1c2JfZGV2aWNlX3NwZWVkIHNwZWVkLA0KPj4+ICsJ CQkJCSB1MzIgdXNiX2lzdHMpDQo+Pj4gK3sNCj4+PiArCWludCByZXQ7DQo+Pj4gKw0KPj4+ICsJ cmV0ID0gc3ByaW50ZihzdHIsICJJUlEgJTA4eCA9ICIsIHVzYl9pc3RzKTsNCj4+PiArDQo+Pj4g KwlpZiAodXNiX2lzdHMgJiAoVVNCX0lTVFNfQ09OMkkgfCBVU0JfSVNUU19DT05JKSkgew0KPj4+ ICsJCXJldCArPSBzcHJpbnRmKHN0ciArIHJldCwgIkNvbm5lY3Rpb24gJXNcbiIsDQo+Pj4gKwkJ CSAgICAgICB1c2Jfc3BlZWRfc3RyaW5nKHNwZWVkKSk7DQo+Pj4gKwl9DQo+Pj4gKwlpZiAodXNi X2lzdHMgJiBVU0JfSVNUU19DT04ySSB8fCB1c2JfaXN0cyAmIFVTQl9JU1RTX0NPTkkpDQo+Pj4g KwkJcmV0ICs9IHNwcmludGYoc3RyICsgcmV0LCAiRGlzY29ubmVjdGlvbiAiKTsNCj4+PiArCWlm ICh1c2JfaXN0cyAmIFVTQl9JU1RTX0wyRU5USSkNCj4+PiArCQlyZXQgKz0gc3ByaW50ZihzdHIg KyByZXQsICJzdXNwZW5kZWQgIik7DQo+Pj4gKw0KPj4+ICsJaWYgKHVzYl9pc3RzICYgVVNCX0lT VFNfTDJFWFRJKQ0KPj4+ICsJCXJldCArPSBzcHJpbnRmKHN0ciArIHJldCwgIkwyIGV4aXQgIik7 DQo+Pj4gKwlpZiAodXNiX2lzdHMgJiBVU0JfSVNUU19VM0VYVEkpDQo+Pj4gKwkJcmV0ICs9IHNw cmludGYoc3RyICsgcmV0LCAiVTMgZXhpdCAiKTsNCj4+PiArCWlmICh1c2JfaXN0cyAmIFVTQl9J U1RTX1VXUkVTSSkNCj4+PiArCQlyZXQgKz0gc3ByaW50ZihzdHIgKyByZXQsICJXYXJtIFJlc2V0 ICIpOw0KPj4+ICsJaWYgKHVzYl9pc3RzICYgVVNCX0lTVFNfVUhSRVNJKQ0KPj4+ICsJCXJldCAr PSBzcHJpbnRmKHN0ciArIHJldCwgIkhvdCBSZXNldCAiKTsNCj4+PiArCWlmICh1c2JfaXN0cyAm IFVTQl9JU1RTX1UyUkVTSSkNCj4+PiArCQlyZXQgKz0gc3ByaW50ZihzdHIgKyByZXQsICJSZXNl dCIpOw0KPj4+ICsNCj4+PiArCXJldHVybiBzdHI7DQo+Pj4gK30NCj4+PiArDQo+Pj4gK3N0YXRp YyBpbmxpbmUgIGNoYXIgKmNkbnMzX2RlY29kZV9lcF9pcnEoY2hhciAqc3RyLA0KPj4+ICsJCQkJ CSB1MzIgZXBfc3RzLA0KPj4+ICsJCQkJCSBjb25zdCBjaGFyICplcF9uYW1lKQ0KPj4+ICt7DQo+ Pj4gKwlpbnQgcmV0Ow0KPj4+ICsNCj4+PiArCXJldCA9IHNwcmludGYoc3RyLCAiSVJRIGZvciAl czogJTA4eCAiLCBlcF9uYW1lLCBlcF9zdHMpOw0KPj4+ICsNCj4+PiArCWlmIChlcF9zdHMgJiBF UF9TVFNfU0VUVVApDQo+Pj4gKwkJcmV0ICs9IHNwcmludGYoc3RyICsgcmV0LCAiU0VUVVAgIik7 DQo+Pj4gKwlpZiAoZXBfc3RzICYgRVBfU1RTX0lPQykNCj4+PiArCQlyZXQgKz0gc3ByaW50Zihz dHIgKyByZXQsICJJT0MgIik7DQo+Pj4gKwlpZiAoZXBfc3RzICYgRVBfU1RTX0lTUCkNCj4+PiAr CQlyZXQgKz0gc3ByaW50ZihzdHIgKyByZXQsICJJU1AgIik7DQo+Pj4gKwlpZiAoZXBfc3RzICYg RVBfU1RTX0RFU0NNSVMpDQo+Pj4gKwkJcmV0ICs9IHNwcmludGYoc3RyICsgcmV0LCAiREVTQ01J UyAiKTsNCj4+PiArCWlmIChlcF9zdHMgJiBFUF9TVFNfU1RSRUFNUikNCj4+PiArCQlyZXQgKz0g c3ByaW50ZihzdHIgKyByZXQsICJTVFJFQU1SICIpOw0KPj4+ICsJaWYgKGVwX3N0cyAmIEVQX1NU U19NRF9FWElUKQ0KPj4+ICsJCXJldCArPSBzcHJpbnRmKHN0ciArIHJldCwgIk1EX0VYSVQgIik7 DQo+Pj4gKwlpZiAoZXBfc3RzICYgRVBfU1RTX1RSQkVSUikNCj4+PiArCQlyZXQgKz0gc3ByaW50 ZihzdHIgKyByZXQsICJUUkJFUlIgIik7DQo+Pj4gKwlpZiAoZXBfc3RzICYgRVBfU1RTX05SRFkp DQo+Pj4gKwkJcmV0ICs9IHNwcmludGYoc3RyICsgcmV0LCAiTlJEWSAiKTsNCj4+PiArCWlmIChl cF9zdHMgJiBFUF9TVFNfUFJJTUUpDQo+Pj4gKwkJcmV0ICs9IHNwcmludGYoc3RyICsgcmV0LCAi UFJJTUUgIik7DQo+Pj4gKwlpZiAoZXBfc3RzICYgRVBfU1RTX1NJREVSUikNCj4+PiArCQlyZXQg Kz0gc3ByaW50ZihzdHIgKyByZXQsICJTSURFUlJUICIpOw0KPj4+ICsJaWYgKGVwX3N0cyAmIEVQ X1NUU19PVVRTTU0pDQo+Pj4gKwkJcmV0ICs9IHNwcmludGYoc3RyICsgcmV0LCAiT1VUU01NICIp Ow0KPj4+ICsJaWYgKGVwX3N0cyAmIEVQX1NUU19JU09FUlIpDQo+Pj4gKwkJcmV0ICs9IHNwcmlu dGYoc3RyICsgcmV0LCAiSVNPRVJSICIpOw0KPj4+ICsJaWYgKGVwX3N0cyAmIEVQX1NUU19JT1Qp DQo+Pj4gKwkJcmV0ICs9IHNwcmludGYoc3RyICsgcmV0LCAiSU9UICIpOw0KPj4+ICsNCj4+PiAr CXJldHVybiBzdHI7DQo+Pj4gK30NCj4+PiArDQo+Pj4gK3N0YXRpYyBpbmxpbmUgY2hhciAqY2Ru czNfZGVjb2RlX2VweF9pcnEoY2hhciAqc3RyLA0KPj4+ICsJCQkJCSBjaGFyICplcF9uYW1lLA0K Pj4+ICsJCQkJCSB1MzIgZXBfc3RzKQ0KPj4+ICt7DQo+Pj4gKwlyZXR1cm4gY2RuczNfZGVjb2Rl X2VwX2lycShzdHIsIGVwX3N0cywgZXBfbmFtZSk7DQo+Pj4gK30NCj4+PiArDQo+Pj4gK3N0YXRp YyBpbmxpbmUgY2hhciAqY2RuczNfZGVjb2RlX2VwMF9pcnEoY2hhciAqc3RyLA0KPj4+ICsJCQkJ CSBpbnQgZGlyLA0KPj4+ICsJCQkJCSB1MzIgZXBfc3RzKQ0KPj4+ICt7DQo+Pj4gKwlyZXR1cm4g Y2RuczNfZGVjb2RlX2VwX2lycShzdHIsIGVwX3N0cywNCj4+PiArCQkJCSAgIGRpciA/ICJlcDBJ TiIgOiAiZXAwT1VUIik7DQo+Pj4gK30NCj4+PiArDQo+Pj4gKy8qKg0KPj4+ICsgKiBEZWJ1ZyBh IHRyYW5zZmVyIHJpbmcuDQo+Pj4gKyAqDQo+Pj4gKyAqIFByaW50cyBvdXQgYWxsIFRSQnMgaW4g dGhlIGVuZHBvaW50IHJpbmcsIGV2ZW4gdGhvc2UgYWZ0ZXIgdGhlIExpbmsgVFJCLg0KPj4+ICsg Ki4NCj4+PiArICovDQo+Pj4gK3N0YXRpYyBpbmxpbmUgY2hhciAqY2RuczNfZGJnX3Jpbmcoc3Ry dWN0IGNkbnMzX2VuZHBvaW50ICpwcml2X2VwLA0KPj4+ICsJCQkJICAgc3RydWN0IGNkbnMzX3Ry YiAqcmluZywgY2hhciAqc3RyKQ0KPj4+ICt7DQo+Pj4gKwlkbWFfYWRkcl90IGFkZHIgPSBwcml2 X2VwLT50cmJfcG9vbF9kbWE7DQo+Pj4gKwlzdHJ1Y3QgY2RuczNfdHJiICp0cmI7DQo+Pj4gKwlp bnQgdHJiX3Blcl9zZWN0b3I7DQo+Pj4gKwlpbnQgcmV0ID0gMDsNCj4+PiArCWludCBpOw0KPj4+ ICsNCj4+PiArCXRyYl9wZXJfc2VjdG9yID0gR0VUX1RSQlNfUEVSX1NFR01FTlQocHJpdl9lcC0+ dHlwZSk7DQo+Pj4gKw0KPj4+ICsJdHJiID0gJnByaXZfZXAtPnRyYl9wb29sW3ByaXZfZXAtPmRl cXVldWVdOw0KPj4+ICsJcmV0ICs9IHNwcmludGYoc3RyICsgcmV0LCAiXG5cdFx0UmluZyBjb250 ZW50cyBmb3IgJXM6IiwgcHJpdl9lcC0+bmFtZSk7DQo+Pj4gKw0KPj4+ICsJcmV0ICs9IHNwcmlu dGYoc3RyICsgcmV0LA0KPj4+ICsJCSAgICAgICAiXG5cdFx0UmluZyBkZXEgaW5kZXg6ICVkLCB0 cmI6ICVwICh2aXJ0KSwgMHglbGx4IChkbWEpXG4iLA0KPj4+ICsJCSAgICAgICBwcml2X2VwLT5k ZXF1ZXVlLCB0cmIsDQo+Pj4gKwkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpY2RuczNfdHJi X3ZpcnRfdG9fZG1hKHByaXZfZXAsIHRyYikpOw0KPj4+ICsNCj4+PiArCXRyYiA9ICZwcml2X2Vw LT50cmJfcG9vbFtwcml2X2VwLT5lbnF1ZXVlXTsNCj4+PiArCXJldCArPSBzcHJpbnRmKHN0ciAr IHJldCwNCj4+PiArCQkgICAgICAgIlx0XHRSaW5nIGVucSBpbmRleDogJWQsIHRyYjogJXAgKHZp cnQpLCAweCVsbHggKGRtYSlcbiIsDQo+Pj4gKwkJICAgICAgIHByaXZfZXAtPmVucXVldWUsIHRy YiwNCj4+PiArCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyljZG5zM190cmJfdmlydF90b19k bWEocHJpdl9lcCwgdHJiKSk7DQo+Pj4gKw0KPj4+ICsJcmV0ICs9IHNwcmludGYoc3RyICsgcmV0 LA0KPj4+ICsJCSAgICAgICAiXHRcdGZyZWUgdHJiczogJWQsIENDUz0lZCwgUENTPSVkXG4iLA0K Pj4+ICsJCSAgICAgICBwcml2X2VwLT5mcmVlX3RyYnMsIHByaXZfZXAtPmNjcywgcHJpdl9lcC0+ cGNzKTsNCj4+PiArDQo+Pj4gKwlpZiAodHJiX3Blcl9zZWN0b3IgPiBUUkJTX1BFUl9TRUdNRU5U KQ0KPj4+ICsJCXRyYl9wZXJfc2VjdG9yID0gVFJCU19QRVJfU0VHTUVOVDsNCj4+PiArDQo+Pj4g KwlpZiAodHJiX3Blcl9zZWN0b3IgPiBUUkJTX1BFUl9TRUdNRU5UKSB7DQo+Pj4gKwkJc3ByaW50 ZihzdHIgKyByZXQsICJcdFx0VG8gYmlnIHRyYW5zZmVyIHJpbmcgJWRcbiIsDQo+Pj4gKwkJCXRy Yl9wZXJfc2VjdG9yKTsNCj4+PiArCQlyZXR1cm4gc3RyOw0KPj4+ICsJfQ0KPj4+ICsNCj4+PiAr CWZvciAoaSA9IDA7IGkgPCB0cmJfcGVyX3NlY3RvcjsgKytpKSB7DQo+Pj4gKwkJdHJiID0gJnJp bmdbaV07DQo+Pj4gKwkJcmV0ICs9IHNwcmludGYoc3RyICsgcmV0LA0KPj4+ICsJCQkiXHRcdEAl cGFkICUwOHggJTA4eCAlMDh4XG4iLCAmYWRkciwNCj4+PiArCQkJbGUzMl90b19jcHUodHJiLT5i dWZmZXIpLA0KPj4+ICsJCQlsZTMyX3RvX2NwdSh0cmItPmxlbmd0aCksDQo+Pj4gKwkJCWxlMzJf dG9fY3B1KHRyYi0+Y29udHJvbCkpOw0KPj4+ICsJCWFkZHIgKz0gc2l6ZW9mKCp0cmIpOw0KPj4+ ICsJfQ0KPj4+ICsNCj4+PiArCXJldHVybiBzdHI7DQo+Pj4gK30NCj4+PiArDQo+Pj4gK3ZvaWQg Y2RuczNfZGJnKHN0cnVjdCBjZG5zM19kZXZpY2UgKnByaXZfZGV2LCBjb25zdCBjaGFyICpmbXQs IC4uLik7DQo+Pj4gKw0KPj4+ICsjaWZkZWYgQ09ORklHX0RFQlVHX0ZTDQo+Pj4gK3ZvaWQgY2Ru czNfZGVidWdmc19pbml0KHN0cnVjdCBjZG5zMyAqY2Rucyk7DQo+Pj4gK3ZvaWQgY2RuczNfZGVi dWdmc19leGl0KHN0cnVjdCBjZG5zMyAqY2Rucyk7DQo+Pj4gKyNlbHNlDQo+Pj4gK3ZvaWQgY2Ru czNfZGVidWdmc19pbml0KHN0cnVjdCBjZG5zMyAqY2Rucyk7DQo+Pj4gK3sgIH0NCj4+PiArdm9p ZCBjZG5zM19kZWJ1Z2ZzX2V4aXQoc3RydWN0IGNkbnMzICpjZG5zKTsNCj4+PiAreyAgfQ0KPj4+ ICsjZW5kaWYNCj4+PiArDQo+Pj4gKyNlbmRpZiAvKl9fTElOVVhfQ0ROUzNfREVCVUcqLw0KPj4+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jZG5zMy9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL3VzYi9j ZG5zMy9kZWJ1Z2ZzLmMNCj4+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPj4+IGluZGV4IDAwMDAw MDAwMDAwMC4uZDhmY2Q5MGQwNWIzDQo+Pj4gLS0tIC9kZXYvbnVsbA0KPj4+ICsrKyBiL2RyaXZl cnMvdXNiL2NkbnMzL2RlYnVnZnMuYw0KPj4+IEBAIC0wLDAgKzEsMTY0IEBADQo+Pj4gKy8vIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQo+Pj4gKy8qDQo+Pj4gKyAqIENhZGVuY2Ug VVNCU1MgRFJEIENvbnRyb2xsZXIgRGVidWdGUyBmaWxlci4NCj4+PiArICoNCj4+PiArICogQ29w eXJpZ2h0IChDKSAyMDE4IENhZGVuY2UuDQo+Pj4gKyAqDQo+Pj4gKyAqIEF1dGhvcjogUGF3ZWwg TGFzemN6YWsgPHBhd2VsbEBjYWRlbmNlLmNvbT4NCj4+PiArICovDQo+Pj4gKw0KPj4+ICsjaW5j bHVkZSA8bGludXgvdHlwZXMuaD4NCj4+PiArI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4NCj4+ PiArI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+DQo+Pj4gKyNpbmNsdWRlIDxsaW51eC91YWNj ZXNzLmg+DQo+Pj4gKw0KPj4+ICsjaW5jbHVkZSAiY29yZS5oIg0KPj4+ICsjaW5jbHVkZSAiZ2Fk Z2V0LmgiDQo+Pj4gKyNpbmNsdWRlICJkcmQuaCINCj4+PiArDQo+Pj4gK3N0YXRpYyBpbnQgY2Ru czNfbW9kZV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdW51c2VkKQ0KPj4+ICt7DQo+ Pj4gKwlzdHJ1Y3QgY2RuczMgKmNkbnMgPSBzLT5wcml2YXRlOw0KPj4+ICsNCj4+PiArCXN3aXRj aCAoY2Rucy0+Y3VycmVudF9kcl9tb2RlKSB7DQo+Pj4gKwljYXNlIFVTQl9EUl9NT0RFX0hPU1Q6 DQo+Pj4gKwkJc2VxX3B1dHMocywgImhvc3RcbiIpOw0KPj4+ICsJCWJyZWFrOw0KPj4+ICsJY2Fz ZSBVU0JfRFJfTU9ERV9QRVJJUEhFUkFMOg0KPj4+ICsJCXNlcV9wdXRzKHMsICJkZXZpY2VcbiIp Ow0KPj4+ICsJCWJyZWFrOw0KPj4+ICsJY2FzZSBVU0JfRFJfTU9ERV9PVEc6DQo+Pj4gKwkJc2Vx X3B1dHMocywgIm90Z1xuIik7DQo+Pj4gKwkJYnJlYWs7DQo+Pj4gKwlkZWZhdWx0Og0KPj4+ICsJ CXNlcV9wdXRzKHMsICJVTktOT1dOIG1vZGVcbiIpOw0KPj4+ICsJfQ0KPj4+ICsNCj4+PiArCXJl dHVybiAwOw0KPj4+ICt9DQo+Pj4gKw0KPj4+ICtzdGF0aWMgaW50IGNkbnMzX21vZGVfb3Blbihz dHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkNCj4+PiArew0KPj4+ICsJcmV0 dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGNkbnMzX21vZGVfc2hvdywgaW5vZGUtPmlfcHJpdmF0ZSk7 DQo+Pj4gK30NCj4+PiArDQo+Pj4gK3N0YXRpYyBzc2l6ZV90IGNkbnMzX21vZGVfd3JpdGUoc3Ry dWN0IGZpbGUgKmZpbGUsDQo+Pj4gKwkJCQljb25zdCBjaGFyIF9fdXNlciAqdWJ1ZiwNCj4+PiAr CQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQ0KPj4+ICt7DQo+Pj4gKwlzdHJ1Y3Qgc2Vx X2ZpbGUJICpzID0gZmlsZS0+cHJpdmF0ZV9kYXRhOw0KPj4+ICsJc3RydWN0IGNkbnMzICpjZG5z ID0gcy0+cHJpdmF0ZTsNCj4+PiArCXUzMiBtb2RlID0gVVNCX0RSX01PREVfVU5LTk9XTjsNCj4+ PiArCWNoYXIgYnVmWzMyXTsNCj4+PiArDQo+Pj4gKwlpZiAoY29weV9mcm9tX3VzZXIoJmJ1Ziwg dWJ1ZiwgbWluX3Qoc2l6ZV90LCBzaXplb2YoYnVmKSAtIDEsIGNvdW50KSkpDQo+Pj4gKwkJcmV0 dXJuIC1FRkFVTFQ7DQo+Pj4gKw0KPj4+ICsJaWYgKCFzdHJuY21wKGJ1ZiwgImhvc3QiLCA0KSkg ew0KPj4+ICsJCWlmIChjZG5zLT5kcl9tb2RlID09IFVTQl9EUl9NT0RFX0hPU1QgfHwNCj4+PiAr CQkgICAgY2Rucy0+ZHJfbW9kZSA9PSBVU0JfRFJfTU9ERV9PVEcpIHsNCj4+PiArCQkJbW9kZSA9 IFVTQl9EUl9NT0RFX0hPU1Q7DQo+Pj4gKwkJfQ0KPj4+ICsJfQ0KPj4+ICsNCj4+PiArCWlmICgh c3RybmNtcChidWYsICJkZXZpY2UiLCA2KSkNCj4+PiArCQlpZiAoY2Rucy0+ZHJfbW9kZSA9PSBV U0JfRFJfTU9ERV9QRVJJUEhFUkFMIHx8DQo+Pj4gKwkJICAgIGNkbnMtPmRyX21vZGUgPT0gVVNC X0RSX01PREVfT1RHKQ0KPj4+ICsJCQltb2RlID0gVVNCX0RSX01PREVfUEVSSVBIRVJBTDsNCj4+ PiArDQo+Pj4gKwlpZiAoIXN0cm5jbXAoYnVmLCAib3RnIiwgMykgJiYgY2Rucy0+ZHJfbW9kZSA9 PSBVU0JfRFJfTU9ERV9PVEcpDQo+Pj4gKwkJbW9kZSA9IFVTQl9EUl9NT0RFX09URzsNCj4+PiAr DQo+Pj4gKwlpZiAobW9kZSA9PSBVU0JfRFJfTU9ERV9VTktOT1dOKSB7DQo+Pj4gKwkJZGV2X2Vy cihjZG5zLT5kZXYsICJGYWlsZWQ6IGluY29ycmVjdCBtb2RlIHNldHRpbmdcbiIpOw0KPj4+ICsJ CXJldHVybiAtRUZBVUxUOw0KPj4+ICsJfQ0KPj4+ICsNCj4+PiArCWlmIChjZG5zLT5jdXJyZW50 X2RyX21vZGUgIT0gbW9kZSkgew0KPj4+ICsJCWNkbnMtPmRlc2lyZWRfZHJfbW9kZSA9IG1vZGU7 DQo+Pj4gKwkJY2Rucy0+ZGVidWdfZGlzYWJsZSA9IDA7DQo+Pj4gKwkJY2RuczNfcm9sZV9zdG9w KGNkbnMpOw0KPj4+ICsJCWNkbnMzX2RyZF91cGRhdGVfbW9kZShjZG5zKTsNCj4+PiArCQlxdWV1 ZV93b3JrKHN5c3RlbV9mcmVlemFibGVfd3EsICZjZG5zLT5yb2xlX3N3aXRjaF93cSk7DQo+Pj4g Kwl9DQo+Pj4gKw0KPj4+ICsJcmV0dXJuIGNvdW50Ow0KPj4+ICt9DQo+Pj4gKw0KPj4+ICtzdGF0 aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjZG5zM19tb2RlX2ZvcHMgPSB7DQo+Pj4g Kwkub3BlbgkJCT0gY2RuczNfbW9kZV9vcGVuLA0KPj4+ICsJLndyaXRlCQkJPSBjZG5zM19tb2Rl X3dyaXRlLA0KPj4+ICsJLnJlYWQJCQk9IHNlcV9yZWFkLA0KPj4+ICsJLmxsc2VlawkJCT0gc2Vx X2xzZWVrLA0KPj4+ICsJLnJlbGVhc2UJCT0gc2luZ2xlX3JlbGVhc2UsDQo+Pj4gK307DQo+Pj4g Kw0KPj4+ICtzdGF0aWMgaW50IGNkbnMzX2Rpc2FibGVfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMs IHZvaWQgKnVudXNlZCkNCj4+PiArew0KPj4+ICsJc3RydWN0IGNkbnMzICpjZG5zID0gcy0+cHJp dmF0ZTsNCj4+PiArDQo+Pj4gKwlpZiAoIWNkbnMtPmRlYnVnX2Rpc2FibGUpDQo+Pj4gKwkJc2Vx X3B1dHMocywgIjBcbiIpOw0KPj4+ICsJZWxzZQ0KPj4+ICsJCXNlcV9wdXRzKHMsICIxXG4iKTsN Cj4+PiArDQo+Pj4gKwlyZXR1cm4gMDsNCj4+PiArfQ0KPj4+ICsNCj4+PiArc3RhdGljIHNzaXpl X3QgY2RuczNfZGlzYWJsZV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwNCj4+PiArCQkJCSAgIGNv bnN0IGNoYXIgX191c2VyICp1YnVmLA0KPj4+ICsJCQkJICAgc2l6ZV90IGNvdW50LCBsb2ZmX3Qg KnBwb3MpDQo+Pj4gK3sNCj4+PiArCXN0cnVjdCBzZXFfZmlsZQkgKnMgPSBmaWxlLT5wcml2YXRl X2RhdGE7DQo+Pj4gKwlzdHJ1Y3QgY2RuczMgKmNkbnMgPSBzLT5wcml2YXRlOw0KPj4+ICsJYm9v bCBkaXNhYmxlOw0KPj4+ICsJY2hhciBidWZbMTZdOw0KPj4+ICsNCj4+PiArCWlmIChjb3B5X2Zy b21fdXNlcigmYnVmLCB1YnVmLCBtaW5fdChzaXplX3QsIHNpemVvZihidWYpIC0gMSwgY291bnQp KSkNCj4+PiArCQlyZXR1cm4gLUVGQVVMVDsNCj4+PiArDQo+Pj4gKwlpZiAoa3N0cnRvYm9vbChi dWYsICZkaXNhYmxlKSkgew0KPj4+ICsJCWRldl9lcnIoY2Rucy0+ZGV2LCAid3Jvbmcgc2V0dGlu Z1xuIik7DQo+Pj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+Pj4gKwl9DQo+Pj4gKw0KPj4+ICsJaWYg KGRpc2FibGUgIT0gY2Rucy0+ZGVidWdfZGlzYWJsZSkgew0KPj4+ICsJCWNkbnMtPmRlYnVnX2Rp c2FibGUgPSBkaXNhYmxlOw0KPj4+ICsJCXF1ZXVlX3dvcmsoc3lzdGVtX2ZyZWV6YWJsZV93cSwg JmNkbnMtPnJvbGVfc3dpdGNoX3dxKTsNCj4+PiArCX0NCj4+PiArDQo+Pj4gKwlyZXR1cm4gY291 bnQ7DQo+Pj4gK30NCj4+PiArDQo+Pj4gK3N0YXRpYyBpbnQgY2RuczNfZGlzYWJsZV9vcGVuKHN0 cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQ0KPj4+ICt7DQo+Pj4gKwlyZXR1 cm4gc2luZ2xlX29wZW4oZmlsZSwgY2RuczNfZGlzYWJsZV9zaG93LCBpbm9kZS0+aV9wcml2YXRl KTsNCj4+PiArfQ0KPj4+ICsNCj4+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlv bnMgY2RuczNfZGlzYWJsZV9mb3BzID0gew0KPj4+ICsJLm9wZW4JCQk9IGNkbnMzX2Rpc2FibGVf b3BlbiwNCj4+PiArCS53cml0ZQkJCT0gY2RuczNfZGlzYWJsZV93cml0ZSwNCj4+PiArCS5yZWFk CQkJPSBzZXFfcmVhZCwNCj4+PiArCS5sbHNlZWsJCQk9IHNlcV9sc2VlaywNCj4+PiArCS5yZWxl YXNlCQk9IHNpbmdsZV9yZWxlYXNlLA0KPj4+ICt9Ow0KPj4+ICsNCj4+PiArdm9pZCBjZG5zM19k ZWJ1Z2ZzX2luaXQoc3RydWN0IGNkbnMzICpjZG5zKQ0KPj4+ICt7DQo+Pj4gKwlzdHJ1Y3QgZGVu dHJ5ICpyb290Ow0KPj4+ICsNCj4+PiArCXJvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoZGV2X25h bWUoY2Rucy0+ZGV2KSwgTlVMTCk7DQo+Pj4gKwljZG5zLT5yb290ID0gcm9vdDsNCj4+PiArCWlm IChJU19FTkFCTEVEKENPTkZJR19VU0JfQ0ROUzNfR0FER0VUKSAmJg0KPj4+ICsJICAgIElTX0VO QUJMRUQoQ09ORklHX1VTQl9DRE5TM19IT1NUKSkNCj4+PiArCQlkZWJ1Z2ZzX2NyZWF0ZV9maWxl KCJtb2RlIiwgMDY0NCwgcm9vdCwgY2RucywNCj4+PiArCQkJCSAgICAmY2RuczNfbW9kZV9mb3Bz KTsNCj4+PiArDQo+Pj4gKwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJkaXNhYmxlIiwgMDY0NCwgcm9v dCwgY2RucywNCj4+PiArCQkJICAgICZjZG5zM19kaXNhYmxlX2ZvcHMpOw0KPj4+ICt9DQo+Pj4g Kw0KPj4+ICt2b2lkIGNkbnMzX2RlYnVnZnNfZXhpdChzdHJ1Y3QgY2RuczMgKmNkbnMpDQo+Pj4g K3sNCj4+PiArCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShjZG5zLT5yb290KTsNCj4+PiArfQ0K Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jZG5zMy9kcmQuYyBiL2RyaXZlcnMvdXNiL2Nk bnMzL2RyZC5jDQo+Pj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4+PiBpbmRleCAwMDAwMDAwMDAw MDAuLjNlNTYzMzhjZDdiOQ0KPj4+IC0tLSAvZGV2L251bGwNCj4+PiArKysgYi9kcml2ZXJzL3Vz Yi9jZG5zMy9kcmQuYw0KPj4+IEBAIC0wLDAgKzEsMzY1IEBADQo+Pj4gKy8vIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBHUEwtMi4wDQo+Pj4gKy8qDQo+Pj4gKyAqIENhZGVuY2UgVVNCU1MgRFJE IERyaXZlci4NCj4+PiArICoNCj4+PiArICogQ29weXJpZ2h0IChDKSAyMDE4IENhZGVuY2UuDQo+ Pj4gKyAqDQo+Pj4gKyAqIEF1dGhvcjogUGF3ZWwgTGFzemN6YWsgPHBhd2VsbEBjYWRlbmNlLmNv bQ0KPj4+ICsgKg0KPj4+ICsgKi8NCj4+PiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPg0KPj4+ ICsjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+DQo+Pj4gKyNpbmNsdWRlIDxsaW51eC9kZWxh eS5oPg0KPj4+ICsjaW5jbHVkZSA8bGludXgvdXNiL290Zy5oPg0KPj4+ICsNCj4+PiArI2luY2x1 ZGUgImdhZGdldC5oIg0KPj4+ICsjaW5jbHVkZSAiZHJkLmgiDQo+Pj4gKyNpbmNsdWRlICJjb3Jl LmgiDQo+Pj4gKw0KPj4+ICtzdGF0aWMgaW50IGNkbnMzX2RyZF9zd2l0Y2hfZ2FkZ2V0KHN0cnVj dCBjZG5zMyAqY2RucywgaW50IG9uKTsNCj4+PiArc3RhdGljIGludCBjZG5zM19kcmRfc3dpdGNo X2hvc3Qoc3RydWN0IGNkbnMzICpjZG5zLCBpbnQgb24pOw0KPj4+ICsNCj4+PiArLyoqDQo+Pj4g KyAqIGNkbnMzX3NldF9tb2RlIC0gY2hhbmdlIG1vZGUgb2YgT1RHIENvcmUNCj4+PiArICogQGNk bnM6IHBvaW50ZXIgdG8gY29udGV4dCBzdHJ1Y3R1cmUNCj4+PiArICogQG1vZGU6IHNlbGVjdGVk IG1vZGUgZnJvbSBjZG5zX3JvbGUNCj4+PiArICoNCj4+PiArICogUmV0dXJucyAwIG9uIHN1Y2Nl c3Mgb3RoZXJ3aXNlIG5lZ2F0aXZlIGVycm5vDQo+Pj4gKyAqLw0KPj4+ICtpbnQgY2RuczNfc2V0 X21vZGUoc3RydWN0IGNkbnMzICpjZG5zLCBlbnVtIHVzYl9kcl9tb2RlIG1vZGUpDQo+Pj4gK3sN Cj4+PiArCWludCByZXQgPSAwOw0KPj4+ICsJdTMyIHJlZzsNCj4+PiArDQo+Pj4gKwljZG5zLT5j dXJyZW50X2RyX21vZGUgPSBtb2RlOw0KPj4+ICsNCj4+PiArCXN3aXRjaCAobW9kZSkgew0KPj4+ ICsJY2FzZSBVU0JfRFJfTU9ERV9QRVJJUEhFUkFMOg0KPj4+ICsJCWRldl9pbmZvKGNkbnMtPmRl diwgIlNldCBjb250cm9sbGVyIHRvIEdhZGdldCBtb2RlXG4iKTsNCj4+PiArCQlyZXQgPSBjZG5z M19kcmRfc3dpdGNoX2dhZGdldChjZG5zLCAxKTsNCj4+PiArCQlicmVhazsNCj4+PiArCWNhc2Ug VVNCX0RSX01PREVfSE9TVDoNCj4+PiArCQlkZXZfaW5mbyhjZG5zLT5kZXYsICJTZXQgY29udHJv bGxlciB0byBIb3N0IG1vZGVcbiIpOw0KPj4+ICsJCXJldCA9IGNkbnMzX2RyZF9zd2l0Y2hfaG9z dChjZG5zLCAxKTsNCj4+PiArCQlicmVhazsNCj4+PiArCWNhc2UgVVNCX0RSX01PREVfT1RHOg0K Pj4+ICsJCWRldl9pbmZvKGNkbnMtPmRldiwgIlNldCBjb250cm9sbGVyIHRvIE9URyBtb2RlXG4i KTsNCj4+PiArCQlpZiAoY2Rucy0+dmVyc2lvbiA9PSBDRE5TM19DT05UUk9MTEVSX1YxKSB7DQo+ Pj4gKwkJCXJlZyA9IHJlYWRsKCZjZG5zLT5vdGdfdjFfcmVncy0+b3ZlcnJpZGUpOw0KPj4+ICsJ CQlyZWcgfD0gT1ZFUlJJREVfSURQVUxMVVA7DQo+Pj4gKwkJCXdyaXRlbChyZWcsICZjZG5zLT5v dGdfdjFfcmVncy0+b3ZlcnJpZGUpOw0KPj4+ICsJCX0gZWxzZSB7DQo+Pj4gKwkJCXJlZyA9IHJl YWRsKCZjZG5zLT5vdGdfdjBfcmVncy0+Y3RybDEpOw0KPj4+ICsJCQlyZWcgfD0gT1ZFUlJJREVf SURQVUxMVVBfVjA7DQo+Pj4gKwkJCXdyaXRlbChyZWcsICZjZG5zLT5vdGdfdjBfcmVncy0+Y3Ry bDEpOw0KPj4+ICsJCX0NCj4+PiArDQo+Pj4gKwkJLyoNCj4+PiArCQkgKiBIYXJkd2FyZSBzcGVj aWZpY2F0aW9uIHNheXM6ICJJRF9WQUxVRSBtdXN0IGJlIHZhbGlkIHdpdGhpbg0KPj4+ICsJCSAq IDUwbXMgYWZ0ZXIgaWRwdWxsdXAgaXMgc2V0IHRvICcxIiBzbyBkcml2ZXIgbXVzdCB3YWl0DQo+ Pj4gKwkJICogNTBtcyBiZWZvcmUgcmVhZGluZyB0aGlzIHBpbi4NCj4+PiArCQkgKi8NCj4+PiAr CQl1c2xlZXBfcmFuZ2UoNTAwMDAsIDYwMDAwKTsNCj4+PiArCQlicmVhazsNCj4+PiArCWRlZmF1 bHQ6DQo+Pj4gKwkJY2Rucy0+Y3VycmVudF9kcl9tb2RlID0gVVNCX0RSX01PREVfVU5LTk9XTjsN Cj4+PiArCQlkZXZfZXJyKGNkbnMtPmRldiwgIlVuc3VwcG9ydGVkIG1vZGUgb2Ygb3BlcmF0aW9u ICVkXG4iLCBtb2RlKTsNCj4+PiArCQlyZXR1cm4gLUVJTlZBTDsNCj4+PiArCX0NCj4+PiArDQo+ Pj4gKwlyZXR1cm4gcmV0Ow0KPj4+ICt9DQo+Pj4gKw0KPj4+ICtpbnQgY2RuczNfZ2V0X2lkKHN0 cnVjdCBjZG5zMyAqY2RucykNCj4+PiArew0KPj4+ICsJaW50IGlkOw0KPj4+ICsNCj4+PiArCWlk ID0gcmVhZGwoJmNkbnMtPm90Z19yZWdzLT5zdHMpICYgT1RHU1RTX0lEX1ZBTFVFOw0KPj4+ICsJ ZGV2X2RiZyhjZG5zLT5kZXYsICJPVEcgSUQ6ICVkIiwgaWQpOw0KPj4+ICsJcmV0dXJuIGlkOw0K Pj4+ICt9DQo+Pj4gKw0KPj4+ICtpbnQgY2RuczNfaXNfaG9zdChzdHJ1Y3QgY2RuczMgKmNkbnMp DQo+Pm1heWJlIGl0J3MgYmV0dGVyIHRvIHVzZSBib29sIGluc3RlYWQgb2YgaW50DQo+Pj4gK3sN Cj4+PiArCWlmIChjZG5zLT5jdXJyZW50X2RyX21vZGUgPT0gVVNCX0RSX01PREVfSE9TVCkNCj4+ PiArCQlyZXR1cm4gMTsNCj4+PiArCWVsc2UgaWYgKCFjZG5zM19nZXRfaWQoY2RucykpDQo+Pj4g KwkJcmV0dXJuIDE7DQo+Pj4gKw0KPj4+ICsJcmV0dXJuIDA7DQo+Pj4gK30NCj4+PiArDQo+Pj4g K2ludCBjZG5zM19pc19kZXZpY2Uoc3RydWN0IGNkbnMzICpjZG5zKQ0KPj5kaXR0bw0KPj4+ICt7 DQo+Pj4gKwlpZiAoY2Rucy0+Y3VycmVudF9kcl9tb2RlID09IFVTQl9EUl9NT0RFX1BFUklQSEVS QUwpDQo+Pj4gKwkJcmV0dXJuIDE7DQo+Pj4gKwllbHNlIGlmIChjZG5zLT5jdXJyZW50X2RyX21v ZGUgPT0gVVNCX0RSX01PREVfT1RHKQ0KPj4+ICsJCWlmIChjZG5zM19nZXRfaWQoY2RucykpDQo+ Pj4gKwkJCXJldHVybiAxOw0KPj4+ICsNCj4+PiArCXJldHVybiAwOw0KPj4+ICt9DQo+Pj4gKw0K Pj4+ICsvKioNCj4+PiArICogY2RuczNfb3RnX2Rpc2FibGVfaXJxIC0gRGlzYWJsZSBhbGwgT1RH IGludGVycnVwdHMNCj4+PiArICogQGNkbnM6IFBvaW50ZXIgdG8gY29udHJvbGxlciBjb250ZXh0 IHN0cnVjdHVyZQ0KPj4+ICsgKi8NCj4+PiArc3RhdGljIHZvaWQgY2RuczNfb3RnX2Rpc2FibGVf aXJxKHN0cnVjdCBjZG5zMyAqY2RucykNCj4+PiArew0KPj4+ICsJd3JpdGVsKDAsICZjZG5zLT5v dGdfcmVncy0+aWVuKTsNCj4+PiArfQ0KPj4+ICsNCj4+PiArLyoqDQo+Pj4gKyAqIGNkbnMzX290 Z19lbmFibGVfaXJxIC0gZW5hYmxlIGlkIGFuZCBzZXNzX3ZhbGlkIGludGVycnVwdHMNCj4+PiAr ICogQGNkbnM6IFBvaW50ZXIgdG8gY29udHJvbGxlciBjb250ZXh0IHN0cnVjdHVyZQ0KPj4+ICsg Ki8NCj4+PiArc3RhdGljIHZvaWQgY2RuczNfb3RnX2VuYWJsZV9pcnEoc3RydWN0IGNkbnMzICpj ZG5zKQ0KPj4+ICt7DQo+Pj4gKwl3cml0ZWwoT1RHSUVOX0lEX0NIQU5HRV9JTlQgfCBPVEdJRU5f VkJVU1ZBTElEX1JJU0VfSU5UIHwNCj4+PiArCSAgICAgICBPVEdJRU5fVkJVU1ZBTElEX0ZBTExf SU5ULCAmY2Rucy0+b3RnX3JlZ3MtPmllbik7DQo+Pj4gK30NCj4+PiArDQo+Pj4gKy8qKg0KPj4+ ICsgKiBjZG5zM19kcmRfc3dpdGNoX2hvc3QgLSBzdGFydC9zdG9wIGhvc3QNCj4+PiArICogQGNk bnM6IFBvaW50ZXIgdG8gY29udHJvbGxlciBjb250ZXh0IHN0cnVjdHVyZQ0KPj4+ICsgKiBAb246 IDEgZm9yIHN0YXJ0LCAwIGZvciBzdG9wDQo+Pj4gKyAqDQo+Pj4gKyAqIFJldHVybnMgMCBvbiBz dWNjZXNzIG90aGVyd2lzZSBuZWdhdGl2ZSBlcnJubw0KPj4+ICsgKi8NCj4+Wy4uLl0NCj4+PiAr REVGSU5FX0VWRU5UKGNkbnMzX2xvZ19yZXF1ZXN0X2hhbmRsZWQsIGNkbnMzX3JlcXVlc3RfaGFu ZGxlZCwNCj4+PiArCVRQX1BST1RPKHN0cnVjdCBjZG5zM19yZXF1ZXN0ICpwcml2X3JlcSwgaW50 IGN1cnJlbnRfaW5kZXgsDQo+Pj4gKwkJIGludCBoYW5kbGVkKSwNCj4+PiArCVRQX0FSR1MocHJp dl9yZXEsIGN1cnJlbnRfaW5kZXgsIGhhbmRsZWQpDQo+Pj4gKyk7DQo+Pj4gKyNlbmRpZiAvKiBf X0xJTlVYX0NETlMzX1RSQUNFICovDQo+Pj4gKw0KPj4+ICsvKiB0aGlzIHBhcnQgbXVzdCBiZSBv dXRzaWRlIGhlYWRlciBndWFyZCAqLw0KPj4+ICsNCj4+PiArI3VuZGVmIFRSQUNFX0lOQ0xVREVf UEFUSA0KPj4+ICsjZGVmaW5lIFRSQUNFX0lOQ0xVREVfUEFUSCAuDQo+Pj4gKw0KPj4+ICsjdW5k ZWYgVFJBQ0VfSU5DTFVERV9GSUxFDQo+Pj4gKyNkZWZpbmUgVFJBQ0VfSU5DTFVERV9GSUxFIHRy YWNlDQo+Pj4gKw0KPj4+ICsjaW5jbHVkZSA8dHJhY2UvZGVmaW5lX3RyYWNlLmg+DQo+Pg0KPlRo YW5rcywNCj5QYXdlbAo=