Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp1531384yba; Thu, 25 Apr 2019 01:06:07 -0700 (PDT) X-Google-Smtp-Source: APXvYqwgLoNz3Wj0KOLmtIFpmRV30ciGnO2oK+nyQj1IAo1FjVsr4mXdOnEatGjWZNBGwqQtj59x X-Received: by 2002:a65:6644:: with SMTP id z4mr3397526pgv.300.1556179567418; Thu, 25 Apr 2019 01:06:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1556179567; cv=none; d=google.com; s=arc-20160816; b=nKhfUCExSPnUFWt3EQeMrHgfzktBAjkSo2fUx7Xa5TjzAu8rTJD55Qk7yEoOIYYsXj nsDOvBXOBzaaoWj5jr3EVMk2pqYdVbPTUcrVJgjQrQPV8CWK7Y0AC2Ij5DQcz4uKvIYU gbPpjSe2G7mgSd9fiKoMEdkZ2xLoL7GWS8Fy9q1/h6KZd37KrsZyRfJysnSs8BzuaUAD tLXRYsu5i/2dBiz/43jXdQcYykDcMuFF9/il5vlQ6GrNKazzzLObU9kZvx9NTbNfrj6C brrPQADukmpNEA6iRwBftW+98h+3/y6vO5az+gNbRCYKVUaHh0w0AlfFHNwWtTmSA+xy atnQ== 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 :wdcipoutbound:content-language:accept-language:in-reply-to :references:message-id:date:thread-index:thread-topic:subject:cc:to :from:dkim-signature:dkim-signature; bh=TtqheL2S+uu38U+Aifj3cvE5bHzTG7AjanYrEx2iJg0=; b=PWe/ZgF6gEdSA96wOZclwPu0oBF18lzv8wJ6PxLxtH2fThD2xD4UD4Qa434dIKs4aR xDGduFmc9C3ELf0EDRfIp75zzbQaWbAJn7hCHDKsdiDjWV2DNDrs0n8i5pDEQcsPWGuJ Jmaatqw7TOd5YjtnfB8mMIy1BwEwOZw0EMM5U8wvOePJlm46uytP1BOqXz8VZEdwB9/W 3HysSj05CSEdT6kcl3xt/nvB170Og8vl4a2xBHz5vTqb1zLy4x+7KbOqFgmd/jm6/ik/ L+zeejR1YncNQqJkRCwEA2HggTsxOjZu8VbOZU3pVC5qgJQliJUby0XvirB7K8L4dHmU 0VYA== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@wdc.com header.s=dkim.wdc.com header.b=Bk7QgJ01; dkim=pass header.i=@sharedspace.onmicrosoft.com header.s=selector1-wdc-com header.b=fYmFjhbx; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=wdc.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id x6si6507218pln.74.2019.04.25.01.05.52; Thu, 25 Apr 2019 01:06:07 -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=fail header.i=@wdc.com header.s=dkim.wdc.com header.b=Bk7QgJ01; dkim=pass header.i=@sharedspace.onmicrosoft.com header.s=selector1-wdc-com header.b=fYmFjhbx; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=wdc.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389009AbfDYDtp (ORCPT + 99 others); Wed, 24 Apr 2019 23:49:45 -0400 Received: from esa6.hgst.iphmx.com ([216.71.154.45]:41518 "EHLO esa6.hgst.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388245AbfDYDtp (ORCPT ); Wed, 24 Apr 2019 23:49:45 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1556164185; x=1587700185; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=TtqheL2S+uu38U+Aifj3cvE5bHzTG7AjanYrEx2iJg0=; b=Bk7QgJ01ZuQDBrPKbVFZLxKLvh34FsHrDdl3Ywu49TOMaA/OjojSIk22 rsuLGxrbiiBu6id+OcjJuEY+1x7ZjBRd9MMJz9HboeYiXSenS/Bf5Jy7B AQupyDE0fU5bIW2cqSlh0wouaui28lczlgfvNQAyaXze3ZoyJyhrYpBCv 3PTk9GtZDs/AYLyQqrCe+BhW4S+h0zjz09wfPfABAmjiazIFrHHeoXlIh sbI0Ns1oVbce5/ubNR+Z7ISvoWugrOLm8Q1I6ge3CyaK7SLke+42l8Ji7 2bLaNOeb1fJVV6zIwtLizivMFzF+/DU37xNqngC4tLiK2xcDv5CI7kZRs Q==; X-IronPort-AV: E=Sophos;i="5.60,392,1549900800"; d="scan'208";a="108487385" Received: from mail-by2nam03lp2058.outbound.protection.outlook.com (HELO NAM03-BY2-obe.outbound.protection.outlook.com) ([104.47.42.58]) by ob1.hgst.iphmx.com with ESMTP; 25 Apr 2019 11:49:43 +0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sharedspace.onmicrosoft.com; s=selector1-wdc-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=TtqheL2S+uu38U+Aifj3cvE5bHzTG7AjanYrEx2iJg0=; b=fYmFjhbx3PHjeHLzBzx1Z4Y7x1gMDO/khw1rO5Kh3KSUKttqZL9kgSsjBqz70DwUbiMIu6WLZPSlIsH2oGHFebPJepi6cDE4mss0TVEv3j6cahAFNLPHR6ljNRGCL0gx40HOvhABGDkVYw9CDTErKOmYKODOzinFi3TSfSKFcYY= Received: from MN2PR04MB6061.namprd04.prod.outlook.com (20.178.246.15) by MN2PR04MB6064.namprd04.prod.outlook.com (20.178.246.223) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1813.14; Thu, 25 Apr 2019 03:49:40 +0000 Received: from MN2PR04MB6061.namprd04.prod.outlook.com ([fe80::ad2f:3a0f:2de1:6fb2]) by MN2PR04MB6061.namprd04.prod.outlook.com ([fe80::ad2f:3a0f:2de1:6fb2%5]) with mapi id 15.20.1813.017; Thu, 25 Apr 2019 03:49:40 +0000 From: Anup Patel To: Gary Guo , Anup Patel , Palmer Dabbelt CC: Albert Ou , Atish Patra , Christoph Hellwig , Paul Walmsley , Mike Rapoport , "linux-riscv@lists.infradead.org" , "linux-kernel@vger.kernel.org List" Subject: RE: [PATCH v3] RISC-V: Implement ASID allocator Thread-Topic: [PATCH v3] RISC-V: Implement ASID allocator Thread-Index: AQHU5esYcKUYlrhYQE6qB9Kl4zyh4aZMITKAgAApZoCAAAug8IAAEULg Date: Thu, 25 Apr 2019 03:49:40 +0000 Message-ID: References: <20190329045111.14040-1-anup.patel@wdc.com> In-Reply-To: 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=Anup.Patel@wdc.com; x-originating-ip: [129.253.179.161] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: ae3f996f-c007-48b8-560e-08d6c9310bba x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600141)(711020)(4605104)(4618075)(2017052603328)(7193020);SRVR:MN2PR04MB6064; x-ms-traffictypediagnostic: MN2PR04MB6064: x-ms-exchange-purlcount: 1 wdcipoutbound: EOP-TRUE x-microsoft-antispam-prvs: x-forefront-prvs: 0018A2705B x-forefront-antispam-report: SFV:NSPM;SFS:(10019020)(346002)(136003)(39860400002)(366004)(396003)(376002)(13464003)(55674003)(199004)(189003)(66446008)(7696005)(66946007)(316002)(25786009)(256004)(102836004)(476003)(11346002)(33656002)(99286004)(86362001)(110136005)(73956011)(8676002)(71190400001)(76116006)(81156014)(3846002)(54906003)(81166006)(93886005)(6436002)(66556008)(8936002)(5660300002)(14444005)(30864003)(66476007)(71200400001)(64756008)(68736007)(52536014)(446003)(6116002)(478600001)(55016002)(6306002)(9686003)(186003)(97736004)(305945005)(6246003)(4326008)(53936002)(76176011)(486006)(74316002)(229853002)(7736002)(26005)(6506007)(2906002)(72206003)(966005)(14454004)(66066001)(53946003)(53546011)(579004);DIR:OUT;SFP:1102;SCL:1;SRVR:MN2PR04MB6064;H:MN2PR04MB6061.namprd04.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: +9dcrdSSx+BbP3vy8lbns05IKYuRg2Dw1fkG/A/mp7bZrBTErsP2lomdzpVMqsjqBX4vTCcmfjJoixZSO3qxVYyyRcVFZxsJDcmG729DAkDuAm38fma8L/7cXYA26AtGEUXzwRswijGjS5M1WjnJdaogBAw96uhmGQiVIGdajZVJcLAKoa/pCM6iewjKQUP5GuZQ72UINl9YV0jVpjKyg6YptMh0CqKIWLSfNGzbr1jPlyzSx8dyZlc7mR+ghlscFmihsmdTvqXYroc20e7pyEEFUDeagQJYlhUwt/bdzWeGG7ReD6EsZczc+fdY55Lv/5AliQa1iByFWdkWK3KbuMD/cMQwwR/VA3CxdFf9Lpz8AausdXj7ZcXLZkvEu2OsixJBEi3EYevFQYcmr/MKtAmuYGz/axNdhlP4loEYZio= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: wdc.com X-MS-Exchange-CrossTenant-Network-Message-Id: ae3f996f-c007-48b8-560e-08d6c9310bba X-MS-Exchange-CrossTenant-originalarrivaltime: 25 Apr 2019 03:49:40.5484 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: b61c8803-16f3-4c35-9b17-6f65f441df86 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR04MB6064 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogR2FyeSBHdW8gPGdhcnlA Z2FyeWd1by5uZXQ+DQo+IFNlbnQ6IFRodXJzZGF5LCBBcHJpbCAyNSwgMjAxOSA4OjE5IEFNDQo+ IFRvOiBBbnVwIFBhdGVsIDxhbnVwQGJyYWluZmF1bHQub3JnPjsgUGFsbWVyIERhYmJlbHQNCj4g PHBhbG1lckBzaWZpdmUuY29tPg0KPiBDYzogQW51cCBQYXRlbCA8QW51cC5QYXRlbEB3ZGMuY29t PjsgQWxiZXJ0IE91DQo+IDxhb3VAZWVjcy5iZXJrZWxleS5lZHU+OyBBdGlzaCBQYXRyYSA8QXRp c2guUGF0cmFAd2RjLmNvbT47IENocmlzdG9waA0KPiBIZWxsd2lnIDxoY2hAaW5mcmFkZWFkLm9y Zz47IFBhdWwgV2FsbXNsZXkgPHBhdWwud2FsbXNsZXlAc2lmaXZlLmNvbT47DQo+IE1pa2UgUmFw b3BvcnQgPHJwcHRAbGludXguaWJtLmNvbT47IGxpbnV4LXJpc2N2QGxpc3RzLmluZnJhZGVhZC5v cmc7IGxpbnV4LQ0KPiBrZXJuZWxAdmdlci5rZXJuZWwub3JnIExpc3QgPGxpbnV4LWtlcm5lbEB2 Z2VyLmtlcm5lbC5vcmc+DQo+IFN1YmplY3Q6IFJFOiBbUEFUQ0ggdjNdIFJJU0MtVjogSW1wbGVt ZW50IEFTSUQgYWxsb2NhdG9yDQo+IA0KPiBUaGlzIHBhdGNoIGFic29sdXRlbHkgZG9lcyBub3Qg d29yayB3aXRoIGEgaGFyZHdhcmUgdGhhdCBpbXBsZW1lbnRzIEFTSUQNCj4gZmVhdHVyZS4gQXNp ZGUgZnJvbSBtYW55IGNvcm5lciBjYXNlcywgaXQgZG9lcyBub3QgZXZlbiBib290IG9uIGEgaGFy ZHdhcmUNCj4gd2l0aCBBU0lEIGltcGxlbWVudGVkLiBJdCBvbmx5IHdvcmtzIGJlY2F1c2UgUUVN VSBkb2VzIG5vdCB1c2UgQVNJRCBhdA0KPiBhbGwuIEkgaGF2ZSBhbHJlYWR5IHBvaW50ZWQgb3V0 IG1hbnkgaXNzdWVzIG11bHRpcGxlIHRpbWVzIGluIHRoZSB0aHJlYWQgYnV0DQo+IG1vc3Qgb2Yg dGhlbSBhcmUgbm90IGFkZHJlc3NlZC4NCg0KU28gaGVscCB1cyBmaXggdGhpcyBwYXRjaC4NCg0K WW91IGhhdmUgYmVlbiBtYWtpbmcgc3RhdGVtZW50IGFsbCBhbG9uZyB3aXRob3V0IGFueSBwcm9w ZXIgdXNlLWNhc2UNCndoZXJlIGl0IGJyZWFrcy4NCg0KUmVnYXJkcywNCkFudXANCg0KPiANCj4g PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+IEZyb206IEFudXAgUGF0ZWwgPGFudXBA YnJhaW5mYXVsdC5vcmc+DQo+ID4gU2VudDogVGh1cnNkYXksIEFwcmlsIDI1LCAyMDE5IDAzOjA0 DQo+ID4gVG86IFBhbG1lciBEYWJiZWx0IDxwYWxtZXJAc2lmaXZlLmNvbT4NCj4gPiBDYzogQW51 cCBQYXRlbCA8QW51cC5QYXRlbEB3ZGMuY29tPjsgQWxiZXJ0IE91DQo+ID4gPGFvdUBlZWNzLmJl cmtlbGV5LmVkdT47IEdhcnkgR3VvIDxnYXJ5QGdhcnlndW8ubmV0PjsgQXRpc2ggUGF0cmENCj4g PiA8QXRpc2guUGF0cmFAd2RjLmNvbT47IENocmlzdG9waCBIZWxsd2lnIDxoY2hAaW5mcmFkZWFk Lm9yZz47IFBhdWwNCj4gPiBXYWxtc2xleSA8cGF1bC53YWxtc2xleUBzaWZpdmUuY29tPjsgTWlr ZSBSYXBvcG9ydA0KPiA+IDxycHB0QGxpbnV4LmlibS5jb20+OyBsaW51eC1yaXNjdkBsaXN0cy5p bmZyYWRlYWQub3JnOyBsaW51eC0NCj4gPiBrZXJuZWxAdmdlci5rZXJuZWwub3JnIExpc3QgPGxp bnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc+DQo+ID4gU3ViamVjdDogUmU6IFtQQVRDSCB2M10g UklTQy1WOiBJbXBsZW1lbnQgQVNJRCBhbGxvY2F0b3INCj4gPg0KPiA+IE9uIFRodSwgQXByIDI1 LCAyMDE5IGF0IDU6MDYgQU0gUGFsbWVyIERhYmJlbHQgPHBhbG1lckBzaWZpdmUuY29tPg0KPiB3 cm90ZToNCj4gPiA+DQo+ID4gPiBPbiBUaHUsIDI4IE1hciAyMDE5IDIxOjUxOjM4IFBEVCAoLTA3 MDApLCBBbnVwLlBhdGVsQHdkYy5jb20gd3JvdGU6DQo+ID4gPiA+IEN1cnJlbnRseSwgd2UgZG8g bG9jYWwgVExCIGZsdXNoIG9uIGV2ZXJ5IE1NIHN3aXRjaC4gVGhpcyBpcyB2ZXJ5DQo+ID4gPiA+ IGhhcnNoIG9uIHBlcmZvcm1hbmNlIGJlY2F1c2Ugd2UgYXJlIGZvcmNpbmcgcGFnZSB0YWJsZSB3 YWxrcyBhZnRlcg0KPiA+ID4gPiBldmVyeSBNTQ0KPiA+IHN3aXRjaC4NCj4gPiA+ID4NCj4gPiA+ ID4gVGhpcyBwYXRjaCBpbXBsZW1lbnRzIEFTSUQgYWxsb2NhdG9yIGZvciBhc3NpZ25pbmcgYW4g QVNJRCB0byBhIE1NDQo+IGNvbnRleHQuDQo+ID4gPiA+IFRoZSBudW1iZXIgb2YgQVNJRHMgYXJl IGxpbWl0ZWQgaW4gSFcgc28gd2UgY3JlYXRlIGEgbG9naWNhbA0KPiA+ID4gPiBlbnRpdHkgbmFt ZWQgQ09OVEVYVElEIGZvciBhc3NpZ25pbmcgdG8gTU0gY29udGV4dC4gVGhlIGxvd2VyIGJpdHMN Cj4gPiA+ID4gb2YgQ09OVEVYVElEIGFyZQ0KPiA+IEFTSUQNCj4gPiA+ID4gYW5kIHVwcGVyIGJp dHMgYXJlIFZFUlNJT04gbnVtYmVyLiBUaGUgbnVtYmVyIG9mIHVzYWJsZSBBU0lEIGJpdHMNCj4g PiBzdXBwb3J0ZWQNCj4gPiA+ID4gYnkgSFcgYXJlIGRldGVjdGVkIGF0IGJvb3QtdGltZSBieSB3 cml0aW5nIDFzIHRvIEFTSUQgYml0cyBpbiBTQVRQIENTUi4NCj4gPiA+ID4NCj4gPiA+ID4gV2Ug YWxsb2NhdGUgbmV3IENPTlRFWFRJRCBvbiBmaXJzdCBNTSBzd2l0Y2ggZm9yIGEgTU0gY29udGV4 dA0KPiA+ID4gPiB3aGVyZQ0KPiA+IHRoZQ0KPiA+ID4gPiBBU0lEIGlzIGFsbG9jYXRlZCBmcm9t IGFuIEFTSUQgYml0bWFwIGFuZCBWRVJTSU9OIGlzIHByb3ZpZGUgYnkgYW4NCj4gPiA+ID4gYXRv bWljIGNvdW50ZXIuIEF0IHRpbWUgb2YgYWxsb2NhdGluZyBuZXcgQ09OVEVYVElELCBpZiB3ZSBy dW4gb3V0DQo+ID4gPiA+IG9mIGF2YWlsYWJsZSBBU0lEcyB0aGVuOg0KPiA+ID4gPiAxLiBXZSBm bHVzaCB0aGUgQVNJRCBiaXRtYXANCj4gPiA+ID4gMi4gSW5jcmVtZW50IGN1cnJlbnQgVkVSU0lP TiBhdG9taWMgY291bnRlciAzLiBSZS1hbGxvY2F0ZSBBU0lEDQo+ID4gPiA+IGZyb20gQVNJRCBi aXRtYXAgNC4gRmx1c2ggVExCIG9uIGFsbCBDUFVzIDUuIFRyeSBDT05URVhUSUQNCj4gPiA+ID4g cmUtYXNzaWdubWVudCBvbiBhbGwgQ1BVcw0KPiA+ID4gPg0KPiA+ID4gPiBQbGVhc2Ugbm90ZSB0 aGF0IHdlIGRvbid0IHVzZSBBU0lEICMwIGJlY2F1c2UgaXQgaXMgdXNlZCBhdA0KPiA+ID4gPiBi b290LXRpbWUgYnkgYWxsIENQVXMgZm9yIGluaXRpYWwgTU0gY29udGV4dC4gQWxzbywgbmV3bHkg Y3JlYXRlZA0KPiA+ID4gPiBjb250ZXh0IGlzIGFsd2F5cyBhc3NpZ25lZCBDT05URVhUSUQgIzAg KGkuZS4gVkVSU0lPTiAjMCBhbmQgQVNJRA0KPiA+ID4gPiAjMCkgd2hpY2ggaXMgYW4gaW52YWxp ZCBjb250ZXh0IGluIG91ciBpbXBsZW1lbnRhdGlvbi4NCj4gPiA+ID4NCj4gPiA+ID4gVXNpbmcg YWJvdmUgYXBwcm9hY2gsIHdlIGhhdmUgdmlydHVhbGx5IGluZmluaXRlIENPTlRFWFRJRHMNCj4g PiA+ID4gb24tdG9wLW9mIGxpbWl0ZWQgbnVtYmVyIG9mIEhXIEFTSURzLiBUaGlzIGFwcHJvYWNo IGlzIGluc3BpcmVkDQo+ID4gPiA+IGZyb20gQVNJRCBhbGxvY2F0b3IgdXNlZCBmb3IgTGludXgg QVJNL0FSTTY0IGJ1dCB3ZSBoYXZlIGFkYXB0ZWQNCj4gPiA+ID4gaXQgZm9yIFJJU0MtVi4gT3Zl cmFsbCwgdGhpcyBBU0lEIGFsbG9jYXRvciBoZWxwcyB1cyByZWR1Y2UgcmF0ZQ0KPiA+ID4gPiBv ZiBsb2NhbCBUTEIgZmx1c2hlcyBvbiBldmVyeSBDUFUgdGhlcmVieSBpbmNyZWFzaW5nIHBlcmZv cm1hbmNlLg0KPiA+ID4gPg0KPiA+ID4gPiBUaGlzIHBhdGNoIGlzIHRlc3RlZCBvbiBRRU1VL3Zp cnQgbWFjaGluZSBhbmQgU2lGaXZlIFVubGVhc2hlZA0KPiA+ID4gPiBib2FyZC4gT24gUUVNVS92 aXJ0IG1hY2hpbmUsIHdlIHNlZSAxMCUgKGFwcHJveCkgcGVyZm9ybWFuY2UNCj4gPiA+ID4gaW1w cm92ZW1lbnQgd2l0aA0KPiA+IFNXDQo+ID4gPiA+IGVtdWxhdGVkIFRMQnMgcHJvdmlkZWQgYnkg UUVNVS4gVW5mb3J0dW5hdGVseSwgQVNJRCBiaXRzIG9mIFNBVFANCj4gPiA+ID4gQ1NSIGFyZSBu b3QgaW1wbGVtZW50ZWQgb24gU2lGaXZlIFVubGVhc2hlZCBib2FyZCBzbyB3ZSBkb24ndCBzZWUN Cj4gPiA+ID4gYW55IGNoYW5nZSBpbiBwZXJmb3JtYW5jZS4NCj4gPiA+DQo+ID4gPiBNeSB3b3Jy eSBoZXJlIGlzIHRoZSB0ZXN0aW5nOiBJIGRvbid0IHRydXN0IFFFTVUgdG8gYmUgYSBnb29kIGVu b3VnaA0KPiA+ID4gdGVzdCBvZiBBU0lEIGhhbmRsaW5nIHRvIHNoYWtlIG91dCB0aGUgYnVncyBp biB0aGlzIHNvcnQgb2YgY29kZSAtLQ0KPiA+ID4gdW5sZXNzIEknbSBtaXNzaW5nIHNvbWV0aGlu Zywgd2UncmUgY3VycmVudGx5IGlnbm9yaW5nIEFTSURzIGluIFFFTVUNCj4gPiA+IGVudGlyZWx5 LiAgQXMgYSByZXN1bHQgSSdkIGNvbnNpZGVyIHRoaXMgdG8gYmUgZXNzZW50aWFsbHkNCj4gPiA+ IHVudGVzdGFibGUgdW50aWwgc29tZW9uZSBjb21lcyB1cCB3aXRoIGFuIGltcGxlbWVudGF0aW9u IHRoYXQgdGFrZXMNCj4gPiA+IGFkdmFudGFnZSBvZiBBU0lEcy4gIEdpdmVuIHRoYXQgYnVncyBo ZXJlIHdvdWxkIGJlIHN1cGVyIGhhcmQgdG8NCj4gPiA+IGZpbmQsIEknZCBwcmVmZXIgdG8gYXZv aWQgbWVyZ2luZyB0aGlzIHVudGlsIHdlJ3JlIHN1cmUgaXQncyBzb2xpZC4NCj4gPg0KPiA+IFRo aXMgcGF0Y2ggaXMgdGVzdGVkIG9uIGJvdGggUUVNVSBhbmQgU2lGaXZlIFVubGVhc2hlZCBib2Fy ZCBzbyBpdA0KPiA+IHdvcmtzIHBlcmZlY3RseSBmaW5lIG9uIGV4aXN0aW5nIEhXIG91dCB0aGVy ZSBhdCB0aGlzIG1vbWVudC4NCj4gPg0KPiA+IEZvciBmdXR1cmUgSFcgaGF2aW5nIEFTSUQgYml0 cywgaXQgd2lsbCBjZXJ0YWlubHkgc2F2ZSBkZXZlbG9wbWVudA0KPiA+IGVmZm9ydHMgZm9yIHRo ZSBSSVNDLVYgSFcgdmVuZG9ycyBpZiB3ZSBtZXJnZSBpdCBub3cuDQo+ID4NCj4gPiBJcnJlc3Bl Y3RpdmUgdG8gd2hldGhlciB3ZSBtZXJnZSB0aGlzIHBhdGNoIG5vdyBvciBub3QsIHRoZSBkZWJ1 Z2dpbmcNCj4gPiBhbmQgZGV2ZWxvcG1lbnQgY29tcGxleGl0eSBvZiBBU0lEIGFsbG9jYXRvciB3 aWxsIG5vdCBjaGFuZ2UgZm9yIHdob2V2ZXINCj4gZG9lcyBpdC4NCj4gPg0KPiA+IE5vdCBtZXJn aW5nIGl0IG5vdyBpcyBhIGJpZ2dlciBwcm9ibGVtIGJlY2F1c2UgUklTQy1WIEhXIHZlbmRvciBu b3QNCj4gPiBmb2xsb3dpbmcgUklTQy1WIExLTUwgbWlnaHQgcmUtaW1wbGVtZW50IGl0IGZyb20g c2NyYXRjaCB3aXRob3V0DQo+ID4gcmVhbGl6aW5nIHRoYXQgdGhlcmUgaXMgYWxyZWFkeSBhbiBp bXBsZW1lbnRhdGlvbiBzaXR0aW5nIG9uIFJJU0MtVg0KPiA+IExLTUwuDQo+ID4NCj4gPiBJbiBB Uk0gd29ybGQsIGFueSBuZXcgQVJNIGZlYXR1cmUgaXMgZmlyc3QgaW1wbGVtZW50ZWQgYW5kIG1l cmdlZCBpbg0KPiA+IExpbnV4IGtlcm5lbCBieSBBUk0gTHRkIGZvbGtzICh0ZXN0ZWQgb24gdGhl aXIgQVJNIGZhc3QgbW9kZWxzKS4gTGF0ZXINCj4gPiBzb21lIEFSTSBTT0MgdmVuZG9yLCBzZW5k cyBwYXRjaCBmaXhlcyAoaWYgcmVxdWlyZWQpIGFmdGVyIHRyeWluZyBvdXQNCj4gPiBsYXRlc3Qg TGludXggb24gdGhlaXIgSFcgaGF2aW5nIHRoaXMgbmV3IEFSTSBmZWF0dXJlLg0KPiA+DQo+ID4g SU1ITywgd2Ugc2hvdWxkIG1lcmdlIHRoaXMgcGF0Y2ggZm9yIExpbnV4LTUuMiBzbyB0aGF0IFJJ U0MtViBTT0MNCj4gPiB2ZW5kb3JzIGNhbiB0cnkgaXQgb24gdGhlaXIgSFcgd2l0aG91dCByZS1p bXBsZW1lbnRpbmcgaXQgZnJvbQ0KPiA+IHNjcmF0Y2guIFRoZSAiZGVidWdnaW5nIGNvbXBsZXhp dHkiIGlzIGludGVncmFsIHBhcnQgb2Yga2VybmVsDQo+ID4gZGV2ZWxvcG1lbnQgYW5kIHRoaXMg c2hvdWxkIG5vdCBiZSBhIHJlYXNvbiB0byBkZWZlciBjcml0aWNhbCBjaGFuZ2VzIGFzDQo+IGxv bmcgYXMgY2hhbmdlcyBhcmUgdGVzdGVkIG9uIGV4aXN0aW5nIEhXLg0KPiA+DQo+ID4gTGludXgg a2VybmVsIGlzIGFsbCBhYm91dCAib3JnYW5pYyBkZXZlbG9wbWVudCIuIFdlIHN0YXJ0IHdpdGgg YQ0KPiA+IHJlYXNvbmFibGUgaW1wbGVtZW50YXRpb24gb2YgYW55IHRoaW5nIGFuZCBwZXJmZWN0 IGl0IGluY3JlbWVudGFsbHkNCj4gPiBvdmVyIHRpbWUuIFRoYXQncyBob3cgd2UgZ2V0IGEgc29s aWQgaW1wbGVtZW50YXRpb24uDQo+ID4NCj4gPiBSZWdhcmRzLA0KPiA+IEFudXANCj4gPg0KPiA+ ID4NCj4gPiA+ID4gQ28tZGV2ZWxvcGVkLWJ5OjogR2FyeSBHdW8gPGdhcnlAZ2FyeWd1by5uZXQ+ DQo+ID4gPiA+IFNpZ25lZC1vZmYtYnk6IEFudXAgUGF0ZWwgPGFudXAucGF0ZWxAd2RjLmNvbT4N Cj4gPiA+ID4gLS0tDQo+ID4gPiA+IENoYW5nZXMgc2luY2UgdjI6DQo+ID4gPiA+IC0gTW92ZSB0 byBsYXp5IFRMQiBmbHVzaGluZyBiZWNhdXNlIHdlIGdldCBzbG93IHBhdGggd2FybmluZ3MgaWYg d2UNCj4gPiA+ID4gICB1c2UgZmx1c2hfdGxiX2FsbCgpDQo+ID4gPiA+IC0gRG9uJ3Qgc2V0IEFT SUQgYml0cyB0byBhbGwgMXMgaW4gaGVhZC5zLiBJbnN0ZWFkIGp1c3QgZG8gaXQgb24NCj4gPiA+ ID4gICBib290IENQVSBjYWxsaW5nIGFzaWRzX2luaXQoKSBmb3IgZGV0ZXJtaW5pbmcgbnVtYmVy IG9mIEhXIEFTSUQNCj4gPiA+ID4gYml0cw0KPiA+ID4gPiAtIE1ha2UgQ09OVEVYVCB2ZXJzaW9u IGNvbXBhcmlzb24gbW9yZSByZWFkYWJsZSBpbiBzZXRfbW1fYXNpZCgpDQo+ID4gPiA+IC0gRml4 IHR5cG8gaW4gX19mbHVzaF9jb250ZXh0KCkNCj4gPiA+ID4NCj4gPiA+ID4gQ2hhbmdlcyBzaW5j ZSB2MToNCj4gPiA+ID4gLSBXZSBhZGFwdCBnb29kIGFzcGVjdHMgZnJvbSBHYXJ5IEd1bydzIEFT SUQgYWxsb2NhdG9yDQo+IGltcGxlbWVudGF0aW9uDQo+ID4gPiA+ICAgYW5kIHByb3ZpZGUgZHVl IGNyZWRpdCB0byBoaW0gYnkgYWRkaW5nIGhpcyBTb0IuDQo+ID4gPiA+IC0gVHJhY2sgQVNJRHMg YWN0aXZlIGR1cmluZyBjb250ZXh0IGZsdXNoIGFuZCBtYXJrIHRoZW0gYXMNCj4gPiA+ID4gcmVz ZXJ2ZWQNCj4gPiA+ID4gLSBTZXQgQVNJRCBiaXRzIHRvIGFsbCAxcyB0byBzaW1wbGlmeSBudW1i ZXIgb2YgQVNJRCBiaXQgZGV0ZWN0aW9uDQo+ID4gPiA+IC0gVXNlIGF0b21pY19sb25nX3QgaW5z dGVhZCBvZiBhdG9taWM2NF90IGZvciBiZWluZyAzMmJpdCBmcmllbmRseQ0KPiA+ID4gPiAtIFVz ZSB1bnNpZ25lZCBsb25nIGluc3RlYWQgb2YgdTY0IGZvciBiZWluZyAzMmJpdCBmcmllbmRseQ0K PiA+ID4gPiAtIFVzZSBmbHVzaF90bGJfYWxsKCkgaW5zdGVhZCBvZiBsYXp5IGxvY2FsX3RsYl9m bHVzaF9hbGwoKSBhdCB0aW1lDQo+ID4gPiA+ICAgb2YgY29udGV4dCBmbHVzaA0KPiA+ID4gPg0K PiA+ID4gPiBUaGlzIHBhdGNoIGlzIGJhc2VkIG9uIExpbnV4LTUuMS1yYzIgYW5kIFRMQiBmbHVz aCBjbGVhbnVwIHBhdGNoZXMNCj4gPiA+ID4gdjQgZnJvbSBHYXJ5IEd1by4gSXQgY2FuIGJlIGFs c28gZm91bmQgaW4gcmlzY3ZfYXNpZF9hbGxvY2F0b3JfdjMNCj4gPiA+ID4gYnJhbmNoIG9mIGh0 dHBzOi8vZ2l0aHViLmNvbS9hdnBhdGVsL2xpbnV4LmdpdA0KPiA+ID4gPiAtLS0NCj4gPiA+ID4g IGFyY2gvcmlzY3YvaW5jbHVkZS9hc20vY3NyLmggICAgICAgICB8ICAgNiArDQo+ID4gPiA+ICBh cmNoL3Jpc2N2L2luY2x1ZGUvYXNtL21tdS5oICAgICAgICAgfCAgIDEgKw0KPiA+ID4gPiAgYXJj aC9yaXNjdi9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oIHwgICAxICsNCj4gPiA+ID4gIGFyY2gv cmlzY3YvbW0vY29udGV4dC5jICAgICAgICAgICAgICB8IDI2MQ0KPiArKysrKysrKysrKysrKysr KysrKysrKysrKy0NCj4gPiA+ID4gIDQgZmlsZXMgY2hhbmdlZCwgMjU5IGluc2VydGlvbnMoKyks IDEwIGRlbGV0aW9ucygtKQ0KPiA+ID4gPg0KPiA+ID4gPiBkaWZmIC0tZ2l0IGEvYXJjaC9yaXNj di9pbmNsdWRlL2FzbS9jc3IuaA0KPiA+ID4gPiBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vY3Ny LmggaW5kZXggMjhhMGQxY2IzNzRjLi5jZTE4YWI4ZjUzZWQNCj4gPiA+ID4gMTAwNjQ0DQo+ID4g PiA+IC0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vY3NyLmgNCj4gPiA+ID4gKysrIGIvYXJj aC9yaXNjdi9pbmNsdWRlL2FzbS9jc3IuaA0KPiA+ID4gPiBAQCAtNDUsMTAgKzQ1LDE2IEBADQo+ ID4gPiA+ICAjZGVmaW5lIFNBVFBfUFBOICAgICBfQUMoMHgwMDNGRkZGRiwgVUwpDQo+ID4gPiA+ ICAjZGVmaW5lIFNBVFBfTU9ERV8zMiBfQUMoMHg4MDAwMDAwMCwgVUwpDQo+ID4gPiA+ICAjZGVm aW5lIFNBVFBfTU9ERSAgICBTQVRQX01PREVfMzINCj4gPiA+ID4gKyNkZWZpbmUgU0FUUF9BU0lE X0JJVFMgICAgICAgOQ0KPiA+ID4gPiArI2RlZmluZSBTQVRQX0FTSURfU0hJRlQgICAgICAyMg0K PiA+ID4gPiArI2RlZmluZSBTQVRQX0FTSURfTUFTSyAgICAgICBfQUMoMHgxRkYsIFVMKQ0KPiA+ ID4gPiAgI2Vsc2UNCj4gPiA+ID4gICNkZWZpbmUgU0FUUF9QUE4gICAgIF9BQygweDAwMDAwRkZG RkZGRkZGRkYsIFVMKQ0KPiA+ID4gPiAgI2RlZmluZSBTQVRQX01PREVfMzkgX0FDKDB4ODAwMDAw MDAwMDAwMDAwMCwgVUwpDQo+ID4gPiA+ICAjZGVmaW5lIFNBVFBfTU9ERSAgICBTQVRQX01PREVf MzkNCj4gPiA+ID4gKyNkZWZpbmUgU0FUUF9BU0lEX0JJVFMgICAgICAgMTYNCj4gPiA+ID4gKyNk ZWZpbmUgU0FUUF9BU0lEX1NISUZUICAgICAgNDQNCj4gPiA+ID4gKyNkZWZpbmUgU0FUUF9BU0lE X01BU0sgICAgICAgX0FDKDB4RkZGRiwgVUwpDQo+ID4gPiA+ICAjZW5kaWYNCj4gPiA+ID4NCj4g PiA+ID4gIC8qIEludGVycnVwdCBFbmFibGUgYW5kIEludGVycnVwdCBQZW5kaW5nIGZsYWdzICov IGRpZmYgLS1naXQNCj4gPiA+ID4gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL21tdS5oIGIvYXJj aC9yaXNjdi9pbmNsdWRlL2FzbS9tbXUuaA0KPiA+ID4gPiBpbmRleCA1ZGYyZGNjZGJhMTIuLjQy YTljYTBmZTFmYiAxMDA2NDQNCj4gPiA+ID4gLS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9t bXUuaA0KPiA+ID4gPiArKysgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL21tdS5oDQo+ID4gPiA+ IEBAIC0xOCw2ICsxOCw3IEBADQo+ID4gPiA+ICAjaWZuZGVmIF9fQVNTRU1CTFlfXw0KPiA+ID4g Pg0KPiA+ID4gPiAgdHlwZWRlZiBzdHJ1Y3Qgew0KPiA+ID4gPiArICAgICBhdG9taWNfbG9uZ190 IGlkOw0KPiA+ID4gPiAgICAgICB2b2lkICp2ZHNvOw0KPiA+ID4gPiAgI2lmZGVmIENPTkZJR19T TVANCj4gPiA+ID4gICAgICAgLyogQSBsb2NhbCBpY2FjaGUgZmx1c2ggaXMgbmVlZGVkIGJlZm9y ZSB1c2VyIGV4ZWN1dGlvbiBjYW4NCj4gPiA+ID4gcmVzdW1lLiAqLyBkaWZmIC0tZ2l0IGEvYXJj aC9yaXNjdi9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oDQo+ID4gYi9hcmNoL3Jpc2N2L2luY2x1 ZGUvYXNtL21tdV9jb250ZXh0LmgNCj4gPiA+ID4gaW5kZXggYmY0ZjA5N2E5MDUxLi5iZDI3MWM2 YjBlNWUgMTAwNjQ0DQo+ID4gPiA+IC0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vbW11X2Nv bnRleHQuaA0KPiA+ID4gPiArKysgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0 LmgNCj4gPiA+ID4gQEAgLTMwLDYgKzMwLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGVudGVyX2xh enlfdGxiKHN0cnVjdA0KPiA+ID4gPiBtbV9zdHJ1Y3QgKm1tLCAgc3RhdGljIGlubGluZSBpbnQg aW5pdF9uZXdfY29udGV4dChzdHJ1Y3QgdGFza19zdHJ1Y3QNCj4gKnRhc2ssDQo+ID4gPiA+ICAg ICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQ0KPiA+ID4gPiAgew0KPiA+ID4gPiArICAgICBhdG9t aWNfbG9uZ19zZXQoJm1tLT5jb250ZXh0LmlkLCAwKTsNCj4gPiA+ID4gICAgICAgcmV0dXJuIDA7 DQo+ID4gPiA+ICB9DQo+ID4gPiA+DQo+ID4gPiA+IGRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L21t L2NvbnRleHQuYyBiL2FyY2gvcmlzY3YvbW0vY29udGV4dC5jDQo+ID4gPiA+IGluZGV4IDBmNzg3 YmNkM2E3YS4uODYzYjY5MjZkNmQ5IDEwMDY0NA0KPiA+ID4gPiAtLS0gYS9hcmNoL3Jpc2N2L21t L2NvbnRleHQuYw0KPiA+ID4gPiArKysgYi9hcmNoL3Jpc2N2L21tL2NvbnRleHQuYw0KPiA+ID4g PiBAQCAtMiwxMyArMiwyMTMgQEANCj4gPiA+ID4gIC8qDQo+ID4gPiA+ICAgKiBDb3B5cmlnaHQg KEMpIDIwMTIgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhDQo+ID4gPiA+ ICAgKiBDb3B5cmlnaHQgKEMpIDIwMTcgU2lGaXZlDQo+ID4gPiA+ICsgKiBDb3B5cmlnaHQgKEMp IDIwMTkgV2VzdGVybiBEaWdpdGFsIENvcnBvcmF0aW9uIG9yIGl0cyBhZmZpbGlhdGVzLg0KPiA+ ID4gPiAgICovDQo+ID4gPiA+DQo+ID4gPiA+ICsjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+DQo+ ID4gPiA+ICAjaW5jbHVkZSA8bGludXgvbW0uaD4NCj4gPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9z bGFiLmg+DQo+ID4gPiA+DQo+ID4gPiA+ICAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+DQo+ID4g PiA+ICAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4NCj4gPiA+ID4NCj4gPiA+ID4gK3N0YXRp YyBib29sIHVzZV9hc2lkX2FsbG9jYXRvcjsNCj4gPiA+ID4gK3N0YXRpYyB1bnNpZ25lZCBsb25n IGFzaWRfYml0czsNCj4gPiA+ID4gK3N0YXRpYyB1bnNpZ25lZCBsb25nIG51bV9hc2lkczsNCj4g PiA+ID4gK3N0YXRpYyB1bnNpZ25lZCBsb25nIGFzaWRfbWFzazsNCj4gPiA+ID4gKw0KPiA+ID4g PiArc3RhdGljIGF0b21pY19sb25nX3QgY3VycmVudF92ZXJzaW9uOw0KPiA+ID4gPiArDQo+ID4g PiA+ICtzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhjb250ZXh0X2xvY2spOw0KPiA+ID4gPiAr c3RhdGljIGNwdW1hc2tfdCBjb250ZXh0X3RsYl9mbHVzaF9wZW5kaW5nOyBzdGF0aWMgdW5zaWdu ZWQgbG9uZw0KPiA+ID4gPiArKmNvbnRleHRfYXNpZF9tYXA7DQo+ID4gPiA+ICsNCj4gPiA+ID4g K3N0YXRpYyBERUZJTkVfUEVSX0NQVShhdG9taWNfbG9uZ190LCBhY3RpdmVfY29udGV4dCk7IHN0 YXRpYw0KPiA+ID4gPiArREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgcmVzZXJ2ZWRfY29u dGV4dCk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gK3N0YXRpYyBib29sIGNoZWNrX3VwZGF0ZV9yZXNl cnZlZF9jb250ZXh0KHVuc2lnbmVkIGxvbmcgY250eCwNCj4gPiA+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbmV3Y250eCkgew0KPiA+ID4g PiArICAgICBpbnQgY3B1Ow0KPiA+ID4gPiArICAgICBib29sIGhpdCA9IGZhbHNlOw0KPiA+ID4g PiArDQo+ID4gPiA+ICsgICAgIC8qDQo+ID4gPiA+ICsgICAgICAqIEl0ZXJhdGUgb3ZlciB0aGUg c2V0IG9mIHJlc2VydmVkIENPTlRFWFQgbG9va2luZyBmb3IgYSBtYXRjaC4NCj4gPiA+ID4gKyAg ICAgICogSWYgd2UgZmluZCBvbmUsIHRoZW4gd2UgY2FuIHVwZGF0ZSBvdXIgbW0gdG8gdXNlIG5l dyBDT05URVhUDQo+ID4gPiA+ICsgICAgICAqIChpLmUuIHRoZSBzYW1lIENPTlRFWFQgaW4gdGhl IGN1cnJlbnRfdmVyc2lvbikgYnV0IHdlIGNhbid0DQo+ID4gPiA+ICsgICAgICAqIGV4aXQgdGhl IGxvb3AgZWFybHksIHNpbmNlIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgYWxsIGNvcGllcw0KPiA+ ID4gPiArICAgICAgKiBvZiB0aGUgb2xkIENPTlRFWFQgYXJlIHVwZGF0ZWQgdG8gcmVmbGVjdCB0 aGUgbW0uIEZhaWx1cmUgdG8gZG8NCj4gPiA+ID4gKyAgICAgICogc28gY291bGQgcmVzdWx0IGlu IHVzIG1pc3NpbmcgdGhlIHJlc2VydmVkIENPTlRFWFQgaW4gYSBmdXR1cmUNCj4gPiA+ID4gKyAg ICAgICogdmVyc2lvbi4NCj4gPiA+ID4gKyAgICAgICovDQo+ID4gPiA+ICsgICAgIGZvcl9lYWNo X3Bvc3NpYmxlX2NwdShjcHUpIHsNCj4gPiA+ID4gKyAgICAgICAgICAgICBpZiAocGVyX2NwdShy ZXNlcnZlZF9jb250ZXh0LCBjcHUpID09IGNudHgpIHsNCj4gPiA+ID4gKyAgICAgICAgICAgICAg ICAgICAgIGhpdCA9IHRydWU7DQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICBwZXJfY3B1 KHJlc2VydmVkX2NvbnRleHQsIGNwdSkgPSBuZXdjbnR4Ow0KPiA+ID4gPiArICAgICAgICAgICAg IH0NCj4gPiA+ID4gKyAgICAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgIHJldHVybiBoaXQ7 DQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8qIE5vdGU6IG11c3QgYmUgY2FsbGVk IHdpdGggY29udGV4dF9sb2NrIGhlbGQgKi8gc3RhdGljIHZvaWQNCj4gPiA+ID4gK19fZmx1c2hf Y29udGV4dCh2b2lkKSB7DQo+ID4gPiA+ICsgICAgIGludCBpOw0KPiA+ID4gPiArICAgICB1bnNp Z25lZCBsb25nIGNudHg7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICAgLyogVXBkYXRlIHRoZSBs aXN0IG9mIHJlc2VydmVkIEFTSURzIGFuZCB0aGUgQVNJRCBiaXRtYXAuICovDQo+ID4gPiA+ICsg ICAgIGJpdG1hcF9jbGVhcihjb250ZXh0X2FzaWRfbWFwLCAwLCBudW1fYXNpZHMpOw0KPiA+ID4g PiArDQo+ID4gPiA+ICsgICAgIC8qIE1hcmsgYWxyZWFkeSBhY2l0dmUgQVNJRHMgYXMgdXNlZCAq Lw0KPiA+ID4gPiArICAgICBmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgew0KPiA+ID4gPiArICAg ICAgICAgICAgIGNudHggPSBhdG9taWNfbG9uZ194Y2hnX3JlbGF4ZWQoJnBlcl9jcHUoYWN0aXZl X2NvbnRleHQsIGkpLA0KPiAwKTsNCj4gPiA+ID4gKyAgICAgICAgICAgICAvKg0KPiA+ID4gPiAr ICAgICAgICAgICAgICAqIElmIHRoaXMgQ1BVIGhhcyBhbHJlYWR5IGJlZW4gdGhyb3VnaCBhIHJv bGxvdmVyLCBidXQNCj4gPiA+ID4gKyAgICAgICAgICAgICAgKiBoYXNuJ3QgcnVuIGFub3RoZXIg dGFzayBpbiB0aGUgbWVhbnRpbWUsIHdlIG11c3QgcHJlc2VydmUNCj4gPiA+ID4gKyAgICAgICAg ICAgICAgKiBpdHMgcmVzZXJ2ZWQgQ09OVEVYVCwgYXMgdGhpcyBpcyB0aGUgb25seSB0cmFjZSB3 ZSBoYXZlIG9mDQo+ID4gPiA+ICsgICAgICAgICAgICAgICogdGhlIHByb2Nlc3MgaXQgaXMgc3Rp bGwgcnVubmluZy4NCj4gPiA+ID4gKyAgICAgICAgICAgICAgKi8NCj4gPiA+ID4gKyAgICAgICAg ICAgICBpZiAoY250eCA9PSAwKQ0KPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgY250eCA9 IHBlcl9jcHUocmVzZXJ2ZWRfY29udGV4dCwgaSk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICAg ICAgICAgICBfX3NldF9iaXQoY250eCAmIGFzaWRfbWFzaywgY29udGV4dF9hc2lkX21hcCk7DQo+ ID4gPiA+ICsgICAgICAgICAgICAgcGVyX2NwdShyZXNlcnZlZF9jb250ZXh0LCBpKSA9IGNudHg7 DQo+ID4gPiA+ICsgICAgIH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgICAvKiBNYXJrIEFTSUQg IzAgYXMgdXNlZCBiZWNhdXNlIGl0IGlzIHVzZWQgYXQgYm9vdC10aW1lICovDQo+ID4gPiA+ICsg ICAgIF9fc2V0X2JpdCgwLCBjb250ZXh0X2FzaWRfbWFwKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiAr ICAgICAvKiBRdWV1ZSBhIFRMQiBpbnZhbGlkYXRpb24gZm9yIGVhY2ggQ1BVIG9uIG5leHQgY29u dGV4dC1zd2l0Y2ggKi8NCj4gPiA+ID4gKyAgICAgY3B1bWFza19zZXRhbGwoJmNvbnRleHRfdGxi X2ZsdXNoX3BlbmRpbmcpOw0KPiA+ID4gPiArfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsvKiBOb3Rl OiBtdXN0IGJlIGNhbGxlZCB3aXRoIGNvbnRleHRfbG9jayBoZWxkICovIHN0YXRpYyB1bnNpZ25l ZA0KPiA+ID4gPiArbG9uZyBfX25ld19jb250ZXh0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7DQo+ ID4gPiA+ICsgICAgIHN0YXRpYyB1MzIgY3VyX2lkeCA9IDE7DQo+ID4gPiA+ICsgICAgIHVuc2ln bmVkIGxvbmcgY250eCA9IGF0b21pY19sb25nX3JlYWQoJm1tLT5jb250ZXh0LmlkKTsNCj4gPiA+ ID4gKyAgICAgdW5zaWduZWQgbG9uZyBhc2lkLCB2ZXIgPQ0KPiA+ID4gPiArYXRvbWljX2xvbmdf cmVhZCgmY3VycmVudF92ZXJzaW9uKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgICBpZiAoY250 eCAhPSAwKSB7DQo+ID4gPiA+ICsgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBuZXdjbnR4ID0g dmVyIHwgKGNudHggJiBhc2lkX21hc2spOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgICAgICAg ICAgLyoNCj4gPiA+ID4gKyAgICAgICAgICAgICAgKiBJZiBvdXIgY3VycmVudCBDT05URVhUIHdh cyBhY3RpdmUgZHVyaW5nIGEgcm9sbG92ZXIsIHdlDQo+ID4gPiA+ICsgICAgICAgICAgICAgICog Y2FuIGNvbnRpbnVlIHRvIHVzZSBpdCBhbmQgdGhpcyB3YXMganVzdCBhIGZhbHNlIGFsYXJtLg0K PiA+ID4gPiArICAgICAgICAgICAgICAqLw0KPiA+ID4gPiArICAgICAgICAgICAgIGlmIChjaGVj a191cGRhdGVfcmVzZXJ2ZWRfY29udGV4dChjbnR4LCBuZXdjbnR4KSkNCj4gPiA+ID4gKyAgICAg ICAgICAgICAgICAgICAgIHJldHVybiBuZXdjbnR4Ow0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAg ICAgICAgICAgLyoNCj4gPiA+ID4gKyAgICAgICAgICAgICAgKiBXZSBoYWQgYSB2YWxpZCBDT05U RVhUIGluIGEgcHJldmlvdXMgbGlmZSwgc28gdHJ5IHRvDQo+ID4gPiA+ICsgICAgICAgICAgICAg ICogcmUtdXNlIGl0IGlmIHBvc3NpYmxlLg0KPiA+ID4gPiArICAgICAgICAgICAgICAqLw0KPiA+ ID4gPiArICAgICAgICAgICAgIGlmICghX190ZXN0X2FuZF9zZXRfYml0KGNudHggJiBhc2lkX21h c2ssIGNvbnRleHRfYXNpZF9tYXApKQ0KPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgcmV0 dXJuIG5ld2NudHg7DQo+ID4gPiA+ICsgICAgIH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgICAv Kg0KPiA+ID4gPiArICAgICAgKiBBbGxvY2F0ZSBhIGZyZWUgQVNJRC4gSWYgd2UgY2FuJ3QgZmlu ZCBvbmUgdGhlbiBpbmNyZW1lbnQNCj4gPiA+ID4gKyAgICAgICogY3VycmVudF92ZXJzaW9uIGFu ZCBmbHVzaCBhbGwgQVNJRHMuDQo+ID4gPiA+ICsgICAgICAqLw0KPiA+ID4gPiArICAgICBhc2lk ID0gZmluZF9uZXh0X3plcm9fYml0KGNvbnRleHRfYXNpZF9tYXAsIG51bV9hc2lkcywgY3VyX2lk eCk7DQo+ID4gPiA+ICsgICAgIGlmIChhc2lkICE9IG51bV9hc2lkcykNCj4gPiA+ID4gKyAgICAg ICAgICAgICBnb3RvIHNldF9hc2lkOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgIC8qIFdlJ3Jl IG91dCBvZiBBU0lEcywgc28gaW5jcmVtZW50IGN1cnJlbnRfdmVyc2lvbiAqLw0KPiA+ID4gPiAr ICAgICB2ZXIgPSBhdG9taWNfbG9uZ19hZGRfcmV0dXJuX3JlbGF4ZWQobnVtX2FzaWRzLA0KPiA+ ID4gPiArICZjdXJyZW50X3ZlcnNpb24pOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgIC8qIEZs dXNoIGV2ZXJ5dGhpbmcgICovDQo+ID4gPiA+ICsgICAgIF9fZmx1c2hfY29udGV4dCgpOw0KPiA+ ID4gPiArDQo+ID4gPiA+ICsgICAgIC8qIFdlIGhhdmUgbW9yZSBBU0lEcyB0aGFuIENQVXMsIHNv IHRoaXMgd2lsbCBhbHdheXMgc3VjY2VlZCAqLw0KPiA+ID4gPiArICAgICBhc2lkID0gZmluZF9u ZXh0X3plcm9fYml0KGNvbnRleHRfYXNpZF9tYXAsIG51bV9hc2lkcywgMSk7DQo+ID4gPiA+ICsN Cj4gPiA+ID4gK3NldF9hc2lkOg0KPiA+ID4gPiArICAgICBfX3NldF9iaXQoYXNpZCwgY29udGV4 dF9hc2lkX21hcCk7DQo+ID4gPiA+ICsgICAgIGN1cl9pZHggPSBhc2lkOw0KPiA+ID4gPiArICAg ICByZXR1cm4gYXNpZCB8IHZlcjsNCj4gPiA+ID4gK30NCj4gPiA+ID4gKw0KPiA+ID4gPiArc3Rh dGljIHZvaWQgc2V0X21tX2FzaWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGludCBj cHUpIHsNCj4gPiA+ID4gKyAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsNCj4gPiA+ID4gKyAgICAg Ym9vbCBuZWVkX2ZsdXNoX3RsYiA9IGZhbHNlOw0KPiA+ID4gPiArICAgICB1bnNpZ25lZCBsb25n IGNudHgsIG9sZF9hY3RpdmVfY250eDsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgICBjbnR4ID0g YXRvbWljX2xvbmdfcmVhZCgmbW0tPmNvbnRleHQuaWQpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsg ICAgIC8qDQo+ID4gPiA+ICsgICAgICAqIElmIG91ciBhY3RpdmVfY29udGV4dCBpcyBub24temVy byBhbmQgdGhlIGNvbnRleHQgbWF0Y2hlcyB0aGUNCj4gPiA+ID4gKyAgICAgICogY3VycmVudF92 ZXJzaW9uLCB0aGVuIHdlIHVwZGF0ZSB0aGUgYWN0aXZlX2NvbnRleHQgZW50cnkgd2l0aCBhDQo+ ID4gPiA+ICsgICAgICAqIHJlbGF4ZWQgY21weGNoZy4NCj4gPiA+ID4gKyAgICAgICoNCj4gPiA+ ID4gKyAgICAgICogRm9sbG93aW5nIGlzIGhvdyB3ZSBoYW5kbGUgcmFjaW5nIHdpdGggYSBjb25j dXJyZW50IHJvbGxvdmVyOg0KPiA+ID4gPiArICAgICAgKg0KPiA+ID4gPiArICAgICAgKiAtIFdl IGdldCBhIHplcm8gYmFjayBmcm9tIHRoZSBjbXB4Y2hnIGFuZCBlbmQgdXAgd2FpdGluZyBvbiB0 aGUNCj4gPiA+ID4gKyAgICAgICogICBsb2NrLiBUYWtpbmcgdGhlIGxvY2sgc3luY2hyb25pc2Vz IHdpdGggdGhlIHJvbGxvdmVyIGFuZCBzbw0KPiA+ID4gPiArICAgICAgKiAgIHdlIGFyZSBmb3Jj ZWQgdG8gc2VlIHRoZSB1cGRhdGVkIHZlcmlvbi4NCj4gPiA+ID4gKyAgICAgICoNCj4gPiA+ID4g KyAgICAgICogLSBXZSBnZXQgYSB2YWxpZCBjb250ZXh0IGJhY2sgZnJvbSB0aGUgY21weGNoZyB0 aGVuIHdlIGNvbnRpbnVlDQo+ID4gPiA+ICsgICAgICAqICAgdXNpbmcgb2xkIEFTSUQgYmVjYXVz ZSBfX2ZsdXNoX2NvbnRleHQoKSB3b3VsZCBoYXZlIG1hcmtlZA0KPiBBU0lEDQo+ID4gPiA+ICsg ICAgICAqICAgb2YgYWN0aXZlX2NvbnRleHQgYXMgdXNlZCBhbmQgbmV4dCBjb250ZXh0IHN3aXRj aCB3ZSB3aWxsDQo+IGFsbG9jYXRlDQo+ID4gPiA+ICsgICAgICAqICAgbmV3IGNvbnRleHQuDQo+ ID4gPiA+ICsgICAgICAqLw0KPiA+ID4gPiArICAgICBvbGRfYWN0aXZlX2NudHggPSBhdG9taWNf bG9uZ19yZWFkKCZwZXJfY3B1KGFjdGl2ZV9jb250ZXh0LA0KPiBjcHUpKTsNCj4gPiA+ID4gKyAg ICAgaWYgKG9sZF9hY3RpdmVfY250eCAmJg0KPiA+ID4gPiArICAgICAgICAgKChjbnR4ICYgfmFz aWRfbWFzaykgPT0gYXRvbWljX2xvbmdfcmVhZCgmY3VycmVudF92ZXJzaW9uKSkNCj4gJiYNCj4g PiA+ID4gKyAgICAgICAgIGF0b21pY19sb25nX2NtcHhjaGdfcmVsYXhlZCgmcGVyX2NwdShhY3Rp dmVfY29udGV4dCwgY3B1KSwNCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBvbGRfYWN0aXZlX2NudHgsIGNudHgpKQ0KPiA+ID4gPiArICAgICAgICAgICAgIGdv dG8gc3dpdGNoX21tX2Zhc3Q7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICAgcmF3X3NwaW5fbG9j a19pcnFzYXZlKCZjb250ZXh0X2xvY2ssIGZsYWdzKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICAg ICAvKiBDaGVjayB0aGF0IG91ciBBU0lEIGJlbG9uZ3MgdG8gdGhlIGN1cnJlbnRfdmVyc2lvbi4g Ki8NCj4gPiA+ID4gKyAgICAgY250eCA9IGF0b21pY19sb25nX3JlYWQoJm1tLT5jb250ZXh0Lmlk KTsNCj4gPiA+ID4gKyAgICAgaWYgKChjbnR4ICYgfmFzaWRfbWFzaykgIT0gYXRvbWljX2xvbmdf cmVhZCgmY3VycmVudF92ZXJzaW9uKSkgew0KPiA+ID4gPiArICAgICAgICAgICAgIGNudHggPSBf X25ld19jb250ZXh0KG1tKTsNCj4gPiA+ID4gKyAgICAgICAgICAgICBhdG9taWNfbG9uZ19zZXQo Jm1tLT5jb250ZXh0LmlkLCBjbnR4KTsNCj4gPiA+ID4gKyAgICAgfQ0KPiA+ID4gPiArDQo+ID4g PiA+ICsgICAgIGlmIChjcHVtYXNrX3Rlc3RfYW5kX2NsZWFyX2NwdShjcHUsDQo+ICZjb250ZXh0 X3RsYl9mbHVzaF9wZW5kaW5nKSkNCj4gPiA+ID4gKyAgICAgICAgICAgICBuZWVkX2ZsdXNoX3Rs YiA9IHRydWU7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICAgYXRvbWljX2xvbmdfc2V0KCZwZXJf Y3B1KGFjdGl2ZV9jb250ZXh0LCBjcHUpLCBjbnR4KTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICAg ICByYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29udGV4dF9sb2NrLCBmbGFncyk7DQo+ID4g PiA+ICsNCj4gPiA+ID4gK3N3aXRjaF9tbV9mYXN0Og0KPiA+ID4gPiArICAgICAvKg0KPiA+ID4g PiArICAgICAgKiBVc2UgdGhlIG9sZCBzcGJ0ciBuYW1lIGluc3RlYWQgb2YgdXNpbmcgdGhlIGN1 cnJlbnQgc2F0cA0KPiA+ID4gPiArICAgICAgKiBuYW1lIHRvIHN1cHBvcnQgYmludXRpbHMgMi4y OSB3aGljaCBkb2Vzbid0IGtub3cgYWJvdXQgdGhlDQo+ID4gPiA+ICsgICAgICAqIHByaXZpbGVn ZWQgSVNBIDEuMTAgeWV0Lg0KPiA+ID4gPiArICAgICAgKi8NCj4gPiA+ID4gKyAgICAgY3NyX3dy aXRlKHNwdGJyLCB2aXJ0X3RvX3BmbihtbS0+cGdkKSB8DQo+ID4gPiA+ICsgICAgICAgICAgICAg ICAoKGNudHggJiBhc2lkX21hc2spIDw8IFNBVFBfQVNJRF9TSElGVCkgfA0KPiA+ID4gPiArICAg ICAgICAgICAgICAgU0FUUF9NT0RFKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgICBpZiAobmVl ZF9mbHVzaF90bGIpDQo+ID4gPiA+ICsgICAgICAgICAgICAgbG9jYWxfZmx1c2hfdGxiX2FsbCgp OyB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gK3N0YXRpYyB2b2lkIHNldF9tbV9ub2FzaWQoc3RydWN0 IG1tX3N0cnVjdCAqbW0pIHsNCj4gPiA+ID4gKyAgICAgLyoNCj4gPiA+ID4gKyAgICAgICogVXNl IHRoZSBvbGQgc3BidHIgbmFtZSBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBjdXJyZW50IHNhdHANCj4g PiA+ID4gKyAgICAgICogbmFtZSB0byBzdXBwb3J0IGJpbnV0aWxzIDIuMjkgd2hpY2ggZG9lc24n dCBrbm93IGFib3V0IHRoZQ0KPiA+ID4gPiArICAgICAgKiBwcml2aWxlZ2VkIElTQSAxLjEwIHll dC4NCj4gPiA+ID4gKyAgICAgICovDQo+ID4gPiA+ICsgICAgIGNzcl93cml0ZShzcHRiciwgdmly dF90b19wZm4obW0tPnBnZCkgfCBTQVRQX01PREUpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAg IC8qDQo+ID4gPiA+ICsgICAgICAqIHNmZW5jZS52bWEgYWZ0ZXIgU0FUUCB3cml0ZS4gV2UgY2Fs bCBpdCBvbiBNTSBjb250ZXh0IGluc3RlYWQgb2YNCj4gPiA+ID4gKyAgICAgICogY2FsbGluZyBs b2NhbF9mbHVzaF90bGJfYWxsIHRvIHByZXZlbnQgZ2xvYmFsIG1hcHBpbmdzIGZyb20gYmVpbmcN Cj4gPiA+ID4gKyAgICAgICogYWZmZWN0ZWQuDQo+ID4gPiA+ICsgICAgICAqLw0KPiA+ID4gPiAr ICAgICBsb2NhbF9mbHVzaF90bGJfbW0obW0pOw0KPiA+ID4gPiArfQ0KPiA+ID4gPiArDQo+ID4g PiA+ICAvKg0KPiA+ID4gPiAgICogV2hlbiBuZWNlc3NhcnksIHBlcmZvcm1zIGEgZGVmZXJyZWQg aWNhY2hlIGZsdXNoIGZvciB0aGUgZ2l2ZW4NCj4gPiA+ID4gTU0NCj4gPiBjb250ZXh0LA0KPiA+ ID4gPiAgICogb24gdGhlIGxvY2FsIENQVS4gIFJJU0MtViBoYXMgbm8gZGlyZWN0IG1lY2hhbmlz bSBmb3INCj4gPiA+ID4gaW5zdHJ1Y3Rpb24gY2FjaGUgQEAgLTU4LDIwICsyNTgsNjEgQEAgdm9p ZCBzd2l0Y2hfbW0oc3RydWN0DQo+ID4gPiA+IG1tX3N0cnVjdCAqcHJldiwgc3RydWN0DQo+ID4g bW1fc3RydWN0ICpuZXh0LA0KPiA+ID4gPiAgICAgICBjcHVtYXNrX2NsZWFyX2NwdShjcHUsIG1t X2NwdW1hc2socHJldikpOw0KPiA+ID4gPiAgICAgICBjcHVtYXNrX3NldF9jcHUoY3B1LCBtbV9j cHVtYXNrKG5leHQpKTsNCj4gPiA+ID4NCj4gPiA+ID4gKyAgICAgaWYgKHVzZV9hc2lkX2FsbG9j YXRvcikNCj4gPiA+ID4gKyAgICAgICAgICAgICBzZXRfbW1fYXNpZChuZXh0LCBjcHUpOw0KPiA+ ID4gPiArICAgICBlbHNlDQo+ID4gPiA+ICsgICAgICAgICAgICAgc2V0X21tX25vYXNpZChuZXh0 KTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgICBmbHVzaF9pY2FjaGVfZGVmZXJyZWQobmV4dCk7 IH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArc3RhdGljIGludCBhc2lkc19pbml0KHZvaWQpDQo+ID4g PiA+ICt7DQo+ID4gPiA+ICsgICAgIHVuc2lnbmVkIGxvbmcgb2xkOw0KPiA+ID4gPiArDQo+ID4g PiA+ICsgICAgIC8qIEZpZ3VyZS1vdXQgbnVtYmVyIG9mIEFTSUQgYml0cyBpbiBIVyAqLw0KPiA+ ID4gPiArICAgICBvbGQgPSBjc3JfcmVhZChzcHRicik7DQo+ID4gPiA+ICsgICAgIGFzaWRfYml0 cyA9IG9sZCB8IChTQVRQX0FTSURfTUFTSyA8PCBTQVRQX0FTSURfU0hJRlQpOw0KPiA+ID4gPiAr ICAgICBjc3Jfd3JpdGUoc3B0YnIsIGFzaWRfYml0cyk7DQo+ID4gPiA+ICsgICAgIGFzaWRfYml0 cyA9IChjc3JfcmVhZChzcHRicikgPj4gU0FUUF9BU0lEX1NISUZUKSAgJg0KPiBTQVRQX0FTSURf TUFTSzsNCj4gPiA+ID4gKyAgICAgYXNpZF9iaXRzID0gZmxzX2xvbmcoYXNpZF9iaXRzKTsNCj4g PiA+ID4gKyAgICAgY3NyX3dyaXRlKHNwdGJyLCBvbGQpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICAg ICAgIC8qDQo+ID4gPiA+IC0gICAgICAqIFVzZSB0aGUgb2xkIHNwYnRyIG5hbWUgaW5zdGVhZCBv ZiB1c2luZyB0aGUgY3VycmVudCBzYXRwDQo+ID4gPiA+IC0gICAgICAqIG5hbWUgdG8gc3VwcG9y dCBiaW51dGlscyAyLjI5IHdoaWNoIGRvZXNuJ3Qga25vdyBhYm91dCB0aGUNCj4gPiA+ID4gLSAg ICAgICogcHJpdmlsZWdlZCBJU0EgMS4xMCB5ZXQuDQo+ID4gPiA+ICsgICAgICAqIEluIHRoZSBw cm9jZXNzIG9mIGRldGVybWluaW5nIG51bWJlciBvZiBBU0lEIGJpdHMgKGFib3ZlKQ0KPiA+ID4g PiArICAgICAgKiB3ZSBwb2xsdXRlZCB0aGUgVExCIG9mIGN1cnJlbnQgSEFSVCBzbyBsZXQncyBk byBUTEIgZmx1c2hlZA0KPiA+ID4gPiArICAgICAgKiB0byByZW1vdmUgdW53YW50ZWQgVExCIGVu dGVyaWVzLg0KPiA+ID4gPiAgICAgICAgKi8NCj4gPiA+ID4gLSAgICAgY3NyX3dyaXRlKHNwdGJy LCB2aXJ0X3RvX3BmbihuZXh0LT5wZ2QpIHwgU0FUUF9NT0RFKTsNCj4gPiA+ID4gKyAgICAgbG9j YWxfZmx1c2hfdGxiX2FsbCgpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgIC8qIFByZS1jb21w dXRlIEFTSUQgZGV0YWlscyAqLw0KPiA+ID4gPiArICAgICBudW1fYXNpZHMgPSAxIDw8IGFzaWRf Yml0czsNCj4gPiA+ID4gKyAgICAgYXNpZF9tYXNrID0gbnVtX2FzaWRzIC0gMTsNCj4gPiA+ID4N Cj4gPiA+ID4gICAgICAgLyoNCj4gPiA+ID4gLSAgICAgICogc2ZlbmNlLnZtYSBhZnRlciBTQVRQ IHdyaXRlLiBXZSBjYWxsIGl0IG9uIE1NIGNvbnRleHQgaW5zdGVhZCBvZg0KPiA+ID4gPiAtICAg ICAgKiBjYWxsaW5nIGxvY2FsX2ZsdXNoX3RsYl9hbGwgdG8gcHJldmVudCBnbG9iYWwgbWFwcGlu Z3MgZnJvbSBiZWluZw0KPiA+ID4gPiAtICAgICAgKiBhZmZlY3RlZC4NCj4gPiA+ID4gKyAgICAg ICogVXNlIEFTSUQgYWxsb2NhdG9yIG9ubHkgaWYgbnVtYmVyIG9mIEhXIEFTSURzIGFyZQ0KPiA+ ID4gPiArICAgICAgKiBhdC1sZWFzdCB0d2ljZSBtb3JlIHRoYW4gQ1BVcw0KPiA+ID4gPiAgICAg ICAgKi8NCj4gPiA+ID4gLSAgICAgbG9jYWxfZmx1c2hfdGxiX21tKG5leHQpOw0KPiA+ID4gPiAr ICAgICB1c2VfYXNpZF9hbGxvY2F0b3IgPQ0KPiA+ID4gPiArICAgICAgICAgICAgIChudW1fYXNp ZHMgPD0gKDIgKiBudW1fcG9zc2libGVfY3B1cygpKSkgPyBmYWxzZSA6DQo+ID4gPiA+ICsgdHJ1 ZTsNCj4gPiA+ID4NCj4gPiA+ID4gLSAgICAgZmx1c2hfaWNhY2hlX2RlZmVycmVkKG5leHQpOw0K PiA+ID4gPiAtfQ0KPiA+ID4gPiArICAgICAvKiBTZXR1cCBBU0lEIGFsbG9jYXRvciBpZiBhdmFp bGFibGUgKi8NCj4gPiA+ID4gKyAgICAgaWYgKHVzZV9hc2lkX2FsbG9jYXRvcikgew0KPiA+ID4g PiArICAgICAgICAgICAgIGF0b21pY19sb25nX3NldCgmY3VycmVudF92ZXJzaW9uLCBudW1fYXNp ZHMpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgICAgICAgICAgY29udGV4dF9hc2lkX21hcCA9 IGtjYWxsb2MoQklUU19UT19MT05HUyhudW1fYXNpZHMpLA0KPiA+ID4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzaXplb2YoKmNvbnRleHRfYXNpZF9tYXApLCBHRlBfS0VSTkVM KTsNCj4gPiA+ID4gKyAgICAgICAgICAgICBpZiAoIWNvbnRleHRfYXNpZF9tYXApDQo+ID4gPiA+ ICsgICAgICAgICAgICAgICAgICAgICBwYW5pYygiRmFpbGVkIHRvIGFsbG9jYXRlIGJpdG1hcCBm b3IgJWx1IEFTSURzXG4iLA0KPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVt X2FzaWRzKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgICAgICAgICAgIF9fc2V0X2JpdCgwLCBj b250ZXh0X2FzaWRfbWFwKTsNCj4gPiA+ID4NCj4gPiA+ID4gKyAgICAgICAgICAgICBwcl9pbmZv KCJBU0lEIGFsbG9jYXRvciB1c2luZyAlbHUgZW50cmllc1xuIiwgbnVtX2FzaWRzKTsNCj4gPiA+ ID4gKyAgICAgfSBlbHNlIHsNCj4gPiA+ID4gKyAgICAgICAgICAgICBwcl9pbmZvKCJBU0lEIGFs bG9jYXRvciBkaXNhYmxlZFxuIik7DQo+ID4gPiA+ICsgICAgIH0NCj4gPiA+ID4gKw0KPiA+ID4g PiArICAgICByZXR1cm4gMDsNCj4gPiA+ID4gK30NCj4gPiA+ID4gK2Vhcmx5X2luaXRjYWxsKGFz aWRzX2luaXQpOw0K