From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [CI 3/8] drm/i915: Lift sideband locking for vlv_punit_(read|write) Date: Fri, 26 Apr 2019 09:17:20 +0100 Message-ID: <20190426081725.31217-3-chris@chris-wilson.co.uk> References: <20190426081725.31217-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from fireflyinternet.com (mail.fireflyinternet.com [109.228.58.192]) by gabe.freedesktop.org (Postfix) with ESMTPS id 130648922A for ; Fri, 26 Apr 2019 08:17:31 +0000 (UTC) Received: from haswell.alporthouse.com (unverified [78.156.65.138]) by fireflyinternet.com (Firefly Internet (M1)) with ESMTP id 16366652-1500050 for ; Fri, 26 Apr 2019 09:17:27 +0100 In-Reply-To: <20190426081725.31217-1-chris@chris-wilson.co.uk> 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 TGlmdCB0aGUgc2lkZWJhbmQgYWNxdWlzaXRpb24gZm9yIHZsdl9wdW5pdF9yZWFkIGFuZCB2bHZf cHVuaXRfd3JpdGUKaW50byB0aGVpciBjYWxsZXJzLCBzbyB0aGF0IHdlIGNhbiBsb2NrIHRoZSBz aWRlYmFuZCBvbmNlIGZvciBhIHNlcXVlbmNlCm9mIG9wZXJhdGlvbnMsIHJhdGhlciB0aGFuIHBl cmZvcm0gdGhlIGhlYXZ5d2VpZ2h0IGFjcXVpc2l0aW9uIG9uIGVhY2gKcmVxdWVzdC4KClNpZ25l ZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgpSZXZpZXdl ZC1ieTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KLS0t CiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYyAgICAgfCAgNSArKysKIGRyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfc3lzZnMuYyAgICAgICB8IDE0ICsrKystLS0tCiBkcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9jZGNsay5jICAgICAgfCAyMyArKysrKysrKysrLS0tCiBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgICAgfCAxNiArKysrKy0tLS0KIGRyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMgICAgICAgICB8IDQ2ICsrKysrKysrKysrKysrKysr KysrLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3J1bnRpbWVfcG0uYyB8IDEwICsr KysrKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc2lkZWJhbmQuYyAgIHwgMTggKystLS0t LS0tLQogNyBmaWxlcyBjaGFuZ2VkLCA4OSBpbnNlcnRpb25zKCspLCA0MyBkZWxldGlvbnMoLSkK CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jCmluZGV4IDAwZDNmZjc0NmViMS4uNmQ5ODI5 OWZhYzY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYwor KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYwpAQCAtMTA1Nyw3ICsxMDU3 LDEwIEBAIHN0YXRpYyBpbnQgaTkxNV9mcmVxdWVuY3lfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0s IHZvaWQgKnVudXNlZCkKIAkJCSAgIHllc25vKChycG1vZGVjdGwgJiBHRU42X1JQX01FRElBX01P REVfTUFTSykgPT0KIAkJCQkgIEdFTjZfUlBfTUVESUFfU1dfTU9ERSkpOwogCisJCXZsdl9wdW5p dF9nZXQoZGV2X3ByaXYpOwogCQlmcmVxX3N0cyA9IHZsdl9wdW5pdF9yZWFkKGRldl9wcml2LCBQ VU5JVF9SRUdfR1BVX0ZSRVFfU1RTKTsKKwkJdmx2X3B1bml0X3B1dChkZXZfcHJpdik7CisKIAkJ c2VxX3ByaW50ZihtLCAiUFVOSVRfUkVHX0dQVV9GUkVRX1NUUzogMHglMDh4XG4iLCBmcmVxX3N0 cyk7CiAJCXNlcV9wcmludGYobSwgIkREUiBmcmVxOiAlZCBNSHpcbiIsIGRldl9wcml2LT5tZW1f ZnJlcSk7CiAKQEAgLTIwMzAsOCArMjAzMywxMCBAQCBzdGF0aWMgaW50IGk5MTVfcnBzX2Jvb3N0 X2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQogCXdpdGhfaW50ZWxfcnVudGlt ZV9wbV9pZl9pbl91c2UoZGV2X3ByaXYsIHdha2VyZWYpIHsKIAkJaWYgKElTX1ZBTExFWVZJRVco ZGV2X3ByaXYpIHx8IElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKSB7CiAJCQltdXRleF9sb2NrKCZk ZXZfcHJpdi0+cGN1X2xvY2spOworCQkJdmx2X3B1bml0X2dldChkZXZfcHJpdik7CiAJCQlhY3Rf ZnJlcSA9IHZsdl9wdW5pdF9yZWFkKGRldl9wcml2LAogCQkJCQkJICBQVU5JVF9SRUdfR1BVX0ZS RVFfU1RTKTsKKwkJCXZsdl9wdW5pdF9wdXQoZGV2X3ByaXYpOwogCQkJYWN0X2ZyZXEgPSAoYWN0 X2ZyZXEgPj4gOCkgJiAweGZmOwogCQkJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+cGN1X2xvY2sp OwogCQl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zeXNm cy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zeXNmcy5jCmluZGV4IDQxMzEzMDA1YWY0 Mi4uYmZhYmIzZGU0ODA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3N5 c2ZzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zeXNmcy5jCkBAIC0yNTksMjUg KzI1OSwyNSBAQCBzdGF0aWMgc3NpemVfdCBndF9hY3RfZnJlcV9taHpfc2hvdyhzdHJ1Y3QgZGV2 aWNlICprZGV2LAogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGtkZXZf bWlub3JfdG9faTkxNShrZGV2KTsKIAlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKLQlpbnQgcmV0 OworCXUzMiBmcmVxOwogCiAJd2FrZXJlZiA9IGludGVsX3J1bnRpbWVfcG1fZ2V0KGRldl9wcml2 KTsKIAogCW11dGV4X2xvY2soJmRldl9wcml2LT5wY3VfbG9jayk7CiAJaWYgKElTX1ZBTExFWVZJ RVcoZGV2X3ByaXYpIHx8IElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKSB7Ci0JCXUzMiBmcmVxOwor CQl2bHZfcHVuaXRfZ2V0KGRldl9wcml2KTsKIAkJZnJlcSA9IHZsdl9wdW5pdF9yZWFkKGRldl9w cml2LCBQVU5JVF9SRUdfR1BVX0ZSRVFfU1RTKTsKLQkJcmV0ID0gaW50ZWxfZ3B1X2ZyZXEoZGV2 X3ByaXYsIChmcmVxID4+IDgpICYgMHhmZik7CisJCXZsdl9wdW5pdF9wdXQoZGV2X3ByaXYpOwor CisJCWZyZXEgPSAoZnJlcSA+PiA4KSAmIDB4ZmY7CiAJfSBlbHNlIHsKLQkJcmV0ID0gaW50ZWxf Z3B1X2ZyZXEoZGV2X3ByaXYsCi0JCQkJICAgICBpbnRlbF9nZXRfY2FnZihkZXZfcHJpdiwKLQkJ CQkJCSAgICBJOTE1X1JFQUQoR0VONl9SUFNUQVQxKSkpOworCQlmcmVxID0gaW50ZWxfZ2V0X2Nh Z2YoZGV2X3ByaXYsIEk5MTVfUkVBRChHRU42X1JQU1RBVDEpKTsKIAl9CiAJbXV0ZXhfdW5sb2Nr KCZkZXZfcHJpdi0+cGN1X2xvY2spOwogCiAJaW50ZWxfcnVudGltZV9wbV9wdXQoZGV2X3ByaXYs IHdha2VyZWYpOwogCi0JcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIHJl dCk7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIGludGVsX2dwdV9m cmVxKGRldl9wcml2LCBmcmVxKSk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGd0X2N1cl9mcmVxX21o el9zaG93KHN0cnVjdCBkZXZpY2UgKmtkZXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9jZGNsay5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfY2RjbGsuYwpp bmRleCA1ODQ1ZDBhMzc1OTkuLjlkZDIyMjAzYTdlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfY2RjbGsuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9j ZGNsay5jCkBAIC00NjQsMTMgKzQ2NCwxOSBAQCBzdGF0aWMgdm9pZCB2bHZfZ2V0X2NkY2xrKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIHsKIAl1MzIgdmFsOwogCisJbXV0ZXhf bG9jaygmZGV2X3ByaXYtPnBjdV9sb2NrKTsKKwl2bHZfaW9zZl9zYl9nZXQoZGV2X3ByaXYsCisJ CQlCSVQoVkxWX0lPU0ZfU0JfQ0NLKSB8IEJJVChWTFZfSU9TRl9TQl9QVU5JVCkpOworCiAJY2Rj bGtfc3RhdGUtPnZjbyA9IHZsdl9nZXRfaHBsbF92Y28oZGV2X3ByaXYpOwogCWNkY2xrX3N0YXRl LT5jZGNsayA9IHZsdl9nZXRfY2NrX2Nsb2NrKGRldl9wcml2LCAiY2RjbGsiLAogCQkJCQkgICAg ICAgQ0NLX0RJU1BMQVlfQ0xPQ0tfQ09OVFJPTCwKIAkJCQkJICAgICAgIGNkY2xrX3N0YXRlLT52 Y28pOwogCi0JbXV0ZXhfbG9jaygmZGV2X3ByaXYtPnBjdV9sb2NrKTsKIAl2YWwgPSB2bHZfcHVu aXRfcmVhZChkZXZfcHJpdiwgUFVOSVRfUkVHX0RTUFNTUE0pOworCisJdmx2X2lvc2Zfc2JfcHV0 KGRldl9wcml2LAorCQkJQklUKFZMVl9JT1NGX1NCX0NDSykgfCBCSVQoVkxWX0lPU0ZfU0JfUFVO SVQpKTsKIAltdXRleF91bmxvY2soJmRldl9wcml2LT5wY3VfbG9jayk7CiAKIAlpZiAoSVNfVkFM TEVZVklFVyhkZXZfcHJpdikpCkBAIC01NDUsNiArNTUxLDExIEBAIHN0YXRpYyB2b2lkIHZsdl9z ZXRfY2RjbGsoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogCSAqLwogCXdha2Vy ZWYgPSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2dldChkZXZfcHJpdiwgUE9XRVJfRE9NQUlOX1BJUEVf QSk7CiAKKwl2bHZfaW9zZl9zYl9nZXQoZGV2X3ByaXYsCisJCQlCSVQoVkxWX0lPU0ZfU0JfQ0NL KSB8CisJCQlCSVQoVkxWX0lPU0ZfU0JfQlVOSVQpIHwKKwkJCUJJVChWTFZfSU9TRl9TQl9QVU5J VCkpOworCiAJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPnBjdV9sb2NrKTsKIAl2YWwgPSB2bHZfcHVu aXRfcmVhZChkZXZfcHJpdiwgUFVOSVRfUkVHX0RTUFNTUE0pOwogCXZhbCAmPSB+RFNQRlJFUUdV QVJfTUFTSzsKQEAgLTU1Nyw5ICs1NjgsNiBAQCBzdGF0aWMgdm9pZCB2bHZfc2V0X2NkY2xrKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIAl9CiAJbXV0ZXhfdW5sb2NrKCZkZXZf cHJpdi0+cGN1X2xvY2spOwogCi0Jdmx2X2lvc2Zfc2JfZ2V0KGRldl9wcml2LAotCQkJQklUKFZM Vl9JT1NGX1NCX0NDSykgfCBCSVQoVkxWX0lPU0ZfU0JfQlVOSVQpKTsKLQogCWlmIChjZGNsayA9 PSA0MDAwMDApIHsKIAkJdTMyIGRpdmlkZXI7CiAKQEAgLTU5Myw3ICs2MDEsOSBAQCBzdGF0aWMg dm9pZCB2bHZfc2V0X2NkY2xrKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIAl2 bHZfYnVuaXRfd3JpdGUoZGV2X3ByaXYsIEJVTklUX1JFR19CSVNPQywgdmFsKTsKIAogCXZsdl9p b3NmX3NiX3B1dChkZXZfcHJpdiwKLQkJCUJJVChWTFZfSU9TRl9TQl9DQ0spIHwgQklUKFZMVl9J T1NGX1NCX0JVTklUKSk7CisJCQlCSVQoVkxWX0lPU0ZfU0JfQ0NLKSB8CisJCQlCSVQoVkxWX0lP U0ZfU0JfQlVOSVQpIHwKKwkJCUJJVChWTFZfSU9TRl9TQl9QVU5JVCkpOwogCiAJaW50ZWxfdXBk YXRlX2NkY2xrKGRldl9wcml2KTsKIApAQCAtNjMwLDYgKzY0MCw3IEBAIHN0YXRpYyB2b2lkIGNo dl9zZXRfY2RjbGsoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogCXdha2VyZWYg PSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2dldChkZXZfcHJpdiwgUE9XRVJfRE9NQUlOX1BJUEVfQSk7 CiAKIAltdXRleF9sb2NrKCZkZXZfcHJpdi0+cGN1X2xvY2spOworCXZsdl9wdW5pdF9nZXQoZGV2 X3ByaXYpOwogCXZhbCA9IHZsdl9wdW5pdF9yZWFkKGRldl9wcml2LCBQVU5JVF9SRUdfRFNQU1NQ TSk7CiAJdmFsICY9IH5EU1BGUkVRR1VBUl9NQVNLX0NIVjsKIAl2YWwgfD0gKGNtZCA8PCBEU1BG UkVRR1VBUl9TSElGVF9DSFYpOwpAQCAtNjM5LDYgKzY1MCw4IEBAIHN0YXRpYyB2b2lkIGNodl9z ZXRfY2RjbGsoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogCQkgICAgIDUwKSkg ewogCQlEUk1fRVJST1IoInRpbWVkIG91dCB3YWl0aW5nIGZvciBDRGNsayBjaGFuZ2VcbiIpOwog CX0KKworCXZsdl9wdW5pdF9wdXQoZGV2X3ByaXYpOwogCW11dGV4X3VubG9jaygmZGV2X3ByaXYt PnBjdV9sb2NrKTsKIAogCWludGVsX3VwZGF0ZV9jZGNsayhkZXZfcHJpdik7CmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9kaXNwbGF5LmMKaW5kZXggMmRjMDAzODhmZGFmLi5iMzhmNmNlOTJhZjUgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYworKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKQEAgLTE1MiwxMCArMTUyLDggQEAgaW50 IHZsdl9nZXRfaHBsbF92Y28oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCWlu dCBocGxsX2ZyZXEsIHZjb19mcmVxW10gPSB7IDgwMCwgMTYwMCwgMjAwMCwgMjQwMCB9OwogCiAJ LyogT2J0YWluIFNLVSBpbmZvcm1hdGlvbiAqLwotCXZsdl9jY2tfZ2V0KGRldl9wcml2KTsKIAlo cGxsX2ZyZXEgPSB2bHZfY2NrX3JlYWQoZGV2X3ByaXYsIENDS19GVVNFX1JFRykgJgogCQlDQ0tf RlVTRV9IUExMX0ZSRVFfTUFTSzsKLQl2bHZfY2NrX3B1dChkZXZfcHJpdik7CiAKIAlyZXR1cm4g dmNvX2ZyZXFbaHBsbF9mcmVxXSAqIDEwMDA7CiB9CkBAIC0xNjYsMTAgKzE2NCw3IEBAIGludCB2 bHZfZ2V0X2Nja19jbG9jayhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJdTMy IHZhbDsKIAlpbnQgZGl2aWRlcjsKIAotCXZsdl9jY2tfZ2V0KGRldl9wcml2KTsKIAl2YWwgPSB2 bHZfY2NrX3JlYWQoZGV2X3ByaXYsIHJlZyk7Ci0Jdmx2X2Nja19wdXQoZGV2X3ByaXYpOwotCiAJ ZGl2aWRlciA9IHZhbCAmIENDS19GUkVRVUVOQ1lfVkFMVUVTOwogCiAJV0FSTigodmFsICYgQ0NL X0ZSRVFVRU5DWV9TVEFUVVMpICE9CkBAIC0xODIsMTEgKzE3NywxOCBAQCBpbnQgdmx2X2dldF9j Y2tfY2xvY2soc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogaW50IHZsdl9nZXRf Y2NrX2Nsb2NrX2hwbGwoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogCQkJICAg Y29uc3QgY2hhciAqbmFtZSwgdTMyIHJlZykKIHsKKwlpbnQgaHBsbDsKKworCXZsdl9jY2tfZ2V0 KGRldl9wcml2KTsKKwogCWlmIChkZXZfcHJpdi0+aHBsbF9mcmVxID09IDApCiAJCWRldl9wcml2 LT5ocGxsX2ZyZXEgPSB2bHZfZ2V0X2hwbGxfdmNvKGRldl9wcml2KTsKIAotCXJldHVybiB2bHZf Z2V0X2Nja19jbG9jayhkZXZfcHJpdiwgbmFtZSwgcmVnLAotCQkJCSBkZXZfcHJpdi0+aHBsbF9m cmVxKTsKKwlocGxsID0gdmx2X2dldF9jY2tfY2xvY2soZGV2X3ByaXYsIG5hbWUsIHJlZywgZGV2 X3ByaXYtPmhwbGxfZnJlcSk7CisKKwl2bHZfY2NrX3B1dChkZXZfcHJpdik7CisKKwlyZXR1cm4g aHBsbDsKIH0KIAogc3RhdGljIHZvaWQgaW50ZWxfdXBkYXRlX2N6Y2xrKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX3BtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jCmluZGV4IDZjMmY0MTZi OTVhNi4uOWRiMzllYTliZDgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9wbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMKQEAgLTMxOCw2ICsz MTgsNyBAQCBzdGF0aWMgdm9pZCBjaHZfc2V0X21lbW9yeV9kdmZzKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiwgYm9vbCBlbmFibGUpCiAJdTMyIHZhbDsKIAogCW11dGV4X2xvY2so JmRldl9wcml2LT5wY3VfbG9jayk7CisJdmx2X3B1bml0X2dldChkZXZfcHJpdik7CiAKIAl2YWwg PSB2bHZfcHVuaXRfcmVhZChkZXZfcHJpdiwgUFVOSVRfUkVHX0REUl9TRVRVUDIpOwogCWlmIChl bmFibGUpCkBAIC0zMzIsNiArMzMzLDcgQEAgc3RhdGljIHZvaWQgY2h2X3NldF9tZW1vcnlfZHZm cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGJvb2wgZW5hYmxlKQogCQkgICAg ICBGT1JDRV9ERFJfRlJFUV9SRVFfQUNLKSA9PSAwLCAzKSkKIAkJRFJNX0VSUk9SKCJ0aW1lZCBv dXQgd2FpdGluZyBmb3IgUHVuaXQgRERSIERWRlMgcmVxdWVzdFxuIik7CiAKKwl2bHZfcHVuaXRf cHV0KGRldl9wcml2KTsKIAltdXRleF91bmxvY2soJmRldl9wcml2LT5wY3VfbG9jayk7CiB9CiAK QEAgLTM0MCw2ICszNDIsNyBAQCBzdGF0aWMgdm9pZCBjaHZfc2V0X21lbW9yeV9wbTUoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBib29sIGVuYWJsZSkKIAl1MzIgdmFsOwogCiAJ bXV0ZXhfbG9jaygmZGV2X3ByaXYtPnBjdV9sb2NrKTsKKwl2bHZfcHVuaXRfZ2V0KGRldl9wcml2 KTsKIAogCXZhbCA9IHZsdl9wdW5pdF9yZWFkKGRldl9wcml2LCBQVU5JVF9SRUdfRFNQU1NQTSk7 CiAJaWYgKGVuYWJsZSkKQEAgLTM0OCw2ICszNTEsNyBAQCBzdGF0aWMgdm9pZCBjaHZfc2V0X21l bW9yeV9wbTUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBib29sIGVuYWJsZSkK IAkJdmFsICY9IH5EU1BfTUFYRklGT19QTTVfRU5BQkxFOwogCXZsdl9wdW5pdF93cml0ZShkZXZf cHJpdiwgUFVOSVRfUkVHX0RTUFNTUE0sIHZhbCk7CiAKKwl2bHZfcHVuaXRfcHV0KGRldl9wcml2 KTsKIAltdXRleF91bmxvY2soJmRldl9wcml2LT5wY3VfbG9jayk7CiB9CiAKQEAgLTYxNDAsNiAr NjE0NCw3IEBAIHZvaWQgdmx2X3dtX2dldF9od19zdGF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYpCiAKIAlpZiAoSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpIHsKIAkJbXV0ZXhf bG9jaygmZGV2X3ByaXYtPnBjdV9sb2NrKTsKKwkJdmx2X3B1bml0X2dldChkZXZfcHJpdik7CiAK IAkJdmFsID0gdmx2X3B1bml0X3JlYWQoZGV2X3ByaXYsIFBVTklUX1JFR19EU1BTU1BNKTsKIAkJ aWYgKHZhbCAmIERTUF9NQVhGSUZPX1BNNV9FTkFCTEUpCkBAIC02MTY5LDYgKzYxNzQsNyBAQCB2 b2lkIHZsdl93bV9nZXRfaHdfc3RhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KQogCQkJCXdtLT5sZXZlbCA9IFZMVl9XTV9MRVZFTF9ERFJfRFZGUzsKIAkJfQogCisJCXZsdl9w dW5pdF9wdXQoZGV2X3ByaXYpOwogCQltdXRleF91bmxvY2soJmRldl9wcml2LT5wY3VfbG9jayk7 CiAJfQogCkBAIC02NzQzLDcgKzY3NDksOSBAQCBzdGF0aWMgaW50IHZhbGxleXZpZXdfc2V0X3Jw cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHU4IHZhbCkKIAlJOTE1X1dSSVRF KEdFTjZfUE1JTlRSTVNLLCBnZW42X3Jwc19wbV9tYXNrKGRldl9wcml2LCB2YWwpKTsKIAogCWlm ICh2YWwgIT0gZGV2X3ByaXYtPmd0X3BtLnJwcy5jdXJfZnJlcSkgeworCQl2bHZfcHVuaXRfZ2V0 KGRldl9wcml2KTsKIAkJZXJyID0gdmx2X3B1bml0X3dyaXRlKGRldl9wcml2LCBQVU5JVF9SRUdf R1BVX0ZSRVFfUkVRLCB2YWwpOworCQl2bHZfcHVuaXRfcHV0KGRldl9wcml2KTsKIAkJaWYgKGVy cikKIAkJCXJldHVybiBlcnI7CiAKQEAgLTc3NTUsNiArNzc2MywxMSBAQCBzdGF0aWMgdm9pZCB2 YWxsZXl2aWV3X2luaXRfZ3RfcG93ZXJzYXZlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdikKIAogCXZhbGxleXZpZXdfc2V0dXBfcGN0eChkZXZfcHJpdik7CiAKKwl2bHZfaW9zZl9z Yl9nZXQoZGV2X3ByaXYsCisJCQlCSVQoVkxWX0lPU0ZfU0JfUFVOSVQpIHwKKwkJCUJJVChWTFZf SU9TRl9TQl9OQykgfAorCQkJQklUKFZMVl9JT1NGX1NCX0NDSykpOworCiAJdmx2X2luaXRfZ3Bs bF9yZWZfZnJlcShkZXZfcHJpdik7CiAKIAl2YWwgPSB2bHZfcHVuaXRfcmVhZChkZXZfcHJpdiwg UFVOSVRfUkVHX0dQVV9GUkVRX1NUUyk7CkBAIC03NzkyLDYgKzc4MDUsMTEgQEAgc3RhdGljIHZv aWQgdmFsbGV5dmlld19pbml0X2d0X3Bvd2Vyc2F2ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpCiAJRFJNX0RFQlVHX0RSSVZFUigibWluIEdQVSBmcmVxOiAlZCBNSHogKCV1KVxu IiwKIAkJCSBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgcnBzLT5taW5fZnJlcSksCiAJCQkgcnBz LT5taW5fZnJlcSk7CisKKwl2bHZfaW9zZl9zYl9wdXQoZGV2X3ByaXYsCisJCQlCSVQoVkxWX0lP U0ZfU0JfUFVOSVQpIHwKKwkJCUJJVChWTFZfSU9TRl9TQl9OQykgfAorCQkJQklUKFZMVl9JT1NG X1NCX0NDSykpOwogfQogCiBzdGF0aWMgdm9pZCBjaGVycnl2aWV3X2luaXRfZ3RfcG93ZXJzYXZl KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKQEAgLTc4MDEsMTEgKzc4MTksMTQg QEAgc3RhdGljIHZvaWQgY2hlcnJ5dmlld19pbml0X2d0X3Bvd2Vyc2F2ZShzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAKIAljaGVycnl2aWV3X3NldHVwX3BjdHgoZGV2X3ByaXYp OwogCisJdmx2X2lvc2Zfc2JfZ2V0KGRldl9wcml2LAorCQkJQklUKFZMVl9JT1NGX1NCX1BVTklU KSB8CisJCQlCSVQoVkxWX0lPU0ZfU0JfTkMpIHwKKwkJCUJJVChWTFZfSU9TRl9TQl9DQ0spKTsK KwogCXZsdl9pbml0X2dwbGxfcmVmX2ZyZXEoZGV2X3ByaXYpOwogCi0Jdmx2X2Nja19nZXQoZGV2 X3ByaXYpOwogCXZhbCA9IHZsdl9jY2tfcmVhZChkZXZfcHJpdiwgQ0NLX0ZVU0VfUkVHKTsKLQl2 bHZfY2NrX3B1dChkZXZfcHJpdik7CiAKIAlzd2l0Y2ggKCh2YWwgPj4gMikgJiAweDcpIHsKIAlj YXNlIDM6CkBAIC03ODM4LDYgKzc4NTksMTEgQEAgc3RhdGljIHZvaWQgY2hlcnJ5dmlld19pbml0 X2d0X3Bvd2Vyc2F2ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJCQkgaW50 ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIHJwcy0+bWluX2ZyZXEpLAogCQkJIHJwcy0+bWluX2ZyZXEp OwogCisJdmx2X2lvc2Zfc2JfcHV0KGRldl9wcml2LAorCQkJQklUKFZMVl9JT1NGX1NCX1BVTklU KSB8CisJCQlCSVQoVkxWX0lPU0ZfU0JfTkMpIHwKKwkJCUJJVChWTFZfSU9TRl9TQl9DQ0spKTsK KwogCVdBUk5fT05DRSgocnBzLT5tYXhfZnJlcSB8IHJwcy0+ZWZmaWNpZW50X2ZyZXEgfCBycHMt PnJwMV9mcmVxIHwKIAkJICAgcnBzLT5taW5fZnJlcSkgJiAxLAogCQkgICJPZGQgR1BVIGZyZXEg dmFsdWVzXG4iKTsKQEAgLTc5MjUsMTMgKzc5NTEsMTUgQEAgc3RhdGljIHZvaWQgY2hlcnJ5dmll d19lbmFibGVfcnBzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAkJICAgR0VO Nl9SUF9ET1dOX0lETEVfQVZHKTsKIAogCS8qIFNldHRpbmcgRml4ZWQgQmlhcyAqLwotCXZhbCA9 IFZMVl9PVkVSUklERV9FTiB8Ci0JCSAgVkxWX1NPQ19URFBfRU4gfAotCQkgIENIVl9CSUFTX0NQ VV81MF9TT0NfNTA7CisJdmx2X3B1bml0X2dldChkZXZfcHJpdik7CisKKwl2YWwgPSBWTFZfT1ZF UlJJREVfRU4gfCBWTFZfU09DX1REUF9FTiB8IENIVl9CSUFTX0NQVV81MF9TT0NfNTA7CiAJdmx2 X3B1bml0X3dyaXRlKGRldl9wcml2LCBWTFZfVFVSQk9fU09DX09WRVJSSURFLCB2YWwpOwogCiAJ dmFsID0gdmx2X3B1bml0X3JlYWQoZGV2X3ByaXYsIFBVTklUX1JFR19HUFVfRlJFUV9TVFMpOwog CisJdmx2X3B1bml0X3B1dChkZXZfcHJpdik7CisKIAkvKiBSUFMgY29kZSBhc3N1bWVzIEdQTEwg aXMgdXNlZCAqLwogCVdBUk5fT05DRSgodmFsICYgR1BMTEVOQUJMRSkgPT0gMCwgIkdQTEwgbm90 IGVuYWJsZWRcbiIpOwogCkBAIC04MDA4LDE0ICs4MDM2LDE2IEBAIHN0YXRpYyB2b2lkIHZhbGxl eXZpZXdfZW5hYmxlX3JwcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJCSAg IEdFTjZfUlBfVVBfQlVTWV9BVkcgfAogCQkgICBHRU42X1JQX0RPV05fSURMRV9DT05UKTsKIAor CXZsdl9wdW5pdF9nZXQoZGV2X3ByaXYpOworCiAJLyogU2V0dGluZyBGaXhlZCBCaWFzICovCi0J dmFsID0gVkxWX09WRVJSSURFX0VOIHwKLQkJICBWTFZfU09DX1REUF9FTiB8Ci0JCSAgVkxWX0JJ QVNfQ1BVXzEyNV9TT0NfODc1OworCXZhbCA9IFZMVl9PVkVSUklERV9FTiB8IFZMVl9TT0NfVERQ X0VOIHwgVkxWX0JJQVNfQ1BVXzEyNV9TT0NfODc1OwogCXZsdl9wdW5pdF93cml0ZShkZXZfcHJp diwgVkxWX1RVUkJPX1NPQ19PVkVSUklERSwgdmFsKTsKIAogCXZhbCA9IHZsdl9wdW5pdF9yZWFk KGRldl9wcml2LCBQVU5JVF9SRUdfR1BVX0ZSRVFfU1RTKTsKIAorCXZsdl9wdW5pdF9wdXQoZGV2 X3ByaXYpOworCiAJLyogUlBTIGNvZGUgYXNzdW1lcyBHUExMIGlzIHVzZWQgKi8KIAlXQVJOX09O Q0UoKHZhbCAmIEdQTExFTkFCTEUpID09IDAsICJHUExMIG5vdCBlbmFibGVkXG4iKTsKIApkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcnVudGltZV9wbS5jIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfcnVudGltZV9wbS5jCmluZGV4IDljMTI5NGMyOTU2Ni4uYWM4 YmM1YmFlZjQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ydW50aW1l X3BtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcnVudGltZV9wbS5jCkBAIC0x MjEyLDYgKzEyMTIsNyBAQCBzdGF0aWMgdm9pZCB2bHZfc2V0X3Bvd2VyX3dlbGwoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogCQkJIFBVTklUX1BXUkdUX1BXUl9HQVRFKHB3X2lk eCk7CiAKIAltdXRleF9sb2NrKCZkZXZfcHJpdi0+cGN1X2xvY2spOworCXZsdl9wdW5pdF9nZXQo ZGV2X3ByaXYpOwogCiAjZGVmaW5lIENPTkQgXAogCSgodmx2X3B1bml0X3JlYWQoZGV2X3ByaXYs IFBVTklUX1JFR19QV1JHVF9TVEFUVVMpICYgbWFzaykgPT0gc3RhdGUpCkBAIC0xMjMyLDYgKzEy MzMsNyBAQCBzdGF0aWMgdm9pZCB2bHZfc2V0X3Bvd2VyX3dlbGwoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2LAogI3VuZGVmIENPTkQKIAogb3V0OgorCXZsdl9wdW5pdF9wdXQoZGV2 X3ByaXYpOwogCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPnBjdV9sb2NrKTsKIH0KIApAQCAtMTI2 MCw2ICsxMjYyLDcgQEAgc3RhdGljIGJvb2wgdmx2X3Bvd2VyX3dlbGxfZW5hYmxlZChzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJY3RybCA9IFBVTklUX1BXUkdUX1BXUl9PTihw d19pZHgpOwogCiAJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPnBjdV9sb2NrKTsKKwl2bHZfcHVuaXRf Z2V0KGRldl9wcml2KTsKIAogCXN0YXRlID0gdmx2X3B1bml0X3JlYWQoZGV2X3ByaXYsIFBVTklU X1JFR19QV1JHVF9TVEFUVVMpICYgbWFzazsKIAkvKgpAQCAtMTI3OCw2ICsxMjgxLDcgQEAgc3Rh dGljIGJvb2wgdmx2X3Bvd2VyX3dlbGxfZW5hYmxlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYsCiAJY3RybCA9IHZsdl9wdW5pdF9yZWFkKGRldl9wcml2LCBQVU5JVF9SRUdfUFdS R1RfQ1RSTCkgJiBtYXNrOwogCVdBUk5fT04oY3RybCAhPSBzdGF0ZSk7CiAKKwl2bHZfcHVuaXRf cHV0KGRldl9wcml2KTsKIAltdXRleF91bmxvY2soJmRldl9wcml2LT5wY3VfbG9jayk7CiAKIAly ZXR1cm4gZW5hYmxlZDsKQEAgLTE3NjUsNiArMTc2OSw3IEBAIHN0YXRpYyBib29sIGNodl9waXBl X3Bvd2VyX3dlbGxfZW5hYmxlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJ dTMyIHN0YXRlLCBjdHJsOwogCiAJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPnBjdV9sb2NrKTsKKwl2 bHZfcHVuaXRfZ2V0KGRldl9wcml2KTsKIAogCXN0YXRlID0gdmx2X3B1bml0X3JlYWQoZGV2X3By aXYsIFBVTklUX1JFR19EU1BTU1BNKSAmIERQX1NTU19NQVNLKHBpcGUpOwogCS8qCkBAIC0xNzgx LDYgKzE3ODYsNyBAQCBzdGF0aWMgYm9vbCBjaHZfcGlwZV9wb3dlcl93ZWxsX2VuYWJsZWQoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogCWN0cmwgPSB2bHZfcHVuaXRfcmVhZChk ZXZfcHJpdiwgUFVOSVRfUkVHX0RTUFNTUE0pICYgRFBfU1NDX01BU0socGlwZSk7CiAJV0FSTl9P TihjdHJsIDw8IDE2ICE9IHN0YXRlKTsKIAorCXZsdl9wdW5pdF9wdXQoZGV2X3ByaXYpOwogCW11 dGV4X3VubG9jaygmZGV2X3ByaXYtPnBjdV9sb2NrKTsKIAogCXJldHVybiBlbmFibGVkOwpAQCAt MTc5Nyw2ICsxODAzLDcgQEAgc3RhdGljIHZvaWQgY2h2X3NldF9waXBlX3Bvd2VyX3dlbGwoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogCXN0YXRlID0gZW5hYmxlID8gRFBfU1NT X1BXUl9PTihwaXBlKSA6IERQX1NTU19QV1JfR0FURShwaXBlKTsKIAogCW11dGV4X2xvY2soJmRl dl9wcml2LT5wY3VfbG9jayk7CisJdmx2X3B1bml0X2dldChkZXZfcHJpdik7CiAKICNkZWZpbmUg Q09ORCBcCiAJKCh2bHZfcHVuaXRfcmVhZChkZXZfcHJpdiwgUFVOSVRfUkVHX0RTUFNTUE0pICYg RFBfU1NTX01BU0socGlwZSkpID09IHN0YXRlKQpAQCAtMTgxNyw2ICsxODI0LDcgQEAgc3RhdGlj IHZvaWQgY2h2X3NldF9waXBlX3Bvd2VyX3dlbGwoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2LAogI3VuZGVmIENPTkQKIAogb3V0OgorCXZsdl9wdW5pdF9wdXQoZGV2X3ByaXYpOwog CW11dGV4X3VubG9jaygmZGV2X3ByaXYtPnBjdV9sb2NrKTsKIH0KIApAQCAtNDAxMiw3ICs0MDIw LDkgQEAgc3RhdGljIGJvb2wgdmx2X3B1bml0X2lzX3Bvd2VyX2dhdGVkKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiwgdTMyIHJlZzAKIAlib29sIHJldDsKIAogCW11dGV4X2xvY2so JmRldl9wcml2LT5wY3VfbG9jayk7CisJdmx2X3B1bml0X2dldChkZXZfcHJpdik7CiAJcmV0ID0g KHZsdl9wdW5pdF9yZWFkKGRldl9wcml2LCByZWcwKSAmIFNTUE0wX1NTQ19NQVNLKSA9PSBTU1BN MF9TU0NfUFdSX0dBVEU7CisJdmx2X3B1bml0X3B1dChkZXZfcHJpdik7CiAJbXV0ZXhfdW5sb2Nr KCZkZXZfcHJpdi0+cGN1X2xvY2spOwogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX3NpZGViYW5kLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9zaWRlYmFuZC5jCmluZGV4IGIyZmM2MDVlMmUyOS4uN2MzMzkyNWY1MmY5IDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zaWRlYmFuZC5jCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX3NpZGViYW5kLmMKQEAgLTE0NSwzMCArMTQ1LDE4IEBAIHUzMiB2 bHZfcHVuaXRfcmVhZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwgdTMyIGFkZHIpCiAK IAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZpOTE1LT5wY3VfbG9jayk7CiAKLQl2bHZfcHVuaXRfZ2V0 KGk5MTUpOwotCiAJdmx2X3NpZGViYW5kX3J3KGk5MTUsIFBDSV9ERVZGTigwLCAwKSwgSU9TRl9Q T1JUX1BVTklULAogCQkJU0JfQ1JSRERBX05QLCBhZGRyLCAmdmFsKTsKIAotCXZsdl9wdW5pdF9w dXQoaTkxNSk7Ci0KIAlyZXR1cm4gdmFsOwogfQogCiBpbnQgdmx2X3B1bml0X3dyaXRlKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICppOTE1LCB1MzIgYWRkciwgdTMyIHZhbCkKIHsKLQlpbnQgZXJy OwotCiAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmaTkxNS0+cGN1X2xvY2spOwogCi0Jdmx2X3B1bml0 X2dldChpOTE1KTsKLQotCWVyciA9IHZsdl9zaWRlYmFuZF9ydyhpOTE1LCBQQ0lfREVWRk4oMCwg MCksIElPU0ZfUE9SVF9QVU5JVCwKLQkJCSAgICAgIFNCX0NSV1JEQV9OUCwgYWRkciwgJnZhbCk7 Ci0KLQl2bHZfcHVuaXRfcHV0KGk5MTUpOwotCi0JcmV0dXJuIGVycjsKKwlyZXR1cm4gdmx2X3Np ZGViYW5kX3J3KGk5MTUsIFBDSV9ERVZGTigwLCAwKSwgSU9TRl9QT1JUX1BVTklULAorCQkJICAg ICAgIFNCX0NSV1JEQV9OUCwgYWRkciwgJnZhbCk7CiB9CiAKIHUzMiB2bHZfYnVuaXRfcmVhZChz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwgdTMyIHJlZykKQEAgLTE5MSwxMCArMTc5LDgg QEAgdTMyIHZsdl9uY19yZWFkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LCB1OCBhZGRy KQogewogCXUzMiB2YWwgPSAwOwogCi0Jdmx2X25jX2dldChpOTE1KTsKIAl2bHZfc2lkZWJhbmRf cncoaTkxNSwgUENJX0RFVkZOKDAsIDApLCBJT1NGX1BPUlRfTkMsCiAJCQlTQl9DUlJEREFfTlAs IGFkZHIsICZ2YWwpOwotCXZsdl9uY19wdXQoaTkxNSk7CiAKIAlyZXR1cm4gdmFsOwogfQotLSAK Mi4yMC4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJ bnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0 cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZng=