From mboxrd@z Thu Jan 1 00:00:00 1970 From: Finn Thain Subject: [PATCH v7 02/26] m68k/atari: Move Atari-specific code out of drivers/char/nvram.c Date: Sun, 01 Nov 2015 21:42:04 +1100 Message-ID: <20151101104202.811675851@telegraphics.com.au> References: <20151101104202.301856132@telegraphics.com.au> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline; filename=atari-nvram-move-to-arch-m68k List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: linuxppc-dev-bounces+glppe-linuxppc-embedded-2=m.gmane.org@lists.ozlabs.org Sender: "Linuxppc-dev" To: linux-kernel@vger.kernel.org, linux-m68k@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, Geert Uytterhoeven , Arnd Bergmann , Greg Kroah-Hartman List-Id: linux-m68k@vger.kernel.org TW92ZSB0aGUgbTY4ay1zcGVjaWZpYyBjb2RlIGVsc2V3aGVyZSB0byBtYWtlIHRoZSBkcml2ZXIg Z2VuZXJpYy4KClNpZ25lZC1vZmYtYnk6IEZpbm4gVGhhaW4gPGZ0aGFpbkB0ZWxlZ3JhcGhpY3Mu Y29tLmF1PgpUZXN0ZWQtYnk6IENocmlzdGlhbiBULiBTdGVpZ2llcyA8Y3RzQGRlYmlhbi5vcmc+ CkFja2VkLWJ5OiBHZWVydCBVeXR0ZXJob2V2ZW4gPGdlZXJ0QGxpbnV4LW02OGsub3JnPgoKLS0t CgpDaGFuZ2VzIHNpbmNlIHYzOgotIE1vdmUgdGhlIHZtb2RlIGZpeCB0byBhIHNlcGFyYXRlIHBh dGNoIGFzIHJlcXVlc3RlZCBieSBHZWVydC4KCi0tLQogYXJjaC9tNjhrL2F0YXJpL01ha2VmaWxl IHwgICAgMiAKIGFyY2gvbTY4ay9hdGFyaS9udnJhbS5jICB8ICAyNTUgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2NoYXIvbnZyYW0uYyAgICAgfCAg MjgwICsrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAzIGZp bGVzIGNoYW5nZWQsIDI5MiBpbnNlcnRpb25zKCspLCAyNDUgZGVsZXRpb25zKC0pCgpJbmRleDog bGludXgvYXJjaC9tNjhrL2F0YXJpL252cmFtLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gL2Rldi9udWxsCTE5 NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKyBsaW51eC9hcmNoL202OGsvYXRh cmkvbnZyYW0uYwkyMDE1LTExLTAxIDIxOjQxOjI1LjAwMDAwMDAwMCArMTEwMApAQCAtMCwwICsx LDI1NSBAQAorLyoKKyAqIENNT1MvTlYtUkFNIGRyaXZlciBmb3IgQXRhcmkuIEFkYXB0ZWQgZnJv bSBkcml2ZXJzL2NoYXIvbnZyYW0uYy4KKyAqIENvcHlyaWdodCAoQykgMTk5NyBSb21hbiBIb2Rl ayA8Um9tYW4uSG9kZWtAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CisgKiBpZGVhIGJ5IGFu ZCB3aXRoIGhlbHAgZnJvbSBSaWNoYXJkIEplbGluZWsgPHJqQHN1c2UuZGU+CisgKiBQb3J0aW9u cyBjb3B5cmlnaHQgKGMpIDIwMDEsMjAwMiBTdW4gTWljcm9zeXN0ZW1zICh0aG9ja2luQHN1bi5j b20pCisgKiBGdXJ0aGVyIGNvbnRyaWJ1dGlvbnMgZnJvbSBDZXNhciBCYXJyb3MsIEVyaWsgR2ls bGluZywgVGltIEhvY2tpbiBhbmQKKyAqIFdpbSBWYW4gU2Vicm9lY2suCisgKi8KKworI2luY2x1 ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxp bnV4L21jMTQ2ODE4cnRjLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8 bGludXgvbnZyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGlu dXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxp bnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2F0YXJpaHcuaD4KKyNpbmNsdWRlIDxhc20vYXRh cmlpbnRzLmg+CisKKyNkZWZpbmUgTlZSQU1fQllURVMJCTUwCisKKy8qIEl0IGlzIHdvcnRoIG5v dGluZyB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhbGwgYWNjZXNzIGJ5dGVzIG9mIGdlbmVyYWwKKyAq IHB1cnBvc2UgbWVtb3J5IGluIHRoZSBOVlJBTSAtIHRoYXQgaXMgdG8gc2F5LCB0aGV5IGFsbCBh ZGQgdGhlCisgKiBOVlJBTV9GSVJTVF9CWVRFIG9mZnNldC4gUGFzcyB0aGVtIG9mZnNldHMgaW50 byBOVlJBTSBhcyBpZiB5b3UgZGlkIG5vdAorICoga25vdyBhYm91dCB0aGUgUlRDIGNydWZ0Lgor ICovCisKKy8qIE5vdGUgdGhhdCAqYWxsKiBjYWxscyB0byBDTU9TX1JFQUQgYW5kIENNT1NfV1JJ VEUgbXVzdCBiZSBkb25lIHdpdGgKKyAqIHJ0Y19sb2NrIGhlbGQuIER1ZSB0byB0aGUgaW5kZXgt cG9ydC9kYXRhLXBvcnQgZGVzaWduIG9mIHRoZSBSVEMsIHdlCisgKiBkb24ndCB3YW50IHR3byBk aWZmZXJlbnQgdGhpbmdzIHRyeWluZyB0byBnZXQgdG8gaXQgYXQgb25jZS4gKGUuZy4gdGhlCisg KiBwZXJpb2RpYyAxMSBtaW4gc3luYyBmcm9tIGtlcm5lbC90aW1lL250cC5jIHZzLiB0aGlzIGRy aXZlci4pCisgKi8KKwordW5zaWduZWQgY2hhciBfX252cmFtX3JlYWRfYnl0ZShpbnQgaSkKK3sK KwlyZXR1cm4gQ01PU19SRUFEKE5WUkFNX0ZJUlNUX0JZVEUgKyBpKTsKK30KKwordW5zaWduZWQg Y2hhciBudnJhbV9yZWFkX2J5dGUoaW50IGkpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1 bnNpZ25lZCBjaGFyIGM7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcnRjX2xvY2ssIGZsYWdzKTsK KwljID0gX19udnJhbV9yZWFkX2J5dGUoaSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnRj X2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gYzsKK30KK0VYUE9SVF9TWU1CT0wobnZyYW1fcmVhZF9i eXRlKTsKKworLyogVGhpcyByYWNlcyBuaWNlbHkgd2l0aCB0cnlpbmcgdG8gcmVhZCB3aXRoIGNo ZWNrc3VtIGNoZWNraW5nICovCit2b2lkIF9fbnZyYW1fd3JpdGVfYnl0ZSh1bnNpZ25lZCBjaGFy IGMsIGludCBpKQoreworCUNNT1NfV1JJVEUoYywgTlZSQU1fRklSU1RfQllURSArIGkpOworfQor Cit2b2lkIG52cmFtX3dyaXRlX2J5dGUodW5zaWduZWQgY2hhciBjLCBpbnQgaSkKK3sKKwl1bnNp Z25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJ0Y19sb2NrLCBmbGFncyk7 CisJX19udnJhbV93cml0ZV9ieXRlKGMsIGkpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0 Y19sb2NrLCBmbGFncyk7Cit9CisKKy8qIE9uIEF0YXJpcywgdGhlIGNoZWNrc3VtIGlzIG92ZXIg YWxsIGJ5dGVzIGV4Y2VwdCB0aGUgY2hlY2tzdW0gYnl0ZXMKKyAqIHRoZW1zZWx2ZXM7IHRoZXNl IGFyZSBhdCB0aGUgdmVyeSBlbmQuCisgKi8KKyNkZWZpbmUgQVRBUklfQ0tTX1JBTkdFX1NUQVJU CTAKKyNkZWZpbmUgQVRBUklfQ0tTX1JBTkdFX0VORAk0NworI2RlZmluZSBBVEFSSV9DS1NfTE9D CQk0OAorCitpbnQgX19udnJhbV9jaGVja19jaGVja3N1bSh2b2lkKQoreworCWludCBpOworCXVu c2lnbmVkIGNoYXIgc3VtID0gMDsKKworCWZvciAoaSA9IEFUQVJJX0NLU19SQU5HRV9TVEFSVDsg aSA8PSBBVEFSSV9DS1NfUkFOR0VfRU5EOyArK2kpCisJCXN1bSArPSBfX252cmFtX3JlYWRfYnl0 ZShpKTsKKwlyZXR1cm4gKF9fbnZyYW1fcmVhZF9ieXRlKEFUQVJJX0NLU19MT0MpID09ICh+c3Vt ICYgMHhmZikpICYmCisJICAgICAgIChfX252cmFtX3JlYWRfYnl0ZShBVEFSSV9DS1NfTE9DICsg MSkgPT0gKHN1bSAmIDB4ZmYpKTsKK30KKworaW50IG52cmFtX2NoZWNrX2NoZWNrc3VtKHZvaWQp Cit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcnY7CisKKwlzcGluX2xvY2tfaXJxc2F2 ZSgmcnRjX2xvY2ssIGZsYWdzKTsKKwlydiA9IF9fbnZyYW1fY2hlY2tfY2hlY2tzdW0oKTsKKwlz cGluX3VubG9ja19pcnFyZXN0b3JlKCZydGNfbG9jaywgZmxhZ3MpOworCXJldHVybiBydjsKK30K K0VYUE9SVF9TWU1CT0wobnZyYW1fY2hlY2tfY2hlY2tzdW0pOworCitzdGF0aWMgdm9pZCBfX252 cmFtX3NldF9jaGVja3N1bSh2b2lkKQoreworCWludCBpOworCXVuc2lnbmVkIGNoYXIgc3VtID0g MDsKKworCWZvciAoaSA9IEFUQVJJX0NLU19SQU5HRV9TVEFSVDsgaSA8PSBBVEFSSV9DS1NfUkFO R0VfRU5EOyArK2kpCisJCXN1bSArPSBfX252cmFtX3JlYWRfYnl0ZShpKTsKKwlfX252cmFtX3dy aXRlX2J5dGUofnN1bSwgQVRBUklfQ0tTX0xPQyk7CisJX19udnJhbV93cml0ZV9ieXRlKHN1bSwg QVRBUklfQ0tTX0xPQyArIDEpOworfQorCisjaWZkZWYgQ09ORklHX1BST0NfRlMKK3N0YXRpYyBz dHJ1Y3QgeworCXVuc2lnbmVkIGNoYXIgdmFsOworCWNoYXIgKm5hbWU7Cit9IGJvb3RfcHJlZnNb XSA9IHsKKwl7IDB4ODAsICJUT1MiIH0sCisJeyAweDQwLCAiQVNWIiB9LAorCXsgMHgyMCwgIk5l dEJTRCAoPykiIH0sCisJeyAweDEwLCAiTGludXgiIH0sCisJeyAweDAwLCAidW5zcGVjaWZpZWQi IH0sCit9OworCitzdGF0aWMgY2hhciAqbGFuZ3VhZ2VzW10gPSB7CisJIkVuZ2xpc2ggKFVTKSIs CisJIkdlcm1hbiIsCisJIkZyZW5jaCIsCisJIkVuZ2xpc2ggKFVLKSIsCisJIlNwYW5pc2giLAor CSJJdGFsaWFuIiwKKwkiNiAodW5kZWZpbmVkKSIsCisJIlN3aXNzIChGcmVuY2gpIiwKKwkiU3dp c3MgKEdlcm1hbikiLAorfTsKKworc3RhdGljIGNoYXIgKmRhdGVmb3JtYXRbXSA9IHsKKwkiTU0l Y0REJWNZWSIsCisJIkREJWNNTSVjWVkiLAorCSJZWSVjTU0lY0REIiwKKwkiWVklY0REJWNNTSIs CisJIjQgKHVuZGVmaW5lZCkiLAorCSI1ICh1bmRlZmluZWQpIiwKKwkiNiAodW5kZWZpbmVkKSIs CisJIjcgKHVuZGVmaW5lZCkiLAorfTsKKworc3RhdGljIGNoYXIgKmNvbG9yc1tdID0geworCSIy IiwgIjQiLCAiMTYiLCAiMjU2IiwgIjY1NTM2IiwgIj8/IiwgIj8/IiwgIj8/IgorfTsKKworc3Rh dGljIHZvaWQgYXRhcmlfbnZyYW1fcHJvY19yZWFkKHVuc2lnbmVkIGNoYXIgKm52cmFtLCBzdHJ1 Y3Qgc2VxX2ZpbGUgKnNlcSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lk ICpvZmZzZXQpCit7CisJaW50IGNoZWNrc3VtOworCWludCBpOworCXVuc2lnbmVkIHZtb2RlOwor CisJc3Bpbl9sb2NrX2lycSgmcnRjX2xvY2spOworCWNoZWNrc3VtID0gX19udnJhbV9jaGVja19j aGVja3N1bSgpOworCXNwaW5fdW5sb2NrX2lycSgmcnRjX2xvY2spOworCisJc2VxX3ByaW50Zihz ZXEsICJDaGVja3N1bSBzdGF0dXMgIDogJXN2YWxpZFxuIiwgY2hlY2tzdW0gPyAiIiA6ICJub3Qg Iik7CisKKwlzZXFfcHV0cyhzZXEsICJCb290IHByZWZlcmVuY2UgIDogIik7CisJZm9yIChpID0g QVJSQVlfU0laRShib290X3ByZWZzKSAtIDE7IGkgPj0gMDsgLS1pKQorCQlpZiAobnZyYW1bMV0g PT0gYm9vdF9wcmVmc1tpXS52YWwpIHsKKwkJCXNlcV9wcmludGYoc2VxLCAiJXNcbiIsIGJvb3Rf cHJlZnNbaV0ubmFtZSk7CisJCQlicmVhazsKKwkJfQorCWlmIChpIDwgMCkKKwkJc2VxX3ByaW50 ZihzZXEsICIweCUwMnggKHVuZGVmaW5lZClcbiIsIG52cmFtWzFdKTsKKworCXNlcV9wcmludGYo c2VxLCAiU0NTSSBhcmJpdHJhdGlvbiA6ICVzXG4iLAorCSAgICAgICAgICAgKG52cmFtWzE2XSAm IDB4ODApID8gIm9uIiA6ICJvZmYiKTsKKwlzZXFfcHV0cyhzZXEsICJTQ1NJIGhvc3QgSUQgICAg IDogIik7CisJaWYgKG52cmFtWzE2XSAmIDB4ODApCisJCXNlcV9wcmludGYoc2VxLCAiJWRcbiIs IG52cmFtWzE2XSAmIDcpOworCWVsc2UKKwkJc2VxX3B1dHMoc2VxLCAibi9hXG4iKTsKKworCWlm ICghTUFDSF9JU19GQUxDT04pCisJCXJldHVybjsKKworCXNlcV9wdXRzKHNlcSwgIk9TIGxhbmd1 YWdlICAgICAgOiAiKTsKKwlpZiAobnZyYW1bNl0gPCBBUlJBWV9TSVpFKGxhbmd1YWdlcykpCisJ CXNlcV9wcmludGYoc2VxLCAiJXNcbiIsIGxhbmd1YWdlc1tudnJhbVs2XV0pOworCWVsc2UKKwkJ c2VxX3ByaW50ZihzZXEsICIldSAodW5kZWZpbmVkKVxuIiwgbnZyYW1bNl0pOworCXNlcV9wdXRz KHNlcSwgIktleWJvYXJkIGxhbmd1YWdlOiAiKTsKKwlpZiAobnZyYW1bN10gPCBBUlJBWV9TSVpF KGxhbmd1YWdlcykpCisJCXNlcV9wcmludGYoc2VxLCAiJXNcbiIsIGxhbmd1YWdlc1tudnJhbVs3 XV0pOworCWVsc2UKKwkJc2VxX3ByaW50ZihzZXEsICIldSAodW5kZWZpbmVkKVxuIiwgbnZyYW1b N10pOworCXNlcV9wdXRzKHNlcSwgIkRhdGUgZm9ybWF0ICAgICAgOiAiKTsKKwlzZXFfcHJpbnRm KHNlcSwgZGF0ZWZvcm1hdFtudnJhbVs4XSAmIDddLAorCSAgICAgICAgICAgbnZyYW1bOV0gPyBu dnJhbVs5XSA6ICcvJywgbnZyYW1bOV0gPyBudnJhbVs5XSA6ICcvJyk7CisJc2VxX3ByaW50Zihz ZXEsICIsICVkaCBjbG9ja1xuIiwgbnZyYW1bOF0gJiAxNiA/IDI0IDogMTIpOworCXNlcV9wdXRz KHNlcSwgIkJvb3QgZGVsYXkgICAgICAgOiAiKTsKKwlpZiAobnZyYW1bMTBdID09IDApCisJCXNl cV9wdXRzKHNlcSwgImRlZmF1bHQiKTsKKwllbHNlCisJCXNlcV9wcmludGYoc2VxLCAiJWRzJXNc biIsIG52cmFtWzEwXSwKKwkJICAgICAgICAgICBudnJhbVsxMF0gPCA4ID8gIiwgbm8gbWVtb3J5 IHRlc3QiIDogIiIpOworCisJdm1vZGUgPSAobnZyYW1bMTRdIDw8IDgpIHwgbnZyYW1bMTVdOwor CXNlcV9wcmludGYoc2VxLAorCSAgICAgICAgICAgIlZpZGVvIG1vZGUgICAgICAgOiAlcyBjb2xv cnMsICVkIGNvbHVtbnMsICVzICVzIG1vbml0b3JcbiIsCisJICAgICAgICAgICBjb2xvcnNbdm1v ZGUgJiA3XSwgdm1vZGUgJiA4ID8gODAgOiA0MCwKKwkgICAgICAgICAgIHZtb2RlICYgMTYgPyAi VkdBIiA6ICJUViIsIHZtb2RlICYgMzIgPyAiUEFMIiA6ICJOVFNDIik7CisJc2VxX3ByaW50Zihz ZXEsCisJICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICVzb3ZlcnNjYW4sIGNvbXBhdC4g bW9kZSAlcyVzXG4iLAorCSAgICAgICAgICAgdm1vZGUgJiA2NCA/ICIiIDogIm5vICIsIHZtb2Rl ICYgMTI4ID8gIm9uIiA6ICJvZmYiLAorCSAgICAgICAgICAgdm1vZGUgJiAyNTYgPworCSAgICAg ICAgICAgKHZtb2RlICYgMTYgPyAiLCBsaW5lIGRvdWJsaW5nIiA6ICIsIGhhbGYgc2NyZWVuIikg OiAiIik7Cit9CisKK3N0YXRpYyBpbnQgbnZyYW1fcHJvY19yZWFkKHN0cnVjdCBzZXFfZmlsZSAq c2VxLCB2b2lkICpvZmZzZXQpCit7CisJdW5zaWduZWQgY2hhciBjb250ZW50c1tOVlJBTV9CWVRF U107CisJaW50IGk7CisKKwlzcGluX2xvY2tfaXJxKCZydGNfbG9jayk7CisJZm9yIChpID0gMDsg aSA8IE5WUkFNX0JZVEVTOyArK2kpCisJCWNvbnRlbnRzW2ldID0gX19udnJhbV9yZWFkX2J5dGUo aSk7CisJc3Bpbl91bmxvY2tfaXJxKCZydGNfbG9jayk7CisKKwlhdGFyaV9udnJhbV9wcm9jX3Jl YWQoY29udGVudHMsIHNlcSwgb2Zmc2V0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50 IG52cmFtX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkK K3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgbnZyYW1fcHJvY19yZWFkLCBOVUxMKTsKK30K Kworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbnZyYW1fcHJvY19mb3BzID0g eworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBudnJhbV9wcm9jX29wZW4sCisJ LnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBz aW5nbGVfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGF0YXJpX252cmFtX2luaXQo dm9pZCkKK3sKKwlpZiAoIShNQUNIX0lTX0FUQVJJICYmIEFUQVJJSFdfUFJFU0VOVChUVF9DTEsp KSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoIXByb2NfY3JlYXRlKCJkcml2ZXIvbnZyYW0i LCAwLCBOVUxMLCAmbnZyYW1fcHJvY19mb3BzKSkgeworCQlwcl9lcnIoIm52cmFtOiBjYW4ndCBj cmVhdGUgL3Byb2MvZHJpdmVyL252cmFtXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJ cmV0dXJuIDA7Cit9CitkZXZpY2VfaW5pdGNhbGwoYXRhcmlfbnZyYW1faW5pdCk7CisjZW5kaWYg LyogQ09ORklHX1BST0NfRlMgKi8KSW5kZXg6IGxpbnV4L2FyY2gvbTY4ay9hdGFyaS9NYWtlZmls ZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09Ci0tLSBsaW51eC5vcmlnL2FyY2gvbTY4ay9hdGFyaS9NYWtlZmlsZQkyMDE1 LTExLTAxIDIxOjQxOjI0LjAwMDAwMDAwMCArMTEwMAorKysgbGludXgvYXJjaC9tNjhrL2F0YXJp L01ha2VmaWxlCTIwMTUtMTEtMDEgMjE6NDE6MjUuMDAwMDAwMDAwICsxMTAwCkBAIC02LDMgKzYs NSBAQCBvYmoteQkJOj0gY29uZmlnLm8gdGltZS5vIGRlYnVnLm8gYXRhaW50CiAJCQlhdGFzb3Vu ZC5vIHN0cmFtLm8KIAogb2JqLSQoQ09ORklHX0FUQVJJX0tCRF9DT1JFKQkrPSBhdGFrZXliLm8K Kworb2JqLSQoQ09ORklHX05WUkFNOm09eSkJCSs9IG52cmFtLm8KSW5kZXg6IGxpbnV4L2RyaXZl cnMvY2hhci9udnJhbS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGxpbnV4Lm9yaWcvZHJpdmVycy9jaGFyL252 cmFtLmMJMjAxNS0xMS0wMSAyMTo0MToyNC4wMDAwMDAwMDAgKzExMDAKKysrIGxpbnV4L2RyaXZl cnMvY2hhci9udnJhbS5jCTIwMTUtMTEtMDEgMjE6NDE6MjUuMDAwMDAwMDAwICsxMTAwCkBAIC0y MSwxMyArMjEsNiBAQAogICogaW9jdGwoTlZSQU1fU0VUQ0tTKSAoZG9lc24ndCBjaGFuZ2UgY29u dGVudHMsIGp1c3QgbWFrZXMgY2hlY2tzdW0gdmFsaWQKICAqIGFnYWluOyB1c2Ugd2l0aCBjYXJl ISkKICAqCi0gKiBUaGlzIGZpbGUgYWxzbyBwcm92aWRlcyBzb21lIGZ1bmN0aW9ucyBmb3Igb3Ro ZXIgcGFydHMgb2YgdGhlIGtlcm5lbCB0aGF0Ci0gKiB3YW50IHRvIGFjY2VzcyB0aGUgTlZSQU06 IG52cmFtX3tyZWFkLHdyaXRlLGNoZWNrX2NoZWNrc3VtLHNldF9jaGVja3N1bX0uCi0gKiBPYnZp b3VzbHkgdGhpcyBjYW4gYmUgdXNlZCBvbmx5IGlmIHRoaXMgZHJpdmVyIGlzIGFsd2F5cyBjb25m aWd1cmVkIGludG8KLSAqIHRoZSBrZXJuZWwgYW5kIGlzIG5vdCBhIG1vZHVsZS4gU2luY2UgdGhl IGZ1bmN0aW9ucyBhcmUgdXNlZCBieSBzb21lIEF0YXJpCi0gKiBkcml2ZXJzLCB0aGlzIGlzIHRo ZSBjYXNlIG9uIHRoZSBBdGFyaS4KLSAqCi0gKgogICogCTEuMQlDZXNhciBCYXJyb3M6IFNNUCBs b2NraW5nIGZpeGVzCiAgKiAJCWFkZGVkIGNoYW5nZWxvZwogICogCTEuMglFcmlrIEdpbGxpbmc6 IENvYmFsdCBOZXR3b3JrcyBzdXBwb3J0CkBAIC0zOSw2NCArMzIsNiBAQAogCiAjaW5jbHVkZSA8 bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbnZyYW0uaD4KLQotI2RlZmluZSBQQwkJ MQotI2RlZmluZSBBVEFSSQkJMgotCi0vKiBzZWxlY3QgbWFjaGluZSBjb25maWd1cmF0aW9uICov Ci0jaWYgZGVmaW5lZChDT05GSUdfQVRBUkkpCi0jICBkZWZpbmUgTUFDSCBBVEFSSQotI2VsaWYg ZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBkZWZpbmVkKF9fYXJt X18pICAvKiBhbmQgPz8gKi8KLSMgIGRlZmluZSBNQUNIIFBDCi0jZWxzZQotIyAgZXJyb3IgQ2Fu bm90IGJ1aWxkIG52cmFtIGRyaXZlciBmb3IgdGhpcyBtYWNoaW5lIGNvbmZpZ3VyYXRpb24uCi0j ZW5kaWYKLQotI2lmIE1BQ0ggPT0gUEMKLQotLyogUlRDIGluIGEgUEMgKi8KLSNkZWZpbmUgQ0hF Q0tfRFJJVkVSX0lOSVQoKQkxCi0KLS8qIE9uIFBDcywgdGhlIGNoZWNrc3VtIGlzIGJ1aWx0IG9u bHkgb3ZlciBieXRlcyAyLi4zMSAqLwotI2RlZmluZSBQQ19DS1NfUkFOR0VfU1RBUlQJMgotI2Rl ZmluZSBQQ19DS1NfUkFOR0VfRU5ECTMxCi0jZGVmaW5lIFBDX0NLU19MT0MJCTMyCi0jZGVmaW5l IE5WUkFNX0JZVEVTCQkoMTI4LU5WUkFNX0ZJUlNUX0JZVEUpCi0KLSNkZWZpbmUgbWFjaF9jaGVj a19jaGVja3N1bQlwY19jaGVja19jaGVja3N1bQotI2RlZmluZSBtYWNoX3NldF9jaGVja3N1bQlw Y19zZXRfY2hlY2tzdW0KLSNkZWZpbmUgbWFjaF9wcm9jX2luZm9zCQlwY19wcm9jX2luZm9zCi0K LSNlbmRpZgotCi0jaWYgTUFDSCA9PSBBVEFSSQotCi0vKiBTcGVjaWFsIHBhcmFtZXRlcnMgZm9y IFJUQyBpbiBBdGFyaSBtYWNoaW5lcyAqLwotI2luY2x1ZGUgPGFzbS9hdGFyaWh3Lmg+Ci0jaW5j bHVkZSA8YXNtL2F0YXJpaW50cy5oPgotI2RlZmluZSBSVENfUE9SVCh4KQkJKFRUX1JUQ19CQVMg KyAyKih4KSkKLSNkZWZpbmUgQ0hFQ0tfRFJJVkVSX0lOSVQoKQkoTUFDSF9JU19BVEFSSSAmJiBB VEFSSUhXX1BSRVNFTlQoVFRfQ0xLKSkKLQotI2RlZmluZSBOVlJBTV9CWVRFUwkJNTAKLQotLyog T24gQXRhcmlzLCB0aGUgY2hlY2tzdW0gaXMgb3ZlciBhbGwgYnl0ZXMgZXhjZXB0IHRoZSBjaGVj a3N1bSBieXRlcwotICogdGhlbXNlbHZlczsgdGhlc2UgYXJlIGF0IHRoZSB2ZXJ5IGVuZCAqLwot I2RlZmluZSBBVEFSSV9DS1NfUkFOR0VfU1RBUlQJMAotI2RlZmluZSBBVEFSSV9DS1NfUkFOR0Vf RU5ECTQ3Ci0jZGVmaW5lIEFUQVJJX0NLU19MT0MJCTQ4Ci0KLSNkZWZpbmUgbWFjaF9jaGVja19j aGVja3N1bQlhdGFyaV9jaGVja19jaGVja3N1bQotI2RlZmluZSBtYWNoX3NldF9jaGVja3N1bQlh dGFyaV9zZXRfY2hlY2tzdW0KLSNkZWZpbmUgbWFjaF9wcm9jX2luZm9zCQlhdGFyaV9wcm9jX2lu Zm9zCi0KLSNlbmRpZgotCi0vKiBOb3RlIHRoYXQgKmFsbCogY2FsbHMgdG8gQ01PU19SRUFEIGFu ZCBDTU9TX1dSSVRFIG11c3QgYmUgZG9uZSB3aXRoCi0gKiBydGNfbG9jayBoZWxkLiBEdWUgdG8g dGhlIGluZGV4LXBvcnQvZGF0YS1wb3J0IGRlc2lnbiBvZiB0aGUgUlRDLCB3ZQotICogZG9uJ3Qg d2FudCB0d28gZGlmZmVyZW50IHRoaW5ncyB0cnlpbmcgdG8gZ2V0IHRvIGl0IGF0IG9uY2UuIChl LmcuIHRoZQotICogcGVyaW9kaWMgMTEgbWluIHN5bmMgZnJvbSBrZXJuZWwvdGltZS9udHAuYyB2 cy4gdGhpcyBkcml2ZXIuKQotICovCi0KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1 ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgpAQCAtMTE5 LDEyICs1NCw5IEBAIHN0YXRpYyBpbnQgbnZyYW1fb3Blbl9tb2RlOwkvKiBzcGVjaWFsIG8KICNk ZWZpbmUgTlZSQU1fV1JJVEUJCTEgLyogb3BlbmVkIGZvciB3cml0aW5nIChleGNsdXNpdmUpICov CiAjZGVmaW5lIE5WUkFNX0VYQ0wJCTIgLyogb3BlbmVkIHdpdGggT19FWENMICovCiAKLXN0YXRp YyBpbnQgbWFjaF9jaGVja19jaGVja3N1bSh2b2lkKTsKLXN0YXRpYyB2b2lkIG1hY2hfc2V0X2No ZWNrc3VtKHZvaWQpOwotCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKLXN0YXRpYyB2b2lkIG1hY2hf cHJvY19pbmZvcyh1bnNpZ25lZCBjaGFyICpjb250ZW50cywgc3RydWN0IHNlcV9maWxlICpzZXEs Ci0JCQkJCQkJCXZvaWQgKm9mZnNldCk7CitzdGF0aWMgdm9pZCBwY19udnJhbV9wcm9jX3JlYWQo dW5zaWduZWQgY2hhciAqY29udGVudHMsIHN0cnVjdCBzZXFfZmlsZSAqc2VxLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKm9mZnNldCk7CiAjZW5kaWYKIAogLyoKQEAgLTEz OCw2ICs3MCwxNCBAQCBzdGF0aWMgdm9pZCBtYWNoX3Byb2NfaW5mb3ModW5zaWduZWQgY2hhCiAg KiBrbm93IGFib3V0IHRoZSBSVEMgY3J1ZnQuCiAgKi8KIAorI2RlZmluZSBOVlJBTV9CWVRFUwkJ KDEyOCAtIE5WUkFNX0ZJUlNUX0JZVEUpCisKKy8qIE5vdGUgdGhhdCAqYWxsKiBjYWxscyB0byBD TU9TX1JFQUQgYW5kIENNT1NfV1JJVEUgbXVzdCBiZSBkb25lIHdpdGgKKyAqIHJ0Y19sb2NrIGhl bGQuIER1ZSB0byB0aGUgaW5kZXgtcG9ydC9kYXRhLXBvcnQgZGVzaWduIG9mIHRoZSBSVEMsIHdl CisgKiBkb24ndCB3YW50IHR3byBkaWZmZXJlbnQgdGhpbmdzIHRyeWluZyB0byBnZXQgdG8gaXQg YXQgb25jZS4gKGUuZy4gdGhlCisgKiBwZXJpb2RpYyAxMSBtaW4gc3luYyBmcm9tIGtlcm5lbC90 aW1lL250cC5jIHZzLiB0aGlzIGRyaXZlci4pCisgKi8KKwogdW5zaWduZWQgY2hhciBfX252cmFt X3JlYWRfYnl0ZShpbnQgaSkKIHsKIAlyZXR1cm4gQ01PU19SRUFEKE5WUkFNX0ZJUlNUX0JZVEUg KyBpKTsKQEAgLTE3Myw5ICsxMTMsMjIgQEAgdm9pZCBudnJhbV93cml0ZV9ieXRlKHVuc2lnbmVk IGNoYXIgYywgaQogfQogRVhQT1JUX1NZTUJPTChudnJhbV93cml0ZV9ieXRlKTsKIAorLyogT24g UENzLCB0aGUgY2hlY2tzdW0gaXMgYnVpbHQgb25seSBvdmVyIGJ5dGVzIDIuLjMxICovCisjZGVm aW5lIFBDX0NLU19SQU5HRV9TVEFSVAkyCisjZGVmaW5lIFBDX0NLU19SQU5HRV9FTkQJMzEKKyNk ZWZpbmUgUENfQ0tTX0xPQwkJMzIKKwogaW50IF9fbnZyYW1fY2hlY2tfY2hlY2tzdW0odm9pZCkK IHsKLQlyZXR1cm4gbWFjaF9jaGVja19jaGVja3N1bSgpOworCWludCBpOworCXVuc2lnbmVkIHNo b3J0IHN1bSA9IDA7CisJdW5zaWduZWQgc2hvcnQgZXhwZWN0OworCisJZm9yIChpID0gUENfQ0tT X1JBTkdFX1NUQVJUOyBpIDw9IFBDX0NLU19SQU5HRV9FTkQ7ICsraSkKKwkJc3VtICs9IF9fbnZy YW1fcmVhZF9ieXRlKGkpOworCWV4cGVjdCA9IF9fbnZyYW1fcmVhZF9ieXRlKFBDX0NLU19MT0Mp PDw4IHwKKwkgICAgX19udnJhbV9yZWFkX2J5dGUoUENfQ0tTX0xPQysxKTsKKwlyZXR1cm4gKHN1 bSAmIDB4ZmZmZikgPT0gZXhwZWN0OwogfQogRVhQT1JUX1NZTUJPTChfX252cmFtX2NoZWNrX2No ZWNrc3VtKTsKIApAQCAtMTkzLDcgKzE0NiwxMyBAQCBFWFBPUlRfU1lNQk9MKG52cmFtX2NoZWNr X2NoZWNrc3VtKTsKIAogc3RhdGljIHZvaWQgX19udnJhbV9zZXRfY2hlY2tzdW0odm9pZCkKIHsK LQltYWNoX3NldF9jaGVja3N1bSgpOworCWludCBpOworCXVuc2lnbmVkIHNob3J0IHN1bSA9IDA7 CisKKwlmb3IgKGkgPSBQQ19DS1NfUkFOR0VfU1RBUlQ7IGkgPD0gUENfQ0tTX1JBTkdFX0VORDsg KytpKQorCQlzdW0gKz0gX19udnJhbV9yZWFkX2J5dGUoaSk7CisJX19udnJhbV93cml0ZV9ieXRl KHN1bSA+PiA4LCBQQ19DS1NfTE9DKTsKKwlfX252cmFtX3dyaXRlX2J5dGUoc3VtICYgMHhmZiwg UENfQ0tTX0xPQyArIDEpOwogfQogCiAjaWYgMApAQCAtMzk2LDcgKzM1NSw3IEBAIHN0YXRpYyBp bnQgbnZyYW1fcHJvY19yZWFkKHN0cnVjdCBzZXFfZmkKIAkJY29udGVudHNbaV0gPSBfX252cmFt X3JlYWRfYnl0ZShpKTsKIAlzcGluX3VubG9ja19pcnEoJnJ0Y19sb2NrKTsKIAotCW1hY2hfcHJv Y19pbmZvcyhjb250ZW50cywgc2VxLCBvZmZzZXQpOworCXBjX252cmFtX3Byb2NfcmVhZChjb250 ZW50cywgc2VxLCBvZmZzZXQpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00NDMsMTAgKzQwMiw2IEBA IHN0YXRpYyBpbnQgX19pbml0IG52cmFtX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0OwogCi0JLyog Rmlyc3QgdGVzdCB3aGV0aGVyIHRoZSBkcml2ZXIgc2hvdWxkIGluaXQgYXQgYWxsICovCi0JaWYg KCFDSEVDS19EUklWRVJfSU5JVCgpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQogCXJldCA9IG1pc2Nf cmVnaXN0ZXIoJm52cmFtX2Rldik7CiAJaWYgKHJldCkgewogCQlwcmludGsoS0VSTl9FUlIgIm52 cmFtOiBjYW4ndCBtaXNjX3JlZ2lzdGVyIG9uIG1pbm9yPSVkXG4iLApAQCAtNDc2LDM2ICs0MzEs NiBAQCBzdGF0aWMgdm9pZCBfX2V4aXQgbnZyYW1fY2xlYW51cF9tb2R1bGUoCiBtb2R1bGVfaW5p dChudnJhbV9pbml0KTsKIG1vZHVsZV9leGl0KG52cmFtX2NsZWFudXBfbW9kdWxlKTsKIAotLyoK LSAqIE1hY2hpbmUgc3BlY2lmaWMgZnVuY3Rpb25zCi0gKi8KLQotI2lmIE1BQ0ggPT0gUEMKLQot c3RhdGljIGludCBwY19jaGVja19jaGVja3N1bSh2b2lkKQotewotCWludCBpOwotCXVuc2lnbmVk IHNob3J0IHN1bSA9IDA7Ci0JdW5zaWduZWQgc2hvcnQgZXhwZWN0OwotCi0JZm9yIChpID0gUENf Q0tTX1JBTkdFX1NUQVJUOyBpIDw9IFBDX0NLU19SQU5HRV9FTkQ7ICsraSkKLQkJc3VtICs9IF9f bnZyYW1fcmVhZF9ieXRlKGkpOwotCWV4cGVjdCA9IF9fbnZyYW1fcmVhZF9ieXRlKFBDX0NLU19M T0MpPDw4IHwKLQkgICAgX19udnJhbV9yZWFkX2J5dGUoUENfQ0tTX0xPQysxKTsKLQlyZXR1cm4g KHN1bSAmIDB4ZmZmZikgPT0gZXhwZWN0OwotfQotCi1zdGF0aWMgdm9pZCBwY19zZXRfY2hlY2tz dW0odm9pZCkKLXsKLQlpbnQgaTsKLQl1bnNpZ25lZCBzaG9ydCBzdW0gPSAwOwotCi0JZm9yIChp ID0gUENfQ0tTX1JBTkdFX1NUQVJUOyBpIDw9IFBDX0NLU19SQU5HRV9FTkQ7ICsraSkKLQkJc3Vt ICs9IF9fbnZyYW1fcmVhZF9ieXRlKGkpOwotCV9fbnZyYW1fd3JpdGVfYnl0ZShzdW0gPj4gOCwg UENfQ0tTX0xPQyk7Ci0JX19udnJhbV93cml0ZV9ieXRlKHN1bSAmIDB4ZmYsIFBDX0NLU19MT0Mg KyAxKTsKLX0KLQogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAKIHN0YXRpYyBjaGFyICpmbG9wcHlf dHlwZXNbXSA9IHsKQEAgLTUyMCw4ICs0NDUsOCBAQCBzdGF0aWMgY2hhciAqZ2Z4X3R5cGVzW10g PSB7CiAJIm1vbm9jaHJvbWUiLAogfTsKIAotc3RhdGljIHZvaWQgcGNfcHJvY19pbmZvcyh1bnNp Z25lZCBjaGFyICpudnJhbSwgc3RydWN0IHNlcV9maWxlICpzZXEsCi0JCQkJCQkJCXZvaWQgKm9m ZnNldCkKK3N0YXRpYyB2b2lkIHBjX252cmFtX3Byb2NfcmVhZCh1bnNpZ25lZCBjaGFyICpudnJh bSwgc3RydWN0IHNlcV9maWxlICpzZXEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dm9pZCAqb2Zmc2V0KQogewogCWludCBjaGVja3N1bTsKIAlpbnQgdHlwZTsKQEAgLTU4MiwxNDMg KzUwNyw4IEBAIHN0YXRpYyB2b2lkIHBjX3Byb2NfaW5mb3ModW5zaWduZWQgY2hhcgogCiAJcmV0 dXJuOwogfQotI2VuZGlmCi0KLSNlbmRpZiAvKiBNQUNIID09IFBDICovCi0KLSNpZiBNQUNIID09 IEFUQVJJCi0KLXN0YXRpYyBpbnQgYXRhcmlfY2hlY2tfY2hlY2tzdW0odm9pZCkKLXsKLQlpbnQg aTsKLQl1bnNpZ25lZCBjaGFyIHN1bSA9IDA7Ci0KLQlmb3IgKGkgPSBBVEFSSV9DS1NfUkFOR0Vf U1RBUlQ7IGkgPD0gQVRBUklfQ0tTX1JBTkdFX0VORDsgKytpKQotCQlzdW0gKz0gX19udnJhbV9y ZWFkX2J5dGUoaSk7Ci0JcmV0dXJuIChfX252cmFtX3JlYWRfYnl0ZShBVEFSSV9DS1NfTE9DKSA9 PSAofnN1bSAmIDB4ZmYpKSAmJgotCSAgICAoX19udnJhbV9yZWFkX2J5dGUoQVRBUklfQ0tTX0xP QyArIDEpID09IChzdW0gJiAweGZmKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0YXJpX3NldF9jaGVj a3N1bSh2b2lkKQotewotCWludCBpOwotCXVuc2lnbmVkIGNoYXIgc3VtID0gMDsKIAotCWZvciAo aSA9IEFUQVJJX0NLU19SQU5HRV9TVEFSVDsgaSA8PSBBVEFSSV9DS1NfUkFOR0VfRU5EOyArK2kp Ci0JCXN1bSArPSBfX252cmFtX3JlYWRfYnl0ZShpKTsKLQlfX252cmFtX3dyaXRlX2J5dGUofnN1 bSwgQVRBUklfQ0tTX0xPQyk7Ci0JX19udnJhbV93cml0ZV9ieXRlKHN1bSwgQVRBUklfQ0tTX0xP QyArIDEpOwotfQotCi0jaWZkZWYgQ09ORklHX1BST0NfRlMKLQotc3RhdGljIHN0cnVjdCB7Ci0J dW5zaWduZWQgY2hhciB2YWw7Ci0JY2hhciAqbmFtZTsKLX0gYm9vdF9wcmVmc1tdID0gewotCXsg MHg4MCwgIlRPUyIgfSwKLQl7IDB4NDAsICJBU1YiIH0sCi0JeyAweDIwLCAiTmV0QlNEICg/KSIg fSwKLQl7IDB4MTAsICJMaW51eCIgfSwKLQl7IDB4MDAsICJ1bnNwZWNpZmllZCIgfQotfTsKLQot c3RhdGljIGNoYXIgKmxhbmd1YWdlc1tdID0gewotCSJFbmdsaXNoIChVUykiLAotCSJHZXJtYW4i LAotCSJGcmVuY2giLAotCSJFbmdsaXNoIChVSykiLAotCSJTcGFuaXNoIiwKLQkiSXRhbGlhbiIs Ci0JIjYgKHVuZGVmaW5lZCkiLAotCSJTd2lzcyAoRnJlbmNoKSIsCi0JIlN3aXNzIChHZXJtYW4p IgotfTsKLQotc3RhdGljIGNoYXIgKmRhdGVmb3JtYXRbXSA9IHsKLQkiTU0lY0REJWNZWSIsCi0J IkREJWNNTSVjWVkiLAotCSJZWSVjTU0lY0REIiwKLQkiWVklY0REJWNNTSIsCi0JIjQgKHVuZGVm aW5lZCkiLAotCSI1ICh1bmRlZmluZWQpIiwKLQkiNiAodW5kZWZpbmVkKSIsCi0JIjcgKHVuZGVm aW5lZCkiCi19OwotCi1zdGF0aWMgY2hhciAqY29sb3JzW10gPSB7Ci0JIjIiLCAiNCIsICIxNiIs ICIyNTYiLCAiNjU1MzYiLCAiPz8iLCAiPz8iLCAiPz8iCi19OwotCi1zdGF0aWMgdm9pZCBhdGFy aV9wcm9jX2luZm9zKHVuc2lnbmVkIGNoYXIgKm52cmFtLCBzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwK LQkJCQkJCQkJdm9pZCAqb2Zmc2V0KQotewotCWludCBjaGVja3N1bSA9IG52cmFtX2NoZWNrX2No ZWNrc3VtKCk7Ci0JaW50IGk7Ci0JdW5zaWduZWQgdm1vZGU7Ci0KLQlzZXFfcHJpbnRmKHNlcSwg IkNoZWNrc3VtIHN0YXR1cyAgOiAlc3ZhbGlkXG4iLCBjaGVja3N1bSA/ICIiIDogIm5vdCAiKTsK LQotCXNlcV9wcmludGYoc2VxLCAiQm9vdCBwcmVmZXJlbmNlICA6ICIpOwotCWZvciAoaSA9IEFS UkFZX1NJWkUoYm9vdF9wcmVmcykgLSAxOyBpID49IDA7IC0taSkgewotCQlpZiAobnZyYW1bMV0g PT0gYm9vdF9wcmVmc1tpXS52YWwpIHsKLQkJCXNlcV9wcmludGYoc2VxLCAiJXNcbiIsIGJvb3Rf cHJlZnNbaV0ubmFtZSk7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlpZiAoaSA8IDApCi0JCXNlcV9w cmludGYoc2VxLCAiMHglMDJ4ICh1bmRlZmluZWQpXG4iLCBudnJhbVsxXSk7Ci0KLQlzZXFfcHJp bnRmKHNlcSwgIlNDU0kgYXJiaXRyYXRpb24gOiAlc1xuIiwKLQkgICAgKG52cmFtWzE2XSAmIDB4 ODApID8gIm9uIiA6ICJvZmYiKTsKLQlzZXFfcHJpbnRmKHNlcSwgIlNDU0kgaG9zdCBJRCAgICAg OiAiKTsKLQlpZiAobnZyYW1bMTZdICYgMHg4MCkKLQkJc2VxX3ByaW50ZihzZXEsICIlZFxuIiwg bnZyYW1bMTZdICYgNyk7Ci0JZWxzZQotCQlzZXFfcHJpbnRmKHNlcSwgIm4vYVxuIik7Ci0KLQkv KiB0aGUgZm9sbG93aW5nIGVudHJpZXMgYXJlIGRlZmluZWQgb25seSBmb3IgdGhlIEZhbGNvbiAq LwotCWlmICgoYXRhcmlfbWNoX2Nvb2tpZSA+PiAxNikgIT0gQVRBUklfTUNIX0ZBTENPTikKLQkJ cmV0dXJuOwotCi0Jc2VxX3ByaW50ZihzZXEsICJPUyBsYW5ndWFnZSAgICAgIDogIik7Ci0JaWYg KG52cmFtWzZdIDwgQVJSQVlfU0laRShsYW5ndWFnZXMpKQotCQlzZXFfcHJpbnRmKHNlcSwgIiVz XG4iLCBsYW5ndWFnZXNbbnZyYW1bNl1dKTsKLQllbHNlCi0JCXNlcV9wcmludGYoc2VxLCAiJXUg KHVuZGVmaW5lZClcbiIsIG52cmFtWzZdKTsKLQlzZXFfcHJpbnRmKHNlcSwgIktleWJvYXJkIGxh bmd1YWdlOiAiKTsKLQlpZiAobnZyYW1bN10gPCBBUlJBWV9TSVpFKGxhbmd1YWdlcykpCi0JCXNl cV9wcmludGYoc2VxLCAiJXNcbiIsIGxhbmd1YWdlc1tudnJhbVs3XV0pOwotCWVsc2UKLQkJc2Vx X3ByaW50ZihzZXEsICIldSAodW5kZWZpbmVkKVxuIiwgbnZyYW1bN10pOwotCXNlcV9wcmludGYo c2VxLCAiRGF0ZSBmb3JtYXQgICAgICA6ICIpOwotCXNlcV9wcmludGYoc2VxLCBkYXRlZm9ybWF0 W252cmFtWzhdICYgN10sCi0JICAgIG52cmFtWzldID8gbnZyYW1bOV0gOiAnLycsIG52cmFtWzld ID8gbnZyYW1bOV0gOiAnLycpOwotCXNlcV9wcmludGYoc2VxLCAiLCAlZGggY2xvY2tcbiIsIG52 cmFtWzhdICYgMTYgPyAyNCA6IDEyKTsKLQlzZXFfcHJpbnRmKHNlcSwgIkJvb3QgZGVsYXkgICAg ICAgOiAiKTsKLQlpZiAobnZyYW1bMTBdID09IDApCi0JCXNlcV9wcmludGYoc2VxLCAiZGVmYXVs dCIpOwotCWVsc2UKLQkJc2VxX3ByaW50ZihzZXEsICIlZHMlc1xuIiwgbnZyYW1bMTBdLAotCQkg ICAgbnZyYW1bMTBdIDwgOCA/ICIsIG5vIG1lbW9yeSB0ZXN0IiA6ICIiKTsKLQotCXZtb2RlID0g KG52cmFtWzE0XSA8PCA4KSB8IG52cmFtWzE1XTsKLQlzZXFfcHJpbnRmKHNlcSwKLQkgICAgIlZp ZGVvIG1vZGUgICAgICAgOiAlcyBjb2xvcnMsICVkIGNvbHVtbnMsICVzICVzIG1vbml0b3JcbiIs Ci0JICAgIGNvbG9yc1t2bW9kZSAmIDddLAotCSAgICB2bW9kZSAmIDggPyA4MCA6IDQwLAotCSAg ICB2bW9kZSAmIDE2ID8gIlZHQSIgOiAiVFYiLCB2bW9kZSAmIDMyID8gIlBBTCIgOiAiTlRTQyIp OwotCXNlcV9wcmludGYoc2VxLCAiICAgICAgICAgICAgICAgICAgICVzb3ZlcnNjYW4sIGNvbXBh dC4gbW9kZSAlcyVzXG4iLAotCSAgICB2bW9kZSAmIDY0ID8gIiIgOiAibm8gIiwKLQkgICAgdm1v ZGUgJiAxMjggPyAib24iIDogIm9mZiIsCi0JICAgIHZtb2RlICYgMjU2ID8KLQkgICAgKHZtb2Rl ICYgMTYgPyAiLCBsaW5lIGRvdWJsaW5nIiA6ICIsIGhhbGYgc2NyZWVuIikgOiAiIik7Ci0KLQly ZXR1cm47Ci19Ci0jZW5kaWYKLQotI2VuZGlmIC8qIE1BQ0ggPT0gQVRBUkkgKi8KKyNlbmRpZiAv KiBDT05GSUdfUFJPQ19GUyAqLwogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQUxJ QVNfTUlTQ0RFVihOVlJBTV9NSU5PUik7CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KTGludXhwcGMtZGV2IG1haWxpbmcgbGlzdApMaW51eHBwYy1kZXZA bGlzdHMub3psYWJzLm9yZwpodHRwczovL2xpc3RzLm96bGFicy5vcmcvbGlzdGluZm8vbGludXhw cGMtZGV2