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("PD9waHANCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio..

Decoded Output download

?>b'<?php
/************************************************************************************************
** The contents of this file are subject to the Vtiger SalesFunnel Module License Version 1.0
 * ( "License" ); You may not use this file except in compliance with the License
 * The Original Code is:  Technokrafts Labs Pvt Ltd
 * The Initial Developer of the Original Code is Technokrafts Labs Pvt Ltd.
 * Portions created by Technokrafts Labs Pvt Ltd are Copyright ( C ) Technokrafts Labs Pvt Ltd.
 * All Rights Reserved.
**
************************************************************************************************/
/**
 * SalesFunnel class extending the Core class
 */
class SalesFunnel  {	

	 function getstage($module_name)
	 {
	 	
		global $adb;
		if($module_name == \'Opportunities\')
		{
			$result = $adb->pquery("SELECT * FROM vtiger_sales_stage ORDER BY sales_stage_id ASC", array());
			$rows = array();
			if ($adb->num_rows($result)) {
				while ($resultrow = $adb->fetch_array($result)) {
					$row[decode_html($resultrow[\'sales_stage\'])] = decode_html($resultrow[\'sales_stage\']);
				}
			}
		}
		if($module_name == \'Quotes\')
		{
			$result = $adb->pquery("SELECT * FROM vtiger_quotestage ORDER BY quotestageid ASC", array());
			$rows = array();
			if ($adb->num_rows($result)) {
				while ($resultrow = $adb->fetch_array($result)) {
					$row[decode_html($resultrow[\'quotestage\'])] = decode_html($resultrow[\'quotestage\']);
				}
			}
		}
		if($module_name == \'Invoice\')
		{
			$result = $adb->pquery("SELECT * FROM vtiger_invoicestatus ORDER BY invoicestatusid ASC", array());
			$rows = array();
			if ($adb->num_rows($result)) {
				while ($resultrow = $adb->fetch_array($result)) {
					$row[decode_html($resultrow[\'invoicestatus\'])] = decode_html($resultrow[\'invoicestatus\']);
				}
			}
		}
		if($module_name == \'Purchase Order\')
		{
			$result = $adb->pquery("SELECT * FROM vtiger_postatus ORDER BY postatusid ASC", array());
			$rows = array();
			if ($adb->num_rows($result)) {
				while ($resultrow = $adb->fetch_array($result)) {
					$row[decode_html($resultrow[\'postatus\'])] = decode_html($resultrow[\'postatus\']);
				}
			}
		}
		if($module_name == \'Sales Order\')
		{
		
			$result = $adb->pquery("SELECT * FROM vtiger_sostatus ORDER BY sostatusid ASC", array());
			$rows = array();
			if ($adb->num_rows($result)) {
				while ($resultrow = $adb->fetch_array($result)) {
					$row[decode_html($resultrow[\'sostatus\'])] = decode_html($resultrow[\'sostatus\']);
				}
			}
		}
		return $row;
	 }
	function getDataOnFunnel($sales_stage,$sales_stage_all,$module_name)
	{
				
			global $adb;
			$rows = array();
					
				if(is_array($sales_stage) && count($sales_stage)==0)
				{
					
					$sales_stage	=	$sales_stage_all;
				
				}
	
				foreach($sales_stage as $key=>$value)
				{
					
					if($module_name == \'Opportunities\')
					{
						$query	=	"SELECT count(*) AS count  FROM vtiger_potential INNER JOIN vtiger_crmentity ON vtiger_potential.potentialid = vtiger_crmentity.crmid LEFT JOIN vtiger_users ON vtiger_crmentity.smownerid = vtiger_users.id LEFT JOIN vtiger_groups ON vtiger_crmentity.smownerid = vtiger_groups.groupid WHERE vtiger_crmentity.deleted=0 AND vtiger_potential.potentialid > 0 AND vtiger_potential.sales_stage = \'".$value."\'";
					}
					if($module_name == \'Quotes\')
					{
						$query	="SELECT count( * ) AS count
								FROM vtiger_quotes
								INNER JOIN vtiger_crmentity ON vtiger_quotes.quoteid = vtiger_crmentity.crmid
								LEFT JOIN vtiger_users ON vtiger_crmentity.smownerid = vtiger_users.id
								LEFT JOIN vtiger_groups ON vtiger_crmentity.smownerid = vtiger_groups.groupid
								WHERE vtiger_crmentity.deleted =0
								AND vtiger_quotes.quoteid >0
								AND vtiger_quotes.quotestage =\'".$value."\'";
					}
					if($module_name == \'Invoice\')
					{
						$query	="SELECT count( * ) AS count
								FROM vtiger_invoice
								INNER JOIN vtiger_crmentity ON vtiger_invoice.invoiceid = vtiger_crmentity.crmid
								LEFT JOIN vtiger_users ON vtiger_crmentity.smownerid = vtiger_users.id
								LEFT JOIN vtiger_groups ON vtiger_crmentity.smownerid = vtiger_groups.groupid
								WHERE vtiger_crmentity.deleted =0
								AND vtiger_invoice.invoiceid >0
								AND vtiger_invoice.invoicestatus =\'".$value."\'";
					}
					
					if($module_name == \'Purchase Order\')
					{
						$query	="SELECT count( * ) AS count
								FROM vtiger_purchaseorder
								INNER JOIN vtiger_crmentity ON vtiger_purchaseorder.purchaseorderid = vtiger_crmentity.crmid
								LEFT JOIN vtiger_users ON vtiger_crmentity.smownerid = vtiger_users.id
								LEFT JOIN vtiger_groups ON vtiger_crmentity.smownerid = vtiger_groups.groupid
								WHERE vtiger_crmentity.deleted =0
								AND vtiger_purchaseorder.purchaseorderid >0
								AND vtiger_purchaseorder.postatus =\'".$value."\'";
					}
					
					if($module_name == \'Sales Order\')
					{
						$query	="SELECT count( * ) AS count
								FROM vtiger_salesorder
								INNER JOIN vtiger_crmentity ON vtiger_salesorder.salesorderid = vtiger_crmentity.crmid
								LEFT JOIN vtiger_users ON vtiger_crmentity.smownerid = vtiger_users.id
								LEFT JOIN vtiger_groups ON vtiger_crmentity.smownerid = vtiger_groups.groupid
								WHERE vtiger_crmentity.deleted =0
								AND vtiger_salesorder.salesorderid >0
								AND vtiger_salesorder.sostatus =\'".$value."\'";
					}	
											
					$result = $adb->pquery($query, array());
		
					if($adb->num_rows($result)>0)
					{
						$resultrow 	= 	$adb->fetch_array($result);						
						$cnt		=	$resultrow[\'count\'];
						if($cnt)
						{
							$row[$value] = $cnt;
						}
					}	

				}
		
		return $row;	
	}
	function getChartData($sales_stage,$module_name){
		global $adb;
		$rows = array();
		if($module_name == \'Opportunities\')
		{			
			$query	=	"SELECT vtiger_potential.potential_no,vtiger_potential.potentialtype,vtiger_potential.amount, vtiger_potential.potentialname, vtiger_potential.related_to, vtiger_potential.sales_stage, vtiger_potential.leadsource, vtiger_potential.closingdate, vtiger_crmentity.smownerid, vtiger_potential.potentialid
					FROM vtiger_potential
					INNER JOIN vtiger_crmentity ON vtiger_potential.potentialid = vtiger_crmentity.crmid
					LEFT JOIN vtiger_users ON vtiger_crmentity.smownerid = vtiger_users.id
					LEFT JOIN vtiger_groups ON vtiger_crmentity.smownerid = vtiger_groups.groupid
					WHERE vtiger_crmentity.deleted =0
					AND vtiger_potential.potentialid >0 ";	
	
			if(is_array($sales_stage) && count($sales_stage)>0)
			{
				$str	=	"\'".implode("\',\'",$sales_stage)."\'";
				
				$query.=" AND vtiger_potential.sales_stage IN (".$str.")";
			}
			$query.=" ORDER BY vtiger_potential.sales_stage";
			$result = $adb->pquery($query, array());		
			if ($adb->num_rows($result)) {
				while ($resultrow = $adb->fetch_array($result)) {
					$row[$resultrow[\'potentialid\']]["potentialname"] 	= decode_html($resultrow[\'potentialname\']);
					$row[$resultrow[\'potentialid\']]["sales_stage"] 		= decode_html($resultrow[\'sales_stage\']);
					$row[$resultrow[\'potentialid\']]["leadsource"] 		= decode_html($resultrow[\'leadsource\']);
					$row[$resultrow[\'potentialid\']]["amount"] 			= decode_html($resultrow[\'amount\']);
					$row[$resultrow[\'potentialid\']]["potentialtype"] 	= decode_html($resultrow[\'potentialtype\']);
				}
			}
		}
		if($module_name == \'Quotes\')
		{
				$query	=	"SELECT vtiger_quotes.quote_no, vtiger_quotes.subject, vtiger_quotes.total, vtiger_quotes.quotestage, 		vtiger_quotes.validtill, vtiger_crmentity.smownerid, vtiger_quotes.quoteid
	FROM vtiger_quotes
	INNER JOIN vtiger_crmentity ON vtiger_quotes.quoteid = vtiger_crmentity.crmid
	LEFT JOIN vtiger_users ON vtiger_crmentity.smownerid = vtiger_users.id
	LEFT JOIN vtiger_groups ON vtiger_crmentity.smownerid = vtiger_groups.groupid
	WHERE vtiger_crmentity.deleted =0
	AND vtiger_quotes.quoteid >0";	
	
			if(is_array($sales_stage) && count($sales_stage)>0)
			{
				$str	=	"\'".implode("\',\'",$sales_stage)."\'";
				$query.=" AND vtiger_quotes.quotestage IN (".$str.")";
			}
			$query.=" ORDER BY vtiger_quotes.quotestage";
			
			$result = $adb->pquery($query, array());		
			if ($adb->num_rows($result)) {
				while ($resultrow = $adb->fetch_array($result)) {
					$row[$resultrow[\'quoteid\']]["quote_no"] 	= decode_html($resultrow[\'quote_no\']);
					$row[$resultrow[\'quoteid\']]["subject"] 		= decode_html($resultrow[\'subject\']);
					$row[$resultrow[\'quoteid\']]["quotestage"] 		= decode_html($resultrow[\'quotestage\']);
					$row[$resultrow[\'quoteid\']]["total"] 			= decode_html($resultrow[\'total\']);
					$row[$resultrow[\'quoteid\']]["validtill"] 	= decode_html($resultrow[\'validtill\']);
				}
			}
		}
		if($module_name == \'Invoice\')
		{
			$query	=	"SELECT vtiger_invoice.invoice_no, vtiger_invoice.subject,vtiger_invoice.invoicestatus,		vtiger_invoice.invoicedate,vtiger_invoice.total,vtiger_crmentity.smownerid, vtiger_invoice.invoiceid
	FROM vtiger_invoice
	INNER JOIN vtiger_crmentity ON vtiger_invoice.invoiceid = vtiger_crmentity.crmid
	LEFT JOIN vtiger_users ON vtiger_crmentity.smownerid = vtiger_users.id
	LEFT JOIN vtiger_groups ON vtiger_crmentity.smownerid = vtiger_groups.groupid
	WHERE vtiger_crmentity.deleted =0
	AND vtiger_invoice.invoiceid >0";	
	
			if(is_array($sales_stage) && count($sales_stage)>0)
			{
				$str	=	"\'".implode("\',\'",$sales_stage)."\'";
				$query.=" AND vtiger_invoice.invoicestatus IN (".$str.")";
			}
			$query.=" ORDER BY vtiger_invoice.invoicestatus";
			
			$result = $adb->pquery($query, array());		
			if ($adb->num_rows($result)) {
				while ($resultrow = $adb->fetch_array($result)) {
					$row[$resultrow[\'invoiceid\']]["invoice_no"] 	= decode_html($resultrow[\'invoice_no\']);
					$row[$resultrow[\'invoiceid\']]["subject"] 		= decode_html($resultrow[\'subject\']);
					$row[$resultrow[\'invoiceid\']]["invoicestatus"] 	= decode_html($resultrow[\'invoicestatus\']);
					$row[$resultrow[\'invoiceid\']]["invoicedate"] 	= decode_html($resultrow[\'invoicedate\']);
					$row[$resultrow[\'invoiceid\']]["total"] 			= decode_html($resultrow[\'total\']);
				}
			}
		}
		
		if($module_name == \'Purchase Order\')
		{
			$query	="SELECT vtiger_purchaseorder.purchaseorder_no,vtiger_purchaseorder.subject,vtiger_purchaseorder.total, vtiger_purchaseorder.postatus,vtiger_purchaseorder.requisition_no, vtiger_crmentity.smownerid, vtiger_purchaseorder.purchaseorderid
	FROM vtiger_purchaseorder
	INNER JOIN vtiger_crmentity ON vtiger_purchaseorder.purchaseorderid = vtiger_crmentity.crmid
	LEFT JOIN vtiger_users ON vtiger_crmentity.smownerid = vtiger_users.id
	LEFT JOIN vtiger_groups ON vtiger_crmentity.smownerid = vtiger_groups.groupid
	WHERE vtiger_crmentity.deleted =0
	AND vtiger_purchaseorder.purchaseorderid >0";	
	
			if(is_array($sales_stage) && count($sales_stage)>0)
			{
				$str	=	"\'".implode("\',\'",$sales_stage)."\'";
				$query.=" AND vtiger_purchaseorder.postatus IN (".$str.")";
			}
			$query.=" ORDER BY vtiger_purchaseorder.postatus";
			
			$result = $adb->pquery($query, array());		
			if ($adb->num_rows($result)) {
				while ($resultrow = $adb->fetch_array($result)) {
					$row[$resultrow[\'purchaseorderid\']]["purchaseorder_no"] = decode_html($resultrow[\'purchaseorder_no\']);
					$row[$resultrow[\'purchaseorderid\']]["subject"] 			= decode_html($resultrow[\'subject\']);
					$row[$resultrow[\'purchaseorderid\']]["postatus"] 		= decode_html($resultrow[\'postatus\']);
					$row[$resultrow[\'purchaseorderid\']]["total"] 			= decode_html($resultrow[\'total\']);
					$row[$resultrow[\'purchaseorderid\']]["requisition_no"] 	= decode_html($resultrow[\'requisition_no\']);
				}
			}
		}
		
		if($module_name == \'Sales Order\')
		{
			$query	=	"SELECT vtiger_salesorder.salesorder_no, vtiger_salesorder.subject, vtiger_salesorder.total, vtiger_salesorder.sostatus, vtiger_salesorder.duedate, vtiger_crmentity.smownerid, vtiger_salesorder.salesorderid
	FROM vtiger_salesorder
	INNER JOIN vtiger_crmentity ON vtiger_salesorder.salesorderid = vtiger_crmentity.crmid
	LEFT JOIN vtiger_users ON vtiger_crmentity.smownerid = vtiger_users.id
	LEFT JOIN vtiger_groups ON vtiger_crmentity.smownerid = vtiger_groups.groupid
	WHERE vtiger_crmentity.deleted =0
	AND vtiger_salesorder.salesorderid >0";	
	
			if(is_array($sales_stage) && count($sales_stage)>0)
			{
				$str	=	"\'".implode("\',\'",$sales_stage)."\'";
				$query.=" AND vtiger_salesorder.sostatus IN (".$str.")";
			}
			$query.=" ORDER BY vtiger_salesorder.sostatus";
			
			$result = $adb->pquery($query, array());		
			if ($adb->num_rows($result)) {
				while ($resultrow = $adb->fetch_array($result)) {
					$row[$resultrow[\'salesorderid\']]["salesorder_no"] 	= decode_html($resultrow[\'salesorder_no\']);
					$row[$resultrow[\'salesorderid\']]["subject"] 		= decode_html($resultrow[\'subject\']);
					$row[$resultrow[\'salesorderid\']]["sostatus"] 		= decode_html($resultrow[\'sostatus\']);
					$row[$resultrow[\'salesorderid\']]["total"] 			= decode_html($resultrow[\'total\']);
					$row[$resultrow[\'salesorderid\']]["duedate"] 		= decode_html($resultrow[\'duedate\']);
				}
			}
		}
		return $row;
	}
	function getAllStages($flag=0) {
	
		global $adb,$mod_strings;
		
	
		$result = $adb->pquery("SELECT * FROM vtiger_sales_stage ORDER BY sales_stage_id ASC", array());		
		$rows = array();
		
		if ($adb->num_rows($result)) {
			while ($resultrow = $adb->fetch_array($result)) {			
				if($flag)
				{
					if($mod_strings[$resultrow[\'sales_stage\']])
					{
						$row[decode_html($resultrow[\'sales_stage\'])] = decode_html($mod_strings[$resultrow[\'sales_stage\']]);
					}else{
						$row[decode_html($resultrow[\'sales_stage\'])] = decode_html($resultrow[\'sales_stage\']);
					}
				}else{
					$row[decode_html($resultrow[\'sales_stage\'])] = decode_html($resultrow[\'sales_stage\']);
				}
				
			
			}
		}
		
		return $row;
		
		
	}
	
	function getStagesDataFunnel($sales_stage,$sales_stage_all)
	{
			
			global $adb;
			$rows = array();
					
				if(is_array($sales_stage) && count($sales_stage)==0)
				{
					
					$sales_stage	=	$sales_stage_all;
				
				}
	
				foreach($sales_stage as $key=>$value)
				{
					
					$query	=	"SELECT count(*) AS count  FROM vtiger_potential INNER JOIN vtiger_crmentity ON vtiger_potential.potentialid = vtiger_crmentity.crmid LEFT JOIN vtiger_users ON vtiger_crmentity.smownerid = vtiger_users.id LEFT JOIN vtiger_groups ON vtiger_crmentity.smownerid = vtiger_groups.groupid WHERE vtiger_crmentity.deleted=0 AND vtiger_potential.potentialid > 0 AND vtiger_potential.sales_stage = \'".$value."\'";
					$result = $adb->pquery($query, array());
		
					if($adb->num_rows($result)>0)
					{
						$resultrow 	= 	$adb->fetch_array($result);						
						$cnt		=	$resultrow[\'count\'];
						if($cnt)
						{
							$row[$value] = $cnt;
						}
					}	

				}
		
		return $row;
	}
	
	function rand_colorCode(){
		$r = dechex(mt_rand(0,255)); // generate the red component
		$g = dechex(mt_rand(0,255)); // generate the green component
		$b = dechex(mt_rand(0,255)); // generate the blue component
		$rgb = $r.$g.$b;
		if($r == $g && $g == $b){
			$rgb = substr($rgb,0,3); // shorter version
		}
		return \'#\'.$rgb;
	}

	
	function getStagesData($sales_stage)
	{
			global $adb,$mod_strings;
			$rows = array();
			$query	=	"SELECT vtiger_potential.potential_no,vtiger_potential.potentialtype,vtiger_potential.amount, vtiger_potential.potentialname, vtiger_potential.related_to, vtiger_potential.sales_stage, vtiger_potential.leadsource, vtiger_potential.closingdate, vtiger_crmentity.smownerid, vtiger_potential.potentialid
				FROM vtiger_potential
				INNER JOIN vtiger_crmentity ON vtiger_potential.potentialid = vtiger_crmentity.crmid
				LEFT JOIN vtiger_users ON vtiger_crmentity.smownerid = vtiger_users.id
				LEFT JOIN vtiger_groups ON vtiger_crmentity.smownerid = vtiger_groups.groupid
				WHERE vtiger_crmentity.deleted =0
				AND vtiger_potential.potentialid >0 ";	

		if(is_array($sales_stage) && count($sales_stage)>0)
		{
			$str	=	"\'".implode("\',\'",$sales_stage)."\'";
			$query.=" AND vtiger_potential.sales_stage IN (".$str.")";
		}
		$query.=" ORDER BY vtiger_potential.sales_stage";
		$result = $adb->pquery($query, array());		
		if ($adb->num_rows($result)) {
			while ($resultrow = $adb->fetch_array($result)) {
				$row[$resultrow[\'potentialid\']]["potentialname"] 	= decode_html($resultrow[\'potentialname\']);
				$row[$resultrow[\'potentialid\']]["sales_stage"] 		= decode_html($resultrow[\'sales_stage\']);
				$row[$resultrow[\'potentialid\']]["leadsource"] 		= decode_html($resultrow[\'leadsource\']);
				$row[$resultrow[\'potentialid\']]["amount"] 			= decode_html($resultrow[\'amount\']);
				$row[$resultrow[\'potentialid\']]["potentialtype"] 	= decode_html($resultrow[\'potentialtype\']);
			}
		}
		return $row;
	
	}
	function getAllStagesQuote() {
		global $adb;
			$result = $adb->pquery("SELECT * FROM vtiger_quotestage ORDER BY quotestageid ASC", array());
			$rows = array();
			if ($adb->num_rows($result)) {
				while ($resultrow = $adb->fetch_array($result)) {
					$row[decode_html($resultrow[\'quotestage\'])] = decode_html($resultrow[\'quotestage\']);
				}
			}
		
		return $row;
	}
	function getAllStagesInvoice() {
		global $adb;
			$result = $adb->pquery("SELECT * FROM vtiger_invoicestatus ORDER BY invoicestatusid ASC", array());
			$rows = array();
			if ($adb->num_rows($result)) {
				while ($resultrow = $adb->fetch_array($result)) {
					$row[decode_html($resultrow[\'invoicestatus\'])] = decode_html($resultrow[\'invoicestatus\']);
				}
			}
		
		return $row;
	}
	function getAllStagesSO() {
		global $adb;
			$result = $adb->pquery("SELECT * FROM vtiger_sostatus ORDER BY sostatusid ASC", array());
			$rows = array();
			if ($adb->num_rows($result)) {
				while ($resultrow = $adb->fetch_array($result)) {
					$row[decode_html($resultrow[\'sostatus\'])] = decode_html($resultrow[\'sostatus\']);
				}
			}
		
		return $row;
	}
		function getAllStagesPO() {
		global $adb;
			$result = $adb->pquery("SELECT * FROM vtiger_postatus ORDER BY postatusid ASC", array());
			$rows = array();
			if ($adb->num_rows($result)) {
				while ($resultrow = $adb->fetch_array($result)) {
					$row[decode_html($resultrow[\'postatus\'])] = decode_html($resultrow[\'postatus\']);
				}
			}
		
		return $row;
	}
	function getStagesDataFunnelQuote($sales_stage,$sales_stage_all)
	{
			global $adb;
			$rows = array();
					
				if(is_array($sales_stage) && count($sales_stage)==0)
				{
					
					$sales_stage	=	$sales_stage_all;
				
				}
	
				foreach($sales_stage as $key=>$value)
				{
					
					$query	=	"SELECT count( * ) AS count
								FROM vtiger_quotestage
								INNER JOIN vtiger_crmentity ON vtiger_quotestage.quotestageid = vtiger_crmentity.crmid
								LEFT JOIN vtiger_users ON vtiger_crmentity.smownerid = vtiger_users.id
								LEFT JOIN vtiger_groups ON vtiger_crmentity.smownerid = vtiger_groups.groupid
								WHERE vtiger_crmentity.deleted =0
								AND vtiger_quotestage.quotestageid >0
								AND vtiger_quotestage.quotestage =\'".$value."\'";
					$result = $adb->pquery($query, array());
		
					if($adb->num_rows($result)>0)
					{
						$resultrow 	= 	$adb->fetch_array($result);						
						$cnt		=	$resultrow[\'count\'];
						if($cnt)
						{
							$row[$value] = $cnt;
						}
					}	

				}
		
		return $row;
	}
	function getStagesDataQuote($sales_stage)
	{
			global $adb,$mod_strings;
			$rows = array();
			$query	=	"SELECT vtiger_quotes.quote_no, vtiger_quotes.subject, vtiger_quotes.total, vtiger_quotes.quotestage, 		vtiger_quotes.validtill, vtiger_crmentity.smownerid, vtiger_quotes.quoteid
FROM vtiger_quotes
INNER JOIN vtiger_crmentity ON vtiger_quotes.quoteid = vtiger_crmentity.crmid
LEFT JOIN vtiger_users ON vtiger_crmentity.smownerid = vtiger_users.id
LEFT JOIN vtiger_groups ON vtiger_crmentity.smownerid = vtiger_groups.groupid
WHERE vtiger_crmentity.deleted =0
AND vtiger_quotes.quoteid >0";	

		if(is_array($quotestage) && count($quotestage)>0)
		{
			$str	=	"\'".implode("\',\'",$quotestage)."\'";
			$query.=" AND vtiger_quotes.quotestage IN (".$str.")";
		}
		$query.=" ORDER BY vtiger_quotes.quotestage";
		$result = $adb->pquery($query, array());		
		if ($adb->num_rows($result)) {
			while ($resultrow = $adb->fetch_array($result)) {
				$row[$resultrow[\'quoteid\']]["quote_no"] 	= decode_html($resultrow[\'quote_no\']);
				$row[$resultrow[\'quoteid\']]["subject"] 		= decode_html($resultrow[\'subject\']);
				$row[$resultrow[\'quoteid\']]["quotestage"] 		= decode_html($resultrow[\'quotestage\']);
				$row[$resultrow[\'quoteid\']]["total"] 			= decode_html($resultrow[\'total\']);
				$row[$resultrow[\'quoteid\']]["validtill"] 	= decode_html($resultrow[\'validtill\']);
			}
		}
		return $row;
	}
	
}

?>'

Did this file decode correctly?

Original Code

<?php eval("?>".base64_decode("PD9waHANCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCioqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIFZ0aWdlciBTYWxlc0Z1bm5lbCBNb2R1bGUgTGljZW5zZSBWZXJzaW9uIDEuMA0KICogKCAiTGljZW5zZSIgKTsgWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlDQogKiBUaGUgT3JpZ2luYWwgQ29kZSBpczogIFRlY2hub2tyYWZ0cyBMYWJzIFB2dCBMdGQNCiAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcyBUZWNobm9rcmFmdHMgTGFicyBQdnQgTHRkLg0KICogUG9ydGlvbnMgY3JlYXRlZCBieSBUZWNobm9rcmFmdHMgTGFicyBQdnQgTHRkIGFyZSBDb3B5cmlnaHQgKCBDICkgVGVjaG5va3JhZnRzIExhYnMgUHZ0IEx0ZC4NCiAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQoqKg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLyoqDQogKiBTYWxlc0Z1bm5lbCBjbGFzcyBleHRlbmRpbmcgdGhlIENvcmUgY2xhc3MNCiAqLw0KY2xhc3MgU2FsZXNGdW5uZWwgIHsJDQoNCgkgZnVuY3Rpb24gZ2V0c3RhZ2UoJG1vZHVsZV9uYW1lKQ0KCSB7DQoJIAkNCgkJZ2xvYmFsICRhZGI7DQoJCWlmKCRtb2R1bGVfbmFtZSA9PSAnT3Bwb3J0dW5pdGllcycpDQoJCXsNCgkJCSRyZXN1bHQgPSAkYWRiLT5wcXVlcnkoIlNFTEVDVCAqIEZST00gdnRpZ2VyX3NhbGVzX3N0YWdlIE9SREVSIEJZIHNhbGVzX3N0YWdlX2lkIEFTQyIsIGFycmF5KCkpOw0KCQkJJHJvd3MgPSBhcnJheSgpOw0KCQkJaWYgKCRhZGItPm51bV9yb3dzKCRyZXN1bHQpKSB7DQoJCQkJd2hpbGUgKCRyZXN1bHRyb3cgPSAkYWRiLT5mZXRjaF9hcnJheSgkcmVzdWx0KSkgew0KCQkJCQkkcm93W2RlY29kZV9odG1sKCRyZXN1bHRyb3dbJ3NhbGVzX3N0YWdlJ10pXSA9IGRlY29kZV9odG1sKCRyZXN1bHRyb3dbJ3NhbGVzX3N0YWdlJ10pOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQlpZigkbW9kdWxlX25hbWUgPT0gJ1F1b3RlcycpDQoJCXsNCgkJCSRyZXN1bHQgPSAkYWRiLT5wcXVlcnkoIlNFTEVDVCAqIEZST00gdnRpZ2VyX3F1b3Rlc3RhZ2UgT1JERVIgQlkgcXVvdGVzdGFnZWlkIEFTQyIsIGFycmF5KCkpOw0KCQkJJHJvd3MgPSBhcnJheSgpOw0KCQkJaWYgKCRhZGItPm51bV9yb3dzKCRyZXN1bHQpKSB7DQoJCQkJd2hpbGUgKCRyZXN1bHRyb3cgPSAkYWRiLT5mZXRjaF9hcnJheSgkcmVzdWx0KSkgew0KCQkJCQkkcm93W2RlY29kZV9odG1sKCRyZXN1bHRyb3dbJ3F1b3Rlc3RhZ2UnXSldID0gZGVjb2RlX2h0bWwoJHJlc3VsdHJvd1sncXVvdGVzdGFnZSddKTsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJaWYoJG1vZHVsZV9uYW1lID09ICdJbnZvaWNlJykNCgkJew0KCQkJJHJlc3VsdCA9ICRhZGItPnBxdWVyeSgiU0VMRUNUICogRlJPTSB2dGlnZXJfaW52b2ljZXN0YXR1cyBPUkRFUiBCWSBpbnZvaWNlc3RhdHVzaWQgQVNDIiwgYXJyYXkoKSk7DQoJCQkkcm93cyA9IGFycmF5KCk7DQoJCQlpZiAoJGFkYi0+bnVtX3Jvd3MoJHJlc3VsdCkpIHsNCgkJCQl3aGlsZSAoJHJlc3VsdHJvdyA9ICRhZGItPmZldGNoX2FycmF5KCRyZXN1bHQpKSB7DQoJCQkJCSRyb3dbZGVjb2RlX2h0bWwoJHJlc3VsdHJvd1snaW52b2ljZXN0YXR1cyddKV0gPSBkZWNvZGVfaHRtbCgkcmVzdWx0cm93WydpbnZvaWNlc3RhdHVzJ10pOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQlpZigkbW9kdWxlX25hbWUgPT0gJ1B1cmNoYXNlIE9yZGVyJykNCgkJew0KCQkJJHJlc3VsdCA9ICRhZGItPnBxdWVyeSgiU0VMRUNUICogRlJPTSB2dGlnZXJfcG9zdGF0dXMgT1JERVIgQlkgcG9zdGF0dXNpZCBBU0MiLCBhcnJheSgpKTsNCgkJCSRyb3dzID0gYXJyYXkoKTsNCgkJCWlmICgkYWRiLT5udW1fcm93cygkcmVzdWx0KSkgew0KCQkJCXdoaWxlICgkcmVzdWx0cm93ID0gJGFkYi0+ZmV0Y2hfYXJyYXkoJHJlc3VsdCkpIHsNCgkJCQkJJHJvd1tkZWNvZGVfaHRtbCgkcmVzdWx0cm93Wydwb3N0YXR1cyddKV0gPSBkZWNvZGVfaHRtbCgkcmVzdWx0cm93Wydwb3N0YXR1cyddKTsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJaWYoJG1vZHVsZV9uYW1lID09ICdTYWxlcyBPcmRlcicpDQoJCXsNCgkJDQoJCQkkcmVzdWx0ID0gJGFkYi0+cHF1ZXJ5KCJTRUxFQ1QgKiBGUk9NIHZ0aWdlcl9zb3N0YXR1cyBPUkRFUiBCWSBzb3N0YXR1c2lkIEFTQyIsIGFycmF5KCkpOw0KCQkJJHJvd3MgPSBhcnJheSgpOw0KCQkJaWYgKCRhZGItPm51bV9yb3dzKCRyZXN1bHQpKSB7DQoJCQkJd2hpbGUgKCRyZXN1bHRyb3cgPSAkYWRiLT5mZXRjaF9hcnJheSgkcmVzdWx0KSkgew0KCQkJCQkkcm93W2RlY29kZV9odG1sKCRyZXN1bHRyb3dbJ3Nvc3RhdHVzJ10pXSA9IGRlY29kZV9odG1sKCRyZXN1bHRyb3dbJ3Nvc3RhdHVzJ10pOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQlyZXR1cm4gJHJvdzsNCgkgfQ0KCWZ1bmN0aW9uIGdldERhdGFPbkZ1bm5lbCgkc2FsZXNfc3RhZ2UsJHNhbGVzX3N0YWdlX2FsbCwkbW9kdWxlX25hbWUpDQoJew0KCQkJCQ0KCQkJZ2xvYmFsICRhZGI7DQoJCQkkcm93cyA9IGFycmF5KCk7DQoJCQkJCQ0KCQkJCWlmKGlzX2FycmF5KCRzYWxlc19zdGFnZSkgJiYgY291bnQoJHNhbGVzX3N0YWdlKT09MCkNCgkJCQl7DQoJCQkJCQ0KCQkJCQkkc2FsZXNfc3RhZ2UJPQkkc2FsZXNfc3RhZ2VfYWxsOw0KCQkJCQ0KCQkJCX0NCgkNCgkJCQlmb3JlYWNoKCRzYWxlc19zdGFnZSBhcyAka2V5PT4kdmFsdWUpDQoJCQkJew0KCQkJCQkNCgkJCQkJaWYoJG1vZHVsZV9uYW1lID09ICdPcHBvcnR1bml0aWVzJykNCgkJCQkJew0KCQkJCQkJJHF1ZXJ5CT0JIlNFTEVDVCBjb3VudCgqKSBBUyBjb3VudCAgRlJPTSB2dGlnZXJfcG90ZW50aWFsIElOTkVSIEpPSU4gdnRpZ2VyX2NybWVudGl0eSBPTiB2dGlnZXJfcG90ZW50aWFsLnBvdGVudGlhbGlkID0gdnRpZ2VyX2NybWVudGl0eS5jcm1pZCBMRUZUIEpPSU4gdnRpZ2VyX3VzZXJzIE9OIHZ0aWdlcl9jcm1lbnRpdHkuc21vd25lcmlkID0gdnRpZ2VyX3VzZXJzLmlkIExFRlQgSk9JTiB2dGlnZXJfZ3JvdXBzIE9OIHZ0aWdlcl9jcm1lbnRpdHkuc21vd25lcmlkID0gdnRpZ2VyX2dyb3Vwcy5ncm91cGlkIFdIRVJFIHZ0aWdlcl9jcm1lbnRpdHkuZGVsZXRlZD0wIEFORCB2dGlnZXJfcG90ZW50aWFsLnBvdGVudGlhbGlkID4gMCBBTkQgdnRpZ2VyX3BvdGVudGlhbC5zYWxlc19zdGFnZSA9ICciLiR2YWx1ZS4iJyI7DQoJCQkJCX0NCgkJCQkJaWYoJG1vZHVsZV9uYW1lID09ICdRdW90ZXMnKQ0KCQkJCQl7DQoJCQkJCQkkcXVlcnkJPSJTRUxFQ1QgY291bnQoICogKSBBUyBjb3VudA0KCQkJCQkJCQlGUk9NIHZ0aWdlcl9xdW90ZXMNCgkJCQkJCQkJSU5ORVIgSk9JTiB2dGlnZXJfY3JtZW50aXR5IE9OIHZ0aWdlcl9xdW90ZXMucXVvdGVpZCA9IHZ0aWdlcl9jcm1lbnRpdHkuY3JtaWQNCgkJCQkJCQkJTEVGVCBKT0lOIHZ0aWdlcl91c2VycyBPTiB2dGlnZXJfY3JtZW50aXR5LnNtb3duZXJpZCA9IHZ0aWdlcl91c2Vycy5pZA0KCQkJCQkJCQlMRUZUIEpPSU4gdnRpZ2VyX2dyb3VwcyBPTiB2dGlnZXJfY3JtZW50aXR5LnNtb3duZXJpZCA9IHZ0aWdlcl9ncm91cHMuZ3JvdXBpZA0KCQkJCQkJCQlXSEVSRSB2dGlnZXJfY3JtZW50aXR5LmRlbGV0ZWQgPTANCgkJCQkJCQkJQU5EIHZ0aWdlcl9xdW90ZXMucXVvdGVpZCA+MA0KCQkJCQkJCQlBTkQgdnRpZ2VyX3F1b3Rlcy5xdW90ZXN0YWdlID0nIi4kdmFsdWUuIiciOw0KCQkJCQl9DQoJCQkJCWlmKCRtb2R1bGVfbmFtZSA9PSAnSW52b2ljZScpDQoJCQkJCXsNCgkJCQkJCSRxdWVyeQk9IlNFTEVDVCBjb3VudCggKiApIEFTIGNvdW50DQoJCQkJCQkJCUZST00gdnRpZ2VyX2ludm9pY2UNCgkJCQkJCQkJSU5ORVIgSk9JTiB2dGlnZXJfY3JtZW50aXR5IE9OIHZ0aWdlcl9pbnZvaWNlLmludm9pY2VpZCA9IHZ0aWdlcl9jcm1lbnRpdHkuY3JtaWQNCgkJCQkJCQkJTEVGVCBKT0lOIHZ0aWdlcl91c2VycyBPTiB2dGlnZXJfY3JtZW50aXR5LnNtb3duZXJpZCA9IHZ0aWdlcl91c2Vycy5pZA0KCQkJCQkJCQlMRUZUIEpPSU4gdnRpZ2VyX2dyb3VwcyBPTiB2dGlnZXJfY3JtZW50aXR5LnNtb3duZXJpZCA9IHZ0aWdlcl9ncm91cHMuZ3JvdXBpZA0KCQkJCQkJCQlXSEVSRSB2dGlnZXJfY3JtZW50aXR5LmRlbGV0ZWQgPTANCgkJCQkJCQkJQU5EIHZ0aWdlcl9pbnZvaWNlLmludm9pY2VpZCA+MA0KCQkJCQkJCQlBTkQgdnRpZ2VyX2ludm9pY2UuaW52b2ljZXN0YXR1cyA9JyIuJHZhbHVlLiInIjsNCgkJCQkJfQ0KCQkJCQkNCgkJCQkJaWYoJG1vZHVsZV9uYW1lID09ICdQdXJjaGFzZSBPcmRlcicpDQoJCQkJCXsNCgkJCQkJCSRxdWVyeQk9IlNFTEVDVCBjb3VudCggKiApIEFTIGNvdW50DQoJCQkJCQkJCUZST00gdnRpZ2VyX3B1cmNoYXNlb3JkZXINCgkJCQkJCQkJSU5ORVIgSk9JTiB2dGlnZXJfY3JtZW50aXR5IE9OIHZ0aWdlcl9wdXJjaGFzZW9yZGVyLnB1cmNoYXNlb3JkZXJpZCA9IHZ0aWdlcl9jcm1lbnRpdHkuY3JtaWQNCgkJCQkJCQkJTEVGVCBKT0lOIHZ0aWdlcl91c2VycyBPTiB2dGlnZXJfY3JtZW50aXR5LnNtb3duZXJpZCA9IHZ0aWdlcl91c2Vycy5pZA0KCQkJCQkJCQlMRUZUIEpPSU4gdnRpZ2VyX2dyb3VwcyBPTiB2dGlnZXJfY3JtZW50aXR5LnNtb3duZXJpZCA9IHZ0aWdlcl9ncm91cHMuZ3JvdXBpZA0KCQkJCQkJCQlXSEVSRSB2dGlnZXJfY3JtZW50aXR5LmRlbGV0ZWQgPTANCgkJCQkJCQkJQU5EIHZ0aWdlcl9wdXJjaGFzZW9yZGVyLnB1cmNoYXNlb3JkZXJpZCA+MA0KCQkJCQkJCQlBTkQgdnRpZ2VyX3B1cmNoYXNlb3JkZXIucG9zdGF0dXMgPSciLiR2YWx1ZS4iJyI7DQoJCQkJCX0NCgkJCQkJDQoJCQkJCWlmKCRtb2R1bGVfbmFtZSA9PSAnU2FsZXMgT3JkZXInKQ0KCQkJCQl7DQoJCQkJCQkkcXVlcnkJPSJTRUxFQ1QgY291bnQoICogKSBBUyBjb3VudA0KCQkJCQkJCQlGUk9NIHZ0aWdlcl9zYWxlc29yZGVyDQoJCQkJCQkJCUlOTkVSIEpPSU4gdnRpZ2VyX2NybWVudGl0eSBPTiB2dGlnZXJfc2FsZXNvcmRlci5zYWxlc29yZGVyaWQgPSB2dGlnZXJfY3JtZW50aXR5LmNybWlkDQoJCQkJCQkJCUxFRlQgSk9JTiB2dGlnZXJfdXNlcnMgT04gdnRpZ2VyX2NybWVudGl0eS5zbW93bmVyaWQgPSB2dGlnZXJfdXNlcnMuaWQNCgkJCQkJCQkJTEVGVCBKT0lOIHZ0aWdlcl9ncm91cHMgT04gdnRpZ2VyX2NybWVudGl0eS5zbW93bmVyaWQgPSB2dGlnZXJfZ3JvdXBzLmdyb3VwaWQNCgkJCQkJCQkJV0hFUkUgdnRpZ2VyX2NybWVudGl0eS5kZWxldGVkID0wDQoJCQkJCQkJCUFORCB2dGlnZXJfc2FsZXNvcmRlci5zYWxlc29yZGVyaWQgPjANCgkJCQkJCQkJQU5EIHZ0aWdlcl9zYWxlc29yZGVyLnNvc3RhdHVzID0nIi4kdmFsdWUuIiciOw0KCQkJCQl9CQ0KCQkJCQkJCQkJCQkNCgkJCQkJJHJlc3VsdCA9ICRhZGItPnBxdWVyeSgkcXVlcnksIGFycmF5KCkpOw0KCQkNCgkJCQkJaWYoJGFkYi0+bnVtX3Jvd3MoJHJlc3VsdCk+MCkNCgkJCQkJew0KCQkJCQkJJHJlc3VsdHJvdyAJPSAJJGFkYi0+ZmV0Y2hfYXJyYXkoJHJlc3VsdCk7CQkJCQkJDQoJCQkJCQkkY250CQk9CSRyZXN1bHRyb3dbJ2NvdW50J107DQoJCQkJCQlpZigkY250KQ0KCQkJCQkJew0KCQkJCQkJCSRyb3dbJHZhbHVlXSA9ICRjbnQ7DQoJCQkJCQl9DQoJCQkJCX0JDQoNCgkJCQl9DQoJCQ0KCQlyZXR1cm4gJHJvdzsJDQoJfQ0KCWZ1bmN0aW9uIGdldENoYXJ0RGF0YSgkc2FsZXNfc3RhZ2UsJG1vZHVsZV9uYW1lKXsNCgkJZ2xvYmFsICRhZGI7DQoJCSRyb3dzID0gYXJyYXkoKTsNCgkJaWYoJG1vZHVsZV9uYW1lID09ICdPcHBvcnR1bml0aWVzJykNCgkJewkJCQ0KCQkJJHF1ZXJ5CT0JIlNFTEVDVCB2dGlnZXJfcG90ZW50aWFsLnBvdGVudGlhbF9ubyx2dGlnZXJfcG90ZW50aWFsLnBvdGVudGlhbHR5cGUsdnRpZ2VyX3BvdGVudGlhbC5hbW91bnQsIHZ0aWdlcl9wb3RlbnRpYWwucG90ZW50aWFsbmFtZSwgdnRpZ2VyX3BvdGVudGlhbC5yZWxhdGVkX3RvLCB2dGlnZXJfcG90ZW50aWFsLnNhbGVzX3N0YWdlLCB2dGlnZXJfcG90ZW50aWFsLmxlYWRzb3VyY2UsIHZ0aWdlcl9wb3RlbnRpYWwuY2xvc2luZ2RhdGUsIHZ0aWdlcl9jcm1lbnRpdHkuc21vd25lcmlkLCB2dGlnZXJfcG90ZW50aWFsLnBvdGVudGlhbGlkDQoJCQkJCUZST00gdnRpZ2VyX3BvdGVudGlhbA0KCQkJCQlJTk5FUiBKT0lOIHZ0aWdlcl9jcm1lbnRpdHkgT04gdnRpZ2VyX3BvdGVudGlhbC5wb3RlbnRpYWxpZCA9IHZ0aWdlcl9jcm1lbnRpdHkuY3JtaWQNCgkJCQkJTEVGVCBKT0lOIHZ0aWdlcl91c2VycyBPTiB2dGlnZXJfY3JtZW50aXR5LnNtb3duZXJpZCA9IHZ0aWdlcl91c2Vycy5pZA0KCQkJCQlMRUZUIEpPSU4gdnRpZ2VyX2dyb3VwcyBPTiB2dGlnZXJfY3JtZW50aXR5LnNtb3duZXJpZCA9IHZ0aWdlcl9ncm91cHMuZ3JvdXBpZA0KCQkJCQlXSEVSRSB2dGlnZXJfY3JtZW50aXR5LmRlbGV0ZWQgPTANCgkJCQkJQU5EIHZ0aWdlcl9wb3RlbnRpYWwucG90ZW50aWFsaWQgPjAgIjsJDQoJDQoJCQlpZihpc19hcnJheSgkc2FsZXNfc3RhZ2UpICYmIGNvdW50KCRzYWxlc19zdGFnZSk+MCkNCgkJCXsNCgkJCQkkc3RyCT0JIiciLmltcGxvZGUoIicsJyIsJHNhbGVzX3N0YWdlKS4iJyI7DQoJCQkJDQoJCQkJJHF1ZXJ5Lj0iIEFORCB2dGlnZXJfcG90ZW50aWFsLnNhbGVzX3N0YWdlIElOICgiLiRzdHIuIikiOw0KCQkJfQ0KCQkJJHF1ZXJ5Lj0iIE9SREVSIEJZIHZ0aWdlcl9wb3RlbnRpYWwuc2FsZXNfc3RhZ2UiOw0KCQkJJHJlc3VsdCA9ICRhZGItPnBxdWVyeSgkcXVlcnksIGFycmF5KCkpOwkJDQoJCQlpZiAoJGFkYi0+bnVtX3Jvd3MoJHJlc3VsdCkpIHsNCgkJCQl3aGlsZSAoJHJlc3VsdHJvdyA9ICRhZGItPmZldGNoX2FycmF5KCRyZXN1bHQpKSB7DQoJCQkJCSRyb3dbJHJlc3VsdHJvd1sncG90ZW50aWFsaWQnXV1bInBvdGVudGlhbG5hbWUiXSAJPSBkZWNvZGVfaHRtbCgkcmVzdWx0cm93Wydwb3RlbnRpYWxuYW1lJ10pOw0KCQkJCQkkcm93WyRyZXN1bHRyb3dbJ3BvdGVudGlhbGlkJ11dWyJzYWxlc19zdGFnZSJdIAkJPSBkZWNvZGVfaHRtbCgkcmVzdWx0cm93WydzYWxlc19zdGFnZSddKTsNCgkJCQkJJHJvd1skcmVzdWx0cm93Wydwb3RlbnRpYWxpZCddXVsibGVhZHNvdXJjZSJdIAkJPSBkZWNvZGVfaHRtbCgkcmVzdWx0cm93WydsZWFkc291cmNlJ10pOw0KCQkJCQkkcm93WyRyZXN1bHRyb3dbJ3BvdGVudGlhbGlkJ11dWyJhbW91bnQiXSAJCQk9IGRlY29kZV9odG1sKCRyZXN1bHRyb3dbJ2Ftb3VudCddKTsNCgkJCQkJJHJvd1skcmVzdWx0cm93Wydwb3RlbnRpYWxpZCddXVsicG90ZW50aWFsdHlwZSJdIAk9IGRlY29kZV9odG1sKCRyZXN1bHRyb3dbJ3BvdGVudGlhbHR5cGUnXSk7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCWlmKCRtb2R1bGVfbmFtZSA9PSAnUXVvdGVzJykNCgkJew0KCQkJCSRxdWVyeQk9CSJTRUxFQ1QgdnRpZ2VyX3F1b3Rlcy5xdW90ZV9ubywgdnRpZ2VyX3F1b3Rlcy5zdWJqZWN0LCB2dGlnZXJfcXVvdGVzLnRvdGFsLCB2dGlnZXJfcXVvdGVzLnF1b3Rlc3RhZ2UsIAkJdnRpZ2VyX3F1b3Rlcy52YWxpZHRpbGwsIHZ0aWdlcl9jcm1lbnRpdHkuc21vd25lcmlkLCB2dGlnZXJfcXVvdGVzLnF1b3RlaWQNCglGUk9NIHZ0aWdlcl9xdW90ZXMNCglJTk5FUiBKT0lOIHZ0aWdlcl9jcm1lbnRpdHkgT04gdnRpZ2VyX3F1b3Rlcy5xdW90ZWlkID0gdnRpZ2VyX2NybWVudGl0eS5jcm1pZA0KCUxFRlQgSk9JTiB2dGlnZXJfdXNlcnMgT04gdnRpZ2VyX2NybWVudGl0eS5zbW93bmVyaWQgPSB2dGlnZXJfdXNlcnMuaWQNCglMRUZUIEpPSU4gdnRpZ2VyX2dyb3VwcyBPTiB2dGlnZXJfY3JtZW50aXR5LnNtb3duZXJpZCA9IHZ0aWdlcl9ncm91cHMuZ3JvdXBpZA0KCVdIRVJFIHZ0aWdlcl9jcm1lbnRpdHkuZGVsZXRlZCA9MA0KCUFORCB2dGlnZXJfcXVvdGVzLnF1b3RlaWQgPjAiOwkNCgkNCgkJCWlmKGlzX2FycmF5KCRzYWxlc19zdGFnZSkgJiYgY291bnQoJHNhbGVzX3N0YWdlKT4wKQ0KCQkJew0KCQkJCSRzdHIJPQkiJyIuaW1wbG9kZSgiJywnIiwkc2FsZXNfc3RhZ2UpLiInIjsNCgkJCQkkcXVlcnkuPSIgQU5EIHZ0aWdlcl9xdW90ZXMucXVvdGVzdGFnZSBJTiAoIi4kc3RyLiIpIjsNCgkJCX0NCgkJCSRxdWVyeS49IiBPUkRFUiBCWSB2dGlnZXJfcXVvdGVzLnF1b3Rlc3RhZ2UiOw0KCQkJDQoJCQkkcmVzdWx0ID0gJGFkYi0+cHF1ZXJ5KCRxdWVyeSwgYXJyYXkoKSk7CQkNCgkJCWlmICgkYWRiLT5udW1fcm93cygkcmVzdWx0KSkgew0KCQkJCXdoaWxlICgkcmVzdWx0cm93ID0gJGFkYi0+ZmV0Y2hfYXJyYXkoJHJlc3VsdCkpIHsNCgkJCQkJJHJvd1skcmVzdWx0cm93WydxdW90ZWlkJ11dWyJxdW90ZV9ubyJdIAk9IGRlY29kZV9odG1sKCRyZXN1bHRyb3dbJ3F1b3RlX25vJ10pOw0KCQkJCQkkcm93WyRyZXN1bHRyb3dbJ3F1b3RlaWQnXV1bInN1YmplY3QiXSAJCT0gZGVjb2RlX2h0bWwoJHJlc3VsdHJvd1snc3ViamVjdCddKTsNCgkJCQkJJHJvd1skcmVzdWx0cm93WydxdW90ZWlkJ11dWyJxdW90ZXN0YWdlIl0gCQk9IGRlY29kZV9odG1sKCRyZXN1bHRyb3dbJ3F1b3Rlc3RhZ2UnXSk7DQoJCQkJCSRyb3dbJHJlc3VsdHJvd1sncXVvdGVpZCddXVsidG90YWwiXSAJCQk9IGRlY29kZV9odG1sKCRyZXN1bHRyb3dbJ3RvdGFsJ10pOw0KCQkJCQkkcm93WyRyZXN1bHRyb3dbJ3F1b3RlaWQnXV1bInZhbGlkdGlsbCJdIAk9IGRlY29kZV9odG1sKCRyZXN1bHRyb3dbJ3ZhbGlkdGlsbCddKTsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJaWYoJG1vZHVsZV9uYW1lID09ICdJbnZvaWNlJykNCgkJew0KCQkJJHF1ZXJ5CT0JIlNFTEVDVCB2dGlnZXJfaW52b2ljZS5pbnZvaWNlX25vLCB2dGlnZXJfaW52b2ljZS5zdWJqZWN0LHZ0aWdlcl9pbnZvaWNlLmludm9pY2VzdGF0dXMsCQl2dGlnZXJfaW52b2ljZS5pbnZvaWNlZGF0ZSx2dGlnZXJfaW52b2ljZS50b3RhbCx2dGlnZXJfY3JtZW50aXR5LnNtb3duZXJpZCwgdnRpZ2VyX2ludm9pY2UuaW52b2ljZWlkDQoJRlJPTSB2dGlnZXJfaW52b2ljZQ0KCUlOTkVSIEpPSU4gdnRpZ2VyX2NybWVudGl0eSBPTiB2dGlnZXJfaW52b2ljZS5pbnZvaWNlaWQgPSB2dGlnZXJfY3JtZW50aXR5LmNybWlkDQoJTEVGVCBKT0lOIHZ0aWdlcl91c2VycyBPTiB2dGlnZXJfY3JtZW50aXR5LnNtb3duZXJpZCA9IHZ0aWdlcl91c2Vycy5pZA0KCUxFRlQgSk9JTiB2dGlnZXJfZ3JvdXBzIE9OIHZ0aWdlcl9jcm1lbnRpdHkuc21vd25lcmlkID0gdnRpZ2VyX2dyb3Vwcy5ncm91cGlkDQoJV0hFUkUgdnRpZ2VyX2NybWVudGl0eS5kZWxldGVkID0wDQoJQU5EIHZ0aWdlcl9pbnZvaWNlLmludm9pY2VpZCA+MCI7CQ0KCQ0KCQkJaWYoaXNfYXJyYXkoJHNhbGVzX3N0YWdlKSAmJiBjb3VudCgkc2FsZXNfc3RhZ2UpPjApDQoJCQl7DQoJCQkJJHN0cgk9CSInIi5pbXBsb2RlKCInLCciLCRzYWxlc19zdGFnZSkuIiciOw0KCQkJCSRxdWVyeS49IiBBTkQgdnRpZ2VyX2ludm9pY2UuaW52b2ljZXN0YXR1cyBJTiAoIi4kc3RyLiIpIjsNCgkJCX0NCgkJCSRxdWVyeS49IiBPUkRFUiBCWSB2dGlnZXJfaW52b2ljZS5pbnZvaWNlc3RhdHVzIjsNCgkJCQ0KCQkJJHJlc3VsdCA9ICRhZGItPnBxdWVyeSgkcXVlcnksIGFycmF5KCkpOwkJDQoJCQlpZiAoJGFkYi0+bnVtX3Jvd3MoJHJlc3VsdCkpIHsNCgkJCQl3aGlsZSAoJHJlc3VsdHJvdyA9ICRhZGItPmZldGNoX2FycmF5KCRyZXN1bHQpKSB7DQoJCQkJCSRyb3dbJHJlc3VsdHJvd1snaW52b2ljZWlkJ11dWyJpbnZvaWNlX25vIl0gCT0gZGVjb2RlX2h0bWwoJHJlc3VsdHJvd1snaW52b2ljZV9ubyddKTsNCgkJCQkJJHJvd1skcmVzdWx0cm93WydpbnZvaWNlaWQnXV1bInN1YmplY3QiXSAJCT0gZGVjb2RlX2h0bWwoJHJlc3VsdHJvd1snc3ViamVjdCddKTsNCgkJCQkJJHJvd1skcmVzdWx0cm93WydpbnZvaWNlaWQnXV1bImludm9pY2VzdGF0dXMiXSAJPSBkZWNvZGVfaHRtbCgkcmVzdWx0cm93WydpbnZvaWNlc3RhdHVzJ10pOw0KCQkJCQkkcm93WyRyZXN1bHRyb3dbJ2ludm9pY2VpZCddXVsiaW52b2ljZWRhdGUiXSAJPSBkZWNvZGVfaHRtbCgkcmVzdWx0cm93WydpbnZvaWNlZGF0ZSddKTsNCgkJCQkJJHJvd1skcmVzdWx0cm93WydpbnZvaWNlaWQnXV1bInRvdGFsIl0gCQkJPSBkZWNvZGVfaHRtbCgkcmVzdWx0cm93Wyd0b3RhbCddKTsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJDQoJCWlmKCRtb2R1bGVfbmFtZSA9PSAnUHVyY2hhc2UgT3JkZXInKQ0KCQl7DQoJCQkkcXVlcnkJPSJTRUxFQ1QgdnRpZ2VyX3B1cmNoYXNlb3JkZXIucHVyY2hhc2VvcmRlcl9ubyx2dGlnZXJfcHVyY2hhc2VvcmRlci5zdWJqZWN0LHZ0aWdlcl9wdXJjaGFzZW9yZGVyLnRvdGFsLCB2dGlnZXJfcHVyY2hhc2VvcmRlci5wb3N0YXR1cyx2dGlnZXJfcHVyY2hhc2VvcmRlci5yZXF1aXNpdGlvbl9ubywgdnRpZ2VyX2NybWVudGl0eS5zbW93bmVyaWQsIHZ0aWdlcl9wdXJjaGFzZW9yZGVyLnB1cmNoYXNlb3JkZXJpZA0KCUZST00gdnRpZ2VyX3B1cmNoYXNlb3JkZXINCglJTk5FUiBKT0lOIHZ0aWdlcl9jcm1lbnRpdHkgT04gdnRpZ2VyX3B1cmNoYXNlb3JkZXIucHVyY2hhc2VvcmRlcmlkID0gdnRpZ2VyX2NybWVudGl0eS5jcm1pZA0KCUxFRlQgSk9JTiB2dGlnZXJfdXNlcnMgT04gdnRpZ2VyX2NybWVudGl0eS5zbW93bmVyaWQgPSB2dGlnZXJfdXNlcnMuaWQNCglMRUZUIEpPSU4gdnRpZ2VyX2dyb3VwcyBPTiB2dGlnZXJfY3JtZW50aXR5LnNtb3duZXJpZCA9IHZ0aWdlcl9ncm91cHMuZ3JvdXBpZA0KCVdIRVJFIHZ0aWdlcl9jcm1lbnRpdHkuZGVsZXRlZCA9MA0KCUFORCB2dGlnZXJfcHVyY2hhc2VvcmRlci5wdXJjaGFzZW9yZGVyaWQgPjAiOwkNCgkNCgkJCWlmKGlzX2FycmF5KCRzYWxlc19zdGFnZSkgJiYgY291bnQoJHNhbGVzX3N0YWdlKT4wKQ0KCQkJew0KCQkJCSRzdHIJPQkiJyIuaW1wbG9kZSgiJywnIiwkc2FsZXNfc3RhZ2UpLiInIjsNCgkJCQkkcXVlcnkuPSIgQU5EIHZ0aWdlcl9wdXJjaGFzZW9yZGVyLnBvc3RhdHVzIElOICgiLiRzdHIuIikiOw0KCQkJfQ0KCQkJJHF1ZXJ5Lj0iIE9SREVSIEJZIHZ0aWdlcl9wdXJjaGFzZW9yZGVyLnBvc3RhdHVzIjsNCgkJCQ0KCQkJJHJlc3VsdCA9ICRhZGItPnBxdWVyeSgkcXVlcnksIGFycmF5KCkpOwkJDQoJCQlpZiAoJGFkYi0+bnVtX3Jvd3MoJHJlc3VsdCkpIHsNCgkJCQl3aGlsZSAoJHJlc3VsdHJvdyA9ICRhZGItPmZldGNoX2FycmF5KCRyZXN1bHQpKSB7DQoJCQkJCSRyb3dbJHJlc3VsdHJvd1sncHVyY2hhc2VvcmRlcmlkJ11dWyJwdXJjaGFzZW9yZGVyX25vIl0gPSBkZWNvZGVfaHRtbCgkcmVzdWx0cm93WydwdXJjaGFzZW9yZGVyX25vJ10pOw0KCQkJCQkkcm93WyRyZXN1bHRyb3dbJ3B1cmNoYXNlb3JkZXJpZCddXVsic3ViamVjdCJdIAkJCT0gZGVjb2RlX2h0bWwoJHJlc3VsdHJvd1snc3ViamVjdCddKTsNCgkJCQkJJHJvd1skcmVzdWx0cm93WydwdXJjaGFzZW9yZGVyaWQnXV1bInBvc3RhdHVzIl0gCQk9IGRlY29kZV9odG1sKCRyZXN1bHRyb3dbJ3Bvc3RhdHVzJ10pOw0KCQkJCQkkcm93WyRyZXN1bHRyb3dbJ3B1cmNoYXNlb3JkZXJpZCddXVsidG90YWwiXSAJCQk9IGRlY29kZV9odG1sKCRyZXN1bHRyb3dbJ3RvdGFsJ10pOw0KCQkJCQkkcm93WyRyZXN1bHRyb3dbJ3B1cmNoYXNlb3JkZXJpZCddXVsicmVxdWlzaXRpb25fbm8iXSAJPSBkZWNvZGVfaHRtbCgkcmVzdWx0cm93WydyZXF1aXNpdGlvbl9ubyddKTsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJDQoJCWlmKCRtb2R1bGVfbmFtZSA9PSAnU2FsZXMgT3JkZXInKQ0KCQl7DQoJCQkkcXVlcnkJPQkiU0VMRUNUIHZ0aWdlcl9zYWxlc29yZGVyLnNhbGVzb3JkZXJfbm8sIHZ0aWdlcl9zYWxlc29yZGVyLnN1YmplY3QsIHZ0aWdlcl9zYWxlc29yZGVyLnRvdGFsLCB2dGlnZXJfc2FsZXNvcmRlci5zb3N0YXR1cywgdnRpZ2VyX3NhbGVzb3JkZXIuZHVlZGF0ZSwgdnRpZ2VyX2NybWVudGl0eS5zbW93bmVyaWQsIHZ0aWdlcl9zYWxlc29yZGVyLnNhbGVzb3JkZXJpZA0KCUZST00gdnRpZ2VyX3NhbGVzb3JkZXINCglJTk5FUiBKT0lOIHZ0aWdlcl9jcm1lbnRpdHkgT04gdnRpZ2VyX3NhbGVzb3JkZXIuc2FsZXNvcmRlcmlkID0gdnRpZ2VyX2NybWVudGl0eS5jcm1pZA0KCUxFRlQgSk9JTiB2dGlnZXJfdXNlcnMgT04gdnRpZ2VyX2NybWVudGl0eS5zbW93bmVyaWQgPSB2dGlnZXJfdXNlcnMuaWQNCglMRUZUIEpPSU4gdnRpZ2VyX2dyb3VwcyBPTiB2dGlnZXJfY3JtZW50aXR5LnNtb3duZXJpZCA9IHZ0aWdlcl9ncm91cHMuZ3JvdXBpZA0KCVdIRVJFIHZ0aWdlcl9jcm1lbnRpdHkuZGVsZXRlZCA9MA0KCUFORCB2dGlnZXJfc2FsZXNvcmRlci5zYWxlc29yZGVyaWQgPjAiOwkNCgkNCgkJCWlmKGlzX2FycmF5KCRzYWxlc19zdGFnZSkgJiYgY291bnQoJHNhbGVzX3N0YWdlKT4wKQ0KCQkJew0KCQkJCSRzdHIJPQkiJyIuaW1wbG9kZSgiJywnIiwkc2FsZXNfc3RhZ2UpLiInIjsNCgkJCQkkcXVlcnkuPSIgQU5EIHZ0aWdlcl9zYWxlc29yZGVyLnNvc3RhdHVzIElOICgiLiRzdHIuIikiOw0KCQkJfQ0KCQkJJHF1ZXJ5Lj0iIE9SREVSIEJZIHZ0aWdlcl9zYWxlc29yZGVyLnNvc3RhdHVzIjsNCgkJCQ0KCQkJJHJlc3VsdCA9ICRhZGItPnBxdWVyeSgkcXVlcnksIGFycmF5KCkpOwkJDQoJCQlpZiAoJGFkYi0+bnVtX3Jvd3MoJHJlc3VsdCkpIHsNCgkJCQl3aGlsZSAoJHJlc3VsdHJvdyA9ICRhZGItPmZldGNoX2FycmF5KCRyZXN1bHQpKSB7DQoJCQkJCSRyb3dbJHJlc3VsdHJvd1snc2FsZXNvcmRlcmlkJ11dWyJzYWxlc29yZGVyX25vIl0gCT0gZGVjb2RlX2h0bWwoJHJlc3VsdHJvd1snc2FsZXNvcmRlcl9ubyddKTsNCgkJCQkJJHJvd1skcmVzdWx0cm93WydzYWxlc29yZGVyaWQnXV1bInN1YmplY3QiXSAJCT0gZGVjb2RlX2h0bWwoJHJlc3VsdHJvd1snc3ViamVjdCddKTsNCgkJCQkJJHJvd1skcmVzdWx0cm93WydzYWxlc29yZGVyaWQnXV1bInNvc3RhdHVzIl0gCQk9IGRlY29kZV9odG1sKCRyZXN1bHRyb3dbJ3Nvc3RhdHVzJ10pOw0KCQkJCQkkcm93WyRyZXN1bHRyb3dbJ3NhbGVzb3JkZXJpZCddXVsidG90YWwiXSAJCQk9IGRlY29kZV9odG1sKCRyZXN1bHRyb3dbJ3RvdGFsJ10pOw0KCQkJCQkkcm93WyRyZXN1bHRyb3dbJ3NhbGVzb3JkZXJpZCddXVsiZHVlZGF0ZSJdIAkJPSBkZWNvZGVfaHRtbCgkcmVzdWx0cm93WydkdWVkYXRlJ10pOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQlyZXR1cm4gJHJvdzsNCgl9DQoJZnVuY3Rpb24gZ2V0QWxsU3RhZ2VzKCRmbGFnPTApIHsNCgkNCgkJZ2xvYmFsICRhZGIsJG1vZF9zdHJpbmdzOw0KCQkNCgkNCgkJJHJlc3VsdCA9ICRhZGItPnBxdWVyeSgiU0VMRUNUICogRlJPTSB2dGlnZXJfc2FsZXNfc3RhZ2UgT1JERVIgQlkgc2FsZXNfc3RhZ2VfaWQgQVNDIiwgYXJyYXkoKSk7CQkNCgkJJHJvd3MgPSBhcnJheSgpOw0KCQkNCgkJaWYgKCRhZGItPm51bV9yb3dzKCRyZXN1bHQpKSB7DQoJCQl3aGlsZSAoJHJlc3VsdHJvdyA9ICRhZGItPmZldGNoX2FycmF5KCRyZXN1bHQpKSB7CQkJDQoJCQkJaWYoJGZsYWcpDQoJCQkJew0KCQkJCQlpZigkbW9kX3N0cmluZ3NbJHJlc3VsdHJvd1snc2FsZXNfc3RhZ2UnXV0pDQoJCQkJCXsNCgkJCQkJCSRyb3dbZGVjb2RlX2h0bWwoJHJlc3VsdHJvd1snc2FsZXNfc3RhZ2UnXSldID0gZGVjb2RlX2h0bWwoJG1vZF9zdHJpbmdzWyRyZXN1bHRyb3dbJ3NhbGVzX3N0YWdlJ11dKTsNCgkJCQkJfWVsc2V7DQoJCQkJCQkkcm93W2RlY29kZV9odG1sKCRyZXN1bHRyb3dbJ3NhbGVzX3N0YWdlJ10pXSA9IGRlY29kZV9odG1sKCRyZXN1bHRyb3dbJ3NhbGVzX3N0YWdlJ10pOw0KCQkJCQl9DQoJCQkJfWVsc2V7DQoJCQkJCSRyb3dbZGVjb2RlX2h0bWwoJHJlc3VsdHJvd1snc2FsZXNfc3RhZ2UnXSldID0gZGVjb2RlX2h0bWwoJHJlc3VsdHJvd1snc2FsZXNfc3RhZ2UnXSk7DQoJCQkJfQ0KCQkJCQ0KCQkJDQoJCQl9DQoJCX0NCgkJDQoJCXJldHVybiAkcm93Ow0KCQkNCgkJDQoJfQ0KCQ0KCWZ1bmN0aW9uIGdldFN0YWdlc0RhdGFGdW5uZWwoJHNhbGVzX3N0YWdlLCRzYWxlc19zdGFnZV9hbGwpDQoJew0KCQkJDQoJCQlnbG9iYWwgJGFkYjsNCgkJCSRyb3dzID0gYXJyYXkoKTsNCgkJCQkJDQoJCQkJaWYoaXNfYXJyYXkoJHNhbGVzX3N0YWdlKSAmJiBjb3VudCgkc2FsZXNfc3RhZ2UpPT0wKQ0KCQkJCXsNCgkJCQkJDQoJCQkJCSRzYWxlc19zdGFnZQk9CSRzYWxlc19zdGFnZV9hbGw7DQoJCQkJDQoJCQkJfQ0KCQ0KCQkJCWZvcmVhY2goJHNhbGVzX3N0YWdlIGFzICRrZXk9PiR2YWx1ZSkNCgkJCQl7DQoJCQkJCQ0KCQkJCQkkcXVlcnkJPQkiU0VMRUNUIGNvdW50KCopIEFTIGNvdW50ICBGUk9NIHZ0aWdlcl9wb3RlbnRpYWwgSU5ORVIgSk9JTiB2dGlnZXJfY3JtZW50aXR5IE9OIHZ0aWdlcl9wb3RlbnRpYWwucG90ZW50aWFsaWQgPSB2dGlnZXJfY3JtZW50aXR5LmNybWlkIExFRlQgSk9JTiB2dGlnZXJfdXNlcnMgT04gdnRpZ2VyX2NybWVudGl0eS5zbW93bmVyaWQgPSB2dGlnZXJfdXNlcnMuaWQgTEVGVCBKT0lOIHZ0aWdlcl9ncm91cHMgT04gdnRpZ2VyX2NybWVudGl0eS5zbW93bmVyaWQgPSB2dGlnZXJfZ3JvdXBzLmdyb3VwaWQgV0hFUkUgdnRpZ2VyX2NybWVudGl0eS5kZWxldGVkPTAgQU5EIHZ0aWdlcl9wb3RlbnRpYWwucG90ZW50aWFsaWQgPiAwIEFORCB2dGlnZXJfcG90ZW50aWFsLnNhbGVzX3N0YWdlID0gJyIuJHZhbHVlLiInIjsNCgkJCQkJJHJlc3VsdCA9ICRhZGItPnBxdWVyeSgkcXVlcnksIGFycmF5KCkpOw0KCQkNCgkJCQkJaWYoJGFkYi0+bnVtX3Jvd3MoJHJlc3VsdCk+MCkNCgkJCQkJew0KCQkJCQkJJHJlc3VsdHJvdyAJPSAJJGFkYi0+ZmV0Y2hfYXJyYXkoJHJlc3VsdCk7CQkJCQkJDQoJCQkJCQkkY250CQk9CSRyZXN1bHRyb3dbJ2NvdW50J107DQoJCQkJCQlpZigkY250KQ0KCQkJCQkJew0KCQkJCQkJCSRyb3dbJHZhbHVlXSA9ICRjbnQ7DQoJCQkJCQl9DQoJCQkJCX0JDQoNCgkJCQl9DQoJCQ0KCQlyZXR1cm4gJHJvdzsNCgl9DQoJDQoJZnVuY3Rpb24gcmFuZF9jb2xvckNvZGUoKXsNCgkJJHIgPSBkZWNoZXgobXRfcmFuZCgwLDI1NSkpOyAvLyBnZW5lcmF0ZSB0aGUgcmVkIGNvbXBvbmVudA0KCQkkZyA9IGRlY2hleChtdF9yYW5kKDAsMjU1KSk7IC8vIGdlbmVyYXRlIHRoZSBncmVlbiBjb21wb25lbnQNCgkJJGIgPSBkZWNoZXgobXRfcmFuZCgwLDI1NSkpOyAvLyBnZW5lcmF0ZSB0aGUgYmx1ZSBjb21wb25lbnQNCgkJJHJnYiA9ICRyLiRnLiRiOw0KCQlpZigkciA9PSAkZyAmJiAkZyA9PSAkYil7DQoJCQkkcmdiID0gc3Vic3RyKCRyZ2IsMCwzKTsgLy8gc2hvcnRlciB2ZXJzaW9uDQoJCX0NCgkJcmV0dXJuICcjJy4kcmdiOw0KCX0NCg0KCQ0KCWZ1bmN0aW9uIGdldFN0YWdlc0RhdGEoJHNhbGVzX3N0YWdlKQ0KCXsNCgkJCWdsb2JhbCAkYWRiLCRtb2Rfc3RyaW5nczsNCgkJCSRyb3dzID0gYXJyYXkoKTsNCgkJCSRxdWVyeQk9CSJTRUxFQ1QgdnRpZ2VyX3BvdGVudGlhbC5wb3RlbnRpYWxfbm8sdnRpZ2VyX3BvdGVudGlhbC5wb3RlbnRpYWx0eXBlLHZ0aWdlcl9wb3RlbnRpYWwuYW1vdW50LCB2dGlnZXJfcG90ZW50aWFsLnBvdGVudGlhbG5hbWUsIHZ0aWdlcl9wb3RlbnRpYWwucmVsYXRlZF90bywgdnRpZ2VyX3BvdGVudGlhbC5zYWxlc19zdGFnZSwgdnRpZ2VyX3BvdGVudGlhbC5sZWFkc291cmNlLCB2dGlnZXJfcG90ZW50aWFsLmNsb3NpbmdkYXRlLCB2dGlnZXJfY3JtZW50aXR5LnNtb3duZXJpZCwgdnRpZ2VyX3BvdGVudGlhbC5wb3RlbnRpYWxpZA0KCQkJCUZST00gdnRpZ2VyX3BvdGVudGlhbA0KCQkJCUlOTkVSIEpPSU4gdnRpZ2VyX2NybWVudGl0eSBPTiB2dGlnZXJfcG90ZW50aWFsLnBvdGVudGlhbGlkID0gdnRpZ2VyX2NybWVudGl0eS5jcm1pZA0KCQkJCUxFRlQgSk9JTiB2dGlnZXJfdXNlcnMgT04gdnRpZ2VyX2NybWVudGl0eS5zbW93bmVyaWQgPSB2dGlnZXJfdXNlcnMuaWQNCgkJCQlMRUZUIEpPSU4gdnRpZ2VyX2dyb3VwcyBPTiB2dGlnZXJfY3JtZW50aXR5LnNtb3duZXJpZCA9IHZ0aWdlcl9ncm91cHMuZ3JvdXBpZA0KCQkJCVdIRVJFIHZ0aWdlcl9jcm1lbnRpdHkuZGVsZXRlZCA9MA0KCQkJCUFORCB2dGlnZXJfcG90ZW50aWFsLnBvdGVudGlhbGlkID4wICI7CQ0KDQoJCWlmKGlzX2FycmF5KCRzYWxlc19zdGFnZSkgJiYgY291bnQoJHNhbGVzX3N0YWdlKT4wKQ0KCQl7DQoJCQkkc3RyCT0JIiciLmltcGxvZGUoIicsJyIsJHNhbGVzX3N0YWdlKS4iJyI7DQoJCQkkcXVlcnkuPSIgQU5EIHZ0aWdlcl9wb3RlbnRpYWwuc2FsZXNfc3RhZ2UgSU4gKCIuJHN0ci4iKSI7DQoJCX0NCgkJJHF1ZXJ5Lj0iIE9SREVSIEJZIHZ0aWdlcl9wb3RlbnRpYWwuc2FsZXNfc3RhZ2UiOw0KCQkkcmVzdWx0ID0gJGFkYi0+cHF1ZXJ5KCRxdWVyeSwgYXJyYXkoKSk7CQkNCgkJaWYgKCRhZGItPm51bV9yb3dzKCRyZXN1bHQpKSB7DQoJCQl3aGlsZSAoJHJlc3VsdHJvdyA9ICRhZGItPmZldGNoX2FycmF5KCRyZXN1bHQpKSB7DQoJCQkJJHJvd1skcmVzdWx0cm93Wydwb3RlbnRpYWxpZCddXVsicG90ZW50aWFsbmFtZSJdIAk9IGRlY29kZV9odG1sKCRyZXN1bHRyb3dbJ3BvdGVudGlhbG5hbWUnXSk7DQoJCQkJJHJvd1skcmVzdWx0cm93Wydwb3RlbnRpYWxpZCddXVsic2FsZXNfc3RhZ2UiXSAJCT0gZGVjb2RlX2h0bWwoJHJlc3VsdHJvd1snc2FsZXNfc3RhZ2UnXSk7DQoJCQkJJHJvd1skcmVzdWx0cm93Wydwb3RlbnRpYWxpZCddXVsibGVhZHNvdXJjZSJdIAkJPSBkZWNvZGVfaHRtbCgkcmVzdWx0cm93WydsZWFkc291cmNlJ10pOw0KCQkJCSRyb3dbJHJlc3VsdHJvd1sncG90ZW50aWFsaWQnXV1bImFtb3VudCJdIAkJCT0gZGVjb2RlX2h0bWwoJHJlc3VsdHJvd1snYW1vdW50J10pOw0KCQkJCSRyb3dbJHJlc3VsdHJvd1sncG90ZW50aWFsaWQnXV1bInBvdGVudGlhbHR5cGUiXSAJPSBkZWNvZGVfaHRtbCgkcmVzdWx0cm93Wydwb3RlbnRpYWx0eXBlJ10pOw0KCQkJfQ0KCQl9DQoJCXJldHVybiAkcm93Ow0KCQ0KCX0NCglmdW5jdGlvbiBnZXRBbGxTdGFnZXNRdW90ZSgpIHsNCgkJZ2xvYmFsICRhZGI7DQoJCQkkcmVzdWx0ID0gJGFkYi0+cHF1ZXJ5KCJTRUxFQ1QgKiBGUk9NIHZ0aWdlcl9xdW90ZXN0YWdlIE9SREVSIEJZIHF1b3Rlc3RhZ2VpZCBBU0MiLCBhcnJheSgpKTsNCgkJCSRyb3dzID0gYXJyYXkoKTsNCgkJCWlmICgkYWRiLT5udW1fcm93cygkcmVzdWx0KSkgew0KCQkJCXdoaWxlICgkcmVzdWx0cm93ID0gJGFkYi0+ZmV0Y2hfYXJyYXkoJHJlc3VsdCkpIHsNCgkJCQkJJHJvd1tkZWNvZGVfaHRtbCgkcmVzdWx0cm93WydxdW90ZXN0YWdlJ10pXSA9IGRlY29kZV9odG1sKCRyZXN1bHRyb3dbJ3F1b3Rlc3RhZ2UnXSk7DQoJCQkJfQ0KCQkJfQ0KCQkNCgkJcmV0dXJuICRyb3c7DQoJfQ0KCWZ1bmN0aW9uIGdldEFsbFN0YWdlc0ludm9pY2UoKSB7DQoJCWdsb2JhbCAkYWRiOw0KCQkJJHJlc3VsdCA9ICRhZGItPnBxdWVyeSgiU0VMRUNUICogRlJPTSB2dGlnZXJfaW52b2ljZXN0YXR1cyBPUkRFUiBCWSBpbnZvaWNlc3RhdHVzaWQgQVNDIiwgYXJyYXkoKSk7DQoJCQkkcm93cyA9IGFycmF5KCk7DQoJCQlpZiAoJGFkYi0+bnVtX3Jvd3MoJHJlc3VsdCkpIHsNCgkJCQl3aGlsZSAoJHJlc3VsdHJvdyA9ICRhZGItPmZldGNoX2FycmF5KCRyZXN1bHQpKSB7DQoJCQkJCSRyb3dbZGVjb2RlX2h0bWwoJHJlc3VsdHJvd1snaW52b2ljZXN0YXR1cyddKV0gPSBkZWNvZGVfaHRtbCgkcmVzdWx0cm93WydpbnZvaWNlc3RhdHVzJ10pOw0KCQkJCX0NCgkJCX0NCgkJDQoJCXJldHVybiAkcm93Ow0KCX0NCglmdW5jdGlvbiBnZXRBbGxTdGFnZXNTTygpIHsNCgkJZ2xvYmFsICRhZGI7DQoJCQkkcmVzdWx0ID0gJGFkYi0+cHF1ZXJ5KCJTRUxFQ1QgKiBGUk9NIHZ0aWdlcl9zb3N0YXR1cyBPUkRFUiBCWSBzb3N0YXR1c2lkIEFTQyIsIGFycmF5KCkpOw0KCQkJJHJvd3MgPSBhcnJheSgpOw0KCQkJaWYgKCRhZGItPm51bV9yb3dzKCRyZXN1bHQpKSB7DQoJCQkJd2hpbGUgKCRyZXN1bHRyb3cgPSAkYWRiLT5mZXRjaF9hcnJheSgkcmVzdWx0KSkgew0KCQkJCQkkcm93W2RlY29kZV9odG1sKCRyZXN1bHRyb3dbJ3Nvc3RhdHVzJ10pXSA9IGRlY29kZV9odG1sKCRyZXN1bHRyb3dbJ3Nvc3RhdHVzJ10pOw0KCQkJCX0NCgkJCX0NCgkJDQoJCXJldHVybiAkcm93Ow0KCX0NCgkJZnVuY3Rpb24gZ2V0QWxsU3RhZ2VzUE8oKSB7DQoJCWdsb2JhbCAkYWRiOw0KCQkJJHJlc3VsdCA9ICRhZGItPnBxdWVyeSgiU0VMRUNUICogRlJPTSB2dGlnZXJfcG9zdGF0dXMgT1JERVIgQlkgcG9zdGF0dXNpZCBBU0MiLCBhcnJheSgpKTsNCgkJCSRyb3dzID0gYXJyYXkoKTsNCgkJCWlmICgkYWRiLT5udW1fcm93cygkcmVzdWx0KSkgew0KCQkJCXdoaWxlICgkcmVzdWx0cm93ID0gJGFkYi0+ZmV0Y2hfYXJyYXkoJHJlc3VsdCkpIHsNCgkJCQkJJHJvd1tkZWNvZGVfaHRtbCgkcmVzdWx0cm93Wydwb3N0YXR1cyddKV0gPSBkZWNvZGVfaHRtbCgkcmVzdWx0cm93Wydwb3N0YXR1cyddKTsNCgkJCQl9DQoJCQl9DQoJCQ0KCQlyZXR1cm4gJHJvdzsNCgl9DQoJZnVuY3Rpb24gZ2V0U3RhZ2VzRGF0YUZ1bm5lbFF1b3RlKCRzYWxlc19zdGFnZSwkc2FsZXNfc3RhZ2VfYWxsKQ0KCXsNCgkJCWdsb2JhbCAkYWRiOw0KCQkJJHJvd3MgPSBhcnJheSgpOw0KCQkJCQkNCgkJCQlpZihpc19hcnJheSgkc2FsZXNfc3RhZ2UpICYmIGNvdW50KCRzYWxlc19zdGFnZSk9PTApDQoJCQkJew0KCQkJCQkNCgkJCQkJJHNhbGVzX3N0YWdlCT0JJHNhbGVzX3N0YWdlX2FsbDsNCgkJCQkNCgkJCQl9DQoJDQoJCQkJZm9yZWFjaCgkc2FsZXNfc3RhZ2UgYXMgJGtleT0+JHZhbHVlKQ0KCQkJCXsNCgkJCQkJDQoJCQkJCSRxdWVyeQk9CSJTRUxFQ1QgY291bnQoICogKSBBUyBjb3VudA0KCQkJCQkJCQlGUk9NIHZ0aWdlcl9xdW90ZXN0YWdlDQoJCQkJCQkJCUlOTkVSIEpPSU4gdnRpZ2VyX2NybWVudGl0eSBPTiB2dGlnZXJfcXVvdGVzdGFnZS5xdW90ZXN0YWdlaWQgPSB2dGlnZXJfY3JtZW50aXR5LmNybWlkDQoJCQkJCQkJCUxFRlQgSk9JTiB2dGlnZXJfdXNlcnMgT04gdnRpZ2VyX2NybWVudGl0eS5zbW93bmVyaWQgPSB2dGlnZXJfdXNlcnMuaWQNCgkJCQkJCQkJTEVGVCBKT0lOIHZ0aWdlcl9ncm91cHMgT04gdnRpZ2VyX2NybWVudGl0eS5zbW93bmVyaWQgPSB2dGlnZXJfZ3JvdXBzLmdyb3VwaWQNCgkJCQkJCQkJV0hFUkUgdnRpZ2VyX2NybWVudGl0eS5kZWxldGVkID0wDQoJCQkJCQkJCUFORCB2dGlnZXJfcXVvdGVzdGFnZS5xdW90ZXN0YWdlaWQgPjANCgkJCQkJCQkJQU5EIHZ0aWdlcl9xdW90ZXN0YWdlLnF1b3Rlc3RhZ2UgPSciLiR2YWx1ZS4iJyI7DQoJCQkJCSRyZXN1bHQgPSAkYWRiLT5wcXVlcnkoJHF1ZXJ5LCBhcnJheSgpKTsNCgkJDQoJCQkJCWlmKCRhZGItPm51bV9yb3dzKCRyZXN1bHQpPjApDQoJCQkJCXsNCgkJCQkJCSRyZXN1bHRyb3cgCT0gCSRhZGItPmZldGNoX2FycmF5KCRyZXN1bHQpOwkJCQkJCQ0KCQkJCQkJJGNudAkJPQkkcmVzdWx0cm93Wydjb3VudCddOw0KCQkJCQkJaWYoJGNudCkNCgkJCQkJCXsNCgkJCQkJCQkkcm93WyR2YWx1ZV0gPSAkY250Ow0KCQkJCQkJfQ0KCQkJCQl9CQ0KDQoJCQkJfQ0KCQkNCgkJcmV0dXJuICRyb3c7DQoJfQ0KCWZ1bmN0aW9uIGdldFN0YWdlc0RhdGFRdW90ZSgkc2FsZXNfc3RhZ2UpDQoJew0KCQkJZ2xvYmFsICRhZGIsJG1vZF9zdHJpbmdzOw0KCQkJJHJvd3MgPSBhcnJheSgpOw0KCQkJJHF1ZXJ5CT0JIlNFTEVDVCB2dGlnZXJfcXVvdGVzLnF1b3RlX25vLCB2dGlnZXJfcXVvdGVzLnN1YmplY3QsIHZ0aWdlcl9xdW90ZXMudG90YWwsIHZ0aWdlcl9xdW90ZXMucXVvdGVzdGFnZSwgCQl2dGlnZXJfcXVvdGVzLnZhbGlkdGlsbCwgdnRpZ2VyX2NybWVudGl0eS5zbW93bmVyaWQsIHZ0aWdlcl9xdW90ZXMucXVvdGVpZA0KRlJPTSB2dGlnZXJfcXVvdGVzDQpJTk5FUiBKT0lOIHZ0aWdlcl9jcm1lbnRpdHkgT04gdnRpZ2VyX3F1b3Rlcy5xdW90ZWlkID0gdnRpZ2VyX2NybWVudGl0eS5jcm1pZA0KTEVGVCBKT0lOIHZ0aWdlcl91c2VycyBPTiB2dGlnZXJfY3JtZW50aXR5LnNtb3duZXJpZCA9IHZ0aWdlcl91c2Vycy5pZA0KTEVGVCBKT0lOIHZ0aWdlcl9ncm91cHMgT04gdnRpZ2VyX2NybWVudGl0eS5zbW93bmVyaWQgPSB2dGlnZXJfZ3JvdXBzLmdyb3VwaWQNCldIRVJFIHZ0aWdlcl9jcm1lbnRpdHkuZGVsZXRlZCA9MA0KQU5EIHZ0aWdlcl9xdW90ZXMucXVvdGVpZCA+MCI7CQ0KDQoJCWlmKGlzX2FycmF5KCRxdW90ZXN0YWdlKSAmJiBjb3VudCgkcXVvdGVzdGFnZSk+MCkNCgkJew0KCQkJJHN0cgk9CSInIi5pbXBsb2RlKCInLCciLCRxdW90ZXN0YWdlKS4iJyI7DQoJCQkkcXVlcnkuPSIgQU5EIHZ0aWdlcl9xdW90ZXMucXVvdGVzdGFnZSBJTiAoIi4kc3RyLiIpIjsNCgkJfQ0KCQkkcXVlcnkuPSIgT1JERVIgQlkgdnRpZ2VyX3F1b3Rlcy5xdW90ZXN0YWdlIjsNCgkJJHJlc3VsdCA9ICRhZGItPnBxdWVyeSgkcXVlcnksIGFycmF5KCkpOwkJDQoJCWlmICgkYWRiLT5udW1fcm93cygkcmVzdWx0KSkgew0KCQkJd2hpbGUgKCRyZXN1bHRyb3cgPSAkYWRiLT5mZXRjaF9hcnJheSgkcmVzdWx0KSkgew0KCQkJCSRyb3dbJHJlc3VsdHJvd1sncXVvdGVpZCddXVsicXVvdGVfbm8iXSAJPSBkZWNvZGVfaHRtbCgkcmVzdWx0cm93WydxdW90ZV9ubyddKTsNCgkJCQkkcm93WyRyZXN1bHRyb3dbJ3F1b3RlaWQnXV1bInN1YmplY3QiXSAJCT0gZGVjb2RlX2h0bWwoJHJlc3VsdHJvd1snc3ViamVjdCddKTsNCgkJCQkkcm93WyRyZXN1bHRyb3dbJ3F1b3RlaWQnXV1bInF1b3Rlc3RhZ2UiXSAJCT0gZGVjb2RlX2h0bWwoJHJlc3VsdHJvd1sncXVvdGVzdGFnZSddKTsNCgkJCQkkcm93WyRyZXN1bHRyb3dbJ3F1b3RlaWQnXV1bInRvdGFsIl0gCQkJPSBkZWNvZGVfaHRtbCgkcmVzdWx0cm93Wyd0b3RhbCddKTsNCgkJCQkkcm93WyRyZXN1bHRyb3dbJ3F1b3RlaWQnXV1bInZhbGlkdGlsbCJdIAk9IGRlY29kZV9odG1sKCRyZXN1bHRyb3dbJ3ZhbGlkdGlsbCddKTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gJHJvdzsNCgl9DQoJDQp9DQoNCj8+")); ?>

Function Calls

base64_decode 1

Variables

None

Stats

MD5 5386ae77ca47a5db3bbb2529e76b4aed
Eval Count 1
Decode Time 101 ms