From mboxrd@z Thu Jan 1 00:00:00 1970 From: jeff.mcgee@intel.com Subject: [RFC 5/8] drm/i915/execlists: Flush pending preemption events during reset Date: Wed, 21 Mar 2018 10:26:22 -0700 Message-ID: <20180321172625.6415-6-jeff.mcgee@intel.com> References: <20180321172625.6415-1-jeff.mcgee@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0A4CB6E97B for ; Wed, 21 Mar 2018 17:41:20 +0000 (UTC) In-Reply-To: <20180321172625.6415-1-jeff.mcgee@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 Cc: ben@bwidawsk.net, kalyan.kondapally@intel.com List-Id: intel-gfx@lists.freedesktop.org RnJvbTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+CgpDYXRjaCB1cCB3 aXRoIHRoZSBpbmZsaWdodCBDU0IgZXZlbnRzLCBhZnRlciBkaXNhYmxpbmcgdGhlIHRhc2tsZXQK YmVmb3JlIGRlY2lkaW5nIHdoaWNoIHJlcXVlc3Qgd2FzIHRydWx5IGd1aWx0eSBvZiBoYW5naW5n IHRoZSBHUFUuCgpTaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNv bi5jby51az4KQ2M6IE1pY2hhxYIgV2luaWFyc2tpIDxtaWNoYWwud2luaWFyc2tpQGludGVsLmNv bT4KQ0M6IE1pY2hlbCBUaGllcnJ5IDxtaWNoZWwudGhpZXJyeUBpbnRlbC5jb20+CkNjOiBKZWZm IE1jR2VlIDxqZWZmLm1jZ2VlQGludGVsLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9scmMuYyB8IDM1NSArKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0K IDEgZmlsZSBjaGFuZ2VkLCAxOTcgaW5zZXJ0aW9ucygrKSwgMTU4IGRlbGV0aW9ucygtKQoKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfbHJjLmMKaW5kZXggZTVhM2ZmYmMyNzNhLi5iZWI4MWYxM2EzY2MgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCkBAIC04MjgsMTg2ICs4MjgsMTkyIEBAIHN0YXRpYyB2 b2lkIGV4ZWNsaXN0c19jYW5jZWxfcmVxdWVzdHMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5n aW5lKQogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAotLyoKLSAqIENoZWNrIHRoZSB1 bnJlYWQgQ29udGV4dCBTdGF0dXMgQnVmZmVycyBhbmQgbWFuYWdlIHRoZSBzdWJtaXNzaW9uIG9m IG5ldwotICogY29udGV4dHMgdG8gdGhlIEVMU1AgYWNjb3JkaW5nbHkuCi0gKi8KLXN0YXRpYyB2 b2lkIGV4ZWNsaXN0c19zdWJtaXNzaW9uX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQorc3Rh dGljIHZvaWQgcHJvY2Vzc19jc2Ioc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQogewot CXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKiBjb25zdCBlbmdpbmUgPSAoc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqKWRhdGE7CiAJc3RydWN0IGludGVsX2VuZ2luZV9leGVjbGlzdHMgKiBjb25zdCBl eGVjbGlzdHMgPSAmZW5naW5lLT5leGVjbGlzdHM7CiAJc3RydWN0IGV4ZWNsaXN0X3BvcnQgKiBj b25zdCBwb3J0ID0gZXhlY2xpc3RzLT5wb3J0OwotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiA9IGVuZ2luZS0+aTkxNTsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9 IGVuZ2luZS0+aTkxNTsKKwl1bnNpZ25lZCBpbnQgaGVhZCwgdGFpbDsKKwljb25zdCB1MzIgKmJ1 ZjsKIAlib29sIGZ3ID0gZmFsc2U7CiAKLQkvKiBXZSBjYW4gc2tpcCBhY3F1aXJpbmcgaW50ZWxf cnVudGltZV9wbV9nZXQoKSBoZXJlIGFzIGl0IHdhcyB0YWtlbgotCSAqIG9uIG91ciBiZWhhbGYg YnkgdGhlIHJlcXVlc3QgKHNlZSBpOTE1X2dlbV9tYXJrX2J1c3koKSkgYW5kIGl0IHdpbGwKLQkg KiBub3QgYmUgcmVsaW5xdWlzaGVkIHVudGlsIHRoZSBkZXZpY2UgaXMgaWRsZSAoc2VlCi0JICog aTkxNV9nZW1faWRsZV93b3JrX2hhbmRsZXIoKSkuIEFzIGEgcHJlY2F1dGlvbiwgd2UgbWFrZSBz dXJlCi0JICogdGhhdCBhbGwgRUxTUCBhcmUgZHJhaW5lZCBpLmUuIHdlIGhhdmUgcHJvY2Vzc2Vk IHRoZSBDU0IsCi0JICogYmVmb3JlIGFsbG93aW5nIG91cnNlbHZlcyB0byBpZGxlIGFuZCBjYWxs aW5nIGludGVsX3J1bnRpbWVfcG1fcHV0KCkuCi0JICovCi0JR0VNX0JVR19PTighZGV2X3ByaXYt Pmd0LmF3YWtlKTsKKwlpZiAodW5saWtlbHkoZXhlY2xpc3RzLT5jc2JfdXNlX21taW8pKSB7CisJ CWJ1ZiA9ICh1MzIgKiBfX2ZvcmNlKQorCQkJKGk5MTUtPnJlZ3MgKyBpOTE1X21taW9fcmVnX29m ZnNldChSSU5HX0NPTlRFWFRfU1RBVFVTX0JVRl9MTyhlbmdpbmUsIDApKSk7CisJCWV4ZWNsaXN0 cy0+Y3NiX2hlYWQgPSAtMTsgLyogZm9yY2UgbW1pbyByZWFkIG9mIENTQiBwdHJzICovCisJfSBl bHNlIHsKKwkJLyogVGhlIEhXU1AgY29udGFpbnMgYSAoY2FjaGVhYmxlKSBtaXJyb3Igb2YgdGhl IENTQiAqLworCQlidWYgPSAmZW5naW5lLT5zdGF0dXNfcGFnZS5wYWdlX2FkZHJbSTkxNV9IV1Nf Q1NCX0JVRjBfSU5ERVhdOworCX0KIAotCS8qIFByZWZlciBkb2luZyB0ZXN0X2FuZF9jbGVhcl9i aXQoKSBhcyBhIHR3byBzdGFnZSBvcGVyYXRpb24gdG8gYXZvaWQKLQkgKiBpbXBvc2luZyB0aGUg Y29zdCBvZiBhIGxvY2tlZCBhdG9taWMgdHJhbnNhY3Rpb24gd2hlbiBzdWJtaXR0aW5nIGEKLQkg KiBuZXcgcmVxdWVzdCAob3V0c2lkZSBvZiB0aGUgY29udGV4dC1zd2l0Y2ggaW50ZXJydXB0KS4K KwkvKgorCSAqIFRoZSB3cml0ZSB3aWxsIGJlIG9yZGVyZWQgYnkgdGhlIHVuY2FjaGVkIHJlYWQg KGl0c2VsZgorCSAqIGEgbWVtb3J5IGJhcnJpZXIpLCBzbyB3ZSBkbyBub3QgbmVlZCBhbm90aGVy IGluIHRoZSBmb3JtCisJICogb2YgYSBsb2NrZWQgaW5zdHJ1Y3Rpb24uIFRoZSByYWNlIGJldHdl ZW4gdGhlIGludGVycnVwdAorCSAqIGhhbmRsZXIgYW5kIHRoZSBzcGxpdCB0ZXN0L2NsZWFyIGlz IGhhcm1sZXNzIGFzIHdlIG9yZGVyCisJICogb3VyIGNsZWFyIGJlZm9yZSB0aGUgQ1NCIHJlYWQu IElmIHRoZSBpbnRlcnJ1cHQgYXJyaXZlZAorCSAqIGZpcnN0IGJldHdlZW4gdGhlIHRlc3QgYW5k IHRoZSBjbGVhciwgd2UgcmVhZCB0aGUgdXBkYXRlZAorCSAqIENTQiBhbmQgY2xlYXIgdGhlIGJp dC4gSWYgdGhlIGludGVycnVwdCBhcnJpdmVzIGFzIHdlIHJlYWQKKwkgKiB0aGUgQ1NCIG9yIGxh dGVyIChpLmUuIGFmdGVyIHdlIGhhZCBjbGVhcmVkIHRoZSBiaXQpIHRoZSBiaXQKKwkgKiBpcyBz ZXQgYW5kIHdlIGRvIGEgbmV3IGxvb3AuCiAJICovCi0Jd2hpbGUgKHRlc3RfYml0KEVOR0lORV9J UlFfRVhFQ0xJU1QsICZlbmdpbmUtPmlycV9wb3N0ZWQpKSB7Ci0JCS8qIFRoZSBIV1NQIGNvbnRh aW5zIGEgKGNhY2hlYWJsZSkgbWlycm9yIG9mIHRoZSBDU0IgKi8KLQkJY29uc3QgdTMyICpidWYg PQotCQkJJmVuZ2luZS0+c3RhdHVzX3BhZ2UucGFnZV9hZGRyW0k5MTVfSFdTX0NTQl9CVUYwX0lO REVYXTsKLQkJdW5zaWduZWQgaW50IGhlYWQsIHRhaWw7Ci0KLQkJaWYgKHVubGlrZWx5KGV4ZWNs aXN0cy0+Y3NiX3VzZV9tbWlvKSkgewotCQkJYnVmID0gKHUzMiAqIF9fZm9yY2UpCi0JCQkJKGRl dl9wcml2LT5yZWdzICsgaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19DT05URVhUX1NUQVRVU19C VUZfTE8oZW5naW5lLCAwKSkpOwotCQkJZXhlY2xpc3RzLT5jc2JfaGVhZCA9IC0xOyAvKiBmb3Jj ZSBtbWlvIHJlYWQgb2YgQ1NCIHB0cnMgKi8KLQkJfQorCV9fY2xlYXJfYml0KEVOR0lORV9JUlFf RVhFQ0xJU1QsICZlbmdpbmUtPmlycV9wb3N0ZWQpOworCWlmICh1bmxpa2VseShleGVjbGlzdHMt PmNzYl9oZWFkID09IC0xKSkgeyAvKiBmb2xsb3dpbmcgYSByZXNldCAqLworCQlpbnRlbF91bmNv cmVfZm9yY2V3YWtlX2dldChpOTE1LCBleGVjbGlzdHMtPmZ3X2RvbWFpbnMpOworCQlmdyA9IHRy dWU7CisKKwkJaGVhZCA9IHJlYWRsKGk5MTUtPnJlZ3MgKyBpOTE1X21taW9fcmVnX29mZnNldChS SU5HX0NPTlRFWFRfU1RBVFVTX1BUUihlbmdpbmUpKSk7CisJCXRhaWwgPSBHRU44X0NTQl9XUklU RV9QVFIoaGVhZCk7CisJCWhlYWQgPSBHRU44X0NTQl9SRUFEX1BUUihoZWFkKTsKKwkJZXhlY2xp c3RzLT5jc2JfaGVhZCA9IGhlYWQ7CisJfSBlbHNlIHsKKwkJY29uc3QgaW50IHdyaXRlX2lkeCA9 CisJCQlpbnRlbF9od3NfY3NiX3dyaXRlX2luZGV4KGk5MTUpIC0KKwkJCUk5MTVfSFdTX0NTQl9C VUYwX0lOREVYOworCisJCWhlYWQgPSBleGVjbGlzdHMtPmNzYl9oZWFkOworCQl0YWlsID0gUkVB RF9PTkNFKGJ1Zlt3cml0ZV9pZHhdKTsKKwl9CisJR0VNX1RSQUNFKCIlcyBjcy1pcnEgaGVhZD0l ZCBbJWQlc10sIHRhaWw9JWQgWyVkJXNdXG4iLAorCQkgIGVuZ2luZS0+bmFtZSwKKwkJICBoZWFk LCBHRU44X0NTQl9SRUFEX1BUUihyZWFkbChpOTE1LT5yZWdzICsgaTkxNV9tbWlvX3JlZ19vZmZz ZXQoUklOR19DT05URVhUX1NUQVRVU19QVFIoZW5naW5lKSkpKSwgZncgPyAiIiA6ICI/IiwKKwkJ ICB0YWlsLCBHRU44X0NTQl9XUklURV9QVFIocmVhZGwoaTkxNS0+cmVncyArIGk5MTVfbW1pb19y ZWdfb2Zmc2V0KFJJTkdfQ09OVEVYVF9TVEFUVVNfUFRSKGVuZ2luZSkpKSksIGZ3ID8gIiIgOiAi PyIpOworCisJd2hpbGUgKGhlYWQgIT0gdGFpbCkgeworCQlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpy cTsKKwkJdW5zaWduZWQgaW50IHN0YXR1czsKKwkJdW5zaWduZWQgaW50IGNvdW50OworCisJCWlm ICgrK2hlYWQgPT0gR0VOOF9DU0JfRU5UUklFUykKKwkJCWhlYWQgPSAwOwogCi0JCS8qIFRoZSB3 cml0ZSB3aWxsIGJlIG9yZGVyZWQgYnkgdGhlIHVuY2FjaGVkIHJlYWQgKGl0c2VsZgotCQkgKiBh IG1lbW9yeSBiYXJyaWVyKSwgc28gd2UgZG8gbm90IG5lZWQgYW5vdGhlciBpbiB0aGUgZm9ybQot CQkgKiBvZiBhIGxvY2tlZCBpbnN0cnVjdGlvbi4gVGhlIHJhY2UgYmV0d2VlbiB0aGUgaW50ZXJy dXB0Ci0JCSAqIGhhbmRsZXIgYW5kIHRoZSBzcGxpdCB0ZXN0L2NsZWFyIGlzIGhhcm1sZXNzIGFz IHdlIG9yZGVyCi0JCSAqIG91ciBjbGVhciBiZWZvcmUgdGhlIENTQiByZWFkLiBJZiB0aGUgaW50 ZXJydXB0IGFycml2ZWQKLQkJICogZmlyc3QgYmV0d2VlbiB0aGUgdGVzdCBhbmQgdGhlIGNsZWFy LCB3ZSByZWFkIHRoZSB1cGRhdGVkCi0JCSAqIENTQiBhbmQgY2xlYXIgdGhlIGJpdC4gSWYgdGhl IGludGVycnVwdCBhcnJpdmVzIGFzIHdlIHJlYWQKLQkJICogdGhlIENTQiBvciBsYXRlciAoaS5l LiBhZnRlciB3ZSBoYWQgY2xlYXJlZCB0aGUgYml0KSB0aGUgYml0Ci0JCSAqIGlzIHNldCBhbmQg d2UgZG8gYSBuZXcgbG9vcC4KKwkJLyoKKwkJICogV2UgYXJlIGZseWluZyBuZWFyIGRyYWdvbnMg YWdhaW4uCisJCSAqCisJCSAqIFdlIGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIHJlcXVlc3QgaW4g ZXhlY2xpc3RfcG9ydFtdCisJCSAqIGJ1dCBubyBtb3JlIHRoYW4gdGhhdC4gV2UgYXJlIG9wZXJh dGluZyBpbiBzb2Z0aXJxCisJCSAqIGNvbnRleHQgYW5kIHNvIGNhbm5vdCBob2xkIGFueSBtdXRl eCBvciBzbGVlcC4gVGhhdAorCQkgKiBwcmV2ZW50cyB1cyBzdG9wcGluZyB0aGUgcmVxdWVzdHMg d2UgYXJlIHByb2Nlc3NpbmcKKwkJICogaW4gcG9ydFtdIGZyb20gYmVpbmcgcmV0aXJlZCBzaW11 bHRhbmVvdXNseSAodGhlCisJCSAqIGJyZWFkY3J1bWIgd2lsbCBiZSBjb21wbGV0ZSBiZWZvcmUg d2Ugc2VlIHRoZQorCQkgKiBjb250ZXh0LXN3aXRjaCkuIEFzIHdlIG9ubHkgaG9sZCB0aGUgcmVm ZXJlbmNlIHRvIHRoZQorCQkgKiByZXF1ZXN0LCBhbnkgcG9pbnRlciBjaGFzaW5nIHVuZGVybmVh dGggdGhlIHJlcXVlc3QKKwkJICogaXMgc3ViamVjdCB0byBhIHBvdGVudGlhbCB1c2UtYWZ0ZXIt ZnJlZS4gVGh1cyB3ZQorCQkgKiBzdG9yZSBhbGwgb2YgdGhlIGJvb2trZWVwaW5nIHdpdGhpbiBw b3J0W10gYXMKKwkJICogcmVxdWlyZWQsIGFuZCBhdm9pZCB1c2luZyB1bmd1YXJkZWQgcG9pbnRl cnMgYmVuZWF0aAorCQkgKiByZXF1ZXN0IGl0c2VsZi4gVGhlIHNhbWUgYXBwbGllcyB0byB0aGUg YXRvbWljCisJCSAqIHN0YXR1cyBub3RpZmllci4KIAkJICovCi0JCV9fY2xlYXJfYml0KEVOR0lO RV9JUlFfRVhFQ0xJU1QsICZlbmdpbmUtPmlycV9wb3N0ZWQpOwotCQlpZiAodW5saWtlbHkoZXhl Y2xpc3RzLT5jc2JfaGVhZCA9PSAtMSkpIHsgLyogZm9sbG93aW5nIGEgcmVzZXQgKi8KLQkJCWlm ICghZncpIHsKLQkJCQlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX2dldChkZXZfcHJpdiwKLQkJCQkJ CQkgICBleGVjbGlzdHMtPmZ3X2RvbWFpbnMpOwotCQkJCWZ3ID0gdHJ1ZTsKLQkJCX0KIAotCQkJ aGVhZCA9IHJlYWRsKGRldl9wcml2LT5yZWdzICsgaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19D T05URVhUX1NUQVRVU19QVFIoZW5naW5lKSkpOwotCQkJdGFpbCA9IEdFTjhfQ1NCX1dSSVRFX1BU UihoZWFkKTsKLQkJCWhlYWQgPSBHRU44X0NTQl9SRUFEX1BUUihoZWFkKTsKLQkJCWV4ZWNsaXN0 cy0+Y3NiX2hlYWQgPSBoZWFkOwotCQl9IGVsc2UgewotCQkJY29uc3QgaW50IHdyaXRlX2lkeCA9 Ci0JCQkJaW50ZWxfaHdzX2NzYl93cml0ZV9pbmRleChkZXZfcHJpdikgLQotCQkJCUk5MTVfSFdT X0NTQl9CVUYwX0lOREVYOworCQlzdGF0dXMgPSBSRUFEX09OQ0UoYnVmWzIgKiBoZWFkXSk7IC8q IG1heWJlIG1taW8hICovCisJCUdFTV9UUkFDRSgiJXMgY3NiWyVkXTogc3RhdHVzPTB4JTA4eDow eCUwOHgsIGFjdGl2ZT0weCV4XG4iLAorCQkJICBlbmdpbmUtPm5hbWUsIGhlYWQsCisJCQkgIHN0 YXR1cywgYnVmWzIqaGVhZCArIDFdLAorCQkJICBleGVjbGlzdHMtPmFjdGl2ZSk7CisKKwkJaWYg KHN0YXR1cyAmIChHRU44X0NUWF9TVEFUVVNfSURMRV9BQ1RJVkUgfAorCQkJICAgICAgR0VOOF9D VFhfU1RBVFVTX1BSRUVNUFRFRCkpCisJCQlleGVjbGlzdHNfc2V0X2FjdGl2ZShleGVjbGlzdHMs CisJCQkJCSAgICAgRVhFQ0xJU1RTX0FDVElWRV9IV0FDSyk7CisJCWlmIChzdGF0dXMgJiBHRU44 X0NUWF9TVEFUVVNfQUNUSVZFX0lETEUpCisJCQlleGVjbGlzdHNfY2xlYXJfYWN0aXZlKGV4ZWNs aXN0cywKKwkJCQkJICAgICAgIEVYRUNMSVNUU19BQ1RJVkVfSFdBQ0spOworCisJCWlmICghKHN0 YXR1cyAmIEdFTjhfQ1RYX1NUQVRVU19DT01QTEVURURfTUFTSykpCisJCQljb250aW51ZTsKIAot CQkJaGVhZCA9IGV4ZWNsaXN0cy0+Y3NiX2hlYWQ7Ci0JCQl0YWlsID0gUkVBRF9PTkNFKGJ1Zlt3 cml0ZV9pZHhdKTsKLQkJfQotCQlHRU1fVFJBQ0UoIiVzIGNzLWlycSBoZWFkPSVkIFslZCVzXSwg dGFpbD0lZCBbJWQlc11cbiIsCi0JCQkgIGVuZ2luZS0+bmFtZSwKLQkJCSAgaGVhZCwgR0VOOF9D U0JfUkVBRF9QVFIocmVhZGwoZGV2X3ByaXYtPnJlZ3MgKyBpOTE1X21taW9fcmVnX29mZnNldChS SU5HX0NPTlRFWFRfU1RBVFVTX1BUUihlbmdpbmUpKSkpLCBmdyA/ICIiIDogIj8iLAotCQkJICB0 YWlsLCBHRU44X0NTQl9XUklURV9QVFIocmVhZGwoZGV2X3ByaXYtPnJlZ3MgKyBpOTE1X21taW9f cmVnX29mZnNldChSSU5HX0NPTlRFWFRfU1RBVFVTX1BUUihlbmdpbmUpKSkpLCBmdyA/ICIiIDog Ij8iKTsKKwkJLyogV2Ugc2hvdWxkIG5ldmVyIGdldCBhIENPTVBMRVRFRCB8IElETEVfQUNUSVZF ISAqLworCQlHRU1fQlVHX09OKHN0YXR1cyAmIEdFTjhfQ1RYX1NUQVRVU19JRExFX0FDVElWRSk7 CiAKLQkJd2hpbGUgKGhlYWQgIT0gdGFpbCkgewotCQkJc3RydWN0IGk5MTVfcmVxdWVzdCAqcnE7 Ci0JCQl1bnNpZ25lZCBpbnQgc3RhdHVzOwotCQkJdW5zaWduZWQgaW50IGNvdW50OworCQlpZiAo c3RhdHVzICYgR0VOOF9DVFhfU1RBVFVTX0NPTVBMRVRFICYmCisJCSAgICBidWZbMipoZWFkICsg MV0gPT0gZXhlY2xpc3RzLT5wcmVlbXB0X2NvbXBsZXRlX3N0YXR1cykgeworCQkJR0VNX1RSQUNF KCIlcyBwcmVlbXB0LWlkbGVcbiIsIGVuZ2luZS0+bmFtZSk7CisJCQljb21wbGV0ZV9wcmVlbXB0 X2NvbnRleHQoZXhlY2xpc3RzKTsKKwkJCWNvbnRpbnVlOworCQl9CiAKLQkJCWlmICgrK2hlYWQg PT0gR0VOOF9DU0JfRU5UUklFUykKLQkJCQloZWFkID0gMDsKKwkJaWYgKHN0YXR1cyAmIEdFTjhf Q1RYX1NUQVRVU19QUkVFTVBURUQgJiYKKwkJICAgIGV4ZWNsaXN0c19pc19hY3RpdmUoZXhlY2xp c3RzLAorCQkJCQlFWEVDTElTVFNfQUNUSVZFX1BSRUVNUFQpKQorCQkJY29udGludWU7CiAKLQkJ CS8qIFdlIGFyZSBmbHlpbmcgbmVhciBkcmFnb25zIGFnYWluLgotCQkJICoKLQkJCSAqIFdlIGhv bGQgYSByZWZlcmVuY2UgdG8gdGhlIHJlcXVlc3QgaW4gZXhlY2xpc3RfcG9ydFtdCi0JCQkgKiBi dXQgbm8gbW9yZSB0aGFuIHRoYXQuIFdlIGFyZSBvcGVyYXRpbmcgaW4gc29mdGlycQotCQkJICog Y29udGV4dCBhbmQgc28gY2Fubm90IGhvbGQgYW55IG11dGV4IG9yIHNsZWVwLiBUaGF0Ci0JCQkg KiBwcmV2ZW50cyB1cyBzdG9wcGluZyB0aGUgcmVxdWVzdHMgd2UgYXJlIHByb2Nlc3NpbmcKLQkJ CSAqIGluIHBvcnRbXSBmcm9tIGJlaW5nIHJldGlyZWQgc2ltdWx0YW5lb3VzbHkgKHRoZQotCQkJ ICogYnJlYWRjcnVtYiB3aWxsIGJlIGNvbXBsZXRlIGJlZm9yZSB3ZSBzZWUgdGhlCi0JCQkgKiBj b250ZXh0LXN3aXRjaCkuIEFzIHdlIG9ubHkgaG9sZCB0aGUgcmVmZXJlbmNlIHRvIHRoZQotCQkJ ICogcmVxdWVzdCwgYW55IHBvaW50ZXIgY2hhc2luZyB1bmRlcm5lYXRoIHRoZSByZXF1ZXN0Ci0J CQkgKiBpcyBzdWJqZWN0IHRvIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlLiBUaHVzIHdlCi0J CQkgKiBzdG9yZSBhbGwgb2YgdGhlIGJvb2trZWVwaW5nIHdpdGhpbiBwb3J0W10gYXMKLQkJCSAq IHJlcXVpcmVkLCBhbmQgYXZvaWQgdXNpbmcgdW5ndWFyZGVkIHBvaW50ZXJzIGJlbmVhdGgKLQkJ CSAqIHJlcXVlc3QgaXRzZWxmLiBUaGUgc2FtZSBhcHBsaWVzIHRvIHRoZSBhdG9taWMKLQkJCSAq IHN0YXR1cyBub3RpZmllci4KLQkJCSAqLworCQlHRU1fQlVHX09OKCFleGVjbGlzdHNfaXNfYWN0 aXZlKGV4ZWNsaXN0cywKKwkJCQkJCUVYRUNMSVNUU19BQ1RJVkVfVVNFUikpOwogCi0JCQlzdGF0 dXMgPSBSRUFEX09OQ0UoYnVmWzIgKiBoZWFkXSk7IC8qIG1heWJlIG1taW8hICovCi0JCQlHRU1f VFJBQ0UoIiVzIGNzYlslZF06IHN0YXR1cz0weCUwOHg6MHglMDh4LCBhY3RpdmU9MHgleFxuIiwK LQkJCQkgIGVuZ2luZS0+bmFtZSwgaGVhZCwKLQkJCQkgIHN0YXR1cywgYnVmWzIqaGVhZCArIDFd LAotCQkJCSAgZXhlY2xpc3RzLT5hY3RpdmUpOwotCi0JCQlpZiAoc3RhdHVzICYgKEdFTjhfQ1RY X1NUQVRVU19JRExFX0FDVElWRSB8Ci0JCQkJICAgICAgR0VOOF9DVFhfU1RBVFVTX1BSRUVNUFRF RCkpCi0JCQkJZXhlY2xpc3RzX3NldF9hY3RpdmUoZXhlY2xpc3RzLAotCQkJCQkJICAgICBFWEVD TElTVFNfQUNUSVZFX0hXQUNLKTsKLQkJCWlmIChzdGF0dXMgJiBHRU44X0NUWF9TVEFUVVNfQUNU SVZFX0lETEUpCi0JCQkJZXhlY2xpc3RzX2NsZWFyX2FjdGl2ZShleGVjbGlzdHMsCi0JCQkJCQkg ICAgICAgRVhFQ0xJU1RTX0FDVElWRV9IV0FDSyk7Ci0KLQkJCWlmICghKHN0YXR1cyAmIEdFTjhf Q1RYX1NUQVRVU19DT01QTEVURURfTUFTSykpCi0JCQkJY29udGludWU7CisJCXJxID0gcG9ydF91 bnBhY2socG9ydCwgJmNvdW50KTsKKwkJR0VNX1RSQUNFKCIlcyBvdXRbMF06IGN0eD0lZC4lZCwg c2Vxbm89JXgsIHByaW89JWRcbiIsCisJCQkgIGVuZ2luZS0+bmFtZSwKKwkJCSAgcG9ydC0+Y29u dGV4dF9pZCwgY291bnQsCisJCQkgIHJxID8gcnEtPmdsb2JhbF9zZXFubyA6IDAsCisJCQkgIHJx ID8gcnFfcHJpbyhycSkgOiAwKTsKKworCQkvKiBDaGVjayB0aGUgY29udGV4dC9kZXNjIGlkIGZv ciB0aGlzIGV2ZW50IG1hdGNoZXMgKi8KKwkJR0VNX0RFQlVHX0JVR19PTihidWZbMiAqIGhlYWQg KyAxXSAhPSBwb3J0LT5jb250ZXh0X2lkKTsKKworCQlHRU1fQlVHX09OKGNvdW50ID09IDApOwor CQlpZiAoLS1jb3VudCA9PSAwKSB7CisJCQlHRU1fQlVHX09OKHN0YXR1cyAmIEdFTjhfQ1RYX1NU QVRVU19QUkVFTVBURUQpOworCQkJR0VNX0JVR19PTihwb3J0X2lzc2V0KCZwb3J0WzFdKSAmJgor CQkJCSAgICEoc3RhdHVzICYgR0VOOF9DVFhfU1RBVFVTX0VMRU1FTlRfU1dJVENIKSk7CisJCQlH RU1fQlVHX09OKCFpOTE1X3JlcXVlc3RfY29tcGxldGVkKHJxKSk7CisJCQlleGVjbGlzdHNfY29u dGV4dF9zY2hlZHVsZV9vdXQocnEpOworCQkJdHJhY2VfaTkxNV9yZXF1ZXN0X291dChycSk7CisJ CQlpOTE1X3JlcXVlc3RfcHV0KHJxKTsKKworCQkJR0VNX1RSQUNFKCIlcyBjb21wbGV0ZWQgY3R4 PSVkXG4iLAorCQkJCSAgZW5naW5lLT5uYW1lLCBwb3J0LT5jb250ZXh0X2lkKTsKKworCQkJZXhl Y2xpc3RzX3BvcnRfY29tcGxldGUoZXhlY2xpc3RzLCBwb3J0KTsKKwkJfSBlbHNlIHsKKwkJCXBv cnRfc2V0KHBvcnQsIHBvcnRfcGFjayhycSwgY291bnQpKTsKKwkJfQogCi0JCQkvKiBXZSBzaG91 bGQgbmV2ZXIgZ2V0IGEgQ09NUExFVEVEIHwgSURMRV9BQ1RJVkUhICovCi0JCQlHRU1fQlVHX09O KHN0YXR1cyAmIEdFTjhfQ1RYX1NUQVRVU19JRExFX0FDVElWRSk7CisJCS8qIEFmdGVyIHRoZSBm aW5hbCBlbGVtZW50LCB0aGUgaHcgc2hvdWxkIGJlIGlkbGUgKi8KKwkJR0VNX0JVR19PTihwb3J0 X2NvdW50KHBvcnQpID09IDAgJiYKKwkJCSAgICEoc3RhdHVzICYgR0VOOF9DVFhfU1RBVFVTX0FD VElWRV9JRExFKSk7CisJCWlmIChwb3J0X2NvdW50KHBvcnQpID09IDApCisJCQlleGVjbGlzdHNf Y2xlYXJfYWN0aXZlKGV4ZWNsaXN0cywKKwkJCQkJICAgICAgIEVYRUNMSVNUU19BQ1RJVkVfVVNF Uik7CisJfQogCi0JCQlpZiAoc3RhdHVzICYgR0VOOF9DVFhfU1RBVFVTX0NPTVBMRVRFICYmCi0J CQkgICAgYnVmWzIqaGVhZCArIDFdID09IGV4ZWNsaXN0cy0+cHJlZW1wdF9jb21wbGV0ZV9zdGF0 dXMpIHsKLQkJCQlHRU1fVFJBQ0UoIiVzIHByZWVtcHQtaWRsZVxuIiwgZW5naW5lLT5uYW1lKTsK LQkJCQljb21wbGV0ZV9wcmVlbXB0X2NvbnRleHQoZXhlY2xpc3RzKTsKLQkJCQljb250aW51ZTsK LQkJCX0KKwlpZiAoaGVhZCAhPSBleGVjbGlzdHMtPmNzYl9oZWFkKSB7CisJCWV4ZWNsaXN0cy0+ Y3NiX2hlYWQgPSBoZWFkOworCQl3cml0ZWwoX01BU0tFRF9GSUVMRChHRU44X0NTQl9SRUFEX1BU Ul9NQVNLLCBoZWFkIDw8IDgpLAorCQkgICAgICAgaTkxNS0+cmVncyArIGk5MTVfbW1pb19yZWdf b2Zmc2V0KFJJTkdfQ09OVEVYVF9TVEFUVVNfUFRSKGVuZ2luZSkpKTsKKwl9CiAKLQkJCWlmIChz dGF0dXMgJiBHRU44X0NUWF9TVEFUVVNfUFJFRU1QVEVEICYmCi0JCQkgICAgZXhlY2xpc3RzX2lz X2FjdGl2ZShleGVjbGlzdHMsCi0JCQkJCQlFWEVDTElTVFNfQUNUSVZFX1BSRUVNUFQpKQotCQkJ CWNvbnRpbnVlOworCWlmICh1bmxpa2VseShmdykpCisJCWludGVsX3VuY29yZV9mb3JjZXdha2Vf cHV0KGk5MTUsIGV4ZWNsaXN0cy0+ZndfZG9tYWlucyk7Cit9CiAKLQkJCUdFTV9CVUdfT04oIWV4 ZWNsaXN0c19pc19hY3RpdmUoZXhlY2xpc3RzLAotCQkJCQkJCUVYRUNMSVNUU19BQ1RJVkVfVVNF UikpOwotCi0JCQlycSA9IHBvcnRfdW5wYWNrKHBvcnQsICZjb3VudCk7Ci0JCQlHRU1fVFJBQ0Uo IiVzIG91dFswXTogY3R4PSVkLiVkLCBzZXFubz0leCwgcHJpbz0lZFxuIiwKLQkJCQkgIGVuZ2lu ZS0+bmFtZSwKLQkJCQkgIHBvcnQtPmNvbnRleHRfaWQsIGNvdW50LAotCQkJCSAgcnEgPyBycS0+ Z2xvYmFsX3NlcW5vIDogMCwKLQkJCQkgIHJxID8gcnFfcHJpbyhycSkgOiAwKTsKLQotCQkJLyog Q2hlY2sgdGhlIGNvbnRleHQvZGVzYyBpZCBmb3IgdGhpcyBldmVudCBtYXRjaGVzICovCi0JCQlH RU1fREVCVUdfQlVHX09OKGJ1ZlsyICogaGVhZCArIDFdICE9IHBvcnQtPmNvbnRleHRfaWQpOwot Ci0JCQlHRU1fQlVHX09OKGNvdW50ID09IDApOwotCQkJaWYgKC0tY291bnQgPT0gMCkgewotCQkJ CUdFTV9CVUdfT04oc3RhdHVzICYgR0VOOF9DVFhfU1RBVFVTX1BSRUVNUFRFRCk7Ci0JCQkJR0VN X0JVR19PTihwb3J0X2lzc2V0KCZwb3J0WzFdKSAmJgotCQkJCQkgICAhKHN0YXR1cyAmIEdFTjhf Q1RYX1NUQVRVU19FTEVNRU5UX1NXSVRDSCkpOwotCQkJCUdFTV9CVUdfT04oIWk5MTVfcmVxdWVz dF9jb21wbGV0ZWQocnEpKTsKLQkJCQlleGVjbGlzdHNfY29udGV4dF9zY2hlZHVsZV9vdXQocnEp OwotCQkJCXRyYWNlX2k5MTVfcmVxdWVzdF9vdXQocnEpOwotCQkJCWk5MTVfcmVxdWVzdF9wdXQo cnEpOwotCi0JCQkJR0VNX1RSQUNFKCIlcyBjb21wbGV0ZWQgY3R4PSVkXG4iLAotCQkJCQkgIGVu Z2luZS0+bmFtZSwgcG9ydC0+Y29udGV4dF9pZCk7Ci0KLQkJCQlleGVjbGlzdHNfcG9ydF9jb21w bGV0ZShleGVjbGlzdHMsIHBvcnQpOwotCQkJfSBlbHNlIHsKLQkJCQlwb3J0X3NldChwb3J0LCBw b3J0X3BhY2socnEsIGNvdW50KSk7Ci0JCQl9CisvKgorICogQ2hlY2sgdGhlIHVucmVhZCBDb250 ZXh0IFN0YXR1cyBCdWZmZXJzIGFuZCBtYW5hZ2UgdGhlIHN1Ym1pc3Npb24gb2YgbmV3CisgKiBj b250ZXh0cyB0byB0aGUgRUxTUCBhY2NvcmRpbmdseS4KKyAqLworc3RhdGljIHZvaWQgZXhlY2xp c3RzX3N1Ym1pc3Npb25fdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqIGNvbnN0IGVuZ2luZSA9IChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICop ZGF0YTsKIAotCQkJLyogQWZ0ZXIgdGhlIGZpbmFsIGVsZW1lbnQsIHRoZSBodyBzaG91bGQgYmUg aWRsZSAqLwotCQkJR0VNX0JVR19PTihwb3J0X2NvdW50KHBvcnQpID09IDAgJiYKLQkJCQkgICAh KHN0YXR1cyAmIEdFTjhfQ1RYX1NUQVRVU19BQ1RJVkVfSURMRSkpOwotCQkJaWYgKHBvcnRfY291 bnQocG9ydCkgPT0gMCkKLQkJCQlleGVjbGlzdHNfY2xlYXJfYWN0aXZlKGV4ZWNsaXN0cywKLQkJ CQkJCSAgICAgICBFWEVDTElTVFNfQUNUSVZFX1VTRVIpOwotCQl9CisJLyoKKwkgKiBXZSBjYW4g c2tpcCBhY3F1aXJpbmcgaW50ZWxfcnVudGltZV9wbV9nZXQoKSBoZXJlIGFzIGl0IHdhcyB0YWtl bgorCSAqIG9uIG91ciBiZWhhbGYgYnkgdGhlIHJlcXVlc3QgKHNlZSBpOTE1X2dlbV9tYXJrX2J1 c3koKSkgYW5kIGl0IHdpbGwKKwkgKiBub3QgYmUgcmVsaW5xdWlzaGVkIHVudGlsIHRoZSBkZXZp Y2UgaXMgaWRsZSAoc2VlCisJICogaTkxNV9nZW1faWRsZV93b3JrX2hhbmRsZXIoKSkuIEFzIGEg cHJlY2F1dGlvbiwgd2UgbWFrZSBzdXJlCisJICogdGhhdCBhbGwgRUxTUCBhcmUgZHJhaW5lZCBp LmUuIHdlIGhhdmUgcHJvY2Vzc2VkIHRoZSBDU0IsCisJICogYmVmb3JlIGFsbG93aW5nIG91cnNl bHZlcyB0byBpZGxlIGFuZCBjYWxsaW5nIGludGVsX3J1bnRpbWVfcG1fcHV0KCkuCisJICovCisJ R0VNX0JVR19PTighZW5naW5lLT5pOTE1LT5ndC5hd2FrZSk7CiAKLQkJaWYgKGhlYWQgIT0gZXhl Y2xpc3RzLT5jc2JfaGVhZCkgewotCQkJZXhlY2xpc3RzLT5jc2JfaGVhZCA9IGhlYWQ7Ci0JCQl3 cml0ZWwoX01BU0tFRF9GSUVMRChHRU44X0NTQl9SRUFEX1BUUl9NQVNLLCBoZWFkIDw8IDgpLAot CQkJICAgICAgIGRldl9wcml2LT5yZWdzICsgaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19DT05U RVhUX1NUQVRVU19QVFIoZW5naW5lKSkpOwotCQl9Ci0JfQorCS8qCisJICogUHJlZmVyIGRvaW5n IHRlc3RfYW5kX2NsZWFyX2JpdCgpIGFzIGEgdHdvIHN0YWdlIG9wZXJhdGlvbiB0byBhdm9pZAor CSAqIGltcG9zaW5nIHRoZSBjb3N0IG9mIGEgbG9ja2VkIGF0b21pYyB0cmFuc2FjdGlvbiB3aGVu IHN1Ym1pdHRpbmcgYQorCSAqIG5ldyByZXF1ZXN0IChvdXRzaWRlIG9mIHRoZSBjb250ZXh0LXN3 aXRjaCBpbnRlcnJ1cHQpLgorCSAqLworCWlmICh0ZXN0X2JpdChFTkdJTkVfSVJRX0VYRUNMSVNU LCAmZW5naW5lLT5pcnFfcG9zdGVkKSkKKwkJcHJvY2Vzc19jc2IoZW5naW5lKTsKIAotCWlmICgh ZXhlY2xpc3RzX2lzX2FjdGl2ZShleGVjbGlzdHMsIEVYRUNMSVNUU19BQ1RJVkVfUFJFRU1QVCkp CisJaWYgKCFleGVjbGlzdHNfaXNfYWN0aXZlKCZlbmdpbmUtPmV4ZWNsaXN0cywgRVhFQ0xJU1RT X0FDVElWRV9QUkVFTVBUKSkKIAkJZXhlY2xpc3RzX2RlcXVldWUoZW5naW5lKTsKLQotCWlmIChm dykKLQkJaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9wdXQoZGV2X3ByaXYsIGV4ZWNsaXN0cy0+Zndf ZG9tYWlucyk7CiB9CiAKIHN0YXRpYyB2b2lkIHF1ZXVlX3JlcXVlc3Qoc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqZW5naW5lLApAQCAtMTY2Nyw2ICsxNjczLDcgQEAgc3RhdGljIHN0cnVjdCBpOTE1 X3JlcXVlc3QgKgogZXhlY2xpc3RzX3Jlc2V0X3ByZXBhcmUoc3RydWN0IGludGVsX2VuZ2luZV9j cyAqZW5naW5lKQogewogCXN0cnVjdCBpbnRlbF9lbmdpbmVfZXhlY2xpc3RzICogY29uc3QgZXhl Y2xpc3RzID0gJmVuZ2luZS0+ZXhlY2xpc3RzOworCXN0cnVjdCBpOTE1X3JlcXVlc3QgKnJlcXVl c3QsICphY3RpdmU7CiAKIAkvKgogCSAqIFByZXZlbnQgcmVxdWVzdCBzdWJtaXNzaW9uIHRvIHRo ZSBoYXJkd2FyZSB1bnRpbCB3ZSBoYXZlCkBAIC0xNjg4LDcgKzE2OTUsMzkgQEAgZXhlY2xpc3Rz X3Jlc2V0X3ByZXBhcmUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQogCQl0YXNrbGV0 X2tpbGwoJmV4ZWNsaXN0cy0+dGFza2xldCk7CiAJdGFza2xldF9kaXNhYmxlKCZleGVjbGlzdHMt PnRhc2tsZXQpOwogCi0JcmV0dXJuIGk5MTVfZ2VtX2ZpbmRfYWN0aXZlX3JlcXVlc3QoZW5naW5l KTsKKwkvKgorCSAqIFdlIHdhbnQgdG8gZmx1c2ggdGhlIHBlbmRpbmcgY29udGV4dCBzd2l0Y2hl cywgaGF2aW5nIGRpc2FibGVkCisJICogdGhlIHRhc2tsZXQgYWJvdmUsIHdlIGNhbiBhc3N1bWUg ZXhjbHVzaXZlIGFjY2VzcyB0byB0aGUgZXhlY2xpc3RzLgorCSAqIEZvciB0aGlzIGFsbG93cyB1 cyB0byBjYXRjaCB1cCB3aXRoIGFuIGluZmxpZ2h0IHByZWVtcHRpb24gZXZlbnQsCisJICogYW5k IGF2b2lkIGJsYW1pbmcgYW4gaW5ub2NlbnQgcmVxdWVzdCBpZiB0aGUgc3RhbGwgd2FzIGR1ZSB0 byB0aGUKKwkgKiBwcmVlbXB0aW9uIGl0c2VsZi4KKwkgKi8KKwlwcm9jZXNzX2NzYihlbmdpbmUp OworCisJLyoKKwkgKiBUaGUgbGFzdCBhY3RpdmUgcmVxdWVzdCBjYW4gdGhlbiBiZSBubyBsYXRl ciB0aGFuIHRoZSBsYXN0IHJlcXVlc3QKKwkgKiBub3cgaW4gRUxTUFswXS4gU28gc2VhcmNoIGJh Y2t3YXJkcyBmcm9tIHRoZXJlLCBzbyB0aGF0IGlzIHRoZSBHUFUKKwkgKiBoYXMgYWR2YW5jZWQg YmV5b25kIHRoZSBsYXN0IENTQiB1cGRhdGUsIGl0IHdpbGwgYmUgcGFyZG9uZWQuCisJICovCisJ YWN0aXZlID0gTlVMTDsKKwlyZXF1ZXN0ID0gcG9ydF9yZXF1ZXN0KGV4ZWNsaXN0cy0+cG9ydCk7 CisJaWYgKHJlcXVlc3QpIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQlzcGluX2xvY2tf aXJxc2F2ZSgmZW5naW5lLT50aW1lbGluZS0+bG9jaywgZmxhZ3MpOworCQlsaXN0X2Zvcl9lYWNo X2VudHJ5X2Zyb21fcmV2ZXJzZShyZXF1ZXN0LAorCQkJCQkJICZlbmdpbmUtPnRpbWVsaW5lLT5y ZXF1ZXN0cywKKwkJCQkJCSBsaW5rKSB7CisJCQlpZiAoX19pOTE1X3JlcXVlc3RfY29tcGxldGVk KHJlcXVlc3QsCisJCQkJCQkgICAgIHJlcXVlc3QtPmdsb2JhbF9zZXFubykpCisJCQkJYnJlYWs7 CisKKwkJCWFjdGl2ZSA9IHJlcXVlc3Q7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm ZW5naW5lLT50aW1lbGluZS0+bG9jaywgZmxhZ3MpOworCX0KKworCXJldHVybiBhY3RpdmU7CiB9 CiAKIHN0YXRpYyB2b2lkIHJlc2V0X2lycShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUp Ci0tIAoyLjE2LjIKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9y ZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdm eAo=