From mboxrd@z Thu Jan 1 00:00:00 1970 From: Subject: Re: [PATCH 3/3] net: macb: add missing barriers when reading buffers Date: Thu, 13 Dec 2018 10:48:55 +0000 Message-ID: <9306d73e-38c3-94ad-5b08-4955ef5aee0f@microchip.com> References: <20181130182137.27974-1-anssi.hannula@bitwise.fi> <20181130182137.27974-4-anssi.hannula@bitwise.fi> <6378cbaf-2c8d-3c22-2d2d-632c32c6195a@microchip.com> <567c5ea6-d74d-5398-aee5-2b486ddff983@bitwise.fi> <0212fb04-8c2d-264c-a459-6d579a56507e@microchip.com> <70b55891-1bc4-be1a-1e45-09f073d3e021@bitwise.fi> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: , , To: Return-path: Received: from esa5.microchip.iphmx.com ([216.71.150.166]:12084 "EHLO esa5.microchip.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727403AbeLMKtA (ORCPT ); Thu, 13 Dec 2018 05:49:00 -0500 In-Reply-To: <70b55891-1bc4-be1a-1e45-09f073d3e021@bitwise.fi> Content-Language: en-US Content-ID: <1EE8CC18320CDE43AB23BBBB5C170824@namprd11.prod.outlook.com> Sender: netdev-owner@vger.kernel.org List-ID: DQoNCk9uIDEyLjEyLjIwMTggMTM6MjcsIEFuc3NpIEhhbm51bGEgd3JvdGU6DQo+IE9uIDEyLjEy LjIwMTggMTI6NTgsIENsYXVkaXUuQmV6bmVhQG1pY3JvY2hpcC5jb20gd3JvdGU6DQo+Pg0KPj4g T24gMTEuMTIuMjAxOCAxNToyMSwgQW5zc2kgSGFubnVsYSB3cm90ZToNCj4+PiBPbiAxMC4xMi4y MDE4IDEyOjM0LCBDbGF1ZGl1LkJlem5lYUBtaWNyb2NoaXAuY29tIHdyb3RlOg0KPj4+PiBPbiAw Ny4xMi4yMDE4IDE0OjAwLCBBbnNzaSBIYW5udWxhIHdyb3RlOg0KPj4+Pj4gT24gNi4xMi4yMDE4 IDE2OjE0LCBDbGF1ZGl1LkJlem5lYUBtaWNyb2NoaXAuY29tIHdyb3RlOg0KPj4+Pj4+IEhpIEFu c3NpLA0KPj4+Pj4gSGkhDQo+Pj4+Pg0KPj4+Pj4+IE9uIDA1LjEyLjIwMTggMTY6MDAsIEFuc3Np IEhhbm51bGEgd3JvdGU6DQo+Pj4+Pj4+IE9uIDUuMTIuMjAxOCAxNDozNywgQ2xhdWRpdS5CZXpu ZWFAbWljcm9jaGlwLmNvbSB3cm90ZToNCj4+Pj4+Pj4+IE9uIDMwLjExLjIwMTggMjA6MjEsIEFu c3NpIEhhbm51bGEgd3JvdGU6DQo+Pj4+Pj4+Pj4gV2hlbiByZWFkaW5nIGJ1ZmZlciBkZXNjcmlw dG9ycyBvbiBSWCBvciBvbiBUWCBjb21wbGV0aW9uLCBhbg0KPj4+Pj4+Pj4+IFJYX1VTRUQvVFhf VVNFRCBiaXQgaXMgY2hlY2tlZCBmaXJzdCB0byBlbnN1cmUgdGhhdCB0aGUgZGVzY3JpcHRvciBo YXMNCj4+Pj4+Pj4+PiBiZWVuIHBvcHVsYXRlZC4gSG93ZXZlciwgdGhlcmUgYXJlIG5vIG1lbW9y eSBiYXJyaWVycyB0byBlbnN1cmUgdGhhdCB0aGUNCj4+Pj4+Pj4+PiBkYXRhIHByb3RlY3RlZCBi eSB0aGUgUlhfVVNFRC9UWF9VU0VEIGJpdCBpcyB1cC10by1kYXRlIHdpdGggcmVzcGVjdCB0bw0K Pj4+Pj4+Pj4+IHRoYXQgYml0Lg0KPj4+Pj4+Pj4+DQo+Pj4+Pj4+Pj4gRml4IHRoYXQgYnkgYWRk aW5nIERNQSByZWFkIG1lbW9yeSBiYXJyaWVycyBvbiB0aG9zZSBwYXRocy4NCj4+Pj4+Pj4+Pg0K Pj4+Pj4+Pj4+IEkgZGlkIG5vdCBvYnNlcnZlIGFueSBhY3R1YWwgaXNzdWVzIGNhdXNlZCBieSB0 aGVzZSBiZWluZyBtaXNzaW5nLA0KPj4+Pj4+Pj4+IHRob3VnaC4NCj4+Pj4+Pj4+Pg0KPj4+Pj4+ Pj4+IFRlc3RlZCBvbiBhIFp5bnFNUCBiYXNlZCBzeXN0ZW0uDQo+Pj4+Pj4+Pj4NCj4+Pj4+Pj4+ PiBTaWduZWQtb2ZmLWJ5OiBBbnNzaSBIYW5udWxhIDxhbnNzaS5oYW5udWxhQGJpdHdpc2UuZmk+ DQo+Pj4+Pj4+Pj4gRml4ZXM6IDg5ZTU3ODVmYzhhNiAoIltQQVRDSF0gQXRtZWwgTUFDQiBldGhl cm5ldCBkcml2ZXIiKQ0KPj4+Pj4+Pj4+IENjOiBOaWNvbGFzIEZlcnJlIDxuaWNvbGFzLmZlcnJl QG1pY3JvY2hpcC5jb20+DQo+Pj4+Pj4+Pj4gLS0tDQo+Pj4+Pj4+Pj4gIGRyaXZlcnMvbmV0L2V0 aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMgfCAyMCArKysrKysrKysrKysrKysrLS0tLQ0KPj4+ Pj4+Pj4+ICAxIGZpbGUgY2hhbmdlZCwgMTYgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkN Cj4+Pj4+Pj4+Pg0KPj4+Pj4+Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9j YWRlbmNlL21hY2JfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21h aW4uYw0KPj4+Pj4+Pj4+IGluZGV4IDQzMGI3YTBmNTQzNi4uYzkzYmFhODYyMWQ1IDEwMDY0NA0K Pj4+Pj4+Pj4+IC0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMN Cj4+Pj4+Pj4+PiArKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5j DQo+Pj4+Pj4+Pj4gQEAgLTg2MSw2ICs4NjEsMTEgQEAgc3RhdGljIHZvaWQgbWFjYl90eF9pbnRl cnJ1cHQoc3RydWN0IG1hY2JfcXVldWUgKnF1ZXVlKQ0KPj4+Pj4+Pj4+ICANCj4+Pj4+Pj4+PiAg CQkJLyogRmlyc3QsIHVwZGF0ZSBUWCBzdGF0cyBpZiBuZWVkZWQgKi8NCj4+Pj4+Pj4+PiAgCQkJ aWYgKHNrYikgew0KPj4+Pj4+Pj4+ICsJCQkJLyogRW5zdXJlIGFsbCBvZiBkZXNjIGlzIGF0IGxl YXN0IGFzIHVwLXRvLWRhdGUNCj4+Pj4+Pj4+PiArCQkJCSAqIGFzIGN0cmwgKFRYX1VTRUQgYml0 KQ0KPj4+Pj4+Pj4+ICsJCQkJICovDQo+Pj4+Pj4+Pj4gKwkJCQlkbWFfcm1iKCk7DQo+Pj4+Pj4+ Pj4gKw0KPj4+Pj4+Pj4gSXMgdGhpcyBuZWNlc3Nhcnk/IFdvdWxkbid0IHByZXZpb3VzIHJtYigp IHRha2UgY2FyZSBvZiB0aGlzPyBBdCB0aGlzIHRpbWUNCj4+Pj4+Pj4+IGRhdGEgc3BlY2lmaWMg dG8gdGhpcyBkZXNjcmlwdG9yIHdhcyBjb21wbGV0ZWQuIFRoZSBUWCBkZXNjcmlwdG9ycyBmb3Ig bmV4dA0KPj4+Pj4+Pj4gZGF0YSB0byBiZSBzZW5kIGlzIHVwZGF0ZWQgdW5kZXIgYSBsb2NrZWQg c3BpbmxvY2suDQo+Pj4+Pj4+IFRoZSBwcmV2aW91cyBybWIoKSBpcyBiZWZvcmUgdGhlIFRYX1VT RUQgY2hlY2ssIHNvIG15IHVuZGVyc3RhbmRpbmcgaXMNCj4+Pj4+Pj4gdGhhdCB0aGUgZm9sbG93 aW5nIGNvdWxkIGhhcHBlbiBpbiB0aGVvcnk6DQo+Pj4+Pj4gV2UgYXJlIHVzaW5nIHRoaXMgSVAg b24gYW5kIEFSTSBhcmNoaXRlY3R1cmUsIHNvLCB3aXRoIHJlZ2FyZHMgdG8gcm1iKCksIEkNCj4+ Pj4+PiB1bmRlcnN0YW5kIGZyb20gWzFdIHRoYXQgZHNiIGNvbXBsZXRlcyB3aGVuOg0KPj4+Pj4+ ICJBbGwgZXhwbGljaXQgbWVtb3J5IGFjY2Vzc2VzIGJlZm9yZSB0aGlzIGluc3RydWN0aW9uIGNv bXBsZXRlLg0KPj4+Pj4+IEFsbCBDYWNoZSwgQnJhbmNoIHByZWRpY3RvciBhbmQgVExCIG1haW50 ZW5hbmNlIG9wZXJhdGlvbnMgYmVmb3JlIHRoaXMNCj4+Pj4+PiBpbnN0cnVjdGlvbiBjb21wbGV0 ZS4iDQo+Pj4+Pj4NCj4+Pj4+Pj4gMS4gcm1iKCkuDQo+Pj4+Pj4gQWNjb3JkaW5nIHRvIFsxXSB0 aGlzIHNob3VsZCBlbmQgYWZ0ZXIgYWxsIHByZXZpb3VzIGluc3RydWN0aW9ucyAobG9hZHMsDQo+ Pj4+Pj4gc3RvcmVzKSBlbmRzLg0KPj4+Pj4+DQo+Pj4+Pj4+IDIuIFJlYWRzIGFyZSByZW9yZGVy ZWQgc28gdGhhdCBUWCB0aW1lc3RhbXAgaXMgcmVhZCBmaXJzdCAtIG5vIGJhcnJpZXJzDQo+Pj4+ Pj4+IGFyZSBjcm9zc2VkLg0KPj4+Pj4+IEJ1dCwgYXMgcGVyIFsxXSwgbm8gb253YXJkIGluc3Ry dWN0aW9uIHdpbGwgYmUgcmVhY2hlZCB1bnRpbCBhbGwNCj4+Pj4+PiBpbnN0cnVjdGlvbiBwcmlv ciB0byBkc2IgZW5kcywgc28sIGFmdGVyIHJtYigpIGFsbCBkZXNjcmlwdG9yJ3MgbWVtYmVycw0K Pj4+Pj4+IHNob3VsZCBiZSB1cGRhdGVkLCByaWdodD8NCj4+Pj4+IFRoZSBkZXNjcmlwdG9yIHRo YXQgdHJpZ2dlcmVkIHRoZSBUWCBpbnRlcnJ1cHQgc2hvdWxkIGJlIHZpc2libGUgbm93LCB5ZXMu DQo+Pj4+PiBIb3dldmVyLCB0aGUgY29udHJvbGxlciBtYXkgYmUgd3JpdGluZyB0byBhbnkgb3Ro ZXIgZGVzY3JpcHRvcnMgYXQgdGhlDQo+Pj4+PiBzYW1lIHRpbWUgYXMgdGhlIGxvb3AgaXMgcHJv Y2Vzc2luZyB0aHJvdWdoIHRoZW0sIGFzIHRoZXJlIGFyZSBtdWx0aXBsZQ0KPj4+Pj4gVFggYnVm ZmVycy4NCj4+Pj4gWWVzLCBidXQgdGhlcmUgaXMgdGhlICJybWIoKSIgYWZ0ZXIgImRlc2MgPSBt YWNiX3R4X2Rlc2MocXVldWUsIHRhaWwpOyIgYXQNCj4+Pj4gdGhlIGJlZ2lubmluZyBvZiBsb29w IGludGVuZGVkIGZvciB0aGF0Li4uIEluIHRoZSAybmQgbG9vcCB5b3UgYXJlDQo+Pj4+IG9wZXJh dGluZyB3aXRoIHRoZSBzYW1lIGRlc2NyaXB0b3Igd2hpY2ggd2FzIHJlYWQgaW4gdGhlIGZpcnN0 IGxvb3AuDQo+Pj4gSSdtIGNvbmNlcm5lZCBhYm91dCB0aGUgMm5kIGl0ZXJhdGlvbiBvZiB0aGUg Zmlyc3QgZm9yIGxvb3AgaW4NCj4+PiBtYWNiX3R4X2ludGVycnVwdCgpLg0KPj4+IFRoYXQgb3Bl cmF0ZXMgb24gYSBkaWZmZXJlbnQgZGVzY3JpcHRvciBkdWUgdG8gdGFpbCsrLCBhbmQgdGhhdA0K Pj4+IGRpZmZlcmVudCBkZXNjcmlwdG9yIG1heSBoYXZlIGluLWZsaWdodCB3cml0ZXMgZnJvbSBj b250cm9sbGVyIGFzIHRoZQ0KPj4+IGludGVycnVwdCBtYXkgb3IgbWF5IG5vdCBhbHJlYWR5IGJl IHJhaXNlZCBmb3IgaXQuDQo+PiBJIGFncmVlIHdpdGggdGhhdCwgdGhlcmUgbWF5IGJlIGluLWZs aWdodHMgdXBkYXRlcywgYnV0IHNpbmNlIG93bmVyc2hpcCBiaXQNCj4+IHNob3VsZCBiZSB1cGRh dGVkIGF0IHRoZSBlbmQgb2YgdGhlIFRYIChJIGV4cGVjdCBhdCB0aGlzIG1vbWVudCB0byBiZQ0K Pj4gdXBkYXRlZCBhbGwgdGhlIGRlc2NyaXB0b3IncyBwYXJ0cywgaW5jbHVkaW5nIHRpbWVzdGFt cHMpLCBpZiB5b3UgcmVhZCBhDQo+PiBkZXNjcmlwdG9yIGFuZCBpdCBoYXNuJ3QgYmVlbiB0cmVh dGVkIGJ5IHRoZSBoYXJkd2FyZSB0aGUgZGVzY3JpcHRvciBpcyBvd24NCj4+IGJ5IHRoZSBoYXJk d2FyZSBhbmQgdGhlcmUgaXMgdGhpcyBjaGVjayBhZnRlciBjdHJsIGlzIHJlYWQ6DQo+Pg0KPj4g aWYgKCEoY3RybCAmIE1BQ0JfQklUKFRYX1VTRUQpKSkNCj4+IAlicmVhazsNCj4+DQo+PiBOZXh0 IHRpbWUgYSBuZXcgdHggaW50ZXJydXB0IHdpbGwgYmUgcmFpc2VkIHRoaXMgZGVzY3JpcHRvciB3 b3VsZCBiZSBhbHNvDQo+PiB0cmVhdGVkLg0KPj4NCj4+IEluIGNhc2UgdGhlIGFib3ZlIGluc3Ry dWN0aW9uIGRvZXNuJ3QgYnJlYWsgdGhlbiBpdCBtZWFucyB0aGUgZGVzY3JpcHRvcg0KPj4gd2Fz IHRyYW5zbWl0dGVkLiBBbmQgc2luY2Ugb3duZXJzaGlwIHNob3VsZCBiZSB1cGRhdGVkIGF0IHRo ZSBlbmQgb2YgdGhlDQo+PiBUWCwgdGhpcyBtZWFucyBubyBpbi1mbGlnaHRzIHVwZGF0ZXMgc2hv dWxkIGJlIGRvbmUgb24gdGhpcyBkZXNjcmlwdG9yLCBzbywNCj4+IHdoZW4geW91IHdpbGwgcmVh ZCB0aGUgdGltZXN0YW1wcyB0aGVzZSBzaG91bGQgYmUgdGhlIGdvb2Qgb25lcyAoZXZlbiBpdCBp cw0KPj4gdGhlIGZpcnN0IG9uZSwgdGhlIDNyZCwgYW5kIHNvIG9uKS4NCj4gDQo+IEFncmVlZCB3 aXRoIGFib3ZlLCB0aGUgb25seSBwcm9ibGVtIGlzIGlmIHRoZSB0czEvdHMyIGxvYWQgaXMgcmVv cmRlcmVkDQo+IGJlZm9yZSBjdHJsIGxvYWQuDQo+IA0KPj4gTW9yZW92ZXIsIHRoaXMgbmV3IGJh cnJpZXIgYmFycmllciBpcyBpbiB0aGUgMm5kIGxvb3AsIHlvdSdyZSBwbGFjaW5nIGENCj4+IG1l bW9yeSBiYXJyaWVyIGFmdGVyIGV2ZXJ5IHN0ZXAgaW4gdGhlIDJuZCBsb29wIGZvciB0aGUgc2Ft ZSBkZXNjcmlwdG9yDQo+PiByZWFkIGluIHRoZSAxc3QgbG9vcCAoaXQgd2FzIGFscmVhZHkgbG9h ZGVkIGluIGEgcHJvY2Vzc29yIHJlZ2lzdGVyKS4NCj4gDQo+IFRoZSBiYXJyaWVyIGlzIGluc2lk ZSAiaWYgKHNrYikiLCBhbmQgc2tiIGlzIG9ubHkgc2V0IGZvciB0aGUgbGFzdCBmcmFtZQ0KDQpB Z3JlZSwgdGhpcyBlc2NhcGVkIG1lLg0KDQo+IGFzIGluZGljYXRlZCBieSB0aGUgY29kZSBhdCB0 aGUgZW5kIG9mIHRoZSBsb29wOg0KPiANCj4gwqDCoMKgIMKgwqDCoCDCoMKgwqAgLyogc2tiIGlz IHNldCBvbmx5IGZvciB0aGUgbGFzdCBidWZmZXIgb2YgdGhlIGZyYW1lLg0KPiDCoMKgwqAgwqDC oMKgIMKgwqDCoCDCoCogV0FSTklORzogYXQgdGhpcyBwb2ludCBza2IgaGFzIGJlZW4gZnJlZWQg YnkNCj4gwqDCoMKgIMKgwqDCoCDCoMKgwqAgwqAqIG1hY2JfdHhfdW5tYXAoKS4NCj4gwqDCoMKg IMKgwqDCoCDCoMKgwqAgwqAqLw0KPiDCoMKgwqAgwqDCoMKgIMKgwqDCoCBpZiAoc2tiKQ0KPiDC oMKgwqAgwqDCoMKgIMKgwqDCoCDCoMKgwqAgYnJlYWs7DQo+IA0KPiANCj4+IFRvIGF2b2lkIHJl b3JkZXJpbmcgb2YgY3RybCBhbmQgdHMxL3RzMiBsb2FkcyB3b3VsZG4ndCBiZSBlbm91Z2ggdG8g aGF2ZQ0KPj4gbWVtb3J5IGJhcnJpZXIgYWZ0ZXI6DQo+PiBjdHJsID0gZGVzYy0+Y3RybDsNCj4g DQo+IFllcywgaXQgd291bGQuDQo+IE15IHYyIG1vdmVkIGl0IGludG8gdGhlIG90aGVyIGRpcmVj dGlvbiwgaW50byB0aGUgdHMgY29kZSwgdGhvdWdoLCB3aGljaA0KPiBoYXMgdGhlIGFkZGVkIGJl bmVmaXQgb2Ygbm8gYmFycmllciB3aGVuIHRpbWVzdGFtcHMgYXJlIGRpc2FibGVkICh3aGljaA0K PiBJSVJDIGlzIHRoZSBkZWZhdWx0KS4NCj4gQnV0IEkgY2FuIG1vdmUgaXQgdG8ganVzdCBhZnRl ciBjdHJsIGlmIHlvdSBzbyBwcmVmZXIuDQoNCkl0J3Mgb2sgaW4gZ2VtX3B0cF90eHN0YW1wKCku DQoNCj4gDQo+Pj4gT3IgYW0gSSBtaXNzaW5nIHNvbWV0aGluZz8NCj4+Pg0KPj4+Pj4+PiAzLiBI VyB3cml0ZXMgdGltZXN0YW1wIGFuZCBzZXRzIFRYX1VTRUQgKG9yIHRoZXkgYmVjb21lIHZpc2li bGUpLg0KPj4+Pj4+IEkgZXhwZWN0IGhhcmR3YXJlIHRvIHNldCBUWF9VU0VEIGFuZCB0aW1lc3Rh bXAgYmVmb3JlIHJhaXNpbmcgVFggY29tcGxldGUNCj4+Pj4+PiBpbnRlcnJ1cHQuIElmIHNvLCB0 aGVyZSBzaG91bGQgYmUgbm8gb24tZmxpZ2h0IHVwZGF0ZXMgb2YgdGhpcyBkZXNjcmlwdG9yLA0K Pj4+Pj4+IHJpZ2h0PyBIYXJkd2FyZSByYWlzZWQgYSBUWF9VU0VEIGJpdCByZWFkIGludGVycnVw dCB3aGVuIGl0IHJlYWRzIGENCj4+Pj4+PiBkZXNjcmlwdG9yIGxpa2UgdGhpcyBhbmQgaGFuZ3Mg VFguDQo+Pj4+PiBGb3IgdGhlIGZpcnN0IGl0ZXJhdGlvbiBvZiB0aGUgbG9vcCwgdGhhdCBpcyBj b3JyZWN0IC0gdGhlcmUgc2hvdWxkIGJlDQo+Pj4+PiBubyBpbi1mbGlnaHQgd3JpdGVzIGZyb20g Y29udHJvbGxlciBhcyBpdCBhbHJlYWR5IHJhaXNlZCB0aGUgaW50ZXJydXB0Lg0KPj4+Pj4gSG93 ZXZlciwgdGhlIGZvbGxvd2luZyBpdGVyYXRpb25zIG9mIHRoZSBsb29wIHByb2Nlc3MgZGVzY3Jp cHRvcnMgdGhhdA0KPj4+Pj4gbWF5IG9yIG1heSBub3QgaGF2ZSB0aGUgaW50ZXJydXB0IHJhaXNl ZCB5ZXQsIGFuZCB0aGVyZWZvcmUgbWF5IHN0aWxsDQo+Pj4+PiBoYXZlIGluLWZsaWdodCB3cml0 ZXMuDQo+Pj4+IEkgZXhwZWN0IHRoZSBoYXJkd2FyZSB0byBnaXZlIHVwIG93bmVyc2hpcCBvZiB0 aGUgZGVzY3JpcHRvciBqdXN0IGF0IHRoZQ0KPj4+PiBlbmQgb2YgVFggb3BlcmF0aW9uLCBzbyB0 aGF0IHRoZSB3b3JkIGNvbnRhaW5pbmcgVFhfVVNFRCB0byBiZSB0aGUgbGFzdCBvbmUNCj4+Pj4g dXBkYXRlZC4gSWYgeW91IHJlYWRzIHRoZSBkZXNjcmlwdG9yIGFuZCBUWF9VU0VEIGlzIG5vdCB0 aGVyZSB0aGUgZmlyc3QNCj4+Pj4gbG9vcCBicmVha3MsIHF1ZXVlLT50eF90YWlsIGlzIHVwZGF0 ZWQgd2l0aCB0aGUgbGFzdCBwcm9jZXNzZWQgZGVzY3JpcHRvcg0KPj4+PiBpbiB0aGUgcXVldWUg KHNlZSAicXVldWUtPnR4X3RhaWwgPSB0YWlsOyIpIHRoZW4gdGhlIG5leHQgaW50ZXJydXB0IHdp bGwNCj4+Pj4gc3RhcnQgcHJvY2Vzc2luZyB3aXRoIHRoaXMgbGFzdCBvbmUgZGVzY3JpcHRvci4N Cj4+PiBBZ3JlZWQsIHRoYXQgaXMgaG93IGl0IHdvcmtzLiBJc3N1ZXMgb25seSBvY2N1ciBpZiB3 ZSBzb21laG93IG9wZXJhdGUgb24NCj4+PiBkYXRhIGJlZm9yZSBvd25lcnNoaXAgd2FzIHRyYW5z ZmVycmVkLg0KPj4gQ291bGQgdGhpcyBoYXBwZW5zPyBTaG91bGRuJ3QgdGhpczoNCj4+IAlpZiAo IShjdHJsICYgTUFDQl9CSVQoVFhfVVNFRCkpKQ0KPj4gCQlicmVhazsNCj4+DQo+PiBhc3N1cmUg dGhhdCB0aGlzIGNvdWxkIG5vdCBoYXBwZW4gYW5kIHRoZSBmYWN0IHRoYXQgdGhlIG93bmVyc2hp cCBpcyBwYXNzZWQNCj4+IHRvIENQVSBhdCB0aGUgZW5kIG9mIGRlc2NyaXB0b3IgdXBkYXRlPw0K PiANCj4gSSBkb24ndCBzZWUgaG93IHRoYXQgcHJldmVudHMgZGVzYy0+Y3RybCBhbmQgZGVzYy0+ dHNfMS90c18yIHJlb3JkZXJpbmcsDQo+IHdoaWNoIGlzIHRoZSBvbmx5IGlzc3VlIHRoYXQgSSBj YW4gc2VlLg0KPiBCeSAiZGF0YSIgYWJvdmUgSSBtZWFudCB0c18xL3RzXzIsIEFGQUlDUyB0aGVy ZSBpcyBub3RoaW5nIGVsc2Ugd2UgcmVhZA0KPiBmcm9tIHRoZSBkZXNjcmlwdG9ycyBhc2lkZSBm cm9tIGN0cmwgaXRzZWxmLg0KPiANCj4+IElmIGxvYWQgcmVvcmRlcmluZyBiL3cgZGVzYy0+Y3Ry bCBhbmQgZGVzYy0+dHNfMS90c18yIHdvdWxkbid0IGJlIGVub3VnaCB0bw0KPj4gaGF2ZSBhIGJh cnJpZXIgYWZ0ZXINCj4+IGN0cmwgPSBkZXNjLT5jdHJsIGluc3RydWN0aW9uPw0KPiANCj4gWWVz LCBwZXIgYWJvdmUuDQo+IA0KPj4+Pj4+PiA0LiBDb2RlIGNoZWNrcyBUWF9VU0VELg0KPj4+Pj4+ PiA1LiBDb2RlIG9wZXJhdGVzIG9uIHRpbWVzdGFtcCB0aGF0IGlzIGFjdHVhbGx5IGdhcmJhZ2Uu DQo+Pj4+Pj4+DQo+Pj4+Pj4+IEknbSBub3QgMTAwJSBzdXJlIHRoYXQgdGhlcmUgaXNuJ3Qgc29t ZSBsaWdodGVyL2NsZWFuZXIgd2F5IHRvIGRvIHRoaXMNCj4+Pj4+Pj4gdGhhbiBkbWFfcm1iKCks IHRob3VnaC4NCj4+Pj4+PiBJZiB5b3Ugc3RpbGwgdGhpbmsgdGhpcyBzY2VuYXJpbyBjb3VsZCBo YXBwZW4gd2h5IG5vdCBjYWxsaW5nIGEgZHNiIGluDQo+Pj4+Pj4gZ2VtX3B0cF9kb190aW1lc3Rh bXAoKS4gSSBmZWVsIGxpa2UgdGhhdCBpcyBhIHByb3BlciBwbGFjZSB0byBjYWxsIGl0Lg0KPj4+ Pj4gT0ssIEkgd2lsbCBtb3ZlIGl0IHRoZXJlLiBVbmxlc3Mgd2UgYXJyaXZlIGF0IGEgY29uY2x1 c2lvbiB0aGF0IGl0IGlzDQo+Pj4+PiB1bm5lY2Vzc2FyeSBhbHRvZ2V0aGVyLCBvZiBjb3Vyc2Ug OikNCj4+Pj4+DQo+Pj4+Pj4gTW9yZW92ZXIsIHRoZXJlIGlzIGJpdCAzMiBvZiBkZXNjLT5jdHJs IHdoaWNoIHRlbGxzIHlvdSBpZiBhIHZhbGlkDQo+Pj4+Pj4gdGltZXN0YW1wIHdhcyBwbGFjZWQg aW4gdGhlIGRlc2NyaXB0b3IuIEJ1dCwgYWdhaW4sIEkgZXhwZWN0IHRoZSB0aW1lc3RhbXANCj4+ Pj4+PiBhbmQgVFhfVVNFRCB0byBiZSBzZXQgYnkgaGFyZHdhcmUgYmVmb3JlIHJhaXNpbmcgVFgg Y29tcGxldGUgaW50ZXJydXB0Lg0KPj4+Pj4gWWVzLCBidXQgc2luY2UgbXkgY29uY2VybiBpcyB0 aGF0IHdpdGhvdXQgYmFycmllcnMgaW4gYmV0d2VlbiwNCj4+Pj4+IGRlc2MtPmN0cmwgbWlnaHQg YmUgcmVhZCBhZnRlciB0c18xL3RzXzIsIHNvIHRoYXQgYml0IG1pZ2h0IGJlIHNlZW4gYXMNCj4+ Pj4+IHNldCBldmVuIHRob3VnaCB0c18xIGlzIG5vdCB5ZXQgYW4gYWN0dWFsIHRpbWVzdGFtcC4g QW5kIHBlciBhYm92ZSwgYWxsDQo+Pj4+PiB0aGlzIG1heSBvY2N1ciBiZWZvcmUgdGhlIFRYIGNv bXBsZXRlIGludGVycnVwdCBpcyByYWlzZWQgZm9yIHRoZQ0KPj4+Pj4gZGVzY3JpcHRvciBpbiBx dWVzdGlvbi4NCj4+Pj4gSWYgc28sIHdoeSBub3QgcGxhY2luZyB0aGUgYmFycmllciB3aGVuIHJl YWRpbmcgdGltZXN0YW1wcz8gRnJvbSBteSBwb2ludA0KPj4+PiBvZiB2aWV3IHRoZSBwbGFjZSBv ZiAiZG1hX3JtYigpIiBpbiB0aGlzIHBhdGNoIGRvZXNuJ3QgZ3VhcmFudGVlcyB0aGF0DQo+Pj4+ IHRzMS90czIgd2VyZSByZWFkIGFmdGVyIHRoZSBleGVjdXRpb24gb2YgYmFycmllciAoY29ycmVj dCBtZSBpZiBJJ20gd3JvbmcpLg0KPj4+IElmIHRoZSB0aW1lc3RhbXAgdHMxL3RzMiByZWFkcyBh cmUgZG9uZSBhZnRlciBkbWFfcm1iKCksIGFuZCBkZXYtPmN0cmwNCj4+PiBpcyByZWFkIGJlZm9y ZSB0aGUgYmFycmllciwgbXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZXkgYXJlIGd1YXJhbnRl ZWQNCj4+PiB0byBiZSBvcmRlcmVkIHNvIHRoYXQgZGV2LT5jdHJsIGlzIHJlYWQgYmVmb3JlIHRz MS90czIuDQo+Pj4NCj4+PiBQZXIgWzFdLCAiW0RNQl0gZW5zdXJlcyB0aGF0IGFsbCBleHBsaWNp dCBtZW1vcnkgYWNjZXNzZXMgdGhhdCBhcHBlYXIgaW4NCj4+PiBwcm9ncmFtIG9yZGVyIGJlZm9y ZSB0aGUgfERNQnwgaW5zdHJ1Y3Rpb24gYXJlIG9ic2VydmVkIGJlZm9yZSBhbnkNCj4+PiBleHBs aWNpdCBtZW1vcnkgYWNjZXNzZXMgdGhhdCBhcHBlYXIgaW4gcHJvZ3JhbSBvcmRlciBhZnRlciB0 aGUgfERNQnwNCj4+PiBpbnN0cnVjdGlvbiIuDQo+Pj4gQW5kIHRoZSBjb21waWxlciBiYXJyaWVy ICgibWVtb3J5IiBhc20gY2xvYmJlcikgaW5jbHVkZWQgd2l0aGluDQo+Pj4gZG1hX3JtYigpIGVu c3VyZXMgdGhhdCBpbiBwcm9ncmFtIG9yZGVyLCBjdHJsIGlzIGxvYWRlZCBiZWZvcmUgdGhlDQo+ Pj4gYmFycmllciwgYW5kIHRzMS90czIgYWZ0ZXIgaXQuDQo+Pj4NCj4+PiBCdXQgYXMgbWVudGlv bmVkLCBpdCBtYWtlcyBzZW5zZSB0byBoYXZlIGl0IGNsb3NlciB0byB0aGUgdHMxL3RzMiByZWFk cw0KPj4+IHNvIEknbGwgbWFrZSB0aGF0IGNoYW5nZS4NCj4+Pg0KPj4+IFsxXQ0KPj4+IGh0dHA6 Ly9pbmZvY2VudGVyLmFybS5jb20vaGVscC9pbmRleC5qc3A/dG9waWM9L2NvbS5hcm0uZG9jLmR1 aTA0ODljL0NJSEdISElFLmh0bWwNCj4+Pg0KPj4+DQo+Pj4+PiBJIGFncmVlIHRoYXQgdGhpcyBU WCBjYXNlIHNlZW1zIHNvbWV3aGF0IHVubGlrZWx5IHRvIGJlIHRyaWdnZXJlZCBpbg0KPj4+Pj4g cmVhbCBsaWZlIGF0IGxlYXN0IGF0IHByZXNlbnQsIHRob3VnaCwgYXMgdGhlIHRzXzEvdHNfMiBy ZWFkIGlzIHNvIGZhcg0KPj4+Pj4gYWZ0ZXIgdGhlIGRlc2MtPmN0cmwgcmVhZCwgYW5kIGJlaGlu ZCBmdW5jdGlvbiBjYWxscywgc28gdW5saWtlbHkgdG8gYmUNCj4+Pj4+IHJlb3JkZXJlZCBiZWZv cmUgZGVzYy0+Y3RybCByZWFkLg0KPj4+Pj4gQnV0IHRoZSBzaW1pbGFyIFJYIGNhc2VzIGJlbG93 IHNlZW0gbW9yZSBwcm9ibGVtYXRpYyBhcyB0aGUgcmFjeSBsb2Fkcw0KPj4+Pj4gaW4gcXVlc3Rp b24gYXJlIHJpZ2h0IGFmdGVyIGVhY2ggb3RoZXIgaW4gY29kZS4NCj4+Pj4+DQo+IFsuLi5dDQo+ IA0K