Received: by 2002:a05:6a10:a0d1:0:0:0:0 with SMTP id j17csp477622pxa; Wed, 19 Aug 2020 06:49:52 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzkGjSID8NPL80nvKdUenWL1uVUrycGbKDnVIZVyyXrZRXgdsP5xlf/Sv/2Y0Yb0s8pUO4f X-Received: by 2002:a17:906:4157:: with SMTP id l23mr4224686ejk.491.1597844992497; Wed, 19 Aug 2020 06:49:52 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1597844992; cv=pass; d=google.com; s=arc-20160816; b=qe1FP8Z5bHX0BRcy4gf9EM/gLfPUWWq4tgSdG4B0wdyKgIW9XdAdNhVutNr61lhkej l2sDvFbhP3T/cJHxJ6Ck+DmhnNY6iIzz6bbGmUgaA+jjlrglSs8vR9zyXqKRKL8euCyu yNmoysASDSTyXJK5t9oqVnk0ahD543+9FRPvB5ZEvIXzDNqA0qhk/xgghjZzjqCUFGVF +mnsuq0dItExGJR98kcBrUQXNaNuIR/o+eVHUSmA58AmQmNMaqV7vwwJo7IBgsrPU41W uOsAm/GXZXKFBxLsOHD0rO8bexdOTU1AML7gatgSM80JmV7EKU3BUyCC4P4odUZNWgSI s/7A== 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=xm5WRJniMkqxNzWdeDlPxjK5hQxbz5Q0uDGQ8E4KFx0=; b=t2Z2zJ66HGtFxZks9S6tI2ZO5H5BlSzLtdfsK219upuYl8v3DU/Kxx7hJmMaeCTSyT bF2H8VMK66prAJLGJ4uU8K7R6ZwBRw9iGLVw1kUHN3ozFM/GyLPYeXE3awLVivjVvLbD fAKFWgX8OsV/gczldnAlCeVHSVC51ImQzmXNIpq8s4ivjferxZTu88GjLKiuNYDxkqRE TRbVJethtlxrKJx0veJBuPSUtNOOq2We/FTLugHDrYkdvWZomfQshNZfj/ujWC3j4kcm 7TTIU97LOqW+mFV1WiCNc2+Q61fqgE1RGkLVk8NQNgzxRP5HGczg2f/p8E/QBl61T6QN FyEA== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@xilinx.onmicrosoft.com header.s=selector2-xilinx-onmicrosoft-com header.b=O+3o2USs; 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 i27si15238250ejh.425.2020.08.19.06.49.27; Wed, 19 Aug 2020 06:49:52 -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=O+3o2USs; 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 S1728175AbgHSNsY (ORCPT + 99 others); Wed, 19 Aug 2020 09:48:24 -0400 Received: from mail-dm6nam12on2054.outbound.protection.outlook.com ([40.107.243.54]:50785 "EHLO NAM12-DM6-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1728350AbgHSNrN (ORCPT ); Wed, 19 Aug 2020 09:47:13 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=FP5r1aXfdmB2k3ZRc6zFxvxpaVhUdkKrI3gjLEhOAONh1sun6fKqyCotjrIKn/XKZop+ozi8hQiLw49O8ZKOOHRTCX0BkHRizLHMjtWTc4ZSRl8+sb8/HLeSX4liaBEFbezV34adTP6b97PTaUJnzCXuQpVG4TUqH4IMFvC79ocEWzyHKOvW4HEEBmL6xlb8NOgA+6nRrQmbjrkCj9/KRW0qg+XEE/HCG1VuilRVqo4M0ntl9KL6zymJKggIWdhlvMfD7oJ0uLwLxx4Vmn205kDm6NWjKWT2VF5s1atV+OjgLA0LV5pwj6tpfN+miSeNp5ajWl7sjZuHPZmBLKadwA== 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=xm5WRJniMkqxNzWdeDlPxjK5hQxbz5Q0uDGQ8E4KFx0=; b=lXXgRnq7H/G44nyHk7APZzmGKjeR4g4h9YroEdRhXFU28dssqvuvkrXmaMSmjJVlUWeZNvPt5Qtv+G3j9B2urE+qjZ1++S7TNICeIsmecMbwzDcdDYud30xc+pEfycZ3LsOnIX+zGql6GAEKg+qWSCrxe/8iDih7izXS69oOkZ2OqZNxCoPA+aSWD/JAoKsAEVuGwOYuCvFz6fk7CuV6iwqCvRdH3gx6W0Zz7eo8NjOeIE8iNG6ZzEN8Qse92pS5t3KXZva36C1rxFa53tCLaCDh/Fgd6+AX28xLZBkZtBZGyn+sqK346ZHwnPoA2zU2wMewD9HaD/2xALISkktatw== 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=xm5WRJniMkqxNzWdeDlPxjK5hQxbz5Q0uDGQ8E4KFx0=; b=O+3o2USsfBhjbEBAEUG6OTOulLDjDSjHQ1XIQPRQHzQDg/Xz8Ar4TxbeZuARFqr/tEVX2j7GVe8mbFBN7OeF5G8cRiL9Ns9nJLXji4eIM3nD6wEl2duSwip+9vsgRA0eNtSB8MbvwgQSCAFWs2/yQDveVVgAbwFiZaAhYw8zSoc= Received: from BY5PR02MB6867.namprd02.prod.outlook.com (2603:10b6:a03:21c::9) by BY5PR02MB6132.namprd02.prod.outlook.com (2603:10b6:a03:1fc::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3283.16; Wed, 19 Aug 2020 13:47:02 +0000 Received: from BY5PR02MB6867.namprd02.prod.outlook.com ([fe80::4d8f:74f9:c5e:af5a]) by BY5PR02MB6867.namprd02.prod.outlook.com ([fe80::4d8f:74f9:c5e:af5a%4]) with mapi id 15.20.3305.024; Wed, 19 Aug 2020 13:47:02 +0000 From: Vishal Sagar To: Hans Verkuil , Hyun Kwon , "laurent.pinchart@ideasonboard.com" , "mchehab@kernel.org" , "robh+dt@kernel.org" , "mark.rutland@arm.com" , Michal Simek , "linux-media@vger.kernel.org" , "devicetree@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , "linux-kernel@vger.kernel.org" , "joe@perches.com" CC: Sandip Kothari , Dinesh Kumar Subject: RE: [PATCH v3 3/3] media: v4l: xilinx: Add Xilinx UHD-SDI Rx Subsystem driver Thread-Topic: [PATCH v3 3/3] media: v4l: xilinx: Add Xilinx UHD-SDI Rx Subsystem driver Thread-Index: AQHWRTIONtInjOSCdEu7G+eaSf+1LKjpH6OAgFa0IGA= Date: Wed, 19 Aug 2020 13:47:02 +0000 Message-ID: References: <20200618053304.14551-1-vishal.sagar@xilinx.com> <20200618053304.14551-4-vishal.sagar@xilinx.com> <50cc4f4b-e788-c5ad-cd6a-b428b96d5377@xs4all.nl> In-Reply-To: <50cc4f4b-e788-c5ad-cd6a-b428b96d5377@xs4all.nl> 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: xs4all.nl; dkim=none (message not signed) header.d=none;xs4all.nl; dmarc=none action=none header.from=xilinx.com; x-originating-ip: [149.199.50.129] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: eb621417-f4f0-4a5f-aa95-08d844465a77 x-ms-traffictypediagnostic: BY5PR02MB6132: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:632; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: m1ZKZ69QgxzldR4aTO+9QbneOGN1ZDEJDXbP60B9dkXi9LIh2oR/08rWDaic76NaDnD7BOcB4w7HM/ZkOeVyjNpHR5GH2x9xmZ9ZlOzJvnvQDUHZJvTLjXS0XYCh0qMfRnUL119Ia57pY2NZt1BB/F6QEO7jF4UUyOXgqZzmBp7jlwqgV9Zfpoh8mZjs44gtbR/EPESjox5XIHqbpPZntPPgAmTly6SzL6KmTPwUzraMbhms/rP9imtYp28DUHUi2uMqwM6xlBvpbWcvprWZ+qBWYNOEk333KaTjGvc4bgZI8n0c3ajm+07ZE0/7OmyUgYs1U9NwWhEwgKqe9cRpo1kkXUwMGJwDgsd3HTIv386FtrjcfNiTLd9sREgilkMew7HN4OoqN7mRRDLSqCm+P7Y3zbH6xk/9r4aDWCV3WreybUZQzA5WRYpAEDBSk1zzMTzslr3vlGOlLzkITGzwXD7FbYMBPxKqf0Clk29lZrA= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BY5PR02MB6867.namprd02.prod.outlook.com;PTR:;CAT:NONE;SFS:(39860400002)(366004)(136003)(396003)(346002)(376002)(66446008)(86362001)(83380400001)(66556008)(8936002)(5660300002)(64756008)(66946007)(66476007)(2906002)(8676002)(7416002)(33656002)(76116006)(71200400001)(6506007)(4326008)(30864003)(26005)(316002)(7696005)(107886003)(54906003)(53546011)(478600001)(9686003)(966005)(55016002)(52536014)(186003)(110136005)(278034004)(921003)(579004)(559001);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata: oorzmqD5ckX7g0M5xeZ919+f6NRuRux6hm8XVqZD5xZWqYdTXtL4yMWjB3Qe9YpgtAPVKDbWH/qR7HLjfwbfF9YCBlOzxJeeIzMO/+LoVjN49HQ0EpGOVGTNTXPTnNtFh3+l4ywPL52jHPVV5crNpitsensTD2BNJr24fWMDJSiWKew5S5dQlSAH29vEJCsuQp0l8YjIu6LgrG92nrYsxd01e6c4BtjWOLTKnyc2l1GhnlEQBQ/CjVCXbs6YVgtaMc+5pzI0DL6azISWjwxY0hjxi1fh5RW2lvGQeDqsVQsROP4KIjme5wUZkeQdRLB33yU6R4ymetIfvNx2tnRzAvCZ2RM35oH1JpNYePGrB9KtAaZ0PiSuqCYOL5nlbyeZ12ojITf5tbwY7yHfJvTYIdSrC4fx1EDt5v7noZK4+aCWmZa7lSeaqWsSvhDwkXNuRJFriomyUtBkLZhVXG/KnP8WLAUapwh82Theh2pBtg1y0cv8xBFkkkOLifxZUwIzUcb/R/ULAfwkkZ8bV9RYe0UscOa3EqoHXppVJxNbzEpf5ZDq1j1wCdrQSPPRBBVpSDbfYEjO2E8R723ErgVBJoKQnPrBVNAkjymi9lUwQX5gMeksNOWKkDQlVdLOXUfJyhx+7JqcgVyQwVQqxfy7YQ== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: xilinx.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: BY5PR02MB6867.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: eb621417-f4f0-4a5f-aa95-08d844465a77 X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Aug 2020 13:47:02.6617 (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: JlnVPb4PCP5xYN9NceknvCSCdQGMamdl4z1AQ819gvGmRYd+ONGW/Db8V/qJerO/vL0gS11OMpeNoDmZgopiUg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR02MB6132 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkgSGFucywNCg0KVGhhbmtzIGZvciB0aGUgcmV2aWV3Lg0KUGxlYXNlIHNlZSBteSBjb21tZW50 cyBiZWxvdy4NCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBIYW5zIFZl cmt1aWwgPGh2ZXJrdWlsQHhzNGFsbC5ubD4NCj4gU2VudDogVGh1cnNkYXksIEp1bmUgMjUsIDIw MjAgMzoxMyBQTQ0KPiBUbzogVmlzaGFsIFNhZ2FyIDx2c2FnYXJAeGlsaW54LmNvbT47IEh5dW4g S3dvbiA8aHl1bmtAeGlsaW54LmNvbT47DQo+IGxhdXJlbnQucGluY2hhcnRAaWRlYXNvbmJvYXJk LmNvbTsgbWNoZWhhYkBrZXJuZWwub3JnOw0KPiByb2JoK2R0QGtlcm5lbC5vcmc7IG1hcmsucnV0 bGFuZEBhcm0uY29tOyBNaWNoYWwgU2ltZWsNCj4gPG1pY2hhbHNAeGlsaW54LmNvbT47IGxpbnV4 LW1lZGlhQHZnZXIua2VybmVsLm9yZzsNCj4gZGV2aWNldHJlZUB2Z2VyLmtlcm5lbC5vcmc7IGxp bnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZzsgbGludXgtDQo+IGtlcm5lbEB2Z2Vy Lmtlcm5lbC5vcmc7IGpvZUBwZXJjaGVzLmNvbQ0KPiBDYzogU2FuZGlwIEtvdGhhcmkgPHNhbmRp cGtAeGlsaW54LmNvbT47IERpbmVzaCBLdW1hciA8ZGluZXNoa0B4aWxpbnguY29tPg0KPiBTdWJq ZWN0OiBSZTogW1BBVENIIHYzIDMvM10gbWVkaWE6IHY0bDogeGlsaW54OiBBZGQgWGlsaW54IFVI RC1TREkgUnggU3Vic3lzdGVtDQo+IGRyaXZlcg0KPiANCj4gT24gMTgvMDYvMjAyMCAwNzozMywg VmlzaGFsIFNhZ2FyIHdyb3RlOg0KPiA+IFRoZSBYaWxpbnggVUhELVNESSBSeCBzdWJzeXN0ZW0g c29mdCBJUCBpcyB1c2VkIHRvIGNhcHR1cmUgbmF0aXZlIFNESQ0KPiA+IHN0cmVhbXMgZnJvbSBT REkgc291cmNlcyBsaWtlIFNESSBicm9hZGNhc3QgZXF1aXBtZW50IGxpa2UgY2FtZXJhcyBhbmQN Cj4gPiBtaXhlcnMuIFRoaXMgYmxvY2sgb3V0cHV0cyBlaXRoZXIgbmF0aXZlIFNESSwgbmF0aXZl IHZpZGVvIG9yDQo+ID4gQVhJNC1TdHJlYW0gY29tcGxpYW50IGRhdGEgc3RyZWFtIGZvciBmdXJ0 aGVyIHByb2Nlc3NpbmcuIFBsZWFzZSByZWZlcg0KPiA+IHRvIFBHMjkwIGZvciBkZXRhaWxzLg0K PiA+DQo+ID4gVGhlIGRyaXZlciBpcyB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgSVAgdG8gYWRkIGZy YW1lciwgc2VhcmNoIGZvcg0KPiA+IHNwZWNpZmljIG1vZGVzLCBnZXQgdGhlIGRldGVjdGVkIG1v ZGUsIHN0cmVhbSBwYXJhbWV0ZXJzLCBlcnJvcnMsIGV0Yy4NCj4gPiBJdCBhbHNvIGdlbmVyYXRl cyBldmVudHMgZm9yIHZpZGVvIGxvY2svdW5sb2NrLCBicmlkZ2Ugb3Zlci91bmRlciBmbG93Lg0K PiA+DQo+ID4gVGhlIGRyaXZlciBzdXBwb3J0cyAxMC8xMiBicGMgWVVWIDQyMiBtZWRpYSBidXMg Zm9ybWF0IGN1cnJlbnRseS4gSXQNCj4gPiBhbHNvIGRlY29kZXMgdGhlIHN0cmVhbSBwYXJhbWV0 ZXJzIGJhc2VkIG9uIHRoZSBTVDM1MiBwYWNrZXQgZW1iZWRkZWQgaW4NCj4gdGhlDQo+ID4gc3Ry ZWFtLiBJbiBjYXNlIHRoZSBTVDM1MiBwYWNrZXQgaXNuJ3QgcHJlc2VudCBpbiB0aGUgc3RyZWFt LCB0aGUgY29yZSdzDQo+ID4gZGV0ZWN0ZWQgcHJvcGVydGllcyBhcmUgdXNlZCB0byBzZXQgc3Ry ZWFtIHByb3BlcnRpZXMuDQo+ID4NCj4gPiBUaGUgZHJpdmVyIGN1cnJlbnRseSBzdXBwb3J0cyBv bmx5IHRoZSBBWEk0LVN0cmVhbSBJUCBjb25maWd1cmF0aW9uLg0KPiA+DQo+ID4gU2lnbmVkLW9m Zi1ieTogVmlzaGFsIFNhZ2FyIDx2aXNoYWwuc2FnYXJAeGlsaW54LmNvbT4NCj4gPiAtLS0NCj4g PiB2Mw0KPiA+IC0gZml4ZWQgS0NvbmZpZyB3aXRoIGJldHRlciBkZXNjcmlwdGlvbg0KPiA+IC0g cmVtb3ZlZCB1bm5lY2Vzc2FyeSBoZWFkZXIgZmlsZXMNCj4gPiAtIGNvbnZlcnRlZCB1cHBlcmNh c2UgdG8gbG93ZXJjYXNlIGZvciBhbGwgaGV4IHZhbHVlcw0KPiA+IC0gbWVyZ2VkIGNvcmUgc3Ry dWN0IHRvIHN0YXRlIHN0cnVjdA0KPiA+IC0gcmVtb3ZlZCBtb3N0IG9uZSBsaW5lIGZ1bmN0aW9u cyBhbmQgcmVwbGFjZWQgd2l0aCBkaXJlY3QgcmVnDQo+ID4gICByZWFkL3dyaXRlIG9yIG1hY3Jv cw0KPiA+IC0gZHQgcHJvcGVydHkgYnBwIHRvIGJwYy4gZGVmYXVsdCAxMC4gbm90IG1hbmRhdG9y eS4NCj4gPiAtIGZpeGVkIHN1YnNjcmliZSBldmVudHMsIGxvZ19zdGF0dXMsIHNfc3RyZWFtDQo+ ID4gLSBtZXJnZWQgb3ZlcmZsb3cvdW5kZXJmbG93IHRvIG9uZSBldmVudA0KPiA+IC0gbW92ZWQg YWxsIGNvbnRyb2xzIHRvIHhpbGlueC1zZGlyeHNzLmgNCj4gPiAtIG1heCBldmVudHMgZnJvbSAx MjggdG8gOA0KPiA+IC0gdXNlZCBGSUVMRF9HRVQoKSBpbnN0ZWFkIG9mIGN1c3RvbSBtYWNybw0K PiA+IC0gdXBkYXRlZCB0aGUgY29udHJvbHMgZG9jdW1lbnRhdGlvbg0KPiA+IC0gYWRkZWQgc3Bp bmxvY2sNCj4gPiAtIHJlbW92ZWQgM0dCIGNvbnRyb2wgYW5kIGFkZGVkIG1vZGUgdG8gZGV0ZWN0 IGJpdG1hc2sNCj4gPiAtIGZpeGVkIGZvcm1hdCBmb3IgKHdpZHRoLCBoZWlnaHQsIGNvbG9yc3Bh Y2UsIHhmZXIgZnVuYywgZXRjKQ0KPiA+IC0gYWRkZWQgZHZfdGltaW5nc19jYXAsIHMvZ19kdl90 aW1pbmdzDQo+ID4gLSBmaXhlZCBzZXQvZ2V0X2Zvcm1hdA0KPiA+IC0gZml4IHY0bCBjb250cm9s IHJlZ2lzdHJhdGlvbnMNCj4gPiAtIGZpeCBvcmRlciBvZiByZWdpc3RyYXRpb24gLyBkZXJlZ2lz dHJhdGlvbiBpbiBwcm9iZSgpIHJlbW92ZSgpDQo+ID4gLSBmaXhlZCBvdGhlciBjb21tZW50cyBm cm9tIEh5dW4sIExhdXJlbnQgYW5kIEhhbnMNCj4gPiAtIHRoaW5ncyB5ZXQgdG8gY2xvc2UNCj4g PiAgIC0gYWRkaW5nIHNvdXJjZSBwb3J0IGZvciBjb25uZWN0b3IgKExhdXJlbnQncyBzdWdnZXN0 aW9uKQ0KPiA+ICAgLSBhZGRpbmcgbmV3IEZJRUxEIHR5cGUgZm9yIFRyYW5zcG9ydCBTdHJlYW0N Cj4gVjRMMl9GSUVMRF9BTFRFUk5BVEVfUFJPRyAoSGFuJ3Mgc3VnZ2VzdGlvbikNCj4gPiAgIC0g VXBkYXRlIC8gcmVtb3ZlIEVESCBvciBDUkMgcmVsYXRlZCBjb250cm9scw0KPiA+DQo+ID4gdjIN Cj4gPiAtIEFkZGVkIERWIHRpbWluZyBzdXBwb3J0IGJhc2VkIG9uIEhhbnMgVmVya3VpbMWbIGZl ZWRiYWNrDQo+ID4gLSBNb3JlIGRvY3VtZW50YXRpb24gdG8gY3VzdG9tIHY0bCBjb250cm9scyBh bmQgZXZlbnRzDQo+ID4gLSBGaXhlZCBIeXVuxZsgY29tbWVudHMNCj4gPiAtIEFkZGVkIG1hY3Jv IGZvciBtYXNraW5nIGFuZCBzaGlmdGluZyBhcyBwZXIgSm9lIFBlcmNoZXMgY29tbWVudHMNCj4g PiAtIFVwZGF0ZWQgdG8gbGF0ZXN0IGFzIHBlciBYaWxpbnggZ2l0aHViIHJlcG8gZHJpdmVyIGxp a2UNCj4gPiAgIGFkZGluZyBuZXcgRFYgdGltaW5ncyBub3QgaW4gbWFpbmxpbmUgeWV0IHVwdGls bCAwMy8yMS8yMA0KPiA+DQo+ID4gIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0veGlsaW54L0tjb25m aWcgICAgICAgICB8ICAgMTEgKw0KPiA+ICBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL3hpbGlueC9N YWtlZmlsZSAgICAgICAgfCAgICAxICsNCj4gPiAgLi4uL21lZGlhL3BsYXRmb3JtL3hpbGlueC94 aWxpbngtc2Rpcnhzcy5jICAgIHwgMjEyMSArKysrKysrKysrKysrKysrKw0KPiA+ICBpbmNsdWRl L3VhcGkvbGludXgvdjRsMi1jb250cm9scy5oICAgICAgICAgICAgfCAgICA2ICsNCj4gPiAgaW5j bHVkZS91YXBpL2xpbnV4L3hpbGlueC1zZGlyeHNzLmggICAgICAgICAgIHwgIDI4MyArKysNCj4g PiAgNSBmaWxlcyBjaGFuZ2VkLCAyNDIyIGluc2VydGlvbnMoKykNCj4gPiAgY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0veGlsaW54L3hpbGlueC1zZGlyeHNzLmMNCj4g PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvdWFwaS9saW51eC94aWxpbngtc2Rpcnhzcy5o DQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS94aWxpbngvS2Nv bmZpZw0KPiBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0veGlsaW54L0tjb25maWcNCj4gPiBpbmRl eCAwMWM5NmZiNjY0MTQuLjU3OGNkY2MxMDM2ZSAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL21l ZGlhL3BsYXRmb3JtL3hpbGlueC9LY29uZmlnDQo+ID4gKysrIGIvZHJpdmVycy9tZWRpYS9wbGF0 Zm9ybS94aWxpbngvS2NvbmZpZw0KPiA+IEBAIC0xMiw2ICsxMiwxNyBAQCBjb25maWcgVklERU9f WElMSU5YDQo+ID4NCj4gPiAgaWYgVklERU9fWElMSU5YDQo+ID4NCj4gPiArY29uZmlnIFZJREVP X1hJTElOWF9TRElSWFNTDQo+ID4gKwl0cmlzdGF0ZSAiWGlsaW54IFVIRCBTREkgUnggU3Vic3lz dGVtIg0KPiA+ICsJaGVscA0KPiA+ICsJICBEcml2ZXIgZm9yIFhpbGlueCBVSEQtU0RJIFJ4IFN1 YnN5c3RlbS4gVGhpcyBpcyBhIFY0TCBzdWItZGV2aWNlDQo+ID4gKwkgIGJhc2VkIGRyaXZlciB0 aGF0IHRha2VzIGlucHV0IGZyb20gYSBTREkgc291cmNlIGxpa2UgU0RJIGNhbWVyYSBhbmQNCj4g PiArCSAgY29udmVydHMgaXQgaW50byBhbiBBWEk0LVN0cmVhbS4gVGhlIHN1YnN5c3RlbSBjb21w cmlzZXMgYSBTTVBURQ0KPiA+ICsJICBVSEQtU0RJIFJ4IGNvcmUsIGEgU0RJIFJ4IHRvIE5hdGl2 ZSBWaWRlbyBicmlkZ2UgYW5kIGEgVmlkZW8gSW4gdG8NCj4gPiArCSAgQVhJNC1TdHJlYW0gYnJp ZGdlLiBUaGUgZHJpdmVyIGlzIHVzZWQgdG8gc2V0IGRpZmZlcmVudCBzdHJlYW0NCj4gPiArCSAg ZGV0ZWN0aW9uIG1vZGVzIGFuZCBpZGVudGlmeSBzdHJlYW0gcHJvcGVydGllcyB0byBwcm9wZXJs eSBjb25maWd1cmUNCj4gPiArCSAgZG93bnN0cmVhbS4NCj4gPiArDQo+ID4gIGNvbmZpZyBWSURF T19YSUxJTlhfVFBHDQo+ID4gIAl0cmlzdGF0ZSAiWGlsaW54IFZpZGVvIFRlc3QgUGF0dGVybiBH ZW5lcmF0b3IiDQo+ID4gIAlkZXBlbmRzIG9uIFZJREVPX1hJTElOWA0KPiA+IGRpZmYgLS1naXQg YS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3hpbGlueC9NYWtlZmlsZQ0KPiBiL2RyaXZlcnMvbWVk aWEvcGxhdGZvcm0veGlsaW54L01ha2VmaWxlDQo+ID4gaW5kZXggNGNkYzBiMWVjN2E1Li4zYmVh ZjI0ZDgzMmMgMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS94aWxpbngv TWFrZWZpbGUNCj4gPiArKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3hpbGlueC9NYWtlZmls ZQ0KPiA+IEBAIC0zLDUgKzMsNiBAQA0KPiA+ICB4aWxpbngtdmlkZW8tb2JqcyArPSB4aWxpbngt ZG1hLm8geGlsaW54LXZpcC5vIHhpbGlueC12aXBwLm8NCj4gPg0KPiA+ICBvYmotJChDT05GSUdf VklERU9fWElMSU5YKSArPSB4aWxpbngtdmlkZW8ubw0KPiA+ICtvYmotJChDT05GSUdfVklERU9f WElMSU5YX1NESVJYU1MpICs9IHhpbGlueC1zZGlyeHNzLm8NCj4gPiAgb2JqLSQoQ09ORklHX1ZJ REVPX1hJTElOWF9UUEcpICs9IHhpbGlueC10cGcubw0KPiA+ICBvYmotJChDT05GSUdfVklERU9f WElMSU5YX1ZUQykgKz0geGlsaW54LXZ0Yy5vDQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVk aWEvcGxhdGZvcm0veGlsaW54L3hpbGlueC1zZGlyeHNzLmMNCj4gYi9kcml2ZXJzL21lZGlhL3Bs YXRmb3JtL3hpbGlueC94aWxpbngtc2Rpcnhzcy5jDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQN Cj4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLmUzOWFhYjdjNjU2YQ0KPiA+IC0tLSAvZGV2L251bGwN Cj4gPiArKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3hpbGlueC94aWxpbngtc2Rpcnhzcy5j DQo+ID4gQEAgLTAsMCArMSwyMTIxIEBADQo+ID4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBHUEwtMi4wDQo+ID4gKy8qDQo+ID4gKyAqIERyaXZlciBmb3IgWGlsaW54IFNESSBSeCBTdWJz eXN0ZW0NCj4gPiArICoNCj4gPiArICogQ29weXJpZ2h0IChDKSAyMDE3IC0gMjAyMCBYaWxpbngs IEluYy4NCj4gPiArICoNCj4gPiArICogQ29udGFjdHM6IFZpc2hhbCBTYWdhciA8dmlzaGFsLnNh Z2FyQHhpbGlueC5jb20+DQo+ID4gKyAqLw0KPiA+ICsNCj4gPiArI2luY2x1ZGUgPGR0LWJpbmRp bmdzL21lZGlhL3hpbGlueC1zZGkuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2JpdHMuaD4NCj4g PiArI2luY2x1ZGUgPGxpbnV4L2JpdGZpZWxkLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9jbGsu aD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgv cGxhdGZvcm1fZGV2aWNlLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC94aWxpbngtc2Rpcnhzcy5o Pg0KPiA+ICsjaW5jbHVkZSA8bWVkaWEvbWVkaWEtZW50aXR5Lmg+DQo+ID4gKyNpbmNsdWRlIDxt ZWRpYS92NGwyLWN0cmxzLmg+DQo+ID4gKyNpbmNsdWRlIDxtZWRpYS92NGwyLWR2LXRpbWluZ3Mu aD4NCj4gPiArI2luY2x1ZGUgPG1lZGlhL3Y0bDItZXZlbnQuaD4NCj4gPiArI2luY2x1ZGUgPG1l ZGlhL3Y0bDItc3ViZGV2Lmg+DQo+ID4gKw0KDQo8c25pcD4NCg0KPiA+ICsJVjRMMl9EVl9CVF9D RUFfMzg0MFgyMTYwUDYwLA0KPiA+ICsJVjRMMl9EVl9CVF9DRUFfNDA5NlgyMTYwUDI0LA0KPiA+ ICsJVjRMMl9EVl9CVF9DRUFfNDA5NlgyMTYwUDI1LA0KPiA+ICsJVjRMMl9EVl9CVF9DRUFfNDA5 NlgyMTYwUDMwLA0KPiA+ICsJVjRMMl9EVl9CVF9DRUFfNDA5NlgyMTYwUDQ4LA0KPiA+ICsJVjRM Ml9EVl9CVF9DRUFfNDA5NlgyMTYwUDUwLA0KPiA+ICsJVjRMMl9EVl9CVF9DRUFfNDA5NlgyMTYw UDYwLA0KPiA+ICsNCj4gPiArCVhMTlhfVjRMMl9EVl9CVF8yMDQ4WDEwODBQMjQsDQo+ID4gKwlY TE5YX1Y0TDJfRFZfQlRfMjA0OFgxMDgwUDI1LA0KPiA+ICsJWExOWF9WNEwyX0RWX0JUXzIwNDhY MTA4MFAzMCwNCj4gPiArCVhMTlhfVjRMMl9EVl9CVF8yMDQ4WDEwODBJNDgsDQo+ID4gKwlYTE5Y X1Y0TDJfRFZfQlRfMjA0OFgxMDgwSTUwLA0KPiA+ICsJWExOWF9WNEwyX0RWX0JUXzIwNDhYMTA4 MEk2MCwNCj4gPiArCVhMTlhfVjRMMl9EVl9CVF8yMDQ4WDEwODBQNDgsDQo+ID4gKwlYTE5YX1Y0 TDJfRFZfQlRfMjA0OFgxMDgwUDUwLA0KPiA+ICsJWExOWF9WNEwyX0RWX0JUXzIwNDhYMTA4MFA2 MCwNCj4gPiArCVhMTlhfVjRMMl9EVl9CVF8xOTIwWDEwODBJNDgsDQo+IA0KPiBMb29raW5nIGF0 IHRoaXM6DQo+IA0KPiBodHRwczovL3d3dy5zbXB0ZS5vcmcvc2l0ZXMvZGVmYXVsdC9maWxlcy9p bWFnZXMvU01QVEUlMjB3YWxsY2hhcnQlMjMyLjZfDQo+IDIwXzE3LUpVTFklMjAyMDE3LnBkZg0K PiANCj4gSSB3b3VsZCB0aGluayB0aGF0IHRoZXNlIGZvcm1hdHMgYXJlIGRlZmluZWQgaW4gb25l IG9mIHRoZSBzbXB0ZSBzdGFuZGFyZHMsDQo+IHByb2JhYmx5IFNUIDIwNDgtMi4NCj4gDQo+IENh biB5b3UgdGFrZSBhIGxvb2sgaWYgeW91IGhhdmUgdGhpcyBzdGFuZGFyZD8NCj4gDQoNCkkgY2hl Y2tlZCByZWxldmFudCBTTVBURSBzdGFuZGFyZHMgYW5kIG1haWxlZCB0aGUgRENJIGF0IGRjaVtk b3RdaW5mb1thdF1kY2ltb3ZpZXNbZG90XWNvbS4NCkJ1dCBJIGRpZG4ndCBnZXQgdGhlIHRpbWlu Z3MgZm9yIHRoZXNlIERDSSAySyByZXNvbHV0aW9ucy4NCkkgd2lzaCB0byBrZWVwIHRoaXMgYXMg aXMgZm9yIG5vdy4NCg0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RydWN0IHhzZGlyeHNzX2R2X21h cCB7DQo+ID4gKwl1MzIgd2lkdGg7DQo+ID4gKwl1MzIgaGVpZ2h0Ow0KPiA+ICsJdTMyIGZwczsN Cj4gPiArCXN0cnVjdCB2NGwyX2R2X3RpbWluZ3MgdGltaW5nOw0KPiA+ICt9Ow0KPiA+ICsNCj4g PiArc3RhdGljIGNvbnN0IHN0cnVjdCB4c2Rpcnhzc19kdl9tYXAgeHNkaXJ4c3NfZHZfdGltaW5n c1tdID0gew0KPiA+ICsJLyogU0QgLSA3MjB4NDg3aTYwICovDQo+ID4gKwl7IDcyMCwgMjQzLCAz MCwgVjRMMl9EVl9CVF9TRElfNzIwWDQ4N0k2MCB9LA0KPiA+ICsJLyogU0QgLSA3MjB4NTc2aTUw ICovDQo+ID4gKwl7IDcyMCwgMjg4LCAyNSwgVjRMMl9EVl9CVF9DRUFfNzIwWDU3Nkk1MCB9LA0K DQo8c25pcD4NCg0KPiA+ICsNCj4gPiArCS8qIFJlZmVyIFRhYmxlIDMgU01QVEUgU1QgMjA4MS0x MDoyMDE4ICovDQo+ID4gKwlzd2l0Y2ggKGNvbG9yaW1ldHJ5KSB7DQo+ID4gKwljYXNlIFhTVDM1 Ml9CWVRFM19DT0xPUklNRVRSWV9CVDcwOToNCj4gPiArCQlmb3JtYXQtPmNvbG9yc3BhY2UgPSBW NEwyX0NPTE9SU1BBQ0VfUkVDNzA5Ow0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJLyogV2hlbiBIRFIg c3VwcG9ydCBpcyBhZGRlZCBVSERUViB3aWxsIGhhdmUgQlQyMDIwIGNvbG9yc3BhY2UgKi8NCj4g PiArCWNhc2UgWFNUMzUyX0JZVEUzX0NPTE9SSU1FVFJZX1VIRFRWOg0KPiA+ICsJY2FzZSBYU1Qz NTJfQllURTNfQ09MT1JJTUVUUllfQ09MT1JfVkFOQzoNCj4gPiArCWNhc2UgWFNUMzUyX0JZVEUz X0NPTE9SSU1FVFJZX1VOS05PV046DQo+ID4gKwlkZWZhdWx0Og0KPiA+ICsJCWRldl9lcnIoZGV2 LCAiVW5rbm93biBjb2xvcmltZXRyeSA6ICVkXG4iLCBjb2xvcmltZXRyeSk7DQo+IA0KPiBJJ20g YSBiaXQgc3VycHJpc2VkLiBJIHdvdWxkIGV4cGVjdCB0aGF0IFNEVFYgb3ZlciBTREkgd291bGQg dXNlDQo+IFY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME0sIGJ1dCBJIGRvbid0IHNlZSB0aGF0IGhl cmUuDQo+IA0KDQpZZXMgeW91IGFyZSBjb3JyZWN0IGFib3V0IHRoZSBjb2xvcnNwYWNlIGZvciBT RCBtb2RlLiBUaGFua3MgZm9yIGNhdGNoaW5nIHRoaXMuDQpJIHdpbGwgdXBkYXRlIHRoZSBjb2xv cnNwYWNlIHRvIFY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME0gaW4gY2FzZSBvZiBTRCBtb2RlLg0K DQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJeHNkaXJ4c3Nf Z2V0X2ZyYW1lcmF0ZSgmc3RhdGUtPmZyYW1lX2ludGVydmFsLCBmcmFtZXJhdGUpOw0KPiA+ICsN Cg0KPHNuaXA+DQoNCj4gPiArCQkgKiB2aWRlbyBsb2NrIGludGVycnVwdC4NCj4gPiArCQkgKi8N Cj4gPiArCQl4c2Rpcnhzcy0+dmlkbG9ja3dpbiA9IGN0cmwtPnZhbDsNCj4gPiArCQl4c2Rpcnhz c193cml0ZSh4c2RpcnhzcywgWFNESVJYX1ZJRF9MT0NLX1dJTkRPV19SRUcsDQo+ID4gKwkJCSAg ICAgICB4c2Rpcnhzcy0+dmlkbG9ja3dpbik7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIFY0 TDJfQ0lEX1hJTElOWF9TRElSWF9FREhfRVJST1JfU09VUkNFUzoNCj4gPiArCQl4c2Rpcnhzcy0+ ZWRobWFzayA9IGN0cmwtPnZhbCAmIFhTRElSWF9FREhfQUxMRVJSX01BU0s7DQo+IA0KPiBUaGUg JyYgWFNESVJYX0VESF9BTExFUlJfTUFTSycgaXMgbm90IG5lZWRlZCBzaW5jZSB0aGUgY29udHJv bCdzICdtYXgnDQo+IHZhbHVlDQo+IGlzIHNldCB0byBYU0RJUlhfRURIX0FMTEVSUl9NQVNLLCBz byBjdHJsLT52YWwgY2FuJ3QgY29udGFpbiBhbnkgb3RoZXIgYml0cy4NCj4gVGhlIGNvbnRyb2wg ZnJhbWV3b3JrIGVuc3VyZXMgdGhhdC4NCj4gDQoNCk9rLiBJIHdpbGwgcmVtb3ZlIHRoZSAnJiBY U0RJUlhfRURIX0FMTEVSUl9NQVNLJyBpbiBuZXh0IHZlcnNpb24uDQoNCj4gPiArCQl4c2Rpcnhz c193cml0ZSh4c2RpcnhzcywgWFNESVJYX0VESF9FUlJDTlRfRU5fUkVHLA0KPiA+ICsJCQkgICAg ICAgeHNkaXJ4c3MtPmVkaG1hc2spOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBWNEwyX0NJ RF9YSUxJTlhfU0RJUlhfU0VBUkNIX01PREVTOg0KPiA+ICsJCWlmICghY3RybC0+dmFsKSB7DQo+ IA0KPiBUaGlzIGNoZWNrIHNob3VsZCBiZSBkb25lIGluIGEgdHJ5X2N0cmwgZnVuY3Rpb24gaW5z dGVhZCBvZiBzX2N0cmwuDQo+IA0KPiBJbnRlcmVzdGluZywgdGhpcyBpcyB0aGUgZmlyc3QgYml0 bWFzayBjb250cm9sIHdoZXJlIHlvdSBkb24ndCB3YW50IGl0IHRvDQo+IGJlIDAuIElmIHdlIGdl dCBtb3JlIG9mIHRoZXNlIGluIHRoZSBmdXR1cmUsIHRoZW4gaXQgd291bGQgbWFrZSBzZW5zZSBp ZiB0aGlzDQo+IGlzIHN1cHBvcnRlZCBpbiB0aGUgY29udHJvbCBmcmFtZXdvcmsgaXRzZWxmIChl LmcuIGlmIG1pbiBpcyBzZXQgdG8gMSwgdGhlbg0KPiB0aGF0IG1lYW5zIHRoYXQgdGhlIHZhbHVl IGNhbid0IGJlIDApLiBCdXQgZm9yIG5vdyBqdXN0IGNoZWNrIHRoaXMgaW4gdGhlDQo+IHRyeV9j dHJsKCkgZnVuY3Rpb24uDQo+IA0KDQpBZ3JlZWQuIEkgd2lsbCBpbXBsZW1lbnQgYSB0cnlfY3Ry bCgpIGZvciB0aGlzLg0KDQo+ID4gKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnhzZGlyeHNz LT5zbG9jaywgZmxhZ3MpOw0KPiA+ICsJCQlkZXZfZXJyKGRldiwgIlNlbGVjdCBhdCBsZWFzdCBv bmUgbW9kZSFcbiIpOw0KPiA+ICsJCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArCQl9DQo+ID4gKw0K PiA+ICsJCWlmICh4c2Rpcnhzcy0+bW9kZSA9PSBYU0RJX1NURF8zRykgew0KPiA+ICsJCQlkZXZf ZGJnKGRldiwgIlVwdG8gM0cgc3VwcG9ydGVkXG4iKTsNCj4gPiArCQkJY3RybC0+dmFsICY9IH4o QklUKFhTRElSWF9NT0RFXzZHX09GRlNFVCkgfA0KPiA+ICsJCQkJICAgICAgIEJJVChYU0RJUlhf TU9ERV8xMkdJX09GRlNFVCkgfA0KPiA+ICsJCQkJICAgICAgIEJJVChYU0RJUlhfTU9ERV8xMkdG X09GRlNFVCkpOw0KPiA+ICsJCX0NCj4gPiArDQo+ID4gKwkJaWYgKHhzZGlyeHNzLT5tb2RlID09 IFhTRElfU1REXzZHKSB7DQo+ID4gKwkJCWRldl9kYmcoZGV2LCAiVXB0byA2RyBzdXBwb3J0ZWRc biIpOw0KPiA+ICsJCQljdHJsLT52YWwgJj0gfihCSVQoWFNESVJYX01PREVfMTJHSV9PRkZTRVQp IHwNCj4gPiArCQkJCSAgICAgICBCSVQoWFNESVJYX01PREVfMTJHRl9PRkZTRVQpKTsNCj4gPiAr CQl9DQo+IA0KPiBUaGlzIHNob3VsZG4ndCBiZSBkb25lIGhlcmUuIEluc3RlYWQgdGhlICdtYXgn IGZpZWxkIG9mIHRoZSBjb250cm9sIG11c3QgYmUNCj4gc2V0IGNvcnJlY3RseSBiYXNlZCBvbiB0 aGUgbW9kZS4gWW91IGNhbiBjYWxsIHY0bDJfY3RybF9tb2RpZnlfcmFuZ2UoKSBpbg0KPiB4c2Rp cnhzc19wcm9iZSgpIHRvIHVwZGF0ZSB0aGUgbWF4IHZhbHVlLg0KPiANCg0KVGhhbmtzIGZvciB0 aGUgc3VnZ2VzdGlvbiBJIHdpbGwgdXBkYXRlIHRoZSBtYXggdmFsdWUgYWNjb3JkaW5nbHkgYW5k IHJlbW92ZSB0aGVzZSBjaGVja3MuDQoNCj4gPiArDQo+ID4gKwkJcmV0ID0geHNkaXJ4X3NldF9t b2RlZGV0ZWN0KHhzZGlyeHNzLCBjdHJsLT52YWwpOw0KPiA+ICsJCWlmICghcmV0KQ0KPiA+ICsJ CQl4c2Rpcnhzcy0+c2VhcmNobWFzayA9IGN0cmwtPnZhbDsNCj4gPiArCQlicmVhazsNCj4gPiAr CWRlZmF1bHQ6DQo+ID4gKwkJcmV0ID0gLUVJTlZBTDsNCj4gPiArCQlicmVhazsNCj4gPiArCX0N Cj4gPiArCVhTRElSWF9DT1JFX0VOQUJMRSh4c2Rpcnhzcyk7DQo+ID4gKw0KPiA+ICsJc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmeHNkaXJ4c3MtPnNsb2NrLCBmbGFncyk7DQo+ID4gKwlyZXR1cm4g cmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogeHNkaXJ4c3NfZ192b2xhdGls ZV9jdHJsIC0gZ2V0IHRoZSBYaWxpbnggU0RJIFJ4IGNvbnRyb2xzDQo+ID4gKyAqIEBjdHJsOiBQ b2ludGVyIHRvIFY0TDIgY29udHJvbA0KPiA+ICsgKg0KPiA+ICsgKiBSZXR1cm46IDAgb24gc3Vj Y2VzcywgZXJyb3JzIG90aGVyd2lzZQ0KPiA+ICsgKi8NCj4gPiArc3RhdGljIGludCB4c2Rpcnhz c19nX3ZvbGF0aWxlX2N0cmwoc3RydWN0IHY0bDJfY3RybCAqY3RybCkNCj4gPiArew0KPiA+ICsJ dTMyIHZhbDsNCj4gPiArCXN0cnVjdCB4c2Rpcnhzc19zdGF0ZSAqeHNkaXJ4c3MgPQ0KPiA+ICsJ CWNvbnRhaW5lcl9vZihjdHJsLT5oYW5kbGVyLA0KPiA+ICsJCQkgICAgIHN0cnVjdCB4c2Rpcnhz c19zdGF0ZSwgY3RybF9oYW5kbGVyKTsNCj4gPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9IHhzZGly eHNzLT5kZXY7DQo+ID4gKwl1bnNpZ25lZCBsb25nIGZsYWdzOw0KPiA+ICsNCj4gPiArCXNwaW5f bG9ja19pcnFzYXZlKCZ4c2Rpcnhzcy0+c2xvY2ssIGZsYWdzKTsNCj4gPiArCWlmICgheHNkaXJ4 c3MtPnZpZGxvY2tlZCkgew0KPiA+ICsJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnhzZGlyeHNz LT5zbG9jaywgZmxhZ3MpOw0KPiA+ICsJCWRldl9lcnIoZGV2LCAiQ2FuJ3QgZ2V0IHZhbHVlcyB3 aGVuIHZpZGVvIG5vdCBsb2NrZWQhXG4iKTsNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiAr CX0NCj4gPiArCXN3aXRjaCAoY3RybC0+aWQpIHsNCj4gPiArCWNhc2UgVjRMMl9DSURfWElMSU5Y X1NESVJYX01PREVfREVURUNUOg0KPiA+ICsJCXZhbCA9IHhzZGlyeHNzX3JlYWQoeHNkaXJ4c3Ms IFhTRElSWF9NT0RFX0RFVF9TVEFUX1JFRyk7DQo+ID4gKwkJdmFsICY9IFhTRElSWF9NT0RFX0RF VF9TVEFUX1JYX01PREVfTUFTSzsNCj4gPiArDQo+ID4gKwkJc3dpdGNoICh2YWwpIHsNCj4gPiAr CQljYXNlIFhTRElSWF9NT0RFX1NEX01BU0s6DQo+ID4gKwkJCWN0cmwtPnZhbCA9IFhTRElSWF9N T0RFX1NEX09GRlNFVDsNCj4gPiArCQkJYnJlYWs7DQo+ID4gKwkJY2FzZSBYU0RJUlhfTU9ERV9I RF9NQVNLOg0KPiA+ICsJCQljdHJsLT52YWwgPSBYU0RJUlhfTU9ERV9IRF9PRkZTRVQ7DQo+ID4g KwkJCWJyZWFrOw0KPiA+ICsJCWNhc2UgWFNESVJYX01PREVfM0dfTUFTSzoNCj4gPiArCQkJdmFs ID0geHNkaXJ4c3NfcmVhZCh4c2RpcnhzcywNCj4gWFNESVJYX01PREVfREVUX1NUQVRfUkVHKTsN Cj4gPiArCQkJdmFsICY9IFhTRElSWF9NT0RFX0RFVF9TVEFUX0xWTEJfM0dfTUFTSzsNCj4gPiAr CQkJY3RybC0+dmFsID0gdmFsID8gWFNESVJYX01PREVfM0dCX09GRlNFVCA6DQo+ID4gKwkJCQlY U0RJUlhfTU9ERV8zR0FfT0ZGU0VUOw0KPiA+ICsJCQlicmVhazsNCj4gPiArCQljYXNlIFhTRElS WF9NT0RFXzZHX01BU0s6DQo+ID4gKwkJCWN0cmwtPnZhbCA9IFhTRElSWF9NT0RFXzZHX09GRlNF VDsNCj4gPiArCQkJYnJlYWs7DQo+ID4gKwkJY2FzZSBYU0RJUlhfTU9ERV8xMkdJX01BU0s6DQo+ ID4gKwkJCWN0cmwtPnZhbCA9IFhTRElSWF9NT0RFXzEyR0lfT0ZGU0VUOw0KPiA+ICsJCQlicmVh azsNCj4gPiArCQljYXNlIFhTRElSWF9NT0RFXzEyR0ZfTUFTSzoNCj4gPiArCQkJY3RybC0+dmFs ID0gWFNESVJYX01PREVfMTJHRl9PRkZTRVQ7DQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsJCX0NCj4g DQo+IFRoZXJlIGlzIG5vIGludGVycnVwdCB0aGF0IHdpbGwgdGVsbCB5b3Ugd2hlbiB0aGUgbW9k ZSBjaGFuZ2VzPyBJdCdzIG11Y2gNCj4gbmljZXIgaWYgdXBkYXRpbmcgdGhpcyBjb250cm9sIGlz IGludGVycnVwdCBkcml2ZW4gcmF0aGVyIHRoYW4gcmVxdWlyaW5nDQo+IHVzZXJzcGFjZSB0byBw b2xsLg0KPiANCg0KVGhlIGFwcGxpY2F0aW9uIG5lZWQgbm90IHBvbGwgdGhpcy4gV2hlbiB0aGUg bW9kZSBjaGFuZ2VzLCB0aGUgVjRMMl9FVkVOVF9TT1VSQ0VfQ0hBTkdFDQpldmVudCB3aWxsIGFs c28gYmUgZ2VuZXJhdGVkLiBUaGUgYXBwbGljYXRpb24gY2FuIHRoZW4gZ2V0IHRoaXMgY29udHJv bCBhbmQgZ2V0IHRvIGtub3cNCndoaWNoIG1vZGUgaXMgc3dpdGNoZWQgdG8uIA0KDQpPbiB0aGUg b3RoZXIgaGFuZCwgdGhpcyBpbmZvIGlzIGFsc28gZHVtcGVkIGFzIGEgcGFydCBvZiBsb2dfc3Rh dHVzKCkuDQpTbyB0aGlzIGNvbnRyb2wgd2lsbCBiZSBkcm9wcGVkIGluIHRoZSBuZXh0IHZlcnNp b24uDQoNCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2UgVjRMMl9DSURfWElMSU5YX1NESVJYX0NS QzoNCj4gPiArCQljdHJsLT52YWwgPSB4c2Rpcnhzc19yZWFkKHhzZGlyeHNzLCBYU0RJUlhfQ1JD X0VSUkNOVF9SRUcpOw0KPiA+ICsJCXhzZGlyeHNzX3dyaXRlKHhzZGlyeHNzLCBYU0RJUlhfQ1JD X0VSUkNOVF9SRUcsIDB4ZmZmZik7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIFY0TDJfQ0lE X1hJTElOWF9TRElSWF9FREhfRVJSQ05UOg0KPiA+ICsJCXZhbCA9IHhzZGlyeHNzX3JlYWQoeHNk aXJ4c3MsIFhTRElSWF9NT0RFX0RFVF9TVEFUX1JFRyk7DQo+ID4gKwkJdmFsICY9IFhTRElSWF9N T0RFX0RFVF9TVEFUX1JYX01PREVfTUFTSzsNCj4gPiArCQlpZiAodmFsID09IFhTRElSWF9NT0RF X1NEX01BU0spIHsNCj4gPiArCQkJY3RybC0+dmFsID0geHNkaXJ4c3NfcmVhZCh4c2RpcnhzcywN Cj4gPiArCQkJCQkJICBYU0RJUlhfRURIX0VSUkNOVF9SRUcpOw0KPiA+ICsJCX0gZWxzZSB7DQo+ ID4gKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnhzZGlyeHNzLT5zbG9jaywgZmxhZ3MpOw0K PiA+ICsJCQlkZXZfZGJnKGRldiwgIiVkIC0gbm90IGluIFNEIG1vZGVcbiIsIGN0cmwtPmlkKTsN Cj4gPiArCQkJcmV0dXJuIC1FSU5WQUw7DQo+IA0KPiBHZXR0aW5nIGEgY29udHJvbCB2YWx1ZSBz aG91bGRuJ3QgZmFpbC4gSnVzdCBzZXQgY3RybC0+dmFsIHRvIDAgYW5kDQo+IHJldHVybiAwLiBZ b3UgY2FuIGxlYXZlIHRoZSBkZXZfZGJnIHRob3VnaCwgdGhhdCBjYW4gYmUgdXNlZnVsLg0KPiAN Cg0KT2suIEkgd2lsbCBzZXQgdGhlIGN0cmwtPnZhbCB0byAwIGluIGludmFsaWQgY2FzZS4NCg0K PiA+ICsJCX0NCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2UgVjRMMl9DSURfWElMSU5YX1NESVJY X0VESF9TVEFUVVM6DQo+ID4gKwkJdmFsID0geHNkaXJ4c3NfcmVhZCh4c2RpcnhzcywgWFNESVJY X01PREVfREVUX1NUQVRfUkVHKTsNCj4gPiArCQl2YWwgJj0gWFNESVJYX01PREVfREVUX1NUQVRf UlhfTU9ERV9NQVNLOw0KPiA+ICsJCWlmICh2YWwgPT0gWFNESVJYX01PREVfU0RfTUFTSykgew0K PiA+ICsJCQljdHJsLT52YWwgPSB4c2Rpcnhzc19yZWFkKHhzZGlyeHNzLA0KPiA+ICsJCQkJCQkg IFhTRElSWF9FREhfU1RBVF9SRUcpOw0KPiA+ICsJCX0gZWxzZSB7DQo+ID4gKwkJCXNwaW5fdW5s b2NrX2lycXJlc3RvcmUoJnhzZGlyeHNzLT5zbG9jaywgZmxhZ3MpOw0KPiA+ICsJCQlkZXZfZGJn KGRldiwgIiVkIC0gbm90IGluIFNEIG1vZGVcbiIsIGN0cmwtPmlkKTsNCj4gPiArCQkJcmV0dXJu IC1FSU5WQUw7DQo+IA0KPiBEaXR0by4NCj4gDQoNCk5vdGVkLg0KDQo+ID4gKwkJfQ0KPiA+ICsJ CWJyZWFrOw0KPiA+ICsJY2FzZSBWNEwyX0NJRF9YSUxJTlhfU0RJUlhfVFNfSVNfSU5URVJMQUNF RDoNCj4gPiArCQljdHJsLT52YWwgPSB4c2Rpcnhzcy0+dHNfaXNfaW50ZXJsYWNlZDsNCj4gPiAr CQlicmVhazsNCj4gDQo+IEkgYXNzdW1lIHRoaXMgY29udHJvbCB3aWxsIGRpc2FwcGVhciBvbmNl IHlvdSBhZGRlZCBzdXBwb3J0IGZvcg0KPiBGSUVMRF9BTFRFUk5BVEVfUFJPRz8NCj4gDQoNClll cyB0aGlzIHdpbGwgYmUgcmVtb3ZlZCB3aGVuIFY0TDJfRklFTERfQUxURVJOQVRFX1BST0cgaXMg YWRkZWQgd2hpY2ggbWVhbnMNCnRoZSB2aWRlbyBmcmFtZSBjYXB0dXJlZCBpcyBwcm9ncmVzc2l2 ZSBpbiBuYXR1cmUgYnV0IGlzIGJlaW5nIHRyYW5zcG9ydGVkIGFzIDIgaW50ZXJsYWNlZCBmaWVs ZHMuDQoNCj4gPiArCWRlZmF1bHQ6DQo+ID4gKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmeHNk aXJ4c3MtPnNsb2NrLCBmbGFncyk7DQo+ID4gKwkJZGV2X2VycihkZXYsICJHZXQgSW52YWxpZCBj b250cm9sIGlkIDB4JTB4XG4iLCBjdHJsLT5pZCk7DQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ IA0KPiBZb3UgY2FuIGRyb3AgdGhlIGRlZmF1bHQgY2FzZSBhbHRvZ2V0aGVyOiB0aGlzIGZ1bmN0 aW9uIHdpbGwgb25seSBiZSBjYWxsZWQNCj4gZm9yIHZvbGF0aWxlIGNvbnRyb2xzLg0KPiANCg0K T2suIEkgd2lsbCByZW1vdmUgdGhlIGRlZmF1bHQgY2FzZS4NCg0KPiA+ICsJfQ0KPiA+ICsNCj4g PiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnhzZGlyeHNzLT5zbG9jaywgZmxhZ3MpOw0KPiA+ ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQoNCjxzbmlwPg0KDQo+ID4gK3N0YXRpYyBpbnQg eHNkaXJ4c3NfcXVlcnlfZHZfdGltaW5ncyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLA0KPiA+ICsJ CQkJICAgICBzdHJ1Y3QgdjRsMl9kdl90aW1pbmdzICp0aW1pbmdzKQ0KPiA+ICt7DQo+ID4gKwlz dHJ1Y3QgeHNkaXJ4c3Nfc3RhdGUgKnN0YXRlID0gdG9feHNkaXJ4c3NzdGF0ZShzZCk7DQo+ID4g Kwl1bnNpZ25lZCBpbnQgaTsNCj4gPiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQo+ID4gKw0KPiA+ ICsJc3Bpbl9sb2NrX2lycXNhdmUoJnN0YXRlLT5zbG9jaywgZmxhZ3MpOw0KPiA+ICsJaWYgKCFz dGF0ZS0+dmlkbG9ja2VkKSB7DQo+ID4gKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3RhdGUt PnNsb2NrLCBmbGFncyk7DQo+ID4gKwkJcmV0dXJuIC1FTk9MQ0s7DQo+ID4gKwl9DQo+ID4gKw0K PiA+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoeHNkaXJ4c3NfZHZfdGltaW5ncyk7IGkr Kykgew0KPiA+ICsJCWlmIChzdGF0ZS0+Zm9ybWF0LndpZHRoID09IHhzZGlyeHNzX2R2X3RpbWlu Z3NbaV0ud2lkdGggJiYNCj4gPiArCQkgICAgc3RhdGUtPmZvcm1hdC5oZWlnaHQgPT0geHNkaXJ4 c3NfZHZfdGltaW5nc1tpXS5oZWlnaHQgJiYNCj4gPiArCQkgICAgc3RhdGUtPmZyYW1lX2ludGVy dmFsLmRlbm9taW5hdG9yID09DQo+ID4gKwkJICAgICh4c2Rpcnhzc19kdl90aW1pbmdzW2ldLmZw cyAqIDEwMDApKSB7DQo+ID4gKwkJCSp0aW1pbmdzID0geHNkaXJ4c3NfZHZfdGltaW5nc1tpXS50 aW1pbmc7DQo+ID4gKwkJCXN0YXRlLT5kZXRlY3RlZF90aW1pbmdzX2luZGV4ID0gaTsNCj4gPiAr CQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3RhdGUtPnNsb2NrLCBmbGFncyk7DQo+ID4gKwkJ CXJldHVybiAwOw0KPiA+ICsJCX0NCj4gPiArCX0NCj4gDQo+IFRoaXMgbGltaXRzIHRoZSBhdmFp bGFibGUgdGltaW5ncyB0byB0aG9zZSBleHBsaWNpdGx5IHN1cHBvcnRlZCBieSB0aGlzDQo+IGRy aXZlci4gSXMgdGhhdCBpbnRlbmRlZD8gV2hhdCBpdCB5b3UgcmVjZWl2ZSBzb21ldGhpbmcgdGhh dCdzIG5vdCBpbiB0aGlzDQo+IGxpc3Q/IERvIHlvdSBzdGlsbCB3YW50IHRvIGJlIGFibGUgdG8g cmVjZWl2ZSBpdD8NCj4gDQoNClRoZSBhdmFpbGFibGUgdGltaW5ncyBhcmUgcmVzdHJpY3RlZCB0 byB3aGF0IHRoZSBJUCBzdXBwb3J0cy4NCklmIHNvbWV0aGluZyB0aGF0IGlzIG5vdCBpbiB0aGlz IGxpc3QgaXMgc2VudCwgdGhlbiBlaXRoZXIgdGhlIElQDQp3aWxsIG5vdCBsb2NrIG9udG8gdGhl IHZpZGVvIHNpZ25hbCBvciBpdCBpcyBtaXNzZWQgZnJvbSB0aGUgbGlzdA0Kb2YgcmVzb2x1dGlv bnMgKyBmcmFtZSByYXRlcyBzdXBwb3J0ZWQgYmFzZWQgb24gdGhlIFNNUFRFIHN0YW5kYXJkcy4g DQoNCj4gPiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN0YXRlLT5zbG9jaywgZmxhZ3MpOw0K PiA+ICsNCj4gPiArCXJldHVybiAtRVJBTkdFOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMg aW50IHhzZGlyeHNzX3NfZHZfdGltaW5ncyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLA0KPiA+ICsJ CQkJIHN0cnVjdCB2NGwyX2R2X3RpbWluZ3MgKnRpbWluZ3MpDQo+ID4gK3sNCj4gPiArCXN0cnVj dCB4c2Rpcnhzc19zdGF0ZSAqc3RhdGUgPSB0b194c2Rpcnhzc3N0YXRlKHNkKTsNCj4gPiArCXUz MiBpID0gc3RhdGUtPmRldGVjdGVkX3RpbWluZ3NfaW5kZXg7DQo+ID4gKwl1bnNpZ25lZCBsb25n IGZsYWdzOw0KPiA+ICsNCj4gPiArCXNwaW5fbG9ja19pcnFzYXZlKCZzdGF0ZS0+c2xvY2ssIGZs YWdzKTsNCj4gPiArCWlmICghc3RhdGUtPnZpZGxvY2tlZCkgew0KPiA+ICsJCXNwaW5fdW5sb2Nr X2lycXJlc3RvcmUoJnN0YXRlLT5zbG9jaywgZmxhZ3MpOw0KPiA+ICsJCXJldHVybiAtRUlOVkFM Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCS8qIGlucHV0IHRpbWluZyBzaG91bGQgbWF0Y2ggcXVl cnkgZHZfdGltaW5nICovDQo+ID4gKwlpZiAoIXY0bDJfbWF0Y2hfZHZfdGltaW5ncyh0aW1pbmdz LA0KPiA+ICsJCQkJICAgJnhzZGlyeHNzX2R2X3RpbWluZ3NbaV0udGltaW5nLA0KPiA+ICsJCQkJ ICAgMCwgZmFsc2UpKSB7DQo+ID4gKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3RhdGUtPnNs b2NrLCBmbGFncyk7DQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ ICsJc3RhdGUtPmN1cnJlbnRfdGltaW5ncyA9ICp0aW1pbmdzOw0KPiA+ICsNCj4gPiArCS8qIFVw ZGF0ZSB0aGUgbWVkaWEgYnVzIGZvcm1hdCAqLw0KPiA+ICsJc3RhdGUtPnNyY19mb3JtYXQgPSBz dGF0ZS0+Zm9ybWF0Ow0KPiA+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3RhdGUtPnNsb2Nr LCBmbGFncyk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0 YXRpYyBpbnQgeHNkaXJ4c3NfZ19kdl90aW1pbmdzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsDQo+ ID4gKwkJCQkgc3RydWN0IHY0bDJfZHZfdGltaW5ncyAqdGltaW5ncykNCj4gPiArew0KPiA+ICsJ c3RydWN0IHhzZGlyeHNzX3N0YXRlICpzdGF0ZSA9IHRvX3hzZGlyeHNzc3RhdGUoc2QpOw0KPiA+ ICsNCj4gPiArCSp0aW1pbmdzID0gc3RhdGUtPmN1cnJlbnRfdGltaW5nczsNCj4gPiArCXJldHVy biAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHhzZGlyeHNzX2R2X3RpbWluZ3Nf Y2FwKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsDQo+ID4gKwkJCQkgICBzdHJ1Y3QgdjRsMl9kdl90 aW1pbmdzX2NhcCAqY2FwKQ0KPiA+ICt7DQo+ID4gKwlpZiAoY2FwLT5wYWQgIT0gMCkNCj4gPiAr CQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArDQo+ID4gKwkqY2FwID0geHNkaXJ4c3NfdGltaW5nc19j YXA7DQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyogLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0NCj4gPiArICogTWVkaWEgT3BlcmF0aW9ucw0KPiA+ICsgKi8NCj4gPiArDQo+ID4g K3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWVkaWFfZW50aXR5X29wZXJhdGlvbnMgeHNkaXJ4c3NfbWVk aWFfb3BzID0gew0KPiA+ICsJLmxpbmtfdmFsaWRhdGUgPSB2NGwyX3N1YmRldl9saW5rX3ZhbGlk YXRlDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfY3RybF9v cHMgeHNkaXJ4c3NfY3RybF9vcHMgPSB7DQo+ID4gKwkuZ192b2xhdGlsZV9jdHJsID0geHNkaXJ4 c3NfZ192b2xhdGlsZV9jdHJsLA0KPiA+ICsJLnNfY3RybAk9IHhzZGlyeHNzX3NfY3RybA0KPiA+ ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfY29uZmlnIHhz ZGlyeHNzX2VkaF9jdHJsc1tdID0gew0KPiA+ICsJew0KPiA+ICsJCS5vcHMJPSAmeHNkaXJ4c3Nf Y3RybF9vcHMsDQo+ID4gKwkJLmlkCT0gVjRMMl9DSURfWElMSU5YX1NESVJYX0VESF9FUlJPUl9T T1VSQ0VTLA0KPiA+ICsJCS5uYW1lCT0gIlNESSBSeCA6IEVESCBFcnJvciBDb3VudCBFbmFibGUi LA0KPiANCj4gTm8gc3BhY2UgYmVmb3JlICc6Jy4NCj4gDQoNCk5vdGVkLiBJIHdpbGwgZml4IHRo aXMgaW4gbmV4dCB2ZXJzaW9uLg0KDQo+ID4gKwkJLnR5cGUJPSBWNEwyX0NUUkxfVFlQRV9CSVRN QVNLLA0KPiA+ICsJCS5taW4JPSAwLA0KPiA+ICsJCS5tYXgJPSBYU0RJUlhfRURIX0FMTEVSUl9N QVNLLA0KPiA+ICsJCS5kZWYJPSAwLA0KPiA+ICsJfSwgew0KPiA+ICsJCS5vcHMJPSAmeHNkaXJ4 c3NfY3RybF9vcHMsDQo+ID4gKwkJLmlkCT0gVjRMMl9DSURfWElMSU5YX1NESVJYX0VESF9FUlJD TlQsDQo+ID4gKwkJLm5hbWUJPSAiU0RJIFJ4IDogRURIIEVycm9yIENvdW50IiwNCj4gPiArCQku dHlwZQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsDQo+ID4gKwkJLm1pbgk9IDAsDQo+ID4gKwkJ Lm1heAk9IDB4ZmZmZiwNCj4gPiArCQkuc3RlcAk9IDEsDQo+ID4gKwkJLmRlZgk9IDAsDQo+ID4g KwkJLmZsYWdzICA9IFY0TDJfQ1RSTF9GTEFHX1ZPTEFUSUxFIHwNCj4gVjRMMl9DVFJMX0ZMQUdf UkVBRF9PTkxZLA0KPiA+ICsJfSwgew0KPiA+ICsJCS5vcHMJPSAmeHNkaXJ4c3NfY3RybF9vcHMs DQo+ID4gKwkJLmlkCT0gVjRMMl9DSURfWElMSU5YX1NESVJYX0VESF9TVEFUVVMsDQo+ID4gKwkJ Lm5hbWUJPSAiU0RJIFJ4IDogRURIIFN0YXR1cyIsDQo+ID4gKwkJLnR5cGUJPSBWNEwyX0NUUkxf VFlQRV9JTlRFR0VSLA0KPiANCj4gVGhpcyBzaG91bGQgYmUgYSBiaXRtYXNrIHR5cGUuIFNob3Vs ZCB0aGlzIGJlIGEgY29udHJvbCBhdCBhbGw/IElzbid0IHRoaXMgbW9yZQ0KPiBzb21ldGhpbmcg dG8gbG9nIHdpdGggbG9nX3N0YXR1cz8gSXMgdGhpcyBzb21ldGhpbmcgdGhhdCBhbiBhcHBsaWNh dGlvbiBuZWVkcyB0bw0KPiB1c2UsIG9yIGlzIGl0IGp1c3QgYSBkZWJ1Z2dpbmcgYWlkPyBJdCBm ZWVscyBsaWtlIHRoZSBsYXR0ZXIuDQo+IA0KDQpZZXMgdGhpcyBpcyBqdXN0IGEgZGVidWdnaW5n IGFpZCBsaWtlIHRoZSBFREggRVJSQ05UIGNvbnRyb2wuDQpJIGFncmVlIGl0IGNhbiBiZSByZW1v dmVkIHNpbmNlIGl0IGlzIGxvZ2dlZCBpbiBsb2dfc3RhdHVzLg0KSSB3aWxsIHJlbW92ZSB0aGVz ZSBjb250cm9scyBpbiB0aGUgbmV4dCB2ZXJzaW9uLg0KDQo+ID4gKwkJLm1pbgk9IDAsDQo+ID4g KwkJLm1heAk9IDB4ZmZmZmZmZmYsDQo+ID4gKwkJLnN0ZXAJPSAxLA0KPiA+ICsJCS5kZWYJPSAw LA0KPiA+ICsJCS5mbGFncyAgPSBWNEwyX0NUUkxfRkxBR19WT0xBVElMRSB8DQo+IFY0TDJfQ1RS TF9GTEFHX1JFQURfT05MWSwNCj4gPiArCX0NCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBj b25zdCBzdHJ1Y3QgdjRsMl9jdHJsX2NvbmZpZyB4c2Rpcnhzc19jdHJsc1tdID0gew0KPiA+ICsJ ew0KPiA+ICsJCS5vcHMJPSAmeHNkaXJ4c3NfY3RybF9vcHMsDQo+ID4gKwkJLmlkCT0gVjRMMl9D SURfWElMSU5YX1NESVJYX0ZSQU1FUiwNCj4gPiArCQkubmFtZQk9ICJTREkgUnggOiBFbmFibGUg RnJhbWVyIiwNCj4gPiArCQkudHlwZQk9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sDQo+ID4gKwkJ Lm1pbgk9IGZhbHNlLA0KPiA+ICsJCS5tYXgJPSB0cnVlLA0KPiA+ICsJCS5zdGVwCT0gMSwNCj4g PiArCQkuZGVmCT0gdHJ1ZSwNCj4gPiArCX0sIHsNCj4gPiArCQkub3BzCT0gJnhzZGlyeHNzX2N0 cmxfb3BzLA0KPiA+ICsJCS5pZAk9IFY0TDJfQ0lEX1hJTElOWF9TRElSWF9WSURMT0NLX1dJTkRP VywNCj4gPiArCQkubmFtZQk9ICJTREkgUnggOiBWaWRlbyBMb2NrIFdpbmRvdyIsDQo+ID4gKwkJ LnR5cGUJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLA0KPiA+ICsJCS5taW4JPSAwLA0KPiA+ICsJ CS5tYXgJPSAweGZmZmZmZmZmLA0KPiANCj4gbWF4IHNob3VsZCBiZSAweDdmZmZmZmZmIHNpbmNl IHRoaXMgaXMgYSBzMzIuDQoNClRoZSB2aWRlbyBsb2NrIHdpbmRvdyByZWdpc3RlciBpcyAzMiBi aXQgcmVnaXN0ZXIgYW5kIGNhbiBhY2NlcHQgMCB0byAweGZmZmZmZmZmLg0KU28gSSB3aWxsIHNl dCBtYXggYXMgLTEgYXMgLTEgPSAweGZmZmZmZmZmIGluIHMzMi4gQnV0IHRoaXMgd29uJ3QgbWFr ZSBzZW5zZS4NCldoYXQgd291bGQgYmUgdGhlIHJpZ2h0IHdheSBpbiB0aGlzIGNhc2UgdG8gZW5z dXJlIHRoZSBjb250cm9sIHZhbHVlcyByYW5nZSBpcyBjb3JyZWN0Pw0KDQo+IA0KPiA+ICsJCS5z dGVwCT0gMSwNCj4gPiArCQkuZGVmCT0gWFNESVJYX0RFRkFVTFRfVklERU9fTE9DS19XSU5ET1cs DQo+ID4gKwl9LCB7DQo+ID4gKwkJLm9wcwk9ICZ4c2Rpcnhzc19jdHJsX29wcywNCj4gPiArCQku aWQJPSBWNEwyX0NJRF9YSUxJTlhfU0RJUlhfU0VBUkNIX01PREVTLA0KPiA+ICsJCS5uYW1lCT0g IlNESSBSeCA6IE1vZGVzIHNlYXJjaCBNYXNrIiwNCj4gDQo+IHNlYXJjaCAtPiBTZWFyY2gNCj4g DQoNCk5vdGVkLiBXaWxsIGJlIGZpeGVkIGluIG5leHQgdmVyc2lvbi4NCg0KPiA+ICsJCS50eXBl CT0gVjRMMl9DVFJMX1RZUEVfQklUTUFTSywNCj4gPiArCQkubWluCT0gMCwNCj4gPiArCQkubWF4 CT0gWFNESVJYX0RFVEVDVF9BTExfTU9ERVMsDQo+ID4gKwkJLmRlZgk9IFhTRElSWF9ERVRFQ1Rf QUxMX01PREVTLA0KPiA+ICsJfSwgew0KPiA+ICsJCS5vcHMJPSAmeHNkaXJ4c3NfY3RybF9vcHMs DQo+ID4gKwkJLmlkCT0gVjRMMl9DSURfWElMSU5YX1NESVJYX01PREVfREVURUNULA0KPiA+ICsJ CS5uYW1lCT0gIlNESSBSeCA6IE1vZGUgRGV0ZWN0IFN0YXR1cyIsDQo+IA0KPiBNb2RlIERldGVj dCBTdGF0dXMgLT4gIERldGVjdGVkIE1vZGUNCj4gDQo+ID4gKwkJLnR5cGUJPSBWNEwyX0NUUkxf VFlQRV9JTlRFR0VSLA0KPiANCj4gVGhpcyBpcyByZWFsbHkgYSBtZW51IGNvbnRyb2wuDQoNCk5v dGVkLiBXaWxsIGJlIGZpeGVkIGluIG5leHQgdmVyc2lvbi4NCg0KPiANCj4gPiArCQkubWluCT0g WFNESVJYX01PREVfU0RfT0ZGU0VULA0KPiA+ICsJCS5tYXgJPSBYU0RJUlhfTU9ERV8xMkdGX09G RlNFVCwNCj4gPiArCQkuc3RlcAk9IDEsDQo+ID4gKwkJLmZsYWdzICA9IFY0TDJfQ1RSTF9GTEFH X1ZPTEFUSUxFIHwNCj4gVjRMMl9DVFJMX0ZMQUdfUkVBRF9PTkxZLA0KPiA+ICsJfSwgew0KPiA+ ICsJCS5vcHMJPSAmeHNkaXJ4c3NfY3RybF9vcHMsDQo+ID4gKwkJLmlkCT0gVjRMMl9DSURfWElM SU5YX1NESVJYX0NSQywNCj4gPiArCQkubmFtZQk9ICJTREkgUnggOiBDUkMgRXJyb3Igc3RhdHVz IiwNCj4gPiArCQkudHlwZQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsDQo+IA0KPiBUaGlzIGlz IHJlYWxseSB0d28gY29udHJvbHMgYmFzZWQgb24gdGhlIGRlc2NyaXB0aW9uIGluIHRoZSBoZWFk ZXI6DQo+IA0KPiBPbmUgYml0bWFzayBmb3IgdGhlIDE2IGRhdGEgc3RyZWFtcyBhbmQgb25lIGFj Y3VtdWxhdGVkIGVycm9yIGNvdW50Lg0KPg0KDQpUaGlzIGlzIHZlcnkgZGV2aWNlIHNwZWNpZmlj IG9wZXJhdGlvbiB3aGljaCB3ZSBjYW4gZG8gaW4gb25lIGNvbnRyb2wgdG9vLg0KTGV0IG1lIGtu b3cgaWYgeW91IHN0aWxsIHRoaW5rIHRoaXMgc2hvdWxkIGJlIHNwbGl0IGludG8gMiBwYXJ0cy4N Cg0KPiA+ICsJCS5taW4JPSAwLA0KPiA+ICsJCS5tYXgJPSAweGZmZmZmZmZmLA0KPiA+ICsJCS5z dGVwCT0gMSwNCj4gPiArCQkuZGVmCT0gMCwNCj4gPiArCQkuZmxhZ3MgID0gVjRMMl9DVFJMX0ZM QUdfVk9MQVRJTEUgfA0KPiBWNEwyX0NUUkxfRkxBR19SRUFEX09OTFksDQo+ID4gKwl9LCB7DQoN CjxzbmlwPg0KDQo+ID4gKyAqIFRoaXMgZW51bSBpcyB1c2VkIHRvIHByZXBhcmUgdGhlIGJpdG1h c2sgb2YgbW9kZXMgdG8gYmUgZGV0ZWN0ZWQNCj4gPiArICovDQo+ID4gK2VudW0gew0KPiA+ICsJ WFNESVJYX01PREVfU0RfT0ZGU0VUID0gMCwNCj4gPiArCVhTRElSWF9NT0RFX0hEX09GRlNFVCwN Cj4gPiArCVhTRElSWF9NT0RFXzNHQV9PRkZTRVQsDQo+ID4gKwlYU0RJUlhfTU9ERV8zR0JfT0ZG U0VULA0KPiA+ICsJWFNESVJYX01PREVfNkdfT0ZGU0VULA0KPiA+ICsJWFNESVJYX01PREVfMTJH SV9PRkZTRVQsDQo+ID4gKwlYU0RJUlhfTU9ERV8xMkdGX09GRlNFVCwNCj4gPiArCVhTRElSWF9N T0RFX05VTV9TVVBQT1JURUQsDQo+ID4gK307DQo+IA0KPiBUaGVzZSBhcmUgYWxsIHN0YW5kYXJk IFNESSBtb2RlcywgcmlnaHQ/DQo+IA0KDQpNb3N0IGFyZSBzdGFuZGFyZCBtb2RlcyBsaWtlIFNE IGFuZCBIRCBtb2RlLiANCkJ1dCAxMkcgbW9kZSBoZXJlIGlzIHNwbGl0IGFzIGludGVnZXIgb3Ig ZnJhY3Rpb25hbCBtb2RlLiANClNvIG5vdCBleGFjdGx5IHN0YW5kYXJkIGhlcmUuDQoNCj4gPiAr DQo+ID4gKyNkZWZpbmUgWFNESVJYX0RFVEVDVF9BTExfTU9ERVMNCj4gCShCSVQoWFNESVJYX01P REVfU0RfT0ZGU0VUKSB8IFwNCj4gPiArCQkJCQlCSVQoWFNESVJYX01PREVfSERfT0ZGU0VUKSB8 IFwNCj4gPiArCQkJCQlCSVQoWFNESVJYX01PREVfM0dBX09GRlNFVCkgfCBcDQo+ID4gKwkJCQkJ QklUKFhTRElSWF9NT0RFXzNHQl9PRkZTRVQpIHwgXA0KPiA+ICsJCQkJCUJJVChYU0RJUlhfTU9E RV82R19PRkZTRVQpIHwgXA0KPiA+ICsJCQkJCUJJVChYU0RJUlhfTU9ERV8xMkdJX09GRlNFVCkg fCBcDQo+ID4gKwkJCQkJQklUKFhTRElSWF9NT0RFXzEyR0ZfT0ZGU0VUKSkNCj4gPiArDQo+ID4g Ky8qDQo+ID4gKyAqIEVESCAtIEVycm9yIERldGVjdGlvbiBhbmQgSGFuZGxpbmcuDQo+ID4gKyAq IEluIHRoZSBTRC1TREkgbW9kZSwgdGhlIFVIRC1TREkgY29yZSBmdWxseSBzdXBwb3J0cyBSUCAx NjUuDQo+ID4gKyAqIFRoZSBiaXRtYXNrIGlzIG5hbWVkIGFzIFhTRElSWF9FREhfRVJSQ05UX1hY X1lZX0VSUiBleGNlcHQNCj4gPiArICogZm9yIHBhY2tldCBjaGVja3N1bSBlcnJvci4NCj4gPiAr ICoNCj4gPiArICogWFggLSBFREggRXJyb3IgVHlwZXMNCj4gPiArICogQU5DIC0gQW5jaWxsYXJ5 IERhdGEgUGFja2V0IEVycm9ycw0KPiA+ICsgKiBGRiAtIEZ1bGwgRmllbGQgRXJyb3JzDQo+ID4g KyAqIEFQIC0gQWN0aXZlIFBvcnRpb24gRXJyb3JzDQo+ID4gKyAqDQo+ID4gKyAqIFlZIC0gRXJy b3IgRmxhZ3MNCj4gPiArICogRURIIC0gZXJyb3IgZGV0ZWN0ZWQgaGVyZQ0KPiA+ICsgKiBFREEg LSBlcnJvciBEZXRlY3RlZCBhbHJlYWR5DQo+ID4gKyAqIElESCAtIGludGVybmFsIGVycm9yIGRl dGVjdGVkIGhlcmUNCj4gPiArICogSURBIC0gaW50ZXJuYWwgZXJyb3IgZGV0ZWN0ZWQgYWxyZWFk eQ0KPiA+ICsgKiBVRVMgLSB1bmtub3duIGVycm9yIHN0YXR1cw0KPiA+ICsgKg0KPiA+ICsgKiBS ZWZlciB0byBTZWMgNC4zIEVycm9yIEZsYWdzIGluIFJQIDE2NS0xOTk0IGZvciBkZXRhaWxzDQo+ ID4gKyAqLw0KPiA+ICsNCj4gPiArI2RlZmluZSBYU0RJUlhfRURIX0VSUkNOVF9BTkNfRURIX0VS UgkJQklUKDApDQo+ID4gKyNkZWZpbmUgWFNESVJYX0VESF9FUlJDTlRfQU5DX0VEQV9FUlIJCUJJ VCgxKQ0KPiA+ICsjZGVmaW5lIFhTRElSWF9FREhfRVJSQ05UX0FOQ19JREhfRVJSCQlCSVQoMikN Cj4gPiArI2RlZmluZSBYU0RJUlhfRURIX0VSUkNOVF9BTkNfSURBX0VSUgkJQklUKDMpDQo+ID4g KyNkZWZpbmUgWFNESVJYX0VESF9FUlJDTlRfQU5DX1VFU19FUlIJCUJJVCg0KQ0KPiA+ICsjZGVm aW5lIFhTRElSWF9FREhfRVJSQ05UX0ZGX0VESF9FUlIJCUJJVCg1KQ0KPiA+ICsjZGVmaW5lIFhT RElSWF9FREhfRVJSQ05UX0ZGX0VEQV9FUlIJCUJJVCg2KQ0KPiA+ICsjZGVmaW5lIFhTRElSWF9F REhfRVJSQ05UX0ZGX0lESF9FUlIJCUJJVCg3KQ0KPiA+ICsjZGVmaW5lIFhTRElSWF9FREhfRVJS Q05UX0ZGX0lEQV9FUlIJCUJJVCg4KQ0KPiA+ICsjZGVmaW5lIFhTRElSWF9FREhfRVJSQ05UX0ZG X1VFU19FUlIJCUJJVCg5KQ0KPiA+ICsjZGVmaW5lIFhTRElSWF9FREhfRVJSQ05UX0FQX0VESF9F UlIJCUJJVCgxMCkNCj4gPiArI2RlZmluZSBYU0RJUlhfRURIX0VSUkNOVF9BUF9FREFfRVJSCQlC SVQoMTEpDQo+ID4gKyNkZWZpbmUgWFNESVJYX0VESF9FUlJDTlRfQVBfSURIX0VSUgkJQklUKDEy KQ0KPiA+ICsjZGVmaW5lIFhTRElSWF9FREhfRVJSQ05UX0FQX0lEQV9FUlIJCUJJVCgxMykNCj4g PiArI2RlZmluZSBYU0RJUlhfRURIX0VSUkNOVF9BUF9VRVNfRVJSCQlCSVQoMTQpDQo+ID4gKyNk ZWZpbmUgWFNESVJYX0VESF9FUlJDTlRfUEtUX0NIS1NVTV9FUlIJQklUKDE1KQ0KPiA+ICsNCj4g PiArI2RlZmluZSBYU0RJUlhfRURIX0FMTEVSUl9NQVNLCQkweEZGRkYNCj4gDQo+IExvd2VyY2Fz ZSAweGZmZmYuDQo+IA0KPiBBbmQgdGhlc2UgZXJyb3IgY29uZGl0aW9ucyBhcmUgYWxzbyBzdGFu ZGFyZGl6ZWQ/DQo+IA0KPiBJZiBzbywgdGhlbiBJIHRoaW5rIHRoZXNlIGRlZmluZXMvZW51bXMg Y2FuIGJlIHBhcnQgb2YgVjRMMiBpdHNlbGYgcmF0aGVyDQo+IHRoYW4gWGlsaW54IHNwZWNpZmlj Lg0KPiANCg0KWWVzIHRoZSBlcnJvciBjb25kaXRpb25zIGFyZSBzdGFuZGFyZGl6ZWQgYXMgbWVu dGlvbmVkIGluIFNlYyA0LjMgRXJyb3IgRmxhZ3MgaW4gUlAgMTY1LTE5OTQuDQpCdXQgSSBwbGFu IG9uIHJlbW92aW5nIHRoZXNlIGZyb20gdGhlIFNESSBSeCBkcml2ZXIgYXMgdGhleSB3aWxsIGJl IHVwZGF0ZWQgZXZlcnkgZnJhbWUgYW5kDQp0aGVyZSBpcyBubyB3YXkgZm9yIHRoZSBkcml2ZXIg dG8gZXZlbiBrZWVwIGEgY291bnQgb2YgdGhlbSBldmVyeSBmcmFtZSBhcyBhIGxvY2FsIGVycm9y IGNvdW50ZXINCm1lY2hhbmlzbSBhcyB0aGVyZSBpcyBubyBGcmFtZSByZWNlaXZlZCBpbnRlcnJ1 cHQgZnJvbSB0aGUgSVAuDQoNCkkgY2FuIHN0aWxsIGFkZCB0aGVzZSBlcnJvcnMgYXMNCiNkZWZp bmUgU0RJX1NEX0VESF9BTkNfRURIX0VSUgkJQklUKDApDQojZGVmaW5lIFNESV9TRF9FREhfQU5D X0VEQV9FUlIJCUJJVCgxKQ0KLi4NCmFuZCBzbyBvbiBpbiBhIG5ldyBoZWFkZXIgZmlsZSAoaW5j bHVkZS9saW51eC9zZGkuaCA/ICkNCmJ1dCB0aGlzIGRyaXZlciBtYXkgbm90IGJlIHVzaW5nIGl0 Lg0KDQpJcyBpdCBvayB0byBhZGQgbWFjcm9zIHdoaWNoIGFyZSBub3QgdXNlZCBjdXJyZW50bHk/ DQoNCj4gPiArDQo+ID4gKy8qDQo+ID4gKyAqIFY0TDIgQ29udHJvbHMgLSBXZSByZXNlcnZlZCAx NiBjb250cm9scyBmb3IgdGhpcyBkcml2ZXIuDQo+IA0KPiBJJ2QgaW5jcmVhc2UgdGhhdCB0byAz Mi4NCj4gDQoNCk9rLiBJIHdpbGwgbWFrZSB0aGlzIHRvIDMyLg0KDQo+ID4gKyAqDQo+ID4gKyAq IFRoZSBWNEwyX0NJRF9YSUxJTlhfU0RJUlhfRURIXyogY29udHJvbHMgYXJlIHByZXNlbnQgb25s eSBpZg0KPiA+ICsgKiBFREggaXMgZW5hYmxlZC4NCj4gPiArICogVGhlIGNvbnRyb2xzIHdoaWNo IGNhbiBiZSBzZXQgc2hvdWxkIG9ubHkgYmUgc2V0IGJlZm9yZSBlbmFibGluZw0KPiA+ICsgKiBz dHJlYW1pbmcuIFRoZSBjb250cm9scyB3aGljaCBjYW4gYmUgZ290IHNob3VsZCBiZSBjYWxsZWQg d2hpbGUNCj4gPiArICogc3RyZWFtaW5nIHRvIGdldCBjb3JyZWN0IHZhbHVlcy4NCj4gPiArICog VGhlIFY0TDJfQ0lEX1hJTElOWF9TRElSWF9NT0RFX0RFVEVDVCBjYW4gYmUgY2FsbGVkIHdoZW4g cXVlcnkNCj4gZHYgdGltaW5nDQo+IA0KPiBxdWVyeSBkdiB0aW1pbmcgLT4gcXVlcnlfZHZfdGlt aW5ncw0KPiANCg0KTm90ZWQuIFdpbGwgYmUgdXBkYXRlZCBpbiB0aGUgbmV4dCB2ZXJzaW9uLg0K DQo+ID4gKyAqIHJldHVybnMgYSB2YWxpZCB0aW1pbmcuDQo+ID4gKyAqLw0KPiA+ICsNCj4gPiAr LyoNCj4gPiArICogRnJhbWVyIENvbnRyb2wgdG8gZW5hYmxlIG9yIGRpc2FibGUgdGhlIGZyYW1l ci4gV2hlbiB0aGlzIGlzIHNldCwgdGhlDQo+IGZyYW1lcg0KPiA+ICsgKiBhdXRvbWF0aWNhbGx5 IHJlYWRqdXN0cyB0aGUgb3V0cHV0IHdvcmQgYWxpZ25tZW50IHRvIG1hdGNoIHRoZQ0KPiBhbGln bm1lbnQgb2YNCj4gPiArICogZWFjaCB0aW1pbmcgcmVmZXJlbmNlIHNpZ25hbChUUlMpLiBOb3Jt YWxseSB0aGlzIHNob3VsZCBiZSBzZXQuIEJ1dCB1c2VyDQo+IG1heQ0KPiA+ICsgKiBjb250cm9s IHRoaXMgaW5wdXQgdG8gaW1wbGVtZW50IFRSUyBmaWx0ZXJpbmcgdG8gcHJldmVudCBhIHNpZ25h bA0KPiBtaXNhbGlnbmVkDQo+ID4gKyAqIFRSUyBmcm9tIGNhdXNpbmcgZXJyb25lb3VzIGFsaWdu bWVudCBjaGFuZ2VzLg0KPiA+ICsgKiBSZWZlciB0byBQRzIwNSByeF9mcmFtZV9lbiBmb3IgbW9y ZSBkZXRhaWxzLg0KPiA+ICsgKi8NCj4gPiArI2RlZmluZSBWNEwyX0NJRF9YSUxJTlhfU0RJUlhf RlJBTUVSDQo+IAkoVjRMMl9DSURfVVNFUl9YSUxJTlhfU0RJUlhfQkFTRSArIDEpDQo+ID4gKw0K PiA+ICsvKg0KPiA+ICsgKiBWaWRlbyBMb2NrIFdpbmRvdyBDb250cm9sIHRvIHNldCB0aGUgdmlk ZW8gbG9jayB3aW5kb3cgdmFsdWUNCj4gPiArICogVGhpcyBpcyB0aGUgYW1vdW50IG9mIHRpbWUg dGhlIG1vZGUgYW5kIHRyYW5zcG9ydCBzdHJlYW0gbmVlZA0KPiA+ICsgKiB0byBiZSBsb2NrZWQg YmVmb3JlIGEgdmlkZW8gbG9jayBpbnRlcnJ1cHQgb2NjdXJzLg0KPiA+ICsgKi8NCj4gPiArI2Rl ZmluZSBWNEwyX0NJRF9YSUxJTlhfU0RJUlhfVklETE9DS19XSU5ET1cNCj4gCShWNEwyX0NJRF9V U0VSX1hJTElOWF9TRElSWF9CQVNFICsgMikNCj4gPiArDQo+ID4gKy8qDQo+ID4gKyAqIEVESCBF cnJvciBNYXNrIENvbnRyb2wgdG8gZW5hYmxlIEVESCBlcnJvciBjb3VudA0KPiA+ICsgKiBUaGlz IGNvbnRyb2wgdGFrZXMgaW4gdGhlIGJpdG1hc2sgb2YgWFNESVJYX0VESF9FUlJDTlRfKl9FUlIg dG8NCj4gZW5hYmxlIGNvdW50aW5nDQo+ID4gKyAqIHN1Y2ggZXJyb3JzLg0KPiA+ICsgKi8NCj4g PiArI2RlZmluZSBWNEwyX0NJRF9YSUxJTlhfU0RJUlhfRURIX0VSUk9SX1NPVVJDRVMNCj4gCShW NEwyX0NJRF9VU0VSX1hJTElOWF9TRElSWF9CQVNFICsgMykNCj4gDQo+IElmIHRoZXNlIEVESCBl cnJvciBzb3VyY2VzIGFyZSBmcm9tIHRoZSBTREkgc3RhbmRhcmQsIHRoZW4gdGhpcyBjYW4gYmVj b21lIGENCj4gc3RhbmRhcmQNCj4gY29udHJvbCBhcyB3ZWxsLg0KPiANCg0KVHJ1ZSBidXQgbm93 IEkgcGxhbiB0byByZW1vdmUgdGhpcyBmb3IgdGhlIGN1cnJlbnQgZHJpdmVyLg0KQnV0IEkgd2ls bCBhZGQgdGhpcyB0byBhIG5ldyBoZWFkZXIgZmlsZSBsaWtlIGluY2x1ZGUvbGludXgvc2RpLmgN Cg0KPiA+ICsNCj4gPiArLyoNCj4gPiArICogTW9kZSBzZWFyY2ggQ29udHJvbCB0byBwYXNzIHRo ZSBiaXQgbWFzayBvZiBtb2RlcyB0byBkZXRlY3QuDQo+ID4gKyAqIElmIG9ubHkgMSBiaXQgaXMg c2V0LCB0aGUgZHJpdmVyIHByb2dyYW1zIElQIHRvIGJlIGluIGZpeGVkIG1vZGUgZWxzZQ0KPiA+ ICsgKiBpbiBtdWx0aSBkZXRlY3Rpb24gbW9kZS4NCj4gPiArICoNCj4gPiArICogU2V0IHRoaXMg d2hlbiBub3Qgc3RyZWFtaW5nLg0KPiA+ICsgKg0KPiA+ICsgKiBiaXQgMCBzZXQgdG8gZGV0ZWN0 IFNEICBtb2RlLA0KPiA+ICsgKiBiaXQgMSBzZXQgdG8gZGV0ZWN0IEhEICBtb2RlLA0KPiA+ICsg KiBiaXQgMiBzZXQgdG8gZGV0ZWN0IDNHQSBtb2RlLA0KPiA+ICsgKiBiaXQgMyBzZXQgdG8gZGV0 ZWN0IDNHQiBtb2RlLA0KPiA+ICsgKiBiaXQgNCBzZXQgdG8gZGV0ZWN0IDZHICBtb2RlLA0KPiA+ ICsgKiBiaXQgNSBzZXQgdG8gZGV0ZWN0IDEyRyBpbnRlZ2VyIGZyYW1lIHJhdGUgbW9kZSwNCj4g PiArICogYml0IDYgc2V0IHRvIGRldGVjdCAxMkcgZnJhY3Rpb25hbCBmcmFtZSByYXRlIG1vZGUs DQo+ID4gKyAqLw0KPiA+ICsjZGVmaW5lIFY0TDJfQ0lEX1hJTElOWF9TRElSWF9TRUFSQ0hfTU9E RVMNCj4gCShWNEwyX0NJRF9VU0VSX1hJTElOWF9TRElSWF9CQVNFICsgNCkNCj4gDQo+IFNhbWUg aGVyZSBpZiB0aGVzZSBtb2RlcyBhcmUgc3RhbmRhcmRpemVkLg0KPiANCg0KU29tZSBvZiB0aGVz ZSBtb2RlcyBhcmUgc3BlY2lmaWMgdG8gWGlsaW54IGxpa2UgdGhlIDEyRyBpbnRlZ2VyIGFuZCBm cmFjdGlvbmFsIG1vZGVzLg0KU28gSSB3aWxsIGtlZXAgdGhlbSBoZXJlIGxpa2UgdGhpcy4gDQpJ biBmdXR1cmUgd2UgY2FuIHByb2JhYmx5IGhhdmUgYSBsb29rIGF0IHN0YW5kYXJkaXppbmcgdGhl c2UgbW9kZXMuDQpUaGVuIHRoaXMgY29udHJvbCB3aWxsIGJlY29tZSByZWR1bmRhbnQuDQoNCj4g PiArDQo+ID4gKy8qDQo+ID4gKyAqIEdldCBEZXRlY3RlZCBTREkgTW9kZSBjb250cm9sIChyZWFk IG9ubHkpDQo+ID4gKyAqDQo+ID4gKyAqIENvbnRyb2wgVmFsdWUgLSBNb2RlIGRldGVjdGVkDQo+ ID4gKyAqICAgICAgICAwICAgICAgLSAgICAgU0QNCj4gPiArICogICAgICAgIDEgICAgICAtICAg ICBIRA0KPiA+ICsgKiAgICAgICAgMiAgICAgIC0gICAgIDNHQQ0KPiA+ICsgKiAgICAgICAgMyAg ICAgIC0gICAgIDNHQg0KPiA+ICsgKiAgICAgICAgNCAgICAgIC0gICAgIDZHDQo+ID4gKyAqICAg ICAgICA1ICAgICAgLSAgICAgMTJHIGludGVnZXIgZnJhbWUgcmF0ZQ0KPiA+ICsgKiAgICAgICAg NiAgICAgIC0gICAgIDEyRyBmcmFjdGlvbmFsIGZyYW1lIHJhdGUNCj4gPiArICovDQo+ID4gKyNk ZWZpbmUgVjRMMl9DSURfWElMSU5YX1NESVJYX01PREVfREVURUNUDQo+IAkoVjRMMl9DSURfVVNF Ul9YSUxJTlhfU0RJUlhfQkFTRSArIDUpDQo+IA0KPiBEaXR0by4NCj4gDQoNCk5vdGVkLiBTYW1l IHJlc3BvbnNlIGFzIGFib3ZlLg0KDQo+ID4gKw0KPiA+ICsvKiBHZXQgbnVtYmVyIG9mIENSQyBl cnJvcnMgc3RhdHVzIGNvbnRyb2wNCj4gPiArICoNCj4gPiArICogV2hlbiBhIENSQyBpcyBkZXRl Y3RlZCBvbiBhIGxpbmUsIHRoZSBDUkMgZXJyb3Igc2lnbmFsIG9mIHRoYXQgZGF0YQ0KPiBzdHJl YW0NCj4gPiArICogYmVjb21lcyBhc3NlcnRlZCBzdGFydGluZyBhIGZldyBjbG9jayBjeWNsZXMg YWZ0ZXIgdGhlIGxhc3QgQ1JDIHdvcmQgaXMNCj4gPiArICogb3V0cHV0IG9uIHRoZSBkYXRhIHN0 cmVhbSBwb3J0cyBmb2xsb3dpbmcgdGhlIEVBViB0aGF0IGVuZHMgdGhlIGxpbmUNCj4gPiArICog Y29udGFpbmluZyB0aGUgZXJyb3IuIFRoZSBDUkMgc2lnbmFsIHJlbWFpbnMgYXNzZXJ0ZWQgZm9y IG9uZSBsaW5lIHRpbWUuDQo+ID4gKyAqDQo+ID4gKyAqIFRoZSBMU0IgMTYgYml0cyBvZiB2YWx1 ZSByZXR1cm5lZCBieSB0aHNpIGNvbnRyb2wgcmVwcmVzZW50IHRoZSBlcnJvcg0KPiA+ICsgKiBz aWduYWwgb24gZWFjaCBvZiAxNiBkYXRhIHN0cmVhbXMuIFRoZSBNU0IgMTYgYml0cyBjb250YWlu cyB0aGUNCj4gYWNjdW11bGF0ZWQNCj4gPiArICogZXJyb3IgY291bnQuDQo+ID4gKyAqDQo+ID4g KyAqIFJlZmVyIHRvIFBHMjA1IHJ4X2NyY19lcnJfZHNYIChYID0gMSB0byAxNikgZGVzY3JpcHRp b24gZm9yIGRldGFpbHMuDQo+ID4gKyAqLw0KPiA+ICsjZGVmaW5lIFY0TDJfQ0lEX1hJTElOWF9T RElSWF9DUkMNCj4gCShWNEwyX0NJRF9VU0VSX1hJTElOWF9TRElSWF9CQVNFICsgNikNCj4gDQo+ IEFzIHN1Z2dlc3RlZCBlYXJsaWVyLCBJIHRoaW5rIHRoaXMgc2hvdWxkIGJlIHNwbGl0IGludG8g dHdvIGNvbnRyb2xzLg0KDQpJdCB3b3VsZCBiZSBnb29kIHRvIGtlZXAgaXQgYSBzaW5nbGUgY29u dHJvbCB0byBjaGVjayB0aGUgQ1JDIGVycm9yIGNvdW50IHJlZ2lzdGVyDQphcyB0aGlzIGlzIHZl cnkgZGV2aWNlIHNwZWNpZmljIGNvbnRyb2wuDQoNCj4gDQo+ID4gKw0KPiA+ICsvKg0KPiA+ICsg KiBHZXQgRURIIGVycm9yIGNvdW50IGNvbnRyb2wNCj4gPiArICoNCj4gPiArICogUmVhZGluZyB0 aGlzIGNvbnRyb2wgd2lsbCBnaXZlIHRoZSBudW1iZXIgb2YgRURIIGVycm9ycyBvY2N1cnJlZCBi YXNlZA0KPiA+ICsgKiBvbiB0aGUgYml0bWFzayBwYXNzZWQgaW4NCj4gVjRMMl9DSURfWElMSU5Y X1NESVJYX0VESF9FUlJPUl9TT1VSQ0VTLg0KPiA+ICsgKg0KPiA+ICsgKiBJdCBpbmNyZW1lbnRz IG9uY2UgcGVyIGZpZWxkIHdoZW4gYW55IG9mIHRoZSBlcnJvciBjb25kaXRpb25zIGVuYWJsZWQg YnkNCj4gPiArICogdGhlIFJYX0VESF9FUlJDTlRfRU4gcmVnaXN0ZXIgYml0KHMpIG9jY3VyIGR1 cmluZyB0aGF0IGZpZWxkLg0KPiA+ICsgKg0KPiA+ICsgKiBSZWZlciB0byBQRzIwNSByeF9lZGhf ZXJyY250DQo+ID4gKyAqLw0KPiA+ICsjZGVmaW5lIFY0TDJfQ0lEX1hJTElOWF9TRElSWF9FREhf RVJSQ05UDQo+IAkoVjRMMl9DSURfVVNFUl9YSUxJTlhfU0RJUlhfQkFTRSArIDcpDQo+IA0KPiBF dmVuIHRob3VnaCB0aGUgRURIIGVycm9ycyBhcHBlYXIgdG8gYmUgc3RhbmRhcmQsIEknbSBub3Qg c3VyZSBpZiB0aGlzIHNwZWNpZmljDQo+IGNvbnRyb2wNCj4gY2FuIGJlIHN0YW5kYXJkaXplZC4g VGhlIHByZWNpc2UgYmVoYXZpb3Igb2YgYSBjb3VudGVyIGxpa2UgdGhpcyBtaWdodCBkaWZmZXIN Cj4gYmV0d2Vlbg0KPiBIVyBpbXBsZW1lbnRhdGlvbnMuDQo+IA0KDQpSaWdodCBzbyBJIGFtIHJl bW92aW5nIHRoaXMgY29udHJvbCBpbiBuZXh0IHZlcnNpb24gYXMgdGhpcyBoYXMgbm8gcHJhY3Rp Y2FsIHVzZQ0KZnJvbSBzb2Z0d2FyZSBwb2ludCBvZiB2aWV3IHdpdGggdGhlIGN1cnJlbnQgSVAg aW1wbGVtZW50YXRpb24uDQoNCj4gPiArDQo+ID4gKy8qDQo+ID4gKyAqIEdldCBFREggc3RhdHVz IGNvbnRyb2wNCj4gPiArICoNCj4gPiArICogVGhpcyBjb250cm9sIHJldHVybnMgdGhlIFJYX0VE SF9TVFMgcmVnaXN0ZXIgY29udGVudHMuDQo+ID4gKyAqIFJlZmVyIHRvIFBHMjkwIHJlZ2lzdGVy IHNwYWNlIHNlY3Rpb24gZm9yIG1vcmUgZGV0YWlscy4NCj4gPiArICovDQo+ID4gKyNkZWZpbmUg VjRMMl9DSURfWElMSU5YX1NESVJYX0VESF9TVEFUVVMNCj4gCShWNEwyX0NJRF9VU0VSX1hJTElO WF9TRElSWF9CQVNFICsgOCkNCj4gDQo+IEFzIG1lbnRpb25lZCBhYm92ZTogdGhpcyBpcyBhIGR1 YmlvdXMgY29udHJvbCwgcmVwb3J0aW5nIGl0IGluIGxvZ19zdGF0dXMgc2VlbXMNCj4gYSBtb3Jl IGxvZ2ljYWwgYXBwcm9hY2guDQo+IA0KDQpDb3JyZWN0LiBTbyBJIHdpbGwgYmUgcmVtb3Zpbmcg dGhpcyBjb250cm9sIHRvby4NCg0KPiA+ICsNCj4gPiArLyogR2V0IFRyYW5zcG9ydCBJbnRlcmxh Y2VkIHN0YXR1cyB3aGV0aGVyIGl0IGlzIGludGVybGFjZWQgb3Igbm90ICovDQo+ID4gKyNkZWZp bmUgVjRMMl9DSURfWElMSU5YX1NESVJYX1RTX0lTX0lOVEVSTEFDRUQNCj4gCShWNEwyX0NJRF9V U0VSX1hJTElOWF9TRElSWF9CQVNFICsgOSkNCj4gDQo+IEFuZCBhcyBhbHNvIG1lbnRpb25lZCBh Ym92ZSwgdGhpcyB3aWxsIGJlIHJlcGxhY2VkIGJ5IGEgbmV3DQo+IEZJRUxEX0FMVEVSTkFURV9Q Uk9HPw0KPiANCg0KWWVzIEkgd2lsbCBhZGQgdGhlIG5ldyBWNEwyIEZJRUxEIEFMVEVSTkFURSBQ Uk9HIHRvIHJlcHJlc2VudCBzdHJlYW1zIHdob3NlIGNvbnRlbnQNCmlzIHByb2dyZXNzaXZlIGJ1 dCBhcmUgc2VudCBvdmVyIGFuIGludGVybGFjZWQgdHJhbnNwb3J0LiBTbyAyIHJlY2VpdmVkIGJ1 ZmZlcnMsDQp3aG9zZSBjb250ZW50IGlzIGNhcHR1cmVkIGF0IHNhbWUgdGltZSwgd2lsbCByZXBy ZXNlbnQgb25lIGZyYW1lLg0KDQo+ID4gKw0KPiA+ICsvKg0KPiA+ICsgKiBYaWxpbnggRFYgdGlt aW5ncw0KPiA+ICsgKiBUT0RPIC0gUmVtb3ZlIHRoZXNlIG9uY2UgdGhleSBhcmUgaW4gdjRsMi1k di10aW1pbmdzLmgNCj4gPiArICovDQo+ID4gKyNkZWZpbmUgWExOWF9WNEwyX0RWX0JUXzIwNDhY MTA4MFAyNCB7IFwNCj4gPiArCS50eXBlID0gVjRMMl9EVl9CVF82NTZfMTEyMCwgXA0KPiA+ICsJ VjRMMl9JTklUX0JUX1RJTUlOR1MoMjA0OCwgMTA4MCwgMCwgXA0KPiA+ICsJCVY0TDJfRFZfSFNZ TkNfUE9TX1BPTCB8IFY0TDJfRFZfVlNZTkNfUE9TX1BPTCwgXA0KPiA+ICsJCTc0MjUwMDAwLCA1 MTAsIDQ0LCAxNDgsIDQsIDUsIDM2LCAwLCAwLCAwLCBcDQo+ID4gKwkJVjRMMl9EVl9CVF9TVERf U0RJKSBcDQo+ID4gK30NCj4gPiArDQoNCjxzbmlwPg0KDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFhM TlhfVjRMMl9EVl9CVF8xOTIwWDEwODBJNDggeyBcDQo+ID4gKwkudHlwZSA9IFY0TDJfRFZfQlRf NjU2XzExMjAsIFwNCj4gPiArCVY0TDJfSU5JVF9CVF9USU1JTkdTKDE5MjAsIDEwODAsIDEsIFwN Cj4gPiArCQlWNEwyX0RWX0hTWU5DX1BPU19QT0wgfCBWNEwyX0RWX1ZTWU5DX1BPU19QT0wsIFwN Cj4gPiArCQkxNDg1MDAwMDAsIDM3MSwgODgsIDM3MSwgMiwgNSwgMTUsIDMsIDUsIDE1LCBcDQo+ ID4gKwkJVjRMMl9EVl9CVF9TVERfU0RJKSBcDQo+ID4gK30NCj4gPiArDQo+ID4gKyNlbmRpZiAv KiBfX1VBUElfWElMSU5YX1NESVJYU1NfSF9fICovDQo+ID4NCj4gDQo+IFJlZ2FyZHMsDQo+IA0K PiAJSGFucw0KDQoNClJlZ2FyZHMNClZpc2hhbCBTYWdhcg0K