From mboxrd@z Thu Jan 1 00:00:00 1970 From: George Dunlap Subject: Re: [PATCH v2 5/7] xen: credit1: increase efficiency and scalability of load balancing. Date: Fri, 7 Apr 2017 15:38:15 +0100 Message-ID: <1568f464-29a4-6330-3902-a36f3eb62775@citrix.com> References: <149146456487.21348.8554211499146017782.stgit@Solace.fritz.box> <149146660655.21348.13071925386790562321.stgit@Solace.fritz.box> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cwV2r-0004gr-Eu for xen-devel@lists.xenproject.org; Fri, 07 Apr 2017 14:39:25 +0000 In-Reply-To: <149146660655.21348.13071925386790562321.stgit@Solace.fritz.box> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Dario Faggioli , xen-devel@lists.xenproject.org Cc: George Dunlap , Andrew Cooper , Anshul Makkar List-Id: xen-devel@lists.xenproject.org T24gMDYvMDQvMTcgMDk6MTYsIERhcmlvIEZhZ2dpb2xpIHdyb3RlOgo+IER1cmluZyBsb2FkIGJh bGFuY2luZywgd2UgY2hlY2sgdGhlIG5vbiBpZGxlIHBDUFVzIHRvCj4gc2VlIGlmIHRoZXkgaGF2 ZSBydW5uYWJsZSBidXQgbm90IHJ1bm5pbmcgdkNQVXMgdGhhdAo+IGNhbiBiZSBzdG9sZW4gYnkg YW5kIHNldCB0byBydW4gb24gY3VycmVudGx5IGlkbGUgcENQVXMuCj4gCj4gSWYgYSBwQ1BVIGhh cyBvbmx5IG9uZSBydW5uaW5nIChvciBydW5uYWJsZSkgdkNQVSwKPiB0aG91Z2gsIHdlIGRvbid0 IHdhbnQgdG8gc3RlYWwgaXQgZnJvbSB0aGVyZSwgYW5kCj4gaXQncyB0aGVyZWZvcmUgcG9pbnRs ZXNzIGJvdGhlcmluZyB3aXRoIGl0Cj4gKGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhhdCBib3Ro ZXJpbmcgbWVhbnMgdHJ5aW5nCj4gdG8gdGFrZSBpdHMgcnVucXVldWUgbG9jayEpLgo+IAo+IE9u IGxhcmdlIHN5c3RlbXMsIHdoZW4gbG9hZCBpcyBvbmx5IHNsaWdodGx5IGhpZ2hlcgo+IHRoYW4g dGhlIG51bWJlciBvZiBwQ1BVcyAoaS5lLiwgdGhlcmUgYXJlIGp1c3QgYSBmZXcKPiBtb3JlIGFj dGl2ZSB2Q1BVcyB0aGFuIHRoZSBudW1iZXIgb2YgdGhlIHBDUFVzKSwgdGhpcwo+IG1heSBtZWFu IHRoYXQ6Cj4gIC0gd2UgZ28gdGhyb3VnaCBhbGwgdGhlIHBDUFVzLAo+ICAtIGZvciBlYWNoIG9u ZSwgd2UgKHRyeSB0bykgdGFrZSBpdHMgcnVucXVldWUgbG9ja3MsCj4gIC0gd2UgZmlndXJlIG91 dCB0aGVyZSdzIGFjdHVhbGx5IG5vdGhpbmcgdG8gYmUgc3RvbGVuIQo+IAo+IFRvIG1pdGlnYXRl IHRoaXMsIHdlIGludHJvZHVjZSBhIGNvdW50ZXIgZm9yIHRoZSBudW1iZXIKPiBvZiBydW5uYWJs ZSB2Q1BVcyBvbiBlYWNoIHBDUFUuIEluIGZhY3QsIHVubGVzcyB0aGVyZQo+IHJlIGxlYXN0IDIg cnVubmFibGUgdkNQVXMgLS10eXBpY2FsbHksIG9uZSBydW5uaW5nLAo+IGFuZCB0aGUgb3RoZXJz IGluIHRoZSBydW5xdWV1ZS0tIGl0IGRvZXMgbm90IG1ha2Ugc2Vuc2UKPiB0byB0cnkgc3RlYWxp bmcgYW55dGhpbmcuCj4gCj4gc2lnbmVkLW9mZi1ieTogRGFyaW8gRmFnZ2lvbGkgPGRhcmlvLmZh Z2dpb2xpQGNpdHJpeC5jb20+Cj4gLS0tCj4gQ2M6IEdlb3JnZSBEdW5sYXAgPGdlb3JnZS5kdW5s YXBAZXUuY2l0cml4LmNvbT4KPiBDYzogQW5kcmV3IENvb3BlciA8YW5kcmV3LmNvb3BlcjNAY2l0 cml4LmNvbT4KPiBDYzogQW5zaHVsIE1ha2thciA8YW5zaHVsLm1ha2thckBjaXRyaXguY29tPgo+ IC0tLQo+IENoYW5nZXMgZnJvbSB2MjoKPiAqIGRvbid0IGNvdW50IHRoZSBpZGxlIHZDUFUgYXMg cnVubmFibGUuIFRoaXMgaXMganVzdCBjb3NtZXRpYyBhbmQgbm90IGF0IGFsbCBhCj4gICBsb2dp YyBvciBmdW5jdGlvbmwgY2hhbmdlIHdydCB2MTsKPiAqIGRvbid0IGNvdW50IGluc2lkZSBvZiBf X3J1bnFfcmVtb3ZlKCkgb3IgX19ydW5xX2luc2VydCgpLCBidXQgcHJvdmlkZQo+ICAgc3BlY2lm aWMgY291bnRpbmcgZnVuY3Rpb25zLCBhbmQgY2FsbCB0aGVtIHdoZW4gYXBwcm9wcmlhdGUuIFRo aXMgaXMgbmVjZXNzYXJ5Cj4gICB0byBhdm9pZCBzcHVyaW91cyBvdmVybG9hZGVkIHN0YXRlIHRv IGJlIHJlcG9ydGVkLCBiYXNpY2FsbHkgKmFsbCogdGhlIHRpbWUKPiAgIHRoYXQgYSBwQ1BVIGdv ZXMgdGhyb3VnaCB0aGUgc2NoZWR1bGVyIChkdWUgdG8gdGhlIGZhY3QgdGhhdCB0aGUgc2NoZWR1 bGVyCj4gICBjYWxscyBfX3J1bnFfaW5zZXJ0KCkgb24gdGhlIGN1cnJlbnQgdkNQVSk7Cj4gKiBn ZXQgcmlkIG9mIHRoZSBvdmVybG9hZGVkIGNwdW1hc2sgYW5kIG9ubHkgdXNlIHRoZSBjb3VudGVy LiBJIGFjdHVhbGx5IGRpZAo+ICAgbGlrZSB0aGUgY3B1bWFzayBzb2x1dGlvbiBiZXR0ZXIsIGJ1 dCBmb3IgdGhpcyBwdXJwb3NlLCBpdCB3YXMgb3ZlcmtpbGwuCj4gLS0tCj4gIHhlbi9jb21tb24v c2NoZWRfY3JlZGl0LmMgfCAgIDc4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKy0tLQo+ICAxIGZpbGUgY2hhbmdlZCwgNzIgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlv bnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEveGVuL2NvbW1vbi9zY2hlZF9jcmVkaXQuYyBiL3hlbi9j b21tb24vc2NoZWRfY3JlZGl0LmMKPiBpbmRleCA0OWNhYTBhLi4wOWUzMTkyIDEwMDY0NAo+IC0t LSBhL3hlbi9jb21tb24vc2NoZWRfY3JlZGl0LmMKPiArKysgYi94ZW4vY29tbW9uL3NjaGVkX2Ny ZWRpdC5jCj4gQEAgLTE3Miw2ICsxNzIsNyBAQCBzdHJ1Y3QgY3NjaGVkX3BjcHUgewo+ICAgICAg c3RydWN0IHRpbWVyIHRpY2tlcjsKPiAgICAgIHVuc2lnbmVkIGludCB0aWNrOwo+ICAgICAgdW5z aWduZWQgaW50IGlkbGVfYmlhczsKPiArICAgIHVuc2lnbmVkIGludCBucl9ydW5uYWJsZTsKPiAg fTsKPiAgCj4gIC8qCj4gQEAgLTI2Miw5ICsyNjMsMjYgQEAgc3RhdGljIGlubGluZSBib29sX3Qg aXNfcnVucV9pZGxlKHVuc2lnbmVkIGludCBjcHUpCj4gIH0KPiAgCj4gIHN0YXRpYyBpbmxpbmUg dm9pZAo+ICtpbmNfbnJfcnVubmFibGUodW5zaWduZWQgaW50IGNwdSkKPiArewo+ICsgICAgQVNT RVJUKHNwaW5faXNfbG9ja2VkKHBlcl9jcHUoc2NoZWR1bGVfZGF0YSwgY3B1KS5zY2hlZHVsZV9s b2NrKSk7Cj4gKyAgICBDU0NIRURfUENQVShjcHUpLT5ucl9ydW5uYWJsZSsrOwo+ICsKPiArfQo+ ICsKPiArc3RhdGljIGlubGluZSB2b2lkCj4gK2RlY19ucl9ydW5uYWJsZSh1bnNpZ25lZCBpbnQg Y3B1KQo+ICt7Cj4gKyAgICBBU1NFUlQoc3Bpbl9pc19sb2NrZWQocGVyX2NwdShzY2hlZHVsZV9k YXRhLCBjcHUpLnNjaGVkdWxlX2xvY2spKTsKPiArICAgIENTQ0hFRF9QQ1BVKGNwdSktPm5yX3J1 bm5hYmxlLS07Cj4gKyAgICBBU1NFUlQoQ1NDSEVEX1BDUFUoY3B1KS0+bnJfcnVubmFibGUgPj0g MCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgdm9pZAo+ICBfX3J1bnFfaW5zZXJ0KHN0cnVj dCBjc2NoZWRfdmNwdSAqc3ZjKQo+ICB7Cj4gLSAgICBjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICog Y29uc3QgcnVucSA9IFJVTlEoc3ZjLT52Y3B1LT5wcm9jZXNzb3IpOwo+ICsgICAgdW5zaWduZWQg aW50IGNwdSA9IHN2Yy0+dmNwdS0+cHJvY2Vzc29yOwo+ICsgICAgY29uc3Qgc3RydWN0IGxpc3Rf aGVhZCAqIGNvbnN0IHJ1bnEgPSBSVU5RKGNwdSk7Cj4gICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpp dGVyOwo+ICAKPiAgICAgIEJVR19PTiggX192Y3B1X29uX3J1bnEoc3ZjKSApOwo+IEBAIC02MDEs NiArNjE5LDcgQEAgaW5pdF9wZGF0YShzdHJ1Y3QgY3NjaGVkX3ByaXZhdGUgKnBydiwgc3RydWN0 IGNzY2hlZF9wY3B1ICpzcGMsIGludCBjcHUpCj4gICAgICAvKiBTdGFydCBvZmYgaWRsaW5nLi4u ICovCj4gICAgICBCVUdfT04oIWlzX2lkbGVfdmNwdShjdXJyX29uX2NwdShjcHUpKSk7Cj4gICAg ICBjcHVtYXNrX3NldF9jcHUoY3B1LCBwcnYtPmlkbGVycyk7Cj4gKyAgICBzcGMtPm5yX3J1bm5h YmxlID0gMDsKPiAgfQo+ICAKPiAgc3RhdGljIHZvaWQKPiBAQCAtMTA0Miw3ICsxMDYxLDEwIEBA IGNzY2hlZF92Y3B1X2luc2VydChjb25zdCBzdHJ1Y3Qgc2NoZWR1bGVyICpvcHMsIHN0cnVjdCB2 Y3B1ICp2YykKPiAgICAgIGxvY2sgPSB2Y3B1X3NjaGVkdWxlX2xvY2tfaXJxKHZjKTsKPiAgCj4g ICAgICBpZiAoICFfX3ZjcHVfb25fcnVucShzdmMpICYmIHZjcHVfcnVubmFibGUodmMpICYmICF2 Yy0+aXNfcnVubmluZyApCj4gKyAgICB7Cj4gICAgICAgICAgX19ydW5xX2luc2VydChzdmMpOwo+ ICsgICAgICAgIGluY19ucl9ydW5uYWJsZSh2Yy0+cHJvY2Vzc29yKTsKPiArICAgIH0KPiAgCj4g ICAgICB2Y3B1X3NjaGVkdWxlX3VubG9ja19pcnEobG9jaywgdmMpOwo+ICAKPiBAQCAtMTEwMiw3 ICsxMTI0LDEwIEBAIGNzY2hlZF92Y3B1X3NsZWVwKGNvbnN0IHN0cnVjdCBzY2hlZHVsZXIgKm9w cywgc3RydWN0IHZjcHUgKnZjKQo+ICAgICAgICAgIGNwdV9yYWlzZV9zb2Z0aXJxKGNwdSwgU0NI RURVTEVfU09GVElSUSk7Cj4gICAgICB9Cj4gICAgICBlbHNlIGlmICggX192Y3B1X29uX3J1bnEo c3ZjKSApCj4gKyAgICB7Cj4gKyAgICAgICAgZGVjX25yX3J1bm5hYmxlKGNwdSk7Cj4gICAgICAg ICAgX19ydW5xX3JlbW92ZShzdmMpOwo+ICsgICAgfQo+ICB9Cj4gIAo+ICBzdGF0aWMgdm9pZAo+ IEBAIC0xMTYzLDYgKzExODgsNyBAQCBjc2NoZWRfdmNwdV93YWtlKGNvbnN0IHN0cnVjdCBzY2hl ZHVsZXIgKm9wcywgc3RydWN0IHZjcHUgKnZjKQo+ICAKPiAgICAgIC8qIFB1dCB0aGUgVkNQVSBv biB0aGUgcnVucSBhbmQgdGlja2xlIENQVXMgKi8KPiAgICAgIF9fcnVucV9pbnNlcnQoc3ZjKTsK PiArICAgIGluY19ucl9ydW5uYWJsZSh2Yy0+cHJvY2Vzc29yKTsKPiAgICAgIF9fcnVucV90aWNr bGUoc3ZjKTsKPiAgfQo+ICAKPiBAQCAtMTY2NCw4ICsxNjkwLDEwIEBAIGNzY2hlZF9ydW5xX3N0 ZWFsKGludCBwZWVyX2NwdSwgaW50IGNwdSwgaW50IHByaSwgaW50IGJhbGFuY2Vfc3RlcCkKPiAg ICAgICAgICAgICAgU0NIRURfVkNQVV9TVEFUX0NSQU5LKHNwZWVyLCBtaWdyYXRlX3EpOwo+ICAg ICAgICAgICAgICBTQ0hFRF9TVEFUX0NSQU5LKG1pZ3JhdGVfcXVldWVkKTsKPiAgICAgICAgICAg ICAgV0FSTl9PTih2Yy0+aXNfdXJnZW50KTsKPiArICAgICAgICAgICAgZGVjX25yX3J1bm5hYmxl KHBlZXJfY3B1KTsKPiAgICAgICAgICAgICAgX19ydW5xX3JlbW92ZShzcGVlcik7Cj4gICAgICAg ICAgICAgIHZjLT5wcm9jZXNzb3IgPSBjcHU7Cj4gKyAgICAgICAgICAgIGluY19ucl9ydW5uYWJs ZShjcHUpOwo+ICAgICAgICAgICAgICByZXR1cm4gc3BlZXI7Cj4gICAgICAgICAgfQo+ICAgICAg fQo+IEBAIC0xNzIxLDcgKzE3NDksNyBAQCBjc2NoZWRfbG9hZF9iYWxhbmNlKHN0cnVjdCBjc2No ZWRfcHJpdmF0ZSAqcHJ2LCBpbnQgY3B1LAo+ICAgICAgICAgIHBlZXJfbm9kZSA9IG5vZGU7Cj4g ICAgICAgICAgZG8KPiAgICAgICAgICB7Cj4gLSAgICAgICAgICAgIC8qIEZpbmQgb3V0IHdoYXQg dGhlICFpZGxlIGFyZSBpbiB0aGlzIG5vZGUgKi8KPiArICAgICAgICAgICAgLyogU2VsZWN0IHRo ZSBwQ1BVcyBpbiB0aGlzIG5vZGUgdGhhdCBoYXZlIHdvcmsgd2UgY2FuIHN0ZWFsLiAqLwo+ICAg ICAgICAgICAgICBjcHVtYXNrX2FuZG5vdCgmd29ya2Vycywgb25saW5lLCBwcnYtPmlkbGVycyk7 Cj4gICAgICAgICAgICAgIGNwdW1hc2tfYW5kKCZ3b3JrZXJzLCAmd29ya2VycywgJm5vZGVfdG9f Y3B1bWFzayhwZWVyX25vZGUpKTsKPiAgICAgICAgICAgICAgX19jcHVtYXNrX2NsZWFyX2NwdShj cHUsICZ3b3JrZXJzKTsKPiBAQCAtMTczMSw2ICsxNzU5LDQwIEBAIGNzY2hlZF9sb2FkX2JhbGFu Y2Uoc3RydWN0IGNzY2hlZF9wcml2YXRlICpwcnYsIGludCBjcHUsCj4gICAgICAgICAgICAgICAg ICBnb3RvIG5leHRfbm9kZTsKPiAgICAgICAgICAgICAgZG8KPiAgICAgICAgICAgICAgewo+ICsg ICAgICAgICAgICAgICAgc3BpbmxvY2tfdCAqbG9jazsKPiArCj4gKyAgICAgICAgICAgICAgICAv Kgo+ICsgICAgICAgICAgICAgICAgICogSWYgdGhlcmUgaXMgb25seSBvbmUgcnVubmFibGUgdkNQ VSBvbiBwZWVyX2NwdSwgaXQgbWVhbnMKPiArICAgICAgICAgICAgICAgICAqIHRoZXJlJ3Mgbm8g b25lIHRvIGJlIHN0b2xlbiBpbiBpdHMgcnVucXVldWUsIHNvIHNraXAgaXQuCj4gKyAgICAgICAg ICAgICAgICAgKgo+ICsgICAgICAgICAgICAgICAgICogQ2hlY2tpbmcgdGhpcyB3aXRob3V0IGhv bGRpbmcgdGhlIGxvY2sgaXMgcmFjeS4uLiBCdXQgdGhhdCdzCj4gKyAgICAgICAgICAgICAgICAg KiB0aGUgd2hvbGUgcG9pbnQgb2YgdGhpcyBvcHRpbWl6YXRpb24hCj4gKyAgICAgICAgICAgICAg ICAgKgo+ICsgICAgICAgICAgICAgICAgICogSW4gbW9yZSBkZXRhaWxzOgo+ICsgICAgICAgICAg ICAgICAgICogLSBpZiB3ZSByYWNlIHdpdGggZGVjX25yX3J1bm5hYmxlKCksIHdlIG1heSB0cnkg dG8gdGFrZSB0aGUKPiArICAgICAgICAgICAgICAgICAqICAgbG9jayBhbmQgY2FsbCBjc2NoZWRf cnVucV9zdGVhbCgpIGZvciBubyByZWFzb24uIFRoaXMgaXMKPiArICAgICAgICAgICAgICAgICAq ICAgbm90IGEgZnVuY3Rpb25hbCBpc3N1ZSwgYW5kIHNob3VsZCBiZSBpbmZyZXF1ZW50IGVub3Vn aC4KPiArICAgICAgICAgICAgICAgICAqICAgQW5kIHdlIGNhbiBhdm9pZCB0aGF0IGJ5IHJlLWNo ZWNraW5nIG5yX3J1bm5hYmxlIGFmdGVyCj4gKyAgICAgICAgICAgICAgICAgKiAgIGhhdmluZyBn cmFiYmVkIHRoZSBsb2NrLCBpZiB3ZSB3YW50Owo+ICsgICAgICAgICAgICAgICAgICogLSBpZiB3 ZSByYWNlIHdpdGggaW5jX25yX3J1bm5hYmxlKCksIHdlIHNraXAgYSBwQ1BVIHRoYXQgbWF5Cj4g KyAgICAgICAgICAgICAgICAgKiAgIGhhdmUgcnVubmFibGUgdkNQVXMgaW4gaXRzIHJ1bnF1ZXVl LCBidXQgdGhhdCdzIG5vdCBhCj4gKyAgICAgICAgICAgICAgICAgKiAgIHByb2JsZW0gYmVjYXVz ZToKPiArICAgICAgICAgICAgICAgICAqICAgKyBpZiByYWNpbmcgd2l0aCBjc2NoZWRfdmNwdV9p bnNlcnQoKSBvciBjc2NoZWRfdmNwdV93YWtlKCksCj4gKyAgICAgICAgICAgICAgICAgKiAgICAg X19ydW5xX3RpY2tsZSgpIHdpbGwgYmUgY2FsbGVkIGFmdGVyd29yZHMsIHNvIHRoZSB2Q1BVCj4g KyAgICAgICAgICAgICAgICAgKiAgICAgd29uJ3QgZ2V0IHN0dWNrIGluIHRoZSBydW5xdWV1ZSBm b3IgdG9vIGxvbmc7Cj4gKyAgICAgICAgICAgICAgICAgKiAgICsgaWYgcmFjaW5nIHdpdGggY3Nj aGVkX3J1bnFfc3RlYWwoKSwgaXQgbWF5IGJlIHRoYXQgYQo+ICsgICAgICAgICAgICAgICAgICog ICAgIHZDUFUgdGhhdCB3ZSBjb3VsZCBoYXZlIHBpY2tlZCB1cCwgc3RheXMgaW4gYSBydW5xdWV1 ZQo+ICsgICAgICAgICAgICAgICAgICogICAgIHVudGlsIHNvbWVvbmUgZWxzZSB0cmllcyB0byBz dGVhbCBpdCBhZ2Fpbi4gQnV0IHRoaXMgaXMKPiArICAgICAgICAgICAgICAgICAqICAgICBubyB3 b3JzZSB0aGFuIHdoYXQgY2FuIGhhcHBlbiBhbHJlYWR5ICh3aXRob3V0IHRoaXMKPiArICAgICAg ICAgICAgICAgICAqICAgICBvcHRpbWl6YXRpb24pLCBpdCB0aGUgcENQVSB3b3VsZCBzY2hlZHVs ZSByaWdodCBhZnRlciB3ZQo+ICsgICAgICAgICAgICAgICAgICogICAgIGhhdmUgdGFrZW4gdGhl IGxvY2ssIGFuZCBoZW5jZSBibG9jayBvbiBpdC4KPiArICAgICAgICAgICAgICAgICAqLwo+ICsg ICAgICAgICAgICAgICAgaWYgKCBDU0NIRURfUENQVShwZWVyX2NwdSktPm5yX3J1bm5hYmxlIDw9 IDEgKQo+ICsgICAgICAgICAgICAgICAgewo+ICsgICAgICAgICAgICAgICAgICAgIFRSQUNFXzJE KFRSQ19DU0NIRURfU1RFQUxfQ0hFQ0ssIHBlZXJfY3B1LCAvKiBza2lwcCduICovIDApOwo+ICsg ICAgICAgICAgICAgICAgICAgIGdvdG8gbmV4dF9jcHU7Cj4gKyAgICAgICAgICAgICAgICB9Cj4g Kwo+ICAgICAgICAgICAgICAgICAgLyoKPiAgICAgICAgICAgICAgICAgICAqIEdldCBhaG9sZCBv ZiB0aGUgc2NoZWR1bGVyIGxvY2sgZm9yIHRoaXMgcGVlciBDUFUuCj4gICAgICAgICAgICAgICAg ICAgKgo+IEBAIC0xNzM4LDE0ICsxODAwLDEzIEBAIGNzY2hlZF9sb2FkX2JhbGFuY2Uoc3RydWN0 IGNzY2hlZF9wcml2YXRlICpwcnYsIGludCBjcHUsCj4gICAgICAgICAgICAgICAgICAgKiBjb3Vs ZCBjYXVzZSBhIGRlYWRsb2NrIGlmIHRoZSBwZWVyIENQVSBpcyBhbHNvIGxvYWQKPiAgICAgICAg ICAgICAgICAgICAqIGJhbGFuY2luZyBhbmQgdHJ5aW5nIHRvIGxvY2sgdGhpcyBDUFUuCj4gICAg ICAgICAgICAgICAgICAgKi8KPiAtICAgICAgICAgICAgICAgIHNwaW5sb2NrX3QgKmxvY2sgPSBw Y3B1X3NjaGVkdWxlX3RyeWxvY2socGVlcl9jcHUpOwo+ICsgICAgICAgICAgICAgICAgbG9jayA9 IHBjcHVfc2NoZWR1bGVfdHJ5bG9jayhwZWVyX2NwdSk7Cj4gICAgICAgICAgICAgICAgICBTQ0hF RF9TVEFUX0NSQU5LKHN0ZWFsX3RyeWxvY2spOwo+ICAgICAgICAgICAgICAgICAgaWYgKCAhbG9j ayApCj4gICAgICAgICAgICAgICAgICB7Cj4gICAgICAgICAgICAgICAgICAgICAgU0NIRURfU1RB VF9DUkFOSyhzdGVhbF90cnlsb2NrX2ZhaWxlZCk7Cj4gICAgICAgICAgICAgICAgICAgICAgVFJB Q0VfMkQoVFJDX0NTQ0hFRF9TVEVBTF9DSEVDSywgcGVlcl9jcHUsIC8qIHNraXBwJ24gKi8gMCk7 Cj4gLSAgICAgICAgICAgICAgICAgICAgcGVlcl9jcHUgPSBjcHVtYXNrX2N5Y2xlKHBlZXJfY3B1 LCAmd29ya2Vycyk7Cj4gLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cj4gKyAgICAgICAg ICAgICAgICAgICAgZ290byBuZXh0X2NwdTsKCldhaXQgLS0gZG9lcyB0aGlzIG1lYW4gdGhhdCBi ZWZvcmUgdGhpcyBwYXRjaCwgdGhpcyBlZmZlY3RpdmVseQpidXN5LXdhaXRlZCB1bnRpbCBwZWVy X2NwdSB3YXMgYWN0dWFsbHkgZnJlZSAoc2luY2UgcGVlcl9jcHUgd2FzIG5ldmVyCmluY3JlbWVu dGVkKT8KCkkgbGlrZSB0aGUgaWRlYSBpbiBnZW5lcmFsLCBidXQgSSdtIG5vdCBhIGZhbiBvZiB0 aGUgY3VycmVudCB3YXkgb2YKZG9pbmcgdGhlIGFjY291bnRpbmcgLS0gaXQgc2VlbXMgbGlrZSB0 b28gbWFueSBzcGVjaWFsIGNhc2VzLiAgTGV0IG1lCmhhdmUgYSB0aGluayBhYm91dCB0aGlzIGFu ZCBjb21lIGJhY2sgdG8gaXQuCgogLUdlb3JnZQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxp c3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=