From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tomeu Vizoso Subject: Re: [RFC i-g-t 4/4] Add support for hotplug testing with the Chamelium Date: Wed, 9 Nov 2016 16:18:40 +0100 Message-ID: References: <1478563516-23568-1-git-send-email-lyude@redhat.com> <1478563516-23568-5-git-send-email-lyude@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x229.google.com (mail-wm0-x229.google.com [IPv6:2a00:1450:400c:c09::229]) by gabe.freedesktop.org (Postfix) with ESMTPS id F09A76E6D9 for ; Wed, 9 Nov 2016 15:19:05 +0000 (UTC) Received: by mail-wm0-x229.google.com with SMTP id p190so314536090wmp.1 for ; Wed, 09 Nov 2016 07:19:05 -0800 (PST) Received: from mail-wm0-f50.google.com (mail-wm0-f50.google.com. [74.125.82.50]) by smtp.gmail.com with ESMTPSA id g184sm7521228wme.23.2016.11.09.07.19.02 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 09 Nov 2016 07:19:02 -0800 (PST) Received: by mail-wm0-f50.google.com with SMTP id t79so306874397wmt.0 for ; Wed, 09 Nov 2016 07:19:02 -0800 (PST) In-Reply-To: <1478563516-23568-5-git-send-email-lyude@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Lyude Cc: Intel Graphics Development List-Id: intel-gfx@lists.freedesktop.org T24gOCBOb3ZlbWJlciAyMDE2IGF0IDAxOjA1LCBMeXVkZSA8bHl1ZGVAcmVkaGF0LmNvbT4gd3Jv dGU6Cj4gRm9yIHRoZSBwdXJwb3NlIG9mIHRlc3RpbmcgdGhpbmdzIHN1Y2ggYXMgaG90cGx1Z2dp bmcgYW5kIGJhZCBtb25pdG9ycywKPiB0aGUgQ2hyb21lT1MgdGVhbSBlbmRlZCB1cCBkZXNpZ25p bmcgYSBuZWF0IGxpdHRsZSBkZXZpY2Uga25vd24gYXMgdGhlCj4gQ2hhbWVsaXVtLiBNb3JlIGlu Zm9ybWF0aW9uIG9uIHRoaXMgY2FuIGJlIGZvdW5kIGhlcmU6Cj4KPiAgICAgICAgIGh0dHBzOi8v d3d3LmNocm9taXVtLm9yZy9jaHJvbWl1bS1vcy90ZXN0aW5nL2NoYW1lbGl1bQo+Cj4gVGhpcyBh ZGRzIHN1cHBvcnQgZm9yIGEgY291cGxlIG9mIHRoaW5ncyB0byBpbnRlbC1ncHUtdG9vbHM6Cj4g IC0gaWd0IGxpYnJhcnkgZnVuY3Rpb25zIGZvciBjb25uZWN0aW5nIHRvIHVkZXYgYW5kIG1vbml0 b3JpbmcgaXQgZm9yCj4gICAgaG90cGx1ZyBldmVudHMsIGxvb3NlbHkgYmFzZWQgb2ZmIG9mIHRo ZSB1bmZpbmlzaGVkIGhvdHBsdWdnaW5nCj4gICAgaW1wbGVtZW50YXRpb24gaW4gdGVzdGRpc3Bs YXkKPiAgLSBMaWJyYXJ5IGZ1bmN0aW9ucyBmb3IgY29udHJvbGxpbmcgdGhlIGNoYW1lbGl1bSBp biB0ZXN0cyB1c2luZwo+ICAgIHhtbHJwYy4gQSBjb3VwbGUgb2YgUlBDIGNhbGxzIHdlcmUgb21t aXR0ZWQgaGVyZSwgbWFpbmx5IGJlY2F1c2UgdGhleQo+ICAgIGRpZG4ndCBzZWVtIHZlcnkgdXNl ZnVsIGZvciBvdXIgbmVlZHMgb3IgYmVjYXVzZSB0aGV5J3JlIGp1c3QgcGxhaW4KPiAgICBicm9r ZW4KPiAgLSBBIHNldCBvZiBiYXNpYyB0ZXN0cyB1c2luZyB0aGUgY2hhbWVsaXVtLgoKSSB0aGlu ayBpdCB3b3VsZCBiZSBnb29kIHRvIHNwbGl0IHRoaXMgcGF0Y2ggaW4gYSBmZXcgc21hbGxlciBi aXRzLAplYWNoIHdpdGggaXRzIGxvZ2ljYWwgY2hhbmdlLgoKPiBCZWNhdXNlIHRoZXJlJ3Mgbm8g c3VyZWZpcmUgd2F5IHRoYXQgSSBrbm93IG9mIHdoZXJlIHdlIGNhbiBtYXAgd2hpY2gKPiBjaGFt ZWxpdW0gcG9ydCBiZWxvbmdzIHRvIHdoaWNoIHBvcnQgb24gdGhlIHN5c3RlbSBiZWluZyB0ZXN0 ZWQgKHdlCj4gY291bGQganVzdCB1c2UgaG90cGx1Z2dpbmcsIGJ1dCB0aGVuIHdlJ2QgYmUgcmVs eWluZyBvbiBzb21ldGhpbmcgdGhhdAo+IG1pZ2h0IGJlIGJyb2tlbiBvbiB0aGUgbWFjaGluZSBh bmQgcG90ZW50aWFsbHkgZ2l2ZSBmYWxzZSBwb3NpdGl2ZXMgZm9yCj4gY2VydGFpbiB0ZXN0cyks IG1vc3Qgb2YgdGhlIGNoYW1lbGl1bSB0ZXN0cyB3aWxsIGZpZ3VyZSBvdXQgd2hldGhlciBvcgo+ IG5vdCBhIGNvbm5lY3Rpb24gaGFwcGVuZWQgYnkgY291bnRpbmcgdGhlIG51bWJlciBvZiBjb25u ZWN0b3JzIG1hdGNoaW5nCj4gdGhlIHN0YXR1cyB3ZSdyZSBsb29raW5nIGZvciBiZWZvcmUgaG90 cGx1Z2dpbmcgd2l0aCB0aGUgY2hhbWVsaXVtLCB2cy4KPiBhZnRlciBob3RwbHVnZ2luZyBpdC4K CkJhY2sgd2hlbiBJIHN0YXJ0ZWQgd29yayBvbiB0aGlzLCBpdCB3YXMgYWdyZWVkIHdpdGggRGFu aWVsIFZldHRlcgp0aGF0IGEgY29uZmlnIGZpbGUgd291bGQgYmUgdXNlZCBmb3IgdGhpcyBtYXBw aW5nIChhbmQgb3RoZXIKY29uZmlndXJhdGlvbikuIFRoaXMgaXMgdGhlICRIT01FLy5pZ3RyYyBJ IHdhcyB1c2luZyBkdXJpbmcKZGV2ZWxvcG1lbnQ6CgpbQ2hhbWVsaXVtXQpzZXJ2ZXJfaXA9MTky LjE2OC4xMDAuMTIzCnNlcnZlcl9wb3J0PTk5OTIKcG9ydF9uYW1lcz1IRE1JCmNvbm5lY3Rvcl9u YW1lcz1IRE1JLUEtMQoKSSB1c2VkIHRoZSBrZXlmaWxlIEFQSSBpbiBnbGliLCBhcyB3ZSBhcmUg YWxyZWFkeSBkZXBlbmRpbmcgb24gaXQgKGFuZAp0aGF0J3MgYWxzbyB3aHkgSSBjaG9zZSBsaWJz b3VwIGluc3RlYWQgb2YgbGlieG1scnBjKS4KCkZvciByZWZlcmVuY2UsIHRoaXMgaXMgdGhlIFdJ UCBicmFuY2ggdGhhdCBJIHdhcyB1c2luZyB0byB0ZXN0IGZyYW1lCkNSQyBjYXB0dXJlIHdpdGgg Q2hhbWVsaXVtOgoKaHR0cHM6Ly9naXQuY29sbGFib3JhLmNvbS9jZ2l0L3VzZXIvdG9tZXUvaW50 ZWwtZ3B1LXRvb2xzLmdpdC9jb21taXQvP2g9Y2hhbWVsaXVtLWNyYwoKUmVnYXJkcywKClRvbWV1 Cgo+IFRlc3RzIHdoaWNoIHJlcXVpcmUgdGhhdCB3ZSBrbm93IHdoaWNoIHBvcnQgYmVsb25ncyB0 byBhIGNlcnRhaW4gcG9ydAo+IChzdWNoIGFzIG9uZXMgd2hlcmUgd2UgYWN0dWFsbHkgcGVyZm9y bSBhIG1vZGVzZXQpIHdpbGwgdW5wbHVnIGFsbCBvZgo+IHRoZSBjaGFtZWxpdW0gcG9ydHMsIHBs dWcgdGhlIGRlc2lyZWQgcG9ydCwgdGhlbiB1c2UgdGhlIGZpcnN0IERSTQo+IGNvbm5lY3RvciB3 aXRoIHRoZSBkZXNpcmVkIGNvbm5lY3RvciB0eXBlIHRoYXQncyBtYXJrZWQgYXMgY29ubmVjdGVk LiBJbgo+IG9yZGVyIHRvIGVuc3VyZSB3ZSBkb24ndCBlbmQgdXAgdXNpbmcgdGhlIHdyb25nIGNv bm5lY3RvciwgdGhlc2UgdGVzdHMKPiB3aWxsIHNraXAgaWYgdGhleSBmaW5kIGFueSBjb25uZWN0 b3JzIHdpdGggdGhlIGRlc2lyZWQgdHlwZSBtYXJrZWQgYXMKPiBjb25uZWN0ZWQgYmVmb3JlIHBl cmZvcm1pbmcgdGhlIGhvdHBsdWcgb24gdGhlIGNoYW1lbGl1bS4KPgo+IFJ1bm5pbmcgdGhlc2Ug dGVzdHMgcmVxdWlyZXMgKG9mIGNvdXJzZSkgYSB3b3JraW5nIENoYW1lbGl1bSwgYWxvbmcgd2l0 aAo+IHRoZSBSUEMgVVJMIGZvciB0aGUgY2hhbWVsaXVtIGJlaW5nIHNwZWNpZmllZCBpbiB0aGUg ZW52aXJvbm1lbnQKPiB2YXJpYWJsZSBDSEFNRUxJVU1fSE9TVC4gSWYgbm8gVVJMIGlzIHNwZWNp ZmllZCwgdGhlIHRlc3RzIHdpbGwganVzdAo+IHNraXAgb24gdGhlaXIgb3duLiBBcyB3ZWxsLCB0 ZXN0cyBmb3IgY29ubmVjdG9ycyB3aGljaCBhcmUgbm90IGFjdHVhbGx5Cj4gcHJlc2VudCBvbiB0 aGUgc3lzdGVtIG9yIHRoZSBjaGFtZWxpdW0gd2lsbCBza2lwIG9uIHRoZWlyIG93biBhcyB3ZWxs Lgo+Cj4gU2lnbmVkLW9mZi1ieTogTHl1ZGUgPGx5dWRlQHJlZGhhdC5jb20+Cj4gLS0tCj4gIGNv bmZpZ3VyZS5hYyAgICAgICAgICAgfCAgMTMgKwo+ICBsaWIvTWFrZWZpbGUuYW0gICAgICAgIHwg IDEwICstCj4gIGxpYi9pZ3QuaCAgICAgICAgICAgICAgfCAgIDEgKwo+ICBsaWIvaWd0X2NoYW1l bGl1bS5jICAgIHwgNjI4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysKPiAgbGliL2lndF9jaGFtZWxpdW0uaCAgICB8ICA3NyArKysrKysKPiAgbGliL2ln dF9rbXMuYyAgICAgICAgICB8IDEwNyArKysrKysrKysKPiAgbGliL2lndF9rbXMuaCAgICAgICAg ICB8ICAxMyArLQo+ICBzY3JpcHRzL3J1bi10ZXN0cy5zaCAgIHwgICA0ICstCj4gIHRlc3RzL01h a2VmaWxlLmFtICAgICAgfCAgIDUgKy0KPiAgdGVzdHMvTWFrZWZpbGUuc291cmNlcyB8ICAgMSAr Cj4gIHRlc3RzL2NoYW1lbGl1bS5jICAgICAgfCA1NDkgKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrCj4gIDExIGZpbGVzIGNoYW5nZWQsIDE0MDMgaW5zZXJ0aW9ucygr KSwgNSBkZWxldGlvbnMoLSkKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9pZ3RfY2hhbWVsaXVt LmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9pZ3RfY2hhbWVsaXVtLmgKPiAgY3JlYXRlIG1v ZGUgMTAwNjQ0IHRlc3RzL2NoYW1lbGl1bS5jCj4KPiBkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFj IGIvY29uZmlndXJlLmFjCj4gaW5kZXggNzM1Y2ZkNS4uODgxMTNiMiAxMDA2NDQKPiAtLS0gYS9j b25maWd1cmUuYWMKPiArKysgYi9jb25maWd1cmUuYWMKPiBAQCAtMjU5LDYgKzI1OSwxOCBAQCBp ZiB0ZXN0ICJ4JHdpdGhfbGlidW53aW5kIiA9IHh5ZXM7IHRoZW4KPiAgICAgICAgICAgICAgICAg ICAgICAgICAgIEFDX01TR19FUlJPUihbbGlidW53aW5kIG5vdCBmb3VuZC4gVXNlIC0td2l0aG91 dC1saWJ1bndpbmQgdG8gZGlzYWJsZSBsaWJ1bndpbmQgc3VwcG9ydC5dKSkKPiAgZmkKPgo+ICsj IGVuYWJsZSBzdXBwb3J0IGZvciB1c2luZyB0aGUgY2hhbWVsaXVtCj4gK0FDX0FSR19FTkFCTEUo Y2hhbWVsaXVtLAo+ICsgICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aG91dC1jaGFt ZWxpdW1dLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0J1aWxkIHRlc3RzIHdpdGhv dXQgY2hhbWVsaXVtIHN1cHBvcnRdKSwKPiArICAgICAgICAgICAgIFtdLCBbd2l0aF9jaGFtZWxp dW09eWVzXSkKPiArCj4gK0FNX0NPTkRJVElPTkFMKEhBVkVfQ0hBTUVMSVVNLCBbdGVzdCAieCR3 aXRoX2NoYW1lbGl1bSIgPSB4eWVzXSkKPiAraWYgdGVzdCAieCR3aXRoX2NoYW1lbGl1bSIgPSB4 eWVzOyB0aGVuCj4gKyAgICAgICBBQ19ERUZJTkUoSEFWRV9DSEFNRUxJVU0sIDEsIFtjaGFtZWxp dW0gc3Vwb3J0XSkKPiArICAgICAgIFBLR19DSEVDS19NT0RVTEVTKFhNTFJQQywgeG1scnBjX2Ns aWVudCkKPiArZmkKPiArCj4gICMgZW5hYmxlIGRlYnVnIHN5bWJvbHMKPiAgQUNfQVJHX0VOQUJM RShkZWJ1ZywKPiAgICAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtZGVidWdd LAo+IEBAIC0zNTYsNiArMzY4LDcgQEAgZWNobyAiICAgICAgIEFzc2VtYmxlciAgICAgICAgICA6 ICR7ZW5hYmxlX2Fzc2VtYmxlcn0iCj4gIGVjaG8gIiAgICAgICBEZWJ1Z2dlciAgICAgICAgICAg OiAke2VuYWJsZV9kZWJ1Z2dlcn0iCj4gIGVjaG8gIiAgICAgICBPdmVybGF5ICAgICAgICAgICAg OiBYOiAke2VuYWJsZV9vdmVybGF5X3hsaWJ9LCBYdjogJHtlbmFibGVfb3ZlcmxheV94dmxpYn0i Cj4gIGVjaG8gIiAgICAgICB4ODYtc3BlY2lmaWMgdG9vbHMgOiAke2J1aWxkX3g4Nn0iCj4gK2Vj aG8gIiAgICAgICBDaGFtZWxpdW0gc3VwcG9ydCAgOiAke3dpdGhfY2hhbWVsaXVtfSIKPiAgZWNo byAiIgo+ICBlY2hvICIg4oCiIEFQSS1Eb2N1bWVudGF0aW9uICAgICAgOiAke2VuYWJsZV9ndGtf ZG9jfSIKPiAgZWNobyAiIOKAoiBGYWlsIG9uIHdhcm5pbmdzICAgICAgIDogJHtlbmFibGVfd2Vy cm9yfSIKPiBkaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlLmFtIGIvbGliL01ha2VmaWxlLmFtCj4g aW5kZXggNGMwODkzZC4uYWVhYzQzYSAxMDA2NDQKPiAtLS0gYS9saWIvTWFrZWZpbGUuYW0KPiAr KysgYi9saWIvTWFrZWZpbGUuYW0KPiBAQCAtMjIsOCArMjIsMTQgQEAgaWYgIUhBVkVfTElCRFJN X0lOVEVMCj4gICAgICAgICAgc3R1YnMvZHJtL2ludGVsX2J1Zm1nci5oCj4gIGVuZGlmCj4KPiAr aWYgSEFWRV9DSEFNRUxJVU0KPiArICAgIGxpYmludGVsX3Rvb2xzX2xhX1NPVVJDRVMgKz0gICAg ICAgXAo+ICsgICAgICAgaWd0X2NoYW1lbGl1bS5jICAgICAgICAgICAgICAgICBcCj4gKyAgICAg ICBpZ3RfY2hhbWVsaXVtLmgKPiArZW5kaWYKPiArCj4gIEFNX0NQUEZMQUdTID0gLUkkKHRvcF9z cmNkaXIpCj4gLUFNX0NGTEFHUyA9ICQoQ1dBUk5GTEFHUykgJChEUk1fQ0ZMQUdTKSAkKFBDSUFD Q0VTU19DRkxBR1MpICQoTElCVU5XSU5EX0NGTEFHUykgJChERUJVR19DRkxBR1MpIFwKPiArQU1f Q0ZMQUdTID0gJChDV0FSTkZMQUdTKSAkKERSTV9DRkxBR1MpICQoUENJQUNDRVNTX0NGTEFHUykg JChMSUJVTldJTkRfQ0ZMQUdTKSAkKERFQlVHX0NGTEFHUykgJChYTUxSUENfQ0ZMQUdTKSAkKFVE RVZfQ0ZMQUdTKSBcCj4gICAgICAgICAgICAgLURJR1RfU1JDRElSPVwiIiQoYWJzX3RvcF9zcmNk aXIpL3Rlc3RzIlwiIFwKPiAgICAgICAgICAgICAtRElHVF9EQVRBRElSPVwiIiQocGtnZGF0YWRp cikiXCIgXAo+ICAgICAgICAgICAgIC1ESUdUX0xPR19ET01BSU49XCIiJChzdWJzdCBfLC0sJCop IlwiIFwKPiBAQCAtMzgsNSArNDQsNyBAQCBsaWJpbnRlbF90b29sc19sYV9MSUJBREQgPSBcCj4g ICAgICAgICAkKExJQlVERVZfTElCUykgXAo+ICAgICAgICAgJChMSUJVTldJTkRfTElCUykgXAo+ ICAgICAgICAgJChUSU1FUl9MSUJTKSBcCj4gKyAgICAgICAkKFhNTFJQQ19MSUJTKSBcCj4gKyAg ICAgICAkKFVERVZfTElCUykgXAo+ICAgICAgICAgLWxtCj4KPiBkaWZmIC0tZ2l0IGEvbGliL2ln dC5oIGIvbGliL2lndC5oCj4gaW5kZXggZDc1MWYyNC4uMGVhMDNlNCAxMDA2NDQKPiAtLS0gYS9s aWIvaWd0LmgKPiArKysgYi9saWIvaWd0LmgKPiBAQCAtMzAsNiArMzAsNyBAQAo+ICAjaW5jbHVk ZSAiaWd0X2F1eC5oIgo+ICAjaW5jbHVkZSAiaWd0X2NvcmUuaCIKPiAgI2luY2x1ZGUgImlndF9j b3JlLmgiCj4gKyNpbmNsdWRlICJpZ3RfY2hhbWVsaXVtLmgiCj4gICNpbmNsdWRlICJpZ3RfZGVi dWdmcy5oIgo+ICAjaW5jbHVkZSAiaWd0X2RyYXcuaCIKPiAgI2luY2x1ZGUgImlndF9mYi5oIgo+ IGRpZmYgLS1naXQgYS9saWIvaWd0X2NoYW1lbGl1bS5jIGIvbGliL2lndF9jaGFtZWxpdW0uYwo+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uYTI4MWVmNgo+IC0tLSAvZGV2 L251bGwKPiArKysgYi9saWIvaWd0X2NoYW1lbGl1bS5jCj4gQEAgLTAsMCArMSw2MjggQEAKPiAr LyoKPiArICogQ29weXJpZ2h0IMKpIDIwMTYgUmVkIEhhdCBJbmMuCj4gKyAqCj4gKyAqIFBlcm1p c3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9i dGFpbmluZyBhCj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1 bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNv ZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24K PiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRp c3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29m dHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ICsgKiBTb2Z0d2FyZSBp cyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25z Ogo+ICsgKgo+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNz aW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUg aW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKPiAr ICogU29mdHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMi LCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gKyAqIElNUExJRUQs IElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB QklMSVRZLAo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5G UklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJ R0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiAr ICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBP VEhFUldJU0UsIEFSSVNJTkcKPiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lU SCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwo+ICsgKiBJTiBUSEUg U09GVFdBUkUuCj4gKyAqCj4gKyAqIEF1dGhvcnM6Cj4gKyAqICBMeXVkZSBQYXVsIDxseXVkZUBy ZWRoYXQuY29tPgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlICJjb25maWcuaCIKPiArCj4gKyNpbmNs dWRlIDxzdHJpbmcuaD4KPiArI2luY2x1ZGUgPGVycm5vLmg+Cj4gKyNpbmNsdWRlIDx4bWxycGMt Yy9iYXNlLmg+Cj4gKyNpbmNsdWRlIDx4bWxycGMtYy9jbGllbnQuaD4KPiArCj4gKyNpbmNsdWRl ICJpZ3QuaCIKPiArCj4gKyNkZWZpbmUgY2hlY2tfcnBjKCkgXAo+ICsgICAgICAgaWd0X2Fzc2Vy dF9mKCFlbnYuZmF1bHRfb2NjdXJyZWQsICJDaGFtZWxpdW0gUlBDIGNhbGwgZmFpbGVkOiAlc1xu IiwgXAo+ICsgICAgICAgICAgICAgICAgICAgIGVudi5mYXVsdF9zdHJpbmcpOwo+ICsKPiArLyoq Cj4gKyAqIGNoYW1lbGl1bV9wb3J0czoKPiArICoKPiArICogQ29udGFpbnMgaW5mb3JtYXRpb24g b24gYWxsIG9mIHRoZSBwb3J0cyB0aGF0IGFyZSBwaHlzaWNhbGx5IGNvbm5lY3RlZCBmcm9tCj4g KyAqIHRoZSBjaGFtZWxpdW0gdG8gdGhlIHN5c3RlbS4gVGhpcyBpbmZvcm1hdGlvbiBpcyBpbml0 aWFsaXplZCB3aGVuCj4gKyAqICNjaGFtZWxpdW1faW5pdCBpcyBjYWxsZWQuCj4gKyAqLwo+ICtz dHJ1Y3QgY2hhbWVsaXVtX3BvcnQgKmNoYW1lbGl1bV9wb3J0czsKPiArCj4gKy8qKgo+ICsgKiBj aGFtZWxpdW1fcG9ydF9jb3VudDoKPiArICoKPiArICogSG93IG1hbnkgcG9ydHMgYXJlIHBoeXNp Y2FsbHkgY29ubmVjdGVkIGZyb20gdGhlIGNoYW1lbGl1bSB0byB0aGUgc3lzdGVtLgo+ICsgKi8K PiAraW50IGNoYW1lbGl1bV9wb3J0X2NvdW50Owo+ICsKPiArc3RhdGljIGNvbnN0IGNoYXIgKmNo YW1lbGl1bV91cmw7Cj4gK3N0YXRpYyB4bWxycGNfZW52IGVudjsKPiArCj4gK3N0cnVjdCBjaGFt ZWxpdW1fZWRpZCB7Cj4gKyAgICAgICBpbnQgaWQ7Cj4gKyAgICAgICBzdHJ1Y3QgaWd0X2xpc3Qg bGluazsKPiArfTsKPiArc3RydWN0IGNoYW1lbGl1bV9lZGlkICphbGxvY2F0ZWRfZWRpZHM7Cj4g Kwo+ICsvKioKPiArICogY2hhbWVsaXVtX3BsdWc6Cj4gKyAqIEBpZDogVGhlIElEIG9mIHRoZSBw b3J0IG9uIHRoZSBjaGFtZWxpdW0gdG8gcGx1ZyBpbgo+ICsgKgo+ICsgKiBTaW11bGF0ZSBhIGRp c3BsYXkgY29ubmVjdG9yIGJlaW5nIHBsdWdnZWQgaW50byB0aGUgc3lzdGVtIHVzaW5nIHRoZQo+ ICsgKiBjaGFtZWxpdW0uCj4gKyAqLwo+ICt2b2lkIGNoYW1lbGl1bV9wbHVnKGludCBpZCkKPiAr ewo+ICsgICAgICAgeG1scnBjX3ZhbHVlICpyZXM7Cj4gKwo+ICsgICAgICAgaWd0X2RlYnVnKCJQ bHVnZ2luZyBwb3J0ICVkXG4iLCBpZCk7Cj4gKyAgICAgICByZXMgPSB4bWxycGNfY2xpZW50X2Nh bGwoJmVudiwgY2hhbWVsaXVtX3VybCwgIlBsdWciLCAiKGkpIiwgaWQpOwo+ICsgICAgICAgY2hl Y2tfcnBjKCk7Cj4gKwo+ICsgICAgICAgeG1scnBjX0RFQ1JFRihyZXMpOwo+ICt9Cj4gKwo+ICsv KioKPiArICogY2hhbWVsaXVtX3VucGx1ZzoKPiArICogQGlkOiBUaGUgSUQgb2YgdGhlIHBvcnQg b24gdGhlIGNoYW1lbGl1bSB0byB1bnBsdWcKPiArICoKPiArICogU2ltdWxhdGUgYSBkaXNwbGF5 IGNvbm5lY3RvciBiZWluZyB1bnBsdWdnZWQgZnJvbSB0aGUgc3lzdGVtIHVzaW5nIHRoZQo+ICsg KiBjaGFtZWxpdW0uCj4gKyAqLwo+ICt2b2lkIGNoYW1lbGl1bV91bnBsdWcoaW50IGlkKQo+ICt7 Cj4gKyAgICAgICB4bWxycGNfdmFsdWUgKnJlczsKPiArCj4gKyAgICAgICBpZ3RfZGVidWcoIlVu cGx1Z2dpbmcgcG9ydCAlZFxuIiwgaWQpOwo+ICsgICAgICAgcmVzID0geG1scnBjX2NsaWVudF9j YWxsKCZlbnYsIGNoYW1lbGl1bV91cmwsICJVbnBsdWciLCAiKGkpIiwgaWQpOwo+ICsgICAgICAg Y2hlY2tfcnBjKCk7Cj4gKwo+ICsgICAgICAgeG1scnBjX0RFQ1JFRihyZXMpOwo+ICt9Cj4gKwo+ ICsvKioKPiArICogY2hhbWVsaXVtX2lzX3BsdWdnZWQ6Cj4gKyAqIEBpZDogVGhlIElEIG9mIHRo ZSBwb3J0IG9uIHRoZSBjaGFtZWxpdW0gdG8gY2hlY2sgdGhlIHN0YXR1cyBvZgo+ICsgKgo+ICsg KiBDaGVjayB3aGV0aGVyIG9yIG5vdCB0aGUgZ2l2ZW4gcG9ydCBoYXMgYmVlbiBwbHVnZ2VkIGlu dG8gdGhlIHN5c3RlbSB1c2luZwo+ICsgKiAjY2hhbWVsaXVtX3BsdWcuCj4gKyAqCj4gKyAqIFJl dHVybnM6IFRydWUgaWYgdGhlIGNvbm5lY3RvciBpcyBzZXQgdG8gcGx1Z2dlZCBpbiwgZmFsc2Ug b3RoZXJ3aXNlLgo+ICsgKi8KPiArYm9vbCBjaGFtZWxpdW1faXNfcGx1Z2dlZChpbnQgaWQpCj4g K3sKPiArICAgICAgIHhtbHJwY192YWx1ZSAqcmVzOwo+ICsgICAgICAgeG1scnBjX2Jvb2wgaXNf cGx1Z2dlZDsKPiArCj4gKyAgICAgICByZXMgPSB4bWxycGNfY2xpZW50X2NhbGwoJmVudiwgY2hh bWVsaXVtX3VybCwgIklzUGx1Z2dlZCIsICIoaSkiLCBpZCk7Cj4gKyAgICAgICBjaGVja19ycGMo KTsKPiArCj4gKyAgICAgICB4bWxycGNfcmVhZF9ib29sKCZlbnYsIHJlcywgJmlzX3BsdWdnZWQp Owo+ICsgICAgICAgeG1scnBjX0RFQ1JFRihyZXMpOwo+ICsKPiArICAgICAgIHJldHVybiBpc19w bHVnZ2VkOwo+ICt9Cj4gKwo+ICsvKioKPiArICogY2hhbWVsaXVtX3BvcnRfd2FpdF92aWRlb19p bnB1dF9zdGFibGU6Cj4gKyAqIEBpZDogVGhlIElEIG9mIHRoZSBwb3J0IG9uIHRoZSBjaGFtZWxp dW0gdG8gY2hlY2sgdGhlIHN0YXR1cyBvZgo+ICsgKiBAdGltZW91dF9zZWNzOiBIb3cgbG9uZyB0 byB3YWl0IGZvciBhIHZpZGVvIHNpZ25hbCB0byBhcHBlYXIgYmVmb3JlIHRpbWluZwo+ICsgKiBv dXQKPiArICoKPiArICogV2FpdHMgZm9yIGEgdmlkZW8gc2lnbmFsIHRvIGFwcGVhciBvbiB0aGUg Z2l2ZW4gcG9ydC4gVGhpcyBpcyB1c2VmdWwgZm9yCj4gKyAqIGNoZWNraW5nIHdoZXRoZXIgb3Ig bm90IHdlJ3ZlIHNldHVwIGEgbW9uaXRvciBjb3JyZWN0bHkuCj4gKyAqCj4gKyAqIFJldHVybnM6 IFRydWUgaWYgYSB2aWRlbyBzaWduYWwgd2FzIGRldGVjdGVkLCBmYWxzZSBpZiB3ZSB0aW1lZCBv dXQKPiArICovCj4gK2Jvb2wgY2hhbWVsaXVtX3BvcnRfd2FpdF92aWRlb19pbnB1dF9zdGFibGUo aW50IGlkLCBpbnQgdGltZW91dF9zZWNzKQo+ICt7Cj4gKyAgICAgICB4bWxycGNfdmFsdWUgKnJl czsKPiArICAgICAgIHhtbHJwY19ib29sIGlzX29uOwo+ICsKPiArICAgICAgIGlndF9kZWJ1Zygi V2FpdGluZyBmb3IgdmlkZW8gaW5wdXQgdG8gc3RhYmFsaXplIG9uIHBvcnQgJWRcbiIsIGlkKTsK PiArCj4gKyAgICAgICByZXMgPSB4bWxycGNfY2xpZW50X2NhbGwoJmVudiwgY2hhbWVsaXVtX3Vy bCwgIldhaXRWaWRlb0lucHV0U3RhYmxlIiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiKGlpKSIsIGlkLCB0aW1lb3V0X3NlY3MpOwo+ICsgICAgICAgY2hlY2tfcnBjKCk7Cj4g Kwo+ICsgICAgICAgeG1scnBjX3JlYWRfYm9vbCgmZW52LCByZXMsICZpc19vbik7Cj4gKyAgICAg ICB4bWxycGNfREVDUkVGKHJlcyk7Cj4gKwo+ICsgICAgICAgcmV0dXJuIGlzX29uOwo+ICt9Cj4g Kwo+ICsvKioKPiArICogY2hhbWVsaXVtX2ZpcmVfaHBkX3B1bHNlczoKPiArICogQGlkOiBUaGUg SUQgb2YgdGhlIHBvcnQgdG8gZmlyZSBob3RwbHVnIHB1bHNlcyBvbgo+ICsgKiBAd2lkdGhfbXNl YzogSG93IGxvbmcgZWFjaCBwdWxzZSBzaG91bGQgbGFzdAo+ICsgKiBAY291bnQ6IFRoZSBudW1i ZXIgb2YgcHVsc2VzIHRvIHNlbmQKPiArICoKPiArICogQSBjb252aWVuZW5jZSBmdW5jdGlvbiBm b3Igc2VuZGluZyBtdWx0aXBsZSBob3RwbHVnIHB1bHNlcyB0byB0aGUgc3lzdGVtLgo+ICsgKiBU aGUgcHVsc2VzIHN0YXJ0IGF0IGxvdyAoZS5nLiBjb25uZWN0b3IgaXMgZGlzY29ubmVjdGVkKSwg YW5kIHRoZW4gYWx0ZXJuYXRlCj4gKyAqIGZyb20gaGlnaCAoZS5nLiBjb25uZWN0b3IgaXMgcGx1 Z2dlZCBpbikgdG8gbG93LiBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mCj4gKyAqIHJlcGVhdGVk bHkgY2FsbGluZyAjY2hhbWVsaXVtX3BsdWcgYW5kICNjaGFtZWxpdW1fdW5wbHVnLCB3YWl0aW5n Cj4gKyAqIEB3aWR0aF9tc2VjIGJldHdlZW4gZWFjaCBjYWxsLgo+ICsgKgo+ICsgKiBJZiBAY291 bnQgaXMgZXZlbiwgdGhlIGxhc3QgcHVsc2Ugc2VudCB3aWxsIGJlIGhpZ2gsIGFuZCBpZiBpdCdz IG9kZCB0aGVuIGl0Cj4gKyAqIHdpbGwgYmUgbG93LiBSZXNldHRpbmcgdGhlIEhQRCBsaW5lIGJh Y2sgdG8gaXQncyBwcmV2aW91cyBzdGF0ZSwgaWYgZGVzaXJlZCwKPiArICogaXMgdGhlIHJlc3Bv bnNpYmlsaXR5IG9mIHRoZSBjYWxsZXIuCj4gKyAqLwo+ICt2b2lkIGNoYW1lbGl1bV9maXJlX2hw ZF9wdWxzZXMoaW50IHBvcnQsIGludCB3aWR0aF9tc2VjLCBpbnQgY291bnQpCj4gK3sKPiArICAg ICAgIHhtbHJwY192YWx1ZSAqcHVsc2Vfd2lkdGhzID0geG1scnBjX2FycmF5X25ldygmZW52KSwK PiArICAgICAgICAgICAgICAgICAgICAqd2lkdGggPSB4bWxycGNfaW50X25ldygmZW52LCB3aWR0 aF9tc2VjKSwgKnJlczsKPiArICAgICAgIGludCBpOwo+ICsKPiArICAgICAgIGlndF9kZWJ1Zygi RmlyaW5nICVkIEhQRCBwdWxzZXMgd2l0aCB3aWR0aCBvZiAlZCBtc2VjIG9uIHBvcnQgJWRcbiIs Cj4gKyAgICAgICAgICAgICAgICAgY291bnQsIHdpZHRoX21zZWMsIHBvcnQpOwo+ICsKPiArICAg ICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQo+ICsgICAgICAgICAgICAgICB4bWxycGNf YXJyYXlfYXBwZW5kX2l0ZW0oJmVudiwgcHVsc2Vfd2lkdGhzLCB3aWR0aCk7Cj4gKwo+ICsgICAg ICAgcmVzID0geG1scnBjX2NsaWVudF9jYWxsKCZlbnYsIGNoYW1lbGl1bV91cmwsICJGaXJlTWl4 ZWRIcGRQdWxzZXMiLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoaUEpIiwg cG9ydCwgcHVsc2Vfd2lkdGhzKTsKPiArICAgICAgIGNoZWNrX3JwYygpOwo+ICsKPiArICAgICAg IHhtbHJwY19ERUNSRUYocmVzKTsKPiArICAgICAgIHhtbHJwY19ERUNSRUYod2lkdGgpOwo+ICsg ICAgICAgeG1scnBjX0RFQ1JFRihwdWxzZV93aWR0aHMpOwo+ICt9Cj4gKwo+ICsvKioKPiArICog Y2hhbWVsaXVtX2ZpcmVfbWl4ZWRfaHBkX3B1bHNlczoKPiArICogQGlkOiBUaGUgSUQgb2YgdGhl IHBvcnQgdG8gZmlyZSBob3RwbHVnIHB1bHNlcyBvbgo+ICsgKiBALi4uOiBUaGUgbGVuZ3RoIG9m IGVhY2ggcHVsc2UgaW4gbWlsbGlzZWNvbmRzLCB0ZXJtaW5hdGVkIHdpdGggYSAlMAo+ICsgKgo+ ICsgKiBEb2VzIHRoZSBzYW1lIHRoaW5nIGFzICNjaGFtZWxpdW1fZmlyZV9ocGRfcHVsc2VzLCBi dXQgYWxsb3dzIHRoZSBjYWxsZXIgdG8KPiArICogc3BlY2lmeSB0aGUgbGVuZ3RoIG9mIGVhY2gg aW5kaXZpZHVhbCBwdWxzZS4KPiArICovCj4gK3ZvaWQgY2hhbWVsaXVtX2ZpcmVfbWl4ZWRfaHBk X3B1bHNlcyhpbnQgaWQsIC4uLikKPiArewo+ICsgICAgICAgdmFfbGlzdCBhcmdzOwo+ICsgICAg ICAgeG1scnBjX3ZhbHVlICpwdWxzZV93aWR0aHMgPSB4bWxycGNfYXJyYXlfbmV3KCZlbnYpLCAq d2lkdGgsICpyZXM7Cj4gKyAgICAgICBpbnQgYXJnOwo+ICsKPiArICAgICAgIGlndF9kZWJ1Zygi RmlyaW5nIG1peGVkIEhQRCBwdWxzZXMgb24gcG9ydCAlZFxuIiwgaWQpOwo+ICsKPiArICAgICAg IHZhX3N0YXJ0KGFyZ3MsIGlkKTsKPiArICAgICAgIGZvciAoYXJnID0gdmFfYXJnKGFyZ3MsIGlu dCk7IGFyZzsgYXJnID0gdmFfYXJnKGFyZ3MsIGludCkpIHsKPiArICAgICAgICAgICAgICAgd2lk dGggPSB4bWxycGNfaW50X25ldygmZW52LCBhcmcpOwo+ICsgICAgICAgICAgICAgICB4bWxycGNf YXJyYXlfYXBwZW5kX2l0ZW0oJmVudiwgcHVsc2Vfd2lkdGhzLCB3aWR0aCk7Cj4gKyAgICAgICAg ICAgICAgIHhtbHJwY19ERUNSRUYod2lkdGgpOwo+ICsgICAgICAgfQo+ICsgICAgICAgdmFfZW5k KGFyZ3MpOwo+ICsKPiArICAgICAgIHJlcyA9IHhtbHJwY19jbGllbnRfY2FsbCgmZW52LCBjaGFt ZWxpdW1fdXJsLCAiRmlyZU1peGVkSHBkUHVsc2VzIiwKPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiKGlBKSIsIGlkLCBwdWxzZV93aWR0aHMpOwo+ICsgICAgICAgY2hlY2tfcnBj KCk7Cj4gKyAgICAgICB4bWxycGNfREVDUkVGKHJlcyk7Cj4gKwo+ICsgICAgICAgeG1scnBjX0RF Q1JFRihwdWxzZV93aWR0aHMpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBhc3luY19ycGNfaGFu ZGxlcihjb25zdCBjaGFyICpzZXJ2ZXJfdXJsLCBjb25zdCBjaGFyICptZXRob2RfbmFtZSwKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxycGNfdmFsdWUgKnBhcmFtX2FycmF5LCB2 b2lkICp1c2VyX2RhdGEsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1scnBjX2Vu diAqZmF1bHQsIHhtbHJwY192YWx1ZSAqcmVzdWx0KQo+ICt7Cj4gKyAgICAgICAvKiBXZSBkb24n dCBjYXJlIGFib3V0IHRoZSByZXNwb25zZXMgKi8KPiArfQo+ICsKPiArLyoqCj4gKyAqIGNoYW1l bGl1bV9hc3luY19ocGRfcHVsc2Vfc3RhcnQ6Cj4gKyAqIEBpZDogVGhlIElEIG9mIHRoZSBwb3J0 IHRvIGZpcmUgYSBob3RwbHVnIHB1bHNlIG9uCj4gKyAqIEBoaWdoOiBXaGV0aGVyIHRvIGZpcmUg YSBoaWdoIHB1bHNlIChlLmcuIHNpbXVsYXRlIGEgY29ubmVjdCksIG9yIGEgbG93Cj4gKyAqIHB1 bHNlIChlLmcuIHNpbXVsYXRlIGEgZGlzY29ubmVjdCkKPiArICogQGRlbGF5X3NlY3M6IEhvdyBs b25nIHRvIHdhaXQgYmVmb3JlIHNlbmRpbmcgdGhlIEhQRCBwdWxzZS4KPiArICoKPiArICogSW5z dHJ1Y3RzIHRoZSBjaGFtZWxpdW0gdG8gc2VuZCBhbiBocGQgcHVsc2UgYWZ0ZXIgQGRlbGF5X3Nl Y3Mgc2Vjb25kcyBoYXZlCj4gKyAqIHBhc3NlZCwgd2l0aG91dCB3YWl0aW5nIGZvciB0aGUgY2hh bWVsaXVtIHRvIGZpbmlzaC4gVGhpcyBpcyB1c2VmdWwgZm9yCj4gKyAqIHRlc3RpbmcgdGhpbmdz IHN1Y2ggYXMgaHBkIGFmdGVyIGEgc3VzcGVuZC9yZXN1bWUgY3ljbGUsIHNpbmNlIHdlIGNhbid0 IHRlbGwKPiArICogdGhlIGNoYW1lbGl1bSB0byBzZW5kIGEgaG90cGx1ZyBhdCB0aGUgc2FtZSB0 aW1lIHRoYXQgb3VyIHN5c3RlbSBpcwo+ICsgKiBzdXNwZW5kZWQuCj4gKyAqCj4gKyAqIEl0IGlz IHJlcXVpcmVkIHRoYXQgdGhlIHVzZXIgZXZlbnR1YWxseSBjYWxsCj4gKyAqICNjaGFtZWxpdW1f YXN5bmNfaHBkX3B1bHNlX2ZpbmlzaCwgdG8gY2xlYW4gdXAgdGhlIGxlZnRvdmVyIFhNTC1SUEMK PiArICogcmVzcG9uc2VzIGZyb20gdGhlIGNoYW1lbGl1bS4KPiArICovCj4gK3ZvaWQgY2hhbWVs aXVtX2FzeW5jX2hwZF9wdWxzZV9zdGFydChpbnQgaWQsIGJvb2wgaGlnaCwgaW50IGRlbGF5X3Nl Y3MpCj4gK3sKPiArICAgICAgIHhtbHJwY192YWx1ZSAqcHVsc2Vfd2lkdGhzID0geG1scnBjX2Fy cmF5X25ldygmZW52KSwgKndpZHRoOwo+ICsKPiArICAgICAgIC8qIFRPRE86IEFjdHVhbGx5IGlt cGxlbWVudCBzb21ldGhpbmcgaW4gdGhlIGNoYW1lbGVvbiBzZXJ2ZXIgdG8gYWxsb3cKPiArICAg ICAgICAqIGZvciBkZWxheWVkIGFjdGlvbnMgc3VjaCBhcyBob3RwbHVncy4gVGhpcyB3b3VsZCB3 b3JrIGEgYml0IGJldHRlcgo+ICsgICAgICAgICogYW5kIGFsbG93IHVzIHRvIHRlc3Qgc3VzcGVu ZC9yZXN1bWUgb24gcG9ydHMgd2l0aG91dCBocGQgbGlrZSBWR0EKPiArICAgICAgICAqLwo+ICsK PiArICAgICAgIGlndF9kZWJ1ZygiU2VuZGluZyBIUEQgcHVsc2UgKCVzKSBvbiBwb3J0ICVkIHdp dGggJWQgc2Vjb25kIGRlbGF5XG4iLAo+ICsgICAgICAgICAgICAgICAgIGhpZ2ggPyAiaGlnaC0+ bG93IiA6ICJsb3ctPmhpZ2giLCBpZCwgZGVsYXlfc2Vjcyk7Cj4gKwo+ICsgICAgICAgLyogSWYg d2UncmUgc3RhcnRpbmcgYXQgaGlnaCwgbWFrZSB0aGUgZmlyc3QgcHVsc2Ugd2lkdGggMCBzbyB3 ZSBrZWVwCj4gKyAgICAgICAgKiB0aGUgcG9ydCBjb25uZWN0ZWQgKi8KPiArICAgICAgIGlmICho aWdoKSB7Cj4gKyAgICAgICAgICAgICAgIHdpZHRoID0geG1scnBjX2ludF9uZXcoJmVudiwgMCk7 Cj4gKyAgICAgICAgICAgICAgIHhtbHJwY19hcnJheV9hcHBlbmRfaXRlbSgmZW52LCBwdWxzZV93 aWR0aHMsIHdpZHRoKTsKPiArICAgICAgICAgICAgICAgeG1scnBjX0RFQ1JFRih3aWR0aCk7Cj4g KyAgICAgICB9Cj4gKwo+ICsgICAgICAgd2lkdGggPSB4bWxycGNfaW50X25ldygmZW52LCBkZWxh eV9zZWNzICogMTAwMCk7Cj4gKyAgICAgICB4bWxycGNfYXJyYXlfYXBwZW5kX2l0ZW0oJmVudiwg cHVsc2Vfd2lkdGhzLCB3aWR0aCk7Cj4gKyAgICAgICB4bWxycGNfREVDUkVGKHdpZHRoKTsKPiAr Cj4gKyAgICAgICB4bWxycGNfY2xpZW50X2NhbGxfYXN5bmNoKGNoYW1lbGl1bV91cmwsICJGaXJl TWl4ZWRIcGRQdWxzZXMiLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3lu Y19ycGNfaGFuZGxlciwgTlVMTCwgIihpQSkiLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpZCwgcHVsc2Vfd2lkdGhzKTsKPiArICAgICAgIHhtbHJwY19ERUNSRUYocHVsc2Vf d2lkdGhzKTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGNoYW1lbGl1bV9hc3luY19ocGRfcHVsc2Vf ZmluaXNoOgo+ICsgKgo+ICsgKiBXYWl0cyBmb3IgYW55IGFzeW5jaHJvbm91cyBSUEMgc3RhcnRl ZCBieSAjY2hhbWVsaXVtX2FzeW5jX2hwZF9wdWxzZV9zdGFydAo+ICsgKiB0byBjb21wbGV0ZSwg YW5kIHRoZW4gY2xlYW5zIHVwIGFueSBsZWZ0b3ZlciByZXNwb25zZXMgZnJvbSB0aGUgY2hhbWVs aXVtLgo+ICsgKiBJZiBhbGwgb2YgdGhlIFJQQyBjYWxscyBoYXZlIGFscmVhZHkgY29tcGxldGVk LCB0aGlzIGZ1bmN0aW9uIHJldHVybnMKPiArICogaW1tZWRpYXRlbHkuCj4gKyAqLwo+ICt2b2lk IGNoYW1lbGl1bV9hc3luY19ocGRfcHVsc2VfZmluaXNoKHZvaWQpCj4gK3sKPiArICAgICAgIHht bHJwY19jbGllbnRfZXZlbnRfbG9vcF9maW5pc2hfYXN5bmNoKCk7Cj4gK30KPiArCj4gKy8qKgo+ ICsgKiBjaGFtZWxpdW1fbmV3X2VkaWQ6Cj4gKyAqIEBlZGlkOiBUaGUgZWRpZCBibG9iIHRvIHVw bG9hZCB0byB0aGUgY2hhbWVsaXVtCj4gKyAqCj4gKyAqIFVwbG9hZHMgYW5kIHJlZ2lzdGVycyBh IG5ldyBFRElEIHdpdGggdGhlIGNoYW1lbGl1bS4gVGhlIEVESUQgd2lsbCBiZQo+ICsgKiBkZXN0 cm95ZWQgYXV0b21hdGljYWxseSB3aGVuICNjaGFtZWxpdW1fZGVpbml0IGlzIGNhbGxlZC4KPiAr ICoKPiArICogUmV0dXJuczogVGhlIElEIG9mIHRoZSBFRElEIHVwbG9hZGVkIHRvIHRoZSBjaGFt ZWxpdW0uCj4gKyAqLwo+ICtpbnQgY2hhbWVsaXVtX25ld19lZGlkKGNvbnN0IHVuc2lnbmVkIGNo YXIgKmVkaWQpCj4gK3sKPiArICAgICAgIHhtbHJwY192YWx1ZSAqcmVzOwo+ICsgICAgICAgc3Ry dWN0IGNoYW1lbGl1bV9lZGlkICphbGxvY2F0ZWRfZWRpZDsKPiArICAgICAgIGludCBlZGlkX2lk Owo+ICsKPiArICAgICAgIHJlcyA9IHhtbHJwY19jbGllbnRfY2FsbCgmZW52LCBjaGFtZWxpdW1f dXJsLCAiQ3JlYXRlRWRpZCIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIig2 KSIsIGVkaWQsIEVESURfTEVOR1RIKTsKPiArICAgICAgIGNoZWNrX3JwYygpOwo+ICsKPiArICAg ICAgIHhtbHJwY19yZWFkX2ludCgmZW52LCByZXMsICZlZGlkX2lkKTsKPiArICAgICAgIHhtbHJw Y19ERUNSRUYocmVzKTsKPiArCj4gKyAgICAgICBhbGxvY2F0ZWRfZWRpZCA9IG1hbGxvYyhzaXpl b2Yoc3RydWN0IGNoYW1lbGl1bV9lZGlkKSk7Cj4gKyAgICAgICBpZ3RfYXNzZXJ0KGFsbG9jYXRl ZF9lZGlkKTsKPiArCj4gKyAgICAgICBhbGxvY2F0ZWRfZWRpZC0+aWQgPSBlZGlkX2lkOwo+ICsg ICAgICAgaWYgKGFsbG9jYXRlZF9lZGlkcykgewo+ICsgICAgICAgICAgICAgICBpZ3RfbGlzdF9p bnNlcnQoJmFsbG9jYXRlZF9lZGlkcy0+bGluaywgJmFsbG9jYXRlZF9lZGlkLT5saW5rKTsKPiAr ICAgICAgIH0gZWxzZSB7Cj4gKyAgICAgICAgICAgICAgIGlndF9saXN0X2luaXQoJmFsbG9jYXRl ZF9lZGlkLT5saW5rKTsKPiArICAgICAgICAgICAgICAgYWxsb2NhdGVkX2VkaWRzID0gYWxsb2Nh dGVkX2VkaWQ7Cj4gKyAgICAgICB9Cj4gKwo+ICsgICAgICAgcmV0dXJuIGVkaWRfaWQ7Cj4gK30K PiArCj4gK3N0YXRpYyB2b2lkIGNoYW1lbGl1bV9kZXN0cm95X2VkaWQoaW50IGVkaWRfaWQpCj4g K3sKPiArICAgICAgIHhtbHJwY192YWx1ZSAqcmVzOwo+ICsKPiArICAgICAgIHJlcyA9IHhtbHJw Y19jbGllbnRfY2FsbCgmZW52LCBjaGFtZWxpdW1fdXJsLCAiRGVzdHJveUVkaWQiLAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoaSkiLCBlZGlkX2lkKTsKPiArICAgICAgIGNo ZWNrX3JwYygpOwo+ICsKPiArICAgICAgIHhtbHJwY19ERUNSRUYocmVzKTsKPiArfQo+ICsKPiAr LyoqCj4gKyAqIGNoYW1lbGl1bV9wb3J0X3NldF9lZGlkOgo+ICsgKiBAaWQ6IFRoZSBJRCBvZiB0 aGUgcG9ydCB0byBzZXQgdGhlIEVESUQgb24KPiArICogQGVkaWRfaWQ6IFRoZSBJRCBvZiBhbiBF RElEIG9uIHRoZSBjaGFtZWxpdW0gY3JlYXRlZCB3aXRoCj4gKyAqICNjaGFtZWxpdW1fbmV3X2Vk aWQsIG9yIDAgdG8gZGlzYWJsZSB0aGUgRURJRCBvbiB0aGUgcG9ydAo+ICsgKgo+ICsgKiBTZXRz IGEgcG9ydCBvbiB0aGUgY2hhbWVsaXVtIHRvIHVzZSB0aGUgc3BlY2lmaWVkIEVESUQuIFRoaXMg ZG9lcyBub3QgZmlyZSBhCj4gKyAqIGhvdHBsdWcgcHVsc2Ugb24gaXQncyBvd24sIGFuZCBtZXJl bHkgY2hhbmdlcyB3aGF0IEVESUQgdGhlIGNoYW1lbGl1bSBwb3J0Cj4gKyAqIHdpbGwgcmVwb3J0 IHRvIHVzIHRoZSBuZXh0IHRpbWUgd2UgcHJvYmUgaXQuIFVzZXJzIHdpbGwgbmVlZCB0byByZXBy b2JlIHRoZQo+ICsgKiBjb25uZWN0b3JzIHRoZW1zZWx2ZXMgaWYgdGhleSB3YW50IHRvIHNlZSB0 aGUgRURJRCByZXBvcnRlZCBieSB0aGUgcG9ydAo+ICsgKiBjaGFuZ2UuCj4gKyAqLwo+ICt2b2lk IGNoYW1lbGl1bV9wb3J0X3NldF9lZGlkKGludCBpZCwgaW50IGVkaWRfaWQpCj4gK3sKPiArICAg ICAgIHhtbHJwY192YWx1ZSAqcmVzOwo+ICsKPiArICAgICAgIHJlcyA9IHhtbHJwY19jbGllbnRf Y2FsbCgmZW52LCBjaGFtZWxpdW1fdXJsLCAiQXBwbHlFZGlkIiwKPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiKGlpKSIsIGlkLCBlZGlkX2lkKTsKPiArICAgICAgIGNoZWNrX3Jw YygpOwo+ICsKPiArICAgICAgIHhtbHJwY19ERUNSRUYocmVzKTsKPiArfQo+ICsKPiArLyoqCj4g KyAqIGNoYW1lbGl1bV9wb3J0X3NldF9kZGNfc3RhdGU6Cj4gKyAqIEBpZDogVGhlIElEIG9mIHRo ZSBwb3J0IHdob3NlIEREQyBidXMgd2Ugd2FudCB0byBtb2RpZnkKPiArICogQGVuYWJsZWQ6IFdo ZXRoZXIgb3Igbm90IHRvIGVuYWJsZSB0aGUgRERDIGJ1cwo+ICsgKgo+ICsgKiBUaGlzIGRpc2Fi bGVzIHRoZSBEREMgYnVzIChlLmcuIHRoZSBpMmMgbGluZSBvbiB0aGUgY29ubmVjdG9yIHRoYXQg Z2l2ZXMgdXMKPiArICogYW4gRURJRCkgb2YgdGhlIHNwZWNpZmllZCBwb3J0IG9uIHRoZSBjaGFt ZWxpdW0uIFRoaXMgaXMgdXNlZnVsIGZvciB0ZXN0aW5nCj4gKyAqIGJlaGF2aW9yIG9uIGxlZ2Fj eSBjb25uZWN0b3JzIHN1Y2ggYXMgVkdBLCB3aGVyZSB0aGUgcHJlc2VuY2Ugb2YgYSBEREMgYnVz Cj4gKyAqIGlzIG5vdCBhbHdheXMgZ3VhcmFudGVlZC4KPiArICovCj4gK3ZvaWQgY2hhbWVsaXVt X3BvcnRfc2V0X2RkY19zdGF0ZShpbnQgcG9ydCwgYm9vbCBlbmFibGVkKQo+ICt7Cj4gKyAgICAg ICB4bWxycGNfdmFsdWUgKnJlczsKPiArCj4gKyAgICAgICBpZ3RfZGVidWcoIiVzYWJsaW5nIERE QyBidXMgb24gcG9ydCAlZFxuIiwKPiArICAgICAgICAgICAgICAgICBlbmFibGVkID8gIkVuIiA6 ICJEaXMiLCBwb3J0KTsKPiArCj4gKyAgICAgICByZXMgPSB4bWxycGNfY2xpZW50X2NhbGwoJmVu diwgY2hhbWVsaXVtX3VybCwgIlNldERkY1N0YXRlIiwKPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiKGliKSIsIHBvcnQsIGVuYWJsZWQpOwo+ICsgICAgICAgY2hlY2tfcnBjKCk7 Cj4gKwo+ICsgICAgICAgeG1scnBjX0RFQ1JFRihyZXMpOwo+ICt9Cj4gKwo+ICsvKioKPiArICog Y2hhbWVsaXVtX3BvcnRfZ2V0X2RkY19zdGF0ZToKPiArICogQGlkOiBUaGUgSUQgb2YgdGhlIHBv cnQgd2hvc2UgRERDIGJ1cyB3ZSB3YW50IHRvIGNoZWNrIHRoZSBzdGF0dXMgb2YKPiArICoKPiAr ICogQ2hlY2sgd2hldGhlciBvciBub3QgdGhlIEREQyBidXMgb24gdGhlIHNwZWNpZmllZCBjaGFt ZWxpdW0gcG9ydCBpcyBlbmFibGVkCj4gKyAqIG9yIG5vdC4KPiArICoKPiArICogUmV0dXJuczog VHJ1ZSBpZiB0aGUgRERDIGJ1cyBpcyBlbmFibGVkLCBmYWxzZSBvdGhlcndpc2UuCj4gKyAqLwo+ ICtib29sIGNoYW1lbGl1bV9wb3J0X2dldF9kZGNfc3RhdGUoaW50IGlkKQo+ICt7Cj4gKyAgICAg ICB4bWxycGNfdmFsdWUgKnJlczsKPiArICAgICAgIHhtbHJwY19ib29sIGVuYWJsZWQ7Cj4gKwo+ ICsgICAgICAgcmVzID0geG1scnBjX2NsaWVudF9jYWxsKCZlbnYsIGNoYW1lbGl1bV91cmwsICJJ c0RkY0VuYWJsZWQiLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoaSkiLCBp ZCk7Cj4gKyAgICAgICBjaGVja19ycGMoKTsKPiArCj4gKyAgICAgICB4bWxycGNfcmVhZF9ib29s KCZlbnYsIHJlcywgJmVuYWJsZWQpOwo+ICsKPiArICAgICAgIHhtbHJwY19ERUNSRUYocmVzKTsK PiArICAgICAgIHJldHVybiBlbmFibGVkOwo+ICt9Cj4gKwo+ICsvKioKPiArICogY2hhbWVsaXVt X3BvcnRfZ2V0X3Jlc29sdXRpb246Cj4gKyAqIEBpZDogVGhlIElEIG9mIHRoZSBwb3J0IHdob3Nl IGRpc3BsYXkgcmVzb2x1dGlvbiB3ZSB3YW50IHRvIGNoZWNrCj4gKyAqIEB4OiBXaGVyZSB0byBz dG9yZSB0aGUgaG9yaXpvbnRhbCByZXNvbHV0aW9uIG9mIHRoZSBwb3J0Cj4gKyAqIEB5OiBXaGVy ZSB0byBzdG9yZSB0aGUgdmVyaWNhbCByZXNvbHV0aW9uIG9mIHRoZSBwb3J0Cj4gKyAqCj4gKyAq IENoZWNrIHRoZSBjdXJyZW50IHJlcG9ydGVkIGRpc3BsYXkgcmVzb2x1dGlvbiBvZiB0aGUgc3Bl Y2lmaWVkIHBvcnQgb24gdGhlCj4gKyAqIGNoYW1lbGl1bS4gVGhpcyBpbmZvcm1hdGlvbiBpcyBw cm92aWRlZCBieSB0aGUgY2hhbWVsaXVtIGl0c2VsZiwgbm90IERSTS4KPiArICogVXNlZnVsIGZv ciB2ZXJpZnlpbmcgdGhhdCB3ZSByZWFsbHkgYXJlIHNjYW5uaW5nIG91dCBhdCB0aGUgcmVzb2x1 dGlvbiB3ZQo+ICsgKiB0aGluayB3ZSBhcmUuCj4gKyAqLwo+ICt2b2lkIGNoYW1lbGl1bV9wb3J0 X2dldF9yZXNvbHV0aW9uKGludCBpZCwgaW50ICp4LCBpbnQgKnkpCj4gK3sKPiArICAgICAgIHht bHJwY192YWx1ZSAqcmVzLCAqcmVzX3gsICpyZXNfeTsKPiArCj4gKyAgICAgICByZXMgPSB4bWxy cGNfY2xpZW50X2NhbGwoJmVudiwgY2hhbWVsaXVtX3VybCwgIkRldGVjdFJlc29sdXRpb24iLAo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoaSkiLCBpZCk7Cj4gKyAgICAgICBj aGVja19ycGMoKTsKPiArCj4gKyAgICAgICB4bWxycGNfYXJyYXlfcmVhZF9pdGVtKCZlbnYsIHJl cywgMCwgJnJlc194KTsKPiArICAgICAgIHhtbHJwY19hcnJheV9yZWFkX2l0ZW0oJmVudiwgcmVz LCAxLCAmcmVzX3kpOwo+ICsgICAgICAgeG1scnBjX3JlYWRfaW50KCZlbnYsIHJlc194LCB4KTsK PiArICAgICAgIHhtbHJwY19yZWFkX2ludCgmZW52LCByZXNfeSwgeSk7Cj4gKwo+ICsgICAgICAg eG1scnBjX0RFQ1JFRihyZXNfeCk7Cj4gKyAgICAgICB4bWxycGNfREVDUkVGKHJlc195KTsKPiAr ICAgICAgIHhtbHJwY19ERUNSRUYocmVzKTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGNoYW1lbGl1 bV9nZXRfY3JjX2Zvcl9hcmVhOgo+ICsgKiBAaWQ6IFRoZSBJRCBvZiB0aGUgcG9ydCBmcm9tIHdo aWNoIHdlIHdhbnQgdG8gcmV0cmlldmUgdGhlIENSQwo+ICsgKiBAeDogVGhlIFggY29vcmRpbmF0 ZSBvbiB0aGUgZW11bGF0ZWQgZGlzcGxheSB0byBzdGFydCBjYWxjdWxhdGluZyB0aGUgQ1JDCj4g KyAqIGZyb20KPiArICogQHk6IFRoZSBZIGNvb3JkaW5hdGUgb24gdGhlIGVtdWxhdGVkIGRpc3Bs YXkgdG8gc3RhcnQgY2FsY3VsYXRpbmcgdGhlIENSQwo+ICsgKiBmcm9tCj4gKyAqIEB3OiBUaGUg d2lkdGggb2YgdGhlIGFyZWEgdG8gZmV0Y2ggdGhlIENSQyBmcm9tCj4gKyAqIEBoOiBUaGUgaGVp Z2h0IG9mIHRoZSBhcmVhIHRvIGZldGNoIHRoZSBDUkMgZnJvbQo+ICsgKgo+ICsgKiBSZWFkcyBi YWNrIHRoZSBwaXhlbCBDUkMgZm9yIGFuIGFyZWEgb24gdGhlIHNwZWNpZmllZCBjaGFtZWxpdW0g cG9ydC4gVGhpcwo+ICsgKiBpcyB0aGUgc2FtZSBhcyB1c2luZyB0aGUgQ1JDIHJlYWRiYWNrIGZy b20gYSBHUFUsIHRoZSBtYWluIGRpZmZlcmVuY2UgYmVpbmcKPiArICogdGhlIGRhdGEgaXMgcHJv dmlkZWQgYnkgdGhlIGNoYW1lbGl1bSBhbmQgYWxzbyBhbGxvd3MgdXMgdG8gc3BlY2lmeSBhIHJl Z2lvbgo+ICsgKiBvZiB0aGUgc2NyZWVuIHRvIHVzZSBhcyBvcHBvc2VkIHRvIHRoZSBlbnRpcmUg dGhpbmcuCj4gKyAqCj4gKyAqIFJldHVybnM6IFRoZSBDUkMgcmVhZCBiYWNrIGZyb20gdGhlIGNo YW1lbGl1bQo+ICsgKi8KPiArdW5zaWduZWQgaW50IGNoYW1lbGl1bV9nZXRfY3JjX2Zvcl9hcmVh KGludCBpZCwgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgpCj4gK3sKPiArICAgICAgIHhtbHJw Y192YWx1ZSAqcmVzOwo+ICsgICAgICAgdW5zaWduZWQgaW50IGNyYzsKPiArCj4gKyAgICAgICBy ZXMgPSB4bWxycGNfY2xpZW50X2NhbGwoJmVudiwgY2hhbWVsaXVtX3VybCwgIkNvbXB1dGVQaXhl bENoZWNrc3VtIiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKGlpaWlpKSIs IGlkLCB4LCB5LCB3LCBoKTsKPiArICAgICAgIGNoZWNrX3JwYygpOwo+ICsKPiArICAgICAgIHht bHJwY19yZWFkX2ludCgmZW52LCByZXMsIChpbnQqKSgmY3JjKSk7Cj4gKwo+ICsgICAgICAgeG1s cnBjX0RFQ1JFRihyZXMpOwo+ICsgICAgICAgcmV0dXJuIGNyYzsKPiArfQo+ICsKPiArc3RhdGlj IHVuc2lnbmVkIGludCBjaGFtZWxpdW1fZ2V0X3BvcnRfdHlwZShpbnQgcG9ydCkKPiArewo+ICsg ICAgICAgeG1scnBjX3ZhbHVlICpyZXM7Cj4gKyAgICAgICBjb25zdCBjaGFyICpwb3J0X3R5cGVf c3RyOwo+ICsgICAgICAgdW5zaWduZWQgaW50IHBvcnRfdHlwZTsKPiArCj4gKyAgICAgICByZXMg PSB4bWxycGNfY2xpZW50X2NhbGwoJmVudiwgY2hhbWVsaXVtX3VybCwgIkdldENvbm5lY3RvclR5 cGUiLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoaSkiLCBwb3J0KTsKPiAr ICAgICAgIGNoZWNrX3JwYygpOwo+ICsKPiArICAgICAgIHhtbHJwY19yZWFkX3N0cmluZygmZW52 LCByZXMsICZwb3J0X3R5cGVfc3RyKTsKPiArICAgICAgIGlndF9kZWJ1ZygiUG9ydCAlZCBpcyBv ZiB0eXBlICclcydcbiIsIHBvcnQsIHBvcnRfdHlwZV9zdHIpOwo+ICsKPiArICAgICAgIGlmIChz dHJjbXAocG9ydF90eXBlX3N0ciwgIkRQIikgPT0gMCkKPiArICAgICAgICAgICAgICAgcG9ydF90 eXBlID0gRFJNX01PREVfQ09OTkVDVE9SX0Rpc3BsYXlQb3J0Owo+ICsgICAgICAgZWxzZSBpZiAo c3RyY21wKHBvcnRfdHlwZV9zdHIsICJIRE1JIikgPT0gMCkKPiArICAgICAgICAgICAgICAgcG9y dF90eXBlID0gRFJNX01PREVfQ09OTkVDVE9SX0hETUlBOwo+ICsgICAgICAgZWxzZSBpZiAoc3Ry Y21wKHBvcnRfdHlwZV9zdHIsICJWR0EiKSA9PSAwKQo+ICsgICAgICAgICAgICAgICBwb3J0X3R5 cGUgPSBEUk1fTU9ERV9DT05ORUNUT1JfVkdBOwo+ICsgICAgICAgZWxzZQo+ICsgICAgICAgICAg ICAgICBwb3J0X3R5cGUgPSBEUk1fTU9ERV9DT05ORUNUT1JfVW5rbm93bjsKPiArCj4gKyAgICAg ICBmcmVlKCh2b2lkKilwb3J0X3R5cGVfc3RyKTsKPiArICAgICAgIHhtbHJwY19ERUNSRUYocmVz KTsKPiArCj4gKyAgICAgICByZXR1cm4gcG9ydF90eXBlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9p ZCBjaGFtZWxpdW1fcHJvYmVfcG9ydHModm9pZCkKPiArewo+ICsgICAgICAgeG1scnBjX3ZhbHVl ICpyZXMsICpwb3J0X3ZhbDsKPiArICAgICAgIHN0cnVjdCBjaGFtZWxpdW1fcG9ydCAqcG9ydDsK PiArICAgICAgIHVuc2lnbmVkIGludCBwb3J0X3R5cGU7Cj4gKyAgICAgICBpbnQgaWQsIGksIGxl bjsKPiArCj4gKyAgICAgICAvKiBGaWd1cmUgb3V0IHdoYXQgcG9ydHMgYXJlIGNvbm5lY3RlZCwg YWxvbmcgd2l0aCB0aGVpciB0eXBlcyAqLwo+ICsgICAgICAgcmVzID0geG1scnBjX2NsaWVudF9j YWxsKCZlbnYsIGNoYW1lbGl1bV91cmwsICJQcm9iZUlucHV0cyIsICIoKSIpOwo+ICsgICAgICAg Y2hlY2tfcnBjKCk7Cj4gKwo+ICsgICAgICAgbGVuID0geG1scnBjX2FycmF5X3NpemUoJmVudiwg cmVzKTsKPiArICAgICAgIGNoYW1lbGl1bV9wb3J0cyA9IGNhbGxvYyhzaXplb2Yoc3RydWN0IGNo YW1lbGl1bV9wb3J0KSwgbGVuKTsKPiArCj4gKyAgICAgICBpZ3RfYXNzZXJ0KGNoYW1lbGl1bV9w b3J0cyk7Cj4gKwo+ICsgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Cj4gKyAgICAg ICAgICAgICAgIHhtbHJwY19hcnJheV9yZWFkX2l0ZW0oJmVudiwgcmVzLCBpLCAmcG9ydF92YWwp Owo+ICsgICAgICAgICAgICAgICB4bWxycGNfcmVhZF9pbnQoJmVudiwgcG9ydF92YWwsICZpZCk7 Cj4gKyAgICAgICAgICAgICAgIHhtbHJwY19ERUNSRUYocG9ydF92YWwpOwo+ICsKPiArICAgICAg ICAgICAgICAgcG9ydF90eXBlID0gY2hhbWVsaXVtX2dldF9wb3J0X3R5cGUoaWQpOwo+ICsgICAg ICAgICAgICAgICBpZiAocG9ydF90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9Vbmtub3duKQo+ ICsgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+ICsKPiArICAgICAgICAgICAgICAg cG9ydCA9ICZjaGFtZWxpdW1fcG9ydHNbY2hhbWVsaXVtX3BvcnRfY291bnRdOwo+ICsgICAgICAg ICAgICAgICBwb3J0LT5pZCA9IGlkOwo+ICsgICAgICAgICAgICAgICBwb3J0LT50eXBlID0gcG9y dF90eXBlOwo+ICsgICAgICAgICAgICAgICBwb3J0LT5vcmlnaW5hbF9wbHVnZ2VkID0gY2hhbWVs aXVtX2lzX3BsdWdnZWQoaWQpOwo+ICsgICAgICAgICAgICAgICBjaGFtZWxpdW1fcG9ydF9jb3Vu dCsrOwo+ICsgICAgICAgfQo+ICsKPiArICAgICAgIGNoYW1lbGl1bV9wb3J0cyA9IHJlYWxsb2Mo Y2hhbWVsaXVtX3BvcnRzLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl b2Yoc3RydWN0IGNoYW1lbGl1bV9wb3J0KSAqCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNoYW1lbGl1bV9wb3J0X2NvdW50KTsKPiArICAgICAgIGlndF9hc3NlcnQoY2hhbWVs aXVtX3BvcnRzKTsKPiArCj4gKyAgICAgICB4bWxycGNfREVDUkVGKHJlcyk7Cj4gK30KPiArCj4g Ky8qKgo+ICsgKiBjaGFtZWxpdW1fcmVzZXQ6Cj4gKyAqCj4gKyAqIFJlc2V0cyB0aGUgY2hhbWVs aXVtJ3MgSU8gYm9hcmQuIEFzIHdlbGwsIHRoaXMgYWxzbyBoYXMgdGhlIGVmZmVjdCBvZgo+ICsg KiBjYXVzaW5nIGFsbCBvZiB0aGUgY2hhbWVsaXVtIHBvcnRzIHRvIGdldCBzZXQgdG8gdW5wbHVn Z2VkCj4gKyAqLwo+ICt2b2lkIGNoYW1lbGl1bV9yZXNldCh2b2lkKQo+ICt7Cj4gKyAgICAgICB4 bWxycGNfdmFsdWUgKnJlczsKPiArCj4gKyAgICAgICBpZ3RfZGVidWcoIlJlc2V0dGluZyB0aGUg Y2hhbWVsaXVtXG4iKTsKPiArCj4gKyAgICAgICByZXMgPSB4bWxycGNfY2xpZW50X2NhbGwoJmVu diwgY2hhbWVsaXVtX3VybCwgIlJlc2V0IiwgIigpIik7Cj4gKyAgICAgICBjaGVja19ycGMoKTsK PiArCj4gKyAgICAgICB4bWxycGNfREVDUkVGKHJlcyk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk IGNoYW1lbGl1bV9leGl0X2hhbmRsZXIoaW50IHNpZykKPiArewo+ICsgICAgICAgY2hhbWVsaXVt X2RlaW5pdCgpOwo+ICt9Cj4gKwo+ICsvKioKPiArICogY2hhbWVsaXVtX2luaXQ6Cj4gKyAqCj4g KyAqIFNldHMgdXAgYSBjb25uZWN0aW9uIHdpdGggYSBjaGFtZWxpdW0sIHVzaW5nIHRoZSB1cmwg cHJvdmlkZWQgaW4gdGhlCj4gKyAqIENIQU1FTElVTV9IT1NUIGVudmlvcm5tZW50IHZhcmlhYmxl LiBUaGlzIG11c3QgYmUgY2FsbGVkIGZpcnN0IGJlZm9yZSB0cnlpbmcKPiArICogdG8gdXNlIHRo ZSBjaGFtZWxpdW0uIFdoZW4gdGhlIGNvbm5lY3Rpb24gaXMgbm8gbG9uZ2VyIG5lZWRlZCwgdGhl IHVzZXIKPiArICogc2hvdWxkIGNhbGwgI2NoYW1lbGl1bV9kZWluaXQgdG8gZnJlZSB0aGUgcmVz b3VyY2VzIHVzZWQgYnkgdGhlIGNvbm5lY3Rpb24uCj4gKyAqCj4gKyAqIElmIHdlIGZhaWwgdG8g ZXN0YWJsaXNoIGEgY29ubmVjdGlvbiB3aXRoIHRoZSBjaGFtZWxpdW0sIHdlIGZhaWwgdGhlIGN1 cnJlbnQKPiArICogdGVzdC4KPiArICovCj4gK3ZvaWQgY2hhbWVsaXVtX2luaXQodm9pZCkKPiAr ewo+ICsgICAgICAgY2hhbWVsaXVtX3VybCA9IGdldGVudigiQ0hBTUVMSVVNX0hPU1QiKTsKPiAr ICAgICAgIGlndF9hc3NlcnQoY2hhbWVsaXVtX3VybCAhPSBOVUxMKTsKPiArCj4gKyAgICAgICB4 bWxycGNfZW52X2luaXQoJmVudik7Cj4gKwo+ICsgICAgICAgeG1scnBjX2NsaWVudF9pbml0Migm ZW52LCBYTUxSUENfQ0xJRU5UX05PX0ZMQUdTLCBQQUNLQUdFLAo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICBQQUNLQUdFX1ZFUlNJT04sIE5VTEwsIDApOwo+ICsgICAgICAgaWd0X2ZhaWxf b25fZihlbnYuZmF1bHRfb2NjdXJyZWQsCj4gKyAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQg dG8gaW5pdCB4bWxycGM6ICVzXG4iLAo+ICsgICAgICAgICAgICAgICAgICAgICBlbnYuZmF1bHRf c3RyaW5nKTsKPiArCj4gKyAgICAgICBjaGFtZWxpdW1fcHJvYmVfcG9ydHMoKTsKPiArICAgICAg IGNoYW1lbGl1bV9yZXNldCgpOwo+ICsKPiArICAgICAgIGlndF9pbnN0YWxsX2V4aXRfaGFuZGxl cihjaGFtZWxpdW1fZXhpdF9oYW5kbGVyKTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGNoYW1lbGl1 bV9kZWluaXQ6Cj4gKyAqCj4gKyAqIEZyZWVzIHRoZSByZXNvdXJjZXMgdXNlZCBieSBhIGNvbm5l Y3Rpb24gdG8gdGhlIGNoYW1lbGl1bSB0aGF0IHdhcyBzZXQgdXAKPiArICogd2l0aCAjY2hhbWVs aXVtX2luaXQuIEFzIHdlbGwsIHRoaXMgZnVuY3Rpb24gcmVzdG9yZXMgdGhlIHN0YXRlIG9mIHRo ZQo+ICsgKiBjaGFtZWxpdW0gbGlrZSBpdCB3YXMgYmVmb3JlIGNhbGxpbmcgI2NoYW1lbGl1bV9p bml0LiBUaGlzIGZ1bmN0aW9uIGlzIGFsc28KPiArICogY2FsbGVkIGFzIGFuIGV4aXQgaGFuZGxl ciwgc28gdXNlcnMgb25seSBuZWVkIHRvIGNhbGwgbWFudWFsbHkgaWYgdGhleSBkb24ndAo+ICsg KiB3YW50IHRoZSBjaGFtZWxpdW0gaW50ZXJmZXJpbmcgd2l0aCBvdGhlciB0ZXN0cyBpbiB0aGUg c2FtZSBmaWxlLgo+ICsgKi8KPiArdm9pZCBjaGFtZWxpdW1fZGVpbml0KHZvaWQpCj4gK3sKPiAr ICAgICAgIGludCBpOwo+ICsgICAgICAgc3RydWN0IGNoYW1lbGl1bV9lZGlkICpwb3MsICp0bXA7 Cj4gKwo+ICsgICAgICAgaWYgKCFjaGFtZWxpdW1fdXJsKQo+ICsgICAgICAgICAgICAgICByZXR1 cm47Cj4gKwo+ICsgICAgICAgLyogUmVzdG9yZSB0aGUgb3JpZ2luYWwgc3RhdGUgb2YgYWxsIG9m IHRoZSBjaGFtZWxpdW0gcG9ydHMgKi8KPiArICAgICAgIGlndF9kZWJ1ZygiUmVzdG9yaW5nIG9y aWdpbmFsIHN0YXRlIG9mIGNoYW1lbGl1bVxuIik7Cj4gKyAgICAgICBjaGFtZWxpdW1fcmVzZXQo KTsKPiArICAgICAgIGZvciAoaSA9IDA7IGkgPCBjaGFtZWxpdW1fcG9ydF9jb3VudDsgaSsrKSB7 Cj4gKyAgICAgICAgICAgICAgIGlmIChjaGFtZWxpdW1fcG9ydHNbaV0ub3JpZ2luYWxfcGx1Z2dl ZCkKPiArICAgICAgICAgICAgICAgICAgICAgICBjaGFtZWxpdW1fcGx1ZyhjaGFtZWxpdW1fcG9y dHNbaV0uaWQpOwo+ICsgICAgICAgfQo+ICsKPiArICAgICAgIC8qIERlc3Ryb3kgYW55IEVESURz IHdlIGNyZWF0ZWQgdG8gbWFrZSBzdXJlIHdlIGRvbid0IGxlYWsgdGhlbSAqLwo+ICsgICAgICAg aWd0X2xpc3RfZm9yX2VhY2hfc2FmZShwb3MsIHRtcCwgJmFsbG9jYXRlZF9lZGlkcy0+bGluaywg bGluaykgewo+ICsgICAgICAgICAgICAgICBjaGFtZWxpdW1fZGVzdHJveV9lZGlkKHBvcy0+aWQp Owo+ICsgICAgICAgICAgICAgICBmcmVlKHBvcyk7Cj4gKyAgICAgICB9Cj4gKwo+ICsgICAgICAg eG1scnBjX2NsaWVudF9jbGVhbnVwKCk7Cj4gKyAgICAgICB4bWxycGNfZW52X2NsZWFuKCZlbnYp Owo+ICsKPiArICAgICAgIGZyZWUoY2hhbWVsaXVtX3BvcnRzKTsKPiArICAgICAgIGFsbG9jYXRl ZF9lZGlkcyA9IE5VTEw7Cj4gKyAgICAgICBjaGFtZWxpdW1fdXJsID0gTlVMTDsKPiArICAgICAg IGNoYW1lbGl1bV9wb3J0cyA9IE5VTEw7Cj4gKyAgICAgICBjaGFtZWxpdW1fcG9ydF9jb3VudCA9 IDA7Cj4gK30KPiArCj4gZGlmZiAtLWdpdCBhL2xpYi9pZ3RfY2hhbWVsaXVtLmggYi9saWIvaWd0 X2NoYW1lbGl1bS5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi45MDA2 MTVjCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2xpYi9pZ3RfY2hhbWVsaXVtLmgKPiBAQCAtMCww ICsxLDc3IEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCDCqSAyMDE2IFJlZCBIYXQgSW5jLgo+ICsg Kgo+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8g YW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFz c29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+ICsgKiB0byBk ZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91 dCBsaW1pdGF0aW9uCj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdl LCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+ICsgKiBhbmQvb3Igc2VsbCBjb3Bp ZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiAr ICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dp bmcgY29uZGl0aW9uczoKPiArICoKPiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5k IHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAo+ICsgKiBwYXJhZ3Jh cGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlv bnMgb2YgdGhlCj4gKyAqIFNvZnR3YXJlLgo+ICsgKgo+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJP VklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+ ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSwKPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCj4gKyAqIFRIRSBBVVRI T1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VT IE9SIE9USEVSCj4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJB Q1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCj4gKyAqIEZST00sIE9VVCBPRiBPUiBJTiBD T05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MK PiArICogSU4gVEhFIFNPRlRXQVJFLgo+ICsgKgo+ICsgKiBBdXRob3JzOiBMeXVkZSBQYXVsIDxs eXVkZUByZWRoYXQuY29tPgo+ICsgKi8KPiArCj4gKyNpZm5kZWYgSUdUX0NIQU1FTElVTV9ICj4g KyNkZWZpbmUgSUdUX0NIQU1FTElVTV9ICj4gKwo+ICsjaW5jbHVkZSAiY29uZmlnLmgiCj4gKyNp bmNsdWRlICJpZ3QuaCIKPiArI2luY2x1ZGUgPHN0ZGJvb2wuaD4KPiArCj4gKy8qKgo+ICsgKiBj aGFtZWxpdW1fcG9ydDoKPiArICogQHR5cGU6IFRoZSBEUk0gY29ubmVjdG9yIHR5cGUgb2YgdGhl IGNoYW1lbGl1bSBwb3J0Cj4gKyAqIEBpZDogVGhlIElEIG9mIHRoZSBjaGFtZWxpdW0gcG9ydAo+ ICsgKi8KPiArc3RydWN0IGNoYW1lbGl1bV9wb3J0IHsKPiArICAgICAgIHVuc2lnbmVkIGludCB0 eXBlOwo+ICsgICAgICAgaW50IGlkOwo+ICsKPiArICAgICAgIC8qIEZvciByZXN0b3JpbmcgdGhl IG9yaWdpbmFsIHBvcnQgc3RhdGUgYWZ0ZXIgZmluaXNoaW5nIHRlc3RzICovCj4gKyAgICAgICBi b29sIG9yaWdpbmFsX3BsdWdnZWQ7Cj4gK307Cj4gKwo+ICtleHRlcm4gaW50IGNoYW1lbGl1bV9w b3J0X2NvdW50Owo+ICtleHRlcm4gc3RydWN0IGNoYW1lbGl1bV9wb3J0ICpjaGFtZWxpdW1fcG9y dHM7Cj4gKwo+ICsvKioKPiArICogaWd0X3JlcXVpcmVfY2hhbWVsaXVtOgo+ICsgKgo+ICsgKiBD aGVja3Mgd2hldGhlciBvciBub3QgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIENIQU1FTElVTV9I T1NUIGlzIG5vbi1udWxsLAo+ICsgKiBvdGhlcndpc2Ugc2tpcHMgdGhlIGN1cnJlbnQgdGVzdC4K PiArICovCj4gKyNkZWZpbmUgaWd0X3JlcXVpcmVfY2hhbWVsaXVtKCkgXAo+ICsgICAgICAgaWd0 X3JlcXVpcmUoZ2V0ZW52KCJDSEFNRUxJVU1fSE9TVCIpICE9IE5VTEwpOwo+ICsKPiArdm9pZCBj aGFtZWxpdW1faW5pdCh2b2lkKTsKPiArdm9pZCBjaGFtZWxpdW1fZGVpbml0KHZvaWQpOwo+ICt2 b2lkIGNoYW1lbGl1bV9yZXNldCh2b2lkKTsKPiArCj4gK3ZvaWQgY2hhbWVsaXVtX3BsdWcoaW50 IGlkKTsKPiArdm9pZCBjaGFtZWxpdW1fdW5wbHVnKGludCBpZCk7Cj4gK2Jvb2wgY2hhbWVsaXVt X2lzX3BsdWdnZWQoaW50IGlkKTsKPiArYm9vbCBjaGFtZWxpdW1fcG9ydF93YWl0X3ZpZGVvX2lu cHV0X3N0YWJsZShpbnQgaWQsIGludCB0aW1lb3V0X3NlY3MpOwo+ICt2b2lkIGNoYW1lbGl1bV9m aXJlX21peGVkX2hwZF9wdWxzZXMoaW50IGlkLCAuLi4pOwo+ICt2b2lkIGNoYW1lbGl1bV9maXJl X2hwZF9wdWxzZXMoaW50IGlkLCBpbnQgd2lkdGgsIGludCBjb3VudCk7Cj4gK3ZvaWQgY2hhbWVs aXVtX2FzeW5jX2hwZF9wdWxzZV9zdGFydChpbnQgaWQsIGJvb2wgaGlnaCwgaW50IGRlbGF5X3Nl Y3MpOwo+ICt2b2lkIGNoYW1lbGl1bV9hc3luY19ocGRfcHVsc2VfZmluaXNoKHZvaWQpOwo+ICtp bnQgY2hhbWVsaXVtX25ld19lZGlkKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVkaWQpOwo+ICt2b2lk IGNoYW1lbGl1bV9wb3J0X3NldF9lZGlkKGludCBpZCwgaW50IGVkaWRfaWQpOwo+ICtib29sIGNo YW1lbGl1bV9wb3J0X2dldF9kZGNfc3RhdGUoaW50IGlkKTsKPiArdm9pZCBjaGFtZWxpdW1fcG9y dF9zZXRfZGRjX3N0YXRlKGludCBpZCwgYm9vbCBlbmFibGVkKTsKPiArdm9pZCBjaGFtZWxpdW1f cG9ydF9nZXRfcmVzb2x1dGlvbihpbnQgaWQsIGludCAqeCwgaW50ICp5KTsKPiArdW5zaWduZWQg aW50IGNoYW1lbGl1bV9nZXRfY3JjX2Zvcl9hcmVhKGludCBpZCwgaW50IHgsIGludCB5LCBpbnQg dywgaW50IGgpOwo+ICsKPiArI2VuZGlmIC8qIElHVF9DSEFNRUxJVU1fSCAqLwo+IGRpZmYgLS1n aXQgYS9saWIvaWd0X2ttcy5jIGIvbGliL2lndF9rbXMuYwo+IGluZGV4IDk4OTcwNGUuLjc3Njhk N2IgMTAwNjQ0Cj4gLS0tIGEvbGliL2lndF9rbXMuYwo+ICsrKyBiL2xpYi9pZ3Rfa21zLmMKPiBA QCAtNDAsNiArNDAsMTAgQEAKPiAgI2VuZGlmCj4gICNpbmNsdWRlIDxlcnJuby5oPgo+ICAjaW5j bHVkZSA8dGltZS5oPgo+ICsjaWZkZWYgSEFWRV9DSEFNRUxJVU0KPiArI2luY2x1ZGUgPGxpYnVk ZXYuaD4KPiArI2luY2x1ZGUgPHBvbGwuaD4KPiArI2VuZGlmCj4KPiAgI2luY2x1ZGUgPGk5MTVf ZHJtLmg+Cj4KPiBAQCAtMjc2MCw2ICsyNzY0LDEwOSBAQCB2b2lkIGlndF9yZXNldF9jb25uZWN0 b3JzKHZvaWQpCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRldGVjdCIpOwo+ICB9 Cj4KPiArI2lmZGVmIEhBVkVfQ0hBTUVMSVVNCj4gK3N0YXRpYyBzdHJ1Y3QgdWRldl9tb25pdG9y ICpob3RwbHVnX21vbjsKPiArCj4gKy8qKgo+ICsgKiBpZ3Rfd2F0Y2hfaG90cGx1ZzoKPiArICoK PiArICogQmVnaW4gbW9uaXRvcmluZyB1ZGV2IGZvciBob3RwbHVnIGV2ZW50cy4KPiArICovCj4g K3ZvaWQgaWd0X3dhdGNoX2hvdHBsdWcodm9pZCkKPiArewo+ICsgICAgICAgc3RydWN0IHVkZXYg KnVkZXY7Cj4gKyAgICAgICBpbnQgcmV0LCBmbGFncywgZmQ7Cj4gKwo+ICsgICAgICAgaWYgKGhv dHBsdWdfbW9uKQo+ICsgICAgICAgICAgICAgICBpZ3RfY2xlYW51cF9ob3RwbHVnKCk7Cj4gKwo+ ICsgICAgICAgdWRldiA9IHVkZXZfbmV3KCk7Cj4gKyAgICAgICBpZ3RfYXNzZXJ0KHVkZXYgIT0g TlVMTCk7Cj4gKwo+ICsgICAgICAgaG90cGx1Z19tb24gPSB1ZGV2X21vbml0b3JfbmV3X2Zyb21f bmV0bGluayh1ZGV2LCAidWRldiIpOwo+ICsgICAgICAgaWd0X2Fzc2VydChob3RwbHVnX21vbiAh PSBOVUxMKTsKPiArCj4gKyAgICAgICByZXQgPSB1ZGV2X21vbml0b3JfZmlsdGVyX2FkZF9tYXRj aF9zdWJzeXN0ZW1fZGV2dHlwZShob3RwbHVnX21vbiwKPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkcm0iLAo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRy bV9taW5vciIpOwo+ICsgICAgICAgaWd0X2Fzc2VydF9lcShyZXQsIDApOwo+ICsgICAgICAgcmV0 ID0gdWRldl9tb25pdG9yX2ZpbHRlcl91cGRhdGUoaG90cGx1Z19tb24pOwo+ICsgICAgICAgaWd0 X2Fzc2VydF9lcShyZXQsIDApOwo+ICsgICAgICAgcmV0ID0gdWRldl9tb25pdG9yX2VuYWJsZV9y ZWNlaXZpbmcoaG90cGx1Z19tb24pOwo+ICsgICAgICAgaWd0X2Fzc2VydF9lcShyZXQsIDApOwo+ ICsKPiArICAgICAgIC8qIFNldCB0aGUgZmQgZm9yIHVkZXYgYXMgbm9uIGJsb2NraW5nICovCj4g KyAgICAgICBmZCA9IHVkZXZfbW9uaXRvcl9nZXRfZmQoaG90cGx1Z19tb24pOwo+ICsgICAgICAg ZmxhZ3MgPSBmY250bChmZCwgRl9HRVRGTCwgMCk7Cj4gKyAgICAgICBpZ3RfYXNzZXJ0KGZsYWdz KTsKPiArCj4gKyAgICAgICBmbGFncyB8PSBPX05PTkJMT0NLOwo+ICsgICAgICAgaWd0X2Fzc2Vy dF9uZXEoZmNudGwoZmQsIEZfU0VURkwsIGZsYWdzKSwgLTEpOwo+ICt9Cj4gKwo+ICsvKioKPiAr ICogaWd0X2hvdHBsdWdfZGV0ZWN0ZWQ6Cj4gKyAqIEB0aW1lb3V0X3NlY3M6IEhvdyBsb25nIHRv IHdhaXQgZm9yIGEgaG90cGx1ZyBldmVudCB0byBvY2N1ci4KPiArICoKPiArICogQXNzZXJ0IHRo YXQgYSBob3RwbHVnIGV2ZW50IHdhcyByZWNlaXZlZCBzaW5jZSB3ZSBsYXN0IGNoZWNrZWQgdGhl IG1vbml0b3IuCj4gKyAqLwo+ICtib29sIGlndF9ob3RwbHVnX2RldGVjdGVkKGludCB0aW1lb3V0 X3NlY3MpCj4gK3sKPiArICAgICAgIHN0cnVjdCB1ZGV2X2RldmljZSAqZGV2Owo+ICsgICAgICAg Y29uc3QgY2hhciAqaG90cGx1Z192YWw7Cj4gKyAgICAgICBzdHJ1Y3QgcG9sbGZkIGZkID0gewo+ ICsgICAgICAgICAgICAgICAuZmQgPSB1ZGV2X21vbml0b3JfZ2V0X2ZkKGhvdHBsdWdfbW9uKSwK PiArICAgICAgICAgICAgICAgLmV2ZW50cyA9IFBPTExJTgo+ICsgICAgICAgfTsKPiArICAgICAg IGJvb2wgaG90cGx1Z19yZWNlaXZlZCA9IGZhbHNlOwo+ICsKPiArICAgICAgIC8qIEdvIHRocm91 Z2ggYWxsIG9mIHRoZSBldmVudHMgcGVuZGluZyBvbiB0aGUgdWRldiBtb25pdG9yLiBPbmNlIHdl Cj4gKyAgICAgICAgKiByZWNlaXZlIGEgaG90cGx1Zywgd2UgY29udGludWUgZ29pbmcgdGhyb3Vn aCB0aGUgcmVzdCBvZiB0aGUgZXZlbnRzCj4gKyAgICAgICAgKiBzbyB0aGF0IHJlZHVuZGFudCBo b3RwbHVnIGV2ZW50cyBkb24ndCBjaGFuZ2UgdGhlIHJlc3VsdHMgb2YgZnV0dXJlCj4gKyAgICAg ICAgKiBjaGVja3MKPiArICAgICAgICAqLwo+ICsgICAgICAgd2hpbGUgKCFob3RwbHVnX3JlY2Vp dmVkICYmIHBvbGwoJmZkLCAxLCB0aW1lb3V0X3NlY3MgKiAxMDAwKSkgewo+ICsgICAgICAgICAg ICAgICBkZXYgPSB1ZGV2X21vbml0b3JfcmVjZWl2ZV9kZXZpY2UoaG90cGx1Z19tb24pOwo+ICsK PiArICAgICAgICAgICAgICAgaG90cGx1Z192YWwgPSB1ZGV2X2RldmljZV9nZXRfcHJvcGVydHlf dmFsdWUoZGV2LCAiSE9UUExVRyIpOwo+ICsgICAgICAgICAgICAgICBpZiAoaG90cGx1Z192YWwg JiYgYXRvaShob3RwbHVnX3ZhbCkgPT0gMSkKPiArICAgICAgICAgICAgICAgICAgICAgICBob3Rw bHVnX3JlY2VpdmVkID0gdHJ1ZTsKPiArCj4gKyAgICAgICAgICAgICAgIHVkZXZfZGV2aWNlX3Vu cmVmKGRldik7Cj4gKyAgICAgICB9Cj4gKwo+ICsgICAgICAgcmV0dXJuIGhvdHBsdWdfcmVjZWl2 ZWQ7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBpZ3RfZmx1c2hfaG90cGx1Z3M6Cj4gKyAqIEBtb246 IEEgdWRldiBtb25pdG9yIGNyZWF0ZWQgYnkgI2lndF93YXRjaF9ob3RwbHVnCj4gKyAqCj4gKyAq IEdldCByaWQgb2YgYW55IHBlbmRpbmcgaG90cGx1ZyBldmVudHMgd2FpdGluZyBvbiB0aGUgdWRl diBtb25pdG9yCj4gKyAqLwo+ICt2b2lkIGlndF9mbHVzaF9ob3RwbHVncyh2b2lkKQo+ICt7Cj4g KyAgICAgICBzdHJ1Y3QgdWRldl9kZXZpY2UgKmRldjsKPiArCj4gKyAgICAgICB3aGlsZSAoKGRl diA9IHVkZXZfbW9uaXRvcl9yZWNlaXZlX2RldmljZShob3RwbHVnX21vbikpKQo+ICsgICAgICAg ICAgICAgICB1ZGV2X2RldmljZV91bnJlZihkZXYpOwo+ICt9Cj4gKwo+ICsvKioKPiArICogaWd0 X2NsZWFudXBfaG90cGx1ZzoKPiArICoKPiArICogQ2xlYW51cCB0aGUgcmVzb3VyY2VzIGFsbG9j YXRlZCBieSAjaWd0X3dhdGNoX2hvdHBsdWcKPiArICovCj4gK3ZvaWQgaWd0X2NsZWFudXBfaG90 cGx1Zyh2b2lkKQo+ICt7Cj4gKyAgICAgICBzdHJ1Y3QgdWRldiAqdWRldiA9IHVkZXZfbW9uaXRv cl9nZXRfdWRldihob3RwbHVnX21vbik7Cj4gKwo+ICsgICAgICAgdWRldl9tb25pdG9yX3VucmVm KGhvdHBsdWdfbW9uKTsKPiArICAgICAgIGhvdHBsdWdfbW9uID0gTlVMTDsKPiArICAgICAgIHVk ZXZfdW5yZWYodWRldik7Cj4gK30KPiArI2VuZGlmCj4gKwo+ICAvKioKPiAgICoga21zdGVzdF9n ZXRfdmJsX2ZsYWc6Cj4gICAqIEBwaXBlX2lkOiBQaXBlIHRvIGNvbnZlcnQgdG8gZmxhZyByZXBy ZXNlbnRhdGlvbi4KPiBkaWZmIC0tZ2l0IGEvbGliL2lndF9rbXMuaCBiL2xpYi9pZ3Rfa21zLmgK PiBpbmRleCA2NDIyYWRjLi5kMGI2N2UwIDEwMDY0NAo+IC0tLSBhL2xpYi9pZ3Rfa21zLmgKPiAr KysgYi9saWIvaWd0X2ttcy5oCj4gQEAgLTMxLDYgKzMxLDkgQEAKPiAgI2luY2x1ZGUgPHN0ZGJv b2wuaD4KPiAgI2luY2x1ZGUgPHN0ZGludC5oPgo+ICAjaW5jbHVkZSA8c3RkZGVmLmg+Cj4gKyNp ZmRlZiBIQVZFX0NIQU1FTElVTQo+ICsjaW5jbHVkZSA8bGlidWRldi5oPgo+ICsjZW5kaWYKPgo+ ICAjaW5jbHVkZSA8eGY4NmRybU1vZGUuaD4KPgo+IEBAIC0zMzMsNiArMzM2LDcgQEAgaWd0X3Bs YW5lX3QgKmlndF9vdXRwdXRfZ2V0X3BsYW5lKGlndF9vdXRwdXRfdCAqb3V0cHV0LCBlbnVtIGln dF9wbGFuZSBwbGFuZSk7Cj4gIGJvb2wgaWd0X3BpcGVfZ2V0X3Byb3BlcnR5KGlndF9waXBlX3Qg KnBpcGUsIGNvbnN0IGNoYXIgKm5hbWUsCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlu dDMyX3QgKnByb3BfaWQsIHVpbnQ2NF90ICp2YWx1ZSwKPiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBkcm1Nb2RlUHJvcGVydHlQdHIgKnByb3ApOwo+ICt2b2lkIGlndF9vdXRwdXRfZ2V0X2Vk aWQoaWd0X291dHB1dF90ICpvdXRwdXQsIHVuc2lnbmVkIGNoYXIgKmVkaWRfb3V0KTsKPgo+ICBz dGF0aWMgaW5saW5lIGJvb2wgaWd0X3BsYW5lX3N1cHBvcnRzX3JvdGF0aW9uKGlndF9wbGFuZV90 ICpwbGFuZSkKPiAgewo+IEBAIC00NzgsNiArNDgyLDEzIEBAIHVpbnQzMl90IGttc3Rlc3RfZ2V0 X3ZibF9mbGFnKHVpbnQzMl90IHBpcGVfaWQpOwo+ICAjZGVmaW5lIEVESURfTEVOR1RIIDEyOAo+ ICBjb25zdCB1bnNpZ25lZCBjaGFyKiBpZ3Rfa21zX2dldF9iYXNlX2VkaWQodm9pZCk7Cj4gIGNv bnN0IHVuc2lnbmVkIGNoYXIqIGlndF9rbXNfZ2V0X2FsdF9lZGlkKHZvaWQpOwo+IC0KPiArYm9v bCBpZ3RfY29tcGFyZV9vdXRwdXRfZWRpZChpZ3Rfb3V0cHV0X3QgKm91dHB1dCwgY29uc3QgdW5z aWduZWQgY2hhciAqZWRpZCk7Cj4gKwo+ICsjaWZkZWYgSEFWRV9DSEFNRUxJVU0KPiArdm9pZCBp Z3Rfd2F0Y2hfaG90cGx1Zyh2b2lkKTsKPiArYm9vbCBpZ3RfaG90cGx1Z19kZXRlY3RlZChpbnQg dGltZW91dF9zZWNzKTsKPiArdm9pZCBpZ3RfZmx1c2hfaG90cGx1Z3Modm9pZCk7Cj4gK3ZvaWQg aWd0X2NsZWFudXBfaG90cGx1Zyh2b2lkKTsKPiArI2VuZGlmCj4KPiAgI2VuZGlmIC8qIF9fSUdU X0tNU19IX18gKi8KPiBkaWZmIC0tZ2l0IGEvc2NyaXB0cy9ydW4tdGVzdHMuc2ggYi9zY3JpcHRz L3J1bi10ZXN0cy5zaAo+IGluZGV4IDk3YmE5ZTUuLjY1MzliZjkgMTAwNzU1Cj4gLS0tIGEvc2Ny aXB0cy9ydW4tdGVzdHMuc2gKPiArKysgYi9zY3JpcHRzL3J1bi10ZXN0cy5zaAo+IEBAIC0xMjIs MTAgKzEyMiwxMCBAQCBpZiBbICEgLXggIiRQSUdMSVQiIF07IHRoZW4KPiAgZmkKPgo+ICBpZiBb ICJ4JFJFU1VNRSIgIT0gIngiIF07IHRoZW4KPiAtICAgICAgIHN1ZG8gSUdUX1RFU1RfUk9PVD0i JElHVF9URVNUX1JPT1QiICIkUElHTElUIiByZXN1bWUgIiRSRVNVTFRTIiAkTk9SRVRSWQo+ICsg ICAgICAgc3VkbyBJR1RfVEVTVF9ST09UPSIkSUdUX1RFU1RfUk9PVCIgQ0hBTUVMSVVNX0hPU1Q9 IiRDSEFNRUxJVU1fSE9TVCIgIiRQSUdMSVQiIHJlc3VtZSAiJFJFU1VMVFMiICROT1JFVFJZCj4g IGVsc2UKPiAgICAgICAgIG1rZGlyIC1wICIkUkVTVUxUUyIKPiAtICAgICAgIHN1ZG8gSUdUX1RF U1RfUk9PVD0iJElHVF9URVNUX1JPT1QiICIkUElHTElUIiBydW4gaWd0IC1vICIkUkVTVUxUUyIg LXMgJFZFUkJPU0UgJEVYQ0xVREUgJEZJTFRFUgo+ICsgICAgICAgc3VkbyBJR1RfVEVTVF9ST09U PSIkSUdUX1RFU1RfUk9PVCIgQ0hBTUVMSVVNX0hPU1Q9IiRDSEFNRUxJVU1fSE9TVCIgIiRQSUdM SVQiIHJ1biBpZ3QgLW8gIiRSRVNVTFRTIiAtcyAkVkVSQk9TRSAkRVhDTFVERSAkRklMVEVSCj4g IGZpCj4KPiAgaWYgWyAiJFNVTU1BUlkiID09ICJodG1sIiBdOyB0aGVuCj4gZGlmZiAtLWdpdCBh L3Rlc3RzL01ha2VmaWxlLmFtIGIvdGVzdHMvTWFrZWZpbGUuYW0KPiBpbmRleCBhNDA4MTI2Li4w NmE4ZTZiIDEwMDY0NAo+IC0tLSBhL3Rlc3RzL01ha2VmaWxlLmFtCj4gKysrIGIvdGVzdHMvTWFr ZWZpbGUuYW0KPiBAQCAtNjMsNyArNjMsNyBAQCBBTV9DRkxBR1MgPSAkKERSTV9DRkxBR1MpICQo Q1dBUk5GTEFHUykgLVduby11bnVzZWQtcmVzdWx0ICQoREVCVUdfQ0ZMQUdTKVwKPiAgICAgICAg ICQoTElCVU5XSU5EX0NGTEFHUykgJChXRVJST1JfQ0ZMQUdTKSBcCj4gICAgICAgICAkKE5VTEwp Cj4KPiAtTERBREQgPSAuLi9saWIvbGliaW50ZWxfdG9vbHMubGEgJChHTElCX0xJQlMpCj4gK0xE QUREID0gLi4vbGliL2xpYmludGVsX3Rvb2xzLmxhICQoR0xJQl9MSUJTKSAkKFhNTFJQQ19MSUJT KQo+Cj4gIEFNX0NGTEFHUyArPSAkKENBSVJPX0NGTEFHUykgJChMSUJVREVWX0NGTEFHUykgJChH TElCX0NGTEFHUykKPiAgQU1fTERGTEFHUyA9IC1XbCwtLWFzLW5lZWRlZAo+IEBAIC0xMTksNSAr MTE5LDggQEAgdmM0X3dhaXRfYm9fQ0ZMQUdTID0gJChBTV9DRkxBR1MpICQoRFJNX1ZDNF9DRkxB R1MpCj4gIHZjNF93YWl0X2JvX0xEQUREID0gJChMREFERCkgJChEUk1fVkM0X0xJQlMpCj4gIHZj NF93YWl0X3NlcW5vX0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKSAkKERSTV9WQzRfQ0ZMQUdTKQo+ICB2 YzRfd2FpdF9zZXFub19MREFERCA9ICQoTERBREQpICQoRFJNX1ZDNF9MSUJTKQo+ICsKPiArY2hh bWVsaXVtX0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKSAkKFhNTFJQQ19DRkxBR1MpICQoVURFVl9DRkxB R1MpCj4gK2NoYW1lbGl1bV9MREFERCA9ICQoTERBREQpICQoWE1MUlBDX0xJQlMpICQoVURFVl9M SUJTKQo+ICBlbmRpZgo+Cj4gZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMgYi90 ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCj4gaW5kZXggNmQwODFjMy4uM2UwMTg1MiAxMDA2NDQKPiAt LS0gYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCj4gKysrIGIvdGVzdHMvTWFrZWZpbGUuc291cmNl cwo+IEBAIC0xMzEsNiArMTMxLDcgQEAgVEVTVFNfcHJvZ3NfTSA9IFwKPiAgICAgICAgIHRlbXBs YXRlIFwKPiAgICAgICAgIHZnZW1fYmFzaWMgXAo+ICAgICAgICAgdmdlbV9zbG93IFwKPiArICAg ICAgIGNoYW1lbGl1bSBcCj4gICAgICAgICAkKE5VTEwpCj4KPiAgVEVTVFNfcHJvZ3NfWE0gPSBc Cj4gZGlmZiAtLWdpdCBhL3Rlc3RzL2NoYW1lbGl1bS5jIGIvdGVzdHMvY2hhbWVsaXVtLmMKPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjc2OWNmZGMKPiAtLS0gL2Rldi9u dWxsCj4gKysrIGIvdGVzdHMvY2hhbWVsaXVtLmMKPiBAQCAtMCwwICsxLDU0OSBAQAo+ICsvKgo+ ICsgKiBDb3B5cmlnaHQgwqkgMjAxNiBSZWQgSGF0IEluYy4KPiArICoKPiArICogUGVybWlzc2lv biBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWlu aW5nIGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50 YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdh cmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+ICsg KiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJp YnV0ZSwgc3VibGljZW5zZSwKPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2Fy ZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4gKyAqIFNvZnR3YXJlIGlzIGZ1 cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4g KyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24g bm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNs dWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+ICsgKiBT b2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJ VEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiArICogSU1QTElFRCwgSU5D TFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5H RU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQg SE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+ICsgKiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVS V0lTRSwgQVJJU0lORwo+ICsgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRI RSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCj4gKyAqIElOIFRIRSBTT0ZU V0FSRS4KPiArICoKPiArICogQXV0aG9yczoKPiArICogICAgTHl1ZGUgUGF1bCA8bHl1ZGVAcmVk aGF0LmNvbT4KPiArICovCj4gKwo+ICsjaW5jbHVkZSAiY29uZmlnLmgiCj4gKyNpbmNsdWRlICJp Z3QuaCIKPiArCj4gKyNpbmNsdWRlIDxmY250bC5oPgo+ICsjaW5jbHVkZSA8c3RyaW5nLmg+Cj4g Kwo+ICtzdHJ1Y3QgY29ubmVjdG9yX2luZm8gewo+ICsgICAgICAgaW50IGlkOwo+ICsgICAgICAg dW5zaWduZWQgaW50IHR5cGU7Cj4gK307Cj4gKwo+ICt0eXBlZGVmIHN0cnVjdCB7Cj4gKyAgICAg ICBpbnQgZHJtX2ZkOwo+ICsgICAgICAgc3RydWN0IGNvbm5lY3Rvcl9pbmZvICpjb25uZWN0b3Jz Owo+ICsgICAgICAgaW50IGNvbm5lY3Rvcl9jb3VudDsKPiArfSBkYXRhX3Q7Cj4gKwo+ICsjZGVm aW5lIEhPVFBMVUdfVElNRU9VVCAzMCAvKiBzZWNvbmRzICovCj4gKwo+ICsvKgo+ICsgKiBTaW5j ZSB3ZSBjYW4ndCBnZXQgYW4gZXhhY3QgbWFwcGluZyBvZiB3aGljaCBjaGFtZWxpdW0gcG9ydHMg YXJlIGNvbm5lY3RlZAo+ICsgKiB0byBlYWNoIG9mIHRoZSBEVVQncyBwb3J0cywgd2UgaGF2ZSB0 byBmaWd1cmUgb3V0IHdoZXRoZXIgb3Igbm90IHRoZSBzdGF0dXMKPiArICogb2YgYSBwb3J0IG9u IHRoZSBjaGFtZWxpdW0gaGFzIGNoYW5nZWQgYnkgY291bnRpbmcgdGhlIG51bWJlciBvZiBjb25u ZWN0b3JzCj4gKyAqIHdpdGggdGhlIGNvbm5lY3RvciB0eXBlIGFuZCBzdGF0dXMgd2Ugd2FudCwg YW5kIHRoZW4gY29tcGFyaW5nIHRoZSB2YWx1ZXMKPiArICogZnJvbSBiZWZvcmUgaG90cGx1Z2dp bmcgYW5kIGFmdGVyCj4gKyAqLwo+ICtzdGF0aWMgdm9pZAo+ICtyZXByb2JlX2Nvbm5lY3RvcnMo ZGF0YV90ICpkYXRhLCB1bnNpZ25lZCBpbnQgdHlwZSkKPiArewo+ICsgICAgICAgZHJtTW9kZUNv bm5lY3RvciAqY29ubmVjdG9yOwo+ICsgICAgICAgaW50IGk7Cj4gKwo+ICsgICAgICAgaWd0X2Rl YnVnKCJSZXByb2JpbmcgJXMgY29ubmVjdG9ycy4uLlxuIiwKPiArICAgICAgICAgICAgICAgICBr bXN0ZXN0X2Nvbm5lY3Rvcl90eXBlX3N0cih0eXBlKSk7Cj4gKwo+ICsgICAgICAgZm9yIChpID0g MDsgaSA8IGRhdGEtPmNvbm5lY3Rvcl9jb3VudDsgaSsrKSB7Cj4gKyAgICAgICAgICAgICAgIGlm IChkYXRhLT5jb25uZWN0b3JzW2ldLnR5cGUgIT0gdHlwZSkKPiArICAgICAgICAgICAgICAgICAg ICAgICBjb250aW51ZTsKPiArCj4gKyAgICAgICAgICAgICAgIGNvbm5lY3RvciA9IGRybU1vZGVH ZXRDb25uZWN0b3IoZGF0YS0+ZHJtX2ZkLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGRhdGEtPmNvbm5lY3RvcnNbaV0uaWQpOwo+ICsgICAgICAgICAg ICAgICBpZ3RfYXNzZXJ0KGNvbm5lY3Rvcik7Cj4gKwo+ICsgICAgICAgICAgICAgICBkcm1Nb2Rl RnJlZUNvbm5lY3Rvcihjb25uZWN0b3IpOwo+ICsgICAgICAgfQo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZAo+ICtyZXNldF9jaGFtZWxpdW1fc3RhdGUoZGF0YV90ICpkYXRhKQo+ICt7Cj4gKyAgICAg ICBjaGFtZWxpdW1fcmVzZXQoKTsKPiArICAgICAgIHJlcHJvYmVfY29ubmVjdG9ycyhkYXRhLCBE Uk1fTU9ERV9DT05ORUNUT1JfRGlzcGxheVBvcnQpOwo+ICsgICAgICAgcmVwcm9iZV9jb25uZWN0 b3JzKGRhdGEsIERSTV9NT0RFX0NPTk5FQ1RPUl9IRE1JQSk7Cj4gKyAgICAgICByZXByb2JlX2Nv bm5lY3RvcnMoZGF0YSwgRFJNX01PREVfQ09OTkVDVE9SX1ZHQSk7Cj4gK30KPiArCj4gK3N0YXRp YyBpbnQKPiArY29ubmVjdG9yX3N0YXR1c19jb3VudChkYXRhX3QgKmRhdGEsIHVuc2lnbmVkIGlu dCB0eXBlLCB1bnNpZ25lZCBpbnQgc3RhdHVzKQo+ICt7Cj4gKyAgICAgICBzdHJ1Y3QgY29ubmVj dG9yX2luZm8gKmluZm87Cj4gKyAgICAgICBkcm1Nb2RlQ29ubmVjdG9yICpjb25uZWN0b3I7Cj4g KyAgICAgICBpbnQgY291bnQgPSAwOwo+ICsKPiArICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg ZGF0YS0+Y29ubmVjdG9yX2NvdW50OyBpKyspIHsKPiArICAgICAgICAgICAgICAgaW5mbyA9ICZk YXRhLT5jb25uZWN0b3JzW2ldOwo+ICsgICAgICAgICAgICAgICBpZiAoaW5mby0+dHlwZSAhPSB0 eXBlKQo+ICsgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+ICsKPiArICAgICAgICAg ICAgICAgY29ubmVjdG9yID0gZHJtTW9kZUdldENvbm5lY3RvckN1cnJlbnQoZGF0YS0+ZHJtX2Zk LCBpbmZvLT5pZCk7Cj4gKyAgICAgICAgICAgICAgIGlndF9hc3NlcnQoY29ubmVjdG9yKTsKPiAr Cj4gKyAgICAgICAgICAgICAgIGlmIChjb25uZWN0b3ItPmNvbm5lY3Rpb24gPT0gc3RhdHVzKQo+ ICsgICAgICAgICAgICAgICAgICAgICAgIGNvdW50Kys7Cj4gKwo+ICsgICAgICAgICAgICAgICBk cm1Nb2RlRnJlZUNvbm5lY3Rvcihjb25uZWN0b3IpOwo+ICsgICAgICAgfQo+ICsKPiArICAgICAg IHJldHVybiBjb3VudDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQKPiArcmVxdWlyZV9jb25uZWN0 b3JfcHJlc2VudChkYXRhX3QgKmRhdGEsIHVuc2lnbmVkIGludCB0eXBlKQo+ICt7Cj4gKyAgICAg ICBpbnQgaTsKPiArICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKPiArCj4gKyAgICAgICBmb3Ig KGkgPSAwOyBpIDwgZGF0YS0+Y29ubmVjdG9yX2NvdW50ICYmICFmb3VuZDsgaSsrKSB7Cj4gKyAg ICAgICAgICAgICAgIGlmIChkYXRhLT5jb25uZWN0b3JzW2ldLnR5cGUgPT0gdHlwZSkKPiArICAg ICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Cj4gKyAgICAgICB9Cj4gKwo+ICsgICAg ICAgaWd0X3JlcXVpcmVfZihmb3VuZCwgIk5vIHBvcnQgb2YgdHlwZSAlcyB3YXMgZm91bmQgb24g dGhlIHN5c3RlbVxuIiwKPiArICAgICAgICAgICAgICAgICAgICAga21zdGVzdF9jb25uZWN0b3Jf dHlwZV9zdHIodHlwZSkpOwo+ICsKPiArICAgICAgIGZvciAoaSA9IDAsIGZvdW5kID0gZmFsc2U7 IGkgPCBjaGFtZWxpdW1fcG9ydF9jb3VudCAmJiAhZm91bmQ7IGkrKykgewo+ICsgICAgICAgICAg ICAgICBpZiAoY2hhbWVsaXVtX3BvcnRzW2ldLnR5cGUgPT0gdHlwZSkKPiArICAgICAgICAgICAg ICAgICAgICAgICBmb3VuZCA9IHRydWU7Cj4gKyAgICAgICB9Cj4gKwo+ICsgICAgICAgaWd0X3Jl cXVpcmVfZihmb3VuZCwgIk5vIGNvbm5lY3RlZCBwb3J0IG9mIHR5cGUgJXMgd2FzIGZvdW5kIG9u IHRoZSBjaGFtZWxpdW1cbiIsCj4gKyAgICAgICAgICAgICAgICAgICAgIGttc3Rlc3RfY29ubmVj dG9yX3R5cGVfc3RyKHR5cGUpKTsKPiArfQo+ICsKPiArc3RhdGljIGRybU1vZGVDb25uZWN0b3Ig Kgo+ICtmaW5kX2Nvbm5lY3RlZChkYXRhX3QgKmRhdGEsIHVuc2lnbmVkIGludCB0eXBlKQo+ICt7 Cj4gKyAgICAgICBkcm1Nb2RlQ29ubmVjdG9yICpjb25uZWN0b3I7Cj4gKyAgICAgICBpbnQgaTsK PiArCj4gKyAgICAgICBmb3IgKGkgPSAwOyBpIDwgZGF0YS0+Y29ubmVjdG9yX2NvdW50OyBpKysp IHsKPiArICAgICAgICAgICAgICAgaWYgKGRhdGEtPmNvbm5lY3RvcnNbaV0udHlwZSAhPSB0eXBl KQo+ICsgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+ICsKPiArICAgICAgICAgICAg ICAgY29ubmVjdG9yID0gZHJtTW9kZUdldENvbm5lY3RvcihkYXRhLT5kcm1fZmQsCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+Y29ubmVjdG9y c1tpXS5pZCk7Cj4gKyAgICAgICAgICAgICAgIGlndF9hc3NlcnQoY29ubmVjdG9yKTsKPiArCj4g KyAgICAgICAgICAgICAgIGlmIChjb25uZWN0b3ItPmNvbm5lY3Rpb24gPT0gRFJNX01PREVfQ09O TkVDVEVEKQo+ICsgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb25uZWN0b3I7Cj4gKwo+ ICsgICAgICAgICAgICAgICBkcm1Nb2RlRnJlZUNvbm5lY3Rvcihjb25uZWN0b3IpOwo+ICsgICAg ICAgfQo+ICsKPiArICAgICAgIHJldHVybiBOVUxMOwo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBTa2lw cyB0aGUgdGVzdCBpZiB3ZSBmaW5kIGFueSBjb25uZWN0b3JzIHdpdGggYSBtYXRjaGluZyB0eXBl IGNvbm5lY3RlZC4KPiArICogVGhpcyBpcyBuZWNlc3Nhcnkgd2hlbiB3ZSBuZWVkIHRvIGlkZW50 aWZ5IHdoaWNoIHBvcnQgb24gdGhlIG1hY2hpbmUgaXMKPiArICogY29ubmVjdGVkIHRvIHdoaWNo IHBvcnQgb24gdGhlIGNoYW1lbGl1bSwgc2luY2UgYW55IG90aGVyIHBvcnRzIHRoYXQgYXJlCj4g KyAqIGNvbm5lY3RlZCB0byBvdGhlciBkaXNwbGF5cyBjb3VsZCBjYXVzZSB1cyB0byBjaG9vc2Ug dGhlIHdyb25nIHBvcnQuCj4gKyAqCj4gKyAqIFRoaXMgYWxzbyBoYXMgdGhlIGVmZmVjdCBvZiBy ZXByb2JpbmcgYWxsIG9mIHRoZSBjb25uZWN0ZWQgcG9ydHMuCj4gKyAqLwo+ICtzdGF0aWMgdm9p ZAo+ICtza2lwX29uX2FueV9jb25uZWN0ZWQoZGF0YV90ICpkYXRhLCB1bnNpZ25lZCBpbnQgdHlw ZSkKPiArewo+ICsgICAgICAgZHJtTW9kZUNvbm5lY3RvciAqY29ubmVjdG9yOwo+ICsKPiArICAg ICAgIGNvbm5lY3RvciA9IGZpbmRfY29ubmVjdGVkKGRhdGEsIHR5cGUpOwo+ICsgICAgICAgaWYg KGNvbm5lY3RvcikKPiArICAgICAgICAgICAgICAgZHJtTW9kZUZyZWVDb25uZWN0b3IoY29ubmVj dG9yKTsKPiArCj4gKyAgICAgICBpZ3Rfc2tpcF9vbihjb25uZWN0b3IpOwo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZAo+ICt0ZXN0X2Jhc2ljX2hvdHBsdWcoZGF0YV90ICpkYXRhLCBzdHJ1Y3QgY2hh bWVsaXVtX3BvcnQgKnBvcnQpCj4gK3sKPiArICAgICAgIGludCBiZWZvcmUsIGFmdGVyOwo+ICsg ICAgICAgaW50IGk7Cj4gKwo+ICsgICAgICAgcmVzZXRfY2hhbWVsaXVtX3N0YXRlKGRhdGEpOwo+ ICsgICAgICAgaWd0X3dhdGNoX2hvdHBsdWcoKTsKPiArCj4gKyAgICAgICBmb3IgKGkgPSAwOyBp IDwgMTU7IGkrKykgewo+ICsgICAgICAgICAgICAgICBpZ3RfZmx1c2hfaG90cGx1Z3MoKTsKPiAr Cj4gKyAgICAgICAgICAgICAgIC8qIENoZWNrIGlmIHdlIGdldCBhIHN5c2ZzIGhvdHBsdWcgZXZl bnQgKi8KPiArICAgICAgICAgICAgICAgYmVmb3JlID0gY29ubmVjdG9yX3N0YXR1c19jb3VudChk YXRhLCBwb3J0LT50eXBlLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIERSTV9NT0RFX0NPTk5FQ1RFRCk7Cj4gKyAgICAgICAgICAgICAgIGNoYW1lbGl1 bV9wbHVnKHBvcnQtPmlkKTsKPiArICAgICAgICAgICAgICAgaWd0X2Fzc2VydChpZ3RfaG90cGx1 Z19kZXRlY3RlZChIT1RQTFVHX1RJTUVPVVQpKTsKPiArCj4gKyAgICAgICAgICAgICAgIC8qIE5v dyB3ZSBzaG91bGQgaGF2ZSBvbmUgYWRkaXRpb25hbCBwb3J0IGNvbm5lY3RlZCAqLwo+ICsgICAg ICAgICAgICAgICByZXByb2JlX2Nvbm5lY3RvcnMoZGF0YSwgcG9ydC0+dHlwZSk7Cj4gKyAgICAg ICAgICAgICAgIGFmdGVyID0gY29ubmVjdG9yX3N0YXR1c19jb3VudChkYXRhLCBwb3J0LT50eXBl LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFJNX01P REVfQ09OTkVDVEVEKTsKPiArICAgICAgICAgICAgICAgaWd0X2Fzc2VydF9sdChiZWZvcmUsIGFm dGVyKTsKPiArCj4gKyAgICAgICAgICAgICAgIGlndF9mbHVzaF9ob3RwbHVncygpOwo+ICsKPiAr ICAgICAgICAgICAgICAgLyogTm93IGNoZWNrIGlmIHdlIGdldCBhIGhvdHBsdWcgZnJvbSBkaXNj b25uZWN0aW9uICovCj4gKyAgICAgICAgICAgICAgIGJlZm9yZSA9IGNvbm5lY3Rvcl9zdGF0dXNf Y291bnQoZGF0YSwgcG9ydC0+dHlwZSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBEUk1fTU9ERV9ESVNDT05ORUNURUQpOwo+ICsgICAgICAgICAgICAg ICBjaGFtZWxpdW1fdW5wbHVnKHBvcnQtPmlkKTsKPiArICAgICAgICAgICAgICAgaWd0X2Fzc2Vy dChpZ3RfaG90cGx1Z19kZXRlY3RlZChIT1RQTFVHX1RJTUVPVVQpKTsKPiArCj4gKyAgICAgICAg ICAgICAgIC8qIEFuZCBtYWtlIHN1cmUgd2Ugbm93IGhhdmUgb25lIG1vcmUgZGlzY29ubmVjdGVk IHBvcnQgKi8KPiArICAgICAgICAgICAgICAgcmVwcm9iZV9jb25uZWN0b3JzKGRhdGEsIHBvcnQt PnR5cGUpOwo+ICsgICAgICAgICAgICAgICBhZnRlciA9IGNvbm5lY3Rvcl9zdGF0dXNfY291bnQo ZGF0YSwgcG9ydC0+dHlwZSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIERSTV9NT0RFX0RJU0NPTk5FQ1RFRCk7Cj4gKyAgICAgICAgICAgICAgIGlndF9h c3NlcnRfbHQoYmVmb3JlLCBhZnRlcik7Cj4gKwo+ICsgICAgICAgICAgICAgICAvKiBTbGVlcCBz byB3ZSBkb24ndCBhY2NpZGVudGFsbHkgY2F1c2UgYW4gaHBkIHN0b3JtICovCj4gKyAgICAgICAg ICAgICAgIHNsZWVwKDEpOwo+ICsgICAgICAgfQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ICt0 ZXN0X2VkaWRfcmVhZChkYXRhX3QgKmRhdGEsIHN0cnVjdCBjaGFtZWxpdW1fcG9ydCAqcG9ydCwK PiArICAgICAgICAgICAgICBpbnQgZWRpZF9pZCwgY29uc3QgdW5zaWduZWQgY2hhciAqZWRpZCkK PiArewo+ICsgICAgICAgZHJtTW9kZUNvbm5lY3RvciAqY29ubmVjdG9yOwo+ICsgICAgICAgZHJt TW9kZU9iamVjdFByb3BlcnRpZXMgKnByb3BzOwo+ICsgICAgICAgZHJtTW9kZVByb3BlcnR5Qmxv YlB0ciBlZGlkX2Jsb2IgPSBOVUxMOwo+ICsgICAgICAgYm9vbCBlZGlkX2ZvdW5kID0gZmFsc2U7 Cj4gKyAgICAgICBpbnQgaTsKPiArCj4gKyAgICAgICByZXNldF9jaGFtZWxpdW1fc3RhdGUoZGF0 YSk7Cj4gKyAgICAgICBza2lwX29uX2FueV9jb25uZWN0ZWQoZGF0YSwgcG9ydC0+dHlwZSk7Cj4g Kwo+ICsgICAgICAgY2hhbWVsaXVtX3BvcnRfc2V0X2VkaWQocG9ydC0+aWQsIGVkaWRfaWQpOwo+ ICsgICAgICAgY2hhbWVsaXVtX3BsdWcocG9ydC0+aWQpOwo+ICsgICAgICAgc2xlZXAoMSk7Cj4g KyAgICAgICBpZ3RfYXNzZXJ0KGNvbm5lY3RvciA9IGZpbmRfY29ubmVjdGVkKGRhdGEsIHBvcnQt PnR5cGUpKTsKPiArCj4gKyAgICAgICBwcm9wcyA9IGRybU1vZGVPYmplY3RHZXRQcm9wZXJ0aWVz KGRhdGEtPmRybV9mZCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29ubmVjdG9yLT5jb25uZWN0b3JfaWQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIERSTV9NT0RFX09CSkVDVF9DT05ORUNUT1IpOwo+ICsgICAgICAgaWd0 X2Fzc2VydChwcm9wcyk7Cj4gKwo+ICsgICAgICAgLyogR2V0IHRoZSBlZGlkICovCj4gKyAgICAg ICBmb3IgKGkgPSAwOyBpIDwgcHJvcHMtPmNvdW50X3Byb3BzICYmICFlZGlkX2Jsb2I7IGkrKykg ewo+ICsgICAgICAgICAgICAgICBkcm1Nb2RlUHJvcGVydHlQdHIgcHJvcCA9Cj4gKyAgICAgICAg ICAgICAgICAgICAgICAgZHJtTW9kZUdldFByb3BlcnR5KGRhdGEtPmRybV9mZCwKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMtPnByb3BzW2ldKTsKPiAr Cj4gKyAgICAgICAgICAgICAgIGlndF9hc3NlcnQocHJvcCk7Cj4gKwo+ICsgICAgICAgICAgICAg ICBpZiAoc3RyY21wKHByb3AtPm5hbWUsICJFRElEIikgPT0gMCkgewo+ICsgICAgICAgICAgICAg ICAgICAgICAgIGVkaWRfYmxvYiA9IGRybU1vZGVHZXRQcm9wZXJ0eUJsb2IoCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIGRhdGEtPmRybV9mZCwgcHJvcHMtPnByb3BfdmFsdWVzW2ldKTsK PiArICAgICAgICAgICAgICAgfQo+ICsKPiArICAgICAgICAgICAgICAgZHJtTW9kZUZyZWVQcm9w ZXJ0eShwcm9wKTsKPiArICAgICAgIH0KPiArCj4gKyAgICAgICAvKiBBbmQgbWFrZSBzdXJlIGl0 IG1hdGNoZXMgdG8gd2hhdCB3ZSBleHBlY3RlZCAqLwo+ICsgICAgICAgZWRpZF9mb3VuZCA9IG1l bWNtcChlZGlkLCBlZGlkX2Jsb2ItPmRhdGEsIEVESURfTEVOR1RIKSA9PSAwOwo+ICsKPiArICAg ICAgIGRybU1vZGVGcmVlUHJvcGVydHlCbG9iKGVkaWRfYmxvYik7Cj4gKyAgICAgICBkcm1Nb2Rl RnJlZU9iamVjdFByb3BlcnRpZXMocHJvcHMpOwo+ICsgICAgICAgZHJtTW9kZUZyZWVDb25uZWN0 b3IoY29ubmVjdG9yKTsKPiArCj4gKyAgICAgICBpZ3RfYXNzZXJ0KGVkaWRfZm91bmQpOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ICt0ZXN0X3N1c3BlbmRfcmVzdW1lX2hwZChkYXRhX3QgKmRh dGEsIHN0cnVjdCBjaGFtZWxpdW1fcG9ydCAqcG9ydCwKPiArICAgICAgICAgICAgICAgICAgICAg ICBlbnVtIGlndF9zdXNwZW5kX3N0YXRlIHN0YXRlLAo+ICsgICAgICAgICAgICAgICAgICAgICAg IGVudW0gaWd0X3N1c3BlbmRfdGVzdCB0ZXN0KQo+ICt7Cj4gKyAgICAgICBpbnQgYmVmb3JlLCBh ZnRlcjsKPiArICAgICAgIGludCBkZWxheSA9IDc7Cj4gKwo+ICsgICAgICAgaWd0X3NraXBfd2l0 aG91dF9zdXNwZW5kX3N1cHBvcnQoc3RhdGUsIHRlc3QpOwo+ICsgICAgICAgcmVzZXRfY2hhbWVs aXVtX3N0YXRlKGRhdGEpOwo+ICsgICAgICAgaWd0X3dhdGNoX2hvdHBsdWcoKTsKPiArCj4gKyAg ICAgICBpZ3Rfc2V0X2F1dG9yZXN1bWVfZGVsYXkoMTUpOwo+ICsKPiArICAgICAgIC8qIE1ha2Ug c3VyZSB3ZSBub3RpY2UgbmV3IGNvbm5lY3RvcnMgYWZ0ZXIgcmVzdW1pbmcgKi8KPiArICAgICAg IGJlZm9yZSA9IGNvbm5lY3Rvcl9zdGF0dXNfY291bnQoZGF0YSwgcG9ydC0+dHlwZSwgRFJNX01P REVfQ09OTkVDVEVEKTsKPiArICAgICAgIHNsZWVwKDEpOwo+ICsgICAgICAgaWd0X2ZsdXNoX2hv dHBsdWdzKCk7Cj4gKwo+ICsgICAgICAgY2hhbWVsaXVtX2FzeW5jX2hwZF9wdWxzZV9zdGFydChw b3J0LT5pZCwgZmFsc2UsIGRlbGF5KTsKPiArICAgICAgIGlndF9zeXN0ZW1fc3VzcGVuZF9hdXRv cmVzdW1lKHN0YXRlLCB0ZXN0KTsKPiArICAgICAgIGNoYW1lbGl1bV9hc3luY19ocGRfcHVsc2Vf ZmluaXNoKCk7Cj4gKwo+ICsgICAgICAgaWd0X2Fzc2VydChpZ3RfaG90cGx1Z19kZXRlY3RlZChI T1RQTFVHX1RJTUVPVVQpKTsKPiArCj4gKyAgICAgICByZXByb2JlX2Nvbm5lY3RvcnMoZGF0YSwg cG9ydC0+dHlwZSk7Cj4gKyAgICAgICBhZnRlciA9IGNvbm5lY3Rvcl9zdGF0dXNfY291bnQoZGF0 YSwgcG9ydC0+dHlwZSwgRFJNX01PREVfQ09OTkVDVEVEKTsKPiArICAgICAgIGlndF9hc3NlcnRf bHQoYmVmb3JlLCBhZnRlcik7Cj4gKwo+ICsgICAgICAgaWd0X2ZsdXNoX2hvdHBsdWdzKCk7Cj4g Kwo+ICsgICAgICAgLyogTm93IG1ha2Ugc3VyZSB3ZSBub3RpY2UgZGlzY29ubmVjdGVkIGNvbm5l Y3RvcnMgYWZ0ZXIgcmVzdW1pbmcgKi8KPiArICAgICAgIGJlZm9yZSA9IGNvbm5lY3Rvcl9zdGF0 dXNfY291bnQoZGF0YSwgcG9ydC0+dHlwZSwgRFJNX01PREVfRElTQ09OTkVDVEVEKTsKPiArCj4g KyAgICAgICBjaGFtZWxpdW1fYXN5bmNfaHBkX3B1bHNlX3N0YXJ0KHBvcnQtPmlkLCB0cnVlLCBk ZWxheSk7Cj4gKyAgICAgICBpZ3Rfc3lzdGVtX3N1c3BlbmRfYXV0b3Jlc3VtZShzdGF0ZSwgdGVz dCk7Cj4gKyAgICAgICBjaGFtZWxpdW1fYXN5bmNfaHBkX3B1bHNlX2ZpbmlzaCgpOwo+ICsKPiAr ICAgICAgIGlndF9hc3NlcnQoaWd0X2hvdHBsdWdfZGV0ZWN0ZWQoSE9UUExVR19USU1FT1VUKSk7 Cj4gKwo+ICsgICAgICAgcmVwcm9iZV9jb25uZWN0b3JzKGRhdGEsIHBvcnQtPnR5cGUpOwo+ICsg ICAgICAgYWZ0ZXIgPSBjb25uZWN0b3Jfc3RhdHVzX2NvdW50KGRhdGEsIHBvcnQtPnR5cGUsIERS TV9NT0RFX0RJU0NPTk5FQ1RFRCk7Cj4gKyAgICAgICBpZ3RfYXNzZXJ0X2x0KGJlZm9yZSwgYWZ0 ZXIpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ICt0ZXN0X3N1c3BlbmRfcmVzdW1lX2VkaWRf Y2hhbmdlKGRhdGFfdCAqZGF0YSwgc3RydWN0IGNoYW1lbGl1bV9wb3J0ICpwb3J0LAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBpZ3Rfc3VzcGVuZF9zdGF0ZSBzdGF0ZSwK PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gaWd0X3N1c3BlbmRfdGVzdCB0 ZXN0LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVkaWRfaWQsCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWx0X2VkaWRfaWQpCj4gK3sKPiArICAg ICAgIGlndF9za2lwX3dpdGhvdXRfc3VzcGVuZF9zdXBwb3J0KHN0YXRlLCB0ZXN0KTsKPiArICAg ICAgIHJlc2V0X2NoYW1lbGl1bV9zdGF0ZShkYXRhKTsKPiArICAgICAgIGlndF93YXRjaF9ob3Rw bHVnKCk7Cj4gKwo+ICsgICAgICAgLyogRmlyc3QgcGx1ZyBpbiB0aGUgcG9ydCAqLwo+ICsgICAg ICAgY2hhbWVsaXVtX3BvcnRfc2V0X2VkaWQocG9ydC0+aWQsIGVkaWRfaWQpOwo+ICsgICAgICAg Y2hhbWVsaXVtX3BsdWcocG9ydC0+aWQpOwo+ICsKPiArICAgICAgIHJlcHJvYmVfY29ubmVjdG9y cyhkYXRhLCBwb3J0LT50eXBlKTsKPiArICAgICAgIHNsZWVwKDEpOwo+ICsgICAgICAgaWd0X2Zs dXNoX2hvdHBsdWdzKCk7Cj4gKwo+ICsgICAgICAgLyoKPiArICAgICAgICAqIENoYW5nZSB0aGUg ZWRpZCBiZWZvcmUgd2Ugc3VzcGVuZC4gT24gcmVzdW1lLCB0aGUgbWFjaGluZSBzaG91bGQKPiAr ICAgICAgICAqIG5vdGljZSB0aGUgRURJRCBjaGFuZ2UgYW5kIGZpcmUgYSBob3RwbHVnIGV2ZW50 Lgo+ICsgICAgICAgICovCj4gKyAgICAgICBjaGFtZWxpdW1fcG9ydF9zZXRfZWRpZChwb3J0LT5p ZCwgYWx0X2VkaWRfaWQpOwo+ICsKPiArICAgICAgIGlndF9zeXN0ZW1fc3VzcGVuZF9hdXRvcmVz dW1lKHN0YXRlLCB0ZXN0KTsKPiArICAgICAgIGlndF9hc3NlcnQoaWd0X2hvdHBsdWdfZGV0ZWN0 ZWQoSE9UUExVR19USU1FT1VUKSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkCj4gK3Rlc3RfZGlz cGxheShkYXRhX3QgKmRhdGEsIHN0cnVjdCBjaGFtZWxpdW1fcG9ydCAqcG9ydCkKPiArewo+ICsg ICAgICAgaWd0X2Rpc3BsYXlfdCBkaXNwbGF5Owo+ICsgICAgICAgaWd0X291dHB1dF90ICpvdXRw dXQ7Cj4gKyAgICAgICBpZ3RfcGxhbmVfdCAqcHJpbWFyeTsKPiArICAgICAgIHN0cnVjdCBpZ3Rf ZmIgZmI7Cj4gKyAgICAgICBkcm1Nb2RlUmVzICpyZXM7Cj4gKyAgICAgICBkcm1Nb2RlTW9kZUlu Zm8gKm1vZGU7Cj4gKyAgICAgICBpbnQgY29ubmVjdG9yX2ZvdW5kID0gZmFsc2UsIGZiX2lkOwo+ ICsKPiArICAgICAgIGNoYW1lbGl1bV9wbHVnKHBvcnQtPmlkKTsKPiArICAgICAgIGlndF9hc3Nl cnQocmVzID0gZHJtTW9kZUdldFJlc291cmNlcyhkYXRhLT5kcm1fZmQpKTsKPiArICAgICAgIGtt c3Rlc3RfdW5zZXRfYWxsX2NydGNzKGRhdGEtPmRybV9mZCwgcmVzKTsKPiArCj4gKyAgICAgICBp Z3RfZGlzcGxheV9pbml0KCZkaXNwbGF5LCBkYXRhLT5kcm1fZmQpOwo+ICsKPiArICAgICAgIC8q IEZpbmQgdGhlIGFjdGl2ZSBjb25uZWN0b3IgKi8KPiArICAgICAgIGZvcl9lYWNoX2Nvbm5lY3Rl ZF9vdXRwdXQoJmRpc3BsYXksIG91dHB1dCkgewo+ICsgICAgICAgICAgICAgICBkcm1Nb2RlQ29u bmVjdG9yICpjb25uZWN0b3IgPSBvdXRwdXQtPmNvbmZpZy5jb25uZWN0b3I7Cj4gKwo+ICsgICAg ICAgICAgICAgICBpZiAoY29ubmVjdG9yICYmIGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUgPT0g cG9ydC0+dHlwZSAmJgo+ICsgICAgICAgICAgICAgICAgICAgY29ubmVjdG9yLT5jb25uZWN0aW9u ID09IERSTV9NT0RFX0NPTk5FQ1RFRCkgewo+ICsgICAgICAgICAgICAgICAgICAgICAgIGNvbm5l Y3Rvcl9mb3VuZCA9IHRydWU7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cj4gKyAg ICAgICAgICAgICAgIH0KPiArICAgICAgIH0KPiArICAgICAgIGlndF9hc3NlcnQoY29ubmVjdG9y X2ZvdW5kKTsKPiArCj4gKyAgICAgICAvKiBTZXR1cCB0aGUgZGlzcGxheSAqLwo+ICsgICAgICAg aWd0X291dHB1dF9zZXRfcGlwZShvdXRwdXQsIFBJUEVfQSk7Cj4gKyAgICAgICBtb2RlID0gaWd0 X291dHB1dF9nZXRfbW9kZShvdXRwdXQpOwo+ICsgICAgICAgcHJpbWFyeSA9IGlndF9vdXRwdXRf Z2V0X3BsYW5lKG91dHB1dCwgSUdUX1BMQU5FX1BSSU1BUlkpOwo+ICsgICAgICAgaWd0X2Fzc2Vy dChwcmltYXJ5KTsKPiArCj4gKyAgICAgICBmYl9pZCA9IGlndF9jcmVhdGVfcGF0dGVybl9mYihk YXRhLT5kcm1fZmQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2Rl LT5oZGlzcGxheSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUt PnZkaXNwbGF5LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFJNX0ZP Uk1BVF9YUkdCODg4OCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExP Q0FMX0RSTV9GT1JNQVRfTU9EX05PTkUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmZmIpOwo+ICsgICAgICAgaWd0X2Fzc2VydChmYl9pZCA+IDApOwo+ICsgICAgICAg aWd0X3BsYW5lX3NldF9mYihwcmltYXJ5LCAmZmIpOwo+ICsKPiArICAgICAgIGlndF9kaXNwbGF5 X2NvbW1pdCgmZGlzcGxheSk7Cj4gKwo+ICsgICAgICAgaWd0X2Fzc2VydChjaGFtZWxpdW1fcG9y dF93YWl0X3ZpZGVvX2lucHV0X3N0YWJsZShwb3J0LT5pZCwKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSE9UUExVR19USU1FT1VUKSk7 Cj4gKwo+ICsgICAgICAgZHJtTW9kZUZyZWVSZXNvdXJjZXMocmVzKTsKPiArICAgICAgIGlndF9k aXNwbGF5X2ZpbmkoJmRpc3BsYXkpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ICt0ZXN0X2hw ZF93aXRob3V0X2RkYyhkYXRhX3QgKmRhdGEsIHN0cnVjdCBjaGFtZWxpdW1fcG9ydCAqcG9ydCkK PiArewo+ICsgICAgICAgcmVzZXRfY2hhbWVsaXVtX3N0YXRlKGRhdGEpOwo+ICsgICAgICAgaWd0 X3dhdGNoX2hvdHBsdWcoKTsKPiArCj4gKyAgICAgICAvKiBEaXNhYmxlIHRoZSBEREMgb24gdGhl IGNvbm5lY3RvciBhbmQgbWFrZSBzdXJlIHdlIHN0aWxsIGdldCBhCj4gKyAgICAgICAgKiBob3Rw bHVnCj4gKyAgICAgICAgKi8KPiArICAgICAgIGNoYW1lbGl1bV9wb3J0X3NldF9kZGNfc3RhdGUo cG9ydC0+aWQsIGZhbHNlKTsKPiArICAgICAgIGNoYW1lbGl1bV9wbHVnKHBvcnQtPmlkKTsKPiAr Cj4gKyAgICAgICBpZ3RfYXNzZXJ0KGlndF9ob3RwbHVnX2RldGVjdGVkKEhPVFBMVUdfVElNRU9V VCkpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ICtjYWNoZV9jb25uZWN0b3JfaW5mbyhkYXRh X3QgKmRhdGEpCj4gK3sKPiArICAgICAgIGRybU1vZGVSZXMgKnJlcyA9IGRybU1vZGVHZXRSZXNv dXJjZXMoZGF0YS0+ZHJtX2ZkKTsKPiArICAgICAgIGRybU1vZGVDb25uZWN0b3IgKmNvbm5lY3Rv cjsKPiArICAgICAgIGludCBpOwo+ICsKPiArICAgICAgIGlndF9hc3NlcnQocmVzKTsKPiArCj4g KyAgICAgICBkYXRhLT5jb25uZWN0b3JfY291bnQgPSByZXMtPmNvdW50X2Nvbm5lY3RvcnM7Cj4g KyAgICAgICBkYXRhLT5jb25uZWN0b3JzID0gY2FsbG9jKHNpemVvZihzdHJ1Y3QgY29ubmVjdG9y X2luZm8pLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXMtPmNvdW50X2Nv bm5lY3RvcnMpOwo+ICsgICAgICAgaWd0X2Fzc2VydChkYXRhLT5jb25uZWN0b3JzKTsKPiArCj4g KyAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVzLT5jb3VudF9jb25uZWN0b3JzOyBpKyspIHsKPiAr ICAgICAgICAgICAgICAgY29ubmVjdG9yID0gZHJtTW9kZUdldENvbm5lY3RvckN1cnJlbnQoZGF0 YS0+ZHJtX2ZkLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICByZXMtPmNvbm5lY3RvcnNbaV0pOwo+ICsgICAgICAgICAgICAgICBpZ3RfYXNz ZXJ0KGNvbm5lY3Rvcik7Cj4gKwo+ICsgICAgICAgICAgICAgICBkYXRhLT5jb25uZWN0b3JzW2ld LmlkID0gY29ubmVjdG9yLT5jb25uZWN0b3JfaWQ7Cj4gKyAgICAgICAgICAgICAgIGRhdGEtPmNv bm5lY3RvcnNbaV0udHlwZSA9IGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGU7Cj4gKwo+ICsgICAg ICAgICAgICAgICBkcm1Nb2RlRnJlZUNvbm5lY3Rvcihjb25uZWN0b3IpOwo+ICsgICAgICAgfQo+ ICsKPiArICAgICAgIGRybU1vZGVGcmVlUmVzb3VyY2VzKHJlcyk7Cj4gK30KPiArCj4gKyNkZWZp bmUgZm9yX2VhY2hfcG9ydChwLCBwb3J0KSAgICAgICAgICAgICAgICAgIFwKPiArICAgICAgIGZv ciAocCA9IDAsIHBvcnQgPSAmY2hhbWVsaXVtX3BvcnRzW3BdOyBcCj4gKyAgICAgICAgICAgIHAg PCBjaGFtZWxpdW1fcG9ydF9jb3VudDsgICAgICAgICAgXAo+ICsgICAgICAgICAgICBwKyssIHBv cnQgPSAmY2hhbWVsaXVtX3BvcnRzW3BdKSAgIFwKPiArCj4gKyNkZWZpbmUgY29ubmVjdG9yX3N1 YnRlc3QobmFtZV9fLCB0eXBlX18pIFwKPiArICAgICAgIGlndF9zdWJ0ZXN0KG5hbWVfXykgICAg ICAgICAgICAgICBcCj4gKyAgICAgICAgICAgICAgIGZvcl9lYWNoX3BvcnQocCwgcG9ydCkgICAg XAo+ICsgICAgICAgICAgICAgICAgICAgICAgIGlmIChwb3J0LT50eXBlID09IERSTV9NT0RFX0NP Tk5FQ1RPUl8gIyMgdHlwZV9fKQo+ICsKPiArI2RlZmluZSBkZWZpbmVfY29tbW9uX2Nvbm5lY3Rv cl90ZXN0cyh0eXBlX3N0cl9fLCB0eXBlX18pICAgICAgICAgICAgICAgICAgICAgXAo+ICsgICAg ICAgY29ubmVjdG9yX3N1YnRlc3QodHlwZV9zdHJfXyAiLWhwZCIsIHR5cGVfXykgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKPiArICAgICAgICAgICAgICAgdGVzdF9iYXNpY19ob3RwbHVnKCZk YXRhLCBwb3J0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKPiArICAgICAgIGNvbm5lY3Rvcl9zdWJ0ZXN0KHR5cGVfc3RyX18gIi1lZGlk LXJlYWQiLCB0eXBlX18pIHsgICAgICAgICAgICAgICAgICBcCj4gKyAgICAgICAgICAgICAgIHRl c3RfZWRpZF9yZWFkKCZkYXRhLCBwb3J0LCBlZGlkX2lkLCAgICAgICAgICAgICAgICAgICAgICAg ICAgXAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZ3Rfa21zX2dldF9iYXNlX2Vk aWQoKSk7ICAgICAgICAgICAgICAgICAgICAgIFwKPiArICAgICAgICAgICAgICAgdGVzdF9lZGlk X3JlYWQoJmRhdGEsIHBvcnQsIGFsdF9lZGlkX2lkLCAgICAgICAgICAgICAgICAgICAgICBcCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlndF9rbXNfZ2V0X2FsdF9lZGlkKCkpOyAg ICAgICAgICAgICAgICAgICAgICAgXAo+ICsgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAo+ICsgICAgICAgY29ubmVjdG9yX3N1YnRlc3QodHlwZV9zdHJfXyAi LWhwZC1hZnRlci1zdXNwZW5kIiwgdHlwZV9fKSAgICAgICAgICAgIFwKPiArICAgICAgICAgICAg ICAgdGVzdF9zdXNwZW5kX3Jlc3VtZV9ocGQoJmRhdGEsIHBvcnQsICAgICAgICAgICAgICAgICAg ICAgICAgICBcCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNVU1BF TkRfU1RBVEVfTUVNLCAgICAgICAgICAgICAgICAgICAgXAo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBTVVNQRU5EX1RFU1RfTk9ORSk7ICAgICAgICAgICAgICAgICAg IFwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ICsgICAgICAgY29ubmVjdG9yX3N1YnRlc3Qo dHlwZV9zdHJfXyAiLWhwZC1hZnRlci1oaWJlcm5hdGUiLCB0eXBlX18pICAgICAgICAgIFwKPiAr ICAgICAgICAgICAgICAgdGVzdF9zdXNwZW5kX3Jlc3VtZV9ocGQoJmRhdGEsIHBvcnQsICAgICAg ICAgICAgICAgICAgICAgICAgICBcCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFNVU1BFTkRfU1RBVEVfRElTSywgICAgICAgICAgICAgICAgICAgXAo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVVNQRU5EX1RFU1RfREVWSUNFUyk7ICAg ICAgICAgICAgICAgIFwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ICsgICAgICAgY29ubmVj dG9yX3N1YnRlc3QodHlwZV9zdHJfXyAiLWVkaWQtY2hhbmdlLWR1cmluZy1zdXNwZW5kIiwgdHlw ZV9fKSAgIFwKPiArICAgICAgICAgICAgICAgdGVzdF9zdXNwZW5kX3Jlc3VtZV9lZGlkX2NoYW5n ZSgmZGF0YSwgcG9ydCwgICAgICAgICAgICAgICAgICBcCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgU1VTUEVORF9TVEFURV9NRU0sICAgICAgICAgICAg XAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNVU1BF TkRfVEVTVF9OT05FLCAgICAgICAgICAgIFwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBlZGlkX2lkLCBhbHRfZWRpZF9pZCk7ICAgICAgICBcCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKPiArICAgICAgIGNvbm5lY3Rvcl9zdWJ0ZXN0KHR5cGVfc3Ry X18gIi1lZGlkLWNoYW5nZS1kdXJpbmctaGliZXJuYXRlIiwgdHlwZV9fKSBcCj4gKyAgICAgICAg ICAgICAgIHRlc3Rfc3VzcGVuZF9yZXN1bWVfZWRpZF9jaGFuZ2UoJmRhdGEsIHBvcnQsICAgICAg ICAgICAgICAgICAgXAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFNVU1BFTkRfU1RBVEVfRElTSywgICAgICAgICAgIFwKPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVVNQRU5EX1RFU1RfREVWSUNFUywgICAg ICAgICBcCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZWRpZF9pZCwgYWx0X2VkaWRfaWQpOyAgICAgICAgXAo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Cj4gKyAgICAgICBjb25uZWN0b3Jfc3VidGVzdCh0eXBlX3N0cl9fICItZGlzcGxheSIsIHR5cGVf XykgICAgICAgICAgICAgICAgICAgICAgXAo+ICsgICAgICAgICAgICAgICB0ZXN0X2Rpc3BsYXko JmRhdGEsIHBvcnQpOwo+ICsKPiArc3RhdGljIGRhdGFfdCBkYXRhOwo+ICsKPiAraWd0X21haW4K PiArewo+ICsgICAgICAgc3RydWN0IGNoYW1lbGl1bV9wb3J0ICpwb3J0Owo+ICsgICAgICAgaW50 IGVkaWRfaWQsIGFsdF9lZGlkX2lkLCBwOwo+ICsKPiArICAgICAgIGlndF9maXh0dXJlIHsKPiAr ICAgICAgICAgICAgICAgaWd0X3JlcXVpcmVfY2hhbWVsaXVtKCk7Cj4gKyAgICAgICAgICAgICAg IGlndF9za2lwX29uX3NpbXVsYXRpb24oKTsKPiArCj4gKyAgICAgICAgICAgICAgIGNoYW1lbGl1 bV9pbml0KCk7Cj4gKwo+ICsgICAgICAgICAgICAgICBlZGlkX2lkID0gY2hhbWVsaXVtX25ld19l ZGlkKGlndF9rbXNfZ2V0X2Jhc2VfZWRpZCgpKTsKPiArICAgICAgICAgICAgICAgYWx0X2VkaWRf aWQgPSBjaGFtZWxpdW1fbmV3X2VkaWQoaWd0X2ttc19nZXRfYWx0X2VkaWQoKSk7Cj4gKwo+ICsg ICAgICAgICAgICAgICBkYXRhLmRybV9mZCA9IGRybV9vcGVuX2RyaXZlcl9tYXN0ZXIoRFJJVkVS X0lOVEVMKTsKPiArICAgICAgICAgICAgICAgY2FjaGVfY29ubmVjdG9yX2luZm8oJmRhdGEpOwo+ ICsKPiArICAgICAgICAgICAgICAgLyogU28gZmJjb24gZG9lc24ndCB0cnkgdG8gcmVwcm9iZSB0 aGluZ3MgaXRzZWxmICovCj4gKyAgICAgICAgICAgICAgIGttc3Rlc3Rfc2V0X3Z0X2dyYXBoaWNz X21vZGUoKTsKPiArICAgICAgIH0KPiArCj4gKyAgICAgICBpZ3Rfc3VidGVzdF9ncm91cCB7Cj4g KyAgICAgICAgICAgICAgIGlndF9maXh0dXJlIHsKPiArICAgICAgICAgICAgICAgICAgICAgICBy ZXF1aXJlX2Nvbm5lY3Rvcl9wcmVzZW50KAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAm ZGF0YSwgRFJNX01PREVfQ09OTkVDVE9SX0Rpc3BsYXlQb3J0KTsKPiArICAgICAgICAgICAgICAg fQo+ICsKPiArICAgICAgICAgICAgICAgZGVmaW5lX2NvbW1vbl9jb25uZWN0b3JfdGVzdHMoImRw IiwgRGlzcGxheVBvcnQpOwo+ICsgICAgICAgfQo+ICsKPiArICAgICAgIGlndF9zdWJ0ZXN0X2dy b3VwIHsKPiArICAgICAgICAgICAgICAgaWd0X2ZpeHR1cmUgewo+ICsgICAgICAgICAgICAgICAg ICAgICAgIHJlcXVpcmVfY29ubmVjdG9yX3ByZXNlbnQoCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICZkYXRhLCBEUk1fTU9ERV9DT05ORUNUT1JfSERNSUEpOwo+ICsgICAgICAgICAgICAg ICB9Cj4gKwo+ICsgICAgICAgICAgICAgICBkZWZpbmVfY29tbW9uX2Nvbm5lY3Rvcl90ZXN0cygi aGRtaSIsIEhETUlBKTsKPiArICAgICAgIH0KPiArCj4gKyAgICAgICBpZ3Rfc3VidGVzdF9ncm91 cCB7Cj4gKyAgICAgICAgICAgICAgIGlndF9maXh0dXJlIHsKPiArICAgICAgICAgICAgICAgICAg ICAgICByZXF1aXJlX2Nvbm5lY3Rvcl9wcmVzZW50KAo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAmZGF0YSwgRFJNX01PREVfQ09OTkVDVE9SX1ZHQSk7Cj4gKyAgICAgICAgICAgICAgIH0K PiArCj4gKyAgICAgICAgICAgICAgIGNvbm5lY3Rvcl9zdWJ0ZXN0KCJ2Z2EtaHBkIiwgVkdBKQo+ ICsgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfYmFzaWNfaG90cGx1ZygmZGF0YSwgcG9ydCk7 Cj4gKwo+ICsgICAgICAgICAgICAgICBjb25uZWN0b3Jfc3VidGVzdCgidmdhLWVkaWQtcmVhZCIs IFZHQSkgewo+ICsgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfZWRpZF9yZWFkKCZkYXRhLCBw b3J0LCBlZGlkX2lkLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGln dF9rbXNfZ2V0X2Jhc2VfZWRpZCgpKTsKPiArICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2Vk aWRfcmVhZCgmZGF0YSwgcG9ydCwgYWx0X2VkaWRfaWQsCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaWd0X2ttc19nZXRfYWx0X2VkaWQoKSk7Cj4gKyAgICAgICAgICAg ICAgIH0KPiArCj4gKyAgICAgICAgICAgICAgIC8qIEZJWE1FOiBSaWdodCBub3cgdGhlcmUgaXNu J3QgYSB3YXkgdG8gZG8gYW55IHNvcnQgb2YgZGVsYXllZAo+ICsgICAgICAgICAgICAgICAgKiBw c3VlZG8taG90cGx1ZyB3aXRoIFZHQSwgc28gdGVzdGluZyBkZXRlY3Rpb24gYWZ0ZXIgYQo+ICsg ICAgICAgICAgICAgICAgKiBzdXNwZW5kL3Jlc3VtZSBjeWNsZSBpc24ndCBwb3NzaWJsZSB5ZXQK PiArICAgICAgICAgICAgICAgICovCj4gKwo+ICsgICAgICAgICAgICAgICBjb25uZWN0b3Jfc3Vi dGVzdCgidmdhLWhwZC13aXRob3V0LWRkYyIsIFZHQSkKPiArICAgICAgICAgICAgICAgICAgICAg ICB0ZXN0X2hwZF93aXRob3V0X2RkYygmZGF0YSwgcG9ydCk7Cj4gKwo+ICsgICAgICAgICAgICAg ICBjb25uZWN0b3Jfc3VidGVzdCgidmdhLWRpc3BsYXkiLCBWR0EpCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgdGVzdF9kaXNwbGF5KCZkYXRhLCBwb3J0KTsKPiArICAgICAgIH0KPiArfQo+IC0t Cj4gMi43LjQKPgo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCj4gSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdAo+IEludGVsLWdmeEBsaXN0cy5mcmVlZGVza3Rv cC5vcmcKPiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lu dGVsLWdmeApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJ bnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0 cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK