From mboxrd@z Thu Jan 1 00:00:00 1970 From: Martin Wilck Subject: Re: [RFC PATCH 5/5] multipathd: RFC add new polling dmevents waiter thread Date: Sat, 10 Feb 2018 20:55:53 +0100 Message-ID: <1518292553.2937.44.camel@suse.com> References: <1518239251-29392-1-git-send-email-bmarzins@redhat.com> <1518239251-29392-6-git-send-email-bmarzins@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1518239251-29392-6-git-send-email-bmarzins@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: dm-devel-bounces@redhat.com Errors-To: dm-devel-bounces@redhat.com To: Benjamin Marzinski , device-mapper development List-Id: dm-devel.ids SGkgQmVuLAoKdGhhbmtzIGEgbG90IGZvciB0aGlzLiBJIGhhdmUgb25seSBhIGZldyBtaW5vciBu aXRwaWNrcyAoc2VlIGJlbG93KS4KSSBzdXBwb3NlIHlvdSd2ZSB0ZXN0ZWQgdGhpcyBhbHJlYWR5 PwoKUmVnYXJkcwpNYXJ0aW4KCk9uIEZyaSwgMjAxOC0wMi0wOSBhdCAyMzowNyAtMDYwMCwgQmVu amFtaW4gTWFyemluc2tpIHdyb3RlOgo+IFRoZSBjdXJyZW50IG1ldGhvZCBvZiB3YWl0aW5nIGZv ciBkbWV2ZW50cyBvbiBtdWx0aXBhdGggZGV2aWNlcwo+IGludm9sdmVzCj4gY3JlYXRpbmcgYSBz ZXBlcmF0ZSB0aHJlYWQgZm9yIGVhY2ggZGV2aWNlLiBUaGlzIGNhbiBiZWNvbWUgdmVyeQo+IHdh c3RlZnVsIHdoZW4gdGhlcmUgYXJlIGxhcmdlIG51bWJlcnMgb2YgbXVsdGlwYXRoIGRldmljZXMu IEFsc28sCj4gc2luY2UKPiBtdWx0aXBhdGhkIG5lZWRzIHRvIGdyYWIgdGhlIHZlY3MgbG9jayB0 byB1cGRhdGUgdGhlIGRldmljZXMsIHRoZQo+IGFkZGl0aW9uYWwgdGhyZWFkcyBkb24ndCBhY3R1 YWxseSBwcm92aWRlIG11Y2ggcGFyYWxsZWxpc20uCj4gCj4gVGhlIHBhdGNoIGFkZHMgYSBuZXcg bWV0aG9kIG9mIHVwZGF0aW5nIG11bHRpcGF0aCBkZXZpY2VzIG9uCj4gZG1ldmVudHMsCj4gd2hp Y2ggdXNlcyB0aGUgbmV3IGRldmljZS1tYXBwZXIgZXZlbnQgcG9sbGluZyBpbnRlcmZhY2UuIFRo aXMgbWVhbnMKPiB0aGF0IHRoZXJlIGlzIG9ubHkgb25lIGRtZXZlbnQgd2FpdGluZyB0aHJlYWQg d2hpY2ggd2lsbCB3YWl0IGZvcgo+IGV2ZW50cwo+IG9uIGFsbCBvZiB0aGUgbXVsdGlwYXRoIGRl dmljZXMuICBDdXJyZW50bHkgdGhlIGNvZGUgdG8gZ2V0IHRoZSBldmVudAo+IG51bWJlciBmcm9t IHRoZSBsaXN0IG9mIGRldmljZSBuYW1lcyBhbmQgdG8gcmUtYXJtIHRoZSBwb2xsaW5nCj4gaW50 ZXJmYWNlCj4gaXMgbm90IGluIGxpYmRldm1hcHBlciwgc28gdGhlIHBhdGNoIGRvZXMgdGhhdCB3 b3JrLiBPYnZpb3VzbHksIHRoZXNlCj4gYml0cyBuZWVkIHRvIGdvIGludG8gbGliZGV2bWFwcGVy LCBzbyB0aGF0IG11bHRpcGF0aGQgY2FuIHVzZSBhCj4gc3RhbmRhcmQKPiBpbnRlcmZhY2UuCj4g Cj4gSSBoYXZlbid0IHRvdWNoZWQgYW55IG9mIHRoZSBleGlzdGluZyBldmVudCB3YWl0aW5nIGNv ZGUsIHNpbmNlIGV2ZW50Cj4gcG9sbGluZyB3YXMgb25seSBhZGRlZCB0byBkZXZpY2UtbWFwcGVy IGluIHZlcnNpb24KPiA0LjM3LjAuICBtdWx0aXBhdGhkCj4gY2hlY2tzIHRoaXMgdmVyc2lvbiwg YW5kIGRlZmF1bHRzIHRvIHVzaW5nIHRoZSBwb2xsaW5nIGNvZGUgaWYKPiBkZXZpY2UtbWFwcGVy IHN1cHBvcnRzIGl0LiBUaGlzIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHJ1bm5pbmcKPiBtdWx0aXBh dGhkCj4gd2l0aCAiLXciLCB0byBmb3JjZSBpdCB0byB1c2UgdGhlIG9sZCBldmVudCB3YWl0aW5n IGNvZGUuCgpXaHkgdXNlIGEgY29tbWFuZCBsaW5lIG9wdGlvbiBoZXJlIHJhdGhlciB0aGFuIGEg Y29uZmlnIGZpbGUgb3B0aW9uPwoKPiAKPiBTaWduZWQtb2ZmLWJ5OiBCZW5qYW1pbiBNYXJ6aW5z a2kgPGJtYXJ6aW5zQHJlZGhhdC5jb20+Cj4gLS0tCj4gIG11bHRpcGF0aGQvTWFrZWZpbGUgICB8 ICAgMyArLQo+ICBtdWx0aXBhdGhkL2RtZXZlbnRzLmMgfCAzOTYKPiArKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICBtdWx0aXBhdGhkL2RtZXZlbnRz LmggfCAgMTMgKysKPiAgbXVsdGlwYXRoZC9tYWluLmMgICAgIHwgIDU4ICsrKysrKystCj4gIDQg ZmlsZXMgY2hhbmdlZCwgNDYxIGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCj4gIGNyZWF0 ZSBtb2RlIDEwMDY0NCBtdWx0aXBhdGhkL2RtZXZlbnRzLmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0 IG11bHRpcGF0aGQvZG1ldmVudHMuaAo+IAo+IGRpZmYgLS1naXQgYS9tdWx0aXBhdGhkL01ha2Vm aWxlIGIvbXVsdGlwYXRoZC9NYWtlZmlsZQo+IGluZGV4IDg1ZjI5YTcuLjRjNDM4ZjAgMTAwNjQ0 Cj4gLS0tIGEvbXVsdGlwYXRoZC9NYWtlZmlsZQo+ICsrKyBiL211bHRpcGF0aGQvTWFrZWZpbGUK PiBAQCAtMjIsNyArMjIsOCBAQCBpZmRlZiBTWVNURU1ECj4gIAllbmRpZgo+ICBlbmRpZgo+ICAK PiAtT0JKUyA9IG1haW4ubyBwaWRmaWxlLm8gdXhsc25yLm8gdXhjbG50Lm8gY2xpLm8gY2xpX2hh bmRsZXJzLm8KPiB3YWl0ZXIubwo+ICtPQkpTID0gbWFpbi5vIHBpZGZpbGUubyB1eGxzbnIubyB1 eGNsbnQubyBjbGkubyBjbGlfaGFuZGxlcnMubwo+IHdhaXRlci5vIFwKPiArICAgICAgIGRtZXZl bnRzLm8KPiAgCj4gIEVYRUMgPSBtdWx0aXBhdGhkCj4gIAo+IGRpZmYgLS1naXQgYS9tdWx0aXBh dGhkL2RtZXZlbnRzLmMgYi9tdWx0aXBhdGhkL2RtZXZlbnRzLmMKPiBuZXcgZmlsZSBtb2RlIDEw MDY0NAo+IGluZGV4IDAwMDAwMDAuLmE1NmMwNTUKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvbXVs dGlwYXRoZC9kbWV2ZW50cy5jCj4gQEAgLTAsMCArMSwzOTYgQEAKPiArLyoKPiArICogQ29weXJp Z2h0IChjKSAyMDA0LCAyMDA1IENocmlzdG9waGUgVmFyb3F1aQo+ICsgKiBDb3B5cmlnaHQgKGMp IDIwMDUgS2l5b3NoaSBVZWRhLCBORUMKPiArICogQ29weXJpZ2h0IChjKSAyMDA1IEVkd2FyZCBH b2dnaW4sIEVNQwo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTggQmVuamFtaW4gTWFyemlu c2tpLCBSZWRoYXQKPiArICovCj4gKyNpbmNsdWRlIDx1bmlzdGQuaD4KPiArI2luY2x1ZGUgPGxp YmRldm1hcHBlci5oPgo+ICsjaW5jbHVkZSA8c3lzL21tYW4uaD4KPiArI2luY2x1ZGUgPHB0aHJl YWQuaD4KPiArI2luY2x1ZGUgPHVyY3UuaD4KPiArI2luY2x1ZGUgPHBvbGwuaD4KPiArI2luY2x1 ZGUgPHN5cy9pb2N0bC5oPgo+ICsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Cj4gKyNpbmNsdWRlIDxz eXMvc3RhdC5oPgo+ICsjaW5jbHVkZSA8ZmNudGwuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2RtLWlv Y3RsLmg+Cj4gKyNpbmNsdWRlIDxlcnJuby5oPgo+ICsKPiArI2luY2x1ZGUgInZlY3Rvci5oIgo+ ICsjaW5jbHVkZSAic3RydWN0cy5oIgo+ICsjaW5jbHVkZSAic3RydWN0c192ZWMuaCIKPiArI2lu Y2x1ZGUgImRldm1hcHBlci5oIgo+ICsjaW5jbHVkZSAiZGVidWcuaCIKPiArI2luY2x1ZGUgImRt ZXZlbnRzLmgiCj4gKwo+ICsjaWZuZGVmIERNX0RFVl9BUk1fUE9MTAo+ICsjZGVmaW5lIERNX0RF Vl9BUk1fUE9MTCBfSU9XUihETV9JT0NUTCwgRE1fREVWX1NFVF9HRU9NRVRSWV9DTUQgKyAxLAo+ IHN0cnVjdCBkbV9pb2N0bCkKPiArI2VuZGlmCj4gKwo+ICtlbnVtIGV2ZW50X2FjdGlvbnMgewo+ ICsJRVZFTlRfTk9USElORywKPiArCUVWRU5UX1JFTU9WRSwKPiArCUVWRU5UX1VQREFURSwKPiAr fTsKPiArCj4gK3N0cnVjdCBkZXZfZXZlbnQgewo+ICsJY2hhciBuYW1lW1dXSURfU0laRV07Cj4g Kwl1aW50MzJfdCBldnRfbnI7Cj4gKwllbnVtIGV2ZW50X2FjdGlvbnMgYWN0aW9uOwo+ICt9Owo+ ICsKPiArc3RydWN0IGRtZXZlbnRfd2FpdGVyIHsKPiArCWludCBmZDsKPiArCXN0cnVjdCB2ZWN0 b3JzICp2ZWNzOwo+ICsJdmVjdG9yIGV2ZW50czsKPiArCXB0aHJlYWRfbXV0ZXhfdCBldmVudHNf bG9jazsKPiArfTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgZG1ldmVudF93YWl0ZXIgKndhaXRlcjsK PiArCj4gK2ludCBkbWV2ZW50X3BvbGxfc3VwcG9ydGVkKHZvaWQpCj4gK3sKPiArCXVuc2lnbmVk IGludCBtaW52WzNdID0gezQsIDM3LCAwfTsKPiArCXVuc2lnbmVkIGludCB2WzNdOwo+ICsKPiAr CWlmIChkbV9kcnZfdmVyc2lvbih2KSkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwlpZiAoVkVSU0lP Tl9HRSh2LCBtaW52KSkKPiArCQlyZXR1cm4gMTsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICsK PiAraW50IGFsbG9jX2RtZXZlbnRfd2FpdGVyKHN0cnVjdCB2ZWN0b3JzICp2ZWNzKQo+ICt7Cj4g KwlpZiAoIXZlY3MpIHsKPiArCQljb25kbG9nKDAsICJjYW4ndCBjcmVhdGUgd2FpdGVyIHN0cnVj dHVyZS4gaW52YWxpZAo+IHZlY3RvcnMiKTsKPiArCQlnb3RvIGZhaWw7Cj4gKwl9Cj4gKwl3YWl0 ZXIgPSAoc3RydWN0IGRtZXZlbnRfd2FpdGVyICopbWFsbG9jKHNpemVvZihzdHJ1Y3QKPiBkbWV2 ZW50X3dhaXRlcikpOwo+ICsJaWYgKCF3YWl0ZXIpIHsKPiArCQljb25kbG9nKDAsICJmYWlsZWQg dG8gYWxsb2NhdGUgd2FpdGVyIHN0cnVjdHVyZSIpOwo+ICsJCWdvdG8gZmFpbDsKPiArCX0KPiAr CW1lbXNldCh3YWl0ZXIsIDAsIHNpemVvZihzdHJ1Y3QgZG1ldmVudF93YWl0ZXIpKTsKPiArCXdh aXRlci0+ZXZlbnRzID0gdmVjdG9yX2FsbG9jKCk7Cj4gKwlpZiAoIXdhaXRlci0+ZXZlbnRzKSB7 Cj4gKwkJY29uZGxvZygwLCAiZmFpbGVkIHRvIGFsbG9jYXRlIHdhaXRlciBldmVudHMKPiB2ZWN0 b3IiKTsKPiArCQlnb3RvIGZhaWxfd2FpdGVyOwo+ICsJfQo+ICsJd2FpdGVyLT5mZCA9IG9wZW4o Ii9kZXYvbWFwcGVyL2NvbnRyb2wiLCBPX1JEV1IpOwo+ICsJaWYgKHdhaXRlci0+ZmQgPCAwKSB7 Cj4gKwkJY29uZGxvZygwLCAiZmFpbGVkIHRvIG9wZW4gL2Rldi9tYXBwZXIvY29udHJvbCBmb3IK PiB3YWl0ZXIiKTsKPiArCQlnb3RvIGZhaWxfZXZlbnRzOwo+ICsJfQo+ICsJcHRocmVhZF9tdXRl eF9pbml0KCZ3YWl0ZXItPmV2ZW50c19sb2NrLCBOVUxMKTsKPiArCXdhaXRlci0+dmVjcyA9IHZl Y3M7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK2ZhaWxfZXZlbnRzOgo+ICsJdmVjdG9yX2ZyZWUod2Fp dGVyLT5ldmVudHMpOwo+ICtmYWlsX3dhaXRlcjoKPiArCWZyZWUod2FpdGVyKTsKPiArZmFpbDoK PiArCXdhaXRlciA9IE5VTEw7Cj4gKwlyZXR1cm4gLTE7Cj4gK30KCk5pdHBpY2s6IGNvbnZlbnRp b25hbGx5LCBhbiAiYWxsb2MiLXR5cGUgZnVuY3Rpb24gd291bGQgcmV0dXJuIHRoZQpwb2ludGVy LCBhbmQgTlVMTCBvbiBmYWlsdXJlLgoKPiArCj4gK3ZvaWQgZnJlZV9kbWV2ZW50X3dhaXRlcih2 b2lkKQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2X2V2ZW50ICpkZXZfZXZ0Owo+ICsJaW50IGk7Cj4gKwo+ ICsJaWYgKCF3YWl0ZXIpCj4gKwkJcmV0dXJuOwo+ICsJcHRocmVhZF9tdXRleF9kZXN0cm95KCZ3 YWl0ZXItPmV2ZW50c19sb2NrKTsKPiArCWNsb3NlKHdhaXRlci0+ZmQpOwo+ICsJdmVjdG9yX2Zv cmVhY2hfc2xvdCh3YWl0ZXItPmV2ZW50cywgZGV2X2V2dCwgaSkKPiArCQlmcmVlKGRldl9ldnQp Owo+ICsJdmVjdG9yX2ZyZWUod2FpdGVyLT5ldmVudHMpOwo+ICsJZnJlZSh3YWl0ZXIpOwo+ICsJ d2FpdGVyID0gTlVMTDsKPiArfQoKTml0cGljazogU2ltaWxhcmx5LCBhICJmcmVlIiBmdW5jdGlv biB0eXBpY2FsbHkgdGFrZXMgdGhlIHBvaW50ZXIgdG8gYmUKZnJlZWQgYXMgYXJndW1lbnQuIAoK PiArCj4gK3N0YXRpYyBpbnQgYXJtX2RtX2V2ZW50X3BvbGwoaW50IGZkKQo+ICt7Cj4gKwlzdHJ1 Y3QgZG1faW9jdGwgZG1pOwo+ICsJbWVtc2V0KCZkbWksIDAsIHNpemVvZihkbWkpKTsKPiArCWRt aS52ZXJzaW9uWzBdID0gRE1fVkVSU0lPTl9NQUpPUjsKPiArCWRtaS52ZXJzaW9uWzFdID0gRE1f VkVSU0lPTl9NSU5PUjsKPiArCWRtaS52ZXJzaW9uWzJdID0gRE1fVkVSU0lPTl9QQVRDSExFVkVM Owo+ICsJZG1pLmZsYWdzID0gMHg0OwoKV2hhdCdzIHRoZSBtZWFuaW5nIG9mIHRoaXMgZmxhZz8g SSBjb3VsZG4ndCBmaW5kIGl0IGluIGRtLWlvY3RsLmgKCj4gKwlkbWkuZGF0YV9zdGFydCA9IG9m ZnNldG9mKHN0cnVjdCBkbV9pb2N0bCwgZGF0YSk7Cj4gKwlkbWkuZGF0YV9zaXplID0gc2l6ZW9m KGRtaSk7Cj4gKwlyZXR1cm4gaW9jdGwoZmQsIERNX0RFVl9BUk1fUE9MTCwgJmRtaSk7Cj4gK30K PiArCj4gKy8qCj4gKyAqIEFzIG9mIHZlcnNpb24gNC4zNy4wIGRldmljZS1tYXBwZXIgc3RvcmVz IHRoZSBldmVudCBudW1iZXIgaW4gdGhlCj4gKyAqIGRtX25hbWVzIHN0cnVjdHVyZSBhZnRlciB0 aGUgbmFtZSwgd2hlbiBETV9ERVZJQ0VfTElTVCBpcyBjYWxsZWQKPiArICovCj4gK3N0YXRpYyB1 aW50MzJfdCBkbV9ldmVudF9ucihzdHJ1Y3QgZG1fbmFtZXMgKm4pCj4gK3sKPiArCXJldHVybiAq KHVpbnQzMl90ICopKCgodWludHB0cl90KShzdHJjaHIobi0+bmFtZSwgMCkgKyAxKSArCj4gNykg JiB+Nyk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZG1fZ2V0X2V2ZW50cyh2b2lkKQo+ICt7Cj4g KwlzdHJ1Y3QgZG1fdGFzayAqZG10Owo+ICsJc3RydWN0IGRtX25hbWVzICpuYW1lczsKPiArCXN0 cnVjdCBkZXZfZXZlbnQgKmRldl9ldnQ7Cj4gKwlpbnQgaTsKPiArCj4gKwlpZiAoIShkbXQgPSBs aWJtcF9kbV90YXNrX2NyZWF0ZShETV9ERVZJQ0VfTElTVCkpKQo+ICsJCXJldHVybiAtMTsKPiAr Cj4gKwlkbV90YXNrX25vX29wZW5fY291bnQoZG10KTsKPiArCj4gKwlpZiAoIWRtX3Rhc2tfcnVu KGRtdCkpCj4gKwkJZ290byBmYWlsOwo+ICsKPiArCWlmICghKG5hbWVzID0gZG1fdGFza19nZXRf bmFtZXMoZG10KSkpCj4gKwkJZ290byBmYWlsOwo+ICsKPiArCXB0aHJlYWRfbXV0ZXhfbG9jaygm d2FpdGVyLT5ldmVudHNfbG9jayk7Cj4gKwl2ZWN0b3JfZm9yZWFjaF9zbG90KHdhaXRlci0+ZXZl bnRzLCBkZXZfZXZ0LCBpKQo+ICsJCWRldl9ldnQtPmFjdGlvbiA9IEVWRU5UX1JFTU9WRTsKPiAr CXdoaWxlIChuYW1lcy0+ZGV2KSB7Cj4gKwkJdWludDMyX3QgZXZlbnRfbnI7Cj4gKwo+ICsJCWlm ICghZG1faXNfbXBhdGgobmFtZXMtPm5hbWUpKQo+ICsJCQlnb3RvIG5leHQ7Cj4gKwo+ICsJCWV2 ZW50X25yID0gZG1fZXZlbnRfbnIobmFtZXMpOwo+ICsJCXZlY3Rvcl9mb3JlYWNoX3Nsb3Qod2Fp dGVyLT5ldmVudHMsIGRldl9ldnQsIGkpIHsKPiArCQkJaWYgKCFzdHJjbXAoZGV2X2V2dC0+bmFt ZSwgbmFtZXMtPm5hbWUpKSB7Cj4gKwkJCQlpZiAoZXZlbnRfbnIgIT0gZGV2X2V2dC0+ZXZ0X25y KSB7Cj4gKwkJCQkJZGV2X2V2dC0+ZXZ0X25yID0gZXZlbnRfbnI7Cj4gKwkJCQkJZGV2X2V2dC0+ YWN0aW9uID0KPiBFVkVOVF9VUERBVEU7Cj4gKwkJCQl9IGVsc2UKPiArCQkJCQlkZXZfZXZ0LT5h Y3Rpb24gPQo+IEVWRU5UX05PVEhJTkc7Cj4gKwkJCQlicmVhazsKPiArCQkJfQo+ICsJCX0KPiAr bmV4dDoKPiArCQlpZiAoIW5hbWVzLT5uZXh0KQo+ICsJCQlicmVhazsKPiArCQluYW1lcyA9ICh2 b2lkICopbmFtZXMgKyBuYW1lcy0+bmV4dDsKPiArCX0KPiArCXB0aHJlYWRfbXV0ZXhfdW5sb2Nr KCZ3YWl0ZXItPmV2ZW50c19sb2NrKTsKPiArCWRtX3Rhc2tfZGVzdHJveShkbXQpOwo+ICsJcmV0 dXJuIDA7Cj4gKwo+ICtmYWlsOgo+ICsJZG1fdGFza19kZXN0cm95KGRtdCk7Cj4gKwlyZXR1cm4g LTE7Cj4gK30KPiArCj4gKy8qIFlvdSBtdXN0IGNhbGwgdXBkYXRlX211bHRpcGF0aCgpIGFmdGVy IGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgdG8KPiArICogZGVhbCB3aXRoIGFueSBldmVudHMgdGhh dCBjYW1lIGluIGJlZm9yZSB0aGUgZGV2aWNlIHdhcyBhZGRlZCAqLwo+ICtpbnQgd2F0Y2hfZG1l dmVudHMoY2hhciAqbmFtZSkKPiArewo+ICsJaW50IGV2ZW50X25yOwo+ICsJc3RydWN0IGRldl9l dmVudCAqZGV2X2V2dCwgKm9sZF9kZXZfZXZ0Owo+ICsJaW50IGk7Cj4gKwo+ICsJaWYgKCFkbV9p c19tcGF0aChuYW1lKSkgewo+ICsJCWNvbmRsb2coMCwgIiVzOiBub3QgYSBtdWx0aXBhdGggZGV2 aWNlLiBjYW4ndCB3YXRjaAo+IGV2ZW50cyIsCj4gKwkJCW5hbWUpOwo+ICsJCXJldHVybiAtMTsK PiArCX0KPiArCj4gKwlpZiAoKGV2ZW50X25yID0gZG1fZ2V0ZXZlbnRucihuYW1lKSkgPCAwKQo+ ICsJCXJldHVybiAtMTsKPiArCj4gKwlkZXZfZXZ0ID0gKHN0cnVjdCBkZXZfZXZlbnQgKiltYWxs b2Moc2l6ZW9mKHN0cnVjdAo+IGRldl9ldmVudCkpOwo+ICsJaWYgKCFkZXZfZXZ0KSB7Cj4gKwkJ Y29uZGxvZygwLCAiJXM6IGNhbid0IGFsbG9jYXRlIGV2ZW50IHdhaXRlcgo+IHN0cnVjdHVyZSIs IG5hbWUpOwo+ICsJCXJldHVybiAtMTsKPiArCX0KPiArCj4gKwlzdHJuY3B5KGRldl9ldnQtPm5h bWUsIG5hbWUsIFdXSURfU0laRSk7Cj4gKwlkZXZfZXZ0LT5uYW1lW1dXSURfU0laRSAtIDFdID0g MDsKCk5pdHBpY2s6IEl0IG1pZ2h0IGJlIGJldHRlciB0byB1c2Ugc3RybGNweSBvciBzbnByaW50 ZiBoZXJlLgoKPiArCWRldl9ldnQtPmV2dF9uciA9IGV2ZW50X25yOwo+ICsJZGV2X2V2dC0+YWN0 aW9uID0gRVZFTlRfTk9USElORzsKPiArCj4gKwlwdGhyZWFkX211dGV4X2xvY2soJndhaXRlci0+ ZXZlbnRzX2xvY2spOwo+ICsJdmVjdG9yX2ZvcmVhY2hfc2xvdCh3YWl0ZXItPmV2ZW50cywgb2xk X2Rldl9ldnQsIGkpewo+ICsJCWlmICghc3RyY21wKGRldl9ldnQtPm5hbWUsIG9sZF9kZXZfZXZ0 LT5uYW1lKSkgewo+ICsJCQkvKiBjYWxsZXIgd2lsbCBiZSB1cGRhdGluZyB0aGlzIGRldmljZSAq Lwo+ICsJCQlvbGRfZGV2X2V2dC0+ZXZ0X25yID0gZXZlbnRfbnI7Cj4gKwkJCW9sZF9kZXZfZXZ0 LT5hY3Rpb24gPSBFVkVOVF9OT1RISU5HOwo+ICsJCQlwdGhyZWFkX211dGV4X3VubG9jaygmd2Fp dGVyLT5ldmVudHNfbG9jayk7Cj4gKwkJCWNvbmRsb2coMiwgIiVzOiBhbHJlYWR5IHdhaXRpbmcg Zm9yIGV2ZW50cwo+IG9uIGRldmljZSIsCj4gKwkJCQluYW1lKTsKPiArCQkJZnJlZShkZXZfZXZ0 KTsKPiArCQkJcmV0dXJuIDA7Cj4gKwkJfQo+ICsJfQo+ICsJaWYgKCF2ZWN0b3JfYWxsb2Nfc2xv dCh3YWl0ZXItPmV2ZW50cykpIHsKPiArCQlwdGhyZWFkX211dGV4X3VubG9jaygmd2FpdGVyLT5l dmVudHNfbG9jayk7Cj4gKwkJZnJlZShkZXZfZXZ0KTsKPiArCQlyZXR1cm4gLTE7Cj4gKwl9Cj4g Kwl2ZWN0b3Jfc2V0X3Nsb3Qod2FpdGVyLT5ldmVudHMsIGRldl9ldnQpOwo+ICsJcHRocmVhZF9t dXRleF91bmxvY2soJndhaXRlci0+ZXZlbnRzX2xvY2spOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiAr Cj4gK3ZvaWQgdW53YXRjaF9hbGxfZG1ldmVudHModm9pZCkKPiArewo+ICsJc3RydWN0IGRldl9l dmVudCAqZGV2X2V2dDsKPiArCWludCBpOwo+ICsKPiArCXB0aHJlYWRfbXV0ZXhfbG9jaygmd2Fp dGVyLT5ldmVudHNfbG9jayk7Cj4gKwl2ZWN0b3JfZm9yZWFjaF9zbG90KHdhaXRlci0+ZXZlbnRz LCBkZXZfZXZ0LCBpKQo+ICsJCWZyZWUoZGV2X2V2dCk7Cj4gKwl2ZWN0b3JfcmVzZXQod2FpdGVy LT5ldmVudHMpOwo+ICsJcHRocmVhZF9tdXRleF91bmxvY2soJndhaXRlci0+ZXZlbnRzX2xvY2sp Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB1bndhdGNoX2RtZXZlbnRzKGNoYXIgKm5hbWUpCj4g K3sKPiArCXN0cnVjdCBkZXZfZXZlbnQgKmRldl9ldnQ7Cj4gKwlpbnQgaTsKPiArCj4gKwlwdGhy ZWFkX211dGV4X2xvY2soJndhaXRlci0+ZXZlbnRzX2xvY2spOwo+ICsJdmVjdG9yX2ZvcmVhY2hf c2xvdCh3YWl0ZXItPmV2ZW50cywgZGV2X2V2dCwgaSkgewo+ICsJCWlmICghc3RyY21wKGRldl9l dnQtPm5hbWUsIG5hbWUpKSB7Cj4gKwkJCXZlY3Rvcl9kZWxfc2xvdCh3YWl0ZXItPmV2ZW50cywg aSk7Cj4gKwkJCWZyZWUoZGV2X2V2dCk7Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiArCX0KPiArCXB0 aHJlYWRfbXV0ZXhfdW5sb2NrKCZ3YWl0ZXItPmV2ZW50c19sb2NrKTsKPiArfQo+ICsKPiArLyoK PiArICogcmV0dXJucyB0aGUgcmVzY2hlZHVsZSBkZWxheQo+ICsgKiBuZWdhdGl2ZSBtZWFucyAq c3RvcCoKPiArICovCj4gKwo+ICsvKiBwb2xsLCBhcm0sIHVwZGF0ZSwgcmV0dXJuICovCj4gK3N0 YXRpYyBpbnQgZG1ldmVudF9sb29wICh2b2lkKQo+ICt7Cj4gKwlpbnQgciwgaSA9IDA7Cj4gKwlz dHJ1Y3QgcG9sbGZkIHBmZDsKPiArCXN0cnVjdCBkZXZfZXZlbnQgKmRldl9ldnQ7Cj4gKwo+ICsJ cGZkLmZkID0gd2FpdGVyLT5mZDsKPiArCXBmZC5ldmVudHMgPSBQT0xMSU47Cj4gKwlyID0gcG9s bCgmcGZkLCAxLCAtMSk7Cj4gKwlpZiAociA8PSAwKSB7Cj4gKwkJY29uZGxvZygwLCAiZmFpbGVk IHBvbGxpbmcgZm9yIGRtIGV2ZW50czogJXMiLAo+IHN0cmVycm9yKGVycm5vKSk7Cj4gKwkJLyog c2xlZXAgMXMgYW5kIGhvcGUgdGhpbmdzIGdldCBiZXR0ZXIgKi8KPiArCQlyZXR1cm4gMTsKPiAr CX0KPiArCj4gKwlpZiAoYXJtX2RtX2V2ZW50X3BvbGwod2FpdGVyLT5mZCkgIT0gMCkgewo+ICsJ CWNvbmRsb2coMCwgIkNhbm5vdCByZS1hcm0gZXZlbnQgcG9sbGluZzogJXMiLAo+IHN0cmVycm9y KGVycm5vKSk7Cj4gKwkJLyogc2xlZXAgMXMgYW5kIGhvcGUgdGhpbmdzIGdldCBiZXR0ZXIgKi8K PiArCQlyZXR1cm4gMTsKPiArCX0KPiArCj4gKwlpZiAoZG1fZ2V0X2V2ZW50cygpICE9IDApIHsK PiArCQljb25kbG9nKDAsICJmYWlsZWQgZ2V0dGluZyBkbSBldmVudHM6ICVzIiwKPiBzdHJlcnJv cihlcnJubykpOwo+ICsJCS8qIHNsZWVwIDFzIGFuZCBob3BlIHRoaW5ncyBnZXQgYmV0dGVyICov Cj4gKwkJcmV0dXJuIDE7Cj4gKwl9Cj4gKwo+ICsJLyoKPiArCSAqIHVwb24gZXZlbnQgLi4uCj4g KwkgKi8KPiArCj4gKwl3aGlsZSAoMSkgewo+ICsJCWludCBkb25lID0gMTsKPiArCQlzdHJ1Y3Qg ZGV2X2V2ZW50IGN1cnJfZGV2Owo+ICsJCXN0cnVjdCBtdWx0aXBhdGggKm1wcDsKPiArCj4gKwkJ cHRocmVhZF9tdXRleF9sb2NrKCZ3YWl0ZXItPmV2ZW50c19sb2NrKTsKPiArCQl2ZWN0b3JfZm9y ZWFjaF9zbG90KHdhaXRlci0+ZXZlbnRzLCBkZXZfZXZ0LCBpKSB7Cj4gKwkJCWlmIChkZXZfZXZ0 LT5hY3Rpb24gIT0gRVZFTlRfTk9USElORykgewo+ICsJCQkJY3Vycl9kZXYgPSAqZGV2X2V2dDsK PiArCQkJCWlmIChkZXZfZXZ0LT5hY3Rpb24gPT0gRVZFTlRfUkVNT1ZFKQo+IHsKPiArCQkJCQl2 ZWN0b3JfZGVsX3Nsb3Qod2FpdGVyLQo+ID5ldmVudHMsIGkpOwo+ICsJCQkJCWZyZWUoZGV2X2V2 dCk7Cj4gKwkJCQl9IGVsc2UKPiArCQkJCQlkZXZfZXZ0LT5hY3Rpb24gPQo+IEVWRU5UX05PVEhJ Tkc7Cj4gKwkJCQlkb25lID0gMDsKPiArCQkJCWJyZWFrOwo+ICsJCQl9Cj4gKwkJfQo+ICsJCXB0 aHJlYWRfbXV0ZXhfdW5sb2NrKCZ3YWl0ZXItPmV2ZW50c19sb2NrKTsKPiArCQlpZiAoZG9uZSkK PiArCQkJcmV0dXJuIDE7Cj4gKwo+ICsJCWNvbmRsb2coMywgIiVzOiBkZXZtYXAgZXZlbnQgIyVp IiwgY3Vycl9kZXYubmFtZSwKPiArCQkJY3Vycl9kZXYuZXZ0X25yKTsKPiArCj4gKwkJLyoKPiAr CQkgKiBldmVudCBtaWdodCBiZSA6Cj4gKwkJICoKPiArCQkgKiAxKSBhIHRhYmxlIHJlbG9hZCwg d2hpY2ggbWVhbnMgb3VyIG1wcCBzdHJ1Y3R1cmUKPiBpcwo+ICsJCSAqICAgIG9ic29sZXRlIDog cmVmcmVzaCBpdCB0aHJvdWdoCj4gdXBkYXRlX211bHRpcGF0aCgpCj4gKwkJICogMikgYSBwYXRo IGZhaWxlZCBieSBETSA6IG1hcmsgYXMgc3VjaCB0aHJvdWdoCj4gKwkJICogICAgdXBkYXRlX211 bHRpcGF0aCgpCj4gKwkJICogMykgbWFwIGhhcyBnb25lIGF3YXkgOiBzdG9wIHRoZSB0aHJlYWQu Cj4gKwkJICogNCkgYSBwYXRoIHJlaW5zdGF0ZSA6IG5vdGhpbmcgdG8gZG8KPiArCQkgKiA1KSBh IHN3aXRjaCBncm91cCA6IG5vdGhpbmcgdG8gZG8KPiArCQkgKi8KPiArCQlwdGhyZWFkX2NsZWFu dXBfcHVzaChjbGVhbnVwX2xvY2ssICZ3YWl0ZXItPnZlY3MtCj4gPmxvY2spOwo+ICsJCWxvY2so JndhaXRlci0+dmVjcy0+bG9jayk7Cj4gKwkJcHRocmVhZF90ZXN0Y2FuY2VsKCk7Cj4gKwkJciA9 IDA7Cj4gKwkJaWYgKGN1cnJfZGV2LmFjdGlvbiA9PSBFVkVOVF9SRU1PVkUpIHsKPiArCQkJbXBw ID0gZmluZF9tcF9ieV9hbGlhcyh3YWl0ZXItPnZlY3MtPm1wdmVjLAo+ICsJCQkJCSAgICAgICBj dXJyX2Rldi5uYW1lKTsKPiArCQkJaWYgKG1wcCkKPiArCQkJCXJlbW92ZV9tYXAobXBwLCB3YWl0 ZXItPnZlY3MsIDEpOwo+ICsJCX0gZWxzZQo+ICsJCQlyID0gdXBkYXRlX211bHRpcGF0aCh3YWl0 ZXItPnZlY3MsCj4gY3Vycl9kZXYubmFtZSwgMSk7Cj4gKwkJbG9ja19jbGVhbnVwX3BvcCgmd2Fp dGVyLT52ZWNzLT5sb2NrKTsKPiArCj4gKwkJaWYgKHIpIHsKPiArCQkJY29uZGxvZygyLCAiJXM6 IHN0b3BwZWQgd2F0Y2hpbmcgZG1ldmVudHMiLAo+ICsJCQkJY3Vycl9kZXYubmFtZSk7Cj4gKwkJ CXVud2F0Y2hfZG1ldmVudHMoY3Vycl9kZXYubmFtZSk7Cj4gKwkJfQo+ICsJfQo+ICsJY29uZGxv ZygwLCAiZG1ldmVudCB3YWl0ZXIgdGhyZWFkIHVuZXhwZWN0ZWRseSBxdWl0Iik7Cj4gKwlyZXR1 cm4gLTE7IC8qIG5ldmVyIHJlYWNoIHRoZXJlICovCj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHJj dV91bnJlZ2lzdGVyKHZvaWQgKnBhcmFtKQo+ICt7Cj4gKwlyY3VfdW5yZWdpc3Rlcl90aHJlYWQo KTsKPiArfQo+ICsKPiArdm9pZCAqd2FpdF9kbWV2ZW50cyAodm9pZCAqdW51c2VkKQo+ICt7Cj4g KwlpbnQgcjsKPiArCj4gKwo+ICsJaWYgKCF3YWl0ZXIpIHsKPiArCQljb25kbG9nKDAsICJkbWV2 ZW50cyB3YWl0ZXIgbm90IGludGlhbGl6ZWQiKTsKPiArCQlyZXR1cm4gTlVMTDsKPiArCX0KPiAr Cj4gKwlwdGhyZWFkX2NsZWFudXBfcHVzaChyY3VfdW5yZWdpc3RlciwgTlVMTCk7Cj4gKwlyY3Vf cmVnaXN0ZXJfdGhyZWFkKCk7Cj4gKwltbG9ja2FsbChNQ0xfQ1VSUkVOVCB8IE1DTF9GVVRVUkUp Owo+ICsKPiArCXdoaWxlICgxKSB7Cj4gKwkJciA9IGRtZXZlbnRfbG9vcCgpOwo+ICsKPiArCQlp ZiAociA8IDApCj4gKwkJCWJyZWFrOwo+ICsKPiArCQlzbGVlcChyKTsKPiArCX0KPiArCj4gKwlw dGhyZWFkX2NsZWFudXBfcG9wKDEpOwo+ICsJcmV0dXJuIE5VTEw7Cj4gK30KPiBkaWZmIC0tZ2l0 IGEvbXVsdGlwYXRoZC9kbWV2ZW50cy5oIGIvbXVsdGlwYXRoZC9kbWV2ZW50cy5oCj4gbmV3IGZp bGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi41NjllODU1Cj4gLS0tIC9kZXYvbnVsbAo+ ICsrKyBiL211bHRpcGF0aGQvZG1ldmVudHMuaAo+IEBAIC0wLDAgKzEsMTMgQEAKPiArI2lmbmRl ZiBfRE1FVkVOVFNfSAo+ICsjZGVmaW5lIF9ETUVWRU5UU19ICj4gKwo+ICsjaW5jbHVkZSAic3Ry dWN0c192ZWMuaCIKPiArCj4gK2ludCBkbWV2ZW50X3BvbGxfc3VwcG9ydGVkKHZvaWQpOwo+ICtp bnQgYWxsb2NfZG1ldmVudF93YWl0ZXIoc3RydWN0IHZlY3RvcnMgKnZlY3MpOwo+ICt2b2lkIGZy ZWVfZG1ldmVudF93YWl0ZXIodm9pZCk7Cj4gK2ludCB3YXRjaF9kbWV2ZW50cyhjaGFyICpuYW1l KTsKPiArdm9pZCB1bndhdGNoX2FsbF9kbWV2ZW50cyh2b2lkKTsKPiArdm9pZCAqd2FpdF9kbWV2 ZW50cyAodm9pZCAqdW51c2VkKTsKPiArCj4gKyNlbmRpZiAvKiBfRE1FVkVOVFNfSCAqLwo+IGRp ZmYgLS1naXQgYS9tdWx0aXBhdGhkL21haW4uYyBiL211bHRpcGF0aGQvbWFpbi5jCj4gaW5kZXgg Mjk2M2JkZS4uNmRhYmYyYyAxMDA2NDQKPiAtLS0gYS9tdWx0aXBhdGhkL21haW4uYwo+ICsrKyBi L211bHRpcGF0aGQvbWFpbi5jCj4gQEAgLTgyLDYgKzgyLDcgQEAgc3RhdGljIGludCB1c2Vfd2F0 Y2hkb2c7Cj4gICNpbmNsdWRlICJjbGlfaGFuZGxlcnMuaCIKPiAgI2luY2x1ZGUgImxvY2suaCIK PiAgI2luY2x1ZGUgIndhaXRlci5oIgo+ICsjaW5jbHVkZSAiZG1ldmVudHMuaCIKPiAgI2luY2x1 ZGUgImlvX2Vycl9zdGF0LmgiCj4gICNpbmNsdWRlICJ3d2lkcy5oIgo+ICAjaW5jbHVkZSAiLi4v dGhpcmQtcGFydHkvdmFsZ3JpbmQvZHJkLmgiCj4gQEAgLTEwOCw2ICsxMDksNyBAQCBpbnQgdXhz b2NrX3RpbWVvdXQ7Cj4gIGludCB2ZXJib3NpdHk7Cj4gIGludCBiaW5kaW5nc19yZWFkX29ubHk7 Cj4gIGludCBpZ25vcmVfbmV3X2RldnM7Cj4gK2ludCBwb2xsX2RtZXZlbnRzID0gMTsKPiAgZW51 bSBkYWVtb25fc3RhdHVzIHJ1bm5pbmdfc3RhdGUgPSBEQUVNT05fSU5JVDsKPiAgcGlkX3QgZGFl bW9uX3BpZDsKPiAgcHRocmVhZF9tdXRleF90IGNvbmZpZ19sb2NrID0gUFRIUkVBRF9NVVRFWF9J TklUSUFMSVpFUjsKPiBAQCAtMjg4LDExICsyOTAsMjMgQEAgc3dpdGNoX3BhdGhncm91cCAoc3Ry dWN0IG11bHRpcGF0aCAqIG1wcCkKPiAgCQkgbXBwLT5hbGlhcywgbXBwLT5iZXN0cGcpOwo+ICB9 Cj4gIAo+ICtzdGF0aWMgaW50Cj4gK3dhaXRfZm9yX2V2ZW50cyhzdHJ1Y3QgbXVsdGlwYXRoICpt cHAsIHN0cnVjdCB2ZWN0b3JzICp2ZWNzKQo+ICt7Cj4gKwlpZiAocG9sbF9kbWV2ZW50cykKPiAr CQlyZXR1cm4gd2F0Y2hfZG1ldmVudHMobXBwLT5hbGlhcyk7Cj4gKwllbHNlCj4gKwkJcmV0dXJu IHN0YXJ0X3dhaXRlcl90aHJlYWQobXBwLCB2ZWNzKTsKPiArfQo+ICsKPiAgc3RhdGljIHZvaWQK PiAgcmVtb3ZlX21hcF9hbmRfc3RvcF93YWl0ZXIoc3RydWN0IG11bHRpcGF0aCAqbXBwLCBzdHJ1 Y3QgdmVjdG9ycwo+ICp2ZWNzLAo+ICAJCQkgICBpbnQgcHVyZ2VfdmVjKQo+ICB7Cj4gLQlzdG9w X3dhaXRlcl90aHJlYWQobXBwLCB2ZWNzKTsKPiArCS8qIGRldmljZXMgYXJlIGF1dG9tYXRpY2Fs bHkgcmVtb3ZlZCBieSB0aGUgZG1ldmVudCBwb2xsaW5nCj4gY29kZSwKPiArCSAqIHNvIHRoZXkg ZG9uJ3QgbmVlZCB0byBiZSBtYW51YWxseSByZW1vdmVkIGhlcmUgKi8KPiArCWlmICghcG9sbF9k bWV2ZW50cykKPiArCQlzdG9wX3dhaXRlcl90aHJlYWQobXBwLCB2ZWNzKTsKPiAgCXJlbW92ZV9t YXAobXBwLCB2ZWNzLCBwdXJnZV92ZWMpOwo+ICB9Cj4gIAo+IEBAIC0zMDUsOCArMzE5LDEyIEBA IHJlbW92ZV9tYXBzX2FuZF9zdG9wX3dhaXRlcnMoc3RydWN0IHZlY3RvcnMKPiAqdmVjcykKPiAg CWlmICghdmVjcykKPiAgCQlyZXR1cm47Cj4gIAo+IC0JdmVjdG9yX2ZvcmVhY2hfc2xvdCh2ZWNz LT5tcHZlYywgbXBwLCBpKQo+IC0JCXN0b3Bfd2FpdGVyX3RocmVhZChtcHAsIHZlY3MpOwo+ICsJ aWYgKCFwb2xsX2RtZXZlbnRzKSB7Cj4gKwkJdmVjdG9yX2ZvcmVhY2hfc2xvdCh2ZWNzLT5tcHZl YywgbXBwLCBpKQo+ICsJCQlzdG9wX3dhaXRlcl90aHJlYWQobXBwLCB2ZWNzKTsKPiArCX0KPiAr CWVsc2UKPiArCQl1bndhdGNoX2FsbF9kbWV2ZW50cygpOwo+ICAKPiAgCXJlbW92ZV9tYXBzKHZl Y3MpOwo+ICB9Cj4gQEAgLTM1MSw3ICszNjksNyBAQCByZXRyeToKPiAgCWRtX2xpYl9yZWxlYXNl KCk7Cj4gIAo+ICBmYWlsOgo+IC0JaWYgKG5ld19tYXAgJiYgKHJldHJpZXMgPCAwIHx8IHN0YXJ0 X3dhaXRlcl90aHJlYWQobXBwLAo+IHZlY3MpKSkgewo+ICsJaWYgKG5ld19tYXAgJiYgKHJldHJp ZXMgPCAwIHx8IHdhaXRfZm9yX2V2ZW50cyhtcHAsIHZlY3MpKSkKPiB7Cj4gIAkJY29uZGxvZygw LCAiJXM6IGZhaWxlZCB0byBjcmVhdGUgbmV3IG1hcCIsIG1wcC0KPiA+YWxpYXMpOwo+ICAJCXJl bW92ZV9tYXAobXBwLCB2ZWNzLCAxKTsKPiAgCQlyZXR1cm4gMTsKPiBAQCAtODcwLDcgKzg4OCw3 IEBAIHJldHJ5Ogo+ICAKPiAgCWlmICgobXBwLT5hY3Rpb24gPT0gQUNUX0NSRUFURSB8fAo+ICAJ ICAgICAobXBwLT5hY3Rpb24gPT0gQUNUX05PVEhJTkcgJiYgc3RhcnRfd2FpdGVyICYmICFtcHAt Cj4gPndhaXRlcikpICYmCj4gLQkgICAgc3RhcnRfd2FpdGVyX3RocmVhZChtcHAsIHZlY3MpKQo+ ICsJICAgIHdhaXRfZm9yX2V2ZW50cyhtcHAsIHZlY3MpKQo+ICAJCQlnb3RvIGZhaWxfbWFwOwo+ ICAKPiAgCS8qCj4gQEAgLTIxNzMsNyArMjE5MSw3IEBAIGNvbmZpZ3VyZSAoc3RydWN0IHZlY3Rv cnMgKiB2ZWNzKQo+ICAJICogc3RhcnQgZG0gZXZlbnQgd2FpdGVyIHRocmVhZHMgZm9yIHRoZXNl IG5ldyBtYXBzCj4gIAkgKi8KPiAgCXZlY3Rvcl9mb3JlYWNoX3Nsb3QodmVjcy0+bXB2ZWMsIG1w cCwgaSkgewo+IC0JCWlmIChzdGFydF93YWl0ZXJfdGhyZWFkKG1wcCwgdmVjcykpIHsKPiArCQlp ZiAod2FpdF9mb3JfZXZlbnRzKG1wcCwgdmVjcykpIHsKPiAgCQkJcmVtb3ZlX21hcChtcHAsIHZl Y3MsIDEpOwo+ICAJCQlpLS07Cj4gIAkJCWNvbnRpbnVlOwo+IEBAIC0yNDE0LDcgKzI0MzIsNyBA QCBzZXRfb29tX2FkaiAodm9pZCkKPiAgc3RhdGljIGludAo+ICBjaGlsZCAodm9pZCAqIHBhcmFt KQo+ICB7Cj4gLQlwdGhyZWFkX3QgY2hlY2tfdGhyLCB1ZXZlbnRfdGhyLCB1eGxzbnJfdGhyLCB1 ZXZxX3RocjsKPiArCXB0aHJlYWRfdCBjaGVja190aHIsIHVldmVudF90aHIsIHV4bHNucl90aHIs IHVldnFfdGhyLAo+IGRtZXZlbnRfdGhyOwo+ICAJcHRocmVhZF9hdHRyX3QgbG9nX2F0dHIsIG1p c2NfYXR0ciwgdWV2ZW50X2F0dHI7Cj4gIAlzdHJ1Y3QgdmVjdG9ycyAqIHZlY3M7Cj4gIAlzdHJ1 Y3QgbXVsdGlwYXRoICogbXBwOwo+IEBAIC0yNDc2LDYgKzI0OTQsOCBAQCBjaGlsZCAodm9pZCAq IHBhcmFtKQo+ICAJCWdvdG8gZmFpbGVkOwo+ICAJfQo+ICAKPiArCWlmIChwb2xsX2RtZXZlbnRz KQo+ICsJCXBvbGxfZG1ldmVudHMgPSBkbWV2ZW50X3BvbGxfc3VwcG9ydGVkKCk7Cj4gIAlzZXRs b2dtYXNrKExPR19VUFRPKGNvbmYtPnZlcmJvc2l0eSArIDMpKTsKPiAgCj4gIAllbnZwID0gZ2V0 ZW52KCJMaW1pdE5PRklMRSIpOwo+IEBAIC0yNTQyLDYgKzI1NjIsMTkgQEAgY2hpbGQgKHZvaWQg KiBwYXJhbSkKPiAgCj4gIAlpbml0X3BhdGhfY2hlY2tfaW50ZXJ2YWwodmVjcyk7Cj4gIAo+ICsJ aWYgKHBvbGxfZG1ldmVudHMpIHsKPiArCQlpZiAoYWxsb2NfZG1ldmVudF93YWl0ZXIodmVjcykp IHsKPiArCQkJY29uZGxvZygwLCAiZmFpbGVkIHRvIGFsbG9jYXRlIGRtZXZlbnRzCj4gd2FpdGVy IGluZm8iKTsKPiArCQkJZ290byBmYWlsZWQ7Cj4gKwkJfQo+ICsJCWlmICgocmMgPSBwdGhyZWFk X2NyZWF0ZSgmZG1ldmVudF90aHIsICZtaXNjX2F0dHIsCj4gKwkJCQkJIHdhaXRfZG1ldmVudHMs IE5VTEwpKSkgewo+ICsJCQljb25kbG9nKDAsICJmYWlsZWQgdG8gY3JlYXRlIGRtZXZlbnQgd2Fp dGVyCj4gdGhyZWFkOiAlZCIsCj4gKwkJCQlyYyk7Cj4gKwkJCWdvdG8gZmFpbGVkOwo+ICsJCX0K PiArCX0KPiArCj4gIAkvKgo+ICAJICogU3RhcnQgdWV2ZW50IGxpc3RlbmVyIGVhcmx5IHRvIGNh dGNoIGV2ZW50cwo+ICAJICovCj4gQEAgLTI2MTUsMTEgKzI2NDgsMTUgQEAgY2hpbGQgKHZvaWQg KiBwYXJhbSkKPiAgCXB0aHJlYWRfY2FuY2VsKHVldmVudF90aHIpOwo+ICAJcHRocmVhZF9jYW5j ZWwodXhsc25yX3Rocik7Cj4gIAlwdGhyZWFkX2NhbmNlbCh1ZXZxX3Rocik7Cj4gKwlpZiAocG9s bF9kbWV2ZW50cykKPiArCQlwdGhyZWFkX2NhbmNlbChkbWV2ZW50X3Rocik7Cj4gIAo+ICAJcHRo cmVhZF9qb2luKGNoZWNrX3RociwgTlVMTCk7Cj4gIAlwdGhyZWFkX2pvaW4odWV2ZW50X3Rociwg TlVMTCk7Cj4gIAlwdGhyZWFkX2pvaW4odXhsc25yX3RociwgTlVMTCk7Cj4gIAlwdGhyZWFkX2pv aW4odWV2cV90aHIsIE5VTEwpOwo+ICsJaWYgKHBvbGxfZG1ldmVudHMpCj4gKwkJcHRocmVhZF9q b2luKGRtZXZlbnRfdGhyLCBOVUxMKTsKPiAgCj4gIAlzdG9wX2lvX2Vycl9zdGF0X3RocmVhZCgp Owo+ICAKPiBAQCAtMjYzNCw2ICsyNjcxLDggQEAgY2hpbGQgKHZvaWQgKiBwYXJhbSkKPiAgCj4g IAljbGVhbnVwX2NoZWNrZXJzKCk7Cj4gIAljbGVhbnVwX3ByaW8oKTsKPiArCWlmIChwb2xsX2Rt ZXZlbnRzKQo+ICsJCWZyZWVfZG1ldmVudF93YWl0ZXIoKTsKPiAgCj4gIAlkbV9saWJfcmVsZWFz ZSgpOwo+ICAJZG1fbGliX2V4aXQoKTsKPiBAQCAtMjc2NSw3ICsyODA0LDcgQEAgbWFpbiAoaW50 IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKPiAgCXVkZXYgPSB1ZGV2X25ldygpOwo+ICAJbGlibXBfdWRl dl9zZXRfc3luY19zdXBwb3J0KDApOwo+ICAKPiAtCXdoaWxlICgoYXJnID0gZ2V0b3B0KGFyZ2Ms IGFyZ3YsICI6ZHN2Oms6OkJuIikpICE9IEVPRiApIHsKPiArCXdoaWxlICgoYXJnID0gZ2V0b3B0 KGFyZ2MsIGFyZ3YsICI6ZHN2Oms6OkJuaXciKSkgIT0gRU9GICkgewo+ICAJCXN3aXRjaChhcmcp IHsKPiAgCQljYXNlICdkJzoKPiAgCQkJZm9yZWdyb3VuZCA9IDE7Cj4gQEAgLTI3OTksNiArMjgz OCw5IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCj4gIAkJY2FzZSAnbic6Cj4gIAkJ CWlnbm9yZV9uZXdfZGV2cyA9IDE7Cj4gIAkJCWJyZWFrOwo+ICsJCWNhc2UgJ3cnOgo+ICsJCQlw b2xsX2RtZXZlbnRzID0gMDsKPiArCQkJYnJlYWs7Cj4gIAkJZGVmYXVsdDoKPiAgCQkJZnByaW50 ZihzdGRlcnIsICJJbnZhbGlkIGFyZ3VtZW50ICctJWMnXG4iLAo+ICAJCQkJb3B0b3B0KTsKCi0t IApEci4gTWFydGluIFdpbGNrIDxtd2lsY2tAc3VzZS5jb20+LCBUZWwuICs0OSAoMCk5MTEgNzQw NTMgMjEwNwpTVVNFIExpbnV4IEdtYkgsIEdGOiBGZWxpeCBJbWVuZMO2cmZmZXIsIEphbmUgU21p dGhhcmQsIEdyYWhhbSBOb3J0b24KSFJCIDIxMjg0IChBRyBOw7xybmJlcmcpCgotLQpkbS1kZXZl bCBtYWlsaW5nIGxpc3QKZG0tZGV2ZWxAcmVkaGF0LmNvbQpodHRwczovL3d3dy5yZWRoYXQuY29t L21haWxtYW4vbGlzdGluZm8vZG0tZGV2ZWw=