From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ramalingam C Subject: Re: [PATCH v6 12/35] drm/i915: Implement HDCP2.2 receiver authentication Date: Thu, 30 Aug 2018 12:04:14 +0530 Message-ID: <6757a0fc-b1b9-0144-3a6d-86bfdbfb9d3a@intel.com> References: <1531538117-1606-1-git-send-email-ramalingam.c@intel.com> <1531538117-1606-13-git-send-email-ramalingam.c@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: "Shankar, Uma" , "intel-gfx@lists.freedesktop.org" , "dri-devel@lists.freedesktop.org" , "daniel@ffwll.ch" , "seanpaul@chromium.org" , "Winkler, Tomas" , "Usyskin, Alexander" List-Id: intel-gfx@lists.freedesktop.org CgpPbiBXZWRuZXNkYXkgMDEgQXVndXN0IDIwMTggMDM6MTEgUE0sIFNoYW5rYXIsIFVtYSB3cm90 ZToKPgo+PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQo+PiBGcm9tOiBDLCBSYW1hbGluZ2Ft Cj4+IFNlbnQ6IFNhdHVyZGF5LCBKdWx5IDE0LCAyMDE4IDg6NDUgQU0KPj4gVG86IGludGVsLWdm eEBsaXN0cy5mcmVlZGVza3RvcC5vcmc7IGRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmc7 Cj4+IGRhbmllbEBmZndsbC5jaDsgc2VhbnBhdWxAY2hyb21pdW0ub3JnOyBXaW5rbGVyLCBUb21h cwo+PiA8dG9tYXMud2lua2xlckBpbnRlbC5jb20+OyBVc3lza2luLCBBbGV4YW5kZXIgPGFsZXhh bmRlci51c3lza2luQGludGVsLmNvbT47Cj4+IFNoYW5rYXIsIFVtYSA8dW1hLnNoYW5rYXJAaW50 ZWwuY29tPgo+PiBDYzogU2hhcm1hLCBTaGFzaGFuayA8c2hhc2hhbmsuc2hhcm1hQGludGVsLmNv bT47IEMsIFJhbWFsaW5nYW0KPj4gPHJhbWFsaW5nYW0uY0BpbnRlbC5jb20+Cj4+IFN1YmplY3Q6 IFtQQVRDSCB2NiAxMi8zNV0gZHJtL2k5MTU6IEltcGxlbWVudCBIRENQMi4yIHJlY2VpdmVyIGF1 dGhlbnRpY2F0aW9uCj4+Cj4+IEltcGxlbWVudHMgSERDUDIuMiBhdXRoZW50aWNhdGlvbiBmb3Ig aGRjcDIuMiByZWNlaXZlcnMsIHdpdGggZm9sbG93aW5nIHN0ZXBzOgo+PiAJQXV0aGVudGljYXRp b24gYW5kIEtleSBleGNoYW5nZSAoQUtFKS4KPj4gCUxvY2FsaXR5IENoZWNrIChMQykuCj4+IAlT ZXNzaW9uIEtleSBFeGNoYW5nZShTS0UpLgo+PiAJRFAgRXJyYXRhIGZvciBzdHJlYW0gdHlwZSBj b25maWd1cmF0aW9uIGZvciByZWNlaXZlcnMuCj4+Cj4+IEF0IEFLRSwgdGhlIEhEQ1AgUmVjZWl2 ZXLigJlzIHB1YmxpYyBrZXkgY2VydGlmaWNhdGUgaXMgdmVyaWZpZWQgYnkgdGhlIEhEQ1AKPj4g VHJhbnNtaXR0ZXIuIEEgTWFzdGVyIEtleSBrIG0gaXMgZXhjaGFuZ2VkLgo+Pgo+PiBBdCBMQywg dGhlIEhEQ1AgVHJhbnNtaXR0ZXIgZW5mb3JjZXMgbG9jYWxpdHkgb24gdGhlIGNvbnRlbnQgYnkg cmVxdWlyaW5nIHRoYXQgdGhlCj4+IFJvdW5kIFRyaXAgVGltZSAoUlRUKSBiZXR3ZWVuIGEgcGFp ciBvZiBtZXNzYWdlcyBpcyBub3QgbW9yZSB0aGFuIDIwIG1zLgo+Pgo+PiBBdCBTS0UsIFRoZSBI RENQIFRyYW5zbWl0dGVyIGV4Y2hhbmdlcyBTZXNzaW9uIEtleSBrcyB3aXRoIHRoZSBIRENQIFJl Y2VpdmVyLgo+Pgo+PiBJbiBEUCBIRENQMi4yIGVuY3J5cHRpb24gYW5kIGRlY3J5cHRpb24gbG9n aWNzIHVzZSB0aGUgc3RyZWFtIHR5cGUgYXMgb25lIG9mIHRoZQo+PiBwYXJhbWV0ZXIuIFNvIEJl Zm9yZSBlbmFibGluZyB0aGUgRW5jcnlwdGlvbiBEUCBIRENQMi4yIHJlY2VpdmVyIG5lZWRzIHRv IGJlCj4+IGNvbW11bmljYXRlZCB3aXRoIHN0cmVhbSB0eXBlLiBUaGlzIGlzIGFkZGVkIHRvIHNw ZWMgYXMgRVJSQVRBLgo+Pgo+PiBUaGlzIGdlbmVyaWMgaW1wbGVtZW50YXRpb24gaXMgY29tcGxl dGUgb25seSB3aXRoIHRoZSBoZGNwMl9zaGltIGRlZmluZWQuCj4+Cj4+IHYyOgo+PiAgIFJlYmFz ZWQuCj4+IHYzOgo+PiAgIE5vIENoYW5nZXMuCj4+IHY0Ogo+PiAgICVzL1BBUklORy9QQUlSSU5H Cj4+ICAgQ29kaW5nIHN0eWxlIGZpeGluZyBbVW1hXQo+PiB2NToKPj4gICBSZWJhc2VkIGFzIHBh cnQgb2YgcGF0Y2ggcmVvcmRlcmluZy4KPj4gICBEZWZpbmVkIHRoZSBmdW5jdGlvbnMgZm9yIG1l aSBzZXJ2aWNlcy4gW0RhbmllbF0KPj4gdjY6Cj4+ICAgUmVkZWZpbmVkIHRoZSBtZWkgc2Vydmlj ZSBmdW5jdGlvbnMgYXMgcGVyIGNvbXAgcmVkZXNpZ24uCj4+ICAgUmVxdWlyZWQgaW50ZWxfaGRj cCBtZW1iZXJzIGFyZSBkZWZpbmVkIFtTZWFuIFBhdWxdCj4+Cj4+IFNpZ25lZC1vZmYtYnk6IFJh bWFsaW5nYW0gQyA8cmFtYWxpbmdhbS5jQGludGVsLmNvbT4KPj4gLS0tCj4+IGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2Rydi5oICB8ICAzNCArKysrICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9oZGNwLmMKPj4gfCAzNzAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Ky0KPj4gMiBmaWxlcyBjaGFuZ2VkLCA0MDEgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkK Pj4KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKPj4gaW5kZXggMjE2ODM3MDJiY2RjLi5lZDQy OWE2ZmI5YWIgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5o Cj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCj4+IEBAIC0zODQsNiAr Mzg0LDIyIEBAIHN0cnVjdCBpbnRlbF9oZGNwX3NoaW0gewo+PiAJLyogRGV0ZWN0cyB3aGV0aGVy IFBhbmVsIGlzIEhEQ1AyLjIgY2FwYWJsZSAqLwo+PiAJaW50ICgqaGRjcF8yXzJfY2FwYWJsZSko c3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQsCj4+IAkJCQlib29sICpj YXBhYmxlKTsKPj4gKwo+PiArCS8qIFdyaXRlIEhEQ1AyLjIgbWVzc2FnZXMgKi8KPj4gKwlpbnQg KCp3cml0ZV8yXzJfbXNnKShzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICppbnRlbF9kaWdfcG9y dCwKPj4gKwkJCSAgICAgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSk7Cj4+ICsKPj4gKwkvKiBSZWFk IEhEQ1AyLjIgbWVzc2FnZXMgKi8KPj4gKwlpbnQgKCpyZWFkXzJfMl9tc2cpKHN0cnVjdCBpbnRl bF9kaWdpdGFsX3BvcnQgKmludGVsX2RpZ19wb3J0LAo+PiArCQkJICAgIHVpbnQ4X3QgbXNnX2lk LCB2b2lkICpidWYsIHNpemVfdCBzaXplKTsKPj4gKwo+PiArCS8qCj4+ICsJICogSW1wbGVtZW50 YXRpb24gb2YgRFAgSERDUDIuMiBFcnJhdGEgZm9yIHRoZSBjb21tdW5pY2F0aW9uIG9mCj4+IHN0 cmVhbQo+PiArCSAqIHR5cGUgdG8gUmVjZWl2ZXJzLiBJbiBEUCBIRENQMi4yIFN0cmVhbSB0eXBl IGlzIG9uZSBvZiB0aGUgaW5wdXQgdG8KPj4gKwkgKiB0aGUgSERDUDIuMiBDaGlwZXIgZm9yIEVu L0RlLUNyeXB0aW9uLiBOb3QgYXBwbGljYWJsZSBmb3IgSERNSS4KPiBUaGlzIHNob3VsZCBiZSBD aXBoZXIuCj4KPj4gKwkgKi8KPj4gKwlpbnQgKCpjb25maWdfc3RyZWFtX3R5cGUpKHN0cnVjdCBp bnRlbF9kaWdpdGFsX3BvcnQgKmludGVsX2RpZ19wb3J0LAo+PiArCQkJCSAgdm9pZCAqYnVmLCBz aXplX3Qgc2l6ZSk7Cj4+IH07Cj4+Cj4+IHN0cnVjdCBpbnRlbF9oZGNwIHsKPj4gQEAgLTQwOCw2 ICs0MjQsMjQgQEAgc3RydWN0IGludGVsX2hkY3Agewo+Pgo+PiAJLyogbWVpIGludGVyZmFjZSBy ZWxhdGVkIGluZm9ybWF0aW9uICovCj4+IAlzdHJ1Y3QgbWVpX2hkY3BfZGF0YSBtZWlfZGF0YTsK Pj4gKwo+PiArCWJvb2wgaXNfcGFpcmVkOwo+PiArCWJvb2wgaXNfcmVwZWF0ZXI7Cj4+ICsKPj4g KwkvKgo+PiArCSAqIENvdW50IG9mIFJlY2VpdmVySURfTGlzdCByZWNlaXZlZC4gSW5pdGlhbGl6 ZWQgdG8gMCBhdCBBS0VfSU5JVC4KPj4gKwkgKiBJbmNyZW1lbnRlZCBhZnRlciBwcm9jZXNzaW5n IHRoZSBSZXBlYXRlckF1dGhfU2VuZF9SZWNlaXZlcklEX0xpc3QuCj4+ICsJICogV2hlbiBpdCBy b2xscyBvdmVyIHJlLWF1dGggaGFzIHRvIGJlIHRyaWdnZXJlZC4KPj4gKwkgKi8KPj4gKwl1aW50 MzJfdCBzZXFfbnVtX3Y7Cj4+ICsKPj4gKwkvKgo+PiArCSAqIENvdW50IG9mIFJlcGVhdGVyQXV0 aF9TdHJlYW1fTWFuYWdlIG1zZyBwcm9wYWdhdGVkLgo+PiArCSAqIEluaXRpYWxpemVkIHRvIDAg b24gQUtFX0lOSVQuIEluY3JlbWVudGVkIGFmdGVyIGV2ZXJ5IHN1Y2Nlc3NmdWwKPj4gKwkgKiB0 cmFuc21pc3Npb24gb2YgUmVwZWF0ZXJBdXRoX1N0cmVhbV9NYW5hZ2UgbWVzc2FnZS4gV2hlbiBp dCByb2xscwo+PiArCSAqIG92ZXIgcmUtQXV0aCBoYXMgdG8gYmUgdHJpZ2dlcmVkLgo+PiArCSAq Lwo+PiArCXVpbnQzMl90IHNlcV9udW1fbTsKPj4gfTsKPj4KPj4gc3RydWN0IGludGVsX2Nvbm5l Y3RvciB7Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9oZGNwLmMK Pj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9oZGNwLmMKPj4gaW5kZXggNGFjZTY0MzE1 YmFhLi5lZTFlMDZiYWMxNzUgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2hkY3AuYwo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9oZGNwLmMKPj4g QEAgLTE4LDYgKzE4LDcgQEAKPj4KPj4gI2RlZmluZSBLRVlfTE9BRF9UUklFUwk1Cj4+ICNkZWZp bmUgVElNRV9GT1JfRU5DUllQVF9TVEFUVVNfQ0hBTkdFCTMyCj4+ICsjZGVmaW5lIEhEQ1AyX0xD X1JFVFJZX0NOVAkJMwo+IFNwZWMgc2F5cyBpdCBjYW4gYmUgdHJpZWQgdXB0byAxMDI0IHRpbWVz LCBhbnkgc3BlY2lmaWMgcmVhc29ucyBvZiBsaW1pdGluZyBpdCB0byBqdXN0IDMuClNwZWMgc2F5 cyB3ZSBjYW4gcmV0cnkgTG9jYWxpdHkgY2hlY2sgdXB0byAxMDI0IHRpbWVzLgpXZSBkZWNpZGVk IHRvIHN0aWNrIHRvIDMgdGltZXMgYXMgcGVyIHRoZSBvYnNlcnZhdGlvbnMgaW4gdGhlIGV4cGVy aW1lbnRzLgo+Cj4+ICNkZWZpbmUgR0VUX01FSV9ERElfSU5ERVgocG9ydCkJCSgoKHBvcnQpID09 IFBPUlRfQSkgPyBERElfQSA6IFwKPj4gCQkJCQkgKGVudW0gaGRjcF9waHlzaWNhbF9wb3J0KShw b3J0KSkKPj4KPj4gQEAgLTk3OCw2ICs5NzksMTkxIEBAIGludCBpbnRlbF9oZGNwX2NoZWNrX2xp bmsoc3RydWN0IGludGVsX2Nvbm5lY3Rvcgo+PiAqY29ubmVjdG9yKQo+PiAJcmV0dXJuIHJldDsK Pj4gfQo+Pgo+PiArc3RhdGljIGludAo+PiAraGRjcDJfcHJlcGFyZV9ha2VfaW5pdChzdHJ1Y3Qg aW50ZWxfY29ubmVjdG9yICpjb25uZWN0b3IsCj4+ICsJCSAgICAgICBzdHJ1Y3QgaGRjcDJfYWtl X2luaXQgKmFrZV9kYXRhKSB7Cj4+ICsJc3RydWN0IG1laV9oZGNwX2RhdGEgKmRhdGEgPSAmY29u bmVjdG9yLT5oZGNwLm1laV9kYXRhOwo+PiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9IHRvX2k5MTUoY29ubmVjdG9yLT5iYXNlLmRldik7Cj4+ICsJc3RydWN0IGk5MTVfY29t cG9uZW50X21hc3RlciAqY29tcCA9IGRldl9wcml2LT5jb21wX21hc3RlcjsKPj4gKwlpbnQgcmV0 Owo+PiArCj4+ICsJaWYgKCFjb21wKQo+PiArCQlyZXR1cm4gLUVJTlZBTDsKPj4gKwo+PiArCWlm ICghY29tcC0+aGRjcF9vcHMgfHwgIWNvbXAtPm1laV9jbGRldikKPj4gKwkJcmV0dXJuIC1FSU5W QUw7Cj4+ICsKPj4gKwlpZiAoZGF0YS0+cG9ydCA9PSBJTlZBTElEX1BPUlQgJiYgY29ubmVjdG9y LT5lbmNvZGVyKQo+PiArCQlkYXRhLT5wb3J0ID0gR0VUX01FSV9ERElfSU5ERVgoY29ubmVjdG9y LT5lbmNvZGVyLT5wb3J0KTsKPj4gKwo+PiArCS8qIENsZWFyIE1FIEZXIGluc3RhbmNlIGZvciB0 aGUgcG9ydCwganVzdCBpbmNhc2UgKi8KPj4gKwljb21wLT5oZGNwX29wcy0+Y2xvc2VfaGRjcF9z ZXNzaW9uKGNvbXAtPm1laV9jbGRldiwgZGF0YSk7Cj4gVGhlIGNhbGxiYWNrIGlzIG5vdCB5ZXQg YXNzaWduZWQgaGVyZSwgdGhpcyBtYXkgY2F1c2UgYSBjcmFzaCBkdXJpbmcgYmlzZWN0Lgo+IEkg d291bGQgc3VnZ2VzdCB0byBkZWZpbmUgdGhlIGNhbGxiYWNrIGZ1bmN0aW9ucyBlYXJsaWVyIGlu IHRoZSBzZXJpZXMgYW5kIHRoZW4gYXNzaWduIHRoZW0KPiBpbiBzdWJzZXF1ZW50IHBhdGNoZXMg b3IgcHJvdGVjdCBpdCB3aXRoIGEgTlVMTCBjaGVjayB0byBiZSBzYWZlLgo+Cj4gVGhpcyBtYXkg bm90IGdldCBjYWxsZWQgdGlsbCB0aGlzIHBvaW50IGR1ZSB0byBoZGNwMiBmbGFnIGFzIGZhbHNl IGluIGhkY3BfaW5pdCwgYnV0IHRoaXMgaXMgY2hhbmdlZCBpbgo+IDAwMjEtZHJtLWk5MTUtQWRk LUhEQ1AyLjItc3VwcG9ydC1mb3ItSERNSS1jb25uZWN0b3JzLnBhdGNoIHdoaWNoIHdpbGwgc3Rh cnQgZ2l2aW5nIHRoZQo+IGFib3ZlICBwcm9ibGVtIGZyb20gdGhlcmUgb24gdGlsbCB5b3UgZmlu YWxseSBkZWZpbmUgaXQgaW4KPiAwMDM1LW1pc2MtbWVpLWhkY3AtQ2xvc2luZy13aXJlZC1IRENQ Mi4yLVR4LVNlc3Npb24ucGF0Y2gKVW1hLAoKY29tcC0+aGRjcF9vcHMgYW5kIGNvbXAtPm1laV9j bGRldiBhcmUgaW5pdGlhbGl6ZWQgYXQgY29tcG9uZW50IGJpbmRpbmcKb2YgdGhlIG1laV9oZGNw IG1vZHVsZS4gU28gdW50aWwgdGhlIGNvbXBvbmVudCBiaW5kaW5nIGhhcHBlbnMgYXQgbWVpX2hk Y3AsCm1lbWJlcnMgb2YgdGhlIGNvbXAtPmhkY3Bfb3BzIHdvbnQgYmUgdXRpbGl6ZWQuCj4+ICsK Pj4gKwlyZXQgPSBjb21wLT5oZGNwX29wcy0+aW5pdGlhdGVfaGRjcDJfc2Vzc2lvbihjb21wLT5t ZWlfY2xkZXYsCj4+ICsJCQkJCQlkYXRhLCBha2VfZGF0YSk7Cj4gU2FtZSBoZXJlLiBDaGVjayB3 aGVyZXZlciBhcHBsaWNhYmxlIHVuaXZlcnNhbGx5Lgo+Cj4+ICsKPj4gKwlyZXR1cm4gcmV0Owo+ PiArfQo+PiArCj4+ICtzdGF0aWMgaW50Cj4+ICtoZGNwMl92ZXJpZnlfcnhfY2VydF9wcmVwYXJl X2ttKHN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmNvbm5lY3RvciwKPj4gKwkJCQlzdHJ1Y3QgaGRj cDJfYWtlX3NlbmRfY2VydCAqcnhfY2VydCwKPj4gKwkJCQlib29sICpwYWlyZWQsCj4+ICsJCQkJ c3RydWN0IGhkY3AyX2FrZV9ub19zdG9yZWRfa20gKmVrX3B1Yl9rbSwKPj4gKwkJCQlzaXplX3Qg Km1zZ19zeikKPj4gK3sKPj4gKwlzdHJ1Y3QgbWVpX2hkY3BfZGF0YSAqZGF0YSA9ICZjb25uZWN0 b3ItPmhkY3AubWVpX2RhdGE7Cj4+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gdG9faTkxNShjb25uZWN0b3ItPmJhc2UuZGV2KTsKPj4gKwlzdHJ1Y3QgaTkxNV9jb21wb25l bnRfbWFzdGVyICpjb21wID0gZGV2X3ByaXYtPmNvbXBfbWFzdGVyOwo+PiArCWludCByZXQ7Cj4+ ICsKPj4gKwlpZiAoIWNvbXApCj4+ICsJCXJldHVybiAtRUlOVkFMOwo+PiArCj4+ICsJaWYgKCFj b21wLT5oZGNwX29wcyB8fCAhY29tcC0+bWVpX2NsZGV2IHx8IGRhdGEtPnBvcnQgPT0KPj4gSU5W QUxJRF9QT1JUKQo+PiArCQlyZXR1cm4gLUVJTlZBTDsKPj4gKwo+PiArCXJldCA9IGNvbXAtPmhk Y3Bfb3BzLT52ZXJpZnlfcmVjZWl2ZXJfY2VydF9wcmVwYXJlX2ttKGNvbXAtCj4+PiBtZWlfY2xk ZXYsCj4+ICsJCQkJCQkJICAgICAgZGF0YSwgcnhfY2VydCwKPj4gKwkJCQkJCQkgICAgICBwYWly ZWQsIGVrX3B1Yl9rbSwKPj4gKwkJCQkJCQkgICAgICBtc2dfc3opOwo+PiArCWlmIChyZXQgPCAw KQo+PiArCQljb21wLT5oZGNwX29wcy0+Y2xvc2VfaGRjcF9zZXNzaW9uKGNvbXAtPm1laV9jbGRl diwgZGF0YSk7Cj4+ICsKPj4gKwlyZXR1cm4gcmV0Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50 IGhkY3AyX3ZlcmlmeV9ocHJpbWUoc3RydWN0IGludGVsX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+ PiArCQkJICAgICAgIHN0cnVjdCBoZGNwMl9ha2Vfc2VuZF9ocHJpbWUgKnJ4X2hwcmltZSkgewo+ PiArCXN0cnVjdCBtZWlfaGRjcF9kYXRhICpkYXRhID0gJmNvbm5lY3Rvci0+aGRjcC5tZWlfZGF0 YTsKPj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNvbm5l Y3Rvci0+YmFzZS5kZXYpOwo+PiArCXN0cnVjdCBpOTE1X2NvbXBvbmVudF9tYXN0ZXIgKmNvbXAg PSBkZXZfcHJpdi0+Y29tcF9tYXN0ZXI7Cj4+ICsJaW50IHJldDsKPj4gKwo+PiArCWlmICghY29t cCkKPj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+ICsKPj4gKwlpZiAoIWNvbXAtPmhkY3Bfb3BzIHx8 ICFjb21wLT5tZWlfY2xkZXYgfHwgZGF0YS0+cG9ydCA9PQo+PiBJTlZBTElEX1BPUlQpCj4+ICsJ CXJldHVybiAtRUlOVkFMOwo+PiArCj4+ICsJcmV0ID0gY29tcC0+aGRjcF9vcHMtPnZlcmlmeV9o cHJpbWUoY29tcC0+bWVpX2NsZGV2LCBkYXRhLAo+PiByeF9ocHJpbWUpOwo+PiArCWlmIChyZXQg PCAwKQo+PiArCQljb21wLT5oZGNwX29wcy0+Y2xvc2VfaGRjcF9zZXNzaW9uKGNvbXAtPm1laV9j bGRldiwgZGF0YSk7Cj4+ICsKPj4gKwlyZXR1cm4gcmV0Owo+PiArfQo+PiArCj4+ICtzdGF0aWMg aW50Cj4+ICtoZGNwMl9zdG9yZV9wYWlyaW5nX2luZm8oc3RydWN0IGludGVsX2Nvbm5lY3RvciAq Y29ubmVjdG9yLAo+PiArCQkJIHN0cnVjdCBoZGNwMl9ha2Vfc2VuZF9wYWlyaW5nX2luZm8gKnBh aXJpbmdfaW5mbykgewo+PiArCXN0cnVjdCBtZWlfaGRjcF9kYXRhICpkYXRhID0gJmNvbm5lY3Rv ci0+aGRjcC5tZWlfZGF0YTsKPj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSB0b19pOTE1KGNvbm5lY3Rvci0+YmFzZS5kZXYpOwo+PiArCXN0cnVjdCBpOTE1X2NvbXBvbmVu dF9tYXN0ZXIgKmNvbXAgPSBkZXZfcHJpdi0+Y29tcF9tYXN0ZXI7Cj4+ICsJaW50IHJldDsKPj4g Kwo+PiArCWlmICghY29tcCkKPj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+ICsKPj4gKwlpZiAoIWNv bXAtPmhkY3Bfb3BzIHx8ICFjb21wLT5tZWlfY2xkZXYgfHwgZGF0YS0+cG9ydCA9PQo+PiBJTlZB TElEX1BPUlQpCj4+ICsJCXJldHVybiAtRUlOVkFMOwo+PiArCj4+ICsJcmV0ID0gY29tcC0+aGRj cF9vcHMtPnN0b3JlX3BhaXJpbmdfaW5mbyhjb21wLT5tZWlfY2xkZXYsCj4+ICsJCQkJCSAgICBk YXRhLCBwYWlyaW5nX2luZm8pOwo+PiArCWlmIChyZXQgPCAwKQo+PiArCQljb21wLT5oZGNwX29w cy0+Y2xvc2VfaGRjcF9zZXNzaW9uKGNvbXAtPm1laV9jbGRldiwgZGF0YSk7Cj4+ICsKPj4gKwly ZXR1cm4gcmV0Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50Cj4+ICtoZGNwMl9wcmVwYXJlX2xj X2luaXQoc3RydWN0IGludGVsX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+PiArCQkgICAgICBzdHJ1 Y3QgaGRjcDJfbGNfaW5pdCAqbGNfaW5pdCkKPj4gK3sKPj4gKwlzdHJ1Y3QgbWVpX2hkY3BfZGF0 YSAqZGF0YSA9ICZjb25uZWN0b3ItPmhkY3AubWVpX2RhdGE7Cj4+ICsJc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjb25uZWN0b3ItPmJhc2UuZGV2KTsKPj4gKwlz dHJ1Y3QgaTkxNV9jb21wb25lbnRfbWFzdGVyICpjb21wID0gZGV2X3ByaXYtPmNvbXBfbWFzdGVy Owo+PiArCWludCByZXQ7Cj4+ICsKPj4gKwlpZiAoIWNvbXApCj4+ICsJCXJldHVybiAtRUlOVkFM Owo+PiArCj4+ICsJaWYgKCFjb21wLT5oZGNwX29wcyB8fCAhY29tcC0+bWVpX2NsZGV2IHx8IGRh dGEtPnBvcnQgPT0KPj4gSU5WQUxJRF9QT1JUKQo+PiArCQlyZXR1cm4gLUVJTlZBTDsKPj4gKwo+ PiArCXJldCA9IGNvbXAtPmhkY3Bfb3BzLT5pbml0aWF0ZV9sb2NhbGl0eV9jaGVjayhjb21wLT5t ZWlfY2xkZXYsCj4+ICsJCQkJCQkgICAgICBkYXRhLCBsY19pbml0KTsKPj4gKwlpZiAocmV0IDwg MCkKPj4gKwkJY29tcC0+aGRjcF9vcHMtPmNsb3NlX2hkY3Bfc2Vzc2lvbihjb21wLT5tZWlfY2xk ZXYsIGRhdGEpOwo+PiArCj4+ICsJcmV0dXJuIHJldDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGlu dAo+PiAraGRjcDJfdmVyaWZ5X2xwcmltZShzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpjb25uZWN0 b3IsCj4+ICsJCSAgICBzdHJ1Y3QgaGRjcDJfbGNfc2VuZF9scHJpbWUgKnJ4X2xwcmltZSkgewo+ PiArCXN0cnVjdCBtZWlfaGRjcF9kYXRhICpkYXRhID0gJmNvbm5lY3Rvci0+aGRjcC5tZWlfZGF0 YTsKPj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNvbm5l Y3Rvci0+YmFzZS5kZXYpOwo+PiArCXN0cnVjdCBpOTE1X2NvbXBvbmVudF9tYXN0ZXIgKmNvbXAg PSBkZXZfcHJpdi0+Y29tcF9tYXN0ZXI7Cj4+ICsJaW50IHJldDsKPj4gKwo+PiArCWlmICghY29t cCkKPj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+ICsKPj4gKwlpZiAoIWNvbXAtPmhkY3Bfb3BzIHx8 ICFjb21wLT5tZWlfY2xkZXYgfHwgZGF0YS0+cG9ydCA9PQo+PiBJTlZBTElEX1BPUlQpCj4+ICsJ CXJldHVybiAtRUlOVkFMOwo+PiArCj4+ICsJcmV0ID0gY29tcC0+aGRjcF9vcHMtPnZlcmlmeV9s cHJpbWUoY29tcC0+bWVpX2NsZGV2LCBkYXRhLAo+PiByeF9scHJpbWUpOwo+PiArCWlmIChyZXQg PCAwKQo+PiArCQljb21wLT5oZGNwX29wcy0+Y2xvc2VfaGRjcF9zZXNzaW9uKGNvbXAtPm1laV9j bGRldiwgZGF0YSk7Cj4+ICsKPj4gKwlyZXR1cm4gcmV0Owo+PiArfQo+PiArCj4+ICtzdGF0aWMg aW50IGhkY3AyX3ByZXBhcmVfc2tleShzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpjb25uZWN0b3Is Cj4+ICsJCQkgICAgICBzdHJ1Y3QgaGRjcDJfc2tlX3NlbmRfZWtzICpza2VfZGF0YSkgewo+PiAr CXN0cnVjdCBtZWlfaGRjcF9kYXRhICpkYXRhID0gJmNvbm5lY3Rvci0+aGRjcC5tZWlfZGF0YTsK Pj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNvbm5lY3Rv ci0+YmFzZS5kZXYpOwo+PiArCXN0cnVjdCBpOTE1X2NvbXBvbmVudF9tYXN0ZXIgKmNvbXAgPSBk ZXZfcHJpdi0+Y29tcF9tYXN0ZXI7Cj4+ICsJaW50IHJldDsKPj4gKwo+PiArCWlmICghY29tcCkK Pj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+ICsKPj4gKwlpZiAoIWNvbXAtPmhkY3Bfb3BzIHx8ICFj b21wLT5tZWlfY2xkZXYgfHwgZGF0YS0+cG9ydCA9PQo+PiBJTlZBTElEX1BPUlQpCj4+ICsJCXJl dHVybiAtRUlOVkFMOwo+PiArCj4+ICsJcmV0ID0gY29tcC0+aGRjcF9vcHMtPmdldF9zZXNzaW9u X2tleShjb21wLT5tZWlfY2xkZXYsIGRhdGEsCj4+IHNrZV9kYXRhKTsKPj4gKwlpZiAocmV0IDwg MCkKPj4gKwkJY29tcC0+aGRjcF9vcHMtPmNsb3NlX2hkY3Bfc2Vzc2lvbihjb21wLT5tZWlfY2xk ZXYsIGRhdGEpOwo+PiArCj4+ICsJcmV0dXJuIHJldDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGlu dCBoZGNwMl9hdXRoZW50aWNhdGVfcG9ydChzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpjb25uZWN0 b3IpIHsKPj4gKwlzdHJ1Y3QgbWVpX2hkY3BfZGF0YSAqZGF0YSA9ICZjb25uZWN0b3ItPmhkY3Au bWVpX2RhdGE7Cj4+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkx NShjb25uZWN0b3ItPmJhc2UuZGV2KTsKPj4gKwlzdHJ1Y3QgaTkxNV9jb21wb25lbnRfbWFzdGVy ICpjb21wID0gZGV2X3ByaXYtPmNvbXBfbWFzdGVyOwo+PiArCWludCByZXQ7Cj4+ICsKPj4gKwlp ZiAoIWNvbXApCj4+ICsJCXJldHVybiAtRUlOVkFMOwo+PiArCj4+ICsJaWYgKCFjb21wLT5oZGNw X29wcyB8fCAhY29tcC0+bWVpX2NsZGV2IHx8IGRhdGEtPnBvcnQgPT0KPj4gSU5WQUxJRF9QT1JU KQo+PiArCQlyZXR1cm4gLUVJTlZBTDsKPj4gKwo+PiArCXJldCA9IGNvbXAtPmhkY3Bfb3BzLT5l bmFibGVfaGRjcF9hdXRoZW50aWNhdGlvbihjb21wLT5tZWlfY2xkZXYsCj4+IGRhdGEpOwo+PiAr CWlmIChyZXQgPCAwKQo+PiArCQljb21wLT5oZGNwX29wcy0+Y2xvc2VfaGRjcF9zZXNzaW9uKGNv bXAtPm1laV9jbGRldiwgZGF0YSk7Cj4+ICsKPj4gKwlyZXR1cm4gcmV0Owo+PiArfQo+PiArCj4+ IHN0YXRpYyBpbnQgaGRjcDJfY2xvc2VfbWVpX3Nlc3Npb24oc3RydWN0IGludGVsX2Nvbm5lY3Rv ciAqY29ubmVjdG9yKSAgewo+PiAJc3RydWN0IG1laV9oZGNwX2RhdGEgKmRhdGEgPSAmY29ubmVj dG9yLT5oZGNwLm1laV9kYXRhOyBAQCAtOTk4LDEyCj4+ICsxMTg0LDE5MCBAQCBzdGF0aWMgaW50 IGhkY3AyX2RlYXV0aGVudGljYXRlX3BvcnQoc3RydWN0IGludGVsX2Nvbm5lY3Rvcgo+PiAqY29u bmVjdG9yKQo+PiAJcmV0dXJuIGhkY3AyX2Nsb3NlX21laV9zZXNzaW9uKGNvbm5lY3Rvcik7Cj4+ IH0KPj4KPj4gKy8qIEF1dGhlbnRpY2F0aW9uIGZsb3cgc3RhcnRzIGZyb20gaGVyZSAqLyBzdGF0 aWMgaW50Cj4+ICtoZGNwMl9hdXRoZW50aWNhdGlvbl9rZXlfZXhjaGFuZ2Uoc3RydWN0IGludGVs X2Nvbm5lY3RvciAqY29ubmVjdG9yKSB7Cj4+ICsJc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAq aW50ZWxfZGlnX3BvcnQgPSBjb25uX3RvX2RpZ19wb3J0KGNvbm5lY3Rvcik7Cj4+ICsJc3RydWN0 IGludGVsX2hkY3AgKmhkY3AgPSAmY29ubmVjdG9yLT5oZGNwOwo+PiArCXVuaW9uIHsKPj4gKwkJ c3RydWN0IGhkY3AyX2FrZV9pbml0IGFrZV9pbml0Owo+PiArCQlzdHJ1Y3QgaGRjcDJfYWtlX3Nl bmRfY2VydCBzZW5kX2NlcnQ7Cj4+ICsJCXN0cnVjdCBoZGNwMl9ha2Vfbm9fc3RvcmVkX2ttIG5v X3N0b3JlZF9rbTsKPj4gKwkJc3RydWN0IGhkY3AyX2FrZV9zZW5kX2hwcmltZSBzZW5kX2hwcmlt ZTsKPj4gKwkJc3RydWN0IGhkY3AyX2FrZV9zZW5kX3BhaXJpbmdfaW5mbyBwYWlyaW5nX2luZm87 Cj4+ICsJfSBtc2dzOwo+PiArCWNvbnN0IHN0cnVjdCBpbnRlbF9oZGNwX3NoaW0gKnNoaW0gPSBo ZGNwLT5zaGltOwo+PiArCXNpemVfdCBzaXplOwo+PiArCWludCByZXQ7Cj4+ICsKPj4gKwkvKiBJ bml0IGZvciBzZXFfbnVtICovCj4+ICsJaGRjcC0+c2VxX251bV92ID0gMDsKPj4gKwloZGNwLT5z ZXFfbnVtX20gPSAwOwo+PiArCj4+ICsJcmV0ID0gaGRjcDJfcHJlcGFyZV9ha2VfaW5pdChjb25u ZWN0b3IsICZtc2dzLmFrZV9pbml0KTsKPj4gKwlpZiAocmV0IDwgMCkKPj4gKwkJcmV0dXJuIHJl dDsKPj4gKwo+PiArCXJldCA9IHNoaW0tPndyaXRlXzJfMl9tc2coaW50ZWxfZGlnX3BvcnQsICZt c2dzLmFrZV9pbml0LAo+PiArCQkJCSAgc2l6ZW9mKG1zZ3MuYWtlX2luaXQpKTsKPj4gKwlpZiAo cmV0IDwgMCkKPj4gKwkJcmV0dXJuIHJldDsKPj4gKwo+PiArCXJldCA9IHNoaW0tPnJlYWRfMl8y X21zZyhpbnRlbF9kaWdfcG9ydCwgSERDUF8yXzJfQUtFX1NFTkRfQ0VSVCwKPj4gKwkJCQkgJm1z Z3Muc2VuZF9jZXJ0LCBzaXplb2YobXNncy5zZW5kX2NlcnQpKTsKPj4gKwlpZiAocmV0IDwgMCkK Pj4gKwkJcmV0dXJuIHJldDsKPj4gKwo+PiArCWlmIChtc2dzLnNlbmRfY2VydC5yeF9jYXBzWzBd ICE9IEhEQ1BfMl8yX1JYX0NBUFNfVkVSU0lPTl9WQUwpCj4+ICsJCXJldHVybiAtRUlOVkFMOwo+ PiArCj4+ICsJaGRjcC0+aXNfcmVwZWF0ZXIgPQo+PiBIRENQXzJfMl9SWF9SRVBFQVRFUihtc2dz LnNlbmRfY2VydC5yeF9jYXBzWzJdKTsKPj4gKwo+PiArCS8qCj4+ICsJICogSGVyZSBtc2dzLm5v X3N0b3JlZF9rbSB3aWxsIGhvbGQgbXNncyBjb3JyZXNwb25kaW5nIHRvIHRoZSBrbQo+PiArCSAq IHN0b3JlZCBhbHNvLgo+PiArCSAqLwo+PiArCXJldCA9IGhkY3AyX3ZlcmlmeV9yeF9jZXJ0X3By ZXBhcmVfa20oY29ubmVjdG9yLCAmbXNncy5zZW5kX2NlcnQsCj4+ICsJCQkJCSAgICAgICZoZGNw LT5pc19wYWlyZWQsCj4+ICsJCQkJCSAgICAgICZtc2dzLm5vX3N0b3JlZF9rbSwgJnNpemUpOwo+ PiArCWlmIChyZXQgPCAwKQo+PiArCQlyZXR1cm4gcmV0Owo+PiArCj4+ICsJcmV0ID0gc2hpbS0+ d3JpdGVfMl8yX21zZyhpbnRlbF9kaWdfcG9ydCwgJm1zZ3Mubm9fc3RvcmVkX2ttLCBzaXplKTsK Pj4gKwlpZiAocmV0IDwgMCkKPj4gKwkJcmV0dXJuIHJldDsKPj4gKwo+PiArCXJldCA9IHNoaW0t PnJlYWRfMl8yX21zZyhpbnRlbF9kaWdfcG9ydCwKPj4gSERDUF8yXzJfQUtFX1NFTkRfSFBSSU1F LAo+PiArCQkJCSAmbXNncy5zZW5kX2hwcmltZSwKPj4gc2l6ZW9mKG1zZ3Muc2VuZF9ocHJpbWUp KTsKPiBIb3cgYXJlIGVuc3VyaW5nIHRoYXQgdGhpcyByZWFkIGhhcHBlbnMgd2l0aGluIDIwMG1z IGFzIGRlZmluZWQgYnkgc3BlYyA/CnNoaW0tPnJlYWRfMl8yX21zZygpIHdhaXRzIGZvciB0aGUg cmVxdWlyZWQgdGltZW91dCBmb3IgZWFjaCBIRENQMi4yIG1zZ3MuCgotLVJhbS4KPj4gKwlpZiAo cmV0IDwgMCkKPj4gKwkJcmV0dXJuIHJldDsKPj4gKwo+PiArCXJldCA9IGhkY3AyX3ZlcmlmeV9o cHJpbWUoY29ubmVjdG9yLCAmbXNncy5zZW5kX2hwcmltZSk7Cj4+ICsJaWYgKHJldCA8IDApCj4+ ICsJCXJldHVybiByZXQ7Cj4+ICsKPj4gKwlpZiAoIWhkY3AtPmlzX3BhaXJlZCkgewo+PiArCQkv KiBQYWlyaW5nIGlzIHJlcXVpcmVkICovCj4+ICsJCXJldCA9IHNoaW0tPnJlYWRfMl8yX21zZyhp bnRlbF9kaWdfcG9ydCwKPj4gKwkJCQkJIEhEQ1BfMl8yX0FLRV9TRU5EX1BBSVJJTkdfSU5GTywK Pj4gKwkJCQkJICZtc2dzLnBhaXJpbmdfaW5mbywKPj4gKwkJCQkJIHNpemVvZihtc2dzLnBhaXJp bmdfaW5mbykpOwo+PiArCQlpZiAocmV0IDwgMCkKPj4gKwkJCXJldHVybiByZXQ7Cj4+ICsKPj4g KwkJcmV0ID0gaGRjcDJfc3RvcmVfcGFpcmluZ19pbmZvKGNvbm5lY3RvciwgJm1zZ3MucGFpcmlu Z19pbmZvKTsKPj4gKwkJaWYgKHJldCA8IDApCj4+ICsJCQlyZXR1cm4gcmV0Owo+PiArCQloZGNw LT5pc19wYWlyZWQgPSB0cnVlOwo+PiArCX0KPj4gKwo+PiArCXJldHVybiAwOwo+PiArfQo+PiAr Cj4+ICtzdGF0aWMgaW50IGhkY3AyX2xvY2FsaXR5X2NoZWNrKHN0cnVjdCBpbnRlbF9jb25uZWN0 b3IgKmNvbm5lY3Rvcikgewo+PiArCXN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmludGVsX2Rp Z19wb3J0ID0gY29ubl90b19kaWdfcG9ydChjb25uZWN0b3IpOwo+PiArCXN0cnVjdCBpbnRlbF9o ZGNwICpoZGNwID0gJmNvbm5lY3Rvci0+aGRjcDsKPj4gKwl1bmlvbiB7Cj4+ICsJCXN0cnVjdCBo ZGNwMl9sY19pbml0IGxjX2luaXQ7Cj4+ICsJCXN0cnVjdCBoZGNwMl9sY19zZW5kX2xwcmltZSBz ZW5kX2xwcmltZTsKPj4gKwl9IG1zZ3M7Cj4+ICsJY29uc3Qgc3RydWN0IGludGVsX2hkY3Bfc2hp bSAqc2hpbSA9IGhkY3AtPnNoaW07Cj4+ICsJaW50IHRyaWVzID0gSERDUDJfTENfUkVUUllfQ05U LCByZXQsIGk7Cj4+ICsKPj4gKwlmb3IgKGkgPSAwOyBpIDwgdHJpZXM7IGkrKykgewo+PiArCQly ZXQgPSBoZGNwMl9wcmVwYXJlX2xjX2luaXQoY29ubmVjdG9yLCAmbXNncy5sY19pbml0KTsKPj4g KwkJaWYgKHJldCA8IDApCj4+ICsJCQljb250aW51ZTsKPj4gKwo+PiArCQlyZXQgPSBzaGltLT53 cml0ZV8yXzJfbXNnKGludGVsX2RpZ19wb3J0LCAmbXNncy5sY19pbml0LAo+PiArCQkJCSAgICAg IHNpemVvZihtc2dzLmxjX2luaXQpKTsKPj4gKwkJaWYgKHJldCA8IDApCj4+ICsJCQljb250aW51 ZTsKPj4gKwo+PiArCQlyZXQgPSBzaGltLT5yZWFkXzJfMl9tc2coaW50ZWxfZGlnX3BvcnQsCj4+ ICsJCQkJCSBIRENQXzJfMl9MQ19TRU5EX0xQUklNRSwKPj4gKwkJCQkJICZtc2dzLnNlbmRfbHBy aW1lLAo+PiArCQkJCQkgc2l6ZW9mKG1zZ3Muc2VuZF9scHJpbWUpKTsKPiBBZ2FpbiBob3cgaXQg ZW5zdXJlcyB0aGUgMjBtcyB0aW1lb3V0IHBlciBzcGVjID8KPgo+PiArCQlpZiAocmV0IDwgMCkK Pj4gKwkJCWNvbnRpbnVlOwo+PiArCj4+ICsJCXJldCA9IGhkY3AyX3ZlcmlmeV9scHJpbWUoY29u bmVjdG9yLCAmbXNncy5zZW5kX2xwcmltZSk7Cj4+ICsJCWlmICghcmV0KQo+PiArCQkJYnJlYWs7 Cj4+ICsJfQo+PiArCj4+ICsJcmV0dXJuIHJldDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBo ZGNwMl9zZXNzaW9uX2tleV9leGNoYW5nZShzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yCj4+ICsqY29u bmVjdG9yKSB7Cj4+ICsJc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQg PSBjb25uX3RvX2RpZ19wb3J0KGNvbm5lY3Rvcik7Cj4+ICsJc3RydWN0IGludGVsX2hkY3AgKmhk Y3AgPSAmY29ubmVjdG9yLT5oZGNwOwo+PiArCXN0cnVjdCBoZGNwMl9za2Vfc2VuZF9la3Mgc2Vu ZF9la3M7Cj4+ICsJaW50IHJldDsKPj4gKwo+PiArCXJldCA9IGhkY3AyX3ByZXBhcmVfc2tleShj b25uZWN0b3IsICZzZW5kX2Vrcyk7Cj4+ICsJaWYgKHJldCA8IDApCj4+ICsJCXJldHVybiByZXQ7 Cj4+ICsKPj4gKwlyZXQgPSBoZGNwLT5zaGltLT53cml0ZV8yXzJfbXNnKGludGVsX2RpZ19wb3J0 LCAmc2VuZF9la3MsCj4+ICsJCQkJCXNpemVvZihzZW5kX2VrcykpOwo+PiArCWlmIChyZXQgPCAw KQo+PiArCQlyZXR1cm4gcmV0Owo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gc3Rh dGljIGludCBoZGNwMl9hdXRoZW50aWNhdGVfc2luayhzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpj b25uZWN0b3IpICB7Cj4+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9f aTkxNShjb25uZWN0b3ItPmJhc2UuZGV2KTsKPj4gKwlzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0 ICppbnRlbF9kaWdfcG9ydCA9IGNvbm5fdG9fZGlnX3BvcnQoY29ubmVjdG9yKTsKPj4gKwlzdHJ1 Y3QgaW50ZWxfaGRjcCAqaGRjcCA9ICZjb25uZWN0b3ItPmhkY3A7Cj4+ICsJY29uc3Qgc3RydWN0 IGludGVsX2hkY3Bfc2hpbSAqc2hpbSA9IGhkY3AtPnNoaW07Cj4+ICsJc3RydWN0IGhkY3AyX2Rw X2VycmF0YV9zdHJlYW1fdHlwZSBzdHJlYW1fdHlwZV9tc2c7Cj4+ICsJaW50IHJldDsKPj4KPj4g LQlEUk1fRVJST1IoIlNpbmsgYXV0aGVudGljYXRpb24gaXMgZG9uZSBpbiBzdWJzZXF1ZW50IHBh dGNoZXNcbiIpOwo+PiAtCXJldHVybiAtRUlOVkFMOwo+PiArCXJldCA9IGhkY3AyX2F1dGhlbnRp Y2F0aW9uX2tleV9leGNoYW5nZShjb25uZWN0b3IpOwo+PiArCWlmIChyZXQgPCAwKSB7Cj4+ICsJ CURSTV9ERUJVR19LTVMoIkFLRSBGYWlsZWQuIEVyciA6ICVkXG4iLCByZXQpOwo+PiArCQlyZXR1 cm4gcmV0Owo+PiArCX0KPj4gKwo+PiArCXJldCA9IGhkY3AyX2xvY2FsaXR5X2NoZWNrKGNvbm5l Y3Rvcik7Cj4+ICsJaWYgKHJldCA8IDApIHsKPj4gKwkJRFJNX0RFQlVHX0tNUygiTG9jYWxpdHkg Q2hlY2sgZmFpbGVkLiBFcnIgOiAlZFxuIiwgcmV0KTsKPj4gKwkJcmV0dXJuIHJldDsKPj4gKwl9 Cj4+ICsKPj4gKwlyZXQgPSBoZGNwMl9zZXNzaW9uX2tleV9leGNoYW5nZShjb25uZWN0b3IpOwo+ PiArCWlmIChyZXQgPCAwKSB7Cj4+ICsJCURSTV9ERUJVR19LTVMoIlNLRSBGYWlsZWQuIEVyciA6 ICVkXG4iLCByZXQpOwo+PiArCQlyZXR1cm4gcmV0Owo+PiArCX0KPj4gKwo+PiArCWlmICghaGRj cC0+aXNfcmVwZWF0ZXIgJiYgc2hpbS0+Y29uZmlnX3N0cmVhbV90eXBlKSB7Cj4+ICsJCS8qCj4+ ICsJCSAqIEVycmF0YSBmb3IgRFA6IEFzIFN0cmVhbSB0eXBlIGlzIHVzZWQgZm9yIGVuY3J5cHRp b24sCj4+ICsJCSAqIFJlY2VpdmVyIHNob3VsZCBiZSBjb21tdW5pY2F0ZWQgd2l0aCBzdHJlYW0g dHlwZSBmb3IgdGhlCj4+ICsJCSAqIGRlY3J5cHRpb24gb2YgdGhlIGNvbnRlbnQuCj4+ICsJCSAq IFJlcGVhdGVyIHdpbGwgYmUgY29tbXVuaWNhdGVkIHdpdGggc3RyZWFtIHR5cGUgYXMgYQo+PiAr CQkgKiBwYXJ0IG9mIGl0J3MgYXV0aCBsYXRlciBpbiB0aW1lLgo+PiArCQkgKi8KPj4gKwkJc3Ry ZWFtX3R5cGVfbXNnLm1zZ19pZCA9Cj4+IEhEQ1BfMl8yX0VSUkFUQV9EUF9TVFJFQU1fVFlQRTsK Pj4gKwkJc3RyZWFtX3R5cGVfbXNnLnN0cmVhbV90eXBlID0gaGRjcC0+Y29udGVudF90eXBlOwo+ PiArCj4+ICsJCXJldCA9IHNoaW0tPmNvbmZpZ19zdHJlYW1fdHlwZShpbnRlbF9kaWdfcG9ydCwK Pj4gJnN0cmVhbV90eXBlX21zZywKPj4gKwkJCQkJICAgICAgIHNpemVvZihzdHJlYW1fdHlwZV9t c2cpKTsKPj4gKwkJaWYgKHJldCA8IDApCj4+ICsJCQlyZXR1cm4gcmV0Owo+PiArCX0KPj4gKwo+ PiArCWhkY3AtPm1laV9kYXRhLnN0cmVhbXNbMF0uc3RyZWFtX3R5cGUgPSBoZGNwLT5jb250ZW50 X3R5cGU7Cj4+ICsJcmV0ID0gaGRjcDJfYXV0aGVudGljYXRlX3BvcnQoY29ubmVjdG9yKTsKPj4g KwlpZiAocmV0IDwgMCkKPj4gKwkJcmV0dXJuIHJldDsKPj4gKwo+PiArCXJldHVybiByZXQ7Cj4+ IH0KPj4KPj4gc3RhdGljIGludCBoZGNwMl9lbmFibGVfZW5jcnlwdGlvbihzdHJ1Y3QgaW50ZWxf Y29ubmVjdG9yICpjb25uZWN0b3IpCj4+IC0tCj4+IDIuNy40CgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVs LWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK