Received: by 2002:a25:5b86:0:0:0:0:0 with SMTP id p128csp545157ybb; Thu, 28 Mar 2019 07:32:46 -0700 (PDT) X-Google-Smtp-Source: APXvYqzW9uELEH+w/jaFWzhEOs7lRV8pTNbDOvLy5LSz/lTzkhsrjbnnvwC+cl4glZLddBZwYDSr X-Received: by 2002:a62:ac02:: with SMTP id v2mr1494965pfe.163.1553783566530; Thu, 28 Mar 2019 07:32:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1553783566; cv=none; d=google.com; s=arc-20160816; b=sQ+OvVtbYtflnXuh90E0TtcG3p+Hel55VIMr7EAiO3W2kD32XJynseRtEffqZ771bk NormfU/CzhtpNSTPYV4id/6jpeL2ujI4Ho1wHAgHUzuczQ99izr57DZ+JeZWFLzweaHl Dn4E8wsvCvjLKKWOWxeLOh7ZToQAKTeVkJxT/6NjLITsxezmIibajX3Fl06iJt1OEhNZ QfYIU2gpj/Gu9ONM7w9o/NjQRExn2vpW3018Q+h1gutAmmh3x0X+Uxd/lSVrRIE6jGG4 FJnD6SHeVZ188F+ARV9kYqY5hhmhuSKUIkTXH7APgn+tirrTmZULQCei7nfv3/Ahuk4U cRtA== 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 :content-id:content-language:accept-language:in-reply-to:references :message-id:date:thread-index:thread-topic:subject:cc:to:from :dkim-signature; bh=LLku74UuaB8iDyQBu8nmsgnmcpt9RVhNzt9ASrKTdc0=; b=OKnJwf6Z8/jxEWQ1f9eQErZkGy6Fy/GyXb9OBsKOn862j0klYKqiNRYBTdJHa69OcM rHAKLRoV2mJ5q9M4Z+AjfpRY78kvImlE9meoHhFQQbtzATNDEK4J8hfCj4wXwBJArX8S X5GAvTgnYzd+dRdZ2w9gHcN4fYMTEMCxjFOjkFteXWNE9tRqyd6wExIuCEddoeYVygHF zAX4IuYtitSmBXBlU40q5NhNrR8FdY6IHXFuPqeqsppM1UJq+wLOxCLAJtTfU+9As8tr FsEIKUmRL2aVXr5R6J3MXWGQMd6TJc2Sg6DkGqyqhOXJu2hpKNDkVW/ex03mQhi27iG8 8vCA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@garyguo.net header.s=selector1 header.b=l0CcnDvh; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 78si732013pga.566.2019.03.28.07.32.29; Thu, 28 Mar 2019 07:32:46 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@garyguo.net header.s=selector1 header.b=l0CcnDvh; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726969AbfC1Oak (ORCPT + 99 others); Thu, 28 Mar 2019 10:30:40 -0400 Received: from mail-eopbgr110096.outbound.protection.outlook.com ([40.107.11.96]:38864 "EHLO GBR01-CWL-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1725849AbfC1Oak (ORCPT ); Thu, 28 Mar 2019 10:30:40 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=garyguo.net; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=LLku74UuaB8iDyQBu8nmsgnmcpt9RVhNzt9ASrKTdc0=; b=l0CcnDvhHDwu0kHKx2fvNoHOletqUPkQhRbnlOUHItq74xTpHvOgpjN4ByVBOz+7azH9iomTRlBsjXR+hwI/P105pfBXmMyQ6vj2XLlY7xeVgQweCvv6gwsCn5HyLuitAKXZ5MylSiEavPvqO5JBuAmQLcC1h3gPRh7LKITJLw8= Received: from LO2P265MB0847.GBRP265.PROD.OUTLOOK.COM (20.176.139.20) by LO2P265MB1710.GBRP265.PROD.OUTLOOK.COM (20.176.146.9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1750.17; Thu, 28 Mar 2019 14:30:29 +0000 Received: from LO2P265MB0847.GBRP265.PROD.OUTLOOK.COM ([fe80::ed34:1290:4306:3157]) by LO2P265MB0847.GBRP265.PROD.OUTLOOK.COM ([fe80::ed34:1290:4306:3157%3]) with mapi id 15.20.1750.017; Thu, 28 Mar 2019 14:30:29 +0000 From: Gary Guo To: Anup Patel CC: Anup Patel , Palmer Dabbelt , Albert Ou , Atish Patra , Paul Walmsley , Christoph Hellwig , Mike Rapoport , "linux-riscv@lists.infradead.org" , "linux-kernel@vger.kernel.org" Subject: Re: [PATCH v2] RISC-V: Implement ASID allocator Thread-Topic: [PATCH v2] RISC-V: Implement ASID allocator Thread-Index: AQHU5TAIKaRDCttA7UazIjpcDaomMKYhDFQAgAAI94CAAAXngA== Date: Thu, 28 Mar 2019 14:30:28 +0000 Message-ID: <4f290078-54bd-62e2-6356-d700e53e6315@garyguo.net> References: <20190328063211.13052-1-anup.patel@wdc.com> In-Reply-To: Accept-Language: en-GB, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: LNXP265CA0055.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:5d::19) To LO2P265MB0847.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:8c::20) authentication-results: spf=none (sender IP is ) smtp.mailfrom=gary@garyguo.net; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [2001:630:212:238:3697:f6ff:fe55:55b1] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 289d596c-f20f-40ce-1570-08d6b389ecf2 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(7021145)(8989299)(5600127)(711020)(4605104)(4534185)(7022145)(4603075)(4627221)(201702281549075)(8990200)(7048125)(7024125)(7027125)(7023125)(2017052603328)(7153060)(7193020);SRVR:LO2P265MB1710; x-ms-traffictypediagnostic: LO2P265MB1710: x-ms-exchange-purlcount: 1 x-microsoft-antispam-prvs: x-forefront-prvs: 0990C54589 x-forefront-antispam-report: SFV:NSPM;SFS:(10019020)(376002)(396003)(136003)(346002)(366004)(39830400003)(55674003)(189003)(199004)(86362001)(97736004)(68736007)(6436002)(31686004)(6916009)(508600001)(46003)(6306002)(446003)(11346002)(476003)(14444005)(486006)(256004)(81166006)(8676002)(6486002)(81156014)(7416002)(4326008)(2616005)(6512007)(7736002)(305945005)(106356001)(5660300002)(105586002)(30864003)(2906002)(6116002)(229853002)(8936002)(966005)(25786009)(31696002)(316002)(186003)(53946003)(54906003)(6506007)(386003)(53546011)(53936002)(52116002)(71200400001)(76176011)(102836004)(99286004)(6246003)(36756003)(71190400001)(14454004);DIR:OUT;SFP:1102;SCL:1;SRVR:LO2P265MB1710;H:LO2P265MB0847.GBRP265.PROD.OUTLOOK.COM;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; received-spf: None (protection.outlook.com: garyguo.net does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: 5lEyARnaKsHX1pKZUMTsi4fZPhhnXirg1DlzY6LXGMwga0uatSpuBrWxjWxlZrLSTiijK2pS61SUtuVOSfvvrpEFv1vGgWsZY3g8zg2C4NnLFS4qdwaiwm6di0wJI34XR9tEIuJmH46DmdU+GyAPfqAu9AKC4+RYOo3WdgLQKvPp7uKZHey/Zx10G1TvEhIyHmuXVFjIfg3pzwrxemhHA8EhlR747hcXtcsfOyJSP5W/z7cFKIjhJvFtCnSGYZuz3lKcQC3SE5wXWat4AoC1Qhh02W/ZRAAl329p1GMiIwVRDEDFX1CHAsMsUdIs+KN5C0xL9ZBhtZ44p2a0xtWlv0lp6R8RTND4uABzhdZn6pNBdFWyKbv3GrFitn4Orp9v5vjSaI9dgn1iqmDZa6NSSdEjfTDwWkDGzC7r9F7XfWY= Content-Type: text/plain; charset="utf-8" Content-ID: <895CA4AAF4391A48AE2261C0E36ECE82@GBRP265.PROD.OUTLOOK.COM> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: garyguo.net X-MS-Exchange-CrossTenant-Network-Message-Id: 289d596c-f20f-40ce-1570-08d6b389ecf2 X-MS-Exchange-CrossTenant-originalarrivaltime: 28 Mar 2019 14:30:28.8614 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: bbc898ad-b10f-4e10-8552-d9377b823d45 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-Transport-CrossTenantHeadersStamped: LO2P265MB1710 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org DQoNCk9uIDI4LzAzLzIwMTkgMTQ6MDksIEFudXAgUGF0ZWwgd3JvdGU6DQo+IE9uIFRodSwgTWFy IDI4LCAyMDE5IGF0IDc6MDcgUE0gR2FyeSBHdW8gPGdhcnlAZ2FyeWd1by5uZXQ+IHdyb3RlOg0K Pj4NCj4+IEhpIEFudXAsDQo+Pg0KPj4gVGhlIGNvZGUgc3RpbGwgZG9lcyBub3QgdXNlIEFTSUQg aW4gVExCIGZsdXNoIHJvdXRpbmVzLiBXaXRob3V0IHRoaXMNCj4+IGFkZGVkIHRoZSBjb2RlIGRv ZXMgbm90IGJvb3Qgb24gc3lzdGVtcyB3aXRoIHRydWUgQVNJRCBzdXBwb3J0Lg0KPiANCj4gQ2Fu IHlvdSBlbGFib3JhdGUgd2h5IGZsdXNoIGJ5IEFTSUQgaXMgbmVlZCBhbmQgZmx1c2hfdGxiX2Fs bCgpIHdpbGwNCj4gbm90IHdvcms/DQogPg0KZmx1c2hfdGxiX2FsbCgpIHdpbGwgd29yaywgYnV0 IG5vdCBmbHVzaF90bGJfbW0sIGZsdXNoX3RsYl9wYWdlLCANCmZsdXNoX3RsYl9yYW5nZS4gV2hl biB3ZSB3YW50IHRvIGZsdXNoIHNvbWV0aGluZyByZWxhdGVkIHRvIGEgTU0gd2UgbmVlZCANCnRv IGdldCBpdHMgQVNJRCBhbmQgU0ZFTkNFIHdpdGggdGhhdCBBU0lELg0KPj4NCj4+IFdlIGFsc28g bmVlZCB0byBjb25zaWRlciB0aGUgY2FzZSBvZiBDT05URVhUSUQgb3ZlcmZsb3cgb24gMzItYml0 DQo+PiBzeXN0ZW1zLiAzMi1iaXQgQ09OVEVYVElEIG1heSBvdmVyZmxvdyBpbiBhIG1vbnRoIHRp bWUuDQo+IA0KPiBPbiAzMmJpdCBzeXN0ZW1zLCB1cHBlciAyNGJpdHMgb2YgQ09OVEVYVElEIHdp bGwgYmUgVkVSU0lPTiBhbmQNCj4gbG93ZXIgOGJpdHMgd2lsbCBiZSBIVyBBU0lELg0KPiANCj4g Q2FuIHlvdSBlbGFib3JhdGUgaG93IGRpZCB5b3UgcmVhY2ggdG8gY29uY2x1c2lvbiB0aGF0IENP TlRFWElEDQo+IHdpbGwgb3ZlcmZsb3cgaW4gYSBtb250aCB0aW1lPw0KPiANCkFzc3VtZSBhIGNh c2Ugd2hlcmUgd2UgaGF2ZSAyNTYgcHJvY2Vzc2VzIHRvIHJ1biwgYW5kIDggY29yZXMsIA0KMl4z Mi8oMjUwSHopLzggPSAyNCBkYXlzLg0KPj4NCj4+IFBsZWFzZSBhbGwgc2VlIG15IGlubGluZSBj b21tZW50cy4NCj4+DQo+PiBCZXN0LA0KPj4gR2FyeQ0KPj4NCj4+IE9uIDI4LzAzLzIwMTkgMDY6 MzIsIEFudXAgUGF0ZWwgd3JvdGU6DQo+Pj4gQ3VycmVudGx5LCB3ZSBkbyBsb2NhbCBUTEIgZmx1 c2ggb24gZXZlcnkgTU0gc3dpdGNoLiBUaGlzIGlzIHZlcnkgaGFyc2gNCj4+PiBvbiBwZXJmb3Jt YW5jZSBiZWNhdXNlIHdlIGFyZSBmb3JjaW5nIHBhZ2UgdGFibGUgd2Fsa3MgYWZ0ZXIgZXZlcnkg TU0NCj4+PiBzd2l0Y2guDQo+Pj4NCj4+PiBUaGlzIHBhdGNoIGltcGxlbWVudHMgQVNJRCBhbGxv Y2F0b3IgZm9yIGFzc2lnbmluZyBhbiBBU0lEIHRvIGV2ZXJ5IE1NDQo+Pj4gY29udGV4dC4gVGhl IG51bWJlciBvZiBBU0lEcyBhcmUgbGltaXRlZCBpbiBIVyBzbyB3ZSBjcmVhdGUgYSBsb2dpY2Fs DQo+Pj4gZW50aXR5IG5hbWVkIENPTlRFWFRJRCBmb3IgYXNzaWduaW5nIHRvIE1NIGNvbnRleHQu IFRoZSBsb3dlciBiaXRzIG9mDQo+Pj4gQ09OVEVYVElEIGFyZSBBU0lEIGFuZCB1cHBlciBiaXRz IGFyZSBWRVJTSU9OIG51bWJlci4gVGhlIG51bWJlciBvZg0KPj4+IHVzYWJsZSBBU0lEIGJpdHMg c3VwcG9ydGVkIGJ5IEhXIGFyZSBkZXRlY3RlZCBhdCBib290LXRpbWUgYnkgd3JpdGluZw0KPj4+ IDFzIHRvIEFTSUQgYml0cyBpbiBTQVRQIENTUi4gVGhpcyBtZWFucyBsYXN0IEFTSUQgaXMgYWx3 YXlzIHJlc2VydmVkDQo+Pj4gYmVjYXVzZSBpdCBpcyB1c2VkIGZvciBpbml0aWFsIE1NIGNvbnRl eHQuDQo+Pj4NCj4+PiBXZSBhbGxvY2F0ZSBuZXcgQ09OVEVYVElEIG9uIGZpcnN0IE1NIHN3aXRj aCBmb3IgYSBNTSBjb250ZXh0IHdoZXJlDQo+Pj4gdGhlIEFTSUQgaXMgYWxsb2NhdGVkIGZyb20g YW4gQVNJRCBiaXRtYXAgYW5kIFZFUlNJT04gaXMgcHJvdmlkZSBieQ0KPj4+IGFuIGF0b21pYyBj b3VudGVyLiBBdCB0aW1lIG9mIGFsbG9jYXRpbmcgbmV3IENPTlRFWFRJRCwgaWYgd2UgcnVuIG91 dA0KPj4+IG9mIGF2YWlsYWJsZSBBU0lEcyB0aGVuOg0KPj4+IDEuIFdlIGZsdXNoIHRoZSBBU0lE IGJpdG1hcA0KPj4+IDIuIEluY3JlbWVudCBjdXJyZW50IFZFUlNJT04gYXRvbWljIGNvdW50ZXIN Cj4+PiAzLiBSZS1hbGxvY2F0ZSBBU0lEIGZyb20gQVNJRCBiaXRtYXANCj4+PiA0LiBGbHVzaCBU TEIgb24gYWxsIENQVXMNCj4+PiA1LiBUcnkgQ09OVEVYVElEIHJlLWFzc2lnbm1lbnQgb24gYWxs IENQVXMNCj4+Pg0KPj4+IFVzaW5nIGFib3ZlIGFwcHJvYWNoLCB3ZSBoYXZlIHZpcnR1YWxseSBp bmZpbml0ZSBDT05URVhUSURzIG9uLXRvcC1vZg0KPj4+IGxpbWl0ZWQgbnVtYmVyIG9mIEhXIEFT SURzLiBUaGlzIGFwcHJvYWNoIGlzIGluc3BpcmVkIGZyb20gQVNJRCBhbGxvY2F0b3INCj4+PiB1 c2VkIGZvciBMaW51eCBBUk0vQVJNNjQgYnV0IHdlIGhhdmUgYWRhcHRlZCBpdCBmb3IgUklTQy1W LiBPdmVyYWxsLA0KPj4+IHRoaXMgQVNJRCBhbGxvY2F0b3IgaGVscHMgdXMgcmVkdWNlIHJhdGUg b2YgbG9jYWwgVExCIGZsdXNoZXMgb24gZXZlcnkNCj4+PiBDUFUgdGhlcmVieSBpbmNyZWFzaW5n IHBlcmZvcm1hbmNlLg0KPj4+DQo+Pj4gVGhpcyBwYXRjaCBpcyB0ZXN0ZWQgb24gUUVNVS92aXJ0 IG1hY2hpbmUgYW5kIFNpRml2ZSBVbmxlYXNoZWQgYm9hcmQuDQo+Pj4gT24gUUVNVS92aXJ0IG1h Y2hpbmUsIHdlIHNlZSAxMCUgKGFwcHJveCkgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgd2l0aA0K Pj4+IFNXIGVtdWxhdGVkIFRMQnMgcHJvdmlkZWQgYnkgUUVNVS4gVW5mb3J0dW5hdGVseSwgQVNJ RCBiaXRzIG9mIFNBVFAgQ1NSDQo+Pj4gYXJlIG5vdCBpbXBsZW1lbnRlZCBvbiBTaUZpdmUgVW5s ZWFzaGVkIGJvYXJkIHNvIHdlIGRvbid0IHNlZSBhbnkgY2hhbmdlDQo+Pj4gaW4gcGVyZm9ybWFu Y2UuDQo+Pj4NCj4+PiBTaWduZWQtb2ZmLWJ5OiBHYXJ5IEd1byA8Z2FyeUBnYXJ5Z3VvLm5ldD4N Cj4+IENvdWxkIHlvdSBhZGQgYSBDby1kZXZlbG9wZWQtYnkgbGluZSBpbiBhZGRpdGlvbiB0byBT aWduZWQtb2ZmLWJ5IGFzDQo+PiB3ZWxsPyBUaGFua3MuDQo+IA0KPiBTdXJlLCBJIHdpbGwgYWRk Lg0KPiANCj4+PiBTaWduZWQtb2ZmLWJ5OiBBbnVwIFBhdGVsIDxhbnVwLnBhdGVsQHdkYy5jb20+ DQo+Pj4gLS0tDQo+Pj4gQ2hhbmdlcyBzaW5jZSB2MToNCj4+PiAtIFdlIGFkYXB0IGdvb2QgYXNw ZWN0cyBmcm9tIEdhcnkgR3VvJ3MgQVNJRCBhbGxvY2F0b3IgaW1wbGVtZW50YXRpb24NCj4+PiAg ICAgYW5kIHByb3ZpZGUgZHVlIGNyZWRpdCB0byBoaW0gYnkgYWRkaW5nIGhpcyBTb0IuDQo+Pj4g LSBUcmFjayBBU0lEcyBhY3RpdmUgZHVyaW5nIGNvbnRleHQgZmx1c2ggYW5kIG1hcmsgdGhlbSBh cyByZXNlcnZlZA0KPj4+IC0gU2V0IEFTSUQgYml0cyB0byBhbGwgMXMgdG8gc2ltcGxpZnkgbnVt YmVyIG9mIEFTSUQgYml0IGRldGVjdGlvbg0KPj4+IC0gVXNlIGF0b21pY19sb25nX3QgaW5zdGVh ZCBvZiBhdG9taWM2NF90IGZvciBiZWluZyAzMmJpdCBmcmllbmRseQ0KPj4+IC0gVXNlIHVuc2ln bmVkIGxvbmcgaW5zdGVhZCBvZiB1NjQgZm9yIGJlaW5nIDMyYml0IGZyaWVuZGx5DQo+Pj4gLSBV c2UgZmx1c2hfdGxiX2FsbCgpIGluc3RlYWQgb2YgbGF6eSBsb2NhbF90bGJfZmx1c2hfYWxsKCkg YXQgdGltZQ0KPj4+ICAgICBvZiBjb250ZXh0IGZsdXNoDQo+Pj4NCj4+PiBUaGlzIHBhdGNoIGlz IGJhc2VkIG9uIExpbnV4LTUuMS1yYzIgYW5kIFRMQiBmbHVzaCBjbGVhbnVwIHBhdGNoZXMgdjQN Cj4+PiBmcm9tIEdhcnkgR3VvLiBJdCBjYW4gYmUgYWxzbyBmb3VuZCBpbiByaXNjdl9hc2lkX2Fs bG9jYXRvcl92MiBicmFuY2gNCj4+PiBvZiBodHRwczovL2dpdGh1Yi5jb20vYXZwYXRlbC9saW51 eC5naXQNCj4+PiAtLS0NCj4+PiAgICBhcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2Nzci5oICAgICAg ICAgfCAgIDYgKw0KPj4+ICAgIGFyY2gvcmlzY3YvaW5jbHVkZS9hc20vbW11LmggICAgICAgICB8 ICAgMSArDQo+Pj4gICAgYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oIHwgICAx ICsNCj4+PiAgICBhcmNoL3Jpc2N2L2tlcm5lbC9oZWFkLlMgICAgICAgICAgICAgfCAgIDIgKw0K Pj4+ICAgIGFyY2gvcmlzY3YvbW0vY29udGV4dC5jICAgICAgICAgICAgICB8IDI0OSArKysrKysr KysrKysrKysrKysrKysrKysrLS0NCj4+PiAgICA1IGZpbGVzIGNoYW5nZWQsIDI0NyBpbnNlcnRp b25zKCspLCAxMiBkZWxldGlvbnMoLSkNCj4+Pg0KPj4+IGRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2 L2luY2x1ZGUvYXNtL2Nzci5oIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9jc3IuaA0KPj4+IGlu ZGV4IDI4YTBkMWNiMzc0Yy4uY2UxOGFiOGY1M2VkIDEwMDY0NA0KPj4+IC0tLSBhL2FyY2gvcmlz Y3YvaW5jbHVkZS9hc20vY3NyLmgNCj4+PiArKysgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2Nz ci5oDQo+Pj4gQEAgLTQ1LDEwICs0NSwxNiBAQA0KPj4+ICAgICNkZWZpbmUgU0FUUF9QUE4gICAg IF9BQygweDAwM0ZGRkZGLCBVTCkNCj4+PiAgICAjZGVmaW5lIFNBVFBfTU9ERV8zMiBfQUMoMHg4 MDAwMDAwMCwgVUwpDQo+Pj4gICAgI2RlZmluZSBTQVRQX01PREUgICAgU0FUUF9NT0RFXzMyDQo+ Pj4gKyNkZWZpbmUgU0FUUF9BU0lEX0JJVFMgICAgICAgOQ0KPj4+ICsjZGVmaW5lIFNBVFBfQVNJ RF9TSElGVCAgICAgIDIyDQo+Pj4gKyNkZWZpbmUgU0FUUF9BU0lEX01BU0sgICAgICAgX0FDKDB4 MUZGLCBVTCkNCj4+PiAgICAjZWxzZQ0KPj4+ICAgICNkZWZpbmUgU0FUUF9QUE4gICAgIF9BQygw eDAwMDAwRkZGRkZGRkZGRkYsIFVMKQ0KPj4+ICAgICNkZWZpbmUgU0FUUF9NT0RFXzM5IF9BQygw eDgwMDAwMDAwMDAwMDAwMDAsIFVMKQ0KPj4+ICAgICNkZWZpbmUgU0FUUF9NT0RFICAgIFNBVFBf TU9ERV8zOQ0KPj4+ICsjZGVmaW5lIFNBVFBfQVNJRF9CSVRTICAgICAgIDE2DQo+Pj4gKyNkZWZp bmUgU0FUUF9BU0lEX1NISUZUICAgICAgNDQNCj4+PiArI2RlZmluZSBTQVRQX0FTSURfTUFTSyAg ICAgICBfQUMoMHhGRkZGLCBVTCkNCj4+PiAgICAjZW5kaWYNCj4+Pg0KPj4+ICAgIC8qIEludGVy cnVwdCBFbmFibGUgYW5kIEludGVycnVwdCBQZW5kaW5nIGZsYWdzICovDQo+Pj4gZGlmZiAtLWdp dCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vbW11LmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNt L21tdS5oDQo+Pj4gaW5kZXggNWRmMmRjY2RiYTEyLi40MmE5Y2EwZmUxZmIgMTAwNjQ0DQo+Pj4g LS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9tbXUuaA0KPj4+ICsrKyBiL2FyY2gvcmlzY3Yv aW5jbHVkZS9hc20vbW11LmgNCj4+PiBAQCAtMTgsNiArMTgsNyBAQA0KPj4+ICAgICNpZm5kZWYg X19BU1NFTUJMWV9fDQo+Pj4NCj4+PiAgICB0eXBlZGVmIHN0cnVjdCB7DQo+Pj4gKyAgICAgYXRv bWljX2xvbmdfdCBpZDsNCj4+PiAgICAgICAgdm9pZCAqdmRzbzsNCj4+PiAgICAjaWZkZWYgQ09O RklHX1NNUA0KPj4+ICAgICAgICAvKiBBIGxvY2FsIGljYWNoZSBmbHVzaCBpcyBuZWVkZWQgYmVm b3JlIHVzZXIgZXhlY3V0aW9uIGNhbiByZXN1bWUuICovDQo+Pj4gZGlmZiAtLWdpdCBhL2FyY2gv cmlzY3YvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20v bW11X2NvbnRleHQuaA0KPj4+IGluZGV4IGJmNGYwOTdhOTA1MS4uYmE2YWIzNWMxOGRjIDEwMDY0 NA0KPj4+IC0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaA0KPj4+ICsr KyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaA0KPj4+IEBAIC0zMCw2ICsz MCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBlbnRlcl9sYXp5X3RsYihzdHJ1Y3QgbW1fc3RydWN0 ICptbSwNCj4+PiAgICBzdGF0aWMgaW5saW5lIGludCBpbml0X25ld19jb250ZXh0KHN0cnVjdCB0 YXNrX3N0cnVjdCAqdGFzaywNCj4+PiAgICAgICAgc3RydWN0IG1tX3N0cnVjdCAqbW0pDQo+Pj4g ICAgew0KPj4+ICsgICAgIGF0b21pY19sb25nX3NldCgmKG1tKS0+Y29udGV4dC5pZCwgMCk7DQo+ PiBQYXJlbnRoZXNpcyBhcm91bmQgbW0gaXNuJ3QgbmVjZXNzYXJ5DQo+IA0KPiBPa2F5LCBJIHdp bGwgdXBkYXRlLg0KPiANCj4+PiAgICAgICAgcmV0dXJuIDA7DQo+Pj4gICAgfQ0KPj4+DQo+Pj4g ZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva2VybmVsL2hlYWQuUyBiL2FyY2gvcmlzY3Yva2VybmVs L2hlYWQuUw0KPj4+IGluZGV4IGZlODg0Y2Q2OWFiZC4uYzNmOWFkYzBkMDU0IDEwMDY0NA0KPj4+ IC0tLSBhL2FyY2gvcmlzY3Yva2VybmVsL2hlYWQuUw0KPj4+ICsrKyBiL2FyY2gvcmlzY3Yva2Vy bmVsL2hlYWQuUw0KPj4+IEBAIC05NSw2ICs5NSw4IEBAIHJlbG9jYXRlOg0KPj4+ICAgICAgICBs YSBhMiwgc3dhcHBlcl9wZ19kaXINCj4+PiAgICAgICAgc3JsIGEyLCBhMiwgUEFHRV9TSElGVA0K Pj4+ICAgICAgICBsaSBhMSwgU0FUUF9NT0RFDQo+Pj4gKyAgICAgbGkgYTAsIChTQVRQX0FTSURf TUFTSyA8PCBTQVRQX0FTSURfU0hJRlQpDQo+Pj4gKyAgICAgb3IgYTEsIGExLCBhMA0KPj4+ICAg ICAgICBvciBhMiwgYTIsIGExDQo+Pj4NCj4+PiAgICAgICAgLyoNCj4+PiBkaWZmIC0tZ2l0IGEv YXJjaC9yaXNjdi9tbS9jb250ZXh0LmMgYi9hcmNoL3Jpc2N2L21tL2NvbnRleHQuYw0KPj4+IGlu ZGV4IDBmNzg3YmNkM2E3YS4uMTIwNWQzM2QxYjFiIDEwMDY0NA0KPj4+IC0tLSBhL2FyY2gvcmlz Y3YvbW0vY29udGV4dC5jDQo+Pj4gKysrIGIvYXJjaC9yaXNjdi9tbS9jb250ZXh0LmMNCj4+PiBA QCAtMiwxMyArMiwyMDkgQEANCj4+PiAgICAvKg0KPj4+ICAgICAqIENvcHlyaWdodCAoQykgMjAx MiBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWENCj4+PiAgICAgKiBDb3B5 cmlnaHQgKEMpIDIwMTcgU2lGaXZlDQo+Pj4gKyAqIENvcHlyaWdodCAoQykgMjAxOSBXZXN0ZXJu IERpZ2l0YWwgQ29ycG9yYXRpb24gb3IgaXRzIGFmZmlsaWF0ZXMuDQo+Pj4gICAgICovDQo+Pj4N Cj4+PiArI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPg0KPj4+ICAgICNpbmNsdWRlIDxsaW51eC9t bS5oPg0KPj4+ICsjaW5jbHVkZSA8bGludXgvc2xhYi5oPg0KPj4+DQo+Pj4gICAgI2luY2x1ZGUg PGFzbS90bGJmbHVzaC5oPg0KPj4+ICAgICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPg0KPj4+ DQo+Pj4gK3N0YXRpYyBib29sIHVzZV9hc2lkX2FsbG9jYXRvcjsNCj4+PiArc3RhdGljIHVuc2ln bmVkIGxvbmcgYXNpZF9iaXRzOw0KPj4+ICtzdGF0aWMgdW5zaWduZWQgbG9uZyBudW1fYXNpZHM7 DQo+Pj4gK3N0YXRpYyB1bnNpZ25lZCBsb25nIGFzaWRfbWFzazsNCj4+PiArc3RhdGljIHVuc2ln bmVkIGxvbmcgZmlyc3RfdmVyc2lvbjsNCj4+PiArDQo+Pj4gK3N0YXRpYyBhdG9taWNfbG9uZ190 IGN1cnJlbnRfdmVyc2lvbjsNCj4+PiArDQo+Pj4gK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NL KGNvbnRleHRfbG9jayk7DQo+Pj4gK3N0YXRpYyB1bnNpZ25lZCBsb25nICpjb250ZXh0X2FzaWRf bWFwOw0KPj4+ICsNCj4+PiArc3RhdGljIERFRklORV9QRVJfQ1BVKGF0b21pY19sb25nX3QsIGFj dGl2ZV9jb250ZXh0KTsNCj4+PiArc3RhdGljIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcs IHJlc2VydmVkX2NvbnRleHQpOw0KPj4+ICsNCj4+PiArc3RhdGljIGJvb2wgY2hlY2tfdXBkYXRl X3Jlc2VydmVkX2NvbnRleHQodW5zaWduZWQgbG9uZyBjbnR4LA0KPj4+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIG5ld2NudHgpDQo+Pj4gK3sN Cj4+PiArICAgICBpbnQgY3B1Ow0KPj4+ICsgICAgIGJvb2wgaGl0ID0gZmFsc2U7DQo+Pj4gKw0K Pj4+ICsgICAgIC8qDQo+Pj4gKyAgICAgICogSXRlcmF0ZSBvdmVyIHRoZSBzZXQgb2YgcmVzZXJ2 ZWQgQ09OVEVYVCBsb29raW5nIGZvciBhIG1hdGNoLg0KPj4+ICsgICAgICAqIElmIHdlIGZpbmQg b25lLCB0aGVuIHdlIGNhbiB1cGRhdGUgb3VyIG1tIHRvIHVzZSBuZXcgQ09OVEVYVA0KPj4+ICsg ICAgICAqIChpLmUuIHRoZSBzYW1lIENPTlRFWFQgaW4gdGhlIGN1cnJlbnRfdmVyc2lvbikgYnV0 IHdlIGNhbid0DQo+Pj4gKyAgICAgICogZXhpdCB0aGUgbG9vcCBlYXJseSwgc2luY2Ugd2UgbmVl ZCB0byBlbnN1cmUgdGhhdCBhbGwgY29waWVzDQo+Pj4gKyAgICAgICogb2YgdGhlIG9sZCBDT05U RVhUIGFyZSB1cGRhdGVkIHRvIHJlZmxlY3QgdGhlIG1tLiBGYWlsdXJlIHRvIGRvDQo+Pj4gKyAg ICAgICogc28gY291bGQgcmVzdWx0IGluIHVzIG1pc3NpbmcgdGhlIHJlc2VydmVkIENPTlRFWFQg aW4gYSBmdXR1cmUNCj4+PiArICAgICAgKiB2ZXJzaW9uLg0KPj4+ICsgICAgICAqLw0KPj4+ICsg ICAgIGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsNCj4+PiArICAgICAgICAgICAgIGlmIChw ZXJfY3B1KHJlc2VydmVkX2NvbnRleHQsIGNwdSkgPT0gY250eCkgew0KPj4+ICsgICAgICAgICAg ICAgICAgICAgICBoaXQgPSB0cnVlOw0KPj4+ICsgICAgICAgICAgICAgICAgICAgICBwZXJfY3B1 KHJlc2VydmVkX2NvbnRleHQsIGNwdSkgPSBuZXdjbnR4Ow0KPj4+ICsgICAgICAgICAgICAgfQ0K Pj4+ICsgICAgIH0NCj4+PiArDQo+Pj4gKyAgICAgcmV0dXJuIGhpdDsNCj4+PiArfQ0KPj4+ICsN Cj4+PiArLyogTm90ZTogbXVzdCBiZSBjYWxsZWQgd2l0aCBjb250ZXh0X2xvY2sgaGVsZCAqLw0K Pj4+ICtzdGF0aWMgdm9pZCBfX2ZsdXNoX2NvbnRleHQodm9pZCkNCj4+PiArew0KPj4+ICsgICAg IGludCBpOw0KPj4+ICsgICAgIHVuc2lnbmVkIGxvbmcgY250eDsNCj4+PiArDQo+Pj4gKyAgICAg LyogVXBkYXRlIHRoZSBsaXN0IG9mIHJlc2VydmVkIEFTSURzIGFuZCB0aGUgQVNJRCBiaXRtYXAu ICovDQo+Pj4gKyAgICAgYml0bWFwX2NsZWFyKGNvbnRleHRfYXNpZF9tYXAsIDAsIG51bV9hc2lk cyk7DQo+Pj4gKw0KPj4+ICsgICAgIC8qIE1hcmsgYWxyZWFkeSBhY2l0dmUgQVNJRHMgYXMgdXNl ZCAqLw0KPj4+ICsgICAgIGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7DQo+Pj4gKyAgICAgICAg ICAgICBjbnR4ID0gYXRvbWljX2xvbmdfeGNoZ19yZWxheGVkKCZwZXJfY3B1KGFjdGl2ZV9jb250 ZXh0LCBpKSwgMCk7DQo+Pj4gKyAgICAgICAgICAgICAvKg0KPj4+ICsgICAgICAgICAgICAgICog SWYgdGhpcyBDUFUgaGFzIGFscmVhZHkgYmVlbiB0aHJvdWdoIGEgcm9sbG92ZXIsIGJ1dA0KPj4+ ICsgICAgICAgICAgICAgICogaGFzbid0IHJ1biBhbm90aGVyIHRhc2sgaW4gdGhlIG1lYW50aW1l LCB3ZSBtdXN0IHByZXNlcnZlDQo+Pj4gKyAgICAgICAgICAgICAgKiBpdHMgcmVzZXJ2ZWQgQ09O VEVYVCwgYXMgdGhpcyBpcyB0aGUgb25seSB0cmFjZSB3ZSBoYXZlIG9mDQo+Pj4gKyAgICAgICAg ICAgICAgKiB0aGUgcHJvY2VzcyBpdCBpcyBzdGlsbCBydW5uaW5nLg0KPj4+ICsgICAgICAgICAg ICAgICovDQo+Pj4gKyAgICAgICAgICAgICBpZiAoY250eCA9PSAwKQ0KPj4+ICsgICAgICAgICAg ICAgICAgICAgICBjbnR4ID0gcGVyX2NwdShyZXNlcnZlZF9jb250ZXh0LCBpKTsNCj4+PiArDQo+ Pj4gKyAgICAgICAgICAgICBfX3NldF9iaXQoY250eCAmIGFzaWRfbWFzaywgY29udGV4dF9hc2lk X21hcCk7DQo+Pj4gKyAgICAgICAgICAgICBwZXJfY3B1KHJlc2VydmVkX2NvbnRleHQsIGkpID0g Y250eDsNCj4+PiArICAgICB9DQo+Pj4gKw0KPj4+ICsgICAgIC8qIE1hcmsgbGFzdCBBU0lEIGFz IHVzZWQgYmVjYXVzZSBpdCBpcyB1c2VkIGF0IGJvb3QtdGltZSAqLw0KPj4+ICsgICAgIF9fc2V0 X2JpdChhc2lkX21hc2ssIGNvbnRleHRfYXNpZF9tYXApOw0KPj4gTG9va3MgdW5uZWNlc3Nhcnkg YXMgd2UgYWx3YXlzIHN0YXJ0IGZpbmRfbmV4dF96ZXJvX2JpdCBmcm9tIGlkeCAxLg0KPiANCj4g VGhpcyBpcyB0byBlbnN1cmUgdGhhdCB3ZSBuZXZlciB1c2UgbGFzdCBBU0lEID4NClVoLCBzb3Jy eS4gSSBtaXNyZWFkLiBCdXQgd2Ugc3VyZWx5IGNhbiB1c2UgdGhlIGxhc3QgQVNJRCBhZnRlciB0 aGUgDQpmaXJzdCByb2xsb3Zlcj8NCj4+PiArfSA+Pj4gKw0KPj4+ICsvKiBOb3RlOiBtdXN0IGJl IGNhbGxlZCB3aXRoIGNvbnRleHRfbG9jayBoZWxkICovDQo+Pj4gK3N0YXRpYyB1bnNpZ25lZCBs b25nIF9fbmV3X2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqbW0sDQo+Pj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYm9vbCAqbmVlZF90bGJfZmx1c2gpDQo+Pj4gK3sNCj4+PiAr ICAgICBzdGF0aWMgdTMyIGN1cl9pZHggPSAxOw0KPj4+ICsgICAgIHVuc2lnbmVkIGxvbmcgY250 eCA9IGF0b21pY19sb25nX3JlYWQoJm1tLT5jb250ZXh0LmlkKTsNCj4+PiArICAgICB1bnNpZ25l ZCBsb25nIGFzaWQsIHZlciA9IGF0b21pY19sb25nX3JlYWQoJmN1cnJlbnRfdmVyc2lvbik7DQo+ Pj4gKw0KPj4+ICsgICAgIGlmIChjbnR4ICE9IDApIHsNCj4+PiArICAgICAgICAgICAgIHVuc2ln bmVkIGxvbmcgbmV3Y250eCA9IHZlciB8IChjbnR4ICYgfmFzaWRfbWFzayk7DQo+PiBTaG91bGRu J3QgdGhpcyBiZSBjbnR4ICYgYXNpZF9tYXNrID8NCj4gDQo+IEFoaCwgdHlwby4gVGhhbmtzIGZv ciBjYXRjaGluZy4NCj4gDQo+Pj4gKw0KPj4+ICsgICAgICAgICAgICAgLyoNCj4+PiArICAgICAg ICAgICAgICAqIElmIG91ciBjdXJyZW50IENPTlRFWFQgd2FzIGFjdGl2ZSBkdXJpbmcgYSByb2xs b3Zlciwgd2UNCj4+PiArICAgICAgICAgICAgICAqIGNhbiBjb250aW51ZSB0byB1c2UgaXQgYW5k IHRoaXMgd2FzIGp1c3QgYSBmYWxzZSBhbGFybS4NCj4+PiArICAgICAgICAgICAgICAqLw0KPj4+ ICsgICAgICAgICAgICAgaWYgKGNoZWNrX3VwZGF0ZV9yZXNlcnZlZF9jb250ZXh0KGNudHgsIG5l d2NudHgpKQ0KPj4+ICsgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3Y250eDsNCj4+PiAr DQo+Pj4gKyAgICAgICAgICAgICAvKg0KPj4+ICsgICAgICAgICAgICAgICogV2UgaGFkIGEgdmFs aWQgQ09OVEVYVCBpbiBhIHByZXZpb3VzIGxpZmUsIHNvIHRyeSB0bw0KPj4+ICsgICAgICAgICAg ICAgICogcmUtdXNlIGl0IGlmIHBvc3NpYmxlLg0KPj4+ICsgICAgICAgICAgICAgICovDQo+Pj4g KyAgICAgICAgICAgICBpZiAoIV9fdGVzdF9hbmRfc2V0X2JpdChjbnR4ICYgYXNpZF9tYXNrLCBj b250ZXh0X2FzaWRfbWFwKSkNCj4+PiArICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ld2Nu dHg7DQo+Pj4gKyAgICAgfQ0KPj4+ICsNCj4+PiArICAgICAvKg0KPj4+ICsgICAgICAqIEFsbG9j YXRlIGEgZnJlZSBBU0lELiBJZiB3ZSBjYW4ndCBmaW5kIG9uZSB0aGVuIGluY3JlbWVudA0KPj4+ ICsgICAgICAqIGN1cnJlbnRfdmVyc2lvbiBhbmQgZmx1c2ggYWxsIEFTSURzLg0KPj4+ICsgICAg ICAqLw0KPj4+ICsgICAgIGFzaWQgPSBmaW5kX25leHRfemVyb19iaXQoY29udGV4dF9hc2lkX21h cCwgbnVtX2FzaWRzLCBjdXJfaWR4KTsNCj4+PiArICAgICBpZiAoYXNpZCAhPSBudW1fYXNpZHMp DQo+Pj4gKyAgICAgICAgICAgICBnb3RvIHNldF9hc2lkOw0KPj4+ICsNCj4+PiArICAgICAvKiBX ZSdyZSBvdXQgb2YgQVNJRHMsIHNvIGluY3JlbWVudCBjdXJyZW50X3ZlcnNpb24gKi8NCj4+PiAr ICAgICB2ZXIgPSBhdG9taWNfbG9uZ19hZGRfcmV0dXJuX3JlbGF4ZWQoZmlyc3RfdmVyc2lvbiwg JmN1cnJlbnRfdmVyc2lvbik7DQo+Pj4gKw0KPj4+ICsgICAgIC8qIEZsdXNoIGV2ZXJ5dGhpbmcg ICovDQo+Pj4gKyAgICAgX19mbHVzaF9jb250ZXh0KCk7DQo+Pj4gKyAgICAgKm5lZWRfdGxiX2Zs dXNoID0gdHJ1ZTsNCj4+PiArDQo+Pj4gKyAgICAgLyogV2UgaGF2ZSBtb3JlIEFTSURzIHRoYW4g Q1BVcywgc28gdGhpcyB3aWxsIGFsd2F5cyBzdWNjZWVkICovDQo+Pj4gKyAgICAgYXNpZCA9IGZp bmRfbmV4dF96ZXJvX2JpdChjb250ZXh0X2FzaWRfbWFwLCBudW1fYXNpZHMsIDEpOw0KPj4+ICsN Cj4+PiArc2V0X2FzaWQ6DQo+Pj4gKyAgICAgX19zZXRfYml0KGFzaWQsIGNvbnRleHRfYXNpZF9t YXApOw0KPj4+ICsgICAgIGN1cl9pZHggPSBhc2lkOw0KPj4+ICsgICAgIHJldHVybiBhc2lkIHwg dmVyOw0KPj4+ICt9DQo+Pj4gKw0KPj4+ICtzdGF0aWMgdm9pZCBzZXRfbW1fYXNpZChzdHJ1Y3Qg bW1fc3RydWN0ICptbSwgdW5zaWduZWQgaW50IGNwdSkNCj4+PiArew0KPj4+ICsgICAgIHVuc2ln bmVkIGxvbmcgZmxhZ3M7DQo+Pj4gKyAgICAgYm9vbCBuZWVkX3RsYl9mbHVzaCA9IGZhbHNlOw0K Pj4+ICsgICAgIHVuc2lnbmVkIGxvbmcgY250eCwgb2xkX2FjdGl2ZV9jbnR4Ow0KPj4+ICsNCj4+ PiArICAgICBjbnR4ID0gYXRvbWljX2xvbmdfcmVhZCgmbW0tPmNvbnRleHQuaWQpOw0KPj4+ICsN Cj4+PiArICAgICAvKg0KPj4+ICsgICAgICAqIElmIG91ciBhY3RpdmVfY29udGV4dCBpcyBub24t emVybyBhbmQgdGhlIGNvbnRleHQgbWF0Y2hlcyB0aGUNCj4+PiArICAgICAgKiBjdXJyZW50X3Zl cnNpb24sIHRoZW4gd2UgdXBkYXRlIHRoZSBhY3RpdmVfY29udGV4dCBlbnRyeSB3aXRoIGENCj4+ PiArICAgICAgKiByZWxheGVkIGNtcHhjaGcuDQo+Pj4gKyAgICAgICoNCj4+PiArICAgICAgKiBG b2xsb3dpbmcgaXMgaG93IHdlIGhhbmRsZSByYWNpbmcgd2l0aCBhIGNvbmN1cnJlbnQgcm9sbG92 ZXI6DQo+Pj4gKyAgICAgICoNCj4+PiArICAgICAgKiAtIFdlIGdldCBhIHplcm8gYmFjayBmcm9t IHRoZSBjbXB4Y2hnIGFuZCBlbmQgdXAgd2FpdGluZyBvbiB0aGUNCj4+PiArICAgICAgKiAgIGxv Y2suIFRha2luZyB0aGUgbG9jayBzeW5jaHJvbmlzZXMgd2l0aCB0aGUgcm9sbG92ZXIgYW5kIHNv DQo+Pj4gKyAgICAgICogICB3ZSBhcmUgZm9yY2VkIHRvIHNlZSB0aGUgdXBkYXRlZCB2ZXJpb24u DQo+Pj4gKyAgICAgICoNCj4+PiArICAgICAgKiAtIFdlIGdldCBhIHZhbGlkIGNvbnRleHQgYmFj ayBmcm9tIHRoZSBjbXB4Y2hnIHRoZW4gd2UgY29udGludWUNCj4+PiArICAgICAgKiAgIHVzaW5n IG9sZCBBU0lEIGJlY2F1c2UgX19mbHVzaF9jb250ZXh0KCkgd291bGQgaGF2ZSBtYXJrZWQgQVNJ RA0KPj4+ICsgICAgICAqICAgb2YgYWN0aXZlX2NvbnRleHQgYXMgdXNlZCBhbmQgbmV4dCBjb250 ZXh0IHN3aXRjaCB3ZSB3aWxsIGFsbG9jYXRlDQo+Pj4gKyAgICAgICogICBuZXcgY29udGV4dC4N Cj4+PiArICAgICAgKi8NCj4+PiArICAgICBvbGRfYWN0aXZlX2NudHggPSBhdG9taWNfbG9uZ19y ZWFkKCZwZXJfY3B1KGFjdGl2ZV9jb250ZXh0LCBjcHUpKTsNCj4+PiArICAgICBpZiAob2xkX2Fj dGl2ZV9jbnR4ICYmDQo+Pj4gKyAgICAgICAgICEoKGNudHggXiBhdG9taWNfbG9uZ19yZWFkKCZj dXJyZW50X3ZlcnNpb24pKSA+PiBhc2lkX2JpdHMpICYmDQo+PiBUaGlzIGxvb2tzIGhhcmQgdG8g cmVhZC4gUHJvYmFibHkNCj4+IChjbnR4ICZ+IGFzaWRfbWFzaykgPT0gYXRvbWljX2xvbmdfcmVh ZCgmY3VycmVudF92ZXJzaW9uKQ0KPj4gaXMgY2xlYXJlci4NCj4gDQo+IE5vIGlzc3VlcywgSSBh bSBmaW5lIHdpdGggZWl0aGVyIHdheS4gSSB3aWxsIHVwZGF0ZS4NCj4gDQo+Pj4gKyAgICAgICAg IGF0b21pY19sb25nX2NtcHhjaGdfcmVsYXhlZCgmcGVyX2NwdShhY3RpdmVfY29udGV4dCwgY3B1 KSwNCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZF9hY3RpdmVf Y250eCwgY250eCkpDQo+Pj4gKyAgICAgICAgICAgICBnb3RvIHN3aXRjaF9tbV9mYXN0Ow0KPj4+ ICsNCj4+PiArICAgICByYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmNvbnRleHRfbG9jaywgZmxhZ3Mp Ow0KPj4gQW55IHJlYXNvbiB0aGF0IHdlIHByZWZlciByYXdfIGhlcmU/DQo+Pj4gKw0KPj4+ICsg ICAgIC8qIENoZWNrIHRoYXQgb3VyIEFTSUQgYmVsb25ncyB0byB0aGUgY3VycmVudF92ZXJzaW9u LiAqLw0KPj4+ICsgICAgIGNudHggPSBhdG9taWNfbG9uZ19yZWFkKCZtbS0+Y29udGV4dC5pZCk7 DQo+Pj4gKyAgICAgaWYgKChjbnR4IF4gYXRvbWljX2xvbmdfcmVhZCgmY3VycmVudF92ZXJzaW9u KSkgPj4gYXNpZF9iaXRzKSB7DQo+PiBTYW1lIGFzIGFib3ZlLCBwcm9iYWJseQ0KPj4gKGNudHgg Jn4gYXNpZF9tYXNrKSAhPSBhdG9taWNfbG9uZ19yZWFkKCZjdXJyZW50X3ZlcnNpb24pDQo+PiBt YWtlcyBtb3JlIHNlbnNlLg0KPj4+ICsgICAgICAgICAgICAgY250eCA9IF9fbmV3X2NvbnRleHQo bW0sICZuZWVkX3RsYl9mbHVzaCk7DQo+Pj4gKyAgICAgICAgICAgICBhdG9taWNfbG9uZ19zZXQo Jm1tLT5jb250ZXh0LmlkLCBjbnR4KTsNCj4+PiArICAgICB9DQo+Pj4gKw0KPj4+ICsgICAgIGF0 b21pY19sb25nX3NldCgmcGVyX2NwdShhY3RpdmVfY29udGV4dCwgY3B1KSwgY250eCk7DQo+Pj4g Kw0KPj4+ICsgICAgIHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb250ZXh0X2xvY2ssIGZs YWdzKTsNCj4+PiArDQo+Pj4gK3N3aXRjaF9tbV9mYXN0Og0KPj4+ICsgICAgIC8qDQo+Pj4gKyAg ICAgICogVXNlIHRoZSBvbGQgc3BidHIgbmFtZSBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBjdXJyZW50 IHNhdHANCj4+PiArICAgICAgKiBuYW1lIHRvIHN1cHBvcnQgYmludXRpbHMgMi4yOSB3aGljaCBk b2Vzbid0IGtub3cgYWJvdXQgdGhlDQo+Pj4gKyAgICAgICogcHJpdmlsZWdlZCBJU0EgMS4xMCB5 ZXQuDQo+Pj4gKyAgICAgICovDQo+Pj4gKyAgICAgY3NyX3dyaXRlKHNwdGJyLCB2aXJ0X3RvX3Bm bihtbS0+cGdkKSB8DQo+Pj4gKyAgICAgICAgICAgICAgICgoY250eCAmIGFzaWRfbWFzaykgPDwg U0FUUF9BU0lEX1NISUZUKSB8DQo+Pj4gKyAgICAgICAgICAgICAgIFNBVFBfTU9ERSk7DQo+Pj4g Kw0KPj4+ICsgICAgIGlmIChuZWVkX3RsYl9mbHVzaCkNCj4+PiArICAgICAgICAgICAgIGZsdXNo X3RsYl9hbGwoKTsNCj4+IEkgdGhpbmsgeW91ciBpbnRlbnRpb24gaGVyZSBpcyB0byBhdm9pZCBj YWxsaW5nIGZsdXNoX3RsYl9hbGwgd2hlbiBJUlFzDQo+PiBhcmUgb2ZmIGluIHRoZSBjcml0aWNh bCByZWdpb24uIEhvd2V2ZXIsIHN3aXRjaF9tbSB3aWxsIGJlIGNhbGxlZCBmcm9tDQo+PiBzY2hl ZHVsZXIgYXMgd2VsbCB3aGljaCBhbHNvIHR1cm4gaXJxcyBvZmYsIHNvIHRoaXMgc3RpbGwgY2F1 c2UgaXNzdWUuIEkNCj4+IHRoaW5rIGEgYmV0dGVyIHdheSBpcyB0byBmb3JjZSBmbHVzaF90bGJf YWxsIHRvIHVzZSBTQkkgd2hlbiBJUlFzIGFyZQ0KPj4gb2ZmLiBXaGF0IGRvIHlvdSB0aGluaz8N Cj4gDQo+IFdlIGFyZSBzdGlsbCB3YWl0aW5nIGZvciBPcGVuU0JJIHRvIHByb3ZpZGUgY29tcGxl dGUgaW1wbGVtZW50YXRpb24uDQo+IA0KPiBJIGFncmVlIHRoYXQgd2Ugc2hvdWxkIHByZWZlciBT QkkgYmFzZWQgcmVtb3RlIFRMQiBmbHVzaCBhbGwgaGVyZS4gTGV0J3MNCj4gd2FpdCBmb3IgbW9y ZSBjb21tZW50cy4NCj4gDQpJIHByZWZlciBTQkkgYXMgd2VsbC4gQ2FuIHlvdSByZW9wZW4gT3Bl blNCSSBpc3N1ZSAjODcgdG8gdHJhY2sgdGhlIA0KcHJvZ3Jlc3MgdW50aWwgd2UgY2FuIHByb3Bl ciBoYW5kbGUgcmFjZSBjb25kaXRpb25zIGluIE9wZW5TQkk/IE9uY2UgDQp0aGF0J3MgY29tcGxl dGVkIEknbGwgZHJvcCB0aGUgSVBJIHBhdGNoIGFuZCB3ZSBjYW4gc2FmZWx5IGRvIA0KZmx1c2hf dGxiX2FsbCB3aXRoaW4gX19mbHVzaF9jb250ZXh0Lg0KPj4+ICt9DQo+Pj4gKw0KPj4+ICtzdGF0 aWMgdm9pZCBzZXRfbW1fbm9hc2lkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQ0KPj4+ICt7DQo+Pj4g KyAgICAgLyoNCj4+PiArICAgICAgKiBVc2UgdGhlIG9sZCBzcGJ0ciBuYW1lIGluc3RlYWQgb2Yg dXNpbmcgdGhlIGN1cnJlbnQgc2F0cA0KPj4+ICsgICAgICAqIG5hbWUgdG8gc3VwcG9ydCBiaW51 dGlscyAyLjI5IHdoaWNoIGRvZXNuJ3Qga25vdyBhYm91dCB0aGUNCj4+PiArICAgICAgKiBwcml2 aWxlZ2VkIElTQSAxLjEwIHlldC4NCj4+PiArICAgICAgKi8NCj4+PiArICAgICBjc3Jfd3JpdGUo c3B0YnIsIHZpcnRfdG9fcGZuKG1tLT5wZ2QpIHwgU0FUUF9NT0RFKTsNCj4+PiArDQo+Pj4gKyAg ICAgLyoNCj4+PiArICAgICAgKiBzZmVuY2Uudm1hIGFmdGVyIFNBVFAgd3JpdGUuIFdlIGNhbGwg aXQgb24gTU0gY29udGV4dCBpbnN0ZWFkIG9mDQo+Pj4gKyAgICAgICogY2FsbGluZyBsb2NhbF9m bHVzaF90bGJfYWxsIHRvIHByZXZlbnQgZ2xvYmFsIG1hcHBpbmdzIGZyb20gYmVpbmcNCj4+PiAr ICAgICAgKiBhZmZlY3RlZC4NCj4+PiArICAgICAgKi8NCj4+PiArICAgICBsb2NhbF9mbHVzaF90 bGJfbW0obW0pOw0KPj4+ICt9DQo+Pj4gKw0KPj4+ICAgIC8qDQo+Pj4gICAgICogV2hlbiBuZWNl c3NhcnksIHBlcmZvcm1zIGEgZGVmZXJyZWQgaWNhY2hlIGZsdXNoIGZvciB0aGUgZ2l2ZW4gTU0g Y29udGV4dCwNCj4+PiAgICAgKiBvbiB0aGUgbG9jYWwgQ1BVLiAgUklTQy1WIGhhcyBubyBkaXJl Y3QgbWVjaGFuaXNtIGZvciBpbnN0cnVjdGlvbiBjYWNoZQ0KPj4+IEBAIC01OCwyMCArMjU0LDQ5 IEBAIHZvaWQgc3dpdGNoX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKnByZXYsIHN0cnVjdCBtbV9zdHJ1 Y3QgKm5leHQsDQo+Pj4gICAgICAgIGNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgbW1fY3B1bWFzayhw cmV2KSk7DQo+Pj4gICAgICAgIGNwdW1hc2tfc2V0X2NwdShjcHUsIG1tX2NwdW1hc2sobmV4dCkp Ow0KPj4+DQo+Pj4gLSAgICAgLyoNCj4+PiAtICAgICAgKiBVc2UgdGhlIG9sZCBzcGJ0ciBuYW1l IGluc3RlYWQgb2YgdXNpbmcgdGhlIGN1cnJlbnQgc2F0cA0KPj4+IC0gICAgICAqIG5hbWUgdG8g c3VwcG9ydCBiaW51dGlscyAyLjI5IHdoaWNoIGRvZXNuJ3Qga25vdyBhYm91dCB0aGUNCj4+PiAt ICAgICAgKiBwcml2aWxlZ2VkIElTQSAxLjEwIHlldC4NCj4+PiAtICAgICAgKi8NCj4+PiAtICAg ICBjc3Jfd3JpdGUoc3B0YnIsIHZpcnRfdG9fcGZuKG5leHQtPnBnZCkgfCBTQVRQX01PREUpOw0K Pj4+ICsgICAgIGlmICh1c2VfYXNpZF9hbGxvY2F0b3IpDQo+Pj4gKyAgICAgICAgICAgICBzZXRf bW1fYXNpZChuZXh0LCBjcHUpOw0KPj4+ICsgICAgIGVsc2UNCj4+PiArICAgICAgICAgICAgIHNl dF9tbV9ub2FzaWQobmV4dCk7DQo+Pj4gKw0KPj4+ICsgICAgIGZsdXNoX2ljYWNoZV9kZWZlcnJl ZChuZXh0KTsNCj4+PiArfQ0KPj4+ICsNCj4+PiArc3RhdGljIGludCBhc2lkc19pbml0KHZvaWQp DQo+Pj4gK3sNCj4+PiArICAgICAvKiBGaWd1cmUtb3V0IG51bWJlciBvZiBBU0lEIGJpdHMgaW4g SFcgKi8NCj4+PiArICAgICBhc2lkX2JpdHMgPSAoY3NyX3JlYWQoc3B0YnIpID4+IFNBVFBfQVNJ RF9TSElGVCkgJiBTQVRQX0FTSURfTUFTSzsNCj4+PiArICAgICBhc2lkX2JpdHMgPSBmbHNfbG9u Zyhhc2lkX2JpdHMpOw0KPj4+ICsNCj4+PiArICAgICAvKiBQcmUtY29tcHV0ZSBBU0lEIGRldGFp bHMgKi8NCj4+PiArICAgICBudW1fYXNpZHMgPSAxIDw8IGFzaWRfYml0czsNCj4+PiArICAgICBh c2lkX21hc2sgPSBudW1fYXNpZHMgLSAxOw0KPj4+ICsgICAgIGZpcnN0X3ZlcnNpb24gPSBudW1f YXNpZHM7DQo+PiBJcyB0aGVyZSBhbnkgcmVhc29uIHdlIHdhbnQgdG8gaGF2ZSB0d28gc2V0LW9u Y2UgdmFyaWFibGVzIHdpdGggc2FtZSB2YWx1ZT8NCj4gDQo+IFlhcCwgImZpcnN0X3ZlcnNpb24i IGxvb2tzIHJlZHVuZGFudC4gSSB3aWxsIHVwZGF0ZS4NCj4gDQo+Pj4NCj4+PiAgICAgICAgLyoN Cj4+PiAtICAgICAgKiBzZmVuY2Uudm1hIGFmdGVyIFNBVFAgd3JpdGUuIFdlIGNhbGwgaXQgb24g TU0gY29udGV4dCBpbnN0ZWFkIG9mDQo+Pj4gLSAgICAgICogY2FsbGluZyBsb2NhbF9mbHVzaF90 bGJfYWxsIHRvIHByZXZlbnQgZ2xvYmFsIG1hcHBpbmdzIGZyb20gYmVpbmcNCj4+PiAtICAgICAg KiBhZmZlY3RlZC4NCj4+PiArICAgICAgKiBVc2UgQVNJRCBhbGxvY2F0b3Igb25seSBpZiBudW1i ZXIgb2YgSFcgQVNJRHMgYXJlDQo+Pj4gKyAgICAgICogYXQtbGVhc3QgdHdpY2UgbW9yZSB0aGFu IENQVXMNCj4+PiAgICAgICAgICovDQo+Pj4gLSAgICAgbG9jYWxfZmx1c2hfdGxiX21tKG5leHQp Ow0KPj4+ICsgICAgIHVzZV9hc2lkX2FsbG9jYXRvciA9DQo+Pj4gKyAgICAgICAgICAgICAobnVt X2FzaWRzIDw9ICgyICogbnVtX3Bvc3NpYmxlX2NwdXMoKSkpID8gZmFsc2UgOiB0cnVlOw0KPj4+ DQo+Pj4gLSAgICAgZmx1c2hfaWNhY2hlX2RlZmVycmVkKG5leHQpOw0KPj4+IC19DQo+Pj4gKyAg ICAgLyogU2V0dXAgQVNJRCBhbGxvY2F0b3IgaWYgYXZhaWxhYmxlICovDQo+Pj4gKyAgICAgaWYg KHVzZV9hc2lkX2FsbG9jYXRvcikgew0KPj4+ICsgICAgICAgICAgICAgYXRvbWljX2xvbmdfc2V0 KCZjdXJyZW50X3ZlcnNpb24sIGZpcnN0X3ZlcnNpb24pOw0KPj4+DQo+Pj4gKyAgICAgICAgICAg ICBjb250ZXh0X2FzaWRfbWFwID0ga2NhbGxvYyhCSVRTX1RPX0xPTkdTKG51bV9hc2lkcyksDQo+ Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCpjb250ZXh0X2FzaWRf bWFwKSwgR0ZQX0tFUk5FTCk7DQo+Pj4gKyAgICAgICAgICAgICBpZiAoIWNvbnRleHRfYXNpZF9t YXApDQo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIHBhbmljKCJGYWlsZWQgdG8gYWxsb2NhdGUg Yml0bWFwIGZvciAlbHUgQVNJRHNcbiIsDQo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg IG51bV9hc2lkcyk7DQo+Pj4gKw0KPj4+ICsgICAgICAgICAgICAgX19zZXRfYml0KGFzaWRfbWFz aywgY29udGV4dF9hc2lkX21hcCk7DQo+Pj4gKw0KPj4+ICsgICAgICAgICAgICAgcHJfaW5mbygi QVNJRCBhbGxvY2F0b3IgdXNpbmcgJWx1IGVudHJpZXNcbiIsIG51bV9hc2lkcyk7DQo+Pj4gKyAg ICAgfSBlbHNlIHsNCj4+IElmIHdlIGRlY2lkZSBub3QgdG8gdXNlIEFTSUQgYWxsb2NhdG9yLCB3 ZSB3aWxsIG5lZWQgdG8gc2V0IEFTSUQgZmllbGQNCj4+IHRvIHplcm8gb24gKmFsbCBoYXJ0cyog YmVmb3JlIHdlIGRvIG91ciBmaXJzdCBzd2l0Y2hfbW0uIE90aGVyd2lzZSB3ZQ0KPj4gd2lsbCBl bmQgdXAgYSBoYXJ0IHJ1bm5pbmcgbm9uLXplcm8gQVNJRCBhbmQgYW5vdGhlciBydW5uaW5nIHpl cm8gQVNJRA0KPj4gd2l0aCBkaWZmZXJlbnQgcGFnZSB0YWJsZS4NCj4gDQo+IFllcywgSSBzYXcg dGhhdCBpbiB5b3VyIGltcGxlbWVudGF0aW9uIGJ1dCBmb3IgYmV0dGVyIHJlYWRhYmlsaXR5IGFu ZA0KPiBkZWJ1Z2FiaWxpdHkuIEkgaGF2ZSBwcmVzZXJ2ZWQgYXNpZF9iaXRzIHRoYXQgd2UgY29t cHV0ZWQgYW5kIGFkZGVkDQo+IHNlcGFyYXRlIHVzZV9hc2lkX2FsbG9jYXRvciBmbGFnLg0KSSBk aWRuJ3Qgc2F5IEknbSBhZ2FpbnN0IGhhdmluZyB1c2VfYXNpZF9hbGxvY2F0b3IuDQo+IA0KPiBJ biBmdXR1cmUsIEkgcGxhbiB0byBzaG93IGFzaWRfYml0cyBpbiAvcHJvYy9jcHVpbmZvIGFzLXdl bGwuDQo+IA0KPj4+ICsgICAgICAgICAgICAgcHJfaW5mbygiQVNJRCBhbGxvY2F0b3IgZGlzYWJs ZWRcbiIpOw0KPj4+ICsgICAgIH0NCj4+PiArDQo+Pj4gKyAgICAgcmV0dXJuIDA7DQo+Pj4gK30N Cj4+PiArZWFybHlfaW5pdGNhbGwoYXNpZHNfaW5pdCk7DQo+Pj4NCj4gDQo+IFJlZ2FyZHMsDQo+ IEFudXANCj4gDQo=