ACC SHELL
<?php
/**
* $Id: TinyExplorer.php,v 1.11 2009/08/10 21:44:19 phpvision Exp $
* @copyright Copyright 2008-2009, {@link http://www.php-vision.de PHP-Vision Webentwicklung}
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
* @author Michael Schwarz <M.Schwarz@php-vision.de>
* @version $Revision: 1.11 $
* @package TinyExplorer
*
*
*
* function TinyExplorerCallBack(topfield, url, type, topwindow) {
* var connector = "../../../../module/filebrowser.php?type="+type;
* window.open(connector, "file_manager", "modal,width=550,height=350,scrollbars=1");
* }
*/
/**
* path to your content folder you would like to manage
* example: $root_dir='/my/absolute/path/';
*/
$root_dir='../../soubory';
$display_subdir_size = true; # its faster without
$display_hidden_dirs = true; # like .hiddendir/
$display_hidden_files = true; # or like .htacces
# if enabled it deletes only requestet files types
# so if you only see images it only deletes images
# it deletes only hidden dirs or files wich are allowed to display
$allow_recursiv_delete = false;
/**
* translations to customize the explorer for your needs
*/
$uperror = array(
'nospace' => 'Na disku není dostatek místa.',
'unknown' => 'Neznámá chyba při náhravání souboru.',
'badtype' => 'Nepovolený typ souboru.',
'isempty' => 'Uploadujete prázdný soubor.',
'nowrite' => 'Místní složka je chráněná.'
);
$question = array(
'deldir' => 'Opravdu chcete smazat složku %DIR% ?',
'delfile' => 'Opravdu chcete smazat soubor %FILE% ?'
);
$type = array(
'???' =>'Neznámý',
'directory' =>'Složka',
'jpg' =>'JPEG-Image',
'gif' =>'GIF-Image',
'png' =>'PNG-File',
'php' =>'PHP-File',
'html' =>'HTML-File',
'htm' =>'HTML-File'
);
$headname = array(
'file' => 'Název',
'size' => 'Velikost',
'type' => 'Typ',
'time' => 'Poslední změna'
);
/**
* allowed fileextensions for the varios tiny modes
*/
$regex = array(
'media' => '#^.*\.(flv|mov|avi|mpg|mp3|ogg|wav)$#',
'image' => '#^.*\.(png|jpg|jpeg|gif|bmp|tif)$#',
'file' => '#^.*\.(zip|rar|tar|gz|bz2|pdf|xls|xlsx|doc|docx|html|htm)$#',
'all' => '#^.*$#'
);
$chybanahravani = 0;
##################################################################################
# PHP CODE PART - DONT CHANGE ANYTHING BELOW UNLESS YOU KNOW WHAT YOU ARE DOING #
##################################################################################
error_reporting(defined('E_STRICT')?(E_ALL|E_STRICT):(E_ALL)); # while dev time we wanna know what happens #
define('ABSPATH', dirname(__FILE__).'/'); # get the absolute path of this file #
session_start();
$_SESSION['rqtype'] = isset($_SESSION['rqtype'])?$_SESSION['rqtype']:'image';
$_REQUEST['type'] = isset($_REQUEST['type'])?$_REQUEST['type']:$_SESSION['rqtype'];
/*
switch( $_REQUEST['type'] ){
case 'all' : $rqtype = 'all'; break;
case 'file' : $rqtype = 'file'; break;
case 'media': $rqtype = 'media'; break;
case 'flash': $rqtype = 'media'; break;
default : $rqtype = 'image';
}
*/
$rqtype = 'all';
$_SESSION['rqtype'] = $rqtype;
#echo $_SESSION['rqtype'];
if(isset($_GET['image']) and $_GET['image'] == 'arrow') display_gif();
if(isset($_GET['image']) and $_GET['image'] == 'icons') display_png();
if(isset($_GET['F']) and !strstr($_GET['F'],'../'))download($_GET['F']);
if(isset($_GET['V']) and !strstr($_GET['V'],'../'))viewfile($_GET['V']);
register_shutdown_function('Performance',microtime());
if(function_exists("date_default_timezone_set")
and function_exists("date_default_timezone_get"))
@date_default_timezone_set(@date_default_timezone_get());
/**
* lang mods have same filename, but an .xx.php extension
* the first file (if there is one) will be used as language
*/
$pattern = substr( basename(__FILE__), 0, -4) . '.??.php';
if($files=glob(ABSPATH.$pattern)) include_once($files[0]);
$root_dir = $root_dir?rtrim($root_dir):'.';
if( substr($root_dir,0,1) != '/') $root_dir = ABSPATH.$root_dir;
$getdir = isset($_REQUEST['dir']) ? $_REQUEST['dir']:'';
//$getdir = preg_replace ('~../|./~','',trim($getdir,'/'));
$absdir = $root_dir.'/'.($getdir?$getdir.'/':'');
$usedir = '/'.trim(str_replace(ABSPATH,'',$absdir),'/').'/';
/*
if(!strpos($getdir,'/')) $subdir = '';
else
*/
$subdir = substr($getdir,0,strrpos($getdir,'/'));
if(!file_exists($absdir)){ $getdir=''; jumpback(); }
if(isset($_GET['F'])) download($root_dir.'/'.ltrim($_GET['F'],'/'));
#echo $absdir;
$Order=getCurrentSorting($_REQUEST,'filebrowser',0,'name',1);
if (isset($_POST['upload'])){
$nazev = $_FILES['myfile']['name'];
if(file_exists($absdir.$nazev))
{
$chybanahravani = 1;
}
else {
$chybanahravani = 0;
$error = strFile($absdir,$rqtype);
if($error<1) switch($error) {
case 0 : $_ERR = $uperror['unknown']; break;
case -2 : $_ERR = $uperror['isempty']; break;
case -3 : $_ERR = $uperror['badtype']; break;
case -4 : $_ERR = $uperror['nospace']; break;
default : $_ERR = $uperror['unknown'];
}
}
}
if (isset($_POST['makedir'])) crtDir($absdir,$_POST['dirname']);
if (isset($_GET['delfile'])) delFile($absdir,$_GET['delfile']);
if (isset($_GET['deldir'])) delDir($absdir,$_GET['deldir']);
#####################################################################################################
# DISPLAY HTML CODE - DISPLAY HTML CODE - DISPLAY HTML CODE - DISPLAY HTML CODE - DISPLAY HTML CODE #
#####################################################################################################
#header('Content-Type: application/xhtml+xml; charset=UTF-8'); # Bug in IE 8 ?!?
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="cs">
<head>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
<title>Správce souborů - <?php echo utf8_encode($getdir); ?> - Tiny Explorer</title>
<style type="text/css">
/* Fixed footer/header code */
body{margin:0}/* for ie mac*/
/* commented backslash hack v2 \*/
html, body{height:100%;padding:0}
html #contain-all{
position:absolute;
overflow-y:scroll;
width:98%;
height:100%;
z-index:1;
}
* html, * html body{
overflow:hidden;
padding:20px 0 30px 0;
margin:-20px 0 -30px 0;
padd\ing:0;
ma\rgin:0;
}
* html #outer {
overflow:auto;
height:99.9%;
voice-family: "\"}\""; voice-family:inherit;
}
* html #contain-all{
position:absolute;
overflow-y:scroll;
width:100%;
height:100%;
z-index:1;
}
/* end hack */
#top-bar{
position:absolute;/* ie6 will treat this as fixed because of a bug where overflow:auto is set on a parent */
top:0px;
left:0px;
height:20px;
width:100%;
margin:0;
padding:0;
z-index:999;
overflow:hidden;
}
#topbar-inner {height:20px; background:red;}
#footer-inner {height:30px; background:red;}
/* mac hide - reduce page to allow the scrollbar to remain visible \*/
* html #topbar-inner,* html #footer-inner {margin-right:17px;}
/* end hide*/
#footer{
position:absolute;
bottom:0;
width:100%;
height:30px;
z-index:888;
}
.spacer {height:30px}/* same height as footer/header to preserve space*/
p{margin-top:0}
html>body #top-bar,html>body #footer{position:fixed}/* for moz/opera and others*/
/* { margin:0px; padding:0px; font-size:11px; font-family:Arial; }*/
/*html,body,form { height:100%; max-height:100%; }
body { background:#fff; text-align:left; overflow-y:scroll; overflow-x:hidden;}
tr{ height:0px; } /* fix for IE */
body { background:#fff; font-size:11px; font-family:Arial; }
a{ text-decoration:none; }
a.selected{ color:#F00; }
a:hover{ text-decoration:underline; }
input.file { font-size:11px;}
input.text { font-size:11px; }
input.sbmt1 { font-size:11px; }
input.sbmt2 { font-size:11px; }
#files tr:hover td{ background-color:#f0f0ff; color:#222; }
#tfoot { border-top:1px solid #999; background-color:#f0f0f0; color:#000; }
#files tbody tr td { white-space:nowrap; overflow:hidden; }
td.forcewidth{ padding:0px; font-size:0px;}
/*td.forcewidth div{ width:800px;}*/
#files .spacehead { height:21px;}
#files .spacefoot { height:31px;}
#files tr td { line-height:18px; padding:0px 2px 1px 2px; }
input.name, input.size, input.time, input.type, input.leer
{ width:100%; height:20px; text-align:left; padding:0px 2px 2px 2px;
background:#f0f0f0 url('<?php echo $_SERVER['PHP_SELF'];?>?image=arrow') center center no-repeat;
} input.size { text-align:right; }
#thead input {font-size:11px;}
#thead th.file { width:auto; }
#thead th.size { width:70px; }
#thead th.type { width:100px;}
#thead th.time { width:106px;}
#thead th.leer { width:22px; }
#files td { font-size:11px; font-family:Arial; color:#333; }
#files td.pad1 { background-color:; width: 8px; padding:0px 0px; }
#files td.icon { background-color:; width: 16px; padding:0px 0px; }
#files td.file { background-color:; width: auto; padding:0px 2px; }
#files td.size { background-color:; width: 65px; padding:0px 2px; text-align:right; }
#files td.type { background-color:; width: 97px; padding:0px 2px; text-align:left; }
#files td.time { background-color:; width:104px; padding:0px 2px; text-align:left; }
#files td.delo { background-color:; width: 16px; padding:0px 0px; text-align:right; }
#files td.pad2 { background-color:; width: 4px; padding:0px 0px; }
#tfoot td{white-space:nowrap; padding:4px;}
#tfoot td.left { width:178px;}
#tfoot td.space{ padding:0px;}
#tfoot td.right{ width:271px;}
#tfoot span.icon{ margin:2px 2px 0px 0px;}
th.up input.name { background-position:72px 4px; }
th.down input.name { background-position:72px -27px; }
th.up input.size { background-position:5px 4px; }
th.down input.size { background-position:5px -27px; }
th.up input.type { background-position:85px 4px; }
th.down input.type { background-position:85px -27px; }
th.up input.time { background-position:85px 4px; }
th.down input.time { background-position:85px -27px; }
#files td.selected{ background-color:#f3f3f3; }
span.icon { display:block; width:16px; height:16px; float:left; line-height:0px; font-size:0px; }
span.icon { background:url('<?php echo $_SERVER['PHP_SELF'];?>?image=icons') -96px center no-repeat; }
span.dir { background-position:+00px center; }
span.diradd { background-position:-16px center; }
span.dirdel { background-position:-32px center; }
span.dirtop { background-position:-48px center; }
span.fileadd { background-position:-64px center; }
span.filedel { background-position:-80px center; }
span.file { background-position:-96px center; }
span.pdf { background-position:-112px center;}
span.zip, span.rar, span.tar, span.gz, span.tgz, span.bz2 { background-position:-128px center; }
span.xlsx, span.xls { background-position:-144px center; }
span.pps, span.ppt { background-position:-160px center; }
span.docx, span.doc { background-position:-176px center; }
span.office { background-position:-192px center; }
span.html, span.htm { background-position:-208px center; }
span.js, span.css, span.log, span.txt { background-position:-224px center; }
span.mp3, span.ogg, span.wav { background-position:-240px center; }
span.bmp, span.png, span.gif, span.jpg { background-position:-256px center; }
span.avi, span.mpg, span.mov { background-position:-272px center; }
span.php { background-position:-288px center; }
</style>
<!--[if IE 8]> <style type="text/css">
#thead th.leer input{ height:20px; margin-bottom:-3px; }
#tfoot td.right{ width:297px;}
input.file { padding:2px 2px; font-size:12px;}
#files .spacehead { height:20px;}
#files .spacefoot { height:30px;}
</style>
<![endif]-->
<!--[if IE 7]> <style type="text/css">
#tfoot span.icon{ margin-top:3px}
#tfoot td.right span.icon{ position:relative; left:3px; }
input.text { height:14px; }
#tfoot td.right{ width:299px; text-align:right;}
input.text { padding:1px 2px;}
</style><![endif]-->
<!--[if lte IE 7]> <style type="text/css">
input.sbmt1, input.sbmt2
{ height:22px; padding:1px 4px; margin-bottom:-1px;}
#tfoot td.left{ width:190px;}
input.file { font-size:12px; }
</style><![endif]-->
<!--[if IE 6]> <style type="text/css">
#files td.pad1 { width:23px; }
#files { margin-left:-17px; }
</style><![endif]-->
<!--[if lte IE 6]> <style type="text/css">
#footer-inner { margin-bottom:-20px; background:green;}
</style><![endif]-->
<script type="text/javascript" src="../jquery-1.7.1.min.js"></script>
<script type="text/javascript" src="tiny_mce_popup.js"></script>
<script type="text/javascript">
/* <![CDATA[ */
<?
if($chybanahravani==1){
echo 'alert("CHYBA - SOUBOR NEBYL NAHRÁN NA SERVER!\n\nSoubor s tímto názvem je již na severu. Pokud si opravdu přejete soubor nahrát, změňte název.");';
}
?>
function fileSelect(filename) { //let our opener know what we want
var editor = "<? echo $_GET['editor']; ?>";
var returnID = "<? echo $_GET['returnID']; ?>";
if(editor == "tinymce")
{
try
{
var win = tinyMCEPopup.getWindowArg("window");
}
catch(err)
{
alert("Chyba při vkládání!");
return;
}
// insert information now
win.document.getElementById(tinyMCEPopup.getWindowArg("input")).value = filename;
// are we an image browser
if (typeof(win.ImageDialog) != "undefined")
{
// we are, so update image dimensions...
if (win.ImageDialog.getImageData)
win.ImageDialog.getImageData();
// ... and preview if necessary
if (win.ImageDialog.showPreviewImage)
win.ImageDialog.showPreviewImage(filename);
}
// close popup window
window.close();
tinyMCEPopup.close();
}
else if(editor == "standalone")
{
var inp = "<? echo $_GET['inp']; ?>";
if($.browser.msie)
{
window.dialogArguments.document.getElementById(returnID).value = filename;
if(inp=="soubor") window.dialogArguments.zmenaInputuS(returnID);// added by LukT
else window.dialogArguments.zmenaInputu(returnID);// added by LukT
}
else {
window.opener.document.getElementById(returnID).value = filename;
if(inp=="soubor") window.opener.zmenaInputuS(returnID);// added by LukT
else window.opener.zmenaInputu(returnID);// added by LukT
}
window.close();
}
window.close();
}
function ConfirmDelDir(dirname) {
var msg = '<?php echo $question['deldir']; ?>';
return confirm( msg.split('%DIR%').join(dirname));
}
function ConfirmDelFile(filename) {
var msg = '<?php echo $question['delfile']; ?>';
return confirm(msg.split('%FILE%').join(filename));
}
function LeftClickEvent(e) { e=e || window.event; return LeftClick(e,this); }
//function RightClickEvent(e){ e=e || window.event; return RightClick(e,this); }
function EventInit() {
tbodypart = document.getElementById('files');
tbodyrows = tbodypart.getElementsByTagName('tr');
for( var x=1; x < tbodyrows.length-1; x++ )
{
ahrefs = tbodyrows[x].getElementsByTagName('a');
/* if(ahrefs[0].href.split('?')[1].substr(0,2) == 'F=')
ahrefs[0].oncontextmenu=RightClickEvent; */
}
}
function RightClick( send , elem)
{ var parts = elem.href.split('?');
document.location = parts[0]+'?V='+parts[1].substr(2);
return false;
}
/* ]]> */
</script>
</head>
<body onload="EventInit()">
<?php $slnk = '?type='.$rqtype.'&dir='.urlencode($getdir).'&'; ?>
<div id="top-bar"><div id="topbar-inner">
<table id="thead" width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<th colspan="3" class="file <?php if($Order['SORT']=='name') echo ($Order['DIR']?'up':'down');?>">
<a href="<?php echo $slnk.'SORT=name&DIR='.!$Order['DIR'];?>" <?php if($Order['SORT']=='name') echo 'class="selected"';?>><input type="button" value="<?php echo $headname['file']; ?>" class="name" onclick="window.location.href=this.parentNode.href; return false;" /></a>
</th>
<th class="size <?php if($Order['SORT']=='size') echo ($Order['DIR']?'up':'down');?>">
<a href="<?php echo $slnk.'SORT=size&DIR='.!$Order['DIR'];?>" <?php if($Order['SORT']=='size') echo 'class="selected"';?>><input type="button" value="<?php echo $headname['size']; ?>" class="size" onclick="window.location.href=this.parentNode.href; return false;" /></a>
</th>
<th class="type <?php if($Order['SORT']=='type') echo ($Order['DIR']?'up':'down');?>">
<a href="<?php echo $slnk.'SORT=type&DIR='.!$Order['DIR'];?>" <?php if($Order['SORT']=='type') echo 'class="selected"';?>><input type="button" value="<?php echo $headname['type']; ?>" class="type" onclick="window.location.href=this.parentNode.href; return false;" /></a>
</th>
<th class="time <?php if($Order['SORT']=='time') echo ($Order['DIR']?'up':'down');?>">
<a href="<?php echo $slnk.'SORT=time&DIR='.!$Order['DIR'];?>" <?php if($Order['SORT']=='time') echo 'class="selected"';?>><input type="button" value="<?php echo $headname['time']; ?>" class="time" onclick="window.location.href=this.parentNode.href; return false;" /></a>
</th>
<th class="leer" colspan="1" ><input type="button" value="" class="leer" disabled="disabled"/></th>
</tr>
</table>
</div></div>
<div id="footer"><div id="footer-inner">
<form action="" method="post" enctype="multipart/form-data" style="" id="mainform" name="mainform">
<table id="tfoot" width="100%" cellpadding="0" cellspacing="0" border="0">
<tr><td class="left">
<span class="icon diradd"> </span>
<input type="text" class="text" name="dirname" value="Nova slozka" onclick="javascript:if(this.value == 'Nova slozka') this.value='';" title="Názvy složek nesmí obsahovat diakritiku!!" />
<input type="submit" class="sbmt1" name="makedir" value="Vytvoř" />
</td>
<td class="space"> </td>
<td class="right">
<span class="icon fileadd" > </span>
<input type="file" class="file" name="myfile" id="myfile" onchange="" title="Názvy souborů nesmí obsahovat diakritiku!!" />
<input type="submit" class="sbmt2" id="upsbmt" name="upload" value="Nahraj" />
</td>
</tr>
</table></form>
</div></div>
<div id="outer">
<div id="contain-all">
<table id="files" width="100%" cellpadding="0" cellspacing="0" border="0">
<tbody>
<tr><td class="spacehead" colspan="8"></td></tr>
<?php
$dirs = srtFiles($absdir,getDirList($absdir),$Order['SORT'],$Order['DIR']);
if(!empty($getdir)){
echo '<tr><td class="pad1"></td>';
echo '<td class="icon '.(($Order['SORT']=='name')?'selected':'').'"><span class="icon dirtop"> </span></td>';
echo '<td class="file '.(($Order['SORT']=='name')?'selected':'').'"> <a href="?type='.$rqtype.'&inp='.$_GET['inp'].'&editor='.$_GET['editor'].'&returnID='.$_GET['returnID'].'&dir='.urlencode($subdir).'">';
echo ' .. <parent></a></td>';
echo '<td class="size '.(($Order['SORT']=='size')?'selected':'').'"></td>';
echo '<td class="type '.(($Order['SORT']=='type')?'selected':'').'">'.$type['directory'].'</td>';
echo '<td class="time '.(($Order['SORT']=='time')?'selected':'').'">'.strftime("%d.%m.%y %H:%M:%S",filemtime(substr($absdir,0,strrpos($absdir,'/')))).'</td>';
echo '<td class="delo"></td>';
echo '<td class="pad2"></td></tr>';
}
foreach($dirs as $d)if($d!='.'&&$d!='..'){
$link = '?type='.$rqtype.'&inp='.$_GET['inp'].'&editor='.$_GET['editor'].'&returnID='.$_GET['returnID'].'&dir='.urlencode($getdir).'/'.urlencode($d);
$dlnk = '?type='.$rqtype.'&inp='.$_GET['inp'].'&editor='.$_GET['editor'].'&returnID='.$_GET['returnID'].'&dir='.urlencode($getdir).'&deldir='.urlencode($d);
echo '<tr><td class="pad1"></td>';
echo '<td class="icon '.(($Order['SORT']=='name')?'selected':'').'"><span class="icon dir"> </span></td>';
echo '<td class="file '.(($Order['SORT']=='name')?'selected':'').'"> <a href="'.$link.'">'.utf8_encode($d).'</a></td>';
echo '<td class="size '.(($Order['SORT']=='size')?'selected':'').'">'.format_filesize(getDirSize($absdir.$d.'/')).'</td>';
echo '<td class="type '.(($Order['SORT']=='type')?'selected':'').'">'.$type['directory'].'</td>';
echo '<td class="time '.(($Order['SORT']=='time')?'selected':'').'">'.strftime("%d.%m.%y %H:%M:%S",filemtime($absdir.$d)).'</td>';
echo '<td class="delo"><a href="'.$dlnk.'" onclick="return ConfirmDelDir(\''.utf8_encode($d).'\')"><span class="icon dirdel"> </span></a></td>';
echo '<td class="pad2"></td></tr>'."\n";
}
$files = srtFiles($absdir,getFileList($absdir,$rqtype),$Order['SORT'],$Order['DIR']);
#print_r($files);
foreach($files as $f)
{
$endung = substr($f,strrpos($f,'.')+1);
#if(isset($icon[$endung])) $image= $icon[$endung];
#else $image = $icon['default'];
echo '<tr><td class="pad1"></td>';
echo '<td class="icon '.(($Order['SORT']=='name')?'selected':'').'"><span class="icon '.$endung.(($Order['SORT']=='name')?' selected':'').'"> </span></td>';
echo '<td class="file '.(($Order['SORT']=='name')?'selected':'').'"> <a href="javascript: fileSelect(\'soubory'.$getdir.'/'.utf8_encode($f).'\');">'.utf8_encode($f).'</a></td>';
echo '<td class="size '.(($Order['SORT']=='size')?'selected':'').'">'.format_filesize(filesize($absdir.$f)).'</td>';
echo '<td class="type '.(($Order['SORT']=='type')?'selected':'').'">'.((isset($type[$endung]))?$type[$endung]:$type['???']).'</td>';
echo '<td class="time '.(($Order['SORT']=='time')?'selected':'').'">'.strftime("%d.%m.%y %H:%M:%S",filemtime($absdir.$f)).'</td>';
echo '<td class="delo"><a href="?type='.$rqtype.'&inp='.$_GET['inp'].'&editor='.$_GET['editor'].'&returnID='.$_GET['returnID'].'&dir='.$getdir.'&delfile='.urlencode($f).'" onclick="return ConfirmDelFile(\''.utf8_encode($f).'\')">';
echo '<span class="icon filedel"> </span></a></td>';
echo '<td class="pad2"></td></tr>'."\n";
}
?>
<tr>
<td colspan="8" class="spacefoot"></td>
</tr>
</tbody>
</table>
</div>
</div>
</body>
</html>
<?php
##################################################################################
# USED FUNCTIONS - DONT CHANGE ANYTHING BELOW UNLESS YOU KNOW WHAT YOU ARE DOING #
##################################################################################
function jumpback(){
global $rqtype,$getdir;
die(header('Location: ?type='.$rqtype.'&inp='.$_GET['inp'].'&editor='.$_GET['editor'].'&returnID='.$_GET['returnID'].'&dir='.$getdir));
}
function _rmdir_recursiv($fullpath,$recursiv_allowed = false){
global $rqtype;
if(@rmdir($fullpath)) return true;
if(!$recursiv_allowed)return false;
//its not empty and recursiv deletion is allowed
if($items=getFileList($fullpath,$rqtype))
foreach( $items as $i) unlink($fullpath.$i);
if($items=getDirList($fullpath))
foreach( $items as $i)
_rmdir_recursiv($fullpath.$i.'/',$recursiv_allowed);
if(!@rmdir($fullpath)) return false;
else return true;
}
function delDir( $path, $dir ){
global $allow_recursiv_delete;
$fullpath = rtrim($path,'/').'/'.trim($dir,'/').'/';
_rmdir_recursiv($fullpath,$allow_recursiv_delete);
jumpback();
}
function delFile( $path,$file){
#echo $path.':'.$file;
if(unlink(rtrim($path,'./').'/'.$file))
jumpback();
}
function crtDir( $path,$dir ){
if(@mkdir(rtrim($path,'./').'/'.trim($dir,'./'),0755))
jumpback();
}
function strFile($path,$type)
{
global $regex,$usesize,$spacelimit;
if ( $_FILES['myfile']['error'] != UPLOAD_ERR_OK) return -1;
if ( $_FILES['myfile']['size'] <= 0 ) return -2;
if ( preg_match($regex[$type],$_FILES['myfile']['name'])){
$fileTemp = $_FILES['myfile']['tmp_name'];
$fileName = strtolower ($_FILES['myfile']['name']);
if( move_uploaded_file($fileTemp, $path . $fileName)){
$usesize += $_FILES['myfile']['size'];
return true;
}else return -4;
} else $return = -3;
unlink($_FILES['myfile']['tmp_name']);
return $return;
}
function lstDir($dir,$hidden = false)
{ $items=array();
if (!is_dir($dir) || !$dh = @opendir($dir)) return false;
while (($item = readdir($dh)) !== false)
if(strpos($item,'.') !== 0 || $hidden)
if($item != '.' && $item != '..')
$items[] = $item;
#print_r($items);
closedir($dh); return $items;
}
function getFileList($dir, $type='file' )
{
global $regex,$display_hidden_files;
$return=array();
if( $files = lstDir($dir,$display_hidden_files))
foreach($files as $file)
if( filetype($dir.$file)=='file' && preg_match($regex[$type],$file))
$return[]= $file;
return $return;
}
function getDirList( $dir )
{ global $display_hidden_dirs;
$return=array();
if( $files = lstDir($dir,$display_hidden_dirs))
foreach($files as $file)
if( filetype($dir.$file)=='dir')#&& $file != '.')
$return[]= $file;
return $return;
}
function srtFiles($path,$files,$fld='name',$dir = 0)
{
$newarr = array();
foreach($files as $d)
if($fld=='type')
$newarr[$d] = substr($d,strrpos($d,'.'));
elseif($fld=='time')
$newarr[$d] = filemtime($path.$d);
elseif($fld=='size')
$newarr[$d] = filesize($path.$d);
else $newarr[$d] = strtolower($d);
if($dir) asort($newarr);
else arsort($newarr);
return array_keys($newarr);
}
function getDirSize( $dir, $recursiv=false )
{
global $display_subdir_size; $size=0;
if( ! $display_subdir_size ) return;
//var_dump(glob(rtrim($dir,'/').'/*'));
if(glob(rtrim($dir,'/').'/*'))
foreach( glob(rtrim($dir,'/').'/*') as $i)
if( filetype($i)!='dir')$size += filesize($i);
else if( $recursiv ) $size += getDirSize($i);
return $size;
}
function format_filesize($size , $base = 1024)
{
$size = sprintf("%u", $size); $suffix='B';
if($size >= $base){ $size /= $base; $suffix='KB'; }
if($size >= $base){ $size /= $base; $suffix='MB'; }
if($size >= $base){ $size /= $base; $suffix='GB'; }
return number_format($size,0,',','.').$suffix;
}
function getCurrentSorting ( $_METHOD , $_AREA = '' , $DEFAULT_PERPAGE = 10 , $DEFAULT_SORT = 0 , $DEFAULT_DIR = 0)
{
if( !isset($_SESSION[$_AREA.'_PERPAGE'])) $_SESSION[$_AREA.'_PERPAGE'] = $DEFAULT_PERPAGE;
if( !isset($_SESSION[$_AREA.'_SORT'])) $_SESSION[$_AREA.'_SORT'] = $DEFAULT_SORT;
if( !isset($_SESSION[$_AREA.'_DIR'])) $_SESSION[$_AREA.'_DIR'] = $DEFAULT_DIR;
if( !isset($_SESSION[$_AREA.'_PAGE'])) $_SESSION[$_AREA.'_PAGE'] = 1;
if( isset($_METHOD['PERPAGE'])) switch($_METHOD['PERPAGE'])
{
case '100': $_SESSION[$_AREA.'_PERPAGE'] =100; break;
case '50' : $_SESSION[$_AREA.'_PERPAGE'] = 50; break;
case '25' : $_SESSION[$_AREA.'_PERPAGE'] = 25; break;
case '10' : $_SESSION[$_AREA.'_PERPAGE'] = 10; break;
default : $_SESSION[$_AREA.'_PERPAGE'] = 10; break;
}
if( isset($_METHOD['SORT'])) $_SESSION[$_AREA.'_SORT'] = $_METHOD['SORT'];
if( isset($_METHOD['DIR'])) $_SESSION[$_AREA.'_DIR'] = intval($_METHOD['DIR']) ? 1 : 0;
if( isset($_METHOD['PAGE'])) $_SESSION[$_AREA.'_PAGE'] = intval($_METHOD['PAGE']) ? intval($_METHOD['PAGE']) : 1;
$_SESSION[$_AREA.'_START'] = ($_SESSION[$_AREA.'_PAGE']-1) * $_SESSION[$_AREA.'_PERPAGE'];
return array(
'PERPAGE' => $_SESSION[$_AREA.'_PERPAGE'] ,
'SORT' => $_SESSION[$_AREA.'_SORT'] ,
'DIR' => $_SESSION[$_AREA.'_DIR'] ,
'PAGE' => $_SESSION[$_AREA.'_PAGE'] ,
'START' => $_SESSION[$_AREA.'_START']
);
}
function Performance($microtime){
$time = array_sum(explode(' ',microtime()));
$time-= array_sum(explode(' ',$microtime));
$time = 'Time:'.round($time * 1000).'ms ';
if(function_exists('memory_get_peak_usage'))
$time.= 'Mem:'.round(memory_get_usage()/1024).'kb';
echo "<!-- Performance: $time -->";
}
function doConditionalGet($file = false){
if(!$file) $file = __FILE__;
$timestamp = filemtime($file);
$last_modified = gmdate('D, d M Y H:i:s', $timestamp).' GMT';
$etag = md5_file($file);
header('Cache-Control: public, must-revalidate');
#header('Expires: '.gmdate("D, d M Y H:i:s",time()+($expire)).' GMT');
header('Last-Modified: '.$last_modified);
header('ETag: "'.$etag.'"');
$if_modified_since = isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ?
stripslashes($_SERVER['HTTP_IF_MODIFIED_SINCE']) :
false;
$if_none_match = isset($_SERVER['HTTP_IF_NONE_MATCH']) ?
trim(stripslashes($_SERVER['HTTP_IF_NONE_MATCH']),'"') :
false;
if (!$if_modified_since && !$if_none_match) return;
if ($if_none_match && $if_none_match != $etag) return;
if ($if_modified_since && !stristr($if_modified_since,$last_modified)) return;
die( header('HTTP/1.0 304 Not Modified') );
}
function viewfile($filename)
{
$filename = ABSPATH.trim($filename,'/');
$filename = preg_replace('~..\\|../~','',$filename);
#echo substr($filename,strrpos($filename,'.')+1);
switch( substr($filename,strrpos($filename,'.')+1) ){
case('jpg'): header('Content-Type: image/jpeg'); break;
case('png'): header('Content-Type: image/png'); break;
case('gif'): header('Content-Type: image/gif'); break;
case('html'):
case('htm'): header('Content-Type: text/html'); break;
case('txt'): header('Content-Type: text/plain'); break;
case('php'): header('Content-Type: text/plain'); break;
default: jumpback();
}
header('Content-Length: '.filesize($filename),true);
doConditionalGet($filename);
die(file_get_contents($filename));
}
function download($filename)
{
//$filename = ABSPATH.trim($filename,'/');
$filename = preg_replace('~..\\|../~','',$filename);
$filename = "soubory/".$filename;
header('Content-Type: '.mime_content_type($filename), true);
header('Content-Length: '.filesize($filename),true);
header('Content-Disposition: attachment; filename="'.basename($filename).'";',true);
header('Content-Transfer-Encoding: binary\n',true);
doConditionalGet($filename);
readfile($filename); exit();
}
function display_gif(){header('Content-Type: image/gif'); doConditionalGet(); die(base64_decode('R0lGODlhBwAoAIABAICAgP///yH5BAEAAAEALAAAAAAHACgAAAIajI9pkODnYohU2Yuz3rz7D4biOFGPCT0I8xUAOw=='));}
function display_png(){header('Content-Type: image/png'); doConditionalGet(); die(base64_decode('iVBORw0KGgoAAAANSUhEUgAAAUAAAAAQCAMAAABQt1bbAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAMAUExURcuyQ/Ly8vbOrFdsyWWNSvS3i2elmdLV5vj4+PPPyVjDoLW1tJOxhVzSX2+r0FKMMuzt7d/f3/N5CcLCwrxGBa2uz2zE+ou6ZvjmlvDtSIaGhaF4Meft9q7IpPT1YffkpjlrIaamped1bfbfd5fDglRUU/Tdl/fjh+rq6vv02Z2dnPjrtdjn1Pb29uHAV6fGmfjo5PPz84Cbxp/Y2tulO+xvL/WQSJfGSfiqVedPN4OsdejQgfPLLHx8fPXbZ3qma9uYPPv36czMzOLi4s1uLlFTmm2a1PHUgn7akTg4OcvFtZe+WomLusnJyW6mOIbIc37DzbPUlf777////+2hnEuRv0+31euvdfG0r+bm5mdnZ9XV1XyZw+3v99s8Lv788meK0pDOs+tlS5WVkO1yVvTYWUN5LFiWQ+lbQv2CI2OkRv789tyxPcvlttqaSfzy8erpNf3683JzrfOLZcFaHpWp2Zm62risdC2DCfKYfXChSXmtVezKaMeRc9LfzV+aL/PUR7vm0oSuZPbe2oSm1Xek6KDBj9mMNHyY17HE3ePEYuVqYfT0+Yy2sfbqyoWfx2WYx9rf7eq7L4i0fqPXlEOOF//+/dNlad1UTOXHcOWBe/zyy//9+V+kNuCrjvCKeXaP1fP17l5eXG6bXLG1WO2BcJG6eKy42oew1cXYvm2xR+/09/jy7/r148uJhmWY5vv9+vf4+/v69/f28vB+W/bz55WjwsbToW5wb0VFRPz8/Pv7+/r6+v39/cvLy/v8/vT198bK39DQG+7OiPDWke/QdnC4T1tdoPf69rO/r/SdY99mAqjMfFKlZJyceKqcWfn7+MXFxcPIza7mis2zpoC0Xo2NjYySmI+OheHNkf3+/l9+0Ofp7O/v7+fr5Yznoebm6Pz8/ujs5tjY1+jo8evr68rLye/myOvw32p3gJSONerARqDWjvDParTPhdvGfKzMk6vxu9/i6Fam13V1dKjPWuPn4fv7/vGcbdjUSff5/Pz47s+zdfz69oOt6v///wWZKXIAAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAIG0lEQVR42mL4TylwdvKFAsG92PgEFQw1PioACCAGigPQiWP3LjDgEAZbgM4nqGCo8VEBQAAx/NfrAgG934UgMO0/yXzf3Ya6urqMdzV2RYItQOcjCTy4CFHAOD8CjwbS+NPjMkxNTe8SpR5mPy4+IfWRWEIQIIAY/udMC542LdhxJhBYW2v/J5nvu4sDCAyB5usaXhTE5MMEGJ/u0tWFKFizlBOu4DlDuRYQKGoJQ/jHgGDVqlVZWVkQfjEIbNmyJSUFwndzm+Dm5paQkHAbwo9beoWTM7MZycKTslaLrfTr0B2EZD8yv3NbjFGMERAsh6i/JqV4UVg4ageGeoSHUABAAAEDMFtdTU0+KD4+Pihojt5/kvkQ83WB9gGBLyYfJmAogFCgFAJXwPDz3A0guHbtRiSYfywYCtIh8sUwfhKE7/ZrPxjI3Ibw45iA5lkYrOCb0LIRbP5K+7aVjYmTrVYiOUiYm5tbURHGB3G0km0h7tn29AAYyPRD1Nt+mTCBrXxRFNy9e4VFi4pcXYtEP+2GeggFAAQQMAAL1dTca2rc3Y8ePeqY859kvu8uoMG7gQEioBEJcS8qH5uCpRFwPoOcnJykJEOkVvJdMD99cVO1fRo/f1o6RL44OL+ycktlfnAShO/2sMOtdEFHy+3bEL4lp++uTRYGbhMnTvgE4utMztVpNA4I0Leqw+EgX27ha1JSirYQvtEBdm9z8+rO2H4I/5oUl5jY9i87YOr3iLq6urK7goDog0jMAAQIIGAAOh45PLMPnKCCgkEBRCLfF1zAghx4VwDiXlT+f9+9UAFDuIJuJbgCBslDhw4BA1AxmRHMX9Ume/mDlX26Dj9EfktwpUF+StL84AwI322/24LO26Udt5khfNNmoHk/Nq84wOEmAOLLqnwEhh+XxxsrfZiD9u7yvQhKg9yKED73tceCglJfIO6JWc1u/tV8VZmMEcQ8KSleXq6wqEUw94q6HmQXfcIuCiRdRQUwAxAggBj+mwTPyc6O15RQV7ZL1TT5Tzzfrx7MhwQYOIAYEQGI4CMLGEIUNCd1N8MUMADTX4Ekg7NWsiGYnxVs1ea/LK0uOA0iDwxAYOpLSgq2hPDd9nckLLi94HYpM4Rvampm9oN1DR8fn9tdEN9qyv1GvgBeXt42K0wHQexXlNLdtUsqCsI3Wn3Q3Nx8botMP8Q8KdumpuqqRYtg6o+7Tjx+8MnxiUCy6DgjZgACBBAwALNna2uDg6ehYTYogGD8JYtZWF4h8R1KREpckPh+V+tnIwJw1x4OXV0k98L5WBQohTQDQxDCB6fAAlAA6oL5WTpp/LL+9vYn0iDyW4JTkpIyMjKCLSH8hP0Lbt++zXx7IjOEP22t19q/jrsWbt78YjOIv/iNR8DnAC6usx8WIxzktA+YBoWFuXWhAXh31y7bKIh+o9Wd9n5z01fI9EP4oDIwplxVFeZeUP49ONGVHUgWuepiBiBAADH8dyjUloeGn81sh/9w/pKmwFxxfh4438GFlSncZR6E7+fnV1/9oXqqAyJ8dssCA9wKiT8PGOC1SAG4G1iVgD1gMMOguTtuRrdSBAcoBRYUAFOgoFYyB1g+XQFY/rWpWNmnQdSnBM8Hhp9lSrAlhJ/wPeH28gW3l8cyQ/iaNnp6NV2bvYGgCsS3epPI9/lzaCjbMiuYfej2a9kacjjZLoLwY2LLyvKky1bIGEH4O3aAykDVnTD1Pq497KLA3AskXX04MAMQIICAARgEDT8bG0gAQvksgYHB4uIKcH4Jq5lQplkJhO/3AQiWtWVVQN23e/duWWiAw/jzoAEOE9i1Zw/UA7NmRYRwcs7qnhUC5L9nAIHz3Io3IPL8bfr6K3kWL16sAOEnBecvzchIMQiOg/ATbt1esHHBbZlYZghf08Zr1663m7zf7V4JDkDZZf5swABkm7xYdg88AB9HOzmB+hMgvgCwAn6gZSu1CKI/Jraqqr6en1/GCML/sgNUBqqqwtwb6wOpQYCkzxMsAQgQQAz/8zTl1dSOgCrVt2/7gAEI46cFAtsOgQpwvggTkC8kAuHXfxAXF796VWVuBSx89sACHMaHBThcYA8QAR2Qv27GGgjfIB/In/b7ouD1a8lSyTc+yYDk+WHNFmAAgvhJMH4chA8MOjAAZmEwX3MSMAAbtnqfWbidBcTXsVJJ5ONjE7e30gHLo9sfqaioaJt8TSvqGoTfL7AaDIBZGKx+kWqT+NXqnTvh7o3d5gMOQZ/lAhDzUAFAADH8Zwp3aIcD1v9wvoK4ODhAYHyRU5lCQqdLIPz6Dx/a2sRVsqaegNW6u2EBDuPDAhwusAsEfTlnxXFC0ygQgD14p7XlWfKil63/QPw0IFAAA4g8MPsCQRwQQPi3mWEAwu+b9OfmEZutbVVVLCxg81baW/X28iy2Wgk3f9cuQcHHj6OBAMhX1NKK4uZepApsBoLd01lq1B/TDwTLIepVVbUuXrzo6QlzL8L9MPNQAUAA4e4L8/CLB4KyJAzMczEVOi0yD8Kpnzp16lyVLP4LiCIGFuAwfgk0wKHNGAjY66s0Y90uJAByoMz6VsHHTpfWt8IavmjyePlrXk+aNKlm855H977dhciDeyKyOgj1KPYL2i7i3rUrOhrGx2I+inpMeVQAEEB4BhN40hTSeJD4oEphHhJ/ahb/BiC1jwNiNCzAYXx4gO/bA3UMqD/uhNCwi158dPsJuYeAPCoACCAKRmMqKjaAR3v2QQd7FgOznRUSvxZaC8MFgMDJeejzUQFAgAEAgqSWH0rzmJEAAAAASUVORK5CYII='));}
function display_jpg(){header('Content-Type: image/jpg'); doConditionalGet(); die(base64_decode('iVBORw0KGgoAAAANSUhEUgAAAUAAAAAQCAMAAABQt1bbAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAMAUExURcuyQ/Ly8vbOrFdsyWWNSvS3i2elmdLV5vj4+PPPyVjDoLW1tJOxhVzSX2+r0FKMMuzt7d/f3/N5CcLCwrxGBa2uz2zE+ou6ZvjmlvDtSIaGhaF4Meft9q7IpPT1YffkpjlrIaamped1bfbfd5fDglRUU/Tdl/fjh+rq6vv02Z2dnPjrtdjn1Pb29uHAV6fGmfjo5PPz84Cbxp/Y2tulO+xvL/WQSJfGSfiqVedPN4OsdejQgfPLLHx8fPXbZ3qma9uYPPv36czMzOLi4s1uLlFTmm2a1PHUgn7akTg4OcvFtZe+WomLusnJyW6mOIbIc37DzbPUlf777////+2hnEuRv0+31euvdfG0r+bm5mdnZ9XV1XyZw+3v99s8Lv788meK0pDOs+tlS5WVkO1yVvTYWUN5LFiWQ+lbQv2CI2OkRv789tyxPcvlttqaSfzy8erpNf3683JzrfOLZcFaHpWp2Zm62risdC2DCfKYfXChSXmtVezKaMeRc9LfzV+aL/PUR7vm0oSuZPbe2oSm1Xek6KDBj9mMNHyY17HE3ePEYuVqYfT0+Yy2sfbqyoWfx2WYx9rf7eq7L4i0fqPXlEOOF//+/dNlad1UTOXHcOWBe/zyy//9+V+kNuCrjvCKeXaP1fP17l5eXG6bXLG1WO2BcJG6eKy42oew1cXYvm2xR+/09/jy7/r148uJhmWY5vv9+vf4+/v69/f28vB+W/bz55WjwsbToW5wb0VFRPz8/Pv7+/r6+v39/cvLy/v8/vT198bK39DQG+7OiPDWke/QdnC4T1tdoPf69rO/r/SdY99mAqjMfFKlZJyceKqcWfn7+MXFxcPIza7mis2zpoC0Xo2NjYySmI+OheHNkf3+/l9+0Ofp7O/v7+fr5Yznoebm6Pz8/ujs5tjY1+jo8evr68rLye/myOvw32p3gJSONerARqDWjvDParTPhdvGfKzMk6vxu9/i6Fam13V1dKjPWuPn4fv7/vGcbdjUSff5/Pz47s+zdfz69oOt6v///wWZKXIAAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAIG0lEQVR42mL4TylwdvKFAsG92PgEFQw1PioACCAGigPQiWP3LjDgEAZbgM4nqGCo8VEBQAAx/NfrAgG934UgMO0/yXzf3Ya6urqMdzV2RYItQOcjCTy4CFHAOD8CjwbS+NPjMkxNTe8SpR5mPy4+IfWRWEIQIIAY/udMC542LdhxJhBYW2v/J5nvu4sDCAyB5usaXhTE5MMEGJ/u0tWFKFizlBOu4DlDuRYQKGoJQ/jHgGDVqlVZWVkQfjEIbNmyJSUFwndzm+Dm5paQkHAbwo9beoWTM7MZycKTslaLrfTr0B2EZD8yv3NbjFGMERAsh6i/JqV4UVg4ageGeoSHUABAAAEDMFtdTU0+KD4+Pihojt5/kvkQ83WB9gGBLyYfJmAogFCgFAJXwPDz3A0guHbtRiSYfywYCtIh8sUwfhKE7/ZrPxjI3Ibw45iA5lkYrOCb0LIRbP5K+7aVjYmTrVYiOUiYm5tbURHGB3G0km0h7tn29AAYyPRD1Nt+mTCBrXxRFNy9e4VFi4pcXYtEP+2GeggFAAQQMAAL1dTca2rc3Y8ePeqY859kvu8uoMG7gQEioBEJcS8qH5uCpRFwPoOcnJykJEOkVvJdMD99cVO1fRo/f1o6RL44OL+ycktlfnAShO/2sMOtdEFHy+3bEL4lp++uTRYGbhMnTvgE4utMztVpNA4I0Leqw+EgX27ha1JSirYQvtEBdm9z8+rO2H4I/5oUl5jY9i87YOr3iLq6urK7goDog0jMAAQIIGAAOh45PLMPnKCCgkEBRCLfF1zAghx4VwDiXlT+f9+9UAFDuIJuJbgCBslDhw4BA1AxmRHMX9Ume/mDlX26Dj9EfktwpUF+StL84AwI322/24LO26Udt5khfNNmoHk/Nq84wOEmAOLLqnwEhh+XxxsrfZiD9u7yvQhKg9yKED73tceCglJfIO6JWc1u/tV8VZmMEcQ8KSleXq6wqEUw94q6HmQXfcIuCiRdRQUwAxAggBj+mwTPyc6O15RQV7ZL1TT5Tzzfrx7MhwQYOIAYEQGI4CMLGEIUNCd1N8MUMADTX4Ekg7NWsiGYnxVs1ea/LK0uOA0iDwxAYOpLSgq2hPDd9nckLLi94HYpM4Rvampm9oN1DR8fn9tdEN9qyv1GvgBeXt42K0wHQexXlNLdtUsqCsI3Wn3Q3Nx8botMP8Q8KdumpuqqRYtg6o+7Tjx+8MnxiUCy6DgjZgACBBAwALNna2uDg6ehYTYogGD8JYtZWF4h8R1KREpckPh+V+tnIwJw1x4OXV0k98L5WBQohTQDQxDCB6fAAlAA6oL5WTpp/LL+9vYn0iDyW4JTkpIyMjKCLSH8hP0Lbt++zXx7IjOEP22t19q/jrsWbt78YjOIv/iNR8DnAC6usx8WIxzktA+YBoWFuXWhAXh31y7bKIh+o9Wd9n5z01fI9EP4oDIwplxVFeZeUP49ONGVHUgWuepiBiBAADH8dyjUloeGn81sh/9w/pKmwFxxfh4438GFlSncZR6E7+fnV1/9oXqqAyJ8dssCA9wKiT8PGOC1SAG4G1iVgD1gMMOguTtuRrdSBAcoBRYUAFOgoFYyB1g+XQFY/rWpWNmnQdSnBM8Hhp9lSrAlhJ/wPeH28gW3l8cyQ/iaNnp6NV2bvYGgCsS3epPI9/lzaCjbMiuYfej2a9kacjjZLoLwY2LLyvKky1bIGEH4O3aAykDVnTD1Pq497KLA3AskXX04MAMQIICAARgEDT8bG0gAQvksgYHB4uIKcH4Jq5lQplkJhO/3AQiWtWVVQN23e/duWWiAw/jzoAEOE9i1Zw/UA7NmRYRwcs7qnhUC5L9nAIHz3Io3IPL8bfr6K3kWL16sAOEnBecvzchIMQiOg/ATbt1esHHBbZlYZghf08Zr1663m7zf7V4JDkDZZf5swABkm7xYdg88AB9HOzmB+hMgvgCwAn6gZSu1CKI/Jraqqr6en1/GCML/sgNUBqqqwtwb6wOpQYCkzxMsAQgQQAz/8zTl1dSOgCrVt2/7gAEI46cFAtsOgQpwvggTkC8kAuHXfxAXF796VWVuBSx89sACHMaHBThcYA8QAR2Qv27GGgjfIB/In/b7ouD1a8lSyTc+yYDk+WHNFmAAgvhJMH4chA8MOjAAZmEwX3MSMAAbtnqfWbidBcTXsVJJ5ONjE7e30gHLo9sfqaioaJt8TSvqGoTfL7AaDIBZGKx+kWqT+NXqnTvh7o3d5gMOQZ/lAhDzUAFAADH8Zwp3aIcD1v9wvoK4ODhAYHyRU5lCQqdLIPz6Dx/a2sRVsqaegNW6u2EBDuPDAhwusAsEfTlnxXFC0ygQgD14p7XlWfKil63/QPw0IFAAA4g8MPsCQRwQQPi3mWEAwu+b9OfmEZutbVVVLCxg81baW/X28iy2Wgk3f9cuQcHHj6OBAMhX1NKK4uZepApsBoLd01lq1B/TDwTLIepVVbUuXrzo6QlzL8L9MPNQAUAA4e4L8/CLB4KyJAzMczEVOi0yD8Kpnzp16lyVLP4LiCIGFuAwfgk0wKHNGAjY66s0Y90uJAByoMz6VsHHTpfWt8IavmjyePlrXk+aNKlm855H977dhciDeyKyOgj1KPYL2i7i3rUrOhrGx2I+inpMeVQAEEB4BhN40hTSeJD4oEphHhJ/ahb/BiC1jwNiNCzAYXx4gO/bA3UMqD/uhNCwi158dPsJuYeAPCoACCAKRmMqKjaAR3v2QQd7FgOznRUSvxZaC8MFgMDJeejzUQFAgAEAgqSWH0rzmJEAAAAASUVORK5CYII='));}
?>
ACC SHELL 2018