From mboxrd@z Thu Jan 1 00:00:00 1970 From: Oleksandr Andrushchenko Subject: Re: [RFC 1/3] xen/balloon: Allow allocating DMA buffers Date: Tue, 22 May 2018 18:00:33 +0300 Message-ID: <2a88de28-27ef-8fe4-ddc1-35eb9e698567__19979.2849868119$1527001185$gmane$org@gmail.com> References: <20180517082604.14828-1-andr2000@gmail.com> <20180517082604.14828-2-andr2000@gmail.com> <6a108876-19b7-49d0-3de2-9e10f984736c@oracle.com> <9541926e-001a-e41e-317c-dbff6d687761@gmail.com> <218e2bf7-490d-f89e-9866-27b7e3dbc835@oracle.com> <77c20852-b9b8-c35a-26b0-b0317e6aba09@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1fL8mF-0003zp-Ma for xen-devel@lists.xenproject.org; Tue, 22 May 2018 15:00:39 +0000 Received: by mail-wm0-x244.google.com with SMTP id l1-v6so665436wmb.2 for ; Tue, 22 May 2018 08:00:37 -0700 (PDT) In-Reply-To: Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Boris Ostrovsky , Oleksandr Andrushchenko , xen-devel@lists.xenproject.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-media@vger.kernel.org, jgross@suse.com, konrad.wilk@oracle.com Cc: daniel.vetter@intel.com, matthew.d.roper@intel.com, dongwon.kim@intel.com List-Id: xen-devel@lists.xenproject.org T24gMDUvMjIvMjAxOCAwNTozMyBQTSwgQm9yaXMgT3N0cm92c2t5IHdyb3RlOgo+IE9uIDA1LzIy LzIwMTggMDE6NTUgQU0sIE9sZWtzYW5kciBBbmRydXNoY2hlbmtvIHdyb3RlOgo+PiBPbiAwNS8y MS8yMDE4IDExOjM2IFBNLCBCb3JpcyBPc3Ryb3Zza3kgd3JvdGU6Cj4+PiBPbiAwNS8yMS8yMDE4 IDAzOjEzIFBNLCBPbGVrc2FuZHIgQW5kcnVzaGNoZW5rbyB3cm90ZToKPj4+PiBPbiAwNS8yMS8y MDE4IDA5OjUzIFBNLCBCb3JpcyBPc3Ryb3Zza3kgd3JvdGU6Cj4+Pj4+IE9uIDA1LzIxLzIwMTgg MDE6MzIgUE0sIE9sZWtzYW5kciBBbmRydXNoY2hlbmtvIHdyb3RlOgo+Pj4+Pj4gT24gMDUvMjEv MjAxOCAwNzozNSBQTSwgQm9yaXMgT3N0cm92c2t5IHdyb3RlOgo+Pj4+Pj4+IE9uIDA1LzIxLzIw MTggMDE6NDAgQU0sIE9sZWtzYW5kciBBbmRydXNoY2hlbmtvIHdyb3RlOgo+Pj4+Pj4+PiBPbiAw NS8xOS8yMDE4IDAxOjA0IEFNLCBCb3JpcyBPc3Ryb3Zza3kgd3JvdGU6Cj4+Pj4+Pj4+PiBPbiAw NS8xNy8yMDE4IDA0OjI2IEFNLCBPbGVrc2FuZHIgQW5kcnVzaGNoZW5rbyB3cm90ZToKPj4+Pj4+ Pj4+PiBGcm9tOiBPbGVrc2FuZHIgQW5kcnVzaGNoZW5rbyA8b2xla3NhbmRyX2FuZHJ1c2hjaGVu a29AZXBhbS5jb20+Cj4+Pj4+Pj4+PiBBIGNvbW1pdCBtZXNzYWdlIHdvdWxkIGJlIHVzZWZ1bC4K Pj4+Pj4+Pj4gU3VyZSwgdjEgd2lsbCBoYXZlIGl0Cj4+Pj4+Pj4+Pj4gU2lnbmVkLW9mZi1ieTog T2xla3NhbmRyIEFuZHJ1c2hjaGVua28KPj4+Pj4+Pj4+PiA8b2xla3NhbmRyX2FuZHJ1c2hjaGVu a29AZXBhbS5jb20+Cj4+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+PiAgwqDCoMKgwqDCoMKgwqDCoCBmb3Ig KGkgPSAwOyBpIDwgbnJfcGFnZXM7IGkrKykgewo+Pj4+Pj4+Pj4+IC3CoMKgwqDCoMKgwqDCoCBw YWdlID0gYWxsb2NfcGFnZShnZnApOwo+Pj4+Pj4+Pj4+IC3CoMKgwqDCoMKgwqDCoCBpZiAocGFn ZSA9PSBOVUxMKSB7Cj4+Pj4+Pj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbnJfcGFnZXMg PSBpOwo+Pj4+Pj4+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0YXRlID0gQlBfRUFHQUlO Owo+Pj4+Pj4+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+Pj4+Pj4+Pj4+ICvC oMKgwqDCoMKgwqDCoCBpZiAoZXh0X3BhZ2VzKSB7Cj4+Pj4+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgcGFnZSA9IGV4dF9wYWdlc1tpXTsKPj4+Pj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAg fSBlbHNlIHsKPj4+Pj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwYWdlID0gYWxsb2Nf cGFnZShnZnApOwo+Pj4+Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChwYWdlID09 IE5VTEwpIHsKPj4+Pj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG5yX3Bh Z2VzID0gaTsKPj4+Pj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0YXRl ID0gQlBfRUFHQUlOOwo+Pj4+Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg YnJlYWs7Cj4+Pj4+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+Pj4+Pj4+Pj4+ICDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+Pj4+Pj4+Pj4+ICDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgc2NydWJfcGFnZShwYWdlKTsKPj4+Pj4+Pj4+PiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGxpc3RfYWRkKCZwYWdlLT5scnUsICZwYWdlcyk7Cj4+Pj4+Pj4+Pj4gQEAgLTUyOSw3ICs1 NjUsNyBAQCBzdGF0aWMgZW51bSBicF9zdGF0ZQo+Pj4+Pj4+Pj4+IGRlY3JlYXNlX3Jlc2VydmF0 aW9uKHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIGdmcF90IGdmcCkKPj4+Pj4+Pj4+PiAgwqDCoMKg wqDCoMKgwqDCoCBpID0gMDsKPj4+Pj4+Pj4+PiAgwqDCoMKgwqDCoMKgwqDCoCBsaXN0X2Zvcl9l YWNoX2VudHJ5X3NhZmUocGFnZSwgdG1wLCAmcGFnZXMsIGxydSkgewo+Pj4+Pj4+Pj4+ICDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgLyogWEVOTUVNX2RlY3JlYXNlX3Jlc2VydmF0aW9uIHJlcXVp cmVzIGEgR0ZOICovCj4+Pj4+Pj4+Pj4gLcKgwqDCoMKgwqDCoMKgIGZyYW1lX2xpc3RbaSsrXSA9 IHhlbl9wYWdlX3RvX2dmbihwYWdlKTsKPj4+Pj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgZnJhbWVz W2krK10gPSB4ZW5fcGFnZV90b19nZm4ocGFnZSk7Cj4+Pj4+Pj4+Pj4gIMKgwqDCoMKgIMKgICNp ZmRlZiBDT05GSUdfWEVOX0hBVkVfUFZNTVUKPj4+Pj4+Pj4+PiAgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIC8qCj4+Pj4+Pj4+Pj4gQEAgLTU1MiwxOCArNTg4LDIyIEBAIHN0YXRpYyBlbnVtIGJw X3N0YXRlCj4+Pj4+Pj4+Pj4gZGVjcmVhc2VfcmVzZXJ2YXRpb24odW5zaWduZWQgbG9uZyBucl9w YWdlcywgZ2ZwX3QgZ2ZwKQo+Pj4+Pj4+Pj4+ICDCoMKgwqDCoCAjZW5kaWYKPj4+Pj4+Pj4+PiAg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGxpc3RfZGVsKCZwYWdlLT5scnUpOwo+Pj4+Pj4+Pj4+ ICDCoMKgwqDCoCAtwqDCoMKgwqDCoMKgwqAgYmFsbG9vbl9hcHBlbmQocGFnZSk7Cj4+Pj4+Pj4+ Pj4gK8KgwqDCoMKgwqDCoMKgIGlmICghZXh0X3BhZ2VzKQo+Pj4+Pj4+Pj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGJhbGxvb25fYXBwZW5kKHBhZ2UpOwo+Pj4+Pj4+Pj4gU28gd2hhdCB5b3Ug YXJlIHByb3Bvc2luZyBpcyBub3QgcmVhbGx5IGJhbGxvb25pbmcuIFlvdSBhcmUganVzdAo+Pj4+ Pj4+Pj4gcGlnZ3liYWNraW5nIG9uIGV4aXN0aW5nIGludGVyZmFjZXMsIGFyZW4ndCB5b3U/Cj4+ Pj4+Pj4+IFNvcnQgb2YuIEJhc2ljYWxseSBJIG5lZWQgdG8ge2luY3JlYXNlfGRlY3JlYXNlfV9y ZXNlcnZhdGlvbiwgbm90Cj4+Pj4+Pj4+IGFjdHVhbGx5Cj4+Pj4+Pj4+IGFsbG9jYXRpbmcgYmFs bG9vbmVkIHBhZ2VzLgo+Pj4+Pj4+PiBEbyB5b3UgdGhpbmsgSSBjYW4gc2ltcGx5IEVYUE9SVF9T WU1CT0wgZm9yCj4+Pj4+Pj4+IHtpbmNyZWFzZXxkZWNyZWFzZX1fcmVzZXJ2YXRpb24/Cj4+Pj4+ Pj4+IEFueSBvdGhlciBzdWdnZXN0aW9uPwo+Pj4+Pj4+IEkgYW0gYWN0dWFsbHkgd29uZGVyaW5n IGhvdyBtdWNoIG9mIHRoYXQgY29kZSB5b3UgZW5kIHVwIHJldXNpbmcuCj4+Pj4+Pj4gWW91Cj4+ Pj4+Pj4gcHJldHR5IG11Y2ggY3JlYXRlIG5ldyBjb2RlIHBhdGhzIGluIGJvdGggcm91dGluZXMg YW5kIGNvbW1vbiBjb2RlCj4+Pj4+Pj4gZW5kcwo+Pj4+Pj4+IHVwIGJlaW5nIGVzc2VudGlhbGx5 IHRoZSBoeXBlcmNhbGwuCj4+Pj4+PiBXZWxsLCBJIGhvcGVkIHRoYXQgaXQgd291bGQgYmUgZWFz aWVyIHRvIG1haW50YWluIGlmIEkgbW9kaWZ5Cj4+Pj4+PiBleGlzdGluZwo+Pj4+Pj4gY29kZQo+ Pj4+Pj4gdG8gc3VwcG9ydCBib3RoIHVzZS1jYXNlcywgYnV0IEkgYW0gYWxzbyBvayB0byBjcmVh dGUgbmV3IHJvdXRpbmVzIGlmCj4+Pj4+PiB0aGlzCj4+Pj4+PiBzZWVtcyB0byBiZSByZWFzb25h YmxlIC0gcGxlYXNlIGxldCBtZSBrbm93Cj4+Pj4+Pj4gIMKgwqDCoCBTbyB0aGUgcXVlc3Rpb24g aXMgLS0tIHdvdWxkIGl0IG1ha2UKPj4+Pj4+PiBzZW5zZSB0byBkbyBhbGwgb2YgdGhpcyBzZXBh cmF0ZWx5IGZyb20gdGhlIGJhbGxvb24gZHJpdmVyPwo+Pj4+Pj4gVGhpcyBjYW4gYmUgZG9uZSwg YnV0IHdoaWNoIGRyaXZlciB3aWxsIGhvc3QgdGhpcyBjb2RlIHRoZW4/IElmIHdlCj4+Pj4+PiBt b3ZlIGZyb20KPj4+Pj4+IHRoZSBiYWxsb29uIGRyaXZlciwgdGhlbiB0aGlzIGNvdWxkIGdvIHRv IGVpdGhlciBnbnRkZXYgb3IKPj4+Pj4+IGdyYW50LXRhYmxlLgo+Pj4+Pj4gV2hhdCdzIHlvdXIg cHJlZmVyZW5jZT8KPj4+Pj4gQSBzZXBhcmF0ZSBtb2R1bGU/Cj4+Pj4+IElzIHRoZXJlIGFueSB1 c2UgZm9yIHRoaXMgZmVhdHVyZSBvdXRzaWRlIG9mIHlvdXIgemVyby1jb3B5IERSTQo+Pj4+PiBk cml2ZXI/Cj4+Pj4gSW50ZWwncyBoeXBlciBkbWEtYnVmIChEb25nd29uL01hdHQgQ0MnZWQpLCBW NEwvR1BVIGF0IGxlYXN0Lgo+Pj4+Cj4+Pj4gQXQgdGhlIHRpbWUgSSB0cmllZCB0byB1cHN0cmVh bSB6Y29weSBkcml2ZXIgaXQgd2FzIGRpc2N1c3NlZCBhbmQKPj4+PiBkZWNpZGVkIHRoYXQKPj4+ PiBpdCB3b3VsZCBiZSBiZXR0ZXIgaWYgSSByZW1vdmUgYWxsIERSTSBzcGVjaWZpYyBjb2RlIGFu ZCBtb3ZlIGl0IHRvCj4+Pj4gWGVuIGRyaXZlcnMuCj4+Pj4gVGh1cywgdGhpcyBSRkMuCj4+Pj4K Pj4+PiBCdXQgaXQgY2FuIGFsc28gYmUgaW1wbGVtZW50ZWQgYXMgYSBkZWRpY2F0ZWQgWGVuIGRt YS1idWYgZHJpdmVyIHdoaWNoCj4+Pj4gd2lsbCBoYXZlIGFsbCB0aGUKPj4+PiBjb2RlIGZyb20g dGhpcyBSRkMgKyBhIGJpdCBtb3JlIChjaGFyL21pc2MgZGV2aWNlIGhhbmRsaW5nIGF0IGxlYXN0 KS4KPj4+PiBUaGlzIHdpbGwgYWxzbyByZXF1aXJlIGEgZGVkaWNhdGVkIHVzZXItc3BhY2UgbGli cmFyeSwganVzdCBsaWtlCj4+Pj4gbGlieGVuZ250dGFiLnNvCj4+Pj4gZm9yIGdudGRldiAobm93 IEkgaGF2ZSBhbGwgbmV3IElPQ1RMcyBjb3ZlcmVkIHRoZXJlKS4KPj4+Pgo+Pj4+IElmIHRoZSBp ZGVhIG9mIGEgZGVkaWNhdGVkIFhlbiBkbWEtYnVmIGRyaXZlciBzZWVtcyB0byBiZSBtb3JlCj4+ Pj4gYXR0cmFjdGl2ZSB3ZQo+Pj4+IGNhbiB3b3JrIHRvd2FyZCB0aGlzIHNvbHV0aW9uLiBCVFcs IEkgZG8gc3VwcG9ydCB0aGlzIGlkZWEsIGJ1dCB3YXMgbm90Cj4+Pj4gc3VyZSBpZiBYZW4gY29t bXVuaXR5IGFjY2VwdHMgeWV0IGFub3RoZXIgZHJpdmVyIHdoaWNoIGR1cGxpY2F0ZXMKPj4+PiBx dWl0ZSBzb21lIGNvZGUKPj4+PiBvZiB0aGUgZXhpc3RpbmcgZ250ZGV2L2JhbGxvb24vZ3JhbnQt dGFibGUuIEFuZCBub3cgYWZ0ZXIgdGhpcyBSRkMgSQo+Pj4+IGhvcGUgdGhhdCBhbGwgY29ucwo+ Pj4+IGFuZCBwcm9zIG9mIGJvdGggZGVkaWNhdGVkIGRyaXZlciBhbmQgZ250ZGV2L2JhbGxvb24v Z3JhbnQtdGFibGUKPj4+PiBleHRlbnNpb24gYXJlCj4+Pj4gY2xlYXJseSBzZWVuIGFuZCB3ZSBj YW4gbWFrZSBhIGRlY2lzaW9uLgo+Pj4gSUlSQyB0aGUgb2JqZWN0aW9uIGZvciBhIHNlcGFyYXRl IG1vZHVsZSB3YXMgaW4gdGhlIGNvbnRleHQgb2YgZ250ZGV2Cj4+PiB3YXMgZGlzY3Vzc2lvbiwg YmVjYXVzZSAoYW1vbmcgb3RoZXIgdGhpbmdzKSBwZW9wbGUgZGlkbid0IHdhbnQgdG8gaGF2ZQo+ Pj4geWV0IGFub3RoZXIgZmlsZSBpbiAvZGV2L3hlbi8KPj4+Cj4+PiBIZXJlIHdlIGFyZSB0YWxr aW5nIGFib3V0IChhIG5ldykgYmFsbG9vbi1saWtlIG1vZHVsZSB3aGljaCBkb2Vzbid0Cj4+PiBj cmVhdGUgYW55IG5ldyB1c2VyLXZpc2libGUgaW50ZXJmYWNlcy4gQW5kIGFzIGZvciBkdXBsaWNh dGluZyBjb2RlIC0tLQo+Pj4gYXMgSSBzYWlkLCBJIGFtIG5vdCBjb252aW5jZWQgdGhlcmUgaXMg bXVjaCBvZiBkdXBsaWNhdGlvbi4KPj4+Cj4+PiBJIG1pZ2h0IGV2ZW4gYXJndWUgdGhhdCB3ZSBz aG91bGQgYWRkIGEgbmV3IGNvbmZpZyBvcHRpb24gZm9yIHRoaXMKPj4+IG1vZHVsZS4KPj4gSSBh bSBub3QgcXVpdGUgc3VyZSBJIGFtIGZ1bGx5IGZvbGxvd2luZyB5b3UgaGVyZTogc28sIHlvdSBz dWdnZXN0Cj4+IHRoYXQgd2UgaGF2ZSBiYWxsb29uLmMgdW5jaGFuZ2VkLCBidXQgaW5zdGVhZCBj cmVhdGUgYSBuZXcKPj4gbW9kdWxlIChuYW1lbHkgYSBmaWxlIHVuZGVyIHRoZSBzYW1lIGZvbGRl ciBhcyBiYWxsb29uLmMsIGUuZy4KPj4gZG1hLWJ1Zi1yZXNlcnZhdGlvbi5jKSBhbmQgbW92ZSB0 aG9zZSB7aW5jcmVhc2V8ZGVjcmVhc2V9X3Jlc2VydmF0aW9uCj4+IHJvdXRpbmVzIChzcGVjaWZp YyB0byBkbWEtYnVmKSB0byB0aGF0IG5ldyBmaWxlPyBBbmQgbWFrZSBpdCBzZWxlY3RhYmxlCj4+ IHZpYSBLY29uZmlnPyBJZiBzbywgdGhlbiBob3cgYWJvdXQgdGhlIGNoYW5nZXMgdG8gZ3JhbnQt dGFibGUgYW5kIGdudGRldj8KPj4gVGhvc2Ugd2lsbCBsb29rIGluY29uc2lzdGVudCB0aGVuLgo+ IEluY29uc2lzdGVudCB3aXRoIHdoYXQ/IFRoZSBjaGFuZ2VzIHRvIGdyYW50IGNvZGUgd2lsbCBh bHNvIGJlIHVuZGVyIHRoZQo+IG5ldyBjb25maWcgb3B0aW9uLgpBaCwgb2suCgpPcHRpb24gMS4g V2Ugd2lsbCBoYXZlIEtjb25maWcgb3B0aW9uIHdoaWNoIHdpbGwgY292ZXIgZG1hLWJ1ZgpjaGFu Z2VzIGluIGJhbGxvb24sIGdyYW50LXRhYmxlIGFuZCBnbnRkZXYuIEFuZCBmb3IgdGhhdCB3ZSB3 aWxsCmNyZWF0ZSBkZWRpY2F0ZWQgcm91dGluZXMgaW4gYmFsbG9vbiBhbmQgZ3JhbnQtdGFibGUg KGNvcHkgb2YKdGhlIGV4aXN0aW5nIG9uZXMsIGJ1dCBtb2RpZmllZCB0byBmaXQgZG1hLWJ1ZiB1 c2UtY2FzZSkgYW5kCnRob3NlIHVuZGVyIHNvbWV0aGluZyBsaWtlICIjaWYgQ09ORklHX1hFTl9E TUFCVUYiPwpUaGlzIGlzIHJlbGF0aXZlbHkgZWFzeSB0byBkbyBmb3IgYmFsbG9vbi9ncmFudC10 YWJsZSwgYnV0IG5vdCB0aGF0CmVhc3kgZm9yIGdudGRldjogdGhlcmUgc3RpbGwgc2VlbXMgdG8g YmUgbG90cyBvZiBjb2RlIHdoaWNoIGNhbiBiZSByZXVzZWQsCnNvIEknbGwgaGF2ZSB0byBwdXQg bG90cyBvZiAiI2lmIENPTkZJR19YRU5fRE1BQlVGIiB0aGVyZS4gRXZlbiBtb3JlLCBJIApjaGFu Z2UKaW50ZXJmYWNlcyBvZiB0aGUgZXhpc3RpbmcgZ250ZGV2IHJvdXRpbmVzIHdoaWNoIHdvbid0 IGxvb2sgY3V0ZSB3aXRoIAojaWYncywgSU1PLgoKT3B0aW9uIDIuIFRyeSBtb3ZpbmcgZG1hLWJ1 ZiByZWxhdGVkIGNoYW5nZXMgZnJvbSBiYWxsb29uIGFuZApncmFudC10YWJsZSB0byBhIG5ldyBm aWxlLiBUaGVuIGdudGRldidzIEtjb25maWcgY29uY2VybnMgZnJvbSBhYm92ZSAKd2lsbCBzdGls bApiZSB0aGVyZSwgYnV0IGJhbGxvb24vZ3JhbnQtdGFibGUgZnVuY3Rpb25hbGl0eSB3aWxsIGJl IGxvY2FsaXplZCBpbiBhIApuZXcgbW9kdWxlLgoKSSBhbSBzdGlsbCBtaXNzaW5nIHlvdXIgcG9p bnQgaGVyZT8KCj4KPj4gSWYgeW91IHN1Z2dlc3QgYSBuZXcga2VybmVsIGRyaXZlciBtb2R1bGU6 Cj4+IElNTywgdGhlcmUgaXMgbm90aGluZyBiYWQgaWYgd2UgY3JlYXRlIGEgZGVkaWNhdGVkIGtl cm5lbCBtb2R1bGUKPj4gKGRyaXZlcikgZm9yIFhlbiBkbWEtYnVmIGhhbmRsaW5nIHNlbGVjdGFi bGUgdW5kZXIgS2NvbmZpZyBvcHRpb24uCj4+IFllcywgdGhpcyB3aWxsIGNyZWF0ZSBhIHlldCBh bm90aGVyIGRldmljZSB1bmRlciAvZGV2L3hlbiwKPj4gYnV0IG1vc3QgcGVvcGxlIHdpbGwgbmV2 ZXIgc2VlIGl0IGlmIHdlIHNldCBLY29uZmlnIHRvIGRlZmF1bHQgdG8gIm4iLgo+PiBBbmQgdGhl biB3ZSdsbCBuZWVkIHVzZXItc3BhY2Ugc3VwcG9ydCBmb3IgdGhhdCwgc28gWGVuIHRvb2xzIHdp bGwKPj4gYmUgZXh0ZW5kZWQgd2l0aCBsaWJ4ZW5kbWFidWYuc28gb3Igc28uCj4+IFRoaXMgd2F5 IGFsbCBYZW4gZG1hLWJ1ZiBzdXBwb3J0IGNhbiBiZSBsb2NhbGl6ZWQgYXQgb25lIHBsYWNlIHdo aWNoCj4+IG1pZ2h0IGJlIGVhc2llciB0byBtYWludGFpbi4gV2hhdCBpcyBtb3JlIGl0IGNvdWxk IGJlIHRvdGFsbHkgdHJhbnNwYXJlbnQKPj4gdG8gbW9zdCBvZiB1cyBhcyBLY29uZmlnIG9wdGlv biB3b24ndCBiZSBzZXQgYnkgZGVmYXVsdCAoYm90aCBrZXJuZWwKPj4gYW5kIFhlbikuCj4KPiBU aGUgZG93bnNpZGUgaXMgdGhhdCB3ZSB3aWxsIGVuZCB1cCBoYXZpbmcgYW5vdGhlciBkZXZpY2Ug Zm9yIGRvaW5nCj4gdGhpbmdzIHRoYXQgYXJlIG5vdCB0aGF0IGRpZmZlcmVudCBmcm9tIHdoYXQg d2UgYXJlIGFscmVhZHkgZG9pbmcgd2l0aAo+IGV4aXN0aW5nIGdudHRhYiBkZXZpY2UuIE9yIGFy ZSB0aGV5PwpBZ3JlZSwgYnV0IEtjb25maWcgb3B0aW9uLCBJTU8sIHdvbid0IG1ha2UgaXQgbG9v ayBuaWNlIGJlY2F1c2UKb2YgZ250ZGV2IGNoYW5nZXMgYW5kIGNvZGUgcmV1c2UuCj4gLWJvcmlz ClRoYW5rIHlvdSwKT2xla3NhbmRyCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW5w cm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8v eGVuLWRldmVs