From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jason Wang Subject: Re: [RFC PATCH V2 5/5] vhost: access vq metadata through kernel virtual address Date: Fri, 8 Mar 2019 16:50:36 +0800 Message-ID: References: <1551856692-3384-1-git-send-email-jasowang@redhat.com> <1551856692-3384-6-git-send-email-jasowang@redhat.com> <20190307103503-mutt-send-email-mst@kernel.org> <20190307124700-mutt-send-email-mst@kernel.org> <20190307191622.GP23850@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190307191622.GP23850@redhat.com> Content-Language: en-US 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 To: Andrea Arcangeli , "Michael S. Tsirkin" Cc: kvm@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-mm@kvack.org, Jerome Glisse List-Id: virtualization@lists.linuxfoundation.org Ck9uIDIwMTkvMy84IOS4iuWNiDM6MTYsIEFuZHJlYSBBcmNhbmdlbGkgd3JvdGU6Cj4gT24gVGh1 LCBNYXIgMDcsIDIwMTkgYXQgMTI6NTY6NDVQTSAtMDUwMCwgTWljaGFlbCBTLiBUc2lya2luIHdy b3RlOgo+PiBPbiBUaHUsIE1hciAwNywgMjAxOSBhdCAxMDo0NzoyMkFNIC0wNTAwLCBNaWNoYWVs IFMuIFRzaXJraW4gd3JvdGU6Cj4+PiBPbiBXZWQsIE1hciAwNiwgMjAxOSBhdCAwMjoxODoxMkFN IC0wNTAwLCBKYXNvbiBXYW5nIHdyb3RlOgo+Pj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG1tdV9u b3RpZmllcl9vcHMgdmhvc3RfbW11X25vdGlmaWVyX29wcyA9IHsKPj4+PiArCS5pbnZhbGlkYXRl X3JhbmdlID0gdmhvc3RfaW52YWxpZGF0ZV9yYW5nZSwKPj4+PiArfTsKPj4+PiArCj4+Pj4gICB2 b2lkIHZob3N0X2Rldl9pbml0KHN0cnVjdCB2aG9zdF9kZXYgKmRldiwKPj4+PiAgIAkJICAgIHN0 cnVjdCB2aG9zdF92aXJ0cXVldWUgKip2cXMsIGludCBudnFzLCBpbnQgaW92X2xpbWl0KQo+Pj4+ ICAgewo+Pj4gSSBhbHNvIHdvbmRlciBoZXJlOiB3aGVuIHBhZ2UgaXMgd3JpdGUgcHJvdGVjdGVk IHRoZW4KPj4+IGl0IGRvZXMgbm90IGxvb2sgbGlrZSAuaW52YWxpZGF0ZV9yYW5nZSBpcyBpbnZv a2VkLgo+Pj4KPj4+IEUuZy4gbW0va3NtLmMgY2FsbHMKPj4+Cj4+PiBtbXVfbm90aWZpZXJfaW52 YWxpZGF0ZV9yYW5nZV9zdGFydCBhbmQKPj4+IG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3Jhbmdl X2VuZCBidXQgbm90IG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlLgo+Pj4KPj4+IFNpbWls YXJseSwgcm1hcCBpbiBwYWdlX21rY2xlYW5fb25lIHdpbGwgbm90IGNhbGwKPj4+IG1tdV9ub3Rp Zmllcl9pbnZhbGlkYXRlX3JhbmdlLgo+Pj4KPj4+IElmIEknbSByaWdodCB2aG9zdCB3b24ndCBn ZXQgbm90aWZpZWQgd2hlbiBwYWdlIGlzIHdyaXRlLXByb3RlY3RlZCBzaW5jZSB5b3UKPj4+IGRp ZG4ndCBpbnN0YWxsIHN0YXJ0L2VuZCBub3RpZmllcnMuIE5vdGUgdGhhdCBlbmQgbm90aWZpZXIg Y2FuIGJlIGNhbGxlZAo+Pj4gd2l0aCBwYWdlIGxvY2tlZCwgc28gaXQncyBub3QgYXMgc3RyYWln aHQtZm9yd2FyZCBhcyBqdXN0IGFkZGluZyBhIGNhbGwuCj4+PiBXcml0aW5nIGludG8gYSB3cml0 ZS1wcm90ZWN0ZWQgcGFnZSBpc24ndCBhIGdvb2QgaWRlYS4KPj4+Cj4+PiBOb3RlIHRoYXQgZG9j dW1lbnRhdGlvbiBzYXlzOgo+Pj4gCWl0IGlzIGZpbmUgdG8gZGVsYXkgdGhlIG1tdV9ub3RpZmll cl9pbnZhbGlkYXRlX3JhbmdlCj4+PiAJY2FsbCB0byBtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9y YW5nZV9lbmQoKSBvdXRzaWRlIHRoZSBwYWdlIHRhYmxlIGxvY2suCj4+PiBpbXBseWluZyBpdCdz IGNhbGxlZCBqdXN0IGxhdGVyLgo+PiBPSyBJIG1pc3NlZCB0aGUgZmFjdCB0aGF0IF9lbmQgYWN0 dWFsbHkgY2FsbHMKPj4gbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2UgaW50ZXJuYWxseS4g U28gdGhhdCBwYXJ0IGlzIGZpbmUgYnV0IHRoZQo+PiBmYWN0IHRoYXQgeW91IGFyZSB0cnlpbmcg dG8gdGFrZSBwYWdlIGxvY2sgdW5kZXIgVlEgbXV0ZXggYW5kIHRha2Ugc2FtZQo+PiBtdXRleCB3 aXRoaW4gbm90aWZpZXIgcHJvYmFibHkgbWVhbnMgaXQncyBicm9rZW4gZm9yIGtzbSBhbmQgcm1h cCBhdAo+PiBsZWFzdCBzaW5jZSB0aGVzZSBjYWxsIGludmFsaWRhdGUgd2l0aCBsb2NrIHRha2Vu Lgo+IFllcyB0aGlzIGxvY2sgaW52ZXJzaW9uIG5lZWRzIG1vcmUgdGhvdWdodHMuCj4KPj4gQW5k IGdlbmVyYWxseSwgQW5kcmVhIHRvbGQgbWUgb2ZmbGluZSBvbmUgY2FuIG5vdCB0YWtlIG11dGV4 IHVuZGVyCj4+IHRoZSBub3RpZmllciBjYWxsYmFjay4gSSBDQydkIEFuZHJlYSBmb3Igd2h5Lgo+ IFllcywgdGhlIHByb2JsZW0gdGhlbiBpcyB0aGUgLT5pbnZhbGlkYXRlX3BhZ2UgaXMgY2FsbGVk IHRoZW4gdW5kZXIgUFQKPiBsb2NrIHNvIGl0IGNhbm5vdCB0YWtlIG11dGV4LCB5b3UgYWxzbyBj YW5ub3QgdGFrZSB0aGUgcGFnZV9sb2NrLCBpdAo+IGNhbiBhdCBtb3N0IHRha2UgYSBzcGlubG9j ayBvciB0cnlsb2NrX3BhZ2UuCj4KPiBTbyBpdCBtdXN0IHN3aXRjaCBiYWNrIHRvIHRoZSBfc3Rh cnQvX2VuZCBtZXRob2RzIHVubGVzcyB5b3UgcmV3cml0ZQo+IHRoZSBsb2NraW5nLgo+Cj4gVGhl IGRpZmZlcmVuY2Ugd2l0aCBfc3RhcnQvX2VuZCwgaXMgdGhhdCAtPmludmFsaWRhdGVfcmFuZ2Ug YXZvaWRzIHRoZQo+IF9zdGFydCBjYWxsYmFjayBiYXNpY2FsbHksIGJ1dCB0byBhdm9pZCB0aGUg X3N0YXJ0IGNhbGxiYWNrIHNhZmVseSwgaXQKPiBoYXMgdG8gYmUgY2FsbGVkIGluIGJldHdlZW4g dGhlIHB0ZXBfY2xlYXJfZmx1c2ggYW5kIHRoZSBzZXRfcHRlX2F0Cj4gd2hlbmV2ZXIgdGhlIHBm biBjaGFuZ2VzIGxpa2UgZHVyaW5nIGEgQ09XLiBTbyBpdCBjYW5ub3QgYmUgY29hbGVzY2VkCj4g aW4gYSBzaW5nbGUgVExCIGZsdXNoIHRoYXQgaW52YWxpZGF0ZXMgYWxsIHNwdGVzIGluIGEgcmFu Z2UgbGlrZSB3ZQo+IHByZWZlciBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucyBmb3IgZXhhbXBsZSBp biBLVk0uIEl0IGFsc28gY2Fubm90Cj4gc2xlZXAuCj4KPiBJbiBzaG9ydCAtPmludmFsaWRhdGVf cmFuZ2UgbXVzdCBiZSByZWFsbHkgZmFzdCAoaXQgc2hvdWxkbid0IHJlcXVpcmUKPiB0byBzZW5k IElQSSB0byBhbGwgb3RoZXIgQ1BVcyBsaWtlIEtWTSBtYXkgcmVxdWlyZSBkdXJpbmcgYW4KPiBp bnZhbGlkYXRlX3JhbmdlX3N0YXJ0KSBhbmQgaXQgbXVzdCBub3Qgc2xlZXAsIGluIG9yZGVyIHRv IHByZWZlciBpdAo+IHRvIF9zdGFydC9fZW5kLgo+Cj4gSS5lLiB0aGUgaW52YWxpZGF0ZSBvZiB0 aGUgc2Vjb25kYXJ5IE1NVSB0aGF0IHdhbGtzIHRoZSBsaW51eAo+IHBhZ2V0YWJsZXMgaW4gaGFy ZHdhcmUgKGluIHZob3N0IGNhc2Ugd2l0aCBHVVAgaW4gc29mdHdhcmUpIGhhcyB0bwo+IGhhcHBl biB3aGlsZSB0aGUgbGludXggcGFnZXRhYmxlIGlzIHplcm8sIG90aGVyd2lzZSBhIGNvbmN1cnJl bnQKPiBoYXJkd2FyZSBwYWdldGFibGUgbG9va3VwIGNvdWxkIHJlLWluc3RhbnRpYXRlIGEgbWFw cGluZyB0byB0aGUgb2xkCj4gcGFnZSBpbiBiZXR3ZWVuIHRoZSBzZXRfcHRlX2F0IGFuZCB0aGUg aW52YWxpZGF0ZV9yYW5nZV9lbmQgKHdoaWNoCj4gaW50ZXJuYWxseSBjYWxscyAtPmludmFsaWRh dGVfcmFuZ2UpLiBKZXJvbWUgZG9jdW1lbnRlZCBpdCBuaWNlbHkgaW4KPiBEb2N1bWVudGF0aW9u L3ZtL21tdV9ub3RpZmllci5yc3QgLgoKClJpZ2h0LCBJJ3ZlIGFjdHVhbGx5IGdvbmUgdGhyb3Vn aCB0aGlzIHNldmVyYWwgdGltZXMgYnV0IHNvbWUgZGV0YWlscyAKd2VyZSBtaXNzZWQgYnkgbWUg b2J2aW91c2x5LgoKCj4KPiBOb3cgeW91IGRvbid0IHJlYWxseSB3YWxrIHRoZSBwYWdldGFibGUg aW4gaGFyZHdhcmUgaW4gdmhvc3QsIGJ1dCBpZgo+IHlvdSB1c2UgZ3VwX2Zhc3QgYWZ0ZXIgdXNl bW0oKSBpdCdzIHNpbWlsYXIuCj4KPiBGb3Igdmhvc3QgdGhlIGludmFsaWRhdGUgd291bGQgYmUg cmVhbGx5IGZhc3QsIHRoZXJlIGFyZSBubyBJUEkgdG8KPiBkZWxpdmVyIGF0IGFsbCwgdGhlIHBy b2JsZW0gaXMganVzdCB0aGUgbXV0ZXguCgoKWWVzLiBBIHBvc3NpYmxlIHNvbHV0aW9uIGlzIHRv IGludHJvZHVjZSBhIHZhbGlkIGZsYWcgZm9yIFZBLiBWaG9zdCBtYXkgCm9ubHkgdHJ5IHRvIGFj Y2VzcyBrZXJuZWwgVkEgd2hlbiBpdCB3YXMgdmFsaWQuIEludmFsaWRhdGVfcmFuZ2Vfc3RhcnQo KSAKd2lsbCBjbGVhciB0aGlzIHVuZGVyIHRoZSBwcm90ZWN0aW9uIG9mIHRoZSB2cSBtdXRleCB3 aGVuIGl0IGNhbiBibG9jay4gClRoZW4gaW52YWxpZGF0ZV9yYW5nZV9lbmQoKSB0aGVuIGNhbiBj bGVhciB0aGlzIGZsYWcuIEFuIGlzc3VlIGlzIApibG9ja2FibGUgaXPCoCBhbHdheXMgZmFsc2Ug Zm9yIHJhbmdlX2VuZCgpLgoKCj4KPj4gVGhhdCdzIGEgc2VwYXJhdGUgaXNzdWUgZnJvbSBzZXRf cGFnZV9kaXJ0eSB3aGVuIG1lbW9yeSBpcyBmaWxlIGJhY2tlZC4KPiBZZXMuIEkgZG9uJ3QgeWV0 IGtub3cgd2h5IHRoZSBleHQ0IGludGVybmFsIF9fd3JpdGVwYWdlIGNhbm5vdAo+IHJlLWNyZWF0 ZSB0aGUgYmggaWYgdGhleSd2ZSBiZWVuIGZyZWVkIGJ5IHRoZSBWTSBhbmQgd2h5IHN1Y2ggcmFj ZQo+IHdoZXJlIHRoZSBiaCBhcmUgZnJlZWQgZm9yIGEgcGlubmVkIFZNX1NIQVJFRCBleHQ0IHBh Z2UgZG9lc24ndCBldmVuCj4gZXhpc3QgZm9yIHRyYW5zaWVudCBwaW5zIGxpa2UgT19ESVJFQ1Qg KGRvZXMgaXQgd29yayBieSBsdWNrPyksIGJ1dAo+IHdpdGggbW11IG5vdGlmaWVycyB0aGVyZSBh cmUgbm8gbG9uZyB0ZXJtIHBpbnMgYW55d2F5LCBzbyB0aGlzIHdvcmtzCj4gbm9ybWFsbHkgYW5k IGl0J3MgbGlrZSB0aGUgbWVtb3J5IGlzbid0IHBpbm5lZC4gSW4gYW55IGNhc2UgSSB0aGluawo+ IHRoYXQncyBhIGtlcm5lbCBidWcgaW4gZWl0aGVyIF9fd3JpdGVwYWdlIG9yIHRyeV90b19mcmVl X2J1ZmZlcnMsIHNvIEkKPiB3b3VsZCBpZ25vcmUgaXQgY29uc2lkZXJpbmcgcWVtdSB3aWxsIG9u bHkgdXNlIGFub24gbWVtb3J5IG9yIHRtcGZzIG9yCj4gaHVnZXRsYmZzIGFzIGJhY2tpbmcgc3Rv cmUgZm9yIHRoZSB2aXJ0aW8gcmluZy4gSXQgd291bGRuJ3QgbWFrZSBzZW5zZQo+IGZvciBxZW11 IHRvIHJpc2sgdHJpZ2dlcmluZyBJL08gb24gYSBWTV9TSEFSRUQgZXh0NCwgc28gd2Ugc2hvdWxk bid0Cj4gYmUgZXZlbiBleHBvc2VkIHRvIHdoYXQgc2VlbXMgdG8gYmUgYW4gb3J0aG9nb25hbCBr ZXJuZWwgYnVnLgo+Cj4gSSBzdXBwb3NlIHdoYXRldmVyIHNvbHV0aW9uIHdpbGwgZml4IHRoZSBz ZXRfcGFnZV9kaXJ0eV9sb2NrIG9uCj4gVk1fU0hBUkVEIGV4dDQgZm9yIHRoZSBvdGhlciBwbGFj ZXMgdGhhdCBkb24ndCBvciBjYW4ndCB1c2UgbW11Cj4gbm90aWZpZXJzLCB3aWxsIHRoZW4gd29y ayBmb3Igdmhvc3QgdG9vIHdoaWNoIHVzZXMgbW11IG5vdGlmaWVycyBhbmQKPiB3aWxsIGJlIGxl c3MgYWZmZWN0ZWQgZnJvbSB0aGUgc3RhcnQgaWYgc29tZXRoaW5nLgo+Cj4gUmVhZGluZyB0aGUg bHduIGxpbmsgYWJvdXQgdGhlIGRpc2N1c3Npb24gYWJvdXQgdGhlIGxvbmcgdGVybSBHVVAgcGlu Cj4gZnJvbSBKYW4gdnMgc2V0X3BhZ2VfZGlydHlfbG9jazogSSBjYW4gb25seSBhZ3JlZSB3aXRo IHRoZSBsYXN0IHBhcnQKPiB3aGVyZSBKZXJvbWUgY29ycmVjdGx5IHBvaW50ZWQgb3V0IGF0IHRo ZSBlbmQgdGhhdCBtZWxsYW5veCBSRE1BIGdvdAo+IGl0IHJpZ2h0IGJ5IGF2b2lkaW5nIGNvbXBs ZXRlbHkgbG9uZyB0ZXJtIHBpbnMgYnkgdXNpbmcgbW11IG5vdGlmaWVyCj4gYW5kIGluIGdlbmVy YWwgbW11IG5vdGlmaWVyIGlzIHRoZSBzdGFuZGFyZCBzb2x1dGlvbiB0byBhdm9pZCBsb25nCj4g dGVybSBwaW5zLiBOb3RoaW5nIHNob3VsZCBldmVyIHRha2UgbG9uZyB0ZXJtIEdVUCBwaW5zLCBp ZiBpdCBkb2VzIGl0Cj4gbWVhbnMgc29mdHdhcmUgaXMgYmFkIG9yIHRoZSBoYXJkd2FyZSBsYWNr cyBmZWF0dXJlcyB0byBzdXBwb3J0IG9uCj4gZGVtYW5kIHBhZ2luZy4gU3RpbGwgSSBkb24ndCBn ZXQgd2h5IHRyYW5zaWVudCBwaW5zIGxpa2UgT19ESVJFQ1QKPiB3aGVyZSBtbXUgbm90aWZpZXIg d291bGQgYmUgcHJvaGliaXRpdmUgdG8gdXNlIChyZWdpc3RlcmluZyBpbnRvIG1tdQo+IG5vdGlm aWVyIGNhbm5vdCBiZSBkb25lIGF0IGhpZ2ggZnJlcXVlbmN5LCB0aGUgbG9ja2luZyB0byBkbyBz byBpcwo+IG1hc3NpdmUpIGNhbm5vdCBlbmQgdXAgaW50byB0aGUgc2FtZSBleHQ0IF93cml0ZXBh Z2UgY3Jhc2ggYXMgbG9uZwo+IHRlcm0gcGluczogbG9uZyB0ZXJtIG9yIHNob3J0IHRlcm0gdHJh bnNpZW50IGlzIGEgc3ViamVjdGl2ZSBtZWFzdXJlCj4gZnJvbSBWTSBzdGFuZHBvaW50LCB0aGUg Vk0gd29uJ3Qga25vdyB0aGUgZGlmZmVyZW5jZSwgbHVjayB3aWxsCj4gaW5zdGVhZC4KPgo+PiBJ dCdzIGJlY2F1c2Ugb2YgYWxsIHRoZXNlIGlzc3VlcyB0aGF0IEkgcHJlZmVycmVkIGp1c3QgYWNj ZXNzaW5nCj4+IHVzZXJzcGFjZSBtZW1vcnkgYW5kIGhhbmRsaW5nIGZhdWx0cy4gVW5mb3J0dW5h dGVseSB0aGVyZSBkb2VzIG5vdAo+PiBhcHBlYXIgdG8gZXhpc3QgYW4gQVBJIHRoYXQgd2hpdGVs aXN0cyBhIHNwZWNpZmljIGRyaXZlciBhbG9uZyB0aGUgbGluZXMKPj4gb2YgIkkgY2hlY2tlZCB0 aGlzIGNvZGUgZm9yIHNwZWN1bGF0aXZlIGluZm8gbGVha3MsIGRvbid0IGFkZCBiYXJyaWVycwo+ PiBvbiBkYXRhIHBhdGggcGxlYXNlIi4KPiBZZXMgdGhhdCdzIHVuZm9ydHVuYXRlLCBfX3VhY2Nl c3NfYmVnaW5fbm9zcGVjKCkgaXMgbm93IG1ha2luZwo+IHByb2hpYml0aXZlIHRvIGZyZXF1ZW50 bHkgYWNjZXNzIHVzZXJsYW5kIGNvZGUuCj4KPiBJIGRvdWJ0IHdlIGNhbiBkbyBsaWtlIGFjY2Vz c19vaygpIGFuZCBvbmx5IGNoZWNrIGl0IG9uY2UuIGFjY2Vzc19vawo+IGNoZWNrcyB0aGUgdmly dHVhbCBhZGRyZXNzLCBhbmQgaWYgdGhlIHZpcnR1YWwgYWRkcmVzcyBpcyBvayBkb2Vzbid0Cj4g d3JhcCBhcm91bmQgYW5kIGl0IHBvaW50cyB0byB1c2VybGFuZCBpbiBhIHNhZmUgcmFuZ2UsIGl0 J3MgYWx3YXlzCj4gb2suIFRoZXJlJ3Mgbm8gbmVlZCB0byBydW4gYWNjZXNzX29rIGFnYWluIGlm IHdlIGtlZXAgaGl0dGluZyBvbiB0aGUKPiB2ZXJ5IHNhbWUgYWRkcmVzcy4KPgo+IF9fdWFjY2Vz c19iZWdpbl9ub3NwZWMoKSBpbnN0ZWFkIGlzIGFib3V0IHJ1bnRpbWUgc3R1ZmYgdGhhdCBjYW4K PiBjaGFuZ2UgdGhlIG1vbWVudCBjb3B5LXVzZXIgaGFzIGNvbXBsZXRlZCBldmVuIGJlZm9yZSBy ZXR1cm5pbmcgdG8KPiB1c2VybGFuZCwgc28gdGhlcmUncyBubyBlYXN5IHdheSB0byBkbyBpdCBq dXN0IG9uY2UuCj4KPiBPbiB0b3Agb2Ygc2tpcHBpbmcgdGhlIF9fdWFjY2Vzc19iZWdpbl9ub3Nw ZWMoKSwgdGhlIG1tdSBub3RpZmllciBzb2Z0Cj4gdmhvc3QgZGVzaWduIHdpbGwgZnVydGhlciBi b29zdCB0aGUgcGVyZm9ybWFuY2UgYnkgZ3VhcmFudGVlaW5nIHRoZQo+IHVzZSBvZiBnaWdhcGFn ZXMgVExCcyB3aGVuIGF2YWlsYWJsZSAob3IgMk0gVExCcyB3b3JzdCBjYXNlKSBldmVuIGlmCj4g UUVNVSBydW5zIG9uIHNtYWxsZXIgcGFnZXMuCgoKSnVzdCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0 YW5kIGhlcmUuIEZvciBib29zdGluZyB0aHJvdWdoIGh1Z2UgVExCLCBkbyAKeW91IG1lYW4gd2Ug Y2FuIGRvIHRoYXQgaW4gdGhlIGZ1dHVyZSAoZS5nIGJ5IG1hcHBpbmcgbW9yZSB1c2Vyc3BhY2Ug CnBhZ2VzIHRvIGtlbnJlbCkgb3IgaXQgY2FuIGJlIGRvbmUgYnkgdGhpcyBzZXJpZXMgKG9ubHkg YWJvdXQgdGhyZWUgNEsgCnBhZ2VzIHdlcmUgdm1hcHBlZCBwZXIgdmlydHF1ZXVlKT8KClRoYW5r cwoKCj4KPiBUaGFua3MsCj4gQW5kcmVhCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fClZpcnR1YWxpemF0aW9uIG1haWxpbmcgbGlzdApWaXJ0dWFsaXphdGlv bkBsaXN0cy5saW51eC1mb3VuZGF0aW9uLm9yZwpodHRwczovL2xpc3RzLmxpbnV4Zm91bmRhdGlv bi5vcmcvbWFpbG1hbi9saXN0aW5mby92aXJ0dWFsaXphdGlvbg==