From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jason Wang Subject: Re: [PATCH RFC 2/2] virtio_ring: support packed ring Date: Fri, 16 Mar 2018 19:36:47 +0800 Message-ID: <094ca28b-d8af-bf7a-ea7e-0d0bf7518bda@redhat.com> References: <20180223111801.15240-1-tiwei.bie@intel.com> <20180223111801.15240-3-tiwei.bie@intel.com> <8f73267a-e20e-de64-d8e0-3fd608dbf368@redhat.com> <20180316061047.o2xdyuqhak3mzjyw@debian> <0a0ecf42-8f7f-9387-8ca4-cb65d0835b56@redhat.com> <20180316074028.lun2jy45qqnfeymw@debian> <02a3da02-8226-ba4e-1b47-d25755b2c429@redhat.com> <20180316100413.vtqwatregzrmhvt3@debian> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Cc: mst@redhat.com, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, virtualization@lists.linux-foundation.org, wexu@redhat.com To: Tiwei Bie Return-path: In-Reply-To: <20180316100413.vtqwatregzrmhvt3@debian> 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 List-Id: netdev.vger.kernel.org CgpPbiAyMDE45bm0MDPmnIgxNuaXpSAxODowNCwgVGl3ZWkgQmllIHdyb3RlOgo+IE9uIEZyaSwg TWFyIDE2LCAyMDE4IGF0IDA0OjM0OjI4UE0gKzA4MDAsIEphc29uIFdhbmcgd3JvdGU6Cj4+IE9u IDIwMTjlubQwM+aciDE25pelIDE1OjQwLCBUaXdlaSBCaWUgd3JvdGU6Cj4+PiBPbiBGcmksIE1h ciAxNiwgMjAxOCBhdCAwMjo0NDoxMlBNICswODAwLCBKYXNvbiBXYW5nIHdyb3RlOgo+Pj4+IE9u IDIwMTjlubQwM+aciDE25pelIDE0OjEwLCBUaXdlaSBCaWUgd3JvdGU6Cj4+Pj4+IE9uIEZyaSwg TWFyIDE2LCAyMDE4IGF0IDEyOjAzOjI1UE0gKzA4MDAsIEphc29uIFdhbmcgd3JvdGU6Cj4+Pj4+ PiBPbiAyMDE45bm0MDLmnIgyM+aXpSAxOToxOCwgVGl3ZWkgQmllIHdyb3RlOgo+Pj4+Pj4+IFNp Z25lZC1vZmYtYnk6IFRpd2VpIEJpZSA8dGl3ZWkuYmllQGludGVsLmNvbT4KPj4+Pj4+PiAtLS0K Pj4+Pj4+PiAgICAgIGRyaXZlcnMvdmlydGlvL3ZpcnRpb19yaW5nLmMgfCA2OTkgKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLQo+Pj4+Pj4+ICAgICAgaW5jbHVkZS9s aW51eC92aXJ0aW9fcmluZy5oICB8ICAgOCArLQo+Pj4+Pj4+ICAgICAgMiBmaWxlcyBjaGFuZ2Vk LCA2MTggaW5zZXJ0aW9ucygrKSwgODkgZGVsZXRpb25zKC0pCj4+PgoKWy4uLl0KCj4+Pj4+Pj4g KwkJfQo+Pj4+Pj4+ICsJfQo+Pj4+Pj4+ICsJZm9yICg7IG4gPCAob3V0X3NncyArIGluX3Nncyk7 IG4rKykgewo+Pj4+Pj4+ICsJCWZvciAoc2cgPSBzZ3Nbbl07IHNnOyBzZyA9IHNnX25leHQoc2cp KSB7Cj4+Pj4+Pj4gKwkJCWRtYV9hZGRyX3QgYWRkciA9IHZyaW5nX21hcF9vbmVfc2codnEsIHNn LCBETUFfRlJPTV9ERVZJQ0UpOwo+Pj4+Pj4+ICsJCQlpZiAodnJpbmdfbWFwcGluZ19lcnJvcih2 cSwgYWRkcikpCj4+Pj4+Pj4gKwkJCQlnb3RvIHVubWFwX3JlbGVhc2U7Cj4+Pj4+Pj4gKwo+Pj4+ Pj4+ICsJCQlmbGFncyA9IGNwdV90b192aXJ0aW8xNihfdnEtPnZkZXYsIFZSSU5HX0RFU0NfRl9O RVhUIHwKPj4+Pj4+PiArCQkJCQlWUklOR19ERVNDX0ZfV1JJVEUgfAo+Pj4+Pj4+ICsJCQkJCVZS SU5HX0RFU0NfRl9BVkFJTCh2cS0+d3JhcF9jb3VudGVyKSB8Cj4+Pj4+Pj4gKwkJCQkJVlJJTkdf REVTQ19GX1VTRUQoIXZxLT53cmFwX2NvdW50ZXIpKTsKPj4+Pj4+PiArCQkJaWYgKCFpbmRpcmVj dCAmJiBpID09IGhlYWQpCj4+Pj4+Pj4gKwkJCQloZWFkX2ZsYWdzID0gZmxhZ3M7Cj4+Pj4+Pj4g KwkJCWVsc2UKPj4+Pj4+PiArCQkJCWRlc2NbaV0uZmxhZ3MgPSBmbGFnczsKPj4+Pj4+PiArCj4+ Pj4+Pj4gKwkJCWRlc2NbaV0uYWRkciA9IGNwdV90b192aXJ0aW82NChfdnEtPnZkZXYsIGFkZHIp Owo+Pj4+Pj4+ICsJCQlkZXNjW2ldLmxlbiA9IGNwdV90b192aXJ0aW8zMihfdnEtPnZkZXYsIHNn LT5sZW5ndGgpOwo+Pj4+Pj4+ICsJCQlkZXNjW2ldLmlkID0gY3B1X3RvX3ZpcnRpbzMyKF92cS0+ dmRldiwgaGVhZCk7Cj4+Pj4+Pj4gKwkJCXByZXYgPSBpOwo+Pj4+Pj4+ICsJCQlpKys7Cj4+Pj4+ Pj4gKwkJCWlmICghaW5kaXJlY3QgJiYgaSA+PSB2cS0+dnJpbmdfcGFja2VkLm51bSkgewo+Pj4+ Pj4+ICsJCQkJaSA9IDA7Cj4+Pj4+Pj4gKwkJCQl2cS0+d3JhcF9jb3VudGVyIF49IDE7Cj4+Pj4+ Pj4gKwkJCX0KPj4+Pj4+PiArCQl9Cj4+Pj4+Pj4gKwl9Cj4+Pj4+Pj4gKwkvKiBMYXN0IG9uZSBk b2Vzbid0IGNvbnRpbnVlLiAqLwo+Pj4+Pj4+ICsJaWYgKCFpbmRpcmVjdCAmJiAoaGVhZCArIDEp ICUgdnEtPnZyaW5nX3BhY2tlZC5udW0gPT0gaSkKPj4+Pj4+PiArCQloZWFkX2ZsYWdzICY9IGNw dV90b192aXJ0aW8xNihfdnEtPnZkZXYsIH5WUklOR19ERVNDX0ZfTkVYVCk7Cj4+Pj4+PiBJIGNh bid0IGdldCB0aGUgd2h5IHdlIG5lZWQgdGhpcyBoZXJlLgo+Pj4+PiBJZiBvbmx5IG9uZSBkZXNj IGlzIHVzZWQsIHdlIHdpbGwgbmVlZCB0byBjbGVhciB0aGUKPj4+Pj4gVlJJTkdfREVTQ19GX05F WFQgZmxhZyBmcm9tIHRoZSBoZWFkX2ZsYWdzLgo+Pj4+IFllcywgSSBtZWFudCB3aHkgZm9sbG93 aW5nIGRlc2NbcHJldl0uZmxhZ3Mgd29uJ3Qgd29yayBmb3IgdGhpcz8KPj4+IEJlY2F1c2UgdGhl IHVwZGF0ZSBvZiBkZXNjW2hlYWRdLmZsYWdzIChpbiBhYm92ZSBjYXNlLAo+Pj4gcHJldiA9PSBo ZWFkKSBoYXMgYmVlbiBkZWxheWVkLiBUaGUgZmxhZ3MgaXMgc2F2ZWQgaW4KPj4+IGhlYWRfZmxh Z3MuCj4+IE9rLCBidXQgbGV0J3MgdHJ5IHRvIGF2b2lkIG1vZHVsYXIgaGVyZSBlLmcgdHJhY2tp bmcgdGhlIG51bWJlciBvZiBzZ3MgaW4gYQo+PiBjb3VudGVyLgo+Pgo+PiBBbmQgSSBzZWUgbG90 cyBvZiBkdXBsaWNhdGlvbiBpbiB0aGUgYWJvdmUgdHdvIGxvb3BzLCBJIGJlbGlldmUgd2UgY2Fu IHVuaWZ5Cj4+IHRoZW0gd2l0aCBhIGEgc2luZ2xlIGxvb3AuIHRoZSBvbmx5IGRpZmZlcmVuY2Ug aXMgZG1hIGRpcmVjdGlvbiBhbmQgd3JpdGUKPj4gZmxhZy4KPiBUaGUgYWJvdmUgaW1wbGVtZW50 YXRpb24gZm9yIHBhY2tlZCByaW5nIGlzIGJhc2ljYWxseQo+IGFuIG1pcnJvciBvZiB0aGUgZXhp c3RpbmcgaW1wbGVtZW50YXRpb24gaW4gc3BsaXQgcmluZwo+IGFzIEkgd2FudCB0byBrZWVwIHRo ZSBjb2Rpbmcgc3R5bGUgY29uc2lzdGVudC4gQmVsb3cKPiBpcyB0aGUgY29ycmVzcG9uZGluZyBj b2RlIGluIHNwbGl0IHJpbmc6Cj4KPiBzdGF0aWMgaW5saW5lIGludCB2aXJ0cXVldWVfYWRkKHN0 cnVjdCB2aXJ0cXVldWUgKl92cSwKPiAJCQkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ3NbXSwKPiAJ CQkJdW5zaWduZWQgaW50IHRvdGFsX3NnLAo+IAkJCQl1bnNpZ25lZCBpbnQgb3V0X3NncywKPiAJ CQkJdW5zaWduZWQgaW50IGluX3NncywKPiAJCQkJdm9pZCAqZGF0YSwKPiAJCQkJdm9pZCAqY3R4 LAo+IAkJCQlnZnBfdCBnZnApCj4gewo+IAkuLi4uLi4KPgo+IAlmb3IgKG4gPSAwOyBuIDwgb3V0 X3NnczsgbisrKSB7Cj4gCQlmb3IgKHNnID0gc2dzW25dOyBzZzsgc2cgPSBzZ19uZXh0KHNnKSkg ewo+IAkJCWRtYV9hZGRyX3QgYWRkciA9IHZyaW5nX21hcF9vbmVfc2codnEsIHNnLCBETUFfVE9f REVWSUNFKTsKPiAJCQlpZiAodnJpbmdfbWFwcGluZ19lcnJvcih2cSwgYWRkcikpCj4gCQkJCWdv dG8gdW5tYXBfcmVsZWFzZTsKPgo+IAkJCWRlc2NbaV0uZmxhZ3MgPSBjcHVfdG9fdmlydGlvMTYo X3ZxLT52ZGV2LCBWUklOR19ERVNDX0ZfTkVYVCk7Cj4gCQkJZGVzY1tpXS5hZGRyID0gY3B1X3Rv X3ZpcnRpbzY0KF92cS0+dmRldiwgYWRkcik7Cj4gCQkJZGVzY1tpXS5sZW4gPSBjcHVfdG9fdmly dGlvMzIoX3ZxLT52ZGV2LCBzZy0+bGVuZ3RoKTsKPiAJCQlwcmV2ID0gaTsKPiAJCQlpID0gdmly dGlvMTZfdG9fY3B1KF92cS0+dmRldiwgZGVzY1tpXS5uZXh0KTsKPiAJCX0KPiAJfQo+IAlmb3Ig KDsgbiA8IChvdXRfc2dzICsgaW5fc2dzKTsgbisrKSB7Cj4gCQlmb3IgKHNnID0gc2dzW25dOyBz Zzsgc2cgPSBzZ19uZXh0KHNnKSkgewo+IAkJCWRtYV9hZGRyX3QgYWRkciA9IHZyaW5nX21hcF9v bmVfc2codnEsIHNnLCBETUFfRlJPTV9ERVZJQ0UpOwo+IAkJCWlmICh2cmluZ19tYXBwaW5nX2Vy cm9yKHZxLCBhZGRyKSkKPiAJCQkJZ290byB1bm1hcF9yZWxlYXNlOwo+Cj4gCQkJZGVzY1tpXS5m bGFncyA9IGNwdV90b192aXJ0aW8xNihfdnEtPnZkZXYsIFZSSU5HX0RFU0NfRl9ORVhUIHwgVlJJ TkdfREVTQ19GX1dSSVRFKTsKPiAJCQlkZXNjW2ldLmFkZHIgPSBjcHVfdG9fdmlydGlvNjQoX3Zx LT52ZGV2LCBhZGRyKTsKPiAJCQlkZXNjW2ldLmxlbiA9IGNwdV90b192aXJ0aW8zMihfdnEtPnZk ZXYsIHNnLT5sZW5ndGgpOwo+IAkJCXByZXYgPSBpOwo+IAkJCWkgPSB2aXJ0aW8xNl90b19jcHUo X3ZxLT52ZGV2LCBkZXNjW2ldLm5leHQpOwo+IAkJfQo+IAl9Cj4KPiAJLi4uLi4uCj4gfQoKVGhl cmUncyBubyBuZWVkIGZvciBzdWNoIGNvbnNpc3RlbmN5IGVzcGVjaWFsbHkgY29uc2lkZXIgaXQn cyBhIG5ldyBraW5kIApvZiByaW5nLiBBbnl3YXksIHlvdSBjYW4gc3RpY2sgdG8gaXQuCgpbLi4u XQoKPj4+Pj4+PiArCX0gZWxzZQo+Pj4+Pj4+ICsJCXZxLT5mcmVlX2hlYWQgPSBpOwo+Pj4+Pj4g SUQgaXMgb25seSB2YWxpZCBpbiB0aGUgbGFzdCBkZXNjcmlwdG9yIGluIHRoZSBsaXN0LCBzbyBo ZWFkICsgMSBzaG91bGQgYmUKPj4+Pj4+IG9rIHRvbz8KPj4+Pj4gSSBkb24ndCByZWFsbHkgZ2V0 IHlvdXIgcG9pbnQuIFRoZSB2cS0+ZnJlZV9oZWFkIHN0b3Jlcwo+Pj4+PiB0aGUgaW5kZXggb2Yg dGhlIG5leHQgYXZhaWwgZGVzYy4KPj4+PiBJIHRoaW5rIEkgZ2V0IHlvdXIgaWRlYSBub3csIGZy ZWVfaGVhZCBoYXMgdHdvIG1lYW5pbmdzOgo+Pj4+Cj4+Pj4gLSBuZXh0IGF2YWlsIGluZGV4Cj4+ Pj4gLSBidWZmZXIgaWQKPj4+IEluIG15IGRlc2lnbiwgZnJlZV9oZWFkIGlzIGp1c3QgdGhlIGlu ZGV4IG9mIHRoZSBuZXh0Cj4+PiBhdmFpbCBkZXNjLgo+Pj4KPj4+IERyaXZlciBjYW4gc2V0IGFu eXRoaW5nIHRvIGJ1ZmZlciBJRC4KPj4gVGhlbiB5b3UgbmVlZCBhbm90aGVyIG1ldGhvZCB0byB0 cmFjayBpZCB0byBjb250ZXh0IGUuZyBoYXNoaW5nLgo+IEkga2VlcCB0aGUgY29udGV4dCBpbiBk ZXNjX3N0YXRlW2Rlc2NfaWR4XS4gU28gdGhlcmUgaXMKPiBubyBleHRyYSBtZXRob2QgbmVlZGVk IHRvIHRyYWNrIHRoZSBjb250ZXh0LgoKV2VsbCwgaXQgd29ya3MgZm9yIHRoaXMgcGF0Y2ggYnV0 IG15IHJlcGx5IHdhcyBmb3IgInNldCBhbnl0aGluZyB0byAKYnVmZmVyIElEIi4gVGhlIHNpemUg b2YgZGVzY19zdGF0ZSBpcyBsaW1pdGVkLCBzbyBpbiBmYWN0IHlvdSBjYW4ndCB1c2UgCmEgdmFs dWUgZ3JlYXRlciB0aGFuIHZxLm51bS4KCgo+CgpbLi4uXQoKPj4gQEAgLTEwOTYsMTcgKzE1OTks MjEgQEAgc3RydWN0IHZpcnRxdWV1ZSAqdnJpbmdfY3JlYXRlX3ZpcnRxdWV1ZSgKPj4+Pj4+PiAg ICAgIAlpZiAoIXF1ZXVlKSB7Cj4+Pj4+Pj4gICAgICAJCS8qIFRyeSB0byBnZXQgYSBzaW5nbGUg cGFnZS4gWW91IGFyZSBteSBvbmx5IGhvcGUhICovCj4+Pj4+Pj4gLQkJcXVldWUgPSB2cmluZ19h bGxvY19xdWV1ZSh2ZGV2LCB2cmluZ19zaXplKG51bSwgdnJpbmdfYWxpZ24pLAo+Pj4+Pj4+ICsJ CXF1ZXVlID0gdnJpbmdfYWxsb2NfcXVldWUodmRldiwgX192cmluZ19zaXplKG51bSwgdnJpbmdf YWxpZ24sCj4+Pj4+Pj4gKwkJCQkJCQkgICAgIHBhY2tlZCksCj4+Pj4+Pj4gICAgICAJCQkJCSAg JmRtYV9hZGRyLCBHRlBfS0VSTkVMfF9fR0ZQX1pFUk8pOwo+Pj4+Pj4+ICAgICAgCX0KPj4+Pj4+ PiAgICAgIAlpZiAoIXF1ZXVlKQo+Pj4+Pj4+ICAgICAgCQlyZXR1cm4gTlVMTDsKPj4+Pj4+PiAt CXF1ZXVlX3NpemVfaW5fYnl0ZXMgPSB2cmluZ19zaXplKG51bSwgdnJpbmdfYWxpZ24pOwo+Pj4+ Pj4+IC0JdnJpbmdfaW5pdCgmdnJpbmcsIG51bSwgcXVldWUsIHZyaW5nX2FsaWduKTsKPj4+Pj4+ PiArCXF1ZXVlX3NpemVfaW5fYnl0ZXMgPSBfX3ZyaW5nX3NpemUobnVtLCB2cmluZ19hbGlnbiwg cGFja2VkKTsKPj4+Pj4+PiArCWlmIChwYWNrZWQpCj4+Pj4+Pj4gKwkJdnJpbmdfcGFja2VkX2lu aXQoJnZyaW5nLnZyaW5nX3BhY2tlZCwgbnVtLCBxdWV1ZSwgdnJpbmdfYWxpZ24pOwo+Pj4+Pj4+ ICsJZWxzZQo+Pj4+Pj4+ICsJCXZyaW5nX2luaXQoJnZyaW5nLnZyaW5nX3NwbGl0LCBudW0sIHF1 ZXVlLCB2cmluZ19hbGlnbik7Cj4+Pj4+PiBMZXQncyByZW5hbWUgdnJpbmdfaW5pdCB0byB2cmlu Z19pbml0X3NwbGl0KCkgbGlrZSBvdGhlciBoZWxwZXJzPwo+Pj4+PiBUaGUgdnJpbmdfaW5pdCgp IGlzIGEgcHVibGljIEFQSSBpbiBpbmNsdWRlL3VhcGkvbGludXgvdmlydGlvX3JpbmcuaC4KPj4+ Pj4gSSBkb24ndCB0aGluayB3ZSBjYW4gcmVuYW1lIGl0Lgo+Pj4+IEkgc2VlLCB0aGVuIHRoaXMg bmVlZCBtb3JlIHRob3VnaHRzIHRvIHVuaWZ5IHRoZSBBUEkuCj4+PiBNeSB0aG91Z2h0IGlzIHRv IGtlZXAgdGhlIG9sZCBBUEkgYXMgaXMsIGFuZCBpbnRyb2R1Y2UKPj4+IG5ldyB0eXBlcyBhbmQg aGVscGVycyBmb3IgcGFja2VkIHJpbmcuCj4+IEkgYWRtaXQgaXQncyBub3QgYSBmYXVsdCBvZiB0 aGlzIHBhdGNoLiBCdXQgd2UnZCBiZXR0ZXIgdGhpbmsgb2YgdGhpcyBpbiB0aGUKPj4gZnV0dXJl LCBjb25zaWRlciB3ZSBtYXkgaGF2ZSBuZXcga2luZHMgb2YgcmluZy4KPj4KPj4+IE1vcmUgZGV0 YWlscyBjYW4gYmUgZm91bmQgaW4gdGhpcyBwYXRjaDoKPj4+IGh0dHBzOi8vbGttbC5vcmcvbGtt bC8yMDE4LzIvMjMvMjQzCj4+PiAoUFMuIFRoZSB0eXBlIHdoaWNoIGhhcyBiaXQgZmllbGRzIGlz IGp1c3QgZm9yIHJlZmVyZW5jZSwKPj4+ICAgIGFuZCB3aWxsIGJlIGNoYW5nZWQgaW4gbmV4dCB2 ZXJzaW9uLikKPj4+Cj4+PiBEbyB5b3UgaGF2ZSBhbnkgb3RoZXIgc3VnZ2VzdGlvbnM/Cj4+IE5v Lgo+IEhtbS4uIFNvcnJ5LCBJIGRpZG4ndCBkZXNjcmliZSBteSBxdWVzdGlvbiB3ZWxsLgo+IEkg bWVhbiBkbyB5b3UgaGF2ZSBhbnkgc3VnZ2VzdGlvbnMgYWJvdXQgdGhlIEFQSQo+IGRlc2lnbiBm b3IgcGFja2VkIHJpbmcgaW4gdWFwaSBoZWFkZXI/IEN1cnJlbnRseQo+IEkgaW50cm9kdWNlZCBi ZWxvdyB0d28gbmV3IGhlbHBlcnM6Cj4KPiBzdGF0aWMgaW5saW5lIHZvaWQgdnJpbmdfcGFja2Vk X2luaXQoc3RydWN0IHZyaW5nX3BhY2tlZCAqdnIsIHVuc2lnbmVkIGludCBudW0sCj4gCQkJCSAg ICAgdm9pZCAqcCwgdW5zaWduZWQgbG9uZyBhbGlnbik7Cj4gc3RhdGljIGlubGluZSB1bnNpZ25l ZCB2cmluZ19wYWNrZWRfc2l6ZSh1bnNpZ25lZCBpbnQgbnVtLCB1bnNpZ25lZCBsb25nIGFsaWdu KTsKPgo+IFdoZW4gbmV3IHJpbmdzIGFyZSBpbnRyb2R1Y2VkIGluIHRoZSBmdXR1cmUsIGFib3Zl Cj4gaGVscGVycyBjYW4ndCBiZSByZXVzZWQuIE1heWJlIHdlIHNob3VsZCBtYWtlIHRoZQo+IGhl bHBlcnMgYmUgYWJsZSB0byBkZXRlcm1pbmUgdGhlIHJpbmcgdHlwZT8KCkxldCdzIHdhaXQgZm9y IE1pY2hhZWwncyBjb21tZW50IGhlcmUuIEdlbmVyYWxseSwgSSBmYWlsIHRvIHVuZGVyc3RhbmQg CndoeSB2cmluZ19pbml0KCkgYmVjb21lIGEgcGFydCBvZiB1YXBpLiBHaXQgZ3JlcCBzaG93cyB0 aGUgb25seSB1c2UgCmNhc2VzIGFyZSB2aXJ0aW9fdGVzdC92cmluZ2hfdGVzdC4KClRoYW5rcwoK Pgo+IEJlc3QgcmVnYXJkcywKPiBUaXdlaSBCaWUKPgo+PiBUaGFua3MKPj4KPj4+IEJlc3QgcmVn YXJkcywKPj4+IFRpd2VpIEJpZQo+Pj4KPj4+Pj4+PiAtCXZxID0gX192cmluZ19uZXdfdmlydHF1 ZXVlKGluZGV4LCB2cmluZywgdmRldiwgd2Vha19iYXJyaWVycywgY29udGV4dCwKPj4+Pj4+PiAt CQkJCSAgIG5vdGlmeSwgY2FsbGJhY2ssIG5hbWUpOwo+Pj4+Pj4+ICsJdnEgPSBfX3ZyaW5nX25l d192aXJ0cXVldWUoaW5kZXgsIHZyaW5nLCBwYWNrZWQsIHZkZXYsIHdlYWtfYmFycmllcnMsCj4+ Pj4+Pj4gKwkJCQkgICBjb250ZXh0LCBub3RpZnksIGNhbGxiYWNrLCBuYW1lKTsKPj4+Pj4+PiAg ICAgIAlpZiAoIXZxKSB7Cj4+Pj4+Pj4gICAgICAJCXZyaW5nX2ZyZWVfcXVldWUodmRldiwgcXVl dWVfc2l6ZV9pbl9ieXRlcywgcXVldWUsCj4+Pj4+Pj4gICAgICAJCQkJIGRtYV9hZGRyKTsKPj4+ IFsuLi5dCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpW aXJ0dWFsaXphdGlvbiBtYWlsaW5nIGxpc3QKVmlydHVhbGl6YXRpb25AbGlzdHMubGludXgtZm91 bmRhdGlvbi5vcmcKaHR0cHM6Ly9saXN0cy5saW51eGZvdW5kYXRpb24ub3JnL21haWxtYW4vbGlz dGluZm8vdmlydHVhbGl6YXRpb24=