From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Michael S. Tsirkin" Subject: Re: [PATCH net-next 3/3] vhost: access vq metadata through kernel virtual address Date: Wed, 26 Dec 2018 10:02:54 -0500 Message-ID: <20181226092431-mutt-send-email-mst@kernel.org> References: <20181213101022.12475-1-jasowang@redhat.com> <20181213101022.12475-4-jasowang@redhat.com> <20181213102713-mutt-send-email-mst@kernel.org> <20181214073332-mutt-send-email-mst@kernel.org> <2ea274df-a79a-250f-648f-12927529d78a@redhat.com> <20181224125237-mutt-send-email-mst@kernel.org> <20181225071501-mutt-send-email-mst@kernel.org> <70978ed8-bf76-693a-0e11-d31b6234af5c@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, virtualization@lists.linux-foundation.org To: Jason Wang Return-path: Content-Disposition: inline In-Reply-To: <70978ed8-bf76-693a-0e11-d31b6234af5c@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: virtualization-bounces@lists.linux-foundation.org Errors-To: virtualization-bounces@lists.linux-foundation.org List-Id: netdev.vger.kernel.org T24gV2VkLCBEZWMgMjYsIDIwMTggYXQgMTE6NTc6MzJBTSArMDgwMCwgSmFzb24gV2FuZyB3cm90 ZToKPiAKPiBPbiAyMDE4LzEyLzI1IOS4i+WNiDg6NTAsIE1pY2hhZWwgUy4gVHNpcmtpbiB3cm90 ZToKPiA+IE9uIFR1ZSwgRGVjIDI1LCAyMDE4IGF0IDA2OjA1OjI1UE0gKzA4MDAsIEphc29uIFdh bmcgd3JvdGU6Cj4gPiA+IE9uIDIwMTgvMTIvMjUg5LiK5Y2IMjoxMCwgTWljaGFlbCBTLiBUc2ly a2luIHdyb3RlOgo+ID4gPiA+IE9uIE1vbiwgRGVjIDI0LCAyMDE4IGF0IDAzOjUzOjE2UE0gKzA4 MDAsIEphc29uIFdhbmcgd3JvdGU6Cj4gPiA+ID4gPiBPbiAyMDE4LzEyLzE0IOS4i+WNiDg6MzYs IE1pY2hhZWwgUy4gVHNpcmtpbiB3cm90ZToKPiA+ID4gPiA+ID4gT24gRnJpLCBEZWMgMTQsIDIw MTggYXQgMTE6NTc6MzVBTSArMDgwMCwgSmFzb24gV2FuZyB3cm90ZToKPiA+ID4gPiA+ID4gPiBP biAyMDE4LzEyLzEzIOS4i+WNiDExOjQ0LCBNaWNoYWVsIFMuIFRzaXJraW4gd3JvdGU6Cj4gPiA+ ID4gPiA+ID4gPiBPbiBUaHUsIERlYyAxMywgMjAxOCBhdCAwNjoxMDoyMlBNICswODAwLCBKYXNv biBXYW5nIHdyb3RlOgo+ID4gPiA+ID4gPiA+ID4gPiBJdCB3YXMgbm90aWNlZCB0aGF0IHRoZSBj b3B5X3VzZXIoKSBmcmllbmRzIHRoYXQgd2FzIHVzZWQgdG8gYWNjZXNzCj4gPiA+ID4gPiA+ID4g PiA+IHZpcnRxdWV1ZSBtZXRkYXRhIHRlbmRzIHRvIGJlIHZlcnkgZXhwZW5zaXZlIGZvciBkYXRh cGxhbmUKPiA+ID4gPiA+ID4gPiA+ID4gaW1wbGVtZW50YXRpb24gbGlrZSB2aG9zdCBzaW5jZSBp dCBpbnZvbHZlcyBsb3RzIG9mIHNvZnR3YXJlIGNoZWNrLAo+ID4gPiA+ID4gPiA+ID4gPiBzcGVj dWxhdGlvbiBiYXJyaWVyLCBoYXJkd2FyZSBmZWF0dXJlIHRvZ2dsaW5nIChlLmcgU01BUCkuIFRo ZQo+ID4gPiA+ID4gPiA+ID4gPiBleHRyYSBjb3N0IHdpbGwgYmUgbW9yZSBvYnZpb3VzIHdoZW4g dHJhbnNmZXJyaW5nIHNtYWxsIHBhY2tldHMuCj4gPiA+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4g PiA+ID4gPiBUaGlzIHBhdGNoIHRyaWVzIHRvIGVsaW1pbmF0ZSB0aG9zZSBvdmVyaGVhZCBieSBw aW4gdnEgbWV0YWRhdGEgcGFnZXMKPiA+ID4gPiA+ID4gPiA+ID4gYW5kIGFjY2VzcyB0aGVtIHRo cm91Z2ggdm1hcCgpLiBEdXJpbmcgU0VUX1ZSSU5HX0FERFIsIHdlIHdpbGwgc2V0dXAKPiA+ID4g PiA+ID4gPiA+ID4gdGhvc2UgbWFwcGluZ3MgYW5kIG1lbW9yeSBhY2Nlc3NvcnMgYXJlIG1vZGlm aWVkIHRvIHVzZSBwb2ludGVycyB0bwo+ID4gPiA+ID4gPiA+ID4gPiBhY2Nlc3MgdGhlIG1ldGFk YXRhIGRpcmVjdGx5Lgo+ID4gPiA+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gPiA+ID4gTm90ZSwg dGhpcyB3YXMgb25seSBkb25lIHdoZW4gZGV2aWNlIElPVExCIGlzIG5vdCBlbmFibGVkLiBXZSBj b3VsZAo+ID4gPiA+ID4gPiA+ID4gPiB1c2Ugc2ltaWxhciBtZXRob2QgdG8gb3B0aW1pemUgaXQg aW4gdGhlIGZ1dHVyZS4KPiA+ID4gPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ID4gPiA+IFRlc3Rz IHNob3dzIGFib3V0IH4yNCUgaW1wcm92ZW1lbnQgb24gVFggUFBTIHdoZW4gdXNpbmcgdmlydGlv LXVzZXIgKwo+ID4gPiA+ID4gPiA+ID4gPiB2aG9zdF9uZXQgKyB4ZHAxIG9uIFRBUCAoQ09ORklH X0hBUkRFTkVEX1VTRVJDT1BZIGlzIG5vdCBlbmFibGVkKToKPiA+ID4gPiA+ID4gPiA+ID4gCj4g PiA+ID4gPiA+ID4gPiA+IEJlZm9yZTogfjUuME1wcHMKPiA+ID4gPiA+ID4gPiA+ID4gQWZ0ZXI6 ICB+Ni4xTXBwcwo+ID4gPiA+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gPiA+ID4gU2lnbmVkLW9m Zi1ieTogSmFzb24gV2FuZzxqYXNvd2FuZ0ByZWRoYXQuY29tPgo+ID4gPiA+ID4gPiA+ID4gPiAt LS0KPiA+ID4gPiA+ID4gPiA+ID4gICAgICBkcml2ZXJzL3Zob3N0L3Zob3N0LmMgfCAxNzggKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gPiA+ID4gPiA+ID4gPiA+ ICAgICAgZHJpdmVycy92aG9zdC92aG9zdC5oIHwgIDExICsrKwo+ID4gPiA+ID4gPiA+ID4gPiAg ICAgIDIgZmlsZXMgY2hhbmdlZCwgMTg5IGluc2VydGlvbnMoKykKPiA+ID4gPiA+ID4gPiA+ID4g Cj4gPiA+ID4gPiA+ID4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Zob3N0LmMgYi9k cml2ZXJzL3Zob3N0L3Zob3N0LmMKPiA+ID4gPiA+ID4gPiA+ID4gaW5kZXggYmFmZTM5ZDJlNjM3 Li4xYmQyNDIwM2FmYjYgMTAwNjQ0Cj4gPiA+ID4gPiA+ID4gPiA+IC0tLSBhL2RyaXZlcnMvdmhv c3Qvdmhvc3QuYwo+ID4gPiA+ID4gPiA+ID4gPiArKysgYi9kcml2ZXJzL3Zob3N0L3Zob3N0LmMK PiA+ID4gPiA+ID4gPiA+ID4gQEAgLTQ0Myw2ICs0NDMsOSBAQCB2b2lkIHZob3N0X2Rldl9pbml0 KHN0cnVjdCB2aG9zdF9kZXYgKmRldiwKPiA+ID4gPiA+ID4gPiA+ID4gICAgICAJCXZxLT5pbmRp cmVjdCA9IE5VTEw7Cj4gPiA+ID4gPiA+ID4gPiA+ICAgICAgCQl2cS0+aGVhZHMgPSBOVUxMOwo+ ID4gPiA+ID4gPiA+ID4gPiAgICAgIAkJdnEtPmRldiA9IGRldjsKPiA+ID4gPiA+ID4gPiA+ID4g KwkJbWVtc2V0KCZ2cS0+YXZhaWxfcmluZywgMCwgc2l6ZW9mKHZxLT5hdmFpbF9yaW5nKSk7Cj4g PiA+ID4gPiA+ID4gPiA+ICsJCW1lbXNldCgmdnEtPnVzZWRfcmluZywgMCwgc2l6ZW9mKHZxLT51 c2VkX3JpbmcpKTsKPiA+ID4gPiA+ID4gPiA+ID4gKwkJbWVtc2V0KCZ2cS0+ZGVzY19yaW5nLCAw LCBzaXplb2YodnEtPmRlc2NfcmluZykpOwo+ID4gPiA+ID4gPiA+ID4gPiAgICAgIAkJbXV0ZXhf aW5pdCgmdnEtPm11dGV4KTsKPiA+ID4gPiA+ID4gPiA+ID4gICAgICAJCXZob3N0X3ZxX3Jlc2V0 KGRldiwgdnEpOwo+ID4gPiA+ID4gPiA+ID4gPiAgICAgIAkJaWYgKHZxLT5oYW5kbGVfa2ljaykK PiA+ID4gPiA+ID4gPiA+ID4gQEAgLTYxNCw2ICs2MTcsMTAyIEBAIHN0YXRpYyB2b2lkIHZob3N0 X2NsZWFyX21zZyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYpCj4gPiA+ID4gPiA+ID4gPiA+ICAgICAg CXNwaW5fdW5sb2NrKCZkZXYtPmlvdGxiX2xvY2spOwo+ID4gPiA+ID4gPiA+ID4gPiAgICAgIH0K PiA+ID4gPiA+ID4gPiA+ID4gK3N0YXRpYyBpbnQgdmhvc3RfaW5pdF92bWFwKHN0cnVjdCB2aG9z dF92bWFwICptYXAsIHVuc2lnbmVkIGxvbmcgdWFkZHIsCj4gPiA+ID4gPiA+ID4gPiA+ICsJCQkg ICBzaXplX3Qgc2l6ZSwgaW50IHdyaXRlKQo+ID4gPiA+ID4gPiA+ID4gPiArewo+ID4gPiA+ID4g PiA+ID4gPiArCXN0cnVjdCBwYWdlICoqcGFnZXM7Cj4gPiA+ID4gPiA+ID4gPiA+ICsJaW50IG5w YWdlcyA9IERJVl9ST1VORF9VUChzaXplLCBQQUdFX1NJWkUpOwo+ID4gPiA+ID4gPiA+ID4gPiAr CWludCBucGlubmVkOwo+ID4gPiA+ID4gPiA+ID4gPiArCXZvaWQgKnZhZGRyOwo+ID4gPiA+ID4g PiA+ID4gPiArCj4gPiA+ID4gPiA+ID4gPiA+ICsJcGFnZXMgPSBrbWFsbG9jX2FycmF5KG5wYWdl cywgc2l6ZW9mKHN0cnVjdCBwYWdlICopLCBHRlBfS0VSTkVMKTsKPiA+ID4gPiA+ID4gPiA+ID4g KwlpZiAoIXBhZ2VzKQo+ID4gPiA+ID4gPiA+ID4gPiArCQlyZXR1cm4gLUVOT01FTTsKPiA+ID4g PiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiA+ID4gPiArCW5waW5uZWQgPSBnZXRfdXNlcl9wYWdl c19mYXN0KHVhZGRyLCBucGFnZXMsIHdyaXRlLCBwYWdlcyk7Cj4gPiA+ID4gPiA+ID4gPiA+ICsJ aWYgKG5waW5uZWQgIT0gbnBhZ2VzKQo+ID4gPiA+ID4gPiA+ID4gPiArCQlnb3RvIGVycjsKPiA+ ID4gPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiA+ID4gQXMgSSBzYWlkIEkgaGF2ZSBkb3VidHMg YWJvdXQgdGhlIHdob2xlIGFwcHJvYWNoLCBidXQgdGhpcwo+ID4gPiA+ID4gPiA+ID4gaW1wbGVt ZW50YXRpb24gaW4gcGFydGljdWxhciBpc24ndCBhIGdvb2QgaWRlYQo+ID4gPiA+ID4gPiA+ID4g YXMgaXQga2VlcHMgdGhlIHBhZ2UgYXJvdW5kIGZvcmV2ZXIuCj4gPiA+ID4gPiBUaGUgcGFnZXMg d2lsIGJlIHJlbGVhc2VkIGR1cmluZyBzZXQgZmVhdHVyZXMuCj4gPiA+ID4gPiAKPiA+ID4gPiA+ IAo+ID4gPiA+ID4gPiA+ID4gU28gbm8gVEhQLCBubyBOVU1BIHJlYmFsYW5jaW5nLAo+ID4gPiA+ ID4gRm9yIFRIUCwgd2Ugd2lsbCBwcm9iYWJseSBtaXNzIDIgb3IgNCBwYWdlcywgYnV0IGRvZXMg dGhpcyByZWFsbHkgbWF0dGVyCj4gPiA+ID4gPiBjb25zaWRlciB0aGUgZ2FpbiB3ZSBoYXZlPwo+ ID4gPiA+IFdlIGFzIGluIHZob3N0PyBuZXR3b3JraW5nIGlzbid0IHRoZSBvbmx5IHRoaW5nIGd1 ZXN0IGRvZXMuCj4gPiA+ID4gV2UgZG9uJ3QgZXZlbiBrbm93IGlmIHRoaXMgZ3Vlc3QgZG9lcyBh IGxvdCBvZiBuZXR3b3JraW5nLgo+ID4gPiA+IFlvdSBkb24ndAo+ID4gPiA+IGtub3cgd2hhdCBl bHNlIGlzIGluIHRoaXMgaHVnZSBwYWdlLiBDYW4gYmUgc29tZXRoaW5nIHZlcnkgaW1wb3J0YW50 Cj4gPiA+ID4gdGhhdCBndWVzdCB0b3VjaGVzIGFsbCB0aGUgdGltZS4KPiA+ID4gCj4gPiA+IFdl bGwsIHRoZSBwcm9iYWJpbGl0eSBzaG91bGQgYmUgdmVyeSBzbWFsbCBjb25zaWRlciB3ZSB1c3Vh bGx5IGdpdmUgc2V2ZXJhbAo+ID4gPiBnaWdhYnl0ZXMgdG8gZ3Vlc3QuIFRoZSByZXN0IG9mIHRo ZSBwYWdlcyB0aGF0IGRvZXNuJ3Qgc2l0IGluIHRoZSBzYW1lCj4gPiA+IGh1Z2VwYWdlIHdpdGgg bWV0YWRhdGEgY2FuIHN0aWxsIGJlIG1lcmdlZCBieSBUSFAuwqAgQW55d2F5LCBJIGNhbiB0ZXN0 IHRoZQo+ID4gPiBkaWZmZXJlbmNlcy4KPiA+IFRoYW5rcyEKPiA+IAo+ID4gPiA+ID4gRm9yIE5V TUEgcmViYWxhbmNpbmcsIEknbSBldmVuIG5vdCBxdWl0ZSBzdXJlIGlmCj4gPiA+ID4gPiBpdCBj YW4gaGVscHMgZm9yIHRoZSBjYXNlIG9mIElQQyAodmhvc3QpLiBJdCBsb29rcyB0byBtZSB0aGUg d29yc3QgY2FzZSBpdAo+ID4gPiA+ID4gbWF5IGNhdXNlIHBhZ2UgdG8gYmUgdGhyYXNoIGJldHdl ZW4gbm9kZXMgaWYgdmhvc3QgYW5kIHVzZXJzcGFjZSBhcmUgcnVubmluZwo+ID4gPiA+ID4gaW4g dHdvIG5vZGVzLgo+ID4gPiA+IFNvIGFnYWluIGl0J3MgYSBnYWluIGZvciB2aG9zdCBidXQgaGFz IGEgY29tcGxldGVseSB1bnByZWRpY3RhYmxlIGVmZmVjdCBvbgo+ID4gPiA+IG90aGVyIGZ1bmN0 aW9uYWxpdHkgb2YgdGhlIGd1ZXN0Lgo+ID4gPiA+IAo+ID4gPiA+IFRoYXQncyB3aGF0IGJvdGhl cnMgbWUgd2l0aCB0aGlzIGFwcHJvYWNoLgo+ID4gPiAKPiA+ID4gU286Cj4gPiA+IAo+ID4gPiAt IFRoZSByZXN0IG9mIHRoZSBwYWdlcyBjb3VsZCBzdGlsbCBiZSBiYWxhbmNlZCB0byBvdGhlciBu b2Rlcywgbm8/Cj4gPiA+IAo+ID4gPiAtIHRyeSB0byBiYWxhbmNlIG1ldGFkYXRhIHBhZ2VzIChi ZWxvbmdzIHRvIGNvLW9wZXJhdGUgcHJvY2Vzc2VzKSBpdHNlbGYgaXMKPiA+ID4gc3RpbGwgcXVl c3Rpb25hYmxlCj4gPiBJIGFtIG5vdCBzdXJlIHdoeS4gSXQgc2hvdWxkIGJlIGVhc3kgZW5vdWdo IHRvIGZvcmNlIHRoZSBWQ1BVIGFuZCB2aG9zdAo+ID4gdG8gbW92ZSAoZS5nLiBzdGFydCB0aGVt IHBpbm5lZCB0byAxIGNwdSwgdGhlbiBwaW4gdGhlbSB0byBhbm90aGVyIG9uZSkuCj4gPiBDbGVh cmx5IHNvbWV0aW1lcyB0aGlzIHdvdWxkIGJlIG5lY2Vzc2FyeSBmb3IgbG9hZCBiYWxhbmNpbmcg cmVhc29ucy4KPiAKPiAKPiBZZXMsIGJ1dCBpdCBsb29rcyB0byBtZSB0aGUgcGFydCBvZiBtb3Rp dmF0aW9uIG9mIGF1dG8gTlVNQSBpcyB0byBhdm9pZAo+IG1hbnVhbCBwaW5uaW5nLgoKLi4uIG9m IG1lbW9yeS4gWWVzLgoKCj4gCj4gPiBXaXRoIGF1dG9udW1hIGFmdGVyIGEgd2hpbGUgKGNvdWxk IHRha2Ugc2Vjb25kcyBidXQgaXQgd2lsbCBoYXBwZW4pIHRoZQo+ID4gbWVtb3J5IHdpbGwgbWln cmF0ZS4KPiA+IAo+IAo+IFllcy4gQXMgeW91IG1lbnRpb25lZCBkdXJpbmcgdGhlIGRpc2N1c3Ms IEkgd29uZGVyIHdlIGNvdWxkIGRvIGl0IHNpbWlsYXJseQo+IHRocm91Z2ggbW11IG5vdGlmaWVy IGxpa2UgQVBJQyBhY2Nlc3MgcGFnZSBpbiBjb21taXQgYzI0YWUwZGNkM2UgKCJrdm06IHg4NjoK PiBVbnBpbiBhbmQgcmVtb3ZlIGt2bV9hcmNoLT5hcGljX2FjY2Vzc19wYWdlIikKClRoYXQgd291 bGQgYmUgYSBwb3NzaWJsZSBhcHByb2FjaC4KCj4gCj4gPiAKPiA+IAo+ID4gPiA+IAo+ID4gPiA+ IAo+ID4gPiA+IAo+ID4gPiA+ID4gPiA+IFRoaXMgaXMgdGhlIHByaWNlIG9mIGFsbCBHVVAgdXNl cnMgbm90IG9ubHkgdmhvc3QgaXRzZWxmLgo+ID4gPiA+ID4gPiBZZXMuIEdVUCBpcyBqdXN0IG5v dCBhIGdyZWF0IGludGVyZmFjZSBmb3Igdmhvc3QgdG8gdXNlLgo+ID4gPiA+ID4gWmVyb2NvcHkg Y29kZXMgKGVuYWJsZWQgYnkgZGVmdWFsdCkgdXNlIHRoZW0gZm9yIHllYXJzLgo+ID4gPiA+IEJ1 dCBvbmx5IGZvciBUWCBhbmQgdGVtcG9yYXJpbHkuIFdlIHBpbiwgcmVhZCwgdW5waW4uCj4gPiA+ IAo+ID4gPiBQcm9iYWJseSBub3QuIEZvciBzZXZlcmFsIHJlYXNvbnMgdGhhdCB0aGUgcGFnZSB3 aWxsIGJlIG5vdCBiZSByZWxlYXNlZCBzb29uCj4gPiA+IG9yIGhlbGQgZm9yIGEgdmVyeSBsb25n IHBlcmlvZCBvZiB0aW1lIG9yIGV2ZW4gZm9yZXZlci4KPiA+IAo+ID4gV2l0aCB6ZXJvIGNvcHk/ IFdlbGwgaXQncyBwaW5uZWQgdW50aWwgdHJhbnNtaXQuIFRha2VzIGEgd2hpbGUKPiA+IGJ1dCBj b3VsZCBiZSBlbm91Z2ggZm9yIGF1dG9jb3B5IHRvIHdvcmsgZXNwIHNpbmNlCj4gPiBpdHMgdGhl IHBhY2tldCBtZW1vcnkgc28gbm90IHJldXNlZCBpbW1lZGlhdGVseS4KPiA+IAo+ID4gPiA+IFlv dXIgcGF0Y2ggaXMgZGlmZmVyZW50Cj4gPiA+ID4gCj4gPiA+ID4gLSBpdCB3cml0ZXMgaW50byBt ZW1vcnkgYW5kIEdVUCBoYXMga25vd24gaXNzdWVzIHdpdGggZmlsZQo+ID4gPiA+ICAgICBiYWNr ZWQgbWVtb3J5Cj4gPiA+IAo+ID4gPiBUaGUgb3JkaW5hcnkgdXNlciBmb3Igdmhvc3QgaXMgYW5v bnltb3VzIHBhZ2VzIEkgdGhpbms/Cj4gPiAKPiA+IEl0J3Mgbm90IHRoZSBtb3N0IGNvbW1vbiBz Y2VuYXJpbyBhbmQgbm90IHRoZSBmYXN0ZXN0IG9uZQo+ID4gKGUuZy4gVEhQIGRvZXMgbm90IHdv cmspIGJ1dCBmaWxlIGJhY2tlZCBpcyB1c2VmdWwgc29tZXRpbWVzLgo+ID4gSXQgd291bGQgbm90 IGJlIG5pY2UgYXQgYWxsIHRvIGNvcnJ1cHQgZ3Vlc3QgbWVtb3J5IGluIHRoYXQgY2FzZS4KPiAK PiAKPiBPay4KPiAKPiAKPiA+IAo+ID4gPiA+IC0gaXQga2VlcHMgcGFnZXMgcGlubmVkIGZvcmV2 ZXIKPiA+ID4gPiAKPiA+ID4gPiAKPiA+ID4gPiAKPiA+ID4gPiA+ID4gPiBXaGF0J3MgbW9yZQo+ ID4gPiA+ID4gPiA+IGltcG9ydGFudCwgdGhlIGdvYWwgaXMgbm90IHRvIGJlIGxlZnQgdG9vIG11 Y2ggYmVoaW5kIGZvciBvdGhlciBiYWNrZW5kcwo+ID4gPiA+ID4gPiA+IGxpa2UgRFBESyBvciBB Rl9YRFAgKGFsbCBvZiB3aGljaCBhcmUgdXNpbmcgR1VQKS4KPiA+ID4gPiA+ID4gU28gdGhlc2Ug Z3V5cyBhc3N1bWUgdXNlcnNwYWNlIGtub3dzIHdoYXQgaXQncyBkb2luZy4KPiA+ID4gPiA+ID4g V2UgY2FuJ3QgYXNzdW1lIHRoYXQuCj4gPiA+ID4gPiBXaGF0IGtpbmQgb2YgYXNzdW1wdGlvbiBk byB5b3UgdGhleSBoYXZlPwo+ID4gPiA+ID4gCj4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gPiA+IHVz ZXJzcGFjZS1jb250cm9sbGVkCj4gPiA+ID4gPiA+ID4gPiBhbW91bnQgb2YgbWVtb3J5IGxvY2tl ZCB1cCBhbmQgbm90IGFjY291bnRlZCBmb3IuCj4gPiA+ID4gPiA+ID4gSXQncyBwcmV0dHkgZWFz eSB0byBhZGQgdGhpcyBzaW5jZSB0aGUgc2xvdyBwYXRoIHdhcyBzdGlsbCBrZXB0LiBJZiB3ZQo+ ID4gPiA+ID4gPiA+IGV4Y2VlZHMgdGhlIGxpbWl0YXRpb24sIHdlIGNhbiBzd2l0Y2ggYmFjayB0 byBzbG93IHBhdGguCj4gPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ID4gPiBEb24ndCBnZXQgbWUg d3JvbmcgaXQncyBhIGdyZWF0IHBhdGNoIGluIGFuIGlkZWFsIHdvcmxkLgo+ID4gPiA+ID4gPiA+ ID4gQnV0IHRoZW4gaW4gYW4gaWRlYWwgd29ybGQgbm8gYmFycmllcnMgc21hcCBldGMgYXJlIG5l Y2Vzc2FyeSBhdCBhbGwuCj4gPiA+ID4gPiA+ID4gQWdhaW4sIHRoaXMgaXMgb25seSBmb3IgbWV0 YWRhdGEgYWNjZXNzaW5nIG5vdCB0aGUgZGF0YSB3aGljaCBoYXMgYmVlbiB1c2VkCj4gPiA+ID4g PiA+ID4gZm9yIHllYXJzIGZvciByZWFsIHVzZSBjYXNlcy4KPiA+ID4gPiA+ID4gPiAKPiA+ID4g PiA+ID4gPiBGb3IgU01BUCwgaXQgbWFrZXMgc2Vuc2VzIGZvciB0aGUgYWRkcmVzcyB0aGF0IGtl cm5lbCBjYW4gbm90IGZvcmNhc3QuIEJ1dAo+ID4gPiA+ID4gPiA+IGl0J3Mgbm90IHRoZSBjYXNl IGZvciB0aGUgdmhvc3QgbWV0YWRhdGEgc2luY2Ugd2Uga25vdyB0aGUgYWRkcmVzcyB3aWxsIGJl Cj4gPiA+ID4gPiA+ID4gYWNjZXNzZWQgdmVyeSBmcmVxdWVudGx5LiBGb3Igc3BlY3VsYXRpb24g YmFycmllciwgaXQgaGVscHMgbm90aGluZyBmb3IgdGhlCj4gPiA+ID4gPiA+ID4gZGF0YSBwYXRo IG9mIHZob3N0IHdoaWNoIGlzIGEga3RocmVhZC4KPiA+ID4gPiA+ID4gSSBkb24ndCBzZWUgaG93 IGEga3RocmVhZCBtYWtlcyBhbnkgZGlmZmVyZW5jZS4gV2UgZG8gaGF2ZSBhIHZhbGlkYXRpb24K PiA+ID4gPiA+ID4gc3RlcCB3aGljaCBtYWtlcyBzb21lIGRpZmZlcmVuY2UuCj4gPiA+ID4gPiBU aGUgcHJvYmxlbSBpcyBub3Qga3RocmVhZCBidXQgdGhlIGFkZHJlc3Mgb2YgdXNlcnNwYWNlIGFk ZHJlc3MuIFRoZQo+ID4gPiA+ID4gYWRkcmVzc2VzIG9mIHZxIG1ldGFkYXRhIHRlbmRzIHRvIGJl IGNvbnNpc3RlbnQgZm9yIGEgd2hpbGUsIGFuZCB2aG9zdCBrbm93cwo+ID4gPiA+ID4gdGhleSB3 aWxsIGJlIGZyZXF1ZW50bHkuIFNNQVAgZG9lc24ndCBoZWxwIHRvbyBtdWNoIGluIHRoaXMgY2Fz ZS4KPiA+ID4gPiA+IAo+ID4gPiA+ID4gVGhhbmtzLgo+ID4gPiA+IEl0J3MgdHJ1ZSBmb3IgYSBy ZWFsIGxpZmUgYXBwbGljYXRpb25zIGJ1dCBhIG1hbGljaW91cyBvbmUKPiA+ID4gPiBjYW4gY2Fs bCB0aGUgc2V0dXAgaW9jdGxzIGFueSBudW1iZXIgb2YgdGltZXMuIEFuZCBTTUFQIGlzCj4gPiA+ ID4gYWxsIGFib3V0IG1hbGNpb3VzIGFwcGxpY2F0aW9ucy4KPiA+ID4gCj4gPiA+IFdlIGRvbid0 IGRvIHRoaXMgaW4gdGhlIHBhdGggb2YgaW9jdGwsIHRoZXJlJ3Mgbm8gY29udGV4dCBzd2l0Y2gg YmV0d2Vlbgo+ID4gPiB1c2Vyc3BhY2UgYW5kIGtlcm5lbCBpbiB0aGUgd29ya2VyIHRocmVhZC4g U01BUCBpcyB1c2VkIHRvIHByZXZlbnQga2VybmVsCj4gPiA+IGZyb20gYWNjZXNzaW5nIHVzZXJz cGFjZSBwYWdlcyB1bmV4cGVjdGVkbHkgd2hpY2ggaXMgbm90IHRoZSBjYXNlIGZvcgo+ID4gPiBt ZXRhZGF0YSBhY2Nlc3MuCj4gPiA+IAo+ID4gPiBUaGFua3MKPiA+IE9LIGxldCdzIGZvcmdldCBz bWFwIGZvciBub3cuCj4gCj4gCj4gU29tZSBudW1iZXJzIEkgbWVhc3VyZWQ6Cj4gCj4gT24gYW4g b2xkIFNhbmR5IGJyaWRnZSBtYWNoaW5lIHdpdGhvdXQgU01BUCBzdXBwb3J0LiBSZW1vdmUgc3Bl Y3VsYXRpb24KPiBiYXJyaWVyIGJvb3N0IHRoZSBwZXJmb3JtYW5jZSBmcm9tIDQuNk1wcHMgdG8g NS4xTXBwcwo+IAo+IE9uIGEgbmV3ZXIgQnJvYWR3ZWxsIG1hY2hpbmUgd2l0aCBTTUFQIHN1cHBv cnQuIFJlbW92ZSBzcGVjdWxhdGlvbiBiYXJyaWVyCj4gb25seSBnaXZlcyAyJS01JSBpbXByb3Zl bWVudCwgZGlzYWJsZSBTTUFQIGNvbXBsZXRlbHkgdGhyb3VnaCBLY29uZmlnIGJvb3N0Cj4gNTcl IHBlcmZvcm1hbmNlIGZyb20gNC44TXBwcyB0byA3LjVNcHBzLiAoVm1hcCBnaXZlcyA2TXBwcyAt IDYuMU1wcHMsIGl0Cj4gb25seSBieXBhc3MgU01BUCBmb3IgbWV0YWRhdGEpLgo+IAo+IFNvIGl0 IGxvb2tzIGxpa2UgZm9yIHJlY2VudCBtYWNoaW5lLCBTTUFQIGJlY29tZXMgcGFpbiBwb2ludCB3 aGVuIHRoZSBjb3B5Cj4gaXMgc2hvcnQgKGUuZyA2NEIpIGZvciBoaWdoIFBQUy4KPiAKPiBUaGFu a3MKClRoYW5rcyBhIGxvdCBmb3IgbG9va2luZyBpbnRvIHRoaXMhCgpTbyBmaXJzdCBvZiBhbGwg dXNlcnMgY2FuIGp1c3QgYm9vdCB3aXRoIG5vc21hcCwgcmlnaHQ/CldoYXQncyB3cm9uZyB3aXRo IHRoYXQ/IFllcyBpdCdzIG5vdCBmaW5lLWdyYWluZWQgYnV0IE9UT0gKaXQncyBlYXN5IHRvIHVu ZGVyc3RhbmQuCgpBbmQgSSBndWVzcyB0aGlzIGNvbmZpcm1zIHRoYXQgaWYgd2UgYXJlIGdvaW5n IHRvIHdvcnJ5CmFib3V0IHNtYXAgZW5hYmxlZCwgd2UgbmVlZCB0byBsb29rIGludG8gcGFja2V0 IGNvcGllcwp0b28sIG5vdCBqdXN0IG1ldGEtZGF0YS4KClZhZ3VlbHkgY291bGQgc2VlIGEgbW9k dWxlIG9wdGlvbiAob2ZmIGJ5IGRlZmF1bHQpCndoZXJlIHZob3N0IGJhc2ljYWxseSBkb2VzIHVz ZXJfYWNjZXNzX2JlZ2luCndoZW4gaXQgc3RhcnRzIHJ1bm5pbmcsIHRoZW4gdXNlcyB1bnNhZmUg YWNjZXNzZXMKaW4gdmhvc3QgYW5kIHR1biBhbmQgdGhlbiB1c2VyX2FjY2Vzc19lbmQuCgoKPiAK PiA+IAo+ID4gPiA+ID4gPiA+IFBhY2tldCBvciBBRl9YRFAgYmVuZWZpdCBmcm9tCj4gPiA+ID4g PiA+ID4gYWNjZXNzaW5nIG1ldGFkYXRhIGRpcmVjdGx5LCB3ZSBzaG91bGQgZG8gaXQgYXMgd2Vs bC4KPiA+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gPiBUaGFua3MKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KVmlydHVhbGl6YXRpb24gbWFpbGluZyBsaXN0 ClZpcnR1YWxpemF0aW9uQGxpc3RzLmxpbnV4LWZvdW5kYXRpb24ub3JnCmh0dHBzOi8vbGlzdHMu bGludXhmb3VuZGF0aW9uLm9yZy9tYWlsbWFuL2xpc3RpbmZvL3ZpcnR1YWxpemF0aW9u