From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Yang, Philip" Subject: [PATCH 3/3] drm/amdgpu: replace get_user_pages with HMM address mirror helpers v3 Date: Thu, 6 Dec 2018 21:02:54 +0000 Message-ID: <20181206210235.12036-3-Philip.Yang@amd.com> References: <20181206210235.12036-1-Philip.Yang@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20181206210235.12036-1-Philip.Yang-5C7GfCeVMHo@public.gmane.org> Content-Language: en-US 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: "Yang, Philip" VXNlIEhNTSBoZWxwZXIgZnVuY3Rpb24gaG1tX3ZtYV9mYXVsdCgpIHRvIGdldCBwaHlzaWNhbCBw YWdlcyBiYWNraW5nCnVzZXJwdHIgYW5kIHN0YXJ0IENQVSBwYWdlIHRhYmxlIHVwZGF0ZSB0cmFj ayBvZiB0aG9zZSBwYWdlcy4gVGhlbiB1c2UKaG1tX3ZtYV9yYW5nZV9kb25lKCkgdG8gY2hlY2sg aWYgdGhvc2UgcGFnZXMgYXJlIHVwZGF0ZWQgYmVmb3JlCmFtZGdwdV9jc19zdWJtaXQgZm9yIGdm eCBvciBiZWZvcmUgdXNlciBxdWV1ZXMgYXJlIHJlc3VtZWQgZm9yIGtmZC4KCklmIHVzZXJwdHIg cGFnZXMgYXJlIHVwZGF0ZWQsIGZvciBnZngsIGFtZGdwdV9jc19pb2N0bCB3aWxsIHJlc3RhcnQK ZnJvbSBzY3JhdGNoLCBmb3Iga2ZkLCByZXN0b3JlIHdvcmtlciBpcyByZXNjaGVkdWxlZCB0byBy ZXRyeS4KCkhNTSBzaW1wbGlmeSB0aGUgQ1BVIHBhZ2UgdGFibGUgY29uY3VycmVudCB1cGRhdGUg Y2hlY2ssIHNvIHJlbW92ZQpndXB0YXNrbG9jaywgbW11X2ludmFsaWRhdGlvbnMsIGxhc3Rfc2V0 X3BhZ2VzIGZpZWxkcyBmcm9tCmFtZGdwdV90dG1fdHQgc3RydWN0LgoKSE1NIGRvZXMgbm90IHBp biB0aGUgcGFnZSAoaW5jcmVhc2UgcGFnZSByZWYgY291bnQpLCBzbyByZW1vdmUgcmVsYXRlZApv cGVyYXRpb25zIGxpa2UgcmVsZWFzZV9wYWdlcygpLCBwdXRfcGFnZSgpLCBtYXJrX3BhZ2VfZGly dHkoKS4KCkNoYW5nZS1JZDogSWQyZDMxMzAzNzhiNDRhNzc0ZTBkNzcxNTYxMDJhMjBhMjAzYjUw MzYKU2lnbmVkLW9mZi1ieTogUGhpbGlwIFlhbmcgPFBoaWxpcC5ZYW5nQGFtZC5jb20+Ci0tLQog ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2FtZGtmZC5oICAgIHwgICAxIC0KIC4u Li9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2FtZGtmZF9ncHV2bS5jICB8ICA4MSArKy0tLS0t LQogZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2JvX2xpc3QuYyAgIHwgICAyIC0K IGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9ib19saXN0LmggICB8ICAgMyArLQog ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2NzLmMgICAgICAgIHwgMTg4ICsrKysr KysrKy0tLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2dlbS5jICAg ICAgIHwgIDE0ICstCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfbW4uYyAgICAg ICAgfCAgMzQgKysrLQogZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X21uLmggICAg ICAgIHwgICA3ICstCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdHRtLmMgICAg ICAgfCAxNjAgKysrKysrLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRn cHVfdHRtLmggICAgICAgfCAgIDQgKy0KIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdw dV92bS5jICAgICAgICB8ICAgMSAtCiAxMSBmaWxlcyBjaGFuZ2VkLCAyMDYgaW5zZXJ0aW9ucygr KSwgMjg5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2FtZGdwdV9hbWRrZmQuaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9h bWRrZmQuaAppbmRleCBiY2Y1ODdiNGJhOTguLmI0OTJkZDllNTQxYSAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2FtZGtmZC5oCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9hbWRrZmQuaApAQCAtNjIsNyArNjIsNiBAQCBzdHJ1Y3Qg a2dkX21lbSB7CiAKIAlhdG9taWNfdCBpbnZhbGlkOwogCXN0cnVjdCBhbWRrZmRfcHJvY2Vzc19p bmZvICpwcm9jZXNzX2luZm87Ci0Jc3RydWN0IHBhZ2UgKip1c2VyX3BhZ2VzOwogCiAJc3RydWN0 IGFtZGdwdV9zeW5jIHN5bmM7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2FtZGdwdV9hbWRrZmRfZ3B1dm0uYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2Ft ZGdwdV9hbWRrZmRfZ3B1dm0uYwppbmRleCBiMjllZjA4OGZhMTQuLjc1ODMzYjQwNTA3YiAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2FtZGtmZF9ncHV2bS5j CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9hbWRrZmRfZ3B1dm0uYwpA QCAtNTgwLDI4ICs1ODAsMTIgQEAgc3RhdGljIGludCBpbml0X3VzZXJfcGFnZXMoc3RydWN0IGtn ZF9tZW0gKm1lbSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJCWdvdG8gb3V0OwogCX0KIAotCS8q IElmIG5vIHJlc3RvcmUgd29ya2VyIGlzIHJ1bm5pbmcgY29uY3VycmVudGx5LCB1c2VyX3BhZ2Vz Ci0JICogc2hvdWxkIG5vdCBiZSBhbGxvY2F0ZWQKLQkgKi8KLQlXQVJOKG1lbS0+dXNlcl9wYWdl cywgIkxlYWtpbmcgdXNlcl9wYWdlcyBhcnJheSIpOwotCi0JbWVtLT51c2VyX3BhZ2VzID0ga3Zt YWxsb2NfYXJyYXkoYm8tPnRiby50dG0tPm51bV9wYWdlcywKLQkJCQkJICAgc2l6ZW9mKHN0cnVj dCBwYWdlICopLAotCQkJCQkgICBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7Ci0JaWYgKCFtZW0t PnVzZXJfcGFnZXMpIHsKLQkJcHJfZXJyKCIlczogRmFpbGVkIHRvIGFsbG9jYXRlIHBhZ2VzIGFy cmF5XG4iLCBfX2Z1bmNfXyk7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gdW5yZWdpc3Rlcl9v dXQ7Ci0JfQotCi0JcmV0ID0gYW1kZ3B1X3R0bV90dF9nZXRfdXNlcl9wYWdlcyhiby0+dGJvLnR0 bSwgbWVtLT51c2VyX3BhZ2VzKTsKKwlyZXQgPSBhbWRncHVfdHRtX3R0X2dldF91c2VyX3BhZ2Vz KGJvLT50Ym8udHRtLCBiby0+dGJvLnR0bS0+cGFnZXMpOwogCWlmIChyZXQpIHsKIAkJcHJfZXJy KCIlczogRmFpbGVkIHRvIGdldCB1c2VyIHBhZ2VzOiAlZFxuIiwgX19mdW5jX18sIHJldCk7Ci0J CWdvdG8gZnJlZV9vdXQ7CisJCWdvdG8gdW5yZWdpc3Rlcl9vdXQ7CiAJfQogCi0JYW1kZ3B1X3R0 bV90dF9zZXRfdXNlcl9wYWdlcyhiby0+dGJvLnR0bSwgbWVtLT51c2VyX3BhZ2VzKTsKLQogCXJl dCA9IGFtZGdwdV9ib19yZXNlcnZlKGJvLCB0cnVlKTsKIAlpZiAocmV0KSB7CiAJCXByX2Vycigi JXM6IEZhaWxlZCB0byByZXNlcnZlIEJPXG4iLCBfX2Z1bmNfXyk7CkBAIC02MTQsMTEgKzU5OCw3 IEBAIHN0YXRpYyBpbnQgaW5pdF91c2VyX3BhZ2VzKHN0cnVjdCBrZ2RfbWVtICptZW0sIHN0cnVj dCBtbV9zdHJ1Y3QgKm1tLAogCWFtZGdwdV9ib191bnJlc2VydmUoYm8pOwogCiByZWxlYXNlX291 dDoKLQlpZiAocmV0KQotCQlyZWxlYXNlX3BhZ2VzKG1lbS0+dXNlcl9wYWdlcywgYm8tPnRiby50 dG0tPm51bV9wYWdlcyk7Ci1mcmVlX291dDoKLQlrdmZyZWUobWVtLT51c2VyX3BhZ2VzKTsKLQlt ZW0tPnVzZXJfcGFnZXMgPSBOVUxMOworCWFtZGdwdV90dG1fdHRfZ2V0X3VzZXJfcGFnZXNfZG9u ZShiby0+dGJvLnR0bSk7CiB1bnJlZ2lzdGVyX291dDoKIAlpZiAocmV0KQogCQlhbWRncHVfbW5f dW5yZWdpc3Rlcihibyk7CkBAIC02NzcsNyArNjU3LDYgQEAgc3RhdGljIGludCByZXNlcnZlX2Jv X2FuZF92bShzdHJ1Y3Qga2dkX21lbSAqbWVtLAogCWN0eC0+a2ZkX2JvLnByaW9yaXR5ID0gMDsK IAljdHgtPmtmZF9iby50di5ibyA9ICZiby0+dGJvOwogCWN0eC0+a2ZkX2JvLnR2Lm51bV9zaGFy ZWQgPSAxOwotCWN0eC0+a2ZkX2JvLnVzZXJfcGFnZXMgPSBOVUxMOwogCWxpc3RfYWRkKCZjdHgt PmtmZF9iby50di5oZWFkLCAmY3R4LT5saXN0KTsKIAogCWFtZGdwdV92bV9nZXRfcGRfYm8odm0s ICZjdHgtPmxpc3QsICZjdHgtPnZtX3BkWzBdKTsKQEAgLTc0MSw3ICs3MjAsNiBAQCBzdGF0aWMg aW50IHJlc2VydmVfYm9fYW5kX2NvbmRfdm1zKHN0cnVjdCBrZ2RfbWVtICptZW0sCiAJY3R4LT5r ZmRfYm8ucHJpb3JpdHkgPSAwOwogCWN0eC0+a2ZkX2JvLnR2LmJvID0gJmJvLT50Ym87CiAJY3R4 LT5rZmRfYm8udHYubnVtX3NoYXJlZCA9IDE7Ci0JY3R4LT5rZmRfYm8udXNlcl9wYWdlcyA9IE5V TEw7CiAJbGlzdF9hZGQoJmN0eC0+a2ZkX2JvLnR2LmhlYWQsICZjdHgtPmxpc3QpOwogCiAJaSA9 IDA7CkBAIC0xMzI5LDE1ICsxMzA3LDYgQEAgaW50IGFtZGdwdV9hbWRrZmRfZ3B1dm1fZnJlZV9t ZW1vcnlfb2ZfZ3B1KAogCWxpc3RfZGVsKCZib19saXN0X2VudHJ5LT5oZWFkKTsKIAltdXRleF91 bmxvY2soJnByb2Nlc3NfaW5mby0+bG9jayk7CiAKLQkvKiBGcmVlIHVzZXIgcGFnZXMgaWYgbmVj ZXNzYXJ5ICovCi0JaWYgKG1lbS0+dXNlcl9wYWdlcykgewotCQlwcl9kZWJ1ZygiJXM6IEZyZWVp bmcgdXNlcl9wYWdlcyBhcnJheVxuIiwgX19mdW5jX18pOwotCQlpZiAobWVtLT51c2VyX3BhZ2Vz WzBdKQotCQkJcmVsZWFzZV9wYWdlcyhtZW0tPnVzZXJfcGFnZXMsCi0JCQkJCW1lbS0+Ym8tPnRi by50dG0tPm51bV9wYWdlcyk7Ci0JCWt2ZnJlZShtZW0tPnVzZXJfcGFnZXMpOwotCX0KLQogCXJl dCA9IHJlc2VydmVfYm9fYW5kX2NvbmRfdm1zKG1lbSwgTlVMTCwgQk9fVk1fQUxMLCAmY3R4KTsK IAlpZiAodW5saWtlbHkocmV0KSkKIAkJcmV0dXJuIHJldDsKQEAgLTE3NTEsMjUgKzE3MjAsMTEg QEAgc3RhdGljIGludCB1cGRhdGVfaW52YWxpZF91c2VyX3BhZ2VzKHN0cnVjdCBhbWRrZmRfcHJv Y2Vzc19pbmZvICpwcm9jZXNzX2luZm8sCiAKIAkJYm8gPSBtZW0tPmJvOwogCi0JCWlmICghbWVt LT51c2VyX3BhZ2VzKSB7Ci0JCQltZW0tPnVzZXJfcGFnZXMgPQotCQkJCWt2bWFsbG9jX2FycmF5 KGJvLT50Ym8udHRtLT5udW1fcGFnZXMsCi0JCQkJCQkgc2l6ZW9mKHN0cnVjdCBwYWdlICopLAot CQkJCQkJIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTsKLQkJCWlmICghbWVtLT51c2VyX3BhZ2Vz KSB7Ci0JCQkJcHJfZXJyKCIlczogRmFpbGVkIHRvIGFsbG9jYXRlIHBhZ2VzIGFycmF5XG4iLAot CQkJCSAgICAgICBfX2Z1bmNfXyk7Ci0JCQkJcmV0dXJuIC1FTk9NRU07Ci0JCQl9Ci0JCX0gZWxz ZSBpZiAobWVtLT51c2VyX3BhZ2VzWzBdKSB7Ci0JCQlyZWxlYXNlX3BhZ2VzKG1lbS0+dXNlcl9w YWdlcywgYm8tPnRiby50dG0tPm51bV9wYWdlcyk7Ci0JCX0KLQogCQkvKiBHZXQgdXBkYXRlZCB1 c2VyIHBhZ2VzICovCiAJCXJldCA9IGFtZGdwdV90dG1fdHRfZ2V0X3VzZXJfcGFnZXMoYm8tPnRi by50dG0sCi0JCQkJCQkgICBtZW0tPnVzZXJfcGFnZXMpOworCQkJCQkJICAgYm8tPnRiby50dG0t PnBhZ2VzKTsKIAkJaWYgKHJldCkgewotCQkJbWVtLT51c2VyX3BhZ2VzWzBdID0gTlVMTDsKKwkJ CWJvLT50Ym8udHRtLT5wYWdlc1swXSA9IE5VTEw7CiAJCQlwcl9pbmZvKCIlczogRmFpbGVkIHRv IGdldCB1c2VyIHBhZ2VzOiAlZFxuIiwKIAkJCQlfX2Z1bmNfXywgcmV0KTsKIAkJCS8qIFByZXRl bmQgaXQgc3VjY2VlZGVkLiBJdCB3aWxsIGZhaWwgbGF0ZXIKQEAgLTE3NzgsMTIgKzE3MzMsNiBA QCBzdGF0aWMgaW50IHVwZGF0ZV9pbnZhbGlkX3VzZXJfcGFnZXMoc3RydWN0IGFtZGtmZF9wcm9j ZXNzX2luZm8gKnByb2Nlc3NfaW5mbywKIAkJCSAqIHN0YWxsZWQgdXNlciBtb2RlIHF1ZXVlcy4K IAkJCSAqLwogCQl9Ci0KLQkJLyogTWFyayB0aGUgQk8gYXMgdmFsaWQgdW5sZXNzIGl0IHdhcyBp bnZhbGlkYXRlZAotCQkgKiBhZ2FpbiBjb25jdXJyZW50bHkKLQkJICovCi0JCWlmIChhdG9taWNf Y21weGNoZygmbWVtLT5pbnZhbGlkLCBpbnZhbGlkLCAwKSAhPSBpbnZhbGlkKQotCQkJcmV0dXJu IC1FQUdBSU47CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0xODYzLDEwICsxODEyLDggQEAgc3RhdGlj IGludCB2YWxpZGF0ZV9pbnZhbGlkX3VzZXJfcGFnZXMoc3RydWN0IGFtZGtmZF9wcm9jZXNzX2lu Zm8gKnByb2Nlc3NfaW5mbykKIAogCQlibyA9IG1lbS0+Ym87CiAKLQkJLyogQ29weSBwYWdlcyBh cnJheSBhbmQgdmFsaWRhdGUgdGhlIEJPIGlmIHdlIGdvdCB1c2VyIHBhZ2VzICovCi0JCWlmICht ZW0tPnVzZXJfcGFnZXNbMF0pIHsKLQkJCWFtZGdwdV90dG1fdHRfc2V0X3VzZXJfcGFnZXMoYm8t PnRiby50dG0sCi0JCQkJCQkgICAgIG1lbS0+dXNlcl9wYWdlcyk7CisJCS8qIFZhbGlkYXRlIHRo ZSBCTyBpZiB3ZSBnb3QgdXNlciBwYWdlcyAqLworCQlpZiAoYm8tPnRiby50dG0tPnBhZ2VzWzBd KSB7CiAJCQlhbWRncHVfYm9fcGxhY2VtZW50X2Zyb21fZG9tYWluKGJvLCBtZW0tPmRvbWFpbik7 CiAJCQlyZXQgPSB0dG1fYm9fdmFsaWRhdGUoJmJvLT50Ym8sICZiby0+cGxhY2VtZW50LCAmY3R4 KTsKIAkJCWlmIChyZXQpIHsKQEAgLTE4NzUsMTYgKzE4MjIsMTYgQEAgc3RhdGljIGludCB2YWxp ZGF0ZV9pbnZhbGlkX3VzZXJfcGFnZXMoc3RydWN0IGFtZGtmZF9wcm9jZXNzX2luZm8gKnByb2Nl c3NfaW5mbykKIAkJCX0KIAkJfQogCi0JCS8qIFZhbGlkYXRlIHN1Y2NlZWRlZCwgbm93IHRoZSBC TyBvd25zIHRoZSBwYWdlcywgZnJlZQotCQkgKiBvdXIgY29weSBvZiB0aGUgcG9pbnRlciBhcnJh eS4gUHV0IHRoaXMgQk8gYmFjayBvbgotCQkgKiB0aGUgdXNlcnB0cl92YWxpZF9saXN0LiBJZiB3 ZSBuZWVkIHRvIHJldmFsaWRhdGUKLQkJICogaXQsIHdlIG5lZWQgdG8gc3RhcnQgZnJvbSBzY3Jh dGNoLgotCQkgKi8KLQkJa3ZmcmVlKG1lbS0+dXNlcl9wYWdlcyk7Ci0JCW1lbS0+dXNlcl9wYWdl cyA9IE5VTEw7CiAJCWxpc3RfbW92ZV90YWlsKCZtZW0tPnZhbGlkYXRlX2xpc3QuaGVhZCwKIAkJ CSAgICAgICAmcHJvY2Vzc19pbmZvLT51c2VycHRyX3ZhbGlkX2xpc3QpOwogCisJCS8qIFN0b3Ag SE1NIHRyYWNrIHRoZSB1c2VycHRyIHVwZGF0ZS4gV2UgZG9udCBjaGVjayB0aGUgcmV0dXJuCisJ CSAqIHZhbHVlIGZvciBjb25jdXJyZW50IENQVSBwYWdlIHRhYmxlIHVwZGF0ZSBiZWNhdXNlIHdl IHdpbGwKKwkJICogcmVzY2hlZHVsZSB0aGUgcmVzdG9yZSB3b3JrZXIgaWYgcHJvY2Vzc19pbmZv LT5ldmljdGVkX2JvcworCQkgKiBpcyB1cGRhdGVkLgorCQkgKi8KKwkJYW1kZ3B1X3R0bV90dF9n ZXRfdXNlcl9wYWdlc19kb25lKGJvLT50Ym8udHRtKTsKKwogCQkvKiBVcGRhdGUgbWFwcGluZy4g SWYgdGhlIEJPIHdhcyBub3QgdmFsaWRhdGVkCiAJCSAqIChiZWNhdXNlIHdlIGNvdWxkbid0IGdl dCB1c2VyIHBhZ2VzKSwgdGhpcyB3aWxsCiAJCSAqIGNsZWFyIHRoZSBwYWdlIHRhYmxlIGVudHJp ZXMsIHdoaWNoIHdpbGwgcmVzdWx0IGluCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1k L2FtZGdwdS9hbWRncHVfYm9fbGlzdC5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1k Z3B1X2JvX2xpc3QuYwppbmRleCA1Yzc5ZGE4ZTExNTAuLjM4NDIxODM5NzBjYyAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2JvX2xpc3QuYworKysgYi9kcml2 ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfYm9fbGlzdC5jCkBAIC0yMDAsOCArMjAwLDYg QEAgdm9pZCBhbWRncHVfYm9fbGlzdF9nZXRfbGlzdChzdHJ1Y3QgYW1kZ3B1X2JvX2xpc3QgKmxp c3QsCiAKIAkJaWYgKCFiby0+cGFyZW50KQogCQkJbGlzdF9hZGRfdGFpbCgmZS0+dHYuaGVhZCwg JmJ1Y2tldFtwcmlvcml0eV0pOwotCi0JCWUtPnVzZXJfcGFnZXMgPSBOVUxMOwogCX0KIAogCS8q IENvbm5lY3QgdGhlIHNvcnRlZCBidWNrZXRzIGluIHRoZSBvdXRwdXQgbGlzdC4gKi8KZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9ib19saXN0LmggYi9kcml2 ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfYm9fbGlzdC5oCmluZGV4IDdjNWY1ZDE2MDFl Ni4uNGJlYWIyZGUwOWIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9h bWRncHVfYm9fbGlzdC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9i b19saXN0LmgKQEAgLTM1LDggKzM1LDcgQEAgc3RydWN0IGFtZGdwdV9ib19saXN0X2VudHJ5IHsK IAlzdHJ1Y3QgdHRtX3ZhbGlkYXRlX2J1ZmZlcgl0djsKIAlzdHJ1Y3QgYW1kZ3B1X2JvX3ZhCQkq Ym9fdmE7CiAJdWludDMyX3QJCQlwcmlvcml0eTsKLQlzdHJ1Y3QgcGFnZQkJCSoqdXNlcl9wYWdl czsKLQlpbnQJCQkJdXNlcl9pbnZhbGlkYXRlZDsKKwlib29sCQkJCXVzZXJfaW52YWxpZGF0ZWQ7 CiB9OwogCiBzdHJ1Y3QgYW1kZ3B1X2JvX2xpc3QgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2NzLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9h bWRncHVfY3MuYwppbmRleCAxNDliMzA2NTExOWIuLjRhMzQ2NjMwMGVmYyAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2NzLmMKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2NzLmMKQEAgLTUyLDcgKzUyLDYgQEAgc3RhdGljIGludCBh bWRncHVfY3NfdXNlcl9mZW5jZV9jaHVuayhzdHJ1Y3QgYW1kZ3B1X2NzX3BhcnNlciAqcCwKIAlw LT51Zl9lbnRyeS50di5ibyA9ICZiby0+dGJvOwogCS8qIE9uZSBmb3IgVFRNIGFuZCBvbmUgZm9y IHRoZSBDUyBqb2IgKi8KIAlwLT51Zl9lbnRyeS50di5udW1fc2hhcmVkID0gMjsKLQlwLT51Zl9l bnRyeS51c2VyX3BhZ2VzID0gTlVMTDsKIAogCWRybV9nZW1fb2JqZWN0X3B1dF91bmxvY2tlZChn b2JqKTsKIApAQCAtNTMyLDI0ICs1MzEsMTkgQEAgc3RhdGljIGludCBhbWRncHVfY3NfbGlzdF92 YWxpZGF0ZShzdHJ1Y3QgYW1kZ3B1X2NzX3BhcnNlciAqcCwKIAogCWxpc3RfZm9yX2VhY2hfZW50 cnkobG9iaiwgdmFsaWRhdGVkLCB0di5oZWFkKSB7CiAJCXN0cnVjdCBhbWRncHVfYm8gKmJvID0g dHRtX3RvX2FtZGdwdV9ibyhsb2JqLT50di5ibyk7Ci0JCWJvb2wgYmluZGluZ191c2VycHRyID0g ZmFsc2U7CiAJCXN0cnVjdCBtbV9zdHJ1Y3QgKnVzZXJtbTsKIAogCQl1c2VybW0gPSBhbWRncHVf dHRtX3R0X2dldF91c2VybW0oYm8tPnRiby50dG0pOwogCQlpZiAodXNlcm1tICYmIHVzZXJtbSAh PSBjdXJyZW50LT5tbSkKIAkJCXJldHVybiAtRVBFUk07CiAKLQkJLyogQ2hlY2sgaWYgd2UgaGF2 ZSB1c2VyIHBhZ2VzIGFuZCBub2JvZHkgYm91bmQgdGhlIEJPIGFscmVhZHkgKi8KLQkJaWYgKGFt ZGdwdV90dG1fdHRfdXNlcnB0cl9uZWVkc19wYWdlcyhiby0+dGJvLnR0bSkgJiYKLQkJICAgIGxv YmotPnVzZXJfcGFnZXMpIHsKKwkJaWYgKGFtZGdwdV90dG1fdHRfaXNfdXNlcnB0cihiby0+dGJv LnR0bSkgJiYKKwkJICAgIGxvYmotPnVzZXJfaW52YWxpZGF0ZWQpIHsKIAkJCWFtZGdwdV9ib19w bGFjZW1lbnRfZnJvbV9kb21haW4oYm8sCiAJCQkJCQkJQU1ER1BVX0dFTV9ET01BSU5fQ1BVKTsK IAkJCXIgPSB0dG1fYm9fdmFsaWRhdGUoJmJvLT50Ym8sICZiby0+cGxhY2VtZW50LCAmY3R4KTsK IAkJCWlmIChyKQogCQkJCXJldHVybiByOwotCQkJYW1kZ3B1X3R0bV90dF9zZXRfdXNlcl9wYWdl cyhiby0+dGJvLnR0bSwKLQkJCQkJCSAgICAgbG9iai0+dXNlcl9wYWdlcyk7Ci0JCQliaW5kaW5n X3VzZXJwdHIgPSB0cnVlOwogCQl9CiAKIAkJaWYgKHAtPmV2aWN0YWJsZSA9PSBsb2JqKQpAQCAt NTU4LDExICs1NTIsNiBAQCBzdGF0aWMgaW50IGFtZGdwdV9jc19saXN0X3ZhbGlkYXRlKHN0cnVj dCBhbWRncHVfY3NfcGFyc2VyICpwLAogCQlyID0gYW1kZ3B1X2NzX3ZhbGlkYXRlKHAsIGJvKTsK IAkJaWYgKHIpCiAJCQlyZXR1cm4gcjsKLQotCQlpZiAoYmluZGluZ191c2VycHRyKSB7Ci0JCQlr dmZyZWUobG9iai0+dXNlcl9wYWdlcyk7Ci0JCQlsb2JqLT51c2VyX3BhZ2VzID0gTlVMTDsKLQkJ fQogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTU3Nyw3ICs1NjYsNyBAQCBzdGF0aWMgaW50IGFtZGdw dV9jc19wYXJzZXJfYm9zKHN0cnVjdCBhbWRncHVfY3NfcGFyc2VyICpwLAogCXN0cnVjdCBhbWRn cHVfYm8gKmdkczsKIAlzdHJ1Y3QgYW1kZ3B1X2JvICpnd3M7CiAJc3RydWN0IGFtZGdwdV9ibyAq b2E7Ci0JdW5zaWduZWQgdHJpZXMgPSAxMDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHVzZXJwYWdlX2xp c3Q7CiAJaW50IHI7CiAKIAlJTklUX0xJU1RfSEVBRCgmcC0+dmFsaWRhdGVkKTsKQEAgLTU4Niw3 ICs1NzUsNiBAQCBzdGF0aWMgaW50IGFtZGdwdV9jc19wYXJzZXJfYm9zKHN0cnVjdCBhbWRncHVf Y3NfcGFyc2VyICpwLAogCWlmIChjcy0+aW4uYm9fbGlzdF9oYW5kbGUpIHsKIAkJaWYgKHAtPmJv X2xpc3QpCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQogCQlyID0gYW1kZ3B1X2JvX2xpc3RfZ2V0KGZw cml2LCBjcy0+aW4uYm9fbGlzdF9oYW5kbGUsCiAJCQkJICAgICAgICZwLT5ib19saXN0KTsKIAkJ aWYgKHIpCkBAIC02MDUsNyArNTkzLDggQEAgc3RhdGljIGludCBhbWRncHVfY3NfcGFyc2VyX2Jv cyhzdHJ1Y3QgYW1kZ3B1X2NzX3BhcnNlciAqcCwKIAogCWFtZGdwdV9ib19saXN0X2dldF9saXN0 KHAtPmJvX2xpc3QsICZwLT52YWxpZGF0ZWQpOwogCWlmIChwLT5ib19saXN0LT5maXJzdF91c2Vy cHRyICE9IHAtPmJvX2xpc3QtPm51bV9lbnRyaWVzKQotCQlwLT5tbiA9IGFtZGdwdV9tbl9nZXQo cC0+YWRldiwgQU1ER1BVX01OX1RZUEVfR0ZYKTsKKwkJcC0+bW4gPSBhbWRncHVfbW5fZ2V0KGN1 cnJlbnQtPm1tLCBwLT5hZGV2LAorCQkJCQlBTURHUFVfTU5fVFlQRV9HRlgpOwogCiAJSU5JVF9M SVNUX0hFQUQoJmR1cGxpY2F0ZXMpOwogCWFtZGdwdV92bV9nZXRfcGRfYm8oJmZwcml2LT52bSwg JnAtPnZhbGlkYXRlZCwgJnAtPnZtX3BkKTsKQEAgLTYxMyw3OSArNjAyLDcyIEBAIHN0YXRpYyBp bnQgYW1kZ3B1X2NzX3BhcnNlcl9ib3Moc3RydWN0IGFtZGdwdV9jc19wYXJzZXIgKnAsCiAJaWYg KHAtPnVmX2VudHJ5LnR2LmJvICYmICF0dG1fdG9fYW1kZ3B1X2JvKHAtPnVmX2VudHJ5LnR2LmJv KS0+cGFyZW50KQogCQlsaXN0X2FkZCgmcC0+dWZfZW50cnkudHYuaGVhZCwgJnAtPnZhbGlkYXRl ZCk7CiAKLQl3aGlsZSAoMSkgewotCQlzdHJ1Y3QgbGlzdF9oZWFkIG5lZWRfcGFnZXM7CisJciA9 IHR0bV9ldV9yZXNlcnZlX2J1ZmZlcnMoJnAtPnRpY2tldCwgJnAtPnZhbGlkYXRlZCwgdHJ1ZSwK KwkJCQkgICAmZHVwbGljYXRlcyk7CisJaWYgKHVubGlrZWx5KHIgIT0gMCkpIHsKKwkJaWYgKHIg IT0gLUVSRVNUQVJUU1lTKQorCQkJRFJNX0VSUk9SKCJ0dG1fZXVfcmVzZXJ2ZV9idWZmZXJzIGZh aWxlZC5cbiIpOworCQlnb3RvIG91dDsKKwl9CiAKLQkJciA9IHR0bV9ldV9yZXNlcnZlX2J1ZmZl cnMoJnAtPnRpY2tldCwgJnAtPnZhbGlkYXRlZCwgdHJ1ZSwKLQkJCQkJICAgJmR1cGxpY2F0ZXMp OwotCQlpZiAodW5saWtlbHkociAhPSAwKSkgewotCQkJaWYgKHIgIT0gLUVSRVNUQVJUU1lTKQot CQkJCURSTV9FUlJPUigidHRtX2V1X3Jlc2VydmVfYnVmZmVycyBmYWlsZWQuXG4iKTsKLQkJCWdv dG8gZXJyb3JfZnJlZV9wYWdlczsKLQkJfQorCUlOSVRfTElTVF9IRUFEKCZ1c2VycGFnZV9saXN0 KTsKKwlhbWRncHVfYm9fbGlzdF9mb3JfZWFjaF91c2VycHRyX2VudHJ5KGUsIHAtPmJvX2xpc3Qp IHsKKwkJc3RydWN0IGFtZGdwdV9ibyAqYm8gPSB0dG1fdG9fYW1kZ3B1X2JvKGUtPnR2LmJvKTsK IAotCQlJTklUX0xJU1RfSEVBRCgmbmVlZF9wYWdlcyk7Ci0JCWFtZGdwdV9ib19saXN0X2Zvcl9l YWNoX3VzZXJwdHJfZW50cnkoZSwgcC0+Ym9fbGlzdCkgewotCQkJc3RydWN0IGFtZGdwdV9ibyAq Ym8gPSB0dG1fdG9fYW1kZ3B1X2JvKGUtPnR2LmJvKTsKKwkJbGlzdF9kZWwoJmUtPnR2LmhlYWQp OworCQlsaXN0X2FkZCgmZS0+dHYuaGVhZCwgJnVzZXJwYWdlX2xpc3QpOworCQlhbWRncHVfYm9f dW5yZXNlcnZlKGJvKTsKKwl9CiAKLQkJCWlmIChhbWRncHVfdHRtX3R0X3VzZXJwdHJfaW52YWxp ZGF0ZWQoYm8tPnRiby50dG0sCi0JCQkJICZlLT51c2VyX2ludmFsaWRhdGVkKSAmJiBlLT51c2Vy X3BhZ2VzKSB7CisJLyogR2V0IHVzZXJwdHIgYmFja2luZyBwYWdlcy4gSWYgcGFnZXMgYXJlIHVw ZGF0ZWQgYWZ0ZXIgcmVnaXN0ZXJlZAorCSAqIGluIGFtZGdwdV9nZW1fdXNlcnB0cl9pb2N0bCgp LCBhbWRncHVfY3NfbGlzdF92YWxpZGF0ZSgpIHdpbGwgZG8KKwkgKiBhbWRncHVfdHRtX2JhY2tl bmRfYmluZCgpIHRvIGZsdXNoIGFuZCBpbnZhbGlkYXRlIG5ldyBwYWdlcworCSAqLworCWlmICgh bGlzdF9lbXB0eSgmdXNlcnBhZ2VfbGlzdCkpIHsKKwkJLyogVW5yZXNlcnZlIGV2ZXJ5dGhpbmcg YWdhaW4sIHRvIGF2b2lkIGNpcmN1bGFyIGxvY2tpbmcgY2FzZQorCQkgKiBibzo6cmVzZXJ2ZSAt PiBtbWFwLT5zZW0KKwkJICovCisJCXR0bV9ldV9iYWNrb2ZmX3Jlc2VydmF0aW9uKCZwLT50aWNr ZXQsICZwLT52YWxpZGF0ZWQpOwogCi0JCQkJLyogV2UgYWNxdWlyZWQgYSBwYWdlIGFycmF5LCBi dXQgc29tZWJvZHkKLQkJCQkgKiBpbnZhbGlkYXRlZCBpdC4gRnJlZSBpdCBhbmQgdHJ5IGFnYWlu Ci0JCQkJICovCi0JCQkJcmVsZWFzZV9wYWdlcyhlLT51c2VyX3BhZ2VzLAotCQkJCQkgICAgICBi by0+dGJvLnR0bS0+bnVtX3BhZ2VzKTsKLQkJCQlrdmZyZWUoZS0+dXNlcl9wYWdlcyk7Ci0JCQkJ ZS0+dXNlcl9wYWdlcyA9IE5VTEw7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZSwgJnVzZXJwYWdl X2xpc3QsIHR2LmhlYWQpIHsKKwkJCXN0cnVjdCBhbWRncHVfYm8gKmJvID0gdHRtX3RvX2FtZGdw dV9ibyhlLT50di5ibyk7CisJCQlib29sIHVzZXJwYWdlX2ludmFsaWRhdGVkID0gZmFsc2U7CisJ CQlzdHJ1Y3QgcGFnZSAqKnBhZ2VzOworCQkJaW50IGk7CisKKwkJCXBhZ2VzID0ga3ZtYWxsb2Nf YXJyYXkoYm8tPnRiby50dG0tPm51bV9wYWdlcywKKwkJCQkJCXNpemVvZigqcGFnZXMpLAorCQkJ CQkJR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pOworCQkJaWYgKCFwYWdlcykgeworCQkJCURSTV9F UlJPUigiY2FsbG9jIGZhaWx1cmVcbiIpOworCQkJCXJldHVybiAtRU5PTUVNOwogCQkJfQogCi0J CQlpZiAoYW1kZ3B1X3R0bV90dF91c2VycHRyX25lZWRzX3BhZ2VzKGJvLT50Ym8udHRtKSAmJgot CQkJICAgICFlLT51c2VyX3BhZ2VzKSB7Ci0JCQkJbGlzdF9kZWwoJmUtPnR2LmhlYWQpOwotCQkJ CWxpc3RfYWRkKCZlLT50di5oZWFkLCAmbmVlZF9wYWdlcyk7Ci0KLQkJCQlhbWRncHVfYm9fdW5y ZXNlcnZlKGJvKTsKKwkJCXIgPSBhbWRncHVfdHRtX3R0X2dldF91c2VyX3BhZ2VzKGJvLT50Ym8u dHRtLCBwYWdlcyk7CisJCQlpZiAocikgeworCQkJCWt2ZnJlZShwYWdlcyk7CisJCQkJcmV0dXJu IHI7CiAJCQl9Ci0JCX0KIAotCQlpZiAobGlzdF9lbXB0eSgmbmVlZF9wYWdlcykpCi0JCQlicmVh azsKLQotCQkvKiBVbnJlc2VydmUgZXZlcnl0aGluZyBhZ2Fpbi4gKi8KLQkJdHRtX2V1X2JhY2tv ZmZfcmVzZXJ2YXRpb24oJnAtPnRpY2tldCwgJnAtPnZhbGlkYXRlZCk7Ci0KLQkJLyogV2UgdHJp ZWQgdG9vIG1hbnkgdGltZXMsIGp1c3QgYWJvcnQgKi8KLQkJaWYgKCEtLXRyaWVzKSB7Ci0JCQly ID0gLUVERUFETEs7Ci0JCQlEUk1fRVJST1IoImRlYWRsb2NrIGluICVzXG4iLCBfX2Z1bmNfXyk7 Ci0JCQlnb3RvIGVycm9yX2ZyZWVfcGFnZXM7CisJCQlmb3IgKGkgPSAwOyBpIDwgYm8tPnRiby50 dG0tPm51bV9wYWdlczsgaSsrKSB7CisJCQkJaWYgKGJvLT50Ym8udHRtLT5wYWdlc1tpXSAhPSBw YWdlc1tpXSkgeworCQkJCQliby0+dGJvLnR0bS0+cGFnZXNbaV0gPSBwYWdlc1tpXTsKKwkJCQkJ dXNlcnBhZ2VfaW52YWxpZGF0ZWQgPSB0cnVlOworCQkJCX0KKwkJCX0KKwkJCWUtPnVzZXJfaW52 YWxpZGF0ZWQgPSB1c2VycGFnZV9pbnZhbGlkYXRlZDsKKwkJCWt2ZnJlZShwYWdlcyk7CiAJCX0K IAotCQkvKiBGaWxsIHRoZSBwYWdlIGFycmF5cyBmb3IgYWxsIHVzZXJwdHJzLiAqLwotCQlsaXN0 X2Zvcl9lYWNoX2VudHJ5KGUsICZuZWVkX3BhZ2VzLCB0di5oZWFkKSB7Ci0JCQlzdHJ1Y3QgdHRt X3R0ICp0dG0gPSBlLT50di5iby0+dHRtOwotCi0JCQllLT51c2VyX3BhZ2VzID0ga3ZtYWxsb2Nf YXJyYXkodHRtLT5udW1fcGFnZXMsCi0JCQkJCQkJIHNpemVvZihzdHJ1Y3QgcGFnZSopLAotCQkJ CQkJCSBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7Ci0JCQlpZiAoIWUtPnVzZXJfcGFnZXMpIHsK LQkJCQlyID0gLUVOT01FTTsKLQkJCQlEUk1fRVJST1IoImNhbGxvYyBmYWlsdXJlIGluICVzXG4i LCBfX2Z1bmNfXyk7Ci0JCQkJZ290byBlcnJvcl9mcmVlX3BhZ2VzOwotCQkJfQorCQlsaXN0X3Nw bGljZSgmdXNlcnBhZ2VfbGlzdCwgJnAtPnZhbGlkYXRlZCk7CiAKLQkJCXIgPSBhbWRncHVfdHRt X3R0X2dldF91c2VyX3BhZ2VzKHR0bSwgZS0+dXNlcl9wYWdlcyk7Ci0JCQlpZiAocikgewotCQkJ CURSTV9FUlJPUigiYW1kZ3B1X3R0bV90dF9nZXRfdXNlcl9wYWdlcyBmYWlsZWQuXG4iKTsKLQkJ CQlrdmZyZWUoZS0+dXNlcl9wYWdlcyk7Ci0JCQkJZS0+dXNlcl9wYWdlcyA9IE5VTEw7Ci0JCQkJ Z290byBlcnJvcl9mcmVlX3BhZ2VzOwotCQkJfQorCQlyID0gdHRtX2V1X3Jlc2VydmVfYnVmZmVy cygmcC0+dGlja2V0LCAmcC0+dmFsaWRhdGVkLCB0cnVlLAorCQkJCQkgICAmZHVwbGljYXRlcyk7 CisJCWlmICh1bmxpa2VseShyICE9IDApKSB7CisJCQlpZiAociAhPSAtRVJFU1RBUlRTWVMpCisJ CQkJRFJNX0VSUk9SKCJ0dG1fZXVfcmVzZXJ2ZV9idWZmZXJzIGZhaWxlZC5cbiIpOworCQkJZ290 byBvdXQ7CiAJCX0KLQotCQkvKiBBbmQgdHJ5IGFnYWluLiAqLwotCQlsaXN0X3NwbGljZSgmbmVl ZF9wYWdlcywgJnAtPnZhbGlkYXRlZCk7CiAJfQogCiAJYW1kZ3B1X2NzX2dldF90aHJlc2hvbGRf Zm9yX21vdmVzKHAtPmFkZXYsICZwLT5ieXRlc19tb3ZlZF90aHJlc2hvbGQsCkBAIC03NTQsMTcg KzczNiw3IEBAIHN0YXRpYyBpbnQgYW1kZ3B1X2NzX3BhcnNlcl9ib3Moc3RydWN0IGFtZGdwdV9j c19wYXJzZXIgKnAsCiBlcnJvcl92YWxpZGF0ZToKIAlpZiAocikKIAkJdHRtX2V1X2JhY2tvZmZf cmVzZXJ2YXRpb24oJnAtPnRpY2tldCwgJnAtPnZhbGlkYXRlZCk7Ci0KLWVycm9yX2ZyZWVfcGFn ZXM6Ci0KLQlhbWRncHVfYm9fbGlzdF9mb3JfZWFjaF91c2VycHRyX2VudHJ5KGUsIHAtPmJvX2xp c3QpIHsKLQkJaWYgKCFlLT51c2VyX3BhZ2VzKQotCQkJY29udGludWU7Ci0KLQkJcmVsZWFzZV9w YWdlcyhlLT51c2VyX3BhZ2VzLCBlLT50di5iby0+dHRtLT5udW1fcGFnZXMpOwotCQlrdmZyZWUo ZS0+dXNlcl9wYWdlcyk7Ci0JfQotCitvdXQ6CiAJcmV0dXJuIHI7CiB9CiAKQEAgLTEyMTMsOCAr MTE4NSw3IEBAIHN0YXRpYyBpbnQgYW1kZ3B1X2NzX3N1Ym1pdChzdHJ1Y3QgYW1kZ3B1X2NzX3Bh cnNlciAqcCwKIAlzdHJ1Y3QgYW1kZ3B1X2JvX2xpc3RfZW50cnkgKmU7CiAJc3RydWN0IGFtZGdw dV9qb2IgKmpvYjsKIAl1aW50NjRfdCBzZXE7Ci0KLQlpbnQgcjsKKwlpbnQgciA9IDA7CiAKIAlq b2IgPSBwLT5qb2I7CiAJcC0+am9iID0gTlVMTDsKQEAgLTEyMjMsMTUgKzExOTQsMjEgQEAgc3Rh dGljIGludCBhbWRncHVfY3Nfc3VibWl0KHN0cnVjdCBhbWRncHVfY3NfcGFyc2VyICpwLAogCWlm IChyKQogCQlnb3RvIGVycm9yX3VubG9jazsKIAotCS8qIE5vIG1lbW9yeSBhbGxvY2F0aW9uIGlz IGFsbG93ZWQgd2hpbGUgaG9sZGluZyB0aGUgbW4gbG9jayAqLworCS8qIE5vIG1lbW9yeSBhbGxv Y2F0aW9uIGlzIGFsbG93ZWQgd2hpbGUgaG9sZGluZyB0aGUgbW4gbG9jay4KKwkgKiBwLT5tbiBp cyBob2xkIHVudGlsIGFtZGdwdV9jc19zdWJtaXQgaXMgZmluaXNoZWQgYW5kIGZlbmNlIGlzIGFk ZGVkCisJICogdG8gQk9zLgorCSAqLwogCWFtZGdwdV9tbl9sb2NrKHAtPm1uKTsKKworCS8qIElm IHVzZXJwdHIgYXJlIHVwZGF0ZWQgYWZ0ZXIgYW1kZ3B1X2NzX3BhcnNlcl9ib3MoKSwgcmVzdGFy dCBjcyAqLwogCWFtZGdwdV9ib19saXN0X2Zvcl9lYWNoX3VzZXJwdHJfZW50cnkoZSwgcC0+Ym9f bGlzdCkgewogCQlzdHJ1Y3QgYW1kZ3B1X2JvICpibyA9IHR0bV90b19hbWRncHVfYm8oZS0+dHYu Ym8pOwogCi0JCWlmIChhbWRncHVfdHRtX3R0X3VzZXJwdHJfbmVlZHNfcGFnZXMoYm8tPnRiby50 dG0pKSB7Ci0JCQlyID0gLUVSRVNUQVJUU1lTOwotCQkJZ290byBlcnJvcl9hYm9ydDsKLQkJfQor CQlyIHw9IGFtZGdwdV90dG1fdHRfZ2V0X3VzZXJfcGFnZXNfZG9uZShiby0+dGJvLnR0bSk7CisJ fQorCWlmIChyKSB7CisJCXIgPSAtRVJFU1RBUlRTWVM7CisJCWdvdG8gZXJyb3JfYWJvcnQ7CiAJ fQogCiAJam9iLT5vd25lciA9IHAtPmZpbHA7CkBAIC0xMjc4LDE0ICsxMjU1LDIwIEBAIHN0YXRp YyBpbnQgYW1kZ3B1X2NzX3N1Ym1pdChzdHJ1Y3QgYW1kZ3B1X2NzX3BhcnNlciAqcCwKIGludCBh bWRncHVfY3NfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0 IGRybV9maWxlICpmaWxwKQogewogCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gZGV2LT5k ZXZfcHJpdmF0ZTsKLQl1bmlvbiBkcm1fYW1kZ3B1X2NzICpjcyA9IGRhdGE7Ci0Jc3RydWN0IGFt ZGdwdV9jc19wYXJzZXIgcGFyc2VyID0ge307Ci0JYm9vbCByZXNlcnZlZF9idWZmZXJzID0gZmFs c2U7CisJdW5pb24gZHJtX2FtZGdwdV9jcyAqY3M7CisJc3RydWN0IGFtZGdwdV9jc19wYXJzZXIg cGFyc2VyOworCWJvb2wgcmVzZXJ2ZWRfYnVmZmVyczsKKwlpbnQgdHJpZXMgPSAxMDsKIAlpbnQg aSwgcjsKIAogCWlmICghYWRldi0+YWNjZWxfd29ya2luZykKIAkJcmV0dXJuIC1FQlVTWTsKIAor cmVzdGFydDoKKwltZW1zZXQoJnBhcnNlciwgMCwgc2l6ZW9mKHBhcnNlcikpOworCWNzID0gZGF0 YTsKKwlyZXNlcnZlZF9idWZmZXJzID0gZmFsc2U7CisKIAlwYXJzZXIuYWRldiA9IGFkZXY7CiAJ cGFyc2VyLmZpbHAgPSBmaWxwOwogCkBAIC0xMzI3LDYgKzEzMTAsMTUgQEAgaW50IGFtZGdwdV9j c19pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2Zp bGUgKmZpbHApCiAKIG91dDoKIAlhbWRncHVfY3NfcGFyc2VyX2ZpbmkoJnBhcnNlciwgciwgcmVz ZXJ2ZWRfYnVmZmVycyk7CisKKwlpZiAociA9PSAtRVJFU1RBUlRTWVMpIHsKKwkJaWYgKCEtLXRy aWVzKSB7CisJCQlEUk1fRVJST1IoIlBvc3NpYmxlIGRlYWRsb2NrPyBSZXRyeSB0b28gbWFueSB0 aW1lc1xuIik7CisJCQlyZXR1cm4gLUVERUFETEs7CisJCX0KKwkJZ290byByZXN0YXJ0OworCX0K KwogCXJldHVybiByOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdw dS9hbWRncHVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZ2VtLmMK aW5kZXggZjRmMDAyMTc1NDZlLi45MjAyNTk5M2JmYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9nZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGdwdS9hbWRncHVfZ2VtLmMKQEAgLTMzNiwyNiArMzM2LDI0IEBAIGludCBhbWRncHVfZ2VtX3Vz ZXJwdHJfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAogCQlyID0g YW1kZ3B1X2JvX3Jlc2VydmUoYm8sIHRydWUpOwogCQlpZiAocikKLQkJCWdvdG8gZnJlZV9wYWdl czsKKwkJCWdvdG8gdXNlcl9wYWdlc19kb25lOwogCiAJCWFtZGdwdV9ib19wbGFjZW1lbnRfZnJv bV9kb21haW4oYm8sIEFNREdQVV9HRU1fRE9NQUlOX0dUVCk7CiAJCXIgPSB0dG1fYm9fdmFsaWRh dGUoJmJvLT50Ym8sICZiby0+cGxhY2VtZW50LCAmY3R4KTsKIAkJYW1kZ3B1X2JvX3VucmVzZXJ2 ZShibyk7CiAJCWlmIChyKQotCQkJZ290byBmcmVlX3BhZ2VzOworCQkJZ290byB1c2VyX3BhZ2Vz X2RvbmU7CiAJfQogCiAJciA9IGRybV9nZW1faGFuZGxlX2NyZWF0ZShmaWxwLCBnb2JqLCAmaGFu ZGxlKTsKLQkvKiBkcm9wIHJlZmVyZW5jZSBmcm9tIGFsbG9jYXRlIC0gaGFuZGxlIGhvbGRzIGl0 IG5vdyAqLwotCWRybV9nZW1fb2JqZWN0X3B1dF91bmxvY2tlZChnb2JqKTsKIAlpZiAocikKLQkJ cmV0dXJuIHI7CisJCWdvdG8gdXNlcl9wYWdlc19kb25lOwogCiAJYXJncy0+aGFuZGxlID0gaGFu ZGxlOwotCXJldHVybiAwOwogCi1mcmVlX3BhZ2VzOgotCXJlbGVhc2VfcGFnZXMoYm8tPnRiby50 dG0tPnBhZ2VzLCBiby0+dGJvLnR0bS0+bnVtX3BhZ2VzKTsKK3VzZXJfcGFnZXNfZG9uZToKKwlp ZiAoYXJncy0+ZmxhZ3MgJiBBTURHUFVfR0VNX1VTRVJQVFJfVkFMSURBVEUpCisJCWFtZGdwdV90 dG1fdHRfZ2V0X3VzZXJfcGFnZXNfZG9uZShiby0+dGJvLnR0bSk7CiAKIHJlbGVhc2Vfb2JqZWN0 OgogCWRybV9nZW1fb2JqZWN0X3B1dF91bmxvY2tlZChnb2JqKTsKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9tbi5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9h bWRncHUvYW1kZ3B1X21uLmMKaW5kZXggNWQ1MThkMmJiOWJlLi5jODAwMmVlMWQ0MTUgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9tbi5jCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9tbi5jCkBAIC0yMjksOCArMjI5LDYgQEAgc3Rh dGljIHZvaWQgYW1kZ3B1X21uX2ludmFsaWRhdGVfbm9kZShzdHJ1Y3QgYW1kZ3B1X21uX25vZGUg Km5vZGUsCiAJCQl0cnVlLCBmYWxzZSwgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOwogCQlpZiAociA8 PSAwKQogCQkJRFJNX0VSUk9SKCIoJWxkKSBmYWlsZWQgdG8gd2FpdCBmb3IgdXNlciBib1xuIiwg cik7Ci0KLQkJYW1kZ3B1X3R0bV90dF9tYXJrX3VzZXJfcGFnZXMoYm8tPnRiby50dG0pOwogCX0K IH0KIApAQCAtMzUzLDE1ICszNTEsMTYgQEAgc3RhdGljIHN0cnVjdCBobW1fbWlycm9yX29wcyBh bWRncHVfaG1tX21pcnJvcl9vcHNbXSA9IHsKIC8qKgogICogYW1kZ3B1X21uX2dldCAtIGNyZWF0 ZSBITU0gbWlycm9yIGNvbnRleHQKICAqCisgKiBAbW06IHRoZSBtbSBzdHJ1Y3QKICAqIEBhZGV2 OiBhbWRncHUgZGV2aWNlIHBvaW50ZXIKICAqIEB0eXBlOiB0eXBlIG9mIE1NVSBub3RpZmllciBj b250ZXh0CiAgKgotICogQ3JlYXRlcyBhIEhNTSBtaXJyb3IgY29udGV4dCBmb3IgY3VycmVudC0+ bW0uCisgKiBDcmVhdGVzIGEgSE1NIG1pcnJvciBjb250ZXh0IGZvciBtbS4KICAqLwotc3RydWN0 IGFtZGdwdV9tbiAqYW1kZ3B1X21uX2dldChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKK3N0 cnVjdCBhbWRncHVfbW4gKmFtZGdwdV9tbl9nZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCQkJ c3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCiAJCQkJZW51bSBhbWRncHVfbW5fdHlwZSB0eXBl KQogewotCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+bW07CiAJc3RydWN0IGFtZGdw dV9tbiAqYW1uOwogCXVuc2lnbmVkIGxvbmcga2V5ID0gQU1ER1BVX01OX0tFWShtbSwgdHlwZSk7 CiAJaW50IHI7CkBAIC00MzEsNyArNDMwLDcgQEAgaW50IGFtZGdwdV9tbl9yZWdpc3RlcihzdHJ1 Y3QgYW1kZ3B1X2JvICpibywgdW5zaWduZWQgbG9uZyBhZGRyKQogCXN0cnVjdCBsaXN0X2hlYWQg Ym9zOwogCXN0cnVjdCBpbnRlcnZhbF90cmVlX25vZGUgKml0OwogCi0JYW1uID0gYW1kZ3B1X21u X2dldChhZGV2LCB0eXBlKTsKKwlhbW4gPSBhbWRncHVfbW5fZ2V0KGN1cnJlbnQtPm1tLCBhZGV2 LCB0eXBlKTsKIAlpZiAoSVNfRVJSKGFtbikpCiAJCXJldHVybiBQVFJfRVJSKGFtbik7CiAKQEAg LTUxMywzICs1MTIsMjYgQEAgdm9pZCBhbWRncHVfbW5fdW5yZWdpc3RlcihzdHJ1Y3QgYW1kZ3B1 X2JvICpibykKIAltdXRleF91bmxvY2soJmFkZXYtPm1uX2xvY2spOwogfQogCisvKiBmbGFncyB1 c2VkIGJ5IEhNTSBpbnRlcm5hbCwgbm90IHJlbGF0ZWQgdG8gQ1BVL0dQVSBQVEUgZmxhZ3MgKi8K K3N0YXRpYyBjb25zdCB1aW50NjRfdCBobW1fcmFuZ2VfZmxhZ3NbSE1NX1BGTl9GTEFHX01BWF0g PSB7CisJCSgxIDw8IDApLCAvKiBITU1fUEZOX1ZBTElEICovCisJCSgxIDw8IDEpLCAvKiBITU1f UEZOX1dSSVRFICovCisJCTAgLyogSE1NX1BGTl9ERVZJQ0VfUFJJVkFURSAqLworfTsKKworc3Rh dGljIGNvbnN0IHVpbnQ2NF90IGhtbV9yYW5nZV92YWx1ZXNbSE1NX1BGTl9WQUxVRV9NQVhdID0g eworCQkweGZmZmZmZmZmZmZmZmZmZmVVTCwgLyogSE1NX1BGTl9FUlJPUiAqLworCQkwLCAvKiBI TU1fUEZOX05PTkUgKi8KKwkJMHhmZmZmZmZmZmZmZmZmZmZjVUwgLyogSE1NX1BGTl9TUEVDSUFM ICovCit9OworCit2b2lkIGFtZGdwdV9obW1faW5pdF9yYW5nZShzdHJ1Y3QgaG1tX3JhbmdlICpy YW5nZSkKK3sKKwlpZiAocmFuZ2UpIHsKKwkJcmFuZ2UtPmZsYWdzID0gaG1tX3JhbmdlX2ZsYWdz OworCQlyYW5nZS0+dmFsdWVzID0gaG1tX3JhbmdlX3ZhbHVlczsKKwkJcmFuZ2UtPnBmbl9zaGlm dCA9IFBBR0VfU0hJRlQ7CisJCXJhbmdlLT5wZm5zID0gTlVMTDsKKwkJSU5JVF9MSVNUX0hFQUQo JnJhbmdlLT5saXN0KTsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGdwdS9hbWRncHVfbW4uaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9tbi5o CmluZGV4IDBhNTFmZDAwMDIxYy4uNGM1ZTg2ODQ3YTNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dw dS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfbW4uaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGdwdS9hbWRncHVfbW4uaApAQCAtMjUsOSArMjUsMTAgQEAKICNkZWZpbmUgX19BTURHUFVfTU5f SF9fCiAKIC8qCi0gKiBNTVUgTm90aWZpZXIKKyAqIEhNTSBtaXJyb3IKICAqLwogc3RydWN0IGFt ZGdwdV9tbjsKK3N0cnVjdCBobW1fcmFuZ2U7CiAKIGVudW0gYW1kZ3B1X21uX3R5cGUgewogCUFN REdQVV9NTl9UWVBFX0dGWCwKQEAgLTM3LDEwICszOCwxMiBAQCBlbnVtIGFtZGdwdV9tbl90eXBl IHsKICNpZiBkZWZpbmVkKENPTkZJR19ITU1fTUlSUk9SKQogdm9pZCBhbWRncHVfbW5fbG9jayhz dHJ1Y3QgYW1kZ3B1X21uICptbik7CiB2b2lkIGFtZGdwdV9tbl91bmxvY2soc3RydWN0IGFtZGdw dV9tbiAqbW4pOwotc3RydWN0IGFtZGdwdV9tbiAqYW1kZ3B1X21uX2dldChzdHJ1Y3QgYW1kZ3B1 X2RldmljZSAqYWRldiwKK3N0cnVjdCBhbWRncHVfbW4gKmFtZGdwdV9tbl9nZXQoc3RydWN0IG1t X3N0cnVjdCAqbW0sCisJCQkJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCiAJCQkJZW51bSBh bWRncHVfbW5fdHlwZSB0eXBlKTsKIGludCBhbWRncHVfbW5fcmVnaXN0ZXIoc3RydWN0IGFtZGdw dV9ibyAqYm8sIHVuc2lnbmVkIGxvbmcgYWRkcik7CiB2b2lkIGFtZGdwdV9tbl91bnJlZ2lzdGVy KHN0cnVjdCBhbWRncHVfYm8gKmJvKTsKK3ZvaWQgYW1kZ3B1X2htbV9pbml0X3JhbmdlKHN0cnVj dCBobW1fcmFuZ2UgKnJhbmdlKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgYW1kZ3B1X21u X2xvY2soc3RydWN0IGFtZGdwdV9tbiAqbW4pIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgYW1kZ3B1 X21uX3VubG9jayhzdHJ1Y3QgYW1kZ3B1X21uICptbikge30KZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV90dG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2FtZGdwdV90dG0uYwppbmRleCBjOTFlYzMxMDFkMDAuLjMzMDU3ZDYxMTRjNyAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3R0bS5jCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV90dG0uYwpAQCAtNDMsNiArNDMsNyBAQAogI2lu Y2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CiAjaW5j bHVkZSA8bGludXgvaW9tbXUuaD4KKyNpbmNsdWRlIDxsaW51eC9obW0uaD4KICNpbmNsdWRlICJh bWRncHUuaCIKICNpbmNsdWRlICJhbWRncHVfb2JqZWN0LmgiCiAjaW5jbHVkZSAiYW1kZ3B1X3Ry YWNlLmgiCkBAIC03MDUsMTEgKzcwNiw2IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGFtZGdwdV90 dG1faW9fbWVtX3BmbihzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvLAogLyoKICAqIFRUTSBi YWNrZW5kIGZ1bmN0aW9ucy4KICAqLwotc3RydWN0IGFtZGdwdV90dG1fZ3VwX3Rhc2tfbGlzdCB7 Ci0Jc3RydWN0IGxpc3RfaGVhZAlsaXN0OwotCXN0cnVjdCB0YXNrX3N0cnVjdAkqdGFzazsKLX07 Ci0KIHN0cnVjdCBhbWRncHVfdHRtX3R0IHsKIAlzdHJ1Y3QgdHRtX2RtYV90dAl0dG07CiAJdTY0 CQkJb2Zmc2V0OwpAQCAtNzE4LDEwNyArNzE0LDEwNSBAQCBzdHJ1Y3QgYW1kZ3B1X3R0bV90dCB7 CiAJdWludDMyX3QJCXVzZXJmbGFnczsKIAlzcGlubG9ja190ICAgICAgICAgICAgICBndXB0YXNr bG9jazsKIAlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICBndXB0YXNrczsKLQlhdG9taWNfdAkJbW11 X2ludmFsaWRhdGlvbnM7Ci0JdWludDMyX3QJCWxhc3Rfc2V0X3BhZ2VzOworCXN0cnVjdCBobW1f cmFuZ2UJcmFuZ2U7CiB9OwogCiAvKioKLSAqIGFtZGdwdV90dG1fdHRfZ2V0X3VzZXJfcGFnZXMg LSBQaW4gcGFnZXMgb2YgbWVtb3J5IHBvaW50ZWQgdG8gYnkgYSBVU0VSUFRSCi0gKiBwb2ludGVy IHRvIG1lbW9yeQorICogYW1kZ3B1X3R0bV90dF9nZXRfdXNlcl9wYWdlcyAtIGdldCBkZXZpY2Ug YWNjZXNzaWJsZSBwYWdlcyB0aGF0IGJhY2sgdXNlcgorICogbWVtb3J5IGFuZCBzdGFydCBITU0g dHJhY2tpbmcgQ1BVIHBhZ2UgdGFibGUgdXBkYXRlCiAgKgotICogQ2FsbGVkIGJ5IGFtZGdwdV9n ZW1fdXNlcnB0cl9pb2N0bCgpIGFuZCBhbWRncHVfY3NfcGFyc2VyX2JvcygpLgotICogVGhpcyBw cm92aWRlcyBhIHdyYXBwZXIgYXJvdW5kIHRoZSBnZXRfdXNlcl9wYWdlcygpIGNhbGwgdG8gcHJv dmlkZQotICogZGV2aWNlIGFjY2Vzc2libGUgcGFnZXMgdGhhdCBiYWNrIHVzZXIgbWVtb3J5Lgor ICogQ2FsbGluZyBmdW5jdGlvbiBtdXN0IGNhbGwgYW1kZ3B1X3R0bV90dF91c2VycHRyX3Jhbmdl X2RvbmUoKSBvbmNlIGFuZCBvbmx5CisgKiBvbmNlIGFmdGVyd2FyZHMgdG8gc3RvcCBITU0gdHJh Y2tpbmcKICAqLwogaW50IGFtZGdwdV90dG1fdHRfZ2V0X3VzZXJfcGFnZXMoc3RydWN0IHR0bV90 dCAqdHRtLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKQogewogCXN0cnVjdCBhbWRncHVfdHRtX3R0ICpn dHQgPSAodm9pZCAqKXR0bTsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGd0dC0+dXNlcnRhc2st Pm1tOwotCXVuc2lnbmVkIGludCBmbGFncyA9IDA7Ci0JdW5zaWduZWQgcGlubmVkID0gMDsKLQlp bnQgcjsKKwl1bnNpZ25lZCBsb25nIGVuZCA9IGd0dC0+dXNlcnB0ciArIHR0bS0+bnVtX3BhZ2Vz ICogUEFHRV9TSVpFOworCXN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlID0gJmd0dC0+cmFuZ2U7CisJ aW50IHIsIGk7CiAKIAlpZiAoIW1tKSAvKiBIYXBwZW5zIGR1cmluZyBwcm9jZXNzIHNodXRkb3du ICovCiAJCXJldHVybiAtRVNSQ0g7CiAKLQlpZiAoIShndHQtPnVzZXJmbGFncyAmIEFNREdQVV9H RU1fVVNFUlBUUl9SRUFET05MWSkpCi0JCWZsYWdzIHw9IEZPTExfV1JJVEU7CisJYW1kZ3B1X2ht bV9pbml0X3JhbmdlKHJhbmdlKTsKIAogCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKIAorCXJh bmdlLT52bWEgPSBmaW5kX3ZtYShtbSwgZ3R0LT51c2VycHRyKTsKIAlpZiAoZ3R0LT51c2VyZmxh Z3MgJiBBTURHUFVfR0VNX1VTRVJQVFJfQU5PTk9OTFkpIHsKIAkJLyoKIAkJICogY2hlY2sgdGhh dCB3ZSBvbmx5IHVzZSBhbm9ueW1vdXMgbWVtb3J5IHRvIHByZXZlbnQgcHJvYmxlbXMKIAkJICog d2l0aCB3cml0ZWJhY2sKIAkJICovCi0JCXVuc2lnbmVkIGxvbmcgZW5kID0gZ3R0LT51c2VycHRy ICsgdHRtLT5udW1fcGFnZXMgKiBQQUdFX1NJWkU7Ci0JCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAq dm1hOworCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHJhbmdlLT52bWE7CiAKLQkJdm1h ID0gZmluZF92bWEobW0sIGd0dC0+dXNlcnB0cik7Ci0JCWlmICghdm1hIHx8IHZtYS0+dm1fZmls ZSB8fCB2bWEtPnZtX2VuZCA8IGVuZCkgewotCQkJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKLQkJ CXJldHVybiAtRVBFUk07Ci0JCX0KKwkJaWYgKCF2bWEgfHwgdm1hLT52bV9maWxlIHx8IHZtYS0+ dm1fZW5kIDwgZW5kKQorCQkJcmFuZ2UtPnZtYSA9IE5VTEw7CiAJfQogCi0JLyogbG9vcCBlbm91 Z2ggdGltZXMgdXNpbmcgY29udGlndW91cyBwYWdlcyBvZiBtZW1vcnkgKi8KLQlkbyB7Ci0JCXVu c2lnbmVkIG51bV9wYWdlcyA9IHR0bS0+bnVtX3BhZ2VzIC0gcGlubmVkOwotCQl1aW50NjRfdCB1 c2VycHRyID0gZ3R0LT51c2VycHRyICsgcGlubmVkICogUEFHRV9TSVpFOwotCQlzdHJ1Y3QgcGFn ZSAqKnAgPSBwYWdlcyArIHBpbm5lZDsKLQkJc3RydWN0IGFtZGdwdV90dG1fZ3VwX3Rhc2tfbGlz dCBndXB0YXNrOwotCi0JCWd1cHRhc2sudGFzayA9IGN1cnJlbnQ7Ci0JCXNwaW5fbG9jaygmZ3R0 LT5ndXB0YXNrbG9jayk7Ci0JCWxpc3RfYWRkKCZndXB0YXNrLmxpc3QsICZndHQtPmd1cHRhc2tz KTsKLQkJc3Bpbl91bmxvY2soJmd0dC0+Z3VwdGFza2xvY2spOworCWlmICghcmFuZ2UtPnZtYSkg eworCQlyID0gLUVQRVJNOworCQlnb3RvIG91dDsKKwl9CiAKLQkJaWYgKG1tID09IGN1cnJlbnQt Pm1tKQotCQkJciA9IGdldF91c2VyX3BhZ2VzKHVzZXJwdHIsIG51bV9wYWdlcywgZmxhZ3MsIHAs IE5VTEwpOwotCQllbHNlCi0JCQlyID0gZ2V0X3VzZXJfcGFnZXNfcmVtb3RlKGd0dC0+dXNlcnRh c2ssCi0JCQkJCW1tLCB1c2VycHRyLCBudW1fcGFnZXMsCi0JCQkJCWZsYWdzLCBwLCBOVUxMLCBO VUxMKTsKKwlyYW5nZS0+cGZucyA9IGt2bWFsbG9jX2FycmF5KHR0bS0+bnVtX3BhZ2VzLCBzaXpl b2YodWludDY0X3QpLAorCQkJCSAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKHJhbmdlLT5wZm5zID09 IE5VTEwpIHsKKwkJciA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKwlyYW5nZS0+c3RhcnQg PSBndHQtPnVzZXJwdHI7CisJcmFuZ2UtPmVuZCA9IGVuZDsKIAotCQlzcGluX2xvY2soJmd0dC0+ Z3VwdGFza2xvY2spOwotCQlsaXN0X2RlbCgmZ3VwdGFzay5saXN0KTsKLQkJc3Bpbl91bmxvY2so Jmd0dC0+Z3VwdGFza2xvY2spOworCWZvciAoaSA9IDA7IGkgPCB0dG0tPm51bV9wYWdlczsgaSsr KSB7CisJCXJhbmdlLT5wZm5zW2ldID0gcmFuZ2UtPmZsYWdzW0hNTV9QRk5fVkFMSURdOworCQly YW5nZS0+cGZuc1tpXSB8PSBhbWRncHVfdHRtX3R0X2lzX3JlYWRvbmx5KHR0bSkgPworCQkJCQkw IDogcmFuZ2UtPmZsYWdzW0hNTV9QRk5fV1JJVEVdOworCX0KIAotCQlpZiAociA8IDApCi0JCQln b3RvIHJlbGVhc2VfcGFnZXM7CisJLyogVGhpcyBtYXkgdHJpZ2dlciBwYWdlIHRhYmxlIHVwZGF0 ZSAqLworCXIgPSBobW1fdm1hX2ZhdWx0KHJhbmdlLCB0cnVlKTsKKwlpZiAocikKKwkJZ290byBv dXRfZnJlZV9wZm5zOwogCi0JCXBpbm5lZCArPSByOworCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7 CiAKLQl9IHdoaWxlIChwaW5uZWQgPCB0dG0tPm51bV9wYWdlcyk7CisJZm9yIChpID0gMDsgaSA8 IHR0bS0+bnVtX3BhZ2VzOyBpKyspCisJCXBhZ2VzW2ldID0gaG1tX3Bmbl90b19wYWdlKHJhbmdl LCByYW5nZS0+cGZuc1tpXSk7CiAKLQl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwogCXJldHVybiAw OwogCi1yZWxlYXNlX3BhZ2VzOgotCXJlbGVhc2VfcGFnZXMocGFnZXMsIHBpbm5lZCk7CitvdXRf ZnJlZV9wZm5zOgorCWt2ZnJlZShyYW5nZS0+cGZucyk7CisJcmFuZ2UtPnBmbnMgPSBOVUxMOwor b3V0OgogCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CiAJcmV0dXJuIHI7CiB9CiAKIC8qKgotICog YW1kZ3B1X3R0bV90dF9zZXRfdXNlcl9wYWdlcyAtIENvcHkgcGFnZXMgaW4sIHB1dHRpbmcgb2xk IHBhZ2VzIGFzIG5lY2Vzc2FyeS4KKyAqIGFtZGdwdV90dG1fdHRfdXNlcnB0cl9yYW5nZV9kb25l IC0gc3RvcCBITU0gdHJhY2sgdGhlIENQVSBwYWdlIHRhYmxlIGNoYW5nZQorICogQ2hlY2sgaWYg dGhlIHBhZ2VzIGJhY2tpbmcgdGhpcyB0dG0gcmFuZ2UgaGF2ZSBiZWVuIGludmFsaWRhdGVkCiAg KgotICogQ2FsbGVkIGJ5IGFtZGdwdV9jc19saXN0X3ZhbGlkYXRlKCkuIFRoaXMgY3JlYXRlcyB0 aGUgcGFnZSBsaXN0Ci0gKiB0aGF0IGJhY2tzIHVzZXIgbWVtb3J5IGFuZCB3aWxsIHVsdGltYXRl bHkgYmUgbWFwcGVkIGludG8gdGhlIGRldmljZQotICogYWRkcmVzcyBzcGFjZS4KKyAqIFJldHVy bnM6IHRydWUgaWYgcGFnZXMgYXJlIGludmFsaWRhdGVkIHNpbmNlIHRoZSBsYXN0IHRpbWUgdGhl eSd2ZSBiZWVuIHNldAogICovCi12b2lkIGFtZGdwdV90dG1fdHRfc2V0X3VzZXJfcGFnZXMoc3Ry dWN0IHR0bV90dCAqdHRtLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKQorYm9vbCBhbWRncHVfdHRtX3R0 X2dldF91c2VyX3BhZ2VzX2RvbmUoc3RydWN0IHR0bV90dCAqdHRtKQogewogCXN0cnVjdCBhbWRn cHVfdHRtX3R0ICpndHQgPSAodm9pZCAqKXR0bTsKLQl1bnNpZ25lZCBpOworCWJvb2wgcjsKIAot CWd0dC0+bGFzdF9zZXRfcGFnZXMgPSBhdG9taWNfcmVhZCgmZ3R0LT5tbXVfaW52YWxpZGF0aW9u cyk7Ci0JZm9yIChpID0gMDsgaSA8IHR0bS0+bnVtX3BhZ2VzOyArK2kpIHsKLQkJaWYgKHR0bS0+ cGFnZXNbaV0pCi0JCQlwdXRfcGFnZSh0dG0tPnBhZ2VzW2ldKTsKKwlpZiAoZ3R0ID09IE5VTEwg fHwgIWd0dC0+dXNlcnB0cikKKwkJcmV0dXJuIGZhbHNlOwogCi0JCXR0bS0+cGFnZXNbaV0gPSBw YWdlcyA/IHBhZ2VzW2ldIDogTlVMTDsKKwlyID0gaG1tX3ZtYV9yYW5nZV9kb25lKCZndHQtPnJh bmdlKTsKKworCWlmIChndHQtPnJhbmdlLnBmbnMpIHsKKwkJa3ZmcmVlKGd0dC0+cmFuZ2UucGZu cyk7CisJCWd0dC0+cmFuZ2UucGZucyA9IE5VTEw7CiAJfQorCisJcmV0dXJuICFyOwogfQogCiAv KioKQEAgLTkwMyw5ICs4OTcsNiBAQCBzdGF0aWMgdm9pZCBhbWRncHVfdHRtX3R0X3VucGluX3Vz ZXJwdHIoc3RydWN0IHR0bV90dCAqdHRtKQogCS8qIHVubWFwIHRoZSBwYWdlcyBtYXBwZWQgdG8g dGhlIGRldmljZSAqLwogCWRtYV91bm1hcF9zZyhhZGV2LT5kZXYsIHR0bS0+c2ctPnNnbCwgdHRt LT5zZy0+bmVudHMsIGRpcmVjdGlvbik7CiAKLQkvKiBtYXJrIHRoZSBwYWdlcyBhcyBkaXJ0eSAq LwotCWFtZGdwdV90dG1fdHRfbWFya191c2VyX3BhZ2VzKHR0bSk7Ci0KIAlzZ19mcmVlX3RhYmxl KHR0bS0+c2cpOwogfQogCkBAIC0xMjA3LDcgKzExOTgsNyBAQCBzdGF0aWMgdm9pZCBhbWRncHVf dHRtX3R0X3VucG9wdWxhdGUoc3RydWN0IHR0bV90dCAqdHRtKQogCWJvb2wgc2xhdmUgPSAhISh0 dG0tPnBhZ2VfZmxhZ3MgJiBUVE1fUEFHRV9GTEFHX1NHKTsKIAogCWlmIChndHQgJiYgZ3R0LT51 c2VycHRyKSB7Ci0JCWFtZGdwdV90dG1fdHRfc2V0X3VzZXJfcGFnZXModHRtLCBOVUxMKTsKKwkJ bWVtc2V0KHR0bS0+cGFnZXMsIDAsIHR0bS0+bnVtX3BhZ2VzICogc2l6ZW9mKHN0cnVjdCBwYWdl ICopKTsKIAkJa2ZyZWUodHRtLT5zZyk7CiAJCXR0bS0+cGFnZV9mbGFncyAmPSB+VFRNX1BBR0Vf RkxBR19TRzsKIAkJcmV0dXJuOwpAQCAtMTI1OCw4ICsxMjQ5LDYgQEAgaW50IGFtZGdwdV90dG1f dHRfc2V0X3VzZXJwdHIoc3RydWN0IHR0bV90dCAqdHRtLCB1aW50NjRfdCBhZGRyLAogCiAJc3Bp bl9sb2NrX2luaXQoJmd0dC0+Z3VwdGFza2xvY2spOwogCUlOSVRfTElTVF9IRUFEKCZndHQtPmd1 cHRhc2tzKTsKLQlhdG9taWNfc2V0KCZndHQtPm1tdV9pbnZhbGlkYXRpb25zLCAwKTsKLQlndHQt Pmxhc3Rfc2V0X3BhZ2VzID0gMDsKIAogCXJldHVybiAwOwogfQpAQCAtMTI4OSw3ICsxMjc4LDYg QEAgYm9vbCBhbWRncHVfdHRtX3R0X2FmZmVjdF91c2VycHRyKHN0cnVjdCB0dG1fdHQgKnR0bSwg dW5zaWduZWQgbG9uZyBzdGFydCwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgZW5kKQogewogCXN0cnVj dCBhbWRncHVfdHRtX3R0ICpndHQgPSAodm9pZCAqKXR0bTsKLQlzdHJ1Y3QgYW1kZ3B1X3R0bV9n dXBfdGFza19saXN0ICplbnRyeTsKIAl1bnNpZ25lZCBsb25nIHNpemU7CiAKIAlpZiAoZ3R0ID09 IE5VTEwgfHwgIWd0dC0+dXNlcnB0cikKQEAgLTEzMDIsNDggKzEyOTAsMjAgQEAgYm9vbCBhbWRn cHVfdHRtX3R0X2FmZmVjdF91c2VycHRyKHN0cnVjdCB0dG1fdHQgKnR0bSwgdW5zaWduZWQgbG9u ZyBzdGFydCwKIAlpZiAoZ3R0LT51c2VycHRyID4gZW5kIHx8IGd0dC0+dXNlcnB0ciArIHNpemUg PD0gc3RhcnQpCiAJCXJldHVybiBmYWxzZTsKIAotCS8qIFNlYXJjaCB0aGUgbGlzdHMgb2YgdGFz a3MgdGhhdCBob2xkIHRoaXMgbWFwcGluZyBhbmQgc2VlCi0JICogaWYgY3VycmVudCBpcyBvbmUg b2YgdGhlbS4gIElmIGl0IGlzIHJldHVybiBmYWxzZS4KLQkgKi8KLQlzcGluX2xvY2soJmd0dC0+ Z3VwdGFza2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZndHQtPmd1cHRhc2tz LCBsaXN0KSB7Ci0JCWlmIChlbnRyeS0+dGFzayA9PSBjdXJyZW50KSB7Ci0JCQlzcGluX3VubG9j aygmZ3R0LT5ndXB0YXNrbG9jayk7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQl9Ci0Jc3Bpbl91 bmxvY2soJmd0dC0+Z3VwdGFza2xvY2spOwotCi0JYXRvbWljX2luYygmZ3R0LT5tbXVfaW52YWxp ZGF0aW9ucyk7Ci0KIAlyZXR1cm4gdHJ1ZTsKIH0KIAogLyoqCi0gKiBhbWRncHVfdHRtX3R0X3Vz ZXJwdHJfaW52YWxpZGF0ZWQgLSBIYXMgdGhlIHR0bV90dCBvYmplY3QgYmVlbiBpbnZhbGlkYXRl ZD8KKyAqIGFtZGdwdV90dG1fdHRfaXNfdXNlcnB0ciAtIEhhdmUgdGhlIHBhZ2VzIGJhY2tpbmcg YnkgdXNlcnB0cj8KICAqLwotYm9vbCBhbWRncHVfdHRtX3R0X3VzZXJwdHJfaW52YWxpZGF0ZWQo c3RydWN0IHR0bV90dCAqdHRtLAotCQkJCSAgICAgICBpbnQgKmxhc3RfaW52YWxpZGF0ZWQpCi17 Ci0Jc3RydWN0IGFtZGdwdV90dG1fdHQgKmd0dCA9ICh2b2lkICopdHRtOwotCWludCBwcmV2X2lu dmFsaWRhdGVkID0gKmxhc3RfaW52YWxpZGF0ZWQ7Ci0KLQkqbGFzdF9pbnZhbGlkYXRlZCA9IGF0 b21pY19yZWFkKCZndHQtPm1tdV9pbnZhbGlkYXRpb25zKTsKLQlyZXR1cm4gcHJldl9pbnZhbGlk YXRlZCAhPSAqbGFzdF9pbnZhbGlkYXRlZDsKLX0KLQotLyoqCi0gKiBhbWRncHVfdHRtX3R0X3Vz ZXJwdHJfbmVlZHNfcGFnZXMgLSBIYXZlIHRoZSBwYWdlcyBiYWNraW5nIHRoaXMgdHRtX3R0IG9i amVjdAotICogYmVlbiBpbnZhbGlkYXRlZCBzaW5jZSB0aGUgbGFzdCB0aW1lIHRoZXkndmUgYmVl biBzZXQ/Ci0gKi8KLWJvb2wgYW1kZ3B1X3R0bV90dF91c2VycHRyX25lZWRzX3BhZ2VzKHN0cnVj dCB0dG1fdHQgKnR0bSkKK2Jvb2wgYW1kZ3B1X3R0bV90dF9pc191c2VycHRyKHN0cnVjdCB0dG1f dHQgKnR0bSkKIHsKIAlzdHJ1Y3QgYW1kZ3B1X3R0bV90dCAqZ3R0ID0gKHZvaWQgKil0dG07CiAK IAlpZiAoZ3R0ID09IE5VTEwgfHwgIWd0dC0+dXNlcnB0cikKIAkJcmV0dXJuIGZhbHNlOwogCi0J cmV0dXJuIGF0b21pY19yZWFkKCZndHQtPm1tdV9pbnZhbGlkYXRpb25zKSAhPSBndHQtPmxhc3Rf c2V0X3BhZ2VzOworCXJldHVybiB0cnVlOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV90dG0uaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2FtZGdwdV90dG0uaAppbmRleCBiNWIyZDEwMWY3ZGIuLmM1YTFlNzhhMDliMSAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3R0bS5oCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV90dG0uaApAQCAtMTAyLDcgKzEwMiw3IEBAIGlu dCBhbWRncHVfdHRtX2FsbG9jX2dhcnQoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibyk7CiBp bnQgYW1kZ3B1X3R0bV9yZWNvdmVyX2dhcnQoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICp0Ym8p OwogCiBpbnQgYW1kZ3B1X3R0bV90dF9nZXRfdXNlcl9wYWdlcyhzdHJ1Y3QgdHRtX3R0ICp0dG0s IHN0cnVjdCBwYWdlICoqcGFnZXMpOwotdm9pZCBhbWRncHVfdHRtX3R0X3NldF91c2VyX3BhZ2Vz KHN0cnVjdCB0dG1fdHQgKnR0bSwgc3RydWN0IHBhZ2UgKipwYWdlcyk7Citib29sIGFtZGdwdV90 dG1fdHRfZ2V0X3VzZXJfcGFnZXNfZG9uZShzdHJ1Y3QgdHRtX3R0ICp0dG0pOwogdm9pZCBhbWRn cHVfdHRtX3R0X21hcmtfdXNlcl9wYWdlcyhzdHJ1Y3QgdHRtX3R0ICp0dG0pOwogaW50IGFtZGdw dV90dG1fdHRfc2V0X3VzZXJwdHIoc3RydWN0IHR0bV90dCAqdHRtLCB1aW50NjRfdCBhZGRyLAog CQkJCSAgICAgdWludDMyX3QgZmxhZ3MpOwpAQCAtMTEyLDcgKzExMiw3IEBAIGJvb2wgYW1kZ3B1 X3R0bV90dF9hZmZlY3RfdXNlcnB0cihzdHJ1Y3QgdHRtX3R0ICp0dG0sIHVuc2lnbmVkIGxvbmcg c3RhcnQsCiAJCQkJICB1bnNpZ25lZCBsb25nIGVuZCk7CiBib29sIGFtZGdwdV90dG1fdHRfdXNl cnB0cl9pbnZhbGlkYXRlZChzdHJ1Y3QgdHRtX3R0ICp0dG0sCiAJCQkJICAgICAgIGludCAqbGFz dF9pbnZhbGlkYXRlZCk7Ci1ib29sIGFtZGdwdV90dG1fdHRfdXNlcnB0cl9uZWVkc19wYWdlcyhz dHJ1Y3QgdHRtX3R0ICp0dG0pOworYm9vbCBhbWRncHVfdHRtX3R0X2lzX3VzZXJwdHIoc3RydWN0 IHR0bV90dCAqdHRtKTsKIGJvb2wgYW1kZ3B1X3R0bV90dF9pc19yZWFkb25seShzdHJ1Y3QgdHRt X3R0ICp0dG0pOwogdWludDY0X3QgYW1kZ3B1X3R0bV90dF9wZGVfZmxhZ3Moc3RydWN0IHR0bV90 dCAqdHRtLCBzdHJ1Y3QgdHRtX21lbV9yZWcgKm1lbSk7CiB1aW50NjRfdCBhbWRncHVfdHRtX3R0 X3B0ZV9mbGFncyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwgc3RydWN0IHR0bV90dCAqdHRt LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3ZtLmMgYi9k cml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdm0uYwppbmRleCBmMDU5ZWMzMTRmMmIu LmFiOGZhODRiMjdhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1k Z3B1X3ZtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3ZtLmMKQEAg LTYxOSw3ICs2MTksNiBAQCB2b2lkIGFtZGdwdV92bV9nZXRfcGRfYm8oc3RydWN0IGFtZGdwdV92 bSAqdm0sCiAJZW50cnktPnR2LmJvID0gJnZtLT5yb290LmJhc2UuYm8tPnRibzsKIAkvKiBPbmUg Zm9yIHRoZSBWTSB1cGRhdGVzLCBvbmUgZm9yIFRUTSBhbmQgb25lIGZvciB0aGUgQ1Mgam9iICov CiAJZW50cnktPnR2Lm51bV9zaGFyZWQgPSAzOwotCWVudHJ5LT51c2VyX3BhZ2VzID0gTlVMTDsK IAlsaXN0X2FkZCgmZW50cnktPnR2LmhlYWQsIHZhbGlkYXRlZCk7CiB9CiAKLS0gCjIuMTcuMQoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KYW1kLWdmeCBt YWlsaW5nIGxpc3QKYW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4Cg==