From mboxrd@z Thu Jan 1 00:00:00 1970 From: Christopher Clark Subject: Re: [PATCH v3 07/15] argo: implement the register op Date: Mon, 14 Jan 2019 23:56:22 -0800 Message-ID: References: <1546846968-7372-1-git-send-email-christopher.w.clark@gmail.com> <1546846968-7372-8-git-send-email-christopher.w.clark@gmail.com> <5C3C9A5B020000780020D4A6@prv1-mh.provo.novell.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 1gjJaR-0002vV-Sd for xen-devel@lists.xenproject.org; Tue, 15 Jan 2019 07:56:40 +0000 Received: by mail-lj1-x230.google.com with SMTP id x85-v6so1504046ljb.2 for ; Mon, 14 Jan 2019 23:56:37 -0800 (PST) In-Reply-To: <5C3C9A5B020000780020D4A6@prv1-mh.provo.novell.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Jan Beulich Cc: Tim Deegan , Stefano Stabellini , Wei Liu , Ross Philipson , Jason Andryuk , Daniel Smith , Andrew Cooper , Konrad Rzeszutek Wilk , Ian Jackson , Rich Persaud , James McKenzie , George Dunlap , Julien Grall , Paul Durrant , xen-devel , eric chanudet , Roger Pau Monne List-Id: xen-devel@lists.xenproject.org T24gTW9uLCBKYW4gMTQsIDIwMTkgYXQgNjoxOSBBTSBKYW4gQmV1bGljaCA8SkJldWxpY2hAc3Vz ZS5jb20+IHdyb3RlOgo+Cj4gPj4+IE9uIDA3LjAxLjE5IGF0IDA4OjQyLCA8Y2hyaXN0b3BoZXIu dy5jbGFya0BnbWFpbC5jb20+IHdyb3RlOgo+ID4gLS0tIGEveGVuL2NvbW1vbi9hcmdvLmMKPiA+ ICsrKyBiL3hlbi9jb21tb24vYXJnby5jCj4gPiBAQCAtMjMsMTYgKzIzLDQxIEBACj4gPiAgI2lu Y2x1ZGUgPHhlbi9ldmVudC5oPgo+ID4gICNpbmNsdWRlIDx4ZW4vZG9tYWluX3BhZ2UuaD4KPiA+ ICAjaW5jbHVkZSA8eGVuL2d1ZXN0X2FjY2Vzcy5oPgo+ID4gKyNpbmNsdWRlIDx4ZW4vbGliLmg+ Cj4gPiArI2luY2x1ZGUgPHhlbi9ub3NwZWMuaD4KPiA+ICAjaW5jbHVkZSA8eGVuL3RpbWUuaD4K PiA+ICAjaW5jbHVkZSA8cHVibGljL2FyZ28uaD4KPiA+Cj4gPiArI2RlZmluZSBNQVhfUklOR1Nf UEVSX0RPTUFJTiAgICAgICAgICAgIDEyOFUKPiA+ICsKPiA+ICsvKiBBbGwgbWVzc2FnZXMgb24g dGhlIHJpbmcgYXJlIHBhZGRlZCB0byBhIG11bHRpcGxlIG9mIHRoZSBzbG90IHNpemUuICovCj4g PiArI2RlZmluZSBST1VORFVQX01FU1NBR0UoYSkgKFJPVU5EVVAoKGEpLCBYRU5fQVJHT19NU0df U0xPVF9TSVpFKSkKPgo+IFBvaW50bGVzcyBvdXRlcm1vc3QgcGFpciBvZiBwYXJlbnRoZXNlcy4K CmFjaywgcmVtb3ZlZAoKPgo+ID4gQEAgLTE5OCw2ICsyMjMsMzEgQEAgc3RhdGljIERFRklORV9S V0xPQ0soYXJnb19sb2NrKTsgLyogTDEgKi8KPiA+ICAjZGVmaW5lIGFyZ29fZHByaW50ayhmb3Jt YXQsIC4uLiApICgodm9pZCkwKQo+ID4gICNlbmRpZgo+ID4KPiA+ICsvKgo+ID4gKyAqIFRoaXMg aGFzaCBmdW5jdGlvbiBpcyB1c2VkIHRvIGRpc3RyaWJ1dGUgcmluZ3Mgd2l0aGluIHRoZSBwZXIt ZG9tYWluCj4gPiArICogaGFzaCB0YWJsZXMgKGQtPmFyZ28tPnJpbmdfaGFzaCBhbmQgZC0+YXJn b19zZW5kX2hhc2gpLiBUaGUgaGFzaCB0YWJsZQo+ID4gKyAqIHdpbGwgcHJvdmlkZSBhIHN0cnVj dCBpZiBhIG1hdGNoIGlzIGZvdW5kIHdpdGggYSAnYXJnb19yaW5nX2lkJyBrZXk6Cj4gPiArICog aWUuIHRoZSBrZXkgaXMgYSAoZG9tYWluIGlkLCBwb3J0LCBwYXJ0bmVyIGRvbWFpbiBpZCkgdHVw bGUuCj4gPiArICogU2luY2UgcG9ydCBudW1iZXIgdmFyaWVzIHRoZSBtb3N0IGluIGV4cGVjdGVk IHVzZSwgYW5kIHRoZSBMaW51eCBkcml2ZXIKPiA+ICsgKiBhbGxvY2F0ZXMgYXQgYm90aCB0aGUg aGlnaCBhbmQgbG93IGVuZHMsIGluY29ycG9yYXRlIGhpZ2ggYW5kIGxvdyBiaXRzIHRvCj4gPiAr ICogaGVscCB3aXRoIGRpc3RyaWJ1dGlvbi4KPiA+ICsgKiBBcHBseSBhcnJheV9pbmRleF9ub3Nw ZWMgYXMgYSBkZWZlbnNpdmUgbWVhc3VyZSBzaW5jZSB0aGlzIG9wZXJhdGVzCj4gPiArICogb24g dXNlci1zdXBwbGllZCBpbnB1dCBhbmQgdGhlIGFycmF5IHNpemUgdGhhdCBpdCBpbmRleGVzIGlu dG8gaXMga25vd24uCj4gPiArICovCj4gPiArc3RhdGljIHVuc2lnbmVkIGludAo+ID4gK2hhc2hf aW5kZXgoY29uc3Qgc3RydWN0IGFyZ29fcmluZ19pZCAqaWQpCj4gPiArewo+ID4gKyAgICB1bnNp Z25lZCBpbnQgaGFzaDsKPiA+ICsKPiA+ICsgICAgaGFzaCA9ICh1aW50MTZfdCkoaWQtPnBvcnQg Pj4gMTYpOwo+ID4gKyAgICBoYXNoIF49ICh1aW50MTZfdClpZC0+cG9ydDsKPgo+IEkgbWF5IGhh dmUgYXNrZWQgdGhpcyBiZWZvcmUsIGJ1dCBhcmUgdGhlIGNhc3RzIHJlYWxseSBuZWVkZWQKPiB3 aXRoIC4uLgo+Cj4gPiArICAgIGhhc2ggXj0gaWQtPmRvbWFpbl9pZDsKPiA+ICsgICAgaGFzaCBe PSBpZC0+cGFydG5lcl9pZDsKPiA+ICsgICAgaGFzaCAmPSAoQVJHT19IVEFCTEVfU0laRSAtIDEp Owo+Cj4gLi4uIHRoZSBtYXNraW5nIGRvbmUgaGVyZT8KPgo+ID4gKyAgICByZXR1cm4gYXJyYXlf aW5kZXhfbm9zcGVjKGhhc2gsIEFSR09fSFRBQkxFX1NJWkUpOwo+Cj4gV2l0aCB0aGUgbWFza2lu ZyBhYm92ZSAtIGlzIHRoaXMgcmVhbGx5IG5lZWRlZD8KPgo+IEFuZCB0aGVuIHRoZSBxdWVzdGlv biBpcyB3aGV0aGVyIHRoZSBxdWFsaXR5IG9mIHRoZSBoYXNoIGlzCj4gc3VmZmljaWVudDogVGhl cmUgd29uJ3QgYmUgbW9yZSBzZXQgYml0cyBpbiB0aGUgcmVzdWx0IHRoYW4KPiBhcmUgaW4gYW55 IG9mIHRoZSB0aHJlZSBpbnB1dCB2YWx1ZXMsIHNvIGlmIHRoZXkncmUgYWxsIHNtYWxsLAo+IGhp Z2hlciBoYXNoIHRhYmxlIGVudHJpZXMgd29uJ3QgYmUgdXNlZCBhdCBhbGwuIEkgd291bGQKPiBh c3N1bWUgdGhlIGdvYWwgdG8gYmUgdGhhdCBieSB0aGUgdGltZSAzMiBlbnRpdGllcyBhcHBlYXIs Cj4gY2hhbmNlcyBiZSBnb29kIHRoYXQgYXQgbGVhc3QgYWJvdXQgMzAgb2YgdGhlIGhhc2ggdGFi bGUKPiBlbnRyaWVzIGFyZSBpbiB1c2UuCgpvaywgSSdsbCByZXBsYWNlIHRoaXMgZnVuY3Rpb24g YW5kIGFkZHJlc3MgdGhlIGFib3ZlLgpJJ20gb3V0IG9mIHRpbWUgdG9kYXkgc28gaGF2ZSBhZGRl ZCBhIEZJWE1FIGZvciB0b2RheSdzIHNlcmllcyBwb3N0aW5nCmFuZCB3aWxsIGdldCBpdCBkb25l IHRvbW9ycm93LgoKPgo+ID4gQEAgLTIxOSw2ICsyNjksNzggQEAgcmluZ191bm1hcChzdHJ1Y3Qg YXJnb19yaW5nX2luZm8gKnJpbmdfaW5mbykKPiA+ICAgICAgfQo+ID4gIH0KPiA+Cj4gPiArc3Rh dGljIGludAo+ID4gK3JpbmdfbWFwX3BhZ2Uoc3RydWN0IGFyZ29fcmluZ19pbmZvICpyaW5nX2lu Zm8sIHVuc2lnbmVkIGludCBpLCB2b2lkICoqb3V0X3B0cikKPiA+ICt7Cj4gPiArICAgIGlmICgg aSA+PSByaW5nX2luZm8tPm5tZm5zICkKPiA+ICsgICAgewo+ID4gKyAgICAgICAgZ3ByaW50ayhY RU5MT0dfRVJSLAo+ID4gKyAgICAgICAgICAgICAgICJhcmdvOiByaW5nICh2bSV1OiV4IHZtJWQp ICVwIGF0dGVtcHRlZCB0byBtYXAgcGFnZSAgJXUgb2YgJXVcbiIsCj4KPiByaW5nX2luZm8tPmlk Lntkb21haW4scGFydG5lcn1faWQgbG9vayB0byBiZSBvZiB0aGUgc2FtZSB0eXBlIC0KPiB3aHkg b25jZSAldSBhbmQgb25jZSAlZD8gU2FtZSBlbHNld2hlcmUuCgpGaXhlZCBhY3Jvc3MgdGhlIHNl cmllcyB0byB1c2UgJXUgZm9yIGRvbWlkX3Qgb3V0cHV0LgoKPgo+ID4gKyAgICAgICAgICAgICAg ICByaW5nX2luZm8tPmlkLmRvbWFpbl9pZCwgcmluZ19pbmZvLT5pZC5wb3J0LAo+ID4gKyAgICAg ICAgICAgICAgICByaW5nX2luZm8tPmlkLnBhcnRuZXJfaWQsIHJpbmdfaW5mbywgaSwgcmluZ19p bmZvLT5ubWZucyk7Cj4gPiArICAgICAgICByZXR1cm4gLUVOT01FTTsKPiA+ICsgICAgfQo+Cj4g ICAgIGkgPSBhcnJheV9pbmRleF9ub3NwZWMoaSwgcmluZ19pbmZvLT5ubWZucyk7Cj4KPiBjb25z aWRlcmluZyB0aGUgYXJyYXkgaW5kZXhlcyBoZXJlPyBPZiBjb3Vyc2UgYXQgdGhpcyBwb2ludCBv bmx5Cj4gemVybyBjYW4gYmUgcGFzc2VkIGluLCBidXQgSSBhc3N1bWUgdGhpcyBjaGFuZ2VzIGlu IGxhdGVyIHBhdGNoZXMKPiBhbmQgdGhlIGluZGV4IGlzIGF0IGxlYXN0IGluZGlyZWN0bHkgZ3Vl c3QgY29udHJvbGxlZC4KCkFkZGVkLCB0aGFua3MuCgo+Cj4gPiBAQCAtMzcxLDYgKzQ5Myw0MTgg QEAgcGFydG5lcl9yaW5nc19yZW1vdmUoc3RydWN0IGRvbWFpbiAqc3JjX2QpCj4gPiAgICAgIH0K PiA+ICB9Cj4gPgo+ID4gK3N0YXRpYyBpbnQKPiA+ICtmaW5kX3JpbmdfbWZuKHN0cnVjdCBkb21h aW4gKmQsIGdmbl90IGdmbiwgbWZuX3QgKm1mbikKPgo+IFNvIHlvdSBoYXZlIGZpbmRfcmluZ19t Zm4oKSwgZmluZF9yaW5nX21mbnMoKSwgYW5kIHJpbmdfZmluZF9pbmZvKCkuCj4gQW55IGNoYW5j ZSB5b3UgY291bGQgdXNlIGEgY29uc2lzdGVudCBvcmRlcmluZyBvZiAicmluZyIgYW5kICJmaW5k Ij8KPiBPciBpcyB0aGVyZSBhIHJlYXNvbiBiZWhpbmQgdGhlIGFwcGFyZW50IG1pc21hdGNoPwoK SSd2ZSByZW5hbWVkIHRoZW0gdG8gdXNlICdmaW5kXycgYXMgdGhlIGNvbW1vbiBwcmVmaXguIExv b2sgY2xlYW5lciB0bwptZS4gdGhhbmtzLgoKPgo+ID4gK3sKPiA+ICsgICAgcDJtX3R5cGVfdCBw Mm10Owo+ID4gKyAgICBpbnQgcmV0ID0gMDsKPiA+ICsKPiA+ICsjaWZkZWYgQ09ORklHX1g4Ngo+ ID4gKyAgICAqbWZuID0gZ2V0X2dmbl91bnNoYXJlKGQsIGdmbl94KGdmbiksICZwMm10KTsKPiA+ ICsjZWxzZQo+ID4gKyAgICAqbWZuID0gcDJtX2xvb2t1cChkLCBnZm4sICZwMm10KTsKPiA+ICsj ZW5kaWYKPiA+ICsKPiA+ICsgICAgaWYgKCAhbWZuX3ZhbGlkKCptZm4pICkKPiA+ICsgICAgICAg IHJldCA9IC1FSU5WQUw7Cj4gPiArI2lmZGVmIENPTkZJR19YODYKPiA+ICsgICAgZWxzZSBpZiAo IHAybV9pc19wYWdpbmcocDJtdCkgfHwgKHAybXQgPT0gcDJtX3JhbV9sb2dkaXJ0eSkgKQo+ID4g KyAgICAgICAgcmV0ID0gLUVBR0FJTjsKPiA+ICsjZW5kaWYKPiA+ICsgICAgZWxzZSBpZiAoIChw Mm10ICE9IHAybV9yYW1fcncpIHx8Cj4gPiArICAgICAgICAgICAgICAhZ2V0X3BhZ2VfYW5kX3R5 cGUobWZuX3RvX3BhZ2UoKm1mbiksIGQsIFBHVF93cml0YWJsZV9wYWdlKSApCj4gPiArICAgICAg ICByZXQgPSAtRUlOVkFMOwo+ID4gKwo+ID4gKyNpZmRlZiBDT05GSUdfWDg2Cj4gPiArICAgIHB1 dF9nZm4oZCwgZ2ZuX3goZ2ZuKSk7Cj4gPiArI2VuZGlmCj4gPiArCj4gPiArICAgIHJldHVybiBy ZXQ7Cj4gPiArfQo+Cj4gUGxlYXNlIGNoZWNrIHdoZXRoZXIgeW91IGNvdWxkIGxldmVyYWdlIGNo ZWNrX2dldF9wYWdlX2Zyb21fZ2ZuKCkKPiBoZXJlLiBJZiB5b3UgY2FuJ3QsIHBsZWFzZSBhdCBs ZWFzdCB0YWtlIGluc3BpcmF0aW9uIGFzIHRvIGUuZy4gdGhlCj4gI2lmZGVmLXMgZnJvbSB0aGF0 IGZ1bmN0aW9uLgoKSGF2ZSBhZGRlZCBhIHRlbXBvcmFyeSBGSVhNRSBmb3IgdGhpcyBhbmQgd2ls bCBkbyB0aGlzIHRvbW9ycm93LgoKPgo+ID4gK3N0YXRpYyBpbnQKPiA+ICtmaW5kX3JpbmdfbWZu cyhzdHJ1Y3QgZG9tYWluICpkLCBzdHJ1Y3QgYXJnb19yaW5nX2luZm8gKnJpbmdfaW5mbywKPiA+ ICsgICAgICAgICAgICAgICB1aW50MzJfdCBucGFnZSwKPiA+ICsgICAgICAgICAgICAgICBYRU5f R1VFU1RfSEFORExFX1BBUkFNKHhlbl9hcmdvX3BhZ2VfZGVzY3JfdCkgcGdfZGVzY3JfaG5kLAo+ ID4gKyAgICAgICAgICAgICAgIHVpbnQzMl90IGxlbikKPgo+IE5vdGljaW5nIGl0IGhlcmUsIGJ1 dCBwZXJoYXBzIHN0aWxsIGFuIGlzc3VlIGVsc2V3aGVyZSBhcyB3ZWxsOiBEaWRuJ3QKPiB3ZSBh Z3JlZSBvbiByZW1vdmluZyB1bm5lY2Vzc2FyeSB1c2Ugb2YgZml4ZWQgd2lkdGggdHlwZXM/IE9y Cj4gd2FzIHRoYXQgaW4gdGhlIGNvbnRleHQgb24gYW4gZWFybGllciBwYXRjaCBvZiB2Mz8KClRo ZXNlIGFyZSBmaXhlZCBhbmQgaG9wZWZ1bGx5IGFsbCB0aGUgb3RoZXJzIHRoYXQgZG8gbm90IGJl bG9uZyBhcmUKYWxzbyBnb25lIGluIHY0LgoKPgo+ID4gK3sKPiA+ICsgICAgdW5zaWduZWQgaW50 IGk7Cj4gPiArICAgIGludCByZXQgPSAwOwo+ID4gKyAgICBtZm5fdCAqbWZuczsKPiA+ICsgICAg dWludDhfdCAqKm1mbl9tYXBwaW5nOwo+ID4gKwo+ID4gKyAgICAvKgo+ID4gKyAgICAgKiBmaXJz dCBib3VuZHMgY2hlY2sgb24gbnBhZ2UgaGVyZSBhbHNvIHNlcnZlcyBhcyBhbiBvdmVyZmxvdyBj aGVjawo+ID4gKyAgICAgKiBiZWZvcmUgbGVmdCBzaGlmdGluZyBpdAo+ID4gKyAgICAgKi8KPiA+ ICsgICAgaWYgKCAodW5saWtlbHkobnBhZ2UgPiAoWEVOX0FSR09fTUFYX1JJTkdfU0laRSA+PiBQ QUdFX1NISUZUKSkpIHx8Cj4KPiBJc24ndCB0aGlzIHJlZHVuZGFudCB3aXRoIHRoZSBjaGVjayBp biBkb19hcmdvX3AoKT8KPgo+ID4gKyAgICAgICAgICgobnBhZ2UgPDwgUEFHRV9TSElGVCkgPCBs ZW4pICkKPiA+ICsgICAgICAgIHJldHVybiAtRUlOVkFMOwoKQW5zd2VyaW5nIHlvdXIgcG9pbnQg aW5saW5lIGFib3ZlOiBZZXMgLSBkb19hcmdvX29wIGRvZXMgdGhlIGJvdW5kcwpjaGVja2luZywg c28gSSd2ZSByZW1vdmVkIHRoZSBlbnRpcmUgY2hlY2sgYWJvdmUuCgo+ID4gKwo+ID4gKyAgICBp ZiAoIHJpbmdfaW5mby0+bWZucyApCj4gPiArICAgIHsKPiA+ICsgICAgICAgIC8qIFJpbmcgYWxy ZWFkeSBleGlzdGVkOiBkcm9wIHRoZSBwcmV2aW91cyBtYXBwaW5nLiAqLwo+ID4gKyAgICAgICAg Z3ByaW50ayhYRU5MT0dfSU5GTywKPiA+ICsgICAgICAgICAiYXJnbzogdm0ldSByZS1yZWdpc3Rl ciBleGlzdGluZyByaW5nICh2bSV1OiV4IHZtJWQpIGNsZWFycyBtYXBwaW5nXG4iLAo+Cj4gSW5k ZW50YXRpb24gKGFsc28gZWxzZXdoZXJlKS4KCkFjaywgZml4ZWQgaGVyZSBhbmQgZWxzZXdoZXJl LgoKPgo+ID4gKyAgICAgICAgICAgICAgICBkLT5kb21haW5faWQsIHJpbmdfaW5mby0+aWQuZG9t YWluX2lkLAo+ID4gKyAgICAgICAgICAgICAgICByaW5nX2luZm8tPmlkLnBvcnQsIHJpbmdfaW5m by0+aWQucGFydG5lcl9pZCk7Cj4gPiArCj4gPiArICAgICAgICByaW5nX3JlbW92ZV9tZm5zKGQs IHJpbmdfaW5mbyk7Cj4gPiArICAgICAgICBBU1NFUlQoIXJpbmdfaW5mby0+bWZucyk7Cj4gPiAr ICAgIH0KPiA+ICsKPiA+ICsgICAgbWZucyA9IHhtYWxsb2NfYXJyYXkobWZuX3QsIG5wYWdlKTsK PiA+ICsgICAgaWYgKCAhbWZucyApCj4gPiArICAgICAgICByZXR1cm4gLUVOT01FTTsKPiA+ICsK PiA+ICsgICAgZm9yICggaSA9IDA7IGkgPCBucGFnZTsgaSsrICkKPiA+ICsgICAgICAgIG1mbnNb aV0gPSBJTlZBTElEX01GTjsKPiA+ICsKPiA+ICsgICAgbWZuX21hcHBpbmcgPSB4emFsbG9jX2Fy cmF5KHVpbnQ4X3QgKiwgbnBhZ2UpOwo+ID4gKyAgICBpZiAoICFtZm5fbWFwcGluZyApCj4gPiAr ICAgIHsKPiA+ICsgICAgICAgIHhmcmVlKG1mbnMpOwo+ID4gKyAgICAgICAgcmV0dXJuIC1FTk9N RU07Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgcmluZ19pbmZvLT5ucGFnZSA9IG5wYWdlOwo+ ID4gKyAgICByaW5nX2luZm8tPm1mbnMgPSBtZm5zOwo+ID4gKyAgICByaW5nX2luZm8tPm1mbl9t YXBwaW5nID0gbWZuX21hcHBpbmc7Cj4KPiBBcyB0aGUgaW52ZXJzZSB0byB0aGUgY2xlYW51cCBz ZXF1ZW5jZSBpbiBhbiBlYXJsaWVyIHBhdGNoOiBQbGVhc2UKPiBzZXQgLT5ucGFnZSBsYXN0IGhl cmUgZXZlbiBpZiBpdCBkb2Vzbid0IHN0cmljdGx5IG1hdHRlci4KCm5wYWdlIGlzIG5vdyBnb25l IGFmdGVyIGltcGxlbWVudGluZyBSb2dlcidzIGZlZWRiYWNrIHRvIG9ubHkga2VlcCAibGVuIi4K Cj4KPiA+ICsgICAgQVNTRVJUKHJpbmdfaW5mby0+bnBhZ2UgPT0gbnBhZ2UpOwo+Cj4gV2hhdCBp cyB0aGlzIHRyeWluZyB0byBtYWtlIHN1cmUsIHNlZWluZyB0aGUgYXNzaWdubWVudCBqdXN0IGEK PiBmZXcgbGluZXMgdXA/CgpyZW1vdmVkCgo+Cj4gPiArICAgIGlmICggcmluZ19pbmZvLT5ubWZu cyA9PSByaW5nX2luZm8tPm5wYWdlICkKPiA+ICsgICAgICAgIHJldHVybiAwOwo+Cj4gQ2FuIHRo aXMgaGFwcGVuIHdpdGggdGhlIHJpbmdfcmVtb3ZlX21mbnMoKSBjYWxsIGFib3ZlPwoKTm8sIG5v dCBhbnkgbW9yZSwgeW91J3JlIHJpZ2h0LgoKPgo+ID4gKyAgICBmb3IgKCBpID0gcmluZ19pbmZv LT5ubWZuczsgaSA8IHJpbmdfaW5mby0+bnBhZ2U7IGkrKyApCj4KPiBBbmQgaGVuY2UgY2FuIGkg c3RhcnQgZnJvbSBvdGhlciB0aGFuIHplcm8gaGVyZT8gQW5kIHdoeSBub3QKPiB1c2UgdGhlIChw b3NzaWJseSBjaGVhcGVyIHRvIGFjY2VzcykgZnVuY3Rpb24gYXJndW1lbnQgIm5wYWdlIgo+IGFz IHRoZSBsb29wIHVwcGVyIGJvdW5kPyBUaGUgb3RoZXIgc2ltaWxhciBsb29wIGEgZmV3IGxpbmVz IHVwCj4gaXMgY29kZWQgdGhhdCBzaW1wbGVyIHdheS4KClllcywgdGhhbmtzLCBkb25lLgoKPgo+ ID4gK3N0YXRpYyBsb25nCj4gPiArcmVnaXN0ZXJfcmluZyhzdHJ1Y3QgZG9tYWluICpjdXJyZCwK PiA+ICsgICAgICAgICAgICAgIFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0oeGVuX2FyZ29fcmVnaXN0 ZXJfcmluZ190KSByZWdfaG5kLAo+ID4gKyAgICAgICAgICAgICAgWEVOX0dVRVNUX0hBTkRMRV9Q QVJBTSh4ZW5fYXJnb19wYWdlX2Rlc2NyX3QpIHBnX2Rlc2NyX2huZCwKPiA+ICsgICAgICAgICAg ICAgIHVpbnQzMl90IG5wYWdlLCBib29sIGZhaWxfZXhpc3QpCj4gPiArewo+ID4gKyAgICB4ZW5f YXJnb19yZWdpc3Rlcl9yaW5nX3QgcmVnOwo+ID4gKyAgICBzdHJ1Y3QgYXJnb19yaW5nX2lkIHJp bmdfaWQ7Cj4gPiArICAgIHZvaWQgKm1hcF9yaW5ncDsKPiA+ICsgICAgeGVuX2FyZ29fcmluZ190 ICpyaW5ncDsKPiA+ICsgICAgc3RydWN0IGFyZ29fcmluZ19pbmZvICpyaW5nX2luZm87Cj4gPiAr ICAgIHN0cnVjdCBhcmdvX3NlbmRfaW5mbyAqc2VuZF9pbmZvID0gTlVMTDsKPiA+ICsgICAgc3Ry dWN0IGRvbWFpbiAqZHN0X2QgPSBOVUxMOwo+ID4gKyAgICBpbnQgcmV0ID0gMDsKPiA+ICsgICAg dWludDMyX3QgcHJpdmF0ZV90eF9wdHI7Cj4gPiArCj4gPiArICAgIGlmICggY29weV9mcm9tX2d1 ZXN0KCZyZWcsIHJlZ19obmQsIDEpICkKPiA+ICsgICAgewo+ID4gKyAgICAgICAgcmV0ID0gLUVG QVVMVDsKPiA+ICsgICAgICAgIGdvdG8gb3V0Owo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIC8q Cj4gPiArICAgICAqIEEgcmluZyBtdXN0IGJlIGxhcmdlIGVub3VnaCB0byB0cmFuc21pdCBtZXNz YWdlcywgc28gcmVxdWlyZXMgc3BhY2UgZm9yOgo+ID4gKyAgICAgKiAqIDEgbWVzc2FnZSBoZWFk ZXIsIHBsdXMKPiA+ICsgICAgICogKiAxIHBheWxvYWQgc2xvdCAocGF5bG9hZCBpcyBhbHdheXMg cm91bmRlZCB0byBhIG11bHRpcGxlIG9mIDE2IGJ5dGVzKQo+ID4gKyAgICAgKiAgIGZvciB0aGUg bWVzc2FnZSBwYXlsb2FkIHRvIGJlIHdyaXR0ZW4gaW50bywgcGx1cwo+ID4gKyAgICAgKiAqIDEg bW9yZSBzbG90LCBzbyB0aGF0IHRoZSByaW5nIGNhbm5vdCBiZSBmaWxsZWQgdG8gY2FwYWNpdHkg d2l0aCBhCj4gPiArICAgICAqICAgc2luZ2xlIG1lc3NhZ2UgLS0gc2VlIHRoZSBsb2dpYyBpbiBy aW5nYnVmX2luc2VydCAtLSBhbGxvd2luZyBmb3IgdGhpcwo+ID4gKyAgICAgKiAgIGVuc3VyZXMg dGhhdCB0aGVyZSBjYW4gYmUgc3BhY2UgcmVtYWluaW5nIHdoZW4gYSBtZXNzYWdlIGlzIHByZXNl bnQuCj4gPiArICAgICAqIFRoZSBhYm92ZSBkZXRlcm1pbmVzIHRoZSBtaW5pbXVtIGFjY2VwdGFi bGUgcmluZyBzaXplLgo+ID4gKyAgICAgKi8KPiA+ICsgICAgaWYgKCAocmVnLmxlbiA8IChzaXpl b2Yoc3RydWN0IHhlbl9hcmdvX3JpbmdfbWVzc2FnZV9oZWFkZXIpCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICsgUk9VTkRVUF9NRVNTQUdFKDEpICsgUk9VTkRVUF9NRVNTQUdFKDEpKSkgfHwK Pgo+IFRoZXNlIHR3byBzdW1tYW5kcyBkb24ndCBsb29rIHRvIGZ1bGZpbGwgdGhlICJjYW5ub3Qg YmUgZmlsbGVkIHRvCj4gY2FwYWNpdHkiIGNvbnN0cmFpbnQgdGhlIGNvbW1lbnQgZGVzY3JpYmVz LCBhcyAoYWl1aSkgbWVzc2FnZXMKPiBjYW4gYmUgbGFyZ2VyIHRoYW4gMTYgYnl0ZXMuIFdoYXQn cyB0aGUgZGVhbD8KClRoaXMgaXMgaW50ZW5kZWQgdG8gYmUgYWJvdXQgYm91bmQgY2hlY2tpbmcg cmVnLmxlbiBhZ2FpbnN0IGEgbWluaW11bQpzaXplOiB0aGUgc21hbGxlc3QgcmluZyB0aGF0IHlv dSBjYW4gZml0IGEgbWVzc2FnZSBvbnRvLCBhcyBkZXRlcm1pbmVkCmJ5IHRoZSBsb2dpYyBpbiBy aW5nYnVmX2luc2VydC4gVGhlIHNtYWxsZXN0IG1lc3NhZ2UgeW91IGNhbiBzZW5kIGlzOgpzaXpl b2Yoc3RydWN0IHhlbl9hcmdvX3JpbmdfbWVzc2FnZV9oZWFkZXIpICsgUk9VTkRVUF9NRVNTQUdF KDEpCgphbmQgdGhlbiByaW5nYnVmX2luc2VydCB3b24ndCBhY2NlcHQgYSBtZXNzYWdlIHVubGVz cyB0aGVyZSBpcyAoYXQKbGVhc3QpIFJPVU5EVVBfTUVTU0FHRSgxKSBzcGFjZSByZW1haW5pbmcs IHNvIHRoYXQsIHBsdXMgdGhlIHNtYWxsZXN0Cm1lc3NhZ2Ugc2l6ZSwgaXMgdGhlIHNtYWxsZXN0 IHZpYWJsZSByaW5nLiBUaGVyZSdzIG5vIHBvaW50IGFjY2VwdGluZwpyZWdpc3RyYXRpb24gb2Yg YSByaW5nIHNtYWxsZXIgdGhhbiB0aGF0LgoKWW91J3JlIHJpZ2h0IHRoYXQgbWVzc2FnZXMgY2Fu IGJlIGxhcmdlciB0aGFuIDE2IGJ5dGVzLCBidXQgdGhleSBjYW4Kb25seSBiZSBzZW50IHRvIHJp bmdzIHRoYXQgYXJlIGxhcmdlciB0aGFuIHRoYXQgbWluaW11bSAtIG9uIGEgbWluaW11bQpzaXpl ZCByaW5nLCB0aGV5J2xsIGJlIHJlamVjdGVkIGJ5IHNlbmR2LgoKPgo+ID4gKyAgICAgICAgIChy ZWcubGVuID4gWEVOX0FSR09fTUFYX1JJTkdfU0laRSkgfHwKPiA+ICsgICAgICAgICAocmVnLmxl biAhPSBST1VORFVQX01FU1NBR0UocmVnLmxlbikpIHx8Cj4gPiArICAgICAgICAgKHJlZy5wYWQg IT0gMCkgKQo+ID4gKyAgICB7Cj4gPiArICAgICAgICByZXQgPSAtRUlOVkFMOwo+ID4gKyAgICAg ICAgZ290byBvdXQ7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgcmluZ19pZC5wYXJ0bmVyX2lk ID0gcmVnLnBhcnRuZXJfaWQ7Cj4gPiArICAgIHJpbmdfaWQucG9ydCA9IHJlZy5wb3J0Owo+ID4g KyAgICByaW5nX2lkLmRvbWFpbl9pZCA9IGN1cnJkLT5kb21haW5faWQ7Cj4gPiArCj4gPiArICAg IHJlYWRfbG9jaygmYXJnb19sb2NrKTsKPgo+IEZyb20gaGVyZSB0byAuLi4KPgo+ID4gKyAgICBp ZiAoICFjdXJyZC0+YXJnbyApCj4gPiArICAgIHsKPiA+ICsgICAgICAgIHJldCA9IC1FTk9ERVY7 Cj4gPiArICAgICAgICBnb3RvIG91dF91bmxvY2s7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAg aWYgKCByZWcucGFydG5lcl9pZCA9PSBYRU5fQVJHT19ET01JRF9BTlkgKQo+ID4gKyAgICB7Cj4g PiArICAgICAgICBpZiAoIG9wdF9hcmdvX21hY19lbmZvcmNpbmcgKQo+ID4gKyAgICAgICAgewo+ ID4gKyAgICAgICAgICAgIHJldCA9IC1FUEVSTTsKPiA+ICsgICAgICAgICAgICBnb3RvIG91dF91 bmxvY2s7Cj4gPiArICAgICAgICB9Cj4gPiArICAgIH0KPiA+ICsgICAgZWxzZQo+ID4gKyAgICB7 Cj4gPiArICAgICAgICBkc3RfZCA9IGdldF9kb21haW5fYnlfaWQocmVnLnBhcnRuZXJfaWQpOwo+ ID4gKyAgICAgICAgaWYgKCAhZHN0X2QgKQo+ID4gKyAgICAgICAgewo+ID4gKyAgICAgICAgICAg IGFyZ29fZHByaW50aygiIWRzdF9kLCBFU1JDSFxuIik7Cj4gPiArICAgICAgICAgICAgcmV0ID0g LUVTUkNIOwo+ID4gKyAgICAgICAgICAgIGdvdG8gb3V0X3VubG9jazsKPiA+ICsgICAgICAgIH0K PiA+ICsKPiA+ICsgICAgICAgIGlmICggIWRzdF9kLT5hcmdvICkKPiA+ICsgICAgICAgIHsKPiA+ ICsgICAgICAgICAgICBhcmdvX2RwcmludGsoIiFkc3RfZC0+YXJnbywgRUNPTk5SRUZVU0VEXG4i KTsKPiA+ICsgICAgICAgICAgICByZXQgPSAtRUNPTk5SRUZVU0VEOwo+ID4gKyAgICAgICAgICAg IHB1dF9kb21haW4oZHN0X2QpOwo+ID4gKyAgICAgICAgICAgIGdvdG8gb3V0X3VubG9jazsKPiA+ ICsgICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgIHNlbmRfaW5mbyA9IHh6YWxsb2Moc3RydWN0 IGFyZ29fc2VuZF9pbmZvKTsKPiA+ICsgICAgICAgIGlmICggIXNlbmRfaW5mbyApCj4gPiArICAg ICAgICB7Cj4gPiArICAgICAgICAgICAgcmV0ID0gLUVOT01FTTsKPiA+ICsgICAgICAgICAgICBw dXRfZG9tYWluKGRzdF9kKTsKPiA+ICsgICAgICAgICAgICBnb3RvIG91dF91bmxvY2s7Cj4gPiAr ICAgICAgICB9Cj4gPiArICAgICAgICBzZW5kX2luZm8tPmlkID0gcmluZ19pZDsKPiA+ICsgICAg fQo+Cj4gLi4uIGhlcmUsIHdoYXQgZXhhY3RseSBpcyBpdCB0aGF0IHJlcXVpcmVzIHRoZSBnbG9i YWwgcmVhZCBsb2NrCj4gdG8gYmUgaGVsZCAuLi4KPgo+ID4gKyAgICB3cml0ZV9sb2NrKCZjdXJy ZC0+YXJnby0+bG9jayk7Cj4KPiAuLi4gcHJpb3IgdG8gdGhpcz8gSG9sZGluZyBsb2NrcyBhcm91 bmQgYWxsb2NhdGlvbnMgaXMgbm90Cj4gZm9yYmlkZGVuLCBidXQgc2hvdWxkIGJlIGF2b2lkZWQg d2hlbmV2ZXIgcG9zc2libGUuCj4KPiBBbmQgdGhlbiBmdXJ0aGVyIHdoeSBkb2VzIHRoZSBnbG9i YWwgcmVhZCBsb2NrIG5lZWQKPiBjb250aW51ZWQgaG9sZGluZyB1bnRpbCB0aGUgZW5kIG9mIHRo ZSBmdW5jdGlvbj8KCkkndmUgYWRkZWQgRklYTUUgdG8gcmV2aWV3IHRoaXMgdG9tb3Jyb3cuIEkg dW5kZXJzdGFuZCB0aGUKYXJnby1pbnRlcm5hbCBsb2NraW5nIHByb3RvY29scyBhbmQgdGhpcyBp cyBhZGhlcmluZyB0byB3aGF0IHRoZXkKc3RhdGUsIGluIHRoYXQgYWNjZXNzZXMgdG8gdGhlIGFy Z28gc3RydWN0cyBvZiBjdXJyZCBhbmQgZHN0X2QgYXJlCnByb3RlY3RlZCBieSB0aGUgZ2xvYmFs IHJlYWQgbG9jayBoZXJlLCBidXQgYXQgdGhlIG1vbWVudCBJJ20gbGVzcwpjbGVhciBvbiB3aGF0 IHRoZSBleHBlY3RhdGlvbnMgYXJlIGZvciBzdGFuZGFyZCBYZW4gZG9tYWluIGxvY2tzLApyZWZl cmVuY2VzIGFuZCBsaWZlY3ljbGUgYXJlLgoKPgo+ID4gKyAgICBpZiAoIGN1cnJkLT5hcmdvLT5y aW5nX2NvdW50ID49IE1BWF9SSU5HU19QRVJfRE9NQUlOICkKPiA+ICsgICAgewo+ID4gKyAgICAg ICAgcmV0ID0gLUVOT1NQQzsKPiA+ICsgICAgICAgIGdvdG8gb3V0X3VubG9jazI7Cj4gPiArICAg IH0KPiA+ICsKPiA+ICsgICAgcmluZ19pbmZvID0gcmluZ19maW5kX2luZm8oY3VycmQsICZyaW5n X2lkKTsKPiA+ICsgICAgaWYgKCAhcmluZ19pbmZvICkKPiA+ICsgICAgewo+ID4gKyAgICAgICAg cmluZ19pbmZvID0geHphbGxvYyhzdHJ1Y3QgYXJnb19yaW5nX2luZm8pOwo+ID4gKyAgICAgICAg aWYgKCAhcmluZ19pbmZvICkKPiA+ICsgICAgICAgIHsKPiA+ICsgICAgICAgICAgICByZXQgPSAt RU5PTUVNOwo+ID4gKyAgICAgICAgICAgIGdvdG8gb3V0X3VubG9jazI7Cj4gPiArICAgICAgICB9 Cj4gPiArCj4gPiArICAgICAgICBzcGluX2xvY2tfaW5pdCgmcmluZ19pbmZvLT5sb2NrKTsKPiA+ ICsKPiA+ICsgICAgICAgIHJpbmdfaW5mby0+aWQgPSByaW5nX2lkOwo+ID4gKyAgICAgICAgSU5J VF9ITElTVF9IRUFEKCZyaW5nX2luZm8tPnBlbmRpbmcpOwo+ID4gKwo+ID4gKyAgICAgICAgaGxp c3RfYWRkX2hlYWQoJnJpbmdfaW5mby0+bm9kZSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICZjdXJyZC0+YXJnby0+cmluZ19oYXNoW2hhc2hfaW5kZXgoJnJpbmdfaW5mby0+aWQpXSk7Cj4g PiArCj4gPiArICAgICAgICBncHJpbnRrKFhFTkxPR19ERUJVRywgImFyZ286IHZtJXUgcmVnaXN0 ZXJpbmcgcmluZyAodm0ldToleCB2bSVkKVxuIiwKPiA+ICsgICAgICAgICAgICAgICAgY3VycmQt PmRvbWFpbl9pZCwgcmluZ19pZC5kb21haW5faWQsIHJpbmdfaWQucG9ydCwKPiA+ICsgICAgICAg ICAgICAgICAgcmluZ19pZC5wYXJ0bmVyX2lkKTsKPiA+ICsgICAgfQo+ID4gKyAgICBlbHNlCj4g PiArICAgIHsKPiA+ICsgICAgICAgIGlmICggcmluZ19pbmZvLT5sZW4gKQo+ID4gKyAgICAgICAg ewo+Cj4gUGxlYXNlIGZvbGQgaW50byAiZWxzZSBpZiAoICkiLCByZW1vdmluZyBhIGxldmVsIG9m IGluZGVudGF0aW9uLgoKYWNrLCBkb25lCgo+Cj4gPiArICAgICAgICAgICAgLyoKPiA+ICsgICAg ICAgICAgICAgKiBJZiB0aGUgY2FsbGVyIHNwZWNpZmllZCB0aGF0IHRoZSByaW5nIG11c3Qgbm90 IGFscmVhZHkgZXhpc3QsCj4gPiArICAgICAgICAgICAgICogZmFpbCBhdCBhdHRlbXB0IHRvIGFk ZCBhIGNvbXBsZXRlZCByaW5nIHdoaWNoIGFscmVhZHkgZXhpc3RzLgo+ID4gKyAgICAgICAgICAg ICAqLwo+ID4gKyAgICAgICAgICAgIGlmICggZmFpbF9leGlzdCApCj4gPiArICAgICAgICAgICAg ewo+ID4gKyAgICAgICAgICAgICAgICBhcmdvX2RwcmludGsoImRpc2FsbG93ZWQgcmVyZWdpc3Ry YXRpb24gb2YgZXhpc3RpbmcgcmluZ1xuIik7Cj4gPiArICAgICAgICAgICAgICAgIHJldCA9IC1F RVhJU1Q7Cj4gPiArICAgICAgICAgICAgICAgIGdvdG8gb3V0X3VubG9jazI7Cj4gPiArICAgICAg ICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICAgICAgIGlmICggcmluZ19pbmZvLT5sZW4gIT0gcmVn LmxlbiApCj4gPiArICAgICAgICAgICAgewo+ID4gKyAgICAgICAgICAgICAgICAvKgo+ID4gKyAg ICAgICAgICAgICAgICAgKiBDaGFuZ2Ugb2YgcmluZyBzaXplIGNvdWxkIHJlc3VsdCBpbiBlbnRy aWVzIG9uIHRoZSBwZW5kaW5nCj4gPiArICAgICAgICAgICAgICAgICAqIG5vdGlmaWNhdGlvbnMg bGlzdCB0aGF0IHdpbGwgbmV2ZXIgdHJpZ2dlci4KPiA+ICsgICAgICAgICAgICAgICAgICogU2lt cGxlIGJsdW50IHNvbHV0aW9uOiBkaXNhbGxvdyByaW5nIHJlc2l6ZSBmb3Igbm93Lgo+ID4gKyAg ICAgICAgICAgICAgICAgKiBUT0RPOiBpbnZlc3RpZ2F0ZSBlbmFibGluZyByaW5nIHJlc2l6ZS4K PiA+ICsgICAgICAgICAgICAgICAgICovCj4gPiArICAgICAgICAgICAgICAgIGdwcmludGsoWEVO TE9HX0VSUiwKPiA+ICsgICAgICAgICAgICAgICAgICAgICJhcmdvOiB2bSV1IGF0dGVtcHRlZCB0 byBjaGFuZ2UgcmluZyBzaXplKHZtJXU6JXggdm0lZClcbiIsCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgY3VycmQtPmRvbWFpbl9pZCwgcmluZ19pZC5kb21haW5faWQsIHJpbmdfaWQucG9y dCwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICByaW5nX2lkLnBhcnRuZXJfaWQpOwo+ID4g KyAgICAgICAgICAgICAgICAvKgo+ID4gKyAgICAgICAgICAgICAgICAgKiBDb3VsZCByZXR1cm4g RUlOVkFMIGhlcmUsIGJ1dCBpZiB0aGUgcmluZyBkaWRuJ3QgYWxyZWFkeQo+ID4gKyAgICAgICAg ICAgICAgICAgKiBleGlzdCB0aGVuIHRoZSBhcmd1bWVudHMgd291bGQgaGF2ZSBiZWVuIHZhbGlk LCBzbzogRUVYSVNULgo+ID4gKyAgICAgICAgICAgICAgICAgKi8KPiA+ICsgICAgICAgICAgICAg ICAgcmV0ID0gLUVFWElTVDsKPiA+ICsgICAgICAgICAgICAgICAgZ290byBvdXRfdW5sb2NrMjsK PiA+ICsgICAgICAgICAgICB9Cj4gPiArCj4gPiArICAgICAgICAgICAgZ3ByaW50ayhYRU5MT0df REVCVUcsCj4gPiArICAgICAgICAgICAgICAgICAgICAiYXJnbzogdm0ldSByZS1yZWdpc3Rlcmlu ZyBleGlzdGluZyByaW5nICh2bSV1OiV4IHZtJWQpXG4iLAo+ID4gKyAgICAgICAgICAgICAgICAg ICAgY3VycmQtPmRvbWFpbl9pZCwgcmluZ19pZC5kb21haW5faWQsIHJpbmdfaWQucG9ydCwKPiA+ ICsgICAgICAgICAgICAgICAgICAgIHJpbmdfaWQucGFydG5lcl9pZCk7Cj4gPiArICAgICAgICB9 Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgcmV0ID0gZmluZF9yaW5nX21mbnMoY3VycmQsIHJp bmdfaW5mbywgbnBhZ2UsIHBnX2Rlc2NyX2huZCwgcmVnLmxlbik7Cj4gPiArICAgIGlmICggcmV0 ICkKPiA+ICsgICAgewo+ID4gKyAgICAgICAgZ3ByaW50ayhYRU5MT0dfRVJSLAo+ID4gKyAgICAg ICAgICAgICAgICAiYXJnbzogdm0ldSBmYWlsZWQgdG8gZmluZCByaW5nIG1mbnMgKHZtJXU6JXgg dm0lZClcbiIsCj4gPiArICAgICAgICAgICAgICAgIGN1cnJkLT5kb21haW5faWQsIHJpbmdfaWQu ZG9tYWluX2lkLCByaW5nX2lkLnBvcnQsCj4gPiArICAgICAgICAgICAgICAgIHJpbmdfaWQucGFy dG5lcl9pZCk7Cj4gPiArCj4gPiArICAgICAgICByaW5nX3JlbW92ZV9pbmZvKGN1cnJkLCByaW5n X2luZm8pOwo+ID4gKyAgICAgICAgZ290byBvdXRfdW5sb2NrMjsKPiA+ICsgICAgfQo+ID4gKwo+ ID4gKyAgICAvKgo+ID4gKyAgICAgKiBUaGUgZmlyc3QgcGFnZSBvZiB0aGUgbWVtb3J5IHN1cHBs aWVkIGZvciB0aGUgcmluZyBoYXMgdGhlIHhlbl9hcmdvX3JpbmcKPiA+ICsgICAgICogc3RydWN0 dXJlIGF0IGl0cyBoZWFkLCB3aGljaCBpcyB3aGVyZSB0aGUgcmluZyBpbmRleGVzIHJlc2lkZS4K PiA+ICsgICAgICovCj4gPiArICAgIHJldCA9IHJpbmdfbWFwX3BhZ2UocmluZ19pbmZvLCAwLCAm bWFwX3JpbmdwKTsKPiA+ICsgICAgaWYgKCByZXQgKQo+ID4gKyAgICB7Cj4gPiArICAgICAgICBn cHJpbnRrKFhFTkxPR19FUlIsCj4gPiArICAgICAgICAgICAgICAgICJhcmdvOiB2bSV1IGZhaWxl ZCB0byBtYXAgcmluZyBtZm4gMCAodm0ldToleCB2bSVkKVxuIiwKPiA+ICsgICAgICAgICAgICAg ICAgY3VycmQtPmRvbWFpbl9pZCwgcmluZ19pZC5kb21haW5faWQsIHJpbmdfaWQucG9ydCwKPiA+ ICsgICAgICAgICAgICAgICAgcmluZ19pZC5wYXJ0bmVyX2lkKTsKPiA+ICsKPiA+ICsgICAgICAg IHJpbmdfcmVtb3ZlX2luZm8oY3VycmQsIHJpbmdfaW5mbyk7Cj4gPiArICAgICAgICBnb3RvIG91 dF91bmxvY2syOwo+ID4gKyAgICB9Cj4gPiArICAgIHJpbmdwID0gbWFwX3JpbmdwOwo+ID4gKwo+ ID4gKyAgICBwcml2YXRlX3R4X3B0ciA9IHJlYWRfYXRvbWljKCZyaW5ncC0+dHhfcHRyKTsKPiA+ ICsKPiA+ICsgICAgaWYgKCAocHJpdmF0ZV90eF9wdHIgPj0gcmVnLmxlbikgfHwKPiA+ICsgICAg ICAgICAoUk9VTkRVUF9NRVNTQUdFKHByaXZhdGVfdHhfcHRyKSAhPSBwcml2YXRlX3R4X3B0cikg KQo+ID4gKyAgICB7Cj4gPiArICAgICAgICAvKgo+ID4gKyAgICAgICAgICogU2luY2UgdGhlIHJp bmcgaXMgYSBtZXNzLCBhdHRlbXB0IHRvIGZsdXNoIHRoZSBjb250ZW50cyBvZiBpdAo+ID4gKyAg ICAgICAgICogaGVyZSBieSBzZXR0aW5nIHRoZSB0eF9wdHIgdG8gdGhlIG5leHQgYWxpZ25lZCBt ZXNzYWdlIHNsb3QgcGFzdAo+ID4gKyAgICAgICAgICogdGhlIGxhdGVzdCByeF9wdHIgd2UgaGF2 ZSBvYnNlcnZlZC4gSGFuZGxlIHJpbmcgd3JhcCBjb3JyZWN0bHkuCj4gPiArICAgICAgICAgKi8K PiA+ICsgICAgICAgIHByaXZhdGVfdHhfcHRyID0gUk9VTkRVUF9NRVNTQUdFKHJlYWRfYXRvbWlj KCZyaW5ncC0+cnhfcHRyKSk7Cj4gPiArCj4gPiArICAgICAgICBpZiAoIHByaXZhdGVfdHhfcHRy ID49IHJlZy5sZW4gKQo+ID4gKyAgICAgICAgICAgIHByaXZhdGVfdHhfcHRyID0gMDsKPiA+ICsK PiA+ICsgICAgICAgIHVwZGF0ZV90eF9wdHIocmluZ19pbmZvLCBwcml2YXRlX3R4X3B0cik7Cj4g PiArICAgIH0KPiA+ICsKPiA+ICsgICAgcmluZ19pbmZvLT50eF9wdHIgPSBwcml2YXRlX3R4X3B0 cjsKPiA+ICsgICAgcmluZ19pbmZvLT5sZW4gPSByZWcubGVuOwo+ID4gKyAgICBjdXJyZC0+YXJn by0+cmluZ19jb3VudCsrOwo+ID4gKwo+ID4gKyAgICBpZiAoIHNlbmRfaW5mbyApCj4gPiArICAg IHsKPiA+ICsgICAgICAgIHNwaW5fbG9jaygmZHN0X2QtPmFyZ28tPnNlbmRfbG9jayk7Cj4gPiAr Cj4gPiArICAgICAgICBobGlzdF9hZGRfaGVhZCgmc2VuZF9pbmZvLT5ub2RlLAo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgJmRzdF9kLT5hcmdvLT5zZW5kX2hhc2hbaGFzaF9pbmRleCgmc2Vu ZF9pbmZvLT5pZCldKTsKPiA+ICsKPiA+ICsgICAgICAgIHNwaW5fdW5sb2NrKCZkc3RfZC0+YXJn by0+c2VuZF9sb2NrKTsKPiA+ICsgICAgfQo+ID4gKwo+ID4gKyBvdXRfdW5sb2NrMjoKPiA+ICsg ICAgaWYgKCAhcmV0ICYmIHNlbmRfaW5mbyApCj4gPiArICAgICAgICB4ZnJlZShzZW5kX2luZm8p Owo+ID4gKwo+ID4gKyAgICBpZiAoIGRzdF9kICkKPiA+ICsgICAgICAgIHB1dF9kb21haW4oZHN0 X2QpOwo+ID4gKwo+ID4gKyAgICB3cml0ZV91bmxvY2soJmN1cnJkLT5hcmdvLT5sb2NrKTsKPgo+ IFN1cmVseSB5b3UgY2FuIGRyb3AgdGhlIGxvY2sgYmVmb3JlIHRoZSBvdGhlciB0d28gY2xlYW51 cAo+IGFjdGlvbnM/IFRoYXQgd291bGQgdGhlbiBhbGxvdyB5b3UgdG8gYWRkIGFub3RoZXIgbGFi ZWwgdG8KPiBhYnNvcmIgdGhlIHR3byBzZXBhcmF0ZSBwdXRfZG9tYWluKCkgY2FsbHMgb24gZXJy b3IgcGF0aHMuCgpUaGF0IGxvb2tzIGNvcnJlY3QuIEFkZGVkIGEgRklYTUUgbm90ZSBub3cgYW5k IHdpbGwgZml4IHRvbW9ycm93LiB0aGFua3MuCgo+Cj4gPiAtLS0gYS94ZW4vaW5jbHVkZS9hc20t YXJtL2d1ZXN0X2FjY2Vzcy5oCj4gPiArKysgYi94ZW4vaW5jbHVkZS9hc20tYXJtL2d1ZXN0X2Fj Y2Vzcy5oCj4gPiBAQCAtMjksNiArMjksOCBAQCBpbnQgYWNjZXNzX2d1ZXN0X21lbW9yeV9ieV9p cGEoc3RydWN0IGRvbWFpbiAqZCwgcGFkZHJfdCBpcGEsIHZvaWQgKmJ1ZiwKPiA+ICAvKiBJcyB0 aGUgZ3Vlc3QgaGFuZGxlIGEgTlVMTCByZWZlcmVuY2U/ICovCj4gPiAgI2RlZmluZSBndWVzdF9o YW5kbGVfaXNfbnVsbChobmQpICAgICAgICAoKGhuZCkucCA9PSBOVUxMKQo+ID4KPiA+ICsjZGVm aW5lIGd1ZXN0X2hhbmRsZV9pc19hbGlnbmVkKGhuZCwgbWFzaykgKCEoKHVpbnRwdHJfdCkoaG5k KS5wICYgKG1hc2spKSkKPgo+IFRoaXMgaXMgdW51c2VkIHRocm91Z2hvdXQgdGhlIHBhdGNoIGFm YWljcy4KClJlbW92ZWQuCgo+Cj4gPiAtLS0gYS94ZW4vaW5jbHVkZS9wdWJsaWMvYXJnby5oCj4g PiArKysgYi94ZW4vaW5jbHVkZS9wdWJsaWMvYXJnby5oCj4gPiBAQCAtMzEsNiArMzEsMjYgQEAK PiA+Cj4gPiAgI2luY2x1ZGUgInhlbi5oIgo+ID4KPiA+ICsjZGVmaW5lIFhFTl9BUkdPX0RPTUlE X0FOWSAgICAgICBET01JRF9JTlZBTElECj4gPiArCj4gPiArLyoKPiA+ICsgKiBUaGUgbWF4aW11 bSBzaXplIG9mIGFuIEFyZ28gcmluZyBpcyBkZWZpbmVkIHRvIGJlOiAxNkdCCj4gPiArICogIC0t IHdoaWNoIGlzIDB4MTAwMDAwMCBieXRlcy4KPiA+ICsgKiBBIGJ5dGUgaW5kZXggaW50byB0aGUg cmluZyBpcyBhdCBtb3N0IDI0IGJpdHMuCj4gPiArICovCj4gPiArI2RlZmluZSBYRU5fQVJHT19N QVhfUklOR19TSVpFICAoMHgxMDAwMDAwVUxMKQo+ID4gKwo+ID4gKy8qCj4gPiArICogUGFnZSBk ZXNjcmlwdG9yOiBlbmNvZGluZyBib3RoIHBhZ2UgYWRkcmVzcyBhbmQgc2l6ZSBpbiBhIDY0LWJp dCB2YWx1ZS4KPiA+ICsgKiBJbnRlbmRlZCB0byBhbGxvdyBBQkkgdG8gc3VwcG9ydCB1c2Ugb2Yg ZGlmZmVyZW50IGdyYW51bGFyaXR5IHBhZ2VzLgo+ID4gKyAqIGV4YW1wbGUgb2YgaG93IHRvIHBv cHVsYXRlOgo+ID4gKyAqIHhlbl9hcmdvX3BhZ2VfZGVzY3JfdCBwZ19kZXNjID0KPiA+ICsgKiAg ICAgIChwaHlzYWRkciAmIFBBR0VfTUFTSykgfCBYRU5fQVJHT19QQUdFX0RFU0NSX1NJWkVfNEs7 Cj4gPiArICovCj4gPiArdHlwZWRlZiB1aW50NjRfdCB4ZW5fYXJnb19wYWdlX2Rlc2NyX3Q7Cj4g PiArI2RlZmluZSBYRU5fQVJHT19QQUdFX0RFU0NSX1NJWkVfTUFTSyAgIDB4MDAwMDAwMDAwMDAw MGZmZlVMTAo+ID4gKyNkZWZpbmUgWEVOX0FSR09fUEFHRV9ERVNDUl9TSVpFXzRLICAgICAwCj4K PiBBcmUgdGhlIF9ERVNDUl8gaW5maXhlcyBoZXJlIHJlYWxseSB1c2VmdWw/CgpUaGVzZSBhcmUg bm93IGdvbmUsIHdpdGggSnVsaWVuJ3MgYXBwcm92YWwgZm9yIHRoZSBjaGFuZ2UgYmFjayB0byB1 c2UKdGhlIGdmbi11c2luZyBpbnRlcmZhY2VzLgoKPgo+ID4gQEAgLTU2LDQgKzc2LDU2IEBAIHR5 cGVkZWYgc3RydWN0IHhlbl9hcmdvX3JpbmcKPiA+ICAjZW5kaWYKPiA+ICB9IHhlbl9hcmdvX3Jp bmdfdDsKPiA+Cj4gPiArdHlwZWRlZiBzdHJ1Y3QgeGVuX2FyZ29fcmVnaXN0ZXJfcmluZwo+ID4g K3sKPiA+ICsgICAgdWludDMyX3QgcG9ydDsKPiA+ICsgICAgZG9taWRfdCBwYXJ0bmVyX2lkOwo+ ID4gKyAgICB1aW50MTZfdCBwYWQ7Cj4gPiArICAgIHVpbnQzMl90IGxlbjsKPiA+ICt9IHhlbl9h cmdvX3JlZ2lzdGVyX3JpbmdfdDsKPiA+ICsKPiA+ICsvKiBNZXNzYWdlcyBvbiB0aGUgcmluZyBh cmUgcGFkZGVkIHRvIGEgbXVsdGlwbGUgb2YgdGhpcyBzaXplLiAqLwo+ID4gKyNkZWZpbmUgWEVO X0FSR09fTVNHX1NMT1RfU0laRSAweDEwCj4gPiArCj4gPiArc3RydWN0IHhlbl9hcmdvX3Jpbmdf bWVzc2FnZV9oZWFkZXIKPiA+ICt7Cj4gPiArICAgIHVpbnQzMl90IGxlbjsKPiA+ICsgICAgeGVu X2FyZ29fYWRkcl90IHNvdXJjZTsKPiA+ICsgICAgdWludDMyX3QgbWVzc2FnZV90eXBlOwo+ID4g KyNpZiBkZWZpbmVkKF9fU1REQ19WRVJTSU9OX18pICYmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5 OTAxTAo+ID4gKyAgICB1aW50OF90IGRhdGFbXTsKPiA+ICsjZWxpZiBkZWZpbmVkKF9fR05VQ19f KQo+ID4gKyAgICB1aW50OF90IGRhdGFbMF07Cj4gPiArI2VuZGlmCj4gPiArfTsKPiA+ICsKPiA+ ICsvKgo+ID4gKyAqIEh5cGVyY2FsbCBvcGVyYXRpb25zCj4gPiArICovCj4gPiArCj4gPiArLyoK PiA+ICsgKiBYRU5fQVJHT19PUF9yZWdpc3Rlcl9yaW5nCj4gPiArICoKPiA+ICsgKiBSZWdpc3Rl ciBhIHJpbmcgdXNpbmcgdGhlIGluZGljYXRlZCBtZW1vcnkuCj4gPiArICogQWxzbyB1c2VkIHRv IHJlcmVnaXN0ZXIgYW4gZXhpc3RpbmcgcmluZyAoZWcuIGFmdGVyIHJlc3VtZSBmcm9tIGhpYmVy bmF0ZSkuCj4gPiArICoKPiA+ICsgKiBhcmcxOiBYRU5fR1VFU1RfSEFORExFKHhlbl9hcmdvX3Jl Z2lzdGVyX3JpbmdfdCkKPiA+ICsgKiBhcmcyOiBYRU5fR1VFU1RfSEFORExFKHhlbl9hcmdvX3Bh Z2VfZGVzY3JfdCkKPiA+ICsgKiBhcmczOiB1bnNpZ25lZCBsb25nIG5wYWdlcwo+ID4gKyAqIGFy ZzQ6IHVuc2lnbmVkIGxvbmcgZmxhZ3MKPgo+IFRoZSAidW5zaWduZWQgbG9uZyItcyBoZXJlIGFy ZSBub3QgbmVjZXNzYXJpbHkgY29tcGF0aWJsZSB3aXRoCj4gY29tcGF0IG1vZGUuIEF0IHRoZSB2 ZXJ5IGxlYXN0IGZsYWdzIGFib3ZlIGJpdCAzMSB3b24ndCBiZQo+IHVzYWJsZSBieSBjb21wYXQg bW9kZSBndWVzdHMuIEhlbmNlIEkgYWxzbyBxdWVzdGlvbiAuLi4KPgo+ID4gKyAqLwo+ID4gKyNk ZWZpbmUgWEVOX0FSR09fT1BfcmVnaXN0ZXJfcmluZyAgICAgMQo+ID4gKwo+ID4gKy8qIFJlZ2lz dGVyIG9wIGZsYWdzICovCj4gPiArLyoKPiA+ICsgKiBGYWlsIGV4aXN0Ogo+ID4gKyAqIElmIHNl dCwgcmVqZWN0IGF0dGVtcHRzIHRvIChyZSlyZWdpc3RlciBhbiBleGlzdGluZyBlc3RhYmxpc2hl ZCByaW5nLgo+ID4gKyAqIElmIGNsZWFyLCByZXJlZ2lzdHJhdGlvbiBvY2N1cnMgaWYgdGhlIHJp bmcgZXhpc3RzLCB3aXRoIHRoZSBuZXcgcmluZwo+ID4gKyAqIHRha2luZyB0aGUgcGxhY2Ugb2Yg dGhlIG9sZCwgcHJlc2VydmluZyB0eF9wdHIgaWYgaXQgcmVtYWlucyB2YWxpZC4KPiA+ICsgKi8K PiA+ICsjZGVmaW5lIFhFTl9BUkdPX1JFR0lTVEVSX0ZMQUdfRkFJTF9FWElTVCAgMHgxCj4gPiAr Cj4gPiArLyogTWFzayBmb3IgYWxsIGRlZmluZWQgZmxhZ3MuIHVuc2lnbmVkIGxvbmcgdHlwZSBz byBvayBmb3IgYm90aCAzMi82NC1iaXQgKi8KPiA+ICsjZGVmaW5lIFhFTl9BUkdPX1JFR0lTVEVS X0ZMQUdfTUFTSyAweDFVTAo+Cj4gLi4uIHRoZSBVTCBzdWZmaXggaGVyZS4gQWxzbyB0aGlzIGxh c3QgaXRlbSBzaG91bGQgbm90IGJlIGV4cG9zZWQKPiAocGVyaGFwcyBmcmFtZWQgYnkgIiNpZmRl ZiBfX1hFTl9fIikgYW5kIHdvdWxkIHBlcmhhcHMgYW55d2F5Cj4gYmV0dGVyIGJlIGRlZmluZWQg aW4gdGVybXMgb2YgdGhlIG90aGVyCj4gWEVOX0FSR09fUkVHSVNURVJfRkxBR18qLgoKTm90ZXMg YWRkZWQgaW4gcGxhY2UgZm9yIGVhY2ggb2YgdGhlIGFib3ZlOyB3aWxsIHdvcmsgb24gdGhlc2Ug dG9tb3Jyb3cuCgp0aGFua3MKCkNocmlzdG9waGVyCgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBs aXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4v bGlzdGluZm8veGVuLWRldmVs