Find this useful? Enter your email to receive occasional updates for securing PHP code.
Signing you up...
Thank you for signing up!
PHP Decode
<?php $_F=__FILE__;$_C1353562110='Pz48P3BOcAoKJHY2RDQgPSBMUFRDNmI0KExQVEM2YjQoX19pSkYxX18p..
Decoded Output download
?><?php
$base = dirname(dirname('index.php'));
if (!function_exists("app_class_autoloader")) {
include($base . "/lib/app_top.php");
}
if (!isset($_SESSION[SESSION_VAR_NAME]['user_id'])) {
header("location: ../error_401.php");
exit();
}
//else {
$page_ctl = new page_access_ctl($db);
if ($page_ctl->hasPermission('152', $_SESSION[SESSION_VAR_NAME]['role'])) {
// JCryption::decrypt();
//khushboo
/*ini_set('max_execution_time', 9000);
ini_set("upload_max_filesize", "100M");
ini_set('memory_limit', '-1');*/
if(file_exists($base . "/lib/ini_set_global.php")) {
include($base . "/lib/ini_set_global.php");
}
$Rights = new doc_rights($db);
$Category = new category($db);
$User = new user($db);
$File = new file_manager($db);
$Global_Settings = new global_settings($db);
$duplicate_count = 0;
$duplicate_arr = array();
$str_dupli = '';
$selected_category_path_full = $_POST['category_path_full'];
$pid = $_REQUEST['pid'];
$radio_upload_type = $_POST['radio_upload_type'];
$category_id = decrypt_url($_POST['c_category'], APP_ENCRYPTION_SALT);
$category_path_full_arr = explode("|||", urldecode($_POST["category_path_full"]));
$indexed_array = array();
$unindexed_array = array();
$str_indexed = '';
$str_unindexed = '';
$cat_rank_arr = array();
for ($i = 0; $i < count($category_path_full_arr); $i++) {
$c_path_id = decrypt_url($category_path_full_arr[$i], APP_ENCRYPTION_SALT);
$category_details = $Category->getCategoryByID($c_path_id);
$rank_details = $Category->getCategory_Rank($category_details[0]['parent_id']);
for ($x = 0; $x < count($rank_details); $x++) {
if ($rank_details[$x]['id'] == $category_details[0]['id']) {
$category_rank = $rank_details[$x]['rank'];
array_push($cat_rank_arr, $category_rank);
}
}
}
$cat_rank = join('.', $cat_rank_arr);
$doc_set_tag_id_arr = array();
$file_name_arr = array();
if ($radio_upload_type == 'normal') {
// $file_name_arr = $_POST['file_name'];
$doc_set_ids_arr = explode(',', $_POST['doc_set_ids']);
foreach ($doc_set_ids_arr as $doc_set_ids_key => $doc_set_ids_val) {
$doc_set_files_arr = $_POST['file_name_' . $doc_set_ids_val];
foreach ($doc_set_files_arr as $doc_set_files_key => $doc_set_files_val) {
if ($doc_set_files_val != '') {
array_push($file_name_arr, $doc_set_files_val);
array_push($doc_set_tag_id_arr, $doc_set_ids_val);
}
}
}
} elseif ($radio_upload_type == 'scan') {
$temp_dir = '../' . APP_DEFAULT_UPLOAD_DIR . '/tmp/' . 'dir_' . $_SESSION[SESSION_VAR_NAME]['user_temp_number'] . '_upload/';
$file_name_arr = $_POST['scan_file_name'];
$files_arr_re = join(', ', $file_name_arr);
include '../dms/dms_scan_merge_doc.php';
if (!empty($_POST['title'])) {
$scan_title = $_POST['title'] . '.pdf';
$file_name_arr = array($scan_title);
} else {
$file_name_arr = array();
}
}
//foreach($file_name_arr as $k=>$v){
// echo $v."=>".$doc_set_tag_id_arr[$k]."<br>";
//}
//die;
$category_path_full_arr = array_values(array_filter($category_path_full_arr));
if (empty($category_path_full_arr) || $category_path_full_arr[0] == '') {
echo 'Please choose category!';
echo "<script nonce=" . $_SESSION[SESSION_VAR_NAME]['usernonce'] . ">$(function() { $(':submit').attr('disabled', false); });</script>";
} elseif (count($file_name_arr) == 0) {
echo 'Please choose document!';
echo "<script nonce=" . $_SESSION[SESSION_VAR_NAME]['usernonce'] . ">$(function() { $(':submit').attr('disabled', false); });</script>";
} else {
$module_details_bulk_ocr = $Global_Settings->get_module_info_byId(5);
$module_details_duplicate_files = $Global_Settings->get_module_info_byId(15);
$record_exist_doc_id = $_REQUEST['record_exist_doc_id'];
$record_exist_edit = $_REQUEST['record_exist_edit'];
$inserted_id = array();
$count = 0;
for ($i = 0; $i < count($file_name_arr); $i++) {
$max_doc_id = '';
$doc_number = '';
$max_doc_id = $File->CountDocuments_ByCategoryID($category_id);
if (empty($max_doc_id)) {
$File->add_category_count($category_id);
$max_doc_id = $File->CountDocuments_ByCategoryID($category_id);
$doc_number = $max_doc_id[0]['document_count'] + 1;
} else {
$doc_number = $max_doc_id[0]['document_count'] + 1;
}
$doc_id = $cat_rank . '.' . $doc_number;
$rand_string = generateRandomString();
$rand = rand(11111, 9999999999);
$temp_dir = '../' . APP_DEFAULT_UPLOAD_DIR . '/tmp/' . 'dir_' . $_SESSION[SESSION_VAR_NAME]['user_temp_number'] . '_upload/';
$doc_dir = '../' . APP_DEFAULT_UPLOAD_DIR . '/dms/';
$file_name = $file_name_arr[$i];
$availability = $File->Checkdocname_availability($file_name);
$extensio = pathinfo($file_name);
$file_ext = $extensio['extension'];
$file_name_auto_indexing = str_replace(('.' . $file_ext), "", $file_name);
if ($availability[0]['count_doc'] >= 1) {
if ($module_details_duplicate_files[0]['status'] == 1) {
$occurrence = $File->get_docname_file_occurrence($file_name);
$extensio = pathinfo($file_name);
$file_ext = $extensio['extension'];
$root_name = str_replace(('.' . $file_ext), "", $file_name);
$file_name = $root_name . ' (' . ($occurrence[0]['file_occurrence'] + 1) . ')' . '.' . $file_ext;
$File->Edit_docname_file_occurrence($occurrence[0]['id'], ($occurrence[0]['file_occurrence'] + 1));
} else {
unlink('../' . APP_DEFAULT_UPLOAD_DIR . '/tmp/' . 'dir_' . $_SESSION[SESSION_VAR_NAME]['user_temp_number'] . '_upload/' . $file_name_arr[$i]);
array_push($duplicate_arr, $file_name_arr[$i]);
$duplicate_count++;
$count += 1;
continue;
}
} else {
$file_name = $file_name_arr[$i];
}
$file_path = '../' . APP_DEFAULT_UPLOAD_DIR . '/tmp/' . 'dir_' . $_SESSION[SESSION_VAR_NAME]['user_temp_number'] . '_upload/' . $file_name_arr[$i];
if ($module_details_bulk_ocr[0]['status'] == 1) {
/* OCR MODIFIED BEGINS */
// if (!is_dir('../' . APP_DEFAULT_UPLOAD_DIR . '/ocr_tmp')) {
// mkdir('../' . APP_DEFAULT_UPLOAD_DIR . '/ocr_tmp');
// }
// $ocr_path = '../' . APP_DEFAULT_UPLOAD_DIR . '/ocr_tmp/' . $file_name;
// copy($file_path, $ocr_path);
/* OCR MODIFIED ENDS */
}
$ext = pathinfo($file_path);
//$file_name = $ext['basename'];
//pagecount
$countPage = 0;
$file_type = get_mime_type($file_name);
$doc_path = '../documents/tmp/dir_' . $_SESSION[SESSION_VAR_NAME]['user_temp_number'] . '_upload/';
if (PHP_OS == "Windows" || PHP_OS == "WINNT") {
$doc_path = str_replace('/', '\', $doc_path);
}
$module_details_compression_files = $Global_Settings->get_module_info_byId(23);
if ($file_type == "application/pdf") {
ob_start();
$base = (dirname(dirname('index.php')));
$urlX = $base . str_replace(array('\', '/', '../','..\'), DIRECTORY_SEPARATOR, $doc_path . $file_name_arr[$i]);
$pdfinfo_cmdX = is_encrypted() . ' "' . $urlX . '"';
$retX = exec($pdfinfo_cmdX);
ob_end_clean();
if ($retX != 'Encrypted') {
$file_info = pathinfo($urlX);
$dirnameX = $file_info['dirname'];
$basenameX = $file_info['basename'];
$extensionX = $file_info['extension'];
$filenameX = $file_info['filename'];
$crt_file = $dirnameX . DIRECTORY_SEPARATOR . $filenameX . '.crt';
$cert = get_pdfsig_info($urlX);
if (!( file_exists($crt_file) || (is_array($cert) && $cert[0] == true))) {
if ($module_details_compression_files[0]['status']) {
$date = new DateTime();
$ran = $date->format('dHis');
$application_setting_sizeLimit_detail = $Global_Settings->get_application_sizeLimit_detail();
exec(select_ghostscript() . ' -q -dNOPAUSE -dBATCH -dSAFER -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dEmbedAllFonts=true -dSubsetFonts=true -dAutoRotatePages=/None -dColorImageDownsampleType=/Bicubic -dColorImageResolution=' . $application_setting_sizeLimit_detail[6]['size'] . ' -dGrayImageDownsampleType=/Bicubic -dGrayImageResolution=' . $application_setting_sizeLimit_detail[6]['size'] . ' -dMonoImageDownsampleType=/Bicubic -dMonoImageResolution=' . $application_setting_sizeLimit_detail[6]['size'] . ' -sOutputFile="' . $doc_path . 'example' . $ran . '.pdf" "' . $doc_path . $file_name_arr[$i] . '"');
@unlink($doc_path . $file_name_arr[$i]);
@rename($doc_path . 'example' . $ran . '.pdf', $doc_path . $file_name_arr[$i]);
}
}
}
$base = (dirname(dirname('index.php')));
$urlGS = $base . str_replace(array('\', '/', '../', '..\'), '/', $doc_path . $file_name_arr[$i]);
$urlGS =str_replace(DIRECTORY_SEPARATOR,'/',$urlGS);
$countPage = pdfPageCount($urlGS);
//$countPage = exec(select_ghostscript() .' -dNOSAFER -q -dNODISPLAY -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -c "('.$urlGS . ') (r) file runpdfbegin pdfpagecount = quit"');
// $countPage = exec(select_ghostscript() . ' -q -dNODISPLAY -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -c "(../documents/tmp/dir_' . $_SESSION[SESSION_VAR_NAME]['user_temp_number'] . '_upload/' . $file_name_arr[$i] . ')" (r) file runpdfbegin pdfpagecount = quit');
}
$file_size = @filesize($file_path);
$Global_Settings = new global_settings($db);
$dfs_path = $Global_Settings->getDefaultDfsPath();
$dfs_category_path = $Global_Settings->getStoragePathByCategory($category_id);
if (!empty($dfs_category_path)) {
$storage_path = str_replace("\", "\", $dfs_category_path[0]['current_file_path']);
$validatePath = storage_path_valid_size($storage_path, $dfs_category_path[0]['storage_type']);
} else {
$storage_path = str_replace("\", "\", $dfs_path[0]['current_file_path']);
$validatePath = storage_path_valid_size($storage_path, $dfs_path[0]['storage_type']);
}
if ($validatePath['valid_path']) {
if ((($file_size * 2) + (1024 * 1024 * SPACE_LIMIT)) > $validatePath['free_size']) {
//echo 'Disk Space is almost full cannot upload the files';
for ($ij = 0; $ij < count($file_name_arr); $ij++) {
$file_path_1 = '../' . APP_DEFAULT_UPLOAD_DIR . '/tmp/' . 'dir_' . $_SESSION[SESSION_VAR_NAME]['user_temp_number'] . '_upload/' . $file_name_arr[$ij];
@unlink($file_path_1);
}
$rq = encrypt_url("dms/dms_dashboard.php", APP_ENCRYPTION_SALT);
$pid = encrypt_url($_REQUEST['pid'], APP_ENCRYPTION_SALT);
echo '<script nonce=' . $_SESSION[SESSION_VAR_NAME]['usernonce'] . '> $(function() { bootbox.alert("<b>Disk Space is almost full cannot upload more files</b>", function(result) { if (result) { window.location.reload(); } else { window.location.href = "index.php?rq=' . $rq . '&id=' . $pid . '&category_path_full=' . $selected_category_path_full . '"; } }); });</script>';
die;
}
} else {
$rq = encrypt_url("dms/dms_dashboard.php", APP_ENCRYPTION_SALT);
$pid = encrypt_url($_REQUEST['pid'], APP_ENCRYPTION_SALT);
echo '<script nonce=' . $_SESSION[SESSION_VAR_NAME]['usernonce'] . '> $(function() { bootbox.alert("<b>The Network Path Where the files are stored is Missing or Disconnected.</b>", function(result) { if (result) { window.location.reload(); } else { window.location.href = "index.php?rq=' . $rq . '&id=' . $pid . '&category_path_full=' . $selected_category_path_full . '"; } }); });</script>';
for ($ij = 0; $ij < count($file_name_arr); $ij++) {
$file_path_1 = '../' . APP_DEFAULT_UPLOAD_DIR . '/tmp/' . 'dir_' . $_SESSION[SESSION_VAR_NAME]['user_temp_number'] . '_upload/' . $file_name_arr[$ij];
@unlink($file_path_1);
}
die;
}
/*Encryption changes*/
// $fileHandle = @fopen($file_path, 'rb');
// $file_content = @fread($fileHandle, $file_size);
// @fclose($fileHandle);
// $file_content2 = encrypt_file($file_content, APP_ENCRYPTION_SALT . $rand_string);
// /*Encryption changes*/
//$base = dirname(dirname('index.php'));
//$private_key = file_get_contents($base . "/private_key.pem");
//$file_content2 = encrypt_file($file_content, $private_key);
if ($file_size) {
$stage = '';
if (is_array($_POST['tags'])) {
$tags = @join(',', $_POST['tags']);
} else {
$tags = $_POST['tags'][0];
}
if ($radio_upload_type == 'normal') {
$file_name = $file_name;
} elseif ($radio_upload_type == 'scan') {
$file_name = $_POST['title'] . '.pdf';
}
$dod = '';
if (isset($_POST['dod']) && !empty($_POST['dod'])) {
$myDateTime = DateTime::createFromFormat('d/m/Y', $_POST['dod']);
$dod = $myDateTime->format('Y-m-d');
}
$hash = hash_file('sha256', $file_path);
$File->setDocId($doc_id);
$File->setProjectId($_POST['pid']);
$File->setUserId($_SESSION[SESSION_VAR_NAME]['user_id']);
$File->setCategoryId($category_id);
$File->setKeywords($_POST['doc_keywords'][0]);
$File->setNotes($_POST['notes']);
$File->setTitle($file_name);
// $File->setFileContent($file_content2);
$File->setShow_on_dash("1");
$File->setFileType($file_type);
$File->setDod($dod);
$File->setFileId($_REQUEST['file_id']);
$File->setFileSize($file_size);
$File->setFileTxt(addslashes($txt));
$File->setFileKey($rand_string);
$File->setLogDatetime(DATE_TIME);
$File->setStage($stage);
$File->setDocType($doc_set_tag_id_arr[$i]);
$File->setEmpType($_REQUEST['emp_type']);
$File->sethash($hash);
$File->setIndexed('Unindexed');
$cat_details = $Category->getCategoryByID($category_id);
if ($cat_details[0]['pre_approval_status'] == 1) {
$File->setStatus("Approved");
} else {
$File->setStatus("Unapproved");
}
$perpetual = $_REQUEST['perpetual'];
if ($perpetual == 'perpetual') {
$File->setDocLifeCycle("perpetual");
$File->setPerpetual("1");
} else {
$File->setDocLifeCycle("processing");
$File->setPerpetual("0");
}
$File->setDocLifeCycleDatetime(DATE_TIME);
// $new_title = str_replace('-', '/', $file_name);
$new_title = $file_name;
$File->setnew_title($new_title);
$File->setTags($tags);
$File->setPageCount($countPage);
$primary_id = $File->AddDocument();
array_push($inserted_id, $primary_id);
$inserted_key = @implode(",", $inserted_id);
if ($module_details_bulk_ocr[0]['status'] == 1) {
/* ADD TO OCR QUEUE BEGINS */
$ocr = new ocr_queue($db);
$ocr->setFileId($primary_id);
$ocr->setFileName($file_name);
$ocr->addOcr();
/* ADD TO OCR QUEUE ENDS */
}
$DMS_Log = new dms_log($db);
$DMS_Log->setProjectId($pid);
$DMS_Log->setDocId($file_name);
$DMS_Log->setUserId($_SESSION[SESSION_VAR_NAME]['user_id']);
$DMS_Log->setGuestId($_SESSION[SESSION_VAR_NAME]['guest_id']);
$DMS_Log->setAccessLevel('2');
$DMS_Log->setLogDateTime(DATE_TIME);
$add_DMS_log = $DMS_Log->add_DMS_Log();
if ($primary_id) {
$recent_log = new recent_log($db);
$recent_log->setProjectId($pid);
$recent_log->setDocId($primary_id);
$recent_log->setDocName($file_name);
$recent_log->setModule('Upload');
$recent_log->setCategory_Id($category_id);
$recent_log->setUserId($_SESSION[SESSION_VAR_NAME]['user_id']);
$recent_log->setIndex_Master_Id(0);
$recent_log->setIndex_Group_Id(0);
$recent_log->setLast_Search('');
$recent_log->setLogDateTime(DATE_TIME);
$recent_log->add_recent_Log();
$master = new index_master($db);
$update_auto_index_title = $master->UpdateAutoIndexTitle($primary_id, $file_name_auto_indexing);
$file_parts = explode('.', $file_name);
$extension = end($file_parts);
$convert_ext_array = array('doc', 'docx', 'ppt', 'pptx', 'dwg', 'dxf', 'dwf', 'msg', 'mpp', 'xls', 'xlsx', 'csv','tiff','tif','rtf');
if (in_array(strtolower($extension), $convert_ext_array)) {
$convert_files = new convert_files($db);
//$convert_files->setDoc_id($doc_id);
$insert_values = $convert_files->addValue($primary_id);
// if ($insert_values) {
// echo "added";die;
// } else {
// echo "Not added";die;
// }
}
//---------------------------------------------------------------------------------------------------------------------------------------------------------------
$index = new index_group($db);
$master = new index_master($db);
$master_count = array();
$file_indexed = array();
$indexed = 0;
$autoIndexing = $_REQUEST['autoIndexing'];
$if_index_for_auto = "false";
if ($autoIndexing == "true") {
$basename = $ext['filename'];
$auto = new autoIndex($db);
$autoIndex_details = $auto->getAutoIndex($category_id);
if (empty($autoIndex_details)) {
$if_index_for_auto = "false";
//echo "Kindly add auto indexing pattern and try again";
// die;
$indexed = 0;
} else {
$indexed = 0;
$index = new index_group($db);
$basename = $ext['filename'];
$no_of_index_fields = $autoIndex_details[0]['no_of_fields'];
$delimiter_type = $autoIndex_details[0]['delimiter_type'];
$pattern = $autoIndex_details[0]['auto_pattern'];
$index_id = $autoIndex_details[0]['index_group_id'];
if ($index_id != '') {
$if_index_for_auto = "true";
$auto_index_detail = $index->getIndexGroup_ById($index_id);
$file_name_expload = @explode($delimiter_type, $basename);
$field_name_expload = @explode($delimiter_type, $pattern);
if (count($file_name_expload) != $no_of_index_fields) {
$if_index_for_auto = "false";
} else {
if (count($file_name_expload) != $no_of_index_fields) {
$if_index_for_auto = "false";
} else {
$if_index_for_auto = "true";
$master->setCategoryId($category_id);
$cate_details = $master->getIndexMasterByCategory();
$master_details = @explode(",", $cate_details[0]['index_master_id']);
$index_details = @explode(",", $cate_details[0]['index_group_id']);
$doc_index_arr = array();
if (!empty($index_details) && $index_details[0] != '') {
for ($ig = 0; $ig < count($index_details); $ig++) {
$doc_index_insert = array();
$index_group_id = $index_details[$ig];
$doc_index_insert['index_group_id'] = $index_group_id;
$indexgroupf_details = $index->getIndexField_ByIGId($index_group_id);
$index_fields = $_REQUEST['field_ids_' . $index_group_id];
//$index_values = $_REQUEST['index_value_' . $index_group_id];
$field_types = $_REQUEST['field_type_' . $index_group_id];
$i_field_arr = array();
$i_value_arr = array();
$insert_index = '';
if (!empty($indexgroupf_details) && $indexgroupf_details[0] != '') {
for ($if = 0; $if < count($indexgroupf_details); $if++) {
$index_field_id = $indexgroupf_details[$if]['id'];
$index_values = $_REQUEST['index_value_' . $index_group_id . "_" . $index_field_id];
$key = array_search("IG" . "||" . $index_group_id . "||" . $index_field_id, $field_name_expload);
$field_details = $index->getIndexField_ById($index_field_id);
if ($key !== false) {
if ($field_details[0]['field_type'] == "Dropdown") {
$drop_details = $index->getFieldValue_byField($index_field_id, $file_name_expload[$key]);
if (!empty($drop_details) && $drop_details[0] != '') {
array_push($i_value_arr, $drop_details[0]['id']);
array_push($i_field_arr, "ig_field_$index_field_id");
}
if ($field_details[0]['field_type'] == "Dropdown" && $field_details[0]['document_field'] == 1) {
$doc_index_insert['field_id'] = $field_details[0]['id'];
$doc_index_insert['drop_id'] = $drop_details[0]['id'];
}
} else {
array_push($i_value_arr, $file_name_expload[$key]);
array_push($i_field_arr, "ig_field_$index_field_id");
}
} else {
if ($index_values != '') {
array_push($i_value_arr, $index_values);
array_push($i_field_arr, "ig_field_$index_field_id");
if ($field_details[0]['field_type'] == "Dropdown" && $field_details[0]['document_field'] == 1) {
$doc_index_insert['field_id'] = $field_details[0]['id'];
$doc_index_insert['drop_id'] = $index_values;
}
}
}
} $doc_index_insert['index_group_id'] = $index_group_id;
}
if (!empty($i_value_arr)) {
$index_table = "_dynamic_ig_" . $index_group_id;
$insert_index = $index->addIndexFieldValue($index_table, 0, $i_field_arr, $i_value_arr, $_SESSION[SESSION_VAR_NAME]['user_id'], $primary_id);
if ($insert_index) {
array_push($file_indexed, '2');
}
}
if ($doc_index_insert['drop_id'] != '') {
$doc_index_arr[$ig] = $doc_index_insert;
}
}
}
$doc_index_arr = array_values($doc_index_arr);
//Master
if (!empty($master_details) && $master_details[0] != '') {
for ($im = 0; $im < count($master_details); $im++) {
$master_id = $master_details[$im];
$sel_record_id_n = $_REQUEST['f_selected_record_set_id_' . $master_id];
$indexmaster_details = $master->getIndexField_ByIMId($master_id);
$master_arr = array();
$no_indexmaster_details = count($indexmaster_details);
if (!empty($indexmaster_details) && $indexmaster_details[0] != '') {
for ($imf = 0; $imf < $no_indexmaster_details; $imf++) {
$m_field_id = $indexmaster_details[$imf]['id'];
$key = array_search("IM" . "||" . $master_id . "||" . $m_field_id, $field_name_expload);
if ($key !== false) {
$m_field_value = $file_name_expload[$key];
$field_m_details = $master->getIndexField_ById($m_field_id);
if ($field_m_details[0]['field_type'] == "Select Menu") {
$drop_m_details = $master->getFieldDropdownvalue($master_id, $file_name_expload[$key], $m_field_id);
if (!empty($drop_m_details) && $drop_m_details[0] != '') {
$m_field_value = $drop_m_details[0]['id'];
}
}
if ($m_field_value != '') {
$search_im_value = $master->searchMasterValue_byColumn('_dynamic_im_' . $master_id, 'im_field_' . $m_field_id, htmlspecialchars($m_field_value, ENT_QUOTES));
if (!empty($search_im_value)) {
$coun_n = count($search_im_value);
if ($coun_n > 1) {
// array_push($master_arr, 0);
//array_push($master_count, $file_name);
for ($sim = 0; $sim < count($search_im_value); $sim++) {
$masterIndex_insert = $master->addIndex_Master_forDoc($master_id, $search_im_value[$sim]['id'], 0, 0, $primary_id, $_SESSION[SESSION_VAR_NAME]['user_id']);
if ($masterIndex_insert) {
array_push($master_arr, $search_im_value[$sim]['id']);
array_push($file_indexed, '3');
for ($it = 0; $it < count($doc_index_arr); $it++) {
$search_param = "doc_" . $doc_index_arr[$it]['index_group_id'] . "_" . $doc_index_arr[$it]['field_id'] . "_" . $doc_index_arr[$it]['drop_id'];
$search_val = $master->searchMasterValue_bydoc('_dynamic_im_' . $master_id, $search_param, $search_im_value[$sim]['id']);
$join_val = '';
if ($search_val[0][$search_param] != '') {
$join_val = $search_val[0][$search_param] . ',' . $primary_id;
} else {
$join_val = $primary_id;
}
$query_string = "$search_param = '$join_val'";
$qer = array("$query_string");
$master->EditIndexValue($master_id, $qer, $search_im_value[$sim]['id']);
}
}
}
} else {
array_push($master_arr, $search_im_value[0]['id']);
$masterIndex_insert = $master->addIndex_Master_forDoc($master_id, $search_im_value[0]['id'], 0, 0, $primary_id, $_SESSION[SESSION_VAR_NAME]['user_id']);
if ($masterIndex_insert) {
array_push($master_arr, $search_im_value[0]['id']);
array_push($file_indexed, '3');
for ($it = 0; $it < count($doc_index_arr); $it++) {
$search_param = "doc_" . $doc_index_arr[$it]['index_group_id'] . "_" . $doc_index_arr[$it]['field_id'] . "_" . $doc_index_arr[$it]['drop_id'];
$search_val = $master->searchMasterValue_bydoc('_dynamic_im_' . $master_id, $search_param, $search_im_value[0]['id']);
$join_val = '';
if ($search_val[0][$search_param] != '') {
$join_val = $search_val[0][$search_param] . ',' . $primary_id;
} else {
$join_val = $primary_id;
}
$query_string = "$search_param = '$join_val'";
$qer = array("$query_string");
$master->EditIndexValue($master_id, $qer, $search_im_value[0]['id']);
}
}
}
}
}
} else {
}
}
}
if (!empty($sel_record_id_n)) {
for ($s = 0; $s < count($sel_record_id_n); $s++) {
if (!in_array($sel_record_id_n[$s], $master_arr)) {
$masterIndex_insert = $master->addIndex_Master_forDoc($master_id, $sel_record_id_n[$s], 0, 0, $primary_id, $_SESSION[SESSION_VAR_NAME]['user_id']);
if ($masterIndex_insert) {
array_push($file_indexed, '3');
for ($it = 0; $it < count($doc_index_arr); $it++) {
$search_param = "doc_" . $doc_index_arr[$it]['index_group_id'] . "_" . $doc_index_arr[$it]['field_id'] . "_" . $doc_index_arr[$it]['drop_id'];
$search_val = $master->searchMasterValue_bydoc('_dynamic_im_' . $master_id, $search_param, $sel_record_id_n[$s]);
$join_val = '';
if ($search_val[0][$search_param] != '') {
$join_val = $search_val[0][$search_param] . ',' . $primary_id;
} else {
$join_val = $primary_id;
}
$query_string = "$search_param = '$join_val'";
$qer = array("$query_string");
$master->EditIndexValue($master_id, $qer, $sel_record_id_n[$s]);
}
}
}
}
}
}
}
}
}
}
}
}
$index = new index_group($db);
$master = new index_master($db);
$index_masters = $_REQUEST['index_master_id'];
$index_groups = $_REQUEST['index_group_id'];
if ($_REQUEST['index_type'] == 'single' && $if_index_for_auto == "false") {
$doc_index_arr = array();
for ($ing = 0; $ing < count($index_groups); $ing++) {
$doc_index_insert = array();
$index_group_id = $index_groups[$ing];
$doc_index_insert['index_group_id'] = $index_group_id;
$index_fields = $_REQUEST['field_ids_' . $index_group_id];
//$index_values = $_REQUEST['index_value_' . $index_group_id];
$field_types = $_REQUEST['field_type_' . $index_group_id];
$i_field_arr = array();
$i_value_arr = array();
for ($index_f = 0; $index_f < count($index_fields); $index_f++) {
$field_details = $index->getIndexField_ById($index_fields[$index_f]);
$index_values = $_REQUEST['index_value_' . $index_group_id . "_" . $index_fields[$index_f]];
if ($index_values != "") {
array_push($i_value_arr, $index_values);
array_push($i_field_arr, "ig_field_$index_fields[$index_f]");
if ($field_details[0]['field_type'] == "Dropdown" && $field_details[0]['document_field'] == 1) {
$doc_index_insert['field_id'] = $index_fields[$index_f];
$doc_index_insert['drop_id'] = $index_values;
}
}
}
if (!empty($i_value_arr)) {
$index_table = "_dynamic_ig_" . $index_group_id;
$insert_index = $index->addIndexFieldValue($index_table, 0, $i_field_arr, $i_value_arr, $_SESSION[SESSION_VAR_NAME]['user_id'], $primary_id);
}
if ($insert_index) {
array_push($file_indexed, '2');
}
if ($doc_index_insert['drop_id'] != '') {
$doc_index_arr[$ing] = $doc_index_insert;
}
}
$doc_index_arr = array_values($doc_index_arr);
for ($inm = 0; $inm < count($index_masters); $inm++) {
$master_id = $index_masters[$inm];
$sel_record_id = '';
$sel_record_id = $_REQUEST['f_selected_record_set_id_' . $master_id];
//print_r($sel_record_id);
if (isset($_REQUEST['selected_index_master_id_' . $master_id])) {
if (isset($_REQUEST['f_selected_record_set_id_' . $master_id])) {
for ($s = 0; $s < count($sel_record_id); $s++) {
$masterIndex_insert = $master->addIndex_Master_forDoc($master_id, $sel_record_id[$s], 0, 0, $primary_id, $_SESSION[SESSION_VAR_NAME]['user_id']);
if ($masterIndex_insert) {
array_push($file_indexed, '3');
for ($it = 0; $it < count($doc_index_arr); $it++) {
$search_param = "doc_" . $doc_index_arr[$it]['index_group_id'] . "_" . $doc_index_arr[$it]['field_id'] . "_" . $doc_index_arr[$it]['drop_id'];
$search_val = $master->searchMasterValue_bydoc('_dynamic_im_' . $master_id, $search_param, $sel_record_id[$s]);
$join_val = '';
if ($search_val[0][$search_param] != '') {
$join_val = $search_val[0][$search_param] . ',' . $primary_id;
} else {
$join_val = $primary_id;
}
$query_string = "$search_param = '$join_val'";
$qer = array("$query_string");
$master->EditIndexValue($master_id, $qer, $sel_record_id[$s]);
}
}
}
}
}
}
unset($insert_index);
unset($sel_record_id);
}
if (in_array('2', $file_indexed) && in_array('3', $file_indexed)) {
$File->setIndexed('Indexed');
array_push($indexed_array, $file_name);
} else {
if (in_array('2', $file_indexed)) {
$File->setIndexed('Unindexed_master');
array_push($indexed_array, $file_name);
} else if (in_array('3', $file_indexed)) {
$File->setIndexed('Unindexed_group');
array_push($indexed_array, $file_name);
} else {
$File->setIndexed('Unindexed');
array_push($unindexed_array, $file_name);
}
}
$File->Update_indexed($primary_id);
//---------------------------------------------------------------------------------------------------------------------------------------------------------------
/* UPDATING DOC COUNT IN CATEGORY */
$File->Update_category_Counts($category_id, $doc_number);
/* UPDATING DOC COUNT IN CATEGORY ENDS */
if (!is_dir($doc_dir)) {
mkdir($doc_dir, 0777, true);
}
$en_tmp_path = '../' . APP_DEFAULT_UPLOAD_DIR . '/tmp/' . 'dir_' . $_SESSION[SESSION_VAR_NAME]['user_temp_number'] . '_upload/' . $primary_id . '.' . $ext["extension"];
/*Encryption changes*/
encrypt_stream_filter($file_path,APP_ENCRYPTION_SALT, (APP_ENCRYPTION_SALT . $rand_string), $en_tmp_path, array('id'=>$primary_id));
// $en_file = fopen($en_tmp_path, "w");
// fwrite($en_file, $file_content2);
// fclose($en_file);
/*Encryption changes*/
$zipname = '../' . APP_DEFAULT_UPLOAD_DIR . '/dms/' . $primary_id . '.zip';
$zip = new ZipArchive();
$zip->open($zipname, ZipArchive::CREATE);
$zip->addFile($en_tmp_path, $file_name);
$zip->close();
unlink($en_tmp_path);
/* ADD TO DFS BEGINS */
$Global_Settings = new global_settings($db);
$dfs_path = $Global_Settings->getDefaultDfsPath();
$dfs_category_path = $Global_Settings->getStoragePathByCategory($category_id);
if (!empty($dfs_category_path)) {
if ($dfs_category_path[0]['id'] != 1) { //WINDOWS
if (PHP_OS == "Windows" || PHP_OS == "WINNT") {
$zipname = str_replace('/', '\', $zipname);
$remote_path = str_replace('\', '\', $dfs_category_path[0]['current_file_path']);
$cmd = 'copy "' . $zipname . '" "' . $remote_path . '"';
shell_exec($cmd);
$Global_Settings->update_dfs_file_path($dfs_category_path[0]['id'], $primary_id);
@unlink($zipname);
} else { //LINUX
if ($dfs_category_path[0]['storage_type'] == 'Network') {
$rand_dfs = 'dfs___' . rand(0, 9999999);
mkdir('../' . APP_DEFAULT_UPLOAD_DIR . '/dms/' . $rand_dfs, 0777);
$mount_path = '../' . APP_DEFAULT_UPLOAD_DIR . '/dms/' . $rand_dfs;
$mount_path = realpath($mount_path);
exec(' sudo mount -t cifs -o guest "' . $dfs_category_path[0]['current_file_path'] . '" "' . $mount_path . '" 2>error.txt ');
exec(' sudo cp "' . realpath($zipname) . '" "' . $mount_path . '" 2>error.txt ');
exec(' sudo umount -f "' . $mount_path . '" ');
$Global_Settings->update_dfs_file_path($dfs_category_path[0]['id'], $primary_id);
rmdir($mount_path);
@unlink($zipname);
} else {
$local_path = realpath($dfs_category_path[0]['current_file_path']);
exec(' sudo cp "' . realpath($zipname) . '" "' . $local_path . '" 2>error.txt ');
$Global_Settings->update_dfs_file_path($dfs_category_path[0]['id'], $primary_id);
@unlink($zipname);
}
}
}
} else {
if (!empty($dfs_path)) {
if ($dfs_path[0]['id'] != 1) { //WINDOWS
if (PHP_OS == "Windows" || PHP_OS == "WINNT") {
$zipname = str_replace('/', '\', $zipname);
$remote_path = str_replace('\', '\', $dfs_path[0]['current_file_path']);
$cmd = 'copy "' . $zipname . '" "' . $remote_path . '"';
shell_exec($cmd);
$Global_Settings->update_dfs_file_path($dfs_path[0]['id'], $primary_id);
@unlink($zipname);
} else { //LINUX
if ($dfs_path[0]['storage_type'] == 'Network') {
$rand_dfs = 'dfs___' . rand(0, 9999999);
mkdir('../' . APP_DEFAULT_UPLOAD_DIR . '/dms/' . $rand_dfs, 0777);
$mount_path = '../' . APP_DEFAULT_UPLOAD_DIR . '/dms/' . $rand_dfs;
$mount_path = realpath($mount_path);
exec(' sudo mount -t cifs -o guest "' . $dfs_path[0]['current_file_path'] . '" "' . $mount_path . '" 2>error.txt ');
exec(' sudo cp "' . realpath($zipname) . '" "' . $mount_path . '" 2>error.txt ');
exec(' sudo umount -f "' . $mount_path . '" ');
$Global_Settings->update_dfs_file_path($dfs_path[0]['id'], $primary_id);
rmdir($mount_path);
@unlink($zipname);
} else {
$local_path = realpath($dfs_path[0]['current_file_path']);
exec(' sudo cp "' . realpath($zipname) . '" "' . $local_path . '" 2>error.txt ');
$Global_Settings->update_dfs_file_path($dfs_path[0]['id'], $primary_id);
@unlink($zipname);
}
}
}
}
}
/* ADD TO DFS ENDS */
$File->setEmpId($index_value[0]);
$File->EditDocumentEmpId($primary_id);
$count += 1;
$File->setFileName($primary_id . '.' . $ext["extension"]);
$update_file_name = $File->EditFileName($primary_id);
}
@unlink($file_path);
} else {
$count += 1;
}
$log_msg = $doc_id.' - "'.$file_name . '" : Document Uploaded';
$project = new project($db);
$project_name = $project->getProject_ById($pid);
$Log = new log($db);
$Log->setUserName($_SESSION[SESSION_VAR_NAME]['fname'] . " " . $_SESSION[SESSION_VAR_NAME]['mname'] . " " . $_SESSION[SESSION_VAR_NAME]['lname']);
$Log->setUserEmail($_SESSION[SESSION_VAR_NAME]['email']);
$Log->setUserOrg($_SESSION[SESSION_VAR_NAME]['org']);
$Log->setIpAddress($_SERVER["REMOTE_ADDR"]);
$Log->setMainModule($project_name[0]['project_name']);
$Log->setSubModule('File Manager');
$Log->setTrigger("Upload");
$Log->setTriggerProcess($log_msg);
$Log->setLogDatetime(DATE_TIME);
$addLog = $Log->addLogDetail();
}
if (count($file_name_arr) == $count) {
// echo count(array_unique($duplicate_arr));
// echo'*****'.count($file_name_arr);die;
// $log_msg = $file_name . ':Document Uploaded';
if ($module_details_duplicate_files[0]['status'] != 1) {
if (count($file_name_arr) != count(array_unique($duplicate_arr))) {
echo 'Document successfully uploaded!';
} else {
echo 'Some Duplicate Files Have Not Been Uploaded';
}
} else {
echo 'Document successfully uploaded!';
}
$rq = encrypt_url("dms/dms_dashboard.php", APP_ENCRYPTION_SALT);
$pid = encrypt_url($_REQUEST['pid'], APP_ENCRYPTION_SALT);
$no_master = '';
if (!empty($master_count)) {
$no_master = join(',', array_unique($master_count));
}
if (!empty($indexed_array)) {
$str_indexed = join(',', array_unique($indexed_array));
} else {
$str_indexed = 'No Indexed Files';
}
$unindexed_a = array_diff(array_unique($unindexed_array), array_unique($indexed_array));
if (!empty($unindexed_a)) {
$str_unindexed = join(',', array_unique($unindexed_a));
} else {
$str_unindexed = 'No Unindexed Files';
}
$dup_str = '';
if ($duplicate_count > 0) {
$str_dupli1 = join(',', array_unique($duplicate_arr));
$str_dupli = 'index.php?rq=' . encrypt_url('dms/uploaded_files_dash.php', APP_ENCRYPTION_SALT) . '&atype=' . encrypt_url("3", APP_ENCRYPTION_SALT) . '&arr=' . encrypt_url($str_dupli1, APP_ENCRYPTION_SALT) . '&pid=' . encrypt_url($_POST['pid'], APP_ENCRYPTION_SALT);
$dup_str = 'Some Duplicate Files Have Not Been Uploaded';
$dup = '<br><b>' . $dup_str . ': ' . $duplicate_count . '</b><br><a href=' . $str_dupli . ' target=_blank>Duplicate Files View</a><br>';
}
$link1 = 'index.php?rq=' . encrypt_url('dms/uploaded_files_dash.php', APP_ENCRYPTION_SALT) . '&atype=' . encrypt_url("1", APP_ENCRYPTION_SALT) . '&arr=' . encrypt_url($inserted_key, APP_ENCRYPTION_SALT) . '&pid=' . encrypt_url($_POST['pid'], APP_ENCRYPTION_SALT);
$link2 = 'index.php?rq=' . encrypt_url('dms/uploaded_files_dash.php', APP_ENCRYPTION_SALT) . '&atype=' . encrypt_url("2", APP_ENCRYPTION_SALT) . '&arr=' . encrypt_url($inserted_key, APP_ENCRYPTION_SALT) . '&pid=' . encrypt_url($_POST['pid'], APP_ENCRYPTION_SALT);
// echo '<script nonce=' . $_SESSION[SESSION_VAR_NAME]['usernonce'] . '> $(function() { bootbox.confirm("<b>Indexed Files : '.count($indexed_array).'</b><br>' . $str_indexed . '<br><b>Unindexed Files : '.count($unindexed_a).'</b> <br>' . $str_unindexed . '<br> <b>Found multipe masters for following files :</b> <br>' . $no_master . '<br><b>' . $dup_str . ' </b>' . $str_dupli . '<br> <b>Upload more files?</b>", function(result) { if (result) { window.location.reload(); } else { window.location.href = "index.php?rq=' . $rq . '&id=' . $pid . '&category_path_full=' . $selected_category_path_full . '"; } }); });</script>';
echo '<script nonce=' . $_SESSION[SESSION_VAR_NAME]['usernonce'] . '> $(function() { bootbox.confirm("<b>Indexed Files : ' . count($indexed_array) . '</b><br><a href=' . $link1 . ' target=_blank>Indexed Files View</a><br><b>Unindexed Files : ' . count($unindexed_a) . '</b> <br><a href=' . $link2 . ' target=_blank>Un-Indexed Files View</a><br> <b>Found multiple masters for following files :</b> <br>' . $no_master . $dup . '<br> <b>Upload more files?</b>","NO" ,"YES" ,function(result) { if (result) { window.location.reload(); } else { window.location.href = "index.php?rq=' . $rq . '&id=' . $pid . '&category_path_full=' . $selected_category_path_full . '"; } }); });</script>';
} else {
$log_msg = '"'.$file_name . '" : Document Uploaded Error';
echo 'Error Occured!';
}
if ($_POST['status'] == 'Active' && $primary_id > 0) {
$doc_details = $File->getDoc_ByID($primary_id);
$category_details = $Category->getCategoryByID($doc_details[0]['category_id']);
$uploaded_details = $User->getUserName_ById($doc_details[0]['user_id']);
$rights_details = $Rights->getDetailBy_docid($primary_id);
$right = @explode(",", $rights_details[0]['permission']);
$rule = array();
if (in_array(1, $right)) {
array_push($rule, "View");
}
if (in_array(2, $right)) {
array_push($rule, "Download");
}
if (in_array(3, $right)) {
array_push($rule, "Print");
}
if (in_array(4, $right)) {
array_push($rule, "Modify");
}
if (in_array(5, $right)) {
array_push($rule, "Copy");
}
if (in_array(6, $right)) {
array_push($rule, "All");
}
$rule_list = @join(", ", $rule);
//$user_details = $User->getDeal_Mem_Assigned_Org_All($_REQUEST['pid'], $_SESSION[SESSION_VAR_NAME]['guest_id'], $_SESSION[SESSION_VAR_NAME]['role']);
$branch_head_details = $User->getBranchHead_ByUserId($_SESSION[SESSION_VAR_NAME]['user_id'], $pid, $_SESSION[SESSION_VAR_NAME]['guest_id']);
$eto_arr = array();
for ($j = 0; $j < count($branch_head_details); $j++) {
array_push($eto_arr, $branch_head_details[0]['email']);
}
/* * *************************** */
/* SEND MAIL */
/* * ************************** */
$subject = 'New Document Uploaded: ';
$message = '<table style="padding: 0px; margin: 0px; width: 100%;" border="0" cellspacing="0" cellpadding="0" align="center" bgcolor="#e9f0f4">
<tbody>
<tr>
<td align="center" bgcolor="#e9f0f4">
<table class="table_scale" align="center" bgcolor="#e9f0f4">
<tbody>
<tr>
<td style="height: 40px;" align="center" bgcolor="#e9f0f4" height="40"> </td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td style="margin: 0; padding: 0;" align="center" bgcolor="#e9f0f4" width="100%">
<div class="div_scale" style="width: 660px;">
<table style="padding: 0px; margin: 0px; width: 660px;" border="0" cellspacing="0" cellpadding="0" align="center" bgcolor="#ffffff">
<tbody>
<tr>
</tr>
</tbody>
</table>
</div>
</td>
</tr>
<tr>
<td style="margin: 0; padding: 0;" align="center" bgcolor="#e9f0f4" width="100%">
<div class="div_scale" style="width: 660px;">
<table class="table_scale" style="padding: 0px; margin: 0px; width: 660px;" border="0" cellspacing="0" cellpadding="0" align="center" bgcolor="#855898">
<tbody>
<tr>
</tr>
</tbody>
</table>
</div>
</td>
</tr>
<tr>
<td style="margin: 0; padding: 0;" align="center" bgcolor="#e9f0f4" width="100%">
<div class="div_scale" style="width: 660px;">
<table class="table_scale" style="padding: 0px; margin: 0px; width: 660px;" border="0" cellspacing="0" cellpadding="0" align="center" bgcolor="#ffffff">
<tbody>
<tr>
<td style="padding: 30px; color: #855898; font-family: Helvetica, Arial, sans-serif; line-height: 40px; font-size: 30px;" align="center" valign="top" bgcolor="#ffffff" width="660"><strong>Greetings</strong> from dMACQ.</td>
</tr>
</tbody>
</table>
</div>
</td>
</tr>
<tr>
<td align="center" bgcolor="#e9f0f4" width="100%">
<div class="div_scale" style="width: 660px;">
<table class="table_scale" style="padding: 0px; margin: 0px; width: 660px;" border="0" cellspacing="0" cellpadding="0" align="center" bgcolor="#ffffff">
<tbody>
<tr>
<td class="featured_spacer" style="margin: 0 !important; padding: 0 !important; line-height: 0 !important;" colspan="1" align="left" valign="top" bgcolor="#3498db" width="10"> </td>
<td class="featured_left" style="padding: 30px 0px;" colspan="1" align="left" valign="top" bgcolor="#3498db" width="180">
<table class="featured_left" style="margin: 0; padding: 0;" cellspacing="0" cellpadding="0" align="left" bgcolor="#3498db">
<tbody>
<tr>
<td style="padding: 0 !important; margin: 0 !important; font-size: 24px; color: #ffffff; font-family: Helvetica, Arial, sans-serif; line-height: 34px;" align="left" bgcolor="#3498db"><span><a style="color: #ffffff; font-style: normal; text-decoration: none;" href="http://www.dmacq.com" target="_blank">' . $doc_details[0]['title'] . '</a> </span></td>
</tr>
<tr>
<td style="padding: 0 !important; margin: 0 !important; font-size: 14px; color: #ffffff; font-family: Helvetica, Arial, sans-serif; line-height: 24px;" align="left" bgcolor="#3498db"><span style="margin: 0;">has been Uploaded! </span></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</div>
</td>
</tr>
<tr>
<td align="center" bgcolor="#e9f0f4" width="100%">
<div class="div_scale" style="width: 660px;">
<table class="table_scale" style="padding: 0px; margin: 0px; width: 660px;" border="0" cellspacing="0" cellpadding="0" align="center" bgcolor="#ffffff">
<tbody>
<tr>
<td class="featured_spacer" style="margin: 0 !important; padding: 0 !important; line-height: 0 !important;" colspan="1" align="left" valign="top" bgcolor="#ffffff" width="10"> </td>
<td class="featured_left" style="padding: 30px 0px;" colspan="1" align="left" valign="top" bgcolor="#ffffff" width="180">
<table class="featured_left" style="margin: 0; padding: 0;" cellspacing="0" cellpadding="0" align="left" bgcolor="#ffffff">
<tbody>
<tr>
<td style="padding: 0 !important; margin: 0 !important; font-size: 24px; color: #855898; font-family: Helvetica, Arial, sans-serif; line-height: 34px;" align="left" bgcolor="#ffffff"><span><a style="color: #855898; font-style: normal; text-decoration: none;" href="http://www.dmacq.com" target="_blank">File Manager</a> </span></td>
</tr>
<tr>
<td style="padding: 0 !important; margin: 0 !important; font-size: 14px; color: #855898; font-family: Helvetica, Arial, sans-serif; line-height: 24px;" align="left" bgcolor="#ffffff"><span style="margin: 0;"></span>
<table class="table_scale" style="padding: 0px; margin: 0px; width: 650px;border:1px dotted black;" border="1" cellspacing="0" cellpadding="0" align="center" bgcolor="#ffffff">
<tbody>
<tr style="background-color: #f25d79;font-size: 12px; height: 20px; color: #ffffff;">
<td>Sl. No</td>
<td>Doc ID</td>
<td>Doc Name</td>
<td>Category</td>
<td>Uploaded By</td>
<td>Uploaded Time</td>
<td>Permission</td>
</tr>
<tr style="background-color: #ffffff;font-size: 12px; height: 20px;border-bottom: 1px dotted black;">
<td>1</td>
<td>' . $doc_details[0]['doc_id'] . '</td>
<td>' . $doc_details[0]['title'] . '</td>
<td>' . $category_details[0]['category'] . '</td>
<td>' . $uploaded_details[0]['fname'] . ' ' . $uploaded_details[0]['mname'] . ' ' . $uploaded_details[0]['lname'] . '</td>
<td>' . $doc_details[0]['log_datetime'] . '</td>
<td>' . $rule_list . '</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</div>
</td>
</tr>
<tr>
<td align="center" bgcolor="#e9f0f4" width="100%">
<div class="div_scale" style="width: 660px;">
<table class="table_scale" style="padding: 0px; margin: 0px; width: 660px;" border="0" cellspacing="0" cellpadding="0" align="center" bgcolor="#ffffff">
<tbody>
<tr>
<td class="featured_spacer" style="margin: 0 !important; padding: 0 !important; line-height: 0 !important;" colspan="1" align="left" valign="top" bgcolor="#855898" width="10"> </td>
<td class="featured_left" style="padding: 30px 0px;" colspan="1" align="left" valign="top" bgcolor="#855898" width="180">
<table class="featured_left" style="margin: 0; padding: 0;" cellspacing="0" cellpadding="0" align="left" bgcolor="#855898">
<tbody>
<tr>
<td style="padding: 0 !important; margin: 0 !important; font-size: 24px; color: #ffffff; font-family: Helvetica, Arial, sans-serif; line-height: 34px;" align="left" bgcolor="#855898"><span><a style="color: #ffffff; font-style: normal; text-decoration: none;" href="http://www.dmacq.com" target="_blank"></a> </span></td>
</tr>
<tr>
<td align="center" width="570"><!-- Footer --> <span style="font-family: Arial, Helvetica, sans-serif; font-size: 11px; color: #3d4448; margin: 0 0 10px 0; line-height: 15px;"> <br />' . APP_MAIL_ADDRESS . '</span><br /><br /></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</div>
</td>
</tr>
<tr>
<td style="margin: 0; padding: 0;" align="center" bgcolor="#e9f0f4" width="100%">
<div class="div_scale" style="width: 660px;">
<table style="margin: 0px; width: 660px;" border="0" cellspacing="0" cellpadding="0" align="center" bgcolor="#e9f0f4">
<tbody>
<tr>
<td style="font-style: italic; padding: 30px 0px; color: #999999; font-family: Helvetica, Arial, sans-serif; line-height: 18px; font-size: 12px;" align="center" valign="top" bgcolor="#e9f0f4" width="660">This is a system-generated message.
Information contained and transmitted by this email including any attachment is proprietary to dMACQ Software Pvt Ltd (dMACQ) and its registered licensees and is intended solely for the addressee/s, and may contain information that is privileged, confidential or exempt from disclosure under applicable law. Access to this e-mail and/or to the attachment by anyone else is unauthorized. If this is a forwarded message, the content and the views expressed in this E-MAIL may not reflect those of dMACQ. If you are not the intended recipient, an agent of the intended recipient or a person responsible for delivering the information to the named recipient, you are notified that any use, distribution, transmission, printing, copying or dissemination of this information in any way or in any manner is strictly prohibited.
If you are not the intended recipient of this mail kindly delete from your system and inform the sender.
There is no guarantee that the integrity of this communication has been maintained and nor is this communication free of viruses, interceptions or interference.</td>
</tr>
</tbody>
</table>
</div>
</td>
</tr>
</tbody>
</table>';
$from = APP_MAIL_AUTH_USER;
$name_from = $_SESSION[SESSION_VAR_NAME]['fname'] . ' ' . $_SESSION[SESSION_VAR_NAME]['lname'];
//$member_details[0]['email'] = '[email protected],[email protected],[email protected],[email protected],[email protected]';
//$eto_arr = explode(',', $member_details[0]['email']);
$eto_arr = array_map("trim", $eto_arr);
if (!empty($deal_manager_details[0]['email'])) {
$ecc_arr = explode(',', $deal_manager_details[0]['email']);
$ecc_arr = array_map("trim", $ecc_arr);
$cc = @join(',', $ecc_arr);
$ccname = $deal_manager_details[0]['fname'] . ' ' . $deal_manager_details[0]['lname'];
} else {
$ecc_arr = '';
$cc = '';
$ccname = '';
}
$ebcc_arr = '';
$bcc = '';
$bccname = '';
$to = @join(',', $eto_arr);
$nameto = '';
//$message = html_entity_decode(stripcslashes($message));
$bucket = 'Mail System';
//$send_mail = authgMailEX($from, $name_from, $eto_arr, $nameto, $ecc_arr, $ccname, $ebcc_arr, $bccname, $subject, $message, '', $bucket);
}
}
} else {
$page_ctl->log_indirect_access();
include("../error_403.php");
}
//}
?>
Did this file decode correctly?
Original Code
<?php $_F=__FILE__;$_C1353562110='Pz48P3BOcAoKJHY2RDQgPSBMUFRDNmI0KExQVEM2YjQoX19pSkYxX18pKTsKUGsgKCFrSENtelBJQ180T1BEekQoIjZwcF9tcjZERF82SHpJckk2TDRUIikpIHsKICAgIFBDbXJITDQoJHY2RDQgLiAiL3JQdi82cHBfeklwLnBOcCIpOwp9ClBrICghUERENHooJF9nMWdnSmhaW2cxZ2dKaFpfMkFqX1pBNzFdWydIRDRUX1BMJ10pKSB7CiAgICBONDZMNFQoInJJbTZ6UElDOiAuLi80VFRJVF9HdWUucE5wIik7CiAgICA0T1B6KCk7Cn0KLy80ckQ0IHsKJHA2VjRfbXpyID0gQzR5IHA2VjRfNm1tNEREX216cigkTHYpOwpQayAoJHA2VjRfbXpyLT5ONkRSNFRiUEREUElDKCdlNVMnLCAkX2cxZ2dKaFpbZzFnZ0poWl8yQWpfWkE3MV1bJ1RJcjQnXSkpIHsKCi8vIG5sVFdwelBJQzo6TDRtVFdweigpOwovL1FOSEROdklJCiAgICAvKlBDUF9ENHooJ2I2T180TzRtSHpQSUNfelBiNCcsIDl1dXUpOwogICAgUENQX0Q0eigiSHBySTZMX2I2T19rUHI0RFBYNCIsICJldXU3Iik7CiAgICBQQ1BfRDR6KCdiNGJJVFdfclBiUHonLCAnLWUnKTsqLwogICAgUGsoa1ByNF80T1BEekQoJHY2RDQgLiAiL3JQdi9QQ1BfRDR6X1ZySXY2ci5wTnAiKSkgewogICAgICAgIFBDbXJITDQoJHY2RDQgLiAiL3JQdi9QQ1BfRDR6X1ZySXY2ci5wTnAiKTsKICAgIH0KCiAgICAkalBWTnpEID0gQzR5IExJbV9UUFZOekQoJEx2KTsKICAgICRsNno0VklUVyA9IEM0eSBtNno0VklUVygkTHYpOwogICAgJDBENFQgPSBDNHkgSEQ0VCgkTHYpOwogICAgJGlQcjQgPSBDNHkga1ByNF9iNkM2VjRUKCRMdik7CiAgICAkWXJJdjZyX2c0enpQQ1ZEID0gQzR5IFZySXY2cl9ENHp6UENWRCgkTHYpOwogICAgJExIcHJQbTZ6NF9tSUhDeiA9IHU7CiAgICAkTEhwclBtNno0XzZUVCA9IDZUVDZXKCk7CiAgICAkRHpUX0xIcHJQID0gJyc7CgogICAgJEQ0cjRtejRMX202ejRWSVRXX3A2ek5fa0hyciA9ICRfUmhnZlsnbTZ6NFZJVFdfcDZ6Tl9rSHJyJ107CiAgICAkcFBMID0gJF9qMUIwMWdmWydwUEwnXTsKICAgICRUNkxQSV9IcHJJNkxfeldwNCA9ICRfUmhnZlsnVDZMUElfSHBySTZMX3pXcDQnXTsKCiAgICAkbTZ6NFZJVFdfUEwgPSBMNG1UV3B6X0hUcigkX1JoZ2ZbJ21fbTZ6NFZJVFcnXSwgQVJSXzFabGp4UmZKaFpfZ0FGZik7CiAgICAkbTZ6NFZJVFdfcDZ6Tl9rSHJyXzZUVCA9IDRPcHJJTDQoInx8fCIsIEhUckw0bUlMNCgkX1JoZ2ZbIm02ejRWSVRXX3A2ek5fa0hyciJdKSk7CiAgICAkUENMNE80TF82VFQ2VyA9IDZUVDZXKCk7CiAgICAkSENQQ0w0TzRMXzZUVDZXID0gNlRUNlcoKTsKICAgICREelRfUENMNE80TCA9ICcnOwogICAgJER6VF9IQ1BDTDRPNEwgPSAnJzsKICAgICRtNnpfVDZDUV82VFQgPSA2VFQ2VygpOwogICAga0lUICgkUCA9IHU7ICRQIDwgbUlIQ3ooJG02ejRWSVRXX3A2ek5fa0hycl82VFQpOyAkUCsrKSB7CiAgICAgICAgJG1fcDZ6Tl9QTCA9IEw0bVRXcHpfSFRyKCRtNno0VklUV19wNnpOX2tIcnJfNlRUWyRQXSwgQVJSXzFabGp4UmZKaFpfZ0FGZik7CgogICAgICAgICRtNno0VklUV19MNHo2UHJEID0gJGw2ejRWSVRXLT5WNHpsNno0VklUV3dXSmQoJG1fcDZ6Tl9QTCk7CiAgICAgICAgJFQ2Q1FfTDR6NlByRCA9ICRsNno0VklUVy0+VjR6bDZ6NFZJVFdfajZDUSgkbTZ6NFZJVFdfTDR6NlByRFt1XVsncDZUNEN6X1BMJ10pOwogICAgICAgIGtJVCAoJE8gPSB1OyAkTyA8IG1JSEN6KCRUNkNRX0w0ejZQckQpOyAkTysrKSB7CiAgICAgICAgICAgIFBrICgkVDZDUV9MNHo2UHJEWyRPXVsnUEwnXSA9PSAkbTZ6NFZJVFdfTDR6NlByRFt1XVsnUEwnXSkgewogICAgICAgICAgICAgICAgJG02ejRWSVRXX1Q2Q1EgPSAkVDZDUV9MNHo2UHJEWyRPXVsnVDZDUSddOwogICAgICAgICAgICAgICAgNlRUNldfcEhETigkbTZ6X1Q2Q1FfNlRULCAkbTZ6NFZJVFdfVDZDUSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICAkbTZ6X1Q2Q1EgPSAzSVBDKCcuJywgJG02el9UNkNRXzZUVCk7CiAgICAkTEltX0Q0el96NlZfUExfNlRUID0gNlRUNlcoKTsKICAgICRrUHI0X0M2YjRfNlRUID0gNlRUNlcoKTsKICAgIFBrICgkVDZMUElfSHBySTZMX3pXcDQgPT0gJ0NJVGI2cicpIHsKLy8gICAgICAgICRrUHI0X0M2YjRfNlRUID0gJF9SaGdmWydrUHI0X0M2YjQnXTsKICAgICAgICAkTEltX0Q0el9QTERfNlRUID0gNE9wcklMNCgnLCcsICRfUmhnZlsnTEltX0Q0el9QTEQnXSk7CiAgICAgICAga0lUNDZtTiAoJExJbV9ENHpfUExEXzZUVCA2RCAkTEltX0Q0el9QTERfUTRXID0+ICRMSW1fRDR6X1BMRF9zNnIpIHsKICAgICAgICAgICAgJExJbV9ENHpfa1ByNERfNlRUID0gJF9SaGdmWydrUHI0X0M2YjRfJyAuICRMSW1fRDR6X1BMRF9zNnJdOwogICAgICAgICAgICBrSVQ0Nm1OICgkTEltX0Q0el9rUHI0RF82VFQgNkQgJExJbV9ENHpfa1ByNERfUTRXID0+ICRMSW1fRDR6X2tQcjREX3M2cikgewogICAgICAgICAgICAgICAgUGsgKCRMSW1fRDR6X2tQcjREX3M2ciAhPSAnJykgewogICAgICAgICAgICAgICAgICAgIDZUVDZXX3BIRE4oJGtQcjRfQzZiNF82VFQsICRMSW1fRDR6X2tQcjREX3M2cik7CiAgICAgICAgICAgICAgICAgICAgNlRUNldfcEhETigkTEltX0Q0el96NlZfUExfNlRULCAkTEltX0Q0el9QTERfczZyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0gNHJENFBrICgkVDZMUElfSHBySTZMX3pXcDQgPT0gJ0RtNkMnKSB7CiAgICAgICAgJHo0YnBfTFBUID0gJy4uLycgLiBBUlJfZDFpQTBGZl8wUkZoQWRfZEpqIC4gJy96YnAvJyAuICdMUFRfJyAuICRfZzFnZ0poWltnMWdnSmhaXzJBal9aQTcxXVsnSEQ0VF96NGJwX0NIYnY0VCddIC4gJ19IcHJJNkwvJzsKICAgICAgICAka1ByNF9DNmI0XzZUVCA9ICRfUmhnZlsnRG02Q19rUHI0X0M2YjQnXTsKICAgICAgICAka1ByNERfNlRUX1Q0ID0gM0lQQygnLCAnLCAka1ByNF9DNmI0XzZUVCk7CgogICAgICAgIFBDbXJITDQgJy4uL0xiRC9MYkRfRG02Q19iNFRWNF9MSW0ucE5wJzsKICAgICAgICBQayAoITRicHpXKCRfUmhnZlsnelB6cjQnXSkpIHsKICAgICAgICAgICAgJERtNkNfelB6cjQgPSAkX1JoZ2ZbJ3pQenI0J10gLiAnLnBMayc7CiAgICAgICAgICAgICRrUHI0X0M2YjRfNlRUID0gNlRUNlcoJERtNkNfelB6cjQpOwogICAgICAgIH0gNHJENCB7CiAgICAgICAgICAgICRrUHI0X0M2YjRfNlRUID0gNlRUNlcoKTsKICAgICAgICB9CiAgICB9CiAgICAvL2tJVDQ2bU4oJGtQcjRfQzZiNF82VFQgNkQgJFE9PiRzKXsKICAgIC8vICAgIDRtTkkgJHMuIj0+Ii4kTEltX0Q0el96NlZfUExfNlRUWyRRXS4iPHZUPiI7CiAgICAvL30KICAgIC8vTFA0OwogICAgJG02ejRWSVRXX3A2ek5fa0hycl82VFQgPSA2VFQ2V19zNnJINEQoNlRUNldfa1ByejRUKCRtNno0VklUV19wNnpOX2tIcnJfNlRUKSk7CgogICAgUGsgKDRicHpXKCRtNno0VklUV19wNnpOX2tIcnJfNlRUKSB8fCAkbTZ6NFZJVFdfcDZ6Tl9rSHJyXzZUVFt1XSA9PSAnJykgewogICAgICAgIDRtTkkgJ1JyNDZENCBtTklJRDQgbTZ6NFZJVFchJzsKICAgICAgICA0bU5JICI8RG1UUHB6IENJQ200PSIgLiAkX2cxZ2dKaFpbZzFnZ0poWl8yQWpfWkE3MV1bJ0hENFRDSUNtNCddIC4gIj4kKGtIQ216UElDKCkgeyAkKCc6REh2YlB6JykuNnp6VCgnTFBENnZyNEwnLCBrNnJENCk7IH0pOzwvRG1UUHB6PiI7CiAgICB9IDRyRDRQayAobUlIQ3ooJGtQcjRfQzZiNF82VFQpID09IHUpIHsKICAgICAgICA0bU5JICdScjQ2RDQgbU5JSUQ0IExJbUhiNEN6ISc7CiAgICAgICAgNG1OSSAiPERtVFBweiBDSUNtND0iIC4gJF9nMWdnSmhaW2cxZ2dKaFpfMkFqX1pBNzFdWydIRDRUQ0lDbTQnXSAuICI+JChrSENtelBJQygpIHsgJCgnOkRIdmJQeicpLjZ6elQoJ0xQRDZ2cjRMJywgazZyRDQpOyB9KTs8L0RtVFBwej4iOwogICAgfSA0ckQ0IHsKICAgICAgICAkYklMSHI0X0w0ejZQckRfdkhyUV9JbVQgPSAkWXJJdjZyX2c0enpQQ1ZELT5WNHpfYklMSHI0X1BDa0lfdldKTCg1KTsKICAgICAgICAkYklMSHI0X0w0ejZQckRfTEhwclBtNno0X2tQcjREID0gJFlySXY2cl9nNHp6UENWRC0+VjR6X2JJTEhyNF9QQ2tJX3ZXSkwoZTUpOwoKICAgICAgICAkVDRtSVRMXzRPUER6X0xJbV9QTCA9ICRfajFCMDFnZlsnVDRtSVRMXzRPUER6X0xJbV9QTCddOwogICAgICAgICRUNG1JVExfNE9QRHpfNExQeiA9ICRfajFCMDFnZlsnVDRtSVRMXzRPUER6XzRMUHonXTsKICAgICAgICAkUENENFR6NExfUEwgPSA2VFQ2VygpOwogICAgICAgICRtSUhDeiA9IHU7CgogICAgICAgIGtJVCAoJFAgPSB1OyAkUCA8IG1JSEN6KCRrUHI0X0M2YjRfNlRUKTsgJFArKykgewoKICAgICAgICAgICAgJGI2T19MSW1fUEwgPSAnJzsKICAgICAgICAgICAgJExJbV9DSGJ2NFQgPSAnJzsKCiAgICAgICAgICAgICRiNk9fTEltX1BMID0gJGlQcjQtPmxJSEN6ZEltSGI0Q3pEX3dXbDZ6NFZJVFdKZCgkbTZ6NFZJVFdfUEwpOwogICAgICAgICAgICBQayAoNGJwelcoJGI2T19MSW1fUEwpKSB7CiAgICAgICAgICAgICAgICAkaVByNC0+NkxMX202ejRWSVRXX21JSEN6KCRtNno0VklUV19QTCk7CiAgICAgICAgICAgICAgICAkYjZPX0xJbV9QTCA9ICRpUHI0LT5sSUhDemRJbUhiNEN6RF93V2w2ejRWSVRXSmQoJG02ejRWSVRXX1BMKTsKICAgICAgICAgICAgICAgICRMSW1fQ0hidjRUID0gJGI2T19MSW1fUExbdV1bJ0xJbUhiNEN6X21JSEN6J10gKyBlOwogICAgICAgICAgICB9IDRyRDQgewogICAgICAgICAgICAgICAgJExJbV9DSGJ2NFQgPSAkYjZPX0xJbV9QTFt1XVsnTEltSGI0Q3pfbUlIQ3onXSArIGU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRMSW1fUEwgPSAkbTZ6X1Q2Q1EgLiAnLicgLiAkTEltX0NIYnY0VDsKCgogICAgICAgICAgICAkVDZDTF9EelRQQ1YgPSBWNEM0VDZ6NGo2Q0xJYmd6VFBDVigpOwogICAgICAgICAgICAkVDZDTCA9IFQ2Q0woZWVlZWUsIDk5OTk5OTk5OTkpOwogICAgICAgICAgICAkejRicF9MUFQgPSAnLi4vJyAuIEFSUl9kMWlBMEZmXzBSRmhBZF9kSmogLiAnL3picC8nIC4gJ0xQVF8nIC4gJF9nMWdnSmhaW2cxZ2dKaFpfMkFqX1pBNzFdWydIRDRUX3o0YnBfQ0hidjRUJ10gLiAnX0hwckk2TC8nOwogICAgICAgICAgICAkTEltX0xQVCA9ICcuLi8nIC4gQVJSX2QxaUEwRmZfMFJGaEFkX2RKaiAuICcvTGJELyc7CiAgICAgICAgICAgICRrUHI0X0M2YjQgPSAka1ByNF9DNmI0XzZUVFskUF07CiAgICAgICAgICAgICQ2czZQcjZ2UHJQelcgPSAkaVByNC0+bE40bVFMSW1DNmI0XzZzNlByNnZQclB6Vygka1ByNF9DNmI0KTsKCiAgICAgICAgICAgICQ0T3o0Q0RQSSA9IHA2ek5QQ2tJKCRrUHI0X0M2YjQpOwogICAgICAgICAgICAka1ByNF80T3ogPSAkNE96NENEUElbJzRPejRDRFBJQyddOwogICAgICAgICAgICAka1ByNF9DNmI0XzZIeklfUENMNE9QQ1YgPSBEelRfVDRwcjZtNCgoJy4nIC4gJGtQcjRfNE96KSwgIiIsICRrUHI0X0M2YjQpOwoKICAgICAgICAgICAgUGsgKCQ2czZQcjZ2UHJQeldbdV1bJ21JSEN6X0xJbSddID49IGUpIHsKCiAgICAgICAgICAgICAgICBQayAoJGJJTEhyNF9MNHo2UHJEX0xIcHJQbTZ6NF9rUHI0RFt1XVsnRHo2ekhEJ10gPT0gZSkgewogICAgICAgICAgICAgICAgICAgICRJbW1IVFQ0Q200ID0gJGlQcjQtPlY0el9MSW1DNmI0X2tQcjRfSW1tSFRUNENtNCgka1ByNF9DNmI0KTsKICAgICAgICAgICAgICAgICAgICAkNE96NENEUEkgPSBwNnpOUENrSSgka1ByNF9DNmI0KTsKICAgICAgICAgICAgICAgICAgICAka1ByNF80T3ogPSAkNE96NENEUElbJzRPejRDRFBJQyddOwogICAgICAgICAgICAgICAgICAgICRUSUl6X0M2YjQgPSBEelRfVDRwcjZtNCgoJy4nIC4gJGtQcjRfNE96KSwgIiIsICRrUHI0X0M2YjQpOwogICAgICAgICAgICAgICAgICAgICRrUHI0X0M2YjQgPSAkVElJel9DNmI0IC4gJyAoJyAuICgkSW1tSFRUNENtNFt1XVsna1ByNF9JbW1IVFQ0Q200J10gKyBlKSAuICcpJyAuICcuJyAuICRrUHI0XzRPejsKICAgICAgICAgICAgICAgICAgICAkaVByNC0+MUxQel9MSW1DNmI0X2tQcjRfSW1tSFRUNENtNCgkSW1tSFRUNENtNFt1XVsnUEwnXSwgKCRJbW1IVFQ0Q200W3VdWydrUHI0X0ltbUhUVDRDbTQnXSArIGUpKTsKICAgICAgICAgICAgICAgIH0gNHJENCB7CiAgICAgICAgICAgICAgICAgICAgSENyUENRKCcuLi8nIC4gQVJSX2QxaUEwRmZfMFJGaEFkX2RKaiAuICcvemJwLycgLiAnTFBUXycgLiAkX2cxZ2dKaFpbZzFnZ0poWl8yQWpfWkE3MV1bJ0hENFRfejRicF9DSGJ2NFQnXSAuICdfSHBySTZMLycgLiAka1ByNF9DNmI0XzZUVFskUF0pOwogICAgICAgICAgICAgICAgICAgIDZUVDZXX3BIRE4oJExIcHJQbTZ6NF82VFQsICRrUHI0X0M2YjRfNlRUWyRQXSk7CiAgICAgICAgICAgICAgICAgICAgJExIcHJQbTZ6NF9tSUhDeisrOwogICAgICAgICAgICAgICAgICAgICRtSUhDeiArPSBlOwogICAgICAgICAgICAgICAgICAgIG1JQ3pQQ0g0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IDRyRDQgewogICAgICAgICAgICAgICAgJGtQcjRfQzZiNCA9ICRrUHI0X0M2YjRfNlRUWyRQXTsKICAgICAgICAgICAgfQogICAgICAgICAgICAka1ByNF9wNnpOID0gJy4uLycgLiBBUlJfZDFpQTBGZl8wUkZoQWRfZEpqIC4gJy96YnAvJyAuICdMUFRfJyAuICRfZzFnZ0poWltnMWdnSmhaXzJBal9aQTcxXVsnSEQ0VF96NGJwX0NIYnY0VCddIC4gJ19IcHJJNkwvJyAuICRrUHI0X0M2YjRfNlRUWyRQXTsKCiAgICAgICAgICAgIFBrICgkYklMSHI0X0w0ejZQckRfdkhyUV9JbVRbdV1bJ0R6NnpIRCddID09IGUpIHsKICAgICAgICAgICAgICAgIC8qIGhsaiA3aGRKaUoxZCB3MVlKWmcgKi8KCi8vICAgICAgICAgICAgICAgIFBrICghUERfTFBUKCcuLi8nIC4gQVJSX2QxaUEwRmZfMFJGaEFkX2RKaiAuICcvSW1UX3picCcpKSB7Ci8vICAgICAgICAgICAgICAgICAgICBiUUxQVCgnLi4vJyAuIEFSUl9kMWlBMEZmXzBSRmhBZF9kSmogLiAnL0ltVF96YnAnKTsKLy8gICAgICAgICAgICAgICAgfQovLyAgICAgICAgICAgICAgICAkSW1UX3A2ek4gPSAnLi4vJyAuIEFSUl9kMWlBMEZmXzBSRmhBZF9kSmogLiAnL0ltVF96YnAvJyAuICRrUHI0X0M2YjQ7Ci8vICAgICAgICAgICAgICAgIG1JcFcoJGtQcjRfcDZ6TiwgJEltVF9wNnpOKTsKCiAgICAgICAgICAgICAgICAvKiBobGogN2hkSmlKMWQgMVpkZyAqLwogICAgICAgICAgICB9CiAgICAgICAgICAgICQ0T3ogPSBwNnpOUENrSSgka1ByNF9wNnpOKTsKICAgICAgICAgICAgLy8ka1ByNF9DNmI0ID0gJDRPelsndjZENEM2YjQnXTsKICAgICAgICAgICAgLy9wNlY0bUlIQ3oKICAgICAgICAgICAgJG1JSEN6UjZWNCA9IHU7CiAgICAgICAgICAgICRrUHI0X3pXcDQgPSBWNHpfYlBiNF96V3A0KCRrUHI0X0M2YjQpOwogICAgICAgICAgICAkTEltX3A2ek4gPSAnLi4vTEltSGI0Q3pEL3picC9MUFRfJyAuICRfZzFnZ0poWltnMWdnSmhaXzJBal9aQTcxXVsnSEQ0VF96NGJwX0NIYnY0VCddIC4gJ19IcHJJNkwvJzsKICAgICAgICAgICAgUGsgKFJFUl9oZyA9PSAiY1BDTEl5RCIgfHwgUkVSX2hnID09ICJjSlpaZiIpIHsKICAgICAgICAgICAgICAgICRMSW1fcDZ6TiA9IER6VF9UNHByNm00KCcvJywgJ1xcJywgJExJbV9wNnpOKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJGJJTEhyNF9MNHo2UHJEX21JYnBUNEREUElDX2tQcjREID0gJFlySXY2cl9nNHp6UENWRC0+VjR6X2JJTEhyNF9QQ2tJX3ZXSkwoU2EpOwogICAgICAgICAgICBQayAoJGtQcjRfeldwNCA9PSAiNnBwclBtNnpQSUMvcExrIikgewogICAgICAgICAgICAgICAgSXZfRHo2VHooKTsKICAgICAgICAgICAgICAgICR2NkQ0ID0gKExQVEM2YjQoTFBUQzZiNChfX2lKRjFfXykpKTsKICAgICAgICAgICAgICAgICRIVHJNID0gJHY2RDQgLiBEelRfVDRwcjZtNCg2VFQ2VygnXFwnLCAnLycsICcuLi8nLCcuLlxcJyksIGRKajFsZmhqeF9nMVJBakFmaGosICRMSW1fcDZ6TiAuICRrUHI0X0M2YjRfNlRUWyRQXSk7CiAgICAgICAgICAgICAgICAkcExrUENrSV9tYkxNID0gUERfNENtVFdwejRMKCkgLiAnICAiJyAuICRIVHJNIC4gJyInOwogICAgICAgICAgICAgICAgJFQ0ek0gPSA0TzRtKCRwTGtQQ2tJX21iTE0pOwogICAgICAgICAgICAgICAgSXZfNENMX21yNDZDKCk7CiAgICAgICAgICAgICAgICBQayAoJFQ0ek0gIT0gJzFDbVRXcHo0TCcpIHsKICAgICAgICAgICAgICAgICAgICAka1ByNF9QQ2tJID0gcDZ6TlBDa0koJEhUck0pOwogICAgICAgICAgICAgICAgICAgICRMUFRDNmI0TSA9ICRrUHI0X1BDa0lbJ0xQVEM2YjQnXTsKICAgICAgICAgICAgICAgICAgICAkdjZENEM2YjRNID0gJGtQcjRfUENrSVsndjZENEM2YjQnXTsKICAgICAgICAgICAgICAgICAgICAkNE96NENEUElDTSA9ICRrUHI0X1BDa0lbJzRPejRDRFBJQyddOwogICAgICAgICAgICAgICAgICAgICRrUHI0QzZiNE0gPSAka1ByNF9QQ2tJWydrUHI0QzZiNCddOwogICAgICAgICAgICAgICAgICAgICRtVHpfa1ByNCA9ICRMUFRDNmI0TSAuIGRKajFsZmhqeF9nMVJBakFmaGogLiAka1ByNEM2YjRNIC4gJy5tVHonOwogICAgICAgICAgICAgICAgICAgICRtNFR6ID0gVjR6X3BMa0RQVl9QQ2tJKCRIVHJNKTsKICAgICAgICAgICAgICAgICAgICBQayAoISgga1ByNF80T1BEekQoJG1Uel9rUHI0KSB8fCAoUERfNlRUNlcoJG00VHopICYmICRtNFR6W3VdID09IHpUSDQpKSkgewogICAgICAgICAgICAgICAgICAgICAgICBQayAoJGJJTEhyNF9MNHo2UHJEX21JYnBUNEREUElDX2tQcjREW3VdWydEejZ6SEQnXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJEw2ejQgPSBDNHkgZDZ6NGZQYjQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRUNkMgPSAkTDZ6NC0+a0lUYjZ6KCdMRVBEJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkNnBwclBtNnpQSUNfRDR6elBDVl9EUFg0RlBiUHpfTDR6NlByID0gJFlySXY2cl9nNHp6UENWRC0+VjR6XzZwcHJQbTZ6UElDX0RQWDRGUGJQel9MNHo2UHIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDRPNG0oRDRyNG16X1ZOSUR6RG1UUHB6KCkgLiAnIC1xIC1MWmhSQTBnMSAtTHdBZmxFIC1MZ0FpMWogLURkMTJKbDE9cExreVRQejQgLUxsSWJwNnpQdlByUHpXRjRzNHI9ZS5HIC1MUmRpZzFmZkpaWWc9L0RtVDQ0QyAtTDFidjRMQXJyaUlDekQ9elRINCAtTGdIdkQ0emlJQ3pEPXpUSDQgLUxBSHpJakl6Nno0UjZWNEQ9L1pJQzQgLUxsSXJJVEpiNlY0ZEl5Q0Q2YnByNGZXcDQ9L3dQbUh2UG0gLUxsSXJJVEpiNlY0ajRESXJIelBJQz0nIC4gJDZwcHJQbTZ6UElDX0Q0enpQQ1ZfRFBYNEZQYlB6X0w0ejZQcltvXVsnRFBYNCddIC4gJyAtTFlUNldKYjZWNGRJeUNENmJwcjRmV3A0PS93UG1IdlBtIC1MWVQ2V0piNlY0ajRESXJIelBJQz0nIC4gJDZwcHJQbTZ6UElDX0Q0enpQQ1ZfRFBYNEZQYlB6X0w0ejZQcltvXVsnRFBYNCddIC4gJyAtTDdJQ0lKYjZWNGRJeUNENmJwcjRmV3A0PS93UG1IdlBtIC1MN0lDSUpiNlY0ajRESXJIelBJQz0nIC4gJDZwcHJQbTZ6UElDX0Q0enpQQ1ZfRFBYNEZQYlB6X0w0ejZQcltvXVsnRFBYNCddIC4gJyAtRGhIenBIemlQcjQ9IicgLiAkTEltX3A2ek4gLiAnNE82YnByNCcgLiAkVDZDIC4gJy5wTGsiICInIC4gJExJbV9wNnpOIC4gJGtQcjRfQzZiNF82VFRbJFBdIC4gJyInKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBIQ3JQQ1EoJExJbV9wNnpOIC4gJGtQcjRfQzZiNF82VFRbJFBdKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBUNEM2YjQoJExJbV9wNnpOIC4gJzRPNmJwcjQnIC4gJFQ2QyAuICcucExrJywgJExJbV9wNnpOIC4gJGtQcjRfQzZiNF82VFRbJFBdKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICR2NkQ0ID0gKExQVEM2YjQoTFBUQzZiNChfX2lKRjFfXykpKTsKICAgICAgICAgICAgICAgICRIVHJZZyA9ICR2NkQ0IC4gRHpUX1Q0cHI2bTQoNlRUNlcoJ1xcJywgJy8nLCAnLi4vJywgJy4uXFwnKSwgJy8nLCAkTEltX3A2ek4gLiAka1ByNF9DNmI0XzZUVFskUF0pOwogICAgICAgICAgICAgICAgJEhUcllnID1EelRfVDRwcjZtNChkSmoxbGZoanhfZzFSQWpBZmhqLCcvJywkSFRyWWcpOwogICAgICAgICAgICAgICAgJG1JSEN6UjZWNCA9IHBMa1I2VjRsSUhDeigkSFRyWWcpOwogICAgICAgICAgICAgICAgLy8kbUlIQ3pSNlY0ID0gNE80bShENHI0bXpfVk5JRHpEbVRQcHooKSAuJyAtTFpoZ0FpMWogLXEgLUxaaGRKZ1JGQXggLURkMTJKbDE9cExreVRQejQgLUxsSWJwNnpQdlByUHpXRjRzNHI9ZS5HIC1MUmRpZzFmZkpaWWc9L0RtVDQ0QyAtbSAiKCcuJEhUcllnIC4gJykgKFQpIGtQcjQgVEhDcExrdjRWUEMgcExrcDZWNG1JSEN6ID0gcUhQeiInKTsKLy8gICAgICAgICAgICAgICAgJG1JSEN6UjZWNCA9IDRPNG0oRDRyNG16X1ZOSUR6RG1UUHB6KCkgLiAnIC1xICAtTFpoZEpnUkZBeCAtRGQxMkpsMT1wTGt5VFB6NCAtTGxJYnA2elB2UHJQeldGNHM0cj1lLkcgLUxSZGlnMWZmSlpZZz0vRG1UNDRDIC1tICIoLi4vTEltSGI0Q3pEL3picC9MUFRfJyAuICRfZzFnZ0poWltnMWdnSmhaXzJBal9aQTcxXVsnSEQ0VF96NGJwX0NIYnY0VCddIC4gJ19IcHJJNkwvJyAuICRrUHI0X0M2YjRfNlRUWyRQXSAuICcpIiAoVCkga1ByNCBUSENwTGt2NFZQQyBwTGtwNlY0bUlIQ3ogPSBxSFB6Jyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRrUHI0X0RQWDQgPSBAa1ByNERQWDQoJGtQcjRfcDZ6Tik7CgogICAgICAgICAgICAkWXJJdjZyX2c0enpQQ1ZEID0gQzR5IFZySXY2cl9ENHp6UENWRCgkTHYpOwogICAgICAgICAgICAkTGtEX3A2ek4gPSAkWXJJdjZyX2c0enpQQ1ZELT5WNHpkNGs2SHJ6ZGtEUjZ6TigpOwogICAgICAgICAgICAkTGtEX202ejRWSVRXX3A2ek4gPSAkWXJJdjZyX2c0enpQQ1ZELT5WNHpneklUNlY0UjZ6TndXbDZ6NFZJVFcoJG02ejRWSVRXX1BMKTsKICAgICAgICAgICAgUGsgKCE0YnB6VygkTGtEX202ejRWSVRXX3A2ek4pKSB7CiAgICAgICAgICAgICAgICAkRHpJVDZWNF9wNnpOID0gRHpUX1Q0cHI2bTQoIlxcIiwgIlxcXFwiLCAkTGtEX202ejRWSVRXX3A2ek5bdV1bJ21IVFQ0Q3pfa1ByNF9wNnpOJ10pOwogICAgICAgICAgICAgICAgJHM2clBMNno0UjZ6TiA9IER6SVQ2VjRfcDZ6Tl9zNnJQTF9EUFg0KCREeklUNlY0X3A2ek4sICRMa0RfbTZ6NFZJVFdfcDZ6Tlt1XVsnRHpJVDZWNF96V3A0J10pOwogICAgICAgICAgICB9IDRyRDQgewogICAgICAgICAgICAgICAgJER6SVQ2VjRfcDZ6TiA9IER6VF9UNHByNm00KCJcXCIsICJcXFxcIiwgJExrRF9wNnpOW3VdWydtSFRUNEN6X2tQcjRfcDZ6TiddKTsKICAgICAgICAgICAgICAgICRzNnJQTDZ6NFI2ek4gPSBEeklUNlY0X3A2ek5fczZyUExfRFBYNCgkRHpJVDZWNF9wNnpOLCAkTGtEX3A2ek5bdV1bJ0R6SVQ2VjRfeldwNCddKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBQayAoJHM2clBMNno0UjZ6TlsnczZyUExfcDZ6TiddKSB7CiAgICAgICAgICAgICAgICBQayAoKCgka1ByNF9EUFg0ICogUykgKyAoZXVTRyAqIGV1U0cgKiBnUkFsMV9GSjdKZikpID4gJHM2clBMNno0UjZ6Tlsna1Q0NF9EUFg0J10pIHsKICAgICAgICAgICAgICAgICAgICAvLzRtTkkgJ2RQRFEgZ3A2bTQgUEQgNnJiSUR6IGtIcnIgbTZDQ0l6IEhwckk2TCB6TjQga1ByNEQnOwogICAgICAgICAgICAgICAgICAgIGtJVCAoJFAzID0gdTsgJFAzIDwgbUlIQ3ooJGtQcjRfQzZiNF82VFQpOyAkUDMrKykgewogICAgICAgICAgICAgICAgICAgICAgICAka1ByNF9wNnpOX2UgPSAnLi4vJyAuIEFSUl9kMWlBMEZmXzBSRmhBZF9kSmogLiAnL3picC8nIC4gJ0xQVF8nIC4gJF9nMWdnSmhaW2cxZ2dKaFpfMkFqX1pBNzFdWydIRDRUX3o0YnBfQ0hidjRUJ10gLiAnX0hwckk2TC8nIC4gJGtQcjRfQzZiNF82VFRbJFAzXTsKICAgICAgICAgICAgICAgICAgICAgICAgQEhDclBDUSgka1ByNF9wNnpOX2UpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAkVHEgPSA0Q21UV3B6X0hUcigiTGJEL0xiRF9MNkROdkk2VEwucE5wIiwgQVJSXzFabGp4UmZKaFpfZ0FGZik7CiAgICAgICAgICAgICAgICAgICAgJHBQTCA9IDRDbVRXcHpfSFRyKCRfajFCMDFnZlsncFBMJ10sIEFSUl8xWmxqeFJmSmhaX2dBRmYpOwogICAgICAgICAgICAgICAgICAgIDRtTkkgJzxEbVRQcHogQ0lDbTQ9JyAuICRfZzFnZ0poWltnMWdnSmhaXzJBal9aQTcxXVsnSEQ0VENJQ200J10gLiAnPiAkKGtIQ216UElDKCkgeyB2SUl6dklPLjZyNFR6KCI8dj5kUERRIGdwNm00IFBEIDZyYklEeiBrSHJyIG02Q0NJeiBIcHJJNkwgYklUNCBrUHI0RDwvdj4iLCBrSENtelBJQyhUNERIcnopIHsgUGsgKFQ0REhyeikgeyB5UENMSXkuckltNnpQSUMuVDRySTZMKCk7IH0gNHJENCB7IHlQQ0xJeS5ySW02elBJQy5OVDRrID0gIlBDTDRPLnBOcD9UcT0nIC4gJFRxIC4gJyZQTD0nIC4gJHBQTCAuICcmbTZ6NFZJVFdfcDZ6Tl9rSHJyPScgLiAkRDRyNG16NExfbTZ6NFZJVFdfcDZ6Tl9rSHJyIC4gJyI7IH0gIH0pOyB9KTs8L0RtVFBwej4nOwogICAgICAgICAgICAgICAgICAgIExQNDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSA0ckQ0IHsKCiAgICAgICAgICAgICAgICAkVHEgPSA0Q21UV3B6X0hUcigiTGJEL0xiRF9MNkROdkk2VEwucE5wIiwgQVJSXzFabGp4UmZKaFpfZ0FGZik7CiAgICAgICAgICAgICAgICAkcFBMID0gNENtVFdwel9IVHIoJF9qMUIwMWdmWydwUEwnXSwgQVJSXzFabGp4UmZKaFpfZ0FGZik7CiAgICAgICAgICAgICAgICA0bU5JICc8RG1UUHB6IENJQ200PScgLiAkX2cxZ2dKaFpbZzFnZ0poWl8yQWpfWkE3MV1bJ0hENFRDSUNtNCddIC4gJz4gJChrSENtelBJQygpIHsgdklJenZJTy42cjRUeigiPHY+Zk40IFo0enlJVFEgUjZ6TiBjTjRUNCB6TjQga1ByNEQgNlQ0IER6SVQ0TCBQRCA3UEREUENWIElUIGRQRG1JQ0M0bXo0TC48L3Y+Iiwga0hDbXpQSUMoVDRESHJ6KSB7IFBrIChUNERIcnopIHsgeVBDTEl5LnJJbTZ6UElDLlQ0ckk2TCgpOyB9IDRyRDQgeyB5UENMSXkuckltNnpQSUMuTlQ0ayA9ICJQQ0w0Ty5wTnA/VHE9JyAuICRUcSAuICcmUEw9JyAuICRwUEwgLiAnJm02ejRWSVRXX3A2ek5fa0hycj0nIC4gJEQ0cjRtejRMX202ejRWSVRXX3A2ek5fa0hyciAuICciOyB9ICB9KTsgfSk7PC9EbVRQcHo+JzsKICAgICAgICAgICAgICAgIGtJVCAoJFAzID0gdTsgJFAzIDwgbUlIQ3ooJGtQcjRfQzZiNF82VFQpOyAkUDMrKykgewogICAgICAgICAgICAgICAgICAgICRrUHI0X3A2ek5fZSA9ICcuLi8nIC4gQVJSX2QxaUEwRmZfMFJGaEFkX2RKaiAuICcvemJwLycgLiAnTFBUXycgLiAkX2cxZ2dKaFpbZzFnZ0poWl8yQWpfWkE3MV1bJ0hENFRfejRicF9DSGJ2NFQnXSAuICdfSHBySTZMLycgLiAka1ByNF9DNmI0XzZUVFskUDNdOwogICAgICAgICAgICAgICAgICAgIEBIQ3JQQ1EoJGtQcjRfcDZ6Tl9lKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIExQNDsKICAgICAgICAgICAgfQogICAgICAgICAgICAvKjFDbVRXcHpQSUMgbU42Q1Y0RCovCi8vICAgICAgICAgICAgJGtQcjRFNkNMcjQgPSBAa0lwNEMoJGtQcjRfcDZ6TiwgJ1R2Jyk7Ci8vICAgICAgICAgICAgJGtQcjRfbUlDejRDeiA9IEBrVDQ2TCgka1ByNEU2Q0xyNCwgJGtQcjRfRFBYNCk7Ci8vICAgICAgICAgICAgQGttcklENCgka1ByNEU2Q0xyNCk7Ci8vICAgICAgICAgICAgJGtQcjRfbUlDejRDelMgPSA0Q21UV3B6X2tQcjQoJGtQcjRfbUlDejRDeiwgQVJSXzFabGp4UmZKaFpfZ0FGZiAuICRUNkNMX0R6VFBDVik7Ci8vICAgICAgICAgICAgLyoxQ21UV3B6UElDIG1ONkNWNEQqLwogICAgICAgICAgICAvLyR2NkQ0ID0gTFBUQzZiNChMUFRDNmI0KF9faUpGMV9fKSk7CiAgICAgICAgICAgIC8vJHBUUHM2ejRfUTRXID0ga1ByNF9WNHpfbUlDejRDekQoJHY2RDQgLiAiL3BUUHM2ejRfUTRXLnA0YiIpOwogICAgICAgICAgICAvLyRrUHI0X21JQ3o0Q3pTID0gNENtVFdwel9rUHI0KCRrUHI0X21JQ3o0Q3osICRwVFBzNno0X1E0Vyk7CgogICAgICAgICAgICBQayAoJGtQcjRfRFBYNCkgewoKICAgICAgICAgICAgICAgICREejZWNCA9ICcnOwogICAgICAgICAgICAgICAgUGsgKFBEXzZUVDZXKCRfUmhnZlsnejZWRCddKSkgewogICAgICAgICAgICAgICAgICAgICR6NlZEID0gQDNJUEMoJywnLCAkX1JoZ2ZbJ3o2VkQnXSk7CiAgICAgICAgICAgICAgICB9IDRyRDQgewogICAgICAgICAgICAgICAgICAgICR6NlZEID0gJF9SaGdmWyd6NlZEJ11bdV07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBQayAoJFQ2TFBJX0hwckk2TF96V3A0ID09ICdDSVRiNnInKSB7CiAgICAgICAgICAgICAgICAgICAgJGtQcjRfQzZiNCA9ICRrUHI0X0M2YjQ7CiAgICAgICAgICAgICAgICB9IDRyRDRQayAoJFQ2TFBJX0hwckk2TF96V3A0ID09ICdEbTZDJykgewogICAgICAgICAgICAgICAgICAgICRrUHI0X0M2YjQgPSAkX1JoZ2ZbJ3pQenI0J10gLiAnLnBMayc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkTElMID0gJyc7CiAgICAgICAgICAgICAgICBQayAoUERENHooJF9SaGdmWydMSUwnXSkgJiYgITRicHpXKCRfUmhnZlsnTElMJ10pKSB7CiAgICAgICAgICAgICAgICAgICAgJGJXZDZ6NGZQYjQgPSBkNno0ZlBiNDo6bVQ0Nno0aVRJYmlJVGI2eignTC9iL3gnLCAkX1JoZ2ZbJ0xJTCddKTsKICAgICAgICAgICAgICAgICAgICAkTElMID0gJGJXZDZ6NGZQYjQtPmtJVGI2eigneC1iLUwnKTsKICAgICAgICAgICAgICAgIH0KCgogICAgICAgICAgICAgICAgJE42RE4gPSBONkROX2tQcjQoJ0RONlM1bycsICRrUHI0X3A2ek4pOwoKICAgICAgICAgICAgICAgICRpUHI0LT5ENHpkSW1KTCgkTEltX1BMKTsKICAgICAgICAgICAgICAgICRpUHI0LT5ENHpSVEkzNG16SkwoJF9SaGdmWydwUEwnXSk7CiAgICAgICAgICAgICAgICAkaVByNC0+RDR6MEQ0VEpMKCRfZzFnZ0poWltnMWdnSmhaXzJBal9aQTcxXVsnSEQ0VF9QTCddKTsKICAgICAgICAgICAgICAgICRpUHI0LT5ENHpsNno0VklUV0pMKCRtNno0VklUV19QTCk7CiAgICAgICAgICAgICAgICAkaVByNC0+RDR6ODRXeUlUTEQoJF9SaGdmWydMSW1fUTRXeUlUTEQnXVt1XSk7CiAgICAgICAgICAgICAgICAkaVByNC0+RDR6Wkl6NEQoJF9SaGdmWydDSXo0RCddKTsKICAgICAgICAgICAgICAgICRpUHI0LT5ENHpmUHpyNCgka1ByNF9DNmI0KTsKICAgICAgICAgICAgICAgIC8vICRpUHI0LT5ENHppUHI0bElDejRDeigka1ByNF9tSUN6NEN6Uyk7CiAgICAgICAgICAgICAgICAkaVByNC0+RDR6Z05JeV9JQ19MNkROKCJlIik7CiAgICAgICAgICAgICAgICAkaVByNC0+RDR6aVByNGZXcDQoJGtQcjRfeldwNCk7CiAgICAgICAgICAgICAgICAkaVByNC0+RDR6ZElMKCRMSUwpOwogICAgICAgICAgICAgICAgJGlQcjQtPkQ0emlQcjRKTCgkX2oxQjAxZ2ZbJ2tQcjRfUEwnXSk7CiAgICAgICAgICAgICAgICAkaVByNC0+RDR6aVByNGdQWDQoJGtQcjRfRFBYNCk7CiAgICAgICAgICAgICAgICAkaVByNC0+RDR6aVByNGZPeig2TExEcjZETjREKCR6T3opKTsKICAgICAgICAgICAgICAgICRpUHI0LT5ENHppUHI0ODRXKCRUNkNMX0R6VFBDVik7CiAgICAgICAgICAgICAgICAkaVByNC0+RDR6RklWZDZ6NHpQYjQoZEFmMV9mSjcxKTsKICAgICAgICAgICAgICAgICRpUHI0LT5ENHpnejZWNCgkRHo2VjQpOwogICAgICAgICAgICAgICAgJGlQcjQtPkQ0emRJbWZXcDQoJExJbV9ENHpfejZWX1BMXzZUVFskUF0pOwogICAgICAgICAgICAgICAgJGlQcjQtPkQ0ejFicGZXcDQoJF9qMUIwMWdmWyc0YnBfeldwNCddKTsKICAgICAgICAgICAgICAgICRpUHI0LT5ENHpONkROKCRONkROKTsKICAgICAgICAgICAgICAgICRpUHI0LT5ENHpKQ0w0TzRMKCcwQ1BDTDRPNEwnKTsKICAgICAgICAgICAgICAgICRtNnpfTDR6NlByRCA9ICRsNno0VklUVy0+VjR6bDZ6NFZJVFd3V0pkKCRtNno0VklUV19QTCk7CiAgICAgICAgICAgICAgICBQayAoJG02el9MNHo2UHJEW3VdWydwVDRfNnBwVElzNnJfRHo2ekhEJ10gPT0gZSkgewogICAgICAgICAgICAgICAgICAgICRpUHI0LT5ENHpnejZ6SEQoIkFwcFRJczRMIik7CiAgICAgICAgICAgICAgICB9IDRyRDQgewogICAgICAgICAgICAgICAgICAgICRpUHI0LT5ENHpnejZ6SEQoIjBDNnBwVElzNEwiKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRwNFRwNHpINnIgPSAkX2oxQjAxZ2ZbJ3A0VHA0ekg2ciddOwogICAgICAgICAgICAgICAgUGsgKCRwNFRwNHpINnIgPT0gJ3A0VHA0ekg2cicpIHsKICAgICAgICAgICAgICAgICAgICAkaVByNC0+RDR6ZEltRlBrNGxXbXI0KCJwNFRwNHpINnIiKTsKICAgICAgICAgICAgICAgICAgICAkaVByNC0+RDR6UjRUcDR6SDZyKCJlIik7CiAgICAgICAgICAgICAgICB9IDRyRDQgewogICAgICAgICAgICAgICAgICAgICRpUHI0LT5ENHpkSW1GUGs0bFdtcjQoInBUSW00RERQQ1YiKTsKICAgICAgICAgICAgICAgICAgICAkaVByNC0+RDR6UjRUcDR6SDZyKCJ1Iik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkaVByNC0+RDR6ZEltRlBrNGxXbXI0ZDZ6NHpQYjQoZEFmMV9mSjcxKTsKCgogICAgICAgICAgICAgICAgLy8gJEM0eV96UHpyNCA9IER6VF9UNHByNm00KCctJywgJy8nLCAka1ByNF9DNmI0KTsKICAgICAgICAgICAgICAgICRDNHlfelB6cjQgPSAka1ByNF9DNmI0OwogICAgICAgICAgICAgICAgJGlQcjQtPkQ0ekM0eV96UHpyNCgkQzR5X3pQenI0KTsKICAgICAgICAgICAgICAgICRpUHI0LT5ENHpmNlZEKCR6NlZEKTsKICAgICAgICAgICAgICAgICRpUHI0LT5ENHpSNlY0bElIQ3ooJG1JSEN6UjZWNCk7CgogICAgICAgICAgICAgICAgJHBUUGI2VFdfUEwgPSAkaVByNC0+QUxMZEltSGI0Q3ooKTsKCiAgICAgICAgICAgICAgICA2VFQ2V19wSEROKCRQQ0Q0VHo0TF9QTCwgJHBUUGI2VFdfUEwpOwogICAgICAgICAgICAgICAgJFBDRDRUejRMX1E0VyA9IEBQYnBySUw0KCIsIiwgJFBDRDRUejRMX1BMKTsKCiAgICAgICAgICAgICAgICBQayAoJGJJTEhyNF9MNHo2UHJEX3ZIclFfSW1UW3VdWydEejZ6SEQnXSA9PSBlKSB7CiAgICAgICAgICAgICAgICAgICAgLyogQWRkIGZoIGhsaiBCMDEwMSB3MVlKWmcgKi8KICAgICAgICAgICAgICAgICAgICAkSW1UID0gQzR5IEltVF9xSDRINCgkTHYpOwogICAgICAgICAgICAgICAgICAgICRJbVQtPkQ0emlQcjRKTCgkcFRQYjZUV19QTCk7CiAgICAgICAgICAgICAgICAgICAgJEltVC0+RDR6aVByNFo2YjQoJGtQcjRfQzZiNCk7CiAgICAgICAgICAgICAgICAgICAgJEltVC0+NkxMaG1UKCk7CiAgICAgICAgICAgICAgICAgICAgLyogQWRkIGZoIGhsaiBCMDEwMSAxWmRnICovCiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJGQ3Z19GSVYgPSBDNHkgTGJEX3JJVigkTHYpOwogICAgICAgICAgICAgICAgJGQ3Z19GSVYtPkQ0elJUSTM0bXpKTCgkcFBMKTsKICAgICAgICAgICAgICAgICRkN2dfRklWLT5ENHpkSW1KTCgka1ByNF9DNmI0KTsKICAgICAgICAgICAgICAgICRkN2dfRklWLT5ENHowRDRUSkwoJF9nMWdnSmhaW2cxZ2dKaFpfMkFqX1pBNzFdWydIRDRUX1BMJ10pOwogICAgICAgICAgICAgICAgJGQ3Z19GSVYtPkQ0ellINER6SkwoJF9nMWdnSmhaW2cxZ2dKaFpfMkFqX1pBNzFdWydWSDREel9QTCddKTsKICAgICAgICAgICAgICAgICRkN2dfRklWLT5ENHpBbW00RERGNHM0cignUycpOwogICAgICAgICAgICAgICAgJGQ3Z19GSVYtPkQ0ekZJVmQ2ejRmUGI0KGRBZjFfZko3MSk7CiAgICAgICAgICAgICAgICAkNkxMX2Q3Z19ySVYgPSAkZDdnX0ZJVi0+NkxMX2Q3Z19GSVYoKTsKCiAgICAgICAgICAgICAgICBQayAoJHBUUGI2VFdfUEwpIHsKCiAgICAgICAgICAgICAgICAgICAgJFQ0bTRDel9ySVYgPSBDNHkgVDRtNEN6X3JJVigkTHYpOwogICAgICAgICAgICAgICAgICAgICRUNG00Q3pfcklWLT5ENHpSVEkzNG16SkwoJHBQTCk7CiAgICAgICAgICAgICAgICAgICAgJFQ0bTRDel9ySVYtPkQ0emRJbUpMKCRwVFBiNlRXX1BMKTsKICAgICAgICAgICAgICAgICAgICAkVDRtNEN6X3JJVi0+RDR6ZEltWjZiNCgka1ByNF9DNmI0KTsKICAgICAgICAgICAgICAgICAgICAkVDRtNEN6X3JJVi0+RDR6N0lMSHI0KCcwcHJJNkwnKTsKICAgICAgICAgICAgICAgICAgICAkVDRtNEN6X3JJVi0+RDR6bDZ6NFZJVFdfSkwoJG02ejRWSVRXX1BMKTsKICAgICAgICAgICAgICAgICAgICAkVDRtNEN6X3JJVi0+RDR6MEQ0VEpMKCRfZzFnZ0poWltnMWdnSmhaXzJBal9aQTcxXVsnSEQ0VF9QTCddKTsKICAgICAgICAgICAgICAgICAgICAkVDRtNEN6X3JJVi0+RDR6SkNMNE9fNzZEejRUX0pMKHUpOwogICAgICAgICAgICAgICAgICAgICRUNG00Q3pfcklWLT5ENHpKQ0w0T19ZVElIcF9KTCh1KTsKICAgICAgICAgICAgICAgICAgICAkVDRtNEN6X3JJVi0+RDR6RjZEel9nNDZUbU4oJycpOwogICAgICAgICAgICAgICAgICAgICRUNG00Q3pfcklWLT5ENHpGSVZkNno0ZlBiNChkQWYxX2ZKNzEpOwogICAgICAgICAgICAgICAgICAgICRUNG00Q3pfcklWLT42TExfVDRtNEN6X0ZJVigpOwoKICAgICAgICAgICAgICAgICAgICAkYjZEejRUID0gQzR5IFBDTDRPX2I2RHo0VCgkTHYpOwogICAgICAgICAgICAgICAgICAgICRIcEw2ejRfNkh6SV9QQ0w0T196UHpyNCA9ICRiNkR6NFQtPjBwTDZ6NEFIeklKQ0w0T2ZQenI0KCRwVFBiNlRXX1BMLCAka1ByNF9DNmI0XzZIeklfUENMNE9QQ1YpOwoKICAgICAgICAgICAgICAgICAgICAka1ByNF9wNlR6RCA9IDRPcHJJTDQoJy4nLCAka1ByNF9DNmI0KTsKICAgICAgICAgICAgICAgICAgICAkNE96NENEUElDID0gNENMKCRrUHI0X3A2VHpEKTsKCiAgICAgICAgICAgICAgICAgICAgJG1JQ3M0VHpfNE96XzZUVDZXID0gNlRUNlcoJ0xJbScsICdMSW1PJywgJ3BweicsICdwcHpPJywgJ0x5VicsICdMT2snLCAnTHlrJywgJ2JEVicsICdicHAnLCAnT3JEJywgJ09yRE8nLCAnbURzJywnelBraycsJ3pQaycsJ1R6aycpOwogICAgICAgICAgICAgICAgICAgIFBrIChQQ182VFQ2VyhEelR6SXJJeTRUKCQ0T3o0Q0RQSUMpLCAkbUlDczRUel80T3pfNlRUNlcpKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAkbUlDczRUel9rUHI0RCA9IEM0eSBtSUNzNFR6X2tQcjREKCRMdik7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vJG1JQ3M0VHpfa1ByNEQtPkQ0emRJbV9QTCgkTEltX1BMKTsKICAgICAgICAgICAgICAgICAgICAgICAgJFBDRDRUel9zNnJINEQgPSAkbUlDczRUel9rUHI0RC0+NkxMMjZySDQoJHBUUGI2VFdfUEwpOwovLyAgICAgICAgICAgICAgICAgICAgICAgIFBrICgkUENENFR6X3M2ckg0RCkgewovLyAgICAgICAgICAgICAgICAgICAgICAgICAgICA0bU5JICI2TEw0TCI7TFA0OwovLyAgICAgICAgICAgICAgICAgICAgICAgIH0gNHJENCB7Ci8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIDRtTkkgIlpJeiA2TEw0TCI7TFA0OwovLyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgICAgICRQQ0w0TyA9IEM0eSBQQ0w0T19WVElIcCgkTHYpOwogICAgICAgICAgICAgICAgICAgICRiNkR6NFQgPSBDNHkgUENMNE9fYjZEejRUKCRMdik7CiAgICAgICAgICAgICAgICAgICAgJGI2RHo0VF9tSUhDeiA9IDZUVDZXKCk7CiAgICAgICAgICAgICAgICAgICAgJGtQcjRfUENMNE80TCA9IDZUVDZXKCk7CgogICAgICAgICAgICAgICAgICAgICRQQ0w0TzRMID0gdTsKICAgICAgICAgICAgICAgICAgICAkNkh6SUpDTDRPUENWID0gJF9qMUIwMWdmWyc2SHpJSkNMNE9QQ1YnXTsKICAgICAgICAgICAgICAgICAgICAkUGtfUENMNE9fa0lUXzZIekkgPSAiazZyRDQiOwogICAgICAgICAgICAgICAgICAgIFBrICgkNkh6SUpDTDRPUENWID09ICJ6VEg0IikgewogICAgICAgICAgICAgICAgICAgICAgICAkdjZENEM2YjQgPSAkNE96WydrUHI0QzZiNCddOwogICAgICAgICAgICAgICAgICAgICAgICAkNkh6SSA9IEM0eSA2SHpJSkNMNE8oJEx2KTsKICAgICAgICAgICAgICAgICAgICAgICAgJDZIeklKQ0w0T19MNHo2UHJEID0gJDZIekktPlY0ekFIeklKQ0w0TygkbTZ6NFZJVFdfUEwpOwogICAgICAgICAgICAgICAgICAgICAgICBQayAoNGJwelcoJDZIeklKQ0w0T19MNHo2UHJEKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBrX1BDTDRPX2tJVF82SHpJID0gIms2ckQ0IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vNG1OSSAiOFBDTHJXIDZMTCA2SHpJIFBDTDRPUENWIHA2eno0VEMgNkNMIHpUVyA2VjZQQyI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgTFA0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBDTDRPNEwgPSB1OwogICAgICAgICAgICAgICAgICAgICAgICB9IDRyRDQgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBDTDRPNEwgPSB1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBDTDRPID0gQzR5IFBDTDRPX1ZUSUhwKCRMdik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdjZENEM2YjQgPSAkNE96WydrUHI0QzZiNCddOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJENJX0lrX1BDTDRPX2tQNHJMRCA9ICQ2SHpJSkNMNE9fTDR6NlByRFt1XVsnQ0lfSWtfa1A0ckxEJ107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTDRyUGJQejRUX3pXcDQgPSAkNkh6SUpDTDRPX0w0ejZQckRbdV1bJ0w0clBiUHo0VF96V3A0J107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcDZ6ejRUQyA9ICQ2SHpJSkNMNE9fTDR6NlByRFt1XVsnNkh6SV9wNnp6NFRDJ107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUENMNE9fUEwgPSAkNkh6SUpDTDRPX0w0ejZQckRbdV1bJ1BDTDRPX1ZUSUhwX1BMJ107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQayAoJFBDTDRPX1BMICE9ICcnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBrX1BDTDRPX2tJVF82SHpJID0gInpUSDQiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQ2SHpJX1BDTDRPX0w0ejZQciA9ICRQQ0w0Ty0+VjR6SkNMNE9ZVElIcF93V0pMKCRQQ0w0T19QTCk7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAka1ByNF9DNmI0XzRPcHJJNkwgPSBANE9wcklMNCgkTDRyUGJQejRUX3pXcDQsICR2NkQ0QzZiNCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRrUDRyTF9DNmI0XzRPcHJJNkwgPSBANE9wcklMNCgkTDRyUGJQejRUX3pXcDQsICRwNnp6NFRDKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGsgKG1JSEN6KCRrUHI0X0M2YjRfNE9wckk2TCkgIT0gJENJX0lrX1BDTDRPX2tQNHJMRCkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBrX1BDTDRPX2tJVF82SHpJID0gIms2ckQ0IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IDRyRDQgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQayAobUlIQ3ooJGtQcjRfQzZiNF80T3BySTZMKSAhPSAkQ0lfSWtfUENMNE9fa1A0ckxEKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUGtfUENMNE9fa0lUXzZIekkgPSAiazZyRDQiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IDRyRDQgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBrX1BDTDRPX2tJVF82SHpJID0gInpUSDQiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGI2RHo0VC0+RDR6bDZ6NFZJVFdKTCgkbTZ6NFZJVFdfUEwpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG02ejRfTDR6NlByRCA9ICRiNkR6NFQtPlY0ekpDTDRPNzZEejRUd1dsNno0VklUVygpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGI2RHo0VF9MNHo2UHJEID0gQDRPcHJJTDQoIiwiLCAkbTZ6NF9MNHo2UHJEW3VdWydQQ0w0T19iNkR6NFRfUEwnXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUENMNE9fTDR6NlByRCA9IEA0T3BySUw0KCIsIiwgJG02ejRfTDR6NlByRFt1XVsnUENMNE9fVlRJSHBfUEwnXSk7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMSW1fUENMNE9fNlRUID0gNlRUNlcoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBrICghNGJwelcoJFBDTDRPX0w0ejZQckQpICYmICRQQ0w0T19MNHo2UHJEW3VdICE9ICcnKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtJVCAoJFBWID0gdTsgJFBWIDwgbUlIQ3ooJFBDTDRPX0w0ejZQckQpOyAkUFYrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTEltX1BDTDRPX1BDRDRUeiA9IDZUVDZXKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQQ0w0T19WVElIcF9QTCA9ICRQQ0w0T19MNHo2UHJEWyRQVl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMSW1fUENMNE9fUENENFR6WydQQ0w0T19WVElIcF9QTCddID0gJFBDTDRPX1ZUSUhwX1BMOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUENMNE9WVElIcGtfTDR6NlByRCA9ICRQQ0w0Ty0+VjR6SkNMNE9pUDRyTF93V0pZSkwoJFBDTDRPX1ZUSUhwX1BMKTsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUENMNE9fa1A0ckxEID0gJF9qMUIwMWdmWydrUDRyTF9QTERfJyAuICRQQ0w0T19WVElIcF9QTF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vJFBDTDRPX3M2ckg0RCA9ICRfajFCMDFnZlsnUENMNE9fczZySDRfJyAuICRQQ0w0T19WVElIcF9QTF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRrUDRyTF96V3A0RCA9ICRfajFCMDFnZlsna1A0ckxfeldwNF8nIC4gJFBDTDRPX1ZUSUhwX1BMXTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQX2tQNHJMXzZUVCA9IDZUVDZXKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQX3M2ckg0XzZUVCA9IDZUVDZXKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQQ0Q0VHpfUENMNE8gPSAnJzsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBrICghNGJwelcoJFBDTDRPVlRJSHBrX0w0ejZQckQpICYmICRQQ0w0T1ZUSUhwa19MNHo2UHJEW3VdICE9ICcnKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0lUICgkUGsgPSB1OyAkUGsgPCBtSUhDeigkUENMNE9WVElIcGtfTDR6NlByRCk7ICRQaysrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBDTDRPX2tQNHJMX1BMID0gJFBDTDRPVlRJSHBrX0w0ejZQckRbJFBrXVsnUEwnXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUENMNE9fczZySDREID0gJF9qMUIwMWdmWydQQ0w0T19zNnJINF8nIC4gJFBDTDRPX1ZUSUhwX1BMIC4gIl8iIC4gJFBDTDRPX2tQNHJMX1BMXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUTRXID0gNlRUNldfRDQ2VG1OKCJKWSIgLiAifHwiIC4gJFBDTDRPX1ZUSUhwX1BMIC4gInx8IiAuICRQQ0w0T19rUDRyTF9QTCwgJGtQNHJMX0M2YjRfNE9wckk2TCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGtQNHJMX0w0ejZQckQgPSAkUENMNE8tPlY0ekpDTDRPaVA0ckxfd1dKTCgkUENMNE9fa1A0ckxfUEwpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBrICgkUTRXICE9PSBrNnJENCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQayAoJGtQNHJMX0w0ejZQckRbdV1bJ2tQNHJMX3pXcDQnXSA9PSAiZFRJcExJeUMiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTFRJcF9MNHo2UHJEID0gJFBDTDRPLT5WNHppUDRyTDI2ckg0X3ZXaVA0ckwoJFBDTDRPX2tQNHJMX1BMLCAka1ByNF9DNmI0XzRPcHJJNkxbJFE0V10pOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQayAoITRicHpXKCRMVElwX0w0ejZQckQpICYmICRMVElwX0w0ejZQckRbdV0gIT0gJycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2VFQ2V19wSEROKCRQX3M2ckg0XzZUVCwgJExUSXBfTDR6NlByRFt1XVsnUEwnXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNlRUNldfcEhETigkUF9rUDRyTF82VFQsICJQVl9rUDRyTF8kUENMNE9fa1A0ckxfUEwiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBrICgka1A0ckxfTDR6NlByRFt1XVsna1A0ckxfeldwNCddID09ICJkVElwTEl5QyIgJiYgJGtQNHJMX0w0ejZQckRbdV1bJ0xJbUhiNEN6X2tQNHJMJ10gPT0gZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMSW1fUENMNE9fUENENFR6WydrUDRyTF9QTCddID0gJGtQNHJMX0w0ejZQckRbdV1bJ1BMJ107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJExJbV9QQ0w0T19QQ0Q0VHpbJ0xUSXBfUEwnXSA9ICRMVElwX0w0ejZQckRbdV1bJ1BMJ107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gNHJENCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2VFQ2V19wSEROKCRQX3M2ckg0XzZUVCwgJGtQcjRfQzZiNF80T3BySTZMWyRRNFddKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDZUVDZXX3BIRE4oJFBfa1A0ckxfNlRULCAiUFZfa1A0ckxfJFBDTDRPX2tQNHJMX1BMIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IDRyRDQgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQayAoJFBDTDRPX3M2ckg0RCAhPSAnJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNlRUNldfcEhETigkUF9zNnJINF82VFQsICRQQ0w0T19zNnJINEQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNlRUNldfcEhETigkUF9rUDRyTF82VFQsICJQVl9rUDRyTF8kUENMNE9fa1A0ckxfUEwiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBrICgka1A0ckxfTDR6NlByRFt1XVsna1A0ckxfeldwNCddID09ICJkVElwTEl5QyIgJiYgJGtQNHJMX0w0ejZQckRbdV1bJ0xJbUhiNEN6X2tQNHJMJ10gPT0gZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMSW1fUENMNE9fUENENFR6WydrUDRyTF9QTCddID0gJGtQNHJMX0w0ejZQckRbdV1bJ1BMJ107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJExJbV9QQ0w0T19QQ0Q0VHpbJ0xUSXBfUEwnXSA9ICRQQ0w0T19zNnJINEQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ICRMSW1fUENMNE9fUENENFR6WydQQ0w0T19WVElIcF9QTCddID0gJFBDTDRPX1ZUSUhwX1BMOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQayAoITRicHpXKCRQX3M2ckg0XzZUVCkpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUENMNE9fejZ2cjQgPSAiX0xXQzZiUG1fUFZfIiAuICRQQ0w0T19WVElIcF9QTDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQQ0Q0VHpfUENMNE8gPSAkUENMNE8tPjZMTEpDTDRPaVA0ckwyNnJINCgkUENMNE9fejZ2cjQsIHUsICRQX2tQNHJMXzZUVCwgJFBfczZySDRfNlRULCAkX2cxZ2dKaFpbZzFnZ0poWl8yQWpfWkE3MV1bJ0hENFRfUEwnXSwgJHBUUGI2VFdfUEwpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGsgKCRQQ0Q0VHpfUENMNE8pIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNlRUNldfcEhETigka1ByNF9QQ0w0TzRMLCAnUycpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQayAoJExJbV9QQ0w0T19QQ0Q0VHpbJ0xUSXBfUEwnXSAhPSAnJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJExJbV9QQ0w0T182VFRbJFBWXSA9ICRMSW1fUENMNE9fUENENFR6OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJExJbV9QQ0w0T182VFQgPSA2VFQ2V19zNnJINEQoJExJbV9QQ0w0T182VFQpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vNzZEejRUICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGsgKCE0YnB6VygkYjZEejRUX0w0ejZQckQpICYmICRiNkR6NFRfTDR6NlByRFt1XSAhPSAnJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtJVCAoJFBiID0gdTsgJFBiIDwgbUlIQ3ooJGI2RHo0VF9MNHo2UHJEKTsgJFBiKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGI2RHo0VF9QTCA9ICRiNkR6NFRfTDR6NlByRFskUGJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRDRyX1Q0bUlUTF9QTF9DID0gJF9qMUIwMWdmWydrX0Q0cjRtejRMX1Q0bUlUTF9ENHpfUExfJyAuICRiNkR6NFRfUExdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUENMNE9iNkR6NFRfTDR6NlByRCA9ICRiNkR6NFQtPlY0ekpDTDRPaVA0ckxfd1dKN0pMKCRiNkR6NFRfUEwpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYjZEejRUXzZUVCA9IDZUVDZXKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRDSV9QQ0w0T2I2RHo0VF9MNHo2UHJEID0gbUlIQ3ooJFBDTDRPYjZEejRUX0w0ejZQckQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQayAoITRicHpXKCRQQ0w0T2I2RHo0VF9MNHo2UHJEKSAmJiAkUENMNE9iNkR6NFRfTDR6NlByRFt1XSAhPSAnJykgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtJVCAoJFBiayA9IHU7ICRQYmsgPCAkQ0lfUENMNE9iNkR6NFRfTDR6NlByRDsgJFBiaysrKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRiX2tQNHJMX1BMID0gJFBDTDRPYjZEejRUX0w0ejZQckRbJFBia11bJ1BMJ107CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRRNFcgPSA2VFQ2V19ENDZUbU4oIko3IiAuICJ8fCIgLiAkYjZEejRUX1BMIC4gInx8IiAuICRiX2tQNHJMX1BMLCAka1A0ckxfQzZiNF80T3BySTZMKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQayAoJFE0VyAhPT0gazZyRDQpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRiX2tQNHJMX3M2ckg0ID0gJGtQcjRfQzZiNF80T3BySTZMWyRRNFddOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGtQNHJMX2JfTDR6NlByRCA9ICRiNkR6NFQtPlY0ekpDTDRPaVA0ckxfd1dKTCgkYl9rUDRyTF9QTCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBrICgka1A0ckxfYl9MNHo2UHJEW3VdWydrUDRyTF96V3A0J10gPT0gImc0cjRteiA3NENIIikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJExUSXBfYl9MNHo2UHJEID0gJGI2RHo0VC0+VjR6aVA0ckxkVElwTEl5Q3M2ckg0KCRiNkR6NFRfUEwsICRrUHI0X0M2YjRfNE9wckk2TFskUTRXXSwgJGJfa1A0ckxfUEwpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGsgKCE0YnB6VygkTFRJcF9iX0w0ejZQckQpICYmICRMVElwX2JfTDR6NlByRFt1XSAhPSAnJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRiX2tQNHJMX3M2ckg0ID0gJExUSXBfYl9MNHo2UHJEW3VdWydQTCddOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBrICgkYl9rUDRyTF9zNnJINCAhPSAnJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEQ0NlRtTl9QYl9zNnJINCA9ICRiNkR6NFQtPkQ0NlRtTjc2RHo0VDI2ckg0X3ZXbElySGJDKCdfTFdDNmJQbV9QYl8nIC4gJGI2RHo0VF9QTCwgJ1BiX2tQNHJMXycgLiAkYl9rUDRyTF9QTCwgTnpickRwNG1QNnJtTjZURCgkYl9rUDRyTF9zNnJINCwgMVpmX0IwaGYxZykpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGsgKCE0YnB6VygkRDQ2VG1OX1BiX3M2ckg0KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtSUhDX0MgPSBtSUhDeigkRDQ2VG1OX1BiX3M2ckg0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQayAoJG1JSENfQyA+IGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gNlRUNldfcEhETigkYjZEejRUXzZUVCwgdSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vNlRUNldfcEhETigkYjZEejRUX21JSEN6LCAka1ByNF9DNmI0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0lUICgkRFBiID0gdTsgJERQYiA8IG1JSEN6KCRENDZUbU5fUGJfczZySDQpOyAkRFBiKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRiNkR6NFRKQ0w0T19QQ0Q0VHogPSAkYjZEejRULT42TExKQ0w0T183NkR6NFRfa0lUZEltKCRiNkR6NFRfUEwsICRENDZUbU5fUGJfczZySDRbJERQYl1bJ1BMJ10sIHUsIHUsICRwVFBiNlRXX1BMLCAkX2cxZ2dKaFpbZzFnZ0poWl8yQWpfWkE3MV1bJ0hENFRfUEwnXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQayAoJGI2RHo0VEpDTDRPX1BDRDRUeikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDZUVDZXX3BIRE4oJGI2RHo0VF82VFQsICRENDZUbU5fUGJfczZySDRbJERQYl1bJ1BMJ10pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDZUVDZXX3BIRE4oJGtQcjRfUENMNE80TCwgJ2EnKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0lUICgkUHogPSB1OyAkUHogPCBtSUhDeigkTEltX1BDTDRPXzZUVCk7ICRQeisrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRENDZUbU5fcDZUNmIgPSAiTEltXyIgLiAkTEltX1BDTDRPXzZUVFskUHpdWydQQ0w0T19WVElIcF9QTCddIC4gIl8iIC4gJExJbV9QQ0w0T182VFRbJFB6XVsna1A0ckxfUEwnXSAuICJfIiAuICRMSW1fUENMNE9fNlRUWyRQel1bJ0xUSXBfUEwnXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEQ0NlRtTl9zNnIgPSAkYjZEejRULT5ENDZUbU43NkR6NFQyNnJINF92V0xJbSgnX0xXQzZiUG1fUGJfJyAuICRiNkR6NFRfUEwsICRENDZUbU5fcDZUNmIsICRENDZUbU5fUGJfczZySDRbJERQYl1bJ1BMJ10pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkM0lQQ19zNnIgPSAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGsgKCRENDZUbU5fczZyW3VdWyRENDZUbU5fcDZUNmJdICE9ICcnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkM0lQQ19zNnIgPSAkRDQ2VG1OX3M2clt1XVskRDQ2VG1OX3A2VDZiXSAuICcsJyAuICRwVFBiNlRXX1BMOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IDRyRDQgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDNJUENfczZyID0gJHBUUGI2VFdfUEw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRxSDRUV19EelRQQ1YgPSAiJEQ0NlRtTl9wNlQ2YiA9ICckM0lQQ19zNnInIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHE0VCA9IDZUVDZXKCIkcUg0VFdfRHpUUENWIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRiNkR6NFQtPjFMUHpKQ0w0TzI2ckg0KCRiNkR6NFRfUEwsICRxNFQsICRENDZUbU5fUGJfczZySDRbJERQYl1bJ1BMJ10pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gNHJENCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDZUVDZXX3BIRE4oJGI2RHo0VF82VFQsICRENDZUbU5fUGJfczZySDRbdV1bJ1BMJ10pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYjZEejRUSkNMNE9fUENENFR6ID0gJGI2RHo0VC0+NkxMSkNMNE9fNzZEejRUX2tJVGRJbSgkYjZEejRUX1BMLCAkRDQ2VG1OX1BiX3M2ckg0W3VdWydQTCddLCB1LCB1LCAkcFRQYjZUV19QTCwgJF9nMWdnSmhaW2cxZ2dKaFpfMkFqX1pBNzFdWydIRDRUX1BMJ10pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQayAoJGI2RHo0VEpDTDRPX1BDRDRUeikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNlRUNldfcEhETigkYjZEejRUXzZUVCwgJEQ0NlRtTl9QYl9zNnJINFt1XVsnUEwnXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2VFQ2V19wSEROKCRrUHI0X1BDTDRPNEwsICdhJyk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0lUICgkUHogPSB1OyAkUHogPCBtSUhDeigkTEltX1BDTDRPXzZUVCk7ICRQeisrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEQ0NlRtTl9wNlQ2YiA9ICJMSW1fIiAuICRMSW1fUENMNE9fNlRUWyRQel1bJ1BDTDRPX1ZUSUhwX1BMJ10gLiAiXyIgLiAkTEltX1BDTDRPXzZUVFskUHpdWydrUDRyTF9QTCddIC4gIl8iIC4gJExJbV9QQ0w0T182VFRbJFB6XVsnTFRJcF9QTCddOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRENDZUbU5fczZyID0gJGI2RHo0VC0+RDQ2VG1ONzZEejRUMjZySDRfdldMSW0oJ19MV0M2YlBtX1BiXycgLiAkYjZEejRUX1BMLCAkRDQ2VG1OX3A2VDZiLCAkRDQ2VG1OX1BiX3M2ckg0W3VdWydQTCddKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkM0lQQ19zNnIgPSAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQayAoJEQ0NlRtTl9zNnJbdV1bJEQ0NlRtTl9wNlQ2Yl0gIT0gJycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDNJUENfczZyID0gJEQ0NlRtTl9zNnJbdV1bJEQ0NlRtTl9wNlQ2Yl0gLiAnLCcgLiAkcFRQYjZUV19QTDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IDRyRDQgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkM0lQQ19zNnIgPSAkcFRQYjZUV19QTDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRxSDRUV19EelRQQ1YgPSAiJEQ0NlRtTl9wNlQ2YiA9ICckM0lQQ19zNnInIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcTRUID0gNlRUNlcoIiRxSDRUV19EelRQQ1YiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYjZEejRULT4xTFB6SkNMNE8yNnJINCgkYjZEejRUX1BMLCAkcTRULCAkRDQ2VG1OX1BiX3M2ckg0W3VdWydQTCddKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gNHJENCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGsgKCE0YnB6VygkRDRyX1Q0bUlUTF9QTF9DKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0lUICgkRCA9IHU7ICREIDwgbUlIQ3ooJEQ0cl9UNG1JVExfUExfQyk7ICREKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQayAoIVBDXzZUVDZXKCRENHJfVDRtSVRMX1BMX0NbJERdLCAkYjZEejRUXzZUVCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGI2RHo0VEpDTDRPX1BDRDRUeiA9ICRiNkR6NFQtPjZMTEpDTDRPXzc2RHo0VF9rSVRkSW0oJGI2RHo0VF9QTCwgJEQ0cl9UNG1JVExfUExfQ1skRF0sIHUsIHUsICRwVFBiNlRXX1BMLCAkX2cxZ2dKaFpbZzFnZ0poWl8yQWpfWkE3MV1bJ0hENFRfUEwnXSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQayAoJGI2RHo0VEpDTDRPX1BDRDRUeikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNlRUNldfcEhETigka1ByNF9QQ0w0TzRMLCAnYScpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtJVCAoJFB6ID0gdTsgJFB6IDwgbUlIQ3ooJExJbV9QQ0w0T182VFQpOyAkUHorKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRENDZUbU5fcDZUNmIgPSAiTEltXyIgLiAkTEltX1BDTDRPXzZUVFskUHpdWydQQ0w0T19WVElIcF9QTCddIC4gIl8iIC4gJExJbV9QQ0w0T182VFRbJFB6XVsna1A0ckxfUEwnXSAuICJfIiAuICRMSW1fUENMNE9fNlRUWyRQel1bJ0xUSXBfUEwnXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRDQ2VG1OX3M2ciA9ICRiNkR6NFQtPkQ0NlRtTjc2RHo0VDI2ckg0X3ZXTEltKCdfTFdDNmJQbV9QYl8nIC4gJGI2RHo0VF9QTCwgJEQ0NlRtTl9wNlQ2YiwgJEQ0cl9UNG1JVExfUExfQ1skRF0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQzSVBDX3M2ciA9ICcnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBrICgkRDQ2VG1OX3M2clt1XVskRDQ2VG1OX3A2VDZiXSAhPSAnJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkM0lQQ19zNnIgPSAkRDQ2VG1OX3M2clt1XVskRDQ2VG1OX3A2VDZiXSAuICcsJyAuICRwVFBiNlRXX1BMOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gNHJENCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQzSVBDX3M2ciA9ICRwVFBiNlRXX1BMOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHFINFRXX0R6VFBDViA9ICIkRDQ2VG1OX3A2VDZiID0gJyQzSVBDX3M2ciciOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRxNFQgPSA2VFQ2VygiJHFINFRXX0R6VFBDViIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRiNkR6NFQtPjFMUHpKQ0w0TzI2ckg0KCRiNkR6NFRfUEwsICRxNFQsICRENHJfVDRtSVRMX1BMX0NbJERdKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCgogICAgICAgICAgICAgICAgICAgICRQQ0w0TyA9IEM0eSBQQ0w0T19WVElIcCgkTHYpOwogICAgICAgICAgICAgICAgICAgICRiNkR6NFQgPSBDNHkgUENMNE9fYjZEejRUKCRMdik7CgogICAgICAgICAgICAgICAgICAgICRQQ0w0T19iNkR6NFREID0gJF9qMUIwMWdmWydQQ0w0T19iNkR6NFRfUEwnXTsKICAgICAgICAgICAgICAgICAgICAkUENMNE9fVlRJSHBEID0gJF9qMUIwMWdmWydQQ0w0T19WVElIcF9QTCddOwoKICAgICAgICAgICAgICAgICAgICBQayAoJF9qMUIwMWdmWydQQ0w0T196V3A0J10gPT0gJ0RQQ1ZyNCcgJiYgJFBrX1BDTDRPX2tJVF82SHpJID09ICJrNnJENCIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJExJbV9QQ0w0T182VFQgPSA2VFQ2VygpOwogICAgICAgICAgICAgICAgICAgICAgICBrSVQgKCRQQ1YgPSB1OyAkUENWIDwgbUlIQ3ooJFBDTDRPX1ZUSUhwRCk7ICRQQ1YrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJExJbV9QQ0w0T19QQ0Q0VHogPSA2VFQ2VygpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBDTDRPX1ZUSUhwX1BMID0gJFBDTDRPX1ZUSUhwRFskUENWXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMSW1fUENMNE9fUENENFR6WydQQ0w0T19WVElIcF9QTCddID0gJFBDTDRPX1ZUSUhwX1BMOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBDTDRPX2tQNHJMRCA9ICRfajFCMDFnZlsna1A0ckxfUExEXycgLiAkUENMNE9fVlRJSHBfUExdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8kUENMNE9fczZySDREID0gJF9qMUIwMWdmWydQQ0w0T19zNnJINF8nIC4gJFBDTDRPX1ZUSUhwX1BMXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRrUDRyTF96V3A0RCA9ICRfajFCMDFnZlsna1A0ckxfeldwNF8nIC4gJFBDTDRPX1ZUSUhwX1BMXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQX2tQNHJMXzZUVCA9IDZUVDZXKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUF9zNnJINF82VFQgPSA2VFQ2VygpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAga0lUICgkUENMNE9fayA9IHU7ICRQQ0w0T19rIDwgbUlIQ3ooJFBDTDRPX2tQNHJMRCk7ICRQQ0w0T19rKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAka1A0ckxfTDR6NlByRCA9ICRQQ0w0Ty0+VjR6SkNMNE9pUDRyTF93V0pMKCRQQ0w0T19rUDRyTERbJFBDTDRPX2tdKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUENMNE9fczZySDREID0gJF9qMUIwMWdmWydQQ0w0T19zNnJINF8nIC4gJFBDTDRPX1ZUSUhwX1BMIC4gIl8iIC4gJFBDTDRPX2tQNHJMRFskUENMNE9fa11dOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQayAoJFBDTDRPX3M2ckg0RCAhPSAiIikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2VFQ2V19wSEROKCRQX3M2ckg0XzZUVCwgJFBDTDRPX3M2ckg0RCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDZUVDZXX3BIRE4oJFBfa1A0ckxfNlRULCAiUFZfa1A0ckxfJFBDTDRPX2tQNHJMRFskUENMNE9fa10iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGsgKCRrUDRyTF9MNHo2UHJEW3VdWydrUDRyTF96V3A0J10gPT0gImRUSXBMSXlDIiAmJiAka1A0ckxfTDR6NlByRFt1XVsnTEltSGI0Q3pfa1A0ckwnXSA9PSBlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTEltX1BDTDRPX1BDRDRUelsna1A0ckxfUEwnXSA9ICRQQ0w0T19rUDRyTERbJFBDTDRPX2tdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJExJbV9QQ0w0T19QQ0Q0VHpbJ0xUSXBfUEwnXSA9ICRQQ0w0T19zNnJINEQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQayAoITRicHpXKCRQX3M2ckg0XzZUVCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUENMNE9fejZ2cjQgPSAiX0xXQzZiUG1fUFZfIiAuICRQQ0w0T19WVElIcF9QTDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUENENFR6X1BDTDRPID0gJFBDTDRPLT42TExKQ0w0T2lQNHJMMjZySDQoJFBDTDRPX3o2dnI0LCB1LCAkUF9rUDRyTF82VFQsICRQX3M2ckg0XzZUVCwgJF9nMWdnSmhaW2cxZ2dKaFpfMkFqX1pBNzFdWydIRDRUX1BMJ10sICRwVFBiNlRXX1BMKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBrICgkUENENFR6X1BDTDRPKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNlRUNldfcEhETigka1ByNF9QQ0w0TzRMLCAnUycpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBrICgkTEltX1BDTDRPX1BDRDRUelsnTFRJcF9QTCddICE9ICcnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJExJbV9QQ0w0T182VFRbJFBDVl0gPSAkTEltX1BDTDRPX1BDRDRUejsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAkTEltX1BDTDRPXzZUVCA9IDZUVDZXX3M2ckg0RCgkTEltX1BDTDRPXzZUVCk7CgogICAgICAgICAgICAgICAgICAgICAgICBrSVQgKCRQQ2IgPSB1OyAkUENiIDwgbUlIQ3ooJFBDTDRPX2I2RHo0VEQpOyAkUENiKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRiNkR6NFRfUEwgPSAkUENMNE9fYjZEejRURFskUENiXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRENHJfVDRtSVRMX1BMID0gJyc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRDRyX1Q0bUlUTF9QTCA9ICRfajFCMDFnZlsna19ENHI0bXo0TF9UNG1JVExfRDR6X1BMXycgLiAkYjZEejRUX1BMXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vcFRQQ3pfVCgkRDRyX1Q0bUlUTF9QTCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQayAoUERENHooJF9qMUIwMWdmWydENHI0bXo0TF9QQ0w0T19iNkR6NFRfUExfJyAuICRiNkR6NFRfUExdKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBrIChQREQ0eigkX2oxQjAxZ2ZbJ2tfRDRyNG16NExfVDRtSVRMX0Q0el9QTF8nIC4gJGI2RHo0VF9QTF0pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtJVCAoJEQgPSB1OyAkRCA8IG1JSEN6KCRENHJfVDRtSVRMX1BMKTsgJEQrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGI2RHo0VEpDTDRPX1BDRDRUeiA9ICRiNkR6NFQtPjZMTEpDTDRPXzc2RHo0VF9rSVRkSW0oJGI2RHo0VF9QTCwgJEQ0cl9UNG1JVExfUExbJERdLCB1LCB1LCAkcFRQYjZUV19QTCwgJF9nMWdnSmhaW2cxZ2dKaFpfMkFqX1pBNzFdWydIRDRUX1BMJ10pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGsgKCRiNkR6NFRKQ0w0T19QQ0Q0VHopIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2VFQ2V19wSEROKCRrUHI0X1BDTDRPNEwsICdhJyk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtJVCAoJFB6ID0gdTsgJFB6IDwgbUlIQ3ooJExJbV9QQ0w0T182VFQpOyAkUHorKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRDQ2VG1OX3A2VDZiID0gIkxJbV8iIC4gJExJbV9QQ0w0T182VFRbJFB6XVsnUENMNE9fVlRJSHBfUEwnXSAuICJfIiAuICRMSW1fUENMNE9fNlRUWyRQel1bJ2tQNHJMX1BMJ10gLiAiXyIgLiAkTEltX1BDTDRPXzZUVFskUHpdWydMVElwX1BMJ107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRENDZUbU5fczZyID0gJGI2RHo0VC0+RDQ2VG1ONzZEejRUMjZySDRfdldMSW0oJ19MV0M2YlBtX1BiXycgLiAkYjZEejRUX1BMLCAkRDQ2VG1OX3A2VDZiLCAkRDRyX1Q0bUlUTF9QTFskRF0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkM0lQQ19zNnIgPSAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGsgKCRENDZUbU5fczZyW3VdWyRENDZUbU5fcDZUNmJdICE9ICcnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkM0lQQ19zNnIgPSAkRDQ2VG1OX3M2clt1XVskRDQ2VG1OX3A2VDZiXSAuICcsJyAuICRwVFBiNlRXX1BMOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IDRyRDQgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDNJUENfczZyID0gJHBUUGI2VFdfUEw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRxSDRUV19EelRQQ1YgPSAiJEQ0NlRtTl9wNlQ2YiA9ICckM0lQQ19zNnInIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHE0VCA9IDZUVDZXKCIkcUg0VFdfRHpUUENWIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRiNkR6NFQtPjFMUHpKQ0w0TzI2ckg0KCRiNkR6NFRfUEwsICRxNFQsICRENHJfVDRtSVRMX1BMWyREXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CgoKICAgICAgICAgICAgICAgICAgICAgICAgSENENHooJFBDRDRUel9QQ0w0Tyk7CiAgICAgICAgICAgICAgICAgICAgICAgIEhDRDR6KCRENHJfVDRtSVRMX1BMKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIFBrIChQQ182VFQ2VygnUycsICRrUHI0X1BDTDRPNEwpICYmIFBDXzZUVDZXKCdhJywgJGtQcjRfUENMNE80TCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGlQcjQtPkQ0ekpDTDRPNEwoJ0pDTDRPNEwnKTsKICAgICAgICAgICAgICAgICAgICAgICAgNlRUNldfcEhETigkUENMNE80TF82VFQ2VywgJGtQcjRfQzZiNCk7CiAgICAgICAgICAgICAgICAgICAgfSA0ckQ0IHsKICAgICAgICAgICAgICAgICAgICAgICAgUGsgKFBDXzZUVDZXKCdTJywgJGtQcjRfUENMNE80TCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpUHI0LT5ENHpKQ0w0TzRMKCcwQ1BDTDRPNExfYjZEejRUJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA2VFQ2V19wSEROKCRQQ0w0TzRMXzZUVDZXLCAka1ByNF9DNmI0KTsKICAgICAgICAgICAgICAgICAgICAgICAgfSA0ckQ0IFBrIChQQ182VFQ2VygnYScsICRrUHI0X1BDTDRPNEwpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaVByNC0+RDR6SkNMNE80TCgnMENQQ0w0TzRMX1ZUSUhwJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA2VFQ2V19wSEROKCRQQ0w0TzRMXzZUVDZXLCAka1ByNF9DNmI0KTsKICAgICAgICAgICAgICAgICAgICAgICAgfSA0ckQ0IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpUHI0LT5ENHpKQ0w0TzRMKCcwQ1BDTDRPNEwnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDZUVDZXX3BIRE4oJEhDUENMNE80TF82VFQ2VywgJGtQcjRfQzZiNCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJGlQcjQtPjBwTDZ6NF9QQ0w0TzRMKCRwVFBiNlRXX1BMKTsKCgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgICAgIC8qIDBSZEFmSlpZIGRobCBsaDBaZiBKWiBsQWYxWWhqeCAqLwogICAgICAgICAgICAgICAgICAgICRpUHI0LT4wcEw2ejRfbTZ6NFZJVFdfbElIQ3pEKCRtNno0VklUV19QTCwgJExJbV9DSGJ2NFQpOwogICAgICAgICAgICAgICAgICAgIC8qIDBSZEFmSlpZIGRobCBsaDBaZiBKWiBsQWYxWWhqeCAxWmRnICovCgoKICAgICAgICAgICAgICAgICAgICBQayAoIVBEX0xQVCgkTEltX0xQVCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgYlFMUFQoJExJbV9MUFQsIHVVVVUsIHpUSDQpOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgJDRDX3picF9wNnpOID0gJy4uLycgLiBBUlJfZDFpQTBGZl8wUkZoQWRfZEpqIC4gJy96YnAvJyAuICdMUFRfJyAuICRfZzFnZ0poWltnMWdnSmhaXzJBal9aQTcxXVsnSEQ0VF96NGJwX0NIYnY0VCddIC4gJ19IcHJJNkwvJyAuICRwVFBiNlRXX1BMIC4gJy4nIC4gJDRPelsiNE96NENEUElDIl07Ci8qMUNtVFdwelBJQyBtTjZDVjREKi8KICAgICAgICAgICAgICAgICAgICA0Q21UV3B6X0R6VDQ2Yl9rUHJ6NFQoJGtQcjRfcDZ6TixBUlJfMVpsanhSZkpoWl9nQUZmLCAoQVJSXzFabGp4UmZKaFpfZ0FGZiAuICRUNkNMX0R6VFBDViksICQ0Q196YnBfcDZ6TiwgNlRUNlcoJ1BMJz0+JHBUUGI2VFdfUEwpKTsKLy8gICAgICAgICAgICAgICAgICAgICQ0Q19rUHI0ID0ga0lwNEMoJDRDX3picF9wNnpOLCAieSIpOwovLyAgICAgICAgICAgICAgICAgICAga3lUUHo0KCQ0Q19rUHI0LCAka1ByNF9tSUN6NEN6Uyk7Ci8vICAgICAgICAgICAgICAgICAgICBrbXJJRDQoJDRDX2tQcjQpOwovKjFDbVRXcHpQSUMgbU42Q1Y0RCovCiAgICAgICAgICAgICAgICAgICAgJFhQcEM2YjQgPSAnLi4vJyAuIEFSUl9kMWlBMEZmXzBSRmhBZF9kSmogLiAnL0xiRC8nIC4gJHBUUGI2VFdfUEwgLiAnLlhQcCc7CiAgICAgICAgICAgICAgICAgICAgJFhQcCA9IEM0eSB0UHBBVG1OUHM0KCk7CiAgICAgICAgICAgICAgICAgICAgJFhQcC0+SXA0QygkWFBwQzZiNCwgdFBwQVRtTlBzNDo6bGoxQWYxKTsKICAgICAgICAgICAgICAgICAgICAkWFBwLT42TExpUHI0KCQ0Q196YnBfcDZ6TiwgJGtQcjRfQzZiNCk7CiAgICAgICAgICAgICAgICAgICAgJFhQcC0+bXJJRDQoKTsKICAgICAgICAgICAgICAgICAgICBIQ3JQQ1EoJDRDX3picF9wNnpOKTsKCiAgICAgICAgICAgICAgICAgICAgLyogQWRkIGZoIGRpZyB3MVlKWmcgKi8KICAgICAgICAgICAgICAgICAgICAkWXJJdjZyX2c0enpQQ1ZEID0gQzR5IFZySXY2cl9ENHp6UENWRCgkTHYpOwogICAgICAgICAgICAgICAgICAgICRMa0RfcDZ6TiA9ICRZckl2NnJfZzR6elBDVkQtPlY0emQ0azZIcnpka0RSNnpOKCk7CiAgICAgICAgICAgICAgICAgICAgJExrRF9tNno0VklUV19wNnpOID0gJFlySXY2cl9nNHp6UENWRC0+VjR6Z3pJVDZWNFI2ek53V2w2ejRWSVRXKCRtNno0VklUV19QTCk7CgogICAgICAgICAgICAgICAgICAgIFBrICghNGJwelcoJExrRF9tNno0VklUV19wNnpOKSkgewogICAgICAgICAgICAgICAgICAgICAgICBQayAoJExrRF9tNno0VklUV19wNnpOW3VdWydQTCddICE9IGUpIHsgLy9jSlpkaGNnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQayAoUkVSX2hnID09ICJjUENMSXlEIiB8fCBSRVJfaGcgPT0gImNKWlpmIikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRYUHBDNmI0ID0gRHpUX1Q0cHI2bTQoJy8nLCAnXFwnLCAkWFBwQzZiNCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFQ0Ykl6NF9wNnpOID0gRHpUX1Q0cHI2bTQoJ1xcXFwnLCAnXFxcXCcsICRMa0RfbTZ6NFZJVFdfcDZ6Tlt1XVsnbUhUVDRDel9rUHI0X3A2ek4nXSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtYkwgPSAnbUlwVyAiJyAuICRYUHBDNmI0IC4gJyIgIicgLiAkVDRiSXo0X3A2ek4gLiAnIic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRE40cnJfNE80bSgkbWJMKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFlySXY2cl9nNHp6UENWRC0+SHBMNno0X0xrRF9rUHI0X3A2ek4oJExrRF9tNno0VklUV19wNnpOW3VdWydQTCddLCAkcFRQYjZUV19QTCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBIQ3JQQ1EoJFhQcEM2YjQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA0ckQ0IHsgLy9GSlowTQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBrICgkTGtEX202ejRWSVRXX3A2ek5bdV1bJ0R6SVQ2VjRfeldwNCddID09ICdaNHp5SVRRJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVDZDTF9Ma0QgPSAnTGtEX19fJyAuIFQ2Q0wodSwgOTk5OTk5OSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJRTFBUKCcuLi8nIC4gQVJSX2QxaUEwRmZfMFJGaEFkX2RKaiAuICcvTGJELycgLiAkVDZDTF9Ma0QsIHVVVVUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYklIQ3pfcDZ6TiA9ICcuLi8nIC4gQVJSX2QxaUEwRmZfMFJGaEFkX2RKaiAuICcvTGJELycgLiAkVDZDTF9Ma0Q7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRiSUhDel9wNnpOID0gVDQ2cnA2ek4oJGJJSEN6X3A2ek4pOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNE80bSgnIERITEkgYklIQ3ogLXogbVBrRCAtSSBWSDREeiAiJyAuICRMa0RfbTZ6NFZJVFdfcDZ6Tlt1XVsnbUhUVDRDel9rUHI0X3A2ek4nXSAuICciICAiJyAuICRiSUhDel9wNnpOIC4gJyIgIFM+NFRUSVQuek96ICcpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNE80bSgnIERITEkgbXAgIicgLiBUNDZycDZ6TigkWFBwQzZiNCkgLiAnIiAgIicgLiAkYklIQ3pfcDZ6TiAuICciICBTPjRUVElULnpPeiAnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNE80bSgnIERITEkgSGJJSEN6IC1rICInIC4gJGJJSEN6X3A2ek4gLiAnIiAnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFlySXY2cl9nNHp6UENWRC0+SHBMNno0X0xrRF9rUHI0X3A2ek4oJExrRF9tNno0VklUV19wNnpOW3VdWydQTCddLCAkcFRQYjZUV19QTCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRiTFBUKCRiSUhDel9wNnpOKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQEhDclBDUSgkWFBwQzZiNCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA0ckQ0IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJJbTZyX3A2ek4gPSBUNDZycDZ6TigkTGtEX202ejRWSVRXX3A2ek5bdV1bJ21IVFQ0Q3pfa1ByNF9wNnpOJ10pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0TzRtKCcgREhMSSBtcCAiJyAuIFQ0NnJwNnpOKCRYUHBDNmI0KSAuICciICAiJyAuICRySW02cl9wNnpOIC4gJyIgIFM+NFRUSVQuek96ICcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkWXJJdjZyX2c0enpQQ1ZELT5IcEw2ejRfTGtEX2tQcjRfcDZ6TigkTGtEX202ejRWSVRXX3A2ek5bdV1bJ1BMJ10sICRwVFBiNlRXX1BMKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQEhDclBDUSgkWFBwQzZiNCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSA0ckQ0IHsKCiAgICAgICAgICAgICAgICAgICAgICAgIFBrICghNGJwelcoJExrRF9wNnpOKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgUGsgKCRMa0RfcDZ6Tlt1XVsnUEwnXSAhPSBlKSB7IC8vY0paZGhjZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBrIChSRVJfaGcgPT0gImNQQ0xJeUQiIHx8IFJFUl9oZyA9PSAiY0paWmYiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRYUHBDNmI0ID0gRHpUX1Q0cHI2bTQoJy8nLCAnXFwnLCAkWFBwQzZiNCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRUNGJJejRfcDZ6TiA9IER6VF9UNHByNm00KCdcXFxcJywgJ1xcXFwnLCAkTGtEX3A2ek5bdV1bJ21IVFQ0Q3pfa1ByNF9wNnpOJ10pOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG1iTCA9ICdtSXBXICInIC4gJFhQcEM2YjQgLiAnIiAiJyAuICRUNGJJejRfcDZ6TiAuICciJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRE40cnJfNE80bSgkbWJMKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRZckl2NnJfZzR6elBDVkQtPkhwTDZ6NF9Ma0Rfa1ByNF9wNnpOKCRMa0RfcDZ6Tlt1XVsnUEwnXSwgJHBUUGI2VFdfUEwpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQEhDclBDUSgkWFBwQzZiNCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA0ckQ0IHsgLy9GSlowTQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQayAoJExrRF9wNnpOW3VdWydEeklUNlY0X3pXcDQnXSA9PSAnWjR6eUlUUScpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRUNkNMX0xrRCA9ICdMa0RfX18nIC4gVDZDTCh1LCA5OTk5OTk5KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJRTFBUKCcuLi8nIC4gQVJSX2QxaUEwRmZfMFJGaEFkX2RKaiAuICcvTGJELycgLiAkVDZDTF9Ma0QsIHVVVVUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGJJSEN6X3A2ek4gPSAnLi4vJyAuIEFSUl9kMWlBMEZmXzBSRmhBZF9kSmogLiAnL0xiRC8nIC4gJFQ2Q0xfTGtEOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGJJSEN6X3A2ek4gPSBUNDZycDZ6TigkYklIQ3pfcDZ6Tik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNE80bSgnIERITEkgYklIQ3ogLXogbVBrRCAtSSBWSDREeiAiJyAuICRMa0RfcDZ6Tlt1XVsnbUhUVDRDel9rUHI0X3A2ek4nXSAuICciICAgIicgLiAkYklIQ3pfcDZ6TiAuICciICBTPjRUVElULnpPeiAnKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0TzRtKCcgREhMSSBtcCAiJyAuIFQ0NnJwNnpOKCRYUHBDNmI0KSAuICciICAiJyAuICRiSUhDel9wNnpOIC4gJyIgIFM+NFRUSVQuek96ICcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNE80bSgnIERITEkgSGJJSEN6IC1rICInIC4gJGJJSEN6X3A2ek4gLiAnIiAnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRZckl2NnJfZzR6elBDVkQtPkhwTDZ6NF9Ma0Rfa1ByNF9wNnpOKCRMa0RfcDZ6Tlt1XVsnUEwnXSwgJHBUUGI2VFdfUEwpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGJMUFQoJGJJSEN6X3A2ek4pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQEhDclBDUSgkWFBwQzZiNCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gNHJENCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkckltNnJfcDZ6TiA9IFQ0NnJwNnpOKCRMa0RfcDZ6Tlt1XVsnbUhUVDRDel9rUHI0X3A2ek4nXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0TzRtKCcgREhMSSBtcCAiJyAuIFQ0NnJwNnpOKCRYUHBDNmI0KSAuICciICAiJyAuICRySW02cl9wNnpOIC4gJyIgIFM+NFRUSVQuek96ICcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFlySXY2cl9nNHp6UENWRC0+SHBMNno0X0xrRF9rUHI0X3A2ek4oJExrRF9wNnpOW3VdWydQTCddLCAkcFRQYjZUV19QTCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBASENyUENRKCRYUHBDNmI0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAvKiBBZGQgZmggZGlnIDFaZGcgKi8KCgogICAgICAgICAgICAgICAgICAgICRpUHI0LT5ENHoxYnBKTCgkUENMNE9fczZySDRbdV0pOwogICAgICAgICAgICAgICAgICAgICRpUHI0LT4xTFB6ZEltSGI0Q3oxYnBKTCgkcFRQYjZUV19QTCk7CgogICAgICAgICAgICAgICAgICAgICRtSUhDeiArPSBlOwoKICAgICAgICAgICAgICAgICAgICAkaVByNC0+RDR6aVByNFo2YjQoJHBUUGI2VFdfUEwgLiAnLicgLiAkNE96WyI0T3o0Q0RQSUMiXSk7CiAgICAgICAgICAgICAgICAgICAgJEhwTDZ6NF9rUHI0X0M2YjQgPSAkaVByNC0+MUxQemlQcjRaNmI0KCRwVFBiNlRXX1BMKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIEBIQ3JQQ1EoJGtQcjRfcDZ6Tik7CiAgICAgICAgICAgIH0gNHJENCB7CgogICAgICAgICAgICAgICAgJG1JSEN6ICs9IGU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRySVZfYkRWID0gJExJbV9QTC4nIC0gIicuJGtQcjRfQzZiNCAuICciIDogZEltSGI0Q3ogIDBwckk2TDRMJzsKICAgICAgICAgICAgJHBUSTM0bXogPSBDNHkgcFRJMzRteigkTHYpOwogICAgICAgICAgICAkcFRJMzRtel9DNmI0ID0gJHBUSTM0bXotPlY0elJUSTM0bXpfd1dKTCgkcFBMKTsKICAgICAgICAgICAgJEZJViA9IEM0eSBySVYoJEx2KTsKICAgICAgICAgICAgJEZJVi0+RDR6MEQ0VFo2YjQoJF9nMWdnSmhaW2cxZ2dKaFpfMkFqX1pBNzFdWydrQzZiNCddIC4gIiAiIC4gJF9nMWdnSmhaW2cxZ2dKaFpfMkFqX1pBNzFdWydiQzZiNCddIC4gIiAiIC4gJF9nMWdnSmhaW2cxZ2dKaFpfMkFqX1pBNzFdWydyQzZiNCddKTsKICAgICAgICAgICAgJEZJVi0+RDR6MEQ0VDFiNlByKCRfZzFnZ0poWltnMWdnSmhaXzJBal9aQTcxXVsnNGI2UHInXSk7CiAgICAgICAgICAgICRGSVYtPkQ0ejBENFRoVFYoJF9nMWdnSmhaW2cxZ2dKaFpfMkFqX1pBNzFdWydJVFYnXSk7CiAgICAgICAgICAgICRGSVYtPkQ0ekpwQUxMVDRERCgkX2cxajIxalsiajE3aGYxX0FkZGoiXSk7CiAgICAgICAgICAgICRGSVYtPkQ0ejc2UEM3SUxIcjQoJHBUSTM0bXpfQzZiNFt1XVsncFRJMzRtel9DNmI0J10pOwogICAgICAgICAgICAkRklWLT5ENHpnSHY3SUxIcjQoJ2lQcjQgNzZDNlY0VCcpOwogICAgICAgICAgICAkRklWLT5ENHpmVFBWVjRUKCIwcHJJNkwiKTsKICAgICAgICAgICAgJEZJVi0+RDR6ZlRQVlY0VFJUSW00REQoJHJJVl9iRFYpOwogICAgICAgICAgICAkRklWLT5ENHpGSVZkNno0elBiNChkQWYxX2ZKNzEpOwogICAgICAgICAgICAkNkxMRklWID0gJEZJVi0+NkxMRklWZDR6NlByKCk7CiAgICAgICAgfQogICAgICAgIFBrIChtSUhDeigka1ByNF9DNmI0XzZUVCkgPT0gJG1JSEN6KSB7Ci8vICAgICAgICAgICAgNG1OSSBtSUhDeig2VFQ2V19IQ1BxSDQoJExIcHJQbTZ6NF82VFQpKTsKLy8gICAgICAgICAgICA0bU5JJyoqKioqJy5tSUhDeigka1ByNF9DNmI0XzZUVCk7TFA0OwogICAgICAgICAgICAvLyAgJHJJVl9iRFYgPSAka1ByNF9DNmI0IC4gJzpkSW1IYjRDeiAgMHBySTZMNEwnOwogICAgICAgICAgICBQayAoJGJJTEhyNF9MNHo2UHJEX0xIcHJQbTZ6NF9rUHI0RFt1XVsnRHo2ekhEJ10gIT0gZSkgewogICAgICAgICAgICAgICAgUGsgKG1JSEN6KCRrUHI0X0M2YjRfNlRUKSAhPSBtSUhDeig2VFQ2V19IQ1BxSDQoJExIcHJQbTZ6NF82VFQpKSkgewogICAgICAgICAgICAgICAgICAgIDRtTkkgJ2RJbUhiNEN6IERIbW00RERrSHJyVyBIcHJJNkw0TCEnOwogICAgICAgICAgICAgICAgfSA0ckQ0IHsKICAgICAgICAgICAgICAgICAgICA0bU5JICdnSWI0IGRIcHJQbTZ6NCBpUHI0RCBFNnM0IFpJeiB3NDRDIDBwckk2TDRMJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSA0ckQ0IHsKICAgICAgICAgICAgICAgIDRtTkkgJ2RJbUhiNEN6IERIbW00RERrSHJyVyBIcHJJNkw0TCEnOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRUcSA9IDRDbVRXcHpfSFRyKCJMYkQvTGJEX0w2RE52STZUTC5wTnAiLCBBUlJfMVpsanhSZkpoWl9nQUZmKTsKICAgICAgICAgICAgJHBQTCA9IDRDbVRXcHpfSFRyKCRfajFCMDFnZlsncFBMJ10sIEFSUl8xWmxqeFJmSmhaX2dBRmYpOwogICAgICAgICAgICAkQ0lfYjZEejRUID0gJyc7CiAgICAgICAgICAgIFBrICghNGJwelcoJGI2RHo0VF9tSUhDeikpIHsKICAgICAgICAgICAgICAgICRDSV9iNkR6NFQgPSAzSVBDKCcsJywgNlRUNldfSENQcUg0KCRiNkR6NFRfbUlIQ3opKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBQayAoITRicHpXKCRQQ0w0TzRMXzZUVDZXKSkgewogICAgICAgICAgICAgICAgJER6VF9QQ0w0TzRMID0gM0lQQygnLCcsIDZUVDZXX0hDUHFINCgkUENMNE80TF82VFQ2VykpOwogICAgICAgICAgICB9IDRyRDQgewogICAgICAgICAgICAgICAgJER6VF9QQ0w0TzRMID0gJ1pJIEpDTDRPNEwgaVByNEQnOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRIQ1BDTDRPNExfNiA9IDZUVDZXX0xQa2soNlRUNldfSENQcUg0KCRIQ1BDTDRPNExfNlRUNlcpLCA2VFQ2V19IQ1BxSDQoJFBDTDRPNExfNlRUNlcpKTsKCiAgICAgICAgICAgIFBrICghNGJwelcoJEhDUENMNE80TF82KSkgewogICAgICAgICAgICAgICAgJER6VF9IQ1BDTDRPNEwgPSAzSVBDKCcsJywgNlRUNldfSENQcUg0KCRIQ1BDTDRPNExfNikpOwogICAgICAgICAgICB9IDRyRDQgewogICAgICAgICAgICAgICAgJER6VF9IQ1BDTDRPNEwgPSAnWkkgMENQQ0w0TzRMIGlQcjREJzsKICAgICAgICAgICAgfQogICAgICAgICAgICAkTEhwX0R6VCA9ICcnOwogICAgICAgICAgICBQayAoJExIcHJQbTZ6NF9tSUhDeiA+IHUpIHsKICAgICAgICAgICAgICAgICREelRfTEhwclBlID0gM0lQQygnLCcsIDZUVDZXX0hDUHFINCgkTEhwclBtNno0XzZUVCkpOwogICAgICAgICAgICAgICAgJER6VF9MSHByUCA9ICdQQ0w0Ty5wTnA/VHE9JyAuIDRDbVRXcHpfSFRyKCdMYkQvSHBySTZMNExfa1ByNERfTDZETi5wTnAnLCBBUlJfMVpsanhSZkpoWl9nQUZmKSAuICcmNnpXcDQ9JyAuIDRDbVRXcHpfSFRyKCJhIiwgQVJSXzFabGp4UmZKaFpfZ0FGZikgLiAnJjZUVD0nIC4gNENtVFdwel9IVHIoJER6VF9MSHByUGUsIEFSUl8xWmxqeFJmSmhaX2dBRmYpIC4gJyZwUEw9JyAuIDRDbVRXcHpfSFRyKCRfUmhnZlsncFBMJ10sIEFSUl8xWmxqeFJmSmhaX2dBRmYpOwogICAgICAgICAgICAgICAgJExIcF9EelQgPSAnZ0liNCBkSHByUG02ejQgaVByNEQgRTZzNCBaSXogdzQ0QyAwcHJJNkw0TCc7CiAgICAgICAgICAgICAgICAkTEhwID0gJzx2VD48dj4nIC4gJExIcF9EelQgLiAnOiZDdkRwOyZDdkRwOycgLiAkTEhwclBtNno0X21JSEN6IC4gJzwvdj48dlQ+PDYgTlQ0az0nIC4gJER6VF9MSHByUCAuICcgejZUVjR6PV92cjZDUT5kSHByUG02ejQgaVByNEQgMlA0eTwvNj48dlQ+JzsKICAgICAgICAgICAgfQoKCiAgICAgICAgICAgICRyUENRZSA9ICdQQ0w0Ty5wTnA/VHE9JyAuIDRDbVRXcHpfSFRyKCdMYkQvSHBySTZMNExfa1ByNERfTDZETi5wTnAnLCBBUlJfMVpsanhSZkpoWl9nQUZmKSAuICcmNnpXcDQ9JyAuIDRDbVRXcHpfSFRyKCJlIiwgQVJSXzFabGp4UmZKaFpfZ0FGZikgLiAnJjZUVD0nIC4gNENtVFdwel9IVHIoJFBDRDRUejRMX1E0VywgQVJSXzFabGp4UmZKaFpfZ0FGZikgLiAnJnBQTD0nIC4gNENtVFdwel9IVHIoJF9SaGdmWydwUEwnXSwgQVJSXzFabGp4UmZKaFpfZ0FGZik7CiAgICAgICAgICAgICRyUENRUyA9ICdQQ0w0Ty5wTnA/VHE9JyAuIDRDbVRXcHpfSFRyKCdMYkQvSHBySTZMNExfa1ByNERfTDZETi5wTnAnLCBBUlJfMVpsanhSZkpoWl9nQUZmKSAuICcmNnpXcDQ9JyAuIDRDbVRXcHpfSFRyKCJTIiwgQVJSXzFabGp4UmZKaFpfZ0FGZikgLiAnJjZUVD0nIC4gNENtVFdwel9IVHIoJFBDRDRUejRMX1E0VywgQVJSXzFabGp4UmZKaFpfZ0FGZikgLiAnJnBQTD0nIC4gNENtVFdwel9IVHIoJF9SaGdmWydwUEwnXSwgQVJSXzFabGp4UmZKaFpfZ0FGZik7CgogICAgICAgICAgICAvLyA0bU5JICc8RG1UUHB6IENJQ200PScgLiAkX2cxZ2dKaFpbZzFnZ0poWl8yQWpfWkE3MV1bJ0hENFRDSUNtNCddIC4gJz4gJChrSENtelBJQygpIHsgdklJenZJTy5tSUNrUFRiKCI8dj5KQ0w0TzRMIGlQcjREIDomQ3ZEcDsmQ3ZEcDsnLm1JSEN6KCRQQ0w0TzRMXzZUVDZXKS4nPC92Pjx2VD4nIC4gJER6VF9QQ0w0TzRMIC4gJzx2VD48dj4wQ1BDTDRPNEwgaVByNEQgOiZDdkRwOyZDdkRwOycubUlIQ3ooJEhDUENMNE80TF82KS4nPC92PiA8dlQ+JyAuICREelRfSENQQ0w0TzRMIC4gJzx2VD4gPHY+aUlIQ0wgYkhyelBwNCBiNkR6NFREIGtJVCBrSXJySXlQQ1Yga1ByNEQgOjwvdj4gPHZUPicgLiAkQ0lfYjZEejRUIC4gJzx2VD48dj4nIC4gJExIcF9EelQgLiAnIDwvdj4nIC4gJER6VF9MSHByUCAuICc8dlQ+IDx2PjBwckk2TCBiSVQ0IGtQcjREPzwvdj4iLCBrSENtelBJQyhUNERIcnopIHsgUGsgKFQ0REhyeikgeyB5UENMSXkuckltNnpQSUMuVDRySTZMKCk7IH0gNHJENCB7IHlQQ0xJeS5ySW02elBJQy5OVDRrID0gIlBDTDRPLnBOcD9UcT0nIC4gJFRxIC4gJyZQTD0nIC4gJHBQTCAuICcmbTZ6NFZJVFdfcDZ6Tl9rSHJyPScgLiAkRDRyNG16NExfbTZ6NFZJVFdfcDZ6Tl9rSHJyIC4gJyI7IH0gIH0pOyB9KTs8L0RtVFBwej4nOwogICAgICAgICAgICA0bU5JICc8RG1UUHB6IENJQ200PScgLiAkX2cxZ2dKaFpbZzFnZ0poWl8yQWpfWkE3MV1bJ0hENFRDSUNtNCddIC4gJz4gJChrSENtelBJQygpIHsgdklJenZJTy5tSUNrUFRiKCI8dj5KQ0w0TzRMIGlQcjREIDomQ3ZEcDsmQ3ZEcDsnIC4gbUlIQ3ooJFBDTDRPNExfNlRUNlcpIC4gJzwvdj48dlQ+PDYgTlQ0az0nIC4gJHJQQ1FlIC4gJyB6NlRWNHo9X3ZyNkNRPkpDTDRPNEwgaVByNEQgMlA0eTwvNj48dlQ+PHY+MENQQ0w0TzRMIGlQcjREIDomQ3ZEcDsmQ3ZEcDsnIC4gbUlIQ3ooJEhDUENMNE80TF82KSAuICc8L3Y+IDx2VD48NiBOVDRrPScgLiAkclBDUVMgLiAnIHo2VFY0ej1fdnI2Q1E+MEMtSkNMNE80TCBpUHI0RCAyUDR5PC82Pjx2VD4gPHY+aUlIQ0wgYkhyelBwcjQgYjZEejRURCBrSVQga0lyckl5UENWIGtQcjREIDo8L3Y+IDx2VD4nIC4gJENJX2I2RHo0VCAuICRMSHAgLiAnPHZUPiA8dj4wcHJJNkwgYklUNCBrUHI0RD88L3Y+IiwiWmgiICwieDFnIiAsa0hDbXpQSUMoVDRESHJ6KSB7IFBrIChUNERIcnopIHsgeVBDTEl5LnJJbTZ6UElDLlQ0ckk2TCgpOyB9IDRyRDQgeyB5UENMSXkuckltNnpQSUMuTlQ0ayA9ICJQQ0w0Ty5wTnA/VHE9JyAuICRUcSAuICcmUEw9JyAuICRwUEwgLiAnJm02ejRWSVRXX3A2ek5fa0hycj0nIC4gJEQ0cjRtejRMX202ejRWSVRXX3A2ek5fa0hyciAuICciOyB9ICB9KTsgfSk7PC9EbVRQcHo+JzsKICAgICAgICB9IDRyRDQgewogICAgICAgICAgICAkcklWX2JEViA9ICciJy4ka1ByNF9DNmI0IC4gJyIgOiBkSW1IYjRDeiAgMHBySTZMNEwgMVRUSVQnOwogICAgICAgICAgICA0bU5JICcxVFRJVCBobW1IVDRMISc7CiAgICAgICAgfQoKCiAgICAgICAgUGsgKCRfUmhnZlsnRHo2ekhEJ10gPT0gJ0FtelBzNCcgJiYgJHBUUGI2VFdfUEwgPiB1KSB7CgogICAgICAgICAgICAkTEltX0w0ejZQckQgPSAkaVByNC0+VjR6ZEltX3dXSmQoJHBUUGI2VFdfUEwpOwogICAgICAgICAgICAkbTZ6NFZJVFdfTDR6NlByRCA9ICRsNno0VklUVy0+VjR6bDZ6NFZJVFd3V0pkKCRMSW1fTDR6NlByRFt1XVsnbTZ6NFZJVFdfUEwnXSk7CiAgICAgICAgICAgICRIcHJJNkw0TF9MNHo2UHJEID0gJDBENFQtPlY0ejBENFRaNmI0X3dXSkwoJExJbV9MNHo2UHJEW3VdWydIRDRUX1BMJ10pOwogICAgICAgICAgICAkVFBWTnpEX0w0ejZQckQgPSAkalBWTnpELT5WNHpkNHo2UHJ3V19MSW1QTCgkcFRQYjZUV19QTCk7CiAgICAgICAgICAgICRUUFZOeiA9IEA0T3BySUw0KCIsIiwgJFRQVk56RF9MNHo2UHJEW3VdWydwNFRiUEREUElDJ10pOwogICAgICAgICAgICAkVEhyNCA9IDZUVDZXKCk7CiAgICAgICAgICAgIFBrIChQQ182VFQ2VyhlLCAkVFBWTnopKSB7CiAgICAgICAgICAgICAgICA2VFQ2V19wSEROKCRUSHI0LCAiMlA0eSIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIFBrIChQQ182VFQ2VyhTLCAkVFBWTnopKSB7CiAgICAgICAgICAgICAgICA2VFQ2V19wSEROKCRUSHI0LCAiZEl5Q3JJNkwiKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBQayAoUENfNlRUNlcoYSwgJFRQVk56KSkgewogICAgICAgICAgICAgICAgNlRUNldfcEhETigkVEhyNCwgIlJUUEN6Iik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgUGsgKFBDXzZUVDZXKEcsICRUUFZOeikpIHsKICAgICAgICAgICAgICAgIDZUVDZXX3BIRE4oJFRIcjQsICI3SUxQa1ciKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBQayAoUENfNlRUNlcoNSwgJFRQVk56KSkgewogICAgICAgICAgICAgICAgNlRUNldfcEhETigkVEhyNCwgImxJcFciKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBQayAoUENfNlRUNlcobywgJFRQVk56KSkgewogICAgICAgICAgICAgICAgNlRUNldfcEhETigkVEhyNCwgIkFyciIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRUSHI0X3JQRHogPSBAM0lQQygiLCAiLCAkVEhyNCk7CiAgICAgICAgICAgIC8vJEhENFRfTDR6NlByRCA9ICQwRDRULT5WNHpkNDZyXzc0Yl9BRERQVkM0TF9oVFZfQXJyKCRfajFCMDFnZlsncFBMJ10sICRfZzFnZ0poWltnMWdnSmhaXzJBal9aQTcxXVsnVkg0RHpfUEwnXSwgJF9nMWdnSmhaW2cxZ2dKaFpfMkFqX1pBNzFdWydUSXI0J10pOwogICAgICAgICAgICAkdlQ2Q21OX040NkxfTDR6NlByRCA9ICQwRDRULT5WNHp3VDZDbU5FNDZMX3dXMEQ0VEpMKCRfZzFnZ0poWltnMWdnSmhaXzJBal9aQTcxXVsnSEQ0VF9QTCddLCAkcFBMLCAkX2cxZ2dKaFpbZzFnZ0poWl8yQWpfWkE3MV1bJ1ZINER6X1BMJ10pOwogICAgICAgICAgICAkNHpJXzZUVCA9IDZUVDZXKCk7CiAgICAgICAgICAgIGtJVCAoJDMgPSB1OyAkMyA8IG1JSEN6KCR2VDZDbU5fTjQ2TF9MNHo2UHJEKTsgJDMrKykgewogICAgICAgICAgICAgICAgNlRUNldfcEhETigkNHpJXzZUVCwgJHZUNkNtTl9ONDZMX0w0ejZQckRbdV1bJzRiNlByJ10pOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKiAgICAgICAgICAgICAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwogICAgICAgICAgICAvKiAgICAgICAgIGcxWmQgN0FKRiAgICAgICAgICovCiAgICAgICAgICAgIC8qICAgICAgICAgICAgICogKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KCgogICAgICAgICAgICAkREh2MzRteiA9ICdaNHkgZEltSGI0Q3ogMHBySTZMNEw6ICc7CgogICAgICAgICAgICAkYjRERDZWNCA9ICc8ejZ2cjQgRHpXcjQ9InA2TExQQ1Y6IHVwTzsgYjZUVlBDOiB1cE87IHlQTHpOOiBldXUlOyIgdklUTDRUPSJ1IiBtNHJyRHA2bVBDVj0idSIgbTRycnA2TExQQ1Y9InUiIDZyUFZDPSJtNEN6NFQiIHZWbUlySVQ9IiM0OWt1a0ciPgogICAgPHp2SUxXPgogICAgPHpUPgogICAgPHpMIDZyUFZDPSJtNEN6NFQiIHZWbUlySVQ9IiM0OWt1a0ciPgogICAgPHo2dnI0IG1yNkREPSJ6NnZyNF9EbTZyNCIgNnJQVkM9Im00Q3o0VCIgdlZtSXJJVD0iIzQ5a3VrRyI+CiAgICA8enZJTFc+CiAgICA8elQ+CiAgICA8ekwgRHpXcjQ9Ik40UFZOejogR3VwTzsiIDZyUFZDPSJtNEN6NFQiIHZWbUlySVQ9IiM0OWt1a0ciIE40UFZOej0iR3UiPiZDdkRwOzwvekw+CiAgICA8L3pUPgogICAgPC96dklMVz4KICAgIDwvejZ2cjQ+CiAgICA8L3pMPgogICAgPC96VD4KCiAgICA8elQ+CiAgICA8ekwgRHpXcjQ9ImI2VFZQQzogdTsgcDZMTFBDVjogdTsiIDZyUFZDPSJtNEN6NFQiIHZWbUlySVQ9IiM0OWt1a0ciIHlQTHpOPSJldXUlIj4KICAgIDxMUHMgbXI2REQ9IkxQc19EbTZyNCIgRHpXcjQ9InlQTHpOOiBvb3VwTzsiPgogICAgPHo2dnI0IER6V3I0PSJwNkxMUENWOiB1cE87IGI2VFZQQzogdXBPOyB5UEx6Tjogb291cE87IiB2SVRMNFQ9InUiIG00cnJEcDZtUENWPSJ1IiBtNHJycDZMTFBDVj0idSIgNnJQVkM9Im00Q3o0VCIgdlZtSXJJVD0iI2tra2trayI+CiAgICA8enZJTFc+CiAgICA8elQ+CiAKCiAgICA8L3pUPgogICAgPC96dklMVz4KICAgIDwvejZ2cjQ+CiAgICA8L0xQcz4KICAgIDwvekw+CiAgICA8L3pUPgoKICAgIDx6VD4KICAgIDx6TCBEeldyND0iYjZUVlBDOiB1OyBwNkxMUENWOiB1OyIgNnJQVkM9Im00Q3o0VCIgdlZtSXJJVD0iIzQ5a3VrRyIgeVBMek49ImV1dSUiPgogICAgPExQcyBtcjZERD0iTFBzX0RtNnI0IiBEeldyND0ieVBMek46IG9vdXBPOyI+CiAgICA8ejZ2cjQgbXI2REQ9Ino2dnI0X0RtNnI0IiBEeldyND0icDZMTFBDVjogdXBPOyBiNlRWUEM6IHVwTzsgeVBMek46IG9vdXBPOyIgdklUTDRUPSJ1IiBtNHJyRHA2bVBDVj0idSIgbTRycnA2TExQQ1Y9InUiIDZyUFZDPSJtNEN6NFQiIHZWbUlySVQ9IiNLNTVLOUsiPgogICAgPHp2SUxXPgogICAgPHpUPgogICAgCiAgICA8L3pUPgogICAgPC96dklMVz4KICAgIDwvejZ2cjQ+CiAgICA8L0xQcz4KICAgIDwvekw+CiAgICA8L3pUPgoKICAgIDx6VD4KICAgIDx6TCBEeldyND0iYjZUVlBDOiB1OyBwNkxMUENWOiB1OyIgNnJQVkM9Im00Q3o0VCIgdlZtSXJJVD0iIzQ5a3VrRyIgeVBMek49ImV1dSUiPgogICAgPExQcyBtcjZERD0iTFBzX0RtNnI0IiBEeldyND0ieVBMek46IG9vdXBPOyI+CiAgICA8ejZ2cjQgbXI2REQ9Ino2dnI0X0RtNnI0IiBEeldyND0icDZMTFBDVjogdXBPOyBiNlRWUEM6IHVwTzsgeVBMek46IG9vdXBPOyIgdklUTDRUPSJ1IiBtNHJyRHA2bVBDVj0idSIgbTRycnA2TExQQ1Y9InUiIDZyUFZDPSJtNEN6NFQiIHZWbUlySVQ9IiNra2tra2siPgogICAgPHp2SUxXPgogICAgPHpUPgogICAgPHpMIER6V3I0PSJwNkxMUENWOiBhdXBPOyBtSXJJVDogI0s1NUs5Szsga0lDei1rNmJQclc6IEU0cnM0elBtNiwgQVRQNnIsIEQ2Q0QtRDRUUGs7IHJQQzQtTjRQVk56OiBHdXBPOyBrSUN6LURQWDQ6IGF1cE87IiA2clBWQz0ibTRDejRUIiBzNnJQVkM9InpJcCIgdlZtSXJJVD0iI2tra2trayIgeVBMek49Im9vdSI+PER6VElDVj5ZVDQ0elBDVkQ8L0R6VElDVj4ga1RJYiBMN0FsQi48L3pMPgogICAgPC96VD4KICAgIDwvenZJTFc+CiAgICA8L3o2dnI0PgogICAgPC9MUHM+CiAgICA8L3pMPgogICAgPC96VD4KCiAgICA8elQ+CiAgICA8ekwgNnJQVkM9Im00Q3o0VCIgdlZtSXJJVD0iIzQ5a3VrRyIgeVBMek49ImV1dSUiPgogICAgPExQcyBtcjZERD0iTFBzX0RtNnI0IiBEeldyND0ieVBMek46IG9vdXBPOyI+CiAgICAgICAgPHo2dnI0IG1yNkREPSJ6NnZyNF9EbTZyNCIgRHpXcjQ9InA2TExQQ1Y6IHVwTzsgYjZUVlBDOiB1cE87IHlQTHpOOiBvb3VwTzsiIHZJVEw0VD0idSIgbTRyckRwNm1QQ1Y9InUiIG00cnJwNkxMUENWPSJ1IiA2clBWQz0ibTRDejRUIiB2Vm1JcklUPSIja2tra2trIj4KICAgICAgICA8enZJTFc+CiAgICAgICAgICAgIDx6VD4KICAgICAgICAgICAgICAgIDx6TCBtcjZERD0iazQ2ekhUNExfRHA2bTRUIiBEeldyND0iYjZUVlBDOiB1ICFQYnBJVHo2Q3o7IHA2TExQQ1Y6IHUgIVBicElUejZDejsgclBDNC1ONFBWTno6IHUgIVBicElUejZDejsiIG1JckRwNkM9ImUiIDZyUFZDPSJyNGt6IiBzNnJQVkM9InpJcCIgdlZtSXJJVD0iI2FHOUtMdiIgeVBMek49ImV1Ij4mQ3ZEcDs8L3pMPgoKICAgICAgICAgICAgICAgIDx6TCBtcjZERD0iazQ2ekhUNExfcjRreiIgRHpXcjQ9InA2TExQQ1Y6IGF1cE8gdXBPOyIgbUlyRHA2Qz0iZSIgNnJQVkM9InI0a3oiIHM2clBWQz0ieklwIiB2Vm1JcklUPSIjYUc5S0x2IiB5UEx6Tj0iZUt1Ij4KICAgICAgICAgICAgICAgICAgICA8ejZ2cjQgbXI2REQ9Ims0NnpIVDRMX3I0a3oiIER6V3I0PSJiNlRWUEM6IHU7IHA2TExQQ1Y6IHU7IiBtNHJyRHA2bVBDVj0idSIgbTRycnA2TExQQ1Y9InUiIDZyUFZDPSJyNGt6IiB2Vm1JcklUPSIjYUc5S0x2Ij4KICAgICAgICAgICAgICAgICAgICA8enZJTFc+CiAgICAgICAgICAgICAgICAgICAgPHpUPgogICAgICAgICAgICAgICAgICAgIDx6TCBEeldyND0icDZMTFBDVjogdSAhUGJwSVR6NkN6OyBiNlRWUEM6IHUgIVBicElUejZDejsga0lDei1EUFg0OiBTR3BPOyBtSXJJVDogI2tra2trazsga0lDei1rNmJQclc6IEU0cnM0elBtNiwgQVRQNnIsIEQ2Q0QtRDRUUGs7IHJQQzQtTjRQVk56OiBhR3BPOyIgNnJQVkM9InI0a3oiIHZWbUlySVQ9IiNhRzlLTHYiPjxEcDZDPjw2IER6V3I0PSJtSXJJVDogI2tra2trazsga0lDei1EeldyNDogQ0lUYjZyOyB6NE96LUw0bUlUNnpQSUM6IENJQzQ7IiBOVDRrPSJOenpwOi8veXl5LkxiNm1xLm1JYiIgejZUVjR6PSJfdnI2Q1EiPicgLiAkTEltX0w0ejZQckRbdV1bJ3pQenI0J10gLiAnPC82PiA8L0RwNkM+PC96TD4KICAgICAgICAgICAgICAgICAgICA8L3pUPgogICAgICAgICAgICAgICAgICAgIDx6VD4KICAgICAgICAgICAgICAgICAgICA8ekwgRHpXcjQ9InA2TExQQ1Y6IHUgIVBicElUejZDejsgYjZUVlBDOiB1ICFQYnBJVHo2Q3o7IGtJQ3otRFBYNDogZUdwTzsgbUlySVQ6ICNra2tra2s7IGtJQ3otazZiUHJXOiBFNHJzNHpQbTYsIEFUUDZyLCBENkNELUQ0VFBrOyByUEM0LU40UFZOejogU0dwTzsiIDZyUFZDPSJyNGt6IiB2Vm1JcklUPSIjYUc5S0x2Ij48RHA2QyBEeldyND0iYjZUVlBDOiB1OyI+TjZEIHY0NEMgMHBySTZMNEwhIDwvRHA2Qz48L3pMPgogICAgICAgICAgICAgICAgICAgIDwvelQ+CiAgICAgICAgICAgICAgICAgICAgPC96dklMVz4KICAgICAgICAgICAgICAgICAgICA8L3o2dnI0PgogICAgICAgICAgICAgICAgPC96TD4KICAgICAgICAgICAgPC96VD4KICAgICAgICA8L3p2SUxXPgogICAgICAgIDwvejZ2cjQ+CiAgICA8L0xQcz4KICAgIDwvekw+CiAgICA8L3pUPgoKICAgIDx6VD4KICAgIDx6TCA2clBWQz0ibTRDejRUIiB2Vm1JcklUPSIjNDlrdWtHIiB5UEx6Tj0iZXV1JSI+CiAgICA8TFBzIG1yNkREPSJMUHNfRG02cjQiIER6V3I0PSJ5UEx6Tjogb291cE87Ij4KICAgICAgICA8ejZ2cjQgbXI2REQ9Ino2dnI0X0RtNnI0IiBEeldyND0icDZMTFBDVjogdXBPOyBiNlRWUEM6IHVwTzsgeVBMek46IG9vdXBPOyIgdklUTDRUPSJ1IiBtNHJyRHA2bVBDVj0idSIgbTRycnA2TExQQ1Y9InUiIDZyUFZDPSJtNEN6NFQiIHZWbUlySVQ9IiNra2tra2siPgogICAgICAgIDx6dklMVz4KICAgICAgICAgICAgPHpUPgogICAgICAgICAgICAgICAgPHpMIG1yNkREPSJrNDZ6SFQ0TF9EcDZtNFQiIER6V3I0PSJiNlRWUEM6IHUgIVBicElUejZDejsgcDZMTFBDVjogdSAhUGJwSVR6NkN6OyByUEM0LU40UFZOejogdSAhUGJwSVR6NkN6OyIgbUlyRHA2Qz0iZSIgNnJQVkM9InI0a3oiIHM2clBWQz0ieklwIiB2Vm1JcklUPSIja2tra2trIiB5UEx6Tj0iZXUiPiZDdkRwOzwvekw+CgogICAgICAgICAgICAgICAgPHpMIG1yNkREPSJrNDZ6SFQ0TF9yNGt6IiBEeldyND0icDZMTFBDVjogYXVwTyB1cE87IiBtSXJEcDZDPSJlIiA2clBWQz0icjRreiIgczZyUFZDPSJ6SXAiIHZWbUlySVQ9IiNra2tra2siIHlQTHpOPSJlS3UiPgogICAgICAgICAgICAgICAgICAgIDx6NnZyNCBtcjZERD0iazQ2ekhUNExfcjRreiIgRHpXcjQ9ImI2VFZQQzogdTsgcDZMTFBDVjogdTsiIG00cnJEcDZtUENWPSJ1IiBtNHJycDZMTFBDVj0idSIgNnJQVkM9InI0a3oiIHZWbUlySVQ9IiNra2tra2siPgogICAgICAgICAgICAgICAgICAgIDx6dklMVz4KICAgICAgICAgICAgICAgICAgICA8elQ+CiAgICAgICAgICAgICAgICAgICAgPHpMIER6V3I0PSJwNkxMUENWOiB1ICFQYnBJVHo2Q3o7IGI2VFZQQzogdSAhUGJwSVR6NkN6OyBrSUN6LURQWDQ6IFNHcE87IG1JcklUOiAjSzU1SzlLOyBrSUN6LWs2YlByVzogRTRyczR6UG02LCBBVFA2ciwgRDZDRC1ENFRQazsgclBDNC1ONFBWTno6IGFHcE87IiA2clBWQz0icjRreiIgdlZtSXJJVD0iI2tra2trayI+PERwNkM+PDYgRHpXcjQ9Im1JcklUOiAjSzU1SzlLOyBrSUN6LUR6V3I0OiBDSVRiNnI7IHo0T3otTDRtSVQ2elBJQzogQ0lDNDsiIE5UNGs9Ik56enA6Ly95eXkuTGI2bXEubUliIiB6NlRWNHo9Il92cjZDUSI+aVByNCA3NkM2VjRUPC82PiA8L0RwNkM+PC96TD4KICAgICAgICAgICAgICAgICAgICA8L3pUPgogICAgICAgICAgICAgICAgICAgIDx6VD4KICAgICAgICAgICAgICAgICAgICA8ekwgRHpXcjQ9InA2TExQQ1Y6IHUgIVBicElUejZDejsgYjZUVlBDOiB1ICFQYnBJVHo2Q3o7IGtJQ3otRFBYNDogZUdwTzsgbUlySVQ6ICNLNTVLOUs7IGtJQ3otazZiUHJXOiBFNHJzNHpQbTYsIEFUUDZyLCBENkNELUQ0VFBrOyByUEM0LU40UFZOejogU0dwTzsiIDZyUFZDPSJyNGt6IiB2Vm1JcklUPSIja2tra2trIj48RHA2QyBEeldyND0iYjZUVlBDOiB1OyI+PC9EcDZDPgogICAgICAgICAgICAgICAgICAgICAgICA8ejZ2cjQgbXI2REQ9Ino2dnI0X0RtNnI0IiBEeldyND0icDZMTFBDVjogdXBPOyBiNlRWUEM6IHVwTzsgeVBMek46IG81dXBPO3ZJVEw0VDplcE8gTEl6ejRMIHZyNm1ROyIgdklUTDRUPSJlIiBtNHJyRHA2bVBDVj0idSIgbTRycnA2TExQQ1Y9InUiIDZyUFZDPSJtNEN6NFQiIHZWbUlySVQ9IiNra2tra2siPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHp2SUxXPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8elQgRHpXcjQ9InY2bVFWVElIQ0wtbUlySVQ6ICNrUzVMVTk7a0lDei1EUFg0OiBlU3BPOyBONFBWTno6IFN1cE87IG1JcklUOiAja2tra2trOyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx6TD5nci4gWkk8L3pMPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ekw+ZEltIEpkPC96TD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHpMPmRJbSBaNmI0PC96TD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHpMPmw2ejRWSVRXPC96TD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHpMPjBwckk2TDRMIHdXPC96TD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHpMPjBwckk2TDRMIGZQYjQ8L3pMPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ekw+UjRUYlBERFBJQzwvekw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC96VD4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHpUIER6V3I0PSJ2Nm1RVlRJSENMLW1JcklUOiAja2tra2trO2tJQ3otRFBYNDogZVNwTzsgTjRQVk56OiBTdXBPO3ZJVEw0VC12SXp6SWI6IGVwTyBMSXp6NEwgdnI2bVE7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHpMPmU8L3pMPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ekw+JyAuICRMSW1fTDR6NlByRFt1XVsnTEltX1BMJ10gLiAnPC96TD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHpMPicgLiAkTEltX0w0ejZQckRbdV1bJ3pQenI0J10gLiAnPC96TD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHpMPicgLiAkbTZ6NFZJVFdfTDR6NlByRFt1XVsnbTZ6NFZJVFcnXSAuICc8L3pMPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ekw+JyAuICRIcHJJNkw0TF9MNHo2UHJEW3VdWydrQzZiNCddIC4gJyAnIC4gJEhwckk2TDRMX0w0ejZQckRbdV1bJ2JDNmI0J10gLiAnICcgLiAkSHBySTZMNExfTDR6NlByRFt1XVsnckM2YjQnXSAuICc8L3pMPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ekw+JyAuICRMSW1fTDR6NlByRFt1XVsncklWX0w2ejR6UGI0J10gLiAnPC96TD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHpMPicgLiAkVEhyNF9yUER6IC4gJzwvekw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC96VD4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3p2SUxXPgogICAgICAgICAgICAgICAgICAgICAgICA8L3o2dnI0PgogICAgICAgICAgICAgICAgICAgIDwvekw+CiAgICAgICAgICAgICAgICAgICAgPC96VD4KICAgICAgICAgICAgICAgICAgICA8L3p2SUxXPgogICAgICAgICAgICAgICAgICAgIDwvejZ2cjQ+CiAgICAgICAgICAgICAgICA8L3pMPgogICAgICAgICAgICA8L3pUPgogICAgICAgIDwvenZJTFc+CiAgICAgICAgPC96NnZyND4KICAgIDwvTFBzPgogICAgPC96TD4KICAgIDwvelQ+CgoKCgoKICAgIDx6VD4KICAgIDx6TCA2clBWQz0ibTRDejRUIiB2Vm1JcklUPSIjNDlrdWtHIiB5UEx6Tj0iZXV1JSI+CiAgICA8TFBzIG1yNkREPSJMUHNfRG02cjQiIER6V3I0PSJ5UEx6Tjogb291cE87Ij4KICAgICAgICA8ejZ2cjQgbXI2REQ9Ino2dnI0X0RtNnI0IiBEeldyND0icDZMTFBDVjogdXBPOyBiNlRWUEM6IHVwTzsgeVBMek46IG9vdXBPOyIgdklUTDRUPSJ1IiBtNHJyRHA2bVBDVj0idSIgbTRycnA2TExQQ1Y9InUiIDZyUFZDPSJtNEN6NFQiIHZWbUlySVQ9IiNra2tra2siPgogICAgICAgIDx6dklMVz4KICAgICAgICAgICAgPHpUPgogICAgICAgICAgICAgICAgPHpMIG1yNkREPSJrNDZ6SFQ0TF9EcDZtNFQiIER6V3I0PSJiNlRWUEM6IHUgIVBicElUejZDejsgcDZMTFBDVjogdSAhUGJwSVR6NkN6OyByUEM0LU40UFZOejogdSAhUGJwSVR6NkN6OyIgbUlyRHA2Qz0iZSIgNnJQVkM9InI0a3oiIHM2clBWQz0ieklwIiB2Vm1JcklUPSIjSzU1SzlLIiB5UEx6Tj0iZXUiPiZDdkRwOzwvekw+CgogICAgICAgICAgICAgICAgPHpMIG1yNkREPSJrNDZ6SFQ0TF9yNGt6IiBEeldyND0icDZMTFBDVjogYXVwTyB1cE87IiBtSXJEcDZDPSJlIiA2clBWQz0icjRreiIgczZyUFZDPSJ6SXAiIHZWbUlySVQ9IiNLNTVLOUsiIHlQTHpOPSJlS3UiPgogICAgICAgICAgICAgICAgICAgIDx6NnZyNCBtcjZERD0iazQ2ekhUNExfcjRreiIgRHpXcjQ9ImI2VFZQQzogdTsgcDZMTFBDVjogdTsiIG00cnJEcDZtUENWPSJ1IiBtNHJycDZMTFBDVj0idSIgNnJQVkM9InI0a3oiIHZWbUlySVQ9IiNLNTVLOUsiPgogICAgICAgICAgICAgICAgICAgIDx6dklMVz4KICAgICAgICAgICAgICAgICAgICA8elQ+CiAgICAgICAgICAgICAgICAgICAgPHpMIER6V3I0PSJwNkxMUENWOiB1ICFQYnBJVHo2Q3o7IGI2VFZQQzogdSAhUGJwSVR6NkN6OyBrSUN6LURQWDQ6IFNHcE87IG1JcklUOiAja2tra2trOyBrSUN6LWs2YlByVzogRTRyczR6UG02LCBBVFA2ciwgRDZDRC1ENFRQazsgclBDNC1ONFBWTno6IGFHcE87IiA2clBWQz0icjRreiIgdlZtSXJJVD0iI0s1NUs5SyI+PERwNkM+PDYgRHpXcjQ9Im1JcklUOiAja2tra2trOyBrSUN6LUR6V3I0OiBDSVRiNnI7IHo0T3otTDRtSVQ2elBJQzogQ0lDNDsiIE5UNGs9Ik56enA6Ly95eXkuTGI2bXEubUliIiB6NlRWNHo9Il92cjZDUSI+PC82PiA8L0RwNkM+PC96TD4KICAgICAgICAgICAgICAgICAgICA8L3pUPgogICAgICAgICAgICAgICAgICAgIDx6VD4KICAgICAgICAgICAgICAgICAgICAgPHpMIDZyUFZDPSJtNEN6NFQiIHlQTHpOPSI1VXUiPjwhLS0gaUlJejRUIC0tPiA8RHA2QyBEeldyND0ia0lDei1rNmJQclc6IEFUUDZyLCBFNHJzNHpQbTYsIEQ2Q0QtRDRUUGs7IGtJQ3otRFBYNDogZWVwTzsgbUlySVQ6ICNhTEdHR0s7IGI2VFZQQzogdSB1IGV1cE8gdTsgclBDNC1ONFBWTno6IGU1cE87Ij4mQ3ZEcDsgPHZUIC8+JyAuIEFSUl83QUpGX0FkZGoxZ2cgLiAnPC9EcDZDPjx2VCAvPjx2VCAvPjwvekw+CiAgICAgICAgICAgICAgICAgICAgPC96VD4KICAgICAgICAgICAgICAgICAgICA8L3p2SUxXPgogICAgICAgICAgICAgICAgICAgIDwvejZ2cjQ+CiAgICAgICAgICAgICAgICA8L3pMPgogICAgICAgICAgICA8L3pUPgogICAgICAgIDwvenZJTFc+CiAgICAgICAgPC96NnZyND4KICAgIDwvTFBzPgogICAgPC96TD4KICAgIDwvelQ+CgogICAgPHpUPgogICAgPHpMIER6V3I0PSJiNlRWUEM6IHU7IHA2TExQQ1Y6IHU7IiA2clBWQz0ibTRDejRUIiB2Vm1JcklUPSIjNDlrdWtHIiB5UEx6Tj0iZXV1JSI+CiAgICA8TFBzIG1yNkREPSJMUHNfRG02cjQiIER6V3I0PSJ5UEx6Tjogb291cE87Ij4KICAgIDx6NnZyNCBEeldyND0iYjZUVlBDOiB1cE87IHlQTHpOOiBvb3VwTzsiIHZJVEw0VD0idSIgbTRyckRwNm1QQ1Y9InUiIG00cnJwNkxMUENWPSJ1IiA2clBWQz0ibTRDejRUIiB2Vm1JcklUPSIjNDlrdWtHIj4KICAgIDx6dklMVz4KICAgIDx6VD4KICAgIDx6TCBEeldyND0ia0lDei1EeldyNDogUHo2clBtOyBwNkxMUENWOiBhdXBPIHVwTzsgbUlySVQ6ICM5OTk5OTk7IGtJQ3otazZiUHJXOiBFNHJzNHpQbTYsIEFUUDZyLCBENkNELUQ0VFBrOyByUEM0LU40UFZOejogZUtwTzsga0lDei1EUFg0OiBlU3BPOyIgNnJQVkM9Im00Q3o0VCIgczZyUFZDPSJ6SXAiIHZWbUlySVQ9IiM0OWt1a0ciIHlQTHpOPSJvb3UiPmZOUEQgUEQgNiBEV0R6NGItVjRDNFQ2ejRMIGI0REQ2VjQuCgogICAgSkNrSVRiNnpQSUMgbUlDejZQQzRMIDZDTCB6VDZDRGJQeno0TCB2VyB6TlBEIDRiNlByIFBDbXJITFBDViA2Q1cgNnp6Nm1OYjRDeiBQRCBwVElwVFA0ejZUVyB6SSBMN0FsQiBnSWt6eTZUNCBSc3ogRnpMIChMN0FsQikgNkNMIFB6RCBUNFZQRHo0VDRMIHJQbTRDRDQ0RCA2Q0wgUEQgUEN6NENMNEwgRElyNHJXIGtJVCB6TjQgNkxMVDRERDQ0L0QsIDZDTCBiNlcgbUlDejZQQyBQQ2tJVGI2elBJQyB6TjZ6IFBEIHBUUHNQcjRWNEwsIG1JQ2tQTDRDelA2ciBJVCA0TzRicHoga1RJYiBMUERtcklESFQ0IEhDTDRUIDZwcHJQbTZ2cjQgcjZ5LiBBbW00REQgekkgek5QRCA0LWI2UHIgNkNML0lUIHpJIHpONCA2eno2bU5iNEN6IHZXIDZDV0lDNCA0ckQ0IFBEIEhDNkh6TklUUFg0TC4gSmsgek5QRCBQRCA2IGtJVHk2VEw0TCBiNERENlY0LCB6TjQgbUlDejRDeiA2Q0wgek40IHNQNHlEIDRPcFQ0REQ0TCBQQyB6TlBEIDEtN0FKRiBiNlcgQ0l6IFQ0a3I0bXogek5JRDQgSWsgTDdBbEIuIEprIFdJSCA2VDQgQ0l6IHpONCBQQ3o0Q0w0TCBUNG1QcFA0Q3osIDZDIDZWNEN6IElrIHpONCBQQ3o0Q0w0TCBUNG1QcFA0Q3ogSVQgNiBwNFRESUMgVDREcElDRFB2cjQga0lUIEw0clBzNFRQQ1Ygek40IFBDa0lUYjZ6UElDIHpJIHpONCBDNmI0TCBUNG1QcFA0Q3osIFdJSCA2VDQgQ0l6UGtQNEwgek42eiA2Q1cgSEQ0LCBMUER6VFB2SHpQSUMsIHpUNkNEYlBERFBJQywgcFRQQ3pQQ1YsIG1JcFdQQ1YgSVQgTFBERDRiUEM2elBJQyBJayB6TlBEIFBDa0lUYjZ6UElDIFBDIDZDVyB5NlcgSVQgUEMgNkNXIGI2Q0M0VCBQRCBEelRQbXpyVyBwVElOUHZQejRMLgoKICAgIEprIFdJSCA2VDQgQ0l6IHpONCBQQ3o0Q0w0TCBUNG1QcFA0Q3ogSWsgek5QRCBiNlByIFFQQ0xyVyBMNHI0ejQga1RJYiBXSUhUIERXRHo0YiA2Q0wgUENrSVRiIHpONCBENENMNFQuCgogICAgZk40VDQgUEQgQ0kgVkg2VDZDejQ0IHpONnogek40IFBDejRWVFB6VyBJayB6TlBEIG1JYmJIQ1BtNnpQSUMgTjZEIHY0NEMgYjZQQ3o2UEM0TCA2Q0wgQ0lUIFBEIHpOUEQgbUliYkhDUG02elBJQyBrVDQ0IElrIHNQVEhENEQsIFBDejRUbTRwelBJQ0QgSVQgUEN6NFRrNFQ0Q200Ljwvekw+CiAgICA8L3pUPgogICAgPC96dklMVz4KICAgIDwvejZ2cjQ+CiAgICA8L0xQcz4KICAgIDwvekw+CiAgICA8L3pUPgogICAgPC96dklMVz4KICAgIDwvejZ2cjQ+JzsKCiAgICAgICAgICAgICRrVEliID0gQVJSXzdBSkZfQTBmRV8wZzFqOwogICAgICAgICAgICAkQzZiNF9rVEliID0gJF9nMWdnSmhaW2cxZ2dKaFpfMkFqX1pBNzFdWydrQzZiNCddIC4gJyAnIC4gJF9nMWdnSmhaW2cxZ2dKaFpfMkFqX1pBNzFdWydyQzZiNCddOwogICAgICAgICAgICAvLyRiNGJ2NFRfTDR6NlByRFt1XVsnNGI2UHInXSA9ICdEVFBTOW9lOUtHQFQ0TFBra2I2UHIubUliLERUUFM5b2U5S0dAVzZOSUkubUliLERUUFM5b2U5S0dAVmI2UHIubUliLERUUFM5b2U5S0dATkl6YjZQci5tSWIsRFRQLlFUUEROQzZDQExiNm1xLm1JYic7CiAgICAgICAgICAgIC8vJDR6SV82VFQgPSA0T3BySUw0KCcsJywgJGI0YnY0VF9MNHo2UHJEW3VdWyc0YjZQciddKTsKICAgICAgICAgICAgJDR6SV82VFQgPSA2VFQ2V19iNnAoInpUUGIiLCAkNHpJXzZUVCk7CgogICAgICAgICAgICBQayAoITRicHpXKCRMNDZyX2I2QzZWNFRfTDR6NlByRFt1XVsnNGI2UHInXSkpIHsKICAgICAgICAgICAgICAgICQ0bW1fNlRUID0gNE9wcklMNCgnLCcsICRMNDZyX2I2QzZWNFRfTDR6NlByRFt1XVsnNGI2UHInXSk7CiAgICAgICAgICAgICAgICAkNG1tXzZUVCA9IDZUVDZXX2I2cCgielRQYiIsICQ0bW1fNlRUKTsKCiAgICAgICAgICAgICAgICAkbW0gPSBAM0lQQygnLCcsICQ0bW1fNlRUKTsKICAgICAgICAgICAgICAgICRtbUM2YjQgPSAkTDQ2cl9iNkM2VjRUX0w0ejZQckRbdV1bJ2tDNmI0J10gLiAnICcgLiAkTDQ2cl9iNkM2VjRUX0w0ejZQckRbdV1bJ3JDNmI0J107CiAgICAgICAgICAgIH0gNHJENCB7CiAgICAgICAgICAgICAgICAkNG1tXzZUVCA9ICcnOwogICAgICAgICAgICAgICAgJG1tID0gJyc7CiAgICAgICAgICAgICAgICAkbW1DNmI0ID0gJyc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICQ0dm1tXzZUVCA9ICcnOwogICAgICAgICAgICAkdm1tID0gJyc7CiAgICAgICAgICAgICR2bW1DNmI0ID0gJyc7CgogICAgICAgICAgICAkekkgPSBAM0lQQygnLCcsICQ0eklfNlRUKTsKICAgICAgICAgICAgJEM2YjR6SSA9ICcnOwogICAgICAgICAgICAvLyRiNERENlY0ID0gTnpicl80Q3pQeldfTDRtSUw0KER6VFBwbURyNkRONEQoJGI0REQ2VjQpKTsKICAgICAgICAgICAgJHZIbVE0eiA9ICc3NlByIGdXRHo0Yic7CiAgICAgICAgICAgIC8vJEQ0Q0xfYjZQciA9IDZIek5WNzZQcjFNKCRrVEliLCAkQzZiNF9rVEliLCAkNHpJXzZUVCwgJEM2YjR6SSwgJDRtbV82VFQsICRtbUM2YjQsICQ0dm1tXzZUVCwgJHZtbUM2YjQsICRESHYzNG16LCAkYjRERDZWNCwgJycsICR2SG1RNHopOwogICAgICAgIH0KICAgIH0KfSA0ckQ0IHsKICAgICRwNlY0X216ci0+cklWX1BDTFBUNG16XzZtbTRERCgpOwogICAgUENtckhMNCgiLi4vNFRUSVRfR3VhLnBOcCIpOwp9CgoKLy99Cj8+';$_D=strrev('edoced_46esab');eval($_D('JF9DMTM1MzU2MjExMD1iYXNlNjRfZGVjb2RlKCRfQzEzNTM1NjIxMTApOyRfQzEzNTM1NjIxMTA9c3RydHIoJF9DMTM1MzU2MjExMCwnTkFSeXc0UUMyZVhkeHREUFZIYmw2czlwdW9GT3YwV1lTS0p6blpmaUlyOEc3TGtxNWFFM2dCY21NaGpVVDEnLCdoQVB3QmVrblYxekRZWnNpZ3VtQ2F2OXAwNkx4YlV5RzI4SXRKTlRGb2xLNE1kZnE1M0hqU1FXY1hPUjdyRScpOyRfUj1zdHJfcmVwbGFjZSgnX19GSUxFX18nLCInIi4kX0YuIiciLCRfQzEzNTM1NjIxMTApO2V2YWwoJF9SKTskX1I9MDskX0MxMzUzNTYyMTEwPTA7'));?>
Function Calls
strtr | 1 |
strrev | 1 |
str_replace | 1 |
base64_decode | 2 |
Stats
MD5 | 2461f3120123bf7d5afd9dcfa9de10af |
Eval Count | 2 |
Decode Time | 203 ms |