From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rajesh Yadav Subject: [PATCH 2/2] drm/msm: Remove RSC support from DPU driver Date: Fri, 23 Mar 2018 23:14:34 +0530 Message-ID: <1521827074-28424-1-git-send-email-ryadav@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Cc: mark.rutland-5wv7dgnIgG8@public.gmane.org, Rajesh Yadav , robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org, seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, hoegsberg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org List-Id: linux-arm-msm@vger.kernel.org RGlzcGxheSBjb250cm9sbGVyJ3MgcG93ZXIgcmVzb3VyY2VzIGFuZCBidXMKYmFuZHdpZHRoIHZv dGluZyBpcyBjb250cm9sbGVkIGJ5IGRwdSBkcml2ZXIuClJlbW92ZSBEUFUgUlNDIHN1cHBvcnQg Zm9yIG5vdy4KClNpZ25lZC1vZmYtYnk6IFJhamVzaCBZYWRhdiA8cnlhZGF2QGNvZGVhdXJvcmEu b3JnPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jb3JlX3BlcmYuYyAg ICB8ICAxMzAgKy0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jb3JlX3BlcmYu aCAgICB8ICAgIDYgLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuYyAg ICAgICAgIHwgICAxNCAtCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5o ICAgICAgICAgfCAgICA5ICstCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5j b2Rlci5jICAgICAgfCAgMjQyICstLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2Rw dV9lbmNvZGVyLmggICAgICB8ICAgIDcgLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEv ZHB1X2VuY29kZXJfcGh5cy5oIHwgICAgMSAtCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1 MS9kcHVfaHdfdG9wLmMgICAgICAgfCAgIDIwICstCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3Av ZHB1MS9kcHVfaHdfdG9wLmggICAgICAgfCAgICAzIC0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZHB1 X2RiZy5jICAgICAgICAgICAgICAgICAgICB8ICAgMjcgLQogZHJpdmVycy9ncHUvZHJtL21zbS9k cHVfZGJnLmggICAgICAgICAgICAgICAgICAgIHwgICAxMCAtCiBkcml2ZXJzL2dwdS9kcm0vbXNt L2RwdV9wb3dlcl9oYW5kbGUuYyAgICAgICAgICAgfCAgIDcxICstCiBkcml2ZXJzL2dwdS9kcm0v bXNtL2RwdV9wb3dlcl9oYW5kbGUuaCAgICAgICAgICAgfCAgICA0IC0KIGRyaXZlcnMvZ3B1L2Ry bS9tc20vZHB1X3JzYy5jICAgICAgICAgICAgICAgICAgICB8IDEzNjcgLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL21zbS9kcHVfcnNjX2h3LmMgICAgICAgICAgICAgICAg IHwgIDgxOCAtLS0tLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwdV9yc2NfcHJpdi5o ICAgICAgICAgICAgICAgfCAgMTkxIC0tLQogaW5jbHVkZS9saW51eC9kcHVfcnNjLmggICAgICAg ICAgICAgICAgICAgICAgICAgIHwgIDMwMiAtLS0tLQogMTcgZmlsZXMgY2hhbmdlZCwgNDIgaW5z ZXJ0aW9ucygrKSwgMzE4MCBkZWxldGlvbnMoLSkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0vbXNtL2RwdV9yc2MuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS9tc20vZHB1X3JzY19ody5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21z bS9kcHVfcnNjX3ByaXYuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvbGludXgvZHB1X3Jz Yy5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NvcmVf cGVyZi5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NvcmVfcGVyZi5jCmlu ZGV4IDM2YTQ3OTUuLjk4MWY3N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlz cC9kcHUxL2RwdV9jb3JlX3BlcmYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1 MS9kcHVfY29yZV9wZXJmLmMKQEAgLTE4LDcgKzE4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zb3J0 Lmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+Ci0j aW5jbHVkZSA8bGludXgvZHB1X3JzYy5oPgogCiAjaW5jbHVkZSAibXNtX3Byb3AuaCIKIApAQCAt NDIsMjMgKzQxLDYgQEAgZW51bSBkcHVfcGVyZl9tb2RlIHsKIAlEUFVfUEVSRl9NT0RFX01BWAog fTsKIAotLyoqCi0gKiBlbnVtIGRwdV9wZXJmX3ZvdGVfbW9kZTogcGVyZiB2b3RlIG1vZGUuCi0g KiBAQVBQU19SU0NfTU9ERToJSXQgY29tYmluZXMgdGhlIHZvdGUgZm9yIGFsbCBkaXNwbGF5cyBh bmQgdm90ZXMgaXQKLSAqICAgICAgICAgICAgICAgICAgICAgIHRocm91Z2ggQVBQUyByc2MuIFRo aXMgaXMgZGVmYXVsdCBtb2RlIHdoZW4gZGlzcGxheQotICogICAgICAgICAgICAgICAgICAgICAg cnNjIGlzIG5vdCBhdmFpbGFibGUuCi0gKiBARElTUF9SU0NfTU9ERToJSXQgY29tYmluZXMgdGhl IHZvdGUgZm9yIGFsbCBkaXNwbGF5cyBhbmQgdm90ZXMgaXQKLSAqICAgICAgICAgICAgICAgICAg ICAgIHRocm91Z2ggZGlzcGxheSByc2MuIFRoaXMgaXMgZGVmYXVsdCBjb25maWd1cmF0aW9uCi0g KiAgICAgICAgICAgICAgICAgICAgICB3aGVuIGRpc3BsYXkgcnNjIGlzIGF2YWlsYWJsZS4KLSAq IEBESVNQX1JTQ19QUklNQVJZX01PREU6CVRoZSBwcmltYXJ5IGRpc3BsYXkgdm90ZXMgdGhyb3Vn aCBkaXNwbGF5IHJzYwotICogICAgICAgICAgICAgICAgICAgICAgd2hpbGUgYWxsIG90aGVyIGRp c3BsYXlzIHZvdGVzIHRocm91Z2ggYXBwcyByc2MuCi0gKi8KLWVudW0gZHB1X3BlcmZfdm90ZV9t b2RlIHsKLQlBUFBTX1JTQ19NT0RFLAotCURJU1BfUlNDX01PREUsCi0JRElTUF9SU0NfUFJJTUFS WV9NT0RFLAotfTsKLQogc3RhdGljIHN0cnVjdCBkcHVfa21zICpfZHB1X2NydGNfZ2V0X2ttcyhz dHJ1Y3QgZHJtX2NydGMgKmNydGMpCiB7CiAJc3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdjsK QEAgLTI2NiwzOCArMjQ4LDEyIEBAIGludCBkcHVfY29yZV9wZXJmX2NydGNfY2hlY2soc3RydWN0 IGRybV9jcnRjICpjcnRjLAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgX2lz X2NydGNfY2xpZW50X3R5cGVfbWF0Y2hlcyhzdHJ1Y3QgZHJtX2NydGMgKnRtcF9jcnRjLAotCWVu dW0gZHB1X2NydGNfY2xpZW50X3R5cGUgY3Vycl9jbGllbnRfdHlwZSwKLQlzdHJ1Y3QgZHB1X2Nv cmVfcGVyZiAqcGVyZikKLXsKLQlpZiAoIXRtcF9jcnRjKQotCQlyZXR1cm4gZmFsc2U7Ci0JZWxz ZSBpZiAocGVyZi0+Yndfdm90ZV9tb2RlID09IERJU1BfUlNDX1BSSU1BUllfTU9ERSAmJgotCQkJ CQkJCXBlcmYtPmRwdV9yc2NfYXZhaWxhYmxlKQotCQlyZXR1cm4gY3Vycl9jbGllbnRfdHlwZSA9 PSBkcHVfY3J0Y19nZXRfY2xpZW50X3R5cGUodG1wX2NydGMpOwotCWVsc2UKLQkJcmV0dXJuIHRy dWU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZW51bSBkcHVfY3J0Y19jbGllbnRfdHlwZSBfZ2V0X2Rw dV9jbGllbnRfdHlwZSgKLQllbnVtIGRwdV9jcnRjX2NsaWVudF90eXBlIGN1cnJfY2xpZW50X3R5 cGUsCi0Jc3RydWN0IGRwdV9jb3JlX3BlcmYgKnBlcmYpCi17Ci0JaWYgKHBlcmYtPmJ3X3ZvdGVf bW9kZSA9PSBESVNQX1JTQ19QUklNQVJZX01PREUgJiYKLQkJCQkJCXBlcmYtPmRwdV9yc2NfYXZh aWxhYmxlKQotCQlyZXR1cm4gY3Vycl9jbGllbnRfdHlwZTsKLQllbHNlIGlmIChwZXJmLT5id192 b3RlX21vZGUgIT0gQVBQU19SU0NfTU9ERSAmJiBwZXJmLT5kcHVfcnNjX2F2YWlsYWJsZSkKLQkJ cmV0dXJuIFJUX1JTQ19DTElFTlQ7Ci0JZWxzZQotCQlyZXR1cm4gUlRfQ0xJRU5UOwotfQotCiBz dGF0aWMgdm9pZCBfZHB1X2NvcmVfcGVyZl9jcnRjX3VwZGF0ZV9idXMoc3RydWN0IGRwdV9rbXMg KmttcywKIAkJc3RydWN0IGRybV9jcnRjICpjcnRjLCB1MzIgYnVzX2lkKQogewogCXU2NCBid19z dW1fb2ZfaW50ZnMgPSAwLCBidXNfYWJfcXVvdGEsIGJ1c19pYl9xdW90YTsKIAlzdHJ1Y3QgZHB1 X2NvcmVfcGVyZl9wYXJhbXMgcGVyZiA9IHsgeyAwIH0gfTsKLQllbnVtIGRwdV9jcnRjX2NsaWVu dF90eXBlIGNsaWVudF92b3RlLCBjdXJyX2NsaWVudF90eXBlCisJZW51bSBkcHVfY3J0Y19jbGll bnRfdHlwZSBjdXJyX2NsaWVudF90eXBlCiAJCQkJCT0gZHB1X2NydGNfZ2V0X2NsaWVudF90eXBl KGNydGMpOwogCXN0cnVjdCBkcm1fY3J0YyAqdG1wX2NydGM7CiAJc3RydWN0IGRwdV9jcnRjX3N0 YXRlICpkcHVfY3N0YXRlOwpAQCAtMzA1LDggKzI2MSw4IEBAIHN0YXRpYyB2b2lkIF9kcHVfY29y ZV9wZXJmX2NydGNfdXBkYXRlX2J1cyhzdHJ1Y3QgZHB1X2ttcyAqa21zLAogCiAJZHJtX2Zvcl9l YWNoX2NydGModG1wX2NydGMsIGNydGMtPmRldikgewogCQlpZiAoX2RwdV9jb3JlX3BlcmZfY3J0 Y19pc19wb3dlcl9vbih0bXBfY3J0YykgJiYKLQkJICAgIF9pc19jcnRjX2NsaWVudF90eXBlX21h dGNoZXModG1wX2NydGMsIGN1cnJfY2xpZW50X3R5cGUsCi0JCQkJCQkJCSZrbXMtPnBlcmYpKSB7 CisJCQljdXJyX2NsaWVudF90eXBlID09CisJCQkJZHB1X2NydGNfZ2V0X2NsaWVudF90eXBlKHRt cF9jcnRjKSkgewogCQkJZHB1X2NzdGF0ZSA9IHRvX2RwdV9jcnRjX3N0YXRlKHRtcF9jcnRjLT5z dGF0ZSk7CiAKIAkJCXBlcmYubWF4X3Blcl9waXBlX2liW2J1c19pZF0gPQpAQCAtMzI5LDggKzI4 NSw3IEBAIHN0YXRpYyB2b2lkIF9kcHVfY29yZV9wZXJmX2NydGNfdXBkYXRlX2J1cyhzdHJ1Y3Qg ZHB1X2ttcyAqa21zLAogCQlidXNfaWJfcXVvdGEgPSBrbXMtPnBlcmYuZml4X2NvcmVfaWJfdm90 ZTsKIAl9CiAKLQljbGllbnRfdm90ZSA9IF9nZXRfZHB1X2NsaWVudF90eXBlKGN1cnJfY2xpZW50 X3R5cGUsICZrbXMtPnBlcmYpOwotCXN3aXRjaCAoY2xpZW50X3ZvdGUpIHsKKwlzd2l0Y2ggKGN1 cnJfY2xpZW50X3R5cGUpIHsKIAljYXNlIE5SVF9DTElFTlQ6CiAJCWRwdV9wb3dlcl9kYXRhX2J1 c19zZXRfcXVvdGEoJnByaXYtPnBoYW5kbGUsIGttcy0+Y29yZV9jbGllbnQsCiAJCQkJRFBVX1BP V0VSX0hBTkRMRV9EQVRBX0JVU19DTElFTlRfTlJULApAQCAtMzQ3LDQ2ICszMDIsMTAgQEAgc3Rh dGljIHZvaWQgX2RwdV9jb3JlX3BlcmZfY3J0Y191cGRhdGVfYnVzKHN0cnVjdCBkcHVfa21zICpr bXMsCiAJCQkJYnVzX2lkLCBidXNfYWJfcXVvdGEsIGJ1c19pYl9xdW90YSk7CiAJCWJyZWFrOwog Ci0JY2FzZSBSVF9SU0NfQ0xJRU5UOgotCQlkcHVfY3N0YXRlID0gdG9fZHB1X2NydGNfc3RhdGUo Y3J0Yy0+c3RhdGUpOwotCQlkcHVfcnNjX2NsaWVudF92b3RlKGRwdV9jc3RhdGUtPnJzY19jbGll bnQsCi0JCQkJYnVzX2lkLCBidXNfYWJfcXVvdGEsIGJ1c19pYl9xdW90YSk7Ci0JCURQVV9ERUJV RygiY2xpZW50OiVzIGJ1c19pZD0lZCBhYj0lbGx1IGliPSVsbHVcbiIsICJydF9yc2MiLAotCQkJ CWJ1c19pZCwgYnVzX2FiX3F1b3RhLCBidXNfaWJfcXVvdGEpOwotCQlicmVhazsKLQogCWRlZmF1 bHQ6CiAJCURQVV9FUlJPUigiaW52YWxpZCBjbGllbnQgdHlwZTolZFxuIiwgY3Vycl9jbGllbnRf dHlwZSk7CiAJCWJyZWFrOwogCX0KLQotCWlmIChrbXMtPnBlcmYuYndfdm90ZV9tb2RlX3VwZGF0 ZWQpIHsKLQkJc3dpdGNoIChrbXMtPnBlcmYuYndfdm90ZV9tb2RlKSB7Ci0JCWNhc2UgRElTUF9S U0NfTU9ERToKLQkJCWRwdV9wb3dlcl9kYXRhX2J1c19zZXRfcXVvdGEoJnByaXYtPnBoYW5kbGUs Ci0JCQkJa21zLT5jb3JlX2NsaWVudCwKLQkJCQlEUFVfUE9XRVJfSEFORExFX0RBVEFfQlVTX0NM SUVOVF9OUlQsCi0JCQkJYnVzX2lkLCAwLCAwKTsKLQkJCWRwdV9wb3dlcl9kYXRhX2J1c19zZXRf cXVvdGEoJnByaXYtPnBoYW5kbGUsCi0JCQkJa21zLT5jb3JlX2NsaWVudCwKLQkJCQlEUFVfUE9X RVJfSEFORExFX0RBVEFfQlVTX0NMSUVOVF9SVCwKLQkJCQlidXNfaWQsIDAsIDApOwotCQkJa21z LT5wZXJmLmJ3X3ZvdGVfbW9kZV91cGRhdGVkID0gZmFsc2U7Ci0JCQlicmVhazsKLQotCQljYXNl IEFQUFNfUlNDX01PREU6Ci0JCQlkcHVfY3N0YXRlID0gdG9fZHB1X2NydGNfc3RhdGUoY3J0Yy0+ c3RhdGUpOwotCQkJaWYgKGRwdV9jc3RhdGUtPnJzY19jbGllbnQpIHsKLQkJCQlkcHVfcnNjX2Ns aWVudF92b3RlKGRwdV9jc3RhdGUtPnJzY19jbGllbnQsCi0JCQkJCQkJCWJ1c19pZCwgMCwgMCk7 Ci0JCQkJa21zLT5wZXJmLmJ3X3ZvdGVfbW9kZV91cGRhdGVkID0gZmFsc2U7Ci0JCQl9Ci0JCQli cmVhazsKLQotCQlkZWZhdWx0OgotCQkJYnJlYWs7Ci0JCX0KLQl9CiB9CiAKIC8qKgpAQCAtNDE5 LDkgKzMzOCw4IEBAIHZvaWQgZHB1X2NvcmVfcGVyZl9jcnRjX3JlbGVhc2VfYncoc3RydWN0IGRy bV9jcnRjICpjcnRjKQogCWRwdV9jcnRjID0gdG9fZHB1X2NydGMoY3J0Yyk7CiAJZHB1X2NzdGF0 ZSA9IHRvX2RwdV9jcnRjX3N0YXRlKGNydGMtPnN0YXRlKTsKIAotCS8qIG9ubHkgZG8gdGhpcyBm b3IgY29tbWFuZCBtb2RlIHJ0IGNsaWVudCAobm9uLXJzYyBjbGllbnQpICovCi0JaWYgKChkcHVf Y3J0Y19nZXRfaW50Zl9tb2RlKGNydGMpICE9IElOVEZfTU9ERV9DTUQpICYmCi0JCShkcHVfY3J0 Y19nZXRfY2xpZW50X3R5cGUoY3J0YykgIT0gUlRfUlNDX0NMSUVOVCkpCisJLyogb25seSBkbyB0 aGlzIGZvciBjb21tYW5kIG1vZGUgcnQgY2xpZW50ICovCisJaWYgKGRwdV9jcnRjX2dldF9pbnRm X21vZGUoY3J0YykgIT0gSU5URl9NT0RFX0NNRCkKIAkJcmV0dXJuOwogCiAJLyoKQEAgLTQ5NCwx MCArNDEyLDYgQEAgdm9pZCBkcHVfY29yZV9wZXJmX2NydGNfdXBkYXRlKHN0cnVjdCBkcm1fY3J0 YyAqY3J0YywKIAl9CiAJcHJpdiA9IGttcy0+ZGV2LT5kZXZfcHJpdmF0ZTsKIAotCS8qIHdha2Ug dm90ZSB1cGRhdGUgaXMgbm90IHJlcXVpcmVkIHdpdGggZGlzcGxheSByc2MgKi8KLQlpZiAoa21z LT5wZXJmLmJ3X3ZvdGVfbW9kZSA9PSBESVNQX1JTQ19NT0RFICYmIHN0b3BfcmVxKQotCQlyZXR1 cm47Ci0KIAlkcHVfY3J0YyA9IHRvX2RwdV9jcnRjKGNydGMpOwogCWRwdV9jc3RhdGUgPSB0b19k cHVfY3J0Y19zdGF0ZShjcnRjLT5zdGF0ZSk7CiAKQEAgLTUzMywyOCArNDQ3LDYgQEAgdm9pZCBk cHVfY29yZV9wZXJmX2NydGNfdXBkYXRlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAkJCQkJCW5l dy0+bWF4X3Blcl9waXBlX2liW2ldOwogCQkJCXVwZGF0ZV9idXMgfD0gQklUKGkpOwogCQkJfQot Ci0JCQkvKiBkaXNwbGF5IHJzYyBvdmVycmlkZSBkdXJpbmcgc29sdmVyIG1vZGUgKi8KLQkJCWlm IChrbXMtPnBlcmYuYndfdm90ZV9tb2RlID09IERJU1BfUlNDX01PREUgJiYKLQkJCQlnZXRfZHB1 X3JzY19jdXJyZW50X3N0YXRlKERQVV9SU0NfSU5ERVgpID09Ci0JCQkJCQlEUFVfUlNDX0NNRF9T VEFURSkgewotCQkJCS8qIHVwZGF0ZSBuZXcgYmFuZHdpZHRoIGluIGFsbCBjYXNlcyAqLwotCQkJ CWlmIChwYXJhbXNfY2hhbmdlZCAmJiAoKG5ldy0+YndfY3RsW2ldICE9Ci0JCQkJCQlvbGQtPmJ3 X2N0bFtpXSkgfHwKLQkJCQkgICAgICAobmV3LT5tYXhfcGVyX3BpcGVfaWJbaV0gIT0KLQkJCQkJ CW9sZC0+bWF4X3Blcl9waXBlX2liW2ldKSkpIHsKLQkJCQkJb2xkLT5id19jdGxbaV0gPSBuZXct PmJ3X2N0bFtpXTsKLQkJCQkJb2xkLT5tYXhfcGVyX3BpcGVfaWJbaV0gPQotCQkJCQkJCW5ldy0+ bWF4X3Blcl9waXBlX2liW2ldOwotCQkJCQl1cGRhdGVfYnVzIHw9IEJJVChpKTsKLQkJCQkvKgot CQkJCSAqIHJlZHVjZSBidyB2b3RlIGlzIG5vdCByZXF1aXJlZCBpbiBzb2x2ZXIKLQkJCQkgKiBt b2RlCi0JCQkJICovCi0JCQkJfSBlbHNlIGlmICghcGFyYW1zX2NoYW5nZWQpIHsKLQkJCQkJdXBk YXRlX2J1cyAmPSB+QklUKGkpOwotCQkJCX0KLQkJCX0KIAkJfQogCiAJCWlmICgocGFyYW1zX2No YW5nZWQgJiYKQEAgLTczMywxMCArNjI1LDYgQEAgaW50IGRwdV9jb3JlX3BlcmZfZGVidWdmc19p bml0KHN0cnVjdCBkcHVfY29yZV9wZXJmICpwZXJmLAogCQkJKHUzMiAqKSZjYXRhbG9nLT5wZXJm Lm1pbl9kcmFtX2liKTsKIAlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJwZXJmX21vZGUiLCAwNjAwLCBw ZXJmLT5kZWJ1Z2ZzX3Jvb3QsCiAJCQkodTMyICopcGVyZiwgJmRwdV9jb3JlX3BlcmZfbW9kZV9m b3BzKTsKLQlkZWJ1Z2ZzX2NyZWF0ZV91MzIoImJ3X3ZvdGVfbW9kZSIsIDA2MDAsIHBlcmYtPmRl YnVnZnNfcm9vdCwKLQkJCSZwZXJmLT5id192b3RlX21vZGUpOwotCWRlYnVnZnNfY3JlYXRlX2Jv b2woImJ3X3ZvdGVfbW9kZV91cGRhdGVkIiwgMDYwMCwgcGVyZi0+ZGVidWdmc19yb290LAotCQkJ JnBlcmYtPmJ3X3ZvdGVfbW9kZV91cGRhdGVkKTsKIAlkZWJ1Z2ZzX2NyZWF0ZV91NjQoImZpeF9j b3JlX2Nsa19yYXRlIiwgMDYwMCwgcGVyZi0+ZGVidWdmc19yb290LAogCQkJJnBlcmYtPmZpeF9j b3JlX2Nsa19yYXRlKTsKIAlkZWJ1Z2ZzX2NyZWF0ZV91NjQoImZpeF9jb3JlX2liX3ZvdGUiLCAw NjAwLCBwZXJmLT5kZWJ1Z2ZzX3Jvb3QsCkBAIC03OTEsMTIgKzY3OSw2IEBAIGludCBkcHVfY29y ZV9wZXJmX2luaXQoc3RydWN0IGRwdV9jb3JlX3BlcmYgKnBlcmYsCiAJcGVyZi0+cGhhbmRsZSA9 IHBoYW5kbGU7CiAJcGVyZi0+cGNsaWVudCA9IHBjbGllbnQ7CiAJcGVyZi0+Y2xrX25hbWUgPSBj bGtfbmFtZTsKLQlwZXJmLT5kcHVfcnNjX2F2YWlsYWJsZSA9IGlzX2RwdV9yc2NfYXZhaWxhYmxl KERQVV9SU0NfSU5ERVgpOwotCS8qIHNldCBkZWZhdWx0IG1vZGUgKi8KLQlpZiAocGVyZi0+ZHB1 X3JzY19hdmFpbGFibGUpCi0JCXBlcmYtPmJ3X3ZvdGVfbW9kZSA9IERJU1BfUlNDX01PREU7Ci0J ZWxzZQotCQlwZXJmLT5id192b3RlX21vZGUgPSBBUFBTX1JTQ19NT0RFOwogCiAJcGVyZi0+Y29y ZV9jbGsgPSBkcHVfcG93ZXJfY2xrX2dldF9jbGsocGhhbmRsZSwgY2xrX25hbWUpOwogCWlmICgh cGVyZi0+Y29yZV9jbGspIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9jb3JlX3BlcmYuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9j b3JlX3BlcmYuaAppbmRleCAwOWMwMWRhLi4xOTY1ZmY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29yZV9wZXJmLmgKKysrIGIvZHJpdmVycy9ncHUvZHJt L21zbS9kaXNwL2RwdTEvZHB1X2NvcmVfcGVyZi5oCkBAIC02Myw5ICs2Myw2IEBAIHN0cnVjdCBk cHVfY29yZV9wZXJmX3R1bmUgewogICogQGZpeF9jb3JlX2Nsa19yYXRlOiBmaXhlZCBjb3JlIGNs b2NrIHJlcXVlc3QgaW4gSHogdXNlZCBpbiBtb2RlIDIKICAqIEBmaXhfY29yZV9pYl92b3RlOiBm aXhlZCBjb3JlIGliIHZvdGUgaW4gYnBzIHVzZWQgaW4gbW9kZSAyCiAgKiBAZml4X2NvcmVfYWJf dm90ZTogZml4ZWQgY29yZSBhYiB2b3RlIGluIGJwcyB1c2VkIGluIG1vZGUgMgotICogQGJ3X3Zv dGVfbW9kZTogYXBwcyByc2MgdnMgZGlzcGxheSByc2MgYmFuZHdpZHRoIHZvdGUgbW9kZQotICog QGRwdV9yc2NfYXZhaWxhYmxlOiBpcyBkaXNwbGF5IHJzYyBhdmFpbGFibGUKLSAqIEBid192b3Rl X21vZGVfdXBkYXRlZDogYmFuZHdpZHRoIHZvdGUgbW9kZSB1cGRhdGUKICAqLwogc3RydWN0IGRw dV9jb3JlX3BlcmYgewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7CkBAIC04Miw5ICs3OSw2IEBA IHN0cnVjdCBkcHVfY29yZV9wZXJmIHsKIAl1NjQgZml4X2NvcmVfY2xrX3JhdGU7CiAJdTY0IGZp eF9jb3JlX2liX3ZvdGU7CiAJdTY0IGZpeF9jb3JlX2FiX3ZvdGU7Ci0JdTMyIGJ3X3ZvdGVfbW9k ZTsKLQlib29sIGRwdV9yc2NfYXZhaWxhYmxlOwotCWJvb2wgYndfdm90ZV9tb2RlX3VwZGF0ZWQ7 CiB9OwogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2Rw dV9jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5jCmluZGV4 IGJmNDZjZjEuLmZjYjg2YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9jcnRjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2Ny dGMuYwpAQCAtMjA0OCw3ICsyMDQ4LDYgQEAgc3RhdGljIHZvaWQgZHB1X2NydGNfYXRvbWljX2Jl Z2luKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIHN0YXRpYyB2b2lkIGRwdV9jcnRjX2F0b21pY19m bHVzaChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqb2xk X2NydGNfc3RhdGUpCiB7Ci0Jc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOwogCXN0cnVjdCBk cHVfY3J0YyAqZHB1X2NydGM7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgZHJt X3BsYW5lICpwbGFuZTsKQEAgLTIxMDksMTcgKzIxMDgsNiBAQCBzdGF0aWMgdm9pZCBkcHVfY3J0 Y19hdG9taWNfZmx1c2goc3RydWN0IGRybV9jcnRjICpjcnRjLAogCWRybV9hdG9taWNfY3J0Y19m b3JfZWFjaF9wbGFuZShwbGFuZSwgY3J0YykKIAkJZHB1X3BsYW5lX3Jlc3RvcmUocGxhbmUpOwog Ci0JaWYgKCFjc3RhdGUtPnJzY191cGRhdGUpIHsKLQkJZHJtX2Zvcl9lYWNoX2VuY29kZXIoZW5j b2RlciwgZGV2KSB7Ci0JCQlpZiAoZW5jb2Rlci0+Y3J0YyAhPSBjcnRjKQotCQkJCWNvbnRpbnVl OwotCi0JCQljc3RhdGUtPnJzY19jbGllbnQgPQotCQkJCWRwdV9lbmNvZGVyX2dldF9yc2NfY2xp ZW50KGVuY29kZXIpOwotCQl9Ci0JCWNzdGF0ZS0+cnNjX3VwZGF0ZSA9IHRydWU7Ci0JfQotCiAJ LyogdXBkYXRlIHBlcmZvcm1hbmNlIHNldHRpbmcgYmVmb3JlIGNydGMga2lja29mZiAqLwogCWRw dV9jb3JlX3BlcmZfY3J0Y191cGRhdGUoY3J0YywgMSwgZmFsc2UpOwogCkBAIC0yNjYxLDggKzI2 NDksNiBAQCBzdGF0aWMgdm9pZCBkcHVfY3J0Y19kaXNhYmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0 YykKIAkJaWYgKGVuY29kZXItPmNydGMgIT0gY3J0YykKIAkJCWNvbnRpbnVlOwogCQlkcHVfZW5j b2Rlcl9yZWdpc3Rlcl9mcmFtZV9ldmVudF9jYWxsYmFjayhlbmNvZGVyLCBOVUxMLCBOVUxMKTsK LQkJY3N0YXRlLT5yc2NfY2xpZW50ID0gTlVMTDsKLQkJY3N0YXRlLT5yc2NfdXBkYXRlID0gZmFs c2U7CiAJfQogCiAJaWYgKGRwdV9jcnRjLT5wb3dlcl9ldmVudCkKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNt L2Rpc3AvZHB1MS9kcHVfY3J0Yy5oCmluZGV4IGRmMGRjZTMuLjg3NTZiMmIgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmgKKysrIGIvZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuaApAQCAtMzgsMTIgKzM4LDEwIEBACiAgKiAg ICAgICAgICAgICAgdm90aW5nIHRocm91Z2ggYXBwcyByc2MKICAqIEBOUlRfQ0xJRU5UOglOb24t UmVhbFRpbWUgY2xpZW50IGxpa2UgV0IgZGlzcGxheQogICogICAgICAgICAgICAgIHZvdGluZyB0 aHJvdWdoIGFwcHMgcnNjCi0gKiBAUlRfUlNDX0NMSUVOVDoJUmVhbHRpbWUgZGlzcGxheSBSU0Mg dm90aW5nIGNsaWVudAogICovCiBlbnVtIGRwdV9jcnRjX2NsaWVudF90eXBlIHsKIAlSVF9DTElF TlQsCiAJTlJUX0NMSUVOVCwKLQlSVF9SU0NfQ0xJRU5ULAogfTsKIAogLyoqCkBAIC0zMTAsNyAr MzA4LDYgQEAgc3RydWN0IGRwdV9jcnRjX3Jlc3Bvb2wgewogICogQGJhc2U6IEJhc2UgZHJtIGNy dGMgc3RhdGUgc3RydWN0dXJlCiAgKiBAY29ubmVjdG9ycyAgICA6IEN1cnJlbnRseSBhc3NvY2lh dGVkIGRybSBjb25uZWN0b3JzCiAgKiBAbnVtX2Nvbm5lY3RvcnM6IE51bWJlciBvZiBhc3NvY2lh dGVkIGRybSBjb25uZWN0b3JzCi0gKiBAcnNjX2NsaWVudCAgICA6IGRwdSByc2MgY2xpZW50IHdo ZW4gbW9kZSBpcyB2YWxpZAogICogQGlzX3Bwc3BsaXQgICAgOiBXaGV0aGVyIGN1cnJlbnQgdG9w b2xvZ3kgcmVxdWlyZXMgUFBTcGxpdCBzcGVjaWFsIGhhbmRsaW5nCiAgKiBAYndfY29udHJvbCAg ICA6IHRydWUgaWYgYncvY2xrIGNvbnRyb2xsZWQgYnkgY29yZSBidy9jbGsgcHJvcGVydGllcwog ICogQGJ3X3NwbGl0X3ZvdGUgOiB0cnVlIGlmIGJ3IGNvbnRyb2xsZWQgYnkgbGxjYy9kcmFtIGJ3 IHByb3BlcnRpZXMKQEAgLTMzMiw4ICszMjksNiBAQCBzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgewog CiAJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcnNbTUFYX0NPTk5FQ1RPUlNdOwogCWlu dCBudW1fY29ubmVjdG9yczsKLQlzdHJ1Y3QgZHB1X3JzY19jbGllbnQgKnJzY19jbGllbnQ7Ci0J Ym9vbCByc2NfdXBkYXRlOwogCWJvb2wgYndfY29udHJvbDsKIAlib29sIGJ3X3NwbGl0X3ZvdGU7 CiAKQEAgLTQ3MSw3ICs0NjYsNyBAQCBpbnQgZHB1X2NydGNfcmVnaXN0ZXJfY3VzdG9tX2V2ZW50 KHN0cnVjdCBkcHVfa21zICprbXMsCiBlbnVtIGRwdV9pbnRmX21vZGUgZHB1X2NydGNfZ2V0X2lu dGZfbW9kZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwogCiAvKioKLSAqIGRwdV9jcnRjX2dldF9j bGllbnRfdHlwZSAtIGNoZWNrIHRoZSBjcnRjIHR5cGUtIHJ0LCBucnQsIHJzYywgZXRjLgorICog ZHB1X2NydGNfZ2V0X2NsaWVudF90eXBlIC0gY2hlY2sgdGhlIGNydGMgdHlwZS0gcnQsIG5ydCBl dGMuCiAgKiBAY3J0YzogUG9pbnRlciB0byBjcnRjCiAgKi8KIHN0YXRpYyBpbmxpbmUgZW51bSBk cHVfY3J0Y19jbGllbnRfdHlwZSBkcHVfY3J0Y19nZXRfY2xpZW50X3R5cGUoCkBAIC00ODQsNyAr NDc5LDcgQEAgc3RhdGljIGlubGluZSBlbnVtIGRwdV9jcnRjX2NsaWVudF90eXBlIGRwdV9jcnRj X2dldF9jbGllbnRfdHlwZSgKIAkJcmV0dXJuIE5SVF9DTElFTlQ7CiAKIAlyZXR1cm4gZHB1X2Ny dGNfZ2V0X2ludGZfbW9kZShjcnRjKSA9PSBJTlRGX01PREVfV0JfTElORSA/IE5SVF9DTElFTlQg OgotCQkJKGNzdGF0ZS0+cnNjX2NsaWVudCA/IFJUX1JTQ19DTElFTlQgOiBSVF9DTElFTlQpOwor CQkJUlRfQ0xJRU5UOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9k cHVfZW5jb2Rlci5jCmluZGV4IGQ5ZDA4ZmMuLjgzZjRiYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJt L21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXIuYwpAQCAtMjAsNyArMjAsNiBAQAogI2luY2x1ZGUg PGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CiAjaW5jbHVkZSA8 bGludXgvc2VxX2ZpbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9kcHVfcnNjLmg+CiAKICNpbmNsdWRl ICJtc21fZHJ2LmgiCiAjaW5jbHVkZSAiZHB1X2ttcy5oIgpAQCAtNzIsMTcgKzcxLDEzIEBACiAK ICNkZWZpbmUgSURMRV9TSE9SVF9USU1FT1VUCTEKIAotLyogTWF4aW11bSBudW1iZXIgb2YgVlNZ TkMgd2FpdCBhdHRlbXB0cyBmb3IgUlNDIHN0YXRlIHRyYW5zaXRpb24gKi8KLSNkZWZpbmUgTUFY X1JTQ19XQUlUCTUKLQogLyoqCiAgKiBlbnVtIGRwdV9lbmNfcmNfZXZlbnRzIC0gZXZlbnRzIGZv ciByZXNvdXJjZSBjb250cm9sIHN0YXRlIG1hY2hpbmUKICAqIEBEUFVfRU5DX1JDX0VWRU5UX0tJ Q0tPRkY6CiAgKglUaGlzIGV2ZW50IGhhcHBlbnMgYXQgTk9STUFMIHByaW9yaXR5LgogICoJRXZl bnQgdGhhdCBzaWduYWxzIHRoZSBzdGFydCBvZiB0aGUgdHJhbnNmZXIuIFdoZW4gdGhpcyBldmVu dCBpcwotICoJcmVjZWl2ZWQsIGVuYWJsZSBNRFAvRFNJIGNvcmUgY2xvY2tzIGFuZCByZXF1ZXN0 IFJTQyB3aXRoIENNRCBzdGF0ZS4KLSAqCVJlZ2FyZGxlc3Mgb2YgdGhlIHByZXZpb3VzIHN0YXRl LCB0aGUgcmVzb3VyY2Ugc2hvdWxkIGJlIGluIE9OIHN0YXRlCi0gKglhdCB0aGUgZW5kIG9mIHRo aXMgZXZlbnQuCisgKglyZWNlaXZlZCwgZW5hYmxlIE1EUC9EU0kgY29yZSBjbG9ja3MuIFJlZ2Fy ZGxlc3Mgb2YgdGhlIHByZXZpb3VzCisgKglzdGF0ZSwgdGhlIHJlc291cmNlIHNob3VsZCBiZSBp biBPTiBzdGF0ZSBhdCB0aGUgZW5kIG9mIHRoaXMgZXZlbnQuCiAgKiBARFBVX0VOQ19SQ19FVkVO VF9GUkFNRV9ET05FOgogICoJVGhpcyBldmVudCBoYXBwZW5zIGF0IElOVEVSUlVQVCBsZXZlbC4K ICAqCUV2ZW50IHNpZ25hbHMgdGhlIGVuZCBvZiB0aGUgZGF0YSB0cmFuc2ZlciBhZnRlciB0aGUg UFAgRlJBTUVfRE9ORQpAQCAtOTAsOSArODUsOSBAQAogICoJSURMRV9QQyBzdGF0ZSBhZnRlciBJ RExFX1RJTUVPVVQgdGltZS4KICAqIEBEUFVfRU5DX1JDX0VWRU5UX1BSRV9TVE9QOgogICoJVGhp cyBldmVudCBoYXBwZW5zIGF0IE5PUk1BTCBwcmlvcml0eS4KLSAqCVRoaXMgZXZlbnQsIHdoZW4g cmVjZWl2ZWQgZHVyaW5nIHRoZSBPTiBzdGF0ZSwgc2V0IFJTQyB0byBJRExFLCBhbmQKLSAqCWFu ZCBsZWF2ZSB0aGUgUkMgU1RBVEUgaW4gdGhlIFBSRV9PRkYgc3RhdGUuCi0gKglJdCBzaG91bGQg YmUgZm9sbG93ZWQgYnkgdGhlIFNUT1AgZXZlbnQgYXMgcGFydCBvZiBlbmNvZGVyIGRpc2FibGUu CisgKglUaGlzIGV2ZW50LCB3aGVuIHJlY2VpdmVkIGR1cmluZyB0aGUgT04gc3RhdGUsIGxlYXZl IHRoZSBSQyBTVEFURQorICoJaW4gdGhlIFBSRV9PRkYgc3RhdGUuIEl0IHNob3VsZCBiZSBmb2xs b3dlZCBieSB0aGUgU1RPUCBldmVudCBhcworICoJcGFydCBvZiBlbmNvZGVyIGRpc2FibGUuCiAg KglJZiByZWNlaXZlZCBkdXJpbmcgSURMRSBvciBPRkYgc3RhdGVzLCBpdCB3aWxsIGRvIG5vdGhp bmcuCiAgKiBARFBVX0VOQ19SQ19FVkVOVF9TVE9QOgogICoJVGhpcyBldmVudCBoYXBwZW5zIGF0 IE5PUk1BTCBwcmlvcml0eS4KQEAgLTEwOSwxMyArMTA0LDEyIEBACiAgKiBARFBVX0VOQ19SQ19F VkVOVF9QT1NUX01PREVTRVQ6CiAgKglUaGlzIGV2ZW50IGhhcHBlbnMgYXQgTk9STUFMIHByaW9y aXR5IGZyb20gYSB3b3JrIGl0ZW0uCiAgKglFdmVudCBzaWduYWxzIHRoYXQgc2VhbWxlc3MgbW9k ZSBzd2l0Y2ggaXMgY29tcGxldGUgYW5kIHJlc291cmNlcyBhcmUKLSAqCWFjcXVpcmVkLiBDbGll bnRzIHdhbnRzIHRvIHR1cm4gb24gdGhlIGlycSBhZ2FpbiBhbmQgdXBkYXRlIHRoZSByc2MKLSAq CXdpdGggbmV3IHZ0b3RhbC4KKyAqCWFjcXVpcmVkLiBDbGllbnRzIHdhbnRzIHRvIHR1cm4gb24g dGhlIGlycSBhZ2Fpbi4KICAqIEBEUFVfRU5DX1JDX0VWRU5UX0VOVEVSX0lETEU6CiAgKglUaGlz IGV2ZW50IGhhcHBlbnMgYXQgTk9STUFMIHByaW9yaXR5IGZyb20gYSB3b3JrIGl0ZW0uCiAgKglF dmVudCBzaWduYWxzIHRoYXQgdGhlcmUgd2VyZSBubyBmcmFtZSB1cGRhdGVzIGZvciBJRExFX1RJ TUVPVVQgdGltZS4KLSAqCVRoaXMgd291bGQgZGlzYWJsZSBNRFAvRFNJIGNvcmUgY2xvY2tzIGFu ZCByZXF1ZXN0IFJTQyB3aXRoIElETEUgc3RhdGUKLSAqCWFuZCBjaGFuZ2UgdGhlIHJlc291cmNl IHN0YXRlIHRvIElETEUuCisgKglUaGlzIHdvdWxkIGRpc2FibGUgTURQL0RTSSBjb3JlIGNsb2Nr cyBhbmQgY2hhbmdlIHRoZSByZXNvdXJjZSBzdGF0ZQorICoJdG8gSURMRS4KICAqLwogZW51bSBk cHVfZW5jX3JjX2V2ZW50cyB7CiAJRFBVX0VOQ19SQ19FVkVOVF9LSUNLT0ZGID0gMSwKQEAgLTE3 OSw4ICsxNzMsNiBAQCBlbnVtIGRwdV9lbmNfcmNfc3RhdGVzIHsKICAqIEBmcmFtZV9kb25lX3Rp bWVvdXQ6CQlmcmFtZSBkb25lIHRpbWVvdXQgaW4gSHoKICAqIEBmcmFtZV9kb25lX3RpbWVyOgkJ d2F0Y2hkb2cgdGltZXIgZm9yIGZyYW1lIGRvbmUgZXZlbnQKICAqIEB2c3luY19ldmVudF90aW1l cjoJCXZzeW5jIHRpbWVyCi0gKiBAcnNjX2NsaWVudDoJCQlyc2MgY2xpZW50IHBvaW50ZXIKLSAq IEByc2Nfc3RhdGVfaW5pdDoJCWJvb2xlYW4gdG8gaW5kaWNhdGUgcnNjIGNvbmZpZyBpbml0CiAg KiBAZGlzcF9pbmZvOgkJCWxvY2FsIGNvcHkgb2YgbXNtX2Rpc3BsYXlfaW5mbyBzdHJ1Y3QKICAq IEBtb2RlX2luZm86CQkJbG9jYWwgY29weSBvZiBtc21fbW9kZV9pbmZvIHN0cnVjdAogICogQG1p c3JfZW5hYmxlOgkJbWlzciBlbmFibGUvZGlzYWJsZSBzdGF0dXMKQEAgLTE5NCw3ICsxODYsNiBA QCBlbnVtIGRwdV9lbmNfcmNfc3RhdGVzIHsKICAqIEB2c3luY19ldmVudF93b3JrOgkJd29ya2Vy IHRvIGhhbmRsZSB2c3luYyBldmVudCBmb3IgYXV0b3JlZnJlc2gKICAqIEB0b3BvbG9neTogICAg ICAgICAgICAgICAgICAgdG9wb2xvZ3kgb2YgdGhlIGRpc3BsYXkKICAqIEBtb2RlX3NldF9jb21w bGV0ZTogICAgICAgICAgZmxhZyB0byBpbmRpY2F0ZSBtb2Rlc2V0IGNvbXBsZXRpb24KLSAqIEBy c2NfY29uZmlnOgkJCXJzYyBjb25maWd1cmF0aW9uIGZvciBkaXNwbGF5IHZ0b3RhbCwgZnBzLCBl dGMuCiAgKiBAaWRsZV90aW1lb3V0OgkJaWRsZSB0aW1lb3V0IGR1cmF0aW9uIGluIG1pbGxpc2Vj b25kcwogICovCiBzdHJ1Y3QgZHB1X2VuY29kZXJfdmlydCB7CkBAIC0yMjUsOCArMjE2LDYgQEAg c3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQgewogCXN0cnVjdCB0aW1lcl9saXN0IGZyYW1lX2RvbmVf dGltZXI7CiAJc3RydWN0IHRpbWVyX2xpc3QgdnN5bmNfZXZlbnRfdGltZXI7CiAKLQlzdHJ1Y3Qg ZHB1X3JzY19jbGllbnQgKnJzY19jbGllbnQ7Ci0JYm9vbCByc2Nfc3RhdGVfaW5pdDsKIAlzdHJ1 Y3QgbXNtX2Rpc3BsYXlfaW5mbyBkaXNwX2luZm87CiAJc3RydWN0IG1zbV9tb2RlX2luZm8gbW9k ZV9pbmZvOwogCWJvb2wgbWlzcl9lbmFibGU7CkBAIC0yNDAsOCArMjI5LDYgQEAgc3RydWN0IGRw dV9lbmNvZGVyX3ZpcnQgewogCXN0cnVjdCBtc21fZGlzcGxheV90b3BvbG9neSB0b3BvbG9neTsK IAlib29sIG1vZGVfc2V0X2NvbXBsZXRlOwogCi0Jc3RydWN0IGRwdV9yc2NfY21kX2NvbmZpZyBy c2NfY29uZmlnOwotCiAJdTMyIGlkbGVfdGltZW91dDsKIH07CiAKQEAgLTU3MCw3ICs1NTcsNiBA QCB2b2lkIGRwdV9lbmNvZGVyX2Rlc3Ryb3koc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jKQog CURQVV9ERUJVR19FTkMoZHB1X2VuYywgIlxuIik7CiAKIAltdXRleF9sb2NrKCZkcHVfZW5jLT5l bmNfbG9jayk7Ci0JZHB1X3JzY19jbGllbnRfZGVzdHJveShkcHVfZW5jLT5yc2NfY2xpZW50KTsK IAogCWZvciAoaSA9IDA7IGkgPCBkcHVfZW5jLT5udW1fcGh5c19lbmNzOyBpKyspIHsKIAkJc3Ry dWN0IGRwdV9lbmNvZGVyX3BoeXMgKnBoeXMgPSBkcHVfZW5jLT5waHlzX2VuY3NbaV07CkBAIC0x MDY2LDcgKzEwNTIsNyBAQCBzdGF0aWMgaW50IF9kcHVfZW5jb2Rlcl9kc2Nfc2V0dXAoc3RydWN0 IGRwdV9lbmNvZGVyX3ZpcnQgKmRwdV9lbmMpCiB9CiAKIHN0YXRpYyB2b2lkIF9kcHVfZW5jb2Rl cl91cGRhdGVfdnN5bmNfc291cmNlKHN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0ICpkcHVfZW5jLAot CQkJc3RydWN0IG1zbV9kaXNwbGF5X2luZm8gKmRpc3BfaW5mbywgYm9vbCBpc19kdW1teSkKKwkJ CXN0cnVjdCBtc21fZGlzcGxheV9pbmZvICpkaXNwX2luZm8pCiB7CiAJc3RydWN0IGRwdV92c3lu Y19zb3VyY2VfY2ZnIHZzeW5jX2NmZyA9IHsgMCB9OwogCXN0cnVjdCBtc21fZHJtX3ByaXZhdGUg KnByaXY7CkBAIC0xMTE2LDEzICsxMTAyLDEwIEBAIHN0YXRpYyB2b2lkIF9kcHVfZW5jb2Rlcl91 cGRhdGVfdnN5bmNfc291cmNlKHN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0ICpkcHVfZW5jLAogCiAJ CXZzeW5jX2NmZy5wcF9jb3VudCA9IGRwdV9lbmMtPm51bV9waHlzX2VuY3M7CiAJCXZzeW5jX2Nm Zy5mcmFtZV9yYXRlID0gbW9kZV9pbmZvLT5mcmFtZV9yYXRlOwotCQlpZiAoaXNfZHVtbXkpCi0J CQl2c3luY19jZmcudnN5bmNfc291cmNlID0gRFBVX1ZTWU5DX1NPVVJDRV9XRF9USU1FUl8xOwot CQllbHNlIGlmIChkaXNwX2luZm8tPmlzX3RlX3VzaW5nX3dhdGNoZG9nX3RpbWVyKQorCQlpZiAo ZGlzcF9pbmZvLT5pc190ZV91c2luZ193YXRjaGRvZ190aW1lcikKIAkJCXZzeW5jX2NmZy52c3lu Y19zb3VyY2UgPSBEUFVfVlNZTkNfU09VUkNFX1dEX1RJTUVSXzA7CiAJCWVsc2UKIAkJCXZzeW5j X2NmZy52c3luY19zb3VyY2UgPSBEUFVfVlNZTkMwX1NPVVJDRV9HUElPOwotCQl2c3luY19jZmcu aXNfZHVtbXkgPSBpc19kdW1teTsKIAogCQlod19tZHB0b3AtPm9wcy5zZXR1cF92c3luY19zb3Vy Y2UoaHdfbWRwdG9wLCAmdnN5bmNfY2ZnKTsKIAl9CkBAIC0xMjI0LDEzNiArMTIwNyw2IEBAIHN0 YXRpYyBpbnQgX2RwdV9lbmNvZGVyX2RzY19kaXNhYmxlKHN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0 ICpkcHVfZW5jKQogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgX2RwdV9lbmNvZGVyX3Vw ZGF0ZV9yc2NfY2xpZW50KAotCQlzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmMsIGJvb2wgZW5h YmxlKQotewotCXN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0ICpkcHVfZW5jOwotCXN0cnVjdCBkcm1f Y3J0YyAqY3J0YzsKLQllbnVtIGRwdV9yc2Nfc3RhdGUgcnNjX3N0YXRlOwotCXN0cnVjdCBkcHVf cnNjX2NtZF9jb25maWcgKnJzY19jb25maWc7Ci0JaW50IHJldCwgcHJlZmlsbF9saW5lczsKLQlz dHJ1Y3QgbXNtX2Rpc3BsYXlfaW5mbyAqZGlzcF9pbmZvOwotCXN0cnVjdCBtc21fbW9kZV9pbmZv ICptb2RlX2luZm87Ci0JaW50IHdhaXRfdmJsYW5rX2NydGNfaWQgPSBEUFVfUlNDX0lOVkFMSURf Q1JUQ19JRDsKLQlpbnQgd2FpdF9jb3VudCA9IDA7Ci0Jc3RydWN0IGRybV9jcnRjICpwcmltYXJ5 X2NydGM7Ci0JaW50IHBpcGUgPSAtMTsKLQotCWlmICghZHJtX2VuYyB8fCAhZHJtX2VuYy0+Y3J0 YyB8fCAhZHJtX2VuYy0+ZGV2KSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBhcmd1bWVudHNcbiIp OwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlkcHVfZW5jID0gdG9fZHB1X2VuY29kZXJfdmly dChkcm1fZW5jKTsKLQljcnRjID0gZHJtX2VuYy0+Y3J0YzsKLQlkaXNwX2luZm8gPSAmZHB1X2Vu Yy0+ZGlzcF9pbmZvOwotCW1vZGVfaW5mbyA9ICZkcHVfZW5jLT5tb2RlX2luZm87Ci0JcnNjX2Nv bmZpZyA9ICZkcHVfZW5jLT5yc2NfY29uZmlnOwotCi0JaWYgKCFkcHVfZW5jLT5yc2NfY2xpZW50 KSB7Ci0JCURQVV9ERUJVR19FTkMoZHB1X2VuYywgInJzYyBjbGllbnQgbm90IGNyZWF0ZWRcbiIp OwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKioKLQkgKiBvbmx5IHByaW1hcnkgY29tbWFuZCBtb2Rl IHBhbmVsIGNhbiByZXF1ZXN0IENNRCBzdGF0ZS4KLQkgKiBhbGwgb3RoZXIgcGFuZWxzL2Rpc3Bs YXlzIGNhbiByZXF1ZXN0IGZvciBWSUQgc3RhdGUgaW5jbHVkaW5nCi0JICogc2Vjb25kYXJ5IGNv bW1hbmQgbW9kZSBwYW5lbC4KLQkgKi8KLQlyc2Nfc3RhdGUgPSBlbmFibGUgPwotCQkoKChkaXNw X2luZm8tPmNhcGFiaWxpdGllcyAmIE1TTV9ESVNQTEFZX0NBUF9DTURfTU9ERSkgJiYKLQkJICBk aXNwX2luZm8tPmlzX3ByaW1hcnkpID8gRFBVX1JTQ19DTURfU1RBVEUgOgotCQlEUFVfUlNDX1ZJ RF9TVEFURSkgOiBEUFVfUlNDX0lETEVfU1RBVEU7Ci0KLQkvKiBjb21wYXJlIHNwZWNpZmljIGl0 ZW1zIGFuZCByZWNvbmZpZ3VyZSB0aGUgcnNjICovCi0JaWYgKChyc2NfY29uZmlnLT5mcHMgIT0g bW9kZV9pbmZvLT5mcmFtZV9yYXRlKSB8fAotCSAgICAocnNjX2NvbmZpZy0+dnRvdGFsICE9IG1v ZGVfaW5mby0+dnRvdGFsKSB8fAotCSAgICAocnNjX2NvbmZpZy0+cHJlZmlsbF9saW5lcyAhPSBt b2RlX2luZm8tPnByZWZpbGxfbGluZXMpIHx8Ci0JICAgIChyc2NfY29uZmlnLT5qaXR0ZXJfbnVt ZXIgIT0gbW9kZV9pbmZvLT5qaXR0ZXJfbnVtZXIpIHx8Ci0JICAgIChyc2NfY29uZmlnLT5qaXR0 ZXJfZGVub20gIT0gbW9kZV9pbmZvLT5qaXR0ZXJfZGVub20pKSB7Ci0JCXJzY19jb25maWctPmZw cyA9IG1vZGVfaW5mby0+ZnJhbWVfcmF0ZTsKLQkJcnNjX2NvbmZpZy0+dnRvdGFsID0gbW9kZV9p bmZvLT52dG90YWw7Ci0JCXJzY19jb25maWctPnByZWZpbGxfbGluZXMgPSBwcmVmaWxsX2xpbmVz OwotCQlyc2NfY29uZmlnLT5qaXR0ZXJfbnVtZXIgPSBtb2RlX2luZm8tPmppdHRlcl9udW1lcjsK LQkJcnNjX2NvbmZpZy0+aml0dGVyX2Rlbm9tID0gbW9kZV9pbmZvLT5qaXR0ZXJfZGVub207Ci0J CWRwdV9lbmMtPnJzY19zdGF0ZV9pbml0ID0gZmFsc2U7Ci0JfQotCi0JaWYgKHJzY19zdGF0ZSAh PSBEUFVfUlNDX0lETEVfU1RBVEUgJiYgIWRwdV9lbmMtPnJzY19zdGF0ZV9pbml0Ci0JCQkJCSYm IGRpc3BfaW5mby0+aXNfcHJpbWFyeSkgewotCQkvKiB1cGRhdGUgaXQgb25seSBvbmNlICovCi0J CWRwdV9lbmMtPnJzY19zdGF0ZV9pbml0ID0gdHJ1ZTsKLQotCQlyZXQgPSBkcHVfcnNjX2NsaWVu dF9zdGF0ZV91cGRhdGUoZHB1X2VuYy0+cnNjX2NsaWVudCwKLQkJCXJzY19zdGF0ZSwgcnNjX2Nv bmZpZywgY3J0Yy0+YmFzZS5pZCwKLQkJCSZ3YWl0X3ZibGFua19jcnRjX2lkKTsKLQl9IGVsc2Ug ewotCQlyZXQgPSBkcHVfcnNjX2NsaWVudF9zdGF0ZV91cGRhdGUoZHB1X2VuYy0+cnNjX2NsaWVu dCwKLQkJCXJzY19zdGF0ZSwgTlVMTCwgY3J0Yy0+YmFzZS5pZCwKLQkJCSZ3YWl0X3ZibGFua19j cnRjX2lkKTsKLQl9Ci0KLQkvKioKLQkgKiBpZiBSU0MgcGVyZm9ybWVkIGEgc3RhdGUgY2hhbmdl IHRoYXQgcmVxdWlyZXMgYSBWQkxBTksgd2FpdCwgaXQgd2lsbAotCSAqIHNldCB3YWl0X3ZibGFu a19jcnRjX2lkIHRvIHRoZSBDUlRDIHdob3NlIFZCTEFOSyB3ZSBtdXN0IHdhaXQgb24uCi0JICoK LQkgKiBpZiB3ZSBhcmUgdGhlIHByaW1hcnkgZGlzcGxheSwgd2Ugd2lsbCBuZWVkIHRvIGVuYWJs ZSBhbmQgd2FpdAotCSAqIGxvY2FsbHkgc2luY2Ugd2UgaG9sZCB0aGUgY29tbWl0IHRocmVhZAot CSAqCi0JICogaWYgd2UgYXJlIGFuIGV4dGVybmFsIGRpc3BsYXksIHdlIG11c3Qgc2VuZCBhIHNp Z25hbCB0byB0aGUgcHJpbWFyeQotCSAqIHRvIGVuYWJsZSBpdHMgVkJMQU5LIGFuZCB3YWl0IG9u ZSwgc2luY2UgdGhlIFJTQyBoYXJkd2FyZSBpcyBkcml2ZW4KLQkgKiBieSB0aGUgcHJpbWFyeSBw YW5lbCdzIFZCTEFOSyBzaWduYWxzCi0JICovCi0JRFBVX0VWVDMyX1ZFUkJPU0UoRFJNSUQoZHJt X2VuYyksIHdhaXRfdmJsYW5rX2NydGNfaWQpOwotCWlmIChyZXQpIHsKLQkJRFBVX0VSUk9SX0VO QyhkcHVfZW5jLAotCQkJCSJkcHUgcnNjIGNsaWVudCB1cGRhdGUgZmFpbGVkIHJldDolZFxuIiwg cmV0KTsKLQkJcmV0dXJuIHJldDsKLQl9IGVsc2UgaWYgKHdhaXRfdmJsYW5rX2NydGNfaWQgPT0g RFBVX1JTQ19JTlZBTElEX0NSVENfSUQpIHsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlpZiAoY3J0 Yy0+YmFzZS5pZCAhPSB3YWl0X3ZibGFua19jcnRjX2lkKSB7Ci0JCXByaW1hcnlfY3J0YyA9IGRy bV9jcnRjX2ZpbmQoZHJtX2VuYy0+ZGV2LCBOVUxMLAotCQkJCXdhaXRfdmJsYW5rX2NydGNfaWQp OwotCQlpZiAoIXByaW1hcnlfY3J0YykgewotCQkJRFBVX0VSUk9SX0VOQyhkcHVfZW5jLAotCQkJ CQkiZmFpbGVkIHRvIGZpbmQgcHJpbWFyeSBjcnRjIGlkICVkXG4iLAotCQkJCQl3YWl0X3ZibGFu a19jcnRjX2lkKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCXBpcGUgPSBkcm1fY3J0Y19p bmRleChwcmltYXJ5X2NydGMpOwotCX0KLQotCS8qKgotCSAqIG5vdGU6IFZCTEFOSyBpcyBleHBl Y3RlZCB0byBiZSBlbmFibGVkIGF0IHRoaXMgcG9pbnQgaW4KLQkgKiByZXNvdXJjZSBjb250cm9s IHN0YXRlIG1hY2hpbmUgaWYgb24gcHJpbWFyeSBDUlRDCi0JICovCi0JZm9yICh3YWl0X2NvdW50 ID0gMDsgd2FpdF9jb3VudCA8IE1BWF9SU0NfV0FJVDsgd2FpdF9jb3VudCsrKSB7Ci0JCWlmIChk cHVfcnNjX2NsaWVudF9pc19zdGF0ZV91cGRhdGVfY29tcGxldGUoCi0JCQkJZHB1X2VuYy0+cnNj X2NsaWVudCkpCi0JCQlicmVhazsKLQotCQlpZiAoY3J0Yy0+YmFzZS5pZCA9PSB3YWl0X3ZibGFu a19jcnRjX2lkKQotCQkJcmV0ID0gZHB1X2VuY29kZXJfd2FpdF9mb3JfZXZlbnQoZHJtX2VuYywK LQkJCQkJTVNNX0VOQ19WQkxBTkspOwotCQllbHNlCi0JCQlkcm1fd2FpdF9vbmVfdmJsYW5rKGRy bV9lbmMtPmRldiwgcGlwZSk7Ci0KLQkJaWYgKHJldCkgewotCQkJRFBVX0VSUk9SX0VOQyhkcHVf ZW5jLAotCQkJCQkid2FpdCBmb3IgdmJsYW5rIGZhaWxlZCByZXQ6JWRcbiIsIHJldCk7Ci0JCQli cmVhazsKLQkJfQotCX0KLQotCWlmICh3YWl0X2NvdW50ID49IE1BWF9SU0NfV0FJVCkKLQkJRFBV X0VWVDMyKERSTUlEKGRybV9lbmMpLCB3YWl0X3ZibGFua19jcnRjX2lkLCB3YWl0X2NvdW50LAot CQkJCURQVV9FVlRMT0dfRVJST1IpOwotCi0JcmV0dXJuIHJldDsKLX0KLQogc3RhdGljIHZvaWQg X2RwdV9lbmNvZGVyX2lycV9jb250cm9sKHN0cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYywgYm9v bCBlbmFibGUpCiB7CiAJc3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQgKmRwdV9lbmM7CkBAIC0xMzc2 LDQ1ICsxMjI5LDYgQEAgc3RhdGljIHZvaWQgX2RwdV9lbmNvZGVyX2lycV9jb250cm9sKHN0cnVj dCBkcm1fZW5jb2RlciAqZHJtX2VuYywgYm9vbCBlbmFibGUpCiAKIH0KIAotc3RydWN0IGRwdV9y c2NfY2xpZW50ICpkcHVfZW5jb2Rlcl9nZXRfcnNjX2NsaWVudChzdHJ1Y3QgZHJtX2VuY29kZXIg KmRybV9lbmMpCi17Ci0Jc3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQgKmRwdV9lbmM7Ci0KLQlpZiAo IWRybV9lbmMpCi0JCXJldHVybiBOVUxMOwotCWRwdV9lbmMgPSB0b19kcHVfZW5jb2Rlcl92aXJ0 KGRybV9lbmMpOwotCXJldHVybiBkcHVfZW5jLT5yc2NfY2xpZW50OwotfQotCi1zdGF0aWMgdm9p ZCBfZHB1X2VuY29kZXJfcmVzb3VyY2VfY29udHJvbF9yc2NfdXBkYXRlKAotCQlzdHJ1Y3QgZHJt X2VuY29kZXIgKmRybV9lbmMsIGJvb2wgZW5hYmxlKQotewotCXN0cnVjdCBkcHVfZW5jb2Rlcl92 aXJ0ICpkcHVfZW5jID0gdG9fZHB1X2VuY29kZXJfdmlydChkcm1fZW5jKTsKLQlpbnQgaTsKLQot CWlmIChlbmFibGUpIHsKLQkJX2RwdV9lbmNvZGVyX3VwZGF0ZV9yc2NfY2xpZW50KGRybV9lbmMs IHRydWUpOwotCX0gZWxzZSB7Ci0JCV9kcHVfZW5jb2Rlcl91cGRhdGVfcnNjX2NsaWVudChkcm1f ZW5jLCBmYWxzZSk7Ci0KLQkJLyoqCi0JCSAqIGRpc2FibGUgdGhlIHZzeW5jIHNvdXJjZSBhZnRl ciB1cGRhdGluZyB0aGUgcnNjIHN0YXRlLiByc2MKLQkJICogc3RhdGUgdXBkYXRlIG1pZ2h0IGhh dmUgdnN5bmMgd2FpdCBhbmQgdnN5bmMgc291cmNlIG11c3QgYmUKLQkJICogZGlzYWJsZWQgYWZ0 ZXIgaXQuIEl0IHdpbGwgYXZvaWQgZ2VuZXJhdGluZyBhbnkgdnN5bmMgZnJvbQotCQkgKiB0aGlz IHBvaW50IHRpbGwgbW9kZS0yIGVudHJ5LiBJdCBpcyBTVyB3b3JrYXJvdW5kIGZvcgotCQkgKiBI VyBsaW1pdGF0aW9uIGFuZCBzaG91bGQgbm90IGJlIHJlbW92ZWQgd2l0aG91dCBjaGVja2luZyB0 aGUKLQkJICogdXBkYXRlZCBkZXNpZ24uCi0JCSAqLwotCQlmb3IgKGkgPSAwOyBpIDwgZHB1X2Vu Yy0+bnVtX3BoeXNfZW5jczsgaSsrKSB7Ci0JCQlzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyAqcGh5 cyA9IGRwdV9lbmMtPnBoeXNfZW5jc1tpXTsKLQotCQkJaWYgKHBoeXMgJiYgcGh5cy0+b3BzLnBy ZXBhcmVfaWRsZV9wYykKLQkJCQlwaHlzLT5vcHMucHJlcGFyZV9pZGxlX3BjKHBoeXMpOwotCQl9 Ci0KLQl9Ci19Ci0KIHN0YXRpYyB2b2lkIF9kcHVfZW5jb2Rlcl9yZXNvdXJjZV9jb250cm9sX2hl bHBlcihzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmMsCiAJCWJvb2wgZW5hYmxlKQogewpAQCAt MTUzMywxMyArMTM0NywxMCBAQCBzdGF0aWMgaW50IGRwdV9lbmNvZGVyX3Jlc291cmNlX2NvbnRy b2woc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jLAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0K IAotCQlpZiAoaXNfdmlkX21vZGUgJiYgZHB1X2VuYy0+cmNfc3RhdGUgPT0gRFBVX0VOQ19SQ19T VEFURV9JRExFKSB7CisJCWlmIChpc192aWRfbW9kZSAmJiBkcHVfZW5jLT5yY19zdGF0ZSA9PSBE UFVfRU5DX1JDX1NUQVRFX0lETEUpCiAJCQlfZHB1X2VuY29kZXJfaXJxX2NvbnRyb2woZHJtX2Vu YywgdHJ1ZSk7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBlbmFibGUgYWxsIHRoZSBjbGtzIGFuZCByZXNv dXJjZXMgKi8KKwkJZWxzZQogCQkJX2RwdV9lbmNvZGVyX3Jlc291cmNlX2NvbnRyb2xfaGVscGVy KGRybV9lbmMsIHRydWUpOwotCQkJX2RwdV9lbmNvZGVyX3Jlc291cmNlX2NvbnRyb2xfcnNjX3Vw ZGF0ZShkcm1fZW5jLCB0cnVlKTsKLQkJfQogCiAJCURQVV9FVlQzMihEUk1JRChkcm1fZW5jKSwg c3dfZXZlbnQsIGRwdV9lbmMtPnJjX3N0YXRlLAogCQkJCURQVV9FTkNfUkNfU1RBVEVfT04sIERQ VV9FVlRMT0dfRlVOQ19DQVNFMSk7CkBAIC0xNjI5LDEyICsxNDQwLDYgQEAgc3RhdGljIGludCBk cHVfZW5jb2Rlcl9yZXNvdXJjZV9jb250cm9sKHN0cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYywK IAkJCXJldHVybiAwOwogCQl9CiAKLQkJLyoqCi0JCSAqIElSUXMgYXJlIHN0aWxsIGVuYWJsZWQg Y3VycmVudGx5LCB3aGljaCBhbGxvd3Mgd2FpdCBmb3IKLQkJICogVkJMQU5LIHdoaWNoIFJTQyBt YXkgcmVxdWlyZSB0byBjb3JyZWN0bHkgdHJhbnNpdGlvbiB0byBPRkYKLQkJICovCi0JCV9kcHVf ZW5jb2Rlcl9yZXNvdXJjZV9jb250cm9sX3JzY191cGRhdGUoZHJtX2VuYywgZmFsc2UpOwotCiAJ CURQVV9FVlQzMihEUk1JRChkcm1fZW5jKSwgc3dfZXZlbnQsIGRwdV9lbmMtPnJjX3N0YXRlLAog CQkJCURQVV9FTkNfUkNfU1RBVEVfUFJFX09GRiwKIAkJCQlEUFVfRVZUTE9HX0ZVTkNfQ0FTRTMp OwpAQCAtMTY5NCw4ICsxNDk5LDYgQEAgc3RhdGljIGludCBkcHVfZW5jb2Rlcl9yZXNvdXJjZV9j b250cm9sKHN0cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYywKIAkJCS8qIGVuYWJsZSBhbGwgdGhl IGNsa3MgYW5kIHJlc291cmNlcyAqLwogCQkJX2RwdV9lbmNvZGVyX3Jlc291cmNlX2NvbnRyb2xf aGVscGVyKGRybV9lbmMsIHRydWUpOwogCi0JCQlfZHB1X2VuY29kZXJfcmVzb3VyY2VfY29udHJv bF9yc2NfdXBkYXRlKGRybV9lbmMsIHRydWUpOwotCiAJCQlEUFVfRVZUMzIoRFJNSUQoZHJtX2Vu YyksIHN3X2V2ZW50LCBkcHVfZW5jLT5yY19zdGF0ZSwKIAkJCQlEUFVfRU5DX1JDX1NUQVRFX09O LCBEUFVfRVZUTE9HX0ZVTkNfQ0FTRTUpOwogCQkJZHB1X2VuYy0+cmNfc3RhdGUgPSBEUFVfRU5D X1JDX1NUQVRFX09OOwpAQCAtMTczNyw4ICsxNTQwLDYgQEAgc3RhdGljIGludCBkcHVfZW5jb2Rl cl9yZXNvdXJjZV9jb250cm9sKHN0cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYywKIAogCQlfZHB1 X2VuY29kZXJfaXJxX2NvbnRyb2woZHJtX2VuYywgdHJ1ZSk7CiAKLQkJX2RwdV9lbmNvZGVyX3Vw ZGF0ZV9yc2NfY2xpZW50KGRybV9lbmMsIHRydWUpOwotCiAJCURQVV9FVlQzMihEUk1JRChkcm1f ZW5jKSwgc3dfZXZlbnQsIGRwdV9lbmMtPnJjX3N0YXRlLAogCQkJCURQVV9FTkNfUkNfU1RBVEVf T04sIERQVV9FVlRMT0dfRlVOQ19DQVNFNik7CiAKQEAgLTE3NzMsMTQgKzE1NzQsMTAgQEAgc3Rh dGljIGludCBkcHVfZW5jb2Rlcl9yZXNvdXJjZV9jb250cm9sKHN0cnVjdCBkcm1fZW5jb2RlciAq ZHJtX2VuYywKIAkJCXJldHVybiAwOwogCQl9CiAKLQkJaWYgKGlzX3ZpZF9tb2RlKSB7CisJCWlm IChpc192aWRfbW9kZSkKIAkJCV9kcHVfZW5jb2Rlcl9pcnFfY29udHJvbChkcm1fZW5jLCBmYWxz ZSk7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBkaXNhYmxlIGFsbCB0aGUgY2xrcyBhbmQgcmVzb3VyY2Vz ICovCi0JCQlfZHB1X2VuY29kZXJfcmVzb3VyY2VfY29udHJvbF9yc2NfdXBkYXRlKGRybV9lbmMs Ci0JCQkJCQkJCWZhbHNlKTsKKwkJZWxzZQogCQkJX2RwdV9lbmNvZGVyX3Jlc291cmNlX2NvbnRy b2xfaGVscGVyKGRybV9lbmMsIGZhbHNlKTsKLQkJfQogCiAJCURQVV9FVlQzMihEUk1JRChkcm1f ZW5jKSwgc3dfZXZlbnQsIGRwdV9lbmMtPnJjX3N0YXRlLAogCQkJCURQVV9FTkNfUkNfU1RBVEVf SURMRSwgRFBVX0VWVExPR19GVU5DX0NBU0U3KTsKQEAgLTE5NTQsNyArMTc1MSw3IEBAIHN0YXRp YyB2b2lkIF9kcHVfZW5jb2Rlcl92aXJ0X2VuYWJsZV9oZWxwZXIoc3RydWN0IGRybV9lbmNvZGVy ICpkcm1fZW5jKQogCQkJCWRwdV9lbmMtPmN1cl9tYXN0ZXItPmh3X21kcHRvcCwKIAkJCQlkcHVf a21zLT5jYXRhbG9nKTsKIAotCV9kcHVfZW5jb2Rlcl91cGRhdGVfdnN5bmNfc291cmNlKGRwdV9l bmMsICZkcHVfZW5jLT5kaXNwX2luZm8sIGZhbHNlKTsKKwlfZHB1X2VuY29kZXJfdXBkYXRlX3Zz eW5jX3NvdXJjZShkcHVfZW5jLCAmZHB1X2VuYy0+ZGlzcF9pbmZvKTsKIH0KIAogdm9pZCBkcHVf ZW5jb2Rlcl92aXJ0X3Jlc3RvcmUoc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jKQpAQCAtMzU4 OCw3ICszMzg1LDYgQEAgc3RydWN0IGRybV9lbmNvZGVyICpkcHVfZW5jb2Rlcl9pbml0KAogCXN0 cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYyA9IE5VTEw7CiAJc3RydWN0IGRwdV9lbmNvZGVyX3Zp cnQgKmRwdV9lbmMgPSBOVUxMOwogCWludCBkcm1fZW5jX21vZGUgPSBEUk1fTU9ERV9FTkNPREVS X05PTkU7Ci0JY2hhciBuYW1lW0RQVV9OQU1FX1NJWkVdOwogCWludCByZXQgPSAwOwogCiAJZHB1 X2VuYyA9IGt6YWxsb2Moc2l6ZW9mKCpkcHVfZW5jKSwgR0ZQX0tFUk5FTCk7CkBAIC0zNjE5LDE0 ICszNDE1LDYgQEAgc3RydWN0IGRybV9lbmNvZGVyICpkcHVfZW5jb2Rlcl9pbml0KAogCQkJCWRw dV9lbmNvZGVyX3ZzeW5jX2V2ZW50X2hhbmRsZXIsCiAJCQkJMCk7CiAKLQlzbnByaW50ZihuYW1l LCBEUFVfTkFNRV9TSVpFLCAicnNjX2VuYyV1IiwgZHJtX2VuYy0+YmFzZS5pZCk7Ci0JZHB1X2Vu Yy0+cnNjX2NsaWVudCA9IGRwdV9yc2NfY2xpZW50X2NyZWF0ZShEUFVfUlNDX0lOREVYLCBuYW1l LAotCQkJCQlkaXNwX2luZm8tPmlzX3ByaW1hcnkpOwotCWlmIChJU19FUlJfT1JfTlVMTChkcHVf ZW5jLT5yc2NfY2xpZW50KSkgewotCQlEUFVfREVCVUcoImRwdSByc2MgY2xpZW50IGNyZWF0ZSBm YWlsZWQgOiVsZFxuIiwKLQkJCQkJCVBUUl9FUlIoZHB1X2VuYy0+cnNjX2NsaWVudCkpOwotCQlk cHVfZW5jLT5yc2NfY2xpZW50ID0gTlVMTDsKLQl9CiAKIAltdXRleF9pbml0KCZkcHVfZW5jLT5y Y19sb2NrKTsKIAlrdGhyZWFkX2luaXRfZGVsYXllZF93b3JrKCZkcHVfZW5jLT5kZWxheWVkX29m Zl93b3JrLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2Vu Y29kZXIuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmgKaW5k ZXggNGM1NTYwYi4uZTg1ZTVhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X2VuY29kZXIuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9k cHVfZW5jb2Rlci5oCkBAIC04OCwxMyArODgsNiBAQCB2b2lkIGRwdV9lbmNvZGVyX3JlZ2lzdGVy X2ZyYW1lX2V2ZW50X2NhbGxiYWNrKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKIAkJdm9p ZCAoKmNiKSh2b2lkICosIHUzMiksIHZvaWQgKmRhdGEpOwogCiAvKioKLSAqIGRwdV9lbmNvZGVy X2dldF9yc2NfY2xpZW50IC0gZ2V0cyB0aGUgcnNjIGNsaWVudCBzdGF0ZSBmb3IgcHJpbWFyeQot ICogICAgICBmb3IgcHJpbWFyeSBkaXNwbGF5LgotICogQGVuY29kZXI6CWVuY29kZXIgcG9pbnRl cgotICovCi1zdHJ1Y3QgZHB1X3JzY19jbGllbnQgKmRwdV9lbmNvZGVyX2dldF9yc2NfY2xpZW50 KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rlcik7Ci0KLS8qKgogICogZHB1X2VuY29kZXJfcHJl cGFyZV9mb3Jfa2lja29mZiAtIHNjaGVkdWxlIGRvdWJsZSBidWZmZXIgZmxpcCBvZiB0aGUgY3Rs CiAgKglwYXRoIChpLmUuIGN0bCBmbHVzaCBhbmQgc3RhcnQpIGF0IG5leHQgYXBwcm9wcmlhdGUg dGltZS4KICAqCUltbWVkaWF0ZWx5OiBpZiBubyBwcmV2aW91cyBjb21taXQgaXMgb3V0c3RhbmRp bmcuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rl cl9waHlzLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlcl9waHlz LmgKaW5kZXggZTk0ODRmZS4uOWJiZjMzOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyX3BoeXMuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNt L2Rpc3AvZHB1MS9kcHVfZW5jb2Rlcl9waHlzLmgKQEAgLTE2LDcgKzE2LDYgQEAKICNkZWZpbmUg X19EUFVfRU5DT0RFUl9QSFlTX0hfXwogCiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgotI2lu Y2x1ZGUgPGxpbnV4L2RwdV9yc2MuaD4KIAogI2luY2x1ZGUgImRwdV9rbXMuaCIKICNpbmNsdWRl ICJkcHVfaHdfaW50Zi5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X2h3X3RvcC5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X3Rv cC5jCmluZGV4IGY3NjQ5NTEuLjQ2NGVkNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9kcHUxL2RwdV9od190b3AuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3Av ZHB1MS9kcHVfaHdfdG9wLmMKQEAgLTI3MCwxOCArMjcwLDE0IEBAIHN0YXRpYyB2b2lkIGRwdV9o d19zZXR1cF92c3luY19zb3VyY2Uoc3RydWN0IGRwdV9od19tZHAgKm1kcCwKIAkJCWJyZWFrOwog CQl9CiAKLQkJaWYgKGNmZy0+aXNfZHVtbXkpIHsKLQkJCURQVV9SRUdfV1JJVEUoYywgd2RfY3Rs MiwgMHgwKTsKLQkJfSBlbHNlIHsKLQkJCURQVV9SRUdfV1JJVEUoYywgd2RfbG9hZF92YWx1ZSwK LQkJCQlDQUxDVUxBVEVfV0RfTE9BRF9WQUxVRShjZmctPmZyYW1lX3JhdGUpKTsKLQotCQkJRFBV X1JFR19XUklURShjLCB3ZF9jdGwsIEJJVCgwKSk7IC8qIGNsZWFyIHRpbWVyICovCi0JCQlyZWcg PSBEUFVfUkVHX1JFQUQoYywgd2RfY3RsMik7Ci0JCQlyZWcgfD0gQklUKDgpOwkJLyogZW5hYmxl IGhlYXJ0YmVhdCB0aW1lciAqLwotCQkJcmVnIHw9IEJJVCgwKTsJCS8qIGVuYWJsZSBXRCB0aW1l ciAqLwotCQkJRFBVX1JFR19XUklURShjLCB3ZF9jdGwyLCByZWcpOwotCQl9CisJCURQVV9SRUdf V1JJVEUoYywgd2RfbG9hZF92YWx1ZSwKKwkJCUNBTENVTEFURV9XRF9MT0FEX1ZBTFVFKGNmZy0+ ZnJhbWVfcmF0ZSkpOworCisJCURQVV9SRUdfV1JJVEUoYywgd2RfY3RsLCBCSVQoMCkpOyAvKiBj bGVhciB0aW1lciAqLworCQlyZWcgPSBEUFVfUkVHX1JFQUQoYywgd2RfY3RsMik7CisJCXJlZyB8 PSBCSVQoOCk7CQkvKiBlbmFibGUgaGVhcnRiZWF0IHRpbWVyICovCisJCXJlZyB8PSBCSVQoMCk7 CQkvKiBlbmFibGUgV0QgdGltZXIgKi8KKwkJRFBVX1JFR19XUklURShjLCB3ZF9jdGwyLCByZWcp OwogCiAJCS8qIG1ha2Ugc3VyZSB0aGF0IHRpbWVycyBhcmUgZW5hYmxlZC9kaXNhYmxlZCBmb3Ig dnN5bmMgc3RhdGUgKi8KIAkJd21iKCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNt L2Rpc3AvZHB1MS9kcHVfaHdfdG9wLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9k cHVfaHdfdG9wLmgKaW5kZXggMThlNzZhMS4uMzc1Y2I3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X3RvcC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9kcHUxL2RwdV9od190b3AuaApAQCAtODQsMTUgKzg0LDEyIEBAIHN0cnVjdCBkcHVf ZGFuZ2VyX3NhZmVfc3RhdHVzIHsKICAqIEBmcmFtZV9yYXRlOiBEaXNwbGF5IGZyYW1lIHJhdGUK ICAqIEBwcG51bWJlcjogcGluZyBwb25nIGluZGV4IGFycmF5CiAgKiBAdnN5bmNfc291cmNlOiB2 c3luYyBzb3VyY2Ugc2VsZWN0aW9uCi0gKiBAaXNfZHVtbXk6IGEgZHVtbXkgc291cmNlIG9mIHZz eW5jIHNlbGVjdGlvbi4gSXQgbXVzdCBub3QgYmUgc2VsZWN0ZWQgZm9yCi0gKiAgICAgICAgICAg YW55IGNhc2Ugb3RoZXIgdGhhbiBkcHUgcnNjIGlkbGUgcmVxdWVzdC4KICAqLwogc3RydWN0IGRw dV92c3luY19zb3VyY2VfY2ZnIHsKIAl1MzIgcHBfY291bnQ7CiAJdTMyIGZyYW1lX3JhdGU7CiAJ dTMyIHBwbnVtYmVyW1BJTkdQT05HX01BWF07CiAJdTMyIHZzeW5jX3NvdXJjZTsKLQlib29sIGlz X2R1bW15OwogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwdV9k YmcuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHB1X2RiZy5jCmluZGV4IDgxMThmYjcuLjM0MWI1 OTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHB1X2RiZy5jCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9tc20vZHB1X2RiZy5jCkBAIC02Nyw3ICs2Nyw2IEBACiAvKiBwcmludCBkZWJ1 ZyByYW5nZXMgaW4gZ3JvdXBzIG9mIDQgdTMycyAqLwogI2RlZmluZSBSRUdfRFVNUF9BTElHTgkJ MTYKIAotI2RlZmluZSBSU0NfREVCVUdfTVVYX1NFTF9TRE04NDUgOQogLyoqCiAgKiBzdHJ1Y3Qg ZHB1X2RiZ19yZWdfb2Zmc2V0IC0gdHJhY2tpbmcgZm9yIHN0YXJ0IGFuZCBlbmQgb2YgcmVnaW9u CiAgKiBAc3RhcnQ6IHN0YXJ0IG9mZnNldApAQCAtMjM4LDI5ICsyMzcsNiBAQCBzdGF0aWMgdm9p ZCBfZHB1X2RlYnVnX2J1c19wcGIxX2R1bXAodm9pZCBfX2lvbWVtICptZW1fYmFzZSwKIAkJCWVu dHJ5LT53cl9hZGRyLCBlbnRyeS0+YmxvY2tfaWQsIGVudHJ5LT50ZXN0X2lkLCB2YWwpOwogfQog Ci1zdGF0aWMgdm9pZCBfZHB1X2RlYnVnX2J1c19heGlfZHVtcF9zZG04NDUodm9pZCBfX2lvbWVt ICptZW1fYmFzZSwKLQkJc3RydWN0IGRwdV9kZWJ1Z19idXNfZW50cnkgKmVudHJ5LCB1MzIgdmFs KQotewotCXUzMiBzdGF0dXMsIGk7Ci0KLQlpZiAoIW1lbV9iYXNlIHx8ICFlbnRyeSkKLQkJcmV0 dXJuOwotCi0JZm9yIChpID0gMDsgaSA8PSBSU0NfREVCVUdfTVVYX1NFTF9TRE04NDU7IGkrKykg ewotCQkvL2RwdV9yc2NfZGVidWdfZHVtcChpKTsKLQotCQkvKiBtYWtlIHN1cmUgdGhhdCBtdXhf c2VsIHVwZGF0ZWQgKi8KLQkJd21iKCk7Ci0KLQkJLyogcmVhZCBzdGF0dXMgYWdhaW4gYWZ0ZXIg cnNjIHJvdXRlcyB0aGUgZGVidWcgYnVzICovCi0JCXN0YXR1cyA9IHJlYWRsX3JlbGF4ZWQobWVt X2Jhc2UgKyBEQkdCVVNfRFNQUF9TVEFUVVMpOwotCi0JCWRldl9lcnIoZHB1X2RiZ19iYXNlLmRl diwgInJzYyBtdXhfc2VsOiVkIDB4JXggJWQgJWQgMHgleFxuIiwKLQkJCWksIGVudHJ5LT53cl9h ZGRyLCBlbnRyeS0+YmxvY2tfaWQsCi0JCQllbnRyeS0+dGVzdF9pZCwgc3RhdHVzKTsKLQl9Ci19 Ci0KIHN0YXRpYyBzdHJ1Y3QgZHB1X2RlYnVnX2J1c19lbnRyeSBkYmdfYnVzX2RwdV84OTk4W10g PSB7CiAKIAkvKiBVbnBhY2sgMCBzc3BwIDAqLwpAQCAtMjAxNCw5ICsxOTkwLDYgQEAgc3RhdGlj IHZvaWQgX2RwdV9kZWJ1Z19idXNfYXhpX2R1bXBfc2RtODQ1KHZvaWQgX19pb21lbSAqbWVtX2Jh c2UsCiAJeyBEQkdCVVNfUEVSSVBILCA3MSwgM30sCiAJeyBEQkdCVVNfUEVSSVBILCA3MSwgNH0s CiAJeyBEQkdCVVNfUEVSSVBILCA3MSwgNX0sCi0KLQkvKiBheGkgLSBzaG91bGQgYmUgbGFzdCBl bnRyeSAqLwotCXsgREJHQlVTX0FYSV9JTlRGLCA2MiwgMCwgX2RwdV9kZWJ1Z19idXNfYXhpX2R1 bXBfc2RtODQ1fSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdmJpZl9kZWJ1Z19idXNfZW50cnkgdmJp Zl9kYmdfYnVzX21zbTg5OThbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20v ZHB1X2RiZy5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcHVfZGJnLmgKaW5kZXggOWUzYjBlYi4u NzEwZTkxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcHVfZGJnLmgKKysrIGIv ZHJpdmVycy9ncHUvZHJtL21zbS9kcHVfZGJnLmgKQEAgLTMxNiwxMiArMzE2LDYgQEAgaW50IGRw dV9ldnRsb2dfZ2V0X2ZpbHRlcihzdHJ1Y3QgZHB1X2RiZ19ldnRsb2cgKmV2dGxvZywgaW50IGlu ZGV4LAogCQljaGFyICpidWYsIHNpemVfdCBidWZzeik7CiAKIC8qKgotICogZHB1X3JzY19kZWJ1 Z19kdW1wIC0gZHB1IHJzYyBkZWJ1ZyBkdW1wIHN0YXR1cwotICogQG11eF9zZWw6CXNlbGVjdCBt dXggb24gcnNjIGRlYnVnIGJ1cwotICovCi12b2lkIGRwdV9yc2NfZGVidWdfZHVtcCh1MzIgbXV4 X3NlbCk7Ci0KLS8qKgogICogZHNpX2N0cmxfZGVidWdfZHVtcCAtIGR1bXAgZHNpIGRlYnVnIGR1 bXAgc3RhdHVzCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBkc2lfY3RybF9kZWJ1Z19kdW1wKHZv aWQpIHt9CkBAIC00MDcsMTAgKzQwMSw2IEBAIHN0YXRpYyBpbmxpbmUgaW50IGRwdV9ldnRsb2df Z2V0X2ZpbHRlcihzdHJ1Y3QgZHB1X2RiZ19ldnRsb2cgKmV2dGxvZywKIAlyZXR1cm4gLUVJTlZB TDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGRwdV9yc2NfZGVidWdfZHVtcCh1MzIgbXV4X3Nl bCkKLXsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIGRzaV9jdHJsX2RlYnVnX2R1bXAodm9pZCkK IHsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHB1X3Bvd2VyX2hhbmRsZS5j IGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcHVfcG93ZXJfaGFuZGxlLmMKaW5kZXggYTUyYmU4Ni4u OThlNTZhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcHVfcG93ZXJfaGFuZGxl LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcHVfcG93ZXJfaGFuZGxlLmMKQEAgLTI3LDcg KzI3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tc20tYnVzLWJvYXJkLmg+CiAjZW5kaWYKICNpbmNs dWRlIDxsaW51eC9kcHVfaW9fdXRpbC5oPgotI2luY2x1ZGUgPGxpbnV4L2RwdV9yc2MuaD4KIAog I2luY2x1ZGUgImRwdV9wb3dlcl9oYW5kbGUuaCIKICNpbmNsdWRlICJkcHVfdHJhY2UuaCIKQEAg LTU3LDMyICs1Niw2IEBAIHN0YXRpYyB2b2lkIGRwdV9wb3dlcl9ldmVudF90cmlnZ2VyX2xvY2tl ZChzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZSwKIAl9CiB9CiAKLXN0YXRpYyBpbnQg ZHB1X3Bvd2VyX3JzY191cGRhdGUoc3RydWN0IGRwdV9wb3dlcl9oYW5kbGUgKnBoYW5kbGUsIGJv b2wgZW5hYmxlKQotewotCXUzMiByc2Nfc3RhdGU7Ci0JaW50IHJldCA9IDA7Ci0KLQkvKiBjcmVh dGVzIHRoZSByc2MgY2xpZW50IG9uIHRoZSBmaXJzdCBlbmFibGUgKi8KLQlpZiAoIXBoYW5kbGUt PnJzY19jbGllbnRfaW5pdCkgewotCQlwaGFuZGxlLT5yc2NfY2xpZW50ID0gZHB1X3JzY19jbGll bnRfY3JlYXRlKERQVV9SU0NfSU5ERVgsCi0JCQkJImRwdV9wb3dlcl9oYW5kbGUiLCBmYWxzZSk7 Ci0JCWlmIChJU19FUlJfT1JfTlVMTChwaGFuZGxlLT5yc2NfY2xpZW50KSkgewotCQkJcHJfZGVi dWcoImRwdSByc2MgY2xpZW50IGNyZWF0ZSBmYWlsZWQgOiVsZFxuIiwKLQkJCQkJCVBUUl9FUlIo cGhhbmRsZS0+cnNjX2NsaWVudCkpOwotCQkJcGhhbmRsZS0+cnNjX2NsaWVudCA9IE5VTEw7Ci0J CX0KLQkJcGhhbmRsZS0+cnNjX2NsaWVudF9pbml0ID0gdHJ1ZTsKLQl9Ci0KLQlyc2Nfc3RhdGUg PSBlbmFibGUgPyBEUFVfUlNDX0NMS19TVEFURSA6IERQVV9SU0NfSURMRV9TVEFURTsKLQotCWlm IChwaGFuZGxlLT5yc2NfY2xpZW50KQotCQlyZXQgPSBkcHVfcnNjX2NsaWVudF9zdGF0ZV91cGRh dGUocGhhbmRsZS0+cnNjX2NsaWVudCwKLQkJCXJzY19zdGF0ZSwgTlVMTCwgRFBVX1JTQ19JTlZB TElEX0NSVENfSUQsIE5VTEwpOwotCi0JcmV0dXJuIHJldDsKLX0KLQogc3RydWN0IGRwdV9wb3dl cl9jbGllbnQgKmRwdV9wb3dlcl9jbGllbnRfY3JlYXRlKAogCXN0cnVjdCBkcHVfcG93ZXJfaGFu ZGxlICpwaGFuZGxlLCBjaGFyICpjbGllbnRfbmFtZSkKIHsKQEAgLTc2MSw5ICs3MzQsNiBAQCBp bnQgZHB1X3Bvd2VyX3Jlc291cmNlX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwK IAlJTklUX0xJU1RfSEVBRCgmcGhhbmRsZS0+cG93ZXJfY2xpZW50X2NsaXN0KTsKIAlJTklUX0xJ U1RfSEVBRCgmcGhhbmRsZS0+ZXZlbnRfbGlzdCk7CiAKLQlwaGFuZGxlLT5yc2NfY2xpZW50ID0g TlVMTDsKLQlwaGFuZGxlLT5yc2NfY2xpZW50X2luaXQgPSBmYWxzZTsKLQogCW11dGV4X2luaXQo JnBoYW5kbGUtPnBoYW5kbGVfbG9jayk7CiAKIAlyZXR1cm4gcmM7CkBAIC04NDAsOCArODEwLDYg QEAgdm9pZCBkcHVfcG93ZXJfcmVzb3VyY2VfZGVpbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KnBkZXYsCiAJbXAtPm51bV92cmVnID0gMDsKIAltcC0+bnVtX2NsayA9IDA7CiAKLQlpZiAocGhh bmRsZS0+cnNjX2NsaWVudCkKLQkJZHB1X3JzY19jbGllbnRfZGVzdHJveShwaGFuZGxlLT5yc2Nf Y2xpZW50KTsKIH0KIAogaW50IGRwdV9wb3dlcl9yZXNvdXJjZV9lbmFibGUoc3RydWN0IGRwdV9w b3dlcl9oYW5kbGUgKnBoYW5kbGUsCkBAIC05MDYsMjEgKzg3NCwxMiBAQCBpbnQgZHB1X3Bvd2Vy X3Jlc291cmNlX2VuYWJsZShzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZSwKIAkJCQln b3RvIGRhdGFfYnVzX2hkbF9lcnI7CiAJCQl9CiAJCX0KLQkJLyoKLQkJICogLSBXaGVuIHRoZSB0 YXJnZXQgaXMgUlNDQyBlbmFibGVkLCByZWd1bGF0b3Igc2hvdWxkCi0JCSAqICAgYmUgZW5hYmxl ZCBieSB0aGUgcy93IG9ubHkgZm9yIHRoZSBmaXJzdCB0aW1lIGR1cmluZwotCQkgKiAgIGJvb3R1 cC4gQWZ0ZXIgdGhhdCwgUlNDQyBoYXJkd2FyZSB0YWtlcyBjYXJlIG9mIGVuYWJsaW5nLwotCQkg KiAgIGRpc2FibGluZyBpdC4KLQkJICogLSBXaGVuIHRoZSB0YXJnZXQgaXMgbm90IFJTQ0MgZW5h YmxlZCwgcmVndWxhdG9yIHNob3VsZAotCQkgKiAgIGJlIHRvdGFsbHkgaGFuZGxlZCBieSB0aGUg c29mdHdhcmUuCi0JCSAqLwotCQlpZiAoIXBoYW5kbGUtPnJzY19jbGllbnQpIHsKLQkJCXJjID0g bXNtX2Rzc19lbmFibGVfdnJlZyhtcC0+dnJlZ19jb25maWcsIG1wLT5udW1fdnJlZywKLQkJCQkJ CQkJCWVuYWJsZSk7Ci0JCQlpZiAocmMpIHsKLQkJCQlwcl9lcnIoImZhaWxlZCB0byBlbmFibGUg dnJlZ3MgcmM9JWRcbiIsIHJjKTsKLQkJCQlnb3RvIHZyZWdfZXJyOwotCQkJfQorCisJCXJjID0g bXNtX2Rzc19lbmFibGVfdnJlZyhtcC0+dnJlZ19jb25maWcsIG1wLT5udW1fdnJlZywKKwkJCQkJ CQkJZW5hYmxlKTsKKwkJaWYgKHJjKSB7CisJCQlwcl9lcnIoImZhaWxlZCB0byBlbmFibGUgdnJl Z3MgcmM9JWRcbiIsIHJjKTsKKwkJCWdvdG8gdnJlZ19lcnI7CiAJCX0KIAogCQlyYyA9IGRwdV9w b3dlcl9yZWdfYnVzX3VwZGF0ZShwaGFuZGxlLT5yZWdfYnVzX2hkbCwKQEAgLTkzMCwxMiArODg5 LDYgQEAgaW50IGRwdV9wb3dlcl9yZXNvdXJjZV9lbmFibGUoc3RydWN0IGRwdV9wb3dlcl9oYW5k bGUgKnBoYW5kbGUsCiAJCQlnb3RvIHJlZ19idXNfaGRsX2VycjsKIAkJfQogCi0JCXJjID0gZHB1 X3Bvd2VyX3JzY191cGRhdGUocGhhbmRsZSwgdHJ1ZSk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJy KCJmYWlsZWQgdG8gdXBkYXRlIHJzY1xuIik7Ci0JCQlnb3RvIHJzY19lcnI7Ci0JCX0KLQogCQly YyA9IG1zbV9kc3NfZW5hYmxlX2NsayhtcC0+Y2xrX2NvbmZpZywgbXAtPm51bV9jbGssIGVuYWJs ZSk7CiAJCWlmIChyYykgewogCQkJcHJfZXJyKCJjbG9jayBlbmFibGUgZmFpbGVkIHJjOiVkXG4i LCByYyk7CkBAIC05NTEsMTQgKzkwNCwxMSBAQCBpbnQgZHB1X3Bvd2VyX3Jlc291cmNlX2VuYWJs ZShzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZSwKIAogCQltc21fZHNzX2VuYWJsZV9j bGsobXAtPmNsa19jb25maWcsIG1wLT5udW1fY2xrLCBlbmFibGUpOwogCi0JCWRwdV9wb3dlcl9y c2NfdXBkYXRlKHBoYW5kbGUsIGZhbHNlKTsKLQogCQlkcHVfcG93ZXJfcmVnX2J1c191cGRhdGUo cGhhbmRsZS0+cmVnX2J1c19oZGwsCiAJCQkJCQkJbWF4X3VzZWNhc2VfbmR4KTsKIAotCQlpZiAo IXBoYW5kbGUtPnJzY19jbGllbnQpCi0JCQltc21fZHNzX2VuYWJsZV92cmVnKG1wLT52cmVnX2Nv bmZpZywgbXAtPm51bV92cmVnLAotCQkJCQkJCQkJZW5hYmxlKTsKKwkJbXNtX2Rzc19lbmFibGVf dnJlZyhtcC0+dnJlZ19jb25maWcsIG1wLT5udW1fdnJlZywKKwkJCQkJCQllbmFibGUpOwogCQlm b3IgKGkgPSAwIDsgaSA8IERQVV9QT1dFUl9IQU5ETEVfREJVU19JRF9NQVg7IGkrKykKIAkJCWRw dV9wb3dlcl9kYXRhX2J1c191cGRhdGUoJnBoYW5kbGUtPmRhdGFfYnVzX2hhbmRsZVtpXSwKIAkJ CQkJZW5hYmxlKTsKQEAgLTk2NywxMyArOTE3LDE0IEBAIGludCBkcHVfcG93ZXJfcmVzb3VyY2Vf ZW5hYmxlKHN0cnVjdCBkcHVfcG93ZXJfaGFuZGxlICpwaGFuZGxlLAogCQkJCURQVV9QT1dFUl9F VkVOVF9QT1NUX0RJU0FCTEUpOwogCX0KIAorCWdvdG8gZW5kOworCiBjbGtfZXJyOgogCWRwdV9w b3dlcl9yc2NfdXBkYXRlKHBoYW5kbGUsIGZhbHNlKTsKIHJzY19lcnI6CiAJZHB1X3Bvd2VyX3Jl Z19idXNfdXBkYXRlKHBoYW5kbGUtPnJlZ19idXNfaGRsLCBwcmV2X3VzZWNhc2VfbmR4KTsKIHJl Z19idXNfaGRsX2VycjoKLQlpZiAoIXBoYW5kbGUtPnJzY19jbGllbnQpCi0JCW1zbV9kc3NfZW5h YmxlX3ZyZWcobXAtPnZyZWdfY29uZmlnLCBtcC0+bnVtX3ZyZWcsIDApOworCW1zbV9kc3NfZW5h YmxlX3ZyZWcobXAtPnZyZWdfY29uZmlnLCBtcC0+bnVtX3ZyZWcsIDApOwogdnJlZ19lcnI6CiAJ Zm9yIChpID0gMCA7IGkgPCBEUFVfUE9XRVJfSEFORExFX0RCVVNfSURfTUFYOyBpKyspCiAJCWRw dV9wb3dlcl9kYXRhX2J1c191cGRhdGUoJnBoYW5kbGUtPmRhdGFfYnVzX2hhbmRsZVtpXSwgMCk7 CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwdV9wb3dlcl9oYW5kbGUuaCBiL2Ry aXZlcnMvZ3B1L2RybS9tc20vZHB1X3Bvd2VyX2hhbmRsZS5oCmluZGV4IDI1YTAwYjEuLjFlZGFl NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHB1X3Bvd2VyX2hhbmRsZS5oCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHB1X3Bvd2VyX2hhbmRsZS5oCkBAIC0xNTUsOCArMTU1 LDYgQEAgc3RydWN0IGRwdV9wb3dlcl9ldmVudCB7CiAgKiBAcmVnX2J1c19oZGw6IGN1cnJlbnQg cmVnaXN0ZXIgYnVzIGhhbmRsZQogICogQGRhdGFfYnVzX2hhbmRsZTogY29udGV4dCBzdHJ1Y3R1 cmUgZm9yIGRhdGEgYnVzIGNvbnRyb2wKICAqIEBldmVudF9saXN0OiBjdXJyZW50IHBvd2VyIGhh bmRsZSBldmVudCBsaXN0Ci0gKiBAcnNjX2NsaWVudDogZHB1IHJzYyBjbGllbnQgcG9pbnRlcgot ICogQHJzY19jbGllbnRfaW5pdDogYm9vbGVhbiB0byBjb250cm9sIHJzYyBjbGllbnQgY3JlYXRl CiAgKi8KIHN0cnVjdCBkcHVfcG93ZXJfaGFuZGxlIHsKIAlzdHJ1Y3QgZHNzX21vZHVsZV9wb3dl ciBtcDsKQEAgLTE2OCw4ICsxNjYsNiBAQCBzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSB7CiAJc3Ry dWN0IGRwdV9wb3dlcl9kYXRhX2J1c19oYW5kbGUgZGF0YV9idXNfaGFuZGxlCiAJCVtEUFVfUE9X RVJfSEFORExFX0RCVVNfSURfTUFYXTsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGV2ZW50X2xpc3Q7Ci0J c3RydWN0IGRwdV9yc2NfY2xpZW50ICpyc2NfY2xpZW50OwotCWJvb2wgcnNjX2NsaWVudF9pbml0 OwogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwdV9yc2MuYyBi L2RyaXZlcnMvZ3B1L2RybS9tc20vZHB1X3JzYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp bmRleCA2N2JmNzlkLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHB1X3JzYy5j CisrKyAvZGV2L251bGwKQEAgLTEsMTM2NyArMCwwIEBACi0vKiBDb3B5cmlnaHQgKGMpIDIwMTYt MjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAotICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVk IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KLSAqCi0gKi8KLQotI2RlZmluZSBwcl9mbXQoZm10KQkiW2RwdV9yc2M6JXM6JWRdOiAiIGZt dCwgX19mdW5jX18sIF9fTElORV9fCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNs dWRlIDxsaW51eC9kZWJ1Z2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvb2YuaD4KLSNpbmNsdWRlIDxs aW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+Ci0jaW5jbHVkZSA8 bGludXgvY29tcG9uZW50Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxp bnV4L211dGV4Lmg+Ci0jaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KLSNpbmNsdWRlIDxs aW51eC9tb2R1bGUuaD4KLQotI2luY2x1ZGUgPHNvYy9xY29tL3JwbWguaD4KLSNpbmNsdWRlIDxk cm0vZHJtUC5oPgotI2luY2x1ZGUgPGRybS9kcm1faXJxLmg+Ci0jaW5jbHVkZSAiZHB1X3JzY19w cml2LmgiCi0jaW5jbHVkZSAiZHB1X2RiZy5oIgotCi0jZGVmaW5lIERQVV9SU0NfRFJWX0RCR19O QU1FCQkiZHB1X3JzY19kcnYiCi0jZGVmaW5lIERQVV9SU0NfV1JBUFBFUl9EQkdfTkFNRQkiZHB1 X3JzY193cmFwcGVyIgotCi0vKiB3b3JzdCBjYXNlIHRpbWUgdG8gZXhlY3V0ZSB0aGUgb25lIHRj cyB2b3RlKHNsZWVwL3dha2UpIC0gfjFtcyAqLwotI2RlZmluZSBTSU5HTEVfVENTX0VYRUNVVElP Tl9USU1FCQkJCTEwNjQwMDAKLQotLyogdGhpcyB0aW1lIGlzIH4xbXMgLSBvbmx5IHdha2UgdGNz IGluIGFueSBtb2RlICovCi0jZGVmaW5lIFJTQ19CQUNLT0ZGX1RJTUVfTlMJCSAoU0lOR0xFX1RD U19FWEVDVVRJT05fVElNRSArIDEwMCkKLQotLyogdGhpcyB0aW1lIGlzIH4xbXMgLSBvbmx5IHdh a2UgVENTIGluIG1vZGUtMCAqLwotI2RlZmluZSBSU0NfTU9ERV9USFJFU0hPTERfVElNRV9JTl9O UwkoU0lOR0xFX1RDU19FWEVDVVRJT05fVElNRSArIDEwMCkKLQotLyogdGhpcyB0aW1lIGlzIH4y bXMgLSBzbGVlcCsgd2FrZSBUQ1MgaW4gbW9kZS0xICovCi0jZGVmaW5lIFJTQ19USU1FX1NMT1Rf MF9OUwkJKChTSU5HTEVfVENTX0VYRUNVVElPTl9USU1FICogMikgKyAxMDApCi0KLSNkZWZpbmUg REVGQVVMVF9QQU5FTF9GUFMJCTYwCi0jZGVmaW5lIERFRkFVTFRfUEFORUxfSklUVEVSX05VTUVS QVRPUgkyCi0jZGVmaW5lIERFRkFVTFRfUEFORUxfSklUVEVSX0RFTk9NSU5BVE9SIDEKLSNkZWZp bmUgREVGQVVMVF9QQU5FTF9QUkVGSUxMX0xJTkVTCTI1Ci0jZGVmaW5lIERFRkFVTFRfUEFORUxf VlRPVEFMCQkoNDgwICsgREVGQVVMVF9QQU5FTF9QUkVGSUxMX0xJTkVTKQotI2RlZmluZSBUSUNL U19JTl9OQU5PX1NFQ09ORAkJMTAwMDAwMDAwMAotCi0jZGVmaW5lIE1BWF9CVUZGRVJfU0laRSAy NTYKLQotI2RlZmluZSBUUllfQ01EX01PREVfU1dJVENICQkweEZGRkYKLSNkZWZpbmUgVFJZX0NM S19NT0RFX1NXSVRDSAkJMHhGRkZFCi0jZGVmaW5lIFNUQVRFX1VQREFURV9OT1RfQUxMT1dFRAkw eEZGRkQKLQotLyogUHJpbWFyeSBwYW5lbCB3b3JzdCBjYXNlIFZTWU5DIGV4cGVjdGVkIHRvIGJl IG5vIGxlc3MgdGhhbiAzMGZwcyAqLwotI2RlZmluZSBQUklNQVJZX1ZCTEFOS19XT1JTVF9DQVNF X01TIDM0Ci0KLXN0YXRpYyBzdHJ1Y3QgZHB1X3JzY19wcml2ICpyc2NfcHJ2X2xpc3RbTUFYX1JT Q19DT1VOVF07Ci0KLS8qKgotICogZHB1X3JzY19jbGllbnRfY3JlYXRlKCkgLSBjcmVhdGUgdGhl IGNsaWVudCBmb3IgZHB1IHJzYy4KLSAqIERpZmZlcmVudCBkaXNwbGF5cyBsaWtlIERTSSwgSERN SSwgRFAsIFdCLCBldGMgc2hvdWxkIGNhbGwgdGhpcwotICogYXBpIHRvIHJlZ2lzdGVyIHRoZWly IHZvdGUgZm9yIHJwbWguIFRoZXkgc3RpbGwgbmVlZCB0byB2b3RlIGZvcgotICogcG93ZXIgaGFu ZGxlIHRvIGdldCB0aGUgY2xvY2tzLgotCi0gKiBAcnNjX2luZGV4OiAgIEEgY2xpZW50IHdpbGwg YmUgY3JlYXRlZCBvbiB0aGlzIFJTQy4gQXMgb2Ygbm93IG9ubHkKLSAqICAgICAgICAgICAgICAg RFBVX1JTQ19JTkRFWCBpcyB2YWxpZCByc2MgaW5kZXguCi0gKiBAbmFtZToJIENhbGxlciBuZWVk cyB0byBwcm92aWRlIHNvbWUgdmFsaWQgc3RyaW5nIHRvIGlkZW50aWZ5Ci0gKiAgICAgICAgICAg ICAgIHRoZSBjbGllbnQuICJwcmltYXJ5IiwgImRwIiwgImhkbWkiIGFyZSBzdWdnZXN0ZWQgbmFt ZS4KLSAqIEBpc19wcmltYXJ5OgkgQ2FsbGVyIG5lZWRzIHRvIHByb3ZpZGUgaW5mb3JtYXRpb24g aWYgY2xpZW50IGlzIHByaW1hcnkKLSAqICAgICAgICAgICAgICAgb3Igbm90LiBQcmltYXJ5IGNs aWVudCB2b3RlcyB3aWxsIGJlIHJlZGlyZWN0ZWQgdG8KLSAqICAgICAgICAgICAgICAgZGlzcGxh eSByc2MuCi0gKgotICogUmV0dXJuOiBjbGllbnQgbm9kZSBwb2ludGVyLgotICovCi1zdHJ1Y3Qg ZHB1X3JzY19jbGllbnQgKmRwdV9yc2NfY2xpZW50X2NyZWF0ZSh1MzIgcnNjX2luZGV4LCBjaGFy ICpjbGllbnRfbmFtZSwKLQlib29sIGlzX3ByaW1hcnlfY2xpZW50KQotewotCXN0cnVjdCBkcHVf cnNjX2NsaWVudCAqY2xpZW50OwotCXN0cnVjdCBkcHVfcnNjX3ByaXYgKnJzYzsKLQlzdGF0aWMg aW50IGlkOwotCi0JaWYgKCFjbGllbnRfbmFtZSkgewotCQlwcl9lcnIoImNsaWVudCBuYW1lIGlz IG51bGwtIG5vdCBzdXBwb3J0ZWRcbiIpOwotCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKLQl9 IGVsc2UgaWYgKHJzY19pbmRleCA+PSBNQVhfUlNDX0NPVU5UKSB7Ci0JCXByX2VycigiaW52YWxp ZCByc2MgaW5kZXhcbiIpOwotCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKLQl9IGVsc2UgaWYg KCFyc2NfcHJ2X2xpc3RbcnNjX2luZGV4XSkgewotCQlwcl9lcnIoInJzYyBub3QgcHJvYmVkIHll dCBvciBub3QgYXZhaWxhYmxlXG4iKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JcnNjID0gcnNj X3Bydl9saXN0W3JzY19pbmRleF07Ci0JY2xpZW50ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRw dV9yc2NfY2xpZW50KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjbGllbnQpCi0JCXJldHVybiBFUlJf UFRSKC1FTk9NRU0pOwotCi0JbXV0ZXhfbG9jaygmcnNjLT5jbGllbnRfbG9jayk7Ci0Jc3RybGNw eShjbGllbnQtPm5hbWUsIGNsaWVudF9uYW1lLCBNQVhfUlNDX0NMSUVOVF9OQU1FX0xFTik7Ci0J Y2xpZW50LT5jdXJyZW50X3N0YXRlID0gRFBVX1JTQ19JRExFX1NUQVRFOwotCWNsaWVudC0+cnNj X2luZGV4ID0gcnNjX2luZGV4OwotCWNsaWVudC0+aWQgPSBpZDsKLQlpZiAoaXNfcHJpbWFyeV9j bGllbnQpCi0JCXJzYy0+cHJpbWFyeV9jbGllbnQgPSBjbGllbnQ7Ci0JcHJfZGVidWcoImNsaWVu dCAlcyByc2MgaW5kZXg6JWQgcHJpbWFyeTolZFxuIiwgY2xpZW50X25hbWUsCi0JCQkJCQlyc2Nf aW5kZXgsIGlzX3ByaW1hcnlfY2xpZW50KTsKLQotCWxpc3RfYWRkKCZjbGllbnQtPmxpc3QsICZy c2MtPmNsaWVudF9saXN0KTsKLQlpZCsrOwotCW11dGV4X3VubG9jaygmcnNjLT5jbGllbnRfbG9j ayk7Ci0KLQlyZXR1cm4gY2xpZW50OwotfQotRVhQT1JUX1NZTUJPTChkcHVfcnNjX2NsaWVudF9j cmVhdGUpOwotCi0vKioKLSAqIGRwdV9yc2NfY2xpZW50X2Rlc3Ryb3koKSAtIERlc3Ryb3kgdGhl IGRwdSByc2MgY2xpZW50LgotICoKLSAqIEBjbGllbnQ6CSBDbGllbnQgcG9pbnRlciBwcm92aWRl ZCBieSBkcHVfcnNjX2NsaWVudF9jcmVhdGUoKS4KLSAqCi0gKiBSZXR1cm46IG5vbmUKLSAqLwot dm9pZCBkcHVfcnNjX2NsaWVudF9kZXN0cm95KHN0cnVjdCBkcHVfcnNjX2NsaWVudCAqY2xpZW50 KQotewotCXN0cnVjdCBkcHVfcnNjX3ByaXYgKnJzYzsKLQllbnVtIGRwdV9yc2Nfc3RhdGUgc3Rh dGU7Ci0KLQlpZiAoIWNsaWVudCkgewotCQlwcl9kZWJ1ZygiaW52YWxpZCBjbGllbnRcbiIpOwot CQlnb3RvIGVuZDsKLQl9IGVsc2UgaWYgKGNsaWVudC0+cnNjX2luZGV4ID49IE1BWF9SU0NfQ09V TlQpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIHJzYyBpbmRleFxuIik7Ci0JCWdvdG8gZW5kOwotCX0K LQotCXByX2RlYnVnKCJjbGllbnQgJXMgZGVzdHJveWVkXG4iLCBjbGllbnQtPm5hbWUpOwotCXJz YyA9IHJzY19wcnZfbGlzdFtjbGllbnQtPnJzY19pbmRleF07Ci0JaWYgKCFyc2MpCi0JCWdvdG8g ZW5kOwotCi0JbXV0ZXhfbG9jaygmcnNjLT5jbGllbnRfbG9jayk7Ci0Jc3RhdGUgPSBjbGllbnQt PmN1cnJlbnRfc3RhdGU7Ci0JbXV0ZXhfdW5sb2NrKCZyc2MtPmNsaWVudF9sb2NrKTsKLQotCWlm IChzdGF0ZSAhPSBEUFVfUlNDX0lETEVfU1RBVEUpIHsKLQkJaW50IHdhaXRfdmJsYW5rX2NydGNf aWQ7Ci0KLQkJZHB1X3JzY19jbGllbnRfc3RhdGVfdXBkYXRlKGNsaWVudCwgRFBVX1JTQ19JRExF X1NUQVRFLCBOVUxMLAotCQkJCURQVV9SU0NfSU5WQUxJRF9DUlRDX0lELCAmd2FpdF92Ymxhbmtf Y3J0Y19pZCk7Ci0KLQkJLyogaWYgdmJsYW5rIHdhaXQgcmVxdWlyZWQgYXQgc2h1dGRvd24sIHVz ZSBhIHNpbXBsZSBzbGVlcCAqLwotCQlpZiAod2FpdF92YmxhbmtfY3J0Y19pZCAhPSBEUFVfUlND X0lOVkFMSURfQ1JUQ19JRCkgewotCQkJcHJfZXJyKCJ1bmV4cGVjdGVkIHNsZWVwIHJlcXVpcmVk IG9uIGNydGMgJWQgYXQgcnNjIGNsaWVudCBkZXN0cm95XG4iLAotCQkJCQl3YWl0X3ZibGFua19j cnRjX2lkKTsKLQkJCURQVV9FVlQzMihjbGllbnQtPmlkLCBzdGF0ZSwgcnNjLT5jdXJyZW50X3N0 YXRlLAotCQkJCQljbGllbnQtPmNydGNfaWQsIHdhaXRfdmJsYW5rX2NydGNfaWQsCi0JCQkJCURQ VV9FVlRMT0dfRVJST1IpOwotCQkJbXNsZWVwKFBSSU1BUllfVkJMQU5LX1dPUlNUX0NBU0VfTVMp OwotCQl9Ci0JfQotCW11dGV4X2xvY2soJnJzYy0+Y2xpZW50X2xvY2spOwotCWxpc3RfZGVsX2lu aXQoJmNsaWVudC0+bGlzdCk7Ci0JbXV0ZXhfdW5sb2NrKCZyc2MtPmNsaWVudF9sb2NrKTsKLQot CWtmcmVlKGNsaWVudCk7Ci1lbmQ6Ci0JcmV0dXJuOwotfQotRVhQT1JUX1NZTUJPTChkcHVfcnNj X2NsaWVudF9kZXN0cm95KTsKLQotc3RydWN0IGRwdV9yc2NfZXZlbnQgKmRwdV9yc2NfcmVnaXN0 ZXJfZXZlbnQoaW50IHJzY19pbmRleCwgdWludDMyX3QgZXZlbnRfdHlwZSwKLQkJdm9pZCAoKmNi X2Z1bmMpKHVpbnQzMl90IGV2ZW50X3R5cGUsIHZvaWQgKnVzciksIHZvaWQgKnVzcikKLXsKLQlz dHJ1Y3QgZHB1X3JzY19ldmVudCAqZXZ0OwotCXN0cnVjdCBkcHVfcnNjX3ByaXYgKnJzYzsKLQot CWlmIChyc2NfaW5kZXggPj0gTUFYX1JTQ19DT1VOVCkgewotCQlwcl9lcnIoImludmFsaWQgcnNj IGluZGV4OiVkXG4iLCByc2NfaW5kZXgpOwotCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKLQl9 IGVsc2UgaWYgKCFyc2NfcHJ2X2xpc3RbcnNjX2luZGV4XSkgewotCQlwcl9lcnIoInJzYyBpZHg6 JWQgbm90IHByb2JlZCB5ZXQgb3Igbm90IGF2YWlsYWJsZVxuIiwKLQkJCQkJCQkJcnNjX2luZGV4 KTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Ci0JfSBlbHNlIGlmICghY2JfZnVuYyB8fCAh ZXZlbnRfdHlwZSkgewotCQlwcl9lcnIoIm5vIGV2ZW50IG9yIGNiIGZ1bmNcbiIpOwotCQlyZXR1 cm4gRVJSX1BUUigtRUlOVkFMKTsKLQl9Ci0KLQlyc2MgPSByc2NfcHJ2X2xpc3RbcnNjX2luZGV4 XTsKLQlldnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZHB1X3JzY19ldmVudCksIEdGUF9LRVJO RUwpOwotCWlmICghZXZ0KQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQotCWV2dC0+ZXZl bnRfdHlwZSA9IGV2ZW50X3R5cGU7Ci0JZXZ0LT5yc2NfaW5kZXggPSByc2NfaW5kZXg7Ci0JZXZ0 LT51c3IgPSB1c3I7Ci0JZXZ0LT5jYl9mdW5jID0gY2JfZnVuYzsKLQlwcl9kZWJ1ZygiZXZlbnQg cmVnaXN0ZXIgdHlwZTolZCByc2MgaW5kZXg6JWRcbiIsCi0JCQkJCQlldmVudF90eXBlLCByc2Nf aW5kZXgpOwotCi0JbXV0ZXhfbG9jaygmcnNjLT5jbGllbnRfbG9jayk7Ci0JbGlzdF9hZGQoJmV2 dC0+bGlzdCwgJnJzYy0+ZXZlbnRfbGlzdCk7Ci0JbXV0ZXhfdW5sb2NrKCZyc2MtPmNsaWVudF9s b2NrKTsKLQotCXJldHVybiBldnQ7Ci19Ci1FWFBPUlRfU1lNQk9MKGRwdV9yc2NfcmVnaXN0ZXJf ZXZlbnQpOwotCi12b2lkIGRwdV9yc2NfdW5yZWdpc3Rlcl9ldmVudChzdHJ1Y3QgZHB1X3JzY19l dmVudCAqZXZlbnQpCi17Ci0Jc3RydWN0IGRwdV9yc2NfcHJpdiAqcnNjOwotCi0JaWYgKCFldmVu dCkgewotCQlwcl9kZWJ1ZygiaW52YWxpZCBldmVudCBjbGllbnRcbiIpOwotCQlnb3RvIGVuZDsK LQl9IGVsc2UgaWYgKGV2ZW50LT5yc2NfaW5kZXggPj0gTUFYX1JTQ19DT1VOVCkgewotCQlwcl9l cnIoImludmFsaWQgcnNjIGluZGV4XG4iKTsKLQkJZ290byBlbmQ7Ci0JfQotCi0JcHJfZGVidWco ImV2ZW50IGNsaWVudCBkZXN0cm95ZWRcbiIpOwotCXJzYyA9IHJzY19wcnZfbGlzdFtldmVudC0+ cnNjX2luZGV4XTsKLQlpZiAoIXJzYykKLQkJZ290byBlbmQ7Ci0KLQltdXRleF9sb2NrKCZyc2Mt PmNsaWVudF9sb2NrKTsKLQlsaXN0X2RlbF9pbml0KCZldmVudC0+bGlzdCk7Ci0JbXV0ZXhfdW5s b2NrKCZyc2MtPmNsaWVudF9sb2NrKTsKLQotCWtmcmVlKGV2ZW50KTsKLWVuZDoKLQlyZXR1cm47 Ci19Ci1FWFBPUlRfU1lNQk9MKGRwdV9yc2NfdW5yZWdpc3Rlcl9ldmVudCk7Ci0KLWJvb2wgaXNf ZHB1X3JzY19hdmFpbGFibGUoaW50IHJzY19pbmRleCkKLXsKLQlpZiAocnNjX2luZGV4ID49IE1B WF9SU0NfQ09VTlQpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIHJzYyBpbmRleDolZFxuIiwgcnNjX2lu ZGV4KTsKLQkJcmV0dXJuIGZhbHNlOwotCX0gZWxzZSBpZiAoIXJzY19wcnZfbGlzdFtyc2NfaW5k ZXhdKSB7Ci0JCXByX2VycigicnNjIGlkeDolZCBub3QgcHJvYmVkIHlldCBvciBub3QgYXZhaWxh YmxlXG4iLAotCQkJCQkJCQlyc2NfaW5kZXgpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcmV0 dXJuIHRydWU7Ci19Ci1FWFBPUlRfU1lNQk9MKGlzX2RwdV9yc2NfYXZhaWxhYmxlKTsKLQotZW51 bSBkcHVfcnNjX3N0YXRlIGdldF9kcHVfcnNjX2N1cnJlbnRfc3RhdGUoaW50IHJzY19pbmRleCkK LXsKLQlzdHJ1Y3QgZHB1X3JzY19wcml2ICpyc2M7Ci0KLQlpZiAocnNjX2luZGV4ID49IE1BWF9S U0NfQ09VTlQpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIHJzYyBpbmRleDolZFxuIiwgcnNjX2luZGV4 KTsKLQkJcmV0dXJuIERQVV9SU0NfSURMRV9TVEFURTsKLQl9IGVsc2UgaWYgKCFyc2NfcHJ2X2xp c3RbcnNjX2luZGV4XSkgewotCQlwcl9lcnIoInJzYyBpZHg6JWQgbm90IHByb2JlZCB5ZXQgb3Ig bm90IGF2YWlsYWJsZVxuIiwKLQkJCQkJCQkJcnNjX2luZGV4KTsKLQkJcmV0dXJuIERQVV9SU0Nf SURMRV9TVEFURTsKLQl9Ci0KLQlyc2MgPSByc2NfcHJ2X2xpc3RbcnNjX2luZGV4XTsKLQlyZXR1 cm4gcnNjLT5jdXJyZW50X3N0YXRlOwotfQotRVhQT1JUX1NZTUJPTChnZXRfZHB1X3JzY19jdXJy ZW50X3N0YXRlKTsKLQotc3RhdGljIGludCBkcHVfcnNjX2Nsa19lbmFibGUoc3RydWN0IGRwdV9w b3dlcl9oYW5kbGUgKnBoYW5kbGUsCi0Jc3RydWN0IGRwdV9wb3dlcl9jbGllbnQgKnBjbGllbnQs IGJvb2wgZW5hYmxlKQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGRzc19tb2R1bGVfcG93ZXIg Km1wOwotCi0JaWYgKCFwaGFuZGxlIHx8ICFwY2xpZW50KSB7Ci0JCXByX2VycigiaW52YWxpZCBp bnB1dCBhcmd1bWVudFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCW1wID0gJnBoYW5k bGUtPm1wOwotCi0JaWYgKGVuYWJsZSkKLQkJcGNsaWVudC0+cmVmY291bnQrKzsKLQllbHNlIGlm IChwY2xpZW50LT5yZWZjb3VudCkKLQkJcGNsaWVudC0+cmVmY291bnQtLTsKLQotCWlmIChwY2xp ZW50LT5yZWZjb3VudCkKLQkJcGNsaWVudC0+dXNlY2FzZV9uZHggPSBWT1RFX0lOREVYX0xPVzsK LQllbHNlCi0JCXBjbGllbnQtPnVzZWNhc2VfbmR4ID0gVk9URV9JTkRFWF9ESVNBQkxFOwotCi0J aWYgKHBoYW5kbGUtPmN1cnJlbnRfdXNlY2FzZV9uZHggPT0gcGNsaWVudC0+dXNlY2FzZV9uZHgp Ci0JCWdvdG8gZW5kOwotCi0JaWYgKGVuYWJsZSkgewotCQlyYyA9IG1zbV9kc3NfZW5hYmxlX2Ns ayhtcC0+Y2xrX2NvbmZpZywgbXAtPm51bV9jbGssIGVuYWJsZSk7Ci0JCWlmIChyYykgewotCQkJ cHJfZXJyKCJjbG9jayBlbmFibGUgZmFpbGVkIHJjOiVkXG4iLCByYyk7Ci0JCQlnb3RvIGVuZDsK LQkJfQotCX0gZWxzZSB7Ci0JCW1zbV9kc3NfZW5hYmxlX2NsayhtcC0+Y2xrX2NvbmZpZywgbXAt Pm51bV9jbGssIGVuYWJsZSk7Ci0JfQotCi0JcGhhbmRsZS0+Y3VycmVudF91c2VjYXNlX25keCA9 IHBjbGllbnQtPnVzZWNhc2VfbmR4OwotCi1lbmQ6Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMg dTMyIGRwdV9yc2NfdGltZXJfY2FsY3VsYXRlKHN0cnVjdCBkcHVfcnNjX3ByaXYgKnJzYywKLQlz dHJ1Y3QgZHB1X3JzY19jbWRfY29uZmlnICpjbWRfY29uZmlnKQotewotCWNvbnN0IHUzMiBjeG9f cGVyaW9kX25zID0gNTI7Ci0JdTY0IHJzY19iYWNrb2ZmX3RpbWVfbnMgPSBSU0NfQkFDS09GRl9U SU1FX05TOwotCXU2NCByc2NfbW9kZV90aHJlc2hvbGRfdGltZV9ucyA9IFJTQ19NT0RFX1RIUkVT SE9MRF9USU1FX0lOX05TOwotCXU2NCByc2NfdGltZV9zbG90XzBfbnMgPSBSU0NfVElNRV9TTE9U XzBfTlM7Ci0JdTY0IHJzY190aW1lX3Nsb3RfMV9uczsKLQljb25zdCB1NjQgcGRjX2ppdHRlciA9 IDIwOyAvKiAyMCUgbW9yZSAqLwotCi0JdTY0IGZyYW1lX3RpbWVfbnMsIGZyYW1lX2ppdHRlcjsK LQl1NjQgbGluZV90aW1lX25zLCBwcmVmaWxsX3RpbWVfbnM7Ci0JdTY0IHBkY19iYWNrb2ZmX3Rp bWVfbnM7Ci0JczY0IHRvdGFsOwotCWludCByZXQgPSAwOwotCi0JaWYgKGNtZF9jb25maWcpCi0J CW1lbWNweSgmcnNjLT5jbWRfY29uZmlnLCBjbWRfY29uZmlnLCBzaXplb2YoKmNtZF9jb25maWcp KTsKLQotCS8qIGNhbGN1bGF0ZSBmb3IgNjQweDQ4MCA2MCBmcHMgcmVzb2x1dGlvbiBieSBkZWZh dWx0ICovCi0JaWYgKCFyc2MtPmNtZF9jb25maWcuZnBzKQotCQlyc2MtPmNtZF9jb25maWcuZnBz ID0gREVGQVVMVF9QQU5FTF9GUFM7Ci0JaWYgKCFyc2MtPmNtZF9jb25maWcuaml0dGVyX251bWVy KQotCQlyc2MtPmNtZF9jb25maWcuaml0dGVyX251bWVyID0gREVGQVVMVF9QQU5FTF9KSVRURVJf TlVNRVJBVE9SOwotCWlmICghcnNjLT5jbWRfY29uZmlnLmppdHRlcl9kZW5vbSkKLQkJcnNjLT5j bWRfY29uZmlnLmppdHRlcl9kZW5vbSA9IERFRkFVTFRfUEFORUxfSklUVEVSX0RFTk9NSU5BVE9S OwotCWlmICghcnNjLT5jbWRfY29uZmlnLnZ0b3RhbCkKLQkJcnNjLT5jbWRfY29uZmlnLnZ0b3Rh bCA9IERFRkFVTFRfUEFORUxfVlRPVEFMOwotCWlmICghcnNjLT5jbWRfY29uZmlnLnByZWZpbGxf bGluZXMpCi0JCXJzYy0+Y21kX2NvbmZpZy5wcmVmaWxsX2xpbmVzID0gREVGQVVMVF9QQU5FTF9Q UkVGSUxMX0xJTkVTOwotCXByX2RlYnVnKCJmcmFtZSBmcHM6JWQgaml0dGVyX251bWVyOiVkIGpp dHRlcl9kZW5vbTolZCB2dG90YWw6JWQgcHJlZmlsbCBsaW5lczolZFxuIiwKLQkJcnNjLT5jbWRf Y29uZmlnLmZwcywgcnNjLT5jbWRfY29uZmlnLmppdHRlcl9udW1lciwKLQkJcnNjLT5jbWRfY29u ZmlnLmppdHRlcl9kZW5vbSwgcnNjLT5jbWRfY29uZmlnLnZ0b3RhbCwKLQkJcnNjLT5jbWRfY29u ZmlnLnByZWZpbGxfbGluZXMpOwotCi0JLyogMSBuYW5vIHNlY29uZCAqLwotCWZyYW1lX3RpbWVf bnMgPSBUSUNLU19JTl9OQU5PX1NFQ09ORDsKLQlmcmFtZV90aW1lX25zID0gZGl2X3U2NChmcmFt ZV90aW1lX25zLCByc2MtPmNtZF9jb25maWcuZnBzKTsKLQotCWZyYW1lX2ppdHRlciA9IGZyYW1l X3RpbWVfbnMgKiByc2MtPmNtZF9jb25maWcuaml0dGVyX251bWVyOwotCWZyYW1lX2ppdHRlciA9 IGRpdl91NjQoZnJhbWVfaml0dGVyLCByc2MtPmNtZF9jb25maWcuaml0dGVyX2Rlbm9tKTsKLQkv KiBjb252ZXJ0IGl0IHRvIHBlcmNlbnRhZ2UgKi8KLQlmcmFtZV9qaXR0ZXIgPSBkaXZfdTY0KGZy YW1lX2ppdHRlciwgMTAwKTsKLQotCWxpbmVfdGltZV9ucyA9IGZyYW1lX3RpbWVfbnM7Ci0JbGlu ZV90aW1lX25zID0gZGl2X3U2NChsaW5lX3RpbWVfbnMsIHJzYy0+Y21kX2NvbmZpZy52dG90YWwp OwotCXByZWZpbGxfdGltZV9ucyA9IGxpbmVfdGltZV9ucyAqIHJzYy0+Y21kX2NvbmZpZy5wcmVm aWxsX2xpbmVzOwotCi0JdG90YWwgPSBmcmFtZV90aW1lX25zIC0gZnJhbWVfaml0dGVyIC0gcHJl ZmlsbF90aW1lX25zOwotCWlmICh0b3RhbCA8IDApIHsKLQkJcHJfZXJyKCJpbnZhbGlkIHRvdGFs IHRpbWUgcGVyaW9kIHRpbWU6JWxsdSBqaXRlcl90aW1lOiVsbHUgYmxhbmtpbmcgdGltZTolbGx1 XG4iLAotCQkJZnJhbWVfdGltZV9ucywgZnJhbWVfaml0dGVyLCBwcmVmaWxsX3RpbWVfbnMpOwot CQl0b3RhbCA9IDA7Ci0JfQotCi0JdG90YWwgPSBkaXZfdTY0KHRvdGFsLCBjeG9fcGVyaW9kX25z KTsKLQlyc2MtPnRpbWVyX2NvbmZpZy5zdGF0aWNfd2FrZXVwX3RpbWVfbnMgPSB0b3RhbDsKLQot CXByX2RlYnVnKCJmcmFtZSB0aW1lOiVsbHUgZnJhbWUgaml0ZXJfdGltZTolbGx1XG4iLAotCQkJ ZnJhbWVfdGltZV9ucywgZnJhbWVfaml0dGVyKTsKLQlwcl9kZWJ1ZygibGluZSB0aW1lOiVsbHUg cHJlZmlsbCB0aW1lIHBzOiVsbHVcbiIsCi0JCQlsaW5lX3RpbWVfbnMsIHByZWZpbGxfdGltZV9u cyk7Ci0JcHJfZGVidWcoInN0YXRpYyB3YWtldXAgdGltZTolbGxkIGN4bzoldVxuIiwgdG90YWws IGN4b19wZXJpb2RfbnMpOwotCi0JcGRjX2JhY2tvZmZfdGltZV9ucyA9IHJzY19iYWNrb2ZmX3Rp bWVfbnM7Ci0JcnNjX2JhY2tvZmZfdGltZV9ucyA9IGRpdl91NjQocnNjX2JhY2tvZmZfdGltZV9u cywgY3hvX3BlcmlvZF9ucyk7Ci0JcnNjLT50aW1lcl9jb25maWcucnNjX2JhY2tvZmZfdGltZV9u cyA9ICh1MzIpIHJzY19iYWNrb2ZmX3RpbWVfbnM7Ci0KLQlwZGNfYmFja29mZl90aW1lX25zICo9 IHBkY19qaXR0ZXI7Ci0JcGRjX2JhY2tvZmZfdGltZV9ucyA9IGRpdl91NjQocGRjX2JhY2tvZmZf dGltZV9ucywgMTAwKTsKLQlyc2MtPnRpbWVyX2NvbmZpZy5wZGNfYmFja29mZl90aW1lX25zID0g KHUzMikgcGRjX2JhY2tvZmZfdGltZV9uczsKLQotCXJzY19tb2RlX3RocmVzaG9sZF90aW1lX25z ID0KLQkJCWRpdl91NjQocnNjX21vZGVfdGhyZXNob2xkX3RpbWVfbnMsIGN4b19wZXJpb2RfbnMp OwotCXJzYy0+dGltZXJfY29uZmlnLnJzY19tb2RlX3RocmVzaG9sZF90aW1lX25zCi0JCQkJCT0g KHUzMikgcnNjX21vZGVfdGhyZXNob2xkX3RpbWVfbnM7Ci0KLQkvKiB0aW1lX3Nsb3RfMCBmb3Ig bW9kZTAgbGF0ZW5jeSAqLwotCXJzY190aW1lX3Nsb3RfMF9ucyA9IGRpdl91NjQocnNjX3RpbWVf c2xvdF8wX25zLCBjeG9fcGVyaW9kX25zKTsKLQlyc2MtPnRpbWVyX2NvbmZpZy5yc2NfdGltZV9z bG90XzBfbnMgPSAodTMyKSByc2NfdGltZV9zbG90XzBfbnM7Ci0KLQkvKiB0aW1lX3Nsb3RfMSBm b3IgbW9kZTEgbGF0ZW5jeSAqLwotCXJzY190aW1lX3Nsb3RfMV9ucyA9IGZyYW1lX3RpbWVfbnM7 Ci0JcnNjX3RpbWVfc2xvdF8xX25zID0gZGl2X3U2NChyc2NfdGltZV9zbG90XzFfbnMsIGN4b19w ZXJpb2RfbnMpOwotCXJzYy0+dGltZXJfY29uZmlnLnJzY190aW1lX3Nsb3RfMV9ucyA9ICh1MzIp IHJzY190aW1lX3Nsb3RfMV9uczsKLQotCS8qIG1vZGUgMiBpcyBpbmZpbml0ZSAqLwotCXJzYy0+ dGltZXJfY29uZmlnLnJzY190aW1lX3Nsb3RfMl9ucyA9IDB4RkZGRkZGRkY7Ci0KLQkvKiB0aW1l ciB1cGRhdGUgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIGNsaWVudCBjYWxsICovCi0JaWYgKGNtZF9j b25maWcgJiYgcnNjLT5od19vcHMudGltZXJfdXBkYXRlKSB7Ci0JCXJldCA9IHJzYy0+aHdfb3Bz LnRpbWVyX3VwZGF0ZShyc2MpOwotCQlpZiAocmV0KQotCQkJcHJfZXJyKCJkcHUgcnNjOiBodyB0 aW1lciB1cGRhdGUgZmFpbGVkIHJldDolZFxuIiwgcmV0KTsKLQkvKiByc2MgaW5pdCBzaG91bGQg YmUgY2FsbGVkIGR1cmluZyByc2MgcHJvYmUgLSBvbmUgdGltZSBvbmx5ICovCi0JfSBlbHNlIGlm IChyc2MtPmh3X29wcy5pbml0KSB7Ci0JCXJldCA9IHJzYy0+aHdfb3BzLmluaXQocnNjKTsKLQkJ aWYgKHJldCkKLQkJCXByX2VycigiZHB1IHJzYzogaHcgaW5pdCBmYWlsZWQgcmV0OiVkXG4iLCBy ZXQpOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgZHB1X3JzY19zd2l0Y2hf dG9faWRsZShzdHJ1Y3QgZHB1X3JzY19wcml2ICpyc2MpCi17Ci0Jc3RydWN0IGRwdV9yc2NfY2xp ZW50ICpjbGllbnQ7Ci0JaW50IHJjID0gU1RBVEVfVVBEQVRFX05PVF9BTExPV0VEOwotCWJvb2wg aWRsZV9zd2l0Y2ggPSB0cnVlOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShjbGllbnQsICZyc2Mt PmNsaWVudF9saXN0LCBsaXN0KQotCQlpZiAoY2xpZW50LT5jdXJyZW50X3N0YXRlICE9IERQVV9S U0NfSURMRV9TVEFURSkgewotCQkJaWRsZV9zd2l0Y2ggPSBmYWxzZTsKLQkJCWJyZWFrOwotCQl9 Ci0KLQlpZiAoIWlkbGVfc3dpdGNoKSB7Ci0JCS8qKgotCQkgKiBmb2xsb3dpbmcgY29kZSBuZWVk cyB0byBydW4gdGhlIGxvb3AgdGhyb3VnaCBlYWNoCi0JCSAqIGNsaWVudCBiZWNhdXNlIHRoZXkg bWlnaHQgYmUgaW4gZGlmZmVyZW50IG9yZGVyCi0JCSAqIHNvcnRpbmcgaXMgbm90IHBvc3NpYmxl OyBvbmx5IHByZWZlcmVuY2UgaXMgYXZhaWxhYmxlCi0JCSAqLwotCi0JCS8qIGZpcnN0IGNoZWNr IGlmIGFueSB2aWQgY2xpZW50IGFjdGl2ZSAqLwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsaWVu dCwgJnJzYy0+Y2xpZW50X2xpc3QsIGxpc3QpCi0JCQlpZiAoY2xpZW50LT5jdXJyZW50X3N0YXRl ID09IERQVV9SU0NfVklEX1NUQVRFKQotCQkJCXJldHVybiByYzsKLQotCQkvKiBub3cgdHJ5IGNt ZCBzdGF0ZSBzd2l0Y2ggKi8KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShjbGllbnQsICZyc2MtPmNs aWVudF9saXN0LCBsaXN0KQotCQkJaWYgKGNsaWVudC0+Y3VycmVudF9zdGF0ZSA9PSBEUFVfUlND X0NNRF9TVEFURSkKLQkJCQlyZXR1cm4gVFJZX0NNRF9NT0RFX1NXSVRDSDsKLQotCQkvKiBub3cg dHJ5IGNsayBzdGF0ZSBzd2l0Y2ggKi8KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShjbGllbnQsICZy c2MtPmNsaWVudF9saXN0LCBsaXN0KQotCQkJaWYgKGNsaWVudC0+Y3VycmVudF9zdGF0ZSA9PSBE UFVfUlNDX0NMS19TVEFURSkKLQkJCQlyZXR1cm4gVFJZX0NMS19NT0RFX1NXSVRDSDsKLQotCX0g ZWxzZSBpZiAocnNjLT5od19vcHMuc3RhdGVfdXBkYXRlKSB7Ci0JCXJjID0gcnNjLT5od19vcHMu c3RhdGVfdXBkYXRlKHJzYywgRFBVX1JTQ19JRExFX1NUQVRFKTsKLQkJaWYgKCFyYykKLQkJCXJw bWhfbW9kZV9zb2x2ZXJfc2V0KHJzYy0+ZGlzcF9yc2MsIHRydWUpOwotCX0KLQotCXJldHVybiBy YzsKLX0KLQotc3RhdGljIGludCBkcHVfcnNjX3N3aXRjaF90b19jbWQoc3RydWN0IGRwdV9yc2Nf cHJpdiAqcnNjLAotCXN0cnVjdCBkcHVfcnNjX2NtZF9jb25maWcgKmNvbmZpZywKLQlzdHJ1Y3Qg ZHB1X3JzY19jbGllbnQgKmNhbGxlcl9jbGllbnQsCi0JaW50ICp3YWl0X3ZibGFua19jcnRjX2lk KQotewotCXN0cnVjdCBkcHVfcnNjX2NsaWVudCAqY2xpZW50OwotCWludCByYyA9IFNUQVRFX1VQ REFURV9OT1RfQUxMT1dFRDsKLQotCWlmICghcnNjLT5wcmltYXJ5X2NsaWVudCkgewotCQlwcl9l cnIoInByaW1hcnkgY2xpZW50IG5vdCBhdmFpbGFibGUgZm9yIGNtZCBzdGF0ZSBzd2l0Y2hcbiIp OwotCQlyYyA9IC1FSU5WQUw7Ci0JCWdvdG8gZW5kOwotCX0gZWxzZSBpZiAoY2FsbGVyX2NsaWVu dCAhPSByc2MtPnByaW1hcnlfY2xpZW50KSB7Ci0JCXByX2VycigicHJpbWFyeSBjbGllbnQgc3Rh dGU6JWQgbm90IGNtZCBzdGF0ZSByZXF1ZXN0XG4iLAotCQkJcnNjLT5wcmltYXJ5X2NsaWVudC0+ Y3VycmVudF9zdGF0ZSk7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBlbmQ7Ci0JfQotCi0JLyog dXBkYXRlIHRpbWVycyAtIG1pZ2h0IG5vdCBiZSBhdmFpbGFibGUgYXQgbmV4dCBzd2l0Y2ggKi8K LQlpZiAoY29uZmlnKQotCQlkcHVfcnNjX3RpbWVyX2NhbGN1bGF0ZShyc2MsIGNvbmZpZyk7Ci0K LQkvKioKLQkgKiByc2MgY2xpZW50cyBjYW4gc3RpbGwgc2VuZCBjb25maWcgYXQgYW55IHRpbWUu IElmIGEgY29uZmlnIGlzCi0JICogcmVjZWl2ZWQgZHVyaW5nIGNtZF9zdGF0ZSB0aGVuIHZzeW5j X3dhaXQgd2lsbCBleGVjdXRlIHdpdGggdGhlIGxvZ2ljCi0JICogYmVsb3cuIElmIGEgY29uZmln IGlzIHJlY2VpdmVkIHdoZW4gcnNjIGlzIGluIEFNQyBtb2RlOyBBIG1vZGUKLQkgKiBzd2l0Y2gg d2lsbCBkbyB0aGUgdnN5bmMgd2FpdC4gdXBkYXRlZCBjaGVja3Mgc3RpbGwgc3VwcG9ydCBhbGwg Y2FzZXMKLQkgKiBmb3IgZHluYW1pYyBtb2RlIHN3aXRjaCBhbmQgaW5saW5lIHJvdGF0aW9uLgot CSAqLwotCWlmIChyc2MtPmN1cnJlbnRfc3RhdGUgPT0gRFBVX1JTQ19DTURfU1RBVEUpIHsKLQkJ cmMgPSAwOwotCQlpZiAoY29uZmlnKQotCQkJZ290byB2c3luY193YWl0OwotCQllbHNlCi0JCQln b3RvIGVuZDsKLQl9Ci0KLQkvKiBhbnkgb25lIGNsaWVudCBpbiB2aWRlbyBzdGF0ZSBibG9ja3Mg dGhlIGNtZCBzdGF0ZSBzd2l0Y2ggKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsaWVudCwgJnJz Yy0+Y2xpZW50X2xpc3QsIGxpc3QpCi0JCWlmIChjbGllbnQtPmN1cnJlbnRfc3RhdGUgPT0gRFBV X1JTQ19WSURfU1RBVEUpCi0JCQlnb3RvIGVuZDsKLQotCWlmIChyc2MtPmh3X29wcy5zdGF0ZV91 cGRhdGUpIHsKLQkJcmMgPSByc2MtPmh3X29wcy5zdGF0ZV91cGRhdGUocnNjLCBEUFVfUlNDX0NN RF9TVEFURSk7Ci0JCWlmICghcmMpCi0JCQlycG1oX21vZGVfc29sdmVyX3NldChyc2MtPmRpc3Bf cnNjLCB0cnVlKTsKLQl9Ci0KLXZzeW5jX3dhaXQ6Ci0JLyogaW5kaWNhdGUgd2FpdCBmb3IgdnN5 bmMgZm9yIHZpZCB0byBjbWQgc3RhdGUgc3dpdGNoICYgY2ZnIHVwZGF0ZSAqLwotCWlmICghcmMg JiYgKHJzYy0+Y3VycmVudF9zdGF0ZSA9PSBEUFVfUlNDX1ZJRF9TVEFURSB8fAotCQkJcnNjLT5j dXJyZW50X3N0YXRlID09IERQVV9SU0NfQ01EX1NUQVRFKSkgewotCQkvKiBjbGVhciBWU1lOQyB0 aW1lc3RhbXAgZm9yIGluZGljYXRpb24gd2hlbiB1cGRhdGUgY29tcGxldGVzICovCi0JCWlmIChy c2MtPmh3X29wcy5od192c3luYykKLQkJCXJzYy0+aHdfb3BzLmh3X3ZzeW5jKHJzYywgVlNZTkNf RU5BQkxFLCBOVUxMLCAwLCAwKTsKLQkJaWYgKCF3YWl0X3ZibGFua19jcnRjX2lkKSB7Ci0JCQlw cl9lcnIoImludmFsaWQgY3J0YyBpZCB3YWl0IHBvaW50ZXIsIGNsaWVudCAlZFxuIiwKLQkJCQkJ Y2FsbGVyX2NsaWVudC0+aWQpOwotCQkJRFBVX0VWVDMyKGNhbGxlcl9jbGllbnQtPmlkLCByc2Mt PmN1cnJlbnRfc3RhdGUsCi0JCQkJCWNhbGxlcl9jbGllbnQtPmNydGNfaWQsCi0JCQkJCXdhaXRf dmJsYW5rX2NydGNfaWQsIERQVV9FVlRMT0dfRVJST1IpOwotCQkJbXNsZWVwKFBSSU1BUllfVkJM QU5LX1dPUlNUX0NBU0VfTVMpOwotCQl9IGVsc2UgewotCQkJKndhaXRfdmJsYW5rX2NydGNfaWQg PSByc2MtPnByaW1hcnlfY2xpZW50LT5jcnRjX2lkOwotCQl9Ci0JfQotZW5kOgotCXJldHVybiBy YzsKLX0KLQotc3RhdGljIGludCBkcHVfcnNjX3N3aXRjaF90b19jbGsoc3RydWN0IGRwdV9yc2Nf cHJpdiAqcnNjLAotCQlpbnQgKndhaXRfdmJsYW5rX2NydGNfaWQpCi17Ci0Jc3RydWN0IGRwdV9y c2NfY2xpZW50ICpjbGllbnQ7Ci0JaW50IHJjID0gU1RBVEVfVVBEQVRFX05PVF9BTExPV0VEOwot Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShjbGllbnQsICZyc2MtPmNsaWVudF9saXN0LCBsaXN0KQot CQlpZiAoKGNsaWVudC0+Y3VycmVudF9zdGF0ZSA9PSBEUFVfUlNDX1ZJRF9TVEFURSkgfHwKLQkJ ICAgIChjbGllbnQtPmN1cnJlbnRfc3RhdGUgPT0gRFBVX1JTQ19DTURfU1RBVEUpKQotCQkJZ290 byBlbmQ7Ci0KLQlpZiAocnNjLT5od19vcHMuc3RhdGVfdXBkYXRlKSB7Ci0JCXJjID0gcnNjLT5o d19vcHMuc3RhdGVfdXBkYXRlKHJzYywgRFBVX1JTQ19DTEtfU1RBVEUpOwotCQlpZiAoIXJjKQot CQkJcnBtaF9tb2RlX3NvbHZlcl9zZXQocnNjLT5kaXNwX3JzYywgZmFsc2UpOwotCX0KLQotCS8q IGluZGljYXRlIHdhaXQgZm9yIHZzeW5jIGZvciBjbWQgdG8gY2xrIHN0YXRlIHN3aXRjaCAqLwot CWlmICghcmMgJiYgcnNjLT5wcmltYXJ5X2NsaWVudCAmJgotCQkJKHJzYy0+Y3VycmVudF9zdGF0 ZSA9PSBEUFVfUlNDX0NNRF9TVEFURSkpIHsKLQkJLyogY2xlYXIgVlNZTkMgdGltZXN0YW1wIGZv ciBpbmRpY2F0aW9uIHdoZW4gdXBkYXRlIGNvbXBsZXRlcyAqLwotCQlpZiAocnNjLT5od19vcHMu aHdfdnN5bmMpCi0JCQlyc2MtPmh3X29wcy5od192c3luYyhyc2MsIFZTWU5DX0VOQUJMRSwgTlVM TCwgMCwgMCk7Ci0JCWlmICghd2FpdF92YmxhbmtfY3J0Y19pZCkgewotCQkJcHJfZXJyKCJpbnZh bGlkIGNydGMgaWQgd2FpdCBwb2ludGVyIHByb3ZpZGVkXG4iKTsKLQkJCW1zbGVlcChQUklNQVJZ X1ZCTEFOS19XT1JTVF9DQVNFX01TKTsKLQkJfSBlbHNlIHsKLQkJCSp3YWl0X3ZibGFua19jcnRj X2lkID0gcnNjLT5wcmltYXJ5X2NsaWVudC0+Y3J0Y19pZDsKLQkJfQotCX0KLWVuZDoKLQlyZXR1 cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHB1X3JzY19zd2l0Y2hfdG9fdmlkKHN0cnVjdCBkcHVf cnNjX3ByaXYgKnJzYywKLQlzdHJ1Y3QgZHB1X3JzY19jbWRfY29uZmlnICpjb25maWcsCi0Jc3Ry dWN0IGRwdV9yc2NfY2xpZW50ICpjYWxsZXJfY2xpZW50LAotCWludCAqd2FpdF92YmxhbmtfY3J0 Y19pZCkKLXsKLQlpbnQgcmMgPSAwOwotCi0JLyogdXBkYXRlIHRpbWVycyAtIG1pZ2h0IG5vdCBi ZSBhdmFpbGFibGUgYXQgbmV4dCBzd2l0Y2ggKi8KLQlpZiAoY29uZmlnICYmIChjYWxsZXJfY2xp ZW50ID09IHJzYy0+cHJpbWFyeV9jbGllbnQpKQotCQlkcHVfcnNjX3RpbWVyX2NhbGN1bGF0ZShy c2MsIGNvbmZpZyk7Ci0KLQkvKiBlYXJseSBleGl0IHdpdGhvdXQgdnN5bmMgd2FpdCBmb3Igdmlk IHN0YXRlICovCi0JaWYgKHJzYy0+Y3VycmVudF9zdGF0ZSA9PSBEUFVfUlNDX1ZJRF9TVEFURSkK LQkJZ290byBlbmQ7Ci0KLQkvKiB2aWRlbyBzdGF0ZSBzd2l0Y2ggc2hvdWxkIGJlIGRvbmUgaW1t ZWRpYXRlbHkgKi8KLQlpZiAocnNjLT5od19vcHMuc3RhdGVfdXBkYXRlKSB7Ci0JCXJjID0gcnNj LT5od19vcHMuc3RhdGVfdXBkYXRlKHJzYywgRFBVX1JTQ19WSURfU1RBVEUpOwotCQlpZiAoIXJj KQotCQkJcnBtaF9tb2RlX3NvbHZlcl9zZXQocnNjLT5kaXNwX3JzYywgZmFsc2UpOwotCX0KLQot CS8qIGluZGljYXRlIHdhaXQgZm9yIHZzeW5jIGZvciBjbWQgdG8gdmlkIHN0YXRlIHN3aXRjaCAq LwotCWlmICghcmMgJiYgcnNjLT5wcmltYXJ5X2NsaWVudCAmJgotCQkJKHJzYy0+Y3VycmVudF9z dGF0ZSA9PSBEUFVfUlNDX0NNRF9TVEFURSkpIHsKLQkJLyogY2xlYXIgVlNZTkMgdGltZXN0YW1w IGZvciBpbmRpY2F0aW9uIHdoZW4gdXBkYXRlIGNvbXBsZXRlcyAqLwotCQlpZiAocnNjLT5od19v cHMuaHdfdnN5bmMpCi0JCQlyc2MtPmh3X29wcy5od192c3luYyhyc2MsIFZTWU5DX0VOQUJMRSwg TlVMTCwgMCwgMCk7Ci0JCWlmICghd2FpdF92YmxhbmtfY3J0Y19pZCkgewotCQkJcHJfZXJyKCJp bnZhbGlkIGNydGMgaWQgd2FpdCBwb2ludGVyIHByb3ZpZGVkXG4iKTsKLQkJCW1zbGVlcChQUklN QVJZX1ZCTEFOS19XT1JTVF9DQVNFX01TKTsKLQkJfSBlbHNlIHsKLQkJCSp3YWl0X3ZibGFua19j cnRjX2lkID0gcnNjLT5wcmltYXJ5X2NsaWVudC0+Y3J0Y19pZDsKLQkJfQotCX0KLQotZW5kOgot CXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBkcHVfcnNjX2NsaWVudF9pc19zdGF0ZV91cGRhdGVf Y29tcGxldGUoKSAtIGNoZWNrIGlmIHN0YXRlIHVwZGF0ZSBpcyBjb21wbGV0ZQotICogUlNDIHN0 YXRlIHRyYW5zaXRpb24gaXMgbm90IGNvbXBsZXRlIHVudGlsIEhXIHJlY2VpdmVzIFZCTEFOSyBz aWduYWwuIFRoaXMKLSAqIGZ1bmN0aW9uIGNoZWNrcyBSU0MgSFcgdG8gZGV0ZXJtaW5lIHdoZXRo ZXIgdGhhdCBzaWduYWwgaGFzIGJlZW4gcmVjZWl2ZWQuCi0gKiBAY2xpZW50OgkgQ2xpZW50IHBv aW50ZXIgcHJvdmlkZWQgYnkgZHB1X3JzY19jbGllbnRfY3JlYXRlKCkuCi0gKgotICogUmV0dXJu OiB0cnVlIGlmIHRoZSBzdGF0ZSB1cGRhdGUgaGFzIGNvbXBsZXRlZC4KLSAqLwotYm9vbCBkcHVf cnNjX2NsaWVudF9pc19zdGF0ZV91cGRhdGVfY29tcGxldGUoCi0JCXN0cnVjdCBkcHVfcnNjX2Ns aWVudCAqY2FsbGVyX2NsaWVudCkKLXsKLQlzdHJ1Y3QgZHB1X3JzY19wcml2ICpyc2M7Ci0JdTMy IHZzeW5jX3RpbWVzdGFtcDAgPSAwOwotCi0JaWYgKCFjYWxsZXJfY2xpZW50KSB7Ci0JCXByX2Vy cigiaW52YWxpZCBjbGllbnQgZm9yIHJzYyBzdGF0ZSB1cGRhdGVcbiIpOwotCQlyZXR1cm4gZmFs c2U7Ci0JfSBlbHNlIGlmIChjYWxsZXJfY2xpZW50LT5yc2NfaW5kZXggPj0gTUFYX1JTQ19DT1VO VCkgewotCQlwcl9lcnIoImludmFsaWQgcnNjIGluZGV4XG4iKTsKLQkJcmV0dXJuIGZhbHNlOwot CX0KLQotCXJzYyA9IHJzY19wcnZfbGlzdFtjYWxsZXJfY2xpZW50LT5yc2NfaW5kZXhdOwotCWlm ICghcnNjKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQkvKioKLQkgKiBzdGF0ZSB1cGRhdGVzIGNsZWFy IFZTWU5DIHRpbWVzdGFtcCwgY2hlY2sgaWYgYSBuZXcgb25lIGFycml2ZWQuCi0JICogdXNlIFZT WU5DIG1vZGUgMCAoQ01EIFRFKSBhbHdheXMgZm9yIHRoaXMsIHBlciBIVyByZWNvbW1lbmRhdGlv bi4KLQkgKi8KLQlpZiAocnNjLT5od19vcHMuaHdfdnN5bmMpCi0JCXZzeW5jX3RpbWVzdGFtcDAg PSByc2MtPmh3X29wcy5od192c3luYyhyc2MsIFZTWU5DX1JFQURfVlNZTkMwLAotCQkJCU5VTEws IDAsIDApOwotCi0JcmV0dXJuIHZzeW5jX3RpbWVzdGFtcDAgIT0gMDsKLX0KLQotLyoqCi0gKiBk cHVfcnNjX2NsaWVudF9zdGF0ZV91cGRhdGUoKSAtIHJzYyBjbGllbnQgc3RhdGUgdXBkYXRlCi0g KiBWaWRlbyBtb2RlLCBjbWQgbW9kZSBhbmQgY2xrIHN0YXRlIGFyZSBzdXBwb2VkIGFzIG1vZGVz LiBBIGNsaWVudCBuZWVkIHRvCi0gKiBzZXQgdGhpcyBwcm9wZXJ0eSBkdXJpbmcgcGFuZWwgY29u ZmlnIHRpbWUuIEEgc3dpdGNoaW5nIGNsaWVudCBjYW4gc2V0IHRoZQotICogcHJvcGVydHkgdG8g Y2hhbmdlIHRoZSBzdGF0ZQotICoKLSAqIEBjbGllbnQ6CSBDbGllbnQgcG9pbnRlciBwcm92aWRl ZCBieSBkcHVfcnNjX2NsaWVudF9jcmVhdGUoKS4KLSAqIEBzdGF0ZToJIENsaWVudCBzdGF0ZSAt IHZpZGVvL2NtZAotICogQGNvbmZpZzoJIGZwcywgdnRvdGFsLCBwb3JjaGVzLCBldGMgY29uZmln dXJhdGlvbiBmb3IgY29tbWFuZCBtb2RlCi0gKiAgICAgICAgICAgICAgIHBhbmVsCi0gKiBAY3J0 Y19pZDoJIGN1cnJlbnQgY2xpZW50J3MgY3J0YyBpZAotICogQHdhaXRfdmJsYW5rX2NydGNfaWQ6 CU91dHB1dCBwYXJhbWV0ZXIuIElmIHNldCB0byBub24temVybywgcnNjIGh3Ci0gKgkJCQlzdGF0 ZSB1cGRhdGUgcmVxdWlyZXMgYSB3YWl0IGZvciBvbmUgdmJsYW5rIG9uCi0gKgkJCQl0aGUgcHJp bWFyeSBjcnRjLiBJbiB0aGF0IGNhc2UsIHRoaXMgb3V0cHV0Ci0gKgkJCQlwYXJhbSB3aWxsIGJl IHNldCB0byB0aGUgY3J0YyBvbiB3aGljaCB0byB3YWl0LgotICoJCQkJSWYgRFBVX1JTQ19JTlZB TElEX0NSVENfSUQsIG5vIHdhaXQgbmVjZXNzYXJ5Ci0gKgotICogUmV0dXJuOiBlcnJvciBjb2Rl LgotICovCi1pbnQgZHB1X3JzY19jbGllbnRfc3RhdGVfdXBkYXRlKHN0cnVjdCBkcHVfcnNjX2Ns aWVudCAqY2FsbGVyX2NsaWVudCwKLQllbnVtIGRwdV9yc2Nfc3RhdGUgc3RhdGUsCi0Jc3RydWN0 IGRwdV9yc2NfY21kX2NvbmZpZyAqY29uZmlnLCBpbnQgY3J0Y19pZCwKLQlpbnQgKndhaXRfdmJs YW5rX2NydGNfaWQpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgZHB1X3JzY19wcml2ICpyc2M7 Ci0KLQlpZiAoIWNhbGxlcl9jbGllbnQpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIGNsaWVudCBmb3Ig cnNjIHN0YXRlIHVwZGF0ZVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0gZWxzZSBpZiAoY2Fs bGVyX2NsaWVudC0+cnNjX2luZGV4ID49IE1BWF9SU0NfQ09VTlQpIHsKLQkJcHJfZXJyKCJpbnZh bGlkIHJzYyBpbmRleFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJzYyA9IHJzY19w cnZfbGlzdFtjYWxsZXJfY2xpZW50LT5yc2NfaW5kZXhdOwotCWlmICghcnNjKQotCQlyZXR1cm4g LUVJTlZBTDsKLQotCWlmICh3YWl0X3ZibGFua19jcnRjX2lkKQotCQkqd2FpdF92YmxhbmtfY3J0 Y19pZCA9IERQVV9SU0NfSU5WQUxJRF9DUlRDX0lEOwotCi0JbXV0ZXhfbG9jaygmcnNjLT5jbGll bnRfbG9jayk7Ci0JRFBVX0VWVDMyX1ZFUkJPU0UoY2FsbGVyX2NsaWVudC0+aWQsIGNhbGxlcl9j bGllbnQtPmN1cnJlbnRfc3RhdGUsCi0JCQlzdGF0ZSwgcnNjLT5jdXJyZW50X3N0YXRlLCBEUFVf RVZUTE9HX0ZVTkNfRU5UUlkpOwotCWNhbGxlcl9jbGllbnQtPmNydGNfaWQgPSBjcnRjX2lkOwot CWNhbGxlcl9jbGllbnQtPmN1cnJlbnRfc3RhdGUgPSBzdGF0ZTsKLQotCWlmIChyc2MtPm1hc3Rl cl9kcm0gPT0gTlVMTCkgewotCQlwcl9lcnIoImludmFsaWQgbWFzdGVyIGNvbXBvbmVudCBiaW5k aW5nXG4iKTsKLQkJcmMgPSAtRUlOVkFMOwotCQlnb3RvIGVuZDsKLQl9IGVsc2UgaWYgKChyc2Mt PmN1cnJlbnRfc3RhdGUgPT0gc3RhdGUpICYmICFjb25maWcpIHsKLQkJcHJfZGVidWcoIm5vIHN0 YXRlIGNoYW5nZTogJWRcbiIsIHN0YXRlKTsKLQkJZ290byBlbmQ7Ci0JfQotCi0JcHJfZGVidWco IiVwUzogcnNjIHN0YXRlOiVkIHJlcXVlc3QgY2xpZW50OiVzIHN0YXRlOiVkXG4iLAotCQlfX2J1 aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCksIHJzYy0+Y3VycmVudF9zdGF0ZSwKLQkJY2FsbGVyX2Ns aWVudC0+bmFtZSwgc3RhdGUpOwotCi0JaWYgKHJzYy0+Y3VycmVudF9zdGF0ZSA9PSBEUFVfUlND X0lETEVfU1RBVEUpCi0JCWRwdV9yc2NfY2xrX2VuYWJsZSgmcnNjLT5waGFuZGxlLCByc2MtPnBj bGllbnQsIHRydWUpOwotCi0Jc3dpdGNoIChzdGF0ZSkgewotCWNhc2UgRFBVX1JTQ19JRExFX1NU QVRFOgotCQlyYyA9IGRwdV9yc2Nfc3dpdGNoX3RvX2lkbGUocnNjKTsKLQotCQkvKiB2aWRlbyBz dGF0ZSBjbGllbnQgbWlnaHQgYmUgZXhpdGluZzsgdHJ5IGNtZCBzdGF0ZSBzd2l0Y2ggKi8KLQkJ aWYgKHJjID09IFRSWV9DTURfTU9ERV9TV0lUQ0gpIHsKLQkJCXJjID0gZHB1X3JzY19zd2l0Y2hf dG9fY21kKHJzYywgTlVMTCwKLQkJCQkJcnNjLT5wcmltYXJ5X2NsaWVudCwKLQkJCQkJd2FpdF92 YmxhbmtfY3J0Y19pZCk7Ci0JCQlpZiAoIXJjKQotCQkJCXN0YXRlID0gRFBVX1JTQ19DTURfU1RB VEU7Ci0KLQkJLyogY21kIHN0YXRlIGNsaWVudCBtaWdodCBiZSBleGl0aW5nOyB0cnkgY2xrIHN0 YXRlIHN3aXRjaCAqLwotCQl9IGVsc2UgaWYgKHJjID09IFRSWV9DTEtfTU9ERV9TV0lUQ0gpIHsK LQkJCXJjID0gZHB1X3JzY19zd2l0Y2hfdG9fY2xrKHJzYywgd2FpdF92YmxhbmtfY3J0Y19pZCk7 Ci0JCQlpZiAoIXJjKQotCQkJCXN0YXRlID0gRFBVX1JTQ19DTEtfU1RBVEU7Ci0JCX0KLQkJYnJl YWs7Ci0KLQljYXNlIERQVV9SU0NfQ01EX1NUQVRFOgotCQlyYyA9IGRwdV9yc2Nfc3dpdGNoX3Rv X2NtZChyc2MsIGNvbmZpZywgY2FsbGVyX2NsaWVudCwKLQkJCQl3YWl0X3ZibGFua19jcnRjX2lk KTsKLQkJYnJlYWs7Ci0KLQljYXNlIERQVV9SU0NfVklEX1NUQVRFOgotCQlyYyA9IGRwdV9yc2Nf c3dpdGNoX3RvX3ZpZChyc2MsIGNvbmZpZywgY2FsbGVyX2NsaWVudCwKLQkJCQl3YWl0X3ZibGFu a19jcnRjX2lkKTsKLQkJYnJlYWs7Ci0KLQljYXNlIERQVV9SU0NfQ0xLX1NUQVRFOgotCQlyYyA9 IGRwdV9yc2Nfc3dpdGNoX3RvX2Nsayhyc2MsIHdhaXRfdmJsYW5rX2NydGNfaWQpOwotCQlicmVh azsKLQotCWRlZmF1bHQ6Ci0JCXByX2VycigiaW52YWxpZCBzdGF0ZSBoYW5kbGluZyAlZFxuIiwg c3RhdGUpOwotCQlicmVhazsKLQl9Ci0KLQlpZiAocmMgPT0gU1RBVEVfVVBEQVRFX05PVF9BTExP V0VEKSB7Ci0JCXJjID0gMDsKLQkJRFBVX0VWVDMyKGNhbGxlcl9jbGllbnQtPmlkLCBjYWxsZXJf Y2xpZW50LT5jdXJyZW50X3N0YXRlLAotCQkJc3RhdGUsIHJzYy0+Y3VycmVudF9zdGF0ZSwgcmMs IERQVV9FVlRMT0dfRlVOQ19DQVNFMSk7Ci0JCWdvdG8gY2xrX2Rpc2FibGU7Ci0JfSBlbHNlIGlm IChyYykgewotCQlwcl9kZWJ1Zygic3RhdGU6JWQgdXBkYXRlIGZhaWxlZCByYzolZFxuIiwgc3Rh dGUsIHJjKTsKLQkJRFBVX0VWVDMyKGNhbGxlcl9jbGllbnQtPmlkLCBjYWxsZXJfY2xpZW50LT5j dXJyZW50X3N0YXRlLAotCQkJc3RhdGUsIHJzYy0+Y3VycmVudF9zdGF0ZSwgcmMsIERQVV9FVlRM T0dfRlVOQ19DQVNFMik7Ci0JCWdvdG8gY2xrX2Rpc2FibGU7Ci0JfQotCi0JcHJfZGVidWcoInN0 YXRlIHN3aXRjaCBzdWNjZXNzZnVsbHkgY29tcGxldGU6ICVkXG4iLCBzdGF0ZSk7Ci0JcnNjLT5j dXJyZW50X3N0YXRlID0gc3RhdGU7Ci0JRFBVX0VWVDMyKGNhbGxlcl9jbGllbnQtPmlkLCBjYWxs ZXJfY2xpZW50LT5jdXJyZW50X3N0YXRlLAotCQkJc3RhdGUsIHJzYy0+Y3VycmVudF9zdGF0ZSwg RFBVX0VWVExPR19GVU5DX0VYSVQpOwotCi1jbGtfZGlzYWJsZToKLQlpZiAocnNjLT5jdXJyZW50 X3N0YXRlID09IERQVV9SU0NfSURMRV9TVEFURSkKLQkJZHB1X3JzY19jbGtfZW5hYmxlKCZyc2Mt PnBoYW5kbGUsIHJzYy0+cGNsaWVudCwgZmFsc2UpOwotZW5kOgotCW11dGV4X3VubG9jaygmcnNj LT5jbGllbnRfbG9jayk7Ci0JcmV0dXJuIHJjOwotfQotRVhQT1JUX1NZTUJPTChkcHVfcnNjX2Ns aWVudF9zdGF0ZV91cGRhdGUpOwotCi0vKioKLSAqIGRwdV9yc2NfY2xpZW50X3ZvdGUoKSAtIGFi L2liIHZvdGUgZnJvbSByc2MgY2xpZW50Ci0gKgotICogQGNsaWVudDoJIENsaWVudCBwb2ludGVy IHByb3ZpZGVkIGJ5IGRwdV9yc2NfY2xpZW50X2NyZWF0ZSgpLgotICogQGJ1c19pZDogZGF0YSBi dXMgZm9yIHdoaWNoIHRvIGJlIHZvdGVkCi0gKiBAYWI6CQkgYWdncmVnYXRlZCBiYW5kd2lkdGgg dm90ZSBmcm9tIGNsaWVudC4KLSAqIEBpYjoJCSBpbnN0YW50IGJhbmR3aWR0aCB2b3RlIGZyb20g Y2xpZW50LgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50IGRwdV9yc2NfY2xp ZW50X3ZvdGUoc3RydWN0IGRwdV9yc2NfY2xpZW50ICpjYWxsZXJfY2xpZW50LAotCQl1MzIgYnVz X2lkLCB1NjQgYWJfdm90ZSwgdTY0IGliX3ZvdGUpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3Qg ZHB1X3JzY19wcml2ICpyc2M7Ci0KLQlpZiAoIWNhbGxlcl9jbGllbnQpIHsKLQkJcHJfZXJyKCJp bnZhbGlkIGNsaWVudCBmb3IgYWIvaWIgdm90ZVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0g ZWxzZSBpZiAoY2FsbGVyX2NsaWVudC0+cnNjX2luZGV4ID49IE1BWF9SU0NfQ09VTlQpIHsKLQkJ cHJfZXJyKCJpbnZhbGlkIHJzYyBpbmRleFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQot CXJzYyA9IHJzY19wcnZfbGlzdFtjYWxsZXJfY2xpZW50LT5yc2NfaW5kZXhdOwotCWlmICghcnNj KQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXByX2RlYnVnKCJjbGllbnQ6JXMgYWI6JWxsdSBpYjol bGx1XG4iLAotCQkJY2FsbGVyX2NsaWVudC0+bmFtZSwgYWJfdm90ZSwgaWJfdm90ZSk7Ci0KLQlt dXRleF9sb2NrKCZyc2MtPmNsaWVudF9sb2NrKTsKLQlyYyA9IGRwdV9yc2NfY2xrX2VuYWJsZSgm cnNjLT5waGFuZGxlLCByc2MtPnBjbGllbnQsIHRydWUpOwotCWlmIChyYykKLQkJZ290byBjbGtf ZW5hYmxlX2ZhaWw7Ci0KLQlpZiAocnNjLT5od19vcHMudGNzX3dhaXQpIHsKLQkJcmMgPSByc2Mt Pmh3X29wcy50Y3Nfd2FpdChyc2MpOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigidGNzIGlzIHN0 aWxsIGJ1c3k7IGNhbid0IHNlbmQgY29tbWFuZFxuIik7Ci0JCQlpZiAocnNjLT5od19vcHMudGNz X3VzZV9vaykKLQkJCQlyc2MtPmh3X29wcy50Y3NfdXNlX29rKHJzYyk7Ci0JCQlnb3RvIGVuZDsK LQkJfQotCX0KLQotCXJwbWhfaW52YWxpZGF0ZShyc2MtPmRpc3BfcnNjKTsKLQlkcHVfcG93ZXJf ZGF0YV9idXNfc2V0X3F1b3RhKCZyc2MtPnBoYW5kbGUsIHJzYy0+cGNsaWVudCwKLQkJRFBVX1BP V0VSX0hBTkRMRV9EQVRBX0JVU19DTElFTlRfUlQsCi0JCWJ1c19pZCwgYWJfdm90ZSwgaWJfdm90 ZSk7Ci0JcnBtaF9mbHVzaChyc2MtPmRpc3BfcnNjKTsKLQotCWlmIChyc2MtPmh3X29wcy50Y3Nf dXNlX29rKQotCQlyc2MtPmh3X29wcy50Y3NfdXNlX29rKHJzYyk7Ci0KLWVuZDoKLQlkcHVfcnNj X2Nsa19lbmFibGUoJnJzYy0+cGhhbmRsZSwgcnNjLT5wY2xpZW50LCBmYWxzZSk7Ci1jbGtfZW5h YmxlX2ZhaWw6Ci0JbXV0ZXhfdW5sb2NrKCZyc2MtPmNsaWVudF9sb2NrKTsKLQotCXJldHVybiBy YzsKLX0KLUVYUE9SVF9TWU1CT0woZHB1X3JzY19jbGllbnRfdm90ZSk7Ci0KLSNpZiBkZWZpbmVk KENPTkZJR19ERUJVR19GUykKLXZvaWQgZHB1X3JzY19kZWJ1Z19kdW1wKHUzMiBtdXhfc2VsKQot ewotCXN0cnVjdCBkcHVfcnNjX3ByaXYgKnJzYzsKLQotCXJzYyA9IHJzY19wcnZfbGlzdFtEUFVf UlNDX0lOREVYXTsKLQlpZiAoIXJzYykKLQkJcmV0dXJuOwotCi0JLyogdGhpcyBtdXN0IGJlIGNh bGxlZCB3aXRoIHJzYyBjbG9ja3MgZW5hYmxlZCAqLwotCWlmIChyc2MtPmh3X29wcy5kZWJ1Z19k dW1wKQotCQlyc2MtPmh3X29wcy5kZWJ1Z19kdW1wKHJzYywgbXV4X3NlbCk7Ci19Ci0jZW5kaWYg LyogZGVmaW5lZChDT05GSUdfREVCVUdfRlMpICovCi0KLXN0YXRpYyBpbnQgX2RwdV9kZWJ1Z2Zz X3N0YXR1c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3Qg ZHB1X3JzY19wcml2ICpyc2M7Ci0Jc3RydWN0IGRwdV9yc2NfY2xpZW50ICpjbGllbnQ7Ci0JaW50 IHJldDsKLQotCWlmICghcyB8fCAhcy0+cHJpdmF0ZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQly c2MgPSBzLT5wcml2YXRlOwotCi0JbXV0ZXhfbG9jaygmcnNjLT5jbGllbnRfbG9jayk7Ci0JcmV0 ID0gZHB1X3JzY19jbGtfZW5hYmxlKCZyc2MtPnBoYW5kbGUsIHJzYy0+cGNsaWVudCwgdHJ1ZSk7 Ci0JaWYgKHJldCkKLQkJZ290byBlbmQ7Ci0KLQlzZXFfcHJpbnRmKHMsICJyc2MgY3VycmVudCBz dGF0ZTolZFxuIiwgcnNjLT5jdXJyZW50X3N0YXRlKTsKLQlzZXFfcHJpbnRmKHMsICJ3cmFwZXIg YmFja29mZiB0aW1lKG5zKTolZFxuIiwKLQkJCQlyc2MtPnRpbWVyX2NvbmZpZy5zdGF0aWNfd2Fr ZXVwX3RpbWVfbnMpOwotCXNlcV9wcmludGYocywgInJzYyBiYWNrb2ZmIHRpbWUobnMpOiVkXG4i LAotCQkJCXJzYy0+dGltZXJfY29uZmlnLnJzY19iYWNrb2ZmX3RpbWVfbnMpOwotCXNlcV9wcmlu dGYocywgInBkYyBiYWNrb2ZmIHRpbWUobnMpOiVkXG4iLAotCQkJCXJzYy0+dGltZXJfY29uZmln LnBkY19iYWNrb2ZmX3RpbWVfbnMpOwotCXNlcV9wcmludGYocywgInJzYyBtb2RlIHRocmVzaG9s ZCB0aW1lKG5zKTolZFxuIiwKLQkJCQlyc2MtPnRpbWVyX2NvbmZpZy5yc2NfbW9kZV90aHJlc2hv bGRfdGltZV9ucyk7Ci0Jc2VxX3ByaW50ZihzLCAicnNjIHRpbWUgc2xvdCAwKG5zKTolZFxuIiwK LQkJCQlyc2MtPnRpbWVyX2NvbmZpZy5yc2NfdGltZV9zbG90XzBfbnMpOwotCXNlcV9wcmludGYo cywgInJzYyB0aW1lIHNsb3QgMShucyk6JWRcbiIsCi0JCQkJcnNjLT50aW1lcl9jb25maWcucnNj X3RpbWVfc2xvdF8xX25zKTsKLQlzZXFfcHJpbnRmKHMsICJmcmFtZSBmcHM6JWQgaml0dGVyX251 bWVyOiVkIGppdHRlcl9kZW5vbTolZCB2dG90YWw6JWQgcHJlZmlsbCBsaW5lczolZFxuIiwKLQkJ CXJzYy0+Y21kX2NvbmZpZy5mcHMsIHJzYy0+Y21kX2NvbmZpZy5qaXR0ZXJfbnVtZXIsCi0JCQly c2MtPmNtZF9jb25maWcuaml0dGVyX2Rlbm9tLAotCQkJcnNjLT5jbWRfY29uZmlnLnZ0b3RhbCwg cnNjLT5jbWRfY29uZmlnLnByZWZpbGxfbGluZXMpOwotCi0Jc2VxX3B1dHMocywgIlxuIik7Ci0K LQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsaWVudCwgJnJzYy0+Y2xpZW50X2xpc3QsIGxpc3QpCi0J CXNlcV9wcmludGYocywgIlx0IGNsaWVudDolcyBzdGF0ZTolZFxuIiwKLQkJCQljbGllbnQtPm5h bWUsIGNsaWVudC0+Y3VycmVudF9zdGF0ZSk7Ci0KLQlpZiAocnNjLT5od19vcHMuZGVidWdfc2hv dykgewotCQlyZXQgPSByc2MtPmh3X29wcy5kZWJ1Z19zaG93KHMsIHJzYyk7Ci0JCWlmIChyZXQp Ci0JCQlwcl9lcnIoImRwdSByc2M6IGh3IGRlYnVnIGZhaWxlZCByZXQ6JWRcbiIsIHJldCk7Ci0J fQotCWRwdV9yc2NfY2xrX2VuYWJsZSgmcnNjLT5waGFuZGxlLCByc2MtPnBjbGllbnQsIGZhbHNl KTsKLQotZW5kOgotCW11dGV4X3VubG9jaygmcnNjLT5jbGllbnRfbG9jayk7Ci0JcmV0dXJuIDA7 Ci19Ci0KLXN0YXRpYyBpbnQgX2RwdV9kZWJ1Z2ZzX3N0YXR1c19vcGVuKHN0cnVjdCBpbm9kZSAq aW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBf ZHB1X2RlYnVnZnNfc3RhdHVzX3Nob3csIGlub2RlLT5pX3ByaXZhdGUpOwotfQotCi1zdGF0aWMg aW50IF9kcHVfZGVidWdmc19tb2RlX2N0cmxfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1 Y3QgZmlsZSAqZmlsZSkKLXsKLQkvKiBub24tc2Vla2FibGUgKi8KLQlmaWxlLT5wcml2YXRlX2Rh dGEgPSBpbm9kZS0+aV9wcml2YXRlOwotCXJldHVybiBub25zZWVrYWJsZV9vcGVuKGlub2RlLCBm aWxlKTsKLX0KLQotc3RhdGljIHNzaXplX3QgX2RwdV9kZWJ1Z2ZzX21vZGVfY3RybF9yZWFkKHN0 cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAotCQkJCXNpemVfdCBjb3VudCwgbG9m Zl90ICpwcG9zKQotewotCXN0cnVjdCBkcHVfcnNjX3ByaXYgKnJzYyA9IGZpbGUtPnByaXZhdGVf ZGF0YTsKLQljaGFyIGJ1ZmZlcltNQVhfQlVGRkVSX1NJWkVdOwotCWludCBibGVuID0gMCwgcmM7 Ci0KLQlpZiAoKnBwb3MgfHwgIXJzYyB8fCAhcnNjLT5od19vcHMubW9kZV9jdHJsKQotCQlyZXR1 cm4gMDsKLQotCW11dGV4X2xvY2soJnJzYy0+Y2xpZW50X2xvY2spOwotCXJjID0gZHB1X3JzY19j bGtfZW5hYmxlKCZyc2MtPnBoYW5kbGUsIHJzYy0+cGNsaWVudCwgdHJ1ZSk7Ci0JaWYgKHJjKQot CQlnb3RvIGVuZDsKLQotCWJsZW4gPSByc2MtPmh3X29wcy5tb2RlX2N0cmwocnNjLCBNT0RFX1JF QUQsIGJ1ZmZlciwKLQkJCQkJCQlNQVhfQlVGRkVSX1NJWkUsIDApOwotCi0JZHB1X3JzY19jbGtf ZW5hYmxlKCZyc2MtPnBoYW5kbGUsIHJzYy0+cGNsaWVudCwgZmFsc2UpOwotCi1lbmQ6Ci0JbXV0 ZXhfdW5sb2NrKCZyc2MtPmNsaWVudF9sb2NrKTsKLQlpZiAoYmxlbiA8PSAwKQotCQlyZXR1cm4g MDsKLQotCWlmIChjb3B5X3RvX3VzZXIoYnVmLCBidWZmZXIsIGJsZW4pKQotCQlyZXR1cm4gLUVG QVVMVDsKLQotCSpwcG9zICs9IGJsZW47Ci0JcmV0dXJuIGJsZW47Ci19Ci0KLXN0YXRpYyBzc2l6 ZV90IF9kcHVfZGVidWdmc19tb2RlX2N0cmxfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCi0JCQlj b25zdCBjaGFyIF9fdXNlciAqcCwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0Jc3Ry dWN0IGRwdV9yc2NfcHJpdiAqcnNjID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWNoYXIgKmlucHV0 OwotCXUzMiBtb2RlX3N0YXRlID0gMDsKLQlpbnQgcmM7Ci0KLQlpZiAoIXJzYyB8fCAhcnNjLT5o d19vcHMubW9kZV9jdHJsIHx8ICFjb3VudCB8fAotCQkJCQljb3VudCA+IE1BWF9DT1VOVF9TSVpF X1NVUFBPUlRFRCkKLQkJcmV0dXJuIDA7Ci0KLQlpbnB1dCA9IGttYWxsb2MoY291bnQgKyAxLCBH RlBfS0VSTkVMKTsKLQlpZiAoIWlucHV0KQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWlmIChjb3B5 X2Zyb21fdXNlcihpbnB1dCwgcCwgY291bnQpKSB7Ci0JCWtmcmVlKGlucHV0KTsKLQkJcmV0dXJu IC1FRkFVTFQ7Ci0JfQotCWlucHV0W2NvdW50XSA9ICdcMCc7Ci0KLQlyYyA9IGtzdHJ0b2ludChp bnB1dCwgMCwgJm1vZGVfc3RhdGUpOwotCWlmIChyYykgewotCQlwcl9lcnIoIm1vZGVfc3RhdGU6 IGludCBjb252ZXJzaW9uIGZhaWxlZCByYzolZFxuIiwgcmMpOwotCQlnb3RvIGVuZDsKLQl9Ci0K LQlwcl9kZWJ1ZygibW9kZV9zdGF0ZTogJWRcbiIsIG1vZGVfc3RhdGUpOwotCW1vZGVfc3RhdGUg Jj0gMHg3OwotCWlmIChtb2RlX3N0YXRlICE9IEFMTF9NT0RFU19ESVNBQkxFRCAmJgotCQkJbW9k ZV9zdGF0ZSAhPSBBTExfTU9ERVNfRU5BQkxFRCAmJgotCQkJbW9kZV9zdGF0ZSAhPSBPTkxZX01P REVfMF9FTkFCTEVEICYmCi0JCQltb2RlX3N0YXRlICE9IE9OTFlfTU9ERV8wXzFfRU5BQkxFRCkg ewotCQlwcl9lcnIoImludmFsaWQgbW9kZTolZCBjb21iaW5hdGlvblxuIiwgbW9kZV9zdGF0ZSk7 Ci0JCWdvdG8gZW5kOwotCX0KLQotCW11dGV4X2xvY2soJnJzYy0+Y2xpZW50X2xvY2spOwotCXJj ID0gZHB1X3JzY19jbGtfZW5hYmxlKCZyc2MtPnBoYW5kbGUsIHJzYy0+cGNsaWVudCwgdHJ1ZSk7 Ci0JaWYgKHJjKQotCQlnb3RvIGNsa19lbmFibGVfZmFpbDsKLQotCXJzYy0+aHdfb3BzLm1vZGVf Y3RybChyc2MsIE1PREVfVVBEQVRFLCBOVUxMLCAwLCBtb2RlX3N0YXRlKTsKLQlkcHVfcnNjX2Ns a19lbmFibGUoJnJzYy0+cGhhbmRsZSwgcnNjLT5wY2xpZW50LCBmYWxzZSk7Ci0KLWNsa19lbmFi bGVfZmFpbDoKLQltdXRleF91bmxvY2soJnJzYy0+Y2xpZW50X2xvY2spOwotZW5kOgotCWtmcmVl KGlucHV0KTsKLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBpbnQgX2RwdV9kZWJ1Z2ZzX3Zz eW5jX21vZGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsK LQkvKiBub24tc2Vla2FibGUgKi8KLQlmaWxlLT5wcml2YXRlX2RhdGEgPSBpbm9kZS0+aV9wcml2 YXRlOwotCXJldHVybiBub25zZWVrYWJsZV9vcGVuKGlub2RlLCBmaWxlKTsKLX0KLQotc3RhdGlj IHNzaXplX3QgX2RwdV9kZWJ1Z2ZzX3ZzeW5jX21vZGVfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwg Y2hhciBfX3VzZXIgKmJ1ZiwKLQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQlz dHJ1Y3QgZHB1X3JzY19wcml2ICpyc2MgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JY2hhciBidWZm ZXJbTUFYX0JVRkZFUl9TSVpFXTsKLQlpbnQgYmxlbiA9IDAsIHJjOwotCi0JaWYgKCpwcG9zIHx8 ICFyc2MgfHwgIXJzYy0+aHdfb3BzLmh3X3ZzeW5jKQotCQlyZXR1cm4gMDsKLQotCW11dGV4X2xv Y2soJnJzYy0+Y2xpZW50X2xvY2spOwotCXJjID0gZHB1X3JzY19jbGtfZW5hYmxlKCZyc2MtPnBo YW5kbGUsIHJzYy0+cGNsaWVudCwgdHJ1ZSk7Ci0JaWYgKHJjKQotCQlnb3RvIGVuZDsKLQotCWJs ZW4gPSByc2MtPmh3X29wcy5od192c3luYyhyc2MsIFZTWU5DX1JFQUQsIGJ1ZmZlciwKLQkJCQkJ CU1BWF9CVUZGRVJfU0laRSwgMCk7Ci0KLQlkcHVfcnNjX2Nsa19lbmFibGUoJnJzYy0+cGhhbmRs ZSwgcnNjLT5wY2xpZW50LCBmYWxzZSk7Ci0KLWVuZDoKLQltdXRleF91bmxvY2soJnJzYy0+Y2xp ZW50X2xvY2spOwotCWlmIChibGVuIDw9IDApCi0JCXJldHVybiAwOwotCi0JaWYgKGNvcHlfdG9f dXNlcihidWYsIGJ1ZmZlciwgYmxlbikpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JKnBwb3MgKz0g YmxlbjsKLQlyZXR1cm4gYmxlbjsKLX0KLQotc3RhdGljIHNzaXplX3QgX2RwdV9kZWJ1Z2ZzX3Zz eW5jX21vZGVfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCi0JCQljb25zdCBjaGFyIF9fdXNlciAq cCwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0Jc3RydWN0IGRwdV9yc2NfcHJpdiAq cnNjID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWNoYXIgKmlucHV0OwotCXUzMiB2c3luY19zdGF0 ZSA9IDA7Ci0JaW50IHJjOwotCi0JaWYgKCFyc2MgfHwgIXJzYy0+aHdfb3BzLmh3X3ZzeW5jIHx8 ICFjb3VudCB8fAotCQkJCWNvdW50ID4gTUFYX0NPVU5UX1NJWkVfU1VQUE9SVEVEKQotCQlyZXR1 cm4gMDsKLQotCWlucHV0ID0ga21hbGxvYyhjb3VudCArIDEsIEdGUF9LRVJORUwpOwotCWlmICgh aW5wdXQpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKGlucHV0LCBw LCBjb3VudCkpIHsKLQkJa2ZyZWUoaW5wdXQpOwotCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0JaW5w dXRbY291bnRdID0gJ1wwJzsKLQotCXJjID0ga3N0cnRvaW50KGlucHV0LCAwLCAmdnN5bmNfc3Rh dGUpOwotCWlmIChyYykgewotCQlwcl9lcnIoInZzeW5jX3N0YXRlOiBpbnQgY29udmVyc2lvbiBm YWlsZWQgcmM6JWRcbiIsIHJjKTsKLQkJZ290byBlbmQ7Ci0JfQotCi0JcHJfZGVidWcoInZzeW5j X3N0YXRlOiAlZFxuIiwgdnN5bmNfc3RhdGUpOwotCXZzeW5jX3N0YXRlICY9IDB4NzsKLQotCW11 dGV4X2xvY2soJnJzYy0+Y2xpZW50X2xvY2spOwotCXJjID0gZHB1X3JzY19jbGtfZW5hYmxlKCZy c2MtPnBoYW5kbGUsIHJzYy0+cGNsaWVudCwgdHJ1ZSk7Ci0JaWYgKHJjKQotCQlnb3RvIGNsa19l bl9mYWlsOwotCi0JaWYgKHZzeW5jX3N0YXRlKQotCQlyc2MtPmh3X29wcy5od192c3luYyhyc2Ms IFZTWU5DX0VOQUJMRSwgTlVMTCwKLQkJCQkJCQkwLCB2c3luY19zdGF0ZSAtIDEpOwotCWVsc2UK LQkJcnNjLT5od19vcHMuaHdfdnN5bmMocnNjLCBWU1lOQ19ESVNBQkxFLCBOVUxMLCAwLCAwKTsK LQotCWRwdV9yc2NfY2xrX2VuYWJsZSgmcnNjLT5waGFuZGxlLCByc2MtPnBjbGllbnQsIGZhbHNl KTsKLQotY2xrX2VuX2ZhaWw6Ci0JbXV0ZXhfdW5sb2NrKCZyc2MtPmNsaWVudF9sb2NrKTsKLWVu ZDoKLQlrZnJlZShpbnB1dCk7Ci0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgY29uc3Qgc3Ry dWN0IGZpbGVfb3BlcmF0aW9ucyBkZWJ1Z2ZzX3N0YXR1c19mb3BzID0gewotCS5vcGVuID0JCV9k cHVfZGVidWdmc19zdGF0dXNfb3BlbiwKLQkucmVhZCA9CQlzZXFfcmVhZCwKLQkubGxzZWVrID0J c2VxX2xzZWVrLAotCS5yZWxlYXNlID0Jc2luZ2xlX3JlbGVhc2UsCi19OwotCi1zdGF0aWMgY29u c3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtb2RlX2NvbnRyb2xfZm9wcyA9IHsKLQkub3BlbiA9 CQlfZHB1X2RlYnVnZnNfbW9kZV9jdHJsX29wZW4sCi0JLnJlYWQgPQkJX2RwdV9kZWJ1Z2ZzX21v ZGVfY3RybF9yZWFkLAotCS53cml0ZSA9CV9kcHVfZGVidWdmc19tb2RlX2N0cmxfd3JpdGUsCi19 OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2c3luY19zdGF0dXNfZm9w cyA9IHsKLQkub3BlbiA9CQlfZHB1X2RlYnVnZnNfdnN5bmNfbW9kZV9vcGVuLAotCS5yZWFkID0J CV9kcHVfZGVidWdmc192c3luY19tb2RlX3JlYWQsCi0JLndyaXRlID0JX2RwdV9kZWJ1Z2ZzX3Zz eW5jX21vZGVfd3JpdGUsCi19OwotCi1zdGF0aWMgdm9pZCBfZHB1X3JzY19pbml0X2RlYnVnZnMo c3RydWN0IGRwdV9yc2NfcHJpdiAqcnNjLCBjaGFyICpuYW1lKQotewotCXJzYy0+ZGVidWdmc19y b290ID0gZGVidWdmc19jcmVhdGVfZGlyKG5hbWUsIE5VTEwpOwotCWlmICghcnNjLT5kZWJ1Z2Zz X3Jvb3QpCi0JCXJldHVybjsKLQotCS8qIGRvbid0IGVycm9yIGNoZWNrIHRoZXNlICovCi0JZGVi dWdmc19jcmVhdGVfZmlsZSgic3RhdHVzIiwgMDQwMCwgcnNjLT5kZWJ1Z2ZzX3Jvb3QsIHJzYywK LQkJCQkJCQkmZGVidWdmc19zdGF0dXNfZm9wcyk7Ci0JZGVidWdmc19jcmVhdGVfZmlsZSgibW9k ZV9jb250cm9sIiwgMDYwMCwgcnNjLT5kZWJ1Z2ZzX3Jvb3QsIHJzYywKLQkJCQkJCQkmbW9kZV9j b250cm9sX2ZvcHMpOwotCWRlYnVnZnNfY3JlYXRlX2ZpbGUoInZzeW5jX21vZGUiLCAwNjAwLCBy c2MtPmRlYnVnZnNfcm9vdCwgcnNjLAotCQkJCQkJCSZ2c3luY19zdGF0dXNfZm9wcyk7Ci0JZGVi dWdmc19jcmVhdGVfeDMyKCJkZWJ1Z19tb2RlIiwgMDYwMCwgcnNjLT5kZWJ1Z2ZzX3Jvb3QsCi0J CQkJCQkJJnJzYy0+ZGVidWdfbW9kZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRwdV9yc2NfZGVpbml0 KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCi0JCQkJCXN0cnVjdCBkcHVfcnNjX3ByaXYg KnJzYykKLXsKLQlpZiAoIXJzYykKLQkJcmV0dXJuOwotCi0JaWYgKHJzYy0+cGNsaWVudCkKLQkJ ZHB1X3JzY19jbGtfZW5hYmxlKCZyc2MtPnBoYW5kbGUsIHJzYy0+cGNsaWVudCwgZmFsc2UpOwot CWlmIChyc2MtPmZzKQotCQlkZXZtX3JlZ3VsYXRvcl9wdXQocnNjLT5mcyk7Ci0JaWYgKHJzYy0+ d3JhcHBlcl9pby5iYXNlKQotCQltc21fZHNzX2lvdW5tYXAoJnJzYy0+d3JhcHBlcl9pbyk7Ci0J aWYgKHJzYy0+ZHJ2X2lvLmJhc2UpCi0JCW1zbV9kc3NfaW91bm1hcCgmcnNjLT5kcnZfaW8pOwot CWlmIChyc2MtPmRpc3BfcnNjKQotCQlycG1oX3JlbGVhc2UocnNjLT5kaXNwX3JzYyk7Ci0JaWYg KHJzYy0+cGNsaWVudCkKLQkJZHB1X3Bvd2VyX2NsaWVudF9kZXN0cm95KCZyc2MtPnBoYW5kbGUs IHJzYy0+cGNsaWVudCk7Ci0KLQlkcHVfcG93ZXJfcmVzb3VyY2VfZGVpbml0KHBkZXYsICZyc2Mt PnBoYW5kbGUpOwotCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShyc2MtPmRlYnVnZnNfcm9vdCk7 Ci0Ja2ZyZWUocnNjKTsKLX0KLQotLyoqCi0gKiBkcHVfcnNjX2JpbmQgLSBiaW5kIHJzYyBkZXZp Y2Ugd2l0aCBjb250cm9sbGluZyBkZXZpY2UKLSAqIEBkZXY6ICAgICAgICBQb2ludGVyIHRvIGJh c2Ugb2YgcGxhdGZvcm0gZGV2aWNlCi0gKiBAbWFzdGVyOiAgICAgUG9pbnRlciB0byBjb250YWlu ZXIgb2YgZHJtIGRldmljZQotICogQGRhdGE6ICAgICAgIFBvaW50ZXIgdG8gcHJpdmF0ZSBkYXRh Ci0gKiBSZXR1cm5zOiAgICAgWmVybyBvbiBzdWNjZXNzCi0gKi8KLXN0YXRpYyBpbnQgZHB1X3Jz Y19iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJc3RydWN0IGRldmljZSAqbWFzdGVyLAotCQl2 b2lkICpkYXRhKQotewotCXN0cnVjdCBkcHVfcnNjX3ByaXYgKnJzYzsKLQlzdHJ1Y3QgZHJtX2Rl dmljZSAqZHJtOwotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9k ZXZpY2UoZGV2KTsKLQotCWlmICghZGV2IHx8ICFwZGV2IHx8ICFtYXN0ZXIpIHsKLQkJcHJfZXJy KCJpbnZhbGlkIHBhcmFtKHMpLCBkZXYgJXBLLCBwZGV2ICVwSywgbWFzdGVyICVwS1xuIiwKLQkJ CQlkZXYsIHBkZXYsIG1hc3Rlcik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWRybSA9IGRl dl9nZXRfZHJ2ZGF0YShtYXN0ZXIpOwotCXJzYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYp OwotCWlmICghZHJtIHx8ICFyc2MpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIHBhcmFtKHMpLCBkcm0g JXBLLCByc2MgJXBLXG4iLAotCQkJCWRybSwgcnNjKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQot Ci0JbXV0ZXhfbG9jaygmcnNjLT5jbGllbnRfbG9jayk7Ci0JcnNjLT5tYXN0ZXJfZHJtID0gZHJt OwotCW11dGV4X3VubG9jaygmcnNjLT5jbGllbnRfbG9jayk7Ci0KLQlkcHVfZGJnX3JlZ19yZWdp c3Rlcl9iYXNlKERQVV9SU0NfRFJWX0RCR19OQU1FLCByc2MtPmRydl9pby5iYXNlLAotCQkJCQkJ CXJzYy0+ZHJ2X2lvLmxlbik7Ci0JZHB1X2RiZ19yZWdfcmVnaXN0ZXJfYmFzZShEUFVfUlNDX1dS QVBQRVJfREJHX05BTUUsCi0JCQkJcnNjLT53cmFwcGVyX2lvLmJhc2UsIHJzYy0+d3JhcHBlcl9p by5sZW4pOwotCXJldHVybiAwOwotfQotCi0vKioKLSAqIGRwdV9yc2NfdW5iaW5kIC0gdW5iaW5k IHJzYyBmcm9tIGNvbnRyb2xsaW5nIGRldmljZQotICogQGRldjogICAgICAgIFBvaW50ZXIgdG8g YmFzZSBvZiBwbGF0Zm9ybSBkZXZpY2UKLSAqIEBtYXN0ZXI6ICAgICBQb2ludGVyIHRvIGNvbnRh aW5lciBvZiBkcm0gZGV2aWNlCi0gKiBAZGF0YTogICAgICAgUG9pbnRlciB0byBwcml2YXRlIGRh dGEKLSAqLwotc3RhdGljIHZvaWQgZHB1X3JzY191bmJpbmQoc3RydWN0IGRldmljZSAqZGV2LAot CQlzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGRwdV9yc2Nf cHJpdiAqcnNjOwotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9k ZXZpY2UoZGV2KTsKLQotCWlmICghZGV2IHx8ICFwZGV2KSB7Ci0JCXByX2VycigiaW52YWxpZCBw YXJhbShzKVxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlyc2MgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0 YShwZGV2KTsKLQlpZiAoIXJzYykgewotCQlwcl9lcnIoImludmFsaWQgZGlzcGxheSByc2NcbiIp OwotCQlyZXR1cm47Ci0JfQotCi0JbXV0ZXhfbG9jaygmcnNjLT5jbGllbnRfbG9jayk7Ci0JcnNj LT5tYXN0ZXJfZHJtID0gTlVMTDsKLQltdXRleF91bmxvY2soJnJzYy0+Y2xpZW50X2xvY2spOwot fQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNvbXBvbmVudF9vcHMgZHB1X3JzY19jb21wX29wcyA9 IHsKLQkuYmluZCA9IGRwdV9yc2NfYmluZCwKLQkudW5iaW5kID0gZHB1X3JzY191bmJpbmQsCi19 OwotCi1zdGF0aWMgaW50IGRwdV9yc2NfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl dikKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCBkcHVfcnNjX3ByaXYgKnJzYzsKLQlzdGF0aWMgaW50 IGNvdW50ZXI7Ci0JY2hhciAgbmFtZVtNQVhfUlNDX0NMSUVOVF9OQU1FX0xFTl07Ci0KLQlyc2Mg PSBremFsbG9jKHNpemVvZigqcnNjKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFyc2MpIHsKLQkJcmV0 ID0gLUVOT01FTTsKLQkJZ290byByc2NfYWxsb2NfZmFpbDsKLQl9Ci0KLQlwbGF0Zm9ybV9zZXRf ZHJ2ZGF0YShwZGV2LCByc2MpOwotCW9mX3Byb3BlcnR5X3JlYWRfdTMyKHBkZXYtPmRldi5vZl9u b2RlLCAicWNvbSxkcHUtcnNjLXZlcnNpb24iLAotCQkJCQkJCQkmcnNjLT52ZXJzaW9uKTsKLQot CXJldCA9IGRwdV9wb3dlcl9yZXNvdXJjZV9pbml0KHBkZXYsICZyc2MtPnBoYW5kbGUpOwotCWlm IChyZXQpIHsKLQkJcHJfZXJyKCJkcHUgcnNjOnBvd2VyIHJlc291cmNlIGluaXQgZmFpbGVkIHJl dDolZFxuIiwgcmV0KTsKLQkJZ290byBkcHVfcnNjX2ZhaWw7Ci0JfQotCi0JcnNjLT5wY2xpZW50 ID0gZHB1X3Bvd2VyX2NsaWVudF9jcmVhdGUoJnJzYy0+cGhhbmRsZSwgInJzYyIpOwotCWlmIChJ U19FUlJfT1JfTlVMTChyc2MtPnBjbGllbnQpKSB7Ci0JCXJldCA9IFBUUl9FUlIocnNjLT5wY2xp ZW50KTsKLQkJcnNjLT5wY2xpZW50ID0gTlVMTDsKLQkJcHJfZXJyKCJkcHUgcnNjOnBvd2VyIGNs aWVudCBjcmVhdGUgZmFpbGVkIHJldDolZFxuIiwgcmV0KTsKLQkJZ290byBkcHVfcnNjX2ZhaWw7 Ci0JfQotCi0JLyoqCi0JICogZHB1IHJzYyBzaG91bGQgYWx3YXlzIHZvdGUgdGhyb3VnaCBlbmFi bGUgcGF0aCwgc2xlZXAgdm90ZSBpcwotCSAqIHNldCB0byAiMCIgYnkgZGVmYXVsdC4KLQkgKi8K LQlkcHVfcG93ZXJfZGF0YV9idXNfc3RhdGVfdXBkYXRlKCZyc2MtPnBoYW5kbGUsIHRydWUpOwot Ci0JcnNjLT5kaXNwX3JzYyA9IHJwbWhfZ2V0X2J5bmFtZShwZGV2LCAiZGlzcF9yc2MiKTsKLQlp ZiAoSVNfRVJSX09SX05VTEwocnNjLT5kaXNwX3JzYykpIHsKLQkJcmV0ID0gUFRSX0VSUihyc2Mt PmRpc3BfcnNjKTsKLQkJcnNjLT5kaXNwX3JzYyA9IE5VTEw7Ci0JCXByX2VycigiZHB1IHJzYzpn ZXQgZGlzcGxheSByc2MgZmFpbGVkIHJldDolZFxuIiwgcmV0KTsKLQkJZ290byBkcHVfcnNjX2Zh aWw7Ci0JfQotCi0JcmV0ID0gbXNtX2Rzc19pb3JlbWFwX2J5bmFtZShwZGV2LCAmcnNjLT53cmFw cGVyX2lvLCAid3JhcHBlciIpOwotCWlmIChyZXQpIHsKLQkJcHJfZXJyKCJkcHUgcnNjOiB3cmFw cGVyIGlvIGRhdGEgbWFwcGluZyBmYWlsZWQgcmV0PSVkXG4iLCByZXQpOwotCQlnb3RvIGRwdV9y c2NfZmFpbDsKLQl9Ci0KLQlyZXQgPSBtc21fZHNzX2lvcmVtYXBfYnluYW1lKHBkZXYsICZyc2Mt PmRydl9pbywgImRydiIpOwotCWlmIChyZXQpIHsKLQkJcHJfZXJyKCJkcHUgcnNjOiBkcnYgaW8g ZGF0YSBtYXBwaW5nIGZhaWxlZCByZXQ6JWRcbiIsIHJldCk7Ci0JCWdvdG8gZHB1X3JzY19mYWls OwotCX0KLQotCXJzYy0+ZnMgPSBkZXZtX3JlZ3VsYXRvcl9nZXQoJnBkZXYtPmRldiwgInZkZCIp OwotCWlmIChJU19FUlJfT1JfTlVMTChyc2MtPmZzKSkgewotCQlyc2MtPmZzID0gTlVMTDsKLQkJ cHJfZXJyKCJ1bmFibGUgdG8gZ2V0IHJlZ3VsYXRvclxuIik7Ci0JCWdvdG8gZHB1X3JzY19mYWls OwotCX0KLQotCXJldCA9IGRwdV9yc2NfaHdfcmVnaXN0ZXIocnNjKTsKLQlpZiAocmV0KSB7Ci0J CXByX2VycigiZHB1IHJzYzogaHcgcmVnaXN0ZXIgZmFpbGVkIHJldDolZFxuIiwgcmV0KTsKLQkJ Z290byBkcHVfcnNjX2ZhaWw7Ci0JfQotCi0JaWYgKGRwdV9yc2NfY2xrX2VuYWJsZSgmcnNjLT5w aGFuZGxlLCByc2MtPnBjbGllbnQsIHRydWUpKSB7Ci0JCXByX2VycigiZmFpbGVkIHRvIGVuYWJs ZSBkcHUgcnNjIHBvd2VyIHJlc291cmNlc1xuIik7Ci0JCWdvdG8gZHB1X3JzY19mYWlsOwotCX0K LQotCWlmIChkcHVfcnNjX3RpbWVyX2NhbGN1bGF0ZShyc2MsIE5VTEwpKQotCQlnb3RvIGRwdV9y c2NfZmFpbDsKLQotCWRwdV9yc2NfY2xrX2VuYWJsZSgmcnNjLT5waGFuZGxlLCByc2MtPnBjbGll bnQsIGZhbHNlKTsKLQotCUlOSVRfTElTVF9IRUFEKCZyc2MtPmNsaWVudF9saXN0KTsKLQlJTklU X0xJU1RfSEVBRCgmcnNjLT5ldmVudF9saXN0KTsKLQltdXRleF9pbml0KCZyc2MtPmNsaWVudF9s b2NrKTsKLQotCXByX2luZm8oImRwdSByc2MgaW5kZXg6JWQgcHJvYmVkIHN1Y2Nlc3NmdWxseVxu IiwKLQkJCQlEUFVfUlNDX0lOREVYICsgY291bnRlcik7Ci0KLQlyc2NfcHJ2X2xpc3RbRFBVX1JT Q19JTkRFWCArIGNvdW50ZXJdID0gcnNjOwotCXNucHJpbnRmKG5hbWUsIE1BWF9SU0NfQ0xJRU5U X05BTUVfTEVOLCAiJXMlZCIsICJkcHVfcnNjIiwgY291bnRlcik7Ci0JX2RwdV9yc2NfaW5pdF9k ZWJ1Z2ZzKHJzYywgbmFtZSk7Ci0JY291bnRlcisrOwotCi0JcmV0ID0gY29tcG9uZW50X2FkZCgm cGRldi0+ZGV2LCAmZHB1X3JzY19jb21wX29wcyk7Ci0JaWYgKHJldCkKLQkJcHJfZGVidWcoImNv bXBvbmVudCBhZGQgZmFpbGVkLCByZXQ9JWRcbiIsIHJldCk7Ci0JcmV0ID0gMDsKLQotCXJldHVy biByZXQ7Ci0KLWRwdV9yc2NfZmFpbDoKLQlkcHVfcnNjX2RlaW5pdChwZGV2LCByc2MpOwotcnNj X2FsbG9jX2ZhaWw6Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBkcHVfcnNjX3JlbW92 ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXN0cnVjdCBkcHVfcnNjX3ByaXYg KnJzYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCi0JZHB1X3JzY19kZWluaXQocGRl diwgcnNjKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2Vf aWQgZHRfbWF0Y2hbXSA9IHsKLQl7IC5jb21wYXRpYmxlID0gInFjb20sZHB1LXJzYyJ9LAotCXt9 Ci19OwotCi1NT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBkdF9tYXRjaCk7Ci0KLXN0YXRpYyBzdHJ1 Y3QgcGxhdGZvcm1fZHJpdmVyIGRwdV9yc2NfcGxhdGZvcm1fZHJpdmVyID0gewotCS5wcm9iZSAg ICAgID0gZHB1X3JzY19wcm9iZSwKLQkucmVtb3ZlICAgICA9IGRwdV9yc2NfcmVtb3ZlLAotCS5k cml2ZXIgICAgID0gewotCQkubmFtZSAgID0gImRwdV9yc2MiLAotCQkub2ZfbWF0Y2hfdGFibGUg PSBkdF9tYXRjaCwKLQl9LAotfTsKLQotc3RhdGljIGludCBfX2luaXQgZHB1X3JzY19yZWdpc3Rl cih2b2lkKQotewotCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmRwdV9yc2NfcGxh dGZvcm1fZHJpdmVyKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGRwdV9yc2NfdW5yZWdpc3Rl cih2b2lkKQotewotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZkcHVfcnNjX3BsYXRmb3Jt X2RyaXZlcik7Ci19Ci0KLW1vZHVsZV9pbml0KGRwdV9yc2NfcmVnaXN0ZXIpOwotbW9kdWxlX2V4 aXQoZHB1X3JzY191bnJlZ2lzdGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20v ZHB1X3JzY19ody5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcHVfcnNjX2h3LmMKZGVsZXRlZCBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhMzc5ZGUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL21zbS9kcHVfcnNjX2h3LmMKKysrIC9kZXYvbnVsbApAQCAtMSw4MTggKzAsMCBAQAotLyog Q29weXJpZ2h0IChjKSAyMDE2LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRz IHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVy c2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoK LSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICovCi0KLSNkZWZpbmUgcHJfZm10KGZtdCkJIltk cHVfcnNjX2h3OiVzOiVkXTogIiBmbXQsIF9fZnVuY19fLCBfX0xJTkVfXwotCi0jaW5jbHVkZSA8 bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgotI2luY2x1ZGUgPGxp bnV4L2RlbGF5Lmg+Ci0KLSNpbmNsdWRlICJkcHVfcnNjX3ByaXYuaCIKLSNpbmNsdWRlICJkcHVf ZGJnLmgiCi0KLS8qIGRpc3BsYXkgcnNjIG9mZnNldCAqLwotI2RlZmluZSBEUFVfUlNDQ19QRENf U0VRX1NUQVJUX0FERFJfUkVHX09GRlNFVF9EUlYwCTB4MDIwCi0jZGVmaW5lIERQVV9SU0NDX1BE Q19NQVRDSF9WQUxVRV9MT19SRUdfT0ZGU0VUX0RSVjAJMHgwMjQKLSNkZWZpbmUgRFBVX1JTQ0Nf UERDX01BVENIX1ZBTFVFX0hJX1JFR19PRkZTRVRfRFJWMAkweDAyOAotI2RlZmluZSBEUFVfUlND Q19QRENfU0xBVkVfSURfRFJWMAkJCTB4MDJjCi0jZGVmaW5lIERQVV9SU0NDX1NFUV9QUk9HUkFN X0NPVU5URVIJCQkweDQwOAotI2RlZmluZSBEUFVfUlNDQ19TRVFfQ0ZHX0JSX0FERFJfMF9EUlYw CQkJMHg0MTAKLSNkZWZpbmUgRFBVX1JTQ0NfU0VRX0NGR19CUl9BRERSXzFfRFJWMAkJCTB4NDE0 Ci0jZGVmaW5lIERQVV9SU0NDX1NFUV9NRU1fMF9EUlYwCQkJCTB4NjAwCi0jZGVmaW5lIERQVV9S U0NDX1NPTFZFUl9PVkVSUklERV9DVFJMX0RSVjAJCTB4YzE0Ci0jZGVmaW5lIERQVV9SU0NDX0VS Uk9SX0lSUV9TVEFUVVNfRFJWMAkJCTB4MGQwCi0jZGVmaW5lIERQVV9SU0NDX1NFUV9CVVNZX0RS VjAJCQkJMHg0MDQKLSNkZWZpbmUgRFBVX1JTQ0NfU09MVkVSX1NUQVRVUzBfRFJWMAkJCTB4YzI0 Ci0jZGVmaW5lIERQVV9SU0NDX1NPTFZFUl9TVEFUVVMxX0RSVjAJCQkweGMyOAotI2RlZmluZSBE UFVfUlNDQ19TT0xWRVJfU1RBVFVTMl9EUlYwCQkJMHhjMmMKLSNkZWZpbmUgRFBVX1JTQ0NfQU1D X1RDU19NT0RFX0lSUV9TVEFUVVNfRFJWMAkJMHgxYzAwCi0KLSNkZWZpbmUgRFBVX1JTQ0NfU09G VF9XQUtFVVBfVElNRV9MT19EUlYwCQkweGMwNAotI2RlZmluZSBEUFVfUlNDQ19TT0ZUX1dBS0VV UF9USU1FX0hJX0RSVjAJCTB4YzA4Ci0jZGVmaW5lIERQVV9SU0NDX01BWF9JRExFX0RVUkFUSU9O X0RSVjAJCQkweGMwYwotI2RlZmluZSBEUFVfUlNDX1NPTFZFUl9USU1FX1NMT1RfVEFCTEVfMF9E UlYwCQkweDEwMDAKLSNkZWZpbmUgRFBVX1JTQ19TT0xWRVJfVElNRV9TTE9UX1RBQkxFXzFfRFJW MAkJMHgxMDA0Ci0jZGVmaW5lIERQVV9SU0NfU09MVkVSX1RJTUVfU0xPVF9UQUJMRV8yX0RSVjAJ CTB4MTAwOAotI2RlZmluZSBEUFVfUlNDX1NPTFZFUl9USU1FX1NMT1RfVEFCTEVfM19EUlYwCQkw eDEwMGMKLQotI2RlZmluZSBEUFVfUlNDX1NPTFZFUl9TT0xWRVJfTU9ERVNfRU5BQkxFRF9EUlYw CTB4YzIwCi0jZGVmaW5lIERQVV9SU0NfU09MVkVSX01PREVfUFJJX1RBQkxFX1NMT1QwX1BSSTBf RFJWMAkweDEwODAKLSNkZWZpbmUgRFBVX1JTQ19TT0xWRVJfTU9ERV9QUklfVEFCTEVfU0xPVDFf UFJJMF9EUlYwCTB4MTEwMAotI2RlZmluZSBEUFVfUlNDX1NPTFZFUl9NT0RFX1BSSV9UQUJMRV9T TE9UMV9QUkkzX0RSVjAJMHgxMTBjCi0jZGVmaW5lIERQVV9SU0NfU09MVkVSX01PREVfUFJJX1RB QkxFX1NMT1QyX1BSSTBfRFJWMAkweDExODAKLSNkZWZpbmUgRFBVX1JTQ19TT0xWRVJfTU9ERV9Q UklfVEFCTEVfU0xPVDJfUFJJM19EUlYwCTB4MTE4YwotCi0jZGVmaW5lIERQVV9SU0NfU09MVkVS X09WRVJSSURFX01PREVfRFJWMAkJMHhjMTgKLSNkZWZpbmUgRFBVX1JTQ19TT0xWRVJfT1ZFUlJJ REVfQ1RSTF9EUlYwCQkweGMxNAotI2RlZmluZSBEUFVfUlNDX1RJTUVSU19DT05TSURFUkVEX0RS VjAJCQkweGMwMAotI2RlZmluZSBEUFVfUlNDX1NPTFZFUl9PVkVSUklERV9JRExFX1RJTUVfRFJW MAkJMHhjMWMKLQotI2RlZmluZSBEUFVfUlNDX1NPTFZFUl9NT0RFX1BBUk0wX0RSVjBfTU9ERTAJ CTB4YzMwCi0jZGVmaW5lIERQVV9SU0NfU09MVkVSX01PREVfUEFSTTFfRFJWMF9NT0RFMAkJMHhj MzQKLSNkZWZpbmUgRFBVX1JTQ19TT0xWRVJfTU9ERV9QQVJNMl9EUlYwX01PREUwCQkweGMzOAot I2RlZmluZSBEUFVfUlNDX1NPTFZFUl9NT0RFX1BBUk0zX0RSVjBfTU9ERTAJCTB4YzQwCi0KLSNk ZWZpbmUgRFBVX1JTQ19TT0xWRVJfTU9ERV9QQVJNMF9EUlYwX01PREUxCQkweGM0YwotI2RlZmlu ZSBEUFVfUlNDX1NPTFZFUl9NT0RFX1BBUk0xX0RSVjBfTU9ERTEJCTB4YzUwCi0jZGVmaW5lIERQ VV9SU0NfU09MVkVSX01PREVfUEFSTTJfRFJWMF9NT0RFMQkJMHhjNTQKLSNkZWZpbmUgRFBVX1JT Q19TT0xWRVJfTU9ERV9QQVJNM19EUlYwX01PREUxCQkweGM1YwotCi0jZGVmaW5lIERQVV9SU0Nf U09MVkVSX01PREVfUEFSTTBfRFJWMF9NT0RFMgkJMHhjNjgKLSNkZWZpbmUgRFBVX1JTQ19TT0xW RVJfTU9ERV9QQVJNMV9EUlYwX01PREUyCQkweGM2YwotI2RlZmluZSBEUFVfUlNDX1NPTFZFUl9N T0RFX1BBUk0yX0RSVjBfTU9ERTIJCTB4YzcwCi0jZGVmaW5lIERQVV9SU0NfU09MVkVSX01PREVf UEFSTTNfRFJWMF9NT0RFMgkJMHhjNzgKLQotI2RlZmluZSBEUFVfUlNDQ19UQ1NfRFJWMF9DT05U Uk9MCQkJMHgxYzE0Ci0KLSNkZWZpbmUgRFBVX1JTQ0NfV1JBUFBFUl9DVFJMCQkJCTB4MDAwCi0j ZGVmaW5lIERQVV9SU0NDX1dSQVBQRVJfT1ZFUlJJREVfQ1RSTAkJCTB4MDA0Ci0jZGVmaW5lIERQ VV9SU0NDX1dSQVBQRVJfU1RBVElDX1dBS0VVUF8wCQkweDAwOAotI2RlZmluZSBEUFVfUlNDQ19X UkFQUEVSX1JTQ0NfTU9ERV9USFJFU0hPTEQJCTB4MDBjCi0jZGVmaW5lIERQVV9SU0NDX1dSQVBQ RVJfREVCVUdfQlVTCQkJMHgwMTAKLSNkZWZpbmUgRFBVX1JTQ0NfV1JBUFBFUl9WU1lOQ19USU1F U1RBTVAwCQkweDAxOAotI2RlZmluZSBEUFVfUlNDQ19XUkFQUEVSX1ZTWU5DX1RJTUVTVEFNUDEJ CTB4MDFjCi0jZGVmaW5lIERQVV9SU0NDX1NQQVJFX1BXUl9FVkVOVAkJCTB4MDIwCi0jZGVmaW5l IERQVV9SU0NDX1BXUl9DVFJMCQkJCTB4MDI0Ci0KLS8qIHF0aW1lciBvZmZzZXQgKi8KLSNkZWZp bmUgRFBVX1JTQ0NfUVRNUl9BQ19IV19GUkFNRV9TRUxfMQkJCTB4MUZFMAotI2RlZmluZSBEUFVf UlNDQ19RVE1SX0FDX0hXX0ZSQU1FX1NFTF8yCQkJMHgxRkYwCi0jZGVmaW5lIERQVV9SU0NDX1FU TVJfQUNfQ05UQUNSMF9GRzAJCQkweDEwNDAKLSNkZWZpbmUgRFBVX1JTQ0NfUVRNUl9BQ19DTlRB Q1IxX0ZHMAkJCTB4MTA0NAotI2RlZmluZSBEUFVfUlNDQ19GMF9RVE1SX1YxX0NOVFBfQ1ZBTF9M TwkJMHgyMDIwCi0jZGVmaW5lIERQVV9SU0NDX0YwX1FUTVJfVjFfQ05UUF9DVkFMX0hJCQkweDIw MjQKLSNkZWZpbmUgRFBVX1JTQ0NfRjFfUVRNUl9WMV9DTlRQX0NWQUxfTE8JCTB4MzAyMAotI2Rl ZmluZSBEUFVfUlNDQ19GMV9RVE1SX1YxX0NOVFBfQ1ZBTF9ISQkJMHgzMDI0Ci0jZGVmaW5lIERQ VV9SU0NDX0YwX1FUTVJfVjFfQ05UUF9DVEwJCQkweDIwMkMKLSNkZWZpbmUgRFBVX1JTQ0NfRjFf UVRNUl9WMV9DTlRQX0NUTAkJCTB4MzAyQwotCi0jZGVmaW5lIE1BWF9DSEVDS19MT09QUwkJCTUw MAotI2RlZmluZSBQT1dFUl9DVFJMX0JJVF8xMgkJMTIKLQotc3RhdGljIHZvaWQgcnNjX2V2ZW50 X3RyaWdnZXIoc3RydWN0IGRwdV9yc2NfcHJpdiAqcnNjLCB1aW50MzJfdCBldmVudF90eXBlKQot ewotCXN0cnVjdCBkcHVfcnNjX2V2ZW50ICpldmVudDsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnko ZXZlbnQsICZyc2MtPmV2ZW50X2xpc3QsIGxpc3QpCi0JCWlmIChldmVudC0+ZXZlbnRfdHlwZSAm IGV2ZW50X3R5cGUpCi0JCQlldmVudC0+Y2JfZnVuYyhldmVudF90eXBlLCBldmVudC0+dXNyKTsK LX0KLQotc3RhdGljIGludCByc2NfaHdfcXRpbWVyX2luaXQoc3RydWN0IGRwdV9yc2NfcHJpdiAq cnNjKQotewotCXByX2RlYnVnKCJyc2MgaGFyZHdhcmUgcXRpbWVyIGluaXRcbiIpOwotCi0JZHNz X3JlZ193KCZyc2MtPndyYXBwZXJfaW8sIERQVV9SU0NDX1FUTVJfQUNfSFdfRlJBTUVfU0VMXzEs Ci0JCQkJCQkweGZmZmZmZmZmLCByc2MtPmRlYnVnX21vZGUpOwotCWRzc19yZWdfdygmcnNjLT53 cmFwcGVyX2lvLCBEUFVfUlNDQ19RVE1SX0FDX0hXX0ZSQU1FX1NFTF8yLAotCQkJCQkJMHhmZmZm ZmZmZiwgcnNjLT5kZWJ1Z19tb2RlKTsKLQotCWRzc19yZWdfdygmcnNjLT53cmFwcGVyX2lvLCBE UFVfUlNDQ19RVE1SX0FDX0NOVEFDUjBfRkcwLAotCQkJCQkJMHgxLCByc2MtPmRlYnVnX21vZGUp OwotCWRzc19yZWdfdygmcnNjLT53cmFwcGVyX2lvLCBEUFVfUlNDQ19RVE1SX0FDX0NOVEFDUjFf RkcwLAotCQkJCQkJMHgxLCByc2MtPmRlYnVnX21vZGUpOwotCi0JZHNzX3JlZ193KCZyc2MtPndy YXBwZXJfaW8sIERQVV9SU0NDX0YwX1FUTVJfVjFfQ05UUF9DVkFMX0xPLAotCQkJCQkJMHhmZmZm ZmZmZiwgcnNjLT5kZWJ1Z19tb2RlKTsKLQlkc3NfcmVnX3coJnJzYy0+d3JhcHBlcl9pbywgRFBV X1JTQ0NfRjBfUVRNUl9WMV9DTlRQX0NWQUxfSEksCi0JCQkJCQkweGZmZmZmZmZmLCByc2MtPmRl YnVnX21vZGUpOwotCWRzc19yZWdfdygmcnNjLT53cmFwcGVyX2lvLCBEUFVfUlNDQ19GMV9RVE1S X1YxX0NOVFBfQ1ZBTF9MTywKLQkJCQkJCTB4ZmZmZmZmZmYsIHJzYy0+ZGVidWdfbW9kZSk7Ci0J ZHNzX3JlZ193KCZyc2MtPndyYXBwZXJfaW8sIERQVV9SU0NDX0YxX1FUTVJfVjFfQ05UUF9DVkFM X0hJLAotCQkJCQkJMHhmZmZmZmZmZiwgcnNjLT5kZWJ1Z19tb2RlKTsKLQotCWRzc19yZWdfdygm cnNjLT53cmFwcGVyX2lvLCBEUFVfUlNDQ19GMF9RVE1SX1YxX0NOVFBfQ1RMLAotCQkJCQkJMHgx LCByc2MtPmRlYnVnX21vZGUpOwotCWRzc19yZWdfdygmcnNjLT53cmFwcGVyX2lvLCBEUFVfUlND Q19GMV9RVE1SX1YxX0NOVFBfQ1RMLAotCQkJCQkJMHgxLCByc2MtPmRlYnVnX21vZGUpOwotCi0J cmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcnNjX2h3X3BkY19pbml0KHN0cnVjdCBkcHVfcnNj X3ByaXYgKnJzYykKLXsKLQlwcl9kZWJ1ZygicnNjIGhhcmR3YXJlIHBkYyBpbml0XG4iKTsKLQot CWRzc19yZWdfdygmcnNjLT5kcnZfaW8sIERQVV9SU0NDX1BEQ19TRVFfU1RBUlRfQUREUl9SRUdf T0ZGU0VUX0RSVjAsCi0JCQkJCQkweDQ1MjAsIHJzYy0+ZGVidWdfbW9kZSk7Ci0JZHNzX3JlZ193 KCZyc2MtPmRydl9pbywgRFBVX1JTQ0NfUERDX01BVENIX1ZBTFVFX0xPX1JFR19PRkZTRVRfRFJW MCwKLQkJCQkJCTB4NDUxMCwgcnNjLT5kZWJ1Z19tb2RlKTsKLQlkc3NfcmVnX3coJnJzYy0+ZHJ2 X2lvLCBEUFVfUlNDQ19QRENfTUFUQ0hfVkFMVUVfSElfUkVHX09GRlNFVF9EUlYwLAotCQkJCQkJ MHg0NTE0LCByc2MtPmRlYnVnX21vZGUpOwotCWRzc19yZWdfdygmcnNjLT5kcnZfaW8sIERQVV9S U0NDX1BEQ19TTEFWRV9JRF9EUlYwLAotCQkJCQkJMHgxLCByc2MtPmRlYnVnX21vZGUpOwotCi0J cmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcnNjX2h3X3dyYXBwZXJfaW5pdChzdHJ1Y3QgZHB1 X3JzY19wcml2ICpyc2MpCi17Ci0JcHJfZGVidWcoInJzYyBoYXJkd2FyZSB3cmFwcGVyIGluaXRc biIpOwotCi0JZHNzX3JlZ193KCZyc2MtPndyYXBwZXJfaW8sIERQVV9SU0NDX1dSQVBQRVJfU1RB VElDX1dBS0VVUF8wLAotCQlyc2MtPnRpbWVyX2NvbmZpZy5zdGF0aWNfd2FrZXVwX3RpbWVfbnMs IHJzYy0+ZGVidWdfbW9kZSk7Ci0KLQlkc3NfcmVnX3coJnJzYy0+d3JhcHBlcl9pbywgRFBVX1JT Q0NfV1JBUFBFUl9SU0NDX01PREVfVEhSRVNIT0xELAotCQlyc2MtPnRpbWVyX2NvbmZpZy5yc2Nf bW9kZV90aHJlc2hvbGRfdGltZV9ucywgcnNjLT5kZWJ1Z19tb2RlKTsKLQotCWRzc19yZWdfdygm cnNjLT53cmFwcGVyX2lvLCBEUFVfUlNDQ19XUkFQUEVSX09WRVJSSURFX0NUUkwsCi0JCQkJCQlC SVQoOCksIHJzYy0+ZGVidWdfbW9kZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcnNj X2h3X3NlcV9tZW1vcnlfaW5pdChzdHJ1Y3QgZHB1X3JzY19wcml2ICpyc2MpCi17Ci0JcHJfZGVi dWcoInJzYyBzZXF1ZW5jZXIgbWVtb3J5IGluaXRcbiIpOwotCi0JLyogTW9kZSAtIDAgc2VxdWVu Y2UgKi8KLQlkc3NfcmVnX3coJnJzYy0+ZHJ2X2lvLCBEUFVfUlNDQ19TRVFfTUVNXzBfRFJWMCAr IDB4MCwKLQkJCQkJCTB4ZTBhODhiYWIsIHJzYy0+ZGVidWdfbW9kZSk7Ci0JZHNzX3JlZ193KCZy c2MtPmRydl9pbywgRFBVX1JTQ0NfU0VRX01FTV8wX0RSVjAgKyAweDQsCi0JCQkJCQkweDhiYWJl YzM5LCByc2MtPmRlYnVnX21vZGUpOwotCWRzc19yZWdfdygmcnNjLT5kcnZfaW8sIERQVV9SU0ND X1NFUV9NRU1fMF9EUlYwICsgMHg4LAotCQkJCQkJMHg4YmFiMjA4OCwgcnNjLT5kZWJ1Z19tb2Rl KTsKLQotCS8qIE1vZGUgLSAxIHNlcXVlbmNlICovCi0JZHNzX3JlZ193KCZyc2MtPmRydl9pbywg RFBVX1JTQ0NfU0VRX01FTV8wX0RSVjAgKyAweGMsCi0JCQkJCQkweDM5ZTAzOGE4LCByc2MtPmRl YnVnX21vZGUpOwotCWRzc19yZWdfdygmcnNjLT5kcnZfaW8sIERQVV9SU0NDX1NFUV9NRU1fMF9E UlYwICsgMHgxMCwKLQkJCQkJCTB4ODg4YmFiZWMsIHJzYy0+ZGVidWdfbW9kZSk7Ci0JZHNzX3Jl Z193KCZyc2MtPmRydl9pbywgRFBVX1JTQ0NfU0VRX01FTV8wX0RSVjAgKyAweDE0LAotCQkJCQkJ MHhhODA2YTAyMCwgcnNjLT5kZWJ1Z19tb2RlKTsKLQotCS8qIE1vZGUgLSAyIHNlcXVlbmNlICov Ci0JZHNzX3JlZ193KCZyc2MtPmRydl9pbywgRFBVX1JTQ0NfU0VRX01FTV8wX0RSVjAgKyAweDE4 LAotCQkJCQkJMHhhMTM4ZWJhYSwgcnNjLT5kZWJ1Z19tb2RlKTsKLQlkc3NfcmVnX3coJnJzYy0+ ZHJ2X2lvLCBEUFVfUlNDQ19TRVFfTUVNXzBfRFJWMCArIDB4MWMsCi0JCQkJCQkweGFjYTU4MWUx LCByc2MtPmRlYnVnX21vZGUpOwotCWRzc19yZWdfdygmcnNjLT5kcnZfaW8sIERQVV9SU0NDX1NF UV9NRU1fMF9EUlYwICsgMHgyMCwKLQkJCQkJCTB4ZTJhMmVkZTAsIHJzYy0+ZGVidWdfbW9kZSk7 Ci0JZHNzX3JlZ193KCZyc2MtPmRydl9pbywgRFBVX1JTQ0NfU0VRX01FTV8wX0RSVjAgKyAweDI0 LAotCQkJCQkJMHhlYThhMzk4MiwgcnNjLT5kZWJ1Z19tb2RlKTsKLQlkc3NfcmVnX3coJnJzYy0+ ZHJ2X2lvLCBEUFVfUlNDQ19TRVFfTUVNXzBfRFJWMCArIDB4MjgsCi0JCQkJCQkweGE5MjA4ODhj LCByc2MtPmRlYnVnX21vZGUpOwotCi0JLyogdGNzIHNsZWVwIHNlcXVlbmNlICovCi0JZHNzX3Jl Z193KCZyc2MtPmRydl9pbywgRFBVX1JTQ0NfU0VRX01FTV8wX0RSVjAgKyAweDJjLAotCQkJCQkJ MHg4OWU2YTZlOSwgcnNjLT5kZWJ1Z19tb2RlKTsKLQlkc3NfcmVnX3coJnJzYy0+ZHJ2X2lvLCBE UFVfUlNDQ19TRVFfTUVNXzBfRFJWMCArIDB4MzAsCi0JCQkJCQkweGE3ZTlhOTIwLCByc2MtPmRl YnVnX21vZGUpOwotCWRzc19yZWdfdygmcnNjLT5kcnZfaW8sIERQVV9SU0NDX1NFUV9NRU1fMF9E UlYwICsgMHgzNCwKLQkJCQkJCTB4MDAyMDg5ZTcsIHJzYy0+ZGVidWdfbW9kZSk7Ci0KLQkvKiBi cmFuY2ggYWRkcmVzcyAqLwotCWRzc19yZWdfdygmcnNjLT5kcnZfaW8sIERQVV9SU0NDX1NFUV9D RkdfQlJfQUREUl8wX0RSVjAsCi0JCQkJCQkweDJiLCByc2MtPmRlYnVnX21vZGUpOwotCWRzc19y ZWdfdygmcnNjLT5kcnZfaW8sIERQVV9SU0NDX1NFUV9DRkdfQlJfQUREUl8xX0RSVjAsCi0JCQkJ CQkweDMxLCByc2MtPmRlYnVnX21vZGUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQg cnNjX2h3X3NvbHZlcl9pbml0KHN0cnVjdCBkcHVfcnNjX3ByaXYgKnJzYykKLXsKLQljb25zdCB1 MzIgbW9kZV8wX3N0YXJ0X2FkZHIgPSAweDA7Ci0JY29uc3QgdTMyIG1vZGVfMV9zdGFydF9hZGRy ID0gMHhhOwotCWNvbnN0IHUzMiBtb2RlXzJfc3RhcnRfYWRkciA9IDB4MTU7Ci0KLQlwcl9kZWJ1 ZygicnNjIHNvbHZlciBpbml0XG4iKTsKLQotCWRzc19yZWdfdygmcnNjLT5kcnZfaW8sIERQVV9S U0NDX1NPRlRfV0FLRVVQX1RJTUVfTE9fRFJWMCwKLQkJCQkJMHhGRkZGRkZGRiwgcnNjLT5kZWJ1 Z19tb2RlKTsKLQlkc3NfcmVnX3coJnJzYy0+ZHJ2X2lvLCBEUFVfUlNDQ19TT0ZUX1dBS0VVUF9U SU1FX0hJX0RSVjAsCi0JCQkJCTB4RkZGRkZGRkYsIHJzYy0+ZGVidWdfbW9kZSk7Ci0JZHNzX3Jl Z193KCZyc2MtPmRydl9pbywgRFBVX1JTQ0NfTUFYX0lETEVfRFVSQVRJT05fRFJWMCwKLQkJCQkJ MHhFRkZGRkZGRiwgcnNjLT5kZWJ1Z19tb2RlKTsKLQotCWRzc19yZWdfdygmcnNjLT5kcnZfaW8s IERQVV9SU0NfU09MVkVSX1RJTUVfU0xPVF9UQUJMRV8wX0RSVjAsCi0JCQkJCQkweDAsIHJzYy0+ ZGVidWdfbW9kZSk7Ci0JZHNzX3JlZ193KCZyc2MtPmRydl9pbywgRFBVX1JTQ19TT0xWRVJfVElN RV9TTE9UX1RBQkxFXzFfRFJWMCwKLQkJcnNjLT50aW1lcl9jb25maWcucnNjX3RpbWVfc2xvdF8w X25zLCByc2MtPmRlYnVnX21vZGUpOwotCWRzc19yZWdfdygmcnNjLT5kcnZfaW8sIERQVV9SU0Nf U09MVkVSX1RJTUVfU0xPVF9UQUJMRV8yX0RSVjAsCi0JCXJzYy0+dGltZXJfY29uZmlnLnJzY190 aW1lX3Nsb3RfMV9ucywgcnNjLT5kZWJ1Z19tb2RlKTsKLQlkc3NfcmVnX3coJnJzYy0+ZHJ2X2lv LCBEUFVfUlNDX1NPTFZFUl9USU1FX1NMT1RfVEFCTEVfM19EUlYwLAotCQlyc2MtPnRpbWVyX2Nv bmZpZy5yc2NfdGltZV9zbG90XzJfbnMsIHJzYy0+ZGVidWdfbW9kZSk7Ci0KLQlkc3NfcmVnX3co JnJzYy0+ZHJ2X2lvLCBEUFVfUlNDX1NPTFZFUl9TT0xWRVJfTU9ERVNfRU5BQkxFRF9EUlYwLAot CQkJCQkJMHg3LCByc2MtPmRlYnVnX21vZGUpOwotCi0JZHNzX3JlZ193KCZyc2MtPmRydl9pbywg RFBVX1JTQ19TT0xWRVJfTU9ERV9QUklfVEFCTEVfU0xPVDBfUFJJMF9EUlYwLAotCQkJCQkJMHgw LCByc2MtPmRlYnVnX21vZGUpOwotCWRzc19yZWdfdygmcnNjLT5kcnZfaW8sIERQVV9SU0NfU09M VkVSX01PREVfUFJJX1RBQkxFX1NMT1QxX1BSSTBfRFJWMCwKLQkJCQkJCTB4MSwgcnNjLT5kZWJ1 Z19tb2RlKTsKLQlkc3NfcmVnX3coJnJzYy0+ZHJ2X2lvLCBEUFVfUlNDX1NPTFZFUl9NT0RFX1BS SV9UQUJMRV9TTE9UMV9QUkkzX0RSVjAsCi0JCQkJCQkweDEsIHJzYy0+ZGVidWdfbW9kZSk7Ci0J ZHNzX3JlZ193KCZyc2MtPmRydl9pbywgRFBVX1JTQ19TT0xWRVJfTU9ERV9QUklfVEFCTEVfU0xP VDJfUFJJMF9EUlYwLAotCQkJCQkJMHgyLCByc2MtPmRlYnVnX21vZGUpOwotCWRzc19yZWdfdygm cnNjLT5kcnZfaW8sIERQVV9SU0NfU09MVkVSX01PREVfUFJJX1RBQkxFX1NMT1QyX1BSSTNfRFJW MCwKLQkJCQkJCTB4MiwgcnNjLT5kZWJ1Z19tb2RlKTsKLQotCWRzc19yZWdfdygmcnNjLT5kcnZf aW8sIERQVV9SU0NfU09MVkVSX09WRVJSSURFX01PREVfRFJWMCwKLQkJCQkJCTB4MCwgcnNjLT5k ZWJ1Z19tb2RlKTsKLQlkc3NfcmVnX3coJnJzYy0+ZHJ2X2lvLCBEUFVfUlNDX1NPTFZFUl9PVkVS UklERV9DVFJMX0RSVjAsCi0JCQkJCW1vZGVfMF9zdGFydF9hZGRyLCByc2MtPmRlYnVnX21vZGUp OwotCWRzc19yZWdfdygmcnNjLT5kcnZfaW8sIERQVV9SU0NfVElNRVJTX0NPTlNJREVSRURfRFJW MCwKLQkJCQkJCTB4MSwgcnNjLT5kZWJ1Z19tb2RlKTsKLQlkc3NfcmVnX3coJnJzYy0+ZHJ2X2lv LCBEUFVfUlNDX1NPTFZFUl9PVkVSUklERV9JRExFX1RJTUVfRFJWMCwKLQkJCQkJCTB4MDEwMDAw MTAsIHJzYy0+ZGVidWdfbW9kZSk7Ci0KLQlkc3NfcmVnX3coJnJzYy0+ZHJ2X2lvLCBEUFVfUlND X1NPTFZFUl9NT0RFX1BBUk0wX0RSVjBfTU9ERTAsCi0JCQkJCW1vZGVfMF9zdGFydF9hZGRyLCBy c2MtPmRlYnVnX21vZGUpOwotCWRzc19yZWdfdygmcnNjLT5kcnZfaW8sIERQVV9SU0NfU09MVkVS X01PREVfUEFSTTFfRFJWMF9NT0RFMCwKLQkJCQkJMHg4MDAwMDAwMCwgcnNjLT5kZWJ1Z19tb2Rl KTsKLQlkc3NfcmVnX3coJnJzYy0+ZHJ2X2lvLCBEUFVfUlNDX1NPTFZFUl9NT0RFX1BBUk0yX0RS VjBfTU9ERTAsCi0JCQlyc2MtPnRpbWVyX2NvbmZpZy5yc2NfYmFja29mZl90aW1lX25zLCByc2Mt PmRlYnVnX21vZGUpOwotCWRzc19yZWdfdygmcnNjLT5kcnZfaW8sIERQVV9SU0NfU09MVkVSX01P REVfUEFSTTNfRFJWMF9NT0RFMCwKLQkJCXJzYy0+dGltZXJfY29uZmlnLnBkY19iYWNrb2ZmX3Rp bWVfbnMsIHJzYy0+ZGVidWdfbW9kZSk7Ci0KLQlkc3NfcmVnX3coJnJzYy0+ZHJ2X2lvLCBEUFVf UlNDX1NPTFZFUl9NT0RFX1BBUk0wX0RSVjBfTU9ERTEsCi0JCQkJCW1vZGVfMV9zdGFydF9hZGRy LCByc2MtPmRlYnVnX21vZGUpOwotCWRzc19yZWdfdygmcnNjLT5kcnZfaW8sIERQVV9SU0NfU09M VkVSX01PREVfUEFSTTFfRFJWMF9NT0RFMSwKLQkJCQkJMHg4MDAwMDAwMCwgcnNjLT5kZWJ1Z19t b2RlKTsKLQlkc3NfcmVnX3coJnJzYy0+ZHJ2X2lvLCBEUFVfUlNDX1NPTFZFUl9NT0RFX1BBUk0y X0RSVjBfTU9ERTEsCi0JCQlyc2MtPnRpbWVyX2NvbmZpZy5yc2NfYmFja29mZl90aW1lX25zLCBy c2MtPmRlYnVnX21vZGUpOwotCWRzc19yZWdfdygmcnNjLT5kcnZfaW8sIERQVV9SU0NfU09MVkVS X01PREVfUEFSTTNfRFJWMF9NT0RFMSwKLQkJCXJzYy0+dGltZXJfY29uZmlnLnBkY19iYWNrb2Zm X3RpbWVfbnMsIHJzYy0+ZGVidWdfbW9kZSk7Ci0KLQlkc3NfcmVnX3coJnJzYy0+ZHJ2X2lvLCBE UFVfUlNDX1NPTFZFUl9NT0RFX1BBUk0wX0RSVjBfTU9ERTIsCi0JCQkJCW1vZGVfMl9zdGFydF9h ZGRyLCByc2MtPmRlYnVnX21vZGUpOwotCWRzc19yZWdfdygmcnNjLT5kcnZfaW8sIERQVV9SU0Nf U09MVkVSX01PREVfUEFSTTFfRFJWMF9NT0RFMiwKLQkJCQkJMHg4MDAwMDAwMCwgcnNjLT5kZWJ1 Z19tb2RlKTsKLQlkc3NfcmVnX3coJnJzYy0+ZHJ2X2lvLCBEUFVfUlNDX1NPTFZFUl9NT0RFX1BB Uk0yX0RSVjBfTU9ERTIsCi0JCQkJCTB4MCwgcnNjLT5kZWJ1Z19tb2RlKTsKLQlkc3NfcmVnX3co JnJzYy0+ZHJ2X2lvLCBEUFVfUlNDX1NPTFZFUl9NT0RFX1BBUk0zX0RSVjBfTU9ERTIsCi0JCQly c2MtPnRpbWVyX2NvbmZpZy5wZGNfYmFja29mZl90aW1lX25zLCByc2MtPmRlYnVnX21vZGUpOwot Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcnNjX2h3X3RpbWVyX3VwZGF0ZShzdHJ1Y3Qg ZHB1X3JzY19wcml2ICpyc2MpCi17Ci0JaWYgKCFyc2MpIHsKLQkJcHJfZGVidWcoImludmFsaWQg aW5wdXQgcGFyYW1cbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlwcl9kZWJ1ZygicnNj IGh3IHRpbWVyIHVwZGF0ZVxuIik7Ci0KLQlkc3NfcmVnX3coJnJzYy0+ZHJ2X2lvLCBEUFVfUlND X1NPTFZFUl9USU1FX1NMT1RfVEFCTEVfMV9EUlYwLAotCQlyc2MtPnRpbWVyX2NvbmZpZy5yc2Nf dGltZV9zbG90XzBfbnMsIHJzYy0+ZGVidWdfbW9kZSk7Ci0JZHNzX3JlZ193KCZyc2MtPmRydl9p bywgRFBVX1JTQ19TT0xWRVJfVElNRV9TTE9UX1RBQkxFXzJfRFJWMCwKLQkJcnNjLT50aW1lcl9j b25maWcucnNjX3RpbWVfc2xvdF8xX25zLCByc2MtPmRlYnVnX21vZGUpOwotCWRzc19yZWdfdygm cnNjLT5kcnZfaW8sIERQVV9SU0NfU09MVkVSX1RJTUVfU0xPVF9UQUJMRV8zX0RSVjAsCi0JCXJz Yy0+dGltZXJfY29uZmlnLnJzY190aW1lX3Nsb3RfMl9ucywgcnNjLT5kZWJ1Z19tb2RlKTsKLQot CWRzc19yZWdfdygmcnNjLT5kcnZfaW8sIERQVV9SU0NfU09MVkVSX01PREVfUEFSTTJfRFJWMF9N T0RFMCwKLQkJCXJzYy0+dGltZXJfY29uZmlnLnJzY19iYWNrb2ZmX3RpbWVfbnMsIHJzYy0+ZGVi dWdfbW9kZSk7Ci0JZHNzX3JlZ193KCZyc2MtPmRydl9pbywgRFBVX1JTQ19TT0xWRVJfTU9ERV9Q QVJNM19EUlYwX01PREUwLAotCQkJcnNjLT50aW1lcl9jb25maWcucGRjX2JhY2tvZmZfdGltZV9u cywgcnNjLT5kZWJ1Z19tb2RlKTsKLQotCWRzc19yZWdfdygmcnNjLT5kcnZfaW8sIERQVV9SU0Nf U09MVkVSX01PREVfUEFSTTJfRFJWMF9NT0RFMSwKLQkJCXJzYy0+dGltZXJfY29uZmlnLnJzY19i YWNrb2ZmX3RpbWVfbnMsIHJzYy0+ZGVidWdfbW9kZSk7Ci0JZHNzX3JlZ193KCZyc2MtPmRydl9p bywgRFBVX1JTQ19TT0xWRVJfTU9ERV9QQVJNM19EUlYwX01PREUxLAotCQkJcnNjLT50aW1lcl9j b25maWcucGRjX2JhY2tvZmZfdGltZV9ucywgcnNjLT5kZWJ1Z19tb2RlKTsKLQotCWRzc19yZWdf dygmcnNjLT5kcnZfaW8sIERQVV9SU0NfU09MVkVSX01PREVfUEFSTTNfRFJWMF9NT0RFMiwKLQkJ CXJzYy0+dGltZXJfY29uZmlnLnBkY19iYWNrb2ZmX3RpbWVfbnMsIHJzYy0+ZGVidWdfbW9kZSk7 Ci0KLQlkc3NfcmVnX3coJnJzYy0+d3JhcHBlcl9pbywgRFBVX1JTQ0NfV1JBUFBFUl9TVEFUSUNf V0FLRVVQXzAsCi0JCXJzYy0+dGltZXJfY29uZmlnLnN0YXRpY193YWtldXBfdGltZV9ucywgcnNj LT5kZWJ1Z19tb2RlKTsKLQotCWRzc19yZWdfdygmcnNjLT53cmFwcGVyX2lvLCBEUFVfUlNDQ19X UkFQUEVSX1JTQ0NfTU9ERV9USFJFU0hPTEQsCi0JCXJzYy0+dGltZXJfY29uZmlnLnJzY19tb2Rl X3RocmVzaG9sZF90aW1lX25zLCByc2MtPmRlYnVnX21vZGUpOwotCi0JLyogbWFrZSBzdXJlIHRo YXQgaHcgdGltZXJzIGFyZSB1cGRhdGVkICovCi0Jd21iKCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQot c3RhdGljIGludCBkcHVfcnNjX21vZGUyX2V4aXQoc3RydWN0IGRwdV9yc2NfcHJpdiAqcnNjLAot CQkJCQkJZW51bSBkcHVfcnNjX3N0YXRlIHN0YXRlKQotewotCWludCByYyA9IC1FQlVTWTsKLQlp bnQgY291bnQsIHJlZzsKLQl1bnNpZ25lZCBsb25nIHBvd2VyX3N0YXR1czsKLQotCXJzY19ldmVu dF90cmlnZ2VyKHJzYywgRFBVX1JTQ19FVkVOVF9QUkVfQ09SRV9SRVNUT1JFKTsKLQotCS8qKgot CSAqIGZvcmNlIGJ1c3kgYW5kIGlkbGUgZHVyaW5nIGNsayAmIHZpZGVvIG1vZGUgc3RhdGUgYmVj YXVzZSBpdAotCSAqIGlzIHRyeWluZyB0byBlbnRyeSBpbiBtb2RlLTIgd2l0aG91dCB0dXJuaW5n IG9uIHRoZSB2eXNuYy4KLQkgKi8KLQlpZiAoKHN0YXRlID09IERQVV9SU0NfVklEX1NUQVRFKSB8 fCAoc3RhdGUgPT0gRFBVX1JTQ19DTEtfU1RBVEUpKSB7Ci0JCXJlZyA9IGRzc19yZWdfcigmcnNj LT53cmFwcGVyX2lvLAotCQkJRFBVX1JTQ0NfV1JBUFBFUl9PVkVSUklERV9DVFJMLCByc2MtPmRl YnVnX21vZGUpOwotCQlyZWcgJj0gfihCSVQoOCkgfCBCSVQoMCkpOwotCQlkc3NfcmVnX3coJnJz Yy0+d3JhcHBlcl9pbywgRFBVX1JTQ0NfV1JBUFBFUl9PVkVSUklERV9DVFJMLAotCQkJCQkJCXJl ZywgcnNjLT5kZWJ1Z19tb2RlKTsKLQl9Ci0KLQkvLyBuZWVkcyByZXZpZXcgd2l0aCBIUEcgc2Vx dWVuY2UKLQlkc3NfcmVnX3coJnJzYy0+d3JhcHBlcl9pbywgRFBVX1JTQ0NfRjFfUVRNUl9WMV9D TlRQX0NWQUxfTE8sCi0JCQkJCTB4MCwgcnNjLT5kZWJ1Z19tb2RlKTsKLQlkc3NfcmVnX3coJnJz Yy0+d3JhcHBlcl9pbywgRFBVX1JTQ0NfRjFfUVRNUl9WMV9DTlRQX0NWQUxfSEksCi0JCQkJCTB4 MCwgcnNjLT5kZWJ1Z19tb2RlKTsKLQotCXJlZyA9IGRzc19yZWdfcigmcnNjLT53cmFwcGVyX2lv LCBEUFVfUlNDQ19XUkFQUEVSX0NUUkwsCi0JCQkJcnNjLT5kZWJ1Z19tb2RlKTsKLQlyZWcgJj0g fkJJVCgzKTsKLQlkc3NfcmVnX3coJnJzYy0+d3JhcHBlcl9pbywgRFBVX1JTQ0NfV1JBUFBFUl9D VFJMLAotCQkJCQlyZWcsIHJzYy0+ZGVidWdfbW9kZSk7Ci0KLQlyZWcgPSBkc3NfcmVnX3IoJnJz Yy0+d3JhcHBlcl9pbywgRFBVX1JTQ0NfU1BBUkVfUFdSX0VWRU5ULAotCQkJCQkJCXJzYy0+ZGVi dWdfbW9kZSk7Ci0JcmVnIHw9IEJJVCgxMyk7Ci0JZHNzX3JlZ193KCZyc2MtPndyYXBwZXJfaW8s IERQVV9SU0NDX1NQQVJFX1BXUl9FVkVOVCwKLQkJCQkJCQlyZWcsIHJzYy0+ZGVidWdfbW9kZSk7 Ci0KLQkvKiBtYWtlIHN1cmUgdGhhdCBtb2RlLTIgZXhpdCBiZWZvcmUgd2FpdCovCi0Jd21iKCk7 Ci0KLQkvKiB0aGlzIHdhaXQgaXMgcmVxdWlyZWQgdG8gbWFrZSBzdXJlIHRoYXQgZ2RzYyBpcyBw b3dlcmVkIG9uICovCi0JZm9yIChjb3VudCA9IE1BWF9DSEVDS19MT09QUzsgY291bnQgPiAwOyBj b3VudC0tKSB7Ci0JCXBvd2VyX3N0YXR1cyA9IGRzc19yZWdfcigmcnNjLT53cmFwcGVyX2lvLAot CQkJCURQVV9SU0NDX1BXUl9DVFJMLCByc2MtPmRlYnVnX21vZGUpOwotCQlpZiAoIXRlc3RfYml0 KFBPV0VSX0NUUkxfQklUXzEyLCAmcG93ZXJfc3RhdHVzKSkgewotCQkJcmVnID0gZHNzX3JlZ19y KCZyc2MtPmRydl9pbywKLQkJCQlEUFVfUlNDQ19TRVFfUFJPR1JBTV9DT1VOVEVSLCByc2MtPmRl YnVnX21vZGUpOwotCQkJRFBVX0VWVDMyX1ZFUkJPU0UoY291bnQsIHJlZywgcG93ZXJfc3RhdHVz KTsKLQkJCXJjID0gMDsKLQkJCWJyZWFrOwotCQl9Ci0JCXVzbGVlcF9yYW5nZSgxMCwgMTAwKTsK LQl9Ci0KLQlyZWcgPSBkc3NfcmVnX3IoJnJzYy0+d3JhcHBlcl9pbywgRFBVX1JTQ0NfU1BBUkVf UFdSX0VWRU5ULAotCQkJCQkJCXJzYy0+ZGVidWdfbW9kZSk7Ci0JcmVnICY9IH5CSVQoMTMpOwot CWRzc19yZWdfdygmcnNjLT53cmFwcGVyX2lvLCBEUFVfUlNDQ19TUEFSRV9QV1JfRVZFTlQsCi0J CQkJCQkJcmVnLCByc2MtPmRlYnVnX21vZGUpOwotCWlmIChyYykKLQkJcHJfZXJyKCJ2ZGQgcmVn IGlzIG5vdCBlbmFibGVkIHlldFxuIik7Ci0KLQlyc2NfZXZlbnRfdHJpZ2dlcihyc2MsIERQVV9S U0NfRVZFTlRfUE9TVF9DT1JFX1JFU1RPUkUpOwotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMg aW50IGRwdV9yc2NfbW9kZTJfZW50cnkoc3RydWN0IGRwdV9yc2NfcHJpdiAqcnNjKQotewotCWlu dCByYzsKLQlpbnQgY291bnQsIHdyYXBwZXJfc3RhdHVzOwotCXVuc2lnbmVkIGxvbmcgcmVnOwot Ci0JaWYgKHJzYy0+cG93ZXJfY29sbGFwc2VfYmxvY2spCi0JCXJldHVybiAtRUlOVkFMOwotCi0J cmMgPSByZWd1bGF0b3Jfc2V0X21vZGUocnNjLT5mcywgUkVHVUxBVE9SX01PREVfRkFTVCk7Ci0J aWYgKHJjKSB7Ci0JCXByX2VycigidmRkIHJlZyBmYXN0IG1vZGUgc2V0IGZhaWxlZCByYzolZFxu IiwgcmMpOwotCQlyZXR1cm4gcmM7Ci0JfQotCi0JcnNjX2V2ZW50X3RyaWdnZXIocnNjLCBEUFVf UlNDX0VWRU5UX1BSRV9DT1JFX1BDKTsKLQotCS8qIHVwZGF0ZSBxdGltZXJzIHRvIGhpZ2ggZHVy aW5nIGNsayAmIHZpZGVvIG1vZGUgc3RhdGUgKi8KLQlpZiAoKHJzYy0+Y3VycmVudF9zdGF0ZSA9 PSBEUFVfUlNDX1ZJRF9TVEFURSkgfHwKLQkJCShyc2MtPmN1cnJlbnRfc3RhdGUgPT0gRFBVX1JT Q19DTEtfU1RBVEUpKSB7Ci0JCWRzc19yZWdfdygmcnNjLT53cmFwcGVyX2lvLCBEUFVfUlNDQ19G MF9RVE1SX1YxX0NOVFBfQ1ZBTF9ISSwKLQkJCQkJCTB4ZmZmZmZmZmYsIHJzYy0+ZGVidWdfbW9k ZSk7Ci0JCWRzc19yZWdfdygmcnNjLT53cmFwcGVyX2lvLCBEUFVfUlNDQ19GMF9RVE1SX1YxX0NO VFBfQ1ZBTF9MTywKLQkJCQkJCTB4ZmZmZmZmZmYsIHJzYy0+ZGVidWdfbW9kZSk7Ci0JfQotCi0J d3JhcHBlcl9zdGF0dXMgPSBkc3NfcmVnX3IoJnJzYy0+d3JhcHBlcl9pbywgRFBVX1JTQ0NfV1JB UFBFUl9DVFJMLAotCQkJCXJzYy0+ZGVidWdfbW9kZSk7Ci0Jd3JhcHBlcl9zdGF0dXMgfD0gQklU KDMpOwotCXdyYXBwZXJfc3RhdHVzIHw9IEJJVCgwKTsKLQlkc3NfcmVnX3coJnJzYy0+d3JhcHBl cl9pbywgRFBVX1JTQ0NfV1JBUFBFUl9DVFJMLAotCQkJCQl3cmFwcGVyX3N0YXR1cywgcnNjLT5k ZWJ1Z19tb2RlKTsKLQotCS8qKgotCSAqIGZvcmNlIGJ1c3kgYW5kIGlkbGUgZHVyaW5nIGNsayAm IHZpZGVvIG1vZGUgc3RhdGUgYmVjYXVzZSBpdAotCSAqIGlzIHRyeWluZyB0byBlbnRyeSBpbiBt b2RlLTIgd2l0aG91dCB0dXJuaW5nIG9uIHRoZSB2eXNuYy4KLQkgKi8KLQlpZiAoKHJzYy0+Y3Vy cmVudF9zdGF0ZSA9PSBEUFVfUlNDX1ZJRF9TVEFURSkgfHwKLQkJCShyc2MtPmN1cnJlbnRfc3Rh dGUgPT0gRFBVX1JTQ19DTEtfU1RBVEUpKSB7Ci0JCWRzc19yZWdfdygmcnNjLT53cmFwcGVyX2lv LCBEUFVfUlNDQ19XUkFQUEVSX09WRVJSSURFX0NUUkwsCi0JCQkJQklUKDApIHwgQklUKDEpLCBy c2MtPmRlYnVnX21vZGUpOwotCQl3bWIoKTsgLyogZm9yY2UgYnVzeSBndXJhbnRlZSAqLwotCQlk c3NfcmVnX3coJnJzYy0+d3JhcHBlcl9pbywgRFBVX1JTQ0NfV1JBUFBFUl9PVkVSUklERV9DVFJM LAotCQkJCUJJVCgwKSB8IEJJVCg5KSwgcnNjLT5kZWJ1Z19tb2RlKTsKLQl9Ci0KLQkvKiBtYWtl IHN1cmUgdGhhdCBtb2RlLTIgaXMgdHJpZ2dlcmVkIGJlZm9yZSB3YWl0Ki8KLQl3bWIoKTsKLQot CXJjID0gLUVCVVNZOwotCS8qIHRoaXMgd2FpdCBpcyByZXF1aXJlZCB0byB0dXJuIG9mZiB0aGUg cnNjYyBjbG9ja3MgKi8KLQlmb3IgKGNvdW50ID0gTUFYX0NIRUNLX0xPT1BTOyBjb3VudCA+IDA7 IGNvdW50LS0pIHsKLQkJcmVnID0gZHNzX3JlZ19yKCZyc2MtPndyYXBwZXJfaW8sCi0JCQkJRFBV X1JTQ0NfUFdSX0NUUkwsIHJzYy0+ZGVidWdfbW9kZSk7Ci0JCWlmICh0ZXN0X2JpdChQT1dFUl9D VFJMX0JJVF8xMiwgJnJlZykpIHsKLQkJCXJjID0gMDsKLQkJCWJyZWFrOwotCQl9Ci0JCXVzbGVl cF9yYW5nZSgxMCwgMTAwKTsKLQl9Ci0KLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJtZHNzIGdkc2Mg cG93ZXIgZG93biBmYWlsZWQgcmM6JWRcbiIsIHJjKTsKLQkJRFBVX0VWVDMyKHJjLCBEUFVfRVZU TE9HX0VSUk9SKTsKLQkJZ290byBlbmQ7Ci0JfQotCi0JaWYgKChyc2MtPmN1cnJlbnRfc3RhdGUg PT0gRFBVX1JTQ19WSURfU1RBVEUpIHx8Ci0JCQkocnNjLT5jdXJyZW50X3N0YXRlID09IERQVV9S U0NfQ0xLX1NUQVRFKSkgewotCQlkc3NfcmVnX3coJnJzYy0+d3JhcHBlcl9pbywgRFBVX1JTQ0Nf V1JBUFBFUl9PVkVSUklERV9DVFJMLAotCQkJCQlCSVQoMCkgfCBCSVQoOCksIHJzYy0+ZGVidWdf bW9kZSk7Ci0JCXdtYigpOyAvKiBmb3JjZSBidXN5IG9uIHZzeW5jICovCi0JfQotCi0JcnNjX2V2 ZW50X3RyaWdnZXIocnNjLCBEUFVfUlNDX0VWRU5UX1BPU1RfQ09SRV9QQyk7Ci0KLQlyZXR1cm4g MDsKLQotZW5kOgotCWRwdV9yc2NfbW9kZTJfZXhpdChyc2MsIHJzYy0+Y3VycmVudF9zdGF0ZSk7 Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHB1X3JzY19zdGF0ZV91cGRhdGUoc3Ry dWN0IGRwdV9yc2NfcHJpdiAqcnNjLAotCQkJCQkJZW51bSBkcHVfcnNjX3N0YXRlIHN0YXRlKQot ewotCWludCByYyA9IDA7Ci0JaW50IHJlZzsKLQotCWlmIChyc2MtPnBvd2VyX2NvbGxhcHNlKSB7 Ci0JCXJjID0gZHB1X3JzY19tb2RlMl9leGl0KHJzYywgc3RhdGUpOwotCQlpZiAocmMpCi0JCQlw cl9lcnIoInBvd2VyIGNvbGxhcHNlOiBtb2RlMiBleGl0IGZhaWxlZFxuIik7Ci0JCWVsc2UKLQkJ CXJzYy0+cG93ZXJfY29sbGFwc2UgPSBmYWxzZTsKLQl9Ci0KLQlzd2l0Y2ggKHN0YXRlKSB7Ci0J Y2FzZSBEUFVfUlNDX0NNRF9TVEFURToKLQkJcHJfZGVidWcoImNvbW1hbmQgbW9kZSBoYW5kbGlu Z1xuIik7Ci0KLQkJZHNzX3JlZ193KCZyc2MtPndyYXBwZXJfaW8sIERQVV9SU0NDX1dSQVBQRVJf Q1RSTCwKLQkJCQkJCTB4MSwgcnNjLT5kZWJ1Z19tb2RlKTsKLQkJZHNzX3JlZ193KCZyc2MtPmRy dl9pbywgRFBVX1JTQ0NfU09MVkVSX09WRVJSSURFX0NUUkxfRFJWMCwKLQkJCQkJCQkweDAsIHJz Yy0+ZGVidWdfbW9kZSk7Ci0JCXJlZyA9IGRzc19yZWdfcigmcnNjLT53cmFwcGVyX2lvLAotCQkJ RFBVX1JTQ0NfV1JBUFBFUl9PVkVSUklERV9DVFJMLCByc2MtPmRlYnVnX21vZGUpOwotCQlyZWcg fD0gKEJJVCgwKSB8IEJJVCg4KSk7Ci0JCXJlZyAmPSB+KEJJVCgxKSB8IEJJVCgyKSB8IEJJVCgz KSB8IEJJVCg2KSB8IEJJVCg3KSB8IEJJVCg5KSk7Ci0JCWRzc19yZWdfdygmcnNjLT53cmFwcGVy X2lvLCBEUFVfUlNDQ19XUkFQUEVSX09WRVJSSURFX0NUUkwsCi0JCQkJCQkJcmVnLCByc2MtPmRl YnVnX21vZGUpOwotCQkvKiBtYWtlIHN1cmUgdGhhdCBzb2x2ZXIgaXMgZW5hYmxlZCAqLwotCQl3 bWIoKTsKLQotCQlyc2NfZXZlbnRfdHJpZ2dlcihyc2MsIERQVV9SU0NfRVZFTlRfU09MVkVSX0VO QUJMRUQpOwotCQlicmVhazsKLQotCWNhc2UgRFBVX1JTQ19WSURfU1RBVEU6Ci0JCXByX2RlYnVn KCJ2aWRlbyBtb2RlIGhhbmRsaW5nXG4iKTsKLQotCQlkc3NfcmVnX3coJnJzYy0+d3JhcHBlcl9p bywgRFBVX1JTQ0NfV1JBUFBFUl9DVFJMLAotCQkJCQkJMHgxLCByc2MtPmRlYnVnX21vZGUpOwot CQlyZWcgPSBkc3NfcmVnX3IoJnJzYy0+d3JhcHBlcl9pbywKLQkJCURQVV9SU0NDX1dSQVBQRVJf T1ZFUlJJREVfQ1RSTCwgcnNjLT5kZWJ1Z19tb2RlKTsKLQkJcmVnIHw9IEJJVCg4KTsKLQkJcmVn ICY9IH4oQklUKDEpIHwgQklUKDApKTsKLQkJZHNzX3JlZ193KCZyc2MtPndyYXBwZXJfaW8sIERQ VV9SU0NDX1dSQVBQRVJfT1ZFUlJJREVfQ1RSTCwKLQkJCQkJCQlyZWcsIHJzYy0+ZGVidWdfbW9k ZSk7Ci0JCS8qIG1ha2Ugc3VyZSB0aGF0IHNvbHZlciBtb2RlIGlzIG92ZXJyaWRlICovCi0JCXdt YigpOwotCi0JCXJzY19ldmVudF90cmlnZ2VyKHJzYywgRFBVX1JTQ19FVkVOVF9TT0xWRVJfRElT QUJMRUQpOwotCQlicmVhazsKLQotCWNhc2UgRFBVX1JTQ19DTEtfU1RBVEU6Ci0JCXByX2RlYnVn KCJjbGsgc3RhdGUgaGFuZGxpbmdcbiIpOwotCi0JCXJlZyA9IGRzc19yZWdfcigmcnNjLT53cmFw cGVyX2lvLAotCQkJRFBVX1JTQ0NfV1JBUFBFUl9PVkVSUklERV9DVFJMLCByc2MtPmRlYnVnX21v ZGUpOwotCQlyZWcgJj0gfihCSVQoOCkgfCBCSVQoMCkpOwotCQlkc3NfcmVnX3coJnJzYy0+d3Jh cHBlcl9pbywgRFBVX1JTQ0NfV1JBUFBFUl9PVkVSUklERV9DVFJMLAotCQkJCQkJCXJlZywgcnNj LT5kZWJ1Z19tb2RlKTsKLQkJLyogbWFrZSBzdXJlIHRoYXQgc29sdmVyIG1vZGUgaXMgZGlzYWJs ZWQgKi8KLQkJd21iKCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBEUFVfUlNDX0lETEVfU1RBVEU6Ci0J CXJjID0gZHB1X3JzY19tb2RlMl9lbnRyeShyc2MpOwotCQlpZiAocmMpCi0JCQlwcl9lcnIoInBv d2VyIGNvbGxhcHNlIC0gbW9kZSAyIGVudHJ5IGZhaWxlZFxuIik7Ci0JCWVsc2UKLQkJCXJzYy0+ cG93ZXJfY29sbGFwc2UgPSB0cnVlOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXByX2Vycigi c3RhdGU6JWQgaGFuZGxpbmcgaXMgbm90IHN1cHBvcnRlZFxuIiwgc3RhdGUpOwotCQlicmVhazsK LQl9Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLWludCByc2NfaHdfaW5pdChzdHJ1Y3QgZHB1X3JzY19w cml2ICpyc2MpCi17Ci0JaW50IHJjID0gMDsKLQotCXJjID0gcnNjX2h3X3F0aW1lcl9pbml0KHJz Yyk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigicnNjIGh3IHF0aW1lciBpbml0IGZhaWxlZFxuIik7 Ci0JCWdvdG8gZW5kOwotCX0KLQotCXJjID0gcnNjX2h3X3dyYXBwZXJfaW5pdChyc2MpOwotCWlm IChyYykgewotCQlwcl9lcnIoInJzYyBodyB3cmFwcGVyIGluaXQgZmFpbGVkXG4iKTsKLQkJZ290 byBlbmQ7Ci0JfQotCi0JcmMgPSByc2NfaHdfc2VxX21lbW9yeV9pbml0KHJzYyk7Ci0JaWYgKHJj KSB7Ci0JCXByX2VycigicnNjIHNlcXVlbmNlciBtZW1vcnkgaW5pdCBmYWlsZWRcbiIpOwotCQln b3RvIGVuZDsKLQl9Ci0KLQlyYyA9IHJzY19od19zb2x2ZXJfaW5pdChyc2MpOwotCWlmIChyYykg ewotCQlwcl9lcnIoInJzYyBzb2x2ZXIgaW5pdCBmYWlsZWRcbiIpOwotCQlnb3RvIGVuZDsKLQl9 Ci0KLQlyYyA9IHJzY19od19wZGNfaW5pdChyc2MpOwotCWlmIChyYykgewotCQlwcl9lcnIoInJz YyBodyBwZGMgaW5pdCBmYWlsZWRcbiIpOwotCQlnb3RvIGVuZDsKLQl9Ci0KLQkvKiBtYWtlIHN1 cmUgdGhhdCBodyBpcyBpbml0aWFsaXplZCAqLwotCXdtYigpOwotCi0JcHJfaW5mbygiZHB1IHJz YyBpbml0IHN1Y2Nlc3NmdWxseSBkb25lXG4iKTsKLWVuZDoKLQlyZXR1cm4gcmM7Ci19Ci0KLWlu dCByc2NfaHdfbW9kZV9jdHJsKHN0cnVjdCBkcHVfcnNjX3ByaXYgKnJzYywgZW51bSByc2NfbW9k ZV9yZXEgcmVxdWVzdCwKLQkJY2hhciAqYnVmZmVyLCBpbnQgYnVmZmVyX3NpemUsIHUzMiBtb2Rl KQotewotCXUzMiBibGVuID0gMDsKLQl1MzIgc2xvdF90aW1lOwotCi0Jc3dpdGNoIChyZXF1ZXN0 KSB7Ci0JY2FzZSBNT0RFX1JFQUQ6Ci0JCWlmICghYnVmZmVyIHx8ICFidWZmZXJfc2l6ZSkKLQkJ CXJldHVybiBibGVuOwotCi0JCWJsZW4gPSBzbnByaW50ZihidWZmZXIsIGJ1ZmZlcl9zaXplIC0g YmxlbiwKLQkJCSJtb2RlX3N0YXR1czoweCV4XG4iLAotCQkJZHNzX3JlZ19yKCZyc2MtPmRydl9p bywgRFBVX1JTQ0NfU09MVkVSX1NUQVRVUzJfRFJWMCwKLQkJCXJzYy0+ZGVidWdfbW9kZSkpOwot CQlicmVhazsKLQotCWNhc2UgTU9ERV9VUERBVEU6Ci0JCXNsb3RfdGltZSA9IG1vZGUgJiBCSVQo MCkgPyAweDAgOgotCQkJCQlyc2MtPnRpbWVyX2NvbmZpZy5yc2NfdGltZV9zbG90XzJfbnM7Ci0J CWRzc19yZWdfdygmcnNjLT5kcnZfaW8sIERQVV9SU0NfU09MVkVSX1RJTUVfU0xPVF9UQUJMRV8w X0RSVjAsCi0JCQkJCQlzbG90X3RpbWUsIHJzYy0+ZGVidWdfbW9kZSk7Ci0KLQkJc2xvdF90aW1l ID0gbW9kZSAmIEJJVCgxKSA/Ci0JCQlyc2MtPnRpbWVyX2NvbmZpZy5yc2NfdGltZV9zbG90XzBf bnMgOgotCQkJCXJzYy0+dGltZXJfY29uZmlnLnJzY190aW1lX3Nsb3RfMl9uczsKLQkJZHNzX3Jl Z193KCZyc2MtPmRydl9pbywgRFBVX1JTQ19TT0xWRVJfVElNRV9TTE9UX1RBQkxFXzFfRFJWMCwK LQkJCQkJCXNsb3RfdGltZSwgcnNjLT5kZWJ1Z19tb2RlKTsKLQotCQlyc2MtPnBvd2VyX2NvbGxh cHNlX2Jsb2NrID0gIShtb2RlICYgQklUKDIpKTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQli cmVhazsKLQl9Ci0KLQlyZXR1cm4gYmxlbjsKLX0KLQotaW50IGRwdV9yc2NfZGVidWdfc2hvdyhz dHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBkcHVfcnNjX3ByaXYgKnJzYykKLXsKLQlzZXFfcHJp bnRmKHMsICJvdmVycmlkZSBjdHJsOjB4JXhcbiIsCi0JCSBkc3NfcmVnX3IoJnJzYy0+d3JhcHBl cl9pbywgRFBVX1JTQ0NfV1JBUFBFUl9PVkVSUklERV9DVFJMLAotCQkJCXJzYy0+ZGVidWdfbW9k ZSkpOwotCXNlcV9wcmludGYocywgInBvd2VyIGN0cmw6MHgleFxuIiwKLQkJIGRzc19yZWdfcigm cnNjLT53cmFwcGVyX2lvLCBEUFVfUlNDQ19QV1JfQ1RSTCwKLQkJCQlyc2MtPmRlYnVnX21vZGUp KTsKLQlzZXFfcHJpbnRmKHMsICJ2c3ljbiB0aW1lc3RhbXAwOjB4JXhcbiIsCi0JCSBkc3NfcmVn X3IoJnJzYy0+d3JhcHBlcl9pbywgRFBVX1JTQ0NfV1JBUFBFUl9WU1lOQ19USU1FU1RBTVAwLAot CQkJCXJzYy0+ZGVidWdfbW9kZSkpOwotCXNlcV9wcmludGYocywgInZzeWNuIHRpbWVzdGFtcDE6 MHgleFxuIiwKLQkJIGRzc19yZWdfcigmcnNjLT53cmFwcGVyX2lvLCBEUFVfUlNDQ19XUkFQUEVS X1ZTWU5DX1RJTUVTVEFNUDEsCi0JCQkJcnNjLT5kZWJ1Z19tb2RlKSk7Ci0KLQlzZXFfcHJpbnRm KHMsICJlcnJvciBpcnEgc3RhdHVzOjB4JXhcbiIsCi0JCSBkc3NfcmVnX3IoJnJzYy0+ZHJ2X2lv LCBEUFVfUlNDQ19FUlJPUl9JUlFfU1RBVFVTX0RSVjAsCi0JCQkJcnNjLT5kZWJ1Z19tb2RlKSk7 Ci0KLQlzZXFfcHJpbnRmKHMsICJzZXEgYnVzeSBzdGF0dXM6MHgleFxuIiwKLQkJIGRzc19yZWdf cigmcnNjLT5kcnZfaW8sIERQVV9SU0NDX1NFUV9CVVNZX0RSVjAsCi0JCQkJcnNjLT5kZWJ1Z19t b2RlKSk7Ci0KLQlzZXFfcHJpbnRmKHMsICJzb2x2ZXIgb3ZlcnJpZGUgY3RybCBzdGF0dXM6MHgl eFxuIiwKLQkJIGRzc19yZWdfcigmcnNjLT5kcnZfaW8sIERQVV9SU0NDX1NPTFZFUl9PVkVSUklE RV9DVFJMX0RSVjAsCi0JCQkJcnNjLT5kZWJ1Z19tb2RlKSk7Ci0Jc2VxX3ByaW50ZihzLCAic29s dmVyIG92ZXJyaWRlIHN0YXR1czoweCV4XG4iLAotCQkgZHNzX3JlZ19yKCZyc2MtPmRydl9pbywg RFBVX1JTQ0NfU09MVkVSX1NUQVRVUzBfRFJWMCwKLQkJCQlyc2MtPmRlYnVnX21vZGUpKTsKLQlz ZXFfcHJpbnRmKHMsICJzb2x2ZXIgdGltZXNsb3Qgc3RhdHVzOjB4JXhcbiIsCi0JCSBkc3NfcmVn X3IoJnJzYy0+ZHJ2X2lvLCBEUFVfUlNDQ19TT0xWRVJfU1RBVFVTMV9EUlYwLAotCQkJCXJzYy0+ ZGVidWdfbW9kZSkpOwotCXNlcV9wcmludGYocywgInNvbHZlciBtb2RlIHN0YXR1czoweCV4XG4i LAotCQkgZHNzX3JlZ19yKCZyc2MtPmRydl9pbywgRFBVX1JTQ0NfU09MVkVSX1NUQVRVUzJfRFJW MCwKLQkJCQlyc2MtPmRlYnVnX21vZGUpKTsKLQotCXNlcV9wcmludGYocywgImFtYyBzdGF0dXM6 MHgleFxuIiwKLQkJIGRzc19yZWdfcigmcnNjLT5kcnZfaW8sIERQVV9SU0NDX0FNQ19UQ1NfTU9E RV9JUlFfU1RBVFVTX0RSVjAsCi0JCQkJcnNjLT5kZWJ1Z19tb2RlKSk7Ci0KLQlyZXR1cm4gMDsK LX0KLQotaW50IHJzY19od192c3luYyhzdHJ1Y3QgZHB1X3JzY19wcml2ICpyc2MsIGVudW0gcnNj X3ZzeW5jX3JlcSByZXF1ZXN0LAotCQljaGFyICpidWZmZXIsIGludCBidWZmZXJfc2l6ZSwgdTMy IG1vZGUpCi17Ci0JdTMyIGJsZW4gPSAwLCByZWc7Ci0KLQlzd2l0Y2ggKHJlcXVlc3QpIHsKLQlj YXNlIFZTWU5DX1JFQUQ6Ci0JCWlmICghYnVmZmVyIHx8ICFidWZmZXJfc2l6ZSkKLQkJCXJldHVy biBibGVuOwotCi0JCWJsZW4gPSBzbnByaW50ZihidWZmZXIsIGJ1ZmZlcl9zaXplIC0gYmxlbiwg InZzeW5jMDoweCV4XG4iLAotCQkJIGRzc19yZWdfcigmcnNjLT53cmFwcGVyX2lvLAotCQkJCURQ VV9SU0NDX1dSQVBQRVJfVlNZTkNfVElNRVNUQU1QMCwKLQkJCQlyc2MtPmRlYnVnX21vZGUpKTsK LQkJaWYgKGJsZW4gPj0gYnVmZmVyX3NpemUpCi0JCQlyZXR1cm4gYmxlbjsKLQotCQlibGVuICs9 IHNucHJpbnRmKGJ1ZmZlciArIGJsZW4sIGJ1ZmZlcl9zaXplIC0gYmxlbiwKLQkJCSJ2c3luYzE6 MHgleFxuIiwKLQkJCSBkc3NfcmVnX3IoJnJzYy0+d3JhcHBlcl9pbywKLQkJCQlEUFVfUlNDQ19X UkFQUEVSX1ZTWU5DX1RJTUVTVEFNUDEsCi0JCQkJcnNjLT5kZWJ1Z19tb2RlKSk7Ci0JCWJyZWFr OwotCi0JY2FzZSBWU1lOQ19SRUFEX1ZTWU5DMDoKLQkJcmV0dXJuIGRzc19yZWdfcigmcnNjLT53 cmFwcGVyX2lvLAotCQkJCURQVV9SU0NDX1dSQVBQRVJfVlNZTkNfVElNRVNUQU1QMCwKLQkJCQly c2MtPmRlYnVnX21vZGUpOwotCi0JY2FzZSBWU1lOQ19FTkFCTEU6Ci0JCS8qIGNsZWFyIHRoZSBj dXJyZW50IFZTWU5DIHZhbHVlICovCi0JCXJlZyA9IEJJVCg5KSB8ICgobW9kZSAmIDB4NykgPDwg MTApOwotCQlkc3NfcmVnX3coJnJzYy0+d3JhcHBlcl9pbywgRFBVX1JTQ0NfV1JBUFBFUl9ERUJV R19CVVMsCi0JCQkJCXJlZywgcnNjLT5kZWJ1Z19tb2RlKTsKLQotCQkvKiBlbmFibGUgdGhlIFZT WU5DIGxvZ2dpbmcgKi8KLQkJcmVnID0gQklUKDgpIHwgKChtb2RlICYgMHg3KSA8PCAxMCk7Ci0J CWRzc19yZWdfdygmcnNjLT53cmFwcGVyX2lvLCBEUFVfUlNDQ19XUkFQUEVSX0RFQlVHX0JVUywK LQkJCQlyZWcsIHJzYy0+ZGVidWdfbW9kZSk7Ci0KLQkJLyogZW5zdXJlIHZzeW5jIGNvbmZpZyBo YXMgYmVlbiB3cml0dGVuIGJlZm9yZSB3YWl0aW5nIG9uIGl0ICovCi0JCXdtYigpOwotCQlicmVh azsKLQotCWNhc2UgVlNZTkNfRElTQUJMRToKLQkJZHNzX3JlZ193KCZyc2MtPndyYXBwZXJfaW8s IERQVV9SU0NDX1dSQVBQRVJfREVCVUdfQlVTLAotCQkJCQkJMHgwLCByc2MtPmRlYnVnX21vZGUp OwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gYmxlbjsKLX0KLQotc3RhdGljIHZvaWQgcnNjX2h3 X2RlYnVnX2R1bXAoc3RydWN0IGRwdV9yc2NfcHJpdiAqcnNjLCB1MzIgbXV4X3NlbCkKLXsKLQlk c3NfcmVnX3coJnJzYy0+d3JhcHBlcl9pbywgRFBVX1JTQ0NfV1JBUFBFUl9ERUJVR19CVVMsCi0J CSgobXV4X3NlbCAmIDB4ZikgPDwgMSkgfCBCSVQoMCksIHJzYy0+ZGVidWdfbW9kZSk7Ci19Ci0K LWJvb2wgcnNjX2h3X2lzX2FtY19tb2RlKHN0cnVjdCBkcHVfcnNjX3ByaXYgKnJzYykKLXsKLQly ZXR1cm4gZHNzX3JlZ19yKCZyc2MtPmRydl9pbywgRFBVX1JTQ0NfVENTX0RSVjBfQ09OVFJPTCwK LQkJCXJzYy0+ZGVidWdfbW9kZSkgJiBCSVQoMTYpOwotfQotCi1pbnQgcnNjX2h3X3Rjc193YWl0 KHN0cnVjdCBkcHVfcnNjX3ByaXYgKnJzYykKLXsKLQlpbnQgcmMgPSAtRUJVU1k7Ci0JaW50IGNv dW50LCBzZXFfc3RhdHVzOwotCi0JZHNzX3JlZ193KCZyc2MtPndyYXBwZXJfaW8sIERQVV9SU0ND X1dSQVBQRVJfQ1RSTCwKLQkJCQkJCTB4MCwgcnNjLT5kZWJ1Z19tb2RlKTsKLQlzZXFfc3RhdHVz ID0gZHNzX3JlZ19yKCZyc2MtPndyYXBwZXJfaW8sIERQVV9SU0NDX1dSQVBQRVJfQ1RSTCwKLQkJ CXJzYy0+ZGVidWdfbW9kZSkgJiBCSVQoMSk7Ci0JLyogaWYgc2VxIGJ1c3kgLSBzZXQgVENTIHVz ZSBPSyB0byBoaWdoIGFuZCB3YWl0IGZvciAyMDB1cyAqLwotCWlmIChzZXFfc3RhdHVzKSB7Ci0J CWRzc19yZWdfdygmcnNjLT53cmFwcGVyX2lvLCBEUFVfUlNDQ19XUkFQUEVSX0NUUkwsCi0JCQkJ CQkweDEsIHJzYy0+ZGVidWdfbW9kZSk7Ci0JCXVzbGVlcF9yYW5nZSgxMDAsIDIwMCk7Ci0JCWRz c19yZWdfdygmcnNjLT53cmFwcGVyX2lvLCBEUFVfUlNDQ19XUkFQUEVSX0NUUkwsCi0JCQkJCQkw eDAsIHJzYy0+ZGVidWdfbW9kZSk7Ci0JfQotCi0JLyogY2hlY2sgZm9yIHNlcXVlbmNlIHJ1bm5p bmcgc3RhdHVzIGJlZm9yZSBleGl0aW5nICovCi0JZm9yIChjb3VudCA9IE1BWF9DSEVDS19MT09Q UzsgY291bnQgPiAwOyBjb3VudC0tKSB7Ci0JCXNlcV9zdGF0dXMgPSBkc3NfcmVnX3IoJnJzYy0+ d3JhcHBlcl9pbywgRFBVX1JTQ0NfV1JBUFBFUl9DVFJMLAotCQkJCXJzYy0+ZGVidWdfbW9kZSkg JiBCSVQoMSk7Ci0JCWlmICghc2VxX3N0YXR1cykgewotCQkJcmMgPSAwOwotCQkJYnJlYWs7Ci0J CX0KLQkJdXNsZWVwX3JhbmdlKDEsIDIpOwotCX0KLQotCXJldHVybiByYzsKLX0KLQotaW50IHJz Y19od190Y3NfdXNlX29rKHN0cnVjdCBkcHVfcnNjX3ByaXYgKnJzYykKLXsKLQlkc3NfcmVnX3co JnJzYy0+d3JhcHBlcl9pbywgRFBVX1JTQ0NfV1JBUFBFUl9DVFJMLAotCQkJCQkJMHgxLCByc2Mt PmRlYnVnX21vZGUpOwotCXJldHVybiAwOwotfQotCi1pbnQgZHB1X3JzY19od19yZWdpc3Rlcihz dHJ1Y3QgZHB1X3JzY19wcml2ICpyc2MpCi17Ci0JcHJfZGVidWcoInJzYyBoYXJkd2FyZSByZWdp c3RlclxuIik7Ci0KLQlyc2MtPmh3X29wcy5pbml0ID0gcnNjX2h3X2luaXQ7Ci0JcnNjLT5od19v cHMudGltZXJfdXBkYXRlID0gcnNjX2h3X3RpbWVyX3VwZGF0ZTsKLQotCXJzYy0+aHdfb3BzLnRj c193YWl0ID0gcnNjX2h3X3Rjc193YWl0OwotCXJzYy0+aHdfb3BzLnRjc191c2Vfb2sgPSByc2Nf aHdfdGNzX3VzZV9vazsKLQlyc2MtPmh3X29wcy5pc19hbWNfbW9kZSA9IHJzY19od19pc19hbWNf bW9kZTsKLQotCXJzYy0+aHdfb3BzLmh3X3ZzeW5jID0gcnNjX2h3X3ZzeW5jOwotCXJzYy0+aHdf b3BzLnN0YXRlX3VwZGF0ZSA9IGRwdV9yc2Nfc3RhdGVfdXBkYXRlOwotCXJzYy0+aHdfb3BzLmRl YnVnX3Nob3cgPSBkcHVfcnNjX2RlYnVnX3Nob3c7Ci0JcnNjLT5od19vcHMubW9kZV9jdHJsID0g cnNjX2h3X21vZGVfY3RybDsKLQlyc2MtPmh3X29wcy5kZWJ1Z19kdW1wID0gcnNjX2h3X2RlYnVn X2R1bXA7Ci0KLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20v ZHB1X3JzY19wcml2LmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwdV9yc2NfcHJpdi5oCmRlbGV0 ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMjhhMzM5Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMv Z3B1L2RybS9tc20vZHB1X3JzY19wcml2LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxOTEgKzAsMCBA QAotLyogQ29weXJpZ2h0IChjKSAyMDE2LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwg cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9u bHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICovCi0KLSNpZm5kZWYgX0RQVV9SU0Nf UFJJVl9IXwotI2RlZmluZSBfRFBVX1JTQ19QUklWX0hfCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJu ZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9kcHVfaW9fdXRpbC5oPgotI2luY2x1ZGUgPGxpbnV4L2Rw dV9yc2MuaD4KLQotI2luY2x1ZGUgPHNvYy9xY29tL3Rjcy5oPgotI2luY2x1ZGUgImRwdV9wb3dl cl9oYW5kbGUuaCIKLQotI2RlZmluZSBEUFVfUlNDX0NPTVBBVElCTEUgImRpc3BfcnNjYyIKLQot I2RlZmluZSBNQVhfUlNDX0NPVU5UCQk1Ci0KLSNkZWZpbmUgQUxMX01PREVTX0RJU0FCTEVECTB4 MAotI2RlZmluZSBPTkxZX01PREVfMF9FTkFCTEVECTB4MQotI2RlZmluZSBPTkxZX01PREVfMF8x X0VOQUJMRUQJMHgzCi0jZGVmaW5lIEFMTF9NT0RFU19FTkFCTEVECTB4NwotCi0jZGVmaW5lIE1B WF9DT1VOVF9TSVpFX1NVUFBPUlRFRAkxMjgKLQotc3RydWN0IGRwdV9yc2NfcHJpdjsKLQotLyoq Ci0gKiByc2NfbW9kZV9yZXE6IGRwdSByc2MgbW9kZSByZXF1ZXN0IGluZm9ybWF0aW9uCi0gKiBN T0RFX1JFQUQ6IHJlYWQgdnN5bmMgc3RhdHVzCi0gKiBNT0RFX1VQREFURTogbW9kZSB0aW1lc2xv dCB1cGRhdGUKLSAqICAgICAgICAgICAgMHgwOiBhbGwgbW9kZXMgYXJlIGRpc2FibGVkLgotICog ICAgICAgICAgICAweDE6IE1vZGUtMCBpcyBlbmFibGVkIGFuZCBvdGhlciB0d28gbW9kZXMgYXJl IGRpc2FibGVkLgotICogICAgICAgICAgICAweDM6IE1vZGUtMCAmIE1vZGUtMSBhcmUgZW5hYmxl ZCBhbmQgbW9kZS0yIGlzIGRpc2FibGVkLgotICogICAgICAgICAgICAweDc6IGFsbCBtb2RlcyBh cmUgZW5hYmxlZC4KLSAqLwotZW51bSByc2NfbW9kZV9yZXEgewotCU1PREVfUkVBRCwKLQlNT0RF X1VQREFURSA9IDB4MSwKLX07Ci0KLS8qKgotICogcnNjX3ZzeW5jX3JlcTogZHB1IHJzYyB2c3lu YyByZXF1ZXN0IGluZm9ybWF0aW9uCi0gKiBWU1lOQ19SRUFEOiByZWFkIHZzeW5jIHN0YXR1cwot ICogVlNZTkNfUkVBRF9WU1lOQzA6IHJlYWQgdmFsdWUgdnN5bmMwIHRpbWVzdGFtcCAoY2FzdCB0 byBpbnQgZnJvbSB1MzIpCi0gKiBWU1lOQ19FTkFCTEU6IGVuYWJsZSByc2Mgd3JhcHBlciB2c3lu YyBzdGF0dXMKLSAqIFZTWU5DX0RJU0FCTEU6IGRpc2FibGUgcnNjIHdyYXBwZXIgdnN5bmMgc3Rh dHVzCi0gKi8KLWVudW0gcnNjX3ZzeW5jX3JlcSB7Ci0JVlNZTkNfUkVBRCwKLQlWU1lOQ19SRUFE X1ZTWU5DMCwKLQlWU1lOQ19FTkFCTEUsCi0JVlNZTkNfRElTQUJMRSwKLX07Ci0KLS8qKgotICog c3RydWN0IGRwdV9yc2NfaHdfb3BzIC0gZHB1IHJlc291cmNlIHN0YXRlIGNvb3JkaW5hdG9yIGhh cmR3YXJlIG9wcwotICogQGluaXQ6CQkJSW5pdGlhbGl6ZSB0aGUgc2VxdWVuY2VyLCBzb2x2ZXIs IHF0aW1lciwKLQkJCQlldGMuIGhhcmR3YXJlIGJsb2NrcyBvbiBSU0MuCi0gKiBAdGltZXJfdXBk YXRlOgkJdXBkYXRlIHRoZSBzdGF0aWMgd3JhcHBlciB0aW1lIGFuZCBwZGMvcnNjCi0JCQkJYmFj a29mZiB0aW1lLgotICogQHRjc193YWl0OgkJCVdhaXRzIGZvciBUQ1MgYmxvY2sgT0sgdG8gYWxs b3cgc2VuZGluZyBhCi0gKgkJCQlUQ1MgY29tbWFuZC4KLSAqIEBod192c3luYzoJCQlFbmFibGVz IHRoZSB2c3luYyBvbiBSU0MgYmxvY2suCi0gKiBAdGNzX3VzZV9vazoJCQlzZXQgVENTIHNldCB0 byBoaWdoIHRvIGFsbG93IFJTQyB0byB1c2UgaXQuCi0gKiBAaXNfYW1jX21vZGU6CQlDaGVjayBj dXJyZW50IGFtYyBtb2RlIHN0YXR1cwotICogQGRlYnVnX2R1bXA6CQkJZHVtcCBkZWJ1ZyBidXMg cmVnaXN0ZXJzIG9yIGVuYWJsZSBkZWJ1ZyBidXMKLSAqIEBzdGF0ZV91cGRhdGU6CQlFbmFibGUv b3ZlcnJpZGUgdGhlIHNvbHZlciBiYXNlZCBvbiByc2Mgc3RhdGUKLSAqICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3RhdHVzIChjb21tYW5kL3ZpZGVvKQotICogQG1vZGVfc2hvdzoJCQlz aG93cyBjdXJyZW50IG1vZGUgc3RhdHVzLCBtb2RlMC8xLzIKLSAqIEBkZWJ1Z19zaG93OgkJCVNo b3cgY3VycmVudCBkZWJ1ZyBzdGF0dXMuCi0gKi8KLQotc3RydWN0IGRwdV9yc2NfaHdfb3BzIHsK LQlpbnQgKCppbml0KShzdHJ1Y3QgZHB1X3JzY19wcml2ICpyc2MpOwotCWludCAoKnRpbWVyX3Vw ZGF0ZSkoc3RydWN0IGRwdV9yc2NfcHJpdiAqcnNjKTsKLQlpbnQgKCp0Y3Nfd2FpdCkoc3RydWN0 IGRwdV9yc2NfcHJpdiAqcnNjKTsKLQlpbnQgKCpod192c3luYykoc3RydWN0IGRwdV9yc2NfcHJp diAqcnNjLCBlbnVtIHJzY192c3luY19yZXEgcmVxdWVzdCwKLQkJY2hhciAqYnVmZmVyLCBpbnQg YnVmZmVyX3NpemUsIHUzMiBtb2RlKTsKLQlpbnQgKCp0Y3NfdXNlX29rKShzdHJ1Y3QgZHB1X3Jz Y19wcml2ICpyc2MpOwotCWJvb2wgKCppc19hbWNfbW9kZSkoc3RydWN0IGRwdV9yc2NfcHJpdiAq cnNjKTsKLQl2b2lkICgqZGVidWdfZHVtcCkoc3RydWN0IGRwdV9yc2NfcHJpdiAqcnNjLCB1MzIg bXV4X3NlbCk7Ci0JaW50ICgqc3RhdGVfdXBkYXRlKShzdHJ1Y3QgZHB1X3JzY19wcml2ICpyc2Ms IGVudW0gZHB1X3JzY19zdGF0ZSBzdGF0ZSk7Ci0JaW50ICgqZGVidWdfc2hvdykoc3RydWN0IHNl cV9maWxlICpzLCBzdHJ1Y3QgZHB1X3JzY19wcml2ICpyc2MpOwotCWludCAoKm1vZGVfY3RybCko c3RydWN0IGRwdV9yc2NfcHJpdiAqcnNjLCBlbnVtIHJzY19tb2RlX3JlcSByZXF1ZXN0LAotCQlj aGFyICpidWZmZXIsIGludCBidWZmZXJfc2l6ZSwgdTMyIG1vZGUpOwotfTsKLQotLyoqCi0gKiBz dHJ1Y3QgZHB1X3JzY190aW1lcl9jb25maWc6IHRoaXMgaXMgaW50ZXJuYWwgY29uZmlndXJhdGlv biBiZXR3ZWVuCi0gKiByc2MgYW5kIHJzY19odyBBUEkuCi0gKgotICogQHN0YXRpY193YWtldXBf dGltZV9uczoJd3JhcHBlciBiYWNrb2ZmIHRpbWUgaW4gbmFubyBzZWNvbmRzCi0gKiBAcnNjX2Jh Y2tvZmZfdGltZV9uczoJcnNjIGJhY2tvZmYgdGltZSBpbiBuYW5vIHNlY29uZHMKLSAqIEBwZGNf YmFja29mZl90aW1lX25zOglwZGMgYmFja29mZiB0aW1lIGluIG5hbm8gc2Vjb25kcwotICogQHJz Y19tb2RlX3RocmVzaG9sZF90aW1lX25zOglyc2MgbW9kZSB0aHJlc2hvbGQgdGltZSBpbiBuYW5v IHNlY29uZHMKLSAqIEByc2NfdGltZV9zbG90XzBfbnM6CQltb2RlLTAgdGltZSBzbG90IHRocmVz aG9sZCBpbiBuYW5vIHNlY29uZHMKLSAqIEByc2NfdGltZV9zbG90XzFfbnM6CQltb2RlLTEgdGlt ZSBzbG90IHRocmVzaG9sZCBpbiBuYW5vIHNlY29uZHMKLSAqIEByc2NfdGltZV9zbG90XzJfbnM6 CQltb2RlLTIgdGltZSBzbG90IHRocmVzaG9sZCBpbiBuYW5vIHNlY29uZHMKLSAqLwotc3RydWN0 IGRwdV9yc2NfdGltZXJfY29uZmlnIHsKLQl1MzIgc3RhdGljX3dha2V1cF90aW1lX25zOwotCi0J dTMyIHJzY19iYWNrb2ZmX3RpbWVfbnM7Ci0JdTMyIHBkY19iYWNrb2ZmX3RpbWVfbnM7Ci0JdTMy IHJzY19tb2RlX3RocmVzaG9sZF90aW1lX25zOwotCXUzMiByc2NfdGltZV9zbG90XzBfbnM7Ci0J dTMyIHJzY190aW1lX3Nsb3RfMV9uczsKLQl1MzIgcnNjX3RpbWVfc2xvdF8yX25zOwotfTsKLQot LyoqCi0gKiBzdHJ1Y3QgZHB1X3JzY19wcml2OiBkcHUgcmVzb3VyY2Ugc3RhdGUgY29vcmRpbmF0 b3IocnNjKSBwcml2YXRlIGhhbmRsZQotICogQHZlcnNpb246CQlyc2Mgc2VxdWVuY2UgdmVyc2lv bgotICogQHBoYW5kbGU6CQltb2R1bGUgcG93ZXIgaGFuZGxlIGZvciBjbG9ja3MKLSAqIEBwY2xp ZW50OgkJbW9kdWxlIHBvd2VyIGNsaWVudCBvZiBwaGFuZGxlCi0gKiBAZnM6CQkJIk1EU1MgR0RT QyIgaGFuZGxlCi0gKgotICogQGRpc3BfcnNjOgkJZGlzcGxheSByc2MgaGFuZGxlCi0gKiBAZHJ2 X2lvOgkJZHB1IGRydiBpbyBkYXRhIG1hcHBpbmcKLSAqIEB3cmFwcGVyX2lvOgkJd3JhcHBlciBp byBkYXRhIG1hcHBpbmcKLSAqCi0gKiBAY2xpZW50X2xpc3Q6CWN1cnJlbnQgcnNjIGNsaWVudCBs aXN0IGhhbmRsZQotICogQGV2ZW50X2xpc3Q6CQljdXJyZW50IHJzYyBldmVudCBsaXN0IGhhbmRs ZQotICogQGNsaWVudF9sb2NrOgljdXJyZW50IHJzYyBjbGllbnQgc3luY2hyb25pemF0aW9uIGxv Y2sKLSAqCi0gKiB0aW1lcl9jb25maWc6CWN1cnJlbnQgcnNjIHRpbWVyIGNvbmZpZ3VyYXRpb24K LSAqIGNtZF9jb25maWc6CQljdXJyZW50IHBhbmVsIGNvbmZpZwotICogY3VycmVudF9zdGF0ZToJ Y3VycmVudCByc2Mgc3RhdGUgKHZpZGVvL2NvbW1hbmQpLCBzb2x2ZXIKLSAqICAgICAgICAgICAg ICAgICAgICAgIG92ZXJyaWRlL2VuYWJsZWQuCi0gKiBkZWJ1Z19tb2RlOgkJZW5hYmxlcyB0aGUg bG9nZ2luZyBmb3IgZWFjaCByZWdpc3RlciByZWFkL3dyaXRlCi0gKiBkZWJ1Z2ZzX3Jvb3Q6CWRl YnVnZnMgZmlsZSBzeXN0ZW0gcm9vdCBub2RlCi0gKgotICogaHdfb3BzOgkJZHB1IHJzYyBoYXJk d2FyZSBvcGVyYXRpb25zCi0gKiBwb3dlcl9jb2xsYXBzZToJaWYgYWxsIGNsaWVudHMgYXJlIGlu IElETEUgc3RhdGUgdGhlbiBpdCBlbnRlcnMgaW4KLSAqCQkJbW9kZTIgc3RhdGUgYW5kIGVuYWJs ZSB0aGUgcG93ZXIgY29sbGFwc2Ugc3RhdGUKLSAqIHBvd2VyX2NvbGxhcHNlX2Jsb2NrOkJ5IGRl ZmF1bHQsIHJzYyBtb3ZlIHRvIG1vZGUtMiBpZiBhbGwgY2xpZW50cyBhcmUgaW4KLSAqCQkJaW52 YWxpZCBzdGF0ZS4gSXQgY2FuIGJlIGJsb2NrZWQgYnkgdGhpcyBib29sZWFuIGVudHJ5LgotICog cHJpbWFyeV9jbGllbnQ6CUEgY2xpZW50IHdoaWNoIGlzIGFsbG93ZWQgdG8gbWFrZSBjb21tYW5k IHN0YXRlIHJlcXVlc3QKLSAqCQkJYW5kIGFiL2liIHZvdGUgb24gZGlzcGxheSByc2MKLSAqIG1h c3Rlcl9kcm06CQlQcmltYXJ5IGNsaWVudCB3YWl0cyBmb3IgdnN5bmMgb24gdGhpcyBkcm0gb2Jq ZWN0IGJhc2VkCi0gKgkJCW9uIGNydGMgaWQKLSAqLwotc3RydWN0IGRwdV9yc2NfcHJpdiB7Ci0J dTMyIHZlcnNpb247Ci0Jc3RydWN0IGRwdV9wb3dlcl9oYW5kbGUgcGhhbmRsZTsKLQlzdHJ1Y3Qg ZHB1X3Bvd2VyX2NsaWVudCAqcGNsaWVudDsKLQlzdHJ1Y3QgcmVndWxhdG9yICpmczsKLQotCXN0 cnVjdCBycG1oX2NsaWVudCAqZGlzcF9yc2M7Ci0Jc3RydWN0IGRzc19pb19kYXRhIGRydl9pbzsK LQlzdHJ1Y3QgZHNzX2lvX2RhdGEgd3JhcHBlcl9pbzsKLQotCXN0cnVjdCBsaXN0X2hlYWQgY2xp ZW50X2xpc3Q7Ci0Jc3RydWN0IGxpc3RfaGVhZCBldmVudF9saXN0OwotCXN0cnVjdCBtdXRleCBj bGllbnRfbG9jazsKLQotCXN0cnVjdCBkcHVfcnNjX3RpbWVyX2NvbmZpZyB0aW1lcl9jb25maWc7 Ci0Jc3RydWN0IGRwdV9yc2NfY21kX2NvbmZpZyBjbWRfY29uZmlnOwotCXUzMgljdXJyZW50X3N0 YXRlOwotCi0JdTMyIGRlYnVnX21vZGU7Ci0Jc3RydWN0IGRlbnRyeSAqZGVidWdmc19yb290Owot Ci0Jc3RydWN0IGRwdV9yc2NfaHdfb3BzIGh3X29wczsKLQlib29sIHBvd2VyX2NvbGxhcHNlOwot CWJvb2wgcG93ZXJfY29sbGFwc2VfYmxvY2s7Ci0Jc3RydWN0IGRwdV9yc2NfY2xpZW50ICpwcmlt YXJ5X2NsaWVudDsKLQotCXN0cnVjdCBkcm1fZGV2aWNlICptYXN0ZXJfZHJtOwotfTsKLQotLyoq Ci0gKiBkcHVfcnNjX2h3X3JlZ2lzdGVyKCkgLSByZWdpc3RlciBoYXJkd2FyZSBBUEkKLSAqCi0g KiBAY2xpZW50OgkgQ2xpZW50IHBvaW50ZXIgcHJvdmlkZWQgYnkgZHB1X3JzY19jbGllbnRfY3Jl YXRlKCkuCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHB1X3JzY19od19y ZWdpc3RlcihzdHJ1Y3QgZHB1X3JzY19wcml2ICpyc2MpOwotCi0jZW5kaWYgLyogX0RQVV9SU0Nf UFJJVl9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kcHVfcnNjLmggYi9pbmNsdWRl L2xpbnV4L2RwdV9yc2MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODFiZWE1ZS4u MDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L2RwdV9yc2MuaAorKysgL2Rldi9udWxsCkBAIC0x LDMwMiArMCwwIEBACi0vKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxOCwgVGhlIExpbnV4IEZvdW5k YXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAy IGFuZAotICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKi8KLQotI2lmbmRl ZiBfRFBVX1JTQ19IXwotI2RlZmluZSBfRFBVX1JTQ19IXwotCi0jaW5jbHVkZSA8bGludXgva2Vy bmVsLmg+Ci0KLS8qIHByaW1hcnkgZGlzcGxheSByc2MgaW5kZXggKi8KLSNkZWZpbmUgRFBVX1JT Q19JTkRFWAkJMAotCi0jZGVmaW5lIE1BWF9SU0NfQ0xJRU5UX05BTUVfTEVOIDEyOAotCi0vKiBE Uk0gT2JqZWN0IElEcyBhcmUgbnVtYmVyZWQgZXhjbHVkaW5nIDAsIHVzZSAwIHRvIGluZGljYXRl IGludmFsaWQgQ1JUQyAqLwotI2RlZmluZSBEUFVfUlNDX0lOVkFMSURfQ1JUQ19JRCAwCi0KLS8q KgotICogZXZlbnQgd2lsbCBiZSB0cmlnZ2VyZWQgYmVmb3JlIHNkZSBjb3JlIHBvd2VyIGNvbGxh cHNlLAotICogbWRzcyBnZHNjIGlzIHN0aWxsIG9uCi0gKi8KLSNkZWZpbmUgRFBVX1JTQ19FVkVO VF9QUkVfQ09SRV9QQyAweDEKLS8qKgotICogZXZlbnQgd2lsbCBiZSB0cmlnZ2VyZWQgYWZ0ZXIg c2RlIGNvcmUgY29sbGFwc2UgY29tcGxldGUsCi0gKiBtZHNzIGdkc2MgaXMgb2ZmIG5vdwotICov Ci0jZGVmaW5lIERQVV9SU0NfRVZFTlRfUE9TVF9DT1JFX1BDIDB4MgotLyoqCi0gKiBldmVudCB3 aWxsIGJlIHRyaWdnZXJlZCBiZWZvcmUgcmVzdG9yaW5nIHRoZSBzZGUgY29yZSBmcm9tIHBvd2Vy IGNvbGxhcHNlLAotICogbWRzcyBnZHNjIGlzIHN0aWxsIG9mZgotICovCi0jZGVmaW5lIERQVV9S U0NfRVZFTlRfUFJFX0NPUkVfUkVTVE9SRSAweDQKLS8qKgotICogZXZlbnQgd2lsbCBiZSB0cmln Z2VyZWQgYWZ0ZXIgcmVzdG9yaW5nIHRoZSBzZGUgY29yZSBmcm9tIHBvd2VyIGNvbGxhcHNlLAot ICogbWRzcyBnZHNjIGlzIG9uIG5vdwotICovCi0jZGVmaW5lIERQVV9SU0NfRVZFTlRfUE9TVF9D T1JFX1JFU1RPUkUgMHg4Ci0vKioKLSAqIGV2ZW50IGF0dGFjaGVkIHdpdGggc29sdmVyIHN0YXRl IGVuYWJsZWQKLSAqIGFsbCBjbGllbnRzIGluIGNsa19zdGF0ZSBvciBjbWRfc3RhdGUKLSAqLwot I2RlZmluZSBEUFVfUlNDX0VWRU5UX1NPTFZFUl9FTkFCTEVEIDB4MTAKLS8qKgotICogZXZlbnQg YXR0YWNoZWQgd2l0aCBzb2x2ZXIgc3RhdGUgZGlzYWJsZWQKLSAqIG9uZSBvZiB0aGUgY2xpZW50 IHJlcXVlc3RlZCBmb3IgdmlkIHN0YXRlCi0gKi8KLSNkZWZpbmUgRFBVX1JTQ19FVkVOVF9TT0xW RVJfRElTQUJMRUQgMHgyMAotCi0vKioKLSAqIGRwdV9yc2Nfc3RhdGU6IHNkZSByc2Mgc3RhdGUg aW5mb3JtYXRpb24KLSAqIERQVV9SU0NfSURMRV9TVEFURTogQSBjbGllbnQgcmVxdWVzdHMgZm9y IGlkbGUgc3RhdGUgd2hlbiB0aGVyZSBpcyBubwotICogICAgICAgICAgICAgICAgICAgIHBpeGVs IG9yIGNtZCB0cmFuc2ZlciBleHBlY3RlZC4gQW4gaWRsZSB2b3RlIGZyb20KLSAqICAgICAgICAg ICAgICAgICAgICBhbGwgY2xpZW50cyBsZWFkIHRvIHBvd2VyIGNvbGxhcHNlIHN0YXRlLgotICog RFBVX1JTQ19DTEtfU1RBVEU6ICBBIGNsaWVudCByZXF1ZXN0cyBmb3IgY2xrIHN0YXRlIHdoZW4g aXQgd2FudHMgdG8KLSAqICAgICAgICAgICAgICAgICAgICBvbmx5IGF2b2lkIG1vZGUtMiBlbnRy eS9leGl0LiBGb3IgZXg6IFY0TDIgZHJpdmVyLAotICogICAgICAgICAgICAgICAgICAgIHNkZSBw b3dlciBoYW5kbGUsIGV0Yy4KLSAqIERQVV9SU0NfQ01EX1NUQVRFOiAgQSBjbGllbnQgcmVxdWVz dHMgZm9yIGNtZCBzdGF0ZSB3aGVuIGl0IHdhbnRzIHRvCi0gKiAgICAgICAgICAgICAgICAgICAg ZW5hYmxlIHRoZSBzb2x2ZXIgbW9kZS4KLSAqIERQVV9SU0NfVklEX1NUQVRFOiAgQSBjbGllbnQg cmVxdWVzdHMgZm9yIHZpZCBzdGF0ZSBpdCB3YW50cyB0byBhdm9pZAotICogICAgICAgICAgICAg ICAgICAgIHNvbHZlciBlbmFibGUgYmVjYXVzZSBjbGllbnQgaXMgZmV0Y2hpbmcgZGF0YSBmcm9t Ci0gKiAgICAgICAgICAgICAgICAgICAgY29udGludW91c2x5LgotICovCi1lbnVtIGRwdV9yc2Nf c3RhdGUgewotCURQVV9SU0NfSURMRV9TVEFURSwKLQlEUFVfUlNDX0NMS19TVEFURSwKLQlEUFVf UlNDX0NNRF9TVEFURSwKLQlEUFVfUlNDX1ZJRF9TVEFURSwKLX07Ci0KLS8qKgotICogc3RydWN0 IGRwdV9yc2NfY2xpZW50OiBzdG9yZXMgdGhlIHJzYyBjbGllbnQgZm9yIHNkZSBkcml2ZXIKLSAq IEBuYW1lOgluYW1lIG9mIHRoZSBjbGllbnQKLSAqIEBjdXJyZW50X3N0YXRlOiAgIGN1cnJlbnQg Y2xpZW50IHN0YXRlCi0gKiBAY3J0Y19pZDoJCWNydGNfaWQgYXNzb2NpYXRlZCB3aXRoIHRoaXMg cnNjIGNsaWVudC4KLSAqIEByc2NfaW5kZXg6CXJzYyBpbmRleCBvZiBhIGNsaWVudCAtIG9ubHkg aW5kZXggIjAiIHZhbGlkLgotICogQGlkOgkJSW5kZXggb2YgY2xpZW50LiBJdCB3aWxsIGJlIGFz c2lnbmVkIGR1cmluZyBjbGllbnRfY3JlYXRlIGNhbGwKLSAqIEBsaXN0OglsaXN0IHRvIGF0dGFj aCBjbGllbnQgbWFzdGVyIGxpc3QKLSAqLwotc3RydWN0IGRwdV9yc2NfY2xpZW50IHsKLQljaGFy IG5hbWVbTUFYX1JTQ19DTElFTlRfTkFNRV9MRU5dOwotCXNob3J0IGN1cnJlbnRfc3RhdGU7Ci0J aW50IGNydGNfaWQ7Ci0JdTMyIHJzY19pbmRleDsKLQl1MzIgaWQ7Ci0Jc3RydWN0IGxpc3RfaGVh ZCBsaXN0OwotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgZHB1X3JzY19ldmVudDogbG9jYWwgZXZlbnQg cmVnaXN0cmF0aW9uIGVudHJ5IHN0cnVjdHVyZQotICogQGNiX2Z1bmM6CVBvaW50ZXIgdG8gZGVz aXJlZCBjYWxsYmFjayBmdW5jdGlvbgotICogQHVzcjoJVXNlciBwb2ludGVyIHRvIHBhc3MgdG8g Y2FsbGJhY2sgb24gZXZlbnQgdHJpZ2dlcgotICogQHJzY19pbmRleDoJcnNjIGluZGV4IG9mIGEg Y2xpZW50IC0gb25seSBpbmRleCAiMCIgdmFsaWQuCi0gKiBAZXZlbnRfdHlwZToJcmVmZXIgY29t bWVudHMgaW4gZXZlbnRfcmVnaXN0ZXIKLSAqIEBsaXN0OglsaXN0IHRvIGF0dGFjaCBldmVudCBt YXN0ZXIgbGlzdAotICovCi1zdHJ1Y3QgZHB1X3JzY19ldmVudCB7Ci0Jdm9pZCAoKmNiX2Z1bmMp KHVpbnQzMl90IGV2ZW50X3R5cGUsIHZvaWQgKnVzcik7Ci0Jdm9pZCAqdXNyOwotCXUzMiByc2Nf aW5kZXg7Ci0JdWludDMyX3QgZXZlbnRfdHlwZTsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci19 OwotCi0vKioKLSAqIHN0cnVjdCBkcHVfcnNjX2NtZF9jb25maWc6IHByb3ZpZGVzIHBhbmVsIGNv bmZpZ3VyYXRpb24gdG8gcnNjCi0gKiB3aGVuIGNsaWVudCBpcyBjb21tYW5kIG1vZGUuIEl0IGlz IG5vdCByZXF1aXJlZCB0byBzZXQgaXQgZHVyaW5nCi0gKiB2aWRlbyBtb2RlLgotICoKLSAqIEBm cHM6CXBhbmVsIHRlIGludGVydmFsCi0gKiBAdnRvdGFsOgljdXJyZW50IHZlcnRpY2FsIHRvdGFs IChoZWlnaHQgKyB2YnAgKyB2ZnApCi0gKiBAaml0dGVyX251bWVyOiBwYW5lbCBqaXR0ZXIgbnVt ZXJhdG9yIHZhbHVlLiBUaGlzIGNvbmZpZyBjYXVzZXMgcnNjL3NvbHZlcgotICogICAgICAgICAg ICAgICAgZWFybHkgYmVmb3JlIHRlLiBEZWZhdWx0IGlzIDAuOCUgaml0dGVyLgotICogQGppdHRl cl9kZW5vbTogcGFuZWwgaml0dGVyIGRlbm9taW5hdG9yLgotICogQHByZWZpbGxfbGluZXM6CW1h eCBwcmVmaWxsIGxpbmVzIGJhc2VkIG9uIHBhbmVsCi0gKi8KLXN0cnVjdCBkcHVfcnNjX2NtZF9j b25maWcgewotCXUzMiBmcHM7Ci0JdTMyIHZ0b3RhbDsKLQl1MzIgaml0dGVyX251bWVyOwotCXUz MiBqaXR0ZXJfZGVub207Ci0JdTMyIHByZWZpbGxfbGluZXM7Ci19OwotCi0jaWZkZWYgQ09ORklH X0RSTV9EUFVfUlNDCi0vKioKLSAqIGRwdV9yc2NfY2xpZW50X2NyZWF0ZSgpIC0gY3JlYXRlIHRo ZSBjbGllbnQgZm9yIHNkZSByc2MuCi0gKiBEaWZmZXJlbnQgZGlzcGxheXMgbGlrZSBEU0ksIEhE TUksIERQLCBXQiwgZXRjIHNob3VsZCBjYWxsIHRoaXMKLSAqIGFwaSB0byByZWdpc3RlciB0aGVp ciB2b3RlIGZvciBycG1oLiBUaGV5IHN0aWxsIG5lZWQgdG8gdm90ZSBmb3IKLSAqIHBvd2VyIGhh bmRsZSB0byBnZXQgdGhlIGNsb2Nrcy4KLQotICogQHJzY19pbmRleDogICBBIGNsaWVudCB3aWxs IGJlIGNyZWF0ZWQgb24gdGhpcyBSU0MuIEFzIG9mIG5vdyBvbmx5Ci0gKiAgICAgICAgICAgICAg IERQVV9SU0NfSU5ERVggaXMgdmFsaWQgcnNjIGluZGV4LgotICogQG5hbWU6CSBDYWxsZXIgbmVl ZHMgdG8gcHJvdmlkZSBzb21lIHZhbGlkIHN0cmluZyB0byBpZGVudGlmeQotICogICAgICAgICAg ICAgICB0aGUgY2xpZW50LiAicHJpbWFyeSIsICJkcCIsICJoZG1pIiBhcmUgc3VnZ2VzdGVkIG5h bWUuCi0gKiBAaXNfcHJpbWFyeToJIENhbGxlciBuZWVkcyB0byBwcm92aWRlIGluZm9ybWF0aW9u IGlmIGNsaWVudCBpcyBwcmltYXJ5Ci0gKiAgICAgICAgICAgICAgIG9yIG5vdC4gUHJpbWFyeSBj bGllbnQgdm90ZXMgd2lsbCBiZSByZWRpcmVjdGVkIHRvCi0gKiAgICAgICAgICAgICAgIGRpc3Bs YXkgcnNjLgotICogQGNvbmZpZzoJIGZwcywgdnRvdGFsLCBwb3JjaGVzLCBldGMgY29uZmlndXJh dGlvbiBmb3IgY29tbWFuZCBtb2RlCi0gKiAgICAgICAgICAgICAgIHBhbmVsCi0gKgotICogUmV0 dXJuOiBjbGllbnQgbm9kZSBwb2ludGVyLgotICovCi1zdHJ1Y3QgZHB1X3JzY19jbGllbnQgKmRw dV9yc2NfY2xpZW50X2NyZWF0ZSh1MzIgcnNjX2luZGV4LCBjaGFyICpuYW1lLAotCQlib29sIGlz X3ByaW1hcnlfZGlzcGxheSk7Ci0KLS8qKgotICogZHB1X3JzY19jbGllbnRfZGVzdHJveSgpIC0g RGVzdHJveSB0aGUgc2RlIHJzYyBjbGllbnQuCi0gKgotICogQGNsaWVudDoJIENsaWVudCBwb2lu dGVyIHByb3ZpZGVkIGJ5IGRwdV9yc2NfY2xpZW50X2NyZWF0ZSgpLgotICoKLSAqIFJldHVybjog bm9uZQotICovCi12b2lkIGRwdV9yc2NfY2xpZW50X2Rlc3Ryb3koc3RydWN0IGRwdV9yc2NfY2xp ZW50ICpjbGllbnQpOwotCi0vKioKLSAqIGRwdV9yc2NfY2xpZW50X3N0YXRlX3VwZGF0ZSgpIC0g cnNjIGNsaWVudCBzdGF0ZSB1cGRhdGUKLSAqIFZpZGVvIG1vZGUsIGNtZCBtb2RlIGFuZCBjbGsg c3RhdGUgYXJlIHN1cHBvcnRlZCBhcyBtb2Rlcy4gQSBjbGllbnQgbmVlZCB0bwotICogc2V0IHRo aXMgcHJvcGVydHkgZHVyaW5nIHBhbmVsIHRpbWUuIEEgc3dpdGNoaW5nIGNsaWVudCBjYW4gc2V0 IHRoZQotICogcHJvcGVydHkgdG8gY2hhbmdlIHRoZSBzdGF0ZQotICoKLSAqIEBjbGllbnQ6CSBD bGllbnQgcG9pbnRlciBwcm92aWRlZCBieSBkcHVfcnNjX2NsaWVudF9jcmVhdGUoKS4KLSAqIEBz dGF0ZToJIENsaWVudCBzdGF0ZSAtIHZpZGVvL2NtZAotICogQGNvbmZpZzoJIGZwcywgdnRvdGFs LCBwb3JjaGVzLCBldGMgY29uZmlndXJhdGlvbiBmb3IgY29tbWFuZCBtb2RlCi0gKiAgICAgICAg ICAgICAgIHBhbmVsCi0gKiBAY3J0Y19pZDoJIGN1cnJlbnQgY2xpZW50J3MgY3J0YyBpZAotICog QHdhaXRfdmJsYW5rX2NydGNfaWQ6CU91dHB1dCBwYXJhbWV0ZXIuIElmIHNldCB0byBub24temVy bywgcnNjIGh3Ci0gKgkJCQlzdGF0ZSB1cGRhdGUgcmVxdWlyZXMgYSB3YWl0IGZvciBvbmUgdmJs YW5rIG9uCi0gKgkJCQl0aGUgcHJpbWFyeSBjcnRjLiBJbiB0aGF0IGNhc2UsIHRoaXMgb3V0cHV0 Ci0gKgkJCQlwYXJhbSB3aWxsIGJlIHNldCB0byB0aGUgY3J0YyBvbiB3aGljaCB0byB3YWl0Lgot ICoJCQkJSWYgRFBVX1JTQ19JTlZBTElEX0NSVENfSUQsIG5vIHdhaXQgbmVjZXNzYXJ5Ci0gKgot ICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHB1X3JzY19jbGllbnRfc3RhdGVfdXBk YXRlKHN0cnVjdCBkcHVfcnNjX2NsaWVudCAqY2xpZW50LAotCWVudW0gZHB1X3JzY19zdGF0ZSBz dGF0ZSwKLQlzdHJ1Y3QgZHB1X3JzY19jbWRfY29uZmlnICpjb25maWcsIGludCBjcnRjX2lkLAot CWludCAqd2FpdF92YmxhbmtfY3J0Y19pZCk7Ci0KLS8qKgotICogZHB1X3JzY19jbGllbnRfaXNf c3RhdGVfdXBkYXRlX2NvbXBsZXRlKCkgLSBjaGVjayBpZiBzdGF0ZSB1cGRhdGUgaXMgY29tcGxl dGUKLSAqIFJTQyBzdGF0ZSB0cmFuc2l0aW9uIGlzIG5vdCBjb21wbGV0ZSB1bnRpbCBIVyByZWNl aXZlcyBWQkxBTksgc2lnbmFsLiBUaGlzCi0gKiBmdW5jdGlvbiBjaGVja3MgUlNDIEhXIHRvIGRl dGVybWluZSB3aGV0aGVyIHRoYXQgc2lnbmFsIGhhcyBiZWVuIHJlY2VpdmVkLgotICogQGNsaWVu dDoJIENsaWVudCBwb2ludGVyIHByb3ZpZGVkIGJ5IGRwdV9yc2NfY2xpZW50X2NyZWF0ZSgpLgot ICoKLSAqIFJldHVybjogdHJ1ZSBpZiB0aGUgc3RhdGUgdXBkYXRlIGhhcyBjb21wbGV0ZWQuCi0g Ki8KLWJvb2wgZHB1X3JzY19jbGllbnRfaXNfc3RhdGVfdXBkYXRlX2NvbXBsZXRlKAotCQlzdHJ1 Y3QgZHB1X3JzY19jbGllbnQgKmNhbGxlcl9jbGllbnQpOwotCi0vKioKLSAqIGRwdV9yc2NfY2xp ZW50X3ZvdGUoKSAtIGFiL2liIHZvdGUgZnJvbSByc2MgY2xpZW50Ci0gKgotICogQGNsaWVudDoJ IENsaWVudCBwb2ludGVyIHByb3ZpZGVkIGJ5IGRwdV9yc2NfY2xpZW50X2NyZWF0ZSgpLgotICog QGJ1c19pZDoJIGRhdGEgYnVzIGlkZW50aWZpZXIKLSAqIEBhYjoJCSBhZ2dyZWdhdGVkIGJhbmR3 aWR0aCB2b3RlIGZyb20gY2xpZW50LgotICogQGliOgkJIGluc3RhbnQgYmFuZHdpZHRoIHZvdGUg ZnJvbSBjbGllbnQuCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHB1X3Jz Y19jbGllbnRfdm90ZShzdHJ1Y3QgZHB1X3JzY19jbGllbnQgKmNhbGxlcl9jbGllbnQsCi0JdTMy IGJ1c19pZCwgdTY0IGFiX3ZvdGUsIHU2NCBpYl92b3RlKTsKLQotLyoqCi0gKiBkcHVfcnNjX3Jl Z2lzdGVyX2V2ZW50IC0gcmVnaXN0ZXIgYSBjYWxsYmFjayBmdW5jdGlvbiBmb3IgYW4gZXZlbnQK LSAqIEByc2NfaW5kZXg6ICAgQSBjbGllbnQgd2lsbCBiZSBjcmVhdGVkIG9uIHRoaXMgUlNDLiBB cyBvZiBub3cgb25seQotICogICAgICAgICAgICAgICBEUFVfUlNDX0lOREVYIGlzIHZhbGlkIHJz YyBpbmRleC4KLSAqIEBldmVudF90eXBlOiAgZXZlbnQgdHlwZSB0byByZWdpc3RlcjsgY2xpZW50 IHNldHMgMHgzIGlmIGl0IHdhbnRzCi0gKiAgICAgICAgICAgICAgIHRvIHJlZ2lzdGVyIGZvciBD T1JFX1BDIGFuZCBDT1JFX1JFU1RPUkUgLSBib3RoIGV2ZW50cy4KLSAqIEBjYl9mdW5jOiAgICAg UG9pbnRlciB0byBkZXNpcmVkIGNhbGxiYWNrIGZ1bmN0aW9uCi0gKiBAdXNyOiAgICAgICAgIFVz ZXIgcG9pbnRlciB0byBwYXNzIHRvIGNhbGxiYWNrIG9uIGV2ZW50IHRyaWdnZXIKLSAqIFJldHVy bnM6IGRwdV9yc2NfZXZlbnQgcG9pbnRlciBvbiBzdWNjZXNzCi0gKi8KLXN0cnVjdCBkcHVfcnNj X2V2ZW50ICpkcHVfcnNjX3JlZ2lzdGVyX2V2ZW50KGludCByc2NfaW5kZXgsIHVpbnQzMl90IGV2 ZW50X3R5cGUsCi0JCXZvaWQgKCpjYl9mdW5jKSh1aW50MzJfdCBldmVudF90eXBlLCB2b2lkICp1 c3IpLCB2b2lkICp1c3IpOwotCi0vKioKLSAqIGRwdV9yc2NfdW5yZWdpc3Rlcl9ldmVudCAtIHVu cmVnaXN0ZXIgY2FsbGJhY2sgZm9yIGFuIGV2ZW50Ci0gKiBAZHB1X3JzY19ldmVudDogZXZlbnQg cmV0dXJuZWQgYnkgZHB1X3JzY19yZWdpc3Rlcl9ldmVudAotICovCi12b2lkIGRwdV9yc2NfdW5y ZWdpc3Rlcl9ldmVudChzdHJ1Y3QgZHB1X3JzY19ldmVudCAqZXZlbnQpOwotCi0vKioKLSAqIGlz X2RwdV9yc2NfYXZhaWxhYmxlIC0gY2hlY2sgaWYgZGlzcGxheSByc2MgYXZhaWxhYmxlLgotICog QHJzY19pbmRleDogICBBIGNsaWVudCB3aWxsIGJlIGNyZWF0ZWQgb24gdGhpcyBSU0MuIEFzIG9m IG5vdyBvbmx5Ci0gKiAgICAgICAgICAgICAgIERQVV9SU0NfSU5ERVggaXMgdmFsaWQgcnNjIGlu ZGV4LgotICogUmV0dXJuczogdHJ1ZSBpZiByc2MgaXMgYXZhaWxhYmxlOyBmYWxzZSBpbiBhbGwg b3RoZXIgY2FzZXMKLSAqLwotYm9vbCBpc19kcHVfcnNjX2F2YWlsYWJsZShpbnQgcnNjX2luZGV4 KTsKLQotLyoqCi0gKiBnZXRfZHB1X3JzY19jdXJyZW50X3N0YXRlIC0gZ2V0cyB0aGUgY3VycmVu dCBzdGF0ZSBvZiBzZGUgcnNjLgotICogQHJzY19pbmRleDogICBBIGNsaWVudCB3aWxsIGJlIGNy ZWF0ZWQgb24gdGhpcyBSU0MuIEFzIG9mIG5vdyBvbmx5Ci0gKiAgICAgICAgICAgICAgIERQVV9S U0NfSU5ERVggaXMgdmFsaWQgcnNjIGluZGV4LgotICogUmV0dXJuczogY3VycmVudCBzdGF0ZSBp ZiByc2MgYXZhaWxhYmxlOyBEUFVfUlNDX0lETEVfU1RBVEUgZm9yCi0gKiAgICAgICAgICBhbGwg b3RoZXIgY2FzZXMKLSAqLwotZW51bSBkcHVfcnNjX3N0YXRlIGdldF9kcHVfcnNjX2N1cnJlbnRf c3RhdGUoaW50IHJzY19pbmRleCk7Ci0KLSNlbHNlCi0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGRw dV9yc2NfY2xpZW50ICpkcHVfcnNjX2NsaWVudF9jcmVhdGUodTMyIHJzY19pbmRleCwKLQkJY2hh ciAqbmFtZSwgYm9vbCBpc19wcmltYXJ5X2Rpc3BsYXkpCi17Ci0JcmV0dXJuIE5VTEw7Ci19Ci0K LXN0YXRpYyBpbmxpbmUgdm9pZCBkcHVfcnNjX2NsaWVudF9kZXN0cm95KHN0cnVjdCBkcHVfcnNj X2NsaWVudCAqY2xpZW50KQotewotfQotCi1zdGF0aWMgaW5saW5lIGludCBkcHVfcnNjX2NsaWVu dF9zdGF0ZV91cGRhdGUoc3RydWN0IGRwdV9yc2NfY2xpZW50ICpjbGllbnQsCi0JZW51bSBkcHVf cnNjX3N0YXRlIHN0YXRlLAotCXN0cnVjdCBkcHVfcnNjX2NtZF9jb25maWcgKmNvbmZpZywgaW50 IGNydGNfaWQsCi0JaW50ICp3YWl0X3ZibGFua19jcnRjX2lkKQotewotCXJldHVybiAwOwotfQot Ci1zdGF0aWMgaW5saW5lIGJvb2wgZHB1X3JzY19jbGllbnRfaXNfc3RhdGVfdXBkYXRlX2NvbXBs ZXRlKAotCQlzdHJ1Y3QgZHB1X3JzY19jbGllbnQgKmNhbGxlcl9jbGllbnQpCi17Ci0JcmV0dXJu IGZhbHNlOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBkcHVfcnNjX2NsaWVudF92b3RlKHN0cnVj dCBkcHVfcnNjX2NsaWVudCAqY2FsbGVyX2NsaWVudCwKLQl1MzIgYnVzX2lkLCB1NjQgYWJfdm90 ZSwgdTY0IGliX3ZvdGUpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0 IGRwdV9yc2NfZXZlbnQgKmRwdV9yc2NfcmVnaXN0ZXJfZXZlbnQoaW50IHJzY19pbmRleCwKLQkJ dWludDMyX3QgZXZlbnRfdHlwZSwKLQkJdm9pZCAoKmNiX2Z1bmMpKHVpbnQzMl90IGV2ZW50X3R5 cGUsIHZvaWQgKnVzciksIHZvaWQgKnVzcikKLXsKLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGlj IGlubGluZSB2b2lkIGRwdV9yc2NfdW5yZWdpc3Rlcl9ldmVudChzdHJ1Y3QgZHB1X3JzY19ldmVu dCAqZXZlbnQpCi17Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc19kcHVfcnNjX2F2YWlsYWJs ZShpbnQgcnNjX2luZGV4KQotewotCXJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGlubGluZSBl bnVtIGRwdV9yc2Nfc3RhdGUgZ2V0X2RwdV9yc2NfY3VycmVudF9zdGF0ZShpbnQgcnNjX2luZGV4 KQotewotCXJldHVybiBEUFVfUlNDX0lETEVfU1RBVEU7Ci19Ci0jZW5kaWYgLyogQ09ORklHX0RS TV9EUFVfUlNDICovCi0KLSNlbmRpZiAvKiBfRFBVX1JTQ19IXyAqLwotLSAKVGhlIFF1YWxjb21t IElubm92YXRpb24gQ2VudGVyLCBJbmMuIGlzIGEgbWVtYmVyIG9mIHRoZSBDb2RlIEF1cm9yYSBG b3J1bSwKYSBMaW51eCBGb3VuZGF0aW9uIENvbGxhYm9yYXRpdmUgUHJvamVjdAoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRnJlZWRyZW5vIG1haWxpbmcg bGlzdApGcmVlZHJlbm9AbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZnJlZWRyZW5vCg==