From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jeykumar Sankaran Subject: [DPU PATCH v3 2/2] drm/msm: remove partial update support Date: Thu, 1 Mar 2018 16:52:35 -0800 Message-ID: <1519951955-27068-2-git-send-email-jsanka@codeaurora.org> References: <1519951955-27068-1-git-send-email-jsanka@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1519951955-27068-1-git-send-email-jsanka-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Cc: jeykumar-jfJNa2p1gH1BDgjK7y7TUQ@public.gmane.org, robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, nganji-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, hoegsberg-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org, seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, Jeykumar Sankaran List-Id: linux-arm-msm@vger.kernel.org SW1wbGVtZW50YXRpb24gb2YgcGFydGlhbCB1cGRhdGUgaW4gRFBVIERSTSBpcyBoZWF2aWx5CmRl cGVuZGVudCBvbiBjdXN0b20gcHJvcGVydGllcyBhbmQgZHNpIGhvb2tzLiBSZW1vdmluZyB0aGUK c3VwcG9ydCBmb3Igbm93LiBXZSBtYXkgbmVlZCB0byByZXZpc2l0IHRoZSBzdXBwb3J0IGluIHRo ZQpmdXR1cmUuCgpjaGFuZ2VzIHNpbmNlIHYxOgoJLSBnZXQgYXdheSB3aXRoIHVud2FudGVkIHBh cmFtZXRlciB2YWxpZGF0aW9uCgktIGNvZGUgc3R5bGUgZml4ZXMKCS0gcmVtb3ZlIGhlYWRlciBm aWxlIGRlZmluaXRpb25zIGZvciBwYXJ0aWFsIHVwZGF0ZQoKY2hhbmdlcyBzaW5jZSB2MjoKCS0g cmVtb3ZlIGNvbXBpbGF0aW9uIGZsYWcgZm9yIERQVV9BRDQuCgpTaWduZWQtb2ZmLWJ5OiBKZXlr dW1hciBTYW5rYXJhbiA8anNhbmthQGNvZGVhdXJvcmEub3JnPgotLS0KIGRyaXZlcnMvZ3B1L2Ry bS9tc20vZGlzcC9kcHUxL2RwdV9jb25uZWN0b3IuYyB8IDEzOSArLS0tLS0tCiBkcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29ubmVjdG9yLmggfCAgIDcgKy0KIGRyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmMgICAgICB8IDU0NCArLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuaCAgICAg IHwgIDE4IC0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmMgICB8 IDI3NyArKysrLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfa21z LmggICAgICAgfCAgIDggLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2ttc191 dGlscy5jIHwgIDQyIC0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcGxhbmUu YyAgICAgfCAgMTMgLQogZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmggICAgICAgICAgICAg ICAgIHwgIDU2IC0tLQogOSBmaWxlcyBjaGFuZ2VkLCA4NyBpbnNlcnRpb25zKCspLCAxMDE3IGRl bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2Rw dV9jb25uZWN0b3IuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jb25uZWN0 b3IuYwppbmRleCA1N2I4NjI3Li5jNWU2YzUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v bXNtL2Rpc3AvZHB1MS9kcHVfY29ubmVjdG9yLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9k aXNwL2RwdTEvZHB1X2Nvbm5lY3Rvci5jCkBAIC00MjQsOCArNDI0LDcgQEAgaW50IGRwdV9jb25u ZWN0b3JfcHJlX2tpY2tvZmYoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKIHsKIAlz dHJ1Y3QgZHB1X2Nvbm5lY3RvciAqY19jb25uOwogCXN0cnVjdCBkcHVfY29ubmVjdG9yX3N0YXRl ICpjX3N0YXRlOwotCXN0cnVjdCBtc21fZGlzcGxheV9raWNrb2ZmX3BhcmFtcyBwYXJhbXM7Ci0J aW50IGlkeCwgcmM7CisJaW50IGlkeCwgcmMgPSAwOwogCiAJaWYgKCFjb25uZWN0b3IpIHsKIAkJ RFBVX0VSUk9SKCJpbnZhbGlkIGFyZ3VtZW50XG4iKTsKQEAgLTQ2MiwxNSArNDYxLDggQEAgaW50 IGRwdV9jb25uZWN0b3JfcHJlX2tpY2tvZmYoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rv cikKIAkJfQogCX0KIAotCWlmICghY19jb25uLT5vcHMucHJlX2tpY2tvZmYpCi0JCXJldHVybiAw OwotCi0JcGFyYW1zLnJvaXMgPSAmY19zdGF0ZS0+cm9pczsKLQogCURQVV9FVlQzMl9WRVJCT1NF KGNvbm5lY3Rvci0+YmFzZS5pZCk7CiAKLQlyYyA9IGNfY29ubi0+b3BzLnByZV9raWNrb2ZmKGNv bm5lY3RvciwgY19jb25uLT5kaXNwbGF5LCAmcGFyYW1zKTsKLQogCXJldHVybiByYzsKIH0KIApA QCAtNjQ1LDEyMiArNjM3LDYgQEAgc3RhdGljIHZvaWQgZHB1X2Nvbm5lY3Rvcl9hdG9taWNfcmVz ZXQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKIAlyZXR1cm4gJmNfc3RhdGUtPmJh c2U7CiB9CiAKLXN0YXRpYyBpbnQgX2RwdV9jb25uZWN0b3Jfcm9pX3YxX2NoZWNrX3JvaSgKLQkJ c3RydWN0IGRwdV9jb25uZWN0b3IgKmNfY29ubiwKLQkJc3RydWN0IGRybV9jbGlwX3JlY3QgKnJv aV9jb25uLAotCQljb25zdCBzdHJ1Y3QgbXNtX3JvaV9jYXBzICpjYXBzKQotewotCWNvbnN0IHN0 cnVjdCBtc21fcm9pX2FsaWdubWVudCAqYWxpZ24gPSAmY2Fwcy0+YWxpZ247Ci0JaW50IHcgPSBy b2lfY29ubi0+eDIgLSByb2lfY29ubi0+eDE7Ci0JaW50IGggPSByb2lfY29ubi0+eTIgLSByb2lf Y29ubi0+eTE7Ci0KLQlpZiAodyA8PSAwIHx8IGggPD0gMCkgewotCQlEUFVfRVJST1JfQ09OTihj X2Nvbm4sICJpbnZhbGlkIGNvbm4gcm9pIHcgJWQgaCAlZFxuIiwgdywgaCk7Ci0JCXJldHVybiAt RUlOVkFMOwotCX0KLQotCWlmICh3IDwgYWxpZ24tPm1pbl93aWR0aCB8fCB3ICUgYWxpZ24tPndp ZHRoX3BpeF9hbGlnbikgewotCQlEUFVfRVJST1JfQ09OTihjX2Nvbm4sCi0JCQkJImludmFsaWQg Y29ubiByb2kgd2lkdGggJWQgbWluICVkIGFsaWduICVkXG4iLAotCQkJCXcsIGFsaWduLT5taW5f d2lkdGgsIGFsaWduLT53aWR0aF9waXhfYWxpZ24pOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0K LQlpZiAoaCA8IGFsaWduLT5taW5faGVpZ2h0IHx8IGggJSBhbGlnbi0+aGVpZ2h0X3BpeF9hbGln bikgewotCQlEUFVfRVJST1JfQ09OTihjX2Nvbm4sCi0JCQkJImludmFsaWQgY29ubiByb2kgaGVp Z2h0ICVkIG1pbiAlZCBhbGlnbiAlZFxuIiwKLQkJCQloLCBhbGlnbi0+bWluX2hlaWdodCwgYWxp Z24tPmhlaWdodF9waXhfYWxpZ24pOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAocm9p X2Nvbm4tPngxICUgYWxpZ24tPnhzdGFydF9waXhfYWxpZ24pIHsKLQkJRFBVX0VSUk9SX0NPTk4o Y19jb25uLCAiaW52YWxpZCBjb25uIHJvaSB4MSAlZCBhbGlnbiAlZFxuIiwKLQkJCQlyb2lfY29u bi0+eDEsIGFsaWduLT54c3RhcnRfcGl4X2FsaWduKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQot Ci0JaWYgKHJvaV9jb25uLT55MSAlIGFsaWduLT55c3RhcnRfcGl4X2FsaWduKSB7Ci0JCURQVV9F UlJPUl9DT05OKGNfY29ubiwgImludmFsaWQgY29ubiByb2kgeTEgJWQgYWxpZ24gJWRcbiIsCi0J CQkJcm9pX2Nvbm4tPnkxLCBhbGlnbi0+eXN0YXJ0X3BpeF9hbGlnbik7Ci0JCXJldHVybiAtRUlO VkFMOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IF9kcHVfY29ubmVjdG9yX3Nl dF9yb2lfdjEoCi0JCXN0cnVjdCBkcHVfY29ubmVjdG9yICpjX2Nvbm4sCi0JCXN0cnVjdCBkcHVf Y29ubmVjdG9yX3N0YXRlICpjX3N0YXRlLAotCQl2b2lkICp1c3JfcHRyKQotewotCXN0cnVjdCBk cHVfZHJtX3JvaV92MSByb2lfdjE7Ci0Jc3RydWN0IG1zbV9kaXNwbGF5X2luZm8gZGlzcGxheV9p bmZvOwotCXN0cnVjdCBtc21fcm9pX2NhcHMgKmNhcHM7Ci0JaW50IGksIHJjOwotCi0JaWYgKCFj X2Nvbm4gfHwgIWNfc3RhdGUpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGFyZ3NcbiIpOwotCQly ZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyYyA9IGRwdV9jb25uZWN0b3JfZ2V0X2luZm8oJmNfY29u bi0+YmFzZSwgJmRpc3BsYXlfaW5mbyk7Ci0JaWYgKHJjKSB7Ci0JCURQVV9FUlJPUl9DT05OKGNf Y29ubiwgImRpc3BsYXkgZ2V0IGluZm8gZXJyb3I6ICVkXG4iLCByYyk7Ci0JCXJldHVybiByYzsK LQl9Ci0KLQljYXBzID0gJmRpc3BsYXlfaW5mby5yb2lfY2FwczsKLQlpZiAoIWNhcHMtPmVuYWJs ZWQpIHsKLQkJRFBVX0VSUk9SX0NPTk4oY19jb25uLCAiZGlzcGxheSByb2kgY2FwYWJpbGl0eSBp cyBkaXNhYmxlZFxuIik7Ci0JCXJldHVybiAtRU5PVFNVUFA7Ci0JfQotCi0JbWVtc2V0KCZjX3N0 YXRlLT5yb2lzLCAwLCBzaXplb2YoY19zdGF0ZS0+cm9pcykpOwotCi0JaWYgKCF1c3JfcHRyKSB7 Ci0JCURQVV9ERUJVR19DT05OKGNfY29ubiwgInJvaXMgY2xlYXJlZFxuIik7Ci0JCXJldHVybiAw OwotCX0KLQotCWlmIChjb3B5X2Zyb21fdXNlcigmcm9pX3YxLCB1c3JfcHRyLCBzaXplb2Yocm9p X3YxKSkpIHsKLQkJRFBVX0VSUk9SX0NPTk4oY19jb25uLCAiZmFpbGVkIHRvIGNvcHkgcm9pX3Yx IGRhdGFcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlEUFVfREVCVUdfQ09OTihjX2Nv bm4sICJudW1fcmVjdHMgJWRcbiIsIHJvaV92MS5udW1fcmVjdHMpOwotCi0JaWYgKHJvaV92MS5u dW1fcmVjdHMgPT0gMCkgewotCQlEUFVfREVCVUdfQ09OTihjX2Nvbm4sICJyb2lzIGNsZWFyZWRc biIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAocm9pX3YxLm51bV9yZWN0cyA+IERQVV9NQVhf Uk9JX1YxIHx8Ci0JCQlyb2lfdjEubnVtX3JlY3RzID4gY2Fwcy0+bnVtX3JvaSkgewotCQlEUFVf RVJST1JfQ09OTihjX2Nvbm4sICJ0b28gbWFueSByZWN0cyBzcGVjaWZpZWQ6ICVkXG4iLAotCQkJ CXJvaV92MS5udW1fcmVjdHMpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQljX3N0YXRlLT5y b2lzLm51bV9yZWN0cyA9IHJvaV92MS5udW1fcmVjdHM7Ci0JZm9yIChpID0gMDsgaSA8IHJvaV92 MS5udW1fcmVjdHM7ICsraSkgewotCQlpbnQgcmM7Ci0KLQkJcmMgPSBfZHB1X2Nvbm5lY3Rvcl9y b2lfdjFfY2hlY2tfcm9pKGNfY29ubiwgJnJvaV92MS5yb2lbaV0sCi0JCQkJY2Fwcyk7Ci0JCWlm IChyYykKLQkJCXJldHVybiByYzsKLQotCQljX3N0YXRlLT5yb2lzLnJvaVtpXSA9IHJvaV92MS5y b2lbaV07Ci0JCURQVV9ERUJVR19DT05OKGNfY29ubiwgInJvaSVkOiByb2kgKCVkLCVkKSAoJWQs JWQpXG4iLCBpLAotCQkJCWNfc3RhdGUtPnJvaXMucm9pW2ldLngxLAotCQkJCWNfc3RhdGUtPnJv aXMucm9pW2ldLnkxLAotCQkJCWNfc3RhdGUtPnJvaXMucm9pW2ldLngyLAotCQkJCWNfc3RhdGUt PnJvaXMucm9pW2ldLnkyKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBfZHB1 X2Nvbm5lY3Rvcl91cGRhdGVfYmxfc2NhbGUoc3RydWN0IGRwdV9jb25uZWN0b3IgKmNfY29ubiwK IAkJaW50IGlkeCwKIAkJdWludDY0X3QgdmFsdWUpCkBAIC04NTIsMTIgKzcyOCw2IEBAIHN0YXRp YyBpbnQgZHB1X2Nvbm5lY3Rvcl9hdG9taWNfc2V0X3Byb3BlcnR5KHN0cnVjdCBkcm1fY29ubmVj dG9yICpjb25uZWN0b3IsCiAJCWJyZWFrOwogCX0KIAotCWlmIChpZHggPT0gQ09OTkVDVE9SX1BS T1BfUk9JX1YxKSB7Ci0JCXJjID0gX2RwdV9jb25uZWN0b3Jfc2V0X3JvaV92MShjX2Nvbm4sIGNf c3RhdGUsICh2b2lkICopdmFsKTsKLQkJaWYgKHJjKQotCQkJRFBVX0VSUk9SX0NPTk4oY19jb25u LCAiaW52YWxpZCByb2lfdjEsIHJjOiAlZFxuIiwgcmMpOwotCX0KLQogCS8qIGNoZWNrIGZvciBj dXN0b20gcHJvcGVydHkgaGFuZGxpbmcgKi8KIAlpZiAoIXJjICYmIGNfY29ubi0+b3BzLnNldF9w cm9wZXJ0eSkgewogCQlyYyA9IGNfY29ubi0+b3BzLnNldF9wcm9wZXJ0eShjb25uZWN0b3IsCkBA IC0xMzA0LDEzICsxMTc0LDYgQEAgc3RydWN0IGRybV9jb25uZWN0b3IgKmRwdV9jb25uZWN0b3Jf aW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQlDT05ORUNUT1JfUFJPUF9BRF9CTF9TQ0FM RSk7CiAjZW5kaWYKIAotCXJjID0gZHB1X2Nvbm5lY3Rvcl9nZXRfaW5mbygmY19jb25uLT5iYXNl LCAmZGlzcGxheV9pbmZvKTsKLQlpZiAoIXJjICYmIGRpc3BsYXlfaW5mby5yb2lfY2Fwcy5lbmFi bGVkKSB7Ci0JCW1zbV9wcm9wZXJ0eV9pbnN0YWxsX3ZvbGF0aWxlX3JhbmdlKAotCQkJCSZjX2Nv bm4tPnByb3BlcnR5X2luZm8sICJkcHVfZHJtX3JvaV92MSIsIDB4MCwKLQkJCQkwLCB+MCwgMCwg Q09OTkVDVE9SX1BST1BfUk9JX1YxKTsKLQl9Ci0KIAltc21fcHJvcGVydHlfaW5zdGFsbF9yYW5n ZSgmY19jb25uLT5wcm9wZXJ0eV9pbmZvLCAiUkVUSVJFX0ZFTkNFIiwKIAkJCTB4MCwgMCwgSU5S X09QRU5fTUFYLCAwLCBDT05ORUNUT1JfUFJPUF9SRVRJUkVfRkVOQ0UpOwogCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29ubmVjdG9yLmggYi9kcml2ZXJz L2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29ubmVjdG9yLmgKaW5kZXggNTczYTBjOC4uOTgx ZjQ1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2Nvbm5l Y3Rvci5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jb25uZWN0b3Iu aApAQCAtMTYzLDEzICsxNjMsMTAgQEAgc3RydWN0IGRwdV9jb25uZWN0b3Jfb3BzIHsKIAkgKiBw cmVfa2lja29mZiAtIHRyaWdnZXIgZGlzcGxheSB0byBwcm9ncmFtIGtpY2tvZmYtdGltZSBmZWF0 dXJlcwogCSAqIEBjb25uZWN0b3I6IFBvaW50ZXIgdG8gZHJtIGNvbm5lY3RvciBzdHJ1Y3R1cmUK IAkgKiBAZGlzcGxheTogUG9pbnRlciB0byBwcml2YXRlIGRpc3BsYXkgc3RydWN0dXJlCi0JICog QHBhcmFtczogUGFyYW1ldGVyIGJ1bmRsZSBvZiBjb25uZWN0b3Itc3RvcmVkIGluZm9ybWF0aW9u IGZvcgotCSAqCWtpY2tvZmYtdGltZSBwcm9ncmFtbWluZyBpbnRvIHRoZSBkaXNwbGF5CiAJICog UmV0dXJuczogWmVybyBvbiBzdWNjZXNzCiAJICovCiAJaW50ICgqcHJlX2tpY2tvZmYpKHN0cnVj dCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCi0JCQl2b2lkICpkaXNwbGF5LAotCQkJc3RydWN0 IG1zbV9kaXNwbGF5X2tpY2tvZmZfcGFyYW1zICpwYXJhbXMpOworCQkJdm9pZCAqZGlzcGxheSk7 CiAKIAkvKioKIAkgKiBjbGtfY3RybCAtIHBlcmZvcm0gY2xrIGVuYWJsZS9kaXNhYmxlIG9uIHRo ZSBjb25uZWN0b3IKQEAgLTM0MCw3ICszMzcsNiBAQCBzdHJ1Y3QgZHB1X2Nvbm5lY3RvciB7CiAg KiBAb3V0X2ZiOiBQb2ludGVyIHRvIG91dHB1dCBmcmFtZSBidWZmZXIsIGlmIGFwcGxpY2FibGUK ICAqIEBwcm9wZXJ0eV9zdGF0ZTogTG9jYWwgc3RvcmFnZSBmb3IgbXNtX3Byb3AgcHJvcGVydGll cwogICogQHByb3BlcnR5X3ZhbHVlczogTG9jYWwgY2FjaGUgb2YgY3VycmVudCBjb25uZWN0b3Ig cHJvcGVydHkgdmFsdWVzCi0gKiBAcm9pczogUmVnaW9ucyBvZiBpbnRlcmVzdCBzdHJ1Y3R1cmUg Zm9yIG1hcHBpbmcgQ1JUQyB0byBDb25uZWN0b3Igb3V0cHV0CiAgKiBAcHJvcGVydHlfYmxvYnM6 IGJsb2IgcHJvcGVydGllcwogICovCiBzdHJ1Y3QgZHB1X2Nvbm5lY3Rvcl9zdGF0ZSB7CkBAIC0z NDksNyArMzQ1LDYgQEAgc3RydWN0IGRwdV9jb25uZWN0b3Jfc3RhdGUgewogCXN0cnVjdCBtc21f cHJvcGVydHlfc3RhdGUgcHJvcGVydHlfc3RhdGU7CiAJc3RydWN0IG1zbV9wcm9wZXJ0eV92YWx1 ZSBwcm9wZXJ0eV92YWx1ZXNbQ09OTkVDVE9SX1BST1BfQ09VTlRdOwogCi0Jc3RydWN0IG1zbV9y b2lfbGlzdCByb2lzOwogCXN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiAqcHJvcGVydHlfYmxvYnNb Q09OTkVDVE9SX1BST1BfQkxPQkNPVU5UXTsKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3Av ZHB1MS9kcHVfY3J0Yy5jCmluZGV4IDNjZGYxZTMuLmFiMzY1NzggMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJt L21zbS9kaXNwL2RwdTEvZHB1X2NydGMuYwpAQCAtNzgyLDQ2NSArNzgyLDI0IEBAIHN0YXRpYyB2 b2lkIF9kcHVfY3J0Y19zZXR1cF9kaW1fbGF5ZXJfY2ZnKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywK IAl9CiB9CiAKLXZvaWQgZHB1X2NydGNfZ2V0X2NydGNfcm9pKHN0cnVjdCBkcm1fY3J0Y19zdGF0 ZSAqc3RhdGUsCi0JCWNvbnN0IHN0cnVjdCBkcHVfcmVjdCAqKmNydGNfcm9pKQotewotCXN0cnVj dCBkcHVfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKLQotCWlmICghc3RhdGUgfHwgIWNydGNfcm9p KQotCQlyZXR1cm47Ci0KLQljcnRjX3N0YXRlID0gdG9fZHB1X2NydGNfc3RhdGUoc3RhdGUpOwot CSpjcnRjX3JvaSA9ICZjcnRjX3N0YXRlLT5jcnRjX3JvaTsKLX0KLQotc3RhdGljIGludCBfZHB1 X2NydGNfc2V0X3JvaV92MShzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnN0YXRlLAotCQl2b2lkIF9f dXNlciAqdXNyX3B0cikKLXsKLQlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Ci0Jc3RydWN0IGRwdV9j cnRjX3N0YXRlICpjc3RhdGU7Ci0Jc3RydWN0IGRwdV9kcm1fcm9pX3YxIHJvaV92MTsKLQlpbnQg aTsKLQotCWlmICghc3RhdGUpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGFyZ3NcbiIpOwotCQly ZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQljc3RhdGUgPSB0b19kcHVfY3J0Y19zdGF0ZShzdGF0ZSk7 Ci0JY3J0YyA9IGNzdGF0ZS0+YmFzZS5jcnRjOwotCi0JbWVtc2V0KCZjc3RhdGUtPnVzZXJfcm9p X2xpc3QsIDAsIHNpemVvZihjc3RhdGUtPnVzZXJfcm9pX2xpc3QpKTsKLQotCWlmICghdXNyX3B0 cikgewotCQlEUFVfREVCVUcoImNydGMlZDogcm9pcyBjbGVhcmVkXG4iLCBEUk1JRChjcnRjKSk7 Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChjb3B5X2Zyb21fdXNlcigmcm9pX3YxLCB1c3JfcHRy LCBzaXplb2Yocm9pX3YxKSkpIHsKLQkJRFBVX0VSUk9SKCJjcnRjJWQ6IGZhaWxlZCB0byBjb3B5 IHJvaV92MSBkYXRhXG4iLCBEUk1JRChjcnRjKSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQot CURQVV9ERUJVRygiY3J0YyVkOiBudW1fcmVjdHMgJWRcbiIsIERSTUlEKGNydGMpLCByb2lfdjEu bnVtX3JlY3RzKTsKLQotCWlmIChyb2lfdjEubnVtX3JlY3RzID09IDApIHsKLQkJRFBVX0RFQlVH KCJjcnRjJWQ6IHJvaXMgY2xlYXJlZFxuIiwgRFJNSUQoY3J0YykpOwotCQlyZXR1cm4gMDsKLQl9 Ci0KLQlpZiAocm9pX3YxLm51bV9yZWN0cyA+IERQVV9NQVhfUk9JX1YxKSB7Ci0JCURQVV9FUlJP UigiY3J0YyVkOiB0b28gbWFueSByZWN0cyBzcGVjaWZpZWQ6ICVkXG4iLCBEUk1JRChjcnRjKSwK LQkJCQlyb2lfdjEubnVtX3JlY3RzKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JY3N0YXRl LT51c2VyX3JvaV9saXN0Lm51bV9yZWN0cyA9IHJvaV92MS5udW1fcmVjdHM7Ci0JZm9yIChpID0g MDsgaSA8IHJvaV92MS5udW1fcmVjdHM7ICsraSkgewotCQljc3RhdGUtPnVzZXJfcm9pX2xpc3Qu cm9pW2ldID0gcm9pX3YxLnJvaVtpXTsKLQkJRFBVX0RFQlVHKCJjcnRjJWQ6IHJvaSVkOiByb2kg KCVkLCVkKSAoJWQsJWQpXG4iLAotCQkJCURSTUlEKGNydGMpLCBpLAotCQkJCWNzdGF0ZS0+dXNl cl9yb2lfbGlzdC5yb2lbaV0ueDEsCi0JCQkJY3N0YXRlLT51c2VyX3JvaV9saXN0LnJvaVtpXS55 MSwKLQkJCQljc3RhdGUtPnVzZXJfcm9pX2xpc3Qucm9pW2ldLngyLAotCQkJCWNzdGF0ZS0+dXNl cl9yb2lfbGlzdC5yb2lbaV0ueTIpOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgYm9v bCBfZHB1X2NydGNfc2V0dXBfaXNfM2RtdXhfZHNjKHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3Rh dGUpCi17Ci0JaW50IGk7Ci0Jc3RydWN0IGRwdV9jcnRjX3N0YXRlICpjc3RhdGU7Ci0JYm9vbCBp c18zZG11eF9kc2MgPSBmYWxzZTsKLQotCWNzdGF0ZSA9IHRvX2RwdV9jcnRjX3N0YXRlKHN0YXRl KTsKLQotCWZvciAoaSA9IDA7IGkgPCBjc3RhdGUtPm51bV9jb25uZWN0b3JzOyBpKyspIHsKLQkJ c3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm4gPSBjc3RhdGUtPmNvbm5lY3RvcnNbaV07Ci0KLQkJ aWYgKGRwdV9jb25uZWN0b3JfZ2V0X3RvcG9sb2d5X25hbWUoY29ubikgPT0KLQkJCQlEUFVfUk1f VE9QT0xPR1lfRFVBTFBJUEVfM0RNRVJHRV9EU0MpCi0JCQlpc18zZG11eF9kc2MgPSB0cnVlOwot CX0KLQotCXJldHVybiBpc18zZG11eF9kc2M7Ci19Ci0KLXN0YXRpYyBpbnQgX2RwdV9jcnRjX3Nl dF9jcnRjX3JvaShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCi0JCXN0cnVjdCBkcm1fY3J0Y19zdGF0 ZSAqc3RhdGUpCi17Ci0Jc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm47Ci0Jc3RydWN0IGRybV9j b25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGU7Ci0Jc3RydWN0IGRwdV9jcnRjICpkcHVfY3J0YzsK LQlzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgKmNydGNfc3RhdGU7Ci0Jc3RydWN0IGRwdV9yZWN0ICpj cnRjX3JvaTsKLQlpbnQgaSwgbnVtX2F0dGFjaGVkX2Nvbm5zID0gMDsKLQotCWlmICghY3J0YyB8 fCAhc3RhdGUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZHB1X2NydGMgPSB0b19kcHVfY3J0Yyhj cnRjKTsKLQljcnRjX3N0YXRlID0gdG9fZHB1X2NydGNfc3RhdGUoc3RhdGUpOwotCWNydGNfcm9p ID0gJmNydGNfc3RhdGUtPmNydGNfcm9pOwotCi0JZm9yX2VhY2hfb2xkX2Nvbm5lY3Rvcl9pbl9z dGF0ZShzdGF0ZS0+c3RhdGUsIGNvbm4sIGNvbm5fc3RhdGUsIGkpIHsKLQkJc3RydWN0IGRwdV9j b25uZWN0b3Jfc3RhdGUgKmRwdV9jb25uX3N0YXRlOwotCi0JCWlmICghY29ubl9zdGF0ZSB8fCBj b25uX3N0YXRlLT5jcnRjICE9IGNydGMpCi0JCQljb250aW51ZTsKLQotCQlpZiAobnVtX2F0dGFj aGVkX2Nvbm5zKSB7Ci0JCQlEUFVfRVJST1IoCi0JCQkJImNydGMlZDogdW5zdXBwb3J0ZWQ6IHJv aSBvbiBjcnRjIHcvID4xIGNvbm5lY3RvcnNcbiIsCi0JCQkJCURSTUlEKGNydGMpKTsKLQkJCXJl dHVybiAtRUlOVkFMOwotCQl9Ci0JCSsrbnVtX2F0dGFjaGVkX2Nvbm5zOwotCi0JCWRwdV9jb25u X3N0YXRlID0gdG9fZHB1X2Nvbm5lY3Rvcl9zdGF0ZShjb25uX3N0YXRlKTsKLQotCQkvKgotCQkg KiBjdXJyZW50IGRyaXZlciBvbmx5IHN1cHBvcnRzIHNhbWUgY29ubmVjdG9yIGFuZCBjcnRjIHNp emUsCi0JCSAqIGJ1dCBpZiBzdXBwb3J0IGZvciBkaWZmZXJlbnQgc2l6ZXMgaXMgYWRkZWQsIGRy aXZlciBuZWVkcwotCQkgKiB0byBjaGVjayB0aGUgY29ubmVjdG9yIHJvaSBoZXJlIHRvIG1ha2Ug c3VyZSBpcyBmdWxsIHNjcmVlbgotCQkgKiBmb3IgZHNjIDNkLW11eCB0b3BvbG9neSB0aGF0IGRv ZXNuJ3Qgc3VwcG9ydCBwYXJ0aWFsIHVwZGF0ZS4KLQkJICovCi0JCWlmIChtZW1jbXAoJmRwdV9j b25uX3N0YXRlLT5yb2lzLCAmY3J0Y19zdGF0ZS0+dXNlcl9yb2lfbGlzdCwKLQkJCQlzaXplb2Yo Y3J0Y19zdGF0ZS0+dXNlcl9yb2lfbGlzdCkpKSB7Ci0JCQlEUFVfRVJST1IoIiVzOiBjcnRjIC0+ IGNvbm4gcm9pIHNjYWxpbmcgdW5zdXBwb3J0ZWRcbiIsCi0JCQkJCWRwdV9jcnRjLT5uYW1lKTsK LQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JfQotCi0JZHB1X2ttc19yZWN0X21lcmdlX3JlY3Rh bmdsZXMoJmNydGNfc3RhdGUtPnVzZXJfcm9pX2xpc3QsIGNydGNfcm9pKTsKLQotCURQVV9ERUJV RygiJXM6IGNydGMgcm9pICglZCwlZCwlZCwlZClcbiIsIGRwdV9jcnRjLT5uYW1lLAotCQkJY3J0 Y19yb2ktPngsIGNydGNfcm9pLT55LCBjcnRjX3JvaS0+dywgY3J0Y19yb2ktPmgpOwotCi0JcmV0 dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgX2RwdV9jcnRjX2NoZWNrX2F1dG9yZWZyZXNoKHN0cnVj dCBkcm1fY3J0YyAqY3J0YywKLQkJc3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSkKLXsKLQlz dHJ1Y3QgZHB1X2NydGMgKmRwdV9jcnRjOwotCXN0cnVjdCBkcHVfY3J0Y19zdGF0ZSAqY3J0Y19z dGF0ZTsKLQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubjsKLQlzdHJ1Y3QgZHJtX2Nvbm5lY3Rv cl9zdGF0ZSAqY29ubl9zdGF0ZTsKLQlpbnQgaTsKLQotCWlmICghY3J0YyB8fCAhc3RhdGUpCi0J CXJldHVybiAtRUlOVkFMOwotCi0JZHB1X2NydGMgPSB0b19kcHVfY3J0YyhjcnRjKTsKLQljcnRj X3N0YXRlID0gdG9fZHB1X2NydGNfc3RhdGUoc3RhdGUpOwotCi0JaWYgKGRwdV9rbXNfcmVjdF9p c19udWxsKCZjcnRjX3N0YXRlLT5jcnRjX3JvaSkpCi0JCXJldHVybiAwOwotCi0JLyogcGFydGlh bCB1cGRhdGUgYWN0aXZlLCBjaGVjayBpZiBhdXRvcmVmcmVzaCBpcyBhbHNvIHJlcXVlc3RlZCAq LwotCWZvcl9lYWNoX29sZF9jb25uZWN0b3JfaW5fc3RhdGUoc3RhdGUtPnN0YXRlLCBjb25uLCBj b25uX3N0YXRlLCBpKSB7Ci0JCXVpbnQ2NF90IGF1dG9yZWZyZXNoOwotCi0JCWlmICghY29ubl9z dGF0ZSB8fCBjb25uX3N0YXRlLT5jcnRjICE9IGNydGMpCi0JCQljb250aW51ZTsKLQotCQlhdXRv cmVmcmVzaCA9IGRwdV9jb25uZWN0b3JfZ2V0X3Byb3BlcnR5KGNvbm5fc3RhdGUsCi0JCQkJQ09O TkVDVE9SX1BST1BfQVVUT1JFRlJFU0gpOwotCQlpZiAoYXV0b3JlZnJlc2gpIHsKLQkJCURQVV9F UlJPUigKLQkJCQkiJXM6IGF1dG9yZWZyZXNoICYgcGFydGlhbCBjcnRjIHJvaSBpbmNvbXBhdGli bGUgJWxsdVxuIiwKLQkJCQkJZHB1X2NydGMtPm5hbWUsIGF1dG9yZWZyZXNoKTsKLQkJCXJldHVy biAtRUlOVkFMOwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgX2RwdV9j cnRjX3NldF9sbV9yb2koc3RydWN0IGRybV9jcnRjICpjcnRjLAotCQlzdHJ1Y3QgZHJtX2NydGNf c3RhdGUgKnN0YXRlLCBpbnQgbG1faWR4KQotewotCXN0cnVjdCBkcHVfY3J0YyAqZHB1X2NydGM7 Ci0Jc3RydWN0IGRwdV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOwotCWNvbnN0IHN0cnVjdCBkcHVf cmVjdCAqY3J0Y19yb2k7Ci0JY29uc3Qgc3RydWN0IGRwdV9yZWN0ICpsbV9ib3VuZHM7Ci0Jc3Ry dWN0IGRwdV9yZWN0ICpsbV9yb2k7Ci0KLQlpZiAoIWNydGMgfHwgIXN0YXRlIHx8IGxtX2lkeCA+ PSBBUlJBWV9TSVpFKGNydGNfc3RhdGUtPmxtX2JvdW5kcykpCi0JCXJldHVybiAtRUlOVkFMOwot Ci0JZHB1X2NydGMgPSB0b19kcHVfY3J0YyhjcnRjKTsKLQljcnRjX3N0YXRlID0gdG9fZHB1X2Ny dGNfc3RhdGUoc3RhdGUpOwotCWNydGNfcm9pID0gJmNydGNfc3RhdGUtPmNydGNfcm9pOwotCWxt X2JvdW5kcyA9ICZjcnRjX3N0YXRlLT5sbV9ib3VuZHNbbG1faWR4XTsKLQlsbV9yb2kgPSAmY3J0 Y19zdGF0ZS0+bG1fcm9pW2xtX2lkeF07Ci0KLQlpZiAoZHB1X2ttc19yZWN0X2lzX251bGwoY3J0 Y19yb2kpKQotCQltZW1jcHkobG1fcm9pLCBsbV9ib3VuZHMsIHNpemVvZigqbG1fcm9pKSk7Ci0J ZWxzZQotCQlkcHVfa21zX3JlY3RfaW50ZXJzZWN0KGNydGNfcm9pLCBsbV9ib3VuZHMsIGxtX3Jv aSk7Ci0KLQlEUFVfREVCVUcoIiVzOiBsbSVkIHJvaSAoJWQsJWQsJWQsJWQpXG4iLCBkcHVfY3J0 Yy0+bmFtZSwgbG1faWR4LAotCQkJbG1fcm9pLT54LCBsbV9yb2ktPnksIGxtX3JvaS0+dywgbG1f cm9pLT5oKTsKLQotCS8qCi0JICogcGFydGlhbCB1cGRhdGUgaXMgbm90IHN1cHBvcnRlZCB3aXRo IDNkbXV4IGRzYyBvciBkZXN0IHNjYWxlci4KLQkgKiBoZW5jZSwgY3J0YyByb2kgbXVzdCBtYXRj aCB0aGUgbWl4ZXIgZGltZW5zaW9ucy4KLQkgKi8KLQlpZiAoY3J0Y19zdGF0ZS0+bnVtX2RzX2Vu YWJsZWQgfHwKLQkJX2RwdV9jcnRjX3NldHVwX2lzXzNkbXV4X2RzYyhzdGF0ZSkpIHsKLQkJaWYg KG1lbWNtcChsbV9yb2ksIGxtX2JvdW5kcywgc2l6ZW9mKHN0cnVjdCBkcHVfcmVjdCkpKSB7Ci0J CQlEUFVfRVJST1IoIlVuc3VwcG9ydGVkOiBEZXN0IHNjYWxlci8zZCBtdXggRFNDICsgUFVcbiIp OwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQl9Ci0KLQkvKiBpZiBhbnkgZGltZW5zaW9uIGlz IHplcm8sIGNsZWFyIGFsbCBkaW1lbnNpb25zIGZvciBjbGFyaXR5ICovCi0JaWYgKGRwdV9rbXNf cmVjdF9pc19udWxsKGxtX3JvaSkpCi0JCW1lbXNldChsbV9yb2ksIDAsIHNpemVvZigqbG1fcm9p KSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHUzMiBfZHB1X2NydGNfZ2V0X2Rpc3BsYXlz X2FmZmVjdGVkKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKLQkJc3RydWN0IGRybV9jcnRjX3N0YXRl ICpzdGF0ZSkKLXsKLQlzdHJ1Y3QgZHB1X2NydGMgKmRwdV9jcnRjOwotCXN0cnVjdCBkcHVfY3J0 Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKLQl1MzIgZGlzcF9iaXRtYXNrID0gMDsKLQlpbnQgaTsKLQot CWRwdV9jcnRjID0gdG9fZHB1X2NydGMoY3J0Yyk7Ci0JY3J0Y19zdGF0ZSA9IHRvX2RwdV9jcnRj X3N0YXRlKHN0YXRlKTsKLQotCS8qIHBpbmdwb25nIHNwbGl0OiBvbmUgUk9JLCBvbmUgTE0sIHR3 byBwaHlzaWNhbCBkaXNwbGF5cyAqLwotCWlmIChjcnRjX3N0YXRlLT5pc19wcHNwbGl0KSB7Ci0J CXUzMiBsbV9zcGxpdF93aWR0aCA9IGNydGNfc3RhdGUtPmxtX2JvdW5kc1swXS53IC8gMjsKLQkJ c3RydWN0IGRwdV9yZWN0ICpyb2kgPSAmY3J0Y19zdGF0ZS0+bG1fcm9pWzBdOwotCi0JCWlmIChk cHVfa21zX3JlY3RfaXNfbnVsbChyb2kpKQotCQkJZGlzcF9iaXRtYXNrID0gMDsKLQkJZWxzZSBp ZiAoKHUzMilyb2ktPnggKyAodTMyKXJvaS0+dyA8PSBsbV9zcGxpdF93aWR0aCkKLQkJCWRpc3Bf Yml0bWFzayA9IEJJVCgwKTsJCS8qIGxlZnQgb25seSAqLwotCQllbHNlIGlmIChyb2ktPnggPj0g bG1fc3BsaXRfd2lkdGgpCi0JCQlkaXNwX2JpdG1hc2sgPSBCSVQoMSk7CQkvKiByaWdodCBvbmx5 ICovCi0JCWVsc2UKLQkJCWRpc3BfYml0bWFzayA9IEJJVCgwKSB8IEJJVCgxKTsgLyogbGVmdCBh bmQgcmlnaHQgKi8KLQl9IGVsc2UgewotCQlmb3IgKGkgPSAwOyBpIDwgZHB1X2NydGMtPm51bV9t aXhlcnM7IGkrKykgewotCQkJaWYgKCFkcHVfa21zX3JlY3RfaXNfbnVsbCgmY3J0Y19zdGF0ZS0+ bG1fcm9pW2ldKSkKLQkJCQlkaXNwX2JpdG1hc2sgfD0gQklUKGkpOwotCQl9Ci0JfQotCi0JRFBV X0RFQlVHKCJhZmZlY3RlZCBkaXNwbGF5cyAweCV4XG4iLCBkaXNwX2JpdG1hc2spOwotCi0JcmV0 dXJuIGRpc3BfYml0bWFzazsKLX0KLQotc3RhdGljIGludCBfZHB1X2NydGNfY2hlY2tfcm9pc19j ZW50ZXJlZF9hbmRfc3ltbWV0cmljKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKLQkJc3RydWN0IGRy bV9jcnRjX3N0YXRlICpzdGF0ZSkKLXsKLQlzdHJ1Y3QgZHB1X2NydGMgKmRwdV9jcnRjOwotCXN0 cnVjdCBkcHVfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKLQljb25zdCBzdHJ1Y3QgZHB1X3JlY3Qg KnJvaVtDUlRDX0RVQUxfTUlYRVJTXTsKLQotCWlmICghY3J0YyB8fCAhc3RhdGUpCi0JCXJldHVy biAtRUlOVkFMOwotCi0JZHB1X2NydGMgPSB0b19kcHVfY3J0YyhjcnRjKTsKLQljcnRjX3N0YXRl ID0gdG9fZHB1X2NydGNfc3RhdGUoc3RhdGUpOwotCi0JaWYgKGRwdV9jcnRjLT5udW1fbWl4ZXJz ID4gQ1JUQ19EVUFMX01JWEVSUykgewotCQlEUFVfRVJST1IoIiVzOiB1bnN1cHBvcnRlZCBudW1i ZXIgb2YgbWl4ZXJzOiAlZFxuIiwKLQkJCQlkcHVfY3J0Yy0+bmFtZSwgZHB1X2NydGMtPm51bV9t aXhlcnMpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKgotCSAqIElmIHVzaW5nIHBpbmdw b25nIHNwbGl0OiBvbmUgUk9JLCBvbmUgTE0sIHR3byBwaHlzaWNhbCBkaXNwbGF5cwotCSAqIHRo ZW4gdGhlIFJPSSBtdXN0IGJlIGNlbnRlcmVkIG9uIHRoZSBwYW5lbCBzcGxpdCBib3VuZGFyeSBh bmQKLQkgKiBiZSBvZiBlcXVhbCB3aWR0aCBhY3Jvc3MgdGhlIHNwbGl0LgotCSAqLwotCWlmIChj cnRjX3N0YXRlLT5pc19wcHNwbGl0KSB7Ci0JCXUxNiBwYW5lbF9zcGxpdF93aWR0aDsKLQkJdTMy IGRpc3BsYXlfbWFzazsKLQotCQlyb2lbMF0gPSAmY3J0Y19zdGF0ZS0+bG1fcm9pWzBdOwotCi0J CWlmIChkcHVfa21zX3JlY3RfaXNfbnVsbChyb2lbMF0pKQotCQkJcmV0dXJuIDA7Ci0KLQkJZGlz cGxheV9tYXNrID0gX2RwdV9jcnRjX2dldF9kaXNwbGF5c19hZmZlY3RlZChjcnRjLCBzdGF0ZSk7 Ci0JCWlmIChkaXNwbGF5X21hc2sgIT0gKEJJVCgwKSB8IEJJVCgxKSkpCi0JCQlyZXR1cm4gMDsK LQotCQlwYW5lbF9zcGxpdF93aWR0aCA9IGNydGNfc3RhdGUtPmxtX2JvdW5kc1swXS53IC8gMjsK LQkJaWYgKHJvaVswXS0+eCArIHJvaVswXS0+dyAvIDIgIT0gcGFuZWxfc3BsaXRfd2lkdGgpIHsK LQkJCURQVV9FUlJPUigiJXM6IHJvaSB4ICVkIHcgJWQgc3BsaXQgJWRcbiIsCi0JCQkJCWRwdV9j cnRjLT5uYW1lLCByb2lbMF0tPngsIHJvaVswXS0+dywKLQkJCQkJcGFuZWxfc3BsaXRfd2lkdGgp OwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKgotCSAq IE9uIGNlcnRhaW4gSFcsIGlmIHVzaW5nIDIgTE0sIFJPSXMgbXVzdCBiZSBzcGxpdCBldmVubHkg YmV0d2VlbiB0aGUKLQkgKiBMTXMgYW5kIGJlIG9mIGVxdWFsIHdpZHRoLgotCSAqLwotCWlmIChk cHVfY3J0Yy0+bnVtX21peGVycyA8IDIpCi0JCXJldHVybiAwOwotCi0Jcm9pWzBdID0gJmNydGNf c3RhdGUtPmxtX3JvaVswXTsKLQlyb2lbMV0gPSAmY3J0Y19zdGF0ZS0+bG1fcm9pWzFdOwotCi0J LyogaWYgb25lIG9mIHRoZSByb2kgaXMgbnVsbCBpdCdzIGEgbGVmdC9yaWdodC1vbmx5IHVwZGF0 ZSAqLwotCWlmIChkcHVfa21zX3JlY3RfaXNfbnVsbChyb2lbMF0pIHx8IGRwdV9rbXNfcmVjdF9p c19udWxsKHJvaVsxXSkpCi0JCXJldHVybiAwOwotCi0JLyogY2hlY2sgbG0gcm9pcyBhcmUgZXF1 YWwgd2lkdGggJiBmaXJzdCByb2kgZW5kcyBhdCAybmQgcm9pICovCi0JaWYgKHJvaVswXS0+eCAr IHJvaVswXS0+dyAhPSByb2lbMV0tPnggfHwgcm9pWzBdLT53ICE9IHJvaVsxXS0+dykgewotCQlE UFVfRVJST1IoCi0JCQkiJXM6IHJvaXMgbm90IGNlbnRlcmVkIGFuZCBzeW1tZXRyaWM6IHJvaTAg eCAlZCB3ICVkIHJvaTEgeCAlZCB3ICVkXG4iLAotCQkJCWRwdV9jcnRjLT5uYW1lLCByb2lbMF0t PngsIHJvaVswXS0+dywKLQkJCQlyb2lbMV0tPngsIHJvaVsxXS0+dyk7Ci0JCXJldHVybiAtRUlO VkFMOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IF9kcHVfY3J0Y19jaGVja19w bGFuZXNfd2l0aGluX2NydGNfcm9pKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKLQkJc3RydWN0IGRy bV9jcnRjX3N0YXRlICpzdGF0ZSkKLXsKLQlzdHJ1Y3QgZHB1X2NydGMgKmRwdV9jcnRjOwotCXN0 cnVjdCBkcHVfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKLQljb25zdCBzdHJ1Y3QgZHB1X3JlY3Qg KmNydGNfcm9pOwotCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBzdGF0ZTsKLQlzdHJ1Y3QgZHJt X3BsYW5lICpwbGFuZTsKLQotCWlmICghY3J0YyB8fCAhc3RhdGUpCi0JCXJldHVybiAtRUlOVkFM OwotCi0JLyoKLQkgKiBSZWplY3QgY29tbWl0IGlmIGEgUGxhbmUgQ1JUQyBkZXN0aW5hdGlvbiBj b29yZGluYXRlcyBmYWxsIG91dHNpZGUKLQkgKiB0aGUgcGFydGlhbCBDUlRDIFJPSS4gTE0gb3V0 cHV0IGlzIGRldGVybWluZWQgdmlhIGNvbm5lY3RvciBST0lzLAotCSAqIGlmIHRoZXkgYXJlIHNw ZWNpZmllZCwgbm90IFBsYW5lIENSVEMgUk9Jcy4KLQkgKi8KLQotCWRwdV9jcnRjID0gdG9fZHB1 X2NydGMoY3J0Yyk7Ci0JY3J0Y19zdGF0ZSA9IHRvX2RwdV9jcnRjX3N0YXRlKHN0YXRlKTsKLQlj cnRjX3JvaSA9ICZjcnRjX3N0YXRlLT5jcnRjX3JvaTsKLQotCWlmIChkcHVfa21zX3JlY3RfaXNf bnVsbChjcnRjX3JvaSkpCi0JCXJldHVybiAwOwotCi0JZHJtX2F0b21pY19jcnRjX3N0YXRlX2Zv cl9lYWNoX3BsYW5lKHBsYW5lLCBzdGF0ZSkgewotCQlzdHJ1Y3QgZHB1X3JlY3QgcGxhbmVfcm9p LCBpbnRlcnNlY3Rpb247Ci0KLQkJcHN0YXRlID0gZHJtX2F0b21pY19nZXRfcGxhbmVfc3RhdGUo c3RhdGUtPnN0YXRlLCBwbGFuZSk7Ci0JCWlmIChJU19FUlJfT1JfTlVMTChwc3RhdGUpKSB7Ci0J CQlpbnQgcmMgPSBQVFJfRVJSKHBzdGF0ZSk7Ci0KLQkJCURQVV9FUlJPUigiJXM6IGZhaWxlZCB0 byBnZXQgcGxhbmUlZCBzdGF0ZSwgJWRcbiIsCi0JCQkJCWRwdV9jcnRjLT5uYW1lLCBwbGFuZS0+ YmFzZS5pZCwgcmMpOwotCQkJcmV0dXJuIHJjOwotCQl9Ci0KLQkJcGxhbmVfcm9pLnggPSBwc3Rh dGUtPmNydGNfeDsKLQkJcGxhbmVfcm9pLnkgPSBwc3RhdGUtPmNydGNfeTsKLQkJcGxhbmVfcm9p LncgPSBwc3RhdGUtPmNydGNfdzsKLQkJcGxhbmVfcm9pLmggPSBwc3RhdGUtPmNydGNfaDsKLQkJ ZHB1X2ttc19yZWN0X2ludGVyc2VjdChjcnRjX3JvaSwgJnBsYW5lX3JvaSwgJmludGVyc2VjdGlv bik7Ci0JCWlmICghZHB1X2ttc19yZWN0X2lzX2VxdWFsKCZwbGFuZV9yb2ksICZpbnRlcnNlY3Rp b24pKSB7Ci0JCQlEUFVfRVJST1IoCi0JCQkJIiVzOiBwbGFuZSVkIGNydGMgcm9pICglZCwlZCwl ZCwlZCkgb3V0c2lkZSBjcnRjIHJvaSAoJWQsJWQsJWQsJWQpXG4iLAotCQkJCQlkcHVfY3J0Yy0+ bmFtZSwgcGxhbmUtPmJhc2UuaWQsCi0JCQkJCXBsYW5lX3JvaS54LCBwbGFuZV9yb2kueSwKLQkJ CQkJcGxhbmVfcm9pLncsIHBsYW5lX3JvaS5oLAotCQkJCQljcnRjX3JvaS0+eCwgY3J0Y19yb2kt PnksCi0JCQkJCWNydGNfcm9pLT53LCBjcnRjX3JvaS0+aCk7Ci0JCQlyZXR1cm4gLUUyQklHOwot CQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgX2RwdV9jcnRjX2NoZWNrX3Jv aXMoc3RydWN0IGRybV9jcnRjICpjcnRjLAotCQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnN0YXRl KQotewotCXN0cnVjdCBkcHVfY3J0YyAqZHB1X2NydGM7Ci0JaW50IGxtX2lkeDsKLQlpbnQgcmM7 Ci0KLQlpZiAoIWNydGMgfHwgIXN0YXRlKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWRwdV9jcnRj ID0gdG9fZHB1X2NydGMoY3J0Yyk7Ci0KLQlyYyA9IF9kcHVfY3J0Y19zZXRfY3J0Y19yb2koY3J0 Yywgc3RhdGUpOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwotCi0JcmMgPSBfZHB1X2NydGNfY2hl Y2tfYXV0b3JlZnJlc2goY3J0Yywgc3RhdGUpOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwotCi0J Zm9yIChsbV9pZHggPSAwOyBsbV9pZHggPCBkcHVfY3J0Yy0+bnVtX21peGVyczsgbG1faWR4Kysp IHsKLQkJcmMgPSBfZHB1X2NydGNfc2V0X2xtX3JvaShjcnRjLCBzdGF0ZSwgbG1faWR4KTsKLQkJ aWYgKHJjKQotCQkJcmV0dXJuIHJjOwotCX0KLQotCXJjID0gX2RwdV9jcnRjX2NoZWNrX3JvaXNf Y2VudGVyZWRfYW5kX3N5bW1ldHJpYyhjcnRjLCBzdGF0ZSk7Ci0JaWYgKHJjKQotCQlyZXR1cm4g cmM7Ci0KLQlyYyA9IF9kcHVfY3J0Y19jaGVja19wbGFuZXNfd2l0aGluX2NydGNfcm9pKGNydGMs IHN0YXRlKTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKLQotCXJldHVybiAwOwotfQotCiBzdGF0 aWMgdm9pZCBfZHB1X2NydGNfcHJvZ3JhbV9sbV9vdXRwdXRfcm9pKHN0cnVjdCBkcm1fY3J0YyAq Y3J0YykKIHsKIAlzdHJ1Y3QgZHB1X2NydGMgKmRwdV9jcnRjOwogCXN0cnVjdCBkcHVfY3J0Y19z dGF0ZSAqY3J0Y19zdGF0ZTsKLQljb25zdCBzdHJ1Y3QgZHB1X3JlY3QgKmxtX3JvaTsKLQlzdHJ1 Y3QgZHB1X2h3X21peGVyICpod19sbTsKIAlpbnQgbG1faWR4LCBsbV9ob3Jpel9wb3NpdGlvbjsK IAotCWlmICghY3J0YykKLQkJcmV0dXJuOwotCiAJZHB1X2NydGMgPSB0b19kcHVfY3J0YyhjcnRj KTsKIAljcnRjX3N0YXRlID0gdG9fZHB1X2NydGNfc3RhdGUoY3J0Yy0+c3RhdGUpOwogCiAJbG1f aG9yaXpfcG9zaXRpb24gPSAwOwogCWZvciAobG1faWR4ID0gMDsgbG1faWR4IDwgZHB1X2NydGMt Pm51bV9taXhlcnM7IGxtX2lkeCsrKSB7CisJCWNvbnN0IHN0cnVjdCBkcHVfcmVjdCAqbG1fcm9p ID0gJmNydGNfc3RhdGUtPmxtX2JvdW5kc1tsbV9pZHhdOworCQlzdHJ1Y3QgZHB1X2h3X21peGVy ICpod19sbSA9IGRwdV9jcnRjLT5taXhlcnNbbG1faWR4XS5od19sbTsKIAkJc3RydWN0IGRwdV9o d19taXhlcl9jZmcgY2ZnOwogCi0JCWxtX3JvaSA9ICZjcnRjX3N0YXRlLT5sbV9yb2lbbG1faWR4 XTsKLQkJaHdfbG0gPSBkcHVfY3J0Yy0+bWl4ZXJzW2xtX2lkeF0uaHdfbG07Ci0KLQkJRFBVX0VW VDMyKERSTUlEKGNydGNfc3RhdGUtPmJhc2UuY3J0YyksIGxtX2lkeCwKLQkJCWxtX3JvaS0+eCwg bG1fcm9pLT55LCBsbV9yb2ktPncsIGxtX3JvaS0+aCk7Ci0KIAkJaWYgKGRwdV9rbXNfcmVjdF9p c19udWxsKGxtX3JvaSkpCiAJCQljb250aW51ZTsKIAotCQlod19sbS0+Y2ZnLm91dF93aWR0aCA9 IGxtX3JvaS0+dzsKLQkJaHdfbG0tPmNmZy5vdXRfaGVpZ2h0ID0gbG1fcm9pLT5oOwotCQlod19s bS0+Y2ZnLnJpZ2h0X21peGVyID0gbG1faG9yaXpfcG9zaXRpb247Ci0KIAkJY2ZnLm91dF93aWR0 aCA9IGxtX3JvaS0+dzsKIAkJY2ZnLm91dF9oZWlnaHQgPSBsbV9yb2ktPmg7CiAJCWNmZy5yaWdo dF9taXhlciA9IGxtX2hvcml6X3Bvc2l0aW9uKys7CkBAIC0xMzYxLDcwICs5MjAsNyBAQCBzdGF0 aWMgdm9pZCBfZHB1X2NydGNfYmxlbmRfc2V0dXBfbWl4ZXIoc3RydWN0IGRybV9jcnRjICpjcnRj LAogCQkJCQltaXhlciwgJmNzdGF0ZS0+ZGltX2xheWVyW2ldKTsKIAl9CiAKLQlfZHB1X2NydGNf cHJvZ3JhbV9sbV9vdXRwdXRfcm9pKGNydGMpOwotfQotCi1zdGF0aWMgdm9pZCBfZHB1X2NydGNf c3dhcF9taXhlcnNfZm9yX3JpZ2h0X3BhcnRpYWxfdXBkYXRlKAotCQlzdHJ1Y3QgZHJtX2NydGMg KmNydGMpCi17Ci0Jc3RydWN0IGRwdV9jcnRjICpkcHVfY3J0YzsKLQlzdHJ1Y3QgZHB1X2NydGNf c3RhdGUgKmNzdGF0ZTsKLQlzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmM7Ci0JYm9vbCBpc19y aWdodF9vbmx5OwotCWJvb2wgZW5jb2Rlcl9pbl9kc2NfbWVyZ2UgPSBmYWxzZTsKLQotCWlmICgh Y3J0YyB8fCAhY3J0Yy0+c3RhdGUpCi0JCXJldHVybjsKLQotCWRwdV9jcnRjID0gdG9fZHB1X2Ny dGMoY3J0Yyk7Ci0JY3N0YXRlID0gdG9fZHB1X2NydGNfc3RhdGUoY3J0Yy0+c3RhdGUpOwotCi0J aWYgKGRwdV9jcnRjLT5udW1fbWl4ZXJzICE9IENSVENfRFVBTF9NSVhFUlMpCi0JCXJldHVybjsK LQotCWRybV9mb3JfZWFjaF9lbmNvZGVyKGRybV9lbmMsIGNydGMtPmRldikgewotCQlpZiAoZHJt X2VuYy0+Y3J0YyA9PSBjcnRjICYmCi0JCQkJZHB1X2VuY29kZXJfaXNfZHNjX21lcmdlKGRybV9l bmMpKSB7Ci0JCQllbmNvZGVyX2luX2RzY19tZXJnZSA9IHRydWU7Ci0JCQlicmVhazsKLQkJfQot CX0KLQotCS8qKgotCSAqIEZvciByaWdodC1vbmx5IHBhcnRpYWwgdXBkYXRlIHdpdGggRFNDIG1l cmdlLCB3ZSBzd2FwIExNMCAmIExNMS4KLQkgKiBUaGlzIGlzIGR1ZSB0byB0d28gcmVhc29uczoK LQkgKiAtIE9uIDg5OTYsIHRoZXJlIGlzIGEgRFNDIEhXIHJlcXVpcmVtZW50IHRoYXQgaW4gRFND IE1lcmdlIE1vZGUsCi0JICogICB0aGUgbGVmdCBEU0MgbXVzdCBiZSB1c2VkLCByaWdodCBEU0Mg Y2Fubm90IGJlIHVzZWQgYWxvbmUuCi0JICogICBGb3IgcmlnaHQtb25seSBwYXJ0aWFsIHVwZGF0 ZSwgdGhpcyBtZWFucyBzd2FwIGxheWVyIG1peGVycyB0byBtYXAKLQkgKiAgIExlZnQgTE0gdG8g UmlnaHQgSU5URi4gT24gbGF0ZXIgSFcgdGhpcyB3YXMgcmVsYXhlZC4KLQkgKiAtIEluIERTQyBN ZXJnZSBtb2RlLCB0aGUgcGh5c2ljYWwgZW5jb2RlciBoYXMgYWxyZWFkeSByZWdpc3RlcmVkCi0J ICogICBQUDAgYXMgdGhlIG1hc3RlciwgdG8gc3dpdGNoIHRvIHJpZ2h0LW9ubHkgd2Ugd291bGQg aGF2ZSB0bwotCSAqICAgcmVwcm9ncmFtIHRvIGJlIGRyaXZlbiBieSBQUDEgaW5zdGVhZC4KLQkg KiBUbyBzdXBwb3J0IGJvdGggY2FzZXMsIHdlIHByZWZlciB0byBzdXBwb3J0IHRoZSBtaXhlciBz d2FwIHNvbHV0aW9uLgotCSAqLwotCWlmICghZW5jb2Rlcl9pbl9kc2NfbWVyZ2UpCi0JCXJldHVy bjsKLQotCWlzX3JpZ2h0X29ubHkgPSBkcHVfa21zX3JlY3RfaXNfbnVsbCgmY3N0YXRlLT5sbV9y b2lbMF0pICYmCi0JCQkhZHB1X2ttc19yZWN0X2lzX251bGwoJmNzdGF0ZS0+bG1fcm9pWzFdKTsK LQotCWlmIChpc19yaWdodF9vbmx5ICYmICFkcHVfY3J0Yy0+bWl4ZXJzX3N3YXBwZWQpIHsKLQkJ LyogcmlnaHQtb25seSB1cGRhdGUgc3dhcCBtaXhlcnMgKi8KLQkJc3dhcChkcHVfY3J0Yy0+bWl4 ZXJzWzBdLCBkcHVfY3J0Yy0+bWl4ZXJzWzFdKTsKLQkJZHB1X2NydGMtPm1peGVyc19zd2FwcGVk ID0gdHJ1ZTsKLQl9IGVsc2UgaWYgKCFpc19yaWdodF9vbmx5ICYmIGRwdV9jcnRjLT5taXhlcnNf c3dhcHBlZCkgewotCQkvKiBsZWZ0LW9ubHkgb3IgZnVsbCB1cGRhdGUsIHN3YXAgYmFjayAqLwot CQlzd2FwKGRwdV9jcnRjLT5taXhlcnNbMF0sIGRwdV9jcnRjLT5taXhlcnNbMV0pOwotCQlkcHVf Y3J0Yy0+bWl4ZXJzX3N3YXBwZWQgPSBmYWxzZTsKLQl9Ci0KLQlEUFVfREVCVUcoIiVzOiByaWdo dF9vbmx5ICVkIHN3YXBwZWQgJWQsIG1peDAtPmxtJWQsIG1peDEtPmxtJWRcbiIsCi0JCQlkcHVf Y3J0Yy0+bmFtZSwgaXNfcmlnaHRfb25seSwgZHB1X2NydGMtPm1peGVyc19zd2FwcGVkLAotCQkJ ZHB1X2NydGMtPm1peGVyc1swXS5od19sbS0+aWR4IC0gTE1fMCwKLQkJCWRwdV9jcnRjLT5taXhl cnNbMV0uaHdfbG0tPmlkeCAtIExNXzApOwotCURQVV9FVlQzMihEUk1JRChjcnRjKSwgaXNfcmln aHRfb25seSwgZHB1X2NydGMtPm1peGVyc19zd2FwcGVkLAotCQkJZHB1X2NydGMtPm1peGVyc1sw XS5od19sbS0+aWR4IC0gTE1fMCwKLQkJCWRwdV9jcnRjLT5taXhlcnNbMV0uaHdfbG0tPmlkeCAt IExNXzApOworCSBfZHB1X2NydGNfcHJvZ3JhbV9sbV9vdXRwdXRfcm9pKGNydGMpOwogfQogCiAv KioKQEAgLTE0NzIsMjcgKzk2OCwxNSBAQCBzdGF0aWMgdm9pZCBfZHB1X2NydGNfYmxlbmRfc2V0 dXAoc3RydWN0IGRybV9jcnRjICpjcnRjKQogCQkJbG0tPm9wcy5jbGVhcl9kaW1fbGF5ZXIobG0p OwogCX0KIAotCV9kcHVfY3J0Y19zd2FwX21peGVyc19mb3JfcmlnaHRfcGFydGlhbF91cGRhdGUo Y3J0Yyk7Ci0KIAkvKiBpbml0aWFsaXplIHN0YWdlIGNmZyAqLwogCW1lbXNldCgmZHB1X2NydGMt PnN0YWdlX2NmZywgMCwgc2l6ZW9mKHN0cnVjdCBkcHVfaHdfc3RhZ2VfY2ZnKSk7CiAKIAlfZHB1 X2NydGNfYmxlbmRfc2V0dXBfbWl4ZXIoY3J0YywgZHB1X2NydGMsIG1peGVyKTsKIAogCWZvciAo aSA9IDA7IGkgPCBkcHVfY3J0Yy0+bnVtX21peGVyczsgaSsrKSB7Ci0JCWNvbnN0IHN0cnVjdCBk cHVfcmVjdCAqbG1fcm9pID0gJmRwdV9jcnRjX3N0YXRlLT5sbV9yb2lbaV07Ci0KIAkJY3RsID0g bWl4ZXJbaV0uaHdfY3RsOwogCQlsbSA9IG1peGVyW2ldLmh3X2xtOwogCi0JCWlmIChkcHVfa21z X3JlY3RfaXNfbnVsbChsbV9yb2kpKSB7Ci0JCQlEUFVfREVCVUcoCi0JCQkJIiVzOiBsbSVkIGxl YXZlIGN0bCVkIG1hc2sgMCBzaW5jZSBudWxsIHJvaVxuIiwKLQkJCQkJZHB1X2NydGMtPm5hbWUs IGxtLT5pZHggLSBMTV8wLAotCQkJCQljdGwtPmlkeCAtIENUTF8wKTsKLQkJCWNvbnRpbnVlOwot CQl9Ci0KIAkJbG0tPm9wcy5zZXR1cF9hbHBoYV9vdXQobG0sIG1peGVyW2ldLm1peGVyX29wX21v ZGUpOwogCiAJCW1peGVyW2ldLmZsdXNoX21hc2sgfD0gY3RsLT5vcHMuZ2V0X2JpdG1hc2tfbWl4 ZXIoY3RsLApAQCAtMTUxMCw4ICs5OTQsNiBAQCBzdGF0aWMgdm9pZCBfZHB1X2NydGNfYmxlbmRf c2V0dXAoc3RydWN0IGRybV9jcnRjICpjcnRjKQogCQljdGwtPm9wcy5zZXR1cF9ibGVuZHN0YWdl KGN0bCwgbWl4ZXJbaV0uaHdfbG0tPmlkeCwKIAkJCSZkcHVfY3J0Yy0+c3RhZ2VfY2ZnKTsKIAl9 Ci0KLQlfZHB1X2NydGNfcHJvZ3JhbV9sbV9vdXRwdXRfcm9pKGNydGMpOwogfQogCiAvKioKQEAg LTI2NjQsMTQgKzIxNDYsOSBAQCBzdGF0aWMgdm9pZCBfZHB1X2NydGNfc2V0dXBfbG1fYm91bmRz KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAkJY3N0YXRlLT5sbV9ib3VuZHNbaV0udyA9IGNydGNf c3BsaXRfd2lkdGg7CiAJCWNzdGF0ZS0+bG1fYm91bmRzW2ldLmggPQogCQkJZHB1X2NydGNfZ2V0 X21peGVyX2hlaWdodChkcHVfY3J0YywgY3N0YXRlLCBhZGpfbW9kZSk7Ci0JCW1lbWNweSgmY3N0 YXRlLT5sbV9yb2lbaV0sICZjc3RhdGUtPmxtX2JvdW5kc1tpXSwKLQkJCQlzaXplb2YoY3N0YXRl LT5sbV9yb2lbaV0pKTsKIAkJRFBVX0VWVDMyX1ZFUkJPU0UoRFJNSUQoY3J0YyksIGksCiAJCQkJ Y3N0YXRlLT5sbV9ib3VuZHNbaV0ueCwgY3N0YXRlLT5sbV9ib3VuZHNbaV0ueSwKIAkJCQljc3Rh dGUtPmxtX2JvdW5kc1tpXS53LCBjc3RhdGUtPmxtX2JvdW5kc1tpXS5oKTsKLQkJRFBVX0RFQlVH KCIlczogbG0lZCBibmQmcm9pICglZCwlZCwlZCwlZClcbiIsIGRwdV9jcnRjLT5uYW1lLCBpLAot CQkJCWNzdGF0ZS0+bG1fcm9pW2ldLngsIGNzdGF0ZS0+bG1fcm9pW2ldLnksCi0JCQkJY3N0YXRl LT5sbV9yb2lbaV0udywgY3N0YXRlLT5sbV9yb2lbaV0uaCk7CiAJfQogCiAJZHJtX21vZGVfZGVi dWdfcHJpbnRtb2RlbGluZShhZGpfbW9kZSk7CkBAIC0zMDE5LDggKzI0OTYsNiBAQCB2b2lkIGRw dV9jcnRjX2NvbW1pdF9raWNrb2ZmKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIAkJICogSWYgc28s IGl0IG1heSBkZWxheSBhbmQgZmx1c2ggYXQgYW4gaXJxIGV2ZW50IChlLmcuIHBwZG9uZSkKIAkJ ICovCiAJCXBhcmFtcy5pbmxpbmVfcm90YXRlX3ByZWZpbGwgPSBjc3RhdGUtPnNidWZfcHJlZmls bF9saW5lOwotCQlwYXJhbXMuYWZmZWN0ZWRfZGlzcGxheXMgPSBfZHB1X2NydGNfZ2V0X2Rpc3Bs YXlzX2FmZmVjdGVkKGNydGMsCi0JCQkJY3J0Yy0+c3RhdGUpOwogCQlkcHVfZW5jb2Rlcl9wcmVw YXJlX2Zvcl9raWNrb2ZmKGVuY29kZXIsICZwYXJhbXMpOwogCiAJCS8qCkBAIC0zOTMxLDEyICsz NDA2LDYgQEAgc3RhdGljIGludCBkcHVfY3J0Y19hdG9taWNfY2hlY2soc3RydWN0IGRybV9jcnRj ICpjcnRjLAogCQl9CiAJfQogCi0JcmMgPSBfZHB1X2NydGNfY2hlY2tfcm9pcyhjcnRjLCBzdGF0 ZSk7Ci0JaWYgKHJjKSB7Ci0JCURQVV9FUlJPUigiY3J0YyVkIGZhaWxlZCByb2kgY2hlY2sgJWRc biIsIGNydGMtPmJhc2UuaWQsIHJjKTsKLQkJZ290byBlbmQ7Ci0JfQotCiBlbmQ6CiAJX2RwdV9j cnRjX3JwX2ZyZWVfdW51c2VkKCZjc3RhdGUtPnJwKTsKIAlyZXR1cm4gcmM7CkBAIC00MDY2LDkg KzM1MzUsNiBAQCBzdGF0aWMgdm9pZCBkcHVfY3J0Y19pbnN0YWxsX3Byb3BlcnRpZXMoc3RydWN0 IGRybV9jcnRjICpjcnRjLAogCW1zbV9wcm9wZXJ0eV9pbnN0YWxsX2Jsb2IoJmRwdV9jcnRjLT5w cm9wZXJ0eV9pbmZvLCAiY2FwYWJpbGl0aWVzIiwKIAkJRFJNX01PREVfUFJPUF9JTU1VVEFCTEUs IENSVENfUFJPUF9JTkZPKTsKIAotCW1zbV9wcm9wZXJ0eV9pbnN0YWxsX3ZvbGF0aWxlX3Jhbmdl KCZkcHVfY3J0Yy0+cHJvcGVydHlfaW5mbywKLQkJImRwdV9kcm1fcm9pX3YxIiwgMHgwLCAwLCB+ MCwgMCwgQ1JUQ19QUk9QX1JPSV9WMSk7Ci0KIAlkcHVfa21zX2luZm9fcmVzZXQoaW5mbyk7CiAK IAlpZiAoY2F0YWxvZy0+aGFzX2RpbV9sYXllcikgewpAQCAtNDIxNywxMCArMzY4Myw2IEBAIHN0 YXRpYyBpbnQgZHB1X2NydGNfYXRvbWljX3NldF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2NydGMgKmNy dGMsCiAJCQkJX2RwdV9jcnRjX3NldF9kaW1fbGF5ZXJfdjEoY3N0YXRlLAogCQkJCQkJCSh2b2lk IF9fdXNlciAqKXZhbCk7CiAJCQkJYnJlYWs7Ci0JCQljYXNlIENSVENfUFJPUF9ST0lfVjE6Ci0J CQkJcmV0ID0gX2RwdV9jcnRjX3NldF9yb2lfdjEoc3RhdGUsCi0JCQkJCQkJKHZvaWQgX191c2Vy ICopdmFsKTsKLQkJCQlicmVhazsKIAkJCWNhc2UgQ1JUQ19QUk9QX0RFU1RfU0NBTEVSOgogCQkJ CXJldCA9IF9kcHVfY3J0Y19zZXRfZGVzdF9zY2FsZXIoZHB1X2NydGMsCiAJCQkJCQljc3RhdGUs ICh2b2lkIF9fdXNlciAqKXZhbCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rp c3AvZHB1MS9kcHVfY3J0Yy5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2Ny dGMuaAppbmRleCBiNjNkZjI0Li4xNWUzZWI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v bXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9jcnRjLmgKQEAgLTM0NSwxMyArMzQ1LDggQEAgc3RydWN0IGRwdV9jcnRjX3Jlc3Bv b2wgewogICogQGlzX3Bwc3BsaXQgICAgOiBXaGV0aGVyIGN1cnJlbnQgdG9wb2xvZ3kgcmVxdWly ZXMgUFBTcGxpdCBzcGVjaWFsIGhhbmRsaW5nCiAgKiBAYndfY29udHJvbCAgICA6IHRydWUgaWYg YncvY2xrIGNvbnRyb2xsZWQgYnkgY29yZSBidy9jbGsgcHJvcGVydGllcwogICogQGJ3X3NwbGl0 X3ZvdGUgOiB0cnVlIGlmIGJ3IGNvbnRyb2xsZWQgYnkgbGxjYy9kcmFtIGJ3IHByb3BlcnRpZXMK LSAqIEBjcnRjX3JvaSAgICAgIDogQ3VycmVudCBDUlRDIFJPSS4gUG9zc2libHkgc3ViLXJlY3Rh bmdsZSBvZiBtb2RlLgotICogICAgICAgICAgICAgICAgICBPcmlnaW4gdG9wIGxlZnQgb2YgQ1JU Qy4KICAqIEBsbV9ib3VuZHMgICAgIDogTE0gYm91bmRhcmllcyBiYXNlZCBvbiBjdXJyZW50IG1v ZGUgZnVsbCByZXNvbHV0aW9uLCBubyBST0kuCiAgKiAgICAgICAgICAgICAgICAgIE9yaWdpbiB0 b3AgbGVmdCBvZiBDUlRDLgotICogQGxtX3JvaSAgICAgICAgOiBDdXJyZW50IExNIFJPSSwgcG9z c2libHkgc3ViLXJlY3RhbmdsZSBvZiBtb2RlLgotICogICAgICAgICAgICAgICAgICBPcmlnaW4g dG9wIGxlZnQgb2YgQ1JUQy4KLSAqIEB1c2VyX3JvaV9saXN0IDogTGlzdCBvZiB1c2VyJ3MgcmVx dWVzdGVkIFJPSXMgYXMgZnJvbSBzZXQgcHJvcGVydHkKICAqIEBwcm9wZXJ0eV9zdGF0ZTogTG9j YWwgc3RvcmFnZSBmb3IgbXNtX3Byb3AgcHJvcGVydGllcwogICogQHByb3BlcnR5X3ZhbHVlczog Q3VycmVudCBjcnRjIHByb3BlcnR5IHZhbHVlcwogICogQGlucHV0X2ZlbmNlX3RpbWVvdXRfbnMg OiBDYWNoZWQgaW5wdXQgZmVuY2UgdGltZW91dCwgaW4gbnMKQEAgLTM3NiwxMCArMzcxLDcgQEAg c3RydWN0IGRwdV9jcnRjX3N0YXRlIHsKIAlib29sIGJ3X3NwbGl0X3ZvdGU7CiAKIAlib29sIGlz X3Bwc3BsaXQ7Ci0Jc3RydWN0IGRwdV9yZWN0IGNydGNfcm9pOwogCXN0cnVjdCBkcHVfcmVjdCBs bV9ib3VuZHNbQ1JUQ19EVUFMX01JWEVSU107Ci0Jc3RydWN0IGRwdV9yZWN0IGxtX3JvaVtDUlRD X0RVQUxfTUlYRVJTXTsKLQlzdHJ1Y3QgbXNtX3JvaV9saXN0IHVzZXJfcm9pX2xpc3Q7CiAKIAlz dHJ1Y3QgbXNtX3Byb3BlcnR5X3N0YXRlIHByb3BlcnR5X3N0YXRlOwogCXN0cnVjdCBtc21fcHJv cGVydHlfdmFsdWUgcHJvcGVydHlfdmFsdWVzW0NSVENfUFJPUF9DT1VOVF07CkBAIC02MDUsMTQg KzU5Nyw0IEBAIGludCBkcHVfY3J0Y19yZXNfYWRkKHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3Rh dGUsIHUzMiB0eXBlLCB1NjQgdGFnLAogICovCiB2b2lkIGRwdV9jcnRjX3Jlc19wdXQoc3RydWN0 IGRybV9jcnRjX3N0YXRlICpzdGF0ZSwgdTMyIHR5cGUsIHU2NCB0YWcpOwogCi0vKioKLSAqIGRw dV9jcnRjX2dldF9jcnRjX3JvaSAtIHJldHJpZXZlIHRoZSBjcnRjX3JvaSBmcm9tIHRoZSBnaXZl biBzdGF0ZSBvYmplY3QKLSAqCXVzZWQgdG8gYWxsb3cgdGhlIHBsYW5lcyB0byBhZGp1c3QgdGhl aXIgZmluYWwgbG0gb3V0X3h5IHZhbHVlIGluIHRoZQotICoJY2FzZSBvZiBwYXJ0aWFsIHVwZGF0 ZQotICogQGNydGNfc3RhdGU6IFBvaW50ZXIgdG8gY3J0YyBzdGF0ZQotICogQGNydGNfcm9pOiBP dXRwdXQgcG9pbnRlciB0byBjcnRjIHJvaSBpbiB0aGUgZ2l2ZW4gc3RhdGUKLSAqLwotdm9pZCBk cHVfY3J0Y19nZXRfY3J0Y19yb2koc3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSwKLQkJY29u c3Qgc3RydWN0IGRwdV9yZWN0ICoqY3J0Y19yb2kpOwotCiAjZW5kaWYgLyogX0RQVV9DUlRDX0hf ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rl ci5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXIuYwppbmRleCAz ZDE2OGZhMC4uOTFiOWUwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X2VuY29kZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVf ZW5jb2Rlci5jCkBAIC0xOTUsOCArMTk1LDYgQEAgZW51bSBkcHVfZW5jX3JjX3N0YXRlcyB7CiAg KiBAdG9wb2xvZ3k6ICAgICAgICAgICAgICAgICAgIHRvcG9sb2d5IG9mIHRoZSBkaXNwbGF5CiAg KiBAbW9kZV9zZXRfY29tcGxldGU6ICAgICAgICAgIGZsYWcgdG8gaW5kaWNhdGUgbW9kZXNldCBj b21wbGV0aW9uCiAgKiBAcnNjX2NvbmZpZzoJCQlyc2MgY29uZmlndXJhdGlvbiBmb3IgZGlzcGxh eSB2dG90YWwsIGZwcywgZXRjLgotICogQGN1cl9jb25uX3JvaToJCWN1cnJlbnQgY29ubmVjdG9y IHJvaQotICogQHBydl9jb25uX3JvaToJCXByZXZpb3VzIGNvbm5lY3RvciByb2kgdG8gb3B0aW1p emUgaWYgdW5jaGFuZ2VkCiAgKiBAaWRsZV90aW1lb3V0OgkJaWRsZSB0aW1lb3V0IGR1cmF0aW9u IGluIG1pbGxpc2Vjb25kcwogICovCiBzdHJ1Y3QgZHB1X2VuY29kZXJfdmlydCB7CkBAIC0yNDMs OCArMjQxLDYgQEAgc3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQgewogCWJvb2wgbW9kZV9zZXRfY29t cGxldGU7CiAKIAlzdHJ1Y3QgZHB1X3JzY19jbWRfY29uZmlnIHJzY19jb25maWc7Ci0Jc3RydWN0 IGRwdV9yZWN0IGN1cl9jb25uX3JvaTsKLQlzdHJ1Y3QgZHB1X3JlY3QgcHJ2X2Nvbm5fcm9pOwog CiAJdTMyIGlkbGVfdGltZW91dDsKIH07CkBAIC04NjgsMTQgKzg2NCw4IEBAIHN0YXRpYyBib29s IF9kcHVfZW5jb2Rlcl9kc2NfaWNoX3Jlc2V0X292ZXJyaWRlX25lZWRlZChib29sIHB1X2VuLAog CiBzdGF0aWMgdm9pZCBfZHB1X2VuY29kZXJfZHNjX3BpcGVfY2ZnKHN0cnVjdCBkcHVfaHdfZHNj ICpod19kc2MsCiAJCXN0cnVjdCBkcHVfaHdfcGluZ3BvbmcgKmh3X3BwLCBzdHJ1Y3QgbXNtX2Rp c3BsYXlfZHNjX2luZm8gKmRzYywKLQkJdTMyIGNvbW1vbl9tb2RlLCBib29sIGljaF9yZXNldCwg Ym9vbCBlbmFibGUpCisJCXUzMiBjb21tb25fbW9kZSwgYm9vbCBpY2hfcmVzZXQpCiB7Ci0JaWYg KCFlbmFibGUpIHsKLQkJaWYgKGh3X3BwLT5vcHMuZGlzYWJsZV9kc2MpCi0JCQlod19wcC0+b3Bz LmRpc2FibGVfZHNjKGh3X3BwKTsKLQkJcmV0dXJuOwotCX0KLQogCWlmIChod19kc2MtPm9wcy5k c2NfY29uZmlnKQogCQlod19kc2MtPm9wcy5kc2NfY29uZmlnKGh3X2RzYywgZHNjLCBjb21tb25f bW9kZSwgaWNoX3Jlc2V0KTsKIApAQCAtODg5LDQ2ICs4NzksMjcgQEAgc3RhdGljIHZvaWQgX2Rw dV9lbmNvZGVyX2RzY19waXBlX2NmZyhzdHJ1Y3QgZHB1X2h3X2RzYyAqaHdfZHNjLAogCQlod19w cC0+b3BzLmVuYWJsZV9kc2MoaHdfcHApOwogfQogCi1zdGF0aWMgdm9pZCBfZHB1X2VuY29kZXJf Z2V0X2Nvbm5lY3Rvcl9yb2koCi0JCXN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0ICpkcHVfZW5jLAot CQlzdHJ1Y3QgZHB1X3JlY3QgKm1lcmdlZF9jb25uX3JvaSkKLXsKLQlzdHJ1Y3QgZHJtX2Nvbm5l Y3RvciAqZHJtX2Nvbm47Ci0Jc3RydWN0IGRwdV9jb25uZWN0b3Jfc3RhdGUgKmNfc3RhdGU7Ci0K LQlpZiAoIWRwdV9lbmMgfHwgIW1lcmdlZF9jb25uX3JvaSkKLQkJcmV0dXJuOwotCi0JZHJtX2Nv bm4gPSBkcHVfZW5jLT5waHlzX2VuY3NbMF0tPmNvbm5lY3RvcjsKLQotCWlmICghZHJtX2Nvbm4g fHwgIWRybV9jb25uLT5zdGF0ZSkKLQkJcmV0dXJuOwotCi0JY19zdGF0ZSA9IHRvX2RwdV9jb25u ZWN0b3Jfc3RhdGUoZHJtX2Nvbm4tPnN0YXRlKTsKLQlkcHVfa21zX3JlY3RfbWVyZ2VfcmVjdGFu Z2xlcygmY19zdGF0ZS0+cm9pcywgbWVyZ2VkX2Nvbm5fcm9pKTsKLX0KLQogc3RhdGljIGludCBf ZHB1X2VuY29kZXJfZHNjX25fbG1fMV9lbmNfMV9pbnRmKHN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0 ICpkcHVfZW5jKQogewogCWludCB0aGlzX2ZyYW1lX3NsaWNlczsKIAlpbnQgaW50Zl9pcF93LCBl bmNfaXBfdzsKIAlpbnQgaWNoX3JlcywgZHNjX2NvbW1vbl9tb2RlID0gMDsKKwlpbnQgcmMgPSAw OwogCiAJc3RydWN0IGRwdV9od19waW5ncG9uZyAqaHdfcHAgPSBkcHVfZW5jLT5od19wcFswXTsK IAlzdHJ1Y3QgZHB1X2h3X2RzYyAqaHdfZHNjID0gZHB1X2VuYy0+aHdfZHNjWzBdOwogCXN0cnVj dCBkcHVfZW5jb2Rlcl9waHlzICplbmNfbWFzdGVyID0gZHB1X2VuYy0+Y3VyX21hc3RlcjsKLQlj b25zdCBzdHJ1Y3QgZHB1X3JlY3QgKnJvaSA9ICZkcHVfZW5jLT5jdXJfY29ubl9yb2k7CiAJc3Ry dWN0IG1zbV9kaXNwbGF5X2RzY19pbmZvICpkc2MgPQogCQkmZHB1X2VuYy0+bW9kZV9pbmZvLmNv bXBfaW5mby5kc2NfaW5mbzsKIAotCWlmIChkc2MgPT0gTlVMTCB8fCBod19kc2MgPT0gTlVMTCB8 fCBod19wcCA9PSBOVUxMIHx8ICFlbmNfbWFzdGVyKSB7Ci0JCURQVV9FUlJPUl9FTkMoZHB1X2Vu YywgImludmFsaWQgcGFyYW1zIGZvciBEU0NcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwlyYyA9 IF9kcHVfZW5jb2Rlcl9kc2NfdXBkYXRlX3BpY19kaW0oZHNjLCBkc2MtPnBpY193aWR0aCwKKwkJ CWRzYy0+cGljX2hlaWdodCk7CisJaWYgKHJjKSB7CisJCURQVV9FUlJPUl9FTkMoZHB1X2VuYywg ImZhaWxlZCB0byB1cGRhdGUgRFNDIHBpYyBkaW1cbiIpOworCQlyZXR1cm4gcmM7CiAJfQogCi0J X2RwdV9lbmNvZGVyX2RzY191cGRhdGVfcGljX2RpbShkc2MsIHJvaS0+dywgcm9pLT5oKTsKLQot CXRoaXNfZnJhbWVfc2xpY2VzID0gcm9pLT53IC8gZHNjLT5zbGljZV93aWR0aDsKKwl0aGlzX2Zy YW1lX3NsaWNlcyA9IGRzYy0+cGljX3dpZHRoIC8gZHNjLT5zbGljZV93aWR0aDsKIAlpbnRmX2lw X3cgPSB0aGlzX2ZyYW1lX3NsaWNlcyAqIGRzYy0+c2xpY2Vfd2lkdGg7CiAJX2RwdV9lbmNvZGVy X2RzY19wY2xrX3BhcmFtX2NhbGMoZHNjLCBpbnRmX2lwX3cpOwogCkBAIC05NDEsMjA1ICs5MTIs MTI2IEBAIHN0YXRpYyBpbnQgX2RwdV9lbmNvZGVyX2RzY19uX2xtXzFfZW5jXzFfaW50ZihzdHJ1 Y3QgZHB1X2VuY29kZXJfdmlydCAqZHB1X2VuYykKIAkJZHNjX2NvbW1vbl9tb2RlID0gRFNDX01P REVfVklERU87CiAKIAlEUFVfREVCVUdfRU5DKGRwdV9lbmMsICJwaWNfdzogJWQgcGljX2g6ICVk IG1vZGU6JWRcbiIsCi0JCXJvaS0+dywgcm9pLT5oLCBkc2NfY29tbW9uX21vZGUpOwotCURQVV9F VlQzMihEUk1JRCgmZHB1X2VuYy0+YmFzZSksIHJvaS0+dywgcm9pLT5oLCBkc2NfY29tbW9uX21v ZGUpOworCQlkc2MtPnBpY193aWR0aCwgZHNjLT5waWNfaGVpZ2h0LCBkc2NfY29tbW9uX21vZGUp OworCURQVV9FVlQzMihEUk1JRCgmZHB1X2VuYy0+YmFzZSksIGRzYy0+cGljX3dpZHRoLCBkc2Mt PnBpY19oZWlnaHQsCisJCQlkc2NfY29tbW9uX21vZGUpOwogCiAJX2RwdV9lbmNvZGVyX2RzY19w aXBlX2NmZyhod19kc2MsIGh3X3BwLCBkc2MsIGRzY19jb21tb25fbW9kZSwKLQkJCWljaF9yZXMs IHRydWUpOworCQkJaWNoX3Jlcyk7CiAKIAlyZXR1cm4gMDsKIH0KLQotc3RhdGljIGludCBfZHB1 X2VuY29kZXJfZHNjXzJfbG1fMl9lbmNfMl9pbnRmKHN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0ICpk cHVfZW5jLAotCQlzdHJ1Y3QgZHB1X2VuY29kZXJfa2lja29mZl9wYXJhbXMgKnBhcmFtcykKK3N0 YXRpYyBpbnQgX2RwdV9lbmNvZGVyX2RzY18yX2xtXzJfZW5jXzJfaW50ZihzdHJ1Y3QgZHB1X2Vu Y29kZXJfdmlydCAqZHB1X2VuYykKIHsKIAlpbnQgdGhpc19mcmFtZV9zbGljZXM7CiAJaW50IGlu dGZfaXBfdywgZW5jX2lwX3c7CiAJaW50IGljaF9yZXMsIGRzY19jb21tb25fbW9kZTsKKwlpbnQg cmMgPSAwOwogCiAJc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMgKmVuY19tYXN0ZXIgPSBkcHVfZW5j LT5jdXJfbWFzdGVyOwotCWNvbnN0IHN0cnVjdCBkcHVfcmVjdCAqcm9pID0gJmRwdV9lbmMtPmN1 cl9jb25uX3JvaTsKLQlzdHJ1Y3QgZHB1X2h3X2RzYyAqaHdfZHNjW01BWF9DSEFOTkVMU19QRVJf RU5DXTsKLQlzdHJ1Y3QgZHB1X2h3X3Bpbmdwb25nICpod19wcFtNQVhfQ0hBTk5FTFNfUEVSX0VO Q107Ci0Jc3RydWN0IG1zbV9kaXNwbGF5X2RzY19pbmZvIGRzY1tNQVhfQ0hBTk5FTFNfUEVSX0VO Q107Ci0JYm9vbCBoYWxmX3BhbmVsX3BhcnRpYWxfdXBkYXRlOwotCWludCBpOwotCi0JZm9yIChp ID0gMDsgaSA8IE1BWF9DSEFOTkVMU19QRVJfRU5DOyBpKyspIHsKLQkJaHdfcHBbaV0gPSBkcHVf ZW5jLT5od19wcFtpXTsKLQkJaHdfZHNjW2ldID0gZHB1X2VuYy0+aHdfZHNjW2ldOworCXN0cnVj dCBkcHVfaHdfZHNjICpsX2h3X2RzYyA9IGRwdV9lbmMtPmh3X2RzY1swXTsKKwlzdHJ1Y3QgZHB1 X2h3X2RzYyAqcl9od19kc2MgPSBkcHVfZW5jLT5od19kc2NbMV07CisJc3RydWN0IGRwdV9od19w aW5ncG9uZyAqbF9od19wcCA9IGRwdV9lbmMtPmh3X3BwWzBdOworCXN0cnVjdCBkcHVfaHdfcGlu Z3BvbmcgKnJfaHdfcHAgPSBkcHVfZW5jLT5od19wcFsxXTsKKwlzdHJ1Y3QgbXNtX2Rpc3BsYXlf ZHNjX2luZm8gKmRzYyA9CisJCSZkcHVfZW5jLT5tb2RlX2luZm8uY29tcF9pbmZvLmRzY19pbmZv OwogCi0JCWlmICghaHdfcHBbaV0gfHwgIWh3X2RzY1tpXSkgewotCQkJRFBVX0VSUk9SX0VOQyhk cHVfZW5jLCAiaW52YWxpZCBwYXJhbXMgZm9yIERTQ1xuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsK LQkJfQorCXJjID0gX2RwdV9lbmNvZGVyX2RzY191cGRhdGVfcGljX2RpbShkc2MsCisJCQlkc2Mt PnBpY193aWR0aCAqIGRwdV9lbmMtPmRpc3BsYXlfbnVtX29mX2hfdGlsZXMsCisJCQlkc2MtPnBp Y19oZWlnaHQpOworCWlmIChyYykgeworCQlEUFVfRVJST1JfRU5DKGRwdV9lbmMsICJmYWlsZWQg dG8gdXBkYXRlIERTQyBwaWMgZGltXG4iKTsKKwkJcmV0dXJuIHJjOwogCX0KIAotCWhhbGZfcGFu ZWxfcGFydGlhbF91cGRhdGUgPQotCQkJaHdlaWdodF9sb25nKHBhcmFtcy0+YWZmZWN0ZWRfZGlz cGxheXMpID09IDE7Ci0KLQlkc2NfY29tbW9uX21vZGUgPSAwOwotCWlmICghaGFsZl9wYW5lbF9w YXJ0aWFsX3VwZGF0ZSkKLQkJZHNjX2NvbW1vbl9tb2RlIHw9IERTQ19NT0RFX1NQTElUX1BBTkVM OwotCWlmIChlbmNfbWFzdGVyLT5pbnRmX21vZGUgPT0gSU5URl9NT0RFX1ZJREVPKQotCQlkc2Nf Y29tbW9uX21vZGUgfD0gRFNDX01PREVfVklERU87Ci0KLQltZW1jcHkoJmRzY1swXSwgJmRwdV9l bmMtPm1vZGVfaW5mby5jb21wX2luZm8uZHNjX2luZm8sIHNpemVvZihkc2NbMF0pKTsKLQltZW1j cHkoJmRzY1sxXSwgJmRwdV9lbmMtPm1vZGVfaW5mby5jb21wX2luZm8uZHNjX2luZm8sIHNpemVv Zihkc2NbMV0pKTsKIAotCS8qCi0JICogU2luY2UgYm90aCBEU0MgdXNlIHNhbWUgcGljIGRpbWVu c2lvbiwgc2V0IHNhbWUgcGljIGRpbWVuc2lvbgotCSAqIHRvIGJvdGggRFNDIHN0cnVjdHVyZXMu Ci0JICovCi0JX2RwdV9lbmNvZGVyX2RzY191cGRhdGVfcGljX2RpbSgmZHNjWzBdLCByb2ktPncs IHJvaS0+aCk7Ci0JX2RwdV9lbmNvZGVyX2RzY191cGRhdGVfcGljX2RpbSgmZHNjWzFdLCByb2kt PncsIHJvaS0+aCk7Ci0KLQl0aGlzX2ZyYW1lX3NsaWNlcyA9IHJvaS0+dyAvIGRzY1swXS5zbGlj ZV93aWR0aDsKLQlpbnRmX2lwX3cgPSB0aGlzX2ZyYW1lX3NsaWNlcyAqIGRzY1swXS5zbGljZV93 aWR0aDsKLQotCWlmICghaGFsZl9wYW5lbF9wYXJ0aWFsX3VwZGF0ZSkKLQkJaW50Zl9pcF93IC89 IDI7CisJdGhpc19mcmFtZV9zbGljZXMgPSBkc2MtPnBpY193aWR0aCAvIGRzYy0+c2xpY2Vfd2lk dGg7CisJaW50Zl9pcF93ID0gdGhpc19mcmFtZV9zbGljZXMgKiBkc2MtPnNsaWNlX3dpZHRoOwog Ci0JLyoKLQkgKiBJbiB0aGlzIHRvcG9sb2d5IHdoZW4gYm90aCBpbnRlcmZhY2VzIGFyZSBhY3Rp dmUsIHRoZXkgaGF2ZSBzYW1lCi0JICogbG9hZCBzbyBpbnRmX2lwX3cgd2lsbCBiZSBzYW1lLgot CSAqLwotCV9kcHVfZW5jb2Rlcl9kc2NfcGNsa19wYXJhbV9jYWxjKCZkc2NbMF0sIGludGZfaXBf dyk7Ci0JX2RwdV9lbmNvZGVyX2RzY19wY2xrX3BhcmFtX2NhbGMoJmRzY1sxXSwgaW50Zl9pcF93 KTsKKwlpbnRmX2lwX3cgLz0gMjsKKwlfZHB1X2VuY29kZXJfZHNjX3BjbGtfcGFyYW1fY2FsYyhk c2MsIGludGZfaXBfdyk7CiAKLQkvKgotCSAqIEluIHRoaXMgdG9wb2xvZ3ksIHNpbmNlIHRoZXJl IGlzIG5vIGRzY19tZXJnZSwgdW5jb21wcmVzc2VkIGlucHV0Ci0JICogdG8gZW5jb2RlciBhbmQg aW50ZXJmYWNlIGlzIHNhbWUuCi0JICovCiAJZW5jX2lwX3cgPSBpbnRmX2lwX3c7Ci0JX2RwdV9l bmNvZGVyX2RzY19pbml0aWFsX2xpbmVfY2FsYygmZHNjWzBdLCBlbmNfaXBfdyk7Ci0JX2RwdV9l bmNvZGVyX2RzY19pbml0aWFsX2xpbmVfY2FsYygmZHNjWzFdLCBlbmNfaXBfdyk7CisJX2RwdV9l bmNvZGVyX2RzY19pbml0aWFsX2xpbmVfY2FsYyhkc2MsIGVuY19pcF93KTsKIAotCS8qCi0JICog X19pc19pY2hfcmVzZXRfb3ZlcnJpZGVfbmVlZGVkIHNob3VsZCBiZSBjYWxsZWQgb25seSBhZnRl cgotCSAqIHVwZGF0aW5nIHBpYyBkaW1lbnNpb24sIG1kc3NfcGFuZWxfZHNjX3VwZGF0ZV9waWNf ZGltLgotCSAqLwotCWljaF9yZXMgPSBfZHB1X2VuY29kZXJfZHNjX2ljaF9yZXNldF9vdmVycmlk ZV9uZWVkZWQoCi0JCQloYWxmX3BhbmVsX3BhcnRpYWxfdXBkYXRlLCAmZHNjWzBdKTsKKwlpY2hf cmVzID0gX2RwdV9lbmNvZGVyX2RzY19pY2hfcmVzZXRfb3ZlcnJpZGVfbmVlZGVkKGZhbHNlLCBk c2MpOwogCi0JRFBVX0RFQlVHX0VOQyhkcHVfZW5jLCAicGljX3c6ICVkIHBpY19oOiAlZCBtb2Rl OiVkXG4iLAotCQkJcm9pLT53LCByb2ktPmgsIGRzY19jb21tb25fbW9kZSk7CisJZHNjX2NvbW1v bl9tb2RlID0gRFNDX01PREVfU1BMSVRfUEFORUw7CisJaWYgKGVuY19tYXN0ZXItPmludGZfbW9k ZSA9PSBJTlRGX01PREVfVklERU8pCisJCWRzY19jb21tb25fbW9kZSB8PSBEU0NfTU9ERV9WSURF TzsKIAotCWZvciAoaSA9IDA7IGkgPCBkcHVfZW5jLT5udW1fcGh5c19lbmNzOyBpKyspIHsKLQkJ Ym9vbCBhY3RpdmUgPSAhISgoMSA8PCBpKSAmIHBhcmFtcy0+YWZmZWN0ZWRfZGlzcGxheXMpOwor CURQVV9ERUJVR19FTkMoZHB1X2VuYywgInBpY193OiAlZCBwaWNfaDogJWQgbW9kZTolZFxuIiwK KwkJZHNjLT5waWNfd2lkdGgsIGRzYy0+cGljX2hlaWdodCwgZHNjX2NvbW1vbl9tb2RlKTsKKwlE UFVfRVZUMzIoRFJNSUQoJmRwdV9lbmMtPmJhc2UpLCBkc2MtPnBpY193aWR0aCwgZHNjLT5waWNf aGVpZ2h0LAorCQkJZHNjX2NvbW1vbl9tb2RlKTsKIAotCQlEUFVfRVZUMzIoRFJNSUQoJmRwdV9l bmMtPmJhc2UpLCByb2ktPncsIHJvaS0+aCwKLQkJCQlkc2NfY29tbW9uX21vZGUsIGksIGFjdGl2 ZSk7Ci0JCV9kcHVfZW5jb2Rlcl9kc2NfcGlwZV9jZmcoaHdfZHNjW2ldLCBod19wcFtpXSwgJmRz Y1tpXSwKLQkJCQlkc2NfY29tbW9uX21vZGUsIGljaF9yZXMsIGFjdGl2ZSk7Ci0JfQorCV9kcHVf ZW5jb2Rlcl9kc2NfcGlwZV9jZmcobF9od19kc2MsIGxfaHdfcHAsIGRzYywgZHNjX2NvbW1vbl9t b2RlLAorCQkJaWNoX3Jlcyk7CisJX2RwdV9lbmNvZGVyX2RzY19waXBlX2NmZyhyX2h3X2RzYywg cl9od19wcCwgZHNjLCBkc2NfY29tbW9uX21vZGUsCisJCQlpY2hfcmVzKTsKIAogCXJldHVybiAw OwogfQogCi1zdGF0aWMgaW50IF9kcHVfZW5jb2Rlcl9kc2NfMl9sbV8yX2VuY18xX2ludGYoc3Ry dWN0IGRwdV9lbmNvZGVyX3ZpcnQgKmRwdV9lbmMsCi0JCXN0cnVjdCBkcHVfZW5jb2Rlcl9raWNr b2ZmX3BhcmFtcyAqcGFyYW1zKQorc3RhdGljIGludCBfZHB1X2VuY29kZXJfZHNjXzJfbG1fMl9l bmNfMV9pbnRmKHN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0ICpkcHVfZW5jKQogewogCWludCB0aGlz X2ZyYW1lX3NsaWNlczsKIAlpbnQgaW50Zl9pcF93LCBlbmNfaXBfdzsKIAlpbnQgaWNoX3Jlcywg ZHNjX2NvbW1vbl9tb2RlOworCWludCByYyA9IDA7CiAKIAlzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5 cyAqZW5jX21hc3RlciA9IGRwdV9lbmMtPmN1cl9tYXN0ZXI7Ci0JY29uc3Qgc3RydWN0IGRwdV9y ZWN0ICpyb2kgPSAmZHB1X2VuYy0+Y3VyX2Nvbm5fcm9pOwotCXN0cnVjdCBkcHVfaHdfZHNjICpo d19kc2NbTUFYX0NIQU5ORUxTX1BFUl9FTkNdOwotCXN0cnVjdCBkcHVfaHdfcGluZ3BvbmcgKmh3 X3BwW01BWF9DSEFOTkVMU19QRVJfRU5DXTsKKwlzdHJ1Y3QgZHB1X2h3X2RzYyAqbF9od19kc2Mg PSBkcHVfZW5jLT5od19kc2NbMF07CisJc3RydWN0IGRwdV9od19kc2MgKnJfaHdfZHNjID0gZHB1 X2VuYy0+aHdfZHNjWzFdOworCXN0cnVjdCBkcHVfaHdfcGluZ3BvbmcgKmxfaHdfcHAgPSBkcHVf ZW5jLT5od19wcFswXTsKKwlzdHJ1Y3QgZHB1X2h3X3Bpbmdwb25nICpyX2h3X3BwID0gZHB1X2Vu Yy0+aHdfcHBbMV07CiAJc3RydWN0IG1zbV9kaXNwbGF5X2RzY19pbmZvICpkc2MgPQogCQkmZHB1 X2VuYy0+bW9kZV9pbmZvLmNvbXBfaW5mby5kc2NfaW5mbzsKLQlib29sIGhhbGZfcGFuZWxfcGFy dGlhbF91cGRhdGU7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTUFYX0NIQU5ORUxTX1BF Ul9FTkM7IGkrKykgewotCQlod19wcFtpXSA9IGRwdV9lbmMtPmh3X3BwW2ldOwotCQlod19kc2Nb aV0gPSBkcHVfZW5jLT5od19kc2NbaV07CiAKLQkJaWYgKCFod19wcFtpXSB8fCAhaHdfZHNjW2ld KSB7Ci0JCQlEUFVfRVJST1JfRU5DKGRwdV9lbmMsICJpbnZhbGlkIHBhcmFtcyBmb3IgRFNDXG4i KTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9CisJcmMgPSBfZHB1X2VuY29kZXJfZHNjX3VwZGF0 ZV9waWNfZGltKGRzYywgZHNjLT5waWNfd2lkdGgsCisJCQlkc2MtPnBpY19oZWlnaHQpOworCWlm IChyYykgeworCQlEUFVfRVJST1JfRU5DKGRwdV9lbmMsICJmYWlsZWQgdG8gdXBkYXRlIERTQyBw aWMgZGltXG4iKTsKKwkJcmV0dXJuIHJjOwogCX0KIAotCWhhbGZfcGFuZWxfcGFydGlhbF91cGRh dGUgPQotCQkJaHdlaWdodF9sb25nKHBhcmFtcy0+YWZmZWN0ZWRfZGlzcGxheXMpID09IDE7Ci0K LQlkc2NfY29tbW9uX21vZGUgPSAwOwotCWlmICghaGFsZl9wYW5lbF9wYXJ0aWFsX3VwZGF0ZSkK LQkJZHNjX2NvbW1vbl9tb2RlIHw9IERTQ19NT0RFX1NQTElUX1BBTkVMIHwgRFNDX01PREVfTVVM VElQTEVYOwotCWlmIChlbmNfbWFzdGVyLT5pbnRmX21vZGUgPT0gSU5URl9NT0RFX1ZJREVPKQot CQlkc2NfY29tbW9uX21vZGUgfD0gRFNDX01PREVfVklERU87Ci0KLQlfZHB1X2VuY29kZXJfZHNj X3VwZGF0ZV9waWNfZGltKGRzYywgcm9pLT53LCByb2ktPmgpOwotCi0JdGhpc19mcmFtZV9zbGlj ZXMgPSByb2ktPncgLyBkc2MtPnNsaWNlX3dpZHRoOworCXRoaXNfZnJhbWVfc2xpY2VzID0gZHNj LT5waWNfd2lkdGggLyBkc2MtPnNsaWNlX3dpZHRoOwogCWludGZfaXBfdyA9IHRoaXNfZnJhbWVf c2xpY2VzICogZHNjLT5zbGljZV93aWR0aDsKIAlfZHB1X2VuY29kZXJfZHNjX3BjbGtfcGFyYW1f Y2FsYyhkc2MsIGludGZfaXBfdyk7CiAKIAkvKgotCSAqIGRzYyBtZXJnZSBjYXNlOiB3aGVuIHVz aW5nIDIgZW5jb2RlcnMgZm9yIHRoZSBzYW1lIHN0cmVhbSwKLQkgKiBuby4gb2Ygc2xpY2VzIG5l ZWQgdG8gYmUgc2FtZSBvbiBib3RoIHRoZSBlbmNvZGVycy4KKwkgKiB3aGVuIHVzaW5nIDIgZW5j b2RlcnMgZm9yIHRoZSBzYW1lIHN0cmVhbSwgbm8uIG9mIHNsaWNlcworCSAqIG5lZWQgdG8gYmUg c2FtZSBvbiBib3RoIHRoZSBlbmNvZGVycy4KIAkgKi8KIAllbmNfaXBfdyA9IGludGZfaXBfdyAv IDI7CiAJX2RwdV9lbmNvZGVyX2RzY19pbml0aWFsX2xpbmVfY2FsYyhkc2MsIGVuY19pcF93KTsK IAotCWljaF9yZXMgPSBfZHB1X2VuY29kZXJfZHNjX2ljaF9yZXNldF9vdmVycmlkZV9uZWVkZWQo Ci0JCQloYWxmX3BhbmVsX3BhcnRpYWxfdXBkYXRlLCBkc2MpOwotCi0JRFBVX0RFQlVHX0VOQyhk cHVfZW5jLCAicGljX3c6ICVkIHBpY19oOiAlZCBtb2RlOiVkXG4iLAotCQkJcm9pLT53LCByb2kt PmgsIGRzY19jb21tb25fbW9kZSk7Ci0JRFBVX0VWVDMyKERSTUlEKCZkcHVfZW5jLT5iYXNlKSwg cm9pLT53LCByb2ktPmgsCi0JCQlkc2NfY29tbW9uX21vZGUsIGksIHBhcmFtcy0+YWZmZWN0ZWRf ZGlzcGxheXMpOwotCi0JX2RwdV9lbmNvZGVyX2RzY19waXBlX2NmZyhod19kc2NbMF0sIGh3X3Bw WzBdLCBkc2MsIGRzY19jb21tb25fbW9kZSwKLQkJCWljaF9yZXMsIHRydWUpOwotCV9kcHVfZW5j b2Rlcl9kc2NfcGlwZV9jZmcoaHdfZHNjWzFdLCBod19wcFsxXSwgZHNjLCBkc2NfY29tbW9uX21v ZGUsCi0JCQlpY2hfcmVzLCAhaGFsZl9wYW5lbF9wYXJ0aWFsX3VwZGF0ZSk7Ci0KLQlyZXR1cm4g MDsKLX0KLQotc3RhdGljIGludCBfZHB1X2VuY29kZXJfdXBkYXRlX3JvaShzdHJ1Y3QgZHJtX2Vu Y29kZXIgKmRybV9lbmMpCi17Ci0Jc3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQgKmRwdV9lbmM7Ci0J c3RydWN0IGRybV9jb25uZWN0b3IgKmRybV9jb25uOwotCXN0cnVjdCBkcm1fZGlzcGxheV9tb2Rl ICphZGpfbW9kZTsKLQlzdHJ1Y3QgZHB1X3JlY3Qgcm9pOwotCi0JaWYgKCFkcm1fZW5jIHx8ICFk cm1fZW5jLT5jcnRjIHx8ICFkcm1fZW5jLT5jcnRjLT5zdGF0ZSkKLQkJcmV0dXJuIC1FSU5WQUw7 Ci0JZHB1X2VuYyA9IHRvX2RwdV9lbmNvZGVyX3ZpcnQoZHJtX2VuYyk7Ci0KLQlpZiAoIWRwdV9l bmMtPmN1cl9tYXN0ZXIpCi0JCXJldHVybiAtRUlOVkFMOworCWljaF9yZXMgPSBfZHB1X2VuY29k ZXJfZHNjX2ljaF9yZXNldF9vdmVycmlkZV9uZWVkZWQoZmFsc2UsIGRzYyk7CiAKLQlhZGpfbW9k ZSA9ICZkcHVfZW5jLT5iYXNlLmNydGMtPnN0YXRlLT5hZGp1c3RlZF9tb2RlOwotCWRybV9jb25u ID0gZHB1X2VuYy0+Y3VyX21hc3Rlci0+Y29ubmVjdG9yOworCWRzY19jb21tb25fbW9kZSA9IERT Q19NT0RFX01VTFRJUExFWCB8IERTQ19NT0RFX1NQTElUX1BBTkVMOworCWlmIChlbmNfbWFzdGVy LT5pbnRmX21vZGUgPT0gSU5URl9NT0RFX1ZJREVPKQorCQlkc2NfY29tbW9uX21vZGUgfD0gRFND X01PREVfVklERU87CiAKLQlfZHB1X2VuY29kZXJfZ2V0X2Nvbm5lY3Rvcl9yb2koZHB1X2VuYywg JnJvaSk7Ci0JaWYgKGRwdV9rbXNfcmVjdF9pc19udWxsKCZyb2kpKSB7Ci0JCXJvaS53ID0gYWRq X21vZGUtPmhkaXNwbGF5OwotCQlyb2kuaCA9IGFkal9tb2RlLT52ZGlzcGxheTsKLQl9CisJRFBV X0RFQlVHX0VOQyhkcHVfZW5jLCAicGljX3c6ICVkIHBpY19oOiAlZCBtb2RlOiVkXG4iLAorCQlk c2MtPnBpY193aWR0aCwgZHNjLT5waWNfaGVpZ2h0LCBkc2NfY29tbW9uX21vZGUpOworCURQVV9F VlQzMihEUk1JRCgmZHB1X2VuYy0+YmFzZSksIGRzYy0+cGljX3dpZHRoLCBkc2MtPnBpY19oZWln aHQsCisJCQlkc2NfY29tbW9uX21vZGUpOwogCi0JbWVtY3B5KCZkcHVfZW5jLT5wcnZfY29ubl9y b2ksICZkcHVfZW5jLT5jdXJfY29ubl9yb2ksCi0JCQlzaXplb2YoZHB1X2VuYy0+cHJ2X2Nvbm5f cm9pKSk7Ci0JbWVtY3B5KCZkcHVfZW5jLT5jdXJfY29ubl9yb2ksICZyb2ksIHNpemVvZihkcHVf ZW5jLT5jdXJfY29ubl9yb2kpKTsKKwlfZHB1X2VuY29kZXJfZHNjX3BpcGVfY2ZnKGxfaHdfZHNj LCBsX2h3X3BwLCBkc2MsIGRzY19jb21tb25fbW9kZSwKKwkJCWljaF9yZXMpOworCV9kcHVfZW5j b2Rlcl9kc2NfcGlwZV9jZmcocl9od19kc2MsIHJfaHdfcHAsIGRzYywgZHNjX2NvbW1vbl9tb2Rl LAorCQkJaWNoX3Jlcyk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfZHB1X2VuY29k ZXJfZHNjX3NldHVwKHN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0ICpkcHVfZW5jLAotCQlzdHJ1Y3Qg ZHB1X2VuY29kZXJfa2lja29mZl9wYXJhbXMgKnBhcmFtcykKK3N0YXRpYyBpbnQgX2RwdV9lbmNv ZGVyX2RzY19zZXR1cChzdHJ1Y3QgZHB1X2VuY29kZXJfdmlydCAqZHB1X2VuYykKIHsKIAllbnVt IGRwdV9ybV90b3BvbG9neV9uYW1lIHRvcG9sb2d5OwogCXN0cnVjdCBkcm1fY29ubmVjdG9yICpk cm1fY29ubjsKIAlpbnQgcmV0ID0gMDsKIAotCWlmICghZHB1X2VuYyB8fCAhcGFyYW1zIHx8ICFk cHVfZW5jLT5waHlzX2VuY3NbMF0gfHwKLQkJCSFkcHVfZW5jLT5waHlzX2VuY3NbMF0tPmNvbm5l Y3RvcikKKwlpZiAoIWRwdV9lbmMpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJZHJtX2Nvbm4gPSBk cHVfZW5jLT5waHlzX2VuY3NbMF0tPmNvbm5lY3RvcjsKQEAgLTExNTMsMjAgKzEwNDUsMTYgQEAg c3RhdGljIGludCBfZHB1X2VuY29kZXJfZHNjX3NldHVwKHN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0 ICpkcHVfZW5jLAogCURQVV9ERUJVR19FTkMoZHB1X2VuYywgInRvcG9sb2d5OiVkXG4iLCB0b3Bv bG9neSk7CiAJRFBVX0VWVDMyKERSTUlEKCZkcHVfZW5jLT5iYXNlKSk7CiAKLQlpZiAoZHB1X2tt c19yZWN0X2lzX2VxdWFsKCZkcHVfZW5jLT5jdXJfY29ubl9yb2ksCi0JCQkmZHB1X2VuYy0+cHJ2 X2Nvbm5fcm9pKSkKLQkJcmV0dXJuIHJldDsKLQogCXN3aXRjaCAodG9wb2xvZ3kpIHsKIAljYXNl IERQVV9STV9UT1BPTE9HWV9TSU5HTEVQSVBFX0RTQzoKIAljYXNlIERQVV9STV9UT1BPTE9HWV9E VUFMUElQRV8zRE1FUkdFX0RTQzoKIAkJcmV0ID0gX2RwdV9lbmNvZGVyX2RzY19uX2xtXzFfZW5j XzFfaW50ZihkcHVfZW5jKTsKIAkJYnJlYWs7CiAJY2FzZSBEUFVfUk1fVE9QT0xPR1lfRFVBTFBJ UEVfRFNDTUVSR0U6Ci0JCXJldCA9IF9kcHVfZW5jb2Rlcl9kc2NfMl9sbV8yX2VuY18xX2ludGYo ZHB1X2VuYywgcGFyYW1zKTsKKwkJcmV0ID0gX2RwdV9lbmNvZGVyX2RzY18yX2xtXzJfZW5jXzFf aW50ZihkcHVfZW5jKTsKIAkJYnJlYWs7CiAJY2FzZSBEUFVfUk1fVE9QT0xPR1lfRFVBTFBJUEVf RFNDOgotCQlyZXQgPSBfZHB1X2VuY29kZXJfZHNjXzJfbG1fMl9lbmNfMl9pbnRmKGRwdV9lbmMs IHBhcmFtcyk7CisJCXJldCA9IF9kcHVfZW5jb2Rlcl9kc2NfMl9sbV8yX2VuY18yX2ludGYoZHB1 X2VuYyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCURQVV9FUlJPUl9FTkMoZHB1X2VuYywgIk5v IERTQyBzdXBwb3J0IGZvciB0b3BvbG9neSAlZCIsCkBAIC0xNDI5LDcgKzEzMTcsOCBAQCBzdGF0 aWMgaW50IF9kcHVfZW5jb2Rlcl91cGRhdGVfcnNjX2NsaWVudCgKIAl9CiAKIAlpZiAoY3J0Yy0+ YmFzZS5pZCAhPSB3YWl0X3ZibGFua19jcnRjX2lkKSB7Ci0JCXByaW1hcnlfY3J0YyA9IGRybV9j cnRjX2ZpbmQoZHJtX2VuYy0+ZGV2LCBOVUxMLCB3YWl0X3ZibGFua19jcnRjX2lkKTsKKwkJcHJp bWFyeV9jcnRjID0gZHJtX2NydGNfZmluZChkcm1fZW5jLT5kZXYsIE5VTEwsCisJCQkJd2FpdF92 YmxhbmtfY3J0Y19pZCk7CiAJCWlmICghcHJpbWFyeV9jcnRjKSB7CiAJCQlEUFVfRVJST1JfRU5D KGRwdV9lbmMsCiAJCQkJCSJmYWlsZWQgdG8gZmluZCBwcmltYXJ5IGNydGMgaWQgJWRcbiIsCkBA IC0yMDczLDkgKzE5NjIsNiBAQCBzdGF0aWMgdm9pZCBfZHB1X2VuY29kZXJfdmlydF9lbmFibGVf aGVscGVyKHN0cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYykKIAkJCQlkcHVfa21zLT5jYXRhbG9n KTsKIAogCV9kcHVfZW5jb2Rlcl91cGRhdGVfdnN5bmNfc291cmNlKGRwdV9lbmMsICZkcHVfZW5j LT5kaXNwX2luZm8sIGZhbHNlKTsKLQotCW1lbXNldCgmZHB1X2VuYy0+cHJ2X2Nvbm5fcm9pLCAw LCBzaXplb2YoZHB1X2VuYy0+cHJ2X2Nvbm5fcm9pKSk7Ci0JbWVtc2V0KCZkcHVfZW5jLT5jdXJf Y29ubl9yb2ksIDAsIHNpemVvZihkcHVfZW5jLT5jdXJfY29ubl9yb2kpKTsKIH0KIAogdm9pZCBk cHVfZW5jb2Rlcl92aXJ0X3Jlc3RvcmUoc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jKQpAQCAt Mjk0NSw3ICsyODMxLDggQEAgc3RhdGljIGludCBfZHB1X2VuY29kZXJfd2FrZXVwX3RpbWUoc3Ry dWN0IGRybV9lbmNvZGVyICpkcm1fZW5jLAogCiBzdGF0aWMgdm9pZCBkcHVfZW5jb2Rlcl92c3lu Y19ldmVudF9oYW5kbGVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KQogewotCXN0cnVjdCBkcHVfZW5j b2Rlcl92aXJ0ICpkcHVfZW5jID0gZnJvbV90aW1lcihkcHVfZW5jLCB0LCB2c3luY19ldmVudF90 aW1lcik7CisJc3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQgKmRwdV9lbmMgPSBmcm9tX3RpbWVyKGRw dV9lbmMsIHQsCisJCQl2c3luY19ldmVudF90aW1lcik7CiAJc3RydWN0IGRybV9lbmNvZGVyICpk cm1fZW5jID0gJmRwdV9lbmMtPmJhc2U7CiAJc3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdjsK IAlzdHJ1Y3QgbXNtX2RybV90aHJlYWQgKmV2ZW50X3RocmVhZDsKQEAgLTMwNTMsOCArMjk0MCw2 IEBAIHZvaWQgZHB1X2VuY29kZXJfcHJlcGFyZV9mb3Jfa2lja29mZihzdHJ1Y3QgZHJtX2VuY29k ZXIgKmRybV9lbmMsCiAKIAlfZHB1X2VuY29kZXJfdXBkYXRlX21hc3Rlcihkcm1fZW5jLCBwYXJh bXMpOwogCi0JX2RwdV9lbmNvZGVyX3VwZGF0ZV9yb2koZHJtX2VuYyk7Ci0KIAlpZiAoZHB1X2Vu Yy0+Y3VyX21hc3RlciAmJiBkcHVfZW5jLT5jdXJfbWFzdGVyLT5jb25uZWN0b3IpIHsKIAkJcmMg PSBkcHVfY29ubmVjdG9yX3ByZV9raWNrb2ZmKGRwdV9lbmMtPmN1cl9tYXN0ZXItPmNvbm5lY3Rv cik7CiAJCWlmIChyYykKQEAgLTMwNjQsNyArMjk0OSw3IEBAIHZvaWQgZHB1X2VuY29kZXJfcHJl cGFyZV9mb3Jfa2lja29mZihzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmMsCiAJfQogCiAJaWYg KGRwdV9lbmNvZGVyX2lzX2RzY19lbmFibGVkKGRybV9lbmMpKSB7Ci0JCXJjID0gX2RwdV9lbmNv ZGVyX2RzY19zZXR1cChkcHVfZW5jLCBwYXJhbXMpOworCQlyYyA9IF9kcHVfZW5jb2Rlcl9kc2Nf c2V0dXAoZHB1X2VuYyk7CiAJCWlmIChyYykKIAkJCURQVV9FUlJPUl9FTkMoZHB1X2VuYywgImZh aWxlZCB0byBzZXR1cCBEU0M6ICVkXG4iLCByYyk7CiAJfQpAQCAtMzY1NCw3ICszNTM5LDggQEAg c3RhdGljIGludCBkcHVfZW5jb2Rlcl9zZXR1cF9kaXNwbGF5KHN0cnVjdCBkcHVfZW5jb2Rlcl92 aXJ0ICpkcHVfZW5jLAogCiBzdGF0aWMgdm9pZCBkcHVfZW5jb2Rlcl9mcmFtZV9kb25lX3RpbWVv dXQoc3RydWN0IHRpbWVyX2xpc3QgKnQpCiB7Ci0Jc3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQgKmRw dV9lbmMgPSBmcm9tX3RpbWVyKGRwdV9lbmMsIHQsIGZyYW1lX2RvbmVfdGltZXIpOworCXN0cnVj dCBkcHVfZW5jb2Rlcl92aXJ0ICpkcHVfZW5jID0gZnJvbV90aW1lcihkcHVfZW5jLCB0LAorCQkJ ZnJhbWVfZG9uZV90aW1lcik7CiAJc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jID0gJmRwdV9l bmMtPmJhc2U7CiAJc3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdjsKIAl1MzIgZXZlbnQ7CkBA IC0zNzI2LDcgKzM2MTIsOCBAQCBzdHJ1Y3QgZHJtX2VuY29kZXIgKmRwdV9lbmNvZGVyX2luaXQo CiAJZHJtX2VuY29kZXJfaGVscGVyX2FkZChkcm1fZW5jLCAmZHB1X2VuY29kZXJfaGVscGVyX2Z1 bmNzKTsKIAogCWF0b21pY19zZXQoJmRwdV9lbmMtPmZyYW1lX2RvbmVfdGltZW91dCwgMCk7Ci0J dGltZXJfc2V0dXAoJmRwdV9lbmMtPmZyYW1lX2RvbmVfdGltZXIsIGRwdV9lbmNvZGVyX2ZyYW1l X2RvbmVfdGltZW91dCwgMCk7CisJdGltZXJfc2V0dXAoJmRwdV9lbmMtPmZyYW1lX2RvbmVfdGlt ZXIsCisJCQlkcHVfZW5jb2Rlcl9mcmFtZV9kb25lX3RpbWVvdXQsIDApOwogCiAJaWYgKChkaXNw X2luZm8tPmludGZfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfRFNJKSAmJgogCQkJZGlzcF9p bmZvLT5pc19wcmltYXJ5KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X2ttcy5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2ttcy5oCmlu ZGV4IDYyZTdjNWMuLmQxMWZiMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlz cC9kcHUxL2RwdV9rbXMuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVf a21zLmgKQEAgLTQ1NCwxNCArNDU0LDYgQEAgdm9pZCBkcHVfa21zX3JlY3RfaW50ZXJzZWN0KGNv bnN0IHN0cnVjdCBkcHVfcmVjdCAqcjEsCiAJCXN0cnVjdCBkcHVfcmVjdCAqcmVzdWx0KTsKIAog LyoqCi0gKiBkcHVfa21zX3JlY3RfbWVyZ2VfcmVjdGFuZ2xlcyAtIG1lcmdlIGEgcmVjdGFuZ2xl IGxpc3QgaW50byBvbmUgcmVjdAotICogQHJvaXM6IHBvaW50ZXIgdG8gdGhlIGxpc3Qgb2Ygcm9p cwotICogQHJlc3VsdDogb3V0cHV0IHJlY3RhbmdsZSwgYWxsIDAgb24gZXJyb3IKLSAqLwotdm9p ZCBkcHVfa21zX3JlY3RfbWVyZ2VfcmVjdGFuZ2xlcyhjb25zdCBzdHJ1Y3QgbXNtX3JvaV9saXN0 ICpyb2lzLAotCQlzdHJ1Y3QgZHB1X3JlY3QgKnJlc3VsdCk7Ci0KLS8qKgogICogZHB1X2ttc19y ZWN0X2lzX2VxdWFsIC0gY29tcGFyZXMgdHdvIHJlY3RzCiAgKiBAcjE6IHJlY3QgdmFsdWUgdG8g Y29tcGFyZQogICogQHIyOiByZWN0IHZhbHVlIHRvIGNvbXBhcmUKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9rbXNfdXRpbHMuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZGlzcC9kcHUxL2RwdV9rbXNfdXRpbHMuYwppbmRleCAwMDZkN2FkLi40MGUwMTYyIDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfa21zX3V0aWxzLmMK KysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2ttc191dGlscy5jCkBAIC0x NzYsNDUgKzE3NiwzIEBAIHZvaWQgZHB1X2ttc19yZWN0X2ludGVyc2VjdChjb25zdCBzdHJ1Y3Qg ZHB1X3JlY3QgKnIxLAogCX0KIH0KIAotdm9pZCBkcHVfa21zX3JlY3RfbWVyZ2VfcmVjdGFuZ2xl cyhjb25zdCBzdHJ1Y3QgbXNtX3JvaV9saXN0ICpyb2lzLAotCQlzdHJ1Y3QgZHB1X3JlY3QgKnJl c3VsdCkKLXsKLQlzdHJ1Y3QgZHJtX2NsaXBfcmVjdCBjbGlwOwotCWNvbnN0IHN0cnVjdCBkcm1f Y2xpcF9yZWN0ICpyb2lfcmVjdDsKLQlpbnQgaTsKLQotCWlmICghcm9pcyB8fCAhcmVzdWx0KQot CQlyZXR1cm47Ci0KLQltZW1zZXQocmVzdWx0LCAwLCBzaXplb2YoKnJlc3VsdCkpOwotCi0JLyog aW5pdCB0byBpbnZhbGlkIHJhbmdlIG1heGVzICovCi0JY2xpcC54MSA9IH4wOwotCWNsaXAueTEg PSB+MDsKLQljbGlwLngyID0gMDsKLQljbGlwLnkyID0gMDsKLQotCS8qIGFnZ3JlZ2F0ZSBhbGwg Y2xpcHBpbmcgcmVjdGFuZ2xlcyB0b2dldGhlciBmb3Igb3ZlcmFsbCByb2kgKi8KLQlmb3IgKGkg PSAwOyBpIDwgcm9pcy0+bnVtX3JlY3RzOyBpKyspIHsKLQkJcm9pX3JlY3QgPSAmcm9pcy0+cm9p W2ldOwotCi0JCWNsaXAueDEgPSBtaW4oY2xpcC54MSwgcm9pX3JlY3QtPngxKTsKLQkJY2xpcC55 MSA9IG1pbihjbGlwLnkxLCByb2lfcmVjdC0+eTEpOwotCQljbGlwLngyID0gbWF4KGNsaXAueDIs IHJvaV9yZWN0LT54Mik7Ci0JCWNsaXAueTIgPSBtYXgoY2xpcC55Miwgcm9pX3JlY3QtPnkyKTsK LQotCQlEUFVfREVCVUcoInJvaSVkICglZCwlZCksKCVkLCVkKSAtPiBjcnRjICglZCwlZCksKCVk LCVkKVxuIiwgaSwKLQkJCQlyb2lfcmVjdC0+eDEsIHJvaV9yZWN0LT55MSwKLQkJCQlyb2lfcmVj dC0+eDIsIHJvaV9yZWN0LT55MiwKLQkJCQljbGlwLngxLCBjbGlwLnkxLAotCQkJCWNsaXAueDIs IGNsaXAueTIpOwotCX0KLQotCWlmIChjbGlwLngyICAmJiBjbGlwLnkyKSB7Ci0JCXJlc3VsdC0+ eCA9IGNsaXAueDE7Ci0JCXJlc3VsdC0+eSA9IGNsaXAueTE7Ci0JCXJlc3VsdC0+dyA9IGNsaXAu eDIgLSBjbGlwLngxOwotCQlyZXN1bHQtPmggPSBjbGlwLnkyIC0gY2xpcC55MTsKLQl9Ci19Ci0K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9wbGFuZS5jIGIv ZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3BsYW5lLmMKaW5kZXggODM0ZGNjMC4u OWU5YzlkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3Bs YW5lLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3BsYW5lLmMKQEAg LTMyNDMsNyArMzI0Myw2IEBAIHN0YXRpYyBpbnQgZHB1X3BsYW5lX3NzcHBfYXRvbWljX3VwZGF0 ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CiAJc3Ry dWN0IGRybV9mcmFtZWJ1ZmZlciAqZmI7CiAJc3RydWN0IGRwdV9yZWN0IHNyYywgZHN0OwotCWNv bnN0IHN0cnVjdCBkcHVfcmVjdCAqY3J0Y19yb2k7CiAJYm9vbCBxMTZfZGF0YSA9IHRydWU7CiAJ aW50IGlkeDsKIApAQCAtMzM1NywxMSArMzM1Niw2IEBAIHN0YXRpYyBpbnQgZHB1X3BsYW5lX3Nz cHBfYXRvbWljX3VwZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAlfZHB1X3BsYW5lX3Nz cHBfYXRvbWljX2NoZWNrX21vZGVfY2hhbmdlZChwZHB1LCBzdGF0ZSwKIAkJCQkJCQkJb2xkX3N0 YXRlKTsKIAotCS8qIHJlLXByb2dyYW0gdGhlIG91dHB1dCByZWN0cyBhbHdheXMgaW4gdGhlIGNh c2Ugb2YgcGFydGlhbCB1cGRhdGUgKi8KLQlkcHVfY3J0Y19nZXRfY3J0Y19yb2koY3J0Yy0+c3Rh dGUsICZjcnRjX3JvaSk7Ci0JaWYgKCFkcHVfa21zX3JlY3RfaXNfbnVsbChjcnRjX3JvaSkpCi0J CXBzdGF0ZS0+ZGlydHkgfD0gRFBVX1BMQU5FX0RJUlRZX1JFQ1RTOwotCiAJaWYgKHBzdGF0ZS0+ ZGlydHkgJiBEUFVfUExBTkVfRElSVFlfUkVDVFMpCiAJCW1lbXNldCgmKHBkcHUtPnBpcGVfY2Zn KSwgMCwgc2l6ZW9mKHN0cnVjdCBkcHVfaHdfcGlwZV9jZmcpKTsKIApAQCAtMzM5OSwxMyArMzM5 Myw2IEBAIHN0YXRpYyBpbnQgZHB1X3BsYW5lX3NzcHBfYXRvbWljX3VwZGF0ZShzdHJ1Y3QgZHJt X3BsYW5lICpwbGFuZSwKIAkJCXNyYy55ICY9IH4weDE7CiAJCX0KIAotCQkvKgotCQkgKiBhZGp1 c3QgbGF5ZXIgbWl4ZXIgcG9zaXRpb24gb2YgdGhlIHNzcHAgaW4gdGhlIHByZXNlbmNlCi0JCSAq IG9mIGEgcGFydGlhbCB1cGRhdGUgdG8gdGhlIGFjdGl2ZSBsbSBvcmlnaW4KLQkJICovCi0JCWRz dC54IC09IGNydGNfcm9pLT54OwotCQlkc3QueSAtPSBjcnRjX3JvaS0+eTsKLQogCQlwZHB1LT5w aXBlX2NmZy5zcmNfcmVjdCA9IHNyYzsKIAkJcGRwdS0+cGlwZV9jZmcuZHN0X3JlY3QgPSBkc3Q7 CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5oIGIvZHJpdmVycy9n cHUvZHJtL21zbS9tc21fZHJ2LmgKaW5kZXggZDhlMDkwZi4uODU3NGYzMCAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9t c21fZHJ2LmgKQEAgLTE0NCw3ICsxNDQsNiBAQCBlbnVtIG1zbV9tZHBfY3J0Y19wcm9wZXJ0eSB7 CiAJQ1JUQ19QUk9QX0RSQU1fSUIsCiAJQ1JUQ19QUk9QX1JPVF9QUkVGSUxMX0JXLAogCUNSVENf UFJPUF9ST1RfQ0xLLAotCUNSVENfUFJPUF9ST0lfVjEsCiAJQ1JUQ19QUk9QX0lETEVfVElNRU9V VCwKIAlDUlRDX1BST1BfREVTVF9TQ0FMRVIsCiAKQEAgLTE2OCw3ICsxNjcsNiBAQCBlbnVtIG1z bV9tZHBfY29ubl9wcm9wZXJ0eSB7CiAJQ09OTkVDVE9SX1BST1BfRFNUX1ksCiAJQ09OTkVDVE9S X1BST1BfRFNUX1csCiAJQ09OTkVDVE9SX1BST1BfRFNUX0gsCi0JQ09OTkVDVE9SX1BST1BfUk9J X1YxLAogCUNPTk5FQ1RPUl9QUk9QX0JMX1NDQUxFLAogCUNPTk5FQ1RPUl9QUk9QX0FEX0JMX1ND QUxFLAogCkBAIC0yMjgsMzggKzIyNiw2IEBAIGVudW0gbXNtX2V2ZW50X3dhaXQgewogfTsKIAog LyoqCi0gKiBzdHJ1Y3QgbXNtX3JvaV9hbGlnbm1lbnQgLSByZWdpb24gb2YgaW50ZXJlc3QgYWxp Z25tZW50IHJlc3RyaWN0aW9ucwotICogQHhzdGFydF9waXhfYWxpZ246IGxlZnQgeCBvZmZzZXQg YWxpZ25tZW50IHJlc3RyaWN0aW9uCi0gKiBAd2lkdGhfcGl4X2FsaWduOiB3aWR0aCBhbGlnbm1l bnQgcmVzdHJpY3Rpb24KLSAqIEB5c3RhcnRfcGl4X2FsaWduOiB0b3AgeSBvZmZzZXQgYWxpZ25t ZW50IHJlc3RyaWN0aW9uCi0gKiBAaGVpZ2h0X3BpeF9hbGlnbjogaGVpZ2h0IGFsaWdubWVudCBy ZXN0cmljdGlvbgotICogQG1pbl93aWR0aDogbWluaW11bSB3aWR0aCByZXN0cmljdGlvbgotICog QG1pbl9oZWlnaHQ6IG1pbmltdW0gaGVpZ2h0IHJlc3RyaWN0aW9uCi0gKi8KLXN0cnVjdCBtc21f cm9pX2FsaWdubWVudCB7Ci0JdWludDMyX3QgeHN0YXJ0X3BpeF9hbGlnbjsKLQl1aW50MzJfdCB3 aWR0aF9waXhfYWxpZ247Ci0JdWludDMyX3QgeXN0YXJ0X3BpeF9hbGlnbjsKLQl1aW50MzJfdCBo ZWlnaHRfcGl4X2FsaWduOwotCXVpbnQzMl90IG1pbl93aWR0aDsKLQl1aW50MzJfdCBtaW5faGVp Z2h0OwotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgbXNtX3JvaV9jYXBzIC0gZGlzcGxheSdzIHJlZ2lv biBvZiBpbnRlcmVzdCBjYXBhYmlsaXRpZXMKLSAqIEBlbmFibGVkOiB0cnVlIGlmIHNvbWUgcmVn aW9uIG9mIGludGVyZXN0IGlzIHN1cHBvcnRlZAotICogQG1lcmdlX3JvaXM6IG1lcmdlIHJvaXMg YmVmb3JlIHNlbmRpbmcgdG8gZGlzcGxheQotICogQG51bV9yb2k6IG1heGltdW0gbnVtYmVyIG9m IHJvaXMgc3VwcG9ydGVkCi0gKiBAYWxpZ246IHJvaSBhbGlnbm1lbnQgcmVzdHJpY3Rpb25zCi0g Ki8KLXN0cnVjdCBtc21fcm9pX2NhcHMgewotCWJvb2wgZW5hYmxlZDsKLQlib29sIG1lcmdlX3Jv aXM7Ci0JdWludDMyX3QgbnVtX3JvaTsKLQlzdHJ1Y3QgbXNtX3JvaV9hbGlnbm1lbnQgYWxpZ247 Ci19OwotCi0vKioKICAqIHN0cnVjdCBtc21fZGlzcGxheV9kc2NfaW5mbyAtIGRlZmluZXMgZHNj IGNvbmZpZ3VyYXRpb24KICAqIEB2ZXJzaW9uOiAgICAgICAgICAgICAgICAgRFNDIHZlcnNpb24u CiAgKiBAc2NyX3JldjogICAgICAgICAgICAgICAgIERTQyByZXZpc2lvbi4KQEAgLTQyNyw3ICsz OTMsNiBAQCBzdHJ1Y3QgbXNtX21vZGVfaW5mbyB7CiAgKiBAaXNfcHJpbWFyeTogICAgICAgICBT ZXQgdG8gdHJ1ZSBpZiBkaXNwbGF5IGlzIHByaW1hcnkgZGlzcGxheQogICogQGlzX3RlX3VzaW5n X3dhdGNoZG9nX3RpbWVyOiAgQm9vbGVhbiB0byBpbmRpY2F0ZSB3YXRjaGRvZyBURSBpcwogICoJ CQkJIHVzZWQgaW5zdGVhZCBvZiBwYW5lbCBURSBpbiBjbWQgbW9kZSBwYW5lbHMKLSAqIEByb2lf Y2FwczogICAgICAgICAgIFJlZ2lvbiBvZiBpbnRlcmVzdCBjYXBhYmlsaXR5IGluZm8KICAqLwog c3RydWN0IG1zbV9kaXNwbGF5X2luZm8gewogCWludCBpbnRmX3R5cGU7CkBAIC00NDYsMjcgKzQx MSw2IEBAIHN0cnVjdCBtc21fZGlzcGxheV9pbmZvIHsKIAogCWJvb2wgaXNfcHJpbWFyeTsKIAli b29sIGlzX3RlX3VzaW5nX3dhdGNoZG9nX3RpbWVyOwotCXN0cnVjdCBtc21fcm9pX2NhcHMgcm9p X2NhcHM7Ci19OwotCi0jZGVmaW5lIE1TTV9NQVhfUk9JCTQKLQotLyoqCi0gKiBzdHJ1Y3QgbXNt X3JvaV9saXN0IC0gbGlzdCBvZiByZWdpb25zIG9mIGludGVyZXN0IGZvciBhIGRybSBvYmplY3QK LSAqIEBudW1fcmVjdHM6IG51bWJlciBvZiB2YWxpZCByZWN0YW5nbGVzIGluIHRoZSByb2kgYXJy YXkKLSAqIEByb2k6IGxpc3Qgb2Ygcm9pIHJlY3RhbmdsZXMKLSAqLwotc3RydWN0IG1zbV9yb2lf bGlzdCB7Ci0JdWludDMyX3QgbnVtX3JlY3RzOwotCXN0cnVjdCBkcm1fY2xpcF9yZWN0IHJvaVtN U01fTUFYX1JPSV07Ci19OwotCi0vKioKLSAqIHN0cnVjdCAtIG1zbV9kaXNwbGF5X2tpY2tvZmZf cGFyYW1zIC0gaW5mbyBmb3IgZGlzcGxheSBmZWF0dXJlcyBhdCBraWNrb2ZmCi0gKiBAcm9pczog UmVnaW9ucyBvZiBpbnRlcmVzdCBzdHJ1Y3R1cmUgZm9yIG1hcHBpbmcgQ1JUQyB0byBDb25uZWN0 b3Igb3V0cHV0Ci0gKi8KLXN0cnVjdCBtc21fZGlzcGxheV9raWNrb2ZmX3BhcmFtcyB7Ci0Jc3Ry dWN0IG1zbV9yb2lfbGlzdCAqcm9pczsKIH07CiAKIC8qKgotLSAKVGhlIFF1YWxjb21tIElubm92 YXRpb24gQ2VudGVyLCBJbmMuIGlzIGEgbWVtYmVyIG9mIHRoZSBDb2RlIEF1cm9yYSBGb3J1bSwK YSBMaW51eCBGb3VuZGF0aW9uIENvbGxhYm9yYXRpdmUgUHJvamVjdAoKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRnJlZWRyZW5vIG1haWxpbmcgbGlzdApG cmVlZHJlbm9AbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vZnJlZWRyZW5vCg==