From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= Subject: [PATCH] drm/amdgpu: add a workaround for GDS ordered append hangs with compute queues Date: Tue, 22 Jan 2019 15:05:46 -0500 Message-ID: <20190122200546.1575-1-maraeo@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: 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 RnJvbTogTWFyZWsgT2zFocOhayA8bWFyZWsub2xzYWtAYW1kLmNvbT4KCkknbSBub3QgaW5jcmVh c2luZyB0aGUgRFJNIHZlcnNpb24gYmVjYXVzZSBHRFMgaXNuJ3QgdG90YWxseSB3aXRob3V0IGJ1 Z3MgeWV0LgoKdjI6IHVwZGF0ZSBlbWl0X2liX3NpemUKClNpZ25lZC1vZmYtYnk6IE1hcmVrIE9s xaHDoWsgPG1hcmVrLm9sc2FrQGFtZC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvYW1kZ3B1X2dkcy5oIHwgIDIgKysKIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2dmeF92 N18wLmMgICB8IDE5ICsrKysrKysrKysrLQogZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvZ2Z4 X3Y4XzAuYyAgIHwgMjEgKysrKysrKysrKystLQogZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUv Z2Z4X3Y5XzAuYyAgIHwgNDAgKysrKysrKysrKysrKysrKysrKysrKystLQogaW5jbHVkZS91YXBp L2RybS9hbWRncHVfZHJtLmggICAgICAgICAgIHwgIDUgKysrKwogNSBmaWxlcyBjaGFuZ2VkLCA4 MiBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9nZHMuaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1 L2FtZGdwdV9nZHMuaAppbmRleCBlY2JjZWZlNDlhOTguLmY4OWY1NzM0ZDk4NSAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2dkcy5oCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9nZHMuaApAQCAtMzAsMjAgKzMwLDIyIEBAIHN0cnVj dCBhbWRncHVfYm87CiBzdHJ1Y3QgYW1kZ3B1X2dkc19hc2ljX2luZm8gewogCXVpbnQzMl90CXRv dGFsX3NpemU7CiAJdWludDMyX3QJZ2Z4X3BhcnRpdGlvbl9zaXplOwogCXVpbnQzMl90CWNzX3Bh cnRpdGlvbl9zaXplOwogfTsKIAogc3RydWN0IGFtZGdwdV9nZHMgewogCXN0cnVjdCBhbWRncHVf Z2RzX2FzaWNfaW5mbwltZW07CiAJc3RydWN0IGFtZGdwdV9nZHNfYXNpY19pbmZvCWd3czsKIAlz dHJ1Y3QgYW1kZ3B1X2dkc19hc2ljX2luZm8Jb2E7CisJdWludDMyX3QJCQlnZHNfY29tcHV0ZV9t YXhfd2F2ZV9pZDsKKwogCS8qIEF0IHByZXNlbnQsIEdEUywgR1dTIGFuZCBPQSByZXNvdXJjZXMg Zm9yIGdmeCAoZ3JhcGhpY3MpCiAJICogaXMgYWx3YXlzIHByZS1hbGxvY2F0ZWQgYW5kIGF2YWls YWJsZSBmb3IgZ3JhcGhpY3Mgb3BlcmF0aW9uLgogCSAqIFN1Y2ggcmVzb3VyY2UgaXMgc2hhcmVk IGJldHdlZW4gYWxsIGdmeCBjbGllbnRzLgogCSAqIFRPRE86IG1vdmUgdGhpcyBvcGVyYXRpb24g dG8gdXNlciBzcGFjZQogCSAqICovCiAJc3RydWN0IGFtZGdwdV9ibyoJCWdkc19nZnhfYm87CiAJ c3RydWN0IGFtZGdwdV9ibyoJCWd3c19nZnhfYm87CiAJc3RydWN0IGFtZGdwdV9ibyoJCW9hX2dm eF9ibzsKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2dmeF92 N18wLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9nZnhfdjdfMC5jCmluZGV4IDc5ODQy OTJmOTI4Mi4uYTU5ZTBmZGY1YTk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGdwdS9nZnhfdjdfMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2dmeF92N18w LmMKQEAgLTIyNTcsMjAgKzIyNTcsMzYgQEAgc3RhdGljIHZvaWQgZ2Z4X3Y3XzBfcmluZ19lbWl0 X2liX2dmeChzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcsCiB9CiAKIHN0YXRpYyB2b2lkIGdmeF92 N18wX3JpbmdfZW1pdF9pYl9jb21wdXRlKHN0cnVjdCBhbWRncHVfcmluZyAqcmluZywKIAkJCQkJ ICBzdHJ1Y3QgYW1kZ3B1X2pvYiAqam9iLAogCQkJCQkgIHN0cnVjdCBhbWRncHVfaWIgKmliLAog CQkJCQkgIHVpbnQzMl90IGZsYWdzKQogewogCXVuc2lnbmVkIHZtaWQgPSBBTURHUFVfSk9CX0dF VF9WTUlEKGpvYik7CiAJdTMyIGNvbnRyb2wgPSBJTkRJUkVDVF9CVUZGRVJfVkFMSUQgfCBpYi0+ bGVuZ3RoX2R3IHwgKHZtaWQgPDwgMjQpOwogCisJLyogQ3VycmVudGx5LCB0aGVyZSBpcyBhIGhp Z2ggcG9zc2liaWxpdHkgdG8gZ2V0IHdhdmUgSUQgbWlzbWF0Y2gKKwkgKiBiZXR3ZWVuIE1FIGFu ZCBHRFMsIGxlYWRpbmcgdG8gYSBodyBkZWFkbG9jaywgYmVjYXVzZSBNRSBnZW5lcmF0ZXMKKwkg KiBkaWZmZXJlbnQgd2F2ZSBJRHMgdGhhbiB0aGUgR0RTIGV4cGVjdHMuIFRoaXMgc2l0dWF0aW9u IGhhcHBlbnMKKwkgKiByYW5kb21seSB3aGVuIGF0IGxlYXN0IDUgY29tcHV0ZSBwaXBlcyB1c2Ug R0RTIG9yZGVyZWQgYXBwZW5kLgorCSAqIFRoZSB3YXZlIElEcyBnZW5lcmF0ZWQgYnkgTUUgYXJl IGFsc28gd3JvbmcgYWZ0ZXIgc3VzcGVuZC9yZXN1bWUuCisJICogVGhvc2UgYXJlIHByb2JhYmx5 IGJ1Z3Mgc29tZXdoZXJlIGVsc2UgaW4gdGhlIGtlcm5lbCBkcml2ZXIuCisJICoKKwkgKiBXcml0 aW5nIEdEU19DT01QVVRFX01BWF9XQVZFX0lEIHJlc2V0cyB3YXZlIElEIGNvdW50ZXJzIGluIE1F IGFuZAorCSAqIEdEUyB0byAwIGZvciB0aGlzIHJpbmcgKG1lL3BpcGUpLgorCSAqLworCWlmIChp Yi0+ZmxhZ3MgJiBBTURHUFVfSUJfRkxBR19SRVNFVF9HRFNfTUFYX1dBVkVfSUQpIHsKKwkJYW1k Z3B1X3Jpbmdfd3JpdGUocmluZywgUEFDS0VUMyhQQUNLRVQzX1NFVF9DT05GSUdfUkVHLCAxKSk7 CisJCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIG1tR0RTX0NPTVBVVEVfTUFYX1dBVkVfSUQgLSBQ QUNLRVQzX1NFVF9DT05GSUdfUkVHX1NUQVJUKTsKKwkJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywg cmluZy0+YWRldi0+Z2RzLmdkc19jb21wdXRlX21heF93YXZlX2lkKTsKKwl9CisKIAlhbWRncHVf cmluZ193cml0ZShyaW5nLCBQQUNLRVQzKFBBQ0tFVDNfSU5ESVJFQ1RfQlVGRkVSLCAyKSk7CiAJ YW1kZ3B1X3Jpbmdfd3JpdGUocmluZywKICNpZmRlZiBfX0JJR19FTkRJQU4KIAkJCQkJICAoMiA8 PCAwKSB8CiAjZW5kaWYKIAkJCQkJICAoaWItPmdwdV9hZGRyICYgMHhGRkZGRkZGQykpOwogCWFt ZGdwdV9yaW5nX3dyaXRlKHJpbmcsIHVwcGVyXzMyX2JpdHMoaWItPmdwdV9hZGRyKSAmIDB4RkZG Rik7CiAJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgY29udHJvbCk7CiB9CiAKQEAgLTQ5OTMsMjEg KzUwMDksMjEgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhbWRncHVfcmluZ19mdW5jcyBnZnhfdjdf MF9yaW5nX2Z1bmNzX2NvbXB1dGUgPSB7CiAJLmdldF9ycHRyID0gZ2Z4X3Y3XzBfcmluZ19nZXRf cnB0ciwKIAkuZ2V0X3dwdHIgPSBnZnhfdjdfMF9yaW5nX2dldF93cHRyX2NvbXB1dGUsCiAJLnNl dF93cHRyID0gZ2Z4X3Y3XzBfcmluZ19zZXRfd3B0cl9jb21wdXRlLAogCS5lbWl0X2ZyYW1lX3Np emUgPQogCQkyMCArIC8qIGdmeF92N18wX3JpbmdfZW1pdF9nZHNfc3dpdGNoICovCiAJCTcgKyAv KiBnZnhfdjdfMF9yaW5nX2VtaXRfaGRwX2ZsdXNoICovCiAJCTUgKyAvKiBoZHAgaW52YWxpZGF0 ZSAqLwogCQk3ICsgLyogZ2Z4X3Y3XzBfcmluZ19lbWl0X3BpcGVsaW5lX3N5bmMgKi8KIAkJQ0lL X0ZMVVNIX0dQVV9UTEJfTlVNX1dSRUcgKiA1ICsgNyArIC8qIGdmeF92N18wX3JpbmdfZW1pdF92 bV9mbHVzaCAqLwogCQk3ICsgNyArIDcsIC8qIGdmeF92N18wX3JpbmdfZW1pdF9mZW5jZV9jb21w dXRlIHgzIGZvciB1c2VyIGZlbmNlLCB2bSBmZW5jZSAqLwotCS5lbWl0X2liX3NpemUgPQk0LCAv KiBnZnhfdjdfMF9yaW5nX2VtaXRfaWJfY29tcHV0ZSAqLworCS5lbWl0X2liX3NpemUgPQk3LCAv KiBnZnhfdjdfMF9yaW5nX2VtaXRfaWJfY29tcHV0ZSAqLwogCS5lbWl0X2liID0gZ2Z4X3Y3XzBf cmluZ19lbWl0X2liX2NvbXB1dGUsCiAJLmVtaXRfZmVuY2UgPSBnZnhfdjdfMF9yaW5nX2VtaXRf ZmVuY2VfY29tcHV0ZSwKIAkuZW1pdF9waXBlbGluZV9zeW5jID0gZ2Z4X3Y3XzBfcmluZ19lbWl0 X3BpcGVsaW5lX3N5bmMsCiAJLmVtaXRfdm1fZmx1c2ggPSBnZnhfdjdfMF9yaW5nX2VtaXRfdm1f Zmx1c2gsCiAJLmVtaXRfZ2RzX3N3aXRjaCA9IGdmeF92N18wX3JpbmdfZW1pdF9nZHNfc3dpdGNo LAogCS5lbWl0X2hkcF9mbHVzaCA9IGdmeF92N18wX3JpbmdfZW1pdF9oZHBfZmx1c2gsCiAJLnRl c3RfcmluZyA9IGdmeF92N18wX3JpbmdfdGVzdF9yaW5nLAogCS50ZXN0X2liID0gZ2Z4X3Y3XzBf cmluZ190ZXN0X2liLAogCS5pbnNlcnRfbm9wID0gYW1kZ3B1X3JpbmdfaW5zZXJ0X25vcCwKIAku cGFkX2liID0gYW1kZ3B1X3JpbmdfZ2VuZXJpY19wYWRfaWIsCkBAIC01MDUwLDIwICs1MDY2LDIx IEBAIHN0YXRpYyB2b2lkIGdmeF92N18wX3NldF9pcnFfZnVuY3Moc3RydWN0IGFtZGdwdV9kZXZp Y2UgKmFkZXYpCiAJYWRldi0+Z2Z4LnByaXZfaW5zdF9pcnEubnVtX3R5cGVzID0gMTsKIAlhZGV2 LT5nZngucHJpdl9pbnN0X2lycS5mdW5jcyA9ICZnZnhfdjdfMF9wcml2X2luc3RfaXJxX2Z1bmNz OwogfQogCiBzdGF0aWMgdm9pZCBnZnhfdjdfMF9zZXRfZ2RzX2luaXQoc3RydWN0IGFtZGdwdV9k ZXZpY2UgKmFkZXYpCiB7CiAJLyogaW5pdCBhc2NpIGdkcyBpbmZvICovCiAJYWRldi0+Z2RzLm1l bS50b3RhbF9zaXplID0gUlJFRzMyKG1tR0RTX1ZNSUQwX1NJWkUpOwogCWFkZXYtPmdkcy5nd3Mu dG90YWxfc2l6ZSA9IDY0OwogCWFkZXYtPmdkcy5vYS50b3RhbF9zaXplID0gMTY7CisJYWRldi0+ Z2RzLmdkc19jb21wdXRlX21heF93YXZlX2lkID0gUlJFRzMyKG1tR0RTX0NPTVBVVEVfTUFYX1dB VkVfSUQpOwogCiAJaWYgKGFkZXYtPmdkcy5tZW0udG90YWxfc2l6ZSA9PSA2NCAqIDEwMjQpIHsK IAkJYWRldi0+Z2RzLm1lbS5nZnhfcGFydGl0aW9uX3NpemUgPSA0MDk2OwogCQlhZGV2LT5nZHMu bWVtLmNzX3BhcnRpdGlvbl9zaXplID0gNDA5NjsKIAogCQlhZGV2LT5nZHMuZ3dzLmdmeF9wYXJ0 aXRpb25fc2l6ZSA9IDQ7CiAJCWFkZXYtPmdkcy5nd3MuY3NfcGFydGl0aW9uX3NpemUgPSA0Owog CiAJCWFkZXYtPmdkcy5vYS5nZnhfcGFydGl0aW9uX3NpemUgPSA0OwogCQlhZGV2LT5nZHMub2Eu Y3NfcGFydGl0aW9uX3NpemUgPSAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9h bWRncHUvZ2Z4X3Y4XzAuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2dmeF92OF8wLmMK aW5kZXggYTI2NzQ3NjgxZWQ2Li5iOGU1MGEzNGJkYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9hbWQvYW1kZ3B1L2dmeF92OF8wLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvZ2Z4X3Y4XzAuYwpAQCAtNjA3NywyMCArNjA3NywzNiBAQCBzdGF0aWMgdm9pZCBnZnhfdjhf MF9yaW5nX2VtaXRfaWJfZ2Z4KHN0cnVjdCBhbWRncHVfcmluZyAqcmluZywKIH0KIAogc3RhdGlj IHZvaWQgZ2Z4X3Y4XzBfcmluZ19lbWl0X2liX2NvbXB1dGUoc3RydWN0IGFtZGdwdV9yaW5nICpy aW5nLAogCQkJCQkgIHN0cnVjdCBhbWRncHVfam9iICpqb2IsCiAJCQkJCSAgc3RydWN0IGFtZGdw dV9pYiAqaWIsCiAJCQkJCSAgdWludDMyX3QgZmxhZ3MpCiB7CiAJdW5zaWduZWQgdm1pZCA9IEFN REdQVV9KT0JfR0VUX1ZNSUQoam9iKTsKIAl1MzIgY29udHJvbCA9IElORElSRUNUX0JVRkZFUl9W QUxJRCB8IGliLT5sZW5ndGhfZHcgfCAodm1pZCA8PCAyNCk7CiAKKwkvKiBDdXJyZW50bHksIHRo ZXJlIGlzIGEgaGlnaCBwb3NzaWJpbGl0eSB0byBnZXQgd2F2ZSBJRCBtaXNtYXRjaAorCSAqIGJl dHdlZW4gTUUgYW5kIEdEUywgbGVhZGluZyB0byBhIGh3IGRlYWRsb2NrLCBiZWNhdXNlIE1FIGdl bmVyYXRlcworCSAqIGRpZmZlcmVudCB3YXZlIElEcyB0aGFuIHRoZSBHRFMgZXhwZWN0cy4gVGhp cyBzaXR1YXRpb24gaGFwcGVucworCSAqIHJhbmRvbWx5IHdoZW4gYXQgbGVhc3QgNSBjb21wdXRl IHBpcGVzIHVzZSBHRFMgb3JkZXJlZCBhcHBlbmQuCisJICogVGhlIHdhdmUgSURzIGdlbmVyYXRl ZCBieSBNRSBhcmUgYWxzbyB3cm9uZyBhZnRlciBzdXNwZW5kL3Jlc3VtZS4KKwkgKiBUaG9zZSBh cmUgcHJvYmFibHkgYnVncyBzb21ld2hlcmUgZWxzZSBpbiB0aGUga2VybmVsIGRyaXZlci4KKwkg KgorCSAqIFdyaXRpbmcgR0RTX0NPTVBVVEVfTUFYX1dBVkVfSUQgcmVzZXRzIHdhdmUgSUQgY291 bnRlcnMgaW4gTUUgYW5kCisJICogR0RTIHRvIDAgZm9yIHRoaXMgcmluZyAobWUvcGlwZSkuCisJ ICovCisJaWYgKGliLT5mbGFncyAmIEFNREdQVV9JQl9GTEFHX1JFU0VUX0dEU19NQVhfV0FWRV9J RCkgeworCQlhbWRncHVfcmluZ193cml0ZShyaW5nLCBQQUNLRVQzKFBBQ0tFVDNfU0VUX0NPTkZJ R19SRUcsIDEpKTsKKwkJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgbW1HRFNfQ09NUFVURV9NQVhf V0FWRV9JRCAtIFBBQ0tFVDNfU0VUX0NPTkZJR19SRUdfU1RBUlQpOworCQlhbWRncHVfcmluZ193 cml0ZShyaW5nLCByaW5nLT5hZGV2LT5nZHMuZ2RzX2NvbXB1dGVfbWF4X3dhdmVfaWQpOworCX0K KwogCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIFBBQ0tFVDMoUEFDS0VUM19JTkRJUkVDVF9CVUZG RVIsIDIpKTsKIAlhbWRncHVfcmluZ193cml0ZShyaW5nLAogI2lmZGVmIF9fQklHX0VORElBTgog CQkJCSgyIDw8IDApIHwKICNlbmRpZgogCQkJCShpYi0+Z3B1X2FkZHIgJiAweEZGRkZGRkZDKSk7 CiAJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgdXBwZXJfMzJfYml0cyhpYi0+Z3B1X2FkZHIpICYg MHhGRkZGKTsKIAlhbWRncHVfcmluZ193cml0ZShyaW5nLCBjb250cm9sKTsKIH0KIApAQCAtNjg4 MywyMSArNjg5OSwyMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFtZGdwdV9yaW5nX2Z1bmNzIGdm eF92OF8wX3JpbmdfZnVuY3NfY29tcHV0ZSA9IHsKIAkuZ2V0X3JwdHIgPSBnZnhfdjhfMF9yaW5n X2dldF9ycHRyLAogCS5nZXRfd3B0ciA9IGdmeF92OF8wX3JpbmdfZ2V0X3dwdHJfY29tcHV0ZSwK IAkuc2V0X3dwdHIgPSBnZnhfdjhfMF9yaW5nX3NldF93cHRyX2NvbXB1dGUsCiAJLmVtaXRfZnJh bWVfc2l6ZSA9CiAJCTIwICsgLyogZ2Z4X3Y4XzBfcmluZ19lbWl0X2dkc19zd2l0Y2ggKi8KIAkJ NyArIC8qIGdmeF92OF8wX3JpbmdfZW1pdF9oZHBfZmx1c2ggKi8KIAkJNSArIC8qIGhkcF9pbnZh bGlkYXRlICovCiAJCTcgKyAvKiBnZnhfdjhfMF9yaW5nX2VtaXRfcGlwZWxpbmVfc3luYyAqLwog CQlWSV9GTFVTSF9HUFVfVExCX05VTV9XUkVHICogNSArIDcgKyAvKiBnZnhfdjhfMF9yaW5nX2Vt aXRfdm1fZmx1c2ggKi8KIAkJNyArIDcgKyA3LCAvKiBnZnhfdjhfMF9yaW5nX2VtaXRfZmVuY2Vf Y29tcHV0ZSB4MyBmb3IgdXNlciBmZW5jZSwgdm0gZmVuY2UgKi8KLQkuZW1pdF9pYl9zaXplID0J NCwgLyogZ2Z4X3Y4XzBfcmluZ19lbWl0X2liX2NvbXB1dGUgKi8KKwkuZW1pdF9pYl9zaXplID0J NywgLyogZ2Z4X3Y4XzBfcmluZ19lbWl0X2liX2NvbXB1dGUgKi8KIAkuZW1pdF9pYiA9IGdmeF92 OF8wX3JpbmdfZW1pdF9pYl9jb21wdXRlLAogCS5lbWl0X2ZlbmNlID0gZ2Z4X3Y4XzBfcmluZ19l bWl0X2ZlbmNlX2NvbXB1dGUsCiAJLmVtaXRfcGlwZWxpbmVfc3luYyA9IGdmeF92OF8wX3Jpbmdf ZW1pdF9waXBlbGluZV9zeW5jLAogCS5lbWl0X3ZtX2ZsdXNoID0gZ2Z4X3Y4XzBfcmluZ19lbWl0 X3ZtX2ZsdXNoLAogCS5lbWl0X2dkc19zd2l0Y2ggPSBnZnhfdjhfMF9yaW5nX2VtaXRfZ2RzX3N3 aXRjaCwKIAkuZW1pdF9oZHBfZmx1c2ggPSBnZnhfdjhfMF9yaW5nX2VtaXRfaGRwX2ZsdXNoLAog CS50ZXN0X3JpbmcgPSBnZnhfdjhfMF9yaW5nX3Rlc3RfcmluZywKIAkudGVzdF9pYiA9IGdmeF92 OF8wX3JpbmdfdGVzdF9pYiwKIAkuaW5zZXJ0X25vcCA9IGFtZGdwdV9yaW5nX2luc2VydF9ub3As CiAJLnBhZF9pYiA9IGFtZGdwdV9yaW5nX2dlbmVyaWNfcGFkX2liLApAQCAtNjkxMywyMSArNjky OSwyMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFtZGdwdV9yaW5nX2Z1bmNzIGdmeF92OF8wX3Jp bmdfZnVuY3Nfa2lxID0gewogCS5nZXRfcnB0ciA9IGdmeF92OF8wX3JpbmdfZ2V0X3JwdHIsCiAJ LmdldF93cHRyID0gZ2Z4X3Y4XzBfcmluZ19nZXRfd3B0cl9jb21wdXRlLAogCS5zZXRfd3B0ciA9 IGdmeF92OF8wX3Jpbmdfc2V0X3dwdHJfY29tcHV0ZSwKIAkuZW1pdF9mcmFtZV9zaXplID0KIAkJ MjAgKyAvKiBnZnhfdjhfMF9yaW5nX2VtaXRfZ2RzX3N3aXRjaCAqLwogCQk3ICsgLyogZ2Z4X3Y4 XzBfcmluZ19lbWl0X2hkcF9mbHVzaCAqLwogCQk1ICsgLyogaGRwX2ludmFsaWRhdGUgKi8KIAkJ NyArIC8qIGdmeF92OF8wX3JpbmdfZW1pdF9waXBlbGluZV9zeW5jICovCiAJCTE3ICsgLyogZ2Z4 X3Y4XzBfcmluZ19lbWl0X3ZtX2ZsdXNoICovCiAJCTcgKyA3ICsgNywgLyogZ2Z4X3Y4XzBfcmlu Z19lbWl0X2ZlbmNlX2tpcSB4MyBmb3IgdXNlciBmZW5jZSwgdm0gZmVuY2UgKi8KLQkuZW1pdF9p Yl9zaXplID0JNCwgLyogZ2Z4X3Y4XzBfcmluZ19lbWl0X2liX2NvbXB1dGUgKi8KKwkuZW1pdF9p Yl9zaXplID0JNywgLyogZ2Z4X3Y4XzBfcmluZ19lbWl0X2liX2NvbXB1dGUgKi8KIAkuZW1pdF9m ZW5jZSA9IGdmeF92OF8wX3JpbmdfZW1pdF9mZW5jZV9raXEsCiAJLnRlc3RfcmluZyA9IGdmeF92 OF8wX3JpbmdfdGVzdF9yaW5nLAogCS5pbnNlcnRfbm9wID0gYW1kZ3B1X3JpbmdfaW5zZXJ0X25v cCwKIAkucGFkX2liID0gYW1kZ3B1X3JpbmdfZ2VuZXJpY19wYWRfaWIsCiAJLmVtaXRfcnJlZyA9 IGdmeF92OF8wX3JpbmdfZW1pdF9ycmVnLAogCS5lbWl0X3dyZWcgPSBnZnhfdjhfMF9yaW5nX2Vt aXRfd3JlZywKIH07CiAKIHN0YXRpYyB2b2lkIGdmeF92OF8wX3NldF9yaW5nX2Z1bmNzKHN0cnVj dCBhbWRncHVfZGV2aWNlICphZGV2KQogewpAQCAtNjk4OSwyMCArNzAwNSwyMSBAQCBzdGF0aWMg dm9pZCBnZnhfdjhfMF9zZXRfcmxjX2Z1bmNzKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQog ewogCWFkZXYtPmdmeC5ybGMuZnVuY3MgPSAmaWNlbGFuZF9ybGNfZnVuY3M7CiB9CiAKIHN0YXRp YyB2b2lkIGdmeF92OF8wX3NldF9nZHNfaW5pdChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikK IHsKIAkvKiBpbml0IGFzY2kgZ2RzIGluZm8gKi8KIAlhZGV2LT5nZHMubWVtLnRvdGFsX3NpemUg PSBSUkVHMzIobW1HRFNfVk1JRDBfU0laRSk7CiAJYWRldi0+Z2RzLmd3cy50b3RhbF9zaXplID0g NjQ7CiAJYWRldi0+Z2RzLm9hLnRvdGFsX3NpemUgPSAxNjsKKwlhZGV2LT5nZHMuZ2RzX2NvbXB1 dGVfbWF4X3dhdmVfaWQgPSBSUkVHMzIobW1HRFNfQ09NUFVURV9NQVhfV0FWRV9JRCk7CiAKIAlp ZiAoYWRldi0+Z2RzLm1lbS50b3RhbF9zaXplID09IDY0ICogMTAyNCkgewogCQlhZGV2LT5nZHMu bWVtLmdmeF9wYXJ0aXRpb25fc2l6ZSA9IDQwOTY7CiAJCWFkZXYtPmdkcy5tZW0uY3NfcGFydGl0 aW9uX3NpemUgPSA0MDk2OwogCiAJCWFkZXYtPmdkcy5nd3MuZ2Z4X3BhcnRpdGlvbl9zaXplID0g NDsKIAkJYWRldi0+Z2RzLmd3cy5jc19wYXJ0aXRpb25fc2l6ZSA9IDQ7CiAKIAkJYWRldi0+Z2Rz Lm9hLmdmeF9wYXJ0aXRpb25fc2l6ZSA9IDQ7CiAJCWFkZXYtPmdkcy5vYS5jc19wYXJ0aXRpb25f c2l6ZSA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9nZnhfdjlf MC5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvZ2Z4X3Y5XzAuYwppbmRleCAyNjJlZTNj ZjZmMWMuLjU1MzNmNmU0ZjRhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvZ2Z4X3Y5XzAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9nZnhfdjlfMC5j CkBAIC00MDAzLDIwICs0MDAzLDM2IEBAIHN0YXRpYyB2b2lkIGdmeF92OV8wX3JpbmdfZW1pdF9p Yl9nZngoc3RydWN0IGFtZGdwdV9yaW5nICpyaW5nLAogfQogCiBzdGF0aWMgdm9pZCBnZnhfdjlf MF9yaW5nX2VtaXRfaWJfY29tcHV0ZShzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcsCiAJCQkJCSAg c3RydWN0IGFtZGdwdV9qb2IgKmpvYiwKIAkJCQkJICBzdHJ1Y3QgYW1kZ3B1X2liICppYiwKIAkJ CQkJICB1aW50MzJfdCBmbGFncykKIHsKIAl1bnNpZ25lZCB2bWlkID0gQU1ER1BVX0pPQl9HRVRf Vk1JRChqb2IpOwogCXUzMiBjb250cm9sID0gSU5ESVJFQ1RfQlVGRkVSX1ZBTElEIHwgaWItPmxl bmd0aF9kdyB8ICh2bWlkIDw8IDI0KTsKIAorCS8qIEN1cnJlbnRseSwgdGhlcmUgaXMgYSBoaWdo IHBvc3NpYmlsaXR5IHRvIGdldCB3YXZlIElEIG1pc21hdGNoCisJICogYmV0d2VlbiBNRSBhbmQg R0RTLCBsZWFkaW5nIHRvIGEgaHcgZGVhZGxvY2ssIGJlY2F1c2UgTUUgZ2VuZXJhdGVzCisJICog ZGlmZmVyZW50IHdhdmUgSURzIHRoYW4gdGhlIEdEUyBleHBlY3RzLiBUaGlzIHNpdHVhdGlvbiBo YXBwZW5zCisJICogcmFuZG9tbHkgd2hlbiBhdCBsZWFzdCA1IGNvbXB1dGUgcGlwZXMgdXNlIEdE UyBvcmRlcmVkIGFwcGVuZC4KKwkgKiBUaGUgd2F2ZSBJRHMgZ2VuZXJhdGVkIGJ5IE1FIGFyZSBh bHNvIHdyb25nIGFmdGVyIHN1c3BlbmQvcmVzdW1lLgorCSAqIFRob3NlIGFyZSBwcm9iYWJseSBi dWdzIHNvbWV3aGVyZSBlbHNlIGluIHRoZSBrZXJuZWwgZHJpdmVyLgorCSAqCisJICogV3JpdGlu ZyBHRFNfQ09NUFVURV9NQVhfV0FWRV9JRCByZXNldHMgd2F2ZSBJRCBjb3VudGVycyBpbiBNRSBh bmQKKwkgKiBHRFMgdG8gMCBmb3IgdGhpcyByaW5nIChtZS9waXBlKS4KKwkgKi8KKwlpZiAoaWIt PmZsYWdzICYgQU1ER1BVX0lCX0ZMQUdfUkVTRVRfR0RTX01BWF9XQVZFX0lEKSB7CisJCWFtZGdw dV9yaW5nX3dyaXRlKHJpbmcsIFBBQ0tFVDMoUEFDS0VUM19TRVRfQ09ORklHX1JFRywgMSkpOwor CQlhbWRncHVfcmluZ193cml0ZShyaW5nLCBtbUdEU19DT01QVVRFX01BWF9XQVZFX0lEKTsKKwkJ YW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgcmluZy0+YWRldi0+Z2RzLmdkc19jb21wdXRlX21heF93 YXZlX2lkKTsKKwl9CisKIAlhbWRncHVfcmluZ193cml0ZShyaW5nLCBQQUNLRVQzKFBBQ0tFVDNf SU5ESVJFQ1RfQlVGRkVSLCAyKSk7CiAJQlVHX09OKGliLT5ncHVfYWRkciAmIDB4Myk7IC8qIER3 b3JkIGFsaWduICovCiAJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywKICNpZmRlZiBfX0JJR19FTkRJ QU4KIAkJCQkoMiA8PCAwKSB8CiAjZW5kaWYKIAkJCQlsb3dlcl8zMl9iaXRzKGliLT5ncHVfYWRk cikpOwogCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIHVwcGVyXzMyX2JpdHMoaWItPmdwdV9hZGRy KSk7CiAJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgY29udHJvbCk7CiB9CkBAIC00NzIyLDIxICs0 NzM4LDIxIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYW1kZ3B1X3JpbmdfZnVuY3MgZ2Z4X3Y5XzBf cmluZ19mdW5jc19jb21wdXRlID0gewogCS5zZXRfd3B0ciA9IGdmeF92OV8wX3Jpbmdfc2V0X3dw dHJfY29tcHV0ZSwKIAkuZW1pdF9mcmFtZV9zaXplID0KIAkJMjAgKyAvKiBnZnhfdjlfMF9yaW5n X2VtaXRfZ2RzX3N3aXRjaCAqLwogCQk3ICsgLyogZ2Z4X3Y5XzBfcmluZ19lbWl0X2hkcF9mbHVz aCAqLwogCQk1ICsgLyogaGRwIGludmFsaWRhdGUgKi8KIAkJNyArIC8qIGdmeF92OV8wX3Jpbmdf ZW1pdF9waXBlbGluZV9zeW5jICovCiAJCVNPQzE1X0ZMVVNIX0dQVV9UTEJfTlVNX1dSRUcgKiA1 ICsKIAkJU09DMTVfRkxVU0hfR1BVX1RMQl9OVU1fUkVHX1dBSVQgKiA3ICsKIAkJMiArIC8qIGdm eF92OV8wX3JpbmdfZW1pdF92bV9mbHVzaCAqLwogCQk4ICsgOCArIDgsIC8qIGdmeF92OV8wX3Jp bmdfZW1pdF9mZW5jZSB4MyBmb3IgdXNlciBmZW5jZSwgdm0gZmVuY2UgKi8KLQkuZW1pdF9pYl9z aXplID0JNCwgLyogZ2Z4X3Y5XzBfcmluZ19lbWl0X2liX2NvbXB1dGUgKi8KKwkuZW1pdF9pYl9z aXplID0JNywgLyogZ2Z4X3Y5XzBfcmluZ19lbWl0X2liX2NvbXB1dGUgKi8KIAkuZW1pdF9pYiA9 IGdmeF92OV8wX3JpbmdfZW1pdF9pYl9jb21wdXRlLAogCS5lbWl0X2ZlbmNlID0gZ2Z4X3Y5XzBf cmluZ19lbWl0X2ZlbmNlLAogCS5lbWl0X3BpcGVsaW5lX3N5bmMgPSBnZnhfdjlfMF9yaW5nX2Vt aXRfcGlwZWxpbmVfc3luYywKIAkuZW1pdF92bV9mbHVzaCA9IGdmeF92OV8wX3JpbmdfZW1pdF92 bV9mbHVzaCwKIAkuZW1pdF9nZHNfc3dpdGNoID0gZ2Z4X3Y5XzBfcmluZ19lbWl0X2dkc19zd2l0 Y2gsCiAJLmVtaXRfaGRwX2ZsdXNoID0gZ2Z4X3Y5XzBfcmluZ19lbWl0X2hkcF9mbHVzaCwKIAku dGVzdF9yaW5nID0gZ2Z4X3Y5XzBfcmluZ190ZXN0X3JpbmcsCiAJLnRlc3RfaWIgPSBnZnhfdjlf MF9yaW5nX3Rlc3RfaWIsCiAJLmluc2VydF9ub3AgPSBhbWRncHVfcmluZ19pbnNlcnRfbm9wLAog CS5wYWRfaWIgPSBhbWRncHVfcmluZ19nZW5lcmljX3BhZF9pYiwKQEAgLTQ3NTcsMjEgKzQ3NzMs MjEgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhbWRncHVfcmluZ19mdW5jcyBnZnhfdjlfMF9yaW5n X2Z1bmNzX2tpcSA9IHsKIAkuc2V0X3dwdHIgPSBnZnhfdjlfMF9yaW5nX3NldF93cHRyX2NvbXB1 dGUsCiAJLmVtaXRfZnJhbWVfc2l6ZSA9CiAJCTIwICsgLyogZ2Z4X3Y5XzBfcmluZ19lbWl0X2dk c19zd2l0Y2ggKi8KIAkJNyArIC8qIGdmeF92OV8wX3JpbmdfZW1pdF9oZHBfZmx1c2ggKi8KIAkJ NSArIC8qIGhkcCBpbnZhbGlkYXRlICovCiAJCTcgKyAvKiBnZnhfdjlfMF9yaW5nX2VtaXRfcGlw ZWxpbmVfc3luYyAqLwogCQlTT0MxNV9GTFVTSF9HUFVfVExCX05VTV9XUkVHICogNSArCiAJCVNP QzE1X0ZMVVNIX0dQVV9UTEJfTlVNX1JFR19XQUlUICogNyArCiAJCTIgKyAvKiBnZnhfdjlfMF9y aW5nX2VtaXRfdm1fZmx1c2ggKi8KIAkJOCArIDggKyA4LCAvKiBnZnhfdjlfMF9yaW5nX2VtaXRf ZmVuY2Vfa2lxIHgzIGZvciB1c2VyIGZlbmNlLCB2bSBmZW5jZSAqLwotCS5lbWl0X2liX3NpemUg PQk0LCAvKiBnZnhfdjlfMF9yaW5nX2VtaXRfaWJfY29tcHV0ZSAqLworCS5lbWl0X2liX3NpemUg PQk3LCAvKiBnZnhfdjlfMF9yaW5nX2VtaXRfaWJfY29tcHV0ZSAqLwogCS5lbWl0X2ZlbmNlID0g Z2Z4X3Y5XzBfcmluZ19lbWl0X2ZlbmNlX2tpcSwKIAkudGVzdF9yaW5nID0gZ2Z4X3Y5XzBfcmlu Z190ZXN0X3JpbmcsCiAJLmluc2VydF9ub3AgPSBhbWRncHVfcmluZ19pbnNlcnRfbm9wLAogCS5w YWRfaWIgPSBhbWRncHVfcmluZ19nZW5lcmljX3BhZF9pYiwKIAkuZW1pdF9ycmVnID0gZ2Z4X3Y5 XzBfcmluZ19lbWl0X3JyZWcsCiAJLmVtaXRfd3JlZyA9IGdmeF92OV8wX3JpbmdfZW1pdF93cmVn LAogCS5lbWl0X3JlZ193YWl0ID0gZ2Z4X3Y5XzBfcmluZ19lbWl0X3JlZ193YWl0LAogCS5lbWl0 X3JlZ193cml0ZV9yZWdfd2FpdCA9IGdmeF92OV8wX3JpbmdfZW1pdF9yZWdfd3JpdGVfcmVnX3dh aXQsCiB9OwogCkBAIC00ODM5LDIwICs0ODU1LDQwIEBAIHN0YXRpYyB2b2lkIGdmeF92OV8wX3Nl dF9nZHNfaW5pdChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKIAkJYWRldi0+Z2RzLm1lbS50 b3RhbF9zaXplID0gMHgxMDAwMDsKIAkJYnJlYWs7CiAJY2FzZSBDSElQX1JBVkVOOgogCQlhZGV2 LT5nZHMubWVtLnRvdGFsX3NpemUgPSAweDEwMDA7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWFk ZXYtPmdkcy5tZW0udG90YWxfc2l6ZSA9IDB4MTAwMDA7CiAJCWJyZWFrOwogCX0KIAorCXN3aXRj aCAoYWRldi0+YXNpY190eXBlKSB7CisJY2FzZSBDSElQX1ZFR0ExMDoKKwljYXNlIENISVBfVkVH QTIwOgorCQlhZGV2LT5nZHMuZ2RzX2NvbXB1dGVfbWF4X3dhdmVfaWQgPSAweDdmZjsKKwkJYnJl YWs7CisJY2FzZSBDSElQX1ZFR0ExMjoKKwkJYWRldi0+Z2RzLmdkc19jb21wdXRlX21heF93YXZl X2lkID0gMHgyN2Y7CisJCWJyZWFrOworCWNhc2UgQ0hJUF9SQVZFTjoKKwkJaWYgKGFkZXYtPnJl dl9pZCA+PSAweDgpCisJCQlhZGV2LT5nZHMuZ2RzX2NvbXB1dGVfbWF4X3dhdmVfaWQgPSAweDc3 OyAvKiByYXZlbjIgKi8KKwkJZWxzZQorCQkJYWRldi0+Z2RzLmdkc19jb21wdXRlX21heF93YXZl X2lkID0gMHgxNWY7IC8qIHJhdmVuMSAqLworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiB0aGlz IHJlYWxseSBkZXBlbmRzIG9uIHRoZSBjaGlwICovCisJCWFkZXYtPmdkcy5nZHNfY29tcHV0ZV9t YXhfd2F2ZV9pZCA9IDB4N2ZmOworCQlicmVhazsKKwl9CisKIAlhZGV2LT5nZHMuZ3dzLnRvdGFs X3NpemUgPSA2NDsKIAlhZGV2LT5nZHMub2EudG90YWxfc2l6ZSA9IDE2OwogCiAJaWYgKGFkZXYt Pmdkcy5tZW0udG90YWxfc2l6ZSA9PSA2NCAqIDEwMjQpIHsKIAkJYWRldi0+Z2RzLm1lbS5nZnhf cGFydGl0aW9uX3NpemUgPSA0MDk2OwogCQlhZGV2LT5nZHMubWVtLmNzX3BhcnRpdGlvbl9zaXpl ID0gNDA5NjsKIAogCQlhZGV2LT5nZHMuZ3dzLmdmeF9wYXJ0aXRpb25fc2l6ZSA9IDQ7CiAJCWFk ZXYtPmdkcy5nd3MuY3NfcGFydGl0aW9uX3NpemUgPSA0OwogCmRpZmYgLS1naXQgYS9pbmNsdWRl L3VhcGkvZHJtL2FtZGdwdV9kcm0uaCBiL2luY2x1ZGUvdWFwaS9kcm0vYW1kZ3B1X2RybS5oCmlu ZGV4IGZhYWFkMDQ4MTRlNC4uNjYyZDM3OWVhNjI0IDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkv ZHJtL2FtZGdwdV9kcm0uaAorKysgYi9pbmNsdWRlL3VhcGkvZHJtL2FtZGdwdV9kcm0uaApAQCAt NTYxLDIwICs1NjEsMjUgQEAgdW5pb24gZHJtX2FtZGdwdV9jcyB7CiAvKiBQcmVhbWJsZSBmbGFn LCB3aGljaCBtZWFucyB0aGUgSUIgY291bGQgYmUgZHJvcHBlZCBpZiBubyBjb250ZXh0IHN3aXRj aCAqLwogI2RlZmluZSBBTURHUFVfSUJfRkxBR19QUkVBTUJMRSAoMTw8MSkKIAogLyogUHJlZW1w dCBmbGFnLCBJQiBzaG91bGQgc2V0IFByZV9lbmIgYml0IGlmIFBSRUVNUFQgZmxhZyBkZXRlY3Rl ZCAqLwogI2RlZmluZSBBTURHUFVfSUJfRkxBR19QUkVFTVBUICgxPDwyKQogCiAvKiBUaGUgSUIg ZmVuY2Ugc2hvdWxkIGRvIHRoZSBMMiB3cml0ZWJhY2sgYnV0IG5vdCBpbnZhbGlkYXRlIGFueSBz aGFkZXIKICAqIGNhY2hlcyAoTDIvdkwxL3NMMS9JJCkuICovCiAjZGVmaW5lIEFNREdQVV9JQl9G TEFHX1RDX1dCX05PVF9JTlZBTElEQVRFICgxIDw8IDMpCiAKKy8qIFNldCBHRFNfQ09NUFVURV9N QVhfV0FWRV9JRCA9IERFRkFVTFQgYmVmb3JlIFBBQ0tFVDNfSU5ESVJFQ1RfQlVGRkVSLgorICog VGhpcyB3aWxsIHJlc2V0IHdhdmUgSUQgY291bnRlcnMgZm9yIHRoZSBJQi4KKyAqLworI2RlZmlu ZSBBTURHUFVfSUJfRkxBR19SRVNFVF9HRFNfTUFYX1dBVkVfSUQgKDEgPDwgNCkKKwogc3RydWN0 IGRybV9hbWRncHVfY3NfY2h1bmtfaWIgewogCV9fdTMyIF9wYWQ7CiAJLyoqIEFNREdQVV9JQl9G TEFHXyogKi8KIAlfX3UzMiBmbGFnczsKIAkvKiogVmlydHVhbCBhZGRyZXNzIHRvIGJlZ2luIElC IGV4ZWN1dGlvbiAqLwogCV9fdTY0IHZhX3N0YXJ0OwogCS8qKiBTaXplIG9mIHN1Ym1pc3Npb24g Ki8KIAlfX3UzMiBpYl9ieXRlczsKIAkvKiogSFcgSVAgdG8gc3VibWl0IHRvICovCiAJX191MzIg aXBfdHlwZTsKLS0gCjIuMTcuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KYW1kLWdmeCBtYWlsaW5nIGxpc3QKYW1kLWdmeEBsaXN0cy5mcmVlZGVza3Rv cC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9hbWQt Z2Z4Cg==