From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jani Nikula Subject: Re: [PATCH igt] tools/intel_reg: Add reading and writing registers through engine Date: Wed, 31 Jan 2018 14:58:25 +0200 Message-ID: <87607ichhq.fsf@intel.com> References: <151213877121.9425.7682275503076761140@mail.alporthouse.com> <20180108141202.8718-1-mika.kuoppala@linux.intel.com> <87mv1o8lsg.fsf@intel.com> <871siheuzq.fsf@gaia.fi.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id D8FA06E684 for ; Wed, 31 Jan 2018 12:58:29 +0000 (UTC) In-Reply-To: <871siheuzq.fsf@gaia.fi.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Mika Kuoppala , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gTW9uLCAyMiBKYW4gMjAxOCwgTWlrYSBLdW9wcGFsYSA8bWlrYS5rdW9wcGFsYUBsaW51eC5p bnRlbC5jb20+IHdyb3RlOgo+IEphbmkgTmlrdWxhIDxqYW5pLm5pa3VsYUBpbnRlbC5jb20+IHdy aXRlczoKPgo+PiBPbiBNb24sIDA4IEphbiAyMDE4LCBNaWthIEt1b3BwYWxhIDxtaWthLmt1b3Bw YWxhQGxpbnV4LmludGVsLmNvbT4gd3JvdGU6Cj4+PiBBZGQgb3B0aW9uIHRvIHNwZWNpZnkgZW5n aW5lIGZvciByZWdpc3RlciByZWFkL3dyaXRlIG9wZXJhdGlvbi4KPj4+IElmIGVuZ2luZSBpcyBz cGVjaWZpZWQsIHVzZSBNSV9MT0FEX1JFR0lTVEVSX0lNTSBhbmQgTUlfU1RPUkVfUkVHSVNURVJf SU1NCj4+PiB0byB3cml0ZSBhbmQgcmVhZCByZWdpc3RlciB1c2luZyBhIGJhdGNoIHRhcmdldGVk IGF0IHRoYXQgZW5naW5lLgo+Pgo+PiBDb3B5LXBhc3RpbmcgZnJvbSB0aGUgbWFuIHBhZ2UsIHdl IGFscmVhZHkgaGF2ZSB0aGUgbm90YXRpb246Cj4+Cj4+ICJSZWdpc3RlcnMgYXJlIGRlZmluZWQg YXMgWyhQT1JUTkFNRXxQT1JUTlVNfE1NSU8tT0ZGU0VUKTpdKFJFR05BTUV8UkVHQUREUikuIgo+ Pgo+PiBXaHkgZG9uJ3Qgd2UgYWRkIHRoaXMgYXMgRU5HSU5FOlJFR05BTUUgb3Igc29tZXRoaW5n IGluc3RlYWQgb2YgYW4gZXh0cmEKPj4gLS1lbmdpbmUgcGFyYW1ldGVyPyBBcyBhICJwb3J0Ii4g U3VyZSwgaXQncyBtb3JlIHdvcmssIGJ1dCBJIHJlYWxseSBsaWtlCj4+IHRoZSBjdXJyZW50IHBv c3NpYmlsaXR5IG9mIHJlYWRpbmcgYWxsIHR5cGVzIG9mIHJlZ2lzdGVycyBhdCBvbmNlLiBOb3cK Pj4geW91IHByZXZlbnQgZHVtcHMgdGhhdCB3b3VsZCBjb250YWluIGJvdGggbW1pbyBhbmQgYmF0 Y2ggYmFzZWQgcmVhZHMuCj4+Cj4KPiBBcmUgeW91IG9rIHdpdGggdGhlIGxhdGVzdCB2ZXJzaW9u PyBBcyBkaXNjdXNzZWQgaW4gaXJjLCB0aGVyZSBhcmUKPiBwcm9ibGVtcyB3aXRoIHRyeWluZyB0 byBhZGQgZW5naW5lcyBhcyBwb3J0cywgZHVlIHRvIGR5bmFtaWMgbmF0dXJlCj4gYW5kIGFsc28g dGhhdCB0aGUgZXhpc3RpbmcgaW5mcmEgcmVsaWVzIG9uIFBPUlROQU1FIGJlaW5nIG1taW8KPiBm b3Igc3ltYm9saWMgcmVnaXN0ZXIgZHVtcGluZyB0byB3b3JrIGNvcnJlY3RseS4KPgo+IGZvciB0 aGUgd2FydCBvZiBpZiAocmVnLT5lbmdpbmUpIGluIHJlYWQvd3JpdGUgcGF0aHMKPiB3ZSBnYWlu IHRoZSBiZW5lZml0cyBvZiBtbWlvIGR1bXBzIHdpdGggZW5naW5lcy4KCkNhbid0IHNheSBJIHdv dWxkJ3ZlIHJldmlld2VkIGFsbCB0aGUgZW5naW5lIGJpdHMgYW5kIHBpZWNlcywgYnV0CgpBY2tl ZC1ieTogSmFuaSBOaWt1bGEgPGphbmkubmlrdWxhQGludGVsLmNvbT4KCgo+Cj4gLU1pa2EKPgo+ PiBCUiwKPj4gSmFuaS4KPj4KPj4KPj4+Cj4+PiB2Mjogbm8gTUlfTk9PUCBhZnRlciBCQkUgKENo cmlzKQo+Pj4gdjM6IHVzZSBtb2Rlcm4gZW5naW5lIG5hbWVzIChDaHJpcyksIHVzZSBnbG9iYWwg ZmQKPj4+Cj4+PiBDYzogSmFuaSBOaWt1bGEgPGphbmkubmlrdWxhQGludGVsLmNvbT4KPj4+IENj OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KPj4+IENDOiBKb29uYXMg TGFodGluZW4gPGpvb25hcy5sYWh0aW5lbkBsaW51eC5pbnRlbC5jb20+Cj4+PiBTaWduZWQtb2Zm LWJ5OiBNaWthIEt1b3BwYWxhIDxtaWthLmt1b3BwYWxhQGxpbnV4LmludGVsLmNvbT4KPj4+IC0t LQo+Pj4gIHRvb2xzL2ludGVsX3JlZy5jIHwgMTU2ICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrLQo+Pj4gIDEgZmlsZSBjaGFuZ2VkLCAxNTQgaW5z ZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKPj4+Cj4+PiBkaWZmIC0tZ2l0IGEvdG9vbHMvaW50 ZWxfcmVnLmMgYi90b29scy9pbnRlbF9yZWcuYwo+Pj4gaW5kZXggMDBkMmE0YTEuLjdmMzQ5NGVm IDEwMDY0NAo+Pj4gLS0tIGEvdG9vbHMvaW50ZWxfcmVnLmMKPj4+ICsrKyBiL3Rvb2xzL2ludGVs X3JlZy5jCj4+PiBAQCAtMzMsNiArMzMsNyBAQAo+Pj4gICNpbmNsdWRlIDx1bmlzdGQuaD4KPj4+ ICAKPj4+ICAjaW5jbHVkZSAiaWd0LmgiCj4+PiArI2luY2x1ZGUgImlndF9ndC5oIgo+Pj4gICNp bmNsdWRlICJpbnRlbF9pby5oIgo+Pj4gICNpbmNsdWRlICJpbnRlbF9jaGlwc2V0LmgiCj4+PiAg Cj4+PiBAQCAtNzMsNiArNzQsMTEgQEAgc3RydWN0IGNvbmZpZyB7Cj4+PiAgCj4+PiAgCS8qIHJl Z2lzdGVyIHNwZWMgKi8KPj4+ICAJY2hhciAqc3BlY2ZpbGU7Cj4+PiArCj4+PiArCS8qIGVuZ2lu ZSB0byB1c2UgZm9yIGxyaSAod3JpdGUpIGFuZCBzcm0gKHJlYWQpICovCj4+PiArCWNoYXIgKmVu Z2luZTsKPj4+ICsJaW50IGZkOwo+Pj4gKwo+Pj4gIAlzdHJ1Y3QgcmVnICpyZWdzOwo+Pj4gIAlz c2l6ZV90IHJlZ2NvdW50Owo+Pj4gIAo+Pj4gQEAgLTIzNiwxMyArMjQyLDE0MCBAQCBzdGF0aWMg dm9pZCBkdW1wX2RlY29kZShzdHJ1Y3QgY29uZmlnICpjb25maWcsIHN0cnVjdCByZWcgKnJlZywg dWludDMyX3QgdmFsKQo+Pj4gIAl9Cj4+PiAgfQo+Pj4gIAo+Pj4gK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmZpbmRfZW5naW5lKGNvbnN0IGNoYXIgKm5hbWUs Cj4+PiArCQkJCQkJCSBib29sICpzZWN1cmUpCj4+PiArewo+Pj4gKwljb25zdCBzdHJ1Y3QgaW50 ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmU7Cj4+PiArCj4+PiArCWlmIChzdHJsZW4obmFtZSkgPCAy KQo+Pj4gKwkJZ290byBvdXQ7Cj4+PiArCj4+PiArCWlmIChuYW1lWzBdID09ICctJykgewo+Pj4g KwkJKnNlY3VyZSA9IGZhbHNlOwo+Pj4gKwkJbmFtZSsrOwo+Pj4gKwl9IGVsc2Ugewo+Pj4gKwkJ KnNlY3VyZSA9IHRydWU7Cj4+PiArCX0KPj4+ICsKPj4+ICsJZm9yIChlID0gaW50ZWxfZXhlY3V0 aW9uX2VuZ2luZXMyOyBlLT5uYW1lOyBlKyspIHsKPj4+ICsJCWlmICghc3RyY21wKGUtPm5hbWUs IG5hbWUpKQo+Pj4gKwkJCXJldHVybiBlOwo+Pj4gKwl9Cj4+PiArCj4+PiArb3V0Ogo+Pj4gKwlm cHJpbnRmKHN0ZGVyciwgIm5vIHN1Y2ggZW5naW5lIGFzICclcydcbiIsIG5hbWUpOwo+Pj4gKwo+ Pj4gKwlmcHJpbnRmKHN0ZGVyciwgInZhbGlkIGVuZ2luZXM6Iik7Cj4+PiArCWZvciAoZSA9IGlu dGVsX2V4ZWN1dGlvbl9lbmdpbmVzMjsgZS0+bmFtZTsgZSsrKQo+Pj4gKwkJZnByaW50ZihzdGRl cnIsICIgJXMiLCBlLT5uYW1lKTsKPj4+ICsKPj4+ICsJZnByaW50ZihzdGRlcnIsICJcbiIpOwo+ Pj4gKwo+Pj4gKwlleGl0KEVYSVRfRkFJTFVSRSk7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBp bnQgcmVnaXN0ZXJfc3JtKHN0cnVjdCBjb25maWcgKmNvbmZpZywgc3RydWN0IHJlZyAqcmVnLAo+ Pj4gKwkJCXVpbnQzMl90ICp2YWxfaW4pCj4+PiArewo+Pj4gKwljb25zdCBpbnQgZ2VuID0gaW50 ZWxfZ2VuKGNvbmZpZy0+ZGV2aWQpOwo+Pj4gKwljb25zdCBib29sIHI2NGIgPSBnZW4gPj0gODsK Pj4+ICsJY29uc3QgdWludDMyX3QgY3R4ID0gMDsKPj4+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9l eGVjX29iamVjdDIgb2JqWzJdOwo+Pj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25f ZW50cnkgcmVsb2NbMV07Cj4+PiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhl Y2J1ZjsKPj4+ICsJdWludDMyX3QgKmJhdGNoLCAqcjsKPj4+ICsJY29uc3Qgc3RydWN0IGludGVs X2V4ZWN1dGlvbl9lbmdpbmUyICplbmdpbmU7Cj4+PiArCWJvb2wgc2VjdXJlOwo+Pj4gKwlpbnQg ZmQsIGk7Cj4+PiArCXVpbnQzMl90IHZhbDsKPj4+ICsKPj4+ICsJaWYgKGNvbmZpZy0+ZmQgPT0g LTEpIHsKPj4+ICsJCWNvbmZpZy0+ZmQgPSBfX2RybV9vcGVuX2RyaXZlcihEUklWRVJfSU5URUwp Owo+Pj4gKwkJaWYgKGNvbmZpZy0+ZmQgPT0gLTEpIHsKPj4+ICsJCQlmcHJpbnRmKHN0ZGVyciwg IkVycm9yIG9wZW5pbmcgZHJpdmVyOiAlcyIsCj4+PiArCQkJCXN0cmVycm9yKGVycm5vKSk7Cj4+ PiArCQkJZXhpdChFWElUX0ZBSUxVUkUpOwo+Pj4gKwkJfQo+Pj4gKwl9Cj4+PiArCj4+PiArCWZk ID0gY29uZmlnLT5mZDsKPj4+ICsJZW5naW5lID0gZmluZF9lbmdpbmUoY29uZmlnLT5lbmdpbmUs ICZzZWN1cmUpOwo+Pj4gKwo+Pj4gKwltZW1zZXQob2JqLCAwLCBzaXplb2Yob2JqKSk7Cj4+PiAr CW9ialswXS5oYW5kbGUgPSBnZW1fY3JlYXRlKGZkLCA0MDk2KTsKPj4+ICsJb2JqWzFdLmhhbmRs ZSA9IGdlbV9jcmVhdGUoZmQsIDQwOTYpOwo+Pj4gKwlvYmpbMV0ucmVsb2NzX3B0ciA9IHRvX3Vz ZXJfcG9pbnRlcihyZWxvYyk7Cj4+PiArCW9ialsxXS5yZWxvY2F0aW9uX2NvdW50ID0gMTsKPj4+ ICsKPj4+ICsJYmF0Y2ggPSBnZW1fbW1hcF9fY3B1KGZkLCBvYmpbMV0uaGFuZGxlLCAwLCA0MDk2 LCBQUk9UX1dSSVRFKTsKPj4+ICsJZ2VtX3NldF9kb21haW4oZmQsIG9ialsxXS5oYW5kbGUsCj4+ PiArCQkgICAgICAgSTkxNV9HRU1fRE9NQUlOX0NQVSwgSTkxNV9HRU1fRE9NQUlOX0NQVSk7Cj4+ PiArCj4+PiArCWkgPSAwOwo+Pj4gKwlpZiAodmFsX2luKSB7Cj4+PiArCQliYXRjaFtpKytdID0g TUlfTk9PUDsKPj4+ICsJCWJhdGNoW2krK10gPSBNSV9OT09QOwo+Pj4gKwo+Pj4gKwkJYmF0Y2hb aSsrXSA9IE1JX0xPQURfUkVHSVNURVJfSU1NOwo+Pj4gKwkJYmF0Y2hbaSsrXSA9IHJlZy0+YWRk cjsKPj4+ICsJCWJhdGNoW2krK10gPSAqdmFsX2luOwo+Pj4gKwkJYmF0Y2hbaSsrXSA9IE1JX05P T1A7Cj4+PiArCX0KPj4+ICsKPj4+ICsJYmF0Y2hbaSsrXSA9IDB4MjQgPDwgMjMgfCAoMSArIHI2 NGIpOyAvKiBTUk0gKi8KPj4+ICsJYmF0Y2hbaSsrXSA9IHJlZy0+YWRkcjsKPj4+ICsJcmVsb2Nb MF0udGFyZ2V0X2hhbmRsZSA9IG9ialswXS5oYW5kbGU7Cj4+PiArCXJlbG9jWzBdLnByZXN1bWVk X29mZnNldCA9IG9ialswXS5vZmZzZXQ7Cj4+PiArCXJlbG9jWzBdLm9mZnNldCA9IGkgKiBzaXpl b2YodWludDMyX3QpOwo+Pj4gKwlyZWxvY1swXS5kZWx0YSA9IDA7Cj4+PiArCXJlbG9jWzBdLnJl YWRfZG9tYWlucyA9IEk5MTVfR0VNX0RPTUFJTl9SRU5ERVI7Cj4+PiArCXJlbG9jWzBdLndyaXRl X2RvbWFpbiA9IEk5MTVfR0VNX0RPTUFJTl9SRU5ERVI7Cj4+PiArCWJhdGNoW2krK10gPSByZWxv Y1swXS5kZWx0YTsKPj4+ICsJaWYgKHI2NGIpCj4+PiArCQliYXRjaFtpKytdID0gMDsKPj4+ICsK Pj4+ICsJYmF0Y2hbaSsrXSA9IE1JX0JBVENIX0JVRkZFUl9FTkQ7Cj4+PiArCW11bm1hcChiYXRj aCwgNDA5Nik7Cj4+PiArCj4+PiArCW1lbXNldCgmZXhlY2J1ZiwgMCwgc2l6ZW9mKGV4ZWNidWYp KTsKPj4+ICsJZXhlY2J1Zi5idWZmZXJzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcihvYmopOwo+Pj4g KwlleGVjYnVmLmJ1ZmZlcl9jb3VudCA9IDI7Cj4+PiArCWV4ZWNidWYuZmxhZ3MgPSBnZW1fY2xh c3NfaW5zdGFuY2VfdG9fZWJfZmxhZ3MoZmQsCj4+PiArCQkJCQkJICAgICAgIGVuZ2luZS0+Y2xh c3MsCj4+PiArCQkJCQkJICAgICAgIGVuZ2luZS0+aW5zdGFuY2UpOwo+Pj4gKwlpZiAoc2VjdXJl KQo+Pj4gKwkJZXhlY2J1Zi5mbGFncyB8PSBJOTE1X0VYRUNfU0VDVVJFOwo+Pj4gKwo+Pj4gKwlp ZiAoY29uZmlnLT52ZXJib3NpdHkgPiAwKQo+Pj4gKwkJcHJpbnRmKCIlczogdXNpbmcgJXNwcml2 aWxlZ2VkIGJhdGNoXG4iLAo+Pj4gKwkJICAgICAgIGVuZ2luZS0+bmFtZSwKPj4+ICsJCSAgICAg ICBzZWN1cmUgPyAiIiA6ICJub24tIik7Cj4+PiArCj4+PiArCWV4ZWNidWYucnN2ZDEgPSBjdHg7 Cj4+PiArCWdlbV9leGVjYnVmKGZkLCAmZXhlY2J1Zik7Cj4+PiArCWdlbV9jbG9zZShmZCwgb2Jq WzFdLmhhbmRsZSk7Cj4+PiArCj4+PiArCXIgPSBnZW1fbW1hcF9fY3B1KGZkLCBvYmpbMF0uaGFu ZGxlLCAwLCA0MDk2LCBQUk9UX1JFQUQpOwo+Pj4gKwlnZW1fc2V0X2RvbWFpbihmZCwgb2JqWzBd LmhhbmRsZSwgSTkxNV9HRU1fRE9NQUlOX0NQVSwgMCk7Cj4+PiArCj4+PiArCXZhbCA9IHJbMF07 Cj4+PiArCW11bm1hcChyLCA0MDk2KTsKPj4+ICsKPj4+ICsJZ2VtX2Nsb3NlKGZkLCBvYmpbMF0u aGFuZGxlKTsKPj4+ICsKPj4+ICsJcmV0dXJuIHZhbDsKPj4+ICt9Cj4+PiArCj4+PiAgc3RhdGlj IGludCByZWFkX3JlZ2lzdGVyKHN0cnVjdCBjb25maWcgKmNvbmZpZywgc3RydWN0IHJlZyAqcmVn LCB1aW50MzJfdCAqdmFscCkKPj4+ICB7Cj4+PiAgCXVpbnQzMl90IHZhbCA9IDA7Cj4+PiAgCj4+ PiAgCXN3aXRjaCAocmVnLT5wb3J0X2Rlc2MucG9ydCkgewo+Pj4gIAljYXNlIFBPUlRfTU1JTzoK Pj4+IC0JCXZhbCA9IElOUkVHKHJlZy0+bW1pb19vZmZzZXQgKyByZWctPmFkZHIpOwo+Pj4gKwkJ aWYgKGNvbmZpZy0+ZW5naW5lKQo+Pj4gKwkJCXZhbCA9IHJlZ2lzdGVyX3NybShjb25maWcsIHJl ZywgTlVMTCk7Cj4+PiArCQllbHNlCj4+PiArCQkJdmFsID0gSU5SRUcocmVnLT5tbWlvX29mZnNl dCArIHJlZy0+YWRkcik7Cj4+PiAgCQlicmVhazsKPj4+ICAJY2FzZSBQT1JUX1BPUlRJT19WR0E6 Cj4+PiAgCQlpb3BsKDMpOwo+Pj4gQEAgLTI5OSw3ICs0MzIsMTEgQEAgc3RhdGljIGludCB3cml0 ZV9yZWdpc3RlcihzdHJ1Y3QgY29uZmlnICpjb25maWcsIHN0cnVjdCByZWcgKnJlZywgdWludDMy X3QgdmFsKQo+Pj4gIAo+Pj4gIAlzd2l0Y2ggKHJlZy0+cG9ydF9kZXNjLnBvcnQpIHsKPj4+ICAJ Y2FzZSBQT1JUX01NSU86Cj4+PiAtCQlPVVRSRUcocmVnLT5tbWlvX29mZnNldCArIHJlZy0+YWRk ciwgdmFsKTsKPj4+ICsJCWlmIChjb25maWctPmVuZ2luZSkgewo+Pj4gKwkJCXJlZ2lzdGVyX3Ny bShjb25maWcsIHJlZywgJnZhbCk7Cj4+PiArCQl9IGVsc2Ugewo+Pj4gKwkJCU9VVFJFRyhyZWct Pm1taW9fb2Zmc2V0ICsgcmVnLT5hZGRyLCB2YWwpOwo+Pj4gKwkJfQo+Pj4gIAkJYnJlYWs7Cj4+ PiAgCWNhc2UgUE9SVF9QT1JUSU9fVkdBOgo+Pj4gIAkJaWYgKHZhbCA+IDB4ZmYpIHsKPj4+IEBA IC02NDEsNiArNzc4LDcgQEAgc3RhdGljIGludCBpbnRlbF9yZWdfaGVscChzdHJ1Y3QgY29uZmln ICpjb25maWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCj4+PiAgCXByaW50ZigiIC0tc3BlYz1Q QVRIICAgIFJlYWQgcmVnaXN0ZXIgc3BlYyBmcm9tIGRpcmVjdG9yeSBvciBmaWxlXG4iKTsKPj4+ ICAJcHJpbnRmKCIgLS1tbWlvPUZJTEUgICAgVXNlIGFuIE1NSU8gc25hcHNob3RcbiIpOwo+Pj4g IAlwcmludGYoIiAtLWRldmlkPURFVklEICBTcGVjaWZ5IFBDSSBkZXZpY2UgSUQgZm9yIC0tbW1p bz1GSUxFXG4iKTsKPj4+ICsJcHJpbnRmKCIgLS1lbmdpbmU9Wy1dRU5HSU5FIFVzZSBhIHNwZWNp ZmljIGVuZ2luZSB0byByZWFkL3dyaXRlXG4iKTsKPj4+ICAJcHJpbnRmKCIgLS1hbGwgICAgICAg ICAgRGVjb2RlIHJlZ2lzdGVycyBmb3IgYWxsIGtub3duIHBsYXRmb3Jtc1xuIik7Cj4+PiAgCXBy aW50ZigiIC0tYmluYXJ5ICAgICAgIEJpbmFyeSBkdW1wIHJlZ2lzdGVyc1xuIik7Cj4+PiAgCXBy aW50ZigiIC0tdmVyYm9zZSAgICAgIEluY3JlYXNlIHZlcmJvc2l0eVxuIik7Cj4+PiBAQCAtNzU4 LDYgKzg5Niw3IEBAIGVudW0gb3B0IHsKPj4+ICAJT1BUX0FMTCwKPj4+ICAJT1BUX0JJTkFSWSwK Pj4+ICAJT1BUX1NQRUMsCj4+PiArCU9QVF9FTkdJTkUsCj4+PiAgCU9QVF9WRVJCT1NFLAo+Pj4g IAlPUFRfUVVJRVQsCj4+PiAgCU9QVF9IRUxQLAo+Pj4gQEAgLTc3MSwxMSArOTEwLDEzIEBAIGlu dCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCj4+PiAgCWNvbnN0IHN0cnVjdCBjb21tYW5k ICpjb21tYW5kID0gTlVMTDsKPj4+ICAJc3RydWN0IGNvbmZpZyBjb25maWcgPSB7Cj4+PiAgCQku Y291bnQgPSAxLAo+Pj4gKwkJLmZkID0gLTEsCj4+PiAgCX07Cj4+PiAgCWJvb2wgaGVscCA9IGZh bHNlOwo+Pj4gIAo+Pj4gIAlzdGF0aWMgc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7Cj4+PiAg CQkvKiBnbG9iYWwgb3B0aW9ucyAqLwo+Pj4gKwkJeyAiZW5naW5lIiwJcmVxdWlyZWRfYXJndW1l bnQsCU5VTEwsCU9QVF9FTkdJTkUgfSwKPj4+ICAJCXsgInNwZWMiLAlyZXF1aXJlZF9hcmd1bWVu dCwJTlVMTCwJT1BUX1NQRUMgfSwKPj4+ICAJCXsgInZlcmJvc2UiLAlub19hcmd1bWVudCwJCU5V TEwsCU9QVF9WRVJCT1NFIH0sCj4+PiAgCQl7ICJxdWlldCIsCW5vX2FyZ3VtZW50LAkJTlVMTCwJ T1BUX1FVSUVUIH0sCj4+PiBAQCAtODMwLDYgKzk3MSwxNCBAQCBpbnQgbWFpbihpbnQgYXJnYywg Y2hhciAqYXJndltdKQo+Pj4gIAkJCQlyZXR1cm4gRVhJVF9GQUlMVVJFOwo+Pj4gIAkJCX0KPj4+ ICAJCQlicmVhazsKPj4+ICsJCWNhc2UgT1BUX0VOR0lORToKPj4+ICsJCQljb25maWcuZW5naW5l ID0gc3RyZHVwKG9wdGFyZyk7Cj4+PiArCQkJaWYgKCFjb25maWcuZW5naW5lKSB7Cj4+PiArCQkJ CWZwcmludGYoc3RkZXJyLCAic3RyZHVwOiAlc1xuIiwKPj4+ICsJCQkJCXN0cmVycm9yKGVycm5v KSk7Cj4+PiArCQkJCXJldHVybiBFWElUX0ZBSUxVUkU7Cj4+PiArCQkJfQo+Pj4gKwkJCWJyZWFr Owo+Pj4gIAkJY2FzZSBPUFRfQUxMOgo+Pj4gIAkJCWNvbmZpZy5hbGxfcGxhdGZvcm1zID0gdHJ1 ZTsKPj4+ICAJCQlicmVhazsKPj4+IEBAIC04OTgsNSArMTA0Nyw4IEBAIGludCBtYWluKGludCBh cmdjLCBjaGFyICphcmd2W10pCj4+PiAgCj4+PiAgCWZyZWUoY29uZmlnLm1taW9maWxlKTsKPj4+ ICAKPj4+ICsJaWYgKGNvbmZpZy5mZCA+PSAwKQo+Pj4gKwkJY2xvc2UoY29uZmlnLmZkKTsKPj4+ ICsKPj4+ICAJcmV0dXJuIHJldDsKPj4+ICB9Cj4+Cj4+IC0tIAo+PiBKYW5pIE5pa3VsYSwgSW50 ZWwgT3BlbiBTb3VyY2UgVGVjaG5vbG9neSBDZW50ZXIKCi0tIApKYW5pIE5pa3VsYSwgSW50ZWwg T3BlbiBTb3VyY2UgVGVjaG5vbG9neSBDZW50ZXIKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlz dHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4v bGlzdGluZm8vaW50ZWwtZ2Z4Cg==