credentials();$H=Driver::connect($jc[0],$jc[1],$jc[2]);return(is_object($H)?$H:null);}function idf_unescape($t){if(!preg_match('~^[`\'"[]~',$t))return$t;$ng=substr($t,-1);return str_replace($ng.$ng,$ng,substr($t,1,-1));}function q($P){return connection()->quote($P);}function idx($Ga,$w,$j=null){return($Ga&&array_key_exists($w,$Ga)?$Ga[$w]:$j);}function number($W){return preg_replace('~[^0-9]+~','',$W);}function int_type(){return'(tiny|small|medium|big)?int(eger|\d)?';}function number_type(){return'(^('.int_type().'|decimal|numeric|number|real|(binary_|half_|scaled_)?float\d?|(binary_)?double( precision)?|(small)?money)$)';}function text_type(){return'char|text'.(JUSH=="sql"?'|enum|set':'');}function is_user_type($T){return in_array($T,idx(driver()->structuredTypes(),lang(0),array()));}function full_type_sql(array$l){$T=$l["type"];return(is_user_type($T)?idf_escape($T).substr($l["full_type"],strlen($T)):$l["full_type"]);}function is_searchable(array$l,array$W){if(!isset($l["privileges"]["where"]))return false;if(preg_match('~NULL$~',$W["op"]))return true;$T=$l["type"];$Dk=$W["val"];$Za='binary$|bytea|raw|image|bfile|^vector$'.(JUSH=="mssql"?'|^timestamp$':'|^bit').(JUSH=="oracle"?'|^blob|^long|rowid':'');if(preg_match("~$Za~",$T))return false;if(preg_match(number_type(),$T)){$Th='-?\d+(\.\d+)?';return(bool)preg_match('~^'.$Th.(preg_match('~IN$~',$W["op"])?"( *, *$Th)*":'').'$~',$Dk);}if(preg_match('~^(small)?date|^timestamp~',$T))return(bool)preg_match('~^\d+-\d+-\d+~',$Dk);if(preg_match('~^time~',$T))return(bool)preg_match('~^\d+:\d+~',$Dk);if(preg_match('~^bool~',$T)||(JUSH=="mssql"&&$T=="bit"))return(bool)preg_match('~^(t|f|true|false|[01])$~i',$Dk);return true;}function remove_slashes(array$Y,$Zd=false){$H=array();foreach($Y as$w=>$W)$H[stripslashes($w)]=(is_array($W)?remove_slashes($W,$Zd):($Zd?$W:stripslashes($W)));return$H;}function bracket_escape($t,$Sa=false){static$Cm=array(':'=>':1',']'=>':2','['=>':3','"'=>':4','='=>':5');return strtr($t,($Sa?array_flip($Cm):$Cm));}function url_escape($P){static$Cm=array();if(!$Cm){$Cm=array(' '=>'+');foreach(str_split("\"'<>#%&+=?".ini_get("arg_separator.input"))as$nb)$Cm[$nb]=sprintf('%%%02X',ord($nb));for($r=0;$r<256;$r++){if($r<32||$r>126)$Cm[chr($r)]=sprintf('%%%02X',$r);}}return strtr((string)$P,$Cm);}function min_version($Bn,$Ig="",$g=null){$g=connection($g);$al=$g->server_info;if($Ig&&preg_match('~([\d.]+)-MariaDB~',$al,$_)){$al=$_[1];$Bn=$Ig;}return$Bn&&version_compare($al,$Bn)>=0;}function charset(Db$f){return(min_version("5.5.3",0,$f)?"utf8mb4":"utf8");}function ini_set($ti,$X){return(function_exists('ini_set')?\ini_set($ti,$X):false);}function ini_bool($Df){$W=ini_get($Df);return(preg_match('~^(on|true|yes)$~i',$W)||(int)$W);}function ini_bytes($Df){$W=ini_get($Df);switch(strtolower(substr($W,-1))){case'g':$W=(int)$W*1024;case'm':$W=(int)$W*1024;case'k':$W=(int)$W*1024;}return$W;}function max_input_vars($I,$Hi){$Mg=(int)ini_get("max_input_vars");return($Mg?(int)floor(($Mg-$Hi)/$I):0);}function max_input_vars_error(){$Df="max_input_vars";return lang(1,"$Df = ".ini_get($Df)."");}function sid(){static$H;if($H===null)$H=(SID&&!($_COOKIE&&ini_bool("session.use_cookies")));return$H;}function set_password($An,$M,$U,$D){$_SESSION["pwds"][$An][$M][$U]=($_COOKIE["adminer_key"]&&is_string($D)?array(encrypt_string($D,$_COOKIE["adminer_key"])):$D);}function get_password(){$H=get_session("pwds");if(is_array($H))$H=($_COOKIE["adminer_key"]?decrypt_string($H[0],$_COOKIE["adminer_key"]):false);return$H;}function get_val($F,$l=0,$Qb=null){$Qb=connection($Qb);$G=$Qb->query($F);if(!is_object($G))return false;$I=$G->fetch_row();return($I?$I[$l]:false);}function get_vals($F,$d=0){$H=array();$G=connection()->query($F);if(is_object($G)){while($I=$G->fetch_row())$H[]=$I[$d];}return$H;}function get_key_vals($F,$g=null,$dl=true){$g=connection($g);$H=array();$G=$g->query($F);if(is_object($G)){while($I=$G->fetch_row()){if($dl)$H[$I[0]]=$I[1];else$H[]=$I[0];}}return$H;}function get_rows($F,$g=null,$k="

"){$Qb=connection($g);$H=array();$G=$Qb->query($F);if(is_object($G)){while($I=$G->fetch_assoc())$H[]=$I;}elseif(!$G&&!$g&&$k&&(defined('Adminer\PAGE_HEADER')||$k=="-- "))echo$k.adminer()->error()."\n";return$H;}function unique_array($I,array$v){foreach($v as$u){if(preg_match("~^(PRIMARY|UNIQUE)$~",$u["type"])&&!$u["partial"]){$H=array();foreach($u["columns"]as$w){if(!isset($I[$w]))continue 2;$H[$w]=$I[$w];}return$H;}}}function where_function($xe,$d,array$l){if($xe=="md5")return driver()->md5($d,$l)?:$d;return(in_array($xe,driver()->functions)||in_array($xe,driver()->grouping)?apply_sql_function($xe,$d):$d);}function where(array$Z,array$m=array()){$H=array();foreach((array)$Z["where"]as$w=>$W){$w=bracket_escape($w,true);$d=idf_escape($w);$l=idx($m,$w,array());$Td=$l["type"];$Qf=$l&&(is_blob($l)||preg_match('~binary~',$Td));$H[]=$d.($Qf&&!is_utf8($W)?" = ".driver()->quoteBinary($W):(JUSH=="sql"&&$Td=="json"?" = CAST(".q($W)." AS JSON)":(JUSH=="pgsql"&&preg_match('~^jsonb?$~',$l["full_type"])?"::jsonb = ".q($W)."::jsonb":(JUSH=="sql"&&is_numeric($W)&&preg_match('~\.~',$W)?" LIKE ".q($W):(JUSH=="mssql"&&strpos($Td,"datetime")===false?" LIKE ".q(preg_replace('~[_%[]~','[\0]',$W)):" = ".unconvert_field($l,q($W)))))));if(JUSH=="sql"&&preg_match('~char|text~',$Td)&&preg_match("~[^ -@]~",$W))$H[]="$d = ".q($W)." COLLATE ".charset(connection())."_bin";}foreach((array)$Z["null"]as$w)$H[]=idf_escape($w)." IS NULL";foreach((array)$Z["col"]as$r=>$Bb){$W=idx($Z["val"],$r);$H[]=where_function(idx($Z["fun"],$r),idf_escape($Bb),idx($m,$Bb,array())).($W!==null?" = ".q($W):" IS NULL");}return implode(" AND ",$H);}function where_columns(array$m){$H=array();foreach((array)$_GET["null"]as$w)$H[$w]=true;foreach(array_keys((array)$_GET["where"])as$w)$H[bracket_escape($w,true)]=true;foreach((array)$_GET["col"]as$Bb)$H[$Bb]=true;return array_intersect_key($H,$m);}function where_check($W,array$m=array()){parse_str($W,$qb);remove_slashes(array(&$qb));return where($qb,$m);}function where_link($r,$d,$X,$qi="="){$ni=($X!==null?$qi:"IS NULL");return"&where[$r][col]=".url_escape($d).($ni!=first(adminer()->operators())?"&where[$r][op]=".url_escape($ni):"")."&where[$r][val]=".url_escape($X);}function convert_fields(array$e,array$m,array$L=array()){$H="";foreach($e as$w=>$W){if($L&&!in_array(idf_escape($w),$L))continue;$Ha=convert_field($m[$w]);if($Ha)$H .=", $Ha AS ".idf_escape($w);}return$H;}function cookie_path(){return strtr(preg_replace('~\?.*~','',$_SERVER["REQUEST_URI"]),array(";"=>"%3B",","=>"%2C"));}function cookie($A,$X,$xg=2592000){header("Set-Cookie: $A=".rawurlencode($X).($xg?"; expires=".gmdate("D, d M Y H:i:s",time()+$xg)." GMT":"")."; path=".cookie_path().(HTTPS?"; secure":"").($A=="adminer_import"?"":"; HttpOnly")."; SameSite=lax",false);}function get_url($ln,$Zb){$http_response_header=null;$vd=array();set_error_handler(function($ud,$k)use(&$vd){$vd[]=preg_replace('~^file_get_contents\([^)]*\):\s*~','',$k);return true;});$H=file_get_contents($ln,false,$Zb);restore_error_handler();$Ue=(function_exists('http_get_last_response_headers')?http_get_last_response_headers():$http_response_header);return array($H,(preg_match('~^HTTP/[\d.]+ (\d+)~',idx($Ue,0,''),$_)?$_[1]:''),(array)$Ue,($H===false?implode("\n",$vd):''),);}function json_decode_exact($Yf){$Yf=preg_replace('~"(\\\\u0001(?:[^"\\\\]|\\\\.)*+")|"(?:[^"\\\\]|\\\\.)*+"(*SKIP)(*FAIL)~','"\\\\u0001$1',$Yf);return json_decode(preg_replace('~"(?:[^"\\\\]|\\\\.)*+"(*SKIP)(*FAIL)|-?\d[-+.\deE]*+~','"\\\\u0001$0"',$Yf));}function json_scalar($W){return(is_string($W)&&substr($W,0,1)=="\1"?substr($W,1):$W);}function json_encode_exact($W,$fe=0){return preg_replace('~"\\\\u0001(-?\d[^"\\\\]*)"|(")\\\\u0001(\\\\u0001(?:[^"\\\\]|\\\\.)*+")|"(?:[^"\\\\]|\\\\.)*+"(*SKIP)(*FAIL)~','$1$2$3',json_encode($W,$fe));}function get_settings($dc){parse_str($_COOKIE[$dc],$el);return$el;}function get_setting($w,$dc="adminer_settings",$j=null){return idx(get_settings($dc),$w,$j);}function save_settings(array$el,$dc="adminer_settings"){$X=http_build_query($el+get_settings($dc));cookie($dc,$X);$_COOKIE[$dc]=$X;}function restart_session(){if(!ini_bool("session.use_cookies")&&(!function_exists('session_status')||session_status()==PHP_SESSION_NONE))session_start();}function stop_session($ie=false){$on=ini_bool("session.use_cookies");if(!$on||$ie){session_write_close();if($on&&ini_set("session.use_cookies",'0')===false)session_start();}}function&get_session($w){return$_SESSION[$w][DRIVER][SERVER][$_GET["username"]];}function set_session($w,$W){$_SESSION[$w][DRIVER][SERVER][$_GET["username"]]=$W;}function auth_url($An,$M,$U,$i=null){$kn=remove_from_uri(implode("|",array_keys(SqlDriver::$drivers))."|username|ext|".($i!==null?"db|":"").($An=='mssql'||$An=='pgsql'?"":"ns|").session_name());preg_match('~([^?]*)\??(.*)~',$kn,$_);return"$_[1]?".(sid()?SID."&":"").($_GET["ext"]?"ext=".url_escape($_GET["ext"])."&":"").($An!="server"||$M!=""?url_escape($An)."=".url_escape($M)."&":"")."username=".url_escape($U).($i!=""?"&db=".url_escape($i):"").($_[2]?"&$_[2]":"");}function is_ajax(){return($_SERVER["HTTP_X_REQUESTED_WITH"]=="XMLHttpRequest");}function redirect($Eg,$ch=null){if($ch!==null){restart_session();$_SESSION["messages"][preg_replace('~^[^?]*~','',($Eg!==null?$Eg:$_SERVER["REQUEST_URI"]))][]=$ch;}if($Eg!==null){if($Eg=="")$Eg=".";header("Location: $Eg");exit;}}function query_redirect($F,$Eg,$ch,$Sj=true,$Cd=true,$Nd=false,$qm=""){if($Cd){$_l=microtime(true);$Nd=!connection()->query($F);$qm=format_time($_l);}$tl=($F?adminer()->messageQuery($F,$qm,$Nd):"");if($Nd){adminer()->error .=adminer()->error().$tl.script("messagesPrint();")."
";return false;}if($Sj)redirect($Eg,$ch.$tl);return true;}class Queries{static$queries=array();static$start=0;}function remember_query($F){if(!Queries::$start)Queries::$start=microtime(true);Queries::$queries[]=(driver()->delimiter!=';'?$F:(preg_match('~;$~',$F)?"DELIMITER ;;\n$F;\nDELIMITER ":$F).";");}function queries($F){remember_query($F);return connection()->query($F);}function apply_queries($F,array$S,$xd='Adminer\table'){foreach($S as$Q){if(!queries("$F ".$xd($Q)))return false;}return true;}function queries_redirect($Eg,$ch,$Sj){$Mj=implode("\n",Queries::$queries);$qm=format_time(Queries::$start);return query_redirect($Mj,$Eg,$ch,$Sj,false,!$Sj,$qm);}function format_time($_l){return lang(2,max(0,microtime(true)-$_l));}function relative_uri($kn=''){return preg_replace_callback('~^[^?]*~',function($_){return str_replace(":","%3A",$_[0]);},preg_replace('~^[^?]*/([^?]*)~','\1',($kn?:$_SERVER["REQUEST_URI"])));}function remove_from_uri($Oi=""){return substr(preg_replace("~(?<=[?&])($Oi".(SID?"":"|".session_name()).")=[^&]*&~",'',relative_uri()."&"),0,-1);}function get_files($A,$yc=false){$Vd=$_FILES[$A];if(!$Vd)return null;foreach($Vd as$w=>$W)$Vd[$w]=(array)$W;$H=array();foreach($Vd["error"]as$w=>$k){if($k)return$k;$n=$Vd["name"][$w];$ym=$Vd["tmp_name"][$w];$Xb=file_get_contents($yc&&preg_match('~\.gz$~',$n)?"compress.zlib://$ym":$ym);if($yc){$_l=substr($Xb,0,3);if(function_exists("iconv")&&preg_match("~^\xFE\xFF|^\xFF\xFE~",$_l))$Xb=iconv("utf-16","utf-8",$Xb);elseif($_l=="\xEF\xBB\xBF")$Xb=substr($Xb,3);}$H[]=array($n,$Xb);}return$H;}function get_file($w,$yc=false,$Ec=""){$Yd=get_files($w,$yc);if(!is_array($Yd))return$Yd;$H='';foreach($Yd as$Vd){$Xb=$Vd[1];$H .=$Xb;if($Ec)$H .=(preg_match("($Ec\\s*\$)",$Xb)?"":$Ec)."\n\n";}return$H;}function upload_error($k){$Ug=($k==UPLOAD_ERR_INI_SIZE?ini_get("upload_max_filesize"):0);return($k?lang(3).($Ug?" ".lang(4,$Ug):""):lang(5));}function is_utf8($W){return(preg_match('~~u',$W)&&!preg_match('~[\0-\x8\xB\xC\xE-\x1F]~',$W));}function utf8_length($W){return strlen(preg_replace('~[\x80-\xBF]~','',$W));}function format_number($W){preg_match('~^#+([^#0]+)(?:(#+)\1)?(#*0)$~u',lang(6),$_);$il=strlen($_[3]);$H=number_format($W,0,".","");$H=preg_replace('~\B(?=(\d{'.(strlen($_[2])?:$il).'})*\d{'.$il.'}$)~',$_[1],$H);return strtr($H,preg_split('~~u',lang(7),-1,PREG_SPLIT_NO_EMPTY));}function format_status(array$R,$w){$W=idx($R,$w,'?');if(!is_numeric($W))return h($W);if($W<0)return'?';$Ca=($w=="Rows"&&(JUSH=="sqlite"||$R["Engine"]==(JUSH=="pgsql"?"table":"InnoDB")));return($Ca?"~ ":"").format_number($W);}function friendly_url($W){return preg_replace('~\W~i','-',$W);}function table_status1($Q,$Od=false){$H=table_status($Q,$Od);return($H?reset($H):array("Name"=>$Q));}function column_foreign_keys($Q){$H=array();foreach(adminer()->foreignKeys($Q)as$o){foreach($o["source"]as$W)$H[$W][]=$o;}return$H;}function fields_from_edit(){$H=array();foreach((array)$_POST["field_keys"]as$w=>$W){if($W!=""){$W=bracket_escape($W);$_POST["function"][$W]=$_POST["field_funs"][$w];$_POST["fields"][$W]=$_POST["field_vals"][$w];}}foreach((array)$_POST["fields"]as$w=>$W){$A=bracket_escape($w,true);$H[$A]=array("field"=>$A,"full_type"=>"","type"=>"","privileges"=>array("insert"=>1,"update"=>1,"where"=>1,"order"=>1),"null"=>true,"auto_increment"=>($A==driver()->primary),);}return$H;}function dump_headers($if,$uh=false){$H=adminer()->dumpHeaders($if,$uh);$Ji=$_POST["output"];if($Ji!="text"||$H=="tar"){$Mb=($Ji!="text"&&$Ji!="file"&&preg_match('~^[0-9a-z]+$~',$Ji)?".$Ji":"");header("Content-Disposition: attachment; filename=".adminer()->dumpFilename($if).".$H$Mb");}session_write_close();if(!ob_get_level())ob_start(null,4096);ob_flush();flush();return$H;}function dump_csv(array$I){$Pm=$_POST["format"]=="tsv";foreach($I as$w=>$W){if(preg_match('~["\n]|^0[^.]|\.\d*0$|'.($Pm?'\t':'[,;]|^$').'~',$W))$I[$w]='"'.str_replace('"','""',$W).'"';}echo implode(($_POST["format"]=="csv"?",":($Pm?"\t":";")),$I)."\r\n";}function parse_csv($mc,$Ok){$H=array();preg_match_all('~(?>"[^"]*"|[^"\r\n]+)+~',$mc,$Kg);foreach($Kg[0]as$I){preg_match_all("~((?>\"[^\"]*\")+|[^$Ok]*)$Ok~",$I.$Ok,$Lg);$H[]=$Lg[1];}return$H;}function csv_value($W){return(preg_match('~^".*"$~s',$W)?str_replace('""','"',substr($W,1,-1)):$W);}function apply_sql_function($p,$d){return($p?($p=="unixepoch"?"DATETIME($d, '$p')":($p=="count distinct"?"COUNT(DISTINCT ":strtoupper("$p("))."$d)"):$d);}function get_temp_dir(){return ini_get("upload_tmp_dir")?:sys_get_temp_dir();}function file_open_lock($n){if(is_link($n))return;$pe=@fopen($n,"c+");if(!$pe)return;@chmod($n,0660);if(!flock($pe,LOCK_EX)){fclose($pe);return;}return$pe;}function file_write_unlock($pe,$qc){rewind($pe);fwrite($pe,$qc);ftruncate($pe,strlen($qc));file_unlock($pe);}function file_unlock($pe){flock($pe,LOCK_UN);fclose($pe);}function first(array$Ga){return reset($Ga);}function password_file($gc){$n=get_temp_dir()."/adminer.key";if(!$gc&&!file_exists($n))return'';$pe=file_open_lock($n);if(!$pe)return'';$H=stream_get_contents($pe);if(!$H){$H=rand_string();file_write_unlock($pe,$H);}else file_unlock($pe);return$H;}function rand_string(){return(function_exists('random_bytes')?bin2hex(random_bytes(16)):md5(uniqid(strval(mt_rand()),true)));}function select_value($W,$z,array$l,$om,array$ij=array()){if(is_array($W)){$H="";if(array_filter($W,'is_array')==array_values($W)){$dg=array();foreach($W as$V)$dg+=array_fill_keys(array_keys($V),null);foreach(array_keys($dg)as$ag)$H .="".h($ag);foreach($W as$V){$H .="";foreach(array_merge($dg,$V)as$vn)$H .="".select_value($vn,$z,$l,$om,$ij);}}else{foreach($W as$ag=>$V)$H .="".($W!=array_values($W)?"".h($ag):"")."".select_value($V,$z,$l,$om,$ij);}return"$H
";}if(!$z)$z=adminer()->selectLink($W,$l);if($z===null){if(is_mail($W))$z="mailto:$W";if(is_url($W))$z=$W;}$W=driver()->value($W,$l);$H=adminer()->editVal($W,$l);if($H!==null){if(!is_utf8($H))$H="\0";elseif($om!=""&&is_shortable($l))$H=shorten_utf8($H,max(0,+$om),"",$ij);else$H=highlight_matches($H,$ij);}return adminer()->selectVal($H,$z,$l,$W);}function is_blob(array$l){return preg_match('~blob|bytea|raw|file'.(JUSH=="mssql"?'|binary|image':'').'~',$l["type"])&&!in_array($l["type"],idx(driver()->structuredTypes(),lang(0),array()));}function is_identity_always(array$l){return$l["auto_increment"]&&(JUSH=="mssql"||$l["default"]=="GENERATED ALWAYS AS IDENTITY");}function is_mail($kd){$Ja='[-a-z0-9!#$%&\'*+/=?^_`{|}~]';$Wc='[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])';$hj="$Ja+(\\.$Ja+)*@($Wc?\\.)+$Wc";return is_string($kd)&&preg_match("(^$hj(,\\s*$hj)*\$)i",$kd);}function is_url($P){$Wc='[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])';return preg_match("~^((https?):)?//($Wc?\\.)+$Wc(:\\d+)?(/.*)?(\\?.*)?(#.*)?\$~i",$P);}function is_ipv6($pa){$q='[\da-f]{1,4}';$Pf='\d{1,3}(\.\d{1,3}){3}';return(bool)preg_match("~^(($q:){7}$q|($q:){6}$Pf|(($q:)*$q)?::(($q:)*($q|$Pf))?)$~iD",$pa);}function is_shortable(array$l){return!preg_match('~'.number_type().'|date|time|year~',$l["type"]);}function url_host($ef){return(strpos($ef,":")!==false?"[$ef]":$ef);}function server_parts(array$bj){return array("scheme"=>(string)$bj["scheme"],"host"=>(string)$bj["host"],"port"=>(string)$bj["port"],"socket"=>(string)$bj["socket"],"path"=>(string)$bj["path"],);}function parse_server($M){if($M=="")return server_parts(array());if($M[0]==":"&&!is_ipv6($M)){$gk=substr($M,1);if(preg_match('~^\d+$~D',$gk))return server_parts(array("port"=>$gk));return(preg_match('~^/[-\w.:/]*$~D',$gk)?server_parts(array("socket"=>$gk)):null);}$Bk="";if(preg_match('~^([-+.\w]+)://~',$M,$_)){$Bk=strtolower($_[1]);$M=substr($M,strlen($_[0]));}if(preg_match('~^\[(.+)](:(\d+))?(/[-\w./]*)?$~D',$M,$_))return(is_ipv6($_[1])?server_parts(array("scheme"=>$Bk,"host"=>$_[1],"port"=>$_[3],"path"=>$_[4])):null);if(is_ipv6($M))return server_parts(array("scheme"=>$Bk,"host"=>$M));if(preg_match('~^(/[-\w./]*)(:(\d+))?$~D',$M,$_))return server_parts(array("scheme"=>$Bk,"host"=>$_[1],"port"=>$_[3]));return(preg_match('~^([-\w.]*)(:(\d+))?(/[-\w./]*)?$~D',$M,$_)?server_parts(array("scheme"=>$Bk,"host"=>$_[1],"port"=>$_[3],"path"=>$_[4])):null);}function count_rows($Q,array$Z,$Rf,array$q){$F=" FROM ".table($Q).($Z?" WHERE ".implode(" AND ",$Z):"");return($Rf&&(JUSH=="sql"||count($q)==1)?"SELECT COUNT(DISTINCT ".implode(", ",$q).")$F":"SELECT COUNT(*)".($Rf?" FROM (SELECT 1$F GROUP BY ".implode(", ",$q).") x":$F));}function slow_query($F){$i=adminer()->database();$rm=adminer()->queryTimeout();$kl=driver()->slowQuery($F,$rm);$g=null;if(!$kl&&support("kill")){$g=connect();if($g&&($i==""||$g->select_db($i))){$eg=number(get_val(connection_id(),0,$g));echo script("const timeout = setTimeout(() => { ajax('".js_escape(ME)."script=kill', function () {}, 'kill=$eg&token=".get_token()."'); }, 1000 * $rm);");}}ob_flush();flush();$H=@get_key_vals(($kl?:$F),$g,false);if($g){echo script("clearTimeout(timeout);");ob_flush();flush();}return$H;}function get_token(){$Pj=rand(1,1e6);return($Pj^$_SESSION["token"]).":$Pj";}function verify_token(){list($zm,$Pj)=explode(":",$_POST["token"]);return($Pj^$_SESSION["token"])==$zm&&in_array($_SERVER["HTTP_SEC_FETCH_SITE"],array("","same-origin"));}function compress_alphabet(){return strtr(implode(range('"','~')),"'\\","!\n");}function decompress_string($P,$Kc=""){$_a=array_flip(str_split(compress_alphabet()));$x=strlen($P);$yn=($x?13*($x-1)/2-$_a[$P[0]]:0);$Za="";$gk=0;$hk=0;for($r=1;$r<$x;$r+=2){$gk=($gk<<13)+$_a[$P[$r]]*93+$_a[$P[$r+1]];$hk+=13;while($hk>=8&&$yn>=8){$hk-=8;$yn-=8;$Za .=chr($gk>>$hk);$gk&=(1<<$hk)-1;}}if($Za=="")return"";if($Kc!=""&&function_exists('inflate_init'))return inflate_add(inflate_init(ZLIB_ENCODING_RAW,array('dictionary'=>$Kc)),$Za,ZLIB_FINISH);return($Kc==""&&function_exists('gzinflate')?gzinflate($Za):inflate($Za,$Kc));}function inflate($Za,$Kc=""){$ug=array(3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258);$vg=array(0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0);$Oc=array(1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577);$Qc=array(0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13);$H=$Kc;$E=0;do{$ae=inflate_bits($Za,$E,1);$T=inflate_bits($Za,$E,2);if(!$T){$E=($E+7)&~7;$x=inflate_bits($Za,$E,16);$E+=16;$H .=substr($Za,$E>>3,$x);$E+=$x<<3;}else{if($T==1){$Cg=array_merge(array_fill(0,144,8),array_fill(0,112,9),array_fill(0,24,7),array_fill(0,8,8));$Rc=array_fill(0,30,5);}else{$Bg=inflate_bits($Za,$E,5)+257;$Pc=inflate_bits($Za,$E,5)+1;$wi=array(16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15);$ih=array_fill(0,19,0);$hh=inflate_bits($Za,$E,4)+4;for($r=0;$r<$hh;$r++)$ih[$wi[$r]]=inflate_bits($Za,$E,3);$jh=inflate_table($ih);$wg=array();while(count($wg)<$Bg+$Pc){$Ml=inflate_symbol($Za,$E,$jh);if($Ml==16)$wg=array_merge($wg,array_fill(0,inflate_bits($Za,$E,2)+3,end($wg)));elseif($Ml==17)$wg=array_merge($wg,array_fill(0,inflate_bits($Za,$E,3)+3,0));elseif($Ml==18)$wg=array_merge($wg,array_fill(0,inflate_bits($Za,$E,7)+11,0));else$wg[]=$Ml;}$Cg=array_slice($wg,0,$Bg);$Rc=array_slice($wg,$Bg);}$Dg=inflate_table($Cg);$Tc=inflate_table($Rc);while(($Ml=inflate_symbol($Za,$E,$Dg))!=256){if($Ml<256)$H .=chr($Ml);else{$x=$ug[$Ml-257]+inflate_bits($Za,$E,$vg[$Ml-257]);$Sc=inflate_symbol($Za,$E,$Tc);$bi=strlen($H)-$Oc[$Sc]-inflate_bits($Za,$E,$Qc[$Sc]);for($r=0;$r<$x;$r++)$H .=$H[$bi+$r];}}}}while(!$ae);return($Kc==""?$H:substr($H,strlen($Kc)));}function inflate_bits($Za,&$E,$fc){$H=0;for($r=0;$r<$fc;$r++){$H+=((ord($Za[$E>>3])>>($E&7))&1)<<$r;$E++;}return$H;}function inflate_table(array$wg){$Q=array();$Ab=0;for($ab=1;$ab<=max($wg);$ab++){foreach($wg as$Ml=>$x){if($x==$ab){$Q[$ab][$Ab]=$Ml;$Ab++;}}$Ab<<=1;}return$Q;}function inflate_symbol($Za,&$E,array$Q){$Ab=0;$ab=0;do{$Ab=($Ab<<1)+inflate_bits($Za,$E,1);$ab++;}while(!isset($Q[$ab][$Ab]));return$Q[$ab][$Ab];}function script($pl,$Bm="\n"){return"$pl$Bm";}function script_src($ln,$Ac=false){return"\n";}function nonce(){return' nonce="'.get_nonce().'"';}function on($yd,$Le,$Da=null){$Fa=array();foreach(array_slice(func_get_args(),2)as$W)$Fa[]=json_encode($W,256);return" data-on$yd='".str_replace(array('&','<',"'"),array('&','<','''),"$Le(".implode(", ",$Fa).")")."'";}function input_hidden($A,$X=""){return"\n";}function input_token(){return input_hidden("token",get_token());}function target_blank(){return' target="_blank" rel="noreferrer noopener"';}function h($P){return str_replace(array('&','<','"',"'","\0"),array('&','<','"',''','�'),$P);}function nl_br($P){return str_replace("\n","
",$P);}function checkbox($A,$X,$tb,$ig="",$c="",$zb="",$kg=""){$H="";return($ig!=""?"$H".h($ig)."":$H);}function optionlist($B,$Kk=null,$pn=false){$H="";foreach($B as$ag=>$V){$vi=array($ag=>$V);if(is_array($V)){$H .='';$vi=$V;}foreach($vi as$w=>$W)$H .=''.h($W);if(is_array($V))$H .='';}return$H;}function group_system(array$Bh,$Ak=false){$H=array();$Nl=array();foreach($Bh as$A){if($Ak?driver()->isSystem(DB,$A):driver()->isSystem($A))$Nl[]=$A;else$H[]=$A;}if($Nl)$H[lang(8,'')]=$Nl;return$H;}function html_select($A,array$B,$X="",$c="",$kg=""){static$ig=0;$jg="";if(!$kg&&substr($B[""],0,1)=="("){$ig++;$kg="label-$ig";$jg="

","$tg","","
\n";}function selectSearchPrint(array$Z,array$e,array$v,$Pl=null){print_fieldset("search",lang(65),$Z);foreach($v as$r=>$u){if($u["type"]=="FULLTEXT")echo"
(".implode(", ",array_map('Adminer\h',$u["columns"])).") ".h(driver()->fulltextOperator)," ",(JUSH=='sql'?checkbox("boolean[$r]",1,isset($_GET["boolean"][$r]),"BOOL"):''),"
\n";}$ri=adminer()->operators($Pl);foreach(array_merge((array)$_GET["where"],array(array()))as$r=>$W){if(!$W||(("$W[col]$W[val]"!=""||preg_match('~NULL$~',$W["op"]))&&in_array($W["op"],$ri)))echo"
".select_input(" name='where[$r][col]' data-default=''".on('change',($W?'selectFieldChange':'selectAddRow')),$e,$W["col"],"(".lang(66).")"),html_select("where[$r][op]",$ri,$W["op"]," data-default='".h(first($ri))."'".on('change','selectFirstChange')),"","
\n";}echo"\n";}function selectOrderPrint(array$wi,array$e,array$v){print_fieldset("sort",lang(67),$wi);$r=0;foreach((array)$_GET["order"]as$w=>$W){if($W!=""){echo"
".select_input(" name='order[$r]' data-default=''".on('change','selectFieldChange'),$e,$W),checkbox("desc[$r]",1,isset($_GET["desc"][$w]),lang(68))."
\n";$r++;}}echo"
".select_input(" name='order[$r]' data-default=''".on('change','selectAddRow'),$e),checkbox("desc[$r]",1,false,lang(68))."
\n","\n";}function selectLimitPrint($y){echo"
".lang(69)."
","","
\n";}function selectLengthPrint($om){echo"
".lang(70)."
","","
\n";}function selectActionPrint(array$v){echo"
".lang(71)."
",""," ","\n","const indexColumns = ";$e=array();foreach($v as$u){$oc=reset($u["columns"]);if($u["type"]!="FULLTEXT"&&$oc)$e[$oc]=1;}$e[""]=1;foreach($e as$w=>$W)json_row($w);echo";\n","selectFieldChange.call(qs('#form')['select']);\n","\n","
\n";}function selectCommandPrint(){return!information_schema(DB);}function selectImportPrint(){return!information_schema(DB);}function selectEmailPrint(array$ld,array$e){}function selectColumnsProcess(array$e,array$v){$L=array();$q=array();foreach((array)$_GET["columns"]as$w=>$W){if($W["fun"]=="count"||($W["col"]!=""&&(!$W["fun"]||in_array($W["fun"],driver()->functions)||in_array($W["fun"],driver()->grouping)))){$L[$w]=apply_sql_function($W["fun"],($W["col"]!=""?idf_escape($W["col"]):"*"));if(!in_array($W["fun"],driver()->grouping))$q[]=$L[$w];}}return array($L,$q);}function selectSearchProcess(array$m,array$v,$Pl=null){$H=array();foreach($v as$r=>$u){if($u["type"]=="FULLTEXT"&&idx($_GET["fulltext"],$r)!="")$H[]=driver()->fulltextSql($r,$u,$_GET["fulltext"][$r],isset($_GET["boolean"][$r]));}$ri=adminer()->operators($Pl);foreach((array)$_GET["where"]as$w=>$W){$W+=array("col"=>"","op"=>first($ri),"val"=>"");$_GET["where"][$w]=$W;$Bb=$W["col"];if(("$Bb$W[val]"!=""||preg_match('~NULL$~',$W["op"]))&&in_array($W["op"],$ri)){if($W["op"]=="SQL"&&(!$_POST||!verify_token()))SqlDb::$untrusted=true;$Ob=array();foreach(($Bb!=""?array($Bb=>$m[$Bb]):$m)as$A=>$l){$yj="";$Nb=" $W[op]";if(preg_match('~IN$~',$W["op"]))$Nb .=" ".($W["val"]!=""?process_in($W["val"]):"(NULL)");elseif($W["op"]=="SQL")$Nb=" $W[val]";elseif(preg_match('~^(I?LIKE) %%$~',$W["op"],$_))$Nb=" $_[1] ".q("%$W[val]%");elseif($W["op"]=="FIND_IN_SET"){$yj="$W[op](".q($W["val"]).", ";$Nb=")";}elseif(!preg_match('~NULL$~',$W["op"]))$Nb .=" ".q($W["val"]);if($Bb!=""||is_searchable($l,$W))$Ob[]=$yj.driver()->convertSearch(idf_escape($A),$W,$l).$Nb;}$H[]=(count($Ob)==1?$Ob[0]:($Ob?"(".implode(" OR ",$Ob).")":"1 = 0"));}}return$H;}function selectOrderProcess(array$m,array$v){$H=array();foreach((array)$_GET["order"]as$w=>$W){if($W!="")$H[]=(preg_match('~^((COUNT\(DISTINCT |[A-Z0-9_]+\()(`(?:[^`]|``)+`|"(?:[^"]|"")+")\)|COUNT\(\*\))$~',$W)?$W:idf_escape($W)).(isset($_GET["desc"][$w])?" DESC".(JUSH=='pgsql'&&idx($m[$W],"null")?" NULLS LAST":""):"");}return$H;}function selectLimitProcess(){return(isset($_GET["limit"])?intval($_GET["limit"]):50);}function selectLengthProcess(){return(isset($_GET["text_length"])?"$_GET[text_length]":"100");}function selectEmailProcess(array$Z,array$ke){return false;}function selectQueryBuild(array$L,array$Z,array$q,array$wi,$y,$C){return"";}function messageQuery($F,$qm,$Nd=false){restart_session();$bf=&get_session("queries");if(!idx($bf,$_GET["db"]))$bf[$_GET["db"]]=array();if(strlen($F)>1e6)$F=preg_replace('~[\x80-\xFF]+$~','',substr($F,0,1e6))."\n…";$bf[$_GET["db"]][]=array($F,time(),$qm);$vl="sql-".count($bf[$_GET["db"]]);$H="".lang(73)." ".copy_icon()."\n";if(!$Nd&&($Hn=driver()->warnings())){$s="warnings-".count($bf[$_GET["db"]]);$H="".lang(55).", $H\n";}return" ".@date("H:i:s").""." $H';}function error(){return error();}function editRowPrint($Q,array$m,$I,$gn,$F='',$qm=''){echo($F!=""?"

".h(str_replace("\n"," ",$F))." ($qm)\n":"");}function editFunctions(array$l){$H=($l["null"]?"NULL/":"");$Re=isset($_GET["select"])||where($_GET);foreach(array(driver()->insertFunctions,driver()->editFunctions)as$w=>$ye){if(!$w||(!isset($_GET["call"])&&$Re)){foreach($ye as$hj=>$W){if(!$hj||preg_match("~$hj~",$l["type"]))$H .="/$W";}}if($w&&$ye&&!preg_match('~set|bool~',$l["type"])&&!is_blob($l))$H .="/SQL";}if($l["auto_increment"]&&!$Re)$H=lang(60);return explode("/",$H);}function editInput($Q,array$l,$c,$X){if($l["type"]=="enum")return(isset($_GET["select"])?" ":"").enum_input("radio",$c,$l,$X,"NULL");return"";}function editHint($Q,array$l,$X){return"";}function processInput(array$l,$X,$p=""){if($p=="SQL")return$X;$A=$l["field"];$H=q($X);if(preg_match('~^(now|getdate|uuid)$~',$p))$H="$p()";elseif(preg_match('~^current_(date|timestamp)$~',$p))$H=$p;elseif(preg_match('~^([+-]|\|\|)$~',$p))$H=idf_escape($A)." $p $H";elseif(preg_match('~^[+-] interval$~',$p))$H=idf_escape($A)." $p ".(preg_match("~^(\\d+|'[0-9.: -]') [A-Z_]+\$~i",$X)&&JUSH!="pgsql"?$X:$H);elseif(preg_match('~^(addtime|subtime|concat)$~',$p))$H="$p(".idf_escape($A).", $H)";elseif(preg_match('~^(md5|sha1|password|encrypt)$~',$p))$H="$p($H)";return unconvert_field($l,$H);}function dumpOutput(){$H=array('text'=>lang(74),'file'=>lang(75));if(function_exists('gzencode'))$H['gz']='gzip';return$H;}function dumpFormat(){return(support("dump")?array('sql'=>'SQL'):array())+array('csv'=>'CSV,','csv;'=>'CSV;','tsv'=>'TSV');}function dumpPrint(){}function dumpDatabase($i){}function dumpTable($Q,$Gl,$Vf=0){if($_POST["format"]!="sql"){echo"\xef\xbb\xbf";if($Gl)dump_csv(array_keys(fields($Q)));}else{if($Vf==2){$m=array();foreach(fields($Q)as$A=>$l)$m[]=idf_escape($A)." ".full_type_sql($l);$gc="CREATE TABLE ".table($Q)." (".implode(", ",$m).")";}else$gc=create_sql($Q,$_POST["auto_increment"],$Gl);set_utf8mb4($gc);if($Gl&&$gc){if(($Gl=="DROP+CREATE"&&!function_exists('Adminer\drop_sql'))||$Vf==1)echo"DROP ".($Vf==2?"VIEW":"TABLE")." IF EXISTS ".table($Q).";\n";if($Vf==1)$gc=remove_definer($gc);echo"$gc;\n\n";}}}function dumpData($Q,$Gl,$F,array$L=array(),array$Z=array(),array$q=array(),array$wi=array()){if($Gl){$Qg=(JUSH=="sqlite"?0:1048576);$m=array();$kf=false;if($_POST["format"]=="sql"){if($Gl=="TRUNCATE+INSERT"&&!function_exists('Adminer\truncate_all_sql'))echo truncate_sql($Q).";\n";$m=fields($Q);if(JUSH=="mssql"){foreach($m as$l){if($l["auto_increment"]){echo"SET IDENTITY_INSERT ".table($Q)." ON;\n";$kf=true;break;}}}}$G=($F!=""?connection()->query($F,1):driver()->select($Q,($L?:array("*")),$Z,$q,$wi,0));if($G){$Gf="";$eb="";$dg=array();$ze=array();$Il="";$Qd=($Q!=''?'fetch_assoc':'fetch_row');$fc=0;while($I=$G->$Qd()){if(!$dg){$Y=array();foreach($I as$W){$l=$G->fetch_field();if(idx($m[$l->name],'generated')){$ze[$l->name]=true;continue;}$dg[]=$l->name;$w=idf_escape($l->name);$Y[]="$w = VALUES($w)";}$Il=($Gl=="INSERT+UPDATE"?"\nON DUPLICATE KEY UPDATE ".implode(", ",$Y):"").";\n";}if($_POST["format"]!="sql"){if($Gl=="table"){dump_csv($dg);$Gl="INSERT";}dump_csv($I);}else{if(!$Gf)$Gf="INSERT INTO ".table($Q)." (".implode(", ",array_map('Adminer\idf_escape',$dg)).") VALUES";foreach($I as$w=>$W){if($ze[$w]){unset($I[$w]);continue;}$l=$m[$w];$I[$w]=($W===null?"NULL":($W===false?0:unconvert_field($l,preg_match(number_type(),$l["type"])&&!preg_match('~\[~',$l["full_type"])&&is_numeric($W)?$W:(!is_blob($l)||is_utf8($W)?q($W):driver()->quoteBinary($W)))));}$yk=($Qg?"\n":" ")."(".implode(",\t",$I).")";if(!$eb)$eb=$Gf.$yk;elseif(JUSH=='mssql'?$fc%1000!=0:strlen($eb)+4+strlen($yk)+strlen($Il)<$Qg)$eb .=",$yk";else{echo$eb.$Il;$eb=$Gf.$yk;}}$fc++;}if($eb)echo$eb.$Il;}elseif($_POST["format"]=="sql")echo"-- ".str_replace("\n"," ",connection()->error)."\n";if($kf)echo"SET IDENTITY_INSERT ".table($Q)." OFF;\n";}}function dumpFilename($if){return friendly_url($if!=""?$if:(SERVER?:"localhost"));}function dumpHeaders($if,$uh=false){$Ji=$_POST["output"];$Id=(preg_match('~sql~',$_POST["format"])?"sql":($uh?"tar":"csv"));header("Content-Type: ".($Ji=="gz"?"application/x-gzip":($Id=="tar"?"application/x-tar":($Id=="sql"||$Ji!="file"?"text/plain":"text/csv")."; charset=utf-8")));if($Ji=="gz"){ob_start(function($P){return gzencode($P);},1e6);}return$Id;}function dumpFooter(){if($_POST["format"]=="sql")echo"-- ".gmdate("Y-m-d H:i:s e")."\n";}function importServerPath(){return"adminer.sql";}function importPrint(){}function importProcess(){return false;}function homepage(){echo'

".adminer()->name()." ".VERSION;$Mh=$_COOKIE["adminer_version"];echo" ".(version_compare(VERSION,$Mh)<0?h($Mh):"").version_iframe()."","

\n";switch_lang();if($nh=="auth"){$Ji="";foreach((array)$_SESSION["pwds"]as$An=>$bl){foreach($bl as$M=>$un){$A=h(get_setting("vendor-$An-$M")?:get_driver($An));foreach($un as$U=>$D){if($A&&$D!==null){$xc=$_SESSION["db"][$An][$M][$U];foreach(($xc?array_keys($xc):array(""))as$i)$Ji .="
  • ($A) ".h("$U@").($M!=""?adminer()->serverName($M):"").h($i!=""?" - $i":"")."\n";}}}}if($Ji)echo"
      \n$Ji
    \n";}else{$S=array();if($_GET["ns"]!==""&&!$nh&&DB!=""){connection()->select_db(DB);$S=table_status('',true);}adminer()->syntaxHighlighting($S);adminer()->databasesPrint($nh);$la=array();if(DB==""||!$nh){if(support("sql")){$la['sql']="".lang(73)."";$la['import']="".lang(84)."";}$la['dump']="".lang(85)."";}$qf=$_GET["ns"]!==""&&!$nh&&DB!="";if($qf&&function_exists('Adminer\alter_table'))$la['create']='".lang(86)."";$la=adminer()->menuActions($la,$nh);echo($la?"

    ".lang(13)."

    \n";}}}function syntaxHighlighting(array$S){echo script_src(preg_replace("~\\?.*~","",ME)."?file=jush.js&version=6.1.1+43f4678f",true);$qh=preg_replace('~<(?=/script)~i','<\\',Driver::jushModule());echo($qh?script("addEventListener('DOMContentLoaded', () => {\n$qh\n});"):"");if(support("sql")){echo"\n";if($S){$Ag=array();foreach($S as$Q=>$T)$Ag[]=js_escape_re($Q);echo"var jushLinks = { ".JUSH.":";json_row(js_escape(ME).(support("table")?"table":"select").'=$&','/\b(? { autocompleter = $Pa; });\n":"");}}echo"\n";}echo script("syntaxHighlighting('".doc_version()."', '".connection()->flavor."');");}function databasesPrint($nh){if(support("single_db"))return;$h=adminer()->databases();if(DB&&$h&&!in_array(DB,$h))array_unshift($h,DB);echo"
    \n

    \n";hidden_fields_get();$uc=on('mousedown','dbMouseDown').on('change','dbChange');echo"","\n";if(support("scheme")){if($nh!="db"&&DB!=""&&connection()->select_db(DB)){echo"
    ";if($_GET["ns"]!="")set_schema($_GET["ns"]);}}foreach(array("import","sql","schema","dump","privileges")as$W){if(isset($_GET[$W])){echo input_hidden($W);break;}}echo"

    \n";}function menuActions(array$la,$nh){return$la;}function tablesPrint(array$S){echo"
      ";foreach($S as$Q=>$O){$Q="$Q";$A=adminer()->tableName($O);if($A!=""&&!$O["dependent"])echo'
    • ".lang(89)." ",(support("table")||support("indexes")?'$A":"$A")."\n";}echo"
    \n";}function showVariables(){return show_variables();}function showStatus(){return show_status();}function processList(){return process_list();}function killProcess($s){return kill_process($s);}}class Plugins{private static$append=array('dumpFormat'=>true,'dumpOutput'=>true,'editRowPrint'=>true,'editFunctions'=>true,'config'=>true);var$plugins;var$drivers=array();var$driverFiles=array();var$error='';private$hooks=array();function __construct($pj){$Yc=SqlDriver::$drivers;$Xe=" href='https://www.adminer.org/plugins/#use'".target_blank();if($pj===null){$pj=array();$Xa="adminer-plugins";if(is_dir($Xa)){foreach(glob("$Xa/*.php")as$n){$Wd=SqlDriver::$drivers;$this->includeOnce($n);foreach(array_diff_key(SqlDriver::$drivers,$Wd)as$s=>$A)$this->driverFiles[$s]=$n;}}if(file_exists("$Xa.php")){$sf=$this->includeOnce("$Xa.php");if(is_array($sf)){foreach($sf as$w=>$mj)$pj[is_object($mj)?get_class($mj):$w]=$mj;}else$this->error .=lang(90,"$Xa.php",$Xe)."
    ";}foreach(get_declared_classes()as$zb){if(!$pj[$zb]&&(preg_match('~^Adminer\w~i',$zb)||is_subclass_of($zb,'Adminer\Plugin'))){$Xj=new \ReflectionClass($zb);$Wb=$Xj->getConstructor();if($Wb&&$Wb->getNumberOfRequiredParameters())$this->error .=lang(91,$Xe,"$zb","$Xa.php")."
    ";else$pj[$zb]=new$zb;}}}$Lf=array_filter($pj,function($mj){return!is_object($mj);});if($Lf){$this->error .=lang(92,$Xe)."
    ";$pj=array_diff_key($pj,$Lf);}$this->drivers=array_diff_key(SqlDriver::$drivers,$Yc);$this->plugins=$pj;$qa=new Adminer;$pj[]=$qa;$Xj=new \ReflectionObject($qa);foreach($Xj->getMethods()as$kh){foreach($pj as$mj){$A=$kh->getName();if(method_exists($mj,$A))$this->hooks[$A][]=$mj;}}}function includeOnce($n){return include_once"./$n";}static function checksum($n){$Vd=str_replace("\r","",file_get_contents($n));$Vd=preg_replace('~\n\tprotected \$translations = array\(.*?\n\t\);~s','',$Vd);return dechex(crc32($Vd));}function checksums(){$Xd=array_values($this->driverFiles);foreach($this->plugins as$mj){$Xj=new \ReflectionObject($mj);$Xd[]=$Xj->getFileName();}$H=array();foreach($Xd as$n)$H[basename($n,'.php')]=self::checksum($n);return$H;}static function officialChecksums(){return array('adminer.js'=>'a0599090','backward-keys'=>'e65981f5','before-unload'=>'2a613523','config'=>'722eb4af','dark-switcher'=>'3d490dea','database-hide'=>'e304a899','designs'=>'ed7e44e3','dump-alter'=>'896b579e','dump-bz2'=>'f0d0e336','dump-date'=>'adc7f1c7','dump-json'=>'767dd321','dump-xml'=>'4fc3cd60','dump-zip'=>'93817d96','edit-foreign'=>'72ad1562','edit-textarea'=>'a24c3cc','editor-setup'=>'a7dc3a37','editor-views'=>'5c12b185','enum-option'=>'1e24970e','file-upload'=>'10add0e8','foreign-system'=>'ebb4c654','frames'=>'b0e1d11a','highlight-codemirror'=>'c5716555','highlight-monaco'=>'edd1b0af','highlight-prism'=>'267948e5','import-csv'=>'d429c77','login-ip'=>'4d174fea','login-otp'=>'5b5a68af','login-passkey'=>'f69f2f06','login-password-less'=>'e150daac','login-reverse-proxy'=>'24558ea2','login-servers'=>'19c42e45','login-ssl'=>'6ed147bc','login-table'=>'811f8cef','menu-links'=>'c78461b3','name-patterns'=>'84c10d09','remote-color'=>'ddeecc48','row-numbers'=>'eec8698c','select-email'=>'f84fbd2c','select-foreign'=>'fe3e58c8','select-image'=>'f55c0231','slugify'=>'dec64713','sql-gemini'=>'c60ab309','sql-log'=>'8e435000','table-indexes-structure'=>'a90cc0c9','table-structure'=>'a8458e02','tables-filter'=>'ec2bcd6e','timeout'=>'97321caf','version-github'=>'627cadf9','version-noverify'=>'966937e9','clickhouse'=>'92ca960d','elastic'=>'1582a04d','firebird'=>'1cccfc19','igdb'=>'4063cc0b','imap'=>'3da1022b','mongo'=>'63486492','redis'=>'79824392','simpledb'=>'b8e2cc7d',);}function __call($A,array$Qi){$Fa=array();foreach($Qi as$w=>$W)$Fa[]=&$Qi[$w];$H=null;foreach($this->hooks[$A]as$mj){$X=call_user_func_array(array($mj,$A),$Fa);if($X!==null){if(!self::$append[$A])return$X;$H=$X+(array)$H;}}return$H;}}abstract class Plugin{protected$translations=array();function description(){return$this->lang('');}function screenshot(){return"";}protected function lang($t,$Th=null){$Fa=func_get_args();$Fa[0]=idx($this->translations[LANG],$t)?:$t;return call_user_func_array('Adminer\lang_format',$Fa);}}class Password{private$password_hash;private$password_matches=null;function __construct($dj){$this->password_hash=$dj;}function description(){return lang(93);}function credentials(){$D=get_password();return array(SERVER,$_GET["username"],($this->passwordMatches($D)&&!password_required()?"":$D));}function login($Fg,$D){if($this->passwordMatches($D))return true;}protected function passwordMatches($D){if($this->password_matches===null)$this->password_matches=(function_exists('password_verify')&&password_verify(strval($D),$this->password_hash));return$this->password_matches;}}Adminer::$instance=(function_exists('adminer_object')?adminer_object():(is_dir("adminer-plugins")||file_exists("adminer-plugins.php")?new Plugins(null):new Adminer));SqlDriver::$drivers=array("server"=>"MySQL / MariaDB")+SqlDriver::$drivers;if(!defined('Adminer\DRIVER')){define('Adminer\DRIVER',"server");if(extension_loaded("mysqli")&&$_GET["ext"]!="pdo"){class Db extends \mysqli{static$instance;var$extension="MySQLi",$flavor='';function __construct(){parent::init();}function attach(array$M,$U,$D){mysqli_report(MYSQLI_REPORT_OFF);$qj=$M["port"];$nd=("$M[host]$qj$M[socket]"=="");$zl=adminer()->connectSsl();$qn=($zl&&($zl['key']||$zl['cert']||$zl['ca']||isset($zl['verify'])));if($qn)$this->ssl_set($zl['key'],$zl['cert'],$zl['ca'],'','');$H=@$this->real_connect((!$nd?$M["host"]:ini_get("mysqli.default_host")),(!$nd||$U!=""?$U:ini_get("mysqli.default_user")),(!$nd||$U.$D!=""?$D:ini_get("mysqli.default_pw")),null,($qj!=""?intval($qj):ini_get("mysqli.default_port")),($qj!=""?null:$M["socket"]),($qn?($zl['verify']!==false?MYSQLI_CLIENT_SSL:64):0));$this->options(MYSQLI_OPT_LOCAL_INFILE,0);return($H?'':$this->error);}function set_charset($ob){if(parent::set_charset($ob))return true;parent::set_charset('utf8');return$this->query("SET NAMES $ob");}function next_result(){return self::more_results()&&parent::next_result();}function quote($P){return"'".$this->escape_string($P)."'";}function inTransaction(){return false;}function begin(){return$this->begin_transaction();}}}elseif(extension_loaded("mysql")&&!((ini_bool("sql.safe_mode")||ini_bool("mysql.allow_local_infile"))&&extension_loaded("pdo_mysql"))){class Db extends SqlDb{private$link;function attach(array$M,$U,$D){if(ini_bool("mysql.allow_local_infile"))return lang(94,"'mysql.allow_local_infile'","MySQLi","PDO_MySQL");$qj="$M[port]$M[socket]";$A=$M["host"].($qj!=""?":$qj":"");$this->link=@mysql_connect(($A!=""?$A:ini_get("mysql.default_host")),($A.$U!=""?$U:ini_get("mysql.default_user")),($A.$U.$D!=""?$D:ini_get("mysql.default_password")),true,131072);if(!$this->link)return mysql_error();$this->server_info=mysql_get_server_info($this->link);return'';}function set_charset($ob){return mysql_set_charset($ob,$this->link)||mysql_set_charset('utf8',$this->link);}function quote($P){return"'".mysql_real_escape_string($P,$this->link)."'";}function select_db($tc){return mysql_select_db($tc,$this->link);}function query($F,$Vm=false){$G=@($Vm?mysql_unbuffered_query($F,$this->link):mysql_query($F,$this->link));$this->error="";if(!$G){$this->errno=mysql_errno($this->link);$this->error=mysql_error($this->link);return false;}if($G===true){$this->affected_rows=mysql_affected_rows($this->link);$this->info=mysql_info($this->link);return true;}return new Result($G);}}class Result{var$num_rows;private$result;private$offset=0;function __construct($G){$this->result=$G;$this->num_rows=mysql_num_rows($G);}function fetch_assoc(){return mysql_fetch_assoc($this->result);}function fetch_row(){return mysql_fetch_row($this->result);}function fetch_field(){$H=mysql_fetch_field($this->result,$this->offset++);$H->orgtable=$H->table;$H->native_type=idx(array("string"=>"varchar","real"=>"double"),$H->type,$H->type);return$H;}}}elseif(extension_loaded("pdo_mysql")){class Db extends PdoDb{var$extension="PDO_MySQL";function attach(array$M,$U,$D){$B=array(\PDO::MYSQL_ATTR_LOCAL_INFILE=>false);if(isset($_GET["select"]))$B[\PDO::MYSQL_ATTR_MULTI_STATEMENTS]=false;$zl=adminer()->connectSsl();if($zl){if($zl['key'])$B[\PDO::MYSQL_ATTR_SSL_KEY]=$zl['key'];if($zl['cert'])$B[\PDO::MYSQL_ATTR_SSL_CERT]=$zl['cert'];if($zl['ca'])$B[\PDO::MYSQL_ATTR_SSL_CA]=$zl['ca'];if(isset($zl['verify']))$B[\PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT]=$zl['verify'];}$ef=$M["host"];$qj=$M["port"];$ll=$M["socket"];return$this->dsn("mysql:charset=utf8".($ef!=""?";host=$ef":'').($qj!=""?";port=$qj":($ll!=""?";unix_socket=$ll":"")),$U,$D,$B);}function set_charset($ob){return$this->query("SET NAMES $ob");}function select_db($tc){return$this->query("USE ".idf_escape($tc));}function query($F,$Vm=false){$this->pdo->setAttribute(\PDO::MYSQL_ATTR_USE_BUFFERED_QUERY,!$Vm);return parent::query($F,$Vm);}}}class Driver extends SqlDriver{static$extensions=array("MySQLi","MySQL","PDO_MySQL");static$jush="sql";static$serverSocket=true;var$unsigned=array("unsigned","zerofill","unsigned zerofill");var$functions=array("char_length","date","from_unixtime","lower","round","floor","ceil","sec_to_time","time_to_sec","upper");var$grouping=array("avg","count","count distinct","group_concat","max","min","sum");var$partitionBy=array("HASH","LINEAR HASH","KEY","LINEAR KEY","RANGE","LIST");function operators($Pl){return array("=","<",">","<=",">=","!=","LIKE","LIKE %%","REGEXP","IN","FIND_IN_SET","IS NULL","NOT LIKE","NOT REGEXP","NOT IN","IS NOT NULL","SQL");}static function connect($M,$U,$D){$f=parent::connect($M,$U,$D);if(is_string($f)){if(function_exists('iconv')&&!is_utf8($f)&&strlen($yk=iconv("windows-1252","utf-8//IGNORE",$f))>strlen($f))$f=$yk;return$f;}$f->set_charset(charset($f));$f->query("SET sql_quote_show_create = 1, autocommit = 1");$f->flavor=(preg_match('~MariaDB~',$f->server_info)?'maria':'mysql');add_driver(DRIVER,($f->flavor=='maria'?"MariaDB":"MySQL"));return$f;}function __construct(Db$f){parent::__construct($f);$this->types=array(lang(29)=>array("tinyint"=>3,"smallint"=>5,"mediumint"=>8,"int"=>10,"bigint"=>20,"decimal"=>66,"float"=>12,"double"=>21),lang(30)=>array("date"=>10,"datetime"=>19,"timestamp"=>19,"time"=>10,"year"=>4),lang(31)=>array("char"=>255,"varchar"=>65535,"tinytext"=>255,"text"=>65535,"mediumtext"=>16777215,"longtext"=>4294967295),lang(95)=>array("enum"=>65535,"set"=>64),lang(32)=>array("bit"=>20,"binary"=>255,"varbinary"=>65535,"tinyblob"=>255,"blob"=>65535,"mediumblob"=>16777215,"longblob"=>4294967295),lang(34)=>array("geometry"=>0,"point"=>0,"linestring"=>0,"polygon"=>0,"multipoint"=>0,"multilinestring"=>0,"multipolygon"=>0,"geometrycollection"=>0),);$this->insertFunctions=array("char"=>"md5/sha1/password/encrypt/uuid","binary"=>"md5/sha1","date|time"=>"now",);$this->editFunctions=array(number_type()=>"+/-","date"=>"+ interval/- interval","time"=>"addtime/subtime","char|text"=>"concat",);if(min_version('5.7.8',10.2,$f))$this->types[lang(31)]["json"]=4294967295;if(min_version('',10.7,$f)){$this->types[lang(31)]["uuid"]=128;$this->insertFunctions['uuid']='uuid';}if(min_version('',10.5,$f)){$this->types[lang(33)]["inet6"]=39;if(min_version('','10.10',$f))$this->types[lang(33)]["inet4"]=15;}if(min_version(9,11.7,$f))$this->types[lang(29)]["vector"]=16383;if(min_version(5.7,10.2,$f))$this->generated=array("STORED","VIRTUAL");}function unconvertFunction(array$l){return(preg_match("~binary~",$l["type"])?"UNHEX":($l["type"]=="bit"?doc_link(array('sql'=>'bit-value-literals.html'),"b''"):($l["type"]=="vector"?"".($this->conn->flavor=='maria'?"VEC_FromText":"STRING_TO_VECTOR")."":(preg_match("~geom|point|linestring|polygon~",$l["type"])?"GeomFromText":""))));}function insert($Q,array$N){return($N?parent::insert($Q,$N):queries("INSERT INTO ".table($Q)." ()\nVALUES ()"));}function insertUpdate($Q,array$J,array$Cj){$e=array_keys(reset($J));$yj="INSERT INTO ".table($Q)." (".implode(", ",$e).") VALUES\n";$Y=array();foreach($e as$w)$Y[$w]="$w = VALUES($w)";$Il="\nON DUPLICATE KEY UPDATE ".implode(", ",$Y);$Y=array();$x=0;foreach($J as$N){$X="(".implode(", ",$N).")";if($Y&&(strlen($yj)+$x+strlen($X)+strlen($Il)>1e6)){if(!queries($yj.implode(",\n",$Y).$Il))return false;$Y=array();$x=0;}$Y[]=$X;$x+=strlen($X)+2;}return queries($yj.implode(",\n",$Y).$Il);}function slowQuery($F,$rm){if(min_version('5.7.8','10.1.2')){if($this->conn->flavor=='maria')return"SET STATEMENT max_statement_time=$rm FOR $F";elseif(preg_match('~^(SELECT\b)(.+)~is',$F,$_))return"$_[1] /*+ MAX_EXECUTION_TIME(".($rm*1000).") */ $_[2]";}}function convertColumn($t,array$l){if(preg_match("~binary~",$l["type"]))return"HEX($t)";if($l["type"]=="bit")return"BIN($t + 0)";if($l["type"]=="vector")return($this->conn->flavor=='maria'?"VEC_ToText":"VECTOR_TO_STRING")."($t)";if(preg_match("~geom|point|linestring|polygon~",$l["type"]))return(min_version(8)?"ST_":"")."AsWKT($t)";return"";}function convertSearch($t,array$W,array$l){return($this->convertColumn($t,$l)?:(preg_match('~'.text_type().'~',$l["type"])&&!preg_match("~^utf8~",$l["collation"])&&preg_match('~[\x80-\xFF]~',$W['val'])?"CONVERT($t USING ".charset($this->conn).")":$t));}function typeName(\stdClass$l){$A=parent::typeName($l);if($A!=""){$Um=array("TINY"=>"tinyint","SHORT"=>"smallint","LONG"=>"int","INT24"=>"mediumint","LONGLONG"=>"bigint","NEWDECIMAL"=>"decimal","VAR_STRING"=>"varchar","STRING"=>"char",);return idx($Um,$A,strtolower($A));}$Um=array("decimal","tinyint","smallint","int","float","double",7=>"timestamp","bigint","mediumint","date","time","datetime","year",15=>"varchar","bit",242=>"vector",245=>"json","decimal","enum","set","tinytext","mediumtext","longtext","text","varchar","char","geometry",);$H=idx($Um,$l->type,"");return($l->charsetnr==63?str_replace(array("text","varchar","char"),array("blob","varbinary","binary"),$H):$H);}function quoteBinary($yk){return"X".q(bin2hex($yk));}function md5($d,array$l){if(is_blob($l)||preg_match('~'.text_type().'~',$l["type"]))return"MD5(".(is_blob($l)||preg_match("~^utf8~",$l["collation"])?$d:"CONVERT($d USING ".charset($this->conn).")").")";}function warnings(){$G=$this->conn->query("SHOW WARNINGS");if($G&&$G->num_rows){ob_start();print_select_result($G);return ob_get_clean();}}function tableHelp($A,$Vf=false){$Hg=($this->conn->flavor=='maria');if(information_schema(DB))return strtolower(str_replace("_","-",DB)."-".($Hg?"$A-table/":str_replace("_","-",$A)."-table.html"));if(DB=="sys")return($Hg?"sys-schema/":strtolower("sys-".str_replace("_","-",preg_replace('~^x\$~','',$A)).".html"));if(DB=="mysql")return($Hg?"mysql$A-table/":"system-schema.html");}function partitionsInfo($Q){$se="FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA = ".q(DB)." AND TABLE_NAME = ".q($Q);$G=$this->conn->query("SELECT PARTITION_METHOD, PARTITION_EXPRESSION, PARTITION_ORDINAL_POSITION $se ORDER BY PARTITION_ORDINAL_POSITION DESC LIMIT 1");$I=($G?$G->fetch_row():null);if(!$I)return array();$H=array();list($H["partition_by"],$H["partition"],$H["partitions"])=$I;$Zi=get_key_vals("SELECT PARTITION_NAME, PARTITION_DESCRIPTION $se AND PARTITION_NAME != '' ORDER BY PARTITION_ORDINAL_POSITION");$H["partition_names"]=array_keys($Zi);$H["partition_values"]=array_values($Zi);return$H;}function checkConstraints($Q){$H=parent::checkConstraints($Q);return($this->conn->flavor=='maria'?$H:array_map('stripslashes',$H));}function hasCStyleEscapes(){static$hb;if($hb===null){$wl=get_val("SHOW VARIABLES LIKE 'sql_mode'",1,$this->conn);$hb=(strpos($wl,'NO_BACKSLASH_ESCAPES')===false);}return$hb;}function hasEstimatedRows(){return true;}function isSystem($i,$K=""){return information_schema($i,$K)||in_array($i,array("mysql","sys"));}function lineComment(){return"#|-- ";}function engines(){$H=array();foreach(get_rows("SHOW ENGINES")as$I){if(preg_match("~YES|DEFAULT~",$I["Support"]))$H[]=$I["Engine"];}return$H;}function indexAlgorithms(array$Pl){return(preg_match('~^(MEMORY|NDB)$~',$Pl["Engine"])?array("HASH","BTREE"):array());}}function idf_escape($t){return"`".str_replace("`","``",$t)."`";}function table($t){return idf_escape($t);}function get_databases($he){$H=get_session("dbs");if($H===null){$F="SELECT SCHEMA_NAME FROM information_schema.SCHEMATA ORDER BY SCHEMA_NAME";$_l=microtime(true);$H=($he?slow_query($F):get_vals($F));if(microtime(true)-$_l>0.1){restart_session();set_session("dbs",$H);stop_session();}}return$H;}function limit($F,$Z,$y,$bi=0,$Ok=" "){return" $F$Z".($y?$Ok."LIMIT $y".($bi?" OFFSET $bi":""):"");}function limit1($Q,$F,$Z,$Ok="\n"){return limit($F,$Z,1,0,$Ok);}function db_collation($i,array$Eb){$H=null;$gc=get_val("SHOW CREATE DATABASE ".idf_escape($i),1);if(preg_match('~ COLLATE ([^ ]+)~',$gc,$_))$H=$_[1];elseif(preg_match('~ CHARACTER SET ([^ ]+)~',$gc,$_))$H=$Eb[$_[1]][-1];return$H;}function logged_user(){return get_val("SELECT CURRENT_USER()");}function tables_list(){return get_key_vals("SELECT TABLE_NAME, TABLE_TYPE FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE() ORDER BY TABLE_NAME");}function count_tables(array$h){$H=array();foreach($h as$i)$H[$i]=count(get_vals("SHOW TABLES IN ".idf_escape($i)));return$H;}function table_status($A="",$Od=false){$H=array();$F="SELECT ENGINE AS Engine, TABLE_NAME AS Name, TABLE_COMMENT AS Comment FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE() ".($A!=""?"AND TABLE_NAME = ".q($A):"ORDER BY Name");$K=array();foreach(($Od?array():get_rows($F))as$I)$K[$I["Name"]]=$I;$Bj=null;foreach(get_rows($Od?$F:"SHOW TABLE STATUS".($A!=""?" LIKE ".q(addcslashes($A,"%_\\")):""))as$I){$Fi=idx($K,$I["Name"]);if($Fi){if($I["Comment"]!==$Fi["Comment"]&&$I["Comment"]!==$Bj)$I["Error"]=$I["Comment"];$Bj=$I["Comment"];$I["Comment"]=$Fi["Comment"];$I["Engine"]=$Fi["Engine"];}if($I["Engine"]=="InnoDB")$I["Comment"]=preg_replace('~(?:(.+); )?InnoDB free: .*~','\1',$I["Comment"]);if(!isset($I["Engine"]))$I["Comment"]="";if($A!="")$I["Name"]=$A;$H[$I["Name"]]=$I;}return$H;}function is_view(array$R){return$R["Engine"]===null;}function fk_support(array$R){return preg_match('~InnoDB|IBMDB2I'.(min_version(5.6)?'|NDB':'').'~i',$R["Engine"]);}function parse_type($ve){preg_match('~^([^( ]+)(?:\((.+)\))?( unsigned)?( zerofill)?$~',$ve,$_);return array($_[1],$_[2],ltrim($_[3].$_[4]));}function fields($Q){$Hg=(connection()->flavor=='maria');$H=array();foreach(get_rows("SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ".q($Q)." ORDER BY ORDINAL_POSITION")as$I){$l=$I["COLUMN_NAME"];$T=$I["COLUMN_TYPE"];$_e=$I["GENERATION_EXPRESSION"];$Ld=$I["EXTRA"];preg_match('~^(VIRTUAL|PERSISTENT|STORED)~',$Ld,$ze);list($Tm,$x,$en)=parse_type($T);$j=$I["COLUMN_DEFAULT"];if($j!=""){$Uf=preg_match('~text|json~',$Tm);if(!$Hg&&$Uf)$j=preg_replace("~^(_\w+)?('.*')$~",'\2',stripslashes($j));if($Hg||$Uf){$j=($j=="NULL"?null:preg_replace_callback("~^'(.*)'$~",function($_){return stripslashes(str_replace("''","'",$_[1]));},$j));}if(!$Hg&&preg_match('~binary~',$Tm)&&preg_match('~^0x(\w*)$~',$j,$_))$j=pack("H*",$_[1]);}$H[$l]=array("field"=>$l,"full_type"=>$T,"type"=>$Tm,"length"=>$x,"unsigned"=>$en,"default"=>($ze?($Hg?$_e:stripslashes($_e)):$j),"null"=>($I["IS_NULLABLE"]=="YES"),"auto_increment"=>($Ld=="auto_increment"),"on_update"=>(preg_match('~\bon update (\w+)~i',$Ld,$_)?$_[1]:""),"collation"=>$I["COLLATION_NAME"],"privileges"=>array_flip(explode(",","$I[PRIVILEGES],where,order")),"comment"=>$I["COLUMN_COMMENT"],"primary"=>($I["COLUMN_KEY"]=="PRI"),"generated"=>($ze[1]=="PERSISTENT"?"STORED":$ze[1]),);}return$H;}function indexes($Q,$g=null){$H=array();foreach(get_rows("SHOW INDEX FROM ".table($Q),$g)as$I){$A=$I["Key_name"];$H[$A]["type"]=($A=="PRIMARY"?"PRIMARY":($I["Index_type"]=="FULLTEXT"?"FULLTEXT":($I["Non_unique"]?(preg_match('~^(SPATIAL|VECTOR)$~',$I["Index_type"])?$I["Index_type"]:"INDEX"):"UNIQUE")));$H[$A]["columns"][]=$I["Column_name"];$H[$A]["lengths"][]=($I["Index_type"]=="SPATIAL"?null:$I["Sub_part"]);$H[$A]["descs"][]=null;$H[$A]["algorithm"]=$I["Index_type"];}return$H;}function foreign_keys($Q){static$hj='(?:`(?:[^`]|``)+`|"(?:[^"]|"")+")';$H=array();$hc=get_val("SHOW CREATE TABLE ".table($Q),1);if($hc){preg_match_all("~CONSTRAINT ($hj) FOREIGN KEY ?\\(((?:$hj,? ?)+)\\) REFERENCES ($hj)(?:\\.($hj))? \\(((?:$hj,? ?)+)\\)(?: ON DELETE (".driver()->onActions."))?(?: ON UPDATE (".driver()->onActions."))?~",$hc,$Kg,PREG_SET_ORDER);foreach($Kg as$_){preg_match_all("~$hj~",$_[2],$pl);preg_match_all("~$hj~",$_[5],$hm);$H[idf_unescape($_[1])]=array("db"=>idf_unescape($_[4]!=""?$_[3]:$_[4]),"table"=>idf_unescape($_[4]!=""?$_[4]:$_[3]),"source"=>array_map('Adminer\idf_unescape',$pl[0]),"target"=>array_map('Adminer\idf_unescape',$hm[0]),"on_delete"=>($_[6]?:"RESTRICT"),"on_update"=>($_[7]?:"RESTRICT"),);}}return$H;}function view($A){return array("select"=>preg_replace('~^(?:[^`]|`[^`]*`)*\s+AS\s+~isU','',get_val("SHOW CREATE VIEW ".table($A),1)));}function collations(){$H=array();foreach(get_rows("SHOW COLLATION")as$I){if($I["Default"])$H[$I["Charset"]][-1]=$I["Collation"];else$H[$I["Charset"]][]=$I["Collation"];}ksort($H);foreach($H as$w=>$W)sort($H[$w]);return$H;}function information_schema($i,$K=""){return($i=="information_schema")||(min_version(5.5)&&$i=="performance_schema");}function error(){return h(preg_replace('~^You have an error.*syntax to use~U',"Syntax error",connection()->error));}function create_database($i,$Db){return queries("CREATE DATABASE ".idf_escape($i).($Db?" COLLATE ".q($Db):""));}function drop_databases(array$h){$H=apply_queries("DROP DATABASE",$h,'Adminer\idf_escape');restart_session();set_session("dbs",null);return$H;}function rename_database($A,$Db){$H=false;if(create_database($A,$Db)){$S=array();$Dn=array();foreach(tables_list()as$Q=>$T){if($T=='VIEW')$Dn[]=$Q;else$S[]=$Q;}$H=(!$S&&!$Dn)||move_tables($S,$Dn,$A);drop_databases($H?array(DB):array());}return$H;}function auto_increment(){$Oa=" PRIMARY KEY";if($_GET["create"]!=""&&$_POST["auto_increment_col"]){foreach(indexes($_GET["create"])as$u){if(in_array($_POST["fields"][$_POST["auto_increment_col"]]["orig"],$u["columns"],true)){$Oa="";break;}if($u["type"]=="PRIMARY")$Oa=" UNIQUE";}}return" AUTO_INCREMENT$Oa";}function alter_table($Q,$A,array$m,array$je,$Jb,$pd,$Db,$Na,$Yi){$b=array();foreach($m as$l){if($l[1]){$j=$l[1][3];if(preg_match('~ GENERATED~',$j)){$l[1][3]=(connection()->flavor=='maria'?"":$l[1][2]);$l[1][2]=$j;}$b[]=($Q!=""?($l[0]!=""?"CHANGE ".idf_escape($l[0]):"ADD"):" ")." ".implode($l[1]).($Q!=""?$l[2]:"");}else$b[]="DROP ".idf_escape($l[0]);}$b=array_merge($b,$je);$O=($Jb!==null?" COMMENT=".q($Jb):"").($pd?" ENGINE=".q($pd):"").($Db?" COLLATE ".q($Db):"").($Na!=""?" AUTO_INCREMENT=$Na":"");if($Yi){$Zi=array();if($Yi["partition_by"]=='RANGE'||$Yi["partition_by"]=='LIST'){foreach($Yi["partition_names"]as$w=>$W){$X=$Yi["partition_values"][$w];$Zi[]="\n PARTITION ".idf_escape($W)." VALUES ".($Yi["partition_by"]=='RANGE'?"LESS THAN":"IN").($X!=""?" ($X)":" MAXVALUE");}}$O .="\nPARTITION BY $Yi[partition_by]($Yi[partition])";if($Zi)$O .=" (".implode(",",$Zi)."\n)";elseif($Yi["partitions"])$O .=" PARTITIONS ".(+$Yi["partitions"]);}elseif($Yi===null)$O .="\nREMOVE PARTITIONING";if($Q=="")return queries("CREATE TABLE ".table($A)." (\n".implode(",\n",$b)."\n)$O");if($Q!=$A)$b[]="RENAME TO ".table($A);if($O)$b[]=ltrim($O);return($b?queries("ALTER TABLE ".table($Q)."\n".implode(",\n",$b)):true);}function alter_indexes($Q,$b){$mb=array();foreach($b as$W)$mb[]=($W[2]=="DROP"?"\nDROP INDEX ".idf_escape($W[1]):"\nADD $W[0] ".($W[0]=="PRIMARY"?"KEY ":"").($W[1]!=""?idf_escape($W[1])." ":"")."(".implode(", ",$W[2]).")");return queries("ALTER TABLE ".table($Q).implode(",",$mb));}function truncate_tables(array$S){return apply_queries("TRUNCATE TABLE",$S);}function drop_views(array$Dn){return queries("DROP VIEW ".implode(", ",array_map('Adminer\table',$Dn)));}function drop_tables(array$S){return queries("DROP TABLE ".implode(", ",array_map('Adminer\table',$S)));}function move_tables(array$S,array$Dn,$hm){$dk=array();foreach($S as$Q)$dk[]=table($Q)." TO ".idf_escape($hm).".".table($Q);if(!$dk||queries("RENAME TABLE ".implode(", ",$dk))){$Dc=array();foreach($Dn as$Q)$Dc[table($Q)]=view($Q);connection()->select_db($hm);$i=idf_escape(DB);foreach($Dc as$A=>$Cn){if(!queries("CREATE VIEW $A AS ".str_replace(" $i."," ",$Cn["select"]))||!queries("DROP VIEW $i.$A"))return false;}return true;}return false;}function copy_tables(array$S,array$Dn,$hm){queries("SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO'");foreach($S as$Q){$A=($hm==DB?table("copy_$Q"):idf_escape($hm).".".table($Q));if(($_POST["overwrite"]&&!queries("\nDROP TABLE IF EXISTS $A"))||!queries("CREATE TABLE $A LIKE ".table($Q))||!queries("INSERT INTO $A SELECT * FROM ".table($Q)))return false;foreach(get_rows("SHOW TRIGGERS LIKE ".q(addcslashes($Q,"%_\\")))as$I){$Jm=$I["Trigger"];list($yd,$Wh)=trigger_event($I);if(!queries("CREATE TRIGGER ".($hm==DB?idf_escape("copy_$Jm"):idf_escape($hm).".".idf_escape($Jm))." $I[Timing] $yd".($Wh!=""?" $Wh":"")." ON $A FOR EACH ROW\n$I[Statement];"))return false;}}foreach($Dn as$Q){$A=($hm==DB?table("copy_$Q"):idf_escape($hm).".".table($Q));$Cn=view($Q);if(($_POST["overwrite"]&&!queries("DROP VIEW IF EXISTS $A"))||!queries("CREATE VIEW $A AS $Cn[select]"))return false;}return true;}function trigger_event(array$I){$_d=explode(",",$I["Event"]);$H=array();foreach(array("DELETE","INSERT","UPDATE")as$yd){if(in_array($yd,$_d))$H[]=$yd;}$H=implode(" OR ",$H);if(in_array("UPDATE",$_d)&&min_version('','12.0.1')&&preg_match('~\s(?:BEFORE|AFTER)\s+(.+?)\s+ON\s~is',get_val("SHOW CREATE TRIGGER ".idf_escape($I["Trigger"]),2),$_)&&preg_match('~\bOF\s+(.+)~is',$_[1],$Wh))return array("$H OF",$Wh[1]);return array($H,"");}function trigger($A,$Q){if($A=="")return array();$J=get_rows("SHOW TRIGGERS WHERE `Trigger` = ".q($A));$H=reset($J);if($H)list($H["Event"],$H["Of"])=trigger_event($H);return($H?:array());}function triggers($Q){$H=array();foreach(get_rows("SHOW TRIGGERS LIKE ".q(addcslashes($Q,"%_\\")))as$I){list($yd)=trigger_event($I);$H[$I["Trigger"]]=array($I["Timing"],$yd);}return$H;}function trigger_options(){return array("Timing"=>array("BEFORE","AFTER"),"Event"=>(min_version('','12.0.1')?array("INSERT","UPDATE","UPDATE OF","DELETE","INSERT OR UPDATE","INSERT OR UPDATE OF","DELETE OR INSERT","DELETE OR UPDATE","DELETE OR UPDATE OF","DELETE OR INSERT OR UPDATE","DELETE OR INSERT OR UPDATE OF",):array("INSERT","UPDATE","DELETE")),"Type"=>array("FOR EACH ROW"),);}function routine($A,$T){$J=get_rows("SELECT PARAMETER_NAME, DTD_IDENTIFIER, PARAMETER_MODE, COLLATION_NAME FROM information_schema.PARAMETERS WHERE SPECIFIC_SCHEMA = DATABASE() AND ROUTINE_TYPE = '$T' AND SPECIFIC_NAME = ".q($A)." ORDER BY ORDINAL_POSITION");$m=array();foreach($J as$I){$ve=$I["DTD_IDENTIFIER"];list($Tm,$x,$en)=parse_type($ve);$m[]=array("field"=>$I["PARAMETER_NAME"],"type"=>$Tm,"length"=>$x,"unsigned"=>$en,"null"=>true,"full_type"=>$ve,"inout"=>($T=="FUNCTION"?"":$I["PARAMETER_MODE"]),"collation"=>$I["COLLATION_NAME"],);}$H=connection()->query("SELECT ROUTINE_COMMENT comment, ROUTINE_DEFINITION definition, LOWER(EXTERNAL_LANGUAGE) language, IF(DEFINER = CURRENT_USER(), '', DEFINER) definer, IF(IS_DETERMINISTIC = 'YES', 'DETERMINISTIC', 'NOT DETERMINISTIC') is_deterministic, SQL_DATA_ACCESS data_access, CONCAT('SQL SECURITY ', SECURITY_TYPE) security FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA = DATABASE() AND ROUTINE_TYPE = '$T' AND ROUTINE_NAME = ".q($A))->fetch_assoc();if(!$H)return array();$H['options']=array("DEFINER"=>$H['definer'],"DETERMINISTIC"=>$H['is_deterministic'],"SQL_DATA_ACCESS"=>$H['data_access'],"SQL_SECURITY"=>$H['security'],"COMMENT"=>$H['comment'],);if($m&&$m[0]['field']=='')$H['returns']=array_shift($m);$H['fields']=$m;return$H;}function routines(){return get_rows("SELECT SPECIFIC_NAME, ROUTINE_NAME, ROUTINE_TYPE, DTD_IDENTIFIER FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA = DATABASE()");}function routine_languages(){return(min_version(9,99)?array("sql"=>"sql","javascript"=>"js"):array());}function routine_options($pk){return array("DEFINER"=>array(),"DETERMINISTIC"=>array("NOT DETERMINISTIC","DETERMINISTIC"),"SQL_DATA_ACCESS"=>array("CONTAINS SQL","NO SQL","READS SQL DATA","MODIFIES SQL DATA"),"SQL_SECURITY"=>array("SQL SECURITY DEFINER","SQL SECURITY INVOKER"),"COMMENT"=>array(),);}function routine_id($A,array$I){return idf_escape($A);}function last_id($G){return get_val("SELECT LAST_INSERT_ID()");}function explain(Db$f,$F){return$f->query("EXPLAIN ".(min_version(5.7)?"":"PARTITIONS ").$F);}function found_rows(array$R,array$Z){return($Z||$R["Engine"]!="InnoDB"?null:$R["Rows"]);}function create_sql($Q,$Na,$Gl){$H=get_val("SHOW CREATE TABLE ".table($Q),1);if(!$Na)$H=preg_replace('~(\n\)[^\n]*?) AUTO_INCREMENT=\d+~','\1',$H);return$H;}function truncate_sql($Q){return"TRUNCATE ".table($Q);}function use_sql($tc,$Gl=""){$A=idf_escape($tc);$H="";if(preg_match('~CREATE~',$Gl)&&($gc=get_val("SHOW CREATE DATABASE $A",1))){set_utf8mb4($gc);if($Gl=="DROP+CREATE")$H="DROP DATABASE IF EXISTS $A;\n";$H .="$gc;\n";}return$H."USE $A";}function trigger_sql($Q){$H="";foreach(get_rows("SHOW TRIGGERS LIKE ".q(addcslashes($Q,"%_\\")),null,"-- ")as$I){list($I["Event"],$I["Of"])=trigger_event($I);$H .="\n".create_trigger(" ON ".table($I["Table"]),$I+array("Type"=>"FOR EACH ROW")).";\n";}return$H;}function show_variables(){return get_rows("SHOW VARIABLES");}function show_status(){return get_rows("SHOW STATUS");}function process_list(){return get_rows("SHOW FULL PROCESSLIST");}function convert_field(array$l){return driver()->convertColumn(idf_escape($l["field"]),$l);}function unconvert_field(array$l,$H){if(preg_match("~binary~",$l["type"]))$H="UNHEX($H)";if($l["type"]=="bit")$H="CONVERT(b$H, UNSIGNED)";if($l["type"]=="vector")$H=(connection()->flavor=='maria'?"VEC_FromText":"STRING_TO_VECTOR")."($H)";if(preg_match("~geom|point|linestring|polygon~",$l["type"])){$yj=(min_version(8)?"ST_":"");$H=$yj."GeomFromText($H, $yj"."SRID($l[field]))";}return$H;}function support($Pd){return preg_match('~^(comment|columns|copy|database|drop_col|dump|event|indexes|kill|privileges|move_col|procedure|processlist|routine|sql|status|table|trigger|variables|view'.(min_version(8)?'|descidx':'').(min_version('8.0.16','10.2.1')?'|check':'').(min_version(8,99)?'|fast_status':'').')$~',$Pd);}function kill_process($s){return queries("KILL ".number($s));}function connection_id(){return"SELECT CONNECTION_ID()";}function max_connections(){return get_val("SELECT @@max_connections");}function types($Kd=false){return array();}function type_values($s){return"";}function type_definition($s){return array("kind"=>"","definition"=>"");}function schemas(){return array();}function get_schema(){return"";}function set_schema($K,$g=null){return true;}}define('Adminer\JUSH',Driver::$jush);define('Adminer\SERVER',"".$_GET[DRIVER]);define('Adminer\DB',"$_GET[db]");define('Adminer\ME',preg_replace('~\?.*~','',relative_uri()).'?'.(sid()?SID.'&':'').($_GET["ext"]?"ext=".url_escape($_GET["ext"]).'&':'').(isset($_GET[DRIVER])?DRIVER."=".url_escape(SERVER).'&':'').(isset($_GET["username"])?"username=".url_escape($_GET["username"]).'&':'').(isset($_GET["db"])?'db='.url_escape(DB).'&'.(isset($_GET["ns"])?"ns=".url_escape($_GET["ns"])."&":""):''));if(isset($_GET["manifest"])){header("Content-Type: application/manifest+json; charset=utf-8");header("Cache-Control: no-cache");echo json_encode(adminer()->manifest(),64|256);exit;}function page_header($tm,$k="",$db=array(),$um="",$Ph=false,$Uc=""){if($Ph){header("HTTP/1.1 404 Not Found");$k=($k?:lang(96));}page_headers();if(is_ajax()&&$k){page_messages($k);exit;}if(!ob_get_level())ob_start('ob_gzhandler',4096);$vm=$tm.($um!=""?": $um":"");$wm=strip_tags($vm.(SERVER!=""&&SERVER!="localhost"?h(" - ".SERVER):"")." - ".adminer()->name());echo' ',$wm,' ';$lc=adminer()->css();if(is_int(key($lc)))$lc=array_fill_keys($lc,'light');$Oe=in_array('light',$lc)||in_array('',$lc);$Me=in_array('dark',$lc)||in_array('',$lc);$pc=($Oe?($Me?null:false):($Me?:null));$Zg=" media='(prefers-color-scheme: dark)'";if($pc!==false)echo"\n";echo"\n",script_src(preg_replace("~\\?.*~","",ME)."?file=functions.js&version=6.1.1+43f4678f");if(adminer()->head($pc))echo"\n","\n";if(adminer()->manifest())echo"\n";foreach($lc as$ln=>$oh){$c=($oh=='dark'&&!$pc?$Zg:($oh=='light'&&$Me?" media='(prefers-color-scheme: light)'":""));echo"\n";}echo"\n\n",script((isset($_COOKIE["adminer_version"])||!adminer()->verifyVersion()?"":"onload = partial(verifyVersion, '".VERSION."');\n")." const offlineMessage = '".js_escape(lang(98))."'; const numberFormat = '".js_escape(lang(6))."'; const numberDigits = '".js_escape(lang(7))."'; const urlSeparators = '".js_escape(ini_get("arg_separator.input"))."';"),"\n","
    \n","\n";if($db!==null){$z=substr(preg_replace('~\b(username|db|ns)=[^&]*&~','',ME),0,-1);echo'

    $vm$Uc

    \n","
    \n";restart_session();page_messages($k);adminer()->serviceWorker();$h=&get_session("dbs");if(DB!=""&&$h&&!in_array(DB,$h,true))$h=null;stop_session();define('Adminer\PAGE_HEADER',1);ob_flush();flush();if($Ph){page_footer($Ph===true?"":$Ph);exit;}}function service_worker(){$ak=has_passwords();$Ab=($ak?"navigator.serviceWorker.register('".js_escape(preg_replace('~\?.*~','',ME)."?file=worker.js&version=6.1.1+43f4678f")."', {scope: location.pathname}).catch(() => {});":"navigator.serviceWorker.getRegistration().then(registration => registration && registration.unregister()); caches.keys().then(keys => keys.forEach(key => key.startsWith('adminer-') && caches.delete(key)));");echo script("if (navigator.serviceWorker) {\n\t$Ab\n}");}function has_passwords(){foreach((array)$_SESSION["pwds"]as$bl){foreach($bl as$un){foreach($un as$D){if($D!==null)return true;}}}return false;}function page_headers(){header("Content-Type: text/html; charset=utf-8");header("Cache-Control: no-cache");header("X-Frame-Options: deny");header("X-XSS-Protection: 0");header("X-Content-Type-Options: nosniff");header("Referrer-Policy: origin-when-cross-origin");foreach(adminer()->csp(csp())as$kc){$Te=array();foreach($kc as$w=>$W)$Te[]="$w $W";header("Content-Security-Policy: ".implode("; ",$Te));}adminer()->headers();}function csp(){return array(array("script-src"=>"'self' 'unsafe-inline' 'nonce-".get_nonce()."' 'strict-dynamic'","connect-src"=>"'self' https://www.adminer.org","frame-src"=>"https://www.adminer.org","object-src"=>"'none'","base-uri"=>"'none'","form-action"=>"'self'",),);}function design_checksums(){$rn=array();foreach(array_keys(adminer()->css())as$ln)$rn[preg_replace('~\?.*~','',$ln)]=true;$H=array();foreach(array("adminer.css","adminer-dark.css")as$n){if($rn[$n]&&file_exists($n)){preg_match('~^/\* Adminer design ([-\w]+) \*/~',file_get_contents($n),$_);$H[$n]=array((string)$_[1],Plugins::checksum($n));}}return$H;}function official_design_checksums(){return array('adminer-border/adminer.css'=>'ec757f3e','adminer-dark/adminer-dark.css'=>'a26bcd7b','brade/adminer.css'=>'be4161f0','bueltge/adminer.css'=>'1a8f00b4','cpanel/adminer.css'=>'59ce604e','dracula/adminer-dark.css'=>'cfaf61dd','esterka/adminer.css'=>'1f805f36','flat/adminer.css'=>'49a61af9','galkaev/adminer-dark.css'=>'16c46f94','haeckel/adminer.css'=>'147a3565','hever/adminer.css'=>'ef0e1948','konya/adminer.css'=>'2b409696','lavender-light/adminer.css'=>'bf03f5d7','lucas-sandery/adminer.css'=>'6596353','mancave/adminer-dark.css'=>'e1ac813d','mvt/adminer.css'=>'ebd3afdc','nette/adminer.css'=>'5ab360e7','ng9/adminer.css'=>'488583cf','nicu/adminer.css'=>'216f097b','pappu687/adminer.css'=>'b58d128c','paranoiq/adminer.css'=>'64d27e5','pepa-linha/adminer.css'=>'baf25f0','pokorny/adminer.css'=>'ee9eea6d','price/adminer.css'=>'81be9a85','rmsoft/adminer.css'=>'6cd4a237','rmsoft_blue-dark/adminer.css'=>'32102a8','rmsoft_blue/adminer.css'=>'7d8d5b18','win98/adminer.css'=>'e82d63c3',);}function version_iframe(){return(isset($_COOKIE["adminer_version"])||!adminer()->verifyVersion()?"":"");}function get_nonce(){static$Oh;if(!$Oh)$Oh=base64_encode(rand_string());return$Oh;}function page_messages($k){$kn=preg_replace('~^[^?]*~','',$_SERVER["REQUEST_URI"]);$gh=idx($_SESSION["messages"],$kn);if($gh){echo"
    ".implode("
    \n
    ",$gh)."
    ".script("messagesPrint();");unset($_SESSION["messages"][$kn]);}if($k)echo"
    $k
    \n";if(adminer()->error)echo"
    ".adminer()->error."
    \n";}function page_footer($nh=""){echo"
    \n\n\n\n",script("setupSubmitHighlight(document);");}function int32($wh){while($wh>=2147483648)$wh-=4294967296;while($wh<=-2147483649)$wh+=4294967296;return(int)$wh;}function long2str(array$V,$Fn){$yk='';foreach($V as$W)$yk .=pack('V',$W);if($Fn)return substr($yk,0,end($V));return$yk;}function str2long($yk,$Fn){$V=array_values(unpack('V*',str_pad($yk,4*ceil(strlen($yk)/4),"\0")));if($Fn)$V[]=strlen($yk);return$V;}function xxtea_mx($Qn,$Pn,$Jl,$ag){return int32((($Qn>>5&0x7FFFFFF)^$Pn<<2)+(($Pn>>3&0x1FFFFFFF)^$Qn<<4))^int32(($Jl^$Pn)+($ag^$Qn));}function encrypt_string($Dl,$w){if($Dl=="")return"";$w=array_values(unpack("V*",pack("H*",md5($w))));$V=str2long($Dl,true);$wh=count($V)-1;$Qn=$V[$wh];$Pn=$V[0];$Lj=floor(6+52/($wh+1));$Jl=0;while($Lj-->0){$Jl=int32($Jl+0x9E3779B9);$fd=$Jl>>2&3;for($Li=0;$Li<$wh;$Li++){$Pn=$V[$Li+1];$vh=xxtea_mx($Qn,$Pn,$Jl,$w[$Li&3^$fd]);$Qn=int32($V[$Li]+$vh);$V[$Li]=$Qn;}$Pn=$V[0];$vh=xxtea_mx($Qn,$Pn,$Jl,$w[$Li&3^$fd]);$Qn=int32($V[$wh]+$vh);$V[$wh]=$Qn;}return long2str($V,false);}function decrypt_string($Dl,$w){if($Dl=="")return"";if(!$w)return false;$w=array_values(unpack("V*",pack("H*",md5($w))));$V=str2long($Dl,false);$wh=count($V)-1;$Qn=$V[$wh];$Pn=$V[0];$Lj=floor(6+52/($wh+1));$Jl=int32($Lj*0x9E3779B9);while($Jl){$fd=$Jl>>2&3;for($Li=$wh;$Li>0;$Li--){$Qn=$V[$Li-1];$vh=xxtea_mx($Qn,$Pn,$Jl,$w[$Li&3^$fd]);$Pn=int32($V[$Li]-$vh);$V[$Li]=$Pn;}$Qn=$V[$wh];$vh=xxtea_mx($Qn,$Pn,$Jl,$w[$Li&3^$fd]);$Pn=int32($V[0]-$vh);$V[0]=$Pn;$Jl=int32($Jl-0x9E3779B9);}return long2str($V,true);}$kj=array();if($_COOKIE["adminer_permanent"]){foreach(explode(" ",$_COOKIE["adminer_permanent"])as$W){list($w)=explode(":",$W);$kj[$w]=$W;}}function add_invalid_login(){$Va=get_temp_dir()."/adminer-invalid";foreach(glob("$Va*")?:array($Va)as$n){$pe=file_open_lock($n);if($pe)break;}if(!$pe)$pe=file_open_lock("$Va-".rand_string());if(!$pe)return;$Nf=json_decode(stream_get_contents($pe),true);$qm=time();if($Nf){foreach($Nf as$Of=>$W){if($W[0]<$qm)unset($Nf[$Of]);}}$Lf=&$Nf[adminer()->bruteForceKey()];if(!$Lf)$Lf=array($qm+30*60,0);$Lf[1]++;file_write_unlock($pe,json_encode($Nf));}function check_invalid_login(array&$kj){$Nf=array();foreach(glob(get_temp_dir()."/adminer-invalid*")as$n){$pe=file_open_lock($n);if($pe){$Nf=json_decode(stream_get_contents($pe),true);file_unlock($pe);break;}}$w=adminer()->bruteForceKey();$Lf=idx($Nf,$w,array());$Nh=($Lf[1]>29?$Lf[0]-time():0);if($Nh>0){$k=lang(101,ceil($Nh/60));if($_SERVER["HTTP_X_FORWARDED_FOR"]!=""&&$w==$_SERVER["REMOTE_ADDR"])$k .='
    '.lang(102,'login-reverse-proxy'," href='https://www.adminer.org/plugins/?version=".VERSION."'".target_blank());auth_error($k,$kj,false);}}function password_required(){static$H;if($H===null){$H=(bool)get_session("password_required");if(!$H){$jc=adminer()->credentials();$H=!is_object(Driver::connect($jc[0],$jc[1],""));if($H)set_session("password_required",true);}}return$H;}function require_password_link($D){$rh="".lang(103)."";if(!function_exists('password_hash'))return" $rh";$nj=($D!==null?$D:base64_encode(substr(pack("H*",rand_string()),0,12)));$Se=password_hash($nj,PASSWORD_DEFAULT);$n="adminer-plugins.php";$Ed=file_exists("adminer-plugins.php");if($Ed)$Jf=($D!==null?lang(104,"$n"):lang(105,"$n","$nj"));else{$n="";$Jf=($D!==null?lang(106,$n):lang(107,$n,"$nj"));}$zg="\tnew Adminer\\Password('".h($Se)."'),";$H="

    $Jf

    ".($Ed?$zg:"<?php\nreturn array(\n$zg\n);")."

    $rh ";return" ".lang(108)."

    ";}if(preg_match('~^[-\w$./]+$~',$_POST["password_less"])&&verify_token()){header("Content-Type: application/octet-stream");header("Content-Disposition: attachment; filename=adminer-plugins.php");echo"verifyLoginToken()||verify_token())){session_regenerate_id();$An=$Ma["driver"];$M=$Ma["server"];$U=$Ma["username"];$D=(string)$Ma["password"];$i=$Ma["db"];set_password($An,$M,$U,$D);$_SESSION["db"][$An][$M][$U][$i]=true;if($Ma["permanent"]){$w=implode("-",array_map('base64_encode',array($An,$M,$U,$i)));$Fj=adminer()->permanentLogin(true);$kj[$w]="$w:".base64_encode($Fj?encrypt_string($D,$Fj):"");cookie("adminer_permanent",implode(" ",$kj));}if(!array_diff(array_keys($_POST),array("auth","token"))||$An!=DRIVER||$M!=SERVER||$U!==$_GET["username"]||$i!=DB)redirect(auth_url($An,$M,$U,$i));}elseif($_POST["logout"]&&(!$_SESSION["token"]||verify_token())){Driver::disconnect();foreach(array("pwds","db","dbs","queries")as$w)set_session($w,null);unset_permanent($kj);redirect(substr(preg_replace('~\b(username|db|ns)=[^&]*&~','',ME),0,-1),lang(109).' '.lang(110));}elseif($kj&&!$_SESSION["pwds"]){session_regenerate_id();$Fj=adminer()->permanentLogin();foreach($kj as$w=>$W){list(,$yb)=explode(":",$W);list($An,$M,$U,$i)=array_map('base64_decode',explode("-",$w));set_password($An,$M,$U,decrypt_string(base64_decode($yb),$Fj));$_SESSION["db"][$An][$M][$U][$i]=true;}}function unset_permanent(array&$kj){foreach($kj as$w=>$W){list($An,$M,$U,$i)=array_map('base64_decode',explode("-",$w));if($An==DRIVER&&$M==SERVER&&$U==$_GET["username"]&&$i==DB)unset($kj[$w]);}cookie("adminer_permanent",implode(" ",$kj));}function auth_error($k,array&$kj,$Mf=true){$cl=session_name();if(isset($_GET["username"])){header("HTTP/1.1 403 Forbidden");if(($_COOKIE[$cl]||$_GET[$cl])&&!$_SESSION["token"])$k=lang(111);elseif($Mf&&($D=get_password())!==null){restart_session();add_invalid_login();if($D===false)$k .=($k?'
    ':'').lang(112,target_blank(),'permanentLogin()');set_password(DRIVER,SERVER,$_GET["username"],null);unset_permanent($kj);}}if(!$_COOKIE[$cl]&&$_GET[$cl]&&ini_bool("session.use_only_cookies"))$k=lang(113);$Qi=session_get_cookie_params();cookie("adminer_key",($_COOKIE["adminer_key"]?:rand_string()),$Qi["lifetime"]);if(!$_SESSION["token"])$_SESSION["token"]=rand(1,1e6);page_header(lang(45),$k,null);echo"
    \n","
    ";if(hidden_fields($_POST,array("auth","token")))echo"

    ".lang(114)."\n";echo input_token(),"

    \n";adminer()->loginForm();echo"
    \n";page_footer("auth");exit;}if(isset($_GET["username"])&&!class_exists('Adminer\Db')){unset($_SESSION["pwds"][DRIVER]);unset_permanent($kj);page_header(lang(115),lang(116,implode(", ",Driver::$extensions)),false);page_footer("auth");exit;}$f='';if(isset($_GET["username"])&&is_string(get_password())){check_invalid_login($kj);$jc=adminer()->credentials();$f=Driver::connect($jc[0],$jc[1],$jc[2]);if(is_object($f)){Db::$instance=$f;Driver::$instance=new Driver($f);if($f->flavor)save_settings(array("vendor-".DRIVER."-".SERVER=>get_driver(DRIVER)));}}$Fg=null;if(!is_object($f)||($Fg=adminer()->login($_GET["username"],get_password()))!==true){$k=(is_string($f)?nl_br(h($f)):(is_string($Fg)?$Fg:lang(117))).(preg_match('~^ | $~',get_password())?'
    '.lang(118):'');auth_error($k,$kj);}if($_POST["logout"]&&$_SESSION["token"]&&!verify_token()){page_header(lang(100),lang(119));page_footer("db");exit;}if(!$_SESSION["token"])$_SESSION["token"]=rand(1,1e6);stop_session(true);if($Ma&&$_POST["token"])$_POST["token"]=get_token();$k='';if($_POST){if(!verify_token()){header("HTTP/1.1 403 Forbidden");$k=lang(119).' '.lang(120);}}elseif($_SERVER["REQUEST_METHOD"]=="POST"){header("HTTP/1.1 413 Content Too Large");$k=lang(121,"post_max_size");if(isset($_GET["sql"]))$k .=' '.lang(122);}function print_select_result($G,$g=null,array$_i=array(),&$y=0,&$gd=false){$Ag=array();$v=array();$e=array();$S=array();$Cj=array();$id=array();$Um=array();$H=array();$ph=$gd;$gd=false;for($r=0;(!$y||$r<$y)&&($I=$G->fetch_row());$r++){if(!$r){echo"
    \n","\n","";for($Xf=0;$Xffetch_field();$A=$l->name;$Q=(isset($l->table)?$l->table:"");$zi=(isset($l->orgtable)?$l->orgtable:"");$yi=(isset($l->orgname)?$l->orgname:$A);$Tm=driver()->typeName($l);if($_i&&JUSH=="sql")$Ag[$Xf]=($A=="table"?"table=":($A=="possible_keys"?"indexes=":null));elseif($zi!=""){$wa=($Q!=""?$Q:$zi);if($Q!="")$H[$Q]=$zi;if(!isset($v[$wa])){if(!isset($Cj[$zi])){$Cj[$zi]=array();foreach(indexes($zi,$g)as$u){if($u["type"]=="PRIMARY"){$Cj[$zi]=array_flip($u["columns"]);break;}}}$S[$wa]=$zi;$v[$wa]=$Cj[$zi];$e[$wa]=$Cj[$zi];}if(isset($e[$wa][$yi])){unset($e[$wa][$yi]);$v[$wa][$yi]=$Xf;$Ag[$Xf]=$wa;}elseif($ph&&isset($l->orgname)&&$l->db==DB&&!is_blob(array("type"=>$Tm)))$id[$Xf]=array($wa,$yi,preg_match('~text|json|lob~',$Tm));}$Um[$Xf]=$Tm;echo"\n";}$lf=array();foreach($v as$wa=>$u){if($u&&!$e[$wa]){$t="";foreach($u as$Bb=>$Xf){if($I[$Xf]===null){$t=null;break;}$t .="&where[".url_escape(bracket_escape($Bb))."]=".url_escape($I[$Xf]);}$lf[$wa]=$t;}}echo"";foreach($I as$w=>$W){$z="";if(isset($Ag[$w])){if($_i&&JUSH=="sql"){$Q=$I[array_search("table=",$Ag)];$z=ME.$Ag[$w].url_escape($_i[$Q]!=""?$_i[$Q]:$Q);}elseif(idx($lf,$Ag[$w])!==null)$z=ME."edit=".url_escape($S[$Ag[$w]]).$lf[$Ag[$w]];}$c="";$kb=idx($id,$w);if($kb&&idx($lf,$kb[0])!==null&&is_utf8($W)){$gd=true;$c=" data-name='".h("val[".bracket_escape($S[$kb[0]])."][".bracket_escape(substr($lf[$kb[0]],1))."][".bracket_escape($kb[1])."]")."' data-text='".($kb[2]?1:0)."'";}$W=select_value($W,$z,array('type'=>(preg_match('~binary~',$Um[$w])?'blob':$Um[$w])),null);echo"$W";}}$y=$r;echo($r?"
    ".h($A).($_i?doc_link(array('sql'=>"explain-output.html#explain_".strtolower($A),'mariadb'=>"explain/#the-columns-in-explain-select",)):"");}foreach($id as$Xf=>$kb){if($e[$kb[0]])unset($id[$Xf]);}echo"
    \n
    ":"

    ".lang(16))."\n";return$H;}function textarea($A,$X,$J=10,$Fb=80,$Zf=JUSH){echo"";}function select_input($c,array$B,$X="",$lj=""){if($B&&$X!=""&&!isset($B[$X]))$B=array($X=>$X)+$B;$gm=($B?"select":"input");return"<$gm$c".($B?">

    ".lang(141,get_driver(DRIVER),"".h(connection()->server_info)."","".connection()->extension."")."\n","

    ".lang(142,"".h(logged_user())."")."\n";$h=adminer()->databases();if($h){$Bk=support("scheme");$Eb=collations();echo"

    \n","\n","".(support("database")?"\n";$h=($_GET["dbsize"]?count_tables($h):array_flip($h));foreach($h as$i=>$S){$ok=h(preg_replace('~&db=[^&]*~','',ME))."db=".url_escape($i);$s=h("Db-".$i);echo"".(support("database")?"
    ":"")."".lang(44).(get_session("dbs")!==null?" - ".lang(143)."":"")."".lang(144)."".lang(145)."".lang(146)." - ".lang(147).""."
    ".checkbox("db[]",$i,in_array($i,(array)$_POST["db"]),"","","",$s):""),"".h($i)."";$Db=h(db_collation($i,$Eb));echo"".(support("database")?"$Db":$Db),"".($_GET["dbsize"]?format_number($S):"?")."","".($_GET["dbsize"]?db_size($i):"?"),"\n";}echo"
    \n",(support("database")?"\n":""),input_token(),"
    \n",script("tableCheck();");}$qa=adminer();$pj=($qa instanceof Plugins?$qa->plugins:array());$Yc=($qa instanceof Plugins?$qa->drivers:array());$Jc=design_checksums();if($pj||$Yc||$Jc){$wb=($qa instanceof Plugins?$qa->checksums():array());$Yh=Plugins::officialChecksums();$hn=function($ln){return" (".VERSION.")";};$oj=function($Vd)use($wb,$Yh,$hn){return($wb[$Vd]&&$Yh[$Vd]&&$wb[$Vd]!==$Yh[$Vd]?$hn("https://www.adminer.org/plugins/?version=".VERSION):"");};echo"
    \n","

    ".lang(150)."

    \n
      \n";foreach($pj as$mj){$Xj=new \ReflectionObject($mj);$Gc=(method_exists($mj,'description')?$mj->description():"");if(!$Gc){if(preg_match('~^/[\s*]+(.+)~',$Xj->getDocComment(),$_))$Gc=$_[1];}$Ck=(method_exists($mj,'screenshot')?$mj->screenshot():"");echo"
    • ".get_class($mj)."".h($Gc?": $Gc":"").($Ck?" (".lang(151).")":"").$oj(basename((string)$Xj->getFileName(),'.php'))."\n";}foreach($Yc as$s=>$A)echo"
    • ".h($s).": ".h($A).$oj(basename((string)$qa->driverFiles[$s],'.php'))."\n";if($Jc){$ai=official_design_checksums();foreach($Jc as$n=>$Ic){list($A,$vb)=$Ic;$Zh=$ai["$A/$n"];echo"
    • ".h($n)."".h($A?": $A":"").($Zh&&$Zh!==$vb?$hn("https://www.adminer.org/?version=".VERSION."#extras"):"")."\n";}}echo"
    \n";adminer()->pluginsLinks();echo"
    \n";}}page_footer("db");exit;}if(support("scheme")){if(DB!=""&&$_GET["ns"]!==""){if(!isset($_GET["ns"]))redirect(preg_replace('~&db=[^&]+~','\0&ns='.url_escape(get_schema()),relative_uri()));if(!set_schema($_GET["ns"]))page_header(lang(88).h(": $_GET[ns]"),adminer()->error(),true,"","ns");}}adminer()->afterConnect();class TmpFile{private$handler;var$size=0;function __construct(){$this->handler=tmpfile();}function write($Yb){$this->size+=strlen($Yb);fwrite($this->handler,$Yb);}function send(){fseek($this->handler,0);fpassthru($this->handler);fclose($this->handler);}}if($_GET["select"]!=""&&($_POST["edit"]||$_POST["clone"])&&!$_POST["save"])$_GET["edit"]=$_GET["select"];if(isset($_GET["callf"]))$_GET["call"]=$_GET["callf"];if(isset($_GET["function"]))$_GET["procedure"]=$_GET["function"];if(isset($_GET["download"])){$a=$_GET["download"];$m=fields($a);header("Content-Type: application/octet-stream");$Y=array_merge((array)$_GET["where"],(array)$_GET["val"]);header("Content-Disposition: attachment; filename=".friendly_url("$a-".implode("_",$Y)).".".friendly_url($_GET["field"]));$L=array(idf_escape($_GET["field"]));$G=driver()->select($a,$L,array(where($_GET,$m)),$L);$I=($G?$G->fetch_row():array());echo driver()->value($I[0],$m[$_GET["field"]]);exit;}elseif(isset($_GET["table"])){$a=$_GET["table"];$m=fields($a);if(!$m)$k=adminer()->error();$R=table_status1($a);$A=adminer()->tableName($R);$k=$k?:h($R["Error"]);page_header(($m&&is_view($R)?$R['Engine']=='materialized view'?lang(152):lang(153):lang(154)).": ".($A!=""?$A:h($a)),$k,array(),"",!$m,($m?doc_link(array(JUSH=>driver()->tableHelp($a,is_view($R)))):""));$nk=array();foreach($m as$w=>$l)$nk+=$l["privileges"];adminer()->selectLinks($R,(isset($nk["insert"])||!support("table")?"":null));$Jb=$R["Comment"];if($Jb!="")echo"

    ".lang(59).": ".adminer()->commentValue('TABLE',$Jb)."\n";if($m)adminer()->tableStructurePrint($m,$R);function tables_links(array$S){echo"

    \n";}$Cf=driver()->inheritsFrom($a);if($Cf){echo"

    ".lang(155)."

    \n";tables_links($Cf);}if(support("indexes")&&driver()->supportsIndex($R)){echo"
    \n","

    ".lang(156)."

    \n";$v=indexes($a);if($v)adminer()->tableIndexesPrint($v,$R);if(driver()->supportsAlterIndex($R))echo'
    \n";}if(!is_view($R)&&driver()->supportsAlterTable($R)){if(fk_support($R)){echo"
    \n","

    ".lang(123)."

    \n";$le=foreign_keys($a);if($le){echo"\n","\n";foreach($le as$A=>$o){echo"","
    ".lang(158)."".lang(159)."".lang(126)."".lang(125)."
    ".implode(", ",array_map('Adminer\h',$o["source"]))."";$z=($o["db"]!=""?preg_replace('~db=[^&]*~',"db=".url_escape($o["db"]),ME):($o["ns"]!=""?preg_replace('~ns=[^&]*~',"ns=".url_escape($o["ns"]),ME):ME));echo"".($o["db"]!=""&&$o["db"]!=DB?"".h($o["db"]).".":"").($o["ns"]!=""&&$o["ns"]!=$_GET["ns"]?"".h($o["ns"]).".":"").h($o["table"])."","(".implode(", ",array_map('Adminer\h',$o["target"])).")","".h($o["on_delete"]),"".h($o["on_update"]),''.lang(160).'',"\n";}echo"
    \n";}echo'
    \n";}if(support("check")){echo"
    \n","

    ".lang(162)."

    \n";$rb=driver()->checkConstraints($a);if($rb){echo"\n";foreach($rb as$w=>$W)echo"","
    ".shorten_utf8(preg_replace('~\s+~',' ',ltrim($W)),80,""),"".lang(160)."","\n";echo"
    \n";}echo'
    \n";}}if(support(is_view($R)?"view_trigger":"trigger")&&driver()->supportsAlterTable($R)){echo"
    \n","

    ".lang(164)."

    \n";$Nm=triggers($a);if($Nm){echo"\n";foreach($Nm as$w=>$W){echo"
    ".h($W[0])."".h($W[1])."".h($w)."".lang(160)."";$pk=$W[2];if($pk){$rk=preg_replace('~ns=[^&]*~',"ns=".url_escape($pk["ns"]),ME).'function='.url_escape($pk["function"]).'&name='.url_escape($pk["name"]);echo", ".lang(165)."";}echo"\n";}echo"
    \n";}echo'
    \n";}$fl=driver()->shadowTables($a);if($fl){echo"

    ".lang(167)."

    \n";tables_links($fl);}$Bf=driver()->inheritedTables($a);if($Bf){echo"

    ".lang(168)."

    \n";$Ui=driver()->partitionsInfo($a);if($Ui)echo"

    BY ".h("$Ui[partition_by]($Ui[partition])")."\n";tables_links($Bf);}}elseif(isset($_GET["schema"])){page_header(lang(79),"",array(),h(DB.($_GET["ns"]?".$_GET[ns]":"")));function schema_column($Q,array$Wj,array&$e){if(!isset($e[$Q])){$e[$Q]=0;foreach((array)idx($Wj,$Q)as$A=>$Yj){if($A!=$Q)$e[$Q]=max($e[$Q],schema_column($A,$Wj,$e)+1);}}return$e[$Q];}function type_class($T){foreach(array('char'=>'text','date'=>'time|year','binary'=>'blob','enum'=>'set',)as$w=>$W){if(preg_match("~$w|$W~",$T))return" class='$w'";}}$Xl=array();$Zl=array();$Yl=array();$Sd=array();$da=($_GET["schema"]?:$_COOKIE["adminer_schema-".str_replace(".","_",DB)]);preg_match_all('~([^:]+):([-0-9.]+)x([-0-9.]+)(_|$)~',$da,$Kg,PREG_SET_ORDER);foreach($Kg as$r=>$_){$Xl[$_[1]]=array((float)$_[2],(float)$_[3]);$Zl[]="\n\t'".js_escape($_[1])."': [ $_[2], $_[3] ]";}$K=array();$Wj=array();$le=array();$za=driver()->allFields();$Ye=array();$am=array();foreach(table_status('',true)as$Q=>$R){if(!is_view($R)){if(adminer()->tableName($R)!=""&&!$R["dependent"])$am[$Q]=$R;else$Ye[$Q]=true;}}foreach($am as$Q=>$R){$E=0;$K[$Q]["fields"]=array();foreach($za[$Q]as$l){$E+=1.25;$Sd[$Q][$l["field"]]=$E;$K[$Q]["fields"][$l["field"]]=$l;}foreach(adminer()->foreignKeys($Q)as$W){if($W["db"]==""&&$W["ns"]==""&&!$Ye[$W["table"]]){$le[$Q][]=$W;$Wj[$W["table"]][$Q]=array();}}}$e=array();$Ce=array();$On=array();$Ie=array();foreach(array_keys($K)as$A)schema_column($A,$Wj,$e);arsort($e);foreach($e as$A=>$d){$lh=null;foreach((array)idx($le,$A)as$W){if($W["table"]!=$A&&$K[$W["table"]])$lh=($lh===null?$e[$W["table"]]:min($lh,$e[$W["table"]]));}$e[$A]=max($d,(int)$lh-1);}foreach($K as$A=>$Q){$d=$e[$A];$Ce[$d][]=$A;$pm=.75*strlen($A);foreach($Q["fields"]as$l)$pm=max($pm,.65*strlen($l["field"]));$On[$d]=max(idx($On,$d,0),ceil($pm)+1);}foreach($le as$A=>$zn){foreach($zn as$W){$He=$e[$A]+(idx($e,$W["table"],$e[$A])>$e[$A]?1:0);$Ie[$He]=idx($Ie,$He,0)+1;}}ksort($Ce);$We=0;$Nn=0;$Gb=0;$Aj=null;$Tl=array();$cm=array();foreach($Ce as$d=>$S){if($Aj!==null){$Gb=round($Gb+$On[$Aj]+1.7+idx($Ie,$d,0)*.1,1);$wi=array();foreach($S as$A){$Jl=0;$fc=0;$Dh=array_keys((array)idx($Wj,$A));foreach((array)idx($le,$A)as$W)$Dh[]=$W["table"];foreach($Dh as$xh){if($K[$xh]&&$e[$xh]<$d){$Jl+=$K[$xh]["pos"][0];$fc++;}}$wi[$A]=($fc?$Jl/$fc:$We);}asort($wi);$S=array_keys($wi);}$_m=0;foreach($S as$A){$E=1.25*count($K[$A]["fields"]);$K[$A]["pos"]=($Xl[$A]?:array($_m,$Gb));$Tl[$A]=$K[$A]["pos"][1];$cm[$A]=$On[$d];$_m+=2.5+$E;$We=max($We,$K[$A]["pos"][0]+2.5+$E);$Nn=max($Nn,round($K[$A]["pos"][1]+$On[$d],1));if(!$Xl[$A])$Yl[]="\n\t'".js_escape($A)."': [ ".$K[$A]["pos"][0].", ".$K[$A]["pos"][1]." ]";}$Aj=$d;}$sg=array();$Wa=array();foreach($le as$A=>$zn){foreach($zn as$W){$im=idx($Tl,$W["table"],$Tl[$A]);$ql=$Tl[$A]+$cm[$A];$mk=($im-1>$ql);$qg=($mk?$ql+1:min($Tl[$A],$im)-1);$Va=idx($Wa,(string)$qg,0);$Wa[(string)$qg]=$Va+1;$qg=round($mk?min($qg+$Va*.1,$im-1):$qg-$Va*.1,1);while($sg[(string)$qg])$qg-=.0001;$K[$A]["references"][$W["table"]][(string)$qg]=array($W["source"],$W["target"]);$Wj[$W["table"]][$A][(string)$qg]=$W["target"];$sg[(string)$qg]=true;}}echo'

    const tablePos = {',implode(",",$Zl)."\n",'}; const tablePosDefault = {',implode(",",$Yl)."\n",'}; const em = qs(\'#schema\').offsetHeight / ',$We,'; document.onmousemove = schemaMousemove; document.onmouseup = event => schemaMouseup(event, \'',js_escape(DB),'\'); ';foreach($K as$A=>$Q){echo"
    ",''.h($A)."";foreach($Q["fields"]as$l){$W=''.h($l["field"]).'';echo"
    ".($l["primary"]?"$W":$W);}foreach((array)$Q["references"]as$jm=>$Yj){foreach($Yj as$qg=>$Tj){$rg=$qg-$Q["pos"][1];$Gl=($rg>0?"left: 100%; width: calc($rg"."em - 100%)":"left: $rg"."em");$Nn=($rg>0?"100%":(-$rg)."em");$r=0;foreach($Tj[0]as$pl)echo"\n
    "."
    ";}}foreach((array)$Wj[$A]as$jm=>$Yj){foreach($Yj as$qg=>$km){$rg=$qg-$Q["pos"][1];$r=0;foreach($km as$hm)echo"\n
    "."
    "."
    ";}}echo"\n
    \n";}foreach($K as$A=>$Q){foreach((array)$Q["references"]as$jm=>$Yj){if($K[$jm]){foreach($Yj as$qg=>$Tj){$mh=$We;$Sg=-10;foreach($Tj[0]as$w=>$pl){$rj=$Q["pos"][0]+$Sd[$A][$pl];$sj=$K[$jm]["pos"][0]+$Sd[$jm][$Tj[1][$w]];$mh=min($mh,$rj,$sj);$Sg=max($Sg,$rj,$sj);}echo"
    \n";}}}}echo'
    ';$wc=array('','USE','DROP+CREATE','CREATE');$_k=(JUSH=="mssql"?array('','DROP+CREATE','CREATE'):$wc);$bm=array('','DROP+CREATE','CREATE');$rc=array('','TRUNCATE+INSERT','INSERT');if(JUSH=="sql")$rc[]='INSERT+UPDATE';$I=get_settings("adminer_export");if(!$I)$I=array("output"=>"text","format"=>"sql","db_style"=>(DB!=""?"":"CREATE"),"schema_style"=>"","table_style"=>"DROP+CREATE","data_style"=>"INSERT");echo"
    ".lang(170)."".html_radios("output",adminer()->dumpOutput(),$I["output"])."\n","
    ".lang(171)."".html_radios("format",adminer()->dumpFormat(),$I["format"])."\n",(JUSH=="sqlite"?"":"
    ".lang(44)."".html_select('db_style',$wc,$I["db_style"]).(support("type")?checkbox("types",1,$I["types"],lang(0)):"").(support("routine")?checkbox("routines",1,$I["routines"],lang(81)):"").(support("event")?checkbox("events",1,$I["events"],lang(83)):"")),(function_exists('Adminer\use_schema_sql')?"
    ".lang(88)."".html_select('schema_style',$_k,$I["schema_style"]):""),"
    ".lang(145)."".html_select('table_style',$bm,$I["table_style"]).checkbox("auto_increment",1,$I["auto_increment"],lang(60)).(support("trigger")?checkbox("triggers",1,$I["triggers"],lang(164)):""),"
    ".lang(172)."".html_select('data_style',$rc,$I["data_style"]),'
    ';adminer()->dumpPrint();echo'

    ',input_token(),' ';$zj=array();if($_GET["ns"]===""&&support("scheme")){echo"","","\n";foreach(adminer()->schemas()as$K){if(!information_schema(DB,$K))echo"".checkbox("schemas[]",$K,true,$K,"","block")."\n";}}elseif(DB!=""){$tb=($a!=""?"":" checked");echo"","","","\n";$Dn="";$em=tables_list();foreach($em as$A=>$T){$yj=preg_replace('~_.*~','',$A);$tb=($a==""||$a==(substr($a,-1)=="%"?"$yj%":$A));$Ej="".checkbox("tables[]",$A,$tb,$A,"","block");if($T!==null&&!preg_match('~table~i',$T))$Dn .="$Ej\n";else echo"$Ej\n";$zj[$yj]++;}echo$Dn;if($em)echo script("ajaxSetHtml('".js_escape(ME)."script=db');");}else{$h=adminer()->databases();echo"","","\n";if($h){foreach($h as$i){if(!information_schema($i)){$yj=preg_replace('~_.*~','',$i);echo"".checkbox("databases[]",$i,$a==""||$a=="$yj%",$i,"","block")."\n";$zj[$yj]++;}}}else echo"";}echo' ';$be=true;foreach($zj as$w=>$W){if($w!=""&&$W>1){echo($be?"

    ":" ")."".h($w)."";$be=false;}}}elseif(isset($_GET["privileges"])){page_header(lang(80));echo'

    \n";hidden_fields_get();echo input_hidden("db",DB),($Ae?"":input_hidden("grant")),"\n","\n";while($I=$G->fetch_assoc())echo'
    ".lang(42)."".lang(40)."
    '.h($I["User"]),"".h($I["Host"]),''.lang(14)."\n";if(!$Ae||DB!="")echo"
    ","","\n";echo"
    \n","

    \n";}elseif(isset($_GET["sql"])){if(!$k&&$_POST["export"]){save_settings(array("output"=>$_POST["output"],"format"=>$_POST["format"]),"adminer_import");dump_headers("sql");if($_POST["format"]=="sql")echo"$_POST[query]\n";else{adminer()->dumpTable("","");adminer()->dumpData("","table",$_POST["query"]);adminer()->dumpFooter();}exit;}if(!$k&&$_POST["val"]){$ta=0;$Hl=true;$lb=array();$xk=0;foreach($_POST["val"]as$J)$xk+=count($J);$Ya=$xk>1&&driver()->begin();foreach($_POST["val"]as$Rl=>$J){$Q=bracket_escape($Rl,true);$m=fields($Q);$Sl=indexes($Q);foreach($J as$t=>$I){parse_str(bracket_escape($t,true),$Z);$Ym=array();foreach($Z["where"]as$w=>$W)$Ym[bracket_escape($w,true)]=$W;if(!$m||$Z["null"]||array_diff_key($Ym,$m)||!unique_array($Ym,$Sl)){$Hl=false;break 2;}$N=array();$L=array();foreach($I as$bg=>$W){$w=bracket_escape($bg,true);$l=idx($m,$w);if(!$l){$Hl=false;break 3;}$N[idf_escape($w)]=(preg_match('~char|text~',$l["type"])||$W!=""?adminer()->processInput($l,$W):"NULL");$L[$bg]=$w;}$Oj=where($Z,$m);if(!driver()->update($Q,$N," WHERE $Oj",0," ")){$Hl=false;break 2;}$ta+=connection()->affected_rows;$e=array();foreach($L as$w)$e[]=idf_escape($w);$in=driver()->select($Q,$e,array($Oj),$e);$Jh=($in?$in->fetch_row():array());$Xf=0;foreach($L as$bg=>$w){$l=$m[$w];$Fl=array('type'=>(preg_match('~binary~',$l["type"])?'blob':$l["type"]));$lb["val[$Rl][$t][$bg]"]=select_value(idx($Jh,$Xf++),"",$Fl,null);}}}if($Ya&&$Hl)$Hl=driver()->commit();queries_redirect(null,lang(175,$ta),$Hl);if($Ya&&!$Hl)driver()->rollback();page_headers();page_messages($k);foreach($lb as$A=>$W)echo"\n";exit;}restart_session();$cf=&get_session("queries");$bf=&$cf[DB];if(!$k&&$_POST["clear"]){$bf=array();redirect(remove_from_uri("history"));}stop_session();$ra=get_settings("adminer_import");if($_POST&&$ra)save_settings($ra,"adminer_import");page_header((isset($_GET["import"])?lang(84):lang(73)),$k);$_g=driver()->lineComment();if(!$k&&$_POST&&!(isset($_GET["import"])&&adminer()->importProcess())){$Ec=driver()->delimiter;$pe=false;if(!isset($_GET["import"]))$F=$_POST["query"];elseif($_POST["webfile"]){$ul=adminer()->importServerPath();$pe=@fopen((file_exists($ul)?$ul:"compress.zlib://$ul.gz"),"rb");$F=($pe?fread($pe,1e6):false);}else$F=get_file("sql_file",true,$Ec);if(is_string($F)){if(($ah=ini_bytes("memory_limit"))!="-1")ini_set("memory_limit",max($ah,strval(2*strlen($F)+memory_get_usage()+8e6)));if($F!=""&&strlen($F)<1e6){$Lj=$F.(preg_match("~$Ec\\s*\$~",$F)?"":$Ec);if(!$bf||first(end($bf))!=$Lj){restart_session();$bf[]=array($Lj,time());set_session("queries",$cf);stop_session();}}$rl="(?:\\s|\xEF\xBB\xBF|/\\*[\s\S]*?\\*/|(?:$_g)[^\n]*\n?|--\r?\n)";$bi=0;$nd=true;$ec=false;$g=connect();if($g&&DB!=""){$g->select_db(DB);if($_GET["ns"]!="")set_schema($_GET["ns"],$g);}$Ib=0;$vd=array();$Ri='[\'"'.(JUSH=="sql"?'`':(JUSH=="sqlite"?'`[':(JUSH=="mssql"?'[':''))).']|/\*|'.$_g.'|$'.(JUSH=="pgsql"?'|\$([a-zA-Z]\w*)?\$':'');$Am=microtime(true);while($F!=""){if(!$bi&&preg_match("~^$rl*+DELIMITER\\s+(\\S+)~i",$F,$_)){$Ec=preg_quote($_[1]);$F=substr($F,strlen($_[0]));}elseif(!$bi&&JUSH=='pgsql'&&preg_match("~^($rl*+COPY\\s+)[^;]+\\s+FROM\\s+stdin;~i",$F,$_)){$Ec="\n\\\\\\.\r?\n";$ec=true;$bi=strlen($_[0]);}else{preg_match("($Ec\\s*|$Ri)",$F,$_,PREG_OFFSET_CAPTURE,$bi);list($ne,$E)=$_[0];if(!$ne&&$pe&&!feof($pe))$F .=fread($pe,1e5);else{if(!$ne&&rtrim($F)=="")break;$bi=$E+strlen($ne);if($ne&&!preg_match("(^$Ec)",$ne)){$ib=driver()->hasCStyleEscapes()||(JUSH=="pgsql"&&($E>0&&strtolower($F[$E-1])=="e"));$hj=($ne=='/*'?'\*/':($ne=='['?']':(preg_match("~^(?:$_g)~",$ne)?"\n":preg_quote($ne).($ib?'|\\\\.':''))));while(preg_match("($hj|\$)s",$F,$_,PREG_OFFSET_CAPTURE,$bi)){$yk=$_[0][0];if(!$yk&&$pe&&!feof($pe))$F .=fread($pe,1e5);else{$bi=$_[0][1]+strlen($yk);if(!$yk||$yk[0]!="\\")break;}}}else{$Lj=substr($F,0,$E+($ec?3:0));$F=substr($F,$bi);$bi=0;if($ec){$Ec=driver()->delimiter;$ec=false;}$Ab="".adminer()->sqlCommandQuery($Lj)."";if(preg_match("~^$rl*+\$~",$Lj)&&!preg_match('~/\*M?!~',$Lj)){echo($_POST["only_errors"]?"":"
    $Ab
    \n");continue;}$nd=false;$Ib++;$Ej="
    $Ab
    \n";if(JUSH=="sqlite"&&preg_match("~^$rl*+(ATTACH|VACUUM\\b.*\\bINTO)\\b~is",$Lj,$_)!==0){echo$Ej,"

    ".lang(176,preg_match('~ATTACH~i',$_[1])?'ATTACH':'VACUUM INTO')."\n";$vd[]=" $Ib";if($_POST["error_stops"])break;}else{if(!$_POST["only_errors"]){echo$Ej;ob_flush();flush();}$_l=microtime(true);if(connection()->multi_query($Lj)&&$g&&preg_match("~^$rl*+USE\\b~i",$Lj))$g->query($Lj);do{$G=connection()->store_result();if(connection()->error){echo($_POST["only_errors"]?$Ej:""),"

    ".lang(177).(connection()->errno?" (".connection()->errno.")":"").": ".adminer()->error()."\n";$vd[]=" $Ib";if($_POST["error_stops"])break 2;}else{$z=ME."sql=".url_escape(trim($Lj));$qm=" (".format_time($_l).")".(strlen($z)<1900?" ".lang(14)."":"");$ta=connection()->affected_rows;$Hn=($_POST["only_errors"]?"":driver()->warnings());$In="warnings-$Ib";if($Hn)$qm .=", ".lang(55)."";$Fd="";$Gd="explain-$Ib";if(is_object($G)){$y=$_POST["limit"];$Sh=$y;$gd=!$_POST["only_errors"];if($gd)echo"

    \n";$_i=print_select_result($G,$g,array(),$Sh,$gd);if(!$_POST["only_errors"]){$Sh=max($G->num_rows,$Sh);echo"
    \n";}}else{if(preg_match("~^$rl*+(CREATE|DROP|ALTER)$rl++(DATABASE|SCHEMA)\\b~i",$Lj)){restart_session();set_session("dbs",null);stop_session();}if(!$_POST["only_errors"])echo"

    ".lang(181,$ta)."$qm\n";}echo($Hn?"

    \n":""),($Fd!=""?"\n":"");}$_l=microtime(true);}while(connection()->next_result());}}}}}if($nd)echo"

    ".lang(182)."\n";else{$rf=connection()->inTransaction();driver()->rollback();if($rf)echo"

    ROLLBACK".(JUSH=="mssql"?" TRANSACTION":"")." -- Adminer
    \n";if($_POST["only_errors"])echo"

    ".lang(183,$Ib-count($vd))," (".format_time($Am).")\n";elseif($vd&&$Ib>1)echo"

    ".lang(177).": ".implode("",$vd)."\n";}}else echo"

    ".upload_error($F)."\n";}echo'

    ';$Cd="";if(!isset($_GET["import"])){$Lj=$_GET["sql"];if($_POST)$Lj=$_POST["query"];elseif($_GET["history"]=="all")$Lj=$bf;elseif($_GET["history"]!="")$Lj=idx($bf[$_GET["history"]],0);echo"

    ";textarea("query",$Lj,20);echo($_POST?"":script("qs('textarea').focus();")),"

    ";adminer()->sqlPrintAfter();echo"$Cd\n",lang(185).": \n";}else{$Je=(extension_loaded("zlib")?"[.gz]":"");echo"

    ".lang(186)."
    ",($jn?input_hidden(ini_get("session.upload_progress.name"),$jn):""),"SQL$Je: ".file_input(" name='sql_file[]' multiple","\n$Cd"),($jn?" ":""),"
    \n";$of=adminer()->importServerPath();if($of)echo"
    ".lang(187)."
    ",lang(188,"".h($of)."$Je")," ","
    \n";adminer()->importPrint();echo"

    ";}echo checkbox("error_stops",1,($_POST?$_POST["error_stops"]:isset($_GET["import"])||$_GET["error_stops"]),lang(190))."\n",checkbox("only_errors",1,($_POST?$_POST["only_errors"]:isset($_GET["import"])||$_GET["only_errors"]),lang(191))."\n",input_token();if(!isset($_GET["import"])&&$bf){print_fieldset("history",lang(192),$_GET["history"]!="");for($W=end($bf);$W;$W=prev($bf)){$w=key($bf);list($Lj,$qm,$jd)=$W;echo'

    '.lang(14).""." ".@date("H:i:s",$qm).""." ".shorten_utf8(preg_replace('~\s+~',' ',ltrim(preg_replace("~^(?:$_g).*~m",'',$Lj))),80,"").($jd?" ($jd)":"")."
    \n";}echo"\n","".lang(194)."\n","\n";}echo'
    ';}elseif(isset($_GET["edit"])){$a=$_GET["edit"];$m=fields($a);$Z=(isset($_GET["select"])?($_POST["check"]&&count($_POST["check"])==1?where_check($_POST["check"][0],$m):""):where($_GET,$m));$gn=(isset($_GET["select"])?$_POST["edit"]:$Z);foreach($m as$A=>$l){if((!$gn&&!isset($l["privileges"]["insert"]))||adminer()->fieldName($l)=="")unset($m[$A]);}if($_POST&&!$k&&!isset($_GET["select"])){$Eg=relative_uri((string)$_POST["referer"]);if($_POST["insert"])$Eg=($gn?null:relative_uri());elseif(!preg_match('~^.+&select=.+$~',$Eg))$Eg=ME."select=".url_escape($a);$v=indexes($a);$Zm=unique_array($_GET["where"],$v);$Oj="\nWHERE $Z";if(isset($_POST["delete"]))queries_redirect($Eg,lang(195),driver()->delete($a,$Oj,$Zm?0:1));else{$N=array();foreach($m as$A=>$l){$W=process_input($l);if($W!==false&&$W!==null)$N[idf_escape($A)]=$W;}if($gn){if(!$N)redirect($Eg);queries_redirect($Eg,lang(196),driver()->update($a,$N,$Oj,$Zm?0:1));if(is_ajax()){page_headers();page_messages($k);exit;}}else{$G=driver()->insert($a,$N);$pg=($G?last_id($G):0);queries_redirect($Eg,lang(197,($pg?" $pg":"")),$G);}}}$I=null;$F="";$qm="";if($Z){$L=array();$Jk=array("*");foreach($m as$A=>$l){if(isset($l["privileges"]["select"])){$Ha=($_POST["clone"]&&$l["auto_increment"]?"''":convert_field($l));$d=($Ha?"$Ha AS ":"").idf_escape($A);$L[]=$d;if($Ha)$Jk[]=$d;}}$I=array();if(!support("table")){$L=array("*");$Jk=$L;}if($L){$_l=microtime(true);$G=driver()->select($a,$L,array($Z),$L,array(),(isset($_GET["select"])?2:1));$F=str_replace("SELECT ".implode(", ",$L),"SELECT ".implode(", ",$Jk),driver()->query);$qm=format_time($_l);if(!$G)$k=adminer()->error();else{$I=$G->fetch_assoc();if(!$I)$I=false;}if(isset($_GET["select"])&&(!$I||$G->fetch_assoc()))$I=null;}}if(!$m&&driver()->primary!=""){if(!$Z){$G=driver()->select($a,array("*"),array(),array("*"));$I=($G?$G->fetch_assoc():false);if(!$I)$I=array(driver()->primary=>"");}if($I){foreach($I as$w=>$W){if(!$Z)$I[$w]=null;$m[$w]=array("field"=>$w,"null"=>($w!=driver()->primary),"auto_increment"=>($w==driver()->primary));}}}if($_POST["save"]){$tj=array();foreach((array)$_POST["fields"]as$w=>$W)$tj[bracket_escape($w,true)]=$W;$I=$tj+($I?$I:array());}edit_form($a,$m,$I,$gn,$k,$F,$qm);}elseif(isset($_GET["create"])){function referencable_primary($Mk){$H=array();foreach(table_status('',true)as$Vl=>$Q){if($Vl!=$Mk&&!$Q["dependent"]&&fk_support($Q)){foreach(fields($Vl)as$l){if($l["primary"]){if($H[$Vl]){unset($H[$Vl]);break;}$H[$Vl]=$l;}}}}return$H;}$a=$_GET["create"];$Wi=driver()->partitionBy;$aj=($Wi&&$a!=""?driver()->partitionsInfo($a):array());$Vj=referencable_primary($a);$le=array();foreach($Vj as$Vl=>$l)$le[str_replace("`","``",$Vl)."`".str_replace("`","``",$l["field"])]=$Vl;$Ci=array();$R=array();$Ph=false;if($a!=""){$Ci=fields($a);$R=table_status1($a);$Ph=(count($R)<2);}$Aa=($a==""||driver()->supportsAlterTable($R));$I=$_POST;$I["fields"]=(array)$I["fields"];if($I["auto_increment_col"])$I["fields"][$I["auto_increment_col"]]["auto_increment"]=true;if($_POST&&!$k)save_settings(array("comments"=>$_POST["comments"],"defaults"=>$_POST["defaults"]));if($_POST&&!process_fields($I["fields"])&&!$k){if($_POST["drop"])queries_redirect(substr(ME,0,-1),lang(198),drop_tables(array($a)));else{$m=array();$za=array();$nn=false;$je=array();$Bi=reset($Ci);$va=" FIRST";foreach($I["fields"]as$l){$o=$le[$l["type"]];$Qm=($o!==null?$Vj[$o]:$l);if($l["field"]!=""){if(!$l["generated"])$l["default"]=null;$Jj=process_field($l,$Qm);$za[]=array($l["orig"],$Jj,$va);if(!$Bi||$Jj!==process_field($Bi,$Bi)){$m[]=array($l["orig"],$Jj,$va);if($l["orig"]!=""||$va)$nn=true;}if($o!==null)$je[idf_escape($l["field"])]=($a!=""&&JUSH!="sqlite"?"ADD":" ").format_foreign_key(array('table'=>$le[$l["type"]],'source'=>array($l["field"]),'target'=>array($Qm["field"]),'on_delete'=>$l["on_delete"],),object_name("FOREIGN",trim($I["name"]),array($l["field"])));$va=" AFTER ".idf_escape($l["field"]);}elseif($l["orig"]!=""){$nn=true;$m[]=array($l["orig"]);}if($l["orig"]!=""){$Bi=next($Ci);if(!$Bi)$va="";}}$Yi=array();if(in_array($I["partition_by"],$Wi)){foreach($I as$w=>$W){if(preg_match('~^partition~',$w))$Yi[$w]=$W;}foreach($Yi["partition_names"]as$w=>$A){if($A==""){unset($Yi["partition_names"][$w]);unset($Yi["partition_values"][$w]);}}$Yi["partition_names"]=array_values($Yi["partition_names"]);$Yi["partition_values"]=array_values($Yi["partition_values"]);if($Yi==$aj)$Yi=array();}elseif(preg_match("~partitioned~",$R["Create_options"]))$Yi=null;$ch=lang(199);if($a==""){cookie("adminer_engine",$I["Engine"]);$ch=lang(200);}$A=trim($I["name"]);$Eg=ME.(support("table")?"table=":"select=").url_escape($A);$G=alter_table($a,$A,(JUSH=="sqlite"&&($nn||$je)?$za:$m),$je,($I["Comment"]!=$R["Comment"]?$I["Comment"]:null),($I["Engine"]&&$I["Engine"]!=$R["Engine"]?$I["Engine"]:""),($I["Collation"]&&$I["Collation"]!=$R["Collation"]?$I["Collation"]:""),($I["Auto_increment"]!=""?number($I["Auto_increment"]):""),$Yi);if($G&&!Queries::$queries&&$a!=""&&!$m&&!$je)redirect($Eg);queries_redirect($Eg,$ch,$G);}}$Al=($a!=""?"alter":"create");page_header(($a!=""?lang(53):lang(86)),$k,array("table"=>$a),h($a),$Ph,doc_link(array('sql'=>"$Al-table.html",'mariadb'=>($a!=""?"$Al-table":""),'pgsql'=>"sql-$Al"."table.html",'cockroach'=>"$Al-table",'mssql'=>"t-sql/statements/$Al-table-transact-sql",'sqlite'=>"lang_{$Al}table.html",'oracle'=>"sqlrf/".strtoupper($Al)."-TABLE.html",)));if(!$_POST){$Um=driver()->types();$I=array("Engine"=>$_COOKIE["adminer_engine"],"fields"=>array(array("field"=>"","type"=>(isset($Um["int"])?"int":(isset($Um["integer"])?"integer":"")),"on_update"=>"")),"partition_names"=>array(""),);if($a!=""){$I=$R;$I["name"]=$a;$I["fields"]=array();if(!$_GET["auto_increment"])$I["Auto_increment"]="";foreach($Ci as$l){if($l["generated"])$l["default"]=ltrim($l["default"]);$l["generated"]=$l["generated"]?:(isset($l["default"])?"DEFAULT":"");$I["fields"][]=$l;}if($Wi){$I+=$aj;$I["partition_names"][]="";$I["partition_values"][]="";}}}$Eb=flat_collations();$qd=driver()->engines();foreach($qd as$pd){if(!strcasecmp($pd,$I["Engine"])){$I["Engine"]=$pd;break;}}$Ng=max_input_vars(12,20);if($Ng){$Ye=(count($I["fields"])>$Ng?"":" hidden");echo"".max_input_vars_error()."\n";}echo'

    ';if(support("columns")||$a==""){echo lang(201).": \n",(!$Aa?h($R["Engine"])."\n":($qd?html_select("Engine",array(""=>"(".lang(202).")")+$qd,$I["Engine"],on('change','helpClose').on_help_value())."\n":""));if($Eb)echo"".optionlist($Eb)."\n",(preg_match("~sqlite|mssql~",JUSH)?"":"\n");echo"\n";}if(support("columns")&&$Aa){echo"

    \n","\n";edit_fields($I["fields"],$Eb,"TABLE",$le);echo"
    \n",script("editFields();"),"
    \n

    \n",lang(60).": \n",checkbox("defaults",1,($_POST?$_POST["defaults"]:get_setting("defaults")),lang(203),on('click','columnShowClick',6),"jsonly");$Lb=($_POST?$_POST["comments"]:get_setting("comments"));if(support("comment")){echo checkbox("comments",1,$Lb,lang(59),on('click','editingCommentsClick',true),"jsonly").' ';$c=" name='Comment' data-maxlength='".(min_version(5.5)?2048:60)."'".($Lb?"":" class='hidden'");echo adminer()->commentInput('TABLE',$c,$I["Comment"]);}echo'

    ';}echo' ';if($a!="")echo' ';if($Wi&&(JUSH=='sql'||$a=="")){$Xi=preg_match('~RANGE|LIST~',$I["partition_by"]);print_fieldset("partition",lang(205),$I["partition_by"]);echo"

    ".html_select("partition_by",array_merge(array(""),$Wi),$I["partition_by"],on('change','partitionByChange').on_help_value('.','PARTITION BY $&'))."\n","()\n",lang(206).": \n","\n","\n";foreach($I["partition_names"]as$w=>$W)echo'','\n\n";}echo input_token(),'

    ';}elseif(isset($_GET["indexes"])){$a=$_GET["indexes"];$xf=array("PRIMARY","UNIQUE","INDEX");$R=table_status1($a,true);$uf=driver()->indexAlgorithms($R);if(preg_match('~MyISAM|M?aria'.(min_version(5.6,'10.0.5')?'|InnoDB':'').'~i',$R["Engine"]))$xf[]="FULLTEXT";if(preg_match('~MyISAM|M?aria'.(min_version(5.7,'10.2.2')?'|InnoDB':'').'~i',$R["Engine"]))$xf[]="SPATIAL";if(min_version('',11.7)&&preg_match('~MyISAM|InnoDB~i',$R["Engine"]))$xf[]="VECTOR";$v=indexes($a);$m=fields($a);$Cj=array();if(JUSH=="mongo"){$Cj=$v["_id_"];unset($xf[0]);unset($v["_id_"]);}$I=$_POST;if($I)save_settings(array("index_options"=>$I["options"]));if($_POST&&!$k&&!$_POST["add"]&&!$_POST["drop_col"]){$b=array();foreach($I["indexes"]as$u){$A=$u["name"];if(in_array($u["type"],$xf)){$e=array();$wg=array();$Hc=array();$pi=array();$vf=(support("partial_indexes")?$u["partial"]:"");$tf=(in_array($u["algorithm"],$uf)?$u["algorithm"]:"");$N=array();ksort($u["columns"]);foreach($u["columns"]as$w=>$d){if($d!=""){$x=idx($u["lengths"],$w);$Fc=idx($u["descs"],$w);$oi=idx($u["opclasses"],$w);$N[]=($m[$d]?idf_escape($d):$d).($x?"(".(+$x).")":"").($oi!=""?" ".idf_escape($oi):"").($Fc?" DESC":"");$e[]=$d;$wg[]=($x?:null);$Hc[]=$Fc;$pi[]="$oi";}}$Dd=$v[$A];if($Dd){ksort($Dd["columns"]);ksort($Dd["lengths"]);ksort($Dd["descs"]);if($u["type"]==$Dd["type"]&&array_values($Dd["columns"])===$e&&(!$Dd["lengths"]||array_values($Dd["lengths"])===$wg)&&array_values($Dd["descs"])===$Hc&&(!$Dd["opclasses"]||array_values($Dd["opclasses"])===$pi)&&$Dd["partial"]==$vf&&(!$uf||$Dd["algorithm"]==$tf)){unset($v[$A]);continue;}}if($e)$b[]=array($u["type"],$A,$N,$tf,$vf);}}foreach($v as$A=>$Dd)$b[]=array($Dd["type"],$A,"DROP");if(!$b)redirect(ME."table=".url_escape($a));queries_redirect(ME."table=".url_escape($a),lang(209),alter_indexes($a,$b));}page_header(lang(156),$k,array("table"=>$a),h($a),false,doc_link(array('sql'=>"create-index.html",'pgsql'=>"sql-createindex.html",'cockroach'=>"create-index",'mssql'=>"t-sql/statements/create-index-transact-sql",'sqlite'=>"lang_createindex.html",'oracle'=>"sqlrf/CREATE-INDEX.html",)));$Ud=array_keys($m);if($_POST["add"]){foreach($I["indexes"]as$w=>$u){if($u["columns"][count($u["columns"])]!="")$I["indexes"][$w]["columns"][]="";}$u=end($I["indexes"]);if($u["type"]||array_filter($u["columns"],'strlen'))$I["indexes"][]=array("columns"=>array(1=>""));}if(!$I){foreach($v as$w=>$u){$v[$w]["name"]=$w;$v[$w]["columns"][]="";}$v[]=array("columns"=>array(1=>""));$I["indexes"]=$v;}$wg=(JUSH=="sql"||JUSH=="mssql");$pi=driver()->indexOpclasses();$gl=($_POST?$_POST["options"]:get_setting("index_options"));$zh=array();foreach($xf as$T)$zh[$T]=str_replace("{table}",$a,adminer()->namePattern($T));echo'
    ';if($Cj){echo"
    ',lang(210);$mf=" class='idxopts".($gl?"":" hidden")."'";if($uf)echo"".lang(211).doc_link(array('sql'=>'create-index.html#create-index-storage-engine-index-types','mariadb'=>'storage-engine-index-types/','pgsql'=>'indexes-types.html','cockroach'=>'create-index#parameters',));echo'',lang(212).($wg?" (".lang(213).")":"");if($wg||support("descidx"))echo checkbox("options",1,$gl,lang(130),on('click','indexOptionsShow'),"jsonly")."\n";echo'',lang(214);if(support("partial_indexes"))echo"".lang(215);echo'
    PRIMARY";foreach($Cj["columns"]as$w=>$d)echo select_input(" disabled",array_combine($Ud,$Ud),$d)," ";echo"\n";}$Xf=1;foreach($I["indexes"]as$u){if(!$_POST["drop_col"]||$Xf!=key($_POST["drop_col"])){echo"
    ".html_select("indexes[$Xf][type]",array(-1=>"")+$xf,$u["type"],on('change','indexesChangeType',$zh),"label-type");if($uf)echo"".html_select("indexes[$Xf][algorithm]",array_merge(array(""),$uf),$u['algorithm'],"","label-algorithm");echo"";ksort($u["columns"]);$r=1;foreach($u["columns"]as$w=>$d){echo"".select_input(" name='indexes[$Xf][columns][$r]' title='".lang(57)."'".on('change','indexesChangeColumn',$zh),($m&&($d==""||$m[$d])?array_combine($Ud,$Ud):array()),$d)," ",($wg?"":"");if($pi){$oi=idx($u["opclasses"],$w);echo html_select("indexes[$Xf][opclasses][$r]",array(""=>"(".lang(216).")")+array_combine($pi,$pi)+($oi!=""?array($oi=>$oi):array()),$oi),doc_link(array('pgsql'=>'indexes-opclass.html'));}echo(support("descidx")?checkbox("indexes[$Xf][descs][$r]",1,idx($u["descs"],$w),lang(68)):""),"
    ","
    ";$r++;}echo"
    \n";if(support("partial_indexes"))echo"\n";echo"".icon("cross","drop_col[$Xf]","x",lang(133),on('click','editingRemoveRow','indexes$1[type]'));}$Xf++;}echo'

    ',input_token(),'

    ';}elseif(isset($_GET["database"])){$I=$_POST;if($_POST&&!$k&&!$_POST["add"]){$A=trim($I["name"]);if($_POST["drop"]){$_GET["db"]="";queries_redirect(remove_from_uri("db|database"),lang(217),drop_databases(array(DB)));}elseif($A!==DB){if(DB!=""){$_GET["db"]=$A;queries_redirect(preg_replace('~\bdb=[^&]*&~','',ME)."db=".url_escape($A),lang(218),rename_database($A,(string)$I["collation"]));}else{$h=explode("\n",str_replace("\r","",$A));$Hl=true;$ng="";foreach($h as$i){if(count($h)==1||$i!=""){if(!create_database($i,(string)$I["collation"]))$Hl=false;$ng=$i;}}restart_session();set_session("dbs",null);queries_redirect(preg_replace('~&db=[^&]*~','',ME)."db=".url_escape($ng),lang(219),$Hl);}}else{if(!$I["collation"])redirect(substr(ME,0,-1));query_redirect("ALTER DATABASE ".idf_escape($A).(preg_match('~^[a-z0-9_]+$~i',$I["collation"])?" COLLATE $I[collation]":""),substr(ME,0,-1),lang(220));}}$Al=(DB!=""?"alter":"create");page_header(DB!=""?lang(76):lang(137),$k,array(),h(DB),false,doc_link(array('sql'=>"$Al-database.html",'mariadb'=>(DB!=""?"":"$Al-database"),'pgsql'=>"sql-$Al"."database.html",'cockroach'=>"$Al-database",'mssql'=>"t-sql/statements/$Al-database-transact-sql",'oracle'=>"sqlrf/".strtoupper($Al)."-USER.html",)));$Eb=collations();$A=DB;if($_POST)$A=$I["name"];elseif(DB!="")$I["collation"]=db_collation(DB,$Eb);elseif(JUSH=="sql"){foreach(get_vals("SHOW GRANTS")as$Ae){if(preg_match('~ ON (`(([^\\\\`]|``|\\\\.)*)%`\.\*)?~',$Ae,$_)&&$_[1]){$A=stripcslashes(idf_unescape("`$_[2]`"));break;}}}echo'

    ',($_POST["add"]||strpos($A,"\n")?'
    ':'')."\n",($Eb?html_select("collation",array(""=>"(".lang(124).")")+$Eb,$I["collation"]).doc_link(array('sql'=>"charset-charsets.html",'mariadb'=>"supported-character-sets-and-collations/",'mssql'=>"relational-databases/system-functions/sys-fn-helpcollations-transact-sql",)):"")."\n",' ';if(DB!="")echo"\n";elseif(!$_POST["add"]&&$_GET["db"]=="")echo icon("plus","add[0]","+",lang(131))."\n";echo input_token(),'

    ';}elseif(isset($_GET["scheme"])){$I=$_POST;if($_POST&&!$k){$z=preg_replace('~ns=[^&]*&~','',ME)."ns=";if($_POST["drop"])query_redirect("DROP SCHEMA ".idf_escape($_GET["ns"]),$z,lang(221));else{$A=trim($I["name"]);$z .=url_escape($A);if($_GET["ns"]=="")query_redirect("CREATE SCHEMA ".idf_escape($A),$z,lang(222));elseif($_GET["ns"]!=$A)query_redirect("ALTER SCHEMA ".idf_escape($_GET["ns"])." RENAME TO ".idf_escape($A),$z,lang(223));else redirect($z);}}$Al=($_GET["ns"]!=""?"alter":"create");page_header($_GET["ns"]!=""?lang(77):lang(78),$k,array(),"",false,doc_link(array('pgsql'=>"sql-$Al"."schema.html",'cockroach'=>"$Al-schema",'mssql'=>"t-sql/statements/create-schema-transact-sql",)));if(!$I)$I["name"]=$_GET["ns"];echo'

    ';if($_GET["ns"]!="")echo"\n";echo input_token(),'

    ';}elseif(isset($_GET["call"])){$ca=($_GET["name"]?:$_GET["call"]);$uk=(isset($_GET["callf"])?"FUNCTION":"PROCEDURE");$pk=routine($_GET["call"],$uk);page_header(lang(224).": ".h($ca),$k,"#routines","",!$pk,(isset($_GET["callf"])?"":doc_link(array('sql'=>"call.html",'pgsql'=>"sql-call.html",'cockroach'=>"call",'mssql'=>"t-sql/language-elements/execute-transact-sql",))));$pf=array();$Ii=array();foreach($pk["fields"]as$r=>$l){if(substr($l["inout"],-3)=="OUT"&&JUSH=='sql')$Ii[$r]="@".idf_escape($l["field"])." AS ".idf_escape($l["field"]);if(!$l["inout"]||preg_match('~^(IN|OUTPUT)~',$l["inout"]))$pf[]=$r;}if(!$k&&$_POST){$jb=array();foreach($pk["fields"]as$w=>$l){$W="";if(in_array($w,$pf)){$W=process_input($l);if($W===false)$W="''";if(isset($Ii[$w]))connection()->query("SET @".idf_escape($l["field"])." = $W");}if(isset($Ii[$w]))$jb[]="@".idf_escape($l["field"]);elseif(in_array($w,$pf))$jb[]=$W;}$Fa=implode(", ",$jb);$F=(isset($_GET["callf"])||JUSH!="mssql"?(isset($_GET["callf"])?"SELECT ":"CALL ").(idx($pk["returns"],"type")=="record"?"* FROM ":"").table($ca)."($Fa)":"EXEC ".table($ca).($Fa!=""?" $Fa":""));$_l=microtime(true);$G=connection()->multi_query($F);$ta=connection()->affected_rows;echo adminer()->selectQuery($F,$_l,!$G);if(!$G)echo"

    ".adminer()->error()."\n";else{$g=connect();if($g)$g->select_db(DB);do{$G=connection()->store_result();if(is_object($G))print_select_result($G,$g);else echo"

    ".lang(225,$ta)." ".@date("H:i:s")."\n";}while(connection()->next_result());if($Ii)print_select_result(connection()->query("SELECT ".implode(", ",$Ii)));}}echo'

    ';if($pf){echo"\n";foreach($pf as$w){$l=$pk["fields"][$w];$A=$l["field"];echo"
    ".adminer()->fieldName($l);$X=idx($_POST["fields"],$A);if($X!=""){if($l["type"]=="set")$X=implode(",",$X);}input($l,$X,idx($_POST["function"],$A,""));echo"\n";}echo"
    \n";}echo'

    ',input_token(),'

    ',adminer()->commentValue($uk,$pk['comment']);}elseif(isset($_GET["foreign"])){$a=$_GET["foreign"];$A=$_GET["name"];$I=$_POST;if($_POST&&!$k&&!$_POST["add"]&&!$_POST["change"]&&!$_POST["change-js"]){if(!$_POST["drop"]){$I["source"]=array_filter($I["source"],'strlen');ksort($I["source"]);$hm=array();foreach($I["source"]as$w=>$W)$hm[$w]=$I["target"][$w];$I["target"]=$hm;}$Ub=object_name("FOREIGN",$a,$I["source"]);if(JUSH=="sqlite")$G=recreate_table($a,$a,array(),array(),array(" $A"=>($I["drop"]?"":" ".format_foreign_key($I,$Ub))));else{$b="ALTER TABLE ".table($a);$G=($A==""||queries("$b DROP ".(JUSH=="sql"?"FOREIGN KEY ":"CONSTRAINT ").idf_escape($A)));if(!$I["drop"])$G=queries("$b ADD".format_foreign_key($I,$Ub));}queries_redirect(ME."table=".url_escape($a),($I["drop"]?lang(226):($A!=""?lang(227):lang(228))),$G);if(!$I["drop"])$k=lang(229);}$Ph=false;if(!$_POST&&$A!=""){$le=foreign_keys($a);$I=idx($le,$A,array());$Ph=!$I;}page_header(($A!=""?lang(230):lang(161)),$k,array("table"=>$a),h($A!=""?$A:$a),$Ph,doc_link(array('sql'=>"innodb-foreign-key-constraints.html",'mariadb'=>"foreign-keys/",'pgsql'=>"sql-createtable.html#SQL-CREATETABLE-PARMS-REFERENCES",'cockroach'=>"foreign-key",'mssql'=>"t-sql/statements/create-table-transact-sql",'oracle'=>"sqlrf/constraint.html",)));if($_POST){ksort($I["source"]);if($_POST["change"]||$_POST["change-js"])$I["target"]=array();else$I["source"][]="";}elseif($A!="")$I["source"][]="";else{$I["table"]=$a;$I["source"]=array("");}echo'
    ';$pl=array_keys(fields($a));if($I["db"]!="")connection()->select_db($I["db"]);if($I["ns"]!=""){$Di=get_schema();set_schema($I["ns"]);}$Uj=array_keys(array_filter(table_status('',true),function(array$R){return!$R["dependent"]&&fk_support($R);}));$hm=array_keys(fields(in_array($I["table"],$Uj)?$I["table"]:reset($Uj)));$c=on('change','foreignChange');echo"

    \n";if(support("scheme")){$Ak=array_filter(adminer()->schemas(),function($K){return!information_schema(DB,$K);});echo"";if($I["ns"]!="")set_schema($Di);}elseif(JUSH!="sqlite"){$xc=array();foreach(adminer()->databases()as$i){if(!information_schema($i))$xc[]=$i;}echo"";}echo input_hidden("change-js"),'

    ';$Xf=0;foreach($I["source"]as$w=>$W){echo"","
    ',lang(158),'',lang(159),'
    ".html_select("source[".(+$w)."]",array(-1=>"")+$pl,$W,($Xf==count($I["source"])-1?on('change','foreignAddRow'):""),"label-source"),"".html_select("target[".(+$w)."]",$hm,idx($I["target"],$w),"","label-target");$Xf++;}echo'

    ',(support("deferrable")?html_select("deferrable",array('NOT DEFERRABLE','DEFERRABLE','DEFERRABLE INITIALLY DEFERRED'),$I["deferrable"]):''),'

    ';if($A!="")echo' ';echo input_token(),'

    ';}elseif(isset($_GET["view"])){$a=$_GET["view"];$I=$_POST;$Ei="VIEW";if(JUSH=="pgsql"&&$a!=""){$O=table_status1($a);$Ei=strtoupper($O["Engine"]);}if($_POST&&!$k){$A=trim($I["name"]);$Ha=" AS\n$I[select]";$Eg=ME."table=".url_escape($A);$ch=lang(234);$T=($_POST["materialized"]?"MATERIALIZED VIEW":"VIEW");if(!$_POST["drop"]&&$a==$A&&JUSH!="sqlite"&&$T=="VIEW"&&$Ei=="VIEW")query_redirect((JUSH=="mssql"?"ALTER":"CREATE OR REPLACE")." VIEW ".table($A).$Ha,$Eg,$ch);else{$lm="adminer_".uniqid();drop_create("DROP $Ei ".table($a),"CREATE $T ".table($A).$Ha,"DROP $T ".table($A),"CREATE $T ".table($lm).$Ha,"DROP $T ".table($lm),($_POST["drop"]?substr(ME,0,-1):$Eg),lang(235),$ch,lang(236),$a,$A);}}$Ph=false;if(!$_POST&&$a!=""){$I=view($a);$Ph=!$I["select"];$I["name"]=$a;$I["materialized"]=($Ei!="VIEW");if(!$k)$k=adminer()->error();}page_header(($a!=""?lang(52):lang(237)),$k,array("table"=>$a),h($a),$Ph,doc_link(array('sql'=>"create-view.html",'pgsql'=>"sql-createview.html",'cockroach'=>"create-view",'mssql'=>"t-sql/statements/create-view-transact-sql",'sqlite'=>"lang_createview.html",'oracle'=>"sqlrf/CREATE-VIEW.html",)));echo'

    ',lang(214),': ',(support("materializedview")?" ".checkbox("materialized",1,$I["materialized"],lang(152)):""),'

    ';textarea("select",$I["select"]);echo'

    ';if($a!="")echo' ';echo input_token(),'

    ';}elseif(isset($_GET["event"])){$aa=$_GET["event"];$Kf=array("YEAR","QUARTER","MONTH","DAY","HOUR","MINUTE","WEEK","SECOND","YEAR_MONTH","DAY_HOUR","DAY_MINUTE","DAY_SECOND","HOUR_MINUTE","HOUR_SECOND","MINUTE_SECOND");$Cl=array("ENABLED"=>"ENABLE","DISABLED"=>"DISABLE","SLAVESIDE_DISABLED"=>"DISABLE ON SLAVE");$I=$_POST;if($_POST&&!$k){if($_POST["drop"])query_redirect("DROP EVENT ".idf_escape($aa),substr(ME,0,-1),lang(238));elseif(in_array($I["INTERVAL_FIELD"],$Kf)&&isset($Cl[$I["STATUS"]])){$zk="\nON SCHEDULE ".($I["INTERVAL_VALUE"]?"EVERY ".q($I["INTERVAL_VALUE"])." $I[INTERVAL_FIELD]".($I["STARTS"]?" STARTS ".q($I["STARTS"]):"").($I["ENDS"]?" ENDS ".q($I["ENDS"]):""):"AT ".q($I["STARTS"]))." ON COMPLETION".($I["ON_COMPLETION"]?"":" NOT")." PRESERVE";queries_redirect(substr(ME,0,-1),($aa!=""?lang(239):lang(240)),queries(($aa!=""?"ALTER EVENT ".idf_escape($aa).$zk.($aa!=$I["EVENT_NAME"]?"\nRENAME TO ".idf_escape($I["EVENT_NAME"]):""):"CREATE EVENT ".idf_escape($I["EVENT_NAME"]).$zk)."\n".$Cl[$I["STATUS"]]." COMMENT ".q($I["EVENT_COMMENT"]).rtrim(" DO\n$I[EVENT_DEFINITION]",";").";"));}}$Ph=false;if(!$I&&$aa!=""){$J=get_rows("SELECT * FROM information_schema.EVENTS WHERE EVENT_SCHEMA = ".q(DB)." AND EVENT_NAME = ".q($aa));$Ph=!$J;$I=reset($J);}page_header(($aa!=""?lang(241).": ".h($aa):lang(242)),$k,"#events","",$Ph,doc_link(array('sql'=>"create-event.html")));echo'
    ',lang(214),'
    ',lang(243),'
    ',lang(244),'
    ',lang(245),' ',html_select("INTERVAL_FIELD",$Kf,$I["INTERVAL_FIELD"]),'
    ',lang(140),'',html_select("STATUS",$Cl,$I["STATUS"]),'
    ',lang(59),'
    ',checkbox("ON_COMPLETION","PRESERVE",$I["ON_COMPLETION"]=="PRESERVE",lang(246)),'

    ';textarea("EVENT_DEFINITION",$I["EVENT_DEFINITION"]);echo'

    ';if($aa!="")echo' ';echo input_token(),'

    ';}elseif(isset($_GET["procedure"])){$ca=($_GET["name"]?:$_GET["procedure"]);$pk=(isset($_GET["function"])?"FUNCTION":"PROCEDURE");$I=$_POST;$I["fields"]=(array)$I["fields"];if($_POST&&!process_fields($I["fields"])&&!$k){foreach($I["fields"]as$w=>$l){if($l["field"]=="")unset($I["fields"][$w]);}$hi=routine($_GET["procedure"],$pk);$fi=($hi?routine_id($ca,$hi):"");$Gh=routine_id($I["name"],$I);$gc=create_routine($pk,$I);$Eg=substr(ME,0,-1);$ch=lang(247);if(!$_POST["drop"]&&$fi==$Gh&&connection()->flavor!="mysql")queries_redirect($Eg,$ch,queries(substr_replace($gc,(JUSH=="mssql"?' OR ALTER':' OR REPLACE'),6,0)));else{$lm="adminer_".uniqid();drop_create("DROP $pk $fi",$gc,"DROP $pk $Gh",create_routine($pk,array("name"=>$lm)+$I),"DROP $pk ".routine_id($lm,$I),$Eg,lang(248),$ch,lang(249),$ca,$I["name"]);}}$Ph=false;if(!$_POST&&$ca!=""){$I=routine($_GET["procedure"],$pk);$Ph=!$I;$I["name"]=$ca;}$sk=strtolower($pk);page_header(($ca!=""?(isset($_GET["function"])?lang(165):lang(250)).": ".h($ca):(isset($_GET["function"])?lang(251):lang(252))),$k,"#routines","",$Ph,doc_link(array('sql'=>"create-procedure.html",'mariadb'=>"create-$sk/",'pgsql'=>"sql-create$sk.html",'cockroach'=>"create-$sk",'mssql'=>"t-sql/statements/create-$sk-transact-sql",)));if(!$_POST&&$ca=="")$I["language"]="sql";$Eb=(JUSH=="sql"?flat_collations():array());$qk=routine_languages();echo($Eb?"".optionlist($Eb)."":""),'

    ',lang(214),': ',($qk?"\n":""),'

    ';edit_fields($I["fields"],$Eb,$pk);if(isset($_GET["function"])){echo"
    ".lang(253);edit_type("returns",(array)$I["returns"],$Eb,array(),(JUSH=="pgsql"?array("void","trigger"):array()));}echo'
    ',script("editFields();"),'

    ';textarea("definition",$I["definition"],20,80,($qk[$I["language"]]?:JUSH));echo'

    ';if($ca!="")echo' ';$tk=routine_options($pk);if($tk){$ui=false;foreach($tk as$w=>$Y){$j=($Y?reset($Y):"");$I["options"][$w]=idx($I["options"],$w,$j);if($I["options"][$w]!=$j)$ui=true;}print_fieldset("options",lang(130),$ui);echo"\n";foreach($tk as$w=>$Y){$ig="label-option-$w";$tm=str_replace("_"," ",$w);$L=array();foreach($Y as$X)$L[$X]=(strpos($X,"$tm ")===0?substr($X,strlen($tm)+1):$X);echo"
    $tm".($L?html_select("options[$w]",$L,$I["options"][$w],"",$ig):"")."\n";}echo"
    \n\n";}echo input_token(),'

    ';}elseif(isset($_GET["sequence"])){$ea=$_GET["sequence"];$I=$_POST;if($_POST&&!$k){$z=substr(ME,0,-1);$A=trim($I["name"]);if($_POST["drop"])query_redirect("DROP SEQUENCE ".idf_escape($ea),$z,lang(254));elseif($ea=="")query_redirect("CREATE SEQUENCE ".idf_escape($A),$z,lang(255));elseif($ea!=$A)query_redirect("ALTER SEQUENCE ".idf_escape($ea)." RENAME TO ".idf_escape($A),$z,lang(256));else redirect($z);}$Ph=(!$_POST&&$ea!=""&&!get_val("SELECT relname FROM pg_class WHERE relkind = 'S' AND relnamespace = ".driver()->nsOid." AND relname = ".q($ea)));page_header(($ea!=""?lang(257).": ".h($ea):lang(258)),$k,"#sequences","",$Ph,doc_link(array('pgsql'=>"sql-createsequence.html",'cockroach'=>"create-sequence",)));if(!$I)$I["name"]=$ea;echo'

    ';if($ea!="")echo"\n";echo input_token(),'

    ';}elseif(isset($_GET["type"])){function enum_values($Cc){$X="'(?:[^']|'')*'";if(!preg_match('~^AS\s+ENUM\s*\(\s*('.$X.'(?:\s*,\s*'.$X.')*)\s*\)$~i',$Cc,$_))return null;preg_match_all('~'.$X.'~',$_[1],$Kg);return$Kg[0];}function add_enum_values($T,$di,$Eh){$ji=enum_values($di);$Lh=enum_values($Eh);if($ji===null||$Lh===null)return null;$H=array();$r=0;foreach($Lh as$X){if($X===idx($ji,$r))$r++;else$H[]="ALTER TYPE ".idf_escape($T)." ADD VALUE $X".($r"sql-createtype.html",'cockroach'=>"create-type",)));if(!$I){$I["name"]=$fa;$I["as"]=($fa!=""?$T["definition"]:"AS ");}echo'

    ',lang(214).": \n";textarea("as",$I["as"]);echo"

    \n";if($fa!="")echo"\n";echo input_token(),'

    ';}elseif(isset($_GET["check"])){$a=$_GET["check"];$A="$_GET[name]";$I=$_POST;if($I&&!$k){$Eg=ME."table=".url_escape($a);$fh=lang(264);$dh=lang(265);$eh=lang(266);if(JUSH=="sqlite")queries_redirect($Eg,($I["drop"]?$fh:($A!=""?$dh:$eh)),recreate_table($a,$a,array(),array(),array(),"",array(),"$A",($I["drop"]?"":$I["clause"])));else{$b="ALTER TABLE ".table($a);$qb=" CHECK ($I[clause])";$lm="adminer_".uniqid();drop_create("$b DROP CONSTRAINT ".idf_escape($A),"$b ADD".($I["name"]!=""?" CONSTRAINT ".idf_escape($I["name"]):"").$qb,"$b DROP CONSTRAINT ".idf_escape($I["name"]),"$b ADD CONSTRAINT ".idf_escape($lm).$qb,"$b DROP CONSTRAINT ".idf_escape($lm),$Eg,$fh,$dh,$eh,$A,$I["name"]);}}$Ph=false;if(!$I){$ub=driver()->checkConstraints($a);$Ph=($A!=""&&!$ub[$A]);$I=array("name"=>($A!=""?$A:object_name("CHECK",$a,array())),"clause"=>$ub[$A]);}page_header(($A!=""?lang(267):lang(163)),$k,array("table"=>$a),h($A!=""?$A:$a),$Ph,doc_link(array('sql'=>"create-table-check-constraints.html",'mariadb'=>"constraint/",'pgsql'=>"ddl-constraints.html#DDL-CONSTRAINTS-CHECK-CONSTRAINTS",'cockroach'=>"check",'mssql'=>"relational-databases/tables/create-check-constraints",'sqlite'=>"lang_createtable.html#check_constraints",)));echo'
    ';if(JUSH!="sqlite")echo'

    '.lang(214).': ';echo'

    ';textarea("clause",$I["clause"]);echo'

    ';if($A!="")echo' ';echo input_token(),'

    ';}elseif(isset($_GET["trigger"])){$a=$_GET["trigger"];$A="$_GET[name]";$Mm=trigger_options();$I=trigger($A,$a);$Ph=($A!=""&&!$I);$yh=str_replace("{table}",$a,adminer()->namePattern("TRIGGER"));$I+=array("Trigger"=>strtr($yh,array("{timing}"=>"b","{event}"=>"i","{columns}"=>"","{type}"=>"row")));if($_POST){if(!$k&&in_array($_POST["Timing"],$Mm["Timing"])&&in_array($_POST["Event"],$Mm["Event"])&&in_array($_POST["Type"],$Mm["Type"])){$ki=" ON ".table($a);$Zc="DROP TRIGGER ".idf_escape($A).(JUSH=="pgsql"?$ki:"");$Eg=ME."table=".url_escape($a);if($_POST["drop"])query_redirect($Zc,$Eg,lang(268));else{if($A!="")queries($Zc);queries_redirect($Eg,($A!=""?lang(269):lang(270)),queries(create_trigger($ki,$_POST)));if($A!="")queries(create_trigger($ki,$I+array("Type"=>reset($Mm["Type"]))));}}$I=$_POST;}page_header(($A!=""?lang(271):lang(166)),$k,array("table"=>$a),h($A!=""?$A:$a),$Ph,doc_link(array('sql'=>"create-trigger.html",'pgsql'=>"sql-createtrigger.html",'cockroach'=>"create-trigger",'mssql'=>"t-sql/statements/create-trigger-transact-sql",'sqlite'=>"lang_createtrigger.html",'oracle'=>"lnpls/CREATE-TRIGGER-statement.html",)));$Ah=strtr(preg_quote($yh),array('\{timing\}'=>'[abi]','\{event\}'=>'[iud]*','\{columns\}'=>'.*','\{type\}'=>'(row|statement)'));$Km=on('change','triggerChange',"^$Ah$",$yh);$Xh=on('input','triggerChange',"^$Ah$",$yh);echo'
    ',lang(272),'',html_select("Timing",$Mm["Timing"],$I["Timing"],$Km),'
    ',lang(273),'',html_select("Event",$Mm["Event"],$I["Event"],$Km),(in_array("UPDATE OF",$Mm["Event"])?" ":""),'
    ',lang(58),'',html_select("Type",$Mm["Type"],$I["Type"],$Km),'
    ',lang(214),'
    ',script("fire(qs('#form')['Timing'], 'change');"),'

    ';textarea("Statement",$I["Statement"]);echo'

    ';if($A!="")echo' ';echo input_token(),'

    ';}elseif(isset($_GET["user"])){function grant($Ae,array$Hj,$e,$ki){if(!$Hj)return true;if($Hj==array("ALL PRIVILEGES","GRANT OPTION"))return($Ae=="GRANT"?queries("$Ae ALL PRIVILEGES$ki WITH GRANT OPTION"):queries("$Ae ALL PRIVILEGES$ki")&&queries("$Ae GRANT OPTION$ki"));return queries("$Ae ".preg_replace('~(GRANT OPTION)\([^)]*\)~','\1',implode("$e, ",$Hj).$e).$ki);}$ga=$_GET["user"];$Hj=array(""=>array("All privileges"=>""));foreach(get_rows("SHOW PRIVILEGES")as$I){foreach(explode(",",($I["Privilege"]=="Grant option"?"":$I["Context"]))as$Zb)$Hj[$Zb=="File access on server"?"Server Admin":$Zb][$I["Privilege"]]=$I["Comment"];}unset($Hj["Server Admin"]["Usage"]);foreach($Hj["Tables"]as$w=>$W)unset($Hj["Databases"][$w]);$Fh=array();if($_POST){foreach($_POST["objects"]as$w=>$W)$Fh[$W]=(array)$Fh[$W]+idx($_POST["grants"],$w,array());}$Be=array();$G=(isset($_GET["host"])?connection()->query("SHOW GRANTS FOR ".q($ga)."@".q($_GET["host"])):null);$Ph=(isset($_GET["host"])&&!$G);if($G){while($I=$G->fetch_row()){if(preg_match('~GRANT (.*) ON (.*) TO ~',$I[0],$_)&&preg_match_all('~ *([^(,]*[^ ,(])( *\([^)]+\))?~',$_[1],$Kg,PREG_SET_ORDER)){foreach($Kg as$W){if($W[1]!="USAGE")$Be["$_[2]$W[2]"][$W[1]]=true;if(preg_match('~ WITH GRANT OPTION~',$I[0]))$Be["$_[2]$W[2]"]["GRANT OPTION"]=true;}}}}if($_POST&&!$k){$ii=(isset($_GET["host"])?q($ga)."@".q($_GET["host"]):"''");if($_POST["drop"])query_redirect("DROP USER $ii",ME."privileges=",lang(274));else{$Kh=q($_POST["user"])."@".q($_POST["host"]);$cj=$_POST["pass"];$ic=false;$G=true;if($ii!=$Kh){$ic=queries("CREATE USER $Kh IDENTIFIED BY ".($_POST["hashed"]?"PASSWORD ":"").q($cj));$G=$ic;}elseif($cj!="")$G=queries("SET PASSWORD FOR $Kh = ".(min_version(8,99)||$_POST["hashed"]?q($cj):"PASSWORD(".q($cj).")"));if($G){$lk=array();foreach($Fh as$Uh=>$Ae){if(isset($_GET["grant"]))$Ae=array_filter($Ae);$Ae=array_keys($Ae);if(isset($_GET["grant"]))$lk=array_diff(array_keys(array_filter($Fh[$Uh],'strlen')),$Ae);elseif($ii==$Kh){$ei=array_keys((array)$Be[$Uh]);$lk=array_diff($ei,$Ae);$Ae=array_diff($Ae,$ei);unset($Be[$Uh]);}if(preg_match('~^(.+)\s*(\(.*\))?$~U',$Uh,$_)&&(!grant("REVOKE",$lk,$_[2]," ON $_[1] FROM $Kh")||!grant("GRANT",$Ae,$_[2]," ON $_[1] TO $Kh"))){$G=false;break;}}}if($G&&isset($_GET["host"])){if($ii!=$Kh)queries("DROP USER $ii");elseif(!isset($_GET["grant"])){foreach($Be as$Uh=>$lk){if(preg_match('~^(.+)(\(.*\))?$~U',$Uh,$_))grant("REVOKE",array_keys($lk),$_[2]," ON $_[1] FROM $Kh");}}}if($G&&!Queries::$queries)redirect(ME."privileges=");queries_redirect(ME."privileges=",(isset($_GET["host"])?lang(275):lang(276)),$G);if($ic)connection()->query("DROP USER $Kh");}}page_header((isset($_GET["host"])?lang(42).": ".h("$ga@$_GET[host]"):lang(174)),$k,array("privileges"=>array('',lang(80))),"",$Ph,doc_link(array('sql'=>"grant.html",'mariadb'=>"grant")));$I=$_POST;if($I)$Be=$Fh;else{$I=$_GET+array("host"=>get_val("SELECT SUBSTRING_INDEX(CURRENT_USER, '@', -1)"));$Be[(DB==""||$Be?"":idf_escape(addcslashes(DB,"%_\\"))).".*"]=array();}echo'
    ',lang(40),'
    ',lang(42),'
    ',lang(43),' ',($I["hashed"]?"":script("typePassword(qs('#pass'));")),(min_version(8,99)?"":checkbox("hashed",1,$I["hashed"],lang(277),on('click','hashedClick'))),'
    ',"\n","\n";foreach(array(""=>"","Server Admin"=>lang(40),"Databases"=>lang(44),"Tables"=>lang(154),"Procedures"=>lang(278),)as$Zb=>$Fc){foreach((array)$Hj[$Zb]as$Gj=>$Jb){echo"$Fc'.h($Gj);$r=0;foreach($Be as$Uh=>$Ae){$A="'grants[$r][".h(strtoupper($Gj))."]'";$X=$Ae[strtoupper($Gj)];if($Zb=="Server Admin"&&$Uh!=(isset($Be["*.*"])?"*.*":".*"))echo"
    ".lang(80);$r=0;foreach($Be as$Uh=>$Ae){echo''.($Uh!="*.*"?"":input_hidden("objects[$r]","*.*")."*.*");$r++;}echo"
    ";elseif(isset($_GET["grant"]))echo"";else echo"";$r++;}}}echo"
    \n",'

    ';if(isset($_GET["host"]))echo' ';echo input_token(),'

    ';}elseif(isset($_GET["processlist"])){if(support("kill")){if($_POST&&!$k){$fg=0;foreach((array)$_POST["kill"]as$W){if(adminer()->killProcess($W))$fg++;}queries_redirect(ME."processlist=",lang(281,$fg),$fg||!$_POST["kill"]);}}page_header(lang(138),$k);echo'
    ';$r=-1;foreach(adminer()->processList()as$r=>$I){if(!$r){echo"".(support("kill")?"\n";}echo"".(support("kill")?"
    ":"");foreach($I as$w=>$W)echo"$w".doc_link(array('sql'=>"show-processlist.html#processlist_".strtolower($w),'pgsql'=>"monitoring-stats.html#PG-STAT-ACTIVITY-VIEW",'oracle'=>"refrn/V-SESSION.html",));echo"
    ".checkbox("kill[]",$I[JUSH=="sql"?"Id":"pid"],0):"");foreach($I as$w=>$W)echo"".($W!=""&&((JUSH=="sql"&&$w=="Info"&&preg_match("~Query|Killed~",$I["Command"]))||(JUSH=="pgsql"&&$w=="query")||(JUSH=="oracle"&&$w=="sql_text"))?"".shorten_utf8($W,100,"").' '.lang(282).''.' '.copy_icon():h($W));echo"\n";}echo'

    ',script("copyCode(qsl('table'));");if(support("kill"))echo format_number($r+1)."/".lang(283,max_connections()),"

    \n";echo input_token(),'

    ',script("tableCheck();");}elseif($_GET["select"]!=""){$a=$_GET["select"];$R=table_status1($a);$v=indexes($a);$m=fields($a);$le=column_foreign_keys($a);$ci=$R["Oid"];$nk=array();$e=array();$Ek=array();$xi=array();$om=null;foreach($m as$w=>$l){$A=adminer()->fieldName($l);$_h=html_entity_decode(strip_tags($A),ENT_QUOTES);if(isset($l["privileges"]["select"])&&$A!=""){$e[$w]=$_h;if(is_shortable($l))$om=adminer()->selectLengthProcess();}if(isset($l["privileges"]["where"])&&$A!="")$Ek[$w]=$_h;if(isset($l["privileges"]["order"])&&$A!="")$xi[$w]=$_h;$nk+=$l["privileges"];}list($L,$q)=adminer()->selectColumnsProcess($e,$v);$L=array_unique($L);$q=array_unique($q);$Rf=count($q)selectSearchProcess($m,$v,$R);$wi=adminer()->selectOrderProcess($m,$v);$y=adminer()->selectLimitProcess();if($_GET["val"]&&is_ajax()){header("Content-Type: text/plain; charset=utf-8");foreach($_GET["val"]as$an=>$I){$Ha=convert_field($m[key($I)]);$L=array($Ha?:idf_escape(key($I)));$Z[]=where_check(bracket_escape($an,true),$m);$H=driver()->select($a,$L,$Z,$L);if($H)echo first($H->fetch_row());}exit;}$Cj=$dn=array();foreach($v as$u){if($u["type"]=="PRIMARY"){$Cj=array_flip($u["columns"]);$dn=($L?$Cj:array());foreach($dn as$w=>$W){if(in_array(idf_escape($w),$L))unset($dn[$w]);}break;}}if($ci&&!$Cj){$Cj=$dn=array($ci=>0);$v[]=array("type"=>"PRIMARY","columns"=>array($ci));}if($_POST&&!$k){$Kn=$Z;if(!$_POST["all"]&&is_array($_POST["check"])){$ub=array();foreach($_POST["check"]as$qb)$ub[]=where_check($qb,$m);$Kn[]="((".implode(") OR (",$ub)."))";}$Mn=$Kn;$Kn=($Kn?"\nWHERE ".implode(" AND ",$Kn):"");if($_POST["export"]){save_settings(array("output"=>$_POST["output"],"format"=>$_POST["format"]),"adminer_import");dump_headers($a);adminer()->dumpTable($a,"");$Ik=($L?:array("*"));$cc=convert_fields($e,$m,$L);if($cc)$Ik[]=substr($cc,2);$F="";if(is_array($_POST["check"])&&!$Cj){$se=implode(", ",$Ik)."\nFROM ".table($a);$Ee=($q&&$Rf?"\nGROUP BY ".implode(", ",$q):"").($wi?"\nORDER BY ".implode(", ",$wi):"");$Xm=array();foreach($_POST["check"]as$W)$Xm[]="(SELECT".limit($se,"\nWHERE ".($Z?implode(" AND ",$Z)." AND ":"").where_check($W,$m).$Ee,1).")";$F=implode(" UNION ALL ",$Xm);}adminer()->dumpData($a,"table",$F,$Ik,$Mn,($Rf?$q:array()),$wi);adminer()->dumpFooter();exit;}if(!adminer()->selectEmailProcess($Z,$le)){if($_POST["save"]||$_POST["delete"]){$G=true;$ta=0;$Ya=false;$N=array();if(!$_POST["delete"]){foreach($m as$A=>$W){$t=bracket_escape($A);if(isset($_POST["fields"][$t])||$_FILES["fields-$t"]){$W=process_input($m[$A]);if($W!==null&&($_POST["clone"]||$W!==false))$N[idf_escape($A)]=($W!==false?$W:idf_escape($A));}}}if($_POST["delete"]||$N){$F=($_POST["clone"]?"INTO ".table($a)." (".implode(", ",array_keys($N)).")\nSELECT ".implode(", ",$N)."\nFROM ".table($a):"");if($_POST["all"]||($Cj&&is_array($_POST["check"]))||$Rf){$G=($_POST["delete"]?driver()->delete($a,$Kn):($_POST["clone"]?queries("INSERT $F$Kn".driver()->insertReturning($a)):driver()->update($a,$N,$Kn)));$ta=connection()->affected_rows;if(is_object($G))$ta+=$G->num_rows;}else{$Ya=count((array)$_POST["check"])>1&&driver()->begin();foreach((array)$_POST["check"]as$W){$Jn="\nWHERE ".($Z?implode(" AND ",$Z)." AND ":"").where_check($W,$m);$G=($_POST["delete"]?driver()->delete($a,$Jn,1):($_POST["clone"]?queries("INSERT".limit1($a,$F,$Jn)):driver()->update($a,$N,$Jn,1)));if(!$G)break;$ta+=connection()->affected_rows;}if($Ya&&$G&&!driver()->commit())$G=false;}}$ch=lang(175,$ta);if($_POST["clone"]&&$G&&$ta==1){$pg=last_id($G);if($pg)$ch=lang(197," $pg");}queries_redirect(remove_from_uri($_POST["all"]&&$_POST["delete"]?"page|next":""),$ch,$G);if($Ya)driver()->rollback();if(!$_POST["delete"]){$tj=(array)$_POST["fields"];edit_form($a,array_intersect_key($m,$tj),$tj,!$_POST["clone"],$k);page_footer();exit;}}elseif(!$_POST["import"]){$G=true;$ta=0;$Ya=count((array)$_POST["val"])>1&&driver()->begin();foreach((array)$_POST["val"]as$an=>$I){$N=array();foreach($I as$w=>$W){$w=bracket_escape($w,true);$N[idf_escape($w)]=(preg_match('~char|text~',$m[$w]["type"])||$W!=""?adminer()->processInput($m[$w],$W):"NULL");}$G=driver()->update($a,$N," WHERE ".($Z?implode(" AND ",$Z)." AND ":"").where_check(bracket_escape($an,true),$m),($Rf||$Cj?0:1)," ");if(!$G)break;$ta+=connection()->affected_rows;}if($Ya)$G=$G&&driver()->commit();queries_redirect(remove_from_uri(),lang(175,$ta),$G);if($Ya)driver()->rollback();}else{save_settings(array("format"=>$_POST["separator"]),"adminer_import");$Vd=get_file("csv_file",true);if(!is_string($Vd))$k=upload_error($Vd);elseif(!preg_match('~~u',$Vd))$k=lang(285);else{$Fb=array_keys($m);$Ok=($_POST["separator"]=="csv"?",":($_POST["separator"]=="tsv"?"\t":";"));$mc=parse_csv($Vd,$Ok);$ta=count($mc);driver()->begin();$J=array();foreach($mc as$w=>$Y){if(!$w&&!array_diff($Y,$Fb)){$Fb=$Y;$ta--;}else{$N=array();foreach($Y as$r=>$Bb)$N[idf_escape($Fb[$r])]=($Bb==""&&$m[$Fb[$r]]["null"]?"NULL":q(csv_value($Bb)));$J[]=$N;}}$G=(!$J||driver()->insertUpdate($a,$J,$Cj));if($G)driver()->commit();queries_redirect(remove_from_uri("page|next"),lang(286,$ta),$G);driver()->rollback();}}}}$Vl=adminer()->tableName($R);if(is_ajax()){page_headers();ob_start();}else page_header(lang(62).": $Vl",$k,array(),"",(!$m&&support("table")),($m?doc_link(array(JUSH=>driver()->tableHelp($a,is_view($R)))):""));$N=null;if(isset($nk["insert"])||!support("table")){$N="";foreach((array)$_GET["where"]as$W){$X=$W["val"];if(is_array($X))$X=(count($X)==1&&preg_match('~^val-(.*)~s',reset($X),$_)?$_[1]:"");if($W["col"]!=""&&$X!=""&&($W["op"]=="="||(!$W["op"]&&(is_array($W["val"])||!preg_match('~[_%]~',$X)))))$N .="&set[".url_escape(bracket_escape($W["col"]))."]=".url_escape($X);}}adminer()->selectLinks($R,$N);if(!$e&&support("table"))echo"

    ".lang(287)."\n";else{echo"

    \n","\n";adminer()->selectColumnsPrint($L,$e);adminer()->selectSearchPrint($Z,$Ek,$v,$R);adminer()->selectOrderPrint($wi,$xi,$v);adminer()->selectLimitPrint($y);if($om!==null)adminer()->selectLengthPrint($om);adminer()->selectActionPrint($v);echo"
    \n";foreach((array)$_GET["where"]as$W){if($W["op"]=="SQL"&&!in_array($_SERVER["HTTP_SEC_FETCH_SITE"],array("","same-origin"))){echo"

    ".lang(119).' '.lang(120)."\n";page_footer();exit;}}$C=$_GET["page"];$oe=null;if($C=="last"){$oe=get_val(count_rows($a,$Z,$Rf,$q));$C=floor(max(0,intval($oe)-1)/$y);}$Hk=$L;$De=$q;if(!$Hk){$Hk[]="*";$cc=convert_fields($e,$m,$L);if($cc)$Hk[]=substr($cc,2);}foreach($L as$w=>$W){$l=$m[idf_unescape($W)];if($l&&($Ha=convert_field($l)))$Hk[$w]="$Ha AS $W";}if(JUSH=="pgsql"||JUSH=="mssql"){foreach((array)$_GET["columns"]as$w=>$W){if(isset($Hk[$w])&&$W["fun"])$Hk[$w].=" AS ".idf_escape(apply_sql_function($W["fun"],($W["col"]!=""?$W["col"]:"*")));}}if(!$Rf&&$dn){foreach($dn as$w=>$W){$Hk[]=idf_escape($w);if($De)$De[]=idf_escape($w);}}$G=driver()->select($a,$Hk,$Z,$De,$wi,$y,$C,true);if(!is_object($G))echo"

    ".(adminer()->error()?:lang(26))."\n";else{if(JUSH=="mssql"&&$C)$G->seek($y*$C);$md=array();$J=array();while($I=$G->fetch_assoc()){if($C&&JUSH=="oracle")unset($I["RNUM"]);$J[]=$I;}$Pe=($y&&(support("cursor")?$_GET["next"]!="":count($J)>=$y));if(is_ajax()&&$Pe)header("X-Next-Page: ".pagination_href($C+1));if($_GET["modify"]&&$J){$Tg=max_input_vars(count($J[0])+1,20);echo($Tg&&count($J)>$Tg?"

    ".max_input_vars_error()."\n":"");}echo"

    \n";if($_GET["page"]!="last"&&$y&&$q&&$Rf&&JUSH=="sql")$oe=get_val(" SELECT FOUND_ROWS()");if(!$J)echo"

    ".lang(16)."\n";else{$Ua=adminer()->backwardKeys($a,$Vl);$jk=array();reset($L);foreach($J[0]as$w=>$W){if(!isset($dn[$w])){$W=idx($_GET["columns"],key($L))?:array();$jk[$w]=array("fun"=>$W["fun"],"col"=>($L?$W["col"]:$w));next($L);}}echo"

    ","\n","".(!$q&&$L?"":"\n";if(is_ajax())ob_end_clean();foreach(adminer()->rowDescriptions($J,$le)as$wh=>$I){$Zm=unique_array($J[$wh],$v);if(!$Zm){$Zm=array();foreach($J[$wh]as$w=>$W){if(!in_array(idx(idx($jk,$w,array()),"fun"),driver()->grouping))$Zm[$w]=$W;}}$an="";$r=0;foreach($Zm as$w=>$W){$ik=idx($jk,$w,array());$xe=idx($ik,"fun","");$Bb=($xe?$ik["col"]:$w);$l=(array)$m[$Bb];$Qf=is_blob($l);if(!$xe&&strlen($W)>64&&driver()->md5(idf_escape($Bb),$l)){$xe="md5";$W=md5($Qf?(string)driver()->value($W,$l):$W);}if($xe){$an .="&fun[$r]=".url_escape($xe)."&col[$r]=".url_escape($Bb).($W!==null?"&val[$r]=".url_escape($W===false?"f":$W):"");$r++;}else$an .="&".($W!==null?"where[".url_escape(bracket_escape($Bb))."]=".url_escape($W===false?"f":$W):"null[]=".url_escape($Bb));}echo"".(!$q&&$L?"":"\n";}if(is_ajax())exit;echo"
    ");$Bh=array();$Rj=1;foreach($jk as$w=>$W){$l=$m[$W["col"]];$A=($l?adminer()->fieldName($l,$Rj):($W["fun"]?"*":h($w)));if($A!=""){$Rj++;$Bh[$w]=$A;$d=idf_escape($w);$ff=remove_from_uri('(order|desc)[^=]*|page|next').'&order[0]='.url_escape($w);$Fc="&desc[0]=1";$ml=preg_replace('~ DESC( NULLS LAST)?$~','',$wi[0]);$ol=($ml==$d||$ml==$w);echo"";$xe=apply_sql_function(h($W["fun"]),$A);$nl=isset($l["privileges"]["order"])||$W["fun"];echo($nl?"$xe":$xe);$bh=($nl?" ↓":'');if(!$W["fun"]&&isset($l["privileges"]["where"]))$bh .=" =";echo($bh?"$bh":"");}}$wg=array();if($_GET["modify"]){foreach($J as$I){foreach($I as$w=>$W)$wg[$w]=max($wg[$w],min(40,utf8_length((string)$W)));}}$af=array();$Ze=array();foreach((array)$_GET["where"]as$W){$W+=array("col"=>"","op"=>"","val"=>"");$Bb=$W["col"];$Dk=$W["val"];if(!is_array($Dk)&&($Dk!=""||preg_match('~NULL$~',$W["op"]))&&(!$W["op"]||in_array($W["op"],adminer()->operators($R)))){$yg=strtr(preg_quote($Dk),array("%"=>".*?","_"=>"."));$ij=array("LIKE %%"=>$yg,"ILIKE %%"=>$yg,"REGEXP"=>$Dk)+(JUSH=="pgsql"?array("~"=>$Dk,"~*"=>$Dk):array())+($Bb!=""?array():array("="=>'^'.preg_quote($Dk).'\z',"IN"=>'^(?:'.implode("|",array_map('preg_quote',array_map('trim',explode(",",$Dk)))).')\z',"LIKE"=>"^$yg\\z","ILIKE"=>"^$yg\\z","FIND_IN_SET"=>'(?<=^|,)'.preg_quote($Dk).'(?=,|\z)',));foreach(($Bb!=""?array($Bb=>$m[$Bb]):$m)as$A=>$l){if($Bb!=""||is_searchable($l,$W)){$ni=$W["op"]?:(!preg_match('~'.text_type().'~',$l["type"])?"IN":(preg_match('~%~',$Dk)?"LIKE":"LIKE %%"));if(isset($ij[$ni])){$xb=preg_match('~^ILIKE|\*$~',$ni)||($ni!="~"&&preg_match('~^(sql|mssql|sqlite)$~',JUSH));$af[$A][]="(?".($xb?"i":"").":$ij[$ni])";}elseif($ni=="IS NULL"&&$Bb=="")$Ze[$A]=true;}}}}echo($Ua?"".lang(289):"")."
    ".($Rf||information_schema(DB)?"":"".lang(290)." ").checkbox("check[]",substr($an,1),in_array(substr($an,1),(array)$_POST["check"])));foreach($I as$w=>$W){if(isset($Bh[$w])){$xe=$jk[$w]["fun"];$Bb=$jk[$w]["col"];$l=(array)$m[$w];if($W!=""&&(!isset($md[$w])||$md[$w]!=""))$md[$w]=(is_mail($W)?$Bh[$w]:"");$z="";if(is_blob($l)&&$W!="")$z=ME.'download='.url_escape($a).'&field='.url_escape($w).$an;if(!$z&&$W!==null){foreach((array)$le[$w]as$o){if(count($le[$w])==1||end($o["source"])==$w){$z="";foreach($o["source"]as$r=>$pl)$z .=where_link($r,$o["target"][$r],$J[$wh][$pl]);$z=($o["db"]!=""?preg_replace('~([?&]db=)[^&]+~','\1'.url_escape($o["db"]),ME):ME).'select='.url_escape($o["table"]).$z;if($o["ns"])$z=preg_replace('~([?&]ns=)[^&]+~','\1'.url_escape($o["ns"]),$z);if(count($o["source"])==1)break;}}}if($xe=="count"&&$Bb==""){$z=ME."select=".url_escape($a);$r=0;foreach((array)$_GET["where"]as$V){if(!array_key_exists($V["col"],$Zm))$z .=where_link($r++,$V["col"],$V["val"],$V["op"]);}foreach($Zm as$ag=>$V){if(idx(idx($jk,$ag,array()),"fun")){$z="";break;}$z .=where_link($r++,$ag,$V);}}$gf=select_value($W,$z,$l,$om,($xe?array():idx($af,$w,array())));if($W===null&&!$xe&&isset($Ze[$w]))$gf="$gf";$t=bracket_escape($an);$s=h("val[$t][".bracket_escape($w)."]");$vj=idx(idx($_POST["val"],$t),bracket_escape($w));$gn=idx($l["privileges"],"update")&&!is_identity_always($l);$id=!is_array($I[$w])&&!is_blob($l)&&is_utf8($W)&&$J[$wh][$w]==$W&&!$xe&&!$l["generated"]&&$gn;$T=($xe=="min"||$xe=="max"?$m[$Bb]["type"]:$l["type"]);$nm=preg_match('~text|json|lob~',$T);$Sf=preg_match(number_type(),$T)||preg_match('~^(avg|ceil|char_length|count|count distinct|floor|len|length|round|sum|time_to_sec)$~',$xe);echo"".($nm?"":"");}else{$Gg=strpos($gf,"…");echo($gn?" data-text='".($Gg?2:($nm?1:0))."'".($id?"":" data-warning='".lang(291)."'"):"").">$gf";}}}if($Ua)echo"";adminer()->backwardKeysPrint($Ua,$J[$wh]);echo"
    \n","
    \n";}if(!is_ajax()){$sa=get_settings("adminer_import");if($J||$C||$Pe){$Bd=true;if($_GET["page"]!="last"){if(!$y||(count($J)<$y&&($J||!$C)))$oe=($C?$C*$y:0)+count($J);elseif(JUSH!="sql"||!$Rf){$oe=($Rf?null:found_rows($R,$Z));$Bd=!driver()->hasEstimatedRows();if($oe===null||(!$Bd&&$oe$y);$Ni=($y&&($Pe||$C));if($Ni)echo($Pe?'

    '.lang(293).'':''),"\n";echo"

    \n";}if(adminer()->selectImportPrint())echo"

    ","".lang(84)."","";echo input_token(),"

    \n",(!$q&&$L?"":script("tableCheck();"));}}}if(is_ajax()){ob_end_clean();exit;}}elseif(isset($_GET["variables"])){$O=isset($_GET["status"]);page_header($O?lang(140):lang(139));$_n=($O?adminer()->showStatus():adminer()->showVariables());if(!$_n)echo"

    ".lang(16)."\n";else{echo"\n";foreach($_n as$I){echo"";$w=array_shift($I);echo"
    ".h($w)."";foreach($I as$W)echo"".nl_br(h($W));}echo"
    \n";}}elseif(isset($_GET["script"])){header("Content-Type: application/json; charset=utf-8");if($_GET["script"]=="db"){$Kl=array("Data_length"=>0,"Index_length"=>0,"Data_free"=>0);foreach(table_status()as$A=>$R){json_row("Comment-$A",h($R["Comment"]).($R["Error"]?" ".h($R["Error"])."":""));if(!is_view($R)||preg_match('~materialized~i',$R["Engine"])){foreach(array("Engine","Collation")as$w)json_row("$w-$A",h($R[$w]));foreach(array_keys($Kl+array("Auto_increment"=>0,"Rows"=>0))as$w){if(array_key_exists($w,$R))json_row("$w-$A",format_status($R,$w));if($R[$w]!=""&&isset($Kl[$w]))$Kl[$w]+=($R["Engine"]!="InnoDB"||$w!="Data_free"?$R[$w]:0);}}}if(function_exists('Adminer\db_status'))$Kl=db_status();foreach($Kl as$w=>$W)json_row("sum-$w",format_number($W));json_row("");}elseif($_GET["script"]=="kill"){if(!$k)connection()->query("KILL ".number($_POST["kill"]));}else{foreach(count_tables(adminer()->databases(false))as$i=>$W){json_row("tables-$i",format_number($W));json_row("size-$i",db_size($i));}json_row("");}exit;}else{if(!isset($_GET["select"])&&support("single_table")){$S=tables_list();if($S)redirect(ME.(support("table")?"table=":"select=").url_escape(key($S)));}$Yg=ME.(isset($_GET["select"])?"select=&":"");$fm=array_merge((array)$_POST["tables"],(array)$_POST["views"]);if($fm&&!$k&&!$_POST["search"]){$G=true;$ch="";if(JUSH=="sql"&&$_POST["tables"]&&count($_POST["tables"])>1&&($_POST["drop"]||$_POST["truncate"]||$_POST["copy"]))queries("SET foreign_key_checks = 0");if($_POST["truncate"]){if($_POST["tables"])$G=truncate_tables($_POST["tables"]);$ch=lang(298);}elseif($_POST["move"]){$G=move_tables((array)$_POST["tables"],(array)$_POST["views"],$_POST["target"]);$ch=lang(299);}elseif($_POST["copy"]){$G=copy_tables((array)$_POST["tables"],(array)$_POST["views"],$_POST["target"]);$ch=lang(300);}elseif($_POST["drop"]){if($_POST["views"])$G=drop_views($_POST["views"]);if($G&&$_POST["tables"])$G=drop_tables($_POST["tables"]);$ch=lang(301);}elseif(JUSH=="sqlite"&&$_POST["check"]){foreach((array)$_POST["tables"]as$Q){foreach(get_rows("PRAGMA integrity_check(".q($Q).")")as$I)$ch .="".h($Q).": ".h($I["integrity_check"])."
    ";}}elseif(JUSH=="mssql"&&$_POST["check"]){foreach((array)$_POST["tables"]as$Q){foreach(get_rows("DBCC CHECKTABLE (".q(table($Q)).") WITH TABLERESULTS")as$I)$ch .="".h($Q).": ".h($I["MessageText"])."
    ";}}elseif(JUSH!="sql"){$G=(JUSH=="sqlite"?queries("VACUUM"):apply_queries("VACUUM".($_POST["optimize"]?" ANALYZE":""),(array)$_POST["tables"]));$ch=lang(302);}elseif(!$_POST["tables"])$ch=lang(13);elseif($G=queries(($_POST["optimize"]?"OPTIMIZE":($_POST["check"]?"CHECK":($_POST["repair"]?"REPAIR":"ANALYZE")))." TABLE ".implode(", ",array_map('Adminer\idf_escape',$_POST["tables"])))){while($I=$G->fetch_assoc())$ch .="".h($I["Table"]).": ".h($I["Msg_text"])."
    ";}queries_redirect(relative_uri(),$ch,$G);}page_header(($_GET["ns"]==""?lang(44).": ".h(DB):lang(88).": ".h($_GET["ns"])),$k,true);if(adminer()->homepage()){if($_GET["ns"]!==""){$wi=$_GET["order"];$ue=($wi||support("fast_status"));echo"

    \n","

    ".lang(303)."

    \n";$em=($ue?table_status():tables_list());if(!$em)echo"

    ".lang(13)."\n";else{echo"

    \n";if(support("table")){echo"
    ".lang(304)."
    ",html_select("op",adminer()->operators(),idx($_POST,"op",JUSH=="elastic"?"should":"LIKE %%"))," "," \n","
    \n";if(!$k&&$_POST["search"]&&$_POST["query"]!=""){$_GET["where"][0]["op"]=$_POST["op"];search_tables();}}echo"
    \n","\n",'','\n";if($wi){uasort($em,function($ia,$Ra)use($wi,$Ia){$H=($ia[$wi]<$Ra[$wi]?-1:($ia[$wi]>$Ra[$wi]?1:0));return(in_array($wi,$Ia)?$H:-$H);});}$S=0;$Kl=array("Data_length"=>0,"Index_length"=>0,"Data_free"=>0);foreach($em as$A=>$O){$Cn=($ue?is_view($O):$O!==null&&!preg_match('~table|sequence~i',$O));$O=($ue?$O:array('Engine'=>$O));$s=h("Table-".$A);echo'
    ',''.lang(154).'';$e=array("Engine"=>array(lang(305).doc_link(array('sql'=>'storage-engines.html'))));if(collations())$e["Collation"]=array(lang(144).doc_link(array('sql'=>'charset-charsets.html','mariadb'=>'supported-character-sets-and-collations/')));if(function_exists('Adminer\alter_table'))$e["Data_length"]=array(lang(306).doc_link(array('sql'=>'show-table-status.html','pgsql'=>'functions-admin.html#FUNCTIONS-ADMIN-DBOBJECT','oracle'=>'refrn/ALL_TABLES.html')),"create",lang(53),);if(support("indexes"))$e["Index_length"]=array(lang(307).doc_link(array('sql'=>'show-table-status.html','pgsql'=>'functions-admin.html#FUNCTIONS-ADMIN-DBOBJECT')),"indexes",lang(157),);$e["Data_free"]=array(lang(308).doc_link(array('sql'=>'show-table-status.html')),"edit",lang(54));if(function_exists('Adminer\alter_table'))$e["Auto_increment"]=array(lang(60).doc_link(array('sql'=>'example-auto-increment.html','mariadb'=>'auto_increment/')),"auto_increment=1&create",lang(53),);$e["Rows"]=array(lang(309).doc_link(array('sql'=>'show-table-status.html','pgsql'=>'catalog-pg-class.html#CATALOG-PG-CLASS','oracle'=>'refrn/ALL_TABLES.html')),"select",lang(50),);if(support("comment"))$e["Comment"]=array(lang(59).doc_link(array('sql'=>'show-table-status.html','pgsql'=>'functions-info.html#FUNCTIONS-INFO-COMMENT-TABLE','cockroach'=>'comment-on')),);$Ia=array('Engine','Collation','Comment');foreach($e as$w=>$d)echo"$d[0]";echo"
    '.checkbox(($Cn?"views[]":"tables[]"),$A,in_array("$A",$fm,true),"","","",$s),''.(support("table")||support("indexes")?"".h($A).'':h($A));if($Cn&&!preg_match('~materialized~i',$O['Engine'])){$tm=lang(153);echo''.(support("view")?"$tm":$tm),"?";if(support("comment"))echo''.h($O['Comment']);}else{if($ue){foreach(array_keys($Kl)as$w)$Kl[$w]+=($O["Engine"]!="InnoDB"||$w!="Data_free"?idx($O,$w):0);}foreach($e as$w=>$d){$s=" id='$w-".h($A)."'";echo($d[1]?"".format_status($O,$w)."":"".h(idx($O,$w,'?')).($w=="Comment"&&$O["Error"]?" ".h($O["Error"])."":""));}$S++;}echo"\n";}echo"
    ".lang(283,count($em)),"".h(JUSH=="sql"?get_val("SELECT @@default_storage_engine"):""),(collations()?"".h(db_collation(DB,collations())):'');if($ue&&function_exists('Adminer\db_status'))$Kl=db_status();foreach($Kl as$w=>$Jl)echo($e[$w]?"".($ue?format_number($Jl):""):"");echo"\n","
    \n",($ue?'':script("ajaxSetHtml('".js_escape(ME)."script=db');")),"
    \n";if(!information_schema(DB)){$wn=" ";$si=" ";$Ej=(JUSH=="sqlite"?$wn." ":(JUSH=="pgsql"?$wn.$si:(JUSH=="mssql"?" ":(JUSH=="sql"?" ".$si." "." ":"")))).(function_exists('Adminer\truncate_tables')?" ":"").(function_exists('Adminer\drop_tables')?"":"");echo($Ej?"\n";}echo"
    \n",script("tableCheck();");}echo(function_exists('Adminer\alter_table')?"
    \n";if(support("routine")){echo"
    \n","

    ".lang(81)."

    \n";$vk=routines();if($vk){echo"\n",'\n";foreach($vk as$I){$A=($I["SPECIFIC_NAME"]==$I["ROUTINE_NAME"]?"":"&name=".url_escape($I["ROUTINE_NAME"]));echo'','
    '.lang(214).''.lang(58).''.lang(253)."
    '.h($I["ROUTINE_NAME"]).'',''.h($I["ROUTINE_TYPE"]),''.h($I["DTD_IDENTIFIER"]),''.lang(160)."";}echo"
    \n";}echo'
    \n";}if(support("sequence")){echo"
    \n","

    ".lang(82)."

    \n";$Sk=get_vals("SELECT relname FROM pg_class WHERE relkind = 'S' AND relnamespace = ".driver()->nsOid." ORDER BY relname");if($Sk){echo"\n","\n";foreach($Sk as$W)echo"
    ".lang(214)."
    ".h($W)."\n";echo"
    \n";}echo"
    \n";}if(support("type")){echo"
    \n","

    ".lang(0)."

    \n";$tn=types();if($tn){echo"\n","\n";foreach($tn as$W)echo"
    ".lang(214)."
    ".h($W)."\n";echo"
    \n";}echo"
    \n";}if(support("event")){echo"
    \n","

    ".lang(83)."

    \n";$J=get_rows("SHOW EVENTS");if($J){echo"\n","\n";foreach($J as$I)echo"","
    ".lang(214)."".lang(318)."".lang(243)."".lang(244)."
    ".h($I["Name"]),"".($I["Execute at"]?lang(319)."".h($I["Execute at"]):lang(245)." ".h($I["Interval value"])." ".h($I["Interval field"])."".h($I["Starts"])),"".h($I["Ends"]),''.lang(160).'';echo"
    \n";$zd=get_val("SELECT @@event_scheduler");if($zd&&$zd!="ON")echo"

    event_scheduler: ".h($zd)."\n";}echo'

    \n";}}elseif(support("extension")){$Kd=get_rows("SELECT e.extname, e.extversion, n.nspname, obj_description(e.oid, 'pg_extension') AS comment FROM pg_extension e JOIN pg_namespace n ON n.oid = e.extnamespace ORDER BY e.extname");if($Kd){echo"
    \n","

    ".lang(320)."

    \n","\n","\n";foreach($Kd as$I)echo"
    ".lang(214)."".lang(321)."".lang(88)."".lang(59)."
    ".h($I["extname"])."","".h($I["extversion"]),"".h($I["nspname"])."","".h($I["comment"]),"\n";echo"
    \n","
    \n";}}}}page_footer();