From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Michal Wajdeczko" Subject: Re: [PATCH 04/12] drm/i915/uc: introduce intel_uc_fw_supported Date: Wed, 10 Jul 2019 18:57:02 +0200 Message-ID: References: <20190710005437.3496-1-daniele.ceraolospurio@intel.com> <20190710005437.3496-5-daniele.ceraolospurio@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed"; DelSp="yes" Content-Transfer-Encoding: base64 Return-path: Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by gabe.freedesktop.org (Postfix) with ESMTPS id 89A0A89755 for ; Wed, 10 Jul 2019 16:57:05 +0000 (UTC) In-Reply-To: <20190710005437.3496-5-daniele.ceraolospurio@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org, Daniele Ceraolo Spurio List-Id: intel-gfx@lists.freedesktop.org T24gV2VkLCAxMCBKdWwgMjAxOSAwMjo1NDoyOSArMDIwMCwgRGFuaWVsZSBDZXJhb2xvIFNwdXJp byAgCjxkYW5pZWxlLmNlcmFvbG9zcHVyaW9AaW50ZWwuY29tPiB3cm90ZToKCj4gSW5zdGVhZCBv ZiBhbHdheXMgY2hlY2tpbmcgaW4gdGhlIGRldmljZSBjb25maWcgaXMgR3VDIGFuZCBIdUMgYXJl CgpzL2lzL2lmCgo+IHN1cHBvcnRlZCBvciBub3QsIHdlIGNhbiBzYXZlIHRoZSBzdGF0ZSBpbiB0 aGUgdWNfZncgc3RydWN0dXJlIGFuZAo+IGF2b2lkIGdvaW5nIHRocm91Z2ggaTkxNSBldmVyeSB0 aW1lIGZyb20gdGhlIGxvdy1sZXZlbCB1YyBtYW5hZ2VtZW50Cj4gY29kZS4gd2hpbGUgYXQgaXQg RklSTVdBUkVfTk9ORSBoYXMgYmVlbiByZW5hbWVkIHRvIGJldHRlciBpbmRpY2F0ZSB0aGF0Cgpz L3doaWxlL1doaWxlCgo+IHdlIGhhdmVuJ3Qgc3RhcnRlZCB0aGUgZmV0Y2gvbG9hZCB5ZXQsIGJ1 dCB3ZSBtaWdodCBoYXZlIGFscmVhZHkgc2VsZWN0ZWQKPiBhIGJsb2IuCj4KPiBTaWduZWQtb2Zm LWJ5OiBEYW5pZWxlIENlcmFvbG8gU3B1cmlvIDxkYW5pZWxlLmNlcmFvbG9zcHVyaW9AaW50ZWwu Y29tPgo+IENjOiBNaWNoYWwgV2FqZGVjemtvIDxtaWNoYWwud2FqZGVjemtvQGludGVsLmNvbT4K PiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjX2Z3LmMgfCAgNiArKysrKy0K PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaHVjX2Z3LmMgfCAgNiArKysrKy0KPiAgZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdWMuYyAgICAgfCAyNSArKysrKysrKysrKystLS0tLS0t LS0tLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdWNfZncuYyAgfCAgNCArKystCj4g IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3VjX2Z3LmggIHwgMzAgKysrKysrKysrKysrKysr KysrKysrKysrLS0tLS0KPiAgNSBmaWxlcyBjaGFuZ2VkLCA1MSBpbnNlcnRpb25zKCspLCAyMCBk ZWxldGlvbnMoLSkKPgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9n dWNfZncuYyAgCj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWNfZncuYwo+IGluZGV4 IGRiMWUwZGFjYTdkYi4uZWU5NWQ0OTYwYzVjIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2d1Y19mdy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf Z3VjX2Z3LmMKPiBAQCAtNzksOCArNzksMTIgQEAgc3RhdGljIHZvaWQgZ3VjX2Z3X3NlbGVjdChz dHJ1Y3QgaW50ZWxfdWNfZncgKmd1Y19mdykKPiAJR0VNX0JVR19PTihndWNfZnctPnR5cGUgIT0g SU5URUxfVUNfRldfVFlQRV9HVUMpOwo+IC0JaWYgKCFIQVNfR1VDKGk5MTUpKQo+ICsJaWYgKCFI QVNfR1VDKGk5MTUpKSB7Cj4gKwkJZ3VjX2Z3LT5mZXRjaF9zdGF0dXMgPSBJTlRFTF9VQ19GSVJN V0FSRV9OT1RfU1VQUE9SVEVEOwo+ICAJCXJldHVybjsKPiArCX0KPiArCj4gKwlndWNfZnctPmZl dGNoX3N0YXR1cyA9IElOVEVMX1VDX0ZJUk1XQVJFX05PVF9TVEFSVEVEOwo+IAlpZiAoaTkxNV9t b2RwYXJhbXMuZ3VjX2Zpcm13YXJlX3BhdGgpIHsKPiAgCQlndWNfZnctPnBhdGggPSBpOTE1X21v ZHBhcmFtcy5ndWNfZmlybXdhcmVfcGF0aDsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfaHVjX2Z3LmMgIAo+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaHVj X2Z3LmMKPiBpbmRleCAwNWNiZjgzMzhmNTMuLjA2ZTcyNmJhOTg2MyAxMDA2NDQKPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9odWNfZncuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2h1Y19mdy5jCj4gQEAgLTczLDggKzczLDEyIEBAIHN0YXRpYyB2b2lkIGh1 Y19md19zZWxlY3Qoc3RydWN0IGludGVsX3VjX2Z3ICpodWNfZncpCj4gCUdFTV9CVUdfT04oaHVj X2Z3LT50eXBlICE9IElOVEVMX1VDX0ZXX1RZUEVfSFVDKTsKPiAtCWlmICghSEFTX0hVQyhkZXZf cHJpdikpCj4gKwlpZiAoIUhBU19IVUMoZGV2X3ByaXYpKSB7Cj4gKwkJaHVjX2Z3LT5mZXRjaF9z dGF0dXMgPSBJTlRFTF9VQ19GSVJNV0FSRV9OT1RfU1VQUE9SVEVEOwo+ICAJCXJldHVybjsKPiAr CX0KPiArCj4gKwlodWNfZnctPmZldGNoX3N0YXR1cyA9IElOVEVMX1VDX0ZJUk1XQVJFX05PVF9T VEFSVEVEOwo+IAlpZiAoaTkxNV9tb2RwYXJhbXMuaHVjX2Zpcm13YXJlX3BhdGgpIHsKPiAgCQlo dWNfZnctPnBhdGggPSBpOTE1X21vZHBhcmFtcy5odWNfZmlybXdhcmVfcGF0aDsKPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdWMuYyAgCj4gYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF91Yy5jCj4gaW5kZXggNzg5YjBiY2NmYjQxLi5lZjJhODY0Yjg5OTAgMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdWMuYwo+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX3VjLmMKPiBAQCAtNzEsNyArNzEsOCBAQCBzdGF0aWMgaW50 IF9fZ2V0X2RlZmF1bHRfZ3VjX2xvZ19sZXZlbChzdHJ1Y3QgIAo+IGRybV9pOTE1X3ByaXZhdGUg Kmk5MTUpCj4gIHsKPiAgCWludCBndWNfbG9nX2xldmVsOwo+IC0JaWYgKCFIQVNfR1VDKGk5MTUp IHx8ICFpbnRlbF91Y19pc191c2luZ19ndWMoaTkxNSkpCj4gKwlpZiAoIWludGVsX3VjX2Z3X3N1 cHBvcnRlZCgmaTkxNS0+Z3VjLmZ3KSB8fAoKdGhpcyBnb2VzIHRvbyBmYXIsIHdlIHNob3VsZCBs aW1pdCBudW1iZXIgb2YgZGlyZWN0IGFjY2Vzc2VzIHRvIC5mdwptYXliZSB3ZSBjYW4gaGF2ZToK CglpbmxpbmUgYm9vbCBpbnRlbF91Y19oYXNfZ3VjKGk5MTUpCgl7CgkJcmV0dXJuIGludGVsX2d1 Y19pc19wcmVzZW50KCZpOTE1LT5ndWMpOwoJfQoKCWlubGluZSBib29sIGludGVsX2d1Y19pc19w cmVzZW50KGd1YykKCXsKCQlyZXR1cm4gaW50ZWxfdWNfZndfaXNfZGVmaW5lZCgmZ3VjLT5mdyk7 Cgl9Cgo+ICsJICAgICFpbnRlbF91Y19pc191c2luZ19ndWMoaTkxNSkpCj4gIAkJZ3VjX2xvZ19s ZXZlbCA9IEdVQ19MT0dfTEVWRUxfRElTQUJMRUQ7Cj4gIAllbHNlIGlmIChJU19FTkFCTEVEKENP TkZJR19EUk1fSTkxNV9ERUJVRykgfHwKPiAgCQkgSVNfRU5BQkxFRChDT05GSUdfRFJNX0k5MTVf REVCVUdfR0VNKSkKPiBAQCAtMTE5LDE2ICsxMjAsMTYgQEAgc3RhdGljIHZvaWQgc2FuaXRpemVf b3B0aW9uc19lYXJseShzdHJ1Y3QgIAo+IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4gIAlpZiAo aW50ZWxfdWNfaXNfdXNpbmdfZ3VjKGk5MTUpICYmICFpbnRlbF91Y19md19pc19zZWxlY3RlZChn dWNfZncpKSB7Cj4gIAkJRFJNX1dBUk4oIkluY29tcGF0aWJsZSBvcHRpb24gZGV0ZWN0ZWQ6ICVz PSVkLCAlcyFcbiIsCj4gIAkJCSAiZW5hYmxlX2d1YyIsIGk5MTVfbW9kcGFyYW1zLmVuYWJsZV9n dWMsCj4gLQkJCSAhSEFTX0dVQyhpOTE1KSA/ICJubyBHdUMgaGFyZHdhcmUiIDoKPiAtCQkJCQkg ICJubyBHdUMgZmlybXdhcmUiKTsKPiArCQkJICFpbnRlbF91Y19md19zdXBwb3J0ZWQoZ3VjX2Z3 KSA/Cj4gKwkJCQkibm8gR3VDIGhhcmR3YXJlIiA6ICJubyBHdUMgZmlybXdhcmUiKTsKPiAgCX0K PiAJLyogVmVyaWZ5IEh1QyBmaXJtd2FyZSBhdmFpbGFiaWxpdHkgKi8KPiAgCWlmIChpbnRlbF91 Y19pc191c2luZ19odWMoaTkxNSkgJiYgIWludGVsX3VjX2Z3X2lzX3NlbGVjdGVkKGh1Y19mdykp IHsKPiAgCQlEUk1fV0FSTigiSW5jb21wYXRpYmxlIG9wdGlvbiBkZXRlY3RlZDogJXM9JWQsICVz IVxuIiwKPiAgCQkJICJlbmFibGVfZ3VjIiwgaTkxNV9tb2RwYXJhbXMuZW5hYmxlX2d1YywKPiAt CQkJICFIQVNfSFVDKGk5MTUpID8gIm5vIEh1QyBoYXJkd2FyZSIgOgo+IC0JCQkJCSAgIm5vIEh1 QyBmaXJtd2FyZSIpOwo+ICsJCQkgIWludGVsX3VjX2Z3X3N1cHBvcnRlZChodWNfZncpID8KPiAr CQkJCSJubyBIdUMgaGFyZHdhcmUiIDogIm5vIEh1QyBmaXJtd2FyZSIpOwo+ICAJfQo+IAkvKiBY WFg6IEd1QyBzdWJtaXNzaW9uIGlzIHVuYXZhaWxhYmxlIGZvciBub3cgKi8KPiBAQCAtMTQ4LDgg KzE0OSw4IEBAIHN0YXRpYyB2b2lkIHNhbml0aXplX29wdGlvbnNfZWFybHkoc3RydWN0ICAKPiBk cm1faTkxNV9wcml2YXRlICppOTE1KQo+ICAJaWYgKGk5MTVfbW9kcGFyYW1zLmd1Y19sb2dfbGV2 ZWwgPiAwICYmICFpbnRlbF91Y19pc191c2luZ19ndWMoaTkxNSkpIHsKPiAgCQlEUk1fV0FSTigi SW5jb21wYXRpYmxlIG9wdGlvbiBkZXRlY3RlZDogJXM9JWQsICVzIVxuIiwKPiAgCQkJICJndWNf bG9nX2xldmVsIiwgaTkxNV9tb2RwYXJhbXMuZ3VjX2xvZ19sZXZlbCwKPiAtCQkJICFIQVNfR1VD KGk5MTUpID8gIm5vIEd1QyBoYXJkd2FyZSIgOgo+IC0JCQkJCSAgIkd1QyBub3QgZW5hYmxlZCIp Owo+ICsJCQkgIWludGVsX3VjX2Z3X3N1cHBvcnRlZChndWNfZncpID8KPiArCQkJCSJubyBHdUMg aGFyZHdhcmUiIDogIkd1QyBub3QgZW5hYmxlZCIpOwo+ICAJCWk5MTVfbW9kcGFyYW1zLmd1Y19s b2dfbGV2ZWwgPSAwOwo+ICAJfQo+IEBAIC0zNzYsNyArMzc3LDcgQEAgaW50IGludGVsX3VjX2lu aXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4gIAlpZiAoIVVTRVNfR1VDKGk5MTUp KQo+ICAJCXJldHVybiAwOwo+IC0JaWYgKCFIQVNfR1VDKGk5MTUpKQo+ICsJaWYgKCFpbnRlbF91 Y19md19zdXBwb3J0ZWQoJmd1Yy0+ZncpKQo+ICAJCXJldHVybiAtRU5PREVWOwo+IAkvKiBYWFg6 IEd1QyBzdWJtaXNzaW9uIGlzIHVuYXZhaWxhYmxlIGZvciBub3cgKi8KPiBAQCAtNDE5LDcgKzQy MCw3IEBAIHZvaWQgaW50ZWxfdWNfZmluaShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkK PiAgCWlmICghVVNFU19HVUMoaTkxNSkpCj4gIAkJcmV0dXJuOwo+IC0JR0VNX0JVR19PTighSEFT X0dVQyhpOTE1KSk7Cj4gKwlHRU1fQlVHX09OKCFpbnRlbF91Y19md19zdXBwb3J0ZWQoJmd1Yy0+ ZncpKTsKPiAJaWYgKFVTRVNfR1VDX1NVQk1JU1NJT04oaTkxNSkpCj4gIAkJaW50ZWxfZ3VjX3N1 Ym1pc3Npb25fZmluaShndWMpOwo+IEBAIC00MzUsNyArNDM2LDcgQEAgc3RhdGljIHZvaWQgX191 Y19zYW5pdGl6ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAgCj4gKmk5MTUpCj4gIAlzdHJ1Y3Qg aW50ZWxfZ3VjICpndWMgPSAmaTkxNS0+Z3VjOwo+ICAJc3RydWN0IGludGVsX2h1YyAqaHVjID0g Jmk5MTUtPmh1YzsKPiAtCUdFTV9CVUdfT04oIUhBU19HVUMoaTkxNSkpOwo+ICsJR0VNX0JVR19P TighaW50ZWxfdWNfZndfc3VwcG9ydGVkKCZndWMtPmZ3KSk7Cj4gCWludGVsX2h1Y19zYW5pdGl6 ZShodWMpOwo+ICAJaW50ZWxfZ3VjX3Nhbml0aXplKGd1Yyk7Cj4gQEAgLTQ2MCw3ICs0NjEsNyBA QCBpbnQgaW50ZWxfdWNfaW5pdF9odyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPiAg CWlmICghVVNFU19HVUMoaTkxNSkpCj4gIAkJcmV0dXJuIDA7Cj4gLQlHRU1fQlVHX09OKCFIQVNf R1VDKGk5MTUpKTsKPiArCUdFTV9CVUdfT04oIWludGVsX3VjX2Z3X3N1cHBvcnRlZCgmZ3VjLT5m dykpOwo+IAlndWNfcmVzZXRfaW50ZXJydXB0cyhndWMpOwo+IEBAIC01NTcsNyArNTU4LDcgQEAg dm9pZCBpbnRlbF91Y19maW5pX2h3KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQo+ICAJ aWYgKCFpbnRlbF9ndWNfaXNfbG9hZGVkKGd1YykpCj4gIAkJcmV0dXJuOwo+IC0JR0VNX0JVR19P TighSEFTX0dVQyhpOTE1KSk7Cj4gKwlHRU1fQlVHX09OKCFpbnRlbF91Y19md19zdXBwb3J0ZWQo Jmd1Yy0+ZncpKTsKPiAJaWYgKFVTRVNfR1VDX1NVQk1JU1NJT04oaTkxNSkpCj4gIAkJaW50ZWxf Z3VjX3N1Ym1pc3Npb25fZGlzYWJsZShndWMpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF91Y19mdy5jICAKPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Vj X2Z3LmMKPiBpbmRleCBmMzQyZGRkNDdkZjguLjhjZTcyMTA5MDdjMCAxMDA2NDQKPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91Y19mdy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfdWNfZncuYwo+IEBAIC00Nyw2ICs0Nyw4IEBAIHZvaWQgaW50ZWxfdWNfZndf ZmV0Y2goc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgIAo+ICpkZXZfcHJpdiwKPiAgCXNpemVfdCBz aXplOwo+ICAJaW50IGVycjsKPiArCUdFTV9CVUdfT04oIWludGVsX3VjX2Z3X3N1cHBvcnRlZCh1 Y19mdykpOwo+ICsKPiAgCWlmICghdWNfZnctPnBhdGgpIHsKPiAgCQlkZXZfaW5mbyhkZXZfcHJp di0+ZHJtLmRldiwKPiAgCQkJICIlczogTm8gZmlybXdhcmUgd2FzIGRlZmluZWQgZm9yICVzIVxu IiwKPiBAQCAtMzI4LDcgKzMzMCw3IEBAIHZvaWQgaW50ZWxfdWNfZndfY2xlYW51cF9mZXRjaChz dHJ1Y3QgaW50ZWxfdWNfZncgIAo+ICp1Y19mdykKPiAgCWlmIChvYmopCj4gIAkJaTkxNV9nZW1f b2JqZWN0X3B1dChvYmopOwo+IC0JdWNfZnctPmZldGNoX3N0YXR1cyA9IElOVEVMX1VDX0ZJUk1X QVJFX05PTkU7Cj4gKwl1Y19mdy0+ZmV0Y2hfc3RhdHVzID0gSU5URUxfVUNfRklSTVdBUkVfTk9U X1NUQVJURUQ7Cj4gIH0KPiAvKioKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfdWNfZncuaCAgCj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91Y19mdy5oCj4g aW5kZXggMjRlNjY0NjkxNTNjLi44MzNkMDRkMDY1NzYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfdWNfZncuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX3VjX2Z3LmgKPiBAQCAtMjYsNiArMjYsNyBAQAo+ICAjZGVmaW5lIF9JTlRFTF9VQ19GV19I Xwo+ICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgo+ICsjaW5jbHVkZSAiaTkxNV9nZW0uaCIKPiBz dHJ1Y3QgZHJtX3ByaW50ZXI7Cj4gIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlOwo+IEBAIC0zNCw4 ICszNSwxMCBAQCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZTsKPiAgI2RlZmluZSBJTlRFTF9VQ19G SVJNV0FSRV9VUkwgIAo+ICJodHRwczovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2Vy bmVsL2dpdC9maXJtd2FyZS9saW51eC1maXJtd2FyZS5naXQvdHJlZS9pOTE1Igo+IGVudW0gaW50 ZWxfdWNfZndfc3RhdHVzIHsKPiArCUlOVEVMX1VDX0ZJUk1XQVJFX05PVF9TVVBQT1JURUQgPSAt MiwgLyogbm8gdWMgSFcgKi8KPiAgCUlOVEVMX1VDX0ZJUk1XQVJFX0ZBSUwgPSAtMSwKPiAtCUlO VEVMX1VDX0ZJUk1XQVJFX05PTkUgPSAwLAo+ICsJSU5URUxfVUNfRklSTVdBUkVfVU5JTklUSUFM SVpFRCA9IDAsIC8qIHVzZWQgdG8gY2F0Y2ggY2hlY2tzIGRvbmUgdG9vICAKPiBlYXJseSAqLwo+ ICsJSU5URUxfVUNfRklSTVdBUkVfTk9UX1NUQVJURUQgPSAxLAo+ICAJSU5URUxfVUNfRklSTVdB UkVfUEVORElORywKPiAgCUlOVEVMX1VDX0ZJUk1XQVJFX1NVQ0NFU1MKPiAgfTsKPiBAQCAtNzks MTAgKzgyLDE0IEBAIHN0YXRpYyBpbmxpbmUKPiAgY29uc3QgY2hhciAqaW50ZWxfdWNfZndfc3Rh dHVzX3JlcHIoZW51bSBpbnRlbF91Y19md19zdGF0dXMgc3RhdHVzKQo+ICB7Cj4gIAlzd2l0Y2gg KHN0YXR1cykgewo+ICsJY2FzZSBJTlRFTF9VQ19GSVJNV0FSRV9OT1RfU1VQUE9SVEVEOgoKbWF5 YmUgSU5URUxfVUNfRklSTVdBUkVfTk9UX0FQUExJQ0FCTEUsIGFzIHVzZWQgaW4gc3RyaW5nIGJl bG93PwoKPiArCQlyZXR1cm4gIk4vQSAtIHVjIEhXIG5vdCBhdmFpbGFibGUiOwoKbm90ZSB0aGF0 IG90aGVyIHN0YXRlcyBoYXZlIHNob3J0IHN0cmluZ3MsIHNvIGp1c3QgIk4vQSIgPwoKPiAgCWNh c2UgSU5URUxfVUNfRklSTVdBUkVfRkFJTDoKPiAgCQlyZXR1cm4gIkZBSUwiOwo+IC0JY2FzZSBJ TlRFTF9VQ19GSVJNV0FSRV9OT05FOgo+IC0JCXJldHVybiAiTk9ORSI7Cj4gKwljYXNlIElOVEVM X1VDX0ZJUk1XQVJFX1VOSU5JVElBTElaRUQ6Cj4gKwkJcmV0dXJuICJVTklOSVRJQUxJWkVEIjsK PiArCWNhc2UgSU5URUxfVUNfRklSTVdBUkVfTk9UX1NUQVJURUQ6Cj4gKwkJcmV0dXJuICJOT1Rf U1RBUlRFRCI7CgpOT1RfU1RBUlRFRCBhbmQgUEVORElORyBhcmUgbm90IHRoYXQgbXVjaCBkaWZm ZXJlbnQsCnNlZSBiZWxvdwoKPiAgCWNhc2UgSU5URUxfVUNfRklSTVdBUkVfUEVORElORzoKPiAg CQlyZXR1cm4gIlBFTkRJTkciOwo+ICAJY2FzZSBJTlRFTF9VQ19GSVJNV0FSRV9TVUNDRVNTOgoK bWF5YmUgd2Ugc2hvdWxkIGRyb3Agc3BsaXQgb24gZmV0Y2gvbG9hZCBhbmQgdXNlCnNpbmdsZSBz dGF0dXMsIHNvbWV0aGluZyBsaWtlOgoKICAgICAgVU5JTklUSUFMSVpFRCAtLT4gTi9BIChubyBI VykKICAgICAgICAgICAgfAogICAgICAgICBERUZJTkVEIC0tLS0+IE1JU1NJTkcgKG5vIHZhbGlk IGZ3KQogICAgICAgICAgICB8CiAgICAgIC0+IEZFVENIRUQvVU5MT0FERUQgPC0KICAgICAvICAg ICAgIHwgICAgICAgICAgICAgIFwKICAgICBcICAgICAgTE9BRElORyAgICAgICAgIC8KICAgICAg XCAgICAgIC8gICAgXCAgICAgICAgLwogICAgICAgXC0gUkVBRFkgICBGQUlMRUQgLS8KCgo+IEBA IC0xMDYsOSArMTEzLDE1IEBAIHN0YXRpYyBpbmxpbmUKPiAgdm9pZCBpbnRlbF91Y19md19pbml0 X2Vhcmx5KHN0cnVjdCBpbnRlbF91Y19mdyAqdWNfZncsCj4gIAkJCSAgICBlbnVtIGludGVsX3Vj X2Z3X3R5cGUgdHlwZSkKPiAgewo+ICsJLyoKPiArCSAqIHdlIHVzZSBGSVJNV0FSRV9VTklOSVRJ QUxJWkVEIHRvIGRldGVjdCBjaGVja3MgYWdhaW5zdCBmZXRjaF9zdGF0dXMKPiArCSAqIGJlZm9y ZSB3ZSdyZSBsb29rZWQgYXQgdGhlIEhXIGNhcHMgdG8gc2VlIGlmIHdlIGhhdmUgdWMgc3VwcG9y dAo+ICsJICovCj4gKwlCVUlMRF9CVUdfT04oSU5URUxfVUNfRklSTVdBUkVfVU5JTklUSUFMSVpF RCk7Cj4gKwo+ICAJdWNfZnctPnBhdGggPSBOVUxMOwo+IC0JdWNfZnctPmZldGNoX3N0YXR1cyA9 IElOVEVMX1VDX0ZJUk1XQVJFX05PTkU7Cj4gLQl1Y19mdy0+bG9hZF9zdGF0dXMgPSBJTlRFTF9V Q19GSVJNV0FSRV9OT05FOwo+ICsJdWNfZnctPmZldGNoX3N0YXR1cyA9IElOVEVMX1VDX0ZJUk1X QVJFX1VOSU5JVElBTElaRUQ7Cj4gKwl1Y19mdy0+bG9hZF9zdGF0dXMgPSBJTlRFTF9VQ19GSVJN V0FSRV9OT1RfU1RBUlRFRDsKPiAgCXVjX2Z3LT50eXBlID0gdHlwZTsKPiAgfQo+IEBAIC0xMjIs NiArMTM1LDEzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpbnRlbF91Y19md19pc19sb2FkZWQoc3Ry dWN0ICAKPiBpbnRlbF91Y19mdyAqdWNfZncpCj4gIAlyZXR1cm4gdWNfZnctPmxvYWRfc3RhdHVz ID09IElOVEVMX1VDX0ZJUk1XQVJFX1NVQ0NFU1M7Cj4gIH0KPiArc3RhdGljIGlubGluZSBib29s IGludGVsX3VjX2Z3X3N1cHBvcnRlZChzdHJ1Y3QgaW50ZWxfdWNfZncgKnVjX2Z3KQoKcmV0dXJu aW5nICJzdXBwb3J0ZWQiIGluIGNhc2Ugb2YgIm5vIGJsb2Ivbm8gZGVmcyIgbWlnaHQgYmUgbWlz bGVhZGluZwptYXliZSAiZGVmaW5lZCIgd2lsbCBjbGVhcmVyID8KCj4gK3sKPiArCS8qIHNob3Vs ZG4ndCBjYWxsIHRoaXMgYmVmb3JlIGNoZWNraW5nIGh3L2Jsb2IgYXZhaWxhYmlsaXR5ICovCj4g KwlHRU1fQlVHX09OKHVjX2Z3LT5mZXRjaF9zdGF0dXMgPT0gSU5URUxfVUNfRklSTVdBUkVfVU5J TklUSUFMSVpFRCk7Cj4gKwlyZXR1cm4gdWNfZnctPmZldGNoX3N0YXR1cyAhPSBJTlRFTF9VQ19G SVJNV0FSRV9OT1RfU1VQUE9SVEVEOwo+ICt9Cj4gKwo+ICBzdGF0aWMgaW5saW5lIHZvaWQgaW50 ZWxfdWNfZndfc2FuaXRpemUoc3RydWN0IGludGVsX3VjX2Z3ICp1Y19mdykKPiAgewo+ICAJaWYg KGludGVsX3VjX2Z3X2lzX2xvYWRlZCh1Y19mdykpCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxp c3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2ludGVsLWdmeA==