From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jordan Crouse Subject: [PATCH 03/10] drm/msm/gpu: Capture the state of the GPU Date: Tue, 17 Apr 2018 16:44:34 -0600 Message-ID: <20180417224441.32355-4-jcrouse@codeaurora.org> References: <20180417224441.32355-1-jcrouse@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180417224441.32355-1-jcrouse-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org List-Id: linux-arm-msm@vger.kernel.org QWRkIHRoZSBpbmZyYXN0cnVjdHVyZSB0byBjYXB0dXJlIHRoZSBzdGF0ZSBjdXJyZW50IHN0YXRl IG9mIHRoZQpHUFUgYW5kIHN0b3JlIGl0IGluIG1lbW9yeS4gIFRoaXMgaXMgdXNlZnVsIGZvciBz dG9yaW5nIHRoZSBzdGF0ZQpvZiBhIGh1bmcgR1BVIHNvIGl0IGNhbiBiZSBkdW1wZWQgbGF0ZXIu CgpGb3Igbm93IGdyYWIgdGhlIHNhbWUgYmFzaWMgcmluZ2J1ZmZlciBpbmZvcm1hdGlvbiBhbmQg cmVnaXN0ZXJzCnRoYXQgYXJlIHByb3ZpZGVkIGJ5IHRoZSBkZWJ1Z2ZzICdncHUnIG5vZGUgYnV0 IG9idmlvdXNseSB0aGlzIGNhbgpiZSBleHRlbmRlZCB0byBjYXB0dXJlIGEgbXVjaCBsYXJnZXIg c2V0IG9mIEdQVSBpbmZvcm1hdGlvbi4KClNpZ25lZC1vZmYtYnk6IEpvcmRhbiBDcm91c2UgPGpj cm91c2VAY29kZWF1cm9yYS5vcmc+Ci0tLQogZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTN4 eF9ncHUuYyAgIHwgMTUgKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTR4eF9n cHUuYyAgIHwgMTQgKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTV4eF9ncHUu YyAgIHwgMjIgKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYWRyZW5vX2dw dS5jIHwgNTQgKysrKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21zbS9h ZHJlbm8vYWRyZW5vX2dwdS5oIHwgIDMgKysKIGRyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dwdS5o ICAgICAgICAgICB8IDE5ICsrKysrKysrKwogNiBmaWxlcyBjaGFuZ2VkLCAxMjcgaW5zZXJ0aW9u cygrKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2EzeHhfZ3B1LmMg Yi9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hM3h4X2dwdS5jCmluZGV4IDNlYmJlYjNhOWI2 OC4uYjcwN2I1YmNhOWFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9h M3h4X2dwdS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2EzeHhfZ3B1LmMKQEAg LTQyNyw2ICs0MjcsMTkgQEAgc3RhdGljIHZvaWQgYTN4eF9kdW1wKHN0cnVjdCBtc21fZ3B1ICpn cHUpCiAJCQlncHVfcmVhZChncHUsIFJFR19BM1hYX1JCQk1fU1RBVFVTKSk7CiAJYWRyZW5vX2R1 bXAoZ3B1KTsKIH0KKworc3RhdGljIHN0cnVjdCBtc21fZ3B1X3N0YXRlICphM3h4X2dwdV9zdGF0 ZV9nZXQoc3RydWN0IG1zbV9ncHUgKmdwdSkKK3sKKwlzdHJ1Y3QgbXNtX2dwdV9zdGF0ZSAqc3Rh dGUgPSBhZHJlbm9fZ3B1X3N0YXRlX2dldChncHUpOworCisJaWYgKElTX0VSUihzdGF0ZSkpCisJ CXJldHVybiBzdGF0ZTsKKworCXN0YXRlLT5yYmJtX3N0YXR1cyA9IGdwdV9yZWFkKGdwdSwgUkVH X0EzWFhfUkJCTV9TVEFUVVMpOworCisJcmV0dXJuIHN0YXRlOworfQorCiAvKiBSZWdpc3RlciBv ZmZzZXQgZGVmaW5lcyBmb3IgQTNYWCAqLwogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBhM3h4 X3JlZ2lzdGVyX29mZnNldHNbUkVHX0FEUkVOT19SRUdJU1RFUl9NQVhdID0gewogCVJFR19BRFJF Tk9fREVGSU5FKFJFR19BRFJFTk9fQ1BfUkJfQkFTRSwgUkVHX0FYWFhfQ1BfUkJfQkFTRSksCkBA IC00NTMsNiArNDY2LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhZHJlbm9fZ3B1X2Z1bmNzIGZ1 bmNzID0gewogI2lmZGVmIENPTkZJR19ERUJVR19GUwogCQkuc2hvdyA9IGEzeHhfc2hvdywKICNl bmRpZgorCQkuZ3B1X3N0YXRlX2dldCA9IGEzeHhfZ3B1X3N0YXRlX2dldCwKKwkJLmdwdV9zdGF0 ZV9wdXQgPSBhZHJlbm9fZ3B1X3N0YXRlX3B1dCwKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTR4eF9ncHUuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20v YWRyZW5vL2E0eHhfZ3B1LmMKaW5kZXggMTZkM2Q1OTY2MzhlLi4xN2U5N2ViYzEwNzcgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E0eHhfZ3B1LmMKKysrIGIvZHJpdmVy cy9ncHUvZHJtL21zbS9hZHJlbm8vYTR4eF9ncHUuYwpAQCAtNDY1LDYgKzQ2NSwxOCBAQCBzdGF0 aWMgdm9pZCBhNHh4X3Nob3coc3RydWN0IG1zbV9ncHUgKmdwdSwgc3RydWN0IHNlcV9maWxlICpt KQogfQogI2VuZGlmCiAKK3N0YXRpYyBzdHJ1Y3QgbXNtX2dwdV9zdGF0ZSAqYTR4eF9ncHVfc3Rh dGVfZ2V0KHN0cnVjdCBtc21fZ3B1ICpncHUpCit7CisJc3RydWN0IG1zbV9ncHVfc3RhdGUgKnN0 YXRlID0gYWRyZW5vX2dwdV9zdGF0ZV9nZXQoZ3B1KTsKKworCWlmIChJU19FUlIoc3RhdGUpKQor CQlyZXR1cm4gc3RhdGU7CisKKwlzdGF0ZS0+cmJibV9zdGF0dXMgPSBncHVfcmVhZChncHUsIFJF R19BNFhYX1JCQk1fU1RBVFVTKTsKKworCXJldHVybiBzdGF0ZTsKK30KKwogLyogUmVnaXN0ZXIg b2Zmc2V0IGRlZmluZXMgZm9yIEE0WFgsIGluIG9yZGVyIG9mIGVudW0gYWRyZW5vX3JlZ3MgKi8K IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgYTR4eF9yZWdpc3Rlcl9vZmZzZXRzW1JFR19BRFJF Tk9fUkVHSVNURVJfTUFYXSA9IHsKIAlSRUdfQURSRU5PX0RFRklORShSRUdfQURSRU5PX0NQX1JC X0JBU0UsIFJFR19BNFhYX0NQX1JCX0JBU0UpLApAQCAtNTQxLDYgKzU1Myw4IEBAIHN0YXRpYyBj b25zdCBzdHJ1Y3QgYWRyZW5vX2dwdV9mdW5jcyBmdW5jcyA9IHsKICNpZmRlZiBDT05GSUdfREVC VUdfRlMKIAkJLnNob3cgPSBhNHh4X3Nob3csCiAjZW5kaWYKKwkJLmdwdV9zdGF0ZV9nZXQgPSBh NHh4X2dwdV9zdGF0ZV9nZXQsCisJCS5ncHVfc3RhdGVfcHV0ID0gYWRyZW5vX2dwdV9zdGF0ZV9w dXQsCiAJfSwKIAkuZ2V0X3RpbWVzdGFtcCA9IGE0eHhfZ2V0X3RpbWVzdGFtcCwKIH07CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNXh4X2dwdS5jIGIvZHJpdmVycy9n cHUvZHJtL21zbS9hZHJlbm8vYTV4eF9ncHUuYwppbmRleCBhNGY2OGFmZmMxM2IuLjA4ZjI1Nzk4 YWJkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTV4eF9ncHUuYwor KysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNXh4X2dwdS5jCkBAIC0xMTk1LDYgKzEx OTUsMjYgQEAgc3RhdGljIGludCBhNXh4X2dldF90aW1lc3RhbXAoc3RydWN0IG1zbV9ncHUgKmdw dSwgdWludDY0X3QgKnZhbHVlKQogCXJldHVybiAwOwogfQogCitzdGF0aWMgc3RydWN0IG1zbV9n cHVfc3RhdGUgKmE1eHhfZ3B1X3N0YXRlX2dldChzdHJ1Y3QgbXNtX2dwdSAqZ3B1KQoreworCXN0 cnVjdCBtc21fZ3B1X3N0YXRlICpzdGF0ZTsKKworCS8qCisJICogVGVtcG9yYXJpbHkgZGlzYWJs ZSBoYXJkd2FyZSBjbG9jayBnYXRpbmcgYmVmb3JlIGdvaW5nIGludG8KKwkgKiBhZHJlbm9fc2hv dyB0byBhdm9pZCBpc3N1ZXMgd2hpbGUgcmVhZGluZyB0aGUgcmVnaXN0ZXJzCisJICovCisJYTV4 eF9zZXRfaHdjZyhncHUsIGZhbHNlKTsKKworCXN0YXRlID0gYWRyZW5vX2dwdV9zdGF0ZV9nZXQo Z3B1KTsKKworCWlmICghSVNfRVJSKHN0YXRlKSkKKwkJc3RhdGUtPnJiYm1fc3RhdHVzID0gZ3B1 X3JlYWQoZ3B1LCBSRUdfQTVYWF9SQkJNX1NUQVRVUyk7CisKKwlhNXh4X3NldF9od2NnKGdwdSwg dHJ1ZSk7CisKKwlyZXR1cm4gc3RhdGU7Cit9CisKICNpZmRlZiBDT05GSUdfREVCVUdfRlMKIHN0 YXRpYyB2b2lkIGE1eHhfc2hvdyhzdHJ1Y3QgbXNtX2dwdSAqZ3B1LCBzdHJ1Y3Qgc2VxX2ZpbGUg Km0pCiB7CkBAIC0xMjQ0LDYgKzEyNjQsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFkcmVub19n cHVfZnVuY3MgZnVuY3MgPSB7CiAJCS5kZWJ1Z2ZzX2luaXQgPSBhNXh4X2RlYnVnZnNfaW5pdCwK ICNlbmRpZgogCQkuZ3B1X2J1c3kgPSBhNXh4X2dwdV9idXN5LAorCQkuZ3B1X3N0YXRlX2dldCA9 IGE1eHhfZ3B1X3N0YXRlX2dldCwKKwkJLmdwdV9zdGF0ZV9wdXQgPSBhZHJlbm9fZ3B1X3N0YXRl X3B1dCwKIAl9LAogCS5nZXRfdGltZXN0YW1wID0gYTV4eF9nZXRfdGltZXN0YW1wLAogfTsKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2FkcmVub19ncHUuYyBiL2RyaXZl cnMvZ3B1L2RybS9tc20vYWRyZW5vL2FkcmVub19ncHUuYwppbmRleCAxN2QwNTA2ZDA1OGMuLmIy Y2NhZjI1NzY3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYWRyZW5v X2dwdS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2FkcmVub19ncHUuYwpAQCAt MzY4LDYgKzM2OCw2MCBAQCBib29sIGFkcmVub19pZGxlKHN0cnVjdCBtc21fZ3B1ICpncHUsIHN0 cnVjdCBtc21fcmluZ2J1ZmZlciAqcmluZykKIAlyZXR1cm4gZmFsc2U7CiB9CiAKK3N0cnVjdCBt c21fZ3B1X3N0YXRlICphZHJlbm9fZ3B1X3N0YXRlX2dldChzdHJ1Y3QgbXNtX2dwdSAqZ3B1KQor eworCXN0cnVjdCBhZHJlbm9fZ3B1ICphZHJlbm9fZ3B1ID0gdG9fYWRyZW5vX2dwdShncHUpOwor CXN0cnVjdCBtc21fZ3B1X3N0YXRlICpzdGF0ZTsKKwlpbnQgaSwgY291bnQgPSAwOworCisJc3Rh dGUgPSBremFsbG9jKHNpemVvZigqc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN0YXRlKQor CQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWRvX2dldHRpbWVvZmRheSgmc3RhdGUtPnRp bWUpOworCisJZm9yIChpID0gMDsgaSA8IGdwdS0+bnJfcmluZ3M7IGkrKykgeworCQlzdGF0ZS0+ cmluZ1tpXS5mZW5jZSA9IGdwdS0+cmJbaV0tPm1lbXB0cnMtPmZlbmNlOworCQlzdGF0ZS0+cmlu Z1tpXS5zZXFubyA9IGdwdS0+cmJbaV0tPnNlcW5vOworCQlzdGF0ZS0+cmluZ1tpXS5ycHRyID0g Z2V0X3JwdHIoYWRyZW5vX2dwdSwgZ3B1LT5yYltpXSk7CisJCXN0YXRlLT5yaW5nW2ldLndwdHIg PSBnZXRfd3B0cihncHUtPnJiW2ldKTsKKwl9CisKKwkvKiBDb3VudCB0aGUgbnVtYmVyIG9mIHJl Z2lzdGVycyAqLworCWZvciAoaSA9IDA7IGFkcmVub19ncHUtPnJlZ2lzdGVyc1tpXSAhPSB+MDsg aSArPSAyKQorCQljb3VudCArPSBhZHJlbm9fZ3B1LT5yZWdpc3RlcnNbaSArIDFdIC0KKwkJCWFk cmVub19ncHUtPnJlZ2lzdGVyc1tpXSArIDE7CisKKwlzdGF0ZS0+cmVnaXN0ZXJzID0ga2NhbGxv Yyhjb3VudCAqIDIsIHNpemVvZih1MzIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoc3RhdGUtPnJlZ2lz dGVycykgeworCQlpbnQgcG9zID0gMDsKKworCQlmb3IgKGkgPSAwOyBhZHJlbm9fZ3B1LT5yZWdp c3RlcnNbaV0gIT0gfjA7IGkgKz0gMikgeworCQkJdWludDMyX3Qgc3RhcnQgPSBhZHJlbm9fZ3B1 LT5yZWdpc3RlcnNbaV07CisJCQl1aW50MzJfdCBlbmQgICA9IGFkcmVub19ncHUtPnJlZ2lzdGVy c1tpKzFdOworCQkJdWludDMyX3QgYWRkcjsKKworCQkJZm9yIChhZGRyID0gc3RhcnQ7IGFkZHIg PD0gZW5kOyBhZGRyKyspIHsKKwkJCQlzdGF0ZS0+cmVnaXN0ZXJzW3BvcysrXSA9IGFkZHI7CisJ CQkJc3RhdGUtPnJlZ2lzdGVyc1twb3MrK10gPSBncHVfcmVhZChncHUsIGFkZHIpOworCQkJfQor CQl9CisKKwkJc3RhdGUtPm5yX3JlZ2lzdGVycyA9IGNvdW50OworCX0KKworCXJldHVybiBzdGF0 ZTsKK30KKwordm9pZCBhZHJlbm9fZ3B1X3N0YXRlX3B1dChzdHJ1Y3QgbXNtX2dwdV9zdGF0ZSAq c3RhdGUpCit7CisJaWYgKElTX0VSUl9PUl9OVUxMKHN0YXRlKSkKKwkJcmV0dXJuOworCisJa2Zy ZWUoc3RhdGUtPnJlZ2lzdGVycyk7CisJa2ZyZWUoc3RhdGUpOworfQorCiAjaWZkZWYgQ09ORklH X0RFQlVHX0ZTCiB2b2lkIGFkcmVub19zaG93KHN0cnVjdCBtc21fZ3B1ICpncHUsIHN0cnVjdCBz ZXFfZmlsZSAqbSkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2Fk cmVub19ncHUuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2FkcmVub19ncHUuaAppbmRl eCBkNmIwZTdiODEzZjQuLjBiZWIwNzhlYjY1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L21zbS9hZHJlbm8vYWRyZW5vX2dwdS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5v L2FkcmVub19ncHUuaApAQCAtMjI4LDYgKzIyOCw5IEBAIGludCBhZHJlbm9fZ3B1X2luaXQoc3Ry dWN0IGRybV9kZXZpY2UgKmRybSwgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKIHZvaWQg YWRyZW5vX2dwdV9jbGVhbnVwKHN0cnVjdCBhZHJlbm9fZ3B1ICpncHUpOwogCiAKK3N0cnVjdCBt c21fZ3B1X3N0YXRlICphZHJlbm9fZ3B1X3N0YXRlX2dldChzdHJ1Y3QgbXNtX2dwdSAqZ3B1KTsK K3ZvaWQgYWRyZW5vX2dwdV9zdGF0ZV9wdXQoc3RydWN0IG1zbV9ncHVfc3RhdGUgKnN0YXRlKTsK KwogLyogcmluZ2J1ZmZlciBoZWxwZXJzICh0aGUgcGFydHMgdGhhdCBhcmUgYWRyZW5vIHNwZWNp ZmljKSAqLwogCiBzdGF0aWMgaW5saW5lIHZvaWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9tc20vbXNtX2dwdS5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZ3B1LmgKaW5kZXggYjgy NDExNzkxNzVhLi40YmU3MmE2MTJiZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20v bXNtX2dwdS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dwdS5oCkBAIC0yNyw2ICsy Nyw3IEBACiAKIHN0cnVjdCBtc21fZ2VtX3N1Ym1pdDsKIHN0cnVjdCBtc21fZ3B1X3BlcmZjbnRy Oworc3RydWN0IG1zbV9ncHVfc3RhdGU7CiAKIHN0cnVjdCBtc21fZ3B1X2NvbmZpZyB7CiAJY29u c3QgY2hhciAqaW9uYW1lOwpAQCAtNjksNiArNzAsOCBAQCBzdHJ1Y3QgbXNtX2dwdV9mdW5jcyB7 CiAJaW50ICgqZGVidWdmc19pbml0KShzdHJ1Y3QgbXNtX2dwdSAqZ3B1LCBzdHJ1Y3QgZHJtX21p bm9yICptaW5vcik7CiAjZW5kaWYKIAlpbnQgKCpncHVfYnVzeSkoc3RydWN0IG1zbV9ncHUgKmdw dSwgdWludDY0X3QgKnZhbHVlKTsKKwlzdHJ1Y3QgbXNtX2dwdV9zdGF0ZSAqKCpncHVfc3RhdGVf Z2V0KShzdHJ1Y3QgbXNtX2dwdSAqZ3B1KTsKKwl2b2lkICgqZ3B1X3N0YXRlX3B1dCkoc3RydWN0 IG1zbV9ncHVfc3RhdGUgKnN0YXRlKTsKIH07CiAKIHN0cnVjdCBtc21fZ3B1IHsKQEAgLTE3NSw2 ICsxNzgsMjIgQEAgc3RydWN0IG1zbV9ncHVfc3VibWl0cXVldWUgewogCXN0cnVjdCBrcmVmIHJl ZjsKIH07CiAKK3N0cnVjdCBtc21fZ3B1X3N0YXRlIHsKKwlzdHJ1Y3QgdGltZXZhbCB0aW1lOwor CisJc3RydWN0IHsKKwkJdTMyIGZlbmNlOworCQl1MzIgc2Vxbm87CisJCXUzMiBycHRyOworCQl1 MzIgd3B0cjsKKwl9IHJpbmdbTVNNX0dQVV9NQVhfUklOR1NdOworCisJaW50IG5yX3JlZ2lzdGVy czsKKwl1MzIgKnJlZ2lzdGVyczsKKworCXUzMiByYmJtX3N0YXR1czsKK307CisKIHN0YXRpYyBp bmxpbmUgdm9pZCBncHVfd3JpdGUoc3RydWN0IG1zbV9ncHUgKmdwdSwgdTMyIHJlZywgdTMyIGRh dGEpCiB7CiAJbXNtX3dyaXRlbChkYXRhLCBncHUtPm1taW8gKyAocmVnIDw8IDIpKTsKLS0gCjIu MTcuMAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRnJl ZWRyZW5vIG1haWxpbmcgbGlzdApGcmVlZHJlbm9AbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBz Oi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZnJlZWRyZW5vCg==