From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ian Jackson Subject: Re: [PATCH v6.2 05/11] libxl_qmp: Implementation of libxl__ev_qmp_* Date: Fri, 16 Nov 2018 16:09:03 +0000 Message-ID: <23534.60319.808138.50737@mariner.uk.xensource.com> References: <23532.22098.906750.732501@mariner.uk.xensource.com> <20181115111510.11628-1-anthony.perard@citrix.com> <23533.48525.832090.502837@mariner.uk.xensource.com> <20181116145336.GO1302@perard.uk.xensource.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1gNggG-000522-P2 for xen-devel@lists.xenproject.org; Fri, 16 Nov 2018 16:09:16 +0000 In-Reply-To: <20181116145336.GO1302@perard.uk.xensource.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Anthony PERARD Cc: xen-devel@lists.xenproject.org, Wei Liu List-Id: xen-devel@lists.xenproject.org VGhhbmtzIGZvciB0aGUgcmVwbHkuICBJIGhhdmUgZGVsZXRlZCBhbGwgdGhlIHBhcnRzIHdoZXJl IHdlIGFyZSBpbgphZ3JlZW1lbnQuLi4KCgpBbnRob255IFBFUkFSRCB3cml0ZXMgKCJSZTogW1BB VENIIHY2LjIgMDUvMTFdIGxpYnhsX3FtcDogSW1wbGVtZW50YXRpb24gb2YgbGlieGxfX2V2X3Ft cF8qIik6Cj4gT24gVGh1LCBOb3YgMTUsIDIwMTggYXQgMDY6NDA6MTNQTSArMDAwMCwgSWFuIEph Y2tzb24gd3JvdGU6Cj4gPiBJdCB3b3VsZCBiZSBiZXR0ZXIgaWYgdGhlIGlkIGNvbHVtbiBzdGF0 ZWQgc29tZXRoaW5nIG1vcmUgdXNlZnVsIHRoYW4KPiA+IGBzZXQnLiAgYG5leHQnIG1heWJlLCB3 aGVyZSBhcHBsaWNhYmxlID8KPiAKPiBXaGVuICdzZXQnLCBpZCBpcyB0aGUgaWQgb2YgdGhlIHVz ZXIgY29tbWFuZCB3ZSBpbnRlbmQgdG8gc2VuZCBvciBoYXZlCj4gYWxyZWFkeSBzZW50IGFuZCB3 YWl0aW5nIGZvciB0aGUgYXNzb2NpYXRlZCByZXBseS4gSSdtIG5vdCBzdXJlIHdoaWNoCj4gd29y ZCBvciBzZXQgb2Ygd29yZCB3b3VsZCBkZXNjcmliZSBlbm91Z2guIEkgbWlnaHQgbmVlZCB0byBh ZGQgYSBjb21tZW50Cj4gYmVsb3cgdGhlIHRhYmxlLgoKWW91IGNvdWxkIHVzZSBgc2VudCcsIGBu ZXh0JywgYWxvbmdzaWRlIHlvdXIgZXhpc3RpbmcgYHByZXYnID8KCj4gPiBUeXBvIGB0cmFuc21p dHRpbmcnLgo+ID4gCj4gPiBBIG1pbm9yIHBvaW50LCBidXQgaW5kZW50aW5nIHRoZSByeF8qIHRo aW5ncyBoZXJlIHdvdWxkIGF2b2lkIHRoZW0KPiA+IGxpbmluZyB1cCB3aXRoIGB0cmFuc21pdHRp bmcgYnVmZmVyJyBhbmQgbWlzbGVhZGluZyB0aGUgZXllLgo+ID4gCj4gPiBCZXR0ZXIgc3RpbGws IGhhdmUgeW91IGNvbnNpZGVyZWQgbW92aW5nIHRoaXMgdGFibGUgaW50byB0aGUgc3RydWN0Cj4g PiBpdHNlbGYgPyAgWW91IGNvdWxkIHB1dCB0aGUgdGFibGUgdG8gdGhlIFJIUyBvZiB0aGUgYWN0 dWFsIG1lbWJlcgo+ID4gZGVmaW5pdGlvbnMuICBUaGF0IGdpdmVzIHNsaWdodGx5IGZld2VyIHBs YWNlcyB0byBsb29rLCBhbHRob3VnaCBpdAo+ID4gd291bGQgaW52b2x2ZSBhIGNyb3NzLXJlZmVy ZW5jZSBmcm9tIHRoaXMgd2lkZXIgc3RhdGUgZGVzY3JpcHRpb24gdG8KPiA+IHRoZSBmaWVsZCdz IHN0YXRlIHRhYmxlcy4KPiAKPiBJbmRlZWQsIGl0IGZlZWxzIGtpbmQgb2Ygd3JvbmcgdG8gaGF2 ZSB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGludGVybmFsCj4gc3RhdGVzIGluIHR3byBkaWZmZXJl bnQgcGxhY2VzLiBUaGVyZSBhcmUgc29tZSBkZXNjcmlwdGlvbnMgaW4gdGhlCj4gc3RydWN0LCBi dXQgdGhvc2UgYXJlIHByb2JhYmx5IG5vdCBuZWVkZWQuCgpJIGRvbid0IHRoaW5rIEkgc2F3IGFu eSBfcmVkdW5kYW50XyB0ZXh0LCBidXQgSSBjb3VsZCBiZSB3cm9uZy4KQ2VydGFpbmx5IHRoZSBz dHVmZiBhYm91dCB3aGljaCBwYXJ0cyBvZiB0aGUgYnVmZmVyIGFyZSB1c2VkLCBldGMuLAphcmUg Z29vZCBhbmQgd2FudCB0byBiZSBrZXB0LgoKPiA+IC4uLiBvaCwgSSBzZWUgZm9yIHJ4X2J1Zl91 c2VkIHRoaXMgaXMgZG9jdW1lbnRlZCBpbiB0aGUgc3RydWN0Cj4gPiBpdHNlbGYuICBCdXQgbm90 IGZvciB0eF9idWZfb2ZmLgo+ID4gCj4gPiBXaGljaCBsZWFkcyBtZSB0byBzYXk6IHRoZSBzdHJ1 Y3QgY29udGFpbnMgcnhfYnVmX3VzZWQgYnV0IHRoZSBjb21tZW50Cj4gPiBoZXJlIHRhbGtzIGFi b3V0IF9vZmYuCj4gCj4gOigsIEkgbmVlZCB0byBmaXggdGhhdC4KPiAKPiBBbmQgaGVyZSBpcyB0 aGUgZGVzY3JpcHRpb246Cj4gCj4gcnhfYnVmX3VzZWQ6IGFjdHVhbCBkYXRhIGluIHRoZSBidWZm ZXIKPiB0eF9idWZfb2ZmOiBkYXRhIGFscmVhZHkgc2VudAoKUmlnaHQsIEkgZm91bmQgdGhhdCBp biB0aGUgZW5kLgoKPiA+ID4gKyAqIC0gQWxsb3dlZCBpbnRlcm5hbCBzdGF0ZSB0cmFuc2l0aW9u Ogo+ID4gPiArICogZGlzY29ubmVjdGVkICAgICAgICAgICAgICAgICAgICAgICAgIC0+IGNvbm5l Y3RpbmcKPiA+ID4gKyAqIGNvbm5lY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAtPiBj YXBhYmlsaXR5X25lZ290aWF0aW9uCj4gPiA+ICsgKiBjYXBhYmlsaXR5X25lZ290aWF0aW9uL3dh aXRpbmdfcmVwbHkgLT4gY29ubmVjdGVkCj4gPiA+ICsgKiBjb25uZWN0ZWQgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLT4gd2FpdGluZ19yZXBseQo+ID4gPiArICogYW55ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC0+IGRpc2Nvbm5lY3RlZAo+ID4gCj4gPiBUaGlzIGRvZXMg bm90IG1lbnRpb24gdGhlIHN0YXRlIGBicm9rZW4nIGFuZCBpdCBzaG91bGQuCj4gCj4gTWF5YmU6 Cj4gICBhbnkgLT4gYnJva2VuCgpGaW5lIGJ5IG1lLiAgWW91IHdhbnQgdG8gbWVudGlvbiBicm9r ZW4gLT4gZGlzY29ubmVjdGVkIHRvbyA6LSkuCgoKPiA+ID4gK3N0YXRpYyBpbnQgcW1wX2V2X3By ZXBhcmVfY21kKGxpYnhsX19nYyAqZ2MsCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBsaWJ4bF9fZXZfcW1wICpldiwKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IGNoYXIgKmNtZCwKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IGxpYnhsX19qc29uX29iamVjdCAqYXJncykKLi4uCj4gPiA+ICsgICAgZXYtPmlkKys7 Cj4gPiA+ICsgICAgYnVmID0gcW1wX3ByZXBhcmVfY21kKGdjLCBjbWQsIGFyZ3MsIGV2LT5pZCwg Jmxlbik7Cj4gPiA+ICsgICAgaWYgKCFidWYpIHsKPiA+ID4gKyAgICAgICAgcmV0dXJuIEVSUk9S X0ZBSUw7Cj4gPiA+ICsgICAgfQo+ID4gCj4gPiBUaGVyZSBpcyBubyBkb2MgY29tbWVudCBmb3Ig cW1wX3ByZXBhcmVfY21kIHNheWluZyB3aGV0aGVyIGl0IGxvZ3Mgb24KPiA+IGVycm9yLiAgU28g aXQgZG9lc24ndCA/ICBJbiB3aGljaCBjYXNlIG1heWJlIHlvdSBzaG91bGQgZG8gc28gaGVyZS4K PiA+IAo+ID4gQWx0ZXJuYXRpdmVseSBpZiBpdCBjYW4gb25seSByZWFsbHkgZmFpbCBkdWUgdG8g bWVtb3J5IGFsbG9jYXRpb24KPiA+IGZhaWx1cmUsIG1heWJlIGl0IHNob3VsZCByZXR1cm4gdm9p ZCAoYW5kIGNhbGwgbGlieGxfX2FsbG9jX2ZhaWxlZAo+ID4gb24gYWxsb2NhdGlvbiBmYWlsdXJl KSBpbnN0ZWFkID8KPiAKPiBTbyB3ZSBjYW4gaGF2ZSB0aGUgYWxsb2NhdGlvbiBiZWVuIGRvbmUg YnkgbGlieGwncyBmdW5jdGlvbnMsIGFzCj4geWFqbF9nZW5fYWxsb2MgY2FuIHVzZSBvdGhlciBm dW5jdGlvbnMgdGhhdCBtYWxsb2MvZnJlZS9yZWFsbG9jLCB0aGF0Cj4gd291bGQgcmVtb3ZlIHRo ZSBhbGxvY2F0aW9uIGZhaWx1cmUuCgpSaWdodC4KCj4gQnV0IHRoZW4gSSB0aGluayB0aGF0IHFt cF9wcmVwYXJlX2NtZCBjb3VsZCBmYWlsIGFuZCByZXR1cm4gbnVsbCBpZgo+ICdjbWQnIG9yICdh cmdzJyBjb250YWlucyBiYWQganNvbiBvYmplY3RzLCBvciBhIHdyb25nIHN0cmluZy4KPiAKPiBT byB3ZSBzdGlsbCBuZWVkcyB0byBkZXRlY3QgZmFpbHVyZS4KCk9LLgoKPiBJIGxvZyBoZXJlIGFz IEkgY2FuIGFkZCB0aGUgZG9taWQuCgpJJ20gbm90IHN1cmUgd2hhdCB5b3UgbWVhbi4gIFdoZXJl IGRvIHlvdSBsb2cgPyAgTm90IGhlcmUuCgoKPiA+ID4gKy8qIFNldHVwIGNvbm5lY3Rpb24gKi8K PiA+ID4gKwo+ID4gPiArc3RhdGljIGludCBxbXBfZXZfY29ubmVjdChsaWJ4bF9fZ2MgKmdjLCBs aWJ4bF9fZXZfcW1wICpldikKPiA+ID4gKyAgICAvKiBkaXNjb25uZWN0ZWQgLT4gY29ubmVjdGlu ZyBidXQgd2l0aCBgbXNnYCBmcmVlCj4gPiA+ICsgICAgICogb24gZXJyb3I6IGRpc2Nvbm5lY3Rl ZAo+ID4gPiArICAgICAqIElmIHRoZSBpbml0aWFsIHN0YXRlIGlzbid0IGRpc2Nvbm5lY3RlZCwg dGhlbiBub3RoaW5nIGlzIGRvbmUgKi8KPiA+IAo+ID4gTWF5YmUgaXQgYmUgYmV0dGVyIGZvciB0 aGlzIGZ1bmN0aW9uIHRvIHJldHVybiBgYnJva2VuJyBvbiBlcnJvciA/Cj4gCj4gVGhhdCBub3Qg dGhlIGNhc2UsIGJ1dCBJIGNvdWxkIGNoYW5nZSB0byByZXR1cm4gYnJva2VuIG9uIGVycm9yLCBh bmQgbGV0Cj4gdGhlIGNhbGxlciBjbGVhbiB0aGUgc3RhdGUuCgpUaGF0J3Mgd2hhdCBJIG1lYW4u ICBUaGF0IG1pZ2h0IHNpbXBsaWZ5IHRoaXMgZnVuY3Rpb24gYW5kIHRoZSBjYWxsZXIKcHJvYmFi bHkgaGFzIHRoZSByZWxldmFudCBjbGVhbnVwIHBhdGggYWxyZWFkeS4gIChJIGhhdmVuJ3QgY2hl Y2tlZC4pCgoKPiA+IEFsc28sIEkgdGhpbmsgaXQgaXMgYW5vbWFsb3VzIHRoYXQgdGhpcyBmdW5j dGlvbiBoYW5kbGVzIGBicm9rZW4nIGFzIGEKPiA+IG5vLW9wIGFuZCBjbGFpbXMgc3VjY2Vzcy4g IEkgdGhpbmsgdGhhdCBpcyBub3QgcmVhbGx5IHdoYXQgYSBjYWxsZXIKPiA+IG1pZ2h0IGV4cGVj dC4gIE1heWJlIHlvdSB3YW50IHRvIGZvcmJpZCBgYnJva2VuJyAod2l0aCBhIGNvcnJlc3BvbmRp bmcKPiA+IGFzc2VydCkgb3IgdG8gcGVybWl0IGl0IChjYWxsaW5nIGRpc3Bvc2UgYmVmb3JlIGRv aW5nIHRoZSByZXN0IG9mIHRoZQo+ID4gd29yaykuCj4gCj4gSSdtIHRoaW5raW5nIHRvIGNoYW5n ZSB0aGUgZGVmaW5pdGlvbiBhbmQgb25seSBhbGxvdyB0aGlzIGZ1bmN0aW9uIHRvIGJlCj4gY2Fs bGVkIHdpdGggdGhlIHN0YXRlIGRpc2Nvbm5lY3RlZCwgYW5kIGhhdmUgdGhlIGNhbGxlciBjaGVj ayBmb3IgdGhlCj4gY3VycmVudCBzdGF0ZS4KClRoYXQncyBhbm90aGVyIHBvc3NpYmlsaXR5LgoK Cj4gPiA+ICtvdXQ6Cj4gPiA+ICsgICAgbGlieGxfX2NhcmVmZF9jbG9zZShldi0+cW1wX2NmZCk7 Cj4gPiA+ICsgICAgZXYtPnFtcF9jZmQgPSBOVUxMOwo+ID4gPiArICAgIHJldHVybiByYzsKPiA+ IAo+ID4gSWYgdGhpcyBmdW5jdGlvbiB3ZXJlIHBlcm1pdHRlZCB0byBsZWF2ZSB0aGUgc3RhdGUg YGJyb2tlbicgb24gZXJyb3IsCj4gPiB0aGlzIHNlcGFyYXRlIGVycm9yIGNvZGUgd291bGQgbm90 IGJlIG5lZWRlZC4gIElzIHRoZXJlIHNvbWUgcmVhc29uCj4gPiBub3QgdG8gZG8gdGhhdCA/Cj4g Cj4gTm90IHJlYWxseS4KCk9LIHRoZW4gOi0pLgoKPiA+ID4gKyAgICBpZiAocmV2ZW50cyAmIFBP TExPVVQpIHsKPiA+ID4gKyAgICAgICAgcmMgPSBxbXBfZXZfY2FsbGJhY2tfd3JpdGFibGUoZ2Ms IGV2LCBmZCk7Cj4gPiAuLi4KPiA+ID4gKyAgICBpZiAocmV2ZW50cyAmIFBPTExJTikgewo+ID4g PiArICAgICAgICByYyA9IHFtcF9ldl9jYWxsYmFja19yZWFkYWJsZShlZ2MsIGV2LCBmZCk7Cj4g PiA+ICsgICAgICAgIGlmIChyYykKPiA+ID4gKyAgICAgICAgICAgIGdvdG8gb3V0Owo+ID4gPiAr Cj4gPiA+ICsgICAgICAgIC8qIHBhcnNlIGlucHV0ICovCj4gPiAKPiA+IEkgZmluZCBpdCBvZGQg dGhhdCB0aGlzIGlucHV0IHBhcnNpbmcgaXMgbm90IHBhcnQgb2YKPiA+IHFtcF9ldl9jYWxsYmFj a19yZWFkYWJsZS4gIFdoYXQgZG8geW91IHRoaW5rIGFib3V0IG1vdmluZyBpdCB0aGVyZSA/Cj4g Cj4gSSB3YW50ZWQgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2YgZnVuY3Rpb24gY2FsbHMgYmV0d2Vl biB3aGVuIGEgdXNlcgo+IGNhbGxiYWNrIGlzIGNhbGxlZCBhbmQgd2hlbiBldl9xbXAncyBjb250 cm9sIHBhc3NlcyBvdXRzaXRlIG9mIGV2X3FtcCdzCj4gaW1wbGVtZW50YXRpb24uIFNvIEkgbW92 ZWQgcW1wX2V2X2hhbmRsZV9tZXNzYWdlKCkgY2FsbCBoZXJlLgoKV2h5IGRpZCB5b3Ugd2FudCB0 byByZWR1Y2UgdGhlIG51bWJlciBvZiBmdW5jdGlvbiBjYWxscyA/Cgo+ID4gPiArICAgIC8qCj4g PiA+ICsgICAgICogV2Ugd2lsbCBzZW5kIGEgZmlsZSBkZXNjcmlwdG9yIGFzc29jaWF0ZWQgd2l0 aCBhIGNvbW1hbmQgb24gdGhlCj4gPiA+ICsgICAgICogZmlyc3QgYnl0ZSBvZiB0aGlzIGNvbW1h bmQuCj4gPiA+ICsgICAgICovCj4gPiA+ICsgICAgaWYgKGV2LT5xbXBfc3RhdGUgPT0gcW1wX3N0 YXRlX3dhaXRpbmdfcmVwbHkgJiYKPiA+ID4gKyAgICAgICAgZXYtPmZkID49IDAgJiYKPiA+ID4g KyAgICAgICAgZXYtPnR4X2J1Zl9vZmYgPT0gMCkgewo+ID4gCj4gPiBBY2NvcmRpbmcgdG8gdGhl IGRvYyBjb21tZW50cywgc3RhdGUgd2FpdGluZ19yZXBseSBtaWdodCBoYXZlIHR4X2J1Zgo+ID4g ZnJlZSwgaW4gd2hpY2ggY2FzZSBpdCB3b3VsZCB0cnkgdG8gZXhlY3V0ZSB0aGlzIGNvZGUuICBJ IGRvbid0IHRoaW5rCj4gPiB0aGF0IGNhbiBiZSByaWdodC4KPiAKPiBXaGVuIHR4X2J1ZiBpcyBm cmVlLCB0aGF0IGZ1bmN0aW9uIHJldHVybnMgZWFybGllci4gU28gdGhpcyBjb2RlIGlzbid0Cj4g ZXhlY3V0ZWQuCgpPaCB5ZXMsIHNvIGl0IGRvZXMuICBCdXQgd2h5IGFyZSB3ZSBlbnRlcmluZyB0 aGlzIGNhbGxiYWNrIHdpdGggYSBmcmVlCnR4X2J1ZiBhdCBhbGwgPyAgSWYgd2UganVzdCByZXR1 cm4sIHdlIGFyZSBsaWtlbHkgdG8gZ2V0IGNhbGxlZCBhZ2FpbiwKaWUgYW4gaW5maW5pdGUgbG9v cC4gIFRoaXMgY2FuIG9ubHkgb2NjdXIgYXMgYSByZXN1bHQgb2YgYSBidWcgPwpJbiB3aGljaCBj YXNlIG1heWJlIGl0IHNob3VsZCBiZSBhbiBhc3NlcnQgPwoKPiA+ID4gKyAgICAgICAgICAgIGFz c2VydChldi0+cnhfYnVmX3NpemUgPD0gUU1QX01BWF9TSVpFX1JYX0JVRik7Cj4gPiA+ICsgICAg ICAgICAgICBpZiAoZXYtPnJ4X2J1Zl9zaXplID4gUU1QX01BWF9TSVpFX1JYX0JVRikgewo+ID4g Cj4gPiBJIHRoaW5rIHRoZSBhc3NlcnQgaXMgcmVkdW5kYW50Lgo+ID4gCj4gPiA+ICsgICAgICAg ICAgICAgICAgTE9HRChFUlJPUiwgZXYtPmRvbWlkLAo+ID4gPiArICAgICAgICAgICAgICAgICAg ICAgIlFNUCByZWNlaXZlIGJ1ZmZlciBpcyB0b28gYmlnICglbGQgPiAlbGxkKSIsCj4gPiA+ICsg ICAgICAgICAgICAgICAgICAgICBldi0+cnhfYnVmX3NpemUsIFFNUF9NQVhfU0laRV9SWF9CVUYp Owo+ID4gPiArICAgICAgICAgICAgICAgIHJldHVybiBFUlJPUl9CVUZGRVJGVUxMOwo+ID4gPiAr ICAgICAgICAgICAgfQo+ID4gCj4gPiBQdXR0aW5nIHRoaXMgZXJyb3IgY2hlY2sgYmV0d2VlbiB0 aGUgY2hhbmdlIHRvIHJ4X2J1Zl9zaXplIGFuZCB0aGUKPiA+IGNoYW5nZSB0byByeF9idWYgb2Jz Y3VyZXMgdGhlIGVzc2VudGlhbCBjb25uZWN0aW9uIGJldHdlZW4gYm90aAo+ID4gY2hhbmdlcywg d2hpY2ggbXVzdCBiZSBpbmRpdmlzaWJsZS4KPiA+IAo+ID4gSXQgYWxzbyByZXN1bHRzIGluIGEg YnVnOiBpZiB0aGlzIGVycm9yIHRyaXBzLCByeF9idWZfc2l6ZSBoYXMgYmVlbgo+ID4gdXBkYXRl ZCBidXQgcnhfYnVmIGhhcyBub3QuICBUaGlzIGlzIGEgZGFuZ2Vyb3VzbHkgaW52YWxpZCBzdGF0 ZS4KPiA+IAo+ID4gVGhpcyBmdW5jdGlvbiB0cmllcyB0byByZWFkIGV2ZXJ5dGhpbmcgdGhhdCBx ZW11IHByb2R1Y2VzIGFuZCBjYWxscwo+ID4gdGhlIHdob2xlIHRoaW5nIGEgbG9zcyBvZiBxZW11 IHByb2R1Y2VzIG1vcmUgdGhhbiBRTVBfTUFYX1NJWkVfUlhfQlVGLgo+ID4gQnV0IHBlcmhhcHMg cWVtdSBwcm9kdWNpbmcgbW9yZSB0aGFuIFFNUF9NQVhfU0laRV9SWF9CVUYgb3V0cHV0IG1pZ2h0 Cj4gPiBub3QgYmUgdGhlIHJlc3VsdCBvZiBxZW11IGdvaW5nIG1hZC4gIEl0IG1pZ2h0IGJlIHRo ZSByZXN1bHQgb2YgdXMKPiA+IGhhdmluZyBpZ25vcmVkIGl0IGZvciBhIHdoaWxlLCBhbmQgcWVt dSBmaWxsaW5nIGEgYnVmZmVyIHdpdGggZXZlbnQKPiA+IG5vdGlmaWNhdGlvbnMgd2hpY2ggd2Ug bWlnaHQgd2FudCB0byBkaXNjYXJkID8KPiA+IAo+ID4gV291bGQgaXQgbm90IGJlIGJldHRlciB0 byBwcm9jZXNzIG1lc3NhZ2VzIGFzIHRoZXkgYXJyaXZlID8gIEllIHRvIHB1dAo+ID4gdGhlIGF0 dGVtcHQgdG8gZmluZCB2YWxpZCBtZXNzYWdlcyBoZXJlIGluc2lkZSB0aGlzIGxvb3AgPwo+IAo+ IE1heWJlLgo+IAo+IFdlIGRvbid0IGV2ZW4gbmVlZHMgdG8gd2FpdCBmb3IgYSB2YWxpZCBtZXNz YWdlIGFuZCBzdGFydCBwYXJzaW5nLiB5YWpsCj4gYWxsb3cgdG8gcGFyc2UgcGFydGlhbCBqc29u IGlucHV0LiBCdXQgSSBkb24ndCBrbm93IGlmIGl0IGlzIGEgZ29vZCBpZGVhCj4gdG8gc3RhcnQg ZG9pbmcgdGhhdC4KCkkgdGhpbmsgcGFyc2luZyBwYXJ0aWFsIGpzb24gbWVzc2FnZXMgd291bGQg YmUgcXVpdGUgY29tcGxleCBhbmQgbm90CndvcnRod2hpbGUgLSBiZWNhdXNlIHdlIGV4cGVjdCB0 byBnZXQgc2hvcnQgbWVzc2FnZXMuCgo+IEJ1dCBpbiBhbnljYXNlLCBpdCBpcyBwcm9iYWJseSBi ZXR0ZXIgdG8gbG9vayBmb3IgdmFsaWRlIG1lc3NhZ2VzIGJlZm9yZQo+IHJldHVybmluZyBhbiBl cnJvciB3aXRoICJ0aGVyZSdzIHRvbyBtdWNoIHRvIHByb2Nlc3MiLgoKUmlnaHQuCgo+ID4gVGhh dCBtaWdodCBhbHNvIGFsbG93IHRoZSByZWR1Y3Rpb24gb2YgdGhlIG1heGltdW0gbWVzc2FnZSBz aXplIGZyb20KPiA+IDhNYnkuICA4TWJ5IHNlZW1zIGxpa2UgcXVpdGUgYSBsb3QuCj4gCj4gSSBk b24ndCBrbm93IGhvdyBiaWcgYSBtZXNzYWdlIGNhbiBiZS4gSSBjYW4gY2VydGFpbmx5IHRyeSB0 byBzdGFydCBRRU1VCj4gd2l0aCAyNTYgY3B1cyBhbmQgY2hlY2sgdGhlIHNpemUgb2YgcXVlcnkt Y3B1J3MgcmVzcG9uc2UuCgpUaGF0IGlzIHByb2JhYmx5IHdvcnRod2hpbGUgYnV0IEkgaG9wZSBp dCB3aWxsIGJlIG5vd2hlcmUgbmVhciA4TWJ5Li4uCgo+ID4gSSB3cm90ZToKPiA+IAo+ID4gICBC dXQgSSB0aGluayB5b3Ugc2hvdWxkIHRyZWF0IG9ubHkgYFxuJyBhcyB0aGUgZGVsaW1pdGVyLiAg VGhpcyB3aWxsCj4gPiAgIGNvbnNpZGVyYWJseSBzaW1wbGlmeSB0aGUgYnVmZmVyIGhhbmRsaW5n LiAgKFlvdSBzaG91bGQgY2hlY2sgYW5kIHRyaW0KPiA+ICAgdGhlIHByZWNlZGluZyBgXHInIGJl Zm9yZSBwYXNzaW5nIHRoaW5ncyB0byBsaWJ4bF9fanNvbl9wYXJzZSBvZgo+ID4gICBjb3Vyc2Uu KQo+ID4gCj4gPiBCdXQgeW91IGRvbid0IHNlZW0gdG8gaGF2ZSBkb25lIHRoYXQsIG9yIHJlcGxp ZWQgPwo+IAo+IFRoaXMgaXMgc3RpbGwgc2ltcGxlciB0aGFuIHdoYXQgd2UgaGFkIGJlZm9yZSwg YW5kIGlmIEkgbG9vayBmb3Igb25seQo+ICdcbicsIEkgd291bGQgbmVlZCBhIGxvb3AgaW4gY2Fz ZXMgd2hlcmUgXG4gaXNuJ3QgcHJlY2VkZGVkIGJ5IFxyLiBJCj4gYWxzbyBjaGVjayB0aGUgd2hv bGUgYnVmZmVyIHJhdGhlciB0aGFuIG5ldyBkYXRhLCBzbyBsb29raW5nIGZvciBcciBhbmQKPiBj aGVjayBpZiBpdCBpcyBmb2xsb3dlZCBieSBhIFxuIGlzIHNpbWlsYXIuCgpJIHRoaW5rIGEgYmFy ZSBcbiBpcyBub3QgbGVnYWwgYW5kIHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgcHJvdG9jb2wKZXJy b3IuICBEb24ndCB5b3UgYWdyZWUgPyAgR2l2ZW4gdGhhdCwgeW91IGNhbiBzZWFyY2ggZm9yIFxu LCBhbmQgaWYKaXQgaXMgbm90IHByZWNlZGVkIGJ5IFxyLCBjYWxsIGl0IGFuIGVycm9yLgoKQnV0 IG1heWJlIHlvdSBwcmVmZXIgaXQgdGhlIHdheSB5b3UgaGF2ZSBpdC4KCj4gQXMgZm9yIHRyaW1p bmcgdGhlIFxyLCB0aGlzIGlzIGRvbmUgYmVmb3JlIHRoZSBsaWJ4bF9fanNvbl9wYXJzZSBjYWxs LgoKUmlnaHQsIHNvcnJ5LCBteSBwYXJlbnRoZXRpY2FsIGNvbW1lbnQgd2FzIGp1c3Qgc2F5aW5n IHRoYXQgaWYgeW91CmNoYW5nZSBpdCB0byBzZWFyY2ggZm9yIFxuIHlvdSBkbyBzdGlsbCBuZWVk IHRvIHN0cmlwIHRoZSBcci4KCj4gPiA+ICsgICAgY2FzZSBMSUJYTF9fUU1QX01FU1NBR0VfVFlQ RV9RTVA6Cj4gPiAuLi4KPiA+ID4gKyAgICAgICAgYXNzZXJ0KCFldi0+dHhfYnVmKTsKPiA+ID4g KyAgICAgICAgZXYtPnR4X2J1ZiA9IHFtcF9wcmVwYXJlX2NtZChnYywgInFtcF9jYXBhYmlsaXRp ZXMiLCBOVUxMLAo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUU1QX0NBUEFC SUxJVFlfTkVHT1RJQVRJT05fTVNHSUQsCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmZXYtPnR4X2J1Zl9sZW4pOwo+ID4gPiArICAgICAgICBldi0+dHhfYnVmX29mZiA9IDA7 Cj4gPiAKPiA+IFdoeSBkbyB5b3Ugbm90IHVzZSBxbXBfZXZfcHJlcGFyZV9jbWQgZm9yIHRoaXMg Pwo+IAo+IEJlY2F1c2UgcW1wX2V2X3ByZXBhcmVfY21kIGRvZXMgbW9yZSBsaWtlIGluY3JlYXNp bmcgdGhlIGlkLiBUaGlzCj4gcW1wX2NhcGFiaWxpdGllcyBpcyBhIHNwZWNpYWwgY29tbWFuZCB0 aGF0IGlzIHBhcnQgb2YgdGhlCj4gaW5pdGlhbGlzYXRpb24uIEkgbmVlZCB0byBrbm93IHdoaWNo IGlkIGlzIHVzZWQgc28gdGhhdCBJIGNhbiB0cmFjayBpdAo+IGxhdGVyIGFuZCBmb3VuZCBvdXQg d2hlbiBRRU1VIGlzIHJlYWR5IHRvIHJlY2VpdmUgb3RoZXIgY29tbWFuZHMuCgpCdXQgc2VlIGJl bG93IGFib3V0IHRoZSBpZC4gIEkgdGhpbmsgeW91IHNob3VsZCBiZSB1c2luZyB0aGUgbm9ybWFs CmlkLgoKSW4gYW5vdGhlciB0aHJlYWQgeW91IHdlcmUgdGFsa2luZyBhYm91dCBwb3NzaWJseSB0 cnlpbmcgdG8gcmV1c2UgYW4KZXhpc3Rpbmcgc2Vzc2lvbiBhbmQgcHV0dGluZyB0aGUgcGlkIGlu IHRoZSBpZCBvciBzb21ldGhpbmcuICBJbiB0aGlzCmNhc2UgYSBmaXhlZCBpZCBmb3IgdGhlIGNh cGFiaWxpdGllcyBjb21tYW5kIGlzIG5vdCBnb29kIGVpdGhlci4KCkxldCBtZSBicmluZyBmb3J3 YXJkIHRoZSBwYXJ0IHdoZXJlIHdlIGhhbmRsZSB0aGUgcmVzdWxzOgoKPiA+ID4gKyAgICAgICAg aWQgPSBsaWJ4bF9fanNvbl9vYmplY3RfZ2V0X2ludGVnZXIobyk7Cj4gPiA+ICsKPiA+ID4gKyAg ICAgICAgaWYgKGlkID09IFFNUF9DQVBBQklMSVRZX05FR09USUFUSU9OX01TR0lEKSB7Cj4gPiA+ ICsgICAgICAgICAgICAvKiBXZSBoYXZlIGEgcmVzcG9uc2UgdG8gb3VyIHFtcF9jYXBhYmlsaXRp ZXMgY21kICovCj4gPiA+ICsgICAgICAgICAgICBpZiAoZXYtPnFtcF9zdGF0ZSAhPSBxbXBfc3Rh dGVfY2FwYWJpbGl0eV9uZWdvdGlhdGlvbiB8fAo+ID4gPiArICAgICAgICAgICAgICAgIHR5cGUg IT0gTElCWExfX1FNUF9NRVNTQUdFX1RZUEVfUkVUVVJOKQo+ID4gPiArICAgICAgICAgICAgICAg IGdvdG8gb3V0X3Vua25vd25faWQ7Cj4gPiA+ICsgICAgICAgICAgICBxbXBfZXZfc2V0X3N0YXRl KGdjLCBldiwgcW1wX3N0YXRlX2Nvbm5lY3RlZCk7Cj4gPiA+ICsgICAgICAgICAgICByZXR1cm4g MDsKPiA+ID4gKyAgICAgICAgfQo+ID4gCj4gPiBJJ20gYSBiaXQgcHV6emxlZCBhYm91dCB0aGUg Y2FwYWJpbGl0eSBuZWdvdGF0aW9uLCBpdHMgaWQsIGV0Yy46Cj4gPiAKPiA+ICogV2h5IGRvZXMg UU1QX0NBUEFCSUxJVFlfTkVHT1RJQVRJT05fTVNHSUQgZXhpc3QgYXQgYWxsID8gIFlvdQo+ID4g ICBjb3VsZCBqdXN0IHVzZSBhIG5vcm1hbCBpZCwgY291bGRuJ3QgeW91ID8gIEFuZCB5b3UnZCBi ZSBhYmxlIHRvCj4gPiAgIHRlbGwgZnJvbSB5b3VyIG93biBzdGF0ZSB0aGF0IGl0IHdhcyB0aGUg cmlnaHQgdmFsdWUuCj4gCj4gQnV0IEkgd291bGQgdGhlbiBuZWVkcyB0byB0cmFjayB0d28gZGlm ZmVyZW50IGlkcywgb25lIGZvciB0aGUKPiBxbXBfY2FwYWJpbGl0aWVzIGNvbW1hbmQsIGFuZCBv bmUgZm9yIHRoZSB1c2VyJ3MgY29tbWFuZC4KCkJ1dCB5b3Ugb25seSBjb25zdHJ1Y3QgdGhlIGlk IHdoZW4geW91IHByZXBhcmUgdGhlIGNvbW1hbmQgaW50bwp0eF9idWYuICBTbyB5b3Ugb25seSBo YXZlIG9uZSBpZCBhdCBhIHRpbWU6IHRoZSBpZCBvZiB0aGUgbW9zdApyZWNlbnRseSBwcmVwYXJl ZCBjb21tYW5kLiAgT3IgYW0gSSB3cm9uZyA/CgouLi4KCkkgaGF2ZSBsb29rZWQgYXQgdGhpcyBj b2RlIGFnYWluIGFuZCBJIHdhcyB3cm9uZy4gIFlvdSBmb3JtYXQgdGhlCnVzZXIncyBtZXNzYWdl LCB3aXRoIGlkLCByaWdodCBhdCB0aGUgYmVnaW5uaW5nLiAgKFRoZSBzZXF1ZW5jaW5nIG9mCmV2 ZW50cyBpbiB0aGUgY29kZSBzdHJ1Y3R1cmUgaXMgc2xpZ2h0bHkgb2RkLCBpbiB0aGF0IHRoZSBj YXBhYmlsaXRpZXMKbWVzc2FnZSBpcyBmb3JtYXR0ZWQgYWZ0ZXIgdGhlIHVzZXIncyBtZXNzYWdl LCBidXQgc2VudCBiZWZvcmVoYW5kLikKCkkgc3RpbGwgdGhpbmsgZm9yIHRoZSByZWFzb25zIGFi b3ZlIHRoYXQgeW91IHByb2JhYmx5IGNhbid0IGhhdmUgYQpmaXhlZCBRTVBfQ0FQQUJJTElUWV9O RUdPVElBVElPTl9NU0dJRCBiZWNhdXNlIHdlIG1heSB3YW50IHRvIGJlIGFibGUKdG8gcmV1c2Ug YW4gb2xkIHRyYW5zcG9ydCBjb25uZWN0aW9uIGluIHRoZSBmdXR1cmUuCgpTbyB0aGF0IG1lYW5z IHlvdSBkbyBuZWVkIHR3byBpZHMuICAoSSB0aGluayB5b3UgY2FuJ3QgZGVmZXIKZm9ybWF0dGlu ZyB0aGUgdXNlcidzIG1lc3NhZ2UsIGJha2luZyBhbiBpZCBpbnRvIGl0LCBiZWNhdXNlIHRoZQps aWZldGltZSBvZiB0aGUgY2FsbGVycycganNvbiBvYmplY3QgaXMgdG9vIHNob3J0IGZvciB5b3Ug dG8gc2F2ZSBpdC4pCgpJJ20gbm90IHN1cmUgSSBjYW4gc2VlIHNlbnNpYmxlIGEgd2F5IG9mIGRv aW5nIHRoaXMgdGhhdCBkb2Vzbid0IGhhdmUKKnRocmVlKiBpZCB2YXJpYWJsZXM6CiAgLSBhIGNv dW50ZXIgZm9yIGdlbmVyYXRpbmcgbmV3IGlkcwogIC0gdGhlIGlkIHB1dCBpbiB0aGUgY2FwYWJp bGl0aWVzIGNvbW1hbmQKICAtIHRoZSBpZCBwdXQgaW4gdGhlIHVzZXIncyBjb21tYW5kCgo+IFdl IGNvdWxkIGNhbGwgcW1wX2V2X3ByZXBhcmVfY21kLCBxbXBfZXZfcHJlcGFyZV91c2VyX2NtZC4K PiAKPiA+ID4gKyAgICBjYXNlIExJQlhMX19RTVBfTUVTU0FHRV9UWVBFX1JFVFVSTjoKPiA+ID4g KyAgICBjYXNlIExJQlhMX19RTVBfTUVTU0FHRV9UWVBFX0VSUk9SOgo+ID4gLi4uCj4gPiA+ICsg ICAgICAgIG8gPSBsaWJ4bF9fanNvbl9tYXBfZ2V0KCJpZCIsIHJlc3AsIEpTT05fSU5URUdFUik7 Cj4gPiA+ICsgICAgICAgIGlmICghbykgewo+ID4gPiArICAgICAgICAgICAgLyoKPiA+ID4gKyAg ICAgICAgICAgICAqIElmICJpZCIgaXNuJ3QgcHJlc2VudCwgYW4gZXJyb3Igb2NjdXIgb24gdGhl IHNlcnZlciBiZWZvcmUKPiA+ID4gKyAgICAgICAgICAgICAqIGl0IGhhcyByZWFkIHRoZSAiaWQi IHByb3ZpZGVkIGJ5IGxpYnhsLgo+ID4gPiArICAgICAgICAgICAgICovCj4gPiA+ICsgICAgICAg ICAgICBxbXBfZXZfcGFyc2VfZXJyb3JfbWVzc2FnZXMoZWdjLCBldiwgcmVzcCk7Cj4gPiA+ICsg ICAgICAgICAgICByZXR1cm4gRVJST1JfUFJPVE9DT0xfRVJST1JfUU1QOwo+ID4gCj4gPiBJIHRo aW5rIHlvdSB3YW50ZWQgdG8gcmV0dXJuIHRoZSBlcnJvciBjb2RlIGZyb20KPiA+IHFtcF9ldl9w YXJzZV9lcnJvcl9tZXNzYWdlcyA/Cj4gCj4gWWVhaCwgYnV0IHRoZW4gSSd2ZSBhZGRlZCB0byB0 aGUgcHVibGljIGRvY3VtZW50YXRpb24gdGhhdCBFUlJPUl9RTVBfKgo+IG1lYW5zIHRoYXQgZXZf cW1wIGlzIHN0aWxsIENvbm5lY3RlZC4KCk9oLiAgUmlnaHQuICBJIHNlZS4gIE5vdyB0aGF0IHlv dSBoYXZlIGV4cGxhaW5lZCBJIHRoaW5rIHRoZSBjb2RlIGlzCmNvcnJlY3QuICBDYW4geW91IGFk ZCBhIGNvbW1lbnQgYWJvdXQgdGhpcyA/ICBTb21ldGhpbmcgbGlrZSB0aGlzOgogICAvKgogICAg KiBEZWxpYmVyYXRlbHkgc3F1YXNoIGFsbCBlcnJvcnMgaW50byBFUlJPUl9QUk9UT0NPTF9FUlJP Ul9RTVAuCiAgICAqIHFtcF9ldl9wYXJzZV9lcnJvcl9tZXNzYWdlcyB3aWxsIG9ubHkgcmV0dXJu IHRoYXQsIG9yCiAgICAqIEVSUk9SX1FNUF8qOyBidXQgRVJST1JfUU1QXyogaXMgcmVzZXJ2ZWQg Zm9yIGVycm9ycyByZXN1bHRpbmcKICAgICogZnJvbSB0aGUgY2FsbGVyJ3MgY29tbWFuZCwgYW5k IHdoZW4gd2UgcmV0dXJuIHRoYXQgd2UgcHJvbWlzZQogICAgKiB0aGF0IHRoZSBldl9xbXAgaXMg Q29ubmVjdGVkLgogICAgKi8KCj4gPiAqIFdoeSBhcmUgd2UgZXZlbiBkb2luZyBjYXBhYmlsaXR5 IG5lZ290YXRpb24gd2hlbiB3ZSB0aHJvdyB0aGUgYW5zd2VyCj4gPiAgIGF3YXkgPwo+IAo+IEl0 IGlzIHBhcnQgb2YgdGhlIHByb3RvY29sLgo+IAo+IEFuZCBxbXBfY2FwYWJpbGl0aWVzIGRvZXNu J3QgcmV0dXJuIGFueXRoaW5nIChqdXN0IGFuIGVtcHR5IG9iamVjdCkuCgpPaCwgaXMgdGhlIHB1 cnBvc2UgdG8gaW5mb3JtIHFlbXUgd2hhdCBvdXIgY2FwYWJpbGl0aWVzIGFyZSA/Cgo+ID4gKiBJ IHRoaW5rIGl0IHdvdWxkIGJlIGJldHRlciB0byBjaGVjayBpZCA9PSBldi0+aWQgZmlyc3QsIHJh dGhlcgo+ID4gICB0aGFuIGluIGVhY2ggb2YgdGhlc2UgYnJhbmNoZXMuCj4gCj4gSSBkb24ndCB0 aGluayBJIGZvbGxvdy4gaWQ9PWV2LT5pZCBpcyBvbmx5IGNoZWNrZWQgb25jZS4KCllvdSBjaGVj ayBpZCBhZ2FpbnN0IFFNUF9DQVBBQklMSVRZX05FR09USUFUSU9OX01TR0lEIHNlcGFyYXRlbHkg ZnJvbQp0aGUgY2hlY2sgYWdhaW5zdCBldi0+aWQuICBCdXQgbm93IHRoYXQgSSBzZWUgeW91IGhh dmUgZm9ybWF0dGVkIGJvdGgKY29tbWFuZHMgYW5kIG5lZWQgdG8gaGF2ZSBib3RoIGlkcywgSSdt IG5vdCBzdXJlIHRoYXQgY29tbWVudCBvZiBtaW5lCm1ha2VzIHNlbnNlLgoKPiBJIGRvbid0IHRo aW5rIGFsbCBFUlJPUiBzaG91bGQgYmUgcHJvdG9jb2wgZXJyb3IuIFRvIG1lLCBpdCBpcyBmaW5l IGlmIGEKPiBjb21tYW5kIHJldHVybnMgYW4gZXJyb3IsIHRoZW4gdGVsbCB0aGUgdXNlciBhYm91 dCBpdC4gQWxzbywgdGhlcmUgaXMgbm8KPiBuZWVkcyB0byB0ZWFyIGRvd24gdGhlIGNvbm5lY3Rp b24gaW4gdGhpcyBjYXNlLgoKU29ycnksIHllcy4KCj4gQXMgZm9yIHRoZSBzZXF1ZW5jZSBvZiBj aGVja3MsIEkgY2FuIHRyeSB0byBmb2xsb3cgaXQsIGl0IG1pZ2h0IGxvb2sKPiB3ZWlyZCBiZWNh dXNlIHRoZXJlIGlzIHR3byBkaWZmZXJlbnRzIGlkcyB0byBjaGVjaywgd2hpY2ggaWQgaXMgdmFs aWRlCj4gZGVwZW5kcyBvbiB0aGUgY3VycmVudCBzdGF0ZS4KCkkgdGhpbmsgeW91IGFyZSBwcm9i YWJseSByaWdodCBhYm91dCB0aGF0LgoKClRoYW5rcywKSWFuLgoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4t ZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9t YWlsbWFuL2xpc3RpbmZvL3hlbi1kZXZlbA==