Received: by 2002:a25:ef43:0:0:0:0:0 with SMTP id w3csp2167224ybm; Sun, 31 May 2020 10:48:37 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwsdGdPVJnhHrTnTWHQdyr4A4WF9RCZ34hrUrJlBdE195sVHR6Dp6pgLPlUjEMuLFqzlnpT X-Received: by 2002:a17:906:9719:: with SMTP id k25mr16819655ejx.411.1590947316799; Sun, 31 May 2020 10:48:36 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1590947316; cv=pass; d=google.com; s=arc-20160816; b=kVuEARXY1PKcfAXKEJQ/WFirVLoI2NIL7L8ox80Zl/Piet0KF3ZPRlH/mXpaVY8oEq W5IRdVAYTGtid0UcmaZ4/xmRLXnYqTVYcYJfFMHOMLJ2mYJwWxFD5NzQd3dizhicIzhZ elHNxOKYeqhVN3g/p4sFQXoiN02PbvwvX9Is3LWzN2bNdSJY7jC14V8+z0S+Ee1ezHer tLIqMlrORIL0AymdIXpryEfC2MALhNpSwryAlj8ZGBnb1lSYKre6pcHeAtxvjFa22ZOp UtVgv1JCY0/jasmRneDsT2dAfh2Pmm9QEwL2RAtlE7pGlUc8cBxTi0O7Onm6rM7XHv8K 1P+A== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :content-language:accept-language:in-reply-to:references:message-id :date:thread-index:thread-topic:subject:cc:to:from:dkim-signature; bh=sApWj3JB9fQtXh+SuPmvi84okGRo99bq5r5BZzIoYVY=; b=jXeaCD3wALHgZts4qxIUMPa0xhMPsjGRQoQ7U4RAFizFb0hlR4IAuWE+oW8/XBOe3l OFGEqnXkqwaWS26sjGXDkYgyu8ZP0XR/pDNAl9rJ4pomHJDhKSD0pNw8H2OYmZwuziEY d+9gwKwEy8ahRpT9dahoJGGzbcoDI4FHUzraXn22DS7YHJMQjE5GhGAon0TiiiJrFSge F9Z3JRg/p1s3xgnB3mAt3jhfT8hmZ5rdZf4J7HUP+2es0nWN+tD6OO97nWVaR9SUVZ5O 7Y0K5xkqLJ/gbrTlimb15fS9CcUgLiaOi0AJXwvlCzQ5BsbUjIHktR01868WnjNhKzNa rgKQ== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@xilinx.onmicrosoft.com header.s=selector2-xilinx-onmicrosoft-com header.b=qzOnapDI; arc=pass (i=1 spf=pass spfdomain=xilinx.com dkim=pass dkdomain=xilinx.com dmarc=pass fromdomain=xilinx.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id yh29si7531142ejb.71.2020.05.31.10.48.12; Sun, 31 May 2020 10:48:36 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@xilinx.onmicrosoft.com header.s=selector2-xilinx-onmicrosoft-com header.b=qzOnapDI; arc=pass (i=1 spf=pass spfdomain=xilinx.com dkim=pass dkdomain=xilinx.com dmarc=pass fromdomain=xilinx.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728304AbgEaRoj (ORCPT + 99 others); Sun, 31 May 2020 13:44:39 -0400 Received: from mail-bn8nam12on2040.outbound.protection.outlook.com ([40.107.237.40]:24635 "EHLO NAM12-BN8-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726193AbgEaRoi (ORCPT ); Sun, 31 May 2020 13:44:38 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cQ7+Q62M+KTWJB9N3g9q81K5hkpKXuxDc+V+bzmxW+iSKY3Y2qnqMlGTBMsLo4fDNjCMH4d+qbTXAI7qyERqS4sCdabU3t5IYNbl+dJy65ld7ReSaTfvRCcSKWbp2Krb8RlyMGistBQlXYLc7+G0nFYLXJJns8NbvJbRof6MpNhJ70vhnDFQv/xMNCwzrz+otycy4bFpdJjVu/tY1KIZ9ewg7xo8iy190qpnbb8QtAm895IK+HAD90kVynjy8eJRRLh5xjMDgR0Fmrirq3YoVY410OF7PhvxgBb4T0RqxGFtDpou9Jz2q3lnQUo5i5VGJ8Mc4HcqT46z1Xk93yduBw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=sApWj3JB9fQtXh+SuPmvi84okGRo99bq5r5BZzIoYVY=; b=G9ksudagJ+BuIjV0k9aRlQ0F8XrywK3K2owBX568SRFLJYEG41Y777DBerZJVHnuU/Jc64xjPmyKkyWAXLE/64V/YpkurhJeLjdMSBaEjrMkT+1JWm/U3+yld6L11lmHdhDn81qbT5fUk61uTs7KTFEimmggMEJ/Q4Oq22fZxBWaUpGVb2b7ineYl3qN564csc51c8cfE+wxhDJX01uSbnVNNhJS8NNz63qW1ClsoW3NhXEpKODDjwW+HBQcB4tDuJl5s5pGo5Bjqz4XptjcJpnPDxH8DupA/XcXDYxNkX6mZ0w7m+R2V9tPo6nFElxWl81hhnEbAarjnfKFxIBXlA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=xilinx.com; dmarc=pass action=none header.from=xilinx.com; dkim=pass header.d=xilinx.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xilinx.onmicrosoft.com; s=selector2-xilinx-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=sApWj3JB9fQtXh+SuPmvi84okGRo99bq5r5BZzIoYVY=; b=qzOnapDIM+NB8LCuEX8OivKlF6c3kxSOTLe1ONRL3Uh6qgbm4Ge/FXSWBdhU0HgosBpMDmZF2d0Hoe9FZ24Cl34yclErqJwPPg240Mvaxil33FT/V3uitI3kBnPCcTuQFHxrgapLi/Hn/7XPUVdYGfDiKZqkJSIUUmAGMIjl/Tk= Received: from CY4PR02MB2790.namprd02.prod.outlook.com (2603:10b6:903:11c::8) by CY4PR02MB2213.namprd02.prod.outlook.com (2603:10b6:903:e::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3045.19; Sun, 31 May 2020 17:41:51 +0000 Received: from CY4PR02MB2790.namprd02.prod.outlook.com ([fe80::8478:4f5d:d9e9:8979]) by CY4PR02MB2790.namprd02.prod.outlook.com ([fe80::8478:4f5d:d9e9:8979%11]) with mapi id 15.20.3045.024; Sun, 31 May 2020 17:41:50 +0000 From: Venkateshwar Rao Gannavarapu To: Laurent Pinchart CC: Hyun Kwon , Hyun Kwon , "dri-devel@lists.freedesktop.org" , "airlied@linux.ie" , "daniel@ffwll.ch" , "linux-kernel@vger.kernel.org" , Sandip Kothari Subject: RE: [RFC PATCH 2/2] drm: xlnx: driver for Xilinx DSI TX Subsystem Thread-Topic: [RFC PATCH 2/2] drm: xlnx: driver for Xilinx DSI TX Subsystem Thread-Index: AQHWF1mglRaPzdyDqkWAZse0zugWnqiYWTEAgB5pO4CAC+/AsA== Date: Sun, 31 May 2020 17:41:50 +0000 Message-ID: References: <1587417656-48078-1-git-send-email-venkateshwar.rao.gannavarapu@xilinx.com> <1587417656-48078-3-git-send-email-venkateshwar.rao.gannavarapu@xilinx.com> <20200504184348.GA3095@smtp.xilinx.com> <20200524030813.GF6026@pendragon.ideasonboard.com> In-Reply-To: <20200524030813.GF6026@pendragon.ideasonboard.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-MS-TNEF-Correlator: authentication-results: ideasonboard.com; dkim=none (message not signed) header.d=none;ideasonboard.com; dmarc=none action=none header.from=xilinx.com; x-originating-ip: [223.230.21.120] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: ffec7680-90d8-4130-4ecd-08d80589e685 x-ms-traffictypediagnostic: CY4PR02MB2213: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:10000; x-forefront-prvs: 0420213CCD x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: kM+jwsuH9JT6secm2kztau8uafGFs8HTxA7hdl9Nil3bcJMAISIxdh+XWfPMJ0GZFhPTyKpw+Wl31THKG5Tfu43kW0iYbYCEQmed48oq11v+IgBATxJh7OIlyTAKCRWDqHgbHF8f0e2+3PIsA4367Xep8bQWsaaRkkKGVv0Zp7w9+4kidK3CuE9o3LG0uEVsf6SJIJ+pgW/iN29exrVrGYm4MjvxmObUqooHjAjpxUO/KE2yiuNH/JSBiHnGDIvhFdbIkyfe0iRBywRZT2QukYkvOW047RxOERTOt69h8OStyEMS0gtiLT0Lo3Xn1dTSq44+IvIpURBSWIntliHb+w== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CY4PR02MB2790.namprd02.prod.outlook.com;PTR:;CAT:NONE;SFTY:;SFS:(366004)(39850400004)(376002)(346002)(396003)(136003)(26005)(186003)(54906003)(76116006)(6506007)(66556008)(66446008)(66476007)(66946007)(71200400001)(52536014)(7696005)(64756008)(8936002)(83380400001)(478600001)(2906002)(8676002)(107886003)(86362001)(316002)(55016002)(33656002)(4326008)(6916009)(9686003)(5660300002)(30864003)(579004)(559001);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata: 2MULOvs8CRT7zlFYmYzkZtMQajRkrwysnccYV+jJWRNs8Hc6l14i9xre+z3Ui65hwoyqYFCKhVSpzDldDa1U0vVl4Bob0zBm7Z8V/mAid633dli+Fd1bPqnVQDrM64ijnJLH4tLOvNKREtkt2MdodahMEwb4PMDh9xow4aPQ1n683QsP+RlJFeAwRKj0GCbVWX0uoLuB2I2xQA+gdEGZENpCL1Ok7Yzyxy36S9tMljV1Y5PoqdC5F81hauZbN6sbl0LP36IFlnK/Rtu+oxaN5/BBe8nL1YM76HfHVILiOqFMOKWU6YBi3OiBjX1DeQr0kKq855iAdB69otMjGGWwm+HTbg2ib+d2A5DkW445FUWL4efLtMWE0ppJ8QUQL9nkxyQFBexB7jCid06BXIoi0opCeEOSpFRv84jNPd7cFRj61f/4zAiOF+iJnMxj+qDndp7blMnMh0yuMVFSjcqK3xf8t83+mHlaU9rbLzI+OZ9HqI6s9EP9gj5ZltUmjnl5 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: xilinx.com X-MS-Exchange-CrossTenant-Network-Message-Id: ffec7680-90d8-4130-4ecd-08d80589e685 X-MS-Exchange-CrossTenant-originalarrivaltime: 31 May 2020 17:41:50.8340 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 657af505-d5df-48d0-8300-c31994686c5c X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: KmBHAIsfPkvkPQUYr4D/Dm1NDIvgpn+ieF4x3zMgY6qMSTYlLclqQmWjlxWSHJqfwxUFQAA+MbmzJ8WoT5a0Hg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR02MB2213 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkgTGF1cmVudCAmIEh5dW4sDQoNClRoYW5rcyBmb3IgdGhlIHJldmlldy4NCg0KPi0tLS0tT3Jp Z2luYWwgTWVzc2FnZS0tLS0tDQo+RnJvbTogTGF1cmVudCBQaW5jaGFydCA8bGF1cmVudC5waW5j aGFydEBpZGVhc29uYm9hcmQuY29tPg0KPlNlbnQ6IFN1bmRheSwgTWF5IDI0LCAyMDIwIDg6Mzgg QU0NCj5UbzogVmVua2F0ZXNod2FyIFJhbyBHYW5uYXZhcmFwdSA8VkdBTk5BVkFAeGlsaW54LmNv bT4NCj5DYzogSHl1biBLd29uIDxoeXVua0B4aWxpbnguY29tPjsgSHl1biBLd29uIDxoeXVua0B4 aWxpbnguY29tPjsgZHJpLQ0KPmRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZzsgYWlybGllZEBs aW51eC5pZTsgZGFuaWVsQGZmd2xsLmNoOyBsaW51eC0NCj5rZXJuZWxAdmdlci5rZXJuZWwub3Jn OyBTYW5kaXAgS290aGFyaSA8c2FuZGlwa0B4aWxpbnguY29tPjsgVmVua2F0ZXNod2FyDQo+UmFv IEdhbm5hdmFyYXB1IDxWR0FOTkFWQUB4aWxpbnguY29tPg0KPlN1YmplY3Q6IFJlOiBbUkZDIFBB VENIIDIvMl0gZHJtOiB4bG54OiBkcml2ZXIgZm9yIFhpbGlueCBEU0kgVFggU3Vic3lzdGVtDQo+ DQo+SGkgR1ZSYW8sDQo+DQo+VGhhbmsgeW91IGZvciB0aGUgcGF0Y2guDQo+DQo+T24gTW9uLCBN YXkgMDQsIDIwMjAgYXQgMTE6NDM6NDhBTSAtMDcwMCwgSHl1biBLd29uIHdyb3RlOg0KPj4gT24g TW9uLCAyMDIwLTA0LTIwIGF0IDE0OjIwOjU2IC0wNzAwLCBWZW5rYXRlc2h3YXIgUmFvIEdhbm5h dmFyYXB1DQo+d3JvdGU6DQo+PiA+IFRoZSBYaWxpbnggTUlQSSBEU0kgVHggU3Vic3lzdGVtIHNv ZnQgSVAgaXMgdXNlZCB0byBkaXNwbGF5IHZpZGVvDQo+PiA+IGRhdGEgZnJvbSBBWEktNCBzdHJl YW0gaW50ZXJmYWNlLg0KPj4gPg0KPj4gPiBJdCBzdXBwb3J0cyB1cHRvIDQgbGFuZXMsIG9wdGlv bmFsIHJlZ2lzdGVyIGludGVyZmFjZSBmb3IgdGhlIERQSFksDQo+Pg0KPj4gSSBkb24ndCBzZWUg dGhlIHJlZ2lzdGVyIGludGVyZmFjZSBmb3IgZHBoeSBzdXBwb3J0Lg0KPg0KPkkgdGhpbmsgdGhl IEQtUEhZIHNob3VsZCBiZSBzdXBwb3J0ZWQgdGhyb3VnaCBhIFBIWSBkcml2ZXIsIGFzIGl0IHNl ZW1zIHRvIGJlDQo+c2hhcmVkIGJldHdlZW4gZGlmZmVyZW50IHN1YnN5c3RlbXMuDQo+DQpJUCBo YXMgdGhlIHByb3Zpc2lvbiB0byByZWFkIERQSFkgcmVnaXN0ZXIgZm9yIGRlYnVnIHB1cnBvc2Ug b25seS4NCk5vIHByb2dyYW1taW5nIG9mIERQSFkgaXMgcmVxdWlyZWQgaW4gc3Vic3lzdGVtLg0K DQo+PiA+IG11bHRpcGxlIFJHQiBjb2xvciBmb3JtYXRzLCBjb21tYW5kIG1vZGUgYW5kIHZpZGVv IG1vZGUuDQo+PiA+IFRoaXMgaXMgYSBNSVBJLURTSSBob3N0IGRyaXZlciBhbmQgcHJvdmlkZXMg RFNJIGJ1cyBmb3IgcGFuZWxzLg0KPj4gPiBUaGlzIGRyaXZlciBhbHNvIGhlbHBzIHRvIGNvbW11 bmljYXRlIHdpdGggaXRzIHBhbmVsIHVzaW5nIHBhbmVsDQo+PiA+IGZyYW1ld29yay4NCj4+ID4N Cj4+ID4gU2lnbmVkLW9mZi1ieTogVmVua2F0ZXNod2FyIFJhbyBHYW5uYXZhcmFwdQ0KPj4gPiA8 dmVua2F0ZXNod2FyLnJhby5nYW5uYXZhcmFwdUB4aWxpbnguY29tPg0KPj4gPiAtLS0NCj4+ID4g IGRyaXZlcnMvZ3B1L2RybS94bG54L0tjb25maWcgICAgfCAgMTEgKw0KPj4gPiAgZHJpdmVycy9n cHUvZHJtL3hsbngvTWFrZWZpbGUgICB8ICAgMiArDQo+PiA+ICBkcml2ZXJzL2dwdS9kcm0veGxu eC94bG54X2RzaS5jIHwgNzU1DQo+PiA+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysNCj4NCj5EYW5pZWwgVmV0dGVyIGhhcyByZWNlbnRseSBleHByZXNzZWQgaGlzIG9w aWlvbiB0aGF0IGJyaWRnZSBkcml2ZXJzIHNob3VsZCBnbyB0bw0KPmRyaXZlcnMvZ3B1L2RybS9i cmlkZ2UvLiBJdCB3b3VsZCB0aGVuIGJlIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UveGxueC8uIEkg ZG9uJ3QNCj5oYXZlIGEgc3Ryb25nIG9waW5pb24gbXlzZWxmLg0KPg0KPj4gPiAgMyBmaWxlcyBj aGFuZ2VkLCA3NjggaW5zZXJ0aW9ucygrKQ0KPj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvZ3B1L2RybS94bG54L3hsbnhfZHNpLmMNCj4+ID4NCj4+ID4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS94bG54L0tjb25maWcNCj4+ID4gYi9kcml2ZXJzL2dwdS9kcm0veGxueC9LY29u ZmlnIGluZGV4IGFhNmNkODguLjczODczY2YgMTAwNjQ0DQo+PiA+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS94bG54L0tjb25maWcNCj4+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3hsbngvS2NvbmZp Zw0KPj4gPiBAQCAtMTEsMyArMTEsMTQgQEAgY29uZmlnIERSTV9aWU5RTVBfRFBTVUINCj4+ID4g IAkgIFRoaXMgaXMgYSBEUk0vS01TIGRyaXZlciBmb3IgWnlucU1QIERpc3BsYXlQb3J0IGNvbnRy b2xsZXIuIENob29zZQ0KPj4gPiAgCSAgdGhpcyBvcHRpb24gaWYgeW91IGhhdmUgYSBYaWxpbngg WnlucU1QIFNvQyB3aXRoIERpc3BsYXlQb3J0DQo+PiA+ICAJICBzdWJzeXN0ZW0uDQo+PiA+ICsN Cj4+ID4gK2NvbmZpZyBEUk1fWExOWF9EU0kNCj4+ID4gKyAgICAgICAgdHJpc3RhdGUgIlhpbGlu eCBEUk0gRFNJIFN1YnN5c3RlbSBEcml2ZXIiDQo+PiA+ICsgICAgICAgIHNlbGVjdCBEUk1fTUlQ SV9EU0kNCj4+ID4gKyAgICAgICAgc2VsZWN0IERSTV9QQU5FTA0KPj4gPiArICAgICAgICBzZWxl Y3QgRFJNX1BBTkVMX1NJTVBMRQ0KPj4gPiArICAgICAgICBoZWxwDQo+PiA+ICsJICBUaGlzIGVu YWJsZXMgc3VwcG9ydCBmb3IgWGlsaW54IE1JUEktRFNJLg0KPj4NCj4+IFRoaXMgc2VudGVuY2Ug aXMgbm90IG5lZWRlZCB3aXRoIGJlbG93LiBDb3VsZCB5b3UgcGxlYXNlIHJlcGhyYXNlIHRoZSB3 aG9sZT8NCg0KT0suDQo+Pg0KPj4gPiArCSAgVGhpcyBpcyBhIERSTS9LTVMgZHJpdmVyIGZvciBY aWxpbnggcHJvZ3JhbW1hYmxlIERTSSBjb250cm9sbGVyLg0KPj4gPiArCSAgQ2hvb3NlIHRoaXMg b3B0aW9uIGlmIHlvdSBoYXZlIGEgWGlsaW54IE1JUEkgRFNJLVRYIGNvbnRyb2xsZXINCj4+ID4g KwkgIHN1YnN5dGVtLg0KPj4NCj4+IFRoZXNlIHNlZW0gaW5jb3JyZWN0bHkgaW5kZW50ZWQuDQpX aWxsIGNoZWNrIHRoZSBpbmRlbnRhdGlvbi4NCj4+DQo+PiA+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0veGxueC9NYWtlZmlsZQ0KPj4gPiBiL2RyaXZlcnMvZ3B1L2RybS94bG54L01ha2Vm aWxlIGluZGV4IDJiODQ0YzYuLmI3ZWU2ZWYgMTAwNjQ0DQo+PiA+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS94bG54L01ha2VmaWxlDQo+PiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS94bG54L01ha2Vm aWxlDQo+PiA+IEBAIC0xLDIgKzEsNCBAQA0KPj4gPiAgenlucW1wLWRwc3ViLW9ianMgKz0genlu cW1wX2Rpc3AubyB6eW5xbXBfZHBzdWIubyB6eW5xbXBfZHAubw0KPj4gPiAgb2JqLSQoQ09ORklH X0RSTV9aWU5RTVBfRFBTVUIpICs9IHp5bnFtcC1kcHN1Yi5vDQo+PiA+ICsNCj4+ID4gK29iai0k KENPTkZJR19EUk1fWExOWF9EU0kpICs9IHhsbnhfZHNpLm8NCj4+ID4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS94bG54L3hsbnhfZHNpLmMNCj4+ID4gYi9kcml2ZXJzL2dwdS9kcm0veGxu eC94bG54X2RzaS5jIG5ldyBmaWxlIG1vZGUgMTAwNjQ0IGluZGV4DQo+PiA+IDAwMDAwMDAuLmI4 Y2FlNTkNCj4+ID4gLS0tIC9kZXYvbnVsbA0KPj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0veGxu eC94bG54X2RzaS5jDQo+PiA+IEBAIC0wLDAgKzEsNzU1IEBADQo+PiA+ICsvLyBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogR1BMLTIuMA0KPj4gPiArLyoNCj4+ID4gKyAqIFhpbGlueCBGUEdBIE1J UEkgRFNJIFR4IENvbnRyb2xsZXIgZHJpdmVyDQo+PiA+ICsgKg0KPj4gPiArICogQ29weXJpZ2h0 IChDKSAyMDE3IC0gMjAxOSBYaWxpbngsIEluYy4NCj4+ID4gKyAqDQo+PiA+ICsgKiBBdXRob3Jz Og0KPj4gPiArICogLSBTYXVyYWJoIFNlbmdhciA8c2F1cmFiaHNAeGlsaW54LmNvbT4NCj4+ID4g KyAqIC0gVmVua2F0ZXNod2FyIFJhbyBHYW5uYXZhcmFwdQ0KPj4gPiArPHZlbmthdGVzaHdhci5y YW8uZ2FubmF2YXJhcHVAeGlsaW54LmNvbT4NCj4+ID4gKyAqLw0KPj4gPiArDQo+PiA+ICsjaW5j bHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+DQo+PiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9j b25uZWN0b3IuaD4NCj4+ID4gKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4NCj4+ID4gKyNpbmNs dWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+DQo+PiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9kZXZp Y2UuaD4NCj4+ID4gKyNpbmNsdWRlIDxkcm0vZHJtX2VuY29kZXIuaD4NCj4+ID4gKyNpbmNsdWRl IDxkcm0vZHJtX2ZvdXJjYy5oPg0KPj4gPiArI2luY2x1ZGUgPGRybS9kcm1fZ2VtX2NtYV9oZWxw ZXIuaD4gI2luY2x1ZGUgPGRybS9kcm1fbWlwaV9kc2kuaD4NCj4+ID4gKyNpbmNsdWRlIDxkcm0v ZHJtX3BhbmVsLmg+ICNpbmNsdWRlIDxkcm0vZHJtX3Byb2JlX2hlbHBlci5oPg0KPj4gPiArDQo+ PiA+ICsjaW5jbHVkZSA8bGludXgvY2xrLmg+DQo+PiA+ICsjaW5jbHVkZSA8bGludXgvY29tcG9u ZW50Lmg+DQo+PiA+ICsjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+DQo+PiA+ICsjaW5jbHVkZSA8 bGludXgvaW9wb2xsLmg+DQo+PiA+ICsjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+DQo+PiA+ ICsjaW5jbHVkZSA8bGludXgvb2ZfZ3JhcGguaD4NCj4+ID4gKyNpbmNsdWRlIDxsaW51eC9waHkv cGh5Lmg+DQo+PiA+ICsNCj4+ID4gKyNpbmNsdWRlIDx2aWRlby9taXBpX2Rpc3BsYXkuaD4NCj4+ ID4gKyNpbmNsdWRlIDx2aWRlby92aWRlb21vZGUuaD4NCj4+ID4gKw0KPj4gPiArLyogRFNJIFR4 IElQIHJlZ2lzdGVycyAqLw0KPj4gPiArI2RlZmluZSBYRFNJX0NDUgkJCTB4MDANCj4+ID4gKyNk ZWZpbmUgWERTSV9DQ1JfQ09SRUVOQgkJQklUKDApDQo+PiA+ICsjZGVmaW5lIFhEU0lfQ0NSX1NP RlRSU1QJCUJJVCgxKQ0KPj4gPiArI2RlZmluZSBYRFNJX0NDUl9DUlJFQURZCQlCSVQoMikNCj4+ ID4gKyNkZWZpbmUgWERTSV9DQ1JfQ01ETU9ERQkJQklUKDMpDQo+PiA+ICsjZGVmaW5lIFhEU0lf Q0NSX0RGSUZPUlNUCQlCSVQoNCkNCj4+ID4gKyNkZWZpbmUgWERTSV9DQ1JfQ01ERklGT1JTVAkJ QklUKDUpDQo+PiA+ICsjZGVmaW5lIFhEU0lfUENSCQkJMHgwNA0KPj4gPiArI2RlZmluZSBYRFNJ X1BDUl9WSURFT01PREUoeCkJCSgoKHgpICYgMHgzKSA8PCAzKQ0KPj4gPiArI2RlZmluZSBYRFNJ X1BDUl9WSURFT01PREVfTUFTSwkJKDB4MyA8PCAzKQ0KPj4gPiArI2RlZmluZSBYRFNJX1BDUl9W SURFT01PREVfU0hJRlQJMw0KPj4gPiArI2RlZmluZSBYRFNJX1BDUl9CTExQVFlQRSh4KQkJKCh4 KSA8PCA1KQ0KPj4gPiArI2RlZmluZSBYRFNJX1BDUl9CTExQTU9ERSh4KQkJKCh4KSA8PCA2KQ0K Pj4gPiArI2RlZmluZSBYRFNJX1BDUl9FT1RQRU5BQkxFKHgpCQkoKHgpIDw8IDEzKQ0KPj4gPiAr I2RlZmluZSBYRFNJX0dJRVIJCQkweDIwDQo+PiA+ICsjZGVmaW5lIFhEU0lfSVNSCQkJMHgyNA0K Pj4gPiArI2RlZmluZSBYRFNJX0lFUgkJCTB4MjgNCj4+ID4gKyNkZWZpbmUgWERTSV9TVFIJCQkw eDJDDQo+PiA+ICsjZGVmaW5lIFhEU0lfU1RSX1JEWV9TSFBLVAkJQklUKDYpDQo+PiA+ICsjZGVm aW5lIFhEU0lfU1RSX1JEWV9MTkdQS1QJCUJJVCg3KQ0KPj4gPiArI2RlZmluZSBYRFNJX1NUUl9E RklGT19GVUxMCQlCSVQoOCkNCj4+ID4gKyNkZWZpbmUgWERTSV9TVFJfREZJRk9fRU1QVFkJCUJJ VCg5KQ0KPj4gPiArI2RlZmluZSBYRFNJX1NUUl9XQUlURlJfREFUQQkJQklUKDEwKQ0KPj4gPiAr I2RlZmluZSBYRFNJX1NUUl9DTURfRVhFX1BHUwkJQklUKDExKQ0KPj4gPiArI2RlZmluZSBYRFNJ X1NUUl9DQ01EX1BST0MJCUJJVCgxMikNCj4+ID4gKyNkZWZpbmUgWERTSV9TVFJfTFBLVF9NQVNL CQkoMHg1IDw8IDcpDQo+PiA+ICsjZGVmaW5lIFhEU0lfQ01ECQkJMHgzMA0KPj4gPiArI2RlZmlu ZSBYRFNJX0NNRF9RVUVVRV9QQUNLRVQoeCkJKCh4KSAmIEdFTk1BU0soMjMsIDApKQ0KPj4gPiAr I2RlZmluZSBYRFNJX0RGUgkJCTB4MzQNCj4+ID4gKyNkZWZpbmUgWERTSV9USU1FMQkJCTB4NTAN Cj4+ID4gKyNkZWZpbmUgWERTSV9USU1FMV9CTExQX0JVUlNUKHgpCSgoeCkgJiBHRU5NQVNLKDE1 LCAwKSkNCj4+ID4gKyNkZWZpbmUgWERTSV9USU1FMV9IU0EoeCkJCSgoKHgpICYgR0VOTUFTSygx NSwgMCkpIDw8IDE2KQ0KPj4gPiArI2RlZmluZSBYRFNJX1RJTUUyCQkJMHg1NA0KPj4gPiArI2Rl ZmluZSBYRFNJX1RJTUUyX1ZBQ1QoeCkJCSgoeCkgJiBHRU5NQVNLKDE1LCAwKSkNCj4+ID4gKyNk ZWZpbmUgWERTSV9USU1FMl9IQUNUKHgpCQkoKCh4KSAmIEdFTk1BU0soMTUsIDApKSA8PCAxNikN Cj4+ID4gKyNkZWZpbmUgWERTSV9IQUNUX01VTFRJUExJRVIJCUdFTk1BU0soMSwgMCkNCj4+ID4g KyNkZWZpbmUgWERTSV9USU1FMwkJCTB4NTgNCj4+ID4gKyNkZWZpbmUgWERTSV9USU1FM19IRlAo eCkJCSgoeCkgJiBHRU5NQVNLKDE1LCAwKSkNCj4+ID4gKyNkZWZpbmUgWERTSV9USU1FM19IQlAo eCkJCSgoKHgpICYgR0VOTUFTSygxNSwgMCkpIDw8IDE2KQ0KPj4gPiArI2RlZmluZSBYRFNJX1RJ TUU0CQkJMHg1Yw0KPj4gPiArI2RlZmluZSBYRFNJX1RJTUU0X1ZGUCh4KQkJKCh4KSAmIEdFTk1B U0soNywgMCkpDQo+PiA+ICsjZGVmaW5lIFhEU0lfVElNRTRfVkJQKHgpCQkoKCh4KSAmIEdFTk1B U0soNywgMCkpIDw8IDgpDQo+PiA+ICsjZGVmaW5lIFhEU0lfVElNRTRfVlNBKHgpCQkoKCh4KSAm IEdFTk1BU0soNywgMCkpIDw8IDE2KQ0KPj4gPiArI2RlZmluZSBYRFNJX0xUSU1FCQkJMHg2MA0K Pj4gPiArI2RlZmluZSBYRFNJX0JMTFBfVElNRQkJCTB4NjQNCj4+ID4gKy8qDQo+PiA+ICsgKiBY RFNJX05VTV9EQVRBX1QgcmVwcmVzZW50cyBudW1iZXIgb2YgZGF0YSB0eXBlcyBpbiB0aGUNCj4+ ID4gKyAqIGVudW0gbWlwaV9kc2lfcGl4ZWxfZm9ybWF0IGluIHRoZSBNSVBJIERTSSBwYXJ0IG9m IERSTSBmcmFtZXdvcmsuDQo+PiA+ICsgKi8NCj4+ID4gKyNkZWZpbmUgWERTSV9OVU1fREFUQV9U CQkJNA0KPj4gPiArI2RlZmluZSBYRFNJX1ZJREVPX01PREVfU1lOQ19QVUxTRQkweDANCj4+ID4g KyNkZWZpbmUgWERTSV9WSURFT19NT0RFX1NZTkNfRVZFTlQJMHgxDQo+PiA+ICsjZGVmaW5lIFhE U0lfVklERU9fTU9ERV9CVVJTVAkJMHgyDQo+Pg0KPj4gUGxlYXNlIHJlbW92ZSB0aGVzZSB1bnVz ZWQgMyBkZWZpbml0aW9ucy4NCk9LLg0KPj4NCj4+ID4gKw0KPj4gPiArI2RlZmluZSBYRFNJX0RQ SFlfQ0xLX01JTgkxOTcwMDAwMDAwMDBVTA0KPj4gPiArI2RlZmluZSBYRFNJX0RQSFlfQ0xLX01B WAkyMDMwMDAwMDAwMDBVTA0KPj4gPiArI2RlZmluZSBYRFNJX0RQSFlfQ0xLX1JFUQkyMDAwMDAw MDAwMDBVTA0KPj4gPiArDQo+PiA+ICsvKiBjb21tYW5kIHRpbWVvdXQgaW4gdXNlYyAqLw0KPj4g PiArI2RlZmluZSBYRFNJX0NNRF9USU1FT1VUX1ZBTAkoMzAwMCkNCj4+ID4gKw0KPj4gPiArLyoq DQo+PiA+ICsgKiBzdHJ1Y3QgeGxueF9kc2kgLSBYaWxpbnggRFNJLVRYIGNvcmUNCj4+ID4gKyAq IEBlbmNvZGVyOiBEUk0gZW5jb2RlciBzdHJ1Y3R1cmUNCj4+ID4gKyAqIEBkc2lfaG9zdDogRFNJ IGhvc3QgZGV2aWNlDQo+PiA+ICsgKiBAY29ubmVjdG9yOiBEUk0gY29ubmVjdG9yIHN0cnVjdHVy ZQ0KPj4gPiArICogQHBhbmVsX25vZGU6IE1JUEkgRFNJIGRldmljZSBwYW5lbCBub2RlDQo+PiA+ ICsgKiBAcGFuZWw6ICBEUk0gcGFuZWwgc3RydWN0dXJlDQo+PiA+ICsgKiBAZGV2OiBkZXZpY2Ug c3RydWN0dXJlDQo+PiA+ICsgKiBAaW9tZW06IEJhc2UgYWRkcmVzcyBvZiBEU0kgc3Vic3lzdGVt DQo+PiA+ICsgKiBAbGFuZXM6IG51bWJlciBvZiBhY3RpdmUgZGF0YSBsYW5lcyBzdXBwb3J0ZWQg YnkgRFNJIGNvbnRyb2xsZXINCj4+ID4gKyAqIEBjbWRtb2RlOiBjb21tYW5kIG1vZGUgc3VwcG9y dA0KPj4gPiArICogQG1vZGVfZmxhZ3M6IERTSSBvcGVyYXRpb24gbW9kZSByZWxhdGVkIGZsYWdz DQo+PiA+ICsgKiBAZm9ybWF0OiBwaXhlbCBmb3JtYXQgZm9yIHZpZGVvIG1vZGUgb2YgRFNJIGNv bnRyb2xsZXINCj4+ID4gKyAqIEB2bTogdmlkZW9tb2RlIGRhdGEgc3RydWN0dXJlDQo+PiA+ICsg KiBAbXVsX2ZhY3RvcjogbXVsdGlwbGljYXRpb24gZmFjdG9yIGZvciBIQUNUIHRpbWluZyBwYXJh bWV0ZXINCj4+ID4gKyAqIEB2aWRlb19hY2xrOiBWaWRlbyBjbG9jaw0KPj4gPiArICogQGRwaHlf Y2xrXzIwME06IDIwME1IeiBEUEhZIGNsb2NrIGFuZCBBWEkgTGl0ZSBjbG9jayAgKi8gc3RydWN0 DQo+PiA+ICt4bG54X2RzaSB7DQo+PiA+ICsJc3RydWN0IGRybV9lbmNvZGVyIGVuY29kZXI7DQo+ PiA+ICsJc3RydWN0IG1pcGlfZHNpX2hvc3QgZHNpX2hvc3Q7DQo+PiA+ICsJc3RydWN0IGRybV9j b25uZWN0b3IgY29ubmVjdG9yOw0KPj4gPiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFuZWxfbm9k ZTsNCj4+ID4gKwlzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbDsNCj4+ID4gKwlzdHJ1Y3QgZGV2aWNl ICpkZXY7DQo+PiA+ICsJdm9pZCBfX2lvbWVtICppb21lbTsNCj4+ID4gKwl1MzIgbGFuZXM7DQo+ PiA+ICsJYm9vbCBjbWRtb2RlOw0KPj4gPiArCXUzMiBtb2RlX2ZsYWdzOw0KPj4gPiArCWVudW0g bWlwaV9kc2lfcGl4ZWxfZm9ybWF0IGZvcm1hdDsNCj4+ID4gKwlzdHJ1Y3QgdmlkZW9tb2RlIHZt Ow0KPj4gPiArCXUzMiBtdWxfZmFjdG9yOw0KPj4gPiArCXN0cnVjdCBjbGsgKnZpZGVvX2FjbGs7 DQo+PiA+ICsJc3RydWN0IGNsayAqZHBoeV9jbGtfMjAwTTsNCj4+ID4gK307DQo+PiA+ICsNCj4+ ID4gKyNkZWZpbmUgaG9zdF90b19kc2koaG9zdCkgY29udGFpbmVyX29mKGhvc3QsIHN0cnVjdCB4 bG54X2RzaSwNCj4+ID4gK2RzaV9ob3N0KSAjZGVmaW5lIGNvbm5lY3Rvcl90b19kc2koYykgY29u dGFpbmVyX29mKGMsIHN0cnVjdA0KPj4gPiAreGxueF9kc2ksIGNvbm5lY3RvcikgI2RlZmluZSBl bmNvZGVyX3RvX2RzaShlKSBjb250YWluZXJfb2YoZSwNCj4+ID4gK3N0cnVjdCB4bG54X2RzaSwg ZW5jb2RlcikNCj4+ID4gKw0KPj4gPiArc3RhdGljIGlubGluZSB2b2lkIHhsbnhfZHNpX3dyaXRl bCh2b2lkIF9faW9tZW0gKmJhc2UsIGludCBvZmZzZXQsDQo+PiA+ICt1MzIgdmFsKSB7DQo+PiA+ ICsJd3JpdGVsKHZhbCwgYmFzZSArIG9mZnNldCk7DQo+PiA+ICt9DQo+PiA+ICsNCj4+ID4gK3N0 YXRpYyBpbmxpbmUgdTMyIHhsbnhfZHNpX3JlYWRsKHZvaWQgX19pb21lbSAqYmFzZSwgaW50IG9m ZnNldCkgew0KPj4gPiArCXJldHVybiByZWFkbChiYXNlICsgb2Zmc2V0KTsNCj4+ID4gK30NCj4+ ID4gKw0KPj4gPiArLyoqDQo+PiA+ICsgKiB4bG54X2RzaV9zZXRfZGlzcGxheV9tb2RlIC0gQ29u ZmlndXJlIERTSSB0aW1pbmcgcmVnaXN0ZXJzDQo+PiA+ICsgKiBAZHNpOiB4aWxpbnggRFNJIHN0 cnVjdHVyZQ0KPj4gPiArICoNCj4+ID4gKyAqIFRoaXMgZnVuY3Rpb24gd3JpdGVzIHRoZSB0aW1p bmcgcGFyYW1ldGVycyBvZiBEU0kgSVAgd2hpY2ggYXJlDQo+PiA+ICsgKiByZXRyaWV2ZWQgZnJv bSBwYW5lbCB0aW1pbmcgdmFsdWVzLg0KPj4gPiArICovDQo+PiA+ICtzdGF0aWMgdm9pZCB4bG54 X2RzaV9zZXRfZGlzcGxheV9tb2RlKHN0cnVjdCB4bG54X2RzaSAqZHNpKQ0KPj4NCj4+IFRoaXMg ZnVuY3Rpb24gYmV0dGVyIGRpcmVjdGx5IGlubGluZSB0byB4bG54X2RzaV9hdG9taWNfbW9kZV9z ZXQoKS4NCj4+IFRoZW4sIHRoZSB2aWRlb21vZGUgaXMgbm90IHJlYWxseSBuZWVkZWQuIFBsZWFz ZSByZW1vdmUgaXQgYW5kIHVzZQ0KPmRybV9kaXNwbGF5X21vZGUuDQpPSy4NCj4+DQo+PiA+ICt7 DQo+PiA+ICsJc3RydWN0IHZpZGVvbW9kZSAqdm0gPSAmZHNpLT52bTsNCj4+ID4gKwl1MzIgcmVn LCB2aWRlb19tb2RlOw0KPj4gPiArDQo+PiA+ICsJcmVnID0geGxueF9kc2lfcmVhZGwoZHNpLT5p b21lbSwgWERTSV9QQ1IpOw0KPj4gPiArCXZpZGVvX21vZGUgPSAocmVnICYgWERTSV9QQ1JfVklE RU9NT0RFX01BU0spID4+DQo+PiA+ICsJCSAgICAgIFhEU0lfUENSX1ZJREVPTU9ERV9TSElGVDsN Cj4+ID4gKw0KPj4gPiArCS8qIGNvbmZpZ3VyZSB0aGUgSFNBIHZhbHVlIG9ubHkgaWYgbm9uX2J1 cnN0X3N5bmNfcGx1c2UgdmlkZW8gbW9kZSAqLw0KPj4gPiArCWlmICghdmlkZW9fbW9kZSAmJg0K Pj4gPiArCSAgICAoZHNpLT5tb2RlX2ZsYWdzICYgTUlQSV9EU0lfTU9ERV9WSURFT19TWU5DX1BV TFNFKSkgew0KPj4gPiArCQlyZWcgPSBYRFNJX1RJTUUxX0hTQSh2bS0+aHN5bmNfbGVuKTsNCj4+ ID4gKwkJeGxueF9kc2lfd3JpdGVsKGRzaS0+aW9tZW0sIFhEU0lfVElNRTEsIHJlZyk7DQo+PiA+ ICsJfQ0KPj4gPiArDQo+PiA+ICsJcmVnID0gWERTSV9USU1FNF9WRlAodm0tPnZmcm9udF9wb3Jj aCkgfA0KPj4gPiArCSAgICAgIFhEU0lfVElNRTRfVkJQKHZtLT52YmFja19wb3JjaCkgfA0KPj4g PiArCSAgICAgIFhEU0lfVElNRTRfVlNBKHZtLT52c3luY19sZW4pOw0KPj4gPiArCXhsbnhfZHNp X3dyaXRlbChkc2ktPmlvbWVtLCBYRFNJX1RJTUU0LCByZWcpOw0KPj4gPiArDQo+PiA+ICsJcmVn ID0gWERTSV9USU1FM19IRlAodm0tPmhmcm9udF9wb3JjaCkgfA0KPj4gPiArCSAgICAgIFhEU0lf VElNRTNfSEJQKHZtLT5oYmFja19wb3JjaCk7DQo+PiA+ICsJeGxueF9kc2lfd3JpdGVsKGRzaS0+ aW9tZW0sIFhEU0lfVElNRTMsIHJlZyk7DQo+PiA+ICsNCj4+ID4gKwlkZXZfZGJnKGRzaS0+ZGV2 LCAibXVsIGZhY3RvciBmb3IgcGFyc2VkIGRhdGF0eXBlIGlzID0gJWRcbiIsDQo+PiA+ICsJCShk c2ktPm11bF9mYWN0b3IpIC8gMTAwKTsNCj4+DQo+PiBSZW1vdmUgdW5uZWVkZWQgKCkuDQpPSy4N Cj4+DQo+PiA+ICsJLyoNCj4+ID4gKwkgKiBUaGUgSEFDVCBwYXJhbWV0ZXIgcmVjZWl2ZWQgZnJv bSBwYW5lbCB0aW1pbmcgdmFsdWVzIHNob3VsZCBiZQ0KPj4gPiArCSAqIGRpdmlzaWJsZSBieSA0 LiBUaGUgcmVhc29uIGZvciB0aGlzIGlzLCB0aGUgd29yZCBjb3VudCBnaXZlbiBhcw0KPj4gPiAr CSAqIGlucHV0IHRvIERTSSBjb250cm9sbGVyIGlzIEhBQ1QgKiBtdWxfZmFjdG9yLiBUaGUgbXVs X2ZhY3RvciBpcw0KPj4gPiArCSAqIDMsIDIuMjUsIDIuMjUsIDIgcmVzcGVjdGl2ZWx5IGZvciBS R0I4ODgsIFJHQjY2Nl9MLCBSR0I2NjZfUCBhbmQNCj4+ID4gKwkgKiBSR0I1NjUuDQo+PiA+ICsJ ICogZS5nLiBmb3IgUkdCNjY2X0wgY29sb3IgZm9ybWF0IGFuZCAxMDgwcCwgdGhlIHdvcmQgY291 bnQgaXMNCj4+ID4gKwkgKiAxOTIwKjIuMjUgPSA0MzIwIHdoaWNoIGlzIGRpdmlzaWJsZSBieSA0 IGFuZCBpdCBpcyBhIHZhbGlkIGlucHV0DQo+PiA+ICsJICogdG8gRFNJIGNvbnRyb2xsZXIuIEJh c2VkIG9uIHRoaXMgMi4yNSBtdWwgZmFjdG9yLCB3ZSBjb21lIHVwIHdpdGgNCj4+ID4gKwkgKiB0 aGUgZGl2aXNpb24gZmFjdG9yIG9mIChYRFNJX0hBQ1RfTVVMVElQTElFUikgYXMgNCBmb3IgY2hl Y2tpbmcNCj4+ID4gKwkgKi8NCj4+ID4gKwlpZiAoKHZtLT5oYWN0aXZlICYgWERTSV9IQUNUX01V TFRJUExJRVIpICE9IDApDQo+Pg0KPj4gaWYgKCEodm0tPmhhY3RpdmUgJiBYRFNJX0hBQ1RfTVVM VElQTElFUikpPw0KPj4NCj4+ID4gKwkJZGV2X3dhcm4oZHNpLT5kZXYsICJJbmNvcnJlY3QgSEFD VCB3aWxsIGJlIHByb2dyYW1tZWRcbiIpOw0KPj4NCj4+IGRldl93YXJuKCkgYmV0dGVyIGNvbWUg d2l0aCBtb3JlIGRldGFpbHMuIFByb2JhYmx5IGl0IGNhbiBtZW50aW9uIHRoYXQNCj4+IGhhY3Rp dmUgaXMgbm90IGFsaWduZWQgYWxvbmcgd2l0aCBpdHMgdmFsdWUuDQpPSy4NCj4+DQo+PiA+ICsN Cj4+ID4gKwlyZWcgPSBYRFNJX1RJTUUyX0hBQ1QoKHZtLT5oYWN0aXZlKSAqIChkc2ktPm11bF9m YWN0b3IpIC8gMTAwKSB8DQo+Pg0KPj4gRGl0dG8uIE5vICgpLg0KPj4NCj4+ID4gKwkgICAgICBY RFNJX1RJTUUyX1ZBQ1Qodm0tPnZhY3RpdmUpOw0KPj4gPiArCXhsbnhfZHNpX3dyaXRlbChkc2kt PmlvbWVtLCBYRFNJX1RJTUUyLCByZWcpOw0KPj4gPiArDQo+PiA+ICsJZGV2X2RiZyhkc2ktPmRl diwgIkxDRCBzaXplID0gJWR4JWRcbiIsIHZtLT5oYWN0aXZlLCB2bS0+dmFjdGl2ZSk7DQo+PiA+ ICt9DQo+PiA+ICsNCj4+ID4gKy8qKg0KPj4gPiArICogeGxueF9kc2lfc2V0X2Rpc3BsYXlfZW5h YmxlIC0gRW5hYmxlcyB0aGUgRFNJIFR4IElQIGNvcmUgZW5hYmxlDQo+PiA+ICsgKiByZWdpc3Rl ciBiaXQNCj4+ID4gKyAqIEBkc2k6IFhpbGlueCBEU0kgc3RydWN0dXJlDQo+PiA+ICsgKg0KPj4g PiArICogVGhpcyBmdW5jdGlvbiB0YWtlcyB0aGUgRFNJIHN0cnVjdXJlIGFuZCBlbmFibGVzIHRo ZSBjb3JlIGVuYWJsZQ0KPj4gPiArYml0DQo+PiA+ICsgKiBvZiBjb3JlIGNvbmZpZ3VyYXRpb24g cmVnaXN0ZXIuDQo+PiA+ICsgKi8NCj4+ID4gK3N0YXRpYyB2b2lkIHhsbnhfZHNpX3NldF9kaXNw bGF5X2VuYWJsZShzdHJ1Y3QgeGxueF9kc2kgKmRzaSkgew0KPj4gPiArCXUzMiByZWc7DQo+PiA+ ICsNCj4+ID4gKwlyZWcgPSB4bG54X2RzaV9yZWFkbChkc2ktPmlvbWVtLCBYRFNJX0NDUik7DQo+ PiA+ICsJcmVnIHw9IFhEU0lfQ0NSX0NPUkVFTkI7DQo+PiA+ICsNCj4+DQo+PiBOaXQuIEl0IGNh biBiZSBsZXNzIGxpbmVzIGJ5IHJlbW92aW5nIHRoaXMgZW1wdHkgbGluZSBhbmQgc2V0dGluZyB0 aGUNCj4+IHJlZyBhdCBkZWNsYXJhcnRpb24gYW4gc28gb24uDQpPSy4NCj4+DQo+PiA+ICsJeGxu eF9kc2lfd3JpdGVsKGRzaS0+aW9tZW0sIFhEU0lfQ0NSLCByZWcpOw0KPj4gPiArCWRldl9kYmco ZHNpLT5kZXYsICJNSVBJIERTSSBUeCBjb250cm9sbGVyIGlzIGVuYWJsZWQuXG4iKTsgfQ0KPj4g PiArDQo+PiA+ICsvKioNCj4+ID4gKyAqIHhsbnhfZHNpX3NldF9kaXNwbGF5X2Rpc2FibGUgLSBE aXNhYmxlIHRoZSBEU0kgVHggSVAgY29yZSBlbmFibGUNCj4+ID4gKyAqIHJlZ2lzdGVyIGJpdA0K Pj4gPiArICogQGRzaTogWGlsaW54IERTSSBzdHJ1Y3R1cmUNCj4+ID4gKyAqDQo+PiA+ICsgKiBU aGlzIGZ1bmN0aW9uIHRha2VzIHRoZSBEU0kgc3RydWN1cmUgYW5kIGRpc2FibGVzIHRoZSBjb3Jl DQo+PiA+ICtlbmFibGUgYml0DQo+PiA+ICsgKiBvZiBjb3JlIGNvbmZpZ3VyYXRpb24gcmVnaXN0 ZXIuDQo+PiA+ICsgKi8NCj4+ID4gK3N0YXRpYyB2b2lkIHhsbnhfZHNpX3NldF9kaXNwbGF5X2Rp c2FibGUoc3RydWN0IHhsbnhfZHNpICpkc2kpIHsNCj4+ID4gKwl1MzIgcmVnOw0KPj4gPiArDQo+ PiA+ICsJcmVnID0geGxueF9kc2lfcmVhZGwoZHNpLT5pb21lbSwgWERTSV9DQ1IpOw0KPj4gPiAr CXJlZyAmPSB+WERTSV9DQ1JfQ09SRUVOQjsNCj4+ID4gKw0KPj4NCj4+IERpdHRvLg0KPj4NCj4+ ID4gKwl4bG54X2RzaV93cml0ZWwoZHNpLT5pb21lbSwgWERTSV9DQ1IsIHJlZyk7DQo+PiA+ICsJ ZGV2X2RiZyhkc2ktPmRldiwgIkRTSSBUeCBpcyBkaXNhYmxlZC4gcmVzZXQgcmVncyB0byBkZWZh dWx0DQo+PiA+ICt2YWx1ZXNcbiIpOyB9DQo+PiA+ICsNCj4+ID4gKy8qKg0KPj4gPiArICogeGxu eF9kc2lfaG9zdF90cmFuc2ZlciAtIHRyYW5zZmVyIGNvbW1hbmQgdG8gcGFuZWwNCj4+ID4gKyAq IEBob3N0OiBtaXBpIGRzaSBob3N0IHN0cnVjdHVyZQ0KPj4gPiArICogQG1zZzogbWlwaSBkc2kg bXNnIHdpdGggdHlwZSwgbGVuZ3RoIGFuZCBkYXRhDQo+PiA+ICsgKg0KPj4gPiArICogVGhpcyBm dW5jdGlvbiBpcyB2YWxpZCBvbmx5IGluIGNvbW1hbmQgbW9kZS4NCj4+ID4gKyAqIEl0IGNoZWNr cyB0aGUgY29tbWFuZCBmaWZvIGVtcHR5IHN0YXR1cyBhbmQgd3JpdGVzIGludG8NCj4+ID4gKyAq IGRhdGEgb3IgY21kIHJlZ2lzdGVyIGFuZCB3YWl0cyBmb3IgdGhlIGNvbXBsZXRpb24gc3RhdHVz Lg0KPj4gPiArICoNCj4+ID4gKyAqIFJldHVybjoJbnVtYmVyIG9mIGJ5dGVzLCBvbiBzdWNjZXNz IGFuZCBlcnJvciBudW1iZXIgb24gZmFpbHVyZQ0KPj4NCj4+IE5pdC4gRXh0cmEgc3BhY2VzLg0K Pj4NCj4+ID4gKyAqLw0KPj4gPiArc3RhdGljIHNzaXplX3QgeGxueF9kc2lfaG9zdF90cmFuc2Zl cihzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdCwNCj4+ID4gKwkJCQkgICAgICBjb25zdCBzdHJ1 Y3QgbWlwaV9kc2lfbXNnICptc2cpIHsNCj4+ID4gKwlzdHJ1Y3QgeGxueF9kc2kgKmRzaSA9IGhv c3RfdG9fZHNpKGhvc3QpOw0KPj4gPiArCXUzMiBkYXRhMCwgZGF0YTEsIGNtZDAsIHN0YXR1cywg dmFsOw0KPj4gPiArCWNvbnN0IGNoYXIgKnR4X2J1ZiA9IG1zZy0+dHhfYnVmOw0KPj4gPiArDQo+ PiA+ICsJaWYgKCEoeGxueF9kc2lfcmVhZGwoZHNpLT5pb21lbSwgWERTSV9DQ1IpICYgKFhEU0lf Q0NSX0NPUkVFTkIgfA0KPj4gPiArCQkJCQkJICAgICAgWERTSV9DQ1JfQ01ETU9ERSkpKSB7DQo+ Pg0KPj4gVGhpcyBwYXNzZXMgd2hlbiBvbmUgb2YgdGhlc2UgMiBiaXRzIGlzIHNldCwgYW5kIEkg ZG9uJ3QgdGhpbmsgaXQncyByaWdodC4NCk9LLg0KPj4NCj4+ID4gKwkJZGV2X2Vycihkc2ktPmRl diwgImRzaSBjb21tYW5kIG1vZGUgbm90IGVuYWJsZWRcbiIpOw0KPj4gPiArCQlyZXR1cm4gLUVJ TlZBTDsNCj4+ID4gKwl9DQo+PiA+ICsNCj4+ID4gKwlpZiAobXNnLT50eXBlID09IE1JUElfRFNJ X0RDU19MT05HX1dSSVRFKSB7DQo+PiA+ICsJCXN0YXR1cyA9IHJlYWRsX3BvbGxfdGltZW91dChk c2ktPmlvbWVtICsgWERTSV9TVFIsIHZhbCwNCj4+ID4gKwkJCQkJICAgICgodmFsICYgWERTSV9T VFJfTFBLVF9NQVNLKSA9PQ0KPj4gPiArCQkJCQkgICAgIFhEU0lfU1RSX0xQS1RfTUFTSyksIDEs DQo+Pg0KPj4gUGxlYXNlIHJlbW92ZSB1bm5lZWRlZCAoKS4gU2FtZSBmb3IgcmVzdCBiZWxvdy4N Ck9LLg0KPj4NCj4+ID4gKwkJCQkJICAgIFhEU0lfQ01EX1RJTUVPVVRfVkFMKTsNCj4+DQo+PiBJ dCdkIGJlIG5pY2UgaWYgdGhlc2UgZGVsYXkgLyB0aW1lb3V0IHZhbHVlcyBhcmUgZGVzY3JpYmVk Li4NCkkgd2lsbCBhZGQgdGhlIGRlc2NyaXB0aW9uIG9yIGNvbW1lbnQNCj4+DQo+PiA+ICsJCWlm IChzdGF0dXMpIHsNCj4+ID4gKwkJCWRldl9lcnIoZHNpLT5kZXYsICJsb25nIGNtZCBmaWZvIG5v dCBlbXB0eSFcbiIpOw0KPj4gPiArCQkJcmV0dXJuIC1FVElNRURPVVQ7DQo+Pg0KPj4gSXNuJ3Qg dGhpcyBjaGVja2luZyBpZiB0aGUgY29udHJvbGxlciBpcyByZWFkeSBmb3IgbG9uZyBwYWNrZXQg dHJhbnNhY3Rpb24/DQo+PiBUaGVuIG1heWJlIC1FQlVTWSBpcyBiZXR0ZXIuIEZvciB0aW1lb3V0 LCB0aGUgJ3N0YXR1cycgY2FuIHByb3BhZ2F0ZS4NCj4+IFNhbWUgZm9yIGJlbG93Lg0KT0suDQo+ Pg0KPj4gPiArCQl9DQo+PiA+ICsJCWRhdGEwID0gdHhfYnVmWzBdIHwgKHR4X2J1ZlsxXSA8PCA4 KSB8ICh0eF9idWZbMl0gPDwgMTYpIHwNCj4+ID4gKwkJCSh0eF9idWZbM10gPDwgMjQpOw0KPj4g PiArCQlkYXRhMSA9IHR4X2J1Zls0XSB8ICh0eF9idWZbNV0gPDwgOCk7DQo+PiA+ICsJCWNtZDAg PSBtc2ctPnR5cGUgfCAoTUlQSV9EU0lfRENTX1JFQUQgPDwgOCk7DQo+PiA+ICsNCj4+ID4gKwkJ eGxueF9kc2lfd3JpdGVsKGRzaS0+aW9tZW0sIFhEU0lfREZSLCBkYXRhMCk7DQo+PiA+ICsJCXhs bnhfZHNpX3dyaXRlbChkc2ktPmlvbWVtLCBYRFNJX0RGUiwgZGF0YTEpOw0KPj4gPiArCQl4bG54 X2RzaV93cml0ZWwoZHNpLT5pb21lbSwgWERTSV9DTUQsIGNtZDApOw0KPj4gPiArCX0gZWxzZSB7 DQo+Pg0KPj4gSSdtIG5vdCBmYW1pbGlhciB3aXRoIERTSSB0cmFuc2FjdGlvbiBoYW5kbGluZywg YnV0IGlzIGl0IHNhZmUgdG8NCj4+IGFzc3VtZSBhbGwgb3RoZXIgdGhhbiBsb25nIHdyaXRlIGlz IHNob3J0IHBhY2tldCB3cml0ZSAocGFyYW0sIHdpdGhvdXQNCj5wYXJhbSk/DQpJIGNhbiBhZGQg Y2hlY2sgZm9yIHNob3J0IHBhY2tldC4NCj4+DQo+PiA+ICsJCWRhdGEwID0gdHhfYnVmWzBdOw0K Pj4NCj4+IFRoaXMgbGluZSBjYW4gYmUgcmVtb3ZlZC4NCk9LLg0KPj4NCj4+ID4gKwkJaWYgKG1z Zy0+dHlwZSA9PSBNSVBJX0RTSV9EQ1NfU0hPUlRfV1JJVEVfUEFSQU0pDQo+PiA+ICsJCQlkYXRh MCA9IE1JUElfRFNJX0RDU19TSE9SVF9XUklURV9QQVJBTSB8DQo+PiA+ICsJCQkJKHR4X2J1Zlsw XSA8PCA4KSB8ICh0eF9idWZbMV0gPDwgMTYpOw0KPj4gPiArCQllbHNlDQo+PiA+ICsJCQlkYXRh MCA9IE1JUElfRFNJX0RDU19TSE9SVF9XUklURSB8ICh0eF9idWZbMF0gPDwNCj44KTsNCj4+DQo+ PiBJJ2QgcHV0ICgpIGZvciB0aGlzIGlmIC0gZWxzZSBzdGF0bWVudHMsIGJ1dCBpdCBtYXkgYmUg anVzdCBtZS4NCj4+DQo+Pg0KPj4gVGhlbiwgdGhpcyBjYW4gbXZvZSB0byByaWdodCBiZWZvcmUg eGxueF9kc2lfd3JpdGVsKCkgYmVsb3cuDQo+Pg0KPj4gPiArDQo+PiA+ICsJCXN0YXR1cyA9IHJl YWRsX3BvbGxfdGltZW91dChkc2ktPmlvbWVtICsgWERTSV9TVFIsIHZhbCwNCj4+ID4gKwkJCQkJ ICAgICgodmFsICYgWERTSV9TVFJfUkRZX1NIUEtUKSA9PQ0KPj4gPiArCQkJCQkgICAgIFhEU0lf U1RSX1JEWV9TSFBLVCksIDEsDQo+PiA+ICsJCQkJCSAgICBYRFNJX0NNRF9USU1FT1VUX1ZBTCk7 DQo+PiA+ICsJCWlmIChzdGF0dXMpIHsNCj4+ID4gKwkJCWRldl9lcnIoZHNpLT5kZXYsICJzaG9y dCBjbWQgZmlmbyBub3QgZW1wdHlcbiIpOw0KPj4gPiArCQkJcmV0dXJuIC1FVElNRURPVVQ7DQo+ PiA+ICsJCX0NCj4+ID4gKwkJeGxueF9kc2lfd3JpdGVsKGRzaS0+aW9tZW0sIFhEU0lfQ01ELCBk YXRhMCk7DQo+PiA+ICsJfQ0KPj4gPiArDQo+PiA+ICsJc3RhdHVzID0gcmVhZGxfcG9sbF90aW1l b3V0KGRzaS0+aW9tZW0gKyBYRFNJX1NUUiwgdmFsLA0KPj4gPiArCQkJCSAgICAoISh2YWwgJiBY RFNJX1NUUl9DTURfRVhFX1BHUykpLCAxLA0KPj4gPiArCQkJCSAgICBYRFNJX0NNRF9USU1FT1VU X1ZBTCk7DQo+PiA+ICsJaWYgKHN0YXR1cykgew0KPj4gPiArCQlkZXZfZXJyKGRzaS0+ZGV2LCAi Y21kIHRpbWUgb3V0XG4iKTsNCj4+ID4gKwkJcmV0dXJuIC1FVElNRURPVVQ7DQo+PiA+ICsJfQ0K Pj4gPiArDQo+PiA+ICsJcmV0dXJuIG1zZy0+dHhfbGVuOw0KPj4gPiArfQ0KPj4gPiArDQo+PiA+ ICtzdGF0aWMgaW50IHhsbnhfZHNpX2hvc3RfYXR0YWNoKHN0cnVjdCBtaXBpX2RzaV9ob3N0ICpo b3N0LA0KPj4gPiArCQkJCXN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRldmljZSkgew0KPj4gPiAr CXUzMiBwYW5lbF9sYW5lczsNCj4+ID4gKwlzdHJ1Y3QgeGxueF9kc2kgKmRzaSA9IGhvc3RfdG9f ZHNpKGhvc3QpOw0KPj4gPiArDQo+PiA+ICsJcGFuZWxfbGFuZXMgPSBkZXZpY2UtPmxhbmVzOw0K Pj4NCj4+IEknZCBkbyB0aGlzIGFib3ZlLA0KPj4NCj4+IAl1MzIgcGFuZWxfbGFuZXMgPSBkZXZp Y2UtPmxhbmVzDQo+Pg0KPj4gPiArCWRzaS0+bW9kZV9mbGFncyA9IGRldmljZS0+bW9kZV9mbGFn czsNCj4+ID4gKwlkc2ktPnBhbmVsX25vZGUgPSBkZXZpY2UtPmRldi5vZl9ub2RlOw0KPj4gPiAr DQo+PiA+ICsJaWYgKHBhbmVsX2xhbmVzICE9IGRzaS0+bGFuZXMpIHsNCj4+ID4gKwkJZGV2X2Vy cihkc2ktPmRldiwgIk1pc21hdGNoIG9mIGxhbmVzLiBwYW5lbCA9ICVkLCBEU0kgPSAlZFxuIiwN Cj4+ID4gKwkJCXBhbmVsX2xhbmVzLCBkc2ktPmxhbmVzKTsNCj4+ID4gKwkJcmV0dXJuIC1FSU5W QUw7DQo+PiA+ICsJfQ0KPj4gPiArDQo+PiA+ICsJaWYgKGRldmljZS0+Zm9ybWF0ICE9IGRzaS0+ Zm9ybWF0KSB7DQo+PiA+ICsJCWRldl9lcnIoZHNpLT5kZXYsICJNaXNtYXRjaCBvZiBmb3JtYXQu IHBhbmVsID0gJWQsIERTSSA9DQo+JWRcbiIsDQo+PiA+ICsJCQlkZXZpY2UtPmZvcm1hdCwgZHNp LT5mb3JtYXQpOw0KPj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4+ID4gKwl9DQo+PiA+ICsNCj4+ ID4gKwlpZiAoZHNpLT5jb25uZWN0b3IuZGV2KQ0KPj4gPiArCQlkcm1faGVscGVyX2hwZF9pcnFf ZXZlbnQoZHNpLT5jb25uZWN0b3IuZGV2KTsNCj4+ID4gKw0KPj4gPiArCXJldHVybiAwOw0KPj4g PiArfQ0KPj4gPiArDQo+PiA+ICtzdGF0aWMgaW50IHhsbnhfZHNpX2hvc3RfZGV0YWNoKHN0cnVj dCBtaXBpX2RzaV9ob3N0ICpob3N0LA0KPj4gPiArCQkJCXN0cnVjdCBtaXBpX2RzaV9kZXZpY2Ug KmRldmljZSkgew0KPj4gPiArCXN0cnVjdCB4bG54X2RzaSAqZHNpID0gaG9zdF90b19kc2koaG9z dCk7DQo+PiA+ICsNCj4+ID4gKwlpZiAoZHNpLT5wYW5lbCkgew0KPj4gPiArCQlkcm1fcGFuZWxf ZGV0YWNoKGRzaS0+cGFuZWwpOw0KPj4gPiArCQlkc2ktPnBhbmVsID0gTlVMTDsNCj4+ID4gKwl9 DQo+PiA+ICsNCj4+ID4gKwlpZiAoZHNpLT5jb25uZWN0b3IuZGV2KQ0KPj4gPiArCQlkcm1faGVs cGVyX2hwZF9pcnFfZXZlbnQoZHNpLT5jb25uZWN0b3IuZGV2KTsNCj4+ID4gKw0KPj4gPiArCXJl dHVybiAwOw0KPj4gPiArfQ0KPj4gPiArDQo+PiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG1pcGlf ZHNpX2hvc3Rfb3BzIHhsbnhfZHNpX29wcyA9IHsNCj4+ID4gKwkuYXR0YWNoID0geGxueF9kc2lf aG9zdF9hdHRhY2gsDQo+PiA+ICsJLmRldGFjaCA9IHhsbnhfZHNpX2hvc3RfZGV0YWNoLA0KPj4g PiArCS50cmFuc2ZlciA9IHhsbnhfZHNpX2hvc3RfdHJhbnNmZXIsIH07DQo+PiA+ICsNCj4+ID4g K3N0YXRpYyBpbnQgeGxueF9kc2lfY29ubmVjdG9yX2RwbXMoc3RydWN0IGRybV9jb25uZWN0b3Ig KmNvbm5lY3RvciwNCj4+ID4gKwkJCQkgICBpbnQgbW9kZSkNCj4+ID4gK3sNCj4+ID4gKwlzdHJ1 Y3QgeGxueF9kc2kgKmRzaSA9IGNvbm5lY3Rvcl90b19kc2koY29ubmVjdG9yKTsNCj4+ID4gKwlp bnQgcmV0Ow0KPj4gPiArDQo+PiA+ICsJZGV2X2RiZyhkc2ktPmRldiwgImNvbm5lY3RvciBkcG1z IHN0YXRlOiAlZFxuIiwgbW9kZSk7DQo+PiA+ICsNCj4+ID4gKwlzd2l0Y2ggKG1vZGUpIHsNCj4+ ID4gKwljYXNlIERSTV9NT0RFX0RQTVNfT046DQo+PiA+ICsJCXJldCA9IGRybV9wYW5lbF9wcmVw YXJlKGRzaS0+cGFuZWwpOw0KPj4gPiArCQlpZiAocmV0IDwgMCkgew0KPj4gPiArCQkJZGV2X2Vy cihkc2ktPmRldiwgIkRSTSBwYW5lbCBub3QgZm91bmRcbiIpOw0KPj4gPiArCQkJcmV0dXJuIHJl dDsNCj4+ID4gKwkJfQ0KPj4gPiArDQo+PiA+ICsJCXJldCA9IGRybV9wYW5lbF9lbmFibGUoZHNp LT5wYW5lbCk7DQo+PiA+ICsJCWlmIChyZXQgPCAwKSB7DQo+PiA+ICsJCQlkcm1fcGFuZWxfdW5w cmVwYXJlKGRzaS0+cGFuZWwpOw0KPj4gPiArCQkJZGV2X2Vycihkc2ktPmRldiwgIkRSTSBwYW5l bCBub3QgZW5hYmxlZFxuIik7DQo+PiA+ICsJCQlyZXR1cm4gcmV0Ow0KPj4gPiArCQl9DQo+PiA+ ICsJCWJyZWFrOw0KPj4gPiArCWRlZmF1bHQ6DQo+PiA+ICsJCWRybV9wYW5lbF9kaXNhYmxlKGRz aS0+cGFuZWwpOw0KPj4gPiArCQlkcm1fcGFuZWxfdW5wcmVwYXJlKGRzaS0+cGFuZWwpOw0KPj4g PiArCQlicmVhazsNCj4+ID4gKwl9DQo+PiA+ICsNCj4+ID4gKwlyZXR1cm4gZHJtX2hlbHBlcl9j b25uZWN0b3JfZHBtcyhjb25uZWN0b3IsIG1vZGUpOyB9DQo+PiA+ICsNCj4+ID4gK3N0YXRpYyBl bnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzDQo+PiA+ICt4bG54X2RzaV9kZXRlY3Qoc3RydWN0IGRy bV9jb25uZWN0b3IgKmNvbm5lY3RvciwgYm9vbCBmb3JjZSkgew0KPj4gPiArCXN0cnVjdCB4bG54 X2RzaSAqZHNpID0gY29ubmVjdG9yX3RvX2RzaShjb25uZWN0b3IpOw0KPj4gPiArDQo+PiA+ICsJ aWYgKCFkc2ktPnBhbmVsKSB7DQo+PiA+ICsJCWRzaS0+cGFuZWwgPSBvZl9kcm1fZmluZF9wYW5l bChkc2ktPnBhbmVsX25vZGUpOw0KPj4gPiArCQlpZiAoZHNpLT5wYW5lbCkgew0KPj4gPiArCQkJ ZHJtX3BhbmVsX2F0dGFjaChkc2ktPnBhbmVsLCAmZHNpLT5jb25uZWN0b3IpOw0KPj4NCj4+IEFi b3ZlIGFyZSBxdWl0ZSBzdGF0aWMsIHNvIGNhbid0IGl0IGJlIGRvbmUgaW4gaG9zdCBhdHRhY2g/ IE9yIGRvIHlvdQ0KPj4gc2VlIG1vcmUgZHluYW1pYyB1c2UgY2FzZXM/DQpJIHdpbGwgY2hlY2sg dGhlIHBvc3NpYmlsaXR5Lg0KPj4NCj4+ID4gKwkJCWlmIChkc2ktPmNtZG1vZGUpIHsNCj4+ID4g KwkJCQl4bG54X2RzaV93cml0ZWwoZHNpLT5pb21lbSwgWERTSV9DQ1IsDQo+PiA+ICsJCQkJCQlY RFNJX0NDUl9DTURNT0RFIHwNCj4+ID4gKwkJCQkJCVhEU0lfQ0NSX0NPUkVFTkIpOw0KPj4gPiAr CQkJCWRybV9wYW5lbF9wcmVwYXJlKGRzaS0+cGFuZWwpOw0KPj4NCj4+IEp1c3QgdG8gY29uZmly bSwgaXMgdGhpcyBub3QgbmVlZGVkIGZvciBub24tY29tbWFuZCBtb2RlPyBBbmQgaG93IGlzDQo+ PiB0aGlzIGFsaWduZWQgd2l0aCBzYW1lIGNhbGwgaW4gZHBtcygpLCBtZWFuaW5nIHRoZSBwYW5l bCB3aWxsIGJlDQo+PiBwcmVwYXJlZCB0d2ljZSBpbiBjb21tYW5kIG1vZGUuDQpUaGVyZSBpcyBh IEdVSSBvcHRpb24gaW4gSVAgZGVzaWduIHRvIHNlbGVjdCBjb21tYW5kIG1vZGUgc3VwcG9ydC4N Ckkgd2lsbCBjaGVjayBhbmQgZW5zdXJlIHBhbmVsIHByZXBhcmUgd29uJ3QgaGFwcGVuIHR3aWNl Lg0KPj4NCj4+ID4gKwkJCQl4bG54X2RzaV93cml0ZWwoZHNpLT5pb21lbSwgWERTSV9DQ1IsIDAp Ow0KPj4gPiArCQkJfQ0KPj4gPiArCQl9DQo+PiA+ICsJfSBlbHNlIGlmICghZHNpLT5wYW5lbF9u b2RlKSB7DQo+PiA+ICsJCXhsbnhfZHNpX2Nvbm5lY3Rvcl9kcG1zKGNvbm5lY3RvciwgRFJNX01P REVfRFBNU19PRkYpOw0KPj4gPiArCQlkcm1fcGFuZWxfZGV0YWNoKGRzaS0+cGFuZWwpOw0KPj4g PiArCQlkc2ktPnBhbmVsID0gTlVMTDsNCj4+ID4gKwl9DQo+PiA+ICsNCj4+ID4gKwlpZiAoZHNp LT5wYW5lbCkNCj4+ID4gKwkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOw0KPj4g PiArDQo+PiA+ICsJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOyB9DQo+PiA+ ICsNCj4+ID4gK3N0YXRpYyB2b2lkIHhsbnhfZHNpX2Nvbm5lY3Rvcl9kZXN0cm95KHN0cnVjdCBk cm1fY29ubmVjdG9yDQo+PiA+ICsqY29ubmVjdG9yKSB7DQo+PiA+ICsJZHJtX2Nvbm5lY3Rvcl91 bnJlZ2lzdGVyKGNvbm5lY3Rvcik7DQo+PiA+ICsJZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwKGNvbm5l Y3Rvcik7DQo+PiA+ICsJY29ubmVjdG9yLT5kZXYgPSBOVUxMOw0KPj4gPiArfQ0KPj4gPiArDQo+ PiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfZnVuY3MgeGxueF9kc2lfY29u bmVjdG9yX2Z1bmNzID0gew0KPj4gPiArCS5kZXRlY3QgPSB4bG54X2RzaV9kZXRlY3QsDQo+PiA+ ICsJLmZpbGxfbW9kZXMgPSBkcm1faGVscGVyX3Byb2JlX3NpbmdsZV9jb25uZWN0b3JfbW9kZXMs DQo+PiA+ICsJLmRlc3Ryb3kgPSB4bG54X2RzaV9jb25uZWN0b3JfZGVzdHJveSwNCj4+ID4gKwku cmVzZXQJCQk9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9yZXNldCwNCj4+DQo+PiBUaGlz IGJldHRlciBpbmRlbnQgbW9yZSBjb25zaXN0ZW50bHkuIFBsZWFzZSBkbyBpdCB0aHJvdWdoIHRo ZSBlbnRpcmUgZmlsZS4NCj4+DQo+PiA+ICsJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUJPQ0KPmRy bV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUsDQo+PiA+ICsJLmF0b21p Y19kZXN0cm95X3N0YXRlCT0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rlc3Ryb3lfc3Rh dGUsDQo+PiA+ICsJLmRwbXMgPSB4bG54X2RzaV9jb25uZWN0b3JfZHBtcywNCj4+ID4gK307DQo+ PiA+ICsNCj4+ID4gK3N0YXRpYyBpbnQgeGxueF9kc2lfZ2V0X21vZGVzKHN0cnVjdCBkcm1fY29u bmVjdG9yICpjb25uZWN0b3IpIHsNCj4+ID4gKwlzdHJ1Y3QgeGxueF9kc2kgKmRzaSA9IGNvbm5l Y3Rvcl90b19kc2koY29ubmVjdG9yKTsNCj4+ID4gKw0KPj4gPiArCWlmIChkc2ktPnBhbmVsKQ0K Pj4gPiArCQlyZXR1cm4gZHJtX3BhbmVsX2dldF9tb2Rlcyhkc2ktPnBhbmVsLCBjb25uZWN0b3Ip Ow0KPj4gPiArDQo+PiA+ICsJcmV0dXJuIDA7DQo+PiA+ICt9DQo+PiA+ICsNCj4+ID4gK3N0YXRp YyBzdHJ1Y3QgZHJtX2VuY29kZXIgKg0KPj4gPiAreGxueF9kc2lfYmVzdF9lbmNvZGVyKHN0cnVj dCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpIHsNCj4+ID4gKwlyZXR1cm4gJihjb25uZWN0b3Jf dG9fZHNpKGNvbm5lY3RvciktPmVuY29kZXIpOw0KPj4gPiArfQ0KPj4gPiArDQo+PiA+ICtzdGF0 aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzDQo+PiA+ICt4bG54X2Rz aV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzID0gew0KPj4gPiArCS5nZXRfbW9kZXMgPSB4bG54X2Rz aV9nZXRfbW9kZXMsDQo+PiA+ICsJLmJlc3RfZW5jb2RlciA9IHhsbnhfZHNpX2Jlc3RfZW5jb2Rl ciwgfTsNCj4+ID4gKw0KPj4gPiArc3RhdGljIGludCB4bG54X2RzaV9jcmVhdGVfY29ubmVjdG9y KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rlcikgew0KPj4gPiArCXN0cnVjdCB4bG54X2RzaSAq ZHNpID0gZW5jb2Rlcl90b19kc2koZW5jb2Rlcik7DQo+PiA+ICsJc3RydWN0IGRybV9jb25uZWN0 b3IgKmNvbm5lY3RvciA9ICZkc2ktPmNvbm5lY3RvcjsNCj4+ID4gKwlzdHJ1Y3QgZHJtX2Rldmlj ZSAqZHJtID0gZW5jb2Rlci0+ZGV2Ow0KPj4gPiArCWludCByZXQ7DQo+PiA+ICsNCj4+ID4gKwlj b25uZWN0b3ItPnBvbGxlZCA9IERSTV9DT05ORUNUT1JfUE9MTF9IUEQ7DQo+PiA+ICsNCj4+ID4g KwlyZXQgPSBkcm1fY29ubmVjdG9yX2luaXQoZW5jb2Rlci0+ZGV2LCBjb25uZWN0b3IsDQo+PiA+ ICsJCQkJICZ4bG54X2RzaV9jb25uZWN0b3JfZnVuY3MsDQo+PiA+ICsJCQkJIERSTV9NT0RFX0NP Tk5FQ1RPUl9EU0kpOw0KPj4gPiArCWlmIChyZXQpIHsNCj4+ID4gKwkJZGV2X2Vycihkc2ktPmRl diwgIkZhaWxlZCB0byBpbml0aWFsaXplIGNvbm5lY3RvciB3aXRoIGRybVxuIik7DQo+PiA+ICsJ CXJldHVybiByZXQ7DQo+PiA+ICsJfQ0KPj4gPiArDQo+PiA+ICsJZHJtX2Nvbm5lY3Rvcl9oZWxw ZXJfYWRkKGNvbm5lY3RvciwNCj4meGxueF9kc2lfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7DQo+ PiA+ICsJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2Rlcihjb25uZWN0b3IsIGVuY29kZXIpOw0K Pj4gPiArCWlmICghZHJtLT5yZWdpc3RlcmVkKQ0KPj4gPiArCQlyZXR1cm4gMDsNCj4+ID4gKw0K Pj4gPiArCWRybV9jb25uZWN0b3JfcmVnaXN0ZXIoY29ubmVjdG9yKTsNCj4+ID4gKw0KPj4gPiAr CXJldHVybiAwOw0KPj4gPiArfQ0KPj4gPiArDQo+PiA+ICsvKioNCj4+ID4gKyAqIHhsbnhfZHNp X2F0b21pY19tb2RlX3NldCAtICBkZXJpdmUgdGhlIERTSSB0aW1pbmcgcGFyYW1ldGVycw0KPj4g PiArICoNCj4+ID4gKyAqIEBlbmNvZGVyOiBwb2ludGVyIHRvIFhpbGlueCBEUk0gZW5jb2Rlcg0K Pj4gPiArICogQGNydGNfc3RhdGU6IFBvaW50ZXIgdG8gZHJtIGNvcmUgY3J0YyBzdGF0ZQ0KPj4g PiArICogQGNvbm5lY3Rvcl9zdGF0ZTogRFNJIGNvbm5lY3RvciBkcm0gc3RhdGUNCj4+ID4gKyAq DQo+PiA+ICsgKiBUaGlzIGZ1bmN0aW9uIGRlcml2ZXMgdGhlIERTSSBJUCB0aW1pbmcgcGFyYW1l dGVycyBmcm9tIHRoZQ0KPj4gPiArdGltaW5nDQo+PiA+ICsgKiB2YWx1ZXMgZ2l2ZW4gaW4gdGhl IGF0dGFjaGVkIHBhbmVsIGRyaXZlci4NCj4+ID4gKyAqLw0KPj4gPiArc3RhdGljIHZvaWQNCj4+ ID4gK3hsbnhfZHNpX2F0b21pY19tb2RlX3NldChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIs DQo+PiA+ICsJCQkgc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLA0KPj4gPiArCQkJ CSBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubmVjdG9yX3N0YXRlKQ0KPnsNCj4+ID4g KwlzdHJ1Y3QgeGxueF9kc2kgKmRzaSA9IGVuY29kZXJfdG9fZHNpKGVuY29kZXIpOw0KPj4gPiAr CXN0cnVjdCB2aWRlb21vZGUgKnZtID0gJmRzaS0+dm07DQo+PiA+ICsJc3RydWN0IGRybV9kaXNw bGF5X21vZGUgKm0gPSAmY3J0Y19zdGF0ZS0+YWRqdXN0ZWRfbW9kZTsNCj4+ID4gKw0KPj4gPiAr CXZtLT5oYWN0aXZlID0gbS0+aGRpc3BsYXk7DQo+PiA+ICsJdm0tPnZhY3RpdmUgPSBtLT52ZGlz cGxheTsNCj4+ID4gKwl2bS0+dmZyb250X3BvcmNoID0gbS0+dnN5bmNfc3RhcnQgLSBtLT52ZGlz cGxheTsNCj4+ID4gKwl2bS0+dmJhY2tfcG9yY2ggPSBtLT52dG90YWwgLSBtLT52c3luY19lbmQ7 DQo+PiA+ICsJdm0tPnZzeW5jX2xlbiA9IG0tPnZzeW5jX2VuZCAtIG0tPnZzeW5jX3N0YXJ0Ow0K Pj4gPiArCXZtLT5oZnJvbnRfcG9yY2ggPSBtLT5oc3luY19zdGFydCAtIG0tPmhkaXNwbGF5Ow0K Pj4gPiArCXZtLT5oYmFja19wb3JjaCA9IG0tPmh0b3RhbCAtIG0tPmhzeW5jX2VuZDsNCj4+ID4g Kwl2bS0+aHN5bmNfbGVuID0gbS0+aHN5bmNfZW5kIC0gbS0+aHN5bmNfc3RhcnQ7DQo+PiA+ICsJ eGxueF9kc2lfc2V0X2Rpc3BsYXlfbW9kZShkc2kpOw0KPj4NCj4+IEFzIGNvbW1lbnRlZCBhYm92 ZSwgdGhpcyBkb2Vzbid0IGhhdmUgdG8gYmUgcmUtZGlyZWN0ZWQgdGhyb3VnaCB2aWRlb21vZGUu DQo+PiBUaGVuIHRoZSBmdW5jdGlvbiBjYW4gYmUgaW5saW5lZCBoZXJlLg0KT0suDQo+Pg0KPj4g PiArfQ0KPj4gPiArDQo+PiA+ICtzdGF0aWMgdm9pZCB4bG54X2RzaV9kaXNhYmxlKHN0cnVjdCBk cm1fZW5jb2RlciAqZW5jb2Rlcikgew0KPj4gPiArCXN0cnVjdCB4bG54X2RzaSAqZHNpID0gZW5j b2Rlcl90b19kc2koZW5jb2Rlcik7DQo+PiA+ICsNCj4+ID4gKwl4bG54X2RzaV9zZXRfZGlzcGxh eV9kaXNhYmxlKGRzaSk7DQo+Pg0KPj4gCXhsbnhfZHNpX3NldF9kaXNwbGF5X2Rpc2FibGUoZW5j b2Rlcl90b19kc2koZW5jb2RlcikpOw0KPj4NCj4+IE1heWJlIGV2ZW4gdGhpcyB3cmFwcGVyIGNh biBiZSByZW1vdmVkPw0KT0suDQo+Pg0KPj4gPiArfQ0KPj4gPiArDQo+PiA+ICtzdGF0aWMgdm9p ZCB4bG54X2RzaV9lbmFibGUoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKSB7DQo+PiA+ICsJ c3RydWN0IHhsbnhfZHNpICpkc2kgPSBlbmNvZGVyX3RvX2RzaShlbmNvZGVyKTsNCj4+ID4gKw0K Pj4gPiArCXhsbnhfZHNpX3NldF9kaXNwbGF5X2VuYWJsZShkc2kpOw0KPj4NCj4+IERpdHRvLg0K Pj4NCj4+ID4gK30NCj4+ID4gKw0KPj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZW5jb2Rl cl9oZWxwZXJfZnVuY3MNCj4+ID4gK3hsbnhfZHNpX2VuY29kZXJfaGVscGVyX2Z1bmNzID0gew0K Pj4gPiArCS5hdG9taWNfbW9kZV9zZXQgPSB4bG54X2RzaV9hdG9taWNfbW9kZV9zZXQsDQo+PiA+ ICsJLmVuYWJsZSA9IHhsbnhfZHNpX2VuYWJsZSwNCj4+ID4gKwkuZGlzYWJsZSA9IHhsbnhfZHNp X2Rpc2FibGUsDQo+PiA+ICt9Ow0KPj4gPiArDQo+PiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRy bV9lbmNvZGVyX2Z1bmNzIHhsbnhfZHNpX2VuY29kZXJfZnVuY3MgPSB7DQo+PiA+ICsJLmRlc3Ry b3kgPSBkcm1fZW5jb2Rlcl9jbGVhbnVwLA0KPj4gPiArfTsNCj4+ID4gKw0KPj4gPiArc3RhdGlj IGludCB4bG54X2RzaV9wYXJzZV9kdChzdHJ1Y3QgeGxueF9kc2kgKmRzaSkgew0KPj4gPiArCXN0 cnVjdCBkZXZpY2UgKmRldiA9IGRzaS0+ZGV2Ow0KPj4gPiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAq bm9kZSA9IGRldi0+b2Zfbm9kZTsNCj4+ID4gKwlpbnQgcmV0Ow0KPj4gPiArCXUzMiBkYXRhdHlw ZTsNCj4+ID4gKwlzdGF0aWMgY29uc3QgaW50IHhkc2lfbXVsX2ZhY3RbWERTSV9OVU1fREFUQV9U XSA9IHszMDAsIDIyNSwgMjI1LA0KPj4gPiArMjAwfTsNCj4+ID4gKw0KPj4gPiArCWRzaS0+ZHBo eV9jbGtfMjAwTSA9IGRldm1fY2xrX2dldChkZXYsICJkcGh5X2Nsa18yMDBNIik7DQo+PiA+ICsJ aWYgKElTX0VSUihkc2ktPmRwaHlfY2xrXzIwME0pKSB7DQo+PiA+ICsJCXJldCA9IFBUUl9FUlIo ZHNpLT5kcGh5X2Nsa18yMDBNKTsNCj4+ID4gKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0 IGRwaHlfY2xrXzIwME0gJWRcbiIsIHJldCk7DQo+PiA+ICsJCXJldHVybiByZXQ7DQo+PiA+ICsJ fQ0KPj4gPiArDQo+PiA+ICsJZHNpLT52aWRlb19hY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgInNf YXhpc19hY2xrIik7DQo+PiA+ICsJaWYgKElTX0VSUihkc2ktPnZpZGVvX2FjbGspKSB7DQo+PiA+ ICsJCXJldCA9IFBUUl9FUlIoZHNpLT52aWRlb19hY2xrKTsNCj4+ID4gKwkJZGV2X2VycihkZXYs ICJmYWlsZWQgdG8gZ2V0IHZpZGVvX2NsayAlZFxuIiwgcmV0KTsNCj4+ID4gKwkJcmV0dXJuIHJl dDsNCj4+ID4gKwl9DQo+PiA+ICsNCj4+ID4gKwlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihu b2RlLCAieGxueCxkc2ktbnVtLWxhbmVzIiwgJmRzaS0+bGFuZXMpOw0KPj4gPiArCWlmIChyZXQg PCAwKSB7DQo+PiA+ICsJCWRldl9lcnIoZHNpLT5kZXYsICJtaXNzaW5nIHhsbngsZHNpLW51bS1s YW5lcyBwcm9wZXJ0eVxuIik7DQo+PiA+ICsJCXJldHVybiByZXQ7DQo+PiA+ICsJfQ0KPj4gPiAr CWlmIChkc2ktPmxhbmVzID4gNCB8fCBkc2ktPmxhbmVzIDwgMSkgew0KPj4gPiArCQlkZXZfZXJy KGRzaS0+ZGV2LCAiJWQgbGFuZXMgOiBpbnZhbGlkIGxhbmVzXG4iLCBkc2ktPmxhbmVzKTsNCj4+ ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+PiA+ICsJfQ0KPj4NCj4+IE5pdC4gQW4gZW1wdHkgbGlu ZSBoZXJlIHdvdWxkIGJlIGhlbHBmdWwgZm9yIHJlYWRhYmlsaXR5Lg0KT0suDQo+Pg0KPj4gPiAr CXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5vZGUsICJ4bG54LGRzaS1kYXRhLXR5cGUiLCAm ZGF0YXR5cGUpOw0KPj4gPiArCWlmIChyZXQgPCAwKSB7DQo+PiA+ICsJCWRldl9lcnIoZHNpLT5k ZXYsICJtaXNzaW5nIHhsbngsZHNpLWRhdGEtdHlwZSBwcm9wZXJ0eVxuIik7DQo+PiA+ICsJCXJl dHVybiByZXQ7DQo+PiA+ICsJfQ0KPj4gPiArCWRzaS0+Zm9ybWF0ID0gZGF0YXR5cGU7DQo+PiA+ ICsJaWYgKGRhdGF0eXBlID4gTUlQSV9EU0lfRk1UX1JHQjU2NSkgew0KPj4gPiArCQlkZXZfZXJy KGRzaS0+ZGV2LCAiSW52YWxpZCB4bG54LGRzaS1kYXRhLXR5cGUgc3RyaW5nXG4iKTsNCj4+ID4g KwkJcmV0dXJuIC1FSU5WQUw7DQo+PiA+ICsJfQ0KPj4gPiArDQo+PiA+ICsJLyoNCj4+ID4gKwkg KiBtdWx0aXBsaWNhdGlvbiBmYWN0b3IgdXNlZCBmb3IgSEFDVCwgYmFzZWQgb24gZGF0YSB0eXBl Lg0KPj4gPiArCSAqDQo+PiA+ICsJICogZS5nLiBmb3IgUkdCNjY2X0wgZGF0YXR5cGUgYW5kIDE5 MjB4MTA4MCByZXNvbHV0aW9uLA0KPj4gPiArCSAqIHRoZSBIYWN0IChXQykgd291bGQgYmUgYXMg Zm9sbG93cyAtDQo+PiA+ICsJICogMTkyMCBwaXhlbHMgKiAxOCBiaXRzIHBlciBwaXhlbCAvIDgg Yml0cyBwZXIgYnl0ZQ0KPj4gPiArCSAqID0gMTkyMCBwaXhlbHMgKiAyLjI1IGJ5dGVzIHBlciBw aXhlbCA9IDQzMjAgYnl0ZXMuDQo+PiA+ICsJICoNCj4+ID4gKwkgKiBEYXRhIFR5cGUgLSBNdWx0 aXBsaWNhdGlvbiBmYWN0b3INCj4+ID4gKwkgKiBSR0I4ODggICAgLSAzDQo+PiA+ICsJICogUkdC NjY2X0wgIC0gMi4yNQ0KPj4gPiArLQkgKiBSR0I2NjZfUCAgLSAyLjI1DQo+PiA+ICsJICogUkdC NTY1ICAgIC0gMg0KPj4gPiArCSAqDQo+PiA+ICsJICogU2luY2UgdGhlIG11bHRpcGxpY2F0aW9u IGZhY3RvciBtYXliZSBhIGZsb2F0aW5nIG51bWJlciwNCj4+ID4gKwkgKiBhIDEwMHggbXVsdGlw bGljYXRpb24gZmFjdG9yIGlzIHVzZWQuDQo+PiA+ICsJICovDQo+PiA+ICsJZHNpLT5tdWxfZmFj dG9yID0geGRzaV9tdWxfZmFjdFtkYXRhdHlwZV07DQo+PiA+ICsNCj4+ID4gKwlkc2ktPmNtZG1v ZGUgPSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wobm9kZSwgInhsbngsZHNpLWNtZC1tb2RlIik7DQo+ PiA+ICsNCj4+ID4gKwlkZXZfZGJnKGRzaS0+ZGV2LCAiRFNJIGNvbnRyb2xsZXIgbnVtIGxhbmVz ID0gJWQiLCBkc2ktPmxhbmVzKTsNCj4+ID4gKwlkZXZfZGJnKGRzaS0+ZGV2LCAiRFNJIGNvbnRy b2xsZXIgZGF0YXR5cGUgPSAlZFxuIiwgZGF0YXR5cGUpOw0KPj4gPiArCWRldl9kYmcoZHNpLT5k ZXYsICJEU0kgY29udHJvbGxlciBjbWQgbW9kZSA9ICVkXG4iLCBkc2ktPmNtZG1vZGUpOw0KPj4g PiArDQo+PiA+ICsJcmV0dXJuIDA7DQo+PiA+ICt9DQo+PiA+ICsNCj4+ID4gK3N0YXRpYyBpbnQg eGxueF9kc2lfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3RlciwN Cj4+ID4gKwkJCSB2b2lkICpkYXRhKQ0KPj4gPiArew0KPj4gPiArCXN0cnVjdCB4bG54X2RzaSAq ZHNpID0gZGV2X2dldF9kcnZkYXRhKGRldik7DQo+PiA+ICsJc3RydWN0IGRybV9lbmNvZGVyICpl bmNvZGVyID0gJmRzaS0+ZW5jb2RlcjsNCj4+ID4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2Rl diA9IGRhdGE7DQo+PiA+ICsJaW50IHJldDsNCj4+ID4gKw0KPj4gPiArCWRybV9lbmNvZGVyX2lu aXQoZHJtX2RldiwgZW5jb2RlciwgJnhsbnhfZHNpX2VuY29kZXJfZnVuY3MsDQo+PiA+ICsJCQkg RFJNX01PREVfRU5DT0RFUl9EU0ksIE5VTEwpOw0KPj4gPiArCWRybV9lbmNvZGVyX2hlbHBlcl9h ZGQoZW5jb2RlciwgJnhsbnhfZHNpX2VuY29kZXJfaGVscGVyX2Z1bmNzKTsNCj4+ID4gKw0KPj4g PiArCWVuY29kZXItPnBvc3NpYmxlX2NydGNzID0gMTsNCj4+ID4gKw0KPj4gPiArCXJldCA9IHhs bnhfZHNpX2NyZWF0ZV9jb25uZWN0b3IoZW5jb2Rlcik7DQo+PiA+ICsJaWYgKHJldCkgew0KPj4g PiArCQlkZXZfZXJyKGRzaS0+ZGV2LCAiZmFpbCBjcmVhdGluZyBjb25uZWN0b3IsIHJldCA9ICVk XG4iLCByZXQpOw0KPj4gPiArCQlkcm1fZW5jb2Rlcl9jbGVhbnVwKGVuY29kZXIpOw0KPj4gPiAr CQlyZXR1cm4gcmV0Ow0KPj4gPiArCX0NCj4+ID4gKw0KPj4gPiArCXJldCA9IG1pcGlfZHNpX2hv c3RfcmVnaXN0ZXIoJmRzaS0+ZHNpX2hvc3QpOw0KPj4gPiArCWlmIChyZXQgPCAwKSB7DQo+Pg0K Pj4gSnVzdCBuaXQuIGlmIChyZXQpIHdvdWxkIGRvLg0KPj4NCj4+ID4gKwkJZGV2X2Vycihkc2kt PmRldiwgImZhaWxlZCB0byByZWdpc3RlciBEU0kgaG9zdDogJWRcbiIsIHJldCk7DQo+PiA+ICsJ CXhsbnhfZHNpX2Nvbm5lY3Rvcl9kZXN0cm95KCZkc2ktPmNvbm5lY3Rvcik7DQo+PiA+ICsJCWRy bV9lbmNvZGVyX2NsZWFudXAoZW5jb2Rlcik7DQo+PiA+ICsJCXJldHVybiByZXQ7DQo+PiA+ICsJ fQ0KPj4gPiArDQo+PiA+ICsJcmV0dXJuIDA7DQo+PiA+ICt9DQo+PiA+ICsNCj4+ID4gK3N0YXRp YyB2b2lkIHhsbnhfZHNpX3VuYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2Ug Km1hc3RlciwNCj4+ID4gKwkJCSAgICB2b2lkICpkYXRhKQ0KPj4gPiArew0KPj4gPiArCXN0cnVj dCB4bG54X2RzaSAqZHNpID0gZGV2X2dldF9kcnZkYXRhKGRldik7DQo+PiA+ICsNCj4+ID4gKwl4 bG54X2RzaV9kaXNhYmxlKCZkc2ktPmVuY29kZXIpOw0KPj4gPiArCW1pcGlfZHNpX2hvc3RfdW5y ZWdpc3RlcigmZHNpLT5kc2lfaG9zdCk7DQo+PiA+ICt9DQo+PiA+ICsNCj4+ID4gK3N0YXRpYyBj b25zdCBzdHJ1Y3QgY29tcG9uZW50X29wcyB4bG54X2RzaV9jb21wb25lbnRfb3BzID0gew0KPj4g PiArCS5iaW5kCT0geGxueF9kc2lfYmluZCwNCj4+ID4gKwkudW5iaW5kCT0geGxueF9kc2lfdW5i aW5kLA0KPj4gPiArfTsNCj4+ID4gKw0KPj4gPiArc3RhdGljIGludCB4bG54X2RzaV9wcm9iZShz dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KSB7DQo+PiA+ICsJc3RydWN0IGRldmljZSAqZGV2 ID0gJnBkZXYtPmRldjsNCj4+ID4gKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsNCj4+ID4gKwlzdHJ1 Y3QgeGxueF9kc2kgKmRzaTsNCj4+ID4gKwlpbnQgcmV0Ow0KPj4gPiArCXVuc2lnbmVkIGxvbmcg cmF0ZTsNCj4+ID4gKw0KPj4gPiArCWRzaSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqZHNp KSwgR0ZQX0tFUk5FTCk7DQo+PiA+ICsJaWYgKCFkc2kpDQo+PiA+ICsJCXJldHVybiAtRU5PTUVN Ow0KPj4gPiArDQo+PiA+ICsJZHNpLT5kc2lfaG9zdC5vcHMgPSAmeGxueF9kc2lfb3BzOw0KPj4g PiArCWRzaS0+ZHNpX2hvc3QuZGV2ID0gZGV2Ow0KPj4gPiArCWRzaS0+ZGV2ID0gZGV2Ow0KPj4g PiArDQo+PiA+ICsJcmV0ID0geGxueF9kc2lfcGFyc2VfZHQoZHNpKTsNCj4+ID4gKwlpZiAocmV0 KQ0KPj4gPiArCQlyZXR1cm4gcmV0Ow0KPj4gPiArDQo+PiA+ICsJcmVzID0gcGxhdGZvcm1fZ2V0 X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsNCj4+ID4gKwlkc2ktPmlvbWVtID0g ZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVzKTsNCj4+ID4gKwlpZiAoSVNfRVJSKGRzaS0+ aW9tZW0pKSB7DQo+PiA+ICsJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJlbWFwIGlvIHJlZ2lv blxuIik7DQo+PiA+ICsJCXJldHVybiBQVFJfRVJSKGRzaS0+aW9tZW0pOw0KPj4gPiArCX0NCj4+ ID4gKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkc2kpOw0KPj4gPiArDQo+PiA+ICsJcmV0 ID0gY2xrX3NldF9yYXRlKGRzaS0+ZHBoeV9jbGtfMjAwTSwgWERTSV9EUEhZX0NMS19SRVEpOw0K Pj4gPiArCWlmIChyZXQpIHsNCj4+ID4gKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gc2V0IGRw aHkgY2xrIHJhdGUgJWRcbiIsIHJldCk7DQo+PiA+ICsJCXJldHVybiByZXQ7DQo+PiA+ICsJfQ0K Pj4gPiArDQo+PiA+ICsJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGRzaS0+ZHBoeV9jbGtfMjAw TSk7DQo+PiA+ICsJaWYgKHJldCkgew0KPj4gPiArCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBl bmFibGUgZHBoeSBjbGsgJWRcbiIsIHJldCk7DQo+PiA+ICsJCXJldHVybiByZXQ7DQo+PiA+ICsJ fQ0KPj4gPiArDQo+PiA+ICsJcmF0ZSA9IGNsa19nZXRfcmF0ZShkc2ktPmRwaHlfY2xrXzIwME0p Ow0KPj4gPiArCWlmIChyYXRlIDwgWERTSV9EUEhZX0NMS19NSU4gJiYgcmF0ZSA+IFhEU0lfRFBI WV9DTEtfTUFYKSB7DQo+Pg0KPj4gQSBicmllZiBjb21tZW50IGZvciB0aGlzIGxpbmUgd29sZCBi ZSBoZWxwZnVsLg0KT0suIEkgd2lsbCBhZGQgY29tbWVudC4NCj4+DQo+PiA+ICsJCWRldl9lcnIo ZGV2LCAiRXJyb3IgRFBIWSBjbG9jayA9ICVsdVxuIiwgcmF0ZSk7DQo+PiA+ICsJCXJldCA9IC1F SU5WQUw7DQo+PiA+ICsJCWdvdG8gZXJyX2Rpc2FibGVfZHBoeV9jbGs7DQo+PiA+ICsJfQ0KPj4g PiArDQo+PiA+ICsJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGRzaS0+dmlkZW9fYWNsayk7DQo+ PiA+ICsJaWYgKHJldCkgew0KPj4gPiArCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBlbmFibGUg dmlkZW8gY2xrICVkXG4iLCByZXQpOw0KPj4gPiArCQlnb3RvIGVycl9kaXNhYmxlX2RwaHlfY2xr Ow0KPj4gPiArCX0NCj4+ID4gKw0KPj4gPiArCXJldCA9IGNvbXBvbmVudF9hZGQoZGV2LCAmeGxu eF9kc2lfY29tcG9uZW50X29wcyk7DQo+DQo+VGhlIGRyaXZlciBzaG91bGQgZXhwb3NlIHRoZSBE U0ktVFggYXMgYSBkcm1fYnJpZGdlIGluc3RlYWQgb2YgdXNpbmcgdGhlDQo+Y29tcG9uZW50IGZy YW1ld29yay4gWW91IHNob3VsZG4ndCByZWdpc3RlciBhIGRybV9lbmNvZGVyLCBhbmQgSSBkb24n dCB0aGluaw0KPnlvdSBzaG91bGQgcmVnaXN0ZXIgYSBkcm1fY29ubmVjdG9yIGVpdGhlci4gT25s eSBicmlkZ2Ugb3BlcmF0aW9ucyBzaG91bGQgYmUNCj5leHBvc2VkLCBhbmQgdGhlIGRybV9icmlk Z2UgLmF0dGFjaCgpIG9wZXJhdGlvbiBzaG91bGQgcmV0dXJuIGFuIGVycm9yIHdoZW4NCj5EUk1f QlJJREdFX0FUVEFDSF9OT19DT05ORUNUT1IgaXMgbm90IHNldC4gVGhlIHRvcC1sZXZlbCBkcml2 ZXIgdXNpbmcNCj50aGlzIGJyaWRnZSBzaG91bGQgY3JlYXRlIHRoZSBkcm1fZW5jb2RlciBhbmQg ZHJtX2Nvbm5lY3RvciwgbW9zdCBsaWtlbHkgdXNpbmcNCj5kcm1fYnJpZGdlX2Nvbm5lY3Rvcl9p bml0KCkgdG8gY3JlYXRlIHRoZSBjb25uZWN0b3IuDQo+DQo+PiA+ICsJaWYgKHJldCA8IDApDQo+ Pg0KPj4gSSBwcmVmZXIgaWYgKHJldCkgd2hlcmUgcG9zc2libGUsIGJ1dCBpdCBtYXkgYmUganVz dCBtZS4gSSBsZXQgeW91IGRlY2lkZS4NCj4+DQo+PiA+ICsJCWdvdG8gZXJyX2Rpc2FibGVfdmlk ZW9fY2xrOw0KPj4gPiArDQo+PiA+ICsJcmV0dXJuIHJldDsNCj4+DQo+PiByZXR1cm4gMDs/IGJ1 dCB1cCB0byB5b3UuDQo+Pg0KPj4gPiArDQo+PiA+ICtlcnJfZGlzYWJsZV92aWRlb19jbGs6DQo+ PiA+ICsJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+dmlkZW9fYWNsayk7DQo+PiA+ICtlcnJf ZGlzYWJsZV9kcGh5X2NsazoNCj4+ID4gKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZHNpLT5kcGh5 X2Nsa18yMDBNKTsNCj4+ID4gKwlyZXR1cm4gcmV0Ow0KPj4gPiArfQ0KPj4NCj4+IEF0IGxlYXN0 LCB0aGlzIGluaXRpYWwgb25lIGJldHRlciBjb21lIHdpdGggYSBjb21wbGV0ZSBkaXNwbGF5DQo+ PiBwaXBlbGluZSwgZXggY3J0YyAvIHBsYW5lIGFyZSBtaXNzaW5nLiBUaGlzIHdvbid0IGJlIGZ1 bmN0aW9uYWwgd2l0aG91dCB0aG9zZS4NCj4+IEkgYmVsaWV2ZSBMYXVyZW50IHdhcyBwbGFubmlu ZyB0byBtYWtlIHRoZSB4bG54IGRybSBsYXllciBhcyBhDQo+PiBsaWJyYXJ5LCBzbyBob3BlZnVs bHkgdGhpcyBjYW4gYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGFuZCBjb21lIHdpdGgNCj4+IGRy aXZlcnMgYWxpZ25lZCB3aXRoIGl0Lg0KPj4NCj4+ID4gKw0KPj4gPiArc3RhdGljIGludCB4bG54 X2RzaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikgew0KPj4gPiArCXN0cnVj dCB4bG54X2RzaSAqZHNpID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7DQo+PiA+ICsNCj4+ ID4gKwljb21wb25lbnRfZGVsKCZwZGV2LT5kZXYsICZ4bG54X2RzaV9jb21wb25lbnRfb3BzKTsN Cj4+ID4gKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZHNpLT52aWRlb19hY2xrKTsNCj4+ID4gKwlj bGtfZGlzYWJsZV91bnByZXBhcmUoZHNpLT5kcGh5X2Nsa18yMDBNKTsNCj4+ID4gKw0KPj4gPiAr CXJldHVybiAwOw0KPj4gPiArfQ0KPj4gPiArDQo+PiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9m X2RldmljZV9pZCB4bG54X2RzaV9vZl9tYXRjaFtdID0gew0KPj4gPiArCXsgLmNvbXBhdGlibGUg PSAieGxueC1kc2kiLCB9LA0KPj4NCj4+IFRoaXMgc2hvdWxkIGNoYW5nZS4gSSBiZWxpZXZlIGl0 IHNob3VsZCBiZSBzb21ldGhpbmcgbGlrZSwgeGxueCw8ZHNpDQo+PiBpcCBuYW1lPi08dmVyc2lv bj4NCk9LLiBJIHdpbGwgdXBkYXRlIGluIHYyIHBhdGNoLg0KPj4NCj4+ID4gKwl7IC8qIGVuZCBv ZiB0YWJsZSAqLyB9LA0KPj4gPiArfTsNCj4+ID4gK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHhs bnhfZHNpX29mX21hdGNoKTsNCj4+ID4gKw0KPj4gPiArc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9k cml2ZXIgZHNpX2RyaXZlciA9IHsNCj4+ID4gKwkucHJvYmUgPSB4bG54X2RzaV9wcm9iZSwNCj4+ ID4gKwkucmVtb3ZlID0geGxueF9kc2lfcmVtb3ZlLA0KPj4gPiArCS5kcml2ZXIgPSB7DQo+PiA+ ICsJCS5uYW1lID0gInhsbngtZHNpIiwNCj4+ID4gKwkJLm9mX21hdGNoX3RhYmxlID0geGxueF9k c2lfb2ZfbWF0Y2gsDQo+PiA+ICsJfSwNCj4+ID4gK307DQo+PiA+ICsNCj4+ID4gK21vZHVsZV9w bGF0Zm9ybV9kcml2ZXIoZHNpX2RyaXZlcik7DQo+PiA+ICsNCj4+ID4gK01PRFVMRV9BVVRIT1Io IlhpbGlueCwgSW5jLiIpOw0KPj4gPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJYaWxpbnggRlBHQSBN SVBJIERTSSBUeCBEcml2ZXIiKTsNCj4+ID4gK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsNCj4N Cj4tLQ0KPlJlZ2FyZHMsDQo+DQo+TGF1cmVudCBQaW5jaGFydA0KDQpUaGFua3MsDQpHVlJhbw0K IA0KDQo=