From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lionel Landwerlin Subject: Re: [PATCH v6 6/7] drm/i915: Expose RPCS (SSEU) configuration to userspace Date: Wed, 23 May 2018 18:12:03 +0100 Message-ID: <67df2a62-ce08-e267-4f96-5eab445cd8f0@intel.com> References: <20180522180002.11522-1-lionel.g.landwerlin@intel.com> <20180522180002.11522-7-lionel.g.landwerlin@intel.com> <6c5a39d5-2f0c-ed38-5485-9390ea7d469c@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by gabe.freedesktop.org (Postfix) with ESMTPS id C37876E530 for ; Wed, 23 May 2018 17:12:05 +0000 (UTC) In-Reply-To: <6c5a39d5-2f0c-ed38-5485-9390ea7d469c@linux.intel.com> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Tvrtko Ursulin , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gMjMvMDUvMTggMTY6MTMsIFR2cnRrbyBVcnN1bGluIHdyb3RlOgo+Cj4gT24gMjIvMDUvMjAx OCAxOTowMCwgTGlvbmVsIExhbmR3ZXJsaW4gd3JvdGU6Cj4+IEZyb206IENocmlzIFdpbHNvbiA8 Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgo+Pgo+PiBXZSB3YW50IHRvIGFsbG93IHVzZXJzcGFj ZSB0byByZWNvbmZpZ3VyZSB0aGUgc3Vic2xpY2UgY29uZmlndXJhdGlvbiBmb3IKPj4gaXRzIG93 biB1c2UgY2FzZS4gVG8gZG8gc28sIHdlIGV4cG9zZSBhIGNvbnRleHQgcGFyYW1ldGVyIHRvIGFs bG93Cj4+IGFkanVzdG1lbnQgb2YgdGhlIFJQQ1MgcmVnaXN0ZXIgc3RvcmVkIHdpdGhpbiB0aGUg Y29udGV4dCBpbWFnZSAoYW5kCj4+IGN1cnJlbnRseSBub3QgYWNjZXNzaWJsZSB2aWEgTFJJKS4g SWYgdGhlIGNvbnRleHQgaXMgYWRqdXN0ZWQgYmVmb3JlCj4+IGZpcnN0IHVzZSwgdGhlIGFkanVz dG1lbnQgaXMgZm9yICJmcmVlIjsgb3RoZXJ3aXNlIGlmIHRoZSBjb250ZXh0IGlzCj4+IGFjdGl2 ZSB3ZSBmbHVzaCB0aGUgY29udGV4dCBvZmYgdGhlIEdQVSAoc3RhbGxpbmcgYWxsIHVzZXJzKSBh bmQgZm9yY2luZwo+PiB0aGUgR1BVIHRvIHNhdmUgdGhlIGNvbnRleHQgdG8gbWVtb3J5IHdoZXJl IHdlIGNhbiBtb2RpZnkgaXQgYW5kIHNvCj4+IGVuc3VyZSB0aGF0IHRoZSByZWdpc3RlciBpcyBy ZWxvYWRlZCBvbiBuZXh0IGV4ZWN1dGlvbi4KPj4KPj4gVGhlIG92ZXJoZWFkIG9mIG1hbmFnaW5n IGFkZGl0aW9uYWwgRVUgc3Vic2xpY2VzIGNhbiBiZSBzaWduaWZpY2FudCwKPj4gZXNwZWNpYWxs eSBpbiBtdWx0aS1jb250ZXh0IHdvcmtsb2Fkcy4gTm9uLUdQR1BVIGNvbnRleHRzIHNob3VsZAo+ PiBwcmVmZXJhYmx5IGRpc2FibGUgdGhlIHN1YnNsaWNlcyBpdCBpcyBub3QgdXNpbmcsIGFuZCBv dGhlcnMgc2hvdWxkCj4+IGZpbmUtdHVuZSB0aGUgbnVtYmVyIHRvIG1hdGNoIHRoZWlyIHdvcmts b2FkLgo+Pgo+PiBXZSBleHBvc2UgY29tcGxldGUgY29udHJvbCBvdmVyIHRoZSBSUENTIHJlZ2lz dGVyLCBhbGxvd2luZwo+PiBjb25maWd1cmF0aW9uIG9mIHNsaWNlL3N1YnNsaWNlLCB2aWEgbWFz a3MgcGFja2VkIGludG8gYSB1NjQgZm9yCj4+IHNpbXBsaWNpdHkuIEZvciBleGFtcGxlLAo+Pgo+ PiDCoMKgwqDCoHN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbSBhcmc7Cj4+IMKgwqDC oMKgc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFtX3NzZXUgc3NldSA9IHsgLmNsYXNz ID0gMCwKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC5p bnN0YW5jZSA9IDAsIH07Cj4+Cj4+IMKgwqDCoMKgbWVtc2V0KCZhcmcsIDAsIHNpemVvZihhcmcp KTsKPj4gwqDCoMKgwqBhcmcuY3R4X2lkID0gY3R4Owo+PiDCoMKgwqDCoGFyZy5wYXJhbSA9IEk5 MTVfQ09OVEVYVF9QQVJBTV9TU0VVOwo+PiDCoMKgwqDCoGFyZy52YWx1ZSA9ICh1aW50cHRyX3Qp ICZzc2V1Owo+PiDCoMKgwqDCoGlmIChkcm1Jb2N0bChmZCwgRFJNX0lPQ1RMX0k5MTVfR0VNX0NP TlRFWFRfR0VUUEFSQU0sICZhcmcpID09IDApIHsKPj4gwqDCoMKgwqDCoMKgwqAgc3NldS5wYWNr ZWQuc3Vic2xpY2VfbWFzayA9IDA7Cj4+Cj4+IMKgwqDCoMKgwqDCoMKgIGRybUlvY3RsKGZkLCBE Uk1fSU9DVExfSTkxNV9HRU1fQ09OVEVYVF9TRVRQQVJBTSwgJmFyZyk7Cj4+IMKgwqDCoMKgfQo+ Pgo+PiBjb3VsZCBiZSB1c2VkIHRvIGRpc2FibGUgYWxsIHN1YnNsaWNlcyB3aGVyZSBzdXBwb3J0 ZWQuCj4+Cj4+IHYyOiBGaXggb2Zmc2V0IG9mIENUWF9SX1BXUl9DTEtfU1RBVEUgaW4gaW50ZWxf bHJfY29udGV4dF9zZXRfc3NldSgpIAo+PiAoTGlvbmVsKQo+Pgo+PiB2MzogQWRkIGFiaWxpdHkg dG8gcHJvZ3JhbSB0aGlzIHBlciBlbmdpbmUgKENocmlzKQo+Pgo+PiB2NDogTW92ZSBtb3N0IGdl dF9zc2V1KCkgaW50byBpOTE1X2dlbV9jb250ZXh0LmMgKExpb25lbCkKPj4KPj4gdjU6IFZhbGlk YXRlIHNzZXUgY29uZmlndXJhdGlvbiBhZ2FpbnN0IHRoZSBkZXZpY2UncyBjYXBhYmlsaXRpZXMg Cj4+IChMaW9uZWwpCj4+Cj4+IHY2OiBDaGFuZ2UgY29udGV4dCBwb3dlcmdhdGluZyBzZXR0aW5n cyB0aHJvdWdoIE1JX1NETSBvbiBrZXJuZWwgCj4+IGNvbnRleHQgKENocmlzKQo+Pgo+PiB2Nzog U3luY2hyb25pemUgdGhlIHJlcXVlc3RzIGZvbGxvd2luZyBhIHBvd2VyZ2F0aW5nIHNldHRpbmcg Y2hhbmdlIAo+PiB1c2luZyBhIGdsb2JhbAo+PiDCoMKgwqDCoCBkZXBlbmRlbmN5IChDaHJpcykK Pj4gwqDCoMKgwqAgSXRlcmF0ZSB0aW1lbGluZXMgdGhyb3VnaCBkZXZfcHJpdi5ndC5hY3RpdmVf cmluZ3MgKFR2cnRrbykKPj4gwqDCoMKgwqAgRGlzYWJsZSBSUENTIGNvbmZpZ3VyYXRpb24gc2V0 dGluZyBmb3Igbm9uIGNhcGFibGUgdXNlcnMgCj4+IChMaW9uZWwvVHZydGtvKQo+Pgo+PiBCdWd6 aWxsYTogaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwODk5 Cj4+IFNpZ25lZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVr Pgo+PiBTaWduZWQtb2ZmLWJ5OiBMaW9uZWwgTGFuZHdlcmxpbiA8bGlvbmVsLmcubGFuZHdlcmxp bkBpbnRlbC5jb20+Cj4+IGM6IERtaXRyeSBSb2dvemhraW4gPGRtaXRyeS52LnJvZ296aGtpbkBp bnRlbC5jb20+Cj4+IENDOiBUdnJ0a28gVXJzdWxpbiA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29t Pgo+PiBDQzogWmhpcGVuZyBHb25nIDx6aGlwZW5nLmdvbmdAaW50ZWwuY29tPgo+PiBDQzogSm9v bmFzIExhaHRpbmVuIDxqb29uYXMubGFodGluZW5AbGludXguaW50ZWwuY29tPgo+PiAtLS0KPj4g wqAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaMKgwqDCoMKgwqDCoMKgwqAgfMKgIDEz ICsrCj4+IMKgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmPCoMKgwqDCoMKgwqDCoMKg IHzCoMKgIDIgKwo+PiDCoCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jb250ZXh0LmMg fCAxNjcgKysrKysrKysrKysrKysrKysrKysrKysrCj4+IMKgIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfcmVxdWVzdC5jwqDCoMKgwqAgfMKgIDIwICsrKwo+PiDCoCBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9scmMuY8KgwqDCoMKgwqDCoMKgIHwgMTAzICsrKysrKysrKystLS0tLQo+PiDC oCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMgfMKgwqAgMiArCj4+IMKg IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaCB8wqDCoCA0ICsKPj4gwqAg aW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5owqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoCAz OCArKysrKysKPj4gwqAgOCBmaWxlcyBjaGFuZ2VkLCAzMTQgaW5zZXJ0aW9ucygrKSwgMzUgZGVs ZXRpb25zKC0pCj4+Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Ry di5oIAo+PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPj4gaW5kZXggMjE2MzFi NTFiMzdiLi4wOWNmY2ZlMWMzMzkgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZHJ2LmgKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+PiBA QCAtMjA2Nyw2ICsyMDY3LDEyIEBAIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIHsKPj4gwqDCoMKg wqDCoMKgwqDCoMKgIHUzMiBhY3RpdmVfcmVxdWVzdHM7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCB1 MzIgcmVxdWVzdF9zZXJpYWw7Cj4+IMKgICvCoMKgwqDCoMKgwqDCoCAvKioKPj4gK8KgwqDCoMKg wqDCoMKgwqAgKiBHbG9iYWwgYmFycmllciB0byBlbnN1cmluZyBvcmRlcmluZyBvZiBzc2V1IHRy YW5zaXRpb25zCj4+ICvCoMKgwqDCoMKgwqDCoMKgICogcmVxdWVzdHMuCj4+ICvCoMKgwqDCoMKg wqDCoMKgICovCj4+ICvCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgaTkxNV9nZW1fYWN0aXZlIGdsb2Jh bF9iYXJyaWVyOwo+PiArCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCAvKioKPj4gwqDCoMKgwqDCoMKg wqDCoMKgwqAgKiBJcyB0aGUgR1BVIGN1cnJlbnRseSBjb25zaWRlcmVkIGlkbGUsIG9yIGJ1c3kg ZXhlY3V0aW5nCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgICogdXNlcnNwYWNlIHJlcXVlc3RzPyBX aGlsc3QgaWRsZSwgd2UgYWxsb3cgcnVudGltZSBwb3dlcgo+PiBAQCAtMzIyNyw2ICszMjMzLDEz IEBAIGk5MTVfdm1fdG9fcHBndHQoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0pCj4+IMKg wqDCoMKgwqAgcmV0dXJuIGNvbnRhaW5lcl9vZih2bSwgc3RydWN0IGk5MTVfaHdfcHBndHQsIGJh c2UpOwo+PiDCoCB9Cj4+IMKgICtzdGF0aWMgaW5saW5lIHZvaWQgaTkxNV9nZW1fc2V0X2dsb2Jh bF9iYXJyaWVyKHN0cnVjdCAKPj4gZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGk5MTVf cmVxdWVzdCAqcnEpCj4+ICt7Cj4+ICvCoMKgwqAgbG9ja2RlcF9hc3NlcnRfaGVsZCgmaTkxNS0+ ZHJtLnN0cnVjdF9tdXRleCk7Cj4+ICvCoMKgwqAgaTkxNV9nZW1fYWN0aXZlX3NldCgmaTkxNS0+ Z3QuZ2xvYmFsX2JhcnJpZXIsIHJxKTsKPj4gK30KPj4gKwo+PiDCoCAvKiBpOTE1X2dlbV9mZW5j ZV9yZWcuYyAqLwo+PiDCoCBzdHJ1Y3QgZHJtX2k5MTVfZmVuY2VfcmVnICoKPj4gwqAgaTkxNV9y ZXNlcnZlX2ZlbmNlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jIAo+PiBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZ2VtLmMKPj4gaW5kZXggMDM4NzRiNTBhZGE5Li45YzJhMGQwNGJkMzkg MTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKPj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwo+PiBAQCAtNTU0OCw2ICs1NTQ4LDggQEAg aW50IGk5MTVfZ2VtX2luaXRfZWFybHkoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgCj4+ICpkZXZf cHJpdikKPj4gwqDCoMKgwqDCoCBpZiAoIWRldl9wcml2LT5wcmlvcml0aWVzKQo+PiDCoMKgwqDC oMKgwqDCoMKgwqAgZ290byBlcnJfZGVwZW5kZW5jaWVzOwo+PiDCoCArwqDCoMKgIGluaXRfcmVx dWVzdF9hY3RpdmUoJmRldl9wcml2LT5ndC5nbG9iYWxfYmFycmllciwgTlVMTCk7Cj4+ICsKPj4g wqDCoMKgwqDCoCBJTklUX0xJU1RfSEVBRCgmZGV2X3ByaXYtPmd0LnRpbWVsaW5lcyk7Cj4+IMKg wqDCoMKgwqAgSU5JVF9MSVNUX0hFQUQoJmRldl9wcml2LT5ndC5hY3RpdmVfcmluZ3MpOwo+PiDC oMKgwqDCoMKgIElOSVRfTElTVF9IRUFEKCZkZXZfcHJpdi0+Z3QuY2xvc2VkX3ZtYSk7Cj4+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jb250ZXh0LmMgCj4+IGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jCj4+IGluZGV4IGVhOWFlMTA0 NjgyNy4uNWM1YTEyZjFjMjY1IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2dlbV9jb250ZXh0LmMKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1f Y29udGV4dC5jCj4+IEBAIC03MzAsNiArNzMwLDEwMyBAQCBpbnQgaTkxNV9nZW1fY29udGV4dF9k ZXN0cm95X2lvY3RsKHN0cnVjdCAKPj4gZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+PiDC oMKgwqDCoMKgIHJldHVybiAwOwo+PiDCoCB9Cj4+IMKgICtzdGF0aWMgaW50Cj4+ICtpbnRlbF9z c2V1X2Zyb21fdXNlcl9zc2V1KGNvbnN0IHN0cnVjdCBzc2V1X2Rldl9pbmZvICpzc2V1LAo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9jb250 ZXh0X3BhcmFtX3NzZXUgKnVzZXJfc3NldSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHVuaW9uIGludGVsX3NzZXUgKmN0eF9zc2V1KQo+PiArewo+PiArwqDCoMKgIGlmICgodXNlcl9z c2V1LT5zbGljZV9tYXNrICYgfnNzZXUtPnNsaWNlX21hc2spICE9IDAgfHwKPj4gK8KgwqDCoMKg wqDCoMKgIHVzZXJfc3NldS0+c2xpY2VfbWFzayA9PSAwKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0 dXJuIC1FSU5WQUw7Cj4+ICsKPj4gK8KgwqDCoCBpZiAoKHVzZXJfc3NldS0+c3Vic2xpY2VfbWFz ayAmIH5zc2V1LT5zdWJzbGljZV9tYXNrWzBdKSAhPSAwIHx8Cj4+ICvCoMKgwqDCoMKgwqDCoCB1 c2VyX3NzZXUtPnN1YnNsaWNlX21hc2sgPT0gMCkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAt RUlOVkFMOwo+PiArCj4+ICvCoMKgwqAgaWYgKHVzZXJfc3NldS0+bWluX2V1c19wZXJfc3Vic2xp Y2UgPiBzc2V1LT5tYXhfZXVzX3Blcl9zdWJzbGljZSkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVy biAtRUlOVkFMOwo+PiArCj4+ICvCoMKgwqAgaWYgKHVzZXJfc3NldS0+bWF4X2V1c19wZXJfc3Vi c2xpY2UgPiBzc2V1LT5tYXhfZXVzX3Blcl9zdWJzbGljZSB8fAo+PiArwqDCoMKgwqDCoMKgwqAg dXNlcl9zc2V1LT5tYXhfZXVzX3Blcl9zdWJzbGljZSA8IAo+PiB1c2VyX3NzZXUtPm1pbl9ldXNf cGVyX3N1YnNsaWNlIHx8Cj4+ICvCoMKgwqDCoMKgwqDCoCB1c2VyX3NzZXUtPm1heF9ldXNfcGVy X3N1YnNsaWNlID09IDApCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPj4gKwo+ PiArwqDCoMKgIGN0eF9zc2V1LT5zbGljZV9tYXNrID0gdXNlcl9zc2V1LT5zbGljZV9tYXNrOwo+ PiArwqDCoMKgIGN0eF9zc2V1LT5zdWJzbGljZV9tYXNrID0gdXNlcl9zc2V1LT5zdWJzbGljZV9t YXNrOwo+PiArwqDCoMKgIGN0eF9zc2V1LT5taW5fZXVzX3Blcl9zdWJzbGljZSA9IHVzZXJfc3Nl dS0+bWluX2V1c19wZXJfc3Vic2xpY2U7Cj4+ICvCoMKgwqAgY3R4X3NzZXUtPm1heF9ldXNfcGVy X3N1YnNsaWNlID0gdXNlcl9zc2V1LT5tYXhfZXVzX3Blcl9zdWJzbGljZTsKPj4gKwo+PiArwqDC oMKgIHJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50Cj4+ICtpOTE1X2dlbV9jb250 ZXh0X3JlY29uZmlndXJlX3NzZXUoc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAq ZW5naW5lLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1bmlvbiBpbnRl bF9zc2V1IHNzZXUpCj4+ICt7Cj4+ICvCoMKgwqAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0gY3R4LT5pOTE1Owo+PiArwqDCoMKgIHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxOwo+ PiArwqDCoMKgIHN0cnVjdCBpbnRlbF9yaW5nICpyaW5nOwo+PiArwqDCoMKgIGVudW0gaW50ZWxf ZW5naW5lX2lkIGlkOwo+PiArwqDCoMKgIGludCByZXQ7Cj4+ICsKPj4gK8KgwqDCoCAvKgo+PiAr wqDCoMKgwqAgKiBGaXJzdCBub3RpZnkgdXNlciB3aGVuIHRoaXMgY2FwYWJpbGl0eSBpcyBub3Qg YXZhaWxhYmxlIHNvIAo+PiB0aGF0IGl0Cj4+ICvCoMKgwqDCoCAqIGNhbiBiZSBkZXRlY3RlZCB3 aXRoIGFueSB2YWxpZCBpbnB1dC4KPj4gK8KgwqDCoMKgICovCj4+ICvCoMKgwqAgaWYgKCFlbmdp bmUtPmVtaXRfcnBjc19jb25maWcpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVOT0RFVjsK Pj4gKwo+PiArwqDCoMKgIGlmIChtZW1jbXAoJnRvX2ludGVsX2NvbnRleHQoY3R4LCBlbmdpbmUp LT5zc2V1LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgJnNzZXUsIHNpemVvZihzc2V1KSkgPT0g MCkgewo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIDA7Cj4KPiBCdXQgdW5pb24gaXMgc3RpbGwg dGhlcmUgc28gSSBkb24ndCBrbm93LgoKTW92aW5nIHRvIHN0cnVjdC4KCj4KPj4gK8KgwqDCoCB9 Cj4+ICsKPj4gK8KgwqDCoCBsb2NrZGVwX2Fzc2VydF9oZWxkKCZkZXZfcHJpdi0+ZHJtLnN0cnVj dF9tdXRleCk7Cj4KPiBCZXN0IHRvIG1vdmUgYWJvdmUgcmV0dXJuIC1FTk9ERVYgbGluZS4KCkRv bmUuCgo+Cj4+ICsKPj4gK8KgwqDCoCBpOTE1X3JldGlyZV9yZXF1ZXN0cyhkZXZfcHJpdik7Cj4+ ICsKPj4gK8KgwqDCoCAvKiBOb3cgdXNlIHRoZSBSQ1MgdG8gYWN0dWFsbHkgcmVjb25maWd1cmUu ICovCj4+ICvCoMKgwqAgZW5naW5lID0gZGV2X3ByaXYtPmVuZ2luZVtSQ1NdOwo+PiArCj4+ICvC oMKgwqAgcnEgPSBpOTE1X3JlcXVlc3RfYWxsb2MoZW5naW5lLCBkZXZfcHJpdi0+a2VybmVsX2Nv bnRleHQpOwo+PiArwqDCoMKgIGlmIChJU19FUlIocnEpKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0 dXJuIFBUUl9FUlIocnEpOwo+PiArCj4+ICvCoMKgwqAgcmV0ID0gZW5naW5lLT5lbWl0X3JwY3Nf Y29uZmlnKHJxLCBjdHgsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBpbnRlbF9lbmdpbmVfcHJlcGFyZV9zc2V1KGVuZ2luZSwgc3NldSkpOwo+PiArwqDC oMKgIGlmIChyZXQpIHsKPj4gK8KgwqDCoMKgwqDCoMKgIF9faTkxNV9yZXF1ZXN0X2FkZChycSwg dHJ1ZSk7Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+PiArwqDCoMKgIH0KPj4gKwo+ PiArwqDCoMKgIC8qIFF1ZXVlIHRoaXMgc3dpdGNoIGFmdGVyIGFsbCBvdGhlciBhY3Rpdml0eSAq Lwo+PiArwqDCoMKgIGxpc3RfZm9yX2VhY2hfZW50cnkocmluZywgJmRldl9wcml2LT5ndC5hY3Rp dmVfcmluZ3MsIAo+PiBhY3RpdmVfbGluaykgewo+PiArwqDCoMKgwqDCoMKgwqAgc3RydWN0IGk5 MTVfcmVxdWVzdCAqcHJldjsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgcHJldiA9IGxhc3RfcmVx dWVzdF9vbl9lbmdpbmUocmluZy0+dGltZWxpbmUsIGVuZ2luZSk7Cj4+ICvCoMKgwqDCoMKgwqDC oCBpZiAocHJldikKPj4gKyBpOTE1X3N3X2ZlbmNlX2F3YWl0X3N3X2ZlbmNlX2dmcCgmcnEtPnN1 Ym1pdCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgICZwcmV2LT5zdWJtaXQsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBJOTE1X0ZFTkNFX0dGUCk7Cj4+ICvCoMKgwqAg fQo+PiArCj4+ICvCoMKgwqAgaTkxNV9nZW1fc2V0X2dsb2JhbF9iYXJyaWVyKGRldl9wcml2LCBy cSk7Cj4+ICvCoMKgwqAgX19pOTE1X3JlcXVlc3RfYWRkKHJxLCB0cnVlKTsKPj4gKwo+PiArwqDC oMKgIC8qCj4+ICvCoMKgwqDCoCAqIEFwcGx5IHRoZSBjb25maWd1cmF0aW9uIHRvIGFsbCBlbmdp bmUuIE91ciBoYXJkd2FyZSBkb2Vzbid0Cj4+ICvCoMKgwqDCoCAqIGN1cnJlbnRseSBzdXBwb3J0 IGRpZmZlcmVudCBjb25maWd1cmF0aW9ucyBmb3IgZWFjaCBlbmdpbmUuCj4+ICvCoMKgwqDCoCAq Lwo+PiArwqDCoMKgIGZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGRldl9wcml2LCBpZCkgewo+PiAr wqDCoMKgwqDCoMKgwqAgc3RydWN0IGludGVsX2NvbnRleHQgKmNlID0gdG9faW50ZWxfY29udGV4 dChjdHgsIGVuZ2luZSk7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIGNlLT5zc2V1LnZhbHVlID0g c3NldS52YWx1ZTsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCByZXR1cm4gMDsKPj4gK30K Pj4gKwo+PiDCoCBpbnQgaTkxNV9nZW1fY29udGV4dF9nZXRwYXJhbV9pb2N0bChzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LCB2b2lkIAo+PiAqZGF0YSwKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKPj4gwqAgewo+PiBAQCAt NzY3LDYgKzg2NCwzNyBAQCBpbnQgaTkxNV9nZW1fY29udGV4dF9nZXRwYXJhbV9pb2N0bChzdHJ1 Y3QgCj4+IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPj4gwqDCoMKgwqDCoCBjYXNlIEk5 MTVfQ09OVEVYVF9QQVJBTV9QUklPUklUWToKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGFyZ3MtPnZh bHVlID0gY3R4LT5zY2hlZC5wcmlvcml0eTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+ PiArwqDCoMKgIGNhc2UgSTkxNV9DT05URVhUX1BBUkFNX1NTRVU6IHsKPj4gK8KgwqDCoMKgwqDC oMKgIHN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbV9zc2V1IHBhcmFtX3NzZXU7Cj4+ ICvCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7Cj4+ICvCoMKg wqDCoMKgwqDCoCBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2U7Cj4+ICsKPj4gK8KgwqDCoMKgwqDC oMKgIGlmIChjb3B5X2Zyb21fdXNlcigmcGFyYW1fc3NldSwgdTY0X3RvX3VzZXJfcHRyKGFyZ3Mt PnZhbHVlKSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzaXplb2Yo cGFyYW1fc3NldSkpKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldCA9IC1FRkFVTFQ7 Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+PiArwqDCoMKgwqDCoMKgwqAgfQo+ PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBlbmdpbmUgPSBpbnRlbF9lbmdpbmVfbG9va3VwX3VzZXIo dG9faTkxNShkZXYpLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgcGFyYW1fc3NldS5jbGFzcywKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBhcmFtX3NzZXUuaW5zdGFuY2UpOwo+PiArwqDC oMKgwqDCoMKgwqAgaWYgKCFlbmdpbmUpIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0 ID0gLUVJTlZBTDsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+ICvCoMKgwqDC oMKgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIGNlID0gdG9faW50ZWxfY29udGV4dChj dHgsIGVuZ2luZSk7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIHBhcmFtX3NzZXUuc2xpY2VfbWFz ayA9IGNlLT5zc2V1LnNsaWNlX21hc2s7Cj4+ICvCoMKgwqDCoMKgwqDCoCBwYXJhbV9zc2V1LnN1 YnNsaWNlX21hc2sgPSBjZS0+c3NldS5zdWJzbGljZV9tYXNrOwo+PiArwqDCoMKgwqDCoMKgwqAg cGFyYW1fc3NldS5taW5fZXVzX3Blcl9zdWJzbGljZSA9IAo+PiBjZS0+c3NldS5taW5fZXVzX3Bl cl9zdWJzbGljZTsKPj4gK8KgwqDCoMKgwqDCoMKgIHBhcmFtX3NzZXUubWF4X2V1c19wZXJfc3Vi c2xpY2UgPSAKPj4gY2UtPnNzZXUubWF4X2V1c19wZXJfc3Vic2xpY2U7Cj4+ICsKPj4gK8KgwqDC oMKgwqDCoMKgIGlmIChjb3B5X3RvX3VzZXIodTY0X3RvX3VzZXJfcHRyKGFyZ3MtPnZhbHVlKSwg JnBhcmFtX3NzZXUsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzaXplb2Yo cGFyYW1fc3NldSkpKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXQgPSAtRUZBVUxUOwo+ PiArwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4KPiBTaG91bGQgd2UgdGhpbmsgYWJvdXQgbWF5YmUg bm90IGltcGxlbWVudGluZyB0aGUgZ2V0dGVyPyBJIG1lYW4sIGlzIGl0IAo+IHVzZWZ1bCBvciBq dXN0IGNvZGUgZm9yIHRoZSBkcml2ZXIgd2hpY2ggY291bGQgYmUgZHJvcHBlZD8KCldlbGwsIHJl bmRlciBmZCBjYW4gYmUgdHJhbnNmZXIgYmV0d2VlbiBwcm9jZXNzZXMsIHNvIEkgdGhpbmsgaXQg bWFrZXMgCnNlbnNlIHRvIGhhdmUgYSB3YXkgdG8gdGVsbCB3aGF0IGlzIHRoZSBjdXJyZW50IGNv bmZpZ3VyYXRpb24uCgo+Cj4+ICvCoMKgwqAgfQo+PiDCoMKgwqDCoMKgIGRlZmF1bHQ6Cj4+IMKg wqDCoMKgwqDCoMKgwqDCoCByZXQgPSAtRUlOVkFMOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgYnJl YWs7Cj4+IEBAIC04NDEsNyArOTY5LDQ2IEBAIGludCBpOTE1X2dlbV9jb250ZXh0X3NldHBhcmFt X2lvY3RsKHN0cnVjdCAKPj4gZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+PiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGN0eC0+c2NoZWQucHJpb3JpdHkgPSBwcmlvcml0 eTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+ PiArwqDCoMKgIGNhc2UgSTkxNV9DT05URVhUX1BBUkFNX1NTRVU6Cj4+ICvCoMKgwqDCoMKgwqDC oCB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0 IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFtX3NzZXUgdXNlcl9zc2V1Owo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7Cj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHVuaW9uIGludGVsX3NzZXUgY3R4X3NzZXU7Cj4+IMKgICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGlmIChhcmdzLT5zaXplKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgcmV0ID0gLUVJTlZBTDsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBicmVhazsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkgewo+Cj4gSG0gbm90 IHN1cmUsIHdpbGwgY29tZSBiYWNrIHRvIGl0IGluIHRoZSBuZXh0IHBhdGNoLgo+Cj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0ID0gLUVQRVJNOwo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+ ICsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKGNvcHlfZnJvbV91c2VyKCZ1c2VyX3Nz ZXUsIAo+PiB1NjRfdG9fdXNlcl9wdHIoYXJncy0+dmFsdWUpLAo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZW9mKHVzZXJfc3NldSkpKSB7Cj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0ID0gLUVGQVVMVDsKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg fQo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVuZ2luZSA9IGludGVsX2VuZ2luZV9s b29rdXBfdXNlcihkZXZfcHJpdiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdXNlcl9zc2V1LmNsYXNzLAo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1c2VyX3Nz ZXUuaW5zdGFuY2UpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoIWVuZ2luZSkgewo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldCA9IC1FSU5WQUw7Cj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIH0KPj4gKwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXQgPSAKPj4gaW50ZWxfc3Nl dV9mcm9tX3VzZXJfc3NldSgmSU5URUxfSU5GTyhkZXZfcHJpdiktPnNzZXUsCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJnVzZXJfc3Nl dSwgJmN0eF9zc2V1KTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHJldCkKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4gKwo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCByZXQgPSBpOTE1X2dlbV9jb250ZXh0X3JlY29uZmlndXJlX3NzZXUoY3R4LCBl bmdpbmUsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBjdHhfc3NldSk7Cj4+ICvCoMKgwqDCoMKgwqDCoCB9Cj4+ICvCoMKg wqDCoMKgwqDCoCBicmVhazsKPj4gwqDCoMKgwqDCoCBkZWZhdWx0Ogo+PiDCoMKgwqDCoMKgwqDC oMKgwqAgcmV0ID0gLUVJTlZBTDsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+PiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZXF1ZXN0LmMgCj4+IGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9yZXF1ZXN0LmMKPj4gaW5kZXggZmM0OTliY2JkMTA1Li45ZjBi OTY1MTI1YzQgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVxdWVz dC5jCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVxdWVzdC5jCj4+IEBAIC02 NDMsNiArNjQzLDIyIEBAIHN1Ym1pdF9ub3RpZnkoc3RydWN0IGk5MTVfc3dfZmVuY2UgKmZlbmNl LCBlbnVtIAo+PiBpOTE1X3N3X2ZlbmNlX25vdGlmeSBzdGF0ZSkKPj4gwqDCoMKgwqDCoCByZXR1 cm4gTk9USUZZX0RPTkU7Cj4+IMKgIH0KPj4gwqAgK3N0YXRpYyBpbnQKPj4gK2k5MTVfcmVxdWVz dF9hd2FpdF9yZXF1ZXN0KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnRvLCBzdHJ1Y3QgCj4+IGk5MTVf cmVxdWVzdCAqZnJvbSk7Cj4+ICsKPj4gK3N0YXRpYyBpbnQgYWRkX2dsb2JhbF9iYXJyaWVyKHN0 cnVjdCBpOTE1X3JlcXVlc3QgKnJxKQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCBpOTE1X3JlcXVl c3QgKmJhcnJpZXI7Cj4+ICvCoMKgwqAgaW50IHJldCA9IDA7Cj4+ICsKPj4gK8KgwqDCoCBiYXJy aWVyID0gaTkxNV9nZW1fYWN0aXZlX3JhdygmcnEtPmk5MTUtPmd0Lmdsb2JhbF9iYXJyaWVyLAo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZycS0+aTkxNS0+ ZHJtLnN0cnVjdF9tdXRleCk7Cj4+ICvCoMKgwqAgaWYgKGJhcnJpZXIpCj4+ICvCoMKgwqDCoMKg wqDCoCByZXQgPSBpOTE1X3JlcXVlc3RfYXdhaXRfcmVxdWVzdChycSwgYmFycmllcik7Cj4+ICsK Pj4gK8KgwqDCoCByZXR1cm4gcmV0Owo+PiArfQo+PiArCj4+IMKgIC8qKgo+PiDCoMKgICogaTkx NV9yZXF1ZXN0X2FsbG9jIC0gYWxsb2NhdGUgYSByZXF1ZXN0IHN0cnVjdHVyZQo+PiDCoMKgICoK Pj4gQEAgLTgwNCw2ICs4MjAsMTAgQEAgaTkxNV9yZXF1ZXN0X2FsbG9jKHN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgCj4+ICplbmdpbmUsIHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgpCj4+IMKg wqDCoMKgwqDCoCAqLwo+PiDCoMKgwqDCoMKgIHJxLT5oZWFkID0gcnEtPnJpbmctPmVtaXQ7Cj4+ IMKgICvCoMKgwqAgcmV0ID0gYWRkX2dsb2JhbF9iYXJyaWVyKHJxKTsKPj4gK8KgwqDCoCBpZiAo cmV0KQo+PiArwqDCoMKgwqDCoMKgwqAgZ290byBlcnJfdW53aW5kOwo+Cj4gV2hvIGV2ZXIgY2xl YXJzIHRoZSBiYXJyaWVyPwoKSXQncyBjbGVhcmVkIHdoZW4gdGhlIHJlcXVlc3QgaXMgcmV0aXJl ZC4KCj4KPj4gKwo+PiDCoMKgwqDCoMKgIC8qIFVuY29uZGl0aW9uYWxseSBpbnZhbGlkYXRlIEdQ VSBjYWNoZXMgYW5kIFRMQnMuICovCj4+IMKgwqDCoMKgwqAgcmV0ID0gZW5naW5lLT5lbWl0X2Zs dXNoKHJxLCBFTUlUX0lOVkFMSURBVEUpOwo+PiDCoMKgwqDCoMKgIGlmIChyZXQpCj4+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYyAKPj4gYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9scmMuYwo+PiBpbmRleCA4ZmI2ZTY2YTdhODQuLmU1MmM5NTExYjVm YiAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMKPj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMKPj4gQEAgLTIyNDAsNiArMjI0MCw3 MiBAQCBzdGF0aWMgdm9pZCBnZW44X2VtaXRfYnJlYWRjcnVtYl9yY3Moc3RydWN0IAo+PiBpOTE1 X3JlcXVlc3QgKnJlcXVlc3QsIHUzMiAqY3MpCj4+IMKgIH0KPj4gwqAgc3RhdGljIGNvbnN0IGlu dCBnZW44X2VtaXRfYnJlYWRjcnVtYl9yY3Nfc3ogPSA4ICsgV0FfVEFJTF9EV09SRFM7Cj4+IMKg ICt1MzIgZ2VuOF9tYWtlX3JwY3MoY29uc3Qgc3RydWN0IHNzZXVfZGV2X2luZm8gKnNzZXUsCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCB1bmlvbiBpbnRlbF9zc2V1IGN0eF9zc2V1KQo+PiArewo+ PiArwqDCoMKgIHUzMiBycGNzID0gMDsKPj4gKwo+PiArwqDCoMKgIC8qCj4+ICvCoMKgwqDCoCAq IFN0YXJ0aW5nIGluIEdlbjksIHJlbmRlciBwb3dlciBnYXRpbmcgY2FuIGxlYXZlCj4+ICvCoMKg wqDCoCAqIHNsaWNlL3N1YnNsaWNlL0VVIGluIGEgcGFydGlhbGx5IGVuYWJsZWQgc3RhdGUuIFdl Cj4+ICvCoMKgwqDCoCAqIG11c3QgbWFrZSBhbiBleHBsaWNpdCByZXF1ZXN0IHRocm91Z2ggUlBD UyBmb3IgZnVsbAo+PiArwqDCoMKgwqAgKiBlbmFibGVtZW50Lgo+PiArwqDCoMKgwqAgKi8KPj4g K8KgwqDCoCBpZiAoc3NldS0+aGFzX3NsaWNlX3BnKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBycGNz IHw9IEdFTjhfUlBDU19TX0NOVF9FTkFCTEU7Cj4+ICvCoMKgwqDCoMKgwqDCoCBycGNzIHw9IGh3 ZWlnaHQ4KGN0eF9zc2V1LnNsaWNlX21hc2spIDw8IEdFTjhfUlBDU19TX0NOVF9TSElGVDsKPj4g K8KgwqDCoMKgwqDCoMKgIHJwY3MgfD0gR0VOOF9SUENTX0VOQUJMRTsKPj4gK8KgwqDCoCB9Cj4+ ICsKPj4gK8KgwqDCoCBpZiAoc3NldS0+aGFzX3N1YnNsaWNlX3BnKSB7Cj4+ICvCoMKgwqDCoMKg wqDCoCBycGNzIHw9IEdFTjhfUlBDU19TU19DTlRfRU5BQkxFOwo+PiArwqDCoMKgwqDCoMKgwqAg cnBjcyB8PSBod2VpZ2h0OChjdHhfc3NldS5zdWJzbGljZV9tYXNrKSA8PAo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBHRU44X1JQQ1NfU1NfQ05UX1NISUZUOwo+PiArwqDCoMKgwqDCoMKgwqAg cnBjcyB8PSBHRU44X1JQQ1NfRU5BQkxFOwo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIGlm IChzc2V1LT5oYXNfZXVfcGcpIHsKPj4gK8KgwqDCoMKgwqDCoMKgIHJwY3MgfD0gY3R4X3NzZXUu bWluX2V1c19wZXJfc3Vic2xpY2UgPDwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgR0VOOF9S UENTX0VVX01JTl9TSElGVDsKPj4gK8KgwqDCoMKgwqDCoMKgIHJwY3MgfD0gY3R4X3NzZXUubWF4 X2V1c19wZXJfc3Vic2xpY2UgPDwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgR0VOOF9SUENT X0VVX01BWF9TSElGVDsKPj4gK8KgwqDCoMKgwqDCoMKgIHJwY3MgfD0gR0VOOF9SUENTX0VOQUJM RTsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCByZXR1cm4gcnBjczsKPj4gK30KPj4gKwo+ PiArc3RhdGljIGludCBnZW44X2VtaXRfcnBjc19jb25maWcoc3RydWN0IGk5MTVfcmVxdWVzdCAq cnEsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgaTkxNV9nZW1f Y29udGV4dCAqY3R4LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdW5pb24g aW50ZWxfc3NldSBzc2V1KQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IHJxLT5pOTE1Owo+PiArwqDCoMKgIHN0cnVjdCBpbnRlbF9jb250ZXh0ICpj ZSA9IHRvX2ludGVsX2NvbnRleHQoY3R4LCAKPj4gZGV2X3ByaXYtPmVuZ2luZVtSQ1NdKTsKPj4g K8KgwqDCoCB1NjQgb2Zmc2V0Owo+PiArwqDCoMKgIHUzMiAqY3M7Cj4+ICsKPj4gK8KgwqDCoCAv KiBMZXQgdGhlIGRlZmVycmVkIHN0YXRlIGFsbG9jYXRpb24gdGFrZSBjYXJlIG9mIHRoaXMuICov Cj4+ICvCoMKgwqAgaWYgKCFjZS0+c3RhdGUpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gMDsK Pj4gKwo+PiArwqDCoMKgIGNzID0gaW50ZWxfcmluZ19iZWdpbihycSwgNCk7Cj4+ICvCoMKgwqAg aWYgKElTX0VSUihjcykpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gUFRSX0VSUihjcyk7Cj4+ ICsKPj4gK8KgwqDCoCBvZmZzZXQgPSBjZS0+c3RhdGUtPm5vZGUuc3RhcnQgKwo+PiArwqDCoMKg wqDCoMKgwqAgTFJDX1NUQVRFX1BOICogUEFHRV9TSVpFICsKPj4gK8KgwqDCoMKgwqDCoMKgIChD VFhfUl9QV1JfQ0xLX1NUQVRFICsgMSkgKiA0Owo+PiArCj4+ICvCoMKgwqAgKmNzKysgPSBNSV9T VE9SRV9EV09SRF9JTU1fR0VONDsKPj4gK8KgwqDCoCAqY3MrKyA9IGxvd2VyXzMyX2JpdHMob2Zm c2V0KTsKPj4gK8KgwqDCoCAqY3MrKyA9IHVwcGVyXzMyX2JpdHMob2Zmc2V0KTsKPj4gK8KgwqDC oCAqY3MrKyA9IGdlbjhfbWFrZV9ycGNzKCZJTlRFTF9JTkZPKGRldl9wcml2KS0+c3NldSwgc3Nl dSk7Cj4+ICsKPj4gK8KgwqDCoCBpbnRlbF9yaW5nX2FkdmFuY2UocnEsIGNzKTsKPj4gKwo+PiAr wqDCoMKgIHJldHVybiAwOwo+PiArfQo+PiArCj4+IMKgIHN0YXRpYyBpbnQgZ2VuOF9pbml0X3Jj c19jb250ZXh0KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxKQo+PiDCoCB7Cj4+IMKgwqDCoMKgwqAg aW50IHJldDsKPj4gQEAgLTIzMzMsNiArMjM5OSw4IEBAIGxvZ2ljYWxfcmluZ19kZWZhdWx0X3Zm dW5jcyhzdHJ1Y3QgCj4+IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+PiDCoMKgwqDCoMKgIGVu Z2luZS0+ZW1pdF9icmVhZGNydW1iID0gZ2VuOF9lbWl0X2JyZWFkY3J1bWI7Cj4+IMKgwqDCoMKg wqAgZW5naW5lLT5lbWl0X2JyZWFkY3J1bWJfc3ogPSBnZW44X2VtaXRfYnJlYWRjcnVtYl9zejsK Pj4gwqAgK8KgwqDCoCBlbmdpbmUtPmVtaXRfcnBjc19jb25maWcgPSBnZW44X2VtaXRfcnBjc19j b25maWc7Cj4+ICsKPj4gwqDCoMKgwqDCoCBlbmdpbmUtPnNldF9kZWZhdWx0X3N1Ym1pc3Npb24g PSBleGVjbGlzdHNfc2V0X2RlZmF1bHRfc3VibWlzc2lvbjsKPj4gwqAgwqDCoMKgwqDCoCBpZiAo SU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPCAxMSkgewo+PiBAQCAtMjQ4MSw0MSArMjU0OSw2IEBA IGludCBsb2dpY2FsX3hjc19yaW5nX2luaXQoc3RydWN0IAo+PiBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZSkKPj4gwqDCoMKgwqDCoCByZXR1cm4gbG9naWNhbF9yaW5nX2luaXQoZW5naW5lKTsKPj4g wqAgfQo+PiDCoCAtdTMyIGdlbjhfbWFrZV9ycGNzKGNvbnN0IHN0cnVjdCBzc2V1X2Rldl9pbmZv ICpzc2V1LAo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqAgdW5pb24gaW50ZWxfc3NldSBjdHhfc3Nl dSkKPj4gLXsKPj4gLcKgwqDCoCB1MzIgcnBjcyA9IDA7Cj4+IC0KPj4gLcKgwqDCoCAvKgo+PiAt wqDCoMKgwqAgKiBTdGFydGluZyBpbiBHZW45LCByZW5kZXIgcG93ZXIgZ2F0aW5nIGNhbiBsZWF2 ZQo+PiAtwqDCoMKgwqAgKiBzbGljZS9zdWJzbGljZS9FVSBpbiBhIHBhcnRpYWxseSBlbmFibGVk IHN0YXRlLiBXZQo+PiAtwqDCoMKgwqAgKiBtdXN0IG1ha2UgYW4gZXhwbGljaXQgcmVxdWVzdCB0 aHJvdWdoIFJQQ1MgZm9yIGZ1bGwKPj4gLcKgwqDCoMKgICogZW5hYmxlbWVudC4KPj4gLcKgwqDC oCAqLwo+PiAtwqDCoMKgIGlmIChzc2V1LT5oYXNfc2xpY2VfcGcpIHsKPj4gLcKgwqDCoMKgwqDC oMKgIHJwY3MgfD0gR0VOOF9SUENTX1NfQ05UX0VOQUJMRTsKPj4gLcKgwqDCoMKgwqDCoMKgIHJw Y3MgfD0gaHdlaWdodDgoY3R4X3NzZXUuc2xpY2VfbWFzaykgPDwgR0VOOF9SUENTX1NfQ05UX1NI SUZUOwo+PiAtwqDCoMKgwqDCoMKgwqAgcnBjcyB8PSBHRU44X1JQQ1NfRU5BQkxFOwo+PiAtwqDC oMKgIH0KPj4gLQo+PiAtwqDCoMKgIGlmIChzc2V1LT5oYXNfc3Vic2xpY2VfcGcpIHsKPj4gLcKg wqDCoMKgwqDCoMKgIHJwY3MgfD0gR0VOOF9SUENTX1NTX0NOVF9FTkFCTEU7Cj4+IC3CoMKgwqDC oMKgwqDCoCBycGNzIHw9IGh3ZWlnaHQ4KGN0eF9zc2V1LnN1YnNsaWNlX21hc2spIDw8Cj4+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgIEdFTjhfUlBDU19TU19DTlRfU0hJRlQ7Cj4+IC3CoMKgwqDC oMKgwqDCoCBycGNzIHw9IEdFTjhfUlBDU19FTkFCTEU7Cj4+IC3CoMKgwqAgfQo+PiAtCj4+IC3C oMKgwqAgaWYgKHNzZXUtPmhhc19ldV9wZykgewo+PiAtwqDCoMKgwqDCoMKgwqAgcnBjcyB8PSBj dHhfc3NldS5taW5fZXVzX3Blcl9zdWJzbGljZSA8PAo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBHRU44X1JQQ1NfRVVfTUlOX1NISUZUOwo+PiAtwqDCoMKgwqDCoMKgwqAgcnBjcyB8PSBjdHhf c3NldS5tYXhfZXVzX3Blcl9zdWJzbGljZSA8PAo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBH RU44X1JQQ1NfRVVfTUFYX1NISUZUOwo+PiAtwqDCoMKgwqDCoMKgwqAgcnBjcyB8PSBHRU44X1JQ Q1NfRU5BQkxFOwo+PiAtwqDCoMKgIH0KPj4gLQo+PiAtwqDCoMKgIHJldHVybiBycGNzOwo+PiAt fQo+PiAtCj4+IMKgIHN0YXRpYyB1MzIgaW50ZWxfbHJfaW5kaXJlY3RfY3R4X29mZnNldChzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzIAo+PiAqZW5naW5lKQo+PiDCoCB7Cj4+IMKgwqDCoMKgwqAgdTMy IGluZGlyZWN0X2N0eF9vZmZzZXQ7Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9yaW5nYnVmZmVyLmMgCj4+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmlu Z2J1ZmZlci5jCj4+IGluZGV4IDAwMWNmNmJjYjM0OS4uNjQzNDY2ZDRmYTJkIDEwMDY0NAo+PiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMKPj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jCj4+IEBAIC0yMDYxLDYgKzIwNjEs OCBAQCBzdGF0aWMgdm9pZCBpbnRlbF9yaW5nX2RlZmF1bHRfdmZ1bmNzKHN0cnVjdCAKPj4gZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVu Z2luZS0+ZW1pdF9icmVhZGNydW1iX3N6Kys7Cj4+IMKgwqDCoMKgwqAgfQo+PiDCoCArwqDCoMKg IGVuZ2luZS0+ZW1pdF9ycGNzX2NvbmZpZyA9IE5VTEw7IC8qIE9ubHkgc3VwcG9ydGVkIG9uIEdl bjgrICovCj4+ICsKPj4gwqDCoMKgwqDCoCBlbmdpbmUtPnNldF9kZWZhdWx0X3N1Ym1pc3Npb24g PSBpOXh4X3NldF9kZWZhdWx0X3N1Ym1pc3Npb247Cj4+IMKgIMKgwqDCoMKgwqAgaWYgKElOVEVM X0dFTihkZXZfcHJpdikgPj0gNikKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX3JpbmdidWZmZXIuaCAKPj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5n YnVmZmVyLmgKPj4gaW5kZXggYWNlZjM4NWM0YzgwLi42YmY0ZDNiNTdjZWQgMTAwNjQ0Cj4+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaAo+PiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmgKPj4gQEAgLTQ1Niw2ICs0NTYsMTAg QEAgc3RydWN0IGludGVsX2VuZ2luZV9jcyB7Cj4+IMKgwqDCoMKgwqAgdm9pZMKgwqDCoMKgwqDC oMKgICgqZW1pdF9icmVhZGNydW1iKShzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwgdTMyICpjcyk7 Cj4+IMKgwqDCoMKgwqAgaW50wqDCoMKgwqDCoMKgwqAgZW1pdF9icmVhZGNydW1iX3N6Owo+PiDC oCArwqDCoMKgIGludMKgwqDCoMKgwqDCoMKgICgqZW1pdF9ycGNzX2NvbmZpZykoc3RydWN0IGk5 MTVfcmVxdWVzdCAqcnEsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgsCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVuaW9uIGludGVsX3NzZXUgc3NldSk7 Cj4+ICsKPj4gwqDCoMKgwqDCoCAvKiBQYXNzIHRoZSByZXF1ZXN0IHRvIHRoZSBoYXJkd2FyZSBx dWV1ZSAoZS5nLiBkaXJlY3RseSBpbnRvCj4+IMKgwqDCoMKgwqDCoCAqIHRoZSBsZWdhY3kgcmlu Z2J1ZmZlciBvciB0byB0aGUgZW5kIG9mIGFuIGV4ZWNsaXN0KS4KPj4gwqDCoMKgwqDCoMKgICoK Pj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaCBiL2luY2x1ZGUvdWFw aS9kcm0vaTkxNV9kcm0uaAo+PiBpbmRleCA3ZjU2MzRjZThlODguLjI0YjkwODM2Y2UxZCAxMDA2 NDQKPj4gLS0tIGEvaW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5oCj4+ICsrKyBiL2luY2x1ZGUv dWFwaS9kcm0vaTkxNV9kcm0uaAo+PiBAQCAtMTQ1Niw5ICsxNDU2LDQ3IEBAIHN0cnVjdCBkcm1f aTkxNV9nZW1fY29udGV4dF9wYXJhbSB7Cj4+IMKgICNkZWZpbmXCoMKgIEk5MTVfQ09OVEVYVF9N QVhfVVNFUl9QUklPUklUWcKgwqDCoCAxMDIzIC8qIGluY2x1c2l2ZSAqLwo+PiDCoCAjZGVmaW5l wqDCoCBJOTE1X0NPTlRFWFRfREVGQVVMVF9QUklPUklUWcKgwqDCoMKgwqDCoMKgIDAKPj4gwqAg I2RlZmluZcKgwqAgSTkxNV9DT05URVhUX01JTl9VU0VSX1BSSU9SSVRZwqDCoMKgIC0xMDIzIC8q IGluY2x1c2l2ZSAqLwo+PiArwqDCoMKgIC8qCj4+ICvCoMKgwqDCoCAqIFdoZW4gdXNpbmcgdGhl IGZvbGxvd2luZyBwYXJhbSwgdmFsdWUgc2hvdWxkIGJlIGEgcG9pbnRlciB0bwo+PiArwqDCoMKg wqAgKiBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbV9zc2V1Lgo+PiArwqDCoMKgwqAgKi8KPj4g KyNkZWZpbmUgSTkxNV9DT05URVhUX1BBUkFNX1NTRVXCoMKgwqDCoMKgwqDCoCAweDcKPj4gwqDC oMKgwqDCoCBfX3U2NCB2YWx1ZTsKPj4gwqAgfTsKPj4gwqAgK3N0cnVjdCBkcm1faTkxNV9nZW1f Y29udGV4dF9wYXJhbV9zc2V1IHsKPj4gK8KgwqDCoCAvKgo+PiArwqDCoMKgwqAgKiBFbmdpbmUg Y2xhc3MgJiBpbnN0YW5jZSB0byBiZSBjb25maWd1cmVkIG9yIHF1ZXJpZWQuCj4+ICvCoMKgwqDC oCAqLwo+PiArwqDCoMKgIF9fdTMyIGNsYXNzOwo+PiArwqDCoMKgIF9fdTMyIGluc3RhbmNlOwo+ Cj4gQ2hyaXMgYW5kIEkgd2VyZSB0YWxraW5nIGFib3V0IHdoZXRoZXIgdTMyIGlzIG92ZXJraWxs IGFuZCB3ZSBzaG91bGQgCj4gc2V0dGxlIGZvciB1MTY6dTE2IGZvciBjbGFzczppbnN0YW5jZS4g SSB0aGluayAxNi1iaXQgc2hvdWxkIGJlIAo+IGVub3VnaC4gQnV0IGl0IGNhbiBhbHNvIGJlIHUz MiwgSSBkb24ndCB0aGluayB0aGVyZSBhcmUgYW55IHJlYWwgCj4gZG93bnNpZGVzIGhlcmUgdW5s ZXNzIHdlIHdhbnQgdG8gYmUgY29uc2lzdGVudCBpbiBhbGwgcGxhY2VzLgoKTGV0IG1lIGtub3cg d2hhdCB5b3UgdGhpbmsgaXMgYmVzdC4KCj4KPj4gKwo+PiArwqDCoMKgIC8qCj4+ICvCoMKgwqDC oCAqIE1hc2sgb2Ygc2xpY2VzIHRvIGVuYWJsZSBmb3IgdGhlIGNvbnRleHQuIFZhbGlkIHZhbHVl cyBhcmUgYSAKPj4gc3Vic2V0Cj4+ICvCoMKgwqDCoCAqIG9mIHRoZSBiaXRtYXNrIHZhbHVlIHJl dHVybmVkIGZvciBJOTE1X1BBUkFNX1NMSUNFX01BU0suCj4+ICvCoMKgwqDCoCAqLwo+PiArwqDC oMKgIF9fdTggc2xpY2VfbWFzazsKPj4gKwo+PiArwqDCoMKgIC8qCj4+ICvCoMKgwqDCoCAqIE1h c2sgb2Ygc3Vic2xpY2VzIHRvIGVuYWJsZSBmb3IgdGhlIGNvbnRleHQuIFZhbGlkIHZhbHVlcyBh cmUgYQo+PiArwqDCoMKgwqAgKiBzdWJzZXQgb2YgdGhlIGJpdG1hc2sgdmFsdWUgcmV0dXJuIGJ5 IEk5MTVfUEFSQU1fU1VCU0xJQ0VfTUFTSy4KPj4gK8KgwqDCoMKgICovCj4+ICvCoMKgwqAgX191 OCBzdWJzbGljZV9tYXNrOwo+Cj4gSXMgdGhpcyBmdXR1cmUgcHJvb2YgZW5vdWdoLCBzYXkgZm9y IEdlbjExPwoKQXMgZmFyIGFzIEkgY2FuIHNlZSwgdGhpcyBmaXRzLgpObyBvYmplY3Rpb24gdG8g YnVtcCBpdCB0byAxNi8zMmJpdHMgaWYgeW91J2QgbGlrZS4KCj4KPj4gKwo+PiArwqDCoMKgIC8q Cj4+ICvCoMKgwqDCoCAqIE1pbmltdW0vTWF4aW11bSBudW1iZXIgb2YgRVVzIHRvIGVuYWJsZSBw ZXIgc3Vic2xpY2UgZm9yIHRoZQo+PiArwqDCoMKgwqAgKiBjb250ZXh0LiBtaW5fZXVzX3Blcl9z dWJzbGljZSBtdXN0IGJlIGluZmVyaW9yIG9yIGVxdWFsIHRvCj4+ICvCoMKgwqDCoCAqIG1heF9l dXNfcGVyX3N1YnNsaWNlLgo+PiArwqDCoMKgwqAgKi8KPj4gK8KgwqDCoCBfX3U4IG1pbl9ldXNf cGVyX3N1YnNsaWNlOwo+PiArwqDCoMKgIF9fdTggbWF4X2V1c19wZXJfc3Vic2xpY2U7Cj4+ICsK Pj4gK8KgwqDCoCAvKgo+PiArwqDCoMKgwqAgKiBVbnVzZWQgZm9yIG5vdy4gTXVzdCBiZSBjbGVh cmVkIHRvIHplcm8uCj4+ICvCoMKgwqDCoCAqLwo+PiArwqDCoMKgIF9fdTMyIHJzdmQ7Cj4+ICt9 Owo+PiArCj4+IMKgIGVudW0gZHJtX2k5MTVfb2FfZm9ybWF0IHsKPj4gwqDCoMKgwqDCoCBJOTE1 X09BX0ZPUk1BVF9BMTMgPSAxLMKgwqDCoMKgwqDCoMKgIC8qIEhTVyBvbmx5ICovCj4+IMKgwqDC oMKgwqAgSTkxNV9PQV9GT1JNQVRfQTI5LMKgwqDCoMKgwqDCoMKgIC8qIEhTVyBvbmx5ICovCj4+ Cj4KPiBSZWdhcmRzLAo+Cj4gVHZydGtvCj4KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2ludGVsLWdmeAo=