From mboxrd@z Thu Jan 1 00:00:00 1970 From: Hyungwon Hwang Subject: [PATCH v4 5/8] drm/exynos: dsi: generalize register setting and clock control Date: Tue, 07 Apr 2015 20:57:35 +0900 Message-ID: <1428407858-25523-6-git-send-email-human.hwang@samsung.com> References: <1428407858-25523-1-git-send-email-human.hwang@samsung.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-reply-to: <1428407858-25523-1-git-send-email-human.hwang@samsung.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, inki.dae@samsung.com, daniel@fooishbar.org Cc: dh09.lee@samsung.com, sw0312.kim@samsung.com, Hyungwon Hwang , cw00.choi@samsung.com List-Id: devicetree@vger.kernel.org VGhpcyBwYXRjaCBtYWtlcyB0aGUgZHJpdmVyIHVzZSBhcnJheXMgZm9yIGNsb2NrcywgcmVnaXN0 ZXIgYWRkcmVzcywKYW5kIHZhbHVlcy4gQnkgZG9pbmcgdGhpcywgaXQgYmVjb21lcyBlYXNpZXIg dG8gYWRkIHN1cHBvcnQgZm9yIGFub3RoZXIKU29DLgoKU2lnbmVkLW9mZi1ieTogSHl1bmd3b24g SHdhbmcgPGh1bWFuLmh3YW5nQHNhbXN1bmcuY29tPgotLS0KQ2hhbmdlcyBmb3IgdjM6Ci0gU2Vw YXJhdGVkIGZyb20gdGhlIHBhdGNoICJkcm0vZXh5bm9zOiBkc2k6IGFkZCBzdXBwb3J0IGZvciBF eHlub3M1NDMzIFNvQyIKaW4gdmVyc2lvbiAyLgoKQ2hhbmdlcyBmb3IgdjQ6Ci0gTm9uZQogZHJp dmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2RzaS5jIHwgMzQ3ICsrKysrKysrKysrKysr KysrKysrLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMjE4IGluc2VydGlvbnMoKyksIDEy OSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5v c19kcm1fZHNpLmMgYi9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZHNpLmMKaW5k ZXggNGFmMThiMmYuLjJkOWEyNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9leHlub3Mv ZXh5bm9zX2RybV9kc2kuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1f ZHNpLmMKQEAgLTMzLDM4ICszMyw2IEBACiAvKiByZXR1cm5zIHRydWUgaWZmIGJvdGggYXJndW1l bnRzIGxvZ2ljYWxseSBkaWZmZXJzICovCiAjZGVmaW5lIE5FUVYoYSwgYikgKCEoYSkgXiAhKGIp KQoKLSNkZWZpbmUgRFNJTV9TVEFUVVNfUkVHCQkweDAJLyogU3RhdHVzIHJlZ2lzdGVyICovCi0j ZGVmaW5lIERTSU1fU1dSU1RfUkVHCQkweDQJLyogU29mdHdhcmUgcmVzZXQgcmVnaXN0ZXIgKi8K LSNkZWZpbmUgRFNJTV9DTEtDVFJMX1JFRwkweDgJLyogQ2xvY2sgY29udHJvbCByZWdpc3RlciAq LwotI2RlZmluZSBEU0lNX1RJTUVPVVRfUkVHCTB4YwkvKiBUaW1lIG91dCByZWdpc3RlciAqLwot I2RlZmluZSBEU0lNX0NPTkZJR19SRUcJCTB4MTAJLyogQ29uZmlndXJhdGlvbiByZWdpc3RlciAq LwotI2RlZmluZSBEU0lNX0VTQ01PREVfUkVHCTB4MTQJLyogRXNjYXBlIG1vZGUgcmVnaXN0ZXIg Ki8KLQotLyogTWFpbiBkaXNwbGF5IGltYWdlIHJlc29sdXRpb24gcmVnaXN0ZXIgKi8KLSNkZWZp bmUgRFNJTV9NRFJFU09MX1JFRwkweDE4Ci0jZGVmaW5lIERTSU1fTVZQT1JDSF9SRUcJMHgxYwkv KiBNYWluIGRpc3BsYXkgVnBvcmNoIHJlZ2lzdGVyICovCi0jZGVmaW5lIERTSU1fTUhQT1JDSF9S RUcJMHgyMAkvKiBNYWluIGRpc3BsYXkgSHBvcmNoIHJlZ2lzdGVyICovCi0jZGVmaW5lIERTSU1f TVNZTkNfUkVHCQkweDI0CS8qIE1haW4gZGlzcGxheSBzeW5jIGFyZWEgcmVnaXN0ZXIgKi8KLQot LyogU3ViIGRpc3BsYXkgaW1hZ2UgcmVzb2x1dGlvbiByZWdpc3RlciAqLwotI2RlZmluZSBEU0lN X1NEUkVTT0xfUkVHCTB4MjgKLSNkZWZpbmUgRFNJTV9JTlRTUkNfUkVHCQkweDJjCS8qIEludGVy cnVwdCBzb3VyY2UgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgRFNJTV9JTlRNU0tfUkVHCQkweDMwCS8q IEludGVycnVwdCBtYXNrIHJlZ2lzdGVyICovCi0jZGVmaW5lIERTSU1fUEtUSERSX1JFRwkJMHgz NAkvKiBQYWNrZXQgSGVhZGVyIEZJRk8gcmVnaXN0ZXIgKi8KLSNkZWZpbmUgRFNJTV9QQVlMT0FE X1JFRwkweDM4CS8qIFBheWxvYWQgRklGTyByZWdpc3RlciAqLwotI2RlZmluZSBEU0lNX1JYRklG T19SRUcJCTB4M2MJLyogUmVhZCBGSUZPIHJlZ2lzdGVyICovCi0jZGVmaW5lIERTSU1fRklGT1RI TERfUkVHCTB4NDAJLyogRklGTyB0aHJlc2hvbGQgbGV2ZWwgcmVnaXN0ZXIgKi8KLSNkZWZpbmUg RFNJTV9GSUZPQ1RSTF9SRUcJMHg0NAkvKiBGSUZPIHN0YXR1cyBhbmQgY29udHJvbCByZWdpc3Rl ciAqLwotCi0vKiBGSUZPIG1lbW9yeSBBQyBjaGFyYWN0ZXJpc3RpYyByZWdpc3RlciAqLwotI2Rl ZmluZSBEU0lNX1BMTENUUkxfUkVHCTB4NGMJLyogUExMIGNvbnRyb2wgcmVnaXN0ZXIgKi8KLSNk ZWZpbmUgRFNJTV9QSFlBQ0NIUl9SRUcJMHg1NAkvKiBELVBIWSBBQyBjaGFyYWN0ZXJpc3RpYyBy ZWdpc3RlciAqLwotI2RlZmluZSBEU0lNX1BIWUFDQ0hSMV9SRUcJMHg1OAkvKiBELVBIWSBBQyBj aGFyYWN0ZXJpc3RpYyByZWdpc3RlcjEgKi8KLSNkZWZpbmUgRFNJTV9QSFlDVFJMX1JFRwkweDVj Ci0jZGVmaW5lIERTSU1fUEhZVElNSU5HX1JFRwkweDY0Ci0jZGVmaW5lIERTSU1fUEhZVElNSU5H MV9SRUcJMHg2OAotI2RlZmluZSBEU0lNX1BIWVRJTUlORzJfUkVHCTB4NmMKLQogLyogRFNJTV9T VEFUVVMgKi8KICNkZWZpbmUgRFNJTV9TVE9QX1NUQVRFX0RBVCh4KQkJKCgoeCkgJiAweGYpIDw8 IDApCiAjZGVmaW5lIERTSU1fU1RPUF9TVEFURV9DTEsJCSgxIDw8IDgpCkBAIC0xMjgsOCArOTYs OCBAQAoKIC8qIERTSU1fTURSRVNPTCAqLwogI2RlZmluZSBEU0lNX01BSU5fU1RBTkRfQlkJCSgx IDw8IDMxKQotI2RlZmluZSBEU0lNX01BSU5fVlJFU09MKHgpCQkoKCh4KSAmIDB4N2ZmKSA8PCAx NikKLSNkZWZpbmUgRFNJTV9NQUlOX0hSRVNPTCh4KQkJKCgoeCkgJiAwWDdmZikgPDwgMCkKKyNk ZWZpbmUgRFNJTV9NQUlOX1ZSRVNPTCh4LCBudW1fYml0cykJKCgoeCkgJiAoKDEgPDwgKG51bV9i aXRzKSkgLSAxKSkgPDwgMTYpCisjZGVmaW5lIERTSU1fTUFJTl9IUkVTT0woeCwgbnVtX2JpdHMp CSgoKHgpICYgKCgxIDw8IChudW1fYml0cykpIC0gMSkpIDw8IDApCgogLyogRFNJTV9NVlBPUkNI ICovCiAjZGVmaW5lIERTSU1fQ01EX0FMTE9XKHgpCQkoKHgpIDw8IDI4KQpAQCAtMjM0LDYgKzIw MiwxMiBAQAogI2RlZmluZSBEU0lfWEZFUl9USU1FT1VUX01TCQkxMDAKICNkZWZpbmUgRFNJX1JY X0ZJRk9fRU1QVFkJCTB4MzA4MDAwMDIKCisjZGVmaW5lIFJFRyhkc2ksIHJlZykJKChkc2kpLT5y ZWdfYmFzZSArIGRzaS0+ZHJpdmVyX2RhdGEtPnJlZ3NbKHJlZyldKQorI2RlZmluZSBEU0lfV1JJ VEUoZHNpLCByZWcsIHZhbCkJd3JpdGVsKCh2YWwpLCBSRUcoKGRzaSksIChyZWcpKSkKKyNkZWZp bmUgRFNJX1JFQUQoZHNpLCByZWcpCQlyZWFkbChSRUcoKGRzaSksIChyZWcpKSkKKworc3RhdGlj IGNoYXIgKmNsa19uYW1lc1syXSA9IHsgImJ1c19jbGsiLCAic2Nsa19taXBpIiB9OworCiBlbnVt IGV4eW5vc19kc2lfdHJhbnNmZXJfdHlwZSB7CiAJRVhZTk9TX0RTSV9UWCwKIAlFWFlOT1NfRFNJ X1JYLApAQCAtMjYxLDEwICsyMzUsMTUgQEAgc3RydWN0IGV4eW5vc19kc2lfdHJhbnNmZXIgewog I2RlZmluZSBEU0lNX1NUQVRFX0NNRF9MUE0JCUJJVCgyKQoKIHN0cnVjdCBleHlub3NfZHNpX2Ry aXZlcl9kYXRhIHsKKwl1bnNpZ25lZCBpbnQgKnJlZ3M7CiAJdW5zaWduZWQgaW50IHBsbHRtcl9y ZWc7Ci0KIAl1bnNpZ25lZCBpbnQgaGFzX2ZyZXFiYW5kOjE7CiAJdW5zaWduZWQgaW50IGhhc19j bGtsYW5lX3N0b3A6MTsKKwl1bnNpZ25lZCBpbnQgbnVtX2Nsa3M7CisJdW5zaWduZWQgaW50IG1h eF9mcmVxOworCXVuc2lnbmVkIGludCB3YWl0X2Zvcl9yZXNldDsKKwl1bnNpZ25lZCBpbnQgbnVt X2JpdHNfcmVzb2w7CisJdW5zaWduZWQgaW50ICp2YWx1ZXM7CiB9OwoKIHN0cnVjdCBleHlub3Nf ZHNpIHsKQEAgLTI3Nyw4ICsyNTYsNyBAQCBzdHJ1Y3QgZXh5bm9zX2RzaSB7CgogCXZvaWQgX19p b21lbSAqcmVnX2Jhc2U7CiAJc3RydWN0IHBoeSAqcGh5OwotCXN0cnVjdCBjbGsgKnNjbGtfY2xr OwotCXN0cnVjdCBjbGsgKmJ1c19jbGs7CisJc3RydWN0IGNsayAqKmNsa3M7CiAJc3RydWN0IHJl Z3VsYXRvcl9idWxrX2RhdGEgc3VwcGxpZXNbMl07CiAJaW50IGlycTsKIAlpbnQgdGVfZ3BpbzsK QEAgLTMwOSwyNSArMjg3LDEzMyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBleHlub3NfZHNpICpk aXNwbGF5X3RvX2RzaShzdHJ1Y3QgZXh5bm9zX2RybV9kaXNwbGF5ICpkKQogCXJldHVybiBjb250 YWluZXJfb2YoZCwgc3RydWN0IGV4eW5vc19kc2ksIGRpc3BsYXkpOwogfQoKK2VudW0gcmVncyB7 CisJRFNJTV9TVEFUVVNfUkVHLAkvKiBTdGF0dXMgcmVnaXN0ZXIgKi8KKwlEU0lNX1NXUlNUX1JF RywJCS8qIFNvZnR3YXJlIHJlc2V0IHJlZ2lzdGVyICovCisJRFNJTV9DTEtDVFJMX1JFRywJLyog Q2xvY2sgY29udHJvbCByZWdpc3RlciAqLworCURTSU1fVElNRU9VVF9SRUcsCS8qIFRpbWUgb3V0 IHJlZ2lzdGVyICovCisJRFNJTV9DT05GSUdfUkVHLAkvKiBDb25maWd1cmF0aW9uIHJlZ2lzdGVy ICovCisJRFNJTV9FU0NNT0RFX1JFRywJLyogRXNjYXBlIG1vZGUgcmVnaXN0ZXIgKi8KKwlEU0lN X01EUkVTT0xfUkVHLAorCURTSU1fTVZQT1JDSF9SRUcsCS8qIE1haW4gZGlzcGxheSBWcG9yY2gg cmVnaXN0ZXIgKi8KKwlEU0lNX01IUE9SQ0hfUkVHLAkvKiBNYWluIGRpc3BsYXkgSHBvcmNoIHJl Z2lzdGVyICovCisJRFNJTV9NU1lOQ19SRUcsCQkvKiBNYWluIGRpc3BsYXkgc3luYyBhcmVhIHJl Z2lzdGVyICovCisJRFNJTV9JTlRTUkNfUkVHLAkvKiBJbnRlcnJ1cHQgc291cmNlIHJlZ2lzdGVy ICovCisJRFNJTV9JTlRNU0tfUkVHLAkvKiBJbnRlcnJ1cHQgbWFzayByZWdpc3RlciAqLworCURT SU1fUEtUSERSX1JFRywJLyogUGFja2V0IEhlYWRlciBGSUZPIHJlZ2lzdGVyICovCisJRFNJTV9Q QVlMT0FEX1JFRywJLyogUGF5bG9hZCBGSUZPIHJlZ2lzdGVyICovCisJRFNJTV9SWEZJRk9fUkVH LAkvKiBSZWFkIEZJRk8gcmVnaXN0ZXIgKi8KKwlEU0lNX0ZJRk9DVFJMX1JFRywJLyogRklGTyBz dGF0dXMgYW5kIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwlEU0lNX1BMTENUUkxfUkVHLAkvKiBQTEwg Y29udHJvbCByZWdpc3RlciAqLworCURTSU1fUEhZQ1RSTF9SRUcsCisJRFNJTV9QSFlUSU1JTkdf UkVHLAorCURTSU1fUEhZVElNSU5HMV9SRUcsCisJRFNJTV9QSFlUSU1JTkcyX1JFRywKKwlOVU1f UkVHUworfTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcmVnc1tdID0geworCVtEU0lNX1NUQVRVU19S RUddID0gIDB4MDAsCisJW0RTSU1fU1dSU1RfUkVHXSA9ICAweDA0LAorCVtEU0lNX0NMS0NUUkxf UkVHXSA9ICAweDA4LAorCVtEU0lNX1RJTUVPVVRfUkVHXSA9ICAweDBjLAorCVtEU0lNX0NPTkZJ R19SRUddID0gIDB4MTAsCisJW0RTSU1fRVNDTU9ERV9SRUddID0gIDB4MTQsCisJW0RTSU1fTURS RVNPTF9SRUddID0gIDB4MTgsCisJW0RTSU1fTVZQT1JDSF9SRUddID0gIDB4MWMsCisJW0RTSU1f TUhQT1JDSF9SRUddID0gIDB4MjAsCisJW0RTSU1fTVNZTkNfUkVHXSA9ICAweDI0LAorCVtEU0lN X0lOVFNSQ19SRUddID0gIDB4MmMsCisJW0RTSU1fSU5UTVNLX1JFR10gPSAgMHgzMCwKKwlbRFNJ TV9QS1RIRFJfUkVHXSA9ICAweDM0LAorCVtEU0lNX1BBWUxPQURfUkVHXSA9ICAweDM4LAorCVtE U0lNX1JYRklGT19SRUddID0gIDB4M2MsCisJW0RTSU1fRklGT0NUUkxfUkVHXSA9ICAweDQ0LAor CVtEU0lNX1BMTENUUkxfUkVHXSA9ICAweDRjLAorCVtEU0lNX1BIWUNUUkxfUkVHXSA9ICAweDVj LAorCVtEU0lNX1BIWVRJTUlOR19SRUddID0gIDB4NjQsCisJW0RTSU1fUEhZVElNSU5HMV9SRUdd ID0gIDB4NjgsCisJW0RTSU1fUEhZVElNSU5HMl9SRUddID0gIDB4NmMsCit9OworCitlbnVtIHZh bHVlcyB7CisJUkVTRVRfVFlQRSwKKwlQTExfVElNRVIsCisJU1RPUF9TVEFURV9DTlQsCisJUEhZ Q1RSTF9VTFBTX0VYSVQsCisJUEhZQ1RSTF9WUkVHX0xQLAorCVBIWUNUUkxfU0xFV19VUCwKKwlQ SFlUSU1JTkdfTFBYLAorCVBIWVRJTUlOR19IU19FWElULAorCVBIWVRJTUlOR19DTEtfUFJFUEFS RSwKKwlQSFlUSU1JTkdfQ0xLX1pFUk8sCisJUEhZVElNSU5HX0NMS19QT1NULAorCVBIWVRJTUlO R19DTEtfVFJBSUwsCisJUEhZVElNSU5HX0hTX1BSRVBBUkUsCisJUEhZVElNSU5HX0hTX1pFUk8s CisJUEhZVElNSU5HX0hTX1RSQUlMCit9OworCitzdGF0aWMgdW5zaWduZWQgaW50IHZhbHVlc1td ID0geworCVtSRVNFVF9UWVBFXSA9IERTSU1fU1dSU1QsCisJW1BMTF9USU1FUl0gPSA1MDAsCisJ W1NUT1BfU1RBVEVfQ05UXSA9IDB4ZiwKKwlbUEhZQ1RSTF9VTFBTX0VYSVRdID0gRFNJTV9QSFlD VFJMX1VMUFNfRVhJVCgweDBhZiksCisJW1BIWUNUUkxfVlJFR19MUF0gPSAwLAorCVtQSFlDVFJM X1NMRVdfVVBdID0gMCwKKwlbUEhZVElNSU5HX0xQWF0gPSBEU0lNX1BIWVRJTUlOR19MUFgoMHgw NiksCisJW1BIWVRJTUlOR19IU19FWElUXSA9IERTSU1fUEhZVElNSU5HX0hTX0VYSVQoMHgwYiks CisJW1BIWVRJTUlOR19DTEtfUFJFUEFSRV0gPSBEU0lNX1BIWVRJTUlORzFfQ0xLX1BSRVBBUkUo MHgwNyksCisJW1BIWVRJTUlOR19DTEtfWkVST10gPSBEU0lNX1BIWVRJTUlORzFfQ0xLX1pFUk8o MHgyNyksCisJW1BIWVRJTUlOR19DTEtfUE9TVF0gPSBEU0lNX1BIWVRJTUlORzFfQ0xLX1BPU1Qo MHgwZCksCisJW1BIWVRJTUlOR19DTEtfVFJBSUxdID0gRFNJTV9QSFlUSU1JTkcxX0NMS19UUkFJ TCgweDA4KSwKKwlbUEhZVElNSU5HX0hTX1BSRVBBUkVdID0gRFNJTV9QSFlUSU1JTkcyX0hTX1BS RVBBUkUoMHgwOSksCisJW1BIWVRJTUlOR19IU19aRVJPXSA9IERTSU1fUEhZVElNSU5HMl9IU19a RVJPKDB4MGQpLAorCVtQSFlUSU1JTkdfSFNfVFJBSUxdID0gRFNJTV9QSFlUSU1JTkcyX0hTX1RS QUlMKDB4MGIpLAorfTsKKwogc3RhdGljIHN0cnVjdCBleHlub3NfZHNpX2RyaXZlcl9kYXRhIGV4 eW5vczNfZHNpX2RyaXZlcl9kYXRhID0geworCS5yZWdzID0gcmVncywKIAkucGxsdG1yX3JlZyA9 IDB4NTAsCiAJLmhhc19mcmVxYmFuZCA9IDEsCiAJLmhhc19jbGtsYW5lX3N0b3AgPSAxLAorCS5u dW1fY2xrcyA9IDIsCisJLm1heF9mcmVxID0gMTAwMCwKKwkud2FpdF9mb3JfcmVzZXQgPSAxLAor CS5udW1fYml0c19yZXNvbCA9IDExLAorCS52YWx1ZXMgPSB2YWx1ZXMsCiB9OwoKIHN0YXRpYyBz dHJ1Y3QgZXh5bm9zX2RzaV9kcml2ZXJfZGF0YSBleHlub3M0X2RzaV9kcml2ZXJfZGF0YSA9IHsK KwkucmVncyA9IHJlZ3MsCiAJLnBsbHRtcl9yZWcgPSAweDUwLAogCS5oYXNfZnJlcWJhbmQgPSAx LAogCS5oYXNfY2xrbGFuZV9zdG9wID0gMSwKKwkubnVtX2Nsa3MgPSAyLAorCS5tYXhfZnJlcSA9 IDEwMDAsCisJLndhaXRfZm9yX3Jlc2V0ID0gMSwKKwkubnVtX2JpdHNfcmVzb2wgPSAxMSwKKwku dmFsdWVzID0gdmFsdWVzLAogfTsKCiBzdGF0aWMgc3RydWN0IGV4eW5vc19kc2lfZHJpdmVyX2Rh dGEgZXh5bm9zNDQxNV9kc2lfZHJpdmVyX2RhdGEgPSB7CisJLnJlZ3MgPSByZWdzLAogCS5wbGx0 bXJfcmVnID0gMHg1OCwKIAkuaGFzX2Nsa2xhbmVfc3RvcCA9IDEsCisJLm51bV9jbGtzID0gMiwK KwkubWF4X2ZyZXEgPSAxMDAwLAorCS53YWl0X2Zvcl9yZXNldCA9IDEsCisJLm51bV9iaXRzX3Jl c29sID0gMTEsCisJLnZhbHVlcyA9IHZhbHVlcywKIH07Cgogc3RhdGljIHN0cnVjdCBleHlub3Nf ZHNpX2RyaXZlcl9kYXRhIGV4eW5vczVfZHNpX2RyaXZlcl9kYXRhID0geworCS5yZWdzID0gcmVn cywKIAkucGxsdG1yX3JlZyA9IDB4NTgsCisJLm51bV9jbGtzID0gMiwKKwkubWF4X2ZyZXEgPSAx MDAwLAorCS53YWl0X2Zvcl9yZXNldCA9IDEsCisJLm51bV9iaXRzX3Jlc29sID0gMTEsCisJLnZh bHVlcyA9IHZhbHVlcywKIH07Cgogc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgZXh5bm9zX2Rz aV9vZl9tYXRjaFtdID0gewpAQCAtMzYxLDggKzQ0NywxMCBAQCBzdGF0aWMgdm9pZCBleHlub3Nf ZHNpX3dhaXRfZm9yX3Jlc2V0KHN0cnVjdCBleHlub3NfZHNpICpkc2kpCgogc3RhdGljIHZvaWQg ZXh5bm9zX2RzaV9yZXNldChzdHJ1Y3QgZXh5bm9zX2RzaSAqZHNpKQogeworCXN0cnVjdCBleHlu b3NfZHNpX2RyaXZlcl9kYXRhICpkcml2ZXJfZGF0YSA9IGRzaS0+ZHJpdmVyX2RhdGE7CisKIAly ZWluaXRfY29tcGxldGlvbigmZHNpLT5jb21wbGV0ZWQpOwotCXdyaXRlbChEU0lNX1NXUlNULCBk c2ktPnJlZ19iYXNlICsgRFNJTV9TV1JTVF9SRUcpOworCURTSV9XUklURShkc2ksIERTSU1fU1dS U1RfUkVHLCBkcml2ZXJfZGF0YS0+dmFsdWVzW1JFU0VUX1RZUEVdKTsKIH0KCiAjaWZuZGVmIE1I WgpAQCAtMzcyLDYgKzQ2MCw3IEBAIHN0YXRpYyB2b2lkIGV4eW5vc19kc2lfcmVzZXQoc3RydWN0 IGV4eW5vc19kc2kgKmRzaSkKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGV4eW5vc19kc2lfcGxsX2Zp bmRfcG1zKHN0cnVjdCBleHlub3NfZHNpICpkc2ksCiAJCXVuc2lnbmVkIGxvbmcgZmluLCB1bnNp Z25lZCBsb25nIGZvdXQsIHU4ICpwLCB1MTYgKm0sIHU4ICpzKQogeworCXN0cnVjdCBleHlub3Nf ZHNpX2RyaXZlcl9kYXRhICpkcml2ZXJfZGF0YSA9IGRzaS0+ZHJpdmVyX2RhdGE7CiAJdW5zaWdu ZWQgbG9uZyBiZXN0X2ZyZXEgPSAwOwogCXUzMiBtaW5fZGVsdGEgPSAweGZmZmZmZmZmOwogCXU4 IHBfbWluLCBwX21heDsKQEAgLTM5NSw3ICs0ODQsOCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBl eHlub3NfZHNpX3BsbF9maW5kX3BtcyhzdHJ1Y3QgZXh5bm9zX2RzaSAqZHNpLAoKIAkJCXRtcCA9 ICh1NjQpX20gKiBmaW47CiAJCQlkb19kaXYodG1wLCBfcCk7Ci0JCQlpZiAodG1wIDwgNTAwICog TUhaIHx8IHRtcCA+IDEwMDAgKiBNSFopCisJCQlpZiAodG1wIDwgNTAwICogTUhaIHx8CisJCQkJ CXRtcCA+IGRyaXZlcl9kYXRhLT5tYXhfZnJlcSAqIE1IWikKIAkJCQljb250aW51ZTsKCiAJCQl0 bXAgPSAodTY0KV9tICogZmluOwpAQCAtNDQwLDcgKzUzMCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBs b25nIGV4eW5vc19kc2lfc2V0X3BsbChzdHJ1Y3QgZXh5bm9zX2RzaSAqZHNpLAogCX0KIAlkZXZf ZGJnKGRzaS0+ZGV2LCAiUExMIGZyZXEgJWx1LCAocCAlZCwgbSAlZCwgcyAlZClcbiIsIGZvdXQs IHAsIG0sIHMpOwoKLQl3cml0ZWwoNTAwLCBkc2ktPnJlZ19iYXNlICsgZHJpdmVyX2RhdGEtPnBs bHRtcl9yZWcpOworCURTSV9XUklURShkc2ksIGRyaXZlcl9kYXRhLT5wbGx0bXJfcmVnLCBkcml2 ZXJfZGF0YS0+dmFsdWVzW1BMTF9USU1FUl0pOwoKIAlyZWcgPSBEU0lNX1BMTF9FTiB8IERTSU1f UExMX1AocCkgfCBEU0lNX1BMTF9NKG0pIHwgRFNJTV9QTExfUyhzKTsKCkBAIC00NjIsNyArNTUy LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZXh5bm9zX2RzaV9zZXRfcGxsKHN0cnVjdCBleHlu b3NfZHNpICpkc2ksCiAJCXJlZyB8PSBEU0lNX0ZSRVFfQkFORChiYW5kKTsKIAl9CgotCXdyaXRl bChyZWcsIGRzaS0+cmVnX2Jhc2UgKyBEU0lNX1BMTENUUkxfUkVHKTsKKwlEU0lfV1JJVEUoZHNp LCBEU0lNX1BMTENUUkxfUkVHLCByZWcpOwoKIAl0aW1lb3V0ID0gMTAwMDsKIAlkbyB7CkBAIC00 NzAsNyArNTYwLDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZXh5bm9zX2RzaV9zZXRfcGxsKHN0 cnVjdCBleHlub3NfZHNpICpkc2ksCiAJCQlkZXZfZXJyKGRzaS0+ZGV2LCAiUExMIGZhaWxlZCB0 byBzdGFiaWxpemVcbiIpOwogCQkJcmV0dXJuIDA7CiAJCX0KLQkJcmVnID0gcmVhZGwoZHNpLT5y ZWdfYmFzZSArIERTSU1fU1RBVFVTX1JFRyk7CisJCXJlZyA9IERTSV9SRUFEKGRzaSwgRFNJTV9T VEFUVVNfUkVHKTsKIAl9IHdoaWxlICgocmVnICYgRFNJTV9QTExfU1RBQkxFKSA9PSAwKTsKCiAJ cmV0dXJuIGZvdXQ7CkBAIC00ODIsNiArNTcyLDggQEAgc3RhdGljIGludCBleHlub3NfZHNpX2Vu YWJsZV9jbG9jayhzdHJ1Y3QgZXh5bm9zX2RzaSAqZHNpKQogCXVuc2lnbmVkIGxvbmcgZXNjX2Rp djsKIAl1MzIgcmVnOwoKKwlyZWcgPSBEU0lfUkVBRChkc2ksIERTSU1fU1RBVFVTX1JFRyk7CisK IAloc19jbGsgPSBleHlub3NfZHNpX3NldF9wbGwoZHNpLCBkc2ktPmJ1cnN0X2Nsa19yYXRlKTsK IAlpZiAoIWhzX2NsaykgewogCQlkZXZfZXJyKGRzaS0+ZGV2LCAiZmFpbGVkIHRvIGNvbmZpZ3Vy ZSBEU0kgUExMXG4iKTsKQEAgLTUwMCw3ICs1OTIsNyBAQCBzdGF0aWMgaW50IGV4eW5vc19kc2lf ZW5hYmxlX2Nsb2NrKHN0cnVjdCBleHlub3NfZHNpICpkc2kpCiAJZGV2X2RiZyhkc2ktPmRldiwg ImhzX2NsayA9ICVsdSwgYnl0ZV9jbGsgPSAlbHUsIGVzY19jbGsgPSAlbHVcbiIsCiAJCWhzX2Ns aywgYnl0ZV9jbGssIGVzY19jbGspOwoKLQlyZWcgPSByZWFkbChkc2ktPnJlZ19iYXNlICsgRFNJ TV9DTEtDVFJMX1JFRyk7CisJcmVnID0gRFNJX1JFQUQoZHNpLCBEU0lNX0NMS0NUUkxfUkVHKTsK IAlyZWcgJj0gfihEU0lNX0VTQ19QUkVTQ0FMRVJfTUFTSyB8IERTSU1fTEFORV9FU0NfQ0xLX0VO X0NMSwogCQkJfCBEU0lNX0xBTkVfRVNDX0NMS19FTl9EQVRBX01BU0sgfCBEU0lNX1BMTF9CWVBB U1MKIAkJCXwgRFNJTV9CWVRFX0NMS19TUkNfTUFTSyk7CkBAIC01MTAsNyArNjAyLDcgQEAgc3Rh dGljIGludCBleHlub3NfZHNpX2VuYWJsZV9jbG9jayhzdHJ1Y3QgZXh5bm9zX2RzaSAqZHNpKQog CQkJfCBEU0lNX0xBTkVfRVNDX0NMS19FTl9EQVRBKEJJVChkc2ktPmxhbmVzKSAtIDEpCiAJCQl8 IERTSU1fQllURV9DTEtfU1JDKDApCiAJCQl8IERTSU1fVFhfUkVRVUVTVF9IU0NMSzsKLQl3cml0 ZWwocmVnLCBkc2ktPnJlZ19iYXNlICsgRFNJTV9DTEtDVFJMX1JFRyk7CisJRFNJX1dSSVRFKGRz aSwgRFNJTV9DTEtDVFJMX1JFRywgcmVnKTsKCiAJcmV0dXJuIDA7CiB9CkBAIC01MTgsMjIgKzYx MCwyNCBAQCBzdGF0aWMgaW50IGV4eW5vc19kc2lfZW5hYmxlX2Nsb2NrKHN0cnVjdCBleHlub3Nf ZHNpICpkc2kpCiBzdGF0aWMgdm9pZCBleHlub3NfZHNpX3NldF9waHlfY3RybChzdHJ1Y3QgZXh5 bm9zX2RzaSAqZHNpKQogewogCXN0cnVjdCBleHlub3NfZHNpX2RyaXZlcl9kYXRhICpkcml2ZXJf ZGF0YSA9IGRzaS0+ZHJpdmVyX2RhdGE7CisJdW5zaWduZWQgaW50ICp2YWx1ZXMgPSBkcml2ZXJf ZGF0YS0+dmFsdWVzOwogCXUzMiByZWc7CgogCWlmIChkcml2ZXJfZGF0YS0+aGFzX2ZyZXFiYW5k KQogCQlyZXR1cm47CgogCS8qIEIgRC1QSFk6IEQtUEhZIE1hc3RlciAmIFNsYXZlIEFuYWxvZyBC bG9jayBjb250cm9sICovCi0JcmVnID0gRFNJTV9QSFlDVFJMX1VMUFNfRVhJVCgweDBhZik7Ci0J d3JpdGVsKHJlZywgZHNpLT5yZWdfYmFzZSArIERTSU1fUEhZQ1RSTF9SRUcpOworCXJlZyA9IHZh bHVlc1tQSFlDVFJMX1VMUFNfRVhJVF0gfCB2YWx1ZXNbUEhZQ1RSTF9WUkVHX0xQXSB8CisJCXZh bHVlc1tQSFlDVFJMX1NMRVdfVVBdOworCURTSV9XUklURShkc2ksIERTSU1fUEhZQ1RSTF9SRUcs IHJlZyk7CgogCS8qCiAJICogVCBMUFg6IFRyYW5zbWl0dGVkIGxlbmd0aCBvZiBhbnkgTG93LVBv d2VyIHN0YXRlIHBlcmlvZAogCSAqIFQgSFMtRVhJVDogVGltZSB0aGF0IHRoZSB0cmFuc21pdHRl ciBkcml2ZXMgTFAtMTEgZm9sbG93aW5nIGEgSFMKIAkgKglidXJzdAogCSAqLwotCXJlZyA9IERT SU1fUEhZVElNSU5HX0xQWCgweDA2KSB8IERTSU1fUEhZVElNSU5HX0hTX0VYSVQoMHgwYik7Ci0J d3JpdGVsKHJlZywgZHNpLT5yZWdfYmFzZSArIERTSU1fUEhZVElNSU5HX1JFRyk7CisJcmVnID0g dmFsdWVzW1BIWVRJTUlOR19MUFhdIHwgdmFsdWVzW1BIWVRJTUlOR19IU19FWElUXTsKKwlEU0lf V1JJVEUoZHNpLCBEU0lNX1BIWVRJTUlOR19SRUcsIHJlZyk7CgogCS8qCiAJICogVCBDTEstUFJF UEFSRTogVGltZSB0aGF0IHRoZSB0cmFuc21pdHRlciBkcml2ZXMgdGhlIENsb2NrIExhbmUgTFAt MDAKQEAgLTU0OCwxMSArNjQyLDEwIEBAIHN0YXRpYyB2b2lkIGV4eW5vc19kc2lfc2V0X3BoeV9j dHJsKHN0cnVjdCBleHlub3NfZHNpICpkc2kpCiAJICogVCBDTEstVFJBSUw6IFRpbWUgdGhhdCB0 aGUgdHJhbnNtaXR0ZXIgZHJpdmVzIHRoZSBIUy0wIHN0YXRlIGFmdGVyCiAJICoJdGhlIGxhc3Qg cGF5bG9hZCBjbG9jayBiaXQgb2YgYSBIUyB0cmFuc21pc3Npb24gYnVyc3QKIAkgKi8KLQlyZWcg PSBEU0lNX1BIWVRJTUlORzFfQ0xLX1BSRVBBUkUoMHgwNykgfAotCQkJRFNJTV9QSFlUSU1JTkcx X0NMS19aRVJPKDB4MjcpIHwKLQkJCURTSU1fUEhZVElNSU5HMV9DTEtfUE9TVCgweDBkKSB8Ci0J CQlEU0lNX1BIWVRJTUlORzFfQ0xLX1RSQUlMKDB4MDgpOwotCXdyaXRlbChyZWcsIGRzaS0+cmVn X2Jhc2UgKyBEU0lNX1BIWVRJTUlORzFfUkVHKTsKKwlyZWcgPSB2YWx1ZXNbUEhZVElNSU5HX0NM S19QUkVQQVJFXSB8IHZhbHVlc1tQSFlUSU1JTkdfQ0xLX1pFUk9dIHwKKwkJdmFsdWVzW1BIWVRJ TUlOR19DTEtfUE9TVF0gfCB2YWx1ZXNbUEhZVElNSU5HX0NMS19UUkFJTF07CisKKwlEU0lfV1JJ VEUoZHNpLCBEU0lNX1BIWVRJTUlORzFfUkVHLCByZWcpOwoKIAkvKgogCSAqIFQgSFMtUFJFUEFS RTogVGltZSB0aGF0IHRoZSB0cmFuc21pdHRlciBkcml2ZXMgdGhlIERhdGEgTGFuZSBMUC0wMApA QCAtNTYzLDIzICs2NTYsMjMgQEAgc3RhdGljIHZvaWQgZXh5bm9zX2RzaV9zZXRfcGh5X2N0cmwo c3RydWN0IGV4eW5vc19kc2kgKmRzaSkKIAkgKiBUIEhTLVRSQUlMOiBUaW1lIHRoYXQgdGhlIHRy YW5zbWl0dGVyIGRyaXZlcyB0aGUgZmxpcHBlZCBkaWZmZXJlbnRpYWwKIAkgKglzdGF0ZSBhZnRl ciBsYXN0IHBheWxvYWQgZGF0YSBiaXQgb2YgYSBIUyB0cmFuc21pc3Npb24gYnVyc3QKIAkgKi8K LQlyZWcgPSBEU0lNX1BIWVRJTUlORzJfSFNfUFJFUEFSRSgweDA5KSB8IERTSU1fUEhZVElNSU5H Ml9IU19aRVJPKDB4MGQpIHwKLQkJCURTSU1fUEhZVElNSU5HMl9IU19UUkFJTCgweDBiKTsKLQl3 cml0ZWwocmVnLCBkc2ktPnJlZ19iYXNlICsgRFNJTV9QSFlUSU1JTkcyX1JFRyk7CisJcmVnID0g dmFsdWVzW1BIWVRJTUlOR19IU19QUkVQQVJFXSB8IHZhbHVlc1tQSFlUSU1JTkdfSFNfWkVST10g fAorCQl2YWx1ZXNbUEhZVElNSU5HX0hTX1RSQUlMXTsKKwlEU0lfV1JJVEUoZHNpLCBEU0lNX1BI WVRJTUlORzJfUkVHLCByZWcpOwogfQoKIHN0YXRpYyB2b2lkIGV4eW5vc19kc2lfZGlzYWJsZV9j bG9jayhzdHJ1Y3QgZXh5bm9zX2RzaSAqZHNpKQogewogCXUzMiByZWc7CgotCXJlZyA9IHJlYWRs KGRzaS0+cmVnX2Jhc2UgKyBEU0lNX0NMS0NUUkxfUkVHKTsKKwlyZWcgPSBEU0lfUkVBRChkc2ks IERTSU1fQ0xLQ1RSTF9SRUcpOwogCXJlZyAmPSB+KERTSU1fTEFORV9FU0NfQ0xLX0VOX0NMSyB8 IERTSU1fTEFORV9FU0NfQ0xLX0VOX0RBVEFfTUFTSwogCQkJfCBEU0lNX0VTQ19DTEtFTiB8IERT SU1fQllURV9DTEtFTik7Ci0Jd3JpdGVsKHJlZywgZHNpLT5yZWdfYmFzZSArIERTSU1fQ0xLQ1RS TF9SRUcpOworCURTSV9XUklURShkc2ksIERTSU1fQ0xLQ1RSTF9SRUcsIHJlZyk7CgotCXJlZyA9 IHJlYWRsKGRzaS0+cmVnX2Jhc2UgKyBEU0lNX1BMTENUUkxfUkVHKTsKKwlyZWcgPSBEU0lfUkVB RChkc2ksIERTSU1fUExMQ1RSTF9SRUcpOwogCXJlZyAmPSB+RFNJTV9QTExfRU47Ci0Jd3JpdGVs KHJlZywgZHNpLT5yZWdfYmFzZSArIERTSU1fUExMQ1RSTF9SRUcpOworCURTSV9XUklURShkc2ks IERTSU1fUExMQ1RSTF9SRUcsIHJlZyk7CiB9Cgogc3RhdGljIGludCBleHlub3NfZHNpX2luaXRf bGluayhzdHJ1Y3QgZXh5bm9zX2RzaSAqZHNpKQpAQCAtNTkwLDE1ICs2ODMsMTQgQEAgc3RhdGlj IGludCBleHlub3NfZHNpX2luaXRfbGluayhzdHJ1Y3QgZXh5bm9zX2RzaSAqZHNpKQogCXUzMiBs YW5lc19tYXNrOwoKIAkvKiBJbml0aWFsaXplIEZJRk8gcG9pbnRlcnMgKi8KLQlyZWcgPSByZWFk bChkc2ktPnJlZ19iYXNlICsgRFNJTV9GSUZPQ1RSTF9SRUcpOworCXJlZyA9IERTSV9SRUFEKGRz aSwgRFNJTV9GSUZPQ1RSTF9SRUcpOwogCXJlZyAmPSB+MHgxZjsKLQl3cml0ZWwocmVnLCBkc2kt PnJlZ19iYXNlICsgRFNJTV9GSUZPQ1RSTF9SRUcpOworCURTSV9XUklURShkc2ksIERTSU1fRklG T0NUUkxfUkVHLCByZWcpOwoKIAl1c2xlZXBfcmFuZ2UoOTAwMCwgMTEwMDApOwoKIAlyZWcgfD0g MHgxZjsKLQl3cml0ZWwocmVnLCBkc2ktPnJlZ19iYXNlICsgRFNJTV9GSUZPQ1RSTF9SRUcpOwot CisJRFNJX1dSSVRFKGRzaSwgRFNJTV9GSUZPQ1RSTF9SRUcsIHJlZyk7CiAJdXNsZWVwX3Jhbmdl KDkwMDAsIDExMDAwKTsKCiAJLyogRFNJIGNvbmZpZ3VyYXRpb24gKi8KQEAgLTY1NywxNCArNzQ5 LDE0IEBAIHN0YXRpYyBpbnQgZXh5bm9zX2RzaV9pbml0X2xpbmsoc3RydWN0IGV4eW5vc19kc2kg KmRzaSkKCiAJcmVnIHw9IERTSU1fTlVNX09GX0RBVEFfTEFORShkc2ktPmxhbmVzIC0gMSk7Cgot CXdyaXRlbChyZWcsIGRzaS0+cmVnX2Jhc2UgKyBEU0lNX0NPTkZJR19SRUcpOworCURTSV9XUklU RShkc2ksIERTSU1fQ09ORklHX1JFRywgcmVnKTsKCiAJcmVnIHw9IERTSU1fTEFORV9FTl9DTEs7 Ci0Jd3JpdGVsKHJlZywgZHNpLT5yZWdfYmFzZSArIERTSU1fQ09ORklHX1JFRyk7CisJRFNJX1dS SVRFKGRzaSwgRFNJTV9DT05GSUdfUkVHLCByZWcpOwoKIAlsYW5lc19tYXNrID0gQklUKGRzaS0+ bGFuZXMpIC0gMTsKIAlyZWcgfD0gRFNJTV9MQU5FX0VOKGxhbmVzX21hc2spOwotCXdyaXRlbChy ZWcsIGRzaS0+cmVnX2Jhc2UgKyBEU0lNX0NPTkZJR19SRUcpOworCURTSV9XUklURShkc2ksIERT SU1fQ09ORklHX1JFRywgcmVnKTsKCiAJLyoKIAkgKiBVc2Ugbm9uLWNvbnRpbnVvdXMgY2xvY2sg bW9kZSBpZiB0aGUgcGVyaXBhcmFsIHdhbnRzIGFuZApAQCAtNjc3LDcgKzc2OSw3IEBAIHN0YXRp YyBpbnQgZXh5bm9zX2RzaV9pbml0X2xpbmsoc3RydWN0IGV4eW5vc19kc2kgKmRzaSkKIAlpZiAo ZHJpdmVyX2RhdGEtPmhhc19jbGtsYW5lX3N0b3AgJiYKIAkJCWRzaS0+bW9kZV9mbGFncyAmIE1J UElfRFNJX0NMT0NLX05PTl9DT05USU5VT1VTKSB7CiAJCXJlZyB8PSBEU0lNX0NMS0xBTkVfU1RP UDsKLQkJd3JpdGVsKHJlZywgZHNpLT5yZWdfYmFzZSArIERTSU1fQ09ORklHX1JFRyk7CisJCURT SV9XUklURShkc2ksIERTSU1fQ09ORklHX1JFRywgcmVnKTsKIAl9CgogCS8qIENoZWNrIGNsb2Nr IGFuZCBkYXRhIGxhbmUgc3RhdGUgYXJlIHN0b3Agc3RhdGUgKi8KQEAgLTY4OCwxOSArNzgwLDE5 IEBAIHN0YXRpYyBpbnQgZXh5bm9zX2RzaV9pbml0X2xpbmsoc3RydWN0IGV4eW5vc19kc2kgKmRz aSkKIAkJCXJldHVybiAtRUZBVUxUOwogCQl9CgotCQlyZWcgPSByZWFkbChkc2ktPnJlZ19iYXNl ICsgRFNJTV9TVEFUVVNfUkVHKTsKKwkJcmVnID0gRFNJX1JFQUQoZHNpLCBEU0lNX1NUQVRVU19S RUcpOwogCQlpZiAoKHJlZyAmIERTSU1fU1RPUF9TVEFURV9EQVQobGFuZXNfbWFzaykpCiAJCSAg ICAhPSBEU0lNX1NUT1BfU1RBVEVfREFUKGxhbmVzX21hc2spKQogCQkJY29udGludWU7CiAJfSB3 aGlsZSAoIShyZWcgJiAoRFNJTV9TVE9QX1NUQVRFX0NMSyB8IERTSU1fVFhfUkVBRFlfSFNfQ0xL KSkpOwoKLQlyZWcgPSByZWFkbChkc2ktPnJlZ19iYXNlICsgRFNJTV9FU0NNT0RFX1JFRyk7CisJ cmVnID0gRFNJX1JFQUQoZHNpLCBEU0lNX0VTQ01PREVfUkVHKTsKIAlyZWcgJj0gfkRTSU1fU1RP UF9TVEFURV9DTlRfTUFTSzsKLQlyZWcgfD0gRFNJTV9TVE9QX1NUQVRFX0NOVCgweGYpOwotCXdy aXRlbChyZWcsIGRzaS0+cmVnX2Jhc2UgKyBEU0lNX0VTQ01PREVfUkVHKTsKKwlyZWcgfD0gRFNJ TV9TVE9QX1NUQVRFX0NOVChkcml2ZXJfZGF0YS0+dmFsdWVzW1NUT1BfU1RBVEVfQ05UXSk7CisJ RFNJX1dSSVRFKGRzaSwgRFNJTV9FU0NNT0RFX1JFRywgcmVnKTsKCiAJcmVnID0gRFNJTV9CVEFf VElNRU9VVCgweGZmKSB8IERTSU1fTFBEUl9USU1FT1VUKDB4ZmZmZik7Ci0Jd3JpdGVsKHJlZywg ZHNpLT5yZWdfYmFzZSArIERTSU1fVElNRU9VVF9SRUcpOworCURTSV9XUklURShkc2ksIERTSU1f VElNRU9VVF9SRUcsIHJlZyk7CgogCXJldHVybiAwOwogfQpAQCAtNzA4LDI1ICs4MDAsMjcgQEAg c3RhdGljIGludCBleHlub3NfZHNpX2luaXRfbGluayhzdHJ1Y3QgZXh5bm9zX2RzaSAqZHNpKQog c3RhdGljIHZvaWQgZXh5bm9zX2RzaV9zZXRfZGlzcGxheV9tb2RlKHN0cnVjdCBleHlub3NfZHNp ICpkc2kpCiB7CiAJc3RydWN0IHZpZGVvbW9kZSAqdm0gPSAmZHNpLT52bTsKKwl1bnNpZ25lZCBp bnQgbnVtX2JpdHNfcmVzb2wgPSBkc2ktPmRyaXZlcl9kYXRhLT5udW1fYml0c19yZXNvbDsKIAl1 MzIgcmVnOwoKIAlpZiAoZHNpLT5tb2RlX2ZsYWdzICYgTUlQSV9EU0lfTU9ERV9WSURFTykgewog CQlyZWcgPSBEU0lNX0NNRF9BTExPVygweGYpCiAJCQl8IERTSU1fU1RBQkxFX1ZGUCh2bS0+dmZy b250X3BvcmNoKQogCQkJfCBEU0lNX01BSU5fVkJQKHZtLT52YmFja19wb3JjaCk7Ci0JCXdyaXRl bChyZWcsIGRzaS0+cmVnX2Jhc2UgKyBEU0lNX01WUE9SQ0hfUkVHKTsKKwkJRFNJX1dSSVRFKGRz aSwgRFNJTV9NVlBPUkNIX1JFRywgcmVnKTsKCiAJCXJlZyA9IERTSU1fTUFJTl9IRlAodm0tPmhm cm9udF9wb3JjaCkKIAkJCXwgRFNJTV9NQUlOX0hCUCh2bS0+aGJhY2tfcG9yY2gpOwotCQl3cml0 ZWwocmVnLCBkc2ktPnJlZ19iYXNlICsgRFNJTV9NSFBPUkNIX1JFRyk7CisJCURTSV9XUklURShk c2ksIERTSU1fTUhQT1JDSF9SRUcsIHJlZyk7CgogCQlyZWcgPSBEU0lNX01BSU5fVlNBKHZtLT52 c3luY19sZW4pCiAJCQl8IERTSU1fTUFJTl9IU0Eodm0tPmhzeW5jX2xlbik7Ci0JCXdyaXRlbChy ZWcsIGRzaS0+cmVnX2Jhc2UgKyBEU0lNX01TWU5DX1JFRyk7CisJCURTSV9XUklURShkc2ksIERT SU1fTVNZTkNfUkVHLCByZWcpOwogCX0KKwlyZWcgPSAgRFNJTV9NQUlOX0hSRVNPTCh2bS0+aGFj dGl2ZSwgbnVtX2JpdHNfcmVzb2wpIHwKKwkJRFNJTV9NQUlOX1ZSRVNPTCh2bS0+dmFjdGl2ZSwg bnVtX2JpdHNfcmVzb2wpOwoKLQlyZWcgPSBEU0lNX01BSU5fSFJFU09MKHZtLT5oYWN0aXZlKSB8 IERTSU1fTUFJTl9WUkVTT0wodm0tPnZhY3RpdmUpOwotCXdyaXRlbChyZWcsIGRzaS0+cmVnX2Jh c2UgKyBEU0lNX01EUkVTT0xfUkVHKTsKKwlEU0lfV1JJVEUoZHNpLCBEU0lNX01EUkVTT0xfUkVH LCByZWcpOwoKIAlkZXZfZGJnKGRzaS0+ZGV2LCAiTENEIHNpemUgPSAlZHglZFxuIiwgdm0tPmhh Y3RpdmUsIHZtLT52YWN0aXZlKTsKIH0KQEAgLTczNSwxMiArODI5LDEyIEBAIHN0YXRpYyB2b2lk IGV4eW5vc19kc2lfc2V0X2Rpc3BsYXlfZW5hYmxlKHN0cnVjdCBleHlub3NfZHNpICpkc2ksIGJv b2wgZW5hYmxlKQogewogCXUzMiByZWc7CgotCXJlZyA9IHJlYWRsKGRzaS0+cmVnX2Jhc2UgKyBE U0lNX01EUkVTT0xfUkVHKTsKKwlyZWcgPSBEU0lfUkVBRChkc2ksIERTSU1fTURSRVNPTF9SRUcp OwogCWlmIChlbmFibGUpCiAJCXJlZyB8PSBEU0lNX01BSU5fU1RBTkRfQlk7CiAJZWxzZQogCQly ZWcgJj0gfkRTSU1fTUFJTl9TVEFORF9CWTsKLQl3cml0ZWwocmVnLCBkc2ktPnJlZ19iYXNlICsg RFNJTV9NRFJFU09MX1JFRyk7CisJRFNJX1dSSVRFKGRzaSwgRFNJTV9NRFJFU09MX1JFRywgcmVn KTsKIH0KCiBzdGF0aWMgaW50IGV4eW5vc19kc2lfd2FpdF9mb3JfaGRyX2ZpZm8oc3RydWN0IGV4 eW5vc19kc2kgKmRzaSkKQEAgLTc0OCw3ICs4NDIsNyBAQCBzdGF0aWMgaW50IGV4eW5vc19kc2lf d2FpdF9mb3JfaGRyX2ZpZm8oc3RydWN0IGV4eW5vc19kc2kgKmRzaSkKIAlpbnQgdGltZW91dCA9 IDIwMDA7CgogCWRvIHsKLQkJdTMyIHJlZyA9IHJlYWRsKGRzaS0+cmVnX2Jhc2UgKyBEU0lNX0ZJ Rk9DVFJMX1JFRyk7CisJCXUzMiByZWcgPSBEU0lfUkVBRChkc2ksIERTSU1fRklGT0NUUkxfUkVH KTsKCiAJCWlmICghKHJlZyAmIERTSU1fU0ZSX0hFQURFUl9GVUxMKSkKIAkJCXJldHVybiAwOwpA QCAtNzYyLDIyICs4NTYsMjEgQEAgc3RhdGljIGludCBleHlub3NfZHNpX3dhaXRfZm9yX2hkcl9m aWZvKHN0cnVjdCBleHlub3NfZHNpICpkc2kpCgogc3RhdGljIHZvaWQgZXh5bm9zX2RzaV9zZXRf Y21kX2xwbShzdHJ1Y3QgZXh5bm9zX2RzaSAqZHNpLCBib29sIGxwbSkKIHsKLQl1MzIgdiA9IHJl YWRsKGRzaS0+cmVnX2Jhc2UgKyBEU0lNX0VTQ01PREVfUkVHKTsKKwl1MzIgdiA9IERTSV9SRUFE KGRzaSwgRFNJTV9FU0NNT0RFX1JFRyk7CgogCWlmIChscG0pCiAJCXYgfD0gRFNJTV9DTURfTFBE VF9MUDsKIAllbHNlCiAJCXYgJj0gfkRTSU1fQ01EX0xQRFRfTFA7CgotCXdyaXRlbCh2LCBkc2kt PnJlZ19iYXNlICsgRFNJTV9FU0NNT0RFX1JFRyk7CisJRFNJX1dSSVRFKGRzaSwgRFNJTV9FU0NN T0RFX1JFRywgdik7CiB9Cgogc3RhdGljIHZvaWQgZXh5bm9zX2RzaV9mb3JjZV9idGEoc3RydWN0 IGV4eW5vc19kc2kgKmRzaSkKIHsKLQl1MzIgdiA9IHJlYWRsKGRzaS0+cmVnX2Jhc2UgKyBEU0lN X0VTQ01PREVfUkVHKTsKLQorCXUzMiB2ID0gRFNJX1JFQUQoZHNpLCBEU0lNX0VTQ01PREVfUkVH KTsKIAl2IHw9IERTSU1fRk9SQ0VfQlRBOwotCXdyaXRlbCh2LCBkc2ktPnJlZ19iYXNlICsgRFNJ TV9FU0NNT0RFX1JFRyk7CisJRFNJX1dSSVRFKGRzaSwgRFNJTV9FU0NNT0RFX1JFRywgdik7CiB9 Cgogc3RhdGljIHZvaWQgZXh5bm9zX2RzaV9zZW5kX3RvX2ZpZm8oc3RydWN0IGV4eW5vc19kc2kg KmRzaSwKQEAgLTgwMSw3ICs4OTQsNyBAQCBzdGF0aWMgdm9pZCBleHlub3NfZHNpX3NlbmRfdG9f ZmlmbyhzdHJ1Y3QgZXh5bm9zX2RzaSAqZHNpLAogCXdoaWxlIChsZW5ndGggPj0gNCkgewogCQly ZWcgPSAocGF5bG9hZFszXSA8PCAyNCkgfCAocGF5bG9hZFsyXSA8PCAxNikKIAkJCQkJfCAocGF5 bG9hZFsxXSA8PCA4KSB8IHBheWxvYWRbMF07Ci0JCXdyaXRlbChyZWcsIGRzaS0+cmVnX2Jhc2Ug KyBEU0lNX1BBWUxPQURfUkVHKTsKKwkJRFNJX1dSSVRFKGRzaSwgRFNJTV9QQVlMT0FEX1JFRywg cmVnKTsKIAkJcGF5bG9hZCArPSA0OwogCQlsZW5ndGggLT0gNDsKIAl9CkBAIC04MTYsNyArOTA5 LDcgQEAgc3RhdGljIHZvaWQgZXh5bm9zX2RzaV9zZW5kX3RvX2ZpZm8oc3RydWN0IGV4eW5vc19k c2kgKmRzaSwKIAkJLyogRmFsbCB0aHJvdWdoICovCiAJY2FzZSAxOgogCQlyZWcgfD0gcGF5bG9h ZFswXTsKLQkJd3JpdGVsKHJlZywgZHNpLT5yZWdfYmFzZSArIERTSU1fUEFZTE9BRF9SRUcpOwor CQlEU0lfV1JJVEUoZHNpLCBEU0lNX1BBWUxPQURfUkVHLCByZWcpOwogCQlicmVhazsKIAljYXNl IDA6CiAJCS8qIERvIG5vdGhpbmcgKi8KQEAgLTgzOSw3ICs5MzIsNyBAQCBzdGF0aWMgdm9pZCBl eHlub3NfZHNpX3NlbmRfdG9fZmlmbyhzdHJ1Y3QgZXh5bm9zX2RzaSAqZHNpLAogCQlkc2ktPnN0 YXRlIF49IERTSU1fU1RBVEVfQ01EX0xQTTsKIAl9CgotCXdyaXRlbChyZWcsIGRzaS0+cmVnX2Jh c2UgKyBEU0lNX1BLVEhEUl9SRUcpOworCURTSV9XUklURShkc2ksIERTSU1fUEtUSERSX1JFRywg cmVnKTsKCiAJaWYgKHhmZXItPmZsYWdzICYgTUlQSV9EU0lfTVNHX1JFUV9BQ0spCiAJCWV4eW5v c19kc2lfZm9yY2VfYnRhKGRzaSk7CkBAIC04NTUsNyArOTQ4LDcgQEAgc3RhdGljIHZvaWQgZXh5 bm9zX2RzaV9yZWFkX2Zyb21fZmlmbyhzdHJ1Y3QgZXh5bm9zX2RzaSAqZHNpLAogCXUzMiByZWc7 CgogCWlmIChmaXJzdCkgewotCQlyZWcgPSByZWFkbChkc2ktPnJlZ19iYXNlICsgRFNJTV9SWEZJ Rk9fUkVHKTsKKwkJcmVnID0gRFNJX1JFQUQoZHNpLCBEU0lNX1JYRklGT19SRUcpOwoKIAkJc3dp dGNoIChyZWcgJiAweDNmKSB7CiAJCWNhc2UgTUlQSV9EU0lfUlhfR0VORVJJQ19TSE9SVF9SRUFE X1JFU1BPTlNFXzJCWVRFOgpAQCAtODk0LDcgKzk4Nyw3IEBAIHN0YXRpYyB2b2lkIGV4eW5vc19k c2lfcmVhZF9mcm9tX2ZpZm8oc3RydWN0IGV4eW5vc19kc2kgKmRzaSwKCiAJLyogUmVjZWl2ZSBw YXlsb2FkICovCiAJd2hpbGUgKGxlbmd0aCA+PSA0KSB7Ci0JCXJlZyA9IHJlYWRsKGRzaS0+cmVn X2Jhc2UgKyBEU0lNX1JYRklGT19SRUcpOworCQlyZWcgPSBEU0lfUkVBRChkc2ksIERTSU1fUlhG SUZPX1JFRyk7CiAJCXBheWxvYWRbMF0gPSAocmVnID4+ICAwKSAmIDB4ZmY7CiAJCXBheWxvYWRb MV0gPSAocmVnID4+ICA4KSAmIDB4ZmY7CiAJCXBheWxvYWRbMl0gPSAocmVnID4+IDE2KSAmIDB4 ZmY7CkBAIC05MDQsNyArOTk3LDcgQEAgc3RhdGljIHZvaWQgZXh5bm9zX2RzaV9yZWFkX2Zyb21f ZmlmbyhzdHJ1Y3QgZXh5bm9zX2RzaSAqZHNpLAogCX0KCiAJaWYgKGxlbmd0aCkgewotCQlyZWcg PSByZWFkbChkc2ktPnJlZ19iYXNlICsgRFNJTV9SWEZJRk9fUkVHKTsKKwkJcmVnID0gRFNJX1JF QUQoZHNpLCBEU0lNX1JYRklGT19SRUcpOwogCQlzd2l0Y2ggKGxlbmd0aCkgewogCQljYXNlIDM6 CiAJCQlwYXlsb2FkWzJdID0gKHJlZyA+PiAxNikgJiAweGZmOwpAQCAtMTA3OSwxOCArMTE3Miwx OCBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgZXh5bm9zX2RzaV9pcnEoaW50IGlycSwgdm9pZCAqZGV2 X2lkKQogCXN0cnVjdCBleHlub3NfZHNpICpkc2kgPSBkZXZfaWQ7CiAJdTMyIHN0YXR1czsKCi0J c3RhdHVzID0gcmVhZGwoZHNpLT5yZWdfYmFzZSArIERTSU1fSU5UU1JDX1JFRyk7CisJc3RhdHVz ID0gRFNJX1JFQUQoZHNpLCBEU0lNX0lOVFNSQ19SRUcpOwogCWlmICghc3RhdHVzKSB7CiAJCXN0 YXRpYyB1bnNpZ25lZCBsb25nIGludCBqOwogCQlpZiAocHJpbnRrX3RpbWVkX3JhdGVsaW1pdCgm aiwgNTAwKSkKIAkJCWRldl93YXJuKGRzaS0+ZGV2LCAic3B1cmlvdXMgaW50ZXJydXB0XG4iKTsK IAkJcmV0dXJuIElSUV9IQU5ETEVEOwogCX0KLQl3cml0ZWwoc3RhdHVzLCBkc2ktPnJlZ19iYXNl ICsgRFNJTV9JTlRTUkNfUkVHKTsKKwlEU0lfV1JJVEUoZHNpLCBEU0lNX0lOVFNSQ19SRUcsIHN0 YXR1cyk7CgogCWlmIChzdGF0dXMgJiBEU0lNX0lOVF9TV19SU1RfUkVMRUFTRSkgewogCQl1MzIg bWFzayA9IH4oRFNJTV9JTlRfUlhfRE9ORSB8IERTSU1fSU5UX1NGUl9GSUZPX0VNUFRZKTsKLQkJ d3JpdGVsKG1hc2ssIGRzaS0+cmVnX2Jhc2UgKyBEU0lNX0lOVE1TS19SRUcpOworCQlEU0lfV1JJ VEUoZHNpLCBEU0lNX0lOVE1TS19SRUcsIG1hc2spOwogCQljb21wbGV0ZSgmZHNpLT5jb21wbGV0 ZWQpOwogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAJfQpAQCAtMTEzMywxMCArMTIyNiwxMyBAQCBz dGF0aWMgdm9pZCBleHlub3NfZHNpX2Rpc2FibGVfaXJxKHN0cnVjdCBleHlub3NfZHNpICpkc2kp Cgogc3RhdGljIGludCBleHlub3NfZHNpX2luaXQoc3RydWN0IGV4eW5vc19kc2kgKmRzaSkKIHsK KwlzdHJ1Y3QgZXh5bm9zX2RzaV9kcml2ZXJfZGF0YSAqZHJpdmVyX2RhdGEgPSBkc2ktPmRyaXZl cl9kYXRhOworCiAJZXh5bm9zX2RzaV9yZXNldChkc2kpOwogCWV4eW5vc19kc2lfZW5hYmxlX2ly cShkc2kpOwogCWV4eW5vc19kc2lfZW5hYmxlX2Nsb2NrKGRzaSk7Ci0JZXh5bm9zX2RzaV93YWl0 X2Zvcl9yZXNldChkc2kpOworCWlmIChkcml2ZXJfZGF0YS0+d2FpdF9mb3JfcmVzZXQpCisJCWV4 eW5vc19kc2lfd2FpdF9mb3JfcmVzZXQoZHNpKTsKIAlleHlub3NfZHNpX3NldF9waHlfY3RybChk c2kpOwogCWV4eW5vc19kc2lfaW5pdF9saW5rKGRzaSk7CgpAQCAtMTI4NSw3ICsxMzgxLDggQEAg c3RhdGljIGNvbnN0IHN0cnVjdCBtaXBpX2RzaV9ob3N0X29wcyBleHlub3NfZHNpX29wcyA9IHsK CiBzdGF0aWMgaW50IGV4eW5vc19kc2lfcG93ZXJvbihzdHJ1Y3QgZXh5bm9zX2RzaSAqZHNpKQog ewotCWludCByZXQ7CisJc3RydWN0IGV4eW5vc19kc2lfZHJpdmVyX2RhdGEgKmRyaXZlcl9kYXRh ID0gZHNpLT5kcml2ZXJfZGF0YTsKKwlpbnQgcmV0LCBpOwoKIAlyZXQgPSByZWd1bGF0b3JfYnVs a19lbmFibGUoQVJSQVlfU0laRShkc2ktPnN1cHBsaWVzKSwgZHNpLT5zdXBwbGllcyk7CiAJaWYg KHJldCA8IDApIHsKQEAgLTEyOTMsMzEgKzEzOTAsMjMgQEAgc3RhdGljIGludCBleHlub3NfZHNp X3Bvd2Vyb24oc3RydWN0IGV4eW5vc19kc2kgKmRzaSkKIAkJcmV0dXJuIHJldDsKIAl9CgotCXJl dCA9IGNsa19wcmVwYXJlX2VuYWJsZShkc2ktPmJ1c19jbGspOwotCWlmIChyZXQgPCAwKSB7Ci0J CWRldl9lcnIoZHNpLT5kZXYsICJjYW5ub3QgZW5hYmxlIGJ1cyBjbG9jayAlZFxuIiwgcmV0KTsK LQkJZ290byBlcnJfYnVzX2NsazsKLQl9Ci0KLQlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoZHNp LT5zY2xrX2Nsayk7Ci0JaWYgKHJldCA8IDApIHsKLQkJZGV2X2Vycihkc2ktPmRldiwgImNhbm5v dCBlbmFibGUgcGxsIGNsb2NrICVkXG4iLCByZXQpOwotCQlnb3RvIGVycl9zY2xrX2NsazsKKwlm b3IgKGkgPSAwOyBpIDwgZHJpdmVyX2RhdGEtPm51bV9jbGtzOyBpKyspIHsKKwkJcmV0ID0gY2xr X3ByZXBhcmVfZW5hYmxlKGRzaS0+Y2xrc1tpXSk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBl cnJfY2xrOwogCX0KCiAJcmV0ID0gcGh5X3Bvd2VyX29uKGRzaS0+cGh5KTsKIAlpZiAocmV0IDwg MCkgewogCQlkZXZfZXJyKGRzaS0+ZGV2LCAiY2Fubm90IGVuYWJsZSBwaHkgJWRcbiIsIHJldCk7 Ci0JCWdvdG8gZXJyX3BoeTsKKwkJZ290byBlcnJfY2xrOwogCX0KCiAJcmV0dXJuIDA7CgotZXJy X3BoeToKLQljbGtfZGlzYWJsZV91bnByZXBhcmUoZHNpLT5zY2xrX2Nsayk7Ci1lcnJfc2Nsa19j bGs6Ci0JY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+YnVzX2Nsayk7Ci1lcnJfYnVzX2NsazoK K2Vycl9jbGs6CisJd2hpbGUgKC0taSA+IC0xKQorCQljbGtfZGlzYWJsZV91bnByZXBhcmUoZHNp LT5jbGtzW2ldKTsKIAlyZWd1bGF0b3JfYnVsa19kaXNhYmxlKEFSUkFZX1NJWkUoZHNpLT5zdXBw bGllcyksIGRzaS0+c3VwcGxpZXMpOwoKIAlyZXR1cm4gcmV0OwpAQCAtMTMyNSw3ICsxNDE0LDgg QEAgZXJyX2J1c19jbGs6Cgogc3RhdGljIHZvaWQgZXh5bm9zX2RzaV9wb3dlcm9mZihzdHJ1Y3Qg ZXh5bm9zX2RzaSAqZHNpKQogewotCWludCByZXQ7CisJc3RydWN0IGV4eW5vc19kc2lfZHJpdmVy X2RhdGEgKmRyaXZlcl9kYXRhID0gZHNpLT5kcml2ZXJfZGF0YTsKKwlpbnQgcmV0LCBpOwoKIAl1 c2xlZXBfcmFuZ2UoMTAwMDAsIDIwMDAwKTsKCkBAIC0xMzQxLDggKzE0MzEsOCBAQCBzdGF0aWMg dm9pZCBleHlub3NfZHNpX3Bvd2Vyb2ZmKHN0cnVjdCBleHlub3NfZHNpICpkc2kpCgogCXBoeV9w b3dlcl9vZmYoZHNpLT5waHkpOwoKLQljbGtfZGlzYWJsZV91bnByZXBhcmUoZHNpLT5zY2xrX2Ns ayk7Ci0JY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+YnVzX2Nsayk7CisJZm9yIChpID0gZHJp dmVyX2RhdGEtPm51bV9jbGtzIC0gMTsgaSA+IC0xOyBpLS0pCisJCWNsa19kaXNhYmxlX3VucHJl cGFyZShkc2ktPmNsa3NbaV0pOwoKIAlyZXQgPSByZWd1bGF0b3JfYnVsa19kaXNhYmxlKEFSUkFZ X1NJWkUoZHNpLT5zdXBwbGllcyksIGRzaS0+c3VwcGxpZXMpOwogCWlmIChyZXQgPCAwKQpAQCAt MTY3MSw3ICsxNzYxLDcgQEAgc3RhdGljIGludCBleHlub3NfZHNpX3Byb2JlKHN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXYpCiAJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKIAlz dHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlzdHJ1Y3QgZXh5bm9zX2RzaSAqZHNpOwotCWludCByZXQ7 CisJaW50IHJldCwgaTsKCiAJZHNpID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpkc2kpLCBH RlBfS0VSTkVMKTsKIAlpZiAoIWRzaSkKQEAgLTE3MTEsMTggKzE4MDEsMTcgQEAgc3RhdGljIGlu dCBleHlub3NfZHNpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJCXJldHVy biAtRVBST0JFX0RFRkVSOwogCX0KCi0JZHNpLT5zY2xrX2NsayA9IGRldm1fY2xrX2dldChkZXYs ICJzY2xrX21pcGkiKTsKLQlpZiAoSVNfRVJSKGRzaS0+c2Nsa19jbGspKSB7Ci0JCWRldl9pbmZv KGRldiwgImZhaWxlZCB0byBnZXQgZHNpIHNjbGsgY2xvY2tcbiIpOwotCQlyZXQgPSBQVFJfRVJS KGRzaS0+c2Nsa19jbGspOwotCQlnb3RvIGVycl9kZWxfY29tcG9uZW50OwotCX0KLQotCWRzaS0+ YnVzX2NsayA9IGRldm1fY2xrX2dldChkZXYsICJidXNfY2xrIik7Ci0JaWYgKElTX0VSUihkc2kt PmJ1c19jbGspKSB7Ci0JCWRldl9pbmZvKGRldiwgImZhaWxlZCB0byBnZXQgZHNpIGJ1cyBjbG9j a1xuIik7Ci0JCXJldCA9IFBUUl9FUlIoZHNpLT5idXNfY2xrKTsKLQkJZ290byBlcnJfZGVsX2Nv bXBvbmVudDsKKwlkc2ktPmNsa3MgPSBkZXZtX2t6YWxsb2MoZGV2LAorCQkJc2l6ZW9mKCpkc2kt PmNsa3MpICogZHNpLT5kcml2ZXJfZGF0YS0+bnVtX2Nsa3MsCisJCQlHRlBfS0VSTkVMKTsKKwlm b3IgKGkgPSAwOyBpIDwgZHNpLT5kcml2ZXJfZGF0YS0+bnVtX2Nsa3M7IGkrKykgeworCQlkc2kt PmNsa3NbaV0gPSBkZXZtX2Nsa19nZXQoZGV2LCBjbGtfbmFtZXNbaV0pOworCQlpZiAoSVNfRVJS KGRzaS0+Y2xrc1tpXSkpIHsKKwkJCWRldl9pbmZvKGRldiwgImZhaWxlZCB0byBnZXQgdGhlIGNs b2NrOiAlc1xuIiwKKwkJCQkJCQkJY2xrX25hbWVzW2ldKTsKKwkJCXJldCA9IFBUUl9FUlIoZHNp LT5jbGtzW2ldKTsKKwkJCWdvdG8gZXJyX2RlbF9jb21wb25lbnQ7CisJCX0KIAl9CgogCXJlcyA9 IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7Ci0tCjEuOS4x CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2 ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=