From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH 20/43] drm/i915: Make context pinning part of intel_context_ops Date: Wed, 6 Mar 2019 14:24:54 +0000 Message-ID: <20190306142517.22558-21-chris@chris-wilson.co.uk> References: <20190306142517.22558-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from fireflyinternet.com (mail.fireflyinternet.com [109.228.58.192]) by gabe.freedesktop.org (Postfix) with ESMTPS id D1F156E06E for ; Wed, 6 Mar 2019 14:27:16 +0000 (UTC) In-Reply-To: <20190306142517.22558-1-chris@chris-wilson.co.uk> 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: matthew.auld@intel.com List-Id: intel-gfx@lists.freedesktop.org UHVzaCB0aGUgaW50ZWxfY29udGV4dCBwaW4gY2FsbGJhY2sgZG93biBmcm9tIGludGVsX2VuZ2lu ZV9jcyBvbnRvIHRoZQpjb250ZXh0IGl0c2VsZiBieSB2aXJ0dWUgb2YgaGF2aW5nIGEgY2VudHJh bCBjYWxsZXIgZm9yCmludGVsX2NvbnRleHRfcGluKCkgYmVpbmcgYWJsZSB0byBsb29rdXAgdGhl IGludGVsX2NvbnRleHQgaXRzZWxmLgoKU2lnbmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJp c0BjaHJpcy13aWxzb24uY28udWs+ClJldmlld2VkLWJ5OiBUdnJ0a28gVXJzdWxpbiA8dHZydGtv LnVyc3VsaW5AaW50ZWwuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NvbnRl eHQuYyAgICAgICAgIHwgIDM0ICsrKysrKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfY29u dGV4dC5oICAgICAgICAgfCAgIDcgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NvbnRl eHRfdHlwZXMuaCAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2VuZ2luZV90 eXBlcy5oICAgIHwgICAyIC0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jICAgICAg ICAgICAgIHwgMTE0ICsrKysrKysrLS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX3JpbmdidWZmZXIuYyAgICAgIHwgIDQ1ICsrLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkx NS9zZWxmdGVzdHMvbW9ja19lbmdpbmUuYyB8ICAzMiArLS0tLS0KIDcgZmlsZXMgY2hhbmdlZCwg OTggaW5zZXJ0aW9ucygrKSwgMTM3IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2NvbnRleHQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2NvbnRleHQuYwppbmRleCBkMDRhMWY1MWE5MGMuLjRjMWRhY2I2OWY1MSAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfY29udGV4dC5jCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2NvbnRleHQuYwpAQCAtMTI2LDYgKzEyNiw0MCBAQCBpbnRlbF9jb250ZXh0 X2luc3RhbmNlKHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgsCiAJcmV0dXJuIHBvczsKIH0K IAorc3RydWN0IGludGVsX2NvbnRleHQgKgoraW50ZWxfY29udGV4dF9waW4oc3RydWN0IGk5MTVf Z2VtX2NvbnRleHQgKmN0eCwKKwkJICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCit7 CisJc3RydWN0IGludGVsX2NvbnRleHQgKmNlOworCWludCBlcnI7CisKKwlsb2NrZGVwX2Fzc2Vy dF9oZWxkKCZjdHgtPmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOworCisJY2UgPSBpbnRlbF9jb250 ZXh0X2luc3RhbmNlKGN0eCwgZW5naW5lKTsKKwlpZiAoSVNfRVJSKGNlKSkKKwkJcmV0dXJuIGNl OworCisJaWYgKHVubGlrZWx5KCFjZS0+cGluX2NvdW50KyspKSB7CisJCWVyciA9IGNlLT5vcHMt PnBpbihjZSk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl91bnBpbjsKKworCQltdXRleF9sb2Nr KCZjdHgtPm11dGV4KTsKKwkJbGlzdF9hZGQoJmNlLT5hY3RpdmVfbGluaywgJmN0eC0+YWN0aXZl X2VuZ2luZXMpOworCQltdXRleF91bmxvY2soJmN0eC0+bXV0ZXgpOworCisJCWk5MTVfZ2VtX2Nv bnRleHRfZ2V0KGN0eCk7CisJCUdFTV9CVUdfT04oY2UtPmdlbV9jb250ZXh0ICE9IGN0eCk7CisJ fQorCUdFTV9CVUdfT04oIWNlLT5waW5fY291bnQpOyAvKiBubyBvdmVyZmxvdyEgKi8KKworCXJl dHVybiBjZTsKKworZXJyX3VucGluOgorCWNlLT5waW5fY291bnQgPSAwOworCXJldHVybiBFUlJf UFRSKGVycik7Cit9CisKIHN0YXRpYyB2b2lkIGludGVsX2NvbnRleHRfcmV0aXJlKHN0cnVjdCBp OTE1X2FjdGl2ZV9yZXF1ZXN0ICphY3RpdmUsCiAJCQkJIHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJx KQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfY29udGV4dC5oIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfY29udGV4dC5oCmluZGV4IDJjOTEwNjI4YWNhZi4u ZWEyMTQ3Mzg5MWY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9jb250 ZXh0LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfY29udGV4dC5oCkBAIC00OCwx MSArNDgsOCBAQCBfX2ludGVsX2NvbnRleHRfaW5zZXJ0KHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0 ICpjdHgsCiB2b2lkCiBfX2ludGVsX2NvbnRleHRfcmVtb3ZlKHN0cnVjdCBpbnRlbF9jb250ZXh0 ICpjZSk7CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGludGVsX2NvbnRleHQgKgotaW50ZWxfY29u dGV4dF9waW4oc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwgc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lKQotewotCXJldHVybiBlbmdpbmUtPmNvbnRleHRfcGluKGVuZ2luZSwgY3R4 KTsKLX0KK3N0cnVjdCBpbnRlbF9jb250ZXh0ICoKK2ludGVsX2NvbnRleHRfcGluKHN0cnVjdCBp OTE1X2dlbV9jb250ZXh0ICpjdHgsIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7CiAK IHN0YXRpYyBpbmxpbmUgdm9pZCBfX2ludGVsX2NvbnRleHRfcGluKHN0cnVjdCBpbnRlbF9jb250 ZXh0ICpjZSkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NvbnRl eHRfdHlwZXMuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NvbnRleHRfdHlwZXMuaApp bmRleCA4NTdmNWMzMzUzMjQuLjgwNGZhOTNkZTg1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfY29udGV4dF90eXBlcy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2NvbnRleHRfdHlwZXMuaApAQCAtMTksNiArMTksNyBAQCBzdHJ1Y3QgaW50ZWxfY29u dGV4dDsKIHN0cnVjdCBpbnRlbF9yaW5nOwogCiBzdHJ1Y3QgaW50ZWxfY29udGV4dF9vcHMgewor CWludCAoKnBpbikoc3RydWN0IGludGVsX2NvbnRleHQgKmNlKTsKIAl2b2lkICgqdW5waW4pKHN0 cnVjdCBpbnRlbF9jb250ZXh0ICpjZSk7CiAJdm9pZCAoKmRlc3Ryb3kpKHN0cnVjdCBpbnRlbF9j b250ZXh0ICpjZSk7CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf ZW5naW5lX3R5cGVzLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9lbmdpbmVfdHlwZXMu aAppbmRleCA2YTU3MGU0ZTUxYzMuLjIxZjMyNzVjYzAwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZW5naW5lX3R5cGVzLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfZW5naW5lX3R5cGVzLmgKQEAgLTM1Nyw4ICszNTcsNiBAQCBzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzIHsKIAl2b2lkCQkoKnNldF9kZWZhdWx0X3N1Ym1pc3Npb24pKHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKmVuZ2luZSk7CiAKIAljb25zdCBzdHJ1Y3QgaW50ZWxfY29udGV4dF9vcHMg KmNvcHM7Ci0Jc3RydWN0IGludGVsX2NvbnRleHQgKigqY29udGV4dF9waW4pKHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKmVuZ2luZSwKLQkJCQkJICAgICBzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAq Y3R4KTsKIAogCWludAkJKCpyZXF1ZXN0X2FsbG9jKShzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSk7 CiAJaW50CQkoKmluaXRfY29udGV4dCkoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEpOwpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9scmMuYwppbmRleCA5MjMxZWZiN2E4MmQuLjc5MTA3YWI3NzFkOCAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfbHJjLmMKQEAgLTE2Niw5ICsxNjYsOCBAQAogCiAjZGVmaW5lIEFDVElW RV9QUklPUklUWSAoSTkxNV9QUklPUklUWV9ORVdDTElFTlQgfCBJOTE1X1BSSU9SSVRZX05PU0VN QVBIT1JFKQogCi1zdGF0aWMgaW50IGV4ZWNsaXN0c19jb250ZXh0X2RlZmVycmVkX2FsbG9jKHN0 cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgsCi0JCQkJCSAgICBzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUsCi0JCQkJCSAgICBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UpOworc3RhdGlj IGludCBleGVjbGlzdHNfY29udGV4dF9kZWZlcnJlZF9hbGxvYyhzdHJ1Y3QgaW50ZWxfY29udGV4 dCAqY2UsCisJCQkJCSAgICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpOwogc3RhdGlj IHZvaWQgZXhlY2xpc3RzX2luaXRfcmVnX3N0YXRlKHUzMiAqcmVnX3N0YXRlLAogCQkJCSAgICAg c3RydWN0IGludGVsX2NvbnRleHQgKmNlLAogCQkJCSAgICAgc3RydWN0IGludGVsX2VuZ2luZV9j cyAqZW5naW5lLApAQCAtMzMwLDExICszMjksMTAgQEAgYXNzZXJ0X3ByaW9yaXR5X3F1ZXVlKGNv bnN0IHN0cnVjdCBpOTE1X3JlcXVlc3QgKnByZXYsCiAgKiBlbmdpbmUgaW5mbywgU1cgY29udGV4 dCBJRCBhbmQgU1cgY291bnRlciBuZWVkIHRvIGZvcm0gYSB1bmlxdWUgbnVtYmVyCiAgKiAoQ29u dGV4dCBJRCkgcGVyIGxyYy4KICAqLwotc3RhdGljIHZvaWQKLWludGVsX2xyX2NvbnRleHRfZGVz Y3JpcHRvcl91cGRhdGUoc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwKLQkJCQkgICBzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCi0JCQkJICAgc3RydWN0IGludGVsX2NvbnRleHQg KmNlKQorc3RhdGljIHU2NAorbHJjX2Rlc2NyaXB0b3Ioc3RydWN0IGludGVsX2NvbnRleHQgKmNl LCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiB7CisJc3RydWN0IGk5MTVfZ2VtX2Nv bnRleHQgKmN0eCA9IGNlLT5nZW1fY29udGV4dDsKIAl1NjQgZGVzYzsKIAogCUJVSUxEX0JVR19P TihNQVhfQ09OVEVYVF9IV19JRCA+IChCSVQoR0VOOF9DVFhfSURfV0lEVEgpKSk7CkBAIC0zNTIs NyArMzUwLDcgQEAgaW50ZWxfbHJfY29udGV4dF9kZXNjcmlwdG9yX3VwZGF0ZShzdHJ1Y3QgaTkx NV9nZW1fY29udGV4dCAqY3R4LAogCSAqIENvbnNpZGVyIHVwZGF0aW5nIG9hX2dldF9yZW5kZXJf Y3R4X2lkIGluIGk5MTVfcGVyZi5jIHdoZW4gY2hhbmdpbmcKIAkgKiBhbnl0aGluZyBiZWxvdy4K IAkgKi8KLQlpZiAoSU5URUxfR0VOKGN0eC0+aTkxNSkgPj0gMTEpIHsKKwlpZiAoSU5URUxfR0VO KGVuZ2luZS0+aTkxNSkgPj0gMTEpIHsKIAkJR0VNX0JVR19PTihjdHgtPmh3X2lkID49IEJJVChH RU4xMV9TV19DVFhfSURfV0lEVEgpKTsKIAkJZGVzYyB8PSAodTY0KWN0eC0+aHdfaWQgPDwgR0VO MTFfU1dfQ1RYX0lEX1NISUZUOwogCQkJCQkJCQkvKiBiaXRzIDM3LTQ3ICovCkBAIC0zNjksNyAr MzY3LDcgQEAgaW50ZWxfbHJfY29udGV4dF9kZXNjcmlwdG9yX3VwZGF0ZShzdHJ1Y3QgaTkxNV9n ZW1fY29udGV4dCAqY3R4LAogCQlkZXNjIHw9ICh1NjQpY3R4LT5od19pZCA8PCBHRU44X0NUWF9J RF9TSElGVDsJLyogYml0cyAzMi01MiAqLwogCX0KIAotCWNlLT5scmNfZGVzYyA9IGRlc2M7CisJ cmV0dXJuIGRlc2M7CiB9CiAKIHN0YXRpYyB2b2lkIHVud2luZF93YV90YWlsKHN0cnVjdCBpOTE1 X3JlcXVlc3QgKnJxKQpAQCAtMTI5MCw3ICsxMjg4LDcgQEAgc3RhdGljIHZvaWQgZXhlY2xpc3Rz X2NvbnRleHRfdW5waW4oc3RydWN0IGludGVsX2NvbnRleHQgKmNlKQogCWk5MTVfZ2VtX2NvbnRl eHRfcHV0KGNlLT5nZW1fY29udGV4dCk7CiB9CiAKLXN0YXRpYyBpbnQgX19jb250ZXh0X3Bpbihz dHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4LCBzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKK3N0YXRp YyBpbnQgX19jb250ZXh0X3BpbihzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKIHsKIAl1bnNpZ25lZCBp bnQgZmxhZ3M7CiAJaW50IGVycjsKQEAgLTEzMTMsMTEgKzEzMTEsMTQgQEAgc3RhdGljIGludCBf X2NvbnRleHRfcGluKHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgsIHN0cnVjdCBpOTE1X3Zt YSAqdm1hKQogfQogCiBzdGF0aWMgdm9pZAotX19leGVjbGlzdHNfdXBkYXRlX3JlZ19zdGF0ZShz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCi0JCQkgICAgIHN0cnVjdCBpbnRlbF9jb250 ZXh0ICpjZSkKK19fZXhlY2xpc3RzX3VwZGF0ZV9yZWdfc3RhdGUoc3RydWN0IGludGVsX2NvbnRl eHQgKmNlLAorCQkJICAgICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiB7Ci0JdTMy ICpyZWdzID0gY2UtPmxyY19yZWdfc3RhdGU7CiAJc3RydWN0IGludGVsX3JpbmcgKnJpbmcgPSBj ZS0+cmluZzsKKwl1MzIgKnJlZ3MgPSBjZS0+bHJjX3JlZ19zdGF0ZTsKKworCUdFTV9CVUdfT04o IWludGVsX3Jpbmdfb2Zmc2V0X3ZhbGlkKHJpbmcsIHJpbmctPmhlYWQpKTsKKwlHRU1fQlVHX09O KCFpbnRlbF9yaW5nX29mZnNldF92YWxpZChyaW5nLCByaW5nLT50YWlsKSk7CiAKIAlyZWdzW0NU WF9SSU5HX0JVRkZFUl9TVEFSVCArIDFdID0gaTkxNV9nZ3R0X29mZnNldChyaW5nLT52bWEpOwog CXJlZ3NbQ1RYX1JJTkdfSEVBRCArIDFdID0gcmluZy0+aGVhZDsKQEAgLTEzMjksMjUgKzEzMzAs MjYgQEAgX19leGVjbGlzdHNfdXBkYXRlX3JlZ19zdGF0ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUsCiAJCQlnZW44X21ha2VfcnBjcyhlbmdpbmUtPmk5MTUsICZjZS0+c3NldSk7CiB9 CiAKLXN0YXRpYyBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqCi1fX2V4ZWNsaXN0c19jb250ZXh0X3Bp bihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCi0JCQlzdHJ1Y3QgaTkxNV9nZW1fY29u dGV4dCAqY3R4LAotCQkJc3RydWN0IGludGVsX2NvbnRleHQgKmNlKQorc3RhdGljIGludAorX19l eGVjbGlzdHNfY29udGV4dF9waW4oc3RydWN0IGludGVsX2NvbnRleHQgKmNlLAorCQkJc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQogewogCXZvaWQgKnZhZGRyOwogCWludCByZXQ7CiAK LQlyZXQgPSBleGVjbGlzdHNfY29udGV4dF9kZWZlcnJlZF9hbGxvYyhjdHgsIGVuZ2luZSwgY2Up OworCUdFTV9CVUdfT04oIWNlLT5nZW1fY29udGV4dC0+cHBndHQpOworCisJcmV0ID0gZXhlY2xp c3RzX2NvbnRleHRfZGVmZXJyZWRfYWxsb2MoY2UsIGVuZ2luZSk7CiAJaWYgKHJldCkKIAkJZ290 byBlcnI7CiAJR0VNX0JVR19PTighY2UtPnN0YXRlKTsKIAotCXJldCA9IF9fY29udGV4dF9waW4o Y3R4LCBjZS0+c3RhdGUpOworCXJldCA9IF9fY29udGV4dF9waW4oY2UtPnN0YXRlKTsKIAlpZiAo cmV0KQogCQlnb3RvIGVycjsKIAogCXZhZGRyID0gaTkxNV9nZW1fb2JqZWN0X3Bpbl9tYXAoY2Ut PnN0YXRlLT5vYmosCi0JCQkJCWk5MTVfY29oZXJlbnRfbWFwX3R5cGUoY3R4LT5pOTE1KSB8CisJ CQkJCWk5MTVfY29oZXJlbnRfbWFwX3R5cGUoZW5naW5lLT5pOTE1KSB8CiAJCQkJCUk5MTVfTUFQ X09WRVJSSURFKTsKIAlpZiAoSVNfRVJSKHZhZGRyKSkgewogCQlyZXQgPSBQVFJfRVJSKHZhZGRy KTsKQEAgLTEzNTgsMjYgKzEzNjAsMTYgQEAgX19leGVjbGlzdHNfY29udGV4dF9waW4oc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAogCWlmIChyZXQpCiAJCWdvdG8gdW5waW5fbWFwOwog Ci0JcmV0ID0gaTkxNV9nZW1fY29udGV4dF9waW5faHdfaWQoY3R4KTsKKwlyZXQgPSBpOTE1X2dl bV9jb250ZXh0X3Bpbl9od19pZChjZS0+Z2VtX2NvbnRleHQpOwogCWlmIChyZXQpCiAJCWdvdG8g dW5waW5fcmluZzsKIAotCWludGVsX2xyX2NvbnRleHRfZGVzY3JpcHRvcl91cGRhdGUoY3R4LCBl bmdpbmUsIGNlKTsKLQotCUdFTV9CVUdfT04oIWludGVsX3Jpbmdfb2Zmc2V0X3ZhbGlkKGNlLT5y aW5nLCBjZS0+cmluZy0+aGVhZCkpOwotCisJY2UtPmxyY19kZXNjID0gbHJjX2Rlc2NyaXB0b3Io Y2UsIGVuZ2luZSk7CiAJY2UtPmxyY19yZWdfc3RhdGUgPSB2YWRkciArIExSQ19TVEFURV9QTiAq IFBBR0VfU0laRTsKLQotCV9fZXhlY2xpc3RzX3VwZGF0ZV9yZWdfc3RhdGUoZW5naW5lLCBjZSk7 CisJX19leGVjbGlzdHNfdXBkYXRlX3JlZ19zdGF0ZShjZSwgZW5naW5lKTsKIAogCWNlLT5zdGF0 ZS0+b2JqLT5waW5fZ2xvYmFsKys7Ci0KLQltdXRleF9sb2NrKCZjdHgtPm11dGV4KTsKLQlsaXN0 X2FkZCgmY2UtPmFjdGl2ZV9saW5rLCAmY3R4LT5hY3RpdmVfZW5naW5lcyk7Ci0JbXV0ZXhfdW5s b2NrKCZjdHgtPm11dGV4KTsKLQotCWk5MTVfZ2VtX2NvbnRleHRfZ2V0KGN0eCk7Ci0JcmV0dXJu IGNlOworCXJldHVybiAwOwogCiB1bnBpbl9yaW5nOgogCWludGVsX3JpbmdfdW5waW4oY2UtPnJp bmcpOwpAQCAtMTM4NiwzMSArMTM3OCwxNiBAQCBfX2V4ZWNsaXN0c19jb250ZXh0X3BpbihzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCiB1bnBpbl92bWE6CiAJX19pOTE1X3ZtYV91bnBp bihjZS0+c3RhdGUpOwogZXJyOgotCWNlLT5waW5fY291bnQgPSAwOwotCXJldHVybiBFUlJfUFRS KHJldCk7CisJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHN0cnVjdCBpbnRlbF9jb250ZXh0ICoK LWV4ZWNsaXN0c19jb250ZXh0X3BpbihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCi0J CSAgICAgIHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgpCitzdGF0aWMgaW50IGV4ZWNsaXN0 c19jb250ZXh0X3BpbihzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UpCiB7Ci0Jc3RydWN0IGludGVs X2NvbnRleHQgKmNlOwotCi0JY2UgPSBpbnRlbF9jb250ZXh0X2luc3RhbmNlKGN0eCwgZW5naW5l KTsKLQlpZiAoSVNfRVJSKGNlKSkKLQkJcmV0dXJuIGNlOwotCi0JbG9ja2RlcF9hc3NlcnRfaGVs ZCgmY3R4LT5pOTE1LT5kcm0uc3RydWN0X211dGV4KTsKLQlHRU1fQlVHX09OKCFjdHgtPnBwZ3R0 KTsKLQotCWlmIChsaWtlbHkoY2UtPnBpbl9jb3VudCsrKSkKLQkJcmV0dXJuIGNlOwotCUdFTV9C VUdfT04oIWNlLT5waW5fY291bnQpOyAvKiBubyBvdmVyZmxvdyBwbGVhc2UhICovCi0KLQlyZXR1 cm4gX19leGVjbGlzdHNfY29udGV4dF9waW4oZW5naW5lLCBjdHgsIGNlKTsKKwlyZXR1cm4gX19l eGVjbGlzdHNfY29udGV4dF9waW4oY2UsIGNlLT5lbmdpbmUpOwogfQogCiBzdGF0aWMgY29uc3Qg c3RydWN0IGludGVsX2NvbnRleHRfb3BzIGV4ZWNsaXN0c19jb250ZXh0X29wcyA9IHsKKwkucGlu ID0gZXhlY2xpc3RzX2NvbnRleHRfcGluLAogCS51bnBpbiA9IGV4ZWNsaXN0c19jb250ZXh0X3Vu cGluLAogCS5kZXN0cm95ID0gZXhlY2xpc3RzX2NvbnRleHRfZGVzdHJveSwKIH07CkBAIC0yMDM0 LDcgKzIwMTEsNyBAQCBzdGF0aWMgdm9pZCBleGVjbGlzdHNfcmVzZXQoc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqZW5naW5lLCBib29sIHN0YWxsZWQpCiAJaW50ZWxfcmluZ191cGRhdGVfc3BhY2Uo cnEtPnJpbmcpOwogCiAJZXhlY2xpc3RzX2luaXRfcmVnX3N0YXRlKHJlZ3MsIHJxLT5od19jb250 ZXh0LCBlbmdpbmUsIHJxLT5yaW5nKTsKLQlfX2V4ZWNsaXN0c191cGRhdGVfcmVnX3N0YXRlKGVu Z2luZSwgcnEtPmh3X2NvbnRleHQpOworCV9fZXhlY2xpc3RzX3VwZGF0ZV9yZWdfc3RhdGUocnEt Pmh3X2NvbnRleHQsIGVuZ2luZSk7CiAKIG91dF91bmxvY2s6CiAJc3Bpbl91bmxvY2tfaXJxcmVz dG9yZSgmZW5naW5lLT50aW1lbGluZS5sb2NrLCBmbGFncyk7CkBAIC0yMzU5LDcgKzIzMzYsNiBA QCBsb2dpY2FsX3JpbmdfZGVmYXVsdF92ZnVuY3Moc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5n aW5lKQogCWVuZ2luZS0+cmVzZXQuZmluaXNoID0gZXhlY2xpc3RzX3Jlc2V0X2ZpbmlzaDsKIAog CWVuZ2luZS0+Y29wcyA9ICZleGVjbGlzdHNfY29udGV4dF9vcHM7Ci0JZW5naW5lLT5jb250ZXh0 X3BpbiA9IGV4ZWNsaXN0c19jb250ZXh0X3BpbjsKIAllbmdpbmUtPnJlcXVlc3RfYWxsb2MgPSBl eGVjbGlzdHNfcmVxdWVzdF9hbGxvYzsKIAogCWVuZ2luZS0+ZW1pdF9mbHVzaCA9IGdlbjhfZW1p dF9mbHVzaDsKQEAgLTI4MzYsOSArMjgxMiwxNiBAQCBwb3B1bGF0ZV9scl9jb250ZXh0KHN0cnVj dCBpbnRlbF9jb250ZXh0ICpjZSwKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGV4ZWNs aXN0c19jb250ZXh0X2RlZmVycmVkX2FsbG9jKHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgs Ci0JCQkJCSAgICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCi0JCQkJCSAgICBzdHJ1 Y3QgaW50ZWxfY29udGV4dCAqY2UpCitzdGF0aWMgc3RydWN0IGk5MTVfdGltZWxpbmUgKmdldF90 aW1lbGluZShzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4KQoreworCWlmIChjdHgtPnRpbWVs aW5lKQorCQlyZXR1cm4gaTkxNV90aW1lbGluZV9nZXQoY3R4LT50aW1lbGluZSk7CisJZWxzZQor CQlyZXR1cm4gaTkxNV90aW1lbGluZV9jcmVhdGUoY3R4LT5pOTE1LCBjdHgtPm5hbWUsIE5VTEwp OworfQorCitzdGF0aWMgaW50IGV4ZWNsaXN0c19jb250ZXh0X2RlZmVycmVkX2FsbG9jKHN0cnVj dCBpbnRlbF9jb250ZXh0ICpjZSwKKwkJCQkJICAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZSkKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqY3R4X29iajsKIAlzdHJ1Y3Qg aTkxNV92bWEgKnZtYTsKQEAgLTI4NTgsMjYgKzI4NDEsMjUgQEAgc3RhdGljIGludCBleGVjbGlz dHNfY29udGV4dF9kZWZlcnJlZF9hbGxvYyhzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4LAog CSAqLwogCWNvbnRleHRfc2l6ZSArPSBMUkNfSEVBREVSX1BBR0VTICogUEFHRV9TSVpFOwogCi0J Y3R4X29iaiA9IGk5MTVfZ2VtX29iamVjdF9jcmVhdGUoY3R4LT5pOTE1LCBjb250ZXh0X3NpemUp OworCWN0eF9vYmogPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlKGVuZ2luZS0+aTkxNSwgY29udGV4 dF9zaXplKTsKIAlpZiAoSVNfRVJSKGN0eF9vYmopKQogCQlyZXR1cm4gUFRSX0VSUihjdHhfb2Jq KTsKIAotCXZtYSA9IGk5MTVfdm1hX2luc3RhbmNlKGN0eF9vYmosICZjdHgtPmk5MTUtPmdndHQu dm0sIE5VTEwpOworCXZtYSA9IGk5MTVfdm1hX2luc3RhbmNlKGN0eF9vYmosICZlbmdpbmUtPmk5 MTUtPmdndHQudm0sIE5VTEwpOwogCWlmIChJU19FUlIodm1hKSkgewogCQlyZXQgPSBQVFJfRVJS KHZtYSk7CiAJCWdvdG8gZXJyb3JfZGVyZWZfb2JqOwogCX0KIAotCWlmIChjdHgtPnRpbWVsaW5l KQotCQl0aW1lbGluZSA9IGk5MTVfdGltZWxpbmVfZ2V0KGN0eC0+dGltZWxpbmUpOwotCWVsc2UK LQkJdGltZWxpbmUgPSBpOTE1X3RpbWVsaW5lX2NyZWF0ZShjdHgtPmk5MTUsIGN0eC0+bmFtZSwg TlVMTCk7CisJdGltZWxpbmUgPSBnZXRfdGltZWxpbmUoY2UtPmdlbV9jb250ZXh0KTsKIAlpZiAo SVNfRVJSKHRpbWVsaW5lKSkgewogCQlyZXQgPSBQVFJfRVJSKHRpbWVsaW5lKTsKIAkJZ290byBl cnJvcl9kZXJlZl9vYmo7CiAJfQogCi0JcmluZyA9IGludGVsX2VuZ2luZV9jcmVhdGVfcmluZyhl bmdpbmUsIHRpbWVsaW5lLCBjdHgtPnJpbmdfc2l6ZSk7CisJcmluZyA9IGludGVsX2VuZ2luZV9j cmVhdGVfcmluZyhlbmdpbmUsCisJCQkJCXRpbWVsaW5lLAorCQkJCQljZS0+Z2VtX2NvbnRleHQt PnJpbmdfc2l6ZSk7CiAJaTkxNV90aW1lbGluZV9wdXQodGltZWxpbmUpOwogCWlmIChJU19FUlIo cmluZykpIHsKIAkJcmV0ID0gUFRSX0VSUihyaW5nKTsKQEAgLTI5MjIsNyArMjkwNCw3IEBAIHZv aWQgaW50ZWxfbHJfY29udGV4dF9yZXN1bWUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUp CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoY2UsICZjdHgtPmFjdGl2ZV9lbmdpbmVzLCBhY3RpdmVf bGluaykgewogCQkJR0VNX0JVR19PTighY2UtPnJpbmcpOwogCQkJaW50ZWxfcmluZ19yZXNldChj ZS0+cmluZywgMCk7Ci0JCQlfX2V4ZWNsaXN0c191cGRhdGVfcmVnX3N0YXRlKGNlLT5lbmdpbmUs IGNlKTsKKwkJCV9fZXhlY2xpc3RzX3VwZGF0ZV9yZWdfc3RhdGUoY2UsIGNlLT5lbmdpbmUpOwog CQl9CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1 ZmZlci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jCmluZGV4IDYw MmJhYmJkNzM3Zi4uZDA2OTA4Yzk1ODRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9yaW5nYnVmZmVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmlu Z2J1ZmZlci5jCkBAIC0xNTA5LDExICsxNTA5LDkgQEAgYWxsb2NfY29udGV4dF92bWEoc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQogCXJldHVybiBFUlJfUFRSKGVycik7CiB9CiAKLXN0 YXRpYyBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqCi1fX3JpbmdfY29udGV4dF9waW4oc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lLAotCQkgICBzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4 LAotCQkgICBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UpCitzdGF0aWMgaW50IHJpbmdfY29udGV4 dF9waW4oc3RydWN0IGludGVsX2NvbnRleHQgKmNlKQogeworCXN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKmVuZ2luZSA9IGNlLT5lbmdpbmU7CiAJaW50IGVycjsKIAogCS8qIE9uZSByaW5nYnVmZmVy IHRvIHJ1bGUgdGhlbSBhbGwgKi8KQEAgLTE1MjQsNTUgKzE1MjIsMjkgQEAgX19yaW5nX2NvbnRl eHRfcGluKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKIAkJc3RydWN0IGk5MTVfdm1h ICp2bWE7CiAKIAkJdm1hID0gYWxsb2NfY29udGV4dF92bWEoZW5naW5lKTsKLQkJaWYgKElTX0VS Uih2bWEpKSB7Ci0JCQllcnIgPSBQVFJfRVJSKHZtYSk7Ci0JCQlnb3RvIGVycjsKLQkJfQorCQlp ZiAoSVNfRVJSKHZtYSkpCisJCQlyZXR1cm4gUFRSX0VSUih2bWEpOwogCiAJCWNlLT5zdGF0ZSA9 IHZtYTsKIAl9CiAKIAllcnIgPSBfX2NvbnRleHRfcGluKGNlKTsKIAlpZiAoZXJyKQotCQlnb3Rv IGVycjsKKwkJcmV0dXJuIGVycjsKIAogCWVyciA9IF9fY29udGV4dF9waW5fcHBndHQoY2UtPmdl bV9jb250ZXh0KTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl91bnBpbjsKIAotCW11dGV4X2xvY2so JmN0eC0+bXV0ZXgpOwotCWxpc3RfYWRkKCZjZS0+YWN0aXZlX2xpbmssICZjdHgtPmFjdGl2ZV9l bmdpbmVzKTsKLQltdXRleF91bmxvY2soJmN0eC0+bXV0ZXgpOwotCi0JaTkxNV9nZW1fY29udGV4 dF9nZXQoY3R4KTsKLQlyZXR1cm4gY2U7CisJcmV0dXJuIDA7CiAKIGVycl91bnBpbjoKIAlfX2Nv bnRleHRfdW5waW4oY2UpOwotZXJyOgotCWNlLT5waW5fY291bnQgPSAwOwotCXJldHVybiBFUlJf UFRSKGVycik7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqCi1yaW5nX2NvbnRl eHRfcGluKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgc3RydWN0IGk5MTVfZ2VtX2Nv bnRleHQgKmN0eCkKLXsKLQlzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2U7Ci0KLQljZSA9IGludGVs X2NvbnRleHRfaW5zdGFuY2UoY3R4LCBlbmdpbmUpOwotCWlmIChJU19FUlIoY2UpKQotCQlyZXR1 cm4gY2U7Ci0KLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZjdHgtPmk5MTUtPmRybS5zdHJ1Y3RfbXV0 ZXgpOwotCi0JaWYgKGxpa2VseShjZS0+cGluX2NvdW50KyspKQotCQlyZXR1cm4gY2U7Ci0JR0VN X0JVR19PTighY2UtPnBpbl9jb3VudCk7IC8qIG5vIG92ZXJmbG93IHBsZWFzZSEgKi8KLQotCXJl dHVybiBfX3JpbmdfY29udGV4dF9waW4oZW5naW5lLCBjdHgsIGNlKTsKKwlyZXR1cm4gZXJyOwog fQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2NvbnRleHRfb3BzIHJpbmdfY29udGV4dF9v cHMgPSB7CisJLnBpbiA9IHJpbmdfY29udGV4dF9waW4sCiAJLnVucGluID0gcmluZ19jb250ZXh0 X3VucGluLAogCS5kZXN0cm95ID0gcmluZ19jb250ZXh0X2Rlc3Ryb3ksCiB9OwpAQCAtMjI4Myw3 ICsyMjU1LDYgQEAgc3RhdGljIHZvaWQgaW50ZWxfcmluZ19kZWZhdWx0X3ZmdW5jcyhzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJZW5naW5lLT5yZXNldC5maW5pc2ggPSByZXNl dF9maW5pc2g7CiAKIAllbmdpbmUtPmNvcHMgPSAmcmluZ19jb250ZXh0X29wczsKLQllbmdpbmUt PmNvbnRleHRfcGluID0gcmluZ19jb250ZXh0X3BpbjsKIAllbmdpbmUtPnJlcXVlc3RfYWxsb2Mg PSByaW5nX3JlcXVlc3RfYWxsb2M7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvc2VsZnRlc3RzL21vY2tfZW5naW5lLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxm dGVzdHMvbW9ja19lbmdpbmUuYwppbmRleCBkOWJiYjEwMjY3N2YuLmU0ODMzMjlmZDUzMyAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL21vY2tfZW5naW5lLmMKKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL21vY2tfZW5naW5lLmMKQEAgLTEzNyw0 MSArMTM3LDIwIEBAIHN0YXRpYyB2b2lkIG1vY2tfY29udGV4dF9kZXN0cm95KHN0cnVjdCBpbnRl bF9jb250ZXh0ICpjZSkKIAkJbW9ja19yaW5nX2ZyZWUoY2UtPnJpbmcpOwogfQogCi1zdGF0aWMg c3RydWN0IGludGVsX2NvbnRleHQgKgotbW9ja19jb250ZXh0X3BpbihzdHJ1Y3QgaW50ZWxfZW5n aW5lX2NzICplbmdpbmUsCi0JCSBzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4KQorc3RhdGlj IGludCBtb2NrX2NvbnRleHRfcGluKHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSkKIHsKLQlzdHJ1 Y3QgaW50ZWxfY29udGV4dCAqY2U7Ci0JaW50IGVyciA9IC1FTk9NRU07Ci0KLQljZSA9IGludGVs X2NvbnRleHRfaW5zdGFuY2UoY3R4LCBlbmdpbmUpOwotCWlmIChJU19FUlIoY2UpKQotCQlyZXR1 cm4gY2U7Ci0KLQlpZiAoY2UtPnBpbl9jb3VudCsrKQotCQlyZXR1cm4gY2U7Ci0KIAlpZiAoIWNl LT5yaW5nKSB7Ci0JCWNlLT5yaW5nID0gbW9ja19yaW5nKGVuZ2luZSk7CisJCWNlLT5yaW5nID0g bW9ja19yaW5nKGNlLT5lbmdpbmUpOwogCQlpZiAoIWNlLT5yaW5nKQotCQkJZ290byBlcnI7CisJ CQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAltb2NrX3RpbWVsaW5lX3BpbihjZS0+cmluZy0+dGlt ZWxpbmUpOwotCi0JbXV0ZXhfbG9jaygmY3R4LT5tdXRleCk7Ci0JbGlzdF9hZGQoJmNlLT5hY3Rp dmVfbGluaywgJmN0eC0+YWN0aXZlX2VuZ2luZXMpOwotCW11dGV4X3VubG9jaygmY3R4LT5tdXRl eCk7Ci0KLQlpOTE1X2dlbV9jb250ZXh0X2dldChjdHgpOwotCXJldHVybiBjZTsKLQotZXJyOgot CWNlLT5waW5fY291bnQgPSAwOwotCXJldHVybiBFUlJfUFRSKGVycik7CisJcmV0dXJuIDA7CiB9 CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfY29udGV4dF9vcHMgbW9ja19jb250ZXh0X29w cyA9IHsKKwkucGluID0gbW9ja19jb250ZXh0X3BpbiwKIAkudW5waW4gPSBtb2NrX2NvbnRleHRf dW5waW4sCiAJLmRlc3Ryb3kgPSBtb2NrX2NvbnRleHRfZGVzdHJveSwKIH07CkBAIC0yMzUsNyAr MjE0LDYgQEAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqbW9ja19lbmdpbmUoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmk5MTUsCiAJZW5naW5lLT5iYXNlLnN0YXR1c19wYWdlLmFkZHIgPSAodm9p ZCAqKShlbmdpbmUgKyAxKTsKIAogCWVuZ2luZS0+YmFzZS5jb3BzID0gJm1vY2tfY29udGV4dF9v cHM7Ci0JZW5naW5lLT5iYXNlLmNvbnRleHRfcGluID0gbW9ja19jb250ZXh0X3BpbjsKIAllbmdp bmUtPmJhc2UucmVxdWVzdF9hbGxvYyA9IG1vY2tfcmVxdWVzdF9hbGxvYzsKIAllbmdpbmUtPmJh c2UuZW1pdF9mbHVzaCA9IG1vY2tfZW1pdF9mbHVzaDsKIAllbmdpbmUtPmJhc2UuZW1pdF9maW5p X2JyZWFkY3J1bWIgPSBtb2NrX2VtaXRfYnJlYWRjcnVtYjsKLS0gCjIuMjAuMQoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcg bGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4