From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 13/18] drm/i915: Precompute HDMI infoframes Date: Mon, 24 Sep 2018 17:58:25 +0200 Message-ID: <20180924155825.GZ11082@phenom.ffwll.local> References: <20180920185145.1912-1-ville.syrjala@linux.intel.com> <20180920185145.1912-14-ville.syrjala@linux.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 097F76E2DD for ; Mon, 24 Sep 2018 15:58:30 +0000 (UTC) Received: by mail-ed1-x543.google.com with SMTP id g26-v6so3598659edp.0 for ; Mon, 24 Sep 2018 08:58:29 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20180920185145.1912-14-ville.syrjala@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Ville Syrjala Cc: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCBTZXAgMjAsIDIwMTggYXQgMDk6NTE6NDBQTSArMDMwMCwgVmlsbGUgU3lyamFsYSB3 cm90ZToKPiBGcm9tOiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwu Y29tPgo+IAo+IFN0b3JlIHRoZSBpbmZvZnJhbWVzIGluIHRoZSBjcnRjIHN0YXRlIGFuZCBwcmVj b21wdXRlIHRoZW0gaW4KPiAuY29tcHV0ZV9jb25maWcoKS4gV2hpbGUgcHJlY29tcHV0aW5nIHdl J2xsIGFsc28gZmlsbCBvdXQgdGhlCj4gaW5mb3JhbWVzLmVuYWJsZSBiaXRtYXNrIGFwcHJvcHJp YXRlbHkuCj4gCj4gU2lnbmVkLW9mZi1ieTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxh QGxpbnV4LmludGVsLmNvbT4KPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGRp LmMgIHwgICAxICsKPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggIHwgICA1ICsK PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaGRtaS5jIHwgMjQ5ICsrKysrKysrKysrKysr KysrKysrKysrKysrKy0tLS0tLS0tLS0tCj4gIDMgZmlsZXMgY2hhbmdlZCwgMTg3IGluc2VydGlv bnMoKyksIDY4IGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9kZGkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RkaS5jCj4gaW5k ZXggMTlmZWY4OGU2ODBlLi41ZjNiZDUzNmQyNjEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfZGRpLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9k ZGkuYwo+IEBAIC0zMzkxLDYgKzMzOTEsNyBAQCB2b2lkIGludGVsX2RkaV9nZXRfY29uZmlnKHN0 cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAo+ICAJCWludGVsX2RpZ19wb3J0ID0gZW5jX3Rv X2RpZ19wb3J0KCZlbmNvZGVyLT5iYXNlKTsKPiAgCj4gIAkJcGlwZV9jb25maWctPmluZm9mcmFt ZXMuZW5hYmxlIHw9Cj4gKwkJCWludGVsX2hkbWlfaW5mb2ZyYW1lX2VuYWJsZShIRE1JX1BBQ0tF VF9UWVBFX05VTEwpIHwKCk1pc3BsYWNlZCBodW5rPyBBc3N1bWluZyBJJ20gcmVhZGluZyB0aGlz IGNvcnJlY3RseSwgdGhpcyB3aWxsIGdpdmUgeW91IGEKMC4gTm90IGV4YWN0bHkgc3VyZSB3aGF0 J3MgZ29pbmcgb24gaGVyZSAuLi4gSSBndWVzcyBJJ20gbm90IGZvbGxvd2luZyB3aHkKd2UgY2Fy ZSBhYm91dCBUWVBFX05VTEwsIGFuZCB3aHkgd2UgaGF2ZSB0byByZWNvbnN0cnVjdCBpdCBoZXJl PwoKSSB0aG91Z2h0IFRZUEVfTlVMTCBpcyBlcXVpdmFsZW50IHRvIHN0YXRlLT5oYXNfaGRtaV9z aW5rPyBDb21tZW50Cih1bmZvcnR1bmF0ZWx5IG5vdCB5ZXQga2VybmVsZG9jKSBldmVuIGV4cGxh aW5zIHRoYXQgLi4uCgpNYXliZSBqdXN0IG51a2UgYWxsIHRoZSBUWVBFX05VTEwgdHJhY2tpbmcg aGVyZSwgcGVyaGFwcyB3aXRoIHRoZSBnNHgKKGV4Y2VwdCBmb3IgZzR4IGl0c2VsZiwgYmVjYXVz ZSBpdCdzIHNoYXJlZCB0aGVyZSkgZGVjb2RlciB0byBhbHNvIHRha2UKRElQX0VOQUJMRSBpbnRv IGFjY291bnQgZm9yIGhhc19oZG1pX3NpbmsuCgpPciB1cGRhdGUgdGhlIGNvbW1lbnQgaW4gaW50 ZWxfY3J0Y19zdGF0ZS4KCk90aGVyd2lzZSBsZ3RtLCB0aG91Z2h0IGFkbWl0dGVkbHkgSSBkaWQg Y2xlYW4gb3ZlciB0aGUgZGV0YWlscyBhIGJpdCwKdHJ1c3RpbmcgQ0kgYW5kIGdjYyB0byBjYXRj aCB0aGUgc21hbGwgc3R1ZmYgOi0pCgpSZXZpZXdlZC1ieTogRGFuaWVsIFZldHRlciA8ZGFuaWVs LnZldHRlckBmZndsbC5jaD4gd2l0aCB0aGUgVFlQRV9OVUxMCnN0b3J5IHNvbWVob3cgZmlndXJl ZCBvdXQuCi1EYW5pZWwKCgo+ICAJCQlpbnRlbF9oZG1pX2luZm9mcmFtZXNfZW5hYmxlZChlbmNv ZGVyLCBwaXBlX2NvbmZpZyk7Cj4gIAo+ICAJCWlmIChwaXBlX2NvbmZpZy0+aW5mb2ZyYW1lcy5l bmFibGUpCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKPiBpbmRleCA1MGMwYzA0OWVlMTUuLjM1 NzYyNGE2YmZlMiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYu aAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCj4gQEAgLTg5NSw2ICs4 OTUsMTAgQEAgc3RydWN0IGludGVsX2NydGNfc3RhdGUgewo+ICAKPiAgCXN0cnVjdCB7Cj4gIAkJ dTMyIGVuYWJsZTsKPiArCQl1MzIgZ2NwOwo+ICsJCXVuaW9uIGhkbWlfaW5mb2ZyYW1lIGF2aTsK PiArCQl1bmlvbiBoZG1pX2luZm9mcmFtZSBzcGQ7Cj4gKwkJdW5pb24gaGRtaV9pbmZvZnJhbWUg aGRtaTsKPiAgCX0gaW5mb2ZyYW1lczsKPiAgCj4gIAkvKiBIRE1JIHNjcmFtYmxpbmcgc3RhdHVz ICovCj4gQEAgLTE4NjIsNiArMTg2Niw3IEBAIHZvaWQgaW50ZWxfZHBfZHVhbF9tb2RlX3NldF90 bWRzX291dHB1dChzdHJ1Y3QgaW50ZWxfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGUpOwo+ICB2b2lk IGludGVsX2luZm9mcmFtZV9pbml0KHN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmludGVsX2Rp Z19wb3J0KTsKPiAgdTMyIGludGVsX2hkbWlfaW5mb2ZyYW1lc19lbmFibGVkKHN0cnVjdCBpbnRl bF9lbmNvZGVyICplbmNvZGVyLAo+ICAJCQkJICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0 ZSAqY3J0Y19zdGF0ZSk7Cj4gK3UzMiBpbnRlbF9oZG1pX2luZm9mcmFtZV9lbmFibGUodW5zaWdu ZWQgaW50IHR5cGUpOwo+ICAKPiAgCj4gIC8qIGludGVsX2x2ZHMuYyAqLwo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9oZG1pLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9oZG1pLmMKPiBpbmRleCA5OGE0NDA4NDMyNGMuLjQ5MTAwMWZjMGZhZCAxMDA2NDQK PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9oZG1pLmMKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9oZG1pLmMKPiBAQCAtNDQ2LDYgKzQ0NiwxOCBAQCBzdGF0aWMg Y29uc3QgdTggaW5mb2ZyYW1lX3R5cGVfdG9faWR4W10gPSB7Cj4gIAlIRE1JX0lORk9GUkFNRV9U WVBFX1ZFTkRPUiwKPiAgfTsKPiAgCj4gK3UzMiBpbnRlbF9oZG1pX2luZm9mcmFtZV9lbmFibGUo dW5zaWduZWQgaW50IHR5cGUpCj4gK3sKPiArCWludCBpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkg PCBBUlJBWV9TSVpFKGluZm9mcmFtZV90eXBlX3RvX2lkeCk7IGkrKykgewo+ICsJCWlmIChpbmZv ZnJhbWVfdHlwZV90b19pZHhbaV0gPT0gdHlwZSkKPiArCQkJcmV0dXJuIEJJVChpKTsKPiArCX0K PiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiAgdTMyIGludGVsX2hkbWlfaW5mb2ZyYW1lc19l bmFibGVkKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAo+ICAJCQkJICBjb25zdCBzdHJ1 Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKPiAgewo+IEBAIC00OTEsMTUgKzUwMywy MyBAQCB1MzIgaW50ZWxfaGRtaV9pbmZvZnJhbWVzX2VuYWJsZWQoc3RydWN0IGludGVsX2VuY29k ZXIgKmVuY29kZXIsCj4gICAqLwo+ICBzdGF0aWMgdm9pZCBpbnRlbF93cml0ZV9pbmZvZnJhbWUo c3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCj4gIAkJCQkgIGNvbnN0IHN0cnVjdCBpbnRl bF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+IC0JCQkJICB1bmlvbiBoZG1pX2luZm9mcmFtZSAq ZnJhbWUpCj4gKwkJCQkgIGVudW0gaGRtaV9pbmZvZnJhbWVfdHlwZSB0eXBlLAo+ICsJCQkJICBj b25zdCB1bmlvbiBoZG1pX2luZm9mcmFtZSAqZnJhbWUpCj4gIHsKPiAgCXN0cnVjdCBpbnRlbF9k aWdpdGFsX3BvcnQgKmludGVsX2RpZ19wb3J0ID0gZW5jX3RvX2RpZ19wb3J0KCZlbmNvZGVyLT5i YXNlKTsKPiAgCXU4IGJ1ZmZlcltWSURFT19ESVBfREFUQV9TSVpFXTsKPiAgCXNzaXplX3QgbGVu Owo+ICAKPiArCWlmICgoY3J0Y19zdGF0ZS0+aW5mb2ZyYW1lcy5lbmFibGUgJgo+ICsJICAgICBp bnRlbF9oZG1pX2luZm9mcmFtZV9lbmFibGUodHlwZSkpID09IDApCj4gKwkJcmV0dXJuOwo+ICsK PiArCWlmIChXQVJOX09OKGZyYW1lLT5hbnkudHlwZSAhPSB0eXBlKSkKPiArCQlyZXR1cm47Cj4g Kwo+ICAJLyogc2VlIGNvbW1lbnQgYWJvdmUgZm9yIHRoZSByZWFzb24gZm9yIHRoaXMgb2Zmc2V0 ICovCj4gLQlsZW4gPSBoZG1pX2luZm9mcmFtZV9wYWNrKGZyYW1lLCBidWZmZXIgKyAxLCBzaXpl b2YoYnVmZmVyKSAtIDEpOwo+IC0JaWYgKGxlbiA8IDApCj4gKwlsZW4gPSBoZG1pX2luZm9mcmFt ZV9wYWNrX29ubHkoZnJhbWUsIGJ1ZmZlciArIDEsIHNpemVvZihidWZmZXIpIC0gMSk7Cj4gKwlp ZiAoV0FSTl9PTihsZW4gPCAwKSkKPiAgCQlyZXR1cm47Cj4gIAo+ICAJLyogSW5zZXJ0IHRoZSAn aG9sZScgKHNlZSBiaWcgY29tbWVudCBhYm92ZSkgYXQgcG9zaXRpb24gMyAqLwo+IEBAIC01MDcs ODUgKzUyNywxMTEgQEAgc3RhdGljIHZvaWQgaW50ZWxfd3JpdGVfaW5mb2ZyYW1lKHN0cnVjdCBp bnRlbF9lbmNvZGVyICplbmNvZGVyLAo+ICAJYnVmZmVyWzNdID0gMDsKPiAgCWxlbisrOwo+ICAK PiAtCWludGVsX2RpZ19wb3J0LT53cml0ZV9pbmZvZnJhbWUoZW5jb2RlciwKPiAtCQkJCQljcnRj X3N0YXRlLAo+IC0JCQkJCWZyYW1lLT5hbnkudHlwZSwgYnVmZmVyLCBsZW4pOwo+ICsJaW50ZWxf ZGlnX3BvcnQtPndyaXRlX2luZm9mcmFtZShlbmNvZGVyLCBjcnRjX3N0YXRlLCB0eXBlLCBidWZm ZXIsIGxlbik7Cj4gIH0KPiAgCj4gLXN0YXRpYyB2b2lkIGludGVsX2hkbWlfc2V0X2F2aV9pbmZv ZnJhbWUoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCj4gLQkJCQkJIGNvbnN0IHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+IC0JCQkJCSBjb25zdCBzdHJ1Y3QgZHJt X2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSkKPiArc3RhdGljIGJvb2wKPiAraW50ZWxfaGRt aV9jb21wdXRlX2F2aV9pbmZvZnJhbWUoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCj4g KwkJCQkgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCj4gKwkJCQkgc3RydWN0 IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUpCj4gIHsKPiAgCXN0cnVjdCBpbnRlbF9o ZG1pICppbnRlbF9oZG1pID0gZW5jX3RvX2ludGVsX2hkbWkoJmVuY29kZXItPmJhc2UpOwo+ICsJ c3RydWN0IGhkbWlfYXZpX2luZm9mcmFtZSAqZnJhbWUgPSAmY3J0Y19zdGF0ZS0+aW5mb2ZyYW1l cy5hdmkuYXZpOwo+ICsJYm9vbCBpc19oZG1pMl9zaW5rID0gY29ubl9zdGF0ZS0+Y29ubmVjdG9y LT5kaXNwbGF5X2luZm8uaGRtaS5zY2RjLnN1cHBvcnRlZDsKPiAgCWNvbnN0IHN0cnVjdCBkcm1f ZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlID0KPiAgCQkmY3J0Y19zdGF0ZS0+YmFzZS5hZGp1 c3RlZF9tb2RlOwo+IC0Jc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciA9ICZpbnRlbF9o ZG1pLT5hdHRhY2hlZF9jb25uZWN0b3ItPmJhc2U7Cj4gLQlib29sIGlzX2hkbWkyX3NpbmsgPSBj b25uZWN0b3ItPmRpc3BsYXlfaW5mby5oZG1pLnNjZGMuc3VwcG9ydGVkOwo+IC0JdW5pb24gaGRt aV9pbmZvZnJhbWUgZnJhbWU7Cj4gIAlpbnQgcmV0Owo+ICAKPiAtCXJldCA9IGRybV9oZG1pX2F2 aV9pbmZvZnJhbWVfZnJvbV9kaXNwbGF5X21vZGUoJmZyYW1lLmF2aSwKPiArCWlmICghY3J0Y19z dGF0ZS0+aGFzX2luZm9mcmFtZSkKPiArCQlyZXR1cm4gdHJ1ZTsKPiArCj4gKwljcnRjX3N0YXRl LT5pbmZvZnJhbWVzLmVuYWJsZSB8PQo+ICsJCWludGVsX2hkbWlfaW5mb2ZyYW1lX2VuYWJsZShI RE1JX0lORk9GUkFNRV9UWVBFX0FWSSk7Cj4gKwo+ICsJcmV0ID0gZHJtX2hkbWlfYXZpX2luZm9m cmFtZV9mcm9tX2Rpc3BsYXlfbW9kZShmcmFtZSwKPiAgCQkJCQkJICAgICAgIGFkanVzdGVkX21v ZGUsCj4gIAkJCQkJCSAgICAgICBpc19oZG1pMl9zaW5rKTsKPiAtCWlmIChyZXQgPCAwKSB7Cj4g LQkJRFJNX0VSUk9SKCJjb3VsZG4ndCBmaWxsIEFWSSBpbmZvZnJhbWVcbiIpOwo+IC0JCXJldHVy bjsKPiAtCX0KPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICAKPiAgCWlmIChjcnRj X3N0YXRlLT55Y2JjcjQyMCkKPiAtCQlmcmFtZS5hdmkuY29sb3JzcGFjZSA9IEhETUlfQ09MT1JT UEFDRV9ZVVY0MjA7Cj4gKwkJZnJhbWUtPmNvbG9yc3BhY2UgPSBIRE1JX0NPTE9SU1BBQ0VfWVVW NDIwOwo+ICAJZWxzZQo+IC0JCWZyYW1lLmF2aS5jb2xvcnNwYWNlID0gSERNSV9DT0xPUlNQQUNF X1JHQjsKPiArCQlmcmFtZS0+Y29sb3JzcGFjZSA9IEhETUlfQ09MT1JTUEFDRV9SR0I7Cj4gIAo+ IC0JZHJtX2hkbWlfYXZpX2luZm9mcmFtZV9xdWFudF9yYW5nZSgmZnJhbWUuYXZpLCBhZGp1c3Rl ZF9tb2RlLAo+ICsJZHJtX2hkbWlfYXZpX2luZm9mcmFtZV9xdWFudF9yYW5nZShmcmFtZSwgYWRq dXN0ZWRfbW9kZSwKPiAgCQkJCQkgICBjcnRjX3N0YXRlLT5saW1pdGVkX2NvbG9yX3JhbmdlID8K PiAgCQkJCQkgICBIRE1JX1FVQU5USVpBVElPTl9SQU5HRV9MSU1JVEVEIDoKPiAgCQkJCQkgICBI RE1JX1FVQU5USVpBVElPTl9SQU5HRV9GVUxMLAo+ICAJCQkJCSAgIGludGVsX2hkbWktPnJnYl9x dWFudF9yYW5nZV9zZWxlY3RhYmxlLAo+ICAJCQkJCSAgIGlzX2hkbWkyX3NpbmspOwo+ICAKPiAt CWRybV9oZG1pX2F2aV9pbmZvZnJhbWVfY29udGVudF90eXBlKCZmcmFtZS5hdmksCj4gLQkJCQkJ ICAgIGNvbm5fc3RhdGUpOwo+ICsJZHJtX2hkbWlfYXZpX2luZm9mcmFtZV9jb250ZW50X3R5cGUo ZnJhbWUsIGNvbm5fc3RhdGUpOwo+ICAKPiAgCS8qIFRPRE86IGhhbmRsZSBwaXhlbCByZXBldGl0 aW9uIGZvciBZQ0JDUjQyMCBvdXRwdXRzICovCj4gLQlpbnRlbF93cml0ZV9pbmZvZnJhbWUoZW5j b2RlciwgY3J0Y19zdGF0ZSwKPiAtCQkJICAgICAgJmZyYW1lKTsKPiArCj4gKwlyZXQgPSBoZG1p X2F2aV9pbmZvZnJhbWVfY2hlY2soZnJhbWUpOwo+ICsJaWYgKFdBUk5fT04ocmV0KSkKPiArCQly ZXR1cm4gZmFsc2U7Cj4gKwo+ICsJcmV0dXJuIHRydWU7Cj4gIH0KPiAgCj4gLXN0YXRpYyB2b2lk IGludGVsX2hkbWlfc2V0X3NwZF9pbmZvZnJhbWUoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29k ZXIsCj4gLQkJCQkJIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQo+ ICtzdGF0aWMgYm9vbAo+ICtpbnRlbF9oZG1pX2NvbXB1dGVfc3BkX2luZm9mcmFtZShzdHJ1Y3Qg aW50ZWxfZW5jb2RlciAqZW5jb2RlciwKPiArCQkJCSBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAq Y3J0Y19zdGF0ZSwKPiArCQkJCSBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0 ZSkKPiAgewo+IC0JdW5pb24gaGRtaV9pbmZvZnJhbWUgZnJhbWU7Cj4gKwlzdHJ1Y3QgaGRtaV9z cGRfaW5mb2ZyYW1lICpmcmFtZSA9ICZjcnRjX3N0YXRlLT5pbmZvZnJhbWVzLnNwZC5zcGQ7Cj4g IAlpbnQgcmV0Owo+ICAKPiAtCXJldCA9IGhkbWlfc3BkX2luZm9mcmFtZV9pbml0KCZmcmFtZS5z cGQsICJJbnRlbCIsICJJbnRlZ3JhdGVkIGdmeCIpOwo+IC0JaWYgKHJldCA8IDApIHsKPiAtCQlE Uk1fRVJST1IoImNvdWxkbid0IGZpbGwgU1BEIGluZm9mcmFtZVxuIik7Cj4gLQkJcmV0dXJuOwo+ IC0JfQo+ICsJaWYgKCFjcnRjX3N0YXRlLT5oYXNfaW5mb2ZyYW1lKQo+ICsJCXJldHVybiB0cnVl Owo+ICAKPiAtCWZyYW1lLnNwZC5zZGkgPSBIRE1JX1NQRF9TRElfUEM7Cj4gKwljcnRjX3N0YXRl LT5pbmZvZnJhbWVzLmVuYWJsZSB8PQo+ICsJCWludGVsX2hkbWlfaW5mb2ZyYW1lX2VuYWJsZShI RE1JX0lORk9GUkFNRV9UWVBFX1NQRCk7Cj4gIAo+IC0JaW50ZWxfd3JpdGVfaW5mb2ZyYW1lKGVu Y29kZXIsIGNydGNfc3RhdGUsCj4gLQkJCSAgICAgICZmcmFtZSk7Cj4gKwlyZXQgPSBoZG1pX3Nw ZF9pbmZvZnJhbWVfaW5pdChmcmFtZSwgIkludGVsIiwgIkludGVncmF0ZWQgZ2Z4Iik7Cj4gKwlp ZiAoV0FSTl9PTihyZXQpKQo+ICsJCXJldHVybiBmYWxzZTsKPiArCj4gKwlmcmFtZS0+c2RpID0g SERNSV9TUERfU0RJX1BDOwo+ICsKPiArCXJldCA9IGhkbWlfc3BkX2luZm9mcmFtZV9jaGVjayhm cmFtZSk7Cj4gKwlpZiAoV0FSTl9PTihyZXQpKQo+ICsJCXJldHVybiBmYWxzZTsKPiArCj4gKwly ZXR1cm4gdHJ1ZTsKPiAgfQo+ICAKPiAtc3RhdGljIHZvaWQKPiAtaW50ZWxfaGRtaV9zZXRfaGRt aV9pbmZvZnJhbWUoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCj4gLQkJCSAgICAgIGNv bnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+IC0JCQkgICAgICBjb25z dCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSkKPiAtewo+IC0JdW5pb24g aGRtaV9pbmZvZnJhbWUgZnJhbWU7Cj4gK3N0YXRpYyBib29sCj4gK2ludGVsX2hkbWlfY29tcHV0 ZV9oZG1pX2luZm9mcmFtZShzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKPiArCQkJCSAg c3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCj4gKwkJCQkgIHN0cnVjdCBkcm1f Y29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgaGRtaV92ZW5kb3Jf aW5mb2ZyYW1lICpmcmFtZSA9Cj4gKwkJJmNydGNfc3RhdGUtPmluZm9mcmFtZXMuaGRtaS52ZW5k b3IuaGRtaTsKPiArCWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9pbmZvICppbmZvID0KPiArCQkm Y29ubl9zdGF0ZS0+Y29ubmVjdG9yLT5kaXNwbGF5X2luZm87Cj4gIAlpbnQgcmV0Owo+ICAKPiAt CXJldCA9IGRybV9oZG1pX3ZlbmRvcl9pbmZvZnJhbWVfZnJvbV9kaXNwbGF5X21vZGUoJmZyYW1l LnZlbmRvci5oZG1pLAo+ICsJaWYgKCFjcnRjX3N0YXRlLT5oYXNfaW5mb2ZyYW1lIHx8ICFpbmZv LT5oYXNfaGRtaV9pbmZvZnJhbWUpCj4gKwkJcmV0dXJuIHRydWU7Cj4gKwo+ICsJY3J0Y19zdGF0 ZS0+aW5mb2ZyYW1lcy5lbmFibGUgfD0KPiArCQlpbnRlbF9oZG1pX2luZm9mcmFtZV9lbmFibGUo SERNSV9JTkZPRlJBTUVfVFlQRV9WRU5ET1IpOwo+ICsKPiArCXJldCA9IGRybV9oZG1pX3ZlbmRv cl9pbmZvZnJhbWVfZnJvbV9kaXNwbGF5X21vZGUoZnJhbWUsCj4gIAkJCQkJCQkgIGNvbm5fc3Rh dGUtPmNvbm5lY3RvciwKPiAgCQkJCQkJCSAgJmNydGNfc3RhdGUtPmJhc2UuYWRqdXN0ZWRfbW9k ZSk7Cj4gLQlpZiAocmV0IDwgMCkKPiAtCQlyZXR1cm47Cj4gKwlpZiAoV0FSTl9PTihyZXQpKQo+ ICsJCXJldHVybiBmYWxzZTsKPiAgCj4gLQlpbnRlbF93cml0ZV9pbmZvZnJhbWUoZW5jb2Rlciwg Y3J0Y19zdGF0ZSwKPiAtCQkJICAgICAgJmZyYW1lKTsKPiArCXJldCA9IGhkbWlfdmVuZG9yX2lu Zm9mcmFtZV9jaGVjayhmcmFtZSk7Cj4gKwlpZiAoV0FSTl9PTihyZXQpKQo+ICsJCXJldHVybiBm YWxzZTsKPiArCj4gKwlyZXR1cm4gdHJ1ZTsKPiAgfQo+ICAKPiAgc3RhdGljIHZvaWQgZzR4X3Nl dF9pbmZvZnJhbWVzKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAo+IEBAIC02NDUsOSAr NjkxLDE1IEBAIHN0YXRpYyB2b2lkIGc0eF9zZXRfaW5mb2ZyYW1lcyhzdHJ1Y3QgaW50ZWxfZW5j b2RlciAqZW5jb2RlciwKPiAgCUk5MTVfV1JJVEUocmVnLCB2YWwpOwo+ICAJUE9TVElOR19SRUFE KHJlZyk7Cj4gIAo+IC0JaW50ZWxfaGRtaV9zZXRfYXZpX2luZm9mcmFtZShlbmNvZGVyLCBjcnRj X3N0YXRlLCBjb25uX3N0YXRlKTsKPiAtCWludGVsX2hkbWlfc2V0X3NwZF9pbmZvZnJhbWUoZW5j b2RlciwgY3J0Y19zdGF0ZSk7Cj4gLQlpbnRlbF9oZG1pX3NldF9oZG1pX2luZm9mcmFtZShlbmNv ZGVyLCBjcnRjX3N0YXRlLCBjb25uX3N0YXRlKTsKPiArCWludGVsX3dyaXRlX2luZm9mcmFtZShl bmNvZGVyLCBjcnRjX3N0YXRlLAo+ICsJCQkgICAgICBIRE1JX0lORk9GUkFNRV9UWVBFX0FWSSwK PiArCQkJICAgICAgJmNydGNfc3RhdGUtPmluZm9mcmFtZXMuYXZpKTsKPiArCWludGVsX3dyaXRl X2luZm9mcmFtZShlbmNvZGVyLCBjcnRjX3N0YXRlLAo+ICsJCQkgICAgICBIRE1JX0lORk9GUkFN RV9UWVBFX1NQRCwKPiArCQkJICAgICAgJmNydGNfc3RhdGUtPmluZm9mcmFtZXMuc3BkKTsKPiAr CWludGVsX3dyaXRlX2luZm9mcmFtZShlbmNvZGVyLCBjcnRjX3N0YXRlLAo+ICsJCQkgICAgICBI RE1JX0lORk9GUkFNRV9UWVBFX1ZFTkRPUiwKPiArCQkJICAgICAgJmNydGNfc3RhdGUtPmluZm9m cmFtZXMuaGRtaSk7Cj4gIH0KPiAgCj4gIHN0YXRpYyBib29sIGhkbWlfc2lua19pc19kZWVwX2Nv bG9yKGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRlKQo+IEBAIC03 MTMsNyArNzY1LDEwIEBAIHN0YXRpYyBib29sIGludGVsX2hkbWlfc2V0X2djcF9pbmZvZnJhbWUo c3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCj4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGVuY29kZXItPmJhc2UuZGV2KTsKPiAgCXN0cnVjdCBpbnRl bF9jcnRjICpjcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjX3N0YXRlLT5iYXNlLmNydGMpOwo+ICAJ aTkxNV9yZWdfdCByZWc7Cj4gLQl1MzIgdmFsID0gMDsKPiArCj4gKwlpZiAoKGNydGNfc3RhdGUt PmluZm9mcmFtZXMuZW5hYmxlICYKPiArCSAgICAgaW50ZWxfaGRtaV9pbmZvZnJhbWVfZW5hYmxl KEhETUlfUEFDS0VUX1RZUEVfR0VORVJBTF9DT05UUk9MKSkgPT0gMCkKPiArCQlyZXR1cm4gZmFs c2U7Cj4gIAo+ICAJaWYgKEhBU19EREkoZGV2X3ByaXYpKQo+ICAJCXJlZyA9IEhTV19UVklERU9f RElQX0dDUChjcnRjX3N0YXRlLT5jcHVfdHJhbnNjb2Rlcik7Cj4gQEAgLTcyNCwxOCArNzc5LDMx IEBAIHN0YXRpYyBib29sIGludGVsX2hkbWlfc2V0X2djcF9pbmZvZnJhbWUoc3RydWN0IGludGVs X2VuY29kZXIgKmVuY29kZXIsCj4gIAllbHNlCj4gIAkJcmV0dXJuIGZhbHNlOwo+ICAKPiArCUk5 MTVfV1JJVEUocmVnLCBjcnRjX3N0YXRlLT5pbmZvZnJhbWVzLmdjcCk7Cj4gKwo+ICsJcmV0dXJu IHRydWU7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGludGVsX2hkbWlfY29tcHV0ZV9nY3BfaW5m b2ZyYW1lKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAo+ICsJCQkJCSAgICAgc3RydWN0 IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCj4gKwkJCQkJICAgICBzdHJ1Y3QgZHJtX2Nv bm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gdG9faTkxNShlbmNvZGVyLT5iYXNlLmRldik7Cj4gKwo+ICsJaWYgKElT X0c0WChkZXZfcHJpdikgfHwgIWNydGNfc3RhdGUtPmhhc19pbmZvZnJhbWUpCj4gKwkJcmV0dXJu Owo+ICsKPiArCWNydGNfc3RhdGUtPmluZm9mcmFtZXMuZW5hYmxlIHw9Cj4gKwkJaW50ZWxfaGRt aV9pbmZvZnJhbWVfZW5hYmxlKEhETUlfUEFDS0VUX1RZUEVfR0VORVJBTF9DT05UUk9MKTsKPiAr Cj4gIAkvKiBJbmRpY2F0ZSBjb2xvciBkZXB0aCB3aGVuZXZlciB0aGUgc2luayBzdXBwb3J0cyBk ZWVwIGNvbG9yICovCj4gIAlpZiAoaGRtaV9zaW5rX2lzX2RlZXBfY29sb3IoY29ubl9zdGF0ZSkp Cj4gLQkJdmFsIHw9IEdDUF9DT0xPUl9JTkRJQ0FUSU9OOwo+ICsJCWNydGNfc3RhdGUtPmluZm9m cmFtZXMuZ2NwIHw9IEdDUF9DT0xPUl9JTkRJQ0FUSU9OOwo+ICAKPiAgCS8qIEVuYWJsZSBkZWZh dWx0X3BoYXNlIHdoZW5ldmVyIHRoZSBkaXNwbGF5IG1vZGUgaXMgc3VpdGFibHkgYWxpZ25lZCAq Lwo+ICAJaWYgKGdjcF9kZWZhdWx0X3BoYXNlX3Bvc3NpYmxlKGNydGNfc3RhdGUtPnBpcGVfYnBw LAo+ICAJCQkJICAgICAgICZjcnRjX3N0YXRlLT5iYXNlLmFkanVzdGVkX21vZGUpKQo+IC0JCXZh bCB8PSBHQ1BfREVGQVVMVF9QSEFTRV9FTkFCTEU7Cj4gLQo+IC0JSTkxNV9XUklURShyZWcsIHZh bCk7Cj4gLQo+IC0JcmV0dXJuIHZhbCAhPSAwOwo+ICsJCWNydGNfc3RhdGUtPmluZm9mcmFtZXMu Z2NwIHw9IEdDUF9ERUZBVUxUX1BIQVNFX0VOQUJMRTsKPiAgfQo+ICAKPiAgc3RhdGljIHZvaWQg aWJ4X3NldF9pbmZvZnJhbWVzKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAo+IEBAIC03 ODYsOSArODU0LDE1IEBAIHN0YXRpYyB2b2lkIGlieF9zZXRfaW5mb2ZyYW1lcyhzdHJ1Y3QgaW50 ZWxfZW5jb2RlciAqZW5jb2RlciwKPiAgCUk5MTVfV1JJVEUocmVnLCB2YWwpOwo+ICAJUE9TVElO R19SRUFEKHJlZyk7Cj4gIAo+IC0JaW50ZWxfaGRtaV9zZXRfYXZpX2luZm9mcmFtZShlbmNvZGVy LCBjcnRjX3N0YXRlLCBjb25uX3N0YXRlKTsKPiAtCWludGVsX2hkbWlfc2V0X3NwZF9pbmZvZnJh bWUoZW5jb2RlciwgY3J0Y19zdGF0ZSk7Cj4gLQlpbnRlbF9oZG1pX3NldF9oZG1pX2luZm9mcmFt ZShlbmNvZGVyLCBjcnRjX3N0YXRlLCBjb25uX3N0YXRlKTsKPiArCWludGVsX3dyaXRlX2luZm9m cmFtZShlbmNvZGVyLCBjcnRjX3N0YXRlLAo+ICsJCQkgICAgICBIRE1JX0lORk9GUkFNRV9UWVBF X0FWSSwKPiArCQkJICAgICAgJmNydGNfc3RhdGUtPmluZm9mcmFtZXMuYXZpKTsKPiArCWludGVs X3dyaXRlX2luZm9mcmFtZShlbmNvZGVyLCBjcnRjX3N0YXRlLAo+ICsJCQkgICAgICBIRE1JX0lO Rk9GUkFNRV9UWVBFX1NQRCwKPiArCQkJICAgICAgJmNydGNfc3RhdGUtPmluZm9mcmFtZXMuc3Bk KTsKPiArCWludGVsX3dyaXRlX2luZm9mcmFtZShlbmNvZGVyLCBjcnRjX3N0YXRlLAo+ICsJCQkg ICAgICBIRE1JX0lORk9GUkFNRV9UWVBFX1ZFTkRPUiwKPiArCQkJICAgICAgJmNydGNfc3RhdGUt PmluZm9mcmFtZXMuaGRtaSk7Cj4gIH0KPiAgCj4gIHN0YXRpYyB2b2lkIGNwdF9zZXRfaW5mb2Zy YW1lcyhzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKPiBAQCAtODI5LDkgKzkwMywxNSBA QCBzdGF0aWMgdm9pZCBjcHRfc2V0X2luZm9mcmFtZXMoc3RydWN0IGludGVsX2VuY29kZXIgKmVu Y29kZXIsCj4gIAlJOTE1X1dSSVRFKHJlZywgdmFsKTsKPiAgCVBPU1RJTkdfUkVBRChyZWcpOwo+ ICAKPiAtCWludGVsX2hkbWlfc2V0X2F2aV9pbmZvZnJhbWUoZW5jb2RlciwgY3J0Y19zdGF0ZSwg Y29ubl9zdGF0ZSk7Cj4gLQlpbnRlbF9oZG1pX3NldF9zcGRfaW5mb2ZyYW1lKGVuY29kZXIsIGNy dGNfc3RhdGUpOwo+IC0JaW50ZWxfaGRtaV9zZXRfaGRtaV9pbmZvZnJhbWUoZW5jb2RlciwgY3J0 Y19zdGF0ZSwgY29ubl9zdGF0ZSk7Cj4gKwlpbnRlbF93cml0ZV9pbmZvZnJhbWUoZW5jb2Rlciwg Y3J0Y19zdGF0ZSwKPiArCQkJICAgICAgSERNSV9JTkZPRlJBTUVfVFlQRV9BVkksCj4gKwkJCSAg ICAgICZjcnRjX3N0YXRlLT5pbmZvZnJhbWVzLmF2aSk7Cj4gKwlpbnRlbF93cml0ZV9pbmZvZnJh bWUoZW5jb2RlciwgY3J0Y19zdGF0ZSwKPiArCQkJICAgICAgSERNSV9JTkZPRlJBTUVfVFlQRV9T UEQsCj4gKwkJCSAgICAgICZjcnRjX3N0YXRlLT5pbmZvZnJhbWVzLnNwZCk7Cj4gKwlpbnRlbF93 cml0ZV9pbmZvZnJhbWUoZW5jb2RlciwgY3J0Y19zdGF0ZSwKPiArCQkJICAgICAgSERNSV9JTkZP RlJBTUVfVFlQRV9WRU5ET1IsCj4gKwkJCSAgICAgICZjcnRjX3N0YXRlLT5pbmZvZnJhbWVzLmhk bWkpOwo+ICB9Cj4gIAo+ICBzdGF0aWMgdm9pZCB2bHZfc2V0X2luZm9mcmFtZXMoc3RydWN0IGlu dGVsX2VuY29kZXIgKmVuY29kZXIsCj4gQEAgLTg4MSw5ICs5NjEsMTUgQEAgc3RhdGljIHZvaWQg dmx2X3NldF9pbmZvZnJhbWVzKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAo+ICAJSTkx NV9XUklURShyZWcsIHZhbCk7Cj4gIAlQT1NUSU5HX1JFQUQocmVnKTsKPiAgCj4gLQlpbnRlbF9o ZG1pX3NldF9hdmlfaW5mb2ZyYW1lKGVuY29kZXIsIGNydGNfc3RhdGUsIGNvbm5fc3RhdGUpOwo+ IC0JaW50ZWxfaGRtaV9zZXRfc3BkX2luZm9mcmFtZShlbmNvZGVyLCBjcnRjX3N0YXRlKTsKPiAt CWludGVsX2hkbWlfc2V0X2hkbWlfaW5mb2ZyYW1lKGVuY29kZXIsIGNydGNfc3RhdGUsIGNvbm5f c3RhdGUpOwo+ICsJaW50ZWxfd3JpdGVfaW5mb2ZyYW1lKGVuY29kZXIsIGNydGNfc3RhdGUsCj4g KwkJCSAgICAgIEhETUlfSU5GT0ZSQU1FX1RZUEVfQVZJLAo+ICsJCQkgICAgICAmY3J0Y19zdGF0 ZS0+aW5mb2ZyYW1lcy5hdmkpOwo+ICsJaW50ZWxfd3JpdGVfaW5mb2ZyYW1lKGVuY29kZXIsIGNy dGNfc3RhdGUsCj4gKwkJCSAgICAgIEhETUlfSU5GT0ZSQU1FX1RZUEVfU1BELAo+ICsJCQkgICAg ICAmY3J0Y19zdGF0ZS0+aW5mb2ZyYW1lcy5zcGQpOwo+ICsJaW50ZWxfd3JpdGVfaW5mb2ZyYW1l KGVuY29kZXIsIGNydGNfc3RhdGUsCj4gKwkJCSAgICAgIEhETUlfSU5GT0ZSQU1FX1RZUEVfVkVO RE9SLAo+ICsJCQkgICAgICAmY3J0Y19zdGF0ZS0+aW5mb2ZyYW1lcy5oZG1pKTsKPiAgfQo+ICAK PiAgc3RhdGljIHZvaWQgaHN3X3NldF9pbmZvZnJhbWVzKHN0cnVjdCBpbnRlbF9lbmNvZGVyICpl bmNvZGVyLAo+IEBAIC05MTQsOSArMTAwMCwxNSBAQCBzdGF0aWMgdm9pZCBoc3dfc2V0X2luZm9m cmFtZXMoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCj4gIAlJOTE1X1dSSVRFKHJlZywg dmFsKTsKPiAgCVBPU1RJTkdfUkVBRChyZWcpOwo+ICAKPiAtCWludGVsX2hkbWlfc2V0X2F2aV9p bmZvZnJhbWUoZW5jb2RlciwgY3J0Y19zdGF0ZSwgY29ubl9zdGF0ZSk7Cj4gLQlpbnRlbF9oZG1p X3NldF9zcGRfaW5mb2ZyYW1lKGVuY29kZXIsIGNydGNfc3RhdGUpOwo+IC0JaW50ZWxfaGRtaV9z ZXRfaGRtaV9pbmZvZnJhbWUoZW5jb2RlciwgY3J0Y19zdGF0ZSwgY29ubl9zdGF0ZSk7Cj4gKwlp bnRlbF93cml0ZV9pbmZvZnJhbWUoZW5jb2RlciwgY3J0Y19zdGF0ZSwKPiArCQkJICAgICAgSERN SV9JTkZPRlJBTUVfVFlQRV9BVkksCj4gKwkJCSAgICAgICZjcnRjX3N0YXRlLT5pbmZvZnJhbWVz LmF2aSk7Cj4gKwlpbnRlbF93cml0ZV9pbmZvZnJhbWUoZW5jb2RlciwgY3J0Y19zdGF0ZSwKPiAr CQkJICAgICAgSERNSV9JTkZPRlJBTUVfVFlQRV9TUEQsCj4gKwkJCSAgICAgICZjcnRjX3N0YXRl LT5pbmZvZnJhbWVzLnNwZCk7Cj4gKwlpbnRlbF93cml0ZV9pbmZvZnJhbWUoZW5jb2RlciwgY3J0 Y19zdGF0ZSwKPiArCQkJICAgICAgSERNSV9JTkZPRlJBTUVfVFlQRV9WRU5ET1IsCj4gKwkJCSAg ICAgICZjcnRjX3N0YXRlLT5pbmZvZnJhbWVzLmhkbWkpOwo+ICB9Cj4gIAo+ICB2b2lkIGludGVs X2RwX2R1YWxfbW9kZV9zZXRfdG1kc19vdXRwdXQoc3RydWN0IGludGVsX2hkbWkgKmhkbWksIGJv b2wgZW5hYmxlKQo+IEBAIC0xODUxLDYgKzE5NDMsMjcgQEAgYm9vbCBpbnRlbF9oZG1pX2NvbXB1 dGVfY29uZmlnKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAo+ICAJCX0KPiAgCX0KPiAg Cj4gKwlpZiAocGlwZV9jb25maWctPmhhc19oZG1pX3NpbmspCj4gKwkJcGlwZV9jb25maWctPmlu Zm9mcmFtZXMuZW5hYmxlIHw9Cj4gKwkJCWludGVsX2hkbWlfaW5mb2ZyYW1lX2VuYWJsZShIRE1J X1BBQ0tFVF9UWVBFX05VTEwpOwo+ICsKPiArCWludGVsX2hkbWlfY29tcHV0ZV9nY3BfaW5mb2Zy YW1lKGVuY29kZXIsIHBpcGVfY29uZmlnLCBjb25uX3N0YXRlKTsKPiArCj4gKwlpZiAoIWludGVs X2hkbWlfY29tcHV0ZV9hdmlfaW5mb2ZyYW1lKGVuY29kZXIsIHBpcGVfY29uZmlnLCBjb25uX3N0 YXRlKSkgewo+ICsJCURSTV9ERUJVR19LTVMoImJhZCBBVkkgaW5mb2ZyYW1lXG4iKTsKPiArCQly ZXR1cm4gZmFsc2U7Cj4gKwl9Cj4gKwo+ICsJaWYgKCFpbnRlbF9oZG1pX2NvbXB1dGVfc3BkX2lu Zm9mcmFtZShlbmNvZGVyLCBwaXBlX2NvbmZpZywgY29ubl9zdGF0ZSkpIHsKPiArCQlEUk1fREVC VUdfS01TKCJiYWQgU1BEIGluZm9mcmFtZVxuIik7Cj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsJfQo+ ICsKPiArCWlmICghaW50ZWxfaGRtaV9jb21wdXRlX2hkbWlfaW5mb2ZyYW1lKGVuY29kZXIsIHBp cGVfY29uZmlnLCBjb25uX3N0YXRlKSkgewo+ICsJCURSTV9ERUJVR19LTVMoImJhZCBIRE1JIGlu Zm9mcmFtZVxuIik7Cj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsJfQo+ICsKPiAgCXJldHVybiB0cnVl Owo+ICB9Cj4gIAo+IC0tIAo+IDIuMTYuNAo+IAo+IF9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCj4gSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdAo+IEludGVsLWdm eEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAoKLS0gCkRhbmllbCBWZXR0ZXIKU29mdHdhcmUgRW5n aW5lZXIsIEludGVsIENvcnBvcmF0aW9uCmh0dHA6Ly9ibG9nLmZmd2xsLmNoCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxp c3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=