From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: Re: [PATCH 05/15] drm/i915: GuC-specific firmware loader Date: Mon, 15 Jun 2015 21:30:57 +0100 Message-ID: <20150615203057.GG28462@nuc-i3427.alporthouse.com> References: <1434393394-21002-1-git-send-email-david.s.gordon@intel.com> <1434393394-21002-6-git-send-email-david.s.gordon@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from fireflyinternet.com (mail.fireflyinternet.com [87.106.93.118]) by gabe.freedesktop.org (Postfix) with ESMTP id DDB336E2E3 for ; Mon, 15 Jun 2015 13:31:03 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1434393394-21002-6-git-send-email-david.s.gordon@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Dave Gordon Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gTW9uLCBKdW4gMTUsIDIwMTUgYXQgMDc6MzY6MjNQTSArMDEwMCwgRGF2ZSBHb3Jkb24gd3Jv dGU6Cj4gKwkvKiBXZSBjYW4ndCBlbmFibGUgY29udGV4dHMgdW50aWwgYWxsIGZpcm13YXJlIGlz IGxvYWRlZCAqLwo+ICsJcmV0ID0gaW50ZWxfZ3VjX3Vjb2RlX2xvYWQoZGV2LCBmYWxzZSk7CgpQ YXJkb24uIEkga25vdyBjb250ZXh0IGluaXRpYWxpc2F0aW9uIGlzIGJyb2tlbiwgYnV0IGFkZGlu ZyB0byB0aGF0CmJyZWFrYWdlIGlzIG5vdCBwbGVhc2FudC4KCj4gIAlyZXQgPSBpOTE1X2dlbV9j b250ZXh0X2VuYWJsZShkZXZfcHJpdik7Cj4gIAlpZiAocmV0ICYmIHJldCAhPSAtRUlPKSB7Cj4g IAkJRFJNX0VSUk9SKCJDb250ZXh0IGVuYWJsZSBmYWlsZWQgJWRcbiIsIHJldCk7Cgo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWMuaCBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2d1Yy5oCj4gaW5kZXggODIzNjdjOS4uMGI0NDI2NSAxMDA2NDQKPiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWMuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2d1Yy5oCj4gQEAgLTE2Niw0ICsxNjYsOSBAQCBzdHJ1Y3QgaW50ZWxfZ3Vj IHsKPiAgI2RlZmluZSBHVUNfV0RfVkVDU19JRVIJCTB4QzU1OAo+ICAjZGVmaW5lIEdVQ19QTV9Q MjRDX0lFUgkJMHhDNTVDCj4gIAo+ICsvKiBpbnRlbF9ndWNfbG9hZGVyLmMgKi8KPiArZXh0ZXJu IHZvaWQgaW50ZWxfZ3VjX3Vjb2RlX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cj4gK2V4 dGVybiBpbnQgaW50ZWxfZ3VjX3Vjb2RlX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgYm9v bCB3YWl0KTsKPiArZXh0ZXJuIHZvaWQgaW50ZWxfZ3VjX3Vjb2RlX2Zpbmkoc3RydWN0IGRybV9k ZXZpY2UgKmRldik7Cj4gKwo+ICAjZW5kaWYKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfZ3VjX2xvYWRlci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3Vj X2xvYWRlci5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi4xNmVlZjRj Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Y19s b2FkZXIuYwo+IEBAIC0wLDAgKzEsNDE2IEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCDCqSAyMDE0 IEludGVsIENvcnBvcmF0aW9uCj4gKyAqCj4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50 ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCj4gKyAqIGNvcHkg b2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUg IlNvZnR3YXJlIiksCj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJp Y3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPiArICogdGhlIHJpZ2h0cyB0byB1 c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2Us Cj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQg cGVyc29ucyB0byB3aG9tIHRoZQo+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28s IHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+ICsgKgo+ICsgKiBUaGUgYWJv dmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5n IHRoZSBuZXh0Cj4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGll cyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKPiArICogU29mdHdhcmUuCj4gKyAqCj4g KyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9G IEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJ TUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ICsgKiBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZF TlQgU0hBTEwKPiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxF IEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiArICogTElBQklMSVRZLCBXSEVUSEVS IElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKPiAr ICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhF IFVTRSBPUiBPVEhFUiBERUFMSU5HUwo+ICsgKiBJTiBUSEUgU09GVFdBUkUuCj4gKyAqCj4gKyAq IEF1dGhvcnM6Cj4gKyAqICAgIFZpbml0IEF6YWQgPHZpbml0LmF6YWRAaW50ZWwuY29tPgo+ICsg KiAgICBCZW4gV2lkYXdza3kgPGJlbkBid2lkYXdzay5uZXQ+Cj4gKyAqICAgIERhdmUgR29yZG9u IDxkYXZpZC5zLmdvcmRvbkBpbnRlbC5jb20+Cj4gKyAqICAgIEFsZXggRGFpIDx5dS5kYWlAaW50 ZWwuY29tPgo+ICsgKi8KPiArI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+Cj4gKyNpbmNsdWRl ICJpOTE1X2Rydi5oIgo+ICsjaW5jbHVkZSAiaW50ZWxfZ3VjLmgiCj4gKwo+ICsvKioKPiArICog RE9DOiBHdUMKPiArICoKPiArICogaW50ZWxfZ3VjOgo+ICsgKiBUb3AgbGV2ZWwgc3RydWN0dXJl IG9mIGd1Yy4gSXQgaGFuZGxlcyBmaXJtd2FyZSBsb2FkaW5nIGFuZCBtYW5hZ2VzIGNsaWVudAo+ ICsgKiBwb29sIGFuZCBkb29yYmVsbHMuIGludGVsX2d1YyBvd25zIGEgaTkxNV9ndWNfY2xpZW50 IHRvIHJlcGxhY2UgdGhlIGxlZ2FjeQo+ICsgKiBFeGVjTGlzdCBzdWJtaXNzaW9uLgo+ICsgKgo+ ICsgKiBGaXJtd2FyZSB2ZXJzaW9uaW5nOgo+ICsgKiBUaGUgZmlybXdhcmUgYnVpbGQgcHJvY2Vz cyB3aWxsIGdlbmVyYXRlIGEgdmVyc2lvbiBoZWFkZXIgZmlsZSB3aXRoIG1ham9yIGFuZAo+ICsg KiBtaW5vciB2ZXJzaW9uIGRlZmluZWQuIFRoZSB2ZXJzaW9ucyBhcmUgYnVpbHQgaW50byBDU1Mg aGVhZGVyIG9mIGZpcm13YXJlLgo+ICsgKiBpOTE1IGtlcm5lbCBkcml2ZXIgc2V0IHRoZSBtaW5p bWFsIGZpcm13YXJlIHZlcnNpb24gcmVxdWlyZWQgcGVyIHBsYXRmb3JtLgo+ICsgKiBUaGUgZmly bXdhcmUgaW5zdGFsbGF0aW9uIHBhY2thZ2Ugd2lsbCBpbnN0YWxsIChzeW1ib2xpYyBsaW5rKSBw cm9wZXIgdmVyc2lvbgo+ICsgKiBvZiBmaXJtd2FyZS4KPiArICoKPiArICogR3VDIGFkZHJlc3Mg c3BhY2U6Cj4gKyAqIEd1QyBkb2VzIG5vdCBhbGxvdyBhbnkgZ2Z4IEdHVFQgYWRkcmVzcyB0aGF0 IGZhbGxzIGludG8gcmFuZ2UgWzAsIFdPUENNX1RPUCksCj4gKyAqIHdoaWNoIGlzIHJlc2VydmVk IGZvciBCb290IFJPTSwgU1JBTSBhbmQgV09QQ00uIEN1cnJlbnRseSB0aGlzIHRvcCBhZGRyZXNz IGlzCj4gKyAqIDUxMksuIEluIG9yZGVyIHRvIGV4Y2x1ZGUgMC01MTJLIGFkZHJlc3Mgc3BhY2Ug ZnJvbSBHR1RULCBhbGwgZ2Z4IG9iamVjdHMKPiArICogdXNlZCBieSBHdUMgaXMgcGlubmVkIHdp dGggUElOX09GRlNFVF9CSUFTIGFsb25nIHdpdGggc2l6ZSBvZiBXT1BDTS4KPiArICoKPiArICog RmlybXdhcmUgbG9nOgo+ICsgKiBGaXJtd2FyZSBsb2cgaXMgZW5hYmxlZCBieSBzZXR0aW5nIGk5 MTUuZ3VjX2xvZ19sZXZlbCB0byBub24tbmVnYXRpdmUgbGV2ZWwuCj4gKyAqIExvZyBkYXRhIGlz IHByaW50ZWQgb3V0IHZpYSByZWFkaW5nIGRlYnVnZnMgaTkxNV9ndWNfbG9nX2R1bXAuIFJlYWRp bmcgZnJvbQo+ICsgKiBpOTE1X2d1Y19sb2FkX3N0YXR1cyB3aWxsIHByaW50IG91dCBmaXJtd2Fy ZSBsb2FkaW5nIHN0YXR1cyBhbmQgc2NyYXRjaAo+ICsgKiByZWdpc3RlcnMgdmFsdWUuCj4gKyAq Cj4gKyAqLwo+ICsKPiArI2RlZmluZSBJOTE1X1NLTF9HVUNfVUNPREUgImk5MTUvc2tsX2d1Y192 ZXIzLmJpbiIKPiArTU9EVUxFX0ZJUk1XQVJFKEk5MTVfU0tMX0dVQ19VQ09ERSk7Cj4gKwo+ICtz dGF0aWMgdTMyIGdldF9ndHR5cGUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiArewo+ICsJLyog WFhYOiBHVCB0eXBlIGJhc2VkIG9uIFBDSSBkZXZpY2UgSUQ/IGZpZWxkIHNlZW1zIHVudXNlZCBi eSBmdyAqLwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyB1MzIgZ2V0X2NvcmVfZmFt aWx5KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCgpGb3IgbmV3IGNvZGUgd2UgcmVhbGx5IHNob3Vs ZCBiZSBpbiB0aGUgaGFiaXQgb2YgcGFzc2luZyBhcm91bmQgdGhlCnJpZ2h0IHBvaW50ZXIsIG5v dCBkZXYuCgo+ICt7Cj4gKwlzd2l0Y2ggKElOVEVMX0lORk8oZGV2KS0+Z2VuKSB7Cj4gKwljYXNl IDg6Cj4gKwkJcmV0dXJuIEdGWENPUkVfRkFNSUxZX0dFTjg7Cj4gKwljYXNlIDk6Cj4gKwkJcmV0 dXJuIEdGWENPUkVfRkFNSUxZX0dFTjk7Cj4gKwlkZWZhdWx0Ogo+ICsJCURSTV9FUlJPUigiR1VD OiB1bmtub3duIGdlbiBmb3Igc2NoZWR1bGVyIGluaXRcbiIpOwo+ICsJCXJldHVybiBHRlhDT1JF X0ZBTUlMWV9GT1JDRV9VTE9ORzsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQgc2V0X2d1 Y19pbml0X3BhcmFtcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gK3sKPiAr CXN0cnVjdCBpbnRlbF9ndWMgKmd1YyA9ICZkZXZfcHJpdi0+Z3VjOwo+ICsJdTMyIHBhcmFtc1tH VUNfQ1RMX01BWF9EV09SRFNdOwo+ICsJaW50IGk7Cj4gKwo+ICsJbWVtc2V0KCZwYXJhbXMsIDAs IHNpemVvZihwYXJhbXMpKTsKPiArCj4gKwlwYXJhbXNbR1VDX0NUTF9ERVZJQ0VfSU5GT10gfD0K PiArCQkoZ2V0X2d0dHlwZShkZXZfcHJpdi0+ZGV2KSA8PCBHVUNfQ1RMX0dUVFlQRV9TSElGVCkg fAo+ICsJCShnZXRfY29yZV9mYW1pbHkoZGV2X3ByaXYtPmRldikgPDwgR1VDX0NUTF9DT1JFRkFN SUxZX1NISUZUKTsKPiArCj4gKwkvKiBHdUMgQVJBVCBpbmNyZW1lbnQgaXMgMTAgbnMuIEd1QyBk ZWZhdWx0IHNjaGVkdWxlciBxdWFudHVtIGlzIG9uZQo+ICsJICogc2Vjb25kLiBUaGlzIEFSQVIg aXMgY2FsY3VsYXRlZCBieToKPiArCSAqIFNjaGVkdWxlci1RdWFudHVtLWluLW5zIC8gQVJBVC1p bmNyZW1lbnQtaW4tbnMgPSAxMDAwMDAwMDAwIC8gMTAKPiArCSAqLwo+ICsJcGFyYW1zW0dVQ19D VExfQVJBVF9ISUdIXSA9IDA7Cj4gKwlwYXJhbXNbR1VDX0NUTF9BUkFUX0xPV10gPSAxMDAwMDAw MDA7Cj4gKwo+ICsJcGFyYW1zW0dVQ19DVExfV0FdIHw9IEdVQ19DVExfV0FfVUtfQllfRFJJVkVS Owo+ICsKPiArCXBhcmFtc1tHVUNfQ1RMX0ZFQVRVUkVdIHw9IEdVQ19DVExfRElTQUJMRV9TQ0hF RFVMRVIgfAo+ICsJCQlHVUNfQ1RMX1ZDUzJfRU5BQkxFRDsKPiArCj4gKwlpZiAoaTkxNS5ndWNf bG9nX2xldmVsID49IDApIHsKPiArCQlwYXJhbXNbR1VDX0NUTF9MT0dfUEFSQU1TXSA9IGd1Yy0+ bG9nX2ZsYWdzOwo+ICsJCXBhcmFtc1tHVUNfQ1RMX0RFQlVHXSA9Cj4gKwkJCWk5MTUuZ3VjX2xv Z19sZXZlbCA8PCBHVUNfTE9HX1ZFUkJPU0lUWV9TSElGVDsKPiArCX0KPiArCj4gKwlJOTE1X1dS SVRFKFNPRlRfU0NSQVRDSCgwKSwgMCk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IEdVQ19DVExf TUFYX0RXT1JEUzsgaSsrKQo+ICsJCUk5MTVfV1JJVEUoU09GVF9TQ1JBVENIKDEgKyBpKSwgcGFy YW1zW2ldKTsKPiArfQo+ICsKPiArLyogUmVhZCBHdUMgc3RhdHVzIHJlZ2lzdGVyIChHVUNfU1RB VFVTKQo+ICsgKiBSZXR1cm4gdHJ1ZSBpZiBnZXQgYSBzdWNjZXNzIGNvZGUgZnJvbSBub3JtYWwg Ym9vdCBvciBSQzYgYm9vdAo+ICsgKi8KPiArc3RhdGljIGlubGluZSBib29sIGk5MTVfZ3VjX2dl dF9zdGF0dXMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICsJCQkJCXUzMiAq c3RhdHVzKQo+ICt7Cj4gKwkqc3RhdHVzID0gSTkxNV9SRUFEKEdVQ19TVEFUVVMpOwo+ICsJcmV0 dXJuICgoKCpzdGF0dXMpICYgR1NfVUtFUk5FTF9NQVNLKSA9PSBHU19VS0VSTkVMX1JFQURZIHx8 Cj4gKwkJKCgqc3RhdHVzKSAmIEdTX1VLRVJORUxfTUFTSykgPT0gR1NfVUtFUk5FTF9MQVBJQ19E T05FKTsKCldlaXJkIGZ1bmN0aW9uLiBEb2VzIHR3byB0aGluZ3MsIG9ubHkgb25lIG9mIHRob3Nl IGlzIGdldF9zdGF0dXMuIE1heWJlCnlvdSB3b3VsZCBsaWtlIHRvIHNwbGl0IHRoaXMgdXAgYmV0 dGVyIGFuZCB1c2UgYSBzd2l0Y2ggd2hlbiB5b3UgbWVhbiBhCnN3aXRjaC4gT3IgcmVuYW1lIGl0 IHRvIHJlZmxlY3QgaXQncyB1c2Ugb25seSBhcyBhIGNvbmRpdGlvbi4KCj4gK30KPiArCj4gKy8q IFRyYW5zZmVycyB0aGUgZmlybXdhcmUgaW1hZ2UgdG8gUkFNIGZvciBleGVjdXRpb24gYnkgdGhl IG1pY3JvY29udHJvbGxlci4KPiArICoKPiArICogR3VDIEZpcm13YXJlIGxheW91dDoKPiArICog Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAtLS0tCj4gKyAqIHwgICAgICAgICAg Q1NTIGhlYWRlciAgICAgICAgICAgfCAgMTI4Qgo+ICsgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSsgIC0tLS0KPiArICogfCAgICAgICAgICAgICB1Q29kZSAgICAgICAgICAgICB8 Cj4gKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgLS0tLQo+ICsgKiB8ICAg ICAgICAgUlNBIHNpZ25hdHVyZSAgICAgICAgIHwgIDI1NkIKPiArICogKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rICAtLS0tCj4gKyAqIHwgICAgICAgICBSU0EgcHVibGljIEtleSAg ICAgICAgfCAgMjU2Qgo+ICsgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgIC0t LS0KPiArICogfCAgICAgICBQdWJsaWMga2V5IG1vZHVsdXMgICAgICB8ICAgIDRCCj4gKyAqICst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgLS0tLQo+ICsgKgo+ICsgKiBBcmNoaXRl Y3R1cmFsbHksIHRoZSBETUEgZW5naW5lIGlzIGJpZGlyZWN0aW9uYWwsIGFuZCBpbiBjYW4gcG90 ZW50aWFsbHkKPiArICogZXZlbiB0cmFuc2ZlciBiZXR3ZWVuIEdUVCBsb2NhdGlvbnMuIFRoaXMg ZnVuY3Rpb25hbGl0eSBpcyBsZWZ0IG91dCBvZiB0aGUKPiArICogQVBJIGZvciBub3cgYXMgdGhl cmUgaXMgbm8gbmVlZCBmb3IgaXQuCj4gKyAqCj4gKyAqIEJlIG5vdGUgdGhhdCBHdUMgbmVlZCB0 aGUgQ1NTIGhlYWRlciBwbHVzIHVLZXJuZWwgY29kZSB0byBiZSBjb3BpZWQgYXMgb25lCj4gKyAq IGNodW5rIG9mIGRhdGEuIFJTQSBzaWcgZGF0YSBpcyBsb2FkZWQgdmlhIE1NSU8uCj4gKyAqLwo+ ICtzdGF0aWMgaW50IGd1Y191Y29kZV94ZmVyX2RtYShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpCj4gK3sKPiArCXN0cnVjdCBpbnRlbF91Y19mdyAqZ3VjX2Z3ID0gJmRldl9wcml2 LT5ndWMuZ3VjX2Z3Owo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKmZ3X29iaiA9IGd1 Y19mdy0+dWNfZndfb2JqOwo+ICsJdW5zaWduZWQgbG9uZyBvZmZzZXQ7Cj4gKwlzdHJ1Y3Qgc2df dGFibGUgKnNnID0gZndfb2JqLT5wYWdlczsKPiArCXUzMiBzdGF0dXMsIHVjb2RlX3NpemUsIHJz YVtVT1NfUlNBX1NJR19TSVpFIC8gc2l6ZW9mKHUzMildOwo+ICsJaW50IGksIHJldCA9IDA7Cj4g Kwo+ICsJLyogdUNvZGUgc2l6ZSwgYWxzbyBpcyB3aGVyZSBSU0Egc2lnbmF0dXJlIHN0YXJ0cyAq Lwo+ICsJb2Zmc2V0ID0gdWNvZGVfc2l6ZSA9IGd1Y19mdy0+dWNfZndfc2l6ZSAtIFVPU19DU1Nf U0lHTklOR19TSVpFOwo+ICsKPiArCS8qIENvcHkgUlNBIHNpZ25hdHVyZSBmcm9tIHRoZSBmdyBp bWFnZSB0byBIVyBmb3IgdmVyaWZpY2F0aW9uICovCj4gKwlzZ19wY29weV90b19idWZmZXIoc2ct PnNnbCwgc2ctPm5lbnRzLCByc2EsIFVPU19SU0FfU0lHX1NJWkUsIG9mZnNldCk7Cj4gKwlmb3Ig KGkgPSAwOyBpIDwgVU9TX1JTQV9TSUdfU0laRSAvIHNpemVvZih1MzIpOyBpKyspCj4gKwkJSTkx NV9XUklURShVT1NfUlNBX1NDUkFUQ0hfMCArIGkgKiBzaXplb2YodTMyKSwgcnNhW2ldKTsKPiAr Cj4gKwkvKiBTZXQgdGhlIHNvdXJjZSBhZGRyZXNzIGZvciB0aGUgbmV3IGJsb2IgKi8KPiArCW9m ZnNldCA9IGk5MTVfZ2VtX29ial9nZ3R0X29mZnNldChmd19vYmopOwoKV2h5IHdvdWxkIGl0IGV2 ZW4gaGF2ZSBhIEdHVFQgdm1hPyBUaGVyZSdzIG5vIHByZWNvbmRpdGlvbiBoZXJlIHRvCmFzc2Vy dCB0aGF0IGl0IHNob3VsZC4KCj4gKwlJOTE1X1dSSVRFKERNQV9BRERSXzBfTE9XLCBsb3dlcl8z Ml9iaXRzKG9mZnNldCkpOwo+ICsJSTkxNV9XUklURShETUFfQUREUl8wX0hJR0gsIHVwcGVyXzMy X2JpdHMob2Zmc2V0KSAmIDB4RkZGRik7Cj4gKwo+ICsJLyogU2V0IHRoZSBkZXN0aW5hdGlvbi4g Q3VycmVudCB1Q29kZSBleHBlY3RzIGFuIDhrIHN0YWNrIHN0YXJ0aW5nIGZyb20KPiArCSAqIG9m ZnNldCAwLiAqLwo+ICsJSTkxNV9XUklURShETUFfQUREUl8xX0xPVywgMHgyMDAwKTsKPiArCj4g KwkvKiBYWFg6IFRoZSBpbWFnZSBpcyBhdXRvbWF0aWNhbGx5IHRyYW5zZmVyZWQgdG8gU1JBTSBh ZnRlciB0aGUgUlNBCj4gKwkgKiB2ZXJpZmljYXRpb24uIFRoaXMgaXMgd2h5IHRoZSBhZGRyZXNz IHNwYWNlIGlzIGNob3NlbiBhcyBzdWNoLiAqLwo+ICsJSTkxNV9XUklURShETUFfQUREUl8xX0hJ R0gsIERNQV9BRERSRVNTX1NQQUNFX1dPUENNKTsKPiArCj4gKwlJOTE1X1dSSVRFKERNQV9DT1BZ X1NJWkUsIHVjb2RlX3NpemUpOwo+ICsKPiArCS8qIEZpbmFsbHkgc3RhcnQgdGhlIERNQSAqLwo+ ICsJSTkxNV9XUklURShETUFfQ1RSTCwgX01BU0tFRF9CSVRfRU5BQkxFKFVPU19NT1ZFIHwgU1RB UlRfRE1BKSk7Cj4gKwoKSnVzdCBhc3N1bWluZyB0aGF0IHRoZSB3cml0ZXMgbGFuZCBhbmQgaW4g dGhlIG9yZGVyIHlvdSBleHBlY3Q/Cgo+ICsJLyoKPiArCSAqIFNwaW4td2FpdCBmb3IgdGhlIERN QSB0byBjb21wbGV0ZSAmIHRoZSBHdUMgdG8gc3RhcnQgdXAuCj4gKwkgKiBOQjogRG9jcyByZWNv bW1lbmQgbm90IHVzaW5nIHRoZSBpbnRlcnJ1cHQgZm9yIGNvbXBsZXRpb24uCj4gKwkgKiBGSVhN RTogd2hhdCdzIGEgdmFsaWQgdGltZW91dD8KPiArCSAqLwo+ICsJcmV0ID0gd2FpdF9mb3JfYXRv bWljKGk5MTVfZ3VjX2dldF9zdGF0dXMoZGV2X3ByaXYsICZzdGF0dXMpLCAxMCk7CgpGSVhNRSwg ZXJyb3IgaGFuZGxpbmcgaXMgdG9vIGhhcmQuCgo+ICsJRFJNX0RFQlVHX0RSSVZFUigiRE1BIHN0 YXR1cyA9IDB4JXgsIEd1QyBzdGF0dXMgMHgleFxuIiwKPiArCQkJSTkxNV9SRUFEKERNQV9DVFJM KSwgc3RhdHVzKTsKPiArCj4gKwlpZiAoKHN0YXR1cyAmIEdTX0JPT1RST01fTUFTSykgPT0gR1Nf Qk9PVFJPTV9SU0FfRkFJTEVEKSB7Cj4gKwkJRFJNX0VSUk9SKCIlcyBmaXJtd2FyZSBzaWduYXR1 cmUgdmVyaWZpY2F0aW9uIGZhaWxlZFxuIiwKPiArCQkJZ3VjX2Z3LT51Y19uYW1lKTsKPiArCQly ZXQgPSAtRU5PRVhFQzsKPiArCX0KPiArCj4gKwlEUk1fREVCVUdfRFJJVkVSKCJHdUMgZncgbG9h ZCBzdGF0dXMgJXMgJWRcbiIsCj4gKwkJCXJldCA/ICJGQUlMIiA6ICJTVUNDRVNTIiwgcmV0KTsK PiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9CgpJJ20gZ3Vlc3NpbmcgdGhlIG90aGVyIGZ1bmN0aW9u cyBhcmUgYmFzaWNhbGx5IG1vcmUgb2YgdGhlIHNhbWUuLi4KLUNocmlzCgotLSAKQ2hyaXMgV2ls c29uLCBJbnRlbCBPcGVuIFNvdXJjZSBUZWNobm9sb2d5IENlbnRyZQpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0Cklu dGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=