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

Signing you up...

Thank you for signing up!

PHP Decode

<?php @eval("?>".base64_decode("PD9waHANCnNlc3Npb25fc3RhcnQoKTsNCmluY2x1ZGVfb25jZSgiaW5jbH..

Decoded Output download

?>b'<?php
session_start();
include_once("include/config.php");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php
include_once("common/head_script.php");

if(empty($usernum))
{
	$api->popup("");
	$api->go("index.php");
}

?>
<link href="style/main.css" rel="stylesheet" type="text/css" />
<style type="text/css">
#apDiv1 {
	position: absolute;
	width: 200px;
	height: 115px;
	z-index: 1;
	left: 1002px;
	top: 290px;
}
#apDiv2 {
	position: absolute;
	width: 116px;
	height: 61px;
	z-index: 2;
}
</style>
<script type="text/javascript">
function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}
function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}
function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
</script>
<script>
function purchase_item(nItemID)
{
    var ask = window.confirm(" ?");
    if (ask) {
		location = "giftshop.php?a=purchase&id="+nItemID+"";
    }
}
</script>
</head>

<body onload="MM_preloadImages(\'images/btn_rollover.gif\',\'images/recharge_on.gif\')"><div id="fb-root"></div>
<script>(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = "//connect.facebook.net/th_TH/sdk.js#xfbml=1&version=v2.10";
  fjs.parentNode.insertBefore(js, fjs);
}(document, \'script\', \'facebook-jssdk\'));</script>
<table width="960" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td colspan="2" valign="bottom"><img src="images/rantime2.gif" width="75" height="160" /></td>
    <td width="131" valign="top" align="center"><div class="time"><?php echo $date; ?></div></td>
    <td width="608" rowspan="2" align="center"><img src="images/RanLogo.png" width="310" height="165" /></td>
    <td width="100" rowspan="2" align="center">&nbsp;</td>
    <td width="35" rowspan="2" align="right" style="background-image:url(images/chain_bg.gif);">&nbsp;</td>
  </tr>
  <tr>
    <td width="24" height="37">&nbsp;</td>
    <td width="62" style="background-image:url(images/chain_bg.gif); background-repeat:no-repeat;">&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td colspan="6" height="50" background="images/gnb_main_bg.gif"><table width="100%" border="0" cellpadding="0" cellspacing="0">
      <tr><?php
	  include_once("common/top_menu.php");
	  ?>
      </tr>
    </table></td>
  </tr>
  <tr>
    <td height="23" colspan="6"><table width="100%" border="0" cellpadding="0" cellspacing="0">
      <tr>
        <td width="14%" height="23" style="background-image:url(images/chain_bg.gif); background-repeat:no-repeat;">&nbsp;</td>
        <td width="14%">&nbsp;</td>
        <td width="14%">&nbsp;</td>
        <td width="27%">&nbsp;</td>
        <td width="9%" style="background-image:url(images/chain_bg.gif); background-repeat:no-repeat;">&nbsp;</td>
        <td width="18%" style="background-image:url(images/chain_bg.gif); background-repeat:no-repeat;">&nbsp;</td>
        <td width="4%" style="background-image:url(images/chain_bg.gif); background-repeat:no-repeat;">&nbsp;</td>
      </tr>
    </table></td>
  </tr>
  <tr>
    <td colspan="6"><table width="100%" border="0" cellpadding="0" cellspacing="0">
      <tr>
        <td width="635" height="230" valign="top" background="images/wire_left.gif"><table height="" width="100%" border="0" cellspacing="0" cellpadding="0">
          <tr>
            <td height="10" colspan="3"></td>
          </tr>
          <tr>
            <td width="1%" height="209">&nbsp;</td>
            <td width="98%">
    <div id="jssor_1" style="position:relative;margin:0 auto;top:0px;left:0px;width:619px;height:212px;overflow:hidden;visibility:hidden;">
        <!-- Loading Screen -->
        <div data-u="loading" class="jssorl-009-spin" style="position:absolute;top:0px;left:0px;width:100%;height:100%;text-align:center;background-color:rgba(0,0,0,0.7);">
            <img style="margin-top:-19px;position:relative;top:50%;width:38px;height:38px;" src="../svg/loading/static-svg/spin.svg" />
        </div>
        <div data-u="slides" style="cursor:default;position:relative;top:0px;left:0px;width:619px;height:212px;overflow:hidden;">
        <?php
		// Slider
		$slider_sql = $sql->prepare("SELECT TOP 6 * FROM slider_tbl ORDER BY id DESC");
		$slider_sql->execute();
		while($slider = $slider_sql->fetch(PDO::FETCH_ASSOC))
		{
            echo \'<div>
                <img data-u="image" src="\'.$slider[\'image_link\'].\'" />
            </div>\';
		}
		?>
            <a data-u="any" href="https://www.jssor.com" style="display:none">slider in bootstrap</a>
        </div>
        <!-- Bullet Navigator -->
        <div data-u="navigator" class="jssorb053" style="position:absolute;bottom:12px;right:12px;" data-autocenter="1" data-scale="0.5" data-scale-bottom="0.75">
            <div data-u="prototype" class="i" style="width:16px;height:16px;">
                <svg viewBox="0 0 16000 16000" style="position:absolute;top:0;left:0;width:100%;height:100%;">
                    <path class="b" d="M11400,13800H4600c-1320,0-2400-1080-2400-2400V4600c0-1320,1080-2400,2400-2400h6800 c1320,0,2400,1080,2400,2400v6800C13800,12720,12720,13800,11400,13800z"></path>
                </svg>
            </div>
        </div>
        <!-- Arrow Navigator -->
        <div data-u="arrowleft" class="jssora093" style="width:50px;height:50px;top:0px;left:30px;" data-autocenter="2" data-scale="0.75" data-scale-left="0.75">
            <svg viewBox="0 0 16000 16000" style="position:absolute;top:0;left:0;width:100%;height:100%;">
                <circle class="c" cx="8000" cy="8000" r="5920"></circle>
                <polyline class="a" points="7777.8,6080 5857.8,8000 7777.8,9920 "></polyline>
                <line class="a" x1="10142.2" y1="8000" x2="5857.8" y2="8000"></line>
            </svg>
        </div>
        <div data-u="arrowright" class="jssora093" style="width:50px;height:50px;top:0px;right:30px;" data-autocenter="2" data-scale="0.75" data-scale-right="0.75">
            <svg viewBox="0 0 16000 16000" style="position:absolute;top:0;left:0;width:100%;height:100%;">
                <circle class="c" cx="8000" cy="8000" r="5920"></circle>
                <polyline class="a" points="8222.2,6080 10142.2,8000 8222.2,9920 "></polyline>
                <line class="a" x1="5857.8" y1="8000" x2="10142.2" y2="8000"></line>
            </svg>
        </div>
    </div>
    <script type="text/javascript">jssor_1_slider_init();</script></td>
            <td width="1%">&nbsp;</td>
          </tr>
          <tr>
            <td height="10" colspan="3"></td>
          </tr>
        </table></td>
        <td background="images/wire_right.gif"><iframe src="https://www.facebook.com/plugins/page.php?href=<?php echo $facebook[\'fanpage_link\']; ?>&tabs&width=315&height=210&small_header=false&adapt_container_width=true&hide_cover=false&show_facepile=true&appId" width="315" height="210" style="border:none;overflow:hidden" scrolling="no" frameborder="0" allowTransparency="true"></iframe></td>
      </tr>
    </table></td>
  </tr>
  <tr>
    <td colspan="6"><table width="100%" border="0" cellpadding="0" cellspacing="0">
      <tr>
        <td width="4%" valign="top"><table width="100%" border="0" cellpadding="0" cellspacing="0">
          <tr>
            <td valign="top"><img src="images/login_title.gif" width="240" height="60" /></td>
          </tr>
          <tr>
            <td><table width="225" border="0" cellpadding="0" cellspacing="0">
              <tr>
                <td height="100" background="images/login_bg.gif">
                <?php
				if(empty($account))
				{
					echo \'
                <form id="loginform" name="loginform" method="post" action="">
                  <table width="100%">
                    <tr>
                      <td width="62%" height="26" align="right"><label for="account"></label>
                        <input class="txt115_login" type="text" name="account" autocomplete="off" id="account" /></td>
                      <td width="38%" rowspan="2"><input class="btn_login" type="submit" name="login" id="login" value=" " /></td>
                    </tr>
                    <tr>
                      <td align="right"><label for="password"></label>
                        <input class="txt115_login" type="password" name="password" id="password" /></td>
                      </tr>
                    <tr>
                      <td colspan="2"><table width="100%">
                        <tr>
                          <td width="45%" align="right"><a href="signup.php"><img src="images/sign_btn.gif" width="70" height="22" /></a></td>
                          <td width="55%"><a href="forgetpass.php"><img src="images/find_btn.gif" width="104" height="22" /></a></td>
                        </tr>
                      </table></td>
                      </tr>
                  </table>
                </form>\';
					if(isset($_POST[\'login\']))
					{
						if(empty($_POST[\'account\']) || empty($_POST[\'password\']))
						{
							$api->popup("");
							$api->go($current);
						}
						else
						{
							$api->login($_POST[\'account\'],$_POST[\'password\']);
						}
					}
				}
                else
				{
					include_once("common/member.php");
				}
				?>
                </td>
              </tr>
            </table></td>
          </tr>
          <tr>
            <td><a href="topup.php" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage(\'Image8\',\'\',\'images/recharge_on.gif\',1)"><img src="images/recharge_off.gif" width="226" height="70" id="Image8" /></a></td>
          </tr>
          <tr>
            <td valign="top"><table width="240" border="0" cellpadding="0" cellspacing="0">
              <tr>
                <td height="50" valign="bottom" background="images/subnav_title.gif"><table width="100%">
                  <tr>
                    <td width="16%" height="24">&nbsp;</td>
                    <td width="84%" valign="middle"><img src="images/item_top_title.gif" width="80" height="15" /></td>
                  </tr>
                </table></td>
              </tr>
              <tr>
                <td>
                <?php
				// Left Menu
				$menu_sql = $sql->prepare("SELECT * FROM left_menu_tbl ORDER BY id ASC");
				$menu_sql->execute();
				while($menu = $menu_sql->fetch(PDO::FETCH_ASSOC))
				{
					echo \'
                <a href="\'.$menu[\'menu_link\'].\'" style="text-decoration:none;"><table border="0" cellpadding="0" cellspacing="0">
  <tr>
    <td height="2"><img src="images/subnav_margin.gif" width="225" height="2" /></td>
  </tr>
  <tr>
    <td class="left_menu" align="center">\'.$menu[\'menu_name\'].\'</td>
  </tr>
                </table></a>\';
				}
				?>
                
                
</td>
              </tr>
  <tr>
    <td width="225" height="80" background="images/subnav_end.gif"></td>
  </tr>
            </table></td>
          </tr>
        </table></td>
        <td width="96%" valign="top"><table width="100%" border="0" cellpadding="0" cellspacing="0">
          <tr></tr>
          <tr>
            <td height="115" background="images/subright_title.png"><table width="100%">
              <tr>
                <td width="8%" height="49" valign="bottom">&nbsp;</td>
                <td width="58%" valign="bottom"><img src="images/content_top_itemshop_1.gif" width="147" height="24" /></td>
                <td width="25%" align="right" valign="bottom"><a href="cart.php" class="cart_link"><strong><font color="#FFFFFF"><img src="images/cart_btn_small.gif" width="18" height="18" />  [ <?php echo $cartcount; ?> ]</font></strong></a></td>
                <td width="9%" valign="bottom">&nbsp;</td>
              </tr>
              <tr>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
                <td colspan="2">&nbsp;</td>
              </tr>
              <tr>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
                <td colspan="2">&nbsp;</td>
              </tr>
            </table></td>
          </tr>
          <tr>
            <td background="images/subright_bg.gif"><table class="animated fadeIn" width="90%" align="center">
              <tr>
                <td width="100%"><table id="down" width="100%" border="0" cellpadding="0" cellspacing="0">
                  <tr>
                    <td><hr class="hr1" /></td>
                  </tr>
                  <tr>
                    <td align="center"><strong></strong></td>
                  </tr>
                  <tr>
                    <td><hr class="hr1" /></td>
                  </tr>
                </table></td>
              </tr>
              <tr>
                <td>&nbsp;</td>
              </tr>
              <tr>
                <td><table width="350" align="center">
                  <tr>
                <td align="center"><strong></strong></td>
                <td align="center"><strong></strong></td>
              </tr>
              <?php 
		$resell_sql = $sql->prepare("SELECT * FROM RanShop.dbo.resell");
		$resell_sql->execute();
		while($resell = $resell_sql->fetch(PDO::FETCH_ASSOC))
		{
			echo \'<tr>
                <td align="center">\'.$resell[\'ItemName\'].\'</td>
                <td align="center">\'.number_format($resell[\'ItemPoint\']).\'</td>
              </tr>\';
		} ?>
        </table></td>
              </tr>
              <tr>
                <td align="center"><form id="repointform" name="repointform" method="post" action="">
                  <table width="100%">
                    <tr>
                    <td align="center"><select name="character" id="character" style="width:200px;">
                      <option value="0"></option>
                      <?php
		// 
		$char_sql = $sql->prepare("SELECT * FROM RanGame1.dbo.ChaInfo WHERE UserNum = :p1");
		$char_sql->BindParam(":p1",$acc[\'UserNum\']);
		$char_sql->execute();
		while($char = $char_sql->fetch(PDO::FETCH_ASSOC))
		{
			echo \'<option value="\'.$char[\'ChaNum\'].\'">\'.$char[\'ChaName\'].\'</option>\';
		}
		?>
                    </select></td>
                  </tr>
                  <tr>
                    <td align="center">
                    <?php
		echo \'<select name="resell_list" id="resell_list" style="width:200px;"><option value="0"></option>\';
		$resell_sql = $sql->prepare("SELECT * FROM RanShop.dbo.resell WHERE ItemShow = :p1");
		$resell_sql->BindParam(":p1",$num0);
		$resell_sql->execute();
		while($resell = $resell_sql->fetch(PDO::FETCH_ASSOC))
		{
			echo \'<option value="\'.$resell[\'Num\'].\'">\'.$resell[\'ItemName\'].\'</option>\';
		}
		
		echo \'</select>\';
		?>
                    </td>
                  </tr>
                  <tr>
                    <td align="center"><input name="getrepoint" type="submit" class="btn_01" id="getrepoint" value="" /></td>
                  </tr>
              </table>
                </form>
                <?php
				if(isset($_POST[\'getrepoint\']))
				{
					if(empty($_POST[\'character\']) || empty($_POST[\'resell_list\']))
					{
						$api->popup("");
					}
					else
					{
						$GetChaNum = $_POST[\'character\'];
						$ItemNum = $_POST[\'resell_list\'];
						$account = $account;
						
						// Get Character
						$char_sql = $sql->prepare("SELECT * FROM RanGame1.dbo.ChaInfo WHERE ChaNum = :p1");
						$char_sql->BindParam(":p1",$GetChaNum);
						$char_sql->execute();
						$char = $char_sql->fetch(PDO::FETCH_ASSOC);
						
						$resell_sql = $sql->prepare("SELECT * FROM RanShop.dbo.resell WHERE ItemShow = :p1 AND Num = :p2");
						$resell_sql->BindParam(":p1",$num0);
						$resell_sql->BindParam(":p2",$ItemNum);
						$resell_sql->execute();		
						$resell = $resell_sql->fetch(PDO::FETCH_ASSOC);
						
						
						$acc_sql = $sql->prepare("EXEC WebAccountInfo :p1");
						$acc_sql->BindParam(":p1",$account);
						$acc_sql->execute();
						$acc = $acc_sql->fetch(PDO::FETCH_ASSOC);
						$point = $acc[\'UserPoint\'];
						$logindate = $acc[\'LastLoginDate\'];
						$lastlogin = strtotime($logindate);
						
						if($lastlogin+300 > time())
						{
							$api->popup(" 5 ");
							exit();
						}
						
						
						
						$item = $api->ItemID($resell[\'ItemMain\'],$resell[\'ItemSub\']);
						$reitem = $api->ItemID(\'4\',\'0\');
									
						$updatepoint = $point+$resell[\'ItemPoint\'];
						$inven_sql = $sql->prepare("SELECT ChaInven FROM RanGame1.dbo.ChaInfo WHERE ChaNum = :p1 AND ChaOnline = :p2");
						$inven_sql->BindParam(":p1",$GetChaNum);
						$inven_sql->BindParam(":p2",$num0);
						$inven_sql->execute();
						$inventory = $inven_sql->fetch(PDO::FETCH_ASSOC);
						if(!$inventory)
						{
							$api->popup("");
							$api->go("repoint.php");
							exit();
						}
						else
						{
							//$api->popup("".$inventory[\'ChaInven\']." // ".$slot0_0."".$item."");
							if(strstr($inventory[\'ChaInven\'],$item))
							{		
								// Log Point
								$log_sql = $sql->prepare("INSERT INTO Log_RePoint(UserName,CharName,ItemMain,ItemSub,Ip_Address,dateadd,timestam) VALUES(:p1,:p2,:p3,:p4,:p5,:p6,:p7)");
								$log_sql->BindParam(":p1",$account);
								$log_sql->BindParam(":p2",$char[\'ChaName\']);
								$log_sql->BindParam(":p3",$resell[\'ItemMain\']);
								$log_sql->BindParam(":p4",$resell[\'ItemSub\']);
								$log_sql->BindParam(":p5",$ip);
								$log_sql->BindParam(":p6",$date);
								$log_sql->BindParam(":p7",time());
								$log_sql->execute();
									
								// Update Item
								$replace = $api->str_replace_first($item,$reitem,$inventory[\'ChaInven\']);
								$update_result = \'0x\'.$replace.\'\';
								$update_sql = $sql->prepare("EXEC WebRepointCMD2 :p1,:p2");
								$update_sql->BindParam(":p1",$GetChaNum);
								$update_sql->BindParam(":p2",$update_result);
								$update_sql->execute();
								if(!$update_sql)
								{
									$api->popup("");
								}
								else
								{
									
									// Update Point
									$point_sql = $sql->prepare("UPDATE RanUser.dbo.UserInfo SET UserPoint = :p1 WHERE UserName = :p2");
									$point_sql->BindParam(":p1",$updatepoint);
									$point_sql->BindParam(":p2",$account);
									$point_sql->execute();
									if(!$point_sql)
									{
										$api->popup("");
									}
									else
									{
										$api->popup("");
										$api->go("repoint.php");
										exit();
									}
								}
							}
							else
							{
								$api->popup(" ".$resell[\'ItemName\']." ");
								exit();
							}
						}
					}
				}
				?>
                </td>
              </tr>
              <tr>
                <td align="center">&nbsp;</td>
              </tr>
              <tr>
                <td align="center"><p><img src="images/help/help_repoint.png" width="239" height="354" /><br />
                  
                </p></td>
              </tr>
              <tr>
                <td align="center">&nbsp;</td>
              </tr>
              <tr>
                <td align="center">&nbsp;</td>
              </tr>
            </table></td>
          </tr>
          <tr>
            <td height="110" background="images/subright_bottom.gif">&nbsp;</td>
          </tr>
          </table></td>
      </tr>
    </table></td>
  </tr>
  <tr>
    <td colspan="6">&nbsp;</td>
  </tr>
  <tr>
    <td colspan="6">&nbsp;</td>
  </tr>
</table>

<p>&nbsp;</p>
<div class="rightTop">
<div id="quick_menu_div"><a href="#"><img src="/images/top_btn.gif" alt/></a></div>
</div><table width="100%" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td align="center"><?php include_once("common/copyright.php"); ?></td>
  </tr>
  <tr>
    <td height="32" align="center">&nbsp;</td>
  </tr>
</table>
</body>
</html>'

Did this file decode correctly?

Original Code

<?php @eval("?>".base64_decode("PD9waHANCnNlc3Npb25fc3RhcnQoKTsNCmluY2x1ZGVfb25jZSgiaW5jbHVkZS9jb25maWcucGhwIik7DQo/Pg0KPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPg0KPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPg0KPGhlYWQ+DQo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgLz4NCjw/cGhwDQppbmNsdWRlX29uY2UoImNvbW1vbi9oZWFkX3NjcmlwdC5waHAiKTsNCg0KaWYoZW1wdHkoJHVzZXJudW0pKQ0Kew0KCSRhcGktPnBvcHVwKCLguIHguKPguLjguJPguLLguKXguYfguK3guIHguK3guLTguJnguYDguILguYnguLLguKrguLnguYjguKPguLDguJrguJrguIHguYjguK3guJnguJfguLPguKPguLLguKLguIHguLLguKMiKTsNCgkkYXBpLT5nbygiaW5kZXgucGhwIik7DQp9DQoNCj8+DQo8bGluayBocmVmPSJzdHlsZS9tYWluLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgLz4NCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQojYXBEaXYxIHsNCglwb3NpdGlvbjogYWJzb2x1dGU7DQoJd2lkdGg6IDIwMHB4Ow0KCWhlaWdodDogMTE1cHg7DQoJei1pbmRleDogMTsNCglsZWZ0OiAxMDAycHg7DQoJdG9wOiAyOTBweDsNCn0NCiNhcERpdjIgew0KCXBvc2l0aW9uOiBhYnNvbHV0ZTsNCgl3aWR0aDogMTE2cHg7DQoJaGVpZ2h0OiA2MXB4Ow0KCXotaW5kZXg6IDI7DQp9DQo8L3N0eWxlPg0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KZnVuY3Rpb24gTU1fcHJlbG9hZEltYWdlcygpIHsgLy92My4wDQogIHZhciBkPWRvY3VtZW50OyBpZihkLmltYWdlcyl7IGlmKCFkLk1NX3ApIGQuTU1fcD1uZXcgQXJyYXkoKTsNCiAgICB2YXIgaSxqPWQuTU1fcC5sZW5ndGgsYT1NTV9wcmVsb2FkSW1hZ2VzLmFyZ3VtZW50czsgZm9yKGk9MDsgaTxhLmxlbmd0aDsgaSsrKQ0KICAgIGlmIChhW2ldLmluZGV4T2YoIiMiKSE9MCl7IGQuTU1fcFtqXT1uZXcgSW1hZ2U7IGQuTU1fcFtqKytdLnNyYz1hW2ldO319DQp9DQpmdW5jdGlvbiBNTV9zd2FwSW1nUmVzdG9yZSgpIHsgLy92My4wDQogIHZhciBpLHgsYT1kb2N1bWVudC5NTV9zcjsgZm9yKGk9MDthJiZpPGEubGVuZ3RoJiYoeD1hW2ldKSYmeC5vU3JjO2krKykgeC5zcmM9eC5vU3JjOw0KfQ0KZnVuY3Rpb24gTU1fZmluZE9iaihuLCBkKSB7IC8vdjQuMDENCiAgdmFyIHAsaSx4OyAgaWYoIWQpIGQ9ZG9jdW1lbnQ7IGlmKChwPW4uaW5kZXhPZigiPyIpKT4wJiZwYXJlbnQuZnJhbWVzLmxlbmd0aCkgew0KICAgIGQ9cGFyZW50LmZyYW1lc1tuLnN1YnN0cmluZyhwKzEpXS5kb2N1bWVudDsgbj1uLnN1YnN0cmluZygwLHApO30NCiAgaWYoISh4PWRbbl0pJiZkLmFsbCkgeD1kLmFsbFtuXTsgZm9yIChpPTA7IXgmJmk8ZC5mb3Jtcy5sZW5ndGg7aSsrKSB4PWQuZm9ybXNbaV1bbl07DQogIGZvcihpPTA7IXgmJmQubGF5ZXJzJiZpPGQubGF5ZXJzLmxlbmd0aDtpKyspIHg9TU1fZmluZE9iaihuLGQubGF5ZXJzW2ldLmRvY3VtZW50KTsNCiAgaWYoIXggJiYgZC5nZXRFbGVtZW50QnlJZCkgeD1kLmdldEVsZW1lbnRCeUlkKG4pOyByZXR1cm4geDsNCn0NCg0KZnVuY3Rpb24gTU1fc3dhcEltYWdlKCkgeyAvL3YzLjANCiAgdmFyIGksaj0wLHgsYT1NTV9zd2FwSW1hZ2UuYXJndW1lbnRzOyBkb2N1bWVudC5NTV9zcj1uZXcgQXJyYXk7IGZvcihpPTA7aTwoYS5sZW5ndGgtMik7aSs9MykNCiAgIGlmICgoeD1NTV9maW5kT2JqKGFbaV0pKSE9bnVsbCl7ZG9jdW1lbnQuTU1fc3JbaisrXT14OyBpZigheC5vU3JjKSB4Lm9TcmM9eC5zcmM7IHguc3JjPWFbaSsyXTt9DQp9DQo8L3NjcmlwdD4NCjxzY3JpcHQ+DQpmdW5jdGlvbiBwdXJjaGFzZV9pdGVtKG5JdGVtSUQpDQp7DQogICAgdmFyIGFzayA9IHdpbmRvdy5jb25maXJtKCLguITguLjguJPguJXguYnguK3guIfguIHguLLguKPguJfguLXguYjguIjguLDguIvguLfguYnguK3guYTguK3guYDguJfguYfguKHguIrguLTguYnguJnguJnguLXguYnguKvguKPguLfguK3guYTguKHguYggPyIpOw0KICAgIGlmIChhc2spIHsNCgkJbG9jYXRpb24gPSAiZ2lmdHNob3AucGhwP2E9cHVyY2hhc2UmaWQ9IituSXRlbUlEKyIiOw0KICAgIH0NCn0NCjwvc2NyaXB0Pg0KPC9oZWFkPg0KDQo8Ym9keSBvbmxvYWQ9Ik1NX3ByZWxvYWRJbWFnZXMoJ2ltYWdlcy9idG5fcm9sbG92ZXIuZ2lmJywnaW1hZ2VzL3JlY2hhcmdlX29uLmdpZicpIj48ZGl2IGlkPSJmYi1yb290Ij48L2Rpdj4NCjxzY3JpcHQ+KGZ1bmN0aW9uKGQsIHMsIGlkKSB7DQogIHZhciBqcywgZmpzID0gZC5nZXRFbGVtZW50c0J5VGFnTmFtZShzKVswXTsNCiAgaWYgKGQuZ2V0RWxlbWVudEJ5SWQoaWQpKSByZXR1cm47DQogIGpzID0gZC5jcmVhdGVFbGVtZW50KHMpOyBqcy5pZCA9IGlkOw0KICBqcy5zcmMgPSAiLy9jb25uZWN0LmZhY2Vib29rLm5ldC90aF9USC9zZGsuanMjeGZibWw9MSZ2ZXJzaW9uPXYyLjEwIjsNCiAgZmpzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGpzLCBmanMpOw0KfShkb2N1bWVudCwgJ3NjcmlwdCcsICdmYWNlYm9vay1qc3NkaycpKTs8L3NjcmlwdD4NCjx0YWJsZSB3aWR0aD0iOTYwIiBib3JkZXI9IjAiIGFsaWduPSJjZW50ZXIiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+DQogIDx0cj4NCiAgICA8dGQgY29sc3Bhbj0iMiIgdmFsaWduPSJib3R0b20iPjxpbWcgc3JjPSJpbWFnZXMvcmFudGltZTIuZ2lmIiB3aWR0aD0iNzUiIGhlaWdodD0iMTYwIiAvPjwvdGQ+DQogICAgPHRkIHdpZHRoPSIxMzEiIHZhbGlnbj0idG9wIiBhbGlnbj0iY2VudGVyIj48ZGl2IGNsYXNzPSJ0aW1lIj48P3BocCBlY2hvICRkYXRlOyA/PjwvZGl2PjwvdGQ+DQogICAgPHRkIHdpZHRoPSI2MDgiIHJvd3NwYW49IjIiIGFsaWduPSJjZW50ZXIiPjxpbWcgc3JjPSJpbWFnZXMvUmFuTG9nby5wbmciIHdpZHRoPSIzMTAiIGhlaWdodD0iMTY1IiAvPjwvdGQ+DQogICAgPHRkIHdpZHRoPSIxMDAiIHJvd3NwYW49IjIiIGFsaWduPSJjZW50ZXIiPiZuYnNwOzwvdGQ+DQogICAgPHRkIHdpZHRoPSIzNSIgcm93c3Bhbj0iMiIgYWxpZ249InJpZ2h0IiBzdHlsZT0iYmFja2dyb3VuZC1pbWFnZTp1cmwoaW1hZ2VzL2NoYWluX2JnLmdpZik7Ij4mbmJzcDs8L3RkPg0KICA8L3RyPg0KICA8dHI+DQogICAgPHRkIHdpZHRoPSIyNCIgaGVpZ2h0PSIzNyI+Jm5ic3A7PC90ZD4NCiAgICA8dGQgd2lkdGg9IjYyIiBzdHlsZT0iYmFja2dyb3VuZC1pbWFnZTp1cmwoaW1hZ2VzL2NoYWluX2JnLmdpZik7IGJhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDsiPiZuYnNwOzwvdGQ+DQogICAgPHRkPiZuYnNwOzwvdGQ+DQogIDwvdHI+DQogIDx0cj4NCiAgICA8dGQgY29sc3Bhbj0iNiIgaGVpZ2h0PSI1MCIgYmFja2dyb3VuZD0iaW1hZ2VzL2duYl9tYWluX2JnLmdpZiI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+DQogICAgICA8dHI+PD9waHANCgkgIGluY2x1ZGVfb25jZSgiY29tbW9uL3RvcF9tZW51LnBocCIpOw0KCSAgPz4NCiAgICAgIDwvdHI+DQogICAgPC90YWJsZT48L3RkPg0KICA8L3RyPg0KICA8dHI+DQogICAgPHRkIGhlaWdodD0iMjMiIGNvbHNwYW49IjYiPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPg0KICAgICAgPHRyPg0KICAgICAgICA8dGQgd2lkdGg9IjE0JSIgaGVpZ2h0PSIyMyIgc3R5bGU9ImJhY2tncm91bmQtaW1hZ2U6dXJsKGltYWdlcy9jaGFpbl9iZy5naWYpOyBiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7Ij4mbmJzcDs8L3RkPg0KICAgICAgICA8dGQgd2lkdGg9IjE0JSI+Jm5ic3A7PC90ZD4NCiAgICAgICAgPHRkIHdpZHRoPSIxNCUiPiZuYnNwOzwvdGQ+DQogICAgICAgIDx0ZCB3aWR0aD0iMjclIj4mbmJzcDs8L3RkPg0KICAgICAgICA8dGQgd2lkdGg9IjklIiBzdHlsZT0iYmFja2dyb3VuZC1pbWFnZTp1cmwoaW1hZ2VzL2NoYWluX2JnLmdpZik7IGJhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDsiPiZuYnNwOzwvdGQ+DQogICAgICAgIDx0ZCB3aWR0aD0iMTglIiBzdHlsZT0iYmFja2dyb3VuZC1pbWFnZTp1cmwoaW1hZ2VzL2NoYWluX2JnLmdpZik7IGJhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDsiPiZuYnNwOzwvdGQ+DQogICAgICAgIDx0ZCB3aWR0aD0iNCUiIHN0eWxlPSJiYWNrZ3JvdW5kLWltYWdlOnVybChpbWFnZXMvY2hhaW5fYmcuZ2lmKTsgYmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0OyI+Jm5ic3A7PC90ZD4NCiAgICAgIDwvdHI+DQogICAgPC90YWJsZT48L3RkPg0KICA8L3RyPg0KICA8dHI+DQogICAgPHRkIGNvbHNwYW49IjYiPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPg0KICAgICAgPHRyPg0KICAgICAgICA8dGQgd2lkdGg9IjYzNSIgaGVpZ2h0PSIyMzAiIHZhbGlnbj0idG9wIiBiYWNrZ3JvdW5kPSJpbWFnZXMvd2lyZV9sZWZ0LmdpZiI+PHRhYmxlIGhlaWdodD0iIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiPg0KICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgIDx0ZCBoZWlnaHQ9IjEwIiBjb2xzcGFuPSIzIj48L3RkPg0KICAgICAgICAgIDwvdHI+DQogICAgICAgICAgPHRyPg0KICAgICAgICAgICAgPHRkIHdpZHRoPSIxJSIgaGVpZ2h0PSIyMDkiPiZuYnNwOzwvdGQ+DQogICAgICAgICAgICA8dGQgd2lkdGg9Ijk4JSI+DQogICAgPGRpdiBpZD0ianNzb3JfMSIgc3R5bGU9InBvc2l0aW9uOnJlbGF0aXZlO21hcmdpbjowIGF1dG87dG9wOjBweDtsZWZ0OjBweDt3aWR0aDo2MTlweDtoZWlnaHQ6MjEycHg7b3ZlcmZsb3c6aGlkZGVuO3Zpc2liaWxpdHk6aGlkZGVuOyI+DQogICAgICAgIDwhLS0gTG9hZGluZyBTY3JlZW4gLS0+DQogICAgICAgIDxkaXYgZGF0YS11PSJsb2FkaW5nIiBjbGFzcz0ianNzb3JsLTAwOS1zcGluIiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7dG9wOjBweDtsZWZ0OjBweDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3RleHQtYWxpZ246Y2VudGVyO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwLjcpOyI+DQogICAgICAgICAgICA8aW1nIHN0eWxlPSJtYXJnaW4tdG9wOi0xOXB4O3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDo1MCU7d2lkdGg6MzhweDtoZWlnaHQ6MzhweDsiIHNyYz0iLi4vc3ZnL2xvYWRpbmcvc3RhdGljLXN2Zy9zcGluLnN2ZyIgLz4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxkaXYgZGF0YS11PSJzbGlkZXMiIHN0eWxlPSJjdXJzb3I6ZGVmYXVsdDtwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6MHB4O2xlZnQ6MHB4O3dpZHRoOjYxOXB4O2hlaWdodDoyMTJweDtvdmVyZmxvdzpoaWRkZW47Ij4NCiAgICAgICAgPD9waHANCgkJLy8gU2xpZGVyDQoJCSRzbGlkZXJfc3FsID0gJHNxbC0+cHJlcGFyZSgiU0VMRUNUIFRPUCA2ICogRlJPTSBzbGlkZXJfdGJsIE9SREVSIEJZIGlkIERFU0MiKTsNCgkJJHNsaWRlcl9zcWwtPmV4ZWN1dGUoKTsNCgkJd2hpbGUoJHNsaWRlciA9ICRzbGlkZXJfc3FsLT5mZXRjaChQRE86OkZFVENIX0FTU09DKSkNCgkJew0KICAgICAgICAgICAgZWNobyAnPGRpdj4NCiAgICAgICAgICAgICAgICA8aW1nIGRhdGEtdT0iaW1hZ2UiIHNyYz0iJy4kc2xpZGVyWydpbWFnZV9saW5rJ10uJyIgLz4NCiAgICAgICAgICAgIDwvZGl2Pic7DQoJCX0NCgkJPz4NCiAgICAgICAgICAgIDxhIGRhdGEtdT0iYW55IiBocmVmPSJodHRwczovL3d3dy5qc3Nvci5jb20iIHN0eWxlPSJkaXNwbGF5Om5vbmUiPnNsaWRlciBpbiBib290c3RyYXA8L2E+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8IS0tIEJ1bGxldCBOYXZpZ2F0b3IgLS0+DQogICAgICAgIDxkaXYgZGF0YS11PSJuYXZpZ2F0b3IiIGNsYXNzPSJqc3NvcmIwNTMiIHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MTJweDtyaWdodDoxMnB4OyIgZGF0YS1hdXRvY2VudGVyPSIxIiBkYXRhLXNjYWxlPSIwLjUiIGRhdGEtc2NhbGUtYm90dG9tPSIwLjc1Ij4NCiAgICAgICAgICAgIDxkaXYgZGF0YS11PSJwcm90b3R5cGUiIGNsYXNzPSJpIiBzdHlsZT0id2lkdGg6MTZweDtoZWlnaHQ6MTZweDsiPg0KICAgICAgICAgICAgICAgIDxzdmcgdmlld0JveD0iMCAwIDE2MDAwIDE2MDAwIiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7Ij4NCiAgICAgICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImIiIGQ9Ik0xMTQwMCwxMzgwMEg0NjAwYy0xMzIwLDAtMjQwMC0xMDgwLTI0MDAtMjQwMFY0NjAwYzAtMTMyMCwxMDgwLTI0MDAsMjQwMC0yNDAwaDY4MDAgYzEzMjAsMCwyNDAwLDEwODAsMjQwMCwyNDAwdjY4MDBDMTM4MDAsMTI3MjAsMTI3MjAsMTM4MDAsMTE0MDAsMTM4MDB6Ij48L3BhdGg+DQogICAgICAgICAgICAgICAgPC9zdmc+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDwhLS0gQXJyb3cgTmF2aWdhdG9yIC0tPg0KICAgICAgICA8ZGl2IGRhdGEtdT0iYXJyb3dsZWZ0IiBjbGFzcz0ianNzb3JhMDkzIiBzdHlsZT0id2lkdGg6NTBweDtoZWlnaHQ6NTBweDt0b3A6MHB4O2xlZnQ6MzBweDsiIGRhdGEtYXV0b2NlbnRlcj0iMiIgZGF0YS1zY2FsZT0iMC43NSIgZGF0YS1zY2FsZS1sZWZ0PSIwLjc1Ij4NCiAgICAgICAgICAgIDxzdmcgdmlld0JveD0iMCAwIDE2MDAwIDE2MDAwIiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7Ij4NCiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjIiBjeD0iODAwMCIgY3k9IjgwMDAiIHI9IjU5MjAiPjwvY2lyY2xlPg0KICAgICAgICAgICAgICAgIDxwb2x5bGluZSBjbGFzcz0iYSIgcG9pbnRzPSI3Nzc3LjgsNjA4MCA1ODU3LjgsODAwMCA3Nzc3LjgsOTkyMCAiPjwvcG9seWxpbmU+DQogICAgICAgICAgICAgICAgPGxpbmUgY2xhc3M9ImEiIHgxPSIxMDE0Mi4yIiB5MT0iODAwMCIgeDI9IjU4NTcuOCIgeTI9IjgwMDAiPjwvbGluZT4NCiAgICAgICAgICAgIDwvc3ZnPg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGRpdiBkYXRhLXU9ImFycm93cmlnaHQiIGNsYXNzPSJqc3NvcmEwOTMiIHN0eWxlPSJ3aWR0aDo1MHB4O2hlaWdodDo1MHB4O3RvcDowcHg7cmlnaHQ6MzBweDsiIGRhdGEtYXV0b2NlbnRlcj0iMiIgZGF0YS1zY2FsZT0iMC43NSIgZGF0YS1zY2FsZS1yaWdodD0iMC43NSI+DQogICAgICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAxNjAwMCAxNjAwMCIgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlOyI+DQogICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iYyIgY3g9IjgwMDAiIGN5PSI4MDAwIiByPSI1OTIwIj48L2NpcmNsZT4NCiAgICAgICAgICAgICAgICA8cG9seWxpbmUgY2xhc3M9ImEiIHBvaW50cz0iODIyMi4yLDYwODAgMTAxNDIuMiw4MDAwIDgyMjIuMiw5OTIwICI+PC9wb2x5bGluZT4NCiAgICAgICAgICAgICAgICA8bGluZSBjbGFzcz0iYSIgeDE9IjU4NTcuOCIgeTE9IjgwMDAiIHgyPSIxMDE0Mi4yIiB5Mj0iODAwMCI+PC9saW5lPg0KICAgICAgICAgICAgPC9zdmc+DQogICAgICAgIDwvZGl2Pg0KICAgIDwvZGl2Pg0KICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij5qc3Nvcl8xX3NsaWRlcl9pbml0KCk7PC9zY3JpcHQ+PC90ZD4NCiAgICAgICAgICAgIDx0ZCB3aWR0aD0iMSUiPiZuYnNwOzwvdGQ+DQogICAgICAgICAgPC90cj4NCiAgICAgICAgICA8dHI+DQogICAgICAgICAgICA8dGQgaGVpZ2h0PSIxMCIgY29sc3Bhbj0iMyI+PC90ZD4NCiAgICAgICAgICA8L3RyPg0KICAgICAgICA8L3RhYmxlPjwvdGQ+DQogICAgICAgIDx0ZCBiYWNrZ3JvdW5kPSJpbWFnZXMvd2lyZV9yaWdodC5naWYiPjxpZnJhbWUgc3JjPSJodHRwczovL3d3dy5mYWNlYm9vay5jb20vcGx1Z2lucy9wYWdlLnBocD9ocmVmPTw/cGhwIGVjaG8gJGZhY2Vib29rWydmYW5wYWdlX2xpbmsnXTsgPz4mdGFicyZ3aWR0aD0zMTUmaGVpZ2h0PTIxMCZzbWFsbF9oZWFkZXI9ZmFsc2UmYWRhcHRfY29udGFpbmVyX3dpZHRoPXRydWUmaGlkZV9jb3Zlcj1mYWxzZSZzaG93X2ZhY2VwaWxlPXRydWUmYXBwSWQiIHdpZHRoPSIzMTUiIGhlaWdodD0iMjEwIiBzdHlsZT0iYm9yZGVyOm5vbmU7b3ZlcmZsb3c6aGlkZGVuIiBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0iMCIgYWxsb3dUcmFuc3BhcmVuY3k9InRydWUiPjwvaWZyYW1lPjwvdGQ+DQogICAgICA8L3RyPg0KICAgIDwvdGFibGU+PC90ZD4NCiAgPC90cj4NCiAgPHRyPg0KICAgIDx0ZCBjb2xzcGFuPSI2Ij48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4NCiAgICAgIDx0cj4NCiAgICAgICAgPHRkIHdpZHRoPSI0JSIgdmFsaWduPSJ0b3AiPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPg0KICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgIDx0ZCB2YWxpZ249InRvcCI+PGltZyBzcmM9ImltYWdlcy9sb2dpbl90aXRsZS5naWYiIHdpZHRoPSIyNDAiIGhlaWdodD0iNjAiIC8+PC90ZD4NCiAgICAgICAgICA8L3RyPg0KICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgIDx0ZD48dGFibGUgd2lkdGg9IjIyNSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPg0KICAgICAgICAgICAgICA8dHI+DQogICAgICAgICAgICAgICAgPHRkIGhlaWdodD0iMTAwIiBiYWNrZ3JvdW5kPSJpbWFnZXMvbG9naW5fYmcuZ2lmIj4NCiAgICAgICAgICAgICAgICA8P3BocA0KCQkJCWlmKGVtcHR5KCRhY2NvdW50KSkNCgkJCQl7DQoJCQkJCWVjaG8gJw0KICAgICAgICAgICAgICAgIDxmb3JtIGlkPSJsb2dpbmZvcm0iIG5hbWU9ImxvZ2luZm9ybSIgbWV0aG9kPSJwb3N0IiBhY3Rpb249IiI+DQogICAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9IjEwMCUiPg0KICAgICAgICAgICAgICAgICAgICA8dHI+DQogICAgICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSI2MiUiIGhlaWdodD0iMjYiIGFsaWduPSJyaWdodCI+PGxhYmVsIGZvcj0iYWNjb3VudCI+PC9sYWJlbD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0idHh0MTE1X2xvZ2luIiB0eXBlPSJ0ZXh0IiBuYW1lPSJhY2NvdW50IiBhdXRvY29tcGxldGU9Im9mZiIgaWQ9ImFjY291bnQiIC8+PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjM4JSIgcm93c3Bhbj0iMiI+PGlucHV0IGNsYXNzPSJidG5fbG9naW4iIHR5cGU9InN1Ym1pdCIgbmFtZT0ibG9naW4iIGlkPSJsb2dpbiIgdmFsdWU9IiAiIC8+PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgICAgICAgIDx0ZCBhbGlnbj0icmlnaHQiPjxsYWJlbCBmb3I9InBhc3N3b3JkIj48L2xhYmVsPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJ0eHQxMTVfbG9naW4iIHR5cGU9InBhc3N3b3JkIiBuYW1lPSJwYXNzd29yZCIgaWQ9InBhc3N3b3JkIiAvPjwvdGQ+DQogICAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj48dGFibGUgd2lkdGg9IjEwMCUiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjQ1JSIgYWxpZ249InJpZ2h0Ij48YSBocmVmPSJzaWdudXAucGhwIj48aW1nIHNyYz0iaW1hZ2VzL3NpZ25fYnRuLmdpZiIgd2lkdGg9IjcwIiBoZWlnaHQ9IjIyIiAvPjwvYT48L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjU1JSI+PGEgaHJlZj0iZm9yZ2V0cGFzcy5waHAiPjxpbWcgc3JjPSJpbWFnZXMvZmluZF9idG4uZ2lmIiB3aWR0aD0iMTA0IiBoZWlnaHQ9IjIyIiAvPjwvYT48L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPjwvdGQ+DQogICAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgIDwvdGFibGU+DQogICAgICAgICAgICAgICAgPC9mb3JtPic7DQoJCQkJCWlmKGlzc2V0KCRfUE9TVFsnbG9naW4nXSkpDQoJCQkJCXsNCgkJCQkJCWlmKGVtcHR5KCRfUE9TVFsnYWNjb3VudCddKSB8fCBlbXB0eSgkX1BPU1RbJ3Bhc3N3b3JkJ10pKQ0KCQkJCQkJew0KCQkJCQkJCSRhcGktPnBvcHVwKCLguIHguKPguLjguJPguLLguIHguKPguK3guIHguILguYnguK3guKHguLnguKXguYPguKvguYnguITguKPguJrguJfguLjguIHguIrguYjguK3guIfguITguYjguLAiKTsNCgkJCQkJCQkkYXBpLT5nbygkY3VycmVudCk7DQoJCQkJCQl9DQoJCQkJCQllbHNlDQoJCQkJCQl7DQoJCQkJCQkJJGFwaS0+bG9naW4oJF9QT1NUWydhY2NvdW50J10sJF9QT1NUWydwYXNzd29yZCddKTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCiAgICAgICAgICAgICAgICBlbHNlDQoJCQkJew0KCQkJCQlpbmNsdWRlX29uY2UoImNvbW1vbi9tZW1iZXIucGhwIik7DQoJCQkJfQ0KCQkJCT8+DQogICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgIDwvdGFibGU+PC90ZD4NCiAgICAgICAgICA8L3RyPg0KICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgIDx0ZD48YSBocmVmPSJ0b3B1cC5waHAiIG9ubW91c2VvdXQ9Ik1NX3N3YXBJbWdSZXN0b3JlKCkiIG9ubW91c2VvdmVyPSJNTV9zd2FwSW1hZ2UoJ0ltYWdlOCcsJycsJ2ltYWdlcy9yZWNoYXJnZV9vbi5naWYnLDEpIj48aW1nIHNyYz0iaW1hZ2VzL3JlY2hhcmdlX29mZi5naWYiIHdpZHRoPSIyMjYiIGhlaWdodD0iNzAiIGlkPSJJbWFnZTgiIC8+PC9hPjwvdGQ+DQogICAgICAgICAgPC90cj4NCiAgICAgICAgICA8dHI+DQogICAgICAgICAgICA8dGQgdmFsaWduPSJ0b3AiPjx0YWJsZSB3aWR0aD0iMjQwIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+DQogICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PSI1MCIgdmFsaWduPSJib3R0b20iIGJhY2tncm91bmQ9ImltYWdlcy9zdWJuYXZfdGl0bGUuZ2lmIj48dGFibGUgd2lkdGg9IjEwMCUiPg0KICAgICAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjE2JSIgaGVpZ2h0PSIyNCI+Jm5ic3A7PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSI4NCUiIHZhbGlnbj0ibWlkZGxlIj48aW1nIHNyYz0iaW1hZ2VzL2l0ZW1fdG9wX3RpdGxlLmdpZiIgd2lkdGg9IjgwIiBoZWlnaHQ9IjE1IiAvPjwvdGQ+DQogICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgIDwvdGFibGU+PC90ZD4NCiAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgIDx0ZD4NCiAgICAgICAgICAgICAgICA8P3BocA0KCQkJCS8vIExlZnQgTWVudQ0KCQkJCSRtZW51X3NxbCA9ICRzcWwtPnByZXBhcmUoIlNFTEVDVCAqIEZST00gbGVmdF9tZW51X3RibCBPUkRFUiBCWSBpZCBBU0MiKTsNCgkJCQkkbWVudV9zcWwtPmV4ZWN1dGUoKTsNCgkJCQl3aGlsZSgkbWVudSA9ICRtZW51X3NxbC0+ZmV0Y2goUERPOjpGRVRDSF9BU1NPQykpDQoJCQkJew0KCQkJCQllY2hvICcNCiAgICAgICAgICAgICAgICA8YSBocmVmPSInLiRtZW51WydtZW51X2xpbmsnXS4nIiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOm5vbmU7Ij48dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPg0KICA8dHI+DQogICAgPHRkIGhlaWdodD0iMiI+PGltZyBzcmM9ImltYWdlcy9zdWJuYXZfbWFyZ2luLmdpZiIgd2lkdGg9IjIyNSIgaGVpZ2h0PSIyIiAvPjwvdGQ+DQogIDwvdHI+DQogIDx0cj4NCiAgICA8dGQgY2xhc3M9ImxlZnRfbWVudSIgYWxpZ249ImNlbnRlciI+Jy4kbWVudVsnbWVudV9uYW1lJ10uJzwvdGQ+DQogIDwvdHI+DQogICAgICAgICAgICAgICAgPC90YWJsZT48L2E+JzsNCgkJCQl9DQoJCQkJPz4NCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICANCjwvdGQ+DQogICAgICAgICAgICAgIDwvdHI+DQogIDx0cj4NCiAgICA8dGQgd2lkdGg9IjIyNSIgaGVpZ2h0PSI4MCIgYmFja2dyb3VuZD0iaW1hZ2VzL3N1Ym5hdl9lbmQuZ2lmIj48L3RkPg0KICA8L3RyPg0KICAgICAgICAgICAgPC90YWJsZT48L3RkPg0KICAgICAgICAgIDwvdHI+DQogICAgICAgIDwvdGFibGU+PC90ZD4NCiAgICAgICAgPHRkIHdpZHRoPSI5NiUiIHZhbGlnbj0idG9wIj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4NCiAgICAgICAgICA8dHI+PC90cj4NCiAgICAgICAgICA8dHI+DQogICAgICAgICAgICA8dGQgaGVpZ2h0PSIxMTUiIGJhY2tncm91bmQ9ImltYWdlcy9zdWJyaWdodF90aXRsZS5wbmciPjx0YWJsZSB3aWR0aD0iMTAwJSI+DQogICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjglIiBoZWlnaHQ9IjQ5IiB2YWxpZ249ImJvdHRvbSI+Jm5ic3A7PC90ZD4NCiAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjU4JSIgdmFsaWduPSJib3R0b20iPjxpbWcgc3JjPSJpbWFnZXMvY29udGVudF90b3BfaXRlbXNob3BfMS5naWYiIHdpZHRoPSIxNDciIGhlaWdodD0iMjQiIC8+PC90ZD4NCiAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjI1JSIgYWxpZ249InJpZ2h0IiB2YWxpZ249ImJvdHRvbSI+PGEgaHJlZj0iY2FydC5waHAiIGNsYXNzPSJjYXJ0X2xpbmsiPjxzdHJvbmc+PGZvbnQgY29sb3I9IiNGRkZGRkYiPjxpbWcgc3JjPSJpbWFnZXMvY2FydF9idG5fc21hbGwuZ2lmIiB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIC8+IOC4leC4sOC4geC4o+C5ieC4suC4quC4tOC4meC4hOC5ieC4siBbIDw/cGhwIGVjaG8gJGNhcnRjb3VudDsgPz4gXTwvZm9udD48L3N0cm9uZz48L2E+PC90ZD4NCiAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjklIiB2YWxpZ249ImJvdHRvbSI+Jm5ic3A7PC90ZD4NCiAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPg0KICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPg0KICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4mbmJzcDs8L3RkPg0KICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICA8dHI+DQogICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+DQogICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+DQogICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPiZuYnNwOzwvdGQ+DQogICAgICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICA8L3RhYmxlPjwvdGQ+DQogICAgICAgICAgPC90cj4NCiAgICAgICAgICA8dHI+DQogICAgICAgICAgICA8dGQgYmFja2dyb3VuZD0iaW1hZ2VzL3N1YnJpZ2h0X2JnLmdpZiI+PHRhYmxlIGNsYXNzPSJhbmltYXRlZCBmYWRlSW4iIHdpZHRoPSI5MCUiIGFsaWduPSJjZW50ZXIiPg0KICAgICAgICAgICAgICA8dHI+DQogICAgICAgICAgICAgICAgPHRkIHdpZHRoPSIxMDAlIj48dGFibGUgaWQ9ImRvd24iIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+DQogICAgICAgICAgICAgICAgICA8dHI+DQogICAgICAgICAgICAgICAgICAgIDx0ZD48aHIgY2xhc3M9ImhyMSIgLz48L3RkPg0KICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgPHRkIGFsaWduPSJjZW50ZXIiPjxzdHJvbmc+4LiE4Li34LiZ4Lie4LmJ4Lit4LiiPC9zdHJvbmc+PC90ZD4NCiAgICAgICAgICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICAgICAgICA8dHI+DQogICAgICAgICAgICAgICAgICAgIDx0ZD48aHIgY2xhc3M9ImhyMSIgLz48L3RkPg0KICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICA8L3RhYmxlPjwvdGQ+DQogICAgICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4NCiAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgIDx0ZD48dGFibGUgd2lkdGg9IjM1MCIgYWxpZ249ImNlbnRlciI+DQogICAgICAgICAgICAgICAgICA8dHI+DQogICAgICAgICAgICAgICAgPHRkIGFsaWduPSJjZW50ZXIiPjxzdHJvbmc+4LiK4Li34LmI4Lit4LmE4Lit4LmA4LiX4LmH4LihPC9zdHJvbmc+PC90ZD4NCiAgICAgICAgICAgICAgICA8dGQgYWxpZ249ImNlbnRlciI+PHN0cm9uZz7guIjguLPguJnguKfguJnguJ7guYnguK3guKLguJfguLXguYjguYTguJTguYnguKPguLHguJo8L3N0cm9uZz48L3RkPg0KICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICA8P3BocCANCgkJJHJlc2VsbF9zcWwgPSAkc3FsLT5wcmVwYXJlKCJTRUxFQ1QgKiBGUk9NIFJhblNob3AuZGJvLnJlc2VsbCIpOw0KCQkkcmVzZWxsX3NxbC0+ZXhlY3V0ZSgpOw0KCQl3aGlsZSgkcmVzZWxsID0gJHJlc2VsbF9zcWwtPmZldGNoKFBETzo6RkVUQ0hfQVNTT0MpKQ0KCQl7DQoJCQllY2hvICc8dHI+DQogICAgICAgICAgICAgICAgPHRkIGFsaWduPSJjZW50ZXIiPicuJHJlc2VsbFsnSXRlbU5hbWUnXS4nPC90ZD4NCiAgICAgICAgICAgICAgICA8dGQgYWxpZ249ImNlbnRlciI+Jy5udW1iZXJfZm9ybWF0KCRyZXNlbGxbJ0l0ZW1Qb2ludCddKS4nPC90ZD4NCiAgICAgICAgICAgICAgPC90cj4nOw0KCQl9ID8+DQogICAgICAgIDwvdGFibGU+PC90ZD4NCiAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIj48Zm9ybSBpZD0icmVwb2ludGZvcm0iIG5hbWU9InJlcG9pbnRmb3JtIiBtZXRob2Q9InBvc3QiIGFjdGlvbj0iIj4NCiAgICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iMTAwJSI+DQogICAgICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgPHRkIGFsaWduPSJjZW50ZXIiPjxzZWxlY3QgbmFtZT0iY2hhcmFjdGVyIiBpZD0iY2hhcmFjdGVyIiBzdHlsZT0id2lkdGg6MjAwcHg7Ij4NCiAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIwIj7guIHguKPguLjguJPguLLguYDguKXguLfguK3guIHguJXguLHguKfguKXguLDguITguKM8L29wdGlvbj4NCiAgICAgICAgICAgICAgICAgICAgICA8P3BocA0KCQkvLyDguJXguLHguKfguKXguLDguITguKMNCgkJJGNoYXJfc3FsID0gJHNxbC0+cHJlcGFyZSgiU0VMRUNUICogRlJPTSBSYW5HYW1lMS5kYm8uQ2hhSW5mbyBXSEVSRSBVc2VyTnVtID0gOnAxIik7DQoJCSRjaGFyX3NxbC0+QmluZFBhcmFtKCI6cDEiLCRhY2NbJ1VzZXJOdW0nXSk7DQoJCSRjaGFyX3NxbC0+ZXhlY3V0ZSgpOw0KCQl3aGlsZSgkY2hhciA9ICRjaGFyX3NxbC0+ZmV0Y2goUERPOjpGRVRDSF9BU1NPQykpDQoJCXsNCgkJCWVjaG8gJzxvcHRpb24gdmFsdWU9IicuJGNoYXJbJ0NoYU51bSddLiciPicuJGNoYXJbJ0NoYU5hbWUnXS4nPC9vcHRpb24+JzsNCgkJfQ0KCQk/Pg0KICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD48L3RkPg0KICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgPHRkIGFsaWduPSJjZW50ZXIiPg0KICAgICAgICAgICAgICAgICAgICA8P3BocA0KCQllY2hvICc8c2VsZWN0IG5hbWU9InJlc2VsbF9saXN0IiBpZD0icmVzZWxsX2xpc3QiIHN0eWxlPSJ3aWR0aDoyMDBweDsiPjxvcHRpb24gdmFsdWU9IjAiPuC4geC4o+C4uOC4k+C4suC5gOC4peC4t+C4reC4geC5hOC4reC5gOC4l+C5h+C4oTwvb3B0aW9uPic7DQoJCSRyZXNlbGxfc3FsID0gJHNxbC0+cHJlcGFyZSgiU0VMRUNUICogRlJPTSBSYW5TaG9wLmRiby5yZXNlbGwgV0hFUkUgSXRlbVNob3cgPSA6cDEiKTsNCgkJJHJlc2VsbF9zcWwtPkJpbmRQYXJhbSgiOnAxIiwkbnVtMCk7DQoJCSRyZXNlbGxfc3FsLT5leGVjdXRlKCk7DQoJCXdoaWxlKCRyZXNlbGwgPSAkcmVzZWxsX3NxbC0+ZmV0Y2goUERPOjpGRVRDSF9BU1NPQykpDQoJCXsNCgkJCWVjaG8gJzxvcHRpb24gdmFsdWU9IicuJHJlc2VsbFsnTnVtJ10uJyI+Jy4kcmVzZWxsWydJdGVtTmFtZSddLic8L29wdGlvbj4nOw0KCQl9DQoJCQ0KCQllY2hvICc8L3NlbGVjdD4nOw0KCQk/Pg0KICAgICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgPHRkIGFsaWduPSJjZW50ZXIiPjxpbnB1dCBuYW1lPSJnZXRyZXBvaW50IiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJidG5fMDEiIGlkPSJnZXRyZXBvaW50IiB2YWx1ZT0i4LiE4Li34LiZ4Lie4LmJ4Lit4LiiIiAvPjwvdGQ+DQogICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICA8L3RhYmxlPg0KICAgICAgICAgICAgICAgIDwvZm9ybT4NCiAgICAgICAgICAgICAgICA8P3BocA0KCQkJCWlmKGlzc2V0KCRfUE9TVFsnZ2V0cmVwb2ludCddKSkNCgkJCQl7DQoJCQkJCWlmKGVtcHR5KCRfUE9TVFsnY2hhcmFjdGVyJ10pIHx8IGVtcHR5KCRfUE9TVFsncmVzZWxsX2xpc3QnXSkpDQoJCQkJCXsNCgkJCQkJCSRhcGktPnBvcHVwKCLguIHguKPguLjguJPguLLguYDguKXguLfguK3guIHguJXguLHguKfguKXguLDguITguKPguYHguKXguLDguYTguK3guYDguJfguYfguKHguJTguYnguKfguKLguITguYjguLAiKTsNCgkJCQkJfQ0KCQkJCQllbHNlDQoJCQkJCXsNCgkJCQkJCSRHZXRDaGFOdW0gPSAkX1BPU1RbJ2NoYXJhY3RlciddOw0KCQkJCQkJJEl0ZW1OdW0gPSAkX1BPU1RbJ3Jlc2VsbF9saXN0J107DQoJCQkJCQkkYWNjb3VudCA9ICRhY2NvdW50Ow0KCQkJCQkJDQoJCQkJCQkvLyBHZXQgQ2hhcmFjdGVyDQoJCQkJCQkkY2hhcl9zcWwgPSAkc3FsLT5wcmVwYXJlKCJTRUxFQ1QgKiBGUk9NIFJhbkdhbWUxLmRiby5DaGFJbmZvIFdIRVJFIENoYU51bSA9IDpwMSIpOw0KCQkJCQkJJGNoYXJfc3FsLT5CaW5kUGFyYW0oIjpwMSIsJEdldENoYU51bSk7DQoJCQkJCQkkY2hhcl9zcWwtPmV4ZWN1dGUoKTsNCgkJCQkJCSRjaGFyID0gJGNoYXJfc3FsLT5mZXRjaChQRE86OkZFVENIX0FTU09DKTsNCgkJCQkJCQ0KCQkJCQkJJHJlc2VsbF9zcWwgPSAkc3FsLT5wcmVwYXJlKCJTRUxFQ1QgKiBGUk9NIFJhblNob3AuZGJvLnJlc2VsbCBXSEVSRSBJdGVtU2hvdyA9IDpwMSBBTkQgTnVtID0gOnAyIik7DQoJCQkJCQkkcmVzZWxsX3NxbC0+QmluZFBhcmFtKCI6cDEiLCRudW0wKTsNCgkJCQkJCSRyZXNlbGxfc3FsLT5CaW5kUGFyYW0oIjpwMiIsJEl0ZW1OdW0pOw0KCQkJCQkJJHJlc2VsbF9zcWwtPmV4ZWN1dGUoKTsJCQ0KCQkJCQkJJHJlc2VsbCA9ICRyZXNlbGxfc3FsLT5mZXRjaChQRE86OkZFVENIX0FTU09DKTsNCgkJCQkJCQ0KCQkJCQkJDQoJCQkJCQkkYWNjX3NxbCA9ICRzcWwtPnByZXBhcmUoIkVYRUMgV2ViQWNjb3VudEluZm8gOnAxIik7DQoJCQkJCQkkYWNjX3NxbC0+QmluZFBhcmFtKCI6cDEiLCRhY2NvdW50KTsNCgkJCQkJCSRhY2Nfc3FsLT5leGVjdXRlKCk7DQoJCQkJCQkkYWNjID0gJGFjY19zcWwtPmZldGNoKFBETzo6RkVUQ0hfQVNTT0MpOw0KCQkJCQkJJHBvaW50ID0gJGFjY1snVXNlclBvaW50J107DQoJCQkJCQkkbG9naW5kYXRlID0gJGFjY1snTGFzdExvZ2luRGF0ZSddOw0KCQkJCQkJJGxhc3Rsb2dpbiA9IHN0cnRvdGltZSgkbG9naW5kYXRlKTsNCgkJCQkJCQ0KCQkJCQkJaWYoJGxhc3Rsb2dpbiszMDAgPiB0aW1lKCkpDQoJCQkJCQl7DQoJCQkJCQkJJGFwaS0+cG9wdXAoIuC4geC4o+C4uOC4k+C4suC4o+C4rSA1IOC4meC4suC4l+C4teC4geC5iOC4reC4meC4l+C4s+C4o+C4suC4ouC4geC4suC4oyIpOw0KCQkJCQkJCWV4aXQoKTsNCgkJCQkJCX0NCgkJCQkJCQ0KCQkJCQkJDQoJCQkJCQkNCgkJCQkJCSRpdGVtID0gJGFwaS0+SXRlbUlEKCRyZXNlbGxbJ0l0ZW1NYWluJ10sJHJlc2VsbFsnSXRlbVN1YiddKTsNCgkJCQkJCSRyZWl0ZW0gPSAkYXBpLT5JdGVtSUQoJzQnLCcwJyk7DQoJCQkJCQkJCQkNCgkJCQkJCSR1cGRhdGVwb2ludCA9ICRwb2ludCskcmVzZWxsWydJdGVtUG9pbnQnXTsNCgkJCQkJCSRpbnZlbl9zcWwgPSAkc3FsLT5wcmVwYXJlKCJTRUxFQ1QgQ2hhSW52ZW4gRlJPTSBSYW5HYW1lMS5kYm8uQ2hhSW5mbyBXSEVSRSBDaGFOdW0gPSA6cDEgQU5EIENoYU9ubGluZSA9IDpwMiIpOw0KCQkJCQkJJGludmVuX3NxbC0+QmluZFBhcmFtKCI6cDEiLCRHZXRDaGFOdW0pOw0KCQkJCQkJJGludmVuX3NxbC0+QmluZFBhcmFtKCI6cDIiLCRudW0wKTsNCgkJCQkJCSRpbnZlbl9zcWwtPmV4ZWN1dGUoKTsNCgkJCQkJCSRpbnZlbnRvcnkgPSAkaW52ZW5fc3FsLT5mZXRjaChQRE86OkZFVENIX0FTU09DKTsNCgkJCQkJCWlmKCEkaW52ZW50b3J5KQ0KCQkJCQkJew0KCQkJCQkJCSRhcGktPnBvcHVwKCLguIHguKPguLjguJPguLLguK3guK3guIHguIjguLLguIHguYDguIHguKHguKrguYzguIHguYjguK3guJnguITguYjguLAiKTsNCgkJCQkJCQkkYXBpLT5nbygicmVwb2ludC5waHAiKTsNCgkJCQkJCQlleGl0KCk7DQoJCQkJCQl9DQoJCQkJCQllbHNlDQoJCQkJCQl7DQoJCQkJCQkJLy8kYXBpLT5wb3B1cCgiIi4kaW52ZW50b3J5WydDaGFJbnZlbiddLiIgLy8gIi4kc2xvdDBfMC4iIi4kaXRlbS4iIik7DQoJCQkJCQkJaWYoc3Ryc3RyKCRpbnZlbnRvcnlbJ0NoYUludmVuJ10sJGl0ZW0pKQ0KCQkJCQkJCXsJCQ0KCQkJCQkJCQkvLyBMb2cgUG9pbnQNCgkJCQkJCQkJJGxvZ19zcWwgPSAkc3FsLT5wcmVwYXJlKCJJTlNFUlQgSU5UTyBMb2dfUmVQb2ludChVc2VyTmFtZSxDaGFyTmFtZSxJdGVtTWFpbixJdGVtU3ViLElwX0FkZHJlc3MsZGF0ZWFkZCx0aW1lc3RhbSkgVkFMVUVTKDpwMSw6cDIsOnAzLDpwNCw6cDUsOnA2LDpwNykiKTsNCgkJCQkJCQkJJGxvZ19zcWwtPkJpbmRQYXJhbSgiOnAxIiwkYWNjb3VudCk7DQoJCQkJCQkJCSRsb2dfc3FsLT5CaW5kUGFyYW0oIjpwMiIsJGNoYXJbJ0NoYU5hbWUnXSk7DQoJCQkJCQkJCSRsb2dfc3FsLT5CaW5kUGFyYW0oIjpwMyIsJHJlc2VsbFsnSXRlbU1haW4nXSk7DQoJCQkJCQkJCSRsb2dfc3FsLT5CaW5kUGFyYW0oIjpwNCIsJHJlc2VsbFsnSXRlbVN1YiddKTsNCgkJCQkJCQkJJGxvZ19zcWwtPkJpbmRQYXJhbSgiOnA1IiwkaXApOw0KCQkJCQkJCQkkbG9nX3NxbC0+QmluZFBhcmFtKCI6cDYiLCRkYXRlKTsNCgkJCQkJCQkJJGxvZ19zcWwtPkJpbmRQYXJhbSgiOnA3Iix0aW1lKCkpOw0KCQkJCQkJCQkkbG9nX3NxbC0+ZXhlY3V0ZSgpOw0KCQkJCQkJCQkJDQoJCQkJCQkJCS8vIFVwZGF0ZSBJdGVtDQoJCQkJCQkJCSRyZXBsYWNlID0gJGFwaS0+c3RyX3JlcGxhY2VfZmlyc3QoJGl0ZW0sJHJlaXRlbSwkaW52ZW50b3J5WydDaGFJbnZlbiddKTsNCgkJCQkJCQkJJHVwZGF0ZV9yZXN1bHQgPSAnMHgnLiRyZXBsYWNlLicnOw0KCQkJCQkJCQkkdXBkYXRlX3NxbCA9ICRzcWwtPnByZXBhcmUoIkVYRUMgV2ViUmVwb2ludENNRDIgOnAxLDpwMiIpOw0KCQkJCQkJCQkkdXBkYXRlX3NxbC0+QmluZFBhcmFtKCI6cDEiLCRHZXRDaGFOdW0pOw0KCQkJCQkJCQkkdXBkYXRlX3NxbC0+QmluZFBhcmFtKCI6cDIiLCR1cGRhdGVfcmVzdWx0KTsNCgkJCQkJCQkJJHVwZGF0ZV9zcWwtPmV4ZWN1dGUoKTsNCgkJCQkJCQkJaWYoISR1cGRhdGVfc3FsKQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQkkYXBpLT5wb3B1cCgi4LmE4Lih4LmI4Liq4Liy4Lih4Liy4Lij4LiW4LiX4Liz4LiB4Liy4Lij4Lit4Lix4Lie4LmA4LiU4LiX4LmE4Lit4LmA4LiX4LmH4Lih4LmE4LiU4LmJIik7DQoJCQkJCQkJCX0NCgkJCQkJCQkJZWxzZQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQkNCgkJCQkJCQkJCS8vIFVwZGF0ZSBQb2ludA0KCQkJCQkJCQkJJHBvaW50X3NxbCA9ICRzcWwtPnByZXBhcmUoIlVQREFURSBSYW5Vc2VyLmRiby5Vc2VySW5mbyBTRVQgVXNlclBvaW50ID0gOnAxIFdIRVJFIFVzZXJOYW1lID0gOnAyIik7DQoJCQkJCQkJCQkkcG9pbnRfc3FsLT5CaW5kUGFyYW0oIjpwMSIsJHVwZGF0ZXBvaW50KTsNCgkJCQkJCQkJCSRwb2ludF9zcWwtPkJpbmRQYXJhbSgiOnAyIiwkYWNjb3VudCk7DQoJCQkJCQkJCQkkcG9pbnRfc3FsLT5leGVjdXRlKCk7DQoJCQkJCQkJCQlpZighJHBvaW50X3NxbCkNCgkJCQkJCQkJCXsNCgkJCQkJCQkJCQkkYXBpLT5wb3B1cCgi4LmA4LiB4Li04LiU4LiC4LmJ4Lit4Lic4Li04LiU4Lie4Lil4Liy4LiU4LiC4LiT4Liw4Liq4LmI4LiH4LiC4LmJ4Lit4Lih4Li54LilIik7DQoJCQkJCQkJCQl9DQoJCQkJCQkJCQllbHNlDQoJCQkJCQkJCQl7DQoJCQkJCQkJCQkJJGFwaS0+cG9wdXAoIuC4l+C4s+C4geC4suC4o+C4hOC4t+C4meC4nuC5ieC4reC4ouC4quC4s+C5gOC4o+C5h+C4iOC4iOC5ieC4siIpOw0KCQkJCQkJCQkJCSRhcGktPmdvKCJyZXBvaW50LnBocCIpOw0KCQkJCQkJCQkJCWV4aXQoKTsNCgkJCQkJCQkJCX0NCgkJCQkJCQkJfQ0KCQkJCQkJCX0NCgkJCQkJCQllbHNlDQoJCQkJCQkJew0KCQkJCQkJCQkkYXBpLT5wb3B1cCgi4LmE4Lih4LmI4Lie4Lia4LmE4Lit4LmA4LiX4LmH4LihICIuJHJlc2VsbFsnSXRlbU5hbWUnXS4iIOC5g+C4meC4iuC5iOC4reC4h+C5gOC4geC5h+C4muC4guC4reC4hyIpOw0KCQkJCQkJCQlleGl0KCk7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJCT8+DQogICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIj4mbmJzcDs8L3RkPg0KICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICA8dHI+DQogICAgICAgICAgICAgICAgPHRkIGFsaWduPSJjZW50ZXIiPjxwPjxpbWcgc3JjPSJpbWFnZXMvaGVscC9oZWxwX3JlcG9pbnQucG5nIiB3aWR0aD0iMjM5IiBoZWlnaHQ9IjM1NCIgLz48YnIgLz4NCiAgICAgICAgICAgICAgICAgIOC4meC4s+C5hOC4reC5gOC4l+C5h+C4oeC5hOC4m+C5hOC4p+C5ieC5g+C4meC4iuC5iOC4reC4h+C5gOC4geC5h+C4muC4guC4reC4h+C4iuC5iOC4reC4h+C5hOC4q+C4meC4geC5h+C5hOC4lOC5iQ0KICAgICAgICAgICAgICAgIDwvcD48L3RkPg0KICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICA8dHI+DQogICAgICAgICAgICAgICAgPHRkIGFsaWduPSJjZW50ZXIiPiZuYnNwOzwvdGQ+DQogICAgICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICA8dGQgYWxpZ249ImNlbnRlciI+Jm5ic3A7PC90ZD4NCiAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgIDwvdGFibGU+PC90ZD4NCiAgICAgICAgICA8L3RyPg0KICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgIDx0ZCBoZWlnaHQ9IjExMCIgYmFja2dyb3VuZD0iaW1hZ2VzL3N1YnJpZ2h0X2JvdHRvbS5naWYiPiZuYnNwOzwvdGQ+DQogICAgICAgICAgPC90cj4NCiAgICAgICAgICA8L3RhYmxlPjwvdGQ+DQogICAgICA8L3RyPg0KICAgIDwvdGFibGU+PC90ZD4NCiAgPC90cj4NCiAgPHRyPg0KICAgIDx0ZCBjb2xzcGFuPSI2Ij4mbmJzcDs8L3RkPg0KICA8L3RyPg0KICA8dHI+DQogICAgPHRkIGNvbHNwYW49IjYiPiZuYnNwOzwvdGQ+DQogIDwvdHI+DQo8L3RhYmxlPg0KDQo8cD4mbmJzcDs8L3A+DQo8ZGl2IGNsYXNzPSJyaWdodFRvcCI+DQo8ZGl2IGlkPSJxdWlja19tZW51X2RpdiI+PGEgaHJlZj0iIyI+PGltZyBzcmM9Ii9pbWFnZXMvdG9wX2J0bi5naWYiIGFsdC8+PC9hPjwvZGl2Pg0KPC9kaXY+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCI+DQogIDx0cj4NCiAgICA8dGQgYWxpZ249ImNlbnRlciI+PD9waHAgaW5jbHVkZV9vbmNlKCJjb21tb24vY29weXJpZ2h0LnBocCIpOyA/PjwvdGQ+DQogIDwvdHI+DQogIDx0cj4NCiAgICA8dGQgaGVpZ2h0PSIzMiIgYWxpZ249ImNlbnRlciI+Jm5ic3A7PC90ZD4NCiAgPC90cj4NCjwvdGFibGU+DQo8L2JvZHk+DQo8L2h0bWw+"));//Generated by Ampare PHP Encoder. For more security please use php protect before encode the php program

Function Calls

base64_decode 1

Variables

None

Stats

MD5 6d827e7351ea811328150eef90783b4f
Eval Count 1
Decode Time 126 ms