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 // This file is protected by copyright law & provided under license. Copyright(C) 20..

Decoded Output download

$OO0OO0000=$OOO000000{17}.$OOO000000{12}.$OOO000000{18}.$OOO000000{5}.$OOO000000{19};if(!0)$O000O0O00=$OO0OO0000($OOO0O0O00,'rb');$OO0OO000O=$OOO000000{17}.$OOO000000{20}.$OOO000000{5}.$OOO000000{9}.$OOO000000{16};$OO0OO00O0=$OOO000000{14}.$OOO000000{0}.$OOO000000{20}.$OOO000000{0}.$OOO000000{20};$OO0OO000O($O000O0O00,1265);$OO00O00O0=($OOO0000O0($OO0OO00O0($OO0OO000O($O000O0O00,380),'EnteryouwkhRHYKNWOUTAaBbCcDdFfGgIiJjLlMmPpQqSsVvXxZz0123456789+/=','ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/')));eval($OO00O00O0);$OO00O00O0=str_replace('__FILE__',"'".$OOO0O0O00."'",($OOO0000O0($OO0OO00O0($OO0OO000O($O000O0O00,$OO00O0000),'EnteryouwkhRHYKNWOUTAaBbCcDdFfGgIiJjLlMmPpQqSsVvXxZz0123456789+/=','ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'))));fclose($O000O0O00);eval($OO00O00O0);
define('CP_SIGN_FILE',"sign.file");
define('CP_SIGN_FILE_PASSWORD',"sign.file.password");
define('CP_SIGN_CERT_TYPE',"sign.cert.type");
define('CP_SIGN_INVALID_FIELDS',"sign.invalid.fields");
define('CP_VERIFY_FILE',"verify.file");
define('CP_SIGNATURE_FIELD',"signature.field");
define('CP_SUCCESS',"00");
define("CP_LOAD_CONFIG_ERROR","01");
define("CP_SIGN_CERT_ERROR","02");
define("CP_SIGN_CERT_PWD_ERROR","03");
define("CP_SIGN_CERT_TYPE_ERROR","04");
define("CP_INIT_SIGN_CERT_ERROR","05");
define("CP_VERIFY_CERT_ERROR","06");
define("CP_INIT_VERIFY_CERT_ERROR","07");
define("CP_GET_PRI_KEY_ERROR","08");
define("CP_GET_CERT_ID_ERROR","09");
define("CP_GET_SIGN_STRING_ERROR","10");
define("CP_SIGN_GOES_WRONG","11");
define("CP_VERIFY_GOES_WRONG","12");
define("CP_VERIFY_FAILED","13");
define("CP_SIGN_FIELD_NULL","14");
define("CP_SIGN_VALUE_NULL","15");
define("CP_UNKNOWN_WRONG","16");
define("CP_ENCPIN_GOES_WRONG","17");
define("CP_ENCDATA_GOES_WRONG","18");
define("CP_DECDATA_GOES_WRONG","19");
define("CP_DEFAULTINIT_GOES_WRONG","20");
define("CP_SPECIFYINIT_GOES_WRONG","21");
define("CP_RELOADSC_GOES_WRONG","22");
define("CP_NO_INIT","23");
define("CP_CONFIG_WRONG","24");
define("CP_INIT_CONFIG_WRONG","25");
define("CP_KEY_VALUE_CONNECT","=");
define("CP_MESSAGE_CONNECT","&");
define("CP_SIGN_ALGNAME","SHA512WithRSA");
define("CP_ENC_ALG_PREFIX","RSA");
define("CP_CHARSET_COMM","UTF-8");
define("CP_PKCS12","PKCS12");
class SecssUtil
{
private static $VERSION = 1.0;
private static $errMap = array(
CP_SUCCESS =>"",
CP_LOAD_CONFIG_ERROR =>"security.properties",
CP_SIGN_CERT_ERROR =>"",
CP_SIGN_CERT_PWD_ERROR =>"",
CP_SIGN_CERT_TYPE_ERROR =>"PKCS12",
CP_INIT_SIGN_CERT_ERROR =>"",
CP_VERIFY_CERT_ERROR =>"",
CP_INIT_VERIFY_CERT_ERROR =>"",
CP_GET_PRI_KEY_ERROR =>"",
CP_GET_CERT_ID_ERROR =>"ID",
CP_GET_SIGN_STRING_ERROR =>"",
CP_SIGN_GOES_WRONG =>"",
CP_VERIFY_GOES_WRONG =>"",
CP_VERIFY_FAILED =>"",
CP_SIGN_FIELD_NULL =>"",
CP_SIGN_VALUE_NULL =>"",
CP_UNKNOWN_WRONG =>"",
CP_ENCPIN_GOES_WRONG =>"Pin",
CP_ENCDATA_GOES_WRONG =>"",
CP_DECDATA_GOES_WRONG =>"",
CP_DEFAULTINIT_GOES_WRONG =>"",
CP_SPECIFYINIT_GOES_WRONG =>"",
CP_RELOADSC_GOES_WRONG =>"",
CP_NO_INIT =>"",
CP_CONFIG_WRONG =>"",
CP_INIT_CONFIG_WRONG =>""
);
private static $encryptFieldMap = array(
"CardTransData"
);
private $CPPublicKey;
private $MerPrivateKey;
private $sign;
private $encPin;
private $encValue;
private $decValue;
private $privatePFXCertId;
private $publicCERCertId;
private $errCode;
private $errMsg;
private $signFile;
private $signFilePassword;
private $signCertType;
private $signInvalidFields;
private $verifyFile;
private $signatureField;
private $initFalg = false;
function __construct()
{}
function __destruct()
{}
public function getVerstion()
{
return $this->VERSION;
}
public function init($securityPropFile)
{
try {
$key_file = parse_ini_file($securityPropFile);
if (!$key_file) {
$this->errCode = CP_LOAD_CONFIG_ERROR;
$this->writeLog("in SecssUitl->init security.properties");
return false;
}
if (array_key_exists(CP_SIGN_FILE,$key_file)) {
$this->signFile = $key_file[CP_SIGN_FILE];
if (empty($this->signFile)) {
$this->errCode = CP_SIGN_CERT_ERROR;
$this->writeLog("in SecssUitl->init security.propertiessign.file ");
return false;
}
if (!file_exists($this->signFile)) {
$this->errCode = CP_SIGN_CERT_ERROR;
$this->writeLog("in SecssUitl->init security.propertiessign.file=[".$this->verifyFile ."],");
return false;
}
}else {
$this->errCode = CP_SIGN_CERT_ERROR;
$this->writeLog("in SecssUitl->init security.propertiessign.file ");
return false;
}
if (array_key_exists(CP_SIGN_FILE_PASSWORD,$key_file)) {
$this->signFilePassword = $key_file[CP_SIGN_FILE_PASSWORD];
}else {
$this->signFilePassword = "";
}
if (array_key_exists(CP_SIGN_CERT_TYPE,$key_file)) {
$this->signCertType = $key_file[CP_SIGN_CERT_TYPE];
if (empty($this->signCertType)) {
$this->errCode = CP_SIGN_CERT_TYPE_ERROR;
$this->writeLog("in SecssUitl->init security.propertiessign.cert.type ");
return false;
}else 
if (CP_PKCS12 != $this->signCertType) {
$this->errCode = CP_SIGN_CERT_TYPE_ERROR;
$this->writeLog("in SecssUitl->init security.propertiessign.cert.type ");
return false;
}
}else {
$this->errCode = CP_SIGN_CERT_TYPE_ERROR;
$this->writeLog("in SecssUitl->init security.propertiessign.cert.type");
return false;
}
if (array_key_exists(CP_SIGN_INVALID_FIELDS,$key_file)) {
$this->signInvalidFields = $key_file[CP_SIGN_INVALID_FIELDS];
}
if (array_key_exists(CP_VERIFY_FILE,$key_file)) {
$this->verifyFile = $key_file[CP_VERIFY_FILE];
if (empty($this->verifyFile)) {
$this->errCode = CP_VERIFY_CERT_ERROR;
$this->writeLog("in SecssUitl->init security.propertiesverify.file");
return false;
}
if (!file_exists($this->verifyFile)) {
$this->errCode = CP_VERIFY_CERT_ERROR;
$this->writeLog("in SecssUitl->init security.propertiesverify.file=[".$this->verifyFile ."],");
return false;
}
}else {
$this->errCode = CP_VERIFY_CERT_ERROR;
$this->writeLog("in SecssUitl->init security.propertiesverify.file");
return false;
}
if (array_key_exists(CP_SIGNATURE_FIELD,$key_file)) {
$this->signatureField = $key_file[CP_SIGNATURE_FIELD];
}
$merPkcs12 = file_get_contents($this->signFile);
if (empty($merPkcs12)) {
$this->errCode = CP_GET_PRI_KEY_ERROR;
$this->writeLog("in SecssUitl->init pfx.pfxFile=[".$this->signFile ."]");
return false;
}
$pkcs12 = openssl_pkcs12_read($merPkcs12,$this->MerPrivateKey,$this->signFilePassword);
if (!$pkcs12) {
$this->errCode = CP_GET_PRI_KEY_ERROR;
$this->writeLog("in SecssUitl->init pfx.pfxFile=[".$this->signFile ."]");
return false;
}
$x509data = $this->MerPrivateKey['cert'];
if (!openssl_x509_read($x509data)) {
$this->errCode = CP_GET_PRI_KEY_ERROR;
$this->writeLog("in SecssUitl->init pfx.pfxFile=[".$this->signFile ."]");
return false;
}
$certdata = openssl_x509_parse($x509data);
if (empty($certdata)) {
$this->errCode = CP_GET_PRI_KEY_ERROR;
$this->writeLog("in SecssUitl->init pfx.pfxFile=[".$this->signFile ."]");
return false;
}
$this->privatePFXCertId = $certdata['serialNumber'];
$this->writeLog("in SecssUitl->init pfx=[".$this->privatePFXCertId ."]");
$this->CPPublicKey = file_get_contents($this->verifyFile);
if (empty($this->CPPublicKey)) {
$this->errCode = INIT_VERIFY_CERT_ERROR;
$this->writeLog("in SecssUitl->init CP.cerFile=[".$this->verifyFile ."]");
return false;
}
$pk = openssl_pkey_get_public($this->CPPublicKey);
$a = openssl_pkey_get_details($pk);
$certdata = openssl_x509_parse($this->CPPublicKey,false);
if (empty($certdata)) {
$this->errCode = INIT_VERIFY_CERT_ERROR;
$this->writeLog("in SecssUitl->init CP.cerFile=[".$this->verifyFile ."]");
return false;
}
$this->publicCERCertId = $certdata['serialNumber'];
$this->writeLog("in SecssUitl->init CP=[".$this->publicCERCertId ."]");
$this->initFalg = true;
return true;
}catch (Exception $e) {
$this->errCode = CP_UNKNOWN_WRONG;
$this->writeLog("in SecssUitl->init CP,message=".$e->getMessage());
return false;
}
}
public function sign($paramArray)
{
try {
$this->sign = null;
if (!$this->initFalg) {
$this->errCode = CP_NO_INIT;
$this->writeLog("in SecssUitl->sign init");
return false;
}
ksort($paramArray);
$signRawData = $this->getSignStr($paramArray);
if (empty($signRawData)) {
$this->errCode = CP_GET_SIGN_STRING_ERROR;
$this->writeLog("in SecssUitl->sign ");
return false;
}
$charSet = mb_detect_encoding($signRawData,array(
"UTF-8",
"GB2312",
"GBK"
));
$tempSignRawData = mb_convert_encoding($signRawData,"UTF-8",$charSet);
$this->writeLog("in SecssUitl->sign =[".$tempSignRawData ."]");
$sign_falg = openssl_sign($tempSignRawData,$signature,$this->MerPrivateKey['pkey'],OPENSSL_ALGO_SHA512);
if(!$sign_falg){
$this->errCode = CP_SIGN_GOES_WRONG;
$this->writeLog("in SecssUitl->sign ,openssl,openssl return=[".$sign_falg."]");
return false;
}
$base64Result = base64_encode($signature);
$this->sign = $base64Result;
$this->errCode = CP_SUCCESS;
return true;
}catch (Exception $e) {
$this->errCode = CP_SIGN_GOES_WRONG;
$this->writeLog("in SecssUitl->sign ,message=".$e->getMessage());
return false;
}
}
public function verify($paramArray)
{
try {
if (!$this->initFalg) {
$this->errCode = CP_NO_INIT;
$this->writeLog("in SecssUitl->verify init");
return false;
}
$orgSignMsg = $paramArray["Signature"];
if (empty($orgSignMsg)) {
$this->writeLog("in SecssUitl->verify paramArray");
$this->errCode = CP_SIGN_VALUE_NULL;
return false;
}
unset($paramArray["Signature"]);
ksort($paramArray);
$verifySignData = $this->getSignStr($paramArray);
$charSet = mb_detect_encoding($verifySignData,array(
"UTF-8",
"GB2312",
"GBK"
));
$tempVerifySignData = mb_convert_encoding($verifySignData,"UTF-8",$charSet);
$this->writeLog("in SecssUitl->verify   =[".$tempVerifySignData ."]");
$result = openssl_verify($tempVerifySignData,base64_decode($orgSignMsg),$this->CPPublicKey,OPENSSL_ALGO_SHA512);
if ($result == 1) {
$this->errCode = CP_SUCCESS;
}else 
if ($result == 0) {
$this->errCode = CP_VERIFY_FAILED;
}else {
$this->errCode = CP_VERIFY_GOES_WRONG;
}
if ($this->errCode === CP_SUCCESS) {
return true;
}else {
return false;
}
}catch (Exception $e) {
$this->errCode = CP_VERIFY_GOES_WRONG;
$this->writeLog("in SecssUitl->verify  ,message=".$e->getMessage());
return false;
}
}
public function getSignCertId()
{
return $this->privatePFXCertId;
}
public function encryptPin($pin,$card)
{
try {
$this->encPin = null;
if (!$this->initFalg) {
$this->errCode = CP_NO_INIT;
$this->writeLog("in SecssUitl->encryptPin init");
return false;
}
$pinBlock = $this->pin2PinBlockWithCardNO($pin,$card);
if (empty($pinBlock)) {
$this->errCode = CP_ENCPIN_GOES_WRONG;
$this->writeLog("in SecssUitl->encryptPin PIN,PinBlock");
return false;
}
$pk = openssl_pkey_get_public($this->CPPublicKey);
$a = openssl_pkey_get_details($pk);
$n = $a["rsa"]["n"];
$e = $a["rsa"]["e"];
$intN = $this->bin2int($n);
$intE = $this->bin2int($e);
$crypted = bcpowmod($this->bin2int($pinBlock),$intE,$intN);
if (!$crypted) {
$this->errCode = CP_ENCPIN_GOES_WRONG;
$this->writeLog("in SecssUitl->encryptPin pin,errCode=[".$this->errCode ."]");
return false;
}
$rb = $this->bcdechex($crypted);
$rb = $this->padstr($rb);
$crypted = hex2bin($rb);
$this->errCode = CP_SUCCESS;
$this->encPin = base64_encode($crypted);
if ($this->errCode === CP_SUCCESS) {
return true;
}else {
return false;
}
}catch (Exception $e) {
$this->errCode = CP_ENCPIN_GOES_WRONG;
$this->writeLog("in SecssUitl->encryptPin PIN,message=".$e->getMessage());
return false;
}
}
private function pin2PinBlockWithCardNO($aPin,$aCardNO)
{
$tPinByte = $this->pin2PinBlock($aPin);
if (empty($tPinByte)) {
return null;
}
if (strlen($aCardNO) == 11) {
$aCardNO = "00".$aCardNO;
}else 
if (strlen($aCardNO) == 12) {
$aCardNO = "0".$aCardNO;
}
$tPanByte = $this->formatPan($aCardNO);
if (empty($tPanByte)) {
return null;
}
$tByte = array();
for ($i = 0;$i <8;$i ++) {
$tByte[$i] = $tPinByte[$i] ^$tPanByte[$i];
}
$result = "";
foreach ($tByte as $key =>$value) {
$result .= chr($value);
}
return $result;
}
private function formatPan($aPan)
{
$tPanLen = strlen($aPan);
$tByte = array();
$temp = $tPanLen -13;
try {
$tByte[0] = 0;
$tByte[1] = 0;
for ($i = 2;$i <8;$i ++) {
$a = "\x".substr($aPan,$temp,2);
$tByte[$i] = hexdec($a);
$temp += 2;
}
}catch (Exception $e) {
return null;
}
return $tByte;
}
private function pin2PinBlock($aPin)
{
$tTemp = 1;
$tPinLen = strlen($aPin);
$tByte = array();
try {
$tByte[0] = $tPinLen;
$i = 0;
if ($tPinLen %2 == 0) {
for ($i = 0;$i <$tPinLen;) {
$a = hexdec("\x".substr($aPin,$i,2));
$tByte[$tTemp] = $a;
if (($i == $tPinLen -2) &&($tTemp <7)) {
for ($x = $tTemp +1;$x <8;$x ++) {
$tByte[$x] = -1;
}
}
$tTemp ++;
$i += 2;
}
}else {
for ($i = 0;$i <$tPinLen -1;) {
$a = hexdec("\x".substr($aPin,$i,$i +2));
$tByte[$tTemp] = $a;
if ($i == $tPinLen -3) {
$b = hexdec("\x".substr($aPin,$tPinLen -1) ."F");
$tByte[($tTemp +1)] = $b;
if ($tTemp +1 <7) {
for ($x = $tTemp +2;$x <8;$x ++) {
$tByte[$x] = -1;
}
}
}
$tTemp ++;
$i += 2;
}
}
}catch (Exception $e) {
return null;
}
return $tByte;
}
public function encryptData($data)
{
try {
$this->encValue = null;
if (!$this->initFalg) {
$this->errCode = CP_NO_INIT;
$this->writeLog("in SecssUitl->encryptData init");
return false;
}
$charSet = mb_detect_encoding($data,array(
"UTF-8",
"GB2312",
"GBK"
));
$tmpData = mb_convert_encoding($data,"UTF-8",$charSet);
$pk = openssl_pkey_get_public($this->CPPublicKey);
$a = openssl_pkey_get_details($pk);
$n = $a["rsa"]["n"];
$e = $a["rsa"]["e"];
$intN = $this->bin2int($n);
$intE = $this->bin2int($e);
$crypted = bcpowmod($this->bin2int($tmpData),$intE,$intN);
if (!$crypted) {
$this->errCode = CP_ENCDATA_GOES_WRONG;
$this->writeLog("in SecssUitl->encryptData ,errCode=[".$this->errCode ."]");
return false;
}
$rb = $this->bcdechex($crypted);
$rb = $this->padstr($rb);
$crypted = hex2bin($rb);
$this->errCode = CP_SUCCESS;
$this->encValue = base64_encode($crypted);
if ($this->errCode === CP_SUCCESS) {
return true;
}else {
return false;
}
}catch (Exception $e) {
$this->errCode = CP_ENCDATA_GOES_WRONG;
$this->writeLog("in SecssUitl->encryptData ,message=".$e->getMessage());
return false;
}
}
public function decryptData($data)
{
try {
$this->decValue = null;
if (!$this->initFalg) {
$this->errCode = CP_NO_INIT;
$this->writeLog("in SecssUitl->decryptData init");
return false;
}
$pkeyResource = openssl_pkey_get_private($this->MerPrivateKey['pkey']);
if (openssl_private_decrypt(base64_decode($data),$tmpDecValue,$pkeyResource,OPENSSL_NO_PADDING)) {
$this->errCode = CP_SUCCESS;
}else {
$this->errCode = CP_DECDATA_GOES_WRONG;
}
$this->decValue = $this->remove_padding($tmpDecValue);
if ($this->errCode === CP_SUCCESS) {
return true;
}else {
return false;
}
}catch (Exception $e) {
$this->errCode = CP_DECDATA_GOES_WRONG;
$this->writeLog("in SecssUitl->decryptData ,message=".$e->getMessage());
return false;
}
}
private function getSignStr($paramArray)
{
$result = "";
$invalidFieldsArray = explode(',',$this->signInvalidFields);
foreach ($paramArray as $key =>$value) {
if (in_array($key,$invalidFieldsArray)) {
continue;
}
$result = $result .$key .CP_KEY_VALUE_CONNECT .$value .CP_MESSAGE_CONNECT;
}
if (CP_MESSAGE_CONNECT === substr($result,-1,1)) {
$result = substr($result,0,strlen($result) -1);
}
return $result;
}
public function getSign()
{
return $this->sign;
}
public function getEncPin()
{
return $this->encPin;
}
public function getEncValue()
{
return $this->encValue;
}
public function getDecValue()
{
return $this->decValue;
}
public function getPrivatePFXCertId()
{
return $this->privatePFXCertId;
}
public function getPublicCERCertId()
{
return $this->publicCERCertId;
}
public function getErrCode()
{
return $this->errCode;
}
public function getErrMsg()
{
if (empty($this->errCode)) {
$this->errMsg = self::$errMap[CP_UNKNOWN_WRONG];
}else {
$this->errMsg = self::$errMap[$this->errCode];
}
if (empty($this->errMsg)) {
$this->errMsg = self::$errMap[CP_UNKNOWN_WRONG];
}
return $this->errMsg;
}
private function writeLog($log)
{
error_log($log ."\n",0);
}
private function bin2int($bindata)
{
$hexdata = bin2hex($bindata);
return $this->bchexdec($hexdata);
}
private function bchexdec($hexdata)
{
$ret = '0';
$len = strlen($hexdata);
for ($i = 0;$i <$len;$i ++) {
$hex = substr($hexdata,$i,1);
$dec = hexdec($hex);
$exp = $len -$i -1;
$pow = bcpow('16',$exp);
$tmp = bcmul($dec,$pow);
$ret = bcadd($ret,$tmp);
}
return $ret;
}
private function padstr($src,$len = 256,$chr = '0',$d = 'L')
{
$ret = trim($src);
$padlen = $len -strlen($ret);
if ($padlen >0) {
$pad = str_repeat($chr,$padlen);
if (strtoupper($d) == 'L') {
$ret = $pad .$ret;
}else {
$ret = $ret .$pad;
}
}
return $ret;
}
private function bcdechex($decdata)
{
$s = $decdata;
$ret = '';
while ($s != '0') {
$m = bcmod($s,'16');
$s = bcdiv($s,'16');
$hex = dechex($m);
$ret = $hex .$ret;
}
return $ret;
}
private function number_to_binary($number,$blocksize)
{
$base = "256";
$result = "";
$div = $number;
while ($div >0) 
{
$mod = bcmod($div,$base);
$div = bcdiv($div,$base);
$result = chr($mod) .$result;
}
return str_pad($result,$blocksize,"\x00",STR_PAD_LEFT);
}
private function binary_to_number($data)
{
$base = "256";
$radix = "1";
$result = "0";
for ($i = strlen($data) -1;$i >= 0;$i --) 
{
$digit = ord($data{$i});
$part_res = bcmul($digit,$radix);
$result = bcadd($result,$part_res);
$radix = bcmul($radix,$base);
}
return $result;
}
private function remove_padding($data)
{
$offset = strrpos($data,"\x00",1);
return substr($data,$offset +1);
}
private function signFromStr($signStr)
{
try {
$this->sign = null;
if (!$this->initFalg) {
$this->errCode = CP_NO_INIT;
$this->writeLog("in SecssUitl->signFromStr init");
return false;
}
if (empty($signStr)) {
$this->errCode = CP_GET_SIGN_STRING_ERROR;
$this->writeLog("in SecssUitl->signFromStr ");
return false;
}
$sign_falg = openssl_sign($signStr,$signature,$this->MerPrivateKey['pkey'],OPENSSL_ALGO_SHA512);
if (!$sign_falg) {
$this->errCode = CP_SIGN_GOES_WRONG;
return false;
}
$base64Result = base64_encode($signature);
$this->sign = $base64Result;
$this->errCode = CP_SUCCESS;
return true;
}catch (Exception $e) {
$this->errCode = CP_SIGN_GOES_WRONG;
$this->writeLog("in SecssUitl->signFromStr ,message=".$e->getMessage());
return false;
}
}
private function verifyFromStr($paramArray)
{
try {
if (!$this->initFalg) {
$this->errCode = CP_NO_INIT;
$this->writeLog("in SecssUitl->verifyFromStr init");
return false;
}
$orgSignMsg = $paramArray["Signature"];
if (empty($orgSignMsg)) {
$this->writeLog("in SecssUitl->verifyFromStr paramArray");
$this->errCode = CP_SIGN_VALUE_NULL;
return false;
}
unset($paramArray["Signature"]);
$verifySignData = $paramArray["plainData"];
$result = openssl_verify($verifySignData,base64_decode($orgSignMsg),$this->CPPublicKey,OPENSSL_ALGO_SHA512);
if ($result == 1) {
$this->errCode = CP_SUCCESS;
}else {
if ($result == 0) {
$this->errCode = CP_VERIFY_FAILED;
}else {
$this->errCode = CP_VERIFY_GOES_WRONG;
}
}
if ($this->errCode === CP_SUCCESS) {
return true;
}else {
return false;
}
}catch (Exception $e) {
$this->errCode = CP_VERIFY_GOES_WRONG;
$this->writeLog("in SecssUitl->verifyFromStr ,message=".$e->getMessage());
return false;
}
}
public function signFile($filePath)
{
try {
if (!$this->initFalg) {
$this->errCode = CP_NO_INIT;
$this->writeLog("in SecssUitl->signFile init");
return false;
}
$tempFilePath = mb_convert_encoding($filePath,"GBK","auto");
$this->signFileByParams($tempFilePath,"sha512","");
}catch (Exception $e) {
$this->errCode = CP_SIGN_GOES_WRONG;
$this->writeLog("in SecssUitl->signFile ,message=".$e->getMessage());
return false;
}
}
public function signFileByParams($filePath,$sigAlgName,$encoding)
{
try {
if (!$this->initFalg) {
$this->errCode = CP_NO_INIT;
$this->writeLog("in SecssUitl->signFileByParams init");
return false;
}
if (!is_file($filePath)) {
$this->errCode = CP_SIGN_GOES_WRONG;
$this->writeLog("in SecssUitl->signFileByParams .file=[".$filePath ."]");
return false;
}
$ctx = hash_init($sigAlgName);
$handle = fopen($filePath,"r");
$max = filesize($filePath);
$chunk = 4096;
if ($max <= $chunk) {
$endIndex = 0;
}else {
$endIndex = ($max %$chunk === 0 ?$max / $chunk : $max / $chunk +1);
}
$endReadLength = $max %$chunk;
$readData = "";
$ctx = hash_init($sigAlgName);
for ($i = 0;$i <= $endIndex;$i ++) {
if ($i == $endIndex) {
if ($endReadLength >0) {
$readData = fread($handle,$endReadLength);
}else {
$readData = fread($handle,$chunk);
}
}else {
$readData = fread($handle,$chunk);
}
$readData = str_replace(array(
"\r\n",
"\r",
"\n"
),"",$readData);
hash_update($ctx,$readData);
}
fclose($handle);
clearstatcache();
$hashResult = hash_final($ctx);
if ($this->signFromStr(hex2bin($hashResult))) {
$data = "\r\n".$this->getSign();
if (file_put_contents($filePath,$data,FILE_APPEND) !== false) {
clearstatcache();
return true;
}else {
$this->errCode = CP_SIGN_GOES_WRONG;
$this->writeLog("in SecssUitl->signFileByParams .file=[".$filePath ."]");
clearstatcache();
return false;
}
}else {
$this->errCode = CP_SIGN_GOES_WRONG;
$this->writeLog("in SecssUitl->signFileByParams .file=[".$filePath ."]");
clearstatcache();
return false;
}
}catch (Exception $e) {
$this->errCode = CP_SIGN_GOES_WRONG;
$this->writeLog("in SecssUitl->signFileByParams ,message=".$e->getMessage());
clearstatcache();
return false;
}
}
public function verifyFile($filePath)
{
try {
if (!$this->initFalg) {
$this->errCode = CP_NO_INIT;
$this->writeLog("in SecssUitl->verifyFile init");
return false;
}
$tempFilePath = mb_convert_encoding($filePath,"GBK","auto");
return $this->verifyFileByParams($tempFilePath,"sha512","");
}catch (Exception $e) {
$this->errCode = CP_SIGN_GOES_WRONG;
$this->writeLog("in SecssUitl->verifyFile ,message=".$e->getMessage());
return false;
}
}
public function verifyFileByParams($filePath,$sigAlgName,$encoding)
{
try {
if (!$this->initFalg) {
$this->errCode = CP_NO_INIT;
$this->writeLog("in SecssUitl->verifyFileByParams init");
return false;
}
if (!is_file($filePath)) {
$this->errCode = CP_VERIFY_GOES_WRONG;
$this->writeLog("in SecssUitl->verifyFileByParams .file=[".$filePath ."]");
return false;
}
$max = filesize($filePath);
$handle = fopen($filePath,"r");
$index = -1;
fseek($handle,$index,SEEK_END);
$orgSignature = "";
while (($c = fread($handle,1)) !== false) {
if ($c == "\n"||$c == "\r")
break;
$orgSignature = $c .$orgSignature;
$index = $index -1;
fseek($handle,$index,SEEK_END);
}
fclose($handle);
$handle = fopen($filePath,"a+");
ftruncate($handle,$max-strlen($orgSignature));
fclose($handle);
clearstatcache();
$max = filesize($filePath);
$handle = fopen($filePath,"r");
$chunk = 4096;
if ($max <= $chunk) {
$endIndex = 0;
}else {
$endIndex = ($max %$chunk === 0 ?$max / $chunk : $max / $chunk +1);
}
$endReadLength = $max %$chunk;
$readData = "";
$ctx = hash_init($sigAlgName);
for ($i = 0;$i <= $endIndex;$i ++) {
if ($i === $endIndex) {
if ($endReadLength >0) {
$readData = fread($handle,$endReadLength);
}else {
$readData = fread($handle,$chunk);
}
}else {
$readData = fread($handle,$chunk);
}
$readData = str_replace(array(
"\r\n",
"\r",
"\n"
),"",$readData);
hash_update($ctx,$readData);
}
fclose($handle);
clearstatcache();
$hashResult = hash_final($ctx);
$paramArray = array(
"plainData"=>hex2bin($hashResult),
"Signature"=>$orgSignature
);
$verifyResult = $this->verifyFromStr($paramArray);
if (file_put_contents($filePath,$orgSignature,FILE_APPEND) !== false) {
clearstatcache();
return $verifyResult;
}else {
$this->errCode = CP_VERIFY_FAILED;;
$this->writeLog("in SecssUitl->signFileByParams .file=[".$filePath ."]");
clearstatcache();
return false;
}
}catch (Exception $e) {
$this->errCode = CP_VERIFY_GOES_WRONG;
$this->writeLog("in SecssUitl->verifyFileByParams ,message=".$e->getMessage());
clearstatcache();
return false;
}
}
}

