From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sagar Arun Kamble Subject: Re: [PATCH 2/9] drm/i915: Move uC fw helper code into dedicated files Date: Sat, 30 Sep 2017 20:13:35 +0530 Message-ID: <1ccaaa9f-3cd6-e17a-9e57-8da2c5efa1dc@intel.com> References: <20170929174147.41324-1-michal.wajdeczko@intel.com> <20170929174147.41324-3-michal.wajdeczko@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5DC426E19A for ; Sat, 30 Sep 2017 14:43:39 +0000 (UTC) In-Reply-To: Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Michal Wajdeczko , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org CgpPbiA5LzMwLzIwMTcgMzozMSBQTSwgU2FnYXIgQXJ1biBLYW1ibGUgd3JvdGU6Cj4KPgo+IE9u IDkvMjkvMjAxNyAxMToxMSBQTSwgTWljaGFsIFdhamRlY3prbyB3cm90ZToKPj4gVGhpcyBpcyBh IHByZXJlcXVpc2l0ZSB0byB1bmJsb2NrIG5leHQgc3RlcHMuCj4+IE5vIGZ1bmN0aW9uYWwgY2hh bmdlcywgb25seSBzL2Rldl9wcml2L2k5MTUKPj4KPj4gU2lnbmVkLW9mZi1ieTogTWljaGFsIFdh amRlY3prbyA8bWljaGFsLndhamRlY3prb0BpbnRlbC5jb20+Cj4+IENjOiBKb29uYXMgTGFodGlu ZW4gPGpvb25hcy5sYWh0aW5lbkBsaW51eC5pbnRlbC5jb20+Cj4+IENjOiBDaHJpcyBXaWxzb24g PGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KPj4gQ2M6IFNhZ2FyIEFydW4gS2FtYmxlIDxzYWdh ci5hLmthbWJsZUBpbnRlbC5jb20+Cj4gUmV2aWV3ZWQtYnk6IFNhZ2FyIEFydW4gS2FtYmxlIDxz YWdhci5hLmthbWJsZUBpbnRlbC5jb20+Ckp1c3QgcmVhbGl6ZWQgdGhhdCB1QyBzcGVjaWZpYyB1 Y19jc3NfaGVhZGVyIGRlY2xhcmF0aW9uIGlzIHN0aWxsIApwcmVzZW50IGluIGludGVsX2d1Y19m d2lmLmguIGlzIGl0IGdvb2QgaWRlYSB0byBwdWxsIHRoaXMgdG8gaW50ZWxfdWNfZncuaD8KPj4g LS0tCj4+IMKgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlwqDCoMKgwqDCoCB8wqDCoCAx ICsKPj4gwqAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdWMuY8KgwqDCoCB8IDE2MyAKPj4g KystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+PiDCoCBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF91Yy5owqDCoMKgIHzCoCA2NyArLS0tLS0tLS0tLS0tLQo+PiDCoCBkcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF91Y19mdy5jIHwgMTc3IAo+PiArKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrCj4+IMKgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3VjX2Z3 LmggfMKgIDk1ICsrKysrKysrKysrKysrKysrKysrCj4+IMKgIDUgZmlsZXMgY2hhbmdlZCwgMjgw IGluc2VydGlvbnMoKyksIDIyMyBkZWxldGlvbnMoLSkKPj4gwqAgY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3VjX2Z3LmMKPj4gwqAgY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3VjX2Z3LmgKPj4KPj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlIAo+PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L01ha2VmaWxlCj4+IGluZGV4IDUxODJlM2QuLjQ4NTBmMjYgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01h a2VmaWxlCj4+IEBAIC01OSw2ICs1OSw3IEBAIGk5MTUteSArPSBpOTE1X2NtZF9wYXJzZXIubyBc Cj4+IMKgIMKgICMgZ2VuZXJhbC1wdXJwb3NlIG1pY3JvY29udHJvbGxlciAoR3VDKSBzdXBwb3J0 Cj4+IMKgIGk5MTUteSArPSBpbnRlbF91Yy5vIFwKPj4gK8KgwqDCoMKgwqAgaW50ZWxfdWNfZncu byBcCj4+IMKgwqDCoMKgwqDCoMKgIGludGVsX2d1Y19jdC5vIFwKPj4gwqDCoMKgwqDCoMKgwqAg aW50ZWxfZ3VjX2xvZy5vIFwKPj4gwqDCoMKgwqDCoMKgwqAgaW50ZWxfZ3VjX2xvYWRlci5vIFwK Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3VjLmMgCj4+IGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdWMuYwo+PiBpbmRleCAyNzc0Nzc4Li45NDI2Y2MxIDEw MDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91Yy5jCj4+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3VjLmMKPj4gQEAgLTI2LDE5ICsyNiw2IEBACj4+IMKg ICNpbmNsdWRlICJpbnRlbF91Yy5oIgo+PiDCoCAjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4K Pj4gwqAgLS8qIENsZWFucyB1cCB1QyBmaXJtd2FyZSBieSByZWxlYXNpbmcgdGhlIGZpcm13YXJl IEdFTSBvYmouCj4+IC0gKi8KPj4gLXN0YXRpYyB2b2lkIF9faW50ZWxfdWNfZndfZmluaShzdHJ1 Y3QgaW50ZWxfdWNfZncgKnVjX2Z3KQo+PiAtewo+PiAtwqDCoMKgIHN0cnVjdCBkcm1faTkxNV9n ZW1fb2JqZWN0ICpvYmo7Cj4+IC0KPj4gLcKgwqDCoCBvYmogPSBmZXRjaF9hbmRfemVybygmdWNf ZnctPm9iaik7Cj4+IC3CoMKgwqAgaWYgKG9iaikKPj4gLcKgwqDCoMKgwqDCoMKgIGk5MTVfZ2Vt X29iamVjdF9wdXQob2JqKTsKPj4gLQo+PiAtwqDCoMKgIHVjX2Z3LT5mZXRjaF9zdGF0dXMgPSBJ TlRFTF9VQ19GSVJNV0FSRV9OT05FOwo+PiAtfQo+PiAtCj4+IMKgIC8qIFJlc2V0IEd1QyBwcm92 aWRpbmcgdXMgd2l0aCBmcmVzaCBzdGF0ZSBmb3IgYm90aCBHdUMgYW5kIEh1Qy4KPj4gwqDCoCAq Lwo+PiDCoCBzdGF0aWMgaW50IF9faW50ZWxfdWNfcmVzZXRfaHcoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KQo+PiBAQCAtMTEyLDE1NCArOTksMTYgQEAgdm9pZCBpbnRlbF91Y19p bml0X2Vhcmx5KHN0cnVjdCAKPj4gZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4+IMKgwqDC oMKgwqAgZ3VjLT5ub3RpZnkgPSBnZW44X2d1Y19yYWlzZV9pcnE7Cj4+IMKgIH0KPj4gwqAgLXN0 YXRpYyB2b2lkIGZldGNoX3VjX2Z3KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwK Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGludGVsX3VjX2Z3ICp1Y19mdykKPj4g LXsKPj4gLcKgwqDCoCBzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGRldl9wcml2LT5kcm0ucGRldjsK Pj4gLcKgwqDCoCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwo+PiAtwqDCoMKgIGNv bnN0IHN0cnVjdCBmaXJtd2FyZSAqZncgPSBOVUxMOwo+PiAtwqDCoMKgIHN0cnVjdCB1Y19jc3Nf aGVhZGVyICpjc3M7Cj4+IC3CoMKgwqAgc2l6ZV90IHNpemU7Cj4+IC3CoMKgwqAgaW50IGVycjsK Pj4gLQo+PiAtwqDCoMKgIGlmICghdWNfZnctPnBhdGgpCj4+IC3CoMKgwqDCoMKgwqDCoCByZXR1 cm47Cj4+IC0KPj4gLcKgwqDCoCB1Y19mdy0+ZmV0Y2hfc3RhdHVzID0gSU5URUxfVUNfRklSTVdB UkVfUEVORElORzsKPj4gLQo+PiAtwqDCoMKgIERSTV9ERUJVR19EUklWRVIoImJlZm9yZSByZXF1 ZXN0aW5nIGZpcm13YXJlOiB1QyBmdyBmZXRjaCBzdGF0dXMgCj4+ICVzXG4iLAo+PiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGludGVsX3VjX2Z3X3N0YXR1c19yZXByKHVjX2Z3LT5mZXRjaF9z dGF0dXMpKTsKPj4gLQo+PiAtwqDCoMKgIGVyciA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCB1Y19m dy0+cGF0aCwgJnBkZXYtPmRldik7Cj4+IC3CoMKgwqAgaWYgKGVycikKPj4gLcKgwqDCoMKgwqDC oMKgIGdvdG8gZmFpbDsKPj4gLcKgwqDCoCBpZiAoIWZ3KQo+PiAtwqDCoMKgwqDCoMKgwqAgZ290 byBmYWlsOwo+PiAtCj4+IC3CoMKgwqAgRFJNX0RFQlVHX0RSSVZFUigiZmV0Y2ggdUMgZncgZnJv bSAlcyBzdWNjZWVkZWQsIGZ3ICVwXG4iLAo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVj X2Z3LT5wYXRoLCBmdyk7Cj4+IC0KPj4gLcKgwqDCoCAvKiBDaGVjayB0aGUgc2l6ZSBvZiB0aGUg YmxvYiBiZWZvcmUgZXhhbWluaW5nIGJ1ZmZlciBjb250ZW50cyAqLwo+PiAtwqDCoMKgIGlmIChm dy0+c2l6ZSA8IHNpemVvZihzdHJ1Y3QgdWNfY3NzX2hlYWRlcikpIHsKPj4gLcKgwqDCoMKgwqDC oMKgIERSTV9OT1RFKCJGaXJtd2FyZSBoZWFkZXIgaXMgbWlzc2luZ1xuIik7Cj4+IC3CoMKgwqDC oMKgwqDCoCBnb3RvIGZhaWw7Cj4+IC3CoMKgwqAgfQo+PiAtCj4+IC3CoMKgwqAgY3NzID0gKHN0 cnVjdCB1Y19jc3NfaGVhZGVyICopZnctPmRhdGE7Cj4+IC0KPj4gLcKgwqDCoCAvKiBGaXJtd2Fy ZSBiaXRzIGFsd2F5cyBzdGFydCBmcm9tIGhlYWRlciAqLwo+PiAtwqDCoMKgIHVjX2Z3LT5oZWFk ZXJfb2Zmc2V0ID0gMDsKPj4gLcKgwqDCoCB1Y19mdy0+aGVhZGVyX3NpemUgPSAoY3NzLT5oZWFk ZXJfc2l6ZV9kdyAtIGNzcy0+bW9kdWx1c19zaXplX2R3IC0KPj4gLcKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgY3NzLT5rZXlfc2l6ZV9kdyAtIGNzcy0+ZXhwb25lbnRfc2l6ZV9k dykgKiAKPj4gc2l6ZW9mKHUzMik7Cj4+IC0KPj4gLcKgwqDCoCBpZiAodWNfZnctPmhlYWRlcl9z aXplICE9IHNpemVvZihzdHJ1Y3QgdWNfY3NzX2hlYWRlcikpIHsKPj4gLcKgwqDCoMKgwqDCoMKg IERSTV9OT1RFKCJDU1MgaGVhZGVyIGRlZmluaXRpb24gbWlzbWF0Y2hcbiIpOwo+PiAtwqDCoMKg wqDCoMKgwqAgZ290byBmYWlsOwo+PiAtwqDCoMKgIH0KPj4gLQo+PiAtwqDCoMKgIC8qIHRoZW4s IHVDb2RlICovCj4+IC3CoMKgwqAgdWNfZnctPnVjb2RlX29mZnNldCA9IHVjX2Z3LT5oZWFkZXJf b2Zmc2V0ICsgdWNfZnctPmhlYWRlcl9zaXplOwo+PiAtwqDCoMKgIHVjX2Z3LT51Y29kZV9zaXpl ID0gKGNzcy0+c2l6ZV9kdyAtIGNzcy0+aGVhZGVyX3NpemVfZHcpICogCj4+IHNpemVvZih1MzIp Owo+PiAtCj4+IC3CoMKgwqAgLyogbm93IFJTQSAqLwo+PiAtwqDCoMKgIGlmIChjc3MtPmtleV9z aXplX2R3ICE9IFVPU19SU0FfU0NSQVRDSF9NQVhfQ09VTlQpIHsKPj4gLcKgwqDCoMKgwqDCoMKg IERSTV9OT1RFKCJSU0Ega2V5IHNpemUgaXMgYmFkXG4iKTsKPj4gLcKgwqDCoMKgwqDCoMKgIGdv dG8gZmFpbDsKPj4gLcKgwqDCoCB9Cj4+IC3CoMKgwqAgdWNfZnctPnJzYV9vZmZzZXQgPSB1Y19m dy0+dWNvZGVfb2Zmc2V0ICsgdWNfZnctPnVjb2RlX3NpemU7Cj4+IC3CoMKgwqAgdWNfZnctPnJz YV9zaXplID0gY3NzLT5rZXlfc2l6ZV9kdyAqIHNpemVvZih1MzIpOwo+PiAtCj4+IC3CoMKgwqAg LyogQXQgbGVhc3QsIGl0IHNob3VsZCBoYXZlIGhlYWRlciwgdUNvZGUgYW5kIFJTQS4gU2l6ZSBv ZiBhbGwgCj4+IHRocmVlLiAqLwo+PiAtwqDCoMKgIHNpemUgPSB1Y19mdy0+aGVhZGVyX3NpemUg KyB1Y19mdy0+dWNvZGVfc2l6ZSArIHVjX2Z3LT5yc2Ffc2l6ZTsKPj4gLcKgwqDCoCBpZiAoZnct PnNpemUgPCBzaXplKSB7Cj4+IC3CoMKgwqDCoMKgwqDCoCBEUk1fTk9URSgiTWlzc2luZyBmaXJt d2FyZSBjb21wb25lbnRzXG4iKTsKPj4gLcKgwqDCoMKgwqDCoMKgIGdvdG8gZmFpbDsKPj4gLcKg wqDCoCB9Cj4+IC0KPj4gLcKgwqDCoCAvKgo+PiAtwqDCoMKgwqAgKiBUaGUgR3VDIGZpcm13YXJl IGltYWdlIGhhcyB0aGUgdmVyc2lvbiBudW1iZXIgZW1iZWRkZWQgYXQgYQo+PiAtwqDCoMKgwqAg KiB3ZWxsLWtub3duIG9mZnNldCB3aXRoaW4gdGhlIGZpcm13YXJlIGJsb2I7IG5vdGUgdGhhdCBt YWpvciAvIAo+PiBtaW5vcgo+PiAtwqDCoMKgwqAgKiB2ZXJzaW9uIGFyZSBUV08gYnl0ZXMgZWFj aCAoaS5lLiB1MTYpLCBhbHRob3VnaCBhbGwgcG9pbnRlcnMgYW5kCj4+IC3CoMKgwqDCoCAqIG9m ZnNldHMgYXJlIGRlZmluZWQgaW4gdGVybXMgb2YgYnl0ZXMgKHU4KS4KPj4gLcKgwqDCoMKgICov Cj4+IC3CoMKgwqAgc3dpdGNoICh1Y19mdy0+dHlwZSkgewo+PiAtwqDCoMKgIGNhc2UgSU5URUxf VUNfRldfVFlQRV9HVUM6Cj4+IC3CoMKgwqDCoMKgwqDCoCAvKiBIZWFkZXIgYW5kIHVDb2RlIHdp bGwgYmUgbG9hZGVkIHRvIFdPUENNLiBTaXplIG9mIHRoZSAKPj4gdHdvLiAqLwo+PiAtwqDCoMKg wqDCoMKgwqAgc2l6ZSA9IHVjX2Z3LT5oZWFkZXJfc2l6ZSArIHVjX2Z3LT51Y29kZV9zaXplOwo+ PiAtCj4+IC3CoMKgwqDCoMKgwqDCoCAvKiBUb3AgMzJrIG9mIFdPUENNIGlzIHJlc2VydmVkICg4 SyBzdGFjayArIDI0ayBSQzYgCj4+IGNvbnRleHQpLiAqLwo+PiAtwqDCoMKgwqDCoMKgwqAgaWYg KHNpemUgPiBpbnRlbF9ndWNfd29wY21fc2l6ZShkZXZfcHJpdikpIHsKPj4gLcKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgRFJNX0VSUk9SKCJGaXJtd2FyZSBpcyB0b28gbGFyZ2UgdG8gZml0IGluIFdP UENNXG4iKTsKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBmYWlsOwo+PiAtwqDCoMKg wqDCoMKgwqAgfQo+PiAtwqDCoMKgwqDCoMKgwqAgdWNfZnctPm1ham9yX3Zlcl9mb3VuZCA9IGNz cy0+Z3VjLnN3X3ZlcnNpb24gPj4gMTY7Cj4+IC3CoMKgwqDCoMKgwqDCoCB1Y19mdy0+bWlub3Jf dmVyX2ZvdW5kID0gY3NzLT5ndWMuc3dfdmVyc2lvbiAmIDB4RkZGRjsKPj4gLcKgwqDCoMKgwqDC oMKgIGJyZWFrOwo+PiAtCj4+IC3CoMKgwqAgY2FzZSBJTlRFTF9VQ19GV19UWVBFX0hVQzoKPj4g LcKgwqDCoMKgwqDCoMKgIHVjX2Z3LT5tYWpvcl92ZXJfZm91bmQgPSBjc3MtPmh1Yy5zd192ZXJz aW9uID4+IDE2Owo+PiAtwqDCoMKgwqDCoMKgwqAgdWNfZnctPm1pbm9yX3Zlcl9mb3VuZCA9IGNz cy0+aHVjLnN3X3ZlcnNpb24gJiAweEZGRkY7Cj4+IC3CoMKgwqDCoMKgwqDCoCBicmVhazsKPj4g LQo+PiAtwqDCoMKgIGRlZmF1bHQ6Cj4+IC3CoMKgwqDCoMKgwqDCoCBEUk1fRVJST1IoIlVua25v d24gZmlybXdhcmUgdHlwZSAlZFxuIiwgdWNfZnctPnR5cGUpOwo+PiAtwqDCoMKgwqDCoMKgwqAg ZXJyID0gLUVOT0VYRUM7Cj4+IC3CoMKgwqDCoMKgwqDCoCBnb3RvIGZhaWw7Cj4+IC3CoMKgwqAg fQo+PiAtCj4+IC3CoMKgwqAgaWYgKHVjX2Z3LT5tYWpvcl92ZXJfd2FudGVkID09IDAgJiYgdWNf ZnctPm1pbm9yX3Zlcl93YW50ZWQgPT0gMCkgewo+PiAtwqDCoMKgwqDCoMKgwqAgRFJNX05PVEUo IlNraXBwaW5nICVzIGZpcm13YXJlIHZlcnNpb24gY2hlY2tcbiIsCj4+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgaW50ZWxfdWNfZndfdHlwZV9yZXByKHVjX2Z3LT50eXBlKSk7Cj4+IC3CoMKg wqAgfSBlbHNlIGlmICh1Y19mdy0+bWFqb3JfdmVyX2ZvdW5kICE9IHVjX2Z3LT5tYWpvcl92ZXJf d2FudGVkIHx8Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoCB1Y19mdy0+bWlub3JfdmVyX2ZvdW5k IDwgdWNfZnctPm1pbm9yX3Zlcl93YW50ZWQpIHsKPj4gLcKgwqDCoMKgwqDCoMKgIERSTV9OT1RF KCIlcyBmaXJtd2FyZSB2ZXJzaW9uICVkLiVkLCByZXF1aXJlZCAlZC4lZFxuIiwKPj4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBpbnRlbF91Y19md190eXBlX3JlcHIodWNfZnctPnR5cGUpLAo+ PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVjX2Z3LT5tYWpvcl92ZXJfZm91bmQsIHVjX2Z3 LT5taW5vcl92ZXJfZm91bmQsCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdWNfZnctPm1h am9yX3Zlcl93YW50ZWQsIHVjX2Z3LT5taW5vcl92ZXJfd2FudGVkKTsKPj4gLcKgwqDCoMKgwqDC oMKgIGVyciA9IC1FTk9FWEVDOwo+PiAtwqDCoMKgwqDCoMKgwqAgZ290byBmYWlsOwo+PiAtwqDC oMKgIH0KPj4gLQo+PiAtwqDCoMKgIERSTV9ERUJVR19EUklWRVIoImZpcm13YXJlIHZlcnNpb24g JWQuJWQgT0sgKG1pbmltdW0gJWQuJWQpXG4iLAo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHVjX2Z3LT5tYWpvcl92ZXJfZm91bmQsIHVjX2Z3LT5taW5vcl92ZXJfZm91bmQsCj4+IC3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgdWNfZnctPm1ham9yX3Zlcl93YW50ZWQsIHVjX2Z3LT5taW5v cl92ZXJfd2FudGVkKTsKPj4gLQo+PiAtwqDCoMKgIG9iaiA9IGk5MTVfZ2VtX29iamVjdF9jcmVh dGVfZnJvbV9kYXRhKGRldl9wcml2LCBmdy0+ZGF0YSwgCj4+IGZ3LT5zaXplKTsKPj4gLcKgwqDC oCBpZiAoSVNfRVJSKG9iaikpIHsKPj4gLcKgwqDCoMKgwqDCoMKgIGVyciA9IFBUUl9FUlIob2Jq KTsKPj4gLcKgwqDCoMKgwqDCoMKgIGdvdG8gZmFpbDsKPj4gLcKgwqDCoCB9Cj4+IC0KPj4gLcKg wqDCoCB1Y19mdy0+b2JqID0gb2JqOwo+PiAtwqDCoMKgIHVjX2Z3LT5zaXplID0gZnctPnNpemU7 Cj4+IC0KPj4gLcKgwqDCoCBEUk1fREVCVUdfRFJJVkVSKCJ1QyBmdyBmZXRjaCBzdGF0dXMgU1VD Q0VTUywgb2JqICVwXG4iLAo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVjX2Z3LT5vYmop Owo+PiAtCj4+IC3CoMKgwqAgcmVsZWFzZV9maXJtd2FyZShmdyk7Cj4+IC3CoMKgwqAgdWNfZnct PmZldGNoX3N0YXR1cyA9IElOVEVMX1VDX0ZJUk1XQVJFX1NVQ0NFU1M7Cj4+IC3CoMKgwqAgcmV0 dXJuOwo+PiAtCj4+IC1mYWlsOgo+PiAtwqDCoMKgIERSTV9XQVJOKCJGYWlsZWQgdG8gZmV0Y2gg dmFsaWQgdUMgZmlybXdhcmUgZnJvbSAlcyAoZXJyb3IgJWQpXG4iLAo+PiAtwqDCoMKgwqDCoMKg wqDCoCB1Y19mdy0+cGF0aCwgZXJyKTsKPj4gLcKgwqDCoCBEUk1fREVCVUdfRFJJVkVSKCJ1QyBm dyBmZXRjaCBzdGF0dXMgRkFJTDsgZXJyICVkLCBmdyAlcCwgb2JqIAo+PiAlcFxuIiwKPj4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlcnIsIGZ3LCB1Y19mdy0+b2JqKTsKPj4gLQo+PiAtwqDC oMKgIHJlbGVhc2VfZmlybXdhcmUoZncpO8KgwqDCoMKgwqDCoMKgIC8qIE9LIGV2ZW4gaWYgZncg aXMgTlVMTCAqLwo+PiAtwqDCoMKgIHVjX2Z3LT5mZXRjaF9zdGF0dXMgPSBJTlRFTF9VQ19GSVJN V0FSRV9GQUlMOwo+PiAtfQo+PiAtCj4+IC12b2lkIGludGVsX3VjX2luaXRfZncoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+PiArdm9pZCBpbnRlbF91Y19pbml0X2Z3KHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICppOTE1KQo+PiDCoCB7Cj4+IC3CoMKgwqAgZmV0Y2hfdWNfZnco ZGV2X3ByaXYsICZkZXZfcHJpdi0+aHVjLmZ3KTsKPj4gLcKgwqDCoCBmZXRjaF91Y19mdyhkZXZf cHJpdiwgJmRldl9wcml2LT5ndWMuZncpOwo+PiArwqDCoMKgIGk5MTVfZmV0Y2hfdWNfZncoaTkx NSwgJmk5MTUtPmh1Yy5mdyk7Cj4+ICvCoMKgwqAgaTkxNV9mZXRjaF91Y19mdyhpOTE1LCAmaTkx NS0+Z3VjLmZ3KTsKPj4gwqAgfQo+PiDCoCAtdm9pZCBpbnRlbF91Y19maW5pX2Z3KHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPj4gK3ZvaWQgaW50ZWxfdWNfZmluaV9mdyhzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPj4gwqAgewo+PiAtwqDCoMKgIF9faW50ZWxfdWNf ZndfZmluaSgmZGV2X3ByaXYtPmd1Yy5mdyk7Cj4+IC3CoMKgwqAgX19pbnRlbF91Y19md19maW5p KCZkZXZfcHJpdi0+aHVjLmZ3KTsKPj4gK8KgwqDCoCBpbnRlbF91Y19md19maW5pKCZpOTE1LT5n dWMuZncpOwo+PiArwqDCoMKgIGludGVsX3VjX2Z3X2ZpbmkoJmk5MTUtPmh1Yy5mdyk7Cj4+IMKg IH0KPj4gwqAgwqAgc3RhdGljIGlubGluZSBpOTE1X3JlZ190IGd1Y19zZW5kX3JlZyhzdHJ1Y3Qg aW50ZWxfZ3VjICpndWMsIHUzMiBpKQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfdWMuaCAKPj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91Yy5oCj4+IGlu ZGV4IDM4ZWM4ODAuLmQxMTFmNzkgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX3VjLmgKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdWMuaAo+PiBA QCAtMjQsNiArMjQsNyBAQAo+PiDCoCAjaWZuZGVmIF9JTlRFTF9VQ19IXwo+PiDCoCAjZGVmaW5l IF9JTlRFTF9VQ19IXwo+PiDCoCArI2luY2x1ZGUgImludGVsX3VjX2Z3LmgiCj4+IMKgICNpbmNs dWRlICJpbnRlbF9ndWNfZndpZi5oIgo+PiDCoCAjaW5jbHVkZSAiaTkxNV9ndWNfcmVnLmgiCj4+ IMKgICNpbmNsdWRlICJpbnRlbF9yaW5nYnVmZmVyLmgiCj4+IEBAIC03MCw3MiArNzEsNiBAQCBz dHJ1Y3QgaTkxNV9ndWNfY2xpZW50IHsKPj4gwqDCoMKgwqDCoCB1aW50NjRfdCBzdWJtaXNzaW9u c1tJOTE1X05VTV9FTkdJTkVTXTsKPj4gwqAgfTsKPj4gwqAgLWVudW0gaW50ZWxfdWNfZndfc3Rh dHVzIHsKPj4gLcKgwqDCoCBJTlRFTF9VQ19GSVJNV0FSRV9GQUlMID0gLTEsCj4+IC3CoMKgwqAg SU5URUxfVUNfRklSTVdBUkVfTk9ORSA9IDAsCj4+IC3CoMKgwqAgSU5URUxfVUNfRklSTVdBUkVf UEVORElORywKPj4gLcKgwqDCoCBJTlRFTF9VQ19GSVJNV0FSRV9TVUNDRVNTCj4+IC19Owo+PiAt Cj4+IC0vKiBVc2VyLWZyaWVuZGx5IHJlcHJlc2VudGF0aW9uIG9mIGFuIGVudW0gKi8KPj4gLXN0 YXRpYyBpbmxpbmUKPj4gLWNvbnN0IGNoYXIgKmludGVsX3VjX2Z3X3N0YXR1c19yZXByKGVudW0g aW50ZWxfdWNfZndfc3RhdHVzIHN0YXR1cykKPj4gLXsKPj4gLcKgwqDCoCBzd2l0Y2ggKHN0YXR1 cykgewo+PiAtwqDCoMKgIGNhc2UgSU5URUxfVUNfRklSTVdBUkVfRkFJTDoKPj4gLcKgwqDCoMKg wqDCoMKgIHJldHVybiAiRkFJTCI7Cj4+IC3CoMKgwqAgY2FzZSBJTlRFTF9VQ19GSVJNV0FSRV9O T05FOgo+PiAtwqDCoMKgwqDCoMKgwqAgcmV0dXJuICJOT05FIjsKPj4gLcKgwqDCoCBjYXNlIElO VEVMX1VDX0ZJUk1XQVJFX1BFTkRJTkc6Cj4+IC3CoMKgwqDCoMKgwqDCoCByZXR1cm4gIlBFTkRJ TkciOwo+PiAtwqDCoMKgIGNhc2UgSU5URUxfVUNfRklSTVdBUkVfU1VDQ0VTUzoKPj4gLcKgwqDC oMKgwqDCoMKgIHJldHVybiAiU1VDQ0VTUyI7Cj4+IC3CoMKgwqAgfQo+PiAtwqDCoMKgIHJldHVy biAiPGludmFsaWQ+IjsKPj4gLX0KPj4gLQo+PiAtZW51bSBpbnRlbF91Y19md190eXBlIHsKPj4g LcKgwqDCoCBJTlRFTF9VQ19GV19UWVBFX0dVQywKPj4gLcKgwqDCoCBJTlRFTF9VQ19GV19UWVBF X0hVQwo+PiAtfTsKPj4gLQo+PiAtLyogVXNlci1mcmllbmRseSByZXByZXNlbnRhdGlvbiBvZiBh biBlbnVtICovCj4+IC1zdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmludGVsX3VjX2Z3X3R5cGVf cmVwcihlbnVtIAo+PiBpbnRlbF91Y19md190eXBlIHR5cGUpCj4+IC17Cj4+IC3CoMKgwqAgc3dp dGNoICh0eXBlKSB7Cj4+IC3CoMKgwqAgY2FzZSBJTlRFTF9VQ19GV19UWVBFX0dVQzoKPj4gLcKg wqDCoMKgwqDCoMKgIHJldHVybiAiR3VDIjsKPj4gLcKgwqDCoCBjYXNlIElOVEVMX1VDX0ZXX1RZ UEVfSFVDOgo+PiAtwqDCoMKgwqDCoMKgwqAgcmV0dXJuICJIdUMiOwo+PiAtwqDCoMKgIH0KPj4g LcKgwqDCoCByZXR1cm4gInVDIjsKPj4gLX0KPj4gLQo+PiAtLyoKPj4gLSAqIFRoaXMgc3RydWN0 dXJlIGVuY2Fwc3VsYXRlcyBhbGwgdGhlIGRhdGEgbmVlZGVkIGR1cmluZyB0aGUgcHJvY2Vzcwo+ PiAtICogb2YgZmV0Y2hpbmcsIGNhY2hpbmcsIGFuZCBsb2FkaW5nIHRoZSBmaXJtd2FyZSBpbWFn ZSBpbnRvIHRoZSBHdUMuCj4+IC0gKi8KPj4gLXN0cnVjdCBpbnRlbF91Y19mdyB7Cj4+IC3CoMKg wqAgY29uc3QgY2hhciAqcGF0aDsKPj4gLcKgwqDCoCBzaXplX3Qgc2l6ZTsKPj4gLcKgwqDCoCBz dHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwo+PiAtwqDCoMKgIGVudW0gaW50ZWxfdWNf Zndfc3RhdHVzIGZldGNoX3N0YXR1czsKPj4gLcKgwqDCoCBlbnVtIGludGVsX3VjX2Z3X3N0YXR1 cyBsb2FkX3N0YXR1czsKPj4gLQo+PiAtwqDCoMKgIHVpbnQxNl90IG1ham9yX3Zlcl93YW50ZWQ7 Cj4+IC3CoMKgwqAgdWludDE2X3QgbWlub3JfdmVyX3dhbnRlZDsKPj4gLcKgwqDCoCB1aW50MTZf dCBtYWpvcl92ZXJfZm91bmQ7Cj4+IC3CoMKgwqAgdWludDE2X3QgbWlub3JfdmVyX2ZvdW5kOwo+ PiAtCj4+IC3CoMKgwqAgZW51bSBpbnRlbF91Y19md190eXBlIHR5cGU7Cj4+IC3CoMKgwqAgdWlu dDMyX3QgaGVhZGVyX3NpemU7Cj4+IC3CoMKgwqAgdWludDMyX3QgaGVhZGVyX29mZnNldDsKPj4g LcKgwqDCoCB1aW50MzJfdCByc2Ffc2l6ZTsKPj4gLcKgwqDCoCB1aW50MzJfdCByc2Ffb2Zmc2V0 Owo+PiAtwqDCoMKgIHVpbnQzMl90IHVjb2RlX3NpemU7Cj4+IC3CoMKgwqAgdWludDMyX3QgdWNv ZGVfb2Zmc2V0Owo+PiAtfTsKPj4gLQo+PiDCoCBzdHJ1Y3QgaW50ZWxfZ3VjX2xvZyB7Cj4+IMKg wqDCoMKgwqAgdWludDMyX3QgZmxhZ3M7Cj4+IMKgwqDCoMKgwqAgc3RydWN0IGk5MTVfdm1hICp2 bWE7Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91Y19mdy5jIAo+ PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3VjX2Z3LmMKPj4gbmV3IGZpbGUgbW9kZSAx MDA2NDQKPj4gaW5kZXggMDAwMDAwMC4uMjk5MjBhZgo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3VjX2Z3LmMKPj4gQEAgLTAsMCArMSwxNzcgQEAK Pj4gKy8qCj4+ICsgKiBDb3B5cmlnaHQgwqkgMjAxNi0yMDE3IEludGVsIENvcnBvcmF0aW9uCj4+ ICsgKgo+PiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2Us IHRvIGFueSBwZXJzb24gCj4+IG9idGFpbmluZyBhCj4+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdh cmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIAo+PiAiU29mdHdhcmUi KSwKPj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGlu Y2x1ZGluZyB3aXRob3V0IAo+PiBsaW1pdGF0aW9uCj4+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwg Y29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgCj4+IHN1YmxpY2Vuc2Us Cj4+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0 IHBlcnNvbnMgdG8gd2hvbSAKPj4gdGhlCj4+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8g ZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+PiArICoKPj4gKyAq IFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChp bmNsdWRpbmcgCj4+IHRoZSBuZXh0Cj4+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVk IGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgCj4+IHBvcnRpb25zIG9mIHRoZQo+PiArICog U29mdHdhcmUuCj4+ICsgKgo+PiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIs IFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIAo+PiBFWFBSRVNTIE9SCj4+ICsgKiBJTVBM SUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIAo+PiBN RVJDSEFOVEFCSUxJVFksCj4+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB TkQgTk9OSU5GUklOR0VNRU5ULsKgIElOIE5PIAo+PiBFVkVOVCBTSEFMTAo+PiArICogVEhFIEFV VEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFH RVMgCj4+IE9SIE9USEVSCj4+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9G IENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgCj4+IEFSSVNJTkcKPj4gKyAqIEZST00sIE9V VCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgCj4+ IE9USEVSIERFQUxJTkdTCj4+ICsgKiBJTiBUSEUgU09GVFdBUkUuCj4+ICsgKgo+PiArICovCj4+ ICsKPj4gKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgo+PiArI2luY2x1ZGUgImk5MTVfZHJ2 LmgiCj4+ICsKPj4gKy8qIENsZWFucyB1cCB1QyBmaXJtd2FyZSBieSByZWxlYXNpbmcgdGhlIGZp cm13YXJlIEdFTSBvYmouCj4+ICsgKi8KPj4gK3ZvaWQgaW50ZWxfdWNfZndfZmluaShzdHJ1Y3Qg aW50ZWxfdWNfZncgKnVjX2Z3KQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCBkcm1faTkxNV9nZW1f b2JqZWN0ICpvYmo7Cj4+ICsKPj4gK8KgwqDCoCBvYmogPSBmZXRjaF9hbmRfemVybygmdWNfZnct Pm9iaik7Cj4+ICvCoMKgwqAgaWYgKG9iaikKPj4gK8KgwqDCoMKgwqDCoMKgIGk5MTVfZ2VtX29i amVjdF9wdXQob2JqKTsKPj4gKwo+PiArwqDCoMKgIHVjX2Z3LT5mZXRjaF9zdGF0dXMgPSBJTlRF TF9VQ19GSVJNV0FSRV9OT05FOwo+PiArfQo+PiArCj4+ICt2b2lkIGk5MTVfZmV0Y2hfdWNfZnco c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBzdHJ1Y3QgaW50ZWxfdWNfZncgKnVjX2Z3KQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCBw Y2lfZGV2ICpwZGV2ID0gaTkxNS0+ZHJtLnBkZXY7Cj4+ICvCoMKgwqAgc3RydWN0IGRybV9pOTE1 X2dlbV9vYmplY3QgKm9iajsKPj4gK8KgwqDCoCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3ID0g TlVMTDsKPj4gK8KgwqDCoCBzdHJ1Y3QgdWNfY3NzX2hlYWRlciAqY3NzOwo+PiArwqDCoMKgIHNp emVfdCBzaXplOwo+PiArwqDCoMKgIGludCBlcnI7Cj4+ICsKPj4gK8KgwqDCoCBpZiAoIXVjX2Z3 LT5wYXRoKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuOwo+PiArCj4+ICvCoMKgwqAgdWNfZnct PmZldGNoX3N0YXR1cyA9IElOVEVMX1VDX0ZJUk1XQVJFX1BFTkRJTkc7Cj4+ICsKPj4gK8KgwqDC oCBEUk1fREVCVUdfRFJJVkVSKCJiZWZvcmUgcmVxdWVzdGluZyBmaXJtd2FyZTogdUMgZncgZmV0 Y2ggc3RhdHVzIAo+PiAlc1xuIiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpbnRlbF91 Y19md19zdGF0dXNfcmVwcih1Y19mdy0+ZmV0Y2hfc3RhdHVzKSk7Cj4+ICsKPj4gK8KgwqDCoCBl cnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgdWNfZnctPnBhdGgsICZwZGV2LT5kZXYpOwo+PiAr wqDCoMKgIGlmIChlcnIpCj4+ICvCoMKgwqDCoMKgwqDCoCBnb3RvIGZhaWw7Cj4+ICvCoMKgwqAg aWYgKCFmdykKPj4gK8KgwqDCoMKgwqDCoMKgIGdvdG8gZmFpbDsKPj4gKwo+PiArwqDCoMKgIERS TV9ERUJVR19EUklWRVIoImZldGNoIHVDIGZ3IGZyb20gJXMgc3VjY2VlZGVkLCBmdyAlcFxuIiwK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1Y19mdy0+cGF0aCwgZncpOwo+PiArCj4+ICvC oMKgwqAgLyogQ2hlY2sgdGhlIHNpemUgb2YgdGhlIGJsb2IgYmVmb3JlIGV4YW1pbmluZyBidWZm ZXIgY29udGVudHMgKi8KPj4gK8KgwqDCoCBpZiAoZnctPnNpemUgPCBzaXplb2Yoc3RydWN0IHVj X2Nzc19oZWFkZXIpKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBEUk1fTk9URSgiRmlybXdhcmUgaGVh ZGVyIGlzIG1pc3NpbmdcbiIpOwo+PiArwqDCoMKgwqDCoMKgwqAgZ290byBmYWlsOwo+PiArwqDC oMKgIH0KPj4gKwo+PiArwqDCoMKgIGNzcyA9IChzdHJ1Y3QgdWNfY3NzX2hlYWRlciAqKWZ3LT5k YXRhOwo+PiArCj4+ICvCoMKgwqAgLyogRmlybXdhcmUgYml0cyBhbHdheXMgc3RhcnQgZnJvbSBo ZWFkZXIgKi8KPj4gK8KgwqDCoCB1Y19mdy0+aGVhZGVyX29mZnNldCA9IDA7Cj4+ICvCoMKgwqAg dWNfZnctPmhlYWRlcl9zaXplID0gKGNzcy0+aGVhZGVyX3NpemVfZHcgLSBjc3MtPm1vZHVsdXNf c2l6ZV9kdyAtCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNzcy0+a2V5 X3NpemVfZHcgLSBjc3MtPmV4cG9uZW50X3NpemVfZHcpICogCj4+IHNpemVvZih1MzIpOwo+PiAr Cj4+ICvCoMKgwqAgaWYgKHVjX2Z3LT5oZWFkZXJfc2l6ZSAhPSBzaXplb2Yoc3RydWN0IHVjX2Nz c19oZWFkZXIpKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBEUk1fTk9URSgiQ1NTIGhlYWRlciBkZWZp bml0aW9uIG1pc21hdGNoXG4iKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGdvdG8gZmFpbDsKPj4gK8Kg wqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCAvKiB0aGVuLCB1Q29kZSAqLwo+PiArwqDCoMKgIHVjX2Z3 LT51Y29kZV9vZmZzZXQgPSB1Y19mdy0+aGVhZGVyX29mZnNldCArIHVjX2Z3LT5oZWFkZXJfc2l6 ZTsKPj4gK8KgwqDCoCB1Y19mdy0+dWNvZGVfc2l6ZSA9IChjc3MtPnNpemVfZHcgLSBjc3MtPmhl YWRlcl9zaXplX2R3KSAqIAo+PiBzaXplb2YodTMyKTsKPj4gKwo+PiArwqDCoMKgIC8qIG5vdyBS U0EgKi8KPj4gK8KgwqDCoCBpZiAoY3NzLT5rZXlfc2l6ZV9kdyAhPSBVT1NfUlNBX1NDUkFUQ0hf TUFYX0NPVU5UKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBEUk1fTk9URSgiUlNBIGtleSBzaXplIGlz IGJhZFxuIik7Cj4+ICvCoMKgwqDCoMKgwqDCoCBnb3RvIGZhaWw7Cj4+ICvCoMKgwqAgfQo+PiAr wqDCoMKgIHVjX2Z3LT5yc2Ffb2Zmc2V0ID0gdWNfZnctPnVjb2RlX29mZnNldCArIHVjX2Z3LT51 Y29kZV9zaXplOwo+PiArwqDCoMKgIHVjX2Z3LT5yc2Ffc2l6ZSA9IGNzcy0+a2V5X3NpemVfZHcg KiBzaXplb2YodTMyKTsKPj4gKwo+PiArwqDCoMKgIC8qIEF0IGxlYXN0LCBpdCBzaG91bGQgaGF2 ZSBoZWFkZXIsIHVDb2RlIGFuZCBSU0EuIFNpemUgb2YgYWxsIAo+PiB0aHJlZS4gKi8KPj4gK8Kg wqDCoCBzaXplID0gdWNfZnctPmhlYWRlcl9zaXplICsgdWNfZnctPnVjb2RlX3NpemUgKyB1Y19m dy0+cnNhX3NpemU7Cj4+ICvCoMKgwqAgaWYgKGZ3LT5zaXplIDwgc2l6ZSkgewo+PiArwqDCoMKg wqDCoMKgwqAgRFJNX05PVEUoIk1pc3NpbmcgZmlybXdhcmUgY29tcG9uZW50c1xuIik7Cj4+ICvC oMKgwqDCoMKgwqDCoCBnb3RvIGZhaWw7Cj4+ICvCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqAgLyoK Pj4gK8KgwqDCoMKgICogVGhlIEd1QyBmaXJtd2FyZSBpbWFnZSBoYXMgdGhlIHZlcnNpb24gbnVt YmVyIGVtYmVkZGVkIGF0IGEKPj4gK8KgwqDCoMKgICogd2VsbC1rbm93biBvZmZzZXQgd2l0aGlu IHRoZSBmaXJtd2FyZSBibG9iOyBub3RlIHRoYXQgbWFqb3IgLyAKPj4gbWlub3IKPj4gK8KgwqDC oMKgICogdmVyc2lvbiBhcmUgVFdPIGJ5dGVzIGVhY2ggKGkuZS4gdTE2KSwgYWx0aG91Z2ggYWxs IHBvaW50ZXJzIGFuZAo+PiArwqDCoMKgwqAgKiBvZmZzZXRzIGFyZSBkZWZpbmVkIGluIHRlcm1z IG9mIGJ5dGVzICh1OCkuCj4+ICvCoMKgwqDCoCAqLwo+PiArwqDCoMKgIHN3aXRjaCAodWNfZnct PnR5cGUpIHsKPj4gK8KgwqDCoCBjYXNlIElOVEVMX1VDX0ZXX1RZUEVfR1VDOgo+PiArwqDCoMKg wqDCoMKgwqAgLyogSGVhZGVyIGFuZCB1Q29kZSB3aWxsIGJlIGxvYWRlZCB0byBXT1BDTS4gU2l6 ZSBvZiB0aGUgCj4+IHR3by4gKi8KPj4gK8KgwqDCoMKgwqDCoMKgIHNpemUgPSB1Y19mdy0+aGVh ZGVyX3NpemUgKyB1Y19mdy0+dWNvZGVfc2l6ZTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgLyog VG9wIDMyayBvZiBXT1BDTSBpcyByZXNlcnZlZCAoOEsgc3RhY2sgKyAyNGsgUkM2IAo+PiBjb250 ZXh0KS4gKi8KPj4gK8KgwqDCoMKgwqDCoMKgIGlmIChzaXplID4gaW50ZWxfZ3VjX3dvcGNtX3Np emUoaTkxNSkpIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRFJNX0VSUk9SKCJGaXJtd2Fy ZSBpcyB0b28gbGFyZ2UgdG8gZml0IGluIFdPUENNXG4iKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgZ290byBmYWlsOwo+PiArwqDCoMKgwqDCoMKgwqAgfQo+PiArwqDCoMKgwqDCoMKgwqAg dWNfZnctPm1ham9yX3Zlcl9mb3VuZCA9IGNzcy0+Z3VjLnN3X3ZlcnNpb24gPj4gMTY7Cj4+ICvC oMKgwqDCoMKgwqDCoCB1Y19mdy0+bWlub3JfdmVyX2ZvdW5kID0gY3NzLT5ndWMuc3dfdmVyc2lv biAmIDB4RkZGRjsKPj4gK8KgwqDCoMKgwqDCoMKgIGJyZWFrOwo+PiArCj4+ICvCoMKgwqAgY2Fz ZSBJTlRFTF9VQ19GV19UWVBFX0hVQzoKPj4gK8KgwqDCoMKgwqDCoMKgIHVjX2Z3LT5tYWpvcl92 ZXJfZm91bmQgPSBjc3MtPmh1Yy5zd192ZXJzaW9uID4+IDE2Owo+PiArwqDCoMKgwqDCoMKgwqAg dWNfZnctPm1pbm9yX3Zlcl9mb3VuZCA9IGNzcy0+aHVjLnN3X3ZlcnNpb24gJiAweEZGRkY7Cj4+ ICvCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4gKwo+PiArwqDCoMKgIGRlZmF1bHQ6Cj4+ICvCoMKg wqDCoMKgwqDCoCBEUk1fRVJST1IoIlVua25vd24gZmlybXdhcmUgdHlwZSAlZFxuIiwgdWNfZnct PnR5cGUpOwo+PiArwqDCoMKgwqDCoMKgwqAgZXJyID0gLUVOT0VYRUM7Cj4+ICvCoMKgwqDCoMKg wqDCoCBnb3RvIGZhaWw7Cj4+ICvCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqAgaWYgKHVjX2Z3LT5t YWpvcl92ZXJfd2FudGVkID09IDAgJiYgdWNfZnctPm1pbm9yX3Zlcl93YW50ZWQgPT0gMCkgewo+ PiArwqDCoMKgwqDCoMKgwqAgRFJNX05PVEUoIlNraXBwaW5nICVzIGZpcm13YXJlIHZlcnNpb24g Y2hlY2tcbiIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW50ZWxfdWNfZndfdHlwZV9y ZXByKHVjX2Z3LT50eXBlKSk7Cj4+ICvCoMKgwqAgfSBlbHNlIGlmICh1Y19mdy0+bWFqb3JfdmVy X2ZvdW5kICE9IHVjX2Z3LT5tYWpvcl92ZXJfd2FudGVkIHx8Cj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoCB1Y19mdy0+bWlub3JfdmVyX2ZvdW5kIDwgdWNfZnctPm1pbm9yX3Zlcl93YW50ZWQpIHsK Pj4gK8KgwqDCoMKgwqDCoMKgIERSTV9OT1RFKCIlcyBmaXJtd2FyZSB2ZXJzaW9uICVkLiVkLCBy ZXF1aXJlZCAlZC4lZFxuIiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpbnRlbF91Y19m d190eXBlX3JlcHIodWNfZnctPnR5cGUpLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVj X2Z3LT5tYWpvcl92ZXJfZm91bmQsIHVjX2Z3LT5taW5vcl92ZXJfZm91bmQsCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgdWNfZnctPm1ham9yX3Zlcl93YW50ZWQsIHVjX2Z3LT5taW5vcl92 ZXJfd2FudGVkKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGVyciA9IC1FTk9FWEVDOwo+PiArwqDCoMKg wqDCoMKgwqAgZ290byBmYWlsOwo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIERSTV9ERUJV R19EUklWRVIoImZpcm13YXJlIHZlcnNpb24gJWQuJWQgT0sgKG1pbmltdW0gJWQuJWQpXG4iLAo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVjX2Z3LT5tYWpvcl92ZXJfZm91bmQsIHVjX2Z3 LT5taW5vcl92ZXJfZm91bmQsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdWNfZnctPm1h am9yX3Zlcl93YW50ZWQsIHVjX2Z3LT5taW5vcl92ZXJfd2FudGVkKTsKPj4gKwo+PiArwqDCoMKg IG9iaiA9IGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfZnJvbV9kYXRhKGk5MTUsIGZ3LT5kYXRhLCBm dy0+c2l6ZSk7Cj4+ICvCoMKgwqAgaWYgKElTX0VSUihvYmopKSB7Cj4+ICvCoMKgwqDCoMKgwqDC oCBlcnIgPSBQVFJfRVJSKG9iaik7Cj4+ICvCoMKgwqDCoMKgwqDCoCBnb3RvIGZhaWw7Cj4+ICvC oMKgwqAgfQo+PiArCj4+ICvCoMKgwqAgdWNfZnctPm9iaiA9IG9iajsKPj4gK8KgwqDCoCB1Y19m dy0+c2l6ZSA9IGZ3LT5zaXplOwo+PiArCj4+ICvCoMKgwqAgRFJNX0RFQlVHX0RSSVZFUigidUMg ZncgZmV0Y2ggc3RhdHVzIFNVQ0NFU1MsIG9iaiAlcFxuIiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCB1Y19mdy0+b2JqKTsKPj4gKwo+PiArwqDCoMKgIHJlbGVhc2VfZmlybXdhcmUoZncp Owo+PiArwqDCoMKgIHVjX2Z3LT5mZXRjaF9zdGF0dXMgPSBJTlRFTF9VQ19GSVJNV0FSRV9TVUND RVNTOwo+PiArwqDCoMKgIHJldHVybjsKPj4gKwo+PiArZmFpbDoKPj4gK8KgwqDCoCBEUk1fV0FS TigiRmFpbGVkIHRvIGZldGNoIHZhbGlkIHVDIGZpcm13YXJlIGZyb20gJXMgKGVycm9yICVkKVxu IiwKPj4gK8KgwqDCoMKgwqDCoMKgwqAgdWNfZnctPnBhdGgsIGVycik7Cj4+ICvCoMKgwqAgRFJN X0RFQlVHX0RSSVZFUigidUMgZncgZmV0Y2ggc3RhdHVzIEZBSUw7IGVyciAlZCwgZncgJXAsIG9i aiAKPj4gJXBcbiIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZXJyLCBmdywgdWNfZnct Pm9iaik7Cj4+ICsKPj4gK8KgwqDCoCByZWxlYXNlX2Zpcm13YXJlKGZ3KTvCoMKgwqDCoMKgwqDC oCAvKiBPSyBldmVuIGlmIGZ3IGlzIE5VTEwgKi8KPj4gK8KgwqDCoCB1Y19mdy0+ZmV0Y2hfc3Rh dHVzID0gSU5URUxfVUNfRklSTVdBUkVfRkFJTDsKPj4gK30KPj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX3VjX2Z3LmggCj4+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfdWNfZncuaAo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwLi5m MDdjNDFmCj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfdWNfZncuaAo+PiBAQCAtMCwwICsxLDk1IEBACj4+ICsvKgo+PiArICogQ29weXJpZ2h0IMKp IDIwMTQtMjAxNyBJbnRlbCBDb3Jwb3JhdGlvbgo+PiArICoKPj4gKyAqIFBlcm1pc3Npb24gaXMg aGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIAo+PiBvYnRhaW5p bmcgYQo+PiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50 YXRpb24gZmlsZXMgKHRoZSAKPj4gIlNvZnR3YXJlIiksCj4+ICsgKiB0byBkZWFsIGluIHRoZSBT b2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCAKPj4gbGltaXRh dGlvbgo+PiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxp c2gsIGRpc3RyaWJ1dGUsIAo+PiBzdWJsaWNlbnNlLAo+PiArICogYW5kL29yIHNlbGwgY29waWVz IG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gCj4+IHRoZQo+ PiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xs b3dpbmcgY29uZGl0aW9uczoKPj4gKyAqCj4+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj ZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIAo+PiB0aGUgbmV4dAo+PiAr ICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50 aWFsIAo+PiBwb3J0aW9ucyBvZiB0aGUKPj4gKyAqIFNvZnR3YXJlLgo+PiArICoKPj4gKyAqIFRI RSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBL SU5ELCAKPj4gRVhQUkVTUyBPUgo+PiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElN SVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAKPj4gTUVSQ0hBTlRBQklMSVRZLAo+PiArICogRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC7CoCBJTiBO TyAKPj4gRVZFTlQgU0hBTEwKPj4gKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJT IEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIAo+PiBPUiBPVEhFUgo+PiArICogTElB QklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJ U0UsIAo+PiBBUklTSU5HCj4+ICsgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRI IFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIAo+PiBPVEhFUiBERUFMSU5HUwo+PiArICogSU4g VEhFIFNPRlRXQVJFLgo+PiArICoKPj4gKyAqLwo+PiArI2lmbmRlZiBfSU5URUxfVUNfRldfSF8K Pj4gKyNkZWZpbmUgX0lOVEVMX1VDX0ZXX0hfCj4+ICsKPj4gK2VudW0gaW50ZWxfdWNfZndfc3Rh dHVzIHsKPj4gK8KgwqDCoCBJTlRFTF9VQ19GSVJNV0FSRV9GQUlMID0gLTEsCj4+ICvCoMKgwqAg SU5URUxfVUNfRklSTVdBUkVfTk9ORSA9IDAsCj4+ICvCoMKgwqAgSU5URUxfVUNfRklSTVdBUkVf UEVORElORywKPj4gK8KgwqDCoCBJTlRFTF9VQ19GSVJNV0FSRV9TVUNDRVNTCj4+ICt9Owo+PiAr Cj4+ICtlbnVtIGludGVsX3VjX2Z3X3R5cGUgewo+PiArwqDCoMKgIElOVEVMX1VDX0ZXX1RZUEVf R1VDLAo+PiArwqDCoMKgIElOVEVMX1VDX0ZXX1RZUEVfSFVDCj4+ICt9Owo+PiArCj4+ICsvKgo+ PiArICogVGhpcyBzdHJ1Y3R1cmUgZW5jYXBzdWxhdGVzIGFsbCB0aGUgZGF0YSBuZWVkZWQgZHVy aW5nIHRoZSBwcm9jZXNzCj4+ICsgKiBvZiBmZXRjaGluZywgY2FjaGluZywgYW5kIGxvYWRpbmcg dGhlIGZpcm13YXJlIGltYWdlIGludG8gdGhlIHVDLgo+PiArICovCj4+ICtzdHJ1Y3QgaW50ZWxf dWNfZncgewo+PiArwqDCoMKgIGNvbnN0IGNoYXIgKnBhdGg7Cj4+ICvCoMKgwqAgc2l6ZV90IHNp emU7Cj4+ICvCoMKgwqAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKPj4gK8KgwqDC oCBlbnVtIGludGVsX3VjX2Z3X3N0YXR1cyBmZXRjaF9zdGF0dXM7Cj4+ICvCoMKgwqAgZW51bSBp bnRlbF91Y19md19zdGF0dXMgbG9hZF9zdGF0dXM7Cj4+ICsKPj4gK8KgwqDCoCB1aW50MTZfdCBt YWpvcl92ZXJfd2FudGVkOwo+PiArwqDCoMKgIHVpbnQxNl90IG1pbm9yX3Zlcl93YW50ZWQ7Cj4+ ICvCoMKgwqAgdWludDE2X3QgbWFqb3JfdmVyX2ZvdW5kOwo+PiArwqDCoMKgIHVpbnQxNl90IG1p bm9yX3Zlcl9mb3VuZDsKPj4gKwo+PiArwqDCoMKgIGVudW0gaW50ZWxfdWNfZndfdHlwZSB0eXBl Owo+PiArwqDCoMKgIHVpbnQzMl90IGhlYWRlcl9zaXplOwo+PiArwqDCoMKgIHVpbnQzMl90IGhl YWRlcl9vZmZzZXQ7Cj4+ICvCoMKgwqAgdWludDMyX3QgcnNhX3NpemU7Cj4+ICvCoMKgwqAgdWlu dDMyX3QgcnNhX29mZnNldDsKPj4gK8KgwqDCoCB1aW50MzJfdCB1Y29kZV9zaXplOwo+PiArwqDC oMKgIHVpbnQzMl90IHVjb2RlX29mZnNldDsKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBpbmxpbmUK Pj4gK2NvbnN0IGNoYXIgKmludGVsX3VjX2Z3X3N0YXR1c19yZXByKGVudW0gaW50ZWxfdWNfZndf c3RhdHVzIHN0YXR1cykKPj4gK3sKPj4gK8KgwqDCoCBzd2l0Y2ggKHN0YXR1cykgewo+PiArwqDC oMKgIGNhc2UgSU5URUxfVUNfRklSTVdBUkVfRkFJTDoKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVy biAiRkFJTCI7Cj4+ICvCoMKgwqAgY2FzZSBJTlRFTF9VQ19GSVJNV0FSRV9OT05FOgo+PiArwqDC oMKgwqDCoMKgwqAgcmV0dXJuICJOT05FIjsKPj4gK8KgwqDCoCBjYXNlIElOVEVMX1VDX0ZJUk1X QVJFX1BFTkRJTkc6Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gIlBFTkRJTkciOwo+PiArwqDC oMKgIGNhc2UgSU5URUxfVUNfRklSTVdBUkVfU1VDQ0VTUzoKPj4gK8KgwqDCoMKgwqDCoMKgIHJl dHVybiAiU1VDQ0VTUyI7Cj4+ICvCoMKgwqAgfQo+PiArwqDCoMKgIHJldHVybiAiPGludmFsaWQ+ IjsKPj4gK30KPj4gKwo+PiArc3RhdGljIGlubGluZSBjb25zdCBjaGFyICppbnRlbF91Y19md190 eXBlX3JlcHIoZW51bSAKPj4gaW50ZWxfdWNfZndfdHlwZSB0eXBlKQo+PiArewo+PiArwqDCoMKg IHN3aXRjaCAodHlwZSkgewo+PiArwqDCoMKgIGNhc2UgSU5URUxfVUNfRldfVFlQRV9HVUM6Cj4+ ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gIkd1QyI7Cj4+ICvCoMKgwqAgY2FzZSBJTlRFTF9VQ19G V19UWVBFX0hVQzoKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAiSHVDIjsKPj4gK8KgwqDCoCB9 Cj4+ICvCoMKgwqAgcmV0dXJuICJ1QyI7Cj4+ICt9Cj4+ICsKPj4gK3ZvaWQgaW50ZWxfdWNfZndf ZmluaShzdHJ1Y3QgaW50ZWxfdWNfZncgKnVjX2Z3KTsKPj4gK3ZvaWQgaTkxNV9mZXRjaF91Y19m dyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHN0cnVjdCBpbnRlbF91Y19mdyAqdWNfZncpOwo+PiArCj4+ICsjZW5kaWYKPgoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1h aWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==