From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH v2] tools/intel_guc_logger: Utility for capturing GuC firmware logs in a file Date: Wed, 7 Sep 2016 16:39:10 +0100 Message-ID: <57D0349E.70505@linux.intel.com> References: <20160907095521.GD16682@nuc-i3427.alporthouse.com> <1473262045-28456-1-git-send-email-akash.goel@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8B9B86EAB3 for ; Wed, 7 Sep 2016 15:39:13 +0000 (UTC) In-Reply-To: <1473262045-28456-1-git-send-email-akash.goel@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: akash.goel@intel.com, intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Ck9uIDA3LzA5LzE2IDE2OjI3LCBha2FzaC5nb2VsQGludGVsLmNvbSB3cm90ZToKPiBGcm9tOiBB a2FzaCBHb2VsIDxha2FzaC5nb2VsQGludGVsLmNvbT4KPgo+IFRoaXMgcGF0Y2ggcHJvdmlkZXMg YSB0ZXN0IHV0aWxpdHkgd2hpY2ggaGVscHMgY2FwdHVyZSBHdUMgZmlybXdhcmUgbG9ncyBhbmQK PiB0aGVuIGR1bXAgdGhlbSB0byBmaWxlLgo+IFRoZSBsb2dzIGFyZSBwdWxsZWQgZnJvbSBhIGRl YnVnZnMgZmlsZSAnL3N5cy9rZXJuZWwvZGVidWcvZHJpL2d1Y19sb2cnIGFuZAo+IHN0b3JlZCBp bnRvIGEgZmlsZSAnL3RtcC9ndWNfbG9nX2R1bXAuZGF0JywgdGhlIG5hbWUgb2YgdGhlIG91dHB1 dCBmaWxlIGNhbgo+IGJlIGNoYW5nZWQgdGhyb3VnaCBhIGNvbW1hbmQgbGluZSBhcmd1bWVudC4K Pgo+IFRoZSB1dGlsaXR5IGdvZXMgaW50byBhbiBpbmZpbml0ZSBsb29wIHdoZXJlIGl0IHdhaXRz IGZvciB0aGUgYXJyaXZhbCBvZiBuZXcKPiBsb2dzIGFuZCBhcyBzb29uIGFzIG5ldyBzZXQgb2Yg bG9ncyBhcmUgcHJvZHVjZWQgaXQgY2FwdHVyZXMgdGhlbSBpbiBpdHMgbG9jYWwKPiBidWZmZXIg d2hpY2ggaXMgdGhlbiBmbHVzaGVkIG91dCB0byB0aGUgZmlsZSBvbiBkaXNrLgo+IEFueSB0aW1l IHdoZW4gbG9nZ2luZyBuZWVkcyB0byBiZSBlbmRlZCwgVXNlciBjYW4gc3RvcCB0aGlzIHV0aWxp dHkgKENUUkwrQykuCj4KPiBCZWZvcmUgZW50ZXJpbmcgaW50byBhIGxvb3AsIGl0IGZpcnN0IGRp c2NhcmRzIHdoYXRldmVyIGxvZ3MgYXJlIHByZXNlbnQgaW4KPiB0aGUgZGVidWdmcyBmaWxlLgo+ IFRoaXMgd2F5IFVzZXIgY2FuIGZpcnN0IGxhdW5jaCB0aGlzIHV0aWxpdHkgYW5kIHRoZW4gc3Rh cnQgYSB3b3JrbG9hZC9hY3Rpdml0eQo+IGZvciB3aGljaCBHdUMgZmlybXdhcmUgbG9ncyBhcmUg dG8gYmUgYWN0dWFsbHkgY2FwdHVyZWQgYW5kIGtlZXAgcnVubmluZyB0aGUKPiB1dGlsaXR5IGZv ciBhcyBsb25nIGFzIGl0cyBuZWVkZWQsIGxpa2Ugb25jZSB0aGUgd29ya2xvYWQgaXMgb3ZlciB0 aGlzIHV0aWxpdHkKPiBjYW4gYmUgZm9yY2VmdWxseSBzdG9wcGVkLgo+Cj4gSWYgdGhlIGxvZ2dp bmcgd2Fzbid0IGVuYWJsZWQgb24gR3VDIHNpZGUgYnkgdGhlIERyaXZlciBhdCBib290IHRpbWUs IHV0aWxpdHkKPiB3aWxsIGZpcnN0IGVuYWJsZSB0aGUgbG9nZ2luZyBhbmQgbGF0ZXIgb24gd2hl biBpdCBpcyBzdG9wcGVkIChDVFJMK0MpIGl0IHdpbGwKPiBhbHNvIHBhdXNlIHRoZSBsb2dnaW5n IG9uIEd1QyBzaWRlLgo+Cj4gdjI6Cj4gLSBVc2UgY29tYmluYXRpb24gb2YgYWxhcm0gc3lzdGVt IGNhbGwgJiBTSUdBTFJNIHNpZ25hbCB0byBydW4gdGhlIHV0aWxpdHkKPiAgICBmb3IgcmVxdWly ZWQgZHVyYXRpb24uIChUdnJ0a28pCj4gLSBGaXggaW5jb25zaXN0ZW5jaWVzLCBkbyBtaW5vciBj bGVhbnVwIGFuZCByZWZhY3RvcmluZy4gKFR2cnRrbykKPgo+IENjOiBUdnJ0a28gVXJzdWxpbiA8 dHZydGtvLnVyc3VsaW5AbGludXguaW50ZWwuY29tPgo+IFNpZ25lZC1vZmYtYnk6IEFrYXNoIEdv ZWwgPGFrYXNoLmdvZWxAaW50ZWwuY29tPgo+IC0tLQo+ICAgdG9vbHMvTWFrZWZpbGUuc291cmNl cyAgIHwgICAxICsKPiAgIHRvb2xzL2ludGVsX2d1Y19sb2dnZXIuYyB8IDQyNSArKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICAgMiBmaWxlcyBjaGFuZ2Vk LCA0MjYgaW5zZXJ0aW9ucygrKQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL2ludGVsX2d1 Y19sb2dnZXIuYwo+Cj4gZGlmZiAtLWdpdCBhL3Rvb2xzL01ha2VmaWxlLnNvdXJjZXMgYi90b29s cy9NYWtlZmlsZS5zb3VyY2VzCj4gaW5kZXggMmJiNmM4ZS4uYmU1ODg3MSAxMDA2NDQKPiAtLS0g YS90b29scy9NYWtlZmlsZS5zb3VyY2VzCj4gKysrIGIvdG9vbHMvTWFrZWZpbGUuc291cmNlcwo+ IEBAIC0xOSw2ICsxOSw3IEBAIHRvb2xzX3Byb2dfbGlzdHMgPQkJXAo+ICAgCWludGVsX2dwdV90 aW1lCQlcCj4gICAJaW50ZWxfZ3B1X3RvcAkJXAo+ICAgCWludGVsX2d0dAkJXAo+ICsJaW50ZWxf Z3VjX2xvZ2dlciAgICAgICAgXAo+ICAgCWludGVsX2luZm9mcmFtZXMJXAo+ICAgCWludGVsX2wz X3Bhcml0eQkJXAo+ICAgCWludGVsX2xpZAkJXAo+IGRpZmYgLS1naXQgYS90b29scy9pbnRlbF9n dWNfbG9nZ2VyLmMgYi90b29scy9pbnRlbF9ndWNfbG9nZ2VyLmMKPiBuZXcgZmlsZSBtb2RlIDEw MDY0NAo+IGluZGV4IDAwMDAwMDAuLjZlMDMyODIKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvdG9v bHMvaW50ZWxfZ3VjX2xvZ2dlci5jCj4gQEAgLTAsMCArMSw0MjUgQEAKPiArCj4gKyNkZWZpbmUg X0dOVV9TT1VSQ0UgIC8qIEZvciB1c2luZyBPX0RJUkVDVCAqLwo+ICsjaW5jbHVkZSA8aW50dHlw ZXMuaD4KPiArI2luY2x1ZGUgPHN0ZGlvLmg+Cj4gKyNpbmNsdWRlIDxmY250bC5oPgo+ICsjaW5j bHVkZSA8c2NoZWQuaD4KPiArI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgo+ICsjaW5jbHVkZSA8c3Ry aW5nLmg+Cj4gKyNpbmNsdWRlIDxlcnJuby5oPgo+ICsjaW5jbHVkZSA8c2lnbmFsLmg+Cj4gKyNp bmNsdWRlIDxzdGRsaWIuaD4KPiArI2luY2x1ZGUgPHVuaXN0ZC5oPgo+ICsjaW5jbHVkZSA8c3lz L3BvbGwuaD4KPiArI2luY2x1ZGUgPHN5cy93YWl0Lmg+Cj4gKyNpbmNsdWRlIDxzeXMvdHlwZXMu aD4KPiArI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+Cj4gKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgo+ ICsjaW5jbHVkZSA8YXNzZXJ0Lmg+Cj4gKyNpbmNsdWRlIDxwdGhyZWFkLmg+Cj4gKwo+ICsjaW5j bHVkZSAiaWd0LmgiCj4gKwo+ICsjZGVmaW5lIE1CKHgpICgodWludDY0X3QpKHgpICogMTAyNCAq IDEwMjQpCj4gKyNpZm5kZWYgUEFHRV9TSVpFCj4gKyAgI2RlZmluZSBQQUdFX1NJWkUgNDA5Ngo+ ICsjZW5kaWYKPiArI2RlZmluZSBTVUJCVUZfU0laRSAoMTkqUEFHRV9TSVpFKQo+ICsvKiBOZWVk IGxhcmdlIGJ1ZmZlcmluZyBmcm9tIGxvZ2dlciBzaWRlIHRvIGhpZGUgdGhlIERJU0sgSU8gbGF0 ZW5jeSwgRHJpdmVyCj4gKyAqIGNhbiBvbmx5IHN0b3JlIDggc25hcHNob3RzIG9mIEd1QyBsb2cg YnVmZmVyIGluIHJlbGF5Lgo+ICsgKi8KPiArI2RlZmluZSBOVU1fU1VCQlVGUyAxMDAKPiArCj4g KyNkZWZpbmUgUkVMQVlfRklMRV9OQU1FICAiZ3VjX2xvZyIKPiArI2RlZmluZSBERUZBVUxUX09V VFBVVF9GSUxFX05BTUUgICJndWNfbG9nX2R1bXAuZGF0Igo+ICsjZGVmaW5lIENPTlRST0xfRklM RV9OQU1FICJpOTE1X2d1Y19sb2dfY29udHJvbCIKPiArCj4gK2NoYXIgKnJlYWRfYnVmZmVyOwo+ ICtjaGFyICpvdXRfZmlsZW5hbWU7Cj4gK2ludCBwb2xsX3RpbWVvdXQgPSAyOyAvKiBieSBkZWZh dWx0IDJtcyB0aW1lb3V0ICovCj4gK3B0aHJlYWRfbXV0ZXhfdCBtdXRleDsKPiArcHRocmVhZF90 IGZsdXNoX3RocmVhZDsKPiAraW50IHZlcmJvc2l0eV9sZXZlbCA9IDM7IC8qIGJ5IGRlZmF1bHQg Y2FwdHVyZSBsb2dzIGF0IG1heCB2ZXJib3NpdHkgKi8KPiArdWludDMyX3QgcHJvZHVjZWQsIGNv bnN1bWVkOwo+ICt1aW50NjRfdCB0b3RhbF9ieXRlc193cml0dGVuOwo+ICtpbnQgbnVtX2J1ZmZl cnMgPSBOVU1fU1VCQlVGUzsKPiAraW50IHJlbGF5X2ZkLCBvdXRmaWxlX2ZkID0gLTE7Cj4gK2Jv b2wgc3RvcF9sb2dnaW5nLCBkaXNjYXJkX29sZGxvZ3M7Cj4gK3VpbnQzMl90IHRlc3RfZHVyYXRp b24sIG1heF9maWxlc2l6ZTsKPiArcHRocmVhZF9jb25kX3QgdW5kZXJmbG93X2NvbmQsIG92ZXJm bG93X2NvbmQ7Cj4gKwo+ICtzdGF0aWMgdm9pZCBndWNfbG9nX2NvbnRyb2woYm9vbCBlbmFibGVf bG9nZ2luZykKPiArewo+ICsJaW50IGNvbnRyb2xfZmQ7Cj4gKwljaGFyIGRhdGFbMTldOwo+ICsJ dWludDY0X3QgdmFsOwo+ICsJaW50IHJldDsKPiArCj4gKwljb250cm9sX2ZkID0gaWd0X2RlYnVn ZnNfb3BlbihDT05UUk9MX0ZJTEVfTkFNRSwgT19XUk9OTFkpOwo+ICsJaWd0X2Fzc2VydF9mKGNv bnRyb2xfZmQgPj0gMCwgImNvdWxkbid0IG9wZW4gdGhlIGd1YyBsb2cgY29udHJvbCBmaWxlIik7 Cj4gKwo+ICsJdmFsID0gZW5hYmxlX2xvZ2dpbmcgPyAoKHZlcmJvc2l0eV9sZXZlbCA8PCA0KSB8 IDB4MSkgOiAwOwo+ICsKPiArCXJldCA9IHNucHJpbnRmKGRhdGEsIHNpemVvZihkYXRhKSwgIjB4 JSIgUFJJeDY0LCB2YWwpOwo+ICsJaWd0X2Fzc2VydChyZXQgPiAyICYmIHJldCA8IHNpemVvZihk YXRhKSk7Cj4gKwo+ICsJcmV0ID0gd3JpdGUoY29udHJvbF9mZCwgZGF0YSwgcmV0KTsKPiArCWln dF9hc3NlcnRfZihyZXQgPiAwLCAiY291bGRuJ3Qgd3JpdGUgdG8gdGhlIGxvZyBjb250cm9sIGZp bGUiKTsKPiArCj4gKwljbG9zZShjb250cm9sX2ZkKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQg aW50X3NpZ19oYW5kbGVyKGludCBzaWcpCj4gK3sKPiArCWlndF9pbmZvKCJyZWNlaXZlZCBzaWdu YWwgJWRcbiIsIHNpZyk7Cj4gKwo+ICsJc3RvcF9sb2dnaW5nID0gdHJ1ZTsKPiArfQo+ICsKPiAr c3RhdGljIHZvaWQgcHVsbF9sZWZ0b3Zlcl9kYXRhKHZvaWQpCj4gK3sKPiArCXVuc2lnbmVkIGlu dCBieXRlc19yZWFkID0gMDsKPiArCWludCByZXQ7Cj4gKwo+ICsJZG8gewo+ICsJCS8qIFJlYWQg dGhlIGxvZ3MgZnJvbSByZWxheSBidWZmZXIgKi8KPiArCQlyZXQgPSByZWFkKHJlbGF5X2ZkLCBy ZWFkX2J1ZmZlciwgU1VCQlVGX1NJWkUpOwo+ICsJCWlmICghcmV0KQo+ICsJCQlicmVhazsKPiAr Cj4gKwkJaWd0X2Fzc2VydF9mKHJldCA+IDAsICJmYWlsZWQgdG8gcmVhZCBmcm9tIHRoZSBndWMg bG9nIGZpbGUiKTsKPiArCQlpZ3RfYXNzZXJ0X2YocmV0ID09IFNVQkJVRl9TSVpFLCAiaW52YWxp ZCByZWFkIGZyb20gcmVsYXkgZmlsZSIpOwo+ICsKPiArCQlieXRlc19yZWFkICs9IHJldDsKPiAr Cj4gKwkJaWYgKG91dGZpbGVfZmQgPj0gMCkgewo+ICsJCQlyZXQgPSB3cml0ZShvdXRmaWxlX2Zk LCByZWFkX2J1ZmZlciwgU1VCQlVGX1NJWkUpOwo+ICsJCQlpZ3RfYXNzZXJ0X2YocmV0ID09IFNV QkJVRl9TSVpFLCAiY291bGRuJ3QgZHVtcCB0aGUgbG9ncyBpbiBhIGZpbGUiKTsKPiArCQkJdG90 YWxfYnl0ZXNfd3JpdHRlbiArPSByZXQ7Cj4gKwkJfQo+ICsJfSB3aGlsZSgxKTsKPiArCj4gKwlp Z3RfZGVidWcoIiV1IGJ5dGVzIGZsdXNoZWRcbiIsIGJ5dGVzX3JlYWQpOwo+ICt9Cj4gKwo+ICtz dGF0aWMgaW50IG51bV9maWxsZWRfYnVmcyh2b2lkKQo+ICt7Cj4gKwlyZXR1cm4gKHByb2R1Y2Vk IC0gY29uc3VtZWQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBwdWxsX2RhdGEodm9pZCkKPiAr ewo+ICsJY2hhciAqcHRyOwo+ICsJaW50IHJldDsKPiArCj4gKwlwdGhyZWFkX211dGV4X2xvY2so Jm11dGV4KTsKPiArCXdoaWxlIChudW1fZmlsbGVkX2J1ZnMoKSA+PSBudW1fYnVmZmVycykgewo+ ICsJCWlndF9kZWJ1Zygib3ZlcmZsb3csIHdpbGwgd2FpdCwgcHJvZHVjZWQgJXUsIGNvbnN1bWVk ICV1XG4iLCBwcm9kdWNlZCwgY29uc3VtZWQpOwo+ICsJCS8qIFN0YWxsIHRoZSBtYWluIHRocmVh ZCBpbiBjYXNlIG9mIG92ZXJmbG93LCBhcyB0aGVyZSBhcmUgbm8KPiArCQkgKiBidWZmZXJzIGF2 YWlsYWJsZSB0byBzdG9yZSB0aGUgbmV3IGxvZ3MsIG90aGVyd2lzZSB0aGVyZQo+ICsJCSAqIGNv dWxkIGJlIGNvcnJ1cHRpb24gaWYgYm90aCB0aHJlYWRzIHdvcmsgb24gdGhlIHNhbWUgYnVmZmVy Lgo+ICsJCSAqLwo+ICsJCXB0aHJlYWRfY29uZF93YWl0KCZvdmVyZmxvd19jb25kLCAmbXV0ZXgp Owo+ICsJfTsKPiArCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZtdXRleCk7Cj4gKwo+ICsJcHRyID0g cmVhZF9idWZmZXIgKyAocHJvZHVjZWQgJSBudW1fYnVmZmVycykgKiBTVUJCVUZfU0laRTsKPiAr Cj4gKwkvKiBSZWFkIHRoZSBsb2dzIGZyb20gcmVsYXkgYnVmZmVyICovCj4gKwlyZXQgPSByZWFk KHJlbGF5X2ZkLCBwdHIsIFNVQkJVRl9TSVpFKTsKPiArCWlndF9hc3NlcnRfZihyZXQgPj0gMCwg ImZhaWxlZCB0byByZWFkIGZyb20gdGhlIGd1YyBsb2cgZmlsZSIpOwo+ICsJaWd0X2Fzc2VydF9m KHJldCA9PSBTVUJCVUZfU0laRSwgImludmFsaWQgcmVhZCBmcm9tIHJlbGF5IGZpbGUiKTsKPiAr Cj4gKwlpZiAocmV0KSB7Cj4gKwkJcHRocmVhZF9tdXRleF9sb2NrKCZtdXRleCk7Cj4gKwkJcHJv ZHVjZWQrKzsKPiArCQlwdGhyZWFkX2NvbmRfc2lnbmFsKCZ1bmRlcmZsb3dfY29uZCk7Cj4gKwkJ cHRocmVhZF9tdXRleF91bmxvY2soJm11dGV4KTsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIHZv aWQgKmZsdXNoZXIodm9pZCAqYXJnKQo+ICt7Cj4gKwljaGFyICpwdHI7Cj4gKwlpbnQgcmV0Owo+ ICsKPiArCWlndF9kZWJ1ZygiZXhlY3V0aW9uIHN0YXJ0ZWQgb2YgZmx1c2hlciB0aHJlYWRcbiIp Owo+ICsKPiArCWRvIHsKPiArCQlwdGhyZWFkX211dGV4X2xvY2soJm11dGV4KTsKPiArCQl3aGls ZSAoIW51bV9maWxsZWRfYnVmcygpKSB7Cj4gKwkJCS8qIEV4aXQgb25seSBhZnRlciBjb21wbGV0 aW5nIHRoZSBmbHVzaCBvZiBhbGwgdGhlIGZpbGxlZAo+ICsJCQkgKiBidWZmZXJzIGFzIFVzZXIg d291bGQgZXhwZWN0IHRoYXQgYWxsIGxvZ3MgY2FwdHVyZWQgdXAKPiArCQkJICogdGlsbCB0aGUg cG9pbnQgb2YgaW50ZXJydXB0aW9uL2V4aXQgYXJlIHdyaXR0ZW4gb3V0IHRvCj4gKwkJCSAqIHRo ZSBkaXNrIGZpbGUuCj4gKwkJCSAqLwo+ICsJCQlpZiAoc3RvcF9sb2dnaW5nKSB7Cj4gKwkJCQlp Z3RfZGVidWcoImZsdXNoZXIgdG8gZXhpdCBub3dcbiIpOwo+ICsJCQkJcHRocmVhZF9tdXRleF91 bmxvY2soJm11dGV4KTsKPiArCQkJCXJldHVybiBOVUxMOwo+ICsJCQl9Cj4gKwkJCXB0aHJlYWRf Y29uZF93YWl0KCZ1bmRlcmZsb3dfY29uZCwgJm11dGV4KTsKPiArCQl9Owo+ICsJCXB0aHJlYWRf bXV0ZXhfdW5sb2NrKCZtdXRleCk7Cj4gKwo+ICsJCXB0ciA9IHJlYWRfYnVmZmVyICsgKGNvbnN1 bWVkICUgbnVtX2J1ZmZlcnMpICogU1VCQlVGX1NJWkU7Cj4gKwo+ICsJCXJldCA9IHdyaXRlKG91 dGZpbGVfZmQsIHB0ciwgU1VCQlVGX1NJWkUpOwo+ICsJCWlndF9hc3NlcnRfZihyZXQgPT0gU1VC QlVGX1NJWkUsICJjb3VsZG4ndCBkdW1wIHRoZSBsb2dzIGluIGEgZmlsZSIpOwo+ICsKPiArCQl0 b3RhbF9ieXRlc193cml0dGVuICs9IHJldDsKPiArCQlpZiAobWF4X2ZpbGVzaXplICYmICh0b3Rh bF9ieXRlc193cml0dGVuID4gTUIobWF4X2ZpbGVzaXplKSkpIHsKPiArCQkJaWd0X2RlYnVnKCJy ZWFjaGVkIHRoZSB0YXJnZXQgb2YgJSIgUFJJdTY0ICIgYnl0ZXNcbiIsIE1CKG1heF9maWxlc2l6 ZSkpOwo+ICsJCQlzdG9wX2xvZ2dpbmcgPSB0cnVlOwo+ICsJCX0KPiArCj4gKwkJcHRocmVhZF9t dXRleF9sb2NrKCZtdXRleCk7Cj4gKwkJY29uc3VtZWQrKzsKPiArCQlwdGhyZWFkX2NvbmRfc2ln bmFsKCZvdmVyZmxvd19jb25kKTsKPiArCQlwdGhyZWFkX211dGV4X3VubG9jaygmbXV0ZXgpOwo+ ICsJfSB3aGlsZSgxKTsKPiArCj4gKwlyZXR1cm4gTlVMTDsKPiArfQo+ICsKPiArc3RhdGljIHZv aWQgaW5pdF9mbHVzaGVyX3RocmVhZCh2b2lkKQo+ICt7Cj4gKwlzdHJ1Y3Qgc2NoZWRfcGFyYW0J dGhyZWFkX3NjaGVkOwo+ICsJcHRocmVhZF9hdHRyX3QJCXBfYXR0cjsKPiArCWludCByZXQ7Cj4g Kwo+ICsJcHRocmVhZF9jb25kX2luaXQoJnVuZGVyZmxvd19jb25kLCBOVUxMKTsKPiArCXB0aHJl YWRfY29uZF9pbml0KCZvdmVyZmxvd19jb25kLCBOVUxMKTsKPiArCXB0aHJlYWRfbXV0ZXhfaW5p dCgmbXV0ZXgsIE5VTEwpOwo+ICsKPiArCXJldCA9IHB0aHJlYWRfYXR0cl9pbml0KCZwX2F0dHIp Owo+ICsJaWd0X2Fzc2VydF9mKHJldCA9PSAwLCAiZXJyb3Igb2J0YWluaW5nIGRlZmF1bHQgdGhy ZWFkIGF0dHJpYnV0ZXMiKTsKPiArCj4gKwlyZXQgPSBwdGhyZWFkX2F0dHJfc2V0aW5oZXJpdHNj aGVkKCZwX2F0dHIsIFBUSFJFQURfRVhQTElDSVRfU0NIRUQpOwo+ICsJaWd0X2Fzc2VydF9mKHJl dCA9PSAwLCAiY291bGRuJ3Qgc2V0IGluaGVyaXRzY2hlZCIpOwo+ICsKPiArCXJldCA9IHB0aHJl YWRfYXR0cl9zZXRzY2hlZHBvbGljeSgmcF9hdHRyLCBTQ0hFRF9SUik7Cj4gKwlpZ3RfYXNzZXJ0 X2YocmV0ID09IDAsICJjb3VsZG4ndCBzZXQgdGhyZWFkIHNjaGVkdWxpbmcgcG9saWN5Iik7Cj4g Kwo+ICsJLyogS2VlcCB0aGUgZmx1c2hlciB0YXNrIGFsc28gYXQgcnQgcHJpb3JpdHksIHNvIHRo YXQgaXQgZG9lc24ndCBnZXQKPiArCSAqIHRvbyBsYXRlIGluIGZsdXNoaW5nIHRoZSBjb2xsZWN0 ZWQgbG9ncyBpbiBsb2NhbCBidWZmZXJzIHRvIHRoZSBkaXNrLAo+ICsJICogYW5kIHNvIG1haW4g dGhyZWFkIGFsd2F5cyBoYXZlIHNwYXJlIGJ1ZmZlcnMgdG8gY29sbGVjdCB0aGUgbG9ncy4KPiAr CSAqLwo+ICsJdGhyZWFkX3NjaGVkLnNjaGVkX3ByaW9yaXR5ID0gNTsKPiArCXJldCA9IHB0aHJl YWRfYXR0cl9zZXRzY2hlZHBhcmFtKCZwX2F0dHIsICZ0aHJlYWRfc2NoZWQpOwo+ICsJaWd0X2Fz c2VydF9mKHJldCA9PSAwLCAiY291bGRuJ3Qgc2V0IHRocmVhZCBwcmlvcml0eSIpOwo+ICsKPiAr CXJldCA9IHB0aHJlYWRfY3JlYXRlKCZmbHVzaF90aHJlYWQsICZwX2F0dHIsIGZsdXNoZXIsIE5V TEwpOwo+ICsJaWd0X2Fzc2VydF9mKHJldCA9PSAwLCAidGhyZWFkIGNyZWF0aW9uIGZhaWxlZCIp Owo+ICsKPiArCXJldCA9IHB0aHJlYWRfYXR0cl9kZXN0cm95KCZwX2F0dHIpOwo+ICsJaWd0X2Fz c2VydF9mKHJldCA9PSAwLCAiZXJyb3IgZGVzdHJveWluZyB0aHJlYWQgYXR0cmlidXRlcyIpOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBvcGVuX3JlbGF5X2ZpbGUodm9pZCkKPiArewo+ICsJcmVs YXlfZmQgPSBpZ3RfZGVidWdmc19vcGVuKFJFTEFZX0ZJTEVfTkFNRSwgT19SRE9OTFkpOwo+ICsJ aWd0X2Fzc2VydF9mKHJlbGF5X2ZkID49IDAsICJjb3VsZG4ndCBvcGVuIHRoZSBndWMgbG9nIGZp bGUiKTsKPiArCj4gKwkvKiBQdXJnZSB0aGUgb2xkL2Jvb3QtdGltZSBsb2dzIGZyb20gdGhlIHJl bGF5IGJ1ZmZlci4KPiArCSAqIFRoaXMgaXMgbW9yZSBmb3IgVmFsIHRlYW0ncyByZXF1aXJlbWVu dCwgd2hlcmUgdGhleSBoYXZlIHRvIGZpcnN0Cj4gKwkgKiBwdXJnZSB0aGUgZXhpc3RpbmcgbG9n cyBiZWZvcmUgc3RhcnRpbmcgdGhlIHRlc3RzIGZvciB3aGljaCB0aGUgbG9ncwo+ICsJICogYXJl IGFjdHVhbGx5IG5lZWRlZC4gQWZ0ZXIgdGhpcyBsb2dnZXIgd2lsbCBlbnRlciBpbnRvIGEgbG9v cCBhbmQKPiArCSAqIHdhaXQgZm9yIHRoZSBuZXcgZGF0YSwgYXQgdGhhdCBwb2ludCBiZW5jaG1h cmsgY2FuIGJlIGxhdW5jaGVkIGZyb20KPiArCSAqIGEgZGlmZmVyZW50IHNoZWxsLgo+ICsJICov Cj4gKwlpZiAoZGlzY2FyZF9vbGRsb2dzKQo+ICsJCXB1bGxfbGVmdG92ZXJfZGF0YSgpOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgdm9pZCBvcGVuX291dHB1dF9maWxlKHZvaWQpCj4gK3sKPiArCS8qIFVz ZSBEaXJlY3QgSU8gbW9kZSBmb3IgdGhlIG91dHB1dCBmaWxlLCBhcyB0aGUgZGF0YSB3cml0dGVu IGlzIG5vdAo+ICsJICogc3VwcG9zZWQgdG8gYmUgYWNjZXNzZWQgYWdhaW4sIHRoaXMgc2F2ZXMg YSBjb3B5IG9mIGRhdGEgZnJvbSBBcHAncwo+ICsJICogYnVmZmVyIHRvIGtlcm5lbCBidWZmZXIg KFBhZ2UgY2FjaGUpLiBEdWUgdG8gbm8gYnVmZmVyaW5nIG9uIGtlcm5lbAo+ICsJICogc2lkZSwg ZGF0YSBpcyBmbHVzaGVkIG91dCB0byBkaXNrIGZhc3RlciBhbmQgbW9yZSBidWZmZXJpbmcgY2Fu IGJlCj4gKwkgKiBkb25lIG9uIHRoZSBsb2dnZXIgc2lkZSB0byBoaWRlIHRoZSBkaXNrIElPIGxh dGVuY3kuCj4gKwkgKi8KPiArCW91dGZpbGVfZmQgPSBvcGVuKG91dF9maWxlbmFtZSA/IDogREVG QVVMVF9PVVRQVVRfRklMRV9OQU1FLAo+ICsJCQkgIE9fQ1JFQVQgfCBPX1dST05MWSB8IE9fVFJV TkMgfCBPX0RJUkVDVCwKPiArCQkJICAwNDQwKTsKPiArCWlndF9hc3NlcnRfZihvdXRmaWxlX2Zk ID49IDAsICJjb3VsZG4ndCBvcGVuIHRoZSBvdXRwdXQgZmlsZSIpOwo+ICsKPiArCWZyZWUob3V0 X2ZpbGVuYW1lKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaW5pdF9tYWluX3RocmVhZCh2b2lk KQo+ICt7Cj4gKwlzdHJ1Y3Qgc2NoZWRfcGFyYW0JdGhyZWFkX3NjaGVkOwo+ICsJaW50IHJldDsK PiArCj4gKwkvKiBSdW4gdGhlIG1haW4gdGhyZWFkIGF0IGhpZ2hlc3QgcHJpb3JpdHkgdG8gZW5z dXJlIHRoYXQgaXQgYWx3YXlzCj4gKwkgKiBnZXRzIHdva2VuLXVwIGF0IGVhcmxpZXN0IG9uIGFy cml2YWwgb2YgbmV3IGRhdGEgYW5kIHNvIGlzIGFsd2F5cwo+ICsJICogcmVhZHkgdG8gcHVsbCB0 aGUgbG9ncywgb3RoZXJ3aXNlIHRoZXJlIGNvdWxkIGJlIGxvc3MgbG9ncyBpZgo+ICsJICogR3VD IGZpcm13YXJlIGlzIGdlbmVyYXRpbmcgbG9ncyBhdCBhIHZlcnkgaGlnaCByYXRlLgo+ICsJICov Cj4gKwl0aHJlYWRfc2NoZWQuc2NoZWRfcHJpb3JpdHkgPSAxOwo+ICsJcmV0ID0gc2NoZWRfc2V0 c2NoZWR1bGVyKGdldHBpZCgpLCBTQ0hFRF9GSUZPLCAmdGhyZWFkX3NjaGVkKTsKPiArCWlndF9h c3NlcnRfZihyZXQgPT0gMCwgImNvdWxkbid0IHNldCB0aGUgcHJpb3JpdHkiKTsKPiArCj4gKwlp ZiAoc2lnbmFsKFNJR0lOVCwgaW50X3NpZ19oYW5kbGVyKSA9PSBTSUdfRVJSKQo+ICsJCWlndF9h c3NlcnRfZigwLCAiU0lHSU5UIGhhbmRsZXIgcmVnaXN0cmF0aW9uIGZhaWxlZCIpOwo+ICsKPiAr CWlmIChzaWduYWwoU0lHQUxSTSwgaW50X3NpZ19oYW5kbGVyKSA9PSBTSUdfRVJSKQo+ICsJCWln dF9hc3NlcnRfZigwLCAiU0lHQUxSTSBoYW5kbGVyIHJlZ2lzdHJhdGlvbiBmYWlsZWQiKTsKPiAr Cj4gKwkvKiBOZWVkIGFuIGFsaWduZWQgcG9pbnRlciBmb3IgZGlyZWN0IElPICovCj4gKwlyZXQg PSBwb3NpeF9tZW1hbGlnbigodm9pZCAqKikmcmVhZF9idWZmZXIsIFBBR0VfU0laRSwgbnVtX2J1 ZmZlcnMgKiBTVUJCVUZfU0laRSk7Cj4gKwlpZ3RfYXNzZXJ0X2YocmV0ID09IDAsICJjb3VsZG4n dCBhbGxvY2F0ZSB0aGUgcmVhZCBidWZmZXIiKTsKPiArCj4gKwkvKiBLZWVwIHRoZSBwYWdlcyBs b2NrZWQgaW4gUkFNLCBhdm9pZCBwYWdlIGZhdWx0IG92ZXJoZWFkICovCj4gKwlyZXQgPSBtbG9j ayhyZWFkX2J1ZmZlciwgbnVtX2J1ZmZlcnMgKiBTVUJCVUZfU0laRSk7Cj4gKwlpZ3RfYXNzZXJ0 X2YocmV0ID09IDAsICJmYWlsZWQgdG8gbG9jayBtZW1vcnkiKTsKPiArCj4gKwkvKiBFbmFibGUg dGhlIGxvZ2dpbmcsIGl0IG1heSBub3QgaGF2ZSBiZWVuIGVuYWJsZWQgZnJvbSBib290IGFuZCBz bwo+ICsJICogdGhlIHJlbGF5IGZpbGUgYWxzbyB3b3VsZG4ndCBoYXZlIGJlZW4gY3JlYXRlZC4K PiArCSAqLwo+ICsJZ3VjX2xvZ19jb250cm9sKHRydWUpOwo+ICsKPiArCW9wZW5fcmVsYXlfZmls ZSgpOwo+ICsJb3Blbl9vdXRwdXRfZmlsZSgpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHBhcnNl X29wdGlvbnMoaW50IG9wdCwgaW50IG9wdF9pbmRleCwgdm9pZCAqZGF0YSkKPiArewo+ICsJaWd0 X2RlYnVnKCJvcHQgJWMgb3B0YXJnICVzXG4iLCBvcHQsIG9wdGFyZyk7Cj4gKwo+ICsJc3dpdGNo KG9wdCkgewo+ICsJY2FzZSAndic6Cj4gKwkJdmVyYm9zaXR5X2xldmVsID0gYXRvaShvcHRhcmcp Owo+ICsJCWlndF9hc3NlcnRfZih2ZXJib3NpdHlfbGV2ZWwgPCAwIHx8IHZlcmJvc2l0eV9sZXZl bCA+IDMsICJpbnZhbGlkIGlucHV0IGZvciAtdiBvcHRpb24iKTsKPiArCQlpZ3RfZGVidWcoInZl cmJvc2l0eSBsZXZlbCB0byBiZSB1c2VkIGlzICVkXG4iLCB2ZXJib3NpdHlfbGV2ZWwpOwo+ICsJ CWJyZWFrOwo+ICsJY2FzZSAnbyc6Cj4gKwkJb3V0X2ZpbGVuYW1lID0gc3RyZHVwKG9wdGFyZyk7 Cj4gKwkJaWd0X2Fzc2VydF9mKG91dF9maWxlbmFtZSwgIkNvdWxkbid0IGFsbG9jYXRlIHRoZSBv L3AgZmlsZW5hbWUiKTsKPiArCQlpZ3RfZGVidWcoImxvZ3MgdG8gYmUgc3RvcmVkIGluIGZpbGUg JXNcbiIsIG91dF9maWxlbmFtZSk7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlICdiJzoKPiArCQludW1f YnVmZmVycyA9IGF0b2kob3B0YXJnKTsKPiArCQlpZ3RfYXNzZXJ0X2YobnVtX2J1ZmZlcnMgPiAw LCAiaW52YWxpZCBpbnB1dCBmb3IgLWIgb3B0aW9uIik7Cj4gKwkJaWd0X2RlYnVnKCJudW1iZXIg b2YgYnVmZmVycyB0byBiZSB1c2VkIGlzICVkXG4iLCBudW1fYnVmZmVycyk7Cj4gKwkJYnJlYWs7 Cj4gKwljYXNlICd0JzoKPiArCQl0ZXN0X2R1cmF0aW9uID0gYXRvaShvcHRhcmcpOwo+ICsJCWln dF9hc3NlcnRfZih0ZXN0X2R1cmF0aW9uID4gMCwgImludmFsaWQgaW5wdXQgZm9yIC10IG9wdGlv biIpOwo+ICsJCWlndF9kZWJ1ZygibG9nZ2VyIHRvIHJ1biBmb3IgJWQgc2Vjb25kc1xuIiwgdGVz dF9kdXJhdGlvbik7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlICdwJzoKPiArCQlwb2xsX3RpbWVvdXQg PSBhdG9pKG9wdGFyZyk7Cj4gKwkJaWd0X2Fzc2VydF9mKHBvbGxfdGltZW91dCAhPSAwLCAiaW52 YWxpZCBpbnB1dCBmb3IgLXAgb3B0aW9uIik7Cj4gKwkJaWYgKHBvbGxfdGltZW91dCA+IDApCj4g KwkJCWlndF9kZWJ1ZygicG9sbGluZyB0byBiZSBkb25lIHdpdGggJWQgbWlsbGkgc2Vjb25kcyB0 aW1lb3V0XG4iLCBwb2xsX3RpbWVvdXQpOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSAncyc6Cj4gKwkJ bWF4X2ZpbGVzaXplID0gYXRvaShvcHRhcmcpOwo+ICsJCWlndF9hc3NlcnRfZihtYXhfZmlsZXNp emUgPiAwLCAiaW52YWxpZCBpbnB1dCBmb3IgLXMgb3B0aW9uIik7Cj4gKwkJaWd0X2RlYnVnKCJt YXggYWxsb3dlZCBzaXplIG9mIHRoZSBvdXRwdXQgZmlsZSBpcyAlZCBNQnNcbiIsIG1heF9maWxl c2l6ZSk7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlICdkJzoKPiArCQlkaXNjYXJkX29sZGxvZ3MgPSB0 cnVlOwo+ICsJCWlndF9kZWJ1Zygib2xkL2Jvb3QtdGltZSBsb2dzIHdpbGwgYmUgZGlzY2FyZGVk XG4iKTsKPiArCQlicmVhazsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3Rh dGljIHZvaWQgcHJvY2Vzc19jb21tYW5kX2xpbmUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQo+ICt7 Cj4gKwlzdGF0aWMgc3RydWN0IG9wdGlvbiBsb25nX29wdGlvbnNbXSA9IHsKPiArCQl7InZlcmJv c2l0eSIsIHJlcXVpcmVkX2FyZ3VtZW50LCAwLCAndid9LAo+ICsJCXsib3V0cHV0ZmlsZW5hbWUi LCByZXF1aXJlZF9hcmd1bWVudCwgMCwgJ28nfSwKPiArCQl7ImJ1ZmZlcnMiLCByZXF1aXJlZF9h cmd1bWVudCwgMCwgJ2InfSwKPiArCQl7InRlc3RkdXJhdGlvbiIsIHJlcXVpcmVkX2FyZ3VtZW50 LCAwLCAndCd9LAo+ICsJCXsicG9sbHRpbWVvdXQiLCByZXF1aXJlZF9hcmd1bWVudCwgMCwgJ3An fSwKPiArCQl7InNpemUiLCByZXF1aXJlZF9hcmd1bWVudCwgMCwgJ3MnfSwKPiArCQl7ImRpc2Nh cmQiLCBub19hcmd1bWVudCwgMCwgJ2QnfSwKPiArCQl7IDAsIDAsIDAsIDAgfQo+ICsJfTsKPiAr Cj4gKwljb25zdCBjaGFyICpoZWxwID0KPiArCQkiICAtdiAtLXZlcmJvc2l0eT1sZXZlbCAgIHZl cmJvc2l0eSBsZXZlbCBvZiBHdUMgbG9nZ2luZyAoMC0zKVxuIgo+ICsJCSIgIC1vIC0tb3V0Zmls ZT1uYW1lICAgICAgbmFtZSBvZiB0aGUgb3V0cHV0IGZpbGUgaW4gL3RtcCBkaXJlY3RvcnksIHdo ZXJlIGxvZ3Mgd2lsbCBiZSBzdG9yZWRcbiIKPiArCQkiICAtYiAtLWJ1ZmZlcnM9bnVtICAgICAg IG51bWJlciBvZiBidWZmZXJzIHRvIGJlIG1haW50YWluZWQgb24gbG9nZ2VyIHNpZGUgZm9yIHN0 b3JpbmcgbG9nc1xuIgo+ICsJCSIgIC10IC0tdGVzdGR1cmF0aW9uPXNlYyAgbWF4IGR1cmF0aW9u IGluIHNlY29uZHMgZm9yIHdoaWNoIHRoZSBsb2dnZXIgc2hvdWxkIHJ1biwgMCA9PSBmb3JldmVy XG4iCj4gKwkJIiAgLXAgLS1wb2xsdGltZW91dD1tcyAgICBwb2xsaW5nIHRpbWVvdXQgaW4gbXMs IC0xID09IGluZGVmaW5pdGUgd2FpdCBmb3IgdGhlIG5ldyBkYXRhXG4iCj4gKwkJIiAgLXMgLS1z aXplPU1CICAgICAgICAgICBtYXggc2l6ZSBvZiBvdXRwdXQgZmlsZSBpbiBNQnMgYWZ0ZXIgd2hp Y2ggbG9nZ2luZyB3aWxsIGJlIHN0b3BwZWQsIDAgPT0gbm8gbGltaXRcbiIKPiArCQkiICAtZCAt LWRpc2NhcmQgICAgICAgICAgIGRpc2NhcmQgdGhlIG9sZC9ib290LXRpbWUgbG9ncyBiZWZvcmUg ZW50ZXJpbmcgaW50byB0aGUgY2FwdHVyZSBsb29wXG4iOwo+ICsKPiArCWlndF9zaW1wbGVfaW5p dF9wYXJzZV9vcHRzKCZhcmdjLCBhcmd2LCAidjpvOmI6dDpwOnM6ZCIsIGxvbmdfb3B0aW9ucywK PiArCQkJCSAgIGhlbHAsIHBhcnNlX29wdGlvbnMsIE5VTEwpOwo+ICt9Cj4gKwo+ICtpbnQgbWFp bihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCj4gK3sKPiArCXN0cnVjdCBwb2xsZmQgcmVsYXlfcG9s bF9mZDsKPiArCWludCBuZmRzOwo+ICsJaW50IHJldDsKPiArCj4gKwlwcm9jZXNzX2NvbW1hbmRf bGluZShhcmdjLCBhcmd2KTsKPiArCj4gKwlpbml0X21haW5fdGhyZWFkKCk7Cj4gKwo+ICsJLyog VXNlIGEgc2VwYXJhdGUgdGhyZWFkIGZvciBmbHVzaGluZyB0aGUgbG9ncyB0byBhIGZpbGUgb24g ZGlzay4KPiArCSAqIE1haW4gdGhyZWFkIHdpbGwgYnVmZmVyIHRoZSBkYXRhIGZyb20gcmVsYXkg ZmlsZSBpbiBpdHMgcG9vbCBvZgo+ICsJICogYnVmZmVycyBhbmQgb3RoZXIgdGhyZWFkIHdpbGwg Zmx1c2ggdGhlIGRhdGEgdG8gZGlzayBpbiBiYWNrZ3JvdW5kLgo+ICsJICogVGhpcyBpcyBuZWVk ZWQsIGFsYmVpdCBieSBkZWZhdWx0IGRhdGEgaXMgd3JpdHRlbiBvdXQgdG8gZGlzayBpbgo+ICsJ ICogYXN5bmMgbW9kZSwgYXMgd2hlbiB0aGVyZSBhcmUgdG9vIG1hbnkgZGlydHkgcGFnZXMgaW4g dGhlIFJBTSwKPiArCSAqICgvcHJvYy9zeXMvdm0vZGlydHlfcmF0aW8pLCBrZXJuZWwgc3RhcnRz IGJsb2NraW5nIHRoZSBwcm9jZXNzZXMKPiArCSAqIGRvaW5nIHRoZSBmaWxlIHdyaXRlcy4KPiAr CSAqLwo+ICsJaW5pdF9mbHVzaGVyX3RocmVhZCgpOwo+ICsKPiArCXJlbGF5X3BvbGxfZmQuZmQg PSByZWxheV9mZDsKPiArCXJlbGF5X3BvbGxfZmQuZXZlbnRzID0gUE9MTElOOwo+ICsJcmVsYXlf cG9sbF9mZC5yZXZlbnRzID0gMDsKPiArCj4gKwluZmRzID0gMTsgLyogb25seSBvbmUgZmQgdG8g cG9sbCAqLwo+ICsKPiArCWFsYXJtKHRlc3RfZHVyYXRpb24pOyAvKiBTdGFydCB0aGUgYWxhcm0g Ki8KPiArCj4gKwlkbyB7Cj4gKwkJLyogV2FpdC9wb2xsIGZvciB0aGUgbmV3IGRhdGEgdG8gYmUg YXZhaWxhYmxlLCByZWxheSBkb2Vzbid0Cj4gKwkJICogcHJvdmlkZSBhIGJsb2NraW5nIHJlYWQu Cj4gKwkJICogT24gb2xkZXIga2VybmVscyBuZWVkIHRvIGRvIHBvbGxpbmcgd2l0aCBhIHRpbWVv dXQgaW5zdGVhZCBvZgo+ICsJCSAqIGluZGVmaW5pdGUgd2FpdCB0byBhdm9pZCByZWx5aW5nIG9u IHJlbGF5IGZvciB0aGUgd2FrZXVwLCBhcwo+ICsJCSAqIHJlbGF5IHVzZWQgdG8gZG8gdGhlIHdh a2V1cCBpbiBhIGRlZmVycmVkIG1hbm5lciBvbiBqaWZmaWVzCj4gKwkJICogZ3JhbnVsYXJpdHkg Ynkgc2NoZWR1bGluZyBhIHRpbWVyIGFuZCBtb3Jlb3ZlciB0aGF0IHRpbWVyIHdhcwo+ICsJCSAq IHJlLXNjaGVkdWxlZCBvbiBldmVyeSBuZXdseSBwcm9kdWNlZCBidWZmZXIgYW5kIHNvIHdhcyBw dXNoZWQKPiArCQkgKiBvdXQgaWYgdGhlcmUgd2VyZSBtdWx0aXBsZSBmbHVzaCBpbnRlcnJ1cHRz IGluIGEgdmVyeSBxdWljawo+ICsJCSAqIHN1Y2Nlc3Npb24gKGxlc3MgdGhhbiBhIGppZmZ5IGdh cCBiZXR3ZWVuIDIgZmx1c2ggaW50ZXJydXB0cykKPiArCQkgKiBjYXVzaW5nIHJlbGF5IHRvIHJ1 biBvdXQgb2Ygc3ViIGJ1ZmZlcnMgdG8gc3RvcmUgbmV3IGxvZ3MuCj4gKwkJICovCj4gKwkJcmV0 ID0gcG9sbCgmcmVsYXlfcG9sbF9mZCwgbmZkcywgcG9sbF90aW1lb3V0KTsKPiArCQlpZiAocmV0 IDwgMCkgewo+ICsJCQlpZiAoZXJybm8gPT0gRUlOVFIpCj4gKwkJCQlicmVhazsKPiArCQkJZWxz ZQo+ICsJCQkJaWd0X2Fzc2VydF9mKDAsICJwb2xsIGNhbGwgZmFpbGVkIik7Cj4gKwkJfQo+ICsK PiArCQkvKiBObyBkYXRhIGF2YWlsYWJsZSB5ZXQsIHBvbGwgYWdhaW4sIGhvcGVmdWxseSBuZXcg ZGF0YSBpcyByb3VuZCB0aGUgY29ybmVyICovCj4gKwkJaWYgKCFyZWxheV9wb2xsX2ZkLnJldmVu dHMpCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQlwdWxsX2RhdGEoKTsKPiArCX0gd2hpbGUgKCFz dG9wX2xvZ2dpbmcpOwo+ICsKPiArCS8qIFBhdXNlIGxvZ2dpbmcgb24gdGhlIEd1QyBzaWRlKi8K PiArCWd1Y19sb2dfY29udHJvbChmYWxzZSk7Cj4gKwlwdGhyZWFkX2NvbmRfc2lnbmFsKCZ1bmRl cmZsb3dfY29uZCk7Cj4gKwlwdGhyZWFkX2pvaW4oZmx1c2hfdGhyZWFkLCBOVUxMKTsKPiArCXB1 bGxfbGVmdG92ZXJfZGF0YSgpOwo+ICsJaWd0X2luZm8oInRvdGFsIGJ5dGVzIHdyaXR0ZW4gJSIg UFJJdTY0ICJcbiIsIHRvdGFsX2J5dGVzX3dyaXR0ZW4pOwo+ICsKPiArCWZyZWUocmVhZF9idWZm ZXIpOwo+ICsJY2xvc2UocmVsYXlfZmQpOwo+ICsJY2xvc2Uob3V0ZmlsZV9mZCk7Cj4gKwlpZ3Rf ZXhpdCgpOwo+ICt9Cj4KClJldmlld2VkLWJ5OiBUdnJ0a28gVXJzdWxpbiA8dHZydGtvLnVyc3Vs aW5AaW50ZWwuY29tPgoKUmVnYXJkcywKClR2cnRrbwpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBs aXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1h bi9saXN0aW5mby9pbnRlbC1nZngK