Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp3472718imm; Mon, 4 Jun 2018 04:17:50 -0700 (PDT) X-Google-Smtp-Source: ADUXVKLieBy8gEluZwVraZRAqNxk0sVuZavpwx9FbQHBNKzKFmcIcLnwfMD7UDnAHm2QEjdv8r+v X-Received: by 2002:a62:581:: with SMTP id 123-v6mr21080106pff.38.1528111070458; Mon, 04 Jun 2018 04:17:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1528111070; cv=none; d=google.com; s=arc-20160816; b=s2rHKjJZaD3pF3iBSwj3IiWn3827urvA50z5cqtl6QVphOrs5h8S79fjKXnlN9HtCM OdceDsYqM8L5y6pWvUv0mJeYcNc8VX/mvzZHy4WmHVUpXHK6D2P9q7vbTL+4N77bLvMr QvC5YCWvT9iOReAM1RlTXhzaSA3MjBa4OsmOZvPlOhDrUaGxw2IsBIIkPKyu7CoWzOj5 q/k2Gz6Z2nqNJlllsal+YK82PUMiEeAtlQQblkE3dHOOx6uGF37DLYN9cfqEw71X64h/ jYz1m1KkjV0LtwKTwPT5oyhF3JYz/m2nAVt5/52slsHlLA4irE+gkLH8k7HMaUFm382X 78ug== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :content-id:spamdiagnosticmetadata:spamdiagnosticoutput :content-language:accept-language:in-reply-to:references:message-id :date:thread-index:thread-topic:subject:cc:to:from:dkim-signature :arc-authentication-results; bh=MmMMB7N5/xTR4ZxmL+Kkr71ZzWF3fQtJahuNT47k148=; b=UdjS+bKAsBF4s0YocjLJP3hvO4zzuDdWReTVu/v6tZSxCtGKoUgQafv2pl++2Z9i8G msMp9lD2qIPk4dM6s7y6csqfyJ8bFAzkuBk2Vs/h5MFAC+e5mpA97VHJ3C2uSZS5oTmN +pFk7bEajZx30tiV1itN7dGlZpMIojPynsuWOvVcD8g3Sgsh1/37Ltx0M6ZmNbfR+oNH dYo3EthKUsTeQBP91kQzMeSXMXN6uxdLJVNC/ADv2KY+tI3I9M/+5p6ctf530zFewkrY UEHqixwtIRMR5vQ+KOQWC3cjPYndWkvbgKjYXUF6zvy1jTA5sJg9LObptpRrqPVOOt4q Kjqg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@cnexlabs.onmicrosoft.com header.s=selector1-cnexlabs-com header.b=LDpWbQmn; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id o62-v6si3497715pfg.5.2018.06.04.04.17.35; Mon, 04 Jun 2018 04:17:50 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@cnexlabs.onmicrosoft.com header.s=selector1-cnexlabs-com header.b=LDpWbQmn; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752667AbeFDLP4 (ORCPT + 99 others); Mon, 4 Jun 2018 07:15:56 -0400 Received: from mail-by2nam01on0055.outbound.protection.outlook.com ([104.47.34.55]:3983 "EHLO NAM01-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752628AbeFDLPy (ORCPT ); Mon, 4 Jun 2018 07:15:54 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cnexlabs.onmicrosoft.com; s=selector1-cnexlabs-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=MmMMB7N5/xTR4ZxmL+Kkr71ZzWF3fQtJahuNT47k148=; b=LDpWbQmnt38LtQ8wbOSYebl4a7BRKeBHW7XpdYvMNK/vunb1LLAXok2JnnPaAA4ZAHidiu9TUR+jpwq4fBLOAJLqcqN8dCWam5KxWu38hZTXvO5vQaf+w32hxk4yq3iZ1XbtWKW9KaIwTASWHn2swSYhUeK2Zah708I1k3nd6tI= Received: from CO2PR06MB538.namprd06.prod.outlook.com (10.141.199.23) by CO2PR06MB602.namprd06.prod.outlook.com (10.141.229.19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.820.14; Mon, 4 Jun 2018 11:15:50 +0000 Received: from CO2PR06MB538.namprd06.prod.outlook.com ([fe80::592c:a66:2681:242d]) by CO2PR06MB538.namprd06.prod.outlook.com ([fe80::592c:a66:2681:242d%16]) with mapi id 15.20.0820.015; Mon, 4 Jun 2018 11:15:50 +0000 From: Javier Gonzalez To: "Dziegielewski, Marcin" CC: =?utf-8?B?TWF0aWFzIEJqw7hybGluZw==?= , Jens Axboe , "linux-block@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "Konopko, Igor J" Subject: Re: [GIT PULL 18/20] lightnvm: pblk: handle case when mw_cunits equals to 0 Thread-Topic: [GIT PULL 18/20] lightnvm: pblk: handle case when mw_cunits equals to 0 Thread-Index: AQHT9nNowv/ltW4OykevBDGzU2j6naRP61UAgAADYQCAAA4IgIAAASGA Date: Mon, 4 Jun 2018 11:15:50 +0000 Message-ID: <3A87DF02-6471-4B92-9DDC-4E0FD98249A4@cnexlabs.com> References: <20180528085841.26684-1-mb@lightnvm.io> <20180528085841.26684-19-mb@lightnvm.io> <54B2CCDB-B869-4087-8AE2-2AC73381B1FF@cnexlabs.com> <9FC4315EA6BEAA449828D92CF173A10D3E382351@IRSMSX109.ger.corp.intel.com> <3B216FC2-D5EB-4A36-8946-27307DA3D1B1@cnexlabs.com> <9FC4315EA6BEAA449828D92CF173A10D3E3833ED@IRSMSX109.ger.corp.intel.com> In-Reply-To: <9FC4315EA6BEAA449828D92CF173A10D3E3833ED@IRSMSX109.ger.corp.intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=javier@cnexlabs.com; x-originating-ip: [193.106.164.198] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;CO2PR06MB602;7:5YLaizOdisKM5QFm5zliuY5qppZfuk3NoX2qmvrsiREISOXkBjccs85ozwk4U/Y3LIaZg50smwm6P6w0kY7qd30p+7TG9k9dsqnqdC/P+4K84xrlPGgYa0o2y31EfBnNFFjwqSrBQYKSDHxxUWC9s1ttpUpSwb+1ivbuMozJnhYGq6oJbKH9vBCLn4S+1DmO/eF1c9X3AAY+PcCGbTQRyt9962Pw/DmmZVTkf4alLF8u0Its2wuJhh58i7OY0IXr x-ms-exchange-antispam-srfa-diagnostics: SOS; x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:(7020095)(4652020)(5600026)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020);SRVR:CO2PR06MB602; x-ms-traffictypediagnostic: CO2PR06MB602: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(9452136761055)(67672495146484)(228905959029699); x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(10201501046)(93006095)(93001095)(3002001)(3231254)(944501410)(52105095)(149027)(150027)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(20161123562045)(20161123558120)(20161123564045)(6072148)(201708071742011)(7699016);SRVR:CO2PR06MB602;BCL:0;PCL:0;RULEID:;SRVR:CO2PR06MB602; x-forefront-prvs: 069373DFB6 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(366004)(396003)(346002)(376002)(39830400003)(39380400002)(13464003)(189003)(199004)(6486002)(83716003)(2616005)(106356001)(446003)(6916009)(54906003)(2906002)(316002)(11346002)(33656002)(3280700002)(476003)(68736007)(93886005)(81156014)(82746002)(105586002)(66066001)(5660300001)(86362001)(8676002)(76176011)(305945005)(7736002)(229853002)(478600001)(53936002)(36756003)(6246003)(486006)(6512007)(81166006)(26005)(6506007)(53546011)(2900100001)(102836004)(97736004)(25786009)(186003)(14454004)(8936002)(3846002)(4326008)(99286004)(6436002)(3660700001)(6116002)(5250100002)(217873001);DIR:OUT;SFP:1101;SCL:1;SRVR:CO2PR06MB602;H:CO2PR06MB538.namprd06.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; received-spf: None (protection.outlook.com: cnexlabs.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: 7enuaO7Re8utdSLwFYnI0LJdRZVatf9sEjAfKNfP88x58ydXYVJfsqVJ67WskfWcbK9lvzj7qQE49oSlDmS/yKi4mV4YddHp9rqzpfrc5LwJou54Me5/+lB7kUwRf+8s7gFsIN6QgTFV9z15niA0eOiU6sHz7wHTdMMWuoggfh6iCgIlso0ej4yrLCK6R1hj spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: text/plain; charset="utf-8" Content-ID: <31FA0B5CB37D914A8CF4DFE25F6A00FA@namprd06.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Office365-Filtering-Correlation-Id: 2b2e5fa1-34c6-4a06-3513-08d5ca0c8795 X-OriginatorOrg: cnexlabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2b2e5fa1-34c6-4a06-3513-08d5ca0c8795 X-MS-Exchange-CrossTenant-originalarrivaltime: 04 Jun 2018 11:15:50.3882 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: e40dfc2e-c6c1-463a-a598-38602b2c3cff X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO2PR06MB602 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org DQo+IE9uIDQgSnVuIDIwMTgsIGF0IDEzLjExLCBEemllZ2llbGV3c2tpLCBNYXJjaW4gPG1hcmNp bi5kemllZ2llbGV3c2tpQGludGVsLmNvbT4gd3JvdGU6DQo+IA0KPj4gLS0tLS1PcmlnaW5hbCBN ZXNzYWdlLS0tLS0NCj4+IEZyb206IEphdmllciBHb256YWxleiBbbWFpbHRvOmphdmllckBjbmV4 bGFicy5jb21dDQo+PiBTZW50OiBNb25kYXksIEp1bmUgNCwgMjAxOCAxMjoyMiBQTQ0KPj4gVG86 IER6aWVnaWVsZXdza2ksIE1hcmNpbiA8bWFyY2luLmR6aWVnaWVsZXdza2lAaW50ZWwuY29tPg0K Pj4gQ2M6IE1hdGlhcyBCasO4cmxpbmcgPG1iQGxpZ2h0bnZtLmlvPjsgSmVucyBBeGJvZSA8YXhi b2VAZmIuY29tPjsgbGludXgtDQo+PiBibG9ja0B2Z2VyLmtlcm5lbC5vcmc7IGxpbnV4LWtlcm5l bEB2Z2VyLmtlcm5lbC5vcmc7IEtvbm9wa28sIElnb3IgSg0KPj4gPGlnb3Iuai5rb25vcGtvQGlu dGVsLmNvbT4NCj4+IFN1YmplY3Q6IFJlOiBbR0lUIFBVTEwgMTgvMjBdIGxpZ2h0bnZtOiBwYmxr OiBoYW5kbGUgY2FzZSB3aGVuIG13X2N1bml0cw0KPj4gZXF1YWxzIHRvIDANCj4+IA0KPj4+IE9u IDQgSnVuIDIwMTgsIGF0IDEyLjA5LCBEemllZ2llbGV3c2tpLCBNYXJjaW4NCj4+IDxtYXJjaW4u ZHppZWdpZWxld3NraUBpbnRlbC5jb20+IHdyb3RlOg0KPj4+IEZyaXN0IG9mIGFsbCBJIHdhbnQg dG8gc2F5IHNvcnJ5IGZvciBsYXRlIHJlc3BvbnNlIC0gSSB3YXMgb24gaG9saWRheS4NCj4+PiAN Cj4+Pj4gRnJvbTogSmF2aWVyIEdvbnphbGV6IFttYWlsdG86amF2aWVyQGNuZXhsYWJzLmNvbV0N Cj4+Pj4gU2VudDogTW9uZGF5LCBNYXkgMjgsIDIwMTggMTowMyBQTQ0KPj4+PiBUbzogTWF0aWFz IEJqw7hybGluZyA8bWJAbGlnaHRudm0uaW8+DQo+Pj4+IENjOiBKZW5zIEF4Ym9lIDxheGJvZUBm Yi5jb20+OyBsaW51eC1ibG9ja0B2Z2VyLmtlcm5lbC5vcmc7IGxpbnV4LQ0KPj4+PiBrZXJuZWxA dmdlci5rZXJuZWwub3JnOyBEemllZ2llbGV3c2tpLCBNYXJjaW4NCj4+Pj4gPG1hcmNpbi5kemll Z2llbGV3c2tpQGludGVsLmNvbT47IEtvbm9wa28sIElnb3IgSg0KPj4+PiA8aWdvci5qLmtvbm9w a29AaW50ZWwuY29tPg0KPj4+PiBTdWJqZWN0OiBSZTogW0dJVCBQVUxMIDE4LzIwXSBsaWdodG52 bTogcGJsazogaGFuZGxlIGNhc2Ugd2hlbg0KPj4+PiBtd19jdW5pdHMgZXF1YWxzIHRvIDANCj4+ Pj4gDQo+Pj4+PiBPbiAyOCBNYXkgMjAxOCwgYXQgMTAuNTgsIE1hdGlhcyBCasO4cmxpbmcgPG1i QGxpZ2h0bnZtLmlvPiB3cm90ZToNCj4+Pj4+IA0KPj4+Pj4gRnJvbTogTWFyY2luIER6aWVnaWVs ZXdza2kgPG1hcmNpbi5kemllZ2llbGV3c2tpQGludGVsLmNvbT4NCj4+Pj4+IA0KPj4+Pj4gU29t ZSBkZXZpY2VzIGNhbiBleHBvc2UgbXdfY3VuaXRzIGVxdWFsIHRvIDAsIGl0IGNhbiBjYXVzZSBj cmVhdGlvbg0KPj4+Pj4gb2YgdG9vIHNtYWxsIHdyaXRlIGJ1ZmZlciBhbmQgY2F1c2UgcGVyZm9y bWFuY2UgdG8gZHJvcCBvbiB3cml0ZQ0KPj4+Pj4gd29ya2xvYWRzLg0KPj4+Pj4gDQo+Pj4+PiBU byBoYW5kbGUgdGhhdCwgd2UgdXNlIHRoZSBkZWZhdWx0IHZhbHVlIGZvciBNTEMgYW5kIGJlYWNh dXNlIGl0DQo+Pj4+PiBjb3ZlcnMgYm90aCAxLjIgYW5kIDIuMCBPQyBzcGVjaWZpY2F0aW9uLCBz ZXR0aW5nIHVwIG13X2N1bml0cyBpbg0KPj4+Pj4gbnZtZV9udm1fc2V0dXBfMTIgZnVuY3Rpb24g aXNuJ3QgbG9uZ2VyIG5lY2Vzc2FyeS4NCj4+Pj4+IA0KPj4+Pj4gU2lnbmVkLW9mZi1ieTogTWFy Y2luIER6aWVnaWVsZXdza2kgPG1hcmNpbi5kemllZ2llbGV3c2tpQGludGVsLmNvbT4NCj4+Pj4+ IFNpZ25lZC1vZmYtYnk6IElnb3IgS29ub3BrbyA8aWdvci5qLmtvbm9wa29AaW50ZWwuY29tPg0K Pj4+Pj4gU2lnbmVkLW9mZi1ieTogTWF0aWFzIEJqw7hybGluZyA8bWJAbGlnaHRudm0uaW8+DQo+ Pj4+PiAtLS0NCj4+Pj4+IGRyaXZlcnMvbGlnaHRudm0vcGJsay1pbml0LmMgfCAxMCArKysrKysr KystDQo+Pj4+PiBkcml2ZXJzL252bWUvaG9zdC9saWdodG52bS5jIHwgIDEgLQ0KPj4+Pj4gMiBm aWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pDQo+Pj4+PiANCj4+ Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2xpZ2h0bnZtL3BibGstaW5pdC5jDQo+Pj4+PiBiL2Ry aXZlcnMvbGlnaHRudm0vcGJsay1pbml0LmMgaW5kZXggZDY1ZDJmOTcyY2NmLi4wZjI3Nzc0NDI2 NmINCj4+Pj4+IDEwMDY0NA0KPj4+Pj4gLS0tIGEvZHJpdmVycy9saWdodG52bS9wYmxrLWluaXQu Yw0KPj4+Pj4gKysrIGIvZHJpdmVycy9saWdodG52bS9wYmxrLWluaXQuYw0KPj4+Pj4gQEAgLTM1 Niw3ICszNTYsMTUgQEAgc3RhdGljIGludCBwYmxrX2NvcmVfaW5pdChzdHJ1Y3QgcGJsayAqcGJs aykNCj4+Pj4+IAlhdG9taWM2NF9zZXQoJnBibGstPm5yX2ZsdXNoLCAwKTsNCj4+Pj4+IAlwYmxr LT5ucl9mbHVzaF9yc3QgPSAwOw0KPj4+Pj4gDQo+Pj4+PiAtCXBibGstPnBnc19pbl9idWZmZXIg PSBnZW8tPm13X2N1bml0cyAqIGdlby0+YWxsX2x1bnM7DQo+Pj4+PiArCWlmIChnZW8tPm13X2N1 bml0cykgew0KPj4+Pj4gKwkJcGJsay0+cGdzX2luX2J1ZmZlciA9IGdlby0+bXdfY3VuaXRzICog Z2VvLT5hbGxfbHVuczsNCj4+Pj4+ICsJfSBlbHNlIHsNCj4+Pj4+ICsJCXBibGstPnBnc19pbl9i dWZmZXIgPSAoZ2VvLT53c19vcHQgPDwgMykgKiBnZW8tPmFsbF9sdW5zOw0KPj4+Pj4gKwkJLyoN Cj4+Pj4+ICsJCSAqIFNvbWUgZGV2aWNlcyBjYW4gZXhwb3NlIG13X2N1bml0cyBlcXVhbCB0byAw LCBzbyBsZXQncw0KPj4+PiB1c2UNCj4+Pj4+ICsJCSAqIGhlcmUgZGVmYXVsdCBzYWZlIHZhbHVl IGZvciBNTEMuDQo+Pj4+PiArCQkgKi8NCj4+Pj4+ICsJfQ0KPj4+Pj4gDQo+Pj4+PiAJcGJsay0+ bWluX3dyaXRlX3BncyA9IGdlby0+d3Nfb3B0ICogKGdlby0+Y3NlY3MgLyBQQUdFX1NJWkUpOw0K Pj4+Pj4gCW1heF93cml0ZV9wcGFzID0gcGJsay0+bWluX3dyaXRlX3BncyAqIGdlby0+YWxsX2x1 bnM7IGRpZmYgLS1naXQNCj4+Pj4+IGEvZHJpdmVycy9udm1lL2hvc3QvbGlnaHRudm0uYyBiL2Ry aXZlcnMvbnZtZS9ob3N0L2xpZ2h0bnZtLmMgaW5kZXgNCj4+Pj4+IDQxMjc5ZGE3OTllZC4uYzc0 Nzc5MmRhOTE1IDEwMDY0NA0KPj4+Pj4gLS0tIGEvZHJpdmVycy9udm1lL2hvc3QvbGlnaHRudm0u Yw0KPj4+Pj4gKysrIGIvZHJpdmVycy9udm1lL2hvc3QvbGlnaHRudm0uYw0KPj4+Pj4gQEAgLTMz OCw3ICszMzgsNiBAQCBzdGF0aWMgaW50IG52bWVfbnZtX3NldHVwXzEyKHN0cnVjdA0KPj4+PiBu dm1lX252bV9pZDEyDQo+Pj4+PiAqaWQsDQo+Pj4+PiANCj4+Pj4+IAlnZW8tPndzX21pbiA9IHNl Y19wZXJfcGc7DQo+Pj4+PiAJZ2VvLT53c19vcHQgPSBzZWNfcGVyX3BnOw0KPj4+Pj4gLQlnZW8t Pm13X2N1bml0cyA9IGdlby0+d3Nfb3B0IDw8IDM7CS8qIGRlZmF1bHQgdG8gTUxDIHNhZmUgdmFs dWVzDQo+Pj4+ICovDQo+Pj4+PiAvKiBEbyBub3QgaW1wb3NlIHZhbHVlcyBmb3IgbWF4aW11bSBu dW1iZXIgb2Ygb3BlbiBibG9ja3MgYXMgaXQgaXMNCj4+Pj4+IAkgKiB1bnNwZWNpZmllZCBpbiAx LjIuIFVzZXJzIG9mIDEuMiBtdXN0IGJlIGF3YXJlIG9mIHRoaXMgYW5kDQo+Pj4+PiBldmVudHVh bGx5DQo+Pj4+PiAtLQ0KPj4+Pj4gMi4xMS4wDQo+Pj4+IA0KPj4+PiBCeSBkb2luZyB0aGlzLCAx LjIgZnV0dXJlIHVzZXJzIChiZXlvbmQgcGJsayksIHdpbGwgZmFpbCB0byBoYXZlIGENCj4+Pj4g dmFsaWQgbXdfY3VuaXRzIHZhbHVlLiBJdCdzIG9rIHRvIGRlYWwgd2l0aCB0aGUgMCBjYXNlIGlu IHBibGssIGJ1dCBJDQo+Pj4+IGJlbGlldmUgdGhhdCB3ZSBzaG91bGQgaGF2ZSB0aGUgZGVmYXVs dCB2YWx1ZSBmb3IgMS4yIGVpdGhlciB3YXkuDQo+Pj4gDQo+Pj4gSSdtIG5vdCBzdXJlLiBGcm9t IG15IHVuZGVyc3RhbmRpbmcsIHNldHRpbmcgb2YgZGVmYXVsdCB2YWx1ZSB3YXMNCj4+PiB3b3Jr YXJvdW5kIGZvciBwYmxrIGNhc2UsIGFtIEkgcmlnaHQgPy4NCj4+IA0KPj4gVGhlIGRlZmF1bHQg dmFsdWUgY292ZXJzIHRoZSBNTEMgY2FzZSBkaXJlY3RseSBhdCB0aGUgbGlnaHRudm0gbGF5ZXIs IGFzDQo+PiBvcHBvc2VkIHRvIGRvaW5nIGl0IGRpcmVjdGx5IGluIHBibGsuIFNpbmNlIHBibGsg aXMgdGhlIG9ubHkgdXNlciBub3csIHlvdSBjYW4NCj4+IGFyZ3VlIHRoYXQgYWxsIGNoYW5nZXMg aW4gdGhlIGxpZ2h0bnZtIGxheWVyIGFyZSB0byBzb2x2ZSBwYmxrIGlzc3VlcywgYnV0IHRoZQ0K Pj4gaWRlYSBpcyB0aGF0IHRoZSBnZW9tZXRyeSBzaG91bGQgYmUgZ2VuZXJpYy4NCj4+IA0KPj4+ IEluIG15IG9waW5pb24gYW55IHVzZXIgb2YgMS4yDQo+Pj4gc3BlYyBzaG91bGQgYmUgYXdhcmUg dGhhdCB0aGVyZSBpcyBub3QgbXdfY3VuaXQgdmFsdWUuIEZyb20gbXkgcG9pbnQNCj4+PiBvZiB2 aWV3LCBsZWF2aW5nIGhlcmUgMCAoYW5kIGRlY2lzaW9uIHdoYXQgZG8gd2l0aCBpdCB0byBsaWdo dG52bQ0KPj4+IHVzZXIpIGlzIG1vcmUgc2FmZXIgd2F5LCBidXQgbWF5YmUgSSdtIHdyb25nLiBJ IGJlbGlldmUgdGhhdCBpdCBpcw0KPj4+IHRvcGljIHRvIHdpZGVyIGRpc2N1c3Npb24gd2l0aCBt YWludGFpbmVycy4NCj4+IA0KPj4gMS4yIGFuZCAyLjAgaGF2ZSBkaWZmZXJlbnQgZ2VvbWV0cmll cywgYnV0IHdoZW4gd2UgZGVzaWduZWQgdGhlIGNvbW1vbg0KPj4gbnZtX2dlbyBzdHJ1Y3R1cmUs IHRoZSBpZGVhIHdhcyB0byBhYnN0cmFjdCBib3RoIHNwZWNzIGFuZCBhbGxvdyB0aGUgdXBwZXIN Cj4+IGxheWVycyB0byB1c2UgdGhlIGdlb21ldHJ5IHRyYW5zcGFyZW50bHkuDQo+PiANCj4+IFNw ZWNpZmljYWxseSBpbiBwYmxrLCBJIHdvdWxkIHByZWZlciB0byBrZWVwIGl0IGluIHN1Y2ggYSB3 YXkgdGhhdCB3ZSBkb24ndCBuZWVkDQo+PiB0byBtZWRpYSBzcGVjaWZpYyBwb2xpY2llcyAoZS5n Liwgc2V0IGRlZmF1bHQgdmFsdWVzIGZvciBNTEMgbWVtb3JpZXMpLCBhcyBhDQo+PiBnZW5lcmFs IGRlc2lnbiBwcmluY2lwbGUuIFdlIGFscmVhZHkgZG8gc29tZSBnZW9tZXRyeSB2ZXJzaW9uIGNo ZWNrcyB0bw0KPj4gYXZvaWQgZGVyZWZlcmVuY2luZyB1bm5lY2Vzc2FyeSBwb2ludGVycyBvbiB0 aGUgZmFzdCBwYXRoLCB3aGljaCBJIHdvdWxkDQo+PiBldmVudHVhbGx5IGxpa2UgdG8gcmVtb3Zl Lg0KPiANCj4gT2ssIG5vdyBJIHVuZGVyc3RhbmQgeW91ciBwb2ludCBvZiB2aWV3IGFuZCBhZ3Jl ZSB3aXRoIHRoYXQsIEkgd2lsbA0KPiBwcmVwYXJlIHNlY29uZCB2ZXJzaW9uIG9mIHRoaXMgcGF0 Y2ggd2l0aG91dCB0aGlzIGNoYW5nZS4NCg0KU291bmRzIGdvb2QuDQoNCj4gVGhhbmtzIGZvcg0K PiB0aGUgY2xhcmlmaWNhdGlvbi4NCj4gDQoNClN1cmUgOikNCg0KPj4+PiBBIG1vcmUgZ2VuZXJp YyB3YXkgb2YgZG9pbmcgdGhpcyB3b3VsZCBiZSB0byBoYXZlIGEgZGVmYXVsdCB2YWx1ZSBmb3IN Cj4+Pj4gMi4wIHRvbywgaW4gY2FzZSBtd19jdW5pdHMgaXMgcmVwb3J0ZWQgYXMgMC4NCj4+PiAN Cj4+PiBTaW5jZSAwIGlzIGNvcnJlY3QgdmFsdWUgYW5kIHVzZXJzIGNhbiBtYWtlIGRpZmZlcmVu dCBkZWNpc2lvbnMgYmFzZWQNCj4+PiBvbiBpdCwgSSB0aGluayB3ZSBzaG91bGRuJ3Qgb3Zlcndy aXRlIGl0IGJ5IGRlZmF1bHQgdmFsdWUuIElzIGl0IG1ha2UNCj4+PiBzZW5zZT8NCj4+IA0KPj4g SGVyZSBJIG1lYW50IGF0IGEgcGJsayBsZXZlbCAtIEkgc2hvdWxkIGhhdmUgc3BlY2lmaWVkIGl0 LiBBdCB0aGUgZ2VvbWV0cnkNCj4+IGxldmVsLCB3ZSBzaG91bGQgbm90IGNoYW5nZSBpdC4NCj4+ IA0KPj4gVGhlIGNhc2UgSSBhbSB0aGlua2luZyBpcyBpZiBtd19jdWludHMgcmVwb2ludHMgMCwg YnV0IHdzX21pbiA+IDAuIEluIHRoaXMgY2FzZSwNCj4+IHdlIHN0aWxsIG5lZWQgYSBob3N0IHNp ZGUgYnVmZmVyIHRvIHNlcnZlIDwgd3NfbWluIEkvT3MsIGV2ZW4gdGhvdWdoIHRoZQ0KPj4gZGV2 aWNlIGRvZXMgbm90IHJlcXVpcmUgdGhlIGJ1ZmZlciB0byBndWFyYW50ZWUgcmVhZHMuDQo+IA0K PiBPaCwgb2sgbm93IHdlIGFyZSBvbiB0aGUgc2FtZSBwYWdlLiBJbiB0aGlzIHBhdGNoIEkgd2Fz IHRyeWluZyB0bw0KPiBhZGRyZXNzIHN1Y2ggY2FzZS4gRG8geW91IGhhdmUgb3RoZXIgaWRlYSBo b3cgdG8gZG8gaXQgb3IgaGVyZSBhcmUgeW91DQo+IHRoaW5raW5nIG9ubHkgb24gdmFsdWUgb2Yg ZGVmYXVsdCB2YXJpYWJsZT8NCg0KSWYgZG9pbmcgdGhpcywgSSBndWVzcyB0aGF0IHNvbWV0aGlu ZyBpbiB0aGUgbGluZSBvZiB3aGF0IHlvdSBkaWQgd2l0aA0KaW5jcmVhc2luZyB0aGUgc2l6ZSBv ZiB0aGUgd3JpdGUgYnVmZmVyIHZpYSBhIG1vZHVsZSBwYXJhbWV0ZXIuIEZvcg0KZXhhbXBsZSwg Y2hlY2tpbmcgaWYgdGhlIHNpemUgb2YgdGhlIHdyaXRlIGJ1ZmZlciBiYXNlZCBvbiBtd19jdWlu dHMgaXMNCmVub3VnaCB0byBjb3ZlciB3c19taW4sIHdoaWNoIG5vcm1hbGx5IHdvdWxkIG9ubHkg YmUgYW4gaXNzdWUgd2hlbg0KbXdfY3VpbnRzID09IDAgb3Igd2hlbiB0aGUgbnVtYmVyIG9mIFBV cyB1c2VkIGZvciB0aGUgcGJsayBpbnN0YW5jZSBpcw0KdmVyeSBzbWFsbCBhbmQgbXdfY3VpbnRz IDwgbnJfbHVucyAqIHdzX21pbi4NCg0KPiANCj4+Pj4gSmF2aWVyDQo+Pj4gDQo+Pj4gVGhhbmtz LA0KPj4+IE1hcmNpbg0KPj4gDQo+PiBKYXZpZXINCj4gVGhhbmtzLA0KPiBNYXJjaW4NCg==