From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH] drm/i915: Add link training test Date: Mon, 14 Sep 2015 15:11:49 +0200 Message-ID: <20150914131149.GE3383@phenom.ffwll.local> References: <1441980706-9241-1-git-send-email-ander.conselvan.de.oliveira@intel.com> <1442231511-24258-1-git-send-email-ander.conselvan.de.oliveira@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wi0-f171.google.com (mail-wi0-f171.google.com [209.85.212.171]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6E6B3720D9 for ; Mon, 14 Sep 2015 06:09:07 -0700 (PDT) Received: by wicfx3 with SMTP id fx3so131922193wic.0 for ; Mon, 14 Sep 2015 06:09:06 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1442231511-24258-1-git-send-email-ander.conselvan.de.oliveira@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Ander Conselvan de Oliveira Cc: intel-gfx@lists.freedesktop.org, thomas.wood@intel.com List-Id: intel-gfx@lists.freedesktop.org T24gTW9uLCBTZXAgMTQsIDIwMTUgYXQgMDI6NTE6NTFQTSArMDMwMCwgQW5kZXIgQ29uc2VsdmFu IGRlIE9saXZlaXJhIHdyb3RlOgo+IC0tLQo+IAo+IE9uIEZyaSwgMjAxNS0wOS0xMSBhdCAxNzox MSArMDMwMCwgQW5kZXIgQ29uc2VsdmFuIGRlIE9saXZlaXJhIHdyb3RlOgo+ID4gT24gV2VkLCAy MDE1LTA5LTA5IGF0IDExOjMzICswMTAwLCBUaG9tYXMgV29vZCB3cm90ZToKPiA+ID4gT24gOCBT ZXB0ZW1iZXIgMjAxNSBhdCAxMzoyOCwgQW5kZXIgQ29uc2VsdmFuIGRlIE9saXZlaXJhCj4gPiA+ IDxhbmRlci5jb25zZWx2YW4uZGUub2xpdmVpcmFAaW50ZWwuY29tPiB3cm90ZToKPiA+ID4gPiAK PiA+IAo+ID4gPiA+IGRpZmYgLS1naXQgYS9saW5rLXRyYWluaW5nLXRlc3QvTWFrZWZpbGUgYi9s aW5rLXRyYWluaW5nLXRlc3QvTWFrZWZpbGUKPiA+ID4gCj4gPiA+IElmIHRoaXMgaXMgbWVhbnQg dG8gYmUgcGFydCBvZiB0aGUgdGVzdCBzdWl0ZSwgdGhlbiBpdCBuZWVkcyB0byBiZSBpbgo+ID4g PiB0aGUgdGVzdHMgZGlyZWN0b3J5IGFuZCB1c2UgdGhlIGlndCB0ZXN0IGluZnJhc3RydWN0dXJl LiBPdGhlcndpc2UgaXQKPiA+ID4gc2hvdWxkIGJlIHBsYWNlZCBpbiB0b29scyBvciB0b29scy9s aW5rLXRyYWluaW5nLXRlc3QuCj4gPiAKPiA+IEkgbWFkZSB0aGUgdGVzdCB1c2UgdGhlIGlndCBp bmZyYXN0cnVjdHVyZSwgYnV0IEknbSBub3Qgc3VyZSBpZiB0aGlzIGlzCj4gPiBhIGdvb2QgZml0 IGZvciBpdC4gVGhlIGRlcGVuZGVuY3kgb24gdGhlIGtlcm5lbCBpcyBvbiBidWlsZCB0aW1lLCBi dXQKPiA+IG9uY2UgY29tcGlsZWQgdGhpcyBjYW4gYmUgcnVuIG9uIGFueSBtYWNoaW5lLiBUaGlz IGNhbiBhbHNvIGludHJvZHVjZQo+ID4gYnVpbGQgZmFpbHVyZXMgaWYgdGhlIHRlc3QgaXMgbm90 IGtlcHQgaW4gc3luYyB3aXRoIHRoZSBkcml2ZXIgc291cmNlLgo+ID4gSWRlYWxseSB0aGF0IGEg ZmFpbHVyZSB0byBidWlsZCB0aGlzIHdvdWxkIGJlIHJlcG9ydGVkIGFzIHRoZSB0ZXN0Cj4gPiBm YWlsaW5nLCBidXQgSSBoYXZlIG5vIGlkZWEgb2YgaG93IHRvIGFjaGlldmUgdGhhdC4KPiAKPiBB bHRlcm5hdGl2ZWx5LCB0aGlzIGNvdWxkIGJlIGluIHRoZSBrZXJuZWwgc291cmNlIHRyZWUgZGly ZWN0bHkuIFRoaXMKPiBwYXRjaCBhZGRzIGEgdGVzdCBzdWJkaXIgdG8gdGhlIGk5MTUgc291cmNl IGRpciwgY29udGFpbmluZyB0aGUgbGluawo+IHRyYWluaW5nIHRlc3QuIFRoZSB0ZXN0IGlzIGNv bXBpbGVkIGFzIHBhcnQgb2YgdGhlIG5vcm1hbCBidWlsZCB1c2luZwo+IHRoZSBleHRyYS15IHZh cmlhYmxlIHNvIHRoYXQgaXQgZG9lc24ndCBnZXQgbGlua2VkIHRvIHRoZSBmaW5hbCBrZXJuZWwu Cj4gCj4gV2hlbiBtYWtlIGlzIHJ1biBmcm9tIHRoZSB0ZXN0cyBkaXJlY3RvcnksIGEgdGhpbiB3 cmFwcGVyIGFyb3VuZCB0aGUKPiB0ZXN0cyBpcyBidWlsdCBhbmQgbGlua2VkIHRvIHRoZSBvYmpl Y3QgZmlsZSBjb21waWxlZCBhcyBwYXJ0IG9mIHRoZQo+IGtlcm5lbCBidWlsZC4gUnVubmluZyBt YWtlIHJ1bl90ZXN0cyBmcm9tIHRoZSB0ZXN0IGRpciBydW5zIHRoZSB0ZXN0Cj4gYW5kIHJlcG9y dHMgc3VjY2VzcyBvciBmYWlsdXJlLgo+IAo+IEFueSB0aG91Z2h0cz8KCkkgdGhpbmsgdGhlcmUn cyBzb21lIHByZWNlZGVuY2UgaW4gb3RoZXIgc3Vic3lzdGVtcyB0byBpbnRlZ3JhdGUgdW5pdAp0 ZXN0cyBkaXJlY3RseSBpbiB0aGUga2VybmVsLCBlLmcuIGxvY2tpbmcgc2VsZnRlc3Qgb3Igc2lt aWxhciB0aGluZ3MuClVzdWFsIGFwcHJvYWNoIGlzIHRvIGVpdGhlciBoYXZlIGEgc3BlY2lhbCBt b2R1bGUgKGJ1dCB0aGF0IG9mdGVuIG1lYW5zCnBpbGVzIG9mIEVYUE9SVF9TWU1CT0wgb25seSBm b3IgdGhhdCBzZWxmdGVzdCBtb2R1bGUpLiBPciBqdXN0IGEgeS9uCktjb25maWcgb3B0aW9uIHdo aWNoIGVuYWJsZXMgdGhhdCBjb2RlIGFuZCBydW5zIGFsbCB0aGUgc2VsZi91bml0IHRlc3RzCndo ZW4gdGhlIG1vZHVsZSBsb2Fkcy4KCkknZCBnbyB3aXRoIHRoYXQgYXBwcm9hY2ggc2luY2UgaXQn cyBzaW1wbGVyLiBBbmQgd2UnZCBvbmx5IG5lZWQgdG8gdGVsbApRQSB0byBlbmFibGUgdGhhdCBL Y29uZmlnIG9wdGlvbiBmb3IgbW9yZSB0ZXN0aW5nLgoKTG9uZy10ZXJtIHdlIG1pZ2h0IGdvIG1v cmUgZmFuY3kgd2l0aCBzb21lIHN0YXRpYyBkZWJ1Z2ZzIGludGVyZmFjZSAoaS5lLgppbiB0aGUg dG9wLWxldmVsIGRybS8gZGlyZWN0b3J5LCBubyBpbiB0aGUgbnVtYmVyZWQgZGV2aWNlIHN1YmRp cnMgaW4KZGVidWdmcykgdG8gcnVuIHNwZWNpZmljIHRlc3RjYXNlcyBzbyB0aGF0IHdlIGNhbiBy ZXBvcnQgb3V0IHRoZSByZXN1bHRzLgoKQnV0IGFzIGxvbmcgYXMgbW9kdWxlIHJlbG9hZCBpcyBw YXJ0IG9mIEJBVCB3ZSBkb24ndCBuZWVkIHRoYXQsIGF0IGxlYXN0Cm5vdCBmb3IgYSBzdGFydC4K CkFueXdheSBJIHRoaW5rIGhhdmluZyB0aGUgdW5pdCB0ZXN0cyBpbiB0aGUga2VybmVsIG1ha2Vz IG1vcmUgc2Vuc2UsIHRoZQppZ3Qgb25lcyB3aWxsIGxpa2VseSBnZXQgb3V0IG9mIHN5bmMgZmFz dC4gQW5kIGlndCBpcyBzdXBwb3NlZCB0byB3b3JrCndpdGggYW55IGtlcm5lbCB2ZXJzaW9uICho ZW5jZSBhbGwgdGhlIGlndF9yZXF1aXJlIGNoZWNrcykuCi1EYW5pZWwKCj4gCj4gQW5kZXIKPiAK PiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAg ICAgfCAgIDIgKwo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS90ZXN0cy9NYWtlZmlsZSAgICAgICAg ICAgICAgICB8ICAzOSArKwo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS90ZXN0cy9lbXB0eS5jICAg ICAgICAgICAgICAgICB8ICAgMAo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS90ZXN0cy9sb2FkZXIu YyAgICAgICAgICAgICAgICB8IDEwOCArKysrKwo+ICAuLi4vZHJtL2k5MTUvdGVzdHMvdGVzdF9p bnRlbF9kcF9saW5rX3RyYWluaW5nLmMgICB8IDQ2NCArKysrKysrKysrKysrKysrKysrKysKPiAg NSBmaWxlcyBjaGFuZ2VkLCA2MTMgaW5zZXJ0aW9ucygrKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9ncHUvZHJtL2k5MTUvdGVzdHMvTWFrZWZpbGUKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS9pOTE1L3Rlc3RzL2VtcHR5LmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS9pOTE1L3Rlc3RzL2xvYWRlci5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS90ZXN0cy90ZXN0X2ludGVsX2RwX2xpbmtfdHJhaW5pbmcu Ywo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gaW5kZXggMDg1MWRlMDcuLjcyOThjZTUgMTAwNjQ0 Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9NYWtlZmlsZQo+IEBAIC05Nyw2ICs5Nyw4IEBAIGk5MTUteSArPSBpOTE1X3Zn cHUubwo+ICAjIGxlZ2FjeSBob3Jyb3JzCj4gIGk5MTUteSArPSBpOTE1X2RtYS5vCj4gIAo+ICtv YmoteSArPSB0ZXN0cy8KPiArCj4gIG9iai0kKENPTkZJR19EUk1fSTkxNSkgICs9IGk5MTUubwo+ ICAKPiAgQ0ZMQUdTX2k5MTVfdHJhY2VfcG9pbnRzLm8gOj0gLUkkKHNyYykKPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvdGVzdHMvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS90ZXN0cy9NYWtlZmlsZQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAw MC4uMzA2Mjc0MQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS90 ZXN0cy9NYWtlZmlsZQo+IEBAIC0wLDAgKzEsMzkgQEAKPiArIyBQbGVhc2Uga2J1aWxkCj4gKyMg VE9ETzogY2hlY2sgZm9yIGEgYmV0dGVyIHdheSB0byBpbmNsdWRlIHRoaXMgZGlyZWN0b3J5IGlu IHRoZSBidWlsZAo+ICsjIHdpdGhvdXQgZm9yY2luZyB0aGUgbmVlZCBmb3IgdGhpcyBlbXB0eSBm aWxlCj4gK29iai15ICs9IGVtcHR5Lm8KPiArCj4gKwo+ICsjIEZJWE1FOiBUaGUgc3RhY2sgcHJv dGVjdG9yIGNvZGUgY2F1c2VzIHRlc3RzIHRvIGNyYXNoIGR1ZSB0byBhbiBpbXByb3Blcmx5Cj4g KyMgaW5pdGlhbGl6ZWQgJWdzLCBzbyBrZWVwIGl0IGRpc2FibGVkIGZvciBub3cuCj4gK2NjZmxh Z3MteSA6PSAtZnN0YWNrLXByb3RlY3Rvci1leHBsaWNpdAo+ICsKPiArZXh0cmEteSArPSB0ZXN0 X2ludGVsX2RwX2xpbmtfdHJhaW5pbmcubwo+ICsKPiArIyBJZiBtYWtlIGlzIHJ1biBmcm9tIHRo aXMgZGlyZWN0b3J5Cj4gK2lmZXEgKDAsICQoTUFLRUxFVkVMKSkKPiArCj4gKyMgRm9yIHN0cmxj cHkKPiArTERGTEFHUyA9IC1sYnNkCj4gKwo+ICtURVNUX1BST0dTID0gXAo+ICsJdGVzdF9pbnRl bF9kcF9saW5rX3RyYWluaW5nCj4gKwo+ICthbGw6IHRlc3RzCj4gKwo+ICt0ZXN0czogJChURVNU X1BST0dTKQo+ICsKPiArcnVuX3Rlc3RzOiB0ZXN0cwo+ICsJQGZvciBURVNUIGluICQoVEVTVF9Q Uk9HUyk7IGRvIFwKPiArCQkoLi8kJFRFU1QgJiYgZWNobyAiJCRURVNUIFtQQVNTXSIpIHx8IGVj aG8gIiQkVEVTVCBbRkFJTF0iOyBcCj4gKwlkb25lCj4gKwo+ICt0ZXN0XyUubzogdGVzdF8lLmMg Li4vJS5jCj4gKwltYWtlIC1DIC4uLy4uLy4uLy4uLy4uLyBkcml2ZXJzL2dwdS9kcm0vaTkxNS90 ZXN0cy8kQAo+ICsKPiArbG9hZGVyLm86IGxvYWRlci5jCj4gKwkkKENDKSAkKENGTEFHUykgLWMg LW8gJEAgJDwKPiArCj4gKyU6ICUubyBsb2FkZXIubwo+ICsJJChDQykgLW8gJEAgJF4gJChMREZM QUdTKQo+ICtlbmRpZgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS90ZXN0cy9l bXB0eS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvdGVzdHMvZW1wdHkuYwo+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS90ZXN0cy9sb2FkZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3Rlc3Rz L2xvYWRlci5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi45ZTM4ODE2 Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3Rlc3RzL2xvYWRl ci5jCj4gQEAgLTAsMCArMSwxMDggQEAKPiArLyoKPiArICogQ29weXJpZ2h0IMKpIDIwMTUgSW50 ZWwgQ29ycG9yYXRpb24KPiArICoKPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwg ZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiArICogY29weSBvZiB0 aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29m dHdhcmUiKSwKPiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlv biwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwg Y29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiAr ICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJz b25zIHRvIHdob20gdGhlCj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3Vi amVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBj b3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhl IG5leHQKPiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9y IHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+ICsgKiBTb2Z0d2FyZS4KPiArICoKPiArICog VEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5Z IEtJTkQsIEVYUFJFU1MgT1IKPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRF RCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gKyAqIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBT SEFMTAo+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9S IEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g QU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwo+ICsgKiBG Uk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNF IE9SIE9USEVSIERFQUxJTkdTCj4gKyAqIElOIFRIRSBTT0ZUV0FSRS4KPiArICoKPiArICogQXV0 aG9yczoKPiArICogICAgQW5kZXIgQ29uc2VsdmFuIGRlIE9saXZlaXJhIDxhbmRlci5jb25zZWx2 YW4uZGUub2xpdmVpcmFAaW50ZWwuY29tPgo+ICsgKgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxz dGRib29sLmg+Cj4gKyNpbmNsdWRlIDxzdGRpbnQuaD4KPiArI2luY2x1ZGUgPHN0ZGxpYi5oPgo+ ICsjaW5jbHVkZSA8c3RkaW8uaD4KPiArI2luY2x1ZGUgPHN0ZGFyZy5oPgo+ICsKPiArdm9pZCBy dW5fdGVzdCh2b2lkKTsKPiArCj4gK3ZvaWQgYXNzZXJ0KGJvb2wgY29uZGl0aW9uKQo+ICt7Cj4g KwlpZiAoIWNvbmRpdGlvbikgewo+ICsJCXByaW50ZigiQXNzZXJ0IGZhaWxlZFxuIik7Cj4gKwkJ YWJvcnQoKTsKPiArCX0KPiArfQo+ICsKPiArc3RydWN0IHsKPiArCXVpbnQ4X3QgcGFkZGluZ1sz Ml07Cj4gK30gcGFyYW1fb3BzX2ludDsKPiArCj4gK3Vuc2lnbmVkIGludCBkcm1fZGVidWcgPSAw OwkvKiAxIHRvIGVuYWJsZSBkZWJ1ZyBvdXRwdXQgKi8KPiArCj4gK3ZvaWQgZHJtX2Vycihjb25z dCBjaGFyICpmb3JtYXQsIC4uLikKPiArewo+ICsJdmFfbGlzdCBhcmdzOwo+ICsKPiArCXZhX3N0 YXJ0KGFyZ3MsIGZvcm1hdCk7Cj4gKwl2cHJpbnRmKGZvcm1hdCwgYXJncyk7Cj4gKwl2YV9lbmQo YXJncyk7Cj4gKwo+ICt9Cj4gKwo+ICt2b2lkIGRybV91dF9kZWJ1Z19wcmludGsoY29uc3QgY2hh ciAqZnVuY3Rpb25fbmFtZSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCj4gK3sKPiArCXZhX2xp c3QgYXJnczsKPiArCj4gKwl2YV9zdGFydChhcmdzLCBmb3JtYXQpOwo+ICsJcHJpbnRmKCJbJXNd ICIsIGZ1bmN0aW9uX25hbWUpOwo+ICsJdnByaW50Zihmb3JtYXQsIGFyZ3MpOwo+ICsJdmFfZW5k KGFyZ3MpOwo+ICt9Cj4gKwo+ICt2b2lkIF9fY29uc3RfdWRlbGF5KHVuc2lnbmVkIGxvbmcgeGxv b3BzKQo+ICt7Cj4gK30KPiArCj4gK3N0cnVjdCBtdXRleDsKPiArdm9pZCBtdXRleF9sb2NrX25l c3RlZChzdHJ1Y3QgbXV0ZXggKmxvY2ssIHVuc2lnbmVkIGludCBzdWJjbGFzcykKPiArewo+ICt9 Cj4gKwo+ICt2b2lkIG11dGV4X3VubG9jayhzdHJ1Y3QgbXV0ZXggKmxvY2spCj4gK3sKPiArfQo+ ICsKPiArc3RydWN0IGxvY2tfY2xhc3Nfa2V5Owo+ICt2b2lkCj4gK19fbXV0ZXhfaW5pdChzdHJ1 Y3QgbXV0ZXggKmxvY2ssIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAq a2V5KQo+ICt7Cj4gK30KPiArCj4gK3ZvaWQgdXNsZWVwX3JhbmdlKHVuc2lnbmVkIGludCBtaW4s IHVuc2lnbmVkIGludCBtYXgpCj4gK3sKPiArfQo+ICsKPiArc3RydWN0IGkyY19hZGFwdGVyOwo+ ICtpbnQgaTJjX2FkZF9hZGFwdGVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKPiArewo+ ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3ZvaWQgaTJjX2RlbF9hZGFwdGVyKHN0cnVjdCBpMmNf YWRhcHRlciAqYWRhcGF0ZXIpCj4gK3sKPiArfQo+ICsKPiAraW50Cj4gK21haW4oaW50IGFyZ2Ms IGNoYXIgKmFyZ3ZbXSkKPiArewo+ICsJcnVuX3Rlc3QoKTsKPiArCXJldHVybiAwOwo+ICt9Cj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3Rlc3RzL3Rlc3RfaW50ZWxfZHBfbGlu a190cmFpbmluZy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvdGVzdHMvdGVzdF9pbnRlbF9kcF9s aW5rX3RyYWluaW5nLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjEx ODY4ZjgKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvdGVzdHMv dGVzdF9pbnRlbF9kcF9saW5rX3RyYWluaW5nLmMKPiBAQCAtMCwwICsxLDQ2NCBAQAo+ICsvKgo+ ICsgKiBDb3B5cmlnaHQgwqkgMjAxNSBJbnRlbCBDb3Jwb3JhdGlvbgo+ICsgKgo+ICsgKiBQZXJt aXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBv YnRhaW5pbmcgYQo+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9j dW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+ICsgKiB0byBkZWFsIGluIHRoZSBT b2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9u Cj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBk aXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNv ZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiArICogU29mdHdhcmUg aXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u czoKPiArICoKPiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlz c2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAo+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJl IGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4g KyAqIFNvZnR3YXJlLgo+ICsgKgo+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElT IiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+ICsgKiBJTVBMSUVE LCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSwKPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklO RlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCj4gKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlS SUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCj4g KyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Ig T1RIRVJXSVNFLCBBUklTSU5HCj4gKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJ VEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKPiArICogSU4gVEhF IFNPRlRXQVJFLgo+ICsgKgo+ICsgKiBBdXRob3JzOgo+ICsgKiAgICBBbmRlciBDb25zZWx2YW4g ZGUgT2xpdmVpcmEgPGFuZGVyLmNvbnNlbHZhbi5kZS5vbGl2ZWlyYUBpbnRlbC5jb20+Cj4gKyAq Cj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgIi4uL2ludGVsX2RwX2xpbmtfdHJhaW5pbmcuYyIKPiAr Cj4gKyNkZWZpbmUgZHJtX2RwX2RwY2Rfd3JpdGUJcmVhbF9kcm1fZHBfZHBjZF93cml0ZQo+ICsj aW5jbHVkZSAiLi4vLi4vZHJtX2RwX2hlbHBlci5jIgo+ICsjdW5kZWYgZHJtX2RwX2RwY2Rfd3Jp dGUKPiArCj4gK3ZvaWQgYXNzZXJ0KGJvb2wgY29uZGl0aW9uKTsKPiArCj4gKwo+ICtzdHJ1Y3Qg c2lua19kZXZpY2Ugewo+ICsJc3NpemVfdCAoKmRwY2Rfd3JpdGUpKHN0cnVjdCBzaW5rX2Rldmlj ZSAqc2luaywgdW5zaWduZWQgaW50IG9mZnNldCwKPiArCQkJICAgICAgdm9pZCAqYnVmZmVyLCBz aXplX3Qgc2l6ZSk7Cj4gKwlib29sICgqZ2V0X2xpbmtfc3RhdHVzKShzdHJ1Y3Qgc2lua19kZXZp Y2UgKnNpbmssCj4gKwkJCQl1aW50OF90IGxpbmtfc3RhdHVzW0RQX0xJTktfU1RBVFVTX1NJWkVd KTsKPiArCj4gKwlzdHJ1Y3Qgewo+ICsJCWJvb2wgbGFuZV9jb3VudF9hbmRfYndfc2V0Owo+ICsJ CWJvb2wgdHJhaW5pbmdfcGF0dGVybl8xX3NldDsKPiArCQlib29sIHN0YXJ0ZWRfd2l0aF9ub25f emVyb19sZXZlbHM7Cj4gKwkJYm9vbCBjcl9kb25lOwo+ICsJCWJvb2wgY2hhbm5lbF9lcV9kb25l Owo+ICsKPiArCQl1aW50OF90IGRwY2RbMHgzMDAwXTsKPiArCX0gZGF0YTsKPiArfTsKPiArCj4g Ky8qIEZha2Ugc2luayBkZXZpY2UgaW1wbGVtZW50YXRpb24gKi8KPiArCj4gK3N0YXRpYyB1aW50 OF90Cj4gK3NpbmtfZGV2aWNlX2xhbmVfY291bnQoc3RydWN0IHNpbmtfZGV2aWNlICpzaW5rKQo+ ICt7Cj4gKwlyZXR1cm4gc2luay0+ZGF0YS5kcGNkW0RQX0xBTkVfQ09VTlRfU0VUXTsKPiArfQo+ ICsKPiArc3RhdGljIHVpbnQ4X3QKPiArc2lua19kZXZpY2VfZ2V0X3RyYWluaW5nX3BhdHRlcm4o c3RydWN0IHNpbmtfZGV2aWNlICpzaW5rKQo+ICt7Cj4gKwlyZXR1cm4gc2luay0+ZGF0YS5kcGNk W0RQX1RSQUlOSU5HX1BBVFRFUk5fU0VUXSAmIERQX1RSQUlOSU5HX1BBVFRFUk5fTUFTSzsKPiAr fQo+ICsKPiArc3RhdGljIHVpbnQ4X3QKPiArc2lua19kZXZpY2VfZ2V0X3ZvbHRhZ2Vfc3dpbmco c3RydWN0IHNpbmtfZGV2aWNlICpzaW5rLCBpbnQgbGFuZSkKPiArewo+ICsJcmV0dXJuIHNpbmst PmRhdGEuZHBjZFtEUF9UUkFJTklOR19MQU5FMF9TRVQgKyBsYW5lXSAmCj4gKwkJRFBfVFJBSU5f Vk9MVEFHRV9TV0lOR19NQVNLOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdWludDhfdAo+ICtzaW5rX2Rl dmljZV9nZXRfcHJlX2VtcGhhc2lzX2xldmVsKHN0cnVjdCBzaW5rX2RldmljZSAqc2luaywgaW50 IGxhbmUpCj4gK3sKPiArCXJldHVybiAoc2luay0+ZGF0YS5kcGNkW0RQX1RSQUlOSU5HX0xBTkUw X1NFVCArIGxhbmVdICYKPiArCQkgRFBfVFJBSU5fUFJFX0VNUEhBU0lTX01BU0spID4+IERQX1RS QUlOX1BSRV9FTVBIQVNJU19TSElGVDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQKPiArc2lua19k ZXZpY2VfY2hlY2tfbGFuZV9jb3VudF9hbmRfYncoc3RydWN0IHNpbmtfZGV2aWNlICpzaW5rKQo+ ICt7Cj4gKwlpZiAoc2luay0+ZGF0YS5sYW5lX2NvdW50X2FuZF9id19zZXQpCj4gKwkJcmV0dXJu Owo+ICsKPiArCWFzc2VydChzaW5rLT5kYXRhLmRwY2RbRFBfVFJBSU5JTkdfUEFUVEVSTl9TRVRd ID09IDApOwo+ICsKPiArCWlmIChzaW5rLT5kYXRhLmRwY2RbRFBfTElOS19CV19TRVRdICE9IDAg JiYKPiArCSAgICBzaW5rLT5kYXRhLmRwY2RbRFBfTEFORV9DT1VOVF9TRVRdICE9IDApCj4gKwkJ c2luay0+ZGF0YS5sYW5lX2NvdW50X2FuZF9id19zZXQgPSB0cnVlOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZAo+ICtzaW5rX2RldmljZV9jaGVja19wYXR0ZXJuXzFfc2V0KHN0cnVjdCBzaW5rX2Rl dmljZSAqc2luaykKPiArewo+ICsJaW50IGxhbmU7Cj4gKwo+ICsJaWYgKCFzaW5rLT5kYXRhLmxh bmVfY291bnRfYW5kX2J3X3NldCB8fAo+ICsJICAgIHNpbmstPmRhdGEudHJhaW5pbmdfcGF0dGVy bl8xX3NldCkKPiArCQlyZXR1cm47Cj4gKwo+ICsJYXNzZXJ0KHNpbmtfZGV2aWNlX2dldF90cmFp bmluZ19wYXR0ZXJuKHNpbmspIDw9IERQX1RSQUlOSU5HX1BBVFRFUk5fMSk7Cj4gKwo+ICsJaWYg KHNpbmtfZGV2aWNlX2dldF90cmFpbmluZ19wYXR0ZXJuKHNpbmspICE9IERQX1RSQUlOSU5HX1BB VFRFUk5fMSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJYXNzZXJ0KHNpbmstPmRhdGEuZHBjZFtEUF9M SU5LX0JXX1NFVF0gPT0gRFBfTElOS19CV18xXzYyIHx8Cj4gKwkgICAgICAgc2luay0+ZGF0YS5k cGNkW0RQX0xJTktfQldfU0VUXSA9PSBEUF9MSU5LX0JXXzJfNyk7Cj4gKwo+ICsJYXNzZXJ0KHNp bmstPmRhdGEuZHBjZFtEUF9MQU5FX0NPVU5UX1NFVF0gPT0gMSB8fAo+ICsJCSAgIHNpbmstPmRh dGEuZHBjZFtEUF9MQU5FX0NPVU5UX1NFVF0gPT0gMiB8fAo+ICsJCSAgIHNpbmstPmRhdGEuZHBj ZFtEUF9MQU5FX0NPVU5UX1NFVF0gPT0gNCk7Cj4gKwo+ICsJZm9yIChsYW5lID0gMDsgbGFuZSA8 IHNpbmtfZGV2aWNlX2xhbmVfY291bnQoc2luayk7IGxhbmUrKykgewo+ICsJCWlmIChzaW5rX2Rl dmljZV9nZXRfdm9sdGFnZV9zd2luZyhzaW5rLCBsYW5lKSAhPSBEUF9UUkFJTl9WT0xUQUdFX1NX SU5HX0xFVkVMXzAgfHwKPiArCQkgICAgc2lua19kZXZpY2VfZ2V0X3ByZV9lbXBoYXNpc19sZXZl bChzaW5rLCBsYW5lKSAhPSBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8wKQo+ICsJCQlzaW5rLT5k YXRhLnN0YXJ0ZWRfd2l0aF9ub25femVyb19sZXZlbHMgPSB0cnVlOwo+ICsJfQo+ICsKPiArCXNp bmstPmRhdGEudHJhaW5pbmdfcGF0dGVybl8xX3NldCA9IHRydWU7Cj4gK30KPiArCj4gK3N0YXRp YyB2b2lkCj4gK3NpbmtfZGV2aWNlX2NoZWNrX3BhdHRlcm5fMl9zZXQoc3RydWN0IHNpbmtfZGV2 aWNlICpzaW5rKQo+ICt7Cj4gKwlpZiAoIXNpbmstPmRhdGEuY3JfZG9uZSkKPiArCQlyZXR1cm47 Cj4gKwo+ICsJYXNzZXJ0KHNpbmtfZGV2aWNlX2dldF90cmFpbmluZ19wYXR0ZXJuKHNpbmspID09 IERQX1RSQUlOSU5HX1BBVFRFUk5fMik7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkCj4gK3Npbmtf ZGV2aWNlX2NoZWNrX3BhdHRlcm5fZGlzYWJsZShzdHJ1Y3Qgc2lua19kZXZpY2UgKnNpbmspCj4g K3sKPiArCWlmICghc2luay0+ZGF0YS5jcl9kb25lIHx8ICEgc2luay0+ZGF0YS5jaGFubmVsX2Vx X2RvbmUpCj4gKwkJcmV0dXJuOwo+ICsKPiArCWFzc2VydChzaW5rX2RldmljZV9nZXRfdHJhaW5p bmdfcGF0dGVybihzaW5rKSA9PSBEUF9UUkFJTklOR19QQVRURVJOX0RJU0FCTEUpOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgc3NpemVfdAo+ICtzaW5rX2RldmljZV9kcGNkX3dyaXRlKHN0cnVjdCBzaW5r X2RldmljZSAqc2luaywgdW5zaWduZWQgaW50IG9mZnNldCwKPiArCQkgICAgICAgdm9pZCAqYnVm ZmVyLCBzaXplX3Qgc2l6ZSkKPiArewo+ICsJbWVtY3B5KHNpbmstPmRhdGEuZHBjZCArIG9mZnNl dCwgYnVmZmVyLCBzaXplKTsKPiArCj4gKwlzaW5rX2RldmljZV9jaGVja19sYW5lX2NvdW50X2Fu ZF9idyhzaW5rKTsKPiArCj4gKwlpZiAoIXNpbmstPmRhdGEuY3JfZG9uZSkKPiArCQlzaW5rX2Rl dmljZV9jaGVja19wYXR0ZXJuXzFfc2V0KHNpbmspOwo+ICsJZWxzZSBpZiAoIXNpbmstPmRhdGEu Y2hhbm5lbF9lcV9kb25lKQo+ICsJCXNpbmtfZGV2aWNlX2NoZWNrX3BhdHRlcm5fMl9zZXQoc2lu ayk7Cj4gKwllbHNlCj4gKwkJc2lua19kZXZpY2VfY2hlY2tfcGF0dGVybl9kaXNhYmxlKHNpbmsp Owo+ICsKPiArCXJldHVybiBzaXplOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbAo+ICtzaW5rX2Rl dmljZV9tYXhfdm9sdGFnZV9yZWFjaGVkKHN0cnVjdCBzaW5rX2RldmljZSAqc2luaywgaW50IGxh bmUpCj4gK3sKPiArCXJldHVybiAoc2luay0+ZGF0YS5kcGNkW0RQX1RSQUlOSU5HX0xBTkUwX1NF VCArIGxhbmVdICYgRFBfVFJBSU5fTUFYX1NXSU5HX1JFQUNIRUQpID09Cj4gKwkJRFBfVFJBSU5f TUFYX1NXSU5HX1JFQUNIRUQ7Cj4gK30KPiArCj4gK3N0YXRpYyBib29sCj4gK3NpbmtfZGV2aWNl X21heF9wcmVfZW1waGFzaXNfcmVhY2hlZChzdHJ1Y3Qgc2lua19kZXZpY2UgKnNpbmssIGludCBs YW5lKQo+ICt7Cj4gKwlyZXR1cm4gKHNpbmstPmRhdGEuZHBjZFtEUF9UUkFJTklOR19MQU5FMF9T RVQgKyBsYW5lXSAmIERQX1RSQUlOX01BWF9QUkVfRU1QSEFTSVNfUkVBQ0hFRCkgPT0KPiArCQlE UF9UUkFJTl9NQVhfUFJFX0VNUEhBU0lTX1JFQUNIRUQ7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk Cj4gK3NpbmtfZGV2aWNlX3NldF9hZGp1c3Rfdm9sdGFnZShzdHJ1Y3Qgc2lua19kZXZpY2UgKnNp bmssCj4gKwkJCSAgICAgICBpbnQgbGFuZSwgdWludDhfdCBsZXZlbCkKPiArewo+ICsJaW50IHNo aWZ0ID0gRFBfQURKVVNUX1ZPTFRBR0VfU1dJTkdfTEFORTFfU0hJRlQgKiAobGFuZSAmIDEpOwo+ ICsKPiArCXNpbmstPmRhdGEuZHBjZFtEUF9BREpVU1RfUkVRVUVTVF9MQU5FMF8xICsgKGxhbmUg Pj4gMSldICY9Cj4gKwkJfihEUF9BREpVU1RfVk9MVEFHRV9TV0lOR19MQU5FMF9NQVNLIDw8IHNo aWZ0KTsKPiArCXNpbmstPmRhdGEuZHBjZFtEUF9BREpVU1RfUkVRVUVTVF9MQU5FMF8xICsgKGxh bmUgPj4gMSldIHw9Cj4gKwkJbGV2ZWwgPDwgc2hpZnQ7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk Cj4gK3NpbmtfZGV2aWNlX3NldF9hZGp1c3RfcHJlX2VtcGhhc2lzKHN0cnVjdCBzaW5rX2Rldmlj ZSAqc2luaywKPiArCQkJCSAgICBpbnQgbGFuZSwgdWludDhfdCBsZXZlbCkKPiArewo+ICsJaW50 IHNoaWZ0ID0gRFBfQURKVVNUX1ZPTFRBR0VfU1dJTkdfTEFORTFfU0hJRlQgKiAobGFuZSAmIDEp Owo+ICsKPiArCXNpbmstPmRhdGEuZHBjZFtEUF9BREpVU1RfUkVRVUVTVF9MQU5FMF8xICsgKGxh bmUgPj4gMSldICY9Cj4gKwkJfihEUF9BREpVU1RfUFJFX0VNUEhBU0lTX0xBTkUwX01BU0sgPDwg c2hpZnQpOwo+ICsJc2luay0+ZGF0YS5kcGNkW0RQX0FESlVTVF9SRVFVRVNUX0xBTkUwXzEgKyAo bGFuZSA+PiAxKV0gfD0KPiArCQlsZXZlbCA8PCAoRFBfQURKVVNUX1BSRV9FTVBIQVNJU19MQU5F MF9TSElGVCArIHNoaWZ0KTsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wKPiArc2lua19kZXZpY2Vf cmVxdWVzdF9oaWdoZXJfdm9sdGFnZV9zd2luZyhzdHJ1Y3Qgc2lua19kZXZpY2UgKnNpbmspCj4g K3sKPiArCWJvb2wgbWF4X3JlYWNoZWQgPSBmYWxzZTsKPiArCWludCBsYW5lOwo+ICsKPiArCWZv ciAobGFuZSA9IDA7IGxhbmUgPCBzaW5rX2RldmljZV9sYW5lX2NvdW50KHNpbmspOyBsYW5lKysp IHsKPiArCQlpZiAoc2lua19kZXZpY2VfbWF4X3ZvbHRhZ2VfcmVhY2hlZChzaW5rLCBsYW5lKSkg ewo+ICsJCQltYXhfcmVhY2hlZCA9IHRydWU7Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiArCX0KPiAr Cj4gKwlpZiAobWF4X3JlYWNoZWQpCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCWZvciAobGFu ZSA9IDA7IGxhbmUgPCBzaW5rX2RldmljZV9sYW5lX2NvdW50KHNpbmspOyBsYW5lKyspIHsKPiAr CQl1aW50OF90IG5ld192b2x0YWdlID0KPiArCQkJc2lua19kZXZpY2VfZ2V0X3ZvbHRhZ2Vfc3dp bmcoc2luaywgbGFuZSkgKyAxOwo+ICsKPiArCQlzaW5rX2RldmljZV9zZXRfYWRqdXN0X3ZvbHRh Z2Uoc2luaywgbGFuZSwgbmV3X3ZvbHRhZ2UpOwo+ICsJfQo+ICsKPiArCXJldHVybiB0cnVlOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbAo+ICtzaW5rX2RldmljZV9yZXF1ZXN0X2hpZ2hlcl9wcmVf ZW1waGFzaXMoc3RydWN0IHNpbmtfZGV2aWNlICpzaW5rKQo+ICt7Cj4gKwlib29sIG1heF9yZWFj aGVkID0gZmFsc2U7Cj4gKwlpbnQgbGFuZTsKPiArCj4gKwlmb3IgKGxhbmUgPSAwOyBsYW5lIDwg c2lua19kZXZpY2VfbGFuZV9jb3VudChzaW5rKTsgbGFuZSsrKSB7Cj4gKwkJaWYgKHNpbmtfZGV2 aWNlX21heF9wcmVfZW1waGFzaXNfcmVhY2hlZChzaW5rLCBsYW5lKSkgewo+ICsJCQltYXhfcmVh Y2hlZCA9IHRydWU7Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiArCX0KPiArCj4gKwlpZiAobWF4X3Jl YWNoZWQpCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCWZvciAobGFuZSA9IDA7IGxhbmUgPCBz aW5rX2RldmljZV9sYW5lX2NvdW50KHNpbmspOyBsYW5lKyspIHsKPiArCQl1aW50OF90IG5ld19w cmVfZW1waGFzaXMgPQo+ICsJCQlzaW5rX2RldmljZV9nZXRfcHJlX2VtcGhhc2lzX2xldmVsKHNp bmssIGxhbmUpICsgMTsKPiArCj4gKwkJc2lua19kZXZpY2Vfc2V0X2FkanVzdF9wcmVfZW1waGFz aXMoc2luaywgbGFuZSwgbmV3X3ByZV9lbXBoYXNpcyk7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHRy dWU7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkCj4gK3NpbmtfZGV2aWNlX21hcmtfY3JfZG9uZShz dHJ1Y3Qgc2lua19kZXZpY2UgKnNpbmspCj4gK3sKPiArCWludCBsYW5lOwo+ICsKPiArCWZvciAo bGFuZSA9IDA7IGxhbmUgPCBzaW5rX2RldmljZV9sYW5lX2NvdW50KHNpbmspOyBsYW5lKyspCj4g KwkJc2luay0+ZGF0YS5kcGNkW0RQX0xBTkUwXzFfU1RBVFVTICsgKGxhbmUgPj4gMSldIHw9Cj4g KwkJCURQX0xBTkVfQ1JfRE9ORSA8PCAoNCAqIChsYW5lICYgMSkpOwo+ICsKPiArCXNpbmstPmRh dGEuY3JfZG9uZSA9IHRydWU7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkCj4gK3NpbmtfZGV2aWNl X21hcmtfY2hhbm5lbF9lcV9kb25lKHN0cnVjdCBzaW5rX2RldmljZSAqc2luaykKPiArewo+ICsJ aW50IGxhbmU7Cj4gKwo+ICsJZm9yIChsYW5lID0gMDsgbGFuZSA8IHNpbmtfZGV2aWNlX2xhbmVf Y291bnQoc2luayk7IGxhbmUrKykgewo+ICsJCXVpbnQ4X3QgbWFzayA9IChEUF9MQU5FX0NIQU5O RUxfRVFfRE9ORSB8IERQX0xBTkVfU1lNQk9MX0xPQ0tFRCk7Cj4gKwkJc2luay0+ZGF0YS5kcGNk W0RQX0xBTkUwXzFfU1RBVFVTICsgKGxhbmUgPj4gMSldIHw9Cj4gKwkJCW1hc2sgPDwgKDQgKiAo bGFuZSAmIDEpKTsKPiArCX0KPiArCj4gKwlzaW5rLT5kYXRhLmRwY2RbRFBfTEFORV9BTElHTl9T VEFUVVNfVVBEQVRFRF0gfD0gRFBfSU5URVJMQU5FX0FMSUdOX0RPTkU7Cj4gKwo+ICsJc2luay0+ ZGF0YS5jaGFubmVsX2VxX2RvbmUgPSB0cnVlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbAo+ICtz aW5rX2RldmljZV9nZXRfbGlua19zdGF0dXMoc3RydWN0IHNpbmtfZGV2aWNlICpzaW5rLAo+ICsJ CQkgICAgdWludDhfdCBsaW5rX3N0YXR1c1tEUF9MSU5LX1NUQVRVU19TSVpFXSkKPiArewo+ICsJ aWYgKCFzaW5rLT5kYXRhLmNyX2RvbmUpIHsKPiArCQlpZiAoIXNpbmtfZGV2aWNlX3JlcXVlc3Rf aGlnaGVyX3ZvbHRhZ2Vfc3dpbmcoc2luaykpCj4gKwkJCXNpbmtfZGV2aWNlX21hcmtfY3JfZG9u ZShzaW5rKTsKPiArCX0gZWxzZSBpZiAoIXNpbmstPmRhdGEuY2hhbm5lbF9lcV9kb25lKSB7Cj4g KwkJaWYgKCFzaW5rX2RldmljZV9yZXF1ZXN0X2hpZ2hlcl9wcmVfZW1waGFzaXMoc2luaykpCj4g KwkJCXNpbmtfZGV2aWNlX21hcmtfY2hhbm5lbF9lcV9kb25lKHNpbmspOwo+ICsJfQo+ICsKPiAr CW1lbWNweShsaW5rX3N0YXR1cywgc2luay0+ZGF0YS5kcGNkICsgRFBfTEFORTBfMV9TVEFUVVMs Cj4gKwkgICAgICAgRFBfTElOS19TVEFUVVNfU0laRSk7Cj4gKwo+ICsJcmV0dXJuIHRydWU7Cj4g K30KPiArCj4gK3N0YXRpYyB2b2lkCj4gK3NpbmtfZGV2aWNlX3Jlc2V0KHN0cnVjdCBzaW5rX2Rl dmljZSAqc2luaywgaW50IGxhbmVzLCB1aW50OF90IGxpbmtfYncpCj4gK3sKPiArCW1lbXNldCgm c2luay0+ZGF0YSwgMCwgc2l6ZW9mIHNpbmstPmRhdGEpOwo+ICsJc2luay0+ZGF0YS5kcGNkW0RQ X01BWF9MSU5LX1JBVEVdID0gbGlua19idzsKPiArCXNpbmstPmRhdGEuZHBjZFtEUF9NQVhfTEFO RV9DT1VOVF0gPSBsYW5lczsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCBzaW5rX2RldmljZSBz aW1wbGVfc2luayA9IHsKPiArCS5nZXRfbGlua19zdGF0dXMgPSBzaW5rX2RldmljZV9nZXRfbGlu a19zdGF0dXMsCj4gKwkuZHBjZF93cml0ZSA9IHNpbmtfZGV2aWNlX2RwY2Rfd3JpdGUsCj4gK307 Cj4gKwo+ICsvKiBHbHVlIGNvZGUgKi8KPiArCj4gK3N0cnVjdCB0ZXN0X2ludGVsX2RwIHsKPiAr CXN0cnVjdCBpbnRlbF9kcCBkcDsKPiArCXN0cnVjdCBzaW5rX2RldmljZSAqc2luazsKPiArCXVp bnQ4X3QgbGlua19idzsKPiArCj4gKwl1aW50OF90IG1heF92b2x0YWdlOwo+ICsJdWludDhfdCBt YXhfcHJlX2VtcGhhc2lzOwo+ICt9Owo+ICsKPiArc3RhdGljIHN0cnVjdCB0ZXN0X2ludGVsX2Rw ICoKPiArdG9fdGVzdF9pbnRlbF9kcChzdHJ1Y3QgaW50ZWxfZHAgKmRwKQo+ICt7Cj4gKwlyZXR1 cm4gY29udGFpbmVyX29mKGRwLCBzdHJ1Y3QgdGVzdF9pbnRlbF9kcCwgZHApOwo+ICt9Cj4gKwo+ ICt2b2lkIGludGVsX2RwX3NldF9pZGxlX2xpbmtfdHJhaW4oc3RydWN0IGludGVsX2RwICppbnRl bF9kcCkKPiArewo+ICt9Cj4gKwo+ICtib29sIGludGVsX2RwX3NvdXJjZV9zdXBwb3J0c19oYnIy KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gK3sKPiArCXJldHVybiBmYWxzZTsKPiArfQo+ ICsKPiArYm9vbAo+ICtpbnRlbF9kcF9nZXRfbGlua19zdGF0dXMoc3RydWN0IGludGVsX2RwICpp bnRlbF9kcCwgdWludDhfdCBsaW5rX3N0YXR1c1tEUF9MSU5LX1NUQVRVU19TSVpFXSkKPiArewo+ ICsJc3RydWN0IHNpbmtfZGV2aWNlICpzaW5rID0gdG9fdGVzdF9pbnRlbF9kcChpbnRlbF9kcCkt PnNpbms7Cj4gKwlyZXR1cm4gc2luay0+Z2V0X2xpbmtfc3RhdHVzKHNpbmssIGxpbmtfc3RhdHVz KTsKPiArfQo+ICsKPiArdm9pZAo+ICtpbnRlbF9kcF91cGRhdGVfc2lnbmFsX2xldmVscyhzdHJ1 Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ICt7Cj4gK30KPiArCj4gK3ZvaWQgaW50ZWxfZHBfY29t cHV0ZV9yYXRlKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsIGludCBwb3J0X2Nsb2NrLAo+ICsJ CQkgICB1aW50OF90ICpsaW5rX2J3LCB1aW50OF90ICpyYXRlX3NlbGVjdCkKPiArewo+ICsJKmxp bmtfYncgPSB0b190ZXN0X2ludGVsX2RwKGludGVsX2RwKS0+bGlua19idzsKPiArCSpyYXRlX3Nl bGVjdCA9IDA7Cj4gK30KPiArCj4gK3ZvaWQKPiAraW50ZWxfZHBfcHJvZ3JhbV9saW5rX3RyYWlu aW5nX3BhdHRlcm4oc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwKPiArCQkJCSAgICAgICB1aW50 OF90IGRwX3RyYWluX3BhdCkKPiArewo+ICt9Cj4gKwo+ICt1aW50OF90Cj4gK2ludGVsX2RwX3Zv bHRhZ2VfbWF4KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gK3sKPiArCXJldHVybiB0b190 ZXN0X2ludGVsX2RwKGludGVsX2RwKS0+bWF4X3ZvbHRhZ2UgPDwKPiArCQlEUF9UUkFJTl9WT0xU QUdFX1NXSU5HX1NISUZUOwo+ICt9Cj4gKwo+ICt1aW50OF90Cj4gK2ludGVsX2RwX3ByZV9lbXBo YXNpc19tYXgoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwgdWludDhfdCB2b2x0YWdlX3N3aW5n KQo+ICt7Cj4gKwlyZXR1cm4gdG9fdGVzdF9pbnRlbF9kcChpbnRlbF9kcCktPm1heF9wcmVfZW1w aGFzaXMgPDwKPiArCQlEUF9UUkFJTl9QUkVfRU1QSEFTSVNfU0hJRlQ7Cj4gK30KPiArCj4gK3Nz aXplX3QgZHJtX2RwX2RwY2Rfd3JpdGUoc3RydWN0IGRybV9kcF9hdXggKmF1eCwgdW5zaWduZWQg aW50IG9mZnNldCwKPiArCQkJICB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQo+ICt7Cj4gKwlz dHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwID0KPiArCQljb250YWluZXJfb2YoYXV4LCBzdHJ1Y3Qg aW50ZWxfZHAsIGF1eCk7Cj4gKwlzdHJ1Y3Qgc2lua19kZXZpY2UgKnNpbmsgPSB0b190ZXN0X2lu dGVsX2RwKGludGVsX2RwKS0+c2luazsKPiArCj4gKwlyZXR1cm4gc2luay0+ZHBjZF93cml0ZShz aW5rLCBvZmZzZXQsIGJ1ZmZlciwgc2l6ZSk7Cj4gK30KPiArCj4gKy8qIC0tLSAqLwo+ICsKPiAr c3RhdGljIHN0cnVjdCB0ZXN0X2ludGVsX2RwIHRlc3RfZHA7Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ ICtkb190ZXN0KHN0cnVjdCBzaW5rX2RldmljZSAqc2luaywgaW50IGxhbmVzLCB1aW50OF90IGxp bmtfYncsCj4gKwkgICAgIHVpbnQ4X3QgbWF4X3ZvbHRhZ2UsIHVpbnQ4X3QgbWF4X3ByZV9lbXBo YXNpcykKPiArewo+ICsJaW50IGxhbmU7Cj4gKwo+ICsJbWVtc2V0KCZ0ZXN0X2RwLCAwLCBzaXpl b2YgdGVzdF9kcCk7Cj4gKwl0ZXN0X2RwLmRwLmxhbmVfY291bnQgPSBsYW5lczsKPiArCXRlc3Rf ZHAubGlua19idyA9IGxpbmtfYnc7Cj4gKwl0ZXN0X2RwLnNpbmsgPSBzaW5rOwo+ICsJdGVzdF9k cC5tYXhfdm9sdGFnZSA9Cj4gKwkJbWF4X3ZvbHRhZ2UgPj4gRFBfVFJBSU5fVk9MVEFHRV9TV0lO R19TSElGVDsKPiArCXRlc3RfZHAubWF4X3ByZV9lbXBoYXNpcyA9Cj4gKwkJbWF4X3ByZV9lbXBo YXNpcyA+PiBEUF9UUkFJTl9QUkVfRU1QSEFTSVNfU0hJRlQ7Cj4gKwo+ICsJc2lua19kZXZpY2Vf cmVzZXQoc2luaywgbGFuZXMsIGxpbmtfYncpOwo+ICsKPiArCWludGVsX2RwX3N0YXJ0X2xpbmtf dHJhaW4oJnRlc3RfZHAuZHApOwo+ICsJaW50ZWxfZHBfc3RvcF9saW5rX3RyYWluKCZ0ZXN0X2Rw LmRwKTsKPiArCj4gKwlhc3NlcnQoc2luay0+ZGF0YS5jcl9kb25lKTsKPiArCWFzc2VydChzaW5r LT5kYXRhLmNoYW5uZWxfZXFfZG9uZSk7Cj4gKwo+ICsJZm9yIChsYW5lID0gMDsgbGFuZSA8IHRl c3RfZHAuZHAubGFuZV9jb3VudDsgbGFuZSsrKSB7Cj4gKwkJdWludDhfdCBjdXJfdiA9IHNpbmtf ZGV2aWNlX2dldF92b2x0YWdlX3N3aW5nKHNpbmssIGxhbmUpOwo+ICsJCXVpbnQ4X3QgY3VyX3Ag PSBzaW5rX2RldmljZV9nZXRfcHJlX2VtcGhhc2lzX2xldmVsKHNpbmssIGxhbmUpOwo+ICsKPiAr CQlhc3NlcnQoY3VyX3YgPT0gdGVzdF9kcC5tYXhfdm9sdGFnZSk7Cj4gKwkJYXNzZXJ0KGN1cl9w ID09IHRlc3RfZHAubWF4X3ByZV9lbXBoYXNpcyk7Cj4gKwl9Cj4gK30KPiArCj4gK2ludCB0ZXN0 X2xhbmVzW10gPSB7Cj4gKwkxLCAyLCA0LAo+ICt9Owo+ICsKPiArdWludDhfdCB0ZXN0X2J3W10g PSB7Cj4gKwlEUF9MSU5LX0JXXzFfNjIsCj4gKwlEUF9MSU5LX0JXXzJfNywKPiArfTsKPiArCj4g K3VpbnQ4X3QgdGVzdF9tYXhfdm9sdGFnZVtdID0gewo+ICsJRFBfVFJBSU5fVk9MVEFHRV9TV0lO R19MRVZFTF8wLAo+ICsJRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8xLAo+ICsJRFBfVFJB SU5fVk9MVEFHRV9TV0lOR19MRVZFTF8yLAo+ICsJRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZF TF8zLAo+ICt9Owo+ICsKPiArdWludDhfdCB0ZXN0X21heF9wcmVfZW1waGFzaXNbXSA9IHsKPiAr CURQX1RSQUlOX1BSRV9FTVBIX0xFVkVMXzAsCj4gKwlEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8x LAo+ICsJRFBfVFJBSU5fUFJFX0VNUEhfTEVWRUxfMiwKPiArCURQX1RSQUlOX1BSRV9FTVBIX0xF VkVMXzMsCj4gK307Cj4gKwo+ICt2b2lkCj4gK3J1bl90ZXN0KHZvaWQpCj4gK3sKPiArCWludCBs YW5lLCBidywgdm9sdGFnZSwgZW1waDsKPiArCj4gKwlmb3IgKGxhbmUgPSAwOyBsYW5lIDwgQVJS QVlfU0laRSh0ZXN0X2xhbmVzKTsgbGFuZSsrKQo+ICsJZm9yIChidyA9IDA7IGJ3IDwgQVJSQVlf U0laRSh0ZXN0X2J3KTsgYncrKykKPiArCWZvciAodm9sdGFnZSA9IDA7IHZvbHRhZ2UgPCBBUlJB WV9TSVpFKHRlc3RfbWF4X3ZvbHRhZ2UpOyB2b2x0YWdlKyspCj4gKwlmb3IgKGVtcGggPSAwOyBl bXBoIDwgQVJSQVlfU0laRSh0ZXN0X21heF9wcmVfZW1waGFzaXMpOyBlbXBoKyspIHsKPiArCQlE Uk1fREVCVUdfS01TKCJsJWQtYnclZC12JWQtcGUlZCIsCj4gKwkJCSAgICAgIHRlc3RfbGFuZXNb bGFuZV0sCj4gKwkJCSAgICAgIHRlc3RfYndbYnddLAo+ICsJCQkgICAgICB0ZXN0X21heF92b2x0 YWdlW3ZvbHRhZ2VdLAo+ICsJCQkgICAgICB0ZXN0X21heF9wcmVfZW1waGFzaXNbZW1waF0pOwo+ ICsJCWRvX3Rlc3QoJnNpbXBsZV9zaW5rLAo+ICsJCQl0ZXN0X2xhbmVzW2xhbmVdLAo+ICsJCQl0 ZXN0X2J3W2J3XSwKPiArCQkJdGVzdF9tYXhfdm9sdGFnZVt2b2x0YWdlXSwKPiArCQkJdGVzdF9t YXhfcHJlX2VtcGhhc2lzW2VtcGhdKTsKPiArCX0KPiArfQo+IC0tIAo+IDIuNC4zCj4gCj4gX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBJbnRlbC1nZngg bWFpbGluZyBsaXN0Cj4gSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+IGh0dHA6Ly9s aXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngKCi0tIApEYW5p ZWwgVmV0dGVyClNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgpodHRwOi8vYmxv Zy5mZndsbC5jaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcK aHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=