From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alex Deucher Subject: [PATCH 5/8] drm/amdgpu/atomfirmware: add memory training related helper functions Date: Tue, 8 Oct 2019 14:29:31 -0500 Message-ID: <20191008192934.5481-6-alexander.deucher@amd.com> References: <20191008192934.5481-1-alexander.deucher@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20191008192934.5481-1-alexander.deucher-5C7GfCeVMHo@public.gmane.org> List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: Alex Deucher , "Tianci.Yin" RnJvbTogIlRpYW5jaS5ZaW4iIDx0aWFuY2kueWluQGFtZC5jb20+CgpwYXJzZSBmaXJtd2FyZSB0 byBnZXQgbWVtb3J5IHRyYWluaW5nIGNhcGFiaWxpdHkgYW5kIGZiIGxvY2F0aW9uLgoKQ2hhbmdl LUlkOiBJMTQ3YzFkNDhlMjU1ZTAxOTFiZTRiZWIxYWQ2YjYzN2RhNjA3YmY3NQpSZXZpZXdlZC1i eTogQWxleCBEZXVjaGVyIDxhbGV4YW5kZXIuZGV1Y2hlckBhbWQuY29tPgpTaWduZWQtb2ZmLWJ5 OiBUaWFuY2kuWWluIDx0aWFuY2kueWluQGFtZC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2Ft ZC9hbWRncHUvYW1kZ3B1LmggICAgICAgICAgIHwgICA3ICsKIGRyaXZlcnMvZ3B1L2RybS9hbWQv YW1kZ3B1L2FtZGdwdV9hdG9tYmlvcy5jICB8ICAgNSArCiAuLi4vZ3B1L2RybS9hbWQvYW1kZ3B1 L2FtZGdwdV9hdG9tZmlybXdhcmUuYyAgfCAxMzAgKysrKysrKysrKysrKysrKysrCiAuLi4vZ3B1 L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9hdG9tZmlybXdhcmUuaCAgfCAgIDEgKwogNCBmaWxlcyBj aGFuZ2VkLCAxNDMgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9h bWQvYW1kZ3B1L2FtZGdwdS5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1LmgK aW5kZXggMGQ2MGMyZTZjNTkyLi5lZWI2YjYyODJmY2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9hbWQvYW1kZ3B1L2FtZGdwdS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1 L2FtZGdwdS5oCkBAIC0yODgsNiArMjg4LDkgQEAgc3RydWN0IGFtZGdwdV9pcF9ibG9ja192ZXJz aW9uIHsKIAljb25zdCBzdHJ1Y3QgYW1kX2lwX2Z1bmNzICpmdW5jczsKIH07CiAKKyNkZWZpbmUg aHdfcmV2aXNpb24obWFqb3IsIG1pbm9yLCByZXZpc2lvbikgXAorCSgoKCh1aW50MzJfdCkgbWFq b3IpIDw8IDE2KSB8ICgodWludDMyX3QpIG1pbm9yIDw8IDgpIHwgKCh1aW50MzJfdCkgcmV2aXNp b24pKQorCiBzdHJ1Y3QgYW1kZ3B1X2lwX2Jsb2NrIHsKIAlzdHJ1Y3QgYW1kZ3B1X2lwX2Jsb2Nr X3N0YXR1cyBzdGF0dXM7CiAJY29uc3Qgc3RydWN0IGFtZGdwdV9pcF9ibG9ja192ZXJzaW9uICp2 ZXJzaW9uOwpAQCAtNjMwLDYgKzYzMywxMCBAQCBzdHJ1Y3QgYW1kZ3B1X2Z3X3ZyYW1fdXNhZ2Ug ewogCXU2NCBzaXplOwogCXN0cnVjdCBhbWRncHVfYm8gKnJlc2VydmVkX2JvOwogCXZvaWQgKnZh OworCisJLypvZmZzZXQgb24gdGhlIHRvcCBvZiB2cmFtLCB1c2VkIGFzIGMycCB3cml0ZSBidWZm ZXIqLworCXU2NCBtZW1fdHJhaW5fZmJfbG9jOworCWJvb2wgbWVtX3RyYWluX3N1cHBvcnQ7CiB9 OwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2F0 b21iaW9zLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfYXRvbWJpb3MuYwpp bmRleCAxYzlkNDBmOTdhOWIuLjVmNWEyZDNmZmY5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2F0b21iaW9zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2Ft ZC9hbWRncHUvYW1kZ3B1X2F0b21iaW9zLmMKQEAgLTIwMzgsNiArMjAzOCwxMSBAQCBpbnQgYW1k Z3B1X2F0b21iaW9zX2luaXQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCiAJaWYgKGFkZXYt PmlzX2F0b21fZncpIHsKIAkJYW1kZ3B1X2F0b21maXJtd2FyZV9zY3JhdGNoX3JlZ3NfaW5pdChh ZGV2KTsKIAkJYW1kZ3B1X2F0b21maXJtd2FyZV9hbGxvY2F0ZV9mYl9zY3JhdGNoKGFkZXYpOwor CQlyZXQgPSBhbWRncHVfYXRvbWZpcm13YXJlX2dldF9tZW1fdHJhaW5fZmJfbG9jKGFkZXYpOwor CQlpZihyZXQpIHsKKwkJCURSTV9FUlJPUigiRmFpbGVkIHRvIGdldCBtZW0gdHJhaW4gZmIgbG9j YXRpb24uXG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KIAl9IGVsc2UgewogCQlhbWRncHVfYXRv bWJpb3Nfc2NyYXRjaF9yZWdzX2luaXQoYWRldik7CiAJCWFtZGdwdV9hdG9tYmlvc19hbGxvY2F0 ZV9mYl9zY3JhdGNoKGFkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvYW1kZ3B1X2F0b21maXJtd2FyZS5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1k Z3B1X2F0b21maXJtd2FyZS5jCmluZGV4IDM5ZmQ4YWU1YTgyMi4uZGZhZWJkOTI5MzMyIDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfYXRvbWZpcm13YXJlLmMK KysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2F0b21maXJtd2FyZS5jCkBA IC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiYW1kZ3B1X2F0b21maXJtd2FyZS5oIgogI2luY2x1 ZGUgImF0b20uaCIKICNpbmNsdWRlICJhdG9tYmlvcy5oIgorI2luY2x1ZGUgInNvYzE1X2h3X2lw LmgiCiAKIGJvb2wgYW1kZ3B1X2F0b21maXJtd2FyZV9ncHVfc3VwcG9ydHNfdmlydHVhbGl6YXRp b24oc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCiB7CkBAIC00NjIsMyArNDYzLDEzMiBAQCBp bnQgYW1kZ3B1X2F0b21maXJtd2FyZV9nZXRfZ2Z4X2luZm8oc3RydWN0IGFtZGdwdV9kZXZpY2Ug KmFkZXYpCiAJfQogCXJldHVybiAtRUlOVkFMOwogfQorCisvKgorICogQ2hlY2sgaWYgVkJJT1Mg c3VwcG9ydHMgR0REUjYgdHJhaW5pbmcgZGF0YSBzYXZlL3Jlc3RvcmUKKyAqLworc3RhdGljIGJv b2wgZ2RkcjZfbWVtX3RyYWluX3ZiaW9zX3N1cHBvcnQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFk ZXYpCit7CisJdWludDE2X3QgZGF0YV9vZmZzZXQ7CisJaW50IGluZGV4OworCisJaW5kZXggPSBn ZXRfaW5kZXhfaW50b19tYXN0ZXJfdGFibGUoYXRvbV9tYXN0ZXJfbGlzdF9vZl9kYXRhX3RhYmxl c192Ml8xLAorCQkJCQkgICAgZmlybXdhcmVpbmZvKTsKKwlpZiAoYW1kZ3B1X2F0b21fcGFyc2Vf ZGF0YV9oZWFkZXIoYWRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCwgaW5kZXgsIE5VTEwsCisJ CQkJCSAgTlVMTCwgTlVMTCwgJmRhdGFfb2Zmc2V0KSkgeworCQlzdHJ1Y3QgYXRvbV9maXJtd2Fy ZV9pbmZvX3YzXzEgKmZpcm13YXJlX2luZm8gPQorCQkJKHN0cnVjdCBhdG9tX2Zpcm13YXJlX2lu Zm9fdjNfMSAqKShhZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0LT5iaW9zICsKKwkJCQkJCQkg ICBkYXRhX29mZnNldCk7CisKKwkJRFJNX0RFQlVHKCJhdG9tIGZpcm13YXJlIGNhcGFiaWxpdHk6 MHglMDh4LlxuIiwKKwkJCSAgbGUzMl90b19jcHUoZmlybXdhcmVfaW5mby0+ZmlybXdhcmVfY2Fw YWJpbGl0eSkpOworCisJCWlmIChsZTMyX3RvX2NwdShmaXJtd2FyZV9pbmZvLT5maXJtd2FyZV9j YXBhYmlsaXR5KSAmCisJCSAgICBBVE9NX0ZJUk1XQVJFX0NBUF9FTkFCTEVfMlNUQUdFX0JJU1Rf VFJBSU5JTkcpCisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0 YXRpYyBpbnQgZ2RkcjZfbWVtX3RyYWluX3N1cHBvcnQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFk ZXYpCit7CisJaW50IHJldCA9IDA7CisJYm9vbCB2Ymlvc19zdXBwb3J0ID0gZmFsc2U7CisJdWlu dDMyX3QgbWFqb3IsIG1pbm9yLCByZXZpc2lvbiwgaHdfdjsKKworCWlmICghYW1kZ3B1X3NyaW92 X3ZmKGFkZXYpICYmCisJICAgIGdkZHI2X21lbV90cmFpbl92Ymlvc19zdXBwb3J0KGFkZXYpKSB7 CisJCXZiaW9zX3N1cHBvcnQgPSB0cnVlOworCX0KKworCWFtZGdwdV9kaXNjb3ZlcnlfZ2V0X2lw X3ZlcnNpb24oYWRldiwgTVAwX0hXSUQsICZtYWpvciwgJm1pbm9yLCAmcmV2aXNpb24pOworCWh3 X3YgPSBod19yZXZpc2lvbihtYWpvciwgbWlub3IsIHJldmlzaW9uKTsKKwkvKgorCSAqIHRyZWF0 IDAgcmV2aXNpb24gYXMgYSBzcGVjaWFsIGNhc2Ugc2luY2UgcmVnaXN0ZXIgZm9yIE1QMCBhbmQg TU1IVUIgaXMgbWlzc2luZworCSAqIGZvciBzb21lIE5hdmkxMCBBMCwgcHJldmVudGluZyBkcml2 ZXIgZnJvbSBkaXNjb3ZlcmluZyB0aGUgaHdpcCBpbmZvcm1hdGlvbiBzaW5jZQorCSAqIG5vbmUg b2YgdGhlIGZ1bmN0aW9ucyB3aWxsIGJlIGluaXRpYWxpemVkLCBpdCBzaG91bGQgbm90IGNhdXNl IGFueSBwcm9ibGVtcworCSAqLworCXN3aXRjaChod192KSB7CisJY2FzZSBod19yZXZpc2lvbigx MSwgMCwgMCk6CisJY2FzZSBod19yZXZpc2lvbigxMSwgMCwgNSk6CisJCXJldCA9IHZiaW9zX3N1 cHBvcnQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWlmICh2Ymlvc19zdXBwb3J0KSB7CisJCQlE Uk1fRVJST1IoIm1lbW9yeSB0cmFpbmluZyB2YmlvcyBzdXBwb3J0cyBidXQgcHNwIGh3KCUwOHgp IgorCQkJCSAgIiBkb2Vzbid0IHN1cHBvcnQhXG4iLCBod192KTsKKwkJCXJldCA9IC0xOworCQl9 CisJCWJyZWFrOworCX0KKworCURSTV9ERUJVRygibXAwIGh3X3YgJTA4eCwgcmV0OiVkLlxuIiwg aHdfdiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgYW1kZ3B1X2F0b21maXJtd2FyZV9n ZXRfbWVtX3RyYWluX2ZiX2xvYyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKK3sKKwlzdHJ1 Y3QgYXRvbV9jb250ZXh0ICpjdHggPSBhZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0OworCXVu c2lnbmVkIGNoYXIgKmJpb3MgPSBjdHgtPmJpb3M7CisJc3RydWN0IHZyYW1fcmVzZXJ2ZV9ibG9j ayAqcmVzZXJ2ZWRfYmxvY2s7CisJaW50IGluZGV4LCBibG9ja19udW1iZXI7CisJdWludDhfdCBm cmV2LCBjcmV2OworCXVpbnQxNl90IGRhdGFfb2Zmc2V0LCBzaXplOworCXVpbnQzMl90IHN0YXJ0 X2FkZHJlc3NfaW5fa2IgPSAwOworCXVpbnQ2NF90IG9mZnNldDsKKwlpbnQgcmV0ID0gMDsKKwor CWFkZXYtPmZ3X3ZyYW1fdXNhZ2UubWVtX3RyYWluX3N1cHBvcnQgPSBmYWxzZTsKKwlyZXQgPSBn ZGRyNl9tZW1fdHJhaW5fc3VwcG9ydChhZGV2KTsKKwlpZiAocmV0ID09IC0xKQorCQlyZXR1cm4g LUVJTlZBTDsKKwllbHNlIGlmIChyZXQgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlpbmRleCA9IGdl dF9pbmRleF9pbnRvX21hc3Rlcl90YWJsZShhdG9tX21hc3Rlcl9saXN0X29mX2RhdGFfdGFibGVz X3YyXzEsCisJCQkJCSAgICB2cmFtX3VzYWdlYnlmaXJtd2FyZSk7CisJcmV0ID0gYW1kZ3B1X2F0 b21fcGFyc2VfZGF0YV9oZWFkZXIoY3R4LCBpbmRleCwgJnNpemUsICZmcmV2LCAmY3JldiwKKwkJ CQkJICAgICZkYXRhX29mZnNldCk7CisJaWYgKCFyZXQpIHsKKwkJRFJNX0VSUk9SKCJwYXJzZSBk YXRhIGhlYWRlciBmYWlsZWQuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJRFJNX0RF QlVHKCJhdG9tIGZpcm13YXJlIGNvbW1vbiB0YWJsZSBoZWFkZXIgc2l6ZToweCUwNHgsIGZyZXY6 MHglMDJ4LCIKKwkJICAiIGNyZXY6MHglMDJ4LCBkYXRhX29mZnNldDoweCUwNHguXG4iLCBzaXpl LCBmcmV2LCBjcmV2LCBkYXRhX29mZnNldCk7CisJLyogb25seSBzdXBwb3J0IDIuMSsgKi8KKwlp ZiAoKCh1aW50MTZfdClmcmV2IDw8IDggfCBjcmV2KSA8IDB4MDIwMSkgeworCQlEUk1fRVJST1Io ImZyZXY6MHglMDJ4LCBjcmV2OjB4JTAyeCA8IDIuMSAhXG4iLCBmcmV2LCBjcmV2KTsKKwkJcmV0 dXJuIC1FSU5WQUw7CisJfQorCisJcmVzZXJ2ZWRfYmxvY2sgPSAoc3RydWN0IHZyYW1fcmVzZXJ2 ZV9ibG9jayAqKQorCQkoYmlvcyArIGRhdGFfb2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCBhdG9tX2Nv bW1vbl90YWJsZV9oZWFkZXIpKTsKKwlibG9ja19udW1iZXIgPSAoKHVuc2lnbmVkIGludClzaXpl IC0gc2l6ZW9mKHN0cnVjdCBhdG9tX2NvbW1vbl90YWJsZV9oZWFkZXIpKQorCQkvIHNpemVvZihz dHJ1Y3QgdnJhbV9yZXNlcnZlX2Jsb2NrKTsKKwlyZXNlcnZlZF9ibG9jayArPSAoYmxvY2tfbnVt YmVyID4gMCkgPyBibG9ja19udW1iZXItMSA6IDA7CisJRFJNX0RFQlVHKCJibG9ja19udW1iZXI6 MHglMDR4LCBsYXN0IGJsb2NrOiAweCUwOHhrYiBzeiwgJWRrYiBmdywgJWRrYiBkcnYuXG4iLAor CQkgIGJsb2NrX251bWJlciwKKwkJICBsZTMyX3RvX2NwdShyZXNlcnZlZF9ibG9jay0+c3RhcnRf YWRkcmVzc19pbl9rYiksCisJCSAgbGUxNl90b19jcHUocmVzZXJ2ZWRfYmxvY2stPnVzZWRfYnlf ZmlybXdhcmVfaW5fa2IpLAorCQkgIGxlMTZfdG9fY3B1KHJlc2VydmVkX2Jsb2NrLT51c2VkX2J5 X2RyaXZlcl9pbl9rYikpOworCWlmIChyZXNlcnZlZF9ibG9jay0+dXNlZF9ieV9maXJtd2FyZV9p bl9rYiA+IDApIHsKKwkJc3RhcnRfYWRkcmVzc19pbl9rYiA9IGxlMzJfdG9fY3B1KHJlc2VydmVk X2Jsb2NrLT5zdGFydF9hZGRyZXNzX2luX2tiKTsKKwkJb2Zmc2V0ID0gKHVpbnQ2NF90KXN0YXJ0 X2FkZHJlc3NfaW5fa2IgKiBPTkVfSzsKKwkJaWYgKChvZmZzZXQgJiAoT05FX01FRyAtIDEpKSA8 ICg0ICogT05FX0sgKyAxKSApIHsKKwkJCW9mZnNldCAtPSBPTkVfTUVHOworCQl9CisKKwkJb2Zm c2V0ICY9IH4oT05FX01FRyAtIDEpOworCQlhZGV2LT5md192cmFtX3VzYWdlLm1lbV90cmFpbl9m Yl9sb2MgPSBvZmZzZXQ7CisJCWFkZXYtPmZ3X3ZyYW1fdXNhZ2UubWVtX3RyYWluX3N1cHBvcnQg PSB0cnVlOworCQlEUk1fREVCVUcoIm1lbV90cmFpbl9mYl9sb2M6MHglMDlsbHguXG4iLCBvZmZz ZXQpOworCQlyZXQgPSAwOworCX0gZWxzZSB7CisJCURSTV9FUlJPUigidXNlZF9ieV9maXJtd2Fy ZV9pbl9rYiBpcyAwIVxuIik7CisJCXJldCA9IC1FSU5WQUw7CisJfQorCisJcmV0dXJuIHJldDsK K30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9hdG9tZmly bXdhcmUuaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9hdG9tZmlybXdhcmUu aAppbmRleCA1MzQ0OWZjN2JhZjQuLmY4NzFhZjVlYTZmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2F0b21maXJtd2FyZS5oCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9hdG9tZmlybXdhcmUuaApAQCAtMzEsNiArMzEsNyBAQCB2 b2lkIGFtZGdwdV9hdG9tZmlybXdhcmVfc2NyYXRjaF9yZWdzX2luaXQoc3RydWN0IGFtZGdwdV9k ZXZpY2UgKmFkZXYpOwogaW50IGFtZGdwdV9hdG9tZmlybXdhcmVfYWxsb2NhdGVfZmJfc2NyYXRj aChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldik7CiBpbnQgYW1kZ3B1X2F0b21maXJtd2FyZV9n ZXRfdnJhbV9pbmZvKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAogCWludCAqdnJhbV93aWR0 aCwgaW50ICp2cmFtX3R5cGUsIGludCAqdnJhbV92ZW5kb3IpOworaW50IGFtZGdwdV9hdG9tZmly bXdhcmVfZ2V0X21lbV90cmFpbl9mYl9sb2Moc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpOwog aW50IGFtZGdwdV9hdG9tZmlybXdhcmVfZ2V0X2Nsb2NrX2luZm8oc3RydWN0IGFtZGdwdV9kZXZp Y2UgKmFkZXYpOwogaW50IGFtZGdwdV9hdG9tZmlybXdhcmVfZ2V0X2dmeF9pbmZvKHN0cnVjdCBh bWRncHVfZGV2aWNlICphZGV2KTsKIGJvb2wgYW1kZ3B1X2F0b21maXJtd2FyZV9tZW1fZWNjX3N1 cHBvcnRlZChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldik7Ci0tIAoyLjIwLjEKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmFtZC1nZnggbWFpbGluZyBs aXN0CmFtZC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0 b3Aub3JnL21haWxtYW4vbGlzdGluZm8vYW1kLWdmeA==