From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ander Conselvan De Oliveira Subject: Re: [PATCHv4 3/3] drm/i915/dp: Enable Upfront link training for typeC DP support on BXT Date: Wed, 11 May 2016 12:02:31 +0300 Message-ID: <1462957351.5672.52.camel@gmail.com> References: <1460986305-7116-1-git-send-email-durgadoss.r@intel.com> <1460986305-7116-4-git-send-email-durgadoss.r@intel.com> <1462540164.9307.58.camel@gmail.com> <4D68720C2E767A4AA6A8796D42C8EB5909455383@BGSMSX101.gar.corp.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-pf0-x241.google.com (mail-pf0-x241.google.com [IPv6:2607:f8b0:400e:c00::241]) by gabe.freedesktop.org (Postfix) with ESMTPS id 862126E702 for ; Wed, 11 May 2016 09:02:36 +0000 (UTC) Received: by mail-pf0-x241.google.com with SMTP id g132so3298100pfb.3 for ; Wed, 11 May 2016 02:02:36 -0700 (PDT) In-Reply-To: <4D68720C2E767A4AA6A8796D42C8EB5909455383@BGSMSX101.gar.corp.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: "R, Durgadoss" , "intel-gfx@lists.freedesktop.org" List-Id: intel-gfx@lists.freedesktop.org T24gTW9uLCAyMDE2LTA1LTA5IGF0IDEwOjQzICswMDAwLCBSLCBEdXJnYWRvc3Mgd3JvdGU6Cj4g SGkgQW5kZXIsCj4gCj4gVGhhbmtzIGZvciBsb29raW5nIGF0IGl0Lgo+IEZldyBxdWVyaWVzIGJl bG93Li4KPiAKPiA+IAo+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0KPiA+IEZyb206IEFu ZGVyIENvbnNlbHZhbiBEZSBPbGl2ZWlyYSBbbWFpbHRvOmNvbnNlbHZhbjJAZ21haWwuY29tXQo+ ID4gU2VudDogRnJpZGF5LCBNYXkgNiwgMjAxNiA2OjM5IFBNCj4gPiBUbzogUiwgRHVyZ2Fkb3Nz IDxkdXJnYWRvc3MuckBpbnRlbC5jb20+OyBpbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn Cj4gPiBTdWJqZWN0OiBSZTogW0ludGVsLWdmeF0gW1BBVENIdjQgMy8zXSBkcm0vaTkxNS9kcDog RW5hYmxlIFVwZnJvbnQgbGluawo+ID4gdHJhaW5pbmcgZm9yIHR5cGVDIERQIHN1cHBvcnQgb24g QlhUCj4gPiAKPiA+IE9uIE1vbiwgMjAxNi0wNC0xOCBhdCAxOTowMSArMDUzMCwgRHVyZ2Fkb3Nz IFIgd3JvdGU6Cj4gPiA+IAo+ID4gPiBUbyBzdXBwb3J0IFVTQiB0eXBlIEMgYWx0ZXJuYXRlIERQ IG1vZGUsIHRoZSBkaXNwbGF5IGRyaXZlciBuZWVkcyB0bwo+ID4gPiBrbm93IHRoZSBudW1iZXIg b2YgbGFuZXMgcmVxdWlyZWQgYnkgdGhlIERQIHBhbmVsIGFzIHdlbGwgYXMgbnVtYmVyCj4gPiA+ IG9mIGxhbmVzIHRoYXQgY2FuIGJlIHN1cHBvcnRlZCBieSB0aGUgdHlwZS1DIGNhYmxlLiBTb21l dGltZXMsIHRoZQo+ID4gPiB0eXBlLUMgY2FibGUgbWF5IGxpbWl0IHRoZSBiYW5kd2lkdGggZXZl biBpZiBQYW5lbCBjYW4gc3VwcG9ydAo+ID4gPiBtb3JlIGxhbmVzLiBUbyBhZGRyZXNzIHRoZXNl IHNjZW5hcmlvcywgdGhlIGRpc3BsYXkgZHJpdmVyIHdpbGwKPiA+ID4gc3RhcnQgbGluayB0cmFp bmluZyB3aXRoIG1heCBsYW5lcywgYW5kIGlmIHRoYXQgZmFpbHMsIHRoZSBkcml2ZXIKPiA+ID4g ZmFsbHMgYmFjayB0byB4MiBsYW5lczsgYW5kIHJlcGVhdHMgdGhpcyBwcm9jZWR1cmUgZm9yIGFs bAo+ID4gPiBiYW5kd2lkdGgvbGFuZSBjb25maWd1cmF0aW9ucy4KPiA+ID4gCj4gPiA+ICogU2lu Y2UgbGluayB0cmFpbmluZyBpcyBkb25lIGJlZm9yZSBtb2Rlc2V0IG9ubHkgdGhlIHBvcnQKPiA+ ID4gwqAgKGFuZCBub3QgcGlwZS9wbGFuZXMpIGFuZCBpdHMgYXNzb2NpYXRlZCBQTExzIGFyZSBl bmFibGVkLgo+ID4gPiAqIE9uIERQIGhvdHBsdWc6IERpcmVjdGx5IHN0YXJ0IGxpbmsgdHJhaW5p bmcgb24gdGhlIGNydGMKPiA+ID4gwqAgYXNzb2NpYXRlZCB3aXRoIHRoZSBEUCBlbmNvZGVyLgo+ ID4gPiAqIE9uIENvbm5lY3RlZCBib290IHNjZW5hcmlvczogV2hlbiBib290ZWQgd2l0aCBhbiBM RlAgYW5kIGEgRFAsCj4gPiA+IMKgIHR5cGljYWxseSwgQklPUyBicmluZ3MgdXAgRFAuIEluIHRo ZXNlIGNhc2VzLCB3ZSBkaXNhYmxlIHRoZQo+ID4gPiDCoCBjcnRjIGFuZCB0aGVuIGRvIHVwZnJv bnQgbGluayB0cmFpbmluZzsgYW5kIGxldCB0aGUgc3Vic2VxdWVudAo+ID4gPiDCoCBtb2Rlc2V0 IHJlLWVuYWJsZSB0aGUgY3J0Yy4KPiA+ID4gKiBBbGwgbG9jYWwgY2hhbmdlcyBtYWRlIGZvciB1 cGZyb250IGxpbmsgdHJhaW5pbmcgYXJlIHJlc2V0Cj4gPiA+IMKgIHRvIHRoZWlyIHByZXZpb3Vz IHZhbHVlcyBvbmNlIGl0IGlzIGRvbmU7IHNvIHRoYXQgdGhlCj4gPiA+IMKgIHN1YnNlcXVlbnQg bW9kZXNldCBpcyBub3QgYXdhcmUgb2YgdGhlc2UgY2hhbmdlcy4KPiA+ID4gCj4gPiA+IENoYW5n ZXMgc2luY2UgdjM6Cj4gPiA+ICogRml4ZWQgYSByZXR1cm4gdmFsdWUgb24gQlhUIGNoZWNrCj4g PiA+ICogUmV3b3JrZWQgb24gdG9wIG9mIGJ4dF9kZGlfcGxsX3NlbGVjdCBzcGxpdCBmcm9tIEFu ZGVyCj4gPiA+ICogUmVuYW1lZCBmcm9tIGRkaV91cGZyb250IHRvIGJ4dF91cGZyb250IHNpbmNl IHRoZQo+ID4gPiDCoCB1cGZyb250IGxvZ2ljIGluY2x1ZGVzIEJYVCBzcGVjaWZpYyBmdW5jdGlv bnMgZm9yIG5vdy4KPiA+ID4gQ2hhbmdlcyBzaW5jZSB2MjoKPiA+ID4gKiBSZWJhc2VkIG9uIHRv cCBvZiBsYXRlc3QgZHBsbF9tZ3IuYyBjb2RlIGFuZAo+ID4gPiDCoCBsYXRlc3QgSFBEIHJlbGF0 ZWQgY2xlYW4gdXBzLgo+ID4gPiAqIENvcnJlY3RlZCByZXR1cm4gdmFsdWVzIGZyb20gdXBmcm9u dCAoQW5kZXIpCj4gPiA+ICogQ29ycmVjdGVkIGF0b21pYyBsb2NraW5nIGZvciB1cGZyb250IGlu IGludGVsX2RwLmMgKFZpbGxlKQo+ID4gPiBDaGFuZ2VzIHNpbmNlIHYxOgo+ID4gPiAqwqDCoGFs bCBwbGwgcmVsYXRlZCBmdW5jdGlvbnMgaW5zaWRlIGRkaS5jCj4gPiA+IAo+ID4gPiBTaWduZWQt b2ZmLWJ5OiBEdXJnYWRvc3MgUiA8ZHVyZ2Fkb3NzLnJAaW50ZWwuY29tPgo+ID4gPiAtLS0KPiA+ ID4gwqBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kZGkuYyB8wqDCoDczICsrKysrKysrKysr KysrKysKPiA+ID4gwqBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jwqDCoHwgMTgwCj4g PiA+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQo+ID4gPiDCoGRyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oIHzCoMKgwqA1ICsrCj4gPiA+IMKgMyBmaWxlcyBj aGFuZ2VkLCAyNTYgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKPiA+ID4gCj4gPiA+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kZGkuYwo+ID4gPiBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2RkaS5jCj4gPiA+IGluZGV4IDk2MjM0YzUuLmY3ZmEzZGIg MTAwNjQ0Cj4gPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RkaS5jCj4gPiA+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RkaS5jCj4gPiA+IEBAIC0yMjY4LDYg KzIyNjgsNzkgQEAgaW50ZWxfZGRpX2luaXRfaGRtaV9jb25uZWN0b3Ioc3RydWN0Cj4gPiBpbnRl bF9kaWdpdGFsX3BvcnQKPiA+ID4gCj4gPiA+ICppbnRlbF9kaWdfcG9ydCkKPiA+ID4gwqAJcmV0 dXJuIGNvbm5lY3RvcjsKPiA+ID4gwqB9Cj4gPiA+IAo+ID4gPiAraW50IGludGVsX2J4dF91cGZy b250X2xpbmtfdHJhaW4oc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwKPiA+ID4gKwkJCQlzdHJ1 Y3QgaW50ZWxfY3J0YyAqY3J0YykKPiA+ID4gK3sKPiA+ID4gKwlzdHJ1Y3QgaW50ZWxfY29ubmVj dG9yICpjb25uZWN0b3IgPSBpbnRlbF9kcC0+YXR0YWNoZWRfY29ubmVjdG9yOwo+ID4gPiArCXN0 cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyID0gY29ubmVjdG9yLT5lbmNvZGVyOwo+ID4gPiAr CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZW5jb2Rlci0+YmFz ZS5kZXYpOwo+ID4gPiArCXN0cnVjdCBpbnRlbF9zaGFyZWRfZHBsbCAqcGxsOwo+ID4gPiArCXN0 cnVjdCBpbnRlbF9zaGFyZWRfZHBsbF9jb25maWcgdG1wX3BsbF9jb25maWc7Cj4gPiA+ICsJc3Ry dWN0IGJ4dF9jbGtfZGl2IGNsa19kaXYgPSB7MH07Cj4gPiA+ICsJc3RydWN0IGludGVsX2RpZ2l0 YWxfcG9ydCAqZGlnX3BvcnQgPSBkcF90b19kaWdfcG9ydChpbnRlbF9kcCk7Cj4gPiA+ICsJZW51 bSBpbnRlbF9kcGxsX2lkIGRwbGxfaWQgPSAoZW51bSBpbnRlbF9kcGxsX2lkKWRpZ19wb3J0LT5w b3J0Owo+ID4gPiArCXVpbnQ4X3QgbGlua19idywgbGFuZV9jb3VudDsKPiA+ID4gKwo+ID4gPiAr CWlmIChXQVJOX09OKCFjcnRjKSkKPiA+ID4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gPiA+ICsKPiA+ ID4gKwkvKiBJbml0aWFsaXplIHdpdGggTWF4IExpbmsgcmF0ZSAmIGxhbmUgY291bnQgc3VwcG9y dGVkIGJ5IHBhbmVsCj4gPiA+ICovCj4gPiA+ICsJbGlua19idyA9wqDCoGludGVsX2RwLT5kcGNk W0RQX01BWF9MSU5LX1JBVEVdOwo+ID4gPiArCWxhbmVfY291bnQgPSBkcm1fZHBfbWF4X2xhbmVf Y291bnQoaW50ZWxfZHAtPmRwY2QpOwo+ID4gV2hhdCBpZiB0aGUgcGFuZWwgc3VwcG9ydHMgSEJS Mz8gV2Ugc2hvdWxkIHVzZSB0aGUgbWF4aW11bSBjb21tb24gcmF0ZQo+IE9rLCB0b2RheSB0aGF0 IHdpbGwgYWRkIG9uZSBtb3JlIGl0ZXJhdGlvbiBvZiBMaW5rIHRyYWluaW5nIGJlZm9yZSBnb2lu Zwo+IGRvd24gdG8gYSBzdXBwb3J0ZWQgcmF0ZS7CoAo+IAo+ID4gCj4gPiBiZXR3ZWVuIHNvdXJj ZSBhbmQgc2luay4gQW5kIGl0IHdvdWxkIGJlIG5pY2UgaWYgdGhvc2UgZGV0YWlscyB3aGVyZSBp bgo+ID4gaW50ZWxfZHAuYy4KPiA+IElkZWFsbHksIHRoZSBwbGF0Zm9ybSBzcGVjaWZpYyBwYXJ0 IHdvdWxkIHRha2UgbGluayByYXRlIGFuZCBsYW5lIGNvdW50IGFzCj4gPiBhcmd1bWVudHMgYW5k IGp1c3QgZG8gdGhlIHBsbC9lbmNvZGVyIGVuYWJsaW5nL2Rpc2FibGluZy4KPiBNYXkgYmUgd2l0 aCB0aGUgbmV3IHtsaW5rX2J3L2xhbmVfY291bnR9X3VwZnJvbnQgdmFyaWFibGVzIGluIGludGVs X2RwCj4gc3RydWN0dXJlLAo+IHdlIGNvdWxkIGRvIHRoaXMgZWFzaWx5LiBXaWxsIHRyeSB0aGlz IGltcGxlbWVudGF0aW9uIGFuZCBzZWUgaG93IGl0IGNvbWVzIHVwLgo+IAo+ID4gCj4gPiAKPiA+ ID4gCj4gPiA+ICsKPiA+ID4gKwltdXRleF9sb2NrKCZkZXZfcHJpdi0+ZHBsbF9sb2NrKTsKPiA+ ID4gKwkvKgo+ID4gPiArCcKgKiBGSVhNRTogV29ya3Mgb25seSBmb3IgQlhULgo+ID4gPiArCcKg KiBTZWxlY3QgdGhlIHJlcXVpcmVkIFBMTC4gVGhpcyB3b3JrcyBmb3IgcGxhdGZvcm1zIHdoZXJl Cj4gPiA+ICsJwqAqIHRoZXJlIGlzIG5vIHNoYXJlZCBEUExMLgo+ID4gPiArCcKgKi8KPiA+ID4g KwlwbGwgPSAmZGV2X3ByaXYtPnNoYXJlZF9kcGxsc1tkcGxsX2lkXTsKPiA+ID4gKwlpZiAoV0FS Tl9PTihwbGwtPmFjdGl2ZV9tYXNrKSkgewo+ID4gPiArCQlEUk1fRVJST1IoIlNoYXJlZCBEUExM IGFscmVhZHkgaW4gdXNlLgo+ID4gYWN0aXZlX21hc2s6JXhcbiIsCj4gPiA+IAo+ID4gPiBwbGwt PmFjdGl2ZV9tYXNrKTsKPiA+ID4gKwkJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+ZHBsbF9sb2Nr KTsKPiA+ID4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gPiA+ICsJfQo+ID4gPiArCj4gPiA+ICsJdG1w X3BsbF9jb25maWcgPSBwbGwtPmNvbmZpZzsKPiA+ID4gKwo+ID4gPiArCURSTV9ERUJVR19LTVMo IlVzaW5nIHBpcGUgJWMgd2l0aCBwbGwgJXNcbiIsCj4gPiA+ICsJCQlwaXBlX25hbWUoY3J0Yy0+ cGlwZSksIHBsbC0+bmFtZSk7Cj4gPiA+ICsJZG8gewo+ID4gPiArCQljcnRjLT5jb25maWctPnBv cnRfY2xvY2sgPQo+ID4gPiBkcm1fZHBfYndfY29kZV90b19saW5rX3JhdGUobGlua19idyk7Cj4g PiA+ICsJCWNydGMtPmNvbmZpZy0+bGFuZV9jb3VudCA9IGxhbmVfY291bnQ7Cj4gPiA+ICsKPiA+ ID4gKwkJYnh0X2RkaV9kcF9wbGxfZGl2aWRlcnMoY3J0Yy0+Y29uZmlnLT5wb3J0X2Nsb2NrLAo+ ID4gPiAmY2xrX2Rpdik7Cj4gPiA+ICsJCWlmICghYnh0X2RkaV9zZXRfZHBsbF9od19zdGF0ZShj cnRjLT5jb25maWctPnBvcnRfY2xvY2ssCj4gPiA+ICsJCQkJCSZjbGtfZGl2LCAmcGxsLT5jb25m aWcuaHdfc3RhdGUpKSAKPiA+ID4gewo+ID4gPiArCQkJRFJNX0VSUk9SKCJDb3VsZCBub3Qgc2V0 dXAgRFBMTFxuIik7Cj4gPiA+ICsJCQlnb3RvIGV4aXRfcGxsOwo+ID4gPiArCQl9Cj4gPiA+ICsK PiA+ID4gKwkJLyogRW5hYmxlIFBMTCBmb2xsb3dlZCBieSBwb3J0ICovCj4gPiA+ICsJCXBsbC0+ ZnVuY3MuZW5hYmxlKGRldl9wcml2LCBwbGwpOwo+ID4gPiArCQllbmNvZGVyLT5wcmVfZW5hYmxl KGVuY29kZXIpOwo+ID4gPiArCj4gPiA+ICsJCS8qIENoZWNrIGlmIGxpbmsgdHJhaW5pbmcgcGFz c2VkOyBpZiBzbyB1cGRhdGUgRFBDRCAqLwo+ID4gPiArCQlpZiAoaW50ZWxfZHAtPnRyYWluX3Nl dF92YWxpZCkKPiA+ID4gKwkJCWludGVsX2RwX3VwZGF0ZV9kcGNkX3BhcmFtcyhpbnRlbF9kcCk7 Cj4gPiA+ICsKPiA+ID4gKwkJLyogRGlzYWJsZSBwb3J0IGZvbGxvd2VkIGJ5IFBMTCBmb3IgbmV4 dCByZXRyeS9jbGVhbiB1cAo+ID4gPiAqLwo+ID4gPiArCQllbmNvZGVyLT5wb3N0X2Rpc2FibGUo ZW5jb2Rlcik7Cj4gPiA+ICsJCXBsbC0+ZnVuY3MuZGlzYWJsZShkZXZfcHJpdiwgcGxsKTsKPiA+ ID4gKwo+ID4gPiArCX0gd2hpbGUgKCFpbnRlbF9kcC0+dHJhaW5fc2V0X3ZhbGlkICYmCj4gPiA+ ICsJCWludGVsX2RwX2dldF9saW5rX3JldHJ5X3BhcmFtcyhpbnRlbF9kcCwgJmxhbmVfY291bnQs Cj4gPiA+ICZsaW5rX2J3KSk7Cj4gPiA+ICsKPiA+ID4gKwlEUk1fREVCVUdfS01TKCJVcGZyb250 IGxpbmsgdHJhaW4gJXM6IGxhbmVzOiVkIGJ3OiVkXG4iLAo+ID4gPiArCWludGVsX2RwLT50cmFp bl9zZXRfdmFsaWQgPyAiUGFzc2VkIiA6ICJGYWlsZWQiLCBsYW5lX2NvdW50LAo+ID4gPiBsaW5r X2J3KTsKPiA+ID4gKwo+ID4gPiArZXhpdF9wbGw6Cj4gPiA+ICsJcGxsLT5jb25maWcgPSB0bXBf cGxsX2NvbmZpZzsKPiA+ID4gKwltdXRleF91bmxvY2soJmRldl9wcml2LT5kcGxsX2xvY2spOwo+ ID4gPiArCj4gPiA+ICsJcmV0dXJuIGludGVsX2RwLT50cmFpbl9zZXRfdmFsaWQgPyAwIDogLTE7 Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gwqB2b2lkIGludGVsX2RkaV9pbml0KHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsIGVudW0gcG9ydCBwb3J0KQo+ID4gPiDCoHsKPiA+ID4gwqAJc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiA+ID4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMKPiA+IGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfZHAuYwo+ID4gPiAKPiA+ID4gaW5kZXggNjFlZTIyNi4uNTdkNzE1OSAx MDA2NDQKPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYwo+ID4gPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jCj4gPiA+IEBAIC0xNTk1LDYgKzE1 OTUsNDEgQEAgdm9pZCBpbnRlbF9kcF9zZXRfbGlua19wYXJhbXMoc3RydWN0IGludGVsX2RwCj4g PiA+ICppbnRlbF9kcCwKPiA+ID4gwqAJaW50ZWxfZHAtPmxhbmVfY291bnQgPSBwaXBlX2NvbmZp Zy0+bGFuZV9jb3VudDsKPiA+ID4gwqB9Cj4gPiA+IAo+ID4gPiArdm9pZCBpbnRlbF9kcF91cGRh dGVfZHBjZF9wYXJhbXMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPiA+ID4gK3sKPiA+ID4g KwlpbnRlbF9kcC0+ZHBjZFtEUF9NQVhfTEFORV9DT1VOVF0gJj0KPiA+IH5EUF9NQVhfTEFORV9D T1VOVF9NQVNLOwo+ID4gPiAKPiA+ID4gKwlpbnRlbF9kcC0+ZHBjZFtEUF9NQVhfTEFORV9DT1VO VF0gfD0KPiA+ID4gKwkJCWludGVsX2RwLT5sYW5lX2NvdW50ICYKPiA+IERQX01BWF9MQU5FX0NP VU5UX01BU0s7Cj4gPiA+IAo+ID4gPiArCj4gPiA+ICsJaW50ZWxfZHAtPmRwY2RbRFBfTUFYX0xJ TktfUkFURV0gPQo+ID4gPiArCQkJZHJtX2RwX2xpbmtfcmF0ZV90b19id19jb2RlKGludGVsX2Rw LQo+ID4gPiBsaW5rX3JhdGUpOwo+ID4gSSB0aGluayBJIG1lbnRpb25lZCB0aGlzIGJlZm9yZS4g SSBkb24ndCB0aGluayB3ZSBzaG91bGQgdXBkYXRlIHRoZSBkcGNkCj4gPiBmaWVsZHMKPiA+IGRp cmVjdGx5LiBJbnN0ZWFkLCB0aGVyZSBzaG91bGQgYmUgYSBmaWVsZCBmb3IgdGhlIG1heCByYXRl IGFuZCBsYW5lIGNvdW50Cj4gPiBhY2hpZXZlZCB0aHJvdWdoIHVwZnJvbnQgbGluayB0cmFpbmlu ZyBpbiBzdHJ1Y3QgaW50ZWxfZHAgYW5kCj4gPiBpbnRlbF9kcF9tYXhfbGlua19idygpIGFuZCBp bnRlbF9kcF9tYXhfbGFuZV9jb3VudCgpIHNob3VsZCB0YWtlIHRoYXQKPiA+IGludG8KPiA+IGFj Y291bnQuCj4gSSB0aG91Z2h0IHdlIGFncmVlZCBmb3IgaGF2aW5nIHRoYXQgY2hhbmdlIGFzIGEg bGF0ZXIgaW1wbGVtZW50YXRpb24uCj4gQW55d2F5LCBpdCdzIG5vdCBhIGJpZyBjaGFuZ2U7IFNv IEkgd2lsbCBkbyBhcyBwYXJ0IG9mIG5leHQgcmV2aXNpb24sCj4gcHJvYmFibHkgYXMgYSBzZXBh cmF0ZSBwYXRjaC4KPiAKPiA+IAo+ID4gCj4gPiA+IAo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICti b29sIGludGVsX2RwX2dldF9saW5rX3JldHJ5X3BhcmFtcyhzdHJ1Y3QgaW50ZWxfZHAgKmludGVs X2RwLAo+ID4gPiArCQkJdWludDhfdCAqbGFuZV9jb3VudCwgdWludDhfdCAqbGlua19idykKPiA+ ID4gK3sKPiA+ID4gKwkvKgo+ID4gPiArCcKgKiBBcyBwZXIgRFAxLjMgU3BlYywgcmV0cnkgYWxs IGxpbmsgcmF0ZXMgZm9yIGEgcGFydGljdWxhcgo+ID4gPiArCcKgKiBsYW5lIGNvdW50IHZhbHVl LCBiZWZvcmUgcmVkdWNpbmcgbnVtYmVyIG9mIGxhbmVzLgo+ID4gPiArCcKgKi8KPiA+ID4gKwlp ZiAoKmxpbmtfYncgPT0gRFBfTElOS19CV181XzQpIHsKPiA+ID4gKwkJKmxpbmtfYncgPSBEUF9M SU5LX0JXXzJfNzsKPiA+ID4gKwl9IGVsc2UgaWYgKCpsaW5rX2J3ID09IERQX0xJTktfQldfMl83 KSB7Cj4gPiA+ICsJCSpsaW5rX2J3ID0gRFBfTElOS19CV18xXzYyOwo+ID4gPiArCX0gZWxzZSBp ZiAoKmxhbmVfY291bnQgPT0gNCkgewo+ID4gPiArCQkqbGFuZV9jb3VudCA9IDI7Cj4gPiA+ICsJ CSpsaW5rX2J3ID0gaW50ZWxfZHBfbWF4X2xpbmtfYncoaW50ZWxfZHApOwo+ID4gPiArCX0gZWxz ZSBpZiAoKmxhbmVfY291bnQgPT0gMikgewo+ID4gPiArCQkqbGFuZV9jb3VudCA9IDE7Cj4gPiA+ ICsJCSpsaW5rX2J3ID0gaW50ZWxfZHBfbWF4X2xpbmtfYncoaW50ZWxfZHApOwo+ID4gPiArCX0g ZWxzZSB7Cj4gPiA+ICsJCS8qIFRyaWVkIGFsbCBjb21iaW5hdGlvbnMsIHNvIGV4aXQgKi8KPiA+ ID4gKwkJcmV0dXJuIGZhbHNlOwo+ID4gPiArCX0KPiA+ID4gKwo+ID4gPiArCXJldHVybiB0cnVl Owo+ID4gPiArfQo+ID4gPiArCj4gPiA+IMKgc3RhdGljIHZvaWQgaW50ZWxfZHBfcHJlcGFyZShz dHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlcikKPiA+ID4gwqB7Cj4gPiA+IMKgCXN0cnVjdCBk cm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5iYXNlLmRldjsKPiA+ID4gQEAgLTQ1NDgsNiArNDU4 MywxMzUgQEAgaW50ZWxfZHBfdW5zZXRfZWRpZChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ ID4gPiDCoAlpbnRlbF9kcC0+aGFzX2F1ZGlvID0gZmFsc2U7Cj4gPiA+IMKgfQo+ID4gPiAKPiA+ ID4gK3N0YXRpYyBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqaW50ZWxfZHBfdXBmcm9udF9nZXRf Y3J0Y19zdGF0ZSgKPiA+ID4gKwkJCQlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKPiA+ID4gKwkJ CQlzdHJ1Y3QgZHJtX21vZGVzZXRfYWNxdWlyZV9jdHggKmN0eCkKPiA+ID4gK3sKPiA+ID4gKwlz dHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+YmFzZS5kZXY7Cj4gPiA+ICsJc3RydWN0IGRy bV9hdG9taWNfc3RhdGUgKnN0YXRlOwo+ID4gPiArCXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpj cnRjX3N0YXRlOwo+ID4gPiArCj4gPiA+ICsJc3RhdGUgPSBkcm1fYXRvbWljX3N0YXRlX2FsbG9j KGRldik7Cj4gPiA+ICsJaWYgKCFzdGF0ZSkKPiA+ID4gKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01F TSk7Cj4gPiA+ICsKPiA+ID4gKwlzdGF0ZS0+YWNxdWlyZV9jdHggPSBjdHg7Cj4gPiA+ICsKPiA+ ID4gKwljcnRjX3N0YXRlID0gaW50ZWxfYXRvbWljX2dldF9jcnRjX3N0YXRlKHN0YXRlLCBjcnRj KTsKPiA+ID4gKwlpZiAoSVNfRVJSKGNydGNfc3RhdGUpKSB7Cj4gPiA+ICsJCWRybV9hdG9taWNf c3RhdGVfZnJlZShzdGF0ZSk7Cj4gPiA+ICsJCXN0YXRlID0gTlVMTDsKPiA+ID4gKwl9Cj4gPiBB bGwgdGhpcyBmdW5jdGlvbiBkb2VzIGlzIGNhbGzCoGludGVsX2F0b21pY19nZXRfY3J0Y19zdGF0 ZSgpLiBTaW5jZSB0aGUKPiA+IGNhbGxlcgo+ID4gYWxzbyBoYXZlIHRvIGRlYWwgd2l0aCBlcnJv ciBoYW5kbGluZywgSSBkb24ndCBzZWUgd2hhdCBpdCBhZGRzIG9uIHRvcCBvZgo+ID4gdGhhdC4K PiA+IFRoZSBjb2RlIGlzIGFjdHVhbGx5IHNpbXBsZXIgaWYgbWVyZ2VkIHdpdGggdGhlIGZ1bmN0 aW9uIGJlbG93Lgo+IFRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gYmUgY2FsbGVkIGZyb20gdHdvIHBs YWNlcy4gT25lIGluIHRoZSBjb21taXQoKSBiZWxvdywKPiBhbmQgdGhlIG90aGVyIGluIHRoZSB1 cGZyb250X2xpbmtfdHJhaW4oKSBpdHNlbGYsIHdoZW4gdGhlIGNydGMgaXMgbm90Cj4gZW5hYmxl ZCBhbHJlYWR5Lgo+IAo+ID4gCj4gPiAKPiA+ID4gCj4gPiA+ICsKPiA+ID4gKwlyZXR1cm4gY3J0 Y19zdGF0ZTsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIGludCBpbnRlbF9kcF91cGZy b250X2NvbW1pdChzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKPiA+ID4gKwkJCQlzdHJ1Y3QgZHJt X21vZGVzZXRfYWNxdWlyZV9jdHggKmN0eCkKPiA+IFRoaXMgZnVuY3Rpb24gY291bGQgdXNlIGEg YmV0dGVyIG5hbWUuIFNvbWV0aGluZyB0aGF0IHN1Z2dlc3RzIHRoZSBjcnRjIGlzCj4gPiBiZWlu ZyBkaXNhYmxlZC4gTWF5YmUgZGlzYWJsZV9jcnRjX2Zvcl91cGZyb250KCkgPyBJdCBkb2Vucyd0 IHJlYWxseSBkZXBlbmRzCj4gPiBvbgo+IFN1cmUsIGJldHRlciBuYW1lIG1ha2VzIHNlbnNlLi4K PiAKPiA+IAo+ID4gYW55dGhpbmcgRFAgc3BlY2lmaWMsIHNvIG1heWJlIGl0IHdvdWxkIG1ha2Ug c2Vuc2UgdG8gbW92ZSBpdCB0bwo+ID4gaW50ZWxfZGlzcGxheS5jwqDCoG9yIGludGVsX2F0b21p Yy5jLiBUaGVuIHdlIGNvdWxkIGNhbGwgaXQKPiA+IGludGVsX2NydGNfYXRvbWljX2Rpc2FibGVf bG9ja2VkKCkuCj4gPiBUaGUgImxvY2tlZCIgcGFydCBzaW5jZSB0aGlzIGFzc3VtZXMgdGhlIGN0 eCBhbHJlYWR5IGhhdmUgY3J0Yy0+bXV0ZXggbG9ja2VkCj4gPiBzbwo+ID4gdGhhdCB0aGVyZSdz IG5vIHJpc2sgb2YgLUVERUFETEsuIEFsdGhvdWdoIGl0IGNhbiBqdXN0IHBhc3MgdGhlIC1FREVB RExLCj4gPiBlcnJvciB0bwo+ID4gdGhlIGNhbGxlciwgc28ganVzdCBpbnRlbF9jcnRjX2F0b21p Y19kaXNhYmxlKCkgPwo+IFN0aWxsIHRoaXMgd291bGQgbmVlZCB0byBjYWxsIHRoZSBhYm92ZSBn ZXRfY3J0Y19zdGF0ZSguLikgZnVuY3Rpb24uCj4gU28sIEkgd2lsbCByZS1uYW1lIGFuZCBpZiBp dCBhbGwgbG9va3MgT2ssIHdpbGwgbW92ZSBpdCB0byBhdG9taWMuYwo+IE90aGVyd2lzZSwgd2ls bCBrZWVwIGl0IGhlcmUuLgo+IAo+ID4gCj4gPiAKPiA+IAo+ID4gCj4gPiA+IAo+ID4gPiArewo+ ID4gPiArCWludCByZXQ7Cj4gPiA+ICsJc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3Rh dGU7Cj4gPiA+ICsJZW51bSBwaXBlIHBpcGUgPSBjcnRjLT5waXBlOwo+ID4gPiArCj4gPiA+ICsJ Y3J0Y19zdGF0ZSA9IGludGVsX2RwX3VwZnJvbnRfZ2V0X2NydGNfc3RhdGUoY3J0YywgY3R4KTsK PiA+ID4gKwlpZiAoSVNfRVJSKGNydGNfc3RhdGUpKQo+ID4gPiArCQlyZXR1cm4gUFRSX0VSUihj cnRjX3N0YXRlKTsKPiA+ID4gKwo+ID4gPiArCURSTV9ERUJVR19LTVMoIkRpc2FibGluZyBjcnRj ICVjIGZvciB1cGZyb250IGxpbmsgdHJhaW5cbiIsCj4gPiA+IHBpcGVfbmFtZShwaXBlKSk7Cj4g PiA+ICsKPiA+ID4gKwljcnRjX3N0YXRlLT5iYXNlLmFjdGl2ZSA9IGZhbHNlOwo+ID4gPiArCXJl dCA9IGRybV9hdG9taWNfY29tbWl0KGNydGNfc3RhdGUtPmJhc2Uuc3RhdGUpOwo+ID4gPiArCWlm IChyZXQpIHsKPiA+ID4gKwkJZHJtX2F0b21pY19zdGF0ZV9mcmVlKGNydGNfc3RhdGUtPmJhc2Uu c3RhdGUpOwo+ID4gPiArCQljcnRjX3N0YXRlLT5iYXNlLnN0YXRlID0gTlVMTDsKPiA+IFRoZSBm dW5jdGlvbiBkcm1fYXRvbWljX3N0YXRlX2ZyZWUoKSBmcmVlcyB0aGUgY3J0Y19zdGF0ZSwgc28g dGhpcyBpcyBhIHVzZQo+ID4gYWZ0ZXIgZnJlZS4KPiBXaWxsIGZpeCB0aGlzLi4KPiAKPiA+IAo+ ID4gCj4gPiA+IAo+ID4gPiArCX0KPiA+ID4gKwlyZXR1cm4gcmV0Owo+ID4gPiArfQo+ID4gPiAr Cj4gPiA+ICtzdGF0aWMgaW50IGludGVsX2RwX3VwZnJvbnRfbGlua190cmFpbihzdHJ1Y3QgZHJt X2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+ID4gPiArewo+ID4gPiArCXN0cnVjdCBpbnRlbF9kcCAq aW50ZWxfZHAgPSBpbnRlbF9hdHRhY2hlZF9kcChjb25uZWN0b3IpOwo+ID4gWW91IGNvdWxkIGp1 c3QgcGFzcyBpbnRlbF9kcCBkaXJlY3RseS4gVGhlIG9ubHkgdXNlIG9mIGNvbm5lY3RvciBpcyB3 aGVuCj4gPiBjb25uZWN0b3ItPnN0YXRlLT5jcnRjIGlzIGluc3BlY3RlZC4gQnV0IHRoYXQgc2hv dWxkIGhhdmUgdGhlIHNhbWUgdmFsdWUgYXMKPiA+IGludGVsX2RwLT5iYXNlLmJhc2UuY3J0Ywo+ IE9rLCB3aWxsIGNoYW5nZS4KPiAKPiA+IAo+ID4gCj4gPiA+IAo+ID4gPiArCXN0cnVjdCBpbnRl bF9kaWdpdGFsX3BvcnQgKmludGVsX2RpZ19wb3J0ID0KPiA+ID4gZHBfdG9fZGlnX3BvcnQoaW50 ZWxfZHApOwo+ID4gPiArCXN0cnVjdCBpbnRlbF9lbmNvZGVyICppbnRlbF9lbmNvZGVyID0gJmlu dGVsX2RpZ19wb3J0LT5iYXNlOwo+ID4gPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBpbnRl bF9lbmNvZGVyLT5iYXNlLmRldjsKPiA+ID4gKwlzdHJ1Y3QgZHJtX21vZGVfY29uZmlnICpjb25m aWcgPSAmZGV2LT5tb2RlX2NvbmZpZzsKPiA+ID4gKwlzdHJ1Y3QgZHJtX21vZGVzZXRfYWNxdWly ZV9jdHggY3R4Owo+ID4gPiArCXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLCAq dG1wX2NydGNfY29uZmlnOwo+ID4gPiArCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjOwo+ ID4gPiArCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IE5VTEw7Cj4gPiA+ICsJYm9vbCBjcnRjX2Vu YWJsZWQgPSBmYWxzZTsKPiA+ID4gKwlpbnQgcmV0LCBzdGF0dXMgPSAwOwo+ID4gPiArCj4gPiA+ ICsJaWYgKCFJU19CUk9YVE9OKGRldikpCj4gPiA+ICsJCXJldHVybiAwOwo+ID4gPiArCj4gPiA+ ICsJZHJtX21vZGVzZXRfYWNxdWlyZV9pbml0KCZjdHgsIDApOwo+ID4gPiArcmV0cnk6Cj4gPiA+ ICsJcmV0ID0gZHJtX21vZGVzZXRfbG9jaygmY29uZmlnLT5jb25uZWN0aW9uX211dGV4LCAmY3R4 KTsKPiA+ID4gKwlpZiAocmV0KQo+ID4gPiArCQlnb3RvIGV4aXRfZmFpbDsKPiA+ID4gKwo+ID4g PiArCWlmIChjb25uZWN0b3ItPnN0YXRlLT5jcnRjKSB7Cj4gPiA+ICsJCWNydGMgPSBjb25uZWN0 b3ItPnN0YXRlLT5jcnRjOwo+ID4gPiArCj4gPiA+ICsJCXJldCA9IGRybV9tb2Rlc2V0X2xvY2so JmNydGMtPm11dGV4LCAmY3R4KTsKPiA+ID4gKwkJaWYgKHJldCkKPiA+ID4gKwkJCWdvdG8gZXhp dF9mYWlsOwo+ID4gPiArCj4gPiA+ICsJCWNydGNfZW5hYmxlZCA9IHRydWU7Cj4gPiA+ICsJfSBl bHNlIHsKPiA+ID4gKwkJY3J0YyA9IGludGVsX2dldF91bnVzZWRfY3J0YygmaW50ZWxfZW5jb2Rl ci0+YmFzZSwgJmN0eCk7Cj4gPiA+ICsJCWlmIChJU19FUlJfT1JfTlVMTChjcnRjKSkgewo+ID4g PiArCQkJcmV0ID0gUFRSX0VSUl9PUl9aRVJPKGNydGMpOwo+ID4gPiArCQkJRFJNX0RFQlVHX0tN UygiTm8gY3J0YyBhdmFpbGFibGUgZm9yIHVwZnJvbnQgbGluawo+ID4gPiB0cmFpbjolZFxuIiwg cmV0KTsKPiA+ID4gKwkJCWdvdG8gZXhpdF9mYWlsOwo+ID4gPiArCQl9Cj4gPiA+ICsJCWludGVs X2VuY29kZXItPmJhc2UuY3J0YyA9IGNydGM7Cj4gPiA+ICsJfQo+ID4gSU1PLCB0aGUgZm9sbG93 aW5nIHdvdWxkIGJlIGEgYml0IG1vcmUgcmVhZGFibGUuCj4gPiAKPiA+IAlpZiAoaW50ZWxfZW5j b2Rlci0+YmFzZS5jcnRjKQo+ID4gCQljcnRjID0gaW50ZWxfZW5jb2Rlci0+YmFzZS5jcnRjOwo+ ID4gCWVsc2UKPiA+IAkJY3J0YyA9wqBpbnRlbF9nZXRfdW51c2VkX2NydGMoJmludGVsX2VuY29k ZXItPmJhc2UsICZjdHgpOwo+ID4gCj4gPiAJaWYgKElTX0VSUihjcnRjKSkgewo+ID4gCQkuLi4K PiA+IAl9Cj4gPiAKPiA+IAlyZXQgPSBkcm1fbW9kZXNldF9sb2NrKCZjcnRjLT5tdXRleCwgJmN0 eCk7Cj4gPiAJaWYgKHJldCkKPiA+IAkJZ290byBleGl0X2ZhaWw7Cj4gPiAKPiA+IAljcnRjX2Vu YWJsZWQgPSBjcnRjLT5jb25maWctPmFjdGl2ZTsKPiA+IAo+IE9rLCBtYWtlcyBzZW5zZS4gV2ls bCByZS1vcmRlciB0aGlzIHdheS4KPiAKPiA+IAo+ID4gPiAKPiA+ID4gKwo+ID4gPiArCWludGVs X2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwo+ID4gPiArCURSTV9ERUJVR19LTVMoIlVzaW5n IHBpcGUgJWMgZm9yIHVwZnJvbnQgbGluayB0cmFpbmluZ1xuIiwKPiA+ID4gKwkJCQkJcGlwZV9u YW1lKGludGVsX2NydGMtPnBpcGUpKTsKPiA+ID4gKwo+ID4gPiArCXJldCA9IGRybV9tb2Rlc2V0 X2xvY2soJmNydGMtPnByaW1hcnktPm11dGV4LCAmY3R4KTsKPiA+ID4gKwlpZiAocmV0KQo+ID4g PiArCQlnb3RvIGV4aXRfZmFpbDsKPiA+ID4gKwo+ID4gPiArCWlmIChjcnRjX2VuYWJsZWQpIHsK PiA+ID4gKwkJcmV0ID0gaW50ZWxfZHBfdXBmcm9udF9jb21taXQoaW50ZWxfY3J0YywgJmN0eCk7 Cj4gPiA+ICsJCWlmIChyZXQpCj4gPiA+ICsJCQlnb3RvIGV4aXRfZmFpbDsKPiA+ID4gKwl9Cj4g PiA+ICsKPiA+ID4gKwljcnRjX3N0YXRlID0gaW50ZWxfZHBfdXBmcm9udF9nZXRfY3J0Y19zdGF0 ZShpbnRlbF9jcnRjLCAmY3R4KTsKPiA+ID4gKwlpZiAoSVNfRVJSKGNydGNfc3RhdGUpKSB7Cj4g PiA+ICsJCXJldCA9IFBUUl9FUlIoY3J0Y19zdGF0ZSk7Cj4gPiA+ICsJCWdvdG8gZXhpdF9mYWls Owo+ID4gPiArCX0KPiA+ID4gKwo+ID4gPiArCS8qIFNhdmUgdGhlIGV4aXN0aW5nIGNvbmZpZyAq Lwo+ID4gPiArCXRtcF9jcnRjX2NvbmZpZyA9IGludGVsX2NydGMtPmNvbmZpZzsKPiA+IFlvdSBu ZWVkIHRvIHNhdmUgdGhpcyBlYXJsaWVyLiBPdGhlcndpc2UgaWYgaW50ZWxfZHBfdXBmcm9udF9j b21taXQoKSBpcwo+ID4gY2FsbGVkLCB0aGUgc3RhdGUgd2lsbCBiZSByZXN0b3JlZCB3aXRoIGFj dGl2ZSA9PSBmYWxzZSB3aGVuIGl0IHNob3VsZAo+ID4gYWN0dWFsbHkgYmUgdHJ1ZS4KPiBPaywg d2lsbCBzYXZlIHRoaXMgZWFybGllci4gQnV0IHNpbmNlIHdlIGRvbuKAmXQgcmUtZW5hYmxlIGNy dGPCoMKgaGVyZSBhZnRlcgo+IHVwZnJvbnQsCj4gKHdlIGxldCBpdCBnZXQgcmUtZW5hYmxlZCBh cyBwYXJ0IG9mIHN1YnNlcXVlbnQgbW9kZXNldCkgdGhlIHJlc3RvcmluZwo+IHdpdGggZmFsc2Ug ZG9lcyBub3QgaGFwcGVuIHRvZGF5Li4KPiAKPiA+IAo+ID4gQnV0IHRoYXQgd291bGQgY2F1c2Ug aW50ZWxfY3J0Yy0+Y29uZmlnIHRvIGJlIGZyZWVkLCBzbyB5b3UgbmVlZCB0bwo+ID4gdXNlwqBp bnRlbF9jcnRjX2R1cGxpY2F0ZV9zdGF0ZSgpLgo+IFNpbmNlIHdlIGFsbG9jIGEgbmV3IHN0YXRl IGFuZCB0aGVuIG9ubHkgY2FsbCBnZXRfY3J0Y19zdGF0ZSgpLCBJIHRob3VnaHQgdGhhdAo+IGF1 dG9tYXRpY2FsbHkgYm9pbHMgZG93biB0byBkdXBsaWNhdGVfc3RhdGUoKSBpbnNpZGUKPiBkcm1f YXRvbWljX2dldF9jcnRjX3N0YXRlKCkuCj4gUGxlYXNlIGNvcnJlY3QgaWYgbXkgdW5kZXJzdGFu ZGluZyBpcyB3cm9uZy4KCkl0IGRvZXMsIGJ1dCBpdCBpcyBhIHNvbWV3aGF0IG1lc3N5IHdheSBv ZiBkb2luZyBpdCBpbiB0aGlzIGNhc2UsIHNpbmNlIHlvdSBuZWVkCnRvIGFsbG9jYXRlIGFuIGV4 dHJhIGF0b21pY19zdGF0ZS4KCkluIGFueSBjYXNlLCBhZnRlciBsb29raW5nIGF0IHdoeSB3ZSBu ZWVkIHRvIGZpZGRsZSB3aXRoIHRoZSBjcnRjX3N0YXRlLCBteQpjb25jbHVzaW9uIHdhcyB0aGF0 IGl0IGlzIGVhc2llciB0byByZW1vdmUgdGhvc2UgZGVwZW5kZW5jaWVzIHRoYW4gdG8gZG8gdGhp cwpzYXZlL3Jlc3RvcmUgZGFuY2UuIEFsbCBpdCB3b3VsZCB0YWtlIGlzIHRvIHBhc3MgbGluayBy YXRlIGFuZCBsYW5lIGNvdW50CmRpcmVjdGx5IHRvIGludGVsX2RwX3NldF9saW5rX3BhcmFtcygp LiBUaGUgYnVsayBvZiBpbnRlbF9kZGlfcHJlX2VuYWJsZSgpIGNhbgpiZSBzcGxpdCB0byBhIGZ1 bmN0aW9uIHRoYXQgdGFrZXMgbGluayByYXRlLCBsYW5lIGNvdW50IGFuZCBkcGxsIGFzIGFyZ3Vt ZW50cywKYW5kIHRoZW4gaW50ZWxfYnh0X3VwZnJvbnRfbGlua190cmFpbigpIGNhbiBjYWxsIGl0 IGRpcmVjdGx5LgoKCgo+IAo+ID4gCj4gPiAKPiA+ID4gCj4gPiA+ICsJaW50ZWxfY3J0Yy0+Y29u ZmlnID0gY3J0Y19zdGF0ZTsKPiA+ID4gKwo+ID4gPiArCWlmIChJU19CUk9YVE9OKGRldikpCj4g PiA+ICsJCXN0YXR1cyA9IGludGVsX2J4dF91cGZyb250X2xpbmtfdHJhaW4oaW50ZWxfZHAsCj4g PiA+IGludGVsX2NydGMpOwo+ID4gPiArCQkvKiBPdGhlciBwbGF0Zm9ybXMgdXBmcm9udCBsaW5r IHRyYWluIGNhbGwgZ29lcyBoZXJlLi4qLwo+ID4gPiArCj4gPiA+ICsJLyogUmVzdG9yZSB0aGUg c2F2ZWQgY29uZmlnICovCj4gPiA+ICsJaW50ZWxfY3J0Yy0+Y29uZmlnID0gdG1wX2NydGNfY29u ZmlnOwo+ID4gPiArCWludGVsX2VuY29kZXItPmJhc2UuY3J0YyA9IGNydGNfZW5hYmxlZCA/IGNy dGMgOiBOVUxMOwo+ID4gPiArCWRybV9hdG9taWNfc3RhdGVfZnJlZShjcnRjX3N0YXRlLT5iYXNl LnN0YXRlKTsKPiA+IFRoaXMgZG9lc24ndCBhY3R1YWxseSByZS1lbmFibGVzIHRoZSBjcnRjIGlm IGlmIHdhcyBkaXNhYmxlZCBpbgo+ID4gaW50ZWxfZHBfdXBmcm9udF9jb21taXQoKS4gVGhpcyB3 aWxsIHJlcXVpcmUgYW5vdGhlciBhdG9taWMgb3BlcmF0aW9uLgo+ID4gTWF5YmUgdGhhdCBpbnRl bF9jcnRjX2F0b21pY19kaXNhYmxlKCkgc2hvdWxkIGp1c3QgdGFrZSBhIGJvb2wgc3BlY2lmeWlu ZyBpZgo+ID4gaXQKPiA+IHNob3VsZCBvbiBvZiBvZmYuCj4gV2UgbGV0IGl0IGdldCByZS1lbmFi bGVkIGFzIHBhcnQgb2YgbW9kZSBzZXQgdGhhdCBoYXBwZW5zIHN1YnNlcXVlbnRseS4KPiBQbGVh c2UgbGV0IG1lIGtub3cgeW91ciBvcGluaW9uIG9uIHRoaXMuCgpUaGVyZSdzIG5vIGd1YXJhbnRl ZSB0aGVyZSB3aWxsIGJlIGEgbW9kZSBzZXQgYWZ0ZXJ3YXJkcywgc2luY2UgdGhhdCdzIGEgdXNl cgpzcGFjZSBkZWNpc2lvbi4gT25lIHRoaW5nIHRvIGNoZWNrIGlzIGlmIHRoaXMgd29ya3MgYWNy b3NzIHN1c3BlbmQvcmVzdW1lLiBJSVVDLAppdCBpcyBwb3NzaWJsZSBhIGhvdHBsdWcgZXZlbnQg d29uJ3QgYmUgc2VudCB0byB1c2VyIHNwYWNlIGlmIHRoZSBjb25uZWN0b3IKc3RhdHVzIGRpZG4n dCBjaGFuZ2UuIEluIHRoYXQgY2FzZSwgSSB0aGluayB0aGlzIG1pZ2h0IGxlYWQgdG8gYmxhbmsg c2NyZWVuLgoKQW5kZXIKCj4gCj4gVGhhbmtzLAo+IER1cmdhCj4gCj4gPiAKPiA+IAo+ID4gCj4g PiA+IAo+ID4gPiArCj4gPiA+ICtleGl0X2ZhaWw6Cj4gPiA+ICsJaWYgKHJldCA9PSAtRURFQURM Sykgewo+ID4gPiArCQlkcm1fbW9kZXNldF9iYWNrb2ZmKCZjdHgpOwo+ID4gPiArCQlnb3RvIHJl dHJ5Owo+ID4gPiArCX0KPiA+ID4gKwlkcm1fbW9kZXNldF9kcm9wX2xvY2tzKCZjdHgpOwo+ID4g PiArCWRybV9tb2Rlc2V0X2FjcXVpcmVfZmluaSgmY3R4KTsKPiA+ID4gKwlyZXR1cm4gc3RhdHVz Owo+ID4gPiArfQo+ID4gPiArCj4gPiA+IMKgc3RhdGljIHZvaWQKPiA+ID4gwqBpbnRlbF9kcF9s b25nX3B1bHNlKHN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmludGVsX2Nvbm5lY3RvcikKPiA+ID4g wqB7Cj4gPiA+IEBAIC00NTU4LDcgKzQ3MjIsNyBAQCBpbnRlbF9kcF9sb25nX3B1bHNlKHN0cnVj dCBpbnRlbF9jb25uZWN0b3IKPiA+ID4gKmludGVsX2Nvbm5lY3RvcikKPiA+ID4gwqAJc3RydWN0 IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+ZGV2Owo+ID4gPiDCoAllbnVtIGRybV9jb25u ZWN0b3Jfc3RhdHVzIHN0YXR1czsKPiA+ID4gwqAJZW51bSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2Rv bWFpbiBwb3dlcl9kb21haW47Cj4gPiA+IC0JYm9vbCByZXQ7Cj4gPiA+ICsJYm9vbCByZXQsIGRv X3VwZnJvbnRfbGlua190cmFpbjsKPiA+ID4gwqAJdTggc2lua19pcnFfdmVjdG9yOwo+ID4gPiAK PiA+ID4gwqAJcG93ZXJfZG9tYWluID0KPiA+IGludGVsX2Rpc3BsYXlfcG9ydF9hdXhfcG93ZXJf ZG9tYWluKGludGVsX2VuY29kZXIpOwo+ID4gPiAKPiA+ID4gQEAgLTQ2MDQsNyArNDc2OCwxMSBA QCBpbnRlbF9kcF9sb25nX3B1bHNlKHN0cnVjdCBpbnRlbF9jb25uZWN0b3IKPiA+ID4gKmludGVs X2Nvbm5lY3RvcikKPiA+ID4gwqAJCWRybV9tb2Rlc2V0X2xvY2soJmRldi0KPiA+ID4gbW9kZV9j b25maWcuY29ubmVjdGlvbl9tdXRleCwgTlVMTCk7Cj4gPiA+IMKgCQlpbnRlbF9kcF9jaGVja19s aW5rX3N0YXR1cyhpbnRlbF9kcCk7Cj4gPiA+IMKgCQlkcm1fbW9kZXNldF91bmxvY2soJmRldi0K PiA+ID4gbW9kZV9jb25maWcuY29ubmVjdGlvbl9tdXRleCk7Cj4gPiA+IC0JCWdvdG8gb3V0Owo+ ID4gPiArCQkvKgo+ID4gPiArCQnCoCogSWYgd2UgYXJlIGhlcmUsIHdlIGhhdmUgKHJlKXJlYWQg RFBDRCBhYm92ZSBhbmQgaGVuY2UKPiA+ID4gKwkJwqAqIG5lZWQgdG8gZG8gdXBmcm9udCBsaW5r IHRyYWluIGFnYWluLgo+ID4gPiArCQnCoCovCj4gPiA+ICsJCWdvdG8gdXBmcm9udDsKPiA+IFdl IGNhbiBhdm9pZCB0aGlzIGJ5IG5vdCBvdmVyd3JpdGluZyBpbnRlbF9kcC0+ZHBjZCBhcyBJIG1l bnRpb25lZCBhYm92ZS4KPiA+IAo+ID4gCj4gPiBBbmRlcgo+ID4gCj4gPiA+IAo+ID4gPiDCoAl9 Cj4gPiA+IAo+ID4gPiDCoAkvKgo+ID4gPiBAQCAtNDYzNCw2ICs0ODAyLDE0IEBAIGludGVsX2Rw X2xvbmdfcHVsc2Uoc3RydWN0IGludGVsX2Nvbm5lY3Rvcgo+ID4gPiAqaW50ZWxfY29ubmVjdG9y KQo+ID4gPiDCoAkJCURSTV9ERUJVR19EUklWRVIoIkNQIG9yIHNpbmsgc3BlY2lmaWMgaXJxCj4g PiA+IHVuaGFuZGxlZFxuIik7Cj4gPiA+IMKgCX0KPiA+ID4gCj4gPiA+ICt1cGZyb250Ogo+ID4g PiArCS8qIERvIG5vdCBkbyB1cGZyb250IGxpbmsgdHJhaW4sIGlmIGl0IGlzIGEgY29tcGxpYW5j ZSByZXF1ZXN0ICovCj4gPiA+ICsJZG9fdXBmcm9udF9saW5rX3RyYWluID0KPiA+ID4gKwkJaW50 ZWxfZW5jb2Rlci0+dHlwZSA9PSBJTlRFTF9PVVRQVVRfRElTUExBWVBPUlQgJiYKPiA+ID4gKwkJ aW50ZWxfZHAtPmNvbXBsaWFuY2VfdGVzdF90eXBlICE9Cj4gPiBEUF9URVNUX0xJTktfVFJBSU5J Tkc7Cj4gPiA+IAo+ID4gPiArCj4gPiA+ICsJaWYgKGRvX3VwZnJvbnRfbGlua190cmFpbiAmJgo+ ID4gaW50ZWxfZHBfdXBmcm9udF9saW5rX3RyYWluKGNvbm5lY3RvcikpCj4gPiA+IAo+ID4gPiAr CQlzdGF0dXMgPSBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKPiA+ID4gwqBvdXQ6Cj4g PiA+IMKgCWlmIChzdGF0dXMgIT0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQpIHsKPiA+ID4g wqAJCWludGVsX2RwX3Vuc2V0X2VkaWQoaW50ZWxfZHApOwo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKPiA+ID4gYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9kcnYuaAo+ID4gPiBpbmRleCAyN2I1ZGNkLi5iZjk4NDczIDEwMDY0NAo+ID4gPiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAo+ID4gPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAo+ID4gPiBAQCAtMTA4Miw2ICsxMDgyLDggQEAgdm9p ZCBpbnRlbF9kZGlfY2xvY2tfZ2V0KHN0cnVjdCBpbnRlbF9lbmNvZGVyCj4gPiAqZW5jb2RlciwK PiA+ID4gCj4gPiA+IMKgCQkJwqBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcp Owo+ID4gPiDCoHZvaWQgaW50ZWxfZGRpX3NldF92Y19wYXlsb2FkX2FsbG9jKHN0cnVjdCBkcm1f Y3J0YyAqY3J0YywgYm9vbCBzdGF0ZSk7Cj4gPiA+IMKgdWludDMyX3QgZGRpX3NpZ25hbF9sZXZl bHMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCk7Cj4gPiA+ICtpbnQgaW50ZWxfYnh0X3VwZnJv bnRfbGlua190cmFpbihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLAo+ID4gPiArCQkJCXN0cnVj dCBpbnRlbF9jcnRjICpjcnRjKTsKPiA+ID4gCj4gPiA+IMKgLyogaW50ZWxfZnJvbnRidWZmZXIu YyAqLwo+ID4gPiDCoHZvaWQgaW50ZWxfZmJfb2JqX2ludmFsaWRhdGUoc3RydWN0IGRybV9pOTE1 X2dlbV9vYmplY3QgKm9iaiwKPiA+ID4gQEAgLTEyODQsNiArMTI4Niw5IEBAIGJvb2wgaW50ZWxf ZHBfaW5pdF9jb25uZWN0b3Ioc3RydWN0Cj4gPiBpbnRlbF9kaWdpdGFsX3BvcnQKPiA+ID4gCj4g PiA+ICppbnRlbF9kaWdfcG9ydCwKPiA+ID4gwqAJCQnCoMKgwqDCoMKgc3RydWN0IGludGVsX2Nv bm5lY3RvciAqaW50ZWxfY29ubmVjdG9yKTsKPiA+ID4gwqB2b2lkIGludGVsX2RwX3NldF9saW5r X3BhcmFtcyhzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLAo+ID4gPiDCoAkJCcKgwqDCoMKgwqDC oGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlCj4gPiA+ICpwaXBlX2NvbmZpZyk7Cj4gPiA+ ICt2b2lkIGludGVsX2RwX3VwZGF0ZV9kcGNkX3BhcmFtcyhzdHJ1Y3QgaW50ZWxfZHAgKmludGVs X2RwKTsKPiA+ID4gK2Jvb2wgaW50ZWxfZHBfZ2V0X2xpbmtfcmV0cnlfcGFyYW1zKHN0cnVjdCBp bnRlbF9kcCAqaW50ZWxfZHAsCj4gPiA+ICsJCQkJdWludDhfdCAqbGFuZV9jb3VudCwgdWludDhf dCAqbGlua19idyk7Cj4gPiA+IMKgdm9pZCBpbnRlbF9kcF9zdGFydF9saW5rX3RyYWluKHN0cnVj dCBpbnRlbF9kcCAqaW50ZWxfZHApOwo+ID4gPiDCoHZvaWQgaW50ZWxfZHBfc3RvcF9saW5rX3Ry YWluKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApOwo+ID4gPiDCoHZvaWQgaW50ZWxfZHBfc2lu a19kcG1zKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsIGludCBtb2RlKTsKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlz dApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0 b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==