From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: [PATCH i-g-t 08/17] tests/gem_reset_stat: Use new ctx helpers Date: Tue, 10 Feb 2015 19:05:51 +0100 Message-ID: <1423591560-9471-8-git-send-email-daniel.vetter@ffwll.ch> References: <1423591560-9471-1-git-send-email-daniel.vetter@ffwll.ch> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wi0-f175.google.com (mail-wi0-f175.google.com [209.85.212.175]) by gabe.freedesktop.org (Postfix) with ESMTP id 4241D6E254 for ; Tue, 10 Feb 2015 10:04:49 -0800 (PST) Received: by mail-wi0-f175.google.com with SMTP id r20so11213484wiv.2 for ; Tue, 10 Feb 2015 10:04:48 -0800 (PST) In-Reply-To: <1423591560-9471-1-git-send-email-daniel.vetter@ffwll.ch> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Intel Graphics Development Cc: Daniel Vetter List-Id: intel-gfx@lists.freedesktop.org QSBiaXQgbW9yZSBpbnZhc2l2ZSBzaW5jZSBnZXR0aW5nIHJpZCBvZmYgYWxsIHRoZSBwbGFjZXMg bWVhbnQKdG8gZmxhdHRlbiBzb21lIG9mIHRoZSBjb250cm9sIGZsb3cgd2l0aCBpbXBsaWNpdCBp Z3RfcmVxdWlyZS4KClNpZ25lZC1vZmYtYnk6IERhbmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0ZXJA ZmZ3bGwuY2g+Ci0tLQogdGVzdHMvZ2VtX3Jlc2V0X3N0YXRzLmMgfCAxMTcgKysrKysrKysrKyst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMjcg aW5zZXJ0aW9ucygrKSwgOTAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvdGVzdHMvZ2VtX3Jl c2V0X3N0YXRzLmMgYi90ZXN0cy9nZW1fcmVzZXRfc3RhdHMuYwppbmRleCA2NDZkNmRhYzA1MmUu LmZhYTIwOWMxZDI4YSAxMDA2NDQKLS0tIGEvdGVzdHMvZ2VtX3Jlc2V0X3N0YXRzLmMKKysrIGIv dGVzdHMvZ2VtX3Jlc2V0X3N0YXRzLmMKQEAgLTUzLDcgKzUzLDYgQEAKICNkZWZpbmUgUlNfVU5L Tk9XTiAgICAgICAoMSA8PCAyKQogCiBzdGF0aWMgdWludDMyX3QgZGV2aWQ7Ci1zdGF0aWMgYm9v bCBod19jb250ZXh0czsKIAogc3RydWN0IGxvY2FsX2RybV9pOTE1X3Jlc2V0X3N0YXRzIHsKIAlf X3UzMiBjdHhfaWQ7CkBAIC02NCwyMCArNjMsOCBAQCBzdHJ1Y3QgbG9jYWxfZHJtX2k5MTVfcmVz ZXRfc3RhdHMgewogCV9fdTMyIHBhZDsKIH07CiAKLXN0cnVjdCBsb2NhbF9kcm1faTkxNV9nZW1f Y29udGV4dF9jcmVhdGUgewotCV9fdTMyIGN0eF9pZDsKLQlfX3UzMiBwYWQ7Ci19OwotCi1zdHJ1 Y3QgbG9jYWxfZHJtX2k5MTVfZ2VtX2NvbnRleHRfZGVzdHJveSB7Ci0JX191MzIgY3R4X2lkOwot CV9fdTMyIHBhZDsKLX07Ci0KICNkZWZpbmUgTUFYX0ZEIDMyCiAKLSNkZWZpbmUgQ09OVEVYVF9D UkVBVEVfSU9DVEwgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIDB4MmQsIHN0cnVjdCBsb2Nh bF9kcm1faTkxNV9nZW1fY29udGV4dF9jcmVhdGUpCi0jZGVmaW5lIENPTlRFWFRfREVTVFJPWV9J T0NUTCBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgMHgyZSwgc3RydWN0IGxvY2FsX2RybV9p OTE1X2dlbV9jb250ZXh0X2Rlc3Ryb3kpCiAjZGVmaW5lIEdFVF9SRVNFVF9TVEFUU19JT0NUTCBE Uk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgMHgzMiwgc3RydWN0IGxvY2FsX2RybV9pOTE1X3Jl c2V0X3N0YXRzKQogCiAjZGVmaW5lIExPQ0FMX0k5MTVfRVhFQ19WRUJPWAkoNCA8PCAwKQpAQCAt ODksNjQgKzc2LDMyIEBAIHN0YXRpYyBib29sIGdlbV9oYXNfcmVuZGVyKGludCBmZCkKIAlyZXR1 cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgaGFzX2NvbnRleHQoY29uc3Qgc3RydWN0IHRhcmdl dF9yaW5nICpyaW5nKTsKLQogc3RhdGljIGNvbnN0IHN0cnVjdCB0YXJnZXRfcmluZyB7CiAJdWlu dDMyX3QgZXhlYzsKIAlib29sICgqcHJlc2VudCkoaW50IGZkKTsKLQlib29sICgqY29udGV4dHMp KGNvbnN0IHN0cnVjdCB0YXJnZXRfcmluZyAqcmluZyk7CiAJY29uc3QgY2hhciAqbmFtZTsKIH0g cmluZ3NbXSA9IHsKLQl7IEk5MTVfRVhFQ19SRU5ERVIsIGdlbV9oYXNfcmVuZGVyLCBoYXNfY29u dGV4dCwgInJlbmRlciIgfSwKLQl7IEk5MTVfRVhFQ19CTFQsIGdlbV9oYXNfYmx0LCBoYXNfY29u dGV4dCwgImJsdCIgfSwKLQl7IEk5MTVfRVhFQ19CU0QsIGdlbV9oYXNfYnNkLCBoYXNfY29udGV4 dCwgImJzZCIgfSwKLQl7IExPQ0FMX0k5MTVfRVhFQ19WRUJPWCwgZ2VtX2hhc192ZWJveCwgaGFz X2NvbnRleHQsICJ2ZWJveCIgfSwKKwl7IEk5MTVfRVhFQ19SRU5ERVIsIGdlbV9oYXNfcmVuZGVy LCAicmVuZGVyIiB9LAorCXsgSTkxNV9FWEVDX0JMVCwgZ2VtX2hhc19ibHQsICJibHQiIH0sCisJ eyBJOTE1X0VYRUNfQlNELCBnZW1faGFzX2JzZCwgImJzZCIgfSwKKwl7IExPQ0FMX0k5MTVfRVhF Q19WRUJPWCwgZ2VtX2hhc192ZWJveCwgInZlYm94IiB9LAogfTsKIAotc3RhdGljIGJvb2wgaGFz X2NvbnRleHQoY29uc3Qgc3RydWN0IHRhcmdldF9yaW5nICpyaW5nKQorc3RhdGljIHZvaWQgY2hl Y2tfY29udGV4dChjb25zdCBzdHJ1Y3QgdGFyZ2V0X3JpbmcgKnJpbmcpCiB7Ci0JaWYgKCFod19j b250ZXh0cykKLQkJcmV0dXJuIGZhbHNlOworCWludCBmZCA9IGRybV9vcGVuX2FueSgpOwogCi0J aWYocmluZy0+ZXhlYyA9PSBJOTE1X0VYRUNfUkVOREVSKQotCQlyZXR1cm4gdHJ1ZTsKKwlnZW1f Y29udGV4dF9kZXN0cm95KGZkLAorCQkJICAgIGdlbV9jb250ZXh0X2NyZWF0ZShmZCkpOworCWNs b3NlKGZkKTsKIAotCXJldHVybiBmYWxzZTsKKwlpZ3RfcmVxdWlyZShyaW5nLT5leGVjID09IEk5 MTVfRVhFQ19SRU5ERVIpOwogfQogCiAjZGVmaW5lIE5VTV9SSU5HUyAoc2l6ZW9mKHJpbmdzKS9z aXplb2Yoc3RydWN0IHRhcmdldF9yaW5nKSkKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB0YXJnZXRf cmluZyAqY3VycmVudF9yaW5nOwogCi1zdGF0aWMgdWludDMyX3QgY29udGV4dF9jcmVhdGUoaW50 IGZkKQotewotCXN0cnVjdCBsb2NhbF9kcm1faTkxNV9nZW1fY29udGV4dF9jcmVhdGUgY3JlYXRl OwotCWludCByZXQ7Ci0KLQljcmVhdGUuY3R4X2lkID0gcmFuZCgpOwotCWNyZWF0ZS5wYWQgPSBy YW5kKCk7Ci0KLQlyZXQgPSBkcm1Jb2N0bChmZCwgQ09OVEVYVF9DUkVBVEVfSU9DVEwsICZjcmVh dGUpOwotCWlndF9hc3NlcnQocmV0ID09IDApOwotCi0JcmV0dXJuIGNyZWF0ZS5jdHhfaWQ7Ci19 Ci0KLXN0YXRpYyBpbnQgY29udGV4dF9kZXN0cm95KGludCBmZCwgdWludDMyX3QgY3R4X2lkKQot ewotCWludCByZXQ7Ci0Jc3RydWN0IGxvY2FsX2RybV9pOTE1X2dlbV9jb250ZXh0X2Rlc3Ryb3kg ZGVzdHJveTsKLQotCWRlc3Ryb3kuY3R4X2lkID0gY3R4X2lkOwotCWRlc3Ryb3kucGFkID0gcmFu ZCgpOwotCi0JcmV0ID0gZHJtSW9jdGwoZmQsIENPTlRFWFRfREVTVFJPWV9JT0NUTCwgJmRlc3Ry b3kpOwotCWlmIChyZXQgIT0gMCkKLQkJcmV0dXJuIC1lcnJubzsKLQotCXJldHVybiAwOwotfQot CiBzdGF0aWMgaW50IGdlbV9yZXNldF9zdGF0cyhpbnQgZmQsIGludCBjdHhfaWQsCiAJCQkgICBz dHJ1Y3QgbG9jYWxfZHJtX2k5MTVfcmVzZXRfc3RhdHMgKnJzKQogewpAQCAtNDUwLDcgKzQwNSw3 IEBAIHN0YXRpYyB2b2lkIHRlc3RfcnNfY3R4KGludCBudW1fZmRzLCBpbnQgbnVtX2N0eCwgaW50 IGhhbmdfaW5kZXgsCiAJCWFzc2VydF9yZXNldF9zdGF0dXMoZmRbaV0sIDAsIFJTX05PX0VSUk9S KTsKIAogCQlmb3IgKGogPSAwOyBqIDwgbnVtX2N0eDsgaisrKSB7Ci0JCQljdHhbaV1bal0gPSBj b250ZXh0X2NyZWF0ZShmZFtpXSk7CisJCQljdHhbaV1bal0gPSBnZW1fY29udGV4dF9jcmVhdGUo ZmRbaV0pOwogCiAJCX0KIApAQCAtNTAyLDcgKzQ1Nyw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfcnNf Y3R4KGludCBudW1fZmRzLCBpbnQgbnVtX2N0eCwgaW50IGhhbmdfaW5kZXgsCiAJZm9yIChpID0g MDsgaSA8IG51bV9mZHM7IGkrKykgewogCQlmb3IgKGogPSAwOyBqIDwgbnVtX2N0eDsgaisrKSB7 CiAJCQlnZW1fY2xvc2UoZmRbaV0sIGhbaV1bal0pOwotCQkJaWd0X2Fzc2VydChjb250ZXh0X2Rl c3Ryb3koZmRbaV0sIGN0eFtpXVtqXSkgPT0gMCk7CisJCQlnZW1fY29udGV4dF9kZXN0cm95KGZk W2ldLCBjdHhbaV1bal0pOwogCQl9CiAKIAkJYXNzZXJ0X3Jlc2V0X3N0YXR1cyhmZFtpXSwgMCwg UlNfTk9fRVJST1IpOwpAQCAtNjEwLDggKzU2NSw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfYmFuX2N0 eCh2b2lkKQogCiAJYXNzZXJ0X3Jlc2V0X3N0YXR1cyhmZCwgMCwgUlNfTk9fRVJST1IpOwogCi0J Y3R4X2dvb2QgPSBjb250ZXh0X2NyZWF0ZShmZCk7Ci0JY3R4X2JhZCA9IGNvbnRleHRfY3JlYXRl KGZkKTsKKwljdHhfZ29vZCA9IGdlbV9jb250ZXh0X2NyZWF0ZShmZCk7CisJY3R4X2JhZCA9IGdl bV9jb250ZXh0X2NyZWF0ZShmZCk7CiAKIAlhc3NlcnRfcmVzZXRfc3RhdHVzKGZkLCAwLCBSU19O T19FUlJPUik7CiAJYXNzZXJ0X3Jlc2V0X3N0YXR1cyhmZCwgY3R4X2dvb2QsIFJTX05PX0VSUk9S KTsKQEAgLTY4MSw4ICs2MzYsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X2Jhbl9jdHgodm9pZCkKIAlp Z3RfYXNzZXJ0KGgxID49IDApOwogCWdlbV9jbG9zZShmZCwgaDEpOwogCi0JaWd0X2Fzc2VydChj b250ZXh0X2Rlc3Ryb3koZmQsIGN0eF9nb29kKSA9PSAwKTsKLQlpZ3RfYXNzZXJ0KGNvbnRleHRf ZGVzdHJveShmZCwgY3R4X2JhZCkgPT0gMCk7CisJZ2VtX2NvbnRleHRfZGVzdHJveShmZCwgY3R4 X2dvb2QpOworCWdlbV9jb250ZXh0X2Rlc3Ryb3koZmQsIGN0eF9iYWQpOwogCWlndF9hc3NlcnQo Z2VtX3Jlc2V0X3N0YXR1cyhmZCwgY3R4X2dvb2QpIDwgMCk7CiAJaWd0X2Fzc2VydChnZW1fcmVz ZXRfc3RhdHVzKGZkLCBjdHhfYmFkKSA8IDApOwogCWlndF9hc3NlcnQoZXhlY192YWxpZChmZCwg Y3R4X2dvb2QpIDwgMCk7CkBAIC03MDEsOCArNjU2LDggQEAgc3RhdGljIHZvaWQgdGVzdF91bnJl bGF0ZWRfY3R4KHZvaWQpCiAJZmQyID0gZHJtX29wZW5fYW55KCk7CiAJYXNzZXJ0X3Jlc2V0X3N0 YXR1cyhmZDEsIDAsIFJTX05PX0VSUk9SKTsKIAlhc3NlcnRfcmVzZXRfc3RhdHVzKGZkMiwgMCwg UlNfTk9fRVJST1IpOwotCWN0eF9ndWlsdHkgPSBjb250ZXh0X2NyZWF0ZShmZDEpOwotCWN0eF91 bnJlbGF0ZWQgPSBjb250ZXh0X2NyZWF0ZShmZDIpOworCWN0eF9ndWlsdHkgPSBnZW1fY29udGV4 dF9jcmVhdGUoZmQxKTsKKwljdHhfdW5yZWxhdGVkID0gZ2VtX2NvbnRleHRfY3JlYXRlKGZkMik7 CiAKIAlhc3NlcnRfcmVzZXRfc3RhdHVzKGZkMSwgY3R4X2d1aWx0eSwgUlNfTk9fRVJST1IpOwog CWFzc2VydF9yZXNldF9zdGF0dXMoZmQyLCBjdHhfdW5yZWxhdGVkLCBSU19OT19FUlJPUik7CkBA IC03MjEsOCArNjc2LDggQEAgc3RhdGljIHZvaWQgdGVzdF91bnJlbGF0ZWRfY3R4KHZvaWQpCiAJ Z2VtX2Nsb3NlKGZkMSwgaDEpOwogCWdlbV9jbG9zZShmZDIsIGgyKTsKIAotCWlndF9hc3NlcnQo Y29udGV4dF9kZXN0cm95KGZkMSwgY3R4X2d1aWx0eSkgPT0gMCk7Ci0JaWd0X2Fzc2VydChjb250 ZXh0X2Rlc3Ryb3koZmQyLCBjdHhfdW5yZWxhdGVkKSA9PSAwKTsKKwlnZW1fY29udGV4dF9kZXN0 cm95KGZkMSwgY3R4X2d1aWx0eSk7CisJZ2VtX2NvbnRleHRfZGVzdHJveShmZDIsIGN0eF91bnJl bGF0ZWQpOwogCiAJY2xvc2UoZmQxKTsKIAljbG9zZShmZDIpOwpAQCAtNzQ2LDE0ICs3MDEsMTQg QEAgc3RhdGljIHZvaWQgdGVzdF9jbG9zZV9wZW5kaW5nX2N0eCh2b2lkKQogCXVpbnQzMl90IGN0 eDsKIAogCWZkID0gZHJtX29wZW5fYW55KCk7Ci0JY3R4ID0gY29udGV4dF9jcmVhdGUoZmQpOwor CWN0eCA9IGdlbV9jb250ZXh0X2NyZWF0ZShmZCk7CiAKIAlhc3NlcnRfcmVzZXRfc3RhdHVzKGZk LCBjdHgsIFJTX05PX0VSUk9SKTsKIAogCWggPSBpbmplY3RfaGFuZyhmZCwgY3R4KTsKIAlpZ3Rf YXNzZXJ0KGggPj0gMCk7Ci0JaWd0X2Fzc2VydChjb250ZXh0X2Rlc3Ryb3koZmQsIGN0eCkgPT0g MCk7Ci0JaWd0X2Fzc2VydChjb250ZXh0X2Rlc3Ryb3koZmQsIGN0eCkgPT0gLUVOT0VOVCk7CisJ Z2VtX2NvbnRleHRfZGVzdHJveShmZCwgY3R4KTsKKwlpZ3RfYXNzZXJ0KF9fZ2VtX2NvbnRleHRf ZGVzdHJveShmZCwgY3R4KSA9PSAtRU5PRU5UKTsKIAogCWdlbV9jbG9zZShmZCwgaCk7CiAJY2xv c2UoZmQpOwpAQCAtODgxLDcgKzgzNiw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfcmVzZXRfY291bnQo Y29uc3QgYm9vbCBjcmVhdGVfY3R4KQogCiAJZmQgPSBkcm1fb3Blbl9hbnkoKTsKIAlpZiAoY3Jl YXRlX2N0eCkKLQkJY3R4ID0gY29udGV4dF9jcmVhdGUoZmQpOworCQljdHggPSBnZW1fY29udGV4 dF9jcmVhdGUoZmQpOwogCWVsc2UKIAkJY3R4ID0gMDsKIApAQCAtOTE1LDcgKzg3MCw3IEBAIHN0 YXRpYyB2b2lkIHRlc3RfcmVzZXRfY291bnQoY29uc3QgYm9vbCBjcmVhdGVfY3R4KQogCWdlbV9j bG9zZShmZCwgaCk7CiAKIAlpZiAoY3JlYXRlX2N0eCkKLQkJY29udGV4dF9kZXN0cm95KGZkLCBj dHgpOworCQlnZW1fY29udGV4dF9kZXN0cm95KGZkLCBjdHgpOwogCiAJY2xvc2UoZmQpOwogfQpA QCAtOTkwLDcgKzk0NSw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfcGFyYW1zX2N0eCh2b2lkKQogCWlu dCBmZCwgY3R4OwogCiAJZmQgPSBkcm1fb3Blbl9hbnkoKTsKLQljdHggPSBjb250ZXh0X2NyZWF0 ZShmZCk7CisJY3R4ID0gZ2VtX2NvbnRleHRfY3JlYXRlKGZkKTsKIAogCV90ZXN0X3BhcmFtKGZk LCBjdHgpOwogCkBAIC0xMDQ3LDIyICsxMDAyLDYgQEAgc3RhdGljIHZvaWQgZGVmZXJfaGFuZ2No ZWNrKGludCByaW5nX251bSkKIAljbG9zZShmZCk7CiB9CiAKLXN0YXRpYyBib29sIGdlbV9oYXNf aHdfY29udGV4dHMoaW50IGZkKQotewotCXN0cnVjdCBsb2NhbF9kcm1faTkxNV9nZW1fY29udGV4 dF9jcmVhdGUgY3JlYXRlOwotCWludCByZXQ7Ci0KLQltZW1zZXQoJmNyZWF0ZSwgMCwgc2l6ZW9m KGNyZWF0ZSkpOwotCXJldCA9IGRybUlvY3RsKGZkLCBDT05URVhUX0NSRUFURV9JT0NUTCwgJmNy ZWF0ZSk7Ci0KLQlpZiAocmV0ID09IDApIHsKLQkJZHJtSW9jdGwoZmQsIENPTlRFWFRfREVTVFJP WV9JT0NUTCwgJmNyZWF0ZSk7Ci0JCXJldHVybiB0cnVlOwotCX0KLQotCXJldHVybiBmYWxzZTsK LX0KLQogc3RhdGljIGJvb2wgZ2VtX2hhc19yZXNldF9zdGF0cyhpbnQgZmQpCiB7CiAJc3RydWN0 IGxvY2FsX2RybV9pOTE1X3Jlc2V0X3N0YXRzIHJzOwpAQCAtMTEwOSw5ICsxMDQ4LDggQEAgc3Rh dGljIHZvaWQgY2hlY2tfZ3B1X29rKHZvaWQpCiAJY2xvc2UoZmQpOwogfQogCi0jZGVmaW5lIFJJ TkdfSEFTX0NPTlRFWFRTIChjdXJyZW50X3JpbmctPmNvbnRleHRzKGN1cnJlbnRfcmluZykpCiAj ZGVmaW5lIFJVTl9URVNUKC4uLikgZG8geyBjaGVja19ncHVfb2soKTsgX19WQV9BUkdTX187IGNo ZWNrX2dwdV9vaygpOyB9IHdoaWxlICgwKQotI2RlZmluZSBSVU5fQ1RYX1RFU1QoLi4uKSBkbyB7 IGlndF9za2lwX29uKFJJTkdfSEFTX0NPTlRFWFRTID09IGZhbHNlKTsgUlVOX1RFU1QoX19WQV9B UkdTX18pOyB9IHdoaWxlICgwKQorI2RlZmluZSBSVU5fQ1RYX1RFU1QoLi4uKSBkbyB7IGNoZWNr X2NvbnRleHQoY3VycmVudF9yaW5nKTsgUlVOX1RFU1QoX19WQV9BUkdTX18pOyB9IHdoaWxlICgw KQogCiBpZ3RfbWFpbgogewpAQCAtMTEyNCw3ICsxMDYyLDYgQEAgaWd0X21haW4KIAkJZmQgPSBk cm1fb3Blbl9hbnkoKTsKIAkJZGV2aWQgPSBpbnRlbF9nZXRfZHJtX2RldmlkKGZkKTsKIAotCQlo d19jb250ZXh0cyA9IGdlbV9oYXNfaHdfY29udGV4dHMoZmQpOwogCQloYXNfcmVzZXRfc3RhdHMg PSBnZW1faGFzX3Jlc2V0X3N0YXRzKGZkKTsKIAogCQljbG9zZShmZCk7Ci0tIAoyLjEuNAoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1h aWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK