From mboxrd@z Thu Jan 1 00:00:00 1970 From: Zhi Wang Subject: [RFCv2 03/14] drm/i915: Introduce host graphics memory/fence partition for GVT-g Date: Thu, 18 Feb 2016 19:42:10 +0800 Message-ID: <1455795741-3487-4-git-send-email-zhi.a.wang@intel.com> References: <1455795741-3487-1-git-send-email-zhi.a.wang@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTP id 6A47A6EB68 for ; Thu, 18 Feb 2016 11:44:55 +0000 (UTC) In-Reply-To: <1455795741-3487-1-git-send-email-zhi.a.wang@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, igvt-g@lists.01.org Cc: daniel.vetter@ffwll.ch, david.j.cowperthwaite@intel.com, zhiyuan.lv@intel.com List-Id: intel-gfx@lists.freedesktop.org RnJvbTogQmluZyBOaXUgPGJpbmcubml1QGludGVsLmNvbT4KClRoaXMgcGF0Y2ggaW50cm9kdWNl cyBob3N0IGdyYXBoaWNzIG1lbW9yeS9mZW5jZSBwYXJ0aXRpb24gd2hlbiBHVlQtZwppcyBlbmFi bGVkLgoKVW5kZXIgR1ZULWcsIGk5MTUgaG9zdCBkcml2ZXIgb25seSBvd25lZCBsaW1pdGVkIGdy YXBoaWNzIHJlc291cmNlcywKb3RoZXJzIGFyZSBtYW5hZ2VkIGJ5IEdWVC1nIHJlc291cmNlIGFs bG9jYXRvciBhbmQga2VwdCBmb3Igb3RoZXIgdkdQVXMuCgp2MjoKLSBBZGRyZXNzIGFsbCBjb2Rp bmctc3R5bGUgY29tbWVudHMgZnJvbSBKb29uYXMgcHJldmlvdXNseS4KLSBGaXggZXJyb3JzIGFu ZCB3YXJubmluZyByZXBvcnRlZCBieSBjaGVja3BhdGNoLnBsLiAoSm9vbmFzKQotIE1vdmUgdGhl IGdyYXBocyBpbnRvIHRoZSBoZWFkZXIgZmlsZXMuIChEYW5pZWwpCgpTaWduZWQtb2ZmLWJ5OiBC aW5nIE5pdSA8YmluZy5uaXVAaW50ZWwuY29tPgpTaWduZWQtb2ZmLWJ5OiBaaGkgV2FuZyA8emhp LmEud2FuZ0BpbnRlbC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2d2dC5jICAg ICAgfCAgNCArKysrCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvcGFyYW1zLmMgICB8IDEyICsr KysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L3BhcmFtcy5oICAgfCAgMyArKysK IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggICAgIHwgMzUgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgICAg IHwgIDQgKysrLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMgfCAgNCArKy0t CiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3ZncHUuYyAgICB8IDIxICsrKysrKysrKysrKysr KysrLS0tLQogNyBmaWxlcyBjaGFuZ2VkLCA3NiBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygt KQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9ndnQuYyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2d2dC9ndnQuYwppbmRleCA1MmNmYTMyLi4yMDk5YjdlIDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZ3Z0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3Z0L2d2dC5jCkBAIC0zNDgsNiArMzQ4LDEwIEBAIHZvaWQgKmd2dF9jcmVhdGVfcGd0X2Rl dmljZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJCWdvdG8gZXJyOwogCX0K IAorCWRldl9wcml2LT5ndnQuaG9zdF9mZW5jZV9zeiA9IGd2dC5ob3N0X2ZlbmNlX3N6OworCWRl dl9wcml2LT5ndnQuaG9zdF9sb3dfZ21fc3pfaW5fbWIgPSBndnQuaG9zdF9sb3dfZ21fc3o7CisJ ZGV2X3ByaXYtPmd2dC5ob3N0X2hpZ2hfZ21fc3pfaW5fbWIgPSBndnQuaG9zdF9oaWdoX2dtX3N6 OworCiAJZ3Z0X2RiZ19jb3JlKCJwZ3QgZGV2aWNlIGNyZWF0aW9uIGRvbmUsIGlkICVkIiwgcGRl di0+aWQpOwogCiAJcmV0dXJuIHBkZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndnQvcGFyYW1zLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvcGFyYW1zLmMKaW5kZXgg ZDM4MWQxNy4uNzUxOTVmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L3Bh cmFtcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9wYXJhbXMuYwpAQCAtMjYsNyAr MjYsMTkgQEAKIHN0cnVjdCBndnRfa2VybmVsX3BhcmFtcyBndnQgPSB7CiAJLmVuYWJsZSA9IGZh bHNlLAogCS5kZWJ1ZyA9IDAsCisJLmhvc3RfbG93X2dtX3N6ID0gOTYsCS8qIGluIE1CICovCisJ Lmhvc3RfaGlnaF9nbV9zeiA9IDM4NCwgLyogaW4gTUIgKi8KKwkuaG9zdF9mZW5jZV9zeiA9IDQs CiB9OwogCiBtb2R1bGVfcGFyYW1fbmFtZWQoZ3Z0X2VuYWJsZSwgZ3Z0LmVuYWJsZSwgYm9vbCwg MDYwMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGd2dF9lbmFibGUsICJFbmFibGUgSW50ZWwgR1ZULWcg aG9zdCBzdXBwb3J0Iik7CisKK21vZHVsZV9wYXJhbV9uYW1lZChndnRfaG9zdF9sb3dfZ21fc3os IGd2dC5ob3N0X2xvd19nbV9zeiwgaW50LCAwNjAwKTsKK01PRFVMRV9QQVJNX0RFU0MoZ3Z0X2hv c3RfbG93X2dtX3N6LCAiQW1vdW50IG9mIGFwZXJ0dXJlIHNpemUgb2YgaG9zdCAoaW4gTUIpIik7 CisKK21vZHVsZV9wYXJhbV9uYW1lZChndnRfaG9zdF9oaWdoX2dtX3N6LCBndnQuaG9zdF9oaWdo X2dtX3N6LCBpbnQsIDA2MDApOworTU9EVUxFX1BBUk1fREVTQyhndnRfaG9zdF9oaWdoX2dtX3N6 LCAiQW1vdW50IG9mIGhpZ2ggbWVtb3J5IHNpemUgb2YgaG9zdCAoaW4gTUIpIik7CisKK21vZHVs ZV9wYXJhbV9uYW1lZChndnRfaG9zdF9mZW5jZV9zeiwgZ3Z0Lmhvc3RfZmVuY2Vfc3osIGludCwg MDYwMCk7CitNT0RVTEVfUEFSTV9ERVNDKGd2dF9ob3N0X2ZlbmNlX3N6LCAiQW1vdW50IG9mIGZl bmNlIHNpemUgb2YgaG9zdCAoaW4gTUIpIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9ndnQvcGFyYW1zLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvcGFyYW1zLmgKaW5k ZXggZDI5NTViOS4uZjRlOTM1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0 L3BhcmFtcy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9wYXJhbXMuaApAQCAtMjcs NiArMjcsOSBAQAogc3RydWN0IGd2dF9rZXJuZWxfcGFyYW1zIHsKIAlib29sIGVuYWJsZTsKIAlp bnQgZGVidWc7CisJaW50IGhvc3RfbG93X2dtX3N6OworCWludCBob3N0X2hpZ2hfZ21fc3o7CisJ aW50IGhvc3RfZmVuY2Vfc3o7CiB9OwogCiBleHRlcm4gc3RydWN0IGd2dF9rZXJuZWxfcGFyYW1z IGd2dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCmluZGV4IDJmODk3YzMuLjFmZDU1NzUgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9kcnYuaApAQCAtMTcwNSw4ICsxNzA1LDQzIEBAIHN0cnVjdCBpOTE1X3dv cmthcm91bmRzIHsKIAl1MzIgaHdfd2hpdGVsaXN0X2NvdW50W0k5MTVfTlVNX1JJTkdTXTsKIH07 CiAKKy8qCisgKiBVbmRlciBHVlQtZywgaTkxNSBob3N0IGRyaXZlciBvbmx5IG93bmVkIGxpbWl0 ZWQgZ3JhcGhpY3MgcmVzb3VyY2VzLAorICogb3RoZXJzIGFyZSBtYW5hZ2VkIGJ5IEdWVC1nIHJl c291cmNlIGFsbG9jYXRvciBhbmQga2VwdCBmb3Igb3RoZXIgdkdQVXMuCisgKgorICogRm9yIGdy YXBoaWNzIG1lbW9yeSBzcGFjZSBwYXJ0aXRpb24sIGEgdHlwaWNhbCBsYXlvdXQgbG9va3MgbGlr ZToKKyAqCisgKiArLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rCisgKiB8KiBIb3N0IHwgICAqR1ZULWcgUmVzb3VyY2UgICAgIHwq IEhvc3R8ICAgKkdWVC1nIFJlc291cmNlICAgICB8CisgKiB8IE93bmVkIHwgICBBbGxvY2F0b3Ig TWFuYWdlZCAgIHwgT3duZWR8ICAgQWxsb2NhdG9yIE1hbmFnZWQgICB8CisgKiB8ICAgICAgIHwg ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8Cisg KiArLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t Ky0tLS0tLS0rCisgKiB8ICAgICAgIHwgICAgICAgfCAgICAgICB8ICAgICAgIHwgICAgICB8ICAg ICAgIHwgICAgICAgfCAgICAgICB8CisgKiB8IGk5MTUgIHwgdm0gMSAgfCB2bSAyICB8IHZtIDMg IHwgaTkxNSB8IHZtIDEgIHwgdm0gMiAgfCB2bSAzICB8CisgKiB8ICAgICAgIHwgICAgICAgfCAg ICAgICB8ICAgICAgIHwgICAgICB8ICAgICAgIHwgICAgICAgfCAgICAgICB8CisgKiArLS0tLS0t LSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0r CisgKiB8ICAgICAgICAgICBBcGVydHVyZSAgICAgICAgICAgIHwgICAgICAgICAgICBIaWRkZW4g ICAgICAgICAgICB8CisgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKiB8ICAgICAgICAgICAgICAgICAgICAgICBHR1RU IG1lbW9yeSBzcGFjZSAgICAgICAgICAgICAgICAgICAgICB8CisgKiArLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKgorICog U2ltaWxhciB3aXRoIGZlbmNlIHJlZ2lzdGVycyBwYXJ0aXRpb246CisgKgorICogKy0tLS0tLSAr LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKiB8ICogSG9zdHwgICAgR1ZULWcgUmVzb3VyY2Ug ICAgIHwKKyAqIHwgT3duZWQgfCAgIEFsbG9jYXRvciBNYW5hZ2VkICAgKworICogMCAgICAgICB8 ICAgICAgICAgICAgICAgICAgICAgICAzMQorICogKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tKy0t LS0tLS0rCisgKiB8ICAgICAgIHwgICAgICAgfCAgICAgICB8ICAgICAgIHwKKyAqIHwgaTkxNSAg fCB2bSAxICB8IHZtIDIgIHwgdm0gMyAgfAorICogfCAgICAgICB8ICAgICAgIHwgICAgICAgfCAg ICAgICB8CisgKiArLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSsKKyAqLwogc3RydWN0 IGk5MTVfZ3Z0IHsKIAl2b2lkICpwZ3RfZGV2aWNlOworCXUzMiBob3N0X2xvd19nbV9zel9pbl9t YjsKKwl1MzIgaG9zdF9oaWdoX2dtX3N6X2luX21iOworCWludCBob3N0X2ZlbmNlX3N6OwogfTsK IAogc3RydWN0IGk5MTVfdmlydHVhbF9ncHUgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKaW5kZXgg ZjY4ZjM0Ni4uMWMwMDA2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9n ZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCkBAIC01MDc4LDcgKzUw NzgsOSBAQCBpOTE1X2dlbV9sb2FkX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIAllbHNl CiAJCWRldl9wcml2LT5udW1fZmVuY2VfcmVncyA9IDg7CiAKLQlpZiAoaW50ZWxfdmdwdV9hY3Rp dmUoZGV2KSkKKwlpZiAoaW50ZWxfZ3Z0X2FjdGl2ZShkZXYpKQorCQlkZXZfcHJpdi0+bnVtX2Zl bmNlX3JlZ3MgPSBkZXZfcHJpdi0+Z3Z0Lmhvc3RfZmVuY2Vfc3o7CisJZWxzZSBpZiAoaW50ZWxf dmdwdV9hY3RpdmUoZGV2KSkKIAkJZGV2X3ByaXYtPm51bV9mZW5jZV9yZWdzID0KIAkJCQlJOTE1 X1JFQUQodmd0aWZfcmVnKGF2YWlsX3JzLmZlbmNlX251bSkpOwogCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ2VtX2d0dC5jCmluZGV4IDkxMjdmOGYuLmRlMDlkZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ2VtX2d0dC5jCkBAIC0yNzM0LDcgKzI3MzQsNyBAQCBzdGF0aWMgaW50IGk5MTVfZ2VtX3Nl dHVwX2dsb2JhbF9ndHQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAlpOTE1X2FkZHJlc3Nfc3Bh Y2VfaW5pdChnZ3R0X3ZtLCBkZXZfcHJpdik7CiAJZ2d0dF92bS0+dG90YWwgKz0gUEFHRV9TSVpF OwogCi0JaWYgKGludGVsX3ZncHVfYWN0aXZlKGRldikpIHsKKwlpZiAoaW50ZWxfdmdwdV9hY3Rp dmUoZGV2KSB8fCBpbnRlbF9ndnRfYWN0aXZlKGRldikpIHsKIAkJcmV0ID0gaW50ZWxfdmd0X2Jh bGxvb24oZGV2KTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CkBAIC0yODMzLDcgKzI4MzMs NyBAQCB2b2lkIGk5MTVfZ2xvYmFsX2d0dF9jbGVhbnVwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYp CiAJaTkxNV9nZW1fY2xlYW51cF9zdG9sZW4oZGV2KTsKIAogCWlmIChkcm1fbW1faW5pdGlhbGl6 ZWQoJnZtLT5tbSkpIHsKLQkJaWYgKGludGVsX3ZncHVfYWN0aXZlKGRldikpCisJCWlmIChpbnRl bF92Z3B1X2FjdGl2ZShkZXYpIHx8IGludGVsX2d2dF9hY3RpdmUoZGV2KSkKIAkJCWludGVsX3Zn dF9kZWJhbGxvb24oKTsKIAogCQlkcm1fbW1fdGFrZWRvd24oJnZtLT5tbSk7CmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3ZncHUuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfdmdwdS5jCmluZGV4IGRlYTc0MjkuLjdiZTE0MzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfdmdwdS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf dmdwdS5jCkBAIC0xODgsMTAgKzE4OCwyMyBAQCBpbnQgaW50ZWxfdmd0X2JhbGxvb24oc3RydWN0 IGRybV9kZXZpY2UgKmRldikKIAl1bnNpZ25lZCBsb25nIHVubWFwcGFibGVfYmFzZSwgdW5tYXBw YWJsZV9zaXplLCB1bm1hcHBhYmxlX2VuZDsKIAlpbnQgcmV0OwogCi0JbWFwcGFibGVfYmFzZSA9 IEk5MTVfUkVBRCh2Z3RpZl9yZWcoYXZhaWxfcnMubWFwcGFibGVfZ21hZHIuYmFzZSkpOwotCW1h cHBhYmxlX3NpemUgPSBJOTE1X1JFQUQodmd0aWZfcmVnKGF2YWlsX3JzLm1hcHBhYmxlX2dtYWRy LnNpemUpKTsKLQl1bm1hcHBhYmxlX2Jhc2UgPSBJOTE1X1JFQUQodmd0aWZfcmVnKGF2YWlsX3Jz Lm5vbm1hcHBhYmxlX2dtYWRyLmJhc2UpKTsKLQl1bm1hcHBhYmxlX3NpemUgPSBJOTE1X1JFQUQo dmd0aWZfcmVnKGF2YWlsX3JzLm5vbm1hcHBhYmxlX2dtYWRyLnNpemUpKTsKKwlpZiAoaW50ZWxf Z3Z0X2FjdGl2ZShkZXYpKSB7CisJCW1hcHBhYmxlX2Jhc2UgPSAwOworCQltYXBwYWJsZV9zaXpl ID0gZGV2X3ByaXYtPmd2dC5ob3N0X2xvd19nbV9zel9pbl9tYiA8PCAyMDsKKwkJdW5tYXBwYWJs ZV9iYXNlID0gZGV2X3ByaXYtPmd0dC5tYXBwYWJsZV9lbmQ7CisJCXVubWFwcGFibGVfc2l6ZSA9 IGRldl9wcml2LT5ndnQuaG9zdF9oaWdoX2dtX3N6X2luX21iIDw8IDIwOworCX0gZWxzZSBpZiAo aW50ZWxfdmdwdV9hY3RpdmUoZGV2KSkgeworCQltYXBwYWJsZV9iYXNlID0gSTkxNV9SRUFEKAor CQkJdmd0aWZfcmVnKGF2YWlsX3JzLm1hcHBhYmxlX2dtYWRyLmJhc2UpKTsKKwkJbWFwcGFibGVf c2l6ZSA9IEk5MTVfUkVBRCgKKwkJCXZndGlmX3JlZyhhdmFpbF9ycy5tYXBwYWJsZV9nbWFkci5z aXplKSk7CisJCXVubWFwcGFibGVfYmFzZSA9IEk5MTVfUkVBRCgKKwkJCXZndGlmX3JlZyhhdmFp bF9ycy5ub25tYXBwYWJsZV9nbWFkci5iYXNlKSk7CisJCXVubWFwcGFibGVfc2l6ZSA9IEk5MTVf UkVBRCgKKwkJCXZndGlmX3JlZyhhdmFpbF9ycy5ub25tYXBwYWJsZV9nbWFkci5zaXplKSk7CisJ fSBlbHNlIHsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQogCiAJbWFwcGFibGVfZW5kID0gbWFwcGFi bGVfYmFzZSArIG1hcHBhYmxlX3NpemU7CiAJdW5tYXBwYWJsZV9lbmQgPSB1bm1hcHBhYmxlX2Jh c2UgKyB1bm1hcHBhYmxlX3NpemU7Ci0tIAoxLjkuMQoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhA bGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxt YW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==