Did this file decode correctly?

Original Code

<?php // This file is protected by copyright law & provided under license. Copyright(C) 2015-2115 www.chinapay.com, All rights reserved.
$OOO0O0O00=__FILE__;$OOO000000=urldecode('%74%68%36%73%62%65%68%71%6c%61%34%63%6f%5f%73%61%64%66%70%6e%72');$OO00O0000=34576;$OOO0000O0=$OOO000000{4}.$OOO000000{9}.$OOO000000{3}.$OOO000000{5};$OOO0000O0.=$OOO000000{2}.$OOO000000{10}.$OOO000000{13}.$OOO000000{16};$OOO0000O0.=$OOO0000O0{3}.$OOO000000{11}.$OOO000000{12}.$OOO0000O0{7}.$OOO000000{5};$O0O0000O0='OOO0000O0';eval(($$O0O0000O0('JE9PME9PMDAwMD0kT09PMDAwMDAwezE3fS4kT09PMDAwMDAwezEyfS4kT09PMDAwMDAwezE4fS4kT09PMDAwMDAwezV9LiRPT08wMDAwMDB7MTl9O2lmKCEwKSRPMDAwTzBPMDA9JE9PME9PMDAwMCgkT09PME8wTzAwLCdyYicpOyRPTzBPTzAwME89JE9PTzAwMDAwMHsxN30uJE9PTzAwMDAwMHsyMH0uJE9PTzAwMDAwMHs1fS4kT09PMDAwMDAwezl9LiRPT08wMDAwMDB7MTZ9OyRPTzBPTzAwTzA9JE9PTzAwMDAwMHsxNH0uJE9PTzAwMDAwMHswfS4kT09PMDAwMDAwezIwfS4kT09PMDAwMDAwezB9LiRPT08wMDAwMDB7MjB9OyRPTzBPTzAwME8oJE8wMDBPME8wMCwxMjY1KTskT08wME8wME8wPSgkT09PMDAwME8wKCRPTzBPTzAwTzAoJE9PME9PMDAwTygkTzAwME8wTzAwLDM4MCksJ0VudGVyeW91d2toUkhZS05XT1VUQWFCYkNjRGRGZkdnSWlKakxsTW1QcFFxU3NWdlh4WnowMTIzNDU2Nzg5Ky89JywnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLycpKSk7ZXZhbCgkT08wME8wME8wKTs=')));return;?>
kr9NHenNHenNHe1zfukgFMaXdoyjcUImb19oUAxyb18mRtwmwJ4LT09NHr8XTzEXRJwmwJXPkr9NTzEXHenNHtILT08XT08XHr8XhtONTznNTzEXHr8Pkr8XHenNHr8XHtXLT08XHr8XHeEXhUXmOB50cbk5d3a3D2iUUylRTlfNaaOnCAkJW2YrcrcMO2fkDApQToxYdanXAbyTF1c2BuiDGjExHjH0YTC3KeLqRz0mRtfnWLYrOAcuUrlhU0xYTL9WAakTayaBa1icBMyJC2OlcMfPDBpqdo1Vd3nxFmY0fbc3Gul6HerZHzW1YjF4KUSvkZLphUL7cMYSd3YlhtONHeEXTznNHeEpK2a2CBXPkr9NHenNHenNHtL7eWpLcBcpdMAPk0YWb1YkO05gOLlHOUFSwmYpc24VcMlScUwpKX0hcoaMDB5lhtfeAy9TUAfKb0ckTragAryTA1fNALWmRtkzDBfVRMcpdoAVFoyzF3fvFMWJhTSYtMOlcMlVcUImW1ngA0luTl9eOakAb1OcArAmRtkzDBfVRMYlFmWVfulXcUwpKX0hcoaMDB5lhtfeAy9TUAfKb0lKaLyHUAOgOLlyTrOTkZXJF2lmdJ5pdmcidolLRMcpcBxLFZwpKX0hcoaMDB5lhtfeAy9BOakkOllgOLlHOUFSwmclFMlMGU5MDBxlwJL7eWpLcBcpdMAPk0YWb1YkO05nayaUOa9oUAaHOtFSwmYpc25ifuaZcU5MDBaSctwpKX0hcoaMDB5lhtfeAy9TaAYeOaYTkZXJHeEJhTSYtMOlcMlVcUIJW1ngTr9nOy9eT05oUAfgOakUT1wJRtwXHUwpKX0hcoaMDB5lhtkeAy9TUAfKb0YyAlOgOakUT1wJRtwXHJwpKX0hcoaMDB5lhtkeAy9TUAfKb0YyAlOgAyfrb0aUAL9UwJXJHeHJhTSYtMOlcMlVcUIJW1ngA0luTl9eOakAb1OcAragOakUT1wJRtwXYtwpKX0hcoaMDB5lhtkeAy9kTLlAb1YkO05gW0aUay9yAlkNAJwSwjE1wJL7eWpLcBcpdMAPwLYWb1cyALloBa9eOakAb0aUAL9UwJXJHeCJhTSYtMOlcMlVcUIJW1ngUA5kay9BOakkOllgW0aUay9yAlkNAJwSwjE3wJL7eWpLcBcpdMAPwLYWb0fyay9WALlgU0acb0aUAL9UwJXJHeIJhTSYtMOlcMlVcUIJW1ngO0aAb0YyAlOgUAOgOakUT1wJRtwXKUwpKX0hcoaMDB5lhtkeAy9uOaOgA0luTl9TaykkTLfgOakUT1wJRtwxHtwpKX0hcoaMDB5lhtkeAy9TUAfKb0fNOaYga1kNTLFJRtwxHUwpKX0hcoaMDB5lhtkeAy9BOakkOllgO09yA19bAL9KOZwSwjrZwJL7eWpLcBcpdMAPwLYWb1cyALloBa9oWAlHOAWJRtwxHZwpKX0hcoaMDB5lhtkeAy9TUAfKb0ckOAxrb05aTrXJRtwxYtwpKX0hcoaMDB5lhtkeAy9TUAfKb1cnTyayb05aTrXJRtwxYUwpKX0hcoaMDB5lhtkeAy9aTLsKT1fKb1fUT05uwJXJHTCJhTSYtMOlcMlVcUIJW1ngOA5eArlKb0fNOaYga1kNTLFJRtwxYZwpKX0hcoaMDB5lhtkeAy9yTLYrWaOnb0fNOaYga1kNTLFJRtwxKtwpKX0hcoaMDB5lhtkeAy9rOAYrWaOnb0fNOaYga1kNTLFJRtwxKUwpKX0hcoaMDB5lhtkeAy9rOAcnaAxAUA5kay9uT0aTb1fUT05uwJXJHjEJhTSYtMOlcMlVcUIJW1ngA1nyW0loBAlKUaOgO09yA19bAL9KOZwSwjwxwJL7eWpLcBcpdMAPwLYWb1kyTr9nOyYeb0fNOaYga1kNTLFJRtwZHJwpKX0hcoaMDB5lhtkeAy9KT19kTLlAwJXJHjHJhTSYtMOlcMlVcUIJW1ngW09KOLlub1fUT05uwJXJHjWJhTSYtMOlcMlVcUIJW1ngUA5kay9eT05oUAfga1kNTLFJRtwZYUwpKX0hcoaMDB5lhtkeAy9ROalgaLyHaAagW09KTLaeatwSwj0JhTSYtMOlcMlVcUIJW1ngTAaTA0yuOa9eT05KOAYAwJXJkJwpKX0hcoaMDB5lhtkeAy9TUAfKb0yHO05nTAAJRtkTUrr1HTkbDbOPAlYnwJL7eWpLcBcpdMAPwLYWb0aKW19nTrfgAykyOLlCwJXJAlYnwJL7eWpLcBcpdMAPwLYWb0YwWakTOaOgW09YTUwSwlaAOJ04wJL7eWpLcBcpdMAPwLYWb1nRW1HxHJwSwlnRW1HxHJwpKX0hC2xiF3HIA2ajF3YafolSeWp7eWpXFMl2CbOlwuY0CbOpCZELaLaUA0lNTJE9werVHeSYtmnZDbcifoAIF3OifoljwtOlFmkYCbEINUniFmkiGUIYtLYWb1YaW0YyA1HINT4J5pKY5R2F5PJW5CQgwJXYtLYWb0xNWAOgW09KOLlub0aUAL9Uwe0+wVBhPKJ9vbYlC3aZDbO5RmnZd3nlFmOpcbNpiC3mvD7MlPgLV7dli7qplkmvvwzPq7gMP4eMm6bMlPgLV7dPs6/lvPTvvwrJRE0hW1ngA0luTl9eOakAb0aUAL9Uwe0+wVGsvVBWjGDBi+U7sVJ3q+B+iKMyjGG9qVMAMGJvq++8IUwSeWpeAy9TUAfKb0YyAlOgAyfrb0aUAL9Uwe0+wVGsvVBWjGDBi+U7sVJVv+MbqVBviVGIIGMyjGG9qVMAMGJvq++8IUwSeWpeAy9TUAfKb0YyAlOgaylWOa9yAlkNAJE9NJRmqd7lLw3MlPgLV7dlq4dpLQblqqmlMDjmSdvlmPvpiC3mvD7plkmPq6/vvwzpmweLVRpWU0YTHTRvvwrJRE0hW1ngUA5kay9TUAfKb0YyAlOgOakUT1wINT4J5CJf5DGR5CZB562+5ctY5pDu5RV25CG66cUc77ZnwJXYtLYWb1cyALloBa9eOakAb0aUAL9Uwe0+wVMQjKGsvVJvIGU5pVJ3q+B+iKMyjGG9qVMAMGJvq++8IUwSeWpeAy9kTLlAb1cyALloBa9eOakAb0aUAL9Uwe0+wVBwmGBmJ+BHlVMQjKGsvVJvIGU5pVBuVVMAMG+8IUwSeWpeAy9uOaOgAykkb0syBa9yAlkNAJE9NJRPjqglj5dmqd7lLw3mp4upLQbli7qplkmvvwrJRE0hW1ngO0aAb0YyAlOgUAOgOakUT1wINT4J6w635C+B562+5ctY6h+n5RMMUATli7qplkmvvwrJRE0hW1ngO0aAb1YkO05gA1OUUA5ub0aUAL9Uwe0+wVJKs+BNlVGsvVBWjGBsl+GSpVU4SVBuVVMAMG+8IUwSeWpeAy9TUAfKb0fNOaYga1kNTLFINT4J562+5ctY6R+u56JR5C+O55Ug6cUc6h+v77ZnwJXYtLYWb1cyALloBa9uT0aTb1fUT05uwe0+wVMQjKGsvVJ/i+GPJ+BNLGGAm+MAMGJvq++8IUwSeWpeAy9BOakkOllgOLykTrarwe0+wVMQjKGsvVBLSGJ0pG+8IUwSeWpeAy9TUAfKb0ckOAxrb05aTrXINT4J6CBY572V5pDu5RV25RJs562+5ctY5D2b5Q615ctY56GX5RJ656M677ZnwJXYtLYWb1YkO05gaLyHaAagTlaHTtE9NJRMJQbMlPgLVh3mqd7lLw3LVRqmQdqvvwrJRE0hW1ngaA5RTL9bTl9bAL9KOZE9NJRMmhqmm6bplkmPq68JRE0hW1ngOA5eArlKb0fNOaYga1kNTLFINT4JAolV5CQI5D+o6R+u56JR5C+O55Ug6cUc6h+v77ZnwJXYtLYWb0aKW0OnarygO09yA19bAL9KOZE9NJRMldeMjD7lJQelq4dPv4gmQwvlj5umlk/plkmPq6/vvwrJRE0hW1ngOraeOryAWa9uT0aTb1fUT05uwe0+wVDaSKDYqVJmP+BviVJ/i+GPJ+BNLGGAm+MAMGJvq++8IUwSeWpeAy9rOAcnaAxAUA5kay9uT0aTb1fUT05uwe0+wVU7jVM7MKJVpKMyjGG9qVDBi+U7sVBwmGBmJ+BHlVBVJGByQKDKp+U7sVBNLGGAm+MAMGJvq++8IUwSeWpeAy9TAraeUAccUA5kay9uT0aTb1fUT05uwe0+wVU7jVDHi+BVMVBxmVDEp+MdiVBwmGBmJ+BHlVBVJGByQKDKp+U7sVBNLGGAm+MAMGJvq++8IUwSeWpeAy9UOAxNWAOTW19uT0aTb1fUT05uwe0+wVMujGDBSKBhPKJ9vGGsvVBWjGJvIGU5pVBNLGGAm+MAMGJvq++8IUwSeWpeAy9KT19kTLlAwe0+wVDFQVBwmGBHlVBVJGByQKDKp+U7sJwSeWpeAy9eT05oUAfga1kNTLFINT4J5P6m5RV25CJf5DGR5CZB5R+i5Pov5pZQ5Q2j56oV6CBY572V77ZH6h+35QKE5p+l77ZnwJXYtLYWb0lKUaOgW09KOLlub1fUT05uwe0+wVBwmGBmJ+BHlVMyjGG9qVU/PGDnq+BNLGGAm+MAMGJvq++8IUwYtJL7eWpXFMl2CbOlwuY0CbOpCZELcB5jFmlXfrcpcBxLTByXwe0ICbkZCbLPeWPJW2yZcyOZCB5zOoy0CUwYtJL7eWpXFMl2CbOlwtOeAyn1CMxpC0slGTSYtmnZDbcifoAIkr1lFlnZDbcifoaRcbL7eWpXFMl2CbOlwtOzDBfVKX0hFukpfMy0cUELcB5jAolVKX0hFukpfMy0cUELcB5jaMySfBA7eWpXFMl2CbOlwtOLcBYBCBx1cTSYtmnZDbcifoAIkunZDbcifoaWOliecbk0UBW7eWpXFMl2CbOlwtOXfBkSDBYeOakecbk0UBW7eWpXFMl2CbOlwtOlFmked2OlKX0hFukpfMy0cUELcbkZTbYmKX0hFukpfMy0cUELF2lmdLcpdoA7eWpXFMl2CbOlwtOzDBfVOMlScaniF3Y3d3kLKX0hFukpfMy0cUELF2lmdLYlFmOAGbnlKX0hFukpfMy0cUELF2lmdLlVfMySDBOoDBaScuH7eWpXFMl2CbOlwtO2cbkpcmloDBxlKX0hFukpfMy0cUELF2lmdMy0fbklOMlldoW7eWpXFMl2CbOlwtOpdMl0OMyScZE9wociduYlKX0hcmaVC3Opd24Ib19jd25zfuk1C3WPhW0hG30YtMc1dMY0DB9Vwy9gcoazfuk1C3WPhW0hG30Ytmn1CMxpCZnMfB5jfolvdJnmcbOBcbkzfolvdJIpeWp7eWpZcbO1FM4IkuOPDbHsNlcyAlYkT047eWp9eWpXfBkSDBHIcmaVC3Opd24IDB5pftILF2ajfbkpfulWFM9XOMlScULYtmSYtmOZGUn7eWPLD2a5b2cpdoAINUnXCbkzca9pdMlgcMlScUILF2ajfbkpfulWFM9XOMlScUL7eWppcJEPwUOqcblgcMlScULIGX0hkuOPDbHsNMaZFLYvcoAINUneAy9HT0yrb0YNTLckO19yAlkNAjSYtJO0DolzRT53FMl0cAxvcZIJDB4IA2ajF3YaDbOSRT5pdMl0wKBhPKJ9vbYlC3aZDbO5RmnZd3nlFmOpcbNpiC3mvD7MlPgLV7dli7qplkmvvwzPq7gMP4eMm6bMlPgLV7dPs6/lvPTvvwrJhTSYtmklfuaZdJnMCBxzcTSYtm0YtMlMwtiiFmkiGa9qcblgcbipF3OzhrYWb1YkO05gOLlHOUXLD2a5b2cpdoAphUn7eWPLfoipFZ0+F2lmdLcpdoAINUELD2a5b2cpdoadW1ngA0luTl9oUAxybTSYtMlMwtildbn0GUILfoipFZ0+F2lmdLcpdoAphUn7eWPLfoipFZ0+cbkZW29LcUE9wrYWb1YkO05gW0aUay9yAlkNAjSYtJO0DolzRT53FMl0cAxvcZIJDB4IA2ajF3YaDbOSRT5pdMl0wuYlC3aZDbO5RmnZd3nlFmOpcbNMlPgLV7dLVh1zDBfVRMcpdobLVRqmQdPIwJL7eWpZcbO1FM4IcMySF2A7eWp9eWppcJEPwBcpdoagcbipF3OzhtO0DolzRT5zDBfVOMlScULpwuSYtJO0DolzRT5lFmked2Olwe0IW1ngA0luTl9eOakAb0aUAL9UKX0hkuOPDbHsNmfZDbOlTo9mhtkpdJnTcBYzF1apfoXsNMlVDbWIF2ajfbkpfuLVFukvFoaZfollF+DBi+U7sVU4qbYpc24VcMlScT1dwJ4LfoipFZ0+fMaZDBc5OMlScUEVwl0S5pDu5RV25RJY5D2C5cZPwJL7eWpZcbO1FM4IcMySF2A7eWp9eWp9cBxzcUn7eWPLfoipFZ0+cbkZW29LcUE9wrYWb1YkO05gW0aUay9yAlkNAjSYtJO0DolzRT53FMl0cAxvcZIJDB4IA2ajF3YaDbOSRT5pdMl0wuYlC3aZDbO5RmnZd3nlFmOpcbNMlPgLV7dLVh1zDBfVRMcpdoblj4RMldeLVw3lqcjlmhIIwJL7eWpZcbO1FM4IcMySF2A7eWp9eWppcJEPCbkZCblgD2a5b2a4DbY0FZieAy9TUAfKb0ckTragAryTA1fNALWSkoslGa9MDBxlhULIGX0hkuOPDbHsNmYpc25oDBxlAoyzF3fvFMWINUELD2a5b2cpdoadW1ngA0luTl9oUAxyb1nnA1YbT1krbTSYtm1lduYlwuSYtJO0DolzRT5zDBfVOMlScaniF3Y3d3kLwe0IwJw7eWp9eWppcJEPCbkZCblgD2a5b2a4DbY0FZieAy9TUAfKb0YyAlOgaylWOUXLD2a5b2cpdoAphUn7eWPLfoipFZ0+F2lmdLYlFmOAGbnlwe0IkoslGa9MDBxlB0YWb1YkO05gW0aUay9ABanybTSYtMlMwtildbn0GUILfoipFZ0+F2lmdLYlFmOAGbnlhULIGX0hkuOPDbHsNMaZFLYvcoAINUneAy9TUAfKb0YyAlOgaylWOa9yAlkNAjSYtJO0DolzRT53FMl0cAxvcZIJDB4IA2ajF3YaDbOSRT5pdMl0wuYlC3aZDbO5RmnZd3nlFmOpcbNMlPgLV7dLVh1zDBfVRMYlFmWVfulXcGDIvKB8j+U4VVGpVJEJhTSYtmklfuaZdJnMCBxzcTSYtm1lduYlwE0hDBCIhrYWb1nRW1HxHJEiNUELfoipFZ0+F2lmdLYlFmOAGbnlhUn7eWPLfoipFZ0+cbkZW29LcUE9wrYWb1YkO05gW0aUay9ABanyb0aUAL9UKX0hkuOPDbHsNmfZDbOlTo9mhtkpdJnTcBYzF1apfoXsNMlVDbWIF2ajfbkpfuLVFukvFoaZfollF+DBi+U7sVU4qbYpc24VC2aZft50Gbnl5Qt85dZN6cUc6h+vwtwpKX0hFMa0fbkVwociduYlKX0hgW0hgBaSF2AIGX0hkuOPDbHsNMaZFLYvcoAINUneAy9TUAfKb0YyAlOgaylWOa9yAlkNAjSYtJO0DolzRT53FMl0cAxvcZIJDB4IA2ajF3YaDbOSRT5pdMl0wuYlC3aZDbO5RmnZd3nlFmOpcbNMlPgLV7dLVh1zDBfVRMYlFmWVfulXcGBsl+DVsGU4jGBsMKBFQtwpKX0hFMa0fbkVwociduYlKX0hgW0hDBCIhoyZFMy5b2slGa9lGolzfuHPW1ngA0luTl9kTlcnTrlrb0ckOAxrAZXLD2a5b2cpdoAphUn7eWPLfoipFZ0+F2lmdLlVfMySDBOoDBaScuHINUELD2a5b2cpdoadW1ngA0luTl9kTlcnTrlrb0ckOAxrA107eWp9eWppcJEPCbkZCblgD2a5b2a4DbY0FZieAy9BOakkOllgOLlHOUXLD2a5b2cpdoAphUn7eWPLfoipFZ0+fMaZDBc5OMlScUE9wtOqcblgcMlScaseAy9BOakkOllgOLlHOa07eWppcJEPcB1XfuLPkuOPDbHsNmclFMlMGAcpdoAphUn7eWPLfoipFZ0+cbkZW29LcUE9wrYWb1cyALloBa9eOakAb0aUAL9UKX0hkuOPDbHsNmfZDbOlTo9mhtkpdJnTcBYzF1apfoXsNMlVDbWIF2ajfbkpfuLVFukvFoaZfollF+DBi+U7sVU4qbclFMlMGU5MDBxl5D2b5Q615RJ656M6wJL7eWpZcbO1FM4IcMySF2A7eWp9eWppcJEPwBcpdoagcbipF3OzhtO0DolzRT52cbkpcmloDBxlhULIGX0hkuOPDbHsNMaZFLYvcoAINUneAy9BOakkOllgW0aUay9yAlkNAjSYtJO0DolzRT53FMl0cAxvcZIJDB4IA2ajF3YaDbOSRT5pdMl0wuYlC3aZDbO5RmnZd3nlFmOpcbNMlPgLV7dLVh12cbkpcmLVcMlScT1dwJ4LfoipFZ0+fMaZDBc5OMlScUEVwl0S5pDu5RV25RJY5D2C5cZPwJL7eWpZcbO1FM4IcMySF2A7eWp9eWp9cBxzcUn7eWPLfoipFZ0+cbkZW29LcUE9wrYWb1cyALloBa9eOakAb0aUAL9UKX0hkuOPDbHsNmfZDbOlTo9mhtkpdJnTcBYzF1apfoXsNMlVDbWIF2ajfbkpfuLVFukvFoaZfollF+DBi+U7sVU4qbclFMlMGU5MDBxl5D2b5Q615RJY5D2C5cZPwJL7eWpZcbO1FM4IcMySF2A7eWp9eWppcJEPCbkZCblgD2a5b2a4DbY0FZieAy9TUAfKWaOaALagOLlyTrWSkoslGa9MDBxlhULIGX0hkuOPDbHsNmYpc25ifuaZcAcpcBxLwe0IkoslGa9MDBxlB0YWb1YkO05nayaUOa9oUAaHOy07eWp9eWPLdBaZAosjFzrZwe0IcMlSca9mcbOgC29VfoaVfuHPkuOPDbHsNmYpc25oDBxlhTSYtMlMwtildbn0GUILdBaZAosjFzrZhULIGX0hkuOPDbHsNMaZFLYvcoAINUneAy9uOaOgAykkb0syBa9yAlkNAjSYtJO0DolzRT53FMl0cAxvcZIJDB4IA2ajF3YaDbOSRT5pdMl0wKJvV+BNlmnMGKJvIGU5pVDBi+U7sVBLSGJ0pU5XcmioDBxlNaSJRJO0DolzRT5zDBfVOMlScUEVwl0JhTSYtmklfuaZdJnMCBxzcTSYtm0YtJOXD2YzHTwINUnvFoaVF3YSb3nqC3HxHl9ZcByLhtOscbkWD2YzHTwSkuOPDbHsNL1lFlnZDbcifoaRcbLSkuOPDbHsNmYpc25oDBxlAoyzF3fvFMWpKX0hDBCIhtrLFosjFzrZhUn7eWPLfoipFZ0+cbkZW29LcUE9wrYWb0fyay9WALlgU0acb0aUAL9UKX0hkuOPDbHsNmfZDbOlTo9mhtkpdJnTcBYzF1apfoXsNMlVDbWI6hGj5p6WFoc46h+n5RMM5CDy5D656cUc6h+vRmnMGrcpdoA9BZwVkuOPDbHsNmYpc25oDBxlwt4JbUwpKX0hFMa0fbkVwociduYlKX0hgW0hkuI1HelLCbOiwe0IkuOPDbHsNL1lFlnZDbcifoaRcbldk2YlFmWmbTSYtMlMwtIid3nldmYzdy94YTE5b3klCBWPkuI1HelLCbOihULIGX0hkuOPDbHsNMaZFLYvcoAINUneAy9uOaOgAykkb0syBa9yAlkNAjSYtJO0DolzRT53FMl0cAxvcZIJDB4IA2ajF3YaDbOSRT5pdMl0wKJvV+BNlmnMGKJvIGU5pVByqKMUpGMAMGJvqZ5XcmioDBxlNaSJRJO0DolzRT5zDBfVOMlScUEVwl0JhTSYtmklfuaZdJnMCBxzcTSYtm0YtJOjcbk0coy0CUE9wo9XcB5zF2xgGeAXKa9XCbkzcUILGeAXKBOiforpKX0hDBCIhoasFuO5htOjcbk0coy0CULpwuSYtJO0DolzRT5lFmked2Olwe0IW1ngO0aAb1nUUa9ROalgOakUT1w7eWPLfoipFZ0+f3kpfoaHd2FPwMlVwyYlC3YzaBl0dt0+DB5pftePp6NMmpnXcmjPq4uLVDdliDzpLQbMJkelJp/vvwzLvCdPp6NMmpePq4uLVDdplkmPq68VFoc4OMlScT1dwJ4LfoipFZ0+F2lmdLcpdoAIRJkfwJL7eWpZcbO1FM4IcMySF2A7eWp9eWPLfoipFZ0+FukpfMy0canoBrYlFmOkctE9wtOjcbk0coy0CaSmF2aZDBySTmasCMaZk107eWPLfoipFZ0+f3kpfoaHd2FPwMlVwyYlC3YzaBl0dt0+DB5pftePp6NMmpnXcmjPq4uLVDdliDzpLQbMJkelJp/vvwzPq4uLVDdmvkdlj7F9BZwVkuOPDbHsNmnZDbcifoaWOliecbk0UBWIRJkfwJL7eWPLfoipFZ0+W1nWfBkSDBYRcbLINUnMDBxlb2flfy9jd250cB50FZILfoipFZ0+fMaZDBc5OMlScUL7eWppcJEPcB1XfuLPkuOPDbHsNLYWAuaJdoljU2a5hULIGX0hkuOPDbHsNMaZFLYvcoAINUnkTLlAb1cyALloBa9eOakAb0aUAL9UKX0hkuOPDbHsNmfZDbOlTo9mhtkpdJnTcBYzF1apfoXsNMlVDbWI6h+75C+BW1eliDzpLQbPq4uLVDdMlPgLV7dlpRuPshAVC2aZOMlScT1dwJ4LfoipFZ0+fMaZDBc5OMlScUEVwl0JhTSYtmklfuaZdJnMCBxzcTSYtm0YtJOXDZE9wo9XcB5zF2xgFoslGa9mcbOgFuaJdoljhtO0DolzRT5eAyn1CMxpC0slGUL7eWPLCUE9wo9XcB5zF2xgFoslGa9mcbOgcoa0CBlSFZILFoSpKX0hkoYlFmOLCbOiwe0Id3nldmYzdy94YTE5b3niFmYlhtO0DolzRT5eAyn1CMxpC0slGUxMCBxzcUL7eWppcJEPcB1XfuLPkoYlFmOLCbOihULIGX0hkuOPDbHsNMaZFLYvcoAINUnkTLlAb1cyALloBa9eOakAb0aUAL9UKX0hkuOPDbHsNmfZDbOlTo9mhtkpdJnTcBYzF1apfoXsNMlVDbWI6hGj5p6WW1ePq4uLVDdliDzpLQbMJkelJp/vvwzLvCdPp6NMmpePq4uLVDdplkmPq68VC2aZOMlScT1dwJ4LfoipFZ0+fMaZDBc5OMlScUEVwl0JhTSYtmklfuaZdJnMCBxzcTSYtm0YtJO0DolzRT5XfBkSDBYeOakecbk0UBWINUELC2aZfoOifoydk3YlFMlidr51dBklFJffKX0hkuOPDbHsNmfZDbOlTo9mhtkpdJnTcBYzF1apfoXsNMlVDbWI6hGj5p6WW1ePq4uLVDdliDzpLQbMJkelJp/vvwzPq4uLVDdmvkdlj7F9BZwVkuOPDbHsNmn1CMxpC0YyALYlFmOkctEVwl0JhTSYtJO0DolzRT5pdMl0OMyScZE9wuOZfBA7eWpZcbO1FM4Ifuk1cTSYtm1jCbOjDtEPObijcbn0DB9VwtOlhUn7eWPLfoipFZ0+cbkZW29LcUE9wrYWb1aKU05Na05ga1kNTLF7eWPLfoipFZ0+f3kpfoaHd2FPwMlVwyYlC3YzaBl0dt0+DB5pftelJk3lp4vljkceAKGsvVBWjGDKp+U7sVBuVVMAMUxscbYzCBflNUwVkoAsNMflfr1lF3Yic2APhUL7eWpZcbO1FM4IcMySF2A7eWp9eWp9eWpXfBkSDBHIcmaVC3Opd24IF2lmdJILFoyZCB1nFmkiGULYtmSYtmOZGUn7eWPLfoipFZ0+F2lmdJE9wo51doX7eWppcJEPwUO0DolzRT5pdMl0OMyScZLIGX0hkuOPDbHsNMaZFLYvcoAINUneAy9KT19kTLlAKX0hkuOPDbHsNmfZDbOlTo9mhtkpdJnTcBYzF1apfoXsNmYpc24I5pZQ6Rte55UPDB5pfKDBVGDzlG+8jKDbPKDzlGJ/M+JijKGsvVBWjUwpKX0hFMa0fbkVwociduYlKX0hgW0hD3YvFmWPkuniFMysWbkZCbLpKX0hkuYpc25UCbfrCbOiwe0IkuOPDbHsNMflfyYpc25TfuwPkuniFMysWbkZCbLpKX0hDBCIhoasFuO5htOzDBfVAMy3Ooy0CULpwuSYtJO0DolzRT5lFmked2Olwe0IW1ngO0aAb1YkO05gA1OUUA5ub0aUAL9UKX0hkuOPDbHsNmfZDbOlTo9mhtkpdJnTcBYzF1apfoXsNmYpc24I6w635C+B5d6y562+5ctY5D2b56ZM5RJZ5DUx6RUlwJL7eWpZcbO1FM4IcMySF2A7eWp9eWPLC2iiFlYlftE9wo1Jb2Olfoajfy9ldMYvcolVcZILF2lmdlkif0OiforSCbkZCbLPeWPJaaOoRTIJRE0hwLftHjHxHJwSeWPJO0kRwI0hhUL7eWPLfoasFyYpc25UCbfrCbOiwe0IdBkgC29VfMaZfy9ldMYvcolVcZILF2lmdlkif0OiforSwlaAOJ04wJXLC2iiFlYlftL7eWPLfoipFZ0+f3kpfoaHd2FPwMlVwyYlC3YzaBl0dt0+F2lmdJelvPbmqd7lLw3MldeMjD49BZwVkuOldbnTDBfVAMy3Ooy0CUEVwl0JhTSYtJOzDBfVb2cidoFINUnvFoaVF3YSb3Ypc24PkuOldbnTDBfVAMy3Ooy0CUXLF2lmdMy0fbklRtO0DolzRT5YcbkWFMl2CbOlU2a5BZfXD2a5k10ST1nyTlYTTy9nTrfNb1YwWTAxHJL7eWppcJIikuYpc25gcMyScZl7eWPLfoipFZ0+cbkZW29LcUE9wrYWb1YkO05gO09yA19bAL9KOzSYtJO0DolzRT53FMl0cAxvcZIJDB4IA2ajF3YaDbOSRT5zDBfVwKGsvVBWjGBLSGJ0pUxvFoaVF3YS562+5ctY5DUx6RUlRo9XcB5zF2XIFMa0fbkVNaSJRJOzDBfVb2cidoFVwl0JhTSYtmklfuaZdJnMCBxzcTSYtm0YtJOJCbYlYjOUcbY1duWINUnJCbYlYjOgcB5jd2OlhtOzDBfVCbO1FMApKX0hkuOPDbHsNmYpc24INUELCMyzcTC0AMazfBx0KX0hkuOPDbHsNMaZFLYvcoAINUneAy9TaAYeOaYTKX0hFMa0fbkVwuOZfBA7eWp9C2y0C2IIhra4C2aXfolvdJELcULIGX0hkuOPDbHsNMaZFLYvcoAINUneAy9TUAfKb0fNOaYga1kNTLF7eWPLfoipFZ0+f3kpfoaHd2FPwMlVwyYlC3YzaBl0dt0+F2lmdJemqd7lLw3lvwRlVRISdBazF2ymcT0JRJOlRT5mcbOYcbYzCBflhtLpKX0hFMa0fbkVwociduYlKX0hgW0hgW0hFuaJdoljwoc1dMY0DB9VwuclFMlMGUILFoyZCB1nFmkiGULYtmSYtmOZGUn7eWppcJEPwUO0DolzRT5pdMl0OMyScZLIGX0hkuOPDbHsNMaZFLYvcoAINUneAy9KT19kTLlAKX0hkuOPDbHsNmfZDbOlTo9mhtkpdJnTcBYzF1apfoXsNmclFMlMGUeMmhqPSwNmlhipdMl05pD55qKa77ZH5pGI5qKa6R+d6hoH6DQH562+wJL7eWpZcbO1FM4IcMySF2A7eWp9eWPLd3kmA2lmdL1zcZE9wtOXCbkidAyZFMy5BZkTDBfVCbO1FMAJbTSYtMlMwtildbn0GUILd3kmA2lmdL1zcZLpwuSYtJO0DolzRT53FMl0cAxvcZIJDB4IA2ajF3YaDbOSRT52cbkpcmLIFoyZCB1nFmkiGGDaSKG7iKU4qGGsvVBWjGBsl+DVsGU4VVGpVVKEIJwpKX0hkuOPDbHsNMaZFLYvcoAINUneAy9TUAfKb1cnTyayb05aTrX7eWpZcbO1FM4IcMySF2A7eWp9eWp1dmYlftILFoyZCB1nFmkiGaSJA2lmdMy0fbklwl0pKX0hD3YvFmWPkuniFMysWbkZCbLpKX0hkuclFMlMGaYpc25rCbOiwe0IkuOPDbHsNMflfyYpc25TfuwPkuniFMysWbkZCbLpKX0hkoYPCbkTcbWINUnsCl9LcbOlC3OgcB5jd2OpdMFPkuclFMlMGaYpc25rCbOiRoyZFMy5hE0hwlaAOJ04wJXYtJkuWjwzHTwJRE0hwLftUZwYtJLpKX0hkuOldbnBcbkpcmlTDBfVOoy0CUE9wo1Jb2YvdmclFmOgcB5jd2OpdMFPkuclFMlMGaYpc25rCbOiRtkaarCsKtwSkoYPCbkTcbWpKX0hkuOPDbHsNmfZDbOlTo9mhtkpdJnTcBYzF1apfoXsNmclFMlMGUEI5d6y6DQH6h+n562+5ctY5pBX5P2Vwe1dwJ4LfoasFyclFMlMGaYpc25rCbOiwt4JbUwpKX0hkuklF3aSftE9wo9XcB5zF2xgfMaZDBc5htO0cB1XaMaZDBc5A2lmdLOiforSCMyzcTC0b2OlC29LcUILd3kmA2lmdL1zcZLSkuOPDbHsNLYWAuaJdoljU2a5Rr9WOA5TA0xgWAxuT19TUrr1HTwpKX0hDBCIhtOZcbY1duWINT0IHULIGX0hkuOPDbHsNMaZFLYvcoAINUneAy9TaAYeOaYTKX0hgBaSF2AIeWppcJEPkuklF3aSftE9NUEXhUn7eWPLfoipFZ0+cbkZW29LcUE9wrYWb1cyALloBa9oWAlHOAW7eWp9cBxzcUn7eWPLfoipFZ0+cbkZW29LcUE9wrYWb1cyALloBa9uT0aTb1fUT05uKX0hgW0hDBCIhtO0DolzRT5lFmked2Olwe09NUneAy9TaAYeOaYThUn7eWpZcbO1FM4Ifuk1cTSYtm1lduYlwuSYtmklfuaZdJnMCBxzcTSYtm0Ytm1jCbOjDtEPObijcbn0DB9VwtOlhUn7eWPLfoipFZ0+cbkZW29LcUE9wrYWb1cyALloBa9uT0aTb1fUT05uKX0hkuOPDbHsNmfZDbOlTo9mhtkpdJnTcBYzF1apfoXsNmclFMlMGUEI6DQH6h+n562+5ctY5dZt5dJ4Ro1lF3Yic2A9wJ4LcU0+c2a0TBazF2ymcUIphTSYtmklfuaZdJnMCBxzcTSYtm0Ytm0Ytmn1CMxpCZnMfB5jfolvdJnmcbOTDBfVW2aZfrlLhtLYtmSYtmklfuaZdJELfoipFZ0+FukpfMy0canoBrYlFmOkceSYtm0Ytmn1CMxpCZnMfB5jfolvdJnldMYZGbn0AolVhtOXDB4SkoYiFMWpeWp7eWp0FmLIGX0hkuOPDbHsNMaVC1npdJE9wo51doX7eWppcJEPwUO0DolzRT5pdMl0OMyScZLIGX0hkuOPDbHsNMaZFLYvcoAINUneAy9KT19kTLlAKX0hkuOPDbHsNmfZDbOlTo9mhtkpdJnTcBYzF1apfoXsNMaVC3k5FuOWDB4I5pZQ6Rte55UPDB5pfKDBVGDzlG+8jKDbPKDzlGJ/M+JijKBhPKBviJwpKX0hFMa0fbkVwociduYlKX0hgW0hkunpdLkSd2Yqwe0IkuOPDbHsNmnpdjkWDB5tdo9jD1fpfoieCbkLTL8PkunpdJXLC2yZctL7eWppcJEPcB1XfuLPkunpdLkSd2YqhULIGX0hkuOPDbHsNMaZFLYvcoAINUneAy9yTLYWUA5gO09yA19bAL9KOzSYtJO0DolzRT53FMl0cAxvcZIJDB4IA2ajF3YaDbOSRT5ldMYZGbn0AolVwynkTVBhPKBviVB8IVB4VtzPqQumqpglvpglJRemMPOWDB5tdo9jD+U4VVGpVJwpKX0hFMa0fbkVwociduYlKX0hgW0hkunqwe0Id3nldmYzdy9XD2a5b2flfy9XfBkSDBHPkuOPDbHsNLYWAuaJdoljU2a5hTSYtJOiwe0Id3nldmYzdy9XD2a5b2flfy9LcbOiDBxzhtOXDZL7eWPLdJE9wtOiBZkZF2rJbaSJdJkfKX0hkoAINUELCaSJFmYiwl1dwMAJbTSYtJOpdmOKwe0IkuOPDbHsNMkpdjkpdmWPko4pKX0hkolVfrAINUELfoipFZ0+CMlVHMlVftILcUL7eWPLC3k5FuOlctE9wokjFo93dB9LhtO0DolzRT5JDB4ZDB50htOXDB5tdo9jDZLSkolVfrASkolVfr4pKX0hDBCIhtrLC3k5FuOlctLIGX0hkuOPDbHsNMaZFLYvcoAINUneAy9yTLYWUA5gO09yA19bAL9KOzSYtJO0DolzRT53FMl0cAxvcZIJDB4IA2ajF3YaDbOSRT5ldMYZGbn0AolVwunpdVBhPKBviVBLSGJ0pUxlFmked2OlNaSJRJO0DolzRT5lFmked2Olwt4JbUwpKX0hFMa0fbkVwociduYlKX0hgW0hkukJwe0IkuOPDbHsNMkjcoajDoa4htOjFmlXfoaLhTSYtJOZCJE9wtO0DolzRT5XCBOzfuwPkukJhTSYtJOjFmlXfoaLwe0IDoa4HMkpdJILFMwpKX0hkuOPDbHsNMaZFLYvcoAINUneAy9TaAYeOaYTKX0hkuOPDbHsNMaVC1npdJE9wokiF2A2Yy9ldMYvcoAPkoYZGbn0cBWpKX0hDBCIhtO0DolzRT5lFmked2Olwe09NUneAy9TaAYeOaYThUn7eWpZcbO1FM4Ifuk1cTSYtm1lduYlwuSYtmklfuaZdJnMCBxzcTSYtm0Ytm1jCbOjDtEPObijcbn0DB9VwtOlhUn7eWPLfoipFZ0+cbkZW29LcUE9wrYWb0aKW1nkTl9uT0aTb1fUT05uKX0hkuOPDbHsNmfZDbOlTo9mhtkpdJnTcBYzF1apfoXsNMaVC3k5FuOWDB4IArlK5CQI5D+o5dZt5dJ4Ro1lF3Yic2A9wJ4LcU0+c2a0TBazF2ymcUIphTSYtmklfuaZdJnMCBxzcTSYtm0Ytm0YtmnZDbcifoAIcmaVC3Opd24IFolVHlnpdLkSd2Yqa2l0DrYiFMOKTZILCanpdJXLCAYiFMOKTZLYtmSYtJO0AolVWml0cUE9wtO0DolzRT5XDB4ZAolVWMxvC2SPkoyWDB4pKX0hDBCIhoasFuO5htO0AolVWml0cULpwuSYtmklfuaZdJnVfBxSKX0hgW0hDBCIhuY0FMxldJILCAYiFMOKTZLINT0IHTrpwuSYtJOiW2yZcr5Nwe0IwjEXwJ4LCAYiFMOKTzSYtm1lduYlwE0hDBCIhuY0FMxldJILCAYiFMOKTZLINT0IHTwpwuSYtJOiW2yZcr5Nwe0IwjEJRJOiW2yZcr5NKX0hgW0hkuOWCB5tGbOlwe0IkuOPDbHsNMcvFM1ifynidJILCAYiFMOKTZL7eWppcJEPcB1XfuLPkuOWCB5tGbOlhULIGX0hFMa0fbkVwo51doX7eWp9eWPLfrk5foAINUniFmkiGUIpKX0hcM9ZwtILDUE9weE7koLINeI7koLIhZSpwuSYtJO0Wml0caSLDa0INUELfynpdLk5foadkolfwy4LfynidLk5foadkolfKX0hgW0hkuklF3aSftE9wtwJKX0hcM9ZcByjDtEPkuOtGbOlwoyzwtOqcbLINT4LfMySfBApwuSYtJOZcbY1duWIRj0IC2iZhtO2CBx1cUL7eWp9eWpZcbO1FM4IkuklF3aSfeSYtm0YtmnZDbcifoAIcmaVC3Opd24IcM9ZdBy0AoyVhtOiAoyVhW0hGX0hkuOWCB5HcB4INUnzfukScB4PkoyWCB4pKX0hkuOtGbOlwe0ICbkZCbLPhTSYtJO0cB1Xwe0IkuOWCB5HcB4IRTrzKX0hfuk5wuSYtJO0Wml0caSXbUE9weE7eWPLfrk5foadHa0INUEXKX0hcM9ZwtILDUE9wew7koLINeI7koLIhZSpwuSYtJOiwe0Iwlx4wJ5zfBkzfuwPkoyWCB4SkuOldbESHJL7eWPLfrk5foadkolfwe0IDoa4coajhtOihTSYtJO0cB1XwtS9wew7eWp9eWp9C2y0C2IIhra4C2aXfolvdJELcULIGX0hFMa0fbkVwo51doX7eWp9eWpZcbO1FM4IkuOtGbOlKX0hgW0hFukpfMy0cUnMfB5jfolvdJnXDB4ZAolVWMxvC2SPkoyWDB4peWp7eWPLfyOldbEINUExKX0hkuOWDB5HcB4INUnzfukScB4PkoyWDB4pKX0hkuOtGbOlwe0ICbkZCbLPhTSYtmOZGUn7eWPLfrk5foadHy0INUELfynpdLxldjSYtJOpwe0IHeSYtMlMwtILfynpdLxldJElHJE9NUEXhUn7eWpMd3wIhtOpwe0IHeSLDUE8kuOWDB5HcB47hUn7eWPLCUE9woilGoOlCZIJbuIJRmY1CmY0FJILCanpdJXLDUXZhUL7eWPLfrk5foadkuOAcB1XbUE9wtOiKX0hDBCIhtILDUE9NUELfynpdLxldJEsHJLIkJCPkuOAcB1XweX3hULIGX0hcM9ZwtILGtE9wtO0aoasFtEqHTSLGtE8KeSLGtEqhZLIGX0hkuOtGbOlBZO4bUE9wt0xKX0hgW0hgW0hkuOAcB1XwtSqKX0hkoLIhz0IHjSYtm0Ytm1lduYlwuSYtMcvFJEPkoLINUEXKZOpweXLfynpdLxldJEsHTSpwuSYtJOiwe0IDoa4coajhtkFGtwVF3aJF3OZhtOiAolVRtOpRtOpwtSZhUL7eWPLfrk5foadkuOAcB1XbUE9wtOiKX0hDBCIhtOpwe09wtO0AolVToaVwt0zhUn7eWPLCJE9woilGoOlCZIJbuIJRmY1CmY0FJILCanpdJXLfynpdLxldJEsHULIRJkowJL7eWPLfrk5foadhtO0aoasFtEqHUlfwe0Ikow7eWppcJEPkuOAcB1XwtSxweX3hUn7eWpMd3wIhtO4we0IkuOAcB1XwtSZKZO4weX4KZO4wtSqhUn7eWPLfrk5foadkuifwe0IRTr7eWp9eWp9eWp9eWPLfyOldbEIhZS7eWPLDUEqNUEZKX0hgW0hgW0hgBYifoYPwtiyGoYlFuOpd24IkoApwuSYtmklfuaZdJnVfBxSKX0hgW0hFMa0fbkVwtO0Wml0cTSYtm0Ytmn1CMxpCZnMfB5jfolvdJnldMYZGbn0Ooy0CUILcoy0CULYtmSYtmOZGUn7eWPLfoipFZ0+cB5jaMySfBAINUnVfBxSKX0hDBCIhtrLfoipFZ0+DB5pfrcidoFpwuSYtJO0DolzRT5lFmked2Olwe0IW1ngTL9gUA5kaeSYtJO0DolzRT53FMl0cAxvcZIJDB4IA2ajF3YaDbOSRT5ldMYZGbn0Ooy0CUeMmhqPSwNmlhipdMl05pD55qKa77ZH5pGI5qKa6R+d6hoH5CQI5D+owJL7eWpZcbO1FM4IcMySF2A7eWp9eWPLC2iiFlYlftE9wo1Jb2Olfoajfy9ldMYvcolVcZILcoy0CUxiFmkiGUIYtJkaarCsKtwSeWPJO0wZHzrZwJXYtJkuWLSJeWPphTSYtJO0dbnrCbOiwe0IdBkgC29VfMaZfy9ldMYvcolVcZILcoy0CUXJaaOoRTIJRtOjDoyZA2a0hTSYtJOXDZE9wo9XcB5zF2xgFoslGa9mcbOgFuaJdoljhtO0DolzRT5eAyn1CMxpC0slGUL7eWPLCUE9wo9XcB5zF2xgFoslGa9mcbOgcoa0CBlSFZILFoSpKX0hko4INUELCaSJFmYiwl1dwM4JbTSYtJOlwe0IkoydwmkzCUkfBZklwl07eWPLDB50TJE9wtO0DolzRT5JDB4ZDB50htOVhTSYtJOpdmOywe0IkuOPDbHsNMkpdjkpdmWPkoApKX0hkoYZGbn0cBWINUnJC3nvf21vctILfoipFZ0+CMlVHMlVftILfo1XOoy0CULSkolVfrASkolVfr4pKX0hDBCIhtrLC3k5FuOlctLIGX0hkuOPDbHsNMaZFLYvcoAINUneAy9yTLYrWaOnb0fNOaYga1kNTLF7eWPLfoipFZ0+f3kpfoaHd2FPwMlVwyYlC3YzaBl0dt0+cB5jFmlXfrOiforI5pBX5P2V5CQI5D+o5DUx6RUlRoaZFLYvcoA9BZwVkuOPDbHsNMaZFLYvcoAIRJkfwJL7eWpZcbO1FM4IcMySF2A7eWp9eWPLFMwINUELfoipFZ0+CMYLcBYPcbIPkoYZGbn0cBWpKX0hkukJwe0IkuOPDbHsNmnicuY0FJILFMwpKX0hkoYZGbn0cBWINUnPcbIZCMlVhtOZCJL7eWPLfoipFZ0+cbkZW29LcUE9wrYWb1YaW0YyA1H7eWPLfoipFZ0+cB5jaMySfBAINUnJCbYlYjOgcB5jd2OlhtOjFmlXfoaLhTSYtMlMwtILfoipFZ0+cbkZW29LcUE9NT0IW1ngA1aeW0aTAZLIGX0hFMa0fbkVwuOZfBA7eWp9cBxzcUn7eWpZcbO1FM4IcMySF2A7eWp9eWp9C2y0C2IIhra4C2aXfolvdJELcULIGX0hkuOPDbHsNMaZFLYvcoAINUneAy9yTLYrWaOnb0fNOaYga1kNTLF7eWPLfoipFZ0+f3kpfoaHd2FPwMlVwyYlC3YzaBl0dt0+cB5jFmlXfrOiforI5pBX5P2V5CQI5D+o5dZt5dJ4Ro1lF3Yic2A9wJ4LcU0+c2a0TBazF2ymcUIphTSYtmklfuaZdJnMCBxzcTSYtm0Ytm0Ytmn1CMxpCZnMfB5jfolvdJnLcBYZGbn0Ooy0CUILcoy0CULYtmSYtmOZGUn7eWPLfoipFZ0+coajaMySfBAINUnVfBxSKX0hDBCIhtrLfoipFZ0+DB5pfrcidoFpwuSYtJO0DolzRT5lFmked2Olwe0IW1ngTL9gUA5kaeSYtJO0DolzRT53FMl0cAxvcZIJDB4IA2ajF3YaDbOSRT5LcBYZGbn0Ooy0CUeMmhqPSwNmlhipdMl05pD55qKa77ZH5pGI5qKa6R+d6hoH5CQI5D+owJL7eWpZcbO1FM4IcMySF2A7eWp9eWPLFoslGaklF291FMYlwe0Id3nldmYzdy9XD2a5b2flfy9XFMl2CbOlhtO0DolzRT5YcbkWFMl2CbOlU2a5BZfXD2a5k10pKX0hDBCIho9XcB5zF2xgFukpfMy0ca9LcBYZGbn0hokiF2A2Yy9LcBYvcoAPkoOiforpRtO0dbnrcBYBCBx1cUXLFoslGaklF291FMYlRr9WOA5TA0xgTL9gAryrOrlKOZLpwuSYtJO0DolzRT5lFmked2Olwe0IW1ngA1aeW0aTAzSYtm1lduYlwuSYtJO0DolzRT5lFmked2Olwe0IW1ngOraeOryAWa9uT0aTb1fUT05uKX0hgW0hkuOPDbHsNMOlC1cidualwe0IkuOPDbHsNmkldB92ca9XCBOLDB5mhtO0dbnrcBYBCBx1cUL7eWppcJEPkuOPDbHsNMaZFLYvcoAINT09wrYWb1YaW0YyA1HpwuSYtmklfuaZdJn0FmalKX0hgBaSF2AIGX0hFMa0fbkVwociduYlKX0hgW0hgBYifoYPwtiyGoYlFuOpd24IkoApwuSYtJO0DolzRT5lFmked2Olwe0IW1ngOraeOryAWa9uT0aTb1fUT05uKX0hkuOPDbHsNmfZDbOlTo9mhtkpdJnTcBYzF1apfoXsNMOlC3k5FuOrCbOiwKDaSKDYqVJmP+BviVB8IVB4VtxscbYzCBflNUwVkoAsNMflfr1lF3Yic2APhUL7eWpZcbO1FM4IcMySF2A7eWp9eWp9eWpXFMl2CbOlwoc1dMY0DB9VwoflfyYpc25TfuwPkuniFMysWbkZCbLpeWp7eWPLFMazfBx0we0IwJw7eWPLDB52CBxpcrcpcBxLF0yZFMy5we0IcbiXdo9LcUImRtFSkuOPDbHsNmYpc25kdmcidolLOMlldoOzhTSYtMcvFMaiC2IIhtOXCbkidAyZFMy5woyzwtOqcbLINT4LfMySfBApwuSYtMlMwtipdl9iFmkiGUILD2a5RtOpdmcidolLOMlldoOzWbkZCbLphUn7eWpjd250DB51cTSYtm0YtJOZcbY1duWINUELFMazfBx0wt4LD2a5wt5eAy9ROalgaLyHaAagW09KTLaeatEVkucidualwt5eAy9YOaYTWAfyb0YNTL5yW1W7eWp9eWppcJEPW1ngTAaTA0yuOa9eT05KOAYAwe09NUnzfBkzfuwPkuklF3aSftXsHUXxhULIGX0hkuklF3aSftE9wuY1CmY0FJILFMazfBx0ReESF3OZdoaVhtOZcbY1duWpwt0xhTSYtm0YtmklfuaZdJELFMazfBx0KX0hgW0hFuaJdoljwoc1dMY0DB9VwoflfyYpc24PhW0hGX0hFMa0fbkVwtO0DolzRT5zDBfVKX0hgW0hFuaJdoljwoc1dMY0DB9VwoflfraVC1npdJIpeWp7eWpZcbO1FM4IkuOPDbHsNMaVC1npdjSYtm0Ytmn1CMxpCZnMfB5jfolvdJnmcbOydMYBCBx1cUIpeWp7eWpZcbO1FM4IkuOPDbHsNMaVC1cidualKX0hgW0hFuaJdoljwoc1dMY0DB9VwoflfrOlC1cidualhtLYtmSYtmklfuaZdJELfoipFZ0+coajaMySfBA7eWp9eWpXfBkSDBHIcmaVC3Opd24Ic2a0AukpfMy0canoBrYlFmOkctIpeWp7eWpZcbO1FM4IkuOPDbHsNmnZDbcifoaWOliecbk0UBW7eWp9eWpXfBkSDBHIcmaVC3Opd24Ic2a0AuaJdoljW0aUW2aZfrlLhtLYtmSYtmklfuaZdJELfoipFZ0+FuaJdoljW0aUW2aZfrlLKX0hgW0hFuaJdoljwoc1dMY0DB9VwoflfraZFLYvcoAPhW0hGX0hFMa0fbkVwtO0DolzRT5lFmked2OlKX0hgW0hFuaJdoljwoc1dMY0DB9VwoflfraZFL1zcZIpeWp7eWppcJEPcB1XfuLPkuOPDbHsNMaZFLYvcoAphUn7eWPLfoipFZ0+cbkZTbYmwe0IF2aScjP6koaZFL1iFyseAy9aTLsKT1fKb1fUT05ubTSYtm1lduYlwuSYtJO0DolzRT5lFmkYF2FINUnzcBxMKjPLcbkZTByXBZO0DolzRT5lFmked2OlbTSYtm0YtMlMwtildbn0GUILfoipFZ0+cbkZTbYmhULIGX0hkuOPDbHsNMaZFL1zcZE9wuYldoC6KJOlFmkYCbndW1ngaA5RTL9bTl9bAL9KO107eWp9eWpZcbO1FM4IkuOPDbHsNMaZFL1zczSYtm0YtmnZDbcifoAIcmaVC3Opd24If3kpfoaHd2FPkoxvcZLYtmSYtMaZFM9Zb2xvcZILdo9mwt4Jbo4JReEpKX0hgW0hFukpfMy0cUnMfB5jfolvdJnJDB4ZDB50htOJDB5LCbOihW0hGX0hkoilGoOiforINUnJDB4ZDoa4htOJDB5LCbOihTSYtmklfuaZdJELfoipFZ0+CMYPcbiLcBHPkoilGoOiforpKX0hgW0hFukpfMy0cUnMfB5jfolvdJnJC2ilGoOlCZILDoa4coy0CULYtmSYtJOZcbWINUEmHtF7eWPLdoaVwe0IF3OZdoaVhtOPcbiLCbOihTSYtMcvFJEPkoLINUEXKZOpweXLdoaVKZOpwtSqhUn7eWPLDoa4we0IF3aJF3OZhtOPcbiLCbOiRtOpRerpKX0hkoOlCZE9woilGoOlCZILDoa4hTSYtJOlGuEINUELdoaVwt0LDUEsHTSYtJOXd3FINUnJC3nvfZImHTCmRtOlGuEpKX0hkuOsFtE9wokjdbaShtOLcBHSkunvfZL7eWPLFMa0we0ICMYicoWPkuklftXLfo1XhTSYtm0YtmklfuaZdJELFMa0KX0hgW0hFukpfMy0cUnMfB5jfolvdJnXCBOzfuwPkuYZCZXLdoaVwe0IHjA2RtOjDuwINUEmHtFSkoWINUEmTtFpeWp7eWPLFMa0we0IfukpdUILF3kjhTSYtJOXCBOScB4INUELdoaVwt1zfukScB4PkuklftL7eWppcJEPkunicoxldJE+HtLIGX0hkunictE9wuY0Fl9ZcbnlCbWPkoYPFJXLFoyLdoaVhTSYtMlMwtizfuk0d3aXFoaZhtOLhUE9NUEmTtFpwuSYtJOZcbWINUELFoyLwt4LFMa0KX0hgBaSF2AIGX0hkuklftE9wtOZcbWIRJOXCBW7eWp9eWp9eWpZcbO1FM4IkuklfeSYtm0YtmnZDbcifoAIcmaVC3Opd24ICMYLcBYPcbIPkoOlC2OiforpeWp7eWPLFZE9wtOLcBYLCbOiKX0hkuklftE9wtFmKX0hf2ipdoAIhtOzwtr9wtFXkZLIGX0hko0INUnJC21vctILFZXmHTCmhTSYtJOzwe0ICMYLDbCPkuHSkzr2kZL7eWPLDoa4we0IcoajDoa4htOshTSYtJOZcbWINUELDoa4wt4LFMa0KX0hgW0hFMa0fbkVwtOZcbW7eWp9eWpXFMl2CbOlwoc1dMY0DB9Vwo51dBklFl90d19JDB5iFmLPko51dBklFJXLCMxvC2szDbplhW0hGX0hkokiF2AINUEJHjA2wjSYtJOZcbY1duWINUEJwjSYtJOLDbCINUELdmasCMaZKX0hf2ipdoAIhtOLDbCINjEpwE0hGX0hko1vctE9wokjdB9LhtOLDbCSkokiF2ApKX0hkoOpfJE9wokjcol2htOLDbCSkokiF2ApKX0hkuklF3aSftE9woYPFJILdB9LhUEVkuklF3aSfeSYtm0YtmklfuaZdJnzfukgFoyLhtOZcbY1duWSkokSd2YqF2l6cUXJbuIXHtwSA1OUb1nnOy9HOAcAhTSYtm0YtmnZDbcifoAIcmaVC3Opd24ICMlVCbk5b3Ovb251dBklFJILcoy0CULYtmSYtJOJCbYlwe0Iwjw1YJw7eWPLFMyLDbIINUEJHUw7eWPLFMazfBx0we0IwjEJKX0hcM9ZwtILDUE9wuY0FMxldJILcoy0CULIRTr7koLINj0IHeSLDUEsRULIeWp7eWPLcolmDbWINUnvFMWPkoOifoy7kol9hTSYtJOXCbk0b3klFZE9wokjdbaShtOLDBfpftXLFMyLDbIpKX0hkuklF3aSftE9wokjCBOLhtOZcbY1duWSkuniFmOgFMazhTSYtJOZCBOpGtE9wokjdbaShtOZCBOpGtXLCMyzcUL7eWp9eWpZcbO1FM4IkuklF3aSfeSYtm0YtmnZDbcifoAIcmaVC3Opd24IFMasd3clb3nicoOpdMFPkoOiforpeWp7eWPLd2cMF2a0we0IF3OZFmnvFZILcoy0CUXJbuIXHtwSHUL7eWpZcbO1FM4IF3aJF3OZhtOLCbOiRtOvcMczcbWIhzrpKX0hgW0hFukpfMy0cUnMfB5jfolvdJnzDBfVOmkvdaY0FJILF2lmdlY0FJLYtmSYtmOZGUn7eWPLfoipFZ0+F2lmdJE9wo51doX7eWppcJEPwUO0DolzRT5pdMl0OMyScZLIGX0hkuOPDbHsNMaZFLYvcoAINUneAy9KT19kTLlAKX0hkuOPDbHsNmfZDbOlTo9mhtkpdJnTcBYzF1apfoXsNmYpc25oFM9sA3OZwKDFQVJXI+GAQolVDbTMlqmMS5bvvwzMl6eMS5bPv5vPPCzmqd7lLw0JhTSYtmklfuaZdJnMCBxzcTSYtm0YtMlMwtildbn0GUILF2lmdlY0FJLpwuSYtJO0DolzRT5lFmked2Olwe0IW1ngO0aAb1YkO05gA1OUUA5ub0aUAL9UKX0hkuOPDbHsNmfZDbOlTo9mhtkpdJnTcBYzF1apfoXsNmYpc25oFM9sA3OZwKJKs+BNlVB+iGGsvVBWjGBsl+GSpVU4SVBLSGJ0pUwpKX0hFMa0fbkVwociduYlKX0hgW0hkuYpc25gcMyScZE9wo9XcB5zF2xgF2lmdJILF2lmdlY0FJXLF2lmdMy0fbklRtO0DolzRT5YcbkWFMl2CbOlU2a5BZfXD2a5k10ST1nyTlYTTy9nTrfNb1YwWTAxHJL7eWppcJEPwUOzDBfVb2cidoFpwuSYtJO0DolzRT5lFmked2Olwe0IW1ngA0luTl9uT0aTb1fUT05uKX0hFMa0fbkVwociduYlKX0hgW0hkokiF2A2YyklF3aSftE9wokiF2A2Yy9ldMYvcoAPkuYpc25ifuaZcUL7eWPLfoipFZ0+F2lmdJE9wtOJCbYlYjOUcbY1duW7eWPLfoipFZ0+cbkZW29LcUE9wrYWb1YaW0YyA1H7eWpZcbO1FM4Ifuk1cTSYtm1jCbOjDtEPObijcbn0DB9VwtOlhUn7eWPLfoipFZ0+cbkZW29LcUE9wrYWb1YkO05gO09yA19bAL9KOzSYtJO0DolzRT53FMl0cAxvcZIJDB4IA2ajF3YaDbOSRT5zDBfVOmkvdaY0FJemqd7lLw3lvwRlVRISdBazF2ymcT0JRJOlRT5mcbOYcbYzCBflhtLpKX0hFMa0fbkVwociduYlKX0hgW0hgW0hFukpfMy0cUnMfB5jfolvdJn2cbkpcmloFM9sA3OZhtOXCbkidAyZFMy5hW0hGX0hfuk5wuSYtMlMwtIikuOPDbHsNMlVDbOoCBxmhUn7eWPLfoipFZ0+cbkZW29LcUE9wrYWb05Nb0lKUaW7eWPLfoipFZ0+f3kpfoaHd2FPwMlVwyYlC3YzaBl0dt0+fMaZDBc5OmkvdaY0FJeMmhqPSwNmlhipdMl05pD55qKa77ZH5pGI5qKa6R+d6hoH6DQH562+wJL7eWpZcbO1FM4IcMySF2A7eWp9eWPLd3kmA2lmdL1zcZE9wtOXCbkidAyZFMy5BZkTDBfVCbO1FMAJbTSYtMlMwtildbn0GUILd3kmA2lmdL1zcZLpwuSYtJO0DolzRT53FMl0cAxvcZIJDB4IA2ajF3YaDbOSRT52cbkpcmloFM9sA3OZwuniFMysWbkZCbmMldemV4TLVh3mqd7lLw3lqcgMqqbLVRqmQdqjIwwJhTSYtJO0DolzRT5lFmked2Olwe0IW1ngA0luTl9BWAxaOa9KaAxHKX0hFMa0fbkVwociduYlKX0hgW0hfB5zcbWPkuniFMysWbkZCbldwlYpc25ifuaZcUkfhTSYtJO2cbkpcmlTDBfVOoy0CUE9wtOXCbkidAyZFMy5BZkXdoypdLOiforJbTSYtJOZcbY1duWINUnvFoaVF3YSb3clFMlMGUILfMaZDBc5A2lmdLOiforSCMyzcTC0b2OlC29LcUILd3kmA2lmdL1zcZLSkuOPDbHsNLYWAuaJdoljU2a5Rr9WOA5TA0xgWAxuT19TUrr1HTwpKX0hDBCIhtOZcbY1duWINT0IHULIGX0hkuOPDbHsNMaZFLYvcoAINUneAy9TaAYeOaYTKX0hgBaSF2AIGX0hDBCIhtOZcbY1duWINT0IHtLIGX0hkuOPDbHsNMaZFLYvcoAINUneAy9BOakkOllgOLykTrarKX0hgBaSF2AIGX0hkuOPDbHsNMaZFLYvcoAINUneAy9BOakkOllgO09yA19bAL9KOzSYtm0Ytm0YtMlMwtILfoipFZ0+cbkZW29LcUE9NT0IW1ngA1aeW0aTAZLIGX0hFMa0fbkVwuOZfBA7eWp9cBxzcUn7eWpZcbO1FM4IcMySF2A7eWp9eWp9C2y0C2IIhra4C2aXfolvdJELcULIGX0hkuOPDbHsNMaZFLYvcoAINUneAy9BOakkOllgO09yA19bAL9KOzSYtJO0DolzRT53FMl0cAxvcZIJDB4IA2ajF3YaDbOSRT52cbkpcmloFM9sA3OZwKMQjKJvIGGsvVBWjGB8IVB4VtxscbYzCBflNUwVkoAsNMflfr1lF3Yic2APhUL7eWpZcbO1FM4IcMySF2A7eWp9eWp9eWpXfBkSDBHIcmaVC3Opd24IF2lmdLcpdoAPkocpdoaWCbOPhW0hGX0hfuk5wuSYtMlMwtIikuOPDbHsNMlVDbOoCBxmhUn7eWPLfoipFZ0+cbkZW29LcUE9wrYWb05Nb0lKUaW7eWPLfoipFZ0+f3kpfoaHd2FPwMlVwyYlC3YzaBl0dt0+F2lmdLcpdoAI5pZQ6Rte55UPDB5pfKDBVGDzlG+8jKDbPKDzlGJ/M+JijKGsvVBWjUwpKX0hFMa0fbkVwociduYlKX0hgW0hkuOldbnoDBxlAoy0DtE9wo1Jb2YvdmclFmOgcB5jd2OpdMFPkocpdoaWCbOPRtkuWLSJRtkifbOvwJL7eWPLfoipFZ0+F2lmdLcpdoatGaniFMysFZILfoasFrcpdoaWCbOPRtkzDor1HTwJRtwJhTSYtm1jCbOjDtEPObijcbn0DB9VwtOlhUn7eWPLfoipFZ0+cbkZW29LcUE9wrYWb1YkO05gO09yA19bAL9KOzSYtJO0DolzRT53FMl0cAxvcZIJDB4IA2ajF3YaDbOSRT5zDBfVOMlScUeMlPgLV7dmqd7lLw3lvwRlVRISdBazF2ymcT0JRJOlRT5mcbOYcbYzCBflhtLpKX0hFMa0fbkVwociduYlKX0hgW0hgW0hFuaJdoljwoc1dMY0DB9VwuYpc25oDBxlWmlWCbkidbHPkocpdoaWCbOPRtOzDBfndofKCB1lRtOldMYvcolVcZLYtmSYtmOZGUn7eWppcJEPwUO0DolzRT5pdMl0OMyScZLIGX0hkuOPDbHsNMaZFLYvcoAINUneAy9KT19kTLlAKX0hkuOPDbHsNmfZDbOlTo9mhtkpdJnTcBYzF1apfoXsNmYpc25oDBxlWmlWCbkidbHI5pZQ6Rte55UPDB5pfKDBVGDzlG+8jKDbPKDzlGJ/M+JijKGsvVBWjUwpKX0hFMa0fbkVwociduYlKX0hgW0hDBCIhtypF19MDBxlhtOMDBxlAoy0DtLpwuSYtJO0DolzRT5lFmked2Olwe0IW1ngA0luTl9uT0aTb1fUT05uKX0hkuOPDbHsNmfZDbOlTo9mhtkpdJnTcBYzF1apfoXsNmYpc25oDBxlWmlWCbkidbHI5pDu5RV25RJY5D2C5cZP77ZH5pGI5qKa6R+d6hoH562+5ctYRMcpdoA9BZwVkocpdoaWCbOPwt4JbUwpKX0hFMa0fbkVwociduYlKX0hgW0hkoY0GtE9woiiF2igDB5pftILF2lmWBxmTMyscUL7eWPLDoyVcoxlwe0IcM9XcB4PkocpdoaWCbOPRtkZwJL7eWPLdBy4we0IcMlScbYpGMAPkocpdoaWCbOPhTSYtJOjDuaVDZE9weWXKTC7eWppcJEPko1iGtE8NUELC2i1dMSpwuSYtJOldMOkdMOlGtE9weE7eWp9cBxzcUn7eWPLcB5LUB5LcbIINUEPko1iGtElkoYPfB5qwe09NUEXwe8LdBy4wt8IkoYPfB5qwePIko1iGtEvwtOjDuaVDZEqHUL7eWp9eWPLcB5LAMaicrxldMf0DtE9wtOsCbIIkUOjDuaVDzSYtJOZcByLOoy0CUE9wtwJKX0hkoY0GtE9woiiF2igDB5pftILF2lmWBxmTMyscUL7eWpMd3wIhtOpwe0IHeSLDUE8NUELcB5LUB5LcbI7koLIhZSpwuSYtMlMwtILDUE9NUELcB5LUB5LcbIpwuSYtMlMwtILcB5LAMaicrxldMf0DtE+HtLIGX0hkuklCBOrCbOiwe0IcmklCBWPkoiidMOScUXLcB5LAMaicrxldMf0DtL7eWp9cBxzcUn7eWPLFMaicrOiforINUnMFMaictILDoyVcoxlRtOjDuaVDZL7eWp9eWp9cBxzcUn7eWPLFMaicrOiforINUnMFMaictILDoyVcoxlRtOjDuaVDZL7eWp9eWPLFMaicrOiforINUnzfukgFMaXdoyjcUiiFmkiGUIYtJkFFlxVwJXYtJkFFJwSeWPJbo4JeWPpRtwJRtOZcByLOoy0CUL7eWpPCbYPb3aXcoy0cUILC3O4RtOZcByLOoy0CUL7eWp9eWpMC2xvF2APkoiidMOScUL7eWpjdoaiFmY0CbOjCBYPcUIpKX0hkoiiF2iUcbY1duWINUnPCbYPb2cpdMyShtOjfuIpKX0hDBCIhtO0DolzRT5zDBfVOmkvdaY0FJiPcbIZCMlVhtOPCbYPAMazfBx0hULpwuSYtJOLCbOiwe0IwlxZbo4JRJO0DolzRT5mcbOTDBfVhtL7eWppcJEPcMlSca9XfbOgC29VfoaVfuHPkocpdoaWCbOPRtOLCbOiRrckTragWanWOA5rhUEiNT0IcMySF2ApwuSYtMYScByZF3OifoYiC2ilhtL7eWpZcbO1FM4Ifuk1cTSYtm1lduYlwuSYtJO0DolzRT5lFmked2Olwe0IW1ngA0luTl9uT0aTb1fUT05uKX0hkuOPDbHsNmfZDbOlTo9mhtkpdJnTcBYzF1apfoXsNmYpc25oDBxlWmlWCbkidbHI5CDc5CBl562+5ctY5pBX5P2V6wGz5pDu5RV25DUx6RUlRMcpdoA9BZwVkocpdoaWCbOPwt4JbUwpKX0hC2xlCbkzfoy0C2yjDoAPhTSYtmklfuaZdJnMCBxzcTSYtm0Ytm1lduYlwuSYtJO0DolzRT5lFmked2Olwe0IW1ngA0luTl9uT0aTb1fUT05uKX0hkuOPDbHsNmfZDbOlTo9mhtkpdJnTcBYzF1apfoXsNmYpc25oDBxlWmlWCbkidbHI5pDu5RV2562+5ctY5DUx6RUlRMcpdoA9BZwVkocpdoaWCbOPwt4JbUwpKX0hC2xlCbkzfoy0C2yjDoAPhTSYtmklfuaZdJnMCBxzcTSYtm0Ytm1jCbOjDtEPObijcbn0DB9VwtOlhUn7eWPLfoipFZ0+cbkZW29LcUE9wrYWb1YkO05gO09yA19bAL9KOzSYtJO0DolzRT53FMl0cAxvcZIJDB4IA2ajF3YaDbOSRT5zDBfVOMlScAk5AoyZCB1zwKDBi+U7sVGsvVBWjGB8IVB4VtxscbYzCBflNUwVkoAsNMflfr1lF3Yic2APhUL7eWpjdoaiFmY0CbOjCBYPcUIpKX0hFMa0fbkVwociduYlKX0hgW0hgW0hFuaJdoljwoc1dMY0DB9VwuclFMlMGAcpdoAPkocpdoaWCbOPhW0hGX0hfuk5wuSYtMlMwtIikuOPDbHsNMlVDbOoCBxmhUn7eWPLfoipFZ0+cbkZW29LcUE9wrYWb05Nb0lKUaW7eWPLfoipFZ0+f3kpfoaHd2FPwMlVwyYlC3YzaBl0dt0+fMaZDBc5OMlScUeMmhqPSwNmlhipdMl05pD55qKa77ZH5pGI5qKa6R+d6hoH562+5ctYwJL7eWpZcbO1FM4IcMySF2A7eWp9eWPLfoasFrcpdoaWCbOPwe0IdBkgC29VfMaZfy9ldMYvcolVcZILcMlScanifoISwLftUZwSwMy1fo8JhTSYtmklfuaZdJELfoipFZ0+fMaZDBc5OMlScAk5AoyZCB1zhtO0cB1XOMlScanifoISwmYPCTAxHJwSwJwpKX0hgBYifoYPwtiyGoYlFuOpd24IkoApwuSYtJO0DolzRT5lFmked2Olwe0IW1ngA0luTl9uT0aTb1fUT05uKX0hkuOPDbHsNmfZDbOlTo9mhtkpdJnTcBYzF1apfoXsNmclFMlMGAcpdoAI5pDu5RV26DQH562+5dZt5dJ4Ro1lF3Yic2A9wJ4LcU0+c2a0TBazF2ymcUIphTSYtmklfuaZdJnMCBxzcTSYtm0Ytm0Ytmn1CMxpCZnMfB5jfolvdJn2cbkpcmloDBxlWmlWCbkidbHPkocpdoaWCbOPRtOzDBfndofKCB1lRtOldMYvcolVcZLYtmSYtmOZGUn7eWppcJEPwUO0DolzRT5pdMl0OMyScZLIGX0hkuOPDbHsNMaZFLYvcoAINUneAy9KT19kTLlAKX0hkuOPDbHsNmfZDbOlTo9mhtkpdJnTcBYzF1apfoXsNmclFMlMGAcpdoatGaniFMysFZeMmhqPSwNmlhipdMl05pD55qKa77ZH5pGI5qKa6R+d6hoH562+5ctYwJL7eWpZcbO1FM4IcMySF2A7eWp9eWppcJEPwBlzb2cpdoAPkocpdoaWCbOPhULIGX0hkuOPDbHsNMaZFLYvcoAINUneAy9BOakkOllgO09yA19bAL9KOzSYtJO0DolzRT53FMl0cAxvcZIJDB4IA2ajF3YaDbOSRT52cbkpcmloDBxlWmlWCbkidbHI5pDu5RV25RJY5D2C5cZP77ZH5pGI5qKa6R+d6hoH6DQH562+RMcpdoA9BZwVkocpdoaWCbOPwt4JbUwpKX0hFMa0fbkVwociduYlKX0hgW0hko1iGtE9wocpdoazDbplhtOMDBxlAoy0DtL7eWPLDoyVcoxlwe0IcM9XcB4PkocpdoaWCbOPRtkZwJL7eWPLDB5LcbIINUEsHTSYtMczcBaqhtOPCB5LdoASkolVcoa4RyYyOAsgOA5rhTSYtJOvFMfTDBfVCbO1FMAINUEJwjSYtmfPDBxlwtIPkoHINUnMFMaictILDoyVcoxlRerphUEiNT0IcMySF2ApwuSYtMlMwtILCZE9NUEJbo4JguXLCZE9NUEJbuwJhW0hCmklCBS7eWPLd3kmA2lmdMy0fbklwe0IkoHIRJOvFMfTDBfVCbO1FMA7eWPLDB5LcbIINUELDB5LcbIIRTr7eWpMF2alDZILDoyVcoxlRtOpdMOlGtxTOAaRb0aKOtL7eWp9eWpMC2xvF2APkoiidMOScUL7eWPLDoyVcoxlwe0IcM9XcB4PkocpdoaWCbOPRtkihZwpKX0hcmOZfB5jCbOlhtOPCB5LdoASko1iGt1zfukScB4Pko9Zc1Ypc25ifuaZcULpKX0hcMYSd3YlhtOPCB5LdoApKX0hC2xlCbkzfoy0C2yjDoAPhTSYtJOsCbIINUnMDBxlF2l6cUILcMlScanifoIpKX0hkoiidMOScUE9wocvFoaVhtOMDBxlAoy0DtXJFJwpKX0hkoYPfB5qwe0IYeE5YjSYtMlMwtILdBy4weX9wtOjDuaVDZLIGX0hkoaVcrlVcoa4we0IHeSYtm1lduYlwuSYtJOldMOkdMOlGtE9wtILdBy4wtALC2i1dMSINT09weEINZOsCbIIRZELC2i1dMSIKJELdBy4wt8IkoYPfB5qwtSxhTSYtm0YtJOldMOUcByLToaVc3OPwe0Iko1iGtElkoYPfB5qKX0hkuklCBOrCbOiwe0IwJw7eWPLC3O4we0IDoyzDy9pdMl0htOzDBfndofKCB1lhTSYtMcvFJEPkoLINUEXKZOpweX9wtOldMOkdMOlGeSLDUEqhZLIGX0hDBCIhtOpwe09NUELcB5LUB5LcbIpwuSYtMlMwtILcB5LAMaicrxldMf0DtE+HtLIGX0hkuklCBOrCbOiwe0IcmklCBWPkoiidMOScUXLcB5LAMaicrxldMf0DtL7eWp9cBxzcUn7eWPLFMaicrOiforINUnMFMaictILDoyVcoxlRtOjDuaVDZL7eWp9eWp9cBxzcUn7eWPLFMaicrOiforINUnMFMaictILDoyVcoxlRtOjDuaVDZL7eWp9eWPLFMaicrOiforINUnzfukgFMaXdoyjcUiiFmkiGUIYtJkFFlxVwJXYtJkFFJwSeWPJbo4JeWPpRtwJRtOZcByLOoy0CUL7eWpPCbYPb3aXcoy0cUILC3O4RtOZcByLOoy0CUL7eWp9eWpMC2xvF2APkoiidMOScUL7eWpjdoaiFmY0CbOjCBYPcUIpKX0hkoiiF2iUcbY1duWINUnPCbYPb2cpdMyShtOjfuIpKX0hkuniFMysWbkZCbLINUniFmkiGUIYtJkXdoypdLOiforJNT5PcbIZCMlVhtOPCbYPAMazfBx0hUXYtJkTDBfVCbO1FMAJNT4Ld3kmA2lmdMy0fbkleWPpKX0hkuclFMlMGaklF3aSftE9wtO0DolzRT52cbkpcmloFM9sA3OZhtOXCbkidAyZFMy5hTSYtMlMwtiMDBxlb3n1fy9jd250cB50FZILcMlScanifoISko9Zc1Ypc25ifuaZcUxoUAxyb0yWAraKOtLIwT09wociduYlhUn7eWpjdoaiFmY0CbOjCBYPcUIpKX0hFMa0fbkVwtO2cbkpcmlUcbY1duW7eWp9cBxzcUn7eWPLfoipFZ0+cbkZW29LcUE9wrYWb1cyALloBa9oWAlHOAW7KX0hkuOPDbHsNmfZDbOlTo9mhtkpdJnTcBYzF1apfoXsNmYpc25oDBxlWmlWCbkidbHI5CDc5CBl5C6g562+5ctY5pBX5P2V6wGz5pDu5RV25DUx6RUlRMcpdoA9BZwVkocpdoaWCbOPwt4JbUwpKX0hC2xlCbkzfoy0C2yjDoAPhTSYtmklfuaZdJnMCBxzcTSYtm0Ytm1jCbOjDtEPObijcbn0DB9VwtOlhUn7eWPLfoipFZ0+cbkZW29LcUE9wrYWb1cyALloBa9uT0aTb1fUT05uKX0hkuOPDbHsNmfZDbOlTo9mhtkpdJnTcBYzF1apfoXsNmclFMlMGAcpdoatGaniFMysFZeMlPgLV7dmqd7lLw3pQPzPq4ulvwRlVRISdBazF2ymcT0JRJOlRT5mcbOYcbYzCBflhtLpKX0hC2xlCbkzfoy0C2yjDoAPhTSYtmklfuaZdJnMCBxzcTSYtm0Ytm0Ytm0YtI==

Function Calls

fread 3
strtr 2
fclose 1
OOO0000O0 1
urldecode 1
str_replace 1
base64_decode 2

Variables

$O0O0000O0 OOO0000O0
$OO00O0000 34576
$OO00O00O0 define('CP_SIGN_FILE',"sign.file"); define('CP_SIGN_FILE_..
$OO0OO0000 fopen
$OO0OO000O fread
$OO0OO00O0 strtr
$OOO000000 th6sbehqla4co_sadfpnr
$OOO0000O0 base64_decode
$OOO0O0O00 index.php

Stats

MD5 25c09c0476a5be7596a42532686ae39e
Eval Count 3
Decode Time 257 ms