From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ramalingam C Subject: Re: [RFC PATCH 5/6] drm/i915: Implement HDCP for HDMI Date: Fri, 1 Dec 2017 13:01:44 +0530 Message-ID: <707c6055-2f28-3892-c62f-dd2b5161632d@intel.com> References: <20171130030907.26848-1-seanpaul@chromium.org> <20171130030907.26848-6-seanpaul@chromium.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20171130030907.26848-6-seanpaul@chromium.org> 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: Sean Paul , dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org Cc: David Airlie , linux-kernel@vger.kernel.org, Rodrigo Vivi List-Id: intel-gfx@lists.freedesktop.org U2VhbiwKCldlIG1pZ2h0IHdhbnQgdG8gY2hlY2sgdGhlIHBhbmVsJ3MgSERDUCBjYXBhYmlsaXR5 PyBBZ3JlZWQgdGhhdCBtYWpvcml0eSAKb2YgSERNSS9EUCBwYW5lbCdzIHN1cHBvcnRzIGl0LCBi dXQgdGhlcmUgaXMgYSBwb3NzaWJpbGl0eSB0aGF0IHdlIG1pZ2h0IAphdm9pZCBhdXRoZW50aWNh dGlvbiBvbiBub24taGRjcCBwYW5lbHMuCgpBcyBwZXIgSERDUCBzcGVjaWZpY2F0aW9uLCBjaGVj ayBmb3IgdmFsaWQgYmtzdiB3aWxsIHNlcnZlIHRoZSBwdXJwb3NlLgoKCk9uIFRodXJzZGF5IDMw IE5vdmVtYmVyIDIwMTcgMDg6MzkgQU0sIFNlYW4gUGF1bCB3cm90ZToKPiBUaGlzIHBhdGNoIGFk ZHMgSERDUCBzdXBwb3J0IGZvciBIRE1JIGNvbm5lY3RvcnMgYnkgaW1wbGVtZW50aW5nCj4gdGhl IGludGVsX2hkY3Bfc2hpbS4KPgo+IE5vdGhpbmcgdG9vIHNwZWNpYWwsIGp1c3QgYSBidW5jaCBv ZiBEREMgcmVhZHMvd3JpdGVzLgo+Cj4gU2lnbmVkLW9mZi1ieTogU2VhbiBQYXVsIDxzZWFucGF1 bEBjaHJvbWl1bS5vcmc+Cj4gLS0tCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5o ICAgfCAgIDEgKwo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGRpLmMgIHwgIDUwICsr KysrKysrCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9oZG1pLmMgfCAyNTMgKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgIDMgZmlsZXMgY2hhbmdlZCwgMzA0 IGluc2VydGlvbnMoKykKPgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAo+IGluZGV4IDc4MzcwODc3 ZmVhMy4uMDYxYzUyYTVkN2Q3IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfcmVnLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCj4gQEAgLTg0 MDAsNiArODQwMCw3IEBAIGVudW0gc2tsX3Bvd2VyX2dhdGUgewo+ICAgI2RlZmluZSAgVFJBTlNf RERJX0VEUF9JTlBVVF9BX09OT0ZGCSg0PDwxMikKPiAgICNkZWZpbmUgIFRSQU5TX0RESV9FRFBf SU5QVVRfQl9PTk9GRgkoNTw8MTIpCj4gICAjZGVmaW5lICBUUkFOU19ERElfRURQX0lOUFVUX0Nf T05PRkYJKDY8PDEyKQo+ICsjZGVmaW5lICBUUkFOU19ERElfSERDUF9TSUdOQUxMSU5HCSgxPDw5 KQo+ICAgI2RlZmluZSAgVFJBTlNfRERJX0RQX1ZDX1BBWUxPQURfQUxMT0MJKDE8PDgpCj4gICAj ZGVmaW5lICBUUkFOU19ERElfSERNSV9TQ1JBTUJMRVJfQ1RTX0VOQUJMRSAoMTw8NykKPiAgICNk ZWZpbmUgIFRSQU5TX0RESV9IRE1JX1NDUkFNQkxFUl9SRVNFVF9GUkVRICgxPDw2KQo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kZGkuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2RkaS5jCj4gaW5kZXggMGU2OTMzN2Y0MTBkLi4wMzI0YjA5ZWNmNzYgMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGRpLmMKPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kZGkuYwo+IEBAIC0xNjUwLDYgKzE2NTAsNTYgQEAgdm9p ZCBpbnRlbF9kZGlfZGlzYWJsZV90cmFuc2NvZGVyX2Z1bmMoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2LAo+ICAgCUk5MTVfV1JJVEUocmVnLCB2YWwpOwo+ICAgfQo+ICAgCj4gK2lu dCBpbnRlbF9kZGlfZGlzYWJsZV9oZGNwX3NpZ25hbGxpbmcoc3RydWN0IGludGVsX2VuY29kZXIg KmludGVsX2VuY29kZXIpCj4gK3sKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBpbnRlbF9l bmNvZGVyLT5iYXNlLmRldjsKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 IHRvX2k5MTUoZGV2KTsKPiArCWVudW0gcGlwZSBwaXBlID0gMDsKPiArCWludCByZXQgPSAwOwo+ ICsJdWludDMyX3QgdG1wOwo+ICsKPiArCWlmICghaW50ZWxfZGlzcGxheV9wb3dlcl9nZXRfaWZf ZW5hYmxlZChkZXZfcHJpdiwKPiArCQkJCQkJaW50ZWxfZW5jb2Rlci0+cG93ZXJfZG9tYWluKSkK PiArCQlyZXR1cm4gLUVOWElPOwo+ICsKPiArCWlmICghaW50ZWxfZW5jb2Rlci0+Z2V0X2h3X3N0 YXRlKGludGVsX2VuY29kZXIsICZwaXBlKSkgewo+ICsJCXJldCA9IC1FSU87Cj4gKwkJZ290byBv dXQ7Cj4gKwl9Cj4gKwo+ICsJdG1wID0gSTkxNV9SRUFEKFRSQU5TX0RESV9GVU5DX0NUTChwaXBl KSk7Cj4gKwl0bXAgJj0gflRSQU5TX0RESV9IRENQX1NJR05BTExJTkc7Cj4gKwlJOTE1X1dSSVRF KFRSQU5TX0RESV9GVU5DX0NUTChwaXBlKSwgdG1wKTsKPiArb3V0Ogo+ICsJaW50ZWxfZGlzcGxh eV9wb3dlcl9wdXQoZGV2X3ByaXYsIGludGVsX2VuY29kZXItPnBvd2VyX2RvbWFpbik7Cj4gKwly ZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtpbnQgaW50ZWxfZGRpX2VuYWJsZV9oZGNwX3NpZ25hbGxp bmcoc3RydWN0IGludGVsX2VuY29kZXIgKmludGVsX2VuY29kZXIpCj4gK3sKPiArCXN0cnVjdCBk cm1fZGV2aWNlICpkZXYgPSBpbnRlbF9lbmNvZGVyLT5iYXNlLmRldjsKPiArCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKPiArCWVudW0gcGlwZSBwaXBl ID0gMDsKPiArCWludCByZXQgPSAwOwo+ICsJdWludDMyX3QgdG1wOwo+ICsKPiArCWlmICghaW50 ZWxfZGlzcGxheV9wb3dlcl9nZXRfaWZfZW5hYmxlZChkZXZfcHJpdiwKPiArCQkJCQkJaW50ZWxf ZW5jb2Rlci0+cG93ZXJfZG9tYWluKSkKPiArCQlyZXR1cm4gLUVOWElPOwo+ICsKPiArCWlmICgh aW50ZWxfZW5jb2Rlci0+Z2V0X2h3X3N0YXRlKGludGVsX2VuY29kZXIsICZwaXBlKSkgewo+ICsJ CXJldCA9IC1FSU87Cj4gKwkJZ290byBvdXQ7Cj4gKwl9Cj4gKwo+ICsJdG1wID0gSTkxNV9SRUFE KFRSQU5TX0RESV9GVU5DX0NUTChwaXBlKSk7Cj4gKwl0bXAgfD0gVFJBTlNfRERJX0hEQ1BfU0lH TkFMTElORzsKPiArCUk5MTVfV1JJVEUoVFJBTlNfRERJX0ZVTkNfQ1RMKHBpcGUpLCB0bXApOwo+ ICtvdXQ6Cj4gKwlpbnRlbF9kaXNwbGF5X3Bvd2VyX3B1dChkZXZfcHJpdiwgaW50ZWxfZW5jb2Rl ci0+cG93ZXJfZG9tYWluKTsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gICBib29sIGludGVs X2RkaV9jb25uZWN0b3JfZ2V0X2h3X3N0YXRlKHN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmludGVs X2Nvbm5lY3RvcikKPiAgIHsKPiAgIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gaW50ZWxfY29u bmVjdG9yLT5iYXNlLmRldjsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfaGRtaS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaGRtaS5jCj4gaW5kZXggNTky NDdhNDlhMDc3Li41NjMxNjg4OTdkZDkgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfaGRtaS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaGRtaS5j Cj4gQEAgLTM0LDYgKzM0LDcgQEAKPiAgICNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIu aD4KPiAgICNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KPiAgICNpbmNsdWRlIDxkcm0vZHJtX2Vk aWQuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1faGRjcC5oPgo+ICAgI2luY2x1ZGUgPGRybS9kcm1f c2NkY19oZWxwZXIuaD4KPiAgICNpbmNsdWRlICJpbnRlbF9kcnYuaCIKPiAgICNpbmNsdWRlIDxk cm0vaTkxNV9kcm0uaD4KPiBAQCAtODc1LDYgKzg3NiwyNTIgQEAgdm9pZCBpbnRlbF9kcF9kdWFs X21vZGVfc2V0X3RtZHNfb3V0cHV0KHN0cnVjdCBpbnRlbF9oZG1pICpoZG1pLCBib29sIGVuYWJs ZSkKPiAgIAkJCQkJIGFkYXB0ZXIsIGVuYWJsZSk7Cj4gICB9Cj4gICAKPiArc3RhdGljIGludCBp bnRlbF9oZG1pX2hkY3BfcmVhZChzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICppbnRlbF9kaWdf cG9ydCwKPiArCQkJICAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0LCB2b2lkICpidWZmZXIsIHNp emVfdCBzaXplKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfaGRtaSAqaGRtaSA9ICZpbnRlbF9kaWdf cG9ydC0+aGRtaTsKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9Cj4gKwkJ aW50ZWxfZGlnX3BvcnQtPmJhc2UuYmFzZS5kZXYtPmRldl9wcml2YXRlOwo+ICsJc3RydWN0IGky Y19hZGFwdGVyICphZGFwdGVyID0gaW50ZWxfZ21idXNfZ2V0X2FkYXB0ZXIoZGV2X3ByaXYsCj4g KwkJCQkJCQkgICAgICBoZG1pLT5kZGNfYnVzKTsKPiArCWludCByZXQ7Cj4gKwl1OCBzdGFydCA9 IG9mZnNldCAmIDB4ZmY7Cj4gKwlzdHJ1Y3QgaTJjX21zZyBtc2dzW10gPSB7Cj4gKwkJewo+ICsJ CQkuYWRkciA9IERSTV9IRENQX0REQ19BRERSLAo+ICsJCQkuZmxhZ3MgPSAwLAo+ICsJCQkubGVu ID0gMSwKPiArCQkJLmJ1ZiA9ICZzdGFydCwKPiArCQl9LAo+ICsJCXsKPiArCQkJLmFkZHIgPSBE Uk1fSERDUF9ERENfQUREUiwKPiArCQkJLmZsYWdzID0gSTJDX01fUkQsCj4gKwkJCS5sZW4gPSBz aXplLAo+ICsJCQkuYnVmID0gYnVmZmVyCj4gKwkJfQo+ICsJfTsKPiArCXJldCA9IGkyY190cmFu c2ZlcihhZGFwdGVyLCBtc2dzLCBBUlJBWV9TSVpFKG1zZ3MpKTsKPiArCWlmIChyZXQgPT0gQVJS QVlfU0laRShtc2dzKSkKPiArCQlyZXR1cm4gMDsKPiArCXJldHVybiByZXQgPj0gMCA/IC1FSU8g OiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaW50ZWxfaGRtaV9oZGNwX3dyaXRlKHN0cnVj dCBpbnRlbF9kaWdpdGFsX3BvcnQgKmludGVsX2RpZ19wb3J0LAo+ICsJCQkgICAgICAgICB1bnNp Z25lZCBpbnQgb2Zmc2V0LCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQo+ICt7Cj4gKwlzdHJ1 Y3QgaW50ZWxfaGRtaSAqaGRtaSA9ICZpbnRlbF9kaWdfcG9ydC0+aGRtaTsKPiArCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9Cj4gKwkJaW50ZWxfZGlnX3BvcnQtPmJhc2UuYmFz ZS5kZXYtPmRldl9wcml2YXRlOwo+ICsJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyID0gaW50 ZWxfZ21idXNfZ2V0X2FkYXB0ZXIoZGV2X3ByaXYsCj4gKwkJCQkJCQkgICAgICBoZG1pLT5kZGNf YnVzKTsKPiArCWludCByZXQ7Cj4gKwl1OCAqd3JpdGVfYnVmOwo+ICsJc3RydWN0IGkyY19tc2cg bXNnOwo+ICsKPiArCXdyaXRlX2J1ZiA9IGt6YWxsb2Moc2l6ZSArIDEsIEdGUF9LRVJORUwpOwo+ ICsJaWYgKCF3cml0ZV9idWYpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJd3JpdGVfYnVm WzBdID0gb2Zmc2V0ICYgMHhmZjsKPiArCW1lbWNweSgmd3JpdGVfYnVmWzFdLCBidWZmZXIsIHNp emUpOwo+ICsKPiArCW1zZy5hZGRyID0gRFJNX0hEQ1BfRERDX0FERFI7Cj4gKwltc2cuZmxhZ3Mg PSAwLAo+ICsJbXNnLmxlbiA9IHNpemUgKyAxLAo+ICsJbXNnLmJ1ZiA9IHdyaXRlX2J1ZjsKPiAr Cj4gKwlyZXQgPSBpMmNfdHJhbnNmZXIoYWRhcHRlciwgJm1zZywgMSk7Cj4gKwlpZiAocmV0ID09 IDEpCj4gKwkJcmV0dXJuIDA7Cj4gKwlyZXR1cm4gcmV0ID49IDAgPyAtRUlPIDogcmV0Owo+ICt9 Cj4gKwo+ICtzdGF0aWMKPiAraW50IGludGVsX2hkbWlfaGRjcF93cml0ZV9hbl9ha3N2KHN0cnVj dCBpbnRlbF9kaWdpdGFsX3BvcnQgKmludGVsX2RpZ19wb3J0LAo+ICsJCQkJICB1OCAqYW4pCj4g K3sKPiArCXN0cnVjdCBpbnRlbF9oZG1pICpoZG1pID0gJmludGVsX2RpZ19wb3J0LT5oZG1pOwo+ ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0KPiArCQlpbnRlbF9kaWdfcG9y dC0+YmFzZS5iYXNlLmRldi0+ZGV2X3ByaXZhdGU7Cj4gKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFk YXB0ZXIgPSBpbnRlbF9nbWJ1c19nZXRfYWRhcHRlcihkZXZfcHJpdiwKPiArCQkJCQkJCSAgICAg IGhkbWktPmRkY19idXMpOwo+ICsJaW50IHJldDsKPiArCj4gKwlyZXQgPSBpbnRlbF9oZG1pX2hk Y3Bfd3JpdGUoaW50ZWxfZGlnX3BvcnQsIERSTV9IRENQX0REQ19BTiwgYW4sCj4gKwkJCQkgICAg RFJNX0hEQ1BfQU5fTEVOKTsKPiArCWlmIChyZXQpIHsKPiArCQlEUk1fRVJST1IoIldyaXRlIEFu IG92ZXIgRERDIGZhaWxlZCAoJWQpXG4iLCByZXQpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4g Kwo+ICsJcmV0ID0gaW50ZWxfZ21idXNfb3V0cHV0X2Frc3YoYWRhcHRlcik7Cj4gKwlpZiAocmV0 IDwgMCkgewo+ICsJCURSTV9FUlJPUigiRmFpbGVkIHRvIG91dHB1dCBha3N2ICglZClcbiIsIHJl dCk7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgaW50IGludGVsX2hkbWlfaGRjcF9yZWFkX2Jrc3Yoc3RydWN0IGludGVsX2RpZ2l0YWxfcG9y dCAqaW50ZWxfZGlnX3BvcnQsCj4gKwkJCQkgICAgIHU4ICpia3N2KQo+ICt7Cj4gKwlpbnQgcmV0 Owo+ICsJcmV0ID0gaW50ZWxfaGRtaV9oZGNwX3JlYWQoaW50ZWxfZGlnX3BvcnQsIERSTV9IRENQ X0REQ19CS1NWLCBia3N2LAo+ICsJCQkJICAgRFJNX0hEQ1BfS1NWX0xFTik7Cj4gKwlpZiAocmV0 KQo+ICsJCURSTV9FUlJPUigiUmVhZCBCa3N2IG92ZXIgRERDIGZhaWxlZCAoJWQpXG4iLCByZXQp Owo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljCj4gK2ludCBpbnRlbF9oZG1pX2hk Y3BfcmVhZF9ic3RhdHVzKHN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmludGVsX2RpZ19wb3J0 LAo+ICsJCQkJIHU4ICpic3RhdHVzKQo+ICt7Cj4gKwlpbnQgcmV0Owo+ICsJcmV0ID0gaW50ZWxf aGRtaV9oZGNwX3JlYWQoaW50ZWxfZGlnX3BvcnQsIERSTV9IRENQX0REQ19CU1RBVFVTLAo+ICsJ CQkJICAgYnN0YXR1cywgRFJNX0hEQ1BfQlNUQVRVU19MRU4pOwo+ICsJaWYgKHJldCkKPiArCQlE Uk1fRVJST1IoIlJlYWQgYnN0YXR1cyBvdmVyIEREQyBmYWlsZWQgKCVkKVxuIiwgcmV0KTsKPiAr CXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYwo+ICtpbnQgaW50ZWxfaGRtaV9oZGNwX3Jl cGVhdGVyX3ByZXNlbnQoc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQs Cj4gKwkJCQkgICAgIGJvb2wgKnJlcGVhdGVyX3ByZXNlbnQpCj4gK3sKPiArCWludCByZXQ7Cj4g Kwl1OCB2YWw7Cj4gKwo+ICsJcmV0ID0gaW50ZWxfaGRtaV9oZGNwX3JlYWQoaW50ZWxfZGlnX3Bv cnQsIERSTV9IRENQX0REQ19CQ0FQUywgJnZhbCwgMSk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJRFJN X0VSUk9SKCJSZWFkIGJjYXBzIG92ZXIgRERDIGZhaWxlZCAoJWQpXG4iLCByZXQpOwo+ICsJCXJl dHVybiByZXQ7Cj4gKwl9Cj4gKwkqcmVwZWF0ZXJfcHJlc2VudCA9IHZhbCAmIERSTV9IRENQX0RE Q19CQ0FQU19SRVBFQVRFUl9QUkVTRU5UOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRp Ywo+ICtpbnQgaW50ZWxfaGRtaV9oZGNwX3JlYWRfcmlfcHJpbWUoc3RydWN0IGludGVsX2RpZ2l0 YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQsCj4gKwkJCQkgIHU4ICpyaV9wcmltZSkKPiArewo+ICsJ aW50IHJldDsKPiArCXJldCA9IGludGVsX2hkbWlfaGRjcF9yZWFkKGludGVsX2RpZ19wb3J0LCBE Uk1fSERDUF9ERENfUklfUFJJTUUsCj4gKwkJCQkgICByaV9wcmltZSwgRFJNX0hEQ1BfUklfTEVO KTsKPiArCWlmIChyZXQpCj4gKwkJRFJNX0VSUk9SKCJSZWFkIFJpJyBvdmVyIEREQyBmYWlsZWQg KCVkKVxuIiwgcmV0KTsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYwo+ICtpbnQg aW50ZWxfaGRtaV9oZGNwX3JlYWRfa3N2X3JlYWR5KHN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQg KmludGVsX2RpZ19wb3J0LAo+ICsJCQkJICAgYm9vbCAqa3N2X3JlYWR5KQo+ICt7Cj4gKwlpbnQg cmV0Owo+ICsJdTggdmFsOwo+ICsKPiArCXJldCA9IGludGVsX2hkbWlfaGRjcF9yZWFkKGludGVs X2RpZ19wb3J0LCBEUk1fSERDUF9ERENfQkNBUFMsICZ2YWwsIDEpOwo+ICsJaWYgKHJldCkgewo+ ICsJCURSTV9FUlJPUigiUmVhZCBiY2FwcyBvdmVyIEREQyBmYWlsZWQgKCVkKVxuIiwgcmV0KTsK PiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsJKmtzdl9yZWFkeSA9IHZhbCAmIERSTV9IRENQX0RE Q19CQ0FQU19LU1ZfRklGT19SRUFEWTsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMK PiAraW50IGludGVsX2hkbWlfaGRjcF9yZWFkX2tzdl9maWZvKHN0cnVjdCBpbnRlbF9kaWdpdGFs X3BvcnQgKmludGVsX2RpZ19wb3J0LAo+ICsJCQkgICAgICAgICAgaW50IG51bV9kb3duc3RyZWFt LCB1OCAqa3N2X2ZpZm8pCj4gK3sKPiArCWludCByZXQ7Cj4gKwlyZXQgPSBpbnRlbF9oZG1pX2hk Y3BfcmVhZChpbnRlbF9kaWdfcG9ydCwgRFJNX0hEQ1BfRERDX0tTVl9GSUZPLAo+ICsJCQkJICAg a3N2X2ZpZm8sIG51bV9kb3duc3RyZWFtICogRFJNX0hEQ1BfS1NWX0xFTik7Cj4gKwlpZiAocmV0 KSB7Cj4gKwkJRFJNX0VSUk9SKCJSZWFkIGtzdiBmaWZvIG92ZXIgRERDIGZhaWxlZCAoJWQpXG4i LCByZXQpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiAr c3RhdGljCj4gK2ludCBpbnRlbF9oZG1pX2hkY3BfcmVhZF92X3ByaW1lX3BhcnQoc3RydWN0IGlu dGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQsCj4gKwkJCQkgICAgICBpbnQgaSwgdTMy ICpwYXJ0KQo+ICt7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWlmIChpID49IERSTV9IRENQX1ZfUFJJ TUVfTlVNX1BBUlRTKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCXJldCA9IGludGVsX2hk bWlfaGRjcF9yZWFkKGludGVsX2RpZ19wb3J0LCBEUk1fSERDUF9ERENfVl9QUklNRShpKSwKPiAr CQkJCSAgIHBhcnQsIERSTV9IRENQX1ZfUFJJTUVfUEFSVF9MRU4pOwo+ICsJaWYgKHJldCkKPiAr CQlEUk1fRVJST1IoIlJlYWQgVidbJWRdIG92ZXIgRERDIGZhaWxlZCAoJWQpXG4iLCBpLCByZXQp Owo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljCj4gK2ludCBpbnRlbF9oZG1pX2hk Y3BfdG9nZ2xlX3NpZ25hbGxpbmcoc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGln X3BvcnQsCj4gKwkJCQkgICAgICBib29sIGVuYWJsZSkKPiArewo+ICsJaW50IHJldDsKPiArCWlm IChlbmFibGUpIHsKPiArCQlyZXQgPSBpbnRlbF9kZGlfZW5hYmxlX2hkY3Bfc2lnbmFsbGluZygm aW50ZWxfZGlnX3BvcnQtPmJhc2UpOwo+ICsJCWlmIChyZXQpIHsKPiArCQkJRFJNX0VSUk9SKCJF bmFibGUgSERDUCBzaWduYWxsaW5nIGZhaWxlZCAoJWQpXG4iLCByZXQpOwo+ICsJCQlyZXR1cm4g cmV0Owo+ICsJCX0KPiArCX0gZWxzZSB7Cj4gKwkJdXNsZWVwX3JhbmdlKDYsIDYwKTsgLyogQnNw ZWMgc2F5cyA+PSA2dXMgKi8KPiArCQlyZXQgPSBpbnRlbF9kZGlfZGlzYWJsZV9oZGNwX3NpZ25h bGxpbmcoJmludGVsX2RpZ19wb3J0LT5iYXNlKTsKPiArCQlpZiAocmV0KSB7Cj4gKwkJCURSTV9F UlJPUigiRW5hYmxlIEhEQ1Agc2lnbmFsbGluZyBmYWlsZWQgKCVkKVxuIiwgcmV0KTsKPiArCQkJ cmV0dXJuIHJldDsKPiArCQl9Cj4gKwl9Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGlj Cj4gK2Jvb2wgaW50ZWxfaGRtaV9oZGNwX2NoZWNrX2xpbmsoc3RydWN0IGludGVsX2RpZ2l0YWxf cG9ydCAqaW50ZWxfZGlnX3BvcnQpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiA9Cj4gKwkJaW50ZWxfZGlnX3BvcnQtPmJhc2UuYmFzZS5kZXYtPmRldl9wcml2YXRl Owo+ICsJZW51bSBwb3J0IHBvcnQgPSBpbnRlbF9kaWdfcG9ydC0+cG9ydDsKPiArCWludCByZXQ7 Cj4gKwl1bmlvbiB7Cj4gKwkJdTMyIHJlZzsKPiArCQl1OCBzaGltW0RSTV9IRENQX1JJX0xFTl07 Cj4gKwl9IHJpOwo+ICsKPiArCXJldCA9IGludGVsX2hkbWlfaGRjcF9yZWFkX3JpX3ByaW1lKGlu dGVsX2RpZ19wb3J0LCByaS5zaGltKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIGZhbHNlOwo+ ICsKPiArCUk5MTVfV1JJVEUoU0tMX1BPUlRfSERDUF9SUFJJTUUocG9ydCksIHJpLnJlZyk7Cj4g Kwo+ICsJLy8gV2FpdCBmb3IgUmkgcHJpbWUgbWF0Y2gKPiArCWlmICh3YWl0X2ZvcihJOTE1X1JF QUQoU0tMX1BPUlRfSERDUF9TVEFUVVMocG9ydCkpICYKPiArCQkgICAgIChTS0xfSERDUF9TVEFU VVNfUklfTUFUQ0ggfCBTS0xfSERDUF9TVEFUVVNfRU5DKSwgMSkpIHsKPiArCQlEUk1fRVJST1Io IlJpJyBtaXNtYXRjaCBkZXRlY3RlZCwgbGluayBjaGVjayBmYWlsZWQgKCV4KVxuIiwKPiArCQkJ ICBJOTE1X1JFQUQoU0tMX1BPUlRfSERDUF9TVEFUVVMocG9ydCkpKTsKPiArCQlyZXR1cm4gZmFs c2U7Cj4gKwl9Cj4gKwlyZXR1cm4gdHJ1ZTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVj dCBpbnRlbF9oZGNwX3NoaW0gaW50ZWxfaGRtaV9oZGNwX3NoaW0gPSB7Cj4gKwkud3JpdGVfYW5f YWtzdiA9IGludGVsX2hkbWlfaGRjcF93cml0ZV9hbl9ha3N2LAo+ICsJLnJlYWRfYmtzdiA9IGlu dGVsX2hkbWlfaGRjcF9yZWFkX2Jrc3YsCj4gKwkucmVhZF9ic3RhdHVzID0gaW50ZWxfaGRtaV9o ZGNwX3JlYWRfYnN0YXR1cywKPiArCS5yZXBlYXRlcl9wcmVzZW50ID0gaW50ZWxfaGRtaV9oZGNw X3JlcGVhdGVyX3ByZXNlbnQsCj4gKwkucmVhZF9yaV9wcmltZSA9IGludGVsX2hkbWlfaGRjcF9y ZWFkX3JpX3ByaW1lLAo+ICsJLnJlYWRfa3N2X3JlYWR5ID0gaW50ZWxfaGRtaV9oZGNwX3JlYWRf a3N2X3JlYWR5LAo+ICsJLnJlYWRfa3N2X2ZpZm8gPSBpbnRlbF9oZG1pX2hkY3BfcmVhZF9rc3Zf ZmlmbywKPiArCS5yZWFkX3ZfcHJpbWVfcGFydCA9IGludGVsX2hkbWlfaGRjcF9yZWFkX3ZfcHJp bWVfcGFydCwKPiArCS50b2dnbGVfc2lnbmFsbGluZyA9IGludGVsX2hkbWlfaGRjcF90b2dnbGVf c2lnbmFsbGluZywKPiArCS5jaGVja19saW5rID0gaW50ZWxfaGRtaV9oZGNwX2NoZWNrX2xpbmss Cj4gK307Cj4gKwo+ICAgc3RhdGljIHZvaWQgaW50ZWxfaGRtaV9wcmVwYXJlKHN0cnVjdCBpbnRl bF9lbmNvZGVyICplbmNvZGVyLAo+ICAgCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRj X3N0YXRlICpjcnRjX3N0YXRlKQo+ICAgewo+IEBAIC0yMDM5LDYgKzIyODYsMTIgQEAgdm9pZCBp bnRlbF9oZG1pX2luaXRfY29ubmVjdG9yKHN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmludGVs X2RpZ19wb3J0LAo+ICAgCj4gICAJaW50ZWxfaGRtaV9hZGRfcHJvcGVydGllcyhpbnRlbF9oZG1p LCBjb25uZWN0b3IpOwo+ICAgCj4gKwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA5KSB7Cj4g KwkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfY29udGVudF9wcm90ZWN0aW9uX3Byb3BlcnR5KGNvbm5l Y3Rvcik7Cj4gKwkJaW50ZWxfY29ubmVjdG9yLT5oZGNwX3NoaW0gPSAmaW50ZWxfaGRtaV9oZGNw X3NoaW07Cj4gKwkJSU5JVF9ERUxBWUVEX1dPUksoJmludGVsX2Nvbm5lY3Rvci0+aGRjcF93b3Jr LCBpbnRlbF9oZGNwX3dvcmspOwo+ICsJfQo+ICsKPiAgIAlpbnRlbF9jb25uZWN0b3JfYXR0YWNo X2VuY29kZXIoaW50ZWxfY29ubmVjdG9yLCBpbnRlbF9lbmNvZGVyKTsKPiAgIAlpbnRlbF9oZG1p LT5hdHRhY2hlZF9jb25uZWN0b3IgPSBpbnRlbF9jb25uZWN0b3I7Cj4gICAKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxp c3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=