From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andres Rodriguez Subject: [PATCH 09/26] drm/amdgpu: allow split of queues with kfd at queue granularity v3 Date: Thu, 6 Apr 2017 02:21:22 -0400 Message-ID: <20170406062139.3335-10-andresx7@gmail.com> References: <20170406062139.3335-1-andresx7@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20170406062139.3335-1-andresx7-Re5JQEeQqe8AvxtiuMwx3w@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: andresx7-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org UHJldmlvdXNseSB0aGUgcXVldWUvcGlwZSBzcGxpdCB3aXRoIGtmZCBvcGVyYXRlZCB3aXRoIHBp cGUKZ3JhbnVsYXJpdHkuIFRoaXMgcGF0Y2ggYWxsb3dzIGFtZGdwdSB0byB0YWtlIG93bmVyc2hp cCBvZiBhbiBhcmJpdHJhcnkKc2V0IG9mIHF1ZXVlcy4KCkl0IGFsc28gY29uc29saWRhdGVzIHRo ZSBsYXN0IGZldyBtYWdpYyBudW1iZXJzIGluIHRoZSBjb21wdXRlCmluaXRpYWxpemF0aW9uIHBy b2Nlc3MgaW50byBtZWNfaW5pdC4KCnYyOiBzdXBwb3J0IGZvciBnZng5CnYzOiByZW5hbWVkIEFN REdQVV9NQVhfUVVFVUVTIHRvIEFNREdQVV9NQVhfQ09NUFVURV9RVUVVRVMKClJldmlld2VkLWJ5 OiBFZHdhcmQgTydDYWxsYWdoYW4gPGZ1bmZ1bmN0b3JAZm9sa2xvcmUxOTg0Lm5ldD4KQWNrZWQt Ynk6IENocmlzdGlhbiBLw7ZuaWcgPGNocmlzdGlhbi5rb2VuaWdAYW1kLmNvbT4KU2lnbmVkLW9m Zi1ieTogQW5kcmVzIFJvZHJpZ3VleiA8YW5kcmVzeDdAZ21haWwuY29tPgotLS0KIGRyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdS5oICAgICAgICAgICAgIHwgIDcgKysrCiBkcml2ZXJz L2dwdS9kcm0vYW1kL2FtZGdwdS9nZnhfdjdfMC5jICAgICAgICAgICB8IDgzICsrKysrKysrKysr KysrKysrLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvZ2Z4X3Y4XzAuYyAgICAg ICAgICAgfCA4MSArKysrKysrKysrKysrKysrKysrLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9hbWQv YW1kZ3B1L2dmeF92OV8wLmMgICAgICAgICAgIHwgODQgKysrKysrKysrKysrKysrKysrKysrKyst LQogZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2tnZF9rZmRfaW50ZXJmYWNlLmggfCAgMSAr CiA1IGZpbGVzIGNoYW5nZWQsIDIxMiBpbnNlcnRpb25zKCspLCA0NCBkZWxldGlvbnMoLSkKCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHUuaCBiL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdS5oCmluZGV4IDgxODc1ODcuLmI3NjVhY2EgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdS5oCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdS5oCkBAIC0zOSwyMCArMzksMjIgQEAKICNpbmNsdWRl IDx0dG0vdHRtX2JvX2FwaS5oPgogI2luY2x1ZGUgPHR0bS90dG1fYm9fZHJpdmVyLmg+CiAjaW5j bHVkZSA8dHRtL3R0bV9wbGFjZW1lbnQuaD4KICNpbmNsdWRlIDx0dG0vdHRtX21vZHVsZS5oPgog I2luY2x1ZGUgPHR0bS90dG1fZXhlY2J1Zl91dGlsLmg+CiAKICNpbmNsdWRlIDxkcm0vZHJtUC5o PgogI2luY2x1ZGUgPGRybS9kcm1fZ2VtLmg+CiAjaW5jbHVkZSA8ZHJtL2FtZGdwdV9kcm0uaD4K IAorI2luY2x1ZGUgPGtnZF9rZmRfaW50ZXJmYWNlLmg+CisKICNpbmNsdWRlICJhbWRfc2hhcmVk LmgiCiAjaW5jbHVkZSAiYW1kZ3B1X21vZGUuaCIKICNpbmNsdWRlICJhbWRncHVfaWguaCIKICNp bmNsdWRlICJhbWRncHVfaXJxLmgiCiAjaW5jbHVkZSAiYW1kZ3B1X3Vjb2RlLmgiCiAjaW5jbHVk ZSAiYW1kZ3B1X3R0bS5oIgogI2luY2x1ZGUgImFtZGdwdV9wc3AuaCIKICNpbmNsdWRlICJhbWRn cHVfZ2RzLmgiCiAjaW5jbHVkZSAiYW1kZ3B1X3N5bmMuaCIKICNpbmNsdWRlICJhbWRncHVfcmlu Zy5oIgpAQCAtODg1LDI5ICs4ODcsMzQgQEAgc3RydWN0IGFtZGdwdV9ybGMgewogCXUzMiByZWdf bGlzdF9mb3JtYXRfc3RhcnQ7CiAJdTMyIHJlZ19saXN0X2Zvcm1hdF9zZXBhcmF0ZV9zdGFydDsK IAl1MzIgc3RhcnRpbmdfb2Zmc2V0c19zdGFydDsKIAl1MzIgcmVnX2xpc3RfZm9ybWF0X3NpemVf Ynl0ZXM7CiAJdTMyIHJlZ19saXN0X3NpemVfYnl0ZXM7CiAKIAl1MzIgKnJlZ2lzdGVyX2xpc3Rf Zm9ybWF0OwogCXUzMiAqcmVnaXN0ZXJfcmVzdG9yZTsKIH07CiAKKyNkZWZpbmUgQU1ER1BVX01B WF9DT01QVVRFX1FVRVVFUyBLR0RfTUFYX1FVRVVFUworCiBzdHJ1Y3QgYW1kZ3B1X21lYyB7CiAJ c3RydWN0IGFtZGdwdV9ibwkqaHBkX2VvcF9vYmo7CiAJdTY0CQkJaHBkX2VvcF9ncHVfYWRkcjsK IAlzdHJ1Y3QgYW1kZ3B1X2JvCSptZWNfZndfb2JqOwogCXU2NAkJCW1lY19md19ncHVfYWRkcjsK IAl1MzIgbnVtX21lYzsKIAl1MzIgbnVtX3BpcGVfcGVyX21lYzsKIAl1MzIgbnVtX3F1ZXVlX3Bl cl9waXBlOwogCXZvaWQJCQkqbXFkX2JhY2t1cFtBTURHUFVfTUFYX0NPTVBVVEVfUklOR1MgKyAx XTsKKworCS8qIFRoZXNlIGFyZSB0aGUgcmVzb3VyY2VzIGZvciB3aGljaCBhbWRncHUgdGFrZXMg b3duZXJzaGlwICovCisJREVDTEFSRV9CSVRNQVAocXVldWVfYml0bWFwLCBBTURHUFVfTUFYX0NP TVBVVEVfUVVFVUVTKTsKIH07CiAKIHN0cnVjdCBhbWRncHVfa2lxIHsKIAl1NjQJCQllb3BfZ3B1 X2FkZHI7CiAJc3RydWN0IGFtZGdwdV9ibwkqZW9wX29iajsKIAlzdHJ1Y3QgYW1kZ3B1X3JpbmcJ cmluZzsKIAlzdHJ1Y3QgYW1kZ3B1X2lycV9zcmMJaXJxOwogfTsKIAogLyoKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2dmeF92N18wLmMgYi9kcml2ZXJzL2dwdS9kcm0v YW1kL2FtZGdwdS9nZnhfdjdfMC5jCmluZGV4IDMzNDAwMTIuLjU1ZTYxYTkgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2dmeF92N18wLmMKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2FtZC9hbWRncHUvZ2Z4X3Y3XzAuYwpAQCAtNDIsMjEgKzQyLDIwIEBACiAjaW5jbHVkZSAi Z2NhL2dmeF83XzJfZW51bS5oIgogI2luY2x1ZGUgImdjYS9nZnhfN18yX3NoX21hc2suaCIKIAog I2luY2x1ZGUgImdtYy9nbWNfN18wX2QuaCIKICNpbmNsdWRlICJnbWMvZ21jXzdfMF9zaF9tYXNr LmgiCiAKICNpbmNsdWRlICJvc3Mvb3NzXzJfMF9kLmgiCiAjaW5jbHVkZSAib3NzL29zc18yXzBf c2hfbWFzay5oIgogCiAjZGVmaW5lIEdGWDdfTlVNX0dGWF9SSU5HUyAgICAgMQotI2RlZmluZSBH Rlg3X05VTV9DT01QVVRFX1JJTkdTIDgKICNkZWZpbmUgR0ZYN19NRUNfSFBEX1NJWkUgICAgICAy MDQ4CiAKIAogc3RhdGljIHZvaWQgZ2Z4X3Y3XzBfc2V0X3JpbmdfZnVuY3Moc3RydWN0IGFtZGdw dV9kZXZpY2UgKmFkZXYpOwogc3RhdGljIHZvaWQgZ2Z4X3Y3XzBfc2V0X2lycV9mdW5jcyhzdHJ1 Y3QgYW1kZ3B1X2RldmljZSAqYWRldik7CiBzdGF0aWMgdm9pZCBnZnhfdjdfMF9zZXRfZ2RzX2lu aXQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpOwogCiBNT0RVTEVfRklSTVdBUkUoInJhZGVv bi9ib25haXJlX3BmcC5iaW4iKTsKIE1PRFVMRV9GSVJNV0FSRSgicmFkZW9uL2JvbmFpcmVfbWUu YmluIik7CiBNT0RVTEVfRklSTVdBUkUoInJhZGVvbi9ib25haXJlX2NlLmJpbiIpOwpAQCAtMjgx Nyw0NyArMjgxNiw3OSBAQCBzdGF0aWMgdm9pZCBnZnhfdjdfMF9tZWNfZmluaShzdHJ1Y3QgYW1k Z3B1X2RldmljZSAqYWRldikKIAkJaWYgKHVubGlrZWx5KHIgIT0gMCkpCiAJCQlkZXZfd2Fybihh ZGV2LT5kZXYsICIoJWQpIHJlc2VydmUgSFBEIEVPUCBibyBmYWlsZWRcbiIsIHIpOwogCQlhbWRn cHVfYm9fdW5waW4oYWRldi0+Z2Z4Lm1lYy5ocGRfZW9wX29iaik7CiAJCWFtZGdwdV9ib191bnJl c2VydmUoYWRldi0+Z2Z4Lm1lYy5ocGRfZW9wX29iaik7CiAKIAkJYW1kZ3B1X2JvX3VucmVmKCZh ZGV2LT5nZngubWVjLmhwZF9lb3Bfb2JqKTsKIAkJYWRldi0+Z2Z4Lm1lYy5ocGRfZW9wX29iaiA9 IE5VTEw7CiAJfQogfQogCitzdGF0aWMgdm9pZCBnZnhfdjdfMF9jb21wdXRlX3F1ZXVlX2FjcXVp cmUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCit7CisJaW50IGksIHF1ZXVlLCBwaXBlLCBt ZWM7CisKKwkvKiBwb2xpY3kgZm9yIGFtZGdwdSBjb21wdXRlIHF1ZXVlIG93bmVyc2hpcCAqLwor CWZvciAoaSA9IDA7IGkgPCBBTURHUFVfTUFYX0NPTVBVVEVfUVVFVUVTOyArK2kpIHsKKwkJcXVl dWUgPSBpICUgYWRldi0+Z2Z4Lm1lYy5udW1fcXVldWVfcGVyX3BpcGU7CisJCXBpcGUgPSAoaSAv IGFkZXYtPmdmeC5tZWMubnVtX3F1ZXVlX3Blcl9waXBlKQorCQkJJSBhZGV2LT5nZngubWVjLm51 bV9waXBlX3Blcl9tZWM7CisJCW1lYyA9IChpIC8gYWRldi0+Z2Z4Lm1lYy5udW1fcXVldWVfcGVy X3BpcGUpCisJCQkvIGFkZXYtPmdmeC5tZWMubnVtX3BpcGVfcGVyX21lYzsKKworCQkvKiB3ZSd2 ZSBydW4gb3V0IG9mIEhXICovCisJCWlmIChtZWMgPiBhZGV2LT5nZngubWVjLm51bV9tZWMpCisJ CQlicmVhazsKKworCQkvKiBwb2xpY3k6IGFtZGdwdSBvd25zIGFsbCBxdWV1ZXMgaW4gdGhlIGZp cnN0IHBpcGUgKi8KKwkJaWYgKG1lYyA9PSAwICYmIHBpcGUgPT0gMCkKKwkJCXNldF9iaXQoaSwg YWRldi0+Z2Z4Lm1lYy5xdWV1ZV9iaXRtYXApOworCX0KKworCS8qIHVwZGF0ZSB0aGUgbnVtYmVy IG9mIGFjdGl2ZSBjb21wdXRlIHJpbmdzICovCisJYWRldi0+Z2Z4Lm51bV9jb21wdXRlX3Jpbmdz ID0KKwkJYml0bWFwX3dlaWdodChhZGV2LT5nZngubWVjLnF1ZXVlX2JpdG1hcCwgQU1ER1BVX01B WF9DT01QVVRFX1FVRVVFUyk7CisKKwkvKiBJZiB5b3UgaGl0IHRoaXMgY2FzZSBhbmQgZWRpdGVk IHRoZSBwb2xpY3ksIHlvdSBwcm9iYWJseSBqdXN0CisJICogbmVlZCB0byBpbmNyZWFzZSBBTURH UFVfTUFYX0NPTVBVVEVfUklOR1MgKi8KKwlXQVJOX09OKGFkZXYtPmdmeC5udW1fY29tcHV0ZV9y aW5ncyA+IEFNREdQVV9NQVhfQ09NUFVURV9SSU5HUyk7CisJaWYgKGFkZXYtPmdmeC5udW1fY29t cHV0ZV9yaW5ncyA+IEFNREdQVV9NQVhfQ09NUFVURV9SSU5HUykKKwkJYWRldi0+Z2Z4Lm51bV9j b21wdXRlX3JpbmdzID0gQU1ER1BVX01BWF9DT01QVVRFX1JJTkdTOworfQorCiBzdGF0aWMgaW50 IGdmeF92N18wX21lY19pbml0KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQogewogCWludCBy OwogCXUzMiAqaHBkOwogCXNpemVfdCBtZWNfaHBkX3NpemU7CiAKLQkvKgotCSAqIEtWOiAgICAy IE1FQywgNCBQaXBlcy9NRUMsIDggUXVldWVzL1BpcGUgLSA2NCBRdWV1ZXMgdG90YWwKLQkgKiBD SS9LQjogMSBNRUMsIDQgUGlwZXMvTUVDLCA4IFF1ZXVlcy9QaXBlIC0gMzIgUXVldWVzIHRvdGFs Ci0JICogTm9uZXRoZWxlc3MsIHdlIGFzc2lnbiBvbmx5IDEgcGlwZSBiZWNhdXNlIGFsbCBvdGhl ciBwaXBlcyB3aWxsCi0JICogYmUgaGFuZGxlZCBieSBLRkQKLQkgKi8KKwliaXRtYXBfemVybyhh ZGV2LT5nZngubWVjLnF1ZXVlX2JpdG1hcCwgQU1ER1BVX01BWF9DT01QVVRFX1FVRVVFUyk7CisK IAlzd2l0Y2ggKGFkZXYtPmFzaWNfdHlwZSkgewogCWNhc2UgQ0hJUF9LQVZFUkk6CiAJCWFkZXYt PmdmeC5tZWMubnVtX21lYyA9IDI7CiAJCWJyZWFrOwogCWNhc2UgQ0hJUF9CT05BSVJFOgogCWNh c2UgQ0hJUF9IQVdBSUk6CiAJY2FzZSBDSElQX0tBQklOSToKIAljYXNlIENISVBfTVVMTElOUzoK IAlkZWZhdWx0OgogCQlhZGV2LT5nZngubWVjLm51bV9tZWMgPSAxOwogCQlicmVhazsKIAl9CiAJ YWRldi0+Z2Z4Lm1lYy5udW1fcGlwZV9wZXJfbWVjID0gNDsKIAlhZGV2LT5nZngubWVjLm51bV9x dWV1ZV9wZXJfcGlwZSA9IDg7CiAKKwkvKiB0YWtlIG93bmVyc2hpcCBvZiB0aGUgcmVsZXZhbnQg Y29tcHV0ZSBxdWV1ZXMgKi8KKwlnZnhfdjdfMF9jb21wdXRlX3F1ZXVlX2FjcXVpcmUoYWRldik7 CisKKwkvKiBhbGxvY2F0ZSBzcGFjZSBmb3IgQUxMIHBpcGVzIChldmVuIHRoZSBvbmVzIHdlIGRv bid0IG93bikgKi8KIAltZWNfaHBkX3NpemUgPSBhZGV2LT5nZngubWVjLm51bV9tZWMgKiBhZGV2 LT5nZngubWVjLm51bV9waXBlX3Blcl9tZWMKIAkJKiBHRlg3X01FQ19IUERfU0laRSAqIDI7CiAJ aWYgKGFkZXYtPmdmeC5tZWMuaHBkX2VvcF9vYmogPT0gTlVMTCkgewogCQlyID0gYW1kZ3B1X2Jv X2NyZWF0ZShhZGV2LAogCQkJCSAgICAgbWVjX2hwZF9zaXplLAogCQkJCSAgICAgUEFHRV9TSVpF LCB0cnVlLAogCQkJCSAgICAgQU1ER1BVX0dFTV9ET01BSU5fR1RULCAwLCBOVUxMLCBOVUxMLAog CQkJCSAgICAgJmFkZXYtPmdmeC5tZWMuaHBkX2VvcF9vYmopOwogCQlpZiAocikgewogCQkJZGV2 X3dhcm4oYWRldi0+ZGV2LCAiKCVkKSBjcmVhdGUgSERQIEVPUCBibyBmYWlsZWRcbiIsIHIpOwpA QCAtNDUyMiwyMSArNDU1MywyMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFtZGdwdV9nZnhfZnVu Y3MgZ2Z4X3Y3XzBfZ2Z4X2Z1bmNzID0gewogc3RhdGljIGNvbnN0IHN0cnVjdCBhbWRncHVfcmxj X2Z1bmNzIGdmeF92N18wX3JsY19mdW5jcyA9IHsKIAkuZW50ZXJfc2FmZV9tb2RlID0gZ2Z4X3Y3 XzBfZW50ZXJfcmxjX3NhZmVfbW9kZSwKIAkuZXhpdF9zYWZlX21vZGUgPSBnZnhfdjdfMF9leGl0 X3JsY19zYWZlX21vZGUKIH07CiAKIHN0YXRpYyBpbnQgZ2Z4X3Y3XzBfZWFybHlfaW5pdCh2b2lk ICpoYW5kbGUpCiB7CiAJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSAoc3RydWN0IGFtZGdw dV9kZXZpY2UgKiloYW5kbGU7CiAKIAlhZGV2LT5nZngubnVtX2dmeF9yaW5ncyA9IEdGWDdfTlVN X0dGWF9SSU5HUzsKLQlhZGV2LT5nZngubnVtX2NvbXB1dGVfcmluZ3MgPSBHRlg3X05VTV9DT01Q VVRFX1JJTkdTOworCWFkZXYtPmdmeC5udW1fY29tcHV0ZV9yaW5ncyA9IEFNREdQVV9NQVhfQ09N UFVURV9SSU5HUzsKIAlhZGV2LT5nZnguZnVuY3MgPSAmZ2Z4X3Y3XzBfZ2Z4X2Z1bmNzOwogCWFk ZXYtPmdmeC5ybGMuZnVuY3MgPSAmZ2Z4X3Y3XzBfcmxjX2Z1bmNzOwogCWdmeF92N18wX3NldF9y aW5nX2Z1bmNzKGFkZXYpOwogCWdmeF92N18wX3NldF9pcnFfZnVuY3MoYWRldik7CiAJZ2Z4X3Y3 XzBfc2V0X2dkc19pbml0KGFkZXYpOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgZ2Z4 X3Y3XzBfbGF0ZV9pbml0KHZvaWQgKmhhbmRsZSkKQEAgLTQ3MTgsMjEgKzQ3NDksMjEgQEAgc3Rh dGljIHZvaWQgZ2Z4X3Y3XzBfZ3B1X2Vhcmx5X2luaXQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFk ZXYpCiAJCWdiX2FkZHJfY29uZmlnIHw9ICgyIDw8IEdCX0FERFJfQ09ORklHX19ST1dfU0laRV9f U0hJRlQpOwogCQlicmVhazsKIAl9CiAJYWRldi0+Z2Z4LmNvbmZpZy5nYl9hZGRyX2NvbmZpZyA9 IGdiX2FkZHJfY29uZmlnOwogfQogCiBzdGF0aWMgaW50IGdmeF92N18wX3N3X2luaXQodm9pZCAq aGFuZGxlKQogewogCXN0cnVjdCBhbWRncHVfcmluZyAqcmluZzsKIAlzdHJ1Y3QgYW1kZ3B1X2Rl dmljZSAqYWRldiA9IChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqKWhhbmRsZTsKLQlpbnQgaSwgcjsK KwlpbnQgaSwgciwgcmluZ19pZDsKIAogCS8qIEVPUCBFdmVudCAqLwogCXIgPSBhbWRncHVfaXJx X2FkZF9pZChhZGV2LCBBTURHUFVfSUhfQ0xJRU5USURfTEVHQUNZLCAxODEsICZhZGV2LT5nZngu ZW9wX2lycSk7CiAJaWYgKHIpCiAJCXJldHVybiByOwogCiAJLyogUHJpdmlsZWdlZCByZWcgKi8K IAlyID0gYW1kZ3B1X2lycV9hZGRfaWQoYWRldiwgQU1ER1BVX0lIX0NMSUVOVElEX0xFR0FDWSwg MTg0LAogCQkJICAgICAgJmFkZXYtPmdmeC5wcml2X3JlZ19pcnEpOwogCWlmIChyKQpAQCAtNDc2 OSw0MiArNDgwMCw1MiBAQCBzdGF0aWMgaW50IGdmeF92N18wX3N3X2luaXQodm9pZCAqaGFuZGxl KQogCQlyaW5nID0gJmFkZXYtPmdmeC5nZnhfcmluZ1tpXTsKIAkJcmluZy0+cmluZ19vYmogPSBO VUxMOwogCQlzcHJpbnRmKHJpbmctPm5hbWUsICJnZngiKTsKIAkJciA9IGFtZGdwdV9yaW5nX2lu aXQoYWRldiwgcmluZywgMTAyNCwKIAkJCQkgICAgICZhZGV2LT5nZnguZW9wX2lycSwgQU1ER1BV X0NQX0lSUV9HRlhfRU9QKTsKIAkJaWYgKHIpCiAJCQlyZXR1cm4gcjsKIAl9CiAKIAkvKiBzZXQg dXAgdGhlIGNvbXB1dGUgcXVldWVzICovCi0JZm9yIChpID0gMDsgaSA8IGFkZXYtPmdmeC5udW1f Y29tcHV0ZV9yaW5nczsgaSsrKSB7CisJZm9yIChpID0gMCwgcmluZ19pZCA9IDA7IGkgPCBBTURH UFVfTUFYX0NPTVBVVEVfUVVFVUVTOyBpKyspIHsKIAkJdW5zaWduZWQgaXJxX3R5cGU7CiAKLQkJ LyogbWF4IDMyIHF1ZXVlcyBwZXIgTUVDICovCi0JCWlmICgoaSA+PSAzMikgfHwgKGkgPj0gQU1E R1BVX01BWF9DT01QVVRFX1JJTkdTKSkgewotCQkJRFJNX0VSUk9SKCJUb28gbWFueSAoJWQpIGNv bXB1dGUgcmluZ3MhXG4iLCBpKTsKLQkJCWJyZWFrOwotCQl9Ci0JCXJpbmcgPSAmYWRldi0+Z2Z4 LmNvbXB1dGVfcmluZ1tpXTsKKwkJaWYgKCF0ZXN0X2JpdChpLCBhZGV2LT5nZngubWVjLnF1ZXVl X2JpdG1hcCkpCisJCQljb250aW51ZTsKKworCQlyaW5nID0gJmFkZXYtPmdmeC5jb21wdXRlX3Jp bmdbcmluZ19pZF07CisKKwkJLyogbWVjMCBpcyBtZTEgKi8KKwkJcmluZy0+bWUgPSAoKGkgLyBh ZGV2LT5nZngubWVjLm51bV9xdWV1ZV9wZXJfcGlwZSkKKwkJCQkvIGFkZXYtPmdmeC5tZWMubnVt X3BpcGVfcGVyX21lYykKKwkJCQkrIDE7CisJCXJpbmctPnBpcGUgPSAoaSAvIGFkZXYtPmdmeC5t ZWMubnVtX3F1ZXVlX3Blcl9waXBlKQorCQkJCSUgYWRldi0+Z2Z4Lm1lYy5udW1fcGlwZV9wZXJf bWVjOworCQlyaW5nLT5xdWV1ZSA9IGkgJSBhZGV2LT5nZngubWVjLm51bV9xdWV1ZV9wZXJfcGlw ZTsKKwogCQlyaW5nLT5yaW5nX29iaiA9IE5VTEw7CiAJCXJpbmctPnVzZV9kb29yYmVsbCA9IHRy dWU7Ci0JCXJpbmctPmRvb3JiZWxsX2luZGV4ID0gQU1ER1BVX0RPT1JCRUxMX01FQ19SSU5HMCAr IGk7Ci0JCXJpbmctPm1lID0gMTsgLyogZmlyc3QgTUVDICovCi0JCXJpbmctPnBpcGUgPSBpIC8g ODsKLQkJcmluZy0+cXVldWUgPSBpICUgODsKKwkJcmluZy0+ZG9vcmJlbGxfaW5kZXggPSBBTURH UFVfRE9PUkJFTExfTUVDX1JJTkcwICsgcmluZ19pZDsKIAkJc3ByaW50ZihyaW5nLT5uYW1lLCAi Y29tcF8lZC4lZC4lZCIsIHJpbmctPm1lLCByaW5nLT5waXBlLCByaW5nLT5xdWV1ZSk7Ci0JCWly cV90eXBlID0gQU1ER1BVX0NQX0lSUV9DT01QVVRFX01FQzFfUElQRTBfRU9QICsgcmluZy0+cGlw ZTsKKworCQlpcnFfdHlwZSA9IEFNREdQVV9DUF9JUlFfQ09NUFVURV9NRUMxX1BJUEUwX0VPUAor CQkJKyAoKHJpbmctPm1lIC0gMSkgKiBhZGV2LT5nZngubWVjLm51bV9waXBlX3Blcl9tZWMpCisJ CQkrIHJpbmctPnBpcGU7CisKIAkJLyogdHlwZS0yIHBhY2tldHMgYXJlIGRlcHJlY2F0ZWQgb24g TUVDLCB1c2UgdHlwZS0zIGluc3RlYWQgKi8KIAkJciA9IGFtZGdwdV9yaW5nX2luaXQoYWRldiwg cmluZywgMTAyNCwKIAkJCQkgICAgICZhZGV2LT5nZnguZW9wX2lycSwgaXJxX3R5cGUpOwogCQlp ZiAocikKIAkJCXJldHVybiByOworCisJCXJpbmdfaWQrKzsKIAl9CiAKIAkvKiByZXNlcnZlIEdE UywgR1dTIGFuZCBPQSByZXNvdXJjZSBmb3IgZ2Z4ICovCiAJciA9IGFtZGdwdV9ib19jcmVhdGVf a2VybmVsKGFkZXYsIGFkZXYtPmdkcy5tZW0uZ2Z4X3BhcnRpdGlvbl9zaXplLAogCQkJCSAgICBQ QUdFX1NJWkUsIEFNREdQVV9HRU1fRE9NQUlOX0dEUywKIAkJCQkgICAgJmFkZXYtPmdkcy5nZHNf Z2Z4X2JvLCBOVUxMLCBOVUxMKTsKIAlpZiAocikKIAkJcmV0dXJuIHI7CiAKIAlyID0gYW1kZ3B1 X2JvX2NyZWF0ZV9rZXJuZWwoYWRldiwgYWRldi0+Z2RzLmd3cy5nZnhfcGFydGl0aW9uX3NpemUs CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9nZnhfdjhfMC5jIGIvZHJp dmVycy9ncHUvZHJtL2FtZC9hbWRncHUvZ2Z4X3Y4XzAuYwppbmRleCBiMzRlNTk3Li5jMDEwYjVk IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9nZnhfdjhfMC5jCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2dmeF92OF8wLmMKQEAgLTQ1LDIxICs0NSwyMCBA QAogI2luY2x1ZGUgImdjYS9nZnhfOF8wX2VudW0uaCIKICNpbmNsdWRlICJnY2EvZ2Z4XzhfMF9z aF9tYXNrLmgiCiAjaW5jbHVkZSAiZ2NhL2dmeF84XzBfZW51bS5oIgogCiAjaW5jbHVkZSAiZGNl L2RjZV8xMF8wX2QuaCIKICNpbmNsdWRlICJkY2UvZGNlXzEwXzBfc2hfbWFzay5oIgogCiAjaW5j bHVkZSAic211L3NtdV83XzFfM19kLmgiCiAKICNkZWZpbmUgR0ZYOF9OVU1fR0ZYX1JJTkdTICAg ICAxCi0jZGVmaW5lIEdGWDhfTlVNX0NPTVBVVEVfUklOR1MgOAogI2RlZmluZSBHRlg4X01FQ19I UERfU0laRSAyMDQ4CiAKIAogI2RlZmluZSBUT1BBWl9HQl9BRERSX0NPTkZJR19HT0xERU4gMHgy MjAxMDAwMQogI2RlZmluZSBDQVJSSVpPX0dCX0FERFJfQ09ORklHX0dPTERFTiAweDIyMDEwMDAx CiAjZGVmaW5lIFBPTEFSSVMxMV9HQl9BRERSX0NPTkZJR19HT0xERU4gMHgyMjAxMTAwMgogI2Rl ZmluZSBUT05HQV9HQl9BRERSX0NPTkZJR19HT0xERU4gMHgyMjAxMTAwMwogCiAjZGVmaW5lIEFS UkFZX01PREUoeCkJCQkJCSgoeCkgPDwgR0JfVElMRV9NT0RFMF9fQVJSQVlfTU9ERV9fU0hJRlQp CiAjZGVmaW5lIFBJUEVfQ09ORklHKHgpCQkJCQkoKHgpIDw8IEdCX1RJTEVfTU9ERTBfX1BJUEVf Q09ORklHX19TSElGVCkKQEAgLTE0MTAsNDcgKzE0MDksODIgQEAgc3RhdGljIGludCBnZnhfdjhf MF9raXFfaW5pdF9yaW5nKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAogfQogc3RhdGljIHZv aWQgZ2Z4X3Y4XzBfa2lxX2ZyZWVfcmluZyhzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcsCiAJCQkJ ICAgc3RydWN0IGFtZGdwdV9pcnFfc3JjICppcnEpCiB7CiAJYW1kZ3B1X3diX2ZyZWUocmluZy0+ YWRldiwgcmluZy0+YWRldi0+dmlydC5yZWdfdmFsX29mZnMpOwogCWFtZGdwdV9yaW5nX2Zpbmko cmluZyk7CiB9CiAKICNkZWZpbmUgR0ZYOF9NRUNfSFBEX1NJWkUgMjA0OAogCitzdGF0aWMgdm9p ZCBnZnhfdjhfMF9jb21wdXRlX3F1ZXVlX2FjcXVpcmUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFk ZXYpCit7CisJaW50IGksIHF1ZXVlLCBwaXBlLCBtZWM7CisKKwkvKiBwb2xpY3kgZm9yIGFtZGdw dSBjb21wdXRlIHF1ZXVlIG93bmVyc2hpcCAqLworCWZvciAoaSA9IDA7IGkgPCBBTURHUFVfTUFY X0NPTVBVVEVfUVVFVUVTOyArK2kpIHsKKwkJcXVldWUgPSBpICUgYWRldi0+Z2Z4Lm1lYy5udW1f cXVldWVfcGVyX3BpcGU7CisJCXBpcGUgPSAoaSAvIGFkZXYtPmdmeC5tZWMubnVtX3F1ZXVlX3Bl cl9waXBlKQorCQkJJSBhZGV2LT5nZngubWVjLm51bV9waXBlX3Blcl9tZWM7CisJCW1lYyA9IChp IC8gYWRldi0+Z2Z4Lm1lYy5udW1fcXVldWVfcGVyX3BpcGUpCisJCQkvIGFkZXYtPmdmeC5tZWMu bnVtX3BpcGVfcGVyX21lYzsKKworCQkvKiB3ZSd2ZSBydW4gb3V0IG9mIEhXICovCisJCWlmICht ZWMgPiBhZGV2LT5nZngubWVjLm51bV9tZWMpCisJCQlicmVhazsKKworCQkvKiBwb2xpY3k6IGFt ZGdwdSBvd25zIGFsbCBxdWV1ZXMgaW4gdGhlIGZpcnN0IHBpcGUgKi8KKwkJaWYgKG1lYyA9PSAw ICYmIHBpcGUgPT0gMCkKKwkJCXNldF9iaXQoaSwgYWRldi0+Z2Z4Lm1lYy5xdWV1ZV9iaXRtYXAp OworCX0KKworCS8qIHVwZGF0ZSB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBjb21wdXRlIHJpbmdzICov CisJYWRldi0+Z2Z4Lm51bV9jb21wdXRlX3JpbmdzID0KKwkJYml0bWFwX3dlaWdodChhZGV2LT5n ZngubWVjLnF1ZXVlX2JpdG1hcCwgQU1ER1BVX01BWF9DT01QVVRFX1FVRVVFUyk7CisKKwkvKiBJ ZiB5b3UgaGl0IHRoaXMgY2FzZSBhbmQgZWRpdGVkIHRoZSBwb2xpY3ksIHlvdSBwcm9iYWJseSBq dXN0CisJICogbmVlZCB0byBpbmNyZWFzZSBBTURHUFVfTUFYX0NPTVBVVEVfUklOR1MgKi8KKwlp ZiAoV0FSTl9PTihhZGV2LT5nZngubnVtX2NvbXB1dGVfcmluZ3MgPiBBTURHUFVfTUFYX0NPTVBV VEVfUklOR1MpKQorCQlhZGV2LT5nZngubnVtX2NvbXB1dGVfcmluZ3MgPSBBTURHUFVfTUFYX0NP TVBVVEVfUklOR1M7Cit9CisKIHN0YXRpYyBpbnQgZ2Z4X3Y4XzBfbWVjX2luaXQoc3RydWN0IGFt ZGdwdV9kZXZpY2UgKmFkZXYpCiB7CiAJaW50IHI7CiAJdTMyICpocGQ7CiAJc2l6ZV90IG1lY19o cGRfc2l6ZTsKIAorCWJpdG1hcF96ZXJvKGFkZXYtPmdmeC5tZWMucXVldWVfYml0bWFwLCBBTURH UFVfTUFYX0NPTVBVVEVfUVVFVUVTKTsKKwogCXN3aXRjaCAoYWRldi0+YXNpY190eXBlKSB7CiAJ Y2FzZSBDSElQX0ZJSkk6CiAJY2FzZSBDSElQX1RPTkdBOgogCWNhc2UgQ0hJUF9QT0xBUklTMTE6 CiAJY2FzZSBDSElQX1BPTEFSSVMxMjoKIAljYXNlIENISVBfUE9MQVJJUzEwOgogCWNhc2UgQ0hJ UF9DQVJSSVpPOgogCQlhZGV2LT5nZngubWVjLm51bV9tZWMgPSAyOwogCQlicmVhazsKIAljYXNl IENISVBfVE9QQVo6CiAJY2FzZSBDSElQX1NUT05FWToKIAlkZWZhdWx0OgogCQlhZGV2LT5nZngu bWVjLm51bV9tZWMgPSAxOwogCQlicmVhazsKIAl9CiAKIAlhZGV2LT5nZngubWVjLm51bV9waXBl X3Blcl9tZWMgPSA0OwogCWFkZXYtPmdmeC5tZWMubnVtX3F1ZXVlX3Blcl9waXBlID0gODsKIAot CS8qIG9ubHkgMSBwaXBlIG9mIHRoZSBmaXJzdCBNRUMgaXMgb3duZWQgYnkgYW1kZ3B1ICovCi0J bWVjX2hwZF9zaXplID0gMSAqIDEgKiBhZGV2LT5nZngubWVjLm51bV9xdWV1ZV9wZXJfcGlwZSAq IEdGWDhfTUVDX0hQRF9TSVpFOworCS8qIHRha2Ugb3duZXJzaGlwIG9mIHRoZSByZWxldmFudCBj b21wdXRlIHF1ZXVlcyAqLworCWdmeF92OF8wX2NvbXB1dGVfcXVldWVfYWNxdWlyZShhZGV2KTsK KworCW1lY19ocGRfc2l6ZSA9IGFkZXYtPmdmeC5udW1fY29tcHV0ZV9yaW5ncyAqIEdGWDhfTUVD X0hQRF9TSVpFOwogCiAJaWYgKGFkZXYtPmdmeC5tZWMuaHBkX2VvcF9vYmogPT0gTlVMTCkgewog CQlyID0gYW1kZ3B1X2JvX2NyZWF0ZShhZGV2LAogCQkJCSAgICAgbWVjX2hwZF9zaXplLAogCQkJ CSAgICAgUEFHRV9TSVpFLCB0cnVlLAogCQkJCSAgICAgQU1ER1BVX0dFTV9ET01BSU5fR1RULCAw LCBOVUxMLCBOVUxMLAogCQkJCSAgICAgJmFkZXYtPmdmeC5tZWMuaHBkX2VvcF9vYmopOwogCQlp ZiAocikgewogCQkJZGV2X3dhcm4oYWRldi0+ZGV2LCAiKCVkKSBjcmVhdGUgSERQIEVPUCBibyBm YWlsZWRcbiIsIHIpOwogCQkJcmV0dXJuIHI7CkBAIC0yMDgzLDIxICsyMTE3LDIxIEBAIHN0YXRp YyBpbnQgZ2Z4X3Y4XzBfZ3B1X2Vhcmx5X2luaXQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYp CiAJCWdiX2FkZHJfY29uZmlnID0gUkVHX1NFVF9GSUVMRChnYl9hZGRyX2NvbmZpZywgR0JfQURE Ul9DT05GSUcsIFJPV19TSVpFLCAyKTsKIAkJYnJlYWs7CiAJfQogCWFkZXYtPmdmeC5jb25maWcu Z2JfYWRkcl9jb25maWcgPSBnYl9hZGRyX2NvbmZpZzsKIAogCXJldHVybiAwOwogfQogCiBzdGF0 aWMgaW50IGdmeF92OF8wX3N3X2luaXQodm9pZCAqaGFuZGxlKQogewotCWludCBpLCByOworCWlu dCBpLCByLCByaW5nX2lkOwogCXN0cnVjdCBhbWRncHVfcmluZyAqcmluZzsKIAlzdHJ1Y3QgYW1k Z3B1X2tpcSAqa2lxOwogCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gKHN0cnVjdCBhbWRn cHVfZGV2aWNlICopaGFuZGxlOwogCiAJLyogS0lRIGV2ZW50ICovCiAJciA9IGFtZGdwdV9pcnFf YWRkX2lkKGFkZXYsIEFNREdQVV9JSF9DTElFTlRJRF9MRUdBQ1ksIDE3OCwgJmFkZXYtPmdmeC5r aXEuaXJxKTsKIAlpZiAocikKIAkJcmV0dXJuIHI7CiAKIAkvKiBFT1AgRXZlbnQgKi8KQEAgLTIx NTAsNDMgKzIxODQsNTYgQEAgc3RhdGljIGludCBnZnhfdjhfMF9zd19pbml0KHZvaWQgKmhhbmRs ZSkKIAkJCXJpbmctPmRvb3JiZWxsX2luZGV4ID0gQU1ER1BVX0RPT1JCRUxMX0dGWF9SSU5HMDsK IAkJfQogCiAJCXIgPSBhbWRncHVfcmluZ19pbml0KGFkZXYsIHJpbmcsIDEwMjQsICZhZGV2LT5n ZnguZW9wX2lycSwKIAkJCQkgICAgIEFNREdQVV9DUF9JUlFfR0ZYX0VPUCk7CiAJCWlmIChyKQog CQkJcmV0dXJuIHI7CiAJfQogCiAJLyogc2V0IHVwIHRoZSBjb21wdXRlIHF1ZXVlcyAqLwotCWZv ciAoaSA9IDA7IGkgPCBhZGV2LT5nZngubnVtX2NvbXB1dGVfcmluZ3M7IGkrKykgeworCWZvciAo aSA9IDAsIHJpbmdfaWQgPSAwOyBpIDwgQU1ER1BVX01BWF9DT01QVVRFX1FVRVVFUzsgaSsrKSB7 CiAJCXVuc2lnbmVkIGlycV90eXBlOwogCi0JCS8qIG1heCAzMiBxdWV1ZXMgcGVyIE1FQyAqLwot CQlpZiAoKGkgPj0gMzIpIHx8IChpID49IEFNREdQVV9NQVhfQ09NUFVURV9SSU5HUykpIHsKLQkJ CURSTV9FUlJPUigiVG9vIG1hbnkgKCVkKSBjb21wdXRlIHJpbmdzIVxuIiwgaSk7CisJCWlmICgh dGVzdF9iaXQoaSwgYWRldi0+Z2Z4Lm1lYy5xdWV1ZV9iaXRtYXApKQorCQkJY29udGludWU7CisK KwkJaWYgKFdBUk5fT04ocmluZ19pZCA+PSBBTURHUFVfTUFYX0NPTVBVVEVfUklOR1MpKQogCQkJ YnJlYWs7Ci0JCX0KLQkJcmluZyA9ICZhZGV2LT5nZnguY29tcHV0ZV9yaW5nW2ldOworCisJCXJp bmcgPSAmYWRldi0+Z2Z4LmNvbXB1dGVfcmluZ1tyaW5nX2lkXTsKKworCQkvKiBtZWMwIGlzIG1l MSAqLworCQlyaW5nLT5tZSA9ICgoaSAvIGFkZXYtPmdmeC5tZWMubnVtX3F1ZXVlX3Blcl9waXBl KQorCQkJCS8gYWRldi0+Z2Z4Lm1lYy5udW1fcGlwZV9wZXJfbWVjKQorCQkJCSsgMTsKKwkJcmlu Zy0+cGlwZSA9IChpIC8gYWRldi0+Z2Z4Lm1lYy5udW1fcXVldWVfcGVyX3BpcGUpCisJCQkJJSBh ZGV2LT5nZngubWVjLm51bV9waXBlX3Blcl9tZWM7CisJCXJpbmctPnF1ZXVlID0gaSAlIGFkZXYt PmdmeC5tZWMubnVtX3F1ZXVlX3Blcl9waXBlOworCiAJCXJpbmctPnJpbmdfb2JqID0gTlVMTDsK IAkJcmluZy0+dXNlX2Rvb3JiZWxsID0gdHJ1ZTsKLQkJcmluZy0+ZG9vcmJlbGxfaW5kZXggPSBB TURHUFVfRE9PUkJFTExfTUVDX1JJTkcwICsgaTsKLQkJcmluZy0+bWUgPSAxOyAvKiBmaXJzdCBN RUMgKi8KLQkJcmluZy0+cGlwZSA9IGkgLyA4OwotCQlyaW5nLT5xdWV1ZSA9IGkgJSA4OwotCQly aW5nLT5lb3BfZ3B1X2FkZHIgPSBhZGV2LT5nZngubWVjLmhwZF9lb3BfZ3B1X2FkZHIgKyAoaSAq IEdGWDhfTUVDX0hQRF9TSVpFKTsKKwkJcmluZy0+ZW9wX2dwdV9hZGRyID0gYWRldi0+Z2Z4Lm1l Yy5ocGRfZW9wX2dwdV9hZGRyICsgKHJpbmdfaWQgKiBHRlg4X01FQ19IUERfU0laRSk7CisJCXJp bmctPmRvb3JiZWxsX2luZGV4ID0gQU1ER1BVX0RPT1JCRUxMX01FQ19SSU5HMCArIHJpbmdfaWQ7 CiAJCXNwcmludGYocmluZy0+bmFtZSwgImNvbXBfJWQuJWQuJWQiLCByaW5nLT5tZSwgcmluZy0+ cGlwZSwgcmluZy0+cXVldWUpOwotCQlpcnFfdHlwZSA9IEFNREdQVV9DUF9JUlFfQ09NUFVURV9N RUMxX1BJUEUwX0VPUCArIHJpbmctPnBpcGU7CisKKwkJaXJxX3R5cGUgPSBBTURHUFVfQ1BfSVJR X0NPTVBVVEVfTUVDMV9QSVBFMF9FT1AKKwkJCSsgKChyaW5nLT5tZSAtIDEpICogYWRldi0+Z2Z4 Lm1lYy5udW1fcGlwZV9wZXJfbWVjKQorCQkJKyByaW5nLT5waXBlOworCiAJCS8qIHR5cGUtMiBw YWNrZXRzIGFyZSBkZXByZWNhdGVkIG9uIE1FQywgdXNlIHR5cGUtMyBpbnN0ZWFkICovCiAJCXIg PSBhbWRncHVfcmluZ19pbml0KGFkZXYsIHJpbmcsIDEwMjQsICZhZGV2LT5nZnguZW9wX2lycSwK IAkJCQkgICAgIGlycV90eXBlKTsKIAkJaWYgKHIpCiAJCQlyZXR1cm4gcjsKKworCQlyaW5nX2lk Kys7CiAJfQogCiAJciA9IGdmeF92OF8wX2tpcV9pbml0KGFkZXYpOwogCWlmIChyKSB7CiAJCURS TV9FUlJPUigiRmFpbGVkIHRvIGluaXQgS0lRIEJPcyFcbiIpOwogCQlyZXR1cm4gcjsKIAl9CiAK IAlraXEgPSAmYWRldi0+Z2Z4LmtpcTsKIAlyID0gZ2Z4X3Y4XzBfa2lxX2luaXRfcmluZyhhZGV2 LCAma2lxLT5yaW5nLCAma2lxLT5pcnEpOwpAQCAtNTY3OSwyMSArNTcyNiwyMSBAQCBzdGF0aWMg Y29uc3Qgc3RydWN0IGFtZGdwdV9nZnhfZnVuY3MgZ2Z4X3Y4XzBfZ2Z4X2Z1bmNzID0gewogCS5z ZWxlY3Rfc2Vfc2ggPSAmZ2Z4X3Y4XzBfc2VsZWN0X3NlX3NoLAogCS5yZWFkX3dhdmVfZGF0YSA9 ICZnZnhfdjhfMF9yZWFkX3dhdmVfZGF0YSwKIAkucmVhZF93YXZlX3NncHJzID0gJmdmeF92OF8w X3JlYWRfd2F2ZV9zZ3BycywKIH07CiAKIHN0YXRpYyBpbnQgZ2Z4X3Y4XzBfZWFybHlfaW5pdCh2 b2lkICpoYW5kbGUpCiB7CiAJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSAoc3RydWN0IGFt ZGdwdV9kZXZpY2UgKiloYW5kbGU7CiAKIAlhZGV2LT5nZngubnVtX2dmeF9yaW5ncyA9IEdGWDhf TlVNX0dGWF9SSU5HUzsKLQlhZGV2LT5nZngubnVtX2NvbXB1dGVfcmluZ3MgPSBHRlg4X05VTV9D T01QVVRFX1JJTkdTOworCWFkZXYtPmdmeC5udW1fY29tcHV0ZV9yaW5ncyA9IEFNREdQVV9NQVhf Q09NUFVURV9SSU5HUzsKIAlhZGV2LT5nZnguZnVuY3MgPSAmZ2Z4X3Y4XzBfZ2Z4X2Z1bmNzOwog CWdmeF92OF8wX3NldF9yaW5nX2Z1bmNzKGFkZXYpOwogCWdmeF92OF8wX3NldF9pcnFfZnVuY3Mo YWRldik7CiAJZ2Z4X3Y4XzBfc2V0X2dkc19pbml0KGFkZXYpOwogCWdmeF92OF8wX3NldF9ybGNf ZnVuY3MoYWRldik7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBnZnhfdjhfMF9sYXRl X2luaXQodm9pZCAqaGFuZGxlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvZ2Z4X3Y5XzAuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2dmeF92OV8wLmMKaW5k ZXggNWRjYzFiMC4uNzJlZWRhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvZ2Z4X3Y5XzAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9nZnhfdjlfMC5j CkBAIC0zMSwyMSArMzEsMjAgQEAKICNpbmNsdWRlICJ2ZWdhMTAvR0MvZ2NfOV8wX29mZnNldC5o IgogI2luY2x1ZGUgInZlZ2ExMC9HQy9nY185XzBfc2hfbWFzay5oIgogI2luY2x1ZGUgInZlZ2Ex MC92ZWdhMTBfZW51bS5oIgogI2luY2x1ZGUgInZlZ2ExMC9IRFAvaGRwXzRfMF9vZmZzZXQuaCIK IAogI2luY2x1ZGUgInNvYzE1X2NvbW1vbi5oIgogI2luY2x1ZGUgImNsZWFyc3RhdGVfZ2Z4OS5o IgogI2luY2x1ZGUgInY5X3N0cnVjdHMuaCIKIAogI2RlZmluZSBHRlg5X05VTV9HRlhfUklOR1Mg ICAgIDEKLSNkZWZpbmUgR0ZYOV9OVU1fQ09NUFVURV9SSU5HUyA4CiAjZGVmaW5lIEdGWDlfTlVN X1NFCQk0CiAjZGVmaW5lIFJMQ0dfVUNPREVfTE9BRElOR19TVEFSVF9BRERSRVNTIDB4MjAwMAog CiBNT0RVTEVfRklSTVdBUkUoImFtZGdwdS92ZWdhMTBfY2UuYmluIik7CiBNT0RVTEVfRklSTVdB UkUoImFtZGdwdS92ZWdhMTBfcGZwLmJpbiIpOwogTU9EVUxFX0ZJUk1XQVJFKCJhbWRncHUvdmVn YTEwX21lLmJpbiIpOwogTU9EVUxFX0ZJUk1XQVJFKCJhbWRncHUvdmVnYTEwX21lYy5iaW4iKTsK IE1PRFVMRV9GSVJNV0FSRSgiYW1kZ3B1L3ZlZ2ExMF9tZWMyLmJpbiIpOwogTU9EVUxFX0ZJUk1X QVJFKCJhbWRncHUvdmVnYTEwX3JsYy5iaW4iKTsKIApAQCAtNDY5LDQ1ICs0NjgsNzkgQEAgc3Rh dGljIHZvaWQgZ2Z4X3Y5XzBfbWVjX2Zpbmkoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCiAJ CWFtZGdwdV9ib191bnBpbihhZGV2LT5nZngubWVjLm1lY19md19vYmopOwogCQlhbWRncHVfYm9f dW5yZXNlcnZlKGFkZXYtPmdmeC5tZWMubWVjX2Z3X29iaik7CiAKIAkJYW1kZ3B1X2JvX3VucmVm KCZhZGV2LT5nZngubWVjLm1lY19md19vYmopOwogCQlhZGV2LT5nZngubWVjLm1lY19md19vYmog PSBOVUxMOwogCX0KIH0KIAogI2RlZmluZSBNRUNfSFBEX1NJWkUgMjA0OAogCitzdGF0aWMgdm9p ZCBnZnhfdjlfMF9jb21wdXRlX3F1ZXVlX2FjcXVpcmUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFk ZXYpCit7CisJaW50IGksIHF1ZXVlLCBwaXBlLCBtZWM7CisKKwkvKiBwb2xpY3kgZm9yIGFtZGdw dSBjb21wdXRlIHF1ZXVlIG93bmVyc2hpcCAqLworCWZvciAoaSA9IDA7IGkgPCBBTURHUFVfTUFY X0NPTVBVVEVfUVVFVUVTOyArK2kpIHsKKwkJcXVldWUgPSBpICUgYWRldi0+Z2Z4Lm1lYy5udW1f cXVldWVfcGVyX3BpcGU7CisJCXBpcGUgPSAoaSAvIGFkZXYtPmdmeC5tZWMubnVtX3F1ZXVlX3Bl cl9waXBlKQorCQkJJSBhZGV2LT5nZngubWVjLm51bV9waXBlX3Blcl9tZWM7CisJCW1lYyA9IChp IC8gYWRldi0+Z2Z4Lm1lYy5udW1fcXVldWVfcGVyX3BpcGUpCisJCQkvIGFkZXYtPmdmeC5tZWMu bnVtX3BpcGVfcGVyX21lYzsKKworCQkvKiB3ZSd2ZSBydW4gb3V0IG9mIEhXICovCisJCWlmICht ZWMgPiBhZGV2LT5nZngubWVjLm51bV9tZWMpCisJCQlicmVhazsKKworCQkvKiBwb2xpY3k6IGFt ZGdwdSBvd25zIGFsbCBxdWV1ZXMgaW4gdGhlIGZpcnN0IHBpcGUgKi8KKwkJaWYgKG1lYyA9PSAw ICYmIHBpcGUgPT0gMCkKKwkJCXNldF9iaXQoaSwgYWRldi0+Z2Z4Lm1lYy5xdWV1ZV9iaXRtYXAp OworCX0KKworCS8qIHVwZGF0ZSB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBjb21wdXRlIHJpbmdzICov CisJYWRldi0+Z2Z4Lm51bV9jb21wdXRlX3JpbmdzID0KKwkJYml0bWFwX3dlaWdodChhZGV2LT5n ZngubWVjLnF1ZXVlX2JpdG1hcCwgQU1ER1BVX01BWF9DT01QVVRFX1FVRVVFUyk7CisKKwkvKiBJ ZiB5b3UgaGl0IHRoaXMgY2FzZSBhbmQgZWRpdGVkIHRoZSBwb2xpY3ksIHlvdSBwcm9iYWJseSBq dXN0CisJICogbmVlZCB0byBpbmNyZWFzZSBBTURHUFVfTUFYX0NPTVBVVEVfUklOR1MgKi8KKwlp ZiAoV0FSTl9PTihhZGV2LT5nZngubnVtX2NvbXB1dGVfcmluZ3MgPiBBTURHUFVfTUFYX0NPTVBV VEVfUklOR1MpKQorCQlhZGV2LT5nZngubnVtX2NvbXB1dGVfcmluZ3MgPSBBTURHUFVfTUFYX0NP TVBVVEVfUklOR1M7Cit9CisKIHN0YXRpYyBpbnQgZ2Z4X3Y5XzBfbWVjX2luaXQoc3RydWN0IGFt ZGdwdV9kZXZpY2UgKmFkZXYpCiB7CiAJaW50IHI7CiAJdTMyICpocGQ7CiAJY29uc3QgX19sZTMy ICpmd19kYXRhOwogCXVuc2lnbmVkIGZ3X3NpemU7CiAJdTMyICpmdzsKIAlzaXplX3QgbWVjX2hw ZF9zaXplOwogCiAJY29uc3Qgc3RydWN0IGdmeF9maXJtd2FyZV9oZWFkZXJfdjFfMCAqbWVjX2hk cjsKIAorCWJpdG1hcF96ZXJvKGFkZXYtPmdmeC5tZWMucXVldWVfYml0bWFwLCBBTURHUFVfTUFY X0NPTVBVVEVfUVVFVUVTKTsKKwogCXN3aXRjaCAoYWRldi0+YXNpY190eXBlKSB7CiAJY2FzZSBD SElQX1ZFR0ExMDoKIAkJYWRldi0+Z2Z4Lm1lYy5udW1fbWVjID0gMjsKIAkJYnJlYWs7CiAJZGVm YXVsdDoKIAkJYWRldi0+Z2Z4Lm1lYy5udW1fbWVjID0gMTsKIAkJYnJlYWs7CiAJfQogCiAJYWRl di0+Z2Z4Lm1lYy5udW1fcGlwZV9wZXJfbWVjID0gNDsKIAlhZGV2LT5nZngubWVjLm51bV9xdWV1 ZV9wZXJfcGlwZSA9IDg7CiAKLQkvKiBvbmx5IDEgcGlwZSBvZiB0aGUgZmlyc3QgTUVDIGlzIG93 bmVkIGJ5IGFtZGdwdSAqLwotCW1lY19ocGRfc2l6ZSA9IDEgKiAxICogYWRldi0+Z2Z4Lm1lYy5u dW1fcXVldWVfcGVyX3BpcGUgKiBNRUNfSFBEX1NJWkU7CisJLyogdGFrZSBvd25lcnNoaXAgb2Yg dGhlIHJlbGV2YW50IGNvbXB1dGUgcXVldWVzICovCisJZ2Z4X3Y5XzBfY29tcHV0ZV9xdWV1ZV9h Y3F1aXJlKGFkZXYpOworCW1lY19ocGRfc2l6ZSA9IGFkZXYtPmdmeC5udW1fY29tcHV0ZV9yaW5n cyAqIE1FQ19IUERfU0laRTsKIAogCWlmIChhZGV2LT5nZngubWVjLmhwZF9lb3Bfb2JqID09IE5V TEwpIHsKIAkJciA9IGFtZGdwdV9ib19jcmVhdGUoYWRldiwKIAkJCQkgICAgIG1lY19ocGRfc2l6 ZSwKIAkJCQkgICAgIFBBR0VfU0laRSwgdHJ1ZSwKIAkJCQkgICAgIEFNREdQVV9HRU1fRE9NQUlO X0dUVCwgMCwgTlVMTCwgTlVMTCwKIAkJCQkgICAgICZhZGV2LT5nZngubWVjLmhwZF9lb3Bfb2Jq KTsKIAkJaWYgKHIpIHsKIAkJCWRldl93YXJuKGFkZXYtPmRldiwgIiglZCkgY3JlYXRlIEhEUCBF T1AgYm8gZmFpbGVkXG4iLCByKTsKIAkJCXJldHVybiByOwpAQCAtMTAyNCwyMSArMTA1NywyMSBA QCBzdGF0aWMgaW50IGdmeF92OV8wX25nZ19lbihzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikK IAlnZnhfdjlfMF93cml0ZV9kYXRhX3RvX3JlZyhyaW5nLCAwLCBmYWxzZSwKIAkJCQkgICBhbWRn cHVfZ2RzX3JlZ19vZmZzZXRbMF0ubWVtX3NpemUsIDApOwogCiAJYW1kZ3B1X3JpbmdfY29tbWl0 KHJpbmcpOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgZ2Z4X3Y5XzBfc3dfaW5pdCh2 b2lkICpoYW5kbGUpCiB7Ci0JaW50IGksIHI7CisJaW50IGksIHIsIHJpbmdfaWQ7CiAJc3RydWN0 IGFtZGdwdV9yaW5nICpyaW5nOwogCXN0cnVjdCBhbWRncHVfa2lxICpraXE7CiAJc3RydWN0IGFt ZGdwdV9kZXZpY2UgKmFkZXYgPSAoc3RydWN0IGFtZGdwdV9kZXZpY2UgKiloYW5kbGU7CiAKIAkv KiBLSVEgZXZlbnQgKi8KIAlyID0gYW1kZ3B1X2lycV9hZGRfaWQoYWRldiwgQU1ER1BVX0lIX0NM SUVOVElEX0dSQk1fQ1AsIDE3OCwgJmFkZXYtPmdmeC5raXEuaXJxKTsKIAlpZiAocikKIAkJcmV0 dXJuIHI7CiAKIAkvKiBFT1AgRXZlbnQgKi8KQEAgLTEwODEsMjEgKzExMTQsNjAgQEAgc3RhdGlj IGludCBnZnhfdjlfMF9zd19pbml0KHZvaWQgKmhhbmRsZSkKIAkJc3ByaW50ZihyaW5nLT5uYW1l LCAiZ2Z4Iik7CiAJCXJpbmctPnVzZV9kb29yYmVsbCA9IHRydWU7CiAJCXJpbmctPmRvb3JiZWxs X2luZGV4ID0gQU1ER1BVX0RPT1JCRUxMNjRfR0ZYX1JJTkcwIDw8IDE7CiAJCXIgPSBhbWRncHVf cmluZ19pbml0KGFkZXYsIHJpbmcsIDEwMjQsCiAJCQkJICAgICAmYWRldi0+Z2Z4LmVvcF9pcnEs IEFNREdQVV9DUF9JUlFfR0ZYX0VPUCk7CiAJCWlmIChyKQogCQkJcmV0dXJuIHI7CiAJfQogCiAJ Lyogc2V0IHVwIHRoZSBjb21wdXRlIHF1ZXVlcyAqLwotCWZvciAoaSA9IDA7IGkgPCBhZGV2LT5n ZngubnVtX2NvbXB1dGVfcmluZ3M7IGkrKykgeworCWZvciAoaSA9IDAsIHJpbmdfaWQgPSAwOyBp IDwgQU1ER1BVX01BWF9DT01QVVRFX1FVRVVFUzsgaSsrKSB7CisJCXVuc2lnbmVkIGlycV90eXBl OworCisJCWlmICghdGVzdF9iaXQoaSwgYWRldi0+Z2Z4Lm1lYy5xdWV1ZV9iaXRtYXApKQorCQkJ Y29udGludWU7CisKKwkJaWYgKFdBUk5fT04ocmluZ19pZCA+PSBBTURHUFVfTUFYX0NPTVBVVEVf UklOR1MpKQorCQkJYnJlYWs7CisKKwkJcmluZyA9ICZhZGV2LT5nZnguY29tcHV0ZV9yaW5nW3Jp bmdfaWRdOworCisJCS8qIG1lYzAgaXMgbWUxICovCisJCXJpbmctPm1lID0gKChpIC8gYWRldi0+ Z2Z4Lm1lYy5udW1fcXVldWVfcGVyX3BpcGUpCisJCQkJLyBhZGV2LT5nZngubWVjLm51bV9waXBl X3Blcl9tZWMpCisJCQkJKyAxOworCQlyaW5nLT5waXBlID0gKGkgLyBhZGV2LT5nZngubWVjLm51 bV9xdWV1ZV9wZXJfcGlwZSkKKwkJCQklIGFkZXYtPmdmeC5tZWMubnVtX3BpcGVfcGVyX21lYzsK KwkJcmluZy0+cXVldWUgPSBpICUgYWRldi0+Z2Z4Lm1lYy5udW1fcXVldWVfcGVyX3BpcGU7CisK KwkJcmluZy0+cmluZ19vYmogPSBOVUxMOworCQlyaW5nLT51c2VfZG9vcmJlbGwgPSB0cnVlOwor CQlyaW5nLT5lb3BfZ3B1X2FkZHIgPSBhZGV2LT5nZngubWVjLmhwZF9lb3BfZ3B1X2FkZHIgKyAo cmluZ19pZCAqIE1FQ19IUERfU0laRSk7CisJCXJpbmctPmRvb3JiZWxsX2luZGV4ID0gQU1ER1BV X0RPT1JCRUxMX01FQ19SSU5HMCArIHJpbmdfaWQ7CisJCXNwcmludGYocmluZy0+bmFtZSwgImNv bXBfJWQuJWQuJWQiLCByaW5nLT5tZSwgcmluZy0+cGlwZSwgcmluZy0+cXVldWUpOworCisJCWly cV90eXBlID0gQU1ER1BVX0NQX0lSUV9DT01QVVRFX01FQzFfUElQRTBfRU9QCisJCQkrICgocmlu Zy0+bWUgLSAxKSAqIGFkZXYtPmdmeC5tZWMubnVtX3BpcGVfcGVyX21lYykKKwkJCSsgcmluZy0+ cGlwZTsKKworCQkvKiB0eXBlLTIgcGFja2V0cyBhcmUgZGVwcmVjYXRlZCBvbiBNRUMsIHVzZSB0 eXBlLTMgaW5zdGVhZCAqLworCQlyID0gYW1kZ3B1X3JpbmdfaW5pdChhZGV2LCByaW5nLCAxMDI0 LCAmYWRldi0+Z2Z4LmVvcF9pcnEsCisJCQkJICAgICBpcnFfdHlwZSk7CisJCWlmIChyKQorCQkJ cmV0dXJuIHI7CisKKwkJcmluZ19pZCsrOworCX0KKworCS8qIHNldCB1cCB0aGUgY29tcHV0ZSBx dWV1ZXMgKi8KKwlmb3IgKGkgPSAwLCByaW5nX2lkID0gMDsgaSA8IEFNREdQVV9NQVhfQ09NUFVU RV9RVUVVRVM7IGkrKykgewogCQl1bnNpZ25lZCBpcnFfdHlwZTsKIAogCQkvKiBtYXggMzIgcXVl dWVzIHBlciBNRUMgKi8KIAkJaWYgKChpID49IDMyKSB8fCAoaSA+PSBBTURHUFVfTUFYX0NPTVBV VEVfUklOR1MpKSB7CiAJCQlEUk1fRVJST1IoIlRvbyBtYW55ICglZCkgY29tcHV0ZSByaW5ncyFc biIsIGkpOwogCQkJYnJlYWs7CiAJCX0KIAkJcmluZyA9ICZhZGV2LT5nZnguY29tcHV0ZV9yaW5n W2ldOwogCQlyaW5nLT5yaW5nX29iaiA9IE5VTEw7CiAJCXJpbmctPnVzZV9kb29yYmVsbCA9IHRy dWU7CkBAIC0yNDY0LDIxICsyNTM2LDIxIEBAIHN0YXRpYyB2b2lkIGdmeF92OV8wX3JpbmdfZW1p dF9nZHNfc3dpdGNoKHN0cnVjdCBhbWRncHVfcmluZyAqcmluZywKIAlnZnhfdjlfMF93cml0ZV9k YXRhX3RvX3JlZyhyaW5nLCAwLCBmYWxzZSwKIAkJCQkgICBhbWRncHVfZ2RzX3JlZ19vZmZzZXRb dm1pZF0ub2EsCiAJCQkJICAgKDEgPDwgKG9hX3NpemUgKyBvYV9iYXNlKSkgLSAoMSA8PCBvYV9i YXNlKSk7CiB9CiAKIHN0YXRpYyBpbnQgZ2Z4X3Y5XzBfZWFybHlfaW5pdCh2b2lkICpoYW5kbGUp CiB7CiAJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSAoc3RydWN0IGFtZGdwdV9kZXZpY2Ug KiloYW5kbGU7CiAKIAlhZGV2LT5nZngubnVtX2dmeF9yaW5ncyA9IEdGWDlfTlVNX0dGWF9SSU5H UzsKLQlhZGV2LT5nZngubnVtX2NvbXB1dGVfcmluZ3MgPSBHRlg5X05VTV9DT01QVVRFX1JJTkdT OworCWFkZXYtPmdmeC5udW1fY29tcHV0ZV9yaW5ncyA9IEFNREdQVV9NQVhfQ09NUFVURV9SSU5H UzsKIAlnZnhfdjlfMF9zZXRfcmluZ19mdW5jcyhhZGV2KTsKIAlnZnhfdjlfMF9zZXRfaXJxX2Z1 bmNzKGFkZXYpOwogCWdmeF92OV8wX3NldF9nZHNfaW5pdChhZGV2KTsKIAlnZnhfdjlfMF9zZXRf cmxjX2Z1bmNzKGFkZXYpOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgZ2Z4X3Y5XzBf bGF0ZV9pbml0KHZvaWQgKmhhbmRsZSkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9h bWQvaW5jbHVkZS9rZ2Rfa2ZkX2ludGVyZmFjZS5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNs dWRlL2tnZF9rZmRfaW50ZXJmYWNlLmgKaW5kZXggYTA5ZDlmMy4uNjdmNmQxOSAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2tnZF9rZmRfaW50ZXJmYWNlLmgKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2tnZF9rZmRfaW50ZXJmYWNlLmgKQEAgLTI2LDIw ICsyNiwyMSBAQAogICovCiAKICNpZm5kZWYgS0dEX0tGRF9JTlRFUkZBQ0VfSF9JTkNMVURFRAog I2RlZmluZSBLR0RfS0ZEX0lOVEVSRkFDRV9IX0lOQ0xVREVECiAKICNpbmNsdWRlIDxsaW51eC90 eXBlcy5oPgogCiBzdHJ1Y3QgcGNpX2RldjsKIAogI2RlZmluZSBLRkRfSU5URVJGQUNFX1ZFUlNJ T04gMQorI2RlZmluZSBLR0RfTUFYX1FVRVVFUyAxMjgKIAogc3RydWN0IGtmZF9kZXY7CiBzdHJ1 Y3Qga2dkX2RldjsKIAogc3RydWN0IGtnZF9tZW07CiAKIGVudW0ga2dkX21lbW9yeV9wb29sIHsK IAlLR0RfUE9PTF9TWVNURU1fQ0FDSEVBQkxFID0gMSwKIAlLR0RfUE9PTF9TWVNURU1fV1JJVEVD T01CSU5FID0gMiwKIAlLR0RfUE9PTF9GUkFNRUJVRkZFUiA9IDMsCi0tIAoyLjkuMwoKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KYW1kLWdmeCBtYWlsaW5n IGxpc3QKYW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVz a3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4Cg==