From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mika Kuoppala Subject: Re: [PATCH] drm/i915: Look for an active kernel context before switching Date: Thu, 24 May 2018 17:40:47 +0300 Message-ID: <87po1l86c0.fsf@gaia.fi.intel.com> References: <20180524081135.15278-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9D4316E65F for ; Thu, 24 May 2018 14:41:01 +0000 (UTC) In-Reply-To: <20180524081135.15278-1-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Q2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+IHdyaXRlczoKCj4gV2Ugd2Vy ZSBub3QgdmVyeSBjYXJlZnVsbHkgY2hlY2tpbmcgdG8gc2VlIGlmIGFuIG9sZGVyIHJlcXVlc3Qg b24gdGhlCj4gZW5naW5lIHdhcyBhbiBlYXJsaWVyIHN3aXRjaC10by1rZXJuZWwtY29udGV4dCBi ZWZvcmUgZGVjaWRpbmcgdG8gZW1pdCBhCj4gbmV3IHN3aXRjaC4gVGhlIGVuZCByZXN1bHQgd291 bGQgYmUgdGhhdCB3ZSBjb3VsZCBnZXQgaW50byBhIHBlcm1hbmVudAo+IGxvb3Agb2YgdHJ5aW5n IHRvIGVtaXQgYSBuZXcgcmVxdWVzdCB0byBwZXJmb3JtIHRoZSBzd2l0Y2ggc2ltcGx5IHRvCj4g Zmx1c2ggdGhlIGV4aXN0aW5nIHN3aXRjaC4KPgo+IFdoYXQgd2UgbmVlZCBpcyBhIG1lYW5zIG9m IHRyYWNraW5nIHRoZSBjb21wbGV0aW9uIG9mIGVhY2ggdGltZWxpbmUKPiB2ZXJzdXMgdGhlIGtl cm5lbCBjb250ZXh0LCB0aGF0IGlzIHRvIGRldGVjdCBpZiBhIG1vcmUgcmVjZW50IHJlcXVlc3QK PiBoYXMgYmVlbiBzdWJtaXR0ZWQgdGhhdCB3b3VsZCByZXN1bHQgaW4gYSBzd2l0Y2ggYXdheSBm cm9tIHRoZSBrZXJuZWwKPiBjb250ZXh0LiBUbyByZWFsaXNlIHRoaXMsIHdlIG5lZWQgb25seSB0 byBsb29rIGluIG91ciBzeW5jbWFwIG9uIHRoZQo+IGtlcm5lbCBjb250ZXh0IGFuZCBjaGVjayB0 aGF0IHdlIGhhdmUgc3luY2hyb25pemVkIGFnYWluc3QgYWxsIGFjdGl2ZQo+IHJpbmdzLgo+Cj4g djI6IFNpbmNlIGFsbCByaW5nYnVmZmVyIGNsaWVudHMgY3VycmVudGx5IHNoYXJlIHRoZSBzYW1l IHRpbWVsaW5lLCB3ZSBkbwo+IGhhdmUgdG8gdXNlIHRoZSBnZW1fY29udGV4dCB0byBkaXN0aW5n dWlzaCBjbGllbnRzLgo+Cj4gQXMgYSBib251cywgaW5jbHVkZSBhbGwgdGhlIHRyYWNpbmcgdXNl ZCB0byBkZWJ1ZyB0aGUgZGVhdGggaW5zaWRlCj4gc3VzcGVuZC4KPgo+IHYzOiBUZXN0LCB0ZXN0 LCB0ZXN0LiBDb25zdHJ1Y3QgYSBzZWxmdGVzdCB0byBleGVyY2lzZSBhbmQgYXNzZXJ0IHRoZQo+ IGV4cGVjdGVkIGJlaGF2aW91ciB0aGF0IG11bHRpcGxlIHN3aXRjaC10by1jb250ZXh0cyBkbyBu b3QgZW1pdAo+IHJlZHVuZGFudCByZXF1ZXN0cy4KPgo+IFJlcG9ydGVkLWJ5OiBNaWthIEt1b3Bw YWxhIDxtaWthLmt1b3BwYWxhQGludGVsLmNvbT4KPiBGaXhlczogYTg5ZDFmOTIxYzE1ICgiZHJt L2k5MTU6IFNwbGl0IGk5MTVfZ2VtX3RpbWVsaW5lIGludG8gaW5kaXZpZHVhbCB0aW1lbGluZXMi KQo+IFNpZ25lZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVr Pgo+IENjOiBNaWthIEt1b3BwYWxhIDxtaWthLmt1b3BwYWxhQGludGVsLmNvbT4KPiAtLS0KPiAg ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyAgICAgICAgICAgICAgIHwgICA3ICsKPiAg ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uaCAgICAgICAgICAgICAgIHwgICAzICsKPiAg ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jICAgICAgIHwgIDg2ICsrKysr KysrKy0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVxdWVzdC5jICAgICAgICAgICB8 ICAgNSArLQo+ICAuLi4vZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9jb250ZXh0LmMg fCAxNDQgKysrKysrKysrKysrKysrKysrCj4gIC4uLi9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9t b2NrX3NlbGZ0ZXN0cy5oICB8ICAgMSArCj4gIDYgZmlsZXMgY2hhbmdlZCwgMjMxIGluc2VydGlv bnMoKyksIDE1IGRlbGV0aW9ucygtKQo+Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCj4gaW5kZXgg MDM4NzRiNTBhZGE5Li4wNWY0NGNhMzVhMDYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW0uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMK PiBAQCAtMzcwMyw2ICszNzAzLDkgQEAgc3RhdGljIGludCB3YWl0X2Zvcl9lbmdpbmVzKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICppOTE1KQo+ICAKPiAgaW50IGk5MTVfZ2VtX3dhaXRfZm9yX2lk bGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsIHVuc2lnbmVkIGludCBmbGFncykKPiAg ewo+ICsJR0VNX1RSQUNFKCJmbGFncz0leCAoJXMpXG4iLAo+ICsJCSAgZmxhZ3MsIGZsYWdzICYg STkxNV9XQUlUX0xPQ0tFRCA/ICJsb2NrZWQiIDogInVubG9ja2VkIik7Cj4gKwo+ICAJLyogSWYg dGhlIGRldmljZSBpcyBhc2xlZXAsIHdlIGhhdmUgbm8gcmVxdWVzdHMgb3V0c3RhbmRpbmcgKi8K PiAgCWlmICghUkVBRF9PTkNFKGk5MTUtPmd0LmF3YWtlKSkKPiAgCQlyZXR1cm4gMDsKPiBAQCAt MzcxOSw2ICszNzIyLDcgQEAgaW50IGk5MTVfZ2VtX3dhaXRfZm9yX2lkbGUoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmk5MTUsIHVuc2lnbmVkIGludCBmbGFncykKPiAgCQkJCXJldHVybiBlcnI7 Cj4gIAkJfQo+ICAJCWk5MTVfcmV0aXJlX3JlcXVlc3RzKGk5MTUpOwo+ICsJCUdFTV9CVUdfT04o aTkxNS0+Z3QuYWN0aXZlX3JlcXVlc3RzKTsKPiAgCj4gIAkJcmV0dXJuIHdhaXRfZm9yX2VuZ2lu ZXMoaTkxNSk7Cj4gIAl9IGVsc2Ugewo+IEBAIC00OTAxLDYgKzQ5MDUsNyBAQCBzdGF0aWMgdm9p ZCBhc3NlcnRfa2VybmVsX2NvbnRleHRfaXNfY3VycmVudChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqaTkxNSkKPiAgCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKPiAgCWVudW0gaW50 ZWxfZW5naW5lX2lkIGlkOwo+ICAKPiArCUdFTV9CVUdfT04oaTkxNS0+Z3QuYWN0aXZlX3JlcXVl c3RzKTsKPiAgCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGk5MTUsIGlkKSB7Cj4gIAkJR0VNX0JV R19PTihfX2k5MTVfZ2VtX2FjdGl2ZV9wZWVrKCZlbmdpbmUtPnRpbWVsaW5lLmxhc3RfcmVxdWVz dCkpOwo+ICAJCUdFTV9CVUdfT04oZW5naW5lLT5sYXN0X3JldGlyZWRfY29udGV4dC0+Z2VtX2Nv bnRleHQgIT0ga2N0eCk7Cj4gQEAgLTQ5MzIsNiArNDkzNyw4IEBAIGludCBpOTE1X2dlbV9zdXNw ZW5kKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAgCXN0cnVjdCBkcm1fZGV2 aWNlICpkZXYgPSAmZGV2X3ByaXYtPmRybTsKPiAgCWludCByZXQ7Cj4gIAo+ICsJR0VNX1RSQUNF KCJcbiIpOwo+ICsKPiAgCWludGVsX3J1bnRpbWVfcG1fZ2V0KGRldl9wcml2KTsKPiAgCWludGVs X3N1c3BlbmRfZ3RfcG93ZXJzYXZlKGRldl9wcml2KTsKPiAgCj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dl bS5oCj4gaW5kZXggNWJmMjRjZmMyMThjLi42MmVlNGUzODUzNjUgMTAwNjQ0Cj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZ2VtLmgKPiBAQCAtNjMsOSArNjMsMTIgQEAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGU7 Cj4gICNpZiBJU19FTkFCTEVEKENPTkZJR19EUk1fSTkxNV9UUkFDRV9HRU0pCj4gICNkZWZpbmUg R0VNX1RSQUNFKC4uLikgdHJhY2VfcHJpbnRrKF9fVkFfQVJHU19fKQo+ICAjZGVmaW5lIEdFTV9U UkFDRV9EVU1QKCkgZnRyYWNlX2R1bXAoRFVNUF9BTEwpCj4gKyNkZWZpbmUgR0VNX1RSQUNFX0RV TVBfT04oZXhwcikgXAo+ICsJZG8geyBpZiAoZXhwcikgZnRyYWNlX2R1bXAoRFVNUF9BTEwpOyB9 IHdoaWxlICgwKQo+ICAjZWxzZQo+ICAjZGVmaW5lIEdFTV9UUkFDRSguLi4pIGRvIHsgfSB3aGls ZSAoMCkKPiAgI2RlZmluZSBHRU1fVFJBQ0VfRFVNUCgpIGRvIHsgfSB3aGlsZSAoMCkKPiArI2Rl ZmluZSBHRU1fVFJBQ0VfRFVNUF9PTihleHByKSBCVUlMRF9CVUdfT05fSU5WQUxJRChleHByKQo+ ICAjZW5kaWYKPiAgCj4gICNkZWZpbmUgSTkxNV9OVU1fRU5HSU5FUyA4Cj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuYwo+IGluZGV4IGI2OWIxOGVmODEyMC4uNDUzOTNmNmUw MjA4IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQu Ywo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuYwo+IEBAIC01 NzYsMzAgKzU3Niw3MiBAQCBsYXN0X3JlcXVlc3Rfb25fZW5naW5lKHN0cnVjdCBpOTE1X3RpbWVs aW5lICp0aW1lbGluZSwKPiAgewo+ICAJc3RydWN0IGk5MTVfcmVxdWVzdCAqcnE7Cj4gIAo+IC0J aWYgKHRpbWVsaW5lID09ICZlbmdpbmUtPnRpbWVsaW5lKQo+IC0JCXJldHVybiBOVUxMOwo+ICsJ R0VNX0JVR19PTih0aW1lbGluZSA9PSAmZW5naW5lLT50aW1lbGluZSk7Cj4gIAo+ICAJcnEgPSBp OTE1X2dlbV9hY3RpdmVfcmF3KCZ0aW1lbGluZS0+bGFzdF9yZXF1ZXN0LAo+ICAJCQkJICZlbmdp bmUtPmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+IC0JaWYgKHJxICYmIHJxLT5lbmdpbmUgPT0g ZW5naW5lKQo+ICsJaWYgKHJxICYmIHJxLT5lbmdpbmUgPT0gZW5naW5lKSB7Cj4gKwkJR0VNX1RS QUNFKCJsYXN0IHJlcXVlc3QgZm9yICVzIG9uIGVuZ2luZSAlczogJWxseDolZFxuIiwKPiArCQkJ ICB0aW1lbGluZS0+bmFtZSwgZW5naW5lLT5uYW1lLAo+ICsJCQkgIHJxLT5mZW5jZS5jb250ZXh0 LCBycS0+ZmVuY2Uuc2Vxbm8pOwo+ICsJCUdFTV9CVUdfT04ocnEtPnRpbWVsaW5lICE9IHRpbWVs aW5lKTsKPiAgCQlyZXR1cm4gcnE7Cj4gKwl9Cj4gIAo+ICAJcmV0dXJuIE5VTEw7Cj4gIH0KPiAg Cj4gLXN0YXRpYyBib29sIGVuZ2luZV9oYXNfaWRsZV9rZXJuZWxfY29udGV4dChzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gK3N0YXRpYyBib29sIGVuZ2luZV9oYXNfa2VybmVsX2Nv bnRleHRfYmFycmllcihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gIHsKPiAtCXN0 cnVjdCBsaXN0X2hlYWQgKiBjb25zdCBhY3RpdmVfcmluZ3MgPSAmZW5naW5lLT5pOTE1LT5ndC5h Y3RpdmVfcmluZ3M7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGVuZ2luZS0+ aTkxNTsKPiArCWNvbnN0IHN0cnVjdCBpbnRlbF9jb250ZXh0ICogY29uc3QgY2UgPQo+ICsJCXRv X2ludGVsX2NvbnRleHQoaTkxNS0+a2VybmVsX2NvbnRleHQsIGVuZ2luZSk7Cj4gKwlzdHJ1Y3Qg aTkxNV90aW1lbGluZSAqYmFycmllciA9IGNlLT5yaW5nLT50aW1lbGluZTsKPiAgCXN0cnVjdCBp bnRlbF9yaW5nICpyaW5nOwo+ICsJYm9vbCBhbnlfYWN0aXZlID0gZmFsc2U7Cj4gIAo+IC0JbG9j a2RlcF9hc3NlcnRfaGVsZCgmZW5naW5lLT5pOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiArCWxv Y2tkZXBfYXNzZXJ0X2hlbGQoJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICsJbGlzdF9mb3Jf ZWFjaF9lbnRyeShyaW5nLCAmaTkxNS0+Z3QuYWN0aXZlX3JpbmdzLCBhY3RpdmVfbGluaykgewo+ ICsJCXN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxOwo+ICsKPiArCQlycSA9IGxhc3RfcmVxdWVzdF9v bl9lbmdpbmUocmluZy0+dGltZWxpbmUsIGVuZ2luZSk7Cj4gKwkJaWYgKCFycSkKPiArCQkJY29u dGludWU7Cj4gIAo+IC0JbGlzdF9mb3JfZWFjaF9lbnRyeShyaW5nLCBhY3RpdmVfcmluZ3MsIGFj dGl2ZV9saW5rKSB7Cj4gLQkJaWYgKGxhc3RfcmVxdWVzdF9vbl9lbmdpbmUocmluZy0+dGltZWxp bmUsIGVuZ2luZSkpCj4gKwkJYW55X2FjdGl2ZSA9IHRydWU7Cj4gKwo+ICsJCWlmIChycS0+Z2Vt X2NvbnRleHQgPT0gaTkxNS0+a2VybmVsX2NvbnRleHQpCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiAr CQkvKgo+ICsJCSAqIFdhcyB0aGlzIHJlcXVlc3Qgc3VibWl0dGVkIGFmdGVyIHRoZSBwcmV2aW91 cwo+ICsJCSAqIHN3aXRjaC10by1rZXJuZWwtY29udGV4dD8KPiArCQkgKi8KPiArCQlpZiAoIWk5 MTVfdGltZWxpbmVfc3luY19pc19sYXRlcihiYXJyaWVyLCAmcnEtPmZlbmNlKSkgewo+ICsJCQlH RU1fVFJBQ0UoIiVzIG5lZWRzIGJhcnJpZXIgZm9yICVsbHg6JWRcbiIsCj4gKwkJCQkgIHJpbmct PnRpbWVsaW5lLT5uYW1lLAo+ICsJCQkJICBycS0+ZmVuY2UuY29udGV4dCwKPiArCQkJCSAgcnEt PmZlbmNlLnNlcW5vKTsKPiAgCQkJcmV0dXJuIGZhbHNlOwo+ICsJCX0KPiArCj4gKwkJR0VNX1RS QUNFKCIlcyBoYXMgYmFycmllciBhZnRlciAlbGx4OiVkXG4iLAo+ICsJCQkgIHJpbmctPnRpbWVs aW5lLT5uYW1lLAo+ICsJCQkgIHJxLT5mZW5jZS5jb250ZXh0LAo+ICsJCQkgIHJxLT5mZW5jZS5z ZXFubyk7Cj4gIAl9Cj4gIAo+IC0JcmV0dXJuIGludGVsX2VuZ2luZV9oYXNfa2VybmVsX2NvbnRl eHQoZW5naW5lKTsKPiArCS8qCj4gKwkgKiBJZiBhbnkgb3RoZXIgdGltZWxpbmUgd2FzIHN0aWxs IGFjdGl2ZSBhbmQgYmVoaW5kIHRoZSBsYXN0IGJhcnJpZXIsCj4gKwkgKiB0aGVuIG91ciBsYXN0 IHN3aXRjaC10by1rZXJuZWwtY29udGV4dCBtdXN0IHN0aWxsIGJlIHF1ZXVlZCBhbmQKPiArCSAq IHdpbGwgcnVuIGxhc3QgKGxlYXZpbmcgdGhlIGVuZ2luZSBpbiB0aGUga2VybmVsIGNvbnRleHQg d2hlbiBpdAo+ICsJICogZXZlbnR1YWxseSBpZGxlcykuCj4gKwkgKi8KPiArCWlmIChhbnlfYWN0 aXZlKQo+ICsJCXJldHVybiB0cnVlOwo+ICsKPiArCS8qIFRoZSBlbmdpbmUgaXMgaWRsZTsgY2hl Y2sgdGhhdCBpdCBpcyBpZGxpbmcgaW4gdGhlIGtlcm5lbCBjb250ZXh0LiAqLwo+ICsJcmV0dXJu IGVuZ2luZS0+bGFzdF9yZXRpcmVkX2NvbnRleHQgPT0gY2U7Cj4gIH0KPiAgCj4gIGludCBpOTE1 X2dlbV9zd2l0Y2hfdG9fa2VybmVsX2NvbnRleHQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5 MTUpCj4gQEAgLTYwNyw3ICs2NDksMTAgQEAgaW50IGk5MTVfZ2VtX3N3aXRjaF90b19rZXJuZWxf Y29udGV4dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPiAgCXN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKmVuZ2luZTsKPiAgCWVudW0gaW50ZWxfZW5naW5lX2lkIGlkOwo+ICAKPiArCUdF TV9UUkFDRSgiXG4iKTsKPiArCj4gIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZpOTE1LT5kcm0uc3Ry dWN0X211dGV4KTsKPiArCUdFTV9CVUdfT04oIWk5MTUtPmtlcm5lbF9jb250ZXh0KTsKPiAgCj4g IAlpOTE1X3JldGlyZV9yZXF1ZXN0cyhpOTE1KTsKPiAgCj4gQEAgLTYxNSw5ICs2NjAsMTIgQEAg aW50IGk5MTVfZ2VtX3N3aXRjaF90b19rZXJuZWxfY29udGV4dChzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqaTkxNSkKPiAgCQlzdHJ1Y3QgaW50ZWxfcmluZyAqcmluZzsKPiAgCQlzdHJ1Y3QgaTkx NV9yZXF1ZXN0ICpycTsKPiAgCj4gLQkJaWYgKGVuZ2luZV9oYXNfaWRsZV9rZXJuZWxfY29udGV4 dChlbmdpbmUpKQo+ICsJCUdFTV9CVUdfT04oIXRvX2ludGVsX2NvbnRleHQoaTkxNS0+a2VybmVs X2NvbnRleHQsIGVuZ2luZSkpOwo+ICsJCWlmIChlbmdpbmVfaGFzX2tlcm5lbF9jb250ZXh0X2Jh cnJpZXIoZW5naW5lKSkKPiAgCQkJY29udGludWU7Cj4gIAo+ICsJCUdFTV9UUkFDRSgiZW1pdCBi YXJyaWVyIG9uICVzXG4iLCBlbmdpbmUtPm5hbWUpOwo+ICsKPiAgCQlycSA9IGk5MTVfcmVxdWVz dF9hbGxvYyhlbmdpbmUsIGk5MTUtPmtlcm5lbF9jb250ZXh0KTsKPiAgCQlpZiAoSVNfRVJSKHJx KSkKPiAgCQkJcmV0dXJuIFBUUl9FUlIocnEpOwo+IEBAIC02MjcsMTAgKzY3NSwyMCBAQCBpbnQg aTkxNV9nZW1fc3dpdGNoX3RvX2tlcm5lbF9jb250ZXh0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICppOTE1KQo+ICAJCQlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpwcmV2Owo+ICAKPiAgCQkJcHJldiA9 IGxhc3RfcmVxdWVzdF9vbl9lbmdpbmUocmluZy0+dGltZWxpbmUsIGVuZ2luZSk7Cj4gLQkJCWlm IChwcmV2KQo+IC0JCQkJaTkxNV9zd19mZW5jZV9hd2FpdF9zd19mZW5jZV9nZnAoJnJxLT5zdWJt aXQsCj4gLQkJCQkJCQkJICZwcmV2LT5zdWJtaXQsCj4gLQkJCQkJCQkJIEk5MTVfRkVOQ0VfR0ZQ KTsKPiArCQkJaWYgKCFwcmV2KQo+ICsJCQkJY29udGludWU7Cj4gKwo+ICsJCQlpZiAocHJldi0+ Z2VtX2NvbnRleHQgPT0gaTkxNS0+a2VybmVsX2NvbnRleHQpCj4gKwkJCQljb250aW51ZTsKPiAr Cj4gKwkJCUdFTV9UUkFDRSgiYWRkIGJhcnJpZXIgb24gJXMgZm9yICVsbHg6JWRcbiIsCj4gKwkJ CQkgIGVuZ2luZS0+bmFtZSwKPiArCQkJCSAgcHJldi0+ZmVuY2UuY29udGV4dCwKPiArCQkJCSAg cHJldi0+ZmVuY2Uuc2Vxbm8pOwo+ICsJCQlpOTE1X3N3X2ZlbmNlX2F3YWl0X3N3X2ZlbmNlX2dm cCgmcnEtPnN1Ym1pdCwKPiArCQkJCQkJCSAmcHJldi0+c3VibWl0LAo+ICsJCQkJCQkJIEk5MTVf RkVOQ0VfR0ZQKTsKPiArCQkJaTkxNV90aW1lbGluZV9zeW5jX3NldChycS0+dGltZWxpbmUsICZw cmV2LT5mZW5jZSk7Cj4gIAkJfQo+ICAKPiAgCQkvKgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X3JlcXVlc3QuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVx dWVzdC5jCj4gaW5kZXggZmM0OTliY2JkMTA1Li5mMTg3MjUwZTYwYzYgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZXF1ZXN0LmMKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X3JlcXVlc3QuYwo+IEBAIC0zMjAsNiArMzIwLDcgQEAgc3RhdGljIHZvaWQg YWR2YW5jZV9yaW5nKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJlcXVlc3QpCj4gIAkJICogaXMganVz dCBhYm91dCB0byBiZS4gRWl0aGVyIHdvcmtzLCBpZiB3ZSBtaXNzIHRoZSBsYXN0IHR3bwo+ICAJ CSAqIG5vb3BzIC0gdGhleSBhcmUgc2FmZSB0byBiZSByZXBsYXllZCBvbiBhIHJlc2V0Lgo+ICAJ CSAqLwo+ICsJCUdFTV9UUkFDRSgibWFya2luZyAlcyBhcyBpbmFjdGl2ZVxuIiwgcmluZy0+dGlt ZWxpbmUtPm5hbWUpOwo+ICAJCXRhaWwgPSBSRUFEX09OQ0UocmVxdWVzdC0+dGFpbCk7Cj4gIAkJ bGlzdF9kZWwoJnJpbmctPmFjdGl2ZV9saW5rKTsKPiAgCX0gZWxzZSB7Cj4gQEAgLTEwOTUsOCAr MTA5NiwxMCBAQCB2b2lkIF9faTkxNV9yZXF1ZXN0X2FkZChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpy ZXF1ZXN0LCBib29sIGZsdXNoX2NhY2hlcykKPiAgCWk5MTVfZ2VtX2FjdGl2ZV9zZXQoJnRpbWVs aW5lLT5sYXN0X3JlcXVlc3QsIHJlcXVlc3QpOwo+ICAKPiAgCWxpc3RfYWRkX3RhaWwoJnJlcXVl c3QtPnJpbmdfbGluaywgJnJpbmctPnJlcXVlc3RfbGlzdCk7Cj4gLQlpZiAobGlzdF9pc19maXJz dCgmcmVxdWVzdC0+cmluZ19saW5rLCAmcmluZy0+cmVxdWVzdF9saXN0KSkKPiArCWlmIChsaXN0 X2lzX2ZpcnN0KCZyZXF1ZXN0LT5yaW5nX2xpbmssICZyaW5nLT5yZXF1ZXN0X2xpc3QpKSB7Cj4g KwkJR0VNX1RSQUNFKCJtYXJraW5nICVzIGFzIGFjdGl2ZVxuIiwgcmluZy0+dGltZWxpbmUtPm5h bWUpOwo+ICAJCWxpc3RfYWRkKCZyaW5nLT5hY3RpdmVfbGluaywgJnJlcXVlc3QtPmk5MTUtPmd0 LmFjdGl2ZV9yaW5ncyk7Cj4gKwl9Cj4gIAlyZXF1ZXN0LT5lbWl0dGVkX2ppZmZpZXMgPSBqaWZm aWVzOwo+ICAKPiAgCS8qCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0 ZXN0cy9pOTE1X2dlbV9jb250ZXh0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMv aTkxNV9nZW1fY29udGV4dC5jCj4gaW5kZXggZGRiMDNmMDA5MjMyLi45OGEzM2E4ZmIwNDYgMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfZ2VtX2NvbnRl eHQuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9jb250 ZXh0LmMKPiBAQCAtMjYsNiArMjYsNyBAQAo+ICAjaW5jbHVkZSAiaWd0X2ZsdXNoX3Rlc3QuaCIK PiAgCj4gICNpbmNsdWRlICJtb2NrX2RybS5oIgo+ICsjaW5jbHVkZSAibW9ja19nZW1fZGV2aWNl LmgiCj4gICNpbmNsdWRlICJodWdlX2dlbV9vYmplY3QuaCIKPiAgCj4gICNkZWZpbmUgRFdfUEVS X1BBR0UgKFBBR0VfU0laRSAvIHNpemVvZih1MzIpKQo+IEBAIC00MjAsNiArNDIxLDEzMCBAQCBz dGF0aWMgaW50IGlndF9jdHhfZXhlYyh2b2lkICphcmcpCj4gIAlyZXR1cm4gZXJyOwo+ICB9Cj4g IAo+ICtzdGF0aWMgY29uc3QgY2hhciAqX19lbmdpbmVfbmFtZShzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqaTkxNSwKPiArCQkJCSB1bnNpZ25lZCBpbnQgZW5naW5lcykKPiArewo+ICsJc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwo+ICsJdW5zaWduZWQgaW50IHRtcDsKPiArCj4gKwlp ZiAoZW5naW5lcyA9PSBBTExfRU5HSU5FUykKPiArCQlyZXR1cm4gImFsbCI7Cj4gKwo+ICsJZm9y X2VhY2hfZW5naW5lX21hc2tlZChlbmdpbmUsIGk5MTUsIGVuZ2luZXMsIHRtcCkKPiArCQlyZXR1 cm4gZW5naW5lLT5uYW1lOwo+ICsKPiArCXJldHVybiAibm9uZSI7Cj4gK30KPiArCj4gK3N0YXRp YyBpbnQgX19pZ3Rfc3dpdGNoX3RvX2tlcm5lbF9jb250ZXh0KHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICppOTE1LAo+ICsJCQkJCSAgc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwKPiArCQkJ CQkgIHVuc2lnbmVkIGludCBlbmdpbmVzKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmU7Cj4gKwl1bnNpZ25lZCBpbnQgdG1wOwo+ICsJaW50IGVycjsKPiArCj4gKwlHRU1f VFJBQ0UoIlRlc3RpbmcgJXNcbiIsIF9fZW5naW5lX25hbWUoaTkxNSwgZW5naW5lcykpOwo+ICsJ Zm9yX2VhY2hfZW5naW5lX21hc2tlZChlbmdpbmUsIGk5MTUsIGVuZ2luZXMsIHRtcCkgewo+ICsJ CXN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxOwo+ICsKPiArCQlycSA9IGk5MTVfcmVxdWVzdF9hbGxv YyhlbmdpbmUsIGN0eCk7Cj4gKwkJaWYgKElTX0VSUihycSkpCj4gKwkJCXJldHVybiBQVFJfRVJS KHJxKTsKPiArCj4gKwkJaTkxNV9yZXF1ZXN0X2FkZChycSk7Cj4gKwl9Cj4gKwo+ICsJZXJyID0g aTkxNV9nZW1fc3dpdGNoX3RvX2tlcm5lbF9jb250ZXh0KGk5MTUpOwo+ICsJaWYgKGVycikKPiAr CQlyZXR1cm4gZXJyOwo+ICsKPiArCWZvcl9lYWNoX2VuZ2luZV9tYXNrZWQoZW5naW5lLCBpOTE1 LCBlbmdpbmVzLCB0bXApIHsKPiArCQlpZiAoIWVuZ2luZV9oYXNfa2VybmVsX2NvbnRleHRfYmFy cmllcihlbmdpbmUpKSB7Cj4gKwkJCXByX2Vycigia2VybmVsIGNvbnRleHQgbm90IGxhc3Qgb24g ZW5naW5lICVzIVxuIiwKPiArCQkJICAgICAgIGVuZ2luZS0+bmFtZSk7Cj4gKwkJCXJldHVybiAt RUlOVkFMOwo+ICsJCX0KPiArCX0KPiArCj4gKwllcnIgPSBpOTE1X2dlbV93YWl0X2Zvcl9pZGxl KGk5MTUsIEk5MTVfV0FJVF9MT0NLRUQpOwo+ICsJaWYgKGVycikKPiArCQlyZXR1cm4gZXJyOwo+ ICsKPiArCUdFTV9CVUdfT04oaTkxNS0+Z3QuYWN0aXZlX3JlcXVlc3RzKTsKPiArCWZvcl9lYWNo X2VuZ2luZV9tYXNrZWQoZW5naW5lLCBpOTE1LCBlbmdpbmVzLCB0bXApIHsKPiArCQlpZiAoZW5n aW5lLT5sYXN0X3JldGlyZWRfY29udGV4dC0+Z2VtX2NvbnRleHQgIT0gaTkxNS0+a2VybmVsX2Nv bnRleHQpIHsKPiArCQkJcHJfZXJyKCJlbmdpbmUgJXMgbm90IGlkbGluZyBpbiBrZXJuZWwgY29u dGV4dCFcbiIsCj4gKwkJCSAgICAgICBlbmdpbmUtPm5hbWUpOwo+ICsJCQlyZXR1cm4gLUVJTlZB TDsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJZXJyID0gaTkxNV9nZW1fc3dpdGNoX3RvX2tlcm5lbF9j b250ZXh0KGk5MTUpOwo+ICsJaWYgKGVycikKPiArCQlyZXR1cm4gZXJyOwo+ICsKPiArCWlmIChp OTE1LT5ndC5hY3RpdmVfcmVxdWVzdHMpIHsKPiArCQlwcl9lcnIoInN3aXRjaC10by1rZXJuZWwt Y29udGV4dCBlbWl0dGVkICVkIHJlcXVlc3RzIGV2ZW4gdGhvdWdoIGl0IHNob3VsZCBhbHJlYWR5 IGJlIGlkbGluZyBpbiB0aGUga2VybmVsIGNvbnRleHRcbiIsCj4gKwkJICAgICAgIGk5MTUtPmd0 LmFjdGl2ZV9yZXF1ZXN0cyk7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJZm9y X2VhY2hfZW5naW5lX21hc2tlZChlbmdpbmUsIGk5MTUsIGVuZ2luZXMsIHRtcCkgewo+ICsJCWlm ICghaW50ZWxfZW5naW5lX2hhc19rZXJuZWxfY29udGV4dChlbmdpbmUpKSB7Cj4gKwkJCXByX2Vy cigia2VybmVsIGNvbnRleHQgbm90IGxhc3Qgb24gZW5naW5lICVzIVxuIiwKPiArCQkJICAgICAg IGVuZ2luZS0+bmFtZSk7Cj4gKwkJCXJldHVybiAtRUlOVkFMOwo+ICsJCX0KPiArCX0KPiArCj4g KwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBpZ3Rfc3dpdGNoX3RvX2tlcm5lbF9j b250ZXh0KHZvaWQgKmFyZykKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUg PSBhcmc7Cj4gKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7Cj4gKwlzdHJ1Y3QgaTkx NV9nZW1fY29udGV4dCAqY3R4Owo+ICsJZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQ7Cj4gKwlpbnQg ZXJyOwo+ICsKPiArCS8qCj4gKwkgKiBBIGNvcmUgcHJlbWlzZSBvZiBzd2l0Y2hpbmcgdG8gdGhl IGtlcm5lbCBjb250ZXh0IGlzIHRoYXQKPiArCSAqIGlmIGFuIGVuZ2luZSBpcyBhbHJlYWR5IGlk bGluZyBpbiB0aGUga2VybmVsIGNvbnRleHQsIHdlCj4gKwkgKiBkbyBub3QgZW1pdCBhbm90aGVy IHJlcXVlc3QgYW5kIHdha2UgaXQgdXAuIFRoZSBvdGhlciBiZWluZwo+ICsJICogdGhhdCB3ZSBk byBpbmRlZWQgZW5kIHVwIGlkbGluZyBpbiB0aGUga2VybmVsIGNvbnRleHQuCj4gKwkgKi8KPiAr Cj4gKwltdXRleF9sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKCkFzIGRpc2N1c3NlZCBp biBpcmMsCgpBZGQgY29tbWVudCBvciByZW5hbWUgdGhlIGN0eCBoZXJlIGFuZCBpbiBfX2lndF9z d2l0Y2hfdG9fa2VybmVsX2NvbnRleHQKc28gdGhhdCB0aGUgcmVhZGVyIGtub3dzIHRoYXQgdGhp cyBtb2NrIGtlcm5lbCBjb250ZXh0IGlzCnVzZWQgYXMgY29udmVuaWVudCB3YXkgdG8gaW5qZWN0 IHRlc3QgcmVxdWVzdHMuCgpSZXZpZXdlZC1ieTogTWlrYSBLdW9wcGFsYSA8bWlrYS5rdW9wcGFs YUBsaW51eC5pbnRlbC5jb20+CgoKPiArCWN0eCA9IGtlcm5lbF9jb250ZXh0KGk5MTUpOwo+ICsJ aWYgKElTX0VSUihjdHgpKSB7Cj4gKwkJZXJyID0gUFRSX0VSUihjdHgpOwo+ICsJCWdvdG8gb3V0 X3VubG9jazsKPiArCX0KPiArCj4gKwkvKiBGaXJzdCBjaGVjayBpZGxpbmcgZWFjaCBpbmRpdmlk dWFsIGVuZ2luZSAqLwo+ICsJZm9yX2VhY2hfZW5naW5lKGVuZ2luZSwgaTkxNSwgaWQpIHsKPiAr CQllcnIgPSBfX2lndF9zd2l0Y2hfdG9fa2VybmVsX2NvbnRleHQoaTkxNSwgY3R4LCBCSVQoaWQp KTsKPiArCQlpZiAoZXJyKQo+ICsJCQlnb3RvIG91dF91bmxvY2s7Cj4gKwl9Cj4gKwo+ICsJLyog Tm93IGVuIG1hc3NlICovCj4gKwllcnIgPSBfX2lndF9zd2l0Y2hfdG9fa2VybmVsX2NvbnRleHQo aTkxNSwgY3R4LCBBTExfRU5HSU5FUyk7Cj4gKwlpZiAoZXJyKQo+ICsJCWdvdG8gb3V0X3VubG9j azsKPiArCj4gK291dF91bmxvY2s6Cj4gKwlHRU1fVFJBQ0VfRFVNUF9PTihlcnIpOwo+ICsJaWYg KGlndF9mbHVzaF90ZXN0KGk5MTUsIEk5MTVfV0FJVF9MT0NLRUQpKQo+ICsJCWVyciA9IC1FSU87 Cj4gKwltdXRleF91bmxvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICsKPiArCWtlcm5l bF9jb250ZXh0X2Nsb3NlKGN0eCk7Cj4gKwlyZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ICBzdGF0aWMg aW50IGZha2VfYWxpYXNpbmdfcHBndHRfZW5hYmxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpp OTE1KQo+ICB7Cj4gIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwo+IEBAIC00NDcs OSArNTcyLDI4IEBAIHN0YXRpYyB2b2lkIGZha2VfYWxpYXNpbmdfcHBndHRfZGlzYWJsZShzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPiAgCWk5MTVfZ2VtX2ZpbmlfYWxpYXNpbmdfcHBn dHQoaTkxNSk7Cj4gIH0KPiAgCj4gK2ludCBpOTE1X2dlbV9jb250ZXh0X21vY2tfc2VsZnRlc3Rz KHZvaWQpCj4gK3sKPiArCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaTkxNV9zdWJ0ZXN0IHRlc3RzW10g PSB7Cj4gKwkJU1VCVEVTVChpZ3Rfc3dpdGNoX3RvX2tlcm5lbF9jb250ZXh0KSwKPiArCX07Cj4g KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNTsKPiArCWludCBlcnI7Cj4gKwo+ICsJaTkx NSA9IG1vY2tfZ2VtX2RldmljZSgpOwo+ICsJaWYgKCFpOTE1KQo+ICsJCXJldHVybiAtRU5PTUVN Owo+ICsKPiArCWVyciA9IGk5MTVfc3VidGVzdHModGVzdHMsIGk5MTUpOwo+ICsKPiArCWRybV9k ZXZfdW5yZWYoJmk5MTUtPmRybSk7Cj4gKwlyZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ICBpbnQgaTkx NV9nZW1fY29udGV4dF9saXZlX3NlbGZ0ZXN0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYpCj4gIHsKPiAgCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaTkxNV9zdWJ0ZXN0IHRlc3RzW10g PSB7Cj4gKwkJU1VCVEVTVChpZ3Rfc3dpdGNoX3RvX2tlcm5lbF9jb250ZXh0KSwKPiAgCQlTVUJU RVNUKGlndF9jdHhfZXhlYyksCj4gIAl9Owo+ICAJYm9vbCBmYWtlX2FsaWFzID0gZmFsc2U7Cj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X21vY2tfc2Vs ZnRlc3RzLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9tb2NrX3NlbGZ0 ZXN0cy5oCj4gaW5kZXggZDE2ZDc0MTc4ZTlkLi4xYjcwMjA4ZWVlYTcgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfbW9ja19zZWxmdGVzdHMuaAo+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X21vY2tfc2VsZnRlc3RzLmgK PiBAQCAtMjQsMyArMjQsNCBAQCBzZWxmdGVzdCh2bWEsIGk5MTVfdm1hX21vY2tfc2VsZnRlc3Rz KQo+ICBzZWxmdGVzdChldmljdCwgaTkxNV9nZW1fZXZpY3RfbW9ja19zZWxmdGVzdHMpCj4gIHNl bGZ0ZXN0KGd0dCwgaTkxNV9nZW1fZ3R0X21vY2tfc2VsZnRlc3RzKQo+ICBzZWxmdGVzdChodWdl cGFnZXMsIGk5MTVfZ2VtX2h1Z2VfcGFnZV9tb2NrX3NlbGZ0ZXN0cykKPiArc2VsZnRlc3QoY29u dGV4dHMsIGk5MTVfZ2VtX2NvbnRleHRfbW9ja19zZWxmdGVzdHMpCj4gLS0gCj4gMi4xNy4wCj4K PiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IEludGVs LWdmeCBtYWlsaW5nIGxpc3QKPiBJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gaHR0 cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1h aWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==