Received: by 10.223.164.221 with SMTP id h29csp2929498wrb; Thu, 2 Nov 2017 21:37:17 -0700 (PDT) X-Google-Smtp-Source: ABhQp+R7cV3yMIZ81BuldPQfrMTbH8KJRk5JI9sq2Wf9l0/guNS/1llBn9atMmHJTMEvjq8Ybhb/ X-Received: by 10.159.208.69 with SMTP id w5mr5443467plz.66.1509683837385; Thu, 02 Nov 2017 21:37:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1509683837; cv=none; d=google.com; s=arc-20160816; b=HxLuxj5ax7dxBC48iXfYreEQc+q2VUsLg91CtyOcYbHKy+g6TQybFA3N00slHsKLTY aO9tkNAFYPQtqb12SrycngZWKrToH10la03eaDIICQ8UDcfOTMRQIQ61s5bjWcWwF1rz qv2ALfIq52Y/wc/ef/994ONd7YL4wOmQvB2WCVSX0pzap24Aa58jTncSuXfOiyM9CTaF tN4UTddTR7G3yPfNitt4RX8/OR4uJKwytFMUVwZpYarNeIy86UDEDrgDtZSMSLqnq8yw rgh8OjDDuwa7LCnpmvg0/r95VlqCPd3vHSa9nGDpdVsGKFg209aQNDxp+4Mm8d3EdZ9Y fvYg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :spamdiagnosticmetadata:spamdiagnosticoutput:content-language :accept-language:in-reply-to:references:message-id:date:thread-index :thread-topic:subject:cc:to:from:dkim-signature :arc-authentication-results; bh=Qv465B3lxuq1pDLmPIIyd6/hwts/Z637sMUOl6t8V5Q=; b=T2KT4hGyPgBsbOkUAPGyRjTMrMzXs58JLF754uq4YFMdNGoSJppZP4zVnRW7Q7tnEP ZaxLmSLxjfvTWp0FN/t4OOlg8/g0qnPHDbUgdH3gCxVq66fKATj3f4JlagS2F3MQawaF CrRoeYRo1yvsMU/ufp5j/yeDWvMZOFPXJFLHac8OQTqdjgtdri55ZILlf6u7c4teIbGH wleCrDi1s6hSbhLgaMW3qOvC/jBAOzT+OHxTr3pp6ifpty5U+0KCmSkZVXmSND6AzSdY 63ZPLl7vguURWeCgiH9tVJ0sIbgjAerVPpv0q382ofmMx9MEWrhKxTjhrbtJxMAKkFPK a8FQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@xilinx.onmicrosoft.com header.s=selector1-xilinx-com header.b=XAJ09zKv; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id l1si3561960pld.117.2017.11.02.21.37.03; Thu, 02 Nov 2017 21:37:17 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@xilinx.onmicrosoft.com header.s=selector1-xilinx-com header.b=XAJ09zKv; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752303AbdKCEgX (ORCPT + 97 others); Fri, 3 Nov 2017 00:36:23 -0400 Received: from mail-by2nam01on0068.outbound.protection.outlook.com ([104.47.34.68]:29792 "EHLO NAM01-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1750707AbdKCEgU (ORCPT ); Fri, 3 Nov 2017 00:36:20 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xilinx.onmicrosoft.com; s=selector1-xilinx-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=Qv465B3lxuq1pDLmPIIyd6/hwts/Z637sMUOl6t8V5Q=; b=XAJ09zKvQ8mHt1ixpmTCjgYMT5rKnr4TUqAtBrmgQPj91SmR9Oo+ICpxPQ+EkFhSQUKAZIeHiqEGRMcpkzfw+EjEbRk/R2jhr8l60aejRABgIpZ6WGBD8iQIElTdb4sfLPVBWrKOoKP3E1/hg8ZSzrH/ckAdaaPakQ/Zd5eBgUs= Received: from DM2PR0201MB0685.namprd02.prod.outlook.com (10.160.94.150) by MWHPR02MB3311.namprd02.prod.outlook.com (10.164.187.147) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.197.13; Fri, 3 Nov 2017 04:36:16 +0000 Received: from DM2PR0201MB0685.namprd02.prod.outlook.com ([fe80::f95a:c0ca:1670:973]) by DM2PR0201MB0685.namprd02.prod.outlook.com ([fe80::f95a:c0ca:1670:973%15]) with mapi id 15.20.0197.013; Fri, 3 Nov 2017 04:36:14 +0000 From: Vishal Sagar To: Leon Luo , "mchehab@kernel.org" , "robh+dt@kernel.org" , "mark.rutland@arm.com" , "hans.verkuil@cisco.com" , "sakari.ailus@linux.intel.com" CC: "linux-media@vger.kernel.org" , "devicetree@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "Soren Brinkmann" Subject: RE: [PATCH v9 2/2] media:imx274 V4l2 driver for Sony imx274 CMOS sensor Thread-Topic: [PATCH v9 2/2] media:imx274 V4l2 driver for Sony imx274 CMOS sensor Thread-Index: AQHTTibjzmex1i1A7kmAVXWBns9uXKMCGwbg Date: Fri, 3 Nov 2017 04:36:14 +0000 Message-ID: References: <20171026065103.28213-1-leonl@leopardimaging.com> <20171026065103.28213-2-leonl@leopardimaging.com> In-Reply-To: <20171026065103.28213-2-leonl@leopardimaging.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=vsagar@xilinx.com; x-originating-ip: [182.72.145.30] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;MWHPR02MB3311;6:xl96xmlQbNS0f1++PV9hCc7TwM4M/KugMzpx4cMBfDCttgNv25yukYnsyTEzKdzR7tmEQpU6kZ+KsTlC9bU0H0NS5wKxJ69w8FO5/5uEhpL1Q4kzmtqcQADXTkmRmIuXjYRdwM3H0VJbp+S8wlxW+7JunFyj3XpKcuQg63QuLgeJvSTygfk5i2iPksEGK5n0NDfqoZdWVuIF3GfXzplpmUWj8zvXU532teVxeXMPLTRDjxICB5uSiNJqj87p/zNZQHZ3iMZWh+bFMcViKE8xLcKElZkHv369rMrDfND6ijyUlwARB0sfTHXyRsnsAOBm+cyH6WJA8GE90EAi2Wyq0jx0BUtBp1CbYYWKG8eGfkg=;5:7h5rdTE21dJDl+4ArQV1QY/p9l1bSzZ2QZ56Gd7ng24uAXYQC00L3gkes39NWlgk31htysyOhqGZk2FF2XmUaq+emWUTKL8djbc+oHaKGWn0XhDnx60GQFKQJOllrkMwt5YXU3M1NRmLYDjqadgrjYMwDKqEw1TGcHmAPOmEMl8=;24:fytCRK08VxB/A3yKqemSCIuC04eEWjPEp+n1I1l5UeC0j3FB35G7aM4qvJRR3lbHQK9FXuwKSzMWYv4QMZSLhf15IJUj3dJTfghQnQc8yhk=;7:Tbr3HePO7993sWqycsIEvvFxx2CbgvE5QeRWEiCPRQlV1to26ymiqRNTC/VhBl4Tkt2LdPjb+b72DSPZha6FQffPpA8VQvSC9++/tJ9sOkdlvT+jKc+98tBMxZD3XjlN8vgkD9X8i6YA9r0i0tP9LjdDXcI9wklXNNNgUbrX3bDQRpvcABoXnJEybj+0CPR7Jm/d20aRA4ybeP3Y+NcNC5eyri0ELWYkPpHY7cj8OX73Ky2lGtCCA9p5OK6XQTpm x-ms-exchange-antispam-srfa-diagnostics: SSOS;SSOR; x-forefront-antispam-report: SFV:SKI;SCL:-1;SFV:NSPM;SFS:(10009020)(6009001)(39860400002)(346002)(376002)(13464003)(199003)(189002)(50986999)(81156014)(8676002)(14454004)(74316002)(68736007)(316002)(53936002)(229853002)(3280700002)(102836003)(6116002)(6436002)(3846002)(189998001)(575784001)(305945005)(99286004)(2900100001)(4326008)(25786009)(81166006)(2201001)(86362001)(76176999)(54356999)(107886003)(101416001)(2950100002)(7736002)(6246003)(6506006)(7696004)(33656002)(53546010)(5660300001)(105586002)(55016002)(5250100002)(110136005)(54906003)(2501003)(6306002)(106356001)(478600001)(66066001)(97736004)(16200700003)(3660700001)(53946003)(2906002)(9686003)(8936002)(2004002)(569006);DIR:OUT;SFP:1101;SCL:1;SRVR:MWHPR02MB3311;H:DM2PR0201MB0685.namprd02.prod.outlook.com;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; x-ms-office365-filtering-correlation-id: 837a2251-6329-46ef-2b59-08d522746ae7 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(48565401081)(2017052603199);SRVR:MWHPR02MB3311; x-ms-traffictypediagnostic: MWHPR02MB3311: x-exchange-antispam-report-test: UriScan:(250305191791016)(180628864354917)(22074186197030)(9452136761055)(192813158149592)(95692535739014)(228905959029699); x-microsoft-antispam-prvs: x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(8121501046)(5005006)(100000703101)(100105400095)(3231021)(3002001)(93006095)(93001095)(10201501046)(6055026)(6041248)(20161123564025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123555025)(20161123560025)(20161123558100)(20161123562025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:MWHPR02MB3311;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:MWHPR02MB3311; x-forefront-prvs: 0480A51D4A received-spf: None (protection.outlook.com: xilinx.com does not designate permitted sender hosts) spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM 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: 837a2251-6329-46ef-2b59-08d522746ae7 X-MS-Exchange-CrossTenant-originalarrivaltime: 03 Nov 2017 04:36:14.6003 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 657af505-d5df-48d0-8300-c31994686c5c X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR02MB3311 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkgTGVvbiwNCg0KSSB1bmRlcnN0YW5kIHRoaXMgZml4ZXMgY29ycmVjdGx5IGZyZWVpbmcgdGhl IHY0bCBjb250cm9sIGhhbmRsZXJzIGluIHByb2JlKCkuDQoNCkJ1dCBpZiB0aGVyZSBpcyBhIHNj ZW5hcmlvIHdoZXJlIHRoZSBzZW5zb3IgaXMgbW91bnRlZCBvbiBhIHJlbW92YWJsZSBkYXVnaHRl ciBjYXJkLA0Kc2hvdWxkbid0IHRoZSBwcm9iZSBmYWlsIGlmIHRoZSBkYXVnaHRlciBjYXJkIGlz IG5vdCBjb25uZWN0ZWQ/IA0KQSBzYW1wbGUgcmVhZC93cml0ZSB0byBhbiBJTVgyNzQgcmVnaXN0 ZXIgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gY29uZmlybSB0aGlzIGluIHRoZSBwcm9iZSgpIGFu ZCBmYWlsLg0KDQpEb2VzIGl0IG1ha2Ugc2Vuc2UgdG8gYWRkIHRoaXMgaW4gdGhlIHByb2JlKCk/ DQoNClJlZ2FyZHMNClZpc2hhbCBTYWdhciANCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0t LQ0KPiBGcm9tOiBsaW51eC1tZWRpYS1vd25lckB2Z2VyLmtlcm5lbC5vcmcgW21haWx0bzpsaW51 eC1tZWRpYS0NCj4gb3duZXJAdmdlci5rZXJuZWwub3JnXSBPbiBCZWhhbGYgT2YgTGVvbiBMdW8N Cj4gU2VudDogVGh1cnNkYXksIE9jdG9iZXIgMjYsIDIwMTcgMTI6MjEgUE0NCj4gVG86IG1jaGVo YWJAa2VybmVsLm9yZzsgcm9iaCtkdEBrZXJuZWwub3JnOyBtYXJrLnJ1dGxhbmRAYXJtLmNvbTsN Cj4gaGFucy52ZXJrdWlsQGNpc2NvLmNvbTsgc2FrYXJpLmFpbHVzQGxpbnV4LmludGVsLmNvbQ0K PiBDYzogbGludXgtbWVkaWFAdmdlci5rZXJuZWwub3JnOyBkZXZpY2V0cmVlQHZnZXIua2VybmVs Lm9yZzsgbGludXgtDQo+IGtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc7IGxlb25sQGxlb3BhcmRpbWFn aW5nLmNvbTsgU29yZW4gQnJpbmttYW5uDQo+IDxzb3JlbmJAeGxueC54aWxpbnguY29tPg0KPiBT dWJqZWN0OiBbUEFUQ0ggdjkgMi8yXSBtZWRpYTppbXgyNzQgVjRsMiBkcml2ZXIgZm9yIFNvbnkg aW14Mjc0IENNT1Mgc2Vuc29yDQo+IA0KPiBUaGUgaW14Mjc0IGlzIGEgU29ueSBDTU9TIGltYWdl IHNlbnNvciB0aGF0IGhhcyAxLzIuNSBpbWFnZSBzaXplLg0KPiBJdCBzdXBwb3J0cyB1cCB0byAz ODQweDIxNjAgKDRLKSA2MGZwcywgMTA4MHAgMTIwZnBzLiBUaGUgaW50ZXJmYWNlDQo+IGlzIDQt bGFuZSBNSVBJIENTSS0yIHJ1bm5pbmcgYXQgMS40NEdicHMgZWFjaC4NCj4gDQo+IFRoaXMgZHJp dmVyIGhhcyBiZWVuIHRlc3RlZCBvbiBYaWxpbnggWkNVMTAyIHBsYXRmb3JtIHdpdGggYSBMZW9w YXJkDQo+IExJLUlNWDI3NE1JUEktRk1DIGNhbWVyYSBib2FyZC4NCj4gDQo+IFN1cHBvcnQgZm9y IHRoZSBmb2xsb3dpbmcgZmVhdHVyZXM6DQo+IC1SZXNvbHV0aW9uczogMzg0MHgyMTYwLCAxOTIw eDEwODAsIDEyODB4NzIwDQo+IC1GcmFtZSByYXRlOiAzODQweDIxNjAgOiA1IOKAkyA2MGZwcw0K PiAgICAgICAgICAgICAxOTIweDEwODAgOiA1IOKAkyAxMjBmcHMNCj4gICAgICAgICAgICAgMTI4 MHg3MjAgOiA1IOKAkyAxMjBmcHMNCj4gLUV4cG9zdXJlIHRpbWU6IDE2IOKAkyAoZnJhbWUgaW50 ZXJ2YWwpIG1pY3JvLXNlY29uZHMNCj4gLUdhaW46IDF4IC0gMTgweA0KPiAtVkZMSVA6IGVuYWJs ZS9kaXNhYmxlZHJpdmVycy9tZWRpYS9pMmMvaW14Mjc0LmMNCj4gLVRlc3QgcGF0dGVybjogMTIg dGVzdCBwYXR0ZXJucw0KPiANCj4gU2lnbmVkLW9mZi1ieTogTGVvbiBMdW8gPGxlb25sQGxlb3Bh cmRpbWFnaW5nLmNvbT4NCj4gVGVzdGVkLWJ5OiBTw7ZyZW4gQnJpbmttYW5uIDxzb3Jlbi5icmlu a21hbm5AeGlsaW54LmNvbT4NCj4gQWNrZWQtYnk6IFNha2FyaSBBaWx1cyA8c2FrYXJpLmFpbHVz QGlraS5maT4NCj4gQWNrZWQtYnk6IENocmlzIEtvaG4gPGNrb2huQHhpbGlueC5jb20+DQo+IC0t LQ0KPiB2OToNCj4gIC0gcmVtb3ZlIHY0bDJfYXN5bmNfdW5yZWdpc3Rlcl9zdWJkZXYgZnJvbSBw cm9iZSBlcnJvcg0KPiB2ODoNCj4gIC0gY2hlY2sgZGl2aXNpb24gYnkgemVybyBlcnJvcg0KPiB2 NzoNCj4gIC0gdXNlIF9fdjRsMl9jdHJsX3NfY3RybCBpbnN0ZWFkIG9mIHY0bDJfY3RybF9zX2N0 cmwgdG8gaGF2ZQ0KPiAgICBjbGVhbiBtdXRleF9sb2NrL211dGV4X3VubG9jayBpbiBpbXgyNzRf c19zdHJlYW0oKQ0KPiAgLSBkZWZpbmUgaW14Mjc0X3RwX3JlZ3NbXSBhcyBzdGF0aWMsIG1vdmUg dGhlIHRlc3QgcGF0dGVybiByZWcNCj4gICAgb3V0IG9mIGlteDI3NF90cF9yZWdzW10sIGFuZCBk ZWZpbmUgaXQgYXMgYSBtYWNybw0KPiAgICBJTVgyNzRfVEVTVF9QQVRURVJOX1JFRw0KPiB2NjoN Cj4gIC0gcmVtb3ZlIG1lZGlhL3Y0bDItaW1hZ2Utc2l6ZXMuaCBmcm9tIGluY2x1ZGUgaGVhZGVy DQo+ICAtIG1ha2UgdGhlIGhlYWRlciBmaWxlIGFscGhhYmV0aWNhbCBvcmRlcg0KPiAgLSByZW1v dmUgZm10LT5wYWQgY2hlY2sgaW4gaW14Mjc0X2dldF9mbXQsDQo+ICAgIHRoZSBWNEwyIHN1YmRl diBmcmFtZXdvcmsgZG9lcyBpdCBhbHJlYWR5DQo+ICAtIGNoYW5nZSAnc3RydWN0IHJlZ184ICpy ZWdzJyB0byAnc3RydWN0IHJlZ184IHJlZ3Nbbl0nLA0KPiAgICB3aGVyZSBuIGlzIHRoZSBleGFj dCBudW1iZXJzIG5lZWRlZCBmb3IgdGhpcyBmdW5jdGlvbg0KPiAgLSBtb3ZlIE1PRFVMRV9ERVZJ Q0VfVEFCTEUob2YsIGlteDI3NF9vZl9pZF90YWJsZSk7IGNsb3Nlcg0KPiAgICB0byBpbXgyNzRf b2ZfaWRfdGFibGUgZGVmaW5pdGlvbg0KPiAgLSByZW1vdmUgcmV0dXJuIGNoZWNrIG9mIGlteDI3 NF93cml0ZV90YWJsZSBpbiBpbXgyNzRfcmVtb3ZlLA0KPiAgICBiZWNhdXNlIGl0IHNob3VsZCBy ZW1vdmUgYWxsIHJlc291cmNlcyBldmVuIGkyYyBmYWlscyBoZXJlDQo+ICAtIG1vdmUgaW14Mjc0 X2xvYWRfZGVmYXVsdCBiZWZvcmUgdjRsMl9hc3luY19yZWdpc3Rlcl9zdWJkZXYNCj4gdjU6DQo+ ICAtIG5vIGNoYW5nZXMNCj4gdjQ6DQo+ICAtIHVzZSAzMi1iaXQgZGF0YSB0eXBlIHRvIGF2b2lk IF9fZGl2ZGkzIGNvbXBpbGUgZXJyb3IgZm9yIGkzODYNCj4gIC0gY2xlYW4gdXAgT1IgdG9nZXRo ZXIgZXJyb3IgY29kZXNkcml2ZXJzL21lZGlhL2kyYy9pbXgyNzQuYw0KPiB2MzoNCj4gIC0gY2xl YW4gdXAgaGVhZGVyIGZpbGVzDQo+ICAtIHVzZSBzdHJ1Y3QgZGlyZWN0bHkgaW5zdGVhZCBvZiBh bGlhcyAjZGVmaW5lDQo+ICAtIHVzZSB2NGwyX2N0cmxfc19jdHJsIGluc3RlYWQgb2YgdjRsMl9z X2N0cmwNCj4gIC0gcmV2aXNlIGRlYnVnIG91dHB1dA0KPiAgLSBtb3ZlIHN0YXRpYyBoZWxwZXJz IGNsb3NlciB0byB0aGVpciBjYWxsIHNpdGUNCj4gIC0gZG9uJ3QgT1IgdG9lZ2V0aGVyIGVycm9y IGNvZGVzDQo+ICAtIHVzZSBjbG9zZXN0IHZhbGlkIGdhaW4gdmFsdWUgaW5zdGVhZCBvZiBlcnJv cmluZyBvdXQNCj4gIC0gYXNzaWduZSBsb2NrIHRvIHRoZSBjb250cm9sIGhhbmRsZXIgYW5kIG9t aXQgZXhwbGljaXQgbG9ja2luZw0KPiAgLSBhY3F1aXJlIG11dGV4IGxvY2sgZm9yIGlteDI3NF9n ZXRfZm10DQo+ICAtIHJlbW92ZSBmb3JtYXQtPnBhZCBjaGVjayBpbiBpbXgyNzRfc2V0X2ZtdCBz aW5jZSB0aGUgcGFkIGlzIGFsd2F5cyAwDQo+ICAtIHBhc3Mgc3RydWN0IHY0bDJfY3RybCBwb2lu dGVyIGluIGdhaW4vZXhwb3N1cmUvdmxpcC90ZXN0IHBhdHRlcm4gY29udHJvbHMNCj4gIC0gcmVt b3ZlIHByaXYtPmN0cmxzLnZmbGlwLT52YWwgPSB2YWwgaW4gaW14Mjc0X3NldF92ZmxpcCgpDQo+ ICAtIHJlbW92ZSBwcml2LT5jdHJscy50ZXN0X3BhdHRlcm4tPnZhbCA9IHZhbCBpbiBpbXgyNzRf c2V0X3Rlc3RfcGF0dGVybigpDQo+ICAtIHJlbW92ZSBlbXB0eSBvcGVuL2Nsb3NlIGNhbGxiYWNr cw0KPiAgLSByZW1vdmUgZW1wdHkgY29yZSBvcHMNCj4gIC0gYWRkIG1vcmUgZXJyb3IgbGFiZWxz IGluIHByb2JlDQo+ICAtIHVzZSB2NGwyX2FzeW5jX3VucmVnaXN0ZXJfc3ViZGV2IGluc3RlYWQg b2YgdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYNCj4gIC0gdXNlIGR5bmFtaWMgZGVidWcN Cj4gIC0gc3BsaXQgc3RhcnRfc3RyZWFtIHRvIHR3byBzdGVwczogaW14Mjc0X21vZGVfcmVncygp IGFuZA0KPiBpbXgyNzRfc3RhcnRfc3RyZWFtKCkNCj4gICAgZnJhbWUgcmF0ZSAmIGV4cG9zdXJl IGNhbiBiZSB1cGRhdGVkDQo+ICAgIGJldHdlZW4gaW14Mjc0X21vZGVfcmVncygpICYgaW14Mjc0 X3N0YXJ0X3N0cmVhbSgpDQo+IA0KPiB2MjoNCj4gIC0gRml4IEtjb25maWcgdG8gbm90IHJlbW92 ZSBleGlzdGluZyBvcHRpb25zDQo+IC0tLQ0KPiAgZHJpdmVycy9tZWRpYS9pMmMvS2NvbmZpZyAg fCAgICA3ICsNCj4gIGRyaXZlcnMvbWVkaWEvaTJjL01ha2VmaWxlIHwgICAgMSArDQo+ICBkcml2 ZXJzL21lZGlhL2kyYy9pbXgyNzQuYyB8IDE4MTANCj4gKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysNCj4gIDMgZmlsZXMgY2hhbmdlZCwgMTgxOCBpbnNlcnRpb25z KCspDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9pMmMvaW14Mjc0LmMNCj4g DQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2kyYy9LY29uZmlnIGIvZHJpdmVycy9tZWRp YS9pMmMvS2NvbmZpZw0KPiBpbmRleCA0NzExMzc3NGEyOTcuLjk2NTk4NDllMzNhMCAxMDA2NDQN Cj4gLS0tIGEvZHJpdmVycy9tZWRpYS9pMmMvS2NvbmZpZw0KPiArKysgYi9kcml2ZXJzL21lZGlh L2kyYy9LY29uZmlnDQo+IEBAIC01NTUsNiArNTU1LDEzIEBAIGNvbmZpZyBWSURFT19BUFRJTkFf UExMDQo+ICBjb25maWcgVklERU9fU01JQVBQX1BMTA0KPiAgCXRyaXN0YXRlDQo+IA0KPiArY29u ZmlnIFZJREVPX0lNWDI3NA0KPiArCXRyaXN0YXRlICJTb255IElNWDI3NCBzZW5zb3Igc3VwcG9y dCINCj4gKwlkZXBlbmRzIG9uIEkyQyAmJiBWSURFT19WNEwyICYmIFZJREVPX1Y0TDJfU1VCREVW X0FQSQ0KPiArCS0tLWhlbHAtLS0NCj4gKwkgIFRoaXMgaXMgYSBWNEwyIHNlbnNvci1sZXZlbCBk cml2ZXIgZm9yIHRoZSBTb255IElNWDI3NA0KPiArCSAgQ01PUyBpbWFnZSBzZW5zb3IuDQo+ICsN Cj4gIGNvbmZpZyBWSURFT19PVjI2NDANCj4gIAl0cmlzdGF0ZSAiT21uaVZpc2lvbiBPVjI2NDAg c2Vuc29yIHN1cHBvcnQiDQo+ICAJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIEkyQw0KPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9pMmMvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL2kyYy9N YWtlZmlsZQ0KPiBpbmRleCBjODQzYzE4MWRmYjkuLmY4ZDU3ZTQ1MzkzNiAxMDA2NDQNCj4gLS0t IGEvZHJpdmVycy9tZWRpYS9pMmMvTWFrZWZpbGUNCj4gKysrIGIvZHJpdmVycy9tZWRpYS9pMmMv TWFrZWZpbGUNCj4gQEAgLTkyLDUgKzkyLDYgQEAgb2JqLSQoQ09ORklHX1ZJREVPX0lSX0kyQykg ICs9IGlyLWtiZC1pMmMubw0KPiAgb2JqLSQoQ09ORklHX1ZJREVPX01MODZWNzY2NykJKz0gbWw4 NnY3NjY3Lm8NCj4gIG9iai0kKENPTkZJR19WSURFT19PVjI2NTkpCSs9IG92MjY1OS5vDQo+ICBv YmotJChDT05GSUdfVklERU9fVEMzNTg3NDMpCSs9IHRjMzU4NzQzLm8NCj4gK29iai0kKENPTkZJ R19WSURFT19JTVgyNzQpCSs9IGlteDI3NC5vDQo+IA0KPiAgb2JqLSQoQ09ORklHX1NEUl9NQVgy MTc1KSArPSBtYXgyMTc1Lm8NCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvaTJjL2lteDI3 NC5jIGIvZHJpdmVycy9tZWRpYS9pMmMvaW14Mjc0LmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQN Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi43MzdkYmY1OWEwZDINCj4gLS0tIC9kZXYvbnVsbA0KPiAr KysgYi9kcml2ZXJzL21lZGlhL2kyYy9pbXgyNzQuYw0KPiBAQCAtMCwwICsxLDE4MTAgQEANCj4g Ky8qDQo+ICsgKiBpbXgyNzQuYyAtIElNWDI3NCBDTU9TIEltYWdlIFNlbnNvciBkcml2ZXINCj4g KyAqDQo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTcsIExlb3BhcmQgSW1hZ2luZywgSW5jLg0KPiAr ICoNCj4gKyAqIExlb24gTHVvIDxsZW9ubEBsZW9wYXJkaW1hZ2luZy5jb20+DQo+ICsgKiBFZHdp biBab3UgPGVkd2luekBsZW9wYXJkaW1hZ2luZy5jb20+DQo+ICsgKg0KPiArICogVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkgaXQNCj4gKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UsDQo+ICsgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLg0KPiArICoNCj4gKyAqIFRoaXMgcHJvZ3JhbSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQN Cj4gKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m IE1FUkNIQU5UQUJJTElUWQ0KPiBvcg0KPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQo+IGZvcg0KPiArICog bW9yZSBkZXRhaWxzLg0KPiArICoNCj4gKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQo+ICsgKiBhbG9uZyB3aXRoIHRo aXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4N Cj4gKyAqLw0KPiArDQo+ICsjaW5jbHVkZSA8bGludXgvY2xrLmg+DQo+ICsjaW5jbHVkZSA8bGlu dXgvZGVsYXkuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+DQo+ICsjaW5jbHVkZSA8bGlu dXgvZ3Bpby9jb25zdW1lci5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2kyYy5oPg0KPiArI2luY2x1 ZGUgPGxpbnV4L2luaXQuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4NCj4gKyNpbmNs dWRlIDxsaW51eC9vZl9ncGlvLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+DQo+ICsj aW5jbHVkZSA8bGludXgvc2xhYi5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L3Y0bDItbWVkaWFidXMu aD4NCj4gKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4NCj4gKw0KPiArI2luY2x1ZGUgPG1l ZGlhL3Y0bDItY3RybHMuaD4NCj4gKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPg0KPiAr I2luY2x1ZGUgPG1lZGlhL3Y0bDItc3ViZGV2Lmg+DQo+ICsNCj4gKy8qDQo+ICsgKiBTZWUgIlNI UiwgU1ZSIFNldHRpbmciIGluIGRhdGFzaGVldA0KPiArICovDQo+ICsjZGVmaW5lIElNWDI3NF9E RUZBVUxUX0ZSQU1FX0xFTkdUSAkJKDQ1NTApDQo+ICsjZGVmaW5lIElNWDI3NF9NQVhfRlJBTUVf TEVOR1RICQkJKDB4MDAwZmZmZmYpDQo+ICsNCj4gKy8qDQo+ICsgKiBTZWUgIkZyYW1lIFJhdGUg QWRqdXN0bWVudCIgaW4gZGF0YXNoZWV0DQo+ICsgKi8NCj4gKyNkZWZpbmUgSU1YMjc0X1BJWENM S19DT05TVDEJCQkoNzIwMDAwMDApDQo+ICsjZGVmaW5lIElNWDI3NF9QSVhDTEtfQ09OU1QyCQkJ KDEwMDAwMDApDQo+ICsNCj4gKy8qDQo+ICsgKiBUaGUgaW5wdXQgZ2FpbiBpcyBzaGlmdGVkIGJ5 IElNWDI3NF9HQUlOX1NISUZUIHRvIGdldA0KPiArICogZGVjaW1hbCBudW1iZXIuIFRoZSByZWFs IGdhaW4gaXMNCj4gKyAqIChmbG9hdClpbnB1dF9nYWluX3ZhbHVlIC8gKDEgPDwgSU1YMjc0X0dB SU5fU0hJRlQpDQo+ICsgKi8NCj4gKyNkZWZpbmUgSU1YMjc0X0dBSU5fU0hJRlQJCQkoOCkNCj4g KyNkZWZpbmUgSU1YMjc0X0dBSU5fU0hJRlRfTUFTSwkJCSgoMSA8PA0KPiBJTVgyNzRfR0FJTl9T SElGVCkgLSAxKQ0KPiArDQo+ICsvKg0KPiArICogU2VlICJBbmFsb2cgR2FpbiIgYW5kICJEaWdp dGFsIEdhaW4iIGluIGRhdGFzaGVldA0KPiArICogbWluIGdhaW4gaXMgMVgNCj4gKyAqIG1heCBn YWluIGlzIGNhbGN1bGF0ZWQgYmFzZWQgb24gSU1YMjc0X0dBSU5fUkVHX01BWA0KPiArICovDQo+ ICsjZGVmaW5lIElNWDI3NF9HQUlOX1JFR19NQVgJCQkoMTk1NykNCj4gKyNkZWZpbmUgSU1YMjc0 X01JTl9HQUlOCQkJCSgweDAxIDw8DQo+IElNWDI3NF9HQUlOX1NISUZUKQ0KPiArI2RlZmluZSBJ TVgyNzRfTUFYX0FOQUxPR19HQUlOCQkJKCgyMDQ4IDw8DQo+IElNWDI3NF9HQUlOX1NISUZUKVwN Cj4gKwkJCQkJLyAoMjA0OCAtIElNWDI3NF9HQUlOX1JFR19NQVgpKQ0KPiArI2RlZmluZSBJTVgy NzRfTUFYX0RJR0lUQUxfR0FJTgkJCSg4KQ0KPiArI2RlZmluZSBJTVgyNzRfREVGX0dBSU4JCQkJ KDIwIDw8DQo+IElNWDI3NF9HQUlOX1NISUZUKQ0KPiArI2RlZmluZSBJTVgyNzRfR0FJTl9DT05T VAkJCSgyMDQ4KSAvKiBmb3IgZ2FpbiBmb3JtdWxhICovDQo+ICsNCj4gKy8qDQo+ICsgKiAxIGxp bmUgdGltZSBpbiB1cyA9IChITUFYIC8gNzIpLCBtaW5pbWFsIGlzIDQgbGluZXMNCj4gKyAqLw0K PiArI2RlZmluZSBJTVgyNzRfTUlOX0VYUE9TVVJFX1RJTUUJCSg0ICogMjYwIC8gNzIpDQo+ICsN Cj4gKyNkZWZpbmUgSU1YMjc0X0RFRkFVTFRfTU9ERQ0KPiAJSU1YMjc0X01PREVfMzg0MFgyMTYw DQo+ICsjZGVmaW5lIElNWDI3NF9NQVhfV0lEVEgJCQkoMzg0MCkNCj4gKyNkZWZpbmUgSU1YMjc0 X01BWF9IRUlHSFQJCQkoMjE2MCkNCj4gKyNkZWZpbmUgSU1YMjc0X01BWF9GUkFNRV9SQVRFCQkJ KDEyMCkNCj4gKyNkZWZpbmUgSU1YMjc0X01JTl9GUkFNRV9SQVRFCQkJKDUpDQo+ICsjZGVmaW5l IElNWDI3NF9ERUZfRlJBTUVfUkFURQkJCSg2MCkNCj4gKw0KPiArLyoNCj4gKyAqIHJlZ2lzdGVy IFNIUiBpcyBsaW1pdGVkIHRvIChTVlIgdmFsdWUgKyAxKSB4IFZNQVggdmFsdWUgLSA0DQo+ICsg Ki8NCj4gKyNkZWZpbmUgSU1YMjc0X1NIUl9MSU1JVF9DT05TVAkJCSg0KQ0KPiArDQo+ICsvKg0K PiArICogQ29uc3RhbnRzIGZvciBzZW5zb3IgcmVzZXQgZGVsYXkNCj4gKyAqLw0KPiArI2RlZmlu ZSBJTVgyNzRfUkVTRVRfREVMQVkxCQkJKDIwMDApDQo+ICsjZGVmaW5lIElNWDI3NF9SRVNFVF9E RUxBWTIJCQkoMjIwMCkNCj4gKw0KPiArLyoNCj4gKyAqIHNoaWZ0IGFuZCBtYXNrIGNvbnN0YW50 cw0KPiArICovDQo+ICsjZGVmaW5lIElNWDI3NF9TSElGVF84X0JJVFMJCQkoOCkNCj4gKyNkZWZp bmUgSU1YMjc0X1NISUZUXzE2X0JJVFMJCQkoMTYpDQo+ICsjZGVmaW5lIElNWDI3NF9NQVNLX0xT Ql8yX0JJVFMJCQkoMHgwMykNCj4gKyNkZWZpbmUgSU1YMjc0X01BU0tfTFNCXzNfQklUUwkJCSgw eDA3KQ0KPiArI2RlZmluZSBJTVgyNzRfTUFTS19MU0JfNF9CSVRTCQkJKDB4MGYpDQo+ICsjZGVm aW5lIElNWDI3NF9NQVNLX0xTQl84X0JJVFMJCQkoMHgwMGZmKQ0KPiArDQo+ICsjZGVmaW5lIERS SVZFUl9OQU1FICJJTVgyNzQiDQo+ICsNCj4gKy8qDQo+ICsgKiBJTVgyNzQgcmVnaXN0ZXIgZGVm aW5pdGlvbnMNCj4gKyAqLw0KPiArI2RlZmluZSBJTVgyNzRfRlJBTUVfTEVOR1RIX0FERFJfMQkJ MHgzMEZBIC8qIFZNQVgsIE1TQg0KPiAqLw0KPiArI2RlZmluZSBJTVgyNzRfRlJBTUVfTEVOR1RI X0FERFJfMgkJMHgzMEY5IC8qIFZNQVggKi8NCj4gKyNkZWZpbmUgSU1YMjc0X0ZSQU1FX0xFTkdU SF9BRERSXzMJCTB4MzBGOCAvKiBWTUFYLCBMU0INCj4gKi8NCj4gKyNkZWZpbmUgSU1YMjc0X1NW Ul9SRUdfTVNCCQkJMHgzMDBGIC8qIFNWUiAqLw0KPiArI2RlZmluZSBJTVgyNzRfU1ZSX1JFR19M U0IJCQkweDMwMEUgLyogU1ZSICovDQo+ICsjZGVmaW5lIElNWDI3NF9ITUFYX1JFR19NU0IJCQkw eDMwRjcgLyogSE1BWCAqLw0KPiArI2RlZmluZSBJTVgyNzRfSE1BWF9SRUdfTFNCCQkJMHgzMEY2 IC8qIEhNQVggKi8NCj4gKyNkZWZpbmUgSU1YMjc0X0NPQVJTRV9USU1FX0FERFJfTVNCCQkweDMw MEQgLyogU0hSICovDQo+ICsjZGVmaW5lIElNWDI3NF9DT0FSU0VfVElNRV9BRERSX0xTQgkJMHgz MDBDIC8qIFNIUiAqLw0KPiArI2RlZmluZSBJTVgyNzRfQU5BTE9HX0dBSU5fQUREUl9MU0IJCTB4 MzAwQSAvKiBBTkFMT0cNCj4gR0FJTiBMU0IgKi8NCj4gKyNkZWZpbmUgSU1YMjc0X0FOQUxPR19H QUlOX0FERFJfTVNCCQkweDMwMEIgLyogQU5BTE9HDQo+IEdBSU4gTVNCICovDQo+ICsjZGVmaW5l IElNWDI3NF9ESUdJVEFMX0dBSU5fUkVHCQkJMHgzMDEyIC8qIERpZ2l0YWwgR2Fpbg0KPiAqLw0K PiArI2RlZmluZSBJTVgyNzRfVkZMSVBfUkVHCQkJMHgzMDFBIC8qIFZFUlRJQ0FMIEZMSVAgKi8N Cj4gKyNkZWZpbmUgSU1YMjc0X1RFU1RfUEFUVEVSTl9SRUcJCQkweDMwM0QgLyogVEVTVA0KPiBQ QVRURVJOICovDQo+ICsjZGVmaW5lIElNWDI3NF9TVEFOREJZX1JFRwkJCTB4MzAwMCAvKiBTVEFO REJZICovDQo+ICsNCj4gKyNkZWZpbmUgSU1YMjc0X1RBQkxFX1dBSVRfTVMJCQkwDQo+ICsjZGVm aW5lIElNWDI3NF9UQUJMRV9FTkQJCQkxDQo+ICsNCj4gKy8qDQo+ICsgKiBpbXgyNzQgSTJDIG9w ZXJhdGlvbiByZWxhdGVkIHN0cnVjdHVyZQ0KPiArICovDQo+ICtzdHJ1Y3QgcmVnXzggew0KPiAr CXUxNiBhZGRyOw0KPiArCXU4IHZhbDsNCj4gK307DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgcmVnbWFwX2NvbmZpZyBpbXgyNzRfcmVnbWFwX2NvbmZpZyA9IHsNCj4gKwkucmVnX2JpdHMg PSAxNiwNCj4gKwkudmFsX2JpdHMgPSA4LA0KPiArCS5jYWNoZV90eXBlID0gUkVHQ0FDSEVfUkJU UkVFLA0KPiArfTsNCj4gKw0KPiArZW51bSBpbXgyNzRfbW9kZSB7DQo+ICsJSU1YMjc0X01PREVf Mzg0MFgyMTYwLA0KPiArCUlNWDI3NF9NT0RFXzE5MjBYMTA4MCwNCj4gKwlJTVgyNzRfTU9ERV8x MjgwWDcyMCwNCj4gKw0KPiArCUlNWDI3NF9NT0RFX1NUQVJUX1NUUkVBTV8xLA0KPiArCUlNWDI3 NF9NT0RFX1NUQVJUX1NUUkVBTV8yLA0KPiArCUlNWDI3NF9NT0RFX1NUQVJUX1NUUkVBTV8zLA0K PiArCUlNWDI3NF9NT0RFX1NUQVJUX1NUUkVBTV80LA0KPiArCUlNWDI3NF9NT0RFX1NUT1BfU1RS RUFNDQo+ICt9Ow0KPiArDQo+ICsvKg0KPiArICogaW14Mjc0IGZvcm1hdCByZWxhdGVkIHN0cnVj dHVyZQ0KPiArICovDQo+ICtzdHJ1Y3QgaW14Mjc0X2ZybWZtdCB7DQo+ICsJdTMyIG1idXNfY29k ZTsNCj4gKwllbnVtIHY0bDJfY29sb3JzcGFjZSBjb2xvcnNwYWNlOw0KPiArCXN0cnVjdCB2NGwy X2ZybXNpemVfZGlzY3JldGUgc2l6ZTsNCj4gKwllbnVtIGlteDI3NF9tb2RlIG1vZGU7DQo+ICt9 Ow0KPiArDQo+ICsvKg0KPiArICogaW14Mjc0IHRlc3QgcGF0dGVybiByZWxhdGVkIHN0cnVjdHVy ZQ0KPiArICovDQo+ICtlbnVtIHsNCj4gKwlURVNUX1BBVFRFUk5fRElTQUJMRUQgPSAwLA0KPiAr CVRFU1RfUEFUVEVSTl9BTExfMDAwSCwNCj4gKwlURVNUX1BBVFRFUk5fQUxMX0ZGRkgsDQo+ICsJ VEVTVF9QQVRURVJOX0FMTF81NTVILA0KPiArCVRFU1RfUEFUVEVSTl9BTExfQUFBSCwNCj4gKwlU RVNUX1BBVFRFUk5fVlNQXzVBSCwgLyogVkVSVElDQUwgU1RSSVBFIFBBVFRFUk4gNTU1SC9BQUFI ICovDQo+ICsJVEVTVF9QQVRURVJOX1ZTUF9BNUgsIC8qIFZFUlRJQ0FMIFNUUklQRSBQQVRURVJO IEFBQUgvNTU1SCAqLw0KPiArCVRFU1RfUEFUVEVSTl9WU1BfMDVILCAvKiBWRVJUSUNBTCBTVFJJ UEUgUEFUVEVSTiAwMDBILzU1NUggKi8NCj4gKwlURVNUX1BBVFRFUk5fVlNQXzUwSCwgLyogVkVS VElDQUwgU1RSSVBFIFBBVFRFUk4gNTU1SC8wMDBIICovDQo+ICsJVEVTVF9QQVRURVJOX1ZTUF8w RkgsIC8qIFZFUlRJQ0FMIFNUUklQRSBQQVRURVJOIDAwMEgvRkZGSCAqLw0KPiArCVRFU1RfUEFU VEVSTl9WU1BfRjBILCAvKiBWRVJUSUNBTCBTVFJJUEUgUEFUVEVSTiBGRkZILzAwMEggKi8NCj4g KwlURVNUX1BBVFRFUk5fSF9DT0xPUl9CQVJTLA0KPiArCVRFU1RfUEFUVEVSTl9WX0NPTE9SX0JB UlMsDQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHRwX3FtZW51W10g PSB7DQo+ICsJIkRpc2FibGVkIiwNCj4gKwkiQWxsIDAwMGggUGF0dGVybiIsDQo+ICsJIkFsbCBG RkZoIFBhdHRlcm4iLA0KPiArCSJBbGwgNTU1aCBQYXR0ZXJuIiwNCj4gKwkiQWxsIEFBQWggUGF0 dGVybiIsDQo+ICsJIlZlcnRpY2FsIFN0cmlwZSAoNTU1aCAvIEFBQWgpIiwNCj4gKwkiVmVydGlj YWwgU3RyaXBlIChBQUFoIC8gNTU1aCkiLA0KPiArCSJWZXJ0aWNhbCBTdHJpcGUgKDAwMGggLyA1 NTVoKSIsDQo+ICsJIlZlcnRpY2FsIFN0cmlwZSAoNTU1aCAvIDAwMGgpIiwNCj4gKwkiVmVydGlj YWwgU3RyaXBlICgwMDBoIC8gRkZGaCkiLA0KPiArCSJWZXJ0aWNhbCBTdHJpcGUgKEZGRmggLyAw MDBoKSIsDQo+ICsJIkhvcml6b250YWwgQ29sb3IgQmFycyIsDQo+ICsJIlZlcnRpY2FsIENvbG9y IEJhcnMiLA0KPiArfTsNCj4gKw0KPiArLyoNCj4gKyAqIEFsbC1waXhlbCBzY2FuIG1vZGUgKDEw LWJpdCkNCj4gKyAqIGlteDI3NCBtb2RlMShyZWZlciB0byBkYXRhc2hlZXQpIHJlZ2lzdGVyIGNv bmZpZ3VyYXRpb24gd2l0aA0KPiArICogMzg0MHgyMTYwIHJlc29sdXRpb24sIHJhdzEwIGRhdGEg YW5kIG1pcGkgZm91ciBsYW5lIG91dHB1dA0KPiArICovDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0 IHJlZ184IGlteDI3NF9tb2RlMV8zODQweDIxNjBfcmF3MTBbXSA9IHsNCj4gKwl7MHgzMDA0LCAw eDAxfSwNCj4gKwl7MHgzMDA1LCAweDAxfSwNCj4gKwl7MHgzMDA2LCAweDAwfSwNCj4gKwl7MHgz MDA3LCAweDAyfSwNCj4gKw0KPiArCXsweDMwMTgsIDB4QTJ9LCAvKiBvdXRwdXQgWFZTLCBIVlMg Ki8NCj4gKw0KPiArCXsweDMwNkIsIDB4MDV9LA0KPiArCXsweDMwRTIsIDB4MDF9LA0KPiArCXsw eDMwRjYsIDB4MDd9LCAvKiBITUFYLCAyNjMgKi8NCj4gKwl7MHgzMEY3LCAweDAxfSwgLyogSE1B WCAqLw0KPiArDQo+ICsJezB4MzBkZCwgMHgwMX0sIC8qIGNyb3AgdG8gMjE2MCAqLw0KPiArCXsw eDMwZGUsIDB4MDZ9LA0KPiArCXsweDMwZGYsIDB4MDB9LA0KPiArCXsweDMwZTAsIDB4MTJ9LA0K PiArCXsweDMwZTEsIDB4MDB9LA0KPiArCXsweDMwMzcsIDB4MDF9LCAvKiB0byBjcm9wIHRvIDM4 NDAgKi8NCj4gKwl7MHgzMDM4LCAweDBjfSwNCj4gKwl7MHgzMDM5LCAweDAwfSwNCj4gKwl7MHgz MDNhLCAweDBjfSwNCj4gKwl7MHgzMDNiLCAweDBmfSwNCj4gKw0KPiArCXsweDMwRUUsIDB4MDF9 LA0KPiArCXsweDMxMzAsIDB4ODZ9LA0KPiArCXsweDMxMzEsIDB4MDh9LA0KPiArCXsweDMxMzIs IDB4N0V9LA0KPiArCXsweDMxMzMsIDB4MDh9LA0KPiArCXsweDMzNDIsIDB4MEF9LA0KPiArCXsw eDMzNDMsIDB4MDB9LA0KPiArCXsweDMzNDQsIDB4MTZ9LA0KPiArCXsweDMzNDUsIDB4MDB9LA0K PiArCXsweDMzQTYsIDB4MDF9LA0KPiArCXsweDM1MjgsIDB4MEV9LA0KPiArCXsweDM1NTQsIDB4 MUZ9LA0KPiArCXsweDM1NTUsIDB4MDF9LA0KPiArCXsweDM1NTYsIDB4MDF9LA0KPiArCXsweDM1 NTcsIDB4MDF9LA0KPiArCXsweDM1NTgsIDB4MDF9LA0KPiArCXsweDM1NTksIDB4MDB9LA0KPiAr CXsweDM1NUEsIDB4MDB9LA0KPiArCXsweDM1QkEsIDB4MEV9LA0KPiArCXsweDM2NkEsIDB4MUJ9 LA0KPiArCXsweDM2NkIsIDB4MUF9LA0KPiArCXsweDM2NkMsIDB4MTl9LA0KPiArCXsweDM2NkQs IDB4MTd9LA0KPiArCXsweDNBNDEsIDB4MDh9LA0KPiArDQo+ICsJe0lNWDI3NF9UQUJMRV9FTkQs IDB4MDB9DQo+ICt9Ow0KPiArDQo+ICsvKg0KPiArICogSG9yaXpvbnRhbC92ZXJ0aWNhbCAyLzIt bGluZSBiaW5uaW5nDQo+ICsgKiAoSG9yaXpvbnRhbCBhbmQgdmVydGljYWwgd2VpZ2h0ZWRiaW5u aW5nLCAxMC1iaXQpDQo+ICsgKiBpbXgyNzQgbW9kZTMocmVmZXIgdG8gZGF0YXNoZWV0KSByZWdp c3RlciBjb25maWd1cmF0aW9uIHdpdGgNCj4gKyAqIDE5MjB4MTA4MCByZXNvbHV0aW9uLCByYXcx MCBkYXRhIGFuZCBtaXBpIGZvdXIgbGFuZSBvdXRwdXQNCj4gKyAqLw0KPiArc3RhdGljIGNvbnN0 IHN0cnVjdCByZWdfOCBpbXgyNzRfbW9kZTNfMTkyMHgxMDgwX3JhdzEwW10gPSB7DQo+ICsJezB4 MzAwNCwgMHgwMn0sDQo+ICsJezB4MzAwNSwgMHgyMX0sDQo+ICsJezB4MzAwNiwgMHgwMH0sDQo+ ICsJezB4MzAwNywgMHgxMX0sDQo+ICsNCj4gKwl7MHgzMDE4LCAweEEyfSwgLyogb3V0cHV0IFhW UywgSFZTICovDQo+ICsNCj4gKwl7MHgzMDZCLCAweDA1fSwNCj4gKwl7MHgzMEUyLCAweDAyfSwN Cj4gKw0KPiArCXsweDMwRjYsIDB4MDR9LCAvKiBITUFYLCAyNjAgKi8NCj4gKwl7MHgzMEY3LCAw eDAxfSwgLyogSE1BWCAqLw0KPiArDQo+ICsJezB4MzBkZCwgMHgwMX0sIC8qIHRvIGNyb3AgdG8g MTkyMHgxMDgwICovDQo+ICsJezB4MzBkZSwgMHgwNX0sDQo+ICsJezB4MzBkZiwgMHgwMH0sDQo+ ICsJezB4MzBlMCwgMHgwNH0sDQo+ICsJezB4MzBlMSwgMHgwMH0sDQo+ICsJezB4MzAzNywgMHgw MX0sDQo+ICsJezB4MzAzOCwgMHgwY30sDQo+ICsJezB4MzAzOSwgMHgwMH0sDQo+ICsJezB4MzAz YSwgMHgwY30sDQo+ICsJezB4MzAzYiwgMHgwZn0sDQo+ICsNCj4gKwl7MHgzMEVFLCAweDAxfSwN Cj4gKwl7MHgzMTMwLCAweDRFfSwNCj4gKwl7MHgzMTMxLCAweDA0fSwNCj4gKwl7MHgzMTMyLCAw eDQ2fSwNCj4gKwl7MHgzMTMzLCAweDA0fSwNCj4gKwl7MHgzMzQyLCAweDBBfSwNCj4gKwl7MHgz MzQzLCAweDAwfSwNCj4gKwl7MHgzMzQ0LCAweDFBfSwNCj4gKwl7MHgzMzQ1LCAweDAwfSwNCj4g Kwl7MHgzM0E2LCAweDAxfSwNCj4gKwl7MHgzNTI4LCAweDBFfSwNCj4gKwl7MHgzNTU0LCAweDAw fSwNCj4gKwl7MHgzNTU1LCAweDAxfSwNCj4gKwl7MHgzNTU2LCAweDAxfSwNCj4gKwl7MHgzNTU3 LCAweDAxfSwNCj4gKwl7MHgzNTU4LCAweDAxfSwNCj4gKwl7MHgzNTU5LCAweDAwfSwNCj4gKwl7 MHgzNTVBLCAweDAwfSwNCj4gKwl7MHgzNUJBLCAweDBFfSwNCj4gKwl7MHgzNjZBLCAweDFCfSwN Cj4gKwl7MHgzNjZCLCAweDFBfSwNCj4gKwl7MHgzNjZDLCAweDE5fSwNCj4gKwl7MHgzNjZELCAw eDE3fSwNCj4gKwl7MHgzQTQxLCAweDA4fSwNCj4gKw0KPiArCXtJTVgyNzRfVEFCTEVfRU5ELCAw eDAwfQ0KPiArfTsNCj4gKw0KPiArLyoNCj4gKyAqIFZlcnRpY2FsIDIvMyBzdWJzYW1wbGluZyBi aW5uaW5nIGhvcml6b250YWwgMyBiaW5uaW5nDQo+ICsgKiBpbXgyNzQgbW9kZTUocmVmZXIgdG8g ZGF0YXNoZWV0KSByZWdpc3RlciBjb25maWd1cmF0aW9uIHdpdGgNCj4gKyAqIDEyODB4NzIwIHJl c29sdXRpb24sIHJhdzEwIGRhdGEgYW5kIG1pcGkgZm91ciBsYW5lIG91dHB1dA0KPiArICovDQo+ ICtzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ184IGlteDI3NF9tb2RlNV8xMjgweDcyMF9yYXcxMFtd ID0gew0KPiArCXsweDMwMDQsIDB4MDN9LA0KPiArCXsweDMwMDUsIDB4MzF9LA0KPiArCXsweDMw MDYsIDB4MDB9LA0KPiArCXsweDMwMDcsIDB4MDl9LA0KPiArDQo+ICsJezB4MzAxOCwgMHhBMn0s IC8qIG91dHB1dCBYVlMsIEhWUyAqLw0KPiArDQo+ICsJezB4MzA2QiwgMHgwNX0sDQo+ICsJezB4 MzBFMiwgMHgwM30sDQo+ICsNCj4gKwl7MHgzMEY2LCAweDA0fSwgLyogSE1BWCwgMjYwICovDQo+ ICsJezB4MzBGNywgMHgwMX0sIC8qIEhNQVggKi8NCj4gKw0KPiArCXsweDMwREQsIDB4MDF9LA0K PiArCXsweDMwREUsIDB4MDd9LA0KPiArCXsweDMwREYsIDB4MDB9LA0KPiArCXsweDQwRTAsIDB4 MDR9LA0KPiArCXsweDMwRTEsIDB4MDB9LA0KPiArCXsweDMwMzAsIDB4RDR9LA0KPiArCXsweDMw MzEsIDB4MDJ9LA0KPiArCXsweDMwMzIsIDB4RDB9LA0KPiArCXsweDMwMzMsIDB4MDJ9LA0KPiAr DQo+ICsJezB4MzBFRSwgMHgwMX0sDQo+ICsJezB4MzEzMCwgMHhFMn0sDQo+ICsJezB4MzEzMSwg MHgwMn0sDQo+ICsJezB4MzEzMiwgMHhERX0sDQo+ICsJezB4MzEzMywgMHgwMn0sDQo+ICsJezB4 MzM0MiwgMHgwQX0sDQo+ICsJezB4MzM0MywgMHgwMH0sDQo+ICsJezB4MzM0NCwgMHgxQn0sDQo+ ICsJezB4MzM0NSwgMHgwMH0sDQo+ICsJezB4MzNBNiwgMHgwMX0sDQo+ICsJezB4MzUyOCwgMHgw RX0sDQo+ICsJezB4MzU1NCwgMHgwMH0sDQo+ICsJezB4MzU1NSwgMHgwMX0sDQo+ICsJezB4MzU1 NiwgMHgwMX0sDQo+ICsJezB4MzU1NywgMHgwMX0sDQo+ICsJezB4MzU1OCwgMHgwMX0sDQo+ICsJ ezB4MzU1OSwgMHgwMH0sDQo+ICsJezB4MzU1QSwgMHgwMH0sDQo+ICsJezB4MzVCQSwgMHgwRX0s DQo+ICsJezB4MzY2QSwgMHgxQn0sDQo+ICsJezB4MzY2QiwgMHgxOX0sDQo+ICsJezB4MzY2Qywg MHgxN30sDQo+ICsJezB4MzY2RCwgMHgxN30sDQo+ICsJezB4M0E0MSwgMHgwNH0sDQo+ICsNCj4g Kwl7SU1YMjc0X1RBQkxFX0VORCwgMHgwMH0NCj4gK307DQo+ICsNCj4gKy8qDQo+ICsgKiBpbXgy NzQgZmlyc3Qgc3RlcCByZWdpc3RlciBjb25maWd1cmF0aW9uIGZvcg0KPiArICogc3RhcnRpbmcg c3RyZWFtDQo+ICsgKi8NCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnXzggaW14Mjc0X3N0YXJ0 XzFbXSA9IHsNCj4gKwl7SU1YMjc0X1NUQU5EQllfUkVHLCAweDEyfSwNCj4gKwl7SU1YMjc0X1RB QkxFX0VORCwgMHgwMH0NCj4gK307DQo+ICsNCj4gKy8qDQo+ICsgKiBpbXgyNzQgc2Vjb25kIHN0 ZXAgcmVnaXN0ZXIgY29uZmlndXJhdGlvbiBmb3INCj4gKyAqIHN0YXJ0aW5nIHN0cmVhbQ0KPiAr ICovDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ184IGlteDI3NF9zdGFydF8yW10gPSB7DQo+ ICsJezB4MzEyMCwgMHhGMH0sIC8qIGNsb2NrIHNldHRpbmdzICovDQo+ICsJezB4MzEyMSwgMHgw MH0sIC8qIGNsb2NrIHNldHRpbmdzICovDQo+ICsJezB4MzEyMiwgMHgwMn0sIC8qIGNsb2NrIHNl dHRpbmdzICovDQo+ICsJezB4MzEyOSwgMHg5Q30sIC8qIGNsb2NrIHNldHRpbmdzICovDQo+ICsJ ezB4MzEyQSwgMHgwMn0sIC8qIGNsb2NrIHNldHRpbmdzICovDQo+ICsJezB4MzEyRCwgMHgwMn0s IC8qIGNsb2NrIHNldHRpbmdzICovDQo+ICsNCj4gKwl7MHgzMTBCLCAweDAwfSwNCj4gKw0KPiAr CS8qIFBMU1RNRyAqLw0KPiArCXsweDMwNEMsIDB4MDB9LCAvKiBQTFNUTUcwMSAqLw0KPiArCXsw eDMwNEQsIDB4MDN9LA0KPiArCXsweDMzMUMsIDB4MUF9LA0KPiArCXsweDMzMUQsIDB4MDB9LA0K PiArCXsweDM1MDIsIDB4MDJ9LA0KPiArCXsweDM1MjksIDB4MEV9LA0KPiArCXsweDM1MkEsIDB4 MEV9LA0KPiArCXsweDM1MkIsIDB4MEV9LA0KPiArCXsweDM1MzgsIDB4MEV9LA0KPiArCXsweDM1 MzksIDB4MEV9LA0KPiArCXsweDM1NTMsIDB4MDB9LA0KPiArCXsweDM1N0QsIDB4MDV9LA0KPiAr CXsweDM1N0YsIDB4MDV9LA0KPiArCXsweDM1ODEsIDB4MDR9LA0KPiArCXsweDM1ODMsIDB4NzZ9 LA0KPiArCXsweDM1ODcsIDB4MDF9LA0KPiArCXsweDM1QkIsIDB4MEV9LA0KPiArCXsweDM1QkMs IDB4MEV9LA0KPiArCXsweDM1QkQsIDB4MEV9LA0KPiArCXsweDM1QkUsIDB4MEV9LA0KPiArCXsw eDM1QkYsIDB4MEV9LA0KPiArCXsweDM2NkUsIDB4MDB9LA0KPiArCXsweDM2NkYsIDB4MDB9LA0K PiArCXsweDM2NzAsIDB4MDB9LA0KPiArCXsweDM2NzEsIDB4MDB9LA0KPiArDQo+ICsJLyogUFNN SVBJICovDQo+ICsJezB4MzMwNCwgMHgzMn0sIC8qIFBTTUlQSTEgKi8NCj4gKwl7MHgzMzA1LCAw eDAwfSwNCj4gKwl7MHgzMzA2LCAweDMyfSwNCj4gKwl7MHgzMzA3LCAweDAwfSwNCj4gKwl7MHgz NTkwLCAweDMyfSwNCj4gKwl7MHgzNTkxLCAweDAwfSwNCj4gKwl7MHgzNjg2LCAweDMyfSwNCj4g Kwl7MHgzNjg3LCAweDAwfSwNCj4gKw0KPiArCXtJTVgyNzRfVEFCTEVfRU5ELCAweDAwfQ0KPiAr fTsNCj4gKw0KPiArLyoNCj4gKyAqIGlteDI3NCB0aGlyZCBzdGVwIHJlZ2lzdGVyIGNvbmZpZ3Vy YXRpb24gZm9yDQo+ICsgKiBzdGFydGluZyBzdHJlYW0NCj4gKyAqLw0KPiArc3RhdGljIGNvbnN0 IHN0cnVjdCByZWdfOCBpbXgyNzRfc3RhcnRfM1tdID0gew0KPiArCXtJTVgyNzRfU1RBTkRCWV9S RUcsIDB4MDB9LA0KPiArCXsweDMwM0UsIDB4MDJ9LCAvKiBTWVNfTU9ERSA9IDIgKi8NCj4gKwl7 SU1YMjc0X1RBQkxFX0VORCwgMHgwMH0NCj4gK307DQo+ICsNCj4gKy8qDQo+ICsgKiBpbXgyNzQg Zm9ydGggc3RlcCByZWdpc3RlciBjb25maWd1cmF0aW9uIGZvcg0KPiArICogc3RhcnRpbmcgc3Ry ZWFtDQo+ICsgKi8NCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnXzggaW14Mjc0X3N0YXJ0XzRb XSA9IHsNCj4gKwl7MHgzMEY0LCAweDAwfSwNCj4gKwl7MHgzMDE4LCAweEEyfSwgLyogWEhTIFZI UyBPVVRVUFQgKi8NCj4gKwl7SU1YMjc0X1RBQkxFX0VORCwgMHgwMH0NCj4gK307DQo+ICsNCj4g Ky8qDQo+ICsgKiBpbXgyNzQgcmVnaXN0ZXIgY29uZmlndXJhdGlvbiBmb3Igc3RvcGluZyBzdHJl YW0NCj4gKyAqLw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCByZWdfOCBpbXgyNzRfc3RvcFtdID0g ew0KPiArCXtJTVgyNzRfU1RBTkRCWV9SRUcsIDB4MDF9LA0KPiArCXtJTVgyNzRfVEFCTEVfRU5E LCAweDAwfQ0KPiArfTsNCj4gKw0KPiArLyoNCj4gKyAqIGlteDI3NCBkaXNhYmxlIHRlc3QgcGF0 dGVybiByZWdpc3RlciBjb25maWd1cmF0aW9uDQo+ICsgKi8NCj4gK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgcmVnXzggaW14Mjc0X3RwX2Rpc2FibGVkW10gPSB7DQo+ICsJezB4MzAzQywgMHgwMH0sDQo+ ICsJezB4Mzc3RiwgMHgwMH0sDQo+ICsJezB4Mzc4MSwgMHgwMH0sDQo+ICsJezB4MzcwQiwgMHgw MH0sDQo+ICsJe0lNWDI3NF9UQUJMRV9FTkQsIDB4MDB9DQo+ICt9Ow0KPiArDQo+ICsvKg0KPiAr ICogaW14Mjc0IHRlc3QgcGF0dGVybiByZWdpc3RlciBjb25maWd1cmF0aW9uDQo+ICsgKiByZWcg MHgzMDNEIGRlZmluZXMgdGhlIHRlc3QgcGF0dGVybiBtb2Rlcw0KPiArICovDQo+ICtzdGF0aWMg Y29uc3Qgc3RydWN0IHJlZ184IGlteDI3NF90cF9yZWdzW10gPSB7DQo+ICsJezB4MzAzQywgMHgx MX0sDQo+ICsJezB4MzcwRSwgMHgwMX0sDQo+ICsJezB4Mzc3RiwgMHgwMX0sDQo+ICsJezB4Mzc4 MSwgMHgwMX0sDQo+ICsJezB4MzcwQiwgMHgxMX0sDQo+ICsJe0lNWDI3NF9UQUJMRV9FTkQsIDB4 MDB9DQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ184ICptb2RlX3RhYmxl W10gPSB7DQo+ICsJW0lNWDI3NF9NT0RFXzM4NDBYMjE2MF0JCT0NCj4gaW14Mjc0X21vZGUxXzM4 NDB4MjE2MF9yYXcxMCwNCj4gKwlbSU1YMjc0X01PREVfMTkyMFgxMDgwXQkJPQ0KPiBpbXgyNzRf bW9kZTNfMTkyMHgxMDgwX3JhdzEwLA0KPiArCVtJTVgyNzRfTU9ERV8xMjgwWDcyMF0JCT0NCj4g aW14Mjc0X21vZGU1XzEyODB4NzIwX3JhdzEwLA0KPiArDQo+ICsJW0lNWDI3NF9NT0RFX1NUQVJU X1NUUkVBTV8xXQk9IGlteDI3NF9zdGFydF8xLA0KPiArCVtJTVgyNzRfTU9ERV9TVEFSVF9TVFJF QU1fMl0JPSBpbXgyNzRfc3RhcnRfMiwNCj4gKwlbSU1YMjc0X01PREVfU1RBUlRfU1RSRUFNXzNd CT0gaW14Mjc0X3N0YXJ0XzMsDQo+ICsJW0lNWDI3NF9NT0RFX1NUQVJUX1NUUkVBTV80XQk9IGlt eDI3NF9zdGFydF80LA0KPiArCVtJTVgyNzRfTU9ERV9TVE9QX1NUUkVBTV0JPSBpbXgyNzRfc3Rv cCwNCj4gK307DQo+ICsNCj4gKy8qDQo+ICsgKiBpbXgyNzQgZm9ybWF0IHJlbGF0ZWQgc3RydWN0 dXJlDQo+ICsgKi8NCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW14Mjc0X2ZybWZtdCBpbXgyNzRf Zm9ybWF0c1tdID0gew0KPiArCXtNRURJQV9CVVNfRk1UX1NSR0dCMTBfMVgxMCwgVjRMMl9DT0xP UlNQQUNFX1NSR0IsIHszODQwLA0KPiAyMTYwfSwNCj4gKwkJSU1YMjc0X01PREVfMzg0MFgyMTYw fSwNCj4gKwl7TUVESUFfQlVTX0ZNVF9TUkdHQjEwXzFYMTAsIFY0TDJfQ09MT1JTUEFDRV9TUkdC LCB7MTkyMCwNCj4gMTA4MH0sDQo+ICsJCUlNWDI3NF9NT0RFXzE5MjBYMTA4MH0sDQo+ICsJe01F RElBX0JVU19GTVRfU1JHR0IxMF8xWDEwLCBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwgezEyODAsDQo+ IDcyMH0sDQo+ICsJCUlNWDI3NF9NT0RFXzEyODBYNzIwfSwNCj4gK307DQo+ICsNCj4gKy8qDQo+ ICsgKiBtaW5pbWFsIGZyYW1lIGxlbmd0aCBmb3IgZWFjaCBtb2RlDQo+ICsgKiByZWZlciB0byBk YXRhc2hlZXQgc2VjdGlvbiAiRnJhbWUgUmF0ZSBBZGp1c3RtZW50IChDU0ktMikiDQo+ICsgKi8N Cj4gK3N0YXRpYyBjb25zdCBpbnQgbWluX2ZyYW1lX2xlbltdID0gew0KPiArCTQ1NTAsIC8qIG1v ZGUgMSwgNEsgKi8NCj4gKwkyMzEwLCAvKiBtb2RlIDMsIDEwODBwICovDQo+ICsJMjMxMCAvKiBt b2RlIDUsIDcyMHAgKi8NCj4gK307DQo+ICsNCj4gKy8qDQo+ICsgKiBtaW5pbWFsIG51bWJlcnMg b2YgU0hSIHJlZ2lzdGVyDQo+ICsgKiByZWZlciB0byBkYXRhc2hlZXQgdGFibGUgIlNodXR0ZXIg U2V0dGluZyAoQ1NJLTIpIg0KPiArICovDQo+ICtzdGF0aWMgY29uc3QgaW50IG1pbl9TSFJbXSA9 IHsNCj4gKwkxMiwgLyogbW9kZSAxLCA0SyAqLw0KPiArCTgsIC8qIG1vZGUgMywgMTA4MHAgKi8N Cj4gKwk4IC8qIG1vZGUgNSwgNzIwcCAqLw0KPiArfTsNCj4gKw0KPiArc3RhdGljIGNvbnN0IGlu dCBtYXhfZnJhbWVfcmF0ZVtdID0gew0KPiArCTYwLCAvKiBtb2RlIDEgLCA0SyAqLw0KPiArCTEy MCwgLyogbW9kZSAzLCAxMDgwcCAqLw0KPiArCTEyMCAvKiBtb2RlIDUsIDcyMHAgKi8NCj4gK307 DQo+ICsNCj4gKy8qDQo+ICsgKiBOdW1iZXIgb2YgY2xvY2tzIHBlciBpbnRlcm5hbCBvZmZzZXQg cGVyaW9kDQo+ICsgKiBhIGNvbnN0YW50IGJhc2VkIG9uIG1vZGUNCj4gKyAqIHJlZmVyIHRvIHNl Y3Rpb24gIkludGVncmF0aW9uIFRpbWUgaW4gRWFjaCBSZWFkb3V0IERyaXZlIE1vZGUgKENTSS0y KSINCj4gKyAqIGluIHRoZSBkYXRhc2hlZXQNCj4gKyAqIGZvciB0aGUgaW1wbGVtZW50ZWQgMyBt b2RlcywgaXQgaGFwcGVucyB0byBiZSB0aGUgc2FtZSBudW1iZXINCj4gKyAqLw0KPiArc3RhdGlj IGNvbnN0IGludCBub2NwaW9wW10gPSB7DQo+ICsJMTEyLCAvKiBtb2RlIDEgLCA0SyAqLw0KPiAr CTExMiwgLyogbW9kZSAzLCAxMDgwcCAqLw0KPiArCTExMiAvKiBtb2RlIDUsIDcyMHAgKi8NCj4g K307DQo+ICsNCj4gKy8qDQo+ICsgKiBzdHJ1Y3QgaW14Mjc0X2N0cmxzIC0gaW14Mjc0IGN0cmwg c3RydWN0dXJlDQo+ICsgKiBAaGFuZGxlcjogVjRMMiBjdHJsIGhhbmRsZXIgc3RydWN0dXJlDQo+ ICsgKiBAZXhwb3N1cmU6IFBvaW50ZXIgdG8gZXhwc3VyZSBjdHJsIHN0cnVjdHVyZQ0KPiArICog QGdhaW46IFBvaW50ZXIgdG8gZ2FpbiBjdHJsIHN0cnVjdHVyZQ0KPiArICogQHZmbGlwOiBQb2lu dGVyIHRvIHZmbGlwIGN0cmwgc3RydWN0dXJlDQo+ICsgKiBAdGVzdF9wYXR0ZXJuOiBQb2ludGVy IHRvIHRlc3QgcGF0dGVybiBjdHJsIHN0cnVjdHVyZQ0KPiArICovDQo+ICtzdHJ1Y3QgaW14Mjc0 X2N0cmxzIHsNCj4gKwlzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgaGFuZGxlcjsNCj4gKwlzdHJ1 Y3QgdjRsMl9jdHJsICpleHBvc3VyZTsNCj4gKwlzdHJ1Y3QgdjRsMl9jdHJsICpnYWluOw0KPiAr CXN0cnVjdCB2NGwyX2N0cmwgKnZmbGlwOw0KPiArCXN0cnVjdCB2NGwyX2N0cmwgKnRlc3RfcGF0 dGVybjsNCj4gK307DQo+ICsNCj4gKy8qDQo+ICsgKiBzdHJ1Y3Qgc3RpbTI3NCAtIGlteDI3NCBk ZXZpY2Ugc3RydWN0dXJlDQo+ICsgKiBAc2Q6IFY0TDIgc3ViZGV2aWNlIHN0cnVjdHVyZQ0KPiAr ICogQHBkOiBNZWRpYSBwYWQgc3RydWN0dXJlDQo+ICsgKiBAY2xpZW50OiBQb2ludGVyIHRvIEky QyBjbGllbnQNCj4gKyAqIEBjdHJsczogaW14Mjc0IGNvbnRyb2wgc3RydWN0dXJlDQo+ICsgKiBA Zm9ybWF0OiBWNEwyIG1lZGlhIGJ1cyBmcmFtZSBmb3JtYXQgc3RydWN0dXJlDQo+ICsgKiBAZnJh bWVfcmF0ZTogVjRMMiBmcmFtZSByYXRlIHN0cnVjdHVyZQ0KPiArICogQHJlZ21hcDogUG9pbnRl ciB0byByZWdtYXAgc3RydWN0dXJlDQo+ICsgKiBAcmVzZXRfZ3BpbzogUG9pbnRlciB0byByZXNl dCBncGlvDQo+ICsgKiBAbG9jazogTXV0ZXggc3RydWN0dXJlDQo+ICsgKiBAbW9kZV9pbmRleDog UmVzb2x1dGlvbiBtb2RlIGluZGV4DQo+ICsgKi8NCj4gK3N0cnVjdCBzdGlteDI3NCB7DQo+ICsJ c3RydWN0IHY0bDJfc3ViZGV2IHNkOw0KPiArCXN0cnVjdCBtZWRpYV9wYWQgcGFkOw0KPiArCXN0 cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7DQo+ICsJc3RydWN0IGlteDI3NF9jdHJscyBjdHJsczsN Cj4gKwlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10IGZvcm1hdDsNCj4gKwlzdHJ1Y3QgdjRsMl9m cmFjdCBmcmFtZV9pbnRlcnZhbDsNCj4gKwlzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7DQo+ICsJc3Ry dWN0IGdwaW9fZGVzYyAqcmVzZXRfZ3BpbzsNCj4gKwlzdHJ1Y3QgbXV0ZXggbG9jazsgLyogbXV0 ZXggbG9jayBmb3Igb3BlcmF0aW9ucyAqLw0KPiArCXUzMiBtb2RlX2luZGV4Ow0KPiArfTsNCj4g Kw0KPiArLyoNCj4gKyAqIEZ1bmN0aW9uIGRlY2xhcmF0aW9uDQo+ICsgKi8NCj4gK3N0YXRpYyBp bnQgaW14Mjc0X3NldF9nYWluKHN0cnVjdCBzdGlteDI3NCAqcHJpdiwgc3RydWN0IHY0bDJfY3Ry bCAqY3RybCk7DQo+ICtzdGF0aWMgaW50IGlteDI3NF9zZXRfZXhwb3N1cmUoc3RydWN0IHN0aW14 Mjc0ICpwcml2LCBpbnQgdmFsKTsNCj4gK3N0YXRpYyBpbnQgaW14Mjc0X3NldF92ZmxpcChzdHJ1 Y3Qgc3RpbXgyNzQgKnByaXYsIGludCB2YWwpOw0KPiArc3RhdGljIGludCBpbXgyNzRfc2V0X3Rl c3RfcGF0dGVybihzdHJ1Y3Qgc3RpbXgyNzQgKnByaXYsIGludCB2YWwpOw0KPiArc3RhdGljIGlu dCBpbXgyNzRfc2V0X2ZyYW1lX2ludGVydmFsKHN0cnVjdCBzdGlteDI3NCAqcHJpdiwNCj4gKwkJ CQkgICAgIHN0cnVjdCB2NGwyX2ZyYWN0IGZyYW1lX2ludGVydmFsKTsNCj4gKw0KPiArc3RhdGlj IGlubGluZSB2b2lkIG1zbGVlcF9yYW5nZSh1bnNpZ25lZCBpbnQgZGVsYXlfYmFzZSkNCj4gK3sN Cj4gKwl1c2xlZXBfcmFuZ2UoZGVsYXlfYmFzZSAqIDEwMDAsIGRlbGF5X2Jhc2UgKiAxMDAwICsg NTAwKTsNCj4gK30NCj4gKw0KPiArLyoNCj4gKyAqIHY0bDJfY3RybCBhbmQgdjRsMl9zdWJkZXYg cmVsYXRlZCBvcGVyYXRpb25zDQo+ICsgKi8NCj4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IHY0bDJf c3ViZGV2ICpjdHJsX3RvX3NkKHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwpDQo+ICt7DQo+ICsJcmV0 dXJuICZjb250YWluZXJfb2YoY3RybC0+aGFuZGxlciwNCj4gKwkJCSAgICAgc3RydWN0IHN0aW14 Mjc0LCBjdHJscy5oYW5kbGVyKS0+c2Q7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUgc3Ry dWN0IHN0aW14Mjc0ICp0b19pbXgyNzQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkNCj4gK3sNCj4g KwlyZXR1cm4gY29udGFpbmVyX29mKHNkLCBzdHJ1Y3Qgc3RpbXgyNzQsIHNkKTsNCj4gK30NCj4g Kw0KPiArLyoNCj4gKyAqIGlteDI3NF9yZWdtYXBfdXRpbF93cml0ZV90YWJsZV84IC0gRnVuY3Rp b24gZm9yIHdyaXRpbmcgcmVnaXN0ZXIgdGFibGUNCj4gKyAqIEByZWdtYXA6IFBvaW50ZXIgdG8g ZGV2aWNlIHJlZyBtYXAgc3RydWN0dXJlDQo+ICsgKiBAdGFibGU6IFRhYmxlIGNvbnRhaW5pbmcg cmVnaXN0ZXIgdmFsdWVzDQo+ICsgKiBAd2FpdF9tc19hZGRyOiBGbGFnIGZvciBwZXJmb3JtaW5n IGRlbGF5DQo+ICsgKiBAZW5kX2FkZHI6IEZsYWcgZm9yIGluY2F0aW5nIGVuZCBvZiB0YWJsZQ0K PiArICoNCj4gKyAqIFRoaXMgaXMgdXNlZCB0byB3cml0ZSByZWdpc3RlciB0YWJsZSBpbnRvIHNl bnNvcidzIHJlZyBtYXAuDQo+ICsgKg0KPiArICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIGVycm9y cyBvdGhlcndpc2UNCj4gKyAqLw0KPiArc3RhdGljIGludCBpbXgyNzRfcmVnbWFwX3V0aWxfd3Jp dGVfdGFibGVfOChzdHJ1Y3QgcmVnbWFwICpyZWdtYXAsDQo+ICsJCQkJCSAgICBjb25zdCBzdHJ1 Y3QgcmVnXzggdGFibGVbXSwNCj4gKwkJCQkJICAgIHUxNiB3YWl0X21zX2FkZHIsIHUxNiBlbmRf YWRkcikNCj4gK3sNCj4gKwlpbnQgZXJyOw0KPiArCWNvbnN0IHN0cnVjdCByZWdfOCAqbmV4dDsN Cj4gKwl1OCB2YWw7DQo+ICsNCj4gKwlpbnQgcmFuZ2Vfc3RhcnQgPSAtMTsNCj4gKwlpbnQgcmFu Z2VfY291bnQgPSAwOw0KPiArCXU4IHJhbmdlX3ZhbHNbMTZdOw0KPiArCWludCBtYXhfcmFuZ2Vf dmFscyA9IEFSUkFZX1NJWkUocmFuZ2VfdmFscyk7DQo+ICsNCj4gKwlmb3IgKG5leHQgPSB0YWJs ZTs7IG5leHQrKykgew0KPiArCQlpZiAoKG5leHQtPmFkZHIgIT0gcmFuZ2Vfc3RhcnQgKyByYW5n ZV9jb3VudCkgfHwNCj4gKwkJICAgIChuZXh0LT5hZGRyID09IGVuZF9hZGRyKSB8fA0KPiArCQkg ICAgKG5leHQtPmFkZHIgPT0gd2FpdF9tc19hZGRyKSB8fA0KPiArCQkgICAgKHJhbmdlX2NvdW50 ID09IG1heF9yYW5nZV92YWxzKSkgew0KPiArCQkJaWYgKHJhbmdlX2NvdW50ID09IDEpDQo+ICsJ CQkJZXJyID0gcmVnbWFwX3dyaXRlKHJlZ21hcCwNCj4gKwkJCQkJCSAgIHJhbmdlX3N0YXJ0LCBy YW5nZV92YWxzWzBdKTsNCj4gKwkJCWVsc2UgaWYgKHJhbmdlX2NvdW50ID4gMSkNCj4gKwkJCQll cnIgPSByZWdtYXBfYnVsa193cml0ZShyZWdtYXAsIHJhbmdlX3N0YXJ0LA0KPiArCQkJCQkJCSZy YW5nZV92YWxzWzBdLA0KPiArCQkJCQkJCXJhbmdlX2NvdW50KTsNCj4gKw0KPiArCQkJaWYgKGVy cikNCj4gKwkJCQlyZXR1cm4gZXJyOw0KPiArDQo+ICsJCQlyYW5nZV9zdGFydCA9IC0xOw0KPiAr CQkJcmFuZ2VfY291bnQgPSAwOw0KPiArDQo+ICsJCQkvKiBIYW5kbGUgc3BlY2lhbCBhZGRyZXNz IHZhbHVlcyAqLw0KPiArCQkJaWYgKG5leHQtPmFkZHIgPT0gZW5kX2FkZHIpDQo+ICsJCQkJYnJl YWs7DQo+ICsNCj4gKwkJCWlmIChuZXh0LT5hZGRyID09IHdhaXRfbXNfYWRkcikgew0KPiArCQkJ CW1zbGVlcF9yYW5nZShuZXh0LT52YWwpOw0KPiArCQkJCWNvbnRpbnVlOw0KPiArCQkJfQ0KPiAr CQl9DQo+ICsNCj4gKwkJdmFsID0gbmV4dC0+dmFsOw0KPiArDQo+ICsJCWlmIChyYW5nZV9zdGFy dCA9PSAtMSkNCj4gKwkJCXJhbmdlX3N0YXJ0ID0gbmV4dC0+YWRkcjsNCj4gKw0KPiArCQlyYW5n ZV92YWxzW3JhbmdlX2NvdW50KytdID0gdmFsOw0KPiArCX0NCj4gKwlyZXR1cm4gMDsNCj4gK30N Cj4gKw0KPiArc3RhdGljIGlubGluZSBpbnQgaW14Mjc0X3JlYWRfcmVnKHN0cnVjdCBzdGlteDI3 NCAqcHJpdiwgdTE2IGFkZHIsIHU4ICp2YWwpDQo+ICt7DQo+ICsJaW50IGVycjsNCj4gKw0KPiAr CWVyciA9IHJlZ21hcF9yZWFkKHByaXYtPnJlZ21hcCwgYWRkciwgKHVuc2lnbmVkIGludCAqKXZh bCk7DQo+ICsJaWYgKGVycikNCj4gKwkJZGV2X2VycigmcHJpdi0+Y2xpZW50LT5kZXYsDQo+ICsJ CQkiJXMgOiBpMmMgcmVhZCBmYWlsZWQsIGFkZHIgPSAleFxuIiwgX19mdW5jX18sIGFkZHIpOw0K PiArCWVsc2UNCj4gKwkJZGV2X2RiZygmcHJpdi0+Y2xpZW50LT5kZXYsDQo+ICsJCQkiJXMgOiBh ZGRyIDB4JXgsIHZhbD0weCV4XG4iLCBfX2Z1bmNfXywNCj4gKwkJCWFkZHIsICp2YWwpOw0KPiAr CXJldHVybiBlcnI7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUgaW50IGlteDI3NF93cml0 ZV9yZWcoc3RydWN0IHN0aW14Mjc0ICpwcml2LCB1MTYgYWRkciwgdTggdmFsKQ0KPiArew0KPiAr CWludCBlcnI7DQo+ICsNCj4gKwllcnIgPSByZWdtYXBfd3JpdGUocHJpdi0+cmVnbWFwLCBhZGRy LCB2YWwpOw0KPiArCWlmIChlcnIpDQo+ICsJCWRldl9lcnIoJnByaXYtPmNsaWVudC0+ZGV2LA0K PiArCQkJIiVzIDogaTJjIHdyaXRlIGZhaWxlZCwgJXggPSAleFxuIiwgX19mdW5jX18sDQo+ICsJ CQlhZGRyLCB2YWwpOw0KPiArCWVsc2UNCj4gKwkJZGV2X2RiZygmcHJpdi0+Y2xpZW50LT5kZXYs DQo+ICsJCQkiJXMgOiBhZGRyIDB4JXgsIHZhbD0weCV4XG4iLCBfX2Z1bmNfXywNCj4gKwkJCWFk ZHIsIHZhbCk7DQo+ICsJcmV0dXJuIGVycjsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBpbXgy NzRfd3JpdGVfdGFibGUoc3RydWN0IHN0aW14Mjc0ICpwcml2LCBjb25zdCBzdHJ1Y3QgcmVnXzgg dGFibGVbXSkNCj4gK3sNCj4gKwlyZXR1cm4gaW14Mjc0X3JlZ21hcF91dGlsX3dyaXRlX3RhYmxl XzgocHJpdi0+cmVnbWFwLA0KPiArCQl0YWJsZSwgSU1YMjc0X1RBQkxFX1dBSVRfTVMsIElNWDI3 NF9UQUJMRV9FTkQpOw0KPiArfQ0KPiArDQo+ICsvKg0KPiArICogaW14Mjc0X21vZGVfcmVncyAt IEZ1bmN0aW9uIGZvciBzZXQgbW9kZSByZWdpc3RlcnMgcGVyIG1vZGUgaW5kZXgNCj4gKyAqIEBw cml2OiBQb2ludGVyIHRvIGRldmljZSBzdHJ1Y3R1cmUNCj4gKyAqIEBtb2RlOiBNb2RlIGluZGV4 IHZhbHVlDQo+ICsgKg0KPiArICogVGhpcyBpcyB1c2VkIHRvIHN0YXJ0IHN0ZWFtIHBlciBtb2Rl IGluZGV4Lg0KPiArICogbW9kZSA9IDAsIHN0YXJ0IHN0cmVhbSBmb3Igc2Vuc29yIE1vZGUgMTog NEsvcmF3MTANCj4gKyAqIG1vZGUgPSAxLCBzdGFydCBzdHJlYW0gZm9yIHNlbnNvciBNb2RlIDM6 IDEwODBwL3JhdzEwDQo+ICsgKiBtb2RlID0gMiwgc3RhcnQgc3RyZWFtIGZvciBzZW5zb3IgTW9k ZSA1OiA3MjBwL3JhdzEwDQo+ICsgKg0KPiArICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIGVycm9y cyBvdGhlcndpc2UNCj4gKyAqLw0KPiArc3RhdGljIGludCBpbXgyNzRfbW9kZV9yZWdzKHN0cnVj dCBzdGlteDI3NCAqcHJpdiwgaW50IG1vZGUpDQo+ICt7DQo+ICsJaW50IGVyciA9IDA7DQo+ICsN Cj4gKwllcnIgPSBpbXgyNzRfd3JpdGVfdGFibGUocHJpdiwNCj4gbW9kZV90YWJsZVtJTVgyNzRf TU9ERV9TVEFSVF9TVFJFQU1fMV0pOw0KPiArCWlmIChlcnIpDQo+ICsJCXJldHVybiBlcnI7DQo+ ICsNCj4gKwllcnIgPSBpbXgyNzRfd3JpdGVfdGFibGUocHJpdiwNCj4gbW9kZV90YWJsZVtJTVgy NzRfTU9ERV9TVEFSVF9TVFJFQU1fMl0pOw0KPiArCWlmIChlcnIpDQo+ICsJCXJldHVybiBlcnI7 DQo+ICsNCj4gKwllcnIgPSBpbXgyNzRfd3JpdGVfdGFibGUocHJpdiwgbW9kZV90YWJsZVttb2Rl XSk7DQo+ICsNCj4gKwlyZXR1cm4gZXJyOw0KPiArfQ0KPiArDQo+ICsvKg0KPiArICogaW14Mjc0 X3N0YXJ0X3N0cmVhbSAtIEZ1bmN0aW9uIGZvciBzdGFydGluZyBzdHJlYW0gcGVyIG1vZGUgaW5k ZXgNCj4gKyAqIEBwcml2OiBQb2ludGVyIHRvIGRldmljZSBzdHJ1Y3R1cmUNCj4gKyAqDQo+ICsg KiBSZXR1cm46IDAgb24gc3VjY2VzcywgZXJyb3JzIG90aGVyd2lzZQ0KPiArICovDQo+ICtzdGF0 aWMgaW50IGlteDI3NF9zdGFydF9zdHJlYW0oc3RydWN0IHN0aW14Mjc0ICpwcml2KQ0KPiArew0K PiArCWludCBlcnIgPSAwOw0KPiArDQo+ICsJLyoNCj4gKwkgKiBSZWZlciB0byAiU3RhbmRieSBD YW5jZWwgU2VxdWVuY2Ugd2hlbiB1c2luZyBDU0ktMiIgaW4NCj4gKwkgKiBpbXgyNzQgZGF0YXNo ZWV0LCBpdCBzaG91bGQgd2FpdCAxMG1zIG9yIG1vcmUgaGVyZS4NCj4gKwkgKiBnaXZlIGl0IDEg ZXh0cmEgbXMgZm9yIG1hcmdpbg0KPiArCSAqLw0KPiArCW1zbGVlcF9yYW5nZSgxMSk7DQo+ICsJ ZXJyID0gaW14Mjc0X3dyaXRlX3RhYmxlKHByaXYsDQo+IG1vZGVfdGFibGVbSU1YMjc0X01PREVf U1RBUlRfU1RSRUFNXzNdKTsNCj4gKwlpZiAoZXJyKQ0KPiArCQlyZXR1cm4gZXJyOw0KPiArDQo+ ICsJLyoNCj4gKwkgKiBSZWZlciB0byAiU3RhbmRieSBDYW5jZWwgU2VxdWVuY2Ugd2hlbiB1c2lu ZyBDU0ktMiIgaW4NCj4gKwkgKiBpbXgyNzQgZGF0YXNoZWV0LCBpdCBzaG91bGQgd2FpdCA3bXMg b3IgbW9yZSBoZXJlLg0KPiArCSAqIGdpdmUgaXQgMSBleHRyYSBtcyBmb3IgbWFyZ2luDQo+ICsJ ICovDQo+ICsJbXNsZWVwX3JhbmdlKDgpOw0KPiArCWVyciA9IGlteDI3NF93cml0ZV90YWJsZShw cml2LA0KPiBtb2RlX3RhYmxlW0lNWDI3NF9NT0RFX1NUQVJUX1NUUkVBTV80XSk7DQo+ICsJaWYg KGVycikNCj4gKwkJcmV0dXJuIGVycjsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ ICsvKg0KPiArICogaW14Mjc0X3Jlc2V0IC0gRnVuY3Rpb24gY2FsbGVkIHRvIHJlc2V0IHRoZSBz ZW5zb3INCj4gKyAqIEBwcml2OiBQb2ludGVyIHRvIGRldmljZSBzdHJ1Y3R1cmUNCj4gKyAqIEBy c3Q6IElucHV0IHZhbHVlIGZvciBkZXRlcm1pbmluZyB0aGUgc2Vuc29yJ3MgZW5kIHN0YXRlIGFm dGVyIHJlc2V0DQo+ICsgKg0KPiArICogU2V0IHRoZSBzZW5vciBpbiByZXNldCBhbmQgdGhlbg0K PiArICogaWYgcnN0ID0gMCwga2VlcCBpdCBpbiByZXNldDsNCj4gKyAqIGlmIHJzdCA9IDEsIGJy aW5nIGl0IG91dCBvZiByZXNldC4NCj4gKyAqDQo+ICsgKi8NCj4gK3N0YXRpYyB2b2lkIGlteDI3 NF9yZXNldChzdHJ1Y3Qgc3RpbXgyNzQgKnByaXYsIGludCByc3QpDQo+ICt7DQo+ICsJZ3Bpb2Rf c2V0X3ZhbHVlX2NhbnNsZWVwKHByaXYtPnJlc2V0X2dwaW8sIDApOw0KPiArCXVzbGVlcF9yYW5n ZShJTVgyNzRfUkVTRVRfREVMQVkxLCBJTVgyNzRfUkVTRVRfREVMQVkyKTsNCj4gKwlncGlvZF9z ZXRfdmFsdWVfY2Fuc2xlZXAocHJpdi0+cmVzZXRfZ3BpbywgISFyc3QpOw0KPiArCXVzbGVlcF9y YW5nZShJTVgyNzRfUkVTRVRfREVMQVkxLCBJTVgyNzRfUkVTRVRfREVMQVkyKTsNCj4gK30NCj4g Kw0KPiArLyoqDQo+ICsgKiBpbXgyNzRfc19jdHJsIC0gVGhpcyBpcyB1c2VkIHRvIHNldCB0aGUg aW14Mjc0IFY0TDIgY29udHJvbHMNCj4gKyAqIEBjdHJsOiBWNEwyIGNvbnRyb2wgdG8gYmUgc2V0 DQo+ICsgKg0KPiArICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHNldCB0aGUgVjRMMiBjb250 cm9scyBmb3IgdGhlIGlteDI3NCBzZW5zb3IuDQo+ICsgKg0KPiArICogUmV0dXJuOiAwIG9uIHN1 Y2Nlc3MsIGVycm9ycyBvdGhlcndpc2UNCj4gKyAqLw0KPiArc3RhdGljIGludCBpbXgyNzRfc19j dHJsKHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwpDQo+ICt7DQo+ICsJc3RydWN0IHY0bDJfc3ViZGV2 ICpzZCA9IGN0cmxfdG9fc2QoY3RybCk7DQo+ICsJc3RydWN0IHN0aW14Mjc0ICppbXgyNzQgPSB0 b19pbXgyNzQoc2QpOw0KPiArCWludCByZXQgPSAtRUlOVkFMOw0KPiArDQo+ICsJZGV2X2RiZygm aW14Mjc0LT5jbGllbnQtPmRldiwNCj4gKwkJIiVzIDogc19jdHJsOiAlcywgdmFsdWU6ICVkXG4i LCBfX2Z1bmNfXywNCj4gKwkJY3RybC0+bmFtZSwgY3RybC0+dmFsKTsNCj4gKw0KPiArCXN3aXRj aCAoY3RybC0+aWQpIHsNCj4gKwljYXNlIFY0TDJfQ0lEX0VYUE9TVVJFOg0KPiArCQlkZXZfZGJn KCZpbXgyNzQtPmNsaWVudC0+ZGV2LA0KPiArCQkJIiVzIDogc2V0IFY0TDJfQ0lEX0VYUE9TVVJF XG4iLCBfX2Z1bmNfXyk7DQo+ICsJCXJldCA9IGlteDI3NF9zZXRfZXhwb3N1cmUoaW14Mjc0LCBj dHJsLT52YWwpOw0KPiArCQlicmVhazsNCj4gKw0KPiArCWNhc2UgVjRMMl9DSURfR0FJTjoNCj4g KwkJZGV2X2RiZygmaW14Mjc0LT5jbGllbnQtPmRldiwNCj4gKwkJCSIlcyA6IHNldCBWNEwyX0NJ RF9HQUlOXG4iLCBfX2Z1bmNfXyk7DQo+ICsJCXJldCA9IGlteDI3NF9zZXRfZ2FpbihpbXgyNzQs IGN0cmwpOw0KPiArCQlicmVhazsNCj4gKw0KPiArCWNhc2UgVjRMMl9DSURfVkZMSVA6DQo+ICsJ CWRldl9kYmcoJmlteDI3NC0+Y2xpZW50LT5kZXYsDQo+ICsJCQkiJXMgOiBzZXQgVjRMMl9DSURf VkZMSVBcbiIsIF9fZnVuY19fKTsNCj4gKwkJcmV0ID0gaW14Mjc0X3NldF92ZmxpcChpbXgyNzQs IGN0cmwtPnZhbCk7DQo+ICsJCWJyZWFrOw0KPiArDQo+ICsJY2FzZSBWNEwyX0NJRF9URVNUX1BB VFRFUk46DQo+ICsJCWRldl9kYmcoJmlteDI3NC0+Y2xpZW50LT5kZXYsDQo+ICsJCQkiJXMgOiBz ZXQgVjRMMl9DSURfVEVTVF9QQVRURVJOXG4iLCBfX2Z1bmNfXyk7DQo+ICsJCXJldCA9IGlteDI3 NF9zZXRfdGVzdF9wYXR0ZXJuKGlteDI3NCwgY3RybC0+dmFsKTsNCj4gKwkJYnJlYWs7DQo+ICsJ fQ0KPiArDQo+ICsJcmV0dXJuIHJldDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBpbXgyNzRf Z2V0X2ZtdCAtIEdldCB0aGUgcGFkIGZvcm1hdA0KPiArICogQHNkOiBQb2ludGVyIHRvIFY0TDIg U3ViIGRldmljZSBzdHJ1Y3R1cmUNCj4gKyAqIEBjZmc6IFBvaW50ZXIgdG8gc3ViIGRldmljZSBw YWQgaW5mb3JtYXRpb24gc3RydWN0dXJlDQo+ICsgKiBAZm10OiBQb2ludGVyIHRvIHBhZCBsZXZl bCBtZWRpYSBidXMgZm9ybWF0DQo+ICsgKg0KPiArICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRv IGdldCB0aGUgcGFkIGZvcm1hdCBpbmZvcm1hdGlvbi4NCj4gKyAqDQo+ICsgKiBSZXR1cm46IDAg b24gc3VjY2Vzcw0KPiArICovDQo+ICtzdGF0aWMgaW50IGlteDI3NF9nZXRfZm10KHN0cnVjdCB2 NGwyX3N1YmRldiAqc2QsDQo+ICsJCQkgIHN0cnVjdCB2NGwyX3N1YmRldl9wYWRfY29uZmlnICpj ZmcsDQo+ICsJCQkgIHN0cnVjdCB2NGwyX3N1YmRldl9mb3JtYXQgKmZtdCkNCj4gK3sNCj4gKwlz dHJ1Y3Qgc3RpbXgyNzQgKmlteDI3NCA9IHRvX2lteDI3NChzZCk7DQo+ICsNCj4gKwltdXRleF9s b2NrKCZpbXgyNzQtPmxvY2spOw0KPiArCWZtdC0+Zm9ybWF0ID0gaW14Mjc0LT5mb3JtYXQ7DQo+ ICsJbXV0ZXhfdW5sb2NrKCZpbXgyNzQtPmxvY2spOw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiAr DQo+ICsvKioNCj4gKyAqIGlteDI3NF9zZXRfZm10IC0gVGhpcyBpcyB1c2VkIHRvIHNldCB0aGUg cGFkIGZvcm1hdA0KPiArICogQHNkOiBQb2ludGVyIHRvIFY0TDIgU3ViIGRldmljZSBzdHJ1Y3R1 cmUNCj4gKyAqIEBjZmc6IFBvaW50ZXIgdG8gc3ViIGRldmljZSBwYWQgaW5mb3JtYXRpb24gc3Ry dWN0dXJlDQo+ICsgKiBAZm9ybWF0OiBQb2ludGVyIHRvIHBhZCBsZXZlbCBtZWRpYSBidXMgZm9y bWF0DQo+ICsgKg0KPiArICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHNldCB0aGUgcGFkIGZv cm1hdC4NCj4gKyAqDQo+ICsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcw0KPiArICovDQo+ICtzdGF0 aWMgaW50IGlteDI3NF9zZXRfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsDQo+ICsJCQkgIHN0 cnVjdCB2NGwyX3N1YmRldl9wYWRfY29uZmlnICpjZmcsDQo+ICsJCQkgIHN0cnVjdCB2NGwyX3N1 YmRldl9mb3JtYXQgKmZvcm1hdCkNCj4gK3sNCj4gKwlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10 ICpmbXQgPSAmZm9ybWF0LT5mb3JtYXQ7DQo+ICsJc3RydWN0IHN0aW14Mjc0ICppbXgyNzQgPSB0 b19pbXgyNzQoc2QpOw0KPiArCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBpbXgyNzQtPmNs aWVudDsNCj4gKwlpbnQgaW5kZXg7DQo+ICsNCj4gKwlkZXZfZGJnKCZjbGllbnQtPmRldiwNCj4g KwkJIiVzOiB3aWR0aCA9ICVkIGhlaWdodCA9ICVkIGNvZGUgPSAlZCBtYnVzX2NvZGUgPSAlZFxu IiwNCj4gKwkJX19mdW5jX18sIGZtdC0+d2lkdGgsIGZtdC0+aGVpZ2h0LCBmbXQtPmNvZGUsDQo+ ICsJCWlteDI3NF9mb3JtYXRzW2lteDI3NC0+bW9kZV9pbmRleF0ubWJ1c19jb2RlKTsNCj4gKw0K PiArCW11dGV4X2xvY2soJmlteDI3NC0+bG9jayk7DQo+ICsNCj4gKwlmb3IgKGluZGV4ID0gMDsg aW5kZXggPCBBUlJBWV9TSVpFKGlteDI3NF9mb3JtYXRzKTsgaW5kZXgrKykgew0KPiArCQlpZiAo aW14Mjc0X2Zvcm1hdHNbaW5kZXhdLnNpemUud2lkdGggPT0gZm10LT53aWR0aCAmJg0KPiArCQkg ICAgaW14Mjc0X2Zvcm1hdHNbaW5kZXhdLnNpemUuaGVpZ2h0ID09IGZtdC0+aGVpZ2h0KQ0KPiAr CQkJYnJlYWs7DQo+ICsJfQ0KPiArDQo+ICsJaWYgKGluZGV4ID49IEFSUkFZX1NJWkUoaW14Mjc0 X2Zvcm1hdHMpKSB7DQo+ICsJCS8qIGRlZmF1bHQgdG8gZmlyc3QgZm9ybWF0ICovDQo+ICsJCWlu ZGV4ID0gMDsNCj4gKwl9DQo+ICsNCj4gKwlpbXgyNzQtPm1vZGVfaW5kZXggPSBpbmRleDsNCj4g Kw0KPiArCWlmIChmbXQtPndpZHRoID4gSU1YMjc0X01BWF9XSURUSCkNCj4gKwkJZm10LT53aWR0 aCA9IElNWDI3NF9NQVhfV0lEVEg7DQo+ICsJaWYgKGZtdC0+aGVpZ2h0ID4gSU1YMjc0X01BWF9I RUlHSFQpDQo+ICsJCWZtdC0+aGVpZ2h0ID0gSU1YMjc0X01BWF9IRUlHSFQ7DQo+ICsJZm10LT53 aWR0aCA9IGZtdC0+d2lkdGggJiAofklNWDI3NF9NQVNLX0xTQl8yX0JJVFMpOw0KPiArCWZtdC0+ aGVpZ2h0ID0gZm10LT5oZWlnaHQgJiAofklNWDI3NF9NQVNLX0xTQl8yX0JJVFMpOw0KPiArCWZt dC0+ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7DQo+ICsNCj4gKwlpZiAoZm9ybWF0LT53aGljaCA9 PSBWNEwyX1NVQkRFVl9GT1JNQVRfVFJZKQ0KPiArCQljZmctPnRyeV9mbXQgPSAqZm10Ow0KPiAr CWVsc2UNCj4gKwkJaW14Mjc0LT5mb3JtYXQgPSAqZm10Ow0KPiArDQo+ICsJbXV0ZXhfdW5sb2Nr KCZpbXgyNzQtPmxvY2spOw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAq IGlteDI3NF9nX2ZyYW1lX2ludGVydmFsIC0gR2V0IHRoZSBmcmFtZSBpbnRlcnZhbA0KPiArICog QHNkOiBQb2ludGVyIHRvIFY0TDIgU3ViIGRldmljZSBzdHJ1Y3R1cmUNCj4gKyAqIEBmaTogUG9p bnRlciB0byBWNGwyIFN1YiBkZXZpY2UgZnJhbWUgaW50ZXJ2YWwgc3RydWN0dXJlDQo+ICsgKg0K PiArICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGdldCB0aGUgZnJhbWUgaW50ZXJ2YWwuDQo+ ICsgKg0KPiArICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MNCj4gKyAqLw0KPiArc3RhdGljIGludCBp bXgyNzRfZ19mcmFtZV9pbnRlcnZhbChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLA0KPiArCQkJCSAg IHN0cnVjdCB2NGwyX3N1YmRldl9mcmFtZV9pbnRlcnZhbCAqZmkpDQo+ICt7DQo+ICsJc3RydWN0 IHN0aW14Mjc0ICppbXgyNzQgPSB0b19pbXgyNzQoc2QpOw0KPiArDQo+ICsJZmktPmludGVydmFs ID0gaW14Mjc0LT5mcmFtZV9pbnRlcnZhbDsNCj4gKwlkZXZfZGJnKCZpbXgyNzQtPmNsaWVudC0+ ZGV2LCAiJXMgZnJhbWUgcmF0ZSA9ICVkIC8gJWRcbiIsDQo+ICsJCV9fZnVuY19fLCBpbXgyNzQt PmZyYW1lX2ludGVydmFsLm51bWVyYXRvciwNCj4gKwkJaW14Mjc0LT5mcmFtZV9pbnRlcnZhbC5k ZW5vbWluYXRvcik7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsg KiBpbXgyNzRfc19mcmFtZV9pbnRlcnZhbCAtIFNldCB0aGUgZnJhbWUgaW50ZXJ2YWwNCj4gKyAq IEBzZDogUG9pbnRlciB0byBWNEwyIFN1YiBkZXZpY2Ugc3RydWN0dXJlDQo+ICsgKiBAZmk6IFBv aW50ZXIgdG8gVjRsMiBTdWIgZGV2aWNlIGZyYW1lIGludGVydmFsIHN0cnVjdHVyZQ0KPiArICoN Cj4gKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzZXQgdGhlIGZyYW1lIGludGVydmF2bC4N Cj4gKyAqDQo+ICsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcw0KPiArICovDQo+ICtzdGF0aWMgaW50 IGlteDI3NF9zX2ZyYW1lX2ludGVydmFsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsDQo+ICsJCQkJ ICAgc3RydWN0IHY0bDJfc3ViZGV2X2ZyYW1lX2ludGVydmFsICpmaSkNCj4gK3sNCj4gKwlzdHJ1 Y3Qgc3RpbXgyNzQgKmlteDI3NCA9IHRvX2lteDI3NChzZCk7DQo+ICsJc3RydWN0IHY0bDJfY3Ry bCAqY3RybCA9IGlteDI3NC0+Y3RybHMuZXhwb3N1cmU7DQo+ICsJaW50IG1pbiwgbWF4LCBkZWY7 DQo+ICsJaW50IHJldDsNCj4gKw0KPiArCW11dGV4X2xvY2soJmlteDI3NC0+bG9jayk7DQo+ICsJ cmV0ID0gaW14Mjc0X3NldF9mcmFtZV9pbnRlcnZhbChpbXgyNzQsIGZpLT5pbnRlcnZhbCk7DQo+ ICsNCj4gKwlpZiAoIXJldCkgew0KPiArCQkvKg0KPiArCQkgKiBleHBvc3VyZSB0aW1lIHJhbmdl IGlzIGRlY2lkZWQgYnkgZnJhbWUgaW50ZXJ2YWwNCj4gKwkJICogbmVlZCB0byB1cGRhdGUgaXQg YWZ0ZXIgZnJhbWUgaW50ZXJhbCBjaGFuZ2VzDQo+ICsJCSAqLw0KPiArCQltaW4gPSBJTVgyNzRf TUlOX0VYUE9TVVJFX1RJTUU7DQo+ICsJCW1heCA9IGZpLT5pbnRlcnZhbC5udW1lcmF0b3IgKiAx MDAwMDAwDQo+ICsJCQkvIGZpLT5pbnRlcnZhbC5kZW5vbWluYXRvcjsNCj4gKwkJZGVmID0gbWF4 Ow0KPiArCQlpZiAoX192NGwyX2N0cmxfbW9kaWZ5X3JhbmdlKGN0cmwsIG1pbiwgbWF4LCAxLCBk ZWYpKSB7DQo+ICsJCQlkZXZfZXJyKCZpbXgyNzQtPmNsaWVudC0+ZGV2LA0KPiArCQkJCSJFeHBv c3VyZSBjdHJsIHJhbmdlIHVwZGF0ZSBmYWlsZWRcbiIpOw0KPiArCQkJZ290byB1bmxvY2s7DQo+ ICsJCX0NCj4gKw0KPiArCQkvKiB1cGRhdGUgZXhwb3N1cmUgdGltZSBhY2NvcmRpbmdseSAqLw0K PiArCQlpbXgyNzRfc2V0X2V4cG9zdXJlKGlteDI3NCwgaW14Mjc0LT5jdHJscy5leHBvc3VyZS0+ dmFsKTsNCj4gKw0KPiArCQlkZXZfZGJnKCZpbXgyNzQtPmNsaWVudC0+ZGV2LCAic2V0IGZyYW1l IGludGVydmFsIHRvICV1dXNcbiIsDQo+ICsJCQlmaS0+aW50ZXJ2YWwubnVtZXJhdG9yICogMTAw MDAwMA0KPiArCQkJLyBmaS0+aW50ZXJ2YWwuZGVub21pbmF0b3IpOw0KPiArCX0NCj4gKw0KPiAr dW5sb2NrOg0KPiArCW11dGV4X3VubG9jaygmaW14Mjc0LT5sb2NrKTsNCj4gKw0KPiArCXJldHVy biByZXQ7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICogaW14Mjc0X2xvYWRfZGVmYXVsdCAtIGxv YWQgZGVmYXVsdCBjb250cm9sIHZhbHVlcw0KPiArICogQHByaXY6IFBvaW50ZXIgdG8gZGV2aWNl IHN0cnVjdHVyZQ0KPiArICoNCj4gKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBlcnJvcnMgb3Ro ZXJ3aXNlDQo+ICsgKi8NCj4gK3N0YXRpYyBpbnQgaW14Mjc0X2xvYWRfZGVmYXVsdChzdHJ1Y3Qg c3RpbXgyNzQgKnByaXYpDQo+ICt7DQo+ICsJaW50IHJldDsNCj4gKw0KPiArCS8qIGxvYWQgZGVm YXVsdCBjb250cm9sIHZhbHVlcyAqLw0KPiArCXByaXYtPmZyYW1lX2ludGVydmFsLm51bWVyYXRv ciA9IDE7DQo+ICsJcHJpdi0+ZnJhbWVfaW50ZXJ2YWwuZGVub21pbmF0b3IgPSBJTVgyNzRfREVG X0ZSQU1FX1JBVEU7DQo+ICsJcHJpdi0+Y3RybHMuZXhwb3N1cmUtPnZhbCA9IDEwMDAwMDAgLyBJ TVgyNzRfREVGX0ZSQU1FX1JBVEU7DQo+ICsJcHJpdi0+Y3RybHMuZ2Fpbi0+dmFsID0gSU1YMjc0 X0RFRl9HQUlOOw0KPiArCXByaXYtPmN0cmxzLnZmbGlwLT52YWwgPSAwOw0KPiArCXByaXYtPmN0 cmxzLnRlc3RfcGF0dGVybi0+dmFsID0gVEVTVF9QQVRURVJOX0RJU0FCTEVEOw0KPiArDQo+ICsJ LyogdXBkYXRlIGZyYW1lIHJhdGUgKi8NCj4gKwlyZXQgPSBpbXgyNzRfc2V0X2ZyYW1lX2ludGVy dmFsKHByaXYsDQo+ICsJCQkJCXByaXYtPmZyYW1lX2ludGVydmFsKTsNCj4gKwlpZiAocmV0KQ0K PiArCQlyZXR1cm4gcmV0Ow0KPiArDQo+ICsJLyogdXBkYXRlIGV4cG9zdXJlIHRpbWUgKi8NCj4g KwlyZXQgPSB2NGwyX2N0cmxfc19jdHJsKHByaXYtPmN0cmxzLmV4cG9zdXJlLCBwcml2LT5jdHJs cy5leHBvc3VyZS0+dmFsKTsNCj4gKwlpZiAocmV0KQ0KPiArCQlyZXR1cm4gcmV0Ow0KPiArDQo+ ICsJLyogdXBkYXRlIGdhaW4gKi8NCj4gKwlyZXQgPSB2NGwyX2N0cmxfc19jdHJsKHByaXYtPmN0 cmxzLmdhaW4sIHByaXYtPmN0cmxzLmdhaW4tPnZhbCk7DQo+ICsJaWYgKHJldCkNCj4gKwkJcmV0 dXJuIHJldDsNCj4gKw0KPiArCS8qIHVwZGF0ZSB2ZmxpcCAqLw0KPiArCXJldCA9IHY0bDJfY3Ry bF9zX2N0cmwocHJpdi0+Y3RybHMudmZsaXAsIHByaXYtPmN0cmxzLnZmbGlwLT52YWwpOw0KPiAr CWlmIChyZXQpDQo+ICsJCXJldHVybiByZXQ7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4g Kw0KPiArLyoqDQo+ICsgKiBpbXgyNzRfc19zdHJlYW0gLSBJdCBpcyB1c2VkIHRvIHN0YXJ0L3N0 b3AgdGhlIHN0cmVhbWluZy4NCj4gKyAqIEBzZDogVjRMMiBTdWIgZGV2aWNlDQo+ICsgKiBAb246 IEZsYWcgKFRydWUgLyBGYWxzZSkNCj4gKyAqDQo+ICsgKiBUaGlzIGZ1bmN0aW9uIGNvbnRyb2xz IHRoZSBzdGFydCBvciBzdG9wIG9mIHN0cmVhbWluZyBmb3IgdGhlDQo+ICsgKiBpbXgyNzQgc2Vu c29yLg0KPiArICoNCj4gKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBlcnJvcnMgb3RoZXJ3aXNl DQo+ICsgKi8NCj4gK3N0YXRpYyBpbnQgaW14Mjc0X3Nfc3RyZWFtKHN0cnVjdCB2NGwyX3N1YmRl diAqc2QsIGludCBvbikNCj4gK3sNCj4gKwlzdHJ1Y3Qgc3RpbXgyNzQgKmlteDI3NCA9IHRvX2lt eDI3NChzZCk7DQo+ICsJaW50IHJldCA9IDA7DQo+ICsNCj4gKwlkZXZfZGJnKCZpbXgyNzQtPmNs aWVudC0+ZGV2LCAiJXMgOiAlcywgbW9kZSBpbmRleCA9ICVkXG4iLA0KPiBfX2Z1bmNfXywNCj4g KwkJb24gPyAiU3RyZWFtIFN0YXJ0IiA6ICJTdHJlYW0gU3RvcCIsIGlteDI3NC0+bW9kZV9pbmRl eCk7DQo+ICsNCj4gKwltdXRleF9sb2NrKCZpbXgyNzQtPmxvY2spOw0KPiArDQo+ICsJaWYgKG9u KSB7DQo+ICsJCS8qIGxvYWQgbW9kZSByZWdpc3RlcnMgKi8NCj4gKwkJaW14Mjc0X21vZGVfcmVn cyhpbXgyNzQsIGlteDI3NC0+bW9kZV9pbmRleCk7DQo+ICsJCWlmIChyZXQpDQo+ICsJCQlnb3Rv IGZhaWw7DQo+ICsNCj4gKwkJLyoNCj4gKwkJICogdXBkYXRlIGZyYW1lIHJhdGUgJiBleHBzb3Vy ZS4gaWYgdGhlIGxhc3QgbW9kZSBpcyBkaWZmZXJlbnQsDQo+ICsJCSAqIEhNQVggY291bGQgYmUg Y2hhbmdlZC4gQXMgdGhlIHJlc3VsdCwgZnJhbWUgcmF0ZSAmIGV4cG9zdXJlDQo+ICsJCSAqIGFy ZSBjaGFuZ2VkLg0KPiArCQkgKiBnYWluIGlzIG5vdCBhZmZlY3RlZC4NCj4gKwkJICovDQo+ICsJ CXJldCA9IGlteDI3NF9zZXRfZnJhbWVfaW50ZXJ2YWwoaW14Mjc0LA0KPiArCQkJCQkJaW14Mjc0 LT5mcmFtZV9pbnRlcnZhbCk7DQo+ICsJCWlmIChyZXQpDQo+ICsJCQlnb3RvIGZhaWw7DQo+ICsN Cj4gKwkJLyogdXBkYXRlIGV4cG9zdXJlIHRpbWUgKi8NCj4gKwkJcmV0ID0gX192NGwyX2N0cmxf c19jdHJsKGlteDI3NC0+Y3RybHMuZXhwb3N1cmUsDQo+ICsJCQkJCSBpbXgyNzQtPmN0cmxzLmV4 cG9zdXJlLT52YWwpOw0KPiArCQlpZiAocmV0KQ0KPiArCQkJZ290byBmYWlsOw0KPiArDQo+ICsJ CS8qIHN0YXJ0IHN0cmVhbSAqLw0KPiArCQlyZXQgPSBpbXgyNzRfc3RhcnRfc3RyZWFtKGlteDI3 NCk7DQo+ICsJCWlmIChyZXQpDQo+ICsJCQlnb3RvIGZhaWw7DQo+ICsJfSBlbHNlIHsNCj4gKwkJ Lyogc3RvcCBzdHJlYW0gKi8NCj4gKwkJcmV0ID0gaW14Mjc0X3dyaXRlX3RhYmxlKGlteDI3NCwN Cj4gKw0KPiBtb2RlX3RhYmxlW0lNWDI3NF9NT0RFX1NUT1BfU1RSRUFNXSk7DQo+ICsJCWlmIChy ZXQpDQo+ICsJCQlnb3RvIGZhaWw7DQo+ICsJfQ0KPiArDQo+ICsJbXV0ZXhfdW5sb2NrKCZpbXgy NzQtPmxvY2spOw0KPiArCWRldl9kYmcoJmlteDI3NC0+Y2xpZW50LT5kZXYsDQo+ICsJCSIlcyA6 IERvbmU6IG1vZGUgPSAlZFxuIiwgX19mdW5jX18sIGlteDI3NC0+bW9kZV9pbmRleCk7DQo+ICsJ cmV0dXJuIDA7DQo+ICsNCj4gK2ZhaWw6DQo+ICsJbXV0ZXhfdW5sb2NrKCZpbXgyNzQtPmxvY2sp Ow0KPiArCWRldl9lcnIoJmlteDI3NC0+Y2xpZW50LT5kZXYsICJzX3N0cmVhbSBmYWlsZWRcbiIp Ow0KPiArCXJldHVybiByZXQ7DQo+ICt9DQo+ICsNCj4gKy8qDQo+ICsgKiBpbXgyNzRfZ2V0X2Zy YW1lX2xlbmd0aCAtIEZ1bmN0aW9uIGZvciBvYnRhaW5pbmcgY3VycmVudCBmcmFtZSBsZW5ndGgN Cj4gKyAqIEBwcml2OiBQb2ludGVyIHRvIGRldmljZSBzdHJ1Y3R1cmUNCj4gKyAqIEB2YWw6IFBv aW50ZXIgdG8gb2JhaW50ZWQgdmFsdWUNCj4gKyAqDQo+ICsgKiBmcmFtZV9sZW5ndGggPSB2bWF4 IHggKHN2ciArIDEpLCBpbiB1bml0IG9mIGhtYXguDQo+ICsgKg0KPiArICogUmV0dXJuOiAwIG9u IHN1Y2Nlc3MNCj4gKyAqLw0KPiArc3RhdGljIGludCBpbXgyNzRfZ2V0X2ZyYW1lX2xlbmd0aChz dHJ1Y3Qgc3RpbXgyNzQgKnByaXYsIHUzMiAqdmFsKQ0KPiArew0KPiArCWludCBlcnI7DQo+ICsJ dTE2IHN2cjsNCj4gKwl1MzIgdm1heDsNCj4gKwl1OCByZWdfdmFsWzNdOw0KPiArDQo+ICsJLyog c3ZyICovDQo+ICsJZXJyID0gaW14Mjc0X3JlYWRfcmVnKHByaXYsIElNWDI3NF9TVlJfUkVHX0xT QiwgJnJlZ192YWxbMF0pOw0KPiArCWlmIChlcnIpDQo+ICsJCWdvdG8gZmFpbDsNCj4gKw0KPiAr CWVyciA9IGlteDI3NF9yZWFkX3JlZyhwcml2LCBJTVgyNzRfU1ZSX1JFR19NU0IsICZyZWdfdmFs WzFdKTsNCj4gKwlpZiAoZXJyKQ0KPiArCQlnb3RvIGZhaWw7DQo+ICsNCj4gKwlzdnIgPSAocmVn X3ZhbFsxXSA8PCBJTVgyNzRfU0hJRlRfOF9CSVRTKSArIHJlZ192YWxbMF07DQo+ICsNCj4gKwkv KiB2bWF4ICovDQo+ICsJZXJyID0gaW14Mjc0X3JlYWRfcmVnKHByaXYsIElNWDI3NF9GUkFNRV9M RU5HVEhfQUREUl8zLA0KPiAmcmVnX3ZhbFswXSk7DQo+ICsJaWYgKGVycikNCj4gKwkJZ290byBm YWlsOw0KPiArDQo+ICsJZXJyID0gaW14Mjc0X3JlYWRfcmVnKHByaXYsIElNWDI3NF9GUkFNRV9M RU5HVEhfQUREUl8yLA0KPiAmcmVnX3ZhbFsxXSk7DQo+ICsJaWYgKGVycikNCj4gKwkJZ290byBm YWlsOw0KPiArDQo+ICsJZXJyID0gaW14Mjc0X3JlYWRfcmVnKHByaXYsIElNWDI3NF9GUkFNRV9M RU5HVEhfQUREUl8xLA0KPiAmcmVnX3ZhbFsyXSk7DQo+ICsJaWYgKGVycikNCj4gKwkJZ290byBm YWlsOw0KPiArDQo+ICsJdm1heCA9ICgocmVnX3ZhbFsyXSAmIElNWDI3NF9NQVNLX0xTQl8zX0JJ VFMpIDw8DQo+IElNWDI3NF9TSElGVF8xNl9CSVRTKQ0KPiArCQkrIChyZWdfdmFsWzFdIDw8IElN WDI3NF9TSElGVF84X0JJVFMpICsgcmVnX3ZhbFswXTsNCj4gKw0KPiArCSp2YWwgPSB2bWF4ICog KHN2ciArIDEpOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICsNCj4gK2ZhaWw6DQo+ICsJZGV2X2Vy cigmcHJpdi0+Y2xpZW50LT5kZXYsICIlcyBlcnJvciA9ICVkXG4iLCBfX2Z1bmNfXywgZXJyKTsN Cj4gKwlyZXR1cm4gZXJyOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGlteDI3NF9jbGFtcF9j b2Fyc2VfdGltZShzdHJ1Y3Qgc3RpbXgyNzQgKnByaXYsIHUzMiAqdmFsLA0KPiArCQkJCSAgICB1 MzIgKmZyYW1lX2xlbmd0aCkNCj4gK3sNCj4gKwlpbnQgZXJyOw0KPiArDQo+ICsJZXJyID0gaW14 Mjc0X2dldF9mcmFtZV9sZW5ndGgocHJpdiwgZnJhbWVfbGVuZ3RoKTsNCj4gKwlpZiAoZXJyKQ0K PiArCQlyZXR1cm4gZXJyOw0KPiArDQo+ICsJaWYgKCpmcmFtZV9sZW5ndGggPCBtaW5fZnJhbWVf bGVuW3ByaXYtPm1vZGVfaW5kZXhdKQ0KPiArCQkqZnJhbWVfbGVuZ3RoID0gbWluX2ZyYW1lX2xl bltwcml2LT5tb2RlX2luZGV4XTsNCj4gKw0KPiArCSp2YWwgPSAqZnJhbWVfbGVuZ3RoIC0gKnZh bDsgLyogY29udmVydCB0byByYXcgc2hyICovDQo+ICsJaWYgKCp2YWwgPiAqZnJhbWVfbGVuZ3Ro IC0gSU1YMjc0X1NIUl9MSU1JVF9DT05TVCkNCj4gKwkJKnZhbCA9ICpmcmFtZV9sZW5ndGggLSBJ TVgyNzRfU0hSX0xJTUlUX0NPTlNUOw0KPiArCWVsc2UgaWYgKCp2YWwgPCBtaW5fU0hSW3ByaXYt Pm1vZGVfaW5kZXhdKQ0KPiArCQkqdmFsID0gbWluX1NIUltwcml2LT5tb2RlX2luZGV4XTsNCj4g Kw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICsvKg0KPiArICogaW14Mjc0X3NldF9kaWdp dGFsIGdhaW4gLSBGdW5jdGlvbiBjYWxsZWQgd2hlbiBzZXR0aW5nIGRpZ2l0YWwgZ2Fpbg0KPiAr ICogQHByaXY6IFBvaW50ZXIgdG8gZGV2aWNlIHN0cnVjdHVyZQ0KPiArICogQGRnYWluOiBWYWx1 ZSBvZiBkaWdpdGFsIGdhaW4uDQo+ICsgKg0KPiArICogRGlnaXRhbCBnYWluIGhhcyBvbmx5IDQg c3RlcHM6IDF4LCAyeCwgNHgsIGFuZCA4eA0KPiArICoNCj4gKyAqIFJldHVybjogMCBvbiBzdWNj ZXNzDQo+ICsgKi8NCj4gK3N0YXRpYyBpbnQgaW14Mjc0X3NldF9kaWdpdGFsX2dhaW4oc3RydWN0 IHN0aW14Mjc0ICpwcml2LCB1MzIgZGdhaW4pDQo+ICt7DQo+ICsJdTggcmVnX3ZhbDsNCj4gKw0K PiArCXJlZ192YWwgPSBmZnMoZGdhaW4pOw0KPiArDQo+ICsJaWYgKHJlZ192YWwpDQo+ICsJCXJl Z192YWwtLTsNCj4gKw0KPiArCXJlZ192YWwgPSBjbGFtcChyZWdfdmFsLCAodTgpMCwgKHU4KTMp Ow0KPiArDQo+ICsJcmV0dXJuIGlteDI3NF93cml0ZV9yZWcocHJpdiwgSU1YMjc0X0RJR0lUQUxf R0FJTl9SRUcsDQo+ICsJCQkJcmVnX3ZhbCAmIElNWDI3NF9NQVNLX0xTQl80X0JJVFMpOw0KPiAr fQ0KPiArDQo+ICtzdGF0aWMgaW5saW5lIHZvaWQgaW14Mjc0X2NhbGN1bGF0ZV9nYWluX3JlZ3Mo c3RydWN0IHJlZ184IHJlZ3NbMl0sIHUxNiBnYWluKQ0KPiArew0KPiArCXJlZ3MtPmFkZHIgPSBJ TVgyNzRfQU5BTE9HX0dBSU5fQUREUl9NU0I7DQo+ICsJcmVncy0+dmFsID0gKGdhaW4gPj4gSU1Y Mjc0X1NISUZUXzhfQklUUykgJg0KPiBJTVgyNzRfTUFTS19MU0JfM19CSVRTOw0KPiArDQo+ICsJ KHJlZ3MgKyAxKS0+YWRkciA9IElNWDI3NF9BTkFMT0dfR0FJTl9BRERSX0xTQjsNCj4gKwkocmVn cyArIDEpLT52YWwgPSAoZ2FpbikgJiBJTVgyNzRfTUFTS19MU0JfOF9CSVRTOw0KPiArfQ0KPiAr DQo+ICsvKg0KPiArICogaW14Mjc0X3NldF9nYWluIC0gRnVuY3Rpb24gY2FsbGVkIHdoZW4gc2V0 dGluZyBnYWluDQo+ICsgKiBAcHJpdjogUG9pbnRlciB0byBkZXZpY2Ugc3RydWN0dXJlDQo+ICsg KiBAdmFsOiBWYWx1ZSBvZiBnYWluLiB0aGUgcmVhbCB2YWx1ZSA9IHZhbCA8PCBJTVgyNzRfR0FJ Tl9TSElGVDsNCj4gKyAqIEBjdHJsOiB2NGwyIGNvbnRyb2wgcG9pbnRlcg0KPiArICoNCj4gKyAq IFNldCB0aGUgZ2FpbiBiYXNlZCBvbiBpbnB1dCB2YWx1ZS4NCj4gKyAqIFRoZSBjYWxsZXIgc2hv dWxkIGhvbGQgdGhlIG11dGV4IGxvY2sgaW14Mjc0LT5sb2NrIGlmIG5lY2Vzc2FyeQ0KPiArICoN Cj4gKyAqIFJldHVybjogMCBvbiBzdWNjZXNzDQo+ICsgKi8NCj4gK3N0YXRpYyBpbnQgaW14Mjc0 X3NldF9nYWluKHN0cnVjdCBzdGlteDI3NCAqcHJpdiwgc3RydWN0IHY0bDJfY3RybCAqY3RybCkN Cj4gK3sNCj4gKwlzdHJ1Y3QgcmVnXzggcmVnX2xpc3RbMl07DQo+ICsJaW50IGVycjsNCj4gKwl1 MzIgZ2FpbiwgYW5hbG9nX2dhaW4sIGRpZ2l0YWxfZ2FpbiwgZ2Fpbl9yZWc7DQo+ICsJaW50IGk7 DQo+ICsNCj4gKwlnYWluID0gKHUzMikoY3RybC0+dmFsKTsNCj4gKw0KPiArCWRldl9kYmcoJnBy aXYtPmNsaWVudC0+ZGV2LA0KPiArCQkiJXMgOiBpbnB1dCBnYWluID0gJWQuJWRcbiIsIF9fZnVu Y19fLA0KPiArCQlnYWluID4+IElNWDI3NF9HQUlOX1NISUZULA0KPiArCQkoKGdhaW4gJiBJTVgy NzRfR0FJTl9TSElGVF9NQVNLKSAqIDEwMCkgPj4NCj4gSU1YMjc0X0dBSU5fU0hJRlQpOw0KPiAr DQo+ICsJaWYgKGdhaW4gPiBJTVgyNzRfTUFYX0RJR0lUQUxfR0FJTiAqIElNWDI3NF9NQVhfQU5B TE9HX0dBSU4pDQo+ICsJCWdhaW4gPSBJTVgyNzRfTUFYX0RJR0lUQUxfR0FJTiAqDQo+IElNWDI3 NF9NQVhfQU5BTE9HX0dBSU47DQo+ICsJZWxzZSBpZiAoZ2FpbiA8IElNWDI3NF9NSU5fR0FJTikN Cj4gKwkJZ2FpbiA9IElNWDI3NF9NSU5fR0FJTjsNCj4gKw0KPiArCWlmIChnYWluIDw9IElNWDI3 NF9NQVhfQU5BTE9HX0dBSU4pDQo+ICsJCWRpZ2l0YWxfZ2FpbiA9IDE7DQo+ICsJZWxzZSBpZiAo Z2FpbiA8PSBJTVgyNzRfTUFYX0FOQUxPR19HQUlOICogMikNCj4gKwkJZGlnaXRhbF9nYWluID0g MjsNCj4gKwllbHNlIGlmIChnYWluIDw9IElNWDI3NF9NQVhfQU5BTE9HX0dBSU4gKiA0KQ0KPiAr CQlkaWdpdGFsX2dhaW4gPSA0Ow0KPiArCWVsc2UNCj4gKwkJZGlnaXRhbF9nYWluID0gSU1YMjc0 X01BWF9ESUdJVEFMX0dBSU47DQo+ICsNCj4gKwlhbmFsb2dfZ2FpbiA9IGdhaW4gLyBkaWdpdGFs X2dhaW47DQo+ICsNCj4gKwlkZXZfZGJnKCZwcml2LT5jbGllbnQtPmRldiwNCj4gKwkJIiVzIDog ZGlnaXRhbCBnYWluID0gJWQsIGFuYWxvZyBnYWluID0gJWQuJWRcbiIsDQo+ICsJCV9fZnVuY19f LCBkaWdpdGFsX2dhaW4sIGFuYWxvZ19nYWluID4+IElNWDI3NF9HQUlOX1NISUZULA0KPiArCQko KGFuYWxvZ19nYWluICYgSU1YMjc0X0dBSU5fU0hJRlRfTUFTSykgKiAxMDApDQo+ICsJCT4+IElN WDI3NF9HQUlOX1NISUZUKTsNCj4gKw0KPiArCWVyciA9IGlteDI3NF9zZXRfZGlnaXRhbF9nYWlu KHByaXYsIGRpZ2l0YWxfZ2Fpbik7DQo+ICsJaWYgKGVycikNCj4gKwkJZ290byBmYWlsOw0KPiAr DQo+ICsJLyogY29udmVydCB0byByZWdpc3RlciB2YWx1ZSwgcmVmZXIgdG8gaW14Mjc0IGRhdGFz aGVldCAqLw0KPiArCWdhaW5fcmVnID0gKHUzMilJTVgyNzRfR0FJTl9DT05TVCAtDQo+ICsJCShJ TVgyNzRfR0FJTl9DT05TVCA8PCBJTVgyNzRfR0FJTl9TSElGVCkgLyBhbmFsb2dfZ2FpbjsNCj4g KwlpZiAoZ2Fpbl9yZWcgPiBJTVgyNzRfR0FJTl9SRUdfTUFYKQ0KPiArCQlnYWluX3JlZyA9IElN WDI3NF9HQUlOX1JFR19NQVg7DQo+ICsNCj4gKwlpbXgyNzRfY2FsY3VsYXRlX2dhaW5fcmVncyhy ZWdfbGlzdCwgKHUxNilnYWluX3JlZyk7DQo+ICsNCj4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlf U0laRShyZWdfbGlzdCk7IGkrKykgew0KPiArCQllcnIgPSBpbXgyNzRfd3JpdGVfcmVnKHByaXYs IHJlZ19saXN0W2ldLmFkZHIsDQo+ICsJCQkJICAgICAgIHJlZ19saXN0W2ldLnZhbCk7DQo+ICsJ CWlmIChlcnIpDQo+ICsJCQlnb3RvIGZhaWw7DQo+ICsJfQ0KPiArDQo+ICsJaWYgKElNWDI3NF9H QUlOX0NPTlNUIC0gZ2Fpbl9yZWcgPT0gMCkgew0KPiArCQllcnIgPSAtRUlOVkFMOw0KPiArCQln b3RvIGZhaWw7DQo+ICsJfQ0KPiArDQo+ICsJLyogY29udmVydCByZWdpc3RlciB2YWx1ZSBiYWNr IHRvIGdhaW4gdmFsdWUgKi8NCj4gKwljdHJsLT52YWwgPSAoSU1YMjc0X0dBSU5fQ09OU1QgPDwg SU1YMjc0X0dBSU5fU0hJRlQpDQo+ICsJCQkvIChJTVgyNzRfR0FJTl9DT05TVCAtIGdhaW5fcmVn KSAqIGRpZ2l0YWxfZ2FpbjsNCj4gKw0KPiArCWRldl9kYmcoJnByaXYtPmNsaWVudC0+ZGV2LA0K PiArCQkiJXMgOiBHQUlOIGNvbnRyb2wgc3VjY2VzcywgZ2Fpbl9yZWcgPSAlZCwgbmV3IGdhaW4g PSAlZFxuIiwNCj4gKwkJX19mdW5jX18sIGdhaW5fcmVnLCBjdHJsLT52YWwpOw0KPiArDQo+ICsJ cmV0dXJuIDA7DQo+ICsNCj4gK2ZhaWw6DQo+ICsJZGV2X2VycigmcHJpdi0+Y2xpZW50LT5kZXYs ICIlcyBlcnJvciA9ICVkXG4iLCBfX2Z1bmNfXywgZXJyKTsNCj4gKwlyZXR1cm4gZXJyOw0KPiAr fQ0KPiArDQo+ICtzdGF0aWMgaW5saW5lIHZvaWQgaW14Mjc0X2NhbGN1bGF0ZV9jb2Fyc2VfdGlt ZV9yZWdzKHN0cnVjdCByZWdfOCByZWdzWzJdLA0KPiArCQkJCQkJICAgICB1MzIgY29hcnNlX3Rp bWUpDQo+ICt7DQo+ICsJcmVncy0+YWRkciA9IElNWDI3NF9DT0FSU0VfVElNRV9BRERSX01TQjsN Cj4gKwlyZWdzLT52YWwgPSAoY29hcnNlX3RpbWUgPj4gSU1YMjc0X1NISUZUXzhfQklUUykNCj4g KwkJCSYgSU1YMjc0X01BU0tfTFNCXzhfQklUUzsNCj4gKwkocmVncyArIDEpLT5hZGRyID0gSU1Y Mjc0X0NPQVJTRV9USU1FX0FERFJfTFNCOw0KPiArCShyZWdzICsgMSktPnZhbCA9IChjb2Fyc2Vf dGltZSkgJiBJTVgyNzRfTUFTS19MU0JfOF9CSVRTOw0KPiArfQ0KPiArDQo+ICsvKg0KPiArICog aW14Mjc0X3NldF9jb2Fyc2VfdGltZSAtIEZ1bmN0aW9uIGNhbGxlZCB3aGVuIHNldHRpbmcgU0hS IHZhbHVlDQo+ICsgKiBAcHJpdjogUG9pbnRlciB0byBkZXZpY2Ugc3RydWN0dXJlDQo+ICsgKiBA dmFsOiBWYWx1ZSBmb3IgZXhwb3N1cmUgdGltZSBpbiBudW1iZXIgb2YgbGluZV9sZW5ndGgsIG9y IFtITUFYXQ0KPiArICoNCj4gKyAqIFNldCBTSFIgdmFsdWUgYmFzZWQgb24gaW5wdXQgdmFsdWUu DQo+ICsgKg0KPiArICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MNCj4gKyAqLw0KPiArc3RhdGljIGlu dCBpbXgyNzRfc2V0X2NvYXJzZV90aW1lKHN0cnVjdCBzdGlteDI3NCAqcHJpdiwgdTMyICp2YWwp DQo+ICt7DQo+ICsJc3RydWN0IHJlZ184IHJlZ19saXN0WzJdOw0KPiArCWludCBlcnI7DQo+ICsJ dTMyIGNvYXJzZV90aW1lLCBmcmFtZV9sZW5ndGg7DQo+ICsJaW50IGk7DQo+ICsNCj4gKwljb2Fy c2VfdGltZSA9ICp2YWw7DQo+ICsNCj4gKwkvKiBjb252ZXJ0IGV4cG9zdXJlX3RpbWUgdG8gYXBw cm9wcmlhdGUgU0hSIHZhbHVlICovDQo+ICsJZXJyID0gaW14Mjc0X2NsYW1wX2NvYXJzZV90aW1l KHByaXYsICZjb2Fyc2VfdGltZSwgJmZyYW1lX2xlbmd0aCk7DQo+ICsJaWYgKGVycikNCj4gKwkJ Z290byBmYWlsOw0KPiArDQo+ICsJLyogcHJlcGFyZSBTSFIgcmVnaXN0ZXJzICovDQo+ICsJaW14 Mjc0X2NhbGN1bGF0ZV9jb2Fyc2VfdGltZV9yZWdzKHJlZ19saXN0LCBjb2Fyc2VfdGltZSk7DQo+ ICsNCj4gKwkvKiB3cml0ZSB0byBTSFIgcmVnaXN0ZXJzICovDQo+ICsJZm9yIChpID0gMDsgaSA8 IEFSUkFZX1NJWkUocmVnX2xpc3QpOyBpKyspIHsNCj4gKwkJZXJyID0gaW14Mjc0X3dyaXRlX3Jl Zyhwcml2LCByZWdfbGlzdFtpXS5hZGRyLA0KPiArCQkJCSAgICAgICByZWdfbGlzdFtpXS52YWwp Ow0KPiArCQlpZiAoZXJyKQ0KPiArCQkJZ290byBmYWlsOw0KPiArCX0NCj4gKw0KPiArCSp2YWwg PSBmcmFtZV9sZW5ndGggLSBjb2Fyc2VfdGltZTsNCj4gKwlyZXR1cm4gMDsNCj4gKw0KPiArZmFp bDoNCj4gKwlkZXZfZXJyKCZwcml2LT5jbGllbnQtPmRldiwgIiVzIGVycm9yID0gJWRcbiIsIF9f ZnVuY19fLCBlcnIpOw0KPiArCXJldHVybiBlcnI7DQo+ICt9DQo+ICsNCj4gKy8qDQo+ICsgKiBp bXgyNzRfc2V0X2V4cG9zdXJlIC0gRnVuY3Rpb24gY2FsbGVkIHdoZW4gc2V0dGluZyBleHBvc3Vy ZSB0aW1lDQo+ICsgKiBAcHJpdjogUG9pbnRlciB0byBkZXZpY2Ugc3RydWN0dXJlDQo+ICsgKiBA dmFsOiBWYXJpYWJsZSBmb3IgZXhwb3N1cmUgdGltZSwgaW4gdGhlIHVuaXQgb2YgbWljcm8tc2Vj b25kDQo+ICsgKg0KPiArICogU2V0IGV4cG9zdXJlIHRpbWUgYmFzZWQgb24gaW5wdXQgdmFsdWUu DQo+ICsgKiBUaGUgY2FsbGVyIHNob3VsZCBob2xkIHRoZSBtdXRleCBsb2NrIGlteDI3NC0+bG9j ayBpZiBuZWNlc3NhcnkNCj4gKyAqDQo+ICsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcw0KPiArICov DQo+ICtzdGF0aWMgaW50IGlteDI3NF9zZXRfZXhwb3N1cmUoc3RydWN0IHN0aW14Mjc0ICpwcml2 LCBpbnQgdmFsKQ0KPiArew0KPiArCWludCBlcnI7DQo+ICsJdTE2IGhtYXg7DQo+ICsJdTggcmVn X3ZhbFsyXTsNCj4gKwl1MzIgY29hcnNlX3RpbWU7IC8qIGV4cG9zdXJlIHRpbWUgaW4gdW5pdCBv ZiBsaW5lIChITUFYKSovDQo+ICsNCj4gKwlkZXZfZGJnKCZwcml2LT5jbGllbnQtPmRldiwNCj4g KwkJIiVzIDogRVhQT1NVUkUgY29udHJvbCBpbnB1dCA9ICVkXG4iLCBfX2Z1bmNfXywgdmFsKTsN Cj4gKw0KPiArCS8qIHN0ZXAgMTogY29udmVydCBpbnB1dCBleHBvc3VyZV90aW1lICh2YWwpIGlu dG8gbnVtYmVyIG9mIDFbSE1BWF0gKi8NCj4gKw0KPiArCS8qIG9idGFpbiBITUFYIHZhbHVlICov DQo+ICsJZXJyID0gaW14Mjc0X3JlYWRfcmVnKHByaXYsIElNWDI3NF9ITUFYX1JFR19MU0IsICZy ZWdfdmFsWzBdKTsNCj4gKwlpZiAoZXJyKQ0KPiArCQlnb3RvIGZhaWw7DQo+ICsJZXJyID0gaW14 Mjc0X3JlYWRfcmVnKHByaXYsIElNWDI3NF9ITUFYX1JFR19NU0IsICZyZWdfdmFsWzFdKTsNCj4g KwlpZiAoZXJyKQ0KPiArCQlnb3RvIGZhaWw7DQo+ICsJaG1heCA9IChyZWdfdmFsWzFdIDw8IElN WDI3NF9TSElGVF84X0JJVFMpICsgcmVnX3ZhbFswXTsNCj4gKwlpZiAoaG1heCA9PSAwKSB7DQo+ ICsJCWVyciA9IC1FSU5WQUw7DQo+ICsJCWdvdG8gZmFpbDsNCj4gKwl9DQo+ICsNCj4gKwljb2Fy c2VfdGltZSA9IChJTVgyNzRfUElYQ0xLX0NPTlNUMSAvIElNWDI3NF9QSVhDTEtfQ09OU1QyICoN Cj4gdmFsDQo+ICsJCQktIG5vY3Bpb3BbcHJpdi0+bW9kZV9pbmRleF0pIC8gaG1heDsNCj4gKw0K PiArCS8qIHN0ZXAgMjogY29udmVydCBleHBvc3VyZV90aW1lIGludG8gU0hSIHZhbHVlICovDQo+ ICsNCj4gKwkvKiBzZXQgU0hSICovDQo+ICsJZXJyID0gaW14Mjc0X3NldF9jb2Fyc2VfdGltZShw cml2LCAmY29hcnNlX3RpbWUpOw0KPiArCWlmIChlcnIpDQo+ICsJCWdvdG8gZmFpbDsNCj4gKw0K PiArCXByaXYtPmN0cmxzLmV4cG9zdXJlLT52YWwgPQ0KPiArCQkJKGNvYXJzZV90aW1lICogaG1h eCArIG5vY3Bpb3BbcHJpdi0+bW9kZV9pbmRleF0pDQo+ICsJCQkvIChJTVgyNzRfUElYQ0xLX0NP TlNUMSAvDQo+IElNWDI3NF9QSVhDTEtfQ09OU1QyKTsNCj4gKw0KPiArCWRldl9kYmcoJnByaXYt PmNsaWVudC0+ZGV2LA0KPiArCQkiJXMgOiBFWFBPU1VSRSBjb250cm9sIHN1Y2Nlc3NcbiIsIF9f ZnVuY19fKTsNCj4gKwlyZXR1cm4gMDsNCj4gKw0KPiArZmFpbDoNCj4gKwlkZXZfZXJyKCZwcml2 LT5jbGllbnQtPmRldiwgIiVzIGVycm9yID0gJWRcbiIsIF9fZnVuY19fLCBlcnIpOw0KPiArDQo+ ICsJcmV0dXJuIGVycjsNCj4gK30NCj4gKw0KPiArLyoNCj4gKyAqIGlteDI3NF9zZXRfdmZsaXAg LSBGdW5jdGlvbiBjYWxsZWQgd2hlbiBzZXR0aW5nIHZlcnRpY2FsIGZsaXANCj4gKyAqIEBwcml2 OiBQb2ludGVyIHRvIGRldmljZSBzdHJ1Y3R1cmUNCj4gKyAqIEB2YWw6IFZhbHVlIGZvciB2Zmxp cCBzZXR0aW5nDQo+ICsgKg0KPiArICogU2V0IHZlcnRpY2FsIGZsaXAgYmFzZWQgb24gaW5wdXQg dmFsdWUuDQo+ICsgKiB2YWwgPSAwOiBub3JtYWwsIG5vIHZlcnRpY2FsIGZsaXANCj4gKyAqIHZh bCA9IDE6IHZlcnRpY2FsIGZsaXAgZW5hYmxlZA0KPiArICogVGhlIGNhbGxlciBzaG91bGQgaG9s ZCB0aGUgbXV0ZXggbG9jayBpbXgyNzQtPmxvY2sgaWYgbmVjZXNzYXJ5DQo+ICsgKg0KPiArICog UmV0dXJuOiAwIG9uIHN1Y2Nlc3MNCj4gKyAqLw0KPiArc3RhdGljIGludCBpbXgyNzRfc2V0X3Zm bGlwKHN0cnVjdCBzdGlteDI3NCAqcHJpdiwgaW50IHZhbCkNCj4gK3sNCj4gKwlpbnQgZXJyOw0K PiArDQo+ICsJZXJyID0gaW14Mjc0X3dyaXRlX3JlZyhwcml2LCBJTVgyNzRfVkZMSVBfUkVHLCB2 YWwpOw0KPiArCWlmIChlcnIpIHsNCj4gKwkJZGV2X2VycigmcHJpdi0+Y2xpZW50LT5kZXYsICJW RklMUCBjb250cm9sIGVycm9yXG4iKTsNCj4gKwkJcmV0dXJuIGVycjsNCj4gKwl9DQo+ICsNCj4g KwlkZXZfZGJnKCZwcml2LT5jbGllbnQtPmRldiwNCj4gKwkJIiVzIDogVkZMSVAgY29udHJvbCBz dWNjZXNzXG4iLCBfX2Z1bmNfXyk7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiAr LyoNCj4gKyAqIGlteDI3NF9zZXRfdGVzdF9wYXR0ZXJuIC0gRnVuY3Rpb24gY2FsbGVkIHdoZW4g c2V0dGluZyB0ZXN0IHBhdHRlcm4NCj4gKyAqIEBwcml2OiBQb2ludGVyIHRvIGRldmljZSBzdHJ1 Y3R1cmUNCj4gKyAqIEB2YWw6IFZhcmlhYmxlIGZvciB0ZXN0IHBhdHRlcm4NCj4gKyAqDQo+ICsg KiBTZXQgdG8gZGlmZmVyZW50IHRlc3QgcGF0dGVybnMgYmFzZWQgb24gaW5wdXQgdmFsdWUuDQo+ ICsgKg0KPiArICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MNCj4gKyAqLw0KPiArc3RhdGljIGludCBp bXgyNzRfc2V0X3Rlc3RfcGF0dGVybihzdHJ1Y3Qgc3RpbXgyNzQgKnByaXYsIGludCB2YWwpDQo+ ICt7DQo+ICsJaW50IGVyciA9IDA7DQo+ICsNCj4gKwlpZiAodmFsID09IFRFU1RfUEFUVEVSTl9E SVNBQkxFRCkgew0KPiArCQllcnIgPSBpbXgyNzRfd3JpdGVfdGFibGUocHJpdiwgaW14Mjc0X3Rw X2Rpc2FibGVkKTsNCj4gKwl9IGVsc2UgaWYgKHZhbCA8PSBURVNUX1BBVFRFUk5fVl9DT0xPUl9C QVJTKSB7DQo+ICsJCWVyciA9IGlteDI3NF93cml0ZV9yZWcocHJpdiwgSU1YMjc0X1RFU1RfUEFU VEVSTl9SRUcsIHZhbCAtDQo+IDEpOw0KPiArCQlpZiAoIWVycikNCj4gKwkJCWVyciA9IGlteDI3 NF93cml0ZV90YWJsZShwcml2LCBpbXgyNzRfdHBfcmVncyk7DQo+ICsJfSBlbHNlIHsNCj4gKwkJ ZXJyID0gLUVJTlZBTDsNCj4gKwl9DQo+ICsNCj4gKwlpZiAoIWVycikNCj4gKwkJZGV2X2RiZygm cHJpdi0+Y2xpZW50LT5kZXYsDQo+ICsJCQkiJXMgOiBURVNUIFBBVFRFUk4gY29udHJvbCBzdWNj ZXNzXG4iLCBfX2Z1bmNfXyk7DQo+ICsJZWxzZQ0KPiArCQlkZXZfZXJyKCZwcml2LT5jbGllbnQt PmRldiwgIiVzIGVycm9yID0gJWRcbiIsIF9fZnVuY19fLCBlcnIpOw0KPiArDQo+ICsJcmV0dXJu IGVycjsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlubGluZSB2b2lkIGlteDI3NF9jYWxjdWxhdGVf ZnJhbWVfbGVuZ3RoX3JlZ3Moc3RydWN0IHJlZ184IHJlZ3NbM10sDQo+ICsJCQkJCQkgICAgICB1 MzIgZnJhbWVfbGVuZ3RoKQ0KPiArew0KPiArCXJlZ3MtPmFkZHIgPSBJTVgyNzRfRlJBTUVfTEVO R1RIX0FERFJfMTsNCj4gKwlyZWdzLT52YWwgPSAoZnJhbWVfbGVuZ3RoID4+IElNWDI3NF9TSElG VF8xNl9CSVRTKQ0KPiArCQkJJiBJTVgyNzRfTUFTS19MU0JfNF9CSVRTOw0KPiArCShyZWdzICsg MSktPmFkZHIgPSBJTVgyNzRfRlJBTUVfTEVOR1RIX0FERFJfMjsNCj4gKwkocmVncyArIDEpLT52 YWwgPSAoZnJhbWVfbGVuZ3RoID4+IElNWDI3NF9TSElGVF84X0JJVFMpDQo+ICsJCQkmIElNWDI3 NF9NQVNLX0xTQl84X0JJVFM7DQo+ICsJKHJlZ3MgKyAyKS0+YWRkciA9IElNWDI3NF9GUkFNRV9M RU5HVEhfQUREUl8zOw0KPiArCShyZWdzICsgMiktPnZhbCA9IChmcmFtZV9sZW5ndGgpICYgSU1Y Mjc0X01BU0tfTFNCXzhfQklUUzsNCj4gK30NCj4gKw0KPiArLyoNCj4gKyAqIGlteDI3NF9zZXRf ZnJhbWVfbGVuZ3RoIC0gRnVuY3Rpb24gY2FsbGVkIHdoZW4gc2V0dGluZyBmcmFtZSBsZW5ndGgN Cj4gKyAqIEBwcml2OiBQb2ludGVyIHRvIGRldmljZSBzdHJ1Y3R1cmUNCj4gKyAqIEB2YWw6IFZh cmlhYmxlIGZvciBmcmFtZSBsZW5ndGggKD0gVk1BWCwgaS5lLiB2ZXJ0aWNhbCBkcml2ZSBwZXJp b2QgbGVuZ3RoKQ0KPiArICoNCj4gKyAqIFNldCBmcmFtZSBsZW5ndGggYmFzZWQgb24gaW5wdXQg dmFsdWUuDQo+ICsgKg0KPiArICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MNCj4gKyAqLw0KPiArc3Rh dGljIGludCBpbXgyNzRfc2V0X2ZyYW1lX2xlbmd0aChzdHJ1Y3Qgc3RpbXgyNzQgKnByaXYsIHUz MiB2YWwpDQo+ICt7DQo+ICsJc3RydWN0IHJlZ184IHJlZ19saXN0WzNdOw0KPiArCWludCBlcnI7 DQo+ICsJdTMyIGZyYW1lX2xlbmd0aDsNCj4gKwlpbnQgaTsNCj4gKw0KPiArCWRldl9kYmcoJnBy aXYtPmNsaWVudC0+ZGV2LCAiJXMgOiBpbnB1dCBsZW5ndGggPSAlZFxuIiwNCj4gKwkJX19mdW5j X18sIHZhbCk7DQo+ICsNCj4gKwlmcmFtZV9sZW5ndGggPSAodTMyKXZhbDsNCj4gKw0KPiArCWlt eDI3NF9jYWxjdWxhdGVfZnJhbWVfbGVuZ3RoX3JlZ3MocmVnX2xpc3QsIGZyYW1lX2xlbmd0aCk7 DQo+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmVnX2xpc3QpOyBpKyspIHsNCj4gKwkJ ZXJyID0gaW14Mjc0X3dyaXRlX3JlZyhwcml2LCByZWdfbGlzdFtpXS5hZGRyLA0KPiArCQkJCSAg ICAgICByZWdfbGlzdFtpXS52YWwpOw0KPiArCQlpZiAoZXJyKQ0KPiArCQkJZ290byBmYWlsOw0K PiArCX0NCj4gKw0KPiArCXJldHVybiAwOw0KPiArDQo+ICtmYWlsOg0KPiArCWRldl9lcnIoJnBy aXYtPmNsaWVudC0+ZGV2LCAiJXMgZXJyb3IgPSAlZFxuIiwgX19mdW5jX18sIGVycik7DQo+ICsJ cmV0dXJuIGVycjsNCj4gK30NCj4gKw0KPiArLyoNCj4gKyAqIGlteDI3NF9zZXRfZnJhbWVfaW50 ZXJ2YWwgLSBGdW5jdGlvbiBjYWxsZWQgd2hlbiBzZXR0aW5nIGZyYW1lIGludGVydmFsDQo+ICsg KiBAcHJpdjogUG9pbnRlciB0byBkZXZpY2Ugc3RydWN0dXJlDQo+ICsgKiBAZnJhbWVfaW50ZXJ2 YWw6IFZhcmlhYmxlIGZvciBmcmFtZSBpbnRlcnZhbA0KPiArICoNCj4gKyAqIENoYW5nZSBmcmFt ZSBpbnRlcnZhbCBieSB1cGRhdGluZyBWTUFYIHZhbHVlDQo+ICsgKiBUaGUgY2FsbGVyIHNob3Vs ZCBob2xkIHRoZSBtdXRleCBsb2NrIGlteDI3NC0+bG9jayBpZiBuZWNlc3NhcnkNCj4gKyAqDQo+ ICsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcw0KPiArICovDQo+ICtzdGF0aWMgaW50IGlteDI3NF9z ZXRfZnJhbWVfaW50ZXJ2YWwoc3RydWN0IHN0aW14Mjc0ICpwcml2LA0KPiArCQkJCSAgICAgc3Ry dWN0IHY0bDJfZnJhY3QgZnJhbWVfaW50ZXJ2YWwpDQo+ICt7DQo+ICsJaW50IGVycjsNCj4gKwl1 MzIgZnJhbWVfbGVuZ3RoLCByZXFfZnJhbWVfcmF0ZTsNCj4gKwl1MTYgc3ZyOw0KPiArCXUxNiBo bWF4Ow0KPiArCXU4IHJlZ192YWxbMl07DQo+ICsNCj4gKwlkZXZfZGJnKCZwcml2LT5jbGllbnQt PmRldiwgIiVzOiBpbnB1dCBmcmFtZSBpbnRlcnZhbCA9ICVkIC8gJWQiLA0KPiArCQlfX2Z1bmNf XywgZnJhbWVfaW50ZXJ2YWwubnVtZXJhdG9yLA0KPiArCQlmcmFtZV9pbnRlcnZhbC5kZW5vbWlu YXRvcik7DQo+ICsNCj4gKwlpZiAoZnJhbWVfaW50ZXJ2YWwubnVtZXJhdG9yID09IDApIHsNCj4g KwkJZXJyID0gLUVJTlZBTDsNCj4gKwkJZ290byBmYWlsOw0KPiArCX0NCj4gKw0KPiArCXJlcV9m cmFtZV9yYXRlID0gKHUzMikoZnJhbWVfaW50ZXJ2YWwuZGVub21pbmF0b3INCj4gKwkJCQkvIGZy YW1lX2ludGVydmFsLm51bWVyYXRvcik7DQo+ICsNCj4gKwkvKiBib3VuZGFyeSBjaGVjayAqLw0K PiArCWlmIChyZXFfZnJhbWVfcmF0ZSA+IG1heF9mcmFtZV9yYXRlW3ByaXYtPm1vZGVfaW5kZXhd KSB7DQo+ICsJCWZyYW1lX2ludGVydmFsLm51bWVyYXRvciA9IDE7DQo+ICsJCWZyYW1lX2ludGVy dmFsLmRlbm9taW5hdG9yID0NCj4gKwkJCQkJbWF4X2ZyYW1lX3JhdGVbcHJpdi0+bW9kZV9pbmRl eF07DQo+ICsJfSBlbHNlIGlmIChyZXFfZnJhbWVfcmF0ZSA8IElNWDI3NF9NSU5fRlJBTUVfUkFU RSkgew0KPiArCQlmcmFtZV9pbnRlcnZhbC5udW1lcmF0b3IgPSAxOw0KPiArCQlmcmFtZV9pbnRl cnZhbC5kZW5vbWluYXRvciA9IElNWDI3NF9NSU5fRlJBTUVfUkFURTsNCj4gKwl9DQo+ICsNCj4g KwkvKg0KPiArCSAqIFZNQVggPSAxL2ZyYW1lX3JhdGUgeCA3Mk0gLyAoU1ZSKzEpIC8gSE1BWA0K PiArCSAqIGZyYW1lX2xlbmd0aCAoaS5lLiBWTUFYKSA9IChmcmFtZV9pbnRlcnZhbCkgeCA3Mk0g LyhTVlIrMSkgLyBITUFYDQo+ICsJICovDQo+ICsNCj4gKwkvKiBTVlIgKi8NCj4gKwllcnIgPSBp bXgyNzRfcmVhZF9yZWcocHJpdiwgSU1YMjc0X1NWUl9SRUdfTFNCLCAmcmVnX3ZhbFswXSk7DQo+ ICsJaWYgKGVycikNCj4gKwkJZ290byBmYWlsOw0KPiArCWVyciA9IGlteDI3NF9yZWFkX3JlZyhw cml2LCBJTVgyNzRfU1ZSX1JFR19NU0IsICZyZWdfdmFsWzFdKTsNCj4gKwlpZiAoZXJyKQ0KPiAr CQlnb3RvIGZhaWw7DQo+ICsJc3ZyID0gKHJlZ192YWxbMV0gPDwgSU1YMjc0X1NISUZUXzhfQklU UykgKyByZWdfdmFsWzBdOw0KPiArCWRldl9kYmcoJnByaXYtPmNsaWVudC0+ZGV2LA0KPiArCQki JXMgOiByZWdpc3RlciBTVlIgPSAlZFxuIiwgX19mdW5jX18sIHN2cik7DQo+ICsNCj4gKwkvKiBI TUFYICovDQo+ICsJZXJyID0gaW14Mjc0X3JlYWRfcmVnKHByaXYsIElNWDI3NF9ITUFYX1JFR19M U0IsICZyZWdfdmFsWzBdKTsNCj4gKwlpZiAoZXJyKQ0KPiArCQlnb3RvIGZhaWw7DQo+ICsJZXJy ID0gaW14Mjc0X3JlYWRfcmVnKHByaXYsIElNWDI3NF9ITUFYX1JFR19NU0IsICZyZWdfdmFsWzFd KTsNCj4gKwlpZiAoZXJyKQ0KPiArCQlnb3RvIGZhaWw7DQo+ICsJaG1heCA9IChyZWdfdmFsWzFd IDw8IElNWDI3NF9TSElGVF84X0JJVFMpICsgcmVnX3ZhbFswXTsNCj4gKwlkZXZfZGJnKCZwcml2 LT5jbGllbnQtPmRldiwNCj4gKwkJIiVzIDogcmVnaXN0ZXIgSE1BWCA9ICVkXG4iLCBfX2Z1bmNf XywgaG1heCk7DQo+ICsNCj4gKwlpZiAoaG1heCA9PSAwIHx8IGZyYW1lX2ludGVydmFsLmRlbm9t aW5hdG9yID09IDApIHsNCj4gKwkJZXJyID0gLUVJTlZBTDsNCj4gKwkJZ290byBmYWlsOw0KPiAr CX0NCj4gKw0KPiArCWZyYW1lX2xlbmd0aCA9IElNWDI3NF9QSVhDTEtfQ09OU1QxIC8gKHN2ciAr IDEpIC8gaG1heA0KPiArCQkJCQkqIGZyYW1lX2ludGVydmFsLm51bWVyYXRvcg0KPiArCQkJCQkv IGZyYW1lX2ludGVydmFsLmRlbm9taW5hdG9yOw0KPiArDQo+ICsJZXJyID0gaW14Mjc0X3NldF9m cmFtZV9sZW5ndGgocHJpdiwgZnJhbWVfbGVuZ3RoKTsNCj4gKwlpZiAoZXJyKQ0KPiArCQlnb3Rv IGZhaWw7DQo+ICsNCj4gKwlwcml2LT5mcmFtZV9pbnRlcnZhbCA9IGZyYW1lX2ludGVydmFsOw0K PiArCXJldHVybiAwOw0KPiArDQo+ICtmYWlsOg0KPiArCWRldl9lcnIoJnByaXYtPmNsaWVudC0+ ZGV2LCAiJXMgZXJyb3IgPSAlZFxuIiwgX19mdW5jX18sIGVycik7DQo+ICsJcmV0dXJuIGVycjsN Cj4gK30NCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9wYWRfb3BzIGlt eDI3NF9wYWRfb3BzID0gew0KPiArCS5nZXRfZm10ID0gaW14Mjc0X2dldF9mbXQsDQo+ICsJLnNl dF9mbXQgPSBpbXgyNzRfc2V0X2ZtdCwNCj4gK307DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgdjRsMl9zdWJkZXZfdmlkZW9fb3BzIGlteDI3NF92aWRlb19vcHMgPSB7DQo+ICsJLmdfZnJh bWVfaW50ZXJ2YWwgPSBpbXgyNzRfZ19mcmFtZV9pbnRlcnZhbCwNCj4gKwkuc19mcmFtZV9pbnRl cnZhbCA9IGlteDI3NF9zX2ZyYW1lX2ludGVydmFsLA0KPiArCS5zX3N0cmVhbSA9IGlteDI3NF9z X3N0cmVhbSwNCj4gK307DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZf b3BzIGlteDI3NF9zdWJkZXZfb3BzID0gew0KPiArCS5wYWQgPSAmaW14Mjc0X3BhZF9vcHMsDQo+ ICsJLnZpZGVvID0gJmlteDI3NF92aWRlb19vcHMsDQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMgY29u c3Qgc3RydWN0IHY0bDJfY3RybF9vcHMgaW14Mjc0X2N0cmxfb3BzID0gew0KPiArCS5zX2N0cmwJ PSBpbXgyNzRfc19jdHJsLA0KPiArfTsNCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9k ZXZpY2VfaWQgaW14Mjc0X29mX2lkX3RhYmxlW10gPSB7DQo+ICsJeyAuY29tcGF0aWJsZSA9ICJz b255LGlteDI3NCIgfSwNCj4gKwl7IH0NCj4gK307DQo+ICtNT0RVTEVfREVWSUNFX1RBQkxFKG9m LCBpbXgyNzRfb2ZfaWRfdGFibGUpOw0KPiArDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19k ZXZpY2VfaWQgaW14Mjc0X2lkW10gPSB7DQo+ICsJeyAiSU1YMjc0IiwgMCB9LA0KPiArCXsgfQ0K PiArfTsNCj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBpbXgyNzRfaWQpOw0KPiArDQo+ICtz dGF0aWMgaW50IGlteDI3NF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LA0KPiArCQkJ Y29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQ0KPiArew0KPiArCXN0cnVjdCB2NGwyX3N1 YmRldiAqc2Q7DQo+ICsJc3RydWN0IHN0aW14Mjc0ICppbXgyNzQ7DQo+ICsJaW50IHJldDsNCj4g Kw0KPiArCS8qIGluaXRpYWxpemUgaW14Mjc0ICovDQo+ICsJaW14Mjc0ID0gZGV2bV9remFsbG9j KCZjbGllbnQtPmRldiwgc2l6ZW9mKCppbXgyNzQpLCBHRlBfS0VSTkVMKTsNCj4gKwlpZiAoIWlt eDI3NCkNCj4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ICsNCj4gKwltdXRleF9pbml0KCZpbXgyNzQt PmxvY2spOw0KPiArDQo+ICsJLyogaW5pdGlhbGl6ZSByZWdtYXAgKi8NCj4gKwlpbXgyNzQtPnJl Z21hcCA9IGRldm1fcmVnbWFwX2luaXRfaTJjKGNsaWVudCwNCj4gJmlteDI3NF9yZWdtYXBfY29u ZmlnKTsNCj4gKwlpZiAoSVNfRVJSKGlteDI3NC0+cmVnbWFwKSkgew0KPiArCQlkZXZfZXJyKCZj bGllbnQtPmRldiwNCj4gKwkJCSJyZWdtYXAgaW5pdCBmYWlsZWQ6ICVsZFxuIiwgUFRSX0VSUihp bXgyNzQtDQo+ID5yZWdtYXApKTsNCj4gKwkJcmV0ID0gLUVOT0RFVjsNCj4gKwkJZ290byBlcnJf cmVnbWFwOw0KPiArCX0NCj4gKw0KPiArCS8qIGluaXRpYWxpemUgc3ViZGV2aWNlICovDQo+ICsJ aW14Mjc0LT5jbGllbnQgPSBjbGllbnQ7DQo+ICsJc2QgPSAmaW14Mjc0LT5zZDsNCj4gKwl2NGwy X2kyY19zdWJkZXZfaW5pdChzZCwgY2xpZW50LCAmaW14Mjc0X3N1YmRldl9vcHMpOw0KPiArCXN0 cmxjcHkoc2QtPm5hbWUsIERSSVZFUl9OQU1FLCBzaXplb2Yoc2QtPm5hbWUpKTsNCj4gKwlzZC0+ ZmxhZ3MgfD0gVjRMMl9TVUJERVZfRkxfSEFTX0RFVk5PREUgfA0KPiBWNEwyX1NVQkRFVl9GTF9I QVNfRVZFTlRTOw0KPiArDQo+ICsJLyogaW5pdGlhbGl6ZSBzdWJkZXYgbWVkaWEgcGFkICovDQo+ ICsJaW14Mjc0LT5wYWQuZmxhZ3MgPSBNRURJQV9QQURfRkxfU09VUkNFOw0KPiArCXNkLT5lbnRp dHkuZnVuY3Rpb24gPSBNRURJQV9FTlRfRl9DQU1fU0VOU09SOw0KPiArCXJldCA9IG1lZGlhX2Vu dGl0eV9wYWRzX2luaXQoJnNkLT5lbnRpdHksIDEsICZpbXgyNzQtPnBhZCk7DQo+ICsJaWYgKHJl dCA8IDApIHsNCj4gKwkJZGV2X2VycigmY2xpZW50LT5kZXYsDQo+ICsJCQkiJXMgOiBtZWRpYSBl bnRpdHkgaW5pdCBGYWlsZWQgJWRcbiIsIF9fZnVuY19fLCByZXQpOw0KPiArCQlnb3RvIGVycl9y ZWdtYXA7DQo+ICsJfQ0KPiArDQo+ICsJLyogaW5pdGlhbGl6ZSBzZW5zb3IgcmVzZXQgZ3BpbyAq Lw0KPiArCWlteDI3NC0+cmVzZXRfZ3BpbyA9IGRldm1fZ3Bpb2RfZ2V0X29wdGlvbmFsKCZjbGll bnQtPmRldiwgInJlc2V0IiwNCj4gKwkJCQkJCSAgICAgR1BJT0RfT1VUX0hJR0gpOw0KPiArCWlm IChJU19FUlIoaW14Mjc0LT5yZXNldF9ncGlvKSkgew0KPiArCQlpZiAoUFRSX0VSUihpbXgyNzQt PnJlc2V0X2dwaW8pICE9IC1FUFJPQkVfREVGRVIpDQo+ICsJCQlkZXZfZXJyKCZjbGllbnQtPmRl diwgIlJlc2V0IEdQSU8gbm90IHNldHVwIGluIERUIik7DQo+ICsJCXJldCA9IFBUUl9FUlIoaW14 Mjc0LT5yZXNldF9ncGlvKTsNCj4gKwkJZ290byBlcnJfbWU7DQo+ICsJfQ0KPiArDQo+ICsJLyog cHVsbCBzZW5zb3Igb3V0IG9mIHJlc2V0ICovDQo+ICsJaW14Mjc0X3Jlc2V0KGlteDI3NCwgMSk7 DQo+ICsNCj4gKwkvKiBpbml0aWFsaXplIGNvbnRyb2xzICovDQo+ICsJcmV0ID0gdjRsMl9jdHJs X2hhbmRsZXJfaW5pdCgmaW14Mjc0LT5jdHJscy5oYW5kbGVyLCAyKTsNCj4gKwlpZiAocmV0IDwg MCkgew0KPiArCQlkZXZfZXJyKCZjbGllbnQtPmRldiwNCj4gKwkJCSIlcyA6IGN0cmwgaGFuZGxl ciBpbml0IEZhaWxlZFxuIiwgX19mdW5jX18pOw0KPiArCQlnb3RvIGVycl9tZTsNCj4gKwl9DQo+ ICsNCj4gKwlpbXgyNzQtPmN0cmxzLmhhbmRsZXIubG9jayA9ICZpbXgyNzQtPmxvY2s7DQo+ICsN Cj4gKwkvKiBhZGQgbmV3IGNvbnRyb2xzICovDQo+ICsJaW14Mjc0LT5jdHJscy50ZXN0X3BhdHRl cm4gPSB2NGwyX2N0cmxfbmV3X3N0ZF9tZW51X2l0ZW1zKA0KPiArCQkmaW14Mjc0LT5jdHJscy5o YW5kbGVyLCAmaW14Mjc0X2N0cmxfb3BzLA0KPiArCQlWNEwyX0NJRF9URVNUX1BBVFRFUk4sDQo+ ICsJCUFSUkFZX1NJWkUodHBfcW1lbnUpIC0gMSwgMCwgMCwgdHBfcW1lbnUpOw0KPiArDQo+ICsJ aW14Mjc0LT5jdHJscy5nYWluID0gdjRsMl9jdHJsX25ld19zdGQoDQo+ICsJCSZpbXgyNzQtPmN0 cmxzLmhhbmRsZXIsDQo+ICsJCSZpbXgyNzRfY3RybF9vcHMsDQo+ICsJCVY0TDJfQ0lEX0dBSU4s IElNWDI3NF9NSU5fR0FJTiwNCj4gKwkJSU1YMjc0X01BWF9ESUdJVEFMX0dBSU4gKiBJTVgyNzRf TUFYX0FOQUxPR19HQUlOLA0KPiAxLA0KPiArCQlJTVgyNzRfREVGX0dBSU4pOw0KPiArDQo+ICsJ aW14Mjc0LT5jdHJscy5leHBvc3VyZSA9IHY0bDJfY3RybF9uZXdfc3RkKA0KPiArCQkmaW14Mjc0 LT5jdHJscy5oYW5kbGVyLA0KPiArCQkmaW14Mjc0X2N0cmxfb3BzLA0KPiArCQlWNEwyX0NJRF9F WFBPU1VSRSwgSU1YMjc0X01JTl9FWFBPU1VSRV9USU1FLA0KPiArCQkxMDAwMDAwIC8gSU1YMjc0 X0RFRl9GUkFNRV9SQVRFLCAxLA0KPiArCQlJTVgyNzRfTUlOX0VYUE9TVVJFX1RJTUUpOw0KPiAr DQo+ICsJaW14Mjc0LT5jdHJscy52ZmxpcCA9IHY0bDJfY3RybF9uZXdfc3RkKA0KPiArCQkmaW14 Mjc0LT5jdHJscy5oYW5kbGVyLA0KPiArCQkmaW14Mjc0X2N0cmxfb3BzLA0KPiArCQlWNEwyX0NJ RF9WRkxJUCwgMCwgMSwgMSwgMCk7DQo+ICsNCj4gKwlpbXgyNzQtPnNkLmN0cmxfaGFuZGxlciA9 ICZpbXgyNzQtPmN0cmxzLmhhbmRsZXI7DQo+ICsJaWYgKGlteDI3NC0+Y3RybHMuaGFuZGxlci5l cnJvcikgew0KPiArCQlyZXQgPSBpbXgyNzQtPmN0cmxzLmhhbmRsZXIuZXJyb3I7DQo+ICsJCWdv dG8gZXJyX2N0cmxzOw0KPiArCX0NCj4gKw0KPiArCS8qIHNldHVwIGRlZmF1bHQgY29udHJvbHMg Ki8NCj4gKwlyZXQgPSB2NGwyX2N0cmxfaGFuZGxlcl9zZXR1cCgmaW14Mjc0LT5jdHJscy5oYW5k bGVyKTsNCj4gKwlpZiAocmV0KSB7DQo+ICsJCWRldl9lcnIoJmNsaWVudC0+ZGV2LA0KPiArCQkJ IkVycm9yICVkIHNldHVwIGRlZmF1bHQgY29udHJvbHNcbiIsIHJldCk7DQo+ICsJCWdvdG8gZXJy X2N0cmxzOw0KPiArCX0NCj4gKw0KPiArCS8qIGluaXRpYWxpemUgZm9ybWF0ICovDQo+ICsJaW14 Mjc0LT5tb2RlX2luZGV4ID0gSU1YMjc0X01PREVfMzg0MFgyMTYwOw0KPiArCWlteDI3NC0+Zm9y bWF0LndpZHRoID0gaW14Mjc0X2Zvcm1hdHNbMF0uc2l6ZS53aWR0aDsNCj4gKwlpbXgyNzQtPmZv cm1hdC5oZWlnaHQgPSBpbXgyNzRfZm9ybWF0c1swXS5zaXplLmhlaWdodDsNCj4gKwlpbXgyNzQt PmZvcm1hdC5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsNCj4gKwlpbXgyNzQtPmZvcm1hdC5jb2Rl ID0gTUVESUFfQlVTX0ZNVF9TUkdHQjEwXzFYMTA7DQo+ICsJaW14Mjc0LT5mb3JtYXQuY29sb3Jz cGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCOw0KPiArCWlteDI3NC0+ZnJhbWVfaW50ZXJ2YWwu bnVtZXJhdG9yID0gMTsNCj4gKwlpbXgyNzQtPmZyYW1lX2ludGVydmFsLmRlbm9taW5hdG9yID0g SU1YMjc0X0RFRl9GUkFNRV9SQVRFOw0KPiArDQo+ICsJLyogbG9hZCBkZWZhdWx0IGNvbnRyb2wg dmFsdWVzICovDQo+ICsJcmV0ID0gaW14Mjc0X2xvYWRfZGVmYXVsdChpbXgyNzQpOw0KPiArCWlm IChyZXQpIHsNCj4gKwkJZGV2X2VycigmY2xpZW50LT5kZXYsDQo+ICsJCQkiJXMgOiBpbXgyNzRf bG9hZF9kZWZhdWx0IGZhaWxlZCAlZFxuIiwNCj4gKwkJCV9fZnVuY19fLCByZXQpOw0KPiArCQln b3RvIGVycl9jdHJsczsNCj4gKwl9DQo+ICsNCj4gKwkvKiByZWdpc3RlciBzdWJkZXZpY2UgKi8N Cj4gKwlyZXQgPSB2NGwyX2FzeW5jX3JlZ2lzdGVyX3N1YmRldihzZCk7DQo+ICsJaWYgKHJldCA8 IDApIHsNCj4gKwkJZGV2X2VycigmY2xpZW50LT5kZXYsDQo+ICsJCQkiJXMgOiB2NGwyX2FzeW5j X3JlZ2lzdGVyX3N1YmRldiBmYWlsZWQgJWRcbiIsDQo+ICsJCQlfX2Z1bmNfXywgcmV0KTsNCj4g KwkJZ290byBlcnJfY3RybHM7DQo+ICsJfQ0KPiArDQo+ICsJZGV2X2luZm8oJmNsaWVudC0+ZGV2 LCAiaW14Mjc0IDogaW14Mjc0IHByb2JlIHN1Y2Nlc3MgIVxuIik7DQo+ICsJcmV0dXJuIDA7DQo+ ICsNCj4gK2Vycl9jdHJsczoNCj4gKwl2NGwyX2N0cmxfaGFuZGxlcl9mcmVlKCZpbXgyNzQtPmN0 cmxzLmhhbmRsZXIpOw0KPiArZXJyX21lOg0KPiArCW1lZGlhX2VudGl0eV9jbGVhbnVwKCZzZC0+ ZW50aXR5KTsNCj4gK2Vycl9yZWdtYXA6DQo+ICsJbXV0ZXhfZGVzdHJveSgmaW14Mjc0LT5sb2Nr KTsNCj4gKwlyZXR1cm4gcmV0Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGlteDI3NF9yZW1v dmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkNCj4gK3sNCj4gKwlzdHJ1Y3QgdjRsMl9zdWJk ZXYgKnNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7DQo+ICsJc3RydWN0IHN0aW14Mjc0 ICppbXgyNzQgPSB0b19pbXgyNzQoc2QpOw0KPiArDQo+ICsJLyogc3RvcCBzdHJlYW0gKi8NCj4g KwlpbXgyNzRfd3JpdGVfdGFibGUoaW14Mjc0LA0KPiBtb2RlX3RhYmxlW0lNWDI3NF9NT0RFX1NU T1BfU1RSRUFNXSk7DQo+ICsNCj4gKwl2NGwyX2FzeW5jX3VucmVnaXN0ZXJfc3ViZGV2KHNkKTsN Cj4gKwl2NGwyX2N0cmxfaGFuZGxlcl9mcmVlKCZpbXgyNzQtPmN0cmxzLmhhbmRsZXIpOw0KPiAr CW1lZGlhX2VudGl0eV9jbGVhbnVwKCZzZC0+ZW50aXR5KTsNCj4gKwltdXRleF9kZXN0cm95KCZp bXgyNzQtPmxvY2spOw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgc3RydWN0 IGkyY19kcml2ZXIgaW14Mjc0X2kyY19kcml2ZXIgPSB7DQo+ICsJLmRyaXZlciA9IHsNCj4gKwkJ Lm5hbWUJPSBEUklWRVJfTkFNRSwNCj4gKwkJLm9mX21hdGNoX3RhYmxlCT0gaW14Mjc0X29mX2lk X3RhYmxlLA0KPiArCX0sDQo+ICsJLnByb2JlCQk9IGlteDI3NF9wcm9iZSwNCj4gKwkucmVtb3Zl CQk9IGlteDI3NF9yZW1vdmUsDQo+ICsJLmlkX3RhYmxlCT0gaW14Mjc0X2lkLA0KPiArfTsNCj4g Kw0KPiArbW9kdWxlX2kyY19kcml2ZXIoaW14Mjc0X2kyY19kcml2ZXIpOw0KPiArDQo+ICtNT0RV TEVfQVVUSE9SKCJMZW9uIEx1byA8bGVvbmxAbGVvcGFyZGltYWdpbmcuY29tPiIpOw0KPiArTU9E VUxFX0RFU0NSSVBUSU9OKCJJTVgyNzQgQ01PUyBJbWFnZSBTZW5zb3IgZHJpdmVyIik7DQo+ICtN T0RVTEVfTElDRU5TRSgiR1BMIHYyIik7DQo+IC0tDQo+IDIuMTQuMC5yYzENCg0K From 1582302023845172171@xxx Thu Oct 26 06:53:20 +0000 2017 X-GM-THRID: 1582302023845172171 X-Gmail-Labels: Inbox,Category Forums