From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 424C4A034C for ; Thu, 30 Jun 2022 18:32:20 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 39938410D5; Thu, 30 Jun 2022 18:32:20 +0200 (CEST) Received: from smartserver.smartsharesystems.com (smartserver.smartsharesystems.com [77.243.40.215]) by mails.dpdk.org (Postfix) with ESMTP id 9D75A40694; Thu, 30 Jun 2022 18:32:17 +0200 (CEST) X-MimeOLE: Produced By Microsoft Exchange V6.5 Content-class: urn:content-classes:message MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 Subject: RE: [PATCH v4] net: fix checksum with unaligned buffer Date: Thu, 30 Jun 2022 18:28:52 +0200 Message-ID: <98CBD80474FA8B44BF855DF32C47DC35D8719B@smartserver.smartshare.dk> In-Reply-To: X-MS-Has-Attach: X-MS-TNEF-Correlator: Thread-Topic: [PATCH v4] net: fix checksum with unaligned buffer Thread-Index: AdiKuEWBugEJ4N7KSgKaA3jh+sWVFwB5JcJA References: <98CBD80474FA8B44BF855DF32C47DC35D87139@smartserver.smartshare.dk> <20220623123900.38283-1-mb@smartsharesystems.com> <98CBD80474FA8B44BF855DF32C47DC35D87169@smartserver.smartshare.dk> <9f543fc0-ae8a-067b-d13f-38a0503dd619@lysator.liu.se> <98CBD80474FA8B44BF855DF32C47DC35D87187@smartserver.smartshare.dk> <8b28786c-cf78-68e2-7022-1c68a8d8d119@lysator.liu.se> <98CBD80474FA8B44BF855DF32C47DC35D87189@smartserver.smartshare.dk> From: =?UTF-8?B?TW9ydGVuIEJyw7hydXA=?= To: =?UTF-8?B?TWF0dGlhcyBSw7ZubmJsb20=?= , "Emil Berg" , , Cc: , , , X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org PiBGcm9tOiBNYXR0aWFzIFLDtm5uYmxvbSBbbWFpbHRvOmhvZm9yc0BseXNhdG9yLmxpdS5zZV0N Cj4gU2VudDogVHVlc2RheSwgMjggSnVuZSAyMDIyIDA4LjI4DQo+IA0KPiBPbiAyMDIyLTA2LTI3 IDIyOjIxLCBNb3J0ZW4gQnLDuHJ1cCB3cm90ZToNCj4gPj4gRnJvbTogTWF0dGlhcyBSw7ZubmJs b20gW21haWx0bzpob2ZvcnNAbHlzYXRvci5saXUuc2VdDQo+ID4+IFNlbnQ6IE1vbmRheSwgMjcg SnVuZSAyMDIyIDE5LjIzDQo+ID4+DQo+ID4+IE9uIDIwMjItMDYtMjcgMTU6MjIsIE1vcnRlbiBC csO4cnVwIHdyb3RlOg0KPiA+Pj4+IEZyb206IEVtaWwgQmVyZyBbbWFpbHRvOmVtaWwuYmVyZ0Bl cmljc3Nvbi5jb21dDQo+ID4+Pj4gU2VudDogTW9uZGF5LCAyNyBKdW5lIDIwMjIgMTQuNTENCj4g Pj4+Pg0KPiA+Pj4+PiBGcm9tOiBFbWlsIEJlcmcNCj4gPj4+Pj4gU2VudDogZGVuIDI3IGp1bmkg MjAyMiAxNDo0Ng0KPiA+Pj4+Pg0KPiA+Pj4+Pj4gRnJvbTogTWF0dGlhcyBSw7ZubmJsb20gPGhv Zm9yc0BseXNhdG9yLmxpdS5zZT4NCj4gPj4+Pj4+IFNlbnQ6IGRlbiAyNyBqdW5pIDIwMjIgMTQ6 MjgNCj4gPj4+Pj4+DQo+ID4+Pj4+PiBPbiAyMDIyLTA2LTIzIDE0OjUxLCBNb3J0ZW4gQnLDuHJ1 cCB3cm90ZToNCj4gPj4+Pj4+Pj4gRnJvbTogTW9ydGVuIEJyw7hydXAgW21haWx0bzptYkBzbWFy dHNoYXJlc3lzdGVtcy5jb21dDQo+ID4+Pj4+Pj4+IFNlbnQ6IFRodXJzZGF5LCAyMyBKdW5lIDIw MjIgMTQuMzkNCj4gPj4+Pj4+Pj4NCj4gPj4+Pj4+Pj4gV2l0aCB0aGlzIHBhdGNoLCB0aGUgY2hl Y2tzdW0gY2FuIGJlIGNhbGN1bGF0ZWQgb24gYW4NCj4gdW5hbGlnbmVkDQo+ID4+Pj4gYnVmZmVy Lg0KPiA+Pj4+Pj4+PiBJLmUuIHRoZSBidWYgcGFyYW1ldGVyIGlzIG5vIGxvbmdlciByZXF1aXJl ZCB0byBiZSAxNiBiaXQNCj4gPj4+PiBhbGlnbmVkLg0KPiA+Pj4+Pj4+Pg0KPiA+Pj4+Pj4+PiBU aGUgY2hlY2tzdW0gaXMgc3RpbGwgY2FsY3VsYXRlZCB1c2luZyBhIDE2IGJpdCBhbGlnbmVkDQo+ IHBvaW50ZXIsDQo+ID4+Pj4gc28NCj4gPj4+Pj4+Pj4gdGhlIGNvbXBpbGVyIGNhbiBhdXRvLXZl Y3Rvcml6ZSB0aGUgZnVuY3Rpb24ncyBpbm5lciBsb29wLg0KPiA+Pj4+Pj4+Pg0KPiA+Pj4+Pj4+ PiBXaGVuIHRoZSBidWZmZXIgaXMgdW5hbGlnbmVkLCB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgYnVm ZmVyIGlzDQo+ID4+Pj4+Pj4+IGhhbmRsZWQgc2VwYXJhdGVseS4gRnVydGhlcm1vcmUsIHRoZSBj YWxjdWxhdGVkIGNoZWNrc3VtIG9mDQo+IHRoZQ0KPiA+Pj4+Pj4+PiBidWZmZXIgaXMgYnl0ZSBz aGlmdGVkIGJlZm9yZSBiZWluZyBhZGRlZCB0byB0aGUgaW5pdGlhbA0KPiA+Pj4+IGNoZWNrc3Vt LA0KPiA+Pj4+Pj4+PiB0byBjb21wZW5zYXRlIGZvciB0aGUgY2hlY2tzdW0gaGF2aW5nIGJlZW4g Y2FsY3VsYXRlZCBvbiB0aGUNCj4gPj4+PiBidWZmZXINCj4gPj4+Pj4+Pj4gc2hpZnRlZCBieSBv bmUgYnl0ZS4NCj4gPj4+Pj4+Pj4NCj4gPj4+Pj4+Pj4gdjQ6DQo+ID4+Pj4+Pj4+ICogQWRkIGNv cHlyaWdodCBub3RpY2UuDQo+ID4+Pj4+Pj4+ICogSW5jbHVkZSBzdGRib29sLmggKEVtaWwgQmVy ZykuDQo+ID4+Pj4+Pj4+ICogVXNlIFJURV9QVFJfQUREIChFbWlsIEJlcmcpLg0KPiA+Pj4+Pj4+ PiAqIEZpeCBvbmUgbW9yZSB0eXBvIGluIGNvbW1pdCBtZXNzYWdlLiBJcyAndW5saWduZWQnIGV2 ZW4gYQ0KPiA+Pj4+IHdvcmQ/DQo+ID4+Pj4+Pj4+IHYzOg0KPiA+Pj4+Pj4+PiAqIFJlbW92ZSBi cmFjZXMgZnJvbSBzaW5nbGUgc3RhdGVtZW50IGJsb2NrLg0KPiA+Pj4+Pj4+PiAqIEZpeCB0eXBv IGluIGNvbW1pdCBtZXNzYWdlLg0KPiA+Pj4+Pj4+PiB2MjoNCj4gPj4+Pj4+Pj4gKiBEbyBub3Qg YXNzdW1lIHRoYXQgdGhlIGJ1ZmZlciBpcyBwYXJ0IG9mIGFuIGFsaWduZWQgcGFja2V0DQo+ID4+ Pj4gYnVmZmVyLg0KPiA+Pj4+Pj4+Pg0KPiA+Pj4+Pj4+PiBCdWd6aWxsYSBJRDogMTAzNQ0KPiA+ Pj4+Pj4+PiBDYzogc3RhYmxlQGRwZGsub3JnDQo+ID4+Pj4+Pj4+DQo+ID4+Pj4+Pj4+IFNpZ25l ZC1vZmYtYnk6IE1vcnRlbiBCcsO4cnVwIDxtYkBzbWFydHNoYXJlc3lzdGVtcy5jb20+DQo+ID4N Cj4gPiBbLi4uXQ0KPiA+DQo+ID4+Pj4+Pg0KPiA+Pj4+Pj4gVGhlIGNvbXBpbGVyIHdpbGwgYmUg YWJsZSB0byBhdXRvIHZlY3Rvcml6ZSBldmVuIHVuYWxpZ25lZA0KPiA+Pj4+IGFjY2Vzc2VzLA0K PiA+Pj4+Pj4ganVzdCB3aXRoIGRpZmZlcmVudCBpbnN0cnVjdGlvbnMuIEZyb20gd2hhdCBJIGNh biB0ZWxsLCB0aGVyZSdzDQo+IG5vDQo+ID4+Pj4+PiBwZXJmb3JtYW5jZSBpbXBhY3QsIGF0IGxl YXN0IG5vdCBvbiB0aGUgeDg2XzY0IHN5c3RlbXMgSSB0cmllZA0KPiBvbi4NCj4gPj4+Pj4+DQo+ ID4+Pj4+PiBJIHRoaW5rIHlvdSBzaG91bGQgcmVtb3ZlIHRoZSBmaXJzdCBzcGVjaWFsIGNhc2Ug Y29uZGl0aW9uYWwgYW5kDQo+ID4+Pj4gdXNlDQo+ID4+Pj4+PiBtZW1jcHkoKSBpbnN0ZWFkIG9m IHRoZSBjdW1iZXJzb21lIF9fbWF5X2FsaWFzX18gY29uc3RydWN0IHRvDQo+ID4+Pj4gcmV0cmll dmUNCj4gPj4+Pj4+IHRoZSBkYXRhLg0KPiA+Pj4+Pj4NCj4gPj4+Pj4NCj4gPj4+Pj4gSGVyZToN Cj4gPj4+Pj4gaHR0cHM6Ly93d3cuYWduZXIub3JnL29wdGltaXplL2luc3RydWN0aW9uX3RhYmxl cy5wZGYNCj4gPj4+Pj4gaXQgbGlzdHMgdGhlIGxhdGVuY3kgb2Ygdm1vdmRxYSAoYWxpZ25lZCkg YXMgNiBjeWNsZXMgYW5kIHRoZQ0KPiA+PiBsYXRlbmN5DQo+ID4+Pj4gZm9yDQo+ID4+Pj4+IHZt b3ZkcXUgKHVuYWxpZ25lZCkgYXMgNyBjeWNsZXMuIFNvIEkgZ3Vlc3MgdGhlcmUgY2FuIGJlIHNv bWUNCj4gPj4+PiBkaWZmZXJlbmNlLg0KPiA+Pj4+PiBBbHRob3VnaCBpbiBwcmFjdGljZSBJJ20g bm90IHN1cmUgd2hhdCBkaWZmZXJlbmNlIGl0IG1ha2VzLiBJJ3ZlDQo+ID4+IG5vdA0KPiA+Pj4+ IHNlZW4gYW55DQo+ID4+Pj4+IGRpZmZlcmVuY2UgaW4gcnVudGltZSBiZXR3ZWVuIHRoZSB0d28g dmVyc2lvbnMuDQo+ID4+Pj4+DQo+ID4+Pj4NCj4gPj4+PiBDb3JyZWN0aW9uIHRvIG15IGNvbW1l bnQ6DQo+ID4+Pj4gVGhvc2Ugc3RhdHMgYXJlIGZvciBzb21lIG9sZGVyIENQVS4gRm9yIHNvbWUg bmV3ZXIgQ1BVcyBzdWNoIGFzDQo+ID4+IFRpZ2VyDQo+ID4+Pj4gTGFrZSB0aGUgc3RhdHMgc2Vl bSB0byBiZSB0aGUgc2FtZSByZWdhcmRsZXNzIG9mIGFsaWduZWQgb3INCj4gPj4gdW5hbGlnbmVk Lg0KPiA+Pj4+DQo+ID4+Pg0KPiA+Pj4gSSBhZ3JlZSB0aGF0IHRoZSBtZW1jcHkgbWV0aG9kIGlz IG1vcmUgZWxlZ2FudCBhbmQgZWFzeSB0byByZWFkLg0KPiA+Pj4NCj4gPj4+IEhvd2V2ZXIsIHdl IHdvdWxkIG5lZWQgdG8gcGVyZm9ybWFuY2UgdGVzdCB0aGUgbW9kaWZpZWQgY2hlY2tzdW0NCj4g Pj4gZnVuY3Rpb24gd2l0aCBhIGxhcmdlIG51bWJlciBvZiBDUFVzIHRvIHByb3ZlIHRoYXQgd2Ug ZG9uJ3QNCj4gaW50cm9kdWNlIGENCj4gPj4gcGVyZm9ybWFuY2UgcmVncmVzc2lvbiBvbiBhbnkg Q1BVIGFyY2hpdGVjdHVyZSBzdGlsbCBzdXBwb3J0ZWQgYnkNCj4gRFBESy4NCj4gPj4gQW5kIEVt aWwgYWxyZWFkeSBmb3VuZCBhIENQVSB3aGVyZSBpdCBjb3N0cyAxIGV4dHJhIGN5Y2xlIHBlciAx Ng0KPiBieXRlcywNCj4gPj4gd2hpY2ggYWRkcyB1cCB0byBhIHRvdGFsIG9mIGNhLiA5MSBleHRy YSBjeWNsZXMgb24gYSAxNDYwIGJ5dGUgVENQDQo+ID4+IHBhY2tldC4NCj4gPj4+DQo+ID4+DQo+ ID4+IEkgdGhpbmsgeW91J3ZlIG1pc3VuZGVyc3Rvb2Qgd2hhdCBsYXRlbmN5IG1lYW5zIGluIHN1 Y2ggdGFibGVzLiBJdCdzDQo+IGENCj4gPj4gZGF0YSBkZXBlbmRlbmN5IHRoaW5nLCBub3QgYSBt ZWFzdXJlIG9mIHRocm91Z2hwdXQuIFRoZSB0aHJvdWdocHV0DQo+IGlzDQo+ID4+ICptdWNoKiBo aWdoZXIuIE15IGd1ZXNzIHdvdWxkIGJlIHR3byBzdWNoIGluc3RydWN0aW9uIHBlciBjbG9jay4N Cj4gPj4NCj4gPj4gRm9yIHlvdXIgMTQ2MCBieXRlcyBleGFtcGxlLCBteSBaZW4zIEFNRCBuZWVk cyBwZXJmb3JtcyBpZGVudGljYWwNCj4gd2l0aA0KPiA+PiBib3RoIHRoZSBjdXJyZW50IERQREsg aW1wbGVtZW50YXRpb24sIHlvdXIgcGF0Y2gsIGFuZCBhIG1lbWNweSgpLQ0KPiBpZmllZA0KPiA+ PiB2ZXJzaW9uIG9mIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLiBUaGV5IGFsbCBuZWVkIH4x MzAgY2xvY2sNCj4gPj4gY3ljbGVzL3BhY2tldCwgd2l0aCB3YXJtIGNhY2hlcy4gSVBDIGlzIDMg aW5zdHJ1Y3Rpb25zIHBlciBjeWNsZSwNCj4gYnV0DQo+ID4+IG9idmlvdXMgbm90IGFsbCBpbnN0 cnVjdGlvbnMgYXJlIFNJTUQuDQo+ID4NCj4gPiBZb3UncmUgcmlnaHQsIEkgd2Fzbid0IHRoaW5r aW5nIGRlZXBlciBhYm91dCBpdCBiZWZvcmUgZXh0cmFwb2xhdGluZy4NCj4gPg0KPiA+IEdyZWF0 IHRvIHNlZSBzb21lIHJlYWwgbnVtYmVycyEgSSB3aXNoIHNvbWVvbmUgd291bGQgZG8gdGhlIHNh bWUNCj4gdGVzdGluZyBvbiBhbiBvbGQgQVJNIENQVSwgc28gd2UgY291bGQgYWxzbyBzZWUgdGhl IG90aGVyIGVuZCBvZiB0aGUNCj4gc2NhbGUuDQo+ID4NCj4gDQo+IEkndmUgcmFuIGl0IG9uIGFu IEFSTSBBNzIuIEZvciB0aGUgYWxpZ25lZCAxNDYwIGJ5dGVzIGNhc2UgSSBnb3Q6DQo+IEN1cnJl bnQgRFBESyB+NTcyIGNjLiBZb3VyIHBhdGNoOiB+NTc4IGNjLiBNZW1jcHktZmllZDogfjU3MyBj Yy4gVGhleQ0KPiBwZXJmb3JtZWQgYWJvdXQgdGhlIHNhbWUgZm9yIGFsbCB1bmFsaWduZWQvYWxp Z25lZCBhbmQgc2l6ZXMgSSB0ZXN0ZWQuDQo+IFRoaXMgcGxhdGZvcm0gKG9yIGNvdWxkIGJlIEdD QyB2ZXJzaW9uIGFzIHdlbGwpIGRvZXNuJ3Qgc3VmZmVyIGZyb20gdGhlDQo+IHVuYWxpZ25lZCBw ZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiB5b3VyIHBhdGNoIHNob3dlZCBvbiBteSBBTUQgbWFjaGlu ZS4NCj4gDQo+ID4+IFRoZSBtYWluIGlzc3VlIHdpdGggY2hlY2tzdW1taW5nIG9uIHRoZSBDUFUg aXMsIGluIG15IGV4cGVyaWVuY2UsDQo+IG5vdA0KPiA+PiB0aGF0IHlvdSBkb24ndCBoYXZlIGVu b3VnaCBjb21wdXRlLCBidXQgdGhhdCB5b3UgdHJhc2ggdGhlIGNhY2hlcy4NCj4gPg0KPiA+IEFn cmVlLiBJIGhhdmUgbm90aWNlZCB0aGF0IHg4NiBoYXMgIm5vbi10ZW1wb3JhbCIgaW5zdHJ1Y3Rp b24NCj4gdmFyaWFudHMgdG8gbG9hZC9zdG9yZSBkYXRhIHdpdGhvdXQgdHJhc2hpbmcgdGhlIGNh Y2hlIGVudGlyZWx5Lg0KPiA+DQo+ID4gQSB2YXJpYW50IG9mIHRoZSBjaGVja3N1bSBmdW5jdGlv biB1c2luZyBzdWNoIGluc3RydWN0aW9ucyBtaWdodCBiZQ0KPiBoYW5keS4NCj4gPg0KPiANCj4g WWVzLCBhbHRob3VnaCB5b3UgbWF5IG5lZWQgdG8gcHJlZmV0Y2ggdGhlIHBheWxvYWQgZm9yIGdv b2QNCj4gcGVyZm9ybWFuY2UuDQo+IA0KPiA+IFZhcmlhbnRzIG9mIHRoZSBtZW1jcHkgZnVuY3Rp b24gdXNpbmcgc3VjaCBpbnN0cnVjdGlvbnMgbWlnaHQgYWxzbyBiZQ0KPiBoYW5keSBmb3Igc29t ZSBwdXJwb3NlcywgZS5nLiBjb3B5aW5nIHRoZSBjb250ZW50cyBvZiBwYWNrZXRzLCB3aGVyZQ0K PiB0aGUgb3JpZ2luYWwgYW5kL29yIGNvcHkgd2lsbCBub3QgYWNjZXNzZWQgc2hvcnRseSB0aGVy ZWFmdGVyLg0KPiA+DQo+IA0KPiBJbmRlZWQgYW5kIEkgdGhpbmsgaXQncyBiZWVuIGRpc2N1c3Nl ZCBvbiB0aGUgbGlzdC4gVGhlcmUncyBzb21lIHdvcmsNCj4gdG8NCj4gZ2V0IGl0IHJpZ2h0LCBz aW5jZSBhbGlnbm1lbnQgcmVxdWlyZW1lbnQgYW5kIHRoZSBmYWN0IGEgZGlmZmVyZW50DQo+IG1l bW9yeSBtb2RlbCBpcyB1c2VkIGZvciB0aG9zZSBTSU1EIGluc3RydWN0aW9ucyBjYXVzZXMgdHJv dWJsZSBmb3IgYQ0KPiBnZW5lcmljIGltcGxlbWVudGF0aW9uLiAoRm9yIHg4Nl82NC4pDQoNCkkg anVzdCBwb3N0ZWQgYW4gUkZDIFsxXSBmb3Igc3VjaCBtZW1jcHkoKSBhbmQgbWVtc2V0KCkgZnVu Y3Rpb25zLA0Kc28gbGV0J3Mgc2VlIGhvdyBpdCBmYW5zIG91dC4NCg0KWzFdIGh0dHA6Ly9pbmJv eC5kcGRrLm9yZy9kZXYvOThDQkQ4MDQ3NEZBOEI0NEJGODU1REYzMkM0N0RDMzVEODcxOTVAc21h cnRzZXJ2ZXIuc21hcnRzaGFyZS5kay9ULyN1DQoNCj4gDQo+ID4+PiBTbyBJIG9wdGVkIGZvciBh IHNvbHV0aW9uIHdpdGggemVybyBjaGFuZ2VzIHRvIHRoZSBpbm5lciBsb29wLCBzbw0KPiBubw0K PiA+PiBwZXJmb3JtYW5jZSByZXRlc3RpbmcgaXMgcmVxdWlyZWQgKGZvciB0aGUgcHJldmlvdXNs eSBzdXBwb3J0ZWQgdXNlDQo+ID4+IGNhc2VzLCB3aGVyZSB0aGUgYnVmZmVyIGlzIGFsaWduZWQp Lg0KPiA+Pj4NCj4gPj4NCj4gPj4gWW91IHdpbGwgc2VlIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9u IHdpdGggdGhpcyBzb2x1dGlvbiBhcyB3ZWxsLA0KPiB1bmRlcg0KPiA+PiBjZXJ0YWluIGNvbmRp dGlvbnMuIEZvciB1bmFsaWduZWQgMTAwIGJ5dGVzIG9mIGRhdGEsIHRoZSBjdXJyZW50DQo+IERQ REsNCj4gPj4gaW1wbGVtZW50YXRpb24gYW5kIHRoZSBtZW1jcHkoKS1maWVkIHZlcnNpb24gbmVl ZHMgfjIxIGNjL3BhY2tldC4NCj4gWW91cg0KPiA+PiBwYXRjaCBuZWVkcyA1NCBjYy9wYWNrZXQu DQo+ID4NCj4gPiBZZXMsIGl0J3MgYSB0cmFkZW9mZi4gSSBleGNsdXNpdmVseSBhaW1lZCBhdCBt YWludGFpbmluZyBwZXJmb3JtYW5jZQ0KPiBmb3IgdGhlIGNhc2Ugd2l0aCBhbGlnbmVkIGJ1ZmZl cnMgKHVuZGVyIGFsbCBjaXJjdW1zdGFuY2VzLCB3aXRoIGFsbA0KPiBDUFVzIGV0Yy4pLCBhbmQg aWdub3JlZCBob3cgaXQgYWZmZWN0cyB0aGUgcGVyZm9ybWFuY2UgZm9yIHRoZSBjYXNlDQo+IHdp dGggdW5hbGlnbmVkIGJ1ZmZlcnMuDQo+ID4NCj4gPiBVbmxpa2UgdGhpcyBwYXRjaCwgdGhlIG1l bWNweSgpIHZhcmlhbnQgaGFzIG5vIGFkZGl0aW9uYWwgYnJhbmNoZXMNCj4gZm9yIHRoZSB1bmFs aWduZWQgY2FzZSwgc28gaXRzIHBlcmZvcm1hbmNlIHNob3VsZCBiZSBnZW5lcmFsbHkNCj4gdW5h ZmZlY3RlZCBieSB0aGUgYnVmZmVyIGJlaW5nIGFsaWduZWQgb3Igbm90LiBIb3dldmVyLCBJIGRv bid0IGhhdmUNCj4gc3VmZmljaWVudCBpbi1kZXB0aCBDUFUga25vd2xlZGdlIHRvIHNheSBpZiB0 aGlzIGFsc28gYXBwbGllcyB0byBSSVNDVg0KPiBhbmQgb2xkZXIgQVJNIENQVXMgc3RpbGwgc3Vw cG9ydGVkIGJ5IERQREsuDQo+ID4NCj4gDQo+IEkgZG9uJ3QgdGhpbmsgYXZvaWRpbmcgUklTQ1Yg bm9uLWNhdGFzdHJvcGhpYyByZWdyZXNzaW9ucyB0cml1bXBocw0KPiBpbXByb3ZpbmcgcGVyZm9y bWFuY2Ugb24gbWFpbnN0cmVhbSBDUFVzIGFuZCBhdm9pZGluZyBjb2RlIHF1YWxpdHkNCj4gcmVn cmVzc2lvbnMuDQorMQ0KDQo+IA0KPiA+IEkgZG9uJ3QgaGF2ZSBzdHJvbmcgZmVlbGluZ3MgZm9y IHRoaXMgcGF0Y2gsIHNvIHlvdSBjYW4gcHJvdmlkZSBhDQo+IG1lbWNweSgpIGJhc2VkIGFsdGVy bmF0aXZlIHBhdGNoLCBhbmQgd2Ugd2lsbCBsZXQgdGhlIGNvbW11bml0eSBkZWNpZGUNCj4gd2hp Y2ggb25lIHRoZXkgcHJlZmVyLg0KPiA+DQo+IA0KPiBUaGlzIGlzIHdoYXQgbXkgY29udmVyc2lv biBsb29rcyBsaWtlOg0KPiANCj4gc3RhdGljIGlubGluZSB1aW50MzJfdA0KPiBfX3J0ZV9yYXdf Y2tzdW0oY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuLCB1aW50MzJfdCBzdW0pDQo+IHsNCj4g CWNvbnN0IHZvaWQgKmVuZDsNCj4gDQo+IAlmb3IgKGVuZCA9IFJURV9QVFJfQUREKGJ1ZiwgKGxl bi9zaXplb2YodWludDE2X3QpKSAqDQo+IHNpemVvZih1aW50MTZfdCkpOw0KPiAJICAgICBidWYg IT0gZW5kOyBidWYgPSBSVEVfUFRSX0FERChidWYsIHNpemVvZih1aW50MTZfdCkpKSB7DQo+IAkJ dWludDE2X3QgdjsNCj4gDQo+IAkJbWVtY3B5KCZ2LCBidWYsIHNpemVvZih1aW50MTZfdCkpOw0K PiAJCXN1bSArPSB2Ow0KPiAJfQ0KPiANCj4gCS8qIGlmIGxlbmd0aCBpcyBvZGQsIGtlZXBpbmcg aXQgYnl0ZSBvcmRlciBpbmRlcGVuZGVudCAqLw0KPiAJaWYgKHVubGlrZWx5KGxlbiAlIDIpKSB7 DQo+IAkJdWludDhfdCBsYXN0Ow0KPiAJCXVpbnQxNl90IGxlZnQgPSAwOw0KPiANCj4gCQltZW1j cHkoJmxhc3QsIGVuZCwgMSk7DQo+IAkJKih1bnNpZ25lZCBjaGFyICopJmxlZnQgPSBsYXN0Ow0K PiAJCXN1bSArPSBsZWZ0Ow0KPiAJfQ0KPiANCj4gCXJldHVybiBzdW07DQo+IH0NCj4gDQo+IE1h eWJlIHRoZSBtYWludGFpbmVyIGNhbiBoYXZlIGFuIG9waW5pb24sIGJlZm9yZSBJIHByb3ZpZGUg YSByZWFsDQo+IHBhdGNoLA0KPiB0byBzYXZlIG1lIHNvbWUgd29yay4gSSB3b3VsZCByZWFsbHkg bGlrZSB0byBjb250cmlidXRlIHNvbWUNCj4gcGVyZm9ybWFuY2UNCj4gYXV0b3Rlc3RzIGluIHRo YXQgY2FzZS4gSSBtZWFuLCB5b3UgY291bGQgYmUgcmlnaHQgYW5kIHRoZSBwZXJmb3JtYW5jZQ0K PiBjb3VsZCBiZSB0b3RhbGx5IG9mZiBvbiBzb21lIHBsYXRmb3JtLg0KDQpMb29raW5nIGF0IHRo ZSBtZXNvbiBmaWxlcywgQTcyIHNlZW1zIHRvIGJlIHRoZSB3ZWFrZXN0IHR5cGUgb2YgQ1BVIGFj dGl2ZWx5IHN1cHBvcnRlZCBieSBEUERLLg0KU28geW91ciB0ZXN0aW5nIHNob3dzIGJldHRlciBw ZXJmb3JtYW5jZSBmb3IgeW91ciBzb2x1dGlvbiB0aGFuIG1pbmUgdW5kZXIgYWxsIGNvbmRpdGlv bnMuDQoNCklmIHlvdSBwb3N0IGEgcGF0Y2gsIEknbGwgY2xvc2UgdGhpcyBvbmUgYXMgc3VwZXJz ZWRlZC4NCg0KPiANCj4gPj4gQnV0IHRoZSBvbGQgdmVyc2lvbiBkaWRuJ3Qgc3VwcG9ydCB1bmFs aWduZWQgYWNjZXNzZXM/IEluIG1hbnkNCj4gY29tcGlsZXINCj4gPj4gZmxhZy9tYWNoaW5lIGNv bWJpbmF0aW9ucyBpdCBkaWQuDQo+ID4NCj4gPiBJdCBjcmFzaGVkIGluIHNvbWUgY2FzZXMuIFRo YXQgd2FzIHRoZSBwb2ludCBvZiB0aGUgYnVnIHJlcG9ydCBbMV0sDQo+IGFuZCB0aGUgcmVhc29u IHRvIHByb3ZpZGUgYSBwYXRjaC4NCj4gPg0KPiA+IFsxXSBodHRwczovL2J1Z3MuZHBkay5vcmcv c2hvd19idWcuY2dpP2lkPTEwMzUNCj4gPg0KDQo=