From mboxrd@z Thu Jan 1 00:00:00 1970 From: George Dunlap Subject: Re: [PATCH 06/24] xen: credit2: implement yield() Date: Tue, 20 Sep 2016 14:37:51 +0100 Message-ID: <62599411-b72c-9009-f955-39f3bb03056d@citrix.com> References: <147145358844.25877.7490417583264534196.stgit@Solace.fritz.box> <147145429544.25877.17160453823324324872.stgit@Solace.fritz.box> <05754315-a448-13ae-7ec4-359b2342d675@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bmLFJ-00042b-Lz for xen-devel@lists.xenproject.org; Tue, 20 Sep 2016 13:38:01 +0000 In-Reply-To: <05754315-a448-13ae-7ec4-359b2342d675@citrix.com> 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 , Jan Beulich List-Id: xen-devel@lists.xenproject.org T24gMjAvMDkvMTYgMTQ6MjUsIEdlb3JnZSBEdW5sYXAgd3JvdGU6Cj4gT24gMTcvMDgvMTYgMTg6 MTgsIERhcmlvIEZhZ2dpb2xpIHdyb3RlOgo+PiBXaGVuIGEgdmNwdSBleHBsaWNpdGx5IHlpZWxk cyBpdCBpcyB1c3VhbGx5IGdpdmluZwo+PiB1cyBhbiBhZHZpY2Ugb2YgImxldCBzb21lb25lIGVs c2UgcnVuIGFuZCBjb21lIGJhY2sKPj4gdG8gbWUgaW4gYSBiaXQuIgo+Pgo+PiBDcmVkaXQyIGlz bid0LCBzbyBmYXIsIGRvaW5nIGFueXRoaW5nIHdoZW4gYSB2Y3B1Cj4+IHlpZWxkcywgd2hpY2gg bWVhbnMgYW4geWllbGQgaXMgYmFzaWNhbGx5IGEgTk9QICh3ZWxsLAo+PiBhY3R1YWxseSwgaXQn cyBwdXJlIG92ZXJoZWFkLCBhcyBpdCBjYXVzZXMgdGhlIHNjaGVkdWxlcgo+PiBraWNrIGluLCBi dXQgdGhlIHJlc3VsdCBpcyAtLWF0IGxlYXN0IDk5JSBvZiB0aGUgdGltZS0tCj4+IHRoYXQgdGhl IHZlcnkgc2FtZSB2Y3B1IHRoYXQgeWllbGRlZCBjb250aW51ZXMgdG8gcnVuKS4KPj4KPj4gSW1w bGVtZW50IGEgInByZWVtcHQgYmlhcyIsIHRvIGJlIGFwcGxpZWQgdG8geWllbGRpbmcKPj4gdmNw dXMuIEJhc2ljYWxseSB3aGVuIGV2YWx1YXRpbmcgd2hhdCB2Y3B1IHRvIHJ1biBuZXh0LAo+PiBp ZiBhIHZjcHUgdGhhdCBoYXMganVzdCB5aWVsZGVkIGlzIGVuY291bnRlcmVkLCB3ZSBnaXZlCj4+ IGl0IGEgY3JlZGl0IHBlbmFsdHksIGFuZCBjaGVjayB3aGV0aGVyIHRoZXJlIGlzIGFueW9uZQo+ PiBlbHNlIHRoYXQgd291bGQgYmV0dGVyIHRha2Ugb3ZlciB0aGUgY3B1IChvZiBjb3Vyc2UsCj4+ IGlmIHRoZXJlIGlzbid0IHRoZSB5aWVsZGluZyB2Y3B1IHdpbGwgY29udGludWUpLgo+Pgo+PiBU aGUgdmFsdWUgb2YgdGhpcyBiaWFzIGNhbiBiZSBjb25maWd1cmVkIHdpdGggYSBib290Cj4+IHRp bWUgcGFyYW1ldGVyLCBhbmQgdGhlIGRlZmF1bHQgaXMgc2V0IHRvIDEgbXMuCj4+Cj4+IEFsc28s IGFkZCBhbiB5aWVsZCBwZXJmb3JtYW5jZSBjb3VudGVyLCBhbmQgZml4IHRoZQo+PiBzdHlsZSBv ZiBhIGNvdXBsZSBvZiBjb21tZW50cy4KPj4KPj4gU2lnbmVkLW9mZi1ieTogRGFyaW8gRmFnZ2lv bGkgPGRhcmlvLmZhZ2dpb2xpQGNpdHJpeC5jb20+Cj4+IC0tLQo+PiBDYzogR2VvcmdlIER1bmxh cCA8Z2VvcmdlLmR1bmxhcEBldS5jaXRyaXguY29tPgo+PiBDYzogQW5zaHVsIE1ha2thciA8YW5z aHVsLm1ha2thckBjaXRyaXguY29tPgo+PiBDYzogSmFuIEJldWxpY2ggPGpiZXVsaWNoQHN1c2Uu Y29tPgo+PiBDYzogQW5kcmV3IENvb3BlciA8YW5kcmV3LmNvb3BlcjNAY2l0cml4LmNvbT4KPj4g LS0tCj4+IE5vdGUgdGhhdCB0aGlzICpvbmx5KiBjb25zaWRlciB0aGUgYmlhcyBkdXJpbmcgdGhl IHZlcnkgc2NoZWR1bGluZyBkZWNpc2lvbgo+PiB0aGF0IHJldHVsdHMgZnJvbSB0aGUgdmNwdSBj YWxsaW5nIHlpZWxkLiBBZnRlciB0aGF0LCB0aGUgX19DU0ZMQUdfdmNwdV95aWVsZAo+PiBmbGFn IGlzIHJlc2V0LCBhbmQgZHVyaW5nIGFsbCBmdXJ1dGUgc2NoZWR1bGluZyBkZWNpc2lvbnMsIHRo ZSB2Y3B1IHdpbGwKPj4gY29tcGV0ZSB3aXRoIHRoZSBvdGhlciBvbmVzIHdpdGggaXRzIG93biBh bW91bnQgb2YgY3JlZGl0cy4KPj4KPj4gQWx0ZXJuYXRpdmVseSwgd2UgY2FuIGFjdHVhbGx5IF9z dWJ0cmFjdF8gc29tZSBjcmVkaXRzIHRvIGEgeWllbGRpbmcgdmNwdS4KPj4gVGhhdCB3aWxsIHNv cnQgb2YgbWFrZSB0aGUgZWZmZWN0IG9mIGEgY2FsbCB0byB5aWVsZCBsYXN0IGluIHRpbWUuCj4+ Cj4+IEknbSBub3Qgc3VyZSB3aGljaCBwYXRoIGlzIGJlc3QuIFBlcnNvbmFsbHksIEkgbGlrZSB0 aGUgc3VidHJhY3QgYXBwcm9hY2gKPj4gKHBlcmhhcHMsIHdpdGggYSBzbWFsbGVyIGJpYXMgdGhh biAxbXMpLCBidXQgSSB0aGluayB0aGUgIm9uZSBzaG90IiBiZWhhdmlvcgo+PiBpbXBsZW1lbnRl ZCBoZXJlIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSXQgaXMgX3NvbWV0aGluZ18sIHdoaWNo IGlzIGJldHRlcgo+PiB0aGFuIG5vdGhpbmcsIHdoaWNoIGlzIHdoYXQgd2UgaGF2ZSB3aXRob3V0 IHRoaXMgcGF0Y2ghIDotKSBJdCdzIGxpZ2h0d2VpZ2h0Cj4+IChpbiBpdHMgaW1wYWN0IG9uIHRo ZSBjcmVkaXRpbmcgYWxnb3JpdGhtLCBJIG1lYW4pLCBhbmQgYmVuY2htYXJrcyBsb29rcyBuaWNl LAo+PiBzbyBJIHByb3Bvc2Ugd2UgZ28gZm9yIHRoaXMgb25lLCBhbmQgZXhwbG9yZSB0aGUgInBl cm1hbmVudCIgLS1zdWJ0cmFjdGlvbgo+PiBiYXNlZC0tIHNvbHV0aW9uIGEgYml0IG1vcmUuCj4+ IC0tLQo+PiAgZG9jcy9taXNjL3hlbi1jb21tYW5kLWxpbmUubWFya2Rvd24gfCAgIDEwICsrKysr Kwo+PiAgeGVuL2NvbW1vbi9zY2hlZF9jcmVkaXQyLmMgICAgICAgICAgfCAgIDYyICsrKysrKysr KysrKysrKysrKysrKysrKysrKysrKystLS0tCj4+ICB4ZW4vY29tbW9uL3NjaGVkdWxlLmMgICAg ICAgICAgICAgICB8ICAgIDIgKwo+PiAgeGVuL2luY2x1ZGUveGVuL3BlcmZjX2RlZm4uaCAgICAg ICAgfCAgICAxICsKPj4gIDQgZmlsZXMgY2hhbmdlZCwgNjggaW5zZXJ0aW9ucygrKSwgNyBkZWxl dGlvbnMoLSkKPj4KPj4gZGlmZiAtLWdpdCBhL2RvY3MvbWlzYy94ZW4tY29tbWFuZC1saW5lLm1h cmtkb3duIGIvZG9jcy9taXNjL3hlbi1jb21tYW5kLWxpbmUubWFya2Rvd24KPj4gaW5kZXggM2Ey NTBjYi4uNWY0NjliMSAxMDA2NDQKPj4gLS0tIGEvZG9jcy9taXNjL3hlbi1jb21tYW5kLWxpbmUu bWFya2Rvd24KPj4gKysrIGIvZG9jcy9taXNjL3hlbi1jb21tYW5kLWxpbmUubWFya2Rvd24KPj4g QEAgLTEzODksNiArMTM4OSwxNiBAQCBDaG9vc2UgdGhlIGRlZmF1bHQgc2NoZWR1bGVyLgo+PiAg IyMjIHNjaGVkXF9jcmVkaXQyXF9taWdyYXRlXF9yZXNpc3QKPj4gID4gYD0gPGludGVnZXI+YAo+ PiAgCj4+ICsjIyMgc2NoZWRcX2NyZWRpdDJcX3lpZWxkXF9iaWFzCj4+ICs+IGA9IDxpbnRlZ2Vy PmAKPj4gKwo+PiArPiBEZWZhdWx0OiBgMTAwMGAKPj4gKwo+PiArU2V0IGhvdyBtdWNoIGEgeWll bGRpbmcgdmNwdSB3aWxsIGJlIHBlbmFsaXplZCwgaW4gb3JkZXIgdG8gYWN0dWFsbHkKPj4gK2dp dmUgYSBjaGFuY2UgdG8gcnVuIHRvIHNvbWUgb3RoZXIgdmNwdS4gVGhpcyBpcyBiYXNpY2FsbHkg YSBiaWFzLCBpbgo+PiArZmF2b3VyIG9mIHRoZSBub24teWllbGRpbmcgdmNwdXMsIGV4cHJlc3Nl ZCBpbiBtaWNyb3NlY29uZHMgKGRlZmF1bHQKPj4gK2lzIDFtcykuCj4+ICsKPj4gICMjIyBzY2hl ZFxfY3JlZGl0XF90c2xpY2VcX21zCj4+ICA+IGA9IDxpbnRlZ2VyPmAKPj4gIAo+PiBkaWZmIC0t Z2l0IGEveGVuL2NvbW1vbi9zY2hlZF9jcmVkaXQyLmMgYi94ZW4vY29tbW9uL3NjaGVkX2NyZWRp dDIuYwo+PiBpbmRleCBhM2Q3YmViLi41NjkxNzRiIDEwMDY0NAo+PiAtLS0gYS94ZW4vY29tbW9u L3NjaGVkX2NyZWRpdDIuYwo+PiArKysgYi94ZW4vY29tbW9uL3NjaGVkX2NyZWRpdDIuYwo+PiBA QCAtMTQ0LDYgKzE0NCw5IEBACj4+ICAjZGVmaW5lIENTQ0hFRDJfTUlHUkFURV9SRVNJU1QgICAg ICAgKChvcHRfbWlncmF0ZV9yZXNpc3QpKk1JQ1JPU0VDUygxKSkKPj4gIC8qIEhvdyBtdWNoIHRv ICJjb21wZW5zYXRlIiBhIHZjcHUgZm9yIEwyIG1pZ3JhdGlvbiAqLwo+PiAgI2RlZmluZSBDU0NI RUQyX01JR1JBVEVfQ09NUEVOU0FUSU9OIE1JQ1JPU0VDUyg1MCkKPj4gKy8qIEhvdyBiaWcgb2Yg YSBiaWFzIHdlIHNob3VsZCBoYXZlIGFnYWluc3QgYSB5aWVsZGluZyB2Y3B1ICovCj4+ICsjZGVm aW5lIENTQ0hFRDJfWUlFTERfQklBUyAgICAgICAgICAgKChvcHRfeWllbGRfYmlhcykqTUlDUk9T RUNTKDEpKQo+PiArI2RlZmluZSBDU0NIRUQyX1lJRUxEX0JJQVNfTUlOICAgICAgIENTQ0hFRDJf TUlOX1RJTUVSCj4+ICAvKiBSZXNldDogVmFsdWUgYmVsb3cgd2hpY2ggY3JlZGl0IHdpbGwgYmUg cmVzZXQuICovCj4+ICAjZGVmaW5lIENTQ0hFRDJfQ1JFRElUX1JFU0VUICAgICAgICAgMAo+PiAg LyogTWF4IHRpbWVyOiBNYXhpbXVtIHRpbWUgYSBndWVzdCBjYW4gYmUgcnVuIGZvci4gKi8KPj4g QEAgLTE4MSwxMSArMTg0LDIwIEBACj4+ICAgKi8KPj4gICNkZWZpbmUgX19DU0ZMQUdfcnVucV9t aWdyYXRlX3JlcXVlc3QgMwo+PiAgI2RlZmluZSBDU0ZMQUdfcnVucV9taWdyYXRlX3JlcXVlc3Qg KDE8PF9fQ1NGTEFHX3J1bnFfbWlncmF0ZV9yZXF1ZXN0KQo+PiAtCj4+ICsvKgo+PiArICogQ1NG TEFHX3ZjcHVfeWllbGQ6IHRoaXMgdmNwdSB3YXMgcnVubmluZywgYW5kIGhhcyBjYWxsZWQgdmNw dV95aWVsZCgpLiBUaGUKPj4gKyAqIHNjaGVkdWxlciBpcyBpbnZva2VkIHRvIHNlZSBpZiB3ZSBj YW4gZ2l2ZSB0aGUgY3B1IHRvIHNvbWVvbmUgZWxzZSwgYW5kCj4+ICsgKiBnZXQgYmFjayB0byB0 aGUgeWllbGRpbmcgdmNwdSBpbiBhIHdoaWxlLgo+PiArICovCj4+ICsjZGVmaW5lIF9fQ1NGTEFH X3ZjcHVfeWllbGQgNAo+PiArI2RlZmluZSBDU0ZMQUdfdmNwdV95aWVsZCAoMTw8X19DU0ZMQUdf dmNwdV95aWVsZCkKPj4gIAo+PiAgc3RhdGljIHVuc2lnbmVkIGludCBfX3JlYWRfbW9zdGx5IG9w dF9taWdyYXRlX3Jlc2lzdCA9IDUwMDsKPj4gIGludGVnZXJfcGFyYW0oInNjaGVkX2NyZWRpdDJf bWlncmF0ZV9yZXNpc3QiLCBvcHRfbWlncmF0ZV9yZXNpc3QpOwo+PiAgCj4+ICtzdGF0aWMgdW5z aWduZWQgaW50IF9fcmVhZF9tb3N0bHkgb3B0X3lpZWxkX2JpYXMgPSAxMDAwOwo+PiAraW50ZWdl cl9wYXJhbSgic2NoZWRfY3JlZGl0Ml95aWVsZF9iaWFzIiwgb3B0X3lpZWxkX2JpYXMpOwo+PiAr Cj4+ICAvKgo+PiAgICogVXNlZnVsIG1hY3Jvcwo+PiAgICovCj4+IEBAIC0xNDMyLDYgKzE0NDQs MTQgQEAgb3V0Ogo+PiAgfQo+PiAgCj4+ICBzdGF0aWMgdm9pZAo+PiArY3NjaGVkMl92Y3B1X3lp ZWxkKGNvbnN0IHN0cnVjdCBzY2hlZHVsZXIgKm9wcywgc3RydWN0IHZjcHUgKnYpCj4+ICt7Cj4+ ICsgICAgc3RydWN0IGNzY2hlZDJfdmNwdSAqIGNvbnN0IHN2YyA9IENTQ0hFRDJfVkNQVSh2KTsK Pj4gKwo+PiArICAgIF9fc2V0X2JpdChfX0NTRkxBR192Y3B1X3lpZWxkLCAmc3ZjLT5mbGFncyk7 Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkCj4+ICBjc2NoZWQyX2NvbnRleHRfc2F2ZWQoY29u c3Qgc3RydWN0IHNjaGVkdWxlciAqb3BzLCBzdHJ1Y3QgdmNwdSAqdmMpCj4+ICB7Cj4+ICAgICAg c3RydWN0IGNzY2hlZDJfdmNwdSAqIGNvbnN0IHN2YyA9IENTQ0hFRDJfVkNQVSh2Yyk7Cj4+IEBA IC0yMjQ3LDEwICsyMjY3LDIyIEBAIHJ1bnFfY2FuZGlkYXRlKHN0cnVjdCBjc2NoZWQyX3J1bnF1 ZXVlX2RhdGEgKnJxZCwKPj4gICAgICBzdHJ1Y3QgbGlzdF9oZWFkICppdGVyOwo+PiAgICAgIHN0 cnVjdCBjc2NoZWQyX3ZjcHUgKnNuZXh0ID0gTlVMTDsKPj4gICAgICBzdHJ1Y3QgY3NjaGVkMl9w cml2YXRlICpwcnYgPSBDU0NIRUQyX1BSSVYocGVyX2NwdShzY2hlZHVsZXIsIGNwdSkpOwo+PiAr ICAgIGludCB5aWVsZF9iaWFzID0gMDsKPj4gIAo+PiAgICAgIC8qIERlZmF1bHQgdG8gY3VycmVu dCBpZiBydW5uYWJsZSwgaWRsZSBvdGhlcndpc2UgKi8KPj4gICAgICBpZiAoIHZjcHVfcnVubmFi bGUoc2N1cnItPnZjcHUpICkKPj4gKyAgICB7Cj4+ICsgICAgICAgIC8qCj4+ICsgICAgICAgICAq IFRoZSB3YXkgd2UgYWN0dWFsbHkgdGFrZSB5aWVsZHMgaW50byBhY2NvdW50IGlzIGxpa2UgdGhp czoKPj4gKyAgICAgICAgICogaWYgc2N1cnIgaXMgeWllbGRpbmcsIHdoZW4gY29tcGFyaW5nIGl0 cyBjcmVkaXRzIHdpdGggb3RoZXIKPj4gKyAgICAgICAgICogdmNwdXMgaW4gdGhlIHJ1bnF1ZXVl LCBhY3QgbGlrZSB0aG9zZSBvdGhlciB2Y3B1cyBoYWQgeWllbGRfYmlhcwo+PiArICAgICAgICAg KiBtb3JlIGNyZWRpdHMuCj4+ICsgICAgICAgICAqLwo+PiArICAgICAgICBpZiAoIHVubGlrZWx5 KHNjdXJyLT5mbGFncyAmIENTRkxBR192Y3B1X3lpZWxkKSApCj4+ICsgICAgICAgICAgICB5aWVs ZF9iaWFzID0gQ1NDSEVEMl9ZSUVMRF9CSUFTOwo+PiArCj4+ICAgICAgICAgIHNuZXh0ID0gc2N1 cnI7Cj4+ICsgICAgfQo+PiAgICAgIGVsc2UKPj4gICAgICAgICAgc25leHQgPSBDU0NIRUQyX1ZD UFUoaWRsZV92Y3B1W2NwdV0pOwo+PiAgCj4+IEBAIC0yMjY4LDYgKzIzMDAsNyBAQCBydW5xX2Nh bmRpZGF0ZShzdHJ1Y3QgY3NjaGVkMl9ydW5xdWV1ZV9kYXRhICpycWQsCj4+ICAgICAgbGlzdF9m b3JfZWFjaCggaXRlciwgJnJxZC0+cnVucSApCj4+ICAgICAgewo+PiAgICAgICAgICBzdHJ1Y3Qg Y3NjaGVkMl92Y3B1ICogc3ZjID0gbGlzdF9lbnRyeShpdGVyLCBzdHJ1Y3QgY3NjaGVkMl92Y3B1 LCBydW5xX2VsZW0pOwo+PiArICAgICAgICBpbnQgc3ZjX2NyZWRpdCA9IHN2Yy0+Y3JlZGl0ICsg eWllbGRfYmlhczsKPj4gIAo+PiAgICAgICAgICAvKiBPbmx5IGNvbnNpZGVyIHZjcHVzIHRoYXQg YXJlIGFsbG93ZWQgdG8gcnVuIG9uIHRoaXMgcHJvY2Vzc29yLiAqLwo+PiAgICAgICAgICBpZiAo ICFjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgc3ZjLT52Y3B1LT5jcHVfaGFyZF9hZmZpbml0eSkgKQo+ PiBAQCAtMjI4OCwxOSArMjMyMSwyMyBAQCBydW5xX2NhbmRpZGF0ZShzdHJ1Y3QgY3NjaGVkMl9y dW5xdWV1ZV9kYXRhICpycWQsCj4+ICAgICAgICAgICAgICBjb250aW51ZTsKPj4gICAgICAgICAg fQo+PiAgCj4+IC0gICAgICAgIC8qIElmIHRoaXMgaXMgb24gYSBkaWZmZXJlbnQgcHJvY2Vzc29y LCBkb24ndCBwdWxsIGl0IHVubGVzcwo+PiAtICAgICAgICAgKiBpdHMgY3JlZGl0IGlzIGF0IGxl YXN0IENTQ0hFRDJfTUlHUkFURV9SRVNJU1QgaGlnaGVyLiAqLwo+PiArICAgICAgICAvKgo+PiAr ICAgICAgICAgKiBJZiB0aGlzIGlzIG9uIGEgZGlmZmVyZW50IHByb2Nlc3NvciwgZG9uJ3QgcHVs bCBpdCB1bmxlc3MKPj4gKyAgICAgICAgICogaXRzIGNyZWRpdCBpcyBhdCBsZWFzdCBDU0NIRUQy X01JR1JBVEVfUkVTSVNUIGhpZ2hlci4KPj4gKyAgICAgICAgICovCj4+ICAgICAgICAgIGlmICgg c3ZjLT52Y3B1LT5wcm9jZXNzb3IgIT0gY3B1Cj4+IC0gICAgICAgICAgICAgJiYgc25leHQtPmNy ZWRpdCArIENTQ0hFRDJfTUlHUkFURV9SRVNJU1QgPiBzdmMtPmNyZWRpdCApCj4+ICsgICAgICAg ICAgICAgJiYgc25leHQtPmNyZWRpdCArIENTQ0hFRDJfTUlHUkFURV9SRVNJU1QgPiBzdmNfY3Jl ZGl0ICkKPj4gICAgICAgICAgewo+PiAgICAgICAgICAgICAgKCpwb3MpKys7Cj4+ICAgICAgICAg ICAgICBTQ0hFRF9TVEFUX0NSQU5LKG1pZ3JhdGVfcmVzaXN0ZWQpOwo+PiAgICAgICAgICAgICAg Y29udGludWU7Cj4+ICAgICAgICAgIH0KPj4gIAo+PiAtICAgICAgICAvKiBJZiB0aGUgbmV4dCBv bmUgb24gdGhlIGxpc3QgaGFzIG1vcmUgY3JlZGl0IHRoYW4gY3VycmVudAo+PiAtICAgICAgICAg KiAob3IgaWRsZSwgaWYgY3VycmVudCBpcyBub3QgcnVubmFibGUpLCBjaG9vc2UgaXQuICovCj4+ IC0gICAgICAgIGlmICggc3ZjLT5jcmVkaXQgPiBzbmV4dC0+Y3JlZGl0ICkKPj4gKyAgICAgICAg LyoKPj4gKyAgICAgICAgICogSWYgdGhlIG5leHQgb25lIG9uIHRoZSBsaXN0IGhhcyBtb3JlIGNy ZWRpdCB0aGFuIGN1cnJlbnQKPj4gKyAgICAgICAgICogKG9yIGlkbGUsIGlmIGN1cnJlbnQgaXMg bm90IHJ1bm5hYmxlKSwgY2hvb3NlIGl0Lgo+PiArICAgICAgICAgKi8KPj4gKyAgICAgICAgaWYg KCBzdmNfY3JlZGl0ID4gc25leHQtPmNyZWRpdCApCj4+ICAgICAgICAgICAgICBzbmV4dCA9IHN2 YzsKPiAKPiBIbW0sIGlmIHdlIGNoYW5nZSBzbmV4dCwgc2hvdWxkbid0IHdlIGFsc28gemVybyBv dXQgdGhlIHlpZWxkIGJpYXM/Cj4gT3RoZXJ3aXNlIHZjcHVzIGNvbXBldGluZyB3aXRoIHNuZXh0 ICh3aGljaCB3aWxsIGF0IHRoaXMgcG9pbnQgaGF2ZSBoYWQKPiB0aGUgWUlFTEQgZmxhZyBjbGVh cmVkKSB3aWxsIGJlIGdpdmVuIHRoZSB5aWVsZCBib251cyBhcyB3ZWxsLCB3aGljaCBpcwo+IG5v dCB3aGF0IHdlIHdhbnQuICBJbiBmYWN0LCBJIHRoaW5rIGluIHRoaXMgY2FzZSB3ZSdsbCBhbHdh eXMgY2hvb3NlIHRoZQo+ICpsYXN0KiB2Y3B1IG9uIHRoZSBsaXN0IHVubGVzcyB0aGVyZSdzIG9u ZSB3aGVyZSB0aGUgZ2FwIGJldHdlZW4gTiBhbmQKPiBOKzEgaXMgZ3JlYXRlciB0aGFuIFlJRUxE X0JJQVMsIHdvbid0IGl0PwoKT29wcyAtLSBqdXN0IG5vdGljZWQgdGhlIG5leHQgbGluZToKCiAg ICAgICAgLyogSW4gYW55IGNhc2UsIGlmIHdlIGdvdCB0aGlzIGZhciwgYnJlYWsuICovCiAgICAg ICAgYnJlYWs7CgpOZXZlcm1pbmQuIDotKQoKIC1HZW9yZ2UKCgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1k ZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK