Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:35338 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 31398 invoked by uid 1010); 9 Feb 2008 14:33:50 -0000 Delivered-To: ezmlm-scan-internals@lists.php.net Delivered-To: ezmlm-internals@lists.php.net Received: (qmail 31383 invoked from network); 9 Feb 2008 14:33:50 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 9 Feb 2008 14:33:50 -0000 Authentication-Results: pb1.pair.com header.from=helly@php.net; sender-id=unknown Authentication-Results: pb1.pair.com smtp.mail=helly@php.net; spf=unknown; sender-id=unknown Received-SPF: unknown (pb1.pair.com: domain php.net does not designate 85.214.94.56 as permitted sender) X-PHP-List-Original-Sender: helly@php.net X-Host-Fingerprint: 85.214.94.56 aixcept.net Linux 2.6 Received: from [85.214.94.56] ([85.214.94.56:59591] helo=h1149922.serverkompetenz.net) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 2B/88-49280-CC9BDA74 for ; Sat, 09 Feb 2008 09:33:50 -0500 Received: from MBOERGER-ZRH.corp.google.com (207-173.78-83.cust.bluewin.ch [83.78.173.207]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by h1149922.serverkompetenz.net (Postfix) with ESMTP id F3A171B3671 for ; Sat, 9 Feb 2008 15:33:44 +0100 (CET) Date: Sat, 9 Feb 2008 15:33:15 +0100 Reply-To: Marcus Boerger X-Priority: 3 (Normal) Message-ID: <971575499.20080209153315@marcus-boerger.de> To: "PHP Internals List" MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----------1151345E3999A063" Subject: [RFC] Conditional INI support From: helly@php.net (Marcus Boerger) ------------1151345E3999A063 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Hello PHPlers, attached is a patch against 5.3 that brings three feature additions to INI parsing. 1) Ternary support for values setting = ${value?1:2} If ${value} evaluates to true then setting becomes 1 otherwise 2. This cannot be nested and only works for values, not for setting names. 2) if-elif-else-endif support [IF ${value} == 1] setting = 1 [ELIF ${value} == 2] setting = 2 [ELSE] setting = 3 [ENDIF] This can be nested. Alternatively we could use apache style syntax that looks more like XML. The reason I used square brackets is that this is the smallest change to normal INI files. 3) Add more values to INI parsing, namely: ${php.version} = 50300 ${php.debug} = 0 ${php.zts} = 0 ${php.sapi} = CLI Any comments? Best regards, Marcus ------------1151345E3999A063 Content-Type: text/plain; name="ze2-ini-conditionals-20080209.diff.txt" Content-transfer-encoding: base64 Content-Disposition: attachment; filename="ze2-ini-conditionals-20080209.diff.txt" SW5kZXg6IG1haW4vcGhwX2luaS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9yZXBvc2l0 b3J5L3BocC1zcmMvbWFpbi9waHBfaW5pLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTM2 LjIuNC4yLjE1LjIuNwpkaWZmIC11IC1wIC1kIC1yMS4xMzYuMi40LjIuMTUuMi43IHBocF9p bmkuYwotLS0gbWFpbi9waHBfaW5pLmMJMyBGZWIgMjAwOCAxNDozNTo1OSAtMDAwMAkxLjEz Ni4yLjQuMi4xNS4yLjcKKysrIG1haW4vcGhwX2luaS5jCTkgRmViIDIwMDggMTQ6MzE6NTMg LTAwMDAKQEAgLTIwLDYgKzIwLDcgQEAKIAogI2luY2x1ZGUgInBocC5oIgogI2luY2x1ZGUg ImV4dC9zdGFuZGFyZC9pbmZvLmgiCisjaW5jbHVkZSAiZXh0L3N0YW5kYXJkL2Jhc2ljX2Z1 bmN0aW9ucy5oIgogI2luY2x1ZGUgInplbmRfaW5pLmgiCiAjaW5jbHVkZSAiemVuZF9pbmlf c2Nhbm5lci5oIgogI2luY2x1ZGUgInBocF9pbmkuaCIKQEAgLTMyOCw2ICszMjksNDMgQEAg c3RhdGljIHZvaWQgcGhwX2xvYWRfemVuZF9leHRlbnNpb25fY2IodgogfQogLyogfX19ICov CiAKK3N0YXRpYyB2b2lkIHBocF9pbmlfZHVtcF9jb25maWcoVFNSTUxTX0QpIC8qIHt7eyAq LworeworI2lmIEhFTExZXzAKKwl6dmFsIHRtcDsKKwlhcnJheV9pbml0KCZ0bXApOworCXpl bmRfaGFzaF9hcHBseV93aXRoX2FyZ3VtZW50cygmY29uZmlndXJhdGlvbl9oYXNoLCAoYXBw bHlfZnVuY19hcmdzX3QpIHBocF9hZGRfY29uZmlnX2VudHJ5X2NiLCAxLCAmdG1wIFRTUk1M U19DQyk7CisJemVuZF9wcmludF9oYXNoKFpfQVJSVkFMKHRtcCksIDAsIDAgVFNSTUxTX0ND KTsKKwl6dmFsX2R0b3IoJnRtcCk7CisjZW5kaWYJCit9IC8qIH19fSAqLworCitQSFBBUEkg dm9pZCBwaHBfaW5pX2FkZF9jb25maWdfc3RyaW5nbChjb25zdCBjaGFyKiBuYW1lLCBpbnQg bmFtZV9zaXplLCBjb25zdCBjaGFyICp2YWx1ZSwgaW50IHZhbHVlX2xlbiBUU1JNTFNfREMp IC8qIHt7eyovCit7CisJenZhbCB0bXA7CisJWlZBTF9TVFJJTkdMKCZ0bXAsIHplbmRfc3Ry bmR1cCh2YWx1ZSwgdmFsdWVfbGVuKSwgdmFsdWVfbGVuLCAwKTsKKwlaX1NFVF9SRUZDT1VO VCh0bXAsIDApOworCVpfVU5TRVRfSVNSRUYodG1wKTsKKwl6ZW5kX2hhc2hfdXBkYXRlKCZj b25maWd1cmF0aW9uX2hhc2gsIG5hbWUsIG5hbWVfc2l6ZSwgKHZvaWQgKikgJnRtcCwgc2l6 ZW9mKHp2YWwpLCBOVUxMKTsKK30gLyogfX19ICovCisKK1BIUEFQSSB2b2lkIHBocF9pbmlf YWRkX2NvbmZpZ19zdHJpbmcoY29uc3QgY2hhciogbmFtZSwgaW50IG5hbWVfc2l6ZSwgY29u c3QgY2hhciAqdmFsdWUgVFNSTUxTX0RDKSAvKiB7e3sqLworeworCXBocF9pbmlfYWRkX2Nv bmZpZ19zdHJpbmdsKG5hbWUsIG5hbWVfc2l6ZSwgdmFsdWUsIHN0cmxlbih2YWx1ZSkgVFNS TUxTX0NDKTsKK30gLyogfX19ICovCisKK1BIUEFQSSB2b2lkIHBocF9pbmlfYWRkX2NvbmZp Z19sb25nKGNvbnN0IGNoYXIqIG5hbWUsIGludCBuYW1lX3NpemUsIGxvbmcgdmFsdWUgVFNS TUxTX0RDKSAvKiB7e3sqLworeworCWNoYXIgc3RyX3ZhbFszMl07CisJaW50IHZhbHVlX2xl biA9IHNscHJpbnRmKHN0cl92YWwsIHNpemVvZihzdHJfdmFsKSwgIiVsZCIsIHZhbHVlKTsK KwlwaHBfaW5pX2FkZF9jb25maWdfc3RyaW5nbChuYW1lLCBuYW1lX3NpemUsIHN0cl92YWws IHZhbHVlX2xlbiBUU1JNTFNfQ0MpOworfSAvKiB9fX0gKi8KKworUEhQQVBJIHZvaWQgcGhw X2luaV9hZGRfY29uZmlnX2Jvb2woY29uc3QgY2hhciogbmFtZSwgaW50IG5hbWVfc2l6ZSwg aW50IHZhbHVlIFRTUk1MU19EQykgLyoge3t7Ki8KK3sKKwlwaHBfaW5pX2FkZF9jb25maWdf c3RyaW5nbChuYW1lLCBuYW1lX3NpemUsIHZhbHVlID8gIjEiIDogIjAiLCAxIFRTUk1MU19D Qyk7Cit9IC8qIH19fSAqLworCiAvKiB7e3sgcGhwX2luaXRfY29uZmlnCiAgKi8KIGludCBw aHBfaW5pdF9jb25maWcoVFNSTUxTX0QpCkBAIC0zNDcsNiArMzg1LDIwIEBAIGludCBwaHBf aW5pdF9jb25maWcoVFNSTUxTX0QpCiAJCXNhcGlfbW9kdWxlLmluaV9kZWZhdWx0cygmY29u ZmlndXJhdGlvbl9oYXNoKTsKIAl9CiAKKwlwaHBfaW5pX2FkZF9jb25maWdfbG9uZygicGhw LnZlcnNpb24iLCBzaXplb2YoInBocC52ZXJzaW9uIiksIFBIUF9WRVJTSU9OX0lEIFRTUk1M U19DQyk7CisJcGhwX2luaV9hZGRfY29uZmlnX3N0cmluZygicGhwLnNhcGkiLCBzaXplb2Yo InBocC5zYXBpIiksIHNhcGlfbW9kdWxlLm5hbWUgVFNSTUxTX0NDKTsKKyNpZiBaVFMKKwlw aHBfaW5pX2FkZF9jb25maWdfYm9vbCgicGhwLnp0cyIsIHNpemVvZigicGhwLnp0cyIpLCAx IFRTUk1MU19DQyk7CisjZWxzZQorCXBocF9pbmlfYWRkX2NvbmZpZ19ib29sKCJwaHAuenRz Iiwgc2l6ZW9mKCJwaHAuenRzIiksIDAgVFNSTUxTX0NDKTsKKyNlbmRpZgorI2lmIFpFTkRf REVCVUcKKwlwaHBfaW5pX2FkZF9jb25maWdfYm9vbCgicGhwLmRlYnVnIiwgc2l6ZW9mKCJw aHAuZGVidWciKSwgMSBUU1JNTFNfQ0MpOworI2Vsc2UKKwlwaHBfaW5pX2FkZF9jb25maWdf Ym9vbCgicGhwLmRlYnVnIiwgc2l6ZW9mKCJwaHAuZGVidWciKSwgMCBUU1JNTFNfQ0MpOwor I2VuZGlmCisJcGhwX2luaV9kdW1wX2NvbmZpZyhUU1JNTFNfQyk7CisKIAl6ZW5kX2xsaXN0 X2luaXQoJmV4dGVuc2lvbl9saXN0cy5lbmdpbmUsIHNpemVvZihjaGFyICopLCAobGxpc3Rf ZHRvcl9mdW5jX3QpIGZyZWVfZXN0cmluZywgMSk7CiAJemVuZF9sbGlzdF9pbml0KCZleHRl bnNpb25fbGlzdHMuZnVuY3Rpb25zLCBzaXplb2YoY2hhciAqKSwgKGxsaXN0X2R0b3JfZnVu Y190KSBmcmVlX2VzdHJpbmcsIDEpOwogCkBAIC01NTgsMjQgKzYxMCwxOSBAQCBpbnQgcGhw X2luaXRfY29uZmlnKFRTUk1MU19EKQogCVBHKG9wZW5fYmFzZWRpcikgPSBvcGVuX2Jhc2Vk aXI7CiAKIAlpZiAoZmguaGFuZGxlLmZwKSB7CisJCWludCBmaWxlbmFtZV9sZW47CisJCWNo YXIgKmZ0bXA7CiAJCWZoLnR5cGUgPSBaRU5EX0hBTkRMRV9GUDsKIAkJUkVTRVRfQUNUSVZF X0lOSV9IQVNIKCk7CiAKIAkJemVuZF9wYXJzZV9pbmlfZmlsZSgmZmgsIDEsIFpFTkRfSU5J X1NDQU5ORVJfTk9STUFMLCAoemVuZF9pbmlfcGFyc2VyX2NiX3QpIHBocF9pbmlfcGFyc2Vy X2NiLCAmY29uZmlndXJhdGlvbl9oYXNoIFRTUk1MU19DQyk7CiAKLQkJewotCQkJenZhbCB0 bXA7Ci0KLQkJCVpfU1RSTEVOKHRtcCkgPSBzdHJsZW4oZmguZmlsZW5hbWUpOwotCQkJWl9T VFJWQUwodG1wKSA9IHplbmRfc3RybmR1cChmaC5maWxlbmFtZSwgWl9TVFJMRU4odG1wKSk7 Ci0JCQlaX1RZUEUodG1wKSA9IElTX1NUUklORzsKLQkJCVpfU0VUX1JFRkNPVU5UKHRtcCwg MCk7Ci0KLQkJCXplbmRfaGFzaF91cGRhdGUoJmNvbmZpZ3VyYXRpb25faGFzaCwgImNmZ19m aWxlX3BhdGgiLCBzaXplb2YoImNmZ19maWxlX3BhdGgiKSwgKHZvaWQgKikgJnRtcCwgc2l6 ZW9mKHp2YWwpLCBOVUxMKTsKLQkJCWlmIChwaHBfaW5pX29wZW5lZF9wYXRoKSB7Ci0JCQkJ ZWZyZWUocGhwX2luaV9vcGVuZWRfcGF0aCk7Ci0JCQl9Ci0JCQlwaHBfaW5pX29wZW5lZF9w YXRoID0gemVuZF9zdHJuZHVwKFpfU1RSVkFMKHRtcCksIFpfU1RSTEVOKHRtcCkpOworCQlm aWxlbmFtZV9sZW4gPSBzdHJsZW4oZmguZmlsZW5hbWUpOworCQlwaHBfaW5pX2FkZF9jb25m aWdfc3RyaW5nbCgiY2ZnX2ZpbGVfcGF0aCIsIHNpemVvZigiY2ZnX2ZpbGVfcGF0aCIpLCBm aC5maWxlbmFtZSwgZmlsZW5hbWVfbGVuIFRTUk1MU19DQyk7CisJCWZ0bXAgPSBwaHBfaW5p X29wZW5lZF9wYXRoOworCQlwaHBfaW5pX29wZW5lZF9wYXRoID0gemVuZF9zdHJuZHVwKGZo LmZpbGVuYW1lLCBmaWxlbmFtZV9sZW4pOworCQlpZiAoZnRtcCkgeworCQkJZWZyZWUoZnRt cCk7CiAJCX0KIAl9CiAKSW5kZXg6IFplbmQvemVuZC5jCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp bGU6IC9yZXBvc2l0b3J5L1plbmRFbmdpbmUyL3plbmQuYyx2CnJldHJpZXZpbmcgcmV2aXNp b24gMS4zMDguMi4xMi4yLjM1LjIuNwpkaWZmIC11IC1wIC1kIC1yMS4zMDguMi4xMi4yLjM1 LjIuNyB6ZW5kLmMKLS0tIFplbmQvemVuZC5jCTI4IEphbiAyMDA4IDIwOjM0OjAyIC0wMDAw CTEuMzA4LjIuMTIuMi4zNS4yLjcKKysrIFplbmQvemVuZC5jCTkgRmViIDIwMDggMTQ6MzE6 NTQgLTAwMDAKQEAgLTExNiw3ICsxMTYsNyBAQCBzdGF0aWMgdWludCB6ZW5kX3ZlcnNpb25f aW5mb19sZW5ndGg7CiAjZGVmaW5lIFpFTkRfQ09SRV9WRVJTSU9OX0lORk8JIlplbmQgRW5n aW5lIHYiIFpFTkRfVkVSU0lPTiAiLCBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwOCBaZW5kIFRl Y2hub2xvZ2llc1xuIgogI2RlZmluZSBQUklOVF9aVkFMX0lOREVOVCA0CiAKLXN0YXRpYyB2 b2lkIHByaW50X2hhc2goSGFzaFRhYmxlICpodCwgaW50IGluZGVudCwgemVuZF9ib29sIGlz X29iamVjdCBUU1JNTFNfREMpIC8qIHt7eyAqLworWkVORF9BUEkgdm9pZCB6ZW5kX3ByaW50 X2hhc2goSGFzaFRhYmxlICpodCwgaW50IGluZGVudCwgemVuZF9ib29sIGlzX29iamVjdCBU U1JNTFNfREMpIC8qIHt7eyAqLwogewogCXp2YWwgKip0bXA7CiAJY2hhciAqc3RyaW5nX2tl eTsKQEAgLTM3OCw3ICszNzgsNyBAQCBaRU5EX0FQSSB2b2lkIHplbmRfcHJpbnRfenZhbF9y X2V4KHplbmRfCiAJCQkJWl9BUlJWQUxfUChleHByKS0+bkFwcGx5Q291bnQtLTsKIAkJCQly ZXR1cm47CiAJCQl9Ci0JCQlwcmludF9oYXNoKFpfQVJSVkFMX1AoZXhwciksIGluZGVudCwg MCBUU1JNTFNfQ0MpOworCQkJemVuZF9wcmludF9oYXNoKFpfQVJSVkFMX1AoZXhwciksIGlu ZGVudCwgMCBUU1JNTFNfQ0MpOwogCQkJWl9BUlJWQUxfUChleHByKS0+bkFwcGx5Q291bnQt LTsKIAkJCWJyZWFrOwogCQljYXNlIElTX09CSkVDVDoKQEAgLTQwNyw3ICs0MDcsNyBAQCBa RU5EX0FQSSB2b2lkIHplbmRfcHJpbnRfenZhbF9yX2V4KHplbmRfCiAJCQkJCXByb3BlcnRp ZXMtPm5BcHBseUNvdW50LS07CiAJCQkJCXJldHVybjsKIAkJCQl9Ci0JCQkJcHJpbnRfaGFz aChwcm9wZXJ0aWVzLCBpbmRlbnQsIDEgVFNSTUxTX0NDKTsKKwkJCQl6ZW5kX3ByaW50X2hh c2gocHJvcGVydGllcywgaW5kZW50LCAxIFRTUk1MU19DQyk7CiAJCQkJcHJvcGVydGllcy0+ bkFwcGx5Q291bnQtLTsKIAkJCQlpZiAoaXNfdGVtcCkgewogCQkJCQl6ZW5kX2hhc2hfZGVz dHJveShwcm9wZXJ0aWVzKTsKSW5kZXg6IFplbmQvemVuZC5oCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT IGZpbGU6IC9yZXBvc2l0b3J5L1plbmRFbmdpbmUyL3plbmQuaCx2CnJldHJpZXZpbmcgcmV2 aXNpb24gMS4yOTMuMi4xMS4yLjkuMi4xNgpkaWZmIC11IC1wIC1kIC1yMS4yOTMuMi4xMS4y LjkuMi4xNiB6ZW5kLmgKLS0tIFplbmQvemVuZC5oCTIyIEphbiAyMDA4IDA5OjI3OjQ2IC0w MDAwCTEuMjkzLjIuMTEuMi45LjIuMTYKKysrIFplbmQvemVuZC5oCTkgRmViIDIwMDggMTQ6 MzE6NTQgLTAwMDAKQEAgLTUzNyw2ICs1MzcsNyBAQCBFTkRfRVhURVJOX0MoKQogCiBCRUdJ Tl9FWFRFUk5fQygpCiBaRU5EX0FQSSBjaGFyICpnZXRfemVuZF92ZXJzaW9uKHZvaWQpOwor WkVORF9BUEkgdm9pZCB6ZW5kX3ByaW50X2hhc2goSGFzaFRhYmxlICpodCwgaW50IGluZGVu dCwgemVuZF9ib29sIGlzX29iamVjdCBUU1JNTFNfREMpOwogWkVORF9BUEkgdm9pZCB6ZW5k X21ha2VfcHJpbnRhYmxlX3p2YWwoenZhbCAqZXhwciwgenZhbCAqZXhwcl9jb3B5LCBpbnQg KnVzZV9jb3B5KTsKIFpFTkRfQVBJIGludCB6ZW5kX3ByaW50X3p2YWwoenZhbCAqZXhwciwg aW50IGluZGVudCk7CiBaRU5EX0FQSSBpbnQgemVuZF9wcmludF96dmFsX2V4KHplbmRfd3Jp dGVfZnVuY190IHdyaXRlX2Z1bmMsIHp2YWwgKmV4cHIsIGludCBpbmRlbnQpOwpJbmRleDog WmVuZC96ZW5kX2dsb2JhbHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvcmVwb3NpdG9y eS9aZW5kRW5naW5lMi96ZW5kX2dsb2JhbHMuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4x NDEuMi4zLjIuNy4yLjcKZGlmZiAtdSAtcCAtZCAtcjEuMTQxLjIuMy4yLjcuMi43IHplbmRf Z2xvYmFscy5oCi0tLSBaZW5kL3plbmRfZ2xvYmFscy5oCTI0IEphbiAyMDA4IDA5OjQxOjM3 IC0wMDAwCTEuMTQxLjIuMy4yLjcuMi43CisrKyBaZW5kL3plbmRfZ2xvYmFscy5oCTkgRmVi IDIwMDggMTQ6MzE6NTQgLTAwMDAKQEAgLTUyLDYgKzUyLDggQEAgRU5EX0VYVEVSTl9DKCkK ICNlbmRpZgogCiAjZGVmaW5lIFNZTVRBQkxFX0NBQ0hFX1NJWkUgMzIKKyNkZWZpbmUgWkVO RF9ERUJVR19DRkdfUEFSU0VSIDEKKwogCiAKICNpbmNsdWRlICJ6ZW5kX2NvbXBpbGUuaCIK QEAgLTI3Miw2ICsyNzQsNyBAQCBzdHJ1Y3QgX3plbmRfc2Nhbm5lcl9nbG9iYWxzIHsKIAog CS8qIEZvciBpbmkgc2Nhbm5lci4gTW9kZXMgYXJlOiBaRU5EX0lOSV9TQ0FOTkVSX05PUk1B TCwgWkVORF9JTklfU0NBTk5FUl9SQVcgKi8KIAlpbnQgc2Nhbm5lcl9tb2RlOworCWludCBp Zl9sZXZlbDsKIAogI2lmZGVmIFpFTkRfTVVMVElCWVRFCiAJLyogb3JpZ2luYWwgKHVuZmls dGVyZWQpIHNjcmlwdCAqLwpAQCAtMjkwLDYgKzI5MywxMiBAQCBzdHJ1Y3QgX3plbmRfc2Nh bm5lcl9nbG9iYWxzIHsKICNlbmRpZiAvKiBaRU5EX01VTFRJQllURSAqLwogfTsKIAordHlw ZWRlZiBlbnVtIHsKKwlaRU5EX0lOSV9DT05EX1JFQUQsCisJWkVORF9JTklfQ09ORF9JR05P UkUsCisJWkVORF9JTklfQ09ORF9ET05FLAorfSBaRU5EX0lOSV9DT05ESVRJT05BTDsKKwog I2VuZGlmIC8qIFpFTkRfR0xPQkFMU19IICovCiAKIC8qCkluZGV4OiBaZW5kL3plbmRfaW5p X3BhcnNlci55Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9yZXBvc2l0b3J5L1plbmRFbmdp bmUyL3plbmRfaW5pX3BhcnNlci55LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQxLjIuMi4y LjIuMi40CmRpZmYgLXUgLXAgLWQgLXIxLjQxLjIuMi4yLjIuMi40IHplbmRfaW5pX3BhcnNl ci55Ci0tLSBaZW5kL3plbmRfaW5pX3BhcnNlci55CTQgRmViIDIwMDggMjA6NDU6MjAgLTAw MDAJMS40MS4yLjIuMi4yLjIuNAorKysgWmVuZC96ZW5kX2luaV9wYXJzZXIueQk5IEZlYiAy MDA4IDE0OjMxOjU0IC0wMDAwCkBAIC0xNSwxMyArMTUsMTIgQEAKICAgICstLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKwogICAgfCBBdXRob3JzOiBaZWV2IFN1cmFza2kgPHplZXZAemVuZC5jb20+ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICB8ICAgICAgICAgIEphbmkgVGFz a2luZW4gPGphbmlAcGhwLm5ldD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwK KyAgIHwgICAgICAgICAgTWFyY3VzIEJvZXJnZXIgPGhlbGx5QHBocC5uZXQ+ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfAogICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAqLwogCiAv KiAkSWQ6IHplbmRfaW5pX3BhcnNlci55LHYgMS40MS4yLjIuMi4yLjIuNCAyMDA4LzAyLzA0 IDIwOjQ1OjIwIGphbmkgRXhwICQgKi8KIAotI2RlZmluZSBERUJVR19DRkdfUEFSU0VSIDAK LQogI2luY2x1ZGUgInplbmQuaCIKICNpbmNsdWRlICJ6ZW5kX0FQSS5oIgogI2luY2x1ZGUg InplbmRfaW5pLmgiCkBAIC0yOSw2ICsyOCw5IEBACiAjaW5jbHVkZSAiemVuZF9pbmlfc2Nh bm5lci5oIgogI2luY2x1ZGUgInplbmRfZXh0ZW5zaW9ucy5oIgogCitleHRlcm4gdm9pZCB6 ZW5kX2luaV9zZXRfaWdub3JlKFpFTkRfSU5JX0NPTkRJVElPTkFMIGlnbm9yZSBUU1JNTFNf REMpOworZXh0ZXJuIHZvaWQgemVuZF9pbmlfZXJyb3IoaW50IHNldmVyaXR5IFRTUk1MU19E QywgY2hhciAqZXJyb3IpOworCiAjZGVmaW5lIFlZRVJST1JfVkVSQk9TRQogI2RlZmluZSBZ WVNUWVBFIHp2YWwKIApAQCAtODYsNiArODgsMTA2IEBAIHN0YXRpYyB2b2lkIHplbmRfaW5p X2RvX29wKGNoYXIgdHlwZSwgenYKIH0KIC8qIH19fSAqLwogCitzdGF0aWMgdm9pZCB6ZW5k X2luaV9jb21wYXJlKGludCB0eXBlLCB6dmFsICpyZXN1bHQsIHp2YWwgKm9wMSwgenZhbCAq b3AyKSAvKiB7e3sgKi8KK3sKKwlpbnQgaV9vcDEsIGlfb3AyLCByZXQ7CisJY2hhciAqc3Ry MiA9ICIiOworCisJaWYgKHR5cGUgPT0gVF9JU19OT1RfSURFTlRJQ0FMIHx8IHR5cGUgPT0g VF9JU19OT1RfSURFTlRJQ0FMKSB7CisJCWlmIChvcDIpIHsKKwkJCXJldCA9ICFzdHJjbXAo Wl9TVFJWQUxfUChvcDEpLCBaX1NUUlZBTF9QKG9wMikpOworCQkJc3RyMiA9IFpfU1RSVkFM X1Aob3AyKTsKKwkJfSBlbHNlIHsKKwkJCXJldCA9IFpfU1RSTEVOX1Aob3AxKSA+IDA7CisJ CX0KKwkJaWYgKHR5cGUgPT0gVF9JU19OT1RfSURFTlRJQ0FMKSB7CisjaWYgWkVORF9ERUJV R19DRkdfUEFSU0VSCisJCQlmcHJpbnRmKHN0ZGVyciwgIklOSSBjb21wYXJlKCclcycgIT09 ICclcycpXG4iLCBaX1NUUlZBTF9QKG9wMSksIHN0cjIpOworI2VuZGlmCisJCQlyZXQgPSBy ZXQgPyAwIDogMTsKKwkJfSBlbHNlIHsKKyNpZiBaRU5EX0RFQlVHX0NGR19QQVJTRVIKKwkJ CWZwcmludGYoc3RkZXJyLCAiSU5JIGNvbXBhcmUoJyVzJyA9PT0gJyVzJylcbiIsIFpfU1RS VkFMX1Aob3AxKSwgc3RyMik7CisjZW5kaWYKKwkJCXJldCA9IHJldCA/IDEgOiAwOworCQl9 CisJfSBlbHNlIHsKKwkJaV9vcDEgPSBhdG9pKFpfU1RSVkFMX1Aob3AxKSk7CisJCWlmIChv cDIpIHsKKwkJCWlfb3AyID0gYXRvaShaX1NUUlZBTF9QKG9wMikpOworCQl9IGVsc2Ugewor CQkJaV9vcDIgPSAwOworCQl9CisJCisJCXN3aXRjaCAodHlwZSkgeworCQkJY2FzZSBUX0lT X0VROgorI2lmIFpFTkRfREVCVUdfQ0ZHX1BBUlNFUgorCQkJCWZwcmludGYoc3RkZXJyLCAi SU5JIGNvbXBhcmUoJWQgPT0gJWQpXG4iLCBpX29wMSwgaV9vcDIpOworI2VuZGlmCisJCQkJ cmV0ID0gaV9vcDEgPT0gaV9vcDI7CisJCQkJYnJlYWs7CisJCQljYXNlIFRfSVNfTkU6Cisj aWYgWkVORF9ERUJVR19DRkdfUEFSU0VSCisJCQkJZnByaW50ZihzdGRlcnIsICJJTkkgY29t cGFyZSglZCAhPSAlZClcbiIsIGlfb3AxLCBpX29wMik7CisjZW5kaWYKKwkJCQlyZXQgPSBp X29wMSAhPSBpX29wMjsKKwkJCQlicmVhazsKKwkJCWNhc2UgVF9JU19HRToKKyNpZiBaRU5E X0RFQlVHX0NGR19QQVJTRVIKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIklOSSBjb21wYXJlKCVk ID49ICVkKVxuIiwgaV9vcDEsIGlfb3AyKTsKKyNlbmRpZgorCQkJCXJldCA9IGlfb3AxID49 IGlfb3AyOworCQkJCWJyZWFrOworCQkJY2FzZSAnPic6CisjaWYgWkVORF9ERUJVR19DRkdf UEFSU0VSCisJCQkJZnByaW50ZihzdGRlcnIsICJJTkkgY29tcGFyZSglZCA+ICVkKVxuIiwg aV9vcDEsIGlfb3AyKTsKKyNlbmRpZgorCQkJCXJldCA9IGlfb3AxID4gIGlfb3AyOworCQkJ CWJyZWFrOworCQkJY2FzZSBUX0lTX0xFOgorI2lmIFpFTkRfREVCVUdfQ0ZHX1BBUlNFUgor CQkJCWZwcmludGYoc3RkZXJyLCAiSU5JIGNvbXBhcmUoJWQgPD0gJWQpXG4iLCBpX29wMSwg aV9vcDIpOworI2VuZGlmCisJCQkJcmV0ID0gaV9vcDEgPD0gaV9vcDI7CisJCQkJYnJlYWs7 CisJCQljYXNlICc8JzoKKyNpZiBaRU5EX0RFQlVHX0NGR19QQVJTRVIKKwkJCQlmcHJpbnRm KHN0ZGVyciwgIklOSSBjb21wYXJlKCVkIDwgJWQpXG4iLCBpX29wMSwgaV9vcDIpOworI2Vu ZGlmCisJCQkJcmV0ID0gaV9vcDEgPCAgaV9vcDI7CisJCQkJYnJlYWs7CisJCQljYXNlIFRf TF9BTkQ6CisjaWYgWkVORF9ERUJVR19DRkdfUEFSU0VSCisJCQkJZnByaW50ZihzdGRlcnIs ICJJTkkgY29tcGFyZSglZCAmJiAlZClcbiIsIGlfb3AxLCBpX29wMik7CisjZW5kaWYKKwkJ CQlyZXQgPSBpX29wMSAmJiBpX29wMjsKKwkJCQlicmVhazsKKwkJCWNhc2UgVF9MX09SOgor I2lmIFpFTkRfREVCVUdfQ0ZHX1BBUlNFUgorCQkJCWZwcmludGYoc3RkZXJyLCAiSU5JIGNv bXBhcmUoJWQgfHwgJWQpXG4iLCBpX29wMSwgaV9vcDIpOworI2VuZGlmCisJCQkJcmV0ID0g aV9vcDEgJiYgaV9vcDI7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorI2lmIFpFTkRfREVC VUdfQ0ZHX1BBUlNFUgorCQkJCWZwcmludGYoc3RkZXJyLCAiSU5JIGNvbXBhcmUoJWQgPyAl ZClcbiIsIGlfb3AxLCBpX29wMik7CisjZW5kaWYKKwkJCQlyZXQgPSAwOworCQkJCWJyZWFr OworCQl9CisJfQorCWZyZWUoWl9TVFJWQUxfUChvcDEpKTsKKwlpZiAob3AyKSB7CisJCWZy ZWUoWl9TVFJWQUxfUChvcDIpKTsKKwl9CisJWl9TVFJWQUxfUChyZXN1bHQpID0gbWFsbG9j KDIpOworCVpfU1RSVkFMX1AocmVzdWx0KVswXSA9IHJldCA/ICcxJyA6ICcwJzsKKwlaX1NU UlZBTF9QKHJlc3VsdClbMV0gPSAwOworCVpfU1RSTEVOX1AocmVzdWx0KSA9IDE7CisJWl9U WVBFX1AocmVzdWx0KSA9IElTX1NUUklORzsKK30KKy8qIH19fSAqLworCiAvKiB7e3sgemVu ZF9pbmlfaW5pdF9zdHJpbmcoKQogKi8KIHN0YXRpYyB2b2lkIHplbmRfaW5pX2luaXRfc3Ry aW5nKHp2YWwgKnJlc3VsdCkKQEAgLTE1OSwzMSArMjYxLDcgQEAgc3RhdGljIHZvaWQgemVu ZF9pbmlfZ2V0X3Zhcih6dmFsICpyZXN1bAogKi8KIHN0YXRpYyB2b2lkIGluaV9lcnJvcihj aGFyICptc2cpCiB7Ci0JY2hhciAqZXJyb3JfYnVmOwotCWludCBlcnJvcl9idWZfbGVuOwot CWNoYXIgKmN1cnJlbnRseV9wYXJzZWRfZmlsZW5hbWU7Ci0JVFNSTUxTX0ZFVENIKCk7Ci0K LQljdXJyZW50bHlfcGFyc2VkX2ZpbGVuYW1lID0gemVuZF9pbmlfc2Nhbm5lcl9nZXRfZmls ZW5hbWUoVFNSTUxTX0MpOwotCWlmIChjdXJyZW50bHlfcGFyc2VkX2ZpbGVuYW1lKSB7Ci0J CWVycm9yX2J1Zl9sZW4gPSAxMjggKyBzdHJsZW4obXNnKSArIHN0cmxlbihjdXJyZW50bHlf cGFyc2VkX2ZpbGVuYW1lKTsgLyogc2hvdWxkIGJlIG1vcmUgdGhhbiBlbm91Z2ggKi8KLQkJ ZXJyb3JfYnVmID0gKGNoYXIgKikgZW1hbGxvYyhlcnJvcl9idWZfbGVuKTsKLQotCQlzcHJp bnRmKGVycm9yX2J1ZiwgIiVzIGluICVzIG9uIGxpbmUgJWRcbiIsIG1zZywgY3VycmVudGx5 X3BhcnNlZF9maWxlbmFtZSwgemVuZF9pbmlfc2Nhbm5lcl9nZXRfbGluZW5vKFRTUk1MU19D KSk7Ci0JfSBlbHNlIHsKLQkJZXJyb3JfYnVmID0gZXN0cmR1cCgiSW52YWxpZCBjb25maWd1 cmF0aW9uIGRpcmVjdGl2ZVxuIik7Ci0JfQotCi0JaWYgKENHKGluaV9wYXJzZXJfdW5idWZm ZXJlZF9lcnJvcnMpKSB7Ci0jaWZkZWYgUEhQX1dJTjMyCi0JCU1lc3NhZ2VCb3goTlVMTCwg ZXJyb3JfYnVmLCAiUEhQIEVycm9yIiwgTUJfT0t8TUJfVE9QTU9TVHwweDAwMjAwMDAwTCk7 Ci0jZWxzZQotCQlmcHJpbnRmKHN0ZGVyciwgIlBIUDogICVzIiwgZXJyb3JfYnVmKTsKLSNl bmRpZgotCX0gZWxzZSB7Ci0JCXplbmRfZXJyb3IoRV9XQVJOSU5HLCAiJXMiLCBlcnJvcl9i dWYpOwotCX0KLQllZnJlZShlcnJvcl9idWYpOworCXplbmRfaW5pX2Vycm9yKEVfV0FSTklO RyBUU1JNTFNfQ0MsIG1zZyk7CiB9CiAvKiB9fX0gKi8KIApAQCAtMjQ0LDEyICszMjIsNDIg QEAgWkVORF9BUEkgaW50IHplbmRfcGFyc2VfaW5pX3N0cmluZyhjaGFyIAogfQogLyogfX19 ICovCiAKK3ZvaWQgemVuZF9pbmlfdGVybmFyeSh6dmFsICpyZXN1bHQsIHp2YWwgKmNvbmRp dGlvbiwgenZhbCAqZmlyc3QsIHp2YWwgKnNlY29uZCBUU1JNTFNfQ0MpIC8qIHt7eyAqLwor eworCXp2YWwgdG1wOworCWludCB2YWw7CisJemVuZF9pbmlfZ2V0X3ZhcigmdG1wLCBjb25k aXRpb24gVFNSTUxTX0NDKTsKKwlmcmVlKFpfU1RSVkFMX1AoY29uZGl0aW9uKSk7CisJdmFs ID0gYXRvaShaX1NUUlZBTCh0bXApKTsKKwlmcmVlKFpfU1RSVkFMKHRtcCkpOworCWlmICh2 YWwpIHsKKwkJaWYgKGZpcnN0KSB7CisJCQkqcmVzdWx0ID0gKmZpcnN0OworCQl9IGVsc2Ug eworCQkJWlZBTF9TVFJJTkdMKHJlc3VsdCwgIiIsIDAsIDEpOworCQl9CisJCWlmIChzZWNv bmQpIHsKKwkJCWZyZWUoWl9TVFJWQUxfUChzZWNvbmQpKTsKKwkJfQorCX0gZWxzZSB7CisJ CWlmIChzZWNvbmQpIHsKKwkJCSpyZXN1bHQgPSAqc2Vjb25kOworCQl9IGVsc2UgeworCQkJ WlZBTF9TVFJJTkdMKHJlc3VsdCwgIiIsIDAsIDEpOworCQl9CisJCWlmIChmaXJzdCkgewor CQkJZnJlZShaX1NUUlZBTF9QKGZpcnN0KSk7CisJCX0KKwl9Cit9IC8qIH19fSAqLworCiAl fQogCiAlZXhwZWN0IDAKICVwdXJlX3BhcnNlcgogCiAldG9rZW4gVENfU0VDVElPTgorJXRv a2VuIFRDX0NPTkRJVElPTgogJXRva2VuIFRDX1JBVwogJXRva2VuIFRDX0NPTlNUQU5UCiAl dG9rZW4gVENfTlVNQkVSCkBAIC0yNjMsNyArMzcxLDExIEBAIFpFTkRfQVBJIGludCB6ZW5k X3BhcnNlX2luaV9zdHJpbmcoY2hhciAKICV0b2tlbiBCT09MX1RSVUUKICV0b2tlbiBCT09M X0ZBTFNFCiAldG9rZW4gRU5EX09GX0xJTkUKLSV0b2tlbiAnPScgJzonICcsJyAnLicgJyIn ICdcJycgJ14nICcrJyAnLScgJy8nICcqJyAnJScgJyQnICd+JyAnPCcgJz4nICc/JyAnQCcg J3snICd9JworJWxlZnQgVF9MX09SCislbGVmdCBUX0xfQU5ECislbGVmdCBUX0lTX0VRIFRf SVNfTkUgVF9JU19JREVOVElDQUwgVF9JU19OT1RfSURFTlRJQ0FMCislbGVmdCBUX0lTX0xF IFRfSVNfR0UKKyV0b2tlbiAnPScgJzonICcsJyAnLicgJyInICdcJycgJ14nICcrJyAnLScg Jy8nICcqJyAnJScgJyQnICd+JyAnPCcgJz4nICc/JyAnQCcgJ3snICd9JyAnKCcgJyknCiAl bGVmdCAnfCcgJyYnCiAlcmlnaHQgJ34nICchJwogCkBAIC0yNzYsMzMgKzM4OCw3MSBAQCBz dGF0ZW1lbnRfbGlzdDoKIAogc3RhdGVtZW50OgogCQlUQ19TRUNUSU9OIHNlY3Rpb25fc3Ry aW5nX29yX3ZhbHVlICddJyB7Ci0jaWYgREVCVUdfQ0ZHX1BBUlNFUgotCQkJcHJpbnRmKCJT RUNUSU9OOiBbJXNdXG4iLCBaX1NUUlZBTCgkMikpOworI2lmIFpFTkRfREVCVUdfQ0ZHX1BB UlNFUgorCQkJZnByaW50ZihzdGRlcnIsICJTRUNUSU9OOiBbJXNdXG4iLCBaX1NUUlZBTCgk MikpOwogI2VuZGlmCiAJCQlaRU5EX0lOSV9QQVJTRVJfQ0IoJiQyLCBOVUxMLCBOVUxMLCBa RU5EX0lOSV9QQVJTRVJfU0VDVElPTiwgWkVORF9JTklfUEFSU0VSX0FSRyBUU1JNTFNfQ0Mp OwogCQkJZnJlZShaX1NUUlZBTCgkMikpOwogCQl9CisJfAlUQ19DT05ESVRJT04gY29tcGFy ZSAnXScgeworCQkgICAgaW50IGlnbm9yZSA9IFpfU1RSVkFMKCQyKVswXSA9PSAnMScgPyAw IDogMTsKKwkJCWZyZWUoWl9TVFJWQUwoJDIpKTsKKwkJCXplbmRfaW5pX3NldF9pZ25vcmUo aWdub3JlID8gWkVORF9JTklfQ09ORF9JR05PUkUgOiBaRU5EX0lOSV9DT05EX1JFQUQgVFNS TUxTX0NDKTsKKwkJfQogCXwJVENfTEFCRUwgJz0nIHN0cmluZ19vcl92YWx1ZSB7Ci0jaWYg REVCVUdfQ0ZHX1BBUlNFUgotCQkJcHJpbnRmKCJOT1JNQUw6ICclcycgPSAnJXMnXG4iLCBa X1NUUlZBTCgkMSksIFpfU1RSVkFMKCQzKSk7CisjaWYgWkVORF9ERUJVR19DRkdfUEFSU0VS CisJCQlmcHJpbnRmKHN0ZGVyciwgIk5PUk1BTDogJyVzJyA9ICclcydcbiIsIFpfU1RSVkFM KCQxKSwgWl9TVFJWQUwoJDMpKTsKICNlbmRpZgogCQkJWkVORF9JTklfUEFSU0VSX0NCKCYk MSwgJiQzLCBOVUxMLCBaRU5EX0lOSV9QQVJTRVJfRU5UUlksIFpFTkRfSU5JX1BBUlNFUl9B UkcgVFNSTUxTX0NDKTsKIAkJCWZyZWUoWl9TVFJWQUwoJDEpKTsKIAkJCWZyZWUoWl9TVFJW QUwoJDMpKTsKIAkJfQogCXwJVENfT0ZGU0VUIG9wdGlvbl9vZmZzZXQgJ10nICc9JyBzdHJp bmdfb3JfdmFsdWUgewotI2lmIERFQlVHX0NGR19QQVJTRVIKLQkJCXByaW50ZigiT0ZGU0VU OiAnJXMnWyVzXSA9ICclcydcbiIsIFpfU1RSVkFMKCQxKSwgWl9TVFJWQUwoJDIpLCBaX1NU UlZBTCgkNSkpOworI2lmIFpFTkRfREVCVUdfQ0ZHX1BBUlNFUgorCQkJZnByaW50ZihzdGRl cnIsICJPRkZTRVQ6ICclcydbJXNdID0gJyVzJ1xuIiwgWl9TVFJWQUwoJDEpLCBaX1NUUlZB TCgkMiksIFpfU1RSVkFMKCQ1KSk7CiAjZW5kaWYKIAkJCVpFTkRfSU5JX1BBUlNFUl9DQigm JDEsICYkNSwgJiQyLCBaRU5EX0lOSV9QQVJTRVJfUE9QX0VOVFJZLCBaRU5EX0lOSV9QQVJT RVJfQVJHIFRTUk1MU19DQyk7CiAJCQlmcmVlKFpfU1RSVkFMKCQxKSk7CiAJCQlmcmVlKFpf U1RSVkFMKCQyKSk7CiAJCQlmcmVlKFpfU1RSVkFMKCQ1KSk7CiAJCX0KLQl8CVRDX0xBQkVM CXsgWkVORF9JTklfUEFSU0VSX0NCKCYkMSwgTlVMTCwgTlVMTCwgWkVORF9JTklfUEFSU0VS X0VOVFJZLCBaRU5EX0lOSV9QQVJTRVJfQVJHIFRTUk1MU19DQyk7IGZyZWUoWl9TVFJWQUwo JDEpKTsgfQorCXwJVENfTEFCRUwJeworCQkJWkVORF9JTklfUEFSU0VSX0NCKCYkMSwgTlVM TCwgTlVMTCwgWkVORF9JTklfUEFSU0VSX0VOVFJZLCBaRU5EX0lOSV9QQVJTRVJfQVJHIFRT Uk1MU19DQyk7CisJCQlmcmVlKFpfU1RSVkFMKCQxKSk7CisJCX0KIAl8CUVORF9PRl9MSU5F CiA7CiAKK2NvbXBhcmU6CisJCWNvbXBhcmVfcmlnaHQgVF9MX0FORCBjb21wYXJlX3JpZ2h0 IHsgemVuZF9pbmlfY29tcGFyZShUX0xfQU5ELCAmJCQsICYkMSwgJiQzKTsgfQorCXwJY29t cGFyZV9yaWdodCBUX0xfT1IgIGNvbXBhcmVfcmlnaHQgeyB6ZW5kX2luaV9jb21wYXJlKFRf TF9PUiwgICYkJCwgJiQxLCAmJDMpOyB9CisJfAljb21wYXJlX3JpZ2h0IFRfSVNfR0UgY29t cGFyZV9yaWdodCB7IHplbmRfaW5pX2NvbXBhcmUoVF9JU19HRSwgJiQkLCAmJDEsICYkMyk7 IH0KKwl8CWNvbXBhcmVfcmlnaHQgJz4nICAgICBjb21wYXJlX3JpZ2h0IHsgemVuZF9pbmlf Y29tcGFyZSgnPicsICAgICAmJCQsICYkMSwgJiQzKTsgfQorCXwJY29tcGFyZV9yaWdodCBU X0lTX0xFIGNvbXBhcmVfcmlnaHQgeyB6ZW5kX2luaV9jb21wYXJlKFRfSVNfTEUsICYkJCwg JiQxLCAmJDMpOyB9CisJfAljb21wYXJlX3JpZ2h0ICc8JyAgICAgY29tcGFyZV9yaWdodCB7 IHplbmRfaW5pX2NvbXBhcmUoJzwnLCAgICAgJiQkLCAmJDEsICYkMyk7IH0KKwl8CWNvbXBh cmVfcmlnaHQgVF9JU19FUSBjb21wYXJlX3JpZ2h0IHsgemVuZF9pbmlfY29tcGFyZShUX0lT X0VRLCAmJCQsICYkMSwgJiQzKTsgfQorCXwJY29tcGFyZV9yaWdodCBUX0lTX05FIGNvbXBh cmVfcmlnaHQgeyB6ZW5kX2luaV9jb21wYXJlKFRfSVNfTkUsICYkJCwgJiQxLCAmJDMpOyB9 CisJfAljb21wYXJlX3JpZ2h0IFRfSVNfSURFTlRJQ0FMIGNvbXBhcmVfcmlnaHQgeyB6ZW5k X2luaV9jb21wYXJlKFRfSVNfSURFTlRJQ0FMLCAmJCQsICYkMSwgJiQzKTsgfQorCXwJY29t cGFyZV9yaWdodCBUX0lTX05PVF9JREVOVElDQUwgY29tcGFyZV9yaWdodCB7IHplbmRfaW5p X2NvbXBhcmUoVF9JU19OT1RfSURFTlRJQ0FMLCAmJCQsICYkMSwgJiQzKTsgfQorOworCitj b21wYXJlX3JpZ2h0OgorCQljb21wYXJlX3ZhbHVlCXsgJCQgPSAkMTsgfQorCXwJJygnIGNv bXBhcmUgJyknCXsgJCQgPSAkMjsgfQorOworCitjb21wYXJlX3ZhbHVlOgorCXwJVENfUkFX CQkJCQkJCXsgJCQgPSAkMTsgfQorCXwJVENfTlVNQkVSCQkJCQkJeyAkJCA9ICQxOyB9CisJ fAlUQ19TVFJJTkcJCQkJCQl7ICQkID0gJDE7IH0KKwl8CUJPT0xfVFJVRQkJCQkJCXsgJCQg PSAkMTsgfQorCXwJQk9PTF9GQUxTRQkJCQkJCXsgJCQgPSAkMTsgfQorCXwJVENfQ09OU1RB TlQJCQkJCQl7IHplbmRfaW5pX2dldF9jb25zdGFudCgmJCQsICYkMSBUU1JNTFNfQ0MpOyB9 CisJfAknIicgZW5jYXBzZWRfbGlzdCAnIicJCQl7ICQkID0gJDI7IH0KKwl8CWNmZ192YXJf cmVmCQkJCQkJeyAkJCA9ICQxOyB9CisJfAknKCcgZXhwciAnKScJCQkJCXsgJCQgPSAkMjsg fQorOworCQkKIHNlY3Rpb25fc3RyaW5nX29yX3ZhbHVlOgogCQl2YXJfc3RyaW5nX2xpc3QJ CQkJCXsgJCQgPSAkMTsgfQogCXwJLyogZW1wdHkgKi8JCQkJCQl7IHplbmRfaW5pX2luaXRf c3RyaW5nKCYkJCk7IH0KQEAgLTM0NSwxNSArNDk1LDMwIEBAIGV4cHI6CiA7CiAKIGNmZ192 YXJfcmVmOgotCQlUQ19ET0xMQVJfQ1VSTFkgVENfVkFSTkFNRSAnfScJeyB6ZW5kX2luaV9n ZXRfdmFyKCYkJCwgJiQyIFRTUk1MU19DQyk7IGZyZWUoWl9TVFJWQUwoJDIpKTsgfQorCQlU Q19ET0xMQVJfQ1VSTFkgVENfVkFSTkFNRSAnfScgeworCQkJemVuZF9pbmlfZ2V0X3Zhcigm JCQsICYkMiBUU1JNTFNfQ0MpOworCQkJZnJlZShaX1NUUlZBTCgkMikpOworCQl9CisJfAlU Q19ET0xMQVJfQ1VSTFkgVENfVkFSTkFNRSAnPycgVENfUkFXICc6JyBUQ19SQVcgJ30nIHsK KwkJCXplbmRfaW5pX3Rlcm5hcnkoJiQkLCAmJDIsICYkNCwgJiQ2IFRTUk1MU19DQyk7CisJ CX0KKwl8CVRDX0RPTExBUl9DVVJMWSBUQ19WQVJOQU1FICc/JyAnOicgVENfUkFXICd9JyB7 CisJCQl6ZW5kX2luaV90ZXJuYXJ5KCYkJCwgJiQyLCBOVUxMLCAmJDUgVFNSTUxTX0NDKTsK KwkJfQorCXwJVENfRE9MTEFSX0NVUkxZIFRDX1ZBUk5BTUUgJz8nIFRDX1JBVyAnOicgJ30n IHsKKwkJCXplbmRfaW5pX3Rlcm5hcnkoJiQkLCAmJDIsICYkNCwgTlVMTCBUU1JNTFNfQ0Mp OworCQl9CisJfAlUQ19ET0xMQVJfQ1VSTFkgVENfVkFSTkFNRSAnPycgJzonICd9JyB7CisJ CQl6ZW5kX2luaV90ZXJuYXJ5KCYkJCwgJiQyLCBOVUxMLCBOVUxMIFRTUk1MU19DQyk7CisJ CX0KIDsKIAogY29uc3RhbnRfc3RyaW5nOgogCQlUQ19DT05TVEFOVAkJCQkJCXsgemVuZF9p bmlfZ2V0X2NvbnN0YW50KCYkJCwgJiQxIFRTUk1MU19DQyk7IH0KLQl8CVRDX1JBVwkJCQkJ CQl7ICQkID0gJDE7IC8qcHJpbnRmKCJUQ19SQVc6ICclcydcbiIsIFpfU1RSVkFMKCQxKSk7 Ki8gfQotCXwJVENfTlVNQkVSCQkJCQkJeyAkJCA9ICQxOyAvKnByaW50ZigiVENfTlVNQkVS OiAnJXMnXG4iLCBaX1NUUlZBTCgkMSkpOyovIH0KLQl8CVRDX1NUUklORwkJCQkJCXsgJCQg PSAkMTsgLypwcmludGYoIlRDX1NUUklORzogJyVzJ1xuIiwgWl9TVFJWQUwoJDEpKTsqLyB9 Ci0JfAlUQ19XSElURVNQQUNFCQkJCQl7ICQkID0gJDE7IC8qcHJpbnRmKCJUQ19XSElURVNQ QUNFOiAnJXMnXG4iLCBaX1NUUlZBTCgkMSkpOyovIH0KKwl8CVRDX1JBVwkJCQkJCQl7ICQk ID0gJDE7IC8qZnByaW50ZihzdGRlcnIsICJUQ19SQVc6ICclcydcbiIsIFpfU1RSVkFMKCQx KSk7Ki8gfQorCXwJVENfTlVNQkVSCQkJCQkJeyAkJCA9ICQxOyAvKmZwcmludGYoc3RkZXJy LCAiVENfTlVNQkVSOiAnJXMnXG4iLCBaX1NUUlZBTCgkMSkpOyovIH0KKwl8CVRDX1NUUklO RwkJCQkJCXsgJCQgPSAkMTsgLypmcHJpbnRmKHN0ZGVyciwgIlRDX1NUUklORzogJyVzJ1xu IiwgWl9TVFJWQUwoJDEpKTsqLyB9CisJfAlUQ19XSElURVNQQUNFCQkJCQl7ICQkID0gJDE7 IC8qZnByaW50ZihzdGRlcnIsICJUQ19XSElURVNQQUNFOiAnJXMnXG4iLCBaX1NUUlZBTCgk MSkpOyovIH0KIDsKIAogLyoKSW5kZXg6IFplbmQvemVuZF9pbmlfc2Nhbm5lci5sCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KUkNTIGZpbGU6IC9yZXBvc2l0b3J5L1plbmRFbmdpbmUyL3plbmRfaW5pX3Nj YW5uZXIubCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40MS4yLjIuMi4yLjIuMgpkaWZmIC11 IC1wIC1kIC1yMS40MS4yLjIuMi4yLjIuMiB6ZW5kX2luaV9zY2FubmVyLmwKLS0tIFplbmQv emVuZF9pbmlfc2Nhbm5lci5sCTQgRmViIDIwMDggMjA6NDU6MjAgLTAwMDAJMS40MS4yLjIu Mi4yLjIuMgorKysgWmVuZC96ZW5kX2luaV9zY2FubmVyLmwJOSBGZWIgMjAwOCAxNDozMTo1 NCAtMDAwMApAQCAtMTUsNiArMTUsNyBAQAogICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAgICB8 IEF1dGhvcnM6IFplZXYgU3VyYXNraSA8emVldkB6ZW5kLmNvbT4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwKICAgIHwgICAgICAgICAgSmFuaSBUYXNraW5lbiA8amFuaUBw aHAubmV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCAgICAgICAg ICBNYXJjdXMgQm9lcmdlciA8aGVsbHlAcGhwLm5ldD4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB8CiAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKICovCiAKQEAgLTY4LDEzICs2OSwx OCBAQAogCiAlfQogCisleCBJR05PUkUKKyV4IElGRE9ORQogJXggU1RfRE9VQkxFX1FVT1RF UwogJXggU1RfT0ZGU0VUCiAleCBTVF9SQVcKICV4IFNUX1NFQ1RJT05fUkFXCiAleCBTVF9T RUNUSU9OX1ZBTFVFCisleCBTVF9DT05ESVRJT05fVkFMVUUKICV4IFNUX1ZBTFVFCiAleCBT VF9WQVJOQU1FCisleCBTVF9URVJOQVJZX0ZJUlNUCisleCBTVF9URVJOQVJZX1NFQ09ORAog JW9wdGlvbiBzdGFjawogCiAlewpAQCAtMTIyLDYgKzEyOCw4IEBAIFpFTkRfQVBJIHplbmRf c2Nhbm5lcl9nbG9iYWxzIGluaV9zY2FubmUKIAlyZXR1cm4gdHlwZTsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCiB9CiAKK3ZvaWQgemVuZF9pbmlfc2V0X2lnbm9yZSha RU5EX0lOSV9DT05ESVRJT05BTCBzdGF0ZSBUU1JNTFNfREMpOworCiBzdGF0aWMgY2hhciAq aW5pX2ZpbGVuYW1lOwogCiAvKiB7e3sgaW5pdF9pbmlfc2Nhbm5lcigpCkBAIC0xMjksNiAr MTM3LDcgQEAgc3RhdGljIGNoYXIgKmluaV9maWxlbmFtZTsKIHN0YXRpYyB2b2lkIGluaXRf aW5pX3NjYW5uZXIoVFNSTUxTX0QpCiB7CiAJU0NORyhsaW5lbm8pID0gMTsKKwlTQ05HKGlm X2xldmVsKSA9IDA7CiAJU0NORyhzY2FubmVyX21vZGUpID0gWkVORF9JTklfU0NBTk5FUl9O T1JNQUw7CiAJU0NORyh5eV9zdGFydF9zdGFja19wdHIpID0gMDsKIAlTQ05HKHl5X3N0YXJ0 X3N0YWNrX2RlcHRoKSA9IDA7CkBAIC0xOTksNiArMjA4LDM1IEBAIGludCB6ZW5kX2luaV9w cmVwYXJlX3N0cmluZ19mb3Jfc2Nhbm5pbmcKIH0KIC8qIH19fSAqLwogCit2b2lkIHplbmRf aW5pX2Vycm9yKGludCBzZXZlcml0eSBUU1JNTFNfREMsIGNoYXIgKmVycm9yKSAvKiB7e3sg Ki8KK3sKKwlpZiAoIWVycm9yKSB7CisJCWVycm9yID0gIkVycm9yIjsKKwl9CisJaWYgKENH KGluaV9wYXJzZXJfdW5idWZmZXJlZF9lcnJvcnMpKSB7CisjaWZkZWYgUEhQX1dJTjMyCisJ CWlmIChpbmlfZmlsZW5hbWUpIHsKKwkJCXplbmRfc3BwcmludGYoJmVycm9yLCAwLCAiJXMg YXQgbGluZSAlZCBvZiBpbmkgZmlsZSAlcy4iLCBlcnJvciwgU0NORyhsaW5lbm8pLCBpbmlf ZmlsZW5hbWUpOworCQl9IGVsc2UgeworCQkJemVuZF9zcHByaW50ZigmZXJyb3IsIDAsICIl cyBpbiBpbnZhbGlkIGNvbmZpZ3VyYXRpb24gZGlyZWN0aXZlLiIsIGVycm9yKTsKKwkJfQor CQlNZXNzYWdlQm94KE5VTEwsIGVycm9yLCAiUEhQIEVycm9yIiwgTUJfT0t8TUJfVE9QTU9T VHwweDAwMjAwMDAwTCk7CisJCWVmcmVlKGVycm9yKTsKKyNlbHNlCisJCWlmIChpbmlfZmls ZW5hbWUpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiUEhQOiAlcyBhdCBsaW5lICVkIG9mIGlu aSBmaWxlICVzLlxuIiwgZXJyb3IsIFNDTkcobGluZW5vKSwgaW5pX2ZpbGVuYW1lKTsKKwkJ fSBlbHNlIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiUEhQOiAlcyBpbiBpbnZhbGlkIGNvbmZp Z3VyYXRpb24gZGlyZWN0aXZlLlxuIiwgZXJyb3IpOworCQl9CisjZW5kaWYKKwl9IGVsc2Ug aWYgKGluaV9maWxlbmFtZSkgeworCQl6ZW5kX2Vycm9yKHNldmVyaXR5LCAiJXMgYXQgbGlu ZSAlZCBvZiBpbmkgZmlsZSAlcyIsIGVycm9yLCBTQ05HKGxpbmVubyksIGluaV9maWxlbmFt ZSk7CisJfSBlbHNlIHsKKwkJemVuZF9lcnJvcihzZXZlcml0eSwgIiVzIGluIGludmFsaWQg Y29uZmlndXJhdGlvbiBkaXJlY3RpdmUiLCBlcnJvcik7CisJfQorfQorLyogfX19ICovCisK IC8qIHt7eyB6ZW5kX2luaV9jbG9zZV9maWxlKCkKICovCiB2b2lkIHplbmRfaW5pX2Nsb3Nl X2ZpbGUoemVuZF9maWxlX2hhbmRsZSAqZmggVFNSTUxTX0RDKQpAQCAtMjkwLDcgKzMyOCw5 IEBAIFJBV19WQUxVRV9DSEFSUyBbXj1cblxyO10KIExJVEVSQUxfRE9MTEFSICgiJCIoW15h LXpBLVowLTl7XXwoIlxcIntBTllfQ0hBUn0pKSkKIFZBTFVFX0NIQVJTICAgICAgICAgKFte JD0gXHRcblxyOyZ8figpISInXXx7TElURVJBTF9ET0xMQVJ9KQogU0VDVElPTl9WQUxVRV9D SEFSUyAoW14kXG5ccjsiJ1xdXFxdfCgiXFwie0FOWV9DSEFSfSl8e0xJVEVSQUxfRE9MTEFS fSkKK0NPTkRJVElPTl9WQUxVRV9DSEFSUyAoW14kIFx0XG5ccjsiJ1xdXFxdfCgiXFwie0FO WV9DSEFSfSl8e0xJVEVSQUxfRE9MTEFSfSkKIERPVUJMRV9RVU9URVNfQ0hBUlMgKFteJCJc XF18KCJcXCJ7QU5ZX0NIQVJ9KXx7TElURVJBTF9ET0xMQVJ9KQorVEVSTkFSWV9WQUxVRV9D SEFSUyAoW14kIlxcOj97fVxyXG5dfCgiXFwie0FOWV9DSEFSfSl8e0xJVEVSQUxfRE9MTEFS fSkKIAogLyogIiAqLwogCkBAIC0zMTIsNyArMzUyLDgxIEBAIERPVUJMRV9RVU9URVNfQ0hB UlMgKFteJCJcXF18KCJcXCJ7QU5ZX0MKIAlyZXR1cm4gVENfU0VDVElPTjsKIH0KIAotPFNU X1ZBTFVFLFNUX1NFQ1RJT05fVkFMVUUsU1RfT0ZGU0VUPiInIntTSU5HTEVfUVVPVEVEX0NI QVJTfSsiJyIgeyAvKiBSYXcgc3RyaW5nICovCis8SUdOT1JFPiJbRUxTRV0ie1RBQlNfQU5E X1NQQUNFU30qe05FV0xJTkV9IHsgLyogRW5kIG9mIGNvbmRpdGlvbiAqLworCXplbmRfaW5p X3NldF9pZ25vcmUoWkVORF9JTklfQ09ORF9SRUFEIFRTUk1MU19DQyk7CisJQkVHSU4oSU5J VElBTCk7CisJU0NORyhsaW5lbm8pKys7CisJcmV0dXJuIEVORF9PRl9MSU5FOworfQorCis8 SUZET05FLElOSVRJQUw+IltFTFNFXSJ7VEFCU19BTkRfU1BBQ0VTfSp7TkVXTElORX0geyAv KiBFbmQgb2YgY29uZGl0aW9uICovCisJaWYgKFNDTkcoc2Nhbm5lcl9tb2RlKSAhPSBaRU5E X0lOSV9TQ0FOTkVSX1JBVykgeworCQlpZiAoIVNDTkcoaWZfbGV2ZWwpKSB7CisJCQl6ZW5k X2luaV9lcnJvcihFX1dBUk5JTkcgVFNSTUxTX0NDLCAiW0VMU0VdIHdpdGhvdXQgW0lGXSIp OworCQkJeXl0ZXJtaW5hdGUoKTsKKwkJfQorCQl6ZW5kX2luaV9zZXRfaWdub3JlKFpFTkRf SU5JX0NPTkRfSUdOT1JFIFRTUk1MU19DQyk7CisJCUJFR0lOKElGRE9ORSk7CisJfSBlbHNl IHsKKwkJQkVHSU4oSU5JVElBTCk7CisJfQorCVNDTkcobGluZW5vKSsrOworCXJldHVybiBF TkRfT0ZfTElORTsKK30KKworPElOSVRJQUwsSUdOT1JFLElGRE9ORT4iW0VORElGXSJ7VEFC U19BTkRfU1BBQ0VTfSp7TkVXTElORX0geyAvKiBFbmQgb2YgY29uZGl0aW9uICovCisJaWYg KFNDTkcoc2Nhbm5lcl9tb2RlKSAhPSBaRU5EX0lOSV9TQ0FOTkVSX1JBVykgeworCQlpZiAo IVNDTkcoaWZfbGV2ZWwpLS0pIHsKKwkJCXplbmRfaW5pX2Vycm9yKEVfV0FSTklORyBUU1JN TFNfQ0MsICJbRU5ESUZdIHdpdGhvdXQgW0lGXSIpOworCQkJeXl0ZXJtaW5hdGUoKTsKKwkJ fQorCQl5eV9wb3Bfc3RhdGUoVFNSTUxTX0MpOworI2lmIFpFTkRfREVCVUdfQ0ZHX1BBUlNF UgorCQlmcHJpbnRmKHN0ZGVyciwgIkVORElGXG4iKTsKKyNlbmRpZgorCX0KKwlTQ05HKGxp bmVubykrKzsKKwlyZXR1cm4gRU5EX09GX0xJTkU7Cit9CisKKzxJTklUSUFMLElHTk9SRT4i W0VMSUYie1RBQlNfQU5EX1NQQUNFU30rIHsgLyogQ29uZGl0aW9uIGVsaWYgKi8KKwlpZiAo U0NORyhzY2FubmVyX21vZGUpICE9IFpFTkRfSU5JX1NDQU5ORVJfUkFXKSB7CisJCWlmICgh U0NORyhpZl9sZXZlbCkpIHsKKwkJCXplbmRfZXJyb3IoRV9XQVJOSU5HLCAiW0VMSUZdIHdp dGhvdXQgW0lGXSIpOworCQkJeXl0ZXJtaW5hdGUoKTsKKwkJfQorCQlCRUdJTihTVF9DT05E SVRJT05fVkFMVUUpOworCQlyZXR1cm4gVENfQ09ORElUSU9OOworCX0gZWxzZSB7CisJCUJF R0lOKElGRE9ORSk7CisJCXJldHVybiBFTkRfT0ZfTElORTsKKwl9Cit9CisKKzxJRkRPTkU+ IltFTElGIntUQUJTX0FORF9TUEFDRVN9KyB7IC8qIENvbmRpdGlvbiBlbGlmICovCisJcmV0 dXJuIEVORF9PRl9MSU5FOworfQorCis8SU5JVElBTD4iW0lGIntUQUJTX0FORF9TUEFDRVN9 KyB7IC8qIENvbmRpdGlvbiBpZiAqLworCWlmIChTQ05HKHNjYW5uZXJfbW9kZSkgIT0gWkVO RF9JTklfU0NBTk5FUl9SQVcpIHsKKwkJU0NORyhpZl9sZXZlbCkrKzsKKwkJeXlfcHVzaF9z dGF0ZShTVF9DT05ESVRJT05fVkFMVUUgVFNSTUxTX0NDKTsKKwkJcmV0dXJuIFRDX0NPTkRJ VElPTjsKKwl9IGVsc2UgeworCQlCRUdJTihJRkRPTkUpOworCQlyZXR1cm4gRU5EX09GX0xJ TkU7CisJfQorfQorCis8SUdOT1JFLElGRE9ORT5bXlxbXXtORVdMSU5FfSB7CisJU0NORyhs aW5lbm8pKys7CisJaWYgKFNDTkcoc2Nhbm5lcl9tb2RlKSA9PSBaRU5EX0lOSV9TQ0FOTkVS X1JBVykgeworCQlCRUdJTihJTklUSUFMKTsKKwl9CisJcmV0dXJuIEVORF9PRl9MSU5FOwor fQorCis8U1RfVkFMVUUsU1RfU0VDVElPTl9WQUxVRSxTVF9DT05ESVRJT05fVkFMVUUsU1Rf T0ZGU0VUPiInIntTSU5HTEVfUVVPVEVEX0NIQVJTfSsiJyIgeyAvKiBSYXcgc3RyaW5nICov CiAJLyogRWF0IGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNpbmdsZSBxdW90ZXMgKi8KIAlpZiAo eXl0ZXh0WzBdID09ICdcJycgJiYgeXl0ZXh0W3l5bGVuZyAtIDFdID09ICdcJycpIHsKIAkJ eXl0ZXh0Kys7CkBAIC0zMjgsNiArNDQyLDUyIEBAIERPVUJMRV9RVU9URVNfQ0hBUlMgKFte JCJcXF18KCJcXCJ7QU5ZX0MKIAlyZXR1cm4gJ10nOwogfQogCis8U1RfQ09ORElUSU9OX1ZB TFVFPntUQUJTX0FORF9TUEFDRVN9KiJdIntUQUJTX0FORF9TUEFDRVN9KntORVdMSU5FfT8g eyAvKiBFbmQgb2YgY29uZGl0aW9uICovCisJQkVHSU4oSU5JVElBTCk7CisJU0NORyhsaW5l bm8pKys7CisJcmV0dXJuICddJzsKK30KKworPFNUX0NPTkRJVElPTl9WQUxVRT57VEFCU19B TkRfU1BBQ0VTfSoifHwie1RBQlNfQU5EX1NQQUNFU30qIHsKKwlyZXR1cm4gVF9MX09SOwor fQorCis8U1RfQ09ORElUSU9OX1ZBTFVFPntUQUJTX0FORF9TUEFDRVN9KiImJiJ7VEFCU19B TkRfU1BBQ0VTfSogeworCXJldHVybiBUX0xfQU5EOworfQorCis8U1RfQ09ORElUSU9OX1ZB TFVFPntUQUJTX0FORF9TUEFDRVN9KiI9PSJ7VEFCU19BTkRfU1BBQ0VTfSogeworCXJldHVy biBUX0lTX0VROworfQorCis8U1RfQ09ORElUSU9OX1ZBTFVFPntUQUJTX0FORF9TUEFDRVN9 KiIhPSJ7VEFCU19BTkRfU1BBQ0VTfSogeworCXJldHVybiBUX0lTX05FOworfQorCis8U1Rf Q09ORElUSU9OX1ZBTFVFPntUQUJTX0FORF9TUEFDRVN9KiI9PT0ie1RBQlNfQU5EX1NQQUNF U30qIHsKKwlyZXR1cm4gVF9JU19JREVOVElDQUw7Cit9CisKKzxTVF9DT05ESVRJT05fVkFM VUU+e1RBQlNfQU5EX1NQQUNFU30qIiE9PSJ7VEFCU19BTkRfU1BBQ0VTfSogeworCXJldHVy biBUX0lTX05PVF9JREVOVElDQUw7Cit9CisKKzxTVF9DT05ESVRJT05fVkFMVUU+e1RBQlNf QU5EX1NQQUNFU30qIjw9IntUQUJTX0FORF9TUEFDRVN9KiB7CisJcmV0dXJuIFRfSVNfTEU7 Cit9CisKKzxTVF9DT05ESVRJT05fVkFMVUU+e1RBQlNfQU5EX1NQQUNFU30qIj49IntUQUJT X0FORF9TUEFDRVN9KiB7CisJcmV0dXJuIFRfSVNfR0U7Cit9CisKKzxTVF9DT05ESVRJT05f VkFMVUU+e1RBQlNfQU5EX1NQQUNFU30qIigie1RBQlNfQU5EX1NQQUNFU30qIHsKKwlyZXR1 cm4gJygnOworfQorCis8U1RfQ09ORElUSU9OX1ZBTFVFPntUQUJTX0FORF9TUEFDRVN9KiIp IntUQUJTX0FORF9TUEFDRVN9KiB7CisJcmV0dXJuICcpJzsKK30KKwogPElOSVRJQUw+e0xB QkVMfSJbIntUQUJTX0FORF9TUEFDRVN9KiB7IC8qIFN0YXJ0IG9mIG9wdGlvbiB3aXRoIG9m ZnNldCAqLwogCS8qIEVhdCB0cmFpbGluZyB3aGl0ZXNwYWNlIGFuZCBbICovCiAJRUFUX1RS QUlMSU5HX1dISVRFU1BBQ0VfRVgoJ1snKTsKQEAgLTM0Myw3ICs1MDMsNyBAQCBET1VCTEVf UVVPVEVTX0NIQVJTIChbXiQiXFxdfCgiXFwie0FOWV9DCiAJcmV0dXJuICddJzsKIH0KIAot PFNUX0RPVUJMRV9RVU9URVMsU1RfU0VDVElPTl9WQUxVRSxTVF9WQUxVRSxTVF9PRkZTRVQ+ e0RPTExBUl9DVVJMWX0geyAvKiBWYXJpYWJsZSBzdGFydCAqLworPFNUX0RPVUJMRV9RVU9U RVMsU1RfU0VDVElPTl9WQUxVRSxTVF9DT05ESVRJT05fVkFMVUUsU1RfVkFMVUUsU1RfT0ZG U0VUPntET0xMQVJfQ1VSTFl9IHsgLyogVmFyaWFibGUgc3RhcnQgKi8KIAl5eV9wdXNoX3N0 YXRlKFNUX1ZBUk5BTUUgVFNSTUxTX0NDKTsKIAlyZXR1cm4gVENfRE9MTEFSX0NVUkxZOwog fQpAQCAtMzUyLDEyICs1MTIsMjYgQEAgRE9VQkxFX1FVT1RFU19DSEFSUyAoW14kIlxcXXwo IlxcIntBTllfQwogCVJFVFVSTl9UT0tFTihUQ19WQVJOQU1FLCB5eXRleHQsIHl5bGVuZyk7 CiB9CiAKLTxTVF9WQVJOQU1FPiJ9IiB7IC8qIFZhcmlhYmxlIGVuZCAqLworPFNUX1ZBUk5B TUU+Ij8iIHsgLyogVmFyaWFibGUgdGVybmFyeSBmaXJzdCB2YWx1ZSAqLworCUJFR0lOKFNU X1RFUk5BUllfRklSU1QpOworCXJldHVybiAnPyc7Cit9CisKKzxTVF9URVJOQVJZX0ZJUlNU PiI6IiB7IC8qIFZhcmlhYmxlIHRlcm5hcnkgc2Vjb25kIHZhbHVlICovCisJQkVHSU4oU1Rf VEVSTkFSWV9TRUNPTkQpOworCXJldHVybic6JzsKK30KKworPFNUX1RFUk5BUllfRklSU1Qs U1RfVEVSTkFSWV9TRUNPTkQ+e1RFUk5BUllfVkFMVUVfQ0hBUlN9KiB7IC8qIHRlcm5hcnkg dmFsdWVzICovCisJUkVUVVJOX1RPS0VOKFRDX1JBVywgeXl0ZXh0LCB5eWxlbmcpOworfQor Cis8U1RfVkFSTkFNRSxTVF9URVJOQVJZX1NFQ09ORD4ifSIgeyAvKiBWYXJpYWJsZSBlbmQg Ki8KIAl5eV9wb3Bfc3RhdGUoVFNSTUxTX0MpOwogCXJldHVybiAnfSc7CiB9CiAKLTxJTklU SUFMLFNUX1ZBTFVFPigidHJ1ZSJ8Im9uInwieWVzIil7VEFCU19BTkRfU1BBQ0VTfSogeyAv KiBUUlVFIHZhbHVlICh3aGVuIHVzZWQgb3V0c2lkZSBvcHRpb24gdmFsdWUvb2Zmc2V0IHRo aXMgY2F1c2VzIHBhcnNlIGVycm9yISkgKi8KKzxJTklUSUFMLFNUX0NPTkRJVElPTl9WQUxV RSxTVF9WQUxVRT4oInRydWUifCJvbiJ8InllcyIpe1RBQlNfQU5EX1NQQUNFU30qIHsgLyog VFJVRSB2YWx1ZSAod2hlbiB1c2VkIG91dHNpZGUgb3B0aW9uIHZhbHVlL29mZnNldCB0aGlz IGNhdXNlcyBwYXJzZSBlcnJvciEpICovCiAJUkVUVVJOX1RPS0VOKEJPT0xfVFJVRSwgIjEi LCAxKTsKIH0KIApAQCAtMzY1LDYgKzUzOSwxMCBAQCBET1VCTEVfUVVPVEVTX0NIQVJTIChb XiQiXFxdfCgiXFwie0FOWV9DCiAJUkVUVVJOX1RPS0VOKEJPT0xfRkFMU0UsICIiLCAwKTsK IH0KIAorPFNUX0NPTkRJVElPTl9WQUxVRT4oImZhbHNlInwib2ZmInwibm8ifCJub25lInwi bnVsbCIpe1RBQlNfQU5EX1NQQUNFU30qIHsgLyogRkFMU0UgdmFsdWUgKHdoZW4gdXNlZCBp biBjb25kaXRpb25zIHdlIHdhbnQgJzAnIHJhdGhlciB0aGFuICcnKSovCisJUkVUVVJOX1RP S0VOKEJPT0xfRkFMU0UsICIwIiwgMSk7Cit9CisKIDxJTklUSUFMPntMQUJFTH0geyAvKiBH ZXQgb3B0aW9uIG5hbWUgKi8KIAlSRVRVUk5fVE9LRU4oVENfTEFCRUwsIHl5dGV4dCwgeXls ZW5nKTsKIH0KQEAgLTM5OCwxMSArNTc2LDExIEBAIERPVUJMRV9RVU9URVNfQ0hBUlMgKFte JCJcXF18KCJcXCJ7QU5ZX0MKIAlyZXR1cm4gRU5EX09GX0xJTkU7CiB9CiAKLTxTVF9TRUNU SU9OX1ZBTFVFLFNUX1ZBTFVFLFNUX09GRlNFVD57Q09OU1RBTlR9IHsgLyogR2V0IGNvbnN0 YW50IG9wdGlvbiB2YWx1ZSAqLworPFNUX1NFQ1RJT05fVkFMVUUsU1RfQ09ORElUSU9OX1ZB TFVFLFNUX1ZBTFVFLFNUX09GRlNFVD57Q09OU1RBTlR9IHsgLyogR2V0IGNvbnN0YW50IG9w dGlvbiB2YWx1ZSAqLwogCVJFVFVSTl9UT0tFTihUQ19DT05TVEFOVCwgeXl0ZXh0LCB5eWxl bmcpOwogfQogCi08U1RfU0VDVElPTl9WQUxVRSxTVF9WQUxVRSxTVF9PRkZTRVQ+e05VTUJF Un0geyAvKiBHZXQgbnVtYmVyIG9wdGlvbiB2YWx1ZSBhcyBzdHJpbmcgKi8KKzxTVF9TRUNU SU9OX1ZBTFVFLFNUX0NPTkRJVElPTl9WQUxVRSxTVF9WQUxVRSxTVF9PRkZTRVQ+e05VTUJF Un0geyAvKiBHZXQgbnVtYmVyIG9wdGlvbiB2YWx1ZSBhcyBzdHJpbmcgKi8KIAlSRVRVUk5f VE9LRU4oVENfTlVNQkVSLCB5eXRleHQsIHl5bGVuZyk7CiB9CiAKQEAgLTQyOCw3ICs2MDYs NyBAQCBET1VCTEVfUVVPVEVTX0NIQVJTIChbXiQiXFxdfCgiXFwie0FOWV9DCiAJUkVUVVJO X1RPS0VOKFRDX1NUUklORywgeXl0ZXh0LCB5eWxlbmcpOwogfQogCi08U1RfU0VDVElPTl9W QUxVRSxTVF9WQUxVRSxTVF9PRkZTRVQ+e1RBQlNfQU5EX1NQQUNFU30qWyJdIHsgLyogRG91 YmxlIHF1b3RlZCAnIicgc3RyaW5nIHN0YXJ0ICovCis8U1RfU0VDVElPTl9WQUxVRSxTVF9D T05ESVRJT05fVkFMVUUsU1RfVkFMVUUsU1RfT0ZGU0VUPntUQUJTX0FORF9TUEFDRVN9Klsi XSB7IC8qIERvdWJsZSBxdW90ZWQgJyInIHN0cmluZyBzdGFydCAqLwogCXl5X3B1c2hfc3Rh dGUoU1RfRE9VQkxFX1FVT1RFUyBUU1JNTFNfQ0MpOwogCXJldHVybiAnIic7CiB9CkBAIC00 NzMsMzcgKzY1MSw0NiBAQCBET1VCTEVfUVVPVEVTX0NIQVJTIChbXiQiXFxdfCgiXFwie0FO WV9DCiAJCXN3aXRjaCAoWVlTVEFURSkgewogCQljYXNlIElOSVRJQUw6CiAJCQlicmVhazsK KwkJCisJCWNhc2UgSUdOT1JFOgorCQljYXNlIElGRE9ORToKKwkJCXplbmRfaW5pX2Vycm9y KEVfRVJST1IgVFNSTUxTX0NDLCAiVW50ZXJtaW5hdGVkIFtJRl0gaW4gaW5pIik7CisJCQli cmVhazsKIAogCQljYXNlIFNUX0RPVUJMRV9RVU9URVM6Ci0JCQlmcHJpbnRmKHN0ZGVyciwg IkVSUk9SOiBVbnRlcm1pbmF0ZWQgaW5pIG9wdGlvbiB2YWx1ZSBkb3VibGUgcXVvdGVzXG4i KTsKKwkJCXplbmRfaW5pX2Vycm9yKEVfRVJST1IgVFNSTUxTX0NDLCAiVW50ZXJtaW5hdGVk IGluaSBvcHRpb24gdmFsdWUgZG91YmxlIHF1b3RlcyIpOwogCQkJYnJlYWs7CiAKIAkJY2Fz ZSBTVF9PRkZTRVQ6Ci0JCQlmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBVbnRlcm1pbmF0ZWQg aW5pIG9wdGlvbiBvZmZzZXRcbiIpOworCQkJemVuZF9pbmlfZXJyb3IoRV9FUlJPUiBUU1JN TFNfQ0MsICJVbnRlcm1pbmF0ZWQgaW5pIG9wdGlvbiBvZmZzZXQiKTsKIAkJCWJyZWFrOwog CiAJCWNhc2UgU1RfUkFXOgotCQkJZnByaW50ZihzdGRlcnIsICJFUlJPUjogVW50ZXJtaW5h dGVkIHJhdyBpbmkgb3B0aW9uIHZhbHVlXG4iKTsKKwkJCXplbmRfaW5pX2Vycm9yKEVfRVJS T1IgVFNSTUxTX0NDLCAiVW50ZXJtaW5hdGVkIHJhdyBpbmkgb3B0aW9uIHZhbHVlIik7CiAJ CQlicmVhazsKIAogCQljYXNlIFNUX1NFQ1RJT05fUkFXOgotCQkJZnByaW50ZihzdGRlcnIs ICJFUlJPUjogVW50ZXJtaW5hdGVkIHJhdyBpbmkgc2VjdGlvbiB2YWx1ZVxuIik7CisJCQl6 ZW5kX2luaV9lcnJvcihFX0VSUk9SIFRTUk1MU19DQywgIlVudGVybWluYXRlZCByYXcgaW5p IHNlY3Rpb24gdmFsdWUiKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgU1RfU0VDVElPTl9WQUxV RToKLQkJCWZwcmludGYoc3RkZXJyLCAiRVJST1I6IFVudGVybWluYXRlZCBpbmkgc2VjdGlv biB2YWx1ZVxuIik7CisJCQl6ZW5kX2luaV9lcnJvcihFX0VSUk9SIFRTUk1MU19DQywgIlVu dGVybWluYXRlZCBpbmkgc2VjdGlvbiB2YWx1ZSIpOworCQkJYnJlYWs7CisKKwkJY2FzZSBT VF9DT05ESVRJT05fVkFMVUU6CisJCQl6ZW5kX2luaV9lcnJvcihFX0VSUk9SIFRTUk1MU19D QywgIlVudGVybWluYXRlZCBpbmkgY29uZGl0aW9uIHZhbHVlIik7CiAJCQlicmVhazsKIAog CQljYXNlIFNUX1ZBTFVFOgotCQkJZnByaW50ZihzdGRlcnIsICJFUlJPUjogVW50ZXJtaW5h dGVkIGluaSBvcHRpb24gdmFsdWVcbiIpOworCQkJemVuZF9pbmlfZXJyb3IoRV9FUlJPUiBU U1JNTFNfQ0MsICJVbnRlcm1pbmF0ZWQgaW5pIG9wdGlvbiB2YWx1ZSIpOwogCQkJYnJlYWs7 CiAKIAkJY2FzZSBTVF9WQVJOQU1FOgotCQkJZnByaW50ZihzdGRlcnIsICJFUlJPUjogVW50 ZXJtaW5hdGVkIGluaSB2YXJpYWJsZVxuIik7CisJCQl6ZW5kX2luaV9lcnJvcihFX0VSUk9S IFRTUk1MU19DQywgIlVudGVybWluYXRlZCBpbmkgdmFyaWFibGUiKTsKIAkJCWJyZWFrOwog CiAJCWRlZmF1bHQ6Ci0JCQlmcHJpbnRmKHN0ZGVyciwgIkJVRzogVW5rbm93biBzdGF0ZSAo JWQpXG4iLCBZWVNUQVRFKTsKKwkJCXplbmRfaW5pX2Vycm9yKEVfRVJST1IgVFNSTUxTX0ND LCAiVW5rbm93biBzdGF0ZSIpOyAvKiAoJWQpXG4iLCBZWVNUQVRFKTsgKi8KIAkJCWJyZWFr OwogCQl9CiAJCXl5X3BvcF9zdGF0ZShUU1JNTFNfQyk7CkBAIC01MTEsMyArNjk4LDMwIEBA IERPVUJMRV9RVU9URVNfQ0hBUlMgKFteJCJcXF18KCJcXCJ7QU5ZX0MKICNlbmRpZgogCXl5 dGVybWluYXRlKCk7CiB9CisKKyUlCisKK3ZvaWQgemVuZF9pbmlfc2V0X2lnbm9yZShaRU5E X0lOSV9DT05ESVRJT05BTCBzdGF0ZSBUU1JNTFNfREMpIC8qIHt7eyAqLworeworCXN3aXRj aChzdGF0ZSkgeworCQljYXNlIFpFTkRfSU5JX0NPTkRfUkVBRDoKKyNpZiBaRU5EX0RFQlVH X0NGR19QQVJTRVIKKwkJCWZwcmludGYoc3RkZXJyLCAiUkVBRFxuIik7CisjZW5kaWYKKwkJ CUJFR0lOKElOSVRJQUwpOworCQkJYnJlYWs7CisJCWNhc2UgWkVORF9JTklfQ09ORF9JR05P UkU6CisjaWYgWkVORF9ERUJVR19DRkdfUEFSU0VSCisJCQlmcHJpbnRmKHN0ZGVyciwgIklH Tk9SRVxuIik7CisjZW5kaWYKKwkJCUJFR0lOKElHTk9SRSk7CisJCQlicmVhazsKKwkJY2Fz ZSBaRU5EX0lOSV9DT05EX0RPTkU6CisjaWYgWkVORF9ERUJVR19DRkdfUEFSU0VSCisJCQlm cHJpbnRmKHN0ZGVyciwgIklGIERPTkVcbiIpOworI2VuZGlmCisJCQlCRUdJTihJRkRPTkUp OworCQkJYnJlYWs7CisJfQorfQorLyogfX19ICovCg== ------------1151345E3999A063--