From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v3 04/10] drm/i915: HDCP SRM parsing and revocation check Date: Wed, 27 Mar 2019 11:16:40 +0100 Message-ID: <20190327101640.GB2665@phenom.ffwll.local> References: <20190322004448.14045-1-ramalingam.c@intel.com> <20190322004448.14045-5-ramalingam.c@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-ed1-x543.google.com (mail-ed1-x543.google.com [IPv6:2a00:1450:4864:20::543]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9D8B56E157 for ; Wed, 27 Mar 2019 10:16:44 +0000 (UTC) Received: by mail-ed1-x543.google.com with SMTP id m16so13452622edd.12 for ; Wed, 27 Mar 2019 03:16:44 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20190322004448.14045-5-ramalingam.c@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Ramalingam C Cc: daniel.vetter@ffwll.ch, intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gRnJpLCBNYXIgMjIsIDIwMTkgYXQgMDY6MTQ6NDJBTSArMDUzMCwgUmFtYWxpbmdhbSBDIHdy b3RlOgo+IEltcGxlbWVudHMgdGhlIFNSTSB0YWJsZSBwYXJzaW5nIGZvciBIRENQIDEuNCBhbmQg Mi4yLgo+IEFuZCBhbHNvIHJldm9jYXRpb24gY2hlY2sgaXMgYWRkZWQgYXQgYXV0aGVudGljYXRp b24gb2YgSERDUDEuNAo+IGFuZCAyLjIKPiAKPiBTaWduZWQtb2ZmLWJ5OiBSYW1hbGluZ2FtIEMg PHJhbWFsaW5nYW0uY0BpbnRlbC5jb20+Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZHJ2LmMgICB8ICAgMSArCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggICB8 ICAgNiArCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oICB8ICAgMiArCj4gIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2hkY3AuYyB8IDMwOCArKysrKysrKysrKysrKysrKysr KysrKysrKysrLS0KPiAgaW5jbHVkZS9kcm0vZHJtX2hkY3AuaCAgICAgICAgICAgIHwgIDMyICsr KysKCk5lZWRzIHRvIGJlIHNwbGl0IG91dCBhcyBhIGRybSBjb3JlIHBhdGNoLgoKSSBhbHNvIHdv bmRlciB3aGV0aGVyIHNvbWUgb2YgdGhlIFNSTSBwYXJzaW5nIHNob3VsZCBiZSBoZWxwZXIgZnVu Y3Rpb25zCmluIGEgbmV3IGRybV9oZGNwLmMgZmlsZSAuLi4gV291bGQgZml0IHJlYWxseSB3ZWxs IHdpdGggdGhlIG92ZXJhbGwgc2luZ2xlCmRybSBzeXNmcyBmaWxlIGZvciBTUk0gZGVzaWduLCB3 aGVyZSBhbGwgdGhlIHBhcnNpbmcgaXMgZG9uZSBvbmNlIGluIHRoZQpjb3JlLiBBbmQgdGhlbiBk cml2ZXJzIGp1c3QgaGF2ZSBmdW5jdGlvbnMgdG8gZWl0aGVyIGdldCB0aGUgZW50aXJlIFNSTQoo Zm9yIHVwbG9hZCB0byBNRSksIG9yIGNoZWNrIGEga3N2IGFnYWluc3QgdGhlIHJldm9jYXRpb24g bGlzdCAoaGRjcDEueCkuCgpTaW5jZSB0aGUgcGFyc2luZyBjb2RlIG1pZ2h0IGJlIHNsaWdodGx5 IGRpZmZlcmVudCBpZiB3ZSBpbnRlZ3JhdGUgaXQgbW9yZQp0aWdodGx5IHdpdGggYSBzeXNmcyBi aW5hcnkgZmlsZSBJJ2xsIHdhaXQgd2l0aCByZXZpZXdpbmcgdGhlIGRldGFpbHMKdW50aWwgd2Un dmUgc2V0dGxlZCBvbiB0aGUgYmlnIHBpY3R1cmUuIEJ1dCBsb29rcyBhbGwgcmVhc29uYWJsZS4K LURhbmllbAoKCj4gIDUgZmlsZXMgY2hhbmdlZCwgMzM0IGluc2VydGlvbnMoKyksIDE1IGRlbGV0 aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5j IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwo+IGluZGV4IGEzYjAwZWNjNThjOS4u NjBhODk0ZmFiNGZjIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2 LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCj4gQEAgLTg3Myw2ICs4 NzMsNyBAQCBzdGF0aWMgaW50IGk5MTVfZHJpdmVyX2luaXRfZWFybHkoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KQo+ICAJbXV0ZXhfaW5pdCgmZGV2X3ByaXYtPndtLndtX211dGV4 KTsKPiAgCW11dGV4X2luaXQoJmRldl9wcml2LT5wcHNfbXV0ZXgpOwo+ICAJbXV0ZXhfaW5pdCgm ZGV2X3ByaXYtPmhkY3BfY29tcF9tdXRleCk7Cj4gKwltdXRleF9pbml0KCZkZXZfcHJpdi0+c3Jt X211dGV4KTsKPiAgCj4gIAlpOTE1X21lbWNweV9pbml0X2Vhcmx5KGRldl9wcml2KTsKPiAgCWlu dGVsX3J1bnRpbWVfcG1faW5pdF9lYXJseShkZXZfcHJpdik7Cj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Ry di5oCj4gaW5kZXggYzY1YzJlNjY0OWRmLi45YjlkYWY2Yzk0OTAgMTAwNjQ0Cj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZHJ2LmgKPiBAQCAtMjA2MSw2ICsyMDYxLDEyIEBAIHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlIHsKPiAgCS8qIE11dGV4IHRvIHByb3RlY3QgdGhlIGFib3ZlIGhkY3AgY29tcG9uZW50IHJl bGF0ZWQgdmFsdWVzLiAqLwo+ICAJc3RydWN0IG11dGV4IGhkY3BfY29tcF9tdXRleDsKPiAgCj4g Kwl1bnNpZ25lZCBpbnQgcmV2b2NhdGVkX2tzdl9jbnQ7Cj4gKwl1OCAqcmV2b2NhdGVkX2tzdl9s aXN0Owo+ICsKPiArCS8qIE11dGV4IHRvIHByb3RlY3QgdGhlIGRhdGEgYWJvdXQgcmV2b2NhdGVk IGtzdnMgKi8KPiArCXN0cnVjdCBtdXRleCBzcm1fbXV0ZXg7Cj4gKwo+ICAJLyoKPiAgCSAqIE5P VEU6IFRoaXMgaXMgdGhlIGRyaTEvdW1zIGR1bmdlb24sIGRvbid0IGFkZCBzdHVmZiBoZXJlLiBZ b3VyIHBhdGNoCj4gIAkgKiB3aWxsIGJlIHJlamVjdGVkLiBJbnN0ZWFkIGxvb2sgZm9yIGEgYmV0 dGVyIHBsYWNlLgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYu aCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCj4gaW5kZXggZTM4N2U4NDJmNDE0 Li40ZGIxNWVlODEwNDIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf ZHJ2LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAo+IEBAIC0yMTg3 LDYgKzIxODcsOCBAQCB2b2lkIGludGVsX2hkY3BfY29tcG9uZW50X2luaXQoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPiAgdm9pZCBpbnRlbF9oZGNwX2NvbXBvbmVudF9maW5p KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4gIHZvaWQgaW50ZWxfaGRjcF9j bGVhbnVwKHN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmNvbm5lY3Rvcik7Cj4gIHZvaWQgaW50ZWxf aGRjcF9oYW5kbGVfY3BfaXJxKHN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmNvbm5lY3Rvcik7Cj4g K3NzaXplX3QgaW50ZWxfaGRjcF9zcm1fdXBkYXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiwgY2hhciAqYnVmLAo+ICsJCQkgICAgICBzaXplX3QgY291bnQpOwo+ICAKPiAgLyog aW50ZWxfcHNyLmMgKi8KPiAgI2RlZmluZSBDQU5fUFNSKGRldl9wcml2KSAoSEFTX1BTUihkZXZf cHJpdikgJiYgZGV2X3ByaXYtPnBzci5zaW5rX3N1cHBvcnQpCj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2hkY3AuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2hkY3AuYwo+IGluZGV4IDliNDkwNGE2Mjc0NC4uOTIxZjA3YzY0MzUwIDEwMDY0NAo+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2hkY3AuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2hkY3AuYwo+IEBAIC0yNzMsNiArMjczLDYyIEBAIHUzMiBpbnRlbF9oZGNw X2dldF9yZXBlYXRlcl9jdGwoc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGlnX3Bv cnQpCj4gIAlyZXR1cm4gLUVJTlZBTDsKPiAgfQo+ICAKPiArc3RhdGljIGlubGluZSB2b2lkIGlu dGVsX2hkY3BfcHJpbnRfa3N2KHU4ICprc3YpCj4gK3sKPiArCURSTV9ERUJVR19LTVMoIlx0JSMw NHgsICUjMDR4LCAlIzA0eCwgJSMwNHgsICUjMDR4XG4iLCAqa3N2LAo+ICsJCSAgICAgICooa3N2 ICsgMSksICooa3N2ICsgMiksICooa3N2ICsgMyksICooa3N2ICsgNCkpOwo+ICt9Cj4gKwo+ICtz dGF0aWMgaW5saW5lCj4gK3N0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmludGVsX2hkY3BfdG9fY29u bmVjdG9yKHN0cnVjdCBpbnRlbF9oZGNwICpoZGNwKQo+ICt7Cj4gKwlyZXR1cm4gY29udGFpbmVy X29mKGhkY3AsIHN0cnVjdCBpbnRlbF9jb25uZWN0b3IsIGhkY3ApOwo+ICt9Cj4gKwo+ICsvKiBD aGVjayBpZiBhbnkgb2YgdGhlIEtTViBpcyByZXZvY2F0ZWQgYnkgRENQIExMQyB0aHJvdWdoIFNS TSB0YWJsZSAqLwo+ICtzdGF0aWMgaW5saW5lCj4gK2Jvb2wgaW50ZWxfaGRjcF9rc3ZzX3Jldm9j YXRlZChzdHJ1Y3QgaW50ZWxfaGRjcCAqaGRjcCwgdTggKmtzdnMsIHUzMiBrc3ZfY291bnQpCj4g K3sKPiArCXN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmNvbm5lY3RvciA9IGludGVsX2hkY3BfdG9f Y29ubmVjdG9yKGhkY3ApOwo+ICsJc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGln X3BvcnQgPSBjb25uX3RvX2RpZ19wb3J0KGNvbm5lY3Rvcik7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPQo+ICsJCQkJaW50ZWxfZGlnX3BvcnQtPmJhc2UuYmFzZS5kZXYt PmRldl9wcml2YXRlOwo+ICsJdTMyIHJldl9rc3ZfY250LCBjbnQsIGksIGo7Cj4gKwl1OCAqcmV2 X2tzdl9saXN0Owo+ICsKPiArCW11dGV4X2xvY2soJmRldl9wcml2LT5zcm1fbXV0ZXgpOwo+ICsJ cmV2X2tzdl9jbnQgPSBkZXZfcHJpdi0+cmV2b2NhdGVkX2tzdl9jbnQ7Cj4gKwlyZXZfa3N2X2xp c3QgPSBkZXZfcHJpdi0+cmV2b2NhdGVkX2tzdl9saXN0Owo+ICsKPiArCS8qIElmIHRoZSBSZXZv Y2F0ZWQga3N2IGxpc3QgaXMgZW1wdHkgKi8KPiArCWlmICghcmV2X2tzdl9jbnQgfHwgIXJldl9r c3ZfbGlzdCkgewo+ICsJCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPnNybV9tdXRleCk7Cj4gKwkJ cmV0dXJuIGZhbHNlOwo+ICsJfQo+ICsKPiArCWZvciAgKGNudCA9IDA7IGNudCA8IGtzdl9jb3Vu dDsgY250KyspIHsKPiArCQlyZXZfa3N2X2xpc3QgPSBkZXZfcHJpdi0+cmV2b2NhdGVkX2tzdl9s aXN0Owo+ICsJCWZvciAoaSA9IDA7IGkgPCByZXZfa3N2X2NudDsgaSsrKSB7Cj4gKwkJCWZvciAo aiA9IDA7IGogPCBEUk1fSERDUF9LU1ZfTEVOOyBqKyspCj4gKwkJCQlpZiAoKihrc3ZzICsgaikg IT0gKihyZXZfa3N2X2xpc3QgKyBqKSkgewo+ICsJCQkJCWJyZWFrOwo+ICsJCQkJfSBlbHNlIGlm IChqID09IChEUk1fSERDUF9LU1ZfTEVOIC0gMSkpIHsKPiArCQkJCQlEUk1fREVCVUdfS01TKCJS ZXZvY2F0ZWQgS1NWIGlzICIpOwo+ICsJCQkJCWludGVsX2hkY3BfcHJpbnRfa3N2KGtzdnMpOwo+ ICsJCQkJCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPnNybV9tdXRleCk7Cj4gKwkJCQkJcmV0dXJu IHRydWU7Cj4gKwkJCQl9Cj4gKwkJCS8qIE1vdmUgdGhlIG9mZnNldCB0byBuZXh0IEtTViBpbiB0 aGUgcmV2b2NhdGVkIGxpc3QgKi8KPiArCQkJcmV2X2tzdl9saXN0ICs9IERSTV9IRENQX0tTVl9M RU47Cj4gKwkJfQo+ICsKPiArCQkvKiBJdGVyYXRlIHRvIG5leHQga3N2X29mZnNldCAqLwo+ICsJ CWtzdnMgKz0gRFJNX0hEQ1BfS1NWX0xFTjsKPiArCX0KPiArCW11dGV4X3VubG9jaygmZGV2X3By aXYtPnNybV9tdXRleCk7Cj4gKwlyZXR1cm4gZmFsc2U7Cj4gK30KPiArCj4gIHN0YXRpYwo+ICBp bnQgaW50ZWxfaGRjcF92YWxpZGF0ZV92X3ByaW1lKHN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQg KmludGVsX2RpZ19wb3J0LAo+ICAJCQkJY29uc3Qgc3RydWN0IGludGVsX2hkY3Bfc2hpbSAqc2hp bSwKPiBAQCAtNDkwLDkgKzU0NiwxMCBAQCBpbnQgaW50ZWxfaGRjcF92YWxpZGF0ZV92X3ByaW1l KHN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmludGVsX2RpZ19wb3J0LAo+ICAKPiAgLyogSW1w bGVtZW50cyBQYXJ0IDIgb2YgdGhlIEhEQ1AgYXV0aG9yaXphdGlvbiBwcm9jZWR1cmUgKi8KPiAg c3RhdGljCj4gLWludCBpbnRlbF9oZGNwX2F1dGhfZG93bnN0cmVhbShzdHJ1Y3QgaW50ZWxfZGln aXRhbF9wb3J0ICppbnRlbF9kaWdfcG9ydCwKPiAtCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpbnRl bF9oZGNwX3NoaW0gKnNoaW0pCj4gK2ludCBpbnRlbF9oZGNwX2F1dGhfZG93bnN0cmVhbShzdHJ1 Y3QgaW50ZWxfaGRjcCAqaGRjcCwKPiArCQkJICAgICAgIHN0cnVjdCBpbnRlbF9kaWdpdGFsX3Bv cnQgKmludGVsX2RpZ19wb3J0KQo+ICB7Cj4gKwljb25zdCBzdHJ1Y3QgaW50ZWxfaGRjcF9zaGlt ICpzaGltID0gaGRjcC0+c2hpbTsKPiAgCXU4IGJzdGF0dXNbMl0sIG51bV9kb3duc3RyZWFtLCAq a3N2X2ZpZm87Cj4gIAlpbnQgcmV0LCBpLCB0cmllcyA9IDM7Cj4gIAo+IEBAIC01MzEsNiArNTg4 LDExIEBAIGludCBpbnRlbF9oZGNwX2F1dGhfZG93bnN0cmVhbShzdHJ1Y3QgaW50ZWxfZGlnaXRh bF9wb3J0ICppbnRlbF9kaWdfcG9ydCwKPiAgCWlmIChyZXQpCj4gIAkJZ290byBlcnI7Cj4gIAo+ ICsJaWYgKGludGVsX2hkY3Bfa3N2c19yZXZvY2F0ZWQoaGRjcCwga3N2X2ZpZm8sIG51bV9kb3du c3RyZWFtKSkgewo+ICsJCURSTV9FUlJPUigiUmV2b2NhdGVkIEtzdihzKSBpbiBrc3ZfZmlmb1xu Iik7Cj4gKwkJcmV0dXJuIC1FUEVSTTsKPiArCX0KPiArCj4gIAkvKgo+ICAJICogV2hlbiBWIHBy aW1lIG1pc21hdGNoZXMsIERQIFNwZWMgbWFuZGF0ZXMgcmUtcmVhZCBvZgo+ICAJICogViBwcmlt ZSBhdGxlYXN0IHR3aWNlLgo+IEBAIC01NTcsOSArNjE5LDExIEBAIGludCBpbnRlbF9oZGNwX2F1 dGhfZG93bnN0cmVhbShzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICppbnRlbF9kaWdfcG9ydCwK PiAgfQo+ICAKPiAgLyogSW1wbGVtZW50cyBQYXJ0IDEgb2YgdGhlIEhEQ1AgYXV0aG9yaXphdGlv biBwcm9jZWR1cmUgKi8KPiAtc3RhdGljIGludCBpbnRlbF9oZGNwX2F1dGgoc3RydWN0IGludGVs X2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQsCj4gLQkJCSAgIGNvbnN0IHN0cnVjdCBpbnRl bF9oZGNwX3NoaW0gKnNoaW0pCj4gK3N0YXRpYyBpbnQgaW50ZWxfaGRjcF9hdXRoKHN0cnVjdCBp bnRlbF9jb25uZWN0b3IgKmNvbm5lY3RvcikKPiAgewo+ICsJc3RydWN0IGludGVsX2RpZ2l0YWxf cG9ydCAqaW50ZWxfZGlnX3BvcnQgPSBjb25uX3RvX2RpZ19wb3J0KGNvbm5lY3Rvcik7Cj4gKwlz dHJ1Y3QgaW50ZWxfaGRjcCAqaGRjcCA9ICZjb25uZWN0b3ItPmhkY3A7Cj4gKwljb25zdCBzdHJ1 Y3QgaW50ZWxfaGRjcF9zaGltICpzaGltID0gaGRjcC0+c2hpbTsKPiAgCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdjsKPiAgCWVudW0gcG9ydCBwb3J0Owo+ICAJdW5zaWduZWQgbG9u ZyByMF9wcmltZV9nZW5fc3RhcnQ7Cj4gQEAgLTYyNSw2ICs2ODksMTEgQEAgc3RhdGljIGludCBp bnRlbF9oZGNwX2F1dGgoc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQs Cj4gIAlpZiAocmV0IDwgMCkKPiAgCQlyZXR1cm4gcmV0Owo+ICAKPiArCWlmIChpbnRlbF9oZGNw X2tzdnNfcmV2b2NhdGVkKGhkY3AsIGJrc3Yuc2hpbSwgMSkpIHsKPiArCQlEUk1fRVJST1IoIkJL U1YgaXMgcmV2b2NhdGVkXG4iKTsKPiArCQlyZXR1cm4gLUVQRVJNOwo+ICsJfQo+ICsKPiAgCUk5 MTVfV1JJVEUoUE9SVF9IRENQX0JLU1ZMTyhwb3J0KSwgYmtzdi5yZWdbMF0pOwo+ICAJSTkxNV9X UklURShQT1JUX0hEQ1BfQktTVkhJKHBvcnQpLCBia3N2LnJlZ1sxXSk7Cj4gIAo+IEBAIC02OTgs NyArNzY3LDcgQEAgc3RhdGljIGludCBpbnRlbF9oZGNwX2F1dGgoc3RydWN0IGludGVsX2RpZ2l0 YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQsCj4gIAkgKi8KPiAgCj4gIAlpZiAocmVwZWF0ZXJfcHJl c2VudCkKPiAtCQlyZXR1cm4gaW50ZWxfaGRjcF9hdXRoX2Rvd25zdHJlYW0oaW50ZWxfZGlnX3Bv cnQsIHNoaW0pOwo+ICsJCXJldHVybiBpbnRlbF9oZGNwX2F1dGhfZG93bnN0cmVhbShoZGNwLCBp bnRlbF9kaWdfcG9ydCk7Cj4gIAo+ICAJRFJNX0RFQlVHX0tNUygiSERDUCBpcyBlbmFibGVkIChu byByZXBlYXRlciBwcmVzZW50KVxuIik7Cj4gIAlyZXR1cm4gMDsKPiBAQCAtNzM1LDcgKzgwNCw2 IEBAIHN0YXRpYyBpbnQgX2ludGVsX2hkY3BfZGlzYWJsZShzdHJ1Y3QgaW50ZWxfY29ubmVjdG9y ICpjb25uZWN0b3IpCj4gIAo+ICBzdGF0aWMgaW50IF9pbnRlbF9oZGNwX2VuYWJsZShzdHJ1Y3Qg aW50ZWxfY29ubmVjdG9yICpjb25uZWN0b3IpCj4gIHsKPiAtCXN0cnVjdCBpbnRlbF9oZGNwICpo ZGNwID0gJmNvbm5lY3Rvci0+aGRjcDsKPiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9IGNvbm5lY3Rvci0+YmFzZS5kZXYtPmRldl9wcml2YXRlOwo+ICAJaW50IGksIHJldCwg dHJpZXMgPSAzOwo+ICAKPiBAQCAtNzYwLDkgKzgyOCw5IEBAIHN0YXRpYyBpbnQgX2ludGVsX2hk Y3BfZW5hYmxlKHN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmNvbm5lY3RvcikKPiAgCj4gIAkvKiBJ bmNhc2Ugb2YgYXV0aGVudGljYXRpb24gZmFpbHVyZXMsIEhEQ1Agc3BlYyBleHBlY3RzIHJlYXV0 aC4gKi8KPiAgCWZvciAoaSA9IDA7IGkgPCB0cmllczsgaSsrKSB7Cj4gLQkJcmV0ID0gaW50ZWxf aGRjcF9hdXRoKGNvbm5fdG9fZGlnX3BvcnQoY29ubmVjdG9yKSwgaGRjcC0+c2hpbSk7Cj4gKwkJ cmV0ID0gaW50ZWxfaGRjcF9hdXRoKGNvbm5lY3Rvcik7Cj4gIAkJaWYgKCFyZXQpIHsKPiAtCQkJ aGRjcC0+aGRjcF9lbmNyeXB0ZWQgPSB0cnVlOwo+ICsJCQljb25uZWN0b3ItPmhkY3AuaGRjcF9l bmNyeXB0ZWQgPSB0cnVlOwo+ICAJCQlyZXR1cm4gMDsKPiAgCQl9Cj4gIAo+IEBAIC03NzYsMTIg Kzg0NCw2IEBAIHN0YXRpYyBpbnQgX2ludGVsX2hkY3BfZW5hYmxlKHN0cnVjdCBpbnRlbF9jb25u ZWN0b3IgKmNvbm5lY3RvcikKPiAgCXJldHVybiByZXQ7Cj4gIH0KPiAgCj4gLXN0YXRpYyBpbmxp bmUKPiAtc3RydWN0IGludGVsX2Nvbm5lY3RvciAqaW50ZWxfaGRjcF90b19jb25uZWN0b3Ioc3Ry dWN0IGludGVsX2hkY3AgKmhkY3ApCj4gLXsKPiAtCXJldHVybiBjb250YWluZXJfb2YoaGRjcCwg c3RydWN0IGludGVsX2Nvbm5lY3RvciwgaGRjcCk7Cj4gLX0KPiAtCj4gIC8qIEltcGxlbWVudHMg UGFydCAzIG9mIHRoZSBIRENQIGF1dGhvcml6YXRpb24gcHJvY2VkdXJlICovCj4gIHN0YXRpYyBp bnQgaW50ZWxfaGRjcF9jaGVja19saW5rKHN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmNvbm5lY3Rv cikKPiAgewo+IEBAIC0xMTkzLDYgKzEyNTUsMTIgQEAgc3RhdGljIGludCBoZGNwMl9hdXRoZW50 aWNhdGlvbl9rZXlfZXhjaGFuZ2Uoc3RydWN0IGludGVsX2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+ ICAKPiAgCWhkY3AtPmlzX3JlcGVhdGVyID0gSERDUF8yXzJfUlhfUkVQRUFURVIobXNncy5zZW5k X2NlcnQucnhfY2Fwc1syXSk7Cj4gIAo+ICsJaWYgKGludGVsX2hkY3Bfa3N2c19yZXZvY2F0ZWQo aGRjcCwKPiArCQkJCSAgICAgIG1zZ3Muc2VuZF9jZXJ0LmNlcnRfcngucmVjZWl2ZXJfaWQsIDEp KSB7Cj4gKwkJRFJNX0VSUk9SKCJSZWNlaXZlciBJRCBpcyByZXZvY2F0ZWRcbiIpOwo+ICsJCXJl dHVybiAtRVBFUk07Cj4gKwl9Cj4gKwo+ICAJLyoKPiAgCSAqIEhlcmUgbXNncy5ub19zdG9yZWRf a20gd2lsbCBob2xkIG1zZ3MgY29ycmVzcG9uZGluZyB0byB0aGUga20KPiAgCSAqIHN0b3JlZCBh bHNvLgo+IEBAIC0xMzUxLDcgKzE0MTksNyBAQCBpbnQgaGRjcDJfYXV0aGVudGljYXRlX3JlcGVh dGVyX3RvcG9sb2d5KHN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmNvbm5lY3RvcikKPiAgCX0gbXNn czsKPiAgCWNvbnN0IHN0cnVjdCBpbnRlbF9oZGNwX3NoaW0gKnNoaW0gPSBoZGNwLT5zaGltOwo+ ICAJdTggKnJ4X2luZm87Cj4gLQl1MzIgc2VxX251bV92Owo+ICsJdTMyIHNlcV9udW1fdiwgZGV2 aWNlX2NudDsKPiAgCWludCByZXQ7Cj4gIAo+ICAJcmV0ID0gc2hpbS0+cmVhZF8yXzJfbXNnKGlu dGVsX2RpZ19wb3J0LCBIRENQXzJfMl9SRVBfU0VORF9SRUNWSURfTElTVCwKPiBAQCAtMTM3Niw2 ICsxNDQ0LDE0IEBAIGludCBoZGNwMl9hdXRoZW50aWNhdGVfcmVwZWF0ZXJfdG9wb2xvZ3koc3Ry dWN0IGludGVsX2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+ICAJCXJldHVybiAtRUlOVkFMOwo+ICAJ fQo+ICAKPiArCWRldmljZV9jbnQgPSBIRENQXzJfMl9ERVZfQ09VTlRfSEkocnhfaW5mb1swXSkg PDwgNCB8fAo+ICsJCQlIRENQXzJfMl9ERVZfQ09VTlRfTE8ocnhfaW5mb1sxXSk7Cj4gKwlpZiAo aW50ZWxfaGRjcF9rc3ZzX3Jldm9jYXRlZChoZGNwLCBtc2dzLnJlY3ZpZF9saXN0LnJlY2VpdmVy X2lkcywKPiArCQkJCSAgICAgIGRldmljZV9jbnQpKSB7Cj4gKwkJRFJNX0VSUk9SKCJSZXZva2Vk IHJlY2VpdmVyIElEKHMpIGlzIGluIGxpc3RcbiIpOwo+ICsJCXJldHVybiAtRVBFUk07Cj4gKwl9 Cj4gKwo+ICAJcmV0ID0gaGRjcDJfdmVyaWZ5X3JlcF90b3BvbG9neV9wcmVwYXJlX2Fjayhjb25u ZWN0b3IsCj4gIAkJCQkJCSAgICAmbXNncy5yZWN2aWRfbGlzdCwKPiAgCQkJCQkJICAgICZtc2dz LnJlcF9hY2spOwo+IEBAIC0xODE4LDYgKzE4OTQsMjA4IEBAIGludCBpbnRlbF9oZGNwX2luaXQo c3RydWN0IGludGVsX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+ICAJcmV0dXJuIDA7Cj4gIH0KPiAg Cj4gK3N0YXRpYyB1MzIgaW50ZWxfaGRjcF9nZXRfcmV2b2NhdGVkX2tzdl9jb3VudCh1OCAqYnVm LCB1MzIgdnJsc19sZW5ndGgpCj4gK3sKPiArCXUzMiBwYXJzZWRfYnl0ZXMgPSAwLCBrc3ZfY291 bnQgPSAwLCB2cmxfa3N2X2NudCwgdnJsX3N6Owo+ICsKPiArCWRvIHsKPiArCQl2cmxfa3N2X2Nu dCA9ICpidWY7Cj4gKwkJa3N2X2NvdW50ICs9IHZybF9rc3ZfY250Owo+ICsKPiArCQl2cmxfc3og PSAodnJsX2tzdl9jbnQgKiBEUk1fSERDUF9LU1ZfTEVOKSArIDE7Cj4gKwkJYnVmICs9IHZybF9z ejsKPiArCQlwYXJzZWRfYnl0ZXMgKz0gdnJsX3N6Owo+ICsJfSB3aGlsZSAocGFyc2VkX2J5dGVz IDwgdnJsc19sZW5ndGgpOwo+ICsKPiArCXJldHVybiBrc3ZfY291bnQ7Cj4gK30KPiArCj4gK3N0 YXRpYyB1MzIgaW50ZWxfaGRjcF9nZXRfcmV2b2NhdGVkX2tzdnModTggKmtzdl9saXN0LCBjb25z dCB1OCAqYnVmLAo+ICsJCQkJCSB1MzIgdnJsc19sZW5ndGgpCj4gK3sKPiArCXUzMiBwYXJzZWRf Ynl0ZXMgPSAwLCBrc3ZfY291bnQgPSAwOwo+ICsJdTMyIHZybF9rc3ZfY250LCB2cmxfa3N2X3N6 LCB2cmxfaWR4ID0gMDsKPiArCj4gKwlkbyB7Cj4gKwkJdnJsX2tzdl9jbnQgPSAqYnVmOwo+ICsJ CXZybF9rc3Zfc3ogPSB2cmxfa3N2X2NudCAqIERSTV9IRENQX0tTVl9MRU47Cj4gKwo+ICsJCWJ1 ZisrOwo+ICsKPiArCQlEUk1fREVCVUdfS01TKCJ2cmw6ICVkLCBSZXZva2VkIEtTVnM6ICVkXG4i LCB2cmxfaWR4KyssCj4gKwkJCSAgICAgIHZybF9rc3ZfY250KTsKPiArCQltZW1jcHkoa3N2X2xp c3QsIGJ1ZiwgdnJsX2tzdl9zeik7Cj4gKwo+ICsJCWtzdl9jb3VudCArPSB2cmxfa3N2X2NudDsK PiArCQlrc3ZfbGlzdCArPSB2cmxfa3N2X3N6Owo+ICsJCWJ1ZiArPSB2cmxfa3N2X3N6Owo+ICsK PiArCQlwYXJzZWRfYnl0ZXMgKz0gKHZybF9rc3Zfc3ogKyAxKTsKPiArCX0gd2hpbGUgKHBhcnNl ZF9ieXRlcyA8IHZybHNfbGVuZ3RoKTsKPiArCj4gKwlyZXR1cm4ga3N2X2NvdW50Owo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW50IGludGVsX2hkY3BfcGFyc2Vfc3JtKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiwgY2hhciAqYnVmLAo+ICsJCQkJc2l6ZV90IGNvdW50KQo+ICt7Cj4gKwlz dHJ1Y3QgaGRjcF9zcm1faGVhZGVyICpoZWFkZXI7Cj4gKwl1MzIgdnJsX2xlbmd0aCwga3N2X2Nv dW50Owo+ICsKPiArCWlmIChjb3VudCA8IChzaXplb2Yoc3RydWN0IGhkY3Bfc3JtX2hlYWRlcikg Kwo+ICsJICAgIERSTV9IRENQXzFfNF9WUkxfTEVOR1RIX1NJWkUgKyBEUk1fSERDUF8xXzRfRENQ X1NJR19TSVpFKSkgewo+ICsJCURSTV9FUlJPUigiSW52YWxpZCBibG9iIGxlbmd0aFxuIik7Cj4g KwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJaGVhZGVyID0gKHN0cnVjdCBoZGNwX3Ny bV9oZWFkZXIgKilidWY7Cj4gKwltdXRleF9sb2NrKCZkZXZfcHJpdi0+c3JtX211dGV4KTsKPiAr CURSTV9ERUJVR19LTVMoIlNSTSBJRDogMHgleCwgU1JNIFZlcjogMHgleCwgU1JNIEdlbiBObzog MHgleFxuIiwKPiArCQkgICAgICBoZWFkZXItPnNwZWNfaW5kaWNhdG9yLnNybV9pZCwKPiArCQkg ICAgICBfX3N3YWIxNihoZWFkZXItPnNybV92ZXJzaW9uKSwgaGVhZGVyLT5zcm1fZ2VuX25vKTsK PiArCj4gKwlXQVJOX09OKGhlYWRlci0+c3BlY19pbmRpY2F0b3IucmVzZXJ2ZWRfaGkgfHwKPiAr CQloZWFkZXItPnNwZWNfaW5kaWNhdG9yLnJlc2VydmVkX2xvKTsKPiArCj4gKwlpZiAoaGVhZGVy LT5zcGVjX2luZGljYXRvci5zcm1faWQgIT0gRFJNX0hEQ1BfMV80X1NSTV9JRCkgewo+ICsJCURS TV9FUlJPUigiSW52YWxpZCBzcm1faWRcbiIpOwo+ICsJCW11dGV4X3VubG9jaygmZGV2X3ByaXYt PnNybV9tdXRleCk7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJYnVmID0gYnVm ICsgc2l6ZW9mKCpoZWFkZXIpOwo+ICsJdnJsX2xlbmd0aCA9ICgqYnVmIDw8IDE2IHwgKihidWYg KyAxKSA8PCA4IHwgKihidWYgKyAyKSk7Cj4gKwlpZiAoY291bnQgPCAoc2l6ZW9mKHN0cnVjdCBo ZGNwX3NybV9oZWFkZXIpICsgdnJsX2xlbmd0aCkgfHwKPiArCSAgICB2cmxfbGVuZ3RoIDwgKERS TV9IRENQXzFfNF9WUkxfTEVOR1RIX1NJWkUgKwo+ICsJCQkgIERSTV9IRENQXzFfNF9EQ1BfU0lH X1NJWkUpKSB7Cj4gKwkJRFJNX0VSUk9SKCJJbnZhbGlkIGJsb2IgbGVuZ3RoIG9yIHZybCBsZW5n dGhcbiIpOwo+ICsJCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPnNybV9tdXRleCk7Cj4gKwkJcmV0 dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJLyogTGVuZ3RoIG9mIHRoZSBhbGwgdnJscyBjb21i aW5lZCAqLwo+ICsJdnJsX2xlbmd0aCAtPSAoRFJNX0hEQ1BfMV80X1ZSTF9MRU5HVEhfU0laRSAr Cj4gKwkJICAgICAgIERSTV9IRENQXzFfNF9EQ1BfU0lHX1NJWkUpOwo+ICsKPiArCWlmICghdnJs X2xlbmd0aCkgewo+ICsJCURSTV9ERUJVR19LTVMoIk5vIHZybCBmb3VuZFxuIik7Cj4gKwkJbXV0 ZXhfdW5sb2NrKCZkZXZfcHJpdi0+c3JtX211dGV4KTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiAr CX0KPiArCj4gKwlidWYgKz0gRFJNX0hEQ1BfMV80X1ZSTF9MRU5HVEhfU0laRTsKPiArCWtzdl9j b3VudCA9IGludGVsX2hkY3BfZ2V0X3Jldm9jYXRlZF9rc3ZfY291bnQoYnVmLCB2cmxfbGVuZ3Ro KTsKPiArCWlmICgha3N2X2NvdW50KSB7Cj4gKwkJRFJNX0RFQlVHX0tNUygiUmV2b2NhdGVkIEtT ViBjb3VudCBpcyAwXG4iKTsKPiArCQltdXRleF91bmxvY2soJmRldl9wcml2LT5zcm1fbXV0ZXgp Owo+ICsJCXJldHVybiBjb3VudDsKPiArCX0KPiArCj4gKwlrZnJlZShkZXZfcHJpdi0+cmV2b2Nh dGVkX2tzdl9saXN0KTsKPiArCWRldl9wcml2LT5yZXZvY2F0ZWRfa3N2X2xpc3QgPSBremFsbG9j KGtzdl9jb3VudCAqIERSTV9IRENQX0tTVl9MRU4sCj4gKwkJCQkJICAgICAgIEdGUF9LRVJORUwp Owo+ICsJaWYgKCFkZXZfcHJpdi0+cmV2b2NhdGVkX2tzdl9saXN0KSB7Cj4gKwkJRFJNX0VSUk9S KCJPdXQgb2YgTWVtb3J5XG4iKTsKPiArCQltdXRleF91bmxvY2soJmRldl9wcml2LT5zcm1fbXV0 ZXgpOwo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsJfQo+ICsKPiArCWlmIChpbnRlbF9oZGNwX2dl dF9yZXZvY2F0ZWRfa3N2cyhkZXZfcHJpdi0+cmV2b2NhdGVkX2tzdl9saXN0LAo+ICsJCQkJCSAg YnVmLCB2cmxfbGVuZ3RoKSAhPSBrc3ZfY291bnQpIHsKPiArCQlkZXZfcHJpdi0+cmV2b2NhdGVk X2tzdl9jbnQgPSAwOwo+ICsJCWtmcmVlKGRldl9wcml2LT5yZXZvY2F0ZWRfa3N2X2xpc3QpOwo+ ICsJCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPnNybV9tdXRleCk7Cj4gKwkJcmV0dXJuIC1FSU5W QUw7Cj4gKwl9Cj4gKwo+ICsJZGV2X3ByaXYtPnJldm9jYXRlZF9rc3ZfY250ID0ga3N2X2NvdW50 Owo+ICsJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+c3JtX211dGV4KTsKPiArCXJldHVybiBjb3Vu dDsKPiArfQo+ICsKPiArc3RhdGljIGludCBpbnRlbF9oZGNwMl9wYXJzZV9zcm0oc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBjaGFyICpidWYsCj4gKwkJCQkgc2l6ZV90IGNvdW50 KQo+ICt7Cj4gKwlzdHJ1Y3QgaGRjcDJfc3JtX2hlYWRlciAqaGVhZGVyOwo+ICsJdTMyIHZybF9s ZW5ndGgsIGtzdl9jb3VudCwga3N2X3N6Owo+ICsKPiArCW11dGV4X2xvY2soJmRldl9wcml2LT5z cm1fbXV0ZXgpOwo+ICsJaWYgKGNvdW50IDwgKHNpemVvZihzdHJ1Y3QgaGRjcDJfc3JtX2hlYWRl cikgKwo+ICsJICAgIERSTV9IRENQXzJfVlJMX0xFTkdUSF9TSVpFICsgRFJNX0hEQ1BfMl9EQ1Bf U0lHX1NJWkUpKSB7Cj4gKwkJRFJNX0VSUk9SKCJJbnZhbGlkIGJsb2IgbGVuZ3RoXG4iKTsKPiAr CQltdXRleF91bmxvY2soJmRldl9wcml2LT5zcm1fbXV0ZXgpOwo+ICsJCXJldHVybiAtRUlOVkFM Owo+ICsJfQo+ICsKPiArCWhlYWRlciA9IChzdHJ1Y3QgaGRjcDJfc3JtX2hlYWRlciAqKWJ1ZjsK PiArCURSTV9ERUJVR19LTVMoIlNSTSBJRDogMHgleCwgU1JNIFZlcjogMHgleCwgU1JNIEdlbiBO bzogMHgleFxuIiwKPiArCQkgICAgICBoZWFkZXItPnNwZWNfaW5kaWNhdG9yLnNybV9pZCwKPiAr CQkgICAgICBfX3N3YWIxNihoZWFkZXItPnNybV92ZXJzaW9uKSwgaGVhZGVyLT5zcm1fZ2VuX25v KTsKPiArCj4gKwlXQVJOX09OKGhlYWRlci0+c3BlY19pbmRpY2F0b3IucmVzZXJ2ZWQpOwo+ICsJ YnVmID0gYnVmICsgc2l6ZW9mKCpoZWFkZXIpOwo+ICsJdnJsX2xlbmd0aCA9ICgqYnVmIDw8IDE2 IHwgKihidWYgKyAxKSA8PCA4IHwgKihidWYgKyAyKSk7Cj4gKwo+ICsJaWYgKGNvdW50IDwgKHNp emVvZihzdHJ1Y3QgaGRjcDJfc3JtX2hlYWRlcikgKyB2cmxfbGVuZ3RoKSB8fAo+ICsJICAgIHZy bF9sZW5ndGggPCAoRFJNX0hEQ1BfMl9WUkxfTEVOR1RIX1NJWkUgKwo+ICsJICAgIERSTV9IRENQ XzJfRENQX1NJR19TSVpFKSkgewo+ICsJCURSTV9FUlJPUigiSW52YWxpZCBibG9iIGxlbmd0aCBv ciB2cmwgbGVuZ3RoXG4iKTsKPiArCQltdXRleF91bmxvY2soJmRldl9wcml2LT5zcm1fbXV0ZXgp Owo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCS8qIExlbmd0aCBvZiB0aGUgYWxs IHZybHMgY29tYmluZWQgKi8KPiArCXZybF9sZW5ndGggLT0gKERSTV9IRENQXzJfVlJMX0xFTkdU SF9TSVpFICsKPiArCQkgICAgICAgRFJNX0hEQ1BfMl9EQ1BfU0lHX1NJWkUpOwo+ICsKPiArCWlm ICghdnJsX2xlbmd0aCkgewo+ICsJCURSTV9ERUJVR19LTVMoIk5vIHZybCBmb3VuZFxuIik7Cj4g KwkJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+c3JtX211dGV4KTsKPiArCQlyZXR1cm4gLUVJTlZB TDsKPiArCX0KPiArCj4gKwlidWYgKz0gRFJNX0hEQ1BfMl9WUkxfTEVOR1RIX1NJWkU7Cj4gKwlr c3ZfY291bnQgPSAoKmJ1ZiA8PCAyKSB8IERSTV9IRENQXzJfS1NWX0NPVU5UXzJfTFNCSVRTKCoo YnVmICsgMSkpOwo+ICsJaWYgKCFrc3ZfY291bnQpIHsKPiArCQlEUk1fREVCVUdfS01TKCJSZXZv Y2F0ZWQgS1NWIGNvdW50IGlzIDBcbiIpOwo+ICsJCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPnNy bV9tdXRleCk7Cj4gKwkJcmV0dXJuIGNvdW50Owo+ICsJfQo+ICsKPiArCWtmcmVlKGRldl9wcml2 LT5yZXZvY2F0ZWRfa3N2X2xpc3QpOwo+ICsJZGV2X3ByaXYtPnJldm9jYXRlZF9rc3ZfbGlzdCA9 IGt6YWxsb2Moa3N2X2NvdW50ICogRFJNX0hEQ1BfS1NWX0xFTiwKPiArCQkJCQkgICAgICAgR0ZQ X0tFUk5FTCk7Cj4gKwlpZiAoIWRldl9wcml2LT5yZXZvY2F0ZWRfa3N2X2xpc3QpIHsKPiArCQlE Uk1fRVJST1IoIk91dCBvZiBNZW1vcnlcbiIpOwo+ICsJCW11dGV4X3VubG9jaygmZGV2X3ByaXYt PnNybV9tdXRleCk7Cj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwl9Cj4gKwo+ICsJa3N2X3N6ID0g a3N2X2NvdW50ICogRFJNX0hEQ1BfS1NWX0xFTjsKPiArCWJ1ZiArPSBEUk1fSERDUF8yX05PX09G X0RFVl9QTFVTX1JFU0VSVkVEX1NaOwo+ICsKPiArCURSTV9ERUJVR19LTVMoIlJldm9rZWQgS1NW czogJWRcbiIsIGtzdl9jb3VudCk7Cj4gKwltZW1jcHkoZGV2X3ByaXYtPnJldm9jYXRlZF9rc3Zf bGlzdCwgYnVmLCBrc3Zfc3opOwo+ICsKPiArCWRldl9wcml2LT5yZXZvY2F0ZWRfa3N2X2NudCA9 IGtzdl9jb3VudDsKPiArCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPnNybV9tdXRleCk7Cj4gKwly ZXR1cm4gY291bnQ7Cj4gK30KPiArCj4gK3NzaXplX3QgaW50ZWxfaGRjcF9zcm1fdXBkYXRlKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgY2hhciAqYnVmLAo+ICsJCQkgICAgICBz aXplX3QgY291bnQpCj4gK3sKPiArCXU4IHNybV9pZDsKPiArCj4gKwlzcm1faWQgPSAqKCh1OCAq KWJ1Zik7Cj4gKwlpZiAoc3JtX2lkID09IDB4ODApCj4gKwkJcmV0dXJuIChzc2l6ZV90KWludGVs X2hkY3BfcGFyc2Vfc3JtKGRldl9wcml2LCBidWYsIGNvdW50KTsKPiArCWVsc2UgaWYgKHNybV9p ZCA9PSAweDkxKQo+ICsJCXJldHVybiAoc3NpemVfdClpbnRlbF9oZGNwMl9wYXJzZV9zcm0oZGV2 X3ByaXYsIGJ1ZiwgY291bnQpOwo+ICsKPiArCXJldHVybiAoc3NpemVfdCktRUlOVkFMOwo+ICt9 Cj4gKwo+ICBpbnQgaW50ZWxfaGRjcF9lbmFibGUoc3RydWN0IGludGVsX2Nvbm5lY3RvciAqY29u bmVjdG9yLCB1OCBjb250ZW50X3R5cGUpCj4gIHsKPiAgCXN0cnVjdCBpbnRlbF9oZGNwICpoZGNw ID0gJmNvbm5lY3Rvci0+aGRjcDsKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2hkY3Au aCBiL2luY2x1ZGUvZHJtL2RybV9oZGNwLmgKPiBpbmRleCBmMjQzNDA4ZWNmMjYuLjY1MmFhZjVk NjU4ZSAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL2RybS9kcm1faGRjcC5oCj4gKysrIGIvaW5jbHVk ZS9kcm0vZHJtX2hkY3AuaAo+IEBAIC0yNjUsNCArMjY1LDM2IEBAIHZvaWQgZHJtX2hkY3AyX3Uz Ml90b19zZXFfbnVtKHU4IHNlcV9udW1bSERDUF8yXzJfU0VRX05VTV9MRU5dLCB1MzIgdmFsKQo+ ICAJc2VxX251bVsyXSA9IHZhbDsKPiAgfQo+ICAKPiArI2RlZmluZSBEUk1fSERDUF8xXzRfU1JN X0lECQkJMHg4Cj4gKyNkZWZpbmUgRFJNX0hEQ1BfMV80X1ZSTF9MRU5HVEhfU0laRQkJMwo+ICsj ZGVmaW5lIERSTV9IRENQXzFfNF9EQ1BfU0lHX1NJWkUJCTQwCj4gKwo+ICtzdHJ1Y3QgaGRjcF9z cm1faGVhZGVyIHsKPiArCXN0cnVjdCB7Cj4gKwkJdTggcmVzZXJ2ZWRfaGk6NDsKPiArCQl1OCBz cm1faWQ6NDsKPiArCQl1OCByZXNlcnZlZF9sbzsKPiArCX0gc3BlY19pbmRpY2F0b3I7Cj4gKwl1 MTYgc3JtX3ZlcnNpb247Cj4gKwl1OCBzcm1fZ2VuX25vOwo+ICt9IF9fcGFja2VkOwo+ICsKPiAr I2RlZmluZSBEUk1fSERDUF8yX1NSTV9JRAkJCTB4OQo+ICsjZGVmaW5lIERSTV9IRENQXzJfSU5E SUNBVE9SCQkJMHgxCj4gKyNkZWZpbmUgRFJNX0hEQ1BfMl9WUkxfTEVOR1RIX1NJWkUJCTMKPiAr I2RlZmluZSBEUk1fSERDUF8yX0RDUF9TSUdfU0laRQkJCTM4NAo+ICsjZGVmaW5lIERSTV9IRENQ XzJfTk9fT0ZfREVWX1BMVVNfUkVTRVJWRURfU1oJNAo+ICsKPiArI2RlZmluZSBEUk1fSERDUF8y X0tTVl9DT1VOVF8yX0xTQklUUyhieXRlKQkoKChieXRlKSAmIDB4QykgPj4gNikKPiArCj4gK3N0 cnVjdCBoZGNwMl9zcm1faGVhZGVyIHsKPiArCXN0cnVjdCB7Cj4gKwkJdTggaGRjcDJfaW5kaWNh dG9yOjQ7Cj4gKwkJdTggc3JtX2lkOjQ7Cj4gKwkJdTggcmVzZXJ2ZWQ7Cj4gKwl9IHNwZWNfaW5k aWNhdG9yOwo+ICsJdTE2IHNybV92ZXJzaW9uOwo+ICsJdTggc3JtX2dlbl9ubzsKPiArfSBfX3Bh Y2tlZDsKPiArCj4gICNlbmRpZgo+IC0tIAo+IDIuMTkuMQo+IAoKLS0gCkRhbmllbCBWZXR0ZXIK U29mdHdhcmUgRW5naW5lZXIsIEludGVsIENvcnBvcmF0aW9uCmh0dHA6Ly9ibG9nLmZmd2xsLmNo Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdm eCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeA==