1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 | <?php /** Plugin Name: Villa Portal - Babon Multimedia Plugin URI: http://www.babonmultimedia.com/ Description: Villa Portal Version: 0.5 - Beta Author: GusDeCooL Author URI: http://www.gusdecool.com/ License: GPL - Ga Pake Lama, langsung pake aja. */ define('VP_URLPATH', WP_PLUGIN_URL.'/'.plugin_basename( dirname(__FILE__) ).'/' ); define('VP_DIRPATH', WP_PLUGIN_DIR.'/'.plugin_basename( dirname(__FILE__) ).'/'); // Set Master Class include VP_DIRPATH.'includes/inc.villaportal.php'; // Include Core Class $path = array('url'=>VP_URLPATH, 'dir'=>VP_DIRPATH); $linkpage = array('property'=>'?page=vp-property'); // $vp = new VillaPortal($path, $linkpage); // Set Core Class add_action('admin_menu', 'my_plugin_menu'); function my_plugin_menu() { //session_start(); global $vp; add_menu_page('Babon Villa Portal', 'Babon VP', 'manage_options', 'vp-property', 'pageProperty'); add_submenu_page('vp-property', 'Property', 'Property', 'manage_options', 'vp-property', 'pageProperty'); add_submenu_page('vp-property', 'Country', 'Country', 'manage_options', 'vp-config-country', 'pageConfigLocation'); add_submenu_page('vp-property', 'Facilities', 'Facilities', 'manage_options', 'vp-config-facility', 'pageConfigFacility'); if( is_admin() ) global $plugin_page; if($plugin_page == 'vp-property' or $plugin_page == 'vp-config-country' or $plugin_page == 'vp-config-facility' and is_admin() ){ $vp->registerCSS(); $vp->registerScript(); } } function pageProperty() { global $vp; $vp->urlAdmin = '/wp-admin/admin.php?page=vp-property'; $show = $_GET['show']; $action = $_GET['action']; $propertyId = $_GET['id']; $vp->loadExtention( 'Property', array($propertyId) ); switch ($show) { // &show=propertylist default: $data['title'] = 'List Property'; $data['content'] = $vp->propertyList('propertylist.php', 'propertylist-wrap.php'); $vp->parser('wrap.php', $data); break; // Do Action case 'action': switch ($action) { default: header("Location: $vp->urlAdmin"); break; case 'delete': $vp->propertyDelete(); break; case 'update': if ($_POST){ if ($vp->propertyIdentifier){ // property exist do update if(!$vp->propertyUpdate($_POST)) { die('Error Property Update'); } }else{ $vp->propertyInsert($_POST); } } break; } header('refresh:1;url='.$vp->linkpage['property']); break; // &show=propertyedit case 'propertyedit': if ($vp->propertyIdentifier) { // Mode Update $data['title'] = 'Edit Location'; } else { // Mode Insert $data['title'] = 'Add Location'; } $data['content'] = $vp->propertyEdit('property-form.php'); $vp->parser('wrap.php', $data); break; // Show Property with its room case 'property': $data['title'] = 'Show Property'; $data['content'] = ''; if ($vp->propertyIdentifier) { $data['content'] .= $vp->getProperty('property.php'); } else { header("Location: $vp->urlAdmin"); } $vp->parser('wrap.php', $data); $vp->showRoom('roomlist.php', 'roomlist-wrap.php'); $vp->showFacility(); break; case 'roomaction': include VP_DIRPATH.'includes/inc.room.php'; // Include Room Class $url_property = $vp->urlAdmin.'&show=property&id='.$vp->propertyIdentifier; $room = new Room($url_property); switch($_GET['roomaction']){ case 'create': // Show create form if ($room->identifier) { $data['title'] = 'Add Room'; }else{ $data['title'] = 'Edit Room'; } $data['content'] = $vp->parseChunk('room-form.php', $room->data); $vp->parser('wrap.php', $data); break; case 'doedit': if ($_POST){ $_POST['property_id'] = $vp->propertyIdentifier; if($room->identifier) { // Do Update $vp->db->update('vm_room', $_POST, 'id='.$room->identifier); }else{ // Do Insert $vp->db->insert('vm_room', $_POST); } } header('Location: '.$room->url_property); break; case 'dodelete': if($_GET['roomid'] != '' && $_GET['id'] != '') { $vp->room_delete($_GET['roomid']); } header('Location: '.$room->url_property); break; } break; case 'roomprice': $vp->loadExtention('Room'); switch ($_GET['roomprice']) { default: $data['title'] = 'Rate Setup'; $data['content'] = $vp->listRate(); $vp->parser('wrap.php', $data); $_SESSION['linkBack'] = $_SERVER['REQUEST_URI']; break; case 'update': switch ($_POST['method']) { case 'date': unset($_POST['method']); $_SESSION['rateDate'] = $_POST['year'].'-'.$_POST['month']; break; case 'rate': unset($_POST['method']); $vp->room->roomUpdate($_POST); break; } header('refresh:1;url='.$_SESSION['linkBack']); break; } break; } } function pageConfigLocation() { global $vp; $mode = $_GET['mode']; switch ($mode) { case 'savelocation': $vp->saveLocation('?page=vp-config-country'); break; case 'deletelocation': $vp->deleteLocation($_GET['id'], '?page=vp-config-country'); break; case 'addlocation': ?> <div class="wrap"> <div class="icon32" id="icon-tools"><br></div> <h2>Add Location</h2> <?php $vp->formAddLocation('?page=vp-config-country&mode=savelocation'); ?> </div> <?php break; default: ?> <div class="wrap"> <div class="icon32" id="icon-tools"><br></div> <h2>Location Manager</h2> <a class="button-primary" href="?page=vp-config-country&mode=addlocation&do=add">Add Country</a> <?php $vp->listLocation(); ?> </div> <?php break; } print($return); } function pageConfigFacility() { global $vp; $vp->urlAdmin = '/wp-admin/admin.php?page=vp-config-facility'; $table_name = 'vm_facility'; DBAPI::$debug = false; switch ($_POST['action']) { case 'insert': unset( $_POST['action'] ); $insertData = $_POST['insert']; if ( $vp->db->countRow($table_name, null, "name='$insertData'") == 0 ) { // This data is not in database $data = array('name'=>$insertData); $vp->db->insert($table_name, $data); } break; case 'update': unset( $_POST['action'] ); foreach ($_POST['update'] as $key=>$value) { $data['name'] = $value['name']; $vp->db->update($table_name, $data, 'id='.$key); } break; default: break; } if ($_GET['action'] == 'delete' && $_GET['id'] != '' ) { $vp->db->delete($table_name, 'id='.$_GET['id']); header('Location: '.$vp->urlAdmin); } ?> <div class="wrap"> <div class="icon32" id="icon-tools"><br></div> <h2>Facility Manager</h2> <?php $vp->configListFacility(); ?> <form action="" method="post"> <input type="hidden" name="action" value="insert" /> <p> <input type="text" name="insert" value="" /> </p> <p> <input type="submit" value="insert" class="button-primary" /> </p> </form> </div> <?php } ?> |
PD9waHAKLyoqClBsdWdpbiBOYW1lOiBWaWxsYSBQb3J0YWwgLSBCYWJvbiBNdWx0aW1lZGlhClBsdWdpbiBVUkk6IGh0dHA6Ly93d3cuYmFib25tdWx0aW1lZGlhLmNvbS8KRGVzY3JpcHRpb246IFZpbGxhIFBvcnRhbApWZXJzaW9uOiAwLjUgLSBCZXRhCkF1dGhvcjogR3VzRGVDb29MCkF1dGhvciBVUkk6IGh0dHA6Ly93d3cuZ3VzZGVjb29sLmNvbS8KTGljZW5zZTogR1BMIC0gR2EgUGFrZSBMYW1hLCBsYW5nc3VuZyBwYWtlIGFqYS4KKi8KCmRlZmluZSgnVlBfVVJMUEFUSCcsIFdQX1BMVUdJTl9VUkwuJy8nLnBsdWdpbl9iYXNlbmFtZSggZGlybmFtZShfX0ZJTEVfXykgKS4nLycgKTsKZGVmaW5lKCdWUF9ESVJQQVRIJywgV1BfUExVR0lOX0RJUi4nLycucGx1Z2luX2Jhc2VuYW1lKCBkaXJuYW1lKF9fRklMRV9fKSApLicvJyk7CgovLyBTZXQgTWFzdGVyIENsYXNzCmluY2x1ZGUgVlBfRElSUEFUSC4naW5jbHVkZXMvaW5jLnZpbGxhcG9ydGFsLnBocCc7IC8vIEluY2x1ZGUgQ29yZSBDbGFzcwokcGF0aCA9IGFycmF5KCd1cmwnPT5WUF9VUkxQQVRILCAnZGlyJz0+VlBfRElSUEFUSCk7CiRsaW5rcGFnZSA9IGFycmF5KCdwcm9wZXJ0eSc9Pic/cGFnZT12cC1wcm9wZXJ0eScpOwovLyAkdnAgPSBuZXcgVmlsbGFQb3J0YWwoJHBhdGgsICRsaW5rcGFnZSk7IC8vIFNldCBDb3JlIENsYXNzCgphZGRfYWN0aW9uKCdhZG1pbl9tZW51JywgJ215X3BsdWdpbl9tZW51Jyk7CmZ1bmN0aW9uIG15X3BsdWdpbl9tZW51KCkgewogICAgLy9zZXNzaW9uX3N0YXJ0KCk7CiAgICBnbG9iYWwgJHZwOyAgICAKICAgIGFkZF9tZW51X3BhZ2UoJ0JhYm9uIFZpbGxhIFBvcnRhbCcsICdCYWJvbiBWUCcsICdtYW5hZ2Vfb3B0aW9ucycsICd2cC1wcm9wZXJ0eScsICdwYWdlUHJvcGVydHknKTsKICAgIGFkZF9zdWJtZW51X3BhZ2UoJ3ZwLXByb3BlcnR5JywgJ1Byb3BlcnR5JywgJ1Byb3BlcnR5JywgJ21hbmFnZV9vcHRpb25zJywgJ3ZwLXByb3BlcnR5JywgJ3BhZ2VQcm9wZXJ0eScpOyAgICAKICAgIGFkZF9zdWJtZW51X3BhZ2UoJ3ZwLXByb3BlcnR5JywgJ0NvdW50cnknLCAnQ291bnRyeScsICdtYW5hZ2Vfb3B0aW9ucycsICd2cC1jb25maWctY291bnRyeScsICdwYWdlQ29uZmlnTG9jYXRpb24nKTsKICAgIGFkZF9zdWJtZW51X3BhZ2UoJ3ZwLXByb3BlcnR5JywgJ0ZhY2lsaXRpZXMnLCAnRmFjaWxpdGllcycsICdtYW5hZ2Vfb3B0aW9ucycsICd2cC1jb25maWctZmFjaWxpdHknLCAncGFnZUNvbmZpZ0ZhY2lsaXR5Jyk7CgoJaWYoIGlzX2FkbWluKCkgKSBnbG9iYWwgJHBsdWdpbl9wYWdlOwogICAgaWYoJHBsdWdpbl9wYWdlID09ICd2cC1wcm9wZXJ0eScgb3IgJHBsdWdpbl9wYWdlID09ICd2cC1jb25maWctY291bnRyeScgb3IgJHBsdWdpbl9wYWdlID09ICd2cC1jb25maWctZmFjaWxpdHknIGFuZCBpc19hZG1pbigpICl7CgkJJHZwLT5yZWdpc3RlckNTUygpOwoJCSR2cC0+cmVnaXN0ZXJTY3JpcHQoKTsKICAgIH0KfQoKZnVuY3Rpb24gcGFnZVByb3BlcnR5KCkgewogICAgZ2xvYmFsICR2cDsKICAgICR2cC0+dXJsQWRtaW4gPSAnL3dwLWFkbWluL2FkbWluLnBocD9wYWdlPXZwLXByb3BlcnR5JzsKICAgICRzaG93ID0gJF9HRVRbJ3Nob3cnXTsKICAgICRhY3Rpb24gPSAkX0dFVFsnYWN0aW9uJ107CiAgICAkcHJvcGVydHlJZCA9ICRfR0VUWydpZCddOwogICAgJHZwLT5sb2FkRXh0ZW50aW9uKCAnUHJvcGVydHknLCBhcnJheSgkcHJvcGVydHlJZCkgKTsKCiAgICBzd2l0Y2ggKCRzaG93KSB7CgkvLyAmc2hvdz1wcm9wZXJ0eWxpc3QKCWRlZmF1bHQ6CgkgICAgJGRhdGFbJ3RpdGxlJ10gPSAnTGlzdCBQcm9wZXJ0eSc7CgkgICAgJGRhdGFbJ2NvbnRlbnQnXSA9ICR2cC0+cHJvcGVydHlMaXN0KCdwcm9wZXJ0eWxpc3QucGhwJywgJ3Byb3BlcnR5bGlzdC13cmFwLnBocCcpOwoKCSAgICAkdnAtPnBhcnNlcignd3JhcC5waHAnLCAkZGF0YSk7CgkgICAgYnJlYWs7CgoJLy8gRG8gQWN0aW9uCgljYXNlICdhY3Rpb24nOgoJICAgIHN3aXRjaCAoJGFjdGlvbikgewoJCWRlZmF1bHQ6CgkJICAgIGhlYWRlcigiTG9jYXRpb246ICR2cC0+dXJsQWRtaW4iKTsKCQkgICAgYnJlYWs7CgkJY2FzZSAnZGVsZXRlJzoKCQkgICAgJHZwLT5wcm9wZXJ0eURlbGV0ZSgpOwoJCSAgICBicmVhazsKCQljYXNlICd1cGRhdGUnOgoJCSAgICBpZiAoJF9QT1NUKXsKCQkJaWYgKCR2cC0+cHJvcGVydHlJZGVudGlmaWVyKXsgLy8gcHJvcGVydHkgZXhpc3QgZG8gdXBkYXRlCgkJCSAgICBpZighJHZwLT5wcm9wZXJ0eVVwZGF0ZSgkX1BPU1QpKSB7CgkJCQlkaWUoJ0Vycm9yIFByb3BlcnR5IFVwZGF0ZScpOwoJCQkgICAgfQoJCQl9ZWxzZXsKCQkJICAgICR2cC0+cHJvcGVydHlJbnNlcnQoJF9QT1NUKTsKCQkJfQoJCSAgICB9CgkJICAgIGJyZWFrOwoJICAgIH0KCSAgICBoZWFkZXIoJ3JlZnJlc2g6MTt1cmw9Jy4kdnAtPmxpbmtwYWdlWydwcm9wZXJ0eSddKTsKCSAgICBicmVhazsKCgkvLyAmc2hvdz1wcm9wZXJ0eWVkaXQKCWNhc2UgJ3Byb3BlcnR5ZWRpdCc6CgkgICAgaWYgKCR2cC0+cHJvcGVydHlJZGVudGlmaWVyKSB7IC8vIE1vZGUgVXBkYXRlCgkJJGRhdGFbJ3RpdGxlJ10gPSAnRWRpdCBMb2NhdGlvbic7CgkgICAgfSBlbHNlIHsgLy8gTW9kZSBJbnNlcnQKCQkkZGF0YVsndGl0bGUnXSA9ICdBZGQgTG9jYXRpb24nOwoJICAgIH0KCgkgICAgJGRhdGFbJ2NvbnRlbnQnXSA9ICR2cC0+cHJvcGVydHlFZGl0KCdwcm9wZXJ0eS1mb3JtLnBocCcpOwoJICAgICR2cC0+cGFyc2VyKCd3cmFwLnBocCcsICRkYXRhKTsKCSAgICBicmVhazsKCgkvLyBTaG93IFByb3BlcnR5IHdpdGggaXRzIHJvb20KCWNhc2UgJ3Byb3BlcnR5JzoKCSAgICAkZGF0YVsndGl0bGUnXSA9ICdTaG93IFByb3BlcnR5JzsKCSAgICAkZGF0YVsnY29udGVudCddID0gJyc7CgkgICAgaWYgKCR2cC0+cHJvcGVydHlJZGVudGlmaWVyKSB7CgkJJGRhdGFbJ2NvbnRlbnQnXSAuPSAkdnAtPmdldFByb3BlcnR5KCdwcm9wZXJ0eS5waHAnKTsKCSAgICB9IGVsc2UgewoJCWhlYWRlcigiTG9jYXRpb246ICR2cC0+dXJsQWRtaW4iKTsKCSAgICB9CgoJICAgICR2cC0+cGFyc2VyKCd3cmFwLnBocCcsICRkYXRhKTsKCSAgICAkdnAtPnNob3dSb29tKCdyb29tbGlzdC5waHAnLCAncm9vbWxpc3Qtd3JhcC5waHAnKTsKCSAgICAkdnAtPnNob3dGYWNpbGl0eSgpOwkgICAgCgkgICAgYnJlYWs7CgoJY2FzZSAncm9vbWFjdGlvbic6CgkgICAgaW5jbHVkZSBWUF9ESVJQQVRILidpbmNsdWRlcy9pbmMucm9vbS5waHAnOyAvLyBJbmNsdWRlIFJvb20gQ2xhc3MKCSAgICAkdXJsX3Byb3BlcnR5ID0gJHZwLT51cmxBZG1pbi4nJnNob3c9cHJvcGVydHkmaWQ9Jy4kdnAtPnByb3BlcnR5SWRlbnRpZmllcjsKCSAgICAkcm9vbSA9IG5ldyBSb29tKCR1cmxfcHJvcGVydHkpOwoKCSAgICBzd2l0Y2goJF9HRVRbJ3Jvb21hY3Rpb24nXSl7CgkJY2FzZSAnY3JlYXRlJzoKCQkgICAgLy8gU2hvdyBjcmVhdGUgZm9ybQoJCSAgICBpZiAoJHJvb20tPmlkZW50aWZpZXIpIHsKCQkJJGRhdGFbJ3RpdGxlJ10gPSAnQWRkIFJvb20nOwoJCSAgICB9ZWxzZXsKCQkJJGRhdGFbJ3RpdGxlJ10gPSAnRWRpdCBSb29tJzsKCQkgICAgfQoKCQkgICAgJGRhdGFbJ2NvbnRlbnQnXSA9ICR2cC0+cGFyc2VDaHVuaygncm9vbS1mb3JtLnBocCcsICRyb29tLT5kYXRhKTsKCQkgICAgJHZwLT5wYXJzZXIoJ3dyYXAucGhwJywgJGRhdGEpOwoJCSAgICBicmVhazsKCgkJY2FzZSAnZG9lZGl0JzoKCQkgICAgaWYgKCRfUE9TVCl7CgkJCSRfUE9TVFsncHJvcGVydHlfaWQnXSA9ICR2cC0+cHJvcGVydHlJZGVudGlmaWVyOwoJCQlpZigkcm9vbS0+aWRlbnRpZmllcikgeyAvLyBEbyBVcGRhdGUKCQkJICAgICR2cC0+ZGItPnVwZGF0ZSgndm1fcm9vbScsICRfUE9TVCwgJ2lkPScuJHJvb20tPmlkZW50aWZpZXIpOwoJCQl9ZWxzZXsgLy8gRG8gSW5zZXJ0CgkJCSAgICAkdnAtPmRiLT5pbnNlcnQoJ3ZtX3Jvb20nLCAkX1BPU1QpOwoJCQl9CgkJICAgIH0KCQkgICAgaGVhZGVyKCdMb2NhdGlvbjogJy4kcm9vbS0+dXJsX3Byb3BlcnR5KTsKCQkgICAgYnJlYWs7CgoJCWNhc2UgJ2RvZGVsZXRlJzoKCQkgICAgaWYoJF9HRVRbJ3Jvb21pZCddICE9ICcnICYmICRfR0VUWydpZCddICE9ICcnKSB7CgkJCSR2cC0+cm9vbV9kZWxldGUoJF9HRVRbJ3Jvb21pZCddKTsKCQkgICAgfQoJCSAgICBoZWFkZXIoJ0xvY2F0aW9uOiAnLiRyb29tLT51cmxfcHJvcGVydHkpOwoJCSAgICBicmVhazsKCSAgICB9CglicmVhazsKCgljYXNlICdyb29tcHJpY2UnOgoJICAgICR2cC0+bG9hZEV4dGVudGlvbignUm9vbScpOwoJICAgIHN3aXRjaCAoJF9HRVRbJ3Jvb21wcmljZSddKSB7CgkJZGVmYXVsdDoKCQkgICAgJGRhdGFbJ3RpdGxlJ10gPSAnUmF0ZSBTZXR1cCc7CgkJICAgICRkYXRhWydjb250ZW50J10gPSAkdnAtPmxpc3RSYXRlKCk7CgkJICAgICR2cC0+cGFyc2VyKCd3cmFwLnBocCcsICRkYXRhKTsKCQkgICAgJF9TRVNTSU9OWydsaW5rQmFjayddID0gJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ107CQkJCgkJYnJlYWs7CgoJCWNhc2UgJ3VwZGF0ZSc6CgkJICAgIHN3aXRjaCAoJF9QT1NUWydtZXRob2QnXSkgewoJCQljYXNlICdkYXRlJzoKCQkJICAgIHVuc2V0KCRfUE9TVFsnbWV0aG9kJ10pOwoJCQkgICAgJF9TRVNTSU9OWydyYXRlRGF0ZSddID0gJF9QT1NUWyd5ZWFyJ10uJy0nLiRfUE9TVFsnbW9udGgnXTsJCQkJCgkJCWJyZWFrOwoKCQkJY2FzZSAncmF0ZSc6CgkJCSAgICB1bnNldCgkX1BPU1RbJ21ldGhvZCddKTsKCQkJICAgICR2cC0+cm9vbS0+cm9vbVVwZGF0ZSgkX1BPU1QpOwoJCQlicmVhazsKCQkgICAgfQoJCSAgICBoZWFkZXIoJ3JlZnJlc2g6MTt1cmw9Jy4kX1NFU1NJT05bJ2xpbmtCYWNrJ10pOwoJCWJyZWFrOwoJICAgIH0KCWJyZWFrOwogICAgfQp9CgpmdW5jdGlvbiBwYWdlQ29uZmlnTG9jYXRpb24oKSB7CiAgICBnbG9iYWwgJHZwOwogICAgJG1vZGUgPSAkX0dFVFsnbW9kZSddOwoKICAgIHN3aXRjaCAoJG1vZGUpIHsKCWNhc2UgJ3NhdmVsb2NhdGlvbic6CgkgICAgJHZwLT5zYXZlTG9jYXRpb24oJz9wYWdlPXZwLWNvbmZpZy1jb3VudHJ5Jyk7CgkgICAgYnJlYWs7CgoJY2FzZSAnZGVsZXRlbG9jYXRpb24nOgoJICAgICR2cC0+ZGVsZXRlTG9jYXRpb24oJF9HRVRbJ2lkJ10sICc/cGFnZT12cC1jb25maWctY291bnRyeScpOwoJICAgIGJyZWFrOwoKCWNhc2UgJ2FkZGxvY2F0aW9uJzoKCSAgICA/PgoJICAgIDxkaXYgY2xhc3M9IndyYXAiPgoJCTxkaXYgY2xhc3M9Imljb24zMiIgaWQ9Imljb24tdG9vbHMiPjxicj48L2Rpdj4KCQk8aDI+QWRkIExvY2F0aW9uPC9oMj4KCQk8P3BocCAkdnAtPmZvcm1BZGRMb2NhdGlvbignP3BhZ2U9dnAtY29uZmlnLWNvdW50cnkmbW9kZT1zYXZlbG9jYXRpb24nKTsgPz4KCSAgICA8L2Rpdj4KCSAgICA8P3BocAoJICAgIGJyZWFrOwoKCWRlZmF1bHQ6CgkgICAgPz4KCSAgICA8ZGl2IGNsYXNzPSJ3cmFwIj4KCQk8ZGl2IGNsYXNzPSJpY29uMzIiIGlkPSJpY29uLXRvb2xzIj48YnI+PC9kaXY+CgkJPGgyPkxvY2F0aW9uIE1hbmFnZXI8L2gyPgoJCTxhIGNsYXNzPSJidXR0b24tcHJpbWFyeSIgaHJlZj0iP3BhZ2U9dnAtY29uZmlnLWNvdW50cnkmbW9kZT1hZGRsb2NhdGlvbiZkbz1hZGQiPkFkZCBDb3VudHJ5PC9hPgoJCTw/cGhwICR2cC0+bGlzdExvY2F0aW9uKCk7ID8+CgkgICAgPC9kaXY+CgkgICAgPD9waHAKCWJyZWFrOwogICAgfQoKICAgIHByaW50KCRyZXR1cm4pOwp9CgpmdW5jdGlvbiBwYWdlQ29uZmlnRmFjaWxpdHkoKSB7CiAgICBnbG9iYWwgJHZwOwogICAgJHZwLT51cmxBZG1pbiA9ICcvd3AtYWRtaW4vYWRtaW4ucGhwP3BhZ2U9dnAtY29uZmlnLWZhY2lsaXR5JzsKICAgICR0YWJsZV9uYW1lID0gJ3ZtX2ZhY2lsaXR5JzsKICAgIERCQVBJOjokZGVidWcgPSBmYWxzZTsKICAgIHN3aXRjaCAoJF9QT1NUWydhY3Rpb24nXSkgewoJY2FzZSAnaW5zZXJ0JzoKCSAgICB1bnNldCggJF9QT1NUWydhY3Rpb24nXSApOwoJICAgICRpbnNlcnREYXRhID0gJF9QT1NUWydpbnNlcnQnXTsKCSAgICBpZiAoICR2cC0+ZGItPmNvdW50Um93KCR0YWJsZV9uYW1lLCBudWxsLCAibmFtZT0nJGluc2VydERhdGEnIikgPT0gMCApIHsgLy8gVGhpcyBkYXRhIGlzIG5vdCBpbiBkYXRhYmFzZQoJCSRkYXRhID0gYXJyYXkoJ25hbWUnPT4kaW5zZXJ0RGF0YSk7CgkJJHZwLT5kYi0+aW5zZXJ0KCR0YWJsZV9uYW1lLCAkZGF0YSk7CgkgICAgfQoJYnJlYWs7CgkKCWNhc2UgJ3VwZGF0ZSc6CgkgICAgdW5zZXQoICRfUE9TVFsnYWN0aW9uJ10gKTsKCSAgICBmb3JlYWNoICgkX1BPU1RbJ3VwZGF0ZSddIGFzICRrZXk9PiR2YWx1ZSkgewkJCgkJJGRhdGFbJ25hbWUnXSA9ICR2YWx1ZVsnbmFtZSddOwoJCSR2cC0+ZGItPnVwZGF0ZSgkdGFibGVfbmFtZSwgJGRhdGEsICdpZD0nLiRrZXkpOwoJICAgIH0KCWJyZWFrOwogICAgCglkZWZhdWx0OgoJYnJlYWs7CiAgICB9CiAgICAKICAgIGlmICgkX0dFVFsnYWN0aW9uJ10gPT0gJ2RlbGV0ZScgJiYgJF9HRVRbJ2lkJ10gIT0gJycgKSB7CgkkdnAtPmRiLT5kZWxldGUoJHRhYmxlX25hbWUsICdpZD0nLiRfR0VUWydpZCddKTsKCWhlYWRlcignTG9jYXRpb246ICcuJHZwLT51cmxBZG1pbik7CiAgICB9CiAgICA/PgogICAgPGRpdiBjbGFzcz0id3JhcCI+Cgk8ZGl2IGNsYXNzPSJpY29uMzIiIGlkPSJpY29uLXRvb2xzIj48YnI+PC9kaXY+Cgk8aDI+RmFjaWxpdHkgTWFuYWdlcjwvaDI+Cgk8P3BocCAkdnAtPmNvbmZpZ0xpc3RGYWNpbGl0eSgpOyA/PgkKCQoJPGZvcm0gYWN0aW9uPSIiIG1ldGhvZD0icG9zdCI+CgkgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYWN0aW9uIiB2YWx1ZT0iaW5zZXJ0IiAvPgoJICAgIDxwPgoJCTxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJpbnNlcnQiIHZhbHVlPSIiIC8+CgkgICAgPC9wPgkgICAgCgkgICAgPHA+CgkJPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9Imluc2VydCIgY2xhc3M9ImJ1dHRvbi1wcmltYXJ5IiAvPgoJICAgIDwvcD4KCTwvZm9ybT4JCiAgICA8L2Rpdj4KICAgIDw/cGhwCn0KPz4=


