From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ander Conselvan de Oliveira Subject: [PATCH 06/15] drm/i915: Move generic link training code to a separate file Date: Mon, 5 Oct 2015 10:01:18 +0300 Message-ID: <1444028487-6501-7-git-send-email-ander.conselvan.de.oliveira@intel.com> References: <1444028487-6501-1-git-send-email-ander.conselvan.de.oliveira@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTP id 9D6816E4AF for ; Mon, 5 Oct 2015 00:02:02 -0700 (PDT) In-Reply-To: <1444028487-6501-1-git-send-email-ander.conselvan.de.oliveira@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org Cc: Ander Conselvan de Oliveira List-Id: intel-gfx@lists.freedesktop.org Tm8gZnVuY3Rpb25hbCBjaGFuZ2VzLCBqdXN0IG1vdmluZyBjb2RlIGFyb3VuZC4KClNpZ25lZC1v ZmYtYnk6IEFuZGVyIENvbnNlbHZhbiBkZSBPbGl2ZWlyYSA8YW5kZXIuY29uc2VsdmFuLmRlLm9s aXZlaXJhQGludGVsLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSAgICAg ICAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYyAgICAg ICAgICAgICAgIHwgMzI4ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2RwX2xpbmtfdHJhaW5pbmcuYyB8IDMzNiArKysrKysrKysrKysrKysrKysr KysrKysrKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggICAgICAgICAgICAgIHwg IDE2ICsrCiA0IGZpbGVzIGNoYW5nZWQsIDM2MiBpbnNlcnRpb25zKCspLCAzMTkgZGVsZXRpb25z KC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHBfbGlu a190cmFpbmluZy5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQppbmRleCA0NGQyOTBhLi4wODUxZGUwNyAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvTWFrZWZpbGUKQEAgLTc3LDYgKzc3LDcgQEAgaTkxNS15ICs9IGR2b19jaDcw MTcubyBcCiAJICBkdm9fdGZwNDEwLm8gXAogCSAgaW50ZWxfY3J0Lm8gXAogCSAgaW50ZWxfZGRp Lm8gXAorCSAgaW50ZWxfZHBfbGlua190cmFpbmluZy5vIFwKIAkgIGludGVsX2RwX21zdC5vIFwK IAkgIGludGVsX2RwLm8gXAogCSAgaW50ZWxfZHNpLm8gXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZHAuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMK aW5kZXggNDY1Mzc4Ny4uNjE5YjQyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfZHAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jCkBAIC0xMTg5 LDcgKzExODksNyBAQCBpbnRlbF9kcF9zaW5rX3JhdGVzKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxf ZHAsIGNvbnN0IGludCAqKnNpbmtfcmF0ZXMpCiAJcmV0dXJuIChpbnRlbF9kcF9tYXhfbGlua19i dyhpbnRlbF9kcCkgPj4gMykgKyAxOwogfQogCi1zdGF0aWMgYm9vbCBpbnRlbF9kcF9zb3VyY2Vf c3VwcG9ydHNfaGJyMihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQorYm9vbCBpbnRlbF9kcF9zb3Vy Y2Vfc3VwcG9ydHNfaGJyMihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCS8qIFdhRGlzYWJs ZUhCUjI6c2tsICovCiAJaWYgKElTX1NLWUxBS0UoZGV2KSAmJiBJTlRFTF9SRVZJRChkZXYpIDw9 IFNLTF9SRVZJRF9CMCkKQEAgLTEzNjUsOCArMTM2NSw4IEBAIGludCBpbnRlbF9kcF9yYXRlX3Nl bGVjdChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLCBpbnQgcmF0ZSkKIAlyZXR1cm4gcmF0ZV90 b19pbmRleChyYXRlLCBpbnRlbF9kcC0+c2lua19yYXRlcyk7CiB9CiAKLXN0YXRpYyB2b2lkIGlu dGVsX2RwX2NvbXB1dGVfcmF0ZShzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLCBpbnQgcG9ydF9j bG9jaywKLQkJCQkgIHVpbnQ4X3QgKmxpbmtfYncsIHVpbnQ4X3QgKnJhdGVfc2VsZWN0KQordm9p ZCBpbnRlbF9kcF9jb21wdXRlX3JhdGUoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwgaW50IHBv cnRfY2xvY2ssCisJCQkgICB1aW50OF90ICpsaW5rX2J3LCB1aW50OF90ICpyYXRlX3NlbGVjdCkK IHsKIAlpZiAoaW50ZWxfZHAtPm51bV9zaW5rX3JhdGVzKSB7CiAJCSpsaW5rX2J3ID0gMDsKQEAg LTMwNDYsNyArMzA0Niw3IEBAIGludGVsX2RwX2RwY2RfcmVhZF93YWtlKHN0cnVjdCBkcm1fZHBf YXV4ICphdXgsIHVuc2lnbmVkIGludCBvZmZzZXQsCiAgKiBGZXRjaCBBVVggQ0ggcmVnaXN0ZXJz IDB4MjAyIC0gMHgyMDcgd2hpY2ggY29udGFpbgogICogbGluayBzdGF0dXMgaW5mb3JtYXRpb24K ICAqLwotc3RhdGljIGJvb2wKK2Jvb2wKIGludGVsX2RwX2dldF9saW5rX3N0YXR1cyhzdHJ1Y3Qg aW50ZWxfZHAgKmludGVsX2RwLCB1aW50OF90IGxpbmtfc3RhdHVzW0RQX0xJTktfU1RBVFVTX1NJ WkVdKQogewogCXJldHVybiBpbnRlbF9kcF9kcGNkX3JlYWRfd2FrZSgmaW50ZWxfZHAtPmF1eCwK QEAgLTMwNTYsNyArMzA1Niw3IEBAIGludGVsX2RwX2dldF9saW5rX3N0YXR1cyhzdHJ1Y3QgaW50 ZWxfZHAgKmludGVsX2RwLCB1aW50OF90IGxpbmtfc3RhdHVzW0RQX0xJTktfCiB9CiAKIC8qIFRo ZXNlIGFyZSBzb3VyY2Utc3BlY2lmaWMgdmFsdWVzLiAqLwotc3RhdGljIHVpbnQ4X3QKK3VpbnQ4 X3QKIGludGVsX2RwX3ZvbHRhZ2VfbWF4KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCiB7CiAJ c3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGludGVsX2RwX3RvX2RldihpbnRlbF9kcCk7CkBAIC0z MDc5LDcgKzMwNzksNyBAQCBpbnRlbF9kcF92b2x0YWdlX21heChzdHJ1Y3QgaW50ZWxfZHAgKmlu dGVsX2RwKQogCQlyZXR1cm4gRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8yOwogfQogCi1z dGF0aWMgdWludDhfdAordWludDhfdAogaW50ZWxfZHBfcHJlX2VtcGhhc2lzX21heChzdHJ1Y3Qg aW50ZWxfZHAgKmludGVsX2RwLCB1aW50OF90IHZvbHRhZ2Vfc3dpbmcpCiB7CiAJc3RydWN0IGRy bV9kZXZpY2UgKmRldiA9IGludGVsX2RwX3RvX2RldihpbnRlbF9kcCk7CkBAIC0zNDI2LDM4ICsz NDI2LDYgQEAgc3RhdGljIHVpbnQzMl90IGNodl9zaWduYWxfbGV2ZWxzKHN0cnVjdCBpbnRlbF9k cCAqaW50ZWxfZHApCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkCi1pbnRlbF9nZXRfYWRq dXN0X3RyYWluKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsCi0JCSAgICAgICBjb25zdCB1aW50 OF90IGxpbmtfc3RhdHVzW0RQX0xJTktfU1RBVFVTX1NJWkVdKQotewotCXVpbnQ4X3QgdiA9IDA7 Ci0JdWludDhfdCBwID0gMDsKLQlpbnQgbGFuZTsKLQl1aW50OF90IHZvbHRhZ2VfbWF4OwotCXVp bnQ4X3QgcHJlZW1waF9tYXg7Ci0KLQlmb3IgKGxhbmUgPSAwOyBsYW5lIDwgaW50ZWxfZHAtPmxh bmVfY291bnQ7IGxhbmUrKykgewotCQl1aW50OF90IHRoaXNfdiA9IGRybV9kcF9nZXRfYWRqdXN0 X3JlcXVlc3Rfdm9sdGFnZShsaW5rX3N0YXR1cywgbGFuZSk7Ci0JCXVpbnQ4X3QgdGhpc19wID0g ZHJtX2RwX2dldF9hZGp1c3RfcmVxdWVzdF9wcmVfZW1waGFzaXMobGlua19zdGF0dXMsIGxhbmUp OwotCi0JCWlmICh0aGlzX3YgPiB2KQotCQkJdiA9IHRoaXNfdjsKLQkJaWYgKHRoaXNfcCA+IHAp Ci0JCQlwID0gdGhpc19wOwotCX0KLQotCXZvbHRhZ2VfbWF4ID0gaW50ZWxfZHBfdm9sdGFnZV9t YXgoaW50ZWxfZHApOwotCWlmICh2ID49IHZvbHRhZ2VfbWF4KQotCQl2ID0gdm9sdGFnZV9tYXgg fCBEUF9UUkFJTl9NQVhfU1dJTkdfUkVBQ0hFRDsKLQotCXByZWVtcGhfbWF4ID0gaW50ZWxfZHBf cHJlX2VtcGhhc2lzX21heChpbnRlbF9kcCwgdik7Ci0JaWYgKHAgPj0gcHJlZW1waF9tYXgpCi0J CXAgPSBwcmVlbXBoX21heCB8IERQX1RSQUlOX01BWF9QUkVfRU1QSEFTSVNfUkVBQ0hFRDsKLQot CWZvciAobGFuZSA9IDA7IGxhbmUgPCA0OyBsYW5lKyspCi0JCWludGVsX2RwLT50cmFpbl9zZXRb bGFuZV0gPSB2IHwgcDsKLX0KLQogc3RhdGljIHVpbnQzMl90CiBnZW40X3NpZ25hbF9sZXZlbHMo dWludDhfdCB0cmFpbl9zZXQpCiB7CkBAIC0zNTk5LDcgKzM1NjcsNyBAQCBpbnRlbF9kcF9zZXRf c2lnbmFsX2xldmVscyhzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLCB1aW50MzJfdCAqRFApCiAJ KkRQID0gKCpEUCAmIH5tYXNrKSB8IHNpZ25hbF9sZXZlbHM7CiB9CiAKLXN0YXRpYyB2b2lkCit2 b2lkCiBpbnRlbF9kcF9wcm9ncmFtX2xpbmtfdHJhaW5pbmdfcGF0dGVybihzdHJ1Y3QgaW50ZWxf ZHAgKmludGVsX2RwLAogCQkJCSAgICAgICB1aW50OF90IGRwX3RyYWluX3BhdCkKIHsKQEAgLTM2 MTMsNDMgKzM1ODEsNyBAQCBpbnRlbF9kcF9wcm9ncmFtX2xpbmtfdHJhaW5pbmdfcGF0dGVybihz dHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLAogCVBPU1RJTkdfUkVBRChpbnRlbF9kcC0+b3V0cHV0 X3JlZyk7CiB9CiAKLXN0YXRpYyBib29sCi1pbnRlbF9kcF9zZXRfbGlua190cmFpbihzdHJ1Y3Qg aW50ZWxfZHAgKmludGVsX2RwLAotCQkJdWludDhfdCBkcF90cmFpbl9wYXQpCi17Ci0JdWludDhf dCBidWZbc2l6ZW9mKGludGVsX2RwLT50cmFpbl9zZXQpICsgMV07Ci0JaW50IHJldCwgbGVuOwot Ci0JaW50ZWxfZHBfcHJvZ3JhbV9saW5rX3RyYWluaW5nX3BhdHRlcm4oaW50ZWxfZHAsIGRwX3Ry YWluX3BhdCk7Ci0KLQlidWZbMF0gPSBkcF90cmFpbl9wYXQ7Ci0JaWYgKChkcF90cmFpbl9wYXQg JiBEUF9UUkFJTklOR19QQVRURVJOX01BU0spID09Ci0JICAgIERQX1RSQUlOSU5HX1BBVFRFUk5f RElTQUJMRSkgewotCQkvKiBkb24ndCB3cml0ZSBEUF9UUkFJTklOR19MQU5FeF9TRVQgb24gZGlz YWJsZSAqLwotCQlsZW4gPSAxOwotCX0gZWxzZSB7Ci0JCS8qIERQX1RSQUlOSU5HX0xBTkV4X1NF VCBmb2xsb3cgRFBfVFJBSU5JTkdfUEFUVEVSTl9TRVQgKi8KLQkJbWVtY3B5KGJ1ZiArIDEsIGlu dGVsX2RwLT50cmFpbl9zZXQsIGludGVsX2RwLT5sYW5lX2NvdW50KTsKLQkJbGVuID0gaW50ZWxf ZHAtPmxhbmVfY291bnQgKyAxOwotCX0KLQotCXJldCA9IGRybV9kcF9kcGNkX3dyaXRlKCZpbnRl bF9kcC0+YXV4LCBEUF9UUkFJTklOR19QQVRURVJOX1NFVCwKLQkJCQlidWYsIGxlbik7Ci0KLQly ZXR1cm4gcmV0ID09IGxlbjsKLX0KLQotc3RhdGljIGJvb2wKLWludGVsX2RwX3Jlc2V0X2xpbmtf dHJhaW4oc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwKLQkJCXVpbnQ4X3QgZHBfdHJhaW5fcGF0 KQotewotCWlmICghaW50ZWxfZHAtPnRyYWluX3NldF92YWxpZCkKLQkJbWVtc2V0KGludGVsX2Rw LT50cmFpbl9zZXQsIDAsIHNpemVvZihpbnRlbF9kcC0+dHJhaW5fc2V0KSk7Ci0JaW50ZWxfZHBf dXBkYXRlX3NpZ25hbF9sZXZlbHMoaW50ZWxfZHApOwotCXJldHVybiBpbnRlbF9kcF9zZXRfbGlu a190cmFpbihpbnRlbF9kcCwgZHBfdHJhaW5fcGF0KTsKLX0KLQotc3RhdGljIHZvaWQKK3ZvaWQK IGludGVsX2RwX3VwZGF0ZV9zaWduYWxfbGV2ZWxzKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAp CiB7CiAJc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQgPSBkcF90b19k aWdfcG9ydChpbnRlbF9kcCk7CkBAIC0zNjYyLDIwICszNTk0LDcgQEAgaW50ZWxfZHBfdXBkYXRl X3NpZ25hbF9sZXZlbHMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKIAlQT1NUSU5HX1JFQUQo aW50ZWxfZHAtPm91dHB1dF9yZWcpOwogfQogCi1zdGF0aWMgYm9vbAotaW50ZWxfZHBfdXBkYXRl X2xpbmtfdHJhaW4oc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKLXsKLQlpbnQgcmV0OwotCi0J aW50ZWxfZHBfdXBkYXRlX3NpZ25hbF9sZXZlbHMoaW50ZWxfZHApOwotCi0JcmV0ID0gZHJtX2Rw X2RwY2Rfd3JpdGUoJmludGVsX2RwLT5hdXgsIERQX1RSQUlOSU5HX0xBTkUwX1NFVCwKLQkJCQlp bnRlbF9kcC0+dHJhaW5fc2V0LCBpbnRlbF9kcC0+bGFuZV9jb3VudCk7Ci0KLQlyZXR1cm4gcmV0 ID09IGludGVsX2RwLT5sYW5lX2NvdW50OwotfQotCi1zdGF0aWMgdm9pZCBpbnRlbF9kcF9zZXRf aWRsZV9saW5rX3RyYWluKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCit2b2lkIGludGVsX2Rw X3NldF9pZGxlX2xpbmtfdHJhaW4oc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKIHsKIAlzdHJ1 Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICppbnRlbF9kaWdfcG9ydCA9IGRwX3RvX2RpZ19wb3J0KGlu dGVsX2RwKTsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gaW50ZWxfZGlnX3BvcnQtPmJhc2Uu YmFzZS5kZXY7CkBAIC0zNzA2LDIzNSArMzYyNSw2IEBAIHN0YXRpYyB2b2lkIGludGVsX2RwX3Nl dF9pZGxlX2xpbmtfdHJhaW4oc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKIAkJRFJNX0VSUk9S KCJUaW1lZCBvdXQgd2FpdGluZyBmb3IgRFAgaWRsZSBwYXR0ZXJuc1xuIik7CiB9CiAKLS8qIEVu YWJsZSBjb3JyZXNwb25kaW5nIHBvcnQgYW5kIHN0YXJ0IHRyYWluaW5nIHBhdHRlcm4gMSAqLwot c3RhdGljIGJvb2wKLWludGVsX2RwX2xpbmtfdHJhaW5pbmdfY2xvY2tfcmVjb3Zlcnkoc3RydWN0 IGludGVsX2RwICppbnRlbF9kcCkKLXsKLQlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIgPSAm ZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHApLT5iYXNlLmJhc2U7Ci0Jc3RydWN0IGRybV9kZXZpY2Ug KmRldiA9IGVuY29kZXItPmRldjsKLQlpbnQgaTsKLQl1aW50OF90IHZvbHRhZ2U7Ci0JaW50IHZv bHRhZ2VfdHJpZXMsIGxvb3BfdHJpZXM7Ci0JdWludDhfdCBsaW5rX2NvbmZpZ1syXTsKLQl1aW50 OF90IGxpbmtfYncsIHJhdGVfc2VsZWN0OwotCXVpbnQ4X3QgbGlua19zdGF0dXNbRFBfTElOS19T VEFUVVNfU0laRV07Ci0KLQlpZiAoSEFTX0RESShkZXYpKQotCQlpbnRlbF9kZGlfcHJlcGFyZV9s aW5rX3JldHJhaW4oZW5jb2Rlcik7Ci0KLQlpbnRlbF9kcF9jb21wdXRlX3JhdGUoaW50ZWxfZHAs IGludGVsX2RwLT5saW5rX3JhdGUsCi0JCQkgICAgICAmbGlua19idywgJnJhdGVfc2VsZWN0KTsK LQotCS8qIFdyaXRlIHRoZSBsaW5rIGNvbmZpZ3VyYXRpb24gZGF0YSAqLwotCWxpbmtfY29uZmln WzBdID0gbGlua19idzsKLQlsaW5rX2NvbmZpZ1sxXSA9IGludGVsX2RwLT5sYW5lX2NvdW50Owot CWlmIChkcm1fZHBfZW5oYW5jZWRfZnJhbWVfY2FwKGludGVsX2RwLT5kcGNkKSkKLQkJbGlua19j b25maWdbMV0gfD0gRFBfTEFORV9DT1VOVF9FTkhBTkNFRF9GUkFNRV9FTjsKLQlkcm1fZHBfZHBj ZF93cml0ZSgmaW50ZWxfZHAtPmF1eCwgRFBfTElOS19CV19TRVQsIGxpbmtfY29uZmlnLCAyKTsK LQlpZiAoaW50ZWxfZHAtPm51bV9zaW5rX3JhdGVzKQotCQlkcm1fZHBfZHBjZF93cml0ZSgmaW50 ZWxfZHAtPmF1eCwgRFBfTElOS19SQVRFX1NFVCwKLQkJCQkgICZyYXRlX3NlbGVjdCwgMSk7Ci0K LQlsaW5rX2NvbmZpZ1swXSA9IDA7Ci0JbGlua19jb25maWdbMV0gPSBEUF9TRVRfQU5TSV84QjEw QjsKLQlkcm1fZHBfZHBjZF93cml0ZSgmaW50ZWxfZHAtPmF1eCwgRFBfRE9XTlNQUkVBRF9DVFJM LCBsaW5rX2NvbmZpZywgMik7Ci0KLQlpbnRlbF9kcC0+RFAgfD0gRFBfUE9SVF9FTjsKLQotCS8q IGNsb2NrIHJlY292ZXJ5ICovCi0JaWYgKCFpbnRlbF9kcF9yZXNldF9saW5rX3RyYWluKGludGVs X2RwLAotCQkJCSAgICAgICBEUF9UUkFJTklOR19QQVRURVJOXzEgfAotCQkJCSAgICAgICBEUF9M SU5LX1NDUkFNQkxJTkdfRElTQUJMRSkpIHsKLQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gZW5hYmxl IGxpbmsgdHJhaW5pbmdcbiIpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0Jdm9sdGFnZSA9IDB4 ZmY7Ci0Jdm9sdGFnZV90cmllcyA9IDA7Ci0JbG9vcF90cmllcyA9IDA7Ci0JZm9yICg7Oykgewot CQlkcm1fZHBfbGlua190cmFpbl9jbG9ja19yZWNvdmVyeV9kZWxheShpbnRlbF9kcC0+ZHBjZCk7 Ci0JCWlmICghaW50ZWxfZHBfZ2V0X2xpbmtfc3RhdHVzKGludGVsX2RwLCBsaW5rX3N0YXR1cykp IHsKLQkJCURSTV9FUlJPUigiZmFpbGVkIHRvIGdldCBsaW5rIHN0YXR1c1xuIik7Ci0JCQlicmVh azsKLQkJfQotCi0JCWlmIChkcm1fZHBfY2xvY2tfcmVjb3Zlcnlfb2sobGlua19zdGF0dXMsIGlu dGVsX2RwLT5sYW5lX2NvdW50KSkgewotCQkJRFJNX0RFQlVHX0tNUygiY2xvY2sgcmVjb3Zlcnkg T0tcbiIpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQkvKgotCQkgKiBpZiB3ZSB1c2VkIHByZXZpb3Vz bHkgdHJhaW5lZCB2b2x0YWdlIGFuZCBwcmUtZW1waGFzaXMgdmFsdWVzCi0JCSAqIGFuZCB3ZSBk b24ndCBnZXQgY2xvY2sgcmVjb3ZlcnksIHJlc2V0IGxpbmsgdHJhaW5pbmcgdmFsdWVzCi0JCSAq LwotCQlpZiAoaW50ZWxfZHAtPnRyYWluX3NldF92YWxpZCkgewotCQkJRFJNX0RFQlVHX0tNUygi Y2xvY2sgcmVjb3Zlcnkgbm90IG9rLCByZXNldCIpOwotCQkJLyogY2xlYXIgdGhlIGZsYWcgYXMg d2UgYXJlIG5vdCByZXVzaW5nIHRyYWluIHNldCAqLwotCQkJaW50ZWxfZHAtPnRyYWluX3NldF92 YWxpZCA9IGZhbHNlOwotCQkJaWYgKCFpbnRlbF9kcF9yZXNldF9saW5rX3RyYWluKGludGVsX2Rw LAotCQkJCQkJICAgICAgIERQX1RSQUlOSU5HX1BBVFRFUk5fMSB8Ci0JCQkJCQkgICAgICAgRFBf TElOS19TQ1JBTUJMSU5HX0RJU0FCTEUpKSB7Ci0JCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gZW5h YmxlIGxpbmsgdHJhaW5pbmdcbiIpOwotCQkJCXJldHVybiBmYWxzZTsKLQkJCX0KLQkJCWNvbnRp bnVlOwotCQl9Ci0KLQkJLyogQ2hlY2sgdG8gc2VlIGlmIHdlJ3ZlIHRyaWVkIHRoZSBtYXggdm9s dGFnZSAqLwotCQlmb3IgKGkgPSAwOyBpIDwgaW50ZWxfZHAtPmxhbmVfY291bnQ7IGkrKykKLQkJ CWlmICgoaW50ZWxfZHAtPnRyYWluX3NldFtpXSAmIERQX1RSQUlOX01BWF9TV0lOR19SRUFDSEVE KSA9PSAwKQotCQkJCWJyZWFrOwotCQlpZiAoaSA9PSBpbnRlbF9kcC0+bGFuZV9jb3VudCkgewot CQkJKytsb29wX3RyaWVzOwotCQkJaWYgKGxvb3BfdHJpZXMgPT0gNSkgewotCQkJCURSTV9FUlJP UigidG9vIG1hbnkgZnVsbCByZXRyaWVzLCBnaXZlIHVwXG4iKTsKLQkJCQlicmVhazsKLQkJCX0K LQkJCWludGVsX2RwX3Jlc2V0X2xpbmtfdHJhaW4oaW50ZWxfZHAsCi0JCQkJCQkgIERQX1RSQUlO SU5HX1BBVFRFUk5fMSB8Ci0JCQkJCQkgIERQX0xJTktfU0NSQU1CTElOR19ESVNBQkxFKTsKLQkJ CXZvbHRhZ2VfdHJpZXMgPSAwOwotCQkJY29udGludWU7Ci0JCX0KLQotCQkvKiBDaGVjayB0byBz ZWUgaWYgd2UndmUgdHJpZWQgdGhlIHNhbWUgdm9sdGFnZSA1IHRpbWVzICovCi0JCWlmICgoaW50 ZWxfZHAtPnRyYWluX3NldFswXSAmIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTUFTSykgPT0gdm9s dGFnZSkgewotCQkJKyt2b2x0YWdlX3RyaWVzOwotCQkJaWYgKHZvbHRhZ2VfdHJpZXMgPT0gNSkg ewotCQkJCURSTV9FUlJPUigidG9vIG1hbnkgdm9sdGFnZSByZXRyaWVzLCBnaXZlIHVwXG4iKTsK LQkJCQlicmVhazsKLQkJCX0KLQkJfSBlbHNlCi0JCQl2b2x0YWdlX3RyaWVzID0gMDsKLQkJdm9s dGFnZSA9IGludGVsX2RwLT50cmFpbl9zZXRbMF0gJiBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX01B U0s7Ci0KLQkJLyogVXBkYXRlIHRyYWluaW5nIHNldCBhcyByZXF1ZXN0ZWQgYnkgdGFyZ2V0ICov Ci0JCWludGVsX2dldF9hZGp1c3RfdHJhaW4oaW50ZWxfZHAsIGxpbmtfc3RhdHVzKTsKLQkJaWYg KCFpbnRlbF9kcF91cGRhdGVfbGlua190cmFpbihpbnRlbF9kcCkpIHsKLQkJCURSTV9FUlJPUigi ZmFpbGVkIHRvIHVwZGF0ZSBsaW5rIHRyYWluaW5nXG4iKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQot Ci0JcmV0dXJuIGRybV9kcF9jbG9ja19yZWNvdmVyeV9vayhsaW5rX3N0YXR1cywgaW50ZWxfZHAt PmxhbmVfY291bnQpOwotfQotCi1zdGF0aWMgYm9vbAotaW50ZWxfZHBfbGlua190cmFpbmluZ19j aGFubmVsX2VxdWFsaXphdGlvbihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQotewotCXN0cnVj dCBpbnRlbF9kaWdpdGFsX3BvcnQgKmRpZ19wb3J0ID0gZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHAp OwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBkaWdfcG9ydC0+YmFzZS5iYXNlLmRldjsKLQli b29sIGNoYW5uZWxfZXEgPSBmYWxzZTsKLQlpbnQgdHJpZXMsIGNyX3RyaWVzOwotCXVpbnQzMl90 IHRyYWluaW5nX3BhdHRlcm4gPSBEUF9UUkFJTklOR19QQVRURVJOXzI7Ci0KLQkvKgotCSAqIFRy YWluaW5nIFBhdHRlcm4gMyBmb3IgSEJSMiBvciAxLjIgZGV2aWNlcyB0aGF0IHN1cHBvcnQgaXQu Ci0JICoKLQkgKiBJbnRlbCBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0IEhCUjIgYWxzbyBzdXBwb3J0 IFRQUzMuIFRQUzMgc3VwcG9ydCBpcwotCSAqIGFsc28gbWFuZGF0b3J5IGZvciBkb3duc3RyZWFt IGRldmljZXMgdGhhdCBzdXBwb3J0IEhCUjIuCi0JICoKLQkgKiBEdWUgdG8gV2FEaXNhYmxlSEJS MiBTS0wgPCBCMCBpcyB0aGUgb25seSBleGNlcHRpb24gd2hlcmUgVFBTMyBpcwotCSAqIHN1cHBv cnRlZCBidXQgc3RpbGwgbm90IGVuYWJsZWQuCi0JICovCi0JaWYgKGludGVsX2RwX3NvdXJjZV9z dXBwb3J0c19oYnIyKGRldikgJiYKLQkgICAgZHJtX2RwX3RwczNfc3VwcG9ydGVkKGludGVsX2Rw LT5kcGNkKSkKLQkJdHJhaW5pbmdfcGF0dGVybiA9IERQX1RSQUlOSU5HX1BBVFRFUk5fMzsKLQll bHNlIGlmIChpbnRlbF9kcC0+bGlua19yYXRlID09IDU0MDAwMCkKLQkJRFJNX0VSUk9SKCI1LjQg R2JwcyBsaW5rIHJhdGUgd2l0aG91dCBIQlIyL1RQUzMgc3VwcG9ydFxuIik7Ci0KLQkvKiBjaGFu bmVsIGVxdWFsaXphdGlvbiAqLwotCWlmICghaW50ZWxfZHBfc2V0X2xpbmtfdHJhaW4oaW50ZWxf ZHAsCi0JCQkJICAgICB0cmFpbmluZ19wYXR0ZXJuIHwKLQkJCQkgICAgIERQX0xJTktfU0NSQU1C TElOR19ESVNBQkxFKSkgewotCQlEUk1fRVJST1IoImZhaWxlZCB0byBzdGFydCBjaGFubmVsIGVx dWFsaXphdGlvblxuIik7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQl0cmllcyA9IDA7Ci0JY3Jf dHJpZXMgPSAwOwotCWNoYW5uZWxfZXEgPSBmYWxzZTsKLQlmb3IgKDs7KSB7Ci0JCXVpbnQ4X3Qg bGlua19zdGF0dXNbRFBfTElOS19TVEFUVVNfU0laRV07Ci0KLQkJaWYgKGNyX3RyaWVzID4gNSkg ewotCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gdHJhaW4gRFAsIGFib3J0aW5nXG4iKTsKLQkJCWJy ZWFrOwotCQl9Ci0KLQkJZHJtX2RwX2xpbmtfdHJhaW5fY2hhbm5lbF9lcV9kZWxheShpbnRlbF9k cC0+ZHBjZCk7Ci0JCWlmICghaW50ZWxfZHBfZ2V0X2xpbmtfc3RhdHVzKGludGVsX2RwLCBsaW5r X3N0YXR1cykpIHsKLQkJCURSTV9FUlJPUigiZmFpbGVkIHRvIGdldCBsaW5rIHN0YXR1c1xuIik7 Ci0JCQlicmVhazsKLQkJfQotCi0JCS8qIE1ha2Ugc3VyZSBjbG9jayBpcyBzdGlsbCBvayAqLwot CQlpZiAoIWRybV9kcF9jbG9ja19yZWNvdmVyeV9vayhsaW5rX3N0YXR1cywKLQkJCQkJICAgICAg aW50ZWxfZHAtPmxhbmVfY291bnQpKSB7Ci0JCQlpbnRlbF9kcC0+dHJhaW5fc2V0X3ZhbGlkID0g ZmFsc2U7Ci0JCQlpbnRlbF9kcF9saW5rX3RyYWluaW5nX2Nsb2NrX3JlY292ZXJ5KGludGVsX2Rw KTsKLQkJCWludGVsX2RwX3NldF9saW5rX3RyYWluKGludGVsX2RwLAotCQkJCQkJdHJhaW5pbmdf cGF0dGVybiB8Ci0JCQkJCQlEUF9MSU5LX1NDUkFNQkxJTkdfRElTQUJMRSk7Ci0JCQljcl90cmll cysrOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlpZiAoZHJtX2RwX2NoYW5uZWxfZXFfb2sobGlu a19zdGF0dXMsCi0JCQkJCSBpbnRlbF9kcC0+bGFuZV9jb3VudCkpIHsKLQkJCWNoYW5uZWxfZXEg PSB0cnVlOwotCQkJYnJlYWs7Ci0JCX0KLQotCQkvKiBUcnkgNSB0aW1lcywgdGhlbiB0cnkgY2xv Y2sgcmVjb3ZlcnkgaWYgdGhhdCBmYWlscyAqLwotCQlpZiAodHJpZXMgPiA1KSB7Ci0JCQlpbnRl bF9kcC0+dHJhaW5fc2V0X3ZhbGlkID0gZmFsc2U7Ci0JCQlpbnRlbF9kcF9saW5rX3RyYWluaW5n X2Nsb2NrX3JlY292ZXJ5KGludGVsX2RwKTsKLQkJCWludGVsX2RwX3NldF9saW5rX3RyYWluKGlu dGVsX2RwLAotCQkJCQkJdHJhaW5pbmdfcGF0dGVybiB8Ci0JCQkJCQlEUF9MSU5LX1NDUkFNQkxJ TkdfRElTQUJMRSk7Ci0JCQl0cmllcyA9IDA7Ci0JCQljcl90cmllcysrOwotCQkJY29udGludWU7 Ci0JCX0KLQotCQkvKiBVcGRhdGUgdHJhaW5pbmcgc2V0IGFzIHJlcXVlc3RlZCBieSB0YXJnZXQg Ki8KLQkJaW50ZWxfZ2V0X2FkanVzdF90cmFpbihpbnRlbF9kcCwgbGlua19zdGF0dXMpOwotCQlp ZiAoIWludGVsX2RwX3VwZGF0ZV9saW5rX3RyYWluKGludGVsX2RwKSkgewotCQkJRFJNX0VSUk9S KCJmYWlsZWQgdG8gdXBkYXRlIGxpbmsgdHJhaW5pbmdcbiIpOwotCQkJYnJlYWs7Ci0JCX0KLQkJ Kyt0cmllczsKLQl9Ci0KLQlpbnRlbF9kcF9zZXRfaWRsZV9saW5rX3RyYWluKGludGVsX2RwKTsK LQotCWlmIChjaGFubmVsX2VxKSB7Ci0JCWludGVsX2RwLT50cmFpbl9zZXRfdmFsaWQgPSB0cnVl OwotCQlEUk1fREVCVUdfS01TKCJDaGFubmVsIEVRIGRvbmUuIERQIFRyYWluaW5nIHN1Y2Nlc3Nm dWxcbiIpOwotCQlyZXR1cm4gdHJ1ZTsKLQl9IGVsc2UgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQot fQotCi12b2lkIGludGVsX2RwX3N0b3BfbGlua190cmFpbihzdHJ1Y3QgaW50ZWxfZHAgKmludGVs X2RwKQotewotCWludGVsX2RwX3NldF9saW5rX3RyYWluKGludGVsX2RwLAotCQkJCURQX1RSQUlO SU5HX1BBVFRFUk5fRElTQUJMRSk7Ci19Ci0KLXZvaWQKLWludGVsX2RwX3N0YXJ0X2xpbmtfdHJh aW4oc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKLXsKLQl1aW50MzJfdCBEUCA9IGludGVsX2Rw LT5EUDsKLQotCWlmICghaW50ZWxfZHBfbGlua190cmFpbmluZ19jbG9ja19yZWNvdmVyeShpbnRl bF9kcCkgfHwKLQkgICAgIWludGVsX2RwX2xpbmtfdHJhaW5pbmdfY2hhbm5lbF9lcXVhbGl6YXRp b24oaW50ZWxfZHApKQotCQlpbnRlbF9kcC0+RFAgPSBEUDsKLX0KLQogc3RhdGljIHZvaWQKIGlu dGVsX2RwX2xpbmtfZG93bihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQogewpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHBfbGlua190cmFpbmluZy5jIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfZHBfbGlua190cmFpbmluZy5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLmYzM2NiYmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9kcF9saW5rX3RyYWluaW5nLmMKQEAgLTAsMCArMSwzMzYgQEAKKy8q CisgKiBDb3B5cmlnaHQgwqkgMjAwOC0yMDE1IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVy bWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24g b2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1 bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0 d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisg KiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJp YnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUs IGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlz aGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisg KiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAo aW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFs bCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAq CisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBP RiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElN SVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQg U0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1Ig QU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4g QUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwg T1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBP VEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlICJpbnRl bF9kcnYuaCIKKworc3RhdGljIHZvaWQKK2ludGVsX2dldF9hZGp1c3RfdHJhaW4oc3RydWN0IGlu dGVsX2RwICppbnRlbF9kcCwKKwkJICAgICAgIGNvbnN0IHVpbnQ4X3QgbGlua19zdGF0dXNbRFBf TElOS19TVEFUVVNfU0laRV0pCit7CisJdWludDhfdCB2ID0gMDsKKwl1aW50OF90IHAgPSAwOwor CWludCBsYW5lOworCXVpbnQ4X3Qgdm9sdGFnZV9tYXg7CisJdWludDhfdCBwcmVlbXBoX21heDsK KworCWZvciAobGFuZSA9IDA7IGxhbmUgPCBpbnRlbF9kcC0+bGFuZV9jb3VudDsgbGFuZSsrKSB7 CisJCXVpbnQ4X3QgdGhpc192ID0gZHJtX2RwX2dldF9hZGp1c3RfcmVxdWVzdF92b2x0YWdlKGxp bmtfc3RhdHVzLCBsYW5lKTsKKwkJdWludDhfdCB0aGlzX3AgPSBkcm1fZHBfZ2V0X2FkanVzdF9y ZXF1ZXN0X3ByZV9lbXBoYXNpcyhsaW5rX3N0YXR1cywgbGFuZSk7CisKKwkJaWYgKHRoaXNfdiA+ IHYpCisJCQl2ID0gdGhpc192OworCQlpZiAodGhpc19wID4gcCkKKwkJCXAgPSB0aGlzX3A7CisJ fQorCisJdm9sdGFnZV9tYXggPSBpbnRlbF9kcF92b2x0YWdlX21heChpbnRlbF9kcCk7CisJaWYg KHYgPj0gdm9sdGFnZV9tYXgpCisJCXYgPSB2b2x0YWdlX21heCB8IERQX1RSQUlOX01BWF9TV0lO R19SRUFDSEVEOworCisJcHJlZW1waF9tYXggPSBpbnRlbF9kcF9wcmVfZW1waGFzaXNfbWF4KGlu dGVsX2RwLCB2KTsKKwlpZiAocCA+PSBwcmVlbXBoX21heCkKKwkJcCA9IHByZWVtcGhfbWF4IHwg RFBfVFJBSU5fTUFYX1BSRV9FTVBIQVNJU19SRUFDSEVEOworCisJZm9yIChsYW5lID0gMDsgbGFu ZSA8IDQ7IGxhbmUrKykKKwkJaW50ZWxfZHAtPnRyYWluX3NldFtsYW5lXSA9IHYgfCBwOworfQor CitzdGF0aWMgYm9vbAoraW50ZWxfZHBfc2V0X2xpbmtfdHJhaW4oc3RydWN0IGludGVsX2RwICpp bnRlbF9kcCwKKwkJCXVpbnQ4X3QgZHBfdHJhaW5fcGF0KQoreworCXVpbnQ4X3QgYnVmW3NpemVv ZihpbnRlbF9kcC0+dHJhaW5fc2V0KSArIDFdOworCWludCByZXQsIGxlbjsKKworCWludGVsX2Rw X3Byb2dyYW1fbGlua190cmFpbmluZ19wYXR0ZXJuKGludGVsX2RwLCBkcF90cmFpbl9wYXQpOwor CisJYnVmWzBdID0gZHBfdHJhaW5fcGF0OworCWlmICgoZHBfdHJhaW5fcGF0ICYgRFBfVFJBSU5J TkdfUEFUVEVSTl9NQVNLKSA9PQorCSAgICBEUF9UUkFJTklOR19QQVRURVJOX0RJU0FCTEUpIHsK KwkJLyogZG9uJ3Qgd3JpdGUgRFBfVFJBSU5JTkdfTEFORXhfU0VUIG9uIGRpc2FibGUgKi8KKwkJ bGVuID0gMTsKKwl9IGVsc2UgeworCQkvKiBEUF9UUkFJTklOR19MQU5FeF9TRVQgZm9sbG93IERQ X1RSQUlOSU5HX1BBVFRFUk5fU0VUICovCisJCW1lbWNweShidWYgKyAxLCBpbnRlbF9kcC0+dHJh aW5fc2V0LCBpbnRlbF9kcC0+bGFuZV9jb3VudCk7CisJCWxlbiA9IGludGVsX2RwLT5sYW5lX2Nv dW50ICsgMTsKKwl9CisKKwlyZXQgPSBkcm1fZHBfZHBjZF93cml0ZSgmaW50ZWxfZHAtPmF1eCwg RFBfVFJBSU5JTkdfUEFUVEVSTl9TRVQsCisJCQkJYnVmLCBsZW4pOworCisJcmV0dXJuIHJldCA9 PSBsZW47Cit9CisKK3N0YXRpYyBib29sCitpbnRlbF9kcF9yZXNldF9saW5rX3RyYWluKHN0cnVj dCBpbnRlbF9kcCAqaW50ZWxfZHAsCisJCQl1aW50OF90IGRwX3RyYWluX3BhdCkKK3sKKwlpZiAo IWludGVsX2RwLT50cmFpbl9zZXRfdmFsaWQpCisJCW1lbXNldChpbnRlbF9kcC0+dHJhaW5fc2V0 LCAwLCBzaXplb2YoaW50ZWxfZHAtPnRyYWluX3NldCkpOworCWludGVsX2RwX3VwZGF0ZV9zaWdu YWxfbGV2ZWxzKGludGVsX2RwKTsKKwlyZXR1cm4gaW50ZWxfZHBfc2V0X2xpbmtfdHJhaW4oaW50 ZWxfZHAsIGRwX3RyYWluX3BhdCk7Cit9CisKK3N0YXRpYyBib29sCitpbnRlbF9kcF91cGRhdGVf bGlua190cmFpbihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQoreworCWludCByZXQ7CisKKwlp bnRlbF9kcF91cGRhdGVfc2lnbmFsX2xldmVscyhpbnRlbF9kcCk7CisKKwlyZXQgPSBkcm1fZHBf ZHBjZF93cml0ZSgmaW50ZWxfZHAtPmF1eCwgRFBfVFJBSU5JTkdfTEFORTBfU0VULAorCQkJCWlu dGVsX2RwLT50cmFpbl9zZXQsIGludGVsX2RwLT5sYW5lX2NvdW50KTsKKworCXJldHVybiByZXQg PT0gaW50ZWxfZHAtPmxhbmVfY291bnQ7Cit9CisKKy8qIEVuYWJsZSBjb3JyZXNwb25kaW5nIHBv cnQgYW5kIHN0YXJ0IHRyYWluaW5nIHBhdHRlcm4gMSAqLworc3RhdGljIGJvb2wKK2ludGVsX2Rw X2xpbmtfdHJhaW5pbmdfY2xvY2tfcmVjb3Zlcnkoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkK K3sKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIgPSAmZHBfdG9fZGlnX3BvcnQoaW50ZWxf ZHApLT5iYXNlLmJhc2U7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmRldjsK KwlpbnQgaTsKKwl1aW50OF90IHZvbHRhZ2U7CisJaW50IHZvbHRhZ2VfdHJpZXMsIGxvb3BfdHJp ZXM7CisJdWludDhfdCBsaW5rX2NvbmZpZ1syXTsKKwl1aW50OF90IGxpbmtfYncsIHJhdGVfc2Vs ZWN0OworCXVpbnQ4X3QgbGlua19zdGF0dXNbRFBfTElOS19TVEFUVVNfU0laRV07CisKKwlpZiAo SEFTX0RESShkZXYpKQorCQlpbnRlbF9kZGlfcHJlcGFyZV9saW5rX3JldHJhaW4oZW5jb2Rlcik7 CisKKwlpbnRlbF9kcF9jb21wdXRlX3JhdGUoaW50ZWxfZHAsIGludGVsX2RwLT5saW5rX3JhdGUs CisJCQkgICAgICAmbGlua19idywgJnJhdGVfc2VsZWN0KTsKKworCS8qIFdyaXRlIHRoZSBsaW5r IGNvbmZpZ3VyYXRpb24gZGF0YSAqLworCWxpbmtfY29uZmlnWzBdID0gbGlua19idzsKKwlsaW5r X2NvbmZpZ1sxXSA9IGludGVsX2RwLT5sYW5lX2NvdW50OworCWlmIChkcm1fZHBfZW5oYW5jZWRf ZnJhbWVfY2FwKGludGVsX2RwLT5kcGNkKSkKKwkJbGlua19jb25maWdbMV0gfD0gRFBfTEFORV9D T1VOVF9FTkhBTkNFRF9GUkFNRV9FTjsKKwlkcm1fZHBfZHBjZF93cml0ZSgmaW50ZWxfZHAtPmF1 eCwgRFBfTElOS19CV19TRVQsIGxpbmtfY29uZmlnLCAyKTsKKwlpZiAoaW50ZWxfZHAtPm51bV9z aW5rX3JhdGVzKQorCQlkcm1fZHBfZHBjZF93cml0ZSgmaW50ZWxfZHAtPmF1eCwgRFBfTElOS19S QVRFX1NFVCwKKwkJCQkgICZyYXRlX3NlbGVjdCwgMSk7CisKKwlsaW5rX2NvbmZpZ1swXSA9IDA7 CisJbGlua19jb25maWdbMV0gPSBEUF9TRVRfQU5TSV84QjEwQjsKKwlkcm1fZHBfZHBjZF93cml0 ZSgmaW50ZWxfZHAtPmF1eCwgRFBfRE9XTlNQUkVBRF9DVFJMLCBsaW5rX2NvbmZpZywgMik7CisK KwlpbnRlbF9kcC0+RFAgfD0gRFBfUE9SVF9FTjsKKworCS8qIGNsb2NrIHJlY292ZXJ5ICovCisJ aWYgKCFpbnRlbF9kcF9yZXNldF9saW5rX3RyYWluKGludGVsX2RwLAorCQkJCSAgICAgICBEUF9U UkFJTklOR19QQVRURVJOXzEgfAorCQkJCSAgICAgICBEUF9MSU5LX1NDUkFNQkxJTkdfRElTQUJM RSkpIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gZW5hYmxlIGxpbmsgdHJhaW5pbmdcbiIpOwor CQlyZXR1cm4gZmFsc2U7CisJfQorCisJdm9sdGFnZSA9IDB4ZmY7CisJdm9sdGFnZV90cmllcyA9 IDA7CisJbG9vcF90cmllcyA9IDA7CisJZm9yICg7OykgeworCQlkcm1fZHBfbGlua190cmFpbl9j bG9ja19yZWNvdmVyeV9kZWxheShpbnRlbF9kcC0+ZHBjZCk7CisJCWlmICghaW50ZWxfZHBfZ2V0 X2xpbmtfc3RhdHVzKGludGVsX2RwLCBsaW5rX3N0YXR1cykpIHsKKwkJCURSTV9FUlJPUigiZmFp bGVkIHRvIGdldCBsaW5rIHN0YXR1c1xuIik7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChkcm1f ZHBfY2xvY2tfcmVjb3Zlcnlfb2sobGlua19zdGF0dXMsIGludGVsX2RwLT5sYW5lX2NvdW50KSkg eworCQkJRFJNX0RFQlVHX0tNUygiY2xvY2sgcmVjb3ZlcnkgT0tcbiIpOworCQkJYnJlYWs7CisJ CX0KKworCQkvKgorCQkgKiBpZiB3ZSB1c2VkIHByZXZpb3VzbHkgdHJhaW5lZCB2b2x0YWdlIGFu ZCBwcmUtZW1waGFzaXMgdmFsdWVzCisJCSAqIGFuZCB3ZSBkb24ndCBnZXQgY2xvY2sgcmVjb3Zl cnksIHJlc2V0IGxpbmsgdHJhaW5pbmcgdmFsdWVzCisJCSAqLworCQlpZiAoaW50ZWxfZHAtPnRy YWluX3NldF92YWxpZCkgeworCQkJRFJNX0RFQlVHX0tNUygiY2xvY2sgcmVjb3Zlcnkgbm90IG9r LCByZXNldCIpOworCQkJLyogY2xlYXIgdGhlIGZsYWcgYXMgd2UgYXJlIG5vdCByZXVzaW5nIHRy YWluIHNldCAqLworCQkJaW50ZWxfZHAtPnRyYWluX3NldF92YWxpZCA9IGZhbHNlOworCQkJaWYg KCFpbnRlbF9kcF9yZXNldF9saW5rX3RyYWluKGludGVsX2RwLAorCQkJCQkJICAgICAgIERQX1RS QUlOSU5HX1BBVFRFUk5fMSB8CisJCQkJCQkgICAgICAgRFBfTElOS19TQ1JBTUJMSU5HX0RJU0FC TEUpKSB7CisJCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gZW5hYmxlIGxpbmsgdHJhaW5pbmdcbiIp OworCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogQ2hl Y2sgdG8gc2VlIGlmIHdlJ3ZlIHRyaWVkIHRoZSBtYXggdm9sdGFnZSAqLworCQlmb3IgKGkgPSAw OyBpIDwgaW50ZWxfZHAtPmxhbmVfY291bnQ7IGkrKykKKwkJCWlmICgoaW50ZWxfZHAtPnRyYWlu X3NldFtpXSAmIERQX1RSQUlOX01BWF9TV0lOR19SRUFDSEVEKSA9PSAwKQorCQkJCWJyZWFrOwor CQlpZiAoaSA9PSBpbnRlbF9kcC0+bGFuZV9jb3VudCkgeworCQkJKytsb29wX3RyaWVzOworCQkJ aWYgKGxvb3BfdHJpZXMgPT0gNSkgeworCQkJCURSTV9FUlJPUigidG9vIG1hbnkgZnVsbCByZXRy aWVzLCBnaXZlIHVwXG4iKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWludGVsX2RwX3Jlc2V0X2xp bmtfdHJhaW4oaW50ZWxfZHAsCisJCQkJCQkgIERQX1RSQUlOSU5HX1BBVFRFUk5fMSB8CisJCQkJ CQkgIERQX0xJTktfU0NSQU1CTElOR19ESVNBQkxFKTsKKwkJCXZvbHRhZ2VfdHJpZXMgPSAwOwor CQkJY29udGludWU7CisJCX0KKworCQkvKiBDaGVjayB0byBzZWUgaWYgd2UndmUgdHJpZWQgdGhl IHNhbWUgdm9sdGFnZSA1IHRpbWVzICovCisJCWlmICgoaW50ZWxfZHAtPnRyYWluX3NldFswXSAm IERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTUFTSykgPT0gdm9sdGFnZSkgeworCQkJKyt2b2x0YWdl X3RyaWVzOworCQkJaWYgKHZvbHRhZ2VfdHJpZXMgPT0gNSkgeworCQkJCURSTV9FUlJPUigidG9v IG1hbnkgdm9sdGFnZSByZXRyaWVzLCBnaXZlIHVwXG4iKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJ fSBlbHNlCisJCQl2b2x0YWdlX3RyaWVzID0gMDsKKwkJdm9sdGFnZSA9IGludGVsX2RwLT50cmFp bl9zZXRbMF0gJiBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX01BU0s7CisKKwkJLyogVXBkYXRlIHRy YWluaW5nIHNldCBhcyByZXF1ZXN0ZWQgYnkgdGFyZ2V0ICovCisJCWludGVsX2dldF9hZGp1c3Rf dHJhaW4oaW50ZWxfZHAsIGxpbmtfc3RhdHVzKTsKKwkJaWYgKCFpbnRlbF9kcF91cGRhdGVfbGlu a190cmFpbihpbnRlbF9kcCkpIHsKKwkJCURSTV9FUlJPUigiZmFpbGVkIHRvIHVwZGF0ZSBsaW5r IHRyYWluaW5nXG4iKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIGRybV9kcF9jbG9j a19yZWNvdmVyeV9vayhsaW5rX3N0YXR1cywgaW50ZWxfZHAtPmxhbmVfY291bnQpOworfQorCitz dGF0aWMgYm9vbAoraW50ZWxfZHBfbGlua190cmFpbmluZ19jaGFubmVsX2VxdWFsaXphdGlvbihz dHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQoreworCXN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQg KmRpZ19wb3J0ID0gZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHApOworCXN0cnVjdCBkcm1fZGV2aWNl ICpkZXYgPSBkaWdfcG9ydC0+YmFzZS5iYXNlLmRldjsKKwlib29sIGNoYW5uZWxfZXEgPSBmYWxz ZTsKKwlpbnQgdHJpZXMsIGNyX3RyaWVzOworCXVpbnQzMl90IHRyYWluaW5nX3BhdHRlcm4gPSBE UF9UUkFJTklOR19QQVRURVJOXzI7CisKKwkvKgorCSAqIFRyYWluaW5nIFBhdHRlcm4gMyBmb3Ig SEJSMiBvciAxLjIgZGV2aWNlcyB0aGF0IHN1cHBvcnQgaXQuCisJICoKKwkgKiBJbnRlbCBwbGF0 Zm9ybXMgdGhhdCBzdXBwb3J0IEhCUjIgYWxzbyBzdXBwb3J0IFRQUzMuIFRQUzMgc3VwcG9ydCBp cworCSAqIGFsc28gbWFuZGF0b3J5IGZvciBkb3duc3RyZWFtIGRldmljZXMgdGhhdCBzdXBwb3J0 IEhCUjIuCisJICoKKwkgKiBEdWUgdG8gV2FEaXNhYmxlSEJSMiBTS0wgPCBCMCBpcyB0aGUgb25s eSBleGNlcHRpb24gd2hlcmUgVFBTMyBpcworCSAqIHN1cHBvcnRlZCBidXQgc3RpbGwgbm90IGVu YWJsZWQuCisJICovCisJaWYgKGludGVsX2RwX3NvdXJjZV9zdXBwb3J0c19oYnIyKGRldikgJiYK KwkgICAgZHJtX2RwX3RwczNfc3VwcG9ydGVkKGludGVsX2RwLT5kcGNkKSkKKwkJdHJhaW5pbmdf cGF0dGVybiA9IERQX1RSQUlOSU5HX1BBVFRFUk5fMzsKKwllbHNlIGlmIChpbnRlbF9kcC0+bGlu a19yYXRlID09IDU0MDAwMCkKKwkJRFJNX0VSUk9SKCI1LjQgR2JwcyBsaW5rIHJhdGUgd2l0aG91 dCBIQlIyL1RQUzMgc3VwcG9ydFxuIik7CisKKwkvKiBjaGFubmVsIGVxdWFsaXphdGlvbiAqLwor CWlmICghaW50ZWxfZHBfc2V0X2xpbmtfdHJhaW4oaW50ZWxfZHAsCisJCQkJICAgICB0cmFpbmlu Z19wYXR0ZXJuIHwKKwkJCQkgICAgIERQX0xJTktfU0NSQU1CTElOR19ESVNBQkxFKSkgeworCQlE Uk1fRVJST1IoImZhaWxlZCB0byBzdGFydCBjaGFubmVsIGVxdWFsaXphdGlvblxuIik7CisJCXJl dHVybiBmYWxzZTsKKwl9CisKKwl0cmllcyA9IDA7CisJY3JfdHJpZXMgPSAwOworCWNoYW5uZWxf ZXEgPSBmYWxzZTsKKwlmb3IgKDs7KSB7CisJCXVpbnQ4X3QgbGlua19zdGF0dXNbRFBfTElOS19T VEFUVVNfU0laRV07CisKKwkJaWYgKGNyX3RyaWVzID4gNSkgeworCQkJRFJNX0VSUk9SKCJmYWls ZWQgdG8gdHJhaW4gRFAsIGFib3J0aW5nXG4iKTsKKwkJCWJyZWFrOworCQl9CisKKwkJZHJtX2Rw X2xpbmtfdHJhaW5fY2hhbm5lbF9lcV9kZWxheShpbnRlbF9kcC0+ZHBjZCk7CisJCWlmICghaW50 ZWxfZHBfZ2V0X2xpbmtfc3RhdHVzKGludGVsX2RwLCBsaW5rX3N0YXR1cykpIHsKKwkJCURSTV9F UlJPUigiZmFpbGVkIHRvIGdldCBsaW5rIHN0YXR1c1xuIik7CisJCQlicmVhazsKKwkJfQorCisJ CS8qIE1ha2Ugc3VyZSBjbG9jayBpcyBzdGlsbCBvayAqLworCQlpZiAoIWRybV9kcF9jbG9ja19y ZWNvdmVyeV9vayhsaW5rX3N0YXR1cywKKwkJCQkJICAgICAgaW50ZWxfZHAtPmxhbmVfY291bnQp KSB7CisJCQlpbnRlbF9kcC0+dHJhaW5fc2V0X3ZhbGlkID0gZmFsc2U7CisJCQlpbnRlbF9kcF9s aW5rX3RyYWluaW5nX2Nsb2NrX3JlY292ZXJ5KGludGVsX2RwKTsKKwkJCWludGVsX2RwX3NldF9s aW5rX3RyYWluKGludGVsX2RwLAorCQkJCQkJdHJhaW5pbmdfcGF0dGVybiB8CisJCQkJCQlEUF9M SU5LX1NDUkFNQkxJTkdfRElTQUJMRSk7CisJCQljcl90cmllcysrOworCQkJY29udGludWU7CisJ CX0KKworCQlpZiAoZHJtX2RwX2NoYW5uZWxfZXFfb2sobGlua19zdGF0dXMsCisJCQkJCSBpbnRl bF9kcC0+bGFuZV9jb3VudCkpIHsKKwkJCWNoYW5uZWxfZXEgPSB0cnVlOworCQkJYnJlYWs7CisJ CX0KKworCQkvKiBUcnkgNSB0aW1lcywgdGhlbiB0cnkgY2xvY2sgcmVjb3ZlcnkgaWYgdGhhdCBm YWlscyAqLworCQlpZiAodHJpZXMgPiA1KSB7CisJCQlpbnRlbF9kcC0+dHJhaW5fc2V0X3ZhbGlk ID0gZmFsc2U7CisJCQlpbnRlbF9kcF9saW5rX3RyYWluaW5nX2Nsb2NrX3JlY292ZXJ5KGludGVs X2RwKTsKKwkJCWludGVsX2RwX3NldF9saW5rX3RyYWluKGludGVsX2RwLAorCQkJCQkJdHJhaW5p bmdfcGF0dGVybiB8CisJCQkJCQlEUF9MSU5LX1NDUkFNQkxJTkdfRElTQUJMRSk7CisJCQl0cmll cyA9IDA7CisJCQljcl90cmllcysrOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBVcGRhdGUg dHJhaW5pbmcgc2V0IGFzIHJlcXVlc3RlZCBieSB0YXJnZXQgKi8KKwkJaW50ZWxfZ2V0X2FkanVz dF90cmFpbihpbnRlbF9kcCwgbGlua19zdGF0dXMpOworCQlpZiAoIWludGVsX2RwX3VwZGF0ZV9s aW5rX3RyYWluKGludGVsX2RwKSkgeworCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gdXBkYXRlIGxp bmsgdHJhaW5pbmdcbiIpOworCQkJYnJlYWs7CisJCX0KKwkJKyt0cmllczsKKwl9CisKKwlpbnRl bF9kcF9zZXRfaWRsZV9saW5rX3RyYWluKGludGVsX2RwKTsKKworCWlmIChjaGFubmVsX2VxKSB7 CisJCWludGVsX2RwLT50cmFpbl9zZXRfdmFsaWQgPSB0cnVlOworCQlEUk1fREVCVUdfS01TKCJD aGFubmVsIEVRIGRvbmUuIERQIFRyYWluaW5nIHN1Y2Nlc3NmdWxcbiIpOworCQlyZXR1cm4gdHJ1 ZTsKKwl9IGVsc2UgeworCQlyZXR1cm4gZmFsc2U7CisJfQorfQorCit2b2lkIGludGVsX2RwX3N0 b3BfbGlua190cmFpbihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQoreworCWludGVsX2RwX3Nl dF9saW5rX3RyYWluKGludGVsX2RwLAorCQkJCURQX1RSQUlOSU5HX1BBVFRFUk5fRElTQUJMRSk7 Cit9CisKK3ZvaWQKK2ludGVsX2RwX3N0YXJ0X2xpbmtfdHJhaW4oc3RydWN0IGludGVsX2RwICpp bnRlbF9kcCkKK3sKKwl1aW50MzJfdCBEUCA9IGludGVsX2RwLT5EUDsKKworCWlmICghaW50ZWxf ZHBfbGlua190cmFpbmluZ19jbG9ja19yZWNvdmVyeShpbnRlbF9kcCkgfHwKKwkgICAgIWludGVs X2RwX2xpbmtfdHJhaW5pbmdfY2hhbm5lbF9lcXVhbGl6YXRpb24oaW50ZWxfZHApKQorCQlpbnRl bF9kcC0+RFAgPSBEUDsKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCmluZGV4IDUzNjZj OWUuLmY2ZmQzNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5o CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCkBAIC0xMjQ3LDYgKzEyNDcs MjIgQEAgYm9vbCBpbnRlbF9kaWdpdGFsX3BvcnRfY29ubmVjdGVkKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiwKIAkJCQkJIHN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKnBvcnQp Owogdm9pZCBoc3dfZHBfc2V0X2RkaV9wbGxfc2VsKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpw aXBlX2NvbmZpZyk7CiAKK3ZvaWQKK2ludGVsX2RwX3Byb2dyYW1fbGlua190cmFpbmluZ19wYXR0 ZXJuKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsCisJCQkJICAgICAgIHVpbnQ4X3QgZHBfdHJh aW5fcGF0KTsKK3ZvaWQKK2ludGVsX2RwX3VwZGF0ZV9zaWduYWxfbGV2ZWxzKHN0cnVjdCBpbnRl bF9kcCAqaW50ZWxfZHApOwordm9pZCBpbnRlbF9kcF9zZXRfaWRsZV9saW5rX3RyYWluKHN0cnVj dCBpbnRlbF9kcCAqaW50ZWxfZHApOwordWludDhfdAoraW50ZWxfZHBfdm9sdGFnZV9tYXgoc3Ry dWN0IGludGVsX2RwICppbnRlbF9kcCk7Cit1aW50OF90CitpbnRlbF9kcF9wcmVfZW1waGFzaXNf bWF4KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsIHVpbnQ4X3Qgdm9sdGFnZV9zd2luZyk7Cit2 b2lkIGludGVsX2RwX2NvbXB1dGVfcmF0ZShzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLCBpbnQg cG9ydF9jbG9jaywKKwkJCSAgIHVpbnQ4X3QgKmxpbmtfYncsIHVpbnQ4X3QgKnJhdGVfc2VsZWN0 KTsKK2Jvb2wgaW50ZWxfZHBfc291cmNlX3N1cHBvcnRzX2hicjIoc3RydWN0IGRybV9kZXZpY2Ug KmRldik7Citib29sCitpbnRlbF9kcF9nZXRfbGlua19zdGF0dXMoc3RydWN0IGludGVsX2RwICpp bnRlbF9kcCwgdWludDhfdCBsaW5rX3N0YXR1c1tEUF9MSU5LX1NUQVRVU19TSVpFXSk7CisKIC8q IGludGVsX2RwX21zdC5jICovCiBpbnQgaW50ZWxfZHBfbXN0X2VuY29kZXJfaW5pdChzdHJ1Y3Qg aW50ZWxfZGlnaXRhbF9wb3J0ICppbnRlbF9kaWdfcG9ydCwgaW50IGNvbm5faWQpOwogdm9pZCBp bnRlbF9kcF9tc3RfZW5jb2Rlcl9jbGVhbnVwKHN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmlu dGVsX2RpZ19wb3J0KTsKLS0gCjIuNC4zCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2ludGVsLWdmeAo=