From mboxrd@z Thu Jan 1 00:00:00 1970 From: jsanka-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org Subject: Re: [DPU PATCH 2/2] drm/msm: remove partial update support Date: Tue, 27 Feb 2018 10:30:30 -0800 Message-ID: <276e328e1ab7f89e946cd0e1802a4e56@codeaurora.org> References: <1519353125-32005-1-git-send-email-jsanka@codeaurora.org> <1519353125-32005-3-git-send-email-jsanka@codeaurora.org> <20180226152148.GS223881@art_vandelay> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180226152148.GS223881@art_vandelay> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: Sean Paul Cc: jeykumar-jfJNa2p1gH1BDgjK7y7TUQ@public.gmane.org, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, nganji-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, hoegsberg-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org List-Id: linux-arm-msm@vger.kernel.org T24gMjAxOC0wMi0yNiAwNzoyMSwgU2VhbiBQYXVsIHdyb3RlOgo+IE9uIFRodSwgRmViIDIyLCAy MDE4IGF0IDA2OjMyOjA1UE0gLTA4MDAsIEpleWt1bWFyIFNhbmthcmFuIHdyb3RlOgo+PiBJbXBs ZW1lbnRhdGlvbiBvZiBwYXJ0aWFsIHVwZGF0ZSBpbiBEUFUgRFJNIGlzIGhlYXZpbHkKPj4gZGVw ZW5kZW50IG9uIGN1c3RvbSBwcm9wZXJ0aWVzIGFuZCBkc2kgaG9va3MuIFJlbW92aW5nIHRoZQo+ PiBzdXBwb3J0IGZvciBub3cuIFdlIG1heSBuZWVkIHRvIHJldmlzaXQgdGhlIHN1cHBvcnQgaW4g dGhlCj4+IGZ1dHVyZS4KPj4gCj4+IENoYW5nZS1JZDogSWRkODcyNzJmZTRkNGMwYTI2ZmNiNDA1 MTU0YzA2MDVhZjFlZGYxYmEKPj4gU2lnbmVkLW9mZi1ieTogSmV5a3VtYXIgU2Fua2FyYW4gPGpz YW5rYUBjb2RlYXVyb3JhLm9yZz4KPj4gLS0tCj4+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3Av ZHB1MS9kcHVfY29ubmVjdG9yLmMgIHwgMTQzICstLS0tLS0KPj4gIGRyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9kcHUxL2RwdV9jb25uZWN0b3IuaCAgfCAgIDcgKy0KPj4gIGRyaXZlcnMvZ3B1L2Ry bS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmMgICAgICAgfCA1NDQgCj4+ICstLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KPj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmgg ICAgICAgfCAgMTggLQo+PiAgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29k ZXIuYyAgICB8IDI2NiArKysrLS0tLS0tLS0KPj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9od19jYXRhbG9nLmMgfCAgIDIgKwo+PiAgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X2ttcy5oICAgICAgICB8ICAgOCAtCj4+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rp c3AvZHB1MS9kcHVfa21zX3V0aWxzLmMgIHwgIDQyIC0tCj4+ICBkcml2ZXJzL2dwdS9kcm0vbXNt L2Rpc3AvZHB1MS9kcHVfcGxhbmUuYyAgICAgIHwgIDEzIC0KPj4gIGRyaXZlcnMvZ3B1L2RybS9t c20vbXNtX2Rydi5oICAgICAgICAgICAgICAgICAgfCAgNTYgLS0tCj4+ICAxMCBmaWxlcyBjaGFu Z2VkLCA5MCBpbnNlcnRpb25zKCspLCAxMDA5IGRlbGV0aW9ucygtKQo+PiAKPj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jb25uZWN0b3IuYyAKPj4gYi9k cml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29ubmVjdG9yLmMKPj4gaW5kZXggNTdi ODYyNy4uNjQ3OGU4OSAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X2Nvbm5lY3Rvci5jCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9jb25uZWN0b3IuYwo+PiBAQCAtNDI0LDggKzQyNCw3IEBAIGludCBkcHVfY29ubmVjdG9y X3ByZV9raWNrb2ZmKHN0cnVjdCBkcm1fY29ubmVjdG9yIAo+PiAqY29ubmVjdG9yKQo+PiAgewo+ PiAgCXN0cnVjdCBkcHVfY29ubmVjdG9yICpjX2Nvbm47Cj4+ICAJc3RydWN0IGRwdV9jb25uZWN0 b3Jfc3RhdGUgKmNfc3RhdGU7Cj4+IC0Jc3RydWN0IG1zbV9kaXNwbGF5X2tpY2tvZmZfcGFyYW1z IHBhcmFtczsKPj4gLQlpbnQgaWR4LCByYzsKPj4gKwlpbnQgaWR4LCByYyA9IDA7Cj4+IAo+PiAg CWlmICghY29ubmVjdG9yKSB7Cj4+ICAJCURQVV9FUlJPUigiaW52YWxpZCBhcmd1bWVudFxuIik7 Cj4+IEBAIC00NjIsMTQgKzQ2MSw3IEBAIGludCBkcHVfY29ubmVjdG9yX3ByZV9raWNrb2ZmKHN0 cnVjdCAKPj4gZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+PiAgCQl9Cj4+ICAJfQo+PiAKPj4g LQlpZiAoIWNfY29ubi0+b3BzLnByZV9raWNrb2ZmKQo+PiAtCQlyZXR1cm4gMDsKPj4gLQo+PiAt CXBhcmFtcy5yb2lzID0gJmNfc3RhdGUtPnJvaXM7Cj4+IC0KPj4gLQlEUFVfRVZUMzJfVkVSQk9T RShjb25uZWN0b3ItPmJhc2UuaWQpOwo+PiAtCj4+IC0JcmMgPSBjX2Nvbm4tPm9wcy5wcmVfa2lj a29mZihjb25uZWN0b3IsIGNfY29ubi0+ZGlzcGxheSwgJnBhcmFtcyk7Cj4+ICsJRFBVX0VWVDMy X1ZFUkJPU0UoY29ubmVjdG9yLT5iYXNlLmlkKTsKPj4gCj4+ICAJcmV0dXJuIHJjOwo+PiAgfQo+ PiBAQCAtNjQ1LDEyMiArNjM3LDYgQEAgc3RhdGljIHZvaWQgZHB1X2Nvbm5lY3Rvcl9hdG9taWNf cmVzZXQoc3RydWN0IAo+PiBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCj4+ICAJcmV0dXJuICZj X3N0YXRlLT5iYXNlOwo+PiAgfQo+PiAKPj4gLXN0YXRpYyBpbnQgX2RwdV9jb25uZWN0b3Jfcm9p X3YxX2NoZWNrX3JvaSgKPj4gLQkJc3RydWN0IGRwdV9jb25uZWN0b3IgKmNfY29ubiwKPj4gLQkJ c3RydWN0IGRybV9jbGlwX3JlY3QgKnJvaV9jb25uLAo+PiAtCQljb25zdCBzdHJ1Y3QgbXNtX3Jv aV9jYXBzICpjYXBzKQo+PiAtewo+PiAtCWNvbnN0IHN0cnVjdCBtc21fcm9pX2FsaWdubWVudCAq YWxpZ24gPSAmY2Fwcy0+YWxpZ247Cj4+IC0JaW50IHcgPSByb2lfY29ubi0+eDIgLSByb2lfY29u bi0+eDE7Cj4+IC0JaW50IGggPSByb2lfY29ubi0+eTIgLSByb2lfY29ubi0+eTE7Cj4+IC0KPj4g LQlpZiAodyA8PSAwIHx8IGggPD0gMCkgewo+PiAtCQlEUFVfRVJST1JfQ09OTihjX2Nvbm4sICJp bnZhbGlkIGNvbm4gcm9pIHcgJWQgaCAlZFxuIiwgdywgaCk7Cj4+IC0JCXJldHVybiAtRUlOVkFM Owo+PiAtCX0KPj4gLQo+PiAtCWlmICh3IDwgYWxpZ24tPm1pbl93aWR0aCB8fCB3ICUgYWxpZ24t PndpZHRoX3BpeF9hbGlnbikgewo+PiAtCQlEUFVfRVJST1JfQ09OTihjX2Nvbm4sCj4+IC0JCQkJ ImludmFsaWQgY29ubiByb2kgd2lkdGggJWQgbWluICVkIGFsaWduICVkXG4iLAo+PiAtCQkJCXcs IGFsaWduLT5taW5fd2lkdGgsIGFsaWduLT53aWR0aF9waXhfYWxpZ24pOwo+PiAtCQlyZXR1cm4g LUVJTlZBTDsKPj4gLQl9Cj4+IC0KPj4gLQlpZiAoaCA8IGFsaWduLT5taW5faGVpZ2h0IHx8IGgg JSBhbGlnbi0+aGVpZ2h0X3BpeF9hbGlnbikgewo+PiAtCQlEUFVfRVJST1JfQ09OTihjX2Nvbm4s Cj4+IC0JCQkJImludmFsaWQgY29ubiByb2kgaGVpZ2h0ICVkIG1pbiAlZCBhbGlnbiAlZFxuIiwK Pj4gLQkJCQloLCBhbGlnbi0+bWluX2hlaWdodCwgYWxpZ24tPmhlaWdodF9waXhfYWxpZ24pOwo+ PiAtCQlyZXR1cm4gLUVJTlZBTDsKPj4gLQl9Cj4+IC0KPj4gLQlpZiAocm9pX2Nvbm4tPngxICUg YWxpZ24tPnhzdGFydF9waXhfYWxpZ24pIHsKPj4gLQkJRFBVX0VSUk9SX0NPTk4oY19jb25uLCAi aW52YWxpZCBjb25uIHJvaSB4MSAlZCBhbGlnbiAlZFxuIiwKPj4gLQkJCQlyb2lfY29ubi0+eDEs IGFsaWduLT54c3RhcnRfcGl4X2FsaWduKTsKPj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4+IC0JfQo+ PiAtCj4+IC0JaWYgKHJvaV9jb25uLT55MSAlIGFsaWduLT55c3RhcnRfcGl4X2FsaWduKSB7Cj4+ IC0JCURQVV9FUlJPUl9DT05OKGNfY29ubiwgImludmFsaWQgY29ubiByb2kgeTEgJWQgYWxpZ24g JWRcbiIsCj4+IC0JCQkJcm9pX2Nvbm4tPnkxLCBhbGlnbi0+eXN0YXJ0X3BpeF9hbGlnbik7Cj4+ IC0JCXJldHVybiAtRUlOVkFMOwo+PiAtCX0KPj4gLQo+PiAtCXJldHVybiAwOwo+PiAtfQo+PiAt Cj4+IC1zdGF0aWMgaW50IF9kcHVfY29ubmVjdG9yX3NldF9yb2lfdjEoCj4+IC0JCXN0cnVjdCBk cHVfY29ubmVjdG9yICpjX2Nvbm4sCj4+IC0JCXN0cnVjdCBkcHVfY29ubmVjdG9yX3N0YXRlICpj X3N0YXRlLAo+PiAtCQl2b2lkICp1c3JfcHRyKQo+PiAtewo+PiAtCXN0cnVjdCBkcHVfZHJtX3Jv aV92MSByb2lfdjE7Cj4+IC0Jc3RydWN0IG1zbV9kaXNwbGF5X2luZm8gZGlzcGxheV9pbmZvOwo+ PiAtCXN0cnVjdCBtc21fcm9pX2NhcHMgKmNhcHM7Cj4+IC0JaW50IGksIHJjOwo+PiAtCj4+IC0J aWYgKCFjX2Nvbm4gfHwgIWNfc3RhdGUpIHsKPj4gLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGFyZ3Nc biIpOwo+PiAtCQlyZXR1cm4gLUVJTlZBTDsKPj4gLQl9Cj4+IC0KPj4gLQlyYyA9IGRwdV9jb25u ZWN0b3JfZ2V0X2luZm8oJmNfY29ubi0+YmFzZSwgJmRpc3BsYXlfaW5mbyk7Cj4+IC0JaWYgKHJj KSB7Cj4+IC0JCURQVV9FUlJPUl9DT05OKGNfY29ubiwgImRpc3BsYXkgZ2V0IGluZm8gZXJyb3I6 ICVkXG4iLCByYyk7Cj4+IC0JCXJldHVybiByYzsKPj4gLQl9Cj4+IC0KPj4gLQljYXBzID0gJmRp c3BsYXlfaW5mby5yb2lfY2FwczsKPj4gLQlpZiAoIWNhcHMtPmVuYWJsZWQpIHsKPj4gLQkJRFBV X0VSUk9SX0NPTk4oY19jb25uLCAiZGlzcGxheSByb2kgY2FwYWJpbGl0eSBpcyBkaXNhYmxlZFxu Iik7Cj4+IC0JCXJldHVybiAtRU5PVFNVUFA7Cj4+IC0JfQo+PiAtCj4+IC0JbWVtc2V0KCZjX3N0 YXRlLT5yb2lzLCAwLCBzaXplb2YoY19zdGF0ZS0+cm9pcykpOwo+PiAtCj4+IC0JaWYgKCF1c3Jf cHRyKSB7Cj4+IC0JCURQVV9ERUJVR19DT05OKGNfY29ubiwgInJvaXMgY2xlYXJlZFxuIik7Cj4+ IC0JCXJldHVybiAwOwo+PiAtCX0KPj4gLQo+PiAtCWlmIChjb3B5X2Zyb21fdXNlcigmcm9pX3Yx LCB1c3JfcHRyLCBzaXplb2Yocm9pX3YxKSkpIHsKPj4gLQkJRFBVX0VSUk9SX0NPTk4oY19jb25u LCAiZmFpbGVkIHRvIGNvcHkgcm9pX3YxIGRhdGFcbiIpOwo+PiAtCQlyZXR1cm4gLUVJTlZBTDsK Pj4gLQl9Cj4+IC0KPj4gLQlEUFVfREVCVUdfQ09OTihjX2Nvbm4sICJudW1fcmVjdHMgJWRcbiIs IHJvaV92MS5udW1fcmVjdHMpOwo+PiAtCj4+IC0JaWYgKHJvaV92MS5udW1fcmVjdHMgPT0gMCkg ewo+PiAtCQlEUFVfREVCVUdfQ09OTihjX2Nvbm4sICJyb2lzIGNsZWFyZWRcbiIpOwo+PiAtCQly ZXR1cm4gMDsKPj4gLQl9Cj4+IC0KPj4gLQlpZiAocm9pX3YxLm51bV9yZWN0cyA+IERQVV9NQVhf Uk9JX1YxIHx8Cj4+IC0JCQlyb2lfdjEubnVtX3JlY3RzID4gY2Fwcy0+bnVtX3JvaSkgewo+PiAt CQlEUFVfRVJST1JfQ09OTihjX2Nvbm4sICJ0b28gbWFueSByZWN0cyBzcGVjaWZpZWQ6ICVkXG4i LAo+PiAtCQkJCXJvaV92MS5udW1fcmVjdHMpOwo+PiAtCQlyZXR1cm4gLUVJTlZBTDsKPj4gLQl9 Cj4+IC0KPj4gLQljX3N0YXRlLT5yb2lzLm51bV9yZWN0cyA9IHJvaV92MS5udW1fcmVjdHM7Cj4+ IC0JZm9yIChpID0gMDsgaSA8IHJvaV92MS5udW1fcmVjdHM7ICsraSkgewo+PiAtCQlpbnQgcmM7 Cj4+IC0KPj4gLQkJcmMgPSBfZHB1X2Nvbm5lY3Rvcl9yb2lfdjFfY2hlY2tfcm9pKGNfY29ubiwg JnJvaV92MS5yb2lbaV0sCj4+IC0JCQkJY2Fwcyk7Cj4+IC0JCWlmIChyYykKPj4gLQkJCXJldHVy biByYzsKPj4gLQo+PiAtCQljX3N0YXRlLT5yb2lzLnJvaVtpXSA9IHJvaV92MS5yb2lbaV07Cj4+ IC0JCURQVV9ERUJVR19DT05OKGNfY29ubiwgInJvaSVkOiByb2kgKCVkLCVkKSAoJWQsJWQpXG4i LCBpLAo+PiAtCQkJCWNfc3RhdGUtPnJvaXMucm9pW2ldLngxLAo+PiAtCQkJCWNfc3RhdGUtPnJv aXMucm9pW2ldLnkxLAo+PiAtCQkJCWNfc3RhdGUtPnJvaXMucm9pW2ldLngyLAo+PiAtCQkJCWNf c3RhdGUtPnJvaXMucm9pW2ldLnkyKTsKPj4gLQl9Cj4+IC0KPj4gLQlyZXR1cm4gMDsKPj4gLX0K Pj4gLQo+PiAgc3RhdGljIGludCBfZHB1X2Nvbm5lY3Rvcl91cGRhdGVfYmxfc2NhbGUoc3RydWN0 IGRwdV9jb25uZWN0b3IgCj4+ICpjX2Nvbm4sCj4+ICAJCWludCBpZHgsCj4+ICAJCXVpbnQ2NF90 IHZhbHVlKQo+PiBAQCAtODUwLDEzICs3MjYsNyBAQCBzdGF0aWMgaW50IAo+PiBkcHVfY29ubmVj dG9yX2F0b21pY19zZXRfcHJvcGVydHkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwK Pj4gIAkJYnJlYWs7Cj4+ICAJZGVmYXVsdDoKPj4gIAkJYnJlYWs7Cj4+IC0JfQo+PiAtCj4+IC0J aWYgKGlkeCA9PSBDT05ORUNUT1JfUFJPUF9ST0lfVjEpIHsKPj4gLQkJcmMgPSBfZHB1X2Nvbm5l Y3Rvcl9zZXRfcm9pX3YxKGNfY29ubiwgY19zdGF0ZSwgKHZvaWQgKil2YWwpOwo+PiAtCQlpZiAo cmMpCj4+IC0JCQlEUFVfRVJST1JfQ09OTihjX2Nvbm4sICJpbnZhbGlkIHJvaV92MSwgcmM6ICVk XG4iLCByYyk7Cj4+IC0JfQo+PiArCX0KPj4gCj4+ICAJLyogY2hlY2sgZm9yIGN1c3RvbSBwcm9w ZXJ0eSBoYW5kbGluZyAqLwo+PiAgCWlmICghcmMgJiYgY19jb25uLT5vcHMuc2V0X3Byb3BlcnR5 KSB7Cj4+IEBAIC0xMzA0LDEzICsxMTc0LDYgQEAgc3RydWN0IGRybV9jb25uZWN0b3IgKmRwdV9j b25uZWN0b3JfaW5pdChzdHJ1Y3QgCj4+IGRybV9kZXZpY2UgKmRldiwKPj4gIAkJQ09OTkVDVE9S X1BST1BfQURfQkxfU0NBTEUpOwo+PiAgI2VuZGlmCj4+IAo+PiAtCXJjID0gZHB1X2Nvbm5lY3Rv cl9nZXRfaW5mbygmY19jb25uLT5iYXNlLCAmZGlzcGxheV9pbmZvKTsKPj4gLQlpZiAoIXJjICYm IGRpc3BsYXlfaW5mby5yb2lfY2Fwcy5lbmFibGVkKSB7Cj4+IC0JCW1zbV9wcm9wZXJ0eV9pbnN0 YWxsX3ZvbGF0aWxlX3JhbmdlKAo+PiAtCQkJCSZjX2Nvbm4tPnByb3BlcnR5X2luZm8sICJkcHVf ZHJtX3JvaV92MSIsIDB4MCwKPj4gLQkJCQkwLCB+MCwgMCwgQ09OTkVDVE9SX1BST1BfUk9JX1Yx KTsKPj4gLQl9Cj4+IC0KPj4gIAltc21fcHJvcGVydHlfaW5zdGFsbF9yYW5nZSgmY19jb25uLT5w cm9wZXJ0eV9pbmZvLCAiUkVUSVJFX0ZFTkNFIiwKPj4gIAkJCTB4MCwgMCwgSU5SX09QRU5fTUFY LCAwLCBDT05ORUNUT1JfUFJPUF9SRVRJUkVfRkVOQ0UpOwo+PiAKPj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jb25uZWN0b3IuaCAKPj4gYi9kcml2ZXJz L2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29ubmVjdG9yLmgKPj4gaW5kZXggNTczYTBjOC4u OTgxZjQ1OSAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1 X2Nvbm5lY3Rvci5oCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9j b25uZWN0b3IuaAo+PiBAQCAtMTYzLDEzICsxNjMsMTAgQEAgc3RydWN0IGRwdV9jb25uZWN0b3Jf b3BzIHsKPj4gIAkgKiBwcmVfa2lja29mZiAtIHRyaWdnZXIgZGlzcGxheSB0byBwcm9ncmFtIGtp Y2tvZmYtdGltZSBmZWF0dXJlcwo+PiAgCSAqIEBjb25uZWN0b3I6IFBvaW50ZXIgdG8gZHJtIGNv bm5lY3RvciBzdHJ1Y3R1cmUKPj4gIAkgKiBAZGlzcGxheTogUG9pbnRlciB0byBwcml2YXRlIGRp c3BsYXkgc3RydWN0dXJlCj4+IC0JICogQHBhcmFtczogUGFyYW1ldGVyIGJ1bmRsZSBvZiBjb25u ZWN0b3Itc3RvcmVkIGluZm9ybWF0aW9uIGZvcgo+PiAtCSAqCWtpY2tvZmYtdGltZSBwcm9ncmFt bWluZyBpbnRvIHRoZSBkaXNwbGF5Cj4+ICAJICogUmV0dXJuczogWmVybyBvbiBzdWNjZXNzCj4+ ICAJICovCj4+ICAJaW50ICgqcHJlX2tpY2tvZmYpKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25u ZWN0b3IsCj4+IC0JCQl2b2lkICpkaXNwbGF5LAo+PiAtCQkJc3RydWN0IG1zbV9kaXNwbGF5X2tp Y2tvZmZfcGFyYW1zICpwYXJhbXMpOwo+PiArCQkJdm9pZCAqZGlzcGxheSk7Cj4+IAo+PiAgCS8q Kgo+PiAgCSAqIGNsa19jdHJsIC0gcGVyZm9ybSBjbGsgZW5hYmxlL2Rpc2FibGUgb24gdGhlIGNv bm5lY3Rvcgo+PiBAQCAtMzQwLDcgKzMzNyw2IEBAIHN0cnVjdCBkcHVfY29ubmVjdG9yIHsKPj4g ICAqIEBvdXRfZmI6IFBvaW50ZXIgdG8gb3V0cHV0IGZyYW1lIGJ1ZmZlciwgaWYgYXBwbGljYWJs ZQo+PiAgICogQHByb3BlcnR5X3N0YXRlOiBMb2NhbCBzdG9yYWdlIGZvciBtc21fcHJvcCBwcm9w ZXJ0aWVzCj4+ICAgKiBAcHJvcGVydHlfdmFsdWVzOiBMb2NhbCBjYWNoZSBvZiBjdXJyZW50IGNv bm5lY3RvciBwcm9wZXJ0eSB2YWx1ZXMKPj4gLSAqIEByb2lzOiBSZWdpb25zIG9mIGludGVyZXN0 IHN0cnVjdHVyZSBmb3IgbWFwcGluZyBDUlRDIHRvIENvbm5lY3RvciAKPj4gb3V0cHV0Cj4+ICAg KiBAcHJvcGVydHlfYmxvYnM6IGJsb2IgcHJvcGVydGllcwo+PiAgICovCj4+ICBzdHJ1Y3QgZHB1 X2Nvbm5lY3Rvcl9zdGF0ZSB7Cj4+IEBAIC0zNDksNyArMzQ1LDYgQEAgc3RydWN0IGRwdV9jb25u ZWN0b3Jfc3RhdGUgewo+PiAgCXN0cnVjdCBtc21fcHJvcGVydHlfc3RhdGUgcHJvcGVydHlfc3Rh dGU7Cj4+ICAJc3RydWN0IG1zbV9wcm9wZXJ0eV92YWx1ZSBwcm9wZXJ0eV92YWx1ZXNbQ09OTkVD VE9SX1BST1BfQ09VTlRdOwo+PiAKPj4gLQlzdHJ1Y3QgbXNtX3JvaV9saXN0IHJvaXM7Cj4+ICAJ c3RydWN0IGRybV9wcm9wZXJ0eV9ibG9iICpwcm9wZXJ0eV9ibG9ic1tDT05ORUNUT1JfUFJPUF9C TE9CQ09VTlRdOwo+PiAgfTsKPj4gCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNt L2Rpc3AvZHB1MS9kcHVfY3J0Yy5jIAo+PiBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9jcnRjLmMKPj4gaW5kZXggM2NkZjFlMy4uYWIzNjU3OCAxMDA2NDQKPj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuYwo+PiArKysgYi9kcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5jCj4+IEBAIC03ODIsNDY1ICs3ODIsMjQgQEAg c3RhdGljIHZvaWQgCj4+IF9kcHVfY3J0Y19zZXR1cF9kaW1fbGF5ZXJfY2ZnKHN0cnVjdCBkcm1f Y3J0YyAqY3J0YywKPj4gIAl9Cj4+ICB9Cj4+IAo+PiAtdm9pZCBkcHVfY3J0Y19nZXRfY3J0Y19y b2koc3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSwKPj4gLQkJY29uc3Qgc3RydWN0IGRwdV9y ZWN0ICoqY3J0Y19yb2kpCj4+IC17Cj4+IC0Jc3RydWN0IGRwdV9jcnRjX3N0YXRlICpjcnRjX3N0 YXRlOwo+PiAtCj4+IC0JaWYgKCFzdGF0ZSB8fCAhY3J0Y19yb2kpCj4+IC0JCXJldHVybjsKPj4g LQo+PiAtCWNydGNfc3RhdGUgPSB0b19kcHVfY3J0Y19zdGF0ZShzdGF0ZSk7Cj4+IC0JKmNydGNf cm9pID0gJmNydGNfc3RhdGUtPmNydGNfcm9pOwo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgaW50IF9k cHVfY3J0Y19zZXRfcm9pX3YxKHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUsCj4+IC0JCXZv aWQgX191c2VyICp1c3JfcHRyKQo+PiAtewo+PiAtCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKPj4g LQlzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgKmNzdGF0ZTsKPj4gLQlzdHJ1Y3QgZHB1X2RybV9yb2lf djEgcm9pX3YxOwo+PiAtCWludCBpOwo+PiAtCj4+IC0JaWYgKCFzdGF0ZSkgewo+PiAtCQlEUFVf RVJST1IoImludmFsaWQgYXJnc1xuIik7Cj4+IC0JCXJldHVybiAtRUlOVkFMOwo+PiAtCX0KPj4g LQo+PiAtCWNzdGF0ZSA9IHRvX2RwdV9jcnRjX3N0YXRlKHN0YXRlKTsKPj4gLQljcnRjID0gY3N0 YXRlLT5iYXNlLmNydGM7Cj4+IC0KPj4gLQltZW1zZXQoJmNzdGF0ZS0+dXNlcl9yb2lfbGlzdCwg MCwgc2l6ZW9mKGNzdGF0ZS0+dXNlcl9yb2lfbGlzdCkpOwo+PiAtCj4+IC0JaWYgKCF1c3JfcHRy KSB7Cj4+IC0JCURQVV9ERUJVRygiY3J0YyVkOiByb2lzIGNsZWFyZWRcbiIsIERSTUlEKGNydGMp KTsKPj4gLQkJcmV0dXJuIDA7Cj4+IC0JfQo+PiAtCj4+IC0JaWYgKGNvcHlfZnJvbV91c2VyKCZy b2lfdjEsIHVzcl9wdHIsIHNpemVvZihyb2lfdjEpKSkgewo+PiAtCQlEUFVfRVJST1IoImNydGMl ZDogZmFpbGVkIHRvIGNvcHkgcm9pX3YxIGRhdGFcbiIsIERSTUlEKGNydGMpKTsKPj4gLQkJcmV0 dXJuIC1FSU5WQUw7Cj4+IC0JfQo+PiAtCj4+IC0JRFBVX0RFQlVHKCJjcnRjJWQ6IG51bV9yZWN0 cyAlZFxuIiwgRFJNSUQoY3J0YyksIHJvaV92MS5udW1fcmVjdHMpOwo+PiAtCj4+IC0JaWYgKHJv aV92MS5udW1fcmVjdHMgPT0gMCkgewo+PiAtCQlEUFVfREVCVUcoImNydGMlZDogcm9pcyBjbGVh cmVkXG4iLCBEUk1JRChjcnRjKSk7Cj4+IC0JCXJldHVybiAwOwo+PiAtCX0KPj4gLQo+PiAtCWlm IChyb2lfdjEubnVtX3JlY3RzID4gRFBVX01BWF9ST0lfVjEpIHsKPj4gLQkJRFBVX0VSUk9SKCJj cnRjJWQ6IHRvbyBtYW55IHJlY3RzIHNwZWNpZmllZDogJWRcbiIsIERSTUlEKGNydGMpLAo+PiAt CQkJCXJvaV92MS5udW1fcmVjdHMpOwo+PiAtCQlyZXR1cm4gLUVJTlZBTDsKPj4gLQl9Cj4+IC0K Pj4gLQljc3RhdGUtPnVzZXJfcm9pX2xpc3QubnVtX3JlY3RzID0gcm9pX3YxLm51bV9yZWN0czsK Pj4gLQlmb3IgKGkgPSAwOyBpIDwgcm9pX3YxLm51bV9yZWN0czsgKytpKSB7Cj4+IC0JCWNzdGF0 ZS0+dXNlcl9yb2lfbGlzdC5yb2lbaV0gPSByb2lfdjEucm9pW2ldOwo+PiAtCQlEUFVfREVCVUco ImNydGMlZDogcm9pJWQ6IHJvaSAoJWQsJWQpICglZCwlZClcbiIsCj4+IC0JCQkJRFJNSUQoY3J0 YyksIGksCj4+IC0JCQkJY3N0YXRlLT51c2VyX3JvaV9saXN0LnJvaVtpXS54MSwKPj4gLQkJCQlj c3RhdGUtPnVzZXJfcm9pX2xpc3Qucm9pW2ldLnkxLAo+PiAtCQkJCWNzdGF0ZS0+dXNlcl9yb2lf bGlzdC5yb2lbaV0ueDIsCj4+IC0JCQkJY3N0YXRlLT51c2VyX3JvaV9saXN0LnJvaVtpXS55Mik7 Cj4+IC0JfQo+PiAtCj4+IC0JcmV0dXJuIDA7Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyBib29sIF9k cHVfY3J0Y19zZXR1cF9pc18zZG11eF9kc2Moc3RydWN0IGRybV9jcnRjX3N0YXRlIAo+PiAqc3Rh dGUpCj4+IC17Cj4+IC0JaW50IGk7Cj4+IC0Jc3RydWN0IGRwdV9jcnRjX3N0YXRlICpjc3RhdGU7 Cj4+IC0JYm9vbCBpc18zZG11eF9kc2MgPSBmYWxzZTsKPj4gLQo+PiAtCWNzdGF0ZSA9IHRvX2Rw dV9jcnRjX3N0YXRlKHN0YXRlKTsKPj4gLQo+PiAtCWZvciAoaSA9IDA7IGkgPCBjc3RhdGUtPm51 bV9jb25uZWN0b3JzOyBpKyspIHsKPj4gLQkJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm4gPSBj c3RhdGUtPmNvbm5lY3RvcnNbaV07Cj4+IC0KPj4gLQkJaWYgKGRwdV9jb25uZWN0b3JfZ2V0X3Rv cG9sb2d5X25hbWUoY29ubikgPT0KPj4gLQkJCQlEUFVfUk1fVE9QT0xPR1lfRFVBTFBJUEVfM0RN RVJHRV9EU0MpCj4+IC0JCQlpc18zZG11eF9kc2MgPSB0cnVlOwo+PiAtCX0KPj4gLQo+PiAtCXJl dHVybiBpc18zZG11eF9kc2M7Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyBpbnQgX2RwdV9jcnRjX3Nl dF9jcnRjX3JvaShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4+IC0JCXN0cnVjdCBkcm1fY3J0Y19z dGF0ZSAqc3RhdGUpCj4+IC17Cj4+IC0Jc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm47Cj4+IC0J c3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGU7Cj4+IC0Jc3RydWN0IGRwdV9j cnRjICpkcHVfY3J0YzsKPj4gLQlzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgKmNydGNfc3RhdGU7Cj4+ IC0Jc3RydWN0IGRwdV9yZWN0ICpjcnRjX3JvaTsKPj4gLQlpbnQgaSwgbnVtX2F0dGFjaGVkX2Nv bm5zID0gMDsKPj4gLQo+PiAtCWlmICghY3J0YyB8fCAhc3RhdGUpCj4+IC0JCXJldHVybiAtRUlO VkFMOwo+PiAtCj4+IC0JZHB1X2NydGMgPSB0b19kcHVfY3J0YyhjcnRjKTsKPj4gLQljcnRjX3N0 YXRlID0gdG9fZHB1X2NydGNfc3RhdGUoc3RhdGUpOwo+PiAtCWNydGNfcm9pID0gJmNydGNfc3Rh dGUtPmNydGNfcm9pOwo+PiAtCj4+IC0JZm9yX2VhY2hfb2xkX2Nvbm5lY3Rvcl9pbl9zdGF0ZShz dGF0ZS0+c3RhdGUsIGNvbm4sIGNvbm5fc3RhdGUsIGkpIHsKPj4gLQkJc3RydWN0IGRwdV9jb25u ZWN0b3Jfc3RhdGUgKmRwdV9jb25uX3N0YXRlOwo+PiAtCj4+IC0JCWlmICghY29ubl9zdGF0ZSB8 fCBjb25uX3N0YXRlLT5jcnRjICE9IGNydGMpCj4+IC0JCQljb250aW51ZTsKPj4gLQo+PiAtCQlp ZiAobnVtX2F0dGFjaGVkX2Nvbm5zKSB7Cj4+IC0JCQlEUFVfRVJST1IoCj4+IC0JCQkJImNydGMl ZDogdW5zdXBwb3J0ZWQ6IHJvaSBvbiBjcnRjIHcvID4xIGNvbm5lY3RvcnNcbiIsCj4+IC0JCQkJ CURSTUlEKGNydGMpKTsKPj4gLQkJCXJldHVybiAtRUlOVkFMOwo+PiAtCQl9Cj4+IC0JCSsrbnVt X2F0dGFjaGVkX2Nvbm5zOwo+PiAtCj4+IC0JCWRwdV9jb25uX3N0YXRlID0gdG9fZHB1X2Nvbm5l Y3Rvcl9zdGF0ZShjb25uX3N0YXRlKTsKPj4gLQo+PiAtCQkvKgo+PiAtCQkgKiBjdXJyZW50IGRy aXZlciBvbmx5IHN1cHBvcnRzIHNhbWUgY29ubmVjdG9yIGFuZCBjcnRjIHNpemUsCj4+IC0JCSAq IGJ1dCBpZiBzdXBwb3J0IGZvciBkaWZmZXJlbnQgc2l6ZXMgaXMgYWRkZWQsIGRyaXZlciBuZWVk cwo+PiAtCQkgKiB0byBjaGVjayB0aGUgY29ubmVjdG9yIHJvaSBoZXJlIHRvIG1ha2Ugc3VyZSBp cyBmdWxsIHNjcmVlbgo+PiAtCQkgKiBmb3IgZHNjIDNkLW11eCB0b3BvbG9neSB0aGF0IGRvZXNu J3Qgc3VwcG9ydCBwYXJ0aWFsIHVwZGF0ZS4KPj4gLQkJICovCj4+IC0JCWlmIChtZW1jbXAoJmRw dV9jb25uX3N0YXRlLT5yb2lzLCAmY3J0Y19zdGF0ZS0+dXNlcl9yb2lfbGlzdCwKPj4gLQkJCQlz aXplb2YoY3J0Y19zdGF0ZS0+dXNlcl9yb2lfbGlzdCkpKSB7Cj4+IC0JCQlEUFVfRVJST1IoIiVz OiBjcnRjIC0+IGNvbm4gcm9pIHNjYWxpbmcgdW5zdXBwb3J0ZWRcbiIsCj4+IC0JCQkJCWRwdV9j cnRjLT5uYW1lKTsKPj4gLQkJCXJldHVybiAtRUlOVkFMOwo+PiAtCQl9Cj4+IC0JfQo+PiAtCj4+ IC0JZHB1X2ttc19yZWN0X21lcmdlX3JlY3RhbmdsZXMoJmNydGNfc3RhdGUtPnVzZXJfcm9pX2xp c3QsIGNydGNfcm9pKTsKPj4gLQo+PiAtCURQVV9ERUJVRygiJXM6IGNydGMgcm9pICglZCwlZCwl ZCwlZClcbiIsIGRwdV9jcnRjLT5uYW1lLAo+PiAtCQkJY3J0Y19yb2ktPngsIGNydGNfcm9pLT55 LCBjcnRjX3JvaS0+dywgY3J0Y19yb2ktPmgpOwo+PiAtCj4+IC0JcmV0dXJuIDA7Cj4+IC19Cj4+ IC0KPj4gLXN0YXRpYyBpbnQgX2RwdV9jcnRjX2NoZWNrX2F1dG9yZWZyZXNoKHN0cnVjdCBkcm1f Y3J0YyAqY3J0YywKPj4gLQkJc3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSkKPj4gLXsKPj4g LQlzdHJ1Y3QgZHB1X2NydGMgKmRwdV9jcnRjOwo+PiAtCXN0cnVjdCBkcHVfY3J0Y19zdGF0ZSAq Y3J0Y19zdGF0ZTsKPj4gLQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubjsKPj4gLQlzdHJ1Y3Qg ZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZTsKPj4gLQlpbnQgaTsKPj4gLQo+PiAtCWlm ICghY3J0YyB8fCAhc3RhdGUpCj4+IC0JCXJldHVybiAtRUlOVkFMOwo+PiAtCj4+IC0JZHB1X2Ny dGMgPSB0b19kcHVfY3J0YyhjcnRjKTsKPj4gLQljcnRjX3N0YXRlID0gdG9fZHB1X2NydGNfc3Rh dGUoc3RhdGUpOwo+PiAtCj4+IC0JaWYgKGRwdV9rbXNfcmVjdF9pc19udWxsKCZjcnRjX3N0YXRl LT5jcnRjX3JvaSkpCj4+IC0JCXJldHVybiAwOwo+PiAtCj4+IC0JLyogcGFydGlhbCB1cGRhdGUg YWN0aXZlLCBjaGVjayBpZiBhdXRvcmVmcmVzaCBpcyBhbHNvIHJlcXVlc3RlZCAqLwo+PiAtCWZv cl9lYWNoX29sZF9jb25uZWN0b3JfaW5fc3RhdGUoc3RhdGUtPnN0YXRlLCBjb25uLCBjb25uX3N0 YXRlLCBpKSB7Cj4+IC0JCXVpbnQ2NF90IGF1dG9yZWZyZXNoOwo+PiAtCj4+IC0JCWlmICghY29u bl9zdGF0ZSB8fCBjb25uX3N0YXRlLT5jcnRjICE9IGNydGMpCj4+IC0JCQljb250aW51ZTsKPj4g LQo+PiAtCQlhdXRvcmVmcmVzaCA9IGRwdV9jb25uZWN0b3JfZ2V0X3Byb3BlcnR5KGNvbm5fc3Rh dGUsCj4+IC0JCQkJQ09OTkVDVE9SX1BST1BfQVVUT1JFRlJFU0gpOwo+PiAtCQlpZiAoYXV0b3Jl ZnJlc2gpIHsKPj4gLQkJCURQVV9FUlJPUigKPj4gLQkJCQkiJXM6IGF1dG9yZWZyZXNoICYgcGFy dGlhbCBjcnRjIHJvaSBpbmNvbXBhdGlibGUgJWxsdVxuIiwKPj4gLQkJCQkJZHB1X2NydGMtPm5h bWUsIGF1dG9yZWZyZXNoKTsKPj4gLQkJCXJldHVybiAtRUlOVkFMOwo+PiAtCQl9Cj4+IC0JfQo+ PiAtCj4+IC0JcmV0dXJuIDA7Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyBpbnQgX2RwdV9jcnRjX3Nl dF9sbV9yb2koc3RydWN0IGRybV9jcnRjICpjcnRjLAo+PiAtCQlzdHJ1Y3QgZHJtX2NydGNfc3Rh dGUgKnN0YXRlLCBpbnQgbG1faWR4KQo+PiAtewo+PiAtCXN0cnVjdCBkcHVfY3J0YyAqZHB1X2Ny dGM7Cj4+IC0Jc3RydWN0IGRwdV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOwo+PiAtCWNvbnN0IHN0 cnVjdCBkcHVfcmVjdCAqY3J0Y19yb2k7Cj4+IC0JY29uc3Qgc3RydWN0IGRwdV9yZWN0ICpsbV9i b3VuZHM7Cj4+IC0Jc3RydWN0IGRwdV9yZWN0ICpsbV9yb2k7Cj4+IC0KPj4gLQlpZiAoIWNydGMg fHwgIXN0YXRlIHx8IGxtX2lkeCA+PSBBUlJBWV9TSVpFKGNydGNfc3RhdGUtPmxtX2JvdW5kcykp Cj4+IC0JCXJldHVybiAtRUlOVkFMOwo+PiAtCj4+IC0JZHB1X2NydGMgPSB0b19kcHVfY3J0Yyhj cnRjKTsKPj4gLQljcnRjX3N0YXRlID0gdG9fZHB1X2NydGNfc3RhdGUoc3RhdGUpOwo+PiAtCWNy dGNfcm9pID0gJmNydGNfc3RhdGUtPmNydGNfcm9pOwo+PiAtCWxtX2JvdW5kcyA9ICZjcnRjX3N0 YXRlLT5sbV9ib3VuZHNbbG1faWR4XTsKPj4gLQlsbV9yb2kgPSAmY3J0Y19zdGF0ZS0+bG1fcm9p W2xtX2lkeF07Cj4+IC0KPj4gLQlpZiAoZHB1X2ttc19yZWN0X2lzX251bGwoY3J0Y19yb2kpKQo+ PiAtCQltZW1jcHkobG1fcm9pLCBsbV9ib3VuZHMsIHNpemVvZigqbG1fcm9pKSk7Cj4+IC0JZWxz ZQo+PiAtCQlkcHVfa21zX3JlY3RfaW50ZXJzZWN0KGNydGNfcm9pLCBsbV9ib3VuZHMsIGxtX3Jv aSk7Cj4+IC0KPj4gLQlEUFVfREVCVUcoIiVzOiBsbSVkIHJvaSAoJWQsJWQsJWQsJWQpXG4iLCBk cHVfY3J0Yy0+bmFtZSwgbG1faWR4LAo+PiAtCQkJbG1fcm9pLT54LCBsbV9yb2ktPnksIGxtX3Jv aS0+dywgbG1fcm9pLT5oKTsKPj4gLQo+PiAtCS8qCj4+IC0JICogcGFydGlhbCB1cGRhdGUgaXMg bm90IHN1cHBvcnRlZCB3aXRoIDNkbXV4IGRzYyBvciBkZXN0IHNjYWxlci4KPj4gLQkgKiBoZW5j ZSwgY3J0YyByb2kgbXVzdCBtYXRjaCB0aGUgbWl4ZXIgZGltZW5zaW9ucy4KPj4gLQkgKi8KPj4g LQlpZiAoY3J0Y19zdGF0ZS0+bnVtX2RzX2VuYWJsZWQgfHwKPj4gLQkJX2RwdV9jcnRjX3NldHVw X2lzXzNkbXV4X2RzYyhzdGF0ZSkpIHsKPj4gLQkJaWYgKG1lbWNtcChsbV9yb2ksIGxtX2JvdW5k cywgc2l6ZW9mKHN0cnVjdCBkcHVfcmVjdCkpKSB7Cj4+IC0JCQlEUFVfRVJST1IoIlVuc3VwcG9y dGVkOiBEZXN0IHNjYWxlci8zZCBtdXggRFNDICsgUFVcbiIpOwo+PiAtCQkJcmV0dXJuIC1FSU5W QUw7Cj4+IC0JCX0KPj4gLQl9Cj4+IC0KPj4gLQkvKiBpZiBhbnkgZGltZW5zaW9uIGlzIHplcm8s IGNsZWFyIGFsbCBkaW1lbnNpb25zIGZvciBjbGFyaXR5ICovCj4+IC0JaWYgKGRwdV9rbXNfcmVj dF9pc19udWxsKGxtX3JvaSkpCj4+IC0JCW1lbXNldChsbV9yb2ksIDAsIHNpemVvZigqbG1fcm9p KSk7Cj4+IC0KPj4gLQlyZXR1cm4gMDsKPj4gLX0KPj4gLQo+PiAtc3RhdGljIHUzMiBfZHB1X2Ny dGNfZ2V0X2Rpc3BsYXlzX2FmZmVjdGVkKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPj4gLQkJc3Ry dWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSkKPj4gLXsKPj4gLQlzdHJ1Y3QgZHB1X2NydGMgKmRw dV9jcnRjOwo+PiAtCXN0cnVjdCBkcHVfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKPj4gLQl1MzIg ZGlzcF9iaXRtYXNrID0gMDsKPj4gLQlpbnQgaTsKPj4gLQo+PiAtCWRwdV9jcnRjID0gdG9fZHB1 X2NydGMoY3J0Yyk7Cj4+IC0JY3J0Y19zdGF0ZSA9IHRvX2RwdV9jcnRjX3N0YXRlKHN0YXRlKTsK Pj4gLQo+PiAtCS8qIHBpbmdwb25nIHNwbGl0OiBvbmUgUk9JLCBvbmUgTE0sIHR3byBwaHlzaWNh bCBkaXNwbGF5cyAqLwo+PiAtCWlmIChjcnRjX3N0YXRlLT5pc19wcHNwbGl0KSB7Cj4+IC0JCXUz MiBsbV9zcGxpdF93aWR0aCA9IGNydGNfc3RhdGUtPmxtX2JvdW5kc1swXS53IC8gMjsKPj4gLQkJ c3RydWN0IGRwdV9yZWN0ICpyb2kgPSAmY3J0Y19zdGF0ZS0+bG1fcm9pWzBdOwo+PiAtCj4+IC0J CWlmIChkcHVfa21zX3JlY3RfaXNfbnVsbChyb2kpKQo+PiAtCQkJZGlzcF9iaXRtYXNrID0gMDsK Pj4gLQkJZWxzZSBpZiAoKHUzMilyb2ktPnggKyAodTMyKXJvaS0+dyA8PSBsbV9zcGxpdF93aWR0 aCkKPj4gLQkJCWRpc3BfYml0bWFzayA9IEJJVCgwKTsJCS8qIGxlZnQgb25seSAqLwo+PiAtCQll bHNlIGlmIChyb2ktPnggPj0gbG1fc3BsaXRfd2lkdGgpCj4+IC0JCQlkaXNwX2JpdG1hc2sgPSBC SVQoMSk7CQkvKiByaWdodCBvbmx5ICovCj4+IC0JCWVsc2UKPj4gLQkJCWRpc3BfYml0bWFzayA9 IEJJVCgwKSB8IEJJVCgxKTsgLyogbGVmdCBhbmQgcmlnaHQgKi8KPj4gLQl9IGVsc2Ugewo+PiAt CQlmb3IgKGkgPSAwOyBpIDwgZHB1X2NydGMtPm51bV9taXhlcnM7IGkrKykgewo+PiAtCQkJaWYg KCFkcHVfa21zX3JlY3RfaXNfbnVsbCgmY3J0Y19zdGF0ZS0+bG1fcm9pW2ldKSkKPj4gLQkJCQlk aXNwX2JpdG1hc2sgfD0gQklUKGkpOwo+PiAtCQl9Cj4+IC0JfQo+PiAtCj4+IC0JRFBVX0RFQlVH KCJhZmZlY3RlZCBkaXNwbGF5cyAweCV4XG4iLCBkaXNwX2JpdG1hc2spOwo+PiAtCj4+IC0JcmV0 dXJuIGRpc3BfYml0bWFzazsKPj4gLX0KPj4gLQo+PiAtc3RhdGljIGludCBfZHB1X2NydGNfY2hl Y2tfcm9pc19jZW50ZXJlZF9hbmRfc3ltbWV0cmljKHN0cnVjdCAKPj4gZHJtX2NydGMgKmNydGMs Cj4+IC0JCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUpCj4+IC17Cj4+IC0Jc3RydWN0IGRw dV9jcnRjICpkcHVfY3J0YzsKPj4gLQlzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgKmNydGNfc3RhdGU7 Cj4+IC0JY29uc3Qgc3RydWN0IGRwdV9yZWN0ICpyb2lbQ1JUQ19EVUFMX01JWEVSU107Cj4+IC0K Pj4gLQlpZiAoIWNydGMgfHwgIXN0YXRlKQo+PiAtCQlyZXR1cm4gLUVJTlZBTDsKPj4gLQo+PiAt CWRwdV9jcnRjID0gdG9fZHB1X2NydGMoY3J0Yyk7Cj4+IC0JY3J0Y19zdGF0ZSA9IHRvX2RwdV9j cnRjX3N0YXRlKHN0YXRlKTsKPj4gLQo+PiAtCWlmIChkcHVfY3J0Yy0+bnVtX21peGVycyA+IENS VENfRFVBTF9NSVhFUlMpIHsKPj4gLQkJRFBVX0VSUk9SKCIlczogdW5zdXBwb3J0ZWQgbnVtYmVy IG9mIG1peGVyczogJWRcbiIsCj4+IC0JCQkJZHB1X2NydGMtPm5hbWUsIGRwdV9jcnRjLT5udW1f bWl4ZXJzKTsKPj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4+IC0JfQo+PiAtCj4+IC0JLyoKPj4gLQkg KiBJZiB1c2luZyBwaW5ncG9uZyBzcGxpdDogb25lIFJPSSwgb25lIExNLCB0d28gcGh5c2ljYWwg ZGlzcGxheXMKPj4gLQkgKiB0aGVuIHRoZSBST0kgbXVzdCBiZSBjZW50ZXJlZCBvbiB0aGUgcGFu ZWwgc3BsaXQgYm91bmRhcnkgYW5kCj4+IC0JICogYmUgb2YgZXF1YWwgd2lkdGggYWNyb3NzIHRo ZSBzcGxpdC4KPj4gLQkgKi8KPj4gLQlpZiAoY3J0Y19zdGF0ZS0+aXNfcHBzcGxpdCkgewo+PiAt CQl1MTYgcGFuZWxfc3BsaXRfd2lkdGg7Cj4+IC0JCXUzMiBkaXNwbGF5X21hc2s7Cj4+IC0KPj4g LQkJcm9pWzBdID0gJmNydGNfc3RhdGUtPmxtX3JvaVswXTsKPj4gLQo+PiAtCQlpZiAoZHB1X2tt c19yZWN0X2lzX251bGwocm9pWzBdKSkKPj4gLQkJCXJldHVybiAwOwo+PiAtCj4+IC0JCWRpc3Bs YXlfbWFzayA9IF9kcHVfY3J0Y19nZXRfZGlzcGxheXNfYWZmZWN0ZWQoY3J0Yywgc3RhdGUpOwo+ PiAtCQlpZiAoZGlzcGxheV9tYXNrICE9IChCSVQoMCkgfCBCSVQoMSkpKQo+PiAtCQkJcmV0dXJu IDA7Cj4+IC0KPj4gLQkJcGFuZWxfc3BsaXRfd2lkdGggPSBjcnRjX3N0YXRlLT5sbV9ib3VuZHNb MF0udyAvIDI7Cj4+IC0JCWlmIChyb2lbMF0tPnggKyByb2lbMF0tPncgLyAyICE9IHBhbmVsX3Nw bGl0X3dpZHRoKSB7Cj4+IC0JCQlEUFVfRVJST1IoIiVzOiByb2kgeCAlZCB3ICVkIHNwbGl0ICVk XG4iLAo+PiAtCQkJCQlkcHVfY3J0Yy0+bmFtZSwgcm9pWzBdLT54LCByb2lbMF0tPncsCj4+IC0J CQkJCXBhbmVsX3NwbGl0X3dpZHRoKTsKPj4gLQkJCXJldHVybiAtRUlOVkFMOwo+PiAtCQl9Cj4+ IC0KPj4gLQkJcmV0dXJuIDA7Cj4+IC0JfQo+PiAtCj4+IC0JLyoKPj4gLQkgKiBPbiBjZXJ0YWlu IEhXLCBpZiB1c2luZyAyIExNLCBST0lzIG11c3QgYmUgc3BsaXQgZXZlbmx5IGJldHdlZW4gCj4+ IHRoZQo+PiAtCSAqIExNcyBhbmQgYmUgb2YgZXF1YWwgd2lkdGguCj4+IC0JICovCj4+IC0JaWYg KGRwdV9jcnRjLT5udW1fbWl4ZXJzIDwgMikKPj4gLQkJcmV0dXJuIDA7Cj4+IC0KPj4gLQlyb2lb MF0gPSAmY3J0Y19zdGF0ZS0+bG1fcm9pWzBdOwo+PiAtCXJvaVsxXSA9ICZjcnRjX3N0YXRlLT5s bV9yb2lbMV07Cj4+IC0KPj4gLQkvKiBpZiBvbmUgb2YgdGhlIHJvaSBpcyBudWxsIGl0J3MgYSBs ZWZ0L3JpZ2h0LW9ubHkgdXBkYXRlICovCj4+IC0JaWYgKGRwdV9rbXNfcmVjdF9pc19udWxsKHJv aVswXSkgfHwgZHB1X2ttc19yZWN0X2lzX251bGwocm9pWzFdKSkKPj4gLQkJcmV0dXJuIDA7Cj4+ IC0KPj4gLQkvKiBjaGVjayBsbSByb2lzIGFyZSBlcXVhbCB3aWR0aCAmIGZpcnN0IHJvaSBlbmRz IGF0IDJuZCByb2kgKi8KPj4gLQlpZiAocm9pWzBdLT54ICsgcm9pWzBdLT53ICE9IHJvaVsxXS0+ eCB8fCByb2lbMF0tPncgIT0gcm9pWzFdLT53KSB7Cj4+IC0JCURQVV9FUlJPUigKPj4gLQkJCSIl czogcm9pcyBub3QgY2VudGVyZWQgYW5kIHN5bW1ldHJpYzogcm9pMCB4ICVkIHcgJWQgcm9pMSB4 ICVkIHcgCj4+ICVkXG4iLAo+PiAtCQkJCWRwdV9jcnRjLT5uYW1lLCByb2lbMF0tPngsIHJvaVsw XS0+dywKPj4gLQkJCQlyb2lbMV0tPngsIHJvaVsxXS0+dyk7Cj4+IC0JCXJldHVybiAtRUlOVkFM Owo+PiAtCX0KPj4gLQo+PiAtCXJldHVybiAwOwo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgaW50IF9k cHVfY3J0Y19jaGVja19wbGFuZXNfd2l0aGluX2NydGNfcm9pKHN0cnVjdCBkcm1fY3J0YyAKPj4g KmNydGMsCj4+IC0JCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUpCj4+IC17Cj4+IC0Jc3Ry dWN0IGRwdV9jcnRjICpkcHVfY3J0YzsKPj4gLQlzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgKmNydGNf c3RhdGU7Cj4+IC0JY29uc3Qgc3RydWN0IGRwdV9yZWN0ICpjcnRjX3JvaTsKPj4gLQlzdHJ1Y3Qg ZHJtX3BsYW5lX3N0YXRlICpwc3RhdGU7Cj4+IC0Jc3RydWN0IGRybV9wbGFuZSAqcGxhbmU7Cj4+ IC0KPj4gLQlpZiAoIWNydGMgfHwgIXN0YXRlKQo+PiAtCQlyZXR1cm4gLUVJTlZBTDsKPj4gLQo+ PiAtCS8qCj4+IC0JICogUmVqZWN0IGNvbW1pdCBpZiBhIFBsYW5lIENSVEMgZGVzdGluYXRpb24g Y29vcmRpbmF0ZXMgZmFsbCAKPj4gb3V0c2lkZQo+PiAtCSAqIHRoZSBwYXJ0aWFsIENSVEMgUk9J LiBMTSBvdXRwdXQgaXMgZGV0ZXJtaW5lZCB2aWEgY29ubmVjdG9yIFJPSXMsCj4+IC0JICogaWYg dGhleSBhcmUgc3BlY2lmaWVkLCBub3QgUGxhbmUgQ1JUQyBST0lzLgo+PiAtCSAqLwo+PiAtCj4+ IC0JZHB1X2NydGMgPSB0b19kcHVfY3J0YyhjcnRjKTsKPj4gLQljcnRjX3N0YXRlID0gdG9fZHB1 X2NydGNfc3RhdGUoc3RhdGUpOwo+PiAtCWNydGNfcm9pID0gJmNydGNfc3RhdGUtPmNydGNfcm9p Owo+PiAtCj4+IC0JaWYgKGRwdV9rbXNfcmVjdF9pc19udWxsKGNydGNfcm9pKSkKPj4gLQkJcmV0 dXJuIDA7Cj4+IC0KPj4gLQlkcm1fYXRvbWljX2NydGNfc3RhdGVfZm9yX2VhY2hfcGxhbmUocGxh bmUsIHN0YXRlKSB7Cj4+IC0JCXN0cnVjdCBkcHVfcmVjdCBwbGFuZV9yb2ksIGludGVyc2VjdGlv bjsKPj4gLQo+PiAtCQlwc3RhdGUgPSBkcm1fYXRvbWljX2dldF9wbGFuZV9zdGF0ZShzdGF0ZS0+ c3RhdGUsIHBsYW5lKTsKPj4gLQkJaWYgKElTX0VSUl9PUl9OVUxMKHBzdGF0ZSkpIHsKPj4gLQkJ CWludCByYyA9IFBUUl9FUlIocHN0YXRlKTsKPj4gLQo+PiAtCQkJRFBVX0VSUk9SKCIlczogZmFp bGVkIHRvIGdldCBwbGFuZSVkIHN0YXRlLCAlZFxuIiwKPj4gLQkJCQkJZHB1X2NydGMtPm5hbWUs IHBsYW5lLT5iYXNlLmlkLCByYyk7Cj4+IC0JCQlyZXR1cm4gcmM7Cj4+IC0JCX0KPj4gLQo+PiAt CQlwbGFuZV9yb2kueCA9IHBzdGF0ZS0+Y3J0Y194Owo+PiAtCQlwbGFuZV9yb2kueSA9IHBzdGF0 ZS0+Y3J0Y195Owo+PiAtCQlwbGFuZV9yb2kudyA9IHBzdGF0ZS0+Y3J0Y193Owo+PiAtCQlwbGFu ZV9yb2kuaCA9IHBzdGF0ZS0+Y3J0Y19oOwo+PiAtCQlkcHVfa21zX3JlY3RfaW50ZXJzZWN0KGNy dGNfcm9pLCAmcGxhbmVfcm9pLCAmaW50ZXJzZWN0aW9uKTsKPj4gLQkJaWYgKCFkcHVfa21zX3Jl Y3RfaXNfZXF1YWwoJnBsYW5lX3JvaSwgJmludGVyc2VjdGlvbikpIHsKPj4gLQkJCURQVV9FUlJP UigKPj4gLQkJCQkiJXM6IHBsYW5lJWQgY3J0YyByb2kgKCVkLCVkLCVkLCVkKSBvdXRzaWRlIGNy dGMgcm9pIAo+PiAoJWQsJWQsJWQsJWQpXG4iLAo+PiAtCQkJCQlkcHVfY3J0Yy0+bmFtZSwgcGxh bmUtPmJhc2UuaWQsCj4+IC0JCQkJCXBsYW5lX3JvaS54LCBwbGFuZV9yb2kueSwKPj4gLQkJCQkJ cGxhbmVfcm9pLncsIHBsYW5lX3JvaS5oLAo+PiAtCQkJCQljcnRjX3JvaS0+eCwgY3J0Y19yb2kt PnksCj4+IC0JCQkJCWNydGNfcm9pLT53LCBjcnRjX3JvaS0+aCk7Cj4+IC0JCQlyZXR1cm4gLUUy QklHOwo+PiAtCQl9Cj4+IC0JfQo+PiAtCj4+IC0JcmV0dXJuIDA7Cj4+IC19Cj4+IC0KPj4gLXN0 YXRpYyBpbnQgX2RwdV9jcnRjX2NoZWNrX3JvaXMoc3RydWN0IGRybV9jcnRjICpjcnRjLAo+PiAt CQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnN0YXRlKQo+PiAtewo+PiAtCXN0cnVjdCBkcHVfY3J0 YyAqZHB1X2NydGM7Cj4+IC0JaW50IGxtX2lkeDsKPj4gLQlpbnQgcmM7Cj4+IC0KPj4gLQlpZiAo IWNydGMgfHwgIXN0YXRlKQo+PiAtCQlyZXR1cm4gLUVJTlZBTDsKPj4gLQo+PiAtCWRwdV9jcnRj ID0gdG9fZHB1X2NydGMoY3J0Yyk7Cj4+IC0KPj4gLQlyYyA9IF9kcHVfY3J0Y19zZXRfY3J0Y19y b2koY3J0Yywgc3RhdGUpOwo+PiAtCWlmIChyYykKPj4gLQkJcmV0dXJuIHJjOwo+PiAtCj4+IC0J cmMgPSBfZHB1X2NydGNfY2hlY2tfYXV0b3JlZnJlc2goY3J0Yywgc3RhdGUpOwo+PiAtCWlmIChy YykKPj4gLQkJcmV0dXJuIHJjOwo+PiAtCj4+IC0JZm9yIChsbV9pZHggPSAwOyBsbV9pZHggPCBk cHVfY3J0Yy0+bnVtX21peGVyczsgbG1faWR4KyspIHsKPj4gLQkJcmMgPSBfZHB1X2NydGNfc2V0 X2xtX3JvaShjcnRjLCBzdGF0ZSwgbG1faWR4KTsKPj4gLQkJaWYgKHJjKQo+PiAtCQkJcmV0dXJu IHJjOwo+PiAtCX0KPj4gLQo+PiAtCXJjID0gX2RwdV9jcnRjX2NoZWNrX3JvaXNfY2VudGVyZWRf YW5kX3N5bW1ldHJpYyhjcnRjLCBzdGF0ZSk7Cj4+IC0JaWYgKHJjKQo+PiAtCQlyZXR1cm4gcmM7 Cj4+IC0KPj4gLQlyYyA9IF9kcHVfY3J0Y19jaGVja19wbGFuZXNfd2l0aGluX2NydGNfcm9pKGNy dGMsIHN0YXRlKTsKPj4gLQlpZiAocmMpCj4+IC0JCXJldHVybiByYzsKPj4gLQo+PiAtCXJldHVy biAwOwo+PiAtfQo+PiAtCj4+ICBzdGF0aWMgdm9pZCBfZHB1X2NydGNfcHJvZ3JhbV9sbV9vdXRw dXRfcm9pKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPj4gIHsKPj4gIAlzdHJ1Y3QgZHB1X2NydGMg KmRwdV9jcnRjOwo+PiAgCXN0cnVjdCBkcHVfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKPj4gLQlj b25zdCBzdHJ1Y3QgZHB1X3JlY3QgKmxtX3JvaTsKPj4gLQlzdHJ1Y3QgZHB1X2h3X21peGVyICpo d19sbTsKPj4gIAlpbnQgbG1faWR4LCBsbV9ob3Jpel9wb3NpdGlvbjsKPj4gCj4+IC0JaWYgKCFj cnRjKQo+PiAtCQlyZXR1cm47Cj4+IC0KPj4gIAlkcHVfY3J0YyA9IHRvX2RwdV9jcnRjKGNydGMp Owo+PiAgCWNydGNfc3RhdGUgPSB0b19kcHVfY3J0Y19zdGF0ZShjcnRjLT5zdGF0ZSk7Cj4+IAo+ PiAgCWxtX2hvcml6X3Bvc2l0aW9uID0gMDsKPj4gIAlmb3IgKGxtX2lkeCA9IDA7IGxtX2lkeCA8 IGRwdV9jcnRjLT5udW1fbWl4ZXJzOyBsbV9pZHgrKykgewo+PiArCQljb25zdCBzdHJ1Y3QgZHB1 X3JlY3QgKmxtX3JvaSA9ICZjcnRjX3N0YXRlLT5sbV9ib3VuZHNbbG1faWR4XTsKPj4gKwkJc3Ry dWN0IGRwdV9od19taXhlciAqaHdfbG0gPSBkcHVfY3J0Yy0+bWl4ZXJzW2xtX2lkeF0uaHdfbG07 Cj4+ICAJCXN0cnVjdCBkcHVfaHdfbWl4ZXJfY2ZnIGNmZzsKPj4gCj4+IC0JCWxtX3JvaSA9ICZj cnRjX3N0YXRlLT5sbV9yb2lbbG1faWR4XTsKPj4gLQkJaHdfbG0gPSBkcHVfY3J0Yy0+bWl4ZXJz W2xtX2lkeF0uaHdfbG07Cj4+IC0KPj4gLQkJRFBVX0VWVDMyKERSTUlEKGNydGNfc3RhdGUtPmJh c2UuY3J0YyksIGxtX2lkeCwKPj4gLQkJCWxtX3JvaS0+eCwgbG1fcm9pLT55LCBsbV9yb2ktPncs IGxtX3JvaS0+aCk7Cj4+IC0KPj4gIAkJaWYgKGRwdV9rbXNfcmVjdF9pc19udWxsKGxtX3JvaSkp Cj4+ICAJCQljb250aW51ZTsKPj4gCj4+IC0JCWh3X2xtLT5jZmcub3V0X3dpZHRoID0gbG1fcm9p LT53Owo+PiAtCQlod19sbS0+Y2ZnLm91dF9oZWlnaHQgPSBsbV9yb2ktPmg7Cj4+IC0JCWh3X2xt LT5jZmcucmlnaHRfbWl4ZXIgPSBsbV9ob3Jpel9wb3NpdGlvbjsKPj4gLQo+PiAgCQljZmcub3V0 X3dpZHRoID0gbG1fcm9pLT53Owo+PiAgCQljZmcub3V0X2hlaWdodCA9IGxtX3JvaS0+aDsKPj4g IAkJY2ZnLnJpZ2h0X21peGVyID0gbG1faG9yaXpfcG9zaXRpb24rKzsKPj4gQEAgLTEzNjEsNzAg KzkyMCw3IEBAIHN0YXRpYyB2b2lkIF9kcHVfY3J0Y19ibGVuZF9zZXR1cF9taXhlcihzdHJ1Y3Qg Cj4+IGRybV9jcnRjICpjcnRjLAo+PiAgCQkJCQltaXhlciwgJmNzdGF0ZS0+ZGltX2xheWVyW2ld KTsKPj4gIAl9Cj4+IAo+PiAtCV9kcHVfY3J0Y19wcm9ncmFtX2xtX291dHB1dF9yb2koY3J0Yyk7 Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyB2b2lkIF9kcHVfY3J0Y19zd2FwX21peGVyc19mb3Jfcmln aHRfcGFydGlhbF91cGRhdGUoCj4+IC0JCXN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPj4gLXsKPj4g LQlzdHJ1Y3QgZHB1X2NydGMgKmRwdV9jcnRjOwo+PiAtCXN0cnVjdCBkcHVfY3J0Y19zdGF0ZSAq Y3N0YXRlOwo+PiAtCXN0cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYzsKPj4gLQlib29sIGlzX3Jp Z2h0X29ubHk7Cj4+IC0JYm9vbCBlbmNvZGVyX2luX2RzY19tZXJnZSA9IGZhbHNlOwo+PiAtCj4+ IC0JaWYgKCFjcnRjIHx8ICFjcnRjLT5zdGF0ZSkKPj4gLQkJcmV0dXJuOwo+PiAtCj4+IC0JZHB1 X2NydGMgPSB0b19kcHVfY3J0YyhjcnRjKTsKPj4gLQljc3RhdGUgPSB0b19kcHVfY3J0Y19zdGF0 ZShjcnRjLT5zdGF0ZSk7Cj4+IC0KPj4gLQlpZiAoZHB1X2NydGMtPm51bV9taXhlcnMgIT0gQ1JU Q19EVUFMX01JWEVSUykKPj4gLQkJcmV0dXJuOwo+PiAtCj4+IC0JZHJtX2Zvcl9lYWNoX2VuY29k ZXIoZHJtX2VuYywgY3J0Yy0+ZGV2KSB7Cj4+IC0JCWlmIChkcm1fZW5jLT5jcnRjID09IGNydGMg JiYKPj4gLQkJCQlkcHVfZW5jb2Rlcl9pc19kc2NfbWVyZ2UoZHJtX2VuYykpIHsKPj4gLQkJCWVu Y29kZXJfaW5fZHNjX21lcmdlID0gdHJ1ZTsKPj4gLQkJCWJyZWFrOwo+PiAtCQl9Cj4+IC0JfQo+ PiAtCj4+IC0JLyoqCj4+IC0JICogRm9yIHJpZ2h0LW9ubHkgcGFydGlhbCB1cGRhdGUgd2l0aCBE U0MgbWVyZ2UsIHdlIHN3YXAgTE0wICYgTE0xLgo+PiAtCSAqIFRoaXMgaXMgZHVlIHRvIHR3byBy ZWFzb25zOgo+PiAtCSAqIC0gT24gODk5NiwgdGhlcmUgaXMgYSBEU0MgSFcgcmVxdWlyZW1lbnQg dGhhdCBpbiBEU0MgTWVyZ2UgTW9kZSwKPj4gLQkgKiAgIHRoZSBsZWZ0IERTQyBtdXN0IGJlIHVz ZWQsIHJpZ2h0IERTQyBjYW5ub3QgYmUgdXNlZCBhbG9uZS4KPj4gLQkgKiAgIEZvciByaWdodC1v bmx5IHBhcnRpYWwgdXBkYXRlLCB0aGlzIG1lYW5zIHN3YXAgbGF5ZXIgbWl4ZXJzIHRvIAo+PiBt YXAKPj4gLQkgKiAgIExlZnQgTE0gdG8gUmlnaHQgSU5URi4gT24gbGF0ZXIgSFcgdGhpcyB3YXMg cmVsYXhlZC4KPj4gLQkgKiAtIEluIERTQyBNZXJnZSBtb2RlLCB0aGUgcGh5c2ljYWwgZW5jb2Rl ciBoYXMgYWxyZWFkeSByZWdpc3RlcmVkCj4+IC0JICogICBQUDAgYXMgdGhlIG1hc3RlciwgdG8g c3dpdGNoIHRvIHJpZ2h0LW9ubHkgd2Ugd291bGQgaGF2ZSB0bwo+PiAtCSAqICAgcmVwcm9ncmFt IHRvIGJlIGRyaXZlbiBieSBQUDEgaW5zdGVhZC4KPj4gLQkgKiBUbyBzdXBwb3J0IGJvdGggY2Fz ZXMsIHdlIHByZWZlciB0byBzdXBwb3J0IHRoZSBtaXhlciBzd2FwIAo+PiBzb2x1dGlvbi4KPj4g LQkgKi8KPj4gLQlpZiAoIWVuY29kZXJfaW5fZHNjX21lcmdlKQo+PiAtCQlyZXR1cm47Cj4+IC0K Pj4gLQlpc19yaWdodF9vbmx5ID0gZHB1X2ttc19yZWN0X2lzX251bGwoJmNzdGF0ZS0+bG1fcm9p WzBdKSAmJgo+PiAtCQkJIWRwdV9rbXNfcmVjdF9pc19udWxsKCZjc3RhdGUtPmxtX3JvaVsxXSk7 Cj4+IC0KPj4gLQlpZiAoaXNfcmlnaHRfb25seSAmJiAhZHB1X2NydGMtPm1peGVyc19zd2FwcGVk KSB7Cj4+IC0JCS8qIHJpZ2h0LW9ubHkgdXBkYXRlIHN3YXAgbWl4ZXJzICovCj4+IC0JCXN3YXAo ZHB1X2NydGMtPm1peGVyc1swXSwgZHB1X2NydGMtPm1peGVyc1sxXSk7Cj4+IC0JCWRwdV9jcnRj LT5taXhlcnNfc3dhcHBlZCA9IHRydWU7Cj4+IC0JfSBlbHNlIGlmICghaXNfcmlnaHRfb25seSAm JiBkcHVfY3J0Yy0+bWl4ZXJzX3N3YXBwZWQpIHsKPj4gLQkJLyogbGVmdC1vbmx5IG9yIGZ1bGwg dXBkYXRlLCBzd2FwIGJhY2sgKi8KPj4gLQkJc3dhcChkcHVfY3J0Yy0+bWl4ZXJzWzBdLCBkcHVf Y3J0Yy0+bWl4ZXJzWzFdKTsKPj4gLQkJZHB1X2NydGMtPm1peGVyc19zd2FwcGVkID0gZmFsc2U7 Cj4+IC0JfQo+PiAtCj4+IC0JRFBVX0RFQlVHKCIlczogcmlnaHRfb25seSAlZCBzd2FwcGVkICVk LCBtaXgwLT5sbSVkLCBtaXgxLT5sbSVkXG4iLAo+PiAtCQkJZHB1X2NydGMtPm5hbWUsIGlzX3Jp Z2h0X29ubHksIGRwdV9jcnRjLT5taXhlcnNfc3dhcHBlZCwKPj4gLQkJCWRwdV9jcnRjLT5taXhl cnNbMF0uaHdfbG0tPmlkeCAtIExNXzAsCj4+IC0JCQlkcHVfY3J0Yy0+bWl4ZXJzWzFdLmh3X2xt LT5pZHggLSBMTV8wKTsKPj4gLQlEUFVfRVZUMzIoRFJNSUQoY3J0YyksIGlzX3JpZ2h0X29ubHks IGRwdV9jcnRjLT5taXhlcnNfc3dhcHBlZCwKPj4gLQkJCWRwdV9jcnRjLT5taXhlcnNbMF0uaHdf bG0tPmlkeCAtIExNXzAsCj4+IC0JCQlkcHVfY3J0Yy0+bWl4ZXJzWzFdLmh3X2xtLT5pZHggLSBM TV8wKTsKPj4gKwkgX2RwdV9jcnRjX3Byb2dyYW1fbG1fb3V0cHV0X3JvaShjcnRjKTsKPj4gIH0K Pj4gCj4+ICAvKioKPj4gQEAgLTE0NzIsMjcgKzk2OCwxNSBAQCBzdGF0aWMgdm9pZCBfZHB1X2Ny dGNfYmxlbmRfc2V0dXAoc3RydWN0IAo+PiBkcm1fY3J0YyAqY3J0YykKPj4gIAkJCWxtLT5vcHMu Y2xlYXJfZGltX2xheWVyKGxtKTsKPj4gIAl9Cj4+IAo+PiAtCV9kcHVfY3J0Y19zd2FwX21peGVy c19mb3JfcmlnaHRfcGFydGlhbF91cGRhdGUoY3J0Yyk7Cj4+IC0KPj4gIAkvKiBpbml0aWFsaXpl IHN0YWdlIGNmZyAqLwo+PiAgCW1lbXNldCgmZHB1X2NydGMtPnN0YWdlX2NmZywgMCwgc2l6ZW9m KHN0cnVjdCBkcHVfaHdfc3RhZ2VfY2ZnKSk7Cj4+IAo+PiAgCV9kcHVfY3J0Y19ibGVuZF9zZXR1 cF9taXhlcihjcnRjLCBkcHVfY3J0YywgbWl4ZXIpOwo+PiAKPj4gIAlmb3IgKGkgPSAwOyBpIDwg ZHB1X2NydGMtPm51bV9taXhlcnM7IGkrKykgewo+PiAtCQljb25zdCBzdHJ1Y3QgZHB1X3JlY3Qg KmxtX3JvaSA9ICZkcHVfY3J0Y19zdGF0ZS0+bG1fcm9pW2ldOwo+PiAtCj4+ICAJCWN0bCA9IG1p eGVyW2ldLmh3X2N0bDsKPj4gIAkJbG0gPSBtaXhlcltpXS5od19sbTsKPj4gCj4+IC0JCWlmIChk cHVfa21zX3JlY3RfaXNfbnVsbChsbV9yb2kpKSB7Cj4+IC0JCQlEUFVfREVCVUcoCj4+IC0JCQkJ IiVzOiBsbSVkIGxlYXZlIGN0bCVkIG1hc2sgMCBzaW5jZSBudWxsIHJvaVxuIiwKPj4gLQkJCQkJ ZHB1X2NydGMtPm5hbWUsIGxtLT5pZHggLSBMTV8wLAo+PiAtCQkJCQljdGwtPmlkeCAtIENUTF8w KTsKPj4gLQkJCWNvbnRpbnVlOwo+PiAtCQl9Cj4+IC0KPj4gIAkJbG0tPm9wcy5zZXR1cF9hbHBo YV9vdXQobG0sIG1peGVyW2ldLm1peGVyX29wX21vZGUpOwo+PiAKPj4gIAkJbWl4ZXJbaV0uZmx1 c2hfbWFzayB8PSBjdGwtPm9wcy5nZXRfYml0bWFza19taXhlcihjdGwsCj4+IEBAIC0xNTEwLDgg Kzk5NCw2IEBAIHN0YXRpYyB2b2lkIF9kcHVfY3J0Y19ibGVuZF9zZXR1cChzdHJ1Y3QgZHJtX2Ny dGMgCj4+ICpjcnRjKQo+PiAgCQljdGwtPm9wcy5zZXR1cF9ibGVuZHN0YWdlKGN0bCwgbWl4ZXJb aV0uaHdfbG0tPmlkeCwKPj4gIAkJCSZkcHVfY3J0Yy0+c3RhZ2VfY2ZnKTsKPj4gIAl9Cj4+IC0K Pj4gLQlfZHB1X2NydGNfcHJvZ3JhbV9sbV9vdXRwdXRfcm9pKGNydGMpOwo+PiAgfQo+PiAKPj4g IC8qKgo+PiBAQCAtMjY2NCwxNCArMjE0Niw5IEBAIHN0YXRpYyB2b2lkIF9kcHVfY3J0Y19zZXR1 cF9sbV9ib3VuZHMoc3RydWN0IAo+PiBkcm1fY3J0YyAqY3J0YywKPj4gIAkJY3N0YXRlLT5sbV9i b3VuZHNbaV0udyA9IGNydGNfc3BsaXRfd2lkdGg7Cj4+ICAJCWNzdGF0ZS0+bG1fYm91bmRzW2ld LmggPQo+PiAgCQkJZHB1X2NydGNfZ2V0X21peGVyX2hlaWdodChkcHVfY3J0YywgY3N0YXRlLCBh ZGpfbW9kZSk7Cj4+IC0JCW1lbWNweSgmY3N0YXRlLT5sbV9yb2lbaV0sICZjc3RhdGUtPmxtX2Jv dW5kc1tpXSwKPj4gLQkJCQlzaXplb2YoY3N0YXRlLT5sbV9yb2lbaV0pKTsKPj4gIAkJRFBVX0VW VDMyX1ZFUkJPU0UoRFJNSUQoY3J0YyksIGksCj4+ICAJCQkJY3N0YXRlLT5sbV9ib3VuZHNbaV0u eCwgY3N0YXRlLT5sbV9ib3VuZHNbaV0ueSwKPj4gIAkJCQljc3RhdGUtPmxtX2JvdW5kc1tpXS53 LCBjc3RhdGUtPmxtX2JvdW5kc1tpXS5oKTsKPj4gLQkJRFBVX0RFQlVHKCIlczogbG0lZCBibmQm cm9pICglZCwlZCwlZCwlZClcbiIsIGRwdV9jcnRjLT5uYW1lLCBpLAo+PiAtCQkJCWNzdGF0ZS0+ bG1fcm9pW2ldLngsIGNzdGF0ZS0+bG1fcm9pW2ldLnksCj4+IC0JCQkJY3N0YXRlLT5sbV9yb2lb aV0udywgY3N0YXRlLT5sbV9yb2lbaV0uaCk7Cj4+ICAJfQo+PiAKPj4gIAlkcm1fbW9kZV9kZWJ1 Z19wcmludG1vZGVsaW5lKGFkal9tb2RlKTsKPj4gQEAgLTMwMTksOCArMjQ5Niw2IEBAIHZvaWQg ZHB1X2NydGNfY29tbWl0X2tpY2tvZmYoc3RydWN0IGRybV9jcnRjIAo+PiAqY3J0YykKPj4gIAkJ ICogSWYgc28sIGl0IG1heSBkZWxheSBhbmQgZmx1c2ggYXQgYW4gaXJxIGV2ZW50IChlLmcuIHBw ZG9uZSkKPj4gIAkJICovCj4+ICAJCXBhcmFtcy5pbmxpbmVfcm90YXRlX3ByZWZpbGwgPSBjc3Rh dGUtPnNidWZfcHJlZmlsbF9saW5lOwo+PiAtCQlwYXJhbXMuYWZmZWN0ZWRfZGlzcGxheXMgPSBf ZHB1X2NydGNfZ2V0X2Rpc3BsYXlzX2FmZmVjdGVkKGNydGMsCj4+IC0JCQkJY3J0Yy0+c3RhdGUp Owo+PiAgCQlkcHVfZW5jb2Rlcl9wcmVwYXJlX2Zvcl9raWNrb2ZmKGVuY29kZXIsICZwYXJhbXMp Owo+PiAKPj4gIAkJLyoKPj4gQEAgLTM5MzEsMTIgKzM0MDYsNiBAQCBzdGF0aWMgaW50IGRwdV9j cnRjX2F0b21pY19jaGVjayhzdHJ1Y3QgCj4+IGRybV9jcnRjICpjcnRjLAo+PiAgCQl9Cj4+ICAJ fQo+PiAKPj4gLQlyYyA9IF9kcHVfY3J0Y19jaGVja19yb2lzKGNydGMsIHN0YXRlKTsKPj4gLQlp ZiAocmMpIHsKPj4gLQkJRFBVX0VSUk9SKCJjcnRjJWQgZmFpbGVkIHJvaSBjaGVjayAlZFxuIiwg Y3J0Yy0+YmFzZS5pZCwgcmMpOwo+PiAtCQlnb3RvIGVuZDsKPj4gLQl9Cj4+IC0KPj4gIGVuZDoK Pj4gIAlfZHB1X2NydGNfcnBfZnJlZV91bnVzZWQoJmNzdGF0ZS0+cnApOwo+PiAgCXJldHVybiBy YzsKPj4gQEAgLTQwNjYsOSArMzUzNSw2IEBAIHN0YXRpYyB2b2lkIGRwdV9jcnRjX2luc3RhbGxf cHJvcGVydGllcyhzdHJ1Y3QgCj4+IGRybV9jcnRjICpjcnRjLAo+PiAgCW1zbV9wcm9wZXJ0eV9p bnN0YWxsX2Jsb2IoJmRwdV9jcnRjLT5wcm9wZXJ0eV9pbmZvLCAiY2FwYWJpbGl0aWVzIiwKPj4g IAkJRFJNX01PREVfUFJPUF9JTU1VVEFCTEUsIENSVENfUFJPUF9JTkZPKTsKPj4gCj4+IC0JbXNt X3Byb3BlcnR5X2luc3RhbGxfdm9sYXRpbGVfcmFuZ2UoJmRwdV9jcnRjLT5wcm9wZXJ0eV9pbmZv LAo+PiAtCQkiZHB1X2RybV9yb2lfdjEiLCAweDAsIDAsIH4wLCAwLCBDUlRDX1BST1BfUk9JX1Yx KTsKPj4gLQo+PiAgCWRwdV9rbXNfaW5mb19yZXNldChpbmZvKTsKPj4gCj4+ICAJaWYgKGNhdGFs b2ctPmhhc19kaW1fbGF5ZXIpIHsKPj4gQEAgLTQyMTcsMTAgKzM2ODMsNiBAQCBzdGF0aWMgaW50 IGRwdV9jcnRjX2F0b21pY19zZXRfcHJvcGVydHkoc3RydWN0IAo+PiBkcm1fY3J0YyAqY3J0YywK Pj4gIAkJCQlfZHB1X2NydGNfc2V0X2RpbV9sYXllcl92MShjc3RhdGUsCj4+ICAJCQkJCQkJKHZv aWQgX191c2VyICopdmFsKTsKPj4gIAkJCQlicmVhazsKPj4gLQkJCWNhc2UgQ1JUQ19QUk9QX1JP SV9WMToKPj4gLQkJCQlyZXQgPSBfZHB1X2NydGNfc2V0X3JvaV92MShzdGF0ZSwKPj4gLQkJCQkJ CQkodm9pZCBfX3VzZXIgKil2YWwpOwo+PiAtCQkJCWJyZWFrOwo+PiAgCQkJY2FzZSBDUlRDX1BS T1BfREVTVF9TQ0FMRVI6Cj4+ICAJCQkJcmV0ID0gX2RwdV9jcnRjX3NldF9kZXN0X3NjYWxlcihk cHVfY3J0YywKPj4gIAkJCQkJCWNzdGF0ZSwgKHZvaWQgX191c2VyICopdmFsKTsKPj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmggCj4+IGIvZHJp dmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuaAo+PiBpbmRleCBiNjNkZjI0Li4x NWUzZWI2IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVf Y3J0Yy5oCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmgK Pj4gQEAgLTM0NSwxMyArMzQ1LDggQEAgc3RydWN0IGRwdV9jcnRjX3Jlc3Bvb2wgewo+PiAgICog QGlzX3Bwc3BsaXQgICAgOiBXaGV0aGVyIGN1cnJlbnQgdG9wb2xvZ3kgcmVxdWlyZXMgUFBTcGxp dCBzcGVjaWFsIAo+PiBoYW5kbGluZwo+PiAgICogQGJ3X2NvbnRyb2wgICAgOiB0cnVlIGlmIGJ3 L2NsayBjb250cm9sbGVkIGJ5IGNvcmUgYncvY2xrIAo+PiBwcm9wZXJ0aWVzCj4+ICAgKiBAYndf c3BsaXRfdm90ZSA6IHRydWUgaWYgYncgY29udHJvbGxlZCBieSBsbGNjL2RyYW0gYncgcHJvcGVy dGllcwo+PiAtICogQGNydGNfcm9pICAgICAgOiBDdXJyZW50IENSVEMgUk9JLiBQb3NzaWJseSBz dWItcmVjdGFuZ2xlIG9mIG1vZGUuCj4+IC0gKiAgICAgICAgICAgICAgICAgIE9yaWdpbiB0b3Ag bGVmdCBvZiBDUlRDLgo+PiAgICogQGxtX2JvdW5kcyAgICAgOiBMTSBib3VuZGFyaWVzIGJhc2Vk IG9uIGN1cnJlbnQgbW9kZSBmdWxsIAo+PiByZXNvbHV0aW9uLCBubyBST0kuCj4+ICAgKiAgICAg ICAgICAgICAgICAgIE9yaWdpbiB0b3AgbGVmdCBvZiBDUlRDLgo+PiAtICogQGxtX3JvaSAgICAg ICAgOiBDdXJyZW50IExNIFJPSSwgcG9zc2libHkgc3ViLXJlY3RhbmdsZSBvZiBtb2RlLgo+PiAt ICogICAgICAgICAgICAgICAgICBPcmlnaW4gdG9wIGxlZnQgb2YgQ1JUQy4KPj4gLSAqIEB1c2Vy X3JvaV9saXN0IDogTGlzdCBvZiB1c2VyJ3MgcmVxdWVzdGVkIFJPSXMgYXMgZnJvbSBzZXQgCj4+ IHByb3BlcnR5Cj4+ICAgKiBAcHJvcGVydHlfc3RhdGU6IExvY2FsIHN0b3JhZ2UgZm9yIG1zbV9w cm9wIHByb3BlcnRpZXMKPj4gICAqIEBwcm9wZXJ0eV92YWx1ZXM6IEN1cnJlbnQgY3J0YyBwcm9w ZXJ0eSB2YWx1ZXMKPj4gICAqIEBpbnB1dF9mZW5jZV90aW1lb3V0X25zIDogQ2FjaGVkIGlucHV0 IGZlbmNlIHRpbWVvdXQsIGluIG5zCj4+IEBAIC0zNzYsMTAgKzM3MSw3IEBAIHN0cnVjdCBkcHVf Y3J0Y19zdGF0ZSB7Cj4+ICAJYm9vbCBid19zcGxpdF92b3RlOwo+PiAKPj4gIAlib29sIGlzX3Bw c3BsaXQ7Cj4+IC0Jc3RydWN0IGRwdV9yZWN0IGNydGNfcm9pOwo+PiAgCXN0cnVjdCBkcHVfcmVj dCBsbV9ib3VuZHNbQ1JUQ19EVUFMX01JWEVSU107Cj4+IC0Jc3RydWN0IGRwdV9yZWN0IGxtX3Jv aVtDUlRDX0RVQUxfTUlYRVJTXTsKPj4gLQlzdHJ1Y3QgbXNtX3JvaV9saXN0IHVzZXJfcm9pX2xp c3Q7Cj4+IAo+PiAgCXN0cnVjdCBtc21fcHJvcGVydHlfc3RhdGUgcHJvcGVydHlfc3RhdGU7Cj4+ ICAJc3RydWN0IG1zbV9wcm9wZXJ0eV92YWx1ZSBwcm9wZXJ0eV92YWx1ZXNbQ1JUQ19QUk9QX0NP VU5UXTsKPj4gQEAgLTYwNSwxNCArNTk3LDQgQEAgaW50IGRwdV9jcnRjX3Jlc19hZGQoc3RydWN0 IGRybV9jcnRjX3N0YXRlIAo+PiAqc3RhdGUsIHUzMiB0eXBlLCB1NjQgdGFnLAo+PiAgICovCj4+ ICB2b2lkIGRwdV9jcnRjX3Jlc19wdXQoc3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSwgdTMy IHR5cGUsIHU2NCAKPj4gdGFnKTsKPj4gCj4+IC0vKioKPj4gLSAqIGRwdV9jcnRjX2dldF9jcnRj X3JvaSAtIHJldHJpZXZlIHRoZSBjcnRjX3JvaSBmcm9tIHRoZSBnaXZlbiBzdGF0ZSAKPj4gb2Jq ZWN0Cj4+IC0gKgl1c2VkIHRvIGFsbG93IHRoZSBwbGFuZXMgdG8gYWRqdXN0IHRoZWlyIGZpbmFs IGxtIG91dF94eSB2YWx1ZSBpbiAKPj4gdGhlCj4+IC0gKgljYXNlIG9mIHBhcnRpYWwgdXBkYXRl Cj4+IC0gKiBAY3J0Y19zdGF0ZTogUG9pbnRlciB0byBjcnRjIHN0YXRlCj4+IC0gKiBAY3J0Y19y b2k6IE91dHB1dCBwb2ludGVyIHRvIGNydGMgcm9pIGluIHRoZSBnaXZlbiBzdGF0ZQo+PiAtICov Cj4+IC12b2lkIGRwdV9jcnRjX2dldF9jcnRjX3JvaShzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnN0 YXRlLAo+PiAtCQljb25zdCBzdHJ1Y3QgZHB1X3JlY3QgKipjcnRjX3JvaSk7Cj4+IC0KPj4gICNl bmRpZiAvKiBfRFBVX0NSVENfSF8gKi8KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmMgCj4+IGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X2VuY29kZXIuYwo+PiBpbmRleCAzZDE2OGZhMC4uNjhjZjE2YSAxMDA2NDQKPj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXIuYwo+PiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlci5jCj4+IEBAIC0xOTUs OCArMTk1LDYgQEAgZW51bSBkcHVfZW5jX3JjX3N0YXRlcyB7Cj4+ICAgKiBAdG9wb2xvZ3k6ICAg ICAgICAgICAgICAgICAgIHRvcG9sb2d5IG9mIHRoZSBkaXNwbGF5Cj4+ICAgKiBAbW9kZV9zZXRf Y29tcGxldGU6ICAgICAgICAgIGZsYWcgdG8gaW5kaWNhdGUgbW9kZXNldCBjb21wbGV0aW9uCj4+ ICAgKiBAcnNjX2NvbmZpZzoJCQlyc2MgY29uZmlndXJhdGlvbiBmb3IgZGlzcGxheSB2dG90YWws IGZwcywgZXRjLgo+PiAtICogQGN1cl9jb25uX3JvaToJCWN1cnJlbnQgY29ubmVjdG9yIHJvaQo+ PiAtICogQHBydl9jb25uX3JvaToJCXByZXZpb3VzIGNvbm5lY3RvciByb2kgdG8gb3B0aW1pemUg aWYgdW5jaGFuZ2VkCj4+ICAgKiBAaWRsZV90aW1lb3V0OgkJaWRsZSB0aW1lb3V0IGR1cmF0aW9u IGluIG1pbGxpc2Vjb25kcwo+PiAgICovCj4+ICBzdHJ1Y3QgZHB1X2VuY29kZXJfdmlydCB7Cj4+ IEBAIC0yNDMsOCArMjQxLDYgQEAgc3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQgewo+PiAgCWJvb2wg bW9kZV9zZXRfY29tcGxldGU7Cj4+IAo+PiAgCXN0cnVjdCBkcHVfcnNjX2NtZF9jb25maWcgcnNj X2NvbmZpZzsKPj4gLQlzdHJ1Y3QgZHB1X3JlY3QgY3VyX2Nvbm5fcm9pOwo+PiAtCXN0cnVjdCBk cHVfcmVjdCBwcnZfY29ubl9yb2k7Cj4+IAo+PiAgCXUzMiBpZGxlX3RpbWVvdXQ7Cj4+ICB9Owo+ PiBAQCAtODY4LDE0ICs4NjQsOCBAQCBzdGF0aWMgYm9vbCAKPj4gX2RwdV9lbmNvZGVyX2RzY19p Y2hfcmVzZXRfb3ZlcnJpZGVfbmVlZGVkKGJvb2wgcHVfZW4sCj4+IAo+PiAgc3RhdGljIHZvaWQg X2RwdV9lbmNvZGVyX2RzY19waXBlX2NmZyhzdHJ1Y3QgZHB1X2h3X2RzYyAqaHdfZHNjLAo+PiAg CQlzdHJ1Y3QgZHB1X2h3X3Bpbmdwb25nICpod19wcCwgc3RydWN0IG1zbV9kaXNwbGF5X2RzY19p bmZvICpkc2MsCj4+IC0JCXUzMiBjb21tb25fbW9kZSwgYm9vbCBpY2hfcmVzZXQsIGJvb2wgZW5h YmxlKQo+PiArCQl1MzIgY29tbW9uX21vZGUsIGJvb2wgaWNoX3Jlc2V0KQo+PiAgewo+PiAtCWlm ICghZW5hYmxlKSB7Cj4+IC0JCWlmIChod19wcC0+b3BzLmRpc2FibGVfZHNjKQo+PiAtCQkJaHdf cHAtPm9wcy5kaXNhYmxlX2RzYyhod19wcCk7Cj4+IC0JCXJldHVybjsKPj4gLQl9Cj4+IC0KPj4g IAlpZiAoaHdfZHNjLT5vcHMuZHNjX2NvbmZpZykKPj4gIAkJaHdfZHNjLT5vcHMuZHNjX2NvbmZp Zyhod19kc2MsIGRzYywgY29tbW9uX21vZGUsIGljaF9yZXNldCk7Cj4+IAo+PiBAQCAtODg5LDI3 ICs4NzksOSBAQCBzdGF0aWMgdm9pZCBfZHB1X2VuY29kZXJfZHNjX3BpcGVfY2ZnKHN0cnVjdCAK Pj4gZHB1X2h3X2RzYyAqaHdfZHNjLAo+PiAgCQlod19wcC0+b3BzLmVuYWJsZV9kc2MoaHdfcHAp Owo+PiAgfQo+PiAKPj4gLXN0YXRpYyB2b2lkIF9kcHVfZW5jb2Rlcl9nZXRfY29ubmVjdG9yX3Jv aSgKPj4gLQkJc3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQgKmRwdV9lbmMsCj4+IC0JCXN0cnVjdCBk cHVfcmVjdCAqbWVyZ2VkX2Nvbm5fcm9pKQo+PiAtewo+PiAtCXN0cnVjdCBkcm1fY29ubmVjdG9y ICpkcm1fY29ubjsKPj4gLQlzdHJ1Y3QgZHB1X2Nvbm5lY3Rvcl9zdGF0ZSAqY19zdGF0ZTsKPj4g LQo+PiAtCWlmICghZHB1X2VuYyB8fCAhbWVyZ2VkX2Nvbm5fcm9pKQo+PiAtCQlyZXR1cm47Cj4+ IC0KPj4gLQlkcm1fY29ubiA9IGRwdV9lbmMtPnBoeXNfZW5jc1swXS0+Y29ubmVjdG9yOwo+PiAt Cj4+IC0JaWYgKCFkcm1fY29ubiB8fCAhZHJtX2Nvbm4tPnN0YXRlKQo+PiAtCQlyZXR1cm47Cj4+ IC0KPj4gLQljX3N0YXRlID0gdG9fZHB1X2Nvbm5lY3Rvcl9zdGF0ZShkcm1fY29ubi0+c3RhdGUp Owo+PiAtCWRwdV9rbXNfcmVjdF9tZXJnZV9yZWN0YW5nbGVzKCZjX3N0YXRlLT5yb2lzLCBtZXJn ZWRfY29ubl9yb2kpOwo+PiAtfQo+PiAtCj4+ICBzdGF0aWMgaW50IF9kcHVfZW5jb2Rlcl9kc2Nf bl9sbV8xX2VuY18xX2ludGYoc3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQgCj4+ICpkcHVfZW5jKQo+ PiAgewo+PiArCWludCBwaWNfd2lkdGgsIHBpY19oZWlnaHQ7Cj4+ICAJaW50IHRoaXNfZnJhbWVf c2xpY2VzOwo+PiAgCWludCBpbnRmX2lwX3csIGVuY19pcF93Owo+PiAgCWludCBpY2hfcmVzLCBk c2NfY29tbW9uX21vZGUgPSAwOwo+PiBAQCAtOTE3LDE4ICs4ODksMjIgQEAgc3RhdGljIGludCAK Pj4gX2RwdV9lbmNvZGVyX2RzY19uX2xtXzFfZW5jXzFfaW50ZihzdHJ1Y3QgZHB1X2VuY29kZXJf dmlydCAqZHB1X2VuYykKPj4gIAlzdHJ1Y3QgZHB1X2h3X3Bpbmdwb25nICpod19wcCA9IGRwdV9l bmMtPmh3X3BwWzBdOwo+PiAgCXN0cnVjdCBkcHVfaHdfZHNjICpod19kc2MgPSBkcHVfZW5jLT5o d19kc2NbMF07Cj4+ICAJc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMgKmVuY19tYXN0ZXIgPSBkcHVf ZW5jLT5jdXJfbWFzdGVyOwo+PiAtCWNvbnN0IHN0cnVjdCBkcHVfcmVjdCAqcm9pID0gJmRwdV9l bmMtPmN1cl9jb25uX3JvaTsKPj4gKwlzdHJ1Y3QgZHB1X2h3X21kcCAqaHdfbWRwX3RvcCAgPSBl bmNfbWFzdGVyLT5od19tZHB0b3A7Cj4+ICAJc3RydWN0IG1zbV9kaXNwbGF5X2RzY19pbmZvICpk c2MgPQo+PiAgCQkmZHB1X2VuYy0+bW9kZV9pbmZvLmNvbXBfaW5mby5kc2NfaW5mbzsKPj4gCj4+ IC0JaWYgKGRzYyA9PSBOVUxMIHx8IGh3X2RzYyA9PSBOVUxMIHx8IGh3X3BwID09IE5VTEwgfHwg IWVuY19tYXN0ZXIpIHsKPj4gKwlpZiAoZHNjID09IE5VTEwgfHwgaHdfZHNjID09IE5VTEwgfHwg aHdfcHAgPT0gTlVMTCB8fAo+PiArCQkJCQkJaHdfbWRwX3RvcCA9PSBOVUxMKSB7Cj4gCj4gSW5k ZW50IHNob3VsZCAgbGluZSB1cCB3aXRoIHRoZSBjb25kaXRpb25zIG9uIHRoZSBwcmV2aW91cyBs aW5lLCBpZToKPiAKPiAgICAgICAgIGlmIChkc2MgPT0gTlVMTCB8fCBod19kc2MgPT0gTlVMTCB8 fCBod19wcCA9PSBOVUxMIHx8Cj4gICAgICAgICAgICAgaHdfbWRwX3RvcCA9PSBOVUxMKSB7Cj4g Cj4gCj4gQWxzbywgeCA9PSBOVUxMIGlzIHVubmVjZXNzYXJ5LCBqdXN0IGRvICF4LiBGaW5hbGx5 LCBhcmUgYW55IG9mIHRoZXNlIAo+IGNvbmRpdGlvbnMKPiBhY3R1YWxseSBsaWtlbHk/IEF0IHRo ZSB2ZXJ5IGxlYXN0LCBkc2MgY2FuJ3QgcG9zc2libHkgYmUgTlVMTC4gVGhlcmUgCj4gYXJlIGEg bG90Cj4gb2YgZnVuY3Rpb25zIHRoYXQgc3RhcnQgd2l0aCBOVUxMIGNoZWNrcyBvbiB0aGUgaW5w dXQgcG9pbnRlcnMsIGJ1dCBpdCAKPiBzZWVtcwo+IGxpa2UgYSBsb3Qgb2YgdGhlbSBhcmUgc3Vw ZXJmbHVvdXMuIEl0IG1pZ2h0IGJlIHRpbWUgdG8gc3RhcnQgdHJpbW1pbmcgCj4gdGhlbS4KPiAK Q3VycmVudCB2ZXJzaW9uIG9mIHRoZSBkcml2ZXIgcmVsaWVzIGhlYXZpbHkgb24gdGhlIHBhcmFt ZXRlciAKdmFsaWRhdGlvbnMgdG8gZ3VhcmFudGVlIGdyYWNlZnVsCmV4aXRzIGFuZCB0byBhdm9p ZCBjcmFzaCBzdGFja3MgaW4gY2FzZSBvZiBOVUxMIHBvaW50ZXIgYWNjZXNzLiBJbiBzb21lIApw bGFjZXMsIHdlIGVuZCB1cApjYWxsaW5nIGZlYXR1cmUgeHh4X3NldHVwIGZ1bmN0aW9ucyBiZWZv cmUgY2hlY2tpbmcgZm9yIHRoZSBmZWF0dXJlIAphdmFpbGFiaWx0eSBmb3IgdGhlIHRhcmdldC4K CkxldCBtZSBjbGVhbiB1cCBzb21lIG9mIHRoZXNlIHVud2FudGVkIGNoZWNrcyByZWxhdGVkIHRv IHRoaXMgcGF0Y2ggYW5kIApzdWJtaXQgYSB2MiB2ZXJzaW9uLgo+IAo+PiAgCQlEUFVfRVJST1Jf RU5DKGRwdV9lbmMsICJpbnZhbGlkIHBhcmFtcyBmb3IgRFNDXG4iKTsKPj4gIAkJcmV0dXJuIC1F SU5WQUw7Cj4+ICAJfQo+PiAKPj4gLQlfZHB1X2VuY29kZXJfZHNjX3VwZGF0ZV9waWNfZGltKGRz Yywgcm9pLT53LCByb2ktPmgpOwo+PiArCXBpY193aWR0aCA9IGRzYy0+cGljX3dpZHRoOwo+PiAr CXBpY19oZWlnaHQgPSBkc2MtPnBpY19oZWlnaHQ7Cj4gCj4gVGhlc2UgbG9jYWxzIGFyZSB1bm5l Y2Vzc2FyeSwganVzdCB1c2UgZHNjLT5waWNfKiBkaXJlY3RseSBiZWxvdwo+IAo+PiAKPj4gLQl0 aGlzX2ZyYW1lX3NsaWNlcyA9IHJvaS0+dyAvIGRzYy0+c2xpY2Vfd2lkdGg7Cj4+ICsJX2RwdV9l bmNvZGVyX2RzY191cGRhdGVfcGljX2RpbShkc2MsIHBpY193aWR0aCwgcGljX2hlaWdodCk7Cj4+ ICsKPj4gKwl0aGlzX2ZyYW1lX3NsaWNlcyA9IHBpY193aWR0aCAvIGRzYy0+c2xpY2Vfd2lkdGg7 Cj4+ICAJaW50Zl9pcF93ID0gdGhpc19mcmFtZV9zbGljZXMgKiBkc2MtPnNsaWNlX3dpZHRoOwo+ PiAgCV9kcHVfZW5jb2Rlcl9kc2NfcGNsa19wYXJhbV9jYWxjKGRzYywgaW50Zl9pcF93KTsKPj4g Cj4+IEBAIC05NDEsMjA0ICs5MTcsMTMzIEBAIHN0YXRpYyBpbnQgCj4+IF9kcHVfZW5jb2Rlcl9k c2Nfbl9sbV8xX2VuY18xX2ludGYoc3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQgKmRwdV9lbmMpCj4+ ICAJCWRzY19jb21tb25fbW9kZSA9IERTQ19NT0RFX1ZJREVPOwo+PiAKPj4gIAlEUFVfREVCVUdf RU5DKGRwdV9lbmMsICJwaWNfdzogJWQgcGljX2g6ICVkIG1vZGU6JWRcbiIsCj4+IC0JCXJvaS0+ dywgcm9pLT5oLCBkc2NfY29tbW9uX21vZGUpOwo+PiAtCURQVV9FVlQzMihEUk1JRCgmZHB1X2Vu Yy0+YmFzZSksIHJvaS0+dywgcm9pLT5oLCBkc2NfY29tbW9uX21vZGUpOwo+PiArCQlwaWNfd2lk dGgsIHBpY19oZWlnaHQsIGRzY19jb21tb25fbW9kZSk7Cj4+ICsJRFBVX0VWVDMyKERSTUlEKCZk cHVfZW5jLT5iYXNlKSwgcGljX3dpZHRoLCBwaWNfaGVpZ2h0LAo+PiArCQkJZHNjX2NvbW1vbl9t b2RlKTsKPj4gCj4+ICAJX2RwdV9lbmNvZGVyX2RzY19waXBlX2NmZyhod19kc2MsIGh3X3BwLCBk c2MsIGRzY19jb21tb25fbW9kZSwKPj4gLQkJCWljaF9yZXMsIHRydWUpOwo+PiArCQkJaWNoX3Jl cyk7Cj4+IAo+PiAgCXJldHVybiAwOwo+PiAgfQo+PiAtCj4+IC1zdGF0aWMgaW50IF9kcHVfZW5j b2Rlcl9kc2NfMl9sbV8yX2VuY18yX2ludGYoc3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQgCj4+ICpk cHVfZW5jLAo+PiAtCQlzdHJ1Y3QgZHB1X2VuY29kZXJfa2lja29mZl9wYXJhbXMgKnBhcmFtcykK Pj4gK3N0YXRpYyBpbnQgX2RwdV9lbmNvZGVyX2RzY18yX2xtXzJfZW5jXzJfaW50ZihzdHJ1Y3Qg ZHB1X2VuY29kZXJfdmlydCAKPj4gKmRwdV9lbmMpCj4+ICB7Cj4+ICsJaW50IHBpY193aWR0aCwg cGljX2hlaWdodDsKPj4gIAlpbnQgdGhpc19mcmFtZV9zbGljZXM7Cj4+ICAJaW50IGludGZfaXBf dywgZW5jX2lwX3c7Cj4+ICAJaW50IGljaF9yZXMsIGRzY19jb21tb25fbW9kZTsKPj4gCj4+ICAJ c3RydWN0IGRwdV9lbmNvZGVyX3BoeXMgKmVuY19tYXN0ZXIgPSBkcHVfZW5jLT5jdXJfbWFzdGVy Owo+PiAtCWNvbnN0IHN0cnVjdCBkcHVfcmVjdCAqcm9pID0gJmRwdV9lbmMtPmN1cl9jb25uX3Jv aTsKPj4gLQlzdHJ1Y3QgZHB1X2h3X2RzYyAqaHdfZHNjW01BWF9DSEFOTkVMU19QRVJfRU5DXTsK Pj4gLQlzdHJ1Y3QgZHB1X2h3X3Bpbmdwb25nICpod19wcFtNQVhfQ0hBTk5FTFNfUEVSX0VOQ107 Cj4+IC0Jc3RydWN0IG1zbV9kaXNwbGF5X2RzY19pbmZvIGRzY1tNQVhfQ0hBTk5FTFNfUEVSX0VO Q107Cj4+IC0JYm9vbCBoYWxmX3BhbmVsX3BhcnRpYWxfdXBkYXRlOwo+PiAtCWludCBpOwo+PiAt Cj4+IC0JZm9yIChpID0gMDsgaSA8IE1BWF9DSEFOTkVMU19QRVJfRU5DOyBpKyspIHsKPj4gLQkJ aHdfcHBbaV0gPSBkcHVfZW5jLT5od19wcFtpXTsKPj4gLQkJaHdfZHNjW2ldID0gZHB1X2VuYy0+ aHdfZHNjW2ldOwo+PiArCXN0cnVjdCBkcHVfaHdfZHNjICpsX2h3X2RzYyA9IGRwdV9lbmMtPmh3 X2RzY1swXTsKPj4gKwlzdHJ1Y3QgZHB1X2h3X2RzYyAqcl9od19kc2MgPSBkcHVfZW5jLT5od19k c2NbMV07Cj4+ICsJc3RydWN0IGRwdV9od19waW5ncG9uZyAqbF9od19wcCA9IGRwdV9lbmMtPmh3 X3BwWzBdOwo+PiArCXN0cnVjdCBkcHVfaHdfcGluZ3BvbmcgKnJfaHdfcHAgPSBkcHVfZW5jLT5o d19wcFsxXTsKPj4gKwlzdHJ1Y3QgZHB1X2h3X21kcCAqaHdfbWRwX3RvcCAgPSBlbmNfbWFzdGVy LT5od19tZHB0b3A7Cj4+ICsJc3RydWN0IG1zbV9kaXNwbGF5X2RzY19pbmZvICpkc2MgPQo+PiAr CQkmZHB1X2VuYy0+bW9kZV9pbmZvLmNvbXBfaW5mby5kc2NfaW5mbzsKPj4gCj4+IC0JCWlmICgh aHdfcHBbaV0gfHwgIWh3X2RzY1tpXSkgewo+PiAtCQkJRFBVX0VSUk9SX0VOQyhkcHVfZW5jLCAi aW52YWxpZCBwYXJhbXMgZm9yIERTQ1xuIik7Cj4+IC0JCQlyZXR1cm4gLUVJTlZBTDsKPj4gLQkJ fQo+PiArCWlmIChsX2h3X2RzYyA9PSBOVUxMIHx8IHJfaHdfZHNjID09IE5VTEwgfHwgaHdfbWRw X3RvcCA9PSBOVUxMIHx8Cj4+ICsJCWxfaHdfcHAgPT0gTlVMTCB8fCByX2h3X3BwID09IE5VTEwp IHsKPiAKPiBTYW1lIGNvbW1lbnQgd3J0IHRoZSBOVUxMIGNoZWNrcwo+IAo+PiArCQlEUFVfRVJS T1JfRU5DKGRwdV9lbmMsICJpbnZhbGlkIHBhcmFtcyBmb3IgRFNDXG4iKTsKPj4gKwkJcmV0dXJu IC1FSU5WQUw7Cj4+ICAJfQo+PiAKPj4gLQloYWxmX3BhbmVsX3BhcnRpYWxfdXBkYXRlID0KPj4g LQkJCWh3ZWlnaHRfbG9uZyhwYXJhbXMtPmFmZmVjdGVkX2Rpc3BsYXlzKSA9PSAxOwo+PiAtCj4+ IC0JZHNjX2NvbW1vbl9tb2RlID0gMDsKPj4gLQlpZiAoIWhhbGZfcGFuZWxfcGFydGlhbF91cGRh dGUpCj4+IC0JCWRzY19jb21tb25fbW9kZSB8PSBEU0NfTU9ERV9TUExJVF9QQU5FTDsKPj4gLQlp ZiAoZW5jX21hc3Rlci0+aW50Zl9tb2RlID09IElOVEZfTU9ERV9WSURFTykKPj4gLQkJZHNjX2Nv bW1vbl9tb2RlIHw9IERTQ19NT0RFX1ZJREVPOwo+PiAtCj4+IC0JbWVtY3B5KCZkc2NbMF0sICZk cHVfZW5jLT5tb2RlX2luZm8uY29tcF9pbmZvLmRzY19pbmZvLCAKPj4gc2l6ZW9mKGRzY1swXSkp Owo+PiAtCW1lbWNweSgmZHNjWzFdLCAmZHB1X2VuYy0+bW9kZV9pbmZvLmNvbXBfaW5mby5kc2Nf aW5mbywgCj4+IHNpemVvZihkc2NbMV0pKTsKPj4gLQo+PiAtCS8qCj4+IC0JICogU2luY2UgYm90 aCBEU0MgdXNlIHNhbWUgcGljIGRpbWVuc2lvbiwgc2V0IHNhbWUgcGljIGRpbWVuc2lvbgo+PiAt CSAqIHRvIGJvdGggRFNDIHN0cnVjdHVyZXMuCj4+IC0JICovCj4+IC0JX2RwdV9lbmNvZGVyX2Rz Y191cGRhdGVfcGljX2RpbSgmZHNjWzBdLCByb2ktPncsIHJvaS0+aCk7Cj4+IC0JX2RwdV9lbmNv ZGVyX2RzY191cGRhdGVfcGljX2RpbSgmZHNjWzFdLCByb2ktPncsIHJvaS0+aCk7Cj4+ICsJcGlj X3dpZHRoID0gZHNjLT5waWNfd2lkdGggKiBkcHVfZW5jLT5kaXNwbGF5X251bV9vZl9oX3RpbGVz Owo+PiArCXBpY19oZWlnaHQgPSBkc2MtPnBpY19oZWlnaHQ7Cj4gCj4gTm8gbmVlZCBmb3IgcGlj X2hlaWdodAo+IAo+PiAKPj4gLQl0aGlzX2ZyYW1lX3NsaWNlcyA9IHJvaS0+dyAvIGRzY1swXS5z bGljZV93aWR0aDsKPj4gLQlpbnRmX2lwX3cgPSB0aGlzX2ZyYW1lX3NsaWNlcyAqIGRzY1swXS5z bGljZV93aWR0aDsKPj4gKwlfZHB1X2VuY29kZXJfZHNjX3VwZGF0ZV9waWNfZGltKGRzYywgcGlj X3dpZHRoLCBwaWNfaGVpZ2h0KTsKPj4gCj4+IC0JaWYgKCFoYWxmX3BhbmVsX3BhcnRpYWxfdXBk YXRlKQo+PiAtCQlpbnRmX2lwX3cgLz0gMjsKPj4gKwl0aGlzX2ZyYW1lX3NsaWNlcyA9IHBpY193 aWR0aCAvIGRzYy0+c2xpY2Vfd2lkdGg7Cj4+ICsJaW50Zl9pcF93ID0gdGhpc19mcmFtZV9zbGlj ZXMgKiBkc2MtPnNsaWNlX3dpZHRoOwo+PiAKPj4gLQkvKgo+PiAtCSAqIEluIHRoaXMgdG9wb2xv Z3kgd2hlbiBib3RoIGludGVyZmFjZXMgYXJlIGFjdGl2ZSwgdGhleSBoYXZlIHNhbWUKPj4gLQkg KiBsb2FkIHNvIGludGZfaXBfdyB3aWxsIGJlIHNhbWUuCj4+IC0JICovCj4+IC0JX2RwdV9lbmNv ZGVyX2RzY19wY2xrX3BhcmFtX2NhbGMoJmRzY1swXSwgaW50Zl9pcF93KTsKPj4gLQlfZHB1X2Vu Y29kZXJfZHNjX3BjbGtfcGFyYW1fY2FsYygmZHNjWzFdLCBpbnRmX2lwX3cpOwo+PiArCWludGZf aXBfdyAvPSAyOwo+PiArCV9kcHVfZW5jb2Rlcl9kc2NfcGNsa19wYXJhbV9jYWxjKGRzYywgaW50 Zl9pcF93KTsKPj4gCj4+IC0JLyoKPj4gLQkgKiBJbiB0aGlzIHRvcG9sb2d5LCBzaW5jZSB0aGVy ZSBpcyBubyBkc2NfbWVyZ2UsIHVuY29tcHJlc3NlZCBpbnB1dAo+PiAtCSAqIHRvIGVuY29kZXIg YW5kIGludGVyZmFjZSBpcyBzYW1lLgo+PiAtCSAqLwo+PiAgCWVuY19pcF93ID0gaW50Zl9pcF93 Owo+PiAtCV9kcHVfZW5jb2Rlcl9kc2NfaW5pdGlhbF9saW5lX2NhbGMoJmRzY1swXSwgZW5jX2lw X3cpOwo+PiAtCV9kcHVfZW5jb2Rlcl9kc2NfaW5pdGlhbF9saW5lX2NhbGMoJmRzY1sxXSwgZW5j X2lwX3cpOwo+PiArCV9kcHVfZW5jb2Rlcl9kc2NfaW5pdGlhbF9saW5lX2NhbGMoZHNjLCBlbmNf aXBfdyk7Cj4+IAo+PiAtCS8qCj4+IC0JICogX19pc19pY2hfcmVzZXRfb3ZlcnJpZGVfbmVlZGVk IHNob3VsZCBiZSBjYWxsZWQgb25seSBhZnRlcgo+PiAtCSAqIHVwZGF0aW5nIHBpYyBkaW1lbnNp b24sIG1kc3NfcGFuZWxfZHNjX3VwZGF0ZV9waWNfZGltLgo+PiAtCSAqLwo+PiAtCWljaF9yZXMg PSBfZHB1X2VuY29kZXJfZHNjX2ljaF9yZXNldF9vdmVycmlkZV9uZWVkZWQoCj4+IC0JCQloYWxm X3BhbmVsX3BhcnRpYWxfdXBkYXRlLCAmZHNjWzBdKTsKPj4gKwlpY2hfcmVzID0gX2RwdV9lbmNv ZGVyX2RzY19pY2hfcmVzZXRfb3ZlcnJpZGVfbmVlZGVkKGZhbHNlLCBkc2MpOwo+PiAKPj4gLQlE UFVfREVCVUdfRU5DKGRwdV9lbmMsICJwaWNfdzogJWQgcGljX2g6ICVkIG1vZGU6JWRcbiIsCj4+ IC0JCQlyb2ktPncsIHJvaS0+aCwgZHNjX2NvbW1vbl9tb2RlKTsKPj4gKwlkc2NfY29tbW9uX21v ZGUgPSBEU0NfTU9ERV9TUExJVF9QQU5FTDsKPj4gKwlpZiAoZW5jX21hc3Rlci0+aW50Zl9tb2Rl ID09IElOVEZfTU9ERV9WSURFTykKPj4gKwkJZHNjX2NvbW1vbl9tb2RlIHw9IERTQ19NT0RFX1ZJ REVPOwo+PiAKPj4gLQlmb3IgKGkgPSAwOyBpIDwgZHB1X2VuYy0+bnVtX3BoeXNfZW5jczsgaSsr KSB7Cj4+IC0JCWJvb2wgYWN0aXZlID0gISEoKDEgPDwgaSkgJiBwYXJhbXMtPmFmZmVjdGVkX2Rp c3BsYXlzKTsKPj4gKwlEUFVfREVCVUdfRU5DKGRwdV9lbmMsICJwaWNfdzogJWQgcGljX2g6ICVk IG1vZGU6JWRcbiIsCj4+ICsJCXBpY193aWR0aCwgcGljX2hlaWdodCwgZHNjX2NvbW1vbl9tb2Rl KTsKPj4gKwlEUFVfRVZUMzIoRFJNSUQoJmRwdV9lbmMtPmJhc2UpLCBwaWNfd2lkdGgsIHBpY19o ZWlnaHQsCj4+ICsJCQlkc2NfY29tbW9uX21vZGUpOwo+PiAKPj4gLQkJRFBVX0VWVDMyKERSTUlE KCZkcHVfZW5jLT5iYXNlKSwgcm9pLT53LCByb2ktPmgsCj4+IC0JCQkJZHNjX2NvbW1vbl9tb2Rl LCBpLCBhY3RpdmUpOwo+PiAtCQlfZHB1X2VuY29kZXJfZHNjX3BpcGVfY2ZnKGh3X2RzY1tpXSwg aHdfcHBbaV0sICZkc2NbaV0sCj4+IC0JCQkJZHNjX2NvbW1vbl9tb2RlLCBpY2hfcmVzLCBhY3Rp dmUpOwo+PiAtCX0KPj4gKwlfZHB1X2VuY29kZXJfZHNjX3BpcGVfY2ZnKGxfaHdfZHNjLCBsX2h3 X3BwLCBkc2MsIGRzY19jb21tb25fbW9kZSwKPj4gKwkJCWljaF9yZXMpOwo+PiArCV9kcHVfZW5j b2Rlcl9kc2NfcGlwZV9jZmcocl9od19kc2MsIHJfaHdfcHAsIGRzYywgZHNjX2NvbW1vbl9tb2Rl LAo+PiArCQkJaWNoX3Jlcyk7Cj4+IAo+PiAgCXJldHVybiAwOwo+PiAgfQo+PiAKPj4gLXN0YXRp YyBpbnQgX2RwdV9lbmNvZGVyX2RzY18yX2xtXzJfZW5jXzFfaW50ZihzdHJ1Y3QgZHB1X2VuY29k ZXJfdmlydCAKPj4gKmRwdV9lbmMsCj4+IC0JCXN0cnVjdCBkcHVfZW5jb2Rlcl9raWNrb2ZmX3Bh cmFtcyAqcGFyYW1zKQo+PiArc3RhdGljIGludCBfZHB1X2VuY29kZXJfZHNjXzJfbG1fMl9lbmNf MV9pbnRmKHN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0IAo+PiAqZHB1X2VuYykKPj4gIHsKPj4gKwlp bnQgcGljX3dpZHRoLCBwaWNfaGVpZ2h0Owo+PiAgCWludCB0aGlzX2ZyYW1lX3NsaWNlczsKPj4g IAlpbnQgaW50Zl9pcF93LCBlbmNfaXBfdzsKPj4gIAlpbnQgaWNoX3JlcywgZHNjX2NvbW1vbl9t b2RlOwo+PiAKPj4gIAlzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyAqZW5jX21hc3RlciA9IGRwdV9l bmMtPmN1cl9tYXN0ZXI7Cj4+IC0JY29uc3Qgc3RydWN0IGRwdV9yZWN0ICpyb2kgPSAmZHB1X2Vu Yy0+Y3VyX2Nvbm5fcm9pOwo+PiAtCXN0cnVjdCBkcHVfaHdfZHNjICpod19kc2NbTUFYX0NIQU5O RUxTX1BFUl9FTkNdOwo+PiAtCXN0cnVjdCBkcHVfaHdfcGluZ3BvbmcgKmh3X3BwW01BWF9DSEFO TkVMU19QRVJfRU5DXTsKPj4gKwlzdHJ1Y3QgZHB1X2h3X2RzYyAqbF9od19kc2MgPSBkcHVfZW5j LT5od19kc2NbMF07Cj4+ICsJc3RydWN0IGRwdV9od19kc2MgKnJfaHdfZHNjID0gZHB1X2VuYy0+ aHdfZHNjWzFdOwo+PiArCXN0cnVjdCBkcHVfaHdfcGluZ3BvbmcgKmxfaHdfcHAgPSBkcHVfZW5j LT5od19wcFswXTsKPj4gKwlzdHJ1Y3QgZHB1X2h3X3Bpbmdwb25nICpyX2h3X3BwID0gZHB1X2Vu Yy0+aHdfcHBbMV07Cj4+ICsJc3RydWN0IGRwdV9od19tZHAgKmh3X21kcF90b3AgID0gZW5jX21h c3Rlci0+aHdfbWRwdG9wOwo+PiAgCXN0cnVjdCBtc21fZGlzcGxheV9kc2NfaW5mbyAqZHNjID0K Pj4gIAkJJmRwdV9lbmMtPm1vZGVfaW5mby5jb21wX2luZm8uZHNjX2luZm87Cj4+IC0JYm9vbCBo YWxmX3BhbmVsX3BhcnRpYWxfdXBkYXRlOwo+PiAtCWludCBpOwo+PiAtCj4+IC0JZm9yIChpID0g MDsgaSA8IE1BWF9DSEFOTkVMU19QRVJfRU5DOyBpKyspIHsKPj4gLQkJaHdfcHBbaV0gPSBkcHVf ZW5jLT5od19wcFtpXTsKPj4gLQkJaHdfZHNjW2ldID0gZHB1X2VuYy0+aHdfZHNjW2ldOwo+PiAK Pj4gLQkJaWYgKCFod19wcFtpXSB8fCAhaHdfZHNjW2ldKSB7Cj4+IC0JCQlEUFVfRVJST1JfRU5D KGRwdV9lbmMsICJpbnZhbGlkIHBhcmFtcyBmb3IgRFNDXG4iKTsKPj4gLQkJCXJldHVybiAtRUlO VkFMOwo+PiAtCQl9Cj4+ICsJaWYgKGxfaHdfZHNjID09IE5VTEwgfHwgcl9od19kc2MgPT0gTlVM TCB8fCBod19tZHBfdG9wID09IE5VTEwgfHwKPj4gKwkJCQkJbF9od19wcCA9PSBOVUxMIHx8IHJf aHdfcHAgPT0gTlVMTCkgewo+IAo+IFNhbWUgY29tbWVudHMgaGVyZS4gSG93IGxpa2VseSBpcyBp dCB0aGF0IHRoZXNlIGNhbiBiZSBOVUxMPwo+IAo+PiArCQlEUFVfRVJST1JfRU5DKGRwdV9lbmMs ICJpbnZhbGlkIHBhcmFtcyBmb3IgRFNDXG4iKTsKPj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+ICAJ fQo+PiAKPj4gLQloYWxmX3BhbmVsX3BhcnRpYWxfdXBkYXRlID0KPj4gLQkJCWh3ZWlnaHRfbG9u ZyhwYXJhbXMtPmFmZmVjdGVkX2Rpc3BsYXlzKSA9PSAxOwo+PiAtCj4+IC0JZHNjX2NvbW1vbl9t b2RlID0gMDsKPj4gLQlpZiAoIWhhbGZfcGFuZWxfcGFydGlhbF91cGRhdGUpCj4+IC0JCWRzY19j b21tb25fbW9kZSB8PSBEU0NfTU9ERV9TUExJVF9QQU5FTCB8IERTQ19NT0RFX01VTFRJUExFWDsK Pj4gLQlpZiAoZW5jX21hc3Rlci0+aW50Zl9tb2RlID09IElOVEZfTU9ERV9WSURFTykKPj4gLQkJ ZHNjX2NvbW1vbl9tb2RlIHw9IERTQ19NT0RFX1ZJREVPOwo+PiAtCj4+IC0JX2RwdV9lbmNvZGVy X2RzY191cGRhdGVfcGljX2RpbShkc2MsIHJvaS0+dywgcm9pLT5oKTsKPj4gKwlwaWNfd2lkdGgg PSBkc2MtPnBpY193aWR0aDsKPj4gKwlwaWNfaGVpZ2h0ID0gZHNjLT5waWNfaGVpZ2h0Owo+PiAr CV9kcHVfZW5jb2Rlcl9kc2NfdXBkYXRlX3BpY19kaW0oZHNjLCBwaWNfd2lkdGgsIHBpY19oZWln aHQpOwo+PiAKPj4gLQl0aGlzX2ZyYW1lX3NsaWNlcyA9IHJvaS0+dyAvIGRzYy0+c2xpY2Vfd2lk dGg7Cj4+ICsJdGhpc19mcmFtZV9zbGljZXMgPSBwaWNfd2lkdGggLyBkc2MtPnNsaWNlX3dpZHRo Owo+PiAgCWludGZfaXBfdyA9IHRoaXNfZnJhbWVfc2xpY2VzICogZHNjLT5zbGljZV93aWR0aDsK Pj4gIAlfZHB1X2VuY29kZXJfZHNjX3BjbGtfcGFyYW1fY2FsYyhkc2MsIGludGZfaXBfdyk7Cj4+ IAo+PiAgCS8qCj4+IC0JICogZHNjIG1lcmdlIGNhc2U6IHdoZW4gdXNpbmcgMiBlbmNvZGVycyBm b3IgdGhlIHNhbWUgc3RyZWFtLAo+PiAtCSAqIG5vLiBvZiBzbGljZXMgbmVlZCB0byBiZSBzYW1l IG9uIGJvdGggdGhlIGVuY29kZXJzLgo+PiArCSAqIHdoZW4gdXNpbmcgMiBlbmNvZGVycyBmb3Ig dGhlIHNhbWUgc3RyZWFtLCBuby4gb2Ygc2xpY2VzCj4+ICsJICogbmVlZCB0byBiZSBzYW1lIG9u IGJvdGggdGhlIGVuY29kZXJzLgo+PiAgCSAqLwo+PiAgCWVuY19pcF93ID0gaW50Zl9pcF93IC8g MjsKPj4gIAlfZHB1X2VuY29kZXJfZHNjX2luaXRpYWxfbGluZV9jYWxjKGRzYywgZW5jX2lwX3cp Owo+PiAKPj4gLQlpY2hfcmVzID0gX2RwdV9lbmNvZGVyX2RzY19pY2hfcmVzZXRfb3ZlcnJpZGVf bmVlZGVkKAo+PiAtCQkJaGFsZl9wYW5lbF9wYXJ0aWFsX3VwZGF0ZSwgZHNjKTsKPj4gLQo+PiAt CURQVV9ERUJVR19FTkMoZHB1X2VuYywgInBpY193OiAlZCBwaWNfaDogJWQgbW9kZTolZFxuIiwK Pj4gLQkJCXJvaS0+dywgcm9pLT5oLCBkc2NfY29tbW9uX21vZGUpOwo+PiAtCURQVV9FVlQzMihE Uk1JRCgmZHB1X2VuYy0+YmFzZSksIHJvaS0+dywgcm9pLT5oLAo+PiAtCQkJZHNjX2NvbW1vbl9t b2RlLCBpLCBwYXJhbXMtPmFmZmVjdGVkX2Rpc3BsYXlzKTsKPj4gLQo+PiAtCV9kcHVfZW5jb2Rl cl9kc2NfcGlwZV9jZmcoaHdfZHNjWzBdLCBod19wcFswXSwgZHNjLCBkc2NfY29tbW9uX21vZGUs Cj4+IC0JCQlpY2hfcmVzLCB0cnVlKTsKPj4gLQlfZHB1X2VuY29kZXJfZHNjX3BpcGVfY2ZnKGh3 X2RzY1sxXSwgaHdfcHBbMV0sIGRzYywgZHNjX2NvbW1vbl9tb2RlLAo+PiAtCQkJaWNoX3Jlcywg IWhhbGZfcGFuZWxfcGFydGlhbF91cGRhdGUpOwo+PiAtCj4+IC0JcmV0dXJuIDA7Cj4+IC19Cj4+ IC0KPj4gLXN0YXRpYyBpbnQgX2RwdV9lbmNvZGVyX3VwZGF0ZV9yb2koc3RydWN0IGRybV9lbmNv ZGVyICpkcm1fZW5jKQo+PiAtewo+PiAtCXN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0ICpkcHVfZW5j Owo+PiAtCXN0cnVjdCBkcm1fY29ubmVjdG9yICpkcm1fY29ubjsKPj4gLQlzdHJ1Y3QgZHJtX2Rp c3BsYXlfbW9kZSAqYWRqX21vZGU7Cj4+IC0Jc3RydWN0IGRwdV9yZWN0IHJvaTsKPj4gLQo+PiAt CWlmICghZHJtX2VuYyB8fCAhZHJtX2VuYy0+Y3J0YyB8fCAhZHJtX2VuYy0+Y3J0Yy0+c3RhdGUp Cj4+IC0JCXJldHVybiAtRUlOVkFMOwo+PiAtCWRwdV9lbmMgPSB0b19kcHVfZW5jb2Rlcl92aXJ0 KGRybV9lbmMpOwo+PiAtCj4+IC0JaWYgKCFkcHVfZW5jLT5jdXJfbWFzdGVyKQo+PiAtCQlyZXR1 cm4gLUVJTlZBTDsKPj4gKwlpY2hfcmVzID0gX2RwdV9lbmNvZGVyX2RzY19pY2hfcmVzZXRfb3Zl cnJpZGVfbmVlZGVkKGZhbHNlLCBkc2MpOwo+PiAKPj4gLQlhZGpfbW9kZSA9ICZkcHVfZW5jLT5i YXNlLmNydGMtPnN0YXRlLT5hZGp1c3RlZF9tb2RlOwo+PiAtCWRybV9jb25uID0gZHB1X2VuYy0+ Y3VyX21hc3Rlci0+Y29ubmVjdG9yOwo+PiArCWRzY19jb21tb25fbW9kZSA9IERTQ19NT0RFX01V TFRJUExFWCB8IERTQ19NT0RFX1NQTElUX1BBTkVMOwo+PiArCWlmIChlbmNfbWFzdGVyLT5pbnRm X21vZGUgPT0gSU5URl9NT0RFX1ZJREVPKQo+PiArCQlkc2NfY29tbW9uX21vZGUgfD0gRFNDX01P REVfVklERU87Cj4+IAo+PiAtCV9kcHVfZW5jb2Rlcl9nZXRfY29ubmVjdG9yX3JvaShkcHVfZW5j LCAmcm9pKTsKPj4gLQlpZiAoZHB1X2ttc19yZWN0X2lzX251bGwoJnJvaSkpIHsKPj4gLQkJcm9p LncgPSBhZGpfbW9kZS0+aGRpc3BsYXk7Cj4+IC0JCXJvaS5oID0gYWRqX21vZGUtPnZkaXNwbGF5 Owo+PiAtCX0KPj4gKwlEUFVfREVCVUdfRU5DKGRwdV9lbmMsICJwaWNfdzogJWQgcGljX2g6ICVk IG1vZGU6JWRcbiIsCj4+ICsJCXBpY193aWR0aCwgcGljX2hlaWdodCwgZHNjX2NvbW1vbl9tb2Rl KTsKPj4gKwlEUFVfRVZUMzIoRFJNSUQoJmRwdV9lbmMtPmJhc2UpLCBwaWNfd2lkdGgsIHBpY19o ZWlnaHQsCj4+ICsJCQlkc2NfY29tbW9uX21vZGUpOwo+PiAKPj4gLQltZW1jcHkoJmRwdV9lbmMt PnBydl9jb25uX3JvaSwgJmRwdV9lbmMtPmN1cl9jb25uX3JvaSwKPj4gLQkJCXNpemVvZihkcHVf ZW5jLT5wcnZfY29ubl9yb2kpKTsKPj4gLQltZW1jcHkoJmRwdV9lbmMtPmN1cl9jb25uX3JvaSwg JnJvaSwgc2l6ZW9mKGRwdV9lbmMtPmN1cl9jb25uX3JvaSkpOwo+PiArCV9kcHVfZW5jb2Rlcl9k c2NfcGlwZV9jZmcobF9od19kc2MsIGxfaHdfcHAsIGRzYywgZHNjX2NvbW1vbl9tb2RlLAo+PiAr CQkJaWNoX3Jlcyk7Cj4+ICsJX2RwdV9lbmNvZGVyX2RzY19waXBlX2NmZyhyX2h3X2RzYywgcl9o d19wcCwgZHNjLCBkc2NfY29tbW9uX21vZGUsCj4+ICsJCQlpY2hfcmVzKTsKPj4gCj4+ICAJcmV0 dXJuIDA7Cj4+ICB9Cj4+IAo+PiAtc3RhdGljIGludCBfZHB1X2VuY29kZXJfZHNjX3NldHVwKHN0 cnVjdCBkcHVfZW5jb2Rlcl92aXJ0ICpkcHVfZW5jLAo+PiAtCQlzdHJ1Y3QgZHB1X2VuY29kZXJf a2lja29mZl9wYXJhbXMgKnBhcmFtcykKPj4gK3N0YXRpYyBpbnQgX2RwdV9lbmNvZGVyX2RzY19z ZXR1cChzdHJ1Y3QgZHB1X2VuY29kZXJfdmlydCAqZHB1X2VuYykKPj4gIHsKPj4gIAllbnVtIGRw dV9ybV90b3BvbG9neV9uYW1lIHRvcG9sb2d5Owo+PiAgCXN0cnVjdCBkcm1fY29ubmVjdG9yICpk cm1fY29ubjsKPj4gIAlpbnQgcmV0ID0gMDsKPj4gCj4+IC0JaWYgKCFkcHVfZW5jIHx8ICFwYXJh bXMgfHwgIWRwdV9lbmMtPnBoeXNfZW5jc1swXSB8fAo+PiArCWlmICghZHB1X2VuYyB8fCAhZHB1 X2VuYy0+cGh5c19lbmNzWzBdIHx8Cj4+ICAJCQkhZHB1X2VuYy0+cGh5c19lbmNzWzBdLT5jb25u ZWN0b3IpCj4+ICAJCXJldHVybiAtRUlOVkFMOwo+PiAKPj4gQEAgLTExNTMsMjAgKzEwNTgsMTYg QEAgc3RhdGljIGludCBfZHB1X2VuY29kZXJfZHNjX3NldHVwKHN0cnVjdCAKPj4gZHB1X2VuY29k ZXJfdmlydCAqZHB1X2VuYywKPj4gIAlEUFVfREVCVUdfRU5DKGRwdV9lbmMsICJ0b3BvbG9neTol ZFxuIiwgdG9wb2xvZ3kpOwo+PiAgCURQVV9FVlQzMihEUk1JRCgmZHB1X2VuYy0+YmFzZSkpOwo+ PiAKPj4gLQlpZiAoZHB1X2ttc19yZWN0X2lzX2VxdWFsKCZkcHVfZW5jLT5jdXJfY29ubl9yb2ks Cj4+IC0JCQkmZHB1X2VuYy0+cHJ2X2Nvbm5fcm9pKSkKPj4gLQkJcmV0dXJuIHJldDsKPj4gLQo+ PiAgCXN3aXRjaCAodG9wb2xvZ3kpIHsKPj4gIAljYXNlIERQVV9STV9UT1BPTE9HWV9TSU5HTEVQ SVBFX0RTQzoKPj4gIAljYXNlIERQVV9STV9UT1BPTE9HWV9EVUFMUElQRV8zRE1FUkdFX0RTQzoK Pj4gIAkJcmV0ID0gX2RwdV9lbmNvZGVyX2RzY19uX2xtXzFfZW5jXzFfaW50ZihkcHVfZW5jKTsK Pj4gIAkJYnJlYWs7Cj4+ICAJY2FzZSBEUFVfUk1fVE9QT0xPR1lfRFVBTFBJUEVfRFNDTUVSR0U6 Cj4+IC0JCXJldCA9IF9kcHVfZW5jb2Rlcl9kc2NfMl9sbV8yX2VuY18xX2ludGYoZHB1X2VuYywg cGFyYW1zKTsKPj4gKwkJcmV0ID0gX2RwdV9lbmNvZGVyX2RzY18yX2xtXzJfZW5jXzFfaW50Zihk cHVfZW5jKTsKPj4gIAkJYnJlYWs7Cj4+ICAJY2FzZSBEUFVfUk1fVE9QT0xPR1lfRFVBTFBJUEVf RFNDOgo+PiAtCQlyZXQgPSBfZHB1X2VuY29kZXJfZHNjXzJfbG1fMl9lbmNfMl9pbnRmKGRwdV9l bmMsIHBhcmFtcyk7Cj4+ICsJCXJldCA9IF9kcHVfZW5jb2Rlcl9kc2NfMl9sbV8yX2VuY18yX2lu dGYoZHB1X2VuYyk7Cj4+ICAJCWJyZWFrOwo+PiAgCWRlZmF1bHQ6Cj4+ICAJCURQVV9FUlJPUl9F TkMoZHB1X2VuYywgIk5vIERTQyBzdXBwb3J0IGZvciB0b3BvbG9neSAlZCIsCj4+IEBAIC0yMDcz LDkgKzE5NzQsNiBAQCBzdGF0aWMgdm9pZCAKPj4gX2RwdV9lbmNvZGVyX3ZpcnRfZW5hYmxlX2hl bHBlcihzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmMpCj4+ICAJCQkJZHB1X2ttcy0+Y2F0YWxv Zyk7Cj4+IAo+PiAgCV9kcHVfZW5jb2Rlcl91cGRhdGVfdnN5bmNfc291cmNlKGRwdV9lbmMsICZk cHVfZW5jLT5kaXNwX2luZm8sIAo+PiBmYWxzZSk7Cj4+IC0KPj4gLQltZW1zZXQoJmRwdV9lbmMt PnBydl9jb25uX3JvaSwgMCwgc2l6ZW9mKGRwdV9lbmMtPnBydl9jb25uX3JvaSkpOwo+PiAtCW1l bXNldCgmZHB1X2VuYy0+Y3VyX2Nvbm5fcm9pLCAwLCBzaXplb2YoZHB1X2VuYy0+Y3VyX2Nvbm5f cm9pKSk7Cj4+ICB9Cj4+IAo+PiAgdm9pZCBkcHVfZW5jb2Rlcl92aXJ0X3Jlc3RvcmUoc3RydWN0 IGRybV9lbmNvZGVyICpkcm1fZW5jKQo+PiBAQCAtMzA1Myw4ICsyOTUxLDYgQEAgdm9pZCBkcHVf ZW5jb2Rlcl9wcmVwYXJlX2Zvcl9raWNrb2ZmKHN0cnVjdCAKPj4gZHJtX2VuY29kZXIgKmRybV9l bmMsCj4+IAo+PiAgCV9kcHVfZW5jb2Rlcl91cGRhdGVfbWFzdGVyKGRybV9lbmMsIHBhcmFtcyk7 Cj4+IAo+PiAtCV9kcHVfZW5jb2Rlcl91cGRhdGVfcm9pKGRybV9lbmMpOwo+PiAtCj4+ICAJaWYg KGRwdV9lbmMtPmN1cl9tYXN0ZXIgJiYgZHB1X2VuYy0+Y3VyX21hc3Rlci0+Y29ubmVjdG9yKSB7 Cj4+ICAJCXJjID0gZHB1X2Nvbm5lY3Rvcl9wcmVfa2lja29mZihkcHVfZW5jLT5jdXJfbWFzdGVy LT5jb25uZWN0b3IpOwo+PiAgCQlpZiAocmMpCj4+IEBAIC0zMDY0LDcgKzI5NjAsNyBAQCB2b2lk IGRwdV9lbmNvZGVyX3ByZXBhcmVfZm9yX2tpY2tvZmYoc3RydWN0IAo+PiBkcm1fZW5jb2RlciAq ZHJtX2VuYywKPj4gIAl9Cj4+IAo+PiAgCWlmIChkcHVfZW5jb2Rlcl9pc19kc2NfZW5hYmxlZChk cm1fZW5jKSkgewo+PiAtCQlyYyA9IF9kcHVfZW5jb2Rlcl9kc2Nfc2V0dXAoZHB1X2VuYywgcGFy YW1zKTsKPj4gKwkJcmMgPSBfZHB1X2VuY29kZXJfZHNjX3NldHVwKGRwdV9lbmMpOwo+PiAgCQlp ZiAocmMpCj4+ICAJCQlEUFVfRVJST1JfRU5DKGRwdV9lbmMsICJmYWlsZWQgdG8gc2V0dXAgRFND OiAlZFxuIiwgcmMpOwo+PiAgCX0KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9od19jYXRhbG9nLmMgCj4+IGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X2h3X2NhdGFsb2cuYwo+PiBpbmRleCAyODliOWZmLi5iYWRlNzJlIDEwMDY0NAo+ PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY2F0YWxvZy5jCj4+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jYXRhbG9nLmMKPj4g QEAgLTIwMTMsNiArMjAxMyw3IEBAIHN0YXRpYyBpbnQgZHB1X2RzcHBfcGFyc2VfZHQoc3RydWN0 IGRldmljZV9ub2RlIAo+PiAqbnAsCj4+ICAJaWYgKHJjKQo+PiAgCQlnb3RvIGVuZDsKPj4gCj4+ ICsjaWZkZWYgQ09ORklHX0RQVV9BRDQKPj4gIAkvKiBQYXJzZSBBRCBkdHNpIGVudHJpZXMgKi8K Pj4gIAlhZF9wcm9wX3ZhbHVlID0ga2NhbGxvYyhBRF9QUk9QX01BWCwKPj4gIAkJCXNpemVvZihz dHJ1Y3QgZHB1X3Byb3BfdmFsdWUpLCBHRlBfS0VSTkVMKTsKPj4gQEAgLTIwMjgsNiArMjAyOSw3 IEBAIHN0YXRpYyBpbnQgZHB1X2RzcHBfcGFyc2VfZHQoc3RydWN0IGRldmljZV9ub2RlIAo+PiAq bnAsCj4+ICAJCWFkX3Byb3BfZXhpc3RzLCBhZF9wcm9wX3ZhbHVlKTsKPj4gIAlpZiAocmMpCj4+ ICAJCWdvdG8gZW5kOwo+PiArI2VuZGlmCj4+IAo+PiAgCS8qIGdldCBEU1BQIGZlYXR1cmUgZHQg cHJvcGVydGllcyBpZiB0aGV5IGV4aXN0ICovCj4+ICAJc25wID0gb2ZfZ2V0X2NoaWxkX2J5X25h bWUobnAsIGRzcHBfcHJvcFtEU1BQX0JMT0NLU10ucHJvcF9uYW1lKTsKPj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9rbXMuaCAKPj4gYi9kcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfa21zLmgKPj4gaW5kZXggNjJlN2M1Yy4uZDExZmIxZCAx MDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2ttcy5oCj4+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9rbXMuaAo+PiBAQCAtNDU0 LDE0ICs0NTQsNiBAQCB2b2lkIGRwdV9rbXNfcmVjdF9pbnRlcnNlY3QoY29uc3Qgc3RydWN0IGRw dV9yZWN0IAo+PiAqcjEsCj4+ICAJCXN0cnVjdCBkcHVfcmVjdCAqcmVzdWx0KTsKPj4gCj4+ICAv KioKPj4gLSAqIGRwdV9rbXNfcmVjdF9tZXJnZV9yZWN0YW5nbGVzIC0gbWVyZ2UgYSByZWN0YW5n bGUgbGlzdCBpbnRvIG9uZSAKPj4gcmVjdAo+PiAtICogQHJvaXM6IHBvaW50ZXIgdG8gdGhlIGxp c3Qgb2Ygcm9pcwo+PiAtICogQHJlc3VsdDogb3V0cHV0IHJlY3RhbmdsZSwgYWxsIDAgb24gZXJy b3IKPj4gLSAqLwo+PiAtdm9pZCBkcHVfa21zX3JlY3RfbWVyZ2VfcmVjdGFuZ2xlcyhjb25zdCBz dHJ1Y3QgbXNtX3JvaV9saXN0ICpyb2lzLAo+PiAtCQlzdHJ1Y3QgZHB1X3JlY3QgKnJlc3VsdCk7 Cj4+IC0KPj4gLS8qKgo+PiAgICogZHB1X2ttc19yZWN0X2lzX2VxdWFsIC0gY29tcGFyZXMgdHdv IHJlY3RzCj4+ICAgKiBAcjE6IHJlY3QgdmFsdWUgdG8gY29tcGFyZQo+PiAgICogQHIyOiByZWN0 IHZhbHVlIHRvIGNvbXBhcmUKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlz cC9kcHUxL2RwdV9rbXNfdXRpbHMuYyAKPj4gYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1 MS9kcHVfa21zX3V0aWxzLmMKPj4gaW5kZXggMDA2ZDdhZC4uNDBlMDE2MiAxMDA2NDQKPj4gLS0t IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2ttc191dGlscy5jCj4+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9rbXNfdXRpbHMuYwo+PiBAQCAtMTc2 LDQ1ICsxNzYsMyBAQCB2b2lkIGRwdV9rbXNfcmVjdF9pbnRlcnNlY3QoY29uc3Qgc3RydWN0IGRw dV9yZWN0IAo+PiAqcjEsCj4+ICAJfQo+PiAgfQo+PiAKPj4gLXZvaWQgZHB1X2ttc19yZWN0X21l cmdlX3JlY3RhbmdsZXMoY29uc3Qgc3RydWN0IG1zbV9yb2lfbGlzdCAqcm9pcywKPj4gLQkJc3Ry dWN0IGRwdV9yZWN0ICpyZXN1bHQpCj4+IC17Cj4+IC0Jc3RydWN0IGRybV9jbGlwX3JlY3QgY2xp cDsKPj4gLQljb25zdCBzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqcm9pX3JlY3Q7Cj4+IC0JaW50IGk7 Cj4+IC0KPj4gLQlpZiAoIXJvaXMgfHwgIXJlc3VsdCkKPj4gLQkJcmV0dXJuOwo+PiAtCj4+IC0J bWVtc2V0KHJlc3VsdCwgMCwgc2l6ZW9mKCpyZXN1bHQpKTsKPj4gLQo+PiAtCS8qIGluaXQgdG8g aW52YWxpZCByYW5nZSBtYXhlcyAqLwo+PiAtCWNsaXAueDEgPSB+MDsKPj4gLQljbGlwLnkxID0g fjA7Cj4+IC0JY2xpcC54MiA9IDA7Cj4+IC0JY2xpcC55MiA9IDA7Cj4+IC0KPj4gLQkvKiBhZ2dy ZWdhdGUgYWxsIGNsaXBwaW5nIHJlY3RhbmdsZXMgdG9nZXRoZXIgZm9yIG92ZXJhbGwgcm9pICov Cj4+IC0JZm9yIChpID0gMDsgaSA8IHJvaXMtPm51bV9yZWN0czsgaSsrKSB7Cj4+IC0JCXJvaV9y ZWN0ID0gJnJvaXMtPnJvaVtpXTsKPj4gLQo+PiAtCQljbGlwLngxID0gbWluKGNsaXAueDEsIHJv aV9yZWN0LT54MSk7Cj4+IC0JCWNsaXAueTEgPSBtaW4oY2xpcC55MSwgcm9pX3JlY3QtPnkxKTsK Pj4gLQkJY2xpcC54MiA9IG1heChjbGlwLngyLCByb2lfcmVjdC0+eDIpOwo+PiAtCQljbGlwLnky ID0gbWF4KGNsaXAueTIsIHJvaV9yZWN0LT55Mik7Cj4+IC0KPj4gLQkJRFBVX0RFQlVHKCJyb2kl ZCAoJWQsJWQpLCglZCwlZCkgLT4gY3J0YyAoJWQsJWQpLCglZCwlZClcbiIsIGksCj4+IC0JCQkJ cm9pX3JlY3QtPngxLCByb2lfcmVjdC0+eTEsCj4+IC0JCQkJcm9pX3JlY3QtPngyLCByb2lfcmVj dC0+eTIsCj4+IC0JCQkJY2xpcC54MSwgY2xpcC55MSwKPj4gLQkJCQljbGlwLngyLCBjbGlwLnky KTsKPj4gLQl9Cj4+IC0KPj4gLQlpZiAoY2xpcC54MiAgJiYgY2xpcC55Mikgewo+PiAtCQlyZXN1 bHQtPnggPSBjbGlwLngxOwo+PiAtCQlyZXN1bHQtPnkgPSBjbGlwLnkxOwo+PiAtCQlyZXN1bHQt PncgPSBjbGlwLngyIC0gY2xpcC54MTsKPj4gLQkJcmVzdWx0LT5oID0gY2xpcC55MiAtIGNsaXAu eTE7Cj4+IC0JfQo+PiAtfQo+PiAtCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNt L2Rpc3AvZHB1MS9kcHVfcGxhbmUuYyAKPj4gYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1 MS9kcHVfcGxhbmUuYwo+PiBpbmRleCA4MzRkY2MwLi45ZTljOWQyIDEwMDY0NAo+PiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcGxhbmUuYwo+PiArKysgYi9kcml2ZXJz L2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcGxhbmUuYwo+PiBAQCAtMzI0Myw3ICszMjQzLDYg QEAgc3RhdGljIGludCBkcHVfcGxhbmVfc3NwcF9hdG9taWNfdXBkYXRlKHN0cnVjdCAKPj4gZHJt X3BsYW5lICpwbGFuZSwKPj4gIAlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Cj4+ICAJc3RydWN0IGRy bV9mcmFtZWJ1ZmZlciAqZmI7Cj4+ICAJc3RydWN0IGRwdV9yZWN0IHNyYywgZHN0Owo+PiAtCWNv bnN0IHN0cnVjdCBkcHVfcmVjdCAqY3J0Y19yb2k7Cj4+ICAJYm9vbCBxMTZfZGF0YSA9IHRydWU7 Cj4+ICAJaW50IGlkeDsKPj4gCj4+IEBAIC0zMzU3LDExICszMzU2LDYgQEAgc3RhdGljIGludCBk cHVfcGxhbmVfc3NwcF9hdG9taWNfdXBkYXRlKHN0cnVjdCAKPj4gZHJtX3BsYW5lICpwbGFuZSwK Pj4gIAlfZHB1X3BsYW5lX3NzcHBfYXRvbWljX2NoZWNrX21vZGVfY2hhbmdlZChwZHB1LCBzdGF0 ZSwKPj4gIAkJCQkJCQkJb2xkX3N0YXRlKTsKPj4gCj4+IC0JLyogcmUtcHJvZ3JhbSB0aGUgb3V0 cHV0IHJlY3RzIGFsd2F5cyBpbiB0aGUgY2FzZSBvZiBwYXJ0aWFsIHVwZGF0ZSAKPj4gKi8KPj4g LQlkcHVfY3J0Y19nZXRfY3J0Y19yb2koY3J0Yy0+c3RhdGUsICZjcnRjX3JvaSk7Cj4+IC0JaWYg KCFkcHVfa21zX3JlY3RfaXNfbnVsbChjcnRjX3JvaSkpCj4+IC0JCXBzdGF0ZS0+ZGlydHkgfD0g RFBVX1BMQU5FX0RJUlRZX1JFQ1RTOwo+PiAtCj4+ICAJaWYgKHBzdGF0ZS0+ZGlydHkgJiBEUFVf UExBTkVfRElSVFlfUkVDVFMpCj4+ICAJCW1lbXNldCgmKHBkcHUtPnBpcGVfY2ZnKSwgMCwgc2l6 ZW9mKHN0cnVjdCBkcHVfaHdfcGlwZV9jZmcpKTsKPj4gCj4+IEBAIC0zMzk5LDEzICszMzkzLDYg QEAgc3RhdGljIGludCBkcHVfcGxhbmVfc3NwcF9hdG9taWNfdXBkYXRlKHN0cnVjdCAKPj4gZHJt X3BsYW5lICpwbGFuZSwKPj4gIAkJCXNyYy55ICY9IH4weDE7Cj4+ICAJCX0KPj4gCj4+IC0JCS8q Cj4+IC0JCSAqIGFkanVzdCBsYXllciBtaXhlciBwb3NpdGlvbiBvZiB0aGUgc3NwcCBpbiB0aGUg cHJlc2VuY2UKPj4gLQkJICogb2YgYSBwYXJ0aWFsIHVwZGF0ZSB0byB0aGUgYWN0aXZlIGxtIG9y aWdpbgo+PiAtCQkgKi8KPj4gLQkJZHN0LnggLT0gY3J0Y19yb2ktPng7Cj4+IC0JCWRzdC55IC09 IGNydGNfcm9pLT55Owo+PiAtCj4+ICAJCXBkcHUtPnBpcGVfY2ZnLnNyY19yZWN0ID0gc3JjOwo+ PiAgCQlwZHB1LT5waXBlX2NmZy5kc3RfcmVjdCA9IGRzdDsKPj4gCj4+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuaCAKPj4gYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21z bV9kcnYuaAo+PiBpbmRleCBkOGUwOTBmLi44NTc0ZjMwIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vbXNtL21zbV9kcnYuaAo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9k cnYuaAo+PiBAQCAtMTQ0LDcgKzE0NCw2IEBAIGVudW0gbXNtX21kcF9jcnRjX3Byb3BlcnR5IHsK Pj4gIAlDUlRDX1BST1BfRFJBTV9JQiwKPj4gIAlDUlRDX1BST1BfUk9UX1BSRUZJTExfQlcsCj4+ ICAJQ1JUQ19QUk9QX1JPVF9DTEssCj4+IC0JQ1JUQ19QUk9QX1JPSV9WMSwKPj4gIAlDUlRDX1BS T1BfSURMRV9USU1FT1VULAo+PiAgCUNSVENfUFJPUF9ERVNUX1NDQUxFUiwKPj4gCj4+IEBAIC0x NjgsNyArMTY3LDYgQEAgZW51bSBtc21fbWRwX2Nvbm5fcHJvcGVydHkgewo+PiAgCUNPTk5FQ1RP Ul9QUk9QX0RTVF9ZLAo+PiAgCUNPTk5FQ1RPUl9QUk9QX0RTVF9XLAo+PiAgCUNPTk5FQ1RPUl9Q Uk9QX0RTVF9ILAo+PiAtCUNPTk5FQ1RPUl9QUk9QX1JPSV9WMSwKPj4gIAlDT05ORUNUT1JfUFJP UF9CTF9TQ0FMRSwKPj4gIAlDT05ORUNUT1JfUFJPUF9BRF9CTF9TQ0FMRSwKPj4gCj4+IEBAIC0y MjgsMzggKzIyNiw2IEBAIGVudW0gbXNtX2V2ZW50X3dhaXQgewo+PiAgfTsKPj4gCj4+ICAvKioK Pj4gLSAqIHN0cnVjdCBtc21fcm9pX2FsaWdubWVudCAtIHJlZ2lvbiBvZiBpbnRlcmVzdCBhbGln bm1lbnQgCj4+IHJlc3RyaWN0aW9ucwo+PiAtICogQHhzdGFydF9waXhfYWxpZ246IGxlZnQgeCBv ZmZzZXQgYWxpZ25tZW50IHJlc3RyaWN0aW9uCj4+IC0gKiBAd2lkdGhfcGl4X2FsaWduOiB3aWR0 aCBhbGlnbm1lbnQgcmVzdHJpY3Rpb24KPj4gLSAqIEB5c3RhcnRfcGl4X2FsaWduOiB0b3AgeSBv ZmZzZXQgYWxpZ25tZW50IHJlc3RyaWN0aW9uCj4+IC0gKiBAaGVpZ2h0X3BpeF9hbGlnbjogaGVp Z2h0IGFsaWdubWVudCByZXN0cmljdGlvbgo+PiAtICogQG1pbl93aWR0aDogbWluaW11bSB3aWR0 aCByZXN0cmljdGlvbgo+PiAtICogQG1pbl9oZWlnaHQ6IG1pbmltdW0gaGVpZ2h0IHJlc3RyaWN0 aW9uCj4+IC0gKi8KPj4gLXN0cnVjdCBtc21fcm9pX2FsaWdubWVudCB7Cj4+IC0JdWludDMyX3Qg eHN0YXJ0X3BpeF9hbGlnbjsKPj4gLQl1aW50MzJfdCB3aWR0aF9waXhfYWxpZ247Cj4+IC0JdWlu dDMyX3QgeXN0YXJ0X3BpeF9hbGlnbjsKPj4gLQl1aW50MzJfdCBoZWlnaHRfcGl4X2FsaWduOwo+ PiAtCXVpbnQzMl90IG1pbl93aWR0aDsKPj4gLQl1aW50MzJfdCBtaW5faGVpZ2h0Owo+PiAtfTsK Pj4gLQo+PiAtLyoqCj4+IC0gKiBzdHJ1Y3QgbXNtX3JvaV9jYXBzIC0gZGlzcGxheSdzIHJlZ2lv biBvZiBpbnRlcmVzdCBjYXBhYmlsaXRpZXMKPj4gLSAqIEBlbmFibGVkOiB0cnVlIGlmIHNvbWUg cmVnaW9uIG9mIGludGVyZXN0IGlzIHN1cHBvcnRlZAo+PiAtICogQG1lcmdlX3JvaXM6IG1lcmdl IHJvaXMgYmVmb3JlIHNlbmRpbmcgdG8gZGlzcGxheQo+PiAtICogQG51bV9yb2k6IG1heGltdW0g bnVtYmVyIG9mIHJvaXMgc3VwcG9ydGVkCj4+IC0gKiBAYWxpZ246IHJvaSBhbGlnbm1lbnQgcmVz dHJpY3Rpb25zCj4+IC0gKi8KPj4gLXN0cnVjdCBtc21fcm9pX2NhcHMgewo+PiAtCWJvb2wgZW5h YmxlZDsKPj4gLQlib29sIG1lcmdlX3JvaXM7Cj4+IC0JdWludDMyX3QgbnVtX3JvaTsKPj4gLQlz dHJ1Y3QgbXNtX3JvaV9hbGlnbm1lbnQgYWxpZ247Cj4+IC19Owo+PiAtCj4+IC0vKioKPj4gICAq IHN0cnVjdCBtc21fZGlzcGxheV9kc2NfaW5mbyAtIGRlZmluZXMgZHNjIGNvbmZpZ3VyYXRpb24K Pj4gICAqIEB2ZXJzaW9uOiAgICAgICAgICAgICAgICAgRFNDIHZlcnNpb24uCj4+ICAgKiBAc2Ny X3JldjogICAgICAgICAgICAgICAgIERTQyByZXZpc2lvbi4KPj4gQEAgLTQyNyw3ICszOTMsNiBA QCBzdHJ1Y3QgbXNtX21vZGVfaW5mbyB7Cj4+ICAgKiBAaXNfcHJpbWFyeTogICAgICAgICBTZXQg dG8gdHJ1ZSBpZiBkaXNwbGF5IGlzIHByaW1hcnkgZGlzcGxheQo+PiAgICogQGlzX3RlX3VzaW5n X3dhdGNoZG9nX3RpbWVyOiAgQm9vbGVhbiB0byBpbmRpY2F0ZSB3YXRjaGRvZyBURSBpcwo+PiAg ICoJCQkJIHVzZWQgaW5zdGVhZCBvZiBwYW5lbCBURSBpbiBjbWQgbW9kZSBwYW5lbHMKPj4gLSAq IEByb2lfY2FwczogICAgICAgICAgIFJlZ2lvbiBvZiBpbnRlcmVzdCBjYXBhYmlsaXR5IGluZm8K Pj4gICAqLwo+PiAgc3RydWN0IG1zbV9kaXNwbGF5X2luZm8gewo+PiAgCWludCBpbnRmX3R5cGU7 Cj4+IEBAIC00NDYsMjcgKzQxMSw2IEBAIHN0cnVjdCBtc21fZGlzcGxheV9pbmZvIHsKPj4gCj4+ ICAJYm9vbCBpc19wcmltYXJ5Owo+PiAgCWJvb2wgaXNfdGVfdXNpbmdfd2F0Y2hkb2dfdGltZXI7 Cj4+IC0Jc3RydWN0IG1zbV9yb2lfY2FwcyByb2lfY2FwczsKPj4gLX07Cj4+IC0KPj4gLSNkZWZp bmUgTVNNX01BWF9ST0kJNAo+PiAtCj4+IC0vKioKPj4gLSAqIHN0cnVjdCBtc21fcm9pX2xpc3Qg LSBsaXN0IG9mIHJlZ2lvbnMgb2YgaW50ZXJlc3QgZm9yIGEgZHJtIG9iamVjdAo+PiAtICogQG51 bV9yZWN0czogbnVtYmVyIG9mIHZhbGlkIHJlY3RhbmdsZXMgaW4gdGhlIHJvaSBhcnJheQo+PiAt ICogQHJvaTogbGlzdCBvZiByb2kgcmVjdGFuZ2xlcwo+PiAtICovCj4+IC1zdHJ1Y3QgbXNtX3Jv aV9saXN0IHsKPj4gLQl1aW50MzJfdCBudW1fcmVjdHM7Cj4+IC0Jc3RydWN0IGRybV9jbGlwX3Jl Y3Qgcm9pW01TTV9NQVhfUk9JXTsKPj4gLX07Cj4+IC0KPj4gLS8qKgo+PiAtICogc3RydWN0IC0g bXNtX2Rpc3BsYXlfa2lja29mZl9wYXJhbXMgLSBpbmZvIGZvciBkaXNwbGF5IGZlYXR1cmVzIGF0 IAo+PiBraWNrb2ZmCj4+IC0gKiBAcm9pczogUmVnaW9ucyBvZiBpbnRlcmVzdCBzdHJ1Y3R1cmUg Zm9yIG1hcHBpbmcgQ1JUQyB0byBDb25uZWN0b3IgCj4+IG91dHB1dAo+PiAtICovCj4+IC1zdHJ1 Y3QgbXNtX2Rpc3BsYXlfa2lja29mZl9wYXJhbXMgewo+PiAtCXN0cnVjdCBtc21fcm9pX2xpc3Qg KnJvaXM7Cj4+ICB9Owo+PiAKPj4gIC8qKgo+PiAtLQo+PiBUaGUgUXVhbGNvbW0gSW5ub3ZhdGlv biBDZW50ZXIsIEluYy4gaXMgYSBtZW1iZXIgb2YgdGhlIENvZGUgQXVyb3JhIAo+PiBGb3J1bSwK Pj4gYSBMaW51eCBGb3VuZGF0aW9uIENvbGxhYm9yYXRpdmUgUHJvamVjdAo+PiAKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRnJlZWRyZW5vIG1haWxpbmcg bGlzdApGcmVlZHJlbm9AbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZnJlZWRyZW5vCg==