From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <dev-bounces@dpdk.org>
Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124])
	by inbox.dpdk.org (Postfix) with ESMTP id 360E741CEE;
	Mon, 20 Feb 2023 18:21:08 +0100 (CET)
Received: from mails.dpdk.org (localhost [127.0.0.1])
	by mails.dpdk.org (Postfix) with ESMTP id 1BE15430AD;
	Mon, 20 Feb 2023 18:21:08 +0100 (CET)
Received: from frasgout.his.huawei.com (frasgout.his.huawei.com
 [185.176.79.56]) by mails.dpdk.org (Postfix) with ESMTP id CDE3A40395
 for <dev@dpdk.org>; Mon, 20 Feb 2023 18:21:06 +0100 (CET)
Received: from frapeml100006.china.huawei.com (unknown [172.18.147.200])
 by frasgout.his.huawei.com (SkyGuard) with ESMTP id 4PL8GG1HmDz6J7fy;
 Tue, 21 Feb 2023 01:16:22 +0800 (CST)
Received: from frapeml500007.china.huawei.com (7.182.85.172) by
 frapeml100006.china.huawei.com (7.182.85.201) with Microsoft SMTP Server
 (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id
 15.1.2507.17; Mon, 20 Feb 2023 18:21:05 +0100
Received: from frapeml500007.china.huawei.com ([7.182.85.172]) by
 frapeml500007.china.huawei.com ([7.182.85.172]) with mapi id 15.01.2507.017;
 Mon, 20 Feb 2023 18:21:05 +0100
From: Konstantin Ananyev <konstantin.ananyev@huawei.com>
To: Tomasz Duszynski <tduszynski@marvell.com>, Konstantin Ananyev
 <konstantin.v.ananyev@yandex.ru>, "dev@dpdk.org" <dev@dpdk.org>
Subject: RE: [EXT] Re: [PATCH v11 1/4] lib: add generic support for reading
 PMU events
Thread-Topic: [EXT] Re: [PATCH v11 1/4] lib: add generic support for reading
 PMU events
Thread-Index: AQHZQi/0WtsdB195/EyIqAkaKgLk/K7SLcMAgACWeQCAACW00IADXHGAgAFhvFCAAFwJgIAAEWfQ
Date: Mon, 20 Feb 2023 17:21:05 +0000
Message-ID: <f16155a4624d4682a991b21526c8ae9a@huawei.com>
References: <20230213113156.385482-1-tduszynski@marvell.com>
 <20230216175502.3164820-1-tduszynski@marvell.com>
 <20230216175502.3164820-2-tduszynski@marvell.com>
 <4b055bbc-36e5-671c-8117-fb0ee7307d55@yandex.ru>
 <DM4PR18MB43685A2D4112F65069769D09D2A19@DM4PR18MB4368.namprd18.prod.outlook.com>
 <b00d773b3a2d4dd3a81cb67733d8a76a@huawei.com>
 <DM4PR18MB43683E3C58B0A84A5023E835D2A79@DM4PR18MB4368.namprd18.prod.outlook.com>
 <b356335a28654a879dc07ad6a3681f13@huawei.com>
 <DM4PR18MB43685ADA6E197BDADEED73D8D2A49@DM4PR18MB4368.namprd18.prod.outlook.com>
In-Reply-To: <DM4PR18MB43685ADA6E197BDADEED73D8D2A49@DM4PR18MB4368.namprd18.prod.outlook.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-originating-ip: [10.206.138.42]
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
MIME-Version: 1.0
X-CFilter-Loop: Reflected
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.29
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

DQo+ID4+ID4+ID4+IGRpZmYgLS1naXQgYS9saWIvcG11L3J0ZV9wbXUuaCBiL2xpYi9wbXUvcnRl
X3BtdS5oIG5ldyBmaWxlIG1vZGUNCj4gPj4gPj4gPj4gMTAwNjQ0IGluZGV4IDAwMDAwMDAwMDAu
LjZiNjY0YzMzMzYNCj4gPj4gPj4gPj4gLS0tIC9kZXYvbnVsbA0KPiA+PiA+PiA+PiArKysgYi9s
aWIvcG11L3J0ZV9wbXUuaA0KPiA+PiA+PiA+PiBAQCAtMCwwICsxLDIxMiBAQA0KPiA+PiA+PiA+
PiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQ0KPiA+PiA+PiA+PiAr
ICogQ29weXJpZ2h0KGMpIDIwMjMgTWFydmVsbA0KPiA+PiA+PiA+PiArICovDQo+ID4+ID4+ID4+
ICsNCj4gPj4gPj4gPj4gKyNpZm5kZWYgX1JURV9QTVVfSF8NCj4gPj4gPj4gPj4gKyNkZWZpbmUg
X1JURV9QTVVfSF8NCj4gPj4gPj4gPj4gKw0KPiA+PiA+PiA+PiArLyoqDQo+ID4+ID4+ID4+ICsg
KiBAZmlsZQ0KPiA+PiA+PiA+PiArICoNCj4gPj4gPj4gPj4gKyAqIFBNVSBldmVudCB0cmFjaW5n
IG9wZXJhdGlvbnMNCj4gPj4gPj4gPj4gKyAqDQo+ID4+ID4+ID4+ICsgKiBUaGlzIGZpbGUgZGVm
aW5lcyBnZW5lcmljIEFQSSBhbmQgdHlwZXMgbmVjZXNzYXJ5IHRvIHNldHVwDQo+ID4+ID4+ID4+
ICtQTVUgYW5kDQo+ID4+ID4+ID4+ICsgKiByZWFkIHNlbGVjdGVkIGNvdW50ZXJzIGluIHJ1bnRp
bWUuDQo+ID4+ID4+ID4+ICsgKi8NCj4gPj4gPj4gPj4gKw0KPiA+PiA+PiA+PiArI2lmZGVmIF9f
Y3BsdXNwbHVzDQo+ID4+ID4+ID4+ICtleHRlcm4gIkMiIHsNCj4gPj4gPj4gPj4gKyNlbmRpZg0K
PiA+PiA+PiA+PiArDQo+ID4+ID4+ID4+ICsjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPg0K
PiA+PiA+PiA+PiArDQo+ID4+ID4+ID4+ICsjaW5jbHVkZSA8cnRlX2F0b21pYy5oPg0KPiA+PiA+
PiA+PiArI2luY2x1ZGUgPHJ0ZV9icmFuY2hfcHJlZGljdGlvbi5oPiAjaW5jbHVkZSA8cnRlX2Nv
bW1vbi5oPg0KPiA+PiA+PiA+PiArI2luY2x1ZGUgPHJ0ZV9jb21wYXQuaD4gI2luY2x1ZGUgPHJ0
ZV9zcGlubG9jay5oPg0KPiA+PiA+PiA+PiArDQo+ID4+ID4+ID4+ICsvKiogTWF4aW11bSBudW1i
ZXIgb2YgZXZlbnRzIGluIGEgZ3JvdXAgKi8gI2RlZmluZQ0KPiA+PiA+PiA+PiArTUFYX05VTV9H
Uk9VUF9FVkVOVFMgOA0KPiA+PiA+PiA+PiArDQo+ID4+ID4+ID4+ICsvKioNCj4gPj4gPj4gPj4g
KyAqIEEgc3RydWN0dXJlIGRlc2NyaWJpbmcgYSBncm91cCBvZiBldmVudHMuDQo+ID4+ID4+ID4+
ICsgKi8NCj4gPj4gPj4gPj4gK3N0cnVjdCBydGVfcG11X2V2ZW50X2dyb3VwIHsNCj4gPj4gPj4g
Pj4gKwlzdHJ1Y3QgcGVyZl9ldmVudF9tbWFwX3BhZ2UgKm1tYXBfcGFnZXNbTUFYX05VTV9HUk9V
UF9FVkVOVFNdOw0KPiA+PiA+PiA+PiArLyoqPCBhcnJheSBvZiB1c2VyIHBhZ2VzDQo+ID4+ID4q
Lw0KPiA+PiA+PiA+PiArCWludCBmZHNbTUFYX05VTV9HUk9VUF9FVkVOVFNdOyAvKio8IGFycmF5
IG9mIGV2ZW50IGRlc2NyaXB0b3JzICovDQo+ID4+ID4+ID4+ICsJYm9vbCBlbmFibGVkOyAvKio8
IHRydWUgaWYgZ3JvdXAgd2FzIGVuYWJsZWQgb24gcGFydGljdWxhciBsY29yZSAqLw0KPiA+PiA+
PiA+PiArCVRBSUxRX0VOVFJZKHJ0ZV9wbXVfZXZlbnRfZ3JvdXApIG5leHQ7IC8qKjwgbGlzdCBl
bnRyeSAqLyB9DQo+ID4+ID4+ID4+ICtfX3J0ZV9jYWNoZV9hbGlnbmVkOw0KPiA+PiA+PiA+PiAr
DQo+ID4+ID4+ID4+ICsvKioNCj4gPj4gPj4gPj4gKyAqIEEgc3RydWN0dXJlIGRlc2NyaWJpbmcg
YW4gZXZlbnQuDQo+ID4+ID4+ID4+ICsgKi8NCj4gPj4gPj4gPj4gK3N0cnVjdCBydGVfcG11X2V2
ZW50IHsNCj4gPj4gPj4gPj4gKwljaGFyICpuYW1lOyAvKio8IG5hbWUgb2YgYW4gZXZlbnQgKi8N
Cj4gPj4gPj4gPj4gKwl1bnNpZ25lZCBpbnQgaW5kZXg7IC8qKjwgZXZlbnQgaW5kZXggaW50byBm
ZHMvbW1hcF9wYWdlcyAqLw0KPiA+PiA+PiA+PiArCVRBSUxRX0VOVFJZKHJ0ZV9wbXVfZXZlbnQp
IG5leHQ7IC8qKjwgbGlzdCBlbnRyeSAqLyB9Ow0KPiA+PiA+PiA+PiArDQo+ID4+ID4+ID4+ICsv
KioNCj4gPj4gPj4gPj4gKyAqIEEgUE1VIHN0YXRlIGNvbnRhaW5lci4NCj4gPj4gPj4gPj4gKyAq
Lw0KPiA+PiA+PiA+PiArc3RydWN0IHJ0ZV9wbXUgew0KPiA+PiA+PiA+PiArCWNoYXIgKm5hbWU7
IC8qKjwgbmFtZSBvZiBjb3JlIFBNVSBsaXN0ZWQgdW5kZXIgL3N5cy9idXMvZXZlbnRfc291cmNl
L2RldmljZXMgKi8NCj4gPj4gPj4gPj4gKwlydGVfc3BpbmxvY2tfdCBsb2NrOyAvKio8IHNlcmlh
bGl6ZSBhY2Nlc3MgdG8gZXZlbnQgZ3JvdXAgbGlzdCAqLw0KPiA+PiA+PiA+PiArCVRBSUxRX0hF
QUQoLCBydGVfcG11X2V2ZW50X2dyb3VwKSBldmVudF9ncm91cF9saXN0OyAvKio8IGxpc3Qgb2Yg
ZXZlbnQgZ3JvdXBzICovDQo+ID4+ID4+ID4+ICsJdW5zaWduZWQgaW50IG51bV9ncm91cF9ldmVu
dHM7IC8qKjwgbnVtYmVyIG9mIGV2ZW50cyBpbiBhIGdyb3VwICovDQo+ID4+ID4+ID4+ICsJVEFJ
TFFfSEVBRCgsIHJ0ZV9wbXVfZXZlbnQpIGV2ZW50X2xpc3Q7IC8qKjwgbGlzdCBvZiBtYXRjaGlu
ZyBldmVudHMgKi8NCj4gPj4gPj4gPj4gKwl1bnNpZ25lZCBpbnQgaW5pdGlhbGl6ZWQ7IC8qKjwg
aW5pdGlhbGl6YXRpb24gY291bnRlciAqLyB9Ow0KPiA+PiA+PiA+PiArDQo+ID4+ID4+ID4+ICsv
KiogbGNvcmUgZXZlbnQgZ3JvdXAgKi8NCj4gPj4gPj4gPj4gK1JURV9ERUNMQVJFX1BFUl9MQ09S
RShzdHJ1Y3QgcnRlX3BtdV9ldmVudF9ncm91cCwNCj4gPj4gPj4gPj4gK19ldmVudF9ncm91cCk7
DQo+ID4+ID4+ID4+ICsNCj4gPj4gPj4gPj4gKy8qKiBQTVUgc3RhdGUgY29udGFpbmVyICovDQo+
ID4+ID4+ID4+ICtleHRlcm4gc3RydWN0IHJ0ZV9wbXUgcnRlX3BtdTsNCj4gPj4gPj4gPj4gKw0K
PiA+PiA+PiA+PiArLyoqIEVhY2ggYXJjaGl0ZWN0dXJlIHN1cHBvcnRpbmcgUE1VIG5lZWRzIHRv
IHByb3ZpZGUgaXRzIG93bg0KPiA+PiA+PiA+PiArdmVyc2lvbiAqLyAjaWZuZGVmIHJ0ZV9wbXVf
cG1jX3JlYWQgI2RlZmluZQ0KPiA+PiA+PiA+PiArcnRlX3BtdV9wbWNfcmVhZChpbmRleCkgKHsg
MDsgfSkgI2VuZGlmDQo+ID4+ID4+ID4+ICsNCj4gPj4gPj4gPj4gKy8qKg0KPiA+PiA+PiA+PiAr
ICogQHdhcm5pbmcNCj4gPj4gPj4gPj4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5
IGNoYW5nZSB3aXRob3V0IHByaW9yIG5vdGljZQ0KPiA+PiA+PiA+PiArICoNCj4gPj4gPj4gPj4g
KyAqIFJlYWQgUE1VIGNvdW50ZXIuDQo+ID4+ID4+ID4+ICsgKg0KPiA+PiA+PiA+PiArICogQHdh
cm5pbmcgVGhpcyBzaG91bGQgYmUgbm90IGNhbGxlZCBkaXJlY3RseS4NCj4gPj4gPj4gPj4gKyAq
DQo+ID4+ID4+ID4+ICsgKiBAcGFyYW0gcGMNCj4gPj4gPj4gPj4gKyAqICAgUG9pbnRlciB0byB0
aGUgbW1hcHBlZCB1c2VyIHBhZ2UuDQo+ID4+ID4+ID4+ICsgKiBAcmV0dXJuDQo+ID4+ID4+ID4+
ICsgKiAgIENvdW50ZXIgdmFsdWUgcmVhZCBmcm9tIGhhcmR3YXJlLg0KPiA+PiA+PiA+PiArICov
DQo+ID4+ID4+ID4+ICtzdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB1aW50NjRfdA0KPiA+PiA+
PiA+PiArX19ydGVfcG11X3JlYWRfdXNlcnBhZ2Uoc3RydWN0IHBlcmZfZXZlbnRfbW1hcF9wYWdl
ICpwYykgew0KPiA+PiA+PiA+PiArCXVpbnQ2NF90IHdpZHRoLCBvZmZzZXQ7DQo+ID4+ID4+ID4+
ICsJdWludDMyX3Qgc2VxLCBpbmRleDsNCj4gPj4gPj4gPj4gKwlpbnQ2NF90IHBtYzsNCj4gPj4g
Pj4gPj4gKw0KPiA+PiA+PiA+PiArCWZvciAoOzspIHsNCj4gPj4gPj4gPj4gKwkJc2VxID0gcGMt
PmxvY2s7DQo+ID4+ID4+ID4+ICsJCXJ0ZV9jb21waWxlcl9iYXJyaWVyKCk7DQo+ID4+ID4+ID4N
Cj4gPj4gPj4gPkFyZSB5b3Ugc3VyZSB0aGF0IGNvbXBpbGVyX2JhcnJpZXIoKSBpcyBlbm91Z2gg
aGVyZT8NCj4gPj4gPj4gPk9uIHNvbWUgYXJjaHMgQ1BVIGl0c2VsZiBoYXMgZnJlZWRvbSB0byBy
ZS1vcmRlciByZWFkcy4NCj4gPj4gPj4gPk9yIEkgYW0gbWlzc2luZyBzb21ldGhpbmcgb2J2aW91
cyBoZXJlPw0KPiA+PiA+PiA+DQo+ID4+ID4+DQo+ID4+ID4+IEl0J3MgYSBtYXR0ZXIgb2Ygbm90
IGtlZXBpbmcgb2xkIHN0dWZmIGNhY2hlZCBpbiByZWdpc3RlcnMgYW5kDQo+ID4+ID4+IG1ha2lu
ZyBzdXJlIHRoYXQgd2UgaGF2ZSB0d28gcmVhZHMgb2YgbG9jay4gQ1BVIHJlb3JkZXJpbmcgd29u
J3QgZG8NCj4gPj4gPj4gYW55IGhhcm0gaGVyZS4NCj4gPj4gPg0KPiA+PiA+U29ycnksIEkgZGlk
bid0IGdldCB5b3UgaGVyZToNCj4gPj4gPlN1cHBvc2UgQ1BVIHdpbGwgcmUtb3JkZXIgcmVhZHMg
YW5kIHdpbGwgcmVhZCBsb2NrICphZnRlciogaW5kZXggb3Igb2Zmc2V0IHZhbHVlLg0KPiA+PiA+
V291bGRuJ3QgaXQgbWVhbiB0aGF0IGluIHRoYXQgY2FzZSBpbmRleCBhbmQvb3Igb2Zmc2V0IGNh
biBjb250YWluIG9sZC9pbnZhbGlkIHZhbHVlcz8NCj4gPj4gPg0KPiA+Pg0KPiA+PiBUaGlzIG51
bWJlciBpcyBqdXN0IGFuIGluZGljYXRvciB3aGV0aGVyIGtlcm5lbCBkaWQgY2hhbmdlIHNvbWV0
aGluZyBvciBub3QuDQo+ID4NCj4gPllvdSBhcmUgdGFsa2luZyBhYm91dCBwYy0+bG9jaywgcmln
aHQ/DQo+ID5ZZXMsIEkgZG8gdW5kZXJzdGFuZCB0aGF0IGl0IGlzIHNvcnQgb2Ygc2VxbG9jay4N
Cj4gPlRoYXQncyB3aHkgSSBhbSBwdXp6bGVkIHdoeSB3ZSBkbyBub3QgY2FyZSBhYm91dCBwb3Nz
aWJsZSBjcHUgcmVhZC1yZW9yZGVyaW5nLg0KPiA+TWFudWFsIGZvciBwZXJmX2V2ZW50X29wZW4o
KSBhbHNvIGhhcyBhIGNvZGUgc25pcHBldCB3aXRoIGNvbXBpbGVyIGJhcnJpZXIgb25seS4uLg0K
PiA+DQo+ID4+IElmIGNwdSByZW9yZGVyaW5nIHdpbGwgY29tZSBpbnRvIHBsYXkgdGhlbiB0aGlz
IHdpbGwgbm90IGNoYW5nZSBhbnl0aGluZyBmcm9tIHBvdiBvZiB0aGlzIGxvb3AuDQo+ID4+IEFs
bCB3ZSB3YW50IGlzIGZyZXNoIGRhdGEgd2hlbiBuZWVkZWQgYW5kIG5vIGludm9sdmVtZW50IG9m
IGNvbXBpbGVyDQo+ID4+IHdoZW4gaXQgY29tZXMgdG8gcmVvcmRlcmluZyBjb2RlLg0KPiA+DQo+
ID5PaywgY2FuIHlvdSBwcm9iYWJseSBleHBsYWluIHRvIG1lIHdoeSB0aGUgZm9sbG93aW5nIGNv
dWxkIG5vdCBoYXBwZW46DQo+ID5UMDoNCj4gPnBjLT5zZXFsb2NrPT0wOyBwYy0+aW5kZXg9PUkx
OyBwYy0+b2Zmc2V0PT1PMTsNCj4gPlQxOg0KPiA+ICAgICAgY3B1ICMwIHJlYWQgcG11IChkdWUg
dG8gY3B1IHJlYWQgcmVvcmRlciwgd2UgZ2V0IGluZGV4IHZhbHVlIGJlZm9yZSBzZXFsb2NrKToN
Cj4gPiAgICAgICBpbmRleD1wYy0+aW5kZXg7ICAvL2luZGV4PT1JMTsNCj4gPiBUMjoNCj4gPiAg
ICAgIGNwdSAjMSBrZXJuZWwgdmVudF91cGRhdGVfdXNlcnBhZ2U6DQo+ID4gICAgICBwYy0+bG9j
aysrOyAvLyBwYy0+bG9jaz09MQ0KPiA+ICAgICAgcGMtPmluZGV4PUkyOw0KPiA+ICAgICAgcGMt
Pm9mZnNldD1PMjsNCj4gPiAgICAgIC4uLg0KPiA+ICAgICAgcGMtPmxvY2srKzsgLy9wYy0+bG9j
az09Mg0KPiA+VDM6DQo+ID4gICAgICBjcHUgIzAgY29udGludWUgd2l0aCByZWFkIHBtdToNCj4g
PiAgICAgIHNlcT1wYy0+bG9jazsgLy9zZXEgPT0gMg0KPiA+ICAgICAgIG9mZnNldD1wYy0+b2Zm
c2V0OyAvLyBvZmZzZXQgPT0gTzINCj4gPiAgICAgICAuLi4uDQo+ID4gICAgICAgcG1jID0gcnRl
X3BtdV9wbWNfcmVhZChpbmRleCAtIDEpOyAgLy8gTm90ZSB0aGF0IHdlIHJlYWQgYXQgSTEsIG5v
dCBJMg0KPiA+ICAgICAgIG9mZnNldCArPSBwbWM7IC8vb2Zmc2V0ID09IE8yICsgcG1jcmVhZChJ
MS0xKTsNCj4gPiAgICAgICBpZiAocGMtPmxvY2sgPT0gc2VxKSAvLyB0aGV5IGFyZSBlcXVhbCwg
cmV0dXJuDQo+ID4gICAgICAgICAgICAgcmV0dXJuIG9mZnNldDsNCj4gPg0KPiA+T3IsIGl0IGNh
biBoYXBwZW4sIGJ1dCBieSBzb21lIHJlYXNvbiB3ZSBkb24ndCBjYXJlIG11Y2g/DQo+ID4NCj4g
DQo+IFRoaXMgY29kZSBkb2VzIHNlbGYtbW9uaXRvcmluZyBhbmQgdXNlciBwYWdlICh3aG9sZSBn
cm91cCBhY3R1YWxseSkgaXMgcGVyIHRocmVhZCBydW5uaW5nIG9uDQo+IGN1cnJlbnQgY3B1LiBI
ZW5jZSBJIGFtIG5vdCBzdXJlIHdoYXQgYXJlIHlvdSB0cnlpbmcgdG8gcHJvdmUgd2l0aCB0aGF0
IGV4YW1wbGUuDQoNCkkgYW0gbm90IHRyeWluZyB0byBwcm92ZSBhbnl0aGluZyBzbyBmYXIuDQpJ
IGFtIGFza2luZyBpcyBzdWNoIHNpdHVhdGlvbiBwb3NzaWJsZSBvciBub3QsIGFuZCBpZiBub3Qs
IHdoeT8NCk15IGN1cnJlbnQgdW5kZXJzdGFuZGluZyAocG9zc2libHkgd3JvbmcpIGlzIHRoYXQg
YWZ0ZXIgeW91IG1tYXBlZCB0aGVzZSBwYWdlcywNCmtlcm5lbCBzdGlsbCBjYW4gYXN5bmNocm9u
b3VzbHkgdXBkYXRlIHRoZW0uDQpTbywgd2hlbiByZWFkaW5nIHRoZSBkYXRhIGZyb20gdGhlc2Ug
cGFnZXMgeW91IGhhdmUgdG8gY2hlY2sgJ2xvY2snIHZhbHVlIGJlZm9yZSBhbmQNCmFmdGVyIGFj
Y2Vzc2luZyBvdGhlciBkYXRhLg0KSWYgc28sIHdoeSBwb3NzaWJsZSBjcHUgcmVhZC1yZW9yZGVy
aW5nIGRvZXNuJ3QgbWF0dGVyPyAgICANCg0KQWxzbyB0aGVyZSB3YXMgYW5vdGhlciBxdWVzdGlv
biBiZWxvdywgd2hpY2ggeW91IHByb2JhYmx5ICBtaXNzZWQsIHNvIEkgY29waWVkIGl0IGhlcmU6
DQpBbm90aGVyIHF1ZXN0aW9uIC0gZG8gd2UgcmVhbGx5IG5lZWQgIHRvIGhhdmUgX19ydGVfcG11
X3JlYWRfdXNlcnBhZ2UoKSBhbmQgcnRlX3BtdV9yZWFkKCkgYXMNCnN0YXRpYyBpbmxpbmUgZnVu
Y3Rpb25zIGluIHB1YmxpYyBoZWFkZXI/DQpBcyBJIHVuZGVyc3RhbmQsIGJlY2F1c2Ugb2YgdGhh
dCB3ZSBhbHNvIGhhdmUgdG8gbWFrZSAnc3RydWN0IHJ0ZV9wbXVfKicNCmRlZmluaXRpb25zIGFs
c28gcHVibGljLg0KDQo+IA0KPiA+PiA+Pg0KPiA+PiA+PiA+PiArCQlpbmRleCA9IHBjLT5pbmRl
eDsNCj4gPj4gPj4gPj4gKwkJb2Zmc2V0ID0gcGMtPm9mZnNldDsNCj4gPj4gPj4gPj4gKwkJd2lk
dGggPSBwYy0+cG1jX3dpZHRoOw0KPiA+PiA+PiA+PiArDQo+ID4+ID4+ID4+ICsJCS8qIGluZGV4
IHNldCB0byAwIG1lYW5zIHRoYXQgcGFydGljdWxhciBjb3VudGVyIGNhbm5vdCBiZSB1c2VkICov
DQo+ID4+ID4+ID4+ICsJCWlmIChsaWtlbHkocGMtPmNhcF91c2VyX3JkcG1jICYmIGluZGV4KSkg
ew0KPiA+PiA+PiA+PiArCQkJcG1jID0gcnRlX3BtdV9wbWNfcmVhZChpbmRleCAtIDEpOw0KPiA+
PiA+PiA+PiArCQkJcG1jIDw8PSA2NCAtIHdpZHRoOw0KPiA+PiA+PiA+PiArCQkJcG1jID4+PSA2
NCAtIHdpZHRoOw0KPiA+PiA+PiA+PiArCQkJb2Zmc2V0ICs9IHBtYzsNCj4gPj4gPj4gPj4gKwkJ
fQ0KPiA+PiA+PiA+PiArDQo+ID4+ID4+ID4+ICsJCXJ0ZV9jb21waWxlcl9iYXJyaWVyKCk7DQo+
ID4+ID4+ID4+ICsNCj4gPj4gPj4gPj4gKwkJaWYgKGxpa2VseShwYy0+bG9jayA9PSBzZXEpKQ0K
PiA+PiA+PiA+PiArCQkJcmV0dXJuIG9mZnNldDsNCj4gPj4gPj4gPj4gKwl9DQo+ID4+ID4+ID4+
ICsNCj4gPj4gPj4gPj4gKwlyZXR1cm4gMDsNCj4gPj4gPj4gPj4gK30NCj4gPj4gPj4gPj4gKw0K
PiA+PiA+PiA+PiArLyoqDQo+ID4+ID4+ID4+ICsgKiBAd2FybmluZw0KPiA+PiA+PiA+PiArICog
QGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNl
DQo+ID4+ID4+ID4+ICsgKg0KPiA+PiA+PiA+PiArICogRW5hYmxlIGdyb3VwIG9mIGV2ZW50cyBv
biB0aGUgY2FsbGluZyBsY29yZS4NCj4gPj4gPj4gPj4gKyAqDQo+ID4+ID4+ID4+ICsgKiBAd2Fy
bmluZyBUaGlzIHNob3VsZCBiZSBub3QgY2FsbGVkIGRpcmVjdGx5Lg0KPiA+PiA+PiA+PiArICoN
Cj4gPj4gPj4gPj4gKyAqIEByZXR1cm4NCj4gPj4gPj4gPj4gKyAqICAgMCBpbiBjYXNlIG9mIHN1
Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4NCj4gPj4gPj4gPj4gKyAqLw0KPiA+PiA+
PiA+PiArX19ydGVfZXhwZXJpbWVudGFsDQo+ID4+ID4+ID4+ICtpbnQNCj4gPj4gPj4gPj4gK19f
cnRlX3BtdV9lbmFibGVfZ3JvdXAodm9pZCk7DQo+ID4+ID4+ID4+ICsNCj4gPj4gPj4gPj4gKy8q
Kg0KPiA+PiA+PiA+PiArICogQHdhcm5pbmcNCj4gPj4gPj4gPj4gKyAqIEBiIEVYUEVSSU1FTlRB
TDogdGhpcyBBUEkgbWF5IGNoYW5nZSB3aXRob3V0IHByaW9yIG5vdGljZQ0KPiA+PiA+PiA+PiAr
ICoNCj4gPj4gPj4gPj4gKyAqIEluaXRpYWxpemUgUE1VIGxpYnJhcnkuDQo+ID4+ID4+ID4+ICsg
Kg0KPiA+PiA+PiA+PiArICogQHdhcm5pbmcgVGhpcyBzaG91bGQgYmUgbm90IGNhbGxlZCBkaXJl
Y3RseS4NCj4gPj4gPj4gPj4gKyAqDQo+ID4+ID4+ID4+ICsgKiBAcmV0dXJuDQo+ID4+ID4+ID4+
ICsgKiAgIDAgaW4gY2FzZSBvZiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuDQo+
ID4+ID4+ID4+ICsgKi8NCj4gPj4gPj4gPj4gK19fcnRlX2V4cGVyaW1lbnRhbA0KPiA+PiA+PiA+
PiAraW50DQo+ID4+ID4+ID4+ICtydGVfcG11X2luaXQodm9pZCk7DQo+ID4+ID4+ID4+ICsNCj4g
Pj4gPj4gPj4gKy8qKg0KPiA+PiA+PiA+PiArICogQHdhcm5pbmcNCj4gPj4gPj4gPj4gKyAqIEBi
IEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSB3aXRob3V0IHByaW9yIG5vdGljZQ0K
PiA+PiA+PiA+PiArICoNCj4gPj4gPj4gPj4gKyAqIEZpbmFsaXplIFBNVSBsaWJyYXJ5LiBUaGlz
IHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgUE1VIGNvdW50ZXJzIGFyZSBubyBsb25nZXIgYmVpbmcN
Cj4gPnJlYWQuDQo+ID4+ID4+ID4+ICsgKi8NCj4gPj4gPj4gPj4gK19fcnRlX2V4cGVyaW1lbnRh
bA0KPiA+PiA+PiA+PiArdm9pZA0KPiA+PiA+PiA+PiArcnRlX3BtdV9maW5pKHZvaWQpOw0KPiA+
PiA+PiA+PiArDQo+ID4+ID4+ID4+ICsvKioNCj4gPj4gPj4gPj4gKyAqIEB3YXJuaW5nDQo+ID4+
ID4+ID4+ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2Ugd2l0aG91dCBw
cmlvciBub3RpY2UNCj4gPj4gPj4gPj4gKyAqDQo+ID4+ID4+ID4+ICsgKiBBZGQgZXZlbnQgdG8g
dGhlIGdyb3VwIG9mIGVuYWJsZWQgZXZlbnRzLg0KPiA+PiA+PiA+PiArICoNCj4gPj4gPj4gPj4g
KyAqIEBwYXJhbSBuYW1lDQo+ID4+ID4+ID4+ICsgKiAgIE5hbWUgb2YgYW4gZXZlbnQgbGlzdGVk
IHVuZGVyIC9zeXMvYnVzL2V2ZW50X3NvdXJjZS9kZXZpY2VzL3BtdS9ldmVudHMuDQo+ID4+ID4+
ID4+ICsgKiBAcmV0dXJuDQo+ID4+ID4+ID4+ICsgKiAgIEV2ZW50IGluZGV4IGluIGNhc2Ugb2Yg
c3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLg0KPiA+PiA+PiA+PiArICovDQo+ID4+
ID4+ID4+ICtfX3J0ZV9leHBlcmltZW50YWwNCj4gPj4gPj4gPj4gK2ludA0KPiA+PiA+PiA+PiAr
cnRlX3BtdV9hZGRfZXZlbnQoY29uc3QgY2hhciAqbmFtZSk7DQo+ID4+ID4+ID4+ICsNCj4gPj4g
Pj4gPj4gKy8qKg0KPiA+PiA+PiA+PiArICogQHdhcm5pbmcNCj4gPj4gPj4gPj4gKyAqIEBiIEVY
UEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSB3aXRob3V0IHByaW9yIG5vdGljZQ0KPiA+
PiA+PiA+PiArICoNCj4gPj4gPj4gPj4gKyAqIFJlYWQgaGFyZHdhcmUgY291bnRlciBjb25maWd1
cmVkIHRvIGNvdW50IG9jY3VycmVuY2VzIG9mIGFuIGV2ZW50Lg0KPiA+PiA+PiA+PiArICoNCj4g
Pj4gPj4gPj4gKyAqIEBwYXJhbSBpbmRleA0KPiA+PiA+PiA+PiArICogICBJbmRleCBvZiBhbiBl
dmVudCB0byBiZSByZWFkLg0KPiA+PiA+PiA+PiArICogQHJldHVybg0KPiA+PiA+PiA+PiArICog
ICBFdmVudCB2YWx1ZSByZWFkIGZyb20gcmVnaXN0ZXIuIEluIGNhc2Ugb2YgZXJyb3JzIG9yIGxh
Y2sgb2Ygc3VwcG9ydA0KPiA+PiA+PiA+PiArICogICAwIGlzIHJldHVybmVkLiBJbiBvdGhlciB3
b3Jkcywgc3RyZWFtIG9mIHplcm9zIGluIGEgdHJhY2UgZmlsZQ0KPiA+PiA+PiA+PiArICogICBp
bmRpY2F0ZXMgcHJvYmxlbSB3aXRoIHJlYWRpbmcgcGFydGljdWxhciBQTVUgZXZlbnQgcmVnaXN0
ZXIuDQo+ID4+ID4+ID4+ICsgKi8NCj4gPg0KPiA+QW5vdGhlciBxdWVzdGlvbiAtIGRvIHdlIHJl
YWxseSBuZWVkICB0byBoYXZlIF9fcnRlX3BtdV9yZWFkX3VzZXJwYWdlKCkgYW5kIHJ0ZV9wbXVf
cmVhZCgpIGFzDQo+ID5zdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyBpbiBwdWJsaWMgaGVhZGVyPw0K
PiA+QXMgSSB1bmRlcnN0YW5kLCBiZWNhdXNlIG9mIHRoYXQgd2UgYWxzbyBoYXZlIHRvIG1ha2Ug
J3N0cnVjdCBydGVfcG11XyonDQo+ID5kZWZpbml0aW9ucyBhbHNvIHB1YmxpYy4NCj4gPg0KPiA+
PiA+PiA+PiArX19ydGVfZXhwZXJpbWVudGFsDQo+ID4+ID4+ID4+ICtzdGF0aWMgX19ydGVfYWx3
YXlzX2lubGluZSB1aW50NjRfdCBydGVfcG11X3JlYWQodW5zaWduZWQgaW50DQo+ID4+ID4+ID4+
ICtpbmRleCkgew0KPiA+PiA+PiA+PiArCXN0cnVjdCBydGVfcG11X2V2ZW50X2dyb3VwICpncm91
cCA9ICZSVEVfUEVSX0xDT1JFKF9ldmVudF9ncm91cCk7DQo+ID4+ID4+ID4+ICsJaW50IHJldDsN
Cj4gPj4gPj4gPj4gKw0KPiA+PiA+PiA+PiArCWlmICh1bmxpa2VseSghcnRlX3BtdS5pbml0aWFs
aXplZCkpDQo+ID4+ID4+ID4+ICsJCXJldHVybiAwOw0KPiA+PiA+PiA+PiArDQo+ID4+ID4+ID4+
ICsJaWYgKHVubGlrZWx5KCFncm91cC0+ZW5hYmxlZCkpIHsNCj4gPj4gPj4gPj4gKwkJcmV0ID0g
X19ydGVfcG11X2VuYWJsZV9ncm91cCgpOw0KPiA+PiA+PiA+PiArCQlpZiAocmV0KQ0KPiA+PiA+
PiA+PiArCQkJcmV0dXJuIDA7DQo+ID4+ID4+ID4+ICsJfQ0KPiA+PiA+PiA+PiArDQo+ID4+ID4+
ID4+ICsJaWYgKHVubGlrZWx5KGluZGV4ID49IHJ0ZV9wbXUubnVtX2dyb3VwX2V2ZW50cykpDQo+
ID4+ID4+ID4+ICsJCXJldHVybiAwOw0KPiA+PiA+PiA+PiArDQo+ID4+ID4+ID4+ICsJcmV0dXJu
IF9fcnRlX3BtdV9yZWFkX3VzZXJwYWdlKGdyb3VwLT5tbWFwX3BhZ2VzW2luZGV4XSk7DQo+ID4+
ID4+ID4+ICt9DQo+ID4+ID4+ID4+ICsNCj4gPj4gPj4gPj4gKyNpZmRlZiBfX2NwbHVzcGx1cw0K
PiA+PiA+PiA+PiArfQ0KPiA+PiA+PiA+PiArI2VuZGlmDQo+ID4+ID4+ID4+ICsNCg0K