From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1o8Cke-00482M-3e for linux-um@lists.infradead.org; Mon, 04 Jul 2022 03:27:57 +0000 Received: by mail-pf1-f200.google.com with SMTP id c67-20020a621c46000000b005251cf9feb0so2117256pfc.20 for ; Sun, 03 Jul 2022 20:27:49 -0700 (PDT) Message-ID: <0263ecf4-043a-7cc1-950f-f48d3b66bed7@redhat.com> Date: Mon, 4 Jul 2022 11:27:32 +0800 MIME-Version: 1.0 Subject: Re: [PATCH v11 30/40] virtio_pci: support VIRTIO_F_RING_RESET References: <20220629065656.54420-1-xuanzhuo@linux.alibaba.com> <20220629065656.54420-31-xuanzhuo@linux.alibaba.com> From: Jason Wang In-Reply-To: <20220629065656.54420-31-xuanzhuo@linux.alibaba.com> Content-Language: en-US List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-um" Errors-To: linux-um-bounces+geert=linux-m68k.org@lists.infradead.org To: Xuan Zhuo , virtualization@lists.linux-foundation.org Cc: Richard Weinberger , Anton Ivanov , Johannes Berg , "Michael S. Tsirkin" , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Hans de Goede , Mark Gross , Vadim Pasternak , Bjorn Andersson , Mathieu Poirier , Cornelia Huck , Halil Pasic , Eric Farman , Heiko Carstens , Vasily Gorbik , Alexander Gordeev , Christian Borntraeger , Sven Schnelle , Alexei Starovoitov , Daniel Borkmann , Jesper Dangaard Brouer , John Fastabend , Vincent Whitchurch , linux-um@lists.infradead.org, netdev@vger.kernel.org, platform-driver-x86@vger.kernel.org, linux-remoteproc@vger.kernel.org, linux-s390@vger.kernel.org, kvm@vger.kernel.org, bpf@vger.kernel.org, kangjie.xu@linux.alibaba.com CuWcqCAyMDIyLzYvMjkgMTQ6NTYsIFh1YW4gWmh1byDlhpnpgZM6Cj4gVGhpcyBwYXRjaCBpbXBs ZW1lbnRzIHZpcnRpbyBwY2kgc3VwcG9ydCBmb3IgUVVFVUUgUkVTRVQuCj4KPiBQZXJmb3JtaW5n IHJlc2V0IG9uIGEgcXVldWUgaXMgZGl2aWRlZCBpbnRvIHRoZXNlIHN0ZXBzOgo+Cj4gICAxLiBu b3RpZnkgdGhlIGRldmljZSB0byByZXNldCB0aGUgcXVldWUKPiAgIDIuIHJlY3ljbGUgdGhlIGJ1 ZmZlciBzdWJtaXR0ZWQKPiAgIDMuIHJlc2V0IHRoZSB2cmluZyAobWF5IHJlLWFsbG9jKQo+ICAg NC4gbW1hcCB2cmluZyB0byBkZXZpY2UsIGFuZCBlbmFibGUgdGhlIHF1ZXVlCj4KPiBUaGlzIHBh dGNoIGltcGxlbWVudHMgdmlydGlvX3Jlc2V0X3ZxKCksIHZpcnRpb19lbmFibGVfcmVzZXRxKCkg aW4gdGhlCj4gcGNpIHNjZW5hcmlvLgo+Cj4gU2lnbmVkLW9mZi1ieTogWHVhbiBaaHVvIDx4dWFu emh1b0BsaW51eC5hbGliYWJhLmNvbT4KPiAtLS0KPiAgIGRyaXZlcnMvdmlydGlvL3ZpcnRpb19w Y2lfY29tbW9uLmMgfCAxMiArKystCj4gICBkcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX21vZGVy bi5jIHwgOTYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gICBkcml2ZXJzL3ZpcnRp by92aXJ0aW9fcmluZy5jICAgICAgIHwgIDIgKwo+ICAgaW5jbHVkZS9saW51eC92aXJ0aW8uaCAg ICAgICAgICAgICB8ICAxICsKPiAgIDQgZmlsZXMgY2hhbmdlZCwgMTA4IGluc2VydGlvbnMoKyks IDMgZGVsZXRpb25zKC0pCj4KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3Bj aV9jb21tb24uYyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfY29tbW9uLmMKPiBpbmRleCBj YTUxZmNjOWRhYWIuLmFkMjU4YTlkM2I5ZiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL3ZpcnRpby92 aXJ0aW9fcGNpX2NvbW1vbi5jCj4gKysrIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9jb21t b24uYwo+IEBAIC0yMTQsOSArMjE0LDE1IEBAIHN0YXRpYyB2b2lkIHZwX2RlbF92cShzdHJ1Y3Qg dmlydHF1ZXVlICp2cSkKPiAgIAlzdHJ1Y3QgdmlydGlvX3BjaV92cV9pbmZvICppbmZvID0gdnBf ZGV2LT52cXNbdnEtPmluZGV4XTsKPiAgIAl1bnNpZ25lZCBsb25nIGZsYWdzOwo+ICAgCj4gLQlz cGluX2xvY2tfaXJxc2F2ZSgmdnBfZGV2LT5sb2NrLCBmbGFncyk7Cj4gLQlsaXN0X2RlbCgmaW5m by0+bm9kZSk7Cj4gLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2cF9kZXYtPmxvY2ssIGZsYWdz KTsKPiArCS8qCj4gKwkgKiBJZiBpdCBmYWlscyBkdXJpbmcgcmUtZW5hYmxlIHJlc2V0IHZxLiBU aGlzIHdheSB3ZSB3b24ndCByZWpvaW4KPiArCSAqIGluZm8tPm5vZGUgdG8gdGhlIHF1ZXVlLiBQ cmV2ZW50IHVuZXhwZWN0ZWQgaXJxcy4KPiArCSAqLwo+ICsJaWYgKCF2cS0+cmVzZXQpIHsKPiAr CQlzcGluX2xvY2tfaXJxc2F2ZSgmdnBfZGV2LT5sb2NrLCBmbGFncyk7Cj4gKwkJbGlzdF9kZWwo JmluZm8tPm5vZGUpOwo+ICsJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZwX2Rldi0+bG9jaywg ZmxhZ3MpOwo+ICsJfQo+ICAgCj4gICAJdnBfZGV2LT5kZWxfdnEoaW5mbyk7Cj4gICAJa2ZyZWUo aW5mbyk7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbW9kZXJuLmMg Yi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX21vZGVybi5jCj4gaW5kZXggOTA0MWQ5YTQxYjdk Li43NTRlNWUxMDM4NmIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9t b2Rlcm4uYwo+ICsrKyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbW9kZXJuLmMKPiBAQCAt MzQsNiArMzQsOSBAQCBzdGF0aWMgdm9pZCB2cF90cmFuc3BvcnRfZmVhdHVyZXMoc3RydWN0IHZp cnRpb19kZXZpY2UgKnZkZXYsIHU2NCBmZWF0dXJlcykKPiAgIAlpZiAoKGZlYXR1cmVzICYgQklU X1VMTChWSVJUSU9fRl9TUl9JT1YpKSAmJgo+ICAgCQkJcGNpX2ZpbmRfZXh0X2NhcGFiaWxpdHko cGNpX2RldiwgUENJX0VYVF9DQVBfSURfU1JJT1YpKQo+ICAgCQlfX3ZpcnRpb19zZXRfYml0KHZk ZXYsIFZJUlRJT19GX1NSX0lPVik7Cj4gKwo+ICsJaWYgKGZlYXR1cmVzICYgQklUX1VMTChWSVJU SU9fRl9SSU5HX1JFU0VUKSkKPiArCQlfX3ZpcnRpb19zZXRfYml0KHZkZXYsIFZJUlRJT19GX1JJ TkdfUkVTRVQpOwo+ICAgfQo+ICAgCj4gICAvKiB2aXJ0aW8gY29uZmlnLT5maW5hbGl6ZV9mZWF0 dXJlcygpIGltcGxlbWVudGF0aW9uICovCj4gQEAgLTE5OSw2ICsyMDIsOTUgQEAgc3RhdGljIGlu dCB2cF9hY3RpdmVfdnEoc3RydWN0IHZpcnRxdWV1ZSAqdnEsIHUxNiBtc2l4X3ZlYykKPiAgIAly ZXR1cm4gMDsKPiAgIH0KPiAgIAo+ICtzdGF0aWMgaW50IHZwX21vZGVybl9yZXNldF92cShzdHJ1 Y3QgdmlydHF1ZXVlICp2cSkKPiArewo+ICsJc3RydWN0IHZpcnRpb19wY2lfZGV2aWNlICp2cF9k ZXYgPSB0b192cF9kZXZpY2UodnEtPnZkZXYpOwo+ICsJc3RydWN0IHZpcnRpb19wY2lfbW9kZXJu X2RldmljZSAqbWRldiA9ICZ2cF9kZXYtPm1kZXY7Cj4gKwlzdHJ1Y3QgdmlydGlvX3BjaV92cV9p bmZvICppbmZvOwo+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsKPiArCj4gKwlpZiAoIXZpcnRpb19o YXNfZmVhdHVyZSh2cS0+dmRldiwgVklSVElPX0ZfUklOR19SRVNFVCkpCj4gKwkJcmV0dXJuIC1F Tk9FTlQ7Cj4gKwo+ICsJdnBfbW9kZXJuX3NldF9xdWV1ZV9yZXNldChtZGV2LCB2cS0+aW5kZXgp Owo+ICsKPiArCWluZm8gPSB2cF9kZXYtPnZxc1t2cS0+aW5kZXhdOwo+ICsKPiArCS8qIGRlbGV0 ZSB2cSBmcm9tIGlycSBoYW5kbGVyICovCj4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmdnBfZGV2LT5s b2NrLCBmbGFncyk7Cj4gKwlsaXN0X2RlbCgmaW5mby0+bm9kZSk7Cj4gKwlzcGluX3VubG9ja19p cnFyZXN0b3JlKCZ2cF9kZXYtPmxvY2ssIGZsYWdzKTsKPiArCj4gKwlJTklUX0xJU1RfSEVBRCgm aW5mby0+bm9kZSk7Cj4gKwo+ICsJLyogRm9yIHRoZSBjYXNlIHdoZXJlIHZxIGhhcyBhbiBleGNs dXNpdmUgaXJxLCB0byBwcmV2ZW50IHRoZSBpcnEgZnJvbQo+ICsJICogYmVpbmcgcmVjZWl2ZWQg YWdhaW4gYW5kIHRoZSBwZW5kaW5nIGlycSwgY2FsbCBzeW5jaHJvbml6ZV9pcnEoKSwgYW5kCj4g KwkgKiBicmVhayBpdC4KPiArCSAqCj4gKwkgKiBXZSBjYW4ndCB1c2UgZGlzYWJsZV9pcnEoKSBz aW5jZSBpdCBjb25mbGljdHMgd2l0aCB0aGUgYWZmaW5pdHkKPiArCSAqIG1hbmFnZWQgSVJRIHRo YXQgaXMgdXNlZCBieSBzb21lIGRyaXZlcnMuIFNvIHRoaXMgaXMgZG9uZSBvbiB0b3Agb2YKPiAr CSAqIElSUSBoYXJkZW5pbmcuCj4gKwkgKgo+ICsJICogSW4gdGhlIHNjZW5hcmlvIGJhc2VkIG9u IHNoYXJlZCBpbnRlcnJ1cHRzLCB2cSB3aWxsIGJlIHNlYXJjaGVkIGZyb20KPiArCSAqIHRoZSBx dWV1ZSB2aXJ0cXVldWVzLiBTaW5jZSB0aGUgcHJldmlvdXMgbGlzdF9kZWwoKSBoYXMgYmVlbiBk ZWxldGVkCj4gKwkgKiBmcm9tIHRoZSBxdWV1ZSwgaXQgaXMgaW1wb3NzaWJsZSBmb3IgdnEgdG8g YmUgY2FsbGVkIGluIHRoaXMgY2FzZS4KPiArCSAqIFRoZXJlIGlzIG5vIG5lZWQgdG8gY2xvc2Ug dGhlIGNvcnJlc3BvbmRpbmcgaW50ZXJydXB0Lgo+ICsJICovCj4gKwlpZiAodnBfZGV2LT5wZXJf dnFfdmVjdG9ycyAmJiBpbmZvLT5tc2l4X3ZlY3RvciAhPSBWSVJUSU9fTVNJX05PX1ZFQ1RPUikg ewo+ICsjaWZkZWYgQ09ORklHX1ZJUlRJT19IQVJERU5fTk9USUZJQ0FUSU9OCj4gKwkJX192aXJ0 cXVldWVfYnJlYWsodnEpOwo+ICsjZW5kaWYKPiArCQlzeW5jaHJvbml6ZV9pcnEocGNpX2lycV92 ZWN0b3IodnBfZGV2LT5wY2lfZGV2LCBpbmZvLT5tc2l4X3ZlY3RvcikpOwo+ICsJfQo+ICsKPiAr CXZxLT5yZXNldCA9IHRydWU7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBp bnQgdnBfbW9kZXJuX2VuYWJsZV9yZXNldF92cShzdHJ1Y3QgdmlydHF1ZXVlICp2cSkKPiArewo+ ICsJc3RydWN0IHZpcnRpb19wY2lfZGV2aWNlICp2cF9kZXYgPSB0b192cF9kZXZpY2UodnEtPnZk ZXYpOwo+ICsJc3RydWN0IHZpcnRpb19wY2lfbW9kZXJuX2RldmljZSAqbWRldiA9ICZ2cF9kZXYt Pm1kZXY7Cj4gKwlzdHJ1Y3QgdmlydGlvX3BjaV92cV9pbmZvICppbmZvOwo+ICsJdW5zaWduZWQg bG9uZyBmbGFncywgaW5kZXg7Cj4gKwlpbnQgZXJyOwo+ICsKPiArCWlmICghdnEtPnJlc2V0KQo+ ICsJCXJldHVybiAtRUJVU1k7Cj4gKwo+ICsJaW5kZXggPSB2cS0+aW5kZXg7Cj4gKwlpbmZvID0g dnBfZGV2LT52cXNbaW5kZXhdOwo+ICsKPiArCWlmICh2cF9tb2Rlcm5fZ2V0X3F1ZXVlX3Jlc2V0 KG1kZXYsIGluZGV4KSkKPiArCQlyZXR1cm4gLUVCVVNZOwo+ICsKPiArCWlmICh2cF9tb2Rlcm5f Z2V0X3F1ZXVlX2VuYWJsZShtZGV2LCBpbmRleCkpCj4gKwkJcmV0dXJuIC1FQlVTWTsKPiArCj4g KwllcnIgPSB2cF9hY3RpdmVfdnEodnEsIGluZm8tPm1zaXhfdmVjdG9yKTsKPiArCWlmIChlcnIp Cj4gKwkJcmV0dXJuIGVycjsKPiArCj4gKwlpZiAodnEtPmNhbGxiYWNrKSB7Cj4gKwkJc3Bpbl9s b2NrX2lycXNhdmUoJnZwX2Rldi0+bG9jaywgZmxhZ3MpOwo+ICsJCWxpc3RfYWRkKCZpbmZvLT5u b2RlLCAmdnBfZGV2LT52aXJ0cXVldWVzKTsKPiArCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2 cF9kZXYtPmxvY2ssIGZsYWdzKTsKPiArCX0gZWxzZSB7Cj4gKwkJSU5JVF9MSVNUX0hFQUQoJmlu Zm8tPm5vZGUpOwo+ICsJfQo+ICsKPiArI2lmZGVmIENPTkZJR19WSVJUSU9fSEFSREVOX05PVElG SUNBVElPTgo+ICsJaWYgKHZwX2Rldi0+cGVyX3ZxX3ZlY3RvcnMgJiYgaW5mby0+bXNpeF92ZWN0 b3IgIT0gVklSVElPX01TSV9OT19WRUNUT1IpCj4gKwkJX192aXJ0cXVldWVfdW5icmVhayh2cSk7 Cj4gKyNlbmRpZgo+ICsKPiArCXZwX21vZGVybl9zZXRfcXVldWVfZW5hYmxlKCZ2cF9kZXYtPm1k ZXYsIGluZGV4LCB0cnVlKTsKPiArCXZxLT5yZXNldCA9IGZhbHNlOwo+ICsKPiArCXJldHVybiAw Owo+ICt9Cj4gKwo+ICAgc3RhdGljIHUxNiB2cF9jb25maWdfdmVjdG9yKHN0cnVjdCB2aXJ0aW9f cGNpX2RldmljZSAqdnBfZGV2LCB1MTYgdmVjdG9yKQo+ICAgewo+ICAgCXJldHVybiB2cF9tb2Rl cm5fY29uZmlnX3ZlY3RvcigmdnBfZGV2LT5tZGV2LCB2ZWN0b3IpOwo+IEBAIC00MTMsNiArNTA1 LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB2aXJ0aW9fY29uZmlnX29wcyB2aXJ0aW9fcGNpX2Nv bmZpZ19ub2Rldl9vcHMgPSB7Cj4gICAJLnNldF92cV9hZmZpbml0eSA9IHZwX3NldF92cV9hZmZp bml0eSwKPiAgIAkuZ2V0X3ZxX2FmZmluaXR5ID0gdnBfZ2V0X3ZxX2FmZmluaXR5LAo+ICAgCS5n ZXRfc2htX3JlZ2lvbiAgPSB2cF9nZXRfc2htX3JlZ2lvbiwKPiArCS5yZXNldF92cQkgPSB2cF9t b2Rlcm5fcmVzZXRfdnEsCj4gKwkuZW5hYmxlX3Jlc2V0X3ZxID0gdnBfbW9kZXJuX2VuYWJsZV9y ZXNldF92cSwKPiAgIH07Cj4gICAKPiAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdmlydGlvX2NvbmZp Z19vcHMgdmlydGlvX3BjaV9jb25maWdfb3BzID0gewo+IEBAIC00MzEsNiArNTI1LDggQEAgc3Rh dGljIGNvbnN0IHN0cnVjdCB2aXJ0aW9fY29uZmlnX29wcyB2aXJ0aW9fcGNpX2NvbmZpZ19vcHMg PSB7Cj4gICAJLnNldF92cV9hZmZpbml0eSA9IHZwX3NldF92cV9hZmZpbml0eSwKPiAgIAkuZ2V0 X3ZxX2FmZmluaXR5ID0gdnBfZ2V0X3ZxX2FmZmluaXR5LAo+ICAgCS5nZXRfc2htX3JlZ2lvbiAg PSB2cF9nZXRfc2htX3JlZ2lvbiwKPiArCS5yZXNldF92cQkgPSB2cF9tb2Rlcm5fcmVzZXRfdnEs Cj4gKwkuZW5hYmxlX3Jlc2V0X3ZxID0gdnBfbW9kZXJuX2VuYWJsZV9yZXNldF92cSwKPiAgIH07 Cj4gICAKPiAgIC8qIHRoZSBQQ0kgcHJvYmluZyBmdW5jdGlvbiAqLwo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5jIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3Jpbmcu Ywo+IGluZGV4IDdiMDJiZTdmY2U2Ny4uODJiMDU4ZThjZTM0IDEwMDY0NAo+IC0tLSBhL2RyaXZl cnMvdmlydGlvL3ZpcnRpb19yaW5nLmMKPiArKysgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcmlu Zy5jCj4gQEAgLTIwMDgsNiArMjAwOCw3IEBAIHN0YXRpYyBzdHJ1Y3QgdmlydHF1ZXVlICp2cmlu Z19jcmVhdGVfdmlydHF1ZXVlX3BhY2tlZCgKPiAgIAl2cS0+dnEudmRldiA9IHZkZXY7Cj4gICAJ dnEtPnZxLm5hbWUgPSBuYW1lOwo+ICAgCXZxLT52cS5pbmRleCA9IGluZGV4Owo+ICsJdnEtPnZx LnJlc2V0ID0gZmFsc2U7Cj4gICAJdnEtPndlX293bl9yaW5nID0gdHJ1ZTsKPiAgIAl2cS0+bm90 aWZ5ID0gbm90aWZ5Owo+ICAgCXZxLT53ZWFrX2JhcnJpZXJzID0gd2Vha19iYXJyaWVyczsKPiBA QCAtMjQ4Nyw2ICsyNDg4LDcgQEAgc3RydWN0IHZpcnRxdWV1ZSAqX192cmluZ19uZXdfdmlydHF1 ZXVlKHVuc2lnbmVkIGludCBpbmRleCwKPiAgIAl2cS0+dnEudmRldiA9IHZkZXY7Cj4gICAJdnEt PnZxLm5hbWUgPSBuYW1lOwo+ICAgCXZxLT52cS5pbmRleCA9IGluZGV4Owo+ICsJdnEtPnZxLnJl c2V0ID0gZmFsc2U7Cj4gICAJdnEtPndlX293bl9yaW5nID0gZmFsc2U7Cj4gICAJdnEtPm5vdGlm eSA9IG5vdGlmeTsKPiAgIAl2cS0+d2Vha19iYXJyaWVycyA9IHdlYWtfYmFycmllcnM7Cj4gZGlm ZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlydGlvLmggYi9pbmNsdWRlL2xpbnV4L3ZpcnRpby5o Cj4gaW5kZXggZGM0NzRhMGQ0OGQxLi44OGYyMTc5NmIxYzMgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVk ZS9saW51eC92aXJ0aW8uaAo+ICsrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvLmgKPiBAQCAtMzMs NiArMzMsNyBAQCBzdHJ1Y3QgdmlydHF1ZXVlIHsKPiAgIAl1bnNpZ25lZCBpbnQgbnVtX2ZyZWU7 Cj4gICAJdW5zaWduZWQgaW50IG51bV9tYXg7Cj4gICAJdm9pZCAqcHJpdjsKPiArCWJvb2wgcmVz ZXQ7Cj4gICB9OwoKCkkgd29uZGVyIGlmIGl0J3MgYmV0dGVyIHRvIG1vdmUgdmlydGlvX3Jpbmcg cGFydCBpbnRvIGEgc2VwYXJhdGUgcGF0Y2guCgpPdGhlciBsb29rcyBnb29kLgoKVGhhbmtzCgoK PiAgIAo+ICAgaW50IHZpcnRxdWV1ZV9hZGRfb3V0YnVmKHN0cnVjdCB2aXJ0cXVldWUgKnZxLAoK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LXVt IG1haWxpbmcgbGlzdApsaW51eC11bUBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5p bmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtdW0K