From mboxrd@z Thu Jan 1 00:00:00 1970 From: Manasi Navare Subject: Re: [PATCH 5/5] drm/i915: Implement Link Rate fallback on Link training failure Date: Thu, 17 Nov 2016 11:55:43 -0800 Message-ID: <20161117195543.GC18199@intel.com> References: <1479179603-28476-1-git-send-email-manasi.d.navare@intel.com> <1479179603-28476-6-git-send-email-manasi.d.navare@intel.com> <87h976z2yp.fsf@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <87h976z2yp.fsf@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Jani Nikula Cc: Daniel Vetter , intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T24gVGh1LCBOb3YgMTcsIDIwMTYgYXQgMDI6NDk6MDJQTSArMDIwMCwgSmFuaSBOaWt1bGEgd3Jv dGU6Cj4gT24gVHVlLCAxNSBOb3YgMjAxNiwgTWFuYXNpIE5hdmFyZSA8bWFuYXNpLmQubmF2YXJl QGludGVsLmNvbT4gd3JvdGU6Cj4gPiBJZiBsaW5rIHRyYWluaW5nIGF0IGEgbGluayByYXRlIG9w dGltYWwgZm9yIGEgcGFydGljdWxhcgo+ID4gbW9kZSBmYWlscyBkdXJpbmcgbW9kZXNldCdzIGF0 b21pYyBjb21taXQgcGhhc2UsIHRoZW4gd2UKPiA+IGxldCB0aGUgbW9kZXNldCBjb21wbGV0ZSBh bmQgdGhlbiByZXRyeS4gV2Ugc2F2ZSB0aGUgbGluayByYXRlCj4gPiB2YWx1ZSBhdCB3aGljaCBs aW5rIHRyYWluaW5nIGZhaWxlZCwgdXBkYXRlIHRoZSBsaW5rIHN0YXR1cyBwcm9wZXJ0eQo+ID4g dG8gIkJBRCIgYW5kIHVzZSBhIGxvd2VyIGxpbmsgcmF0ZSB0byBwcnVuZSB0aGUgbW9kZXMuIEl0 IHdpbGwgcmVkbwo+ID4gdGhlIG1vZGVzZXQgb24gdGhlIGN1cnJlbnQgbW9kZSBhdCBsb3dlciBs aW5rIHJhdGUgb3IgaWYgdGhlIGN1cnJlbnQKPiA+IG1vZGUgZ2V0cyBwcnVuZWQgZHVlIHRvIGxv d2VyIGxpbmsgY29uc3RyYWludHMgdGhlbiwgaXQgd2lsbCBzZW5kIGEKPiA+IGhvdHBsdWcgdWV2 ZW50IGZvciB1c2Vyc3BhY2UgdG8gaGFuZGxlIGl0Lgo+ID4KPiA+IFRoaXMgaXMgYWxzbyByZXF1 aXJlZCB0byBwYXNzIERQIENUUyB0ZXN0cyA0LjMuMS4zLCA0LjMuMS40LAo+ID4gNC4zLjEuNi4K PiA+Cj4gPiB2NToKPiA+ICogTW92ZSBzZXQgbGluayBzdGF0dXMgdG8gZHJtIGNvcmUgKERhbmll bCBWZXR0ZXIsIEphbmkgTmlrdWxhKQo+ID4gdjQ6Cj4gPiAqIEFkZCBmYWxsYmFjayBzdXBwb3J0 IGZvciBub24gRERJIHBsYXRmb3JtcyB0b28KPiA+ICogU2V0IGNvbm5lY3Rvci0+bGluayBzdGF0 dXMgaW5zaWRlIHNldF9saW5rX3N0YXR1cyBmdW5jdGlvbgo+ID4gKEphbmkgTmlrdWxhKQo+ID4g djM6Cj4gPiAqIFNldCBsaW5rIHN0YXR1cyBwcm9wZXJ0eSB0byBCQWQgdW5jb25kaXRpb25hbGx5 IChKYW5pIE5pa3VsYSkKPiA+ICogRG9udCB1c2UgdHdvIHNlcGFyYXRlIHZhcmlhYmxlcyBsaW5r X3RyYWluX2ZhaWxlZCBhbmQgbGlua19zdGF0dXMKPiA+IHRvIGluZGljYXRlIHNhbWUgdGhpbmcg KEphbmkgTmlrdWxhKQo+ID4gdjI6Cj4gPiAqIFNxdWFzaGVkIGEgZmV3IHBhdGNoZXMgKEphbmkg TmlrdWxhKQo+ID4KPiA+IEFja2VkLWJ5OiBUb255IENoZW5nIDx0b255LmNoZW5nQGFtZC5jb20+ Cj4gPiBBY2tlZC1ieTogSGFycnkgV2VudGxhbmQgPEhhcnJ5LndlbnRsYW5kQGFtZC5jb20+Cj4g PiBDYzogSmFuaSBOaWt1bGEgPGphbmkubmlrdWxhQGxpbnV4LmludGVsLmNvbT4KPiA+IENjOiBE YW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGludGVsLmNvbT4KPiA+IENjOiBWaWxsZSBTeXJq YWxhIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KPiA+IFNpZ25lZC1vZmYtYnk6IE1h bmFzaSBOYXZhcmUgPG1hbmFzaS5kLm5hdmFyZUBpbnRlbC5jb20+Cj4gPiAtLS0KPiA+ICBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kZGkuYyAgICAgICAgICAgICAgfCAgMjEgKysrKystCj4g PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYyAgICAgICAgICAgICAgIHwgMTAyICsr KysrKysrKysrKysrKysrKysrKysrKystCj4gPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf ZHBfbGlua190cmFpbmluZy5jIHwgIDEyICsrLQo+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2Rydi5oICAgICAgICAgICAgICB8ICAgNiArLQo+ID4gIDQgZmlsZXMgY2hhbmdlZCwgMTMx IGluc2VydGlvbnMoKyksIDEwIGRlbGV0aW9ucygtKQo+ID4KPiA+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kZGkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2RkaS5jCj4gPiBpbmRleCAwYWQ0ZTE2Li41N2I3ZWU5IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfZGRpLmMKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2RkaS5jCj4gPiBAQCAtMTY4NCw2ICsxNjg0LDggQEAgc3RhdGljIHZvaWQgaW50ZWxf ZGRpX3ByZV9lbmFibGVfZHAoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCj4gPiAgCXN0 cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPSBlbmNfdG9faW50ZWxfZHAoJmVuY29kZXItPmJhc2Up Owo+ID4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGVuY29k ZXItPmJhc2UuZGV2KTsKPiA+ICAJZW51bSBwb3J0IHBvcnQgPSBpbnRlbF9kZGlfZ2V0X2VuY29k ZXJfcG9ydChlbmNvZGVyKTsKPiA+ICsJc3RydWN0IGludGVsX2Nvbm5lY3RvciAqaW50ZWxfY29u bmVjdG9yID0gaW50ZWxfZHAtPmF0dGFjaGVkX2Nvbm5lY3RvcjsKPiA+ICsJc3RydWN0IGRybV9j b25uZWN0b3IgKmNvbm5lY3RvciA9ICZpbnRlbF9jb25uZWN0b3ItPmJhc2U7Cj4gPiAgCj4gPiAg CWludGVsX2RwX3NldF9saW5rX3BhcmFtcyhpbnRlbF9kcCwgbGlua19yYXRlLCBsYW5lX2NvdW50 LAo+ID4gIAkJCQkgbGlua19tc3QpOwo+ID4gQEAgLTE2OTQsNyArMTY5NiwyNCBAQCBzdGF0aWMg dm9pZCBpbnRlbF9kZGlfcHJlX2VuYWJsZV9kcChzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2Rl ciwKPiA+ICAJaW50ZWxfcHJlcGFyZV9kcF9kZGlfYnVmZmVycyhlbmNvZGVyKTsKPiA+ICAJaW50 ZWxfZGRpX2luaXRfZHBfYnVmX3JlZyhlbmNvZGVyKTsKPiA+ICAJaW50ZWxfZHBfc2lua19kcG1z KGludGVsX2RwLCBEUk1fTU9ERV9EUE1TX09OKTsKPiA+IC0JaW50ZWxfZHBfc3RhcnRfbGlua190 cmFpbihpbnRlbF9kcCk7Cj4gPiArCWlmICghaW50ZWxfZHBfc3RhcnRfbGlua190cmFpbihpbnRl bF9kcCkpIHsKPiA+ICsJCURSTV9ERUJVR19LTVMoIkxpbmsgVHJhaW5pbmcgZmFpbGVkIGF0IGxp bmsgcmF0ZSA9ICVkLCBsYW5lIGNvdW50ID0gJWQiLAo+ID4gKwkJCSAgICAgIGxpbmtfcmF0ZSwg bGFuZV9jb3VudCk7Cj4gPiArCQlpZiAoIWludGVsX2RwX2dldF9saW5rX3RyYWluX2ZhbGxiYWNr X3ZhbHVlcyhpbnRlbF9kcCwKPiA+ICsJCQkJCQkJICAgICBsaW5rX3JhdGUsCj4gPiArCQkJCQkJ CSAgICAgbGFuZV9jb3VudCkpCj4gPiArCQkJLyogU2NoZWR1bGUgYSBIb3RwbHVnIFVldmVudCB0 byB1c2Vyc3BhY2UgdG8gc3RhcnQgbW9kZXNldCAqLwo+ID4gKwkJCXNjaGVkdWxlX3dvcmsoJmlu dGVsX2Nvbm5lY3Rvci0+bW9kZXNldF9yZXRyeV93b3JrKTsKPiA+ICsJfSBlbHNlIHsKPiA+ICsJ CURSTV9ERUJVR19LTVMoIkxpbmsgVHJhaW5pbmcgUGFzc2VkIGF0IExpbmsgUmF0ZSA9ICVkLCBM YW5lIGNvdW50ID0gJWQiLAo+ID4gKwkJCSAgICAgIGxpbmtfcmF0ZSwgbGFuZV9jb3VudCk7Cj4g PiArCQlpbnRlbF9kcC0+ZmFsbGJhY2tfbGlua19yYXRlX2luZGV4ID0gLTE7Cj4gPiArCQlpbnRl bF9kcC0+ZmFsbGJhY2tfbGlua19yYXRlID0gMDsKPiA+ICsJCWludGVsX2RwLT5mYWxsYmFja19s YW5lX2NvdW50ID0gMDsKPiA+ICsJCWRybV9tb2RlX2Nvbm5lY3Rvcl9zZXRfbGlua19zdGF0dXNf cHJvcGVydHkoY29ubmVjdG9yLAo+ID4gKwkJCQkJCQkgICAgRFJNX01PREVfTElOS19TVEFUVVNf R09PRCk7Cj4gPiArCX0KPiAKPiBDb2RlIGJsb2NrIHdpdGggaW50ZWxfZHBfc3RhcnRfbGlua190 cmFpbigpIGZhaWx1cmUgaGFuZGxpbmcuIE9rYXkuCj4gCj4gPiArCj4gPiAgCWlmIChwb3J0ICE9 IFBPUlRfQSB8fCBJTlRFTF9HRU4oZGV2X3ByaXYpID49IDkpCj4gPiAgCQlpbnRlbF9kcF9zdG9w X2xpbmtfdHJhaW4oaW50ZWxfZHApOwo+ID4gIH0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9kcC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYwo+ ID4gaW5kZXggZTg3YjQ1MS4uYWYyZjhiMiAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2RwLmMKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rw LmMKPiA+IEBAIC0zNTMsOCArMzUzLDE0IEBAIGludCBpbnRlbF9kcF9nZXRfbGlua190cmFpbl9m YWxsYmFja192YWx1ZXMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwKPiA+ICAJCXRhcmdldF9j bG9jayA9IGZpeGVkX21vZGUtPmNsb2NrOwo+ID4gIAl9Cj4gPiAgCj4gPiAtCW1heF9saW5rX2Ns b2NrID0gaW50ZWxfZHBfbWF4X2xpbmtfcmF0ZShpbnRlbF9kcCk7Cj4gPiAtCW1heF9sYW5lcyA9 IGludGVsX2RwX21heF9sYW5lX2NvdW50KGludGVsX2RwKTsKPiA+ICsJLyogUHJ1bmUgdGhlIG1v ZGVzIHVzaW5nIHRoZSBmYWxsYmFjayBsaW5rIHJhdGUvbGFuZSBjb3VudCAqLwo+ID4gKwlpZiAo Y29ubmVjdG9yLT5saW5rX3N0YXR1cyA9PSBEUk1fTU9ERV9MSU5LX1NUQVRVU19CQUQpIHsKPiA+ ICsJCW1heF9saW5rX2Nsb2NrID0gaW50ZWxfZHAtPmZhbGxiYWNrX2xpbmtfcmF0ZTsKPiA+ICsJ CW1heF9sYW5lcyA9IGludGVsX2RwLT5mYWxsYmFja19sYW5lX2NvdW50Owo+ID4gKwl9IGVsc2Ug ewo+ID4gKwkJbWF4X2xpbmtfY2xvY2sgPSBpbnRlbF9kcF9tYXhfbGlua19yYXRlKGludGVsX2Rw KTsKPiA+ICsJCW1heF9sYW5lcyA9IGludGVsX2RwX21heF9sYW5lX2NvdW50KGludGVsX2RwKTsK PiA+ICsJfQo+ID4gIAo+ID4gIAltYXhfcmF0ZSA9IGludGVsX2RwX21heF9kYXRhX3JhdGUobWF4 X2xpbmtfY2xvY2ssIG1heF9sYW5lcyk7Cj4gPiAgCW1vZGVfcmF0ZSA9IGludGVsX2RwX2xpbmtf cmVxdWlyZWQodGFyZ2V0X2Nsb2NrLCAxOCk7Cj4gPiBAQCAtMTU5MSw2ICsxNTk3LDcgQEAgc3Rh dGljIGludCBpbnRlbF9kcF9jb21wdXRlX2JwcChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLAo+ ID4gIAllbnVtIHBvcnQgcG9ydCA9IGRwX3RvX2RpZ19wb3J0KGludGVsX2RwKS0+cG9ydDsKPiA+ ICAJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKHBpcGVfY29u ZmlnLT5iYXNlLmNydGMpOwo+ID4gIAlzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICppbnRlbF9jb25u ZWN0b3IgPSBpbnRlbF9kcC0+YXR0YWNoZWRfY29ubmVjdG9yOwo+ID4gKwlzdHJ1Y3QgZHJtX2Nv bm5lY3RvciAqY29ubmVjdG9yID0gJmludGVsX2Nvbm5lY3Rvci0+YmFzZTsKPiA+ICAJaW50IGxh bmVfY291bnQsIGNsb2NrOwo+ID4gIAlpbnQgbWluX2xhbmVfY291bnQgPSAxOwo+ID4gIAlpbnQg bWF4X2xhbmVfY291bnQgPSBpbnRlbF9kcF9tYXhfbGFuZV9jb3VudChpbnRlbF9kcCk7Cj4gPiBA QCAtMTYzOCw2ICsxNjQ1LDEyIEBAIHN0YXRpYyBpbnQgaW50ZWxfZHBfY29tcHV0ZV9icHAoc3Ry dWN0IGludGVsX2RwICppbnRlbF9kcCwKPiA+ICAJaWYgKGFkanVzdGVkX21vZGUtPmZsYWdzICYg RFJNX01PREVfRkxBR19EQkxDTEspCj4gPiAgCQlyZXR1cm4gZmFsc2U7Cj4gPiAgCj4gPiArCS8q IEZhbGwgYmFjayB0byBsb3dlciBsaW5rIHJhdGUgaW4gY2FzZSBvZiBmYWlsdXJlIGluIHByZXZp b3VzIG1vZGVzZXQgKi8KPiA+ICsJaWYgKGNvbm5lY3Rvci0+bGlua19zdGF0dXMgPT0gRFJNX01P REVfTElOS19TVEFUVVNfQkFEKSB7Cj4gPiArCQltaW5fbGFuZV9jb3VudCA9IG1heF9sYW5lX2Nv dW50ID0gaW50ZWxfZHAtPmZhbGxiYWNrX2xhbmVfY291bnQ7Cj4gPiArCQltaW5fY2xvY2sgPSBt YXhfY2xvY2sgPSBpbnRlbF9kcC0+ZmFsbGJhY2tfbGlua19yYXRlX2luZGV4Owo+ID4gKwl9Cj4g PiArCj4gPiAgCURSTV9ERUJVR19LTVMoIkRQIGxpbmsgY29tcHV0YXRpb24gd2l0aCBtYXggbGFu ZSBjb3VudCAlaSAiCj4gPiAgCQkgICAgICAibWF4IGJ3ICVkIHBpeGVsIGNsb2NrICVpS0h6XG4i LAo+ID4gIAkJICAgICAgbWF4X2xhbmVfY291bnQsIGNvbW1vbl9yYXRlc1ttYXhfY2xvY2tdLAo+ ID4gQEAgLTI3ODEsNiArMjc5NCw4IEBAIHN0YXRpYyB2b2lkIGludGVsX2VuYWJsZV9kcChzdHJ1 Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKPiA+ICAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9 IGVuY29kZXItPmJhc2UuZGV2Owo+ID4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSB0b19pOTE1KGRldik7Cj4gPiAgCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjID0gdG9faW50 ZWxfY3J0YyhlbmNvZGVyLT5iYXNlLmNydGMpOwo+ID4gKwlzdHJ1Y3QgaW50ZWxfY29ubmVjdG9y ICppbnRlbF9jb25uZWN0b3IgPSBpbnRlbF9kcC0+YXR0YWNoZWRfY29ubmVjdG9yOwo+ID4gKwlz dHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yID0gJmludGVsX2Nvbm5lY3Rvci0+YmFzZTsK PiA+ICAJdWludDMyX3QgZHBfcmVnID0gSTkxNV9SRUFEKGludGVsX2RwLT5vdXRwdXRfcmVnKTsK PiA+ICAJZW51bSBwaXBlIHBpcGUgPSBjcnRjLT5waXBlOwo+ID4gIAo+ID4gQEAgLTI4MTEsNyAr MjgyNiwyMyBAQCBzdGF0aWMgdm9pZCBpbnRlbF9lbmFibGVfZHAoc3RydWN0IGludGVsX2VuY29k ZXIgKmVuY29kZXIsCj4gPiAgCX0KPiA+ICAKPiA+ICAJaW50ZWxfZHBfc2lua19kcG1zKGludGVs X2RwLCBEUk1fTU9ERV9EUE1TX09OKTsKPiA+IC0JaW50ZWxfZHBfc3RhcnRfbGlua190cmFpbihp bnRlbF9kcCk7Cj4gPiArCWlmICghaW50ZWxfZHBfc3RhcnRfbGlua190cmFpbihpbnRlbF9kcCkp IHsKPiA+ICsJCURSTV9ERUJVR19LTVMoIkxpbmsgVHJhaW5pbmcgZmFpbGVkIGF0IGxpbmsgcmF0 ZSA9ICVkLCBsYW5lIGNvdW50ID0gJWQiLAo+ID4gKwkJCSAgICAgIGludGVsX2RwLT5saW5rX3Jh dGUsIGludGVsX2RwLT5sYW5lX2NvdW50KTsKPiA+ICsJCWlmICghaW50ZWxfZHBfZ2V0X2xpbmtf dHJhaW5fZmFsbGJhY2tfdmFsdWVzKGludGVsX2RwLAo+ID4gKwkJCQkJCQkgICAgIGludGVsX2Rw LT5saW5rX3JhdGUsCj4gPiArCQkJCQkJCSAgICAgaW50ZWxfZHAtPmxhbmVfY291bnQpKQo+ID4g KwkJCS8qIFNjaGVkdWxlIGEgSG90cGx1ZyBVZXZlbnQgdG8gdXNlcnNwYWNlIHRvIHN0YXJ0IG1v ZGVzZXQgKi8KPiA+ICsJCQlzY2hlZHVsZV93b3JrKCZpbnRlbF9jb25uZWN0b3ItPm1vZGVzZXRf cmV0cnlfd29yayk7Cj4gPiArCX0gZWxzZSB7Cj4gPiArCQlEUk1fREVCVUdfS01TKCJMaW5rIFRy YWluaW5nIFBhc3NlZCBhdCBMaW5rIFJhdGUgPSAlZCwgTGFuZSBjb3VudCA9ICVkIiwKPiA+ICsJ CQkgICAgICBpbnRlbF9kcC0+bGlua19yYXRlLCBpbnRlbF9kcC0+bGFuZV9jb3VudCk7Cj4gPiAr CQlpbnRlbF9kcC0+ZmFsbGJhY2tfbGlua19yYXRlX2luZGV4ID0gLTE7Cj4gPiArCQlpbnRlbF9k cC0+ZmFsbGJhY2tfbGlua19yYXRlID0gMDsKPiA+ICsJCWludGVsX2RwLT5mYWxsYmFja19sYW5l X2NvdW50ID0gMDsKPiA+ICsJCWRybV9tb2RlX2Nvbm5lY3Rvcl9zZXRfbGlua19zdGF0dXNfcHJv cGVydHkoY29ubmVjdG9yLAo+ID4gKwkJCQkJCQkgICAgRFJNX01PREVfTElOS19TVEFUVVNfR09P RCk7Cj4gPiArCX0KPiAKPiBTZWNvbmQgaWRlbnRpY2FsIGNvcHkgb2YgaW50ZWxfZHBfc3RhcnRf bGlua190cmFpbigpIGZhaWx1cmUgaGFuZGxpbmcuCj4gCj4gPiAgCWludGVsX2RwX3N0b3BfbGlu a190cmFpbihpbnRlbF9kcCk7Cj4gPiAgCj4gPiAgCWlmIChwaXBlX2NvbmZpZy0+aGFzX2F1ZGlv KSB7Cj4gPiBAQCAtNDAxOCw2ICs0MDQ5LDggQEAgc3RhdGljIHZvaWQgaW50ZWxfZHBfaGFuZGxl X3Rlc3RfcmVxdWVzdChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ID4gIAlzdHJ1Y3QgaW50 ZWxfZW5jb2RlciAqZW5jb2RlciA9ICZkcF90b19kaWdfcG9ydChpbnRlbF9kcCktPmJhc2U7Cj4g PiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZW5jb2Rlci0+ YmFzZS5kZXYpOwo+ID4gIAlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVsX2NydGMo ZW5jb2Rlci0+YmFzZS5jcnRjKTsKPiA+ICsJc3RydWN0IGludGVsX2Nvbm5lY3RvciAqaW50ZWxf Y29ubmVjdG9yID0gaW50ZWxfZHAtPmF0dGFjaGVkX2Nvbm5lY3RvcjsKPiA+ICsJc3RydWN0IGRy bV9jb25uZWN0b3IgKmNvbm5lY3RvciA9ICZpbnRlbF9jb25uZWN0b3ItPmJhc2U7Cj4gPiAgCj4g PiAgCS8qIFN1cHByZXNzIHVuZGVycnVucyBjYXVzZWQgYnkgcmUtdHJhaW5pbmcgKi8KPiA+ICAJ aW50ZWxfc2V0X2NwdV9maWZvX3VuZGVycnVuX3JlcG9ydGluZyhkZXZfcHJpdiwgY3J0Yy0+cGlw ZSwgZmFsc2UpOwo+ID4gQEAgLTQwMjUsNyArNDA1OCwyMyBAQCBzdGF0aWMgdm9pZCBpbnRlbF9k cF9oYW5kbGVfdGVzdF9yZXF1ZXN0KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gPiAgCQlp bnRlbF9zZXRfcGNoX2ZpZm9fdW5kZXJydW5fcmVwb3J0aW5nKGRldl9wcml2LAo+ID4gIAkJCQkJ CSAgICAgIGludGVsX2NydGNfcGNoX3RyYW5zY29kZXIoY3J0YyksIGZhbHNlKTsKPiA+ICAKPiA+ IC0JaW50ZWxfZHBfc3RhcnRfbGlua190cmFpbihpbnRlbF9kcCk7Cj4gPiArCWlmICghaW50ZWxf ZHBfc3RhcnRfbGlua190cmFpbihpbnRlbF9kcCkpIHsKPiA+ICsJCURSTV9ERUJVR19LTVMoIkxp bmsgVHJhaW5pbmcgZmFpbGVkIGF0IGxpbmsgcmF0ZSA9ICVkLCBsYW5lIGNvdW50ID0gJWQiLAo+ ID4gKwkJCSAgICAgIGludGVsX2RwLT5saW5rX3JhdGUsIGludGVsX2RwLT5sYW5lX2NvdW50KTsK PiA+ICsJCWlmICghaW50ZWxfZHBfZ2V0X2xpbmtfdHJhaW5fZmFsbGJhY2tfdmFsdWVzKGludGVs X2RwLAo+ID4gKwkJCQkJCQkgICAgIGludGVsX2RwLT5saW5rX3JhdGUsCj4gPiArCQkJCQkJCSAg ICAgaW50ZWxfZHAtPmxhbmVfY291bnQpKQo+ID4gKwkJCS8qIFNjaGVkdWxlIGEgSG90cGx1ZyBV ZXZlbnQgdG8gdXNlcnNwYWNlIHRvIHN0YXJ0IG1vZGVzZXQgKi8KPiA+ICsJCQlzY2hlZHVsZV93 b3JrKCZpbnRlbF9jb25uZWN0b3ItPm1vZGVzZXRfcmV0cnlfd29yayk7Cj4gPiArCX0gZWxzZSB7 Cj4gPiArCQlEUk1fREVCVUdfS01TKCJMaW5rIFRyYWluaW5nIFBhc3NlZCBhdCBMaW5rIFJhdGUg PSAlZCwgTGFuZSBjb3VudCA9ICVkIiwKPiA+ICsJCQkgICAgICBpbnRlbF9kcC0+bGlua19yYXRl LCBpbnRlbF9kcC0+bGFuZV9jb3VudCk7Cj4gPiArCQlpbnRlbF9kcC0+ZmFsbGJhY2tfbGlua19y YXRlX2luZGV4ID0gLTE7Cj4gPiArCQlpbnRlbF9kcC0+ZmFsbGJhY2tfbGlua19yYXRlID0gMDsK PiA+ICsJCWludGVsX2RwLT5mYWxsYmFja19sYW5lX2NvdW50ID0gMDsKPiA+ICsJCWRybV9tb2Rl X2Nvbm5lY3Rvcl9zZXRfbGlua19zdGF0dXNfcHJvcGVydHkoY29ubmVjdG9yLAo+ID4gKwkJCQkJ CQkgICAgRFJNX01PREVfTElOS19TVEFUVVNfR09PRCk7Cj4gPiArCX0KPiAKPiBUaGlyZCBpZGVu dGljYWwgY29weSBvZiBpbnRlbF9kcF9zdGFydF9saW5rX3RyYWluKCkgZmFpbHVyZQo+IGhhbmRs aW5nLiBQbGVhc2UgYWJzdHJhY3QuCj4gCj4gV2h5IGRvbid0IGFsbCBpbnRlbF9kcF9zdGFydF9s aW5rX3RyYWluKCkgY2FsbHMgbmVlZCB0aGlzPyBDb3VsZCB0aGUKPiBhYm92ZSBjb2RlIGJlICp3 aXRoaW4qIGludGVsX2RwX3N0YXJ0X2xpbmtfdHJhaW4oKT8KPgoKQWN0dWFsbHkgdGhlIHNhbWUg Y29kZWJsb2NrIGdvdCByZXBlYXRlZCBzaW5jZSBJIGV4cGFuZGVkIHRoaXMKZmFpbHVyZSBoYW5k bGluZyB0byBhbGwgRERJIGFuZCBub24gRERJIHBsYXRmb3JtcyBhbmQgdG8gYWxsIGNhc2VzCndo ZXJlIGxpbmsgdHJhaW5pbmcgaGFwcGVucy4KSSB0aGluayBpbnN0ZWFkIG9mIGFkZGluZyB0byBp bnRlbF9kcF9zdGFydF9saW5rX3RyYWluLCBJIGNhbiBjcmVhdGUKYW5vdGhlciBzZXBhcmF0ZSBm dW5jdGlvbiBmb3IgbGlua190cmFpbl9mYWlsdXJlIGhhbmRsaW5nIHdoaWNoIGNhbiBiZQpjYWxs ZWQgYXQgYWxsIHRoZXNlIHBsYWNlcy4gSGF2aW5nIGl0IGluIGEgc2VwYXJhdGUgZnVuY3Rpb24g d291bGQKbWFrZSBpdCBtb3JlIGludHVpdGl2ZSB0aGF0IGlmIHN0YXJ0X2xpbmpfdHJhaW4gZmFp bGVkIHRoZW4gd2UgYXJlCmNhbGxpbmcgdGhpcyBmYWlsdXJlIGhhbmRsaW5nIGNvZGUgYmxvY2su CkxldCBtZSBrbm93IHdoYXQgeW91IHRoaW5rLgoKUmVnYXJkcwpNYW5hc2kKCiAKPiA+ICAJaW50 ZWxfZHBfc3RvcF9saW5rX3RyYWluKGludGVsX2RwKTsKPiA+ICAKPiA+ICAJLyogS2VlcCB1bmRl cnJ1biByZXBvcnRpbmcgZGlzYWJsZWQgdW50aWwgdGhpbmdzIGFyZSBzdGFibGUgKi8KPiA+IEBA IC00NDE5LDYgKzQ0NjgsMTEgQEAgc3RhdGljIGJvb2wgaW50ZWxfZGlnaXRhbF9wb3J0X2Nvbm5l Y3RlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gPiAgCQlpbnRlbF9kcC0+ Y29tcGxpYW5jZV90ZXN0X2FjdGl2ZSA9IDA7Cj4gPiAgCQlpbnRlbF9kcC0+Y29tcGxpYW5jZV90 ZXN0X3R5cGUgPSAwOwo+ID4gIAkJaW50ZWxfZHAtPmNvbXBsaWFuY2VfdGVzdF9kYXRhID0gMDsK PiA+ICsJCWludGVsX2RwLT5mYWxsYmFja19saW5rX3JhdGVfaW5kZXggPSAtMTsKPiA+ICsJCWlu dGVsX2RwLT5mYWxsYmFja19saW5rX3JhdGUgPSAwOwo+ID4gKwkJaW50ZWxfZHAtPmZhbGxiYWNr X2xhbmVfY291bnQgPSAwOwo+ID4gKwkJZHJtX21vZGVfY29ubmVjdG9yX3NldF9saW5rX3N0YXR1 c19wcm9wZXJ0eShjb25uZWN0b3IsCj4gPiArCQkJCQkJCSAgICBEUk1fTU9ERV9MSU5LX1NUQVRV U19HT09EKTsKPiA+ICAKPiA+ICAJCWlmIChpbnRlbF9kcC0+aXNfbXN0KSB7Cj4gPiAgCQkJRFJN X0RFQlVHX0tNUygiTVNUIGRldmljZSBtYXkgaGF2ZSBkaXNhcHBlYXJlZCAlZCB2cyAlZFxuIiwK PiA+IEBAIC00NTEwLDYgKzQ1NjQsMTEgQEAgc3RhdGljIGJvb2wgaW50ZWxfZGlnaXRhbF9wb3J0 X2Nvbm5lY3RlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gPiAgCURSTV9E RUJVR19LTVMoIltDT05ORUNUT1I6JWQ6JXNdXG4iLAo+ID4gIAkJICAgICAgY29ubmVjdG9yLT5i YXNlLmlkLCBjb25uZWN0b3ItPm5hbWUpOwo+ID4gIAo+ID4gKwkvKiBJZiB0aGlzIGlzIGEgcmV0 cnkgZHVlIHRvIGxpbmsgdHJpYW5pbmcgZmFpbHVyZSAqLwo+ID4gKwlpZiAoc3RhdHVzID09IGNv bm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkICYmCj4gPiArCSAgICBjb25uZWN0b3ItPmxpbmtfc3Rh dHVzID09IERSTV9NT0RFX0xJTktfU1RBVFVTX0JBRCkKPiA+ICsJCXJldHVybiBzdGF0dXM7Cj4g PiArCj4gPiAgCS8qIElmIGZ1bGwgZGV0ZWN0IGlzIG5vdCBwZXJmb3JtZWQgeWV0LCBkbyBhIGZ1 bGwgZGV0ZWN0ICovCj4gPiAgCWlmICghaW50ZWxfZHAtPmRldGVjdF9kb25lKQo+ID4gIAkJc3Rh dHVzID0gaW50ZWxfZHBfbG9uZ19wdWxzZShpbnRlbF9kcC0+YXR0YWNoZWRfY29ubmVjdG9yKTsK PiA+IEBAIC01Njc3LDYgKzU3MzYsMzcgQEAgc3RhdGljIGJvb2wgaW50ZWxfZWRwX2luaXRfY29u bmVjdG9yKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsCj4gPiAgCXJldHVybiBmYWxzZTsKPiA+ ICB9Cj4gPiAgCj4gPiArc3RhdGljIHZvaWQgaW50ZWxfZHBfbW9kZXNldF9yZXRyeV93b3JrX2Zu KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKPiA+ICt7Cj4gPiArCXN0cnVjdCBpbnRlbF9jb25u ZWN0b3IgKmludGVsX2Nvbm5lY3RvcjsKPiA+ICsJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5l Y3RvcjsKPiA+ICsJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7Cj4gPiArCWJvb2wgdmVy Ym9zZV9wcnVuZSA9IHRydWU7Cj4gPiArCj4gPiArCWludGVsX2Nvbm5lY3RvciA9IGNvbnRhaW5l cl9vZih3b3JrLCB0eXBlb2YoKmludGVsX2Nvbm5lY3RvciksCj4gPiArCQkJCSAgICAgICBtb2Rl c2V0X3JldHJ5X3dvcmspOwo+ID4gKwljb25uZWN0b3IgPSAmaW50ZWxfY29ubmVjdG9yLT5iYXNl Owo+ID4gKwo+ID4gKwkvKiBHcmFiIHRoZSBsb2NrcyBiZWZvcmUgY2hhbmdpbmcgY29ubmVjdG9y IHByb3BlcnR5Ki8KPiA+ICsJbXV0ZXhfbG9jaygmY29ubmVjdG9yLT5kZXYtPm1vZGVfY29uZmln Lm11dGV4KTsKPiA+ICsJRFJNX0RFQlVHX0tNUygiW0NPTk5FQ1RPUjolZDolc11cbiIsIGNvbm5l Y3Rvci0+YmFzZS5pZCwKPiA+ICsJCSAgICAgIGNvbm5lY3Rvci0+bmFtZSk7Cj4gPiArCWxpc3Rf Zm9yX2VhY2hfZW50cnkobW9kZSwgJmNvbm5lY3Rvci0+bW9kZXMsIGhlYWQpIHsKPiA+ICsJCW1v ZGUtPnN0YXR1cyA9IGludGVsX2RwX21vZGVfdmFsaWQoY29ubmVjdG9yLAo+ID4gKwkJCQkJCSAg IG1vZGUpOwo+ID4gKwl9Cj4gPiArCWRybV9tb2RlX3BydW5lX2ludmFsaWQoY29ubmVjdG9yLT5k ZXYsICZjb25uZWN0b3ItPm1vZGVzLAo+ID4gKwkJCSAgICAgICB2ZXJib3NlX3BydW5lKTsKPiA+ ICsJLyogU2V0IGNvbm5lY3RvciBsaW5rIHN0YXR1cyB0byBCQUQgYW5kIHNlbmQgYSBVZXZlbnQg dG8gbm90aWZ5Cj4gPiArCSAqIHVzZXJzcGFjZSB0byBkbyBhIG1vZGVzZXQuCj4gPiArCSAqLwo+ ID4gKwlkcm1fbW9kZV9jb25uZWN0b3Jfc2V0X2xpbmtfc3RhdHVzX3Byb3BlcnR5KGNvbm5lY3Rv ciwKPiA+ICsJCQkJCQkgICAgRFJNX01PREVfTElOS19TVEFUVVNfQkFEKTsKPiA+ICsJbXV0ZXhf dW5sb2NrKCZjb25uZWN0b3ItPmRldi0+bW9kZV9jb25maWcubXV0ZXgpOwo+ID4gKwkvKiBTZW5k IEhvdHBsdWcgdWV2ZW50IHNvIHVzZXJzcGFjZSBjYW4gcmVwcm9iZSAqLwo+ID4gKwlkcm1fa21z X2hlbHBlcl9ob3RwbHVnX2V2ZW50KGNvbm5lY3Rvci0+ZGV2KTsKPiA+ICt9Cj4gPiArCj4gPiAg Ym9vbAo+ID4gIGludGVsX2RwX2luaXRfY29ubmVjdG9yKHN0cnVjdCBpbnRlbF9kaWdpdGFsX3Bv cnQgKmludGVsX2RpZ19wb3J0LAo+ID4gIAkJCXN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmludGVs X2Nvbm5lY3RvcikKPiA+IEBAIC01Njg5LDYgKzU3NzksMTAgQEAgc3RhdGljIGJvb2wgaW50ZWxf ZWRwX2luaXRfY29ubmVjdG9yKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsCj4gPiAgCWVudW0g cG9ydCBwb3J0ID0gaW50ZWxfZGlnX3BvcnQtPnBvcnQ7Cj4gPiAgCWludCB0eXBlOwo+ID4gIAo+ ID4gKwkvKiBJbml0aWFsaXplIHRoZSB3b3JrIGZvciBtb2Rlc2V0IGluIGNhc2Ugb2YgbGluayB0 cmFpbiBmYWlsdXJlICovCj4gPiArCUlOSVRfV09SSygmaW50ZWxfY29ubmVjdG9yLT5tb2Rlc2V0 X3JldHJ5X3dvcmssCj4gPiArCQkgIGludGVsX2RwX21vZGVzZXRfcmV0cnlfd29ya19mbik7Cj4g PiArCj4gPiAgCWlmIChXQVJOKGludGVsX2RpZ19wb3J0LT5tYXhfbGFuZXMgPCAxLAo+ID4gIAkJ ICJOb3QgZW5vdWdoIGxhbmVzICglZCkgZm9yIERQIG9uIHBvcnQgJWNcbiIsCj4gPiAgCQkgaW50 ZWxfZGlnX3BvcnQtPm1heF9sYW5lcywgcG9ydF9uYW1lKHBvcnQpKSkKPiA+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcF9saW5rX3RyYWluaW5nLmMgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9kcF9saW5rX3RyYWluaW5nLmMKPiA+IGluZGV4IDAwNDhiNTIu LjEwZjgxYWIgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcF9s aW5rX3RyYWluaW5nLmMKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwX2xp bmtfdHJhaW5pbmcuYwo+ID4gQEAgLTMxMCw5ICszMTAsMTUgQEAgdm9pZCBpbnRlbF9kcF9zdG9w X2xpbmtfdHJhaW4oc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPiA+ICAJCQkJRFBfVFJBSU5J TkdfUEFUVEVSTl9ESVNBQkxFKTsKPiA+ICB9Cj4gPiAgCj4gPiAtdm9pZAo+ID4gK2Jvb2wKPiA+ ICBpbnRlbF9kcF9zdGFydF9saW5rX3RyYWluKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4g PiAgewo+ID4gLQlpbnRlbF9kcF9saW5rX3RyYWluaW5nX2Nsb2NrX3JlY292ZXJ5KGludGVsX2Rw KTsKPiA+IC0JaW50ZWxfZHBfbGlua190cmFpbmluZ19jaGFubmVsX2VxdWFsaXphdGlvbihpbnRl bF9kcCk7Cj4gPiArCWJvb2wgcmV0Owo+ID4gKwo+ID4gKwlpZiAoaW50ZWxfZHBfbGlua190cmFp bmluZ19jbG9ja19yZWNvdmVyeShpbnRlbF9kcCkpIHsKPiA+ICsJCXJldCA9IGludGVsX2RwX2xp bmtfdHJhaW5pbmdfY2hhbm5lbF9lcXVhbGl6YXRpb24oaW50ZWxfZHApOwo+ID4gKwkJaWYgKHJl dCkKPiA+ICsJCQlyZXR1cm4gdHJ1ZTsKPiA+ICsJfQo+ID4gKwlyZXR1cm4gZmFsc2U7Cj4gCj4g VXN1YWxseSBoYXBweSBkYXkgc2NlbmFyaW8gZ29lcyBhdCB0aGUgdG9wIGluZGVudGF0aW9uIGxl dmVsLCBhbmQgZXJyb3JzCj4gYXJlIGhhbmRsZWQgaW4gdGhlIG5lc3RlZCBjYXNlcyB3aXRoIGVh cmx5IHJldHVybnMuIENvbXBhcmUgd2l0aDoKPiAKPiBpbnRlbF9kcF9zdGFydF9saW5rX3RyYWlu KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gewo+IAlpZiAoIWludGVsX2RwX2xpbmtfdHJh aW5pbmdfY2xvY2tfcmVjb3ZlcnkoaW50ZWxfZHApKQo+ICAgICAgICAgCXJldHVybiBmYWxzZTsK PiAKPiAJaWYgKCFpbnRlbF9kcF9saW5rX3RyYWluaW5nX2NoYW5uZWxfZXF1YWxpemF0aW9uKGlu dGVsX2RwKSkKPiAJCXJldHVybiBmYWxzZTsKPiAKPiAJcmV0dXJuIHRydWU7Cj4gfQo+CgpBZ3Jl ZWQuCgogCj4gPiAgfQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKPiA+IGluZGV4IDU1Y2Vi NDQuLjg4OTE4ZjQgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9k cnYuaAo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKPiA+IEBAIC0z MTIsNiArMzEyLDkgQEAgc3RydWN0IGludGVsX2Nvbm5lY3RvciB7Cj4gPiAgCXZvaWQgKnBvcnQ7 IC8qIHN0b3JlIHRoaXMgb3BhcXVlIGFzIGl0cyBpbGxlZ2FsIHRvIGRlcmVmZXJlbmNlIGl0ICov Cj4gPiAgCj4gPiAgCXN0cnVjdCBpbnRlbF9kcCAqbXN0X3BvcnQ7Cj4gPiArCj4gPiArCS8qIFdv cmsgc3RydWN0IHRvIHNjaGVkdWxlIGEgdWV2ZW50IG9uIGxpbmsgdHJhaW4gZmFpbHVyZSAqLwo+ ID4gKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgbW9kZXNldF9yZXRyeV93b3JrOwo+ID4gIH07Cj4gPiAg Cj4gPiAgc3RydWN0IGRwbGwgewo+ID4gQEAgLTg5MCw3ICs4OTMsNiBAQCBzdHJ1Y3QgaW50ZWxf ZHAgewo+ID4gIAlpbnQgZmFsbGJhY2tfbGlua19yYXRlOwo+ID4gIAl1aW50OF90IGZhbGxiYWNr X2xhbmVfY291bnQ7Cj4gPiAgCWludCBmYWxsYmFja19saW5rX3JhdGVfaW5kZXg7Cj4gPiAtCWJv b2wgbGlua190cmFpbl9mYWlsZWQ7Cj4gPiAgCXVpbnQ4X3Qgc2lua19jb3VudDsKPiA+ICAJYm9v bCBsaW5rX21zdDsKPiA+ICAJYm9vbCBoYXNfYXVkaW87Cj4gPiBAQCAtMTM4OSw3ICsxMzkxLDcg QEAgdm9pZCBpbnRlbF9kcF9zZXRfbGlua19wYXJhbXMoc3RydWN0IGludGVsX2RwICppbnRlbF9k cCwKPiA+ICAJCQkgICAgICBib29sIGxpbmtfbXN0KTsKPiA+ICBpbnQgaW50ZWxfZHBfZ2V0X2xp bmtfdHJhaW5fZmFsbGJhY2tfdmFsdWVzKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsCj4gPiAg CQkJCQkgICAgaW50IGxpbmtfcmF0ZSwgdWludDhfdCBsYW5lX2NvdW50KTsKPiA+IC12b2lkIGlu dGVsX2RwX3N0YXJ0X2xpbmtfdHJhaW4oc3RydWN0IGludGVsX2RwICppbnRlbF9kcCk7Cj4gPiAr Ym9vbCBpbnRlbF9kcF9zdGFydF9saW5rX3RyYWluKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAp Owo+ID4gIHZvaWQgaW50ZWxfZHBfc3RvcF9saW5rX3RyYWluKHN0cnVjdCBpbnRlbF9kcCAqaW50 ZWxfZHApOwo+ID4gIHZvaWQgaW50ZWxfZHBfc2lua19kcG1zKHN0cnVjdCBpbnRlbF9kcCAqaW50 ZWxfZHAsIGludCBtb2RlKTsKPiA+ICB2b2lkIGludGVsX2RwX2VuY29kZXJfcmVzZXQoc3RydWN0 IGRybV9lbmNvZGVyICplbmNvZGVyKTsKPiAKPiAtLSAKPiBKYW5pIE5pa3VsYSwgSW50ZWwgT3Bl biBTb3VyY2UgVGVjaG5vbG9neSBDZW50ZXIKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlz dGluZm8vZHJpLWRldmVsCg==