From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefano Stabellini Subject: Re: [PATCH 13/17 v5] xen/arm: vpl011: Modify xenconsole to support multiple consoles Date: Thu, 22 Jun 2017 16:51:23 -0700 (PDT) Message-ID: References: <1498117132-27139-1-git-send-email-bhupinder.thakur@linaro.org> <1498117132-27139-14-git-send-email-bhupinder.thakur@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dOBsm-0004Rg-Qr for xen-devel@lists.xenproject.org; Thu, 22 Jun 2017 23:51:29 +0000 In-Reply-To: <1498117132-27139-14-git-send-email-bhupinder.thakur@linaro.org> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Bhupinder Thakur Cc: xen-devel@lists.xenproject.org, Julien Grall , Stefano Stabellini , Ian Jackson , Wei Liu List-Id: xen-devel@lists.xenproject.org T24gVGh1LCAyMiBKdW4gMjAxNywgQmh1cGluZGVyIFRoYWt1ciB3cm90ZToKPiBUaGlzIHBhdGNo IGFkZHMgdGhlIHN1cHBvcnQgZm9yIG11bHRpcGxlIGNvbnNvbGVzIGFuZCBpbnRyb2R1Y2VzIHRo ZSBpdGVyYXRvcgo+IGZ1bmN0aW9ucyB0byBvcGVyYXRlIG9uIG11bHRpcGxlIGNvbnNvbGVzLgo+ IAo+IFRoaXMgcGF0Y2ggaXMgaW4gcHJlcGFyYXRpb24gdG8gc3VwcG9ydCBhIG5ldyB2dWFydCBj b25zb2xlLgo+IAo+IFNpZ25lZC1vZmYtYnk6IEJodXBpbmRlciBUaGFrdXIgPGJodXBpbmRlci50 aGFrdXJAbGluYXJvLm9yZz4KPiAtLS0KPiBDQzogSWFuIEphY2tzb24gPGlhbi5qYWNrc29uQGV1 LmNpdHJpeC5jb20+Cj4gQ0M6IFdlaSBMaXUgPHdlaS5saXUyQGNpdHJpeC5jb20+Cj4gQ0M6IFN0 ZWZhbm8gU3RhYmVsbGluaSA8c3N0YWJlbGxpbmlAa2VybmVsLm9yZz4KPiBDQzogSnVsaWVuIEdy YWxsIDxqdWxpZW4uZ3JhbGxAYXJtLmNvbT4KPiAKPiBDaGFuZ2VzIHNpbmNlIHY0Ogo+IC0gQ2hh bmdlcyB0byBtYWtlIGV2ZW50IGNoYW5uZWwgaGFuZGxpbmcgcGVyIGNvbnNvbGUgcmF0aGVyIHRo YW4gcGVyIGRvbWFpbi4KPiAKPiBDaGFuZ2VzIHNpbmNlIHYzOgo+IC0gVGhlIGNoYW5nZXMgaW4g eGVuY29uc29sZSBoYXZlIGJlZW4gc3BsaXQgaW50byBmb3VyIHBhdGNoZXMuIFRoaXMgaXMgdGhl IHRoaXJkIHBhdGNoLgo+IAo+ICB0b29scy9jb25zb2xlL2RhZW1vbi9pby5jIHwgNDM1ICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0KPiAgMSBmaWxlIGNoYW5n ZWQsIDMwMiBpbnNlcnRpb25zKCspLCAxMzMgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBh L3Rvb2xzL2NvbnNvbGUvZGFlbW9uL2lvLmMgYi90b29scy9jb25zb2xlL2RhZW1vbi9pby5jCj4g aW5kZXggYTJhMzQ5Ni4uYmFmMGUyZSAxMDA2NDQKPiAtLS0gYS90b29scy9jb25zb2xlL2RhZW1v bi9pby5jCj4gKysrIGIvdG9vbHMvY29uc29sZS9kYWVtb24vaW8uYwo+IEBAIC05MCwxMiArOTAs MTQgQEAgc3RydWN0IGJ1ZmZlciB7Cj4gIH07Cj4gIAo+ICBzdHJ1Y3QgY29uc29sZSB7Cj4gKwlj aGFyICp0dHluYW1lOwo+ICAJaW50IG1hc3Rlcl9mZDsKPiAgCWludCBtYXN0ZXJfcG9sbGZkX2lk eDsKPiAgCWludCBzbGF2ZV9mZDsKPiAgCWludCBsb2dfZmQ7Cj4gIAlzdHJ1Y3QgYnVmZmVyIGJ1 ZmZlcjsKPiAgCWNoYXIgKnhzcGF0aDsKPiArCWNoYXIgKmxvZ19zdWZmaXg7Cj4gIAlpbnQgcmlu Z19yZWY7Cj4gIAl4ZW5ldnRjaG5faGFuZGxlICp4Y2VfaGFuZGxlOwo+ICAJaW50IHhjZV9wb2xs ZmRfaWR4Owo+IEBAIC0xMDcsMTYgKzEwOSwxMTIgQEAgc3RydWN0IGNvbnNvbGUgewo+ICAJc3Ry dWN0IGRvbWFpbiAqZDsKPiAgfTsKPiAgCj4gK3N0cnVjdCBjb25zb2xlX2RhdGEgewo+ICsJY2hh ciAqeHNuYW1lOwo+ICsJY2hhciAqdHR5bmFtZTsKPiArCWNoYXIgKmxvZ19zdWZmaXg7Cj4gK307 Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGNvbnNvbGVfZGF0YSBjb25zb2xlX2RhdGFbXSA9IHsKPiAr Cj4gKwl7Cj4gKwkJLnhzbmFtZSA9ICIvY29uc29sZSIsCj4gKwkJLnR0eW5hbWUgPSAidHR5IiwK PiArCQkubG9nX3N1ZmZpeCA9ICIiLAo+ICsJfSwKPiArfTsKPiArCj4gKyNkZWZpbmUgTUFYX0NP TlNPTEUgKHNpemVvZihjb25zb2xlX2RhdGEpL3NpemVvZihzdHJ1Y3QgY29uc29sZV9kYXRhKSkK PiArCj4gIHN0cnVjdCBkb21haW4gewo+ICAJaW50IGRvbWlkOwo+ICAJYm9vbCBpc19kZWFkOwo+ ICAJdW5zaWduZWQgbGFzdF9zZWVuOwo+ICAJc3RydWN0IGRvbWFpbiAqbmV4dDsKPiAtCXN0cnVj dCBjb25zb2xlIGNvbnNvbGU7Cj4gKwlzdHJ1Y3QgY29uc29sZSBjb25zb2xlW01BWF9DT05TT0xF XTsKPiAgfTsKPiAgCj4gIHN0YXRpYyBzdHJ1Y3QgZG9tYWluICpkb21faGVhZDsKPiAgCj4gK3R5 cGVkZWYgdm9pZCAoKlZPSURfSVRFUl9GVU5DX0FSRzEpKHN0cnVjdCBjb25zb2xlICopOwo+ICt0 eXBlZGVmIGJvb2wgKCpCT09MX0lURVJfRlVOQ19BUkcxKShzdHJ1Y3QgY29uc29sZSAqKTsKPiAr dHlwZWRlZiBpbnQgKCpJTlRfSVRFUl9GVU5DX0FSRzEpKHN0cnVjdCBjb25zb2xlICopOwo+ICt0 eXBlZGVmIHZvaWQgKCpWT0lEX0lURVJfRlVOQ19BUkcyKShzdHJ1Y3QgY29uc29sZSAqLCAgdm9p ZCAqKTsKPiArdHlwZWRlZiBpbnQgKCpJTlRfSVRFUl9GVU5DX0FSRzMpKHN0cnVjdCBjb25zb2xl ICosCj4gKwkJCSBzdHJ1Y3QgZG9tYWluICpkb20sIHZvaWQgKiopOwo+ICsKPiArc3RhdGljIGlu bGluZSBib29sIGNvbnNvbGVfZW5hYmxlZChzdHJ1Y3QgY29uc29sZSAqY29uKQo+ICt7Cj4gKwly ZXR1cm4gY29uLT5sb2NhbF9wb3J0ICE9IC0xOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHZv aWQgY29uc29sZV9pdGVyX3ZvaWRfYXJnMShzdHJ1Y3QgZG9tYWluICpkLAo+ICsJCQkJCQkJCQkJ ICBWT0lEX0lURVJfRlVOQ19BUkcxIGl0ZXJfZnVuYykKPiArewo+ICsJaW50IGkgPSAwOwo+ICsJ c3RydWN0IGNvbnNvbGUgKmNvbiA9ICYoZC0+Y29uc29sZVswXSk7Cj4gKwo+ICsJZm9yIChpID0g MDsgaSA8IE1BWF9DT05TT0xFOyBpKyssIGNvbisrKQo+ICsJewo+ICsJCWl0ZXJfZnVuYyhjb24p Owo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHZvaWQgY29uc29sZV9pdGVyX3ZvaWRf YXJnMihzdHJ1Y3QgZG9tYWluICpkLAo+ICsJCQkJCQkJCQkJICBWT0lEX0lURVJfRlVOQ19BUkcy IGl0ZXJfZnVuYywKPiArCQkJCQkJCQkJCSAgdm9pZCAqaXRlcl9kYXRhKQo+ICt7Cj4gKwlpbnQg aSA9IDA7Cj4gKwlzdHJ1Y3QgY29uc29sZSAqY29uID0gJihkLT5jb25zb2xlWzBdKTsKPiArCj4g Kwlmb3IgKGkgPSAwOyBpIDwgTUFYX0NPTlNPTEU7IGkrKywgY29uKyspCj4gKwl7Cj4gKwkJaXRl cl9mdW5jKGNvbiwgaXRlcl9kYXRhKTsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIGlubGluZSBi b29sIGNvbnNvbGVfaXRlcl9ib29sX2FyZzEoc3RydWN0IGRvbWFpbiAqZCwKPiArCQkJCQkJCQkJ CSAgQk9PTF9JVEVSX0ZVTkNfQVJHMSBpdGVyX2Z1bmMpCj4gK3sKPiArCWludCBpID0gMDsKPiAr CXN0cnVjdCBjb25zb2xlICpjb24gPSAmKGQtPmNvbnNvbGVbMF0pOwo+ICsKPiArCWZvciAoaSA9 IDA7IGkgPCBNQVhfQ09OU09MRTsgaSsrLCBjb24rKykKPiArCXsKPiArCQlpZiAoaXRlcl9mdW5j KGNvbikpCj4gKwkJCXJldHVybiB0cnVlOwo+ICsJfQo+ICsJcmV0dXJuIGZhbHNlOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW5saW5lIGludCBjb25zb2xlX2l0ZXJfaW50X2FyZzEoc3RydWN0IGRvbWFp biAqZCwKPiArCQkJCQkJCQkJCUlOVF9JVEVSX0ZVTkNfQVJHMSBpdGVyX2Z1bmMpCj4gK3sKPiAr CWludCBpID0gMDsKPiArCXN0cnVjdCBjb25zb2xlICpjb24gPSAmKGQtPmNvbnNvbGVbMF0pOwo+ ICsKPiArCWZvciAoaSA9IDA7IGkgPCBNQVhfQ09OU09MRTsgaSsrLCBjb24rKykKPiArCXsKPiAr CQlpZiAoaXRlcl9mdW5jKGNvbikpCj4gKwkJCXJldHVybiAxOwo+ICsJfQo+ICsJcmV0dXJuIDA7 Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgaW50IGNvbnNvbGVfaXRlcl9pbnRfYXJnMyhzdHJ1 Y3QgZG9tYWluICpkLAo+ICsJCQkJCQkJCQkJSU5UX0lURVJfRlVOQ19BUkczIGl0ZXJfZnVuYywK PiArCQkJCQkJCQkJCXZvaWQgKippdGVyX2RhdGEpCj4gK3sKPiArCWludCBpID0gMDsKPiArCXN0 cnVjdCBjb25zb2xlICpjb24gPSAmKGQtPmNvbnNvbGVbMF0pOwo+ICsKPiArCWZvciAoaSA9IDA7 IGkgPCBNQVhfQ09OU09MRTsgaSsrLCBjb24rKykKPiArCXsKPiArCQlpZiAoaXRlcl9mdW5jKGNv biwgZCwgaXRlcl9kYXRhKSkKPiArCQkJcmV0dXJuIDE7Cj4gKwl9Cj4gKwlyZXR1cm4gMDsKPiAr fQo+ICBzdGF0aWMgaW50IHdyaXRlX2FsbChpbnQgZmQsIGNvbnN0IGNoYXIqIGJ1Ziwgc2l6ZV90 IGxlbikKPiAgewo+ICAJd2hpbGUgKGxlbikgewo+IEBAIC0xNjMsMTIgKzI2MSwyMiBAQCBzdGF0 aWMgaW50IHdyaXRlX3dpdGhfdGltZXN0YW1wKGludCBmZCwgY29uc3QgY2hhciAqZGF0YSwgc2l6 ZV90IHN6LAo+ICAJcmV0dXJuIDA7Cj4gIH0KPiAgCj4gLXN0YXRpYyB2b2lkIGJ1ZmZlcl9hcHBl bmQoc3RydWN0IGNvbnNvbGUgKmNvbikKPiArc3RhdGljIGlubGluZSBib29sIGJ1ZmZlcl9hdmFp bGFibGUoc3RydWN0IGNvbnNvbGUgKmNvbikKPiArewo+ICsJaWYgKGRpc2NhcmRfb3ZlcmZsb3dl ZF9kYXRhIHx8Cj4gKwkJIWNvbi0+YnVmZmVyLm1heF9jYXBhY2l0eSB8fAo+ICsJCWNvbi0+YnVm ZmVyLnNpemUgPCBjb24tPmJ1ZmZlci5tYXhfY2FwYWNpdHkpCj4gKwkJcmV0dXJuIHRydWU7Cj4g KwllbHNlCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBidWZmZXJf YXBwZW5kKHN0cnVjdCBjb25zb2xlICpjb24sIHhlbmV2dGNobl9wb3J0X29yX2Vycm9yX3QgcG9y dCkKPiAgewoKaXQgZG9lc24ndCBsb29rIGxpa2UgcG9ydCBpcyB1c2VkIGFueXdoZXJlIGhlcmUK Cgo+ICAJc3RydWN0IGJ1ZmZlciAqYnVmZmVyID0gJmNvbi0+YnVmZmVyOwo+ICsJc3RydWN0IHhl bmNvbnNfaW50ZXJmYWNlICppbnRmID0gY29uLT5pbnRlcmZhY2U7Cj4gIAlzdHJ1Y3QgZG9tYWlu ICpkb20gPSBjb24tPmQ7Cj4gIAlYRU5DT05TX1JJTkdfSURYIGNvbnMsIHByb2QsIHNpemU7Cj4g LQlzdHJ1Y3QgeGVuY29uc19pbnRlcmZhY2UgKmludGYgPSBjb24tPmludGVyZmFjZTsKClNwdXJp b3VzIGNoYW5nZT8KCgo+ICAJY29ucyA9IGludGYtPm91dF9jb25zOwo+ICAJcHJvZCA9IGludGYt Pm91dF9wcm9kOwo+IEBAIC0zMjEsNyArNDI5LDcgQEAgc3RhdGljIGludCBjcmVhdGVfY29uc29s ZV9sb2coc3RydWN0IGNvbnNvbGUgKmNvbikKPiAgCQlyZXR1cm4gLTE7Cj4gIAl9Cj4gIAo+IC0J c25wcmludGYobG9nZmlsZSwgUEFUSF9NQVgtMSwgIiVzL2d1ZXN0LSVzLmxvZyIsIGxvZ19kaXIs IGRhdGEpOwo+ICsJc25wcmludGYobG9nZmlsZSwgUEFUSF9NQVgtMSwgIiVzL2d1ZXN0LSVzJXMu bG9nIiwgbG9nX2RpciwgZGF0YSwgY29uLT5sb2dfc3VmZml4KTsKPiAgCWZyZWUoZGF0YSk7Cj4g IAlsb2dmaWxlW1BBVEhfTUFYLTFdID0gJ1wwJzsKPiAgCj4gQEAgLTQ3Myw3ICs1ODEsNyBAQCBz dGF0aWMgaW50IGNvbnNvbGVfY3JlYXRlX3R0eShzdHJ1Y3QgY29uc29sZSAqY29uKQo+ICAJfQo+ ICAJZnJlZShwYXRoKTsKPiAgCj4gLQlzdWNjZXNzID0gKGFzcHJpbnRmKCZwYXRoLCAiJXMvdHR5 IiwgY29uLT54c3BhdGgpICE9IC0xKTsKPiArCXN1Y2Nlc3MgPSAoYXNwcmludGYoJnBhdGgsICIl cy8lcyIsIGNvbi0+eHNwYXRoLCBjb24tPnR0eW5hbWUpICE9IC0xKTsKPiAgCWlmICghc3VjY2Vz cykKPiAgCQlnb3RvIG91dDsKPiAgCXN1Y2Nlc3MgPSB4c193cml0ZSh4cywgWEJUX05VTEwsIHBh dGgsIHNsYXZlLCBzdHJsZW4oc2xhdmUpKTsKPiBAQCAtNTk0LDYgKzcwMiw3IEBAIHN0YXRpYyBp bnQgY29uc29sZV9jcmVhdGVfcmluZyhzdHJ1Y3QgY29uc29sZSAqY29uKQo+ICAKPiAgCWNvbi0+ bG9jYWxfcG9ydCA9IC0xOwo+ICAJY29uLT5yZW1vdGVfcG9ydCA9IC0xOwo+ICsKPiAgCWlmIChj b24tPnhjZV9oYW5kbGUgIT0gTlVMTCkKPiAgCQl4ZW5ldnRjaG5fY2xvc2UoY29uLT54Y2VfaGFu ZGxlKTsKClNwdXJpb3VzIGNoYW5nZQoKCj4gQEAgLTYzOSwxMyArNzQ4LDEzIEBAIHN0YXRpYyBi b29sIHdhdGNoX2RvbWFpbihzdHJ1Y3QgZG9tYWluICpkb20sIGJvb2wgd2F0Y2gpCj4gIHsKPiAg CWNoYXIgZG9taWRfc3RyWzMgKyBNQVhfU1RSTEVOKGRvbS0+ZG9taWQpXTsKPiAgCWJvb2wgc3Vj Y2VzczsKPiAtCXN0cnVjdCBjb25zb2xlICpjb24gPSAmZG9tLT5jb25zb2xlOwo+ICsJc3RydWN0 IGNvbnNvbGUgKmNvbiA9ICZkb20tPmNvbnNvbGVbMF07Cj4gIAo+ICAJc25wcmludGYoZG9taWRf c3RyLCBzaXplb2YoZG9taWRfc3RyKSwgImRvbSV1IiwgZG9tLT5kb21pZCk7Cj4gIAlpZiAod2F0 Y2gpIHsKPiAgCQlzdWNjZXNzID0geHNfd2F0Y2goeHMsIGNvbi0+eHNwYXRoLCBkb21pZF9zdHIp Owo+ICAJCWlmIChzdWNjZXNzKQo+IC0JCQljb25zb2xlX2NyZWF0ZV9yaW5nKGNvbik7Cj4gKwkJ CWNvbnNvbGVfaXRlcl9pbnRfYXJnMShkb20sIGNvbnNvbGVfY3JlYXRlX3JpbmcpOwo+ICAJCWVs c2UKPiAgCQkJeHNfdW53YXRjaCh4cywgY29uLT54c3BhdGgsIGRvbWlkX3N0cik7Cj4gIAl9IGVs c2Ugewo+IEBAIC02NTUsMjAgKzc2NCw1OSBAQCBzdGF0aWMgYm9vbCB3YXRjaF9kb21haW4oc3Ry dWN0IGRvbWFpbiAqZG9tLCBib29sIHdhdGNoKQo+ICAJcmV0dXJuIHN1Y2Nlc3M7Cj4gIH0KPiAg Cj4gLQo+IC1zdGF0aWMgc3RydWN0IGRvbWFpbiAqY3JlYXRlX2RvbWFpbihpbnQgZG9taWQpCj4g K3N0YXRpYyBpbnQgY29uc29sZV9pbml0KHN0cnVjdCBjb25zb2xlICpjb24sIHN0cnVjdCBkb21h aW4gKmRvbSwgdm9pZCAqKmRhdGEpCj4gIHsKPiAtCXN0cnVjdCBkb21haW4gKmRvbTsKPiAgCWNo YXIgKnM7Cj4gKwlpbnQgZXJyID0gLTE7Cj4gIAlzdHJ1Y3QgdGltZXNwZWMgdHM7Cj4gLQlzdHJ1 Y3QgY29uc29sZSAqY29uOwo+ICsJc3RydWN0IGNvbnNvbGVfZGF0YSAqKmNvbl9kYXRhID0gKHN0 cnVjdCBjb25zb2xlX2RhdGEgKiopZGF0YTsKPiArCWNoYXIgKnhzbmFtZTsKPiAgCj4gIAlpZiAo Y2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsICZ0cykgPCAwKSB7Cj4gIAkJZG9sb2coTE9H X0VSUiwgIkNhbm5vdCBnZXQgdGltZSBvZiBkYXkgJXM6JXM6TCVkIiwKPiAgCQkgICAgICBfX0ZJ TEVfXywgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7Cj4gLQkJcmV0dXJuIE5VTEw7Cj4gKwkJcmV0 dXJuIGVycjsKPiArCX0KPiArCj4gKwljb24tPm1hc3Rlcl9mZCA9IC0xOwo+ICsJY29uLT5tYXN0 ZXJfcG9sbGZkX2lkeCA9IC0xOwo+ICsJY29uLT5zbGF2ZV9mZCA9IC0xOwo+ICsJY29uLT5sb2df ZmQgPSAtMTsKPiArCWNvbi0+cmluZ19yZWYgPSAtMTsKPiArCWNvbi0+bG9jYWxfcG9ydCA9IC0x Owo+ICsJY29uLT5yZW1vdGVfcG9ydCA9IC0xOwo+ICsJY29uLT54Y2VfcG9sbGZkX2lkeCA9IC0x Owo+ICsJY29uLT5uZXh0X3BlcmlvZCA9ICgobG9uZyBsb25nKXRzLnR2X3NlYyAqIDEwMDApICsg KHRzLnR2X25zZWMgLyAxMDAwMDAwKSArIFJBVEVfTElNSVRfUEVSSU9EOwo+ICsJY29uLT5kID0g ZG9tOwo+ICsJY29uLT50dHluYW1lID0gKCpjb25fZGF0YSktPnR0eW5hbWU7Cj4gKwljb24tPmxv Z19zdWZmaXggPSAoKmNvbl9kYXRhKS0+bG9nX3N1ZmZpeDsKPiArCXhzbmFtZSA9ICgqY29uX2Rh dGEpLT54c25hbWU7Cj4gKwljb24tPnhzcGF0aCA9IHhzX2dldF9kb21haW5fcGF0aCh4cywgZG9t LT5kb21pZCk7Cj4gKwlzID0gcmVhbGxvYyhjb24tPnhzcGF0aCwgc3RybGVuKGNvbi0+eHNwYXRo KSArCj4gKwkJCQlzdHJsZW4oeHNuYW1lKSArIDEpOwo+ICsJaWYgKHMpCj4gKwl7Cj4gKwkJY29u LT54c3BhdGggPSBzOwo+ICsJCXN0cmNhdChjb24tPnhzcGF0aCwgeHNuYW1lKTsKPiArCQllcnIg PSAwOwo+ICAJfQo+ICAKPiArCSgqY29uX2RhdGEpKys7Cj4gKwo+ICsJcmV0dXJuIGVycjsKPiAr fQo+ICsKPiArc3RhdGljIHZvaWQgY29uc29sZV9mcmVlKHN0cnVjdCBjb25zb2xlICpjb24pCj4g K3sKPiArCWlmIChjb24tPnhzcGF0aCkKPiArCQlmcmVlKGNvbi0+eHNwYXRoKTsKPiArfQo+ICsK PiArc3RhdGljIHN0cnVjdCBkb21haW4gKmNyZWF0ZV9kb21haW4oaW50IGRvbWlkKQo+ICt7Cj4g KwlzdHJ1Y3QgZG9tYWluICpkb207Cj4gKwlzdHJ1Y3QgY29uc29sZV9kYXRhICpjb25fZGF0YSA9 ICZjb25zb2xlX2RhdGFbMF07Cj4gKwo+ICAJZG9tID0gY2FsbG9jKDEsIHNpemVvZiAqZG9tKTsK PiAgCWlmIChkb20gPT0gTlVMTCkgewo+ICAJCWRvbG9nKExPR19FUlIsICJPdXQgb2YgbWVtb3J5 ICVzOiVzKCk6TCVkIiwKPiBAQCAtNjc4LDI3ICs4MjYsOCBAQCBzdGF0aWMgc3RydWN0IGRvbWFp biAqY3JlYXRlX2RvbWFpbihpbnQgZG9taWQpCj4gIAo+ICAJZG9tLT5kb21pZCA9IGRvbWlkOwo+ ICAKPiAtCWNvbiA9ICZkb20tPmNvbnNvbGU7Cj4gLQljb24tPnhzcGF0aCA9IHhzX2dldF9kb21h aW5fcGF0aCh4cywgZG9tLT5kb21pZCk7Cj4gLQlzID0gcmVhbGxvYyhjb24tPnhzcGF0aCwgc3Ry bGVuKGNvbi0+eHNwYXRoKSArCj4gLQkJICAgIHN0cmxlbigiL2NvbnNvbGUiKSArIDEpOwo+IC0J aWYgKHMgPT0gTlVMTCkKPiArCWlmIChjb25zb2xlX2l0ZXJfaW50X2FyZzMoZG9tLCBjb25zb2xl X2luaXQsICh2b2lkICoqKSZjb25fZGF0YSkpCj4gIAkJZ290byBvdXQ7Cj4gLQljb24tPnhzcGF0 aCA9IHM7Cj4gLQlzdHJjYXQoY29uLT54c3BhdGgsICIvY29uc29sZSIpOwo+IC0KPiAtCWNvbi0+ bWFzdGVyX2ZkID0gLTE7Cj4gLQljb24tPm1hc3Rlcl9wb2xsZmRfaWR4ID0gLTE7Cj4gLQljb24t PnNsYXZlX2ZkID0gLTE7Cj4gLQljb24tPmxvZ19mZCA9IC0xOwo+IC0JY29uLT54Y2VfcG9sbGZk X2lkeCA9IC0xOwo+IC0JY29uLT5kID0gZG9tOwo+IC0KPiAtCWNvbi0+bmV4dF9wZXJpb2QgPSAo KGxvbmcgbG9uZyl0cy50dl9zZWMgKiAxMDAwKSArICh0cy50dl9uc2VjIC8gMTAwMDAwMCkgKyBS QVRFX0xJTUlUX1BFUklPRDsKPiAtCj4gLQljb24tPnJpbmdfcmVmID0gLTE7Cj4gLQljb24tPmxv Y2FsX3BvcnQgPSAtMTsKPiAtCWNvbi0+cmVtb3RlX3BvcnQgPSAtMTsKPiAgCj4gIAlpZiAoIXdh dGNoX2RvbWFpbihkb20sIHRydWUpKQo+ICAJCWdvdG8gb3V0Owo+IEBAIC03MTAsNyArODM5LDcg QEAgc3RhdGljIHN0cnVjdCBkb21haW4gKmNyZWF0ZV9kb21haW4oaW50IGRvbWlkKQo+ICAKPiAg CXJldHVybiBkb207Cj4gICBvdXQ6Cj4gLQlmcmVlKGNvbi0+eHNwYXRoKTsKPiArCWNvbnNvbGVf aXRlcl92b2lkX2FyZzEoZG9tLCBjb25zb2xlX2ZyZWUpOwo+ICAJZnJlZShkb20pOwo+ICAJcmV0 dXJuIE5VTEw7Cj4gIH0KPiBAQCAtNzQwLDM4ICs4NjksNTEgQEAgc3RhdGljIHZvaWQgcmVtb3Zl X2RvbWFpbihzdHJ1Y3QgZG9tYWluICpkb20pCj4gIAl9Cj4gIH0KPiAgCj4gLXN0YXRpYyB2b2lk IGNsZWFudXBfZG9tYWluKHN0cnVjdCBkb21haW4gKmQpCj4gK3N0YXRpYyB2b2lkIGNvbnNvbGVf Y2xlYW51cChzdHJ1Y3QgY29uc29sZSAqY29uKQo+ICB7Cj4gLQlzdHJ1Y3QgY29uc29sZSAqY29u ID0gJmQtPmNvbnNvbGU7Cj4gLQo+IC0JY29uc29sZV9jbG9zZV90dHkoY29uKTsKPiAtCj4gIAlp ZiAoY29uLT5sb2dfZmQgIT0gLTEpIHsKPiAgCQljbG9zZShjb24tPmxvZ19mZCk7Cj4gIAkJY29u LT5sb2dfZmQgPSAtMTsKPiAgCX0KPiAgCj4gLQlmcmVlKGNvbi0+YnVmZmVyLmRhdGEpOwo+IC0J Y29uLT5idWZmZXIuZGF0YSA9IE5VTEw7Cj4gKwlpZiAoY29uLT5idWZmZXIuZGF0YSkKPiArCXsK PiArCQlmcmVlKGNvbi0+YnVmZmVyLmRhdGEpOwo+ICsJCWNvbi0+YnVmZmVyLmRhdGEgPSBOVUxM Owo+ICsJfQo+ICsKPiArCWlmIChjb24tPnhzcGF0aCkKPiArCXsKPiArCQlmcmVlKGNvbi0+eHNw YXRoKTsKPiArCQljb24tPnhzcGF0aCA9IE5VTEw7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyB2 b2lkIGNsZWFudXBfZG9tYWluKHN0cnVjdCBkb21haW4gKmQpCj4gK3sKPiArCWNvbnNvbGVfaXRl cl92b2lkX2FyZzEoZCwgY29uc29sZV9jbG9zZV90dHkpOwo+ICAKPiAtCWZyZWUoY29uLT54c3Bh dGgpOwo+IC0JY29uLT54c3BhdGggPSBOVUxMOwo+ICsJY29uc29sZV9pdGVyX3ZvaWRfYXJnMShk LCBjb25zb2xlX2NsZWFudXApOwo+ICAKPiAgCXJlbW92ZV9kb21haW4oZCk7Cj4gIH0KPiAgCj4g LXN0YXRpYyB2b2lkIHNodXRkb3duX2RvbWFpbihzdHJ1Y3QgZG9tYWluICpkKQo+ICtzdGF0aWMg dm9pZCBjb25zb2xlX2Nsb3NlX2V2dGNobihzdHJ1Y3QgY29uc29sZSAqY29uKQo+ICB7Cj4gLQlz dHJ1Y3QgY29uc29sZSAqY29uID0gJmQtPmNvbnNvbGU7Cj4gLQo+IC0JZC0+aXNfZGVhZCA9IHRy dWU7Cj4gLQl3YXRjaF9kb21haW4oZCwgZmFsc2UpOwo+IC0JY29uc29sZV91bm1hcF9pbnRlcmZh Y2UoY29uKTsKPiAgCWlmIChjb24tPnhjZV9oYW5kbGUgIT0gTlVMTCkKPiAgCQl4ZW5ldnRjaG5f Y2xvc2UoY29uLT54Y2VfaGFuZGxlKTsKPiArCj4gIAljb24tPnhjZV9oYW5kbGUgPSBOVUxMOwo+ ICB9Cj4gIAo+ICtzdGF0aWMgdm9pZCBzaHV0ZG93bl9kb21haW4oc3RydWN0IGRvbWFpbiAqZCkK PiArewo+ICsJZC0+aXNfZGVhZCA9IHRydWU7Cj4gKwl3YXRjaF9kb21haW4oZCwgZmFsc2UpOwo+ ICsJY29uc29sZV9pdGVyX3ZvaWRfYXJnMShkLCBjb25zb2xlX3VubWFwX2ludGVyZmFjZSk7Cj4g Kwljb25zb2xlX2l0ZXJfdm9pZF9hcmcxKGQsIGNvbnNvbGVfY2xvc2VfZXZ0Y2huKTsKPiArfQo+ ICsKPiAgc3RhdGljIHVuc2lnbmVkIGVudW1fcGFzcyA9IDA7Cj4gIAo+ICBzdGF0aWMgdm9pZCBl bnVtX2RvbWFpbnModm9pZCkKPiBAQCAtODg1LDEyICsxMDI3LDMyIEBAIHN0YXRpYyB2b2lkIGhh bmRsZV90dHlfd3JpdGUoc3RydWN0IGNvbnNvbGUgKmNvbikKPiAgCX0KPiAgfQo+ICAKPiAtc3Rh dGljIHZvaWQgaGFuZGxlX3JpbmdfcmVhZChzdHJ1Y3QgZG9tYWluICpkb20pCj4gK3N0YXRpYyB2 b2lkIGNvbnNvbGVfZXZ0Y2huX3VubWFzayhzdHJ1Y3QgY29uc29sZSAqY29uLCB2b2lkICpkYXRh KQo+ICt7Cj4gKwlsb25nIGxvbmcgbm93ID0gKGxvbmcgbG9uZylkYXRhOwo+ICsKPiArCWlmICgh Y29uc29sZV9lbmFibGVkKGNvbikpCj4gKwkJcmV0dXJuOwo+ICsKPiArCS8qIENTIDE2MjU3Ojk1 NWVlNGZhMTM0NSBpbnRyb2R1Y2VzIGEgNW1zIGZ1enoKPiArCSAqIGZvciBzZWxlY3QoKSwgaXQg aXMgbm90IGNsZWFyIHBvbGwoKSBoYXMKPiArCSAqIHNpbWlsYXIgYmVoYXZpb3IgKHJldHVybmlu ZyBhIGNvdXBsZSBvZiBtcwo+ICsJICogc29vbmVyIHRoYW4gcmVxdWVzdGVkKSBhcyB3ZWxsLiBK dXN0IGxlYXZlCj4gKwkgKiB0aGUgZnV6eiBoZXJlLiBSZW1vdmUgaXQgd2l0aCBhIHNlcGFyYXRl Cj4gKwkgKiBwYXRjaCBpZiBuZWNlc3NhcnkgKi8KPiArCWlmICgobm93KzUpID4gY29uLT5uZXh0 X3BlcmlvZCkgewo+ICsJCWNvbi0+bmV4dF9wZXJpb2QgPSBub3cgKyBSQVRFX0xJTUlUX1BFUklP RDsKPiArCQlpZiAoY29uLT5ldmVudF9jb3VudCA+PSBSQVRFX0xJTUlUX0FMTE9XQU5DRSkKPiAr CQkJCSh2b2lkKXhlbmV2dGNobl91bm1hc2soY29uLT54Y2VfaGFuZGxlLCBjb24tPmxvY2FsX3Bv cnQpOwo+ICsJCWNvbi0+ZXZlbnRfY291bnQgPSAwOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZCBoYW5kbGVfcmluZ19yZWFkKHN0cnVjdCBjb25zb2xlICpjb24pCj4gIHsKPiAgCXhlbmV2 dGNobl9wb3J0X29yX2Vycm9yX3QgcG9ydDsKPiAtCXN0cnVjdCBjb25zb2xlICpjb24gPSAmZG9t LT5jb25zb2xlOwo+ICAKPiAtCWlmIChkb20tPmlzX2RlYWQpCj4gKwlpZiAoY29uLT5kLT5pc19k ZWFkKQo+ICAJCXJldHVybjsKPiAgCj4gIAlpZiAoKHBvcnQgPSB4ZW5ldnRjaG5fcGVuZGluZyhj b24tPnhjZV9oYW5kbGUpKSA9PSAtMSkKPiBAQCAtODk4LDEwICsxMDYwLDIzIEBAIHN0YXRpYyB2 b2lkIGhhbmRsZV9yaW5nX3JlYWQoc3RydWN0IGRvbWFpbiAqZG9tKQo+ICAKPiAgCWNvbi0+ZXZl bnRfY291bnQrKzsKPiAgCj4gLQlidWZmZXJfYXBwZW5kKGNvbik7Cj4gKwlidWZmZXJfYXBwZW5k KGNvbiwgcG9ydCk7Cj4gIAo+ICAJaWYgKGNvbi0+ZXZlbnRfY291bnQgPCBSQVRFX0xJTUlUX0FM TE9XQU5DRSkKPiAtCQkodm9pZCl4ZW5ldnRjaG5fdW5tYXNrKGNvbi0+eGNlX2hhbmRsZSwgcG9y dCk7Cj4gKwkJKHZvaWQpeGVuZXZ0Y2huX3VubWFzayhjb24tPnhjZV9oYW5kbGUsIGNvbi0+bG9j YWxfcG9ydCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGhhbmRsZV9jb25zb2xlX3Jpbmcoc3Ry dWN0IGNvbnNvbGUgKmNvbikKPiArewo+ICsJaWYgKGNvbi0+ZXZlbnRfY291bnQgPCBSQVRFX0xJ TUlUX0FMTE9XQU5DRSkgewo+ICsJCWlmIChjb24tPnhjZV9oYW5kbGUgIT0gTlVMTCAmJgo+ICsJ CQljb24tPnhjZV9wb2xsZmRfaWR4ICE9IC0xICYmCj4gKwkJCSEoZmRzW2Nvbi0+eGNlX3BvbGxm ZF9pZHhdLnJldmVudHMgJgo+ICsJCQkgIH4oUE9MTElOfFBPTExPVVR8UE9MTFBSSSkpICYmCj4g KwkJCSAgKGZkc1tjb24tPnhjZV9wb2xsZmRfaWR4XS5yZXZlbnRzICYKPiArCQkJICAgUE9MTElO KSkKPiArCQkJaGFuZGxlX3JpbmdfcmVhZChjb24pOwo+ICsJfQo+ICB9Cj4gIAo+ICBzdGF0aWMg dm9pZCBoYW5kbGVfeHModm9pZCkKPiBAQCAtOTIyLDcgKzEwOTcsNyBAQCBzdGF0aWMgdm9pZCBo YW5kbGVfeHModm9pZCkKPiAgCQkvKiBXZSBtYXkgZ2V0IHdhdGNoZXMgZmlyaW5nIGZvciBkb21h aW5zIHRoYXQgaGF2ZSByZWNlbnRseQo+ICAJCSAgIGJlZW4gcmVtb3ZlZCwgc28gZG9tIG1heSBi ZSBOVUxMIGhlcmUuICovCj4gIAkJaWYgKGRvbSAmJiBkb20tPmlzX2RlYWQgPT0gZmFsc2UpCj4g LQkJCWNvbnNvbGVfY3JlYXRlX3JpbmcoJmRvbS0+Y29uc29sZSk7Cj4gKwkJCWNvbnNvbGVfaXRl cl9pbnRfYXJnMShkb20sIGNvbnNvbGVfY3JlYXRlX3JpbmcpOwo+ICAJfQo+ICAKPiAgCWZyZWUo dmVjKTsKPiBAQCAtOTYzLDE2ICsxMTM4LDIyIEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9odl9sb2dz KHhlbmV2dGNobl9oYW5kbGUgKnhjZV9oYW5kbGUsIGJvb2wgZm9yY2UpCj4gIAkJKHZvaWQpeGVu ZXZ0Y2huX3VubWFzayh4Y2VfaGFuZGxlLCBwb3J0KTsKPiAgfQo+ICAKPiArc3RhdGljIHZvaWQg Y29uc29sZV9vcGVuX2xvZyhzdHJ1Y3QgY29uc29sZSAqY29uKQo+ICt7Cj4gKwlpZiAoY29uc29s ZV9lbmFibGVkKGNvbikpCj4gKwl7Cj4gKwkJaWYgKGNvbi0+bG9nX2ZkICE9IC0xKQo+ICsJCQlj bG9zZShjb24tPmxvZ19mZCk7Cj4gKwkJY29uLT5sb2dfZmQgPSBjcmVhdGVfY29uc29sZV9sb2co Y29uKTsKPiArCX0KPiArfQo+ICsKPiAgc3RhdGljIHZvaWQgaGFuZGxlX2xvZ19yZWxvYWQodm9p ZCkKPiAgewo+ICAJaWYgKGxvZ19ndWVzdCkgewo+ICAJCXN0cnVjdCBkb21haW4gKmQ7Cj4gIAkJ Zm9yIChkID0gZG9tX2hlYWQ7IGQ7IGQgPSBkLT5uZXh0KSB7Cj4gLQkJCXN0cnVjdCBjb25zb2xl ICpjb24gPSAmZC0+Y29uc29sZTsKPiAtCj4gLQkJCWlmIChjb24tPmxvZ19mZCAhPSAtMSkKPiAt CQkJCWNsb3NlKGNvbi0+bG9nX2ZkKTsKPiAtCQkJY29uLT5sb2dfZmQgPSBjcmVhdGVfY29uc29s ZV9sb2coY29uKTsKPiArCQkJY29uc29sZV9pdGVyX3ZvaWRfYXJnMShkLCBjb25zb2xlX29wZW5f bG9nKTsKPiAgCQl9Cj4gIAl9Cj4gIAo+IEBAIC0xMDI0LDYgKzEyMDUsNjIgQEAgc3RhdGljIHZv aWQgcmVzZXRfZmRzKHZvaWQpCj4gIAkJbWVtc2V0KGZkcywgMCwgc2l6ZW9mKHN0cnVjdCBwb2xs ZmQpICogY3VycmVudF9hcnJheV9zaXplKTsKPiAgfQo+ICAKPiArc3RhdGljIHZvaWQgYWRkX2Nv bnNvbGVfZXZ0Y2huX2ZkKHN0cnVjdCBjb25zb2xlICpjb24sIHZvaWQgKmRhdGEpCj4gK3sKPiAr CWxvbmcgbG9uZyBuZXh0X3RpbWVvdXQgPSAqKChsb25nIGxvbmcgKilkYXRhKTsKPiArCj4gKwlp ZiAoY29uLT5ldmVudF9jb3VudCA+PSBSQVRFX0xJTUlUX0FMTE9XQU5DRSkgewo+ICsJCS8qIERl dGVybWluZSBpZiB3ZSdyZSBnb2luZyB0byBiZSB0aGUgbmV4dCB0aW1lIHNsaWNlIHRvIGV4cGly ZSAqLwo+ICsJCWlmICghbmV4dF90aW1lb3V0IHx8Cj4gKwkJCWNvbi0+bmV4dF9wZXJpb2QgPCBu ZXh0X3RpbWVvdXQpCj4gKwkJCW5leHRfdGltZW91dCA9IGNvbi0+bmV4dF9wZXJpb2Q7Cj4gKwl9 IGVsc2UgaWYgKGNvbi0+eGNlX2hhbmRsZSAhPSBOVUxMKSB7Cj4gKwkJCWlmIChidWZmZXJfYXZh aWxhYmxlKGNvbikpCj4gKwkJCXsKPiArCQkJCWludCBldnRjaG5fZmQgPSB4ZW5ldnRjaG5fZmQo Y29uLT54Y2VfaGFuZGxlKTsKPiArCQkJCWNvbi0+eGNlX3BvbGxmZF9pZHggPSBzZXRfZmRzKGV2 dGNobl9mZCwKPiArCQkJCQkJCQkJCQkgIFBPTExJTnxQT0xMUFJJKTsKPiArCQkJfQo+ICsJCX0K PiArCj4gKwkqKChsb25nIGxvbmcgKilkYXRhKSA9IG5leHRfdGltZW91dDsKPiArfQo+ICsKPiAr c3RhdGljIHZvaWQgYWRkX2NvbnNvbGVfdHR5X2ZkKHN0cnVjdCBjb25zb2xlICpjb24pCj4gK3sK PiArCWlmIChjb24tPm1hc3Rlcl9mZCAhPSAtMSkgewo+ICsJCXNob3J0IGV2ZW50cyA9IDA7Cj4g KwkJaWYgKCFjb24tPmQtPmlzX2RlYWQgJiYgcmluZ19mcmVlX2J5dGVzKGNvbikpCj4gKwkJCWV2 ZW50cyB8PSBQT0xMSU47Cj4gKwo+ICsJCWlmICghYnVmZmVyX2VtcHR5KCZjb24tPmJ1ZmZlcikp Cj4gKwkJCWV2ZW50cyB8PSBQT0xMT1VUOwo+ICsKPiArCQlpZiAoZXZlbnRzKQo+ICsJCQljb24t Pm1hc3Rlcl9wb2xsZmRfaWR4ID0KPiArCQkJCXNldF9mZHMoY29uLT5tYXN0ZXJfZmQsIGV2ZW50 c3xQT0xMUFJJKTsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaGFuZGxlX2NvbnNvbGVf dHR5KHN0cnVjdCBjb25zb2xlICpjb24pCj4gK3sKPiArCWlmIChjb24tPm1hc3Rlcl9mZCAhPSAt MSAmJiBjb24tPm1hc3Rlcl9wb2xsZmRfaWR4ICE9IC0xKSB7Cj4gKwkJaWYgKGZkc1tjb24tPm1h c3Rlcl9wb2xsZmRfaWR4XS5yZXZlbnRzICYKPiArCQkJfihQT0xMSU58UE9MTE9VVHxQT0xMUFJJ KSkKPiArCQkJY29uc29sZV9oYW5kbGVfYnJva2VuX3R0eShjb24sIGRvbWFpbl9pc192YWxpZChj b24tPmQtPmRvbWlkKSk7Cj4gKwkJZWxzZSB7Cj4gKwkJCWlmIChmZHNbY29uLT5tYXN0ZXJfcG9s bGZkX2lkeF0ucmV2ZW50cyAmCj4gKwkJCQlQT0xMSU4pCj4gKwkJCQloYW5kbGVfdHR5X3JlYWQo Y29uKTsKPiArCQkJaWYgKGZkc1tjb24tPm1hc3Rlcl9wb2xsZmRfaWR4XS5yZXZlbnRzICYKPiAr CQkJCVBPTExPVVQpCj4gKwkJCQloYW5kbGVfdHR5X3dyaXRlKGNvbik7Cj4gKwkJfQo+ICsJfQo+ ICsJY29uLT5tYXN0ZXJfcG9sbGZkX2lkeCA9IC0xOwo+ICsJY29uLT54Y2VfcG9sbGZkX2lkeCA9 IC0xOwo+ICt9Cj4gKwo+ICB2b2lkIGhhbmRsZV9pbyh2b2lkKQo+ICB7Cj4gIAlpbnQgcmV0Owo+ IEBAIC0xMDgxLDU1ICsxMzE4LDExIEBAIHZvaWQgaGFuZGxlX2lvKHZvaWQpCj4gIAkJLyogUmUt Y2FsY3VsYXRlIGFueSBldmVudCBjb3VudGVyIGFsbG93YW5jZXMgJiB1bmJsb2NrCj4gIAkJICAg ZG9tYWlucyB3aXRoIG5ldyBhbGxvd2FuY2UgKi8KPiAgCQlmb3IgKGQgPSBkb21faGVhZDsgZDsg ZCA9IGQtPm5leHQpIHsKPiAtCQkJc3RydWN0IGNvbnNvbGUgKmNvbiA9ICZkLT5jb25zb2xlOwo+ IC0KPiAtCQkJLyogQ1MgMTYyNTc6OTU1ZWU0ZmExMzQ1IGludHJvZHVjZXMgYSA1bXMgZnV6ego+ IC0JCQkgKiBmb3Igc2VsZWN0KCksIGl0IGlzIG5vdCBjbGVhciBwb2xsKCkgaGFzCj4gLQkJCSAq IHNpbWlsYXIgYmVoYXZpb3IgKHJldHVybmluZyBhIGNvdXBsZSBvZiBtcwo+IC0JCQkgKiBzb29u ZXIgdGhhbiByZXF1ZXN0ZWQpIGFzIHdlbGwuIEp1c3QgbGVhdmUKPiAtCQkJICogdGhlIGZ1enog aGVyZS4gUmVtb3ZlIGl0IHdpdGggYSBzZXBhcmF0ZQo+IC0JCQkgKiBwYXRjaCBpZiBuZWNlc3Nh cnkgKi8KPiAtCQkJaWYgKChub3crNSkgPiBjb24tPm5leHRfcGVyaW9kKSB7Cj4gLQkJCQljb24t Pm5leHRfcGVyaW9kID0gbm93ICsgUkFURV9MSU1JVF9QRVJJT0Q7Cj4gLQkJCQlpZiAoY29uLT5l dmVudF9jb3VudCA+PSBSQVRFX0xJTUlUX0FMTE9XQU5DRSkgewo+IC0JCQkJCSh2b2lkKXhlbmV2 dGNobl91bm1hc2soY29uLT54Y2VfaGFuZGxlLCBjb24tPmxvY2FsX3BvcnQpOwo+IC0JCQkJfQo+ IC0JCQkJY29uLT5ldmVudF9jb3VudCA9IDA7Cj4gLQkJCX0KPiAtCQl9Cj4gIAo+IC0JCWZvciAo ZCA9IGRvbV9oZWFkOyBkOyBkID0gZC0+bmV4dCkgewo+IC0JCQlzdHJ1Y3QgY29uc29sZSAqY29u ID0gJmQtPmNvbnNvbGU7Cj4gLQo+IC0JCQlpZiAoY29uLT5ldmVudF9jb3VudCA+PSBSQVRFX0xJ TUlUX0FMTE9XQU5DRSkgewo+IC0JCQkJLyogRGV0ZXJtaW5lIGlmIHdlJ3JlIGdvaW5nIHRvIGJl IHRoZSBuZXh0IHRpbWUgc2xpY2UgdG8gZXhwaXJlICovCj4gLQkJCQlpZiAoIW5leHRfdGltZW91 dCB8fAo+IC0JCQkJICAgIGNvbi0+bmV4dF9wZXJpb2QgPCBuZXh0X3RpbWVvdXQpCj4gLQkJCQkJ bmV4dF90aW1lb3V0ID0gY29uLT5uZXh0X3BlcmlvZDsKPiAtCQkJfSBlbHNlIGlmIChjb24tPnhj ZV9oYW5kbGUgIT0gTlVMTCkgewo+IC0JCQkJaWYgKGRpc2NhcmRfb3ZlcmZsb3dlZF9kYXRhIHx8 Cj4gLQkJCQkgICAgIWNvbi0+YnVmZmVyLm1heF9jYXBhY2l0eSB8fAo+IC0JCQkJICAgIGNvbi0+ YnVmZmVyLnNpemUgPCBjb24tPmJ1ZmZlci5tYXhfY2FwYWNpdHkpIHsKPiAtCQkJCQlpbnQgZXZ0 Y2huX2ZkID0geGVuZXZ0Y2huX2ZkKGNvbi0+eGNlX2hhbmRsZSk7Cj4gLQkJCQkJY29uLT54Y2Vf cG9sbGZkX2lkeCA9IHNldF9mZHMoZXZ0Y2huX2ZkLAo+IC0JCQkJCQkJCSAgICBQT0xMSU58UE9M TFBSSSk7Cj4gLQkJCQl9Cj4gLQkJCX0KPiAtCj4gLQkJCWlmIChjb24tPm1hc3Rlcl9mZCAhPSAt MSkgewo+IC0JCQkJc2hvcnQgZXZlbnRzID0gMDsKPiAtCQkJCWlmICghZC0+aXNfZGVhZCAmJiBy aW5nX2ZyZWVfYnl0ZXMoY29uKSkKPiAtCQkJCQlldmVudHMgfD0gUE9MTElOOwo+IC0KPiAtCQkJ CWlmICghYnVmZmVyX2VtcHR5KCZjb24tPmJ1ZmZlcikpCj4gLQkJCQkJZXZlbnRzIHw9IFBPTExP VVQ7Cj4gLQo+IC0JCQkJaWYgKGV2ZW50cykKPiAtCQkJCQljb24tPm1hc3Rlcl9wb2xsZmRfaWR4 ID0KPiAtCQkJCQkJc2V0X2Zkcyhjb24tPm1hc3Rlcl9mZCwKPiAtCQkJCQkJCWV2ZW50c3xQT0xM UFJJKTsKPiAtCQkJfQo+IC0JCX0KPiArCQkJY29uc29sZV9pdGVyX3ZvaWRfYXJnMihkLCBjb25z b2xlX2V2dGNobl91bm1hc2ssICh2b2lkICopbm93KTsKPiArCQkJY29uc29sZV9pdGVyX3ZvaWRf YXJnMihkLCBhZGRfY29uc29sZV9ldnRjaG5fZmQsICh2b2lkICopJm5leHRfdGltZW91dCk7Cj4g KwkJCWNvbnNvbGVfaXRlcl92b2lkX2FyZzEoZCwgYWRkX2NvbnNvbGVfdHR5X2ZkKTsKPiArICAg ICAgICB9Cj4gIAo+ICAJCS8qIElmIGFueSBkb21haW4gaGFzIGJlZW4gcmF0ZSBsaW1pdGVkLCB3 ZSBuZWVkIHRvIHdvcmsKPiAgCQkgICBvdXQgd2hhdCB0aW1lb3V0IHRvIHN1cHBseSB0byBwb2xs ICovCj4gQEAgLTExODksMzUgKzEzODIsMTEgQEAgdm9pZCBoYW5kbGVfaW8odm9pZCkKPiAgCQl9 Cj4gIAo+ICAJCWZvciAoZCA9IGRvbV9oZWFkOyBkOyBkID0gbikgewo+IC0JCQlzdHJ1Y3QgY29u c29sZSAqY29uID0gJmQtPmNvbnNvbGU7Cj4gIAo+ICAJCQluID0gZC0+bmV4dDsKPiAtCQkJaWYg KGNvbi0+ZXZlbnRfY291bnQgPCBSQVRFX0xJTUlUX0FMTE9XQU5DRSkgewo+IC0JCQkJaWYgKGNv bi0+eGNlX2hhbmRsZSAhPSBOVUxMICYmCj4gLQkJCQkgICAgY29uLT54Y2VfcG9sbGZkX2lkeCAh PSAtMSAmJgo+IC0JCQkJICAgICEoZmRzW2Nvbi0+eGNlX3BvbGxmZF9pZHhdLnJldmVudHMgJgo+ IC0JCQkJICAgICAgfihQT0xMSU58UE9MTE9VVHxQT0xMUFJJKSkgJiYKPiAtCQkJCSAgICAgIChm ZHNbY29uLT54Y2VfcG9sbGZkX2lkeF0ucmV2ZW50cyAmCj4gLQkJCQkgICAgICAgUE9MTElOKSkK PiAtCQkJCSAgICBoYW5kbGVfcmluZ19yZWFkKGQpOwo+IC0JCQl9Cj4gLQo+IC0JCQlpZiAoY29u LT5tYXN0ZXJfZmQgIT0gLTEgJiYgY29uLT5tYXN0ZXJfcG9sbGZkX2lkeCAhPSAtMSkgewo+IC0J CQkJaWYgKGZkc1tjb24tPm1hc3Rlcl9wb2xsZmRfaWR4XS5yZXZlbnRzICYKPiAtCQkJCSAgICB+ KFBPTExJTnxQT0xMT1VUfFBPTExQUkkpKQo+IC0JCQkJCWNvbnNvbGVfaGFuZGxlX2Jyb2tlbl90 dHkoY29uLAo+IC0JCQkJCQkgICBkb21haW5faXNfdmFsaWQoZC0+ZG9taWQpKTsKPiAtCQkJCWVs c2Ugewo+IC0JCQkJCWlmIChmZHNbY29uLT5tYXN0ZXJfcG9sbGZkX2lkeF0ucmV2ZW50cyAmCj4g LQkJCQkJICAgIFBPTExJTikKPiAtCQkJCQkJaGFuZGxlX3R0eV9yZWFkKGNvbik7Cj4gLQkJCQkJ aWYgKGZkc1tjb24tPm1hc3Rlcl9wb2xsZmRfaWR4XS5yZXZlbnRzICYKPiAtCQkJCQkgICAgUE9M TE9VVCkKPiAtCQkJCQkJaGFuZGxlX3R0eV93cml0ZShjb24pOwo+IC0JCQkJfQo+IC0JCQl9Cj4g IAo+IC0JCQljb24tPnhjZV9wb2xsZmRfaWR4ID0gY29uLT5tYXN0ZXJfcG9sbGZkX2lkeCA9IC0x Owo+ICsJCQljb25zb2xlX2l0ZXJfdm9pZF9hcmcxKGQsIGhhbmRsZV9jb25zb2xlX3JpbmcpOwo+ ICsJCQljb25zb2xlX2l0ZXJfdm9pZF9hcmcxKGQsIGhhbmRsZV9jb25zb2xlX3R0eSk7Cj4gIAo+ ICAJCQlpZiAoZC0+bGFzdF9zZWVuICE9IGVudW1fcGFzcykKPiAgCQkJCXNodXRkb3duX2RvbWFp bihkKTsKPiAtLSAKPiAyLjcuNAo+IAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVu Lm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==