From mboxrd@z Thu Jan 1 00:00:00 1970 From: Manasi Navare Subject: Re: [PATCH v13 13/14] drm/i915/dp: Enable Upfront link training for typeC DP support on HSW/BDW/SKL/BXT (DDI platforms) Date: Thu, 8 Sep 2016 08:06:56 -0700 Message-ID: <20160908150656.GB28200@intel.com> References: <1473207238-3490-4-git-send-email-manasi.d.navare@intel.com> <1473272883-28520-4-git-send-email-manasi.d.navare@intel.com> <1473336643.9143.2.camel@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTPS id D90C56E2FE for ; Thu, 8 Sep 2016 15:07:07 +0000 (UTC) Content-Disposition: inline In-Reply-To: <1473336643.9143.2.camel@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Mika Kahola Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCBTZXAgMDgsIDIwMTYgYXQgMDM6MTA6NDNQTSArMDMwMCwgTWlrYSBLYWhvbGEgd3Jv dGU6Cj4gT24gV2VkLCAyMDE2LTA5LTA3IGF0IDExOjI4IC0wNzAwLCBNYW5hc2kgTmF2YXJlIHdy b3RlOgo+ID4gRnJvbTogRHVyZ2Fkb3NzIFIgPGR1cmdhZG9zcy5yQGludGVsLmNvbT4KPiA+IAo+ ID4gVG8gc3VwcG9ydCBVU0IgdHlwZSBDIGFsdGVybmF0ZSBEUCBtb2RlLCB0aGUgZGlzcGxheSBk cml2ZXIgbmVlZHMgdG8KPiA+IGtub3cgdGhlIG51bWJlciBvZiBsYW5lcyByZXF1aXJlZCBieSB0 aGUgRFAgcGFuZWwgYXMgd2VsbCBhcyBudW1iZXIKPiA+IG9mIGxhbmVzIHRoYXQgY2FuIGJlIHN1 cHBvcnRlZCBieSB0aGUgdHlwZS1DIGNhYmxlLiBTb21ldGltZXMsIHRoZQo+ID4gdHlwZS1DIGNh YmxlIG1heSBsaW1pdCB0aGUgYmFuZHdpZHRoIGV2ZW4gaWYgUGFuZWwgY2FuIHN1cHBvcnQKPiA+ IG1vcmUgbGFuZXMuIFRvIGFkZHJlc3MgdGhlc2Ugc2NlbmFyaW9zLCB0aGUgZGlzcGxheSBkcml2 ZXIgd2lsbAo+ID4gc3RhcnQgbGluayB0cmFpbmluZyB3aXRoIG1heCBsYW5lcywgYW5kIGlmIHRo YXQgZmFpbHMsIHRoZSBkcml2ZXIKPiA+IGZhbGxzIGJhY2sgdG8geDIgbGFuZXM7IGFuZCByZXBl YXRzIHRoaXMgcHJvY2VkdXJlIGZvciBhbGwKPiA+IGJhbmR3aWR0aC9sYW5lIGNvbmZpZ3VyYXRp b25zLgo+ID4gCj4gPiAqIFNpbmNlIGxpbmsgdHJhaW5pbmcgaXMgZG9uZSBiZWZvcmUgbW9kZXNl dCBvbmx5IHRoZSBwb3J0Cj4gPiDCoCAoYW5kIG5vdCBwaXBlL3BsYW5lcykgYW5kIGl0cyBhc3Nv Y2lhdGVkIFBMTHMgYXJlIGVuYWJsZWQuCj4gPiAqIE9uIERQIGhvdHBsdWc6IERpcmVjdGx5IHN0 YXJ0IGxpbmsgdHJhaW5pbmcgb24gdGhlIERQIGVuY29kZXIuCj4gPiAqIE9uIENvbm5lY3RlZCBi b290IHNjZW5hcmlvczogV2hlbiBib290ZWQgd2l0aCBhbiBMRlAgYW5kIGEgRFAsCj4gPiDCoCBz b21ldGltZXMgQklPUyBicmluZ3MgdXAgRFAuIEluIHRoZXNlIGNhc2VzLCB3ZSBkaXNhYmxlIHRo ZQo+ID4gwqAgY3J0YyBhbmQgdGhlbiBkbyB1cGZyb250IGxpbmsgdHJhaW5pbmc7IGFuZCBicmlu ZyBpdCBiYWNrIHVwLgo+ID4gKiBBbGwgbG9jYWwgY2hhbmdlcyBtYWRlIGZvciB1cGZyb250IGxp bmsgdHJhaW5pbmcgYXJlIHJlc2V0Cj4gPiDCoCB0byB0aGVpciBwcmV2aW91cyB2YWx1ZXMgb25j ZSBpdCBpcyBkb25lOyBzbyB0aGF0IHRoZQo+ID4gwqAgc3Vic2VxdWVudCBtb2Rlc2V0IGlzIG5v dCBhd2FyZSBvZiB0aGVzZSBjaGFuZ2VzLgo+ID4gCj4gPiBDaGFuZ2VzIHNpbmNlIHYxMjoKPiA+ ICogRml4IFJlYmFzZSBpc3N1ZXMgKE1pa2EgS2Fob2xhKQo+ID4gQ2hhbmdlcyBzaW5jZSB2MTE6 Cj4gPiAqIENoYW5nZSB0aGUgZmFsbGJhY2sgbGluayByYXRlIGxvZ2ljIChNYW5hc2kpCj4gPiBD aGFuZ2VzIHNpbmNlIHYxMDoKPiA+ICogVXNlIHRoZSBkZGkgbGluayB0cmFpbiBmdW5jdGlvbiB0 aGF0IGxvb3BzIHRocm91Z2ggYWxsIHRoZSBsaW5rCj4gPiByYXRlcwo+ID4gYW5kIGxhbmUgY291 bnRzIHN0YXJ0aW5nIGZyb20gdGhlIGhpZ2hlc3Qgc3VwcG9ydGVkIChNYW5hc2kpCj4gPiAqIEZv ciB1cGZyb250IGxpbmsgdHJhaW5pbmcsIHNldCB0aGUgdXBmcm9udCBmbGFnIHNvIHRoYXQgdGhl IGxpbmsKPiA+IGNhbgo+ID4gYmUgZGlzYWJsZWQgYWZ0ZXIgY2FjaGluZyB1cGZyb250IHZhbHVl cyAoTWFuYXNpKQo+ID4gQ2hhbmdlcyBzaW5jZSB2OToKPiA+ICogQ2hhbmdlIHRoZSBtYWNyb3Mg dG8gdXNlIGRldl9wcml2IGluIHBsYWNlIG9mIGRldiAoRGF2aWQgV2VpbmVoYWxsKQo+ID4gQ2hh bmdlcyBzaW5jZSB2ODoKPiA+ICogUmVzZXQgdXBmcm9udCBsYW5lIGNvdW50IGFuZCBsaW5rIHJh dGUgdmFsdWVzIG9uIEhQRAo+ID4gZm9yIERQIGNvbm5lY3RvciBwaHlzaWNhbCBkaXNjb25uZWN0 IChNYW5hc2kpCj4gPiBDaGFuZ2VzIHNpbmNlIHY3Ogo+ID4gKiBNb3ZlIHRoZSB1cGZyb250IGxp bmsgdHJhaW5pbmcgdG8gaW50ZWxfZHBfbW9kZV92YWxpZCgpCj4gPiDCoCB0byBhdm9pZCBhIHJh Y2UgY29uZGl0aW9uIHdpdGggRFAgTVNUIHNpZGViYW5kIGNvbW1zLiAoVmlsbGUpCj4gPiBDaGFu Z2VzIHNpbmNlIHY2Ogo+ID4gKiBGaXggc29tZSBpbml0aWFsaXphdGlvbiBidWdzIG9uIGxpbmtf cmF0ZSAoSmltIEJyaWRlKQo+ID4gKiBVc2UgbGlua19yYXRlIChhbmQgbm90IGxpbmtfYncpIGZv ciB1cGZyb250IChWaWxsZSkKPiA+ICogTWFrZSBpbnRlbF9kcF91cGZyb250KigpIGFzIGEgdmZ1 bmMgKEFuZGVyKQo+ID4gKiBUaGUgdHJhaW5fc2V0X3ZhbGlkIHZhcmlhYmxlIGluIGludGVsX2Rw IHdhcyByZW1vdmVkIGR1ZSB0bwo+ID4gwqAgaXNzdWVzIGluIGZhc3QgbGluayB0cmFpbmluZy4g U28sIHRvIGluZGljYXRlIHRoZSBsaW5rIHRyYWluCj4gPiDCoCBzdGF0dXMsIG1vdmUgdGhlIGNo YW5uZWxfZXEgaW5zaWRlIGludGVsX2RwLgo+ID4gQ2hhbmdlcyBzaW5jZSB2NToKPiA+ICogTW92 ZWQgcmV0cnkgbG9naWMgaW4gdXBmcm9udCB0byBpbnRlbF9kcC5jIHNvIHRoYXQgaXQKPiA+IMKg IGNhbiBiZSB1c2VkIGZvciBhbGwgcGxhdGZvcm1zLgo+ID4gQ2hhbmdlcyBzaW5jZSB2NDoKPiA+ ICogUmVtb3ZlZCB1c2FnZSBvZiBjcnRjX3N0YXRlIGluIHVwZnJvbnQgbGluayB0cmFpbmluZzsK PiA+IMKgIEhlbmNlIG5vIG5lZWQgdG8gZmluZCBmcmVlIGNydGMgdG8gZG8gdXBmcm9udCBub3cu Cj4gPiAqIFJlLWVuYWJsZSBjcnRjIGlmIGl0IHdhcyBkaXNhYmxlZCBmb3IgdXBmcm9udC4KPiA+ ICogVXNlIHNlcGFyYXRlIHZhcmlhYmxlcyB0byB0cmFjayBtYXggbGFuZSBjb3VudAo+ID4gwqAg YW5kIGxpbmsgcmF0ZSBmb3VuZCBieSB1cGZyb250LCB3aXRob3V0IG1vZGlmeWluZwo+ID4gwqAg dGhlIG9yaWdpbmFsIERQQ0QgcmVhZCBmcm9tIHBhbmVsLgo+ID4gQ2hhbmdlcyBzaW5jZSB2MzoK PiA+ICogRml4ZWQgYSByZXR1cm4gdmFsdWUgb24gQlhUIGNoZWNrCj4gPiAqIFJld29ya2VkIG9u IHRvcCBvZiBieHRfZGRpX3BsbF9zZWxlY3Qgc3BsaXQgZnJvbSBBbmRlcgo+ID4gKiBSZW5hbWVk IGZyb20gZGRpX3VwZnJvbnQgdG8gYnh0X3VwZnJvbnQgc2luY2UgdGhlCj4gPiDCoCB1cGZyb250 IGxvZ2ljIGluY2x1ZGVzIEJYVCBzcGVjaWZpYyBmdW5jdGlvbnMgZm9yIG5vdy4KPiA+IENoYW5n ZXMgc2luY2UgdjI6Cj4gPiAqIFJlYmFzZWQgb24gdG9wIG9mIGxhdGVzdCBkcGxsX21nci5jIGNv ZGUgYW5kCj4gPiDCoCBsYXRlc3QgSFBEIHJlbGF0ZWQgY2xlYW4gdXBzLgo+ID4gKiBDb3JyZWN0 ZWQgcmV0dXJuIHZhbHVlcyBmcm9tIHVwZnJvbnQgKEFuZGVyKQo+ID4gKiBDb3JyZWN0ZWQgYXRv bWljIGxvY2tpbmcgZm9yIHVwZnJvbnQgaW4gaW50ZWxfZHAuYyAoVmlsbGUpCj4gPiBDaGFuZ2Vz IHNpbmNlIHYxOgo+ID4gKsKgwqBhbGwgcGxsIHJlbGF0ZWQgZnVuY3Rpb25zIGluc2lkZSBkZGku Ywo+ID4gCj4gPiBTaWduZWQtb2ZmLWJ5OiBEdXJnYWRvc3MgUiA8ZHVyZ2Fkb3NzLnJAaW50ZWwu Y29tPgo+ID4gU2lnbmVkLW9mZi1ieTogSmltIEJyaWRlIDxqaW0uYnJpZGVAbGludXguaW50ZWwu Y29tPgo+ID4gU2lnbmVkLW9mZi1ieTogTWFuYXNpIE5hdmFyZSA8bWFuYXNpLmQubmF2YXJlQGlu dGVsLmNvbT4KPiA+IC0tLQo+ID4gwqBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kZGkuY8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDIxICstCj4gPiDCoGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2RwLmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8IDM3Ngo+ID4g KysrKysrKysrKysrKysrKysrKy0tLS0tLS0KPiA+IMKgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfZHBfbGlua190cmFpbmluZy5jIHzCoMKgwqAxIC0KPiA+IMKgZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfZHJ2LmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqAxNCArLQo+ID4g wqA0IGZpbGVzIGNoYW5nZWQsIDMxMCBpbnNlcnRpb25zKCspLCAxMDIgZGVsZXRpb25zKC0pCj4g PiAKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kZGkuYwo+ID4g Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kZGkuYwo+ID4gaW5kZXggZGEyYjgwNC4uYjMy ZjdiYSAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RkaS5jCj4g PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kZGkuYwo+ID4gQEAgLTE2NzMsNyAr MTY3Myw4IEBAIHN0YXRpYyB2b2lkIGludGVsX2RkaV9wcmVfZW5hYmxlX2RwKHN0cnVjdAo+ID4g aW50ZWxfZW5jb2RlciAqZW5jb2RlciwKPiA+IMKgCXBsbC0+Y29uZmlnLmNydGNfbWFzayA9IDA7 Cj4gPiDCoAo+ID4gwqAJLyogSWYgTGluayBUcmFpbmluZyBmYWlscywgc2VuZCBhIHVldmVudCB0 byBnZW5lcmF0ZSBhCj4gPiBob3RwbHVnICovCj4gPiAtCWlmICghKGludGVsX2RkaV9saW5rX3Ry YWluKGludGVsX2RwLCBsaW5rX3JhdGUsIGxhbmVfY291bnQsCj4gPiBsaW5rX21zdCkpKQo+ID4g KwlpZiAoIShpbnRlbF9kZGlfbGlua190cmFpbihpbnRlbF9kcCwgbGlua19yYXRlLCBsYW5lX2Nv dW50LAo+ID4gbGlua19tc3QsCj4gPiArCQkJCcKgwqDCoGZhbHNlKSkpCj4gPiDCoAkJZHJtX2tt c19oZWxwZXJfaG90cGx1Z19ldmVudChlbmNvZGVyLT5iYXNlLmRldik7Cj4gPiDCoAlwbGwtPmNv bmZpZyA9IHRtcF9wbGxfY29uZmlnOwo+ID4gwqB9Cj4gPiBAQCAtMjQ2MCw3ICsyNDYxLDcgQEAg aW50ZWxfZGRpX2dldF9saW5rX2RwbGwoc3RydWN0IGludGVsX2RwCj4gPiAqaW50ZWxfZHAsIGlu dCBjbG9jaykKPiA+IMKgCj4gPiDCoGJvb2wKPiA+IMKgaW50ZWxfZGRpX2xpbmtfdHJhaW4oc3Ry dWN0IGludGVsX2RwICppbnRlbF9kcCwgaW50IG1heF9saW5rX3JhdGUsCj4gPiAtCQnCoMKgwqDC oMKgdWludDhfdCBtYXhfbGFuZV9jb3VudCwgYm9vbCBsaW5rX21zdCkKPiA+ICsJCcKgwqDCoMKg wqB1aW50OF90IG1heF9sYW5lX2NvdW50LCBib29sIGxpbmtfbXN0LCBib29sCj4gPiBpc191cGZy b250KQo+ID4gwqB7Cj4gPiDCoAlzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpjb25uZWN0b3IgPSBp bnRlbF9kcC0KPiA+ID5hdHRhY2hlZF9jb25uZWN0b3I7Cj4gPiDCoAlzdHJ1Y3QgaW50ZWxfZW5j b2RlciAqZW5jb2RlciA9IGNvbm5lY3Rvci0+ZW5jb2RlcjsKPiA+IEBAIC0yNTA2LDYgKzI1MDcs NyBAQCBpbnRlbF9kZGlfbGlua190cmFpbihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLAo+ID4g aW50IG1heF9saW5rX3JhdGUsCj4gPiDCoAkJCXBsbC0+ZnVuY3MuZGlzYWJsZShkZXZfcHJpdiwg cGxsKTsKPiA+IMKgCQkJcGxsLT5jb25maWcgPSB0bXBfcGxsX2NvbmZpZzsKPiA+IMKgCQl9Cj4g PiArCj4gPiDCoAkJaWYgKHJldCkgewo+ID4gwqAJCQlEUk1fREVCVUdfS01TKCJMaW5rIFRyYWlu aW5nIHN1Y2Nlc3NmdWwgYXQKPiA+IGxpbmsgcmF0ZTogIgo+ID4gwqAJCQkJwqDCoMKgwqDCoMKg IiVkIGxhbmU6JWRcbiIsIGxpbmtfcmF0ZSwKPiA+IGxhbmVfY291bnQpOwo+ID4gQEAgLTI1MTQs NiArMjUxNiwyMSBAQCBpbnRlbF9kZGlfbGlua190cmFpbihzdHJ1Y3QgaW50ZWxfZHAKPiA+ICpp bnRlbF9kcCwgaW50IG1heF9saW5rX3JhdGUsCj4gPiDCoAl9Cj4gPiDCoAlpbnRlbF9kcF9zdG9w X2xpbmtfdHJhaW4oaW50ZWxfZHApOwo+ID4gwqAKPiA+ICsJaWYgKGlzX3VwZnJvbnQpIHsKPiA+ ICsJCURSTV9ERUJVR19LTVMoIlVwZnJvbnQgbGluayB0cmFpbiAlczogbGlua19jbG9jazolZAo+ ID4gbGFuZXM6JWRcbiIsCj4gPiArCQkJwqDCoMKgwqDCoMKgcmV0ID8gIlBhc3NlZCIgOiAiRmFp bGVkIiwKPiA+ICsJCQnCoMKgwqDCoMKgwqBsaW5rX3JhdGUsIGxhbmVfY291bnQpOwo+ID4gKwkJ LyogRGlzYWJsZSBwb3J0IGZvbGxvd2VkIGJ5IFBMTCBmb3IgbmV4dCByZXRyeS9jbGVhbgo+ID4g dXAgKi8KPiA+ICsJCWludGVsX2RkaV9wb3N0X2Rpc2FibGUoZW5jb2RlciwgTlVMTCwgTlVMTCk7 Cj4gPiArCQlwbGwtPmZ1bmNzLmRpc2FibGUoZGV2X3ByaXYsIHBsbCk7Cj4gPiArCQlwbGwtPmNv bmZpZyA9IHRtcF9wbGxfY29uZmlnOwo+ID4gKwkJaWYgKHJldCkgewo+ID4gKwkJCS8qIFNhdmUg dGhlIHVwZnJvbnQgdmFsdWVzICovCj4gPiArCQkJaW50ZWxfZHAtPm1heF9sYW5lc191cGZyb250 ID0gbGFuZV9jb3VudDsKPiA+ICsJCQlpbnRlbF9kcC0+bWF4X2xpbmtfcmF0ZV91cGZyb250ID0g bGlua19yYXRlOwo+ID4gKwkJfQo+ID4gKwl9Cj4gPiArCj4gPiDCoAlpZiAoIWxhbmVfY291bnQp Cj4gPiDCoAkJRFJNX0VSUk9SKCJMaW5rIFRyYWluaW5nIEZhaWxlZFxuIik7Cj4gPiDCoAo+ID4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMKPiA+IGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYwo+ID4gaW5kZXggNzE0ZmJlMy4uNzc5NDE4MCAxMDA2 NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMKPiA+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMKPiA+IEBAIC0xNTMsMTIgKzE1MywyMSBAQCBp bnRlbF9kcF9tYXhfbGlua19idyhzdHJ1Y3QKPiA+IGludGVsX2RwwqDCoCppbnRlbF9kcCkKPiA+ IMKgc3RhdGljIHU4IGludGVsX2RwX21heF9sYW5lX2NvdW50KHN0cnVjdCBpbnRlbF9kcCAqaW50 ZWxfZHApCj4gPiDCoHsKPiA+IMKgCXN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmludGVsX2Rp Z19wb3J0ID0KPiA+IGRwX3RvX2RpZ19wb3J0KGludGVsX2RwKTsKPiA+IC0JdTggc291cmNlX21h eCwgc2lua19tYXg7Cj4gPiArCXU4IHRlbXAsIHNvdXJjZV9tYXgsIHNpbmtfbWF4Owo+ID4gwqAK PiA+IMKgCXNvdXJjZV9tYXggPSBpbnRlbF9kaWdfcG9ydC0+bWF4X2xhbmVzOwo+ID4gwqAJc2lu a19tYXggPSBkcm1fZHBfbWF4X2xhbmVfY291bnQoaW50ZWxfZHAtPmRwY2QpOwo+ID4gwqAKPiA+ IC0JcmV0dXJuIG1pbihzb3VyY2VfbWF4LCBzaW5rX21heCk7Cj4gPiArCXRlbXAgPSBtaW4oc291 cmNlX21heCwgc2lua19tYXgpOwo+ID4gKwo+ID4gKwkvKgo+ID4gKwnCoCogTGltaXQgbWF4IGxh bmVzIHcuci50IHRvIHRoZSBtYXggdmFsdWUgZm91bmQKPiA+ICsJwqAqIHVzaW5nIFVwZnJvbnQg bGluayB0cmFpbmluZyBhbHNvLgo+ID4gKwnCoCovCj4gPiArCWlmIChpbnRlbF9kcC0+bWF4X2xh bmVzX3VwZnJvbnQpCj4gPiArCQlyZXR1cm4gbWluKHRlbXAsIGludGVsX2RwLT5tYXhfbGFuZXNf dXBmcm9udCk7Cj4gPiArCWVsc2UKPiA+ICsJCXJldHVybiB0ZW1wOwo+ID4gwqB9Cj4gPiDCoAo+ ID4gwqAvKgo+ID4gQEAgLTE5MCw2ICsxOTksMjI5IEBAIGludGVsX2RwX21heF9kYXRhX3JhdGUo aW50IG1heF9saW5rX2Nsb2NrLCBpbnQKPiA+IG1heF9sYW5lcykKPiA+IMKgCXJldHVybiAobWF4 X2xpbmtfY2xvY2sgKiBtYXhfbGFuZXMgKiA4KSAvIDEwOwo+ID4gwqB9Cj4gPiDCoAo+ID4gK3N0 YXRpYyBpbnQgaW50ZWxfZHBfdXBmcm9udF9jcnRjX2Rpc2FibGUoc3RydWN0IGludGVsX2NydGMg KmNydGMsCj4gPiArCQkJCXN0cnVjdCBkcm1fbW9kZXNldF9hY3F1aXJlX2N0eCAqY3R4LAo+ID4g KwkJCQlib29sIGVuYWJsZSkKPiBJbmRlbnRhdGlvbiBzZWVtcyBhIGJpdCBvZmYuCj4KClllcCwg d2lsbCBmaXggdGhhdCBhbmQgcmVzdWJtaXQuCgogCj4gPiArewo+ID4gKwlpbnQgcmV0Owo+ID4g KwlzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGU7Cj4gPiArCXN0cnVjdCBpbnRlbF9jcnRj X3N0YXRlICpjcnRjX3N0YXRlOwo+ID4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ YmFzZS5kZXY7Cj4gPiArCWVudW0gcGlwZSBwaXBlID0gY3J0Yy0+cGlwZTsKPiA+ICsKPiA+ICsJ c3RhdGUgPSBkcm1fYXRvbWljX3N0YXRlX2FsbG9jKGRldik7Cj4gPiArCWlmICghc3RhdGUpCj4g PiArCQlyZXR1cm4gLUVOT01FTTsKPiA+ICsKPiA+ICsJc3RhdGUtPmFjcXVpcmVfY3R4ID0gY3R4 Owo+ID4gKwo+ID4gKwljcnRjX3N0YXRlID0gaW50ZWxfYXRvbWljX2dldF9jcnRjX3N0YXRlKHN0 YXRlLCBjcnRjKTsKPiA+ICsJaWYgKElTX0VSUihjcnRjX3N0YXRlKSkgewo+ID4gKwkJcmV0ID0g UFRSX0VSUihjcnRjX3N0YXRlKTsKPiA+ICsJCWRybV9hdG9taWNfc3RhdGVfZnJlZShzdGF0ZSk7 Cj4gPiArCQlyZXR1cm4gcmV0Owo+ID4gKwl9Cj4gPiArCj4gPiArCURSTV9ERUJVR19LTVMoIiVz YWJsaW5nIGNydGMgJWMgJXMgdXBmcm9udCBsaW5rIHRyYWluXG4iLAo+ID4gKwkJCWVuYWJsZSA/ ICJFbiIgOiAiRGlzIiwKPiA+ICsJCQlwaXBlX25hbWUocGlwZSksCj4gPiArCQkJZW5hYmxlID8g ImFmdGVyIiA6ICJiZWZvcmUiKTsKPiA+ICsKPiA+ICsJY3J0Y19zdGF0ZS0+YmFzZS5hY3RpdmUg PSBlbmFibGU7Cj4gPiArCXJldCA9IGRybV9hdG9taWNfY29tbWl0KHN0YXRlKTsKPiA+ICsJaWYg KHJldCkKPiA+ICsJCWRybV9hdG9taWNfc3RhdGVfZnJlZShzdGF0ZSk7Cj4gPiArCj4gPiArCXJl dHVybiByZXQ7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQKPiA+ICtpbnRlbF9kcF9zaW5r X3JhdGVzKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsIGNvbnN0IGludAo+ID4gKipzaW5rX3Jh dGVzKQo+ID4gK3sKPiA+ICsJaWYgKGludGVsX2RwLT5udW1fc2lua19yYXRlcykgewo+ID4gKwkJ KnNpbmtfcmF0ZXMgPSBpbnRlbF9kcC0+c2lua19yYXRlczsKPiA+ICsJCXJldHVybiBpbnRlbF9k cC0+bnVtX3NpbmtfcmF0ZXM7Cj4gPiArCX0KPiA+ICsKPiA+ICsJKnNpbmtfcmF0ZXMgPSBkZWZh dWx0X3JhdGVzOwo+ID4gKwo+ID4gKwlyZXR1cm4gKGludGVsX2RwX21heF9saW5rX2J3KGludGVs X2RwKSA+PiAzKSArIDE7Cj4gPiArfQo+ID4gKwo+ID4gK2Jvb2wgaW50ZWxfZHBfc291cmNlX3N1 cHBvcnRzX2hicjIoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPiA+ICt7Cj4gPiArCXN0cnVj dCBpbnRlbF9kaWdpdGFsX3BvcnQgKmRpZ19wb3J0ID0KPiA+IGRwX3RvX2RpZ19wb3J0KGludGVs X2RwKTsKPiA+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShk aWdfcG9ydC0KPiA+ID5iYXNlLmJhc2UuZGV2KTsKPiA+ICsKPiA+ICsJLyogV2FEaXNhYmxlSEJS Mjpza2wgKi8KPiA+ICsJaWYgKElTX1NLTF9SRVZJRChkZXZfcHJpdiwgMCwgU0tMX1JFVklEX0Iw KSkKPiA+ICsJCXJldHVybiBmYWxzZTsKPiA+ICsKPiA+ICsJaWYgKChJU19IQVNXRUxMKGRldl9w cml2KSAmJiAhSVNfSFNXX1VMWChkZXZfcHJpdikpIHx8Cj4gPiArCcKgwqDCoMKgSVNfQlJPQURX RUxMKGRldl9wcml2KSB8fCAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA5KSkKPiA+ICsJCXJldHVy biB0cnVlOwo+ID4gKwllbHNlCj4gPiArCQlyZXR1cm4gZmFsc2U7Cj4gPiArfQo+ID4gKwo+ID4g K3N0YXRpYyBpbnQKPiA+ICtpbnRlbF9kcF9zb3VyY2VfcmF0ZXMoc3RydWN0IGludGVsX2RwICpp bnRlbF9kcCwgY29uc3QgaW50Cj4gPiAqKnNvdXJjZV9yYXRlcykKPiA+ICt7Cj4gPiArCXN0cnVj dCBpbnRlbF9kaWdpdGFsX3BvcnQgKmRpZ19wb3J0ID0KPiA+IGRwX3RvX2RpZ19wb3J0KGludGVs X2RwKTsKPiA+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShk aWdfcG9ydC0KPiA+ID5iYXNlLmJhc2UuZGV2KTsKPiA+ICsJaW50IHNpemU7Cj4gPiArCj4gPiAr CWlmIChJU19CUk9YVE9OKGRldl9wcml2KSkgewo+ID4gKwkJKnNvdXJjZV9yYXRlcyA9IGJ4dF9y YXRlczsKPiA+ICsJCXNpemUgPSBBUlJBWV9TSVpFKGJ4dF9yYXRlcyk7Cj4gPiArCX0gZWxzZSBp ZiAoSVNfU0tZTEFLRShkZXZfcHJpdikgfHwgSVNfS0FCWUxBS0UoZGV2X3ByaXYpKSB7Cj4gPiAr CQkqc291cmNlX3JhdGVzID0gc2tsX3JhdGVzOwo+ID4gKwkJc2l6ZSA9IEFSUkFZX1NJWkUoc2ts X3JhdGVzKTsKPiA+ICsJfSBlbHNlIHsKPiA+ICsJCSpzb3VyY2VfcmF0ZXMgPSBkZWZhdWx0X3Jh dGVzOwo+ID4gKwkJc2l6ZSA9IEFSUkFZX1NJWkUoZGVmYXVsdF9yYXRlcyk7Cj4gPiArCX0KPiA+ ICsKPiA+ICsJLyogVGhpcyBkZXBlbmRzIG9uIHRoZSBmYWN0IHRoYXQgNS40IGlzIGxhc3QgdmFs dWUgaW4gdGhlCj4gPiBhcnJheSAqLwo+ID4gKwlpZiAoIWludGVsX2RwX3NvdXJjZV9zdXBwb3J0 c19oYnIyKGludGVsX2RwKSkKPiA+ICsJCXNpemUtLTsKPiA+ICsKPiA+ICsJcmV0dXJuIHNpemU7 Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgaW50ZXJzZWN0X3JhdGVzKGNvbnN0IGludCAq c291cmNlX3JhdGVzLCBpbnQgc291cmNlX2xlbiwKPiA+ICsJCQnCoMKgwqBjb25zdCBpbnQgKnNp bmtfcmF0ZXMsIGludCBzaW5rX2xlbiwKPiA+ICsJCQnCoMKgwqBpbnQgKmNvbW1vbl9yYXRlcykK PiA+ICt7Cj4gPiArCWludCBpID0gMCwgaiA9IDAsIGsgPSAwOwo+ID4gKwo+ID4gKwl3aGlsZSAo aSA8IHNvdXJjZV9sZW4gJiYgaiA8IHNpbmtfbGVuKSB7Cj4gPiArCQlpZiAoc291cmNlX3JhdGVz W2ldID09IHNpbmtfcmF0ZXNbal0pIHsKPiA+ICsJCQlpZiAoV0FSTl9PTihrID49IERQX01BWF9T VVBQT1JURURfUkFURVMpKQo+ID4gKwkJCQlyZXR1cm4gazsKPiA+ICsJCQljb21tb25fcmF0ZXNb a10gPSBzb3VyY2VfcmF0ZXNbaV07Cj4gPiArCQkJKytrOwo+ID4gKwkJCSsraTsKPiA+ICsJCQkr K2o7Cj4gPiArCQl9IGVsc2UgaWYgKHNvdXJjZV9yYXRlc1tpXSA8IHNpbmtfcmF0ZXNbal0pIHsK PiA+ICsJCQkrK2k7Cj4gPiArCQl9IGVsc2Ugewo+ID4gKwkJCSsrajsKPiA+ICsJCX0KPiA+ICsJ fQo+ID4gKwlyZXR1cm4gazsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBpbnRlbF9kcF9j b21tb25fcmF0ZXMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwKPiA+ICsJCQkJwqBpbnQgKmNv bW1vbl9yYXRlcykKPiA+ICt7Cj4gPiArCWNvbnN0IGludCAqc291cmNlX3JhdGVzLCAqc2lua19y YXRlczsKPiA+ICsJaW50IHNvdXJjZV9sZW4sIHNpbmtfbGVuOwo+ID4gKwo+ID4gKwlzaW5rX2xl biA9IGludGVsX2RwX3NpbmtfcmF0ZXMoaW50ZWxfZHAsICZzaW5rX3JhdGVzKTsKPiA+ICsKPiA+ ICsJLyogQ2FwIHNpbmsgcmF0ZXMgdy5yLnQgdXBmcm9udCB2YWx1ZXMgKi8KPiA+ICsJaWYgKGlu dGVsX2RwLT5tYXhfbGlua19yYXRlX3VwZnJvbnQpIHsKPiA+ICsJCWludCBsZW4gPSBzaW5rX2xl biAtIDE7Cj4gPiArCQl3aGlsZSAobGVuID4gMCAmJiBzaW5rX3JhdGVzW2xlbl0gPgo+ID4gKwkJ wqDCoMKgwqDCoMKgwqBpbnRlbF9kcC0+bWF4X2xpbmtfcmF0ZV91cGZyb250KQo+ID4gKwkJCWxl bi0tOwo+ID4gKwkJc2lua19sZW4gPSBsZW4gKyAxOwo+ID4gKwl9Cj4gPiArCj4gPiArCXNvdXJj ZV9sZW4gPSBpbnRlbF9kcF9zb3VyY2VfcmF0ZXMoaW50ZWxfZHAsICZzb3VyY2VfcmF0ZXMpOwo+ ID4gKwo+ID4gKwlyZXR1cm4gaW50ZXJzZWN0X3JhdGVzKHNvdXJjZV9yYXRlcywgc291cmNlX2xl biwKPiA+ICsJCQnCoMKgwqDCoMKgwqDCoHNpbmtfcmF0ZXMsIHNpbmtfbGVuLAo+ID4gKwkJCcKg wqDCoMKgwqDCoMKgY29tbW9uX3JhdGVzKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGJvb2wg aW50ZWxfZHBfdXBmcm9udF9saW5rX3RyYWluKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4g PiArewo+ID4gKwlzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICppbnRlbF9kaWdfcG9ydCA9Cj4g PiBkcF90b19kaWdfcG9ydChpbnRlbF9kcCk7Cj4gPiArCXN0cnVjdCBpbnRlbF9lbmNvZGVyICpp bnRlbF9lbmNvZGVyID0gJmludGVsX2RpZ19wb3J0LT5iYXNlOwo+ID4gKwlzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2ID0gaW50ZWxfZW5jb2Rlci0+YmFzZS5kZXY7Cj4gPiArCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKPiA+ICsJc3RydWN0IGRybV9tb2Rl X2NvbmZpZyAqY29uZmlnID0gJmRldi0+bW9kZV9jb25maWc7Cj4gPiArCXN0cnVjdCBkcm1fbW9k ZXNldF9hY3F1aXJlX2N0eCBjdHg7Cj4gPiArCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRj Owo+ID4gKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBOVUxMOwo+ID4gKwlzdHJ1Y3QgaW50ZWxf c2hhcmVkX2RwbGwgKnBsbDsKPiA+ICsJc3RydWN0IGludGVsX3NoYXJlZF9kcGxsX2NvbmZpZyB0 bXBfcGxsX2NvbmZpZzsKPiA+ICsJYm9vbCBkaXNhYmxlX2RwbGwgPSBmYWxzZTsKPiA+ICsJaW50 IHJldDsKPiA+ICsJYm9vbCBkb25lID0gZmFsc2UsIGhhc19tc3QgPSBmYWxzZTsKPiA+ICsJdWlu dDhfdCBtYXhfbGFuZXM7Cj4gPiArCWludCBjb21tb25fcmF0ZXNbRFBfTUFYX1NVUFBPUlRFRF9S QVRFU10gPSB7fTsKPiA+ICsJaW50IGNvbW1vbl9sZW47Cj4gPiArCWVudW0gaW50ZWxfZGlzcGxh eV9wb3dlcl9kb21haW4gcG93ZXJfZG9tYWluOwo+ID4gKwo+ID4gKwlwb3dlcl9kb21haW4gPQo+ ID4gaW50ZWxfZGlzcGxheV9wb3J0X3Bvd2VyX2RvbWFpbihpbnRlbF9lbmNvZGVyKTsKPiA+ICsJ aW50ZWxfZGlzcGxheV9wb3dlcl9nZXQoZGV2X3ByaXYsIHBvd2VyX2RvbWFpbik7Cj4gPiArCj4g PiArCWNvbW1vbl9sZW4gPSBpbnRlbF9kcF9jb21tb25fcmF0ZXMoaW50ZWxfZHAsIGNvbW1vbl9y YXRlcyk7Cj4gPiArCW1heF9sYW5lcyA9IGludGVsX2RwX21heF9sYW5lX2NvdW50KGludGVsX2Rw KTsKPiA+ICsJaWYgKFdBUk5fT04oY29tbW9uX2xlbiA8PSAwKSkKPiA+ICsJCXJldHVybiB0cnVl Owo+ID4gKwo+ID4gKwlkcm1fbW9kZXNldF9hY3F1aXJlX2luaXQoJmN0eCwgMCk7Cj4gPiArcmV0 cnk6Cj4gPiArCXJldCA9IGRybV9tb2Rlc2V0X2xvY2soJmNvbmZpZy0+Y29ubmVjdGlvbl9tdXRl eCwgJmN0eCk7Cj4gPiArCWlmIChyZXQpCj4gPiArCQlnb3RvIGV4aXRfZmFpbDsKPiA+ICsKPiA+ ICsJaWYgKGludGVsX2VuY29kZXItPmJhc2UuY3J0Yykgewo+ID4gKwkJY3J0YyA9IGludGVsX2Vu Y29kZXItPmJhc2UuY3J0YzsKPiA+ICsKPiA+ICsJCXJldCA9IGRybV9tb2Rlc2V0X2xvY2soJmNy dGMtPm11dGV4LCAmY3R4KTsKPiA+ICsJCWlmIChyZXQpCj4gPiArCQkJZ290byBleGl0X2ZhaWw7 Cj4gPiArCj4gPiArCQlyZXQgPSBkcm1fbW9kZXNldF9sb2NrKCZjcnRjLT5wcmltYXJ5LT5tdXRl eCwgJmN0eCk7Cj4gPiArCQlpZiAocmV0KQo+ID4gKwkJCWdvdG8gZXhpdF9mYWlsOwo+ID4gKwo+ ID4gKwkJaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7Cj4gPiArCQlwbGwgPSBpbnRl bF9jcnRjLT5jb25maWctPnNoYXJlZF9kcGxsOwo+ID4gKwkJZGlzYWJsZV9kcGxsID0gdHJ1ZTsK PiA+ICsJCWhhc19tc3QgPSBpbnRlbF9jcnRjX2hhc190eXBlKGludGVsX2NydGMtPmNvbmZpZywK PiA+ICsJCQkJCcKgwqDCoMKgwqDCoElOVEVMX09VVFBVVF9EUF9NU1QpOwo+ID4gKwkJcmV0ID0g aW50ZWxfZHBfdXBmcm9udF9jcnRjX2Rpc2FibGUoaW50ZWxfY3J0YywKPiA+ICZjdHgsIGZhbHNl KTsKPiA+ICsJCWlmIChyZXQpCj4gPiArCQkJZ290byBleGl0X2ZhaWw7Cj4gPiArCX0KPiA+ICsK PiA+ICsJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmRwbGxfbG9jayk7Cj4gPiArCWlmIChkaXNhYmxl X2RwbGwpIHsKPiA+ICsJCS8qIENsZWFyIHRoZSBQTEwgY29uZmlnIHN0YXRlICovCj4gPiArCQl0 bXBfcGxsX2NvbmZpZyA9IHBsbC0+Y29uZmlnOwo+ID4gKwkJcGxsLT5jb25maWcuY3J0Y19tYXNr ID0gMDsKPiA+ICsJfQo+ID4gKwo+ID4gKwlkb25lID0gaW50ZWxfZHAtPnVwZnJvbnRfbGlua190 cmFpbihpbnRlbF9kcCwKPiA+ICsJCQkJCcKgwqDCoMKgY29tbW9uX3JhdGVzW2NvbW1vbl9sZW4t Cj4gPiAxXSwKPiA+ICsJCQkJCcKgwqDCoMKgbWF4X2xhbmVzLAo+ID4gKwkJCQkJwqDCoMKgwqBo YXNfbXN0LAo+ID4gKwkJCQkJwqDCoMKgwqB0cnVlKTsKPiA+ICsJaWYgKGRpc2FibGVfZHBsbCkK PiA+ICsJCXBsbC0+Y29uZmlnID0gdG1wX3BsbF9jb25maWc7Cj4gPiArCj4gPiArCW11dGV4X3Vu bG9jaygmZGV2X3ByaXYtPmRwbGxfbG9jayk7Cj4gPiArCj4gPiArCWlmIChjcnRjKQo+ID4gKwkJ cmV0ID0gaW50ZWxfZHBfdXBmcm9udF9jcnRjX2Rpc2FibGUoaW50ZWxfY3J0YywKPiA+ICZjdHgs IHRydWUpOwo+ID4gKwo+ID4gK2V4aXRfZmFpbDoKPiA+ICsJaWYgKHJldCA9PSAtRURFQURMSykg ewo+ID4gKwkJZHJtX21vZGVzZXRfYmFja29mZigmY3R4KTsKPiA+ICsJCWdvdG8gcmV0cnk7Cj4g PiArCX0KPiA+ICsJZHJtX21vZGVzZXRfZHJvcF9sb2NrcygmY3R4KTsKPiA+ICsJZHJtX21vZGVz ZXRfYWNxdWlyZV9maW5pKCZjdHgpOwo+ID4gKwlpbnRlbF9kaXNwbGF5X3Bvd2VyX3B1dChkZXZf cHJpdiwgcG93ZXJfZG9tYWluKTsKPiA+ICsJcmV0dXJuIGRvbmU7Cj4gPiArfQo+ID4gKwo+ID4g wqBzdGF0aWMgZW51bSBkcm1fbW9kZV9zdGF0dXMKPiA+IMKgaW50ZWxfZHBfbW9kZV92YWxpZChz dHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+ID4gwqAJCcKgwqDCoMKgc3RydWN0IGRy bV9kaXNwbGF5X21vZGUgKm1vZGUpCj4gPiBAQCAtMjExLDYgKzQ0MywxOSBAQCBpbnRlbF9kcF9t b2RlX3ZhbGlkKHN0cnVjdCBkcm1fY29ubmVjdG9yCj4gPiAqY29ubmVjdG9yLAo+ID4gwqAJCXRh cmdldF9jbG9jayA9IGZpeGVkX21vZGUtPmNsb2NrOwo+ID4gwqAJfQo+ID4gwqAKPiA+ICsJaWYg KGludGVsX2RwLT51cGZyb250X2xpbmtfdHJhaW4gJiYgIWludGVsX2RwLT51cGZyb250X2RvbmUp IAo+ID4gewo+ID4gKwkJYm9vbCBkb191cGZyb250X2xpbmtfdHJhaW47Cj4gPiArCQkvKiBEbyBu b3QgZG8gdXBmcm9udCBsaW5rIHRyYWluLCBpZiBpdCBpcyBhCj4gPiBjb21wbGlhbmNlCj4gPiAr CQnCoCogcmVxdWVzdAo+ID4gKwkJwqAqLwo+ID4gKwkJZG9fdXBmcm9udF9saW5rX3RyYWluID0g IWludGVsX2RwLT51cGZyb250X2RvbmUgJiYKPiA+ICsJCQkoaW50ZWxfZHAtPmNvbXBsaWFuY2Vf dGVzdF90eXBlICE9Cj4gPiArCQkJwqBEUF9URVNUX0xJTktfVFJBSU5JTkcpOwo+ID4gKwo+ID4g KwkJaWYgKGRvX3VwZnJvbnRfbGlua190cmFpbikKPiA+ICsJCQlpbnRlbF9kcC0+dXBmcm9udF9k b25lID0KPiA+IGludGVsX2RwX3VwZnJvbnRfbGlua190cmFpbihpbnRlbF9kcCk7Cj4gPiArCX0K PiA+ICsKPiA+IMKgCW1heF9saW5rX2Nsb2NrID0gaW50ZWxfZHBfbWF4X2xpbmtfcmF0ZShpbnRl bF9kcCk7Cj4gPiDCoAltYXhfbGFuZXMgPSBpbnRlbF9kcF9tYXhfbGFuZV9jb3VudChpbnRlbF9k cCk7Cj4gPiDCoAo+ID4gQEAgLTEyNTYsNjAgKzE1MDEsNiBAQCBpbnRlbF9kcF9hdXhfaW5pdChz dHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLAo+ID4gc3RydWN0IGludGVsX2Nvbm5lY3RvciAqY29u bmVjdG9yKQo+ID4gwqAJaW50ZWxfZHAtPmF1eC50cmFuc2ZlciA9IGludGVsX2RwX2F1eF90cmFu c2ZlcjsKPiA+IMKgfQo+ID4gwqAKPiA+IC1zdGF0aWMgaW50Cj4gPiAtaW50ZWxfZHBfc2lua19y YXRlcyhzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLCBjb25zdCBpbnQKPiA+ICoqc2lua19yYXRl cykKPiA+IC17Cj4gPiAtCWlmIChpbnRlbF9kcC0+bnVtX3NpbmtfcmF0ZXMpIHsKPiA+IC0JCSpz aW5rX3JhdGVzID0gaW50ZWxfZHAtPnNpbmtfcmF0ZXM7Cj4gPiAtCQlyZXR1cm4gaW50ZWxfZHAt Pm51bV9zaW5rX3JhdGVzOwo+ID4gLQl9Cj4gPiAtCj4gPiAtCSpzaW5rX3JhdGVzID0gZGVmYXVs dF9yYXRlczsKPiA+IC0KPiA+IC0JcmV0dXJuIChpbnRlbF9kcF9tYXhfbGlua19idyhpbnRlbF9k cCkgPj4gMykgKyAxOwo+ID4gLX0KPiA+IC0KPiA+IC1ib29sIGludGVsX2RwX3NvdXJjZV9zdXBw b3J0c19oYnIyKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gPiAtewo+ID4gLQlzdHJ1Y3Qg aW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdfcG9ydCA9Cj4gPiBkcF90b19kaWdfcG9ydChpbnRlbF9k cCk7Cj4gPiAtCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBkaWdfcG9ydC0+YmFzZS5iYXNlLmRl djsKPiA+IC0KPiA+IC0JLyogV2FEaXNhYmxlSEJSMjpza2wgKi8KPiA+IC0JaWYgKElTX1NLTF9S RVZJRChkZXYsIDAsIFNLTF9SRVZJRF9CMCkpCj4gPiAtCQlyZXR1cm4gZmFsc2U7Cj4gPiAtCj4g PiAtCWlmICgoSVNfSEFTV0VMTChkZXYpICYmICFJU19IU1dfVUxYKGRldikpIHx8Cj4gPiBJU19C Uk9BRFdFTEwoZGV2KSB8fAo+ID4gLQnCoMKgwqDCoChJTlRFTF9JTkZPKGRldiktPmdlbiA+PSA5 KSkKPiA+IC0JCXJldHVybiB0cnVlOwo+ID4gLQllbHNlCj4gPiAtCQlyZXR1cm4gZmFsc2U7Cj4g PiAtfQo+ID4gLQo+ID4gLXN0YXRpYyBpbnQKPiA+IC1pbnRlbF9kcF9zb3VyY2VfcmF0ZXMoc3Ry dWN0IGludGVsX2RwICppbnRlbF9kcCwgY29uc3QgaW50Cj4gPiAqKnNvdXJjZV9yYXRlcykKPiA+ IC17Cj4gPiAtCXN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmRpZ19wb3J0ID0KPiA+IGRwX3Rv X2RpZ19wb3J0KGludGVsX2RwKTsKPiA+IC0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGRpZ19w b3J0LT5iYXNlLmJhc2UuZGV2Owo+ID4gLQlpbnQgc2l6ZTsKPiA+IC0KPiA+IC0JaWYgKElTX0JS T1hUT04oZGV2KSkgewo+ID4gLQkJKnNvdXJjZV9yYXRlcyA9IGJ4dF9yYXRlczsKPiA+IC0JCXNp emUgPSBBUlJBWV9TSVpFKGJ4dF9yYXRlcyk7Cj4gPiAtCX0gZWxzZSBpZiAoSVNfU0tZTEFLRShk ZXYpIHx8IElTX0tBQllMQUtFKGRldikpIHsKPiA+IC0JCSpzb3VyY2VfcmF0ZXMgPSBza2xfcmF0 ZXM7Cj4gPiAtCQlzaXplID0gQVJSQVlfU0laRShza2xfcmF0ZXMpOwo+ID4gLQl9IGVsc2Ugewo+ ID4gLQkJKnNvdXJjZV9yYXRlcyA9IGRlZmF1bHRfcmF0ZXM7Cj4gPiAtCQlzaXplID0gQVJSQVlf U0laRShkZWZhdWx0X3JhdGVzKTsKPiA+IC0JfQo+ID4gLQo+ID4gLQkvKiBUaGlzIGRlcGVuZHMg b24gdGhlIGZhY3QgdGhhdCA1LjQgaXMgbGFzdCB2YWx1ZSBpbiB0aGUKPiA+IGFycmF5ICovCj4g PiAtCWlmICghaW50ZWxfZHBfc291cmNlX3N1cHBvcnRzX2hicjIoaW50ZWxfZHApKQo+ID4gLQkJ c2l6ZS0tOwo+ID4gLQo+ID4gLQlyZXR1cm4gc2l6ZTsKPiA+IC19Cj4gPiAtCj4gPiDCoHN0YXRp YyB2b2lkCj4gPiDCoGludGVsX2RwX3NldF9jbG9jayhzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5j b2RlciwKPiA+IMKgCQnCoMKgwqBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcp Cj4gPiBAQCAtMTM0Myw0MiArMTUzNCw2IEBAIGludGVsX2RwX3NldF9jbG9jayhzdHJ1Y3QgaW50 ZWxfZW5jb2Rlcgo+ID4gKmVuY29kZXIsCj4gPiDCoAl9Cj4gPiDCoH0KPiA+IMKgCj4gPiAtc3Rh dGljIGludCBpbnRlcnNlY3RfcmF0ZXMoY29uc3QgaW50ICpzb3VyY2VfcmF0ZXMsIGludCBzb3Vy Y2VfbGVuLAo+ID4gLQkJCcKgwqDCoGNvbnN0IGludCAqc2lua19yYXRlcywgaW50IHNpbmtfbGVu LAo+ID4gLQkJCcKgwqDCoGludCAqY29tbW9uX3JhdGVzKQo+ID4gLXsKPiA+IC0JaW50IGkgPSAw LCBqID0gMCwgayA9IDA7Cj4gPiAtCj4gPiAtCXdoaWxlIChpIDwgc291cmNlX2xlbiAmJiBqIDwg c2lua19sZW4pIHsKPiA+IC0JCWlmIChzb3VyY2VfcmF0ZXNbaV0gPT0gc2lua19yYXRlc1tqXSkg ewo+ID4gLQkJCWlmIChXQVJOX09OKGsgPj0gRFBfTUFYX1NVUFBPUlRFRF9SQVRFUykpCj4gPiAt CQkJCXJldHVybiBrOwo+ID4gLQkJCWNvbW1vbl9yYXRlc1trXSA9IHNvdXJjZV9yYXRlc1tpXTsK PiA+IC0JCQkrK2s7Cj4gPiAtCQkJKytpOwo+ID4gLQkJCSsrajsKPiA+IC0JCX0gZWxzZSBpZiAo c291cmNlX3JhdGVzW2ldIDwgc2lua19yYXRlc1tqXSkgewo+ID4gLQkJCSsraTsKPiA+IC0JCX0g ZWxzZSB7Cj4gPiAtCQkJKytqOwo+ID4gLQkJfQo+ID4gLQl9Cj4gPiAtCXJldHVybiBrOwo+ID4g LX0KPiA+IC0KPiA+IC1zdGF0aWMgaW50IGludGVsX2RwX2NvbW1vbl9yYXRlcyhzdHJ1Y3QgaW50 ZWxfZHAgKmludGVsX2RwLAo+ID4gLQkJCQnCoGludCAqY29tbW9uX3JhdGVzKQo+ID4gLXsKPiA+ IC0JY29uc3QgaW50ICpzb3VyY2VfcmF0ZXMsICpzaW5rX3JhdGVzOwo+ID4gLQlpbnQgc291cmNl X2xlbiwgc2lua19sZW47Cj4gPiAtCj4gPiAtCXNpbmtfbGVuID0gaW50ZWxfZHBfc2lua19yYXRl cyhpbnRlbF9kcCwgJnNpbmtfcmF0ZXMpOwo+ID4gLQlzb3VyY2VfbGVuID0gaW50ZWxfZHBfc291 cmNlX3JhdGVzKGludGVsX2RwLCAmc291cmNlX3JhdGVzKTsKPiA+IC0KPiA+IC0JcmV0dXJuIGlu dGVyc2VjdF9yYXRlcyhzb3VyY2VfcmF0ZXMsIHNvdXJjZV9sZW4sCj4gPiAtCQkJwqDCoMKgwqDC oMKgwqBzaW5rX3JhdGVzLCBzaW5rX2xlbiwKPiA+IC0JCQnCoMKgwqDCoMKgwqDCoGNvbW1vbl9y YXRlcyk7Cj4gPiAtfQo+ID4gwqAKPiA+IMKgc3RhdGljIHZvaWQgc25wcmludGZfaW50X2FycmF5 KGNoYXIgKnN0ciwgc2l6ZV90IGxlbiwKPiA+IMKgCQkJwqDCoMKgwqDCoMKgwqBjb25zdCBpbnQg KmFycmF5LCBpbnQgbmVsZW0pCj4gPiBAQCAtMTQzNiw2ICsxNTkxLDkgQEAgaW50ZWxfZHBfbWF4 X2xpbmtfcmF0ZShzdHJ1Y3QgaW50ZWxfZHAKPiA+ICppbnRlbF9kcCkKPiA+IMKgCWludCByYXRl c1tEUF9NQVhfU1VQUE9SVEVEX1JBVEVTXSA9IHt9Owo+ID4gwqAJaW50IGxlbjsKPiA+IMKgCj4g PiArCWlmIChpbnRlbF9kcC0+bWF4X2xpbmtfcmF0ZV91cGZyb250KQo+ID4gKwkJcmV0dXJuIGlu dGVsX2RwLT5tYXhfbGlua19yYXRlX3VwZnJvbnQ7Cj4gPiArCj4gPiDCoAlsZW4gPSBpbnRlbF9k cF9jb21tb25fcmF0ZXMoaW50ZWxfZHAsIHJhdGVzKTsKPiA+IMKgCWlmIChXQVJOX09OKGxlbiA8 PSAwKSkKPiA+IMKgCQlyZXR1cm4gMTYyMDAwOwo+ID4gQEAgLTE0ODgsNyArMTY0Niw3IEBAIGlu dGVsX2RwX2NvbXB1dGVfY29uZmlnKHN0cnVjdCBpbnRlbF9lbmNvZGVyCj4gPiAqZW5jb2RlciwK PiA+IMKgCWVudW0gcG9ydCBwb3J0ID0gZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHApLT5wb3J0Owo+ ID4gwqAJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKHBpcGVf Y29uZmlnLQo+ID4gPmJhc2UuY3J0Yyk7Cj4gPiDCoAlzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpp bnRlbF9jb25uZWN0b3IgPSBpbnRlbF9kcC0KPiA+ID5hdHRhY2hlZF9jb25uZWN0b3I7Cj4gPiAt CWludCBsYW5lX2NvdW50LCBjbG9jazsKPiA+ICsJaW50IGxhbmVfY291bnQsIGNsb2NrID0gMDsK PiA+IMKgCWludCBtaW5fbGFuZV9jb3VudCA9IDE7Cj4gPiDCoAlpbnQgbWF4X2xhbmVfY291bnQg PSBpbnRlbF9kcF9tYXhfbGFuZV9jb3VudChpbnRlbF9kcCk7Cj4gPiDCoAkvKiBDb252ZW5pZW50 bHksIHRoZSBsaW5rIEJXIGNvbnN0YW50cyBiZWNvbWUgaW5kaWNlcyB3aXRoIGEKPiA+IHNoaWZ0 Li4uKi8KPiA+IEBAIC0xNTY3LDExICsxNzI1LDI0IEBAIGludGVsX2RwX2NvbXB1dGVfY29uZmln KHN0cnVjdCBpbnRlbF9lbmNvZGVyCj4gPiAqZW5jb2RlciwKPiA+IMKgCWZvciAoOyBicHAgPj0g NiozOyBicHAgLT0gMiozKSB7Cj4gPiDCoAkJbW9kZV9yYXRlID0gaW50ZWxfZHBfbGlua19yZXF1 aXJlZChhZGp1c3RlZF9tb2RlLQo+ID4gPmNydGNfY2xvY2ssCj4gPiDCoAkJCQkJCcKgwqDCoGJw cCk7Cj4gPiArCQlpZiAoIWlzX2VkcChpbnRlbF9kcCkgJiYgaW50ZWxfZHAtPnVwZnJvbnRfZG9u ZSkgewo+ID4gKwkJCWNsb2NrID0gbWF4X2Nsb2NrOwo+ID4gKwkJCWxhbmVfY291bnQgPSBpbnRl bF9kcC0+bWF4X2xhbmVzX3VwZnJvbnQ7Cj4gPiArCQkJbGlua19jbG9jayA9IGludGVsX2RwLQo+ ID4gPm1heF9saW5rX3JhdGVfdXBmcm9udDsKPiA+ICsJCQlsaW5rX2F2YWlsID0KPiA+IGludGVs X2RwX21heF9kYXRhX3JhdGUobGlua19jbG9jaywKPiA+ICsJCQkJCQkJwqDCoMKgwqBsYW5lX2Nv dQo+ID4gbnQpOwo+ID4gKwkJCW1vZGVfcmF0ZSA9Cj4gPiBpbnRlbF9kcF9saW5rX3JlcXVpcmVk KGFkanVzdGVkX21vZGUtPmNydGNfY2xvY2ssCj4gPiArCQkJCQkJCcKgwqDCoGJwcCk7Cj4gPiAr CQkJaWYgKG1vZGVfcmF0ZSA8PSBsaW5rX2F2YWlsKQo+ID4gKwkJCQlnb3RvIGZvdW5kOwo+ID4g KwkJCWVsc2UKPiA+ICsJCQkJY29udGludWU7Cj4gPiArCQl9Cj4gPiArCj4gPiDCoAkJZm9yIChj bG9jayA9IG1heF9jbG9jazsgY2xvY2sgPj0gbWF4X2Nsb2NrOyBjbG9jay0tKQo+ID4gewo+ID4g wqAJCQlmb3IgKGxhbmVfY291bnQgPSBtYXhfbGFuZV9jb3VudDsKPiA+IMKgCQkJwqDCoMKgwqDC oGxhbmVfY291bnQgPj0gbWluX2xhbmVfY291bnQ7Cj4gPiDCoAkJCcKgwqDCoMKgwqBsYW5lX2Nv dW50ID4+PSAxKSB7Cj4gPiAtCj4gPiDCoAkJCQlsaW5rX2Nsb2NrID0gY29tbW9uX3JhdGVzW2Ns b2NrXTsKPiA+IMKgCQkJCWxpbmtfYXZhaWwgPQo+ID4gaW50ZWxfZHBfbWF4X2RhdGFfcmF0ZShs aW5rX2Nsb2NrLAo+ID4gwqAJCQkJCQkJCcKgwqDCoMKgCj4gPiBsYW5lX2NvdW50KTsKPiA+IEBA IC0xNjAwLDcgKzE3NzEsNiBAQCBmb3VuZDoKPiA+IMKgCX0KPiA+IMKgCj4gPiDCoAlwaXBlX2Nv bmZpZy0+bGFuZV9jb3VudCA9IGxhbmVfY291bnQ7Cj4gPiAtCj4gPiDCoAlwaXBlX2NvbmZpZy0+ cGlwZV9icHAgPSBicHA7Cj4gPiDCoAlwaXBlX2NvbmZpZy0+cG9ydF9jbG9jayA9IGNvbW1vbl9y YXRlc1tjbG9ja107Cj4gPiDCoAo+ID4gQEAgLTQyODQsNyArNDQ1NCw3IEBAIGludGVsX2RwX2xv bmdfcHVsc2Uoc3RydWN0IGludGVsX2Nvbm5lY3Rvcgo+ID4gKmludGVsX2Nvbm5lY3RvcikKPiA+ IMKgCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25uZWN0b3ItPmRldjsKPiA+IMKgCWVudW0g ZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgc3RhdHVzOwo+ID4gwqAJZW51bSBpbnRlbF9kaXNwbGF5X3Bv d2VyX2RvbWFpbiBwb3dlcl9kb21haW47Cj4gPiAtCXU4IHNpbmtfaXJxX3ZlY3RvciA9IDA7Cj4g PiArCXU4IHNpbmtfaXJxX3ZlY3RvcjsKPiA+IMKgCj4gPiDCoAlwb3dlcl9kb21haW4gPQo+ID4g aW50ZWxfZGlzcGxheV9wb3J0X2F1eF9wb3dlcl9kb21haW4oaW50ZWxfZW5jb2Rlcik7Cj4gPiDC oAlpbnRlbF9kaXNwbGF5X3Bvd2VyX2dldCh0b19pOTE1KGRldiksIHBvd2VyX2RvbWFpbik7Cj4g PiBAQCAtNDM3Nyw5ICs0NTQ3LDEyIEBAIGludGVsX2RwX2xvbmdfcHVsc2Uoc3RydWN0IGludGVs X2Nvbm5lY3Rvcgo+ID4gKmludGVsX2Nvbm5lY3RvcikKPiA+IMKgCX0KPiA+IMKgCj4gPiDCoG91 dDoKPiA+IC0JaWYgKChzdGF0dXMgIT0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQpICYmCj4g PiAtCcKgwqDCoMKgKGludGVsX2RwLT5pc19tc3QgPT0gZmFsc2UpKQo+ID4gKwlpZiAoc3RhdHVz ICE9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkKSB7Cj4gPiDCoAkJaW50ZWxfZHBfdW5zZXRf ZWRpZChpbnRlbF9kcCk7Cj4gPiArCQlpbnRlbF9kcC0+dXBmcm9udF9kb25lID0gZmFsc2U7Cj4g PiArCQlpbnRlbF9kcC0+bWF4X2xhbmVzX3VwZnJvbnQgPSAwOwo+ID4gKwkJaW50ZWxfZHAtPm1h eF9saW5rX3JhdGVfdXBmcm9udCA9IDA7Cj4gPiArCX0KPiA+IMKgCj4gPiDCoAlpbnRlbF9kaXNw bGF5X3Bvd2VyX3B1dCh0b19pOTE1KGRldiksIHBvd2VyX2RvbWFpbik7Cj4gPiDCoAlyZXR1cm47 Cj4gPiBAQCAtNTYyMyw2ICs1Nzk2LDEzIEBAIGludGVsX2RwX2luaXRfY29ubmVjdG9yKHN0cnVj dAo+ID4gaW50ZWxfZGlnaXRhbF9wb3J0ICppbnRlbF9kaWdfcG9ydCwKPiA+IMKgCWlmICh0eXBl ID09IERSTV9NT0RFX0NPTk5FQ1RPUl9lRFApCj4gPiDCoAkJaW50ZWxfZW5jb2Rlci0+dHlwZSA9 IElOVEVMX09VVFBVVF9FRFA7Cj4gPiDCoAo+ID4gKwkvKiBJbml0aWFsaXplIHVwZnJvbnQgbGlu ayB0cmFpbmluZyB2ZnVuYyBmb3IgRFAgKi8KPiA+ICsJaWYgKGludGVsX2VuY29kZXItPnR5cGUg IT0gSU5URUxfT1VUUFVUX0VEUCkgewo+ID4gKwkJaWYgKElTX0JST1hUT04oZGV2X3ByaXYpIHx8 IElTX1NLWUxBS0UoZGV2X3ByaXYpIHx8Cj4gPiArCQnCoMKgwqDCoElTX0JST0FEV0VMTChkZXZf cHJpdikgfHwgSVNfSEFTV0VMTChkZXZfcHJpdikpCj4gPiArCQkJaW50ZWxfZHAtPnVwZnJvbnRf bGlua190cmFpbiA9Cj4gPiBpbnRlbF9kZGlfbGlua190cmFpbjsKPiA+ICsJfQo+ID4gKwo+ID4g wqAJLyogZURQIG9ubHkgb24gcG9ydCBCIGFuZC9vciBDIG9uIHZsdi9jaHYgKi8KPiA+IMKgCWlm IChXQVJOX09OKChJU19WQUxMRVlWSUVXKGRldikgfHwgSVNfQ0hFUlJZVklFVyhkZXYpKSAmJgo+ ID4gwqAJCcKgwqDCoMKgaXNfZWRwKGludGVsX2RwKSAmJiBwb3J0ICE9IFBPUlRfQiAmJiBwb3J0 ICE9Cj4gPiBQT1JUX0MpKQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2RwX2xpbmtfdHJhaW5pbmcuYwo+ID4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9k cF9saW5rX3RyYWluaW5nLmMKPiA+IGluZGV4IGYxZTA4ZjAuLmI2ZjM4MGIgMTAwNjQ0Cj4gPiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcF9saW5rX3RyYWluaW5nLmMKPiA+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwX2xpbmtfdHJhaW5pbmcuYwo+ID4gQEAg LTMwNCw3ICszMDQsNiBAQAo+ID4gaW50ZWxfZHBfbGlua190cmFpbmluZ19jaGFubmVsX2VxdWFs aXphdGlvbihzdHJ1Y3QgaW50ZWxfZHAKPiA+ICppbnRlbF9kcCkKPiA+IMKgCWludGVsX2RwX3Nl dF9pZGxlX2xpbmtfdHJhaW4oaW50ZWxfZHApOwo+ID4gwqAKPiA+IMKgCXJldHVybiBpbnRlbF9k cC0+Y2hhbm5lbF9lcV9zdGF0dXM7Cj4gPiAtCj4gPiDCoH0KPiA+IMKgCj4gPiDCoHZvaWQgaW50 ZWxfZHBfc3RvcF9saW5rX3RyYWluKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKPiA+IGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKPiA+IGluZGV4IGM1NzFiYWYuLmEyYmJmNjggMTAwNjQ0 Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAo+ID4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKPiA+IEBAIC04ODIsNiArODgyLDEyIEBAIHN0 cnVjdCBpbnRlbF9kcCB7Cj4gPiDCoAllbnVtIGhkbWlfZm9yY2VfYXVkaW8gZm9yY2VfYXVkaW87 Cj4gPiDCoAlib29sIGxpbWl0ZWRfY29sb3JfcmFuZ2U7Cj4gPiDCoAlib29sIGNvbG9yX3Jhbmdl X2F1dG87Cj4gPiArCj4gPiArCS8qIFVwZnJvbnQgbGluayB0cmFpbiBwYXJhbWV0ZXJzICovCj4g PiArCWludCBtYXhfbGlua19yYXRlX3VwZnJvbnQ7Cj4gPiArCXVpbnQ4X3QgbWF4X2xhbmVzX3Vw ZnJvbnQ7Cj4gPiArCWJvb2wgdXBmcm9udF9kb25lOwo+ID4gKwo+ID4gwqAJdWludDhfdCBkcGNk W0RQX1JFQ0VJVkVSX0NBUF9TSVpFXTsKPiA+IMKgCXVpbnQ4X3QgcHNyX2RwY2RbRURQX1BTUl9S RUNFSVZFUl9DQVBfU0laRV07Cj4gPiDCoAl1aW50OF90IGRvd25zdHJlYW1fcG9ydHNbRFBfTUFY X0RPV05TVFJFQU1fUE9SVFNdOwo+ID4gQEAgLTkzOSw2ICs5NDUsMTEgQEAgc3RydWN0IGludGVs X2RwIHsKPiA+IMKgCS8qIFRoaXMgaXMgY2FsbGVkIGJlZm9yZSBhIGxpbmsgdHJhaW5pbmcgaXMg c3RhcnRlcmQgKi8KPiA+IMKgCXZvaWQgKCpwcmVwYXJlX2xpbmtfcmV0cmFpbikoc3RydWN0IGlu dGVsX2RwICppbnRlbF9kcCk7Cj4gPiDCoAo+ID4gKwkvKiBGb3IgVXBmcm9udCBsaW5rIHRyYWlu aW5nICovCj4gPiArCWJvb2wgKCp1cGZyb250X2xpbmtfdHJhaW4pKHN0cnVjdCBpbnRlbF9kcCAq aW50ZWxfZHAsIGludAo+ID4gY2xvY2ssCj4gPiArCQkJCcKgwqDCoHVpbnQ4X3QgbGFuZV9jb3Vu dCwgYm9vbAo+ID4gbGlua19tc3QsCj4gPiArCQkJCcKgwqDCoGJvb2wgaXNfdXBmcm9udCk7Cj4g PiArCj4gPiDCoAkvKiBEaXNwbGF5cG9ydCBjb21wbGlhbmNlIHRlc3RpbmcgKi8KPiA+IMKgCXVu c2lnbmVkIGxvbmcgY29tcGxpYW5jZV90ZXN0X3R5cGU7Cj4gPiDCoAl1bnNpZ25lZCBsb25nIGNv bXBsaWFuY2VfdGVzdF9kYXRhOwo+ID4gQEAgLTExNjEsNyArMTE3Miw4IEBAIHZvaWQgaW50ZWxf ZGRpX2Nsb2NrX2dldChzdHJ1Y3QgaW50ZWxfZW5jb2Rlcgo+ID4gKmVuY29kZXIsCj4gPiDCoHZv aWQgaW50ZWxfZGRpX3NldF92Y19wYXlsb2FkX2FsbG9jKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yywg Ym9vbAo+ID4gc3RhdGUpOwo+ID4gwqB1aW50MzJfdCBkZGlfc2lnbmFsX2xldmVscyhzdHJ1Y3Qg aW50ZWxfZHAgKmludGVsX2RwKTsKPiA+IMKgYm9vbCBpbnRlbF9kZGlfbGlua190cmFpbihzdHJ1 Y3QgaW50ZWxfZHAgKmludGVsX2RwLCBpbnQKPiA+IG1heF9saW5rX3JhdGUsCj4gPiAtCQkJwqDC oHVpbnQ4X3QgbWF4X2xhbmVfY291bnQsIGJvb2wgbGlua19tc3QpOwo+ID4gKwkJCcKgwqB1aW50 OF90IG1heF9sYW5lX2NvdW50LCBib29sIGxpbmtfbXN0LAo+ID4gKwkJCcKgwqBib29sIGlzX3Vw ZnJvbnQpOwo+ID4gwqBzdHJ1Y3QgaW50ZWxfc2hhcmVkX2RwbGwgKmludGVsX2RkaV9nZXRfbGlu a19kcGxsKHN0cnVjdCBpbnRlbF9kcAo+ID4gKmludGVsX2RwLAo+ID4gwqAJCQkJCQnCoMKgaW50 IGNsb2NrKTsKPiA+IMKgdW5zaWduZWQgaW50IGludGVsX2ZiX2FsaWduX2hlaWdodChzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LAo+IC0tIAo+IE1pa2EgS2Fob2xhIC0gSW50ZWwgT1RDCj4gCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWls aW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=