From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jani Nikula Subject: Re: [PATCH 03/23] drm/i915: Move the TypeC port handling code to a separate file Date: Thu, 06 Jun 2019 11:43:12 +0300 Message-ID: <87pnnr14v3.fsf@intel.com> References: <20190604145826.16424-1-imre.deak@intel.com> <20190604145826.16424-4-imre.deak@intel.com> <87sgsn14vt.fsf@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0D8CB89807 for ; Thu, 6 Jun 2019 08:40:09 +0000 (UTC) In-Reply-To: <87sgsn14vt.fsf@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Imre Deak , intel-gfx@lists.freedesktop.org Cc: Paulo Zanoni List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCAwNiBKdW4gMjAxOSwgSmFuaSBOaWt1bGEgPGphbmkubmlrdWxhQGxpbnV4LmludGVs LmNvbT4gd3JvdGU6Cj4gT24gVHVlLCAwNCBKdW4gMjAxOSwgSW1yZSBEZWFrIDxpbXJlLmRlYWtA aW50ZWwuY29tPiB3cm90ZToKPj4gTW92ZSB0aGUgVHlwZUMgcG9ydCBoYW5kbGluZyBmdW5jdGlv bnMgdG8gYSBuZXcgZmlsZSBmb3IgY2xhcml0eS4KPj4KPj4gV2hpbGUgYXQgaXQ6Cj4+IC0gcy9p Y2xfdGNfcG9ydF9jb25uZWN0ZWQoKS9pbnRlbF90Y19wb3J0X2Nvbm5lY3RlZCgpLwo+PiAgIGlj bF90Y19waHlfZGlzY29ubmVjdCgpLCB3aWxsIGJlIHVuZXhwb3J0ZWQgbGF0ZXIuCj4+Cj4+IC0g cy9pbnRlbF9kcF9nZXRfZmlhX3N1cHBvcnRlZF9sYW5lX2NvdW50KCkvaW50ZWxfdGNfcG9ydF9m aWFfbWF4X2xhbmVfY291bnQoKS8KPj4gICBJdCdzIHVzZWQgZm9yIEhETUkgbGVnYWN5IG1vZGUg dG9vLgo+Pgo+PiAtIFNpbXBsaWZ5IGZ1bmN0aW9uIGludGVyZmFjZXMgYnkgcGFzc2luZyBvbmx5 IGRpZ19wb3J0IHRvIHRoZW0uCj4+Cj4+IE5vIGZ1bmN0aW9uYWwgY2hhbmdlcy4KPgo+IFNvbWUg bml0cGlja3MgYmVsb3cuCgpGb3Jnb3QsCgpBY2tlZC1ieTogSmFuaSBOaWt1bGEgPGphbmkubmlr dWxhQGludGVsLmNvbT4KCm9uIHRoZSBpZGVhLgoKPgo+IEJSLAo+IEphbmkuCj4KPgo+Pgo+PiBD YzogQW5pbWVzaCBNYW5uYSA8YW5pbWVzaC5tYW5uYUBpbnRlbC5jb20+Cj4+IENjOiBQYXVsbyBa YW5vbmkgPHBhdWxvLnIuemFub25pQGludGVsLmNvbT4KPj4gQ2M6IEpvc8OpIFJvYmVydG8gZGUg U291emEgPGpvc2Uuc291emFAaW50ZWwuY29tPgo+PiBTaWduZWQtb2ZmLWJ5OiBJbXJlIERlYWsg PGltcmUuZGVha0BpbnRlbC5jb20+Cj4+IC0tLQo+PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFr ZWZpbGUgICAgICAgICAgICAgfCAgIDMgKy0KPj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2Vm aWxlLmhlYWRlci10ZXN0IHwgICAxICsKPj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rk aS5jICAgICAgICAgIHwgICA2ICstCj4+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5j ICAgICAgICAgICB8IDIyNyArLS0tLS0tLS0tLS0tLS0tLS0tLS0KPj4gIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2RwLmggICAgICAgICAgIHwgICAyIC0KPj4gIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX3RjLmMgICAgICAgICAgIHwgMjMwICsrKysrKysrKysrKysrKysrKysrKysKPj4g IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3RjLmggICAgICAgICAgIHwgIDEzICsrCj4+ICA3 IGZpbGVzIGNoYW5nZWQsIDI1MiBpbnNlcnRpb25zKCspLCAyMzAgZGVsZXRpb25zKC0pCj4+ICBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdGMuYwo+PiAgY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3RjLmgKPj4KPj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvTWFrZWZpbGUKPj4gaW5kZXggYzBhN2IyOTk0MDc3Li43NGM0ZDExZDgzZWIgMTAwNjQ0 Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L01ha2VmaWxlCj4+IEBAIC0xNzEsNyArMTcxLDggQEAgaTkxNS15ICs9IGlu dGVsX2F1ZGlvLm8gXAo+PiAgCSAgaW50ZWxfcHNyLm8gXAo+PiAgCSAgaW50ZWxfcXVpcmtzLm8g XAo+PiAgCSAgaW50ZWxfc2lkZWJhbmQubyBcCj4+IC0JICBpbnRlbF9zcHJpdGUubwo+PiArCSAg aW50ZWxfc3ByaXRlLm8gXAo+PiArCSAgaW50ZWxfdGMubwo+PiAgaTkxNS0kKENPTkZJR19BQ1BJ KQkJKz0gaW50ZWxfYWNwaS5vIGludGVsX29wcmVnaW9uLm8KPj4gIGk5MTUtJChDT05GSUdfRFJN X0ZCREVWX0VNVUxBVElPTikJKz0gaW50ZWxfZmJkZXYubwo+PiAgCj4+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZS5oZWFkZXItdGVzdCBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L01ha2VmaWxlLmhlYWRlci10ZXN0Cj4+IGluZGV4IDZlZjNiNjQ3YWM2NS4uZTgwZThl NDViMDljIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZS5oZWFk ZXItdGVzdAo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZS5oZWFkZXItdGVz dAo+PiBAQCAtNTgsNiArNTgsNyBAQCBoZWFkZXJfdGVzdCA6PSBcCj4+ICAJaW50ZWxfc2R2by5o IFwKPj4gIAlpbnRlbF9zaWRlYmFuZC5oIFwKPj4gIAlpbnRlbF9zcHJpdGUuaCBcCj4+ICsJaW50 ZWxfdGMuaCBcCj4+ICAJaW50ZWxfdHYuaCBcCj4+ICAJaW50ZWxfdW5jb3JlLmggXAo+PiAgCWlu dGVsX3Zkc2MuaCBcCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9k ZGkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RkaS5jCj4+IGluZGV4IDM1MGVhZjU0 ZjAxZi4uNWExYzk4NDM4Mzc1IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9kZGkuYwo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kZGkuYwo+PiBA QCAtNDUsNiArNDUsNyBAQAo+PiAgI2luY2x1ZGUgImludGVsX2xzcGNvbi5oIgo+PiAgI2luY2x1 ZGUgImludGVsX3BhbmVsLmgiCj4+ICAjaW5jbHVkZSAiaW50ZWxfcHNyLmgiCj4+ICsjaW5jbHVk ZSAiaW50ZWxfdGMuaCIKPj4gICNpbmNsdWRlICJpbnRlbF92ZHNjLmgiCj4+ICAKPj4gIHN0cnVj dCBkZGlfYnVmX3RyYW5zIHsKPj4gQEAgLTM5MDQsNyArMzkwNSw2IEBAIHN0YXRpYyBpbnQgaW50 ZWxfZGRpX2NvbXB1dGVfY29uZmlnKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAo+PiAg c3RhdGljIHZvaWQgaW50ZWxfZGRpX2VuY29kZXJfc3VzcGVuZChzdHJ1Y3QgaW50ZWxfZW5jb2Rl ciAqZW5jb2RlcikKPj4gIHsKPj4gIAlzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdfcG9y dCA9IGVuY190b19kaWdfcG9ydCgmZW5jb2Rlci0+YmFzZSk7Cj4+IC0Jc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmk5MTUgPSB0b19pOTE1KGVuY29kZXItPmJhc2UuZGV2KTsKPj4gIAo+PiAgCWlu dGVsX2RwX2VuY29kZXJfc3VzcGVuZChlbmNvZGVyKTsKPj4gIAo+PiBAQCAtMzkxNCw3ICszOTE0 LDcgQEAgc3RhdGljIHZvaWQgaW50ZWxfZGRpX2VuY29kZXJfc3VzcGVuZChzdHJ1Y3QgaW50ZWxf ZW5jb2RlciAqZW5jb2RlcikKPj4gIAkgKiBldmVuIGlmIHRoZSBzaW5rIGhhcyBkaXNhcHBlYXJl ZCB3aGlsZSBiZWluZyBzdXNwZW5kZWQuCj4+ICAJICovCj4+ICAJaWYgKGRpZ19wb3J0LT50Y19s ZWdhY3lfcG9ydCkKPj4gLQkJaWNsX3RjX3BoeV9kaXNjb25uZWN0KGk5MTUsIGRpZ19wb3J0KTsK Pj4gKwkJaWNsX3RjX3BoeV9kaXNjb25uZWN0KGRpZ19wb3J0KTsKPj4gIH0KPj4gIAo+PiAgc3Rh dGljIHZvaWQgaW50ZWxfZGRpX2VuY29kZXJfcmVzZXQoc3RydWN0IGRybV9lbmNvZGVyICpkcm1f ZW5jb2RlcikKPj4gQEAgLTM5MzYsNyArMzkzNiw3IEBAIHN0YXRpYyB2b2lkIGludGVsX2RkaV9l bmNvZGVyX2Rlc3Ryb3koc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQo+PiAgCWludGVsX2Rw X2VuY29kZXJfZmx1c2hfd29yayhlbmNvZGVyKTsKPj4gIAo+PiAgCWlmIChpbnRlbF9wb3J0X2lz X3RjKGk5MTUsIGRpZ19wb3J0LT5iYXNlLnBvcnQpKQo+PiAtCQlpY2xfdGNfcGh5X2Rpc2Nvbm5l Y3QoaTkxNSwgZGlnX3BvcnQpOwo+PiArCQlpY2xfdGNfcGh5X2Rpc2Nvbm5lY3QoZGlnX3BvcnQp Owo+PiAgCj4+ICAJZHJtX2VuY29kZXJfY2xlYW51cChlbmNvZGVyKTsKPj4gIAlrZnJlZShkaWdf cG9ydCk7Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYwo+PiBpbmRleCAyNGI1NmIyYTc2YzguLmI2 OTMxMGJkOTkxNCAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAu Ywo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jCj4+IEBAIC02Miw2ICs2 Miw3IEBACj4+ICAjaW5jbHVkZSAiaW50ZWxfcGFuZWwuaCIKPj4gICNpbmNsdWRlICJpbnRlbF9w c3IuaCIKPj4gICNpbmNsdWRlICJpbnRlbF9zaWRlYmFuZC5oIgo+PiArI2luY2x1ZGUgImludGVs X3RjLmgiCj4+ICAjaW5jbHVkZSAiaW50ZWxfdmRzYy5oIgo+PiAgCj4+ICAjZGVmaW5lIERQX0RQ UlhfRVNJX0xFTiAxNAo+PiBAQCAtMjExLDQ2ICsyMTIsMTMgQEAgc3RhdGljIGludCBpbnRlbF9k cF9tYXhfY29tbW9uX3JhdGUoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPj4gIAlyZXR1cm4g aW50ZWxfZHAtPmNvbW1vbl9yYXRlc1tpbnRlbF9kcC0+bnVtX2NvbW1vbl9yYXRlcyAtIDFdOwo+ PiAgfQo+PiAgCj4+IC1zdGF0aWMgaW50IGludGVsX2RwX2dldF9maWFfc3VwcG9ydGVkX2xhbmVf Y291bnQoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPj4gLXsKPj4gLQlzdHJ1Y3QgaW50ZWxf ZGlnaXRhbF9wb3J0ICpkaWdfcG9ydCA9IGRwX3RvX2RpZ19wb3J0KGludGVsX2RwKTsKPj4gLQlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRpZ19wb3J0LT5iYXNl LmJhc2UuZGV2KTsKPj4gLQllbnVtIHRjX3BvcnQgdGNfcG9ydCA9IGludGVsX3BvcnRfdG9fdGMo ZGV2X3ByaXYsIGRpZ19wb3J0LT5iYXNlLnBvcnQpOwo+PiAtCWludGVsX3dha2VyZWZfdCB3YWtl cmVmOwo+PiAtCXUzMiBsYW5lX2luZm87Cj4+IC0KPj4gLQlpZiAodGNfcG9ydCA9PSBQT1JUX1RD X05PTkUgfHwgZGlnX3BvcnQtPnRjX3R5cGUgIT0gVENfUE9SVF9UWVBFQykKPj4gLQkJcmV0dXJu IDQ7Cj4+IC0KPj4gLQlsYW5lX2luZm8gPSAwOwo+PiAtCXdpdGhfaW50ZWxfZGlzcGxheV9wb3dl cihkZXZfcHJpdiwgUE9XRVJfRE9NQUlOX0RJU1BMQVlfQ09SRSwgd2FrZXJlZikKPj4gLQkJbGFu ZV9pbmZvID0gKEk5MTVfUkVBRChQT1JUX1RYX0RGTEVYRFBTUCkgJgo+PiAtCQkJICAgICBEUF9M QU5FX0FTU0lHTk1FTlRfTUFTSyh0Y19wb3J0KSkgPj4KPj4gLQkJCQlEUF9MQU5FX0FTU0lHTk1F TlRfU0hJRlQodGNfcG9ydCk7Cj4+IC0KPj4gLQlzd2l0Y2ggKGxhbmVfaW5mbykgewo+PiAtCWRl ZmF1bHQ6Cj4+IC0JCU1JU1NJTkdfQ0FTRShsYW5lX2luZm8pOwo+PiAtCWNhc2UgMToKPj4gLQlj YXNlIDI6Cj4+IC0JY2FzZSA0Ogo+PiAtCWNhc2UgODoKPj4gLQkJcmV0dXJuIDE7Cj4+IC0JY2Fz ZSAzOgo+PiAtCWNhc2UgMTI6Cj4+IC0JCXJldHVybiAyOwo+PiAtCWNhc2UgMTU6Cj4+IC0JCXJl dHVybiA0Owo+PiAtCX0KPj4gLX0KPj4gLQo+PiAgLyogVGhlb3JldGljYWwgbWF4IGJldHdlZW4g c291cmNlIGFuZCBzaW5rICovCj4+ICBzdGF0aWMgaW50IGludGVsX2RwX21heF9jb21tb25fbGFu ZV9jb3VudChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+PiAgewo+PiAgCXN0cnVjdCBpbnRl bF9kaWdpdGFsX3BvcnQgKmludGVsX2RpZ19wb3J0ID0gZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHAp Owo+PiAgCWludCBzb3VyY2VfbWF4ID0gaW50ZWxfZGlnX3BvcnQtPm1heF9sYW5lczsKPj4gIAlp bnQgc2lua19tYXggPSBkcm1fZHBfbWF4X2xhbmVfY291bnQoaW50ZWxfZHAtPmRwY2QpOwo+PiAt CWludCBmaWFfbWF4ID0gaW50ZWxfZHBfZ2V0X2ZpYV9zdXBwb3J0ZWRfbGFuZV9jb3VudChpbnRl bF9kcCk7Cj4+ICsJaW50IGZpYV9tYXggPSBpbnRlbF90Y19wb3J0X2ZpYV9tYXhfbGFuZV9jb3Vu dChpbnRlbF9kaWdfcG9ydCk7Cj4+ICAKPj4gIAlyZXR1cm4gbWluMyhzb3VyY2VfbWF4LCBzaW5r X21heCwgZmlhX21heCk7Cj4+ICB9Cj4+IEBAIC01MjMxLDE5NSArNTE5OSw2IEBAIHN0YXRpYyBi b29sIGljbF9jb21ib19wb3J0X2Nvbm5lY3RlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYsCj4+ICAJcmV0dXJuIEk5MTVfUkVBRChTREVJU1IpICYgU0RFX0RESV9IT1RQTFVHX0lD UChwb3J0KTsKPj4gIH0KPj4gIAo+PiAtc3RhdGljIGNvbnN0IGNoYXIgKnRjX3R5cGVfbmFtZShl bnVtIHRjX3BvcnRfdHlwZSB0eXBlKQo+PiAtewo+PiAtCXN0YXRpYyBjb25zdCBjaGFyICogY29u c3QgbmFtZXNbXSA9IHsKPj4gLQkJW1RDX1BPUlRfVU5LTk9XTl0gPSAidW5rbm93biIsCj4+IC0J CVtUQ19QT1JUX0xFR0FDWV0gPSAibGVnYWN5IiwKPj4gLQkJW1RDX1BPUlRfVFlQRUNdID0gInR5 cGVjIiwKPj4gLQkJW1RDX1BPUlRfVEJUXSA9ICJ0YnQiLAo+PiAtCX07Cj4+IC0KPj4gLQlpZiAo V0FSTl9PTih0eXBlID49IEFSUkFZX1NJWkUobmFtZXMpKSkKPj4gLQkJdHlwZSA9IFRDX1BPUlRf VU5LTk9XTjsKPj4gLQo+PiAtCXJldHVybiBuYW1lc1t0eXBlXTsKPj4gLX0KPj4gLQo+PiAtc3Rh dGljIHZvaWQgaWNsX3VwZGF0ZV90Y19wb3J0X3R5cGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2LAo+PiAtCQkJCSAgICBzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICppbnRlbF9k aWdfcG9ydCwKPj4gLQkJCQkgICAgYm9vbCBpc19sZWdhY3ksIGJvb2wgaXNfdHlwZWMsIGJvb2wg aXNfdGJ0KQo+PiAtewo+PiAtCWVudW0gcG9ydCBwb3J0ID0gaW50ZWxfZGlnX3BvcnQtPmJhc2Uu cG9ydDsKPj4gLQllbnVtIHRjX3BvcnRfdHlwZSBvbGRfdHlwZSA9IGludGVsX2RpZ19wb3J0LT50 Y190eXBlOwo+PiAtCj4+IC0JV0FSTl9PTihpc19sZWdhY3kgKyBpc190eXBlYyArIGlzX3RidCAh PSAxKTsKPj4gLQo+PiAtCWlmIChpc19sZWdhY3kpCj4+IC0JCWludGVsX2RpZ19wb3J0LT50Y190 eXBlID0gVENfUE9SVF9MRUdBQ1k7Cj4+IC0JZWxzZSBpZiAoaXNfdHlwZWMpCj4+IC0JCWludGVs X2RpZ19wb3J0LT50Y190eXBlID0gVENfUE9SVF9UWVBFQzsKPj4gLQllbHNlIGlmIChpc190YnQp Cj4+IC0JCWludGVsX2RpZ19wb3J0LT50Y190eXBlID0gVENfUE9SVF9UQlQ7Cj4+IC0JZWxzZQo+ PiAtCQlyZXR1cm47Cj4+IC0KPj4gLQkvKiBUeXBlcyBhcmUgbm90IHN1cHBvc2VkIHRvIGJlIGNo YW5nZWQgYXQgcnVudGltZS4gKi8KPj4gLQlXQVJOX09OKG9sZF90eXBlICE9IFRDX1BPUlRfVU5L Tk9XTiAmJgo+PiAtCQlvbGRfdHlwZSAhPSBpbnRlbF9kaWdfcG9ydC0+dGNfdHlwZSk7Cj4+IC0K Pj4gLQlpZiAob2xkX3R5cGUgIT0gaW50ZWxfZGlnX3BvcnQtPnRjX3R5cGUpCj4+IC0JCURSTV9E RUJVR19LTVMoIlBvcnQgJWMgaGFzIFRDIHR5cGUgJXNcbiIsIHBvcnRfbmFtZShwb3J0KSwKPj4g LQkJCSAgICAgIHRjX3R5cGVfbmFtZShpbnRlbF9kaWdfcG9ydC0+dGNfdHlwZSkpOwo+PiAtfQo+ PiAtCj4+IC0vKgo+PiAtICogVGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRzIHRoZSBmaXJzdCBwYXJ0 IG9mIHRoZSBDb25uZWN0IEZsb3cgZGVzY3JpYmVkIGJ5IG91cgo+PiAtICogc3BlY2lmaWNhdGlv biwgR2VuMTEgVHlwZUMgUHJvZ3JhbW1pbmcgY2hhcHRlci4gVGhlIHJlc3Qgb2YgdGhlIGZsb3cg KHJlYWRpbmcKPj4gLSAqIGxhbmVzLCBFRElELCBldGMpIGlzIGRvbmUgYXMgbmVlZGVkIGluIHRo ZSB0eXBpY2FsIHBsYWNlcy4KPj4gLSAqCj4+IC0gKiBVbmxpa2UgdGhlIG90aGVyIHBvcnRzLCB0 eXBlLUMgcG9ydHMgYXJlIG5vdCBhdmFpbGFibGUgdG8gdXNlIGFzIHNvb24gYXMgd2UKPj4gLSAq IGdldCBhIGhvdHBsdWcuIFRoZSB0eXBlLUMgUEhZcyBjYW4gYmUgc2hhcmVkIGJldHdlZW4gbXVs dGlwbGUgY29udHJvbGxlcnM6Cj4+IC0gKiBkaXNwbGF5LCBVU0IsIGV0Yy4gQXMgYSByZXN1bHQs IGhhbmRzaGFraW5nIHRocm91Z2ggRklBIGlzIHJlcXVpcmVkIGFyb3VuZAo+PiAtICogY29ubmVj dCBhbmQgZGlzY29ubmVjdCB0byBjbGVhbmx5IHRyYW5zZmVyIG93bmVyc2hpcCB3aXRoIHRoZSBj b250cm9sbGVyIGFuZAo+PiAtICogc2V0IHRoZSB0eXBlLUMgcG93ZXIgc3RhdGUuCj4+IC0gKgo+ PiAtICogV2UgY291bGQgb3B0IHRvIG9ubHkgZG8gdGhlIGNvbm5lY3QgZmxvdyB3aGVuIHdlIGFj dHVhbGx5IHRyeSB0byB1c2UgdGhlIEFVWAo+PiAtICogY2hhbm5lbHMgb3IgZG8gYSBtb2Rlc2V0 LCB0aGVuIGltbWVkaWF0ZWx5IHJ1biB0aGUgZGlzY29ubmVjdCBmbG93IGFmdGVyCj4+IC0gKiB1 c2FnZSwgYnV0IHRoZXJlIGFyZSBzb21lIGltcGxpY2F0aW9ucyBvbiB0aGlzIGZvciBhIGR5bmFt aWMgZW52aXJvbm1lbnQ6Cj4+IC0gKiB0aGluZ3MgbWF5IGdvIGF3YXkgb3IgY2hhbmdlIGJlaGlu ZCBvdXIgYmFja3MuIFNvIGZvciBub3cgb3VyIGRyaXZlciBpcwo+PiAtICogYWx3YXlzIHRyeWlu ZyB0byBhY3F1aXJlIG93bmVyc2hpcCBvZiB0aGUgY29udHJvbGxlciBhcyBzb29uIGFzIGl0IGdl dHMgYW4KPj4gLSAqIGludGVycnVwdCAob3IgcG9sbHMgc3RhdGUgYW5kIHNlZXMgYSBwb3J0IGlz IGNvbm5lY3RlZCkgYW5kIG9ubHkgZ2l2ZXMgaXQKPj4gLSAqIGJhY2sgd2hlbiBpdCBzZWVzIGEg ZGlzY29ubmVjdC4gSW1wbGVtZW50YXRpb24gb2YgYSBtb3JlIGZpbmUtZ3JhaW5lZCBtb2RlbAo+ PiAtICogd2lsbCByZXF1aXJlIGEgbG90IG9mIGNvb3JkaW5hdGlvbiB3aXRoIHVzZXIgc3BhY2Ug YW5kIHRob3JvdWdoIHRlc3RpbmcgZm9yCj4+IC0gKiB0aGUgZXh0cmEgcG9zc2libGUgY2FzZXMu Cj4+IC0gKi8KPj4gLXN0YXRpYyBib29sIGljbF90Y19waHlfY29ubmVjdChzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4+IC0JCQkgICAgICAgc3RydWN0IGludGVsX2RpZ2l0YWxf cG9ydCAqZGlnX3BvcnQpCj4+IC17Cj4+IC0JZW51bSB0Y19wb3J0IHRjX3BvcnQgPSBpbnRlbF9w b3J0X3RvX3RjKGRldl9wcml2LCBkaWdfcG9ydC0+YmFzZS5wb3J0KTsKPj4gLQl1MzIgdmFsOwo+ PiAtCj4+IC0JaWYgKGRpZ19wb3J0LT50Y190eXBlICE9IFRDX1BPUlRfTEVHQUNZICYmCj4+IC0J ICAgIGRpZ19wb3J0LT50Y190eXBlICE9IFRDX1BPUlRfVFlQRUMpCj4+IC0JCXJldHVybiB0cnVl Owo+PiAtCj4+IC0JdmFsID0gSTkxNV9SRUFEKFBPUlRfVFhfREZMRVhEUFBNUyk7Cj4+IC0JaWYg KCEodmFsICYgRFBfUEhZX01PREVfU1RBVFVTX0NPTVBMRVRFRCh0Y19wb3J0KSkpIHsKPj4gLQkJ RFJNX0RFQlVHX0tNUygiRFAgUEhZIGZvciBUQyBwb3J0ICVkIG5vdCByZWFkeVxuIiwgdGNfcG9y dCk7Cj4+IC0JCVdBUk5fT04oZGlnX3BvcnQtPnRjX2xlZ2FjeV9wb3J0KTsKPj4gLQkJcmV0dXJu IGZhbHNlOwo+PiAtCX0KPj4gLQo+PiAtCS8qCj4+IC0JICogVGhpcyBmdW5jdGlvbiBtYXkgYmUg Y2FsbGVkIG1hbnkgdGltZXMgaW4gYSByb3cgd2l0aG91dCBhbiBIUEQgZXZlbnQKPj4gLQkgKiBp biBiZXR3ZWVuLCBzbyB0cnkgdG8gYXZvaWQgdGhlIHdyaXRlIHdoZW4gd2UgY2FuLgo+PiAtCSAq Lwo+PiAtCXZhbCA9IEk5MTVfUkVBRChQT1JUX1RYX0RGTEVYRFBDU1NTKTsKPj4gLQlpZiAoISh2 YWwgJiBEUF9QSFlfTU9ERV9TVEFUVVNfTk9UX1NBRkUodGNfcG9ydCkpKSB7Cj4+IC0JCXZhbCB8 PSBEUF9QSFlfTU9ERV9TVEFUVVNfTk9UX1NBRkUodGNfcG9ydCk7Cj4+IC0JCUk5MTVfV1JJVEUo UE9SVF9UWF9ERkxFWERQQ1NTUywgdmFsKTsKPj4gLQl9Cj4+IC0KPj4gLQkvKgo+PiAtCSAqIE5v dyB3ZSBoYXZlIHRvIHJlLWNoZWNrIHRoZSBsaXZlIHN0YXRlLCBpbiBjYXNlIHRoZSBwb3J0IHJl Y2VudGx5Cj4+IC0JICogYmVjYW1lIGRpc2Nvbm5lY3RlZC4gTm90IG5lY2Vzc2FyeSBmb3IgbGVn YWN5IG1vZGUuCj4+IC0JICovCj4+IC0JaWYgKGRpZ19wb3J0LT50Y190eXBlID09IFRDX1BPUlRf VFlQRUMgJiYKPj4gLQkgICAgIShJOTE1X1JFQUQoUE9SVF9UWF9ERkxFWERQU1ApICYgVENfTElW RV9TVEFURV9UQyh0Y19wb3J0KSkpIHsKPj4gLQkJRFJNX0RFQlVHX0tNUygiVEMgUEhZICVkIHN1 ZGRlbiBkaXNjb25uZWN0LlxuIiwgdGNfcG9ydCk7Cj4+IC0JCWljbF90Y19waHlfZGlzY29ubmVj dChkZXZfcHJpdiwgZGlnX3BvcnQpOwo+PiAtCQlyZXR1cm4gZmFsc2U7Cj4+IC0JfQo+PiAtCj4+ IC0JcmV0dXJuIHRydWU7Cj4+IC19Cj4+IC0KPj4gLS8qCj4+IC0gKiBTZWUgdGhlIGNvbW1lbnQg YXQgdGhlIGNvbm5lY3QgZnVuY3Rpb24uIFRoaXMgaW1wbGVtZW50cyB0aGUgRGlzY29ubmVjdAo+ PiAtICogRmxvdy4KPj4gLSAqLwo+PiAtdm9pZCBpY2xfdGNfcGh5X2Rpc2Nvbm5lY3Qoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+PiAtCQkJICAgc3RydWN0IGludGVsX2RpZ2l0 YWxfcG9ydCAqZGlnX3BvcnQpCj4+IC17Cj4+IC0JZW51bSB0Y19wb3J0IHRjX3BvcnQgPSBpbnRl bF9wb3J0X3RvX3RjKGRldl9wcml2LCBkaWdfcG9ydC0+YmFzZS5wb3J0KTsKPj4gLQo+PiAtCWlm IChkaWdfcG9ydC0+dGNfdHlwZSA9PSBUQ19QT1JUX1VOS05PV04pCj4+IC0JCXJldHVybjsKPj4g LQo+PiAtCS8qCj4+IC0JICogVEJUIGRpc2Nvbm5lY3Rpb24gZmxvdyBpcyByZWFkIHRoZSBsaXZl IHN0YXR1cywgd2hhdCB3YXMgZG9uZSBpbgo+PiAtCSAqIGNhbGxlci4KPj4gLQkgKi8KPj4gLQlp ZiAoZGlnX3BvcnQtPnRjX3R5cGUgPT0gVENfUE9SVF9UWVBFQyB8fAo+PiAtCSAgICBkaWdfcG9y dC0+dGNfdHlwZSA9PSBUQ19QT1JUX0xFR0FDWSkgewo+PiAtCQl1MzIgdmFsOwo+PiAtCj4+IC0J CXZhbCA9IEk5MTVfUkVBRChQT1JUX1RYX0RGTEVYRFBDU1NTKTsKPj4gLQkJdmFsICY9IH5EUF9Q SFlfTU9ERV9TVEFUVVNfTk9UX1NBRkUodGNfcG9ydCk7Cj4+IC0JCUk5MTVfV1JJVEUoUE9SVF9U WF9ERkxFWERQQ1NTUywgdmFsKTsKPj4gLQl9Cj4+IC0KPj4gLQlEUk1fREVCVUdfS01TKCJQb3J0 ICVjIFRDIHR5cGUgJXMgZGlzY29ubmVjdGVkXG4iLAo+PiAtCQkgICAgICBwb3J0X25hbWUoZGln X3BvcnQtPmJhc2UucG9ydCksCj4+IC0JCSAgICAgIHRjX3R5cGVfbmFtZShkaWdfcG9ydC0+dGNf dHlwZSkpOwo+PiAtCj4+IC0JZGlnX3BvcnQtPnRjX3R5cGUgPSBUQ19QT1JUX1VOS05PV047Cj4+ IC19Cj4+IC0KPj4gLS8qCj4+IC0gKiBUaGUgdHlwZS1DIHBvcnRzIGFyZSBkaWZmZXJlbnQgYmVj YXVzZSBldmVuIHdoZW4gdGhleSBhcmUgY29ubmVjdGVkLCB0aGV5IG1heQo+PiAtICogbm90IGJl IGF2YWlsYWJsZS91c2FibGUgYnkgdGhlIGdyYXBoaWNzIGRyaXZlcjogc2VlIHRoZSBjb21tZW50 IG9uCj4+IC0gKiBpY2xfdGNfcGh5X2Nvbm5lY3QoKS4gU28gaW4gb3VyIGRyaXZlciBpbnN0ZWFk IG9mIGFkZGluZyB0aGUgYWRkaXRpb25hbAo+PiAtICogY29uY2VwdCBvZiAidXNhYmxlIiBhbmQg bWFrZSBldmVyeXRoaW5nIGNoZWNrIGZvciAiY29ubmVjdGVkIGFuZCB1c2FibGUiIHdlCj4+IC0g KiBkZWZpbmUgYSBwb3J0IGFzICJjb25uZWN0ZWQiIHdoZW4gaXQgaXMgbm90IG9ubHkgY29ubmVj dGVkLCBidXQgYWxzbyB3aGVuIGl0Cj4+IC0gKiBpcyB1c2FibGUgYnkgdGhlIHJlc3Qgb2YgdGhl IGRyaXZlci4gVGhhdCBtYWludGFpbnMgdGhlIG9sZCBhc3N1bXB0aW9uIHRoYXQKPj4gLSAqIGNv bm5lY3RlZCBwb3J0cyBhcmUgdXNhYmxlLCBhbmQgYXZvaWRzIGV4cG9zaW5nIHRvIHRoZSB1c2Vy cyBvYmplY3RzIHRoZXkKPj4gLSAqIGNhbid0IHJlYWxseSB1c2UuCj4+IC0gKi8KPj4gLXN0YXRp YyBib29sIGljbF90Y19wb3J0X2Nvbm5lY3RlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYsCj4+IC0JCQkJICBzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICppbnRlbF9kaWdfcG9y dCkKPj4gLXsKPj4gLQllbnVtIHBvcnQgcG9ydCA9IGludGVsX2RpZ19wb3J0LT5iYXNlLnBvcnQ7 Cj4+IC0JZW51bSB0Y19wb3J0IHRjX3BvcnQgPSBpbnRlbF9wb3J0X3RvX3RjKGRldl9wcml2LCBw b3J0KTsKPj4gLQlib29sIGlzX2xlZ2FjeSwgaXNfdHlwZWMsIGlzX3RidDsKPj4gLQl1MzIgZHBz cDsKPj4gLQo+PiAtCS8qCj4+IC0JICogQ29tcGxhaW4gaWYgd2UgZ290IGEgbGVnYWN5IHBvcnQg SFBELCBidXQgVkJUIGRpZG4ndCBtYXJrIHRoZSBwb3J0IGFzCj4+IC0JICogbGVnYWN5LiBUcmVh dCB0aGUgcG9ydCBhcyBsZWdhY3kgZnJvbSBub3cgb24uCj4+IC0JICovCj4+IC0JaWYgKCFpbnRl bF9kaWdfcG9ydC0+dGNfbGVnYWN5X3BvcnQgJiYKPj4gLQkgICAgSTkxNV9SRUFEKFNERUlTUikg JiBTREVfVENfSE9UUExVR19JQ1AodGNfcG9ydCkpIHsKPj4gLQkJRFJNX0VSUk9SKCJWQlQgaW5j b3JyZWN0bHkgY2xhaW1zIHBvcnQgJWMgaXMgbm90IFR5cGVDIGxlZ2FjeVxuIiwKPj4gLQkJCSAg cG9ydF9uYW1lKHBvcnQpKTsKPj4gLQkJaW50ZWxfZGlnX3BvcnQtPnRjX2xlZ2FjeV9wb3J0ID0g dHJ1ZTsKPj4gLQl9Cj4+IC0JaXNfbGVnYWN5ID0gaW50ZWxfZGlnX3BvcnQtPnRjX2xlZ2FjeV9w b3J0Owo+PiAtCj4+IC0JLyoKPj4gLQkgKiBUaGUgc3BlYyBzYXlzIHdlIHNob3VsZG4ndCBiZSB1 c2luZyB0aGUgSVNSIGJpdHMgZm9yIGRldGVjdGluZwo+PiAtCSAqIGJldHdlZW4gVEMgYW5kIFRC VC4gV2Ugc2hvdWxkIHVzZSBERkxFWERQU1AuCj4+IC0JICovCj4+IC0JZHBzcCA9IEk5MTVfUkVB RChQT1JUX1RYX0RGTEVYRFBTUCk7Cj4+IC0JaXNfdHlwZWMgPSBkcHNwICYgVENfTElWRV9TVEFU RV9UQyh0Y19wb3J0KTsKPj4gLQlpc190YnQgPSBkcHNwICYgVENfTElWRV9TVEFURV9UQlQodGNf cG9ydCk7Cj4+IC0KPj4gLQlpZiAoIWlzX2xlZ2FjeSAmJiAhaXNfdHlwZWMgJiYgIWlzX3RidCkg ewo+PiAtCQlpY2xfdGNfcGh5X2Rpc2Nvbm5lY3QoZGV2X3ByaXYsIGludGVsX2RpZ19wb3J0KTsK Pj4gLQo+PiAtCQlyZXR1cm4gZmFsc2U7Cj4+IC0JfQo+PiAtCj4+IC0JaWNsX3VwZGF0ZV90Y19w b3J0X3R5cGUoZGV2X3ByaXYsIGludGVsX2RpZ19wb3J0LCBpc19sZWdhY3ksIGlzX3R5cGVjLAo+ PiAtCQkJCWlzX3RidCk7Cj4+IC0KPj4gLQlpZiAoIWljbF90Y19waHlfY29ubmVjdChkZXZfcHJp diwgaW50ZWxfZGlnX3BvcnQpKQo+PiAtCQlyZXR1cm4gZmFsc2U7Cj4+IC0KPj4gLQlyZXR1cm4g dHJ1ZTsKPj4gLX0KPj4gLQo+PiAgc3RhdGljIGJvb2wgaWNsX2RpZ2l0YWxfcG9ydF9jb25uZWN0 ZWQoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIpCj4+ICB7Cj4+ICAJc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShlbmNvZGVyLT5iYXNlLmRldik7Cj4+IEBA IC01NDI4LDcgKzUyMDcsNyBAQCBzdGF0aWMgYm9vbCBpY2xfZGlnaXRhbF9wb3J0X2Nvbm5lY3Rl ZChzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlcikKPj4gIAlpZiAoaW50ZWxfcG9ydF9pc19j b21ib3BoeShkZXZfcHJpdiwgZW5jb2Rlci0+cG9ydCkpCj4+ICAJCXJldHVybiBpY2xfY29tYm9f cG9ydF9jb25uZWN0ZWQoZGV2X3ByaXYsIGRpZ19wb3J0KTsKPj4gIAllbHNlIGlmIChpbnRlbF9w b3J0X2lzX3RjKGRldl9wcml2LCBlbmNvZGVyLT5wb3J0KSkKPj4gLQkJcmV0dXJuIGljbF90Y19w b3J0X2Nvbm5lY3RlZChkZXZfcHJpdiwgZGlnX3BvcnQpOwo+PiArCQlyZXR1cm4gaW50ZWxfdGNf cG9ydF9jb25uZWN0ZWQoZGlnX3BvcnQpOwo+PiAgCWVsc2UKPj4gIAkJTUlTU0lOR19DQVNFKGVu Y29kZXItPmhwZF9waW4pOwo+PiAgCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9kcC5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuaAo+PiBpbmRleCBk YTcwYjFhNDFjODMuLjY1N2JiYjFmNWVkMCAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfZHAuaAo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5o Cj4+IEBAIC0xMTIsOCArMTEyLDYgQEAgYm9vbCBpbnRlbF9kcF9nZXRfY29sb3JpbWV0cnlfc3Rh dHVzKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApOwo+PiAgaW50IGludGVsX2RwX2xpbmtfcmVx dWlyZWQoaW50IHBpeGVsX2Nsb2NrLCBpbnQgYnBwKTsKPj4gIGludCBpbnRlbF9kcF9tYXhfZGF0 YV9yYXRlKGludCBtYXhfbGlua19jbG9jaywgaW50IG1heF9sYW5lcyk7Cj4+ICBib29sIGludGVs X2RpZ2l0YWxfcG9ydF9jb25uZWN0ZWQoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIpOwo+ PiAtdm9pZCBpY2xfdGNfcGh5X2Rpc2Nvbm5lY3Qoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2LAo+PiAtCQkJICAgc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqZGlnX3BvcnQpOwo+ PiAgCj4+ICBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpbnRlbF9kcF91bnVzZWRfbGFuZV9t YXNrKGludCBsYW5lX2NvdW50KQo+PiAgewo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfdGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3RjLmMKPj4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMDAwMDAwLi43YTFiNTg3MDk0NWYKPj4g LS0tIC9kZXYvbnVsbAo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF90Yy5jCj4+ IEBAIC0wLDAgKzEsMjMwIEBACj4+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUCj4+ ICsvKgo+PiArICogQ29weXJpZ2h0IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KPj4gKyAqLwo+ Cj4gRnJvbSB0aGUgTml0cGlja3MgRGVwYXJ0bWVudCwgcGxlYXNlIGFkZCBhIGJsYW5rIGxpbmUg aGVyZS4KPgo+PiArI2luY2x1ZGUgImludGVsX2Rpc3BsYXkuaCIKPj4gKyNpbmNsdWRlICJpOTE1 X2Rydi5oIgo+PiArI2luY2x1ZGUgImludGVsX3RjLmgiCj4KPiBBbmQgc29ydCB0aGUgaW5jbHVk ZXMuCj4KPj4gKwo+PiArc3RhdGljIGNvbnN0IGNoYXIgKnRjX3R5cGVfbmFtZShlbnVtIHRjX3Bv cnRfdHlwZSB0eXBlKQo+PiArewo+PiArCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbmFtZXNb XSA9IHsKPj4gKwkJW1RDX1BPUlRfVU5LTk9XTl0gPSAidW5rbm93biIsCj4+ICsJCVtUQ19QT1JU X0xFR0FDWV0gPSAibGVnYWN5IiwKPj4gKwkJW1RDX1BPUlRfVFlQRUNdID0gInR5cGVjIiwKPj4g KwkJW1RDX1BPUlRfVEJUXSA9ICJ0YnQiLAo+PiArCX07Cj4+ICsKPj4gKwlpZiAoV0FSTl9PTih0 eXBlID49IEFSUkFZX1NJWkUobmFtZXMpKSkKPj4gKwkJdHlwZSA9IFRDX1BPUlRfVU5LTk9XTjsK Pj4gKwo+PiArCXJldHVybiBuYW1lc1t0eXBlXTsKPj4gK30KPj4gKwo+PiAraW50IGludGVsX3Rj X3BvcnRfZmlhX21heF9sYW5lX2NvdW50KHN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmRpZ19w b3J0KQo+PiArewo+PiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5 MTUoZGlnX3BvcnQtPmJhc2UuYmFzZS5kZXYpOwo+PiArCWVudW0gdGNfcG9ydCB0Y19wb3J0ID0g aW50ZWxfcG9ydF90b190YyhkZXZfcHJpdiwgZGlnX3BvcnQtPmJhc2UucG9ydCk7Cj4+ICsJaW50 ZWxfd2FrZXJlZl90IHdha2VyZWY7Cj4+ICsJdTMyIGxhbmVfaW5mbzsKPj4gKwo+PiArCWlmICh0 Y19wb3J0ID09IFBPUlRfVENfTk9ORSB8fCBkaWdfcG9ydC0+dGNfdHlwZSAhPSBUQ19QT1JUX1RZ UEVDKQo+PiArCQlyZXR1cm4gNDsKPj4gKwo+PiArCWxhbmVfaW5mbyA9IDA7Cj4+ICsJd2l0aF9p bnRlbF9kaXNwbGF5X3Bvd2VyKGRldl9wcml2LCBQT1dFUl9ET01BSU5fRElTUExBWV9DT1JFLCB3 YWtlcmVmKQo+PiArCQlsYW5lX2luZm8gPSAoSTkxNV9SRUFEKFBPUlRfVFhfREZMRVhEUFNQKSAm Cj4+ICsJCQkgICAgIERQX0xBTkVfQVNTSUdOTUVOVF9NQVNLKHRjX3BvcnQpKSA+Pgo+PiArCQkJ CURQX0xBTkVfQVNTSUdOTUVOVF9TSElGVCh0Y19wb3J0KTsKPj4gKwo+PiArCXN3aXRjaCAobGFu ZV9pbmZvKSB7Cj4+ICsJZGVmYXVsdDoKPj4gKwkJTUlTU0lOR19DQVNFKGxhbmVfaW5mbyk7Cj4+ ICsJY2FzZSAxOgo+PiArCWNhc2UgMjoKPj4gKwljYXNlIDQ6Cj4+ICsJY2FzZSA4Ogo+PiArCQly ZXR1cm4gMTsKPj4gKwljYXNlIDM6Cj4+ICsJY2FzZSAxMjoKPj4gKwkJcmV0dXJuIDI7Cj4+ICsJ Y2FzZSAxNToKPj4gKwkJcmV0dXJuIDQ7Cj4+ICsJfQo+PiArfQo+PiArCj4+ICsvKgo+PiArICog VGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRzIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBDb25uZWN0IEZs b3cgZGVzY3JpYmVkIGJ5IG91cgo+PiArICogc3BlY2lmaWNhdGlvbiwgR2VuMTEgVHlwZUMgUHJv Z3JhbW1pbmcgY2hhcHRlci4gVGhlIHJlc3Qgb2YgdGhlIGZsb3cgKHJlYWRpbmcKPj4gKyAqIGxh bmVzLCBFRElELCBldGMpIGlzIGRvbmUgYXMgbmVlZGVkIGluIHRoZSB0eXBpY2FsIHBsYWNlcy4K Pj4gKyAqCj4+ICsgKiBVbmxpa2UgdGhlIG90aGVyIHBvcnRzLCB0eXBlLUMgcG9ydHMgYXJlIG5v dCBhdmFpbGFibGUgdG8gdXNlIGFzIHNvb24gYXMgd2UKPj4gKyAqIGdldCBhIGhvdHBsdWcuIFRo ZSB0eXBlLUMgUEhZcyBjYW4gYmUgc2hhcmVkIGJldHdlZW4gbXVsdGlwbGUgY29udHJvbGxlcnM6 Cj4+ICsgKiBkaXNwbGF5LCBVU0IsIGV0Yy4gQXMgYSByZXN1bHQsIGhhbmRzaGFraW5nIHRocm91 Z2ggRklBIGlzIHJlcXVpcmVkIGFyb3VuZAo+PiArICogY29ubmVjdCBhbmQgZGlzY29ubmVjdCB0 byBjbGVhbmx5IHRyYW5zZmVyIG93bmVyc2hpcCB3aXRoIHRoZSBjb250cm9sbGVyIGFuZAo+PiAr ICogc2V0IHRoZSB0eXBlLUMgcG93ZXIgc3RhdGUuCj4+ICsgKgo+PiArICogV2UgY291bGQgb3B0 IHRvIG9ubHkgZG8gdGhlIGNvbm5lY3QgZmxvdyB3aGVuIHdlIGFjdHVhbGx5IHRyeSB0byB1c2Ug dGhlIEFVWAo+PiArICogY2hhbm5lbHMgb3IgZG8gYSBtb2Rlc2V0LCB0aGVuIGltbWVkaWF0ZWx5 IHJ1biB0aGUgZGlzY29ubmVjdCBmbG93IGFmdGVyCj4+ICsgKiB1c2FnZSwgYnV0IHRoZXJlIGFy ZSBzb21lIGltcGxpY2F0aW9ucyBvbiB0aGlzIGZvciBhIGR5bmFtaWMgZW52aXJvbm1lbnQ6Cj4+ ICsgKiB0aGluZ3MgbWF5IGdvIGF3YXkgb3IgY2hhbmdlIGJlaGluZCBvdXIgYmFja3MuIFNvIGZv ciBub3cgb3VyIGRyaXZlciBpcwo+PiArICogYWx3YXlzIHRyeWluZyB0byBhY3F1aXJlIG93bmVy c2hpcCBvZiB0aGUgY29udHJvbGxlciBhcyBzb29uIGFzIGl0IGdldHMgYW4KPj4gKyAqIGludGVy cnVwdCAob3IgcG9sbHMgc3RhdGUgYW5kIHNlZXMgYSBwb3J0IGlzIGNvbm5lY3RlZCkgYW5kIG9u bHkgZ2l2ZXMgaXQKPj4gKyAqIGJhY2sgd2hlbiBpdCBzZWVzIGEgZGlzY29ubmVjdC4gSW1wbGVt ZW50YXRpb24gb2YgYSBtb3JlIGZpbmUtZ3JhaW5lZCBtb2RlbAo+PiArICogd2lsbCByZXF1aXJl IGEgbG90IG9mIGNvb3JkaW5hdGlvbiB3aXRoIHVzZXIgc3BhY2UgYW5kIHRob3JvdWdoIHRlc3Rp bmcgZm9yCj4+ICsgKiB0aGUgZXh0cmEgcG9zc2libGUgY2FzZXMuCj4+ICsgKi8KPj4gK3N0YXRp YyBib29sIGljbF90Y19waHlfY29ubmVjdChzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdf cG9ydCkKPj4gK3sKPj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19p OTE1KGRpZ19wb3J0LT5iYXNlLmJhc2UuZGV2KTsKPj4gKwllbnVtIHRjX3BvcnQgdGNfcG9ydCA9 IGludGVsX3BvcnRfdG9fdGMoZGV2X3ByaXYsIGRpZ19wb3J0LT5iYXNlLnBvcnQpOwo+PiArCXUz MiB2YWw7Cj4+ICsKPj4gKwlpZiAoZGlnX3BvcnQtPnRjX3R5cGUgIT0gVENfUE9SVF9MRUdBQ1kg JiYKPj4gKwkgICAgZGlnX3BvcnQtPnRjX3R5cGUgIT0gVENfUE9SVF9UWVBFQykKPj4gKwkJcmV0 dXJuIHRydWU7Cj4+ICsKPj4gKwl2YWwgPSBJOTE1X1JFQUQoUE9SVF9UWF9ERkxFWERQUE1TKTsK Pj4gKwlpZiAoISh2YWwgJiBEUF9QSFlfTU9ERV9TVEFUVVNfQ09NUExFVEVEKHRjX3BvcnQpKSkg ewo+PiArCQlEUk1fREVCVUdfS01TKCJEUCBQSFkgZm9yIFRDIHBvcnQgJWQgbm90IHJlYWR5XG4i LCB0Y19wb3J0KTsKPj4gKwkJV0FSTl9PTihkaWdfcG9ydC0+dGNfbGVnYWN5X3BvcnQpOwo+PiAr CQlyZXR1cm4gZmFsc2U7Cj4+ICsJfQo+PiArCj4+ICsJLyoKPj4gKwkgKiBUaGlzIGZ1bmN0aW9u IG1heSBiZSBjYWxsZWQgbWFueSB0aW1lcyBpbiBhIHJvdyB3aXRob3V0IGFuIEhQRCBldmVudAo+ PiArCSAqIGluIGJldHdlZW4sIHNvIHRyeSB0byBhdm9pZCB0aGUgd3JpdGUgd2hlbiB3ZSBjYW4u Cj4+ICsJICovCj4+ICsJdmFsID0gSTkxNV9SRUFEKFBPUlRfVFhfREZMRVhEUENTU1MpOwo+PiAr CWlmICghKHZhbCAmIERQX1BIWV9NT0RFX1NUQVRVU19OT1RfU0FGRSh0Y19wb3J0KSkpIHsKPj4g KwkJdmFsIHw9IERQX1BIWV9NT0RFX1NUQVRVU19OT1RfU0FGRSh0Y19wb3J0KTsKPj4gKwkJSTkx NV9XUklURShQT1JUX1RYX0RGTEVYRFBDU1NTLCB2YWwpOwo+PiArCX0KPj4gKwo+PiArCS8qCj4+ ICsJICogTm93IHdlIGhhdmUgdG8gcmUtY2hlY2sgdGhlIGxpdmUgc3RhdGUsIGluIGNhc2UgdGhl IHBvcnQgcmVjZW50bHkKPj4gKwkgKiBiZWNhbWUgZGlzY29ubmVjdGVkLiBOb3QgbmVjZXNzYXJ5 IGZvciBsZWdhY3kgbW9kZS4KPj4gKwkgKi8KPj4gKwlpZiAoZGlnX3BvcnQtPnRjX3R5cGUgPT0g VENfUE9SVF9UWVBFQyAmJgo+PiArCSAgICAhKEk5MTVfUkVBRChQT1JUX1RYX0RGTEVYRFBTUCkg JiBUQ19MSVZFX1NUQVRFX1RDKHRjX3BvcnQpKSkgewo+PiArCQlEUk1fREVCVUdfS01TKCJUQyBQ SFkgJWQgc3VkZGVuIGRpc2Nvbm5lY3QuXG4iLCB0Y19wb3J0KTsKPj4gKwkJaWNsX3RjX3BoeV9k aXNjb25uZWN0KGRpZ19wb3J0KTsKPj4gKwkJcmV0dXJuIGZhbHNlOwo+PiArCX0KPj4gKwo+PiAr CXJldHVybiB0cnVlOwo+PiArfQo+PiArCj4+ICsvKgo+PiArICogU2VlIHRoZSBjb21tZW50IGF0 IHRoZSBjb25uZWN0IGZ1bmN0aW9uLiBUaGlzIGltcGxlbWVudHMgdGhlIERpc2Nvbm5lY3QKPj4g KyAqIEZsb3cuCj4+ICsgKi8KPj4gK3ZvaWQgaWNsX3RjX3BoeV9kaXNjb25uZWN0KHN0cnVjdCBp bnRlbF9kaWdpdGFsX3BvcnQgKmRpZ19wb3J0KQo+PiArewo+PiArCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGlnX3BvcnQtPmJhc2UuYmFzZS5kZXYpOwo+PiAr CWVudW0gdGNfcG9ydCB0Y19wb3J0ID0gaW50ZWxfcG9ydF90b190YyhkZXZfcHJpdiwgZGlnX3Bv cnQtPmJhc2UucG9ydCk7Cj4+ICsKPj4gKwlpZiAoZGlnX3BvcnQtPnRjX3R5cGUgPT0gVENfUE9S VF9VTktOT1dOKQo+PiArCQlyZXR1cm47Cj4+ICsKPj4gKwkvKgo+PiArCSAqIFRCVCBkaXNjb25u ZWN0aW9uIGZsb3cgaXMgcmVhZCB0aGUgbGl2ZSBzdGF0dXMsIHdoYXQgd2FzIGRvbmUgaW4KPj4g KwkgKiBjYWxsZXIuCj4+ICsJICovCj4+ICsJaWYgKGRpZ19wb3J0LT50Y190eXBlID09IFRDX1BP UlRfVFlQRUMgfHwKPj4gKwkgICAgZGlnX3BvcnQtPnRjX3R5cGUgPT0gVENfUE9SVF9MRUdBQ1kp IHsKPj4gKwkJdTMyIHZhbDsKPj4gKwo+PiArCQl2YWwgPSBJOTE1X1JFQUQoUE9SVF9UWF9ERkxF WERQQ1NTUyk7Cj4+ICsJCXZhbCAmPSB+RFBfUEhZX01PREVfU1RBVFVTX05PVF9TQUZFKHRjX3Bv cnQpOwo+PiArCQlJOTE1X1dSSVRFKFBPUlRfVFhfREZMRVhEUENTU1MsIHZhbCk7Cj4+ICsJfQo+ PiArCj4+ICsJRFJNX0RFQlVHX0tNUygiUG9ydCAlYyBUQyB0eXBlICVzIGRpc2Nvbm5lY3RlZFxu IiwKPj4gKwkJICAgICAgcG9ydF9uYW1lKGRpZ19wb3J0LT5iYXNlLnBvcnQpLAo+PiArCQkgICAg ICB0Y190eXBlX25hbWUoZGlnX3BvcnQtPnRjX3R5cGUpKTsKPj4gKwo+PiArCWRpZ19wb3J0LT50 Y190eXBlID0gVENfUE9SVF9VTktOT1dOOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBpY2xf dXBkYXRlX3RjX3BvcnRfdHlwZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4+ ICsJCQkJICAgIHN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmludGVsX2RpZ19wb3J0LAo+PiAr CQkJCSAgICBib29sIGlzX2xlZ2FjeSwgYm9vbCBpc190eXBlYywgYm9vbCBpc190YnQpCj4+ICt7 Cj4+ICsJZW51bSBwb3J0IHBvcnQgPSBpbnRlbF9kaWdfcG9ydC0+YmFzZS5wb3J0Owo+PiArCWVu dW0gdGNfcG9ydF90eXBlIG9sZF90eXBlID0gaW50ZWxfZGlnX3BvcnQtPnRjX3R5cGU7Cj4+ICsK Pj4gKwlXQVJOX09OKGlzX2xlZ2FjeSArIGlzX3R5cGVjICsgaXNfdGJ0ICE9IDEpOwo+PiArCj4+ ICsJaWYgKGlzX2xlZ2FjeSkKPj4gKwkJaW50ZWxfZGlnX3BvcnQtPnRjX3R5cGUgPSBUQ19QT1JU X0xFR0FDWTsKPj4gKwllbHNlIGlmIChpc190eXBlYykKPj4gKwkJaW50ZWxfZGlnX3BvcnQtPnRj X3R5cGUgPSBUQ19QT1JUX1RZUEVDOwo+PiArCWVsc2UgaWYgKGlzX3RidCkKPj4gKwkJaW50ZWxf ZGlnX3BvcnQtPnRjX3R5cGUgPSBUQ19QT1JUX1RCVDsKPj4gKwllbHNlCj4+ICsJCXJldHVybjsK Pj4gKwo+PiArCS8qIFR5cGVzIGFyZSBub3Qgc3VwcG9zZWQgdG8gYmUgY2hhbmdlZCBhdCBydW50 aW1lLiAqLwo+PiArCVdBUk5fT04ob2xkX3R5cGUgIT0gVENfUE9SVF9VTktOT1dOICYmCj4+ICsJ CW9sZF90eXBlICE9IGludGVsX2RpZ19wb3J0LT50Y190eXBlKTsKPj4gKwo+PiArCWlmIChvbGRf dHlwZSAhPSBpbnRlbF9kaWdfcG9ydC0+dGNfdHlwZSkKPj4gKwkJRFJNX0RFQlVHX0tNUygiUG9y dCAlYyBoYXMgVEMgdHlwZSAlc1xuIiwgcG9ydF9uYW1lKHBvcnQpLAo+PiArCQkJICAgICAgdGNf dHlwZV9uYW1lKGludGVsX2RpZ19wb3J0LT50Y190eXBlKSk7Cj4+ICt9Cj4+ICsKPj4gKwo+PiAr LyoKPj4gKyAqIFRoZSB0eXBlLUMgcG9ydHMgYXJlIGRpZmZlcmVudCBiZWNhdXNlIGV2ZW4gd2hl biB0aGV5IGFyZSBjb25uZWN0ZWQsIHRoZXkgbWF5Cj4+ICsgKiBub3QgYmUgYXZhaWxhYmxlL3Vz YWJsZSBieSB0aGUgZ3JhcGhpY3MgZHJpdmVyOiBzZWUgdGhlIGNvbW1lbnQgb24KPj4gKyAqIGlj bF90Y19waHlfY29ubmVjdCgpLiBTbyBpbiBvdXIgZHJpdmVyIGluc3RlYWQgb2YgYWRkaW5nIHRo ZSBhZGRpdGlvbmFsCj4+ICsgKiBjb25jZXB0IG9mICJ1c2FibGUiIGFuZCBtYWtlIGV2ZXJ5dGhp bmcgY2hlY2sgZm9yICJjb25uZWN0ZWQgYW5kIHVzYWJsZSIgd2UKPj4gKyAqIGRlZmluZSBhIHBv cnQgYXMgImNvbm5lY3RlZCIgd2hlbiBpdCBpcyBub3Qgb25seSBjb25uZWN0ZWQsIGJ1dCBhbHNv IHdoZW4gaXQKPj4gKyAqIGlzIHVzYWJsZSBieSB0aGUgcmVzdCBvZiB0aGUgZHJpdmVyLiBUaGF0 IG1haW50YWlucyB0aGUgb2xkIGFzc3VtcHRpb24gdGhhdAo+PiArICogY29ubmVjdGVkIHBvcnRz IGFyZSB1c2FibGUsIGFuZCBhdm9pZHMgZXhwb3NpbmcgdG8gdGhlIHVzZXJzIG9iamVjdHMgdGhl eQo+PiArICogY2FuJ3QgcmVhbGx5IHVzZS4KPj4gKyAqLwo+PiArYm9vbCBpbnRlbF90Y19wb3J0 X2Nvbm5lY3RlZChzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdfcG9ydCkKPj4gK3sKPj4g KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRpZ19wb3J0LT5i YXNlLmJhc2UuZGV2KTsKPj4gKwllbnVtIHBvcnQgcG9ydCA9IGRpZ19wb3J0LT5iYXNlLnBvcnQ7 Cj4+ICsJZW51bSB0Y19wb3J0IHRjX3BvcnQgPSBpbnRlbF9wb3J0X3RvX3RjKGRldl9wcml2LCBw b3J0KTsKPj4gKwlib29sIGlzX2xlZ2FjeSwgaXNfdHlwZWMsIGlzX3RidDsKPj4gKwl1MzIgZHBz cDsKPj4gKwo+PiArCS8qCj4+ICsJICogQ29tcGxhaW4gaWYgd2UgZ290IGEgbGVnYWN5IHBvcnQg SFBELCBidXQgVkJUIGRpZG4ndCBtYXJrIHRoZSBwb3J0IGFzCj4+ICsJICogbGVnYWN5LiBUcmVh dCB0aGUgcG9ydCBhcyBsZWdhY3kgZnJvbSBub3cgb24uCj4+ICsJICovCj4+ICsJaWYgKCFkaWdf cG9ydC0+dGNfbGVnYWN5X3BvcnQgJiYKPj4gKwkgICAgSTkxNV9SRUFEKFNERUlTUikgJiBTREVf VENfSE9UUExVR19JQ1AodGNfcG9ydCkpIHsKPj4gKwkJRFJNX0VSUk9SKCJWQlQgaW5jb3JyZWN0 bHkgY2xhaW1zIHBvcnQgJWMgaXMgbm90IFR5cGVDIGxlZ2FjeVxuIiwKPj4gKwkJCSAgcG9ydF9u YW1lKHBvcnQpKTsKPj4gKwkJZGlnX3BvcnQtPnRjX2xlZ2FjeV9wb3J0ID0gdHJ1ZTsKPj4gKwl9 Cj4+ICsJaXNfbGVnYWN5ID0gZGlnX3BvcnQtPnRjX2xlZ2FjeV9wb3J0Owo+PiArCj4+ICsJLyoK Pj4gKwkgKiBUaGUgc3BlYyBzYXlzIHdlIHNob3VsZG4ndCBiZSB1c2luZyB0aGUgSVNSIGJpdHMg Zm9yIGRldGVjdGluZwo+PiArCSAqIGJldHdlZW4gVEMgYW5kIFRCVC4gV2Ugc2hvdWxkIHVzZSBE RkxFWERQU1AuCj4+ICsJICovCj4+ICsJZHBzcCA9IEk5MTVfUkVBRChQT1JUX1RYX0RGTEVYRFBT UCk7Cj4+ICsJaXNfdHlwZWMgPSBkcHNwICYgVENfTElWRV9TVEFURV9UQyh0Y19wb3J0KTsKPj4g Kwlpc190YnQgPSBkcHNwICYgVENfTElWRV9TVEFURV9UQlQodGNfcG9ydCk7Cj4+ICsKPj4gKwlp ZiAoIWlzX2xlZ2FjeSAmJiAhaXNfdHlwZWMgJiYgIWlzX3RidCkgewo+PiArCQlpY2xfdGNfcGh5 X2Rpc2Nvbm5lY3QoZGlnX3BvcnQpOwo+PiArCj4+ICsJCXJldHVybiBmYWxzZTsKPj4gKwl9Cj4+ ICsKPj4gKwlpY2xfdXBkYXRlX3RjX3BvcnRfdHlwZShkZXZfcHJpdiwgZGlnX3BvcnQsIGlzX2xl Z2FjeSwgaXNfdHlwZWMsCj4+ICsJCQkJaXNfdGJ0KTsKPj4gKwo+PiArCWlmICghaWNsX3RjX3Bo eV9jb25uZWN0KGRpZ19wb3J0KSkKPj4gKwkJcmV0dXJuIGZhbHNlOwo+PiArCj4+ICsJcmV0dXJu IHRydWU7Cj4+ICt9Cj4+ICsKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX3RjLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF90Yy5oCj4+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAwMDAwMC4uOTRjNjJhYzRhMTYyCj4+IC0tLSAvZGV2 L251bGwKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdGMuaAo+PiBAQCAtMCww ICsxLDEzIEBACj4KPiBTUERYIGhlYWRlciBoZXJlIHBsZWFzZS4KPgo+PiArI2lmbmRlZiBfX0lO VEVMX1RDX0hfXwo+PiArI2RlZmluZSBfX0lOVEVMX1RDX0hfXwo+PiArCj4+ICsjaW5jbHVkZSA8 bGludXgvdHlwZXMuaD4KPj4gKwo+PiArc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydDsKPj4gKwo+ PiArdm9pZCBpY2xfdGNfcGh5X2Rpc2Nvbm5lY3Qoc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAq ZGlnX3BvcnQpOwo+Cj4gSSdkIGxpa2UgdG8gc2VlIHRoaXMgbmFtZWQgaW50ZWxfdGNfKiBpbiB0 aGUgZnV0dXJlLgo+Cj4gQlIsCj4gSmFuaS4KPgo+Cj4+ICsKPj4gK2Jvb2wgaW50ZWxfdGNfcG9y dF9jb25uZWN0ZWQoc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqZGlnX3BvcnQpOwo+PiAraW50 IGludGVsX3RjX3BvcnRfZmlhX21heF9sYW5lX2NvdW50KHN0cnVjdCBpbnRlbF9kaWdpdGFsX3Bv cnQgKmRpZ19wb3J0KTsKPj4gKwo+PiArI2VuZGlmIC8qIF9fSU5URUxfVENfSF9fICovCgotLSAK SmFuaSBOaWt1bGEsIEludGVsIE9wZW4gU291cmNlIEdyYXBoaWNzIENlbnRlcgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBs aXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVz a3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZng=