From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matan Azrad Subject: Re: [PATCH v3 1/2] eal: add API to align integer to previous power of 2 Date: Wed, 4 Apr 2018 18:10:46 +0000 Message-ID: References: <20180217104934.17291-1-pbhagavatula@caviumnetworks.com> <20180404101606.5156-1-pbhagavatula@caviumnetworks.com> <20180404164207.GA21153@ltp-pvn> <20180404175156.GA5416@ltp-pvn> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: "dev@dpdk.org" To: Pavan Nikhilesh , "jerin.jacob@caviumnetworks.com" , "keith.wiles@intel.com" , Thomas Monjalon Return-path: Received: from EUR02-VE1-obe.outbound.protection.outlook.com (mail-eopbgr20069.outbound.protection.outlook.com [40.107.2.69]) by dpdk.org (Postfix) with ESMTP id 6E9151C868 for ; Wed, 4 Apr 2018 20:10:48 +0200 (CEST) In-Reply-To: <20180404175156.GA5416@ltp-pvn> Content-Language: en-US List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" SGkgUGF2YW4NCg0KRnJvbTogUGF2YW4gTmlraGlsZXNoLCBXZWRuZXNkYXksIEFwcmlsIDQsIDIw MTggODo1MiBQTQ0KPiBPbiBXZWQsIEFwciAwNCwgMjAxOCBhdCAwNToxMToyMlBNICswMDAwLCBN YXRhbiBBenJhZCB3cm90ZToNCj4gPg0KPiA+DQo+ID4gRnJvbTogUGF2YW4gTmlraGlsZXNoLCBX ZWRuZXNkYXksIEFwcmlsIDQsIDIwMTggNzo0MiBQTQ0KPiA+ID4gSGkgTWF0YW4sDQo+ID4gPg0K PiA+ID4gT24gV2VkLCBBcHIgMDQsIDIwMTggYXQgMDQ6MTA6MzZQTSArMDAwMCwgTWF0YW4gQXpy YWQgd3JvdGU6DQo+ID4gPiA+IEhpIFBhdmFuDQo+ID4gPiA+DQo+ID4gPiA+IFNob3VsZG4ndCB0 aGUgbmV3IEFQSXMgYmUgdGFnZ2VkIHdpdGggdGhlIGV4cGVyaW1lbnRhbCB0YWcgYXMgYWdyZWVk Pw0KPiA+ID4NCj4gPiA+IENhbid0IHRhZyBpdCBleHBlcmltZW50YWwgYXMgaXQgY2F1c2VzIGN5 Y2xpYyBkZXBlbmRlbmN5IChuZWVkIHRvDQo+ID4gPiBpbmNsdWRlIHJ0ZV9jb21wYWN0LmgpLg0K PiA+DQo+ID4gWW91IHByb2JhYmx5IG1lYW4gcnRlX2NvbXBhdC5oLg0KPiA+DQo+ID4gSXQgaXMg b2sgdG8gYWRkIGl0LCB3aGF0IGlzIHRoZSBpc3N1ZSB3aXRoIHRoYXQ/DQo+IA0KPiBDaGFuZ2Ug c2V0Og0KPiANCj4gLS0tIGEvbGliL2xpYnJ0ZV9lYWwvY29tbW9uL2luY2x1ZGUvcnRlX2NvbW1v bi5oDQo+ICsrKyBiL2xpYi9saWJydGVfZWFsL2NvbW1vbi9pbmNsdWRlL3J0ZV9jb21tb24uaA0K PiBAQCAtMjMsNiArMjMsNyBAQCBleHRlcm4gIkMiIHsNCj4gICNpbmNsdWRlIDxsaW1pdHMuaD4N Cj4gDQo+ICAjaW5jbHVkZSA8cnRlX2NvbmZpZy5oPg0KPiArI2luY2x1ZGUgPHJ0ZV9jb21wYXQu aD4NCj4gDQo+ICAjaWZuZGVmIHR5cGVvZg0KPiAgI2RlZmluZSB0eXBlb2YgX190eXBlb2ZfXw0K PiBAQCAtMjMzLDcgKzIzNCw3IEBAIGV4dGVybiBpbnQgUlRFX0JVSUxEX0JVR19PTl9kZXRlY3Rl ZF9lcnJvcjsNCj4gICAqIEByZXR1cm4NCj4gICAqICAgIFRoZSBjb21iaW5lZCB2YWx1ZS4NCj4g ICAqLw0KPiAtc3RhdGljIGlubGluZSB1aW50MzJfdA0KPiArc3RhdGljIGlubGluZSB1aW50MzJf dCBfX3J0ZV9leHBlcmltZW50YWwNCj4gIHJ0ZV9jb21iaW5lMzJtczFiKHJlZ2lzdGVyIHVpbnQz Ml90IHgpDQo+ICB7DQo+ICAgICAgICAgeCB8PSB4ID4+IDE7DQo+IEBAIC0yNDUsNiArMjQ2LDEw IEBAIHJ0ZV9jb21iaW5lMzJtczFiKHJlZ2lzdGVyIHVpbnQzMl90IHgpDQo+ICAgICAgICAgcmV0 dXJuIHg7DQo+ICB9DQo+IA0KPiBDYXVzZXM6DQo+IA0KPiBJbiBmaWxlIGluY2x1ZGVkIGZyb20N Cj4gL2hvbWUvcGF2YW4vV29yay9jbGVhbi9kcGRrL2J1aWxkL2luY2x1ZGUvcnRlX2NvbXBhdC5o Ojg6MCwNCj4gICAgICAgICAgICAgICAgICBmcm9tDQo+IC9ob21lL3BhdmFuL1dvcmsvY2xlYW4v ZHBkay9saWIvbGlicnRlX2VhbC9saW51eGFwcC9lYWwvZWFsLmM6Mjc6DQo+IC9ob21lL3BhdmFu L1dvcmsvY2xlYW4vZHBkay9idWlsZC9pbmNsdWRlL3J0ZV9jb21tb24uaDoyMzg6MTogZXJyb3I6 DQo+IGV4cGVjdGVkIOKAmD3igJksIOKAmCzigJksIOKAmDvigJksIOKAmGFzbeKAmSBvciDigJhf X2F0dHJpYnV0ZV9f4oCZIGJlZm9yZSDigJhydGVfY29tYmluZTMybXMxYuKAmQ0KPiAgcnRlX2Nv bWJpbmUzMm1zMWIocmVnaXN0ZXIgdWludDMyX3QgeCkNCj4gIF5+fn5+fn5+fn5+fn5+fn5+DQo+ IC9ob21lL3BhdmFuL1dvcmsvY2xlYW4vZHBkay9idWlsZC9pbmNsdWRlL3J0ZV9jb21tb24uaDog SW4gZnVuY3Rpb24NCj4g4oCYcnRlX2FsaWduMzJwb3cy4oCZOg0KPiAvaG9tZS9wYXZhbi9Xb3Jr L2NsZWFuL2RwZGsvYnVpbGQvaW5jbHVkZS9ydGVfY29tbW9uLmg6MzAzOjY6IGVycm9yOg0KPiBp bXBsaWNpdCBkZWNsYXJhdGlvbiBvZiBmdW5jdGlvbiDigJhydGVfY29tYmluZTMybXMxYuKAmTsg ZGlkIHlvdSBtZWFuDQo+IOKAmHJ0ZV9jb21iaW5lNjRtczFi4oCZPyBbLVdlcnJvcj1pbXBsaWNp dC1mdW5jdGlvbi1kZWNsYXJhdGlvbl0NCj4gICB4ID0gcnRlX2NvbWJpbmUzMm1zMWIoeCk7DQo+ ICAgICAgIF5+fn5+fn5+fn5+fn5+fn5+DQo+ICAgICAgIHJ0ZV9jb21iaW5lNjRtczFiDQo+IC9o b21lL3BhdmFuL1dvcmsvY2xlYW4vZHBkay9idWlsZC9pbmNsdWRlL3J0ZV9jb21tb24uaDozMDM6 NjogZXJyb3I6DQo+IG5lc3RlZCBleHRlcm4gZGVjbGFyYXRpb24gb2Yg4oCYcnRlX2NvbWJpbmUz Mm1zMWLigJkgWy1XZXJyb3I9bmVzdGVkLQ0KPiBleHRlcm5zXQ0KPiANCj4gQ2F1c2U6DQo+IA0K PiAtLS0gYS9saWIvbGlicnRlX2VhbC9jb21tb24vaW5jbHVkZS9ydGVfY29tbW9uLmgNCj4gKysr IGIvbGliL2xpYnJ0ZV9lYWwvY29tbW9uL2luY2x1ZGUvcnRlX2NvbW1vbi5oDQo+IEBAIC0yNDUs NiArMjQ2LDEwIEBAIHJ0ZV9jb21iaW5lMzJtczFiKHJlZ2lzdGVyIHVpbnQzMl90IHgpDQo+ICAg ICAgICAgcmV0dXJuIHg7DQo+ICB9DQo+IA0KPiArI2lmbmRlZiBfX3J0ZV9leHBlcmltZW50YWwN Cj4gKyNlcnJvciAiX19ydGVfZXhwZXJpbWVudGFsIGlzIG5vdCBkZWZpbmVkISINCj4gKyNlbmRp Zg0KPiArDQo+IA0KPiAvaG9tZS9wYXZhbi9Xb3JrL2NsZWFuL2RwZGsvYnVpbGQvaW5jbHVkZS9y dGVfY29tbW9uLmg6MjUwOjk6IGVycm9yOg0KPiAjZXJyb3IgIl9fcnRlX2V4cGVyaW1lbnRhbCBp cyBub3QgZGVmaW5lZCEiDQo+IA0KPiA+DQo+ID4gPiBCZXNpZGVzIGl0J3MgYSBzaW1wbGUgcHJv dmVuIG1hdGggQVBJIEkgZG9uJ3QgdGhpbmsgaXQgd2lsbCBjaGFuZ2UNCj4gPiA+IGFueXRpbWUg c29vbi4NCj4gPg0KPiA+IEl0IGhhcyBhbHJlYWR5IGRpc2N1c3NlZDoNCj4gPg0KPiBodHRwczov L2VtZWEwMS5zYWZlbGlua3MucHJvdGVjdGlvbi5vdXRsb29rLmNvbS8/dXJsPWh0dHBzJTNBJTJG JTJGZHANCj4gZA0KPiA+DQo+IGsub3JnJTJGZGV2JTJGcGF0Y2h3b3JrJTJGcGF0Y2glMkYzNTIx MSUyRiZkYXRhPTAyJTdDMDElN0NtYXRhDQo+IG4lNDBtZWxsDQo+ID4NCj4gYW5veC5jb20lN0Nm OTQwYmEyNDg0MTM0OTYxNDM1NzA4ZDU5YTU0Y2U0MSU3Q2E2NTI5NzFjN2QyZTRkOWJhNg0KPiBh NGQxNDkNCj4gPg0KPiAyNTZmNDYxYiU3QzAlN0MwJTdDNjM2NTg0NjExMzk0OTgxMDA3JnNkYXRh PWpPN2dMa1JoWlZ2NmdTcVR5enNLDQo+IEsyTGIzag0KPiA+IDl2c1VnMiUyRlBLWkRzMlhkYWcl M0QmcmVzZXJ2ZWQ9MA0KPiA+DQo+ID4gSSB0aGluayB5b3UgbmVlZCB0byBhZGQgaXQgYW55d2F5 Lg0KPiA+DQo+ID4gPiBUaGFua3MsDQo+ID4gPiBQYXZhbg0KPiA+ID4NCj4gPiA+ID4NCj4gPiA+ ID4gQmVzaWRlcyB0aGF0LA0KPiA+ID4gPiBBY2tlZC1ieTogTWF0YW4gQXpyYWQgPG1hdGFuQG1l bGxhbm94LmNvbT4NCj4gPiA+ID4NCj4gPiA+ID4gRnJvbTogUGF2YW4gTmlraGlsZXNoLCBXZWRu ZXNkYXksIEFwcmlsIDQsIDIwMTggMToxNiBQTQ0KPiA+ID4gPiA+IEFkZCAzMmIgYW5kIDY0YiBB UEkncyB0byBhbGlnbiB0aGUgZ2l2ZW4gaW50ZWdlciB0byB0aGUgcHJldmlvdXMNCj4gPiA+ID4g PiBwb3dlciBvZg0KPiA+ID4gMi4NCj4gPiA+ID4gPg0KPiA+ID4gPiA+IFNpZ25lZC1vZmYtYnk6 IFBhdmFuIE5pa2hpbGVzaA0KPiA8cGJoYWdhdmF0dWxhQGNhdml1bW5ldHdvcmtzLmNvbT4NCj4g PiA+ID4gPiAtLS0NCj4gPiA+ID4gPiAgdjMgQ2hhbmdlczoNCj4gPiA+ID4gPiAgLSBNb3ZlIGNv bW1vbmx5IHVzZWQgY29kZSB0byBydGVfY29tYmluZSgzMi82NCltczFiIHNvIHRoYXQgaXQNCj4g PiA+ID4gPiBjYW4gYmUgcmV1c2VkLg0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gIHYyIENoYW5nZXM6 DQo+ID4gPiA+ID4gIC0gTW9kaWZpZWQgYXBpIG5hbWUgdG8gYHJ0ZV9hbGlnbigzMi82NClwcmV2 cG93MmAgZnJvbQ0KPiA+ID4gPiA+IGBydGVfYWxpZ24oMzIvNjQpbG93cG93MmAuDQo+ID4gPiA+ ID4gIC0gY29ycmVjdGVkIGZ1Y3Rpb24gdG8gcmV0dXJuIGlmIHRoZSBpbnRlZ2VyIGlzIGFscmVh ZHkgYWxpZ25lZA0KPiA+ID4gPiA+IHRvICBwb3dlciBvZg0KPiA+ID4gMi4NCj4gPiA+ID4gPg0K PiA+ID4gPiA+ICBsaWIvbGlicnRlX2VhbC9jb21tb24vaW5jbHVkZS9ydGVfY29tbW9uLmggfCA5 Mg0KPiA+ID4gPiA+ICsrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLQ0KPiA+ID4gPiA+ICAx IGZpbGUgY2hhbmdlZCwgODEgaW5zZXJ0aW9ucygrKSwgMTEgZGVsZXRpb25zKC0pDQo+ID4gPiA+ ID4NCj4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV9lYWwvY29tbW9uL2luY2x1ZGUv cnRlX2NvbW1vbi5oDQo+ID4gPiA+ID4gYi9saWIvbGlicnRlX2VhbC9jb21tb24vaW5jbHVkZS9y dGVfY29tbW9uLmgNCj4gPiA+ID4gPiBpbmRleCBjNzgwM2U0MWMuLjdlMTQ3ZGNmMiAxMDA2NDQN Cj4gPiA+ID4gPiAtLS0gYS9saWIvbGlicnRlX2VhbC9jb21tb24vaW5jbHVkZS9ydGVfY29tbW9u LmgNCj4gPiA+ID4gPiArKysgYi9saWIvbGlicnRlX2VhbC9jb21tb24vaW5jbHVkZS9ydGVfY29t bW9uLmgNCj4gPiA+ID4gPiBAQCAtMjIzLDYgKzIyMyw1MSBAQCBleHRlcm4gaW50DQo+ID4gPiBS VEVfQlVJTERfQlVHX09OX2RldGVjdGVkX2Vycm9yOyAgfQ0KPiA+ID4gPiA+IHdoaWxlKDApICAj ZW5kaWYNCj4gPiA+ID4gPg0KPiA+ID4gPiA+ICsvKioNCj4gPiA+ID4gPiArICogQ29tYmluZXMg MzJiIGlucHV0cyBtb3N0IHNpZ25pZmljYW50IHNldCBiaXRzIGludG8gdGhlIGxlYXN0DQo+ID4g PiA+ID4gKyAqIHNpZ25pZmljYW50IGJpdHMgdG8gY29uc3RydWN0IGEgdmFsdWUgd2l0aCB0aGUg c2FtZSBNU0JzIGFzDQo+ID4gPiA+ID4gK3gNCj4gPiA+ID4gPiArICogYnV0IGFsbCAxJ3MgdW5k ZXIgaXQuDQo+ID4gPiA+ID4gKyAqDQo+ID4gPiA+ID4gKyAqIEBwYXJhbSB4DQo+ID4gPiA+ID4g KyAqICAgIFRoZSBpbnRlZ2VyIHdob3NlIE1TQnMgbmVlZCB0byBiZSBjb21iaW5lZCB3aXRoIGl0 cyBMU0JzDQo+ID4gPiA+ID4gKyAqIEByZXR1cm4NCj4gPiA+ID4gPiArICogICAgVGhlIGNvbWJp bmVkIHZhbHVlLg0KPiA+ID4gPiA+ICsgKi8NCj4gPiA+ID4gPiArc3RhdGljIGlubGluZSB1aW50 MzJfdA0KPiA+ID4gPiA+ICtydGVfY29tYmluZTMybXMxYihyZWdpc3RlciB1aW50MzJfdCB4KSB7 DQo+ID4gPiA+ID4gKwl4IHw9IHggPj4gMTsNCj4gPiA+ID4gPiArCXggfD0geCA+PiAyOw0KPiA+ ID4gPiA+ICsJeCB8PSB4ID4+IDQ7DQo+ID4gPiA+ID4gKwl4IHw9IHggPj4gODsNCj4gPiA+ID4g PiArCXggfD0geCA+PiAxNjsNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKwlyZXR1cm4geDsNCj4g PiA+ID4gPiArfQ0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArLyoqDQo+ID4gPiA+ID4gKyAqIENv bWJpbmVzIDY0YiBpbnB1dHMgbW9zdCBzaWduaWZpY2FudCBzZXQgYml0cyBpbnRvIHRoZSBsZWFz dA0KPiA+ID4gPiA+ICsgKiBzaWduaWZpY2FudCBiaXRzIHRvIGNvbnN0cnVjdCBhIHZhbHVlIHdp dGggdGhlIHNhbWUgTVNCcyBhcw0KPiA+ID4gPiA+ICt4DQo+ID4gPiA+ID4gKyAqIGJ1dCBhbGwg MSdzIHVuZGVyIGl0Lg0KPiA+ID4gPiA+ICsgKg0KPiA+ID4gPiA+ICsgKiBAcGFyYW0gdg0KPiA+ ID4gPiA+ICsgKiAgICBUaGUgaW50ZWdlciB3aG9zZSBNU0JzIG5lZWQgdG8gYmUgY29tYmluZWQg d2l0aCBpdHMgTFNCcw0KPiA+ID4gPiA+ICsgKiBAcmV0dXJuDQo+ID4gPiA+ID4gKyAqICAgIFRo ZSBjb21iaW5lZCB2YWx1ZS4NCj4gPiA+ID4gPiArICovDQo+ID4gPiA+ID4gK3N0YXRpYyBpbmxp bmUgdWludDY0X3QNCj4gPiA+ID4gPiArcnRlX2NvbWJpbmU2NG1zMWIocmVnaXN0ZXIgdWludDY0 X3Qgdikgew0KPiA+ID4gPiA+ICsJdiB8PSB2ID4+IDE7DQo+ID4gPiA+ID4gKwl2IHw9IHYgPj4g MjsNCj4gPiA+ID4gPiArCXYgfD0gdiA+PiA0Ow0KPiA+ID4gPiA+ICsJdiB8PSB2ID4+IDg7DQo+ ID4gPiA+ID4gKwl2IHw9IHYgPj4gMTY7DQo+ID4gPiA+ID4gKwl2IHw9IHYgPj4gMzI7DQo+ID4g PiA+ID4gKw0KPiA+ID4gPiA+ICsJcmV0dXJuIHY7DQo+ID4gPiA+ID4gK30NCj4gPiA+ID4gPiAr DQo+ID4gPiA+ID4gIC8qKioqKioqKioqKiBNYWNyb3MgdG8gd29yayB3aXRoIHBvd2VycyBvZiAy ICoqKioqKioqLw0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gIC8qKg0KPiA+ID4gPiA+IEBAIC0yNTAs MTUgKzI5NSwyOCBAQCBzdGF0aWMgaW5saW5lIHVpbnQzMl90DQo+ID4gPiA+ID4gcnRlX2FsaWdu MzJwb3cyKHVpbnQzMl90DQo+ID4gPiB4KSAgew0KPiA+ID4gPiA+ICAJeC0tOw0KPiA+ID4gPiA+ IC0JeCB8PSB4ID4+IDE7DQo+ID4gPiA+ID4gLQl4IHw9IHggPj4gMjsNCj4gPiA+ID4gPiAtCXgg fD0geCA+PiA0Ow0KPiA+ID4gPiA+IC0JeCB8PSB4ID4+IDg7DQo+ID4gPiA+ID4gLQl4IHw9IHgg Pj4gMTY7DQo+ID4gPiA+ID4gKwl4ID0gcnRlX2NvbWJpbmUzMm1zMWIoeCk7DQo+ID4gPiA+ID4N Cj4gPiA+ID4gPiAgCXJldHVybiB4ICsgMTsNCj4gPiA+ID4gPiAgfQ0KPiA+ID4gPiA+DQo+ID4g PiA+ID4gKy8qKg0KPiA+ID4gPiA+ICsgKiBBbGlnbnMgaW5wdXQgcGFyYW1ldGVyIHRvIHRoZSBw cmV2aW91cyBwb3dlciBvZiAyDQo+ID4gPiA+ID4gKyAqDQo+ID4gPiA+ID4gKyAqIEBwYXJhbSB4 DQo+ID4gPiA+ID4gKyAqICAgVGhlIGludGVnZXIgdmFsdWUgdG8gYWxnaW4NCj4gPiA+ID4gPiAr ICoNCj4gPiA+ID4gPiArICogQHJldHVybg0KPiA+ID4gPiA+ICsgKiAgIElucHV0IHBhcmFtZXRl ciBhbGlnbmVkIHRvIHRoZSBwcmV2aW91cyBwb3dlciBvZiAyDQo+ID4gPiA+ID4gKyAqLw0KPiA+ ID4gPiA+ICtzdGF0aWMgaW5saW5lIHVpbnQzMl90DQo+ID4gPiA+ID4gK3J0ZV9hbGlnbjMycHJl dnBvdzIodWludDMyX3QgeCkgew0KPiA+ID4gPiA+ICsJeCA9IHJ0ZV9jb21iaW5lMzJtczFiKHgp Ow0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArCXJldHVybiB4IC0gKHggPj4gMSk7DQo+ID4gPiA+ ID4gK30NCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gIC8qKg0KPiA+ID4gPiA+ICAgKiBBbGlnbnMg NjRiIGlucHV0IHBhcmFtZXRlciB0byB0aGUgbmV4dCBwb3dlciBvZiAyDQo+ID4gPiA+ID4gICAq DQo+ID4gPiA+ID4gQEAgLTI3MiwxNiArMzMwLDI4IEBAIHN0YXRpYyBpbmxpbmUgdWludDY0X3QN Cj4gPiA+ID4gPiBydGVfYWxpZ242NHBvdzIodWludDY0X3QNCj4gPiA+IHYpICB7DQo+ID4gPiA+ ID4gIAl2LS07DQo+ID4gPiA+ID4gLQl2IHw9IHYgPj4gMTsNCj4gPiA+ID4gPiAtCXYgfD0gdiA+ PiAyOw0KPiA+ID4gPiA+IC0JdiB8PSB2ID4+IDQ7DQo+ID4gPiA+ID4gLQl2IHw9IHYgPj4gODsN Cj4gPiA+ID4gPiAtCXYgfD0gdiA+PiAxNjsNCj4gPiA+ID4gPiAtCXYgfD0gdiA+PiAzMjsNCj4g PiA+ID4gPiArCXYgPSBydGVfY29tYmluZTY0bXMxYih2KTsNCj4gPiA+ID4gPg0KPiA+ID4gPiA+ ICAJcmV0dXJuIHYgKyAxOw0KPiA+ID4gPiA+ICB9DQo+ID4gPiA+ID4NCj4gPiA+ID4gPiArLyoq DQo+ID4gPiA+ID4gKyAqIEFsaWducyA2NGIgaW5wdXQgcGFyYW1ldGVyIHRvIHRoZSBwcmV2aW91 cyBwb3dlciBvZiAyDQo+ID4gPiA+ID4gKyAqDQo+ID4gPiA+ID4gKyAqIEBwYXJhbSB2DQo+ID4g PiA+ID4gKyAqICAgVGhlIDY0YiB2YWx1ZSB0byBhbGlnbg0KPiA+ID4gPiA+ICsgKg0KPiA+ID4g PiA+ICsgKiBAcmV0dXJuDQo+ID4gPiA+ID4gKyAqICAgSW5wdXQgcGFyYW1ldGVyIGFsaWduZWQg dG8gdGhlIHByZXZpb3VzIHBvd2VyIG9mIDINCj4gPiA+ID4gPiArICovDQo+ID4gPiA+ID4gK3N0 YXRpYyBpbmxpbmUgdWludDY0X3QNCj4gPiA+ID4gPiArcnRlX2FsaWduNjRwcmV2cG93Mih1aW50 NjRfdCB2KSB7DQo+ID4gPiA+ID4gKwl2ID0gcnRlX2NvbWJpbmU2NG1zMWIodik7DQo+ID4gPiA+ ID4gKw0KPiA+ID4gPiA+ICsJcmV0dXJuIHYgLSAodiA+PiAxKTsNCj4gPiA+ID4gPiArfQ0KPiA+ ID4gPiA+ICsNCj4gPiA+ID4gPiAgLyoqKioqKioqKioqIE1hY3JvcyBmb3IgY2FsY3VsYXRpbmcg bWluIGFuZCBtYXggKioqKioqKioqKi8NCj4gPiA+ID4gPg0KPiA+ID4gPiA+ICAvKioNCj4gPiA+ ID4gPiAtLQ0KPiA+ID4gPiA+IDIuMTYuMw0KPiA+ID4gPg0KDQoNCkdvdCB5b3UuIA0KTG9va3Mg bGlrZSB5b3UgZm91bmQgaXNzdWUgaGVyZS4uLg0KVGhlIGV4cGVyaW1lbnRhbCB0YWcgcHJvYmFi bHkgc2hvdWxkIGJlIGluIGEgcm9vdCAuaCBmaWxlLg0KUHJvYmFibHksIG5lZWQgYSBmaXggcGF0 Y2ggdG8gbW92ZSBpdCBmb3IgYSBkaWZmZXJlbnRcbmV3IC5oIGZpbGUuDQoNCldoYXQgZG8geW91 IHRoaW5rPyANCg0KDQoNCg0K