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 eval("?>".base64_decode("PD9waHANCglyZXF1aXJlX29uY2UgIi4uL2NvbmZpZy9zYW1idW5nLnBocCI..

Decoded Output download

<?php ?><?php
require_once "../config/sambung.php";
if (!isset($_SESSION)) {
    session_start();
}
error_reporting(0);
date_default_timezone_set('Asia/Jakarta');
require_once ("../config/config.php");
?>
<!DOCTYPE html>
<html>
	<head>
		<?php require_once ("../37/tmcss.html"); ?>
		<style>
			.form-group .form-lines {
				width: 100%;
				position: relative;
				border-bottom: 0px solid #ddd; 
			}
			.form-group .form-lines:after {
				content: '';
				position: absolute;
				left: 0;
				width: 100%;
				height: 0;
				bottom: -1px;
				-moz-transform: scaleX(0);
				-ms-transform: scaleX(0);
				-o-transform: scaleX(0);
				-webkit-transform: scaleX(0);
				transform: scaleX(0);
				-moz-transition: 0.25s ease-in;
				-o-transition: 0.25s ease-in;
				-webkit-transition: 0.25s ease-in;
				transition: 0.25s ease-in;
				border-bottom: 0px solid #1f91f3; 
			}
			.form-group .form-lines .form-label {
				font-weight: normal;
				color: #aaa;
				position: absolute;
				top: 10px;
				left: 0;
				cursor: text;
				-moz-transition: 0.2s;
				-o-transition: 0.2s;
				-webkit-transition: 0.2s;
				transition: 0.2s; 
			}

			.form-group .form-lines.focused:after {
				-moz-transform: scaleX(1);
				-ms-transform: scaleX(1);
				-o-transform: scaleX(1);
				-webkit-transform: scaleX(1);
				transform: scaleX(1); 
			}
			.form-group .form-lines.focused .form-label {
				top: -10px;
				right: 0;
				font-size: 12px; 
			}
			.shift{
				margin-top:12px !important;
				margin-left:-14px !important;
			}
			.form-group .form-control {
				position: relative;
				z-index: 1;
			}
			@media only screen and (max-width: 1024px) {
				.shift{
					margin-top:10px !important;
				}
			}
			.no-padding{
				padding: 0px !important;
			}
			.no-margin{
				margin: 0px !important;
			}
			.images{
				border: 1px solid #bbb;
				border-radius: 50%;
			}
			.card .body .col-xs-6, 
			.card .body .col-md-5, 
			.card .body .col-sm-12, 
			.card .body .col-xs-4 {
				margin-bottom: 0px;
			}
			#mapcanvas{
				margin-top:10px;
				height:360px;
				width: 100%;
				border: 1px solid #bbb;
				text-align:center;
				background-image: url('../images/peta.gif'); 
				background-repeat: no-repeat; 
				background-position: center center; 
				background-size: 100% 100%;
				background-color:#242f3e
			}
			#radar{
				position:absolute;
				left: 50%;
				transform: translate(-50%, 0);
				width:87%;
				height:90%;
				margin: 12px 0;
				background:url('../images/vY6Tl.png');
				background-repeat: no-repeat; 
				background-position: center center;
				background-size: 77% 100%;
			}
			#rad{
				height:100%;
				width: 100%;
				background:url('../images/fbgUD.png');
				background-repeat: no-repeat; 
				background-position: center center;
				background-size: 95% 100%;
			}
			@media only screen and (max-width: 568px) {
				#radar{
					width: 90%;
					height: 70%;
					margin: 40px 0;
				}	
			}
			@media only screen and (max-width: 667px) {
				#radar{
					width: 95%;
					height: 90%;
					margin: 12px 0;
				}	
			}
			@media only screen and (max-width: 768px) {
				#radar{
					width:85%;
					height:90%;
					margin: 12px 0;
				}	
			}
			@media only screen and (max-width: 1024px) {
				h4{
					font-size:14px;
					margin-top: 16px;
				}
				switch label{
					font-size:12px;
				}
				#mapcanvas{
					height:250px;
				}
				#radar{
					width:291px;
					height:90%;
					margin: 12px 0;
				}
				.divReason{
					margin-top:30px;
				}
			}
			.btn-primary{
				padding: 0 12px 4px 12px;
			}
			.ukar_conong{
				margin-top:10px;
			}
			#mapcanvas {
				-webkit-animation: fadeIn 300ms;
				animation: fadeIn 200ms;
			}
			@-webkit-keyframes fadeIn {
				from {opacity: 0;}
				to {opacity: 1;}
			}
			@keyframes fadeIn {
				from {opacity: 0;}
				to {opacity: 1;}
			}
			.modal-image{
				width: 100%;
				height:250px;
				border: 1px solid #bbb;
				vertical-align: middle;
			}
			.modal-open .modal {
				overflow-x: hidden;
				overflow-y: hidden;
			}
			@media (min-width: 768px) {
				.modal-dialog {
					width: 600px;
					margin: 50px auto;
				}
				.modal-content {
					-webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
						box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
				}
			}
			.modal .modal-content {
				border: 1px solid #9a9a9a;
			}
			.divCamera{
				text-align:center;
			}
			.btn-jepret, btn-parem{
				position: relative
			}
		</style>
	</head>

	<body class="theme-black" onload="getLocation();">
		<?php include "../37/tmloader.html"; ?>
		<section>
			<aside id="leftsidebar" class="sidebar">
				<?php include "../37/tmmenu.php"; ?>
			</aside>
		</section>
		<section class="content">
			<div class="container-fluid">
			<form action="#" method="post" id="form-absence" enctype="multipart/form-data">
				<div class="row clearfix">
					<div class="col-lg-12 col-md-12 col-sm-12 col-sm-12">
						<div class="card">
							<div class="header">
								<h2>
									Time Attendance
									<small>Verification Geo Location</small>
								</h2>
								<div class="header-dropdown">
									<button type="submit" class="btn btn-time btn-primary">
										<i class="material-icons">save</i>
										Save
									</button>
								</div>
							</div>
							<div class="body">
								<div class="row clearfix">
									<div class="col-md-7">
										<span class="hide col-red" id="tampilkan">Browser not support Geolocation !</span>
										<div id="mapcanvas">
											<div id="radar" class="responsive">
												<div id="rad"></div>
											</div>
										</div>
									</div>
									<div class="col-md-5">
										<div class="row clearfix">
											<div class="col-xs-5">
												<h4 class="form-label tanggal"><?php echo date('M jS Y'); ?></h4>
											</div>
											<div class="col-xs-7">
												<div class="switch pull-right" style="margin-top:12px;">
													<label>WFH<input name="abs_wf" id="abs_wf" type="checkbox"><span class="lever switch-col-blue"></span>WFO</label>
												</div>
											</div>
										</div>
										<div class="row clearfix">
											<div class="col-sm-12" style="margin-top:20px;">
												<div class="form-group form-float">
													<div class="form-line">
														<input type="hidden" name="abs_date" id="abs_date" value="<?php echo date('Y-m-d'); ?>" class="form-control">
														<input type="hidden" name="abs_grade" id="abs_grade" value="<?php echo $mygrade; ?>" class="form-control">
														<input type="hidden" name="abs_division" id="abs_division" value="<?php echo $mydiv; ?>" class="form-control">
														<input type="hidden" name="abs_id" id="abs_id" class="form-control">
														<input type="hidden" name="abs_user_id" id="abs_user_id" value="<?php echo $myId; ?>" class="form-control">
														<input type="text" name="abs_user_name" id="abs_user_name" value="<?php echo $myname; ?>" readonly class="form-control">
														<label class="form-label">Name</label>
													</div>
												</div>
												<div class="form-group form-float">
													<div class="form-line">
														<input type="hidden" name="abs_dept_id" id="abs_dept_id" value="<?php echo $mydept; ?>" class="form-control">
														<input type="text" name="abs_dept_name" id="abs_dept_name" value="<?php echo $mydeptname; ?>" readonly class="form-control">
														<label class="form-label">Department</label>
													</div>
												</div>
											</div>
										</div>
										<div class="row clearfix">
											<div class="col-xs-6">
												<div class="form-group form-float">
													<div class="form-line">
														<input type="text" name="abs_check_in" id="abs_check_in" class="form-control time24" maxlength="5" autocomplete="off" onkeypress="return isTimeKey(event)">
														<label class="form-label">Check In</label>
													</div>
												</div>
											</div>
											<div class="col-xs-6">
												<div class="form-group form-float">
													<div class="form-line">
														<input type="text" name="abs_zone_region_in" id="abs_zone_region_in" class="form-control" autocomplete="off">
														<label class="form-label">Time Zone</label>
													</div>
												</div>
											</div>
											<div class="col-xs-12 hide">
												<div class="form-group form-float">
													<div class="form-line">
														<input type="text" name="abs_zone_time_in" id="abs_zone_time_in" class="form-control" autocomplete="off">
														<label class="form-label">Time Zone</label>
													</div>
												</div>
											</div>
										</div>
										<div class="row clearfix">
											<div class="col-xs-6">
												<div class="form-group form-float">
													<div class="form-lines focused">
														<label class="form-label">Shift</label>
													</div>
													<div class="switch">
														<label class="shift">
															<input type="checkbox" name="abs_shift" id="abs_shift">
															<span class="lever switch-col-red"></span>
														</label>
													</div>
												</div>
											</div>
											<div class="col-xs-6">
												<div class="form-group form-float">
													<div class="form-lines focused">
														<label class="form-label">Permission / Late</label>
													</div>
													<div class="switch">
														<label class="shift">
															<input type="checkbox" name="abs_not_in" id="abs_not_in">
															<span class="lever switch-col-red"></span>
														</label>
													</div>
												</div>
											</div>
										</div>
										<div class="row clearfix">
											<div class="col-xs-6">
												<div class="form-group form-float">
													<div class="form-line">
														<input type="text" name="abs_latitude" id="abs_latitude" class="form-control">
														<label class="form-label">Latitude</label>
													</div>
												</div>
											</div>
											<div class="col-xs-6">
												<div class="form-group form-float">
													<div class="form-line">
														<input type="text" name="abs_longitude" id="abs_longitude" class="form-control">
														<label class="form-label">Longitude</label>
													</div>
												</div>
											</div>
										</div>
										<div class="row clearfix hide">
											<div class="col-sm-12">
												<div class="line-group"></div>
											</div>
										</div>
										<div class="row clearfix">
											<div class="col-sm-12">
												<div class="form-group form-float">
													<div class="form-line">
														<textarea rows="1" name="abs_address" id="abs_address" class="form-control no-resize auto-growth"></textarea>
														<label class="form-label">Address</label>
													</div>
													<small class="col-grey hide">ENTER key press multiple times</small>
												</div>
											</div>
										</div>
									</div>
								</div>
							</div>
						</div>
					</div>
				</div>
				<div class="modal fade" id="mdModal" tabindex="-1" role="dialog">
					<div class="modal-dialog" role="document">
						<div class="modal-content">
							<div class="modal-header">
								<h4 class="modal-title" id="defaultModalLabel">Upload & Reason</h4>
							</div>
							<div class="modal-body" style="padding:20px 20px">
								<div class="row clearfix">
									<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12 divCamera hide">
										<div id="my_camera"></div>
										<button type="button" onClick="take_snapshot()" class="btn bg-blue btn-circle btn-jepret waves-effect waves-circle waves-float">
											<i class="material-icons">camera_alt</i>
										</button>
										<button type="button" class="btn bg-grey btn-circle btn-parem waves-effect waves-circle waves-float">
											<i class="material-icons">cancel</i>
										</button>
									</div>
									<div class="col-lg-6 col-md-6 col-sm-12 col-xs-12 divUpload">
										<div class="modal-image text-center">
											<input type="hidden" name="abs_image" id="abs_image" class="abs_image">
											<input type="file" name="abs_file" id="abs_file" onchange="showPicture(this)" style="display:none">
											<label for="abs_file" style="cursor:pointer;">
												<i id="abs_icon" class="material-icons" style="font-size:100px;color:#777;margin-top:60px">touch_app</i>
												<img id="abs_show" src="" width="89.2%" height="248px" style="position:absolute; left:16px" alt="Drop file here or click to upload">
											</label>
										</div>
									</div>
									<div class="col-lg-6 col-md-6 col-sm-12 col-xs-12 divReason">
										<div class="form-group form-float">
											<div class="form-line">
												<textarea rows="1" name="abs_reason" id="abs_reason" class="form-control no-resize auto-growth"></textarea>
												<label class="form-label">Reason Not/Late In</label>
											</div>
											<small class="col-grey">ENTER key press multiple times</small>
										</div>
									</div>
								</div>
							</div>
							<div class="modal-footer">
								<button type="button" class="btn btn-link waves-effect btn-camera pull-left" id='open'>CAMERA</button>
								<button type="button" class="btn btn-link waves-effect btn-upload" data-dismiss="modal">UPLOAD</button>
								<button type="button" class="btn btn-link waves-effect btn-cancel" data-dismiss="modal">CANCEL</button>
							</div>
						</div>
					</div>
				</div>
			</form>
			</div>
		</section>
		<?php include "../37/tmfooter.html"; ?>

		<script src="../plugins/jquery/jquery.min.js"></script>
		<script src="../plugins/bootstrap/js/bootstrap.js"></script>
		<script src="../plugins/jquery-slimscroll/jquery.slimscroll.js"></script>
		<script src="../plugins/node-waves/waves.js"></script>
		<script src="../plugins/autosize/autosize.js"></script>
		<script src="../plugins/sweetalert/sweetalert.min.js"></script>
		<script src="../plugins/jquery-inputmask/jquery.inputmask.bundle.js"></script>
		<script src="../plugins/momentjs/moment.js"></script>
		<script src="../plugins/bootstrap-material-datetimepicker/js/bootstrap-material-datetimepicker.js"></script>
		<script src="../plugins/jquery-validation/jquery.validate.js"></script>
		<script src="../js/admin.js"></script>
		<script src="../js/in-form-elements.js"></script>
		<script src="../js/tm-default.js"></script>
		<script type="text/javascript">
			$(document).ready(function() {
				/*
				setInterval(function(){
					getLocation();
				}, 30*1000);
				*/
				var dt = new Date();
				var startTime	= "12:00:00";
				var endTime 	= dt.getHours() + ":" + dt.getMinutes() + ":" + dt.getSeconds();
				var st = new Date('00','00','00',startTime.split(':')[0],startTime.split(':')[1],startTime.split(':')[2]);
				var et = new Date('00','00','00',endTime.split(':')[0],endTime.split(':')[1],endTime.split(':')[2]);
				if(dt.getTime() > st.getTime() && dt.getTime() < et.getTime()){
					$("#abs_shift").val('0').trigger("change");
					$("#abs_shift").prop('checked', true);
				}else{
					$("#abs_shift").val('1').trigger("change");
					$('#abs_shift').prop("checked", false);
				}
				$.ajax({
					url: '../tform/abs_getin.php',
					success:function(msg){
						var str = msg.split('~');
						if( str[0] == 'x' ){
							$("#abs_check_in").val(str[1]).trigger("change");
							$("#abs_id").val(str[2]).trigger("change");
							$(".btn-time").prop("disabled", true);
							swal({
								title:"You have checked in", 
								text: '',
								type: "warning",
								showCancelButton: false,       
								confirmButtonText: "OK",
								closeOnConfirm: true,
								closeOnEsc: false,
								closeOnClickOutside: false
							}, function () {
								setTimeout(function() {
									window.location.assign('home.php?tm=23452ef72852cd3d8ace59e0e6bbc66a0b3f82987cfaba5dd1c77c0e43d7c2a5');
								}, 100);								
							});
						}
						else{
							var d = new Date();
							var time = d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds();
							var st = msg.split('~');
							$("#abs_id").val('0').trigger("change");
							$("#abs_date").val(st[15]).trigger("change");
							$("#abs_wf").val(st[4]);
							if( st[4] == 1){
								$("#abs_wf").attr('checked');
							}else{
								$("#abs_wf").removeAttr('checked');
							}
							if( $("#abs_grade").val() > 4 && $("#abs_division").val() == 7){
								$("#abs_check_in").val(st[9]).trigger("change");
							}
							else if( $("#abs_user_id").val() == 235 ||  $("#abs_user_id").val() == 239 ||  $("#abs_user_id").val() == 236){
								$("#abs_check_in").val(st[9]).trigger("change");
							}
							else{
								$("#abs_check_in").val(st[9]).prop("readonly", true).trigger("change");
							}
							$("#abs_check_in").parent().removeClass('focused').addClass('focused');
							/*
							$("#abs_shift").val(st[11]).trigger("change");
							if( st[11] == 1 ){
								$("#abs_shift").val('1').trigger("change");
								$("#abs_shift").prop('checked', true);
							}else{
								$("#abs_shift").val('0').trigger("change");
								$("#abs_shift").prop('checked', false);
							}*/
							
							$("#abs_not_in").val(st[12]).trigger("change");
							if(st[12] == 1){
								$("#abs_not_in").val('1').attr('checked');
							}else{
								$("#abs_not_in").val('0').removeAttr('checked');
							}
						}
					}
				});
				var $rad = $('#rad'), d = 0;
				(function rotate() {    
					$rad.css({ transform: 'rotate('+ d +'deg)'}); 
					var timer = setTimeout(function() {
						++d; 
						rotate(); 
					}, 25); 
				})();
			});
		</script>
		<script async src="https://maps.googleapis.com/maps/api/js?key=AIzaSyBzatKJQbOLYLryFQgItYbbIwyTRl3EZw8"></script>
		<script type="text/javascript">
			var options = {
				enableHighAccuracy: true,
				timeout: 5000,
				maximumAge: 0
			};		
			var view = document.getElementById("tampilkan");
			function getLocation() {
				if (navigator.geolocation) {
					navigator.geolocation.getCurrentPosition(showPosition, showError, {enableHighAccuracy: true, timeout: 20000, maximumAge: 10000});
				} else {
					view.innerHTML = "Browser not support Geolocation !";
				}
			}
			function showPosition(position) {
				view.classList.remove("hide");
				view.classList.add("hide");
				lat = position.coords.latitude;
				lng = position.coords.longitude;
				acc = position.coords.accuracy;
				var grade  = document.getElementById("abs_grade").value;
				var divisi = document.getElementById("abs_division").value;
				var pesan = document.getElementById("abs_user_id").value;
				getAddress(lat, lng);
				if( grade > 4 && divisi == 7){
					var gede = 'true';
				}
				else if( pesan == 235 || pesan == 239 || pesan == 236){
					var gede = 'true';
				}
				else{
					var gede = 'false';
				}
				
				var myOptions = {
					center: new google.maps.LatLng(lat, lng),
					zoom: 14,
					mapTypeControl: false,
					scaleControl: false,
					streetViewControl: false,
					zoomControl: false,
					fullscreenControl: gede,
					backgroundColor: '#242f3e',
					mapTypeId:google.maps.MapTypeId.ROADMAP,
					styles: [
					  { elementType: "geometry", stylers: [{ color: "#242f3e" }] },
					  { elementType: "labels.text.stroke", stylers: [{ color: "#242f3e" }] },
					  { elementType: "labels.text.fill", stylers: [{ color: "#746855" }] },
					  {
						featureType: "road",
						elementType: "geometry",
						stylers: [{ color: "#38414e" }]
					  },
					  {
						featureType: "road",
						elementType: "geometry.stroke",
						stylers: [{ color: "#212a37" }]
					  },
					  {
						featureType: "road",
						elementType: "labels.text.fill",
						stylers: [{ color: "#9ca5b3" }]
					  },
					  {
						featureType: "road.highway",
						elementType: "geometry",
						stylers: [{ color: "#746855" }]
					  },
					  {
						featureType: "road.highway",
						elementType: "geometry.stroke",
						stylers: [{ color: "#1f2835" }]
					  },
					  {
						featureType: "road.highway",
						elementType: "labels.text.fill",
						stylers: [{ color: "#f3d19c" }]
					  },
					  {
						featureType: "water",
						elementType: "geometry",
						stylers: [{ color: "#17263c" }]
					  },
					  {
						featureType: "water",
						elementType: "labels.text.fill",
						stylers: [{ color: "#515c6d" }]
					  },
					  {
						featureType: "water",
						elementType: "labels.text.stroke",
						stylers: [{ color: "#17263c" }]
					  }
					]

				}
				var map = new google.maps.Map(document.getElementById("mapcanvas"), myOptions);
				var grade  = document.getElementById("abs_grade").value;
				var divisi = document.getElementById("abs_division").value;
				var pesan = document.getElementById("abs_user_id").value;
				var markers = [];
				if( grade > 4 && divisi == 7){
					var marker = new google.maps.Marker({
						position: new google.maps.LatLng(lat, lng),
						map: map,
						draggable: true,
						animation: google.maps.Animation.BOUNCE,
						title: "I am here!",
						icon: {                             
							url: "../images/disini.png",
							scaledSize: new google.maps.Size(30, 50)
						}
					});
					$("#abs_address").prop("readonly", false);
					autosize.update($('textarea'));
				}
				else if( pesan == 235 || pesan == 239 || pesan == 236){
					var marker = new google.maps.Marker({
						position: new google.maps.LatLng(lat, lng),
						map: map,
						draggable: true,
						animation: google.maps.Animation.BOUNCE,
						title: "I am here!",
						icon: {                             
							url: "../images/disini.png",
							scaledSize: new google.maps.Size(30, 50)
						}
					});
					$("#abs_address").prop("readonly", false);
					autosize.update($('textarea'));
				}
				else{
					var marker = new google.maps.Marker({
						position: new google.maps.LatLng(lat, lng),
						map: map,
						animation: google.maps.Animation.DROP,	
						title: "I am here!",
						icon: {                             
							url: "../images/disini.png",
							scaledSize: new google.maps.Size(30, 50)
						}
					});
					$("#abs_address").prop("readonly", true);
					autosize.update($('textarea'));
				}
				google.maps.event.addListener(marker, 'dragend', function (event) {
					lt = this.getPosition().lat();
					ln = this.getPosition().lng();
					getAddress(lt, ln);
				});
				var geocoder = new google.maps.Geocoder();
				$("#abs_address").bind('keyup', function(e) {
					if( $(this).val().length > 5 || $(this).val() != '' || $(this).val() != null ){
						geocodeAddress(geocoder, map);
					}
					var key = e.which;
					if (key == 13) {
						e.preventDefault();
					}
				});
			}
			function geocodeAddress(geocoder, resultsMap) {
				var address = document.getElementById("abs_address").value;
				geocoder.geocode({ address: address }, function(results, status) {
					if (status === "OK") {
						resultsMap.setCenter(results[0].geometry.location);
						var marker = new google.maps.Marker({
							map: resultsMap,
							position: results[0].geometry.location
						});
					}
				});
			}
			function showError(error) {
				switch(error.code) {
					case error.PERMISSION_DENIED:
						view.innerHTML = "Browser not support Geolocation !"
						break;
					case error.POSITION_UNAVAILABLE:
						view.innerHTML = "Your location can't be found"
						break;
					case error.TIMEOUT:
						view.innerHTML = "Request timeout"
						break;
					case error.UNKNOWN_ERROR:
						view.innerHTML = "An unknown error occurred."
						break;
				}
				view.classList.remove("hide");
			 }
		</script>
		<script type="text/javascript">
			function getAddress(lat, lng) {
				var latlng = {lat: lat, lng: lng};
				var geocoder = new google.maps.Geocoder;
					geocoder.geocode({'location': latlng}, function(results, status) {
					if (status === 'OK') {
						if (results[0]) {
							rs = results[0].formatted_address;
						} else {
							rs = 'No results found';
						}
					} else {
						rs = 'Geocoder failed due to: ' + status;
					}
					$("#abs_latitude").val(lat).prop("readonly", true).parent().addClass("focused");
					$("#abs_longitude").val(lng).prop("readonly", true).parent().addClass("focused");
					var grade  = document.getElementById("abs_grade").value;
					var divisi = document.getElementById("abs_division").value;
					var pesan = document.getElementById("abs_user_id").value;
					if( grade > 4 && divisi == 7){
						$('#abs_address').val(rs).prop("readonly", false).parent().addClass("focused");
					}
					else if( pesan == 235 || pesan == 239 || pesan == 236){
						$('#abs_address').val(rs).prop("readonly", false).parent().addClass("focused");
					}
					else{
						$('#abs_address').val(rs).prop("readonly", true).parent().addClass("focused");
					}
					autosize.update($('textarea'));
					var ta = document.querySelector('textarea');
					ta.style.display = 'none';
					autosize(ta);
					ta.style.display = '';
					autosize.update(ta);
					var uri = "https://maps.googleapis.com/maps/api/timezone/json?location="+lat+","+lng+"&timestamp="+(Math.round((new Date().getTime())/1000)).toString()+"&key=AIzaSyACB87ikre48c9rRL5ogbBKYfhnSepzQTs";
					$.get(uri).success(function(response) {
						if(response.timeZoneId != null){
							var d = new Date();
							var utc = d.getTime() + (d.getTimezoneOffset() * 60000);
							var nd = new Date(utc + (1000*response.rawOffset));
							var jam = nd.toLocaleString();
							var hour = (response.rawOffset)/60;
							//parseFloat(jam.replace('.',':');
							$("#abs_zone_time_in").val(nd.toLocaleString()).prop("readonly", true).parent().addClass("focused");
							if(hour == 420){
								$("#abs_zone_region_in").val('WIB').prop("readonly", true).parent().addClass("focused");
							}
							else if(hour == 480){
								$("#abs_zone_region_in").val('WITA').prop("readonly", true).parent().addClass("focused");
							}
							else if(hour == 540){
								$("#abs_zone_region_in").val('WIT').prop("readonly", true).parent().addClass("focused");
							}
						}
					});
				});
			}
		</script>
		<script type="text/javascript">
			$('#abs_shift').change(function(){
				if ($(this).is(':checked')) {
					$(this).val('1');
					if( $("#abs_grade").val() > 4 && $("#abs_division").val() == 7){
						getTimeKhusus();
					}
					else if( $("#abs_user_id").val() == 235 ||  $("#abs_user_id").val() == 239 ||  $("#abs_user_id").val() == 236){
						getTimeKhusus();
					}
					else{
						getTimeShift();
					}
					return;
				}else{
					$(this).val('0');
					if( $("#abs_grade").val() > 4 && $("#abs_division").val() == 7){
						getTimeKhusus();
					}
					else if( $("#abs_user_id").val() == 235 ||  $("#abs_user_id").val() == 239 ||  $("#abs_user_id").val() == 236){
						getTimeKhusus();
					}
					else{
						getTimeNormal();
					}
				}				
				$("#abs_check_in").parent().removeClass('focused').addClass('focused');
			});
			$('#abs_not_in').change(function(){
				if ($(this).is(':checked')) {
					$(this).val('1');
					$('#mdModal .modal-content').removeAttr('class').addClass('modal-content modal-col-black');
					$('#mdModal').modal({
						backdrop: 'static'
					});
					$('#mdModal').modal('show');
				}else{
					$(this).val('0');
				}
			});
		</script>
		<script>
			function showPicture(input) {
				$("#abs_upload").removeClass('hide').addClass('hide');
				var file = input.files[0];
				var fileType = file.type;
				var match = ['image/jpeg', 'image/png', 'image/jpg', 'image/gif'];
				if(!((fileType == match[0]) || (fileType == match[1]) || (fileType == match[2]) || (fileType == match[3]) )){
					swal("Error", "Sorry, only GIF, JPG, JPEG, & PNG files are allowed to upload.", "error");
					$("#abs_file").val('');
					return false;
				}
				if(input.files && input.files[0]){
					var filerdr = new FileReader();
					filerdr.onload = function(e){
						$("#abs_image").val('');
						$('#abs_show').attr('src', e.target.result);
					}
					filerdr.readAsDataURL(input.files[0]);
				}
			}

			$("#form-absence1").validate({
				highlight: function (input) {
					if( $(input).attr('type') == 'url' ){
						$(input).parents('.form-line').find('label').addClass('has-error');
					}
					$(input).parents('.form-line').addClass('has-error');
				},
				unhighlight: function (input) {
					if( $(input).attr('type') == 'url' ){
						$(input).parents('.form-line').find('label').removeClass('has-error');
					}
					$(input).parents('.form-line').removeClass('has-error');
				},
				errorPlacement: function (error, element) {
					$(element).parents('.line-group').append(error);
				},
				ignore: ":disabled, :hidden",
				rules: {
					abs_check_in: "required"
				}
			});
			$(".btn-cancel").on("click", function(){
				$("#abs_reason").val("").trigger("change");
				$("#abs_image").val("").trigger("change");
				$("#abs_file").val("").trigger("change");
				$('#abs_show').attr('src',"").trigger("change");
				$('#abs_not_in').prop('checked', false);
			});
			$("#form-absence").on("submit", function(e) {
				e.preventDefault();
				/*$(this).validate();
				if (!$(this).valid()) return false;	
				*/
				var form = new FormData(this);
				if ($('#abs_wf').is(':checked')) {
					var wf = 'WFO';
				}
				else{
					var wf = 'WFH';
				}
				swal({
					title: "Are you sure "+wf+" ?",
					type: "info",
					showCancelButton: true,
					closeOnConfirm: false,
					showLoaderOnConfirm: true,
				}, function () {
					setTimeout(function () {
						$.ajax({
							type: 'POST',
							url: '../tform/abs_save.php',
							data: form,
							contentType: false,
							cache: false, 
							processData:false,
							success:function(msg){
								swal({
									title: "Success",
									text: "Your data has been saved.",
									type: "success",
									showCancelButton: false,       
									confirmButtonText: "OK",
									closeOnConfirm: true
								}, function () {
									window.location.assign('home.php?tm=23452ef72852cd3d8ace59e0e6bbc66a0b3f82987cfaba5dd1c77c0e43d7c2a5');
								});
							}
						}).fail(function( jqXHR, textStatus ) {
							swal("Request failed", textStatus, "error");
						});
					}, 2000);
				});
			});
		</script>

		<script type="text/javascript" src="../js/webcam.min.js"></script>
		<script language="JavaScript">
			Webcam.set({
				width: '100%',
				height: 240,
				dest_width: 320,
				dest_height: 240,
				crop_width: 240,
				crop_height: 240,
				flip_horiz: true
			});
			function take_snapshot() {
				Webcam.snap( function(web_cam_data) {
					$("#abs_file").val('');
					$("#abs_image").val(web_cam_data);
					$("#abs_show").attr("src",web_cam_data);
				});
				$(".divCamera").removeClass('hide').addClass('hide');
				$(".divUpload").removeClass('hide');
				$(".divReason").removeClass('hide');
				Webcam.reset();
				$(".modal-footer").removeClass('hide');
			} 
			$(".btn-parem").on("click", function(){
				$(".divCamera").removeClass('hide').addClass('hide');
				$(".divUpload").removeClass('hide');
				$(".divReason").removeClass('hide');
				Webcam.reset();
				$(".modal-footer").removeClass('hide');
			});
			$(".btn-camera").on("click", function(){
				$(".divCamera").removeClass('hide');
				$(".divUpload").removeClass('hide').addClass('hide');
				$(".divReason").removeClass('hide').addClass('hide');
				$(".modal-footer").removeClass('hide').addClass('hide');
				//Webcam.reset();
				Webcam.attach( '#my_camera' );
			});
		</script>
	</body>
</html>

Did this file decode correctly?

Original Code

<?php eval("?>".base64_decode("PD9waHANCglyZXF1aXJlX29uY2UgIi4uL2NvbmZpZy9zYW1idW5nLnBocCI7DQoJaWYgKCFpc3NldCgkX1NFU1NJT04pKSB7DQoJICAgIHNlc3Npb25fc3RhcnQoKTsNCgl9DQoJZXJyb3JfcmVwb3J0aW5nKDApOw0KCWRhdGVfZGVmYXVsdF90aW1lem9uZV9zZXQoJ0FzaWEvSmFrYXJ0YScpOw0KCXJlcXVpcmVfb25jZSgiLi4vY29uZmlnL2NvbmZpZy5waHAiKTsNCj8+DQo8IURPQ1RZUEUgaHRtbD4NCjxodG1sPg0KCTxoZWFkPg0KCQk8P3BocCByZXF1aXJlX29uY2UoIi4uLzM3L3RtY3NzLmh0bWwiKTs/Pg0KCQk8c3R5bGU+DQoJCQkuZm9ybS1ncm91cCAuZm9ybS1saW5lcyB7DQoJCQkJd2lkdGg6IDEwMCU7DQoJCQkJcG9zaXRpb246IHJlbGF0aXZlOw0KCQkJCWJvcmRlci1ib3R0b206IDBweCBzb2xpZCAjZGRkOyANCgkJCX0NCgkJCS5mb3JtLWdyb3VwIC5mb3JtLWxpbmVzOmFmdGVyIHsNCgkJCQljb250ZW50OiAnJzsNCgkJCQlwb3NpdGlvbjogYWJzb2x1dGU7DQoJCQkJbGVmdDogMDsNCgkJCQl3aWR0aDogMTAwJTsNCgkJCQloZWlnaHQ6IDA7DQoJCQkJYm90dG9tOiAtMXB4Ow0KCQkJCS1tb3otdHJhbnNmb3JtOiBzY2FsZVgoMCk7DQoJCQkJLW1zLXRyYW5zZm9ybTogc2NhbGVYKDApOw0KCQkJCS1vLXRyYW5zZm9ybTogc2NhbGVYKDApOw0KCQkJCS13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoMCk7DQoJCQkJdHJhbnNmb3JtOiBzY2FsZVgoMCk7DQoJCQkJLW1vei10cmFuc2l0aW9uOiAwLjI1cyBlYXNlLWluOw0KCQkJCS1vLXRyYW5zaXRpb246IDAuMjVzIGVhc2UtaW47DQoJCQkJLXdlYmtpdC10cmFuc2l0aW9uOiAwLjI1cyBlYXNlLWluOw0KCQkJCXRyYW5zaXRpb246IDAuMjVzIGVhc2UtaW47DQoJCQkJYm9yZGVyLWJvdHRvbTogMHB4IHNvbGlkICMxZjkxZjM7IA0KCQkJfQ0KCQkJLmZvcm0tZ3JvdXAgLmZvcm0tbGluZXMgLmZvcm0tbGFiZWwgew0KCQkJCWZvbnQtd2VpZ2h0OiBub3JtYWw7DQoJCQkJY29sb3I6ICNhYWE7DQoJCQkJcG9zaXRpb246IGFic29sdXRlOw0KCQkJCXRvcDogMTBweDsNCgkJCQlsZWZ0OiAwOw0KCQkJCWN1cnNvcjogdGV4dDsNCgkJCQktbW96LXRyYW5zaXRpb246IDAuMnM7DQoJCQkJLW8tdHJhbnNpdGlvbjogMC4yczsNCgkJCQktd2Via2l0LXRyYW5zaXRpb246IDAuMnM7DQoJCQkJdHJhbnNpdGlvbjogMC4yczsgDQoJCQl9DQoNCgkJCS5mb3JtLWdyb3VwIC5mb3JtLWxpbmVzLmZvY3VzZWQ6YWZ0ZXIgew0KCQkJCS1tb3otdHJhbnNmb3JtOiBzY2FsZVgoMSk7DQoJCQkJLW1zLXRyYW5zZm9ybTogc2NhbGVYKDEpOw0KCQkJCS1vLXRyYW5zZm9ybTogc2NhbGVYKDEpOw0KCQkJCS13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoMSk7DQoJCQkJdHJhbnNmb3JtOiBzY2FsZVgoMSk7IA0KCQkJfQ0KCQkJLmZvcm0tZ3JvdXAgLmZvcm0tbGluZXMuZm9jdXNlZCAuZm9ybS1sYWJlbCB7DQoJCQkJdG9wOiAtMTBweDsNCgkJCQlyaWdodDogMDsNCgkJCQlmb250LXNpemU6IDEycHg7IA0KCQkJfQ0KCQkJLnNoaWZ0ew0KCQkJCW1hcmdpbi10b3A6MTJweCAhaW1wb3J0YW50Ow0KCQkJCW1hcmdpbi1sZWZ0Oi0xNHB4ICFpbXBvcnRhbnQ7DQoJCQl9DQoJCQkuZm9ybS1ncm91cCAuZm9ybS1jb250cm9sIHsNCgkJCQlwb3NpdGlvbjogcmVsYXRpdmU7DQoJCQkJei1pbmRleDogMTsNCgkJCX0NCgkJCUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogMTAyNHB4KSB7DQoJCQkJLnNoaWZ0ew0KCQkJCQltYXJnaW4tdG9wOjEwcHggIWltcG9ydGFudDsNCgkJCQl9DQoJCQl9DQoJCQkubm8tcGFkZGluZ3sNCgkJCQlwYWRkaW5nOiAwcHggIWltcG9ydGFudDsNCgkJCX0NCgkJCS5uby1tYXJnaW57DQoJCQkJbWFyZ2luOiAwcHggIWltcG9ydGFudDsNCgkJCX0NCgkJCS5pbWFnZXN7DQoJCQkJYm9yZGVyOiAxcHggc29saWQgI2JiYjsNCgkJCQlib3JkZXItcmFkaXVzOiA1MCU7DQoJCQl9DQoJCQkuY2FyZCAuYm9keSAuY29sLXhzLTYsIA0KCQkJLmNhcmQgLmJvZHkgLmNvbC1tZC01LCANCgkJCS5jYXJkIC5ib2R5IC5jb2wtc20tMTIsIA0KCQkJLmNhcmQgLmJvZHkgLmNvbC14cy00IHsNCgkJCQltYXJnaW4tYm90dG9tOiAwcHg7DQoJCQl9DQoJCQkjbWFwY2FudmFzew0KCQkJCW1hcmdpbi10b3A6MTBweDsNCgkJCQloZWlnaHQ6MzYwcHg7DQoJCQkJd2lkdGg6IDEwMCU7DQoJCQkJYm9yZGVyOiAxcHggc29saWQgI2JiYjsNCgkJCQl0ZXh0LWFsaWduOmNlbnRlcjsNCgkJCQliYWNrZ3JvdW5kLWltYWdlOiB1cmwoJy4uL2ltYWdlcy9wZXRhLmdpZicpOyANCgkJCQliYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OyANCgkJCQliYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgY2VudGVyOyANCgkJCQliYWNrZ3JvdW5kLXNpemU6IDEwMCUgMTAwJTsNCgkJCQliYWNrZ3JvdW5kLWNvbG9yOiMyNDJmM2UNCgkJCX0NCgkJCSNyYWRhcnsNCgkJCQlwb3NpdGlvbjphYnNvbHV0ZTsNCgkJCQlsZWZ0OiA1MCU7DQoJCQkJdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgMCk7DQoJCQkJd2lkdGg6ODclOw0KCQkJCWhlaWdodDo5MCU7DQoJCQkJbWFyZ2luOiAxMnB4IDA7DQoJCQkJYmFja2dyb3VuZDp1cmwoJy4uL2ltYWdlcy92WTZUbC5wbmcnKTsNCgkJCQliYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OyANCgkJCQliYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgY2VudGVyOw0KCQkJCWJhY2tncm91bmQtc2l6ZTogNzclIDEwMCU7DQoJCQl9DQoJCQkjcmFkew0KCQkJCWhlaWdodDoxMDAlOw0KCQkJCXdpZHRoOiAxMDAlOw0KCQkJCWJhY2tncm91bmQ6dXJsKCcuLi9pbWFnZXMvZmJnVUQucG5nJyk7DQoJCQkJYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsgDQoJCQkJYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIGNlbnRlcjsNCgkJCQliYWNrZ3JvdW5kLXNpemU6IDk1JSAxMDAlOw0KCQkJfQ0KCQkJQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA1NjhweCkgew0KCQkJCSNyYWRhcnsNCgkJCQkJd2lkdGg6IDkwJTsNCgkJCQkJaGVpZ2h0OiA3MCU7DQoJCQkJCW1hcmdpbjogNDBweCAwOw0KCQkJCX0JDQoJCQl9DQoJCQlAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDY2N3B4KSB7DQoJCQkJI3JhZGFyew0KCQkJCQl3aWR0aDogOTUlOw0KCQkJCQloZWlnaHQ6IDkwJTsNCgkJCQkJbWFyZ2luOiAxMnB4IDA7DQoJCQkJfQkNCgkJCX0NCgkJCUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpIHsNCgkJCQkjcmFkYXJ7DQoJCQkJCXdpZHRoOjg1JTsNCgkJCQkJaGVpZ2h0OjkwJTsNCgkJCQkJbWFyZ2luOiAxMnB4IDA7DQoJCQkJfQkNCgkJCX0NCgkJCUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogMTAyNHB4KSB7DQoJCQkJaDR7DQoJCQkJCWZvbnQtc2l6ZToxNHB4Ow0KCQkJCQltYXJnaW4tdG9wOiAxNnB4Ow0KCQkJCX0NCgkJCQlzd2l0Y2ggbGFiZWx7DQoJCQkJCWZvbnQtc2l6ZToxMnB4Ow0KCQkJCX0NCgkJCQkjbWFwY2FudmFzew0KCQkJCQloZWlnaHQ6MjUwcHg7DQoJCQkJfQ0KCQkJCSNyYWRhcnsNCgkJCQkJd2lkdGg6MjkxcHg7DQoJCQkJCWhlaWdodDo5MCU7DQoJCQkJCW1hcmdpbjogMTJweCAwOw0KCQkJCX0NCgkJCQkuZGl2UmVhc29uew0KCQkJCQltYXJnaW4tdG9wOjMwcHg7DQoJCQkJfQ0KCQkJfQ0KCQkJLmJ0bi1wcmltYXJ5ew0KCQkJCXBhZGRpbmc6IDAgMTJweCA0cHggMTJweDsNCgkJCX0NCgkJCS51a2FyX2Nvbm9uZ3sNCgkJCQltYXJnaW4tdG9wOjEwcHg7DQoJCQl9DQoJCQkjbWFwY2FudmFzIHsNCgkJCQktd2Via2l0LWFuaW1hdGlvbjogZmFkZUluIDMwMG1zOw0KCQkJCWFuaW1hdGlvbjogZmFkZUluIDIwMG1zOw0KCQkJfQ0KCQkJQC13ZWJraXQta2V5ZnJhbWVzIGZhZGVJbiB7DQoJCQkJZnJvbSB7b3BhY2l0eTogMDt9DQoJCQkJdG8ge29wYWNpdHk6IDE7fQ0KCQkJfQ0KCQkJQGtleWZyYW1lcyBmYWRlSW4gew0KCQkJCWZyb20ge29wYWNpdHk6IDA7fQ0KCQkJCXRvIHtvcGFjaXR5OiAxO30NCgkJCX0NCgkJCS5tb2RhbC1pbWFnZXsNCgkJCQl3aWR0aDogMTAwJTsNCgkJCQloZWlnaHQ6MjUwcHg7DQoJCQkJYm9yZGVyOiAxcHggc29saWQgI2JiYjsNCgkJCQl2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOw0KCQkJfQ0KCQkJLm1vZGFsLW9wZW4gLm1vZGFsIHsNCgkJCQlvdmVyZmxvdy14OiBoaWRkZW47DQoJCQkJb3ZlcmZsb3cteTogaGlkZGVuOw0KCQkJfQ0KCQkJQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7DQoJCQkJLm1vZGFsLWRpYWxvZyB7DQoJCQkJCXdpZHRoOiA2MDBweDsNCgkJCQkJbWFyZ2luOiA1MHB4IGF1dG87DQoJCQkJfQ0KCQkJCS5tb2RhbC1jb250ZW50IHsNCgkJCQkJLXdlYmtpdC1ib3gtc2hhZG93OiAwIDVweCAxNXB4IHJnYmEoMCwgMCwgMCwgLjUpOw0KCQkJCQkJYm94LXNoYWRvdzogMCA1cHggMTVweCByZ2JhKDAsIDAsIDAsIC41KTsNCgkJCQl9DQoJCQl9DQoJCQkubW9kYWwgLm1vZGFsLWNvbnRlbnQgew0KCQkJCWJvcmRlcjogMXB4IHNvbGlkICM5YTlhOWE7DQoJCQl9DQoJCQkuZGl2Q2FtZXJhew0KCQkJCXRleHQtYWxpZ246Y2VudGVyOw0KCQkJfQ0KCQkJLmJ0bi1qZXByZXQsIGJ0bi1wYXJlbXsNCgkJCQlwb3NpdGlvbjogcmVsYXRpdmUNCgkJCX0NCgkJPC9zdHlsZT4NCgk8L2hlYWQ+DQoNCgk8Ym9keSBjbGFzcz0idGhlbWUtYmxhY2siIG9ubG9hZD0iZ2V0TG9jYXRpb24oKTsiPg0KCQk8P3BocCBpbmNsdWRlICIuLi8zNy90bWxvYWRlci5odG1sIiA7Pz4NCgkJPHNlY3Rpb24+DQoJCQk8YXNpZGUgaWQ9ImxlZnRzaWRlYmFyIiBjbGFzcz0ic2lkZWJhciI+DQoJCQkJPD9waHAgaW5jbHVkZSAiLi4vMzcvdG1tZW51LnBocCIgOz8+DQoJCQk8L2FzaWRlPg0KCQk8L3NlY3Rpb24+DQoJCTxzZWN0aW9uIGNsYXNzPSJjb250ZW50Ij4NCgkJCTxkaXYgY2xhc3M9ImNvbnRhaW5lci1mbHVpZCI+DQoJCQk8Zm9ybSBhY3Rpb249IiMiIG1ldGhvZD0icG9zdCIgaWQ9ImZvcm0tYWJzZW5jZSIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSI+DQoJCQkJPGRpdiBjbGFzcz0icm93IGNsZWFyZml4Ij4NCgkJCQkJPGRpdiBjbGFzcz0iY29sLWxnLTEyIGNvbC1tZC0xMiBjb2wtc20tMTIgY29sLXNtLTEyIj4NCgkJCQkJCTxkaXYgY2xhc3M9ImNhcmQiPg0KCQkJCQkJCTxkaXYgY2xhc3M9ImhlYWRlciI+DQoJCQkJCQkJCTxoMj4NCgkJCQkJCQkJCVRpbWUgQXR0ZW5kYW5jZQ0KCQkJCQkJCQkJPHNtYWxsPlZlcmlmaWNhdGlvbiBHZW8gTG9jYXRpb248L3NtYWxsPg0KCQkJCQkJCQk8L2gyPg0KCQkJCQkJCQk8ZGl2IGNsYXNzPSJoZWFkZXItZHJvcGRvd24iPg0KCQkJCQkJCQkJPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJidG4gYnRuLXRpbWUgYnRuLXByaW1hcnkiPg0KCQkJCQkJCQkJCTxpIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+c2F2ZTwvaT4NCgkJCQkJCQkJCQlTYXZlDQoJCQkJCQkJCQk8L2J1dHRvbj4NCgkJCQkJCQkJPC9kaXY+DQoJCQkJCQkJPC9kaXY+DQoJCQkJCQkJPGRpdiBjbGFzcz0iYm9keSI+DQoJCQkJCQkJCTxkaXYgY2xhc3M9InJvdyBjbGVhcmZpeCI+DQoJCQkJCQkJCQk8ZGl2IGNsYXNzPSJjb2wtbWQtNyI+DQoJCQkJCQkJCQkJPHNwYW4gY2xhc3M9ImhpZGUgY29sLXJlZCIgaWQ9InRhbXBpbGthbiI+QnJvd3NlciBub3Qgc3VwcG9ydCBHZW9sb2NhdGlvbiAhPC9zcGFuPg0KCQkJCQkJCQkJCTxkaXYgaWQ9Im1hcGNhbnZhcyI+DQoJCQkJCQkJCQkJCTxkaXYgaWQ9InJhZGFyIiBjbGFzcz0icmVzcG9uc2l2ZSI+DQoJCQkJCQkJCQkJCQk8ZGl2IGlkPSJyYWQiPjwvZGl2Pg0KCQkJCQkJCQkJCQk8L2Rpdj4NCgkJCQkJCQkJCQk8L2Rpdj4NCgkJCQkJCQkJCTwvZGl2Pg0KCQkJCQkJCQkJPGRpdiBjbGFzcz0iY29sLW1kLTUiPg0KCQkJCQkJCQkJCTxkaXYgY2xhc3M9InJvdyBjbGVhcmZpeCI+DQoJCQkJCQkJCQkJCTxkaXYgY2xhc3M9ImNvbC14cy01Ij4NCgkJCQkJCQkJCQkJCTxoNCBjbGFzcz0iZm9ybS1sYWJlbCB0YW5nZ2FsIj48P3BocCBlY2hvIGRhdGUoJ00galMgWScpOz8+PC9oND4NCgkJCQkJCQkJCQkJPC9kaXY+DQoJCQkJCQkJCQkJCTxkaXYgY2xhc3M9ImNvbC14cy03Ij4NCgkJCQkJCQkJCQkJCTxkaXYgY2xhc3M9InN3aXRjaCBwdWxsLXJpZ2h0IiBzdHlsZT0ibWFyZ2luLXRvcDoxMnB4OyI+DQoJCQkJCQkJCQkJCQkJPGxhYmVsPldGSDxpbnB1dCBuYW1lPSJhYnNfd2YiIGlkPSJhYnNfd2YiIHR5cGU9ImNoZWNrYm94Ij48c3BhbiBjbGFzcz0ibGV2ZXIgc3dpdGNoLWNvbC1ibHVlIj48L3NwYW4+V0ZPPC9sYWJlbD4NCgkJCQkJCQkJCQkJCTwvZGl2Pg0KCQkJCQkJCQkJCQk8L2Rpdj4NCgkJCQkJCQkJCQk8L2Rpdj4NCgkJCQkJCQkJCQk8ZGl2IGNsYXNzPSJyb3cgY2xlYXJmaXgiPg0KCQkJCQkJCQkJCQk8ZGl2IGNsYXNzPSJjb2wtc20tMTIiIHN0eWxlPSJtYXJnaW4tdG9wOjIwcHg7Ij4NCgkJCQkJCQkJCQkJCTxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAgZm9ybS1mbG9hdCI+DQoJCQkJCQkJCQkJCQkJPGRpdiBjbGFzcz0iZm9ybS1saW5lIj4NCgkJCQkJCQkJCQkJCQkJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYWJzX2RhdGUiIGlkPSJhYnNfZGF0ZSIgdmFsdWU9Ijw/cGhwIGVjaG8gZGF0ZSgnWS1tLWQnKTs/PiIgY2xhc3M9ImZvcm0tY29udHJvbCI+DQoJCQkJCQkJCQkJCQkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFic19ncmFkZSIgaWQ9ImFic19ncmFkZSIgdmFsdWU9Ijw/cGhwIGVjaG8gJG15Z3JhZGU7Pz4iIGNsYXNzPSJmb3JtLWNvbnRyb2wiPg0KCQkJCQkJCQkJCQkJCQk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhYnNfZGl2aXNpb24iIGlkPSJhYnNfZGl2aXNpb24iIHZhbHVlPSI8P3BocCBlY2hvICRteWRpdjs/PiIgY2xhc3M9ImZvcm0tY29udHJvbCI+DQoJCQkJCQkJCQkJCQkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFic19pZCIgaWQ9ImFic19pZCIgY2xhc3M9ImZvcm0tY29udHJvbCI+DQoJCQkJCQkJCQkJCQkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFic191c2VyX2lkIiBpZD0iYWJzX3VzZXJfaWQiIHZhbHVlPSI8P3BocCBlY2hvICRteUlkOz8+IiBjbGFzcz0iZm9ybS1jb250cm9sIj4NCgkJCQkJCQkJCQkJCQkJPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImFic191c2VyX25hbWUiIGlkPSJhYnNfdXNlcl9uYW1lIiB2YWx1ZT0iPD9waHAgZWNobyAkbXluYW1lOz8+IiByZWFkb25seSBjbGFzcz0iZm9ybS1jb250cm9sIj4NCgkJCQkJCQkJCQkJCQkJPGxhYmVsIGNsYXNzPSJmb3JtLWxhYmVsIj5OYW1lPC9sYWJlbD4NCgkJCQkJCQkJCQkJCQk8L2Rpdj4NCgkJCQkJCQkJCQkJCTwvZGl2Pg0KCQkJCQkJCQkJCQkJPGRpdiBjbGFzcz0iZm9ybS1ncm91cCBmb3JtLWZsb2F0Ij4NCgkJCQkJCQkJCQkJCQk8ZGl2IGNsYXNzPSJmb3JtLWxpbmUiPg0KCQkJCQkJCQkJCQkJCQk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhYnNfZGVwdF9pZCIgaWQ9ImFic19kZXB0X2lkIiB2YWx1ZT0iPD9waHAgZWNobyAkbXlkZXB0Oz8+IiBjbGFzcz0iZm9ybS1jb250cm9sIj4NCgkJCQkJCQkJCQkJCQkJPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImFic19kZXB0X25hbWUiIGlkPSJhYnNfZGVwdF9uYW1lIiB2YWx1ZT0iPD9waHAgZWNobyAkbXlkZXB0bmFtZTs/PiIgcmVhZG9ubHkgY2xhc3M9ImZvcm0tY29udHJvbCI+DQoJCQkJCQkJCQkJCQkJCTxsYWJlbCBjbGFzcz0iZm9ybS1sYWJlbCI+RGVwYXJ0bWVudDwvbGFiZWw+DQoJCQkJCQkJCQkJCQkJPC9kaXY+DQoJCQkJCQkJCQkJCQk8L2Rpdj4NCgkJCQkJCQkJCQkJPC9kaXY+DQoJCQkJCQkJCQkJPC9kaXY+DQoJCQkJCQkJCQkJPGRpdiBjbGFzcz0icm93IGNsZWFyZml4Ij4NCgkJCQkJCQkJCQkJPGRpdiBjbGFzcz0iY29sLXhzLTYiPg0KCQkJCQkJCQkJCQkJPGRpdiBjbGFzcz0iZm9ybS1ncm91cCBmb3JtLWZsb2F0Ij4NCgkJCQkJCQkJCQkJCQk8ZGl2IGNsYXNzPSJmb3JtLWxpbmUiPg0KCQkJCQkJCQkJCQkJCQk8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iYWJzX2NoZWNrX2luIiBpZD0iYWJzX2NoZWNrX2luIiBjbGFzcz0iZm9ybS1jb250cm9sIHRpbWUyNCIgbWF4bGVuZ3RoPSI1IiBhdXRvY29tcGxldGU9Im9mZiIgb25rZXlwcmVzcz0icmV0dXJuIGlzVGltZUtleShldmVudCkiPg0KCQkJCQkJCQkJCQkJCQk8bGFiZWwgY2xhc3M9ImZvcm0tbGFiZWwiPkNoZWNrIEluPC9sYWJlbD4NCgkJCQkJCQkJCQkJCQk8L2Rpdj4NCgkJCQkJCQkJCQkJCTwvZGl2Pg0KCQkJCQkJCQkJCQk8L2Rpdj4NCgkJCQkJCQkJCQkJPGRpdiBjbGFzcz0iY29sLXhzLTYiPg0KCQkJCQkJCQkJCQkJPGRpdiBjbGFzcz0iZm9ybS1ncm91cCBmb3JtLWZsb2F0Ij4NCgkJCQkJCQkJCQkJCQk8ZGl2IGNsYXNzPSJmb3JtLWxpbmUiPg0KCQkJCQkJCQkJCQkJCQk8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iYWJzX3pvbmVfcmVnaW9uX2luIiBpZD0iYWJzX3pvbmVfcmVnaW9uX2luIiBjbGFzcz0iZm9ybS1jb250cm9sIiBhdXRvY29tcGxldGU9Im9mZiI+DQoJCQkJCQkJCQkJCQkJCTxsYWJlbCBjbGFzcz0iZm9ybS1sYWJlbCI+VGltZSBab25lPC9sYWJlbD4NCgkJCQkJCQkJCQkJCQk8L2Rpdj4NCgkJCQkJCQkJCQkJCTwvZGl2Pg0KCQkJCQkJCQkJCQk8L2Rpdj4NCgkJCQkJCQkJCQkJPGRpdiBjbGFzcz0iY29sLXhzLTEyIGhpZGUiPg0KCQkJCQkJCQkJCQkJPGRpdiBjbGFzcz0iZm9ybS1ncm91cCBmb3JtLWZsb2F0Ij4NCgkJCQkJCQkJCQkJCQk8ZGl2IGNsYXNzPSJmb3JtLWxpbmUiPg0KCQkJCQkJCQkJCQkJCQk8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iYWJzX3pvbmVfdGltZV9pbiIgaWQ9ImFic196b25lX3RpbWVfaW4iIGNsYXNzPSJmb3JtLWNvbnRyb2wiIGF1dG9jb21wbGV0ZT0ib2ZmIj4NCgkJCQkJCQkJCQkJCQkJPGxhYmVsIGNsYXNzPSJmb3JtLWxhYmVsIj5UaW1lIFpvbmU8L2xhYmVsPg0KCQkJCQkJCQkJCQkJCTwvZGl2Pg0KCQkJCQkJCQkJCQkJPC9kaXY+DQoJCQkJCQkJCQkJCTwvZGl2Pg0KCQkJCQkJCQkJCTwvZGl2Pg0KCQkJCQkJCQkJCTxkaXYgY2xhc3M9InJvdyBjbGVhcmZpeCI+DQoJCQkJCQkJCQkJCTxkaXYgY2xhc3M9ImNvbC14cy02Ij4NCgkJCQkJCQkJCQkJCTxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAgZm9ybS1mbG9hdCI+DQoJCQkJCQkJCQkJCQkJPGRpdiBjbGFzcz0iZm9ybS1saW5lcyBmb2N1c2VkIj4NCgkJCQkJCQkJCQkJCQkJPGxhYmVsIGNsYXNzPSJmb3JtLWxhYmVsIj5TaGlmdDwvbGFiZWw+DQoJCQkJCQkJCQkJCQkJPC9kaXY+DQoJCQkJCQkJCQkJCQkJPGRpdiBjbGFzcz0ic3dpdGNoIj4NCgkJCQkJCQkJCQkJCQkJPGxhYmVsIGNsYXNzPSJzaGlmdCI+DQoJCQkJCQkJCQkJCQkJCQk8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9ImFic19zaGlmdCIgaWQ9ImFic19zaGlmdCI+DQoJCQkJCQkJCQkJCQkJCQk8c3BhbiBjbGFzcz0ibGV2ZXIgc3dpdGNoLWNvbC1yZWQiPjwvc3Bhbj4NCgkJCQkJCQkJCQkJCQkJPC9sYWJlbD4NCgkJCQkJCQkJCQkJCQk8L2Rpdj4NCgkJCQkJCQkJCQkJCTwvZGl2Pg0KCQkJCQkJCQkJCQk8L2Rpdj4NCgkJCQkJCQkJCQkJPGRpdiBjbGFzcz0iY29sLXhzLTYiPg0KCQkJCQkJCQkJCQkJPGRpdiBjbGFzcz0iZm9ybS1ncm91cCBmb3JtLWZsb2F0Ij4NCgkJCQkJCQkJCQkJCQk8ZGl2IGNsYXNzPSJmb3JtLWxpbmVzIGZvY3VzZWQiPg0KCQkJCQkJCQkJCQkJCQk8bGFiZWwgY2xhc3M9ImZvcm0tbGFiZWwiPlBlcm1pc3Npb24gLyBMYXRlPC9sYWJlbD4NCgkJCQkJCQkJCQkJCQk8L2Rpdj4NCgkJCQkJCQkJCQkJCQk8ZGl2IGNsYXNzPSJzd2l0Y2giPg0KCQkJCQkJCQkJCQkJCQk8bGFiZWwgY2xhc3M9InNoaWZ0Ij4NCgkJCQkJCQkJCQkJCQkJCTxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iYWJzX25vdF9pbiIgaWQ9ImFic19ub3RfaW4iPg0KCQkJCQkJCQkJCQkJCQkJPHNwYW4gY2xhc3M9ImxldmVyIHN3aXRjaC1jb2wtcmVkIj48L3NwYW4+DQoJCQkJCQkJCQkJCQkJCTwvbGFiZWw+DQoJCQkJCQkJCQkJCQkJPC9kaXY+DQoJCQkJCQkJCQkJCQk8L2Rpdj4NCgkJCQkJCQkJCQkJPC9kaXY+DQoJCQkJCQkJCQkJPC9kaXY+DQoJCQkJCQkJCQkJPGRpdiBjbGFzcz0icm93IGNsZWFyZml4Ij4NCgkJCQkJCQkJCQkJPGRpdiBjbGFzcz0iY29sLXhzLTYiPg0KCQkJCQkJCQkJCQkJPGRpdiBjbGFzcz0iZm9ybS1ncm91cCBmb3JtLWZsb2F0Ij4NCgkJCQkJCQkJCQkJCQk8ZGl2IGNsYXNzPSJmb3JtLWxpbmUiPg0KCQkJCQkJCQkJCQkJCQk8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iYWJzX2xhdGl0dWRlIiBpZD0iYWJzX2xhdGl0dWRlIiBjbGFzcz0iZm9ybS1jb250cm9sIj4NCgkJCQkJCQkJCQkJCQkJPGxhYmVsIGNsYXNzPSJmb3JtLWxhYmVsIj5MYXRpdHVkZTwvbGFiZWw+DQoJCQkJCQkJCQkJCQkJPC9kaXY+DQoJCQkJCQkJCQkJCQk8L2Rpdj4NCgkJCQkJCQkJCQkJPC9kaXY+DQoJCQkJCQkJCQkJCTxkaXYgY2xhc3M9ImNvbC14cy02Ij4NCgkJCQkJCQkJCQkJCTxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAgZm9ybS1mbG9hdCI+DQoJCQkJCQkJCQkJCQkJPGRpdiBjbGFzcz0iZm9ybS1saW5lIj4NCgkJCQkJCQkJCQkJCQkJPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImFic19sb25naXR1ZGUiIGlkPSJhYnNfbG9uZ2l0dWRlIiBjbGFzcz0iZm9ybS1jb250cm9sIj4NCgkJCQkJCQkJCQkJCQkJPGxhYmVsIGNsYXNzPSJmb3JtLWxhYmVsIj5Mb25naXR1ZGU8L2xhYmVsPg0KCQkJCQkJCQkJCQkJCTwvZGl2Pg0KCQkJCQkJCQkJCQkJPC9kaXY+DQoJCQkJCQkJCQkJCTwvZGl2Pg0KCQkJCQkJCQkJCTwvZGl2Pg0KCQkJCQkJCQkJCTxkaXYgY2xhc3M9InJvdyBjbGVhcmZpeCBoaWRlIj4NCgkJCQkJCQkJCQkJPGRpdiBjbGFzcz0iY29sLXNtLTEyIj4NCgkJCQkJCQkJCQkJCTxkaXYgY2xhc3M9ImxpbmUtZ3JvdXAiPjwvZGl2Pg0KCQkJCQkJCQkJCQk8L2Rpdj4NCgkJCQkJCQkJCQk8L2Rpdj4NCgkJCQkJCQkJCQk8ZGl2IGNsYXNzPSJyb3cgY2xlYXJmaXgiPg0KCQkJCQkJCQkJCQk8ZGl2IGNsYXNzPSJjb2wtc20tMTIiPg0KCQkJCQkJCQkJCQkJPGRpdiBjbGFzcz0iZm9ybS1ncm91cCBmb3JtLWZsb2F0Ij4NCgkJCQkJCQkJCQkJCQk8ZGl2IGNsYXNzPSJmb3JtLWxpbmUiPg0KCQkJCQkJCQkJCQkJCQk8dGV4dGFyZWEgcm93cz0iMSIgbmFtZT0iYWJzX2FkZHJlc3MiIGlkPSJhYnNfYWRkcmVzcyIgY2xhc3M9ImZvcm0tY29udHJvbCBuby1yZXNpemUgYXV0by1ncm93dGgiPjwvdGV4dGFyZWE+DQoJCQkJCQkJCQkJCQkJCTxsYWJlbCBjbGFzcz0iZm9ybS1sYWJlbCI+QWRkcmVzczwvbGFiZWw+DQoJCQkJCQkJCQkJCQkJPC9kaXY+DQoJCQkJCQkJCQkJCQkJPHNtYWxsIGNsYXNzPSJjb2wtZ3JleSBoaWRlIj5FTlRFUiBrZXkgcHJlc3MgbXVsdGlwbGUgdGltZXM8L3NtYWxsPg0KCQkJCQkJCQkJCQkJPC9kaXY+DQoJCQkJCQkJCQkJCTwvZGl2Pg0KCQkJCQkJCQkJCTwvZGl2Pg0KCQkJCQkJCQkJPC9kaXY+DQoJCQkJCQkJCTwvZGl2Pg0KCQkJCQkJCTwvZGl2Pg0KCQkJCQkJPC9kaXY+DQoJCQkJCTwvZGl2Pg0KCQkJCTwvZGl2Pg0KCQkJCTxkaXYgY2xhc3M9Im1vZGFsIGZhZGUiIGlkPSJtZE1vZGFsIiB0YWJpbmRleD0iLTEiIHJvbGU9ImRpYWxvZyI+DQoJCQkJCTxkaXYgY2xhc3M9Im1vZGFsLWRpYWxvZyIgcm9sZT0iZG9jdW1lbnQiPg0KCQkJCQkJPGRpdiBjbGFzcz0ibW9kYWwtY29udGVudCI+DQoJCQkJCQkJPGRpdiBjbGFzcz0ibW9kYWwtaGVhZGVyIj4NCgkJCQkJCQkJPGg0IGNsYXNzPSJtb2RhbC10aXRsZSIgaWQ9ImRlZmF1bHRNb2RhbExhYmVsIj5VcGxvYWQgJiBSZWFzb248L2g0Pg0KCQkJCQkJCTwvZGl2Pg0KCQkJCQkJCTxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiIHN0eWxlPSJwYWRkaW5nOjIwcHggMjBweCI+DQoJCQkJCQkJCTxkaXYgY2xhc3M9InJvdyBjbGVhcmZpeCI+DQoJCQkJCQkJCQk8ZGl2IGNsYXNzPSJjb2wtbGctMTIgY29sLW1kLTEyIGNvbC1zbS0xMiBjb2wteHMtMTIgZGl2Q2FtZXJhIGhpZGUiPg0KCQkJCQkJCQkJCTxkaXYgaWQ9Im15X2NhbWVyYSI+PC9kaXY+DQoJCQkJCQkJCQkJPGJ1dHRvbiB0eXBlPSJidXR0b24iIG9uQ2xpY2s9InRha2Vfc25hcHNob3QoKSIgY2xhc3M9ImJ0biBiZy1ibHVlIGJ0bi1jaXJjbGUgYnRuLWplcHJldCB3YXZlcy1lZmZlY3Qgd2F2ZXMtY2lyY2xlIHdhdmVzLWZsb2F0Ij4NCgkJCQkJCQkJCQkJPGkgY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jYW1lcmFfYWx0PC9pPg0KCQkJCQkJCQkJCTwvYnV0dG9uPg0KCQkJCQkJCQkJCTxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJnLWdyZXkgYnRuLWNpcmNsZSBidG4tcGFyZW0gd2F2ZXMtZWZmZWN0IHdhdmVzLWNpcmNsZSB3YXZlcy1mbG9hdCI+DQoJCQkJCQkJCQkJCTxpIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+Y2FuY2VsPC9pPg0KCQkJCQkJCQkJCTwvYnV0dG9uPg0KCQkJCQkJCQkJPC9kaXY+DQoJCQkJCQkJCQk8ZGl2IGNsYXNzPSJjb2wtbGctNiBjb2wtbWQtNiBjb2wtc20tMTIgY29sLXhzLTEyIGRpdlVwbG9hZCI+DQoJCQkJCQkJCQkJPGRpdiBjbGFzcz0ibW9kYWwtaW1hZ2UgdGV4dC1jZW50ZXIiPg0KCQkJCQkJCQkJCQk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhYnNfaW1hZ2UiIGlkPSJhYnNfaW1hZ2UiIGNsYXNzPSJhYnNfaW1hZ2UiPg0KCQkJCQkJCQkJCQk8aW5wdXQgdHlwZT0iZmlsZSIgbmFtZT0iYWJzX2ZpbGUiIGlkPSJhYnNfZmlsZSIgb25jaGFuZ2U9InNob3dQaWN0dXJlKHRoaXMpIiBzdHlsZT0iZGlzcGxheTpub25lIj4NCgkJCQkJCQkJCQkJPGxhYmVsIGZvcj0iYWJzX2ZpbGUiIHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiPg0KCQkJCQkJCQkJCQkJPGkgaWQ9ImFic19pY29uIiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiIHN0eWxlPSJmb250LXNpemU6MTAwcHg7Y29sb3I6Izc3NzttYXJnaW4tdG9wOjYwcHgiPnRvdWNoX2FwcDwvaT4NCgkJCQkJCQkJCQkJCTxpbWcgaWQ9ImFic19zaG93IiBzcmM9IiIgd2lkdGg9Ijg5LjIlIiBoZWlnaHQ9IjI0OHB4IiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTZweCIgYWx0PSJEcm9wIGZpbGUgaGVyZSBvciBjbGljayB0byB1cGxvYWQiPg0KCQkJCQkJCQkJCQk8L2xhYmVsPg0KCQkJCQkJCQkJCTwvZGl2Pg0KCQkJCQkJCQkJPC9kaXY+DQoJCQkJCQkJCQk8ZGl2IGNsYXNzPSJjb2wtbGctNiBjb2wtbWQtNiBjb2wtc20tMTIgY29sLXhzLTEyIGRpdlJlYXNvbiI+DQoJCQkJCQkJCQkJPGRpdiBjbGFzcz0iZm9ybS1ncm91cCBmb3JtLWZsb2F0Ij4NCgkJCQkJCQkJCQkJPGRpdiBjbGFzcz0iZm9ybS1saW5lIj4NCgkJCQkJCQkJCQkJCTx0ZXh0YXJlYSByb3dzPSIxIiBuYW1lPSJhYnNfcmVhc29uIiBpZD0iYWJzX3JlYXNvbiIgY2xhc3M9ImZvcm0tY29udHJvbCBuby1yZXNpemUgYXV0by1ncm93dGgiPjwvdGV4dGFyZWE+DQoJCQkJCQkJCQkJCQk8bGFiZWwgY2xhc3M9ImZvcm0tbGFiZWwiPlJlYXNvbiBOb3QvTGF0ZSBJbjwvbGFiZWw+DQoJCQkJCQkJCQkJCTwvZGl2Pg0KCQkJCQkJCQkJCQk8c21hbGwgY2xhc3M9ImNvbC1ncmV5Ij5FTlRFUiBrZXkgcHJlc3MgbXVsdGlwbGUgdGltZXM8L3NtYWxsPg0KCQkJCQkJCQkJCTwvZGl2Pg0KCQkJCQkJCQkJPC9kaXY+DQoJCQkJCQkJCTwvZGl2Pg0KCQkJCQkJCTwvZGl2Pg0KCQkJCQkJCTxkaXYgY2xhc3M9Im1vZGFsLWZvb3RlciI+DQoJCQkJCQkJCTxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1saW5rIHdhdmVzLWVmZmVjdCBidG4tY2FtZXJhIHB1bGwtbGVmdCIgaWQ9J29wZW4nPkNBTUVSQTwvYnV0dG9uPg0KCQkJCQkJCQk8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tbGluayB3YXZlcy1lZmZlY3QgYnRuLXVwbG9hZCIgZGF0YS1kaXNtaXNzPSJtb2RhbCI+VVBMT0FEPC9idXR0b24+DQoJCQkJCQkJCTxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1saW5rIHdhdmVzLWVmZmVjdCBidG4tY2FuY2VsIiBkYXRhLWRpc21pc3M9Im1vZGFsIj5DQU5DRUw8L2J1dHRvbj4NCgkJCQkJCQk8L2Rpdj4NCgkJCQkJCTwvZGl2Pg0KCQkJCQk8L2Rpdj4NCgkJCQk8L2Rpdj4NCgkJCTwvZm9ybT4NCgkJCTwvZGl2Pg0KCQk8L3NlY3Rpb24+DQoJCTw/cGhwIGluY2x1ZGUgIi4uLzM3L3RtZm9vdGVyLmh0bWwiOz8+DQoNCgkJPHNjcmlwdCBzcmM9Ii4uL3BsdWdpbnMvanF1ZXJ5L2pxdWVyeS5taW4uanMiPjwvc2NyaXB0Pg0KCQk8c2NyaXB0IHNyYz0iLi4vcGx1Z2lucy9ib290c3RyYXAvanMvYm9vdHN0cmFwLmpzIj48L3NjcmlwdD4NCgkJPHNjcmlwdCBzcmM9Ii4uL3BsdWdpbnMvanF1ZXJ5LXNsaW1zY3JvbGwvanF1ZXJ5LnNsaW1zY3JvbGwuanMiPjwvc2NyaXB0Pg0KCQk8c2NyaXB0IHNyYz0iLi4vcGx1Z2lucy9ub2RlLXdhdmVzL3dhdmVzLmpzIj48L3NjcmlwdD4NCgkJPHNjcmlwdCBzcmM9Ii4uL3BsdWdpbnMvYXV0b3NpemUvYXV0b3NpemUuanMiPjwvc2NyaXB0Pg0KCQk8c2NyaXB0IHNyYz0iLi4vcGx1Z2lucy9zd2VldGFsZXJ0L3N3ZWV0YWxlcnQubWluLmpzIj48L3NjcmlwdD4NCgkJPHNjcmlwdCBzcmM9Ii4uL3BsdWdpbnMvanF1ZXJ5LWlucHV0bWFzay9qcXVlcnkuaW5wdXRtYXNrLmJ1bmRsZS5qcyI+PC9zY3JpcHQ+DQoJCTxzY3JpcHQgc3JjPSIuLi9wbHVnaW5zL21vbWVudGpzL21vbWVudC5qcyI+PC9zY3JpcHQ+DQoJCTxzY3JpcHQgc3JjPSIuLi9wbHVnaW5zL2Jvb3RzdHJhcC1tYXRlcmlhbC1kYXRldGltZXBpY2tlci9qcy9ib290c3RyYXAtbWF0ZXJpYWwtZGF0ZXRpbWVwaWNrZXIuanMiPjwvc2NyaXB0Pg0KCQk8c2NyaXB0IHNyYz0iLi4vcGx1Z2lucy9qcXVlcnktdmFsaWRhdGlvbi9qcXVlcnkudmFsaWRhdGUuanMiPjwvc2NyaXB0Pg0KCQk8c2NyaXB0IHNyYz0iLi4vanMvYWRtaW4uanMiPjwvc2NyaXB0Pg0KCQk8c2NyaXB0IHNyYz0iLi4vanMvaW4tZm9ybS1lbGVtZW50cy5qcyI+PC9zY3JpcHQ+DQoJCTxzY3JpcHQgc3JjPSIuLi9qcy90bS1kZWZhdWx0LmpzIj48L3NjcmlwdD4NCgkJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KCQkJJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7DQoJCQkJLyoNCgkJCQlzZXRJbnRlcnZhbChmdW5jdGlvbigpew0KCQkJCQlnZXRMb2NhdGlvbigpOw0KCQkJCX0sIDMwKjEwMDApOw0KCQkJCSovDQoJCQkJdmFyIGR0ID0gbmV3IERhdGUoKTsNCgkJCQl2YXIgc3RhcnRUaW1lCT0gIjEyOjAwOjAwIjsNCgkJCQl2YXIgZW5kVGltZSAJPSBkdC5nZXRIb3VycygpICsgIjoiICsgZHQuZ2V0TWludXRlcygpICsgIjoiICsgZHQuZ2V0U2Vjb25kcygpOw0KCQkJCXZhciBzdCA9IG5ldyBEYXRlKCcwMCcsJzAwJywnMDAnLHN0YXJ0VGltZS5zcGxpdCgnOicpWzBdLHN0YXJ0VGltZS5zcGxpdCgnOicpWzFdLHN0YXJ0VGltZS5zcGxpdCgnOicpWzJdKTsNCgkJCQl2YXIgZXQgPSBuZXcgRGF0ZSgnMDAnLCcwMCcsJzAwJyxlbmRUaW1lLnNwbGl0KCc6JylbMF0sZW5kVGltZS5zcGxpdCgnOicpWzFdLGVuZFRpbWUuc3BsaXQoJzonKVsyXSk7DQoJCQkJaWYoZHQuZ2V0VGltZSgpID4gc3QuZ2V0VGltZSgpICYmIGR0LmdldFRpbWUoKSA8IGV0LmdldFRpbWUoKSl7DQoJCQkJCSQoIiNhYnNfc2hpZnQiKS52YWwoJzAnKS50cmlnZ2VyKCJjaGFuZ2UiKTsNCgkJCQkJJCgiI2Fic19zaGlmdCIpLnByb3AoJ2NoZWNrZWQnLCB0cnVlKTsNCgkJCQl9ZWxzZXsNCgkJCQkJJCgiI2Fic19zaGlmdCIpLnZhbCgnMScpLnRyaWdnZXIoImNoYW5nZSIpOw0KCQkJCQkkKCcjYWJzX3NoaWZ0JykucHJvcCgiY2hlY2tlZCIsIGZhbHNlKTsNCgkJCQl9DQoJCQkJJC5hamF4KHsNCgkJCQkJdXJsOiAnLi4vdGZvcm0vYWJzX2dldGluLnBocCcsDQoJCQkJCXN1Y2Nlc3M6ZnVuY3Rpb24obXNnKXsNCgkJCQkJCXZhciBzdHIgPSBtc2cuc3BsaXQoJ34nKTsNCgkJCQkJCWlmKCBzdHJbMF0gPT0gJ3gnICl7DQoJCQkJCQkJJCgiI2Fic19jaGVja19pbiIpLnZhbChzdHJbMV0pLnRyaWdnZXIoImNoYW5nZSIpOw0KCQkJCQkJCSQoIiNhYnNfaWQiKS52YWwoc3RyWzJdKS50cmlnZ2VyKCJjaGFuZ2UiKTsNCgkJCQkJCQkkKCIuYnRuLXRpbWUiKS5wcm9wKCJkaXNhYmxlZCIsIHRydWUpOw0KCQkJCQkJCXN3YWwoew0KCQkJCQkJCQl0aXRsZToiWW91IGhhdmUgY2hlY2tlZCBpbiIsIA0KCQkJCQkJCQl0ZXh0OiAnJywNCgkJCQkJCQkJdHlwZTogIndhcm5pbmciLA0KCQkJCQkJCQlzaG93Q2FuY2VsQnV0dG9uOiBmYWxzZSwgICAgICAgDQoJCQkJCQkJCWNvbmZpcm1CdXR0b25UZXh0OiAiT0siLA0KCQkJCQkJCQljbG9zZU9uQ29uZmlybTogdHJ1ZSwNCgkJCQkJCQkJY2xvc2VPbkVzYzogZmFsc2UsDQoJCQkJCQkJCWNsb3NlT25DbGlja091dHNpZGU6IGZhbHNlDQoJCQkJCQkJfSwgZnVuY3Rpb24gKCkgew0KCQkJCQkJCQlzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgew0KCQkJCQkJCQkJd2luZG93LmxvY2F0aW9uLmFzc2lnbignaG9tZS5waHA/dG09MjM0NTJlZjcyODUyY2QzZDhhY2U1OWUwZTZiYmM2NmEwYjNmODI5ODdjZmFiYTVkZDFjNzdjMGU0M2Q3YzJhNScpOw0KCQkJCQkJCQl9LCAxMDApOwkJCQkJCQkJDQoJCQkJCQkJfSk7DQoJCQkJCQl9DQoJCQkJCQllbHNlew0KCQkJCQkJCXZhciBkID0gbmV3IERhdGUoKTsNCgkJCQkJCQl2YXIgdGltZSA9IGQuZ2V0SG91cnMoKSArICI6IiArIGQuZ2V0TWludXRlcygpICsgIjoiICsgZC5nZXRTZWNvbmRzKCk7DQoJCQkJCQkJdmFyIHN0ID0gbXNnLnNwbGl0KCd+Jyk7DQoJCQkJCQkJJCgiI2Fic19pZCIpLnZhbCgnMCcpLnRyaWdnZXIoImNoYW5nZSIpOw0KCQkJCQkJCSQoIiNhYnNfZGF0ZSIpLnZhbChzdFsxNV0pLnRyaWdnZXIoImNoYW5nZSIpOw0KCQkJCQkJCSQoIiNhYnNfd2YiKS52YWwoc3RbNF0pOw0KCQkJCQkJCWlmKCBzdFs0XSA9PSAxKXsNCgkJCQkJCQkJJCgiI2Fic193ZiIpLmF0dHIoJ2NoZWNrZWQnKTsNCgkJCQkJCQl9ZWxzZXsNCgkJCQkJCQkJJCgiI2Fic193ZiIpLnJlbW92ZUF0dHIoJ2NoZWNrZWQnKTsNCgkJCQkJCQl9DQoJCQkJCQkJaWYoICQoIiNhYnNfZ3JhZGUiKS52YWwoKSA+IDQgJiYgJCgiI2Fic19kaXZpc2lvbiIpLnZhbCgpID09IDcpew0KCQkJCQkJCQkkKCIjYWJzX2NoZWNrX2luIikudmFsKHN0WzldKS50cmlnZ2VyKCJjaGFuZ2UiKTsNCgkJCQkJCQl9DQoJCQkJCQkJZWxzZSBpZiggJCgiI2Fic191c2VyX2lkIikudmFsKCkgPT0gMjM1IHx8ICAkKCIjYWJzX3VzZXJfaWQiKS52YWwoKSA9PSAyMzkgfHwgICQoIiNhYnNfdXNlcl9pZCIpLnZhbCgpID09IDIzNil7DQoJCQkJCQkJCSQoIiNhYnNfY2hlY2tfaW4iKS52YWwoc3RbOV0pLnRyaWdnZXIoImNoYW5nZSIpOw0KCQkJCQkJCX0NCgkJCQkJCQllbHNlew0KCQkJCQkJCQkkKCIjYWJzX2NoZWNrX2luIikudmFsKHN0WzldKS5wcm9wKCJyZWFkb25seSIsIHRydWUpLnRyaWdnZXIoImNoYW5nZSIpOw0KCQkJCQkJCX0NCgkJCQkJCQkkKCIjYWJzX2NoZWNrX2luIikucGFyZW50KCkucmVtb3ZlQ2xhc3MoJ2ZvY3VzZWQnKS5hZGRDbGFzcygnZm9jdXNlZCcpOw0KCQkJCQkJCS8qDQoJCQkJCQkJJCgiI2Fic19zaGlmdCIpLnZhbChzdFsxMV0pLnRyaWdnZXIoImNoYW5nZSIpOw0KCQkJCQkJCWlmKCBzdFsxMV0gPT0gMSApew0KCQkJCQkJCQkkKCIjYWJzX3NoaWZ0IikudmFsKCcxJykudHJpZ2dlcigiY2hhbmdlIik7DQoJCQkJCQkJCSQoIiNhYnNfc2hpZnQiKS5wcm9wKCdjaGVja2VkJywgdHJ1ZSk7DQoJCQkJCQkJfWVsc2V7DQoJCQkJCQkJCSQoIiNhYnNfc2hpZnQiKS52YWwoJzAnKS50cmlnZ2VyKCJjaGFuZ2UiKTsNCgkJCQkJCQkJJCgiI2Fic19zaGlmdCIpLnByb3AoJ2NoZWNrZWQnLCBmYWxzZSk7DQoJCQkJCQkJfSovDQoJCQkJCQkJDQoJCQkJCQkJJCgiI2Fic19ub3RfaW4iKS52YWwoc3RbMTJdKS50cmlnZ2VyKCJjaGFuZ2UiKTsNCgkJCQkJCQlpZihzdFsxMl0gPT0gMSl7DQoJCQkJCQkJCSQoIiNhYnNfbm90X2luIikudmFsKCcxJykuYXR0cignY2hlY2tlZCcpOw0KCQkJCQkJCX1lbHNlew0KCQkJCQkJCQkkKCIjYWJzX25vdF9pbiIpLnZhbCgnMCcpLnJlbW92ZUF0dHIoJ2NoZWNrZWQnKTsNCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9KTsNCgkJCQl2YXIgJHJhZCA9ICQoJyNyYWQnKSwgZCA9IDA7DQoJCQkJKGZ1bmN0aW9uIHJvdGF0ZSgpIHsgICAgDQoJCQkJCSRyYWQuY3NzKHsgdHJhbnNmb3JtOiAncm90YXRlKCcrIGQgKydkZWcpJ30pOyANCgkJCQkJdmFyIHRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsNCgkJCQkJCSsrZDsgDQoJCQkJCQlyb3RhdGUoKTsgDQoJCQkJCX0sIDI1KTsgDQoJCQkJfSkoKTsNCgkJCX0pOw0KCQk8L3NjcmlwdD4NCgkJPHNjcmlwdCBhc3luYyBzcmM9Imh0dHBzOi8vbWFwcy5nb29nbGVhcGlzLmNvbS9tYXBzL2FwaS9qcz9rZXk9QUl6YVN5QnphdEtKUWJPTFlMcnlGUWdJdFliYkl3eVRSbDNFWnc4Ij48L3NjcmlwdD4NCgkJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KCQkJdmFyIG9wdGlvbnMgPSB7DQoJCQkJZW5hYmxlSGlnaEFjY3VyYWN5OiB0cnVlLA0KCQkJCXRpbWVvdXQ6IDUwMDAsDQoJCQkJbWF4aW11bUFnZTogMA0KCQkJfTsJCQ0KCQkJdmFyIHZpZXcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGFtcGlsa2FuIik7DQoJCQlmdW5jdGlvbiBnZXRMb2NhdGlvbigpIHsNCgkJCQlpZiAobmF2aWdhdG9yLmdlb2xvY2F0aW9uKSB7DQoJCQkJCW5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oc2hvd1Bvc2l0aW9uLCBzaG93RXJyb3IsIHtlbmFibGVIaWdoQWNjdXJhY3k6IHRydWUsIHRpbWVvdXQ6IDIwMDAwLCBtYXhpbXVtQWdlOiAxMDAwMH0pOw0KCQkJCX0gZWxzZSB7DQoJCQkJCXZpZXcuaW5uZXJIVE1MID0gIkJyb3dzZXIgbm90IHN1cHBvcnQgR2VvbG9jYXRpb24gISI7DQoJCQkJfQ0KCQkJfQ0KCQkJZnVuY3Rpb24gc2hvd1Bvc2l0aW9uKHBvc2l0aW9uKSB7DQoJCQkJdmlldy5jbGFzc0xpc3QucmVtb3ZlKCJoaWRlIik7DQoJCQkJdmlldy5jbGFzc0xpc3QuYWRkKCJoaWRlIik7DQoJCQkJbGF0ID0gcG9zaXRpb24uY29vcmRzLmxhdGl0dWRlOw0KCQkJCWxuZyA9IHBvc2l0aW9uLmNvb3Jkcy5sb25naXR1ZGU7DQoJCQkJYWNjID0gcG9zaXRpb24uY29vcmRzLmFjY3VyYWN5Ow0KCQkJCXZhciBncmFkZSAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYWJzX2dyYWRlIikudmFsdWU7DQoJCQkJdmFyIGRpdmlzaSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhYnNfZGl2aXNpb24iKS52YWx1ZTsNCgkJCQl2YXIgcGVzYW4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYWJzX3VzZXJfaWQiKS52YWx1ZTsNCgkJCQlnZXRBZGRyZXNzKGxhdCwgbG5nKTsNCgkJCQlpZiggZ3JhZGUgPiA0ICYmIGRpdmlzaSA9PSA3KXsNCgkJCQkJdmFyIGdlZGUgPSAndHJ1ZSc7DQoJCQkJfQ0KCQkJCWVsc2UgaWYoIHBlc2FuID09IDIzNSB8fCBwZXNhbiA9PSAyMzkgfHwgcGVzYW4gPT0gMjM2KXsNCgkJCQkJdmFyIGdlZGUgPSAndHJ1ZSc7DQoJCQkJfQ0KCQkJCWVsc2V7DQoJCQkJCXZhciBnZWRlID0gJ2ZhbHNlJzsNCgkJCQl9DQoJCQkJDQoJCQkJdmFyIG15T3B0aW9ucyA9IHsNCgkJCQkJY2VudGVyOiBuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nKGxhdCwgbG5nKSwNCgkJCQkJem9vbTogMTQsDQoJCQkJCW1hcFR5cGVDb250cm9sOiBmYWxzZSwNCgkJCQkJc2NhbGVDb250cm9sOiBmYWxzZSwNCgkJCQkJc3RyZWV0Vmlld0NvbnRyb2w6IGZhbHNlLA0KCQkJCQl6b29tQ29udHJvbDogZmFsc2UsDQoJCQkJCWZ1bGxzY3JlZW5Db250cm9sOiBnZWRlLA0KCQkJCQliYWNrZ3JvdW5kQ29sb3I6ICcjMjQyZjNlJywNCgkJCQkJbWFwVHlwZUlkOmdvb2dsZS5tYXBzLk1hcFR5cGVJZC5ST0FETUFQLA0KCQkJCQlzdHlsZXM6IFsNCgkJCQkJICB7IGVsZW1lbnRUeXBlOiAiZ2VvbWV0cnkiLCBzdHlsZXJzOiBbeyBjb2xvcjogIiMyNDJmM2UiIH1dIH0sDQoJCQkJCSAgeyBlbGVtZW50VHlwZTogImxhYmVscy50ZXh0LnN0cm9rZSIsIHN0eWxlcnM6IFt7IGNvbG9yOiAiIzI0MmYzZSIgfV0gfSwNCgkJCQkJICB7IGVsZW1lbnRUeXBlOiAibGFiZWxzLnRleHQuZmlsbCIsIHN0eWxlcnM6IFt7IGNvbG9yOiAiIzc0Njg1NSIgfV0gfSwNCgkJCQkJICB7DQoJCQkJCQlmZWF0dXJlVHlwZTogInJvYWQiLA0KCQkJCQkJZWxlbWVudFR5cGU6ICJnZW9tZXRyeSIsDQoJCQkJCQlzdHlsZXJzOiBbeyBjb2xvcjogIiMzODQxNGUiIH1dDQoJCQkJCSAgfSwNCgkJCQkJICB7DQoJCQkJCQlmZWF0dXJlVHlwZTogInJvYWQiLA0KCQkJCQkJZWxlbWVudFR5cGU6ICJnZW9tZXRyeS5zdHJva2UiLA0KCQkJCQkJc3R5bGVyczogW3sgY29sb3I6ICIjMjEyYTM3IiB9XQ0KCQkJCQkgIH0sDQoJCQkJCSAgew0KCQkJCQkJZmVhdHVyZVR5cGU6ICJyb2FkIiwNCgkJCQkJCWVsZW1lbnRUeXBlOiAibGFiZWxzLnRleHQuZmlsbCIsDQoJCQkJCQlzdHlsZXJzOiBbeyBjb2xvcjogIiM5Y2E1YjMiIH1dDQoJCQkJCSAgfSwNCgkJCQkJICB7DQoJCQkJCQlmZWF0dXJlVHlwZTogInJvYWQuaGlnaHdheSIsDQoJCQkJCQllbGVtZW50VHlwZTogImdlb21ldHJ5IiwNCgkJCQkJCXN0eWxlcnM6IFt7IGNvbG9yOiAiIzc0Njg1NSIgfV0NCgkJCQkJICB9LA0KCQkJCQkgIHsNCgkJCQkJCWZlYXR1cmVUeXBlOiAicm9hZC5oaWdod2F5IiwNCgkJCQkJCWVsZW1lbnRUeXBlOiAiZ2VvbWV0cnkuc3Ryb2tlIiwNCgkJCQkJCXN0eWxlcnM6IFt7IGNvbG9yOiAiIzFmMjgzNSIgfV0NCgkJCQkJICB9LA0KCQkJCQkgIHsNCgkJCQkJCWZlYXR1cmVUeXBlOiAicm9hZC5oaWdod2F5IiwNCgkJCQkJCWVsZW1lbnRUeXBlOiAibGFiZWxzLnRleHQuZmlsbCIsDQoJCQkJCQlzdHlsZXJzOiBbeyBjb2xvcjogIiNmM2QxOWMiIH1dDQoJCQkJCSAgfSwNCgkJCQkJICB7DQoJCQkJCQlmZWF0dXJlVHlwZTogIndhdGVyIiwNCgkJCQkJCWVsZW1lbnRUeXBlOiAiZ2VvbWV0cnkiLA0KCQkJCQkJc3R5bGVyczogW3sgY29sb3I6ICIjMTcyNjNjIiB9XQ0KCQkJCQkgIH0sDQoJCQkJCSAgew0KCQkJCQkJZmVhdHVyZVR5cGU6ICJ3YXRlciIsDQoJCQkJCQllbGVtZW50VHlwZTogImxhYmVscy50ZXh0LmZpbGwiLA0KCQkJCQkJc3R5bGVyczogW3sgY29sb3I6ICIjNTE1YzZkIiB9XQ0KCQkJCQkgIH0sDQoJCQkJCSAgew0KCQkJCQkJZmVhdHVyZVR5cGU6ICJ3YXRlciIsDQoJCQkJCQllbGVtZW50VHlwZTogImxhYmVscy50ZXh0LnN0cm9rZSIsDQoJCQkJCQlzdHlsZXJzOiBbeyBjb2xvcjogIiMxNzI2M2MiIH1dDQoJCQkJCSAgfQ0KCQkJCQldDQoNCgkJCQl9DQoJCQkJdmFyIG1hcCA9IG5ldyBnb29nbGUubWFwcy5NYXAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1hcGNhbnZhcyIpLCBteU9wdGlvbnMpOw0KCQkJCXZhciBncmFkZSAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYWJzX2dyYWRlIikudmFsdWU7DQoJCQkJdmFyIGRpdmlzaSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhYnNfZGl2aXNpb24iKS52YWx1ZTsNCgkJCQl2YXIgcGVzYW4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYWJzX3VzZXJfaWQiKS52YWx1ZTsNCgkJCQl2YXIgbWFya2VycyA9IFtdOw0KCQkJCWlmKCBncmFkZSA+IDQgJiYgZGl2aXNpID09IDcpew0KCQkJCQl2YXIgbWFya2VyID0gbmV3IGdvb2dsZS5tYXBzLk1hcmtlcih7DQoJCQkJCQlwb3NpdGlvbjogbmV3IGdvb2dsZS5tYXBzLkxhdExuZyhsYXQsIGxuZyksDQoJCQkJCQltYXA6IG1hcCwNCgkJCQkJCWRyYWdnYWJsZTogdHJ1ZSwNCgkJCQkJCWFuaW1hdGlvbjogZ29vZ2xlLm1hcHMuQW5pbWF0aW9uLkJPVU5DRSwNCgkJCQkJCXRpdGxlOiAiSSBhbSBoZXJlISIsDQoJCQkJCQlpY29uOiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCgkJCQkJCQl1cmw6ICIuLi9pbWFnZXMvZGlzaW5pLnBuZyIsDQoJCQkJCQkJc2NhbGVkU2l6ZTogbmV3IGdvb2dsZS5tYXBzLlNpemUoMzAsIDUwKQ0KCQkJCQkJfQ0KCQkJCQl9KTsNCgkJCQkJJCgiI2Fic19hZGRyZXNzIikucHJvcCgicmVhZG9ubHkiLCBmYWxzZSk7DQoJCQkJCWF1dG9zaXplLnVwZGF0ZSgkKCd0ZXh0YXJlYScpKTsNCgkJCQl9DQoJCQkJZWxzZSBpZiggcGVzYW4gPT0gMjM1IHx8IHBlc2FuID09IDIzOSB8fCBwZXNhbiA9PSAyMzYpew0KCQkJCQl2YXIgbWFya2VyID0gbmV3IGdvb2dsZS5tYXBzLk1hcmtlcih7DQoJCQkJCQlwb3NpdGlvbjogbmV3IGdvb2dsZS5tYXBzLkxhdExuZyhsYXQsIGxuZyksDQoJCQkJCQltYXA6IG1hcCwNCgkJCQkJCWRyYWdnYWJsZTogdHJ1ZSwNCgkJCQkJCWFuaW1hdGlvbjogZ29vZ2xlLm1hcHMuQW5pbWF0aW9uLkJPVU5DRSwNCgkJCQkJCXRpdGxlOiAiSSBhbSBoZXJlISIsDQoJCQkJCQlpY29uOiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCgkJCQkJCQl1cmw6ICIuLi9pbWFnZXMvZGlzaW5pLnBuZyIsDQoJCQkJCQkJc2NhbGVkU2l6ZTogbmV3IGdvb2dsZS5tYXBzLlNpemUoMzAsIDUwKQ0KCQkJCQkJfQ0KCQkJCQl9KTsNCgkJCQkJJCgiI2Fic19hZGRyZXNzIikucHJvcCgicmVhZG9ubHkiLCBmYWxzZSk7DQoJCQkJCWF1dG9zaXplLnVwZGF0ZSgkKCd0ZXh0YXJlYScpKTsNCgkJCQl9DQoJCQkJZWxzZXsNCgkJCQkJdmFyIG1hcmtlciA9IG5ldyBnb29nbGUubWFwcy5NYXJrZXIoew0KCQkJCQkJcG9zaXRpb246IG5ldyBnb29nbGUubWFwcy5MYXRMbmcobGF0LCBsbmcpLA0KCQkJCQkJbWFwOiBtYXAsDQoJCQkJCQlhbmltYXRpb246IGdvb2dsZS5tYXBzLkFuaW1hdGlvbi5EUk9QLAkNCgkJCQkJCXRpdGxlOiAiSSBhbSBoZXJlISIsDQoJCQkJCQlpY29uOiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCgkJCQkJCQl1cmw6ICIuLi9pbWFnZXMvZGlzaW5pLnBuZyIsDQoJCQkJCQkJc2NhbGVkU2l6ZTogbmV3IGdvb2dsZS5tYXBzLlNpemUoMzAsIDUwKQ0KCQkJCQkJfQ0KCQkJCQl9KTsNCgkJCQkJJCgiI2Fic19hZGRyZXNzIikucHJvcCgicmVhZG9ubHkiLCB0cnVlKTsNCgkJCQkJYXV0b3NpemUudXBkYXRlKCQoJ3RleHRhcmVhJykpOw0KCQkJCX0NCgkJCQlnb29nbGUubWFwcy5ldmVudC5hZGRMaXN0ZW5lcihtYXJrZXIsICdkcmFnZW5kJywgZnVuY3Rpb24gKGV2ZW50KSB7DQoJCQkJCWx0ID0gdGhpcy5nZXRQb3NpdGlvbigpLmxhdCgpOw0KCQkJCQlsbiA9IHRoaXMuZ2V0UG9zaXRpb24oKS5sbmcoKTsNCgkJCQkJZ2V0QWRkcmVzcyhsdCwgbG4pOw0KCQkJCX0pOw0KCQkJCXZhciBnZW9jb2RlciA9IG5ldyBnb29nbGUubWFwcy5HZW9jb2RlcigpOw0KCQkJCSQoIiNhYnNfYWRkcmVzcyIpLmJpbmQoJ2tleXVwJywgZnVuY3Rpb24oZSkgew0KCQkJCQlpZiggJCh0aGlzKS52YWwoKS5sZW5ndGggPiA1IHx8ICQodGhpcykudmFsKCkgIT0gJycgfHwgJCh0aGlzKS52YWwoKSAhPSBudWxsICl7DQoJCQkJCQlnZW9jb2RlQWRkcmVzcyhnZW9jb2RlciwgbWFwKTsNCgkJCQkJfQ0KCQkJCQl2YXIga2V5ID0gZS53aGljaDsNCgkJCQkJaWYgKGtleSA9PSAxMykgew0KCQkJCQkJZS5wcmV2ZW50RGVmYXVsdCgpOw0KCQkJCQl9DQoJCQkJfSk7DQoJCQl9DQoJCQlmdW5jdGlvbiBnZW9jb2RlQWRkcmVzcyhnZW9jb2RlciwgcmVzdWx0c01hcCkgew0KCQkJCXZhciBhZGRyZXNzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFic19hZGRyZXNzIikudmFsdWU7DQoJCQkJZ2VvY29kZXIuZ2VvY29kZSh7IGFkZHJlc3M6IGFkZHJlc3MgfSwgZnVuY3Rpb24ocmVzdWx0cywgc3RhdHVzKSB7DQoJCQkJCWlmIChzdGF0dXMgPT09ICJPSyIpIHsNCgkJCQkJCXJlc3VsdHNNYXAuc2V0Q2VudGVyKHJlc3VsdHNbMF0uZ2VvbWV0cnkubG9jYXRpb24pOw0KCQkJCQkJdmFyIG1hcmtlciA9IG5ldyBnb29nbGUubWFwcy5NYXJrZXIoew0KCQkJCQkJCW1hcDogcmVzdWx0c01hcCwNCgkJCQkJCQlwb3NpdGlvbjogcmVzdWx0c1swXS5nZW9tZXRyeS5sb2NhdGlvbg0KCQkJCQkJfSk7DQoJCQkJCX0NCgkJCQl9KTsNCgkJCX0NCgkJCWZ1bmN0aW9uIHNob3dFcnJvcihlcnJvcikgew0KCQkJCXN3aXRjaChlcnJvci5jb2RlKSB7DQoJCQkJCWNhc2UgZXJyb3IuUEVSTUlTU0lPTl9ERU5JRUQ6DQoJCQkJCQl2aWV3LmlubmVySFRNTCA9ICJCcm93c2VyIG5vdCBzdXBwb3J0IEdlb2xvY2F0aW9uICEiDQoJCQkJCQlicmVhazsNCgkJCQkJY2FzZSBlcnJvci5QT1NJVElPTl9VTkFWQUlMQUJMRToNCgkJCQkJCXZpZXcuaW5uZXJIVE1MID0gIllvdXIgbG9jYXRpb24gY2FuJ3QgYmUgZm91bmQiDQoJCQkJCQlicmVhazsNCgkJCQkJY2FzZSBlcnJvci5USU1FT1VUOg0KCQkJCQkJdmlldy5pbm5lckhUTUwgPSAiUmVxdWVzdCB0aW1lb3V0Ig0KCQkJCQkJYnJlYWs7DQoJCQkJCWNhc2UgZXJyb3IuVU5LTk9XTl9FUlJPUjoNCgkJCQkJCXZpZXcuaW5uZXJIVE1MID0gIkFuIHVua25vd24gZXJyb3Igb2NjdXJyZWQuIg0KCQkJCQkJYnJlYWs7DQoJCQkJfQ0KCQkJCXZpZXcuY2xhc3NMaXN0LnJlbW92ZSgiaGlkZSIpOw0KCQkJIH0NCgkJPC9zY3JpcHQ+DQoJCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCgkJCWZ1bmN0aW9uIGdldEFkZHJlc3MobGF0LCBsbmcpIHsNCgkJCQl2YXIgbGF0bG5nID0ge2xhdDogbGF0LCBsbmc6IGxuZ307DQoJCQkJdmFyIGdlb2NvZGVyID0gbmV3IGdvb2dsZS5tYXBzLkdlb2NvZGVyOw0KCQkJCQlnZW9jb2Rlci5nZW9jb2RlKHsnbG9jYXRpb24nOiBsYXRsbmd9LCBmdW5jdGlvbihyZXN1bHRzLCBzdGF0dXMpIHsNCgkJCQkJaWYgKHN0YXR1cyA9PT0gJ09LJykgew0KCQkJCQkJaWYgKHJlc3VsdHNbMF0pIHsNCgkJCQkJCQlycyA9IHJlc3VsdHNbMF0uZm9ybWF0dGVkX2FkZHJlc3M7DQoJCQkJCQl9IGVsc2Ugew0KCQkJCQkJCXJzID0gJ05vIHJlc3VsdHMgZm91bmQnOw0KCQkJCQkJfQ0KCQkJCQl9IGVsc2Ugew0KCQkJCQkJcnMgPSAnR2VvY29kZXIgZmFpbGVkIGR1ZSB0bzogJyArIHN0YXR1czsNCgkJCQkJfQ0KCQkJCQkkKCIjYWJzX2xhdGl0dWRlIikudmFsKGxhdCkucHJvcCgicmVhZG9ubHkiLCB0cnVlKS5wYXJlbnQoKS5hZGRDbGFzcygiZm9jdXNlZCIpOw0KCQkJCQkkKCIjYWJzX2xvbmdpdHVkZSIpLnZhbChsbmcpLnByb3AoInJlYWRvbmx5IiwgdHJ1ZSkucGFyZW50KCkuYWRkQ2xhc3MoImZvY3VzZWQiKTsNCgkJCQkJdmFyIGdyYWRlICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhYnNfZ3JhZGUiKS52YWx1ZTsNCgkJCQkJdmFyIGRpdmlzaSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhYnNfZGl2aXNpb24iKS52YWx1ZTsNCgkJCQkJdmFyIHBlc2FuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFic191c2VyX2lkIikudmFsdWU7DQoJCQkJCWlmKCBncmFkZSA+IDQgJiYgZGl2aXNpID09IDcpew0KCQkJCQkJJCgnI2Fic19hZGRyZXNzJykudmFsKHJzKS5wcm9wKCJyZWFkb25seSIsIGZhbHNlKS5wYXJlbnQoKS5hZGRDbGFzcygiZm9jdXNlZCIpOw0KCQkJCQl9DQoJCQkJCWVsc2UgaWYoIHBlc2FuID09IDIzNSB8fCBwZXNhbiA9PSAyMzkgfHwgcGVzYW4gPT0gMjM2KXsNCgkJCQkJCSQoJyNhYnNfYWRkcmVzcycpLnZhbChycykucHJvcCgicmVhZG9ubHkiLCBmYWxzZSkucGFyZW50KCkuYWRkQ2xhc3MoImZvY3VzZWQiKTsNCgkJCQkJfQ0KCQkJCQllbHNlew0KCQkJCQkJJCgnI2Fic19hZGRyZXNzJykudmFsKHJzKS5wcm9wKCJyZWFkb25seSIsIHRydWUpLnBhcmVudCgpLmFkZENsYXNzKCJmb2N1c2VkIik7DQoJCQkJCX0NCgkJCQkJYXV0b3NpemUudXBkYXRlKCQoJ3RleHRhcmVhJykpOw0KCQkJCQl2YXIgdGEgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCd0ZXh0YXJlYScpOw0KCQkJCQl0YS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KCQkJCQlhdXRvc2l6ZSh0YSk7DQoJCQkJCXRhLnN0eWxlLmRpc3BsYXkgPSAnJzsNCgkJCQkJYXV0b3NpemUudXBkYXRlKHRhKTsNCgkJCQkJdmFyIHVyaSA9ICJodHRwczovL21hcHMuZ29vZ2xlYXBpcy5jb20vbWFwcy9hcGkvdGltZXpvbmUvanNvbj9sb2NhdGlvbj0iK2xhdCsiLCIrbG5nKyImdGltZXN0YW1wPSIrKE1hdGgucm91bmQoKG5ldyBEYXRlKCkuZ2V0VGltZSgpKS8xMDAwKSkudG9TdHJpbmcoKSsiJmtleT1BSXphU3lBQ0I4N2lrcmU0OGM5clJMNW9nYkJLWWZoblNlcHpRVHMiOw0KCQkJCQkkLmdldCh1cmkpLnN1Y2Nlc3MoZnVuY3Rpb24ocmVzcG9uc2UpIHsNCgkJCQkJCWlmKHJlc3BvbnNlLnRpbWVab25lSWQgIT0gbnVsbCl7DQoJCQkJCQkJdmFyIGQgPSBuZXcgRGF0ZSgpOw0KCQkJCQkJCXZhciB1dGMgPSBkLmdldFRpbWUoKSArIChkLmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MDAwMCk7DQoJCQkJCQkJdmFyIG5kID0gbmV3IERhdGUodXRjICsgKDEwMDAqcmVzcG9uc2UucmF3T2Zmc2V0KSk7DQoJCQkJCQkJdmFyIGphbSA9IG5kLnRvTG9jYWxlU3RyaW5nKCk7DQoJCQkJCQkJdmFyIGhvdXIgPSAocmVzcG9uc2UucmF3T2Zmc2V0KS82MDsNCgkJCQkJCQkvL3BhcnNlRmxvYXQoamFtLnJlcGxhY2UoJy4nLCc6Jyk7DQoJCQkJCQkJJCgiI2Fic196b25lX3RpbWVfaW4iKS52YWwobmQudG9Mb2NhbGVTdHJpbmcoKSkucHJvcCgicmVhZG9ubHkiLCB0cnVlKS5wYXJlbnQoKS5hZGRDbGFzcygiZm9jdXNlZCIpOw0KCQkJCQkJCWlmKGhvdXIgPT0gNDIwKXsNCgkJCQkJCQkJJCgiI2Fic196b25lX3JlZ2lvbl9pbiIpLnZhbCgnV0lCJykucHJvcCgicmVhZG9ubHkiLCB0cnVlKS5wYXJlbnQoKS5hZGRDbGFzcygiZm9jdXNlZCIpOw0KCQkJCQkJCX0NCgkJCQkJCQllbHNlIGlmKGhvdXIgPT0gNDgwKXsNCgkJCQkJCQkJJCgiI2Fic196b25lX3JlZ2lvbl9pbiIpLnZhbCgnV0lUQScpLnByb3AoInJlYWRvbmx5IiwgdHJ1ZSkucGFyZW50KCkuYWRkQ2xhc3MoImZvY3VzZWQiKTsNCgkJCQkJCQl9DQoJCQkJCQkJZWxzZSBpZihob3VyID09IDU0MCl7DQoJCQkJCQkJCSQoIiNhYnNfem9uZV9yZWdpb25faW4iKS52YWwoJ1dJVCcpLnByb3AoInJlYWRvbmx5IiwgdHJ1ZSkucGFyZW50KCkuYWRkQ2xhc3MoImZvY3VzZWQiKTsNCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0pOw0KCQkJCX0pOw0KCQkJfQ0KCQk8L3NjcmlwdD4NCgkJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KCQkJJCgnI2Fic19zaGlmdCcpLmNoYW5nZShmdW5jdGlvbigpew0KCQkJCWlmICgkKHRoaXMpLmlzKCc6Y2hlY2tlZCcpKSB7DQoJCQkJCSQodGhpcykudmFsKCcxJyk7DQoJCQkJCWlmKCAkKCIjYWJzX2dyYWRlIikudmFsKCkgPiA0ICYmICQoIiNhYnNfZGl2aXNpb24iKS52YWwoKSA9PSA3KXsNCgkJCQkJCWdldFRpbWVLaHVzdXMoKTsNCgkJCQkJfQ0KCQkJCQllbHNlIGlmKCAkKCIjYWJzX3VzZXJfaWQiKS52YWwoKSA9PSAyMzUgfHwgICQoIiNhYnNfdXNlcl9pZCIpLnZhbCgpID09IDIzOSB8fCAgJCgiI2Fic191c2VyX2lkIikudmFsKCkgPT0gMjM2KXsNCgkJCQkJCWdldFRpbWVLaHVzdXMoKTsNCgkJCQkJfQ0KCQkJCQllbHNlew0KCQkJCQkJZ2V0VGltZVNoaWZ0KCk7DQoJCQkJCX0NCgkJCQkJcmV0dXJuOw0KCQkJCX1lbHNlew0KCQkJCQkkKHRoaXMpLnZhbCgnMCcpOw0KCQkJCQlpZiggJCgiI2Fic19ncmFkZSIpLnZhbCgpID4gNCAmJiAkKCIjYWJzX2RpdmlzaW9uIikudmFsKCkgPT0gNyl7DQoJCQkJCQlnZXRUaW1lS2h1c3VzKCk7DQoJCQkJCX0NCgkJCQkJZWxzZSBpZiggJCgiI2Fic191c2VyX2lkIikudmFsKCkgPT0gMjM1IHx8ICAkKCIjYWJzX3VzZXJfaWQiKS52YWwoKSA9PSAyMzkgfHwgICQoIiNhYnNfdXNlcl9pZCIpLnZhbCgpID09IDIzNil7DQoJCQkJCQlnZXRUaW1lS2h1c3VzKCk7DQoJCQkJCX0NCgkJCQkJZWxzZXsNCgkJCQkJCWdldFRpbWVOb3JtYWwoKTsNCgkJCQkJfQ0KCQkJCX0JCQkJDQoJCQkJJCgiI2Fic19jaGVja19pbiIpLnBhcmVudCgpLnJlbW92ZUNsYXNzKCdmb2N1c2VkJykuYWRkQ2xhc3MoJ2ZvY3VzZWQnKTsNCgkJCX0pOw0KCQkJJCgnI2Fic19ub3RfaW4nKS5jaGFuZ2UoZnVuY3Rpb24oKXsNCgkJCQlpZiAoJCh0aGlzKS5pcygnOmNoZWNrZWQnKSkgew0KCQkJCQkkKHRoaXMpLnZhbCgnMScpOw0KCQkJCQkkKCcjbWRNb2RhbCAubW9kYWwtY29udGVudCcpLnJlbW92ZUF0dHIoJ2NsYXNzJykuYWRkQ2xhc3MoJ21vZGFsLWNvbnRlbnQgbW9kYWwtY29sLWJsYWNrJyk7DQoJCQkJCSQoJyNtZE1vZGFsJykubW9kYWwoew0KCQkJCQkJYmFja2Ryb3A6ICdzdGF0aWMnDQoJCQkJCX0pOw0KCQkJCQkkKCcjbWRNb2RhbCcpLm1vZGFsKCdzaG93Jyk7DQoJCQkJfWVsc2V7DQoJCQkJCSQodGhpcykudmFsKCcwJyk7DQoJCQkJfQ0KCQkJfSk7DQoJCTwvc2NyaXB0Pg0KCQk8c2NyaXB0Pg0KCQkJZnVuY3Rpb24gc2hvd1BpY3R1cmUoaW5wdXQpIHsNCgkJCQkkKCIjYWJzX3VwbG9hZCIpLnJlbW92ZUNsYXNzKCdoaWRlJykuYWRkQ2xhc3MoJ2hpZGUnKTsNCgkJCQl2YXIgZmlsZSA9IGlucHV0LmZpbGVzWzBdOw0KCQkJCXZhciBmaWxlVHlwZSA9IGZpbGUudHlwZTsNCgkJCQl2YXIgbWF0Y2ggPSBbJ2ltYWdlL2pwZWcnLCAnaW1hZ2UvcG5nJywgJ2ltYWdlL2pwZycsICdpbWFnZS9naWYnXTsNCgkJCQlpZighKChmaWxlVHlwZSA9PSBtYXRjaFswXSkgfHwgKGZpbGVUeXBlID09IG1hdGNoWzFdKSB8fCAoZmlsZVR5cGUgPT0gbWF0Y2hbMl0pIHx8IChmaWxlVHlwZSA9PSBtYXRjaFszXSkgKSl7DQoJCQkJCXN3YWwoIkVycm9yIiwgIlNvcnJ5LCBvbmx5IEdJRiwgSlBHLCBKUEVHLCAmIFBORyBmaWxlcyBhcmUgYWxsb3dlZCB0byB1cGxvYWQuIiwgImVycm9yIik7DQoJCQkJCSQoIiNhYnNfZmlsZSIpLnZhbCgnJyk7DQoJCQkJCXJldHVybiBmYWxzZTsNCgkJCQl9DQoJCQkJaWYoaW5wdXQuZmlsZXMgJiYgaW5wdXQuZmlsZXNbMF0pew0KCQkJCQl2YXIgZmlsZXJkciA9IG5ldyBGaWxlUmVhZGVyKCk7DQoJCQkJCWZpbGVyZHIub25sb2FkID0gZnVuY3Rpb24oZSl7DQoJCQkJCQkkKCIjYWJzX2ltYWdlIikudmFsKCcnKTsNCgkJCQkJCSQoJyNhYnNfc2hvdycpLmF0dHIoJ3NyYycsIGUudGFyZ2V0LnJlc3VsdCk7DQoJCQkJCX0NCgkJCQkJZmlsZXJkci5yZWFkQXNEYXRhVVJMKGlucHV0LmZpbGVzWzBdKTsNCgkJCQl9DQoJCQl9DQoNCgkJCSQoIiNmb3JtLWFic2VuY2UxIikudmFsaWRhdGUoew0KCQkJCWhpZ2hsaWdodDogZnVuY3Rpb24gKGlucHV0KSB7DQoJCQkJCWlmKCAkKGlucHV0KS5hdHRyKCd0eXBlJykgPT0gJ3VybCcgKXsNCgkJCQkJCSQoaW5wdXQpLnBhcmVudHMoJy5mb3JtLWxpbmUnKS5maW5kKCdsYWJlbCcpLmFkZENsYXNzKCdoYXMtZXJyb3InKTsNCgkJCQkJfQ0KCQkJCQkkKGlucHV0KS5wYXJlbnRzKCcuZm9ybS1saW5lJykuYWRkQ2xhc3MoJ2hhcy1lcnJvcicpOw0KCQkJCX0sDQoJCQkJdW5oaWdobGlnaHQ6IGZ1bmN0aW9uIChpbnB1dCkgew0KCQkJCQlpZiggJChpbnB1dCkuYXR0cigndHlwZScpID09ICd1cmwnICl7DQoJCQkJCQkkKGlucHV0KS5wYXJlbnRzKCcuZm9ybS1saW5lJykuZmluZCgnbGFiZWwnKS5yZW1vdmVDbGFzcygnaGFzLWVycm9yJyk7DQoJCQkJCX0NCgkJCQkJJChpbnB1dCkucGFyZW50cygnLmZvcm0tbGluZScpLnJlbW92ZUNsYXNzKCdoYXMtZXJyb3InKTsNCgkJCQl9LA0KCQkJCWVycm9yUGxhY2VtZW50OiBmdW5jdGlvbiAoZXJyb3IsIGVsZW1lbnQpIHsNCgkJCQkJJChlbGVtZW50KS5wYXJlbnRzKCcubGluZS1ncm91cCcpLmFwcGVuZChlcnJvcik7DQoJCQkJfSwNCgkJCQlpZ25vcmU6ICI6ZGlzYWJsZWQsIDpoaWRkZW4iLA0KCQkJCXJ1bGVzOiB7DQoJCQkJCWFic19jaGVja19pbjogInJlcXVpcmVkIg0KCQkJCX0NCgkJCX0pOw0KCQkJJCgiLmJ0bi1jYW5jZWwiKS5vbigiY2xpY2siLCBmdW5jdGlvbigpew0KCQkJCSQoIiNhYnNfcmVhc29uIikudmFsKCIiKS50cmlnZ2VyKCJjaGFuZ2UiKTsNCgkJCQkkKCIjYWJzX2ltYWdlIikudmFsKCIiKS50cmlnZ2VyKCJjaGFuZ2UiKTsNCgkJCQkkKCIjYWJzX2ZpbGUiKS52YWwoIiIpLnRyaWdnZXIoImNoYW5nZSIpOw0KCQkJCSQoJyNhYnNfc2hvdycpLmF0dHIoJ3NyYycsIiIpLnRyaWdnZXIoImNoYW5nZSIpOw0KCQkJCSQoJyNhYnNfbm90X2luJykucHJvcCgnY2hlY2tlZCcsIGZhbHNlKTsNCgkJCX0pOw0KCQkJJCgiI2Zvcm0tYWJzZW5jZSIpLm9uKCJzdWJtaXQiLCBmdW5jdGlvbihlKSB7DQoJCQkJZS5wcmV2ZW50RGVmYXVsdCgpOw0KCQkJCS8qJCh0aGlzKS52YWxpZGF0ZSgpOw0KCQkJCWlmICghJCh0aGlzKS52YWxpZCgpKSByZXR1cm4gZmFsc2U7CQ0KCQkJCSovDQoJCQkJdmFyIGZvcm0gPSBuZXcgRm9ybURhdGEodGhpcyk7DQoJCQkJaWYgKCQoJyNhYnNfd2YnKS5pcygnOmNoZWNrZWQnKSkgew0KCQkJCQl2YXIgd2YgPSAnV0ZPJzsNCgkJCQl9DQoJCQkJZWxzZXsNCgkJCQkJdmFyIHdmID0gJ1dGSCc7DQoJCQkJfQ0KCQkJCXN3YWwoew0KCQkJCQl0aXRsZTogIkFyZSB5b3Ugc3VyZSAiK3dmKyIgPyIsDQoJCQkJCXR5cGU6ICJpbmZvIiwNCgkJCQkJc2hvd0NhbmNlbEJ1dHRvbjogdHJ1ZSwNCgkJCQkJY2xvc2VPbkNvbmZpcm06IGZhbHNlLA0KCQkJCQlzaG93TG9hZGVyT25Db25maXJtOiB0cnVlLA0KCQkJCX0sIGZ1bmN0aW9uICgpIHsNCgkJCQkJc2V0VGltZW91dChmdW5jdGlvbiAoKSB7DQoJCQkJCQkkLmFqYXgoew0KCQkJCQkJCXR5cGU6ICdQT1NUJywNCgkJCQkJCQl1cmw6ICcuLi90Zm9ybS9hYnNfc2F2ZS5waHAnLA0KCQkJCQkJCWRhdGE6IGZvcm0sDQoJCQkJCQkJY29udGVudFR5cGU6IGZhbHNlLA0KCQkJCQkJCWNhY2hlOiBmYWxzZSwgDQoJCQkJCQkJcHJvY2Vzc0RhdGE6ZmFsc2UsDQoJCQkJCQkJc3VjY2VzczpmdW5jdGlvbihtc2cpew0KCQkJCQkJCQlzd2FsKHsNCgkJCQkJCQkJCXRpdGxlOiAiU3VjY2VzcyIsDQoJCQkJCQkJCQl0ZXh0OiAiWW91ciBkYXRhIGhhcyBiZWVuIHNhdmVkLiIsDQoJCQkJCQkJCQl0eXBlOiAic3VjY2VzcyIsDQoJCQkJCQkJCQlzaG93Q2FuY2VsQnV0dG9uOiBmYWxzZSwgICAgICAgDQoJCQkJCQkJCQljb25maXJtQnV0dG9uVGV4dDogIk9LIiwNCgkJCQkJCQkJCWNsb3NlT25Db25maXJtOiB0cnVlDQoJCQkJCQkJCX0sIGZ1bmN0aW9uICgpIHsNCgkJCQkJCQkJCXdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oJ2hvbWUucGhwP3RtPTIzNDUyZWY3Mjg1MmNkM2Q4YWNlNTllMGU2YmJjNjZhMGIzZjgyOTg3Y2ZhYmE1ZGQxYzc3YzBlNDNkN2MyYTUnKTsNCgkJCQkJCQkJfSk7DQoJCQkJCQkJfQ0KCQkJCQkJfSkuZmFpbChmdW5jdGlvbigganFYSFIsIHRleHRTdGF0dXMgKSB7DQoJCQkJCQkJc3dhbCgiUmVxdWVzdCBmYWlsZWQiLCB0ZXh0U3RhdHVzLCAiZXJyb3IiKTsNCgkJCQkJCX0pOw0KCQkJCQl9LCAyMDAwKTsNCgkJCQl9KTsNCgkJCX0pOw0KCQk8L3NjcmlwdD4NCg0KCQk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi9qcy93ZWJjYW0ubWluLmpzIj48L3NjcmlwdD4NCgkJPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdCI+DQoJCQlXZWJjYW0uc2V0KHsNCgkJCQl3aWR0aDogJzEwMCUnLA0KCQkJCWhlaWdodDogMjQwLA0KCQkJCWRlc3Rfd2lkdGg6IDMyMCwNCgkJCQlkZXN0X2hlaWdodDogMjQwLA0KCQkJCWNyb3Bfd2lkdGg6IDI0MCwNCgkJCQljcm9wX2hlaWdodDogMjQwLA0KCQkJCWZsaXBfaG9yaXo6IHRydWUNCgkJCX0pOw0KCQkJZnVuY3Rpb24gdGFrZV9zbmFwc2hvdCgpIHsNCgkJCQlXZWJjYW0uc25hcCggZnVuY3Rpb24od2ViX2NhbV9kYXRhKSB7DQoJCQkJCSQoIiNhYnNfZmlsZSIpLnZhbCgnJyk7DQoJCQkJCSQoIiNhYnNfaW1hZ2UiKS52YWwod2ViX2NhbV9kYXRhKTsNCgkJCQkJJCgiI2Fic19zaG93IikuYXR0cigic3JjIix3ZWJfY2FtX2RhdGEpOw0KCQkJCX0pOw0KCQkJCSQoIi5kaXZDYW1lcmEiKS5yZW1vdmVDbGFzcygnaGlkZScpLmFkZENsYXNzKCdoaWRlJyk7DQoJCQkJJCgiLmRpdlVwbG9hZCIpLnJlbW92ZUNsYXNzKCdoaWRlJyk7DQoJCQkJJCgiLmRpdlJlYXNvbiIpLnJlbW92ZUNsYXNzKCdoaWRlJyk7DQoJCQkJV2ViY2FtLnJlc2V0KCk7DQoJCQkJJCgiLm1vZGFsLWZvb3RlciIpLnJlbW92ZUNsYXNzKCdoaWRlJyk7DQoJCQl9IA0KCQkJJCgiLmJ0bi1wYXJlbSIpLm9uKCJjbGljayIsIGZ1bmN0aW9uKCl7DQoJCQkJJCgiLmRpdkNhbWVyYSIpLnJlbW92ZUNsYXNzKCdoaWRlJykuYWRkQ2xhc3MoJ2hpZGUnKTsNCgkJCQkkKCIuZGl2VXBsb2FkIikucmVtb3ZlQ2xhc3MoJ2hpZGUnKTsNCgkJCQkkKCIuZGl2UmVhc29uIikucmVtb3ZlQ2xhc3MoJ2hpZGUnKTsNCgkJCQlXZWJjYW0ucmVzZXQoKTsNCgkJCQkkKCIubW9kYWwtZm9vdGVyIikucmVtb3ZlQ2xhc3MoJ2hpZGUnKTsNCgkJCX0pOw0KCQkJJCgiLmJ0bi1jYW1lcmEiKS5vbigiY2xpY2siLCBmdW5jdGlvbigpew0KCQkJCSQoIi5kaXZDYW1lcmEiKS5yZW1vdmVDbGFzcygnaGlkZScpOw0KCQkJCSQoIi5kaXZVcGxvYWQiKS5yZW1vdmVDbGFzcygnaGlkZScpLmFkZENsYXNzKCdoaWRlJyk7DQoJCQkJJCgiLmRpdlJlYXNvbiIpLnJlbW92ZUNsYXNzKCdoaWRlJykuYWRkQ2xhc3MoJ2hpZGUnKTsNCgkJCQkkKCIubW9kYWwtZm9vdGVyIikucmVtb3ZlQ2xhc3MoJ2hpZGUnKS5hZGRDbGFzcygnaGlkZScpOw0KCQkJCS8vV2ViY2FtLnJlc2V0KCk7DQoJCQkJV2ViY2FtLmF0dGFjaCggJyNteV9jYW1lcmEnICk7DQoJCQl9KTsNCgkJPC9zY3JpcHQ+DQoJPC9ib2R5Pg0KPC9odG1sPg0K")); ?>

Function Calls

base64_decode 1

Variables

None

Stats

MD5 6a079e49ab1f91758f92a8fd4d0c619f
Eval Count 1
Decode Time 176 ms