From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mika Kuoppala Subject: [PATCH 1/2] drm/i915: Introduce execlist_port_* accessors Date: Thu, 2 Nov 2017 16:32:38 +0200 Message-ID: <20171102143238.4829-1-mika.kuoppala@linux.intel.com> References: <20171031152734.11016-1-mika.kuoppala@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1E6C86E92E for ; Thu, 2 Nov 2017 14:33:59 +0000 (UTC) In-Reply-To: <20171031152734.11016-1-mika.kuoppala@linux.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 List-Id: intel-gfx@lists.freedesktop.org RnJvbTogTWlrYSBLdW9wcGFsYSA8bWlrYS5rdW9wcGFsYUBpbnRlbC5jb20+CgpJbnN0ZWFkIG9m IHRydXN0aW5nIHRoYXQgZmlyc3QgYXZhaWxhYmxlIHBvcnQgaXMgYXQgaW5kZXggMCwKdXNlIGFj Y2Vzc29yIHRvIGhpZGUgdGhpcy4gVGhpcyBpcyBhIHByZXBhcmF0aW9uIGZvciBhCmZvbGxvd2lu ZyBwYXRjaGVzIHdoZXJlIGhlYWQgY2FuIGJlIGF0IGFyYml0cmFyeSBsb2NhdGlvbgppbiB0aGUg cG9ydCBhcnJheS4KCnYyOiBpbXByb3ZlZCBjb21taXQgbWVzc2FnZSwgZWxzcF9yZWFkeSByZWFk YWJpbGl0eSAoQ2hyaXMpCnYzOiBzL2V4ZWNsaXN0X3BvcnRfaW5kZXgvZXhlY2xpc3RfcG9ydCAo Q2hyaXMpCnY0OiByZWJhc2UgdG8gbmV3IG5hbWluZwp2NTogZml4IHBvcnRfbmV4dCBpbmRleGlu Zwp2NjogYWRhcHQgdG8gcHJlZW1wdAp2NzogaW1wcm92ZWQgX3BvcnRfbmV4dCAoQ2hyaXMpCgpD YzogTWljaGHFgiBXaW5pYXJza2kgPG1pY2hhbC53aW5pYXJza2lAaW50ZWwuY29tPgpDYzogSm9v bmFzIExhaHRpbmVuIDxqb29uYXMubGFodGluZW5AbGludXguaW50ZWwuY29tPgpDYzogQ2hyaXMg V2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+ClNpZ25lZC1vZmYtYnk6IE1pa2EgS3Vv cHBhbGEgPG1pa2Eua3VvcHBhbGFAbGludXguaW50ZWwuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ3B1X2Vycm9yLmMgICAgICB8ICA2ICsrLS0KIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ3VjX3N1Ym1pc3Npb24uYyB8IDUwICsrKysrKysrKysrKysrKysrKy0tLS0tLS0t LS0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZW5naW5lX2NzLmMgICAgIHwgMTggKysr KysrLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jICAgICAgICAgICB8IDQ5 ICsrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9yaW5nYnVmZmVyLmggICAgfCA0NCArKysrKysrKysrKysrKysrKysrKysrKystLQogNSBmaWxl cyBjaGFuZ2VkLCAxMTkgaW5zZXJ0aW9ucygrKSwgNDggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ3B1X2Vycm9yLmMKaW5kZXggNjUzZmI2OWU3ZWNiLi42ZDBiZGIwM2IzZjAg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3B1X2Vycm9yLmMKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuYwpAQCAtMTMzMywxMSArMTMzMywx MyBAQCBzdGF0aWMgdm9pZCBlbmdpbmVfcmVjb3JkX3JlcXVlc3RzKHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSwKIHN0YXRpYyB2b2lkIGVycm9yX3JlY29yZF9lbmdpbmVfZXhlY2xpc3Rz KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKIAkJCQkJICBzdHJ1Y3QgZHJtX2k5MTVf ZXJyb3JfZW5naW5lICplZSkKIHsKLQljb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2V4ZWNsaXN0 cyAqIGNvbnN0IGV4ZWNsaXN0cyA9ICZlbmdpbmUtPmV4ZWNsaXN0czsKKwlzdHJ1Y3QgaW50ZWxf ZW5naW5lX2V4ZWNsaXN0cyAqIGNvbnN0IGV4ZWNsaXN0cyA9ICZlbmdpbmUtPmV4ZWNsaXN0czsK IAl1bnNpZ25lZCBpbnQgbjsKIAogCWZvciAobiA9IDA7IG4gPCBleGVjbGlzdHNfbnVtX3BvcnRz KGV4ZWNsaXN0cyk7IG4rKykgewotCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJxID0g cG9ydF9yZXF1ZXN0KCZleGVjbGlzdHMtPnBvcnRbbl0pOworCQlzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X3JlcXVlc3QgKnJxOworCisJCXJxID0gcG9ydF9yZXF1ZXN0KGV4ZWNsaXN0c19wb3J0KGV4ZWNs aXN0cywgbikpOwogCiAJCWlmICghcnEpCiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ3VjX3N1Ym1pc3Npb24uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZ3VjX3N1Ym1pc3Npb24uYwppbmRleCBkMTRjMTM0MmYwOWQuLjQ1ODY1OGU4ZTk5YiAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ndWNfc3VibWlzc2lvbi5jCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3VjX3N1Ym1pc3Npb24uYwpAQCAtNjkzLDE2 ICs2OTMsMTggQEAgc3RhdGljIHZvaWQgaTkxNV9ndWNfc3VibWl0KHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSkKIHsKIAlzdHJ1Y3QgaW50ZWxfZ3VjICpndWMgPSAmZW5naW5lLT5pOTE1 LT5ndWM7CiAJc3RydWN0IGludGVsX2VuZ2luZV9leGVjbGlzdHMgKiBjb25zdCBleGVjbGlzdHMg PSAmZW5naW5lLT5leGVjbGlzdHM7Ci0Jc3RydWN0IGV4ZWNsaXN0X3BvcnQgKnBvcnQgPSBleGVj bGlzdHMtPnBvcnQ7CiAJdW5zaWduZWQgaW50IG47CiAKIAlmb3IgKG4gPSAwOyBuIDwgZXhlY2xp c3RzX251bV9wb3J0cyhleGVjbGlzdHMpOyBuKyspIHsKKwkJc3RydWN0IGV4ZWNsaXN0X3BvcnQg KnBvcnQ7CiAJCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcnE7CiAJCXVuc2lnbmVkIGlu dCBjb3VudDsKIAotCQlycSA9IHBvcnRfdW5wYWNrKCZwb3J0W25dLCAmY291bnQpOworCQlwb3J0 ID0gZXhlY2xpc3RzX3BvcnQoZXhlY2xpc3RzLCBuKTsKKwkJcnEgPSBwb3J0X3VucGFjayhwb3J0 LCAmY291bnQpOworCiAJCWlmIChycSAmJiBjb3VudCA9PSAwKSB7Ci0JCQlwb3J0X3NldCgmcG9y dFtuXSwgcG9ydF9wYWNrKHJxLCArK2NvdW50KSk7CisJCQlwb3J0X3NldChwb3J0LCBwb3J0X3Bh Y2socnEsICsrY291bnQpKTsKIAogCQkJZmx1c2hfZ2d0dF93cml0ZXMocnEtPnJpbmctPnZtYSk7 CiAKQEAgLTcyNSwxMCArNzI3LDggQEAgc3RhdGljIHZvaWQgcG9ydF9hc3NpZ24oc3RydWN0IGV4 ZWNsaXN0X3BvcnQgKnBvcnQsCiBzdGF0aWMgdm9pZCBpOTE1X2d1Y19kZXF1ZXVlKHN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIHsKIAlzdHJ1Y3QgaW50ZWxfZW5naW5lX2V4ZWNsaXN0 cyAqIGNvbnN0IGV4ZWNsaXN0cyA9ICZlbmdpbmUtPmV4ZWNsaXN0czsKLQlzdHJ1Y3QgZXhlY2xp c3RfcG9ydCAqcG9ydCA9IGV4ZWNsaXN0cy0+cG9ydDsKKwlzdHJ1Y3QgZXhlY2xpc3RfcG9ydCAq cG9ydCwgKmxhc3RfcG9ydDsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKmxhc3QgPSBO VUxMOwotCWNvbnN0IHN0cnVjdCBleGVjbGlzdF9wb3J0ICogY29uc3QgbGFzdF9wb3J0ID0KLQkJ JmV4ZWNsaXN0cy0+cG9ydFtleGVjbGlzdHMtPnBvcnRfbWFza107CiAJYm9vbCBzdWJtaXQgPSBm YWxzZTsKIAlzdHJ1Y3QgcmJfbm9kZSAqcmI7CiAKQEAgLTczOSw2ICs3MzksOSBAQCBzdGF0aWMg dm9pZCBpOTE1X2d1Y19kZXF1ZXVlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIAlp ZiAoIXJiKQogCQlnb3RvIHVubG9jazsKIAorCXBvcnQgPSBleGVjbGlzdHNfcG9ydF9oZWFkKGV4 ZWNsaXN0cyk7CisJbGFzdF9wb3J0ID0gZXhlY2xpc3RzX3BvcnRfdGFpbChleGVjbGlzdHMpOwor CiAJaWYgKEhBU19MT0dJQ0FMX1JJTkdfUFJFRU1QVElPTihlbmdpbmUtPmk5MTUpICYmIHBvcnRf aXNzZXQocG9ydCkpIHsKIAkJc3RydWN0IGd1Y19wcmVlbXB0X3dvcmsgKnByZWVtcHRfd29yayA9 CiAJCQkmZW5naW5lLT5pOTE1LT5ndWMucHJlZW1wdF93b3JrW2VuZ2luZS0+aWRdOwpAQCAtNzU0 LDcgKzc1Nyw3IEBAIHN0YXRpYyB2b2lkIGk5MTVfZ3VjX2RlcXVldWUoc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqZW5naW5lKQogCQkJZ290byB1bmxvY2s7CiAJCX0KIAotCQlwb3J0Kys7CisJCXBv cnQgPSBleGVjbGlzdHNfcG9ydF9uZXh0KGV4ZWNsaXN0cywgcG9ydCk7CiAJfQogCiAJZG8gewpA QCAtNzcxLDcgKzc3NCw4IEBAIHN0YXRpYyB2b2lkIGk5MTVfZ3VjX2RlcXVldWUoc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lKQogCiAJCQkJaWYgKHN1Ym1pdCkKIAkJCQkJcG9ydF9hc3Np Z24ocG9ydCwgbGFzdCk7Ci0JCQkJcG9ydCsrOworCisJCQkJcG9ydCA9IGV4ZWNsaXN0c19wb3J0 X25leHQoZXhlY2xpc3RzLCBwb3J0KTsKIAkJCX0KIAogCQkJSU5JVF9MSVNUX0hFQUQoJnJxLT5w cmlvdHJlZS5saW5rKTsKQEAgLTc5OSwyNCArODAzLDMyIEBAIHN0YXRpYyB2b2lkIGk5MTVfZ3Vj X2RlcXVldWUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQogCXNwaW5fdW5sb2NrX2ly cSgmZW5naW5lLT50aW1lbGluZS0+bG9jayk7CiB9CiAKLXN0YXRpYyB2b2lkIGk5MTVfZ3VjX2ly cV9oYW5kbGVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3N0YXRpYyB2b2lkIGd1Y19jb21wbGV0ZV9y ZWFkeV9wb3J0cyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2V4ZWNsaXN0cyAqIGNvbnN0IGV4ZWNsaXN0 cykKIHsKLQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICogY29uc3QgZW5naW5lID0gKHN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKilkYXRhOwotCXN0cnVjdCBpbnRlbF9lbmdpbmVfZXhlY2xpc3RzICog Y29uc3QgZXhlY2xpc3RzID0gJmVuZ2luZS0+ZXhlY2xpc3RzOwotCXN0cnVjdCBleGVjbGlzdF9w b3J0ICpwb3J0ID0gZXhlY2xpc3RzLT5wb3J0OwotCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVz dCAqcnE7CisJc3RydWN0IGV4ZWNsaXN0X3BvcnQgKnBvcnQgPSBleGVjbGlzdHNfcG9ydF9oZWFk KGV4ZWNsaXN0cyk7CisKKwl3aGlsZSAocG9ydF9pc3NldChwb3J0KSkgeworCQlzdHJ1Y3QgZHJt X2k5MTVfZ2VtX3JlcXVlc3QgKnJxID0gcG9ydF9yZXF1ZXN0KHBvcnQpOworCisJCWlmICghaTkx NV9nZW1fcmVxdWVzdF9jb21wbGV0ZWQocnEpKQorCQkJYnJlYWs7CiAKLQlycSA9IHBvcnRfcmVx dWVzdCgmcG9ydFswXSk7Ci0Jd2hpbGUgKHJxICYmIGk5MTVfZ2VtX3JlcXVlc3RfY29tcGxldGVk KHJxKSkgewogCQl0cmFjZV9pOTE1X2dlbV9yZXF1ZXN0X291dChycSk7CiAJCWk5MTVfZ2VtX3Jl cXVlc3RfcHV0KHJxKTsKIAotCQlleGVjbGlzdHNfcG9ydF9jb21wbGV0ZShleGVjbGlzdHMsIHBv cnQpOworCQlwb3J0ID0gZXhlY2xpc3RzX2hlYWRfY29tcGxldGUoZXhlY2xpc3RzLCBwb3J0KTsK Kwl9OwogCi0JCXJxID0gcG9ydF9yZXF1ZXN0KCZwb3J0WzBdKTsKLQl9Ci0JaWYgKCFycSkKKwlp ZiAoIXBvcnRfaXNzZXQocG9ydCkpCiAJCWV4ZWNsaXN0c19jbGVhcl9hY3RpdmUoZXhlY2xpc3Rz LCBFWEVDTElTVFNfQUNUSVZFX1VTRVIpOworfQorCitzdGF0aWMgdm9pZCBpOTE1X2d1Y19pcnFf aGFuZGxlcih1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGludGVsX2VuZ2luZV9jcyAq IGNvbnN0IGVuZ2luZSA9IChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICopZGF0YTsKKwlzdHJ1Y3Qg aW50ZWxfZW5naW5lX2V4ZWNsaXN0cyAqIGNvbnN0IGV4ZWNsaXN0cyA9ICZlbmdpbmUtPmV4ZWNs aXN0czsKKworCWd1Y19jb21wbGV0ZV9yZWFkeV9wb3J0cyhleGVjbGlzdHMpOwogCiAJaWYgKGV4 ZWNsaXN0c19pc19hY3RpdmUoZXhlY2xpc3RzLCBFWEVDTElTVFNfQUNUSVZFX1BSRUVNUFQpICYm CiAJICAgIGludGVsX3JlYWRfc3RhdHVzX3BhZ2UoZW5naW5lLCBJOTE1X0dFTV9IV1NfUFJFRU1Q VF9JTkRFWCkgPT0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2VuZ2lu ZV9jcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZW5naW5lX2NzLmMKaW5kZXggZGRi ZTVjOWJmNDVhLi42ZGM0NzE0M2Y0MTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2VuZ2luZV9jcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2VuZ2lu ZV9jcy5jCkBAIC0xNjg3LDcgKzE2ODcsNyBAQCBzdGF0aWMgdm9pZCBwcmludF9yZXF1ZXN0KHN0 cnVjdCBkcm1fcHJpbnRlciAqbSwKIHZvaWQgaW50ZWxfZW5naW5lX2R1bXAoc3RydWN0IGludGVs X2VuZ2luZV9jcyAqZW5naW5lLCBzdHJ1Y3QgZHJtX3ByaW50ZXIgKm0pCiB7CiAJc3RydWN0IGlu dGVsX2JyZWFkY3J1bWJzICogY29uc3QgYiA9ICZlbmdpbmUtPmJyZWFkY3J1bWJzOwotCWNvbnN0 IHN0cnVjdCBpbnRlbF9lbmdpbmVfZXhlY2xpc3RzICogY29uc3QgZXhlY2xpc3RzID0gJmVuZ2lu ZS0+ZXhlY2xpc3RzOworCXN0cnVjdCBpbnRlbF9lbmdpbmVfZXhlY2xpc3RzICogY29uc3QgZXhl Y2xpc3RzID0gJmVuZ2luZS0+ZXhlY2xpc3RzOwogCXN0cnVjdCBpOTE1X2dwdV9lcnJvciAqIGNv bnN0IGVycm9yID0gJmVuZ2luZS0+aTkxNS0+Z3B1X2Vycm9yOwogCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiA9IGVuZ2luZS0+aTkxNTsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3Jl cXVlc3QgKnJxOwpAQCAtMTc5MSwxNiArMTc5MSwyMCBAQCB2b2lkIGludGVsX2VuZ2luZV9kdW1w KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgc3RydWN0IGRybV9wcmludGVyICptKQog CiAJCXJjdV9yZWFkX2xvY2soKTsKIAkJZm9yIChpZHggPSAwOyBpZHggPCBleGVjbGlzdHNfbnVt X3BvcnRzKGV4ZWNsaXN0cyk7IGlkeCsrKSB7Ci0JCQl1bnNpZ25lZCBpbnQgY291bnQ7CisJCQlz dHJ1Y3QgZXhlY2xpc3RfcG9ydCAqcG9ydDsKKwkJCXVuc2lnbmVkIGludCBjb3VudCwgaWR4X2Fi czsKKworCQkJcG9ydCA9IGV4ZWNsaXN0c19wb3J0KGV4ZWNsaXN0cywgaWR4KTsKKwkJCWlkeF9h YnMgPSBwb3J0X2luZGV4KHBvcnQsIGV4ZWNsaXN0cyk7CiAKLQkJCXJxID0gcG9ydF91bnBhY2so JmV4ZWNsaXN0cy0+cG9ydFtpZHhdLCAmY291bnQpOworCQkJcnEgPSBwb3J0X3VucGFjayhwb3J0 LCAmY291bnQpOwogCQkJaWYgKHJxKSB7Ci0JCQkJZHJtX3ByaW50ZihtLCAiXHRcdEVMU1BbJWRd IGNvdW50PSVkLCAiLAotCQkJCQkgICBpZHgsIGNvdW50KTsKKwkJCQlkcm1fcHJpbnRmKG0sICJc dFx0RUxTUFslZDolZF0gY291bnQ9JWQsICIsCisJCQkJCSAgIGlkeCwgaWR4X2FicywgY291bnQp OwogCQkJCXByaW50X3JlcXVlc3QobSwgcnEsICJycTogIik7CiAJCQl9IGVsc2UgewotCQkJCWRy bV9wcmludGYobSwgIlx0XHRFTFNQWyVkXSBpZGxlXG4iLAotCQkJCQkgICBpZHgpOworCQkJCWRy bV9wcmludGYobSwgIlx0XHRFTFNQWyVkOiVkXSBpZGxlXG4iLAorCQkJCQkgICBpZHgsIGlkeF9h YnMpOwogCQkJfQogCQl9CiAJCWRybV9wcmludGYobSwgIlx0XHRIVyBhY3RpdmU/IDB4JXhcbiIs IGV4ZWNsaXN0cy0+YWN0aXZlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2xyYy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMKaW5kZXggNjg0MGVj OGRiMDM3Li42MmMzZTA2YTExMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2xyYy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCkBAIC00NDgs MjQgKzQ0OCwyNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZWxzcF93cml0ZSh1NjQgZGVzYywgdTMy IF9faW9tZW0gKmVsc3ApCiAKIHN0YXRpYyB2b2lkIGV4ZWNsaXN0c19zdWJtaXRfcG9ydHMoc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQogewotCXN0cnVjdCBleGVjbGlzdF9wb3J0ICpw b3J0ID0gZW5naW5lLT5leGVjbGlzdHMucG9ydDsKKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2V4ZWNs aXN0cyAqIGNvbnN0IGV4ZWNsaXN0cyA9ICZlbmdpbmUtPmV4ZWNsaXN0czsKIAl1MzIgX19pb21l bSAqZWxzcCA9CiAJCWVuZ2luZS0+aTkxNS0+cmVncyArIGk5MTVfbW1pb19yZWdfb2Zmc2V0KFJJ TkdfRUxTUChlbmdpbmUpKTsKIAl1bnNpZ25lZCBpbnQgbjsKIAotCWZvciAobiA9IGV4ZWNsaXN0 c19udW1fcG9ydHMoJmVuZ2luZS0+ZXhlY2xpc3RzKTsgbi0tOyApIHsKKwlmb3IgKG4gPSBleGVj bGlzdHNfbnVtX3BvcnRzKGV4ZWNsaXN0cyk7IG4tLTsgKSB7CisJCXN0cnVjdCBleGVjbGlzdF9w b3J0ICpwb3J0OwogCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJxOwogCQl1bnNpZ25l ZCBpbnQgY291bnQ7CiAJCXU2NCBkZXNjOwogCi0JCXJxID0gcG9ydF91bnBhY2soJnBvcnRbbl0s ICZjb3VudCk7CisJCXBvcnQgPSBleGVjbGlzdHNfcG9ydChleGVjbGlzdHMsIG4pOworCQlycSA9 IHBvcnRfdW5wYWNrKHBvcnQsICZjb3VudCk7CiAJCWlmIChycSkgewogCQkJR0VNX0JVR19PTihj b3VudCA+ICFuKTsKIAkJCWlmICghY291bnQrKykKIAkJCQlleGVjbGlzdHNfY29udGV4dF9zdGF0 dXNfY2hhbmdlKHJxLCBJTlRFTF9DT05URVhUX1NDSEVEVUxFX0lOKTsKLQkJCXBvcnRfc2V0KCZw b3J0W25dLCBwb3J0X3BhY2socnEsIGNvdW50KSk7CisJCQlwb3J0X3NldChwb3J0LCBwb3J0X3Bh Y2socnEsIGNvdW50KSk7CiAJCQlkZXNjID0gZXhlY2xpc3RzX3VwZGF0ZV9jb250ZXh0KHJxKTsK LQkJCUdFTV9ERUJVR19FWEVDKHBvcnRbbl0uY29udGV4dF9pZCA9IHVwcGVyXzMyX2JpdHMoZGVz YykpOworCQkJR0VNX0RFQlVHX0VYRUMocG9ydC0+Y29udGV4dF9pZCA9IHVwcGVyXzMyX2JpdHMo ZGVzYykpOwogCQl9IGVsc2UgewogCQkJR0VNX0JVR19PTighbik7CiAJCQlkZXNjID0gMDsKQEAg LTUyOSwxMCArNTMxLDggQEAgc3RhdGljIHZvaWQgaW5qZWN0X3ByZWVtcHRfY29udGV4dChzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiBzdGF0aWMgdm9pZCBleGVjbGlzdHNfZGVxdWV1 ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiB7CiAJc3RydWN0IGludGVsX2VuZ2lu ZV9leGVjbGlzdHMgKiBjb25zdCBleGVjbGlzdHMgPSAmZW5naW5lLT5leGVjbGlzdHM7Ci0Jc3Ry dWN0IGV4ZWNsaXN0X3BvcnQgKnBvcnQgPSBleGVjbGlzdHMtPnBvcnQ7Ci0JY29uc3Qgc3RydWN0 IGV4ZWNsaXN0X3BvcnQgKiBjb25zdCBsYXN0X3BvcnQgPQotCQkmZXhlY2xpc3RzLT5wb3J0W2V4 ZWNsaXN0cy0+cG9ydF9tYXNrXTsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKmxhc3Qg PSBwb3J0X3JlcXVlc3QocG9ydCk7CisJc3RydWN0IGV4ZWNsaXN0X3BvcnQgKnBvcnQsICpsYXN0 X3BvcnQ7CisJc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpsYXN0OwogCXN0cnVjdCByYl9u b2RlICpyYjsKIAlib29sIHN1Ym1pdCA9IGZhbHNlOwogCkBAIC01NjMsNiArNTYzLDkgQEAgc3Rh dGljIHZvaWQgZXhlY2xpc3RzX2RlcXVldWUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l KQogCWlmICghcmIpCiAJCWdvdG8gdW5sb2NrOwogCisJcG9ydCA9IGV4ZWNsaXN0c19wb3J0X2hl YWQoZXhlY2xpc3RzKTsKKwlsYXN0ID0gcG9ydF9yZXF1ZXN0KHBvcnQpOworCiAJaWYgKGxhc3Qp IHsKIAkJLyoKIAkJICogRG9uJ3QgcmVzdWJtaXQgb3Igc3dpdGNoIHVudGlsIGFsbCBvdXRzdGFu ZGluZwpAQCAtNTcwLDcgKzU3Myw3IEBAIHN0YXRpYyB2b2lkIGV4ZWNsaXN0c19kZXF1ZXVlKHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIAkJICoga25vdyB0aGUgbmV4dCBwcmVlbXB0 aW9uIHN0YXR1cyB3ZSBzZWUgY29ycmVzcG9uZHMKIAkJICogdG8gdGhpcyBFTFNQIHVwZGF0ZS4K IAkJICovCi0JCWlmIChwb3J0X2NvdW50KCZwb3J0WzBdKSA+IDEpCisJCWlmIChwb3J0X2NvdW50 KHBvcnQpID4gMSkKIAkJCWdvdG8gdW5sb2NrOwogCiAJCWlmIChIQVNfTE9HSUNBTF9SSU5HX1BS RUVNUFRJT04oZW5naW5lLT5pOTE1KSAmJgpAQCAtNjA1LDcgKzYwOCw3IEBAIHN0YXRpYyB2b2lk IGV4ZWNsaXN0c19kZXF1ZXVlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIAkJCSAq IHRoZSBkcml2ZXIgaXMgdW5hYmxlIHRvIGtlZXAgdXAgdGhlIHN1cHBseSBvZiBuZXcKIAkJCSAq IHdvcmspLgogCQkJICovCi0JCQlpZiAocG9ydF9jb3VudCgmcG9ydFsxXSkpCisJCQlpZiAocG9y dF9jb3VudChleGVjbGlzdHNfcG9ydF9uZXh0KGV4ZWNsaXN0cywgcG9ydCkpKQogCQkJCWdvdG8g dW5sb2NrOwogCiAJCQkvKiBXYUlkbGVMaXRlUmVzdG9yZTpiZHcsc2tsCkBAIC02MTksNiArNjIy LDggQEAgc3RhdGljIHZvaWQgZXhlY2xpc3RzX2RlcXVldWUoc3RydWN0IGludGVsX2VuZ2luZV9j cyAqZW5naW5lKQogCQl9CiAJfQogCisJbGFzdF9wb3J0ID0gZXhlY2xpc3RzX3BvcnRfdGFpbChl eGVjbGlzdHMpOworCiAJZG8gewogCQlzdHJ1Y3QgaTkxNV9wcmlvbGlzdCAqcCA9IHJiX2VudHJ5 KHJiLCB0eXBlb2YoKnApLCBub2RlKTsKIAkJc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpy cSwgKnJuOwpAQCAtNjY1LDcgKzY3MCw4IEBAIHN0YXRpYyB2b2lkIGV4ZWNsaXN0c19kZXF1ZXVl KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIAogCQkJCWlmIChzdWJtaXQpCiAJCQkJ CXBvcnRfYXNzaWduKHBvcnQsIGxhc3QpOwotCQkJCXBvcnQrKzsKKworCQkJCXBvcnQgPSBleGVj bGlzdHNfcG9ydF9uZXh0KGV4ZWNsaXN0cywgcG9ydCk7CiAKIAkJCQlHRU1fQlVHX09OKHBvcnRf aXNzZXQocG9ydCkpOwogCQkJfQpAQCAtNjk5LDggKzcwNSwxMCBAQCBzdGF0aWMgdm9pZCBleGVj bGlzdHNfZGVxdWV1ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiB2b2lkCiBleGVj bGlzdHNfY2FuY2VsX3BvcnRfcmVxdWVzdHMoc3RydWN0IGludGVsX2VuZ2luZV9leGVjbGlzdHMg KiBjb25zdCBleGVjbGlzdHMpCiB7Ci0Jc3RydWN0IGV4ZWNsaXN0X3BvcnQgKnBvcnQgPSBleGVj bGlzdHMtPnBvcnQ7CiAJdW5zaWduZWQgaW50IG51bV9wb3J0cyA9IGV4ZWNsaXN0c19udW1fcG9y dHMoZXhlY2xpc3RzKTsKKwlzdHJ1Y3QgZXhlY2xpc3RfcG9ydCAqcG9ydDsKKworCXBvcnQgPSBl eGVjbGlzdHNfcG9ydF9oZWFkKGV4ZWNsaXN0cyk7CiAKIAl3aGlsZSAobnVtX3BvcnRzLS0gJiYg cG9ydF9pc3NldChwb3J0KSkgewogCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJxID0g cG9ydF9yZXF1ZXN0KHBvcnQpOwpAQCAtNzA5LDkgKzcxNywxMCBAQCBleGVjbGlzdHNfY2FuY2Vs X3BvcnRfcmVxdWVzdHMoc3RydWN0IGludGVsX2VuZ2luZV9leGVjbGlzdHMgKiBjb25zdCBleGVj bGlzdHMpCiAJCWV4ZWNsaXN0c19jb250ZXh0X3N0YXR1c19jaGFuZ2UocnEsIElOVEVMX0NPTlRF WFRfU0NIRURVTEVfUFJFRU1QVEVEKTsKIAkJaTkxNV9nZW1fcmVxdWVzdF9wdXQocnEpOwogCi0J CW1lbXNldChwb3J0LCAwLCBzaXplb2YoKnBvcnQpKTsKLQkJcG9ydCsrOworCQlwb3J0ID0gZXhl Y2xpc3RzX2hlYWRfY29tcGxldGUoZXhlY2xpc3RzLCBwb3J0KTsKIAl9CisKKwlHRU1fQlVHX09O KHBvcnRfaXNzZXQoZXhlY2xpc3RzX3BvcnRfaGVhZChleGVjbGlzdHMpKSk7CiB9CiAKIHN0YXRp YyB2b2lkIGV4ZWNsaXN0c19jYW5jZWxfcmVxdWVzdHMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAq ZW5naW5lKQpAQCAtNzc4LDcgKzc4Nyw2IEBAIHN0YXRpYyB2b2lkIGludGVsX2xyY19pcnFfaGFu ZGxlcih1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqIGNv bnN0IGVuZ2luZSA9IChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICopZGF0YTsKIAlzdHJ1Y3QgaW50 ZWxfZW5naW5lX2V4ZWNsaXN0cyAqIGNvbnN0IGV4ZWNsaXN0cyA9ICZlbmdpbmUtPmV4ZWNsaXN0 czsKLQlzdHJ1Y3QgZXhlY2xpc3RfcG9ydCAqIGNvbnN0IHBvcnQgPSBleGVjbGlzdHMtPnBvcnQ7 CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZW5naW5lLT5pOTE1OwogCiAJ LyogV2UgY2FuIHNraXAgYWNxdWlyaW5nIGludGVsX3J1bnRpbWVfcG1fZ2V0KCkgaGVyZSBhcyBp dCB3YXMgdGFrZW4KQEAgLTc5Nyw2ICs4MDUsOCBAQCBzdGF0aWMgdm9pZCBpbnRlbF9scmNfaXJx X2hhbmRsZXIodW5zaWduZWQgbG9uZyBkYXRhKQogCSAqIG5ldyByZXF1ZXN0IChvdXRzaWRlIG9m IHRoZSBjb250ZXh0LXN3aXRjaCBpbnRlcnJ1cHQpLgogCSAqLwogCXdoaWxlICh0ZXN0X2JpdChF TkdJTkVfSVJRX0VYRUNMSVNULCAmZW5naW5lLT5pcnFfcG9zdGVkKSkgeworCQlzdHJ1Y3QgZXhl Y2xpc3RfcG9ydCAqcG9ydDsKKwogCQkvKiBUaGUgSFdTUCBjb250YWlucyBhIChjYWNoZWFibGUp IG1pcnJvciBvZiB0aGUgQ1NCICovCiAJCWNvbnN0IHUzMiAqYnVmID0KIAkJCSZlbmdpbmUtPnN0 YXR1c19wYWdlLnBhZ2VfYWRkcltJOTE1X0hXU19DU0JfQlVGMF9JTkRFWF07CkBAIC04MzMsNiAr ODQzLDggQEAgc3RhdGljIHZvaWQgaW50ZWxfbHJjX2lycV9oYW5kbGVyKHVuc2lnbmVkIGxvbmcg ZGF0YSkKIAkJCXRhaWwgPSBSRUFEX09OQ0UoYnVmW3dyaXRlX2lkeF0pOwogCQl9CiAKKwkJcG9y dCA9IGV4ZWNsaXN0c19wb3J0X2hlYWQoZXhlY2xpc3RzKTsKKwogCQl3aGlsZSAoaGVhZCAhPSB0 YWlsKSB7CiAJCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJxOwogCQkJdW5zaWduZWQg aW50IHN0YXR1czsKQEAgLTg5NSw3ICs5MDcsNyBAQCBzdGF0aWMgdm9pZCBpbnRlbF9scmNfaXJx X2hhbmRsZXIodW5zaWduZWQgbG9uZyBkYXRhKQogCQkJCXRyYWNlX2k5MTVfZ2VtX3JlcXVlc3Rf b3V0KHJxKTsKIAkJCQlpOTE1X2dlbV9yZXF1ZXN0X3B1dChycSk7CiAKLQkJCQlleGVjbGlzdHNf cG9ydF9jb21wbGV0ZShleGVjbGlzdHMsIHBvcnQpOworCQkJCXBvcnQgPSBleGVjbGlzdHNfaGVh ZF9jb21wbGV0ZShleGVjbGlzdHMsIHBvcnQpOwogCQkJfSBlbHNlIHsKIAkJCQlwb3J0X3NldChw b3J0LCBwb3J0X3BhY2socnEsIGNvdW50KSk7CiAJCQl9CkBAIC05MzUsNiArOTQ3LDcgQEAgc3Rh dGljIHZvaWQgaW5zZXJ0X3JlcXVlc3Qoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAog c3RhdGljIHZvaWQgZXhlY2xpc3RzX3N1Ym1pdF9yZXF1ZXN0KHN0cnVjdCBkcm1faTkxNV9nZW1f cmVxdWVzdCAqcmVxdWVzdCkKIHsKIAlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUgPSBy ZXF1ZXN0LT5lbmdpbmU7CisJc3RydWN0IGludGVsX2VuZ2luZV9leGVjbGlzdHMgKiBjb25zdCBl eGVjbGlzdHMgPSAmZW5naW5lLT5leGVjbGlzdHM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAog CS8qIFdpbGwgYmUgY2FsbGVkIGZyb20gaXJxLWNvbnRleHQgd2hlbiB1c2luZyBmb3JlaWduIGZl bmNlcy4gKi8KQEAgLTk0Miw3ICs5NTUsNyBAQCBzdGF0aWMgdm9pZCBleGVjbGlzdHNfc3VibWl0 X3JlcXVlc3Qoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXF1ZXN0KQogCiAJaW5zZXJ0 X3JlcXVlc3QoZW5naW5lLCAmcmVxdWVzdC0+cHJpb3RyZWUsIHJlcXVlc3QtPnByaW90cmVlLnBy aW9yaXR5KTsKIAotCUdFTV9CVUdfT04oIWVuZ2luZS0+ZXhlY2xpc3RzLmZpcnN0KTsKKwlHRU1f QlVHX09OKCFleGVjbGlzdHMtPmZpcnN0KTsKIAlHRU1fQlVHX09OKGxpc3RfZW1wdHkoJnJlcXVl c3QtPnByaW90cmVlLmxpbmspKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVuZ2luZS0+ dGltZWxpbmUtPmxvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX3JpbmdidWZmZXIuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZm ZXIuaAppbmRleCA2OWFkODc1ZmQwMTEuLjkxMzFkNjZmYjYyOCAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX3JpbmdidWZmZXIuaApAQCAtMjU5LDYgKzI1OSwxMSBAQCBzdHJ1Y3QgaW50ZWxf ZW5naW5lX2V4ZWNsaXN0cyB7CiAJdW5zaWduZWQgaW50IHBvcnRfbWFzazsKIAogCS8qKgorCSAq IEBwb3J0X2hlYWQ6IGZpcnN0IHVzZWQgZXhlY2xpc3QgcG9ydAorCSAqLworCXVuc2lnbmVkIGlu dCBwb3J0X2hlYWQ7CisKKwkvKioKIAkgKiBAcXVldWU6IHF1ZXVlIG9mIHJlcXVlc3RzLCBpbiBw cmlvcml0eSBsaXN0cwogCSAqLwogCXN0cnVjdCByYl9yb290IHF1ZXVlOwpAQCAtNTY5LDggKzU3 NCw0MSBAQCBleGVjbGlzdHNfbnVtX3BvcnRzKGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfZXhl Y2xpc3RzICogY29uc3QgZXhlY2xpc3RzKQogCXJldHVybiBleGVjbGlzdHMtPnBvcnRfbWFzayAr IDE7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZAotZXhlY2xpc3RzX3BvcnRfY29tcGxldGUoc3Ry dWN0IGludGVsX2VuZ2luZV9leGVjbGlzdHMgKiBjb25zdCBleGVjbGlzdHMsCisjZGVmaW5lIF9f cG9ydF9hZGQoc3RhcnQsIG4sIG1hc2spICgoKHN0YXJ0KSArIChuKSkgJiAobWFzaykpCisjZGVm aW5lIHBvcnRfaGVhZF9hZGQoZSwgbikgX19wb3J0X2FkZCgoZSktPnBvcnRfaGVhZCwgbiwgKGUp LT5wb3J0X21hc2spCisKKy8qIEluZGV4IHN0YXJ0aW5nIGZyb20gcG9ydF9oZWFkICovCitzdGF0 aWMgaW5saW5lIHN0cnVjdCBleGVjbGlzdF9wb3J0ICoKK2V4ZWNsaXN0c19wb3J0KHN0cnVjdCBp bnRlbF9lbmdpbmVfZXhlY2xpc3RzICogY29uc3QgZXhlY2xpc3RzLAorCSAgICAgICBjb25zdCB1 bnNpZ25lZCBpbnQgbikKK3sKKwlyZXR1cm4gJmV4ZWNsaXN0cy0+cG9ydFtwb3J0X2hlYWRfYWRk KGV4ZWNsaXN0cywgbildOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBleGVjbGlzdF9wb3J0 ICoKK2V4ZWNsaXN0c19wb3J0X2hlYWQoc3RydWN0IGludGVsX2VuZ2luZV9leGVjbGlzdHMgKiBj b25zdCBleGVjbGlzdHMpCit7CisJcmV0dXJuIGV4ZWNsaXN0c19wb3J0KGV4ZWNsaXN0cywgMCk7 Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGV4ZWNsaXN0X3BvcnQgKgorZXhlY2xpc3RzX3Bv cnRfdGFpbChzdHJ1Y3QgaW50ZWxfZW5naW5lX2V4ZWNsaXN0cyAqIGNvbnN0IGV4ZWNsaXN0cykK K3sKKwlyZXR1cm4gZXhlY2xpc3RzX3BvcnQoZXhlY2xpc3RzLCAtMSk7Cit9CisKK3N0YXRpYyBp bmxpbmUgc3RydWN0IGV4ZWNsaXN0X3BvcnQgKgorZXhlY2xpc3RzX3BvcnRfbmV4dChzdHJ1Y3Qg aW50ZWxfZW5naW5lX2V4ZWNsaXN0cyAqIGNvbnN0IGV4ZWNsaXN0cywKKwkJICAgIHN0cnVjdCBl eGVjbGlzdF9wb3J0ICpwb3J0KQoreworCWlmIChwb3J0KysgPT0gZXhlY2xpc3RzLT5wb3J0ICsg ZXhlY2xpc3RzLT5wb3J0X21hc2spCisJCXBvcnQgPSBleGVjbGlzdHMtPnBvcnQ7CisKKwlyZXR1 cm4gcG9ydDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZXhlY2xpc3RfcG9ydCAqCitleGVj bGlzdHNfaGVhZF9jb21wbGV0ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2V4ZWNsaXN0cyAqIGNvbnN0 IGV4ZWNsaXN0cywKIAkJCXN0cnVjdCBleGVjbGlzdF9wb3J0ICogY29uc3QgcG9ydCkKIHsKIAlj b25zdCB1bnNpZ25lZCBpbnQgbSA9IGV4ZWNsaXN0cy0+cG9ydF9tYXNrOwpAQCAtNTgwLDYgKzYx OCw4IEBAIGV4ZWNsaXN0c19wb3J0X2NvbXBsZXRlKHN0cnVjdCBpbnRlbF9lbmdpbmVfZXhlY2xp c3RzICogY29uc3QgZXhlY2xpc3RzLAogCiAJbWVtbW92ZShwb3J0LCBwb3J0ICsgMSwgbSAqIHNp emVvZihzdHJ1Y3QgZXhlY2xpc3RfcG9ydCkpOwogCW1lbXNldChwb3J0ICsgbSwgMCwgc2l6ZW9m KHN0cnVjdCBleGVjbGlzdF9wb3J0KSk7CisKKwlyZXR1cm4gZXhlY2xpc3RzX3BvcnRfaGVhZChl eGVjbGlzdHMpOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAotLSAKMi4xMS4wCgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZngg bWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0 cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK