From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 7EA78A0350; Mon, 22 Jun 2020 10:41:25 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 3949E1D5E0; Mon, 22 Jun 2020 10:41:24 +0200 (CEST) Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on2082.outbound.protection.outlook.com [40.107.21.82]) by dpdk.org (Postfix) with ESMTP id 45F161D5DF for ; Mon, 22 Jun 2020 10:41:22 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ci18mmW7iS6q2MYZVL7Kwacp/Rt4UpZEP3EOiPUbQMAgpmV5DftBmBd83YbRWepO4653YW08JOHt9wEqm4VVK5iNZzc5ObeIphtK6Jhf13x7MP+TJwzRstpIpDd5/s6sf3tbjmqyceaNPL5S5ClAW0T8N8yfJNqiti41i8QSuIv90faKqWclw+YPhLlu8UKJmBj69fRDZ8x/ZEfD6cQbcQFNQte+VRChNLMHgfKPajGH2ymEwqjOwjl7tLawiowl35UMrLm/5dTmNMXTt4fmc2CbhttzVrFr/4sUBpDulM34MnjP16zdlAhY96z3QvpKhN8rG/vDGLFotCEPN1d/gw== 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=eeiFfRVUYYzUJ9WCJu8DLECyURlaOmVZExs4RvOHhFo=; b=Ft9n0k7NGIRxBm1lyd7lR0GsmAlSVjXov/2kO7cwhXeI1puLh6yhyL/Cw5h6CQLPhQTIoZXC/MF+x+TCG2z12bQ8ySzrPFv5zPM5Dpe6jZXKYbdJXeCDbTabBfxRW8I9qVE/xmZoHWJR4lLdMRxVmLpqiiXTDdf1EJYjuQTpzfFqClmqjF/q6Alntwrd/Bf/zIdSPJlryd/zK5+poiXRzYjAok8mp3RDH7dRoftGvZUiE0/1SdL4b8GrZeAk4gS8rS3Udjorpvejc7dZupg72PwTuKPtozbmeX3DviYjPTERgxPZX32ghdZQXEb+2tkEsIq0lI018Uf9FDHLT4Tn1w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=mellanox.com; dmarc=pass action=none header.from=mellanox.com; dkim=pass header.d=mellanox.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=eeiFfRVUYYzUJ9WCJu8DLECyURlaOmVZExs4RvOHhFo=; b=d614c65RBQ6DnyT2p39akMhHySBStbTdcwB8ObHSfTrvXzucbZOYz4PW08jkH1+esrm3WUbnUoBNNF9yAoxeXhEvIt1o/CDycIA7i07BA+vy7DZsvho+cSVdedKJHEscwX1xiC7EGN3ZUn4zaOwaxJB1rlxieAgRfizfXpbFSqA= Received: from AM0PR0502MB4019.eurprd05.prod.outlook.com (2603:10a6:208:f::11) by AM0PR0502MB3761.eurprd05.prod.outlook.com (2603:10a6:208:24::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3109.21; Mon, 22 Jun 2020 08:41:21 +0000 Received: from AM0PR0502MB4019.eurprd05.prod.outlook.com ([fe80::b189:d782:4c74:7998]) by AM0PR0502MB4019.eurprd05.prod.outlook.com ([fe80::b189:d782:4c74:7998%7]) with mapi id 15.20.3109.027; Mon, 22 Jun 2020 08:41:21 +0000 From: Matan Azrad To: Maxime Coquelin , Xiao Wang CC: "dev@dpdk.org" Thread-Topic: [PATCH v1 3/4] vhost: improve device ready definition Thread-Index: AQHWRY1+WLgdYR0e1E+Ph0x8zoCWqqjfjwYAgAA4hqCAAC+iAIACniawgAG2/YCAAAcQgA== Date: Mon, 22 Jun 2020 08:41:20 +0000 Message-ID: References: <1592497686-433697-1-git-send-email-matan@mellanox.com> <1592497686-433697-4-git-send-email-matan@mellanox.com> <631a3cf3-f21a-b292-b475-93552d8f73e8@redhat.com> <96191de9-63bd-0937-5bdd-d81e9db14e9f@redhat.com> <74f35cd8-3543-ba1c-0dc7-1502599e6cf7@redhat.com> In-Reply-To: <74f35cd8-3543-ba1c-0dc7-1502599e6cf7@redhat.com> Accept-Language: en-US, he-IL Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: redhat.com; dkim=none (message not signed) header.d=none;redhat.com; dmarc=none action=none header.from=mellanox.com; x-originating-ip: [77.124.38.174] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: 16b58798-25a5-4219-195a-08d8168809e4 x-ms-traffictypediagnostic: AM0PR0502MB3761: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:10000; x-forefront-prvs: 0442E569BC x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: LxgROAjTCMnOSZkm1b/37TAO+3/zee0I1dZ9r2CUfRKI7Ma+wqwqkl+0Y9Ed/8lomsykgN+mvpHXmdNYN8R8fBffxGIymHjY9oVPrFBkikZOOFN/RR6UcoipyRGOuLGofExKL/UJC98eY+/4m6Jb8GlRd3VhABnMMUT5Cpb5FZFHMXpcX8kg39UIu7/hIl3lqIu3DOsuTZWjMZYwCPKntNT3NbKbHPJCPaSLe73TfRaxzGeD6m8CSUw44d6bxW2b4B0Gm6N4/uE7uQSmZahSKkLUpxppb9aWZX/CMJ8b301UjabtD1xtCXarV1cWEt+5yyI6LmIQKZmO6wZDz0GSeg== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM0PR0502MB4019.eurprd05.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(4636009)(39860400002)(136003)(396003)(346002)(366004)(376002)(7696005)(66946007)(66556008)(64756008)(26005)(76116006)(33656002)(66476007)(66446008)(186003)(53546011)(86362001)(71200400001)(2906002)(6506007)(478600001)(8936002)(316002)(5660300002)(30864003)(83380400001)(8676002)(9686003)(52536014)(4326008)(110136005)(55016002); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata: rm2xvn6PMXwyAC2fWwjXXz8Uag02Vc0EbbEv+0qxRj+WCx52zg6qitYKTCakxQeXhn60446+yI//xXbXMT/l6cMk4KgN0AqI9PlpgkYqlMOUoQK/QsFxgtyIxJj/2NiGy77f5zNGriP2za1ODh+VMXfMCJ8cq8IENDNsl4A7Zl4UwXTVvkyhV03JtdDJ/h2CkBq1pHPPFmWSGQIKzOgbwUIKmDmO/eXBCfwmQNfDN/qE7UgOMlk+MmiBRACzUlarxX5ltc13EQyMpkJKX8Vq5SUf7Q9gUaRTj58iM8NjXm8M/xy4S39iRaslC359hS7KsC8gzlpD4QVCcoS8NFYP2zh5MSTtR80ctUrCHSHfklmqNtIfXp+YJCLGOazNw3Y+1DwxaP0+F4UjQI1myIIo5TB6ewPHb0CaB06hH99ZnUgsgN7eTIwApHS2mkxyfr3uvK7SpkGa5U1ZwEeZaRJY7+E6r3cvBXYMbNqAZf2xTTY= x-ms-exchange-transport-forked: True Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: 16b58798-25a5-4219-195a-08d8168809e4 X-MS-Exchange-CrossTenant-originalarrivaltime: 22 Jun 2020 08:41:20.8782 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: hwtmAiWue/MfvnlXCcAJ6qD+/R7I3+624nmliaxgqJaYJVczn5ZjYNc3Z5OAjL6Dike2u47eqlh5zC+zJD+g5A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR0502MB3761 Subject: Re: [dpdk-dev] [PATCH v1 3/4] vhost: improve device ready definition X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" DQoNCkZyb206IE1heGltZSBDb3F1ZWxpbg0KPiBIaSwNCj4gDQo+IE9uIDYvMjEvMjAgODoyMCBB TSwgTWF0YW4gQXpyYWQgd3JvdGU6DQo+ID4gSGkgTWF4aW1lDQo+ID4NCj4gPiBGcm9tOiBNYXhp bWUgQ29xdWVsaW46DQo+ID4+IEhpIE1hdGFuLA0KPiA+Pg0KPiA+PiBPbiA2LzE5LzIwIDM6MTEg UE0sIE1hdGFuIEF6cmFkIHdyb3RlOg0KPiA+Pj4gSGkgTWF4aW1lDQo+ID4+Pg0KPiA+Pj4gVGhh bmtzIGZvciB0aGUgZmFzdCByZXZpZXcuDQo+ID4+PiBUaGlzIGlzIGZpcnN0IHZlcnNpb24sIGxl dCdzIHJldmlldyBpdCBjYXJlZnVsbHkgdG8gYmUgc3VyZSBpdCBpcyBjb3JyZWN0Lg0KPiA+Pj4g QFhpYW8gV2FuZywgaXQgd2lsbCBiZSBnb29kIHRvIGhlYXIgeW91ciBpZGVhIHRvby4NCj4gPj4+ IFdlIGFsc28gbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBlZmZlY3Qgb24gSUZDIGRyaXZlci9kZXZp Y2UuLi4NCj4gPj4+IEp1c3QgdG8gdXBkYXRlIHRoYXQgSSBjaGVja2VkIHRoaXMgY29kZSB3aXRo IHRoZSBtbHg1IGFkanVzdG1lbnRzDQo+ID4+PiBhbmQgSQ0KPiA+PiBzZW50IGluIHRoaXMgc2Vy aWVzLg0KPiA+Pj4gSXQgd29ya3Mgd2VsbCB3aXRoIHRoZSB2RFBBIGV4YW1wbGUgYXBwbGljYXRp b24uDQo+ID4+DQo+ID4+IE9LLg0KPiA+Pg0KPiA+Pj4gRnJvbTogTWF4aW1lIENvcXVlbGluOg0K PiA+Pj4+IE9uIDYvMTgvMjAgNjoyOCBQTSwgTWF0YW4gQXpyYWQgd3JvdGU6DQo+ID4+Pj4+IFNv bWUgZ3Vlc3QgZHJpdmVycyBtYXkgbm90IGNvbmZpZ3VyZSBkaXNhYmxlZCB2aXJ0aW8gcXVldWVz Lg0KPiA+Pj4+Pg0KPiA+Pj4+PiBJbiB0aGlzIGNhc2UsIHRoZSB2aG9zdCBtYW5hZ2VtZW50IG5l dmVyIHRyaWdnZXJzIHRoZSB2RFBBIGRldmljZQ0KPiA+Pj4+PiBjb25maWd1cmF0aW9uIGJlY2F1 c2UgaXQgd2FpdHMgdG8gdGhlIGRldmljZSB0byBiZSByZWFkeS4NCj4gPj4+Pg0KPiA+Pj4+IFRo aXMgaXMgbm90IHZEUEEtb25seSwgZXZlbiB3aXRoIFNXIGRhdGFwYXRoIHRoZSBhcHBsaWNhdGlv bidzDQo+ID4+Pj4gbmV3X2RldmljZSBjYWxsYmFjayBuZXZlciBnZXRzIGNhbGxlZC4NCj4gPj4+ Pg0KPiA+Pj4gWWVzLCBJIHdyb3RlIGl0IGJlbG93LCBJIGNhbiBiZSBtb3JlIHNwZWNpZmljIGhl cmUgdG9vIGluIHRoZSBuZXh0IHZlcnNpb24uDQo+ID4+Pg0KPiA+Pj4+PiBUaGUgY3VycmVudCBy ZWFkeSBzdGF0ZSBtZWFucyB0aGF0IGFsbCB0aGUgdmlydGlvIHF1ZXVlcyBzaG91bGQgYmUNCj4g Pj4+Pj4gY29uZmlndXJlZCByZWdhcmRsZXNzIHRoZSBlbmFibGVtZW50IHN0YXR1cy4NCj4gPj4+ Pj4NCj4gPj4+Pj4gSW4gb3JkZXIgdG8gc3VwcG9ydCB0aGlzIGNhc2UsIHRoaXMgcGF0Y2ggY2hh bmdlcyB0aGUgcmVhZHkgc3RhdGU6DQo+ID4+Pj4+IFRoZSBkZXZpY2UgaXMgcmVhZHkgd2hlbiBh dCBsZWFzdCAxIHF1ZXVlIHBhaXIgaXMgY29uZmlndXJlZCBhbmQNCj4gPj4+Pj4gZW5hYmxlZC4N Cj4gPj4+Pj4NCj4gPj4+Pj4gU28sIG5vdywgdGhlIHZEUEEgZHJpdmVyIHdpbGwgYmUgY29uZmln dXJlZCB3aGVuIHRoZSBmaXJzdCBxdWV1ZQ0KPiA+Pj4+PiBwYWlyIGlzIGNvbmZpZ3VyZWQgYW5k IGVuYWJsZWQuDQo+ID4+Pj4+DQo+ID4+Pj4+IEFsc28gdGhlIHF1ZXVlIHN0YXRlIG9wZXJhdGlv biBpcyBjaGFuZ2UgdG8gdGhlIG5leHQgcnVsZXM6DQo+ID4+Pj4+IAkxLiBxdWV1ZSBiZWNvbWVz IHJlYWR5IChlbmFibGVkIGFuZCBmdWxseSBjb25maWd1cmVkKSAtDQo+ID4+Pj4+IAkJc2V0X3Zy aW5nX3N0YXRlKGVuYWJsZWQpLg0KPiA+Pj4+PiAJMi4gcXVldWUgYmVjb21lcyBub3QgcmVhZHkg LSBzZXRfdnJpbmdfc3RhdGUoZGlzYWJsZWQpLg0KPiA+Pj4+PiAJMy4gcXVldWUgc3RheSByZWFk eSBhbmQgVkhPU1RfVVNFUl9TRVRfVlJJTkdfRU5BQkxFIG1hc3NhZ2UNCj4gPj4+PiB3YXMNCj4g Pj4+Pj4gCQloYW5kbGVkIC0gc2V0X3ZyaW5nX3N0YXRlKGVuYWJsZWQpLg0KPiA+Pj4+Pg0KPiA+ Pj4+PiBUaGUgcGFyYWxsZWwgb3BlcmF0aW9ucyBmb3IgdGhlIGFwcGxpY2F0aW9uIGFyZSBhZGp1 c3RlZCB0b28uDQo+ID4+Pj4+DQo+ID4+Pj4+IFNpZ25lZC1vZmYtYnk6IE1hdGFuIEF6cmFkIDxt YXRhbkBtZWxsYW5veC5jb20+DQo+ID4+Pj4+IC0tLQ0KPiA+Pj4+PiAgbGliL2xpYnJ0ZV92aG9z dC92aG9zdF91c2VyLmMgfCA1MQ0KPiA+Pj4+PiArKysrKysrKysrKysrKysrKysrKysrKysrKysr LS0tLS0tLS0tLS0tLS0tDQo+ID4+Pj4+ICAxIGZpbGUgY2hhbmdlZCwgMzMgaW5zZXJ0aW9ucygr KSwgMTggZGVsZXRpb25zKC0pDQo+ID4+Pj4+DQo+ID4+Pj4+IGRpZmYgLS1naXQgYS9saWIvbGli cnRlX3Zob3N0L3Zob3N0X3VzZXIuYw0KPiA+Pj4+PiBiL2xpYi9saWJydGVfdmhvc3Qvdmhvc3Rf dXNlci5jIGluZGV4IGIwODQ5YjkuLmNmZDVmMjcgMTAwNjQ0DQo+ID4+Pj4+IC0tLSBhL2xpYi9s aWJydGVfdmhvc3Qvdmhvc3RfdXNlci5jDQo+ID4+Pj4+ICsrKyBiL2xpYi9saWJydGVfdmhvc3Qv dmhvc3RfdXNlci5jDQo+ID4+Pj4+IEBAIC0xMjk1LDcgKzEyOTUsNyBAQA0KPiA+Pj4+PiAgew0K PiA+Pj4+PiAgCWJvb2wgcmluZ3Nfb2s7DQo+ID4+Pj4+DQo+ID4+Pj4+IC0JaWYgKCF2cSkNCj4g Pj4+Pj4gKwlpZiAoIXZxIHx8ICF2cS0+ZW5hYmxlZCkNCj4gPj4+Pj4gIAkJcmV0dXJuIGZhbHNl Ow0KPiA+Pj4+Pg0KPiA+Pj4+PiAgCWlmICh2cV9pc19wYWNrZWQoZGV2KSkNCj4gPj4+Pj4gQEAg LTEzMDksMjQgKzEzMDksMjcgQEANCj4gPj4+Pj4gIAkgICAgICAgdnEtPmNhbGxmZCAhPSBWSVJU SU9fVU5JTklUSUFMSVpFRF9FVkVOVEZEOyAgfQ0KPiA+Pj4+Pg0KPiA+Pj4+PiArI2RlZmluZSBW SVJUSU9fREVWX05VTV9WUVNfVE9fQkVfUkVBRFkgMnUNCj4gPj4+Pj4gKw0KPiA+Pj4+PiAgc3Rh dGljIGludA0KPiA+Pj4+PiAgdmlydGlvX2lzX3JlYWR5KHN0cnVjdCB2aXJ0aW9fbmV0ICpkZXYp ICB7DQo+ID4+Pj4+ICAJc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnE7DQo+ID4+Pj4+ICAJdWlu dDMyX3QgaTsNCj4gPj4+Pj4NCj4gPj4+Pj4gLQlpZiAoZGV2LT5ucl92cmluZyA9PSAwKQ0KPiA+ Pj4+PiArCWlmIChkZXYtPm5yX3ZyaW5nIDwgVklSVElPX0RFVl9OVU1fVlFTX1RPX0JFX1JFQURZ KQ0KPiA+Pj4+PiAgCQlyZXR1cm4gMDsNCj4gPj4+Pj4NCj4gPj4+Pj4gLQlmb3IgKGkgPSAwOyBp IDwgZGV2LT5ucl92cmluZzsgaSsrKSB7DQo+ID4+Pj4+ICsJZm9yIChpID0gMDsgaSA8IFZJUlRJ T19ERVZfTlVNX1ZRU19UT19CRV9SRUFEWTsgaSsrKSB7DQo+ID4+Pj4+ICAJCXZxID0gZGV2LT52 aXJ0cXVldWVbaV07DQo+ID4+Pj4+DQo+ID4+Pj4+ICAJCWlmICghdnFfaXNfcmVhZHkoZGV2LCB2 cSkpDQo+ID4+Pj4+ICAJCQlyZXR1cm4gMDsNCj4gPj4+Pj4gIAl9DQo+ID4+Pj4+DQo+ID4+Pj4+ IC0JVkhPU1RfTE9HX0NPTkZJRyhJTkZPLA0KPiA+Pj4+PiAtCQkidmlydGlvIGlzIG5vdyByZWFk eSBmb3IgcHJvY2Vzc2luZy5cbiIpOw0KPiA+Pj4+PiArCWlmICghKGRldi0+ZmxhZ3MgJiBWSVJU SU9fREVWX1JFQURZKSkNCj4gPj4+Pj4gKwkJVkhPU1RfTE9HX0NPTkZJRyhJTkZPLA0KPiA+Pj4+ PiArCQkJInZpcnRpbyBpcyBub3cgcmVhZHkgZm9yIHByb2Nlc3NpbmcuXG4iKTsNCj4gPj4+Pj4g IAlyZXR1cm4gMTsNCj4gPj4+Pj4gIH0NCj4gPj4+Pj4NCj4gPj4+Pj4gQEAgLTE5NzAsOCArMTk3 Myw2IEBAIHN0YXRpYyBpbnQgdmhvc3RfdXNlcl9zZXRfdnJpbmdfZXJyKHN0cnVjdA0KPiA+Pj4+ IHZpcnRpb19uZXQgKipwZGV2IF9fcnRlX3VudXNlZCwNCj4gPj4+Pj4gIAlzdHJ1Y3QgdmlydGlv X25ldCAqZGV2ID0gKnBkZXY7DQo+ID4+Pj4+ICAJaW50IGVuYWJsZSA9IChpbnQpbXNnLT5wYXls b2FkLnN0YXRlLm51bTsNCj4gPj4+Pj4gIAlpbnQgaW5kZXggPSAoaW50KW1zZy0+cGF5bG9hZC5z dGF0ZS5pbmRleDsNCj4gPj4+Pj4gLQlzdHJ1Y3QgcnRlX3ZkcGFfZGV2aWNlICp2ZHBhX2RldjsN Cj4gPj4+Pj4gLQlpbnQgZGlkID0gLTE7DQo+ID4+Pj4+DQo+ID4+Pj4+ICAJaWYgKHZhbGlkYXRl X21zZ19mZHMobXNnLCAwKSAhPSAwKQ0KPiA+Pj4+PiAgCQlyZXR1cm4gUlRFX1ZIT1NUX01TR19S RVNVTFRfRVJSOyBAQCAtMTk4MCwxNSArMTk4MSw2DQo+IEBAIHN0YXRpYw0KPiA+Pj4+PiBpbnQg dmhvc3RfdXNlcl9zZXRfdnJpbmdfZXJyKHN0cnVjdA0KPiA+Pj4+IHZpcnRpb19uZXQgKipwZGV2 IF9fcnRlX3VudXNlZCwNCj4gPj4+Pj4gIAkJInNldCBxdWV1ZSBlbmFibGU6ICVkIHRvIHFwIGlk eDogJWRcbiIsDQo+ID4+Pj4+ICAJCWVuYWJsZSwgaW5kZXgpOw0KPiA+Pj4+Pg0KPiA+Pj4+PiAt CWRpZCA9IGRldi0+dmRwYV9kZXZfaWQ7DQo+ID4+Pj4+IC0JdmRwYV9kZXYgPSBydGVfdmRwYV9n ZXRfZGV2aWNlKGRpZCk7DQo+ID4+Pj4+IC0JaWYgKHZkcGFfZGV2ICYmIHZkcGFfZGV2LT5vcHMt PnNldF92cmluZ19zdGF0ZSkNCj4gPj4+Pj4gLQkJdmRwYV9kZXYtPm9wcy0+c2V0X3ZyaW5nX3N0 YXRlKGRldi0+dmlkLCBpbmRleCwNCj4gZW5hYmxlKTsNCj4gPj4+Pj4gLQ0KPiA+Pj4+PiAtCWlm IChkZXYtPm5vdGlmeV9vcHMtPnZyaW5nX3N0YXRlX2NoYW5nZWQpDQo+ID4+Pj4+IC0JCWRldi0+ bm90aWZ5X29wcy0+dnJpbmdfc3RhdGVfY2hhbmdlZChkZXYtPnZpZCwNCj4gPj4+Pj4gLQkJCQlp bmRleCwgZW5hYmxlKTsNCj4gPj4+Pj4gLQ0KPiA+Pj4+PiAgCS8qIE9uIGRpc2FibGUsIHJpbmdz IGhhdmUgdG8gYmUgc3RvcHBlZCBiZWluZyBwcm9jZXNzZWQuICovDQo+ID4+Pj4+ICAJaWYgKCFl bmFibGUgJiYgZGV2LT5kZXF1ZXVlX3plcm9fY29weSkNCj4gPj4+Pj4gIAkJZHJhaW5fem1idWZf bGlzdChkZXYtPnZpcnRxdWV1ZVtpbmRleF0pOw0KPiA+Pj4+PiBAQCAtMjYyMiwxMSArMjYxNCwx MyBAQCB0eXBlZGVmIGludA0KPiA+Pj4+ICgqdmhvc3RfbWVzc2FnZV9oYW5kbGVyX3QpKHN0cnVj dCB2aXJ0aW9fbmV0ICoqcGRldiwNCj4gPj4+Pj4gIAlzdHJ1Y3QgdmlydGlvX25ldCAqZGV2Ow0K PiA+Pj4+PiAgCXN0cnVjdCBWaG9zdFVzZXJNc2cgbXNnOw0KPiA+Pj4+PiAgCXN0cnVjdCBydGVf dmRwYV9kZXZpY2UgKnZkcGFfZGV2Ow0KPiA+Pj4+PiArCWJvb2wgcmVhZHlbVkhPU1RfTUFYX1ZS SU5HXTsNCj4gPj4+Pj4gIAlpbnQgZGlkID0gLTE7DQo+ID4+Pj4+ICAJaW50IHJldDsNCj4gPj4+ Pj4gIAlpbnQgdW5sb2NrX3JlcXVpcmVkID0gMDsNCj4gPj4+Pj4gIAlib29sIGhhbmRsZWQ7DQo+ ID4+Pj4+ICAJaW50IHJlcXVlc3Q7DQo+ID4+Pj4+ICsJdWludDMyX3QgaTsNCj4gPj4+Pj4NCj4g Pj4+Pj4gIAlkZXYgPSBnZXRfZGV2aWNlKHZpZCk7DQo+ID4+Pj4+ICAJaWYgKGRldiA9PSBOVUxM KQ0KPiA+Pj4+PiBAQCAtMjY2OCw2ICsyNjYyLDEwIEBAIHR5cGVkZWYgaW50DQo+ID4+ICgqdmhv c3RfbWVzc2FnZV9oYW5kbGVyX3QpKHN0cnVjdA0KPiA+Pj4+IHZpcnRpb19uZXQgKipwZGV2LA0K PiA+Pj4+PiAgCQlWSE9TVF9MT0dfQ09ORklHKERFQlVHLCAiRXh0ZXJuYWwgcmVxdWVzdCAlZFxu IiwNCj4gPj4+PiByZXF1ZXN0KTsNCj4gPj4+Pj4gIAl9DQo+ID4+Pj4+DQo+ID4+Pj4+ICsJLyog U2F2ZSByZWFkeSBzdGF0dXMgZm9yIGFsbCB0aGUgVlFzIGJlZm9yZSBtZXNzYWdlIGhhbmRsZS4N Cj4gKi8NCj4gPj4+Pj4gKwlmb3IgKGkgPSAwOyBpIDwgVkhPU1RfTUFYX1ZSSU5HOyBpKyspDQo+ ID4+Pj4+ICsJCXJlYWR5W2ldID0gdnFfaXNfcmVhZHkoZGV2LCBkZXYtPnZpcnRxdWV1ZVtpXSk7 DQo+ID4+Pj4+ICsNCj4gPj4+Pg0KPiA+Pj4+IFRoaXMgYmlnIGFycmF5IGNhbiBiZSBhdm9pZGVk IGlmIHlvdSBzYXZlIHRoZSByZWFkeSBzdGF0dXMgaW4gdGhlDQo+ID4+Pj4gdmlydHF1ZXVlIG9u Y2UgbWVzc2FnZSBoYXZlIGJlZW4gaGFuZGxlZC4NCj4gPj4+DQo+ID4+PiBZb3UgbWVhbiB5b3Ug cHJlZmVyIHRvIHNhdmUgaXQgaW4gdmlydHF1ZXVlIHN0cnVjdHVyZT8gRGVzbid0IGl0DQo+ID4+ PiBzYW1lDQo+ID4+IG1lbW9yeSA/DQo+ID4+PiBJbiBhbnkgY2FzZSBJIGRvbid0IHRoaW5rIDB4 MTAwIGlzIHNvIGJpZyDwn5iKDQo+ID4+DQo+ID4+IEkgbWVhbiBpbiB0aGUgc3RhY2suDQo+ID4N Cj4gPiBEbyB5b3UgdGhpbmsgdGhhdCAyNTZCIGlzIHRvbyBtdWNoIGZvciBzdGFjaz8NCj4gPg0K PiA+PiBBbmQgb25lIGFkdmFudGFnZSBvZiBzYXZpbmcgaXQgaW4gdGhlIHZxIHN0cnVjdHVyZSBp cyBmb3IgZXhhbXBsZSB5b3UNCj4gPj4gaGF2ZSBtZW1vcnkgaG90cGx1Zy4gVGhlIHZxIGlzIGlu IHJlYWR5IHN0YXRlIGluIHRoZSBiZWdpbm5pbmcgYW5kIGluDQo+ID4+IHRoZSBlbmQsIGJ1dCBk dXJpbmcgdGhlIGhhbmRsaW5nIHRoZSByaW5nIGhvc3QgdmlydHVhbCBhZGRyZXNzZXMgZ2V0DQo+ ID4+IGNoYW5nZWQgYmVjYXVzZSBvZiB0aGUgbXVubWFwL21tYXAgYW5kIHdlIG5lZWQgdG8gbm90 aWZ5IHRoZSBkcml2ZXINCj4gb3RoZXJ3aXNlIGl0IHdpbGwgbWlzcyBpdC4NCj4gPg0KPiA+IERv IHlvdSBtZWFuIFZIT1NUX1VTRVJfU0VUX01FTV9UQUJMRSBjYWxsIGFmdGVyIGZpcnN0IGNvbmZp Z3VyYXRpb24/DQo+ID4NCj4gPiBJIGRvbid0IHVuZGVyc3RhbmQgd2hhdCBpcyB0aGUgaXNzdWUg b2Ygc2F2aW5nIGl0IGluIHN0YWNrIGhlcmUuLi4uDQo+IA0KPiBUaGUgaXNzdWUgaXMgaWYgeW91 IG9ubHkgY2hlY2sgcmVhZHkgc3RhdGUgb25seSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBtZXNzYWdl DQo+IGFmZmVjdGluZyB0aGUgcmluZyBpcyBoYW5kbGVkLCBpdCBjYW4gYmUgcmVhZHkgYXQgYm90 aCBzdGFnZXMsIHdoaWxlIHRoZSByaW5ncw0KPiBoYXZlIGNoYW5nZWQgYW5kIHN0YXRlIGNoYW5n ZSBjYWxsYmFjayBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZC4NCg0KQnV0IGluIHRoaXMgdmVyc2lv biBJIGNoZWNrZWQgdHdpY2UsIGJlZm9yZSBtZXNzYWdlIGhhbmRsZXIgYW5kIGFmdGVyIG1lc3Nh Z2UgaGFuZGxlciwgc28gaXQgc2hvdWxkIGNhdGNoIGFueSB1cGRhdGUuDQoNCkluIGFueSBjYXNl LCBhcyBJIHNhaWQsIEkgd2lsbCBtb3ZlIHRoZSByZWFkeSBtZW1vcnkgdG8gdGhlIHZpcnRpcXVl dWUgc3RydWN0dXJlIGluIG9yZGVyIHRvIHNhdmUgdGhlIGNoZWNrIGJlZm9yZSB0aGUgbWVzc2Fn ZSBoYW5kbGVyLg0KIA0KPiBQbGVhc2UgY2hlY2sgdGhlIGV4YW1wbGUgcGF0Y2ggSSBzZW50IG9u IEZyaWRheSwgaXQgdGFrZXMgY2FyZSBvZiBpbnZhbGlkYXRpbmcNCj4gdGhlIHJpbmcgc3RhdGUg YW5kIGNhbGwgdGhlIHN0YXRlIGNoYW5nZSBjYWxsYmFjay4NCj4gDQo+ID4gQnV0IG9uZSBhZHZh bnRhZ2Ugb2Ygc2F2aW5nIGl0IGluIHZpcnRxdWV1ZSBzdHJ1Y3R1cmUgaXMgdGhhdCB0aGUgbWVz c2FnZQ0KPiBoYW5kbGVyIHNob3VsZCBub3QgY2hlY2sgdGhlIHJlYWR5IHN0YXRlIGJlZm9yZSBl YWNoIG1lc3NhZ2UuDQo+ID4NCj4gPiBJIHdpbGwgY2hhbmdlIGl0IGluIG5leHQgdmVyc2lvbi4N Cj4gPg0KPiA+Pj4NCj4gPj4+Pj4gIAlyZXQgPSB2aG9zdF91c2VyX2NoZWNrX2FuZF9hbGxvY19x dWV1ZV9wYWlyKGRldiwgJm1zZyk7DQo+ID4+Pj4+ICAJaWYgKHJldCA8IDApIHsNCj4gPj4+Pj4g IAkJVkhPU1RfTE9HX0NPTkZJRyhFUlIsDQo+ID4+Pj4+IEBAIC0yODAyLDYgKzI4MDAsMjUgQEAg dHlwZWRlZiBpbnQNCj4gPj4gKCp2aG9zdF9tZXNzYWdlX2hhbmRsZXJfdCkoc3RydWN0DQo+ID4+ Pj4gdmlydGlvX25ldCAqKnBkZXYsDQo+ID4+Pj4+ICAJCXJldHVybiAtMTsNCj4gPj4+Pj4gIAl9 DQo+ID4+Pj4+DQo+ID4+Pj4+ICsJZGlkID0gZGV2LT52ZHBhX2Rldl9pZDsNCj4gPj4+Pj4gKwl2 ZHBhX2RldiA9IHJ0ZV92ZHBhX2dldF9kZXZpY2UoZGlkKTsNCj4gPj4+Pj4gKwkvKiBVcGRhdGUg cmVhZHkgc3RhdHVzLiAqLw0KPiA+Pj4+PiArCWZvciAoaSA9IDA7IGkgPCBWSE9TVF9NQVhfVlJJ Tkc7IGkrKykgew0KPiA+Pj4+PiArCQlib29sIGN1cl9yZWFkeSA9IHZxX2lzX3JlYWR5KGRldiwg ZGV2LQ0KPiA+dmlydHF1ZXVlW2ldKTsNCj4gPj4+Pj4gKw0KPiA+Pj4+PiArCQlpZiAoKGN1cl9y ZWFkeSAmJiByZXF1ZXN0ID09DQo+ID4+Pj4gVkhPU1RfVVNFUl9TRVRfVlJJTkdfRU5BQkxFICYm DQo+ID4+Pj4+ICsJCQkJaSA9PSBtc2cucGF5bG9hZC5zdGF0ZS5pbmRleCkgfHwNCj4gPj4+Pg0K PiA+Pj4+IENvdWxkbid0IHdlIHJlbW92ZSBhYm92ZSBjb25kaXRpb24/IEFyZW4ndCB0aGUgY2Fs bGJhY2tzIGFscmVhZHkNCj4gPj4+PiBjYWxsZWQgaW4gdGhlIHNldF92cmluZ19lbmFibGUgaGFu ZGxlcj8NCj4gPj4+DQo+ID4+PiBBcyB3ZSBhZ3JlZWQgaW4gdGhlIGRlc2lnbiBkaXNjdXNzaW9u Og0KPiA+Pj4NCj4gPj4+ICIgMy4gU2FtZSBoYW5kbGluZyBvZiB0aGUgcmVxdWVzdHMsIGV4Y2Vw dCB0aGF0IHdlIHdvbid0IG5vdGlmeSB0aGUNCj4gPj4+IHZkcGEgZHJpdmVyIGFuZCB0aGUgYXBw bGljYXRpb24gb2YgdnJpbmcgc3RhdGUgY2hhbmdlcyBpbiB0aGUNCj4gPj4+IFZIT1NUX1VTRVJf U0VUX1ZSSU5HX0VOQUJMRSBoYW5kbGVyLiINCj4gPj4+DQo+ID4+PiBTbywgSSByZW1vdmVkIGl0 IGZyb20gdGhlIHNldF92cmluZ19lbmFibGUgaGFuZGxlci4NCj4gPj4NCj4gPj4gTXkgYmFkLCB0 aGUgcGF0Y2ggY29udGV4dCB3aGVyZSBpdCBpcyByZW1vdmVkIG1hZGUgdG8gdGhpbmsgaXQgd2Fz IGluDQo+ID4+IHZob3N0X3VzZXJfc2V0X3ZyaW5nX2VycigpLCBzbyBJIG1pc3NlZCBpdC4NCj4g Pj4NCj4gPj4gVGhpbmtpbmcgYXQgaXQgYWdhaW4gc2luY2UgbGFzdCB0aW1lIHdlIGRpc2N1c3Nl ZCBpdCwgd2UgaGF2ZSB0byBzZW5kDQo+ID4+IHRoZSBub3RpZmljYXRpb24gZnJvbSB0aGUgaGFu ZGxlciBpbiB0aGUgY2FzZQ0KPiA+Pg0KPiA+Pj4gTm93LCB0aGUgcmVhZHkgc3RhdGUgZG9lc24n dCBkZXBlbmQgb25seSBpbg0KPiA+PiBWSE9TVF9VU0VSX1NFVF9WUklOR19FTkFCTEUgbWFzc2Fn ZS4NCj4gPj4+DQo+ID4+Pj4+ICsJCQkJY3VyX3JlYWR5ICE9IHJlYWR5W2ldKSB7DQo+ID4+Pj4+ ICsJCQlpZiAodmRwYV9kZXYgJiYgdmRwYV9kZXYtPm9wcy0NCj4gPnNldF92cmluZ19zdGF0ZSkN Cj4gPj4+Pj4gKwkJCQl2ZHBhX2Rldi0+b3BzLQ0KPiA+c2V0X3ZyaW5nX3N0YXRlKGRldi0+dmlk LCBpLA0KPiA+Pj4+PiArDQo+ID4+Pj4gCShpbnQpY3VyX3JlYWR5KTsNCj4gPj4+Pj4gKw0KPiA+ Pj4+PiArCQkJaWYgKGRldi0+bm90aWZ5X29wcy0+dnJpbmdfc3RhdGVfY2hhbmdlZCkNCj4gPj4+ Pj4gKwkJCQlkZXYtPm5vdGlmeV9vcHMtDQo+ID52cmluZ19zdGF0ZV9jaGFuZ2VkKGRldi0NCj4g Pj4+Pj4gdmlkLA0KPiA+Pj4+PiArCQkJCQkJCWksDQo+IChpbnQpY3VyX3JlYWR5KTsNCj4gPj4+ Pj4gKwkJfQ0KPiA+Pj4+PiArCX0NCj4gPj4+Pg0KPiA+Pj4+IEkgdGhpbmsgd2Ugc2hvdWxkIG1v dmUgdGhpcyBpbnRvIGEgZGVkaWNhdGVkIGZ1bmN0aW9uLCB3aGljaCB3ZQ0KPiA+Pj4+IHdvdWxk IGNhbGwgaW4gZXZlcnkgbWVzc2FnZSBoYW5kbGVyIHRoYXQgY2FuIG1vZGlmeSB0aGUgcmVhZHkg c3RhdGUuDQo+ID4+Pj4NCj4gPj4+PiBEb2luZyBzbywgd2Ugd291bGQgbm90IGhhdmUgdG8gYXNz dW1lIHRoZSBtYXN0ZXIgc2VudCB1cyBkaXNhYmxlDQo+ID4+Pj4gcmVxdWVzdCBmb3IgdGhlIHF1 ZXVlIGJlZm9yZSwgYW5zIGFsc28gd291bGQgaGF2ZSBwcm9wZXINCj4gPj4+PiBzeW5jaHJvbml6 YXRpb24gaWYgdGhlIHJlcXVlc3QgdXNlcyByZXBseS1hY2sgZmVhdHVyZSBhcyBpdCBjb3VsZA0K PiA+Pj4+IGFzc3VtZSB0aGUgYmFja2VuZCBpcyBubyBtb3JlIHByb2Nlc3NpbmcgdGhlIHJpbmcg b25jZSByZXBseS1hY2sgaXMNCj4gPj4gcmVjZWl2ZWQuDQo+ID4+Pg0KPiA+Pj4gTWFrZXMgc2Vu c2UgdG8gZG8gaXQgYmVmb3JlIHJlcGx5LWFjayBhbmQgdG8gY3JlYXRlIGRlZGljYXRlZA0KPiA+ Pj4gZnVuY3Rpb24gdG8NCj4gPj4gaXQuDQo+ID4+Pg0KPiA+Pj4gRG9lbid0IHRoZSB2RFBBIGNv bmYgc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgcmVwbHktYWNrIHRvbyB0byBiZQ0KPiA+Pj4gc3Vy ZQ0KPiA+PiBxdWV1ZXMgYXJlIHJlYWR5IGJlZm9yZSByZXBseT8NCj4gPj4NCj4gPj4gSSBkb24n dCB0aGluayBzbywgYmVjYXVzZSB0aGUgYmFja2VuZCBjYW4gc3RhcnQgcHJvY2Vzc2luZyB0aGUg cmluZyBhZnRlci4NCj4gPj4gV2hhdCB3ZSBkb24ndCB3YW50IGlzIHRoYXQgdGhlIGJhY2tlbmQg Y29udGludWVzIHRvIHByb2Nlc3MgdGhlIHJpbmdzDQo+ID4+IHdoZW4gdGhlIGd1ZXN0IGFza2Vk IHRvIHN0b3AgZG9pbmcgaXQuDQo+ID4NCj4gPiBCdXQgImRvaW5nIGNvbmZpZ3VyYXRpb24gYWZ0 ZXIgcmVwbHkiIG1heSBjYXVzZSB0aGF0IHRoZSBhIGd1ZXN0IGtpY2tzIGENCj4gcXVldWUgd2hp bGUgYXBwIFwgdkRQQSBkcml2ZXIgaXMgYmVpbmcgY29uZmlndXJlZC4NCj4gPiBJdCBtYXkgbGVh ZCB0byBzb21lIG9yZGVyIGRlcGVuZGVuY2llcyBpbiBjb25maWd1cmF0aW9uLi4uLg0KPiBJIGdl dCB5b3VyIHBvaW50LCB3ZSBjYW4gdHJ5IHRvIG1vdmUgdGhlIGNvbmZpZ3VyYXRpb24gYmVmb3Jl IHRoZSByZXBseS4NCj4gDQo+IEJ1dCBsb29raW5nIGF0IHFlbXUgc291cmNlIGNvZGUsIG5laXRo ZXIgU0VUX1ZSSU5HX0tJQ0sgbm9yDQo+IFNFVF9WUklOR19DQUxMIG5vciBTRVRfVlJJTkdfRU5B QkxFIHJlcXVlc3QgZm9yIHJlcGx5LWFjaywgc28gaXQgd29uJ3QNCj4gaGF2ZSBhbnkgZWZmZWN0 Lg0KPiANCj4gPiBJbiBhZGRpdGlvbiwgbm93LCB0aGUgZGV2aWNlIHJlYWR5IHN0YXRlIGJlY29t ZXMgb24gb25seSBpbiB0aGUgc2FtZQ0KPiA+IHRpbWUgdGhhdCBhIHF1ZXVlIGJlY29tZXMgb24s IHNvIHdlIGNhbiBkbyB0aGUgZGV2aWNlIHJlYWR5IGNoZWNrIChmb3INCj4gbmV3X2RldmljZSBc IGRldl9jb25mIGNhbGxzKSBvbmx5IHdoZW4gYSBxdWV1ZSBiZWNvbWVzIHJlYWR5IGluIHRoZSBz YW1lDQo+IGZ1bmN0aW9uLg0KPiANCj4gSWYgeW91IHdhbnQsIHdlIGNhbiBkbyB0cnkgdGhhdCB0 b28uDQo+IA0KPiA+Pj4gSWYgc28sIHdlIHNob3VsZCBtb3ZlIGFsc28gdGhlIGRldmljZSByZWFk eSBjb2RlIGJlbG93IChtYXliZSBhbHNvDQo+ID4+PiB2ZHBhDQo+ID4+IGNvbmYpIHRvIHRoaXMg ZnVuY3Rpb24gdG9vLg0KPiA+Pg0KPiA+PiBTbyBJIGRvbid0IHRoaW5rIGl0IGlzIG5lZWRlZC4N Cj4gPj4+IEJ1dCBtYXliZSBjYWxsIGl0IGRpcmVjdGx5IGZyb20gdGhpcyBmdW5jdGlvbiBhbmQg bm90IGZyb20gdGhlDQo+ID4+PiBzcGVjaWZpYw0KPiA+PiBtYXNzYWdlIGhhbmRsZXJzIGlzIGJl dHRlciwgc29tZXRoaW5nIGxpa2UgdGhlDQo+ID4+IHZob3N0X3VzZXJfY2hlY2tfYW5kX2FsbG9j X3F1ZXVlX3BhaXIgZnVuY3Rpb24gc3R5bGUuDQo+ID4+Pg0KPiA+Pj4gV2hhdCBkbyB5b3UgdGhp bms/DQo+ID4NCj4gPiBBbnkgYW5zd2VyIGhlcmU/DQo+IA0KPiBUbyBtb3ZlIHRoZSAubmV3X2Rl dmljZSBhbmQgLmRldl9jb25mIGNhbGxiYWNrcyBpbiB0aGUgc2FtZSBmb25jdGlvbiB0aGF0DQo+ IHNlbmRzIHRoZSB2cmluZyBjaGFuZ2Ugbm90aWZpY2F0aW9ucz8gWWVzLCB3ZSBjYW4gZG8gdGhh dCBJIHRoaW5rLg0KPiANCj4gPj4+DQo+ID4+Pj4+ICAJaWYgKCEoZGV2LT5mbGFncyAmIFZJUlRJ T19ERVZfUlVOTklORykgJiYgdmlydGlvX2lzX3JlYWR5KGRldikpIHsNCj4gPj4+Pj4gIAkJZGV2 LT5mbGFncyB8PSBWSVJUSU9fREVWX1JFQURZOw0KPiA+Pj4+Pg0KPiA+Pj4+PiBAQCAtMjgxNiw4 ICsyODMzLDYgQEAgdHlwZWRlZiBpbnQNCj4gPj4gKCp2aG9zdF9tZXNzYWdlX2hhbmRsZXJfdCko c3RydWN0DQo+ID4+Pj4gdmlydGlvX25ldCAqKnBkZXYsDQo+ID4+Pj4+ICAJCX0NCj4gPj4+Pj4g IAl9DQo+ID4+Pj4+DQo+ID4+Pj4+IC0JZGlkID0gZGV2LT52ZHBhX2Rldl9pZDsNCj4gPj4+Pj4g LQl2ZHBhX2RldiA9IHJ0ZV92ZHBhX2dldF9kZXZpY2UoZGlkKTsNCj4gPj4+Pj4gIAlpZiAodmRw YV9kZXYgJiYgdmlydGlvX2lzX3JlYWR5KGRldikgJiYNCj4gPj4+Pj4gIAkJCSEoZGV2LT5mbGFn cyAmIFZJUlRJT19ERVZfVkRQQV9DT05GSUdVUkVEKQ0KPiA+Pj4+ICYmDQo+ID4+Pj4+ICAJCQlt c2cucmVxdWVzdC5tYXN0ZXIgPT0NCj4gPj4+PiBWSE9TVF9VU0VSX1NFVF9WUklOR19DQUxMKSB7 DQo+ID4+Pj4NCj4gPj4+PiBTaG91bGRuJ3QgY2hlY2sgb24gU0VUX1ZSSU5HX0NBTEwgYWJvdmUg YmUgcmVtb3ZlZD8NCj4gPj4+DQo+ID4+PiBJc24ndCBpdCBpcyBhIHdvcmthcm91bmQgZm9yIHNv bWV0aGluZz8NCj4gPj4+DQo+ID4+DQo+ID4+IE5vcm1hbGx5LCB3ZSBzaG91bGQgbm8gbW9yZSBu ZWVkIGl0LCBhcyBzdGF0ZSBjaGFuZ2Ugbm90aWZpY2F0aW9uDQo+ID4+IHdpbGwgYmUgc2VudCBp ZiBjYWxsZmQgY2FtZSB0byBjaGFuZ2UuDQo+ID4NCj4gPiBPaywgd2lsbCByZW1vdmUgaXQuDQo+ ID4NCg0K