From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tiwei Bie Subject: Re: [RFC v3 4/5] virtio_ring: add event idx support in packed ring Date: Wed, 2 May 2018 23:12:55 +0800 Message-ID: <20180502151255.h3x6rhszxa3euinl__30316.2747914486$1525273821$gmane$org@debian> References: <20180425051550.24342-1-tiwei.bie@intel.com> <20180425051550.24342-5-tiwei.bie@intel.com> <34781052-df9f-e505-cd3f-08e460b34dcc@redhat.com> <20180502072819.mf5l3dypk6dwx2s7@debian> <20180502164828-mutt-send-email-mst@kernel.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20180502164828-mutt-send-email-mst@kernel.org> 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: "Michael S. Tsirkin" Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, virtualization@lists.linux-foundation.org, wexu@redhat.com List-Id: virtualization@lists.linuxfoundation.org T24gV2VkLCBNYXkgMDIsIDIwMTggYXQgMDQ6NTE6MDFQTSArMDMwMCwgTWljaGFlbCBTLiBUc2ly a2luIHdyb3RlOgo+IE9uIFdlZCwgTWF5IDAyLCAyMDE4IGF0IDAzOjI4OjE5UE0gKzA4MDAsIFRp d2VpIEJpZSB3cm90ZToKPiA+IE9uIFdlZCwgTWF5IDAyLCAyMDE4IGF0IDEwOjUxOjA2QU0gKzA4 MDAsIEphc29uIFdhbmcgd3JvdGU6Cj4gPiA+IE9uIDIwMTjlubQwNOaciDI15pelIDEzOjE1LCBU aXdlaSBCaWUgd3JvdGU6Cj4gPiA+ID4gVGhpcyBjb21taXQgaW50cm9kdWNlcyB0aGUgZXZlbnQg aWR4IHN1cHBvcnQgaW4gcGFja2VkCj4gPiA+ID4gcmluZy4gVGhpcyBmZWF0dXJlIGlzIHRlbXBv cmFyaWx5IGRpc2FibGVkLCBiZWNhdXNlIHRoZQo+ID4gPiA+IGltcGxlbWVudGF0aW9uIGluIHRo aXMgcGF0Y2ggbWF5IG5vdCB3b3JrIGFzIGV4cGVjdGVkLAo+ID4gPiA+IGFuZCBzb21lIGZ1cnRo ZXIgZGlzY3Vzc2lvbnMgb24gdGhlIGltcGxlbWVudGF0aW9uIGFyZQo+ID4gPiA+IG5lZWRlZCwg ZS5nLiBkbyB3ZSBoYXZlIHRvIGNoZWNrIHRoZSB3cmFwIGNvdW50ZXIgd2hlbgo+ID4gPiA+IGNo ZWNraW5nIHdoZXRoZXIgYSBraWNrIGlzIG5lZWRlZD8KPiA+ID4gPiAKPiA+ID4gPiBTaWduZWQt b2ZmLWJ5OiBUaXdlaSBCaWUgPHRpd2VpLmJpZUBpbnRlbC5jb20+Cj4gPiA+ID4gLS0tCj4gPiA+ ID4gICBkcml2ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5jIHwgNTMgKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKy0tLS0KPiA+ID4gPiAgIDEgZmlsZSBjaGFuZ2VkLCA0OSBp bnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQo+ID4gPiA+IAo+ID4gPiA+IGRpZmYgLS1naXQg YS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5jIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3Jp bmcuYwo+ID4gPiA+IGluZGV4IDAxODFlOTM4OTdiZS4uYjEwMzljMjk4NWI5IDEwMDY0NAo+ID4g PiA+IC0tLSBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19yaW5nLmMKPiA+ID4gPiArKysgYi9kcml2 ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5jCj4gPiA+ID4gQEAgLTk4Niw3ICs5ODYsNyBAQCBzdGF0 aWMgaW5saW5lIGludCB2aXJ0cXVldWVfYWRkX3BhY2tlZChzdHJ1Y3QgdmlydHF1ZXVlICpfdnEs Cj4gPiA+ID4gICBzdGF0aWMgYm9vbCB2aXJ0cXVldWVfa2lja19wcmVwYXJlX3BhY2tlZChzdHJ1 Y3QgdmlydHF1ZXVlICpfdnEpCj4gPiA+ID4gICB7Cj4gPiA+ID4gICAJc3RydWN0IHZyaW5nX3Zp cnRxdWV1ZSAqdnEgPSB0b192dnEoX3ZxKTsKPiA+ID4gPiAtCXUxNiBmbGFnczsKPiA+ID4gPiAr CXUxNiBuZXcsIG9sZCwgb2ZmX3dyYXAsIGZsYWdzOwo+ID4gPiA+ICAgCWJvb2wgbmVlZHNfa2lj azsKPiA+ID4gPiAgIAl1MzIgc25hcHNob3Q7Cj4gPiA+ID4gQEAgLTk5NSw3ICs5OTUsMTIgQEAg c3RhdGljIGJvb2wgdmlydHF1ZXVlX2tpY2tfcHJlcGFyZV9wYWNrZWQoc3RydWN0IHZpcnRxdWV1 ZSAqX3ZxKQo+ID4gPiA+ICAgCSAqIHN1cHByZXNzaW9ucy4gKi8KPiA+ID4gPiAgIAl2aXJ0aW9f bWIodnEtPndlYWtfYmFycmllcnMpOwo+ID4gPiA+ICsJb2xkID0gdnEtPm5leHRfYXZhaWxfaWR4 IC0gdnEtPm51bV9hZGRlZDsKPiA+ID4gPiArCW5ldyA9IHZxLT5uZXh0X2F2YWlsX2lkeDsKPiA+ ID4gPiArCXZxLT5udW1fYWRkZWQgPSAwOwo+ID4gPiA+ICsKPiA+ID4gPiAgIAlzbmFwc2hvdCA9 ICoodTMyICopdnEtPnZyaW5nX3BhY2tlZC5kZXZpY2U7Cj4gPiA+ID4gKwlvZmZfd3JhcCA9IHZp cnRpbzE2X3RvX2NwdShfdnEtPnZkZXYsIHNuYXBzaG90ICYgMHhmZmZmKTsKPiA+ID4gPiAgIAlm bGFncyA9IGNwdV90b192aXJ0aW8xNihfdnEtPnZkZXYsIHNuYXBzaG90ID4+IDE2KSAmIDB4MzsK PiA+ID4gPiAgICNpZmRlZiBERUJVRwo+ID4gPiA+IEBAIC0xMDA2LDcgKzEwMTEsMTAgQEAgc3Rh dGljIGJvb2wgdmlydHF1ZXVlX2tpY2tfcHJlcGFyZV9wYWNrZWQoc3RydWN0IHZpcnRxdWV1ZSAq X3ZxKQo+ID4gPiA+ICAgCXZxLT5sYXN0X2FkZF90aW1lX3ZhbGlkID0gZmFsc2U7Cj4gPiA+ID4g ICAjZW5kaWYKPiA+ID4gPiAtCW5lZWRzX2tpY2sgPSAoZmxhZ3MgIT0gVlJJTkdfRVZFTlRfRl9E SVNBQkxFKTsKPiA+ID4gPiArCWlmIChmbGFncyA9PSBWUklOR19FVkVOVF9GX0RFU0MpCj4gPiA+ ID4gKwkJbmVlZHNfa2ljayA9IHZyaW5nX25lZWRfZXZlbnQob2ZmX3dyYXAgJiB+KDE8PDE1KSwg bmV3LCBvbGQpOwo+ID4gPiAKPiA+ID4gSSB3b25kZXIgd2hldGhlciBvciBub3QgdGhlIG1hdGgg aXMgY29ycmVjdC4gQm90aCBuZXcgYW5kIGV2ZW50IGFyZSBpbiB0aGUKPiA+ID4gdW5pdCBvZiBk ZXNjcmlwdG9yIHJpbmcgc2l6ZSwgYnV0IG9sZCBsb29rcyBub3QuCj4gPiAKPiA+IFdoYXQgdnJp bmdfbmVlZF9ldmVudCgpIGNhcmVzIGlzIHRoZSBkaXN0YW5jZSBiZXR3ZWVuCj4gPiBgbmV3YCBh bmQgYG9sZGAsIGkuZS4gdnEtPm51bV9hZGRlZC4gU28gSSB0aGluayB0aGVyZQo+ID4gaXMgbm90 aGluZyB3cm9uZyB3aXRoIGBvbGRgLiBCdXQgdGhlIGNhbGN1bGF0aW9uIG9mIHRoZQo+ID4gZGlz dGFuY2UgYmV0d2VlbiBgbmV3YCBhbmQgYGV2ZW50X2lkeGAgaXNuJ3QgcmlnaHQgd2hlbgo+ID4g YG5ld2Agd3JhcHMuIEhvdyBkbyB5b3UgdGhpbmsgYWJvdXQgdGhlIGJlbG93IGNvZGU6Cj4gPiAK PiA+IAl3cmFwX2NvdW50ZXIgPSBvZmZfd3JhcCA+PiAxNTsKPiA+IAlldmVudF9pZHggPSBvZmZf d3JhcCAmIH4oMTw8MTUpOwo+ID4gCWlmICh3cmFwX2NvdW50ZXIgIT0gdnEtPndyYXBfY291bnRl cikKPiA+IAkJZXZlbnRfaWR4IC09IHZxLT52cmluZ19wYWNrZWQubnVtOwo+ID4gCQo+ID4gCW5l ZWRzX2tpY2sgPSB2cmluZ19uZWVkX2V2ZW50KGV2ZW50X2lkeCwgbmV3LCBvbGQpOwo+IAo+IEkg c3VzcGVjdCB0aGlzIGhhY2sgd29uJ3Qgd29yayBmb3Igbm9uIHBvd2VyIG9mIDIgcmluZy4KCkFi b3ZlIGNvZGUgZG9lc24ndCByZXF1aXJlIHRoZSByaW5nIHNpemUgdG8gYmUgYSBwb3dlciBvZiAy LgoKRm9yIChfX3UxNikobmV3X2lkeCAtIG9sZCksIHdoYXQgd2Ugd2FudCB0byBnZXQgaXMgdnEt Pm51bV9hZGRlZC4KCm9sZCA9IHZxLT5uZXh0X2F2YWlsX2lkeCAtIHZxLT5udW1fYWRkZWQ7Cm5l dyA9IHZxLT5uZXh0X2F2YWlsX2lkeDsKCldoZW4gdnEtPm5leHRfYXZhaWxfaWR4ID49IHZxLT5u dW1fYWRkZWQsIGl0J3Mgb2J2aW91cyB0aGF0LAooX191MTYpKG5ld19pZHggLSBvbGQpIGlzIHZx LT5udW1fYWRkZWQuCgpBbmQgd2hlbiB2cS0+bmV4dF9hdmFpbF9pZHggPCB2cS0+bnVtX2FkZGVk LCBuZXcgd2lsbCBiZSBzbWFsbGVyCnRoYW4gb2xkIChvbGQgd2lsbCBiZSBhIGJpZyB1bnNpZ25l ZCBudW1iZXIpLCBidXQgKF9fdTE2KShuZXdfaWR4Ci0gb2xkKSBpcyBzdGlsbCB2cS0+bnVtX2Fk ZGVkLgoKRm9yIChfX3UxNikobmV3X2lkeCAtIGV2ZW50X2lkeCAtIDEpLCB3aGVuIG5ldyB3cmFw cyBhbmQgZXZlbnRfaWR4CmRvZXNuJ3Qgd3JhcCwgdGhlIG1vc3Qgc3RyYWlnaHRmb3J3YXJkIHdh eSB0byBjYWxjdWxhdGUgaXQgaXM6CihuZXcgKyB2cS0+dnJpbmdfcGFja2VkLm51bSkgLSBldmVu dF9pZHggLSAxLgoKQnV0IHdlIGNhbiBhbHNvIGNhbGN1bGF0ZSBpdCBpbiB0aGlzIHdheToKCmV2 ZW50X2lkeCAtPSB2cS0+dnJpbmdfcGFja2VkLm51bTsKKGV2ZW50X2lkeCB3aWxsIGJlIGEgYmln IHVuc2lnbmVkIG51bWJlcikKClRoZW4gKF9fdTE2KShuZXdfaWR4IC0gZXZlbnRfaWR4IC0gMSkg d2lsbCBiZSB0aGUgdmFsdWUgd2Ugd2FudC4KCkJlc3QgcmVnYXJkcywKVGl3ZWkgQmllCgo+IAo+ IAo+ID4gQmVzdCByZWdhcmRzLAo+ID4gVGl3ZWkgQmllCj4gPiAKPiA+IAo+ID4gPiAKPiA+ID4g VGhhbmtzCj4gPiA+IAo+ID4gPiA+ICsJZWxzZQo+ID4gPiA+ICsJCW5lZWRzX2tpY2sgPSAoZmxh Z3MgIT0gVlJJTkdfRVZFTlRfRl9ESVNBQkxFKTsKPiA+ID4gPiAgIAlFTkRfVVNFKHZxKTsKPiA+ ID4gPiAgIAlyZXR1cm4gbmVlZHNfa2ljazsKPiA+ID4gPiAgIH0KPiA+ID4gPiBAQCAtMTExNiw2 ICsxMTI0LDE1IEBAIHN0YXRpYyB2b2lkICp2aXJ0cXVldWVfZ2V0X2J1Zl9jdHhfcGFja2VkKHN0 cnVjdCB2aXJ0cXVldWUgKl92cSwKPiA+ID4gPiAgIAlpZiAodnEtPmxhc3RfdXNlZF9pZHggPj0g dnEtPnZyaW5nX3BhY2tlZC5udW0pCj4gPiA+ID4gICAJCXZxLT5sYXN0X3VzZWRfaWR4IC09IHZx LT52cmluZ19wYWNrZWQubnVtOwo+ID4gPiA+ICsJLyogSWYgd2UgZXhwZWN0IGFuIGludGVycnVw dCBmb3IgdGhlIG5leHQgZW50cnksIHRlbGwgaG9zdAo+ID4gPiA+ICsJICogYnkgd3JpdGluZyBl dmVudCBpbmRleCBhbmQgZmx1c2ggb3V0IHRoZSB3cml0ZSBiZWZvcmUKPiA+ID4gPiArCSAqIHRo ZSByZWFkIGluIHRoZSBuZXh0IGdldF9idWYgY2FsbC4gKi8KPiA+ID4gPiArCWlmICh2cS0+ZXZl bnRfZmxhZ3Nfc2hhZG93ID09IFZSSU5HX0VWRU5UX0ZfREVTQykKPiA+ID4gPiArCQl2aXJ0aW9f c3RvcmVfbWIodnEtPndlYWtfYmFycmllcnMsCj4gPiA+ID4gKwkJCQkmdnEtPnZyaW5nX3BhY2tl ZC5kcml2ZXItPm9mZl93cmFwLAo+ID4gPiA+ICsJCQkJY3B1X3RvX3ZpcnRpbzE2KF92cS0+dmRl diwgdnEtPmxhc3RfdXNlZF9pZHggfAo+ID4gPiA+ICsJCQkJCQkodnEtPndyYXBfY291bnRlciA8 PCAxNSkpKTsKPiA+ID4gPiArCj4gPiA+ID4gICAjaWZkZWYgREVCVUcKPiA+ID4gPiAgIAl2cS0+ bGFzdF9hZGRfdGltZV92YWxpZCA9IGZhbHNlOwo+ID4gPiA+ICAgI2VuZGlmCj4gPiA+ID4gQEAg LTExNDMsMTAgKzExNjAsMTcgQEAgc3RhdGljIHVuc2lnbmVkIHZpcnRxdWV1ZV9lbmFibGVfY2Jf cHJlcGFyZV9wYWNrZWQoc3RydWN0IHZpcnRxdWV1ZSAqX3ZxKQo+ID4gPiA+ICAgCS8qIFdlIG9w dGltaXN0aWNhbGx5IHR1cm4gYmFjayBvbiBpbnRlcnJ1cHRzLCB0aGVuIGNoZWNrIGlmIHRoZXJl IHdhcwo+ID4gPiA+ICAgCSAqIG1vcmUgdG8gZG8uICovCj4gPiA+ID4gKwkvKiBEZXBlbmRpbmcg b24gdGhlIFZJUlRJT19SSU5HX0ZfVVNFRF9FVkVOVF9JRFggZmVhdHVyZSwgd2UgbmVlZCB0bwo+ ID4gPiA+ICsJICogZWl0aGVyIGNsZWFyIHRoZSBmbGFncyBiaXQgb3IgcG9pbnQgdGhlIGV2ZW50 IGluZGV4IGF0IHRoZSBuZXh0Cj4gPiA+ID4gKwkgKiBlbnRyeS4gQWx3YXlzIHVwZGF0ZSB0aGUg ZXZlbnQgaW5kZXggdG8ga2VlcCBjb2RlIHNpbXBsZS4gKi8KPiA+ID4gPiArCj4gPiA+ID4gKwl2 cS0+dnJpbmdfcGFja2VkLmRyaXZlci0+b2ZmX3dyYXAgPSBjcHVfdG9fdmlydGlvMTYoX3ZxLT52 ZGV2LAo+ID4gPiA+ICsJCQl2cS0+bGFzdF91c2VkX2lkeCB8ICh2cS0+d3JhcF9jb3VudGVyIDw8 IDE1KSk7Cj4gPiA+ID4gICAJaWYgKHZxLT5ldmVudF9mbGFnc19zaGFkb3cgPT0gVlJJTkdfRVZF TlRfRl9ESVNBQkxFKSB7Cj4gPiA+ID4gICAJCXZpcnRpb193bWIodnEtPndlYWtfYmFycmllcnMp Owo+ID4gPiA+IC0JCXZxLT5ldmVudF9mbGFnc19zaGFkb3cgPSBWUklOR19FVkVOVF9GX0VOQUJM RTsKPiA+ID4gPiArCQl2cS0+ZXZlbnRfZmxhZ3Nfc2hhZG93ID0gdnEtPmV2ZW50ID8gVlJJTkdf RVZFTlRfRl9ERVNDIDoKPiA+ID4gPiArCQkJCQkJICAgICBWUklOR19FVkVOVF9GX0VOQUJMRTsK PiA+ID4gPiAgIAkJdnEtPnZyaW5nX3BhY2tlZC5kcml2ZXItPmZsYWdzID0gY3B1X3RvX3ZpcnRp bzE2KF92cS0+dmRldiwKPiA+ID4gPiAgIAkJCQkJCQl2cS0+ZXZlbnRfZmxhZ3Nfc2hhZG93KTsK PiA+ID4gPiAgIAl9Cj4gPiA+ID4gQEAgLTExNzIsMTUgKzExOTYsMzQgQEAgc3RhdGljIGJvb2wg dmlydHF1ZXVlX3BvbGxfcGFja2VkKHN0cnVjdCB2aXJ0cXVldWUgKl92cSwgdW5zaWduZWQgbGFz dF91c2VkX2lkeCkKPiA+ID4gPiAgIHN0YXRpYyBib29sIHZpcnRxdWV1ZV9lbmFibGVfY2JfZGVs YXllZF9wYWNrZWQoc3RydWN0IHZpcnRxdWV1ZSAqX3ZxKQo+ID4gPiA+ICAgewo+ID4gPiA+ICAg CXN0cnVjdCB2cmluZ192aXJ0cXVldWUgKnZxID0gdG9fdnZxKF92cSk7Cj4gPiA+ID4gKwl1MTYg YnVmcywgdXNlZF9pZHgsIHdyYXBfY291bnRlcjsKPiA+ID4gPiAgIAlTVEFSVF9VU0UodnEpOwo+ ID4gPiA+ICAgCS8qIFdlIG9wdGltaXN0aWNhbGx5IHR1cm4gYmFjayBvbiBpbnRlcnJ1cHRzLCB0 aGVuIGNoZWNrIGlmIHRoZXJlIHdhcwo+ID4gPiA+ICAgCSAqIG1vcmUgdG8gZG8uICovCj4gPiA+ ID4gKwkvKiBEZXBlbmRpbmcgb24gdGhlIFZJUlRJT19SSU5HX0ZfVVNFRF9FVkVOVF9JRFggZmVh dHVyZSwgd2UgbmVlZCB0bwo+ID4gPiA+ICsJICogZWl0aGVyIGNsZWFyIHRoZSBmbGFncyBiaXQg b3IgcG9pbnQgdGhlIGV2ZW50IGluZGV4IGF0IHRoZSBuZXh0Cj4gPiA+ID4gKwkgKiBlbnRyeS4g QWx3YXlzIHVwZGF0ZSB0aGUgZXZlbnQgaW5kZXggdG8ga2VlcCBjb2RlIHNpbXBsZS4gKi8KPiA+ ID4gPiArCj4gPiA+ID4gKwkvKiBUT0RPOiB0dW5lIHRoaXMgdGhyZXNob2xkICovCj4gPiA+ID4g KwlidWZzID0gKHUxNikodnEtPm5leHRfYXZhaWxfaWR4IC0gdnEtPmxhc3RfdXNlZF9pZHgpICog MyAvIDQ7Cj4gPiA+ID4gKwo+ID4gPiA+ICsJdXNlZF9pZHggPSB2cS0+bGFzdF91c2VkX2lkeCAr IGJ1ZnM7Cj4gPiA+ID4gKwl3cmFwX2NvdW50ZXIgPSB2cS0+d3JhcF9jb3VudGVyOwo+ID4gPiA+ ICsKPiA+ID4gPiArCWlmICh1c2VkX2lkeCA+PSB2cS0+dnJpbmdfcGFja2VkLm51bSkgewo+ID4g PiA+ICsJCXVzZWRfaWR4IC09IHZxLT52cmluZ19wYWNrZWQubnVtOwo+ID4gPiA+ICsJCXdyYXBf Y291bnRlciBePSAxOwo+ID4gPiA+ICsJfQo+ID4gPiA+ICsKPiA+ID4gPiArCXZxLT52cmluZ19w YWNrZWQuZHJpdmVyLT5vZmZfd3JhcCA9IGNwdV90b192aXJ0aW8xNihfdnEtPnZkZXYsCj4gPiA+ ID4gKwkJCXVzZWRfaWR4IHwgKHdyYXBfY291bnRlciA8PCAxNSkpOwo+ID4gPiA+ICAgCWlmICh2 cS0+ZXZlbnRfZmxhZ3Nfc2hhZG93ID09IFZSSU5HX0VWRU5UX0ZfRElTQUJMRSkgewo+ID4gPiA+ ICAgCQl2aXJ0aW9fd21iKHZxLT53ZWFrX2JhcnJpZXJzKTsKPiA+ID4gPiAtCQl2cS0+ZXZlbnRf ZmxhZ3Nfc2hhZG93ID0gVlJJTkdfRVZFTlRfRl9FTkFCTEU7Cj4gPiA+ID4gKwkJdnEtPmV2ZW50 X2ZsYWdzX3NoYWRvdyA9IHZxLT5ldmVudCA/IFZSSU5HX0VWRU5UX0ZfREVTQyA6Cj4gPiA+ID4g KwkJCQkJCSAgICAgVlJJTkdfRVZFTlRfRl9FTkFCTEU7Cj4gPiA+ID4gICAJCXZxLT52cmluZ19w YWNrZWQuZHJpdmVyLT5mbGFncyA9IGNwdV90b192aXJ0aW8xNihfdnEtPnZkZXYsCj4gPiA+ID4g ICAJCQkJCQkJdnEtPmV2ZW50X2ZsYWdzX3NoYWRvdyk7Cj4gPiA+ID4gICAJfQo+ID4gPiA+IEBA IC0xODIyLDggKzE4NjUsMTAgQEAgdm9pZCB2cmluZ190cmFuc3BvcnRfZmVhdHVyZXMoc3RydWN0 IHZpcnRpb19kZXZpY2UgKnZkZXYpCj4gPiA+ID4gICAJCXN3aXRjaCAoaSkgewo+ID4gPiA+ICAg CQljYXNlIFZJUlRJT19SSU5HX0ZfSU5ESVJFQ1RfREVTQzoKPiA+ID4gPiAgIAkJCWJyZWFrOwo+ ID4gPiA+ICsjaWYgMAo+ID4gPiA+ICAgCQljYXNlIFZJUlRJT19SSU5HX0ZfRVZFTlRfSURYOgo+ ID4gPiA+ICAgCQkJYnJlYWs7Cj4gPiA+ID4gKyNlbmRpZgo+ID4gPiA+ICAgCQljYXNlIFZJUlRJ T19GX1ZFUlNJT05fMToKPiA+ID4gPiAgIAkJCWJyZWFrOwo+ID4gPiA+ICAgCQljYXNlIFZJUlRJ T19GX0lPTU1VX1BMQVRGT1JNOgo+ID4gPiAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KVmlydHVhbGl6YXRpb24gbWFpbGluZyBsaXN0ClZpcnR1YWxpemF0 aW9uQGxpc3RzLmxpbnV4LWZvdW5kYXRpb24ub3JnCmh0dHBzOi8vbGlzdHMubGludXhmb3VuZGF0 aW9uLm9yZy9tYWlsbWFuL2xpc3RpbmZvL3ZpcnR1YWxpemF0aW9u