From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <dev-bounces@dpdk.org>
Received: from dpdk.org (dpdk.org [92.243.14.124])
	by inbox.dpdk.org (Postfix) with ESMTP id 23156A2F63
	for <public@inbox.dpdk.org>; Fri,  4 Oct 2019 08:07:24 +0200 (CEST)
Received: from [92.243.14.124] (localhost [127.0.0.1])
	by dpdk.org (Postfix) with ESMTP id D467E1C1B7;
	Fri,  4 Oct 2019 08:07:22 +0200 (CEST)
Received: from EUR01-DB5-obe.outbound.protection.outlook.com
 (mail-eopbgr150042.outbound.protection.outlook.com [40.107.15.42])
 by dpdk.org (Postfix) with ESMTP id 1B26C1C1B7
 for <dev@dpdk.org>; Fri,  4 Oct 2019 08:07:22 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=KwbabzQpKDZSGOFnQbZAgUvrI2IzyC74f4WyKoOQU9M=;
 b=g+XjyvDmVxi8uQAMKVl5qwV7b0T0qbyQLV2FAkUA/h68RbbuHe+1dswE2y2aJCg3Jx4G0oew9gXEthIAD9238WWtFYJwVDZbI+9IZA/MhyzAZSfIrfZKhWIp0Ie5pj4fmRTbS3FiLYyCLL7n+817HClkteCvnOMbu7XRXykZg2s=
Received: from DB7PR08CA0026.eurprd08.prod.outlook.com (2603:10a6:5:16::39) by
 VE1PR08MB5088.eurprd08.prod.outlook.com (2603:10a6:803:110::30) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2305.20; Fri, 4 Oct
 2019 06:07:18 +0000
Received: from VE1EUR03FT013.eop-EUR03.prod.protection.outlook.com
 (2a01:111:f400:7e09::209) by DB7PR08CA0026.outlook.office365.com
 (2603:10a6:5:16::39) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.2284.20 via Frontend
 Transport; Fri, 4 Oct 2019 06:07:18 +0000
Authentication-Results: spf=temperror (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; dpdk.org; dkim=pass (signature was verified)
 header.d=armh.onmicrosoft.com;dpdk.org; dmarc=none action=none
 header.from=arm.com;
Received-SPF: TempError (protection.outlook.com: error in processing during
 lookup of arm.com: DNS Timeout)
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 VE1EUR03FT013.mail.protection.outlook.com (10.152.19.37) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id
 15.20.2305.15 via Frontend Transport; Fri, 4 Oct 2019 06:07:16 +0000
Received: ("Tessian outbound 0cf06bf5c60e:v33");
 Fri, 04 Oct 2019 06:07:12 +0000
X-CR-MTA-TID: 64aa7808
Received: from 2b1b1782be66.1 (ip-172-16-0-2.eu-west-1.compute.internal
 [104.47.10.54]) by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 99261C0F-7EB7-44A1-8763-1F9F113C82DE.1; 
 Fri, 04 Oct 2019 06:07:07 +0000
Received: from EUR03-DB5-obe.outbound.protection.outlook.com
 (mail-db5eur03lp2054.outbound.protection.outlook.com [104.47.10.54])
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 2b1b1782be66.1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384);
 Fri, 04 Oct 2019 06:07:07 +0000
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=VXhF6zidABqQ7/Y7LZqYrYgz8u5A+auTgAWqfyP0Oxay984mEPRjy0ToHbUrruxhrcoyzjFX26yJdeqV36IhrCtIq4kArvQfDuyLIiRTmIwefJUtcenYw1rWR5E4Jt1c5VBKJypvFEHkVBfbN2KnAdO/QwTItFgi2EgVi6qYBYIQqUbdL6SyLxsM+RYHS+P+On0WtSrCvsVlHc4GDRLC8vr2uTUa+UkikcPRtK2vie3AoCLzKUjkzZJybamcX6uzSpN979tIWh8Gn99bJRtVcxSC7gue4BGaKMBTCChVcIq/0yON3OyCYVihpc9jljDH2Wdwv25JCr7uOIhZnewhcA==
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=KwbabzQpKDZSGOFnQbZAgUvrI2IzyC74f4WyKoOQU9M=;
 b=mSz9Qlf456WpIi51vrlZ1PYE2gtxLnb3sjF7mRqNc0UvkMC8kqYlkdHdGo2vENNMA4pDnz1C8l1GJhY6E7mTJF/oqY/g01o76+M2vJbzCYMiUDCLkHSIUFuvuyOyEi0IosFvJZreIFECQHywS/nCo4ngKaQeBndxet81LFUZQpFip1ohA4msA38NlejJgunNWr4dwvdP1usHpjE6HdxYRLKyeJGy57BtPll1Xa+Zge9S3flwnj3VpAqh5HRYFPPTCEaIb11KlxTCNIKlPkpjMm5ymHZxJ0EODXSSmrHqsJe1WqPWScGxCWPG9axqf9O5rEN9BjH8x6lnS+b2J8Zn9w==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=KwbabzQpKDZSGOFnQbZAgUvrI2IzyC74f4WyKoOQU9M=;
 b=g+XjyvDmVxi8uQAMKVl5qwV7b0T0qbyQLV2FAkUA/h68RbbuHe+1dswE2y2aJCg3Jx4G0oew9gXEthIAD9238WWtFYJwVDZbI+9IZA/MhyzAZSfIrfZKhWIp0Ie5pj4fmRTbS3FiLYyCLL7n+817HClkteCvnOMbu7XRXykZg2s=
Received: from VE1PR08MB5149.eurprd08.prod.outlook.com (20.179.30.27) by
 VE1SPR01MB0007.eurprd08.prod.outlook.com (20.179.193.160) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.2305.20; Fri, 4 Oct 2019 06:07:03 +0000
Received: from VE1PR08MB5149.eurprd08.prod.outlook.com
 ([fe80::8c82:8d9c:c78d:22a6]) by VE1PR08MB5149.eurprd08.prod.outlook.com
 ([fe80::8c82:8d9c:c78d:22a6%7]) with mapi id 15.20.2305.023; Fri, 4 Oct 2019
 06:07:03 +0000
From: Honnappa Nagarahalli <Honnappa.Nagarahalli@arm.com>
To: "Ananyev, Konstantin" <konstantin.ananyev@intel.com>,
 "stephen@networkplumber.org" <stephen@networkplumber.org>,
 "paulmck@linux.ibm.com" <paulmck@linux.ibm.com>
CC: "Wang, Yipeng1" <yipeng1.wang@intel.com>, "Medvedkin, Vladimir"
 <vladimir.medvedkin@intel.com>, "Ruifeng Wang (Arm Technology China)"
 <Ruifeng.Wang@arm.com>, Dharmik Thakkar <Dharmik.Thakkar@arm.com>,
 "dev@dpdk.org" <dev@dpdk.org>, nd <nd@arm.com>, nd <nd@arm.com>, nd
 <nd@arm.com>
Thread-Topic: [PATCH v3 2/3] lib/rcu: add resource reclamation APIs
Thread-Index: AQHVeUhlHoJ4LCRP6EyrG0pYBVGBKKdIZEYQgAB0zICAAHvAMA==
Date: Fri, 4 Oct 2019 06:07:03 +0000
Message-ID: <VE1PR08MB514952903D94B8C4945BBD38989E0@VE1PR08MB5149.eurprd08.prod.outlook.com>
References: <20190906094534.36060-1-ruifeng.wang@arm.com>
 <20191001062917.35578-1-honnappa.nagarahalli@arm.com>
 <20191001062917.35578-3-honnappa.nagarahalli@arm.com>
 <2601191342CEEE43887BDE71AB977258019196FF8E@irsmsx105.ger.corp.intel.com>
 <VE1PR08MB514912CDFC19476AF82B197F989F0@VE1PR08MB5149.eurprd08.prod.outlook.com>
 <2601191342CEEE43887BDE71AB977258019197083A@irsmsx105.ger.corp.intel.com>
In-Reply-To: <2601191342CEEE43887BDE71AB977258019197083A@irsmsx105.ger.corp.intel.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-ts-tracking-id: 39666b32-e9f9-49ec-ab71-4d44331aa0d8.0
x-checkrecipientchecked: true
Authentication-Results-Original: spf=none (sender IP is )
 smtp.mailfrom=Honnappa.Nagarahalli@arm.com; 
x-originating-ip: [217.140.111.135]
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: 2893f110-76d2-4b9d-f7ef-08d748911bba
X-MS-Office365-Filtering-HT: Tenant
X-MS-TrafficTypeDiagnostic: VE1SPR01MB0007:|VE1SPR01MB0007:|VE1PR08MB5088:
x-ms-exchange-transport-forked: True
X-Microsoft-Antispam-PRVS: <VE1PR08MB5088FB2BC2468D8D79395862989E0@VE1PR08MB5088.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
x-ms-oob-tlc-oobclassifiers: OLM:6108;OLM:6108;
x-forefront-prvs: 018093A9B5
X-Forefront-Antispam-Report-Untrusted: SFV:NSPM;
 SFS:(10009020)(4636009)(376002)(366004)(396003)(346002)(136003)(39860400002)(52314003)(199004)(189003)(110136005)(54906003)(316002)(86362001)(8936002)(305945005)(7736002)(55016002)(9686003)(6436002)(66476007)(2906002)(6116002)(66946007)(66556008)(5660300002)(3846002)(71200400001)(71190400001)(52536014)(76116006)(74316002)(64756008)(66446008)(4326008)(446003)(11346002)(14454004)(7696005)(25786009)(486006)(476003)(76176011)(30864003)(229853002)(14444005)(81166006)(81156014)(2501003)(8676002)(102836004)(33656002)(186003)(99286004)(478600001)(26005)(6506007)(2201001)(6246003)(256004)(66066001)(69594002)(559001)(579004)(569006);
 DIR:OUT; SFP:1101; SCL:1; SRVR:VE1SPR01MB0007;
 H:VE1PR08MB5149.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:1; MX:1; 
received-spf: None (protection.outlook.com: arm.com does not designate
 permitted sender hosts)
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original: SdgJrq6nRW8LKJy3gQqVCn9o/jlYBNu7YpPZd7I7lqw6DrI6mKkls5s7ED/BxuOMvsRkTr8ugIoGEje15AAJassM4y1IkDbLD33xvC39Ex0Jz2OKjoOhLq+Ka9Nis96zvILoMx7g+spWDpvWYdShqiFSl0zg+vAWiEnbvWoSC2hTHv9eQP0LbKg+vawz/o3p0bElZHe8FN9+Lbo7UnTx2vt12sPREs6ypNEK8km84hG6vyc73KoZqBN3EbU5FfR+qwrdr3yHJ6e1j57G7hgEPV3Q7x7dKqTSAWzkshwx+WvJxC0OhirgAeeYCFefhdxzVUicAvDTh1zbU1Q2VJSF5P1k4J/hwj2xBHLa9bgI+6fv6annnAODrGHXgXtwSleDfJB11VWY0Nytg9i7lVdUbvbGiMVtvR/hvtv26zbHnfE=
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1SPR01MB0007
Original-Authentication-Results: spf=none (sender IP is )
 smtp.mailfrom=Honnappa.Nagarahalli@arm.com; 
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped: VE1EUR03FT013.eop-EUR03.prod.protection.outlook.com
X-Forefront-Antispam-Report: CIP:63.35.35.123; IPV:CAL; SCL:-1; CTRY:IE;
 EFV:NLI; SFV:NSPM;
 SFS:(10009020)(4636009)(136003)(39860400002)(346002)(376002)(396003)(199004)(189003)(52314003)(22756006)(478600001)(6246003)(8936002)(33656002)(8676002)(6116002)(55016002)(229853002)(81156014)(81166006)(3846002)(26826003)(76130400001)(2906002)(66066001)(70206006)(356004)(70586007)(47776003)(4326008)(9686003)(52536014)(30864003)(7696005)(23676004)(126002)(5660300002)(50466002)(2501003)(2486003)(486006)(2201001)(76176011)(99286004)(11346002)(26005)(186003)(336012)(446003)(102836004)(63350400001)(6506007)(14454004)(14444005)(436003)(36906005)(74316002)(316002)(110136005)(7736002)(305945005)(25786009)(54906003)(86362001)(476003)(69594002);
 DIR:OUT; SFP:1101; SCL:1; SRVR:VE1PR08MB5088;
 H:64aa7808-outbound-1.mta.getcheckrecipient.com; FPR:; SPF:TempError; LANG:en;
 PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com; A:1; MX:1; 
X-MS-Office365-Filtering-Correlation-Id-Prvs: 09fd0b38-a4de-4645-8b76-08d7489113da
NoDisclaimer: True
X-Forefront-PRVS: 018093A9B5
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: RsYsk5E4cxAF6o8VoPoVOiqJutrubZT13sZomFaPVkZ9a9ip6qj0QGk89T4aqKwKKAzxR1dgVdlZ3hrMzvCjQ9UJ3oUPbmeLoTcu/3W9EEgK+wIYzVPAvJ6vxlBHF3J6JmFhtUJWHIcJ6pBfxadDAWueH1+f+Mnyh7Ae9mjSOGeoG3EwckBBWkxp9sfqTfYTf17YCw/RThnSsraexwImq+aT3qakX4avWPoyAf4qOa2eHHs4s+MYG1HRpUvikZuE2w6OfZSV5VTdh0AtNOw+Cip+VoUdlOnn925nS9VJ3NGcSN9CT0plQUeAVTMLos5ahh7eqmu0jt4RMh0hqmPggztPzhWxfMhxB2kuNu6jzQWSBnZBWTbzRHk4NWXjmtwYMG9i15yltLxpTwVGkeIsBqhlXvbMawoqOrhmu71wb7I=
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Oct 2019 06:07:16.7529 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 2893f110-76d2-4b9d-f7ef-08d748911bba
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[63.35.35.123];
 Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR08MB5088
Subject: Re: [dpdk-dev] [PATCH v3 2/3] lib/rcu: add resource reclamation APIs
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: DPDK patches and discussions <dev.dpdk.org>
List-Unsubscribe: <https://mails.dpdk.org/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://mails.dpdk.org/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <https://mails.dpdk.org/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
Errors-To: dev-bounces@dpdk.org
Sender: "dev" <dev-bounces@dpdk.org>

PiANCj4gSGkgSG9ubmFwcGEsDQo+IA0KPiA+ID4gPiBBZGQgcmVzb3VyY2UgcmVjbGFtYXRpb24g
QVBJcyB0byBtYWtlIGl0IHNpbXBsZSBmb3IgYXBwbGljYXRpb25zDQo+ID4gPiA+IGFuZCBsaWJy
YXJpZXMgdG8gaW50ZWdyYXRlIHJ0ZV9yY3UgbGlicmFyeS4NCj4gPiA+ID4NCj4gPiA+ID4gU2ln
bmVkLW9mZi1ieTogSG9ubmFwcGEgTmFnYXJhaGFsbGkgPGhvbm5hcHBhLm5hZ2FyYWhhbGxpQGFy
bS5jb20+DQo+ID4gPiA+IFJldmlld2VkLWJ5OiBPbGEgTGlsamVkaGFsIDxvbGEubGlsamVkaGFs
QGFybS5jb20+DQo+ID4gPiA+IFJldmlld2VkLWJ5OiBSdWlmZW5nIFdhbmcgPHJ1aWZlbmcud2Fu
Z0Bhcm0uY29tPg0KPiA+ID4gPiAtLS0NCj4gPiA+ID4gIGFwcC90ZXN0L3Rlc3RfcmN1X3FzYnIu
YyAgICAgICAgICAgfCAyOTEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0NCj4gPiA+ID4g
IGxpYi9saWJydGVfcmN1L21lc29uLmJ1aWxkICAgICAgICAgfCAgIDIgKw0KPiA+ID4gPiAgbGli
L2xpYnJ0ZV9yY3UvcnRlX3JjdV9xc2JyLmMgICAgICB8IDE4NSArKysrKysrKysrKysrKysrKysN
Cj4gPiA+ID4gIGxpYi9saWJydGVfcmN1L3J0ZV9yY3VfcXNici5oICAgICAgfCAxNjkgKysrKysr
KysrKysrKysrKysNCj4gPiA+ID4gIGxpYi9saWJydGVfcmN1L3J0ZV9yY3VfcXNicl9wdnQuaCAg
fCAgNDYgKysrKysNCj4gPiA+ID4gIGxpYi9saWJydGVfcmN1L3J0ZV9yY3VfdmVyc2lvbi5tYXAg
fCAgIDQgKw0KPiA+ID4gPiAgbGliL21lc29uLmJ1aWxkICAgICAgICAgICAgICAgICAgICB8ICAg
NiArLQ0KPiA+ID4gPiAgNyBmaWxlcyBjaGFuZ2VkLCA3MDAgaW5zZXJ0aW9ucygrKSwgMyBkZWxl
dGlvbnMoLSkgIGNyZWF0ZSBtb2RlDQo+ID4gPiA+IDEwMDY0NCBsaWIvbGlicnRlX3JjdS9ydGVf
cmN1X3FzYnJfcHZ0LmgNCj4gPiA+ID4NCj4gPiA+ID4gZGlmZiAtLWdpdCBhL2xpYi9saWJydGVf
cmN1L3J0ZV9yY3VfcXNici5jDQo+ID4gPiA+IGIvbGliL2xpYnJ0ZV9yY3UvcnRlX3JjdV9xc2Jy
LmMgaW5kZXggY2U3ZjkzZGQzLi43NjgxNGY1MGIgMTAwNjQ0DQo+ID4gPiA+IC0tLSBhL2xpYi9s
aWJydGVfcmN1L3J0ZV9yY3VfcXNici5jDQo+ID4gPiA+ICsrKyBiL2xpYi9saWJydGVfcmN1L3J0
ZV9yY3VfcXNici5jDQo+ID4gPiA+IEBAIC0yMSw2ICsyMSw3IEBADQo+ID4gPiA+ICAjaW5jbHVk
ZSA8cnRlX2Vycm5vLmg+DQo+ID4gPiA+DQo+ID4gPiA+ICAjaW5jbHVkZSAicnRlX3JjdV9xc2Jy
LmgiDQo+ID4gPiA+ICsjaW5jbHVkZSAicnRlX3JjdV9xc2JyX3B2dC5oIg0KPiA+ID4gPg0KPiA+
ID4gPiAgLyogR2V0IHRoZSBtZW1vcnkgc2l6ZSBvZiBRU0JSIHZhcmlhYmxlICovICBzaXplX3Qg
QEAgLTI2Nyw2DQo+ID4gPiA+ICsyNjgsMTkwIEBAIHJ0ZV9yY3VfcXNicl9kdW1wKEZJTEUgKmYs
IHN0cnVjdCBydGVfcmN1X3FzYnIgKnYpDQo+ID4gPiA+ICAJcmV0dXJuIDA7DQo+ID4gPiA+ICB9
DQo+ID4gPiA+DQo+ID4gPiA+ICsvKiBDcmVhdGUgYSBxdWV1ZSB1c2VkIHRvIHN0b3JlIHRoZSBk
YXRhIHN0cnVjdHVyZSBlbGVtZW50cyB0aGF0DQo+ID4gPiA+ICtjYW4NCj4gPiA+ID4gKyAqIGJl
IGZyZWVkIGxhdGVyLiBUaGlzIHF1ZXVlIGlzIHJlZmVycmVkIHRvIGFzICdkZWZlciBxdWV1ZScu
DQo+ID4gPiA+ICsgKi8NCj4gPiA+ID4gK3N0cnVjdCBydGVfcmN1X3FzYnJfZHEgKg0KPiA+ID4g
PiArcnRlX3JjdV9xc2JyX2RxX2NyZWF0ZShjb25zdCBzdHJ1Y3QgcnRlX3JjdV9xc2JyX2RxX3Bh
cmFtZXRlcnMNCj4gPiA+ID4gKypwYXJhbXMpIHsNCj4gPiA+ID4gKwlzdHJ1Y3QgcnRlX3JjdV9x
c2JyX2RxICpkcTsNCj4gPiA+ID4gKwl1aW50MzJfdCBxc19maWZvX3NpemU7DQo+ID4gPiA+ICsN
Cj4gPiA+ID4gKwlpZiAocGFyYW1zID09IE5VTEwgfHwgcGFyYW1zLT5mID09IE5VTEwgfHwNCj4g
PiA+ID4gKwkJcGFyYW1zLT52ID09IE5VTEwgfHwgcGFyYW1zLT5uYW1lID09IE5VTEwgfHwNCj4g
PiA+ID4gKwkJcGFyYW1zLT5zaXplID09IDAgfHwgcGFyYW1zLT5lc2l6ZSA9PSAwIHx8DQo+ID4g
PiA+ICsJCShwYXJhbXMtPmVzaXplICUgOCAhPSAwKSkgew0KPiA+ID4gPiArCQlydGVfbG9nKFJU
RV9MT0dfRVJSLCBydGVfcmN1X2xvZ190eXBlLA0KPiA+ID4gPiArCQkJIiVzKCk6IEludmFsaWQg
aW5wdXQgcGFyYW1ldGVyXG4iLCBfX2Z1bmNfXyk7DQo+ID4gPiA+ICsJCXJ0ZV9lcnJubyA9IEVJ
TlZBTDsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCQlyZXR1cm4gTlVMTDsNCj4gPiA+ID4gKwl9DQo+
ID4gPiA+ICsNCj4gPiA+ID4gKwlkcSA9IHJ0ZV96bWFsbG9jKE5VTEwsDQo+ID4gPiA+ICsJCShz
aXplb2Yoc3RydWN0IHJ0ZV9yY3VfcXNicl9kcSkgKyBwYXJhbXMtPmVzaXplKSwNCj4gPiA+ID4g
KwkJUlRFX0NBQ0hFX0xJTkVfU0laRSk7DQo+ID4gPiA+ICsJaWYgKGRxID09IE5VTEwpIHsNCj4g
PiA+ID4gKwkJcnRlX2Vycm5vID0gRU5PTUVNOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJCXJldHVy
biBOVUxMOw0KPiA+ID4gPiArCX0NCj4gPiA+ID4gKw0KPiA+ID4gPiArCS8qIHJvdW5kIHVwIHFz
X2ZpZm9fc2l6ZSB0byBuZXh0IHBvd2VyIG9mIHR3byB0aGF0IGlzIG5vdCBsZXNzIHRoYW4NCj4g
PiA+ID4gKwkgKiBtYXhfc2l6ZS4NCj4gPiA+ID4gKwkgKi8NCj4gPiA+ID4gKwlxc19maWZvX3Np
emUgPSBydGVfYWxpZ24zMnBvdzIoKCgocGFyYW1zLT5lc2l6ZS84KSArIDEpDQo+ID4gPiA+ICsJ
CQkJCSogcGFyYW1zLT5zaXplKSArIDEpOw0KPiA+ID4gPiArCWRxLT5yID0gcnRlX3JpbmdfY3Jl
YXRlKHBhcmFtcy0+bmFtZSwgcXNfZmlmb19zaXplLA0KPiA+ID4gPiArCQkJCQlTT0NLRVRfSURf
QU5ZLCAwKTsNCj4gPiA+DQo+ID4gPiBJZiBpdCBpcyBnb2luZyB0byBiZSBub3QgTVQgc2FmZSwg
dGhlbiB3aHkgbm90IHRvIGNyZWF0ZSB0aGUgcmluZw0KPiA+ID4gd2l0aCAoUklOR19GX1NQX0VO
USB8IFJJTkdfRl9TQ19ERVEpIGZsYWdzIHNldD8NCj4gPiBBZ3JlZS4NCj4gPg0KPiA+ID4gVGhv
dWdoIEkgdGhpbmsgaXQgY291bGQgYmUgY2hhbmdlZCB0byBhbGxvdyBNVCBzYWZlIG11bHRpcGxl
DQo+ID4gPiBlbnFldWUvc2luZ2xlIGRlcXVldWUsIHNlZSBiZWxvdy4NCj4gPiBUaGUgTVQgc2Fm
ZSBpc3N1ZSBpcyBkdWUgdG8gcmVjbGFpbSBjb2RlLiBUaGUgcmVjbGFpbSBjb2RlIGhhcyB0aGUg
Zm9sbG93aW5nDQo+IHNlcXVlbmNlOg0KPiA+DQo+ID4gcnRlX3JpbmdfcGVlaw0KPiA+IHJ0ZV9y
Y3VfcXNicl9jaGVjaw0KPiA+IHJ0ZV9yaW5nX2RlcXVldWUNCj4gPg0KPiA+IFRoaXMgZW50aXJl
IHNlcXVlbmNlIG5lZWRzIHRvIGJlIGF0b21pYyBhcyB0aGUgZW50cnkgY2Fubm90IGJlIGRlcXVl
dWVkDQo+IHdpdGhvdXQga25vd2luZyB0aGF0IHRoZSBncmFjZSBwZXJpb2QgZm9yIHRoYXQgZW50
cnkgaXMgb3Zlci4NCj4gDQo+IEkgdW5kZXJzdGFuZCB0aGF0LCB0aG91Z2ggSSBiZWxpZXZlIGF0
IGxlYXN0IGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBzdXBwb3J0DQo+IG11bHRpcGxlLWVucXVl
dWUvc2luZ2xlIGRlcXVldWVyIGFuZCByZWNsYWltIG1vZGUuDQo+IFdpdGggc2VyaWFsaXplZCBk
ZXF1ZXVlKCkgZXZlbiBtdWx0aXBsZSBkZXF1ZXVlIHNob3VsZCBiZSBwb3NzaWJsZS4NCkFncmVl
ZC4gUGxlYXNlIHNlZSB0aGUgcmVzcG9uc2Ugb24gdGhlIG90aGVyIHRocmVhZC4NCg0KPiANCj4g
PiBOb3RlIHRoYXQgZHVlIHRvIG9wdGltaXphdGlvbnMgaW4gcnRlX3JjdV9xc2JyX2NoZWNrIEFQ
SSwgdGhpcw0KPiA+IHNlcXVlbmNlIHNob3VsZCBub3QgYmUgbGFyZ2UgaW4gbW9zdCBjYXNlcy4g
SSBkbyBub3QgaGF2ZSBpZGVhcyBvbiBob3cgdG8NCj4gbWFrZSB0aGlzIHNlcXVlbmNlIGxvY2st
ZnJlZS4NCj4gPg0KPiA+IElmIHRoZSB3cml0ZXIgaXMgb24gdGhlIGNvbnRyb2wgcGxhbmUsIG1v
c3QgdXNlIGNhc2VzIHdpbGwgdXNlIG11dGV4DQo+ID4gbG9ja3MgZm9yIHN5bmNocm9uaXphdGlv
biBpZiB0aGV5IGFyZSBtdWx0aS10aHJlYWRlZC4gVGhhdCBsb2NrIHNob3VsZCBiZQ0KPiBlbm91
Z2ggdG8gcHJvdmlkZSB0aGUgdGhyZWFkIHNhZmV0eSBmb3IgdGhlc2UgQVBJcy4NCj4gDQo+IElu
IHRoYXQgaXMgY2FzZSwgd2h5IGRvIHdlIG5lZWQgcmluZyBhdCBhbGw/DQo+IEZvciBzdXJlIHBl
b3BsZSBjYW4gY3JlYXRlIHRoZWlyIG93biBxdWV1ZSBxdWl0ZSBlYXNpbHkgd2l0aCBtdXRleCBh
bmQgVEFJTFEuDQo+IElmIHBlcmZvcm1hbmNlIGlzIG5vdCBhbiBpc3N1ZSwgdGhleSBjYW4gZXZl
biBhZGQgcHRocmVhZF9jb25kIHRvIGl0LCBhbmQgaGF2ZQ0KPiBhbiBhYmlsaXR5IGZvciB0aGUg
Y29uc3VtZXIgdG8gc2xlZXAvd2FrZXVwIG9uIGVtcHR5L2Z1bGwgcXVldWUuDQo+IA0KPiA+DQo+
ID4gSWYgdGhlIHdyaXRlciBpcyBtdWx0aS10aHJlYWRlZCBhbmQgbG9jay1mcmVlLCB0aGVuIG9u
ZSBzaG91bGQgdXNlIHBlciB0aHJlYWQNCj4gZGVmZXIgcXVldWUuDQo+IA0KPiBJZiB0aGF0J3Mg
dGhlIG9ubHkgd29ya2luZyBtb2RlbCwgdGhlbiB0aGUgcXVlc3Rpb24gaXMgd2h5IGRvIHdlIG5l
ZWQgdGhhdCBBUEkNCj4gYXQgYWxsPw0KPiBKdXN0IHNpbXBsZSBhcnJheSB3aXRoIGNvdW50ZXIg
b3IgbGlua2VkLWxpc3Qgc2hvdWxkIGRvIGZvciBtYWpvcml0eSBvZiBjYXNlcy4NClBsZWFzZSBz
ZWUgdGhlIG90aGVyIHRocmVhZC4NCg0KPiANCj4gPg0KPiA+ID4NCj4gPiA+ID4gKwlpZiAoZHEt
PnIgPT0gTlVMTCkgew0KPiA+ID4gPiArCQlydGVfbG9nKFJURV9MT0dfRVJSLCBydGVfcmN1X2xv
Z190eXBlLA0KPiA+ID4gPiArCQkJIiVzKCk6IGRlZmVyIHF1ZXVlIGNyZWF0ZSBmYWlsZWRcbiIs
IF9fZnVuY19fKTsNCj4gPiA+ID4gKwkJcnRlX2ZyZWUoZHEpOw0KPiA+ID4gPiArCQlyZXR1cm4g
TlVMTDsNCj4gPiA+ID4gKwl9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwlkcS0+diA9IHBhcmFtcy0+
djsNCj4gPiA+ID4gKwlkcS0+c2l6ZSA9IHBhcmFtcy0+c2l6ZTsNCj4gPiA+ID4gKwlkcS0+ZXNp
emUgPSBwYXJhbXMtPmVzaXplOw0KPiA+ID4gPiArCWRxLT5mID0gcGFyYW1zLT5mOw0KPiA+ID4g
PiArCWRxLT5wID0gcGFyYW1zLT5wOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJcmV0dXJuIGRxOw0K
PiA+ID4gPiArfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsvKiBFbnF1ZXVlIG9uZSByZXNvdXJjZSB0
byB0aGUgZGVmZXIgcXVldWUgdG8gZnJlZSBhZnRlciB0aGUNCj4gPiA+ID4gK2dyYWNlDQo+ID4g
PiA+ICsgKiBwZXJpb2QgaXMgb3Zlci4NCj4gPiA+ID4gKyAqLw0KPiA+ID4gPiAraW50IHJ0ZV9y
Y3VfcXNicl9kcV9lbnF1ZXVlKHN0cnVjdCBydGVfcmN1X3FzYnJfZHEgKmRxLCB2b2lkICplKSB7
DQo+ID4gPiA+ICsJdWludDY0X3QgdG9rZW47DQo+ID4gPiA+ICsJdWludDY0X3QgKnRtcDsNCj4g
PiA+ID4gKwl1aW50MzJfdCBpOw0KPiA+ID4gPiArCXVpbnQzMl90IGN1cl9zaXplLCBmcmVlX3Np
emU7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwlpZiAoZHEgPT0gTlVMTCB8fCBlID09IE5VTEwpIHsN
Cj4gPiA+ID4gKwkJcnRlX2xvZyhSVEVfTE9HX0VSUiwgcnRlX3JjdV9sb2dfdHlwZSwNCj4gPiA+
ID4gKwkJCSIlcygpOiBJbnZhbGlkIGlucHV0IHBhcmFtZXRlclxuIiwgX19mdW5jX18pOw0KPiA+
ID4gPiArCQlydGVfZXJybm8gPSBFSU5WQUw7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwkJcmV0dXJu
IDE7DQo+ID4gPg0KPiA+ID4gV2h5IGp1c3Qgbm90IHRvIHJldHVybiAtRUlOVkFMIHN0cmFpZ2h0
d2F5Pw0KPiA+ID4gSSB0aGluayB0aGVyZSBpcyBubyBtdWNoIHBvaW50IHRvIHNldCBydGVfZXJy
bm8gaW4gdGhhdCBmdW5jdGlvbiBhdA0KPiA+ID4gYWxsLCBqdXN0IHJldHVybiB2YWx1ZSBzaG91
bGQgZG8uDQo+ID4gSSBhbSB0cnlpbmcgdG8ga2VlcCB0aGVzZSBjb25zaXN0ZW50IHdpdGggdGhl
IGV4aXN0aW5nIEFQSXMuIFRoZXkgcmV0dXJuIDAgb3IgMQ0KPiBhbmQgc2V0IHRoZSBydGVfZXJy
bm8uDQo+IA0KPiBBIGxvdCBvZiBwdWJsaWMgRFBESyBBUEkgZnVuY3Rpb25zIGRvIHVzZSByZXR1
cm4gdmFsdWUgdG8gcmV0dXJuIHN0YXR1cyBjb2RlICgwLA0KPiBvciBzb21lIHBvc2l0aXZlIG51
bWJlcnMgb2Ygc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gdmFsdWVzIG9uIGZhaWx1cmUpLCBJIGFt
DQo+IG5vdCBpbnZlbnRpbmcgYW55dGhpbmcgbmV3IGhlcmUuDQpBZ3JlZSwgeW91IGFyZSBub3Qg
cHJvcG9zaW5nIGEgbmV3IHRoaW5nIGhlcmUuIE1heSBiZSBJIHdhcyBub3QgY2xlYXIuIEkgcmVh
bGx5IGRvIG5vdCBoYXZlIGFuIG9waW5pb24gb24gaG93IHRoaXMgc2hvdWxkIGJlIGRvbmUuIEJ1
dCwgSSBkbyBoYXZlIGFuIG9waW5pb24gb24gY29uc2lzdGVuY3kuIFRoZXNlIG5ldyBBUElzIGZv
bGxvdyB3aGF0IGhhcyBiZWVuIGRvbmUgaW4gdGhlIGV4aXN0aW5nIFJDVSBBUElzLiBJIHRoaW5r
IHdlIGhhdmUgMiBvcHRpb25zIGhlcmUuDQoxKSBFaXRoZXIgd2UgY2hhbmdlIGV4aXN0aW5nIFJD
VSBBUElzIHRvIGdldCByaWQgb2YgcnRlX2Vycm5vIChpcyBpdCBhbiBBQkkgY2hhbmdlPykgb3IN
CjIpIFRoZSBuZXcgQVBJcyBmb2xsb3cgd2hhdCBoYXMgYmVlbiBkb25lIGluIHRoZSBleGlzdGlu
ZyBSQ1UgQVBJcy4NCkkgd2FudCB0byBtYWtlIHN1cmUgd2UgYXJlIGNvbnNpc3RlbnQgYXQgbGVh
c3Qgd2l0aGluIFJDVSBBUElzLg0KDQo+IA0KPiA+DQo+ID4gPg0KPiA+ID4gPiArCX0NCj4gPiA+
ID4gKw0KPiA+ID4gPiArCS8qIFN0YXJ0IHRoZSBncmFjZSBwZXJpb2QgKi8NCj4gPiA+ID4gKwl0
b2tlbiA9IHJ0ZV9yY3VfcXNicl9zdGFydChkcS0+dik7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwkv
KiBSZWNsYWltIHJlc291cmNlcyBpZiB0aGUgcXVldWUgaXMgMS84dGggZnVsbC4gVGhpcyBoZWxw
cw0KPiA+ID4gPiArCSAqIHRoZSBxdWV1ZSBmcm9tIGdyb3dpbmcgdG9vIGxhcmdlIGFuZCBhbGxv
d3MgdGltZSBmb3IgcmVhZGVyDQo+ID4gPiA+ICsJICogdGhyZWFkcyB0byByZXBvcnQgdGhlaXIg
cXVpZXNjZW50IHN0YXRlLg0KPiA+ID4gPiArCSAqLw0KPiA+ID4gPiArCWN1cl9zaXplID0gcnRl
X3JpbmdfY291bnQoZHEtPnIpIC8gKGRxLT5lc2l6ZS84ICsgMSk7DQo+ID4gPg0KPiA+ID4gUHJv
YmFibHkgd291bGQgYmUgYSBiaXQgZWFzaWVyIGlmIHlvdSBqdXN0IHN0b3JlIGluIGRxLT5lc2l6
ZSAoZWx0DQo+ID4gPiBzaXplICsgdG9rZW4NCj4gPiA+IHNpemUpIC8gOC4NCj4gPiBBZ3JlZQ0K
PiA+DQo+ID4gPg0KPiA+ID4gPiArCWlmIChjdXJfc2l6ZSA+IChkcS0+c2l6ZSA+PiBSVEVfUkNV
X1FTQlJfQVVUT19SRUNMQUlNX0xJTUlUKSkgew0KPiA+ID4NCj4gPiA+IFdoeSB0byBtYWtlIHRo
aXMgdGhyZXNob2xkIHZhbHVlIGhhcmQtY29kZWQ/DQo+ID4gPiBXaHkgZWl0aGVyIG5vdCB0byBw
dXQgaXQgaW50byBjcmVhdGUgcGFyYW1ldGVyLCBvciBqdXN0IHJldHVybiBhDQo+ID4gPiBzcGVj
aWFsIHJldHVybiB2YWx1ZSwgdG8gaW5kaWNhdGUgdGhhdCB0aHJlc2hvbGQgaXMgcmVhY2hlZD8N
Cj4gPiBNeSB0aGlua2luZyB3YXMgdG8ga2VlcCB0aGUgcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIGVh
c3kgdG8gdXNlLiBUaGUNCj4gPiBtb3JlIHRoZSBwYXJhbWV0ZXJzLCB0aGUgbW9yZSBwYWluZnVs
IGl0IGlzIGZvciB0aGUgdXNlci4gSU1PLCB0aGUNCj4gPiBjb25zdGFudHMgY2hvc2VuIHNob3Vs
ZCBiZSBnb29kIGVub3VnaCBmb3IgbW9zdCBjYXNlcy4gTW9yZSBhZHZhbmNlZA0KPiB1c2VycyBj
b3VsZCBtb2RpZnkgdGhlIGNvbnN0YW50cy4gSG93ZXZlciwgd2UgY291bGQgbWFrZSB0aGVzZSBh
cyBwYXJ0IG9mIHRoZQ0KPiBwYXJhbWV0ZXJzLCBidXQgbWFrZSB0aGVtIG9wdGlvbmFsIGZvciB0
aGUgdXNlci4gRm9yIGV4OiBpZiB0aGV5IHNldCB0aGVtIHRvIDAsDQo+IGRlZmF1bHQgdmFsdWVz
IGNhbiBiZSB1c2VkLg0KPiA+DQo+ID4gPiBPciBldmVuIHJldHVybiBudW1iZXIgb2YgZmlsbGVk
L2ZyZWUgZW50cm9lcyBvbiBzdWNjZXNzLCBzbyBjYWxsZXINCj4gPiA+IGNhbiBkZWNpZGUgdG8g
cmVjbGFpbSBvciBub3QgYmFzZWQgb24gdGhhdCBpbmZvcm1hdGlvbiBvbiBoaXMgb3duPw0KPiA+
IFRoaXMgbWVhbnMgbW9yZSBjb2RlIG9uIHRoZSB1c2VyIHNpZGUuDQo+IA0KPiBJIHBlcnNvbmFs
bHkgdGhpbmsgaXQgaXQgcmVhbGx5IHdvdWxkbid0IGJlIHRoYXQgYmlnIHByb2JsZW0gdG8gdGhl
IHVzZXIgdG8gcGFzcw0KPiBleHRyYSBwYXJhbWV0ZXIgdG8gdGhlIGZ1bmN0aW9uLg0KSSB3aWxs
IGNvbnZlcnQgdGhlIDIgY29uc3RhbnRzIGludG8gb3B0aW9uYWwgcGFyYW1ldGVycyAodXNlciBj
YW4gc2V0IHRoZW0gdG8gMCB0byBtYWtlIHRoZSBhbGdvcml0aG0gdXNlIGRlZmF1bHQgdmFsdWVz
KQ0KDQo+IEFnYWluIHdoYXQgaWYgdXNlciBkb2Vzbid0IHdhbnQgdG8gcmVjbGFpbSgpIGluIGVu
cXVldWUoKSB0aHJlYWQgYXQgYWxsPw0KJ2VucXVldWUnIGhhcyB0byBkbyByZWNsYW1hdGlvbiBp
ZiB0aGUgZGVmZXIgcXVldWUgaXMgZnVsbC4gSSBkbyBub3QgdGhpbmsgdGhpcyBpcyB0cml2aWFs
Lg0KDQpJbiB0aGUgY3VycmVudCBkZXNpZ24sIHJlY2xhbWF0aW9uIGluIGVucXVldWUgaXMgYWxz
byBkb25lIG9uIHJlZ3VsYXIgYmFzaXMgKGF1dG9tYXRpYyB0cmlnZ2VyaW5nIG9mIHJlY2xhbWF0
aW9uIHdoZW4gdGhlIHF1ZXVlIHJlYWNoZXMgY2VydGFpbiBsaW1pdCkgdG8ga2VlcCB0aGUgcXVl
dWUgZnJvbSBncm93aW5nIHRvbyBsYXJnZS4gVGhpcyBpcyByZXF1aXJlZCB3aGVuIHdlIGltcGxl
bWVudCBhIGR5bmFtaWNhbGx5IGFkanVzdGluZyBkZWZlciBxdWV1ZS4gVGhlIGN1cnJlbnQgYWxn
b3JpdGhtIGtlZXBzIHRoZSBjb3N0IG9mIHJlY2xhbWF0aW9uIHNwcmVhZCBhY3Jvc3MgbXVsdGlw
bGUgY2FsbHMgYW5kIHB1dHMgYW4gdXBwZXIgYm91bmQgb24gY3ljbGVzIGZvciBkZWxldGUgQVBJ
IGJ5IHJlY2xhaW1pbmcgYSBmaXhlZCBudW1iZXIgb2YgZW50cmllcy4NCg0KVGhpcyBhbGdvcml0
aG0gaXMgcHJvdmVuIHRvIHdvcmsgaW4gdGhlIExQTSBpbnRlZ3JhdGlvbiBwZXJmb3JtYW5jZSB0
ZXN0cyBhdCBhIHZlcnkgbG93IHBlcmZvcm1hbmNlIG92ZXIgaGVhZCAofjElKS4gU28sIEkgZG8g
bm90IGtub3cgd2h5IGEgdXNlciB3b3VsZCBub3Qgd2FudCB0byB1c2UgdGhpcy4gVGhlIDIgYWRk
aXRpb25hbCBwYXJhbWV0ZXJzIHNob3VsZCBnaXZlIHRoZSB1c2VyIG1vcmUgZmxleGliaWxpdHku
DQoNCkhvd2V2ZXIsIGlmIHRoZSB1c2VyIHdhbnRzIGhpcyBvd24gYWxnb3JpdGhtLCBoZSBjYW4g
Y3JlYXRlIG9uZSB3aXRoIHRoZSBiYXNlIEFQSXMgcHJvdmlkZWQuDQoNCj4gDQo+ID4gSSB0aGlu
ayBhZGRpbmcgdGhlc2UgdG8gcGFyYW1ldGVycyBzZWVtcyBsaWtlIGEgYmV0dGVyIG9wdGlvbi4N
Cj4gPg0KPiA+ID4NCj4gPiA+ID4gKwkJcnRlX2xvZyhSVEVfTE9HX0lORk8sIHJ0ZV9yY3VfbG9n
X3R5cGUsDQo+ID4gPiA+ICsJCQkiJXMoKTogVHJpZ2dlcmluZyByZWNsYW1hdGlvblxuIiwgX19m
dW5jX18pOw0KPiA+ID4gPiArCQlydGVfcmN1X3FzYnJfZHFfcmVjbGFpbShkcSk7DQo+ID4gPiA+
ICsJfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsJLyogQ2hlY2sgaWYgdGhlcmUgaXMgc3BhY2UgZm9y
IGF0bGVhc3QgZm9yIDEgcmVzb3VyY2UgKi8NCj4gPiA+ID4gKwlmcmVlX3NpemUgPSBydGVfcmlu
Z19mcmVlX2NvdW50KGRxLT5yKSAvIChkcS0+ZXNpemUvOCArIDEpOw0KPiA+ID4gPiArCWlmICgh
ZnJlZV9zaXplKSB7DQo+ID4gPiA+ICsJCXJ0ZV9sb2coUlRFX0xPR19FUlIsIHJ0ZV9yY3VfbG9n
X3R5cGUsDQo+ID4gPiA+ICsJCQkiJXMoKTogRGVmZXIgcXVldWUgaXMgZnVsbFxuIiwgX19mdW5j
X18pOw0KPiA+ID4gPiArCQlydGVfZXJybm8gPSBFTk9TUEM7DQo+ID4gPiA+ICsJCXJldHVybiAx
Ow0KPiA+ID4gPiArCX0NCj4gPiA+ID4gKw0KPiA+ID4gPiArCS8qIEVucXVldWUgdGhlIHJlc291
cmNlICovDQo+ID4gPiA+ICsJcnRlX3Jpbmdfc3BfZW5xdWV1ZShkcS0+ciwgKHZvaWQgKikodWlu
dHB0cl90KXRva2VuKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCS8qIFRoZSByZXNvdXJjZSB0byBl
bnF1ZXVlIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgNjRiDQo+ID4gPiA+ICsJICogZHVlIHRv
IHRoZSBsaW1pdGF0aW9uIG9mIHRoZSBydGVfcmluZyBpbXBsZW1lbnRhdGlvbi4NCj4gPiA+ID4g
KwkgKi8NCj4gPiA+ID4gKwlmb3IgKGkgPSAwLCB0bXAgPSAodWludDY0X3QgKillOyBpIDwgZHEt
PmVzaXplLzg7IGkrKywgdG1wKyspDQo+ID4gPiA+ICsJCXJ0ZV9yaW5nX3NwX2VucXVldWUoZHEt
PnIsICh2b2lkICopKHVpbnRwdHJfdCkqdG1wKTsNCj4gPiA+DQo+ID4gPg0KPiA+ID4gVGhhdCB3
aG9sZSBjb25zdHJ1Y3Rpb24gYWJvdmUgbG9va3MgYSBiaXQgY2x1bXN5IGFuZCBlcnJvciBwcm9u
ZS4uLg0KPiA+ID4gSSBzdXBwb3NlIGp1c3Q6DQo+ID4gPg0KPiA+ID4gY29uc3QgdWludDMyX3Qg
bmJfZWx0ID0gIGRxLT5lbHRfc2l6ZS84ICsgMTsgdWludDMyX3QgZnJlZSwgbjsgLi4uDQo+ID4g
PiBuID0gcnRlX3JpbmdfZW5xdWV1ZV9idWxrKGRxLT5yLCBlLCBuYl9lbHQsICZmcmVlKTsgaWYg
KG4gPT0gMCkNCj4gPiBZZXMsIGJ1bGsgZW5xdWV1ZSBjYW4gYmUgdXNlZC4gQnV0IG5vdGUgdGhh
dCBvbmNlIHRoZSBmbGV4aWJsZSBlbGVtZW50IHNpemUNCj4gcmluZyBwYXRjaCBpcyBkb25lLCB0
aGlzIGNvZGUgd2lsbCB1c2UgdGhhdC4NCj4gDQo+IFdlbGwsIHdoZW4gaXQgd2lsbCBiZSBpbiB0
aGUgbWFpbmxpbmUsIGFuZCBpdCB3b3VsZCBwcm92aWRlIGEgYmV0dGVyIHdheSwgZm9yIHN1cmUN
Cj4gdGhpcyBjb2RlIGNhbiBiZSB1cGRhdGVkIHRvIHVzZSBuZXcgQVBJIChpZiBpdCBpcyBwcm92
aWRlIHNvbWUgaW1wcm92ZW1lbnRzKS4NCj4gQnV0IGFzIEkgdWRlbnJzdGFuZCwgcmlnaHQgbm93
IGl0IGlzIG5vdCB0aGVyZSwgd2hpbGUgYnVsayBlbnF1ZXVlL2RlcXVldWUgYXJlLg0KQXBvbG9n
aWVzLCBJIHdhcyBub3QgY2xlYXIuIEkgYWdyZWUgd2UgY2FuIGdvIHdpdGggYnVsayBBUElzIGZv
ciBub3cuDQoNCj4gDQo+ID4NCj4gPiA+ICAgcmV0dXJuIC1FTk9TUEM7DQo+ID4gPiByZXR1cm4g
ZnJlZTsNCj4gPiA+DQo+ID4gPiBUaGF0IHdheSBJIHRoaW5rIHlvdSBjYW4gaGF2ZSBNVC1zYWZl
IHZlcnNpb24gb2YgdGhhdCBmdW5jdGlvbi4NCj4gPiBQbGVhc2Ugc2VlIHRoZSBkZXNjcmlwdGlv
biBvZiBNVCBzYWZlIGlzc3VlIGFib3ZlLg0KPiA+DQo+ID4gPg0KPiA+ID4gPiArDQo+ID4gPiA+
ICsJcmV0dXJuIDA7DQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8qIFJlY2xhaW0g
cmVzb3VyY2VzIGZyb20gdGhlIGRlZmVyIHF1ZXVlLiAqLyBpbnQNCj4gPiA+ID4gK3J0ZV9yY3Vf
cXNicl9kcV9yZWNsYWltKHN0cnVjdCBydGVfcmN1X3FzYnJfZHEgKmRxKSB7DQo+ID4gPiA+ICsJ
dWludDMyX3QgbWF4X2NudDsNCj4gPiA+ID4gKwl1aW50MzJfdCBjbnQ7DQo+ID4gPiA+ICsJdm9p
ZCAqdG9rZW47DQo+ID4gPiA+ICsJdWludDY0X3QgKnRtcDsNCj4gPiA+ID4gKwl1aW50MzJfdCBp
Ow0KPiA+ID4gPiArDQo+ID4gPiA+ICsJaWYgKGRxID09IE5VTEwpIHsNCj4gPiA+ID4gKwkJcnRl
X2xvZyhSVEVfTE9HX0VSUiwgcnRlX3JjdV9sb2dfdHlwZSwNCj4gPiA+ID4gKwkJCSIlcygpOiBJ
bnZhbGlkIGlucHV0IHBhcmFtZXRlclxuIiwgX19mdW5jX18pOw0KPiA+ID4gPiArCQlydGVfZXJy
bm8gPSBFSU5WQUw7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwkJcmV0dXJuIDE7DQo+ID4gPg0KPiA+
ID4gU2FtZSBzdG9yeSBhcyBhYm92ZSAtIEkgdGhpbmsgcnRlX2Vycm5vIGlzIGV4Y2Vzc2l2ZSBp
biB0aGlzIGZ1bmN0aW9uLg0KPiA+ID4gSnVzdCByZXR1cm4gdmFsdWUgc2hvdWxkIGJlIGVub3Vn
aC4NCj4gPiA+DQo+ID4gPg0KPiA+ID4gPiArCX0NCj4gPiA+ID4gKw0KPiA+ID4gPiArCS8qIEFu
eXRoaW5nIHRvIHJlY2xhaW0/ICovDQo+ID4gPiA+ICsJaWYgKHJ0ZV9yaW5nX2NvdW50KGRxLT5y
KSA9PSAwKQ0KPiA+ID4gPiArCQlyZXR1cm4gMDsNCj4gPiA+DQo+ID4gPiBOb3Qgc3VyZSB5b3Ug
bmVlZCB0aGF0LCBzZWUgYmVsb3cuDQo+ID4gPg0KPiA+ID4gPiArDQo+ID4gPiA+ICsJLyogUmVj
bGFpbSBhdCB0aGUgbWF4IDEvMTZ0aCB0aGUgdG90YWwgbnVtYmVyIG9mIGVudHJpZXMuICovDQo+
ID4gPiA+ICsJbWF4X2NudCA9IGRxLT5zaXplID4+IFJURV9SQ1VfUVNCUl9NQVhfUkVDTEFJTV9M
SU1JVDsNCj4gPiA+ID4gKwltYXhfY250ID0gKG1heF9jbnQgPT0gMCkgPyBkcS0+c2l6ZSA6IG1h
eF9jbnQ7DQo+ID4gPg0KPiA+ID4gQWdhaW4gd2h5IG5vdCB0byBtYWtlIG1heF9jbnQgYSBjb25m
aWd1cmFibGUgYXQgY3JlYXRlKCkgcGFyYW1ldGVyPw0KPiA+IEkgdGhpbmsgbWFraW5nIHRoaXMg
YXMgYW4gb3B0aW9uYWwgcGFyYW1ldGVyIGZvciBjcmVhdGluZyBkZWZlciBxdWV1ZSBpcyBhDQo+
IGJldHRlciBvcHRpb24uDQo+ID4NCj4gPiA+IE9yIGV2ZW4gYSBwYXJhbWV0ZXIgZm9yIHRoYXQg
ZnVuY3Rpb24/DQo+ID4gPg0KPiA+ID4gPiArCWNudCA9IDA7DQo+ID4gPiA+ICsNCj4gPiA+ID4g
KwkvKiBDaGVjayByZWFkZXIgdGhyZWFkcyBxdWllc2NlbnQgc3RhdGUgYW5kIHJlY2xhaW0gcmVz
b3VyY2VzICovDQo+ID4gPiA+ICsJd2hpbGUgKChjbnQgPCBtYXhfY250KSAmJiAocnRlX3Jpbmdf
cGVlayhkcS0+ciwgJnRva2VuKSA9PSAwKSAmJg0KPiA+ID4gPiArCQkocnRlX3JjdV9xc2JyX2No
ZWNrKGRxLT52LCAodWludDY0X3QpKCh1aW50cHRyX3QpdG9rZW4pLCBmYWxzZSkNCj4gPiA+ID4g
KwkJCT09IDEpKSB7DQo+ID4gPg0KPiA+ID4NCj4gPiA+ID4gKwkJKHZvaWQpcnRlX3Jpbmdfc2Nf
ZGVxdWV1ZShkcS0+ciwgJnRva2VuKTsNCj4gPiA+ID4gKwkJLyogVGhlIHJlc291cmNlIHRvIGRl
cXVldWUgbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA2NGINCj4gPiA+ID4gKwkJICogZHVlIHRv
IHRoZSBsaW1pdGF0aW9uIG9mIHRoZSBydGVfcmluZyBpbXBsZW1lbnRhdGlvbi4NCj4gPiA+ID4g
KwkJICovDQo+ID4gPiA+ICsJCWZvciAoaSA9IDAsIHRtcCA9ICh1aW50NjRfdCAqKWRxLT5lOyBp
IDwgZHEtPmVzaXplLzg7DQo+ID4gPiA+ICsJCQlpKyssIHRtcCsrKQ0KPiA+ID4gPiArCQkJKHZv
aWQpcnRlX3Jpbmdfc2NfZGVxdWV1ZShkcS0+ciwNCj4gPiA+ID4gKwkJCQkJKHZvaWQgKikodWlu
dHB0cl90KXRtcCk7DQo+ID4gPg0KPiA+ID4gQWdhaW4sIG5vIG5lZWQgZm9yIHN1Y2ggY29uc3Ry
dWN0cyB3aXRoIG11bHRpcGxlIGRlcXVldWVyIEkgYmVsaWV2ZS4NCj4gPiA+IEp1c3Q6DQo+ID4g
Pg0KPiA+ID4gY29uc3QgdWludDMyX3QgbmJfZWx0ID0gIGRxLT5lbHRfc2l6ZS84ICsgMTsgdWlu
dDMyX3QgbjsgdWludHB0cl90DQo+ID4gPiBlbHRbbmJfZWx0XTsgLi4uDQo+ID4gPiBuID0gcnRl
X3JpbmdfZGVxdWV1ZV9idWxrKGRxLT5yLCBlbHQsIG5iX2VsdCwgTlVMTCk7IGlmIChuICE9IDAp
DQo+ID4gPiB7ZHEtPmYoZHEtPnAsIGVsdCk7fQ0KPiA+IEFncmVlIG9uIGJ1bGsgQVBJIHVzZS4N
Cj4gPg0KPiA+ID4NCj4gPiA+IFNlZW1zIGVub3VnaC4NCj4gPiA+IEFnYWluIGluIHRoYXQgY2Fz
ZSB5b3UgY2FuIGhhdmUgZW5xdWV1ZS9yZWNsYWltIHJ1bm5pbmcgaW4gZGlmZmVyZW50DQo+ID4g
PiB0aHJlYWRzIHNpbXVsdGFuZW91c2x5LCBwbHVzIHlvdSBkb24ndCBuZWVkIGRxLT5lIGF0IGFs
bC4NCj4gPiBXaWxsIGNoZWNrIG9uIGRxLT5lDQo+ID4NCj4gPiA+DQo+ID4gPiA+ICsJCWRxLT5m
KGRxLT5wLCBkcS0+ZSk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwkJY250Kys7DQo+ID4gPiA+ICsJ
fQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsJcnRlX2xvZyhSVEVfTE9HX0lORk8sIHJ0ZV9yY3VfbG9n
X3R5cGUsDQo+ID4gPiA+ICsJCSIlcygpOiBSZWNsYWltZWQgJXUgcmVzb3VyY2VzXG4iLCBfX2Z1
bmNfXywgY250KTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCWlmIChjbnQgPT0gMCkgew0KPiA+ID4g
PiArCQkvKiBObyByZXNvdXJjZXMgd2VyZSByZWNsYWltZWQgKi8NCj4gPiA+ID4gKwkJcnRlX2Vy
cm5vID0gRUFHQUlOOw0KPiA+ID4gPiArCQlyZXR1cm4gMTsNCj4gPiA+ID4gKwl9DQo+ID4gPiA+
ICsNCj4gPiA+ID4gKwlyZXR1cm4gMDsNCj4gPiA+DQo+ID4gPiBJJ2Qgc3VnZ2VzdCB0byByZXR1
cm4gY250IG9uIHN1Y2Nlc3MuDQo+ID4gSSBhbSB0cnlpbmcgdG8ga2VlcCB0aGUgQVBJcyBzaW1w
bGUuIEkgZG8gbm90IHNlZSBtdWNoIHVzZSBmb3IgJ2NudCcNCj4gPiBhcyByZXR1cm4gdmFsdWUg
dG8gdGhlIHVzZXIuIEl0IGV4cG9zZXMgbW9yZSBkZXRhaWxzIHdoaWNoIEkgdGhpbmsgYXJlIGlu
dGVybmFsDQo+IHRvIHRoZSBsaWJyYXJ5Lg0KPiANCj4gTm90IHN1cmUgd2hhdCBpcyB0aGUgaGFz
c2xlIHRvIHJldHVybiBudW1iZXIgb2YgY29tcGxldGVkIHJlY2xhbWFpdGlvbnM/DQo+IElmIHVz
ZXIgZG9lc24ndCBuZWVkIHRoYXQgaW5mb3JtYXRpb24sIGhlIHNpbXBseSB3b3VsZG4ndCB1c2Ug
aXQuDQo+IEJ1dCBtaWdodCBiZSBpdCB3b3VsZCBiZSB1c2VmdWxsIC0gaGUgY2FuIGRlY2lkZSBz
aG91bGQgaGUgdHJ5IGFub3RoZXIgYXR0ZW1wdA0KPiBvZiByZWNsYWltKCkgaW1tZWRpYXRlbHkg
b3IgaXMgaXQgb2sgdG8gZG8gc29tZXRoaW5nIGVsc2UuDQpUaGVyZSBpcyBubyBoYXNzbGUgdG8g
cmV0dXJuIHRoYXQgaW5mb3JtYXRpb24uDQoNCkFzIHBlciB0aGUgY3VycmVudCBkZXNpZ24sIHVz
ZXIgY2FsbHMgJ3JlY2xhaW0nIHdoZW4gaXQgaXMgb3V0IG9mIHJlc291cmNlcyB3aGlsZSBhZGRp
bmcgYW4gZW50cnkgdG8gdGhlIGRhdGEgc3RydWN0dXJlLiBBdCB0aGF0IHBvaW50IHRoZSB1c2Vy
IHdhbnRzIHRvIGtub3cgaWYgYXQgbGVhc3QgMSByZXNvdXJjZSB3YXMgcmVjbGFpbWVkIGJlY2F1
c2UgdGhlIHVzZXIgaGFzIHRvIGFsbG9jYXRlIDEgcmVzb3VyY2UuIEhlIGRvZXMgbm90IGhhdmUg
YSB1c2UgZm9yIHRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIHJlY2xhaW1lZC4NCg0KSWYgdGhpcyBB
UEkgcmV0dXJucyAwLCB0aGVuIHRoZSB1c2VyIGNhbiBkZWNpZGUgdG8gcmVwZWF0IHRoZSBjYWxs
IG9yIHJldHVybiBmYWlsdXJlLiBCdXQgdGhhdCBkZWNpc2lvbiBkZXBlbmRzIG9uIHRoZSBsZW5n
dGggb2YgdGhlIGdyYWNlIHBlcmlvZCB3aGljaCBpcyB1bmRlciB1c2VyJ3MgY29udHJvbC4NCg0K
PiANCj4gPg0KPiA+ID4NCj4gPiA+ID4gK30NCj4gPiA+ID4gKw0KPiA+ID4gPiArLyogRGVsZXRl
IGEgZGVmZXIgcXVldWUuICovDQo+ID4gPiA+ICtpbnQNCj4gPiA+ID4gK3J0ZV9yY3VfcXNicl9k
cV9kZWxldGUoc3RydWN0IHJ0ZV9yY3VfcXNicl9kcSAqZHEpIHsNCj4gPiA+ID4gKwlpZiAoZHEg
PT0gTlVMTCkgew0KPiA+ID4gPiArCQlydGVfbG9nKFJURV9MT0dfRVJSLCBydGVfcmN1X2xvZ190
eXBlLA0KPiA+ID4gPiArCQkJIiVzKCk6IEludmFsaWQgaW5wdXQgcGFyYW1ldGVyXG4iLCBfX2Z1
bmNfXyk7DQo+ID4gPiA+ICsJCXJ0ZV9lcnJubyA9IEVJTlZBTDsNCj4gPiA+ID4gKw0KPiA+ID4g
PiArCQlyZXR1cm4gMTsNCj4gPiA+ID4gKwl9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwkvKiBSZWNs
YWltIGFsbCB0aGUgcmVzb3VyY2VzICovDQo+ID4gPiA+ICsJaWYgKHJ0ZV9yY3VfcXNicl9kcV9y
ZWNsYWltKGRxKSAhPSAwKQ0KPiA+ID4gPiArCQkvKiBFcnJvciBudW1iZXIgaXMgYWxyZWFkeSBz
ZXQgYnkgdGhlIHJlY2xhaW0gQVBJICovDQo+ID4gPiA+ICsJCXJldHVybiAxOw0KPiA+ID4NCj4g
PiA+IEhvdyBkbyB5b3Uga25vdyB0aGF0IHlvdSBoYXZlIHJlY2xhaW1lZCBldmVyeXRoaW5nPw0K
PiA+IEdvb2QgcG9pbnQsIHdpbGwgY29tZSBiYWNrIHdpdGggYSBkaWZmZXJlbnQgc29sdXRpb24u
DQo+ID4NCj4gPiA+DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwlydGVfcmluZ19mcmVlKGRxLT5yKTsN
Cj4gPiA+ID4gKwlydGVfZnJlZShkcSk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwlyZXR1cm4gMDsN
Cj4gPiA+ID4gK30NCj4gPiA+ID4gKw0KPiA+ID4gPiAgaW50IHJ0ZV9yY3VfbG9nX3R5cGU7DQo+
ID4gPiA+DQo+ID4gPiA+ICBSVEVfSU5JVChydGVfcmN1X3JlZ2lzdGVyKQ0KPiA+ID4gPiBkaWZm
IC0tZ2l0IGEvbGliL2xpYnJ0ZV9yY3UvcnRlX3JjdV9xc2JyLmgNCj4gPiA+ID4gYi9saWIvbGli
cnRlX3JjdS9ydGVfcmN1X3FzYnIuaCBpbmRleCBjODBmMTVjMDAuLjE4NWQ0YjUwYSAxMDA2NDQN
Cj4gPiA+ID4gLS0tIGEvbGliL2xpYnJ0ZV9yY3UvcnRlX3JjdV9xc2JyLmgNCj4gPiA+ID4gKysr
IGIvbGliL2xpYnJ0ZV9yY3UvcnRlX3JjdV9xc2JyLmgNCj4gPiA+ID4gQEAgLTM0LDYgKzM0LDcg
QEAgZXh0ZXJuICJDIiB7DQo+ID4gPiA+ICAjaW5jbHVkZSA8cnRlX2xjb3JlLmg+DQo+ID4gPiA+
ICAjaW5jbHVkZSA8cnRlX2RlYnVnLmg+DQo+ID4gPiA+ICAjaW5jbHVkZSA8cnRlX2F0b21pYy5o
Pg0KPiA+ID4gPiArI2luY2x1ZGUgPHJ0ZV9yaW5nLmg+DQo+ID4gPiA+DQo+ID4gPiA+ICBleHRl
cm4gaW50IHJ0ZV9yY3VfbG9nX3R5cGU7DQo+ID4gPiA+DQo+ID4gPiA+IEBAIC0xMDksNiArMTEw
LDY3IEBAIHN0cnVjdCBydGVfcmN1X3FzYnIgew0KPiA+ID4gPiAgCSAqLw0KPiA+ID4gPiAgfSBf
X3J0ZV9jYWNoZV9hbGlnbmVkOw0KPiA+ID4gPg0KPiA+ID4gPiArLyoqDQo+ID4gPiA+ICsgKiBD
YWxsIGJhY2sgZnVuY3Rpb24gY2FsbGVkIHRvIGZyZWUgdGhlIHJlc291cmNlcy4NCj4gPiA+ID4g
KyAqDQo+ID4gPiA+ICsgKiBAcGFyYW0gcA0KPiA+ID4gPiArICogICBQb2ludGVyIHByb3ZpZGVk
IHdoaWxlIGNyZWF0aW5nIHRoZSBkZWZlciBxdWV1ZQ0KPiA+ID4gPiArICogQHBhcmFtIGUNCj4g
PiA+ID4gKyAqICAgUG9pbnRlciB0byB0aGUgcmVzb3VyY2UgZGF0YSBzdG9yZWQgb24gdGhlIGRl
ZmVyIHF1ZXVlDQo+ID4gPiA+ICsgKg0KPiA+ID4gPiArICogQHJldHVybg0KPiA+ID4gPiArICog
ICBOb25lDQo+ID4gPiA+ICsgKi8NCj4gPiA+ID4gK3R5cGVkZWYgdm9pZCAoKnJ0ZV9yY3VfcXNi
cl9mcmVlX3Jlc291cmNlKSh2b2lkICpwLCB2b2lkICplKTsNCj4gPiA+DQo+ID4gPiBTdHlsaXNo
IHRoaW5nIC0gdXN1YWxseSBpbiBEUERLIHdlIGhhdmUgdHlwZWRmIG5ld3R5cGVfdCAuLi4NCj4g
PiA+IFRob3VnaCBJIGFtIG5vdCBzdXJlIHlvdSBuZWVkIGEgbmV3IHR5cGVkZWYgYXQgYWxsIC0g
anVzdCBhIGZ1bmN0aW9uDQo+ID4gPiBwb2ludGVyIGluc2lkZSB0aGUgc3RydWN0IHNlZW1zIGVu
b3VnaC4NCj4gPiBPdGhlciBsaWJyYXJpZXMgKGZvciBleDogcnRlX2hhc2gpIHVzZSB0aGlzIGFw
cHJvYWNoLiBJIHRoaW5rIGl0IGlzIGJldHRlciB0byBrZWVwDQo+IGl0IG91dCBvZiB0aGUgc3Ry
dWN0dXJlIHRvIGFsbG93IGZvciBiZXR0ZXIgY29tbWVudGluZy4NCj4gDQo+IEkgYW0gc2F5aW5n
IG1ham9yaXR5IG9mIERQREsgY29kZSB1c2UgX3Qgc3VmZml4IGZvciB0eXBlZGVmOg0KPiB0eXBl
ZGVmIHZvaWQgKCpydGVfcmN1X3FzYnJfZnJlZV9yZXNvdXJjZV90KSh2b2lkICpwLCB2b2lkICpl
KTsNCkFwb2xvZ2llcywgZ290IGl0LCB3aWxsIGNoYW5nZS4NCg0KPiANCj4gPg0KPiA+ID4NCj4g
PiA+ID4gKw0KPiA+ID4gPiArI2RlZmluZSBSVEVfUkNVX1FTQlJfRFFfTkFNRVNJWkUgUlRFX1JJ
TkdfTkFNRVNJWkUNCj4gPiA+ID4gKw0KPiA+ID4gPiArLyoqDQo+ID4gPiA+ICsgKiAgVHJpZ2dl
ciBhdXRvbWF0aWMgcmVjbGFtYXRpb24gYWZ0ZXIgMS84dGggdGhlIGRlZmVyIHF1ZXVlIGlzIGZ1
bGwuDQo+ID4gPiA+ICsgKi8NCj4gPiA+ID4gKyNkZWZpbmUgUlRFX1JDVV9RU0JSX0FVVE9fUkVD
TEFJTV9MSU1JVCAzDQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8qKg0KPiA+ID4gPiArICogIFJlY2xh
aW0gYXQgdGhlIG1heCAxLzE2dGggdGhlIHRvdGFsIG51bWJlciBvZiByZXNvdXJjZXMuDQo+ID4g
PiA+ICsgKi8NCj4gPiA+ID4gKyNkZWZpbmUgUlRFX1JDVV9RU0JSX01BWF9SRUNMQUlNX0xJTUlU
IDQNCj4gPiA+DQo+ID4gPg0KPiA+ID4gQXMgSSBzYWlkIGFib3ZlLCBJIGRvbid0IHRoaW5rIHRo
ZXNlIHRocmVzaG9sZHMgbmVlZCB0byBiZSBoYXJkY29kZWQuDQo+ID4gPiBJbiBhbnkgY2FzZSwg
dGhlcmUgc2VlbXMgbm90IG11Y2ggcG9pbnQgdG8gcHV0IHRoZW0gaW4gdGhlIHB1YmxpYyBoZWFk
ZXINCj4gZmlsZS4NCj4gPiA+DQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8qKg0KPiA+ID4gPiArICog
UGFyYW1ldGVycyB1c2VkIHdoZW4gY3JlYXRpbmcgdGhlIGRlZmVyIHF1ZXVlLg0KPiA+ID4gPiAr
ICovDQo+ID4gPiA+ICtzdHJ1Y3QgcnRlX3JjdV9xc2JyX2RxX3BhcmFtZXRlcnMgew0KPiA+ID4g
PiArCWNvbnN0IGNoYXIgKm5hbWU7DQo+ID4gPiA+ICsJLyoqPCBOYW1lIG9mIHRoZSBxdWV1ZS4g
Ki8NCj4gPiA+ID4gKwl1aW50MzJfdCBzaXplOw0KPiA+ID4gPiArCS8qKjwgTnVtYmVyIG9mIGVu
dHJpZXMgaW4gcXVldWUuIFR5cGljYWxseSwgdGhpcyB3aWxsIGJlDQo+ID4gPiA+ICsJICogICB0
aGUgc2FtZSBhcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgZW50cmllcyBzdXBwb3J0ZWQgaW4gdGhl
DQo+ID4gPiA+ICsJICogICBsb2NrIGZyZWUgZGF0YSBzdHJ1Y3R1cmUuDQo+ID4gPiA+ICsJICog
ICBEYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmJvdW5kZWQgbnVtYmVyIG9mIGVudHJpZXMgaXMgbm90
DQo+ID4gPiA+ICsJICogICBzdXBwb3J0ZWQgY3VycmVudGx5Lg0KPiA+ID4gPiArCSAqLw0KPiA+
ID4gPiArCXVpbnQzMl90IGVzaXplOw0KPiA+ID4gPiArCS8qKjwgU2l6ZSAoaW4gYnl0ZXMpIG9m
IGVhY2ggZWxlbWVudCBpbiB0aGUgZGVmZXIgcXVldWUuDQo+ID4gPiA+ICsJICogICBUaGlzIGhh
cyB0byBiZSBtdWx0aXBsZSBvZiA4QiBhcyB0aGUgcnRlX3JpbmcgQVBJcw0KPiA+ID4gPiArCSAq
ICAgc3VwcG9ydCA4QiBlbGVtZW50IHNpemVzIG9ubHkuDQo+ID4gPiA+ICsJICovDQo+ID4gPiA+
ICsJcnRlX3JjdV9xc2JyX2ZyZWVfcmVzb3VyY2UgZjsNCj4gPiA+ID4gKwkvKio8IEZ1bmN0aW9u
IHRvIGNhbGwgdG8gZnJlZSB0aGUgcmVzb3VyY2UuICovDQo+ID4gPiA+ICsJdm9pZCAqcDsNCj4g
PiA+DQo+ID4gPiBTdHlsZSBuaXQgYWdhaW4gLSBJIGxpa2Ugc2hvcnQgbmFtZXMgbXlzZWxmLCBi
dXQgdGhhdCBzZWVtcyBhIGJpdA0KPiA+ID4gZXh0cmVtZS4uLiA6KSBNaWdodCBiZSBhdCBsZWFz
dDoNCj4gPiA+IHZvaWQgKCpyZWNsYWltKSh2b2lkICosIHZvaWQgKik7DQo+ID4gTWF5IGJlICdm
cmVlX2ZuJz8NCj4gPg0KPiA+ID4gdm9pZCAqIHJlY2xhaW1fZGF0YTsNCj4gPiA+ID8NCj4gPiBU
aGlzIGlzIHRoZSBwb2ludGVyIHRvIHRoZSBkYXRhIHN0cnVjdHVyZSB0byBmcmVlIHRoZSByZXNv
dXJjZSBpbnRvLiBGb3IgZXg6IEluDQo+IExQTSBkYXRhIHN0cnVjdHVyZSwgaXQgd2lsbCBiZSBw
b2ludGVyIHRvIExQTS4gJ3JlY2xhaW1fZGF0YScNCj4gPiBkb2VzIG5vdCBjb252ZXkgdGhlIG1l
YW5pbmcgY29ycmVjdGx5Lg0KPiANCj4gT2ssIHBsZWFzZSBmcmVlIHRvIGNvbWV1cCB3aXRoIHlv
dXIgb3duIG5hbWVzLg0KPiBJIGp1c3Qgd2FudGVkIHRvIHNheSB0aGF0ICdmJyBhbmQgJ3AnIGFy
ZSBhIGJpdCBhbiBleHRyZW1lIGZvciBwdWJsaWMgQVBJLg0Kb2ssIHRoaXMgaXMgdGhlIGhhcmRl
c3QgdGhpbmcgdG8gZG8g8J+Yig0KDQo+IA0KPiA+DQo+ID4gPg0KPiA+ID4gPiArCS8qKjwgUG9p
bnRlciBwYXNzZWQgdG8gdGhlIGZyZWUgZnVuY3Rpb24uIFR5cGljYWxseSwgdGhpcyBpcyB0aGUN
Cj4gPiA+ID4gKwkgKiAgIHBvaW50ZXIgdG8gdGhlIGRhdGEgc3RydWN0dXJlIHRvIHdoaWNoIHRo
ZSByZXNvdXJjZSB0byBmcmVlDQo+ID4gPiA+ICsJICogICBiZWxvbmdzLiBUaGlzIGNhbiBiZSBO
VUxMLg0KPiA+ID4gPiArCSAqLw0KPiA+ID4gPiArCXN0cnVjdCBydGVfcmN1X3FzYnIgKnY7DQo+
ID4gPg0KPiA+ID4gRG9lcyBpdCBuZWVkIHRvIGJlIGluc2lkZSB0aGF0IHN0cnVjdD8NCj4gPiA+
IE1pZ2h0IGJlIGJldHRlcjoNCj4gPiA+IHJ0ZV9yY3VfcXNicl9kcV9jcmVhdGUoc3RydWN0IHJ0
ZV9yY3VfcXNiciAqdiwgY29uc3Qgc3RydWN0DQo+ID4gPiBydGVfcmN1X3FzYnJfZHFfcGFyYW1l
dGVycyAqcGFyYW1zKTsNCj4gPiBUaGUgQVBJIHRha2VzIGEgcGFyYW1ldGVyIHN0cnVjdHVyZSBh
cyBpbnB1dCBhbnl3YXksIHdoeSB0byBhZGQNCj4gPiBhbm90aGVyIGFyZ3VtZW50IHRvIHRoZSBm
dW5jdGlvbj8gUVNCUiB2YXJpYWJsZSBpcyBhbHNvIGFub3RoZXIgcGFyYW1ldGVyLg0KPiA+DQo+
ID4gPg0KPiA+ID4gQW5vdGhlciBhbHRlcm5hdGl2ZTogbWFrZSBib3RoIHJlY2xhaW0oKSBhbmQg
ZW5xdWV1ZSgpIHRvIHRha2UgdiBhcw0KPiA+ID4gYSBwYXJhbWV0ZXIuDQo+ID4gQnV0IGJvdGgg
b2YgdGhlbSBuZWVkIGFjY2VzcyB0byBzb21lIG9mIHRoZSBwYXJhbWV0ZXJzIHByb3ZpZGVkIGlu
DQo+ID4gcnRlX3JjdV9xc2JyX2RxX2NyZWF0ZSBBUEkuIFdlIHdvdWxkIGVuZCB1cCBwYXNzaW5n
IDIgYXJndW1lbnRzIHRvIHRoZQ0KPiBmdW5jdGlvbnMuDQo+IA0KPiBQdXJlIHN0eWxpc2ggdGhp
bmcuDQo+IEZyb20gbXkgcGVyc3BlY3RpdmUgaXQganVzdCBwcm92aWRlcyBiZXR0ZXIgdmlzaWJp
bGl0eSB3aGF0IGlzIGdvaW5nIGluIHRoZSBjb2RlOg0KPiBGb3IgUVNCUiB2YXIgJ3YnIGNyZWF0
ZSBhIG5ldyBkZWZlcnJlZCBxdWV1ZS4NCj4gQnV0IG5vIHN0cm9uZyBvcGluaW9uIGhlcmUuDQo+
IA0KPiA+DQo+ID4gPg0KPiA+ID4gPiArCS8qKjwgUkNVIFFTQlIgdmFyaWFibGUgdG8gdXNlIGZv
ciB0aGlzIGRlZmVyIHF1ZXVlICovIH07DQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8qIFJURSBkZWZl
ciBxdWV1ZSBzdHJ1Y3R1cmUuDQo+ID4gPiA+ICsgKiBUaGlzIHN0cnVjdHVyZSBob2xkcyB0aGUg
ZGVmZXIgcXVldWUuIFRoZSBkZWZlciBxdWV1ZSBpcyB1c2VkDQo+ID4gPiA+ICt0bw0KPiA+ID4g
PiArICogaG9sZCB0aGUgZGVsZXRlZCBlbnRyaWVzIGZyb20gdGhlIGRhdGEgc3RydWN0dXJlIHRo
YXQgYXJlIG5vdA0KPiA+ID4gPiArICogeWV0IGZyZWVkLg0KPiA+ID4gPiArICovDQo+ID4gPiA+
ICtzdHJ1Y3QgcnRlX3JjdV9xc2JyX2RxOw0KPiA+ID4gPiArDQo+ID4gPiA+ICAvKioNCj4gPiA+
ID4gICAqIEB3YXJuaW5nDQo+ID4gPiA+ICAgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJIG1h
eSBjaGFuZ2Ugd2l0aG91dCBwcmlvciBub3RpY2UgQEANCj4gPiA+ID4gLTY0OCw2ICs3MTAsMTEz
IEBAIF9fcnRlX2V4cGVyaW1lbnRhbCAgaW50ICBydGVfcmN1X3FzYnJfZHVtcChGSUxFDQo+ID4g
PiA+ICpmLCBzdHJ1Y3QgcnRlX3JjdV9xc2JyICp2KTsNCj4gPiA+ID4NCj4gPiA+ID4gKy8qKg0K
PiA+ID4gPiArICogQHdhcm5pbmcNCj4gPiA+ID4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBB
UEkgbWF5IGNoYW5nZSB3aXRob3V0IHByaW9yIG5vdGljZQ0KPiA+ID4gPiArICoNCj4gPiA+ID4g
KyAqIENyZWF0ZSBhIHF1ZXVlIHVzZWQgdG8gc3RvcmUgdGhlIGRhdGEgc3RydWN0dXJlIGVsZW1l
bnRzIHRoYXQNCj4gPiA+ID4gK2Nhbg0KPiA+ID4gPiArICogYmUgZnJlZWQgbGF0ZXIuIFRoaXMg
cXVldWUgaXMgcmVmZXJyZWQgdG8gYXMgJ2RlZmVyIHF1ZXVlJy4NCj4gPiA+ID4gKyAqDQo+ID4g
PiA+ICsgKiBAcGFyYW0gcGFyYW1zDQo+ID4gPiA+ICsgKiAgIFBhcmFtZXRlcnMgdG8gY3JlYXRl
IGEgZGVmZXIgcXVldWUuDQo+ID4gPiA+ICsgKiBAcmV0dXJuDQo+ID4gPiA+ICsgKiAgIE9uIHN1
Y2Nlc3MgLSBWYWxpZCBwb2ludGVyIHRvIGRlZmVyIHF1ZXVlDQo+ID4gPiA+ICsgKiAgIE9uIGVy
cm9yIC0gTlVMTA0KPiA+ID4gPiArICogICBQb3NzaWJsZSBydGVfZXJybm8gY29kZXMgYXJlOg0K
PiA+ID4gPiArICogICAtIEVJTlZBTCAtIE5VTEwgcGFyYW1ldGVycyBhcmUgcGFzc2VkDQo+ID4g
PiA+ICsgKiAgIC0gRU5PTUVNIC0gTm90IGVub3VnaCBtZW1vcnkNCj4gPiA+ID4gKyAqLw0KPiA+
ID4gPiArX19ydGVfZXhwZXJpbWVudGFsDQo+ID4gPiA+ICtzdHJ1Y3QgcnRlX3JjdV9xc2JyX2Rx
ICoNCj4gPiA+ID4gK3J0ZV9yY3VfcXNicl9kcV9jcmVhdGUoY29uc3Qgc3RydWN0IHJ0ZV9yY3Vf
cXNicl9kcV9wYXJhbWV0ZXJzDQo+ID4gPiA+ICsqcGFyYW1zKTsNCj4gPiA+ID4gKw0KPiA+ID4g
PiArLyoqDQo+ID4gPiA+ICsgKiBAd2FybmluZw0KPiA+ID4gPiArICogQGIgRVhQRVJJTUVOVEFM
OiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNlDQo+ID4gPiA+ICsgKg0K
PiA+ID4gPiArICogRW5xdWV1ZSBvbmUgcmVzb3VyY2UgdG8gdGhlIGRlZmVyIHF1ZXVlIGFuZCBz
dGFydCB0aGUgZ3JhY2UgcGVyaW9kLg0KPiA+ID4gPiArICogVGhlIHJlc291cmNlIHdpbGwgYmUg
ZnJlZWQgbGF0ZXIgYWZ0ZXIgYXQgbGVhc3Qgb25lIGdyYWNlDQo+ID4gPiA+ICtwZXJpb2QNCj4g
PiA+ID4gKyAqIGlzIG92ZXIuDQo+ID4gPiA+ICsgKg0KPiA+ID4gPiArICogSWYgdGhlIGRlZmVy
IHF1ZXVlIGlzIGZ1bGwsIGl0IHdpbGwgYXR0ZW1wdCB0byByZWNsYWltIHJlc291cmNlcy4NCj4g
PiA+ID4gKyAqIEl0IHdpbGwgYWxzbyByZWNsYWltIHJlc291cmNlcyBhdCByZWd1bGFyIGludGVy
dmFscyB0byBhdm9pZA0KPiA+ID4gPiArICogdGhlIGRlZmVyIHF1ZXVlIGZyb20gZ3Jvd2luZyB0
b28gYmlnLg0KPiA+ID4gPiArICoNCj4gPiA+ID4gKyAqIFRoaXMgQVBJIGlzIG5vdCBtdWx0aS10
aHJlYWQgc2FmZS4gSXQgaXMgZXhwZWN0ZWQgdGhhdCB0aGUNCj4gPiA+ID4gK2NhbGxlcg0KPiA+
ID4gPiArICogcHJvdmlkZXMgbXVsdGktdGhyZWFkIHNhZmV0eSBieSBsb2NraW5nIGEgbXV0ZXgg
b3Igc29tZSBvdGhlciBtZWFucy4NCj4gPiA+ID4gKyAqDQo+ID4gPiA+ICsgKiBBIGxvY2sgZnJl
ZSBtdWx0aS10aHJlYWQgd3JpdGVyIGFsZ29yaXRobSBjb3VsZCBhY2hpZXZlDQo+ID4gPiA+ICtt
dWx0aS10aHJlYWQNCj4gPiA+ID4gKyAqIHNhZmV0eSBieSBjcmVhdGluZyBhbmQgdXNpbmcgb25l
IGRlZmVyIHF1ZXVlIHBlciB0aHJlYWQuDQo+ID4gPiA+ICsgKg0KPiA+ID4gPiArICogQHBhcmFt
IGRxDQo+ID4gPiA+ICsgKiAgIERlZmVyIHF1ZXVlIHRvIGFsbG9jYXRlIGFuIGVudHJ5IGZyb20u
DQo+ID4gPiA+ICsgKiBAcGFyYW0gZQ0KPiA+ID4gPiArICogICBQb2ludGVyIHRvIHJlc291cmNl
IGRhdGEgdG8gY29weSB0byB0aGUgZGVmZXIgcXVldWUuIFRoZSBzaXplIG9mDQo+ID4gPiA+ICsg
KiAgIHRoZSBkYXRhIHRvIGNvcHkgaXMgZXF1YWwgdG8gdGhlIGVsZW1lbnQgc2l6ZSBwcm92aWRl
ZCB3aGVuIHRoZQ0KPiA+ID4gPiArICogICBkZWZlciBxdWV1ZSB3YXMgY3JlYXRlZC4NCj4gPiA+
ID4gKyAqIEByZXR1cm4NCj4gPiA+ID4gKyAqICAgT24gc3VjY2VzcyAtIDANCj4gPiA+ID4gKyAq
ICAgT24gZXJyb3IgLSAxIHdpdGggcnRlX2Vycm5vIHNldCB0bw0KPiA+ID4gPiArICogICAtIEVJ
TlZBTCAtIE5VTEwgcGFyYW1ldGVycyBhcmUgcGFzc2VkDQo+ID4gPiA+ICsgKiAgIC0gRU5PU1BD
IC0gRGVmZXIgcXVldWUgaXMgZnVsbC4gVGhpcyBjb25kaXRpb24gY2FuIG5vdCBoYXBwZW4NCj4g
PiA+ID4gKyAqCQlpZiB0aGUgZGVmZXIgcXVldWUgc2l6ZSBpcyBlcXVhbCAob3IgbGFyZ2VyKSB0
aGFuIHRoZQ0KPiA+ID4gPiArICoJCW51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgZGF0YSBzdHJ1
Y3R1cmUuDQo+ID4gPiA+ICsgKi8NCj4gPiA+ID4gK19fcnRlX2V4cGVyaW1lbnRhbA0KPiA+ID4g
PiAraW50DQo+ID4gPiA+ICtydGVfcmN1X3FzYnJfZHFfZW5xdWV1ZShzdHJ1Y3QgcnRlX3JjdV9x
c2JyX2RxICpkcSwgdm9pZCAqZSk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8qKg0KPiA+ID4gPiAr
ICogQHdhcm5pbmcNCj4gPiA+ID4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNo
YW5nZSB3aXRob3V0IHByaW9yIG5vdGljZQ0KPiA+ID4gPiArICoNCj4gPiA+ID4gKyAqIFJlY2xh
aW0gcmVzb3VyY2VzIGZyb20gdGhlIGRlZmVyIHF1ZXVlLg0KPiA+ID4gPiArICoNCj4gPiA+ID4g
KyAqIFRoaXMgQVBJIGlzIG5vdCBtdWx0aS10aHJlYWQgc2FmZS4gSXQgaXMgZXhwZWN0ZWQgdGhh
dCB0aGUNCj4gPiA+ID4gK2NhbGxlcg0KPiA+ID4gPiArICogcHJvdmlkZXMgbXVsdGktdGhyZWFk
IHNhZmV0eSBieSBsb2NraW5nIGEgbXV0ZXggb3Igc29tZSBvdGhlciBtZWFucy4NCj4gPiA+ID4g
KyAqDQo+ID4gPiA+ICsgKiBBIGxvY2sgZnJlZSBtdWx0aS10aHJlYWQgd3JpdGVyIGFsZ29yaXRo
bSBjb3VsZCBhY2hpZXZlDQo+ID4gPiA+ICttdWx0aS10aHJlYWQNCj4gPiA+ID4gKyAqIHNhZmV0
eSBieSBjcmVhdGluZyBhbmQgdXNpbmcgb25lIGRlZmVyIHF1ZXVlIHBlciB0aHJlYWQuDQo+ID4g
PiA+ICsgKg0KPiA+ID4gPiArICogQHBhcmFtIGRxDQo+ID4gPiA+ICsgKiAgIERlZmVyIHF1ZXVl
IHRvIHJlY2xhaW0gYW4gZW50cnkgZnJvbS4NCj4gPiA+ID4gKyAqIEByZXR1cm4NCj4gPiA+ID4g
KyAqICAgT24gc3VjY2Vzc2Z1bCByZWNsYW1hdGlvbiBvZiBhdCBsZWFzdCAxIHJlc291cmNlIC0g
MA0KPiA+ID4gPiArICogICBPbiBlcnJvciAtIDEgd2l0aCBydGVfZXJybm8gc2V0IHRvDQo+ID4g
PiA+ICsgKiAgIC0gRUlOVkFMIC0gTlVMTCBwYXJhbWV0ZXJzIGFyZSBwYXNzZWQNCj4gPiA+ID4g
KyAqICAgLSBFQUdBSU4gLSBOb25lIG9mIHRoZSByZXNvdXJjZXMgaGF2ZSBjb21wbGV0ZWQgYXQg
bGVhc3QgMSBncmFjZQ0KPiA+ID4gcGVyaW9kLA0KPiA+ID4gPiArICoJCXRyeSBhZ2Fpbi4NCj4g
PiA+ID4gKyAqLw0KPiA+ID4gPiArX19ydGVfZXhwZXJpbWVudGFsDQo+ID4gPiA+ICtpbnQNCj4g
PiA+ID4gK3J0ZV9yY3VfcXNicl9kcV9yZWNsYWltKHN0cnVjdCBydGVfcmN1X3FzYnJfZHEgKmRx
KTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArLyoqDQo+ID4gPiA+ICsgKiBAd2FybmluZw0KPiA+ID4g
PiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Ig
bm90aWNlDQo+ID4gPiA+ICsgKg0KPiA+ID4gPiArICogRGVsZXRlIGEgZGVmZXIgcXVldWUuDQo+
ID4gPiA+ICsgKg0KPiA+ID4gPiArICogSXQgdHJpZXMgdG8gcmVjbGFpbSBhbGwgdGhlIHJlc291
cmNlcyBvbiB0aGUgZGVmZXIgcXVldWUuDQo+ID4gPiA+ICsgKiBJZiBhbnkgb2YgdGhlIHJlc291
cmNlcyBoYXZlIG5vdCBjb21wbGV0ZWQgdGhlIGdyYWNlIHBlcmlvZA0KPiA+ID4gPiArICogdGhl
IHJlY2xhbWF0aW9uIHN0b3BzIGFuZCByZXR1cm5zIGltbWVkaWF0ZWx5LiBUaGUgcmVzdCBvZg0K
PiA+ID4gPiArICogdGhlIHJlc291cmNlcyBhcmUgbm90IHJlY2xhaW1lZCBhbmQgdGhlIGRlZmVy
IHF1ZXVlIGlzIG5vdA0KPiA+ID4gPiArICogZnJlZWQuDQo+ID4gPiA+ICsgKg0KPiA+ID4gPiAr
ICogQHBhcmFtIGRxDQo+ID4gPiA+ICsgKiAgIERlZmVyIHF1ZXVlIHRvIGRlbGV0ZS4NCj4gPiA+
ID4gKyAqIEByZXR1cm4NCj4gPiA+ID4gKyAqICAgT24gc3VjY2VzcyAtIDANCj4gPiA+ID4gKyAq
ICAgT24gZXJyb3IgLSAxDQo+ID4gPiA+ICsgKiAgIFBvc3NpYmxlIHJ0ZV9lcnJubyBjb2RlcyBh
cmU6DQo+ID4gPiA+ICsgKiAgIC0gRUlOVkFMIC0gTlVMTCBwYXJhbWV0ZXJzIGFyZSBwYXNzZWQN
Cj4gPiA+ID4gKyAqICAgLSBFQUdBSU4gLSBTb21lIG9mIHRoZSByZXNvdXJjZXMgaGF2ZSBub3Qg
Y29tcGxldGVkIGF0IGxlYXN0IDENCj4gZ3JhY2UNCj4gPiA+ID4gKyAqCQlwZXJpb2QsIHRyeSBh
Z2Fpbi4NCj4gPiA+ID4gKyAqLw0KPiA+ID4gPiArX19ydGVfZXhwZXJpbWVudGFsDQo+ID4gPiA+
ICtpbnQNCj4gPiA+ID4gK3J0ZV9yY3VfcXNicl9kcV9kZWxldGUoc3RydWN0IHJ0ZV9yY3VfcXNi
cl9kcSAqZHEpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICAjaWZkZWYgX19jcGx1c3BsdXMNCj4gPiA+
ID4gIH0NCj4gPiA+ID4gICNlbmRpZg0KPiA+ID4gPiBkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV9y
Y3UvcnRlX3JjdV9xc2JyX3B2dC5oDQo+ID4gPiA+IGIvbGliL2xpYnJ0ZV9yY3UvcnRlX3JjdV9x
c2JyX3B2dC5oDQo+ID4gPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gPiA+IGluZGV4IDAw
MDAwMDAwMC4uMjEyMmJjMzZhDQo+ID4gPiA+IC0tLSAvZGV2L251bGwNCj4gPiA+ID4gKysrIGIv
bGliL2xpYnJ0ZV9yY3UvcnRlX3JjdV9xc2JyX3B2dC5oDQo+ID4gPg0KPiA+ID4gQWdhaW4gc3R5
bGUgc3VnZ2VzdGlvbjogYXMgaXQgaXMgbm90IHB1YmxpYyBoZWFkZXIgLSBkb24ndCB1c2UgcnRl
Xw0KPiA+ID4gcHJlZml4IGZvciBuYW1pbmcuDQo+ID4gPiBGcm9tIG15IHBlcnNwZWN0aXZlIC0g
ZWFzaWVyIHRvIHJlbGFsaXplIGZvciByZWFkZXIgd2hhdCBpcyBwdWJsaWMNCj4gPiA+IGhlYWRl
ciwgd2hhdCBpcyBub3QuDQo+ID4gTG9va3MgbGlrZSB0aGUgZ3VpZGVsaW5lcyBhcmUgbm90IGRl
ZmluZWQgdmVyeSB3ZWxsLiBJIHNlZSBvbmUgcHJpdmF0ZQ0KPiA+IGZpbGUgd2l0aCBydGVfIHBy
ZWZpeC4gSSBzZWUgU3RlcGhlbiBub3QgdXNpbmcgcnRlXyBwcmVmaXguIEkgZG8gbm90IGhhdmUg
YW55DQo+IHByZWZlcmVuY2UuIEJ1dCwgYSBjb25zaXN0ZW50IGFwcHJvYWNoIGlzIHJlcXVpcmVk
Lg0KPiANCj4gVGhhdCdzIGp1c3QgYSBzdWdnZXN0aW9uLg0KPiBGb3IgbWUgKGFuZCBJIGhvcGUg
Zm9yIG90aGVycykgaXQgd291bGQgYmUgYSBiaXQgZWFzaWVyLg0KPiBXaGVuIGxvb2tpbmcgYXQg
dGhlIGNvZGUgZm9yIGZpcnN0IHRpbWUgSSBoYWQgdG8gbG9vayBhIHQgbWVzb24uYnVpbGQgdG8g
Y2hlY2sgaXMNCj4gaXQgYSBwdWJsaWMgaGVhZGVyIG9yIG5vdC4NCj4gSWYgdGhlIGZpbGUgZG9l
c24ndCBoYXZlICdydGVfJyBwcmVmaXgsIEkgYXNzdW1lIHRoYXQgaXQgaXMgYW4gaW50ZXJuYWwg
b25lDQo+IHN0cmFpZ2h0d2F5Lg0KPiBCdXQgLCBhcyB5b3Ugc2FpZCwgdGhlcmUgaXMgbm8gZXhh
Y3QgZ3VpZGVsaW5lcyBoZXJlLCBzbyB1cCB0byB5b3UgdG8gZGVjaWRlLg0KSSB0aGluayBpdCBt
YWtlcyBzZW5zZSB0byByZW1vdmUgJ3J0ZV8nIHByZWZpeC4gSSB3aWxsIGFsc28gY2hhbmdlIHRo
ZSBmaWxlIG5hbWUgdG8gaGF2ZSAnX3ByaXZhdGUnIHN1ZmZpeC4NClRoZXJlIGFyZSBzb21lIGlu
Y29uc2lzdGVuY2llcyBpbiB0aGUgZXhpc3RpbmcgY29kZSwgd2lsbCBzZW5kIGEgcGF0Y2ggdG8g
Y29ycmVjdCB0aGVtIHRvIGZvbGxvdyB0aGlzIGFwcHJvYWNoLg0KDQo+IA0KPiA+DQo+ID4gPg0K
PiA+ID4gPiBAQCAtMCwwICsxLDQ2IEBADQo+ID4gPiA+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRp
ZmllcjogQlNELTMtQ2xhdXNlDQo+ID4gPiA+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTkgQXJtIExp
bWl0ZWQgICovDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyNpZm5kZWYgX1JURV9SQ1VfUVNCUl9QVlRf
SF8NCj4gPiA+ID4gKyNkZWZpbmUgX1JURV9SQ1VfUVNCUl9QVlRfSF8NCj4gPiA+ID4gKw0KPiA+
ID4gPiArLyoqDQo+ID4gPiA+ICsgKiBUaGlzIGZpbGUgaXMgcHJpdmF0ZSB0byB0aGUgUkNVIGxp
YnJhcnkuIEl0IHNob3VsZCBub3QgYmUNCj4gPiA+ID4gK2luY2x1ZGVkDQo+ID4gPiA+ICsgKiBi
eSB0aGUgdXNlciBvZiB0aGlzIGxpYnJhcnkuDQo+ID4gPiA+ICsgKi8NCj4gPiA+ID4gKw0KPiA+
ID4gPiArI2lmZGVmIF9fY3BsdXNwbHVzDQo+ID4gPiA+ICtleHRlcm4gIkMiIHsNCj4gPiA+ID4g
KyNlbmRpZg0KPiA+ID4gPiArDQo+ID4gPiA+ICsjaW5jbHVkZSAicnRlX3JjdV9xc2JyLmgiDQo+
ID4gPiA+ICsNCj4gPiA+ID4gKy8qIFJURSBkZWZlciBxdWV1ZSBzdHJ1Y3R1cmUuDQo+ID4gPiA+
ICsgKiBUaGlzIHN0cnVjdHVyZSBob2xkcyB0aGUgZGVmZXIgcXVldWUuIFRoZSBkZWZlciBxdWV1
ZSBpcyB1c2VkDQo+ID4gPiA+ICt0bw0KPiA+ID4gPiArICogaG9sZCB0aGUgZGVsZXRlZCBlbnRy
aWVzIGZyb20gdGhlIGRhdGEgc3RydWN0dXJlIHRoYXQgYXJlIG5vdA0KPiA+ID4gPiArICogeWV0
IGZyZWVkLg0KPiA+ID4gPiArICovDQo+ID4gPiA+ICtzdHJ1Y3QgcnRlX3JjdV9xc2JyX2RxIHsN
Cj4gPiA+ID4gKwlzdHJ1Y3QgcnRlX3JjdV9xc2JyICp2OyAvKio8IFJDVSBRU0JSIHZhcmlhYmxl
IHVzZWQgYnkgdGhpcyBxdWV1ZS4qLw0KPiA+ID4gPiArCXN0cnVjdCBydGVfcmluZyAqcjsgICAg
IC8qKjwgUkNVIFFTQlIgZGVmZXIgcXVldWUuICovDQo+ID4gPiA+ICsJdWludDMyX3Qgc2l6ZTsN
Cj4gPiA+ID4gKwkvKio8IE51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgZGVmZXIgcXVldWUgKi8N
Cj4gPiA+ID4gKwl1aW50MzJfdCBlc2l6ZTsNCj4gPiA+ID4gKwkvKio8IFNpemUgKGluIGJ5dGVz
KSBvZiBkYXRhIHN0b3JlZCBvbiB0aGUgZGVmZXIgcXVldWUgKi8NCj4gPiA+ID4gKwlydGVfcmN1
X3FzYnJfZnJlZV9yZXNvdXJjZSBmOw0KPiA+ID4gPiArCS8qKjwgRnVuY3Rpb24gdG8gY2FsbCB0
byBmcmVlIHRoZSByZXNvdXJjZS4gKi8NCj4gPiA+ID4gKwl2b2lkICpwOw0KPiA+ID4gPiArCS8q
KjwgUG9pbnRlciBwYXNzZWQgdG8gdGhlIGZyZWUgZnVuY3Rpb24uIFR5cGljYWxseSwgdGhpcyBp
cyB0aGUNCj4gPiA+ID4gKwkgKiAgIHBvaW50ZXIgdG8gdGhlIGRhdGEgc3RydWN0dXJlIHRvIHdo
aWNoIHRoZSByZXNvdXJjZSB0byBmcmVlDQo+ID4gPiA+ICsJICogICBiZWxvbmdzLg0KPiA+ID4g
PiArCSAqLw0KPiA+ID4gPiArCWNoYXIgZVswXTsNCj4gPiA+ID4gKwkvKio8IFRlbXBvcmFyeSBz
dG9yYWdlIHRvIGNvcHkgdGhlIGRlZmVyIHF1ZXVlIGVsZW1lbnQuICovDQo+ID4gPg0KPiA+ID4g
RG8geW91IHJlYWxseSBuZWVkICdlJyBhdCBhbGw/DQo+ID4gPiBDYW4ndCBpdCBiZSBqdXN0IHRl
bXBvcmFyeSBzdGFjayB2YXJpYWJsZT8NCj4gPiBPaywgd2lsbCBjaGVjay4NCj4gPg0KPiA+ID4N
Cj4gPiA+ID4gK307DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyNpZmRlZiBfX2NwbHVzcGx1cw0KPiA+
ID4gPiArfQ0KPiA+ID4gPiArI2VuZGlmDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyNlbmRpZiAvKiBf
UlRFX1JDVV9RU0JSX1BWVF9IXyAqLw0KPiA+ID4gPiBkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV9y
Y3UvcnRlX3JjdV92ZXJzaW9uLm1hcA0KPiA+ID4gPiBiL2xpYi9saWJydGVfcmN1L3J0ZV9yY3Vf
dmVyc2lvbi5tYXANCj4gPiA+ID4gaW5kZXggZjhiOWVmMmFiLi5kZmFjODhhMzcgMTAwNjQ0DQo+
ID4gPiA+IC0tLSBhL2xpYi9saWJydGVfcmN1L3J0ZV9yY3VfdmVyc2lvbi5tYXANCj4gPiA+ID4g
KysrIGIvbGliL2xpYnJ0ZV9yY3UvcnRlX3JjdV92ZXJzaW9uLm1hcA0KPiA+ID4gPiBAQCAtOCw2
ICs4LDEwIEBAIEVYUEVSSU1FTlRBTCB7DQo+ID4gPiA+ICAJcnRlX3JjdV9xc2JyX3N5bmNocm9u
aXplOw0KPiA+ID4gPiAgCXJ0ZV9yY3VfcXNicl90aHJlYWRfcmVnaXN0ZXI7DQo+ID4gPiA+ICAJ
cnRlX3JjdV9xc2JyX3RocmVhZF91bnJlZ2lzdGVyOw0KPiA+ID4gPiArCXJ0ZV9yY3VfcXNicl9k
cV9jcmVhdGU7DQo+ID4gPiA+ICsJcnRlX3JjdV9xc2JyX2RxX2VucXVldWU7DQo+ID4gPiA+ICsJ
cnRlX3JjdV9xc2JyX2RxX3JlY2xhaW07DQo+ID4gPiA+ICsJcnRlX3JjdV9xc2JyX2RxX2RlbGV0
ZTsNCj4gPiA+ID4NCj4gPiA+ID4gIAlsb2NhbDogKjsNCj4gPiA+ID4gIH07DQo+ID4gPiA+IGRp
ZmYgLS1naXQgYS9saWIvbWVzb24uYnVpbGQgYi9saWIvbWVzb24uYnVpbGQgaW5kZXgNCj4gPiA+
ID4gZTVmZjgzODkzLi4wZTFiZTg0MDcgMTAwNjQ0DQo+ID4gPiA+IC0tLSBhL2xpYi9tZXNvbi5i
dWlsZA0KPiA+ID4gPiArKysgYi9saWIvbWVzb24uYnVpbGQNCj4gPiA+ID4gQEAgLTExLDcgKzEx
LDkgQEANCj4gPiA+ID4gIGxpYnJhcmllcyA9IFsNCj4gPiA+ID4gIAkna3ZhcmdzJywgIyBlYWwg
ZGVwZW5kcyBvbiBrdmFyZ3MNCj4gPiA+ID4gIAknZWFsJywgIyBldmVyeXRoaW5nIGRlcGVuZHMg
b24gZWFsDQo+ID4gPiA+IC0JJ3JpbmcnLCAnbWVtcG9vbCcsICdtYnVmJywgJ25ldCcsICdtZXRl
cicsICdldGhkZXYnLCAncGNpJywgIyBjb3JlDQo+ID4gPiA+ICsJJ3JpbmcnLA0KPiA+ID4gPiAr
CSdyY3UnLCAjIHJjdSBkZXBlbmRzIG9uIHJpbmcNCj4gPiA+ID4gKwknbWVtcG9vbCcsICdtYnVm
JywgJ25ldCcsICdtZXRlcicsICdldGhkZXYnLCAncGNpJywgIyBjb3JlDQo+ID4gPiA+ICAJJ2Nt
ZGxpbmUnLA0KPiA+ID4gPiAgCSdtZXRyaWNzJywgIyBiaXRyYXRlL2xhdGVuY3kgc3RhdHMgZGVw
ZW5kcyBvbiB0aGlzDQo+ID4gPiA+ICAJJ2hhc2gnLCAgICAjIGVmZCBkZXBlbmRzIG9uIHRoaXMN
Cj4gPiA+ID4gQEAgLTIyLDcgKzI0LDcgQEAgbGlicmFyaWVzID0gWw0KPiA+ID4gPiAgCSdncm8n
LCAnZ3NvJywgJ2lwX2ZyYWcnLCAnam9ic3RhdHMnLA0KPiA+ID4gPiAgCSdrbmknLCAnbGF0ZW5j
eXN0YXRzJywgJ2xwbScsICdtZW1iZXInLA0KPiA+ID4gPiAgCSdwb3dlcicsICdwZHVtcCcsICdy
YXdkZXYnLA0KPiA+ID4gPiAtCSdyY3UnLCAncmVvcmRlcicsICdzY2hlZCcsICdzZWN1cml0eScs
ICdzdGFjaycsICd2aG9zdCcsDQo+ID4gPiA+ICsJJ3Jlb3JkZXInLCAnc2NoZWQnLCAnc2VjdXJp
dHknLCAnc3RhY2snLCAndmhvc3QnLA0KPiA+ID4gPiAgCSMgaXBzZWMgbGliIGRlcGVuZHMgb24g
bmV0LCBjcnlwdG8gYW5kIHNlY3VyaXR5DQo+ID4gPiA+ICAJJ2lwc2VjJywNCj4gPiA+ID4gIAkj
IGFkZCBwa3QgZnJhbWV3b3JrIGxpYnMgd2hpY2ggdXNlIG90aGVyIGxpYnMgZnJvbSBhYm92ZQ0K
PiA+ID4gPiAtLQ0KPiA+ID4gPiAyLjE3LjENCg0